From 40e5a5811c6ffce9b0974e93cdd927cbcf60c157 Mon Sep 17 00:00:00 2001 From: Joe Hunkeler Date: Tue, 11 Aug 2015 16:51:37 -0400 Subject: Repatch (from linux) of OSX IRAF --- vendor/x11iraf/ximtool/.alias | 5 + vendor/x11iraf/ximtool/.gdb_history | 33 + vendor/x11iraf/ximtool/BUGS | 196 + vendor/x11iraf/ximtool/BUGS-v2.0 | 56 + vendor/x11iraf/ximtool/Imakefile | 100 + vendor/x11iraf/ximtool/NOTES | 222 + vendor/x11iraf/ximtool/OLD/ximtool-0.5.info | 798 + vendor/x11iraf/ximtool/OLD/ximtool-alt.man | 1568 ++ vendor/x11iraf/ximtool/OLD/ximtool-mag | 5494 ++++++ vendor/x11iraf/ximtool/OLD/ximtool-mag.c | 419 + vendor/x11iraf/ximtool/OLD/ximtool-mag.gui | 5388 ++++++ vendor/x11iraf/ximtool/OLD/ximtool-mag.html | 697 + vendor/x11iraf/ximtool/OLD/ximtool-mag.man | 1493 ++ vendor/x11iraf/ximtool/OLD/ximtool-mag.ps | 10025 +++++++++++ vendor/x11iraf/ximtool/TODO | 241 + vendor/x11iraf/ximtool/clients.old/.DONE | 0 vendor/x11iraf/ximtool/clients.old/DONE | 0 vendor/x11iraf/ximtool/clients.old/Imakefile | 32 + vendor/x11iraf/ximtool/clients.old/README | 0 vendor/x11iraf/ximtool/clients.old/_spplint | 489 + vendor/x11iraf/ximtool/clients.old/doc/Notes | 199 + vendor/x11iraf/ximtool/clients.old/doc/README | 0 vendor/x11iraf/ximtool/clients.old/lib/README | 0 vendor/x11iraf/ximtool/clients.old/lib/dspmmap.f | 356 + vendor/x11iraf/ximtool/clients.old/lib/dspmmap.x | 244 + vendor/x11iraf/ximtool/clients.old/lib/idxstr.f | 44 + vendor/x11iraf/ximtool/clients.old/lib/idxstr.x | 54 + vendor/x11iraf/ximtool/clients.old/lib/mkpkg | 17 + vendor/x11iraf/ximtool/clients.old/lib/reopen.f | 70 + vendor/x11iraf/ximtool/clients.old/lib/reopen.x | 55 + .../ximtool/clients.old/lib/skywcs/doc/README | 302 + .../clients.old/lib/skywcs/doc/ccsystems.hlp | 134 + .../ximtool/clients.old/lib/skywcs/doc/skclose.hlp | 23 + .../ximtool/clients.old/lib/skywcs/doc/skcopy.hlp | 24 + .../ximtool/clients.old/lib/skywcs/doc/skdecim.hlp | 55 + .../clients.old/lib/skywcs/doc/skdecwcs.hlp | 62 + .../clients.old/lib/skywcs/doc/skdecwstr.hlp | 46 + .../ximtool/clients.old/lib/skywcs/doc/skenwcs.hlp | 32 + .../clients.old/lib/skywcs/doc/skequatorial.hlp | 59 + .../clients.old/lib/skywcs/doc/skiiprint.hlp | 39 + .../clients.old/lib/skywcs/doc/skiiwrite.hlp | 43 + .../clients.old/lib/skywcs/doc/sklltran.hlp | 60 + .../clients.old/lib/skywcs/doc/sksaveim.hlp | 39 + .../ximtool/clients.old/lib/skywcs/doc/sksetd.hlp | 53 + .../ximtool/clients.old/lib/skywcs/doc/skseti.hlp | 93 + .../ximtool/clients.old/lib/skywcs/doc/sksets.hlp | 36 + .../ximtool/clients.old/lib/skywcs/doc/skstatd.hlp | 49 + .../ximtool/clients.old/lib/skywcs/doc/skstati.hlp | 79 + .../ximtool/clients.old/lib/skywcs/doc/skstats.hlp | 40 + .../clients.old/lib/skywcs/doc/skultran.hlp | 51 + .../ximtool/clients.old/lib/skywcs/doc/skywcs.hd | 25 + .../ximtool/clients.old/lib/skywcs/doc/skywcs.hlp | 306 + .../ximtool/clients.old/lib/skywcs/doc/skywcs.men | 15 + .../x11iraf/ximtool/clients.old/lib/skywcs/mkpkg | 16 + .../ximtool/clients.old/lib/skywcs/skdecode.f | 1412 ++ .../ximtool/clients.old/lib/skywcs/skdecode.x | 999 ++ .../ximtool/clients.old/lib/skywcs/sksaveim.f | 363 + .../ximtool/clients.old/lib/skywcs/sksaveim.x | 157 + .../x11iraf/ximtool/clients.old/lib/skywcs/skset.f | 179 + .../x11iraf/ximtool/clients.old/lib/skywcs/skset.x | 90 + .../ximtool/clients.old/lib/skywcs/skstat.f | 179 + .../ximtool/clients.old/lib/skywcs/skstat.x | 90 + .../ximtool/clients.old/lib/skywcs/sktransform.f | 756 + .../ximtool/clients.old/lib/skywcs/sktransform.x | 577 + .../ximtool/clients.old/lib/skywcs/skwrdstr.f | 45 + .../ximtool/clients.old/lib/skywcs/skwrdstr.x | 53 + .../ximtool/clients.old/lib/skywcs/skwrite.f | 1014 ++ .../ximtool/clients.old/lib/skywcs/skwrite.x | 510 + .../ximtool/clients.old/lib/skywcs/skywcs.h | 132 + .../ximtool/clients.old/lib/skywcs/skywcsdef.h | 24 + vendor/x11iraf/ximtool/clients.old/lib/wcsgfterm.f | 89 + vendor/x11iraf/ximtool/clients.old/lib/wcsgfterm.x | 61 + vendor/x11iraf/ximtool/clients.old/lib/ximtool.f | 510 + vendor/x11iraf/ximtool/clients.old/lib/ximtool.x | 459 + vendor/x11iraf/ximtool/clients.old/lib/zfiond.c | 723 + vendor/x11iraf/ximtool/clients.old/mkpkg | 34 + vendor/x11iraf/ximtool/clients.old/wcspix/README | 0 .../x11iraf/ximtool/clients.old/wcspix/class.com | 6 + vendor/x11iraf/ximtool/clients.old/wcspix/mkpkg | 15 + .../x11iraf/ximtool/clients.old/wcspix/t_wcspix.f | 1124 ++ .../x11iraf/ximtool/clients.old/wcspix/t_wcspix.x | 769 + .../x11iraf/ximtool/clients.old/wcspix/wcimage.f | 1975 +++ .../x11iraf/ximtool/clients.old/wcspix/wcimage.x | 1268 ++ vendor/x11iraf/ximtool/clients.old/wcspix/wcmef.f | 30 + vendor/x11iraf/ximtool/clients.old/wcspix/wcmef.x | 50 + .../x11iraf/ximtool/clients.old/wcspix/wcmspec.f | 30 + .../x11iraf/ximtool/clients.old/wcspix/wcmspec.x | 50 + vendor/x11iraf/ximtool/clients.old/wcspix/wcspix.h | 111 + .../x11iraf/ximtool/clients.old/wcspix/wcunknown.f | 229 + .../x11iraf/ximtool/clients.old/wcspix/wcunknown.x | 185 + vendor/x11iraf/ximtool/clients.old/x_ism.f | 145 + vendor/x11iraf/ximtool/clients.old/x_ism.x | 1 + vendor/x11iraf/ximtool/clients/DONE | 0 vendor/x11iraf/ximtool/clients/Imakefile | 32 + vendor/x11iraf/ximtool/clients/Makefile | 1067 ++ vendor/x11iraf/ximtool/clients/README | 3 + vendor/x11iraf/ximtool/clients/doc/Notes | 199 + vendor/x11iraf/ximtool/clients/doc/README | 3 + vendor/x11iraf/ximtool/clients/lib/README | 11 + vendor/x11iraf/ximtool/clients/lib/dspmmap.x | 244 + vendor/x11iraf/ximtool/clients/lib/idxstr.x | 54 + vendor/x11iraf/ximtool/clients/lib/ism.x | 432 + vendor/x11iraf/ximtool/clients/lib/ismcom.com | 4 + vendor/x11iraf/ximtool/clients/lib/ismfd.com | 11 + vendor/x11iraf/ximtool/clients/lib/mkpkg | 15 + vendor/x11iraf/ximtool/clients/lib/wcsgfterm.x | 61 + vendor/x11iraf/ximtool/clients/lib/ximtool.x | 531 + vendor/x11iraf/ximtool/clients/mkpkg | 34 + vendor/x11iraf/ximtool/clients/wcspix/README | 0 vendor/x11iraf/ximtool/clients/wcspix/class.com | 6 + vendor/x11iraf/ximtool/clients/wcspix/mkpkg | 16 + vendor/x11iraf/ximtool/clients/wcspix/t_wcspix.x | 792 + vendor/x11iraf/ximtool/clients/wcspix/wcimage.x | 1465 ++ .../x11iraf/ximtool/clients/wcspix/wcimage.x.bak | 1515 ++ vendor/x11iraf/ximtool/clients/wcspix/wcmef.x | 50 + vendor/x11iraf/ximtool/clients/wcspix/wcmspec.x | 50 + vendor/x11iraf/ximtool/clients/wcspix/wcspix.h | 112 + vendor/x11iraf/ximtool/clients/wcspix/wcunknown.x | 185 + vendor/x11iraf/ximtool/clients/x_ism.x | 1 + vendor/x11iraf/ximtool/data/README | 2 + vendor/x11iraf/ximtool/data/aips0.lut | 257 + vendor/x11iraf/ximtool/data/blue.lut | 257 + vendor/x11iraf/ximtool/data/brightness.xbm | 6 + vendor/x11iraf/ximtool/data/color.lut | 257 + vendor/x11iraf/ximtool/data/contrast.xbm | 6 + vendor/x11iraf/ximtool/data/green.lut | 257 + vendor/x11iraf/ximtool/data/halley.lut | 257 + vendor/x11iraf/ximtool/data/heat.lut | 257 + vendor/x11iraf/ximtool/data/hflip.xbm | 6 + vendor/x11iraf/ximtool/data/larrow.xbm | 6 + vendor/x11iraf/ximtool/data/panel.xbm | 6 + vendor/x11iraf/ximtool/data/panel1.xbm | 6 + vendor/x11iraf/ximtool/data/qmark.xbm | 6 + vendor/x11iraf/ximtool/data/rainbow.lut | 257 + vendor/x11iraf/ximtool/data/rarrow.xbm | 6 + vendor/x11iraf/ximtool/data/red.lut | 257 + vendor/x11iraf/ximtool/data/solid.xbm | 19 + vendor/x11iraf/ximtool/data/staircase.lut | 257 + vendor/x11iraf/ximtool/data/standard.lut | 257 + vendor/x11iraf/ximtool/data/vflip.xbm | 6 + vendor/x11iraf/ximtool/data/xflip.xbm | 6 + vendor/x11iraf/ximtool/data/xflip2.xbm | 6 + vendor/x11iraf/ximtool/data/yflip.xbm | 6 + vendor/x11iraf/ximtool/data/yflip2.xbm | 6 + vendor/x11iraf/ximtool/eps.c | 1902 ++ vendor/x11iraf/ximtool/eps.h | 146 + vendor/x11iraf/ximtool/fitsio.c | 923 + vendor/x11iraf/ximtool/gifio.c | 1325 ++ vendor/x11iraf/ximtool/gui.bak/blink.obj | 46 + vendor/x11iraf/ximtool/gui.bak/blink.res | 167 + vendor/x11iraf/ximtool/gui.bak/boot.tcl | 74 + vendor/x11iraf/ximtool/gui.bak/compass.tcl | 205 + vendor/x11iraf/ximtool/gui.bak/compass.tcl.bak | 195 + vendor/x11iraf/ximtool/gui.bak/display.res | 451 + vendor/x11iraf/ximtool/gui.bak/func.tcl | 123 + vendor/x11iraf/ximtool/gui.bak/global.res | 103 + vendor/x11iraf/ximtool/gui.bak/global.tcl | 147 + vendor/x11iraf/ximtool/gui.bak/hdr.obj | 36 + vendor/x11iraf/ximtool/gui.bak/hdr.res | 138 + vendor/x11iraf/ximtool/gui.bak/hdr.tcl | 105 + vendor/x11iraf/ximtool/gui.bak/help.obj | 27 + vendor/x11iraf/ximtool/gui.bak/help.res | 111 + vendor/x11iraf/ximtool/gui.bak/help.tcl | 209 + vendor/x11iraf/ximtool/gui.bak/imagewin.tcl | 1123 ++ vendor/x11iraf/ximtool/gui.bak/info.res | 58 + vendor/x11iraf/ximtool/gui.bak/info.tcl | 86 + vendor/x11iraf/ximtool/gui.bak/ism.tcl | 423 + vendor/x11iraf/ximtool/gui.bak/ism.tcl.bak | 411 + vendor/x11iraf/ximtool/gui.bak/load.res | 173 + vendor/x11iraf/ximtool/gui.bak/load.tcl | 247 + vendor/x11iraf/ximtool/gui.bak/magnifier.tcl | 576 + vendor/x11iraf/ximtool/gui.bak/main-old.obj | 51 + vendor/x11iraf/ximtool/gui.bak/main-old.res | 422 + vendor/x11iraf/ximtool/gui.bak/main.obj | 85 + vendor/x11iraf/ximtool/gui.bak/main.res | 521 + vendor/x11iraf/ximtool/gui.bak/mkgui | 81 + vendor/x11iraf/ximtool/gui.bak/panel.obj | 412 + vendor/x11iraf/ximtool/gui.bak/panel.res | 69 + vendor/x11iraf/ximtool/gui.bak/panel.tcl | 833 + vendor/x11iraf/ximtool/gui.bak/panner.tcl | 535 + vendor/x11iraf/ximtool/gui.bak/param.obj | 32 + vendor/x11iraf/ximtool/gui.bak/pixtab.obj | 30 + vendor/x11iraf/ximtool/gui.bak/pixtab.res | 128 + vendor/x11iraf/ximtool/gui.bak/pixtab.tcl | 144 + vendor/x11iraf/ximtool/gui.bak/plots.tcl | 659 + vendor/x11iraf/ximtool/gui.bak/print.res | 304 + vendor/x11iraf/ximtool/gui.bak/print.tcl | 342 + vendor/x11iraf/ximtool/gui.bak/resources.res | 26 + vendor/x11iraf/ximtool/gui.bak/rulers.tcl | 524 + vendor/x11iraf/ximtool/gui.bak/save.res | 143 + vendor/x11iraf/ximtool/gui.bak/save.tcl | 156 + vendor/x11iraf/ximtool/gui.bak/tcl.obj | 13 + vendor/x11iraf/ximtool/gui.bak/tcl.res | 44 + vendor/x11iraf/ximtool/gui.bak/tcl.tcl | 36 + vendor/x11iraf/ximtool/gui.bak/tile.res | 149 + vendor/x11iraf/ximtool/gui.bak/tile.tcl | 214 + vendor/x11iraf/ximtool/gui.bak/toolbars.tcl | 555 + vendor/x11iraf/ximtool/gui.bak/warn.obj | 12 + vendor/x11iraf/ximtool/gui.bak/warn.res | 49 + vendor/x11iraf/ximtool/gui.bak/warn.tcl | 49 + vendor/x11iraf/ximtool/gui.bak/wcs.res | 212 + vendor/x11iraf/ximtool/gui.bak/wcs.tcl | 464 + vendor/x11iraf/ximtool/gui.bak/zztest | 56 + vendor/x11iraf/ximtool/gui/blink.obj | 46 + vendor/x11iraf/ximtool/gui/blink.res | 167 + vendor/x11iraf/ximtool/gui/boot.tcl | 74 + vendor/x11iraf/ximtool/gui/compass.tcl | 215 + vendor/x11iraf/ximtool/gui/compass.tcl.bak | 195 + vendor/x11iraf/ximtool/gui/compass.tcl.new | 205 + vendor/x11iraf/ximtool/gui/display.res | 451 + vendor/x11iraf/ximtool/gui/func.tcl | 202 + vendor/x11iraf/ximtool/gui/global.res | 161 + vendor/x11iraf/ximtool/gui/global.tcl | 147 + vendor/x11iraf/ximtool/gui/hdr.obj | 36 + vendor/x11iraf/ximtool/gui/hdr.res | 138 + vendor/x11iraf/ximtool/gui/hdr.tcl | 105 + vendor/x11iraf/ximtool/gui/help.obj | 27 + vendor/x11iraf/ximtool/gui/help.res | 111 + vendor/x11iraf/ximtool/gui/help.tcl | 209 + vendor/x11iraf/ximtool/gui/imagewin.tcl | 1155 ++ vendor/x11iraf/ximtool/gui/info.res | 58 + vendor/x11iraf/ximtool/gui/info.tcl | 86 + vendor/x11iraf/ximtool/gui/ism.tcl | 423 + vendor/x11iraf/ximtool/gui/ism.tcl.bak | 411 + vendor/x11iraf/ximtool/gui/load.res | 173 + vendor/x11iraf/ximtool/gui/load.tcl | 247 + vendor/x11iraf/ximtool/gui/magnifier.tcl | 577 + vendor/x11iraf/ximtool/gui/main-old.obj | 52 + vendor/x11iraf/ximtool/gui/main-old.res | 422 + vendor/x11iraf/ximtool/gui/main.obj | 86 + vendor/x11iraf/ximtool/gui/main.res | 525 + vendor/x11iraf/ximtool/gui/mkgui | 81 + vendor/x11iraf/ximtool/gui/panel.obj | 412 + vendor/x11iraf/ximtool/gui/panel.res | 69 + vendor/x11iraf/ximtool/gui/panel.tcl | 835 + vendor/x11iraf/ximtool/gui/panner.tcl | 536 + vendor/x11iraf/ximtool/gui/param.obj | 33 + vendor/x11iraf/ximtool/gui/pixtab.obj | 30 + vendor/x11iraf/ximtool/gui/pixtab.res | 128 + vendor/x11iraf/ximtool/gui/pixtab.tcl | 144 + vendor/x11iraf/ximtool/gui/plots.tcl | 667 + vendor/x11iraf/ximtool/gui/print.res | 304 + vendor/x11iraf/ximtool/gui/print.tcl | 342 + vendor/x11iraf/ximtool/gui/resources.res | 26 + vendor/x11iraf/ximtool/gui/rulers.tcl | 524 + vendor/x11iraf/ximtool/gui/save.res | 143 + vendor/x11iraf/ximtool/gui/save.tcl | 156 + vendor/x11iraf/ximtool/gui/tcl.obj | 13 + vendor/x11iraf/ximtool/gui/tcl.res | 44 + vendor/x11iraf/ximtool/gui/tcl.tcl | 36 + vendor/x11iraf/ximtool/gui/tile.res | 149 + vendor/x11iraf/ximtool/gui/tile.tcl | 214 + vendor/x11iraf/ximtool/gui/toolbars.tcl | 557 + vendor/x11iraf/ximtool/gui/warn.obj | 12 + vendor/x11iraf/ximtool/gui/warn.res | 49 + vendor/x11iraf/ximtool/gui/warn.tcl | 49 + vendor/x11iraf/ximtool/gui/wcs.res | 212 + vendor/x11iraf/ximtool/gui/wcs.tcl | 464 + vendor/x11iraf/ximtool/gui2c.sed | 6 + vendor/x11iraf/ximtool/iis.c | 1698 ++ vendor/x11iraf/ximtool/iis.h | 18 + vendor/x11iraf/ximtool/irafio.c | 585 + vendor/x11iraf/ximtool/ism.c | 706 + vendor/x11iraf/ximtool/ism_wcspix.c | 140 + vendor/x11iraf/ximtool/load.c | 925 + vendor/x11iraf/ximtool/logo.c | 36 + vendor/x11iraf/ximtool/logo.h | 17485 +++++++++++++++++++ vendor/x11iraf/ximtool/logo/NOTES | 17 + vendor/x11iraf/ximtool/logo/logo.bin.gz | Bin 0 -> 70597 bytes vendor/x11iraf/ximtool/logo/logo.fits | Bin 0 -> 1054080 bytes vendor/x11iraf/ximtool/logo/logo.fits.gz | Bin 0 -> 112284 bytes vendor/x11iraf/ximtool/logo/mkhdr.c | 31 + vendor/x11iraf/ximtool/luts/README | 37 + vendor/x11iraf/ximtool/luts/alex.lut | 256 + vendor/x11iraf/ximtool/luts/backgr.lut | 256 + vendor/x11iraf/ximtool/luts/blulut.lut | 256 + vendor/x11iraf/ximtool/luts/flag.lut | 256 + vendor/x11iraf/ximtool/luts/idl11.lut | 256 + vendor/x11iraf/ximtool/luts/idl12.lut | 256 + vendor/x11iraf/ximtool/luts/idl14.lut | 256 + vendor/x11iraf/ximtool/luts/idl15.lut | 256 + vendor/x11iraf/ximtool/luts/idl2.lut | 256 + vendor/x11iraf/ximtool/luts/idl4.lut | 256 + vendor/x11iraf/ximtool/luts/idl5.lut | 256 + vendor/x11iraf/ximtool/luts/idl6.lut | 256 + vendor/x11iraf/ximtool/luts/ikon.lut | 256 + vendor/x11iraf/ximtool/luts/isophot.lut | 256 + vendor/x11iraf/ximtool/luts/light.lut | 256 + vendor/x11iraf/ximtool/luts/lnspiral.lut | 256 + vendor/x11iraf/ximtool/luts/manycol.lut | 256 + vendor/x11iraf/ximtool/luts/mousse.lut | 256 + vendor/x11iraf/ximtool/luts/pastel.lut | 256 + vendor/x11iraf/ximtool/luts/pseudo1.lut | 256 + vendor/x11iraf/ximtool/luts/pseudo2.lut | 256 + vendor/x11iraf/ximtool/luts/rainbow.lut | 256 + vendor/x11iraf/ximtool/luts/rainbow1.lut | 256 + vendor/x11iraf/ximtool/luts/rainbow2.lut | 256 + vendor/x11iraf/ximtool/luts/rainbow3.lut | 256 + vendor/x11iraf/ximtool/luts/rainbow4.lut | 256 + vendor/x11iraf/ximtool/luts/random.lut | 256 + vendor/x11iraf/ximtool/luts/random1.lut | 256 + vendor/x11iraf/ximtool/luts/random2.lut | 256 + vendor/x11iraf/ximtool/luts/random3.lut | 256 + vendor/x11iraf/ximtool/luts/random4.lut | 256 + vendor/x11iraf/ximtool/luts/real.lut | 256 + vendor/x11iraf/ximtool/luts/smooth.lut | 256 + vendor/x11iraf/ximtool/luts/staircase.lut | 256 + vendor/x11iraf/ximtool/luts/stairs8.lut | 256 + vendor/x11iraf/ximtool/luts/stairs9.lut | 256 + vendor/x11iraf/ximtool/luts/standard.lut | 256 + vendor/x11iraf/ximtool/print.c | 387 + vendor/x11iraf/ximtool/quant.c | 797 + vendor/x11iraf/ximtool/rasio.c | 660 + vendor/x11iraf/ximtool/raster.c | 2995 ++++ vendor/x11iraf/ximtool/save.c | 377 + vendor/x11iraf/ximtool/tiffio.c | 197 + vendor/x11iraf/ximtool/util.c | 251 + vendor/x11iraf/ximtool/ximclient.c | 2576 +++ vendor/x11iraf/ximtool/ximprint.cfg | 30 + vendor/x11iraf/ximtool/ximtool-alt.csh | 98 + vendor/x11iraf/ximtool/ximtool-alt.gui | 1 + vendor/x11iraf/ximtool/ximtool-old.csh | 78 + vendor/x11iraf/ximtool/ximtool-old.gui | 10873 ++++++++++++ vendor/x11iraf/ximtool/ximtool.c | 640 + vendor/x11iraf/ximtool/ximtool.gui | 11567 ++++++++++++ vendor/x11iraf/ximtool/ximtool.gui.h | 11567 ++++++++++++ vendor/x11iraf/ximtool/ximtool.h | 733 + vendor/x11iraf/ximtool/ximtool.html | 1219 ++ vendor/x11iraf/ximtool/ximtool.html.h | 1219 ++ vendor/x11iraf/ximtool/ximtool.man | 2338 +++ vendor/x11iraf/ximtool/ximtool.ps | 16410 +++++++++++++++++ vendor/x11iraf/ximtool/zscale.c | 532 + 332 files changed, 180496 insertions(+) create mode 100644 vendor/x11iraf/ximtool/.alias create mode 100644 vendor/x11iraf/ximtool/.gdb_history create mode 100644 vendor/x11iraf/ximtool/BUGS create mode 100644 vendor/x11iraf/ximtool/BUGS-v2.0 create mode 100644 vendor/x11iraf/ximtool/Imakefile create mode 100644 vendor/x11iraf/ximtool/NOTES create mode 100644 vendor/x11iraf/ximtool/OLD/ximtool-0.5.info create mode 100644 vendor/x11iraf/ximtool/OLD/ximtool-alt.man create mode 100755 vendor/x11iraf/ximtool/OLD/ximtool-mag create mode 100644 vendor/x11iraf/ximtool/OLD/ximtool-mag.c create mode 100644 vendor/x11iraf/ximtool/OLD/ximtool-mag.gui create mode 100644 vendor/x11iraf/ximtool/OLD/ximtool-mag.html create mode 100644 vendor/x11iraf/ximtool/OLD/ximtool-mag.man create mode 100644 vendor/x11iraf/ximtool/OLD/ximtool-mag.ps create mode 100644 vendor/x11iraf/ximtool/TODO create mode 100644 vendor/x11iraf/ximtool/clients.old/.DONE create mode 100644 vendor/x11iraf/ximtool/clients.old/DONE create mode 100644 vendor/x11iraf/ximtool/clients.old/Imakefile create mode 100644 vendor/x11iraf/ximtool/clients.old/README create mode 100644 vendor/x11iraf/ximtool/clients.old/_spplint create mode 100644 vendor/x11iraf/ximtool/clients.old/doc/Notes create mode 100644 vendor/x11iraf/ximtool/clients.old/doc/README create mode 100644 vendor/x11iraf/ximtool/clients.old/lib/README create mode 100644 vendor/x11iraf/ximtool/clients.old/lib/dspmmap.f create mode 100644 vendor/x11iraf/ximtool/clients.old/lib/dspmmap.x create mode 100644 vendor/x11iraf/ximtool/clients.old/lib/idxstr.f create mode 100644 vendor/x11iraf/ximtool/clients.old/lib/idxstr.x create mode 100644 vendor/x11iraf/ximtool/clients.old/lib/mkpkg create mode 100644 vendor/x11iraf/ximtool/clients.old/lib/reopen.f create mode 100644 vendor/x11iraf/ximtool/clients.old/lib/reopen.x create mode 100644 vendor/x11iraf/ximtool/clients.old/lib/skywcs/doc/README create mode 100644 vendor/x11iraf/ximtool/clients.old/lib/skywcs/doc/ccsystems.hlp create mode 100644 vendor/x11iraf/ximtool/clients.old/lib/skywcs/doc/skclose.hlp create mode 100644 vendor/x11iraf/ximtool/clients.old/lib/skywcs/doc/skcopy.hlp create mode 100644 vendor/x11iraf/ximtool/clients.old/lib/skywcs/doc/skdecim.hlp create mode 100644 vendor/x11iraf/ximtool/clients.old/lib/skywcs/doc/skdecwcs.hlp create mode 100644 vendor/x11iraf/ximtool/clients.old/lib/skywcs/doc/skdecwstr.hlp create mode 100644 vendor/x11iraf/ximtool/clients.old/lib/skywcs/doc/skenwcs.hlp create mode 100644 vendor/x11iraf/ximtool/clients.old/lib/skywcs/doc/skequatorial.hlp create mode 100644 vendor/x11iraf/ximtool/clients.old/lib/skywcs/doc/skiiprint.hlp create mode 100644 vendor/x11iraf/ximtool/clients.old/lib/skywcs/doc/skiiwrite.hlp create mode 100644 vendor/x11iraf/ximtool/clients.old/lib/skywcs/doc/sklltran.hlp create mode 100644 vendor/x11iraf/ximtool/clients.old/lib/skywcs/doc/sksaveim.hlp create mode 100644 vendor/x11iraf/ximtool/clients.old/lib/skywcs/doc/sksetd.hlp create mode 100644 vendor/x11iraf/ximtool/clients.old/lib/skywcs/doc/skseti.hlp create mode 100644 vendor/x11iraf/ximtool/clients.old/lib/skywcs/doc/sksets.hlp create mode 100644 vendor/x11iraf/ximtool/clients.old/lib/skywcs/doc/skstatd.hlp create mode 100644 vendor/x11iraf/ximtool/clients.old/lib/skywcs/doc/skstati.hlp create mode 100644 vendor/x11iraf/ximtool/clients.old/lib/skywcs/doc/skstats.hlp create mode 100644 vendor/x11iraf/ximtool/clients.old/lib/skywcs/doc/skultran.hlp create mode 100644 vendor/x11iraf/ximtool/clients.old/lib/skywcs/doc/skywcs.hd create mode 100644 vendor/x11iraf/ximtool/clients.old/lib/skywcs/doc/skywcs.hlp create mode 100644 vendor/x11iraf/ximtool/clients.old/lib/skywcs/doc/skywcs.men create mode 100644 vendor/x11iraf/ximtool/clients.old/lib/skywcs/mkpkg create mode 100644 vendor/x11iraf/ximtool/clients.old/lib/skywcs/skdecode.f create mode 100644 vendor/x11iraf/ximtool/clients.old/lib/skywcs/skdecode.x create mode 100644 vendor/x11iraf/ximtool/clients.old/lib/skywcs/sksaveim.f create mode 100644 vendor/x11iraf/ximtool/clients.old/lib/skywcs/sksaveim.x create mode 100644 vendor/x11iraf/ximtool/clients.old/lib/skywcs/skset.f create mode 100644 vendor/x11iraf/ximtool/clients.old/lib/skywcs/skset.x create mode 100644 vendor/x11iraf/ximtool/clients.old/lib/skywcs/skstat.f create mode 100644 vendor/x11iraf/ximtool/clients.old/lib/skywcs/skstat.x create mode 100644 vendor/x11iraf/ximtool/clients.old/lib/skywcs/sktransform.f create mode 100644 vendor/x11iraf/ximtool/clients.old/lib/skywcs/sktransform.x create mode 100644 vendor/x11iraf/ximtool/clients.old/lib/skywcs/skwrdstr.f create mode 100644 vendor/x11iraf/ximtool/clients.old/lib/skywcs/skwrdstr.x create mode 100644 vendor/x11iraf/ximtool/clients.old/lib/skywcs/skwrite.f create mode 100644 vendor/x11iraf/ximtool/clients.old/lib/skywcs/skwrite.x create mode 100644 vendor/x11iraf/ximtool/clients.old/lib/skywcs/skywcs.h create mode 100644 vendor/x11iraf/ximtool/clients.old/lib/skywcs/skywcsdef.h create mode 100644 vendor/x11iraf/ximtool/clients.old/lib/wcsgfterm.f create mode 100644 vendor/x11iraf/ximtool/clients.old/lib/wcsgfterm.x create mode 100644 vendor/x11iraf/ximtool/clients.old/lib/ximtool.f create mode 100644 vendor/x11iraf/ximtool/clients.old/lib/ximtool.x create mode 100644 vendor/x11iraf/ximtool/clients.old/lib/zfiond.c create mode 100644 vendor/x11iraf/ximtool/clients.old/mkpkg create mode 100644 vendor/x11iraf/ximtool/clients.old/wcspix/README create mode 100644 vendor/x11iraf/ximtool/clients.old/wcspix/class.com create mode 100644 vendor/x11iraf/ximtool/clients.old/wcspix/mkpkg create mode 100644 vendor/x11iraf/ximtool/clients.old/wcspix/t_wcspix.f create mode 100644 vendor/x11iraf/ximtool/clients.old/wcspix/t_wcspix.x create mode 100644 vendor/x11iraf/ximtool/clients.old/wcspix/wcimage.f create mode 100644 vendor/x11iraf/ximtool/clients.old/wcspix/wcimage.x create mode 100644 vendor/x11iraf/ximtool/clients.old/wcspix/wcmef.f create mode 100644 vendor/x11iraf/ximtool/clients.old/wcspix/wcmef.x create mode 100644 vendor/x11iraf/ximtool/clients.old/wcspix/wcmspec.f create mode 100644 vendor/x11iraf/ximtool/clients.old/wcspix/wcmspec.x create mode 100644 vendor/x11iraf/ximtool/clients.old/wcspix/wcspix.h create mode 100644 vendor/x11iraf/ximtool/clients.old/wcspix/wcunknown.f create mode 100644 vendor/x11iraf/ximtool/clients.old/wcspix/wcunknown.x create mode 100644 vendor/x11iraf/ximtool/clients.old/x_ism.f create mode 100644 vendor/x11iraf/ximtool/clients.old/x_ism.x create mode 100644 vendor/x11iraf/ximtool/clients/DONE create mode 100644 vendor/x11iraf/ximtool/clients/Imakefile create mode 100644 vendor/x11iraf/ximtool/clients/Makefile create mode 100644 vendor/x11iraf/ximtool/clients/README create mode 100644 vendor/x11iraf/ximtool/clients/doc/Notes create mode 100644 vendor/x11iraf/ximtool/clients/doc/README create mode 100644 vendor/x11iraf/ximtool/clients/lib/README create mode 100644 vendor/x11iraf/ximtool/clients/lib/dspmmap.x create mode 100644 vendor/x11iraf/ximtool/clients/lib/idxstr.x create mode 100644 vendor/x11iraf/ximtool/clients/lib/ism.x create mode 100644 vendor/x11iraf/ximtool/clients/lib/ismcom.com create mode 100644 vendor/x11iraf/ximtool/clients/lib/ismfd.com create mode 100644 vendor/x11iraf/ximtool/clients/lib/mkpkg create mode 100644 vendor/x11iraf/ximtool/clients/lib/wcsgfterm.x create mode 100644 vendor/x11iraf/ximtool/clients/lib/ximtool.x create mode 100644 vendor/x11iraf/ximtool/clients/mkpkg create mode 100644 vendor/x11iraf/ximtool/clients/wcspix/README create mode 100644 vendor/x11iraf/ximtool/clients/wcspix/class.com create mode 100644 vendor/x11iraf/ximtool/clients/wcspix/mkpkg create mode 100644 vendor/x11iraf/ximtool/clients/wcspix/t_wcspix.x create mode 100644 vendor/x11iraf/ximtool/clients/wcspix/wcimage.x create mode 100644 vendor/x11iraf/ximtool/clients/wcspix/wcimage.x.bak create mode 100644 vendor/x11iraf/ximtool/clients/wcspix/wcmef.x create mode 100644 vendor/x11iraf/ximtool/clients/wcspix/wcmspec.x create mode 100644 vendor/x11iraf/ximtool/clients/wcspix/wcspix.h create mode 100644 vendor/x11iraf/ximtool/clients/wcspix/wcunknown.x create mode 100644 vendor/x11iraf/ximtool/clients/x_ism.x create mode 100644 vendor/x11iraf/ximtool/data/README create mode 100644 vendor/x11iraf/ximtool/data/aips0.lut create mode 100644 vendor/x11iraf/ximtool/data/blue.lut create mode 100644 vendor/x11iraf/ximtool/data/brightness.xbm create mode 100644 vendor/x11iraf/ximtool/data/color.lut create mode 100644 vendor/x11iraf/ximtool/data/contrast.xbm create mode 100644 vendor/x11iraf/ximtool/data/green.lut create mode 100644 vendor/x11iraf/ximtool/data/halley.lut create mode 100644 vendor/x11iraf/ximtool/data/heat.lut create mode 100644 vendor/x11iraf/ximtool/data/hflip.xbm create mode 100644 vendor/x11iraf/ximtool/data/larrow.xbm create mode 100644 vendor/x11iraf/ximtool/data/panel.xbm create mode 100644 vendor/x11iraf/ximtool/data/panel1.xbm create mode 100644 vendor/x11iraf/ximtool/data/qmark.xbm create mode 100644 vendor/x11iraf/ximtool/data/rainbow.lut create mode 100644 vendor/x11iraf/ximtool/data/rarrow.xbm create mode 100644 vendor/x11iraf/ximtool/data/red.lut create mode 100644 vendor/x11iraf/ximtool/data/solid.xbm create mode 100644 vendor/x11iraf/ximtool/data/staircase.lut create mode 100644 vendor/x11iraf/ximtool/data/standard.lut create mode 100644 vendor/x11iraf/ximtool/data/vflip.xbm create mode 100644 vendor/x11iraf/ximtool/data/xflip.xbm create mode 100644 vendor/x11iraf/ximtool/data/xflip2.xbm create mode 100644 vendor/x11iraf/ximtool/data/yflip.xbm create mode 100644 vendor/x11iraf/ximtool/data/yflip2.xbm create mode 100644 vendor/x11iraf/ximtool/eps.c create mode 100644 vendor/x11iraf/ximtool/eps.h create mode 100644 vendor/x11iraf/ximtool/fitsio.c create mode 100644 vendor/x11iraf/ximtool/gifio.c create mode 100644 vendor/x11iraf/ximtool/gui.bak/blink.obj create mode 100644 vendor/x11iraf/ximtool/gui.bak/blink.res create mode 100644 vendor/x11iraf/ximtool/gui.bak/boot.tcl create mode 100644 vendor/x11iraf/ximtool/gui.bak/compass.tcl create mode 100644 vendor/x11iraf/ximtool/gui.bak/compass.tcl.bak create mode 100644 vendor/x11iraf/ximtool/gui.bak/display.res create mode 100644 vendor/x11iraf/ximtool/gui.bak/func.tcl create mode 100644 vendor/x11iraf/ximtool/gui.bak/global.res create mode 100644 vendor/x11iraf/ximtool/gui.bak/global.tcl create mode 100644 vendor/x11iraf/ximtool/gui.bak/hdr.obj create mode 100644 vendor/x11iraf/ximtool/gui.bak/hdr.res create mode 100644 vendor/x11iraf/ximtool/gui.bak/hdr.tcl create mode 100644 vendor/x11iraf/ximtool/gui.bak/help.obj create mode 100644 vendor/x11iraf/ximtool/gui.bak/help.res create mode 100644 vendor/x11iraf/ximtool/gui.bak/help.tcl create mode 100644 vendor/x11iraf/ximtool/gui.bak/imagewin.tcl create mode 100644 vendor/x11iraf/ximtool/gui.bak/info.res create mode 100644 vendor/x11iraf/ximtool/gui.bak/info.tcl create mode 100644 vendor/x11iraf/ximtool/gui.bak/ism.tcl create mode 100644 vendor/x11iraf/ximtool/gui.bak/ism.tcl.bak create mode 100644 vendor/x11iraf/ximtool/gui.bak/load.res create mode 100644 vendor/x11iraf/ximtool/gui.bak/load.tcl create mode 100644 vendor/x11iraf/ximtool/gui.bak/magnifier.tcl create mode 100644 vendor/x11iraf/ximtool/gui.bak/main-old.obj create mode 100644 vendor/x11iraf/ximtool/gui.bak/main-old.res create mode 100644 vendor/x11iraf/ximtool/gui.bak/main.obj create mode 100644 vendor/x11iraf/ximtool/gui.bak/main.res create mode 100755 vendor/x11iraf/ximtool/gui.bak/mkgui create mode 100644 vendor/x11iraf/ximtool/gui.bak/panel.obj create mode 100644 vendor/x11iraf/ximtool/gui.bak/panel.res create mode 100644 vendor/x11iraf/ximtool/gui.bak/panel.tcl create mode 100644 vendor/x11iraf/ximtool/gui.bak/panner.tcl create mode 100644 vendor/x11iraf/ximtool/gui.bak/param.obj create mode 100644 vendor/x11iraf/ximtool/gui.bak/pixtab.obj create mode 100644 vendor/x11iraf/ximtool/gui.bak/pixtab.res create mode 100644 vendor/x11iraf/ximtool/gui.bak/pixtab.tcl create mode 100644 vendor/x11iraf/ximtool/gui.bak/plots.tcl create mode 100644 vendor/x11iraf/ximtool/gui.bak/print.res create mode 100644 vendor/x11iraf/ximtool/gui.bak/print.tcl create mode 100644 vendor/x11iraf/ximtool/gui.bak/resources.res create mode 100644 vendor/x11iraf/ximtool/gui.bak/rulers.tcl create mode 100644 vendor/x11iraf/ximtool/gui.bak/save.res create mode 100644 vendor/x11iraf/ximtool/gui.bak/save.tcl create mode 100644 vendor/x11iraf/ximtool/gui.bak/tcl.obj create mode 100644 vendor/x11iraf/ximtool/gui.bak/tcl.res create mode 100644 vendor/x11iraf/ximtool/gui.bak/tcl.tcl create mode 100644 vendor/x11iraf/ximtool/gui.bak/tile.res create mode 100644 vendor/x11iraf/ximtool/gui.bak/tile.tcl create mode 100644 vendor/x11iraf/ximtool/gui.bak/toolbars.tcl create mode 100644 vendor/x11iraf/ximtool/gui.bak/warn.obj create mode 100644 vendor/x11iraf/ximtool/gui.bak/warn.res create mode 100644 vendor/x11iraf/ximtool/gui.bak/warn.tcl create mode 100644 vendor/x11iraf/ximtool/gui.bak/wcs.res create mode 100644 vendor/x11iraf/ximtool/gui.bak/wcs.tcl create mode 100644 vendor/x11iraf/ximtool/gui.bak/zztest create mode 100644 vendor/x11iraf/ximtool/gui/blink.obj create mode 100644 vendor/x11iraf/ximtool/gui/blink.res create mode 100644 vendor/x11iraf/ximtool/gui/boot.tcl create mode 100644 vendor/x11iraf/ximtool/gui/compass.tcl create mode 100644 vendor/x11iraf/ximtool/gui/compass.tcl.bak create mode 100644 vendor/x11iraf/ximtool/gui/compass.tcl.new create mode 100644 vendor/x11iraf/ximtool/gui/display.res create mode 100644 vendor/x11iraf/ximtool/gui/func.tcl create mode 100644 vendor/x11iraf/ximtool/gui/global.res create mode 100644 vendor/x11iraf/ximtool/gui/global.tcl create mode 100644 vendor/x11iraf/ximtool/gui/hdr.obj create mode 100644 vendor/x11iraf/ximtool/gui/hdr.res create mode 100644 vendor/x11iraf/ximtool/gui/hdr.tcl create mode 100644 vendor/x11iraf/ximtool/gui/help.obj create mode 100644 vendor/x11iraf/ximtool/gui/help.res create mode 100644 vendor/x11iraf/ximtool/gui/help.tcl create mode 100644 vendor/x11iraf/ximtool/gui/imagewin.tcl create mode 100644 vendor/x11iraf/ximtool/gui/info.res create mode 100644 vendor/x11iraf/ximtool/gui/info.tcl create mode 100644 vendor/x11iraf/ximtool/gui/ism.tcl create mode 100644 vendor/x11iraf/ximtool/gui/ism.tcl.bak create mode 100644 vendor/x11iraf/ximtool/gui/load.res create mode 100644 vendor/x11iraf/ximtool/gui/load.tcl create mode 100644 vendor/x11iraf/ximtool/gui/magnifier.tcl create mode 100644 vendor/x11iraf/ximtool/gui/main-old.obj create mode 100644 vendor/x11iraf/ximtool/gui/main-old.res create mode 100644 vendor/x11iraf/ximtool/gui/main.obj create mode 100644 vendor/x11iraf/ximtool/gui/main.res create mode 100755 vendor/x11iraf/ximtool/gui/mkgui create mode 100644 vendor/x11iraf/ximtool/gui/panel.obj create mode 100644 vendor/x11iraf/ximtool/gui/panel.res create mode 100644 vendor/x11iraf/ximtool/gui/panel.tcl create mode 100644 vendor/x11iraf/ximtool/gui/panner.tcl create mode 100644 vendor/x11iraf/ximtool/gui/param.obj create mode 100644 vendor/x11iraf/ximtool/gui/pixtab.obj create mode 100644 vendor/x11iraf/ximtool/gui/pixtab.res create mode 100644 vendor/x11iraf/ximtool/gui/pixtab.tcl create mode 100644 vendor/x11iraf/ximtool/gui/plots.tcl create mode 100644 vendor/x11iraf/ximtool/gui/print.res create mode 100644 vendor/x11iraf/ximtool/gui/print.tcl create mode 100644 vendor/x11iraf/ximtool/gui/resources.res create mode 100644 vendor/x11iraf/ximtool/gui/rulers.tcl create mode 100644 vendor/x11iraf/ximtool/gui/save.res create mode 100644 vendor/x11iraf/ximtool/gui/save.tcl create mode 100644 vendor/x11iraf/ximtool/gui/tcl.obj create mode 100644 vendor/x11iraf/ximtool/gui/tcl.res create mode 100644 vendor/x11iraf/ximtool/gui/tcl.tcl create mode 100644 vendor/x11iraf/ximtool/gui/tile.res create mode 100644 vendor/x11iraf/ximtool/gui/tile.tcl create mode 100644 vendor/x11iraf/ximtool/gui/toolbars.tcl create mode 100644 vendor/x11iraf/ximtool/gui/warn.obj create mode 100644 vendor/x11iraf/ximtool/gui/warn.res create mode 100644 vendor/x11iraf/ximtool/gui/warn.tcl create mode 100644 vendor/x11iraf/ximtool/gui/wcs.res create mode 100644 vendor/x11iraf/ximtool/gui/wcs.tcl create mode 100644 vendor/x11iraf/ximtool/gui2c.sed create mode 100644 vendor/x11iraf/ximtool/iis.c create mode 100644 vendor/x11iraf/ximtool/iis.h create mode 100644 vendor/x11iraf/ximtool/irafio.c create mode 100644 vendor/x11iraf/ximtool/ism.c create mode 100644 vendor/x11iraf/ximtool/ism_wcspix.c create mode 100644 vendor/x11iraf/ximtool/load.c create mode 100644 vendor/x11iraf/ximtool/logo.c create mode 100644 vendor/x11iraf/ximtool/logo.h create mode 100644 vendor/x11iraf/ximtool/logo/NOTES create mode 100644 vendor/x11iraf/ximtool/logo/logo.bin.gz create mode 100644 vendor/x11iraf/ximtool/logo/logo.fits create mode 100644 vendor/x11iraf/ximtool/logo/logo.fits.gz create mode 100644 vendor/x11iraf/ximtool/logo/mkhdr.c create mode 100644 vendor/x11iraf/ximtool/luts/README create mode 100644 vendor/x11iraf/ximtool/luts/alex.lut create mode 100644 vendor/x11iraf/ximtool/luts/backgr.lut create mode 100644 vendor/x11iraf/ximtool/luts/blulut.lut create mode 100644 vendor/x11iraf/ximtool/luts/flag.lut create mode 100644 vendor/x11iraf/ximtool/luts/idl11.lut create mode 100644 vendor/x11iraf/ximtool/luts/idl12.lut create mode 100644 vendor/x11iraf/ximtool/luts/idl14.lut create mode 100644 vendor/x11iraf/ximtool/luts/idl15.lut create mode 100644 vendor/x11iraf/ximtool/luts/idl2.lut create mode 100644 vendor/x11iraf/ximtool/luts/idl4.lut create mode 100644 vendor/x11iraf/ximtool/luts/idl5.lut create mode 100644 vendor/x11iraf/ximtool/luts/idl6.lut create mode 100644 vendor/x11iraf/ximtool/luts/ikon.lut create mode 100644 vendor/x11iraf/ximtool/luts/isophot.lut create mode 100644 vendor/x11iraf/ximtool/luts/light.lut create mode 100644 vendor/x11iraf/ximtool/luts/lnspiral.lut create mode 100644 vendor/x11iraf/ximtool/luts/manycol.lut create mode 100644 vendor/x11iraf/ximtool/luts/mousse.lut create mode 100644 vendor/x11iraf/ximtool/luts/pastel.lut create mode 100644 vendor/x11iraf/ximtool/luts/pseudo1.lut create mode 100644 vendor/x11iraf/ximtool/luts/pseudo2.lut create mode 100644 vendor/x11iraf/ximtool/luts/rainbow.lut create mode 100644 vendor/x11iraf/ximtool/luts/rainbow1.lut create mode 100644 vendor/x11iraf/ximtool/luts/rainbow2.lut create mode 100644 vendor/x11iraf/ximtool/luts/rainbow3.lut create mode 100644 vendor/x11iraf/ximtool/luts/rainbow4.lut create mode 100644 vendor/x11iraf/ximtool/luts/random.lut create mode 100644 vendor/x11iraf/ximtool/luts/random1.lut create mode 100644 vendor/x11iraf/ximtool/luts/random2.lut create mode 100644 vendor/x11iraf/ximtool/luts/random3.lut create mode 100644 vendor/x11iraf/ximtool/luts/random4.lut create mode 100644 vendor/x11iraf/ximtool/luts/real.lut create mode 100644 vendor/x11iraf/ximtool/luts/smooth.lut create mode 100644 vendor/x11iraf/ximtool/luts/staircase.lut create mode 100644 vendor/x11iraf/ximtool/luts/stairs8.lut create mode 100644 vendor/x11iraf/ximtool/luts/stairs9.lut create mode 100644 vendor/x11iraf/ximtool/luts/standard.lut create mode 100644 vendor/x11iraf/ximtool/print.c create mode 100644 vendor/x11iraf/ximtool/quant.c create mode 100644 vendor/x11iraf/ximtool/rasio.c create mode 100644 vendor/x11iraf/ximtool/raster.c create mode 100644 vendor/x11iraf/ximtool/save.c create mode 100644 vendor/x11iraf/ximtool/tiffio.c create mode 100644 vendor/x11iraf/ximtool/util.c create mode 100644 vendor/x11iraf/ximtool/ximclient.c create mode 100644 vendor/x11iraf/ximtool/ximprint.cfg create mode 100755 vendor/x11iraf/ximtool/ximtool-alt.csh create mode 120000 vendor/x11iraf/ximtool/ximtool-alt.gui create mode 100755 vendor/x11iraf/ximtool/ximtool-old.csh create mode 100644 vendor/x11iraf/ximtool/ximtool-old.gui create mode 100644 vendor/x11iraf/ximtool/ximtool.c create mode 100644 vendor/x11iraf/ximtool/ximtool.gui create mode 100644 vendor/x11iraf/ximtool/ximtool.gui.h create mode 100644 vendor/x11iraf/ximtool/ximtool.h create mode 100644 vendor/x11iraf/ximtool/ximtool.html create mode 100644 vendor/x11iraf/ximtool/ximtool.html.h create mode 100644 vendor/x11iraf/ximtool/ximtool.man create mode 100644 vendor/x11iraf/ximtool/ximtool.ps create mode 100644 vendor/x11iraf/ximtool/zscale.c (limited to 'vendor/x11iraf/ximtool') diff --git a/vendor/x11iraf/ximtool/.alias b/vendor/x11iraf/ximtool/.alias new file mode 100644 index 00000000..21e56fc4 --- /dev/null +++ b/vendor/x11iraf/ximtool/.alias @@ -0,0 +1,5 @@ + +alias mx "c;make ; ./ximtool -gui ximtool-alt.gui zz.fits" +alias x "c;./ximtool -gui ximtool-alt.gui zz.fits" +alias z "c;(chdir gui; mkgui) ; ./ximtool -gui ximtool-alt.gui zz.fits" +alias zz "c;(chdir gui; mkgui) ; make; ./ximtool -gui ximtool-alt.gui zz.fits" diff --git a/vendor/x11iraf/ximtool/.gdb_history b/vendor/x11iraf/ximtool/.gdb_history new file mode 100644 index 00000000..9967bc5e --- /dev/null +++ b/vendor/x11iraf/ximtool/.gdb_history @@ -0,0 +1,33 @@ +b bob +run -gui xmin.gui +wgere +where +s +p w->gterm.window +p *w->gterm.window +s +p gc +p *gc +c +s +p w->gterm.window +quit +quit +b wcs_update +run +quit +b wcs_update +run +quit +b wcs_update +run +where +c +c +quit +run +where +quit +run +where +quit diff --git a/vendor/x11iraf/ximtool/BUGS b/vendor/x11iraf/ximtool/BUGS new file mode 100644 index 00000000..5d6a3bbe --- /dev/null +++ b/vendor/x11iraf/ximtool/BUGS @@ -0,0 +1,196 @@ +From stetson@dao.nrc.ca Fri Aug 16 14:21:30 1996 +Received: from noao.edu by tucana.tuc.noao.edu (4.1/SAG.sat.14) + id AA19724; Fri, 16 Aug 96 14:21:28 MST; for fitz +Received: from dao.nrc.ca (dns.dao.nrc.ca [204.174.103.34]) by noao.edu (8.7.5/8.7.3/SAG-16Aug96) with SMTP id OAA09562 for ; Fri, 16 Aug 1996 14:21:25 -0700 (MST) +Received: from kwakiutl.nrc.ca by dao.nrc.ca (5.x/SMI-SVR4) + id AA02855; Fri, 16 Aug 1996 14:21:11 -0700 +Received: by kwakiutl.nrc.ca (5.x/SMI-SVR4) + id AA29687; Fri, 16 Aug 1996 14:16:17 -0700 +Date: Fri, 16 Aug 1996 14:16:17 -0700 +From: stetson@dao.nrc.ca (Peter B. Stetson) +Message-Id: <9608162116.AA29687@kwakiutl.nrc.ca> +To: fitz@noao.edu +Subject: Re: two more +Content-Length: 529 +X-Lines: 16 +Status: RO +X-Status: + +Not only does it not reset the toggle on the control panel, it doesn't +seem to cause antialiasing to happen in the main window. + +I am certain that I am not zooming into a blank area of the image. +I am zooming onto the center of the image. Zoom factors + +1 2 3 4 5 6 7 8 + +work fine, but when I go from 8 to 9 the image goes black, going back +to 8 the image reappears. Like other apparent Ximtool anomalies, this +may be a function of my having an oldish X-terminal with 8 Mbytes of +memory? + +Obviously, none of this is vital. + +PBS + +From sharp@noao.edu Fri Sep 20 00:21:01 1996 +Received: from noao.edu by tucana.tuc.noao.edu (4.1/SAG.sat.14) + id AA00715; Fri, 20 Sep 96 00:20:59 MST; for fitz +Received: from robur.tuc.noao.edu (robur.tuc.noao.edu [140.252.1.10]) by noao.edu (8.7.5/8.7.3/SAG-16Aug96) with SMTP id AAA28798 for ; Fri, 20 Sep 1996 00:20:57 -0700 (MST) +Received: by vms.noao.edu (MX V4.1 VAX) id 3; Fri, 20 Sep 1996 00:20:53 MST +Sender: sharp@noao.edu +Date: Fri, 20 Sep 1996 00:20:52 MST +From: Nigel Sharp +Reply-To: sharp@noao.edu +To: fitz@noao.edu +Cc: sharp@noao.edu +Message-Id: <009A8A12.0BC5D9B4.3@vms.noao.edu> +Subject: Re: ximtool +Status: RO + +I'll tell you first. +a) sometimes I get a display where the image sent from IRAF appears in + the panner window but not in the main window, no matter where I + move the window around in the whole frame. I have soetimes cured this + by quitting ximtool and restarting it. +b) if I use the auotscale to fit the entire image in the window, and + the frame is not the same aspect ratio as the ximtool window, then + I get residual image in the borders around the shrunk-to-fit full + frame. +I can't get these consistently, although it happened several times this +evening (it makes imedit very tricky when there's no image in the main +ximtool window !!). + +From fitz Fri Sep 20 00:34:38 1996 +Received: by tucana.tuc.noao.edu (4.1/SAG.sat.14) + id AA03455; Fri, 20 Sep 96 00:34:37 MST; for fitz +Date: Fri, 20 Sep 96 00:34:37 MST +From: fitz (Mike Fitzpatrick) +Message-Id: <9609200734.AA03455@tucana.tuc.noao.edu> +To: sharp +Subject: Re: ximtool +Cc: fitz +Status: RO + +I don't really recognize either problem, but have a few comments + +> a) sometimes I get a display where the image sent from IRAF appears in +> the panner window but not in the main window, no matter where I +> move the window around in the whole frame. I have soetimes cured this +> by quitting ximtool and restarting it. + Was the image zoomed at the time. I do know of a bug where a zoom +factor of 9 causes this, zooming out then back in seems to cure it. + +> b) if I use the auotscale to fit the entire image in the window, and +> the frame is not the same aspect ratio as the ximtool window, then +> I get residual image in the borders around the shrunk-to-fit full frame. + On the wishlist is a 'snap-to-equal-aspect' option, I think this +may be what you're talking about. To be honest I haven't played much with +the autoscale so it could be something else. + I'll have a look at both of these but much can't be done until after +the ADASS unfortunately. I'll see if Doug knows more about these (he was +keeper of the buglist until I started working on it, then I got my own +list of bugs!). + +From sharp@noao.edu Fri Sep 20 00:39:37 1996 +Received: from noao.edu by tucana.tuc.noao.edu (4.1/SAG.sat.14) + id AA03541; Fri, 20 Sep 96 00:39:33 MST; for fitz +Received: from robur.tuc.noao.edu (robur.tuc.noao.edu [140.252.1.10]) by noao.edu (8.7.5/8.7.3/SAG-16Aug96) with SMTP id AAA28981 for ; Fri, 20 Sep 1996 00:39:27 -0700 (MST) +Received: by vms.noao.edu (MX V4.1 VAX) id 2; Fri, 20 Sep 1996 00:39:23 MST +Sender: sharp@noao.edu +Date: Fri, 20 Sep 1996 00:39:22 MST +From: Nigel Sharp +Reply-To: sharp@noao.edu +To: fitz@noao.edu +Cc: sharp@noao.edu +Message-Id: <009A8A14.A14D0BF4.2@vms.noao.edu> +Subject: Re: ximtool +Status: RO + +Oh, it's not urgent and can certainly wait until after ADASS and beyond, +but no, neither thing you mention seems relevant. I don't want to +go to equal aspect necessarily, I just wondered why the border wasn't +cleared when I zoomed out by using auto, and the former is not affected +by anything I can do - zoom in/out, window, anything - the image is +just not there in the main window. + +Anyway, just so it gets into the system somewhere so I don't feel +quite so lonely with my problems (neither JB nor Dave B had seen or +heard of missing images of this sort). + +Time for me to move on - you go on back to ADASS - or your mailing +problem - I have to sleep for a bit. + +From jacoby@noao.edu Fri Sep 20 17:18:43 1996 +Received: from noao.edu by tucana.tuc.noao.edu (4.1/SAG.sat.14) + id AA10420; Fri, 20 Sep 96 17:18:40 MST; for fitz +Received: from madrona.tuc.noao.edu (madrona.tuc.noao.edu [140.252.3.86]) by noao.edu (8.7.5/8.7.3/SAG-16Aug96) with SMTP id RAA27447 for ; Fri, 20 Sep 1996 17:18:35 -0700 (MST) +Received: by madrona.tuc.noao.edu (4.1/SAG.sun.11) + id AA02504; Fri, 20 Sep 96 17:18:35 MST; for fitz +Date: Fri, 20 Sep 96 17:18:35 MST +From: jacoby@noao.edu (George Jacoby X292) +Message-Id: <9609210018.AA02504@madrona.tuc.noao.edu> +To: fitz@noao.edu +Subject: minor bug in ximtool +Status: R + + +Mike, + +It seems that the print window text entry for "lpr" also needs +a CR to accept a revision. For example, if I want to enter "lpr -Plw9", +I must hit CR, or the default of "lpr" is used. + +I haven't looked at the "Save As..." window, but it may suffer similarly. + +George + +From jacoby@noao.edu Wed Nov 27 16:58:07 1996 +Received: from noao.edu by tucana.tuc.noao.edu (4.1/SAG.sat.14) + id AA06536; Wed, 27 Nov 96 16:58:06 MST; for fitz +Received: from madrona.tuc.noao.edu (madrona.tuc.noao.edu [140.252.3.86]) by noao.edu (8.7.5/8.7.3/SAG-16Aug96) with SMTP id QAA06950 for ; Wed, 27 Nov 1996 16:58:05 -0700 (MST) +Received: by madrona.tuc.noao.edu (4.1/SAG.sun.11) + id AA28504; Wed, 27 Nov 96 16:58:04 MST; for fitz +Date: Wed, 27 Nov 96 16:58:04 MST +From: jacoby@noao.edu (George Jacoby X292) +Message-Id: <9611272358.AA28504@madrona.tuc.noao.edu> +To: fitz@noao.edu +Subject: ximtool +Status: RO + + +Mike, + +I found a couple of oddities in Ximtool. + +1. Loading an image into a frame buffer clears other frame buffers. + I tried to load a GIF file into frame 1, and another into frame 2. + Only the last image loaded survived. + +2. In the load panel, one must hit RETURN after entering a file name + before the load will occur via the LOAD button. This is similar to + earlier problems with the typing buffers. + +3. Also in a typing buffer, if I highlight text and then begin typing, + I expect the highlighted text to be deleted. Instead, the new text + is inserted along with the old text. + +George + +From dbell@bigx Tue Dec 10 14:21:46 1996 +Received: from bigx.tuc.noao.edu by tucana.tuc.noao.edu (4.1/SAG.sat.14) + id AA26048; Tue, 10 Dec 96 14:21:46 MST; for fitz +Received: by bigx.tuc.noao.edu (4.1/SAG.sat.14) + id AA21334; Tue, 10 Dec 96 14:21:45 MST; for fitz +Date: Tue, 10 Dec 96 14:21:45 MST +From: dbell@bigx (David Bell) +Message-Id: <9612102121.AA21334@bigx.tuc.noao.edu> +To: fitz +Status: RO + + +Warning: Cannot convert string "-adobe-times-bold-i-normal-*-12-*-*-*-*-*-iso8859-1" to type FontStruct +Warning: Cannot convert string "-adobe-times-medium-r-normal-*-12-*-*-*-*-*-iso8859-1" to type FontStruct +Warning: Cannot convert string "-*-helvetica-medium-r-normal-*-12-*-iso8859-1" to type FontStruct +Warning: Cannot convert string "-adobe-times-bold-r-normal-*-12-*-*-*-*-*-iso8859-1" to type FontStruct + diff --git a/vendor/x11iraf/ximtool/BUGS-v2.0 b/vendor/x11iraf/ximtool/BUGS-v2.0 new file mode 100644 index 00000000..bf049f20 --- /dev/null +++ b/vendor/x11iraf/ximtool/BUGS-v2.0 @@ -0,0 +1,56 @@ + 11/1/08 +TODO: +----- + - 15/16/32-bit visual support + +BUGS: +----- +1/13 - Compass needs a redraw after a new image display + - Vertical plot marker slow to update when horizontal plot open +??? - Reports of ism_wcspix.e crash +11/8 - GUI layout sizes when plots are closed + - "X" window button closes entire app +11/7 - Packaging of "-alt" and "-old" versions +11/8 - Max app version +11/1 - Check for "v1.3" in gui/docs + - color9 on plot backgrounds not showing up properly + - Opening vertical cut-plot first expands window too wide, doing + horizontal first is okay + +11/4 - Compass color shows up as red, should be yellow + - Window resize breaks colormap focus box +11/4 - Compass doesn't respond to X/Y flips + - When using image data for cut-plots, need to reset plot scale + - Zoom-out => cursor readout becomes invalid when off-image + => magnifier doesn't show black background, shows parts + of the previous background image +11/10 - Resetting the cmap focus box size to less than the full window + and changing the colormap from the control panel updates only + the focus box on the display. +11/10 - Displaying dev$pix into two frames and using the 'Match' button + doesn't clear the entire frame buffer with the background + color +11/10 - Frames display with different colormaps only update to the size of + the cmap focus box when switching frames. +11/10 - Background and text colors for Tcl shell, Info panel, etc "not right" +11/10 - Ctrl-a sets toggles the Auto-register but doesn't reset the toolbar + button +11/10 - Ctrl-t toggles tile-frame on control panel, but doesn't change + image display or toolbar +11/10 - Alt-c doean't properly toggle the Control Panel +11/18 - BadAlloc from XCreatePixmqp seen on some systems (e.g. Leopard PPC) +12/1 - BadValue error from XQueryColors on Leopard Intel systems. + Complaint is about color '0x2f4f4f' (color9=darkslategrey, used in + hcut/vcut in GUI and main color9 resource definition). Duplicated + on Leopard/PPC but only with 15-plane colors (i.e. 'Thousands' in + X11 display preferences). +11/20 - ISM prints 'bad fd' (and perhaps also a 'memory corrupted') message + when quitting ximtool + - The -alt and -old script use of '+' flag on "tail" doesn't work + on newer linux systems +12/5 - Save panel doesn't save a tiled screen display, just the current + display to a window the size of the display + - On PPC systems, Save shows a yellow background for PseudoColor GIF + - Colormap focus box wrong size for e.g. imt4096 zoomed out +12/3 - Print box on Leopard PPC shows garbage status and crashes +12/3 - Save box on Leopard PPC shows garbage status message diff --git a/vendor/x11iraf/ximtool/Imakefile b/vendor/x11iraf/ximtool/Imakefile new file mode 100644 index 00000000..28d4bc8c --- /dev/null +++ b/vendor/x11iraf/ximtool/Imakefile @@ -0,0 +1,100 @@ +# Imakefile for the XImtool image display server. +# 18Aug93 - Doug Tody, NOAO/IRAF + +X11IRAFDIR = ../ +#include <../X11IRAF.tmpl> + +/* Hack to build on NOAO HP systems where the Xmu and Xaw libs had to be added + * specially to the system they don't come with the default X11 development + * system. This also avoids the binary requiring the shared lib version on + * systems which may not have it. + */ + +#define IHaveSubdirs +#define PassCDebugFlags 'CDEBUGFLAGS=$(CDEBUGFLAGS)' + +#if defined(HPArchitecture) && OSMajorVersion >= 10 + XMULIB = /usr/lib/X11R6/libXmu.a + XAWLIB = /usr/lib/X11R6/libXaw.a +#endif + + + CDEBUGFLAGS = -g + XAWLIB = LibXaw3d + + LOCAL_LDFLAGS = $(X11IRAF_LDFLAGS) + EXTRA_INCLUDES = $(X11IRAF_INCLUDES) + OBMLIBS = LibObm LibXpm + MATHLIB = -lm + DEPOBM = DepLibObm + + SRCS = eps.c iis.c load.c print.c raster.c save.c \ + rasio.c fitsio.c ximclient.c ximtool.c quant.c util.c \ + zscale.c gifio.c tiffio.c irafio.c ism.c ism_wcspix.c \ + logo.c + OBJS = eps.o iis.o load.o print.o raster.o save.o \ + rasio.o fitsio.o ximclient.o ximtool.o quant.o util.o \ + zscale.o gifio.o tiffio.o irafio.o ism.o ism_wcspix.o \ + logo.o + ISM_DIRS = clients + ISM_DONE = clients/DONE + + SUBDIRS = $(ISM_DIRS) + + +AllTarget(ximtool ximtool-alt ximtool-old ism_clients) + +all:: + @(cd clients; $(MAKE) $(MFLAGS) all X11IRAFDIR=../../) + +NormalProgramTarget(ximtool,$(OBJS),${DEPOBM},${OBMLIBS} XawClientLibs, $(MATHLIB)) + +ximtool-alt:: + cat ximtool-alt.csh ximtool.gui > ximtool-alt + chmod 755 ximtool-alt + +ximtool-old:: + cat ximtool-old.csh ximtool-old.gui > ximtool-old + chmod 755 ximtool-old + +ism_clients: $(ISM_DIRS) $(ISM_DONE) + @(cd clients; $(MAKE) $(MFLAGS) all X11IRAFDIR=../../) + +#install:: +# @(cd clients; $(MAKE) $(MFLAGS) install X11IRAFDIR=../../) + +clean:: + $(RM) ximtool-old ximtool-alt + + +${DEPOBM}: + +ximtool.o: ximtool.gui.h ../version.h +ximtool.c: ximtool.gui.h +ximclient.o: ximtool.html.h +ximclient.c: ximtool.html.h + +ximtool.gui.h: ximtool.gui + sed -f gui2c.sed ximtool.gui > ximtool.gui.h +ximtool.html.h: ximtool.html + sed -f gui2c.sed ximtool.html > ximtool.html.h + +XCOMM XImtool.ad: ximtool.gui +XCOMM sed -e '1,/^appInitialize/d' -e '/^}/,\$d' ximtool.gui > XImtool.ad + +#if InstallBinaries +install:: ximtool + -@if [ -d X11irafBinDir ]; then set +x; \ + else (set -x; $(MKDIRHIER) X11irafBinDir); fi + $(CP) ximtool X11irafBinDir + $(CP) ximtool-old X11irafBinDir + $(CP) ximtool-alt X11irafBinDir +#endif + +#if InstallManuals +install:: + MakeDir(X11irafManDir) + $(CP) ximtool.man X11irafManDir/ximtool.1 +#endif + +DependTarget() diff --git a/vendor/x11iraf/ximtool/NOTES b/vendor/x11iraf/ximtool/NOTES new file mode 100644 index 00000000..cce5458c --- /dev/null +++ b/vendor/x11iraf/ximtool/NOTES @@ -0,0 +1,222 @@ + XIMTOOL GUI + + +1. CONTROL PANEL + +1.1 View + +current frame: radio button +next frame button +prev frame button + +center: button +fitframe: button +flip X: toggle +flip Y: toggle +flip XY: button +zoom factor: buttons for -8 -4 -2 1 +2 +4 +8 in out + or unzoom, zoom in, zoom out (buttons) + + -- Frame 1 -- + X center: 123.45 + Y center: 123.45 + X scale: 4 + Y scale: 4 + + +1.2 Enhancement + +enhancement: string scrolled list or 2 level menu + + +1.3 Blink + +blink frames: several cycle buttons, reset button +blink rate: numeric display, menu select +register: button +match: button +blink: toggle on/off + +1.4 Options + +panner: toggle on/off +coords box: toggle on/off +autoscale: toggle on/off +antialias: toggle on/off + +1.5 Other + +initialize: button +normalize: button +done: button + + +2. INFO BOX + +version number +gui identification +configuration: number of frames, frame size +image title: string +help: scrolled text +messages: text line +output: scrolled text + + +3. COMMAND ENTRY + +command entry: text (Tcl commands) +control: user assignable buttons, text output + + +--------------------------- +Original Notes + + + XIMTOOL + + +Specifications + + 1 - 4 frame buffers + frame buffers any size, selected from config file + all N frames are the same size + frame buffers are 8 bits deep + + each frame buffer has its own independent zoom/pan, colortable, wcs, etc. + attributes + + +Frame Buffer Strategy + + Frame buffer pixel array is a gterm raster (ximage) + Memory model: fast nice-to-server small + + If server pixmaps are being used the frame raster is mapped to a gterm + server pixmap raster the size of the display window + The server pixmap raster is mapped to the screen with a 1-1 mapping + Zoom and pan are controlled by the ximage->pixmap mapping + The frame being displayed is controlled by the pixmap->screen mapping + + If server pixmaps are not used the first raster will be mapped + either to another ximage raster, or directly to the screen. + The first option still provides a reasonable blink capability, + the second will be slow if zoom is in effect. + + +Program Structure + + main + obm <- gui file + gui program + widget tree + iisio + gterm widget + + + The GUI program handles: + keyboard and function key input + pointer input + frame selection, blink, zoom/pan, colortable selection, windowing + control panel options + + The IISIO section handles: + communication with the client + frame buffer configuration + read/write frame buffer + frame selection + cursor readback + + +Optional features + Magnifier - region under the cursor + Split screen - controlled by popup control panel + Split region - display alternate frame in region under cursor + Zoom box - display de-zoomed or zoomed subregion in a marker + Load/save file (sunraster or fits) + + +CLIENT STATE + + nframes number of frame buffers + frame size frame buffer width, height + frame depth frame buffer depth, bits + frame number current display frame + frame event something frame related changed (string) + frame title title of current frame + enhancement color enhancement selected (name offset slope) + cursor mode cursor mode on/off + + +GUI SPECIFICATION + + Menu bar + File -> + View -> + Options -> + + File menu + Load + Save + Print + Quit + + View menu + Next frame + Prev frame + Zoom + Unzoom + Normalize + Flip X + Flip Y + Blink [on|off] ** + + Options menu + Enhancement -> + grayscale + pseudocolor + (etc.) + Fitframe + Match colortables + Autoscale {on off} + Coords {on off} + Locator {on off} ** + Other (popup) ** + Exit cursor mode + Initialize + + Title display ** + horiz scrolled text + button to popup full label + + Buttons + forward + back + flip X + flip Y + zoom/dezoom + + Help ** + + Marker menu + Zoom + Fill + Print + Attributes -> ** + Destroy + + Image menu + Zoom + Dezoom + Unzoom + Pan + Marker -> + marker type + Enhancement -> + grayscale + pseudocolor + (etc.) + Next + Prev + + +oo diff --git a/vendor/x11iraf/ximtool/OLD/ximtool-0.5.info b/vendor/x11iraf/ximtool/OLD/ximtool-0.5.info new file mode 100644 index 00000000..c9346675 --- /dev/null +++ b/vendor/x11iraf/ximtool/OLD/ximtool-0.5.info @@ -0,0 +1,798 @@ +Path: iraf!irafmail-gateway +From: tody@noao.edu (Doug Tody) +Newsgroups: adass.iraf.announce +Subject: XImtool version 0.5 released +Date: 24 May 1994 00:26:46 -0700 +Organization: IRAF Project, National Optical Astronomy Observatories +Lines: 787 +Sender: daemon@iraf.noao.edu +Message-ID: <9405240726.AA11099@lepus.tuc.noao.edu> +NNTP-Posting-Host: tucana.tuc.noao.edu + + XIMTOOL VERSION 0.5 + May 22 1994 + + +Version 0.5 of the alpha test ximtool is now available in pub/v2103-beta +on iraf.noao.edu and consists of the following files: + + 1589248 May 22 15:14 ximtool-0.5 # executable + +Anyone using an earlier version of ximtool is encouraged to update to the +new version, which is a major new version. Keep the old version around in +case you run into any problems. + +This is ALPHA TEST software. This means that the software is still under +development and may lack planned features. The software is only partially +tested and can be expected to have some bugs. Anyone using an alpha test +version of ximtool is asked to update to version 1.0 when it becomes +available. + + +INSTALLATION + +To install ximtool, download the executable, rename it "ximtool" and place +it somewhere in your search path (e.g. /usr/bin/X11 or /usr/local/bin). +An app-defaults file is not required to run ximtool. + +Don't install the new version while someone is using ximtool, or you will +crash their session. The simplest way to avoid this is to "mv" the old +executable to change the name, e.g. "mv ximtool ximtool.old". + +Since this is still alpha test software, all we are releasing is a snapshot +from our development system, which is a Sun sparc running SunOS. Hence only +a Sun binary is available at this time (unless someone wants to hack the +sources and generate their own binary for a new platform). + + +BASIC USAGE + +Ximtool is an image display server. To view images with it you need some +client software, such as IRAF, to load images into the display. Ximtool is +upwards compatible with older display servers such as SAOimage and imtool. +For example, to use ximtool instead of SAOimage, start up ximtool instead of +SAOimage and display in the usual fashion. + +You shouldn't need much documentation to be able to use ximtool effectively. +Just start it up, load images into one or more frames, and experiment with +the GUI to see what can be done to manipulate the display. Most of the +controls are obvious, but here are a few things which might not be obvious: + + o Clicking and dragging MB1 (mouse button 1) in the main image + window creates a rectangular region marker, used to select a + region of the image. If you do this accidentally and don't want + the marker, put the pointer in the marker and type DELETE or + BACKSPACE to delete the marker. With the pointer in the marker, + MB3 will call up a menu listing some thing you can do with the + marker, like zoom the outlined region. MB1 can be used to drag + or resize the marker. + + o Clicking on MB2 in the main image window pans (one click) or + zooms (two clicks) the image. Further clicks cycle through the + builtin zoom factors. Moving the pointer to a new location and + clicking moves the feature under the pointer to the center of + the display window. + + o MB3 is used to adjust the contrast and brightness of the displayed + image. The position of the pointer within the display window + determines the contrast and brightness values. Click once to + set the values corresponding to the pointer location, or click + and drag to continuously adjust the display. + + o Ctrl-f, Ctrl-b can be used to move forward or backward through + the current set of frame buffers. + + A frame buffer is an image (picture) stored in the display server. + Ximtool supports up to four frame buffers. Frame buffers can be any + size; the size is set by the client when an image is loaded into a + frame. For example, in IRAF "set stdimage = imt800" would set the + frame buffer size to 800x800 pixels. Changing the frame buffer size + forces an initialize of the display server. In IRAF the command + "gdev" will list the frame buffer configurations defined on your + system. + +Ximtool has a control panel which can be used to exercise most the +capabilities the program has for image display. The control panel can be +accessed either via the Options menu from the main window menubar, or by +pressing the leftmost button in the row of buttons at the upper right side +of the display. + +A more detailed overview of the ximtool capabilities and usage is given +below. + + +THINGS TO WATCH OUT FOR + + o It is possible to run multiple ximtools, or ximtool and other + display servers such as saoimage, imtool, skyview, etc., + simultaneously on the same computer, but don't attempt this unless + you know how to set the servers up on different i/o ports. In the + default configuration there will be conflicts with multiple servers + trying to listen on the same port. + + o Most workstations have a single 8 bit, 256 element colortable per + screen. This means that only 256 unique colors can be displayed at + any one time. Image display programs like ximtool (or SAOimage, or + xv, xloadimage, mosaic, etc.) need a lot of colortable entries in + order to display smoothly varying images. If you try to run + multiple image display programs at the same time you are likely to + run out of colortable space. This may result in warning messages + when a program starts up, cause images to be displayed funny, + causing flashing when the pointer moves in and out of image display + windows, and so on. + + It is best to avoid these problems by killing off any other display + programs when running ximtool. If you do run out of colortable + space when using ximtool this is harmless, but the image won't be + displayed correctly when the pointer is not in the image window. To + correct this condition, free up some colortable space (by killing + off some other X programs, especially any display programs) and then + move the pointer into the ximtool image window and back out. This + will cause ximtool to update the default colormap of the display and + in most cases will make the ximtool image display correctly. + Ximtool will always display correctly when the pointer is in the + image window, the problem occurs only when the pointer (colormap + focus) is in other windows. + + +WHAT'S NEW? + +Ximtool 0.5, while still incomplete, is a major new version, probably the +first really usable version of ximtool. Major new features in this version +include the following: + + o A popup control panel, providing control over frame selection, + zoom and pan, colortable selection from a list (including user + defined colortables), contrast and brightness display and controls, + blink control, including blink frames and blink rate, and option + control. (The ximtool control panel uses the new widgets and other + OBM enhancements discussed in the Xgterm 0.11 announcement.) + + o An option called the "panner". The panner displays a reduced + version of the entire frame buffer, with the region currently + displayed outlined with a marker. One can pan and zoom within + the panner window, e.g. by dragging the panner region marker, + to pan or zoom the main image window. This is useful when viewing + images too large to fit on the screen. + + o Autoscale option. If autoscale is enabled then at zoom=1, the + frame buffer will be automatically scaled to fit within the display + window. With autoscale disabled (the default), the image scale + is more predictable, but the image may be clipped by the display + window, or may not fill the display window. + + o Integer zoom. Ximtool supports both fractional zoom and integer + zoom. Fractional zoom uses a non-integer scale factor to scale an + image region as necessary to fill the display window. Integer zoom + ensures that each frame buffer pixel is displayed as exactly N + display pixels. Integer zoom is slightly faster than a fractional + zoom. + + o Antialiasing. When dezooming an image, i.e., displaying a large + image in a smaller display window, antialiasing causes all the + data to be used to compute the displayed image. If antialiasing + is disabled then image is subsampled to compute the displayed image. + Antialiasing can prevent subsampling from omitting image features + that don't fall in the sample grid, but it is significantly slower + than dezooming via subsampling. The default is no antialising. + + o Tile frames. The default display mode is to view one frame at a + time. In tile frames mode, 2 or 4 frames may be viewed + simultaneously in the display window. All the usual operations + (zoom and pan, colortable enhancement, cursor readback, etc.) + still work for each frame even when in tile frames mode. + + o Fitframe now works. Fitframe resizes the display window to the + same size as the frame buffer. + + o Ximtool allows clients to connect in any of the following ways: + + fifo pipes The traditional approach. The default, + global /dev/imt1[io] pipes may be used, + or a private set of fifos. + + tcp/ip socket Clients connect via a tcp/ip socket. + There is a default port, or a custom port + may be specified. This permits connecting + to the server over a remote network + connection anywhere on the Internet. + + unix domain socket Like a tcp/ip socket, but limited to a + single host system. Usually faster than a + tcp/ip socket, and comparable to a fifo. By + default each user gets their own unix domain + socket, so this option allows multiple users + to run ximtools on the same host without + having to customize things. + + By default ximtool listens simultaneously for client connctions on + all three types of ports. + + o Ximtool now supports multiple simultaneous client connections. + For example, one can be using the IRAF imexamine task to interact + with the image displayed in frame 1, while some other program + simultaneously displays an image in frame 2 (or any frame, including + the frame being examined). + + o An improved set of builtin colormaps are now provided. The user + can define additional custom colormaps when ximtool is started. + +There were many additional minor changes and bug fixes not worth going into +here. + + +TECHNICAL NOTES + +This isn't the place to write a detailed comprehensive reference manual for +ximtool, but since there isn't any such manual yet (this is still prerelease +software) some additional information on a few selected topics will probably +be useful. + + +COMMAND LINE OPTIONS + +This prerelease version of ximtool doesn't support general command line +options yet (except for the -defgui option described below). However, one +can accomplish the same thing by setting resources on the command line. For +example, + + ximtool \ + -xrm "*port:0" \ + -xrm "*input_fifo:none" \ + -xrm "*userCmapDir1:/user/smith/cmaps" \ + -xrm "*displayPanner:false" + +would start up ximtool with tcp/ip sockets and fifos disabled (leaving +only unix sockets for client connections). Ximtool will look for user +colormaps in the directory /user/smith/cmaps. The panner option will be +disabled at startup. + + +RESOURCES + +Ximtool has a ton of resources (hundreds of them), but in practice only a +few are likely to be useful at the user level. + +BUILTIN RESOURCES + + Resource Name Default Value + + defConfig: 1 + defNFrames: 0 + tileBorderWidth: 3 + tileBorderColor: 9 + autoscale: false + antialias: false + tileFrames: false + highlightFrames: true + gui: default + imtoolrc: /usr/local/lib/imtoolrc + memModel: fast + cmap1: none + cmap2: none + cmapDir1: none + cmapDir2: /usr/local/lib/imtoolcmap + input_fifo: /dev/imt1i + output_fifo: /dev/imt1o + unixaddr: /tmp/.IMT%d + port: 5137 + +All of these are application resources, hence they would be specified in +the .Xdefaults file as, e.g., "XImtool.autoscale: true", etc. + + +Description of ximtool client resources: + + defConfig Default frame buffer configuration on startup. + + defNFrames Default number of frames on startup. Set to zero + to use value from imtoolrc file. There isn't a + whole lot of reason to preallocate frames here, + since new frames will be created on demand if needed. + + tileBorderWidth Used by the tile frames option. Specifies how far + tileBorderColor apart to space the frames in tile frames mode. + Color "9" refers to the Gterm widget resource color9, + which is assigned a color with its own resource. + + autoscale Enable/disable the autoscale option. + antialias Enable/disable the antialias option. + tileFrames Enable/disable the tile frames option. + + highlightFrames Determines whether the current frame is highlighted + when in tile frames mode. + + gui The GUI to be executed. "default" refers to the + default, builtin ximtool GUI. You can replace this + with your own GUI file if you are bold enough, and + completely change the look and functionality of + the GUI if desired. + + imtoolrc Where to find the imtoolrc file. This defines the + recognized frame buffer configurations. + + memModel Determines how ximtool uses memory in the ximtool + client and the X server. The options are "fast", + "beNiceToServer", and "small". The default is fast, + which uses server pixmaps to make frame blink fast. + This is recommended unless server memory is very + limited. Note that even in fast mode, the server + pixmap is only the size of the display window, so + memory usage is reasonable even if the frame buffer + is very large. + + cmap1 User colormap files. The intent here is to allow + cmap2 individual colormaps to be conveniently specified + on the command line. + + cmapDir1 User or system colormap directories. By default + cmapDir2 cmapDir2 points to the system directory + /usr/local/lib/imtoolcmap, allowing a set of site + default colormaps to be defined here. This leaves + cmapDir1 available to a user colormap directory. + + input_fifo The input and output fifos for fifo i/o. "Input" + output_fifo and "output" are from the client's point of view. + Note that only one display server can use a + fifo-pair at one time. + + unixaddr Template address for unix domain socket. The user + must have write permission on this directory, or + the file must already exist. %d, if given, is + replaced by the user's UID. + + port TCP/IP port for the server. Note that only one + server can listen on a port at one time, so if + multiple ximtool servers are desired on the same + machine, they should be given different ports. + + +GUI RESOURCES + +In principle ximtool can have any number of different GUIs, each of which +defines its own set of resources. GUIs typically define a great many +resources, but most of these are not really intended for modification by +the user (although one can modify them if desired). + +The following are some of the more useful resources used by the default +ximtool GUI. + + Resource Name Default Value + + .geometry: + *controlShell.geometry: + *info.geometry: 420x120 + + *cmapName: image + *basePixel: 64 + *maxColors: 216 + + *imagewin.warpCursor: true + *imagewin.raiseWindow: true + *imagewin.deiconifyWindow: true + *imagewin.ginmodeCursor: circle + *imagewin.ginmodeBlinkInterval: 500 + *imagewin.color8: #7c8498 + *imagewin.color9: steelblue + + *autoscale: True + *zoomfactors: 1 2 4 8 + *displayCoords: True + *displayPanner: True + *blinkRate: 1.0 + *pannerArea: 150*150 + *pannerGeom: -5+5 + *wcsboxGeom: -5-5 + *maxContrast: 5.0 + *warnings: True + + +Description of selected resources: + + .geometry Geometry of main image window + *controlShell.geometry Geometry of control panel shell + *info.geometry Geometry of info box + + *cmapName Name used for private colormap. + The default for all IRAF imaging + applications is "image". Gterm + widget based imaging applications + which have the same value of cmapName + will share the same colormap, + minimizing colormap flashing and + allowing multiple applications to be + run at the same time. + + *basePixel These two resources determine the + *maxColors region of colormap space used to + render image pixels. + + *imagewin.warpCursor Warp pointer into image window when + initiating a cursor read. + *imagewin.raiseWindow Raise image window when initiating + a cursor read. + *imagewin.deiconifyWindow Deiconify image window if necessary + when initiating a cursor read. + + *imagewin.ginmodeCursor Type of cursor when a cursor read + is in progress. The default is a + circle. Any selection from the X + cursor font can be used. A special + case is "full_crosshair" which is + the full crosshair cursor of the + Gterm widget. + + *imagewin.ginmodeBlinkInterval Determines whether the cursor blinks + when a cursor read is in progress. + The value is given in milliseconds. + + *imagewin.color8 Color assigned the panner window. + *imagewin.color9 Color used for the tileFrames highlight. + + *pannerArea Area in pixels of the panner window. + *pannerGeom Where to place the panner window. + *wcsboxGeom Where to place the coords box. + *maxContrast Maximum contrast value. + +For a complete description of the ximtool resources, refer to the GUI file. +The "appInitialize" command contains the full resource list for the GUI. + + +CONTROL PANEL NOTES + +VIEW CONTROLS + + o The "Frame" box will list only the frame buffers you currently have + defined. Currently, the only way to destroy a frame buffer is to + change the frame buffer configuration. + + o The text display gives the field X,Y center, X,Y scale factors, and + the X,Y zoom factors. The scale factor and the zoom factor will be + the same unless autoscale is enabled. The scale is in units of + display pixels per frame buffer pixel, and is an absolute measure + (it doesn't matter whether or not autoscale is enabled). Zoom is + relative to the autoscale factor, which is 1.0 if autoscaling is + disabled. + + o The numbers in the Zoom box are zoom factors. Blue numbers zoom, + red numbers dezoom. Zoom In and Zoom Out may be used to go to + larger or smaller zoom factors, e.g. "5" followed by "Zoom In" will + get you to zoom factor 10. Center centers the field. Toggle Zoom + toggles between the current zoom/center values, and the unzoomed + image. + + o Aspect recomputes the view so that the aspect ratio is 1.0. Aspect + also integerizes the zoom factor (use the version in the View menu + if you don't want integerization). + + o Fit Frame makes the display window the same size as the frame buffer. + Note that autoscale has much the same effect, and allows you to + resize the display window to any size you want, or view images to + large to fit on the screen. + + +ENHANCEMENT CONTROLS + + o At the top is a scrolled list of all the available colormaps. Click + on the one you want to load it. You can add your own custom colormaps + to this list. + + o The two sliders adjust the contrast (upper slider) and brightness + (lower slider) of the display. The Invert button inverts the + colormap (multiples the contrast by -1.0). Note that due to the use + of the private colormap the sliders are a bit sluggish when dragged + to window the display. If this is annoying, using MB3 in the + display window is faster. + + o The Normalize button (on the bottom of the control panel) will + normalize the enhancement, i.e. set the contrast and brightness to + the default one-to-one values (1.0, 0.5). This is the preferred + setting for many of the pseudocolor colortables. + + +BLINK CONTROLS + + o Blink frames is the list of frames to be blink. When blink mode is + in effect ximtool just cycles through these frames endlessly, + pausing "blink rate" seconds between each frame. The same frame + can be entered in the list more than once. To program an arbitrary + list of blink frames, hit the Reset button and click on each blink + frame button until it is set to the desired frame number. + + o The blink rate can be adjusted as slow or as fast as you want using + the arrow buttons. If you set the blink rate small enough it will + go to zero, enabling single step mode (see below). + + o The Register button registers all the blink frames with the current + display frame. Frames not in the blink list are not affected. + + o The Match LUTs button sets the enhancement of all blink frames to + the same values as the display frame. Frames not in the blink list + are not affected. + + o The Blink button turns blink on and off. When the blink rate is + set to zero the Blink button will single step through the blink + frames, one frame per button press. + + NOTE: you can blink no matter what ximtool options are in effect, but + many of these will slow blink down. To get the fastest blink you may + want to turn off the panner and coords box, and match the LUTs of all + the blink frames. All the ximtool controls are fully active during + blink mode, plus you can load frames etc. + + +OPTIONS CONTROLS + + o The options box contains a set of option toggles. If the toggle + is yellow the option is in effect. + + +OTHER + + o Initialize initializes ximtool. This resets a lot of things, but + tries to not change the view. Select Reset in the File menu on the + main window menubar to fully reset things. + + o Normalize normalizes the view for the current display frame. + + o Done makes the control panel go away. + + +CUSTOM COLOR TABLES + +The cmap[12] and cmapDir[12] resources are used to tell ximtool where to +look for colortables. The colortables are loaded when ximtool starts up, or +when it is reinitialized (e.g. by pressing the Initialize button in the +control panel). Ximtool will ignore any files in the colormap directory +which do not look like colortables. + +The format of a user lookup table is very simple: each row defines one +colortable entry, and consists of three columns defining the red, green, +and blue values scaled to the range 0.0 (off) to 1.0 (full intensity). + + R G B + R G B + (etc.) + +Blank lines and comment lines (# ...) are ignored. + +Usually 256 rows are provided, but the number may actually be anything in +the range 1 to 256. Ximtool will interpolate the table as necessary to +compute the colortable values used in Ximtool. Ximtool uses only 201 colors +to render pixel data, so it is usually necessary to interpolate the table +when it is loaded. + +Tables are loaded into Ximtool by setting one of the user colormap directory +resources. When Ximtool starts up it will read all the files in the +colormap directory, disregarding any files that are unreadable or that do +not appear to be colortables. The name of the colortable as it will appear +in the Ximtool control panel is the root name of the file, e.g., if the file +is "rainbow.lut" the colortable name will be "rainbow". Lower case names +are suggested to avoid name collisions with the builtin colortables. If the +same colortable file appears in multiple user colortable directories, the +first one will be used. + +The directory "luts" in the ximtool source directory contains a sample set +of colortable files. This can be installed as /usr/local/lib/imtoolcmap +when ximtool is installed. + + +THE MARKER MENU + + o MB3 (mouse button 3) calls up the marker menu (by default). + + o Zoom does an equal aspect zoom of the region outlined by the marker. + In this way you can mark a region of the image and zoom it up. + + o Fill exactly zooms the area outlined by the marker, making it fill + the display window. Since the marker is not likely to be exactly + square, the aspect ratio of the resultant image will not be unitary. + + o Print prints a description of the marked region. The text is printed + in the Info box. + + o Unrotate unrotates a rotated marker. + + o Color is a menu of possible marker colors. + + o Type is a menu of possible marker types. This is still a little + buggy and it isn't very useful, but you can use it to play with + different types of markers. + + o Destroy destroys the marker. You can also hit the delete or + backspace key in a marker to destroy the marker. + + +MORE ON GRAPHICS MARKERS + +Although ximtool doesn't do much with markers currently, they are a general +feature of the Gterm widget and are used more extensively in other programs +(e.g. the prototype IRAF science GUI applications). Ximtool uses markers +for the marker zoom feature discussed above, and also for the panner and the +coords box. All markers share some of the same characteristics, so it is +worthwhile learning basic marker manipulation keystrokes. + + o MB1 anywhere inside a marker may be used to drag the marker. + + o MB1 near a marker corner or edge, depending on the type of marker, + resizes the marker. + + o Shift-MB1 on the corner of most markers will rotate the marker. + + o Markers stack, if you have several markers and you put one on top + of the other. The active marker is highlighted to tell you which + of the stacked markers is active. If the markers overlap, this + will be marker "on top" in the stacking order. + + o MB2 in the body of a marker "lowers" the marker, i.e. moves it to + the bottom of the stacking order. + + o Delete or backspace in a marker deletes the marker. + +For example, try placing the pointer anywhere in the coords box, then press +MB1 and hold it down, and drag the coords box marker somewhere else on the +screen. You can also resize the coords box by dragging a corner, or delete +it with the delete or backspace key. (The Initialize button will get the +original coords box back). + + +NOTES ON THE PANNER + +The panner window always displays the full frame buffer. Try setting the +frame buffer configuration to a nonsquare frame buffer (e.g. imtcryo) and +then displaying a square image (e.g. dev$pix) and the panner will show you +exactly where the image has been loaded into the frame. + +The panner window uses two markers, one for the window border and one to +mark the displayed region of the frame. Most of the usual marker keystrokes +mentioned above apply to these markers as well, e.g. you can use MB1 to +reposition on the panner window within the main image display window, or to +drag the region marker within the panner (pan the image). Resizing the +region marker zooms the image; this is a non-aspect constrained zoom. +The panner window itself can be resized by dragging a corner with MB1. +Typing delete or backspace anywhere in the panner window deletes the panner. + +A special case is MB2. Typing MB2 anywhere in the panner window pans the +image to that point. This is analogous to typing MB2 in the main display +window to pan the image. + + +THE COORDS BOX + +Ximtool provides a limited notion of world coordinates, allowing frame +buffer pixel coordinates and pixel values to be converted to some arbitrary +client defined coordinate system. The coords box feature is used to display +these world coordinates as the pointer is moved about in the image window. + +The quantities displayed in the coords box are X, Y, and Z: the X,Y world +coordinates of the pointer, and Z, the world equivalent of the pixel value +under the pointer. All coordinate systems are linear. The precision of a +displayed quantity is limited by the range of values of the associated raw +frame buffer value. For example, if the display window is 512x512 only 512 +coordinate values are possible in either axis (the positional precision can +be increased however by zooming the image). More seriously, at most about +200 pixel values can be displayed since this is the limit on the range of +pixel values loaded into the frame buffer. If a display pixel is saturated +a "+" will be displayed after the intensity value. + +The coords box is a marker (text marker) and it can be moved and resized +with the pointer like any other marker. + + +VIEWING THE IMAGE TITLE + +The title of the image loaded into the current display frame is displayed +centered in the control area at the top of the main display window. If the +title string is too long to be fully displayed it will be clipped at either +end. To see the full title string, either resize the display window, or +pop up the Info box. The Info box always displays the full image title. + + +NOTES ON CLIENT-SERVER I/O + +As mentioned earlier ximtool allows clients to connect using any of three +different communications domains: fifos, tcp/ip sockets, and unix domain +sockets. + +By default ximtool will listen and accept connections on all three types of +ports. This is fine if there is only one display server running on a host, +but conflicts arise if multiple display servers try to listen on the same +port. If this happens one needs to either disable a port, or change the +address. + + FIFOs The default fifos are /dev/imt1i and /dev/imt1o. + The resources input_fifo and output_fifo may be + set to use a different set of fifos. To disable + the fifo port entirely set input_fifo=none. The + fifos must be created and must have read and write + permission, before starting ximtool. + + TCP/IP socket The default tcp/ip port is 5137. The resource + "port" may be set to set a different port. To + disable tcp/ip sockets completely set port=0. + If ximtool is terminated it may take a couple of + minutes before unix allows ximtool to use the + port again. + + UNIX socket The default unix domain socket is /tmp/.IMT%d, + where %d is the user's UID number. Hence, each user + has a private unix domain socket, allowing multiple + ximtools to be run on the same host (but only one + per user unless the addresss is changed). To + disable unix domain sockets set unixaddr=none. The + server will automatically create and delete the unix + domain socket if none exists. + +In 2.10.3 beta-3 and later versions of IRAF the default action when +connecting to the display server is to first try a unix domain socket +connection using the socket /tmp/.IMT%d. If this fails the IRAF client +tries to connect via the old style FIFOs /dev/imt1[io]. Hence, if ximtool +is being used with only newer versions of IRAF and all connections are +local, FIFOs and tcp/ip sockets can be disabled and different users can +transparently run ximtool on the same host system. + +IRAF 2.10.3 or later uses the new ZFIOND network driver (described +elsewhere) to connect to the server. The graphcap file defines how to +connect to the server. This can be overridden however, by defining IMTDEV +in the host environment. For example to connect to a TCP/IP socket on host +foo.bar.edu, one could define + + setenv IMTDEV inet:5137:foo.bar.edu + +before logging into IRAF. + + +CUSTOM GUIs + +The default GUI of ximtool can be viewed by running ximtool as follows: + + ximtool -defgui + +This will print the default builtin GUI to the standard output. If this +output is saved in a file one can set the "gui" resource to point to this +file, and when ximtool starts up it will use this GUI file instead of the +builtin default GUI. The user can modify the GUI file as desired to +customize the GUI. Since the full GUI of ximtool is encapsulated in the GUI +file, ths is a very powerful option; one can generate quite a different +program merely by modifying the GUI file, without need to recompile any code. + + +PLANNED FUTURE WORK + +The following items are on the near term TODO list for ximtool. + + o Print dialog. Will be used to print whatever is displayed in the + main image window, generating a variety of types of output. + + o File load/save. For standalone use it is desirable to be able to + load the display from a disk file. The plan is to support at least + FITS for file input. + + o Info box. The info box is due for a major rewrite (the existing + one isn't very useful). + + o TclShell. This will allow experienced users to type Tcl commands + directly into the OBM interpreter at the heart of ximtool. + + o Add global translation actions for a variety of GUI functions, so + that the user can bind keystrokes and function keys to these actions. + + o Implement online help (question mark button in main window). + + o "Snap to equal aspect" feature for use when resizing panner. + +There are still quite a few useful features that could be implemented. +For example, a magnifier window (similar to the panner but displays a +magnified view of the region under the cursor). Similarly, one could have +a magnifier which pops up under the pointer. Split screen would be useful +for comparing multiple frame buffers. A window into an alternate frame +would be a useful alternative to frame blink. The Optimize button in the +Enhancement portion of the control panel will be used to automatically +compute the optimum contrast and brightness valus for the region for the +image in the main display window. + +More dramatically, alternate, completely different GUIs for ximtool are +possible, merely by loading a different GUI file. The planned SAOtng user +interface (being developed by SAO) is an example of this. SAOtng will +also provide enhanced client-server communications via an alternative, +more general communications protocol based on the X selection mechanism. diff --git a/vendor/x11iraf/ximtool/OLD/ximtool-alt.man b/vendor/x11iraf/ximtool/OLD/ximtool-alt.man new file mode 100644 index 00000000..4ca5b8a7 --- /dev/null +++ b/vendor/x11iraf/ximtool/OLD/ximtool-alt.man @@ -0,0 +1,1568 @@ +.\" @(#)ximtool.1 1.1 10-Dec-96 MJF +.TH XIMTOOL-ALT 1 "10 Dec 1996" "X11IRAF Project" +.SH NAME +ximtool-alt \- interactive image display program for the X Window System with experimental GUI +.SH SYNOPSIS +.B "ximtool-alt" [\-\fItoolkitoption\fP ...] [ \fIoptions\fP ...] [\fIimagename\fP] +.SH OPTIONS +.TP 5 +.B "-basePixel \fIN\fP" +The base colormap cell used by the colormap. This essentially allows you +to reserve \fIbasePixel\fP colors in the global colormap for other applications. +The default is 64, if changed you'll need to also specify the +\fI-cmapInitialize\fP option or resource. +.TP 5 +.B "-cmap1 \fIfile\fP" +User colormap 1. This flag allows you to specify a colormap to be made +available at task startup. +.TP 5 +.B "-cmap2 \fIfile\fP" +User colormap 2. This flag allows you to specify a second colormap to be +made available at task startup. +.TP 5 +.B "-cmapDir1 \fIdir\fP" +User colormap directory 1. Specifies a directory to be searched for colormaps. +.TP 5 +.B "-cmapDir2 \fIdir\fP" +User colormap directory 2. Specifies a directory to be searched for colormaps. +By default this points to the system directory /usr/local/lib/imtoolcmap, +allowing a set of site default colormaps to be defined here. +.TP 5 +.B "-cmapInitialize \fIbool\fP" +Initialize the ximtool colormap at startup. When setting the \fIbasePixel\fP +option or resource this is required in order to force the Gterm widget to +update its global colormap resource in the X server. The default is +\fIfalse\fP. +.TP 5 +.B "-cmapName \fIname\fP" +Name used for private colormap. The default for all IRAF imaging +applications is \fIimage\fP. Gterm widget based imaging applications +which have the same value of cmapName will share the same colormap, +minimizing colormap flashing and allowing multiple applications to be +run at the same time. +.TP 5 +.B "-config \fIN\fP" +Initial frame buffer configuration number. The default value is 1, indicating +a 512x512 frame buffer with 2 frames. See below for information on the frame +buffers. +.TP 5 +.B "-defgui" +Print the default GUI to the stdout. The GUI is a Tcl program that may be +customized by the user and reloaded using the \fI-gui\fP option or +the \fIgui\fP resource parameter. +.TP 5 +.B "-displayPanner \fIbool\fP" +Display panner marker window at startup. If set, a panner window showing +the full frame buffer will appear in the upper-right side of the main display +window. +.TP 5 +.B "-displayMagnifier \fIbool\fP" +Display magnifier marker window at startup. If set, a magnifier window showing +a zoomed section around the cursor will appear in the upper-left side of the +mail display window. +.TP 5 +.B "-displayCoords \fIbool\fP" +Display WCS coordinate marker window at startup. If set, a coordinate +readout text marker showing will appear in the lower-right side of the main +display window. +.TP 5 +.B "-fifo \fIpipe\fP" +Specifies the name of the fifo pipe to be used, the \fIi\fP +and \fIo\fP suffixes will be added automatically. The default pipe names +will be /dev/imt1i (input pipe) and /dev/imt1o (output pipe). +.TP 5 +.B "-fifo_only" +If set, only fifo pipes will be used for communication with a client program, +sockets will be disabled. +.TP 5 +.B "-gui \fIfile\fP" +Specifies the GUI file to be used. +.TP 5 +.B "-help" +Print a summary of command line options to the screen. +.TP 5 +.B "-imtoolrc \fIfile\fP" +Specifies the frame buffer configuration file to be used. See below for +information on frame buffers. +.TP 5 +.B "-inet_only" +If set, only inet sockets will be used for communication with a client program, +fifo pipes and unix sockets will be disabled. +.TP 5 +.B "-invert" +Start XImtool using inverted colormaps. When set, a "normalized" display +will always be the inverse of the selected colormap. +.TP 5 +.B "-maxColors \fIN\fP" +Specify the max number of colors to be used for the display. +.TP 5 +.B "-memModel \fItype\fP" +Determines how ximtool uses memory in the ximtool client and the X server. +The options are \fIfast\fP, \fIbeNiceToServer\fP, and \fIsmall\fP. The +default is \fIfast\fP, which uses server pixmaps to make frame blink fast. +This is recommended unless server memory is very limited. Note that even in +fast mode, the server pixmap is only the size of the display window, so memory +usage is reasonable even if the frame buffer is very large. +.TP 5 +.B "-nframes \fIN\fP" +Specifies the number of frame buffers to configure at startup. By default +there will be 2 frames available, a maximum of 4 frames are allowed. +.TP 5 +.B "-port \fIN\fP" +Specifies the port number to use when connecting through an inet socket. +.TP 5 +.B "-port_only" +Same as \fI-inet_only\fP option. If set, only inet sockets will be used for +communication with a client program. +.TP 5 +.B "-printConfig \fIname\fP" +Specifies the printer configuration file to use. By default this will be +/usr/local/lib/ximprint.cfg. See below for more information on configuring +output devices. +.TP 5 +.B "-showToolBar" +Show the Toolbox menubar at startup. +.TP 5 +.B "-showPanelBar" +Show the Panels menubar at startup. +.TP 5 +.B "-tile" +The default display mode is to view one frame at a time. In tile frames mode, +2 or 4 frames may be viewed simultaneously in the display window. All the +usual operations (zoom and pan, colortable enhancement, cursor readback, etc.) +still work for each frame even when in tile frames mode. +.TP 5 +.B "-unix \fIname\fP" +Specifies the unix domain socket name to use. A "%d" in the filename will +be replaced with the user id. +.TP 5 +.B "-unix_only" +If set, only unix domain sockets will be used for communication with a client +program, inet sockets and fifos will be disabled. + +.SH "RESOURCES" +XImtool is implemented as a client program which is responsible for loading +the frame buffers/colormaps, communicating with clients, etc, and a +user-modifiable GUI file written as a Tcl script which handles all the user +interface details. The \fIclient resources\fP described below will be common +to any user-defined GUI, the \fIgui resources\fP may change depending on how +extensively the GUI has been modified by the user. Each of these components +has its own set of resources, but to the user setting them is the same as +with any other application. + +\fIGterm\fP widget resources (i.e. those for the main image window or +colorbar) may be set as either client or GUI resources. See the +\fIxgterm(1)\fP man page for a complete description of \fIGterm\fP widget +resources. + +.SS "CLIENT RESOURCES" +The client resources generally define the initial state of the application +or set configuration parameters. +.RS +.TP 25 +.B "Resource Name" +\fBDefault Value\fP +.sp -0.5 +.TP 25 +defConfig +1 +.sp -0.5 +.TP 25 +defNFrames +0 +.sp -0.5 +.TP 25 +tileBorderWidth +3 +.sp -0.5 +.TP 25 +tileBorderColor +9 +.sp -0.5 +.TP 25 +autoscale +false +.sp -0.5 +.TP 25 +antialias +false +.sp -0.5 +.TP 25 +antialiasType +boxcar +.sp -0.5 +.TP 25 +tileFrames +false +.sp -0.5 +.TP 25 +highlightFrames +true +.sp -0.5 +.TP 25 +gui +default +.sp -0.5 +.TP 25 +imtoolrc +/usr/local/lib/imtoolrc +.sp -0.5 +.TP 25 +invert +false +.sp -0.5 +.TP 25 +memModel +fast +.sp -0.5 +.TP 25 +basePixel: +64 +.sp -0.5 +.TP 25 +maxColors: +216 +.sp -0.5 +.TP 25 +cmapInitialize: +false +.sp -0.5 +.TP 25 +cmap1 +none +.sp -0.5 +.TP 25 +cmap2 +none +.sp -0.5 +.TP 25 +cmapDir1 +none +.sp -0.5 +.TP 25 +cmapDir2 +/usr/local/lib/imtoolcmap +.sp -0.5 +.TP 25 +input_fifo +/dev/imt1i +.sp -0.5 +.TP 25 +output_fifo +/dev/imt1o +.sp -0.5 +.TP 25 +unixaddr +/tmp/.IMT%d +.sp -0.5 +.TP 25 +port +5137 +.RE +.LP +Description of ximtool client resources: + +.TP 18 +.B "defConfig" +Default frame buffer configuration number on startup. See below for more +information on frame buffers. +.TP 18 +.B "defNFrames" +Default number of frames on startup. Set to zero to use the value from +the frame buffer configuration (\fIimtoolrc\fP) file. +.TP 18 +.B "tileBorderWidth" +.sp -0.5 +.TP 18 +.B "tileBorderColor" +Used by the tile frames option. Specifies how far +apart to space the frames in tile frames mode. +Color "9" refers to the Gterm widget resource color9, +which is assigned a color with its own resource. +.TP 18 +.B "autoscale" +Enable/disable the autoscale option. +.TP 18 +.B "antialias" +Enable/disable the antialias option. +.TP 18 +.B "antialiasType" +Type of antialiasing. +.TP 18 +.B "tileFrames" +Enable/disable the tile frames option. +.TP 18 +.B "highlightFrames" +Determines whether the current frame is highlighted when in tile frames mode. +.TP 18 +.B "gui" +The GUI to be executed. "default" refers to the default, builtin ximtool GUI. +You can replace this with your own GUI file if you are bold enough, and +completely change the look and functionality of the GUI if desired. +.TP 18 +.B "imtoolrc" +Where to find the imtoolrc file. This defines the +recognized frame buffer configurations. +.TP 18 +.B "invert" +Start Ximtool using an inverted colormap. When set, a "normalized" display +will always be the inverse of the selected colormap. +.TP 18 +.B "memModel" +Determines how ximtool uses memory in the ximtool client and the X server. +The options are "fast", "beNiceToServer", and "small". The default is fast, +which uses server pixmaps to make frame blink fast. This is recommended +unless server memory is very limited. Note that even in fast mode, the server +pixmap is only the size of the display window, so memory usage is reasonable +even if the frame buffer is very large. +.sp -0.5 +.TP 18 +.B "basePixel" +.sp -0.5 +.TP 18 +.B "maxColors" +These two resources determine the region of colormap space used to +render image pixels. +.TP 18 +.B "cmapInitialize" +Initialize the ximtool colormap at startup. This is sometimes necessary to +clear a previous ximtool colormap allowing a new basePixel and maxColors to +take effect. +.TP 18 +.B "cmap1" +.sp -0.5 +.TP 18 +.B "cmap2" +User colormap files. The intent here is to allow individual colormaps to be +conveniently specified as a resource. +.TP 18 +.B "cmapDir1" +.sp -0.5 +.TP 18 +.B "cmapDir2" +User or system colormap directories. By default cmapDir2 points to the system +directory /usr/local/lib/imtoolcmap, allowing a set of site default colormaps +to be defined here. This leaves cmapDir1 available to a user colormap +directory. +.TP 18 +.B "input_fifo" +.sp -0.5 +.TP 18 +.B "output_fifo" +The input and output fifos for fifo i/o. "Input" and "output" are from the +client's point of view. Note that only one display server can use a +fifo-pair at one time. +.TP 18 +.B "unixaddr" +Template address for unix domain socket. The user must have write permission +on this directory, or the file must already exist. %d, if given, is +replaced by the user's UID. +.TP 18 +.B "port" +TCP/IP port for the server. Note that only one server can listen on a port +at one time, so if multiple ximtool servers are desired on the same +machine, they should be given different ports. + +.SS "GUI RESOURCES" + +In principle ximtool can have any number of different GUIs, each of which +defines its own set of resources. GUIs typically define a great many +resources, but most of these are not really intended for modification by +the user (although one can modify them if desired). + +The following are some of the more useful resources used by the default +ximtool GUI. The \fIimagewin\fR resources are Gterm widget resources. +.RS +.TP 35 +.B " Resource Name" +\fBDefault Value\fP +.sp -0.5 +.TP 35 + .geometry: + +.sp -0.5 +.TP 35 + *controlShell.geometry: + +.sp -0.5 +.TP 35 + *info.geometry: +420x240 +.sp -0.5 +.TP 35 + *load_panel.geometry: + +.sp -0.5 +.TP 35 + *save_panel.geometry: + +.sp -0.5 +.TP 35 + *print_panel.geometry: + +.sp -0.5 +.TP 35 + *help_panel.geometry: + +.sp -0.5 +.TP 35 + *cmapName: +image +.sp -0.5 +.TP 35 + *basePixel: +64 +.sp -0.5 +.TP 35 + *imagewin.warpCursor: +true +.sp -0.5 +.TP 35 + *imagewin.raiseWindow: +true +.sp -0.5 +.TP 35 + *imagewin.deiconifyWindow: +true +.sp -0.5 +.TP 35 + *imagewin.ginmodeCursor: +circle +.sp -0.5 +.TP 35 + *imagewin.ginmodeBlinkInterval: +500 +.sp -0.5 +.TP 35 + *imagewin.color0: +black +.sp -0.5 +.TP 35 + *imagewin.color1: +white +.sp -0.5 +.TP 35 + *imagewin.color8: +#7c8498 +.sp -0.5 +.TP 35 + *imagewin.color9: +steelblue +.sp -0.5 +.TP 35 + *imagewin.width: +512 +.sp -0.5 +.TP 35 + *imagewin.height: +512 +.sp -0.5 +.TP 35 + *autoscale: +True +.sp -0.5 +.TP 35 + *zoomfactors: +1 2 4 8 +.sp -0.5 +.TP 35 + *displayCoords: +True +.sp -0.5 +.TP 35 + *displayPanner: +True +.sp -0.5 +.TP 35 + *displayMagnifier: +False +.sp -0.5 +.TP 35 + *showToolBar: +False +.sp -0.5 +.TP 35 + *showPanelBar: +False +.sp -0.5 +.TP 35 +.TP 35 + *blinkRate: +1.0 +.sp -0.5 +.TP 35 + *pannerArea: +150*150 +.sp -0.5 +.TP 35 + *pannerGeom: +-5+5 +.sp -0.5 +.TP 35 + *magnifierArea: +100*100 +.sp -0.5 +.TP 35 + *magnifierGeom: ++5+5 +.sp -0.5 +.TP 35 + *wcsboxGeom: +-5-5 +.sp -0.5 +.TP 35 + *maxContrast: +5.0 +.sp -0.5 +.TP 35 + *warnings: +True +.RE +.LP +Description of selected resources: + +.TP 22 +.B ".geometry" +Geometry of main image window. +.TP 22 +.B "*controlShell.geometry" +Geometry of control panel shell. +.TP 22 +.B "*info.geometry" +Geometry of info box. +.TP 22 +.B "*load_panel.geometry" +Geometry of file load panel. +.TP 22 +.B "*save_panel.geometry" +Geometry of save control panel. +.TP 22 +.B "*print_panel.geometry" +Geometry of print control panel. +.TP 22 +.B "*help_panel.geometry" +Geometry of help box. +.TP 22 +.B "*cmapName" +Name used for private colormap. The default for all IRAF imaging applications +is "image". Gterm widget based imaging applications which have the same value +of cmapName will share the same colormap, minimizing colormap flashing and +allowing multiple applications to be run at the same time. +.TP 22 +.B "*basePixel" +The base colormap cell used by the display colormap. +.TP 22 +.B "*imagewin.warpCursor" +Warp pointer into image window when initiating a cursor read. +.TP 22 +.B "*imagewin.raiseWindow" +Raise image window when initiating a cursor read. +.TP 22 +.B "*imagewin.deiconifyWindow" +Deiconify image window if necessary when initiating a cursor read. +.TP 22 +.B "*imagewin.ginmodeCursor" +Type of cursor when a cursor read is in progress. The default is a +circle. Any selection from the X cursor font can be used. A special +case is "full_crosshair" which is the full crosshair cursor of the +Gterm widget. +.TP 22 +.B "*imagewin.ginmodeBlinkInterval" +Determines whether the cursor blinks when a cursor read is in progress. +The value is given in milliseconds. +.TP 22 +.B "*imagewin.color0" +Background color. +.TP 22 +.B "*imagewin.color1" +Foreground color. +.TP 22 +.B "*imagewin.color8" +Color assigned the panner window. +.TP 22 +.B "*imagewin.color9" +Color used for the tileFrames highlight. +.TP 22 +.B "*imagewin.width" +Width of the main image window. +.TP 22 +.B "*imagewin.height" +Height of the main image window. +.TP 22 +.B "*pannerArea" +Area in pixels of the panner/magnifier window. +.TP 22 +.B "*pannerGeom" +Where to place the panner/magnifier window. +.TP 22 +.B "*magnifierArea" +Area in pixels of the magnifier window. +.TP 22 +.B "*magnifierGeom" +Where to place the magnifier window. +.TP 22 +.B "*wcsboxGeom" +Where to place the coords box. +.TP 22 +.B "*maxContrast" +Maximum contrast value. +.TP 22 +.B "*showToolBar" +Show the Toolbox menubar on startup. +.TP 22 +.B "*showPanelBar" +Show the Panels menubar on startup. + +.sp +.SH DESCRIPTION +.LP +As a display server, XImtool is started as a separate process from client +software such as IRAF. Once it is running it will accept client connections +simultaneously on fifo pipes, unix domain sockets, or inet sockets. A +display client like the IRAF \fIDISPLAY\fP task makes a connection and sends +the image across using an IIS protocol. Once the image is loaded in the +display buffer it may be enhanced, saved to a disk file in a number of +different formats, or printed as Encapsulated Postscript to a printer or +disk file. Up to four frame buffers are allowed, these may be displayed +simultaneously in a tiled mode, or blinked frame-to-frame. Each frame may +have its own colormap or brightness/contrast enhancement. Pan/Zoom and +cursor readout are permitted using \fImarkers\fP, on-line help is also +available. + +When run in standalone mode, images (currently IRAF OIF, GIF, Sun Rasterfiles +or simple FITS formats are permitted) may be loaded on the command line or by +using the Load Panel. This allows you to browse images and perform the same +manipulations as if they had been displayed by a client. + +.SS "GUI OVERVIEW" + +The GUI consists of a large image display window and a number of smaller +pannels that control various specific functions such as image Load, Save +and Print as well as a general purpose Control Panel. The main window +menubar has several menu buttons to the left: the \fIFiles\fR menu is used +to load/save/print an image as well as quit the task. The \fIView\fR menu +let's you select the image orientation, zoom, colormap or frame. The +\fIOptions\fR menu allows you to call up control panels, toggle markers +or blinking etc. Some of this functionality is duplicated elsewhere in +the GUI. + +The right side of the menubar contains command buttons to flip the +image as well as buttons for frame selection. The \fIToolbox Button\fR is +labelled with a 'T', when this is enabled a second menubar appears below +the main one containing a number of command buttons providing quick access +to functions otherwise found elsewhere in the GUI. From the left these +buttons include: +.nf + + symbol - zoom in + Magnify - set zoom factor 1 + - symbol - zoom out + Inv - Invert contrast + Norm - Normalize colormap + Match - Match LUTs + Reg - Register + Cntr - Center frame + < arrow - decrease blink interval + Blink - Toggle frame blink + > arrow - inrease blink interval + <-> symbol - X-flip and Y-flip + |+| symbol - Tile Frame toggle + < arrow - previous frame + - select frame + > arrow - next frame +.fi +The image flip and +frame selection buttons are also moved from the main menubar to provide +more space for the image title. Next to the toolbox toggle is the +\fIControl Panels\fR button which operates in a similar manner. When enabled +a second menubar appears with more buttons: on the left side are two icons +used as accelerators for a disk save (the floppy icon) and print function +(the printer icon), the parameters used for these operations are those which +have seen set through their respective control panel or the task resources. +The middle two sections of buttons are toggles which manage the control +panels for each function or the main imagewindow markers. Finally a help +and a quit button for the task. By default these two extra menubars are +disabled to provide more screen space for the image, they are controlled +by the task \fI*showToolBar\fR and \fI*showPanelBar\fR resources or the +\fI-showToolBar\fR and \fI-showPanelBar\fR command line flags. + +For more detailed information on the operation of the control panels please +see the on-line help (i.e. use the '?' button or Alt-h keystroke in the +main image window). + +.SS "MOUSE OPERATIONS" + +Clicking and dragging MB1 (mouse button 1) in the main image window creates +a rectangular region marker, used to select a region of the image. If you do +this accidentally and don't want the marker, put the pointer in the marker +and type DELETE or BACKSPACE to delete the marker. With the pointer in the +marker, MB3 will call up a marker menu listing some things you can do with +the marker, like zoom the outlined region. MB1 can be used to drag or resize +the marker. See below for more information on markers. + +Clicking on MB2 in the main image window pans (one click) or zooms (two +clicks) the image. Further clicks cycle through the builtin zoom factors. +Moving the pointer to a new location and clicking moves the feature under +the pointer to the center of the display window. Holding down the Shift +key while clicking MB2 will cause a full-screen crosshair cursor to appear +until the button is released, this can be useful for fine positioning of the +cursor. + +MB3 is used to adjust the contrast and brightness of the displayed image. +The position of the pointer within the display window determines the +contrast and brightness values. Click once to set the values corresponding +to the pointer location, or click and drag to continuously adjust the +display. + +.SS "KEYSTROKE ACCELERATORS" + +The following keystrokes are currently defined in the GUI: + +.TP 12 +.B "Ctrl-b" +Backward frame +.sp -0.5 +.TP 12 +.B "Ctrl-c" +Center frame +.sp -0.5 +.TP 12 +.B "Ctrl-f" +Forward frame +.sp -0.5 +.TP 12 +.B "Ctrl-i" +Invert +.sp -0.5 +.TP 12 +.B "Ctrl-m" +Toggle magnifier +.sp -0.5 +.TP 12 +.B "Ctrl-n" +Normalize +.sp -0.5 +.TP 12 +.B "Ctrl-p" +Toggle panner +.sp -0.5 +.TP 12 +.B "Ctrl-r" +Register +.sp -0.5 +.TP 12 +.B "Ctrl-s" +Match LUT scaling +.sp -0.5 +.TP 12 +.B "Ctrl-t" +Tile frames toggle +.sp -0.5 +.TP 12 +.B "Ctrl-u" +Unzoom (zoom=1) +.sp -0.5 +.TP 12 +.B "Ctrl-x" +Flip X +.sp -0.5 +.TP 12 +.B "Ctrl-y" +Flip Y + +.TP 12 +.B "Alt-b" +Blink frames (toggle) +.sp -0.5 +.TP 12 +.B "Alt-c" +Control panel (toggle) +.sp -0.5 +.TP 12 +.B "Alt-h" +Help popup (toggle) +.sp -0.5 +.TP 12 +.B "Alt-i" +Info box popup (toggle) +.sp -0.5 +.TP 12 +.B "Alt-l" +Load file popup (toggle) +.sp -0.5 +.TP 12 +.B "Alt-p" +Print popup (toggle) +.sp -0.5 +.TP 12 +.B "Alt-s" +Save popup (toggle) +.sp -0.5 +.TP 12 +.B "Alt-t" +TclShell popup (toggle) + +.TP 12 +.B "Ctrl-Alt-q" +Quit +.sp -0.5 +.TP 12 +.B "Ctrl-Alt-f" +Fitframe + +.TP 12 +.B "Ctrl-=" +Print using current setup +.sp -0.5 +.TP 12 +.B "Ctrl-<" +Decrease blink rate (blink faster) +.sp -0.5 +.TP 12 +.B "Ctrl->" +Increase blink rate (blink slower) +.sp -0.5 +.TP 12 +.B "Ctrl-+" +Zoom in +.sp -0.5 +.TP 12 +.B "Ctrl--" +Zoom out + +.TP 12 +.B "Ctrl-[hjkl] or " +Move cursor one pixel in each direction +.sp -0.5 +.TP 12 +.B "Ctrl-Shift-[hjkl] or Shift-" +Move cursor ten pixels in each direction +.sp -0.5 +.TP 12 +.B "Ctrl-" +Move one full panner frame in each direction +.sp -0.5 +.TP 12 +.B "Ctrl-Alt-" +Move one half panner frame in each direction +.sp -0.5 +.TP 12 +.B "Alt-1 thru Alt-4" +Set frame displayed +.sp -0.5 +.TP 12 +.B "Ctrl-1 thru Ctrl-9" +Set integer zoom factor + +.LP +\fBNOTE:\fP These keystrokes only work with the cursor in the main image window, +not on the subwindows or in markers since they are implemented as +\fIimagewin\fP translations. If a command does not work, check the cursor +location. + +.SH "CLIENT CONNECTIONS" +.LP +XImtool allows clients to connect in any of the following ways: +.TP 5 +.B "fifo pipes" +The traditional approach. The default global /dev/imt1[io] +pipes may be used, or a private set of fifos can be specified using the +\fI-fifo\fP command line argument or \fI*fifo\fP resource. Values should +be specified as the root pathname to a pair of fifo pipes whose last +character is 'i' or 'o', these characters will be added automatically when +opening the pipes. For example, to use the default pipes the path would +be specified as simply "/dev/imt1". A value of "none" disables this connection. +.TP 5 +.B "tcp/ip sockets" +Clients connect via a tcp/ip socket. The default port is \fI5137\fP, or a +custom port may be specified using the \fI-port\fP command line switch or +a \fI*port\fP resource. This permits connecting to the server +over a remote network connection anywhere on the Internet. +A port number of 0 (zero) disables this connection. +.TP 5 +.B "unix domain sockets" +Like a tcp/ip socket, but limited to a single host system. Usually faster +than a tcp/ip socket, and comparable to a fifo. By default each user gets +their own unix domain socket, so this option allows multiple users to run +ximtools on the same host without having to customize things. The default +value is "/tmp/.IMT%d", other sockets may be defined using the \fI-unix\fP +command line switch or the \fI*unixaddr\fR resource. Legal values +should be specified as a filename to be used for the socket, up to two "%d" +fields are allowed and will be replaced by the userid. An empty string value +disables this connection. +.LP +By default ximtool listens simultaneously for client connections on all three +types of ports. Clients may connect simultaneously by different +means allowing up to three different displays to be loading at the same +time into different frames. + +.SS "COMMUNICATIONS PROTOCOL" + +Clients communicate with XImtool using a protocol developed originally for +IIS (International Imaging Systems) Frame Buffer hardware, the so-called +"IIS protocol"; other more modern protocols will likely be supported in the +future. The IIS protocol is basically a command packet stream with a header +describing the operation to be performed (select frame, load display, read +cursor, etc), and an optional data packet containing e.g. pixels. It is beyond +the scope of this document to describe fully the details of the protocol; +interested users should contact \fIiraf@noao.edu\fP for further information. + +.SH "FRAME BUFFERS" + +XImtool starts up using default frame buffer size of 512x512 pixels, two +(of four possible) frames will be created. When loading +disk images (i.e. run in standalone mode) the frame buffer configuration file +will be searched for a defined frame buffer that is the same size or larger +than the current image, if no suitable buffer can be found a custom frame +buffer the same size as the image will be created in an unused portion of +the configuration table. When used as a display server the frame buffer +configuration number is passed in by the client and loaded explicitly even +if it means clipping the image. If a new frame buffer is +a different size than previously defined frames, all available frames +will be initialized and cleared prior to the display. The default frame buffer +configuration file is /usr/local/lib/imtoolrc, +this can be overridden by defining a IMTOOLRC environment variable naming +the file to be used, by creating a .imtoolrc file in your home directory, or +a new file may be specified using the \fI-imtoolrc\fR command line flag or +\fIimtoolrc\fR application resource. + +The format of the frame buffer configuration file is + + \fIconfigno nframes width height [extra fields]\fP + e.g. + 1 2 512 512 + 2 2 800 800 + 3 1 1024 1024 # comment + : : : : + +At most 128 frame buffer sizes may be defined, each configuration may define +up to 4 frames, configuration numbers need not be sequential. + +\fBNOTE:\fR When defining a new frame buffer for use with client software +such as IRAF the user must also remember to define those frame buffers in +the IRAF \fIdev$graphcap\fR file. + +.SH "MARKERS" + +Although ximtool doesn't do much with markers currently, they are a general +feature of the \fIGterm\fP widget and are used more extensively in other +programs (e.g. the prototype IRAF science GUI applications). XImtool uses +markers for the marker zoom feature discussed above, and also for the panner, +magnifier and the coordinates box. All markers share some of the same +characteristics, so it is worthwhile learning basic marker manipulation +keystrokes. +.TP 3 +\fBo\fP +MB1 anywhere inside a marker may be used to drag the marker. +.TP 3 +\fBo\fP +MB1 near a marker corner or edge, depending on the type of marker, +resizes the marker. +.TP 3 +\fBo\fP +Shift-MB1 on the corner of most markers will rotate the marker. +.TP 3 +\fBo\fP +Markers stack, if you have several markers and you put one on top of +the other. The active marker is highlighted to tell you which of the +stacked markers is active. If the markers overlap, this will be marker +"on top" in the stacking order. +.TP 3 +\fBo\fP +MB2 in the body of a marker "lowers" the marker, i.e. moves it to the +bottom of the stacking order. +.TP 3 +\fBo\fP +Delete or backspace in a marker deletes it. +.TP 3 +\fBo\fP +Markers have their own translation resources and so the default +keystroke commands will not be recognized when the cursor is in a marker. +.LP +For example, try placing the pointer anywhere in the coords box, then press +MB1 and hold it down, and drag the coords box marker somewhere else on the +screen. You can also resize the coords box by dragging a corner, or delete +it with the delete or backspace key. (The Initialize button will get the +original coords box back if you delete it, or you can reset the toggle in +the control panel). + +.SS "PANNER MARKER" + +The panner window always displays the full frame buffer. Try setting the +frame buffer configuration to a nonsquare frame buffer (e.g. imtcryo) and +then displaying a square image (e.g. dev$pix) and the panner will show you +exactly where the image has been loaded into the frame. + +The panner window uses two markers, one for the window border and one to +mark the displayed region of the frame. Most of the usual marker keystrokes +mentioned below apply to these markers as well, e.g. you can use MB1 to +reposition on the panner window within the main image display window, or to +drag the region marker within the panner (pan the image). Resizing the +region marker zooms the image; this is a non-aspect constrained zoom. The +panner window itself can be resized by dragging a corner with MB1. Typing +delete or backspace anywhere in the panner window deletes the panner. + +A special case is MB2. Hitting MB2 anywhere in the panner window pans the +image to that point. This is analogous to hitting MB2 in the main display +window to pan the image. + +The panner marker can be disabled by defining the \fIdisplayPanner\fP +GUI resource, its size and location can be controlled using the +\fIpannerArea\fP and \fIpannerGeom\fP GUI resources respectively. + +.SS "MAGNIFIER MARKER" + +The magnifier marker can be used to zoom in on a small area around the cursor. +It will be updated as the cursor moves but only for small motions (either +mouse movement or with the cursor movement keystrokes) to minimize the +impact on the system. The zoom factor is expressed as some fraction of the +size of the magnifier marker itself. The default zoom is 4, i.e. the area +in the marker represents and area in the image that's one-fourth the size +of the marker. Other zoom factors may be selected using the popup menu +created by hitting MB1 in the marker. + +By default the magnifier marker is not visible, to toggle it select the +\fIMagnifier\fR option from the \fIOptions\fR menubar button. Alternatively, +for just a quick look holding down the Shift and MB1 buttons will display +the marker until the button is released. + +The magnifier marker can be disabled by defining the \fIdisplayMagnifier\fP +GUI resource, its size and location can be controlled using the +\fImagnifierArea\fP and \fImagnifierGeom\fP GUI resources respectively. + +.SS "COORDS BOX MARKER" + +XImtool provides a limited notion of world coordinates, allowing frame +buffer pixel coordinates and pixel values to be converted to some arbitrary +linear client-defined coordinate system. The coords box feature is used to +display these world coordinates as the pointer is moved about in the image +window. + +The quantities displayed in the coords box are X, Y, and Z: the X,Y world +coordinates of the pointer, and Z, the world equivalent of the pixel value +under the pointer. All coordinate systems are linear. The precision of a +displayed quantity is limited by the range of values of the associated raw +frame buffer value. For example, if the display window is 512x512 only 512 +coordinate values are possible in either axis (the positional precision can +be increased however by zooming the image). More seriously, at most about +200 pixel values can be displayed since this is the limit on the range of +pixel values loaded into the frame buffer. If a display pixel is saturated a +"+" will be displayed after the intensity value. + +The coords box is a text marker, it can be moved and resized +with the pointer like any other marker. The coords box marker can be +disabled by defining the \fIdisplayCoords\fP GUI resource, its location +can be controlled by the \fIwcsboxGeom\fP GUI resource. + +.SS "MARKER MENU OPTIONS" + +Except for the panner and WCS markers, MB3 (mouse button 3) calls up the +marker menu providing a limited set of functions common to all markers: +.TP 3 +\fBo +Zoom\fP does an equal aspect zoom of the region outlined by the marker. In +this way you can mark a region of the image and zoom it up. +.TP 3 +\fBo +Fill\fP exactly zooms the area outlined by the marker, making it fill the +display window. Since the marker is not likely to be exactly square, +the aspect ratio of the resultant image will not be unitary. +.TP 3 +\fBo +Print\fP prints the region outlined by the marker to the printer or file +currently configured by the Print Panel. +.TP 3 +\fBo +Save\fP saves the region outlined by the marker to the file currently +configured by the Save Panel. +.TP 3 +\fBo +Info\fP prints a description of the marked region. The text is printed in +the Info Panel. +.TP 3 +\fBo +Unrotate\fP unrotates a rotated marker. +.TP 3 +\fBo +Color\fP is a menu of possible marker colors. +.TP 3 +\fBo +Type\fP is a menu of possible marker types. This is still a little buggy +and it isn't very useful, but you can use it to play with different +types of markers. +.TP 3 +\fBo +Destroy\fP destroys the marker. You can also hit the delete or backspace +key in a marker to destroy the marker. + +.SH "CONTROL PANEL" + +XImtool has a control panel which can be used to exercise most of the +capabilities the program has for image display. The control panel can be +accessed either via the \fBOptions\fP menu from the main window menubar, or by +pressing the leftmost button in the row of buttons at the upper right side +of the display. + +.SS "VIEW CONTROLS" + +The \fBFrame box\fP will list only the frame buffers you currently have +defined. Currently, the only way to destroy a frame buffer is to change the +frame buffer configuration, new frame buffers (up to 4) will be created +automatically if requested by the client. The number of frame buffers +created at startup can be controlled using the \fI-nframes\fP command-line +switch or the \fIdefNFrames\fP resource. + +The \fBtext display\fP window gives the field X,Y center, X,Y scale factors, +and the X,Y zoom factors. The scale factor and the zoom factor will be the same +unless \fIautoscale\fP is enabled. The scale is in units of display pixels per +frame buffer pixel, and is an absolute measure (it doesn't matter whether or +not autoscale is enabled). Zoom is relative to the autoscale factor, which +is 1.0 if autoscaling is disabled. This information is also presented in the +Info panel. + +The numbers in the \fBZoom box\fP are zoom factors. Blue numbers zoom, red +numbers dezoom. \fIZoom In\fP and \fIZoom Out\fP may be used to go to larger +or smaller zoom factors, e.g. "Ctrl-5" followed by "Zoom In" will get you to +zoom factor 10. Specific zoom factors may also be accessed directly as Control +keystrokes, e.g. Ctrl-5 will set zoom factor 5. \fICenter\fP centers the field. +\fIToggle Zoom\fP toggles between the current zoom/center values, and the +unzoomed image. + +\fIAspect\fP recomputes the view so that the aspect ratio is 1.0. Aspect also +integerizes the zoom factor (use the version in the View menu if you don't +want integerization). + +\fIFit Frame\fP makes the display window the same size as the frame buffer. Note +that autoscale has much the same effect, and allows you to resize the +display window to any size you want, or view images too large to fit on the +screen. + +.SS "ENHANCEMENT CONTROLS" + +At the top is a scrolled list of all the available colormaps. Click on the +one you want to load. You can add your own colormaps to this list by +defining the \fIcmap[12]\fP or \fIcmapDir[12]\fP command line flags or +application resources. + +The two sliders adjust the contrast (upper slider) and brightness (lower +slider) of the display. The \fIInvert\fP button inverts the colormap (multiples +the contrast by -1.0). Note that due to the use of the private colormap the +sliders are a bit sluggish when dragged to window the display. If this is +annoying, using MB3 in the display window is faster. + +The \fINormalize\fP button (on the bottom of the control panel) will normalize +the enhancement, i.e. set the contrast and brightness to the default one-to-one +values (1.0, 0.5). This is the preferred setting for many of the pseudocolor +colortables and for private colormaps loaded from disk images. The +\fIInitialize\fP button does a reset of the server. + +.SS "BLINK CONTROLS" + +\fIBlink frames\fP is the list of frames to be blinked. When blink mode is +in effect ximtool just cycles through these frames endlessly, pausing +"blink rate" seconds between each frame. The same frame can be entered +in the list more than once. To program an arbitrary list of blink +frames, hit the Reset button and click on each blink frame button until +it is set to the desired frame number. + +The \fIBlink Rate\fP can be adjusted as slow or as fast as you want using the +arrow buttons. If you set the blink rate small enough it will go to +zero, enabling single step mode (see below). + +The \fIRegister\fP button registers all the blink frames with the current +display frame. Frames not in the blink list are not affected. + +The \fIMatch LUTs\fP button sets the enhancement of all blink frames to the +same values as the display frame. Frames not in the blink list are not affected. + +The \fIBlink\fP button turns blink on and off. When the blink rate is set to +zero the Blink button will single step through the blink frames, one +frame per button press. + +\fBNOTE:\fP You can blink no matter what ximtool options are in effect, but +many of these will slow blink down. To get the fastest blink you may want to +turn off the panner and coords box, and match the LUTs of all the blink frames. +All the ximtool controls are fully active during blink mode, plus you can +load frames etc. + +.SS "OPTIONS:" +.TP 5 +.B "Panner" +Toggles whether to display the panner marker. +.TP 5 +.B "Coords Box" +Toggles whether to display the coordinate box marker. +.TP 5 +.B "Autoscale" +If autoscale is enabled then at zoom=1, the frame buffer will be +automatically scaled to fit within the display window. With autoscale +disabled (the default), the image scale is more predictable, but the +image may be clipped by the display window, or may not fill the display +window. +.TP 5 +.B "Antialiasing" +When dezooming an image, i.e., displaying a large image in a smaller +display window, antialiasing causes all the data to be used to compute +the displayed image. If antialiasing is disabled then image is +subsampled to compute the displayed image. Antialiasing can prevent +subsampling from omitting image features that don't fall in the sample +grid, but it is significantly slower than dezooming via subsampling. +The default is no antialising. +.TP 5 +.B "Tile Frames" +The default display mode is to view one frame at a time. In tile frames +mode, 2 or 4 frames may be viewed simultaneously in the display window. +All the usual operations (zoom and pan, colortable enhancement, cursor +readback, etc.) still work for each frame even when in tile frames mode. +.TP 5 +.B "Warnings" +The warnings options toggles whether you see warning dialog boxes in +situations like overwriting an existing file, clearing the frame +buffer, etc. + +.SH "COLORMAP SELECTION" + +By default XImtool will display images using either a grayscale colormap (e.g. +if loaded by a client), or a private colormap when loading an image from disk +that contains a colormap. Each frame defines its own colormap so you can +define different colormaps or enhancements for each frame, they will change +automatically as you cycle through the frames. + +.SS "BUILTIN COLORMAPS" + +Once loaded, the colormap may either be changed using the builtin colormap +menu under the View menu button on the main window, or from the Enhancement +box on the control panel. XImtool has about a dozen colormap options +builtin, other user-defined colormaps may optionally be loaded. It is not +presently possible to save colormaps for later use. + +.SS "USER-DEFINED COLORMAPS" + +The \fIcmap[12]\fP and \fIcmapDir[12]\fP resources (or command line arguments) +are used to tell which specific colormaps to make available or where to look +for colortables respectively. The colortables are loaded when ximtool starts +up, or when it is reinitialized (e.g. by pressing the Initialize button in +the control panel). XImtool will ignore any files in the colormap directory +which do not look like colortables. New colortables will also be added +automatically for each image loaded from disk. + +The format of a user lookup table is very simple: each row defines one +colortable entry, and consists of three columns defining the red, green, and +blue values scaled to the range 0.0 (off) to 1.0 (full intensity). + + R G B + R G B + (etc.) + +Blank and comment lines (lines beginning with a '#') are ignored. + +Usually 256 rows are provided, but the number may actually be anything in +the range 1 to 256. XImtool will interpolate the table as necessary to +compute the colortable values used in XImtool. XImtool uses at most 201 +colors to render pixel data, so it is usually necessary to interpolate the +table when it is loaded. + +The name of the colortable as it will appear in the XImtool control panel is +the root name of the file, e.g., if the file is "rainbow.lut" the colortable +name will be "rainbow". Lower case names are suggested to avoid name +collisions with the builtin colortables. Private colormaps for disk images +will be have the same name as the image loaded. If the same colortable file +appears in multiple user colortable directories, the first one found will be +used. + +.SS "MINIMIZING COLORMAP CONFLICTS" + +The Gterm widget used by XImtool (i.e. the main display window) uses a private +global colormap for display, this allows it to have greater control over color +cell allocation but can occasionally also cause "colormap flashing" as the +mouse is moved in and out of the application. The problem here is that +in a system with only an 8-bit colormap (256 colors) all applications must +compete for colors, programs such as XV or Netscape allocate colors from the +default colormap leaving only a few free cells for XImtool. Since XImtool +defines a private global colormap it is still able to allocate the needed +cells rather than failing, but it's allocating cells already used by other +applications. As the mouse moves out of the ximtool window those cells are +once again defined in terms of the default colormap, so the ximtool window +is then using a different colormap. It is this switching of the colormap +context that causes the flashing to occur, but there are a few things that +can be done to help minimize this. + +XImtool logically defines 200 colors which the client image display program +can use to render pixels. However, ximtool may or may not actually allocate +all of those colors. By default it currently allocates only about 192 +colors, to reserve 64 colors for the other windows on the screen. You don't +normally notice this as 1) usually the default screen colormap has enough +free cells to allow ximtool to match the colors, and 2) the extra unallocated +cells correspond to the brightest pixels in the rendered image, and these +colors may not be used or usually only correspond to a few small regions +near the saturated cores of bright objects. + +You can eliminate this problem by setting the \fIbasePixel\fP resource to e.g. +48 instead of 64, which will let the gterm widget allocate all 200 colors. +However, this isn't recommended for normal use as it will increase the +likelihood of colormap flashing. If you change \fIbasePixel\fP, either restart +the X server or set the resource \fIcmapInitialize\fP=\fITrue\fP to force the +gterm widget to update its global colormap resource in the X server. +The colormap resource may also be deleted by using the command + + \fIxprop -root -remove GT_image\fP + +These options may also be set on the command line when first starting up. + +In general one can set the Gterm widget resources \fIbasePixel\fP +and \fImaxColors\fP to specify the region of colormap space to be used for +image display. If you set \fImaxColors\fP to a small value, the 200 logical +colors defined by the widget will be mapped by the imtool color model into +whatever number of colors are actually available to the widget. For example, +in the default setup, 200 color values are really being mapped into 192 color +cells used for display, the remaining colors are used for buttons, menus etc +and are allocated from the default colormap by the X toolkit when the +application starts up. + +Even though the Gterm widget uses a private colormap, it is a private +\fIglobal\fP colormap meaning that all Gterm widgets share the same colormap. +An example of colormap sharing in ximtool is the main image window and the +colorbar window. These are two separate gterm widgets that share the same +colormap. They have to share the same colormap, as otherwise when you +windowed the main image window the colorbar window would not accurately +reflect the modified colormap. By default two separate ximtools would also +share the same colormap meaning contrast enhancements in one window would +affect the other. By resetting the \fIcmapName\fP command line option or +resource you can change the name of the private colormap used causing +separate ximtools to use different colormaps, but note this also creates +colormap flashing between the two windows that cannot easily be avoided. +By setting the \fIcmapName\fR to "default" the widget will allocate colors +from the default colormap, but this is of little use at the moment. + +There are a number of other resources that can be used to modify the behavior +of the Gterm widget color management scheme, but these are the most useful ones. +For question and further information feel free to contact \fIiraf@noao.edu\fP. + +.SH "LOAD PANEL" + +The Load Panel allows you load images from disk directly to the frame +buffer, this is analogous to loading an image on the command line except +that browsing is possible. At present recognized formats include IRAF OIF +format (i.e. \fI.imh\fP extension), simple FITS files, GIF, and Sun rasterfiles. +The task will automatically sense the format of the image and load it +appropriately. Images with private colormaps (such as GIF) will be loaded +using the private colormap (meaning that changing the brightness/contrast +enhancements will render a random-colored image), all others will be loaded +with a grayscale colormap. If the \fIGrayscale\fP button is enabled the image +colormap will be converted to grayscale and loaded as the standard grayscale +colormap. The Load panel will close automatically once the image has loaded +unless the \fIBrowse\fP button has been set. + +When loading new images the frame buffer configuration table will +be searched for a frame buffer that is the same size or larger than the new +image size, if no frame buffer can be found a custom buffer exactly the size +of the image will be created. This means that the image may not fill the +display window when loaded, or you may see a subsection of the image in the +main display window. Setting the \fIautoscale\fP option will scale the entire +image to fit the main display window, the full frame buffer will always be +visible in the Panner marker window. + +Images with more colors than can be displayed will automatically be +quantized to the number of available colors before display, 24-bit formats +are not currently supported (but may be in the future and will be similarly +quantized). + +Formats which permit larger than 8-bit pixels will be sampled on a grid +to determine an optimal range in the data to be used to compute a linear +transformation to the number of display colors. This is the same sampling +and transformation used by the IRAF \fIDISPLAY\fR task when computing the +\fIz1/z2\fP values and provides a much better initial display than simple +truncation to 8-bits. +.TP 5 +.B "Directory Browsing" +The load panel contains a list of files in the current directory that +may be selected for loading by selecting with left mouse button. If the +file is a directory the contents of the new directory will be loaded, +if it's a plain file an attempt will be made to load it as an image +otherwise an error popup will appear. Directories in the list are identified +with a trailing '/' character, you will always see any subdirectories +listed even if a filter is specified. + +The \fIRoot\fP button will reset the current directory to the system root +directory. The \fIHome\fP button will reset the current directory to the +user's login directory, the \fIUp\fP button moves up one directory level, and +\fIRescan\fP reloads the file list by rescanning the directory. The current +working directory is given below the file selection window. +.TP 5 +.B "File Patterns" +By default all files and directories will be listed. You may specify a +filter to e.g. select only those files with a given extension like +"*.fits" to list only files with a ".fits" extension. Directories will +always be seen in the list and are identified with a trailing '/' +character. Any valid unix pattern matching string will be recognized. +.TP 5 +.B "Direct File Load" +If you know exactly which file you wish to load, you may enter its +name in the \fILoad File\fP text box and either hit or the Load button +to load it. An absolute or relative path name may be given, if a simple +filename is specified it will be searched for in the current working directory. +.TP 5 +.B "Frame Selections" +By default images will be loaded into frame number 1, you may select a +different frame using the Frame menu button to cycle through the available +frames. + +.SH "SAVE PANEL" + +The Save Panel lets you save the current contents of the main display window +to a disk file (including the Panner/Coords markers, any general graphics +markers, or overlay graphics displayed by the client program). Presently, +only the contents of the main display window may be saved, there is no +facility for saving the undisplayed contents of the entire frame buffer +other than to enable the autoscale feature. A limited number of formats are +currently available, others will be added in future versions. +.TP 5 +.B "File Name" +The File Name text box allows you to enter the file name of the saved +file. A "%d" anywhere in the name will be replaced by a sequence number +allowing multiple frames to be saved with unique names. +.TP 5 +.B "Format" +The Format box allows you to choose the format of the image to be +created. Not all formats are currently implemented. +.TP 5 +.B "Color" +The Color box lets you choose the color type of the image to be +created. The options will change depending on the format, e.g. FITS +doesn't allow color so no color options will be allowed. Formats which +allow 24-bit images will be written using the current colormap after +converting to a 24-bit image, pseudocolor images will be written with +the current colormap. + +.SH "PRINT PANEL" + +The Print Panel allows you dump the contents of the main display window as +Encapsulated Postscript to either a named printer device or to a disk file. +The \fIPrint To\fP selects the type of output, the \fIPrint Command\fP box +will adjust accordingly, either as a Unix printer command or as a file name. +A "%d" anywhere in the name for disk output will be replaced by a sequence +number allowing multiple frames to be saved with unique names. Selecting +printers from the installed list will automatically change the command to be +used to generate the output. This command does not necessarily need to be a +printer command, the printer configuration file lets you define any command +string to process the image. + +.SS "COLOR OPTIONS" + +The Color box lets you choose the color type of the image to be created. +PseudoColor or 24-bit postscript will be created using the current colormap +and enhancements. + +.SS "POSTSCRIPT OPTIONS" + +.TP 5 +.B "Orientation" +Set the page orientation. +.TP 5 +.B "Paper Size" +Select the paper size to be used. +.TP 5 +.B "Image Scale" +Set the scale factor used to compute the final image size. No checking is +done to make sure the image will fit correctly on the page. + +.SS "PROCESSING OPTIONS" +.TP 5 +.B "Auto Scale" +Toggles whether or not the image is automatically scaled +to fit the page. If not enabled, the image scale will be used to +determine the output image size, otherwise the image will be scaled down +(if necessary) to fit on the page. +.TP 5 +.B "Auto Rotate" +Determines whether or not the image will be rotated to fit +on the page. When set, an image larger than the current orientation +will be rotated and possibly scaled to fit the page, otherwise the image +may be scaled so that it fits in the current orientation. +.TP 5 +.B "Max Aspect" +Automatically increases the scale so the image fills the page in the current +orientation. +.TP 5 +.B "Annotate" +The annotate option toggles whether or not the final file includes +annotation such as the image title, a colorbar, and axis labels. There is +currently no option for partial annotation. + +.SS "ANNOTATION OPTIONS" + +.TP 5 +.B "Annotate" +Selects whether Postscript image is to be annotated. +.B "Title" +Annotate with a title on the top of the image. +.B "Borders" +Annotate with borders surrounding the image giving image coordinates. +.B "Colorbar" +Annotate with colorbar at the bottom of the image +.B "Title String" +Title string to use when \fItitle\fR is selected. The special value +\fIimtitle\fR will force the title to be the currently displayed image title, +otherwise it will be this user-selected field. + +.SS "PRINTER SELECTION" + +The printer selection list lets choose the printer to be used. The printer +configuration file is /usr/local/lib/ximprint.cfg by default or may be reset +using the \fI-printConfig\fP command line switch or \fIprintConfig\fP +resource. The format of the file is simply + + \fIname\\tcommand\fP + +The \fIname\fP value is what appears in the selection list and may be more +than a single word, the \fIcommand\fP can be any command that accepts EPS +input from a pipe, the two fields must be separated by a tab character. +Normally the command +will be a simple \fIlpr -Pfoo\fP or some such, but can also include converters +or previewers. At most 128 printer commands may be used. + +.SH "INFO PANEL" + +The information panel is underused at present but is meant to provide basic +information about the frame being displayed. It is updated to be current +while changing enhancements, pan/zoom regions, or frame selection. In cases +where the image title string is truncated in the main display window, the +user can always pop up the info window to see the full title. + +.SH "TCLSHELL" + +The \fITclShell\fP allows the user to type commands directly to the TCL +interpreter, letting you send messages to the object manager or execute +specific procedures in the TCL code that makes up the GUI. It is used as a +development or debugging tool for the GUI, but for an example of what it +does, bring it up and type a command such as + + \fIsend helpButton set background red\fP + + +.SH ENVIRONMENT +DISPLAY specifies which display terminal to use +.br +IMTOOLRC frame buffer configuration file +.br +imtoolrc frame buffer configuration file (alternative) + +.SH FILES +/usr/local/lib/imtoolrc default frame buffer configuration file +.br +/usr/local/lib/ximprint.cfg default printer configuration file +.br +/usr/local/lib/imtoolcmap default colormap directory +.br +/dev/imt1i default input fifo +.br +/dev/imt1o default output fifo +.br +/tmp/.IMT%d default unix socket + +.SH BUGS + +.SH SEE ALSO +xgterm(1), xtapemon(1) + +.SH COPYRIGHT +Copyright(c) 1986 Association of Universities for Research in Astronomy Inc. diff --git a/vendor/x11iraf/ximtool/OLD/ximtool-mag b/vendor/x11iraf/ximtool/OLD/ximtool-mag new file mode 100755 index 00000000..8e051fc8 --- /dev/null +++ b/vendor/x11iraf/ximtool/OLD/ximtool-mag @@ -0,0 +1,5494 @@ +#!/bin/csh -f +# +# XIMTOOL-ALT -- Script wrapper to start XImtool using the alternate GUI. +# The GUI file is contained is this script which is created when the system +# is built, it may be used to run any alternate GUI by simply replacing the +# Tcl script making up the GUI at the end of this script or by using the +# "-gui" command line flag. The only configurable item is the path to the +# XImtool binary to be used, by default the one found in the user's path will +# be used. +# Arguments specific to this GUI include: +# +# -displayMagnifier show magnifier marker on startup +# -showToolBar show toolbar on startup +# -showPanelBar show panelbar on startup +# +#---------------------------------------------------------------------------- + +# Configurable parameters +set XIMTOOL = ximtool # Path to default ximtool binary + + +#------------------------------------------------------------------ +#--------------- Do not modify below this line -------------------- +#------------------------------------------------------------------ +unset noclobber +onintr cleanup + +set SKIP = 106 # offset to GUI file + +# Dump the GUI from this script file. +tail +$SKIP $0 > /tmp/_gui.$$ + +# Check for no arguments. +set q = '"' +set cmd = "-gui /tmp/_gui.$$ -title $q XImtool Experimental GUI $q" + +# Process the script arguments, quoting args when necessary. +if ($#argv > 0) then + while ("$1" != "") + if ("$1" == "-xrm") then + if ("$2" != "") then + shift + else + echo "missing argument to '-xrm ' switch" + exit 1 + endif + set cmd = "$cmd -xrm $q$1$q" + else if ("$1" == "-help") then + $XIMTOOL -help + exit 0 + else if ("$1" == "-defgui") then + tail +$SKIP $0 + exit 0 + else if ("$1" == "-displayMagnifier") then + if ("$2" != "") then + shift + else + echo "missing argument to '-displayMagnifier ' switch" + exit 1 + endif + set cmd = "$cmd -xrm $q XImtool.displayMagnifier:$1$q" + else if ("$1" == "-showToolBar") then + if ("$2" != "") then + shift + else + echo "missing argument to '-showToolBar ' switch" + exit 1 + endif + set cmd = "$cmd -xrm $q XImtool.showToolBar:$1$q" + else if ("$1" == "-showPanelBar") then + if ("$2" != "") then + shift + else + echo "missing argument to '-showPanelBar ' switch" + exit 1 + endif + set cmd = "$cmd -xrm $q XImtool.showPanelBar:$1$q" + else + set cmd = "$cmd $1" + endif + + if ("$2" == "") then + break + else + shift + endif + end +endif + +# Run the command. +echo "$XIMTOOL $cmd ; /bin/rm -f /tmp/_gui*.$$" > /tmp/_gui.cmds.$$ +sh /tmp/_gui.cmds.$$ + +cleanup: + /bin/rm -f /tmp/_gui*.$$ + exit 0 + +#-------------------------------------------------------------------------- +#-------------------------- XIMTOOL-ALT.GUI ------------------------------- +#------ ------ +#------ To change the GUI run by this script just delete everything ------ +#------ below here and replace with the new GUI Tcl script. ------ +#------ ------ +#-------------------------------------------------------------------------- +#-------------------------------------------------------------------------- + +#!/usr/local/bin/obmsh +# +# XIMTOOL-MAG.GUI -- Default GUI for the Ximtool-mag image display server. +# +# Version 1.2 -- Released 4/30/2000 + + +reset-server +appInitialize ximtool XImtool { + *objects:\ + toplevel Layout display \ + display Layout menubar \ + menubar MenuButton fileButton \ + menubar MenuButton viewButton \ + menubar MenuButton optionsButton \ + menubar TextBox imageTitle \ + menubar Toggle panelButton \ + menubar Toggle xflipButton \ + menubar Toggle yflipButton \ + menubar Command prevButton \ + menubar MenuButton frameButton \ + menubar Command nextButton \ + menubar Toggle helpButton \ + display Gterm imagewin \ + display Gterm colorbar \ +\ + toplevel TopLevelShell info \ + info Paned infoPanel \ + infoPanel Box infoBox \ + infoBox Command infoDone \ + infoBox Command infoDown \ + infoBox Command infoUp \ + infoBox Command infoSave \ + infoBox Command infoUpdate \ + infoBox Command infoClear \ + infoPanel AsciiText infoText \ +\ + toplevel TopLevelShell controlShell \ + controlShell Layout controlPanel \ + controlPanel Group viewBox \ + controlPanel Group enhancementBox \ + controlPanel Group blinkBox \ + controlPanel Group optionsBox \ + controlPanel Frame controlBox \ +\ + viewBox Layout view \ + view Group frameSelect \ + frameSelect Layout frameBox \ + frameBox TextToggle frame1 \ + frameBox TextToggle frame2 \ + frameBox TextToggle frame3 \ + frameBox TextToggle frame4 \ + frameBox Command prevFrame \ + frameBox Command nextFrame \ + view Frame frameDataBox \ + frameDataBox TextBox frameData \ + view Group zoomBox \ + zoomBox Layout zoom \ + zoom TextButton toggleZoom \ + zoom TextButton zoomIn \ + zoom Command x1 \ + zoom Command z2 \ + zoom Command z3 \ + zoom Command z4 \ + zoom Command z5 \ + zoom Command z8 \ + zoom TextButton zoomOut \ + zoom TextButton centerFrame \ + zoom Command d2 \ + zoom Command d3 \ + zoom Command d4 \ + zoom Command d5 \ + zoom Command d8 \ + view Layout viewButtons \ + viewButtons Command aspect \ + viewButtons Command flipX \ + viewButtons Command flipY \ + viewButtons Command flipXY \ + viewButtons Command clearFrame \ + viewButtons Command fitFrame \ +\ + enhancementBox Layout enhance \ + enhance Scrollbar2 colorlistScroll \ + enhance Frame colorlistFrame \ + colorlistFrame Porthole colorlistPort \ + colorlistPort MultiList colorlist \ + enhance Frame colordataFrame \ + colordataFrame TextBox colordata \ + enhance Label contrastLabel \ + enhance Slider2d contrastSlider \ + enhance Label brightnessLabel \ + enhance Slider2d brightnessSlider \ + enhance Command invertButton \ + enhance Command optimizeButton \ +\ + blinkBox Layout blink \ + blink Label blinkFramesLabel \ + blink Command blinkFrame1 \ + blink Command blinkFrame2 \ + blink Command blinkFrame3 \ + blink Command blinkFrame4 \ + blink Command blinkReset \ + blink Label blinkRateLabel \ + blink Frame BRframe \ + BRframe Layout BRlayout \ + BRlayout Arrow BRdecrease \ + BRlayout TextBox BRtext \ + BRlayout Arrow BRincrease \ + blink Command registerButton \ + blink Command matchButton \ + blink Toggle blinkButton \ +\ + optionsBox TextToggle pannerButton \ + optionsBox TextToggle magnifierButton \ + optionsBox TextToggle coordsBoxButton \ + optionsBox TextToggle autoscaleButton \ + optionsBox TextToggle antialiasButton \ + optionsBox TextToggle tileFramesButton \ + optionsBox TextToggle warningsButton \ +\ + controlBox Layout control \ + control Command initializeButton \ + control Command normalizeButton \ + control Command doneButton \ +\ + toplevel TopLevelShell tclShell\ + tclShell Paned tclPanel\ + tclPanel Box tclForm\ + tclForm Label tclLabel\ + tclForm Command tclClear\ + tclForm Command tclExecute\ + tclForm Command tclcloseButton\ + tclPanel AsciiText tclEntry\ +\ + toplevel TransientShell warning \ + warning Layout warn \ + warn Frame warnFrame \ + warnFrame Layout WFlayout \ + WFlayout Icon warnIcon \ + WFlayout TextBox warnText \ + warn TextButton warnOk \ + warn TextButton warnCancel \ + warn TextButton warnHelp \ +\ + toplevel TopLevelShell print_panel\ + print_panel Layout printLayout\ +\ + printLayout Group printCmdGroup\ + printLayout Group optGroup\ + printLayout Group cmdGroup\ +\ + printCmdGroup Layout printCmdLayout\ + printCmdLayout Layout labelLayout\ + labelLayout Label toLabel\ + labelLayout Label printerLabel\ + printCmdLayout Layout inputLayout\ + inputLayout TextToggle toPrinter\ + inputLayout TextToggle toFile\ + inputLayout Frame printcmdFrame\ + printcmdFrame AsciiText printcmd\ +\ + optGroup Layout optLayout\ + optLayout Group epsPageGroup\ + optLayout Group optionsGroup\ + optLayout Group printColorGroup\ + optLayout Group printerGroup\ +\ + epsPageGroup Layout epsPage\ + epsPage Label epsOrientLabel\ + epsPage TextToggle epsPortButton\ + epsPage TextToggle epsLandButton\ + epsPage Label epsSizeLabel\ + epsPage TextToggle epsLetterButton\ + epsPage TextToggle epsLegalButton\ + epsPage TextToggle epsA4Button\ + epsPage Label epsScaleLabel\ + epsPage Frame ScaleFrame \ + ScaleFrame Layout ScaleLayout \ + ScaleLayout Arrow SCdecrease \ + ScaleLayout TextBox SCtext \ + ScaleLayout Arrow SCincrease \ +\ + optionsGroup Layout options\ + options TextToggle epsscaleButton\ + options TextToggle autorotateButton\ + options TextToggle aspectButton\ + options TextToggle annotateButton\ + options TextToggle compressButton\ +\ + printColorGroup Layout printColor\ + printColor TextToggle prGrayButton\ + printColor TextToggle prPseudoButton\ + printColor TextToggle prRGBButton\ +\ + printerGroup Layout printers \ + printers Scrollbar2 printlistScroll \ + printers Frame printlistFrame \ + printlistFrame Porthole printlistPort \ + printlistPort MultiList printlist \ +\ + cmdGroup Layout cmdLayout\ + cmdLayout TextButton okayPrint\ + cmdLayout Label printStatus\ + cmdLayout TextButton donePrint\ +\ + toplevel TopLevelShell save_panel\ + save_panel Layout saveLayout\ +\ + saveLayout Group saveNameGroup\ + saveLayout Group saveOptGroup\ + saveLayout Group saveCmdGroup\ +\ + saveNameGroup Layout saveNameLayout\ + saveNameLayout Label saveLabel\ + saveNameLayout Frame fnameFrame\ + fnameFrame AsciiText saveFile\ +\ + saveOptGroup Layout saveOptLayout\ + saveOptLayout Group fmtGroup\ + saveOptLayout Group saveColorGroup\ + saveOptLayout Frame saveDataBox \ + saveDataBox TextBox saveData \ +\ + fmtGroup Layout formats\ + formats TextToggle rasButton\ + formats TextToggle gifButton\ + formats TextToggle jpegButton\ + formats TextToggle tiffButton\ + formats TextToggle fitsButton\ + formats TextToggle x11Button\ + formats TextToggle pnmButton\ + formats TextToggle rawButton\ +\ + saveColorGroup Layout saveColor\ + saveColor TextToggle svGrayButton\ + saveColor TextToggle svPseudoButton\ + saveColor TextToggle svRGBButton\ +\ + saveCmdGroup Layout saveCmdLayout\ + saveCmdLayout TextButton okaySave\ + saveCmdLayout Label saveStatus\ + saveCmdLayout TextButton doneSave\ +\ + toplevel TopLevelShell load_panel \ + load_panel Layout filesLayout \ + filesLayout Group imagesGroup \ + imagesGroup Layout imagesLayout \ + imagesLayout Label imtemplateLabel \ + imagesLayout Frame imtemplateFrame \ + imtemplateFrame AsciiText imtemplateText \ + imagesLayout Scrollbar2 imlistScrollbar \ + imagesLayout Frame imlistFrame \ + imlistFrame Porthole imlistPorthole \ + imlistPorthole MultiList imageList \ + imagesLayout TextButton rootButton \ + imagesLayout TextButton homeButton \ + imagesLayout TextButton upButton \ + imagesLayout TextButton rescanButton \ + imagesLayout TextToggle grayToggle \ + imagesLayout TextToggle browseToggle \ + imagesLayout Label dirLabel \ + imagesLayout Label fnameLabel \ + imagesLayout Frame filnamFrame \ + imagesLayout Label frameLabel \ + imagesLayout Command frameFrame \ + filnamFrame AsciiText fnameText \ +\ + filesLayout Group fbuttonsGroup \ + fbuttonsGroup Layout fbuttonsLayout \ + fbuttonsLayout Command filesLoadButton \ + fbuttonsLayout Label filesStatus \ + fbuttonsLayout Command filesCloseButton \ +\ + toplevel TopLevelShell help_panel \ + help_panel Layout helpLayout \ + helpLayout Layout helpMenuLayout \ + helpLayout Layout helpInfoLayout \ +\ + helpMenuLayout Command helpBack \ + helpMenuLayout Command helpForward \ + helpMenuLayout Command helpHome \ + helpMenuLayout Command helpClose \ +\ + helpLayout Frame helpTextFrame\ + helpTextFrame HTML helpText \ +\ + helpInfoLayout Label helpIRAFLogo \ + helpInfoLayout Label helpInfo1 \ + helpInfoLayout Label helpInfo2 \ + helpInfoLayout Label helpInfo3 \ + helpInfoLayout Label helpNOAOLogo \ +\ + toplevel Parameter ximtool\ + ximtool Parameter alert\ + ximtool Parameter initialize\ + ximtool Parameter resize\ + ximtool Parameter frame\ + ximtool Parameter nframes\ + ximtool Parameter frameSize\ + ximtool Parameter frameRegion\ + ximtool Parameter frameView\ + ximtool Parameter frameTitle\ + ximtool Parameter frameFit\ + ximtool Parameter enhancement\ + ximtool Parameter colortables\ + ximtool Parameter autoscale\ + ximtool Parameter antialias\ + ximtool Parameter tileFrames\ + ximtool Parameter cursorMode\ + ximtool Parameter xflip\ + ximtool Parameter yflip\ + ximtool Parameter printerList\ + ximtool Parameter printOptions\ + ximtool Parameter loadOptions\ + ximtool Parameter saveOptions\ + ximtool Parameter filelist\ + ximtool Parameter help + + + ! Main image window resources. + ! ------------------------------- + *allowShellResize: True + *beNiceToColormap: False + *menuLabel.foreground: Gold + *markerMenu.foreground: Black + *markerMenu.background: SteelBlue + *markerMenu*SimpleMenu.foreground: Black + *markerMenu*SimpleMenu.background: SteelBlue + *markerColor.SmeBSB.leftMargin: 64 + *markerColor.SmeBSB.rightMargin: 0 + *markerColor.menuLabel.leftMargin: 5 + *markerColor.menuLabel.rightMargin: 5 + + *display.background: gray + *display.borderWidth: 0 + + *display.debug: False + *display.layout: horizontal { \ + -1 \ + vertical { \ + 3 \ + menubar < +inf -inf * > \ + 3 \ + imagewin < +inf -inf * +inf - inf > \ + 3 \ + colorbar < +inf -inf * > \ + } \ + -1 \ + } + + *menubar.layout: horizontal { \ + 1 < -1 > \ + fileButton 1 < -1 > viewButton 1 < -1 > optionsButton \ + 1 < -1 > \ + imageTitle < +inff -inff * > \ + 1 < -1 > \ + panelButton 1 < -1 > \ + 1 < -1 > \ + xflipButton 1 < -1 > yflipButton \ + 1 < -1 > \ + prevButton 1 < -1 > frameButton 1 < -1 > nextButton \ + 1 < -1 > \ + helpButton \ + 1 < -1 > \ + } + + *menubar*SimpleMenu.foreground: Black + *menubar*SimpleMenu.background: gray65 + *menubar*SimpleMenu.borderColor: Black + *menubar*SimpleMenu.borderWidth: 1 + *SmeBSB.vertSpace: 10 + + *SimpleMenu*font: -adobe-times-bold-r-normal-*-12-*-*-*-*-*-iso8859-1 + *fileButton.font: -adobe-times-bold-i-normal-*-12-*-*-*-*-*-iso8859-1 + *optionsButton.font: -adobe-times-bold-i-normal-*-12-*-*-*-*-*-iso8859-1 + *viewButton.font: -adobe-times-bold-i-normal-*-12-*-*-*-*-*-iso8859-1 + + *menubar.width: 512 + *menubar*background: gray + *menubar*foreground: black + *menubar*borderWidth: 0 + *menubar*Command.label: x + *menubar*Command.internalWidth: 0 + *menubar*Command.borderWidth: 0 + *menubar*Toggle.label: x + *menubar*Toggle.internalWidth: 0 + *menubar*Toggle.borderWidth: 0 + + *fileButton.label: File + *fileButton.menuName: fileMenu + *viewButton.label: View + *viewButton.menuName: viewMenu + *optionsButton.label: Options + *optionsButton.menuName: optionsMenu + *imageTitle*font: *times-bold-r*12* + *imageTitle.width: 40 + *imageTitle.height: 20 + *frameButton.menuName: frameMenu + *frameButton.label: 1 + *frameButton.width: 20 + + *Gterm.cmapName: image + *Gterm.basePixel: 64 + *imagewin.warpCursor: true + *imagewin.raiseWindow: true + *imagewin.deiconifyWindow: true + *imagewin.ginmodeCursor: circle + *imagewin.ginmodeBlinkInterval: 500 + *imagewin.resizable: true + *imagewin.copyOnResize: false + *imagewin.width: 512 + *imagewin.height: 512 + *imagewin.color8: #7c8498 + *imagewin.color9: steelblue + + *imagewin.translations: \ + NoneLeft: call(move_cursor,-1,0) \n\ + NoneDown: call(move_cursor,0,1) \n\ + NoneUp: call(move_cursor,0,-1) \n\ + NoneRight: call(move_cursor,1,0) \n\ + !Shift Left: call(move_cursor,-10,0) \n\ + !Shift Down: call(move_cursor,0,10) \n\ + !Shift Up: call(move_cursor,0,-10) \n\ + !Shift Right: call(move_cursor,10,0) \n\ + !Ctrl h: call(move_cursor,-1,0) \n\ + !Ctrl j: call(move_cursor,0,1) \n\ + !Ctrl k: call(move_cursor,0,-1) \n\ + !Ctrl l: call(move_cursor,1,0) \n\ + !Ctrl Shift h: call(move_cursor,-10,0) \n\ + !Ctrl Shift j: call(move_cursor,0,10) \n\ + !Ctrl Shift k: call(move_cursor,0,-10) \n\ + !Ctrl Shift l: call(move_cursor,10,0) \n\ + !Alt 1: call(cpSetFrame,frame1) \n\ + !Alt 2: call(cpSetFrame,frame2) \n\ + !Alt 3: call(cpSetFrame,frame3) \n\ + !Alt 4: call(cpSetFrame,frame4) \n\ + !Ctrl 1: call(cpZoom,1,1,fixed) \n\ + !Ctrl 2: call(cpZoom,2,2,fixed) \n\ + !Ctrl 3: call(cpZoom,3,3,fixed) \n\ + !Ctrl 4: call(cpZoom,4,4,fixed) \n\ + !Ctrl 5: call(cpZoom,5,5,fixed) \n\ + !Ctrl 6: call(cpZoom,6,6,fixed) \n\ + !Ctrl 7: call(cpZoom,7,7,fixed) \n\ + !Ctrl 8: call(cpZoom,8,8,fixed) \n\ + !Ctrl 9: call(cpZoom,9,9,fixed) \n\ + !Ctrl b: call(prevFrame,$name) \n\ + !Ctrl c: call(cpZoomAction,centerFrame) \n\ + !Ctrl f: call(nextFrame,$name) \n\ + !Ctrl i: call(cpInvert) \n\ + !Ctrl n: call(normalize) \n\ + !Ctrl m: call(toggleMagnifier) \n\ + !Ctrl p: call(togglePanner) \n\ + !Ctrl Alt q: call(Quit) \n\ + !Ctrl r: call(cpRegisterFrames) \n\ + !Ctrl s: call(cpMatchFrames) \n\ + !Ctrl t: call(tileFramesToggle) \n\ + !Ctrl u: call(cpZoom,1,1,fixed) \n\ + !Ctrl x: call(cpFrameAction,flipX) \n\ + !Ctrl y: call(cpFrameAction,flipY) \n\ + !Ctrl Alt =: call(Print) \n\ + Ctrl +: call(cpZoom,2.0,2.0,relative) \n\ + Ctrl -: call(cpZoom,0.5,0.5,relative) \n\ + Ctrl \<: call(cpSetBlinkRate,BRdecrease) \n\ + Ctrl \>: call(cpSetBlinkRate,BRincrease) \n\ + !Alt b: call(toggleBlink) \n\ + !Alt c: call(panel) \n\ + !Ctrl Alt f: call(fitFrame) \n\ + !Alt h: call(Help) \n\ + !Alt i: call(infoPanel) \n\ + !Alt l: call(loadPanel) \n\ + !Alt p: call(printPanel) \n\ + !Alt s: call(savePanel) \n\ + !Alt t: call(tclPanel) \n\ + !Shift: call(setDynamicMagnifier,1) \n\ + !Shift: call(setDynamicMagnifier,0) \n\ + !: call(makeMarker,$name,$x,$y) m_create() \n\ + !Shift : crosshair(on) \n\ + !Shift : crosshair(on) \n\ + !Shift: crosshair(off) \n\ + !: crosshair(off) \n\ + !: call(zoom,$x,$y) \n\ + !: call(windowColormap,$x,$y) \n\ + !: call(windowColormap,$x,$y) \n\ + : enter-window() \n\ + : leave-window() \n\ + : graphics-input() \n\ + : track-cursor() call(wcsUpdate,$x,$y) call(magnifierMapImage,$x,$y) + +! The following translations can be used to enable windowing of the +! individual RGB components of the colormap. It's not very useful but +! included here for those that may wish to use it. +!-------------------------------------------------------------------------- +! !Ctrl : call(windowRGB,1,$x,$y,0) \n\ +! !Ctrl : call(windowRGB,1,$x,$y,0) \n\ +! !Ctrl : call(windowRGB,1,$x,$y,1) \n\ +! !Ctrl : call(windowRGB,2,$x,$y,0) \n\ +! !Ctrl : call(windowRGB,2,$x,$y,0) \n\ +! !Ctrl : call(windowRGB,2,$x,$y,1) \n\ +! !Ctrl : call(windowRGB,3,$x,$y,0) \n\ +! !Ctrl : call(windowRGB,3,$x,$y,0) \n\ +! !Ctrl : call(windowRGB,3,$x,$y,1) \n\ + + *colorbar.maxRasters: 1 + *colorbar.maxMappings: 1 + *colorbar.width: 512 + *colorbar.height: 10 + + ! INFO box resources. + ! ------------------------------ + *info.geometry: 420x240 + *info.title: Information Panel + *info*Command.font: 7x13bold + *infoPanel*background: gray + *infoDone.label: Done + *infoDown.label: Down + *infoDown.sensitive: False + *infoUp.label: Up + *infoUp.sensitive: False + *infoSave.label: Save + *infoSave.sensitive: False + *infoUpdate.label: Update + *infoClear.label: Clear + *infoText*scrollVertical: always + *infoText*scrollHorizontal: whenNeeded + *infoText*displayCaret: False + *infoText*editType: append + *info*ScrollbarBackground: #c0c0c0 + *info*Scrollbar*background: #c0c0c0 + *info*Scrollbar*width: 17 + *info*Scrollbar*height: 17 + *info*Scrollbar*shadowWidth: 2 + *info*Scrollbar*cursorName: top_left_arrow + *info*Scrollbar*pushThumb: true + + + ! Main Control Panel. + ! ------------------------------ + *controlShell.title: XImtool Control + *controlShell.iconName: XimCon + *controlPanel*background: gray + *controlPanel*foreground: black + *controlPanel*TextBox.background: gray63 + *controlPanel*internalWidth: 0 + *controlPanel*borderWidth: 0 + *controlPanel*Command.highlightThickness: 0 + + *TextBox.font: 7x13bold + *TextToggle.font: -adobe-times-medium-r-normal-*-12-*-*-*-*-*-iso8859-1 + *Command.font: -adobe-times-medium-r-normal-*-12-*-*-*-*-*-iso8859-1 + *Toggle.font: -adobe-times-medium-r-normal-*-12-*-*-*-*-*-iso8859-1 + *Label.font: -*-helvetica-medium-r-normal-*-12-*-iso8859-1 + *MultiList.font: -adobe-times-medium-r-normal-*-12-*-*-*-*-*-iso8859-1 + *toggleZoom.font: -*-helvetica-medium-r-normal-*-12-*-iso8859-1 + *centerFrame.font: -*-helvetica-medium-r-normal-*-12-*-iso8859-1 + *zoom*Command.font: 7x13bold + *blinkFrame1.font: 7x13bold + *blinkFrame2.font: 7x13bold + *blinkFrame3.font: 7x13bold + *blinkFrame4.font: 7x13bold + + *controlPanel.debug: False + *controlPanel.layout: vertical { \ + 5 < -5 > \ + horizontal { \ + -1 \ + viewBox < +inf -inf * > \ + -1 \ + } \ + 5 < -5 > \ + horizontal { \ + -1 \ + enhancementBox < +inf -inf * +inf -inf > \ + -1 \ + vertical { \ + -1 \ + blinkBox < * +inf - inf > \ + 1 \ + optionsBox < * +inff -inff > \ + -1 \ + } \ + -1 \ + } \ + controlBox < +inf * > \ + } + + ! VIEW + ! ------------------ + *viewBox.label: View + *viewBox.location: 0 0 410 0 + *viewBox.shrinkToFit: True + *viewBox.outerOffset: 5 + + *view.debug: False + *view.layout: vertical { \ + 5 < +inf -5 > \ + horizontal { \ + -1 \ + frameSelect \ + -1 \ + vertical { \ + 5 < -5 > \ + frameDataBox < +inff -100% * +inff -100% > \ + 5 < -5 > \ + } \ + -1 \ + zoomBox \ + -1 \ + } \ + 1 < +inf > \ + viewButtons < +inf -inf * +inf -inf > \ + 5 < +inf -5 > \ + } + + *frameDataBox.frameType: sunken + *frameDataBox.frameWidth: 2 + *frameData.width: 130 + *frameData.height: 50 + + *frameSelect.location: 0 0 72 0 + *frameSelect.shrinkToFit: True + *frameSelect.outerOffset: 5 + *frameSelect.innerOffset: 5 + *frameSelect.frameWidth: 2 + *frameSelect*offIcon: diamond0s + *frameSelect*onIcon: diamond1s + *frameSelect*highlightColor: blue + *frameSelect.label: Frame: + + *frameBox.debug: False + *frameBox.layout: vertical { \ + frame1 < +inf * > \ + frame2 < +inf * > \ + frame3 < +inf * > \ + frame4 < +inf * > \ + 10 < +inf -10 > \ + horizontal { \ + -1 \ + prevFrame \ + 10 < +inf -5 > \ + nextFrame \ + -1 \ + } \ + -1 \ + } + + *frameBox*location: 0 0 10 20 + *frameBox*alignment: left + *frameBox*frameWidth: 0 + *frameBox*highlightThickness: 0 + *frameBox*frame1.label: \ 1\ \ + *frameBox*frame2.label: \ 2\ \ + *frameBox*frame3.label: \ 3\ \ + *frameBox*frame4.label: \ 4\ \ + *frameBox*Command.width: 24 + *frameBox*prevFrame.label: xx + *frameBox*nextFrame.label: xx + + *zoomBox.label: Zoom: + *zoomBox.location: 0 0 160 127 + *zoomBox.outerOffset: 5 + *zoomBox.shrinkToFit: True + + *zoom.debug: False + *controlPanel*zoom*internalWidth: 4 + *zoom.layout: vertical { \ + space = ((50% of width zoom) - (50% of width z5)) \ + 1 < +inf > \ + horizontal { \ + vertical { \ + toggleZoom < +inf * +inf > \ + 2 \ + } \ + 2 \ + vertical { \ + 2 < +inf > \ + z5 \ + 1 < +inf > \ + z3 \ + 0 < +inf > \ + } \ + 2 \ + vertical { \ + zoomIn < +inf * +inf > \ + 2 \ + } \ + } \ + 1 < +inf > \ + horizontal { \ + 2 < +inf > \ + d8 d4 d2 x1 z2 z4 z8 \ + 2 < +inf > \ + } \ + 1 < +inf > \ + horizontal { \ + vertical { \ + 2 \ + zoomOut < +inf * +inf > \ + } \ + 2 \ + vertical { \ + 0 < +inf > \ + d3 \ + 1 < +inf > \ + d5 \ + 2 < +inf > \ + } \ + 2 \ + vertical { \ + 2 \ + centerFrame < +inf * +inf > \ + } \ + } \ + 1 < +inf > \ + } + + *toggleZoom.label: Toggle\nZoom + *toggleZoom.outerOffset: 0 + *toggleZoom.width: 30 + *toggleZoom.height: 25 + + *zoomIn.label: Zoom\nIn + *zoomIn.outerOffset: 0 + *zoomIn.width: 30 + *zoomIn.height: 25 + + *x1.label: 1 + *z2.label: 2 + *z3.label: 3 + *z4.label: 4 + *z5.label: 5 + *z8.label: 8 + + *controlPanel*zoomIn.foreground: royalBlue3 + *controlPanel*z4.foreground: royalBlue3 + *controlPanel*z5.foreground: royalBlue3 + *controlPanel*z8.foreground: royalBlue3 + *controlPanel*z2.foreground: royalBlue3 + *controlPanel*z3.foreground: royalBlue3 + + *zoomOut.label: Zoom\nOut + *zoomOut.outerOffset: 0 + *zoomOut.width: 30 + *zoomOut.height: 25 + + *centerFrame.label: Center + *centerFrame.outerOffset: 0 + *centerFrame.width: 30 + *centerFrame.height: 25 + + *d2.label: 2 + *d3.label: 3 + *d4.label: 4 + *d5.label: 5 + *d8.label: 8 + + *controlPanel*zoomOut.foreground: mediumVioletRed + *controlPanel*d2.foreground: mediumVioletRed + *controlPanel*d3.foreground: mediumVioletRed + *controlPanel*d4.foreground: mediumVioletRed + *controlPanel*d5.foreground: mediumVioletRed + *controlPanel*d8.foreground: mediumVioletRed + + *viewButtons.location: 0 0 100 80 + *viewButtons.debug: False + *viewButtons.layout: horizontal { \ + 5 < -2 > \ + aspect < +inf * > \ + 5 < -2 > \ + flipX < +inf * > \ + 5 < -2 > \ + flipY < +inf * > \ + 5 < -2 > \ + flipXY < +inf * > \ + 5 < -2 > \ + clearFrame < +inf * > \ + 5 < -2 > \ + fitFrame < +inf * > \ + 5 < -2 > \ + } + + *nextFrame.label: Next Frame + *prevFrame.label: Previous Frame + *fitFrame.label: Fit Frame + *aspect.label: Aspect + *clearFrame.label: Clear Frame + *flipX.label: Flip X + *flipY.label: Flip Y + *flipXY.label: Flip XY + + + ! ENHANCEMENT + ! ------------------ + *enhancementBox.label: Enhancement + *enhancementBox.location: 0 0 110 0 + *enhancementBox.shrinkToFit: True + *enhancementBox.outerOffset: 5 + + *enhance.debug: False + *enhance.layout: vertical { \ + 3 < -3 > \ + horizontal { \ + 2 < -2 > \ + colorlistScroll < * +inff -inff > \ + -1 \ + colorlistFrame < +inf -inf * +inff -inff > \ + 2 < -2 > \ + } \ + -1 \ + horizontal { \ + 2 < -2 > \ + colordataFrame < +inf -inf * +inf -inf > \ + 2 < -2 > \ + } \ + 5 < -5 > \ + horizontal { \ + 2 < -2 > \ + vertical { \ + -1 \ + contrastLabel \ + 3 < -3 > \ + brightnessLabel \ + -1 \ + } \ + 3 < -3 > \ + vertical { \ + -1 \ + contrastSlider < +inf -inf * > \ + 3 < -3 > \ + brightnessSlider < +inf -inf * > \ + -1 \ + } \ + 2 < -2 > \ + } \ + 5 < -5 > \ + horizontal { \ + 3 < -3 > \ + invertButton < +inf -inf * > \ + 5 < -5 > \ + optimizeButton < +inf -inf * > \ + 3 < -3 > \ + } \ + 3 < -3 > \ + } + + *enhance*FrameType: sunken + *enhance*FrameWidth: 2 + *enhance*BorderWidth: 0 + *enhance*Label.ShadowWidth: 0 + *enhance*thumbColor: gray + + *colorlistScroll.location: 0 0 20 10 + *colorlistScroll.vertical: True + *colorlistScroll*minsize: 10 + *colorlist.width: 100 + *colorlist.height: 78 + *colordata.width: 100 + *colordata.height: 45 + *enhance*colordata.frameWidth: 0 + *contrastLabel.label: x + *contrastSlider.location: 0 0 100 20 + *brightnessLabel.label: x + *brightnessSlider.location: 0 0 100 20 + *invertButton.label: Invert + *optimizeButton.label: Optimize + + ! BLINK + ! --------------------- + *blinkBox.label: Blink + *blinkBox.location: 0 0 230 0 + *blinkBox.shrinkToFit: True + *blinkBox.outerOffset: 5 + + + *blink.debug: False + *blink.layout: vertical { \ + space = (width blinkFramesLabel - width blinkRateLabel) \ + 3 < -3 > \ + horizontal { \ + 0 \ + blinkFramesLabel \ + 3 < +inf > \ + blinkFrame1 < -50% * > \ + blinkFrame2 < -50% * > \ + blinkFrame3 < -50% * > \ + blinkFrame4 < -50% * > \ + 4 < +inf > \ + blinkReset \ + 2 \ + } \ + 5 < -5 > \ + horizontal { \ + $space \ + blinkRateLabel \ + 2 \ + BRframe < +inf * > \ + } \ + 5 < +inf -100% > \ + horizontal { \ + 3 \ + registerButton < +inf * > \ + 5 < -5 > \ + matchButton < +inf * > \ + 5 < -5 > \ + blinkButton < +inf * > \ + 2 \ + } \ + 3 < -3 > \ + } + + *BRlayout.layout: horizontal { \ + BRdecrease \ + BRtext < +inf -100% * > \ + BRincrease \ + } + + *blink.Label.borderWidth: 0 + *blink.Label.shadowWidth: 0 + *controlPanel*blink*internalWidth: 4 + *controlPanel*blink*Arrow.foreground: gray + *controlPanel*blink*Arrow.background: gray63 + *blink*Arrow.width: 16 + *blink*Arrow.height: 25 + + *blinkFramesLabel.label: Blink Frames: + *blinkFrame1.label: 1 + *blinkFrame2.label: 2 + *blinkFrame3.label: 3 + *blinkFrame4.label: 4 + *blinkReset.label: Reset + + *blinkRateLabel.label: Blink Rate: + *BRframe.frameType: sunken + *BRframe.frameWidth: 2 + *BRtext.width: 40 + *BRtext.height: 25 + *BRdecrease.direction: left + *BRincrease.direction: right + *registerButton.label: Register + *matchButton.label: Match LUTs + *blinkButton.label: Blink + + ! OPTIONS + ! --------------------- + *optionsBox.label: Options + *optionsBox.location: 0 0 220 0 + *optionsBox.shrinkToFit: False + *optionsBox.outerOffset: 5 + *optionsBox*offIcon: square0s + *optionsBox*onIcon: square1s + *optionsBox*selectionStyle: multi + *optionsBox*highlightColor: yellow + *optionsBox.TextToggle.location: 0 0 102 25 + *optionsBox.TextToggle.frameWidth: 0 + *optionsBox*alignment: left + + *pannerButton.label: Panner + *magnifierButton.label: Magnifier + *coordsBoxButton.label: Coords Box + *autoscaleButton.label: Autoscale + *antialiasButton.label: Antialias + *tileFramesButton.label: Tile Frames + *warningsButton.label: Warnings + + + ! CONTROL + ! ---------------------- + *controlBox.frameType: chiseled + *controlBox.frameWidth: 2 + *controlBox.outerOffset: 5 + *controlBox.innerOffset: 5 + *controlBox.height: 30 + + *control.debug: False + *control.layout: horizontal { \ + 1 \ + initializeButton < +inf * > \ + 5 < -5 > \ + normalizeButton < +inf * > \ + 80 < +inf -100% > \ + doneButton < +inf * > \ + 1 \ + } + + *initializeButton.label: Initialize + *normalizeButton.label: Normalize + *doneButton.label: Done + + ! WARNING dialog. + ! --------------------- + *warning.geometry: +400+300 + *warning*background: gray + *warning*borderWidth: 0 + *warning*TextBox.frameWidth: 0 + *warning*TextButton.frameWidth: 2 + *warning*TextButton.width: 40 + *warning*TextButton.height: 25 + + *warn.layout: vertical { \ + 5 < -5 > \ + horizontal { \ + 5 < -5 > \ + warnFrame < +inf * +inf > \ + 5 < -5 > \ + } \ + 1 < -1 > \ + horizontal { \ + 5 < -5 > \ + warnOk < +inf * > \ + 5 < +inf -5 > \ + warnCancel < +inf * > \ + 5 < +inf -5 > \ + warnHelp < +inf * > \ + 5 < -5 > \ + } \ + 1 < -1 > \ + } + + *WFlayout.layout: horizontal { \ + 5 < -5 > \ + vertical { \ + 5 < +inf -5 > \ + warnIcon \ + 5 < +inf -5 > \ + } \ + 5 < -5 > \ + warnText < +inf -inf * +inf -inf > \ + 5 < -5 > \ + } + + *warnLabel.label: Warning + *warnLabel.width: 300 + *warnLabel.height: 20 + *warnFrame.frameType: sunken + *warnFrame.frameWidth: 2 + *warnIcon.location: 0 0 40 40 + *warnIcon.image: WARNING + *warnText.label: generic warning text + *warnText.width: 270 + *warnText.height: 60 + *warnOk.label: OK + *warnCancel.label: Cancel + *warnHelp.label: Help + *warnHelp.sensitive: False + + + !===================================== + ! Print Setup Panel resources. ! + !===================================== + *print_panel.title: Printer Setup + *print_panel.highlightThickness: 1 + *print_panel*background: gray + *print_panel*TextBox.background: gray63 + *print_panel*TextBox.foreground: black + *print_panel*TextToggle.alignment: left + *print_panel*Arrow.background: gray63 + *print_panel*Arrow.foreground: gray + *print_panel*Arrow.width: 16 + *print_panel*Arrow.height: 25 + *print_panel*TextToggle.frameWidth: 0 + *print_panel*TextToggle.height: 20 + *print_panel*Label.borderWidth: 0 + *print_panel*Label.shadowWidth: 0 + *print_panel*Label.background: gray + *print_panel*TextButton.width: 40 + *print_panel*TextButton.height: 25 + + *printLayout.borderWidth: 0 + *printLayout.layout: vertical { \ + -1 \ + printCmdGroup < +inf * > \ + -1 \ + optGroup < +inf -inf * +inf -inf > \ + -1 \ + cmdGroup < +inf * > \ + -1\ + } + + + ! Print Group resources. + !---------------------------------- + *printCmdGroup.borderWidth: 0 + *printCmdGroup.outerOffset: 5 + *printCmdGroup.label: + *printCmdGroup.location: 0 0 400 85 + *printCmdGroup*offIcon: diamond0s + *printCmdGroup*onIcon: diamond1s + *printCmdGroup*highlightColor: cyan + *printCmdGroup*Frame.frameType: sunken + *printCmdGroup*Frame.frameWidth: 2 + *printCmdGroup*Frame.width: 300 + *printCmdGroup*Label.justify: right + *printCmdGroup*Text*editType: edit + *printCmdGroup*TextToggle.width: 70 + *printCmdGroup*shadowWidth: 0 + *printCmdGroup*borderWidth: 0 + *printCmdLayout.borderWidth: 0 + *printCmdLayout*Label.font: 7x13bold + *printCmdLayout.layout: horizontal { \ + -1 \ + labelLayout \ + 5 < -5 > \ + inputLayout < +inf -inf * +inf > \ + 2 \ + } + + *labelLayout.borderWidth: 0 + *labelLayout.layout: vertical { \ + 5 \ + toLabel \ + 11 \ + printerLabel \ + -3 \ + } + *printerLabel.label: Print Command: + *toLabel.label: Print To: + *toPrinter.label: Printer + *toPrinter.on: True + *toFile.label: File + + + *inputLayout*Text*font: -*-helvetica-medium-r-normal-*-12-*-iso8859-1 + *inputLayout.borderWidth: 0 + *inputLayout.layout: horizontal { \ + 3 \ + vertical { \ + 5 \ + horizontal { \ + 5 < -5 > \ + toPrinter \ + 5 < -5 > \ + toFile \ + 5 < +inf -inf > \ + } \ + 5 \ + printcmdFrame < +inf -inf * > \ + 5 \ + } \ + 3 \ + } + *printcmd*string: lpr + *printcmd*height: 22 + *printcmd*Text*editType: edit + *printcmd*Text*font: -*-helvetica-medium-r-normal-*-12-*-iso8859-1 + + ! Main options groups layout resources. + !--------------------------------------- + *optGroup.frameWidth: 2 + *optGroup.frameType: chiseled + *optGroup.label: + *optGroup.location: 0 0 400 265 + *optGroup.outerOffset: 5 + *optGroup.innerOffset: 0 + *optLayout*borderWidth: 0 + *optLayout.layout: horizontal { \ + -1 \ + vertical { \ + 5 < -5 > \ + epsPageGroup < +inf -inf * > \ + 0 < -0 > \ + optionsGroup < +inf -inf * +inf -inf > \ + -1 \ + } \ + 0 < -0 > \ + vertical { \ + 5 < -5 > \ + printColorGroup < +inf -inf * > \ + 0 < -0 > \ + printerGroup < +inf * +inf > \ + -1 \ + } \ + -1 \ + } + + + ! Postscript Options group resources. + ! ----------------------------------- + *epsPageGroup.label: Postscript Options + *epsPageGroup.outerOffset: 5 + *epsPageGroup.innerOffset: 5 + *epsPageGroup.location: 0 0 250 150 + *epsPageGroup*offIcon: diamond0s + *epsPageGroup*onIcon: diamond1s + *epsPageGroup*highlightColor: cyan + *epsPage*Label.justify: left + *epsPage*Label.font: 7x13bold + *epsPage.layout: vertical { \ + -1 \ + epsOrientLabel \ + 4 < -4 > \ + horizontal { \ + 10 \ + epsPortButton \ + epsLandButton \ + -1 \ + } \ + 4 < -4 > \ + epsSizeLabel \ + -1 \ + horizontal { \ + 10 \ + epsLetterButton \ + epsLegalButton \ + epsA4Button \ + -1 \ + } \ + 5 < -5 > \ + horizontal { \ + -1 \ + epsScaleLabel \ + 4 < -4 > \ + ScaleFrame \ + } \ + -1 \ + } + + + ! Page Layout resources. + ! ------------------------------- + *epsOrientLabel.label: Orientation: + *epsPortButton.label: Portrait + *epsPortButton.width: 90 + *epsLandButton.label: Landscape + *epsLandButton.width: 90 + + *epsSizeLabel.label: Paper Size: + *epsLetterButton.label: Letter + *epsLetterButton.width: 75 + *epsLegalButton.label: Legal + *epsLegalButton.width: 75 + *epsA4Button.label: A4 + *epsA4Button.width: 75 + + ! Image scale box resources. + ! ------------------------------- + *epsScaleLabel.label: Image Scale: + *ScaleFrame.frameType: sunken + *ScaleFrame.frameWidth: 2 + *ScaleFrame*shadowWidth: 0 + *ScaleLayout.location: 0 0 100 50 + *ScaleLayout.label: + *ScaleLayout.layout: horizontal { \ + SCdecrease \ + SCtext < +inf -100% * > \ + SCincrease \ + } + *SCdecrease.direction: left + *SCtext.width: 75 + *SCtext.height: 25 + *SCtext.label: 100 % + *SCincrease.direction: right + + + ! Miscellaneous print options box resources. + ! ------------------------------------ + *optionsGroup.outerOffset: 5 + *optionsGroup.innerOffset: 5 + *optionsGroup*onIcon: square1s + *optionsGroup*offIcon: square0s + *optionsGroup.label: Processing Options + *optionsGroup*TextToggle.width: 100 + *optionsGroup*TextToggle.highlightColor: yellow + *options.frameWidth: 2 + *options.location: 0 0 250 75 + *options.layout: horizontal { \ + 10 \ + vertical { \ + -1 \ + epsscaleButton \ + 2 \ + autorotateButton \ + 2 \ + aspectButton \ + -1 \ + } \ + 3 \ + vertical { \ + -1 \ + annotateButton \ + 2 \ + compressButton \ + 25 \ + -1 \ + } \ + -1 \ + } + *epsscaleButton.label: Auto Scale + *autorotateButton.label: Auto Rotate + *annotateButton.label: Annotate + *aspectButton.label: Max Aspect + *compressButton.label: Compress + *compressButton.sensitive: False + +! *epsscaleButton.on: True +! *autorotateButton.on: False +! *spectButton.on: False +! *annotateButton.on: True +! *compressButton.on: False + + + ! Output color box resources. + ! ------------------------------ + *printColorGroup.location: 0 0 150 90 + *printColorGroup.outerOffset: 5 + *printColorGroup.frameWidth: 2 + *printColorGroup*offIcon: diamond0s + *printColorGroup*onIcon: diamond1s + *printColorGroup*highlightColor: cyan + *printColorGroup.innerOffset: 5 + *printColorGroup.label: Output Color + *printColorGroup*TextToggle.width: 100 + *printColor.frameWidth: 2 + *printColor.location: 0 0 250 75 + *printColor.layout: horizontal { \ + 15 \ + vertical { \ + -1 \ + prGrayButton \ + 2 \ + prPseudoButton \ + 2 \ + prRGBButton \ + -1 \ + } \ + -1 \ + } + *prGrayButton.label: Grayscale + *prPseudoButton.label: PseudoColor + *prRGBButton.label: RGB + + ! Printer Selection. + ! -------------------------- + *printerGroup.label: Printers + *printerGroup.location: 0 0 110 100 + *printerGroup.shrinkToFit: True + *printerGroup.outerOffset: 5 + + *printers.debug: False + *printers.layout: vertical { \ + 3 < -3 > \ + horizontal { \ + 2 < -2 > \ + printlistFrame < +inf -inf * +inff -inff > \ + -1 \ + printlistScroll < * +inff -inff > \ + 2 < -2 > \ + } \ + 3 < -3 > \ + } + + *printers*FrameType: sunken + *printers*FrameWidth: 2 + *printers*BorderWidth: 0 + *printers*Label.ShadowWidth: 0 + *printers*thumbColor: gray + + *printlistScroll.location: 0 0 20 10 + *printlistScroll.vertical: True + *printlistScroll*minsize: 10 + *printlist.width: 100 + *printlist.height: 78 + + + ! Panel command resources. + ! ------------------------------ + *cmdGroup.frameType: chiseled + *cmdGroup.frameWidth: 2 + *cmdGroup.outerOffset: 5 + *cmdGroup.innerOffset: 5 + *cmdGroup.label: + *cmdGroup.location: 0 0 150 54 + *cmdGroup*Command.font: 7x13bold + *cmdLayout.borderWidth: 0 + *cmdLayout.layout: horizontal { \ + -1 \ + okayPrint \ + 1 < +inf -1 > \ + printStatus < +inf -inf * +inf -inf > \ + 1 < +inf -1 > \ + donePrint \ + -1 \ + } + *cmdGroup*TextButton*location: 0 0 80 0 + *okayPrint.label: Print + *donePrint.label: Done + + + !===================================== + ! Save Setup Panel resources. ! + !===================================== + *save_panel.title: Save to Disk... + *save_panel*background: gray + *save_panel*TextBox.background: gray63 + *save_panel*TextToggle.alignment: left + *save_panel*AsciiText*background: gray63 + *save_panel*Arrow.background: gray63 + *save_panel*Arrow.foreground: gray + *save_panel*Arrow.width: 16 + *save_panel*Arrow.height: 25 + *save_panel*TextToggle.frameWidth: 0 + *save_panel*TextToggle.height: 20 + *save_panel*Label.borderWidth: 0 + *save_panel*Label.shadowWidth: 0 + *save_panel*TextButton.width: 80 + + + *save_panel*debug: False + *saveLayout.borderWidth: 0 + *saveLayout.layout: vertical { \ + -1 \ + saveNameGroup < +inf * > \ + -1 \ + saveOptGroup < +inf -inf * +inf -inf > \ + -1 \ + saveCmdGroup < +inf * > \ + -1\ + } + + ! Save Name Group resources. + !---------------------------------- + *saveNameGroup.borderWidth: 0 + *saveNameGroup.outerOffset: 5 + *saveNameGroup.label: + *saveNameGroup.location: 0 0 400 60 + *saveNameGroup*offIcon: diamond0s + *saveNameGroup*onIcon: diamond1s + *saveNameGroup*highlightColor: cyan + *saveNameGroup*Frame.frameType: sunken + *saveNameGroup*Frame.frameWidth: 2 + *saveNameGroup*Label.justify: right + *saveNameGroup*Text*editType: edit + *saveNameGroup*Text*font: -*-helvetica-medium-r-normal-*-12-*-iso8859-1 + *saveNameGroup*TextBox*font:-*-helvetica-medium-r-normal-*-12-*-iso8859-1 + *saveNameGroup*shadowWidth: 0 + *saveNameGroup*borderWidth: 0 + *saveNameLayout.borderWidth: 0 + *saveNameLayout*Label.font: 7x13bold + *saveNameLayout.layout: vertical { \ + 5 \ + horizontal { \ + 5 \ + saveLabel \ + 5 \ + fnameFrame < +inf -inf * > \ + 5 \ + } \ + 5 \ + } + *saveLabel.label: File Name: + *saveFile.height: 22 +! *save_panel*saveFile*background: gray63 + + ! Main options groups layout resources. + !--------------------------------------- + *saveOptGroup.frameWidth: 2 + *saveOptGroup.frameType: chiseled + *saveOptGroup.label: + *saveOptGroup.location: 0 0 400 145 + *saveOptGroup.outerOffset: 5 + *saveOptGroup.innerOffset: 0 + *saveOptLayout*borderWidth: 0 + *saveOptLayout.layout: horizontal { \ + -1 \ + vertical { \ + 5 < -5 > \ + fmtGroup < +inf * +inf > \ + -1 \ + } \ + -1 \ + vertical { \ + 10 < -10 > \ + saveDataBox < +inff -100% * +inff -100% > \ + 5 < -5 > \ + } \ + -1 \ + vertical { \ + 5 < -5 > \ + saveColorGroup < +inf * +inf > \ + -1 \ + } \ + -1 \ + } + + ! Output color box resources. + ! ------------------------------ + *saveColorGroup.location: 0 0 125 120 + *saveColorGroup.outerOffset: 5 + *saveColorGroup.frameWidth: 2 + *saveColorGroup*offIcon: diamond0s + *saveColorGroup*onIcon: diamond1s + *saveColorGroup*highlightColor: cyan + *saveColorGroup.innerOffset: 5 + *saveColorGroup.label: Output Color + *saveColorGroup*TextToggle.width: 100 + *saveColor.frameWidth: 2 + *saveColor.layout: horizontal { \ + 3 \ + vertical { \ + 5 \ + svGrayButton \ + 2 \ + svPseudoButton \ + 2 \ + svRGBButton \ + -1 \ + } \ + -1 \ + } + *svGrayButton.label: Grayscale + *svPseudoButton.label: PseudoColor + *svPseudoButton.on: true + *svRGBButton.label: RGB + + *saveDataBox*TextBox.background: gray63 + *saveDataBox.frameType: sunken + *saveDataBox.frameWidth: 2 + + + ! Output format box resources. + ! ----------------------------------- + *fmtGroup.location: 0 0 140 120 + *fmtGroup.outerOffset: 5 + *fmtGroup.frameWidth: 2 + *fmtGroup*offIcon: diamond0s + *fmtGroup*onIcon: diamond1s + *fmtGroup*TextToggle.width: 55 + *fmtGroup*highlightColor: cyan + *fmtGroup.label: File Format + *formats.layout: horizontal { \ + 3 \ + vertical { \ + 7 \ + fitsButton \ + 2 \ + gifButton \ + 2 \ + x11Button \ + 2 \ + rawButton \ + -1 \ + } \ + 2 < -2 > \ + vertical { \ + 7 \ + rasButton \ + 2 \ + tiffButton \ + 2 \ + jpegButton \ + 2 \ + pnmButton \ + -1 \ + } \ + -1 \ + } + *rasButton.label: RAS + *gifButton.label: GIF + *jpegButton.label: JPEG + *tiffButton.label: TIFF + *fitsButton.label: FITS + *x11Button.label: X11 + *pnmButton.label: PNM + *rawButton.label: Raw + + ! Change the sensitivity once these formats are implemented. ! + !------------------------------------------------------------- + *jpegButton.sensitive: false + *x11Button.sensitive: false + *pnmButton.sensitive: false + *rawButton.sensitive: false + + ! Panel command resources. + ! ------------------------------ + *saveCmdLayout.borderWidth: 0 + *saveCmdGroup.frameType: chiseled + *saveCmdGroup.frameWidth: 2 + *saveCmdGroup.outerOffset: 5 + *saveCmdGroup.innerOffset: 5 + *saveCmdGroup.label: + *saveCmdGroup.location: 0 0 400 54 +! *saveCmdLayout*Command.font: 7x13bold + *saveCmdLayout.layout: horizontal { \ + -1 \ + okaySave \ + 1 < +inf -1 > \ + saveStatus \ + 1 < +inf -1 > \ + doneSave \ + -1 \ + } + *okaySave.label: Save + *doneSave.label: Done + + ! File Load Control Panel. + !------------------------------- + *load_panel.geometry: 400x320 + *load_panel.title: File Load Panel + *filesLayout*borderWidth: 0 + *filesLayout*highlightThickness: 0 + *filesLayout*background: gray + *filesLayout*Group.outerOffset: 7 + *filesLayout*Group.shrinkToFit: True + *filesLayout*Group.frameType: chiseled + *filesLayout*Frame*frameType: sunken + *filesLayout*Frame*frameWidth: 2 + *filesLayout*Text*background: gray63 + *filesLayout*Text*font: -*-helvetica-medium-r-normal-*-12-*-iso8859-1 + *filesLayout*TextBox*font: -*-helvetica-medium-r-normal-*-12-*-iso8859-1 + *filesLayout*TextToggle.frameWidth: 0 + *filesLayout*TextToggle.height: 28 + *filesLayout*TextToggle.width: 80 + *filesLayout*TextToggle.alignment: left + *filesLayout*Scrollbar2*background: gray63 + *filesLayout*scrollbarForeground: gray + *filesLayout*Scrollbar2*location: 0 0 20 10 + *filesLayout*Scrollbar2*vertical: True + *filesLayout*Scrollbar2*minsize: 20 + *filesLayout*MultiList*background: gray63 + *filesLayout*MultiList*foreground: black + *filesLayout*MultiList*shadeSurplus: False + *filesLayout*MultiList*width: 120 + *filesLayout*MultiList.font: 7x13bold + *filesLayout*Label.font: 7x13bold + *filesLayout*Label.borderWidth: 0 + *filesLayout*Label.shadowWidth: 0 + *filesLayout.layout: vertical { \ + 5 < +0 -5 > \ + horizontal { \ + 0 < +0 -0 > \ + imagesGroup < +inf -inf * +inf -inf > \ + 0 < +0 -0 > \ + } \ + 0 < +0 -0 > \ + horizontal { \ + 0 < +0 -0 > \ + fbuttonsGroup < +inf -inf * > \ + 0 < +0 -0 > \ + } \ + 0 < +0 -0 > \ + } + + *imagesGroup.label: Images + *imagesGroup.frameWidth: 2 +! *imagesGroup.outerOffset: 5 + *imagesGroup*offIcon: square0s + *imagesGroup*onIcon: square1s + *imagesGroup*highlightColor: yellow + *imagesLayout*Label.shadowWidth: 0 + *imagesLayout*Label.justify: left + *imagesLayout*Command.width: 90 + *imagesLayout*TextButton.width: 90 + *imagesLayout*TextButton.height: 23 + *imagesLayout*TextButton.font: *times*medium*r*normal*-12-* + *imagesLayout.layout: vertical { \ + 7 < +0 -7 > \ + horizontal { \ + 5 \ + rootButton < +inf -inf * > \ + 2 \ + homeButton < +inf -inf * > \ + 2 \ + upButton < +inf -inf * > \ + 2 \ + rescanButton < +inf -inf * > \ + 5 \ + } \ + 7 \ + horizontal { \ + 5 < +0 -5 > \ + vertical { \ + 5 \ + imtemplateLabel < * > \ + 5 \ + imtemplateFrame < +inf -inf * > \ + 10 < +inf -inf > \ + grayToggle < * > \ + 5 \ + browseToggle < * > \ + 5 \ + } \ + 5 \ + horizontal { \ + 5 < +0 -5 > \ + imlistFrame < +inf -inf * +inf -inf > \ + 3 < +0 -3 > \ + imlistScrollbar < * +inf - inf > \ + 0 < +0 -0 > \ + } \ + 5 < +0 -5 > \ + } \ + 5 \ + horizontal { \ + 5 \ + dirLabel < +inf -inf * > \ + 5 \ + } \ + 10 \ + horizontal { \ + 5 < +0 -5 > \ + fnameLabel < * > \ + 5 < +0 -5 > \ + filnamFrame < +inf -inf * > \ + 5 < +0 -5 > \ + frameLabel < * > \ + 5 < +0 -5 > \ + frameFrame < -50% * > \ + 5 < +0 -5 > \ + } \ + 5 < +0 -5 > \ + } + *imtemplateLabel.label: File Pattern: + *imtemplateText*editType: edit + *imtemplateText.height: 20 + *imageList.width: 100 + *upButton.label: Up + *rootButton.label: Root + *homeButton.label: Home + *rescanButton.label: Rescan + *browseToggle.label: Browse + *browseToggle.on: True + *grayToggle.label: Greyscale + *dirLabel.label: Directory: + *dirLabel.alignment: left + *fnameLabel.label: Load File: + *fnameText*editType: edit + *fnameText.height: 20 + *frameLabel.label: Frame: + *frameFrame.label: 1 + + *fbuttonsGroup.label: + *fbuttonsGroup*frameWidth: 2 + *fbuttonsGroup*outerOffset: 5 + *fbuttonsGroup*innerOffset: 5 + *fbuttonsGroup.frameType: sunken + *fbuttonsGroup*Command.font: 7x13bold + *fbuttonsLayout*Command.height: 50 + *fbuttonsLayout*Command.width: 70 + *fbuttonsLayout.layout: horizontal { \ + -1 \ + filesLoadButton \ + 1 < +inf -1 > \ + filesStatus \ + 1 < +inf -1 > \ + filesCloseButton \ + -1 \ + } + + *filesLoadButton.label: Load + *filesStatus.label: + *filesCloseButton.label: Done + + ! Help panel resources. + !---------------------- + *help_panel.title: XImtool Help Summary + *help_panel.width: 450 + *help_panel.height: 525 + *helpLayout*borderWidth: 0 + *helpLayout.background: gray + *helpLayout*Frame*frameType: sunken + *helpLayout*Frame*frameWidth: 2 + *helpLayout*Frame.background: gray + *helpLayout*Layout.background: gray + *helpLayout*ScrollbarBackground: #c0c0c0 + *helpLayout*Scrollbar*background: #c0c0c0 + *helpLayout*Scrollbar*width: 17 + *helpLayout*Scrollbar*height: 17 + *helpLayout*Scrollbar*shadowWidth: 2 + *helpLayout*Scrollbar*cursorName: top_left_arrow + *helpLayout*Scrollbar*pushThumb: true + + + *helpLayout.layout: vertical { \ + -1 \ + horizontal { \ + 0 < +0 -0 > \ + helpMenuLayout < +inf -inf * > \ + 0 < +0 -0 > \ + } \ + 0 < +0 -0 > \ + horizontal { \ + 0 < +0 -0 > \ + helpTextFrame < +inf -inf * +inf -inf > \ + 0 \ + } \ + 0 < +0 -0 > \ + horizontal { \ + 0 < +0 -0 > \ + helpInfoLayout < +inf -inf * > \ + 0 < +0 -0 > \ + } \ + -1 \ + } + *helptext*background: white + *helptext*foreground: black + + *helpMenuLayout*background: gray + *helpMenuLayout*Command.highlightThickness: 2 + *helpMenuLayout*Command.internalHeight: 2 + *helpMenuLayout*Command.font: -*-helvetica-bold-r-normal-*-12-*-*-* + *helpMenuLayout.layout: vertical { \ + 5 \ + horizontal { \ + 5 < +0 -5 > \ + helpBack \ + 2 < +0 -2 > \ + helpForward \ + 2 < +0 -2 > \ + helpHome \ + 20 < +inf -20 > \ + helpClose \ + 5 < +0 -5 > \ + } \ + 5 \ + } + *helpBack.label: Back + *helpBack.sensitive: False + *helpForward.label: Forward + *helpForward.sensitive: False + *helpHome.label: Home + *helpClose.label: Done + + *helpInfoLayout*background: gray + *helpInfoLayout*Label.justify: center + *helpInfoLayout*Label.internalHeight: 0 + *helpInfoLayout.layout: horizontal { \ + 5 \ + vertical { \ + 5 \ + helpIRAFLogo \ + 5 \ + } \ + 1 \ + vertical { \ + 5 \ + horizontal { \ + 0 < +inf -inf > \ + helpInfo1 \ + 0 < +inf -inf > \ + } \ + 0 < +inf -0 > \ + horizontal { \ + 0 < +inf -inf > \ + helpInfo2 \ + 0 < +inf -inf > \ + } \ + 0 < +inf -0 > \ + horizontal { \ + 0 < +inf -inf > \ + helpInfo3 \ + 0 < +inf -inf > \ + } \ + 5 \ + } \ + 1 \ + vertical { \ + 5 \ + helpNOAOLogo \ + 5 \ + } \ + 5 \ + } + *helpInfo1.label: XImtool V1.2 -- Released: 4/30/2000 + *helpInfo2.label: iraf@noao.edu (520) 318-8160 + *helpInfo3.label: NOAO is operated by AURA under cooperative agreement with the NSF + *helpInfoLayout*helpInfo1.font: -*-helvetica-medium-r-normal-*-12-*-*-* + *helpInfoLayout*helpInfo2.font: -*-helvetica-medium-r-normal-*-12-*-*-* + *helpInfoLayout*helpInfo3.font: -*-helvetica-medium-r-normal-*-10-*-*-* + *helpInfoLayout.helpIRAFLogo.internalWidth: 0 + *helpInfoLayout.helpIRAFLogo.internalheight: 0 + *helpInfoLayout.helpIRAFLogo.foreground: steelblue + *helpInfoLayout.helpIRAFLogo.background: white + *helpInfoLayout.helpNOAOLogo.internalWidth: 0 + *helpInfoLayout.helpNOAOLogo.internalheight: 0 + *helpInfoLayout.helpNOAOLogo.foreground: steelblue + *helpInfoLayout.helpNOAOLogo.background: white + + *helpText.width: 450 + *helpText.height: 500 + *helpText.anchorUnderlines: 1 + *helpText.visitedAnchorUnderlines: 1 + *helpText.verticalScrollOnRight: true + *helpText.plainFont: 6x13 + + + ! Define a debug Tcl shell. + !-------------------------------- + *tclShell.title: Interactive Tcl Shell + *tclForm.background: gray + *tclForm*Label.background: gray + *tclForm*Label.borderWidth: 0 + *tclForm*Label.resize: False + *tclForm*Command.resize: False + *tclForm*Command.background: grey75 + *tclForm*Command.font: 7x13bold + *tclLabel.label: Server Command Entry + *tclClear.label: Clear + *tclExecute.label: Execute + *tclEntry*Text.font: 7x13 + *tclEntry*width: 500 + *tclEntry*borderWidth: 1 + *tclEntry*height: 150 + *tclEntry*editType: edit + *tclEntry*scrollHorizontal: whenNeeded + *tclEntry*scrollVertical: never + *tclEntry*displayCaret: True + *tclcloseButton.label: Done + + + ! GUI resources. + ! ------------------------------ + *autoscale: True + *zoomfactors: 1 2 4 8 + *displayCoords: True + *displayPanner: True + *displayMagnifier: False + *blinkRate: 1.0 + *pannerArea: 150*150 + *pannerGeom: -5+5 + *magnifierArea: 100*100 + *magnifierGeom: +5+5 + *wcsboxGeom: -5-5 + *maxContrast: 5.0 + *warnings: True +} + +# Start up the GUI. +createObjects +send colorbar setGterm ; send colorbar activate +send imagewin setGterm ; send imagewin activate +activate + +# Utility procedure to test True/False strings in resources. +proc true {v} {expr {$v == "true" || $v == "True" || $v == "TRUE"}} + +# Utility functions. +proc min {a b} { expr {($a < $b) ? $a : $b} } +proc max {a b} { expr {($a > $b) ? $a : $b} } + +# Global variables. +set version "NOAO/IRAF XImtool Version 1.2" + +set winWidth [send imagewin get width] ;# display window width +set winHeight [send imagewin get height] ;# display window height +set marker none ;# selected marker +set markno 0 ;# used to name new markers +set blinkFrames "1 2" ;# list of blink/tile frames + +set loadP_up 0 +set saveP_up 0 +set printP_up 0 +set infoP_up 0 +set panel_up 0 +set helpP_up 0 + + +proc winResize {w width height} \ + { global winWidth winHeight; set winWidth $width; set winHeight $height} +send imagewin addCallback winResize resize + +# Additional global variables, taking default values from resources. +getResources { + { zoomfactors } + { displayCoords } + { displayPanner } + { displayMagnifier } + { blinkRate } + { pannerArea } + { pannerGeom } + { magnifierArea } + { magnifierGeom } + { wcsboxGeom } + { maxContrast } + { warnings } +} + +set warnings [true $warnings] +set defaultBlinkRate $blinkRate + +# Client state variables (UI parameter objects). Certain of these parameters +# we mirror in Tcl variables here, updating the values with a callback when +# the parameter value changes. Others require special callbacks. + +set frame 1 ;# current display frame +set nframes 0 ;# number of frame buffers +set frames {1 2 3 4} ;# list of image frames +set frameWidth 0 ;# frame buffer width, pixels +set frameHeight 0 ;# frame buffer height, pixels +set frameDepth 8 ;# frame buffer pixel size, bits +set cursorMode 0 ;# true when cursor read pending + +foreach i $frames { + set frameZoomX($i) 0 ;# X zoom factor + set frameZoomY($i) 0 ;# Y zoom factor + set frameCenterX($i) 0 ;# X center of field + set frameCenterY($i) 0 ;# Y center of field + set frameScaleX($i) 0 ;# X scale factor + set frameScaleY($i) 0 ;# Y scale factor + set enhancement($i) none ;# colortable enhancement +} + +# Called when the number of frames changes. +proc setNFrames {param old new} { + global frameMenuDescription nframes frames + set nframes $new + if {$old != $new} { + foreach i {prevButton nextButton} { + send $i set sensitive [expr "$nframes > 1"] + } + editMenu frameMenu frameButton $frameMenuDescription + } + foreach i $frames { + if {$i <= $nframes} { + send frameBox manage frame$i + } else { + send frameBox unmanage frame$i + } + } +}; send nframes addCallback setNFrames + +set frameMenuDescription { + { 1 f.exec "send client setFrame 1" sensitive {[expr "$nframes >= 1"]} } + { 2 f.exec "send client setFrame 2" sensitive {[expr "$nframes >= 2"]} } + { 3 f.exec "send client setFrame 3" sensitive {[expr "$nframes >= 3"]} } + { 4 f.exec "send client setFrame 4" sensitive {[expr "$nframes >= 4"]} } +}; createMenu frameMenu frameButton $frameMenuDescription + +# Called when the frame being displayed changes. +proc frameChanged {param old new} { + global frame + set frame $new + send frameButton set label $frame +}; send frame addCallback frameChanged + +# Called when the frame buffer configuration changes. +proc setFrameSize {param old new} { + global frameWidth frameHeight frameDepth + set frameWidth [lindex $new 0] + set frameHeight [lindex $new 1] + set frameDepth [lindex $new 2] +}; send frameSize addCallback setFrameSize + +# Called when the current frame is zoomed or panned. +proc setFrameView {param old new} { + global frameZoomX frameZoomY frameCenterX frameCenterY + global frameScaleX frameScaleY frame + set frameZoomX($frame) [lindex $new 0] + set frameZoomY($frame) [lindex $new 1] + set frameCenterX($frame) [lindex $new 2] + set frameCenterY($frame) [lindex $new 3] + set frameScaleX($frame) [lindex $new 4] + set frameScaleY($frame) [lindex $new 5] +}; send frameView addCallback setFrameView + +# Called when the color enhancement for a frame changes. +proc setEnhancement {param old new} { + global enhancement + set enhancement([lindex $new 0]) [lrange $new 1 end] +}; send enhancement addCallback setEnhancement + +# Called when the frame title changes (e.g. frame change or new frame loaded). +proc setTitle {param old new} { + send imageTitle set label [string trimright $new] +}; send frameTitle addCallback setTitle + +# Called when the image is flipped in an axis. +proc setFlip {param old new} { + send ${param}Button set state [true $new] +}; foreach i {xflip yflip} { send $i addCallback setFlip } + + +# Various general callbacks. +proc Quit args { send client Quit } +proc nextFrame args { send client nextFrame } +proc prevFrame args { send client prevFrame } +proc setColormap { mapno } { send client setColormap $mapno } +proc xflip args { send client flip x } +proc yflip args { send client flip y } +proc xyflip args { send client flip x y } + +# Initialize bitmaps. +createBitmap xflip 16 16 { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x08, 0x18, 0x18, + 0x1c, 0x38, 0xfe, 0x7f, 0xfe, 0x7f, 0x1c, 0x38, 0x18, 0x18, 0x10, 0x08, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; + +createBitmap yflip 16 16 { + 0x00, 0x00, 0x80, 0x01, 0xc0, 0x03, 0xe0, 0x07, 0xf0, 0x0f, 0x80, 0x01, + 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0xf0, 0x0f, + 0xe0, 0x07, 0xc0, 0x03, 0x80, 0x01, 0x00, 0x00}; + +createBitmap qmark 16 16 { + 0x00, 0x00, 0x00, 0x00, 0xf0, 0x07, 0xf8, 0x0f, 0x18, 0x0c, 0x18, 0x0c, + 0x18, 0x0e, 0x00, 0x07, 0x80, 0x03, 0x80, 0x01, 0x80, 0x01, 0x00, 0x00, + 0x80, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x00}; + +createBitmap larrow 16 16 { + 0x00, 0x00, 0x00, 0x03, 0x80, 0x03, 0xc0, 0x03, 0xe0, 0x1e, 0x70, 0x1e, + 0x38, 0x18, 0x1c, 0x18, 0x1c, 0x18, 0x38, 0x18, 0x70, 0x1e, 0xe0, 0x1e, + 0xc0, 0x03, 0x80, 0x03, 0x00, 0x03, 0x00, 0x00}; + +createBitmap rarrow 16 16 { + 0x00, 0x00, 0xc0, 0x00, 0xc0, 0x01, 0xc0, 0x03, 0x78, 0x07, 0x78, 0x0e, + 0x18, 0x1c, 0x18, 0x38, 0x18, 0x38, 0x18, 0x1c, 0x78, 0x0e, 0x78, 0x07, + 0xc0, 0x03, 0xc0, 0x01, 0xc0, 0x00, 0x00, 0x00}; + +createBitmap panel 16 16 { + 0x00, 0x00, 0xf8, 0x1f, 0xf8, 0x1f, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, + 0x98, 0x19, 0x98, 0x19, 0x98, 0x19, 0x98, 0x19, 0x98, 0x19, 0x18, 0x18, + 0x18, 0x18, 0x18, 0x18, 0xf8, 0x1f, 0xf8, 0x1f}; + +createBitmap brightness 15 15 { + 0x00, 0x00, 0x80, 0x00, 0x84, 0x10, 0xe8, 0x0b, 0x10, 0x04, 0x08, 0x08, + 0x08, 0x08, 0x0e, 0x38, 0x08, 0x08, 0x08, 0x08, 0x10, 0x04, 0xe8, 0x0b, + 0x84, 0x10, 0x80, 0x00, 0x00, 0x00}; + +createBitmap contrast 15 15 { + 0x00, 0x00, 0x00, 0x00, 0xc0, 0x01, 0x30, 0x07, 0x08, 0x0f, 0x08, 0x0f, + 0x04, 0x1f, 0x04, 0x1f, 0x04, 0x1f, 0x08, 0x0f, 0x08, 0x0f, 0x30, 0x07, + 0xc0, 0x01, 0x00, 0x00, 0x00, 0x00}; + +createBitmap solid 64 24 { + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 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, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; + +send panelButton "set bitmap panel; addCallback panel" +send xflipButton "set bitmap xflip; addCallback xflip" +send yflipButton "set bitmap yflip; addCallback yflip" +send helpButton "set bitmap qmark; addCallback Help" +send prevButton "set bitmap larrow; addCallback prevFrame" +send nextButton "set bitmap rarrow; addCallback nextFrame" + + +# WINDOW the current frame. +proc windowColormap {x y} \ +{ + global winWidth winHeight maxContrast + + send client windowColormap \ + [expr "double($x) / $winWidth"] \ + [expr "(double($y) - $winHeight / 2.0) / $winHeight * \ + $maxContrast * 2.0"] +} + +# WINDOW the current frame, but only one color at a time. +proc windowRGB {color x y save_flag} \ +{ + global winWidth winHeight maxContrast + + send client windowRGB $color \ + [expr "double($x) / $winWidth"] \ + [expr "(double($y) - $winHeight / 2.0) / $winHeight * \ + $maxContrast * 2.0"] $save_flag +} + + +# ZOOM and PAN. +set xcen 0 +set ycen 0 +foreach i $frames {set zoomindex($i) 0} +set nzoomfactors 0 +foreach i $zoomfactors { + set zoomfactor($nzoomfactors) $i + incr nzoomfactors +} + +# Zoom or pan image at given center. +proc zoom {x y} \ +{ + global xcen ycen frame + global zoomindex zoomfactor + global nzoomfactors + + set rx $x; set ry $y + set raster 0 + + # Convert raw screen coordinates to frame buffer raster coordinates. + send imagewin unmapPixel $x $y raster rx ry + + # Select a pixel. + set rx [expr "int ($rx)"] + set ry [expr "int ($ry)"] + + # If the pointer did not move (much) zoom the image, otherwise + # pan it. + + send imagewin setCursorType busy + if {sqrt(pow($x-$xcen, 2) + pow($y-$ycen, 2)) < 4} { + set zoomindex($frame) [expr [incr zoomindex($frame)] % $nzoomfactors] + set mag $zoomfactor($zoomindex($frame)) + send client zoom $mag $mag $rx $ry + } else { + send client pan $rx $ry + set xcen $x + set ycen $y + } + + # Move the pointer so that it tracks the object feature the user + # selected. + + send imagewin setCursorPos $rx $ry $raster + send imagewin getCursorPos xcen ycen + send imagewin setCursorType idle +} + +# Zoom using a marker to indicate the region to be displayed. +proc zoomMarker {marker aspect} \ +{ + global xcen ycen frame + global winWidth winHeight + global zoomindex nzoomfactors + + # getRegion returns: "rectangle raster x y width height rotangle". + set region [send $marker getRegion unmap] + + set raster [lindex $region 1] + set xcen [expr "int([lindex $region 2]) + 0.5"] + set ycen [expr "int([lindex $region 3]) + 0.5"] + set snx [expr "[lindex $region 4] * 2"] + set sny [expr "[lindex $region 5] * 2"] + + # Compute the magnification ratio. + set xmag [expr "$winWidth / $snx"] + set ymag [expr "$winHeight / $sny"] + if {$aspect == "equal"} { + set mag [expr "($xmag < $ymag) ? $xmag : $ymag"] + set xmag $mag; set ymag $mag + } + + # Zoom the image. + send client zoomAbs $xmag $ymag $xcen $ycen + + # The following causes a button2 to redisplay the full image. + send imagewin setCursorPos $xcen $ycen $raster + send imagewin getCursorPos xcen ycen + set zoomindex($frame) [expr "$nzoomfactors - 1"] +} + +proc resetView {param old new} { + global zoomindex xcen ycen frames + global frameWidth frameHeight + + if {$new == "done"} { + foreach i $frames { + send client setFrame $i + set xcen [expr $frameWidth / 2] + set ycen [expr $frameHeight / 2] + send client zoom 1 1 $xcen $ycen + set zoomindex($i) 0 + send client setColormap Grayscale + normalize + } + send client setFrame 1 + } +}; #send initialize addCallback resetView + + +# CURSOR READ stuff. +proc setCursorMode {param old new} \ +{ + global cursorMode + + if {$new == "on"} { + send imagewin "activate; setCursorType ginMode" + set cursorMode 1 + } elseif {$new == "off"} { + send imagewin "setCursorType idle; deactivate" + set cursorMode 0 + } +} + +proc keyInput {widget event sx sy data} \ +{ + global cursorMode frame + + if {!$cursorMode || $event != "keyPress"} \ + return + if {[lindex $data 0] == "??"} \ + return + + # Convert raw screen coordinates to raster pixel coordinates. + send imagewin unmapPixel $sx $sy raster rx ry + + # Return the cursor value and exit cursor mode. + send client retCursorVal $rx $ry $frame 1 [lindex $data 0] +} + +proc resetCursorMode args { + global cursorMode frame + if {$cursorMode} { + send imagewin getCursorPos x y + send client retCursorVal $x $y $frame 1 ^D + } +}; send initialize addCallback resetCursorMode + +send cursorMode addCallback setCursorMode +send imagewin addCallback keyInput input + + +# MARKER stuff. The active marker is determined by the global variable +# "marker", which is the marker the pointer is in, or which the pointer +# was most recently in. + +# Translations when pointer is inside marker. +set markerTranslations { \ + !Shift : m_rotateResize() + : m_moveResize() + !Shift : m_raise() m_markpos() + : m_raise() m_markposAdd() + : m_redraw() m_destroyNull() + : m_lower() + : popup(markerMenu) + : popdown(markerMenu) + !Ctrl b: call(prevFrame,$name) + !Ctrl f: call(nextFrame,$name) + !Ctrl h: call(move_cursor,-1,0) + !Ctrl j: call(move_cursor,0,1) + !Ctrl k: call(move_cursor,0,-1) + !Ctrl l: call(move_cursor,1,0) + !Ctrl n: call(normalize) + !Ctrl m: call(toggleMagnifier) + !Ctrl p: call(togglePanner) + !Ctrl c: call(cpZoomAction,centerFrame) + !Ctrl i: call(cpInvert) + !Ctrl s: call(cpMatchFrames) + !Ctrl r: call(cpRegisterFrames) + !Alt 1: call(cpSetFrame,frame1) + !Alt 2: call(cpSetFrame,frame2) + !Alt 3: call(cpSetFrame,frame3) + !Alt 4: call(cpSetFrame,frame4) + !Ctrl 1: call(cpZoom,1,1,fixed) + !Ctrl 2: call(cpZoom,2,2,fixed) + !Ctrl 3: call(cpZoom,3,3,fixed) + !Ctrl 4: call(cpZoom,4,4,fixed) + !Ctrl 5: call(cpZoom,5,5,fixed) + !Ctrl 6: call(cpZoom,6,6,fixed) + !Ctrl 7: call(cpZoom,7,7,fixed) + !Ctrl 8: call(cpZoom,8,8,fixed) + !Ctrl 9: call(cpZoom,9,9,fixed) + BackSpace: m_deleteDestroy() + Delete: m_deleteDestroy() + : m_input() + : track-cursor() +} + +# Popup menu in effect when inside marker. +createMenu markerMenu imagewin { + { Marker f.title } + { f.dblline } + { Zoom f.exec { + zoomMarker $marker equal + send $marker destroy + } } + { Fill f.exec { + zoomMarker $marker fill + send $marker destroy + } } + { Print f.exec { + send $marker getRect interior x0 y0 nx ny + setPrintCorners $x0 [expr $y0 + $ny -1] \ + [expr $x0 + $nx -1] $y0 + send client print $x0 $y0 $nx $ny + } } + { Save f.exec { + send imagewin setCursorType busy + send $marker getRect interior x0 y0 nx ny + send client save $x0 $y0 $nx $ny + send imagewin setCursorType idle + } } + { Info f.exec { + send infoText append \ + [format "%s\n" [send $marker getRegion unmap]] + } } + { Unrotate f.exec { + send $marker setAttribute rotangle 0 + } } + { f.line } + { Color f.menu markerColor } + { Type f.menu markerType } + { f.line } + { Destroy f.exec { + send $marker destroy + } } +} + +createMenu markerType markerMenu { + { Type f.title } + { f.dblline } + { Rectangle f.exec "m_setType $marker rectangle" } + { Box f.exec "m_setType $marker box" } + { Circle f.exec "m_setType $marker circle" } + { Ellipse f.exec "m_setType $marker ellipse" } + { Polygon f.exec "m_setType $marker polygon" } +} + +createMenu markerColor markerMenu { + { Color f.title } + { f.dblline } + { "" f.exec "m_setColor $marker black" + bitmap solid foreground black } + { "" f.exec "m_setColor $marker white" + bitmap solid foreground white } + { "" f.exec "m_setColor $marker red" + bitmap solid foreground red } + { "" f.exec "m_setColor $marker green" + bitmap solid foreground green } + { "" f.exec "m_setColor $marker blue" + bitmap solid foreground blue } + { "" f.exec "m_setColor $marker magenta" + bitmap solid foreground magenta } + { "" f.exec "m_setColor $marker cyan" + bitmap solid foreground cyan } + { "" f.exec "m_setColor $marker yellow" + bitmap solid foreground yellow } +} + +proc m_setType {marker type} { + send $marker "markpos; set type $type; redraw" +} +proc m_setColor {marker color} { + send $marker "markpos; + set lineColor $color; set highlightColor $color; redraw" +} + +# Callback executed when a marker gets or loses the focus. +proc selectMarker {active_marker event event_data} \ +{ + global marker + switch $event { + focusIn { set marker $active_marker } + focusOut { } + } +} + +# Create marker action. Makes a new marker. +proc makeMarker {parent x y} \ +{ + global markerTranslations markno + set marker marker$markno; incr markno + + send $parent createMarker $marker \ + type rectangle \ + createMode interactive \ + translations $markerTranslations \ + x $x \ + y $y + + send $marker addCallback selectMarker focusIn focusOut +} + + +# WCSBOX -- Real time coordinate display. +set track_enable 0 + +proc wcsUpdate {x y} \ +{ + global track_enable frame + + # Convert screen coords to raster pixel. + send imagewin unmapPixel $x $y raster rx ry rz + + # Set the current frame to the frame the pointer is within. + if {$frame && $raster} { + set track_frame [send client getFrame $raster] + if {$frame != $track_frame} { + send client setFrame $track_frame + } + } + + # Update coords box. + if {$track_enable} { + if {$raster} { + set text [send client encodewcs $rx $ry $rz] + } else { + set text [format " %7.2f %7.2f %7.1f " $rx $ry $rz] + } + send wcsbox "set text \{$text\}; redraw noerase" + } +} + +proc setTrack {state} \ +{ + global track_enable wcsboxGeom + global winWidth winHeight + + if {$state} { + if {$track_enable} \ + return + + send imagewin createMarker wcsbox { + type text + createMode noninteractive + width 25ch + height 1ch + lineWidth 0 + imageText true + textBgColor black + textColor yellow + visible false + } + + set box_width [send wcsbox get width] + set box_height [send wcsbox get height] + set defGeom [format "%sx%s-5-5" $box_width $box_height] + send imagewin parseGeometry $wcsboxGeom $defGeom x y width height + + send wcsbox setAttributes \ + x $x \ + y $y \ + activated true \ + visible true \ + sensitive true + + send wcsbox { + addCallback wcsboxDestroyCallback destroy + addCallback wcsboxMoved moveResize + } + + send imagewin addCallback wcsboxWindowResize resize + set track_enable 1 + send imagewin getCursorPos x y + wcsUpdate $x $y + magnifierMapImage $x $y + + } elseif {$track_enable} { + set track_enable 0 + send wcsbox destroy + } +} + +proc wcsboxDestroyCallback args { + global track_enable + send imagewin deleteCallback wcsboxWindowResize + set track_enable 0 +} + +# If the window is resized make the wcsbox track the corner. +proc wcsboxWindowResize args { + global track_enable + global wcsboxGeom + + if {$track_enable} { + # Get new location. + set box_width [send wcsbox get width] + set box_height [send wcsbox get height] + set defGeom [format "%sx%s-5-5" $box_width $box_height] + send imagewin parseGeometry $wcsboxGeom $defGeom x y width height + + # Move the marker. + send wcsbox "\ + deleteCallback wcsboxMoved; \ + markpos; setAttributes x $x y $y; redraw; \ + addCallback wcsboxMoved moveResize" + } +} + +proc wcsboxMoved {marker event position} { + global wcsboxGeom + send wcsbox getRect boundary x y width height + set wcsboxGeom [send imagewin getGeometry $x $y $width $height] +} + +proc resetWcsbox {param old new} { + global track_enable wcsboxGeom displayCoords + if {$new == "done"} { + setTrack [true $displayCoords] + } elseif {$track_enable} { + setTrack 0 + if {$new == "restart"} { + set wcsboxGeom -5-5 + } + } +}; send initialize addCallback resetWcsbox + + +# PANNER. The full frame mapped into the main image window is displayed at a +# reduced resolution in a marker (known as the panner window) within the main +# image window. The currently displayed region of the frame is indicated +# using a small marker within the panner window. This small marker may be +# moved or resized to pan or zoom the image in the main display window. + +set panner_x 0 +set panner_y 0 +set panner_width 0 +set panner_height 0 +set prm_width 0 +set prm_height 0 + +set panner_enable 0 +set panner_pan_enable 0 +set panner_region_enable 0 +set panner_mapping 0 + +# Panner window translations. +set pannerWinTranslations { \ + !Shift : m_rotateResize() + : m_moveResize() + !Shift : m_raise() m_markpos() + : m_raise() m_markposAdd() + : m_redraw() m_destroyNull() + : m_lower() + !Ctrl b: call(prevFrame,$name) + !Ctrl f: call(nextFrame,$name) + !Ctrl h: call(move_cursor,-1,0) + !Ctrl j: call(move_cursor,0,1) + !Ctrl k: call(move_cursor,0,-1) + !Ctrl l: call(move_cursor,1,0) + !Ctrl n: call(normalize) + !Ctrl m: call(toggleMagnifier) + !Ctrl p: call(togglePanner) + !Ctrl c: call(cpZoomAction,centerFrame) + !Ctrl i: call(cpInvert) + !Ctrl s: call(cpMatchFrames) + !Ctrl r: call(cpRegisterFrames) + !Alt 1: call(cpSetFrame,frame1) + !Alt 2: call(cpSetFrame,frame2) + !Alt 3: call(cpSetFrame,frame3) + !Alt 4: call(cpSetFrame,frame4) + !Ctrl 1: call(cpZoom,1,1,fixed) + !Ctrl 2: call(cpZoom,2,2,fixed) + !Ctrl 3: call(cpZoom,3,3,fixed) + !Ctrl 4: call(cpZoom,4,4,fixed) + !Ctrl 5: call(cpZoom,5,5,fixed) + !Ctrl 6: call(cpZoom,6,6,fixed) + !Ctrl 7: call(cpZoom,7,7,fixed) + !Ctrl 8: call(cpZoom,8,8,fixed) + !Ctrl 9: call(cpZoom,9,9,fixed) + : call(pannerPanXY,$x,$y) + BackSpace: m_deleteDestroy() + Delete: m_deleteDestroy() + : graphics-input() + : track-cursor() call(wcsUpdate,$x,$y) +} + + +# setPanner -- Turn the panner on or off. + +proc togglePanner args { + global panner_enable + + if {$panner_enable} { + setPanner 0 + } else { + setPanner 1 + } +} + +proc setPanner {state} \ +{ + global winWidth winHeight frameWidth frameHeight + global frame panner_mapping pannerWinTranslations pannerArea + global panner_enable panner_region_enable panner_pan_enable + global pannerGeom panner_x panner_y panner_width panner_height + + if {$state} { + if {$panner_enable} \ + return + + # Determine where to place the panner. + set scale \ + [expr sqrt(double($pannerArea) / ($frameWidth * $frameHeight))] + set scaled_width [expr int($frameWidth * $scale) / 2 * 2 + 1] + set scaled_height [expr int($frameHeight * $scale) / 2 * 2 + 1] + set defGeom [format "%sx%s-5+5" $scaled_width $scaled_height] + send imagewin parseGeometry $pannerGeom $defGeom x y width height + + # Create the main panner window (marker). + send imagewin createMarker pannerWin \ + type rectangle \ + createMode noninteractive \ + width [expr $width / 2] \ + height [expr $height / 2] \ + x [expr $x + $width / 2] \ + y [expr $y + $height / 2] \ + lineColor 8 \ + highlightColor 8 \ + translations $pannerWinTranslations \ + visible true \ + sensitive true \ + activated true + + # Update the panner window position variables so that it comes up + # in the same place the next time. + + send pannerWin getRect boundary \ + panner_x panner_y panner_width panner_height + set pannerGeom [send imagewin getGeometry \ + $panner_x $panner_y $panner_width $panner_height] + + # Register callbacks. + send frame addCallback pannerMapImage + send frameRegion addCallback pannerSetRegion + send imagewin addCallback pannerImagewinResized resize + send resize addCallback pannerImagewinResized + + send pannerWin { + addCallback pannerMapImage moveResize; + addCallback pannerMoved moveResize; + addCallback pannerDestroy destroy; + addCallback pannerWinConstraint constraint; + } + + # Map display frame to panner window. + set panner_enable 1 + set panner_region_enable 1 + set panner_mapping [send imagewin nextMapping] + pannerMapImage init; send imagewin refreshMapping $panner_mapping + + # Draw a marker in the panner window outlining displayed region. + send imagewin createMarker pannerRegionMarker \ + type box \ + createMode noninteractive \ + translations $pannerWinTranslations \ + lineColor green \ + highlightColor green \ + sensitive true + + # Fire up the panner region marker. + send client getSource raster sx sy snx sny + pannerSetRegion dummy dummy [concat $frame $sx $sy $snx $sny] + send pannerRegionMarker "\ + addCallback pannerPanImage moveResize; \ + addCallback pannerDestroy destroy; \ + addCallback pannerRegionConstraint constraint; \ + setAttributes visible true activated true; \ + redraw" + set panner_pan_enable 1 + + } elseif {$panner_enable} { + pannerDestroy + } +} + + +# pannerDestroy -- Delete the panner. + +proc pannerDestroy args { + global panner_enable panner_region_enable panner_pan_enable + global panner_mapping + + if {$panner_enable} { + set panner_enable 0 + set panner_pan_enable 0 + set panner_region_enable 0 + + send imagewin freeMapping $panner_mapping + send imagewin deleteCallback pannerImagewinResized + send resize deleteCallback pannerImagewinResized + send frame deleteCallback pannerMapImage + send frameRegion deleteCallback pannerSetRegion + + if [send server queryObject pannerRegionMarker] { + send pannerRegionMarker destroy + } + if [send server queryObject pannerWin] { + send pannerWin destroy + } + } +} + + +# pannerMapImage -- Map the current display frame into the panner window. +# Called when the frame changes or the panner window is moved or resized. +# The panner window displays a small dezoomed version of the full frame. + +proc pannerMapImage args { + global panner_enable frame + global panner_mapping + + if {!$panner_enable || $frame == 0} \ + return + + set raster [send client getRaster] + send pannerWin getRect interior dx dy dnx dny + send imagewin queryRaster $raster width height + + if [send imagewin activeMapping $panner_mapping] { + send imagewin raiseMapping $panner_mapping + } + send imagewin setMapping $panner_mapping 0 \ + $raster pixel 0 0 $width $height \ + 0 pixel $dx $dy $dnx $dny +} + + +# pannerSetRegion -- Adjust the pannerWin region marker to outline the +# region displayed in the main display window. This is called in response +# to a frameRegion event when the main display mapping changes, e.g. when +# the frame changes or the user zooms or pans the main window. The region +# marker is moved and resized to reflect the new view. + +proc pannerSetRegion {param old new} { + global panner_enable panner_region_marker + global panner_region_enable panner_pan_enable + global frame frameWidth frameHeight prm_width prm_height + + if {!$panner_enable || !$panner_region_enable || $frame == 0} \ + return + + # new: frame sx sy snx sny + set src_frame [lindex $new 0] + set sx [lindex $new 1]; set snx [lindex $new 3] + set sy [lindex $new 2]; set sny [lindex $new 4] + + if {$src_frame != $frame} \ + return + + send pannerWin getRect interior px py pnx pny + + set x [expr ($sx + $snx/2.0) / $frameWidth * $pnx + $px] + set y [expr ($sy + $sny/2.0) / $frameHeight * $pny + $py] + set width [expr ($snx/2.0) / $frameWidth * $pnx + 1] + set height [expr ($sny/2.0) / $frameHeight * $pny + 1] + + set pan_save $panner_pan_enable; set panner_pan_enable 0 + set panner_region_enable 0 + + send pannerRegionMarker "\ + markpos; \ + setAttributes x $x y $y width $width height $height; \ + redraw; raise" + send pannerRegionMarker getAttributes width prm_width height prm_height + + set panner_region_enable 1 + set panner_pan_enable $pan_save +} + + +# pannerPanImage -- Pan or zoom the image in the main image window. This is +# called when the user moves the region marker within the panner window. + +proc pannerPanImage {marker event position} { + global panner_pan_enable + global winWidth winHeight + global prm_width prm_height + + if {!$panner_pan_enable} \ + return + + # position: x y width height. + set new_width [lindex $position 2] + set new_height [lindex $position 3] + + # region: type raster x y width height. + set region [send pannerRegionMarker getRegion unmap] + set x [expr [lindex $region 2] + 1]; set width [lindex $region 4] + set y [expr [lindex $region 3] + 1]; set height [lindex $region 5] + + set panner_pan_enable 0 + if {$new_width == $prm_width && $new_height == $prm_height} { + send client pan $x $y + } else { + set xscale [expr ($winWidth / 2.0) / $width] + set yscale [expr ($winHeight / 2.0) / $height] + send client zoom $xscale $yscale $x $y + } + set panner_pan_enable 1 +} + + +# pannerPanXY -- Pan to the point X,Y in the panner window coordinate +# system. Called when the user clicks MB2 in the panner window. + +proc pannerPanXY {x y} { + send imagewin unmapPixel $x $y raster rx ry + send client pan $rx $ry +} + + +# pannerMoved -- Called when the user moves the panner window. We need to +# move the region marker to the new window location and record the new location +# so that the window will come up in the same place if closed and reopened. + +proc pannerMoved {marker event position} { + global winWidth winHeight + global frame panner_pan_enable pannerGeom + global panner_x panner_y panner_width panner_height + + # Move the region marker to the new location. + set pan_save $panner_pan_enable; set panner_pan_enable 0 + send client getSource raster sx sy snx sny + pannerSetRegion dummy dummy [concat $frame $sx $sy $snx $sny] + set panner_pan_enable $pan_save + + # Update the panner window position variables so that it comes up + # in the same place the next time. + + send pannerWin getRect boundary \ + panner_x panner_y panner_width panner_height + set pannerGeom [send imagewin getGeometry \ + $panner_x $panner_y $panner_width $panner_height] + + send pannerRegionMarker raise +} + + +# pannerWinConstraint -- Called when the panner window is moved, resized, or +# rotated. Constrain the panner window to remain within the image window; +# rotation is not permitted. + +proc pannerWinConstraint {marker event attributes} { + global winWidth winHeight + global panner_width panner_height + + set width $panner_width + set height $panner_height + set constraints [list {}] + + # Check the width and height first as we need these below. + foreach i $attributes { + set new [lindex $i 2] + switch [lindex $i 0] { + width { set ww [expr $winWidth / 2] + if {$new > $ww} { + lappend constraints "width $ww" + set width $ww + } else { + set width $new + } + } + height { set wh [expr $winHeight / 2] + if {$new > $wh} { + lappend constraints "height $wh" + set height $wh + } else { + set height $new + } + } + rotangle { lappend constraints "rotangle 0" + } + } + } + + # Constrain X and Y. + foreach i $attributes { + set new [lindex $i 2] + switch [lindex $i 0] { + x { set pw [expr $width / 2] + if {$new < $pw} { + lappend constraints "x $pw" + } elseif {$new > $winWidth - $pw} { + lappend constraints "x [expr $winWidth - $pw]" + } + } + y { set ph [expr $height / 2] + if {$new < $ph} { + lappend constraints "y $ph" + } elseif {$new > $winHeight - $ph} { + lappend constraints "y [expr $winHeight - $ph]" + } + } + } + } + + return $constraints +} + + +# pannerRegionConstraint -- Called when the region marker in the panner +# window is moved, resized, or rotated. + +proc pannerRegionConstraint {marker event attributes} { + global winWidth winHeight + + set constraints [list {}] + send pannerWin getRect interior p_x p_y p_width p_height + send pannerRegionMarker getAttributes width rwidth height rheight + + # Since the panner region marker is a box marker x,y and width,height + # will not both change in the same call, so we can process them all + # independently. + + foreach i $attributes { + set new [lindex $i 2] + + switch [lindex $i 0] { + x { set left [expr $p_x + $rwidth + 1] + set right [expr $p_x + $p_width - $rwidth - 1] + if {$new < $left} { + lappend constraints "x $left" + } elseif {$new > $right} { + lappend constraints "x $right" + } + } + y { set top [expr $p_y + $rheight + 1] + set bottom [expr $p_y + $p_height - $rheight - 1] + if {$new < $top} { + lappend constraints "y $top" + } elseif {$new > $bottom} { + lappend constraints "y $bottom" + } + } + width { set ww [expr $winWidth / 2] + if {$new > $ww / 2} { + lappend constraints "width $ww" + } + } + height { set wh [expr $winHeight / 2] + if {$new > $wh / 2} { + lappend constraints "height $wh" + } + } + rotangle { lappend constraints "rotangle 0" + } + } + } + + return $constraints +} + + +# pannerImagewinResized -- If the display window is resized make the panner +# track the corner. + +proc pannerImagewinResized args { + global panner_enable panner_mapping + global pannerGeom panner_x panner_y panner_width panner_height + + if {$panner_enable} { + set old_x $panner_x; set old_width $panner_width + set old_y $panner_y; set old_height $panner_height + + # Get new location of panner window. + set defGeom [format "%sx%s-5+5" $panner_width $panner_height] + send imagewin parseGeometry $pannerGeom $defGeom x y width height + + # Reposition the marker. + send pannerWin "\ + markpos; \ + setAttributes \ + x [expr $x + $width / 2] \ + y [expr $y + $height / 2] \ + width [expr $width / 2] \ + height [expr $height / 2]; \ + redraw" + + # Update the panner window position variables so that it comes up + # in the same place the next time. + send pannerWin getRect boundary \ + panner_x panner_y panner_width panner_height + set pannerGeom [send imagewin getGeometry \ + $panner_x $panner_y $panner_width $panner_height] + + # Make sure the panner window is on top. + send imagewin raiseMapping $panner_mapping + + # Refresh the panner window if it did not move. + if {$panner_x == $old_x && $panner_y == $old_y && + $panner_width == $old_width && $panner_height == $old_height} { + send imagewin refreshMapping $panner_mapping + } + } +} + + +# resetPanner -- Reinitialize the panner. + +proc resetPanner {param old new} { + global pannerGeom displayPanner + if {$new == "done"} { + setPanner [true $displayPanner] + } else { + setPanner 0 + if {$new != "startup"} { + set pannerGeom -5+5 + } + } +}; send initialize addCallback resetPanner + + + +# MAGNIFIER. A subraster around the cursor in the main image window is +# displayed at a high resolution in a marker (known as the magnifier window) +# within the main image window. + +set magnifier_x 0 +set magnifier_y 0 +set magnifier_width 0 +set magnifier_height 0 +set mrm_width 0 +set mrm_height 0 + +set magnifier_enable 0 +set magnifier_mag_enable 0 +set magnifier_mapping 0 + +createMenu magzoomMenu imagewin { + { "Zoom Factors" f.title } + { f.dblline } + { "Zoom 1" f.exec "setMagnifierZoom 1" } + { "Zoom 2" f.exec "setMagnifierZoom 2" } + { "Zoom 4" f.exec "setMagnifierZoom 4" } + { "Zoom 8" f.exec "setMagnifierZoom 8" } + { "Zoom 16" f.exec "setMagnifierZoom 16" } +} + +# Magnifier window translations. +set magnifierWinTranslations { \ + !Shift : m_rotateResize() + : m_moveResize() + !Shift : m_raise() m_markpos() + : m_raise() m_markposAdd() + : m_redraw() m_destroyNull() + : m_lower() + : popup(magzoomMenu) + : popdown(magzoomMenu) + !Ctrl m: call(toggleMagnifier) + !Ctrl p: call(togglePanner) + BackSpace: m_deleteDestroy() + Delete: m_deleteDestroy() + : graphics-input() + : track-cursor() call(wcsUpdate,$x,$y) +} + + +# setMagnifier -- Turn the magnifier on or off. + +set magAlreadyOn 0 + +proc setDynamicMagnifier {state} \ +{ + global magAlreadyOn magnifier_enable + + if {$state} { + set magAlreadyOn $magnifier_enable + } + if {$magAlreadyOn} { + return + } else { + setMagnifier $state + } +} + + +proc toggleMagnifier args { + global magnifier_enable + + if {$magnifier_enable} { + setMagnifier 0 + send pbMagM set state False + } else { + setMagnifier 1 + send pbMagM set state True + } +} + + +proc setMagnifier {state} \ +{ + global winWidth winHeight frameWidth frameHeight + global frame magnifier_mapping magnifierWinTranslations magnifierArea + global magnifier_enable magnifier_height + global magnifierGeom magnifier_x magnifier_y magnifier_width + + if {$state} { + if {$magnifier_enable} \ + return + + # Determine where to place the magnifier. + set scale [expr sqrt(double($magnifierArea) / (512 * 512))] + set scaled_width [expr int(512 * $scale) / 2 * 2 + 1] + set scaled_height [expr int(512 * $scale) / 2 * 2 + 1] + set defGeom [format "%sx%s-5+5" $scaled_width $scaled_height] + send imagewin parseGeometry $magnifierGeom $defGeom x y width height + + # Create the main magnifier window (marker). + send imagewin createMarker magnifierWin \ + type rectangle \ + createMode noninteractive \ + width [expr $width / 2] \ + height [expr $height / 2] \ + x [expr $x + $width / 2] \ + y [expr $y + $height / 2] \ + lineColor 8 \ + highlightColor 8 \ + translations $magnifierWinTranslations \ + visible true \ + sensitive true \ + activated true + + # Update the magnifier window position variables so that it comes up + # in the same place the next time. + + send magnifierWin getRect boundary \ + magnifier_x magnifier_y magnifier_width magnifier_height + set magnifierGeom [send imagewin getGeometry \ + $magnifier_x $magnifier_y $magnifier_width $magnifier_height] + + # Register callbacks. + send imagewin addCallback magnifierImagewinResized resize + send resize addCallback magnifierImagewinResized + send magnifierWin addCallback magnifierMovedMapImage moveResize + + send magnifierWin { + addCallback magnifierMoved moveResize; + addCallback magnifierDestroy destroy; + addCallback magnifierWinConstraint constraint; + } + + # Map display frame to magnifier window. + set magnifier_enable 1 + set magnifier_mapping [send imagewin nextMapping] + send imagewin refreshMapping $magnifier_mapping + + # create cross-hair + send imagewin createMarker magPointer \ + type rectangle \ + createMode noninteractive \ + width 3 \ + height 3 \ + lineWidth 3 \ + lineColor green \ + highlightcolor green \ + activated true \ + visible true + + # set its position and size + setMagPointerPosition + magnifierMapImage [expr $winWidth / 2] [expr $winHeight / 2] + + } elseif {$magnifier_enable} { + magnifierDestroy + } +} + + +# magnifierDestroy -- Delete the magnifier. + +proc magnifierDestroy args { + global magnifier_enable + global magnifier_mapping + + if {$magnifier_enable} { + set magnifier_enable 0 + + send imagewin freeMapping $magnifier_mapping + send imagewin deleteCallback magnifierImagewinResized + send resize deleteCallback magnifierImagewinResized + send frame deleteCallback magnifierMapImage + + if [send server queryObject magnifierWin] { + send magnifierWin destroy + } + if [send server queryObject magPointer] { + send magPointer destroy + } + } +} + + +# magnifierMoved -- Called when the user moves the magnifier window. We need to +# move the region marker to the new window location and record the new location +# so that the window will come up in the same place if closed and reopened. + +proc magnifierMoved {marker event position} { + global winWidth winHeight magnifierGeom frame + global magnifier_x magnifier_y magnifier_width magnifier_height + + # Move the region marker to the new location. + send client getSource raster sx sy snx sny + + # Update the magnifier window position variables so that it comes up + # in the same place the next time. + + send magnifierWin getRect boundary \ + magnifier_x magnifier_y magnifier_width magnifier_height + set magnifierGeom [send imagewin getGeometry \ + $magnifier_x $magnifier_y $magnifier_width $magnifier_height] +} + + +# magnifierWinConstraint -- Called when the magnifier window is moved, resized, +# or rotated. Constrain the magnifier window to remain within the image window; +# rotation is not permitted. + +proc magnifierWinConstraint {marker event attributes} { + global winWidth winHeight + global magnifier_width magnifier_height + + set width $magnifier_width + set height $magnifier_height + set constraints [list {}] + + # Check the width and height first as we need these below. + foreach i $attributes { + set new [lindex $i 2] + switch [lindex $i 0] { + width { set ww [expr $winWidth / 2] + if {$new > $ww} { + lappend constraints "width $ww" + set width $ww + } else { + set width $new + } + } + height { set wh [expr $winHeight / 2] + if {$new > $wh} { + lappend constraints "height $wh" + set height $wh + } else { + set height $new + } + } + rotangle { lappend constraints "rotangle 0" + } + } + } + + # Constrain X and Y. + foreach i $attributes { + set new [lindex $i 2] + switch [lindex $i 0] { + x { set pw [expr $width / 2] + if {$new < $pw} { + lappend constraints "x $pw" + } elseif {$new > $winWidth - $pw} { + lappend constraints "x [expr $winWidth - $pw]" + } + } + y { set ph [expr $height / 2] + if {$new < $ph} { + lappend constraints "y $ph" + } elseif {$new > $winHeight - $ph} { + lappend constraints "y [expr $winHeight - $ph]" + } + } + } + } + + return $constraints +} + + +# magnifierRegionConstraint -- Called when the region marker in the magnifier +# window is moved, resized, or rotated. + +proc magnifierRegionConstraint {marker event attributes} { + global winWidth winHeight + + set constraints [list {}] + send magnifierWin getRect interior p_x p_y p_width p_height + + # Since the magnifier region marker is a box marker x,y and width,height + # will not both change in the same call, so we can process them all + # independently. + + foreach i $attributes { + set new [lindex $i 2] + + switch [lindex $i 0] { + x { set left [expr $p_x + $rwidth + 1] + set right [expr $p_x + $p_width - $rwidth - 1] + if {$new < $left} { + lappend constraints "x $left" + } elseif {$new > $right} { + lappend constraints "x $right" + } + } + y { set top [expr $p_y + $rheight + 1] + set bottom [expr $p_y + $p_height - $rheight - 1] + if {$new < $top} { + lappend constraints "y $top" + } elseif {$new > $bottom} { + lappend constraints "y $bottom" + } + } + width { set ww [expr $winWidth / 2] + if {$new > $ww / 2} { + lappend constraints "width $ww" + } + } + height { set wh [expr $winHeight / 2] + if {$new > $wh / 2} { + lappend constraints "height $wh" + } + } + rotangle { lappend constraints "rotangle 0" + } + } + } + + return $constraints +} + + +# magnifierImagewinResized -- If the display window is resized make the +# magnifier track the corner. + +proc magnifierImagewinResized args { + global magnifier_enable magnifier_mapping magnifier_height + global magnifierGeom magnifier_x magnifier_y magnifier_width + + if {$magnifier_enable} { + set old_x $magnifier_x; set old_width $magnifier_width + set old_y $magnifier_y; set old_height $magnifier_height + + # Get new location of magnifier window. + set defGeom [format "%sx%s+5+5" $magnifier_width $magnifier_height] + send imagewin parseGeometry $magnifierGeom $defGeom x y width height + + # Reposition the marker. + send magnifierWin "\ + markpos; \ + setAttributes \ + x [expr $x + $width / 2] \ + y [expr $y + $height / 2] \ + width [expr $width / 2] \ + height [expr $height / 2]; \ + redraw" + + # Update the magnifier window position variables so that it comes up + # in the same place the next time. + send magnifierWin getRect boundary \ + magnifier_x magnifier_y magnifier_width magnifier_height + set magnifierGeom [send imagewin getGeometry \ + $magnifier_x $magnifier_y $magnifier_width $magnifier_height] + + # Make sure the magnifier window is on top. + send imagewin raiseMapping $magnifier_mapping + + # Refresh the magnifier window if it did not move. + if {$magnifier_x == $old_x && $magnifier_y == $old_y && + $magnifier_width == $old_width && $magnifier_height == $old_height} { + send imagewin refreshMapping $magnifier_mapping + } + } +} + + +# resetMagnifier -- Reinitialize the magnifier. + +proc resetMagnifier {param old new} { + global magnifierGeom displayMagnifier + if {$new == "done"} { + setMagnifier [true $displayMagnifier] + } else { + setMagnifier 0 + if {$new != "startup"} { + set magnifierGeom +5+5 + } + } +}; send initialize addCallback resetMagnifier + + +set last_mag_x [expr $winWidth / 2] +set last_mag_y [expr $winHeight / 2] + +# magnifierMovedMapImage -- Front end to magnifierMapImage, called when +# magnifier window is moved or resized. + +proc magnifierMovedMapImage args { + global last_mag_x last_mag_y + + magnifierMapImage $last_mag_x $last_mag_y + setMagPointerPosition +} + + +# The following code was borrowed from the SAOtng GUI by Eric Mandel of SAO +#-------------------------------------------------------------------------- + +# globals for magnifier +set mag_w 0 +set mag_h 0 + +# +# setMagnifierZoom -- set the zoom factor for the magnifier +# +proc setMagnifierZoom { zoom } \ +{ + global mag_w mag_h + + send magnifierWin getRect boundary \ + magnifier_x magnifier_y magnifier_width magnifier_height + set mag_w [expr int( ( $magnifier_width + $zoom - 1 ) / $zoom) ] + set mag_h [expr int( ( $magnifier_height + $zoom - 1 ) / $zoom) ] + + #set mw [expr int (($magnifier_width - 1) / ($mag_w * 2))] + #if { $mw < 4 } { set mw 4 } + #set mh [expr int (($magnifier_height - 1) / ($mag_h * 2))] + #if { $mh < 4 } { set mh 4 } + #send magPointer "setAttributes width $mw height $mh; redraw" +} + +# magnifierMapImage -- Map the of the current display frame centered on the +# pointer into the magnifier window. Called when the frame changes, the +# pointer moves in the main image window, or (via magnifierMovedMapImage) +# the magnifier window is moved or resized. + +set magnifierROP 0 + +proc magnifierMapImage {x y} \ +{ + global magnifier_enable frame + global last_mag_x last_mag_y + global magnifier_mapping + global winWidth winHeight + global mag_w mag_h + global magnifierROP + + if {!$magnifier_enable || $frame == 0} \ + return + + if {abs($last_mag_x-$x) != 1 && abs($last_mag_y-$y) != 1} { + # For efficiency we won't compute the sqrt of the distance but instead + # just compare the square. Use a threshold of 6 pixels so when we + # narrow in on the ROI the magnifier is still (mostly) correctly. + set diff [expr (($last_mag_x-$x) * ($last_mag_x-$x)) + \ + (($last_mag_y-$y) * ($last_mag_y-$y))] + if {$diff > 36} { + set last_mag_x $x + set last_mag_y $y + return + } + } + + set last_mag_x $x + set last_mag_y $y + + send magnifierWin getRect interior dx dy dnx dny + if [send imagewin activeMapping $magnifier_mapping] { + send imagewin raiseMapping $magnifier_mapping + } + # initialize the magnifier zoom factor, if necessary + if { !$mag_w || !$mag_h } { + setMagnifierZoom 4 + } + + set sx [expr $x - $mag_w / 2 ] + set sy [expr $y - $mag_h / 2 ] + + # Constrain the source rectangle within the main image window + # (not overlapping an edge or the magnifier window). + + if {$sx > [expr $dx - $mag_w] && $sx < [expr $dx + $dnx] && + $sy > [expr $dy - $mag_h] && $sy < [expr $dy + $dny] } { + + # The source rectangle would overlap the magnifier window; fix that. + + set dist(l) [expr $sx - ($dx - $mag_w)] + set dist(b) [expr $dy + $dny - $sy] + set dist(r) [expr $dx + $dnx - $sx] + set dist(t) [expr $sy - ($dy - $mag_h)] + + # Put the distances in order. + + foreach j [array names dist] { + set alreadyset($j) 0 + } + + for {set i 0} {$i < 4} {incr i} { + set candidate "" + foreach j [array names dist] { + if {!$alreadyset($j)} { + if {$candidate == ""} { + set candidate $j + set minsofar $dist($j) + } elseif {$dist($j) < $minsofar} { + set candidate $j + set minsofar $dist($j) + } + } + } + set order($i) $candidate + set alreadyset($candidate) 1 + } + + # Try the sides in order, using the first one where there's room. + + for {set i 0} {$i < 4} {incr i} { + if {$order($i) == "l"} { + if {$dx >= $mag_w} { + set sx [expr $dx - $mag_w] + break + } + } elseif {$order($i) == "b"} { + if {$winHeight >= $dy + $dny + $mag_h} { + set sy [expr $dy + $dny] + break + } + } elseif {$order($i) == "r"} { + if {$winWidth >= $dx + $dnx + $mag_w} { + set sx [expr $dx + $dnx] + break + } + } elseif {$order($i) == "t"} { + if {$dy >= $mag_h} { + set sy [expr $dy - $mag_h] + break + } + } + } + } + + # Make sure we don't go beyond an edge of the main window. + + if {$sx < 0} { + set sx 0 + } else { + set sxmax [expr $winWidth - $mag_w] + if {$sx > $sxmax} { + set sx $sxmax + } + } + + if {$sy < 0} { + set sy 0 + } else { + set symax [expr $winHeight - $mag_h] + if {$sy > $symax} { + set sy $symax + } + } + + # Map 32 x 32 centered on pointer in main window. + set err [catch {send imagewin setMapping $magnifier_mapping $magnifierROP \ + 0 pixel $sx $sy $mag_w $mag_h \ + 0 pixel $dx $dy $dnx $dny}] + if { $err != 0 } { + Print "There was a problem setting up the magnifier ... recovering" + } +} + + +# set the position of the magnifier marker in the center of the mag window +proc setMagPointerPosition args \ +{ + global magnifier_enable + + if { !$magnifier_enable } { + return + } + + send magnifierWin "getAttributes x x y y" + set xpos [expr $x + 1] + set ypos [expr $y + 1] + + send magPointer "setAttributes x $xpos y $ypos visible true; redraw" +} + + + +# FRAME BLINK. +set blinkId 0 +set blinkIndex 0 + +proc toggleBlink args { + global blinkId blinkRate blinkIndex + global optionsMenuDescription + + if {$blinkId} { + deleteTimedCallback $blinkId + set blinkId 0 + } else { + set blinkId [postTimedCallback blink [expr int($blinkRate * 1000)]] + } + + set blinkIndex 0 + editMenu optionsMenu viewButton $optionsMenuDescription +} + +proc blink args { + global blinkId blinkRate blinkFrames blinkIndex + + send client setFrame [lindex $blinkFrames $blinkIndex] + incr blinkIndex + if {$blinkIndex >= [llength $blinkFrames]} { + set blinkIndex 0 + } + + set blinkId [postTimedCallback blink [expr int($blinkRate * 1000)]] +} + +proc resetBlink args { + global blinkId + if {$blinkId} \ + toggleBlink +}; send initialize addCallback resetBlink + + + +# Normalize -- Reset the view parameters for the current frame. +proc normalize args { + global zoomindex zoomfactor + global frameWidth frameHeight + global xcen ycen frame + + #set zoomindex($frame) 0 + #set xcen [expr $frameWidth / 2] + #set ycen [expr $frameHeight / 2] + #send client zoom 1 1 $xcen $ycen + send client windowColormap 0.5 1.0 +} + + +# Popdown menus. +createMenu fileMenu fileButton { + { "Info" f.exec { + send info map + infoUpdate + } } + { "Load" f.exec { + send client setLoadOption rescan + send load_panel map + set loadP_up 1 + } } + { "Save" f.exec { + Save + } } + { "Save As..." f.exec { + send save_panel map + set saveP_up 1 + } } + { "Print" f.exec { + send imagewin setCursorType busy + Print + send imagewin setCursorType idle + } } + { "Print Setup" f.exec { + send print_panel map + set printP_up 1 + } } + { "TclShell" f.exec { + send tclShell map + } } + { f.line } + { "Reset" f.exec { + # Do a hard reset. + send client Reset + #resetView initialize done done + } } + { "Quit" f.exec Quit } +} + +createMenu viewMenu viewButton { + { "Next frame" f.exec nextFrame } + { "Prev frame" f.exec prevFrame } + { f.line } + { "Colormap" f.menu cmapMenu } + { "Flip" f.menu flipMenu } + { f.line } + { "Equal aspect" f.exec { + set xmag $frameZoomX($frame) + set ymag $frameZoomY($frame) + set zoom [expr ($xmag + $ymag) / 2.0] + cpZoom $zoom $zoom fixed + } } + { "Integer zoom" f.exec { + set xmag [expr round ($frameZoomX($frame))] + set ymag [expr round ($frameZoomY($frame))] + cpZoom $xmag $ymag fixed + } } + { "Toggle zoom" f.exec toggleZoom } + { "Unzoom" f.exec { + set zoomindex($frame) 0 + set mag $zoomfactor($zoomindex($frame)) + send client zoom $mag $mag $xcen $ycen + } } +} + +createMenu cmapMenu viewMenu { + { "Colormaps" f.title } + { f.dblline } + { "Normalize" f.exec normalize } + { "Invert" f.exec cpInvert } + { "Optimize" f.exec cpOptimize sensitive false } + { f.line } + { "Grayscale" f.exec "send client setColormap Grayscale" } + { "Color" f.exec "send client setColormap Color" } + { "Heat" f.exec "send client setColormap Heat" } + { "HSV" f.exec "send client setColormap HSV" } + { "AIPS0" f.exec "send client setColormap AIPS0" } + { "Halley" f.exec "send client setColormap Halley" } + { "Ramp" f.exec "send client setColormap Ramp" } + { "Standard" f.exec "send client setColormap Standard" } + { "Staircase" f.exec "send client setColormap Staircase" } + { "Rainbow1" f.exec "send client setColormap Rainbow1" } + { "Rainbow2" f.exec "send client setColormap Rainbow2" } + { "Random8" f.exec "send client setColormap Random8" } +} + +createMenu flipMenu viewMenu { + { "Flip X" f.exec xflip } + { "Flip Y" f.exec yflip } + { "Flip XY" f.exec xyflip } +} + +set optionsMenuDescription { + { "Autoscale" f.exec { + set value [send autoscaleButton get on] + send autoscaleButton set on [expr !$value] + cpSetAutoscale + } } + { "Antialias" f.exec { + set value [send antialiasButton get on] + send antialiasButton set on [expr !$value] + cpSetAntialias + } } + { "Panner" f.exec { setPanner [expr !$panner_enable] } } + { "Magnifier" f.exec { setMagnifier [expr !$magnifier_enable] }} + { "Coords box" f.exec { setTrack [expr !$track_enable] } } + { "Tile frames" f.exec { + set value [send tileFramesButton get on] + send tileFramesButton set on [expr !$value] + cpSetTileFrames + } } + { "Clear frame" f.exec clearFrame } + { "Fit frame" f.exec fitFrame } + { "Match LUTs" f.exec cpMatchFrames } + { "Register" f.exec cpRegisterFrames } + { {$blinkId ? "Stop blink" : "Blink frames"} + f.exec toggleBlink } + { f.line } + { "Control Panel" f.exec { panel + set panel_up 1 + } } + { "Print Panel" f.exec { send print_panel map + set printP_up 1 + } } + { "Load Panel" f.exec { send client setLoadOption rescan + send load_panel map + set loadP_up 1 + } } + { "Save Panel" f.exec { send save_panel map + set saveP_up 1 + } } +}; createMenu optionsMenu optionsButton $optionsMenuDescription + + +# MAIN CONTROL PANEL +# --------------------------- + + +foreach i $frames {set saveView($i) "1 1"} + +send prevFrame set bitmap larrow +send nextFrame set bitmap rarrow +send contrastLabel set bitmap contrast +send brightnessLabel set bitmap brightness +send contrastSlider resizeThumb 0.1 1.0 +send brightnessSlider resizeThumb 0.1 1.0 + +proc controlPanelDone args { + global panel_up + send controlShell unmap + send panelButton set state 0 + set panel_up 0 +}; send doneButton addCallback controlPanelDone + +# panel -- Toggle control panel display. +proc panel args { + global panel_up + if {$panel_up} { + send controlShell unmap + send panelButton set state 0 + set panel_up 0 + } else { + send controlShell map + send panelButton set state 1 + set panel_up 1 + } +} + +# resetPanel -- Calling during startup or in an initialize, to reset things. +proc resetPanel {param old new} { + global frame nframes frames + global displayPanner displayCoords displayMagnifier + global blinkFrames warnings + + switch $new { + startup { + } + restart { foreach i $frames { + send frame$frame set on 0 + } + } + done { if {$frame} { + send frame$frame set on 1 + } + + cpResetBlink + set button 1 + foreach i $blinkFrames { + send blinkFrame$button set label $i + incr button + } + + cpResetEnhance + send pannerButton set on [true $displayPanner] + send magnifierButton set on [true $displayMagnifier] + send coordsBoxButton set on [true $displayCoords] + send warningsButton set on $warnings + } + } +}; send initialize addCallback resetPanel + + +# Frame selection. +# ------------------------------- +proc cpSetFrame {widget args} { + send $widget set on 0 + send client setFrame [send $widget get label] +} + +proc cpFrameChanged {param old new} { + if {$old > 0} { + send frame$old set on 0 + } + if {$new > 0} { + send frame$new set on 1 + } +} + +send prevFrame addCallback prevFrame +send nextFrame addCallback nextFrame +send frame addCallback cpFrameChanged +foreach i $frames {send frame$i addCallback cpSetFrame} + +# Frame buttons. +proc cpFrameAction {widget args} { + global frameZoomX frameZoomY frame + switch $widget { + aspect { set xmag $frameZoomX($frame) + set ymag $frameZoomY($frame) + set zoom [expr round (($xmag + $ymag) / 2.0)] + cpZoom $zoom $zoom fixed + } + flipX { send client flip x } + flipY { send client flip y } + flipXY { send client flip x y } + clearFrame { clearFrame } + fitFrame { fitFrame } + } +} +foreach widget {aspect flipX flipY flipXY clearFrame fitFrame} { + send $widget addCallback cpFrameAction +} + +# clearFrame -- Clear the current display frame. +proc clearFrame args { + global warnings + if {$warnings} { + Wexec client \ + "Clearing the frame will destroy\n\ + all data in the frame" \ + clearFrame + } else { + send client clearFrame + } +} + +# fitFrame -- Resize the display window to fit the frame buffer. +proc fitFrame args { + global frameWidth frameHeight winWidth winHeight + set dw [expr [send display get width] - $winWidth] + set dh [expr [send display get height] - $winHeight] + send display "resize [expr $frameWidth + $dw] [expr $frameHeight + $dh]" +}; + +proc initFitFrame { param old new } { + if { [lindex $new 0] == "resize"} { + fitFrame + } + pannerMapImage init +}; send frameFit addCallback initFitFrame + + +# Zoom and pan buttons. +# ------------------------------- +proc cpZoomAction {widget args} { + global frameWidth frameHeight + + switch $widget { + x1 { cpZoom 1 1 fixed } + + z2 { cpZoom 2 2 fixed } + z3 { cpZoom 3 3 fixed } + z4 { cpZoom 4 4 fixed } + z5 { cpZoom 5 5 fixed } + z8 { cpZoom 8 8 fixed } + + d2 { cpZoom [expr 1.0/2] [expr 1.0/2] fixed } + d3 { cpZoom [expr 1.0/3] [expr 1.0/3] fixed } + d4 { cpZoom [expr 1.0/4] [expr 1.0/4] fixed } + d5 { cpZoom [expr 1.0/5] [expr 1.0/5] fixed } + d8 { cpZoom [expr 1.0/8] [expr 1.0/8] fixed } + + zoomIn { cpZoom 2.0 2.0 relative } + zoomOut { cpZoom 0.5 0.5 relative } + + centerFrame { send client pan \ + [expr $frameWidth/2.0] \ + [expr $frameHeight/2.0] + } + + toggleZoom { toggleZoom } + } +} + +proc cpZoom {zoom_x zoom_y mode} { + global frameZoomX frameZoomY zoomindex frame + + if {$mode == "fixed"} { + send client zoom $zoom_x $zoom_y + } else { + send client zoom \ + [expr $frameZoomX($frame) * $zoom_x] \ + [expr $frameZoomY($frame) * $zoom_y] + } + + set zoomindex($frame) 0 +} + +proc toggleZoom args { + global frameZoomX frameZoomY frameCenterX frameCenterY + global frameWidth frameHeight saveView frame + + if {$frameZoomX($frame) != 1 && $frameZoomY($frame) != 1} { + set saveView($frame) \ + "$frameZoomX($frame) $frameZoomY($frame) \ + $frameCenterX($frame) $frameCenterY($frame)" + send client zoom 1 1 \ + [expr $frameWidth/2.0] \ + [expr $frameHeight/2.0] + } else { + send client zoom $saveView($frame) + } +} + +foreach widget {toggleZoom centerFrame zoomIn zoomOut \ + x1 z2 z3 z4 z5 z8 d2 d3 d4 d5 d8} { + send $widget addCallback cpZoomAction +} + +# Frame data display. +# ------------------------------- +set cpFrame 0 +set cpXcen 0 +set cpYcen 0 +set cpXmag 0 +set cpYmag 0 +set cpXscale 0 +set cpYscale 0 + +proc cpDisplayFrameData {name old new} { + global cpFrame cpXcen cpYcen + global cpXmag cpYmag cpXscale cpYscale + + set update 0 + switch $name { + frame { if {$new != $cpFrame} { + set cpFrame $new + set update 1 + } + } + frameView { # Parse the frameView input. + set xmag [lindex $new 0]; set ymag [lindex $new 1] + set xcen [lindex $new 2]; set ycen [lindex $new 3] + set xnorm [lindex $new 4]; set ynorm [lindex $new 5] + + # We need client coords and the overall scale factors. + set text [send client encodewcs $xcen $ycen] + set xcen [lindex $text 0] + set ycen [lindex $text 1] + set xscale [expr $xmag * $xnorm] + set yscale [expr $ymag * $ynorm] + + if {$xcen != $cpXcen || $ycen != $cpYcen || + $xmag != $cpXmag || $ymag != $cpYmag || + $xscale != $cpXscale || $yscale != $cpYscale} { + + set cpXcen $xcen; set cpXscale $xscale + set cpYcen $ycen; set cpYscale $yscale + set cpXmag $xmag; set cpYmag $ymag + set update 1 + } + } + } + + if {$update} { + set header [format "-- Frame %d --" $cpFrame] + set center [format "X center: %0.1f\nY center: %0.1f" $cpXcen $cpYcen] + if {int($cpXmag) >= 10} { + set zoom1 [format " X zoom: %0.1f" $cpXmag] + set zoom2 [format " Y zoom: %0.1f" $cpYmag] + } else { + set zoom1 [format "X zoom: %0.1f" $cpXmag] + set zoom2 [format "Y zoom: %0.1f" $cpYmag] + } + if {int($cpXscale) >= 10} { + set scale1 [format "X scale: %0.1f" $cpXscale] + set scale2 [format "Y scale: %0.1f" $cpYscale] + } else { + set scale1 [format "X scale: %0.2f" $cpXscale] + set scale2 [format "Y scale: %0.2f" $cpYscale] + } + send frameData set label [format "%s\n%s\n%s\n%s\n%s\n%s" \ + $header $center $scale1 $scale2 $zoom1 $zoom2] + } +}; foreach p {frame frameView} {send $p addCallback cpDisplayFrameData} + + +# Frame enhancement. +# ------------------------------- +set cpEnhanceDisable 0 +set cpEnhanceId 0 +set cpEnhanceMode none +set cpEnhanceVal 0 +set cpListItem none + +# Windowing the colormap is slow when the mouse is not in the image window, +# so it is necessary to execute the windowColormap in a work procedure. +# This allows any number of slider motion events to be processed for each +# windowColormap, preventing slider events from queueing up. + +proc cpResetEnhance args { + global cpListItem cpEnhanceId + set cpListItem none + set cpEnhanceId 0 +} + +proc cpSetEnhancement {widget cbtype x y} { + global cpEnhanceMode cpEnhanceVal cpEnhanceId cpEnhanceDisable + set cpEnhanceMode $widget + set cpEnhanceVal $x + if {!$cpEnhanceId && !$cpEnhanceDisable} { + set cpEnhanceId [postWorkProc cpEnhanceProc] + } +} +proc cpEnhanceProc args { + global cpEnhanceMode cpEnhanceVal cpEnhanceId + global enhancement frame maxContrast + set val $cpEnhanceVal + + if {$cpEnhanceMode == "contrastSlider"} { + set contrast [lindex $enhancement($frame) 2] + send client windowColormap [lindex $enhancement($frame) 1] \ + [expr (($contrast < 0) ? -$val : $val) * $maxContrast] + } else { + send client windowColormap $val + } + + set cpEnhanceId 0 + return done +} + +proc cpInvert args { + global enhancement frame + set contrast [lindex $enhancement($frame) 2] + send client windowColormap [lindex $enhancement($frame) 1] \ + [expr -1.0 * $contrast] +} + +proc cpDisplayEnhancement {param old new} { + global cpEnhanceId maxContrast cpEnhanceDisable + global cpListItem enhancement frame + + if {!$frame} \ + return + set enhance $enhancement($frame) + if {[llength $enhance] < 3} \ + return + + set colortable [lindex $enhance 0] + set offset [lindex $enhance 1] + set scale [lindex $enhance 2] + + send colordata set label [format "-- %s --\nCon %0.2f Brt %0.2f" \ + $colortable $scale $offset] + + if {$colortable != $cpListItem} { + send colorlist highlight $colortable + set cpListItem $colortable + } + + if {!$cpEnhanceId && !$cpEnhanceDisable} { + set cpEnhanceDisable 1 + send contrastSlider moveThumb [expr abs($scale) / $maxContrast] + send brightnessSlider moveThumb $offset + set cpEnhanceDisable 0 + } +} + +foreach i {enhancement frame} { + send $i addCallback cpDisplayEnhancement +} +send contrastSlider addCallback cpSetEnhancement scroll +send brightnessSlider addCallback cpSetEnhancement scroll +send invertButton addCallback cpInvert + + +# Colortable display and selection. +# ------------------------------- +set cpScrollHeight 0 + +proc cpSetColorList {param old new} { + send colorlist setList $new resize +}; send colortables addCallback cpSetColorList + +proc cpResizeScrollbar {widget cbtype flags x y w h cw ch} { + global cpScrollHeight + set newHeight [expr $ch - $h] + if {$newHeight && $newHeight != $cpScrollHeight} { + send colorlistScroll setScrollbar 0.0 [expr double($h) / $ch] + set rowHeight [send colorlist get rowHeight] + set rowSpacing [send colorlist get rowSpacing] + send colorlistScroll set increment [expr ($ch <= $h) ? 0 : \ + "double ($rowHeight + $rowSpacing) / ($ch - $h)"] + set cpScrollHeight $newHeight + } +}; send colorlistPort addCallback cpResizeScrollbar + +proc cpScrollColorlist {widget cbtype pos} { + global cpScrollHeight + send colorlist set y [expr -int($cpScrollHeight * $pos)] +}; send colorlistScroll addCallback cpScrollColorlist scroll + +proc cpSelectColor {widget cbtype selections indices} { + global colortable + foreach selection $selections { + send client setColormap $selection + } +}; send colorlist addCallback cpSelectColor + + +# Frame blink. +# ------------------------------- +send BRtext set label $blinkRate + +proc cpSetBlinkRate {widget args} { + global blinkRate + if {$widget == "BRincrease"} { + if {$blinkRate < 0.01} { + set blinkRate 0.125 + } else { + set blinkRate [expr $blinkRate * 2.0] + } + } else { + set blinkRate [expr $blinkRate / 2.0] + if {$blinkRate < 0.01} { + set blinkRate 0 + } + } + send BRtext set label $blinkRate +} +foreach widget {BRincrease BRdecrease} { + send $widget addCallback cpSetBlinkRate +} + +proc cpSetBlinkFrame {widget args} { + global blinkFrames nframes + + set frame [send $widget get label] + if {$frame == " "} { + set frame 1 + } else { + incr frame + if {$frame > $nframes} { + set frame " " + } + } + send $widget set label $frame + + set blinkFrames {} + foreach i {1 2 3 4} { + set frame [send blinkFrame$i get label] + if {$frame != " "} { + lappend blinkFrames $frame + } + } +}; foreach i $frames {send blinkFrame$i addCallback cpSetBlinkFrame} + +proc cpBlink {widget args} { + global blinkRate blinkId + + if {$blinkRate < 0.01} { + send $widget set state 0 + blink + } elseif {($blinkId != 0) != [send $widget get state]} { + toggleBlink + } +}; send blinkButton addCallback cpBlink + +proc cpResetBlink args { + global blinkRate blinkFrames blinkIndex frames + global defaultBlinkRate + + foreach i $frames { + send blinkFrame$i set label " " + } + set blinkRate $defaultBlinkRate + send BRtext set label $blinkRate + set blinkIndex 0 +}; send blinkReset addCallback cpResetBlink + +proc cpTraceBlink {name element op} { + upvar $name blinkId + send blinkButton set state [expr $blinkId != 0] +}; trace variable blinkId w cpTraceBlink + +proc cpSetBlinkFrames {param old new} { + global blinkFrames frames + set blinkFrames {} + foreach i $frames { + if {$i <= $new} { + lappend blinkFrames $i + } + } + cpResetBlink + set button 1 + foreach i $blinkFrames { + send blinkFrame$button set label $i + incr button + } +}; send nframes addCallback cpSetBlinkFrames + +proc cpRegisterFrames args { + global blinkFrames + send client registerFrames \{$blinkFrames\} +}; send registerButton addCallback cpRegisterFrames + +proc cpMatchFrames args { + global blinkFrames + send client matchFrames \{$blinkFrames\} +}; send matchButton addCallback cpMatchFrames + + +# Options buttons. +# ------------------------------- +proc cpSetPanner {widget args} { + setPanner [send $widget get on] +}; send pannerButton addCallback cpSetPanner + +proc cpTracePanner {name element op} { + upvar $name panner_enable + send pannerButton set on $panner_enable +}; trace variable panner_enable w cpTracePanner + +proc cpSetMagnifier {widget args} { + setMagnifier [send $widget get on] +}; send magnifierButton addCallback cpSetMagnifier + +proc cpTraceMagnifier {name element op} { + upvar $name magnifier_enable + send magnifierButton set on $magnifier_enable +}; trace variable magnifier_enable w cpTraceMagnifier + +proc cpSetCoordsBox {widget args} { + setTrack [send $widget get on] +}; send coordsBoxButton addCallback cpSetCoordsBox + +proc cpTraceCoordsBox {name element op} { + upvar $name track_enable + send coordsBoxButton set on $track_enable +}; trace variable track_enable w cpTraceCoordsBox + +proc cpSetWarnings args { + global warnings + set warnings [send warningsButton get on] +}; send warningsButton addCallback cpSetWarnings + +proc cpSetAutoscale args { + set value [send autoscaleButton get on] + send client setOption autoscale [expr {$value ? "True" : "False"}] +}; send autoscaleButton addCallback cpSetAutoscale + +proc cpTrackAutoscale {param old new} { + send autoscaleButton set on [true $new] +}; send autoscale addCallback cpTrackAutoscale + +proc cpSetAntialias args { + set value [send antialiasButton get on] + send client setOption antialias [expr {$value ? "True" : "False"}] +}; send antialiasButton addCallback cpSetAntialias + +proc cpTrackAntialias {param old new} { + send antialiasButton set on [true $new] +}; send antialias addCallback cpTrackAntialias + +proc cpSetTileFrames args { + global blinkFrames + set value [send tileFramesButton get on] + send client setOption tileFrames \ + [expr {$value ? "True" : "False"}] \{ $blinkFrames \} +}; send tileFramesButton addCallback cpSetTileFrames + +proc cpTrackTileFrames {param old new} { + send tileFramesButton set on [true $new] +}; send tileFrames addCallback cpTrackTileFrames + +proc tileFramesToggle args { + set value [send tileFramesButton get on] + send tileFramesButton set on [expr !$value] + cpSetTileFrames +} + + +# Warning dialog. This pops up a dialog box with the given warning message, +# and executes the given command if the user pushes OK. +# +# Usage: Wexec object message [ok_action [cancel_action]] +# +# The message text is displayed in a popup and the user hits the ok or +# cancel button to close the popup. If an action has been posted for the +# button selected then it is sent to the named object. Only one alert can +# be in effect at a time; posting another alert before the first has +# completed causes the new alert to override the first. + +set W_object "" +set W_ok_command "" +set W_cancel_command "" + +proc Wexec {object msg args} { + global W_object W_ok_command W_cancel_command + set W_object $object + set W_ok_command [lindex $args 0] + set W_cancel_command [lindex $args 1] + send warnText set label $msg + send warning map +} + +proc Wbutton {widget args} { + global W_object W_ok_command W_cancel_command + switch $widget { + warnOk { if [llength $W_ok_command] { + send $W_object $W_ok_command + } + } + warnCancel { if [llength $W_cancel_command] { + send $W_object $W_cancel_command + } + } + } + send warning unmap +}; foreach w {warnOk warnCancel} {send $w addCallback Wbutton} + +# The parameter "alert" is used to forward alerts from the client. +proc setAlert {param old new} { + Wexec client [lindex $new 0] [lindex $new 1] [lindex $new 2] +}; send alert addCallback setAlert + + +# Global control panel buttons. +# ------------------------------- +proc cpInitialize args { + send imagewin setCursorType busy + send client initialize + send imagewin setCursorType idle +} +send initializeButton addCallback cpInitialize +send normalizeButton addCallback normalize + +# Temporarily deactivate some buttons. +send optimizeButton setSensitive false + + +# INFO box. +#----------- +proc infoDone args { send info unmap } +send infoDone addCallback infoDone +proc infoClear args { send infoText set string "" } +send infoUpdate addCallback infoUpdate +send infoClear addCallback infoClear + +proc infoUpdate args { + global version frame nframes + global frameWidth frameHeight frameDepth + global enhancement + global cpXcen cpYcen + global cpXmag cpYmag cpXscale cpYscale + + if {$frame == 0} { + send infoText set string "initializing display..." + } else { + set line1 $version + set line2 [format "Image:\t\t%s" [send imageTitle get label]] + set line3 [format "Frame %d of %d:\t%d x %d" \ + $frame $nframes $frameWidth $frameHeight] + set cmap [lindex $enhancement($frame) 0] + set brt [lindex $enhancement($frame) 1] + set con [lindex $enhancement($frame) 2] + set line4 [format "Colormap:\t%s" $cmap] + set line5 [format "Enhancement:\tBrt=%s Cont=%s" $brt $con] + + set center [format "X: %0.1f\n\t\tY: %0.1f" $cpXcen $cpYcen] + set line6 [format "Center:\t\t%s" $center] + + set line7 [format "Zoom:\t\tX: %0.2f\n\t\tY: %0.2f" $cpXmag $cpYmag] + set line8 [format "Scale:\t\tX: %0.2f\n\t\tY: %0.2f" $cpXscale $cpYscale] + + send infoText set string [ + format "%s\n\n%s\n%s\n%s\n%s\n%s\n%s\n%s\n\n" \ + $line1 $line2 $line3 $line4 $line5 $line6 $line7 $line8 + ] + } +} +foreach param { frame frameView nframes frameSize frameTitle enhancement } { + send $param addCallback infoUpdate +} + + +# Cursor positioning routines +#---------------------------- + +proc move_cursor { xstep ystep args } { + set raster 0 + send imagewin getCursorPos rx ry + send imagewin setCursorPos [expr $rx + $xstep] [expr $ry + $ystep] $raster +} + + +# Print Panel Functions. +#------------------------ +# Global variables needed for the print setup panel + +set printColor prGrayButton +set orientation epsPortButton +set page_size epsLetterButton +set imageScale 100 + +set epsWidgets { epsPageGroup epsOrientLabel epsSizeLabel + epsPortButton epsLandButton epsLetterButton epsLegalButton epsA4Button + ScaleFrame SCdecrease SCtext SCincrease +} + + +proc psetup_init args { + global printColor orientation page_size imageScale #format + + set_printer toPrinter callback 1 + send SCtext set label [ format "%d %%" $imageScale ] + send $printColor set on true + send $orientation set on true + send $page_size set on true +} + + +proc doPrintOptions { param old new } { + global imageScale page_size orientation imageScale printColor + global warnings + + send printStatus set label {} + set val [join [lrange $new 1 end] " "] + + # print [format "doPrintOptions %s = %s" [lindex $new 0] $val] + switch [lindex $new 0] { + autoscale { if { $val == "True" } { + send epsscaleButton set on true + } elseif { $val == "False" } { + send epsscaleButton set on false + } + } + autorotate { if { $val == "True" } { + send autorotateButton set on true + } elseif { $val == "False" } { + send autorotateButton set on false + } + } + maxaspect { if { $val == "True" } { + send aspectButton set on true + } elseif { $val == "False" } { + send aspectButton set on false + } + } + annotate { if { $val == "True" } { + send annotateButton set on true + } elseif { $val == "False" } { + send annotateButton set on false + } + } + compress { if { $val == "True" } { + send compressButton set on true + } elseif { $val == "False" } { + send compressButton set on false + } + } + orientation { send $orientation set on false + if { $val == "portrait" } { + send epsPortButton set on true + set orientation epsPortButton + } elseif { $val == "landscape" } { + send epsPortButton set on false + set orientation epsLandButton + } + } + papersize { send $page_size set on false + if { $val == "letter" } { + send epsLetterButton set on true + set page_size epsLetterButton + } elseif { $val == "legal" } { + send epsLegalButton set on true + set page_size epsLegalButton + } elseif { $val == "A4" } { + send epsA4Button set on true + set page_size epsA4Button + } + } + imscale { set imageScale $val + send SCtext set label [ format "%d %%" $imageScale ] + } + colortype { send $printColor set on false + if { $val == "gray" } { + send prGrayButton set on true + set printColor prGrayButton + } elseif { $val == "pseudo" } { + send prPseudoButton set on true + set printColor prPseudoButton + } elseif { $val == "rgb" } { + send prRGBButton set on true + set printColor prRGBButton + } + } + printerName { if [send toPrinter get on] { + send printlist highlight $val + } + } + printCmd { if [send toPrinter get on] { + send printcmd set string $val + } + } + printFile { if [send toFile get on] { + send printcmd set string $val + } + } + deviceType { if { $val == "Printer" } { + send printerLabel set label "Print Command:" + send toPrinter set on true + send toFile set on false + } elseif { $val == "File" } { + send printerLabel set label "File Name:" + send toPrinter set on false + send toFile set on true + send printlist unhighlight + } + } + + status { send printStatus set label $val + send server synchronize + } + warning { if {$warnings} { Wexec server $val } + } + } +}; send printOptions addCallback doPrintOptions + + +# Print options procedures. +# ------------------------------- + +set prOptsWidgets { + toPrinter toFile + prGrayButton prPseudoButton prRGBButton + epsLandButton epsPortButton + epsLetterButton epsLegalButton epsA4Button + SCincrease SCdecrease +} +set prSimpleOptions { + epsscaleButton autorotateButton aspectButton annotateButton compressButton +} + +proc prPrintCommand { widget cbtype args } { + if [send toFile get on] { + send client setPrintOption printfile $args + send printStatus set label [format "output file set to %s" $args] + } else { + send client setPrintOption printcmd $args + send printStatus set label [format "print command set to %s" $args] + } +}; send printcmd addCallback prPrintCommand + +proc prOptionToggle { widget cbtype args } { + global imageScale + + # Handle the image scale widgets first. + #print [ format "prOptionToggle %s" $widget ] + switch $widget { + SCincrease { set scale [expr $imageScale + 5] + send client setPrintOption imscale $scale + return + } + SCdecrease { set scale [ expr $imageScale - 5 ] + send client setPrintOption imscale $scale + return + } + } + + # If it's not one of those it must be one of the radio toggles. + set val [ send $widget get on ] + #print [ format "prOptionToggle %s = %s" $widget $val ] + if { $val == 1 } { + switch $widget { + toPrinter { send client setPrintOption devicetype printer } + toFile { send client setPrintOption devicetype file } + + epsLandButton { send client setPrintOption orientation landscape } + epsPortButton { send client setPrintOption orientation portrait } + + epsLetterButton { send client setPrintOption papersize letter } + epsLegalButton { send client setPrintOption papersize legal } + epsA4Button { send client setPrintOption papersize A4 } + + prGrayButton { send client setPrintOption colortype gray } + prPseudoButton { send client setPrintOption colortype pseudo } + prRGBButton { send client setPrintOption colortype rgb } + } + } else { + send $widget set on true + } + +} ; foreach w $prOptsWidgets { send $w addCallback prOptionToggle } + +proc prSimpleOptionToggle { widget args } { + set val [ send $widget get on ] + #print [ format "prSimpleOptionToggle %s = %s" $widget $val ] + + switch $widget { + epsscaleButton { send client setPrintOption autoscale $val } + autorotateButton { send client setPrintOption autorotate $val } + aspectButton { send client setPrintOption maxaspect $val } + annotateButton { send client setPrintOption annotate $val } + compressButton { send client setPrintOption compress $val } + } +} ; foreach w $prSimpleOptions { send $w addCallback prSimpleOptionToggle } + + + +# Printer display and selection. +# ------------------------------- +set psScrollHeight 0 + +proc psSetPrintList {param old new} { + send printlist setList $new resize + send printlist highlight 0 +}; send printerList addCallback psSetPrintList + +proc psResizeScrollbar {widget cbtype flags x y w h cw ch} { + global psScrollHeight + set newHeight [expr $ch - $h] + if {$newHeight && $newHeight != $psScrollHeight} { + send printlistScroll setScrollbar 0.0 [expr double($h) / $ch] + set rowHeight [send printlist get rowHeight] + set rowSpacing [send printlist get rowSpacing] + send printlistScroll set increment [expr ($ch <= $h) ? 0 : \ + "double ($rowHeight + $rowSpacing) / ($ch - $h)"] + set psScrollHeight $newHeight + } +}; send printlistPort addCallback psResizeScrollbar + +proc psScrollPrintlist {widget cbtype pos} { + global psScrollHeight + send printlist set y [expr -int($psScrollHeight * $pos)] +}; send printlistScroll addCallback psScrollPrintlist scroll + +proc psSelectPrint {widget cbtype selections indices} { + global printerlist + foreach selection $selections { + send client setPrintOption printername $selection + } +}; send printlist addCallback psSelectPrint + + +proc printQuit { args } { + send print_panel unmap +} ; send donePrint addCallback printQuit + +proc Print { args } { + global winWidth winHeight + send imagewin setCursorType busy + + # Get the print command or file template if not previous reset. + set val [ send printcmd get string ] + if [send toFile get on] { + send client setPrintOption printfile $val + } else { + send client setPrintOption printcmd $val + } + setPrintCorners 0 [expr $winWidth - 1] [expr $winHeight - 1] 0 + + send client print + send imagewin setCursorType idle +} ; send okayPrint addCallback Print + + +# setPrintCorners -- Tell the client the WCS of the image being printed. + +proc setPrintCorners { lx ly ux uy args } { + global winWidth winHeight + + # Convert raw corner screen coordinates to frame buffer raster coords. + send imagewin unmapPixel $lx $ly raster llx lly + set llx [expr "int ($llx)"] + set lly [expr "int ($lly)"] + set str [send client encodewcs $llx $lly] + scan $str "%g %g %g" llx_r lly_r z + set llx_i [expr "int ($llx_r)"] + set lly_i [expr "int ($lly_r)"] + + send imagewin unmapPixel $ux $uy raster urx ury + set urx [expr "int ($urx)"] + set ury [expr "int ($ury)"] + set str [send client encodewcs $urx $ury] + scan $str "%g %g %g" urx_r ury_r z + set urx_i [expr "int ($urx_r)"] + set ury_i [expr "int ($ury_r)"] + + send client setPrintOption corners $llx_i $lly_i $urx_i $ury_i +} + + +#-------------------------- +# Save panel functions. +#-------------------------- +# Global variables needed for the save setup panel + +set format rasButton +set saveColor svPseudoButton + +set fileFmtButtons { + rasButton gifButton jpegButton tiffButton + fitsButton x11Button pnmButton rawButton +} + + +# Format group procedures. +#--------------------------------- + +# Select a format. + +proc set_format { widget func state args } { + global format saveColor + + send $format set on false + if {$widget == $format} { + send $widget set on true + } else { + switch $widget { + rasButton { send client setSaveOption format ras } + gifButton { send client setSaveOption format gif } + jpegButton { send client setSaveOption format jpeg } + tiffButton { send client setSaveOption format tiff } + fitsButton { send client setSaveOption format fits } + x11Button { send client setSaveOption format x11 } + pnmButton { send client setSaveOption format pnm } + rawButton { send client setSaveOption format raw } + } + } +} ; foreach fmt $fileFmtButtons { send $fmt addCallback set_format } + +proc setSaveFile { widget cbtype args } { + send client setSaveOption fname $args + send saveStatus set label [format "output file set to %s" $args] +}; send saveFile addCallback setSaveFile + + +proc doSaveOptions { param old new } { + global format saveColor + global warnings + + send saveStatus set label {} + set val [join [lrange $new 1 end] " "] + + #print [format "doSaveOptions %s = %s" [lindex $new 0] $val] + switch [lindex $new 0] { + format { + # Now (de)sensitize the color options depending on the format, + # force the color choice when needed. + send $format set on false + switch [lindex $val 0] { + ras { #send svRGBButton setSensitive false + send svPseudoButton setSensitive true + set format rasButton + } + gif { send svRGBButton setSensitive false + send svPseudoButton setSensitive true + if {$saveColor == "svRGBButton"} { + send $saveColor set on false + send svPseudoButton set on true + set saveColor svPseudoButton + } + set format gifButton + } + jpeg { send svRGBButton setSensitive true + send svPseudoButton setSensitive true + set format jpegButton + } + tiff { send svRGBButton setSensitive false + send svPseudoButton setSensitive true + set format tiffButton + } + fits { send svRGBButton setSensitive false + send svPseudoButton setSensitive false + send $saveColor set on false + send svGrayButton set on true + set saveColor svGrayButton + set format fitsButton + } + x11 { send svRGBButton setSensitive true + send svPseudoButton setSensitive true + set format x11Button + } + pnm { send svRGBButton setSensitive true + send svPseudoButton setSensitive true + set format pnmButton + } + raw { send svRGBButton setSensitive true + send svPseudoButton setSensitive true + set format rawButton + } + } + send $format set on true + } + color { send $saveColor set on false + switch [lindex $val 0] { + grayscale { send svGrayButton set on true + set saveColor svGrayButton + } + pseudocolor { send svPseudoButton set on true + set saveColor svPseudoButton + } + rgb { send svRGBButton set on true + set saveColor svRGBButton + } + } + } + fname { send saveFile set string $val + } + status { send saveStatus set label $val + send server synchronize + } + text { send saveData set label $val + } + warning { if {$warnings} { Wexec server $val } + } + } +} ; send saveOptions addCallback doSaveOptions + + +# Color group procedures. +#--------------------------------- +send svGrayButton addCallback "send client setSaveOption color grayscale" +send svPseudoButton addCallback "send client setSaveOption color pseudocolor" +send svRGBButton addCallback "send client setSaveOption color rgb" + +send doneSave addCallback "send save_panel unmap" + +proc Save { args } { + send imagewin setCursorType busy + + # Get the print command or file template if not previous reset. + set val [ send saveFile get string ] + send client setSaveOption fname $val + send saveStatus set label [format "output file set to %s" $args] + + send client save + send imagewin setCursorType idle + #send save_panel unmap +} ; send okaySave addCallback Save + + +# ------------------------------------------ +# Image and objects list display and section +# ------------------------------------------ + +set load_frame 1 + +proc filesTextHighlight { widget event args } { + if { $event == "enterNotify" } { + send $widget set displayCaret True + } elseif { $event == "leaveNotify" } { + send $widget set displayCaret False + } +} +send imtemplateText addEventHandler filesTextHighlight enterWindowMask +send imtemplateText addEventHandler filesTextHighlight leaveWindowMask +send fnameText addEventHandler filesTextHighlight enterWindowMask +send fnameText addEventHandler filesTextHighlight leaveWindowMask + +send rootButton addCallback "send client setLoadOption root" +send homeButton addCallback "send client setLoadOption home" +send upButton addCallback "send client setLoadOption up" +send rescanButton addCallback "send client setLoadOption rescan" + +proc setPattern { widget mode pattern args } { + send client setLoadOption pattern $pattern +} ; send imtemplateText addCallback setPattern + +proc doLoadOptions { param old new } { + global warnings loadP_up + + set val [ join [lrange $new 1 end] " " ] + + #print [format "doLoadOptions %s = %s" [lindex $new 0] $val] + switch [lindex $new 0] { + pattern { send imtemplateText set string [format "%s" $val ] } + curdir { send dirLabel set label [format "Directory: %s" $val ] } + newfile { send fnameText set string $val + if { [ string last / $val ] < 0 } { + if { [send browseToggle get on] == 0 } { + send load_panel unmap + set loadP_up 0 + } + } + } + status { send filesStatus set label $val + if { ! $loadP_up } { send imageTitle set label $val } + send server synchronize + } + warning { if {$warnings} { Wexec server $val } } + gray { send grayToggle set on $val } + } +} ; send loadOptions addCallback doLoadOptions + +proc toggleGraymap { widget args } { + send client setLoadOption gray [ send grayToggle get on ] +} ; send grayToggle addCallback toggleGraymap + +proc fileLoad { widget mode fname args } { + global load_frame loadP_up + send imagewin setCursorType busy + send client load $fname $load_frame + set fpath [format "%s/%s" \ + [string range [send dirLabel get label] 12 end] \ + $fname ] + if { [ string last / $fname ] < 0 && [ file isfile $fpath] == 1 } { + if { [send browseToggle get on] == 0 } { + send load_panel unmap + set loadP_up 0 + } + } + send imagewin setCursorType idle +} ; send fnameText addCallback fileLoad + + +set imlistScrollheight 0 + +proc setFileList {param old new} { + send imageList setList $new resize +}; send filelist addCallback setFileList + +proc flresizeScrollbar { widget cbtype flags x y w h cw ch } { + global imlistScrollheight + set newheight [expr $ch - $h] + if { $newheight != $imlistScrollheight } { + send imlistScrollbar setScrollbar 0.0 [expr double($h) / $ch] + set imlistScrollheight $newheight + } +} ; send imlistPorthole addCallback flresizeScrollbar + +proc flscrollList { widget cbtype pos } { + global imlistScrollheight + send imageList set y [expr -int($imlistScrollheight * $pos)] +} ; send imlistScrollbar addCallback flscrollList scroll + +proc flSelectPrint {widget cbtype selections args} { + global load_frame loadP_up + foreach selection $selections { + send client load $selection $load_frame + if { [ string last / $selection ] < 0 } { + if { [send browseToggle get on] == 0 } { + send load_panel unmap + set loadP_up 0 + } + } + } +}; send imageList addCallback flSelectPrint + +proc fileSetFrame {widget args} { + global nframes load_frame + + set frame [send $widget get label] + if {$frame == $nframes} { + set frame 1 + } else { + incr frame + } + send $widget set label $frame + set load_frame $frame +}; send frameFrame addCallback fileSetFrame + +proc fileLoadB args { + global load_frame loadP_up + send imagewin setCursorType busy + set fname [send fnameText get string] + if {$fname == ""} { + Wexec client "No image name specified" + } else { + send client load $fname $load_frame + set fpath [format "%s/%s" \ + [string range [send dirLabel get label] 12 end] \ + $fname ] + if { [ string last / $fname ] < 0 && [ file isfile $fpath] == 1 } { + if { [send browseToggle get on] == 0 } { + send load_panel unmap + set loadP_up 0 + } + } + send imagewin setCursorType idle + } +} ; send filesLoadButton addCallback fileLoadB + +proc fileQuit args { + send load_panel unmap + set loadP_up 0 +} ; send filesCloseButton addCallback fileQuit + + +# More Panel toggles + +proc infoPanel args { + global infoP_up + if {$infoP_up} { + send info unmap + set infoP_up 0 + } else { + send info map + set infoP_up 1 + } +} + +proc pannerPanel args { + global panner_enable + setPanner [expr !$panner_enable] +} + +proc magnifierPanel args { + global magnifier_enable + setMagnifier [expr !$magnifier_enable] +} + +proc wcsPanel args { + global track_enable + setTrack [expr !$track_enable] +} + +proc loadPanel args { + global loadP_up + if {$loadP_up} { + send load_panel unmap + set loadP_up 0 + } else { + send client setLoadOption rescan + send load_panel map + set loadP_up 1 + } +} + +proc savePanel args { + global saveP_up + if {$saveP_up} { + send save_panel unmap + set saveP_up 0 + } else { + send save_panel map + set saveP_up 1 + } +} + +proc printPanel args { + global printP_up + if {$printP_up} { + send print_panel unmap + set printP_up 0 + } else { + send print_panel map + set printP_up 1 + } +} + + +#------------------------------------ +# Define procedure for the help panel +#------------------------------------ + +# Help Panel Bitmaps +#------------------- +createBitmap iraf_logo 45 45 { +0xff, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f, 0xff, 0xff, 0xff, 0xff, +0xff, 0x3f, 0xfc, 0xff, 0xff, 0xff, 0xff, 0x3f, 0xfc, 0xff, 0xff, 0xff, +0xff, 0x3f, 0xf8, 0xff, 0xff, 0xff, 0xff, 0x3f, 0xf0, 0xff, 0xff, 0xff, +0xff, 0x3f, 0xf0, 0xff, 0xff, 0xff, 0xff, 0x3f, 0xe0, 0xff, 0xff, 0xff, +0xff, 0x3f, 0xc0, 0xff, 0xff, 0xff, 0xff, 0x3f, 0xc0, 0xff, 0xff, 0xff, +0xff, 0x3f, 0x80, 0xff, 0xff, 0xff, 0xff, 0x3f, 0x80, 0xfc, 0xff, 0xff, +0xff, 0x3f, 0x84, 0xf8, 0xff, 0xff, 0xff, 0x1f, 0x84, 0xf4, 0xff, 0xff, +0xff, 0x1b, 0x04, 0x09, 0x00, 0xfc, 0xff, 0x11, 0x04, 0x11, 0xf8, 0xff, +0x7f, 0x10, 0x04, 0x21, 0xc0, 0xff, 0x1f, 0x10, 0x04, 0x41, 0xf0, 0xff, +0x00, 0x18, 0x04, 0x01, 0xe0, 0xff, 0x00, 0x18, 0x00, 0x81, 0xc0, 0xff, +0x00, 0x08, 0x00, 0x01, 0xe0, 0xff, 0x07, 0x08, 0x00, 0x01, 0xf1, 0xff, +0x1f, 0x08, 0x80, 0x21, 0xf0, 0xff, 0xff, 0x08, 0xc0, 0x41, 0xf4, 0xff, +0xff, 0x08, 0xc0, 0x41, 0xf8, 0xff, 0xff, 0x09, 0xc0, 0xc1, 0xf0, 0xff, +0xff, 0x0b, 0x80, 0xc1, 0xf1, 0xff, 0xff, 0x07, 0x80, 0x81, 0xe1, 0xff, +0xff, 0x07, 0x80, 0x01, 0xc1, 0xff, 0xff, 0x07, 0x00, 0x01, 0xc0, 0xff, +0xff, 0x07, 0xc2, 0x05, 0x81, 0xff, 0xff, 0x07, 0xf2, 0x07, 0x81, 0xff, +0xff, 0x07, 0xf2, 0x17, 0x03, 0xff, 0xff, 0x03, 0xfa, 0x7f, 0x02, 0xfe, +0xff, 0x03, 0xfe, 0xff, 0x02, 0xfe, 0xff, 0x03, 0xfe, 0xff, 0x03, 0xfc, +0xff, 0x03, 0xff, 0xff, 0x07, 0xfc, 0xff, 0x83, 0xff, 0xff, 0x0f, 0xf8, +0xff, 0xc1, 0xff, 0xff, 0x3f, 0xf0, 0xff, 0xe1, 0xff, 0xff, 0x7f, 0xf8, +0xff, 0xf1, 0xff, 0xff, 0xff, 0xf0, 0xff, 0xf8, 0xff, 0xff, 0xff, 0xe0, +0xff, 0xf8, 0xff, 0xff, 0xff, 0xe3, 0xff, 0xfc, 0xff, 0xff, 0xff, 0xe7, +0xff, 0xfc, 0xff, 0xff, 0xff, 0xef}; send helpIRAFLogo "set bitmap iraf_logo" + +createBitmap noao_logo 45 45 { +0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, +0xff, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0x03, 0xfe, 0xff, 0xff, +0xff, 0xff, 0x01, 0xfc, 0xff, 0xff, 0xff, 0xff, 0x00, 0xf8, 0xff, 0xff, +0xff, 0xff, 0x00, 0xf8, 0xff, 0xff, 0xff, 0xff, 0x00, 0xf8, 0xff, 0xff, +0xff, 0x7f, 0x00, 0xf0, 0xff, 0xff, 0xff, 0xff, 0x00, 0xf8, 0xff, 0xff, +0xff, 0xff, 0x00, 0xf8, 0xff, 0xff, 0xff, 0xff, 0x00, 0xf8, 0xff, 0xff, +0xff, 0xff, 0x01, 0xfc, 0xff, 0xff, 0xff, 0xff, 0x03, 0xfe, 0xff, 0xff, +0xff, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, +0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xff, 0xff, 0xff, +0xff, 0xff, 0x8f, 0xff, 0xff, 0xff, 0xff, 0xff, 0x8f, 0xff, 0xff, 0xff, +0xff, 0xff, 0x07, 0xff, 0xff, 0xff, 0xff, 0xff, 0x07, 0xff, 0xff, 0xff, +0xff, 0xff, 0x03, 0xfe, 0xff, 0xff, 0xff, 0xff, 0x03, 0xfe, 0xff, 0xff, +0xff, 0xff, 0x01, 0xfc, 0xff, 0xff, 0xff, 0xff, 0x01, 0xfc, 0xff, 0xff, +0xff, 0xff, 0x00, 0xf8, 0xff, 0xff, 0xff, 0x7f, 0x00, 0xf0, 0xff, 0xff, +0xff, 0x7f, 0x00, 0xf0, 0xff, 0xff, 0xff, 0x3f, 0x00, 0xe0, 0xff, 0xff, +0xff, 0x3f, 0x00, 0xe0, 0xff, 0xff, 0xff, 0x1f, 0x00, 0xc0, 0xff, 0xff, +0xff, 0x1f, 0x00, 0xc0, 0xff, 0xff, 0xff, 0x0f, 0x00, 0x80, 0xff, 0xff, +0xff, 0x0f, 0x00, 0x80, 0xff, 0xff, 0xff, 0x07, 0x00, 0x00, 0xff, 0xff, +0xff, 0x03, 0x00, 0x00, 0xfe, 0xff, 0xff, 0x03, 0x00, 0x00, 0xfe, 0xff, +0xff, 0x01, 0x00, 0x00, 0xfc, 0xff, 0xff, 0x01, 0x00, 0x00, 0xfc, 0xff, +0xff, 0x00, 0x00, 0x00, 0xf8, 0xff, 0xff, 0x00, 0x00, 0x00, 0xf8, 0xff, +0x7f, 0x00, 0x00, 0x00, 0xf0, 0xff, 0x7f, 0x00, 0x00, 0x00, 0xf0, 0xff, +0x3f, 0x00, 0x00, 0x00, 0xe0, 0xff}; send helpNOAOLogo "set bitmap noao_logo" + +# Stuff for keeping track of visited anchors. +set links { 0 } +set linkIndex 0 +set visited(0) empty + +send helpInfo1 set label $version + +proc Help args { + global helpP_up + if {$helpP_up == 0} { + send client help + } else { + send help_panel unmap + set helpP_up 0 + } +} + +proc helpPanel args { + global helpP_up + if {$helpP_up} { + send help_panel unmap + set helpP_up 0 + } else { + send help_panel map + set helpP_up 1 + } +} + +proc helpQuit args { + global helpP_up + send help_panel unmap + set helpP_up 0 + send helpButton set state 0 + send helpText setText "" +}; send helpClose addCallback helpQuit + +proc getHelpText { param old new } { + send helpText setText $new + helpPanel +}; send help addCallback getHelpText + +proc anchorSelected {widget cbtype event text href args} { + global visited links linkIndex + set anchID [send helpText anchorToId $href] + set visited($href) 1 + if {$linkIndex == 0} { + send helpBack set sensitive True + if {[lindex $links 1] != $anchID} { + set links { 0 } + send helpForward set sensitive False + } + } + if {$linkIndex > 0 && [lindex $links [expr $linkIndex + 1]] != $anchID} { + set links [lrange $links 0 $linkIndex] + } + if {[lindex $links [expr $linkIndex + 1]] != $anchID} { + lappend links $anchID + incr linkIndex + } else { + send helpForward set sensitive False + incr linkIndex + } + if {$linkIndex == [expr [llength $links] - 1]} { + send helpForward set sensitive False + } + send helpText gotoId $anchID + send helpText retestAnchors +}; send helpText addCallback anchorSelected anchor + +proc testAnchor {widget cbtype href} { + global visited + return [info exists visited($href)] +}; send helpText addCallback testAnchor testAnchor + + +# Callbacks to position forwards and backwards in link list. +proc hlpForward args { + global links linkIndex + incr linkIndex + if {$linkIndex <= [llength $links]} { + set anchID [lindex $links $linkIndex] + send helpText gotoId $anchID + send helpText retestAnchors + if {$linkIndex == [expr [llength $links] - 1]} { + send helpForward set sensitive False + send helpBack set sensitive True + } else { + send helpBack set sensitive True + } + } else { + incr linkIndex -1 + } +}; send helpForward addCallback hlpForward + +proc hlpBack args { + global links linkIndex + incr linkIndex -1 + if {$linkIndex >= 0} { + set anchID [lindex $links $linkIndex] + send helpText gotoId $anchID + send helpText retestAnchors + if {$linkIndex == 0} { send helpBack set sensitive False } + if {$linkIndex >= 0} { send helpForward set sensitive True } + } else { + incr linkIndex 1 + } +}; send helpBack addCallback hlpBack + +proc hlpHome args { + global links linkIndex + set links { 0 } + set linkIndex 0 + send helpText gotoId 0 + send helpForward set sensitive False + send helpBack set sensitive False +}; send helpHome addCallback hlpHome + + + +#------------------------------------ +# Define some TCL debug procedures. +#------------------------------------ + +set tclP_up 0 + +proc tclCommandClear {widget args} { send tclEntry set string "" } +proc tclCommandExecute {widget args} { send server [send tclEntry {get string}] +} +proc tclCommand {widget mode command args} { send server $command } +proc tclClose {widget args} { send tclShell unmap } +proc tclOpen { args } { + global tclP_up + send tclShell map + set tclP_up 1 +} + +proc tclPanel args { + global tclP_up + if {$tclP_up} { + send tclShell unmap + set tclP_up 0 + } else { + send tclShell map + set tclP_up 1 + } +} + +send tclClear addCallback tclCommandClear +send tclExecute addCallback tclCommandExecute +send tclEntry addCallback tclCommand +send tclcloseButton addCallback tclClose + diff --git a/vendor/x11iraf/ximtool/OLD/ximtool-mag.c b/vendor/x11iraf/ximtool/OLD/ximtool-mag.c new file mode 100644 index 00000000..142a99fc --- /dev/null +++ b/vendor/x11iraf/ximtool/OLD/ximtool-mag.c @@ -0,0 +1,419 @@ +#include +#include +#include +#include +#include +#include + +#define XIMTOOL_MAIN +#include "ximtool.h" + +/* + * XIMTOOL -- X11 based image display server and standalone image display + * client. This program is based on the IRAF prototype widget server (object + * manager library or OBM) and the gterm-image widget. + */ + +/* Compatibility hacks. */ +#ifdef AUX +void *memmove(a,b,n) void *a; const void *b; size_t n; { bcopy(b,a,n); } +#else +#if defined(sun) && !defined(SYSV) +void *memmove(a,b,n) void *a, *b; int n; { bcopy(b,a,n); } +#endif +#endif + +/* Data. */ +XtAppContext app_context; +static char server[] = "server"; + +/* The builtin default GUI. */ +char *defgui_text[] = { +# include "ximtool.gui.h" + NULL +}; + + + +/* MAIN -- XImtool main program. This is the only ximtool routine containing + * window system specific code. + */ +main (argc, argv) +int argc; +char *argv[]; +{ + register XimDataPtr xim = &ximtool_data; + register int i; + XtPointer obm; + char **sv_argv, *init_file = NULL, *str; + int sv_argc, ncolors, base; + + + /* Process the command line arguments. Scan the arglist first to see + * if we're requesting help or a printout of the default GUI, if so + * print these out and exit. + */ + if (argc > 1) { + if (strcmp (argv[1], "-help") == 0) { + Usage (); + exit (-1); + + } else if (strcmp (argv[1], "-defgui") == 0) { + register int i; + for (i=0; defgui_text[i]; i++) + printf ("%s\n", defgui_text[i]); + exit (0); + } + } + + + /* Loop over the command line options and preprocess the ones that + * are widget/GUI resources we want to make available more easily. + * To do this we'll tweak the argument list so it appears to be a + * "-xrm" resource setting, this means the X initialization code + * below will do all the real work. + */ + for (i=1; i < argc; i++) { + + if (strcmp (argv[i], "-cmapName") == 0) { + str = argv[++i]; + strcpy (argv[i-1], "-xrm\0"); + argv[i] = (char *) malloc (256); + sprintf (argv[i], "XImtool*cmapName:%s\0", str); + + } else if (strcmp (argv[i], "-maxColors") == 0) { + ncolors = atoi (argv[++i]); + ncolors = max (32, min (201, ncolors)); + strcpy (argv[i-1], "-xrm\0"); + argv[i] = (char *) malloc (256); + sprintf (argv[i], "XImtool*maxColors:%d\0", ncolors); + + } else if (strcmp (argv[i], "-basePixel") == 0) { + base = atoi (argv[++i]); + strcpy (argv[i-1], "-xrm\0"); + argv[i] = (char *) malloc (256); + sprintf (argv[i], "XImtool*basePixel:%d", base); + + } else if (strcmp (argv[i], "-cmapInitialize") == 0) { + str = argv[++i]; + strcpy (argv[i-1], "-xrm\0"); + argv[i] = (char *) malloc (256); + sprintf (argv[i], "XImtool*cmapInitialize:%s", str); + + } else if (strcmp (argv[i], "-displayPanner") == 0) { + str = argv[++i]; + strcpy (argv[i-1], "-xrm\0"); + argv[i] = (char *) malloc (256); + sprintf (argv[i], "XImtool*displayPanner:%s", str); + + } else if (strcmp (argv[i], "-displayMagnifier") == 0) { + str = argv[++i]; + strcpy (argv[i-1], "-xrm\0"); + argv[i] = (char *) malloc (256); + sprintf (argv[i], "XImtool*displayMagnifier:%s", str); + + } else if (strcmp (argv[i], "-displayCoords") == 0) { + str = argv[++i]; + strcpy (argv[i-1], "-xrm\0"); + argv[i] = (char *) malloc (256); + sprintf (argv[i], "XImtool*displayCoords:%s", str); + + } else if (strcmp (argv[i], "-printConfig") == 0) { + str = argv[++i]; + strcpy (argv[i-1], "-xrm\0"); + argv[i] = (char *) malloc (256); + sprintf (argv[i], "XImtool*printConfig:%s", str); + } + } + + /* Get local copy of argc and argv. */ + if ((sv_argc = argc) > 0) { + sv_argv = (char **) XtMalloc (argc * sizeof(char *)); + memmove (sv_argv, argv, argc * sizeof(char *)); + } else + sv_argv = argv; + + /* Initialize applications context. We don't use the top level + * shell created here, but we need to deal with it in order to + * get the application resources. The object manager opens its own + * connection to the display server and manages a separate window + * hierarchy with its own top level shell. + */ + xim->toplevel = XtAppInitialize (&app_context, "XImtool", + (XrmOptionDescList) NULL, 0, &sv_argc, sv_argv, + (String *) NULL, (ArgList) NULL, 0); + + /* Free saved arglist. */ + free ((char *)sv_argv); + + /* Get application resources. */ + XtVaGetApplicationResources (xim->toplevel, xim, + resources, XtNumber(resources), + /* Add any resource overrides here */ + NULL); + + /* Initialize the object manager. */ + xim->obm = obm = (XtPointer) ObmOpen (app_context, argc, argv); + ObmAddCallback (obm, OBMCB_setGterm|OBMCB_preserve, xim_reset, + (XtPointer)xim); + + + /* Loop over the command line options. The default xim structure + * should be defined at this point so the command options can be + * used to override them. + */ + for (i=1; i < argc; i++) { + + /* Anything without a '-' is a file name to load at startup. + * Only use the first name defined. + */ + if (argv[i][0] != '-') { /* File name */ + if (!init_file) { + init_file = argv[i]; + if (access (init_file, R_OK) < 0) { + fprintf (stderr, "%s: File does not exist: '%s'\n", + argv[0], init_file); + exit (-1); + } + } + + } else if (strcmp (argv[i], "-gui") == 0) { + xim->gui = argv[++i]; + + } else if (strcmp (argv[i], "-cmap1") == 0) { + xim->userCMap1 = argv[++i]; + + } else if (strcmp (argv[i], "-cmap2") == 0) { + xim->userCMap2 = argv[++i]; + + } else if (strcmp (argv[i], "-cmapDir1") == 0) { + xim->userCMapDir1 = argv[++i]; + + } else if (strcmp (argv[i], "-cmapDir1") == 0) { + xim->userCMapDir2 = argv[++i]; + + } else if (strcmp (argv[i], "-imtoolrc") == 0) { + xim->imtoolrc = argv[++i]; + + } else if (strcmp (argv[i], "-memModel") == 0) { + xim->memModel = argv[++i]; + + } else if (strcmp (argv[i], "-config") == 0) { + xim->def_config = atoi (argv[++i]); + + } else if (strcmp (argv[i], "-nframes") == 0) { + i++; + xim->def_nframes = min (MAX_FRAMES, atoi (argv[i])); + + } else if (strcmp (argv[i], "-tile") == 0) { + xim->tileFrames++; + + } else if (strcmp (argv[i], "-invert") == 0) { + xim->invert++; + + } else if (strcmp (argv[i], "-fifo") == 0) { + xim->input_fifo = malloc (strlen (argv[++i]+2)); + xim->output_fifo = malloc (strlen (argv[i]+2)); + sprintf (xim->input_fifo, "%si", argv[i]); + sprintf (xim->output_fifo, "%so", argv[i]); + + } else if (strcmp (argv[i], "-port") == 0) { + if (xim->port != 0 ) + xim->port = atoi (argv[++i]); + else + i++; + + } else if (strcmp (argv[i], "-unix") == 0) { + if (strcmp ("none", xim->input_fifo) ) + xim->unixaddr = argv[++i]; + else + i++; + + } else if (strcmp (argv[i], "-fifo_only") == 0) { + xim->unixaddr = "none"; + xim->port = 0; + + } else if (strcmp (argv[i], "-inet_only") == 0 || + strcmp (argv[i], "-port_only") == 0 ) { + xim->input_fifo = ""; + xim->unixaddr = "none"; + + } else if (strcmp (argv[i], "-unix_only") == 0) { + xim->input_fifo = ""; + xim->port = 0; + + + /* Skip any standard X toolkit flags, they're handled above. + */ + } else if (strcmp (argv[i], "-bg") == 0) { + i++; + } else if (strcmp (argv[i], "-fg") == 0) { + i++; + } else if (strcmp (argv[i], "-iconic") == 0) { + ; + } else if (strcmp (argv[i], "-display") == 0) { + i++; + } else if (strcmp (argv[i], "-geometry") == 0) { + i++; + } else if (strcmp (argv[i], "-title") == 0) { + i++; + } else if (strcmp (argv[i], "-xrm") == 0) { + i++; + + } else { + fprintf (stderr, "Unrecognized flag '%s'\n", argv[i]); + Usage(); + exit (-1); + } + } + + + /* Initialize the ximtool/obm client code. */ + xim_clientOpen (xim); + + /* Load the Ximtool GUI. If the GUI name is "default" the builtin + * default GUI is used. This is stored as an array of text lines, + * which we must append newlines to and concatenate together to + * form the GUI message. + */ + if (strcmp (xim->gui, "default") == 0 || + (ObmDeliverMsgFromFile (obm, server, xim->gui) != 0)) { + + register char *ip, *op; + char *message; + int i; + + message = (char *) malloc (204800); + for (i=0, op=message; ip = defgui_text[i]; i++) { + while (*ip) + *op++ = *ip++; + *op++ = '\n'; + } + *op++ = '\0'; + + ObmDeliverMsg (obm, server, message); + free ((char *)message); + + } + + /* Activate the GUI. */ + ObmActivate (obm); + + /* Initialize the frame buffers and graphics pipeline. */ + xim_initialize (xim, xim->def_config, xim->def_nframes, 1); + + /* Listen for a client connection. */ + xim_iisopen (xim); + + /* Initialize the hardcopy option and printer configuration. */ + xim_initPrinterOps (xim); + + /* Open the file Load/Save structures. */ + xim_initLoad (xim); + xim_initSave (xim); + + /* Load a file at startup if it was defined. */ + if ( init_file != NULL ) + xim_loadFile (xim, init_file, 1); + + /* EXECUTE */ + XtAppMainLoop (app_context); + + xim_shutdown (xim); +} + + +/* XIM_SHUTDOWN -- Terminate ximtool. + */ +xim_shutdown (xim) +register XimDataPtr xim; +{ + eps_close (xim->psim); + xim_loadClose (xim); + xim_saveClose (xim); + xim_clientClose (xim); + xim_iisclose (xim); + xim_close (xim); + ObmClose (xim->obm); + exit (0); +} + + +/* XIM_ADDINPUT -- Register a procedure to be called when there is input + * to be processed on the given input source. The ximtool code doesn't + * talk to X directly so we need to provide this interface routine. + */ +XtPointer +xim_addInput (xim, input, proc, client_data) +register XimDataPtr xim; +int input; +void (*proc)(); +XtPointer client_data; +{ + return ((XtPointer) XtAppAddInput (app_context, input, + (XtPointer)XtInputReadMask, *proc, client_data)); +} + + +/* XIM_REMOVEINPUT -- Remove a callback previously posted with xim_addInput. + */ +void +xim_removeInput (xim, id) +register XimDataPtr xim; +XtPointer id; +{ + XtRemoveInput ((XtInputId)id); +} + + +/* USAGE -- Print a list of command-line options. + */ +Usage () +{ + fprintf (stderr, "Usage:\n\n"); + printoption (" ximtool"); + printoption ("[-basePixel ]"); /* base cmap pixel */ + printoption ("[-cmap1 ]"); /* User cmap 1 */ + printoption ("[-cmap2 ]"); /* User cmap 2 */ + printoption ("[-cmapDir1 ]"); /* User cmapDir 1 */ + printoption ("[-cmapDir1 ]"); /* User cmapDir 2 */ + printoption ("[-cmapInitialize ]"); /* initialize colormap */ + printoption ("[-cmapName ]"); /* colormap name */ + printoption ("[-config ]"); /* initial config */ + printoption ("[-defgui]"); /* Print default GUI */ + printoption ("[-displayPanner ]"); /* display panner box */ + printoption ("[-displayMagnifier ]"); /* display magnifier */ + printoption ("[-displayCoords ]"); /* display coords box */ + printoption ("[-fifo ]"); /* fifo pipe */ + printoption ("[-fifo_only]"); /* use fifo only */ + printoption ("[-gui ]"); /* GUI file */ + printoption ("[-help]"); /* Print help */ + printoption ("[-imtoolrc ]"); /* fbconfig file */ + printoption ("[-inet_only | -port_only]"); /* use inet only */ + printoption ("[-invert]"); /* invert colormap */ + printoption ("[-maxColors ]"); /* # of colors */ + printoption ("[-memModel ]"); /* memory model */ + printoption ("[-nframes ]"); /* # of frames */ + printoption ("[-port ]"); /* inet port */ + printoption ("[-printConfig ]"); /* printer config file */ + printoption ("[-tile]"); /* tile frames */ + printoption ("[-unix ]"); /* unix socket */ + printoption ("[-unix_only]"); /* use unix only */ + printoption ("[]"); /* file to load */ + fprintf (stderr,"\n"); +} + + +/* PRINTOPTION -- Pretty-print an option string. + */ +static int cpos = 0; +printoption(st) +char *st; +{ + if (strlen(st) + cpos > 78) { + fprintf (stderr,"\n\t"); + cpos = 8; + } + fprintf (stderr,"%s ",st); + cpos = cpos + strlen(st) + 1; +} diff --git a/vendor/x11iraf/ximtool/OLD/ximtool-mag.gui b/vendor/x11iraf/ximtool/OLD/ximtool-mag.gui new file mode 100644 index 00000000..19167e6e --- /dev/null +++ b/vendor/x11iraf/ximtool/OLD/ximtool-mag.gui @@ -0,0 +1,5388 @@ +#!/usr/local/bin/obmsh +# +# XIMTOOL-MAG.GUI -- Default GUI for the Ximtool-mag image display server. +# +# Version 1.2 -- Released 4/30/2000 + + +reset-server +appInitialize ximtool XImtool { + *objects:\ + toplevel Layout display \ + display Layout menubar \ + menubar MenuButton fileButton \ + menubar MenuButton viewButton \ + menubar MenuButton optionsButton \ + menubar TextBox imageTitle \ + menubar Toggle panelButton \ + menubar Toggle xflipButton \ + menubar Toggle yflipButton \ + menubar Command prevButton \ + menubar MenuButton frameButton \ + menubar Command nextButton \ + menubar Toggle helpButton \ + display Gterm imagewin \ + display Gterm colorbar \ +\ + toplevel TopLevelShell info \ + info Paned infoPanel \ + infoPanel Box infoBox \ + infoBox Command infoDone \ + infoBox Command infoDown \ + infoBox Command infoUp \ + infoBox Command infoSave \ + infoBox Command infoUpdate \ + infoBox Command infoClear \ + infoPanel AsciiText infoText \ +\ + toplevel TopLevelShell controlShell \ + controlShell Layout controlPanel \ + controlPanel Group viewBox \ + controlPanel Group enhancementBox \ + controlPanel Group blinkBox \ + controlPanel Group optionsBox \ + controlPanel Frame controlBox \ +\ + viewBox Layout view \ + view Group frameSelect \ + frameSelect Layout frameBox \ + frameBox TextToggle frame1 \ + frameBox TextToggle frame2 \ + frameBox TextToggle frame3 \ + frameBox TextToggle frame4 \ + frameBox Command prevFrame \ + frameBox Command nextFrame \ + view Frame frameDataBox \ + frameDataBox TextBox frameData \ + view Group zoomBox \ + zoomBox Layout zoom \ + zoom TextButton toggleZoom \ + zoom TextButton zoomIn \ + zoom Command x1 \ + zoom Command z2 \ + zoom Command z3 \ + zoom Command z4 \ + zoom Command z5 \ + zoom Command z8 \ + zoom TextButton zoomOut \ + zoom TextButton centerFrame \ + zoom Command d2 \ + zoom Command d3 \ + zoom Command d4 \ + zoom Command d5 \ + zoom Command d8 \ + view Layout viewButtons \ + viewButtons Command aspect \ + viewButtons Command flipX \ + viewButtons Command flipY \ + viewButtons Command flipXY \ + viewButtons Command clearFrame \ + viewButtons Command fitFrame \ +\ + enhancementBox Layout enhance \ + enhance Scrollbar2 colorlistScroll \ + enhance Frame colorlistFrame \ + colorlistFrame Porthole colorlistPort \ + colorlistPort MultiList colorlist \ + enhance Frame colordataFrame \ + colordataFrame TextBox colordata \ + enhance Label contrastLabel \ + enhance Slider2d contrastSlider \ + enhance Label brightnessLabel \ + enhance Slider2d brightnessSlider \ + enhance Command invertButton \ + enhance Command optimizeButton \ +\ + blinkBox Layout blink \ + blink Label blinkFramesLabel \ + blink Command blinkFrame1 \ + blink Command blinkFrame2 \ + blink Command blinkFrame3 \ + blink Command blinkFrame4 \ + blink Command blinkReset \ + blink Label blinkRateLabel \ + blink Frame BRframe \ + BRframe Layout BRlayout \ + BRlayout Arrow BRdecrease \ + BRlayout TextBox BRtext \ + BRlayout Arrow BRincrease \ + blink Command registerButton \ + blink Command matchButton \ + blink Toggle blinkButton \ +\ + optionsBox TextToggle pannerButton \ + optionsBox TextToggle magnifierButton \ + optionsBox TextToggle coordsBoxButton \ + optionsBox TextToggle autoscaleButton \ + optionsBox TextToggle antialiasButton \ + optionsBox TextToggle tileFramesButton \ + optionsBox TextToggle warningsButton \ +\ + controlBox Layout control \ + control Command initializeButton \ + control Command normalizeButton \ + control Command doneButton \ +\ + toplevel TopLevelShell tclShell\ + tclShell Paned tclPanel\ + tclPanel Box tclForm\ + tclForm Label tclLabel\ + tclForm Command tclClear\ + tclForm Command tclExecute\ + tclForm Command tclcloseButton\ + tclPanel AsciiText tclEntry\ +\ + toplevel TransientShell warning \ + warning Layout warn \ + warn Frame warnFrame \ + warnFrame Layout WFlayout \ + WFlayout Icon warnIcon \ + WFlayout TextBox warnText \ + warn TextButton warnOk \ + warn TextButton warnCancel \ + warn TextButton warnHelp \ +\ + toplevel TopLevelShell print_panel\ + print_panel Layout printLayout\ +\ + printLayout Group printCmdGroup\ + printLayout Group optGroup\ + printLayout Group cmdGroup\ +\ + printCmdGroup Layout printCmdLayout\ + printCmdLayout Layout labelLayout\ + labelLayout Label toLabel\ + labelLayout Label printerLabel\ + printCmdLayout Layout inputLayout\ + inputLayout TextToggle toPrinter\ + inputLayout TextToggle toFile\ + inputLayout Frame printcmdFrame\ + printcmdFrame AsciiText printcmd\ +\ + optGroup Layout optLayout\ + optLayout Group epsPageGroup\ + optLayout Group optionsGroup\ + optLayout Group printColorGroup\ + optLayout Group printerGroup\ +\ + epsPageGroup Layout epsPage\ + epsPage Label epsOrientLabel\ + epsPage TextToggle epsPortButton\ + epsPage TextToggle epsLandButton\ + epsPage Label epsSizeLabel\ + epsPage TextToggle epsLetterButton\ + epsPage TextToggle epsLegalButton\ + epsPage TextToggle epsA4Button\ + epsPage Label epsScaleLabel\ + epsPage Frame ScaleFrame \ + ScaleFrame Layout ScaleLayout \ + ScaleLayout Arrow SCdecrease \ + ScaleLayout TextBox SCtext \ + ScaleLayout Arrow SCincrease \ +\ + optionsGroup Layout options\ + options TextToggle epsscaleButton\ + options TextToggle autorotateButton\ + options TextToggle aspectButton\ + options TextToggle annotateButton\ + options TextToggle compressButton\ +\ + printColorGroup Layout printColor\ + printColor TextToggle prGrayButton\ + printColor TextToggle prPseudoButton\ + printColor TextToggle prRGBButton\ +\ + printerGroup Layout printers \ + printers Scrollbar2 printlistScroll \ + printers Frame printlistFrame \ + printlistFrame Porthole printlistPort \ + printlistPort MultiList printlist \ +\ + cmdGroup Layout cmdLayout\ + cmdLayout TextButton okayPrint\ + cmdLayout Label printStatus\ + cmdLayout TextButton donePrint\ +\ + toplevel TopLevelShell save_panel\ + save_panel Layout saveLayout\ +\ + saveLayout Group saveNameGroup\ + saveLayout Group saveOptGroup\ + saveLayout Group saveCmdGroup\ +\ + saveNameGroup Layout saveNameLayout\ + saveNameLayout Label saveLabel\ + saveNameLayout Frame fnameFrame\ + fnameFrame AsciiText saveFile\ +\ + saveOptGroup Layout saveOptLayout\ + saveOptLayout Group fmtGroup\ + saveOptLayout Group saveColorGroup\ + saveOptLayout Frame saveDataBox \ + saveDataBox TextBox saveData \ +\ + fmtGroup Layout formats\ + formats TextToggle rasButton\ + formats TextToggle gifButton\ + formats TextToggle jpegButton\ + formats TextToggle tiffButton\ + formats TextToggle fitsButton\ + formats TextToggle x11Button\ + formats TextToggle pnmButton\ + formats TextToggle rawButton\ +\ + saveColorGroup Layout saveColor\ + saveColor TextToggle svGrayButton\ + saveColor TextToggle svPseudoButton\ + saveColor TextToggle svRGBButton\ +\ + saveCmdGroup Layout saveCmdLayout\ + saveCmdLayout TextButton okaySave\ + saveCmdLayout Label saveStatus\ + saveCmdLayout TextButton doneSave\ +\ + toplevel TopLevelShell load_panel \ + load_panel Layout filesLayout \ + filesLayout Group imagesGroup \ + imagesGroup Layout imagesLayout \ + imagesLayout Label imtemplateLabel \ + imagesLayout Frame imtemplateFrame \ + imtemplateFrame AsciiText imtemplateText \ + imagesLayout Scrollbar2 imlistScrollbar \ + imagesLayout Frame imlistFrame \ + imlistFrame Porthole imlistPorthole \ + imlistPorthole MultiList imageList \ + imagesLayout TextButton rootButton \ + imagesLayout TextButton homeButton \ + imagesLayout TextButton upButton \ + imagesLayout TextButton rescanButton \ + imagesLayout TextToggle grayToggle \ + imagesLayout TextToggle browseToggle \ + imagesLayout Label dirLabel \ + imagesLayout Label fnameLabel \ + imagesLayout Frame filnamFrame \ + imagesLayout Label frameLabel \ + imagesLayout Command frameFrame \ + filnamFrame AsciiText fnameText \ +\ + filesLayout Group fbuttonsGroup \ + fbuttonsGroup Layout fbuttonsLayout \ + fbuttonsLayout Command filesLoadButton \ + fbuttonsLayout Label filesStatus \ + fbuttonsLayout Command filesCloseButton \ +\ + toplevel TopLevelShell help_panel \ + help_panel Layout helpLayout \ + helpLayout Layout helpMenuLayout \ + helpLayout Layout helpInfoLayout \ +\ + helpMenuLayout Command helpBack \ + helpMenuLayout Command helpForward \ + helpMenuLayout Command helpHome \ + helpMenuLayout Command helpClose \ +\ + helpLayout Frame helpTextFrame\ + helpTextFrame HTML helpText \ +\ + helpInfoLayout Label helpIRAFLogo \ + helpInfoLayout Label helpInfo1 \ + helpInfoLayout Label helpInfo2 \ + helpInfoLayout Label helpInfo3 \ + helpInfoLayout Label helpNOAOLogo \ +\ + toplevel Parameter ximtool\ + ximtool Parameter alert\ + ximtool Parameter initialize\ + ximtool Parameter resize\ + ximtool Parameter frame\ + ximtool Parameter nframes\ + ximtool Parameter frameSize\ + ximtool Parameter frameRegion\ + ximtool Parameter frameView\ + ximtool Parameter frameTitle\ + ximtool Parameter frameFit\ + ximtool Parameter enhancement\ + ximtool Parameter colortables\ + ximtool Parameter autoscale\ + ximtool Parameter antialias\ + ximtool Parameter tileFrames\ + ximtool Parameter cursorMode\ + ximtool Parameter xflip\ + ximtool Parameter yflip\ + ximtool Parameter printerList\ + ximtool Parameter printOptions\ + ximtool Parameter loadOptions\ + ximtool Parameter saveOptions\ + ximtool Parameter filelist\ + ximtool Parameter help + + + ! Main image window resources. + ! ------------------------------- + *allowShellResize: True + *beNiceToColormap: False + *menuLabel.foreground: Gold + *markerMenu.foreground: Black + *markerMenu.background: SteelBlue + *markerMenu*SimpleMenu.foreground: Black + *markerMenu*SimpleMenu.background: SteelBlue + *markerColor.SmeBSB.leftMargin: 64 + *markerColor.SmeBSB.rightMargin: 0 + *markerColor.menuLabel.leftMargin: 5 + *markerColor.menuLabel.rightMargin: 5 + + *display.background: gray + *display.borderWidth: 0 + + *display.debug: False + *display.layout: horizontal { \ + -1 \ + vertical { \ + 3 \ + menubar < +inf -inf * > \ + 3 \ + imagewin < +inf -inf * +inf - inf > \ + 3 \ + colorbar < +inf -inf * > \ + } \ + -1 \ + } + + *menubar.layout: horizontal { \ + 1 < -1 > \ + fileButton 1 < -1 > viewButton 1 < -1 > optionsButton \ + 1 < -1 > \ + imageTitle < +inff -inff * > \ + 1 < -1 > \ + panelButton 1 < -1 > \ + 1 < -1 > \ + xflipButton 1 < -1 > yflipButton \ + 1 < -1 > \ + prevButton 1 < -1 > frameButton 1 < -1 > nextButton \ + 1 < -1 > \ + helpButton \ + 1 < -1 > \ + } + + *menubar*SimpleMenu.foreground: Black + *menubar*SimpleMenu.background: gray65 + *menubar*SimpleMenu.borderColor: Black + *menubar*SimpleMenu.borderWidth: 1 + *SmeBSB.vertSpace: 10 + + *SimpleMenu*font: -adobe-times-bold-r-normal-*-12-*-*-*-*-*-iso8859-1 + *fileButton.font: -adobe-times-bold-i-normal-*-12-*-*-*-*-*-iso8859-1 + *optionsButton.font: -adobe-times-bold-i-normal-*-12-*-*-*-*-*-iso8859-1 + *viewButton.font: -adobe-times-bold-i-normal-*-12-*-*-*-*-*-iso8859-1 + + *menubar.width: 512 + *menubar*background: gray + *menubar*foreground: black + *menubar*borderWidth: 0 + *menubar*Command.label: x + *menubar*Command.internalWidth: 0 + *menubar*Command.borderWidth: 0 + *menubar*Toggle.label: x + *menubar*Toggle.internalWidth: 0 + *menubar*Toggle.borderWidth: 0 + + *fileButton.label: File + *fileButton.menuName: fileMenu + *viewButton.label: View + *viewButton.menuName: viewMenu + *optionsButton.label: Options + *optionsButton.menuName: optionsMenu + *imageTitle*font: *times-bold-r*12* + *imageTitle.width: 40 + *imageTitle.height: 20 + *frameButton.menuName: frameMenu + *frameButton.label: 1 + *frameButton.width: 20 + + *Gterm.cmapName: image + *Gterm.basePixel: 64 + *imagewin.warpCursor: true + *imagewin.raiseWindow: true + *imagewin.deiconifyWindow: true + *imagewin.ginmodeCursor: circle + *imagewin.ginmodeBlinkInterval: 500 + *imagewin.resizable: true + *imagewin.copyOnResize: false + *imagewin.width: 512 + *imagewin.height: 512 + *imagewin.color8: #7c8498 + *imagewin.color9: steelblue + + *imagewin.translations: \ + NoneLeft: call(move_cursor,-1,0) \n\ + NoneDown: call(move_cursor,0,1) \n\ + NoneUp: call(move_cursor,0,-1) \n\ + NoneRight: call(move_cursor,1,0) \n\ + !Shift Left: call(move_cursor,-10,0) \n\ + !Shift Down: call(move_cursor,0,10) \n\ + !Shift Up: call(move_cursor,0,-10) \n\ + !Shift Right: call(move_cursor,10,0) \n\ + !Ctrl h: call(move_cursor,-1,0) \n\ + !Ctrl j: call(move_cursor,0,1) \n\ + !Ctrl k: call(move_cursor,0,-1) \n\ + !Ctrl l: call(move_cursor,1,0) \n\ + !Ctrl Shift h: call(move_cursor,-10,0) \n\ + !Ctrl Shift j: call(move_cursor,0,10) \n\ + !Ctrl Shift k: call(move_cursor,0,-10) \n\ + !Ctrl Shift l: call(move_cursor,10,0) \n\ + !Alt 1: call(cpSetFrame,frame1) \n\ + !Alt 2: call(cpSetFrame,frame2) \n\ + !Alt 3: call(cpSetFrame,frame3) \n\ + !Alt 4: call(cpSetFrame,frame4) \n\ + !Ctrl 1: call(cpZoom,1,1,fixed) \n\ + !Ctrl 2: call(cpZoom,2,2,fixed) \n\ + !Ctrl 3: call(cpZoom,3,3,fixed) \n\ + !Ctrl 4: call(cpZoom,4,4,fixed) \n\ + !Ctrl 5: call(cpZoom,5,5,fixed) \n\ + !Ctrl 6: call(cpZoom,6,6,fixed) \n\ + !Ctrl 7: call(cpZoom,7,7,fixed) \n\ + !Ctrl 8: call(cpZoom,8,8,fixed) \n\ + !Ctrl 9: call(cpZoom,9,9,fixed) \n\ + !Ctrl b: call(prevFrame,$name) \n\ + !Ctrl c: call(cpZoomAction,centerFrame) \n\ + !Ctrl f: call(nextFrame,$name) \n\ + !Ctrl i: call(cpInvert) \n\ + !Ctrl n: call(normalize) \n\ + !Ctrl m: call(toggleMagnifier) \n\ + !Ctrl p: call(togglePanner) \n\ + !Ctrl Alt q: call(Quit) \n\ + !Ctrl r: call(cpRegisterFrames) \n\ + !Ctrl s: call(cpMatchFrames) \n\ + !Ctrl t: call(tileFramesToggle) \n\ + !Ctrl u: call(cpZoom,1,1,fixed) \n\ + !Ctrl x: call(cpFrameAction,flipX) \n\ + !Ctrl y: call(cpFrameAction,flipY) \n\ + !Ctrl Alt =: call(Print) \n\ + Ctrl +: call(cpZoom,2.0,2.0,relative) \n\ + Ctrl -: call(cpZoom,0.5,0.5,relative) \n\ + Ctrl \<: call(cpSetBlinkRate,BRdecrease) \n\ + Ctrl \>: call(cpSetBlinkRate,BRincrease) \n\ + !Alt b: call(toggleBlink) \n\ + !Alt c: call(panel) \n\ + !Ctrl Alt f: call(fitFrame) \n\ + !Alt h: call(Help) \n\ + !Alt i: call(infoPanel) \n\ + !Alt l: call(loadPanel) \n\ + !Alt p: call(printPanel) \n\ + !Alt s: call(savePanel) \n\ + !Alt t: call(tclPanel) \n\ + !Shift: call(setDynamicMagnifier,1) \n\ + !Shift: call(setDynamicMagnifier,0) \n\ + !: call(makeMarker,$name,$x,$y) m_create() \n\ + !Shift : crosshair(on) \n\ + !Shift : crosshair(on) \n\ + !Shift: crosshair(off) \n\ + !: crosshair(off) \n\ + !: call(zoom,$x,$y) \n\ + !: call(windowColormap,$x,$y) \n\ + !: call(windowColormap,$x,$y) \n\ + : enter-window() \n\ + : leave-window() \n\ + : graphics-input() \n\ + : track-cursor() call(wcsUpdate,$x,$y) call(magnifierMapImage,$x,$y) + +! The following translations can be used to enable windowing of the +! individual RGB components of the colormap. It's not very useful but +! included here for those that may wish to use it. +!-------------------------------------------------------------------------- +! !Ctrl : call(windowRGB,1,$x,$y,0) \n\ +! !Ctrl : call(windowRGB,1,$x,$y,0) \n\ +! !Ctrl : call(windowRGB,1,$x,$y,1) \n\ +! !Ctrl : call(windowRGB,2,$x,$y,0) \n\ +! !Ctrl : call(windowRGB,2,$x,$y,0) \n\ +! !Ctrl : call(windowRGB,2,$x,$y,1) \n\ +! !Ctrl : call(windowRGB,3,$x,$y,0) \n\ +! !Ctrl : call(windowRGB,3,$x,$y,0) \n\ +! !Ctrl : call(windowRGB,3,$x,$y,1) \n\ + + *colorbar.maxRasters: 1 + *colorbar.maxMappings: 1 + *colorbar.width: 512 + *colorbar.height: 10 + + ! INFO box resources. + ! ------------------------------ + *info.geometry: 420x240 + *info.title: Information Panel + *info*Command.font: 7x13bold + *infoPanel*background: gray + *infoDone.label: Done + *infoDown.label: Down + *infoDown.sensitive: False + *infoUp.label: Up + *infoUp.sensitive: False + *infoSave.label: Save + *infoSave.sensitive: False + *infoUpdate.label: Update + *infoClear.label: Clear + *infoText*scrollVertical: always + *infoText*scrollHorizontal: whenNeeded + *infoText*displayCaret: False + *infoText*editType: append + *info*ScrollbarBackground: #c0c0c0 + *info*Scrollbar*background: #c0c0c0 + *info*Scrollbar*width: 17 + *info*Scrollbar*height: 17 + *info*Scrollbar*shadowWidth: 2 + *info*Scrollbar*cursorName: top_left_arrow + *info*Scrollbar*pushThumb: true + + + ! Main Control Panel. + ! ------------------------------ + *controlShell.title: XImtool Control + *controlShell.iconName: XimCon + *controlPanel*background: gray + *controlPanel*foreground: black + *controlPanel*TextBox.background: gray63 + *controlPanel*internalWidth: 0 + *controlPanel*borderWidth: 0 + *controlPanel*Command.highlightThickness: 0 + + *TextBox.font: 7x13bold + *TextToggle.font: -adobe-times-medium-r-normal-*-12-*-*-*-*-*-iso8859-1 + *Command.font: -adobe-times-medium-r-normal-*-12-*-*-*-*-*-iso8859-1 + *Toggle.font: -adobe-times-medium-r-normal-*-12-*-*-*-*-*-iso8859-1 + *Label.font: -*-helvetica-medium-r-normal-*-12-*-iso8859-1 + *MultiList.font: -adobe-times-medium-r-normal-*-12-*-*-*-*-*-iso8859-1 + *toggleZoom.font: -*-helvetica-medium-r-normal-*-12-*-iso8859-1 + *centerFrame.font: -*-helvetica-medium-r-normal-*-12-*-iso8859-1 + *zoom*Command.font: 7x13bold + *blinkFrame1.font: 7x13bold + *blinkFrame2.font: 7x13bold + *blinkFrame3.font: 7x13bold + *blinkFrame4.font: 7x13bold + + *controlPanel.debug: False + *controlPanel.layout: vertical { \ + 5 < -5 > \ + horizontal { \ + -1 \ + viewBox < +inf -inf * > \ + -1 \ + } \ + 5 < -5 > \ + horizontal { \ + -1 \ + enhancementBox < +inf -inf * +inf -inf > \ + -1 \ + vertical { \ + -1 \ + blinkBox < * +inf - inf > \ + 1 \ + optionsBox < * +inff -inff > \ + -1 \ + } \ + -1 \ + } \ + controlBox < +inf * > \ + } + + ! VIEW + ! ------------------ + *viewBox.label: View + *viewBox.location: 0 0 410 0 + *viewBox.shrinkToFit: True + *viewBox.outerOffset: 5 + + *view.debug: False + *view.layout: vertical { \ + 5 < +inf -5 > \ + horizontal { \ + -1 \ + frameSelect \ + -1 \ + vertical { \ + 5 < -5 > \ + frameDataBox < +inff -100% * +inff -100% > \ + 5 < -5 > \ + } \ + -1 \ + zoomBox \ + -1 \ + } \ + 1 < +inf > \ + viewButtons < +inf -inf * +inf -inf > \ + 5 < +inf -5 > \ + } + + *frameDataBox.frameType: sunken + *frameDataBox.frameWidth: 2 + *frameData.width: 130 + *frameData.height: 50 + + *frameSelect.location: 0 0 72 0 + *frameSelect.shrinkToFit: True + *frameSelect.outerOffset: 5 + *frameSelect.innerOffset: 5 + *frameSelect.frameWidth: 2 + *frameSelect*offIcon: diamond0s + *frameSelect*onIcon: diamond1s + *frameSelect*highlightColor: blue + *frameSelect.label: Frame: + + *frameBox.debug: False + *frameBox.layout: vertical { \ + frame1 < +inf * > \ + frame2 < +inf * > \ + frame3 < +inf * > \ + frame4 < +inf * > \ + 10 < +inf -10 > \ + horizontal { \ + -1 \ + prevFrame \ + 10 < +inf -5 > \ + nextFrame \ + -1 \ + } \ + -1 \ + } + + *frameBox*location: 0 0 10 20 + *frameBox*alignment: left + *frameBox*frameWidth: 0 + *frameBox*highlightThickness: 0 + *frameBox*frame1.label: \ 1\ \ + *frameBox*frame2.label: \ 2\ \ + *frameBox*frame3.label: \ 3\ \ + *frameBox*frame4.label: \ 4\ \ + *frameBox*Command.width: 24 + *frameBox*prevFrame.label: xx + *frameBox*nextFrame.label: xx + + *zoomBox.label: Zoom: + *zoomBox.location: 0 0 160 127 + *zoomBox.outerOffset: 5 + *zoomBox.shrinkToFit: True + + *zoom.debug: False + *controlPanel*zoom*internalWidth: 4 + *zoom.layout: vertical { \ + space = ((50% of width zoom) - (50% of width z5)) \ + 1 < +inf > \ + horizontal { \ + vertical { \ + toggleZoom < +inf * +inf > \ + 2 \ + } \ + 2 \ + vertical { \ + 2 < +inf > \ + z5 \ + 1 < +inf > \ + z3 \ + 0 < +inf > \ + } \ + 2 \ + vertical { \ + zoomIn < +inf * +inf > \ + 2 \ + } \ + } \ + 1 < +inf > \ + horizontal { \ + 2 < +inf > \ + d8 d4 d2 x1 z2 z4 z8 \ + 2 < +inf > \ + } \ + 1 < +inf > \ + horizontal { \ + vertical { \ + 2 \ + zoomOut < +inf * +inf > \ + } \ + 2 \ + vertical { \ + 0 < +inf > \ + d3 \ + 1 < +inf > \ + d5 \ + 2 < +inf > \ + } \ + 2 \ + vertical { \ + 2 \ + centerFrame < +inf * +inf > \ + } \ + } \ + 1 < +inf > \ + } + + *toggleZoom.label: Toggle\nZoom + *toggleZoom.outerOffset: 0 + *toggleZoom.width: 30 + *toggleZoom.height: 25 + + *zoomIn.label: Zoom\nIn + *zoomIn.outerOffset: 0 + *zoomIn.width: 30 + *zoomIn.height: 25 + + *x1.label: 1 + *z2.label: 2 + *z3.label: 3 + *z4.label: 4 + *z5.label: 5 + *z8.label: 8 + + *controlPanel*zoomIn.foreground: royalBlue3 + *controlPanel*z4.foreground: royalBlue3 + *controlPanel*z5.foreground: royalBlue3 + *controlPanel*z8.foreground: royalBlue3 + *controlPanel*z2.foreground: royalBlue3 + *controlPanel*z3.foreground: royalBlue3 + + *zoomOut.label: Zoom\nOut + *zoomOut.outerOffset: 0 + *zoomOut.width: 30 + *zoomOut.height: 25 + + *centerFrame.label: Center + *centerFrame.outerOffset: 0 + *centerFrame.width: 30 + *centerFrame.height: 25 + + *d2.label: 2 + *d3.label: 3 + *d4.label: 4 + *d5.label: 5 + *d8.label: 8 + + *controlPanel*zoomOut.foreground: mediumVioletRed + *controlPanel*d2.foreground: mediumVioletRed + *controlPanel*d3.foreground: mediumVioletRed + *controlPanel*d4.foreground: mediumVioletRed + *controlPanel*d5.foreground: mediumVioletRed + *controlPanel*d8.foreground: mediumVioletRed + + *viewButtons.location: 0 0 100 80 + *viewButtons.debug: False + *viewButtons.layout: horizontal { \ + 5 < -2 > \ + aspect < +inf * > \ + 5 < -2 > \ + flipX < +inf * > \ + 5 < -2 > \ + flipY < +inf * > \ + 5 < -2 > \ + flipXY < +inf * > \ + 5 < -2 > \ + clearFrame < +inf * > \ + 5 < -2 > \ + fitFrame < +inf * > \ + 5 < -2 > \ + } + + *nextFrame.label: Next Frame + *prevFrame.label: Previous Frame + *fitFrame.label: Fit Frame + *aspect.label: Aspect + *clearFrame.label: Clear Frame + *flipX.label: Flip X + *flipY.label: Flip Y + *flipXY.label: Flip XY + + + ! ENHANCEMENT + ! ------------------ + *enhancementBox.label: Enhancement + *enhancementBox.location: 0 0 110 0 + *enhancementBox.shrinkToFit: True + *enhancementBox.outerOffset: 5 + + *enhance.debug: False + *enhance.layout: vertical { \ + 3 < -3 > \ + horizontal { \ + 2 < -2 > \ + colorlistScroll < * +inff -inff > \ + -1 \ + colorlistFrame < +inf -inf * +inff -inff > \ + 2 < -2 > \ + } \ + -1 \ + horizontal { \ + 2 < -2 > \ + colordataFrame < +inf -inf * +inf -inf > \ + 2 < -2 > \ + } \ + 5 < -5 > \ + horizontal { \ + 2 < -2 > \ + vertical { \ + -1 \ + contrastLabel \ + 3 < -3 > \ + brightnessLabel \ + -1 \ + } \ + 3 < -3 > \ + vertical { \ + -1 \ + contrastSlider < +inf -inf * > \ + 3 < -3 > \ + brightnessSlider < +inf -inf * > \ + -1 \ + } \ + 2 < -2 > \ + } \ + 5 < -5 > \ + horizontal { \ + 3 < -3 > \ + invertButton < +inf -inf * > \ + 5 < -5 > \ + optimizeButton < +inf -inf * > \ + 3 < -3 > \ + } \ + 3 < -3 > \ + } + + *enhance*FrameType: sunken + *enhance*FrameWidth: 2 + *enhance*BorderWidth: 0 + *enhance*Label.ShadowWidth: 0 + *enhance*thumbColor: gray + + *colorlistScroll.location: 0 0 20 10 + *colorlistScroll.vertical: True + *colorlistScroll*minsize: 10 + *colorlist.width: 100 + *colorlist.height: 78 + *colordata.width: 100 + *colordata.height: 45 + *enhance*colordata.frameWidth: 0 + *contrastLabel.label: x + *contrastSlider.location: 0 0 100 20 + *brightnessLabel.label: x + *brightnessSlider.location: 0 0 100 20 + *invertButton.label: Invert + *optimizeButton.label: Optimize + + ! BLINK + ! --------------------- + *blinkBox.label: Blink + *blinkBox.location: 0 0 230 0 + *blinkBox.shrinkToFit: True + *blinkBox.outerOffset: 5 + + + *blink.debug: False + *blink.layout: vertical { \ + space = (width blinkFramesLabel - width blinkRateLabel) \ + 3 < -3 > \ + horizontal { \ + 0 \ + blinkFramesLabel \ + 3 < +inf > \ + blinkFrame1 < -50% * > \ + blinkFrame2 < -50% * > \ + blinkFrame3 < -50% * > \ + blinkFrame4 < -50% * > \ + 4 < +inf > \ + blinkReset \ + 2 \ + } \ + 5 < -5 > \ + horizontal { \ + $space \ + blinkRateLabel \ + 2 \ + BRframe < +inf * > \ + } \ + 5 < +inf -100% > \ + horizontal { \ + 3 \ + registerButton < +inf * > \ + 5 < -5 > \ + matchButton < +inf * > \ + 5 < -5 > \ + blinkButton < +inf * > \ + 2 \ + } \ + 3 < -3 > \ + } + + *BRlayout.layout: horizontal { \ + BRdecrease \ + BRtext < +inf -100% * > \ + BRincrease \ + } + + *blink.Label.borderWidth: 0 + *blink.Label.shadowWidth: 0 + *controlPanel*blink*internalWidth: 4 + *controlPanel*blink*Arrow.foreground: gray + *controlPanel*blink*Arrow.background: gray63 + *blink*Arrow.width: 16 + *blink*Arrow.height: 25 + + *blinkFramesLabel.label: Blink Frames: + *blinkFrame1.label: 1 + *blinkFrame2.label: 2 + *blinkFrame3.label: 3 + *blinkFrame4.label: 4 + *blinkReset.label: Reset + + *blinkRateLabel.label: Blink Rate: + *BRframe.frameType: sunken + *BRframe.frameWidth: 2 + *BRtext.width: 40 + *BRtext.height: 25 + *BRdecrease.direction: left + *BRincrease.direction: right + *registerButton.label: Register + *matchButton.label: Match LUTs + *blinkButton.label: Blink + + ! OPTIONS + ! --------------------- + *optionsBox.label: Options + *optionsBox.location: 0 0 220 0 + *optionsBox.shrinkToFit: False + *optionsBox.outerOffset: 5 + *optionsBox*offIcon: square0s + *optionsBox*onIcon: square1s + *optionsBox*selectionStyle: multi + *optionsBox*highlightColor: yellow + *optionsBox.TextToggle.location: 0 0 102 25 + *optionsBox.TextToggle.frameWidth: 0 + *optionsBox*alignment: left + + *pannerButton.label: Panner + *magnifierButton.label: Magnifier + *coordsBoxButton.label: Coords Box + *autoscaleButton.label: Autoscale + *antialiasButton.label: Antialias + *tileFramesButton.label: Tile Frames + *warningsButton.label: Warnings + + + ! CONTROL + ! ---------------------- + *controlBox.frameType: chiseled + *controlBox.frameWidth: 2 + *controlBox.outerOffset: 5 + *controlBox.innerOffset: 5 + *controlBox.height: 30 + + *control.debug: False + *control.layout: horizontal { \ + 1 \ + initializeButton < +inf * > \ + 5 < -5 > \ + normalizeButton < +inf * > \ + 80 < +inf -100% > \ + doneButton < +inf * > \ + 1 \ + } + + *initializeButton.label: Initialize + *normalizeButton.label: Normalize + *doneButton.label: Done + + ! WARNING dialog. + ! --------------------- + *warning.geometry: +400+300 + *warning*background: gray + *warning*borderWidth: 0 + *warning*TextBox.frameWidth: 0 + *warning*TextButton.frameWidth: 2 + *warning*TextButton.width: 40 + *warning*TextButton.height: 25 + + *warn.layout: vertical { \ + 5 < -5 > \ + horizontal { \ + 5 < -5 > \ + warnFrame < +inf * +inf > \ + 5 < -5 > \ + } \ + 1 < -1 > \ + horizontal { \ + 5 < -5 > \ + warnOk < +inf * > \ + 5 < +inf -5 > \ + warnCancel < +inf * > \ + 5 < +inf -5 > \ + warnHelp < +inf * > \ + 5 < -5 > \ + } \ + 1 < -1 > \ + } + + *WFlayout.layout: horizontal { \ + 5 < -5 > \ + vertical { \ + 5 < +inf -5 > \ + warnIcon \ + 5 < +inf -5 > \ + } \ + 5 < -5 > \ + warnText < +inf -inf * +inf -inf > \ + 5 < -5 > \ + } + + *warnLabel.label: Warning + *warnLabel.width: 300 + *warnLabel.height: 20 + *warnFrame.frameType: sunken + *warnFrame.frameWidth: 2 + *warnIcon.location: 0 0 40 40 + *warnIcon.image: WARNING + *warnText.label: generic warning text + *warnText.width: 270 + *warnText.height: 60 + *warnOk.label: OK + *warnCancel.label: Cancel + *warnHelp.label: Help + *warnHelp.sensitive: False + + + !===================================== + ! Print Setup Panel resources. ! + !===================================== + *print_panel.title: Printer Setup + *print_panel.highlightThickness: 1 + *print_panel*background: gray + *print_panel*TextBox.background: gray63 + *print_panel*TextBox.foreground: black + *print_panel*TextToggle.alignment: left + *print_panel*Arrow.background: gray63 + *print_panel*Arrow.foreground: gray + *print_panel*Arrow.width: 16 + *print_panel*Arrow.height: 25 + *print_panel*TextToggle.frameWidth: 0 + *print_panel*TextToggle.height: 20 + *print_panel*Label.borderWidth: 0 + *print_panel*Label.shadowWidth: 0 + *print_panel*Label.background: gray + *print_panel*TextButton.width: 40 + *print_panel*TextButton.height: 25 + + *printLayout.borderWidth: 0 + *printLayout.layout: vertical { \ + -1 \ + printCmdGroup < +inf * > \ + -1 \ + optGroup < +inf -inf * +inf -inf > \ + -1 \ + cmdGroup < +inf * > \ + -1\ + } + + + ! Print Group resources. + !---------------------------------- + *printCmdGroup.borderWidth: 0 + *printCmdGroup.outerOffset: 5 + *printCmdGroup.label: + *printCmdGroup.location: 0 0 400 85 + *printCmdGroup*offIcon: diamond0s + *printCmdGroup*onIcon: diamond1s + *printCmdGroup*highlightColor: cyan + *printCmdGroup*Frame.frameType: sunken + *printCmdGroup*Frame.frameWidth: 2 + *printCmdGroup*Frame.width: 300 + *printCmdGroup*Label.justify: right + *printCmdGroup*Text*editType: edit + *printCmdGroup*TextToggle.width: 70 + *printCmdGroup*shadowWidth: 0 + *printCmdGroup*borderWidth: 0 + *printCmdLayout.borderWidth: 0 + *printCmdLayout*Label.font: 7x13bold + *printCmdLayout.layout: horizontal { \ + -1 \ + labelLayout \ + 5 < -5 > \ + inputLayout < +inf -inf * +inf > \ + 2 \ + } + + *labelLayout.borderWidth: 0 + *labelLayout.layout: vertical { \ + 5 \ + toLabel \ + 11 \ + printerLabel \ + -3 \ + } + *printerLabel.label: Print Command: + *toLabel.label: Print To: + *toPrinter.label: Printer + *toPrinter.on: True + *toFile.label: File + + + *inputLayout*Text*font: -*-helvetica-medium-r-normal-*-12-*-iso8859-1 + *inputLayout.borderWidth: 0 + *inputLayout.layout: horizontal { \ + 3 \ + vertical { \ + 5 \ + horizontal { \ + 5 < -5 > \ + toPrinter \ + 5 < -5 > \ + toFile \ + 5 < +inf -inf > \ + } \ + 5 \ + printcmdFrame < +inf -inf * > \ + 5 \ + } \ + 3 \ + } + *printcmd*string: lpr + *printcmd*height: 22 + *printcmd*Text*editType: edit + *printcmd*Text*font: -*-helvetica-medium-r-normal-*-12-*-iso8859-1 + + ! Main options groups layout resources. + !--------------------------------------- + *optGroup.frameWidth: 2 + *optGroup.frameType: chiseled + *optGroup.label: + *optGroup.location: 0 0 400 265 + *optGroup.outerOffset: 5 + *optGroup.innerOffset: 0 + *optLayout*borderWidth: 0 + *optLayout.layout: horizontal { \ + -1 \ + vertical { \ + 5 < -5 > \ + epsPageGroup < +inf -inf * > \ + 0 < -0 > \ + optionsGroup < +inf -inf * +inf -inf > \ + -1 \ + } \ + 0 < -0 > \ + vertical { \ + 5 < -5 > \ + printColorGroup < +inf -inf * > \ + 0 < -0 > \ + printerGroup < +inf * +inf > \ + -1 \ + } \ + -1 \ + } + + + ! Postscript Options group resources. + ! ----------------------------------- + *epsPageGroup.label: Postscript Options + *epsPageGroup.outerOffset: 5 + *epsPageGroup.innerOffset: 5 + *epsPageGroup.location: 0 0 250 150 + *epsPageGroup*offIcon: diamond0s + *epsPageGroup*onIcon: diamond1s + *epsPageGroup*highlightColor: cyan + *epsPage*Label.justify: left + *epsPage*Label.font: 7x13bold + *epsPage.layout: vertical { \ + -1 \ + epsOrientLabel \ + 4 < -4 > \ + horizontal { \ + 10 \ + epsPortButton \ + epsLandButton \ + -1 \ + } \ + 4 < -4 > \ + epsSizeLabel \ + -1 \ + horizontal { \ + 10 \ + epsLetterButton \ + epsLegalButton \ + epsA4Button \ + -1 \ + } \ + 5 < -5 > \ + horizontal { \ + -1 \ + epsScaleLabel \ + 4 < -4 > \ + ScaleFrame \ + } \ + -1 \ + } + + + ! Page Layout resources. + ! ------------------------------- + *epsOrientLabel.label: Orientation: + *epsPortButton.label: Portrait + *epsPortButton.width: 90 + *epsLandButton.label: Landscape + *epsLandButton.width: 90 + + *epsSizeLabel.label: Paper Size: + *epsLetterButton.label: Letter + *epsLetterButton.width: 75 + *epsLegalButton.label: Legal + *epsLegalButton.width: 75 + *epsA4Button.label: A4 + *epsA4Button.width: 75 + + ! Image scale box resources. + ! ------------------------------- + *epsScaleLabel.label: Image Scale: + *ScaleFrame.frameType: sunken + *ScaleFrame.frameWidth: 2 + *ScaleFrame*shadowWidth: 0 + *ScaleLayout.location: 0 0 100 50 + *ScaleLayout.label: + *ScaleLayout.layout: horizontal { \ + SCdecrease \ + SCtext < +inf -100% * > \ + SCincrease \ + } + *SCdecrease.direction: left + *SCtext.width: 75 + *SCtext.height: 25 + *SCtext.label: 100 % + *SCincrease.direction: right + + + ! Miscellaneous print options box resources. + ! ------------------------------------ + *optionsGroup.outerOffset: 5 + *optionsGroup.innerOffset: 5 + *optionsGroup*onIcon: square1s + *optionsGroup*offIcon: square0s + *optionsGroup.label: Processing Options + *optionsGroup*TextToggle.width: 100 + *optionsGroup*TextToggle.highlightColor: yellow + *options.frameWidth: 2 + *options.location: 0 0 250 75 + *options.layout: horizontal { \ + 10 \ + vertical { \ + -1 \ + epsscaleButton \ + 2 \ + autorotateButton \ + 2 \ + aspectButton \ + -1 \ + } \ + 3 \ + vertical { \ + -1 \ + annotateButton \ + 2 \ + compressButton \ + 25 \ + -1 \ + } \ + -1 \ + } + *epsscaleButton.label: Auto Scale + *autorotateButton.label: Auto Rotate + *annotateButton.label: Annotate + *aspectButton.label: Max Aspect + *compressButton.label: Compress + *compressButton.sensitive: False + +! *epsscaleButton.on: True +! *autorotateButton.on: False +! *spectButton.on: False +! *annotateButton.on: True +! *compressButton.on: False + + + ! Output color box resources. + ! ------------------------------ + *printColorGroup.location: 0 0 150 90 + *printColorGroup.outerOffset: 5 + *printColorGroup.frameWidth: 2 + *printColorGroup*offIcon: diamond0s + *printColorGroup*onIcon: diamond1s + *printColorGroup*highlightColor: cyan + *printColorGroup.innerOffset: 5 + *printColorGroup.label: Output Color + *printColorGroup*TextToggle.width: 100 + *printColor.frameWidth: 2 + *printColor.location: 0 0 250 75 + *printColor.layout: horizontal { \ + 15 \ + vertical { \ + -1 \ + prGrayButton \ + 2 \ + prPseudoButton \ + 2 \ + prRGBButton \ + -1 \ + } \ + -1 \ + } + *prGrayButton.label: Grayscale + *prPseudoButton.label: PseudoColor + *prRGBButton.label: RGB + + ! Printer Selection. + ! -------------------------- + *printerGroup.label: Printers + *printerGroup.location: 0 0 110 100 + *printerGroup.shrinkToFit: True + *printerGroup.outerOffset: 5 + + *printers.debug: False + *printers.layout: vertical { \ + 3 < -3 > \ + horizontal { \ + 2 < -2 > \ + printlistFrame < +inf -inf * +inff -inff > \ + -1 \ + printlistScroll < * +inff -inff > \ + 2 < -2 > \ + } \ + 3 < -3 > \ + } + + *printers*FrameType: sunken + *printers*FrameWidth: 2 + *printers*BorderWidth: 0 + *printers*Label.ShadowWidth: 0 + *printers*thumbColor: gray + + *printlistScroll.location: 0 0 20 10 + *printlistScroll.vertical: True + *printlistScroll*minsize: 10 + *printlist.width: 100 + *printlist.height: 78 + + + ! Panel command resources. + ! ------------------------------ + *cmdGroup.frameType: chiseled + *cmdGroup.frameWidth: 2 + *cmdGroup.outerOffset: 5 + *cmdGroup.innerOffset: 5 + *cmdGroup.label: + *cmdGroup.location: 0 0 150 54 + *cmdGroup*Command.font: 7x13bold + *cmdLayout.borderWidth: 0 + *cmdLayout.layout: horizontal { \ + -1 \ + okayPrint \ + 1 < +inf -1 > \ + printStatus < +inf -inf * +inf -inf > \ + 1 < +inf -1 > \ + donePrint \ + -1 \ + } + *cmdGroup*TextButton*location: 0 0 80 0 + *okayPrint.label: Print + *donePrint.label: Done + + + !===================================== + ! Save Setup Panel resources. ! + !===================================== + *save_panel.title: Save to Disk... + *save_panel*background: gray + *save_panel*TextBox.background: gray63 + *save_panel*TextToggle.alignment: left + *save_panel*AsciiText*background: gray63 + *save_panel*Arrow.background: gray63 + *save_panel*Arrow.foreground: gray + *save_panel*Arrow.width: 16 + *save_panel*Arrow.height: 25 + *save_panel*TextToggle.frameWidth: 0 + *save_panel*TextToggle.height: 20 + *save_panel*Label.borderWidth: 0 + *save_panel*Label.shadowWidth: 0 + *save_panel*TextButton.width: 80 + + + *save_panel*debug: False + *saveLayout.borderWidth: 0 + *saveLayout.layout: vertical { \ + -1 \ + saveNameGroup < +inf * > \ + -1 \ + saveOptGroup < +inf -inf * +inf -inf > \ + -1 \ + saveCmdGroup < +inf * > \ + -1\ + } + + ! Save Name Group resources. + !---------------------------------- + *saveNameGroup.borderWidth: 0 + *saveNameGroup.outerOffset: 5 + *saveNameGroup.label: + *saveNameGroup.location: 0 0 400 60 + *saveNameGroup*offIcon: diamond0s + *saveNameGroup*onIcon: diamond1s + *saveNameGroup*highlightColor: cyan + *saveNameGroup*Frame.frameType: sunken + *saveNameGroup*Frame.frameWidth: 2 + *saveNameGroup*Label.justify: right + *saveNameGroup*Text*editType: edit + *saveNameGroup*Text*font: -*-helvetica-medium-r-normal-*-12-*-iso8859-1 + *saveNameGroup*TextBox*font:-*-helvetica-medium-r-normal-*-12-*-iso8859-1 + *saveNameGroup*shadowWidth: 0 + *saveNameGroup*borderWidth: 0 + *saveNameLayout.borderWidth: 0 + *saveNameLayout*Label.font: 7x13bold + *saveNameLayout.layout: vertical { \ + 5 \ + horizontal { \ + 5 \ + saveLabel \ + 5 \ + fnameFrame < +inf -inf * > \ + 5 \ + } \ + 5 \ + } + *saveLabel.label: File Name: + *saveFile.height: 22 +! *save_panel*saveFile*background: gray63 + + ! Main options groups layout resources. + !--------------------------------------- + *saveOptGroup.frameWidth: 2 + *saveOptGroup.frameType: chiseled + *saveOptGroup.label: + *saveOptGroup.location: 0 0 400 145 + *saveOptGroup.outerOffset: 5 + *saveOptGroup.innerOffset: 0 + *saveOptLayout*borderWidth: 0 + *saveOptLayout.layout: horizontal { \ + -1 \ + vertical { \ + 5 < -5 > \ + fmtGroup < +inf * +inf > \ + -1 \ + } \ + -1 \ + vertical { \ + 10 < -10 > \ + saveDataBox < +inff -100% * +inff -100% > \ + 5 < -5 > \ + } \ + -1 \ + vertical { \ + 5 < -5 > \ + saveColorGroup < +inf * +inf > \ + -1 \ + } \ + -1 \ + } + + ! Output color box resources. + ! ------------------------------ + *saveColorGroup.location: 0 0 125 120 + *saveColorGroup.outerOffset: 5 + *saveColorGroup.frameWidth: 2 + *saveColorGroup*offIcon: diamond0s + *saveColorGroup*onIcon: diamond1s + *saveColorGroup*highlightColor: cyan + *saveColorGroup.innerOffset: 5 + *saveColorGroup.label: Output Color + *saveColorGroup*TextToggle.width: 100 + *saveColor.frameWidth: 2 + *saveColor.layout: horizontal { \ + 3 \ + vertical { \ + 5 \ + svGrayButton \ + 2 \ + svPseudoButton \ + 2 \ + svRGBButton \ + -1 \ + } \ + -1 \ + } + *svGrayButton.label: Grayscale + *svPseudoButton.label: PseudoColor + *svPseudoButton.on: true + *svRGBButton.label: RGB + + *saveDataBox*TextBox.background: gray63 + *saveDataBox.frameType: sunken + *saveDataBox.frameWidth: 2 + + + ! Output format box resources. + ! ----------------------------------- + *fmtGroup.location: 0 0 140 120 + *fmtGroup.outerOffset: 5 + *fmtGroup.frameWidth: 2 + *fmtGroup*offIcon: diamond0s + *fmtGroup*onIcon: diamond1s + *fmtGroup*TextToggle.width: 55 + *fmtGroup*highlightColor: cyan + *fmtGroup.label: File Format + *formats.layout: horizontal { \ + 3 \ + vertical { \ + 7 \ + fitsButton \ + 2 \ + gifButton \ + 2 \ + x11Button \ + 2 \ + rawButton \ + -1 \ + } \ + 2 < -2 > \ + vertical { \ + 7 \ + rasButton \ + 2 \ + tiffButton \ + 2 \ + jpegButton \ + 2 \ + pnmButton \ + -1 \ + } \ + -1 \ + } + *rasButton.label: RAS + *gifButton.label: GIF + *jpegButton.label: JPEG + *tiffButton.label: TIFF + *fitsButton.label: FITS + *x11Button.label: X11 + *pnmButton.label: PNM + *rawButton.label: Raw + + ! Change the sensitivity once these formats are implemented. ! + !------------------------------------------------------------- + *jpegButton.sensitive: false + *x11Button.sensitive: false + *pnmButton.sensitive: false + *rawButton.sensitive: false + + ! Panel command resources. + ! ------------------------------ + *saveCmdLayout.borderWidth: 0 + *saveCmdGroup.frameType: chiseled + *saveCmdGroup.frameWidth: 2 + *saveCmdGroup.outerOffset: 5 + *saveCmdGroup.innerOffset: 5 + *saveCmdGroup.label: + *saveCmdGroup.location: 0 0 400 54 +! *saveCmdLayout*Command.font: 7x13bold + *saveCmdLayout.layout: horizontal { \ + -1 \ + okaySave \ + 1 < +inf -1 > \ + saveStatus \ + 1 < +inf -1 > \ + doneSave \ + -1 \ + } + *okaySave.label: Save + *doneSave.label: Done + + ! File Load Control Panel. + !------------------------------- + *load_panel.geometry: 400x320 + *load_panel.title: File Load Panel + *filesLayout*borderWidth: 0 + *filesLayout*highlightThickness: 0 + *filesLayout*background: gray + *filesLayout*Group.outerOffset: 7 + *filesLayout*Group.shrinkToFit: True + *filesLayout*Group.frameType: chiseled + *filesLayout*Frame*frameType: sunken + *filesLayout*Frame*frameWidth: 2 + *filesLayout*Text*background: gray63 + *filesLayout*Text*font: -*-helvetica-medium-r-normal-*-12-*-iso8859-1 + *filesLayout*TextBox*font: -*-helvetica-medium-r-normal-*-12-*-iso8859-1 + *filesLayout*TextToggle.frameWidth: 0 + *filesLayout*TextToggle.height: 28 + *filesLayout*TextToggle.width: 80 + *filesLayout*TextToggle.alignment: left + *filesLayout*Scrollbar2*background: gray63 + *filesLayout*scrollbarForeground: gray + *filesLayout*Scrollbar2*location: 0 0 20 10 + *filesLayout*Scrollbar2*vertical: True + *filesLayout*Scrollbar2*minsize: 20 + *filesLayout*MultiList*background: gray63 + *filesLayout*MultiList*foreground: black + *filesLayout*MultiList*shadeSurplus: False + *filesLayout*MultiList*width: 120 + *filesLayout*MultiList.font: 7x13bold + *filesLayout*Label.font: 7x13bold + *filesLayout*Label.borderWidth: 0 + *filesLayout*Label.shadowWidth: 0 + *filesLayout.layout: vertical { \ + 5 < +0 -5 > \ + horizontal { \ + 0 < +0 -0 > \ + imagesGroup < +inf -inf * +inf -inf > \ + 0 < +0 -0 > \ + } \ + 0 < +0 -0 > \ + horizontal { \ + 0 < +0 -0 > \ + fbuttonsGroup < +inf -inf * > \ + 0 < +0 -0 > \ + } \ + 0 < +0 -0 > \ + } + + *imagesGroup.label: Images + *imagesGroup.frameWidth: 2 +! *imagesGroup.outerOffset: 5 + *imagesGroup*offIcon: square0s + *imagesGroup*onIcon: square1s + *imagesGroup*highlightColor: yellow + *imagesLayout*Label.shadowWidth: 0 + *imagesLayout*Label.justify: left + *imagesLayout*Command.width: 90 + *imagesLayout*TextButton.width: 90 + *imagesLayout*TextButton.height: 23 + *imagesLayout*TextButton.font: *times*medium*r*normal*-12-* + *imagesLayout.layout: vertical { \ + 7 < +0 -7 > \ + horizontal { \ + 5 \ + rootButton < +inf -inf * > \ + 2 \ + homeButton < +inf -inf * > \ + 2 \ + upButton < +inf -inf * > \ + 2 \ + rescanButton < +inf -inf * > \ + 5 \ + } \ + 7 \ + horizontal { \ + 5 < +0 -5 > \ + vertical { \ + 5 \ + imtemplateLabel < * > \ + 5 \ + imtemplateFrame < +inf -inf * > \ + 10 < +inf -inf > \ + grayToggle < * > \ + 5 \ + browseToggle < * > \ + 5 \ + } \ + 5 \ + horizontal { \ + 5 < +0 -5 > \ + imlistFrame < +inf -inf * +inf -inf > \ + 3 < +0 -3 > \ + imlistScrollbar < * +inf - inf > \ + 0 < +0 -0 > \ + } \ + 5 < +0 -5 > \ + } \ + 5 \ + horizontal { \ + 5 \ + dirLabel < +inf -inf * > \ + 5 \ + } \ + 10 \ + horizontal { \ + 5 < +0 -5 > \ + fnameLabel < * > \ + 5 < +0 -5 > \ + filnamFrame < +inf -inf * > \ + 5 < +0 -5 > \ + frameLabel < * > \ + 5 < +0 -5 > \ + frameFrame < -50% * > \ + 5 < +0 -5 > \ + } \ + 5 < +0 -5 > \ + } + *imtemplateLabel.label: File Pattern: + *imtemplateText*editType: edit + *imtemplateText.height: 20 + *imageList.width: 100 + *upButton.label: Up + *rootButton.label: Root + *homeButton.label: Home + *rescanButton.label: Rescan + *browseToggle.label: Browse + *browseToggle.on: True + *grayToggle.label: Greyscale + *dirLabel.label: Directory: + *dirLabel.alignment: left + *fnameLabel.label: Load File: + *fnameText*editType: edit + *fnameText.height: 20 + *frameLabel.label: Frame: + *frameFrame.label: 1 + + *fbuttonsGroup.label: + *fbuttonsGroup*frameWidth: 2 + *fbuttonsGroup*outerOffset: 5 + *fbuttonsGroup*innerOffset: 5 + *fbuttonsGroup.frameType: sunken + *fbuttonsGroup*Command.font: 7x13bold + *fbuttonsLayout*Command.height: 50 + *fbuttonsLayout*Command.width: 70 + *fbuttonsLayout.layout: horizontal { \ + -1 \ + filesLoadButton \ + 1 < +inf -1 > \ + filesStatus \ + 1 < +inf -1 > \ + filesCloseButton \ + -1 \ + } + + *filesLoadButton.label: Load + *filesStatus.label: + *filesCloseButton.label: Done + + ! Help panel resources. + !---------------------- + *help_panel.title: XImtool Help Summary + *help_panel.width: 450 + *help_panel.height: 525 + *helpLayout*borderWidth: 0 + *helpLayout.background: gray + *helpLayout*Frame*frameType: sunken + *helpLayout*Frame*frameWidth: 2 + *helpLayout*Frame.background: gray + *helpLayout*Layout.background: gray + *helpLayout*ScrollbarBackground: #c0c0c0 + *helpLayout*Scrollbar*background: #c0c0c0 + *helpLayout*Scrollbar*width: 17 + *helpLayout*Scrollbar*height: 17 + *helpLayout*Scrollbar*shadowWidth: 2 + *helpLayout*Scrollbar*cursorName: top_left_arrow + *helpLayout*Scrollbar*pushThumb: true + + + *helpLayout.layout: vertical { \ + -1 \ + horizontal { \ + 0 < +0 -0 > \ + helpMenuLayout < +inf -inf * > \ + 0 < +0 -0 > \ + } \ + 0 < +0 -0 > \ + horizontal { \ + 0 < +0 -0 > \ + helpTextFrame < +inf -inf * +inf -inf > \ + 0 \ + } \ + 0 < +0 -0 > \ + horizontal { \ + 0 < +0 -0 > \ + helpInfoLayout < +inf -inf * > \ + 0 < +0 -0 > \ + } \ + -1 \ + } + *helptext*background: white + *helptext*foreground: black + + *helpMenuLayout*background: gray + *helpMenuLayout*Command.highlightThickness: 2 + *helpMenuLayout*Command.internalHeight: 2 + *helpMenuLayout*Command.font: -*-helvetica-bold-r-normal-*-12-*-*-* + *helpMenuLayout.layout: vertical { \ + 5 \ + horizontal { \ + 5 < +0 -5 > \ + helpBack \ + 2 < +0 -2 > \ + helpForward \ + 2 < +0 -2 > \ + helpHome \ + 20 < +inf -20 > \ + helpClose \ + 5 < +0 -5 > \ + } \ + 5 \ + } + *helpBack.label: Back + *helpBack.sensitive: False + *helpForward.label: Forward + *helpForward.sensitive: False + *helpHome.label: Home + *helpClose.label: Done + + *helpInfoLayout*background: gray + *helpInfoLayout*Label.justify: center + *helpInfoLayout*Label.internalHeight: 0 + *helpInfoLayout.layout: horizontal { \ + 5 \ + vertical { \ + 5 \ + helpIRAFLogo \ + 5 \ + } \ + 1 \ + vertical { \ + 5 \ + horizontal { \ + 0 < +inf -inf > \ + helpInfo1 \ + 0 < +inf -inf > \ + } \ + 0 < +inf -0 > \ + horizontal { \ + 0 < +inf -inf > \ + helpInfo2 \ + 0 < +inf -inf > \ + } \ + 0 < +inf -0 > \ + horizontal { \ + 0 < +inf -inf > \ + helpInfo3 \ + 0 < +inf -inf > \ + } \ + 5 \ + } \ + 1 \ + vertical { \ + 5 \ + helpNOAOLogo \ + 5 \ + } \ + 5 \ + } + *helpInfo1.label: XImtool V1.2 -- Released: 4/30/2000 + *helpInfo2.label: iraf@noao.edu (520) 318-8160 + *helpInfo3.label: NOAO is operated by AURA under cooperative agreement with the NSF + *helpInfoLayout*helpInfo1.font: -*-helvetica-medium-r-normal-*-12-*-*-* + *helpInfoLayout*helpInfo2.font: -*-helvetica-medium-r-normal-*-12-*-*-* + *helpInfoLayout*helpInfo3.font: -*-helvetica-medium-r-normal-*-10-*-*-* + *helpInfoLayout.helpIRAFLogo.internalWidth: 0 + *helpInfoLayout.helpIRAFLogo.internalheight: 0 + *helpInfoLayout.helpIRAFLogo.foreground: steelblue + *helpInfoLayout.helpIRAFLogo.background: white + *helpInfoLayout.helpNOAOLogo.internalWidth: 0 + *helpInfoLayout.helpNOAOLogo.internalheight: 0 + *helpInfoLayout.helpNOAOLogo.foreground: steelblue + *helpInfoLayout.helpNOAOLogo.background: white + + *helpText.width: 450 + *helpText.height: 500 + *helpText.anchorUnderlines: 1 + *helpText.visitedAnchorUnderlines: 1 + *helpText.verticalScrollOnRight: true + *helpText.plainFont: 6x13 + + + ! Define a debug Tcl shell. + !-------------------------------- + *tclShell.title: Interactive Tcl Shell + *tclForm.background: gray + *tclForm*Label.background: gray + *tclForm*Label.borderWidth: 0 + *tclForm*Label.resize: False + *tclForm*Command.resize: False + *tclForm*Command.background: grey75 + *tclForm*Command.font: 7x13bold + *tclLabel.label: Server Command Entry + *tclClear.label: Clear + *tclExecute.label: Execute + *tclEntry*Text.font: 7x13 + *tclEntry*width: 500 + *tclEntry*borderWidth: 1 + *tclEntry*height: 150 + *tclEntry*editType: edit + *tclEntry*scrollHorizontal: whenNeeded + *tclEntry*scrollVertical: never + *tclEntry*displayCaret: True + *tclcloseButton.label: Done + + + ! GUI resources. + ! ------------------------------ + *autoscale: True + *zoomfactors: 1 2 4 8 + *displayCoords: True + *displayPanner: True + *displayMagnifier: False + *blinkRate: 1.0 + *pannerArea: 150*150 + *pannerGeom: -5+5 + *magnifierArea: 100*100 + *magnifierGeom: +5+5 + *wcsboxGeom: -5-5 + *maxContrast: 5.0 + *warnings: True +} + +# Start up the GUI. +createObjects +send colorbar setGterm ; send colorbar activate +send imagewin setGterm ; send imagewin activate +activate + +# Utility procedure to test True/False strings in resources. +proc true {v} {expr {$v == "true" || $v == "True" || $v == "TRUE"}} + +# Utility functions. +proc min {a b} { expr {($a < $b) ? $a : $b} } +proc max {a b} { expr {($a > $b) ? $a : $b} } + +# Global variables. +set version "NOAO/IRAF XImtool Version 1.2" + +set winWidth [send imagewin get width] ;# display window width +set winHeight [send imagewin get height] ;# display window height +set marker none ;# selected marker +set markno 0 ;# used to name new markers +set blinkFrames "1 2" ;# list of blink/tile frames + +set loadP_up 0 +set saveP_up 0 +set printP_up 0 +set infoP_up 0 +set panel_up 0 +set helpP_up 0 + + +proc winResize {w width height} \ + { global winWidth winHeight; set winWidth $width; set winHeight $height} +send imagewin addCallback winResize resize + +# Additional global variables, taking default values from resources. +getResources { + { zoomfactors } + { displayCoords } + { displayPanner } + { displayMagnifier } + { blinkRate } + { pannerArea } + { pannerGeom } + { magnifierArea } + { magnifierGeom } + { wcsboxGeom } + { maxContrast } + { warnings } +} + +set warnings [true $warnings] +set defaultBlinkRate $blinkRate + +# Client state variables (UI parameter objects). Certain of these parameters +# we mirror in Tcl variables here, updating the values with a callback when +# the parameter value changes. Others require special callbacks. + +set frame 1 ;# current display frame +set nframes 0 ;# number of frame buffers +set frames {1 2 3 4} ;# list of image frames +set frameWidth 0 ;# frame buffer width, pixels +set frameHeight 0 ;# frame buffer height, pixels +set frameDepth 8 ;# frame buffer pixel size, bits +set cursorMode 0 ;# true when cursor read pending + +foreach i $frames { + set frameZoomX($i) 0 ;# X zoom factor + set frameZoomY($i) 0 ;# Y zoom factor + set frameCenterX($i) 0 ;# X center of field + set frameCenterY($i) 0 ;# Y center of field + set frameScaleX($i) 0 ;# X scale factor + set frameScaleY($i) 0 ;# Y scale factor + set enhancement($i) none ;# colortable enhancement +} + +# Called when the number of frames changes. +proc setNFrames {param old new} { + global frameMenuDescription nframes frames + set nframes $new + if {$old != $new} { + foreach i {prevButton nextButton} { + send $i set sensitive [expr "$nframes > 1"] + } + editMenu frameMenu frameButton $frameMenuDescription + } + foreach i $frames { + if {$i <= $nframes} { + send frameBox manage frame$i + } else { + send frameBox unmanage frame$i + } + } +}; send nframes addCallback setNFrames + +set frameMenuDescription { + { 1 f.exec "send client setFrame 1" sensitive {[expr "$nframes >= 1"]} } + { 2 f.exec "send client setFrame 2" sensitive {[expr "$nframes >= 2"]} } + { 3 f.exec "send client setFrame 3" sensitive {[expr "$nframes >= 3"]} } + { 4 f.exec "send client setFrame 4" sensitive {[expr "$nframes >= 4"]} } +}; createMenu frameMenu frameButton $frameMenuDescription + +# Called when the frame being displayed changes. +proc frameChanged {param old new} { + global frame + set frame $new + send frameButton set label $frame +}; send frame addCallback frameChanged + +# Called when the frame buffer configuration changes. +proc setFrameSize {param old new} { + global frameWidth frameHeight frameDepth + set frameWidth [lindex $new 0] + set frameHeight [lindex $new 1] + set frameDepth [lindex $new 2] +}; send frameSize addCallback setFrameSize + +# Called when the current frame is zoomed or panned. +proc setFrameView {param old new} { + global frameZoomX frameZoomY frameCenterX frameCenterY + global frameScaleX frameScaleY frame + set frameZoomX($frame) [lindex $new 0] + set frameZoomY($frame) [lindex $new 1] + set frameCenterX($frame) [lindex $new 2] + set frameCenterY($frame) [lindex $new 3] + set frameScaleX($frame) [lindex $new 4] + set frameScaleY($frame) [lindex $new 5] +}; send frameView addCallback setFrameView + +# Called when the color enhancement for a frame changes. +proc setEnhancement {param old new} { + global enhancement + set enhancement([lindex $new 0]) [lrange $new 1 end] +}; send enhancement addCallback setEnhancement + +# Called when the frame title changes (e.g. frame change or new frame loaded). +proc setTitle {param old new} { + send imageTitle set label [string trimright $new] +}; send frameTitle addCallback setTitle + +# Called when the image is flipped in an axis. +proc setFlip {param old new} { + send ${param}Button set state [true $new] +}; foreach i {xflip yflip} { send $i addCallback setFlip } + + +# Various general callbacks. +proc Quit args { send client Quit } +proc nextFrame args { send client nextFrame } +proc prevFrame args { send client prevFrame } +proc setColormap { mapno } { send client setColormap $mapno } +proc xflip args { send client flip x } +proc yflip args { send client flip y } +proc xyflip args { send client flip x y } + +# Initialize bitmaps. +createBitmap xflip 16 16 { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x08, 0x18, 0x18, + 0x1c, 0x38, 0xfe, 0x7f, 0xfe, 0x7f, 0x1c, 0x38, 0x18, 0x18, 0x10, 0x08, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; + +createBitmap yflip 16 16 { + 0x00, 0x00, 0x80, 0x01, 0xc0, 0x03, 0xe0, 0x07, 0xf0, 0x0f, 0x80, 0x01, + 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0xf0, 0x0f, + 0xe0, 0x07, 0xc0, 0x03, 0x80, 0x01, 0x00, 0x00}; + +createBitmap qmark 16 16 { + 0x00, 0x00, 0x00, 0x00, 0xf0, 0x07, 0xf8, 0x0f, 0x18, 0x0c, 0x18, 0x0c, + 0x18, 0x0e, 0x00, 0x07, 0x80, 0x03, 0x80, 0x01, 0x80, 0x01, 0x00, 0x00, + 0x80, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x00}; + +createBitmap larrow 16 16 { + 0x00, 0x00, 0x00, 0x03, 0x80, 0x03, 0xc0, 0x03, 0xe0, 0x1e, 0x70, 0x1e, + 0x38, 0x18, 0x1c, 0x18, 0x1c, 0x18, 0x38, 0x18, 0x70, 0x1e, 0xe0, 0x1e, + 0xc0, 0x03, 0x80, 0x03, 0x00, 0x03, 0x00, 0x00}; + +createBitmap rarrow 16 16 { + 0x00, 0x00, 0xc0, 0x00, 0xc0, 0x01, 0xc0, 0x03, 0x78, 0x07, 0x78, 0x0e, + 0x18, 0x1c, 0x18, 0x38, 0x18, 0x38, 0x18, 0x1c, 0x78, 0x0e, 0x78, 0x07, + 0xc0, 0x03, 0xc0, 0x01, 0xc0, 0x00, 0x00, 0x00}; + +createBitmap panel 16 16 { + 0x00, 0x00, 0xf8, 0x1f, 0xf8, 0x1f, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, + 0x98, 0x19, 0x98, 0x19, 0x98, 0x19, 0x98, 0x19, 0x98, 0x19, 0x18, 0x18, + 0x18, 0x18, 0x18, 0x18, 0xf8, 0x1f, 0xf8, 0x1f}; + +createBitmap brightness 15 15 { + 0x00, 0x00, 0x80, 0x00, 0x84, 0x10, 0xe8, 0x0b, 0x10, 0x04, 0x08, 0x08, + 0x08, 0x08, 0x0e, 0x38, 0x08, 0x08, 0x08, 0x08, 0x10, 0x04, 0xe8, 0x0b, + 0x84, 0x10, 0x80, 0x00, 0x00, 0x00}; + +createBitmap contrast 15 15 { + 0x00, 0x00, 0x00, 0x00, 0xc0, 0x01, 0x30, 0x07, 0x08, 0x0f, 0x08, 0x0f, + 0x04, 0x1f, 0x04, 0x1f, 0x04, 0x1f, 0x08, 0x0f, 0x08, 0x0f, 0x30, 0x07, + 0xc0, 0x01, 0x00, 0x00, 0x00, 0x00}; + +createBitmap solid 64 24 { + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 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, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; + +send panelButton "set bitmap panel; addCallback panel" +send xflipButton "set bitmap xflip; addCallback xflip" +send yflipButton "set bitmap yflip; addCallback yflip" +send helpButton "set bitmap qmark; addCallback Help" +send prevButton "set bitmap larrow; addCallback prevFrame" +send nextButton "set bitmap rarrow; addCallback nextFrame" + + +# WINDOW the current frame. +proc windowColormap {x y} \ +{ + global winWidth winHeight maxContrast + + send client windowColormap \ + [expr "double($x) / $winWidth"] \ + [expr "(double($y) - $winHeight / 2.0) / $winHeight * \ + $maxContrast * 2.0"] +} + +# WINDOW the current frame, but only one color at a time. +proc windowRGB {color x y save_flag} \ +{ + global winWidth winHeight maxContrast + + send client windowRGB $color \ + [expr "double($x) / $winWidth"] \ + [expr "(double($y) - $winHeight / 2.0) / $winHeight * \ + $maxContrast * 2.0"] $save_flag +} + + +# ZOOM and PAN. +set xcen 0 +set ycen 0 +foreach i $frames {set zoomindex($i) 0} +set nzoomfactors 0 +foreach i $zoomfactors { + set zoomfactor($nzoomfactors) $i + incr nzoomfactors +} + +# Zoom or pan image at given center. +proc zoom {x y} \ +{ + global xcen ycen frame + global zoomindex zoomfactor + global nzoomfactors + + set rx $x; set ry $y + set raster 0 + + # Convert raw screen coordinates to frame buffer raster coordinates. + send imagewin unmapPixel $x $y raster rx ry + + # Select a pixel. + set rx [expr "int ($rx)"] + set ry [expr "int ($ry)"] + + # If the pointer did not move (much) zoom the image, otherwise + # pan it. + + send imagewin setCursorType busy + if {sqrt(pow($x-$xcen, 2) + pow($y-$ycen, 2)) < 4} { + set zoomindex($frame) [expr [incr zoomindex($frame)] % $nzoomfactors] + set mag $zoomfactor($zoomindex($frame)) + send client zoom $mag $mag $rx $ry + } else { + send client pan $rx $ry + set xcen $x + set ycen $y + } + + # Move the pointer so that it tracks the object feature the user + # selected. + + send imagewin setCursorPos $rx $ry $raster + send imagewin getCursorPos xcen ycen + send imagewin setCursorType idle +} + +# Zoom using a marker to indicate the region to be displayed. +proc zoomMarker {marker aspect} \ +{ + global xcen ycen frame + global winWidth winHeight + global zoomindex nzoomfactors + + # getRegion returns: "rectangle raster x y width height rotangle". + set region [send $marker getRegion unmap] + + set raster [lindex $region 1] + set xcen [expr "int([lindex $region 2]) + 0.5"] + set ycen [expr "int([lindex $region 3]) + 0.5"] + set snx [expr "[lindex $region 4] * 2"] + set sny [expr "[lindex $region 5] * 2"] + + # Compute the magnification ratio. + set xmag [expr "$winWidth / $snx"] + set ymag [expr "$winHeight / $sny"] + if {$aspect == "equal"} { + set mag [expr "($xmag < $ymag) ? $xmag : $ymag"] + set xmag $mag; set ymag $mag + } + + # Zoom the image. + send client zoomAbs $xmag $ymag $xcen $ycen + + # The following causes a button2 to redisplay the full image. + send imagewin setCursorPos $xcen $ycen $raster + send imagewin getCursorPos xcen ycen + set zoomindex($frame) [expr "$nzoomfactors - 1"] +} + +proc resetView {param old new} { + global zoomindex xcen ycen frames + global frameWidth frameHeight + + if {$new == "done"} { + foreach i $frames { + send client setFrame $i + set xcen [expr $frameWidth / 2] + set ycen [expr $frameHeight / 2] + send client zoom 1 1 $xcen $ycen + set zoomindex($i) 0 + send client setColormap Grayscale + normalize + } + send client setFrame 1 + } +}; #send initialize addCallback resetView + + +# CURSOR READ stuff. +proc setCursorMode {param old new} \ +{ + global cursorMode + + if {$new == "on"} { + send imagewin "activate; setCursorType ginMode" + set cursorMode 1 + } elseif {$new == "off"} { + send imagewin "setCursorType idle; deactivate" + set cursorMode 0 + } +} + +proc keyInput {widget event sx sy data} \ +{ + global cursorMode frame + + if {!$cursorMode || $event != "keyPress"} \ + return + if {[lindex $data 0] == "??"} \ + return + + # Convert raw screen coordinates to raster pixel coordinates. + send imagewin unmapPixel $sx $sy raster rx ry + + # Return the cursor value and exit cursor mode. + send client retCursorVal $rx $ry $frame 1 [lindex $data 0] +} + +proc resetCursorMode args { + global cursorMode frame + if {$cursorMode} { + send imagewin getCursorPos x y + send client retCursorVal $x $y $frame 1 ^D + } +}; send initialize addCallback resetCursorMode + +send cursorMode addCallback setCursorMode +send imagewin addCallback keyInput input + + +# MARKER stuff. The active marker is determined by the global variable +# "marker", which is the marker the pointer is in, or which the pointer +# was most recently in. + +# Translations when pointer is inside marker. +set markerTranslations { \ + !Shift : m_rotateResize() + : m_moveResize() + !Shift : m_raise() m_markpos() + : m_raise() m_markposAdd() + : m_redraw() m_destroyNull() + : m_lower() + : popup(markerMenu) + : popdown(markerMenu) + !Ctrl b: call(prevFrame,$name) + !Ctrl f: call(nextFrame,$name) + !Ctrl h: call(move_cursor,-1,0) + !Ctrl j: call(move_cursor,0,1) + !Ctrl k: call(move_cursor,0,-1) + !Ctrl l: call(move_cursor,1,0) + !Ctrl n: call(normalize) + !Ctrl m: call(toggleMagnifier) + !Ctrl p: call(togglePanner) + !Ctrl c: call(cpZoomAction,centerFrame) + !Ctrl i: call(cpInvert) + !Ctrl s: call(cpMatchFrames) + !Ctrl r: call(cpRegisterFrames) + !Alt 1: call(cpSetFrame,frame1) + !Alt 2: call(cpSetFrame,frame2) + !Alt 3: call(cpSetFrame,frame3) + !Alt 4: call(cpSetFrame,frame4) + !Ctrl 1: call(cpZoom,1,1,fixed) + !Ctrl 2: call(cpZoom,2,2,fixed) + !Ctrl 3: call(cpZoom,3,3,fixed) + !Ctrl 4: call(cpZoom,4,4,fixed) + !Ctrl 5: call(cpZoom,5,5,fixed) + !Ctrl 6: call(cpZoom,6,6,fixed) + !Ctrl 7: call(cpZoom,7,7,fixed) + !Ctrl 8: call(cpZoom,8,8,fixed) + !Ctrl 9: call(cpZoom,9,9,fixed) + BackSpace: m_deleteDestroy() + Delete: m_deleteDestroy() + : m_input() + : track-cursor() +} + +# Popup menu in effect when inside marker. +createMenu markerMenu imagewin { + { Marker f.title } + { f.dblline } + { Zoom f.exec { + zoomMarker $marker equal + send $marker destroy + } } + { Fill f.exec { + zoomMarker $marker fill + send $marker destroy + } } + { Print f.exec { + send $marker getRect interior x0 y0 nx ny + setPrintCorners $x0 [expr $y0 + $ny -1] \ + [expr $x0 + $nx -1] $y0 + send client print $x0 $y0 $nx $ny + } } + { Save f.exec { + send imagewin setCursorType busy + send $marker getRect interior x0 y0 nx ny + send client save $x0 $y0 $nx $ny + send imagewin setCursorType idle + } } + { Info f.exec { + send infoText append \ + [format "%s\n" [send $marker getRegion unmap]] + } } + { Unrotate f.exec { + send $marker setAttribute rotangle 0 + } } + { f.line } + { Color f.menu markerColor } + { Type f.menu markerType } + { f.line } + { Destroy f.exec { + send $marker destroy + } } +} + +createMenu markerType markerMenu { + { Type f.title } + { f.dblline } + { Rectangle f.exec "m_setType $marker rectangle" } + { Box f.exec "m_setType $marker box" } + { Circle f.exec "m_setType $marker circle" } + { Ellipse f.exec "m_setType $marker ellipse" } + { Polygon f.exec "m_setType $marker polygon" } +} + +createMenu markerColor markerMenu { + { Color f.title } + { f.dblline } + { "" f.exec "m_setColor $marker black" + bitmap solid foreground black } + { "" f.exec "m_setColor $marker white" + bitmap solid foreground white } + { "" f.exec "m_setColor $marker red" + bitmap solid foreground red } + { "" f.exec "m_setColor $marker green" + bitmap solid foreground green } + { "" f.exec "m_setColor $marker blue" + bitmap solid foreground blue } + { "" f.exec "m_setColor $marker magenta" + bitmap solid foreground magenta } + { "" f.exec "m_setColor $marker cyan" + bitmap solid foreground cyan } + { "" f.exec "m_setColor $marker yellow" + bitmap solid foreground yellow } +} + +proc m_setType {marker type} { + send $marker "markpos; set type $type; redraw" +} +proc m_setColor {marker color} { + send $marker "markpos; + set lineColor $color; set highlightColor $color; redraw" +} + +# Callback executed when a marker gets or loses the focus. +proc selectMarker {active_marker event event_data} \ +{ + global marker + switch $event { + focusIn { set marker $active_marker } + focusOut { } + } +} + +# Create marker action. Makes a new marker. +proc makeMarker {parent x y} \ +{ + global markerTranslations markno + set marker marker$markno; incr markno + + send $parent createMarker $marker \ + type rectangle \ + createMode interactive \ + translations $markerTranslations \ + x $x \ + y $y + + send $marker addCallback selectMarker focusIn focusOut +} + + +# WCSBOX -- Real time coordinate display. +set track_enable 0 + +proc wcsUpdate {x y} \ +{ + global track_enable frame + + # Convert screen coords to raster pixel. + send imagewin unmapPixel $x $y raster rx ry rz + + # Set the current frame to the frame the pointer is within. + if {$frame && $raster} { + set track_frame [send client getFrame $raster] + if {$frame != $track_frame} { + send client setFrame $track_frame + } + } + + # Update coords box. + if {$track_enable} { + if {$raster} { + set text [send client encodewcs $rx $ry $rz] + } else { + set text [format " %7.2f %7.2f %7.1f " $rx $ry $rz] + } + send wcsbox "set text \{$text\}; redraw noerase" + } +} + +proc setTrack {state} \ +{ + global track_enable wcsboxGeom + global winWidth winHeight + + if {$state} { + if {$track_enable} \ + return + + send imagewin createMarker wcsbox { + type text + createMode noninteractive + width 25ch + height 1ch + lineWidth 0 + imageText true + textBgColor black + textColor yellow + visible false + } + + set box_width [send wcsbox get width] + set box_height [send wcsbox get height] + set defGeom [format "%sx%s-5-5" $box_width $box_height] + send imagewin parseGeometry $wcsboxGeom $defGeom x y width height + + send wcsbox setAttributes \ + x $x \ + y $y \ + activated true \ + visible true \ + sensitive true + + send wcsbox { + addCallback wcsboxDestroyCallback destroy + addCallback wcsboxMoved moveResize + } + + send imagewin addCallback wcsboxWindowResize resize + set track_enable 1 + send imagewin getCursorPos x y + wcsUpdate $x $y + magnifierMapImage $x $y + + } elseif {$track_enable} { + set track_enable 0 + send wcsbox destroy + } +} + +proc wcsboxDestroyCallback args { + global track_enable + send imagewin deleteCallback wcsboxWindowResize + set track_enable 0 +} + +# If the window is resized make the wcsbox track the corner. +proc wcsboxWindowResize args { + global track_enable + global wcsboxGeom + + if {$track_enable} { + # Get new location. + set box_width [send wcsbox get width] + set box_height [send wcsbox get height] + set defGeom [format "%sx%s-5-5" $box_width $box_height] + send imagewin parseGeometry $wcsboxGeom $defGeom x y width height + + # Move the marker. + send wcsbox "\ + deleteCallback wcsboxMoved; \ + markpos; setAttributes x $x y $y; redraw; \ + addCallback wcsboxMoved moveResize" + } +} + +proc wcsboxMoved {marker event position} { + global wcsboxGeom + send wcsbox getRect boundary x y width height + set wcsboxGeom [send imagewin getGeometry $x $y $width $height] +} + +proc resetWcsbox {param old new} { + global track_enable wcsboxGeom displayCoords + if {$new == "done"} { + setTrack [true $displayCoords] + } elseif {$track_enable} { + setTrack 0 + if {$new == "restart"} { + set wcsboxGeom -5-5 + } + } +}; send initialize addCallback resetWcsbox + + +# PANNER. The full frame mapped into the main image window is displayed at a +# reduced resolution in a marker (known as the panner window) within the main +# image window. The currently displayed region of the frame is indicated +# using a small marker within the panner window. This small marker may be +# moved or resized to pan or zoom the image in the main display window. + +set panner_x 0 +set panner_y 0 +set panner_width 0 +set panner_height 0 +set prm_width 0 +set prm_height 0 + +set panner_enable 0 +set panner_pan_enable 0 +set panner_region_enable 0 +set panner_mapping 0 + +# Panner window translations. +set pannerWinTranslations { \ + !Shift : m_rotateResize() + : m_moveResize() + !Shift : m_raise() m_markpos() + : m_raise() m_markposAdd() + : m_redraw() m_destroyNull() + : m_lower() + !Ctrl b: call(prevFrame,$name) + !Ctrl f: call(nextFrame,$name) + !Ctrl h: call(move_cursor,-1,0) + !Ctrl j: call(move_cursor,0,1) + !Ctrl k: call(move_cursor,0,-1) + !Ctrl l: call(move_cursor,1,0) + !Ctrl n: call(normalize) + !Ctrl m: call(toggleMagnifier) + !Ctrl p: call(togglePanner) + !Ctrl c: call(cpZoomAction,centerFrame) + !Ctrl i: call(cpInvert) + !Ctrl s: call(cpMatchFrames) + !Ctrl r: call(cpRegisterFrames) + !Alt 1: call(cpSetFrame,frame1) + !Alt 2: call(cpSetFrame,frame2) + !Alt 3: call(cpSetFrame,frame3) + !Alt 4: call(cpSetFrame,frame4) + !Ctrl 1: call(cpZoom,1,1,fixed) + !Ctrl 2: call(cpZoom,2,2,fixed) + !Ctrl 3: call(cpZoom,3,3,fixed) + !Ctrl 4: call(cpZoom,4,4,fixed) + !Ctrl 5: call(cpZoom,5,5,fixed) + !Ctrl 6: call(cpZoom,6,6,fixed) + !Ctrl 7: call(cpZoom,7,7,fixed) + !Ctrl 8: call(cpZoom,8,8,fixed) + !Ctrl 9: call(cpZoom,9,9,fixed) + : call(pannerPanXY,$x,$y) + BackSpace: m_deleteDestroy() + Delete: m_deleteDestroy() + : graphics-input() + : track-cursor() call(wcsUpdate,$x,$y) +} + + +# setPanner -- Turn the panner on or off. + +proc togglePanner args { + global panner_enable + + if {$panner_enable} { + setPanner 0 + } else { + setPanner 1 + } +} + +proc setPanner {state} \ +{ + global winWidth winHeight frameWidth frameHeight + global frame panner_mapping pannerWinTranslations pannerArea + global panner_enable panner_region_enable panner_pan_enable + global pannerGeom panner_x panner_y panner_width panner_height + + if {$state} { + if {$panner_enable} \ + return + + # Determine where to place the panner. + set scale \ + [expr sqrt(double($pannerArea) / ($frameWidth * $frameHeight))] + set scaled_width [expr int($frameWidth * $scale) / 2 * 2 + 1] + set scaled_height [expr int($frameHeight * $scale) / 2 * 2 + 1] + set defGeom [format "%sx%s-5+5" $scaled_width $scaled_height] + send imagewin parseGeometry $pannerGeom $defGeom x y width height + + # Create the main panner window (marker). + send imagewin createMarker pannerWin \ + type rectangle \ + createMode noninteractive \ + width [expr $width / 2] \ + height [expr $height / 2] \ + x [expr $x + $width / 2] \ + y [expr $y + $height / 2] \ + lineColor 8 \ + highlightColor 8 \ + translations $pannerWinTranslations \ + visible true \ + sensitive true \ + activated true + + # Update the panner window position variables so that it comes up + # in the same place the next time. + + send pannerWin getRect boundary \ + panner_x panner_y panner_width panner_height + set pannerGeom [send imagewin getGeometry \ + $panner_x $panner_y $panner_width $panner_height] + + # Register callbacks. + send frame addCallback pannerMapImage + send frameRegion addCallback pannerSetRegion + send imagewin addCallback pannerImagewinResized resize + send resize addCallback pannerImagewinResized + + send pannerWin { + addCallback pannerMapImage moveResize; + addCallback pannerMoved moveResize; + addCallback pannerDestroy destroy; + addCallback pannerWinConstraint constraint; + } + + # Map display frame to panner window. + set panner_enable 1 + set panner_region_enable 1 + set panner_mapping [send imagewin nextMapping] + pannerMapImage init; send imagewin refreshMapping $panner_mapping + + # Draw a marker in the panner window outlining displayed region. + send imagewin createMarker pannerRegionMarker \ + type box \ + createMode noninteractive \ + translations $pannerWinTranslations \ + lineColor green \ + highlightColor green \ + sensitive true + + # Fire up the panner region marker. + send client getSource raster sx sy snx sny + pannerSetRegion dummy dummy [concat $frame $sx $sy $snx $sny] + send pannerRegionMarker "\ + addCallback pannerPanImage moveResize; \ + addCallback pannerDestroy destroy; \ + addCallback pannerRegionConstraint constraint; \ + setAttributes visible true activated true; \ + redraw" + set panner_pan_enable 1 + + } elseif {$panner_enable} { + pannerDestroy + } +} + + +# pannerDestroy -- Delete the panner. + +proc pannerDestroy args { + global panner_enable panner_region_enable panner_pan_enable + global panner_mapping + + if {$panner_enable} { + set panner_enable 0 + set panner_pan_enable 0 + set panner_region_enable 0 + + send imagewin freeMapping $panner_mapping + send imagewin deleteCallback pannerImagewinResized + send resize deleteCallback pannerImagewinResized + send frame deleteCallback pannerMapImage + send frameRegion deleteCallback pannerSetRegion + + if [send server queryObject pannerRegionMarker] { + send pannerRegionMarker destroy + } + if [send server queryObject pannerWin] { + send pannerWin destroy + } + } +} + + +# pannerMapImage -- Map the current display frame into the panner window. +# Called when the frame changes or the panner window is moved or resized. +# The panner window displays a small dezoomed version of the full frame. + +proc pannerMapImage args { + global panner_enable frame + global panner_mapping + + if {!$panner_enable || $frame == 0} \ + return + + set raster [send client getRaster] + send pannerWin getRect interior dx dy dnx dny + send imagewin queryRaster $raster width height + + if [send imagewin activeMapping $panner_mapping] { + send imagewin raiseMapping $panner_mapping + } + send imagewin setMapping $panner_mapping 0 \ + $raster pixel 0 0 $width $height \ + 0 pixel $dx $dy $dnx $dny +} + + +# pannerSetRegion -- Adjust the pannerWin region marker to outline the +# region displayed in the main display window. This is called in response +# to a frameRegion event when the main display mapping changes, e.g. when +# the frame changes or the user zooms or pans the main window. The region +# marker is moved and resized to reflect the new view. + +proc pannerSetRegion {param old new} { + global panner_enable panner_region_marker + global panner_region_enable panner_pan_enable + global frame frameWidth frameHeight prm_width prm_height + + if {!$panner_enable || !$panner_region_enable || $frame == 0} \ + return + + # new: frame sx sy snx sny + set src_frame [lindex $new 0] + set sx [lindex $new 1]; set snx [lindex $new 3] + set sy [lindex $new 2]; set sny [lindex $new 4] + + if {$src_frame != $frame} \ + return + + send pannerWin getRect interior px py pnx pny + + set x [expr ($sx + $snx/2.0) / $frameWidth * $pnx + $px] + set y [expr ($sy + $sny/2.0) / $frameHeight * $pny + $py] + set width [expr ($snx/2.0) / $frameWidth * $pnx + 1] + set height [expr ($sny/2.0) / $frameHeight * $pny + 1] + + set pan_save $panner_pan_enable; set panner_pan_enable 0 + set panner_region_enable 0 + + send pannerRegionMarker "\ + markpos; \ + setAttributes x $x y $y width $width height $height; \ + redraw; raise" + send pannerRegionMarker getAttributes width prm_width height prm_height + + set panner_region_enable 1 + set panner_pan_enable $pan_save +} + + +# pannerPanImage -- Pan or zoom the image in the main image window. This is +# called when the user moves the region marker within the panner window. + +proc pannerPanImage {marker event position} { + global panner_pan_enable + global winWidth winHeight + global prm_width prm_height + + if {!$panner_pan_enable} \ + return + + # position: x y width height. + set new_width [lindex $position 2] + set new_height [lindex $position 3] + + # region: type raster x y width height. + set region [send pannerRegionMarker getRegion unmap] + set x [expr [lindex $region 2] + 1]; set width [lindex $region 4] + set y [expr [lindex $region 3] + 1]; set height [lindex $region 5] + + set panner_pan_enable 0 + if {$new_width == $prm_width && $new_height == $prm_height} { + send client pan $x $y + } else { + set xscale [expr ($winWidth / 2.0) / $width] + set yscale [expr ($winHeight / 2.0) / $height] + send client zoom $xscale $yscale $x $y + } + set panner_pan_enable 1 +} + + +# pannerPanXY -- Pan to the point X,Y in the panner window coordinate +# system. Called when the user clicks MB2 in the panner window. + +proc pannerPanXY {x y} { + send imagewin unmapPixel $x $y raster rx ry + send client pan $rx $ry +} + + +# pannerMoved -- Called when the user moves the panner window. We need to +# move the region marker to the new window location and record the new location +# so that the window will come up in the same place if closed and reopened. + +proc pannerMoved {marker event position} { + global winWidth winHeight + global frame panner_pan_enable pannerGeom + global panner_x panner_y panner_width panner_height + + # Move the region marker to the new location. + set pan_save $panner_pan_enable; set panner_pan_enable 0 + send client getSource raster sx sy snx sny + pannerSetRegion dummy dummy [concat $frame $sx $sy $snx $sny] + set panner_pan_enable $pan_save + + # Update the panner window position variables so that it comes up + # in the same place the next time. + + send pannerWin getRect boundary \ + panner_x panner_y panner_width panner_height + set pannerGeom [send imagewin getGeometry \ + $panner_x $panner_y $panner_width $panner_height] + + send pannerRegionMarker raise +} + + +# pannerWinConstraint -- Called when the panner window is moved, resized, or +# rotated. Constrain the panner window to remain within the image window; +# rotation is not permitted. + +proc pannerWinConstraint {marker event attributes} { + global winWidth winHeight + global panner_width panner_height + + set width $panner_width + set height $panner_height + set constraints [list {}] + + # Check the width and height first as we need these below. + foreach i $attributes { + set new [lindex $i 2] + switch [lindex $i 0] { + width { set ww [expr $winWidth / 2] + if {$new > $ww} { + lappend constraints "width $ww" + set width $ww + } else { + set width $new + } + } + height { set wh [expr $winHeight / 2] + if {$new > $wh} { + lappend constraints "height $wh" + set height $wh + } else { + set height $new + } + } + rotangle { lappend constraints "rotangle 0" + } + } + } + + # Constrain X and Y. + foreach i $attributes { + set new [lindex $i 2] + switch [lindex $i 0] { + x { set pw [expr $width / 2] + if {$new < $pw} { + lappend constraints "x $pw" + } elseif {$new > $winWidth - $pw} { + lappend constraints "x [expr $winWidth - $pw]" + } + } + y { set ph [expr $height / 2] + if {$new < $ph} { + lappend constraints "y $ph" + } elseif {$new > $winHeight - $ph} { + lappend constraints "y [expr $winHeight - $ph]" + } + } + } + } + + return $constraints +} + + +# pannerRegionConstraint -- Called when the region marker in the panner +# window is moved, resized, or rotated. + +proc pannerRegionConstraint {marker event attributes} { + global winWidth winHeight + + set constraints [list {}] + send pannerWin getRect interior p_x p_y p_width p_height + send pannerRegionMarker getAttributes width rwidth height rheight + + # Since the panner region marker is a box marker x,y and width,height + # will not both change in the same call, so we can process them all + # independently. + + foreach i $attributes { + set new [lindex $i 2] + + switch [lindex $i 0] { + x { set left [expr $p_x + $rwidth + 1] + set right [expr $p_x + $p_width - $rwidth - 1] + if {$new < $left} { + lappend constraints "x $left" + } elseif {$new > $right} { + lappend constraints "x $right" + } + } + y { set top [expr $p_y + $rheight + 1] + set bottom [expr $p_y + $p_height - $rheight - 1] + if {$new < $top} { + lappend constraints "y $top" + } elseif {$new > $bottom} { + lappend constraints "y $bottom" + } + } + width { set ww [expr $winWidth / 2] + if {$new > $ww / 2} { + lappend constraints "width $ww" + } + } + height { set wh [expr $winHeight / 2] + if {$new > $wh / 2} { + lappend constraints "height $wh" + } + } + rotangle { lappend constraints "rotangle 0" + } + } + } + + return $constraints +} + + +# pannerImagewinResized -- If the display window is resized make the panner +# track the corner. + +proc pannerImagewinResized args { + global panner_enable panner_mapping + global pannerGeom panner_x panner_y panner_width panner_height + + if {$panner_enable} { + set old_x $panner_x; set old_width $panner_width + set old_y $panner_y; set old_height $panner_height + + # Get new location of panner window. + set defGeom [format "%sx%s-5+5" $panner_width $panner_height] + send imagewin parseGeometry $pannerGeom $defGeom x y width height + + # Reposition the marker. + send pannerWin "\ + markpos; \ + setAttributes \ + x [expr $x + $width / 2] \ + y [expr $y + $height / 2] \ + width [expr $width / 2] \ + height [expr $height / 2]; \ + redraw" + + # Update the panner window position variables so that it comes up + # in the same place the next time. + send pannerWin getRect boundary \ + panner_x panner_y panner_width panner_height + set pannerGeom [send imagewin getGeometry \ + $panner_x $panner_y $panner_width $panner_height] + + # Make sure the panner window is on top. + send imagewin raiseMapping $panner_mapping + + # Refresh the panner window if it did not move. + if {$panner_x == $old_x && $panner_y == $old_y && + $panner_width == $old_width && $panner_height == $old_height} { + send imagewin refreshMapping $panner_mapping + } + } +} + + +# resetPanner -- Reinitialize the panner. + +proc resetPanner {param old new} { + global pannerGeom displayPanner + if {$new == "done"} { + setPanner [true $displayPanner] + } else { + setPanner 0 + if {$new != "startup"} { + set pannerGeom -5+5 + } + } +}; send initialize addCallback resetPanner + + + +# MAGNIFIER. A subraster around the cursor in the main image window is +# displayed at a high resolution in a marker (known as the magnifier window) +# within the main image window. + +set magnifier_x 0 +set magnifier_y 0 +set magnifier_width 0 +set magnifier_height 0 +set mrm_width 0 +set mrm_height 0 + +set magnifier_enable 0 +set magnifier_mag_enable 0 +set magnifier_mapping 0 + +createMenu magzoomMenu imagewin { + { "Zoom Factors" f.title } + { f.dblline } + { "Zoom 1" f.exec "setMagnifierZoom 1" } + { "Zoom 2" f.exec "setMagnifierZoom 2" } + { "Zoom 4" f.exec "setMagnifierZoom 4" } + { "Zoom 8" f.exec "setMagnifierZoom 8" } + { "Zoom 16" f.exec "setMagnifierZoom 16" } +} + +# Magnifier window translations. +set magnifierWinTranslations { \ + !Shift : m_rotateResize() + : m_moveResize() + !Shift : m_raise() m_markpos() + : m_raise() m_markposAdd() + : m_redraw() m_destroyNull() + : m_lower() + : popup(magzoomMenu) + : popdown(magzoomMenu) + !Ctrl m: call(toggleMagnifier) + !Ctrl p: call(togglePanner) + BackSpace: m_deleteDestroy() + Delete: m_deleteDestroy() + : graphics-input() + : track-cursor() call(wcsUpdate,$x,$y) +} + + +# setMagnifier -- Turn the magnifier on or off. + +set magAlreadyOn 0 + +proc setDynamicMagnifier {state} \ +{ + global magAlreadyOn magnifier_enable + + if {$state} { + set magAlreadyOn $magnifier_enable + } + if {$magAlreadyOn} { + return + } else { + setMagnifier $state + } +} + + +proc toggleMagnifier args { + global magnifier_enable + + if {$magnifier_enable} { + setMagnifier 0 + send pbMagM set state False + } else { + setMagnifier 1 + send pbMagM set state True + } +} + + +proc setMagnifier {state} \ +{ + global winWidth winHeight frameWidth frameHeight + global frame magnifier_mapping magnifierWinTranslations magnifierArea + global magnifier_enable magnifier_height + global magnifierGeom magnifier_x magnifier_y magnifier_width + + if {$state} { + if {$magnifier_enable} \ + return + + # Determine where to place the magnifier. + set scale [expr sqrt(double($magnifierArea) / (512 * 512))] + set scaled_width [expr int(512 * $scale) / 2 * 2 + 1] + set scaled_height [expr int(512 * $scale) / 2 * 2 + 1] + set defGeom [format "%sx%s-5+5" $scaled_width $scaled_height] + send imagewin parseGeometry $magnifierGeom $defGeom x y width height + + # Create the main magnifier window (marker). + send imagewin createMarker magnifierWin \ + type rectangle \ + createMode noninteractive \ + width [expr $width / 2] \ + height [expr $height / 2] \ + x [expr $x + $width / 2] \ + y [expr $y + $height / 2] \ + lineColor 8 \ + highlightColor 8 \ + translations $magnifierWinTranslations \ + visible true \ + sensitive true \ + activated true + + # Update the magnifier window position variables so that it comes up + # in the same place the next time. + + send magnifierWin getRect boundary \ + magnifier_x magnifier_y magnifier_width magnifier_height + set magnifierGeom [send imagewin getGeometry \ + $magnifier_x $magnifier_y $magnifier_width $magnifier_height] + + # Register callbacks. + send imagewin addCallback magnifierImagewinResized resize + send resize addCallback magnifierImagewinResized + send magnifierWin addCallback magnifierMovedMapImage moveResize + + send magnifierWin { + addCallback magnifierMoved moveResize; + addCallback magnifierDestroy destroy; + addCallback magnifierWinConstraint constraint; + } + + # Map display frame to magnifier window. + set magnifier_enable 1 + set magnifier_mapping [send imagewin nextMapping] + send imagewin refreshMapping $magnifier_mapping + + # create cross-hair + send imagewin createMarker magPointer \ + type rectangle \ + createMode noninteractive \ + width 3 \ + height 3 \ + lineWidth 3 \ + lineColor green \ + highlightcolor green \ + activated true \ + visible true + + # set its position and size + setMagPointerPosition + magnifierMapImage [expr $winWidth / 2] [expr $winHeight / 2] + + } elseif {$magnifier_enable} { + magnifierDestroy + } +} + + +# magnifierDestroy -- Delete the magnifier. + +proc magnifierDestroy args { + global magnifier_enable + global magnifier_mapping + + if {$magnifier_enable} { + set magnifier_enable 0 + + send imagewin freeMapping $magnifier_mapping + send imagewin deleteCallback magnifierImagewinResized + send resize deleteCallback magnifierImagewinResized + send frame deleteCallback magnifierMapImage + + if [send server queryObject magnifierWin] { + send magnifierWin destroy + } + if [send server queryObject magPointer] { + send magPointer destroy + } + } +} + + +# magnifierMoved -- Called when the user moves the magnifier window. We need to +# move the region marker to the new window location and record the new location +# so that the window will come up in the same place if closed and reopened. + +proc magnifierMoved {marker event position} { + global winWidth winHeight magnifierGeom frame + global magnifier_x magnifier_y magnifier_width magnifier_height + + # Move the region marker to the new location. + send client getSource raster sx sy snx sny + + # Update the magnifier window position variables so that it comes up + # in the same place the next time. + + send magnifierWin getRect boundary \ + magnifier_x magnifier_y magnifier_width magnifier_height + set magnifierGeom [send imagewin getGeometry \ + $magnifier_x $magnifier_y $magnifier_width $magnifier_height] +} + + +# magnifierWinConstraint -- Called when the magnifier window is moved, resized, +# or rotated. Constrain the magnifier window to remain within the image window; +# rotation is not permitted. + +proc magnifierWinConstraint {marker event attributes} { + global winWidth winHeight + global magnifier_width magnifier_height + + set width $magnifier_width + set height $magnifier_height + set constraints [list {}] + + # Check the width and height first as we need these below. + foreach i $attributes { + set new [lindex $i 2] + switch [lindex $i 0] { + width { set ww [expr $winWidth / 2] + if {$new > $ww} { + lappend constraints "width $ww" + set width $ww + } else { + set width $new + } + } + height { set wh [expr $winHeight / 2] + if {$new > $wh} { + lappend constraints "height $wh" + set height $wh + } else { + set height $new + } + } + rotangle { lappend constraints "rotangle 0" + } + } + } + + # Constrain X and Y. + foreach i $attributes { + set new [lindex $i 2] + switch [lindex $i 0] { + x { set pw [expr $width / 2] + if {$new < $pw} { + lappend constraints "x $pw" + } elseif {$new > $winWidth - $pw} { + lappend constraints "x [expr $winWidth - $pw]" + } + } + y { set ph [expr $height / 2] + if {$new < $ph} { + lappend constraints "y $ph" + } elseif {$new > $winHeight - $ph} { + lappend constraints "y [expr $winHeight - $ph]" + } + } + } + } + + return $constraints +} + + +# magnifierRegionConstraint -- Called when the region marker in the magnifier +# window is moved, resized, or rotated. + +proc magnifierRegionConstraint {marker event attributes} { + global winWidth winHeight + + set constraints [list {}] + send magnifierWin getRect interior p_x p_y p_width p_height + + # Since the magnifier region marker is a box marker x,y and width,height + # will not both change in the same call, so we can process them all + # independently. + + foreach i $attributes { + set new [lindex $i 2] + + switch [lindex $i 0] { + x { set left [expr $p_x + $rwidth + 1] + set right [expr $p_x + $p_width - $rwidth - 1] + if {$new < $left} { + lappend constraints "x $left" + } elseif {$new > $right} { + lappend constraints "x $right" + } + } + y { set top [expr $p_y + $rheight + 1] + set bottom [expr $p_y + $p_height - $rheight - 1] + if {$new < $top} { + lappend constraints "y $top" + } elseif {$new > $bottom} { + lappend constraints "y $bottom" + } + } + width { set ww [expr $winWidth / 2] + if {$new > $ww / 2} { + lappend constraints "width $ww" + } + } + height { set wh [expr $winHeight / 2] + if {$new > $wh / 2} { + lappend constraints "height $wh" + } + } + rotangle { lappend constraints "rotangle 0" + } + } + } + + return $constraints +} + + +# magnifierImagewinResized -- If the display window is resized make the +# magnifier track the corner. + +proc magnifierImagewinResized args { + global magnifier_enable magnifier_mapping magnifier_height + global magnifierGeom magnifier_x magnifier_y magnifier_width + + if {$magnifier_enable} { + set old_x $magnifier_x; set old_width $magnifier_width + set old_y $magnifier_y; set old_height $magnifier_height + + # Get new location of magnifier window. + set defGeom [format "%sx%s+5+5" $magnifier_width $magnifier_height] + send imagewin parseGeometry $magnifierGeom $defGeom x y width height + + # Reposition the marker. + send magnifierWin "\ + markpos; \ + setAttributes \ + x [expr $x + $width / 2] \ + y [expr $y + $height / 2] \ + width [expr $width / 2] \ + height [expr $height / 2]; \ + redraw" + + # Update the magnifier window position variables so that it comes up + # in the same place the next time. + send magnifierWin getRect boundary \ + magnifier_x magnifier_y magnifier_width magnifier_height + set magnifierGeom [send imagewin getGeometry \ + $magnifier_x $magnifier_y $magnifier_width $magnifier_height] + + # Make sure the magnifier window is on top. + send imagewin raiseMapping $magnifier_mapping + + # Refresh the magnifier window if it did not move. + if {$magnifier_x == $old_x && $magnifier_y == $old_y && + $magnifier_width == $old_width && $magnifier_height == $old_height} { + send imagewin refreshMapping $magnifier_mapping + } + } +} + + +# resetMagnifier -- Reinitialize the magnifier. + +proc resetMagnifier {param old new} { + global magnifierGeom displayMagnifier + if {$new == "done"} { + setMagnifier [true $displayMagnifier] + } else { + setMagnifier 0 + if {$new != "startup"} { + set magnifierGeom +5+5 + } + } +}; send initialize addCallback resetMagnifier + + +set last_mag_x [expr $winWidth / 2] +set last_mag_y [expr $winHeight / 2] + +# magnifierMovedMapImage -- Front end to magnifierMapImage, called when +# magnifier window is moved or resized. + +proc magnifierMovedMapImage args { + global last_mag_x last_mag_y + + magnifierMapImage $last_mag_x $last_mag_y + setMagPointerPosition +} + + +# The following code was borrowed from the SAOtng GUI by Eric Mandel of SAO +#-------------------------------------------------------------------------- + +# globals for magnifier +set mag_w 0 +set mag_h 0 + +# +# setMagnifierZoom -- set the zoom factor for the magnifier +# +proc setMagnifierZoom { zoom } \ +{ + global mag_w mag_h + + send magnifierWin getRect boundary \ + magnifier_x magnifier_y magnifier_width magnifier_height + set mag_w [expr int( ( $magnifier_width + $zoom - 1 ) / $zoom) ] + set mag_h [expr int( ( $magnifier_height + $zoom - 1 ) / $zoom) ] + + #set mw [expr int (($magnifier_width - 1) / ($mag_w * 2))] + #if { $mw < 4 } { set mw 4 } + #set mh [expr int (($magnifier_height - 1) / ($mag_h * 2))] + #if { $mh < 4 } { set mh 4 } + #send magPointer "setAttributes width $mw height $mh; redraw" +} + +# magnifierMapImage -- Map the of the current display frame centered on the +# pointer into the magnifier window. Called when the frame changes, the +# pointer moves in the main image window, or (via magnifierMovedMapImage) +# the magnifier window is moved or resized. + +set magnifierROP 0 + +proc magnifierMapImage {x y} \ +{ + global magnifier_enable frame + global last_mag_x last_mag_y + global magnifier_mapping + global winWidth winHeight + global mag_w mag_h + global magnifierROP + + if {!$magnifier_enable || $frame == 0} \ + return + + if {abs($last_mag_x-$x) != 1 && abs($last_mag_y-$y) != 1} { + # For efficiency we won't compute the sqrt of the distance but instead + # just compare the square. Use a threshold of 6 pixels so when we + # narrow in on the ROI the magnifier is still (mostly) correctly. + set diff [expr (($last_mag_x-$x) * ($last_mag_x-$x)) + \ + (($last_mag_y-$y) * ($last_mag_y-$y))] + if {$diff > 36} { + set last_mag_x $x + set last_mag_y $y + return + } + } + + set last_mag_x $x + set last_mag_y $y + + send magnifierWin getRect interior dx dy dnx dny + if [send imagewin activeMapping $magnifier_mapping] { + send imagewin raiseMapping $magnifier_mapping + } + # initialize the magnifier zoom factor, if necessary + if { !$mag_w || !$mag_h } { + setMagnifierZoom 4 + } + + set sx [expr $x - $mag_w / 2 ] + set sy [expr $y - $mag_h / 2 ] + + # Constrain the source rectangle within the main image window + # (not overlapping an edge or the magnifier window). + + if {$sx > [expr $dx - $mag_w] && $sx < [expr $dx + $dnx] && + $sy > [expr $dy - $mag_h] && $sy < [expr $dy + $dny] } { + + # The source rectangle would overlap the magnifier window; fix that. + + set dist(l) [expr $sx - ($dx - $mag_w)] + set dist(b) [expr $dy + $dny - $sy] + set dist(r) [expr $dx + $dnx - $sx] + set dist(t) [expr $sy - ($dy - $mag_h)] + + # Put the distances in order. + + foreach j [array names dist] { + set alreadyset($j) 0 + } + + for {set i 0} {$i < 4} {incr i} { + set candidate "" + foreach j [array names dist] { + if {!$alreadyset($j)} { + if {$candidate == ""} { + set candidate $j + set minsofar $dist($j) + } elseif {$dist($j) < $minsofar} { + set candidate $j + set minsofar $dist($j) + } + } + } + set order($i) $candidate + set alreadyset($candidate) 1 + } + + # Try the sides in order, using the first one where there's room. + + for {set i 0} {$i < 4} {incr i} { + if {$order($i) == "l"} { + if {$dx >= $mag_w} { + set sx [expr $dx - $mag_w] + break + } + } elseif {$order($i) == "b"} { + if {$winHeight >= $dy + $dny + $mag_h} { + set sy [expr $dy + $dny] + break + } + } elseif {$order($i) == "r"} { + if {$winWidth >= $dx + $dnx + $mag_w} { + set sx [expr $dx + $dnx] + break + } + } elseif {$order($i) == "t"} { + if {$dy >= $mag_h} { + set sy [expr $dy - $mag_h] + break + } + } + } + } + + # Make sure we don't go beyond an edge of the main window. + + if {$sx < 0} { + set sx 0 + } else { + set sxmax [expr $winWidth - $mag_w] + if {$sx > $sxmax} { + set sx $sxmax + } + } + + if {$sy < 0} { + set sy 0 + } else { + set symax [expr $winHeight - $mag_h] + if {$sy > $symax} { + set sy $symax + } + } + + # Map 32 x 32 centered on pointer in main window. + set err [catch {send imagewin setMapping $magnifier_mapping $magnifierROP \ + 0 pixel $sx $sy $mag_w $mag_h \ + 0 pixel $dx $dy $dnx $dny}] + if { $err != 0 } { + Print "There was a problem setting up the magnifier ... recovering" + } +} + + +# set the position of the magnifier marker in the center of the mag window +proc setMagPointerPosition args \ +{ + global magnifier_enable + + if { !$magnifier_enable } { + return + } + + send magnifierWin "getAttributes x x y y" + set xpos [expr $x + 1] + set ypos [expr $y + 1] + + send magPointer "setAttributes x $xpos y $ypos visible true; redraw" +} + + + +# FRAME BLINK. +set blinkId 0 +set blinkIndex 0 + +proc toggleBlink args { + global blinkId blinkRate blinkIndex + global optionsMenuDescription + + if {$blinkId} { + deleteTimedCallback $blinkId + set blinkId 0 + } else { + set blinkId [postTimedCallback blink [expr int($blinkRate * 1000)]] + } + + set blinkIndex 0 + editMenu optionsMenu viewButton $optionsMenuDescription +} + +proc blink args { + global blinkId blinkRate blinkFrames blinkIndex + + send client setFrame [lindex $blinkFrames $blinkIndex] + incr blinkIndex + if {$blinkIndex >= [llength $blinkFrames]} { + set blinkIndex 0 + } + + set blinkId [postTimedCallback blink [expr int($blinkRate * 1000)]] +} + +proc resetBlink args { + global blinkId + if {$blinkId} \ + toggleBlink +}; send initialize addCallback resetBlink + + + +# Normalize -- Reset the view parameters for the current frame. +proc normalize args { + global zoomindex zoomfactor + global frameWidth frameHeight + global xcen ycen frame + + #set zoomindex($frame) 0 + #set xcen [expr $frameWidth / 2] + #set ycen [expr $frameHeight / 2] + #send client zoom 1 1 $xcen $ycen + send client windowColormap 0.5 1.0 +} + + +# Popdown menus. +createMenu fileMenu fileButton { + { "Info" f.exec { + send info map + infoUpdate + } } + { "Load" f.exec { + send client setLoadOption rescan + send load_panel map + set loadP_up 1 + } } + { "Save" f.exec { + Save + } } + { "Save As..." f.exec { + send save_panel map + set saveP_up 1 + } } + { "Print" f.exec { + send imagewin setCursorType busy + Print + send imagewin setCursorType idle + } } + { "Print Setup" f.exec { + send print_panel map + set printP_up 1 + } } + { "TclShell" f.exec { + send tclShell map + } } + { f.line } + { "Reset" f.exec { + # Do a hard reset. + send client Reset + #resetView initialize done done + } } + { "Quit" f.exec Quit } +} + +createMenu viewMenu viewButton { + { "Next frame" f.exec nextFrame } + { "Prev frame" f.exec prevFrame } + { f.line } + { "Colormap" f.menu cmapMenu } + { "Flip" f.menu flipMenu } + { f.line } + { "Equal aspect" f.exec { + set xmag $frameZoomX($frame) + set ymag $frameZoomY($frame) + set zoom [expr ($xmag + $ymag) / 2.0] + cpZoom $zoom $zoom fixed + } } + { "Integer zoom" f.exec { + set xmag [expr round ($frameZoomX($frame))] + set ymag [expr round ($frameZoomY($frame))] + cpZoom $xmag $ymag fixed + } } + { "Toggle zoom" f.exec toggleZoom } + { "Unzoom" f.exec { + set zoomindex($frame) 0 + set mag $zoomfactor($zoomindex($frame)) + send client zoom $mag $mag $xcen $ycen + } } +} + +createMenu cmapMenu viewMenu { + { "Colormaps" f.title } + { f.dblline } + { "Normalize" f.exec normalize } + { "Invert" f.exec cpInvert } + { "Optimize" f.exec cpOptimize sensitive false } + { f.line } + { "Grayscale" f.exec "send client setColormap Grayscale" } + { "Color" f.exec "send client setColormap Color" } + { "Heat" f.exec "send client setColormap Heat" } + { "HSV" f.exec "send client setColormap HSV" } + { "AIPS0" f.exec "send client setColormap AIPS0" } + { "Halley" f.exec "send client setColormap Halley" } + { "Ramp" f.exec "send client setColormap Ramp" } + { "Standard" f.exec "send client setColormap Standard" } + { "Staircase" f.exec "send client setColormap Staircase" } + { "Rainbow1" f.exec "send client setColormap Rainbow1" } + { "Rainbow2" f.exec "send client setColormap Rainbow2" } + { "Random8" f.exec "send client setColormap Random8" } +} + +createMenu flipMenu viewMenu { + { "Flip X" f.exec xflip } + { "Flip Y" f.exec yflip } + { "Flip XY" f.exec xyflip } +} + +set optionsMenuDescription { + { "Autoscale" f.exec { + set value [send autoscaleButton get on] + send autoscaleButton set on [expr !$value] + cpSetAutoscale + } } + { "Antialias" f.exec { + set value [send antialiasButton get on] + send antialiasButton set on [expr !$value] + cpSetAntialias + } } + { "Panner" f.exec { setPanner [expr !$panner_enable] } } + { "Magnifier" f.exec { setMagnifier [expr !$magnifier_enable] }} + { "Coords box" f.exec { setTrack [expr !$track_enable] } } + { "Tile frames" f.exec { + set value [send tileFramesButton get on] + send tileFramesButton set on [expr !$value] + cpSetTileFrames + } } + { "Clear frame" f.exec clearFrame } + { "Fit frame" f.exec fitFrame } + { "Match LUTs" f.exec cpMatchFrames } + { "Register" f.exec cpRegisterFrames } + { {$blinkId ? "Stop blink" : "Blink frames"} + f.exec toggleBlink } + { f.line } + { "Control Panel" f.exec { panel + set panel_up 1 + } } + { "Print Panel" f.exec { send print_panel map + set printP_up 1 + } } + { "Load Panel" f.exec { send client setLoadOption rescan + send load_panel map + set loadP_up 1 + } } + { "Save Panel" f.exec { send save_panel map + set saveP_up 1 + } } +}; createMenu optionsMenu optionsButton $optionsMenuDescription + + +# MAIN CONTROL PANEL +# --------------------------- + + +foreach i $frames {set saveView($i) "1 1"} + +send prevFrame set bitmap larrow +send nextFrame set bitmap rarrow +send contrastLabel set bitmap contrast +send brightnessLabel set bitmap brightness +send contrastSlider resizeThumb 0.1 1.0 +send brightnessSlider resizeThumb 0.1 1.0 + +proc controlPanelDone args { + global panel_up + send controlShell unmap + send panelButton set state 0 + set panel_up 0 +}; send doneButton addCallback controlPanelDone + +# panel -- Toggle control panel display. +proc panel args { + global panel_up + if {$panel_up} { + send controlShell unmap + send panelButton set state 0 + set panel_up 0 + } else { + send controlShell map + send panelButton set state 1 + set panel_up 1 + } +} + +# resetPanel -- Calling during startup or in an initialize, to reset things. +proc resetPanel {param old new} { + global frame nframes frames + global displayPanner displayCoords displayMagnifier + global blinkFrames warnings + + switch $new { + startup { + } + restart { foreach i $frames { + send frame$frame set on 0 + } + } + done { if {$frame} { + send frame$frame set on 1 + } + + cpResetBlink + set button 1 + foreach i $blinkFrames { + send blinkFrame$button set label $i + incr button + } + + cpResetEnhance + send pannerButton set on [true $displayPanner] + send magnifierButton set on [true $displayMagnifier] + send coordsBoxButton set on [true $displayCoords] + send warningsButton set on $warnings + } + } +}; send initialize addCallback resetPanel + + +# Frame selection. +# ------------------------------- +proc cpSetFrame {widget args} { + send $widget set on 0 + send client setFrame [send $widget get label] +} + +proc cpFrameChanged {param old new} { + if {$old > 0} { + send frame$old set on 0 + } + if {$new > 0} { + send frame$new set on 1 + } +} + +send prevFrame addCallback prevFrame +send nextFrame addCallback nextFrame +send frame addCallback cpFrameChanged +foreach i $frames {send frame$i addCallback cpSetFrame} + +# Frame buttons. +proc cpFrameAction {widget args} { + global frameZoomX frameZoomY frame + switch $widget { + aspect { set xmag $frameZoomX($frame) + set ymag $frameZoomY($frame) + set zoom [expr round (($xmag + $ymag) / 2.0)] + cpZoom $zoom $zoom fixed + } + flipX { send client flip x } + flipY { send client flip y } + flipXY { send client flip x y } + clearFrame { clearFrame } + fitFrame { fitFrame } + } +} +foreach widget {aspect flipX flipY flipXY clearFrame fitFrame} { + send $widget addCallback cpFrameAction +} + +# clearFrame -- Clear the current display frame. +proc clearFrame args { + global warnings + if {$warnings} { + Wexec client \ + "Clearing the frame will destroy\n\ + all data in the frame" \ + clearFrame + } else { + send client clearFrame + } +} + +# fitFrame -- Resize the display window to fit the frame buffer. +proc fitFrame args { + global frameWidth frameHeight winWidth winHeight + set dw [expr [send display get width] - $winWidth] + set dh [expr [send display get height] - $winHeight] + send display "resize [expr $frameWidth + $dw] [expr $frameHeight + $dh]" +}; + +proc initFitFrame { param old new } { + if { [lindex $new 0] == "resize"} { + fitFrame + } + pannerMapImage init +}; send frameFit addCallback initFitFrame + + +# Zoom and pan buttons. +# ------------------------------- +proc cpZoomAction {widget args} { + global frameWidth frameHeight + + switch $widget { + x1 { cpZoom 1 1 fixed } + + z2 { cpZoom 2 2 fixed } + z3 { cpZoom 3 3 fixed } + z4 { cpZoom 4 4 fixed } + z5 { cpZoom 5 5 fixed } + z8 { cpZoom 8 8 fixed } + + d2 { cpZoom [expr 1.0/2] [expr 1.0/2] fixed } + d3 { cpZoom [expr 1.0/3] [expr 1.0/3] fixed } + d4 { cpZoom [expr 1.0/4] [expr 1.0/4] fixed } + d5 { cpZoom [expr 1.0/5] [expr 1.0/5] fixed } + d8 { cpZoom [expr 1.0/8] [expr 1.0/8] fixed } + + zoomIn { cpZoom 2.0 2.0 relative } + zoomOut { cpZoom 0.5 0.5 relative } + + centerFrame { send client pan \ + [expr $frameWidth/2.0] \ + [expr $frameHeight/2.0] + } + + toggleZoom { toggleZoom } + } +} + +proc cpZoom {zoom_x zoom_y mode} { + global frameZoomX frameZoomY zoomindex frame + + if {$mode == "fixed"} { + send client zoom $zoom_x $zoom_y + } else { + send client zoom \ + [expr $frameZoomX($frame) * $zoom_x] \ + [expr $frameZoomY($frame) * $zoom_y] + } + + set zoomindex($frame) 0 +} + +proc toggleZoom args { + global frameZoomX frameZoomY frameCenterX frameCenterY + global frameWidth frameHeight saveView frame + + if {$frameZoomX($frame) != 1 && $frameZoomY($frame) != 1} { + set saveView($frame) \ + "$frameZoomX($frame) $frameZoomY($frame) \ + $frameCenterX($frame) $frameCenterY($frame)" + send client zoom 1 1 \ + [expr $frameWidth/2.0] \ + [expr $frameHeight/2.0] + } else { + send client zoom $saveView($frame) + } +} + +foreach widget {toggleZoom centerFrame zoomIn zoomOut \ + x1 z2 z3 z4 z5 z8 d2 d3 d4 d5 d8} { + send $widget addCallback cpZoomAction +} + +# Frame data display. +# ------------------------------- +set cpFrame 0 +set cpXcen 0 +set cpYcen 0 +set cpXmag 0 +set cpYmag 0 +set cpXscale 0 +set cpYscale 0 + +proc cpDisplayFrameData {name old new} { + global cpFrame cpXcen cpYcen + global cpXmag cpYmag cpXscale cpYscale + + set update 0 + switch $name { + frame { if {$new != $cpFrame} { + set cpFrame $new + set update 1 + } + } + frameView { # Parse the frameView input. + set xmag [lindex $new 0]; set ymag [lindex $new 1] + set xcen [lindex $new 2]; set ycen [lindex $new 3] + set xnorm [lindex $new 4]; set ynorm [lindex $new 5] + + # We need client coords and the overall scale factors. + set text [send client encodewcs $xcen $ycen] + set xcen [lindex $text 0] + set ycen [lindex $text 1] + set xscale [expr $xmag * $xnorm] + set yscale [expr $ymag * $ynorm] + + if {$xcen != $cpXcen || $ycen != $cpYcen || + $xmag != $cpXmag || $ymag != $cpYmag || + $xscale != $cpXscale || $yscale != $cpYscale} { + + set cpXcen $xcen; set cpXscale $xscale + set cpYcen $ycen; set cpYscale $yscale + set cpXmag $xmag; set cpYmag $ymag + set update 1 + } + } + } + + if {$update} { + set header [format "-- Frame %d --" $cpFrame] + set center [format "X center: %0.1f\nY center: %0.1f" $cpXcen $cpYcen] + if {int($cpXmag) >= 10} { + set zoom1 [format " X zoom: %0.1f" $cpXmag] + set zoom2 [format " Y zoom: %0.1f" $cpYmag] + } else { + set zoom1 [format "X zoom: %0.1f" $cpXmag] + set zoom2 [format "Y zoom: %0.1f" $cpYmag] + } + if {int($cpXscale) >= 10} { + set scale1 [format "X scale: %0.1f" $cpXscale] + set scale2 [format "Y scale: %0.1f" $cpYscale] + } else { + set scale1 [format "X scale: %0.2f" $cpXscale] + set scale2 [format "Y scale: %0.2f" $cpYscale] + } + send frameData set label [format "%s\n%s\n%s\n%s\n%s\n%s" \ + $header $center $scale1 $scale2 $zoom1 $zoom2] + } +}; foreach p {frame frameView} {send $p addCallback cpDisplayFrameData} + + +# Frame enhancement. +# ------------------------------- +set cpEnhanceDisable 0 +set cpEnhanceId 0 +set cpEnhanceMode none +set cpEnhanceVal 0 +set cpListItem none + +# Windowing the colormap is slow when the mouse is not in the image window, +# so it is necessary to execute the windowColormap in a work procedure. +# This allows any number of slider motion events to be processed for each +# windowColormap, preventing slider events from queueing up. + +proc cpResetEnhance args { + global cpListItem cpEnhanceId + set cpListItem none + set cpEnhanceId 0 +} + +proc cpSetEnhancement {widget cbtype x y} { + global cpEnhanceMode cpEnhanceVal cpEnhanceId cpEnhanceDisable + set cpEnhanceMode $widget + set cpEnhanceVal $x + if {!$cpEnhanceId && !$cpEnhanceDisable} { + set cpEnhanceId [postWorkProc cpEnhanceProc] + } +} +proc cpEnhanceProc args { + global cpEnhanceMode cpEnhanceVal cpEnhanceId + global enhancement frame maxContrast + set val $cpEnhanceVal + + if {$cpEnhanceMode == "contrastSlider"} { + set contrast [lindex $enhancement($frame) 2] + send client windowColormap [lindex $enhancement($frame) 1] \ + [expr (($contrast < 0) ? -$val : $val) * $maxContrast] + } else { + send client windowColormap $val + } + + set cpEnhanceId 0 + return done +} + +proc cpInvert args { + global enhancement frame + set contrast [lindex $enhancement($frame) 2] + send client windowColormap [lindex $enhancement($frame) 1] \ + [expr -1.0 * $contrast] +} + +proc cpDisplayEnhancement {param old new} { + global cpEnhanceId maxContrast cpEnhanceDisable + global cpListItem enhancement frame + + if {!$frame} \ + return + set enhance $enhancement($frame) + if {[llength $enhance] < 3} \ + return + + set colortable [lindex $enhance 0] + set offset [lindex $enhance 1] + set scale [lindex $enhance 2] + + send colordata set label [format "-- %s --\nCon %0.2f Brt %0.2f" \ + $colortable $scale $offset] + + if {$colortable != $cpListItem} { + send colorlist highlight $colortable + set cpListItem $colortable + } + + if {!$cpEnhanceId && !$cpEnhanceDisable} { + set cpEnhanceDisable 1 + send contrastSlider moveThumb [expr abs($scale) / $maxContrast] + send brightnessSlider moveThumb $offset + set cpEnhanceDisable 0 + } +} + +foreach i {enhancement frame} { + send $i addCallback cpDisplayEnhancement +} +send contrastSlider addCallback cpSetEnhancement scroll +send brightnessSlider addCallback cpSetEnhancement scroll +send invertButton addCallback cpInvert + + +# Colortable display and selection. +# ------------------------------- +set cpScrollHeight 0 + +proc cpSetColorList {param old new} { + send colorlist setList $new resize +}; send colortables addCallback cpSetColorList + +proc cpResizeScrollbar {widget cbtype flags x y w h cw ch} { + global cpScrollHeight + set newHeight [expr $ch - $h] + if {$newHeight && $newHeight != $cpScrollHeight} { + send colorlistScroll setScrollbar 0.0 [expr double($h) / $ch] + set rowHeight [send colorlist get rowHeight] + set rowSpacing [send colorlist get rowSpacing] + send colorlistScroll set increment [expr ($ch <= $h) ? 0 : \ + "double ($rowHeight + $rowSpacing) / ($ch - $h)"] + set cpScrollHeight $newHeight + } +}; send colorlistPort addCallback cpResizeScrollbar + +proc cpScrollColorlist {widget cbtype pos} { + global cpScrollHeight + send colorlist set y [expr -int($cpScrollHeight * $pos)] +}; send colorlistScroll addCallback cpScrollColorlist scroll + +proc cpSelectColor {widget cbtype selections indices} { + global colortable + foreach selection $selections { + send client setColormap $selection + } +}; send colorlist addCallback cpSelectColor + + +# Frame blink. +# ------------------------------- +send BRtext set label $blinkRate + +proc cpSetBlinkRate {widget args} { + global blinkRate + if {$widget == "BRincrease"} { + if {$blinkRate < 0.01} { + set blinkRate 0.125 + } else { + set blinkRate [expr $blinkRate * 2.0] + } + } else { + set blinkRate [expr $blinkRate / 2.0] + if {$blinkRate < 0.01} { + set blinkRate 0 + } + } + send BRtext set label $blinkRate +} +foreach widget {BRincrease BRdecrease} { + send $widget addCallback cpSetBlinkRate +} + +proc cpSetBlinkFrame {widget args} { + global blinkFrames nframes + + set frame [send $widget get label] + if {$frame == " "} { + set frame 1 + } else { + incr frame + if {$frame > $nframes} { + set frame " " + } + } + send $widget set label $frame + + set blinkFrames {} + foreach i {1 2 3 4} { + set frame [send blinkFrame$i get label] + if {$frame != " "} { + lappend blinkFrames $frame + } + } +}; foreach i $frames {send blinkFrame$i addCallback cpSetBlinkFrame} + +proc cpBlink {widget args} { + global blinkRate blinkId + + if {$blinkRate < 0.01} { + send $widget set state 0 + blink + } elseif {($blinkId != 0) != [send $widget get state]} { + toggleBlink + } +}; send blinkButton addCallback cpBlink + +proc cpResetBlink args { + global blinkRate blinkFrames blinkIndex frames + global defaultBlinkRate + + foreach i $frames { + send blinkFrame$i set label " " + } + set blinkRate $defaultBlinkRate + send BRtext set label $blinkRate + set blinkIndex 0 +}; send blinkReset addCallback cpResetBlink + +proc cpTraceBlink {name element op} { + upvar $name blinkId + send blinkButton set state [expr $blinkId != 0] +}; trace variable blinkId w cpTraceBlink + +proc cpSetBlinkFrames {param old new} { + global blinkFrames frames + set blinkFrames {} + foreach i $frames { + if {$i <= $new} { + lappend blinkFrames $i + } + } + cpResetBlink + set button 1 + foreach i $blinkFrames { + send blinkFrame$button set label $i + incr button + } +}; send nframes addCallback cpSetBlinkFrames + +proc cpRegisterFrames args { + global blinkFrames + send client registerFrames \{$blinkFrames\} +}; send registerButton addCallback cpRegisterFrames + +proc cpMatchFrames args { + global blinkFrames + send client matchFrames \{$blinkFrames\} +}; send matchButton addCallback cpMatchFrames + + +# Options buttons. +# ------------------------------- +proc cpSetPanner {widget args} { + setPanner [send $widget get on] +}; send pannerButton addCallback cpSetPanner + +proc cpTracePanner {name element op} { + upvar $name panner_enable + send pannerButton set on $panner_enable +}; trace variable panner_enable w cpTracePanner + +proc cpSetMagnifier {widget args} { + setMagnifier [send $widget get on] +}; send magnifierButton addCallback cpSetMagnifier + +proc cpTraceMagnifier {name element op} { + upvar $name magnifier_enable + send magnifierButton set on $magnifier_enable +}; trace variable magnifier_enable w cpTraceMagnifier + +proc cpSetCoordsBox {widget args} { + setTrack [send $widget get on] +}; send coordsBoxButton addCallback cpSetCoordsBox + +proc cpTraceCoordsBox {name element op} { + upvar $name track_enable + send coordsBoxButton set on $track_enable +}; trace variable track_enable w cpTraceCoordsBox + +proc cpSetWarnings args { + global warnings + set warnings [send warningsButton get on] +}; send warningsButton addCallback cpSetWarnings + +proc cpSetAutoscale args { + set value [send autoscaleButton get on] + send client setOption autoscale [expr {$value ? "True" : "False"}] +}; send autoscaleButton addCallback cpSetAutoscale + +proc cpTrackAutoscale {param old new} { + send autoscaleButton set on [true $new] +}; send autoscale addCallback cpTrackAutoscale + +proc cpSetAntialias args { + set value [send antialiasButton get on] + send client setOption antialias [expr {$value ? "True" : "False"}] +}; send antialiasButton addCallback cpSetAntialias + +proc cpTrackAntialias {param old new} { + send antialiasButton set on [true $new] +}; send antialias addCallback cpTrackAntialias + +proc cpSetTileFrames args { + global blinkFrames + set value [send tileFramesButton get on] + send client setOption tileFrames \ + [expr {$value ? "True" : "False"}] \{ $blinkFrames \} +}; send tileFramesButton addCallback cpSetTileFrames + +proc cpTrackTileFrames {param old new} { + send tileFramesButton set on [true $new] +}; send tileFrames addCallback cpTrackTileFrames + +proc tileFramesToggle args { + set value [send tileFramesButton get on] + send tileFramesButton set on [expr !$value] + cpSetTileFrames +} + + +# Warning dialog. This pops up a dialog box with the given warning message, +# and executes the given command if the user pushes OK. +# +# Usage: Wexec object message [ok_action [cancel_action]] +# +# The message text is displayed in a popup and the user hits the ok or +# cancel button to close the popup. If an action has been posted for the +# button selected then it is sent to the named object. Only one alert can +# be in effect at a time; posting another alert before the first has +# completed causes the new alert to override the first. + +set W_object "" +set W_ok_command "" +set W_cancel_command "" + +proc Wexec {object msg args} { + global W_object W_ok_command W_cancel_command + set W_object $object + set W_ok_command [lindex $args 0] + set W_cancel_command [lindex $args 1] + send warnText set label $msg + send warning map +} + +proc Wbutton {widget args} { + global W_object W_ok_command W_cancel_command + switch $widget { + warnOk { if [llength $W_ok_command] { + send $W_object $W_ok_command + } + } + warnCancel { if [llength $W_cancel_command] { + send $W_object $W_cancel_command + } + } + } + send warning unmap +}; foreach w {warnOk warnCancel} {send $w addCallback Wbutton} + +# The parameter "alert" is used to forward alerts from the client. +proc setAlert {param old new} { + Wexec client [lindex $new 0] [lindex $new 1] [lindex $new 2] +}; send alert addCallback setAlert + + +# Global control panel buttons. +# ------------------------------- +proc cpInitialize args { + send imagewin setCursorType busy + send client initialize + send imagewin setCursorType idle +} +send initializeButton addCallback cpInitialize +send normalizeButton addCallback normalize + +# Temporarily deactivate some buttons. +send optimizeButton setSensitive false + + +# INFO box. +#----------- +proc infoDone args { send info unmap } +send infoDone addCallback infoDone +proc infoClear args { send infoText set string "" } +send infoUpdate addCallback infoUpdate +send infoClear addCallback infoClear + +proc infoUpdate args { + global version frame nframes + global frameWidth frameHeight frameDepth + global enhancement + global cpXcen cpYcen + global cpXmag cpYmag cpXscale cpYscale + + if {$frame == 0} { + send infoText set string "initializing display..." + } else { + set line1 $version + set line2 [format "Image:\t\t%s" [send imageTitle get label]] + set line3 [format "Frame %d of %d:\t%d x %d" \ + $frame $nframes $frameWidth $frameHeight] + set cmap [lindex $enhancement($frame) 0] + set brt [lindex $enhancement($frame) 1] + set con [lindex $enhancement($frame) 2] + set line4 [format "Colormap:\t%s" $cmap] + set line5 [format "Enhancement:\tBrt=%s Cont=%s" $brt $con] + + set center [format "X: %0.1f\n\t\tY: %0.1f" $cpXcen $cpYcen] + set line6 [format "Center:\t\t%s" $center] + + set line7 [format "Zoom:\t\tX: %0.2f\n\t\tY: %0.2f" $cpXmag $cpYmag] + set line8 [format "Scale:\t\tX: %0.2f\n\t\tY: %0.2f" $cpXscale $cpYscale] + + send infoText set string [ + format "%s\n\n%s\n%s\n%s\n%s\n%s\n%s\n%s\n\n" \ + $line1 $line2 $line3 $line4 $line5 $line6 $line7 $line8 + ] + } +} +foreach param { frame frameView nframes frameSize frameTitle enhancement } { + send $param addCallback infoUpdate +} + + +# Cursor positioning routines +#---------------------------- + +proc move_cursor { xstep ystep args } { + set raster 0 + send imagewin getCursorPos rx ry + send imagewin setCursorPos [expr $rx + $xstep] [expr $ry + $ystep] $raster +} + + +# Print Panel Functions. +#------------------------ +# Global variables needed for the print setup panel + +set printColor prGrayButton +set orientation epsPortButton +set page_size epsLetterButton +set imageScale 100 + +set epsWidgets { epsPageGroup epsOrientLabel epsSizeLabel + epsPortButton epsLandButton epsLetterButton epsLegalButton epsA4Button + ScaleFrame SCdecrease SCtext SCincrease +} + + +proc psetup_init args { + global printColor orientation page_size imageScale #format + + set_printer toPrinter callback 1 + send SCtext set label [ format "%d %%" $imageScale ] + send $printColor set on true + send $orientation set on true + send $page_size set on true +} + + +proc doPrintOptions { param old new } { + global imageScale page_size orientation imageScale printColor + global warnings + + send printStatus set label {} + set val [join [lrange $new 1 end] " "] + + # print [format "doPrintOptions %s = %s" [lindex $new 0] $val] + switch [lindex $new 0] { + autoscale { if { $val == "True" } { + send epsscaleButton set on true + } elseif { $val == "False" } { + send epsscaleButton set on false + } + } + autorotate { if { $val == "True" } { + send autorotateButton set on true + } elseif { $val == "False" } { + send autorotateButton set on false + } + } + maxaspect { if { $val == "True" } { + send aspectButton set on true + } elseif { $val == "False" } { + send aspectButton set on false + } + } + annotate { if { $val == "True" } { + send annotateButton set on true + } elseif { $val == "False" } { + send annotateButton set on false + } + } + compress { if { $val == "True" } { + send compressButton set on true + } elseif { $val == "False" } { + send compressButton set on false + } + } + orientation { send $orientation set on false + if { $val == "portrait" } { + send epsPortButton set on true + set orientation epsPortButton + } elseif { $val == "landscape" } { + send epsPortButton set on false + set orientation epsLandButton + } + } + papersize { send $page_size set on false + if { $val == "letter" } { + send epsLetterButton set on true + set page_size epsLetterButton + } elseif { $val == "legal" } { + send epsLegalButton set on true + set page_size epsLegalButton + } elseif { $val == "A4" } { + send epsA4Button set on true + set page_size epsA4Button + } + } + imscale { set imageScale $val + send SCtext set label [ format "%d %%" $imageScale ] + } + colortype { send $printColor set on false + if { $val == "gray" } { + send prGrayButton set on true + set printColor prGrayButton + } elseif { $val == "pseudo" } { + send prPseudoButton set on true + set printColor prPseudoButton + } elseif { $val == "rgb" } { + send prRGBButton set on true + set printColor prRGBButton + } + } + printerName { if [send toPrinter get on] { + send printlist highlight $val + } + } + printCmd { if [send toPrinter get on] { + send printcmd set string $val + } + } + printFile { if [send toFile get on] { + send printcmd set string $val + } + } + deviceType { if { $val == "Printer" } { + send printerLabel set label "Print Command:" + send toPrinter set on true + send toFile set on false + } elseif { $val == "File" } { + send printerLabel set label "File Name:" + send toPrinter set on false + send toFile set on true + send printlist unhighlight + } + } + + status { send printStatus set label $val + send server synchronize + } + warning { if {$warnings} { Wexec server $val } + } + } +}; send printOptions addCallback doPrintOptions + + +# Print options procedures. +# ------------------------------- + +set prOptsWidgets { + toPrinter toFile + prGrayButton prPseudoButton prRGBButton + epsLandButton epsPortButton + epsLetterButton epsLegalButton epsA4Button + SCincrease SCdecrease +} +set prSimpleOptions { + epsscaleButton autorotateButton aspectButton annotateButton compressButton +} + +proc prPrintCommand { widget cbtype args } { + if [send toFile get on] { + send client setPrintOption printfile $args + send printStatus set label [format "output file set to %s" $args] + } else { + send client setPrintOption printcmd $args + send printStatus set label [format "print command set to %s" $args] + } +}; send printcmd addCallback prPrintCommand + +proc prOptionToggle { widget cbtype args } { + global imageScale + + # Handle the image scale widgets first. + #print [ format "prOptionToggle %s" $widget ] + switch $widget { + SCincrease { set scale [expr $imageScale + 5] + send client setPrintOption imscale $scale + return + } + SCdecrease { set scale [ expr $imageScale - 5 ] + send client setPrintOption imscale $scale + return + } + } + + # If it's not one of those it must be one of the radio toggles. + set val [ send $widget get on ] + #print [ format "prOptionToggle %s = %s" $widget $val ] + if { $val == 1 } { + switch $widget { + toPrinter { send client setPrintOption devicetype printer } + toFile { send client setPrintOption devicetype file } + + epsLandButton { send client setPrintOption orientation landscape } + epsPortButton { send client setPrintOption orientation portrait } + + epsLetterButton { send client setPrintOption papersize letter } + epsLegalButton { send client setPrintOption papersize legal } + epsA4Button { send client setPrintOption papersize A4 } + + prGrayButton { send client setPrintOption colortype gray } + prPseudoButton { send client setPrintOption colortype pseudo } + prRGBButton { send client setPrintOption colortype rgb } + } + } else { + send $widget set on true + } + +} ; foreach w $prOptsWidgets { send $w addCallback prOptionToggle } + +proc prSimpleOptionToggle { widget args } { + set val [ send $widget get on ] + #print [ format "prSimpleOptionToggle %s = %s" $widget $val ] + + switch $widget { + epsscaleButton { send client setPrintOption autoscale $val } + autorotateButton { send client setPrintOption autorotate $val } + aspectButton { send client setPrintOption maxaspect $val } + annotateButton { send client setPrintOption annotate $val } + compressButton { send client setPrintOption compress $val } + } +} ; foreach w $prSimpleOptions { send $w addCallback prSimpleOptionToggle } + + + +# Printer display and selection. +# ------------------------------- +set psScrollHeight 0 + +proc psSetPrintList {param old new} { + send printlist setList $new resize + send printlist highlight 0 +}; send printerList addCallback psSetPrintList + +proc psResizeScrollbar {widget cbtype flags x y w h cw ch} { + global psScrollHeight + set newHeight [expr $ch - $h] + if {$newHeight && $newHeight != $psScrollHeight} { + send printlistScroll setScrollbar 0.0 [expr double($h) / $ch] + set rowHeight [send printlist get rowHeight] + set rowSpacing [send printlist get rowSpacing] + send printlistScroll set increment [expr ($ch <= $h) ? 0 : \ + "double ($rowHeight + $rowSpacing) / ($ch - $h)"] + set psScrollHeight $newHeight + } +}; send printlistPort addCallback psResizeScrollbar + +proc psScrollPrintlist {widget cbtype pos} { + global psScrollHeight + send printlist set y [expr -int($psScrollHeight * $pos)] +}; send printlistScroll addCallback psScrollPrintlist scroll + +proc psSelectPrint {widget cbtype selections indices} { + global printerlist + foreach selection $selections { + send client setPrintOption printername $selection + } +}; send printlist addCallback psSelectPrint + + +proc printQuit { args } { + send print_panel unmap +} ; send donePrint addCallback printQuit + +proc Print { args } { + global winWidth winHeight + send imagewin setCursorType busy + + # Get the print command or file template if not previous reset. + set val [ send printcmd get string ] + if [send toFile get on] { + send client setPrintOption printfile $val + } else { + send client setPrintOption printcmd $val + } + setPrintCorners 0 [expr $winWidth - 1] [expr $winHeight - 1] 0 + + send client print + send imagewin setCursorType idle +} ; send okayPrint addCallback Print + + +# setPrintCorners -- Tell the client the WCS of the image being printed. + +proc setPrintCorners { lx ly ux uy args } { + global winWidth winHeight + + # Convert raw corner screen coordinates to frame buffer raster coords. + send imagewin unmapPixel $lx $ly raster llx lly + set llx [expr "int ($llx)"] + set lly [expr "int ($lly)"] + set str [send client encodewcs $llx $lly] + scan $str "%g %g %g" llx_r lly_r z + set llx_i [expr "int ($llx_r)"] + set lly_i [expr "int ($lly_r)"] + + send imagewin unmapPixel $ux $uy raster urx ury + set urx [expr "int ($urx)"] + set ury [expr "int ($ury)"] + set str [send client encodewcs $urx $ury] + scan $str "%g %g %g" urx_r ury_r z + set urx_i [expr "int ($urx_r)"] + set ury_i [expr "int ($ury_r)"] + + send client setPrintOption corners $llx_i $lly_i $urx_i $ury_i +} + + +#-------------------------- +# Save panel functions. +#-------------------------- +# Global variables needed for the save setup panel + +set format rasButton +set saveColor svPseudoButton + +set fileFmtButtons { + rasButton gifButton jpegButton tiffButton + fitsButton x11Button pnmButton rawButton +} + + +# Format group procedures. +#--------------------------------- + +# Select a format. + +proc set_format { widget func state args } { + global format saveColor + + send $format set on false + if {$widget == $format} { + send $widget set on true + } else { + switch $widget { + rasButton { send client setSaveOption format ras } + gifButton { send client setSaveOption format gif } + jpegButton { send client setSaveOption format jpeg } + tiffButton { send client setSaveOption format tiff } + fitsButton { send client setSaveOption format fits } + x11Button { send client setSaveOption format x11 } + pnmButton { send client setSaveOption format pnm } + rawButton { send client setSaveOption format raw } + } + } +} ; foreach fmt $fileFmtButtons { send $fmt addCallback set_format } + +proc setSaveFile { widget cbtype args } { + send client setSaveOption fname $args + send saveStatus set label [format "output file set to %s" $args] +}; send saveFile addCallback setSaveFile + + +proc doSaveOptions { param old new } { + global format saveColor + global warnings + + send saveStatus set label {} + set val [join [lrange $new 1 end] " "] + + #print [format "doSaveOptions %s = %s" [lindex $new 0] $val] + switch [lindex $new 0] { + format { + # Now (de)sensitize the color options depending on the format, + # force the color choice when needed. + send $format set on false + switch [lindex $val 0] { + ras { #send svRGBButton setSensitive false + send svPseudoButton setSensitive true + set format rasButton + } + gif { send svRGBButton setSensitive false + send svPseudoButton setSensitive true + if {$saveColor == "svRGBButton"} { + send $saveColor set on false + send svPseudoButton set on true + set saveColor svPseudoButton + } + set format gifButton + } + jpeg { send svRGBButton setSensitive true + send svPseudoButton setSensitive true + set format jpegButton + } + tiff { send svRGBButton setSensitive false + send svPseudoButton setSensitive true + set format tiffButton + } + fits { send svRGBButton setSensitive false + send svPseudoButton setSensitive false + send $saveColor set on false + send svGrayButton set on true + set saveColor svGrayButton + set format fitsButton + } + x11 { send svRGBButton setSensitive true + send svPseudoButton setSensitive true + set format x11Button + } + pnm { send svRGBButton setSensitive true + send svPseudoButton setSensitive true + set format pnmButton + } + raw { send svRGBButton setSensitive true + send svPseudoButton setSensitive true + set format rawButton + } + } + send $format set on true + } + color { send $saveColor set on false + switch [lindex $val 0] { + grayscale { send svGrayButton set on true + set saveColor svGrayButton + } + pseudocolor { send svPseudoButton set on true + set saveColor svPseudoButton + } + rgb { send svRGBButton set on true + set saveColor svRGBButton + } + } + } + fname { send saveFile set string $val + } + status { send saveStatus set label $val + send server synchronize + } + text { send saveData set label $val + } + warning { if {$warnings} { Wexec server $val } + } + } +} ; send saveOptions addCallback doSaveOptions + + +# Color group procedures. +#--------------------------------- +send svGrayButton addCallback "send client setSaveOption color grayscale" +send svPseudoButton addCallback "send client setSaveOption color pseudocolor" +send svRGBButton addCallback "send client setSaveOption color rgb" + +send doneSave addCallback "send save_panel unmap" + +proc Save { args } { + send imagewin setCursorType busy + + # Get the print command or file template if not previous reset. + set val [ send saveFile get string ] + send client setSaveOption fname $val + send saveStatus set label [format "output file set to %s" $args] + + send client save + send imagewin setCursorType idle + #send save_panel unmap +} ; send okaySave addCallback Save + + +# ------------------------------------------ +# Image and objects list display and section +# ------------------------------------------ + +set load_frame 1 + +proc filesTextHighlight { widget event args } { + if { $event == "enterNotify" } { + send $widget set displayCaret True + } elseif { $event == "leaveNotify" } { + send $widget set displayCaret False + } +} +send imtemplateText addEventHandler filesTextHighlight enterWindowMask +send imtemplateText addEventHandler filesTextHighlight leaveWindowMask +send fnameText addEventHandler filesTextHighlight enterWindowMask +send fnameText addEventHandler filesTextHighlight leaveWindowMask + +send rootButton addCallback "send client setLoadOption root" +send homeButton addCallback "send client setLoadOption home" +send upButton addCallback "send client setLoadOption up" +send rescanButton addCallback "send client setLoadOption rescan" + +proc setPattern { widget mode pattern args } { + send client setLoadOption pattern $pattern +} ; send imtemplateText addCallback setPattern + +proc doLoadOptions { param old new } { + global warnings loadP_up + + set val [ join [lrange $new 1 end] " " ] + + #print [format "doLoadOptions %s = %s" [lindex $new 0] $val] + switch [lindex $new 0] { + pattern { send imtemplateText set string [format "%s" $val ] } + curdir { send dirLabel set label [format "Directory: %s" $val ] } + newfile { send fnameText set string $val + if { [ string last / $val ] < 0 } { + if { [send browseToggle get on] == 0 } { + send load_panel unmap + set loadP_up 0 + } + } + } + status { send filesStatus set label $val + if { ! $loadP_up } { send imageTitle set label $val } + send server synchronize + } + warning { if {$warnings} { Wexec server $val } } + gray { send grayToggle set on $val } + } +} ; send loadOptions addCallback doLoadOptions + +proc toggleGraymap { widget args } { + send client setLoadOption gray [ send grayToggle get on ] +} ; send grayToggle addCallback toggleGraymap + +proc fileLoad { widget mode fname args } { + global load_frame loadP_up + send imagewin setCursorType busy + send client load $fname $load_frame + set fpath [format "%s/%s" \ + [string range [send dirLabel get label] 12 end] \ + $fname ] + if { [ string last / $fname ] < 0 && [ file isfile $fpath] == 1 } { + if { [send browseToggle get on] == 0 } { + send load_panel unmap + set loadP_up 0 + } + } + send imagewin setCursorType idle +} ; send fnameText addCallback fileLoad + + +set imlistScrollheight 0 + +proc setFileList {param old new} { + send imageList setList $new resize +}; send filelist addCallback setFileList + +proc flresizeScrollbar { widget cbtype flags x y w h cw ch } { + global imlistScrollheight + set newheight [expr $ch - $h] + if { $newheight != $imlistScrollheight } { + send imlistScrollbar setScrollbar 0.0 [expr double($h) / $ch] + set imlistScrollheight $newheight + } +} ; send imlistPorthole addCallback flresizeScrollbar + +proc flscrollList { widget cbtype pos } { + global imlistScrollheight + send imageList set y [expr -int($imlistScrollheight * $pos)] +} ; send imlistScrollbar addCallback flscrollList scroll + +proc flSelectPrint {widget cbtype selections args} { + global load_frame loadP_up + foreach selection $selections { + send client load $selection $load_frame + if { [ string last / $selection ] < 0 } { + if { [send browseToggle get on] == 0 } { + send load_panel unmap + set loadP_up 0 + } + } + } +}; send imageList addCallback flSelectPrint + +proc fileSetFrame {widget args} { + global nframes load_frame + + set frame [send $widget get label] + if {$frame == $nframes} { + set frame 1 + } else { + incr frame + } + send $widget set label $frame + set load_frame $frame +}; send frameFrame addCallback fileSetFrame + +proc fileLoadB args { + global load_frame loadP_up + send imagewin setCursorType busy + set fname [send fnameText get string] + if {$fname == ""} { + Wexec client "No image name specified" + } else { + send client load $fname $load_frame + set fpath [format "%s/%s" \ + [string range [send dirLabel get label] 12 end] \ + $fname ] + if { [ string last / $fname ] < 0 && [ file isfile $fpath] == 1 } { + if { [send browseToggle get on] == 0 } { + send load_panel unmap + set loadP_up 0 + } + } + send imagewin setCursorType idle + } +} ; send filesLoadButton addCallback fileLoadB + +proc fileQuit args { + send load_panel unmap + set loadP_up 0 +} ; send filesCloseButton addCallback fileQuit + + +# More Panel toggles + +proc infoPanel args { + global infoP_up + if {$infoP_up} { + send info unmap + set infoP_up 0 + } else { + send info map + set infoP_up 1 + } +} + +proc pannerPanel args { + global panner_enable + setPanner [expr !$panner_enable] +} + +proc magnifierPanel args { + global magnifier_enable + setMagnifier [expr !$magnifier_enable] +} + +proc wcsPanel args { + global track_enable + setTrack [expr !$track_enable] +} + +proc loadPanel args { + global loadP_up + if {$loadP_up} { + send load_panel unmap + set loadP_up 0 + } else { + send client setLoadOption rescan + send load_panel map + set loadP_up 1 + } +} + +proc savePanel args { + global saveP_up + if {$saveP_up} { + send save_panel unmap + set saveP_up 0 + } else { + send save_panel map + set saveP_up 1 + } +} + +proc printPanel args { + global printP_up + if {$printP_up} { + send print_panel unmap + set printP_up 0 + } else { + send print_panel map + set printP_up 1 + } +} + + +#------------------------------------ +# Define procedure for the help panel +#------------------------------------ + +# Help Panel Bitmaps +#------------------- +createBitmap iraf_logo 45 45 { +0xff, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f, 0xff, 0xff, 0xff, 0xff, +0xff, 0x3f, 0xfc, 0xff, 0xff, 0xff, 0xff, 0x3f, 0xfc, 0xff, 0xff, 0xff, +0xff, 0x3f, 0xf8, 0xff, 0xff, 0xff, 0xff, 0x3f, 0xf0, 0xff, 0xff, 0xff, +0xff, 0x3f, 0xf0, 0xff, 0xff, 0xff, 0xff, 0x3f, 0xe0, 0xff, 0xff, 0xff, +0xff, 0x3f, 0xc0, 0xff, 0xff, 0xff, 0xff, 0x3f, 0xc0, 0xff, 0xff, 0xff, +0xff, 0x3f, 0x80, 0xff, 0xff, 0xff, 0xff, 0x3f, 0x80, 0xfc, 0xff, 0xff, +0xff, 0x3f, 0x84, 0xf8, 0xff, 0xff, 0xff, 0x1f, 0x84, 0xf4, 0xff, 0xff, +0xff, 0x1b, 0x04, 0x09, 0x00, 0xfc, 0xff, 0x11, 0x04, 0x11, 0xf8, 0xff, +0x7f, 0x10, 0x04, 0x21, 0xc0, 0xff, 0x1f, 0x10, 0x04, 0x41, 0xf0, 0xff, +0x00, 0x18, 0x04, 0x01, 0xe0, 0xff, 0x00, 0x18, 0x00, 0x81, 0xc0, 0xff, +0x00, 0x08, 0x00, 0x01, 0xe0, 0xff, 0x07, 0x08, 0x00, 0x01, 0xf1, 0xff, +0x1f, 0x08, 0x80, 0x21, 0xf0, 0xff, 0xff, 0x08, 0xc0, 0x41, 0xf4, 0xff, +0xff, 0x08, 0xc0, 0x41, 0xf8, 0xff, 0xff, 0x09, 0xc0, 0xc1, 0xf0, 0xff, +0xff, 0x0b, 0x80, 0xc1, 0xf1, 0xff, 0xff, 0x07, 0x80, 0x81, 0xe1, 0xff, +0xff, 0x07, 0x80, 0x01, 0xc1, 0xff, 0xff, 0x07, 0x00, 0x01, 0xc0, 0xff, +0xff, 0x07, 0xc2, 0x05, 0x81, 0xff, 0xff, 0x07, 0xf2, 0x07, 0x81, 0xff, +0xff, 0x07, 0xf2, 0x17, 0x03, 0xff, 0xff, 0x03, 0xfa, 0x7f, 0x02, 0xfe, +0xff, 0x03, 0xfe, 0xff, 0x02, 0xfe, 0xff, 0x03, 0xfe, 0xff, 0x03, 0xfc, +0xff, 0x03, 0xff, 0xff, 0x07, 0xfc, 0xff, 0x83, 0xff, 0xff, 0x0f, 0xf8, +0xff, 0xc1, 0xff, 0xff, 0x3f, 0xf0, 0xff, 0xe1, 0xff, 0xff, 0x7f, 0xf8, +0xff, 0xf1, 0xff, 0xff, 0xff, 0xf0, 0xff, 0xf8, 0xff, 0xff, 0xff, 0xe0, +0xff, 0xf8, 0xff, 0xff, 0xff, 0xe3, 0xff, 0xfc, 0xff, 0xff, 0xff, 0xe7, +0xff, 0xfc, 0xff, 0xff, 0xff, 0xef}; send helpIRAFLogo "set bitmap iraf_logo" + +createBitmap noao_logo 45 45 { +0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, +0xff, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0x03, 0xfe, 0xff, 0xff, +0xff, 0xff, 0x01, 0xfc, 0xff, 0xff, 0xff, 0xff, 0x00, 0xf8, 0xff, 0xff, +0xff, 0xff, 0x00, 0xf8, 0xff, 0xff, 0xff, 0xff, 0x00, 0xf8, 0xff, 0xff, +0xff, 0x7f, 0x00, 0xf0, 0xff, 0xff, 0xff, 0xff, 0x00, 0xf8, 0xff, 0xff, +0xff, 0xff, 0x00, 0xf8, 0xff, 0xff, 0xff, 0xff, 0x00, 0xf8, 0xff, 0xff, +0xff, 0xff, 0x01, 0xfc, 0xff, 0xff, 0xff, 0xff, 0x03, 0xfe, 0xff, 0xff, +0xff, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, +0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xff, 0xff, 0xff, +0xff, 0xff, 0x8f, 0xff, 0xff, 0xff, 0xff, 0xff, 0x8f, 0xff, 0xff, 0xff, +0xff, 0xff, 0x07, 0xff, 0xff, 0xff, 0xff, 0xff, 0x07, 0xff, 0xff, 0xff, +0xff, 0xff, 0x03, 0xfe, 0xff, 0xff, 0xff, 0xff, 0x03, 0xfe, 0xff, 0xff, +0xff, 0xff, 0x01, 0xfc, 0xff, 0xff, 0xff, 0xff, 0x01, 0xfc, 0xff, 0xff, +0xff, 0xff, 0x00, 0xf8, 0xff, 0xff, 0xff, 0x7f, 0x00, 0xf0, 0xff, 0xff, +0xff, 0x7f, 0x00, 0xf0, 0xff, 0xff, 0xff, 0x3f, 0x00, 0xe0, 0xff, 0xff, +0xff, 0x3f, 0x00, 0xe0, 0xff, 0xff, 0xff, 0x1f, 0x00, 0xc0, 0xff, 0xff, +0xff, 0x1f, 0x00, 0xc0, 0xff, 0xff, 0xff, 0x0f, 0x00, 0x80, 0xff, 0xff, +0xff, 0x0f, 0x00, 0x80, 0xff, 0xff, 0xff, 0x07, 0x00, 0x00, 0xff, 0xff, +0xff, 0x03, 0x00, 0x00, 0xfe, 0xff, 0xff, 0x03, 0x00, 0x00, 0xfe, 0xff, +0xff, 0x01, 0x00, 0x00, 0xfc, 0xff, 0xff, 0x01, 0x00, 0x00, 0xfc, 0xff, +0xff, 0x00, 0x00, 0x00, 0xf8, 0xff, 0xff, 0x00, 0x00, 0x00, 0xf8, 0xff, +0x7f, 0x00, 0x00, 0x00, 0xf0, 0xff, 0x7f, 0x00, 0x00, 0x00, 0xf0, 0xff, +0x3f, 0x00, 0x00, 0x00, 0xe0, 0xff}; send helpNOAOLogo "set bitmap noao_logo" + +# Stuff for keeping track of visited anchors. +set links { 0 } +set linkIndex 0 +set visited(0) empty + +send helpInfo1 set label $version + +proc Help args { + global helpP_up + if {$helpP_up == 0} { + send client help + } else { + send help_panel unmap + set helpP_up 0 + } +} + +proc helpPanel args { + global helpP_up + if {$helpP_up} { + send help_panel unmap + set helpP_up 0 + } else { + send help_panel map + set helpP_up 1 + } +} + +proc helpQuit args { + global helpP_up + send help_panel unmap + set helpP_up 0 + send helpButton set state 0 + send helpText setText "" +}; send helpClose addCallback helpQuit + +proc getHelpText { param old new } { + send helpText setText $new + helpPanel +}; send help addCallback getHelpText + +proc anchorSelected {widget cbtype event text href args} { + global visited links linkIndex + set anchID [send helpText anchorToId $href] + set visited($href) 1 + if {$linkIndex == 0} { + send helpBack set sensitive True + if {[lindex $links 1] != $anchID} { + set links { 0 } + send helpForward set sensitive False + } + } + if {$linkIndex > 0 && [lindex $links [expr $linkIndex + 1]] != $anchID} { + set links [lrange $links 0 $linkIndex] + } + if {[lindex $links [expr $linkIndex + 1]] != $anchID} { + lappend links $anchID + incr linkIndex + } else { + send helpForward set sensitive False + incr linkIndex + } + if {$linkIndex == [expr [llength $links] - 1]} { + send helpForward set sensitive False + } + send helpText gotoId $anchID + send helpText retestAnchors +}; send helpText addCallback anchorSelected anchor + +proc testAnchor {widget cbtype href} { + global visited + return [info exists visited($href)] +}; send helpText addCallback testAnchor testAnchor + + +# Callbacks to position forwards and backwards in link list. +proc hlpForward args { + global links linkIndex + incr linkIndex + if {$linkIndex <= [llength $links]} { + set anchID [lindex $links $linkIndex] + send helpText gotoId $anchID + send helpText retestAnchors + if {$linkIndex == [expr [llength $links] - 1]} { + send helpForward set sensitive False + send helpBack set sensitive True + } else { + send helpBack set sensitive True + } + } else { + incr linkIndex -1 + } +}; send helpForward addCallback hlpForward + +proc hlpBack args { + global links linkIndex + incr linkIndex -1 + if {$linkIndex >= 0} { + set anchID [lindex $links $linkIndex] + send helpText gotoId $anchID + send helpText retestAnchors + if {$linkIndex == 0} { send helpBack set sensitive False } + if {$linkIndex >= 0} { send helpForward set sensitive True } + } else { + incr linkIndex 1 + } +}; send helpBack addCallback hlpBack + +proc hlpHome args { + global links linkIndex + set links { 0 } + set linkIndex 0 + send helpText gotoId 0 + send helpForward set sensitive False + send helpBack set sensitive False +}; send helpHome addCallback hlpHome + + + +#------------------------------------ +# Define some TCL debug procedures. +#------------------------------------ + +set tclP_up 0 + +proc tclCommandClear {widget args} { send tclEntry set string "" } +proc tclCommandExecute {widget args} { send server [send tclEntry {get string}] +} +proc tclCommand {widget mode command args} { send server $command } +proc tclClose {widget args} { send tclShell unmap } +proc tclOpen { args } { + global tclP_up + send tclShell map + set tclP_up 1 +} + +proc tclPanel args { + global tclP_up + if {$tclP_up} { + send tclShell unmap + set tclP_up 0 + } else { + send tclShell map + set tclP_up 1 + } +} + +send tclClear addCallback tclCommandClear +send tclExecute addCallback tclCommandExecute +send tclEntry addCallback tclCommand +send tclcloseButton addCallback tclClose + diff --git a/vendor/x11iraf/ximtool/OLD/ximtool-mag.html b/vendor/x11iraf/ximtool/OLD/ximtool-mag.html new file mode 100644 index 00000000..96a959f7 --- /dev/null +++ b/vendor/x11iraf/ximtool/OLD/ximtool-mag.html @@ -0,0 +1,697 @@ + +XImtool On-Line Help Summary + +

Welcome to XImtool V1.1

+ +XImtool is an image display server developed by the IRAF Project at the +National Optical Astronomy Observatories. To view images you need +client software (such as IRAF) to load images into the display, or it can +load images directly when run as a standalone task. XImtool is +interchangeable with older display servers such as SAOimage / +IMTOOL and with newer servers like SAOtng, but offers many new +features not available elsewhere. +

+More detailed help is available on the following topics: +

+
Basic Usage:
+
+
+
Advanced Features:
+
+

+Please contact iraf@noao.edu with comments, bugs, or suggestions. +

+


+ +

Table of Contents:

+
+        Getting Started
+        GUI Overview
+        Mouse Operations
+        Keystroke Accelerators
+        Command-line Options
+        Client Connections
+	Frame Buffers
+        Markers
+            Panner Marker
+            Magnifier Marker
+            Coords Box Marker
+            General Markers
+                Menu Options
+        Control Panel
+            View Controls
+            Enhancement Controls
+            Blink Controls
+            Options:
+                Autoscale
+                Antialiasing
+                Tile Frames
+                Warnings
+	Colormap Selection
+                Builtin Colormaps
+                User-defined Colormaps
+        Load Panel
+            Directory browsing
+            File Patterns
+            Direct File Load
+            Frame Selections
+        Save Panel
+            File Name
+            Format
+            Color
+        Print Panel
+            Postscript Options
+            Color Options
+            Processing Options
+            Printer selection
+        Info Panel
+        TclShell
+
+

+


+

Getting Started

+As a display server, XImtool is started as a separate process from client +software such as IRAF. Once it is running it will accept +client connections simultaneously on fifo pipes, unix +domain sockets, or inet sockets. A display client like the IRAF DISPLAY +task makes a connection and sends the image across using an IIS protocol +(other/different protocols may be supported in the future). Once the image +is loaded in the display buffer it may be enhanced, +saved to a disk file in a number of different formats, or +printed as Encapsulated Postscript to a printer or disk file. +

+When run in standalone mode, images may be loaded on the +command line or by using the Load Panel. +This allows you to browse images and perform the same manipulations as if +they had been displayed by a client. +


+ +

GUI Overview

+

+The GUI consists of a large image display window and a number of smaller +pannels that control various specific functions such as image +Load, Save and Print +as well as a general purpose Control Panel. The main +window menubar has several menu buttons to the left: the Files menu +is used to load/save/print an image as well as quit the task. The View +menu let's you select the image orientation, zoom, colormap or frame. The +Options menu allows you to call up control panels, toggle markers +or blinking etc. Some of this functionality is duplicated elsewhere in +the GUI. The right side of the menubar contains command buttons to flip the +image as well as buttons for frame selection and the help button. +

+For more detailed information on the operation of the control panels please +see the on-line help (i.e. use the '?' button or Alt-h keystroke in the +main image window). + +

Mouse Operations

+Clicking and dragging MB1 (mouse button 1) in the main image +window creates a rectangular region marker, used +to select a region of the image. If you do this accidentally and don't +want the marker, put the pointer in the marker and type DELETE or +BACKSPACE to delete the marker. With the pointer in the marker, +MB3 will call up a marker menu listing some things + you can do with the marker, like zoom the outlined region. MB1 can be used +to drag or resize the marker. See below for more +information on markers. +

+Clicking on MB2 in the main image window pans (one click) or zooms (two +clicks) the image. Further clicks cycle through the builtin zoom factors. +Moving the pointer to a new location and clicking moves the feature under +the pointer to the center of the display window. Holding down the Shift +key while clicking MB2 will cause a full-screen crosshair cursor to appear +until the button is released, this can be useful for fine positioning of the +cursor. +

+MB3 is used to adjust the contrast and brightness of the displayed image. +The position of the pointer within the display window determines the +contrast and brightness values. Click once to set the values corresponding +to the pointer location, or click and drag to continuously adjust the display. +


+ +

Keystroke Accelerators

+ The following keystrokes are currently defined in the GUI: +
+  
+Ctrl-b   Backward frame        Alt-b  Blink frames (toggle)
+Ctrl-c   Center frame?         Alt-c  Control panel
+Ctrl-f   Forward frame         Alt-h  Help
+Ctrl-i   Invert?               Alt-i  Info box popup
+Ctrl-m   Match LUTs            Alt-l  Load file popup
+Ctrl-n   Normalize             Alt-p  Print popup
+Ctrl-p   Print                 Alt-s  Save popup
+Ctrl-r   Register              Alt-t  TclShell popup
+Ctrl-t   Tile frames toggle
+Ctrl-u   Unzoom (zoom=1)
+Ctrl-x   Flip X       	       Ctrl-Alt-q  Quit
+Ctrl-y   Flip Y       	       Ctrl-Alt-f  Fitframe
+
+Ctrl-=   Print
+Ctrl-<   Decrease blink rate   Ctrl-+   Zoom in
+Ctrl->   Increase blink rate   Ctrl--   Zoom out
+   
+Ctrl-[hjkl]           Move cursor one pixel
+Ctrl-[arrow]          Move cursor one pixel
+Ctrl-Shift-[hjkl]     Move cursor ten pixels
+Ctrl-Shift-[arrow]    Move cursor ten pixels
+Alt-1 thru Alt-4      Set frame displayed
+Ctrl-1 thru Ctrl-9    Set integer zoom factor  
+
+NOTE: These keystrokes only work with the cursor in the main image window, +not on the subwindows or in markers. +
+ +

Client Connections

+Ximtool allows clients to connect in any of the following ways: + +
fifo pipes
+
The traditional approach. The default, global /dev/imt1[io] pipes may +be used, or a private set of fifos.
+
tcp/ip socket
+
Clients connect via a tcp/ip socket. There is a default port, or a +custom port may be specified. This permits connecting to the server over a +remote network connection anywhere on the Internet.
+
unix domain socket
+
Like a tcp/ip socket, but limited to a single host system. Usually +faster than a tcp/ip socket, and comparable to a fifo. By default each user +gets their own unix domain socket, so this option allows multiple users +to run ximtools on the same host without having to customize things.
+ +By default ximtool listens simultaneously for client connctions on all three +types of ports. Clients communicate with XImtool using the IIS protocol, +other protocols may be supported in the future. +
+ +

Frame Buffers

+XImtool starts up using default frame buffer of 512x512 pixels. When loading +disk images the frame buffer configuration file will be searched for a +defined frame buffer that is the same size or larger than the current image, +when used as a display server the frame buffer configuration number is passed +in by the client. The default file used is /usr/local/lib/imtoolrc, this can +be overridden by defining a IMTOOLRC environment variable naming the +file to be used, or by creating a .imtoolrc file in your home +directory. +

+The format of the frame buffer configuration file is +

+   configno nframes width height [extra fields]
+e.g.                   
+	1  2  512  512
+	2  2  800  800
+	3  1 1024 1024          # comment
+
+At most 128 frame buffer sizes may be defined. +
+ +

Command-line Options

+ The following command-line options are currently recognized: +
+  -basePixel < num >       Base colormap pixel number
+  -cmap1 < file >          User cmap 1 
+  -cmap2 < file >          User cmap 2 
+  -cmapDir1 < dir >        User cmapDir 1 
+  -cmapDir1 < dir >        User cmapDir 2 
+  -cmapInitialize < bool > Initialize colormap at startup
+  -cmapName < name >       Private colormap name 
+  -config < num >          Initial config number
+  -defgui                  Print default GUI to stdout
+  -displayPanner < bool >  Display panner box
+  -displayCoords < bool >  Display wcs coords box
+  -displayMagnifier < bool >  Display magnifier box
+  -fifo < pipe >           Fifo pipe to use
+  -fifo_only               Use fifo pipes only 
+  -gui < file >            GUI file to use 
+  -help                    Print command-line summary 
+  -imtoolrc < file >       Frame buffer configuration file 
+  -inet_only               Use inet sockets only 
+  -invert                  Invert colormap on startup?
+  -maxColors < num >       Number of colors 
+  -memModel < type >       Memory model (fast,small,beNiceToServer)
+  -nframes < num >         Number of frames at startup
+  -port < num >            Inet port to use
+  -printConfig < file >    Printer configuration file 
+  -port_only               Use inet sockets only 
+  -tile                    Tile frames on startup?
+  -unix < name >           Unix socket to use
+  -unix_only               Use unix sockets only 
+  < file >                 File to load on startup
+
+
+

Markers

+

Panner Marker

+

+The panner window always displays the full frame buffer. Try setting the +frame buffer configuration to a nonsquare frame buffer (e.g. imtcryo) and +then displaying a square image (e.g. dev$pix) and the panner will show you +exactly where the image has been loaded into the frame. +

+The panner window uses two markers, one for the window border and one to +mark the displayed region of the frame. Most of the usual marker keystrokes +mentioned below apply to these markers as well, e.g. +you can use MB1 to reposition on the panner window within the main image +display window, or to drag the region marker within the panner (pan the +image). Resizing the region marker zooms the image; this is a non-aspect +constrained zoom. The panner window itself can be resized by dragging a +corner with MB1. Typing delete or backspace anywhere in the panner window +deletes the panner. +

+A special case is MB2. Hitting MB2 anywhere in the panner window pans the +image to that point. This is analogous to typing MB2 in the main display +window to pan the image. + +

Magnifier Marker

+

+The magnifier marker can be used to zoom in on a small area around the +cursor. It will be updated as the cursor moves but only for small motions +(either mouse movement or with the cursor movement +keystrokes) to minimize the +impact on the system. The zoom factor is expressed as some fraction of the +size of the magnifier marker itself. The default zoom is 4, i.e. the area +in the marker represents and area in the image that's one-fourth the size +of the marker. Other zoom factors may be selected using the popup menu +created by hitting MB1 in the marker. +

+By default the magnifier marker is not visible, to toggle it select the +Magnifier option from the Options menubar button. Alternatively, +for just a quick look holding down the Shift and MB1 buttons will display +the marker until the button is released. + +

Coords Box Marker

+

+Ximtool provides a limited notion of world coordinates, allowing frame +buffer pixel coordinates and pixel values to be converted to some arbitrary +client defined coordinate system. The coords box feature is used to display +these world coordinates as the pointer is moved about in the image window. +

+The quantities displayed in the coords box are X, Y, and Z: the X,Y world +coordinates of the pointer, and Z, the world equivalent of the pixel value +under the pointer. All coordinate systems are linear. The precision of a +displayed quantity is limited by the range of values of the associated raw +frame buffer value. For example, if the display window is 512x512 only 512 +coordinate values are possible in either axis (the positional precision can +be increased however by zooming the image). More seriously, at most about +200 pixel values can be displayed since this is the limit on the range of +pixel values loaded into the frame buffer. If a display pixel is saturated +a "+" will be displayed after the intensity value. +

+The coords box is a marker (text marker) and it can be moved and resized +with the pointer like any other marker. + +

General Markers

+Although ximtool doesn't do much with markers currently, they are a general +feature of the Gterm widget and are used more extensively in other programs +(e.g. the prototype IRAF science GUI applications). Ximtool uses markers +for the marker zoom feature discussed above, and also for the +panner and the coords box. All +markers share some of the same characteristics, so it is worthwhile learning +basic marker manipulation keystrokes. +
    +
  • MB1 anywhere inside a marker may be used to drag the marker. +
  • MB1 near a marker corner or edge, depending on the type of marker, +resizes the marker. +
  • Shift-MB1 on the corner of most markers will rotate the marker. +
  • Markers stack, if you have several markers and you put one on top +of the other. The active marker is highlighted to tell you which of the +stacked markers is active. If the markers overlap, this will be marker +"on top" in the stacking order. +
  • MB2 in the body of a marker "lowers" the marker, i.e. moves it to +the bottom of the stacking order. +
  • Delete or backspace in a marker deletes it. +
  • Markers have their own translation resources and so the default +keystroke commands will not be recognized when the +cursor is in a marker. +
+For example, try placing the pointer anywhere in the coords box, then press +MB1 and hold it down, and drag the coords box marker somewhere else on the +screen. You can also resize the coords box by dragging a corner, or delete +it with the delete or backspace key. (The Initialize button will get the +original coords box back if you delete it). +

+

Marker Menu Options

+
    +
  • MB3 (mouse button 3) calls up the marker menu (by default). +
  • Zoom does an equal aspect zoom of the region outlined by the marker. +In this way you can mark a region of the image and zoom it up. +
  • Fill exactly zooms the area outlined by the marker, making it fill +the display window. Since the marker is not likely to be exactly square, +the aspect ratio of the resultant image will not be unitary. +
  • Print prints the region outlined by the marker to the printer or +file currently configured by the Print Panel. +
  • Save saves the region outlined by the marker to the file currently +configured by the Save Panel. +
  • Info prints a description of the marked region. The text is +printed in the Info Panel. +
  • Unrotate unrotates a rotated marker. +
  • Color is a menu of possible marker colors. +
  • Type is a menu of possible marker types. This is still a little +buggy and it isn't very useful, but you can use it to play with different +types of markers. +
  • Destroy destroys the marker. You can also hit the delete or +backspace key in a marker to destroy the marker. +
+ +
+

Control Panel

+

View Controls

+

The Frame box will list only the frame buffers you currently have +defined. Currently, the only way to destroy a frame buffer is to change the +frame buffer configuration, new frame buffers (up to 4) will be created +automatically if requested by the client. +

The text display window gives the field X,Y center, X,Y scale +factors, and the X,Y zoom factors. The scale factor and the zoom factor +will be the same unless autoscale is enabled. The scale is in units of +display pixels per frame buffer pixel, and is an absolute measure (it doesn't +matter whether or not autoscale is enabled). Zoom is +relative to the autoscale factor, which is 1.0 if autoscaling is disabled. +This information is also presented in the Info panel. +

The numbers in the Zoom box are zoom factors. Blue numbers zoom, +red numbers dezoom. Zoom In and Zoom Out may be used to go to +larger or smaller zoom factors, e.g. "Ctrl-5" followed by "Zoom In" will get you +to zoom factor 10. Specific zoom factors may also be accessed directly as +Control keystrokes, e.g. Ctrl-5 will set zoom factor 5. +Center centers the field. Toggle Zoom toggles between the +current zoom/center values, and the unzoomed image. +

Aspect recomputes the view so that the aspect ratio is 1.0. +Aspect also integerizes the zoom factor (use the version in the View menu +if you don't want integerization). +

Fit Frame makes the display window the same size as the frame +buffer. Note that autoscale has much the same effect, +and allows you to resize the display window to any size you want, or view +images to large to fit on the screen. + +

Enhancement Controls

+ +

At the top is a scrolled list of all the available +colormaps. Click on the one you want to load it. You can add your own +colormaps to this list. +

The two sliders adjust the contrast (upper slider) and +brightness (lower slider) of the display. The Invert button +inverts the colormap (multiples the contrast by -1.0). Note that due to the +use of the private colormap the sliders are a bit sluggish when dragged to +window the display. If this is annoying, using MB3 in the display window is +faster. +

The Normalize button (on the bottom of the control panel) will +normalize the enhancement, i.e. set the contrast and brightness to the default +one-to-one values (1.0, 0.5). This is the preferred setting for many of the +pseudocolor colortables and for private colormaps loaded from disk images. + +

Blink Controls

+
    +
  • Blink frames is the list of frames to be blinked. When blink +mode is in effect ximtool just cycles through these frames endlessly, pausing +"blink rate" seconds between each frame. The same frame can be entered in +the list more than once. To program an arbitrary list of blink frames, hit +the Reset button and click on each blink frame button until it is set +to the desired frame number. +
  • The Blink Rate can be adjusted as slow or as fast as you want +using the arrow buttons. If you set the blink rate small enough it will go +to zero, enabling single step mode (see below). +
  • The Register button registers all the blink frames with the current +display frame. Frames not in the blink list are not affected. +
  • The Match LUTs button sets the enhancement of all blink frames to +the same values as the display frame. Frames not in the blink list are not +affected. +
  • The Blink button turns blink on and off. When the blink rate is +set to zero the Blink button will single step through the blink frames, one +frame per button press. +
+

+NOTE: you can blink no matter what ximtool options are in effect, but many +of these will slow blink down. To get the fastest blink you may want to +turn off the panner and coords box, and match the LUTs of all the blink +frames. All the ximtool controls are fully active during blink mode, plus +you can load frames etc. + + +

Options:

+
+
Autoscale
+
If autoscale is enabled then at zoom=1, the frame buffer will be +automatically scaled to fit within the display window. With autoscale +disabled (the default), the image scale is more predictable, but the image +may be clipped by the display window, or may not fill the display window.
+ +
Antialiasing
+
When dezooming an image, i.e., displaying a large image in a smaller +display window, antialiasing causes all the data to be used to compute the +displayed image. If antialiasing is disabled then image is subsampled to +compute the displayed image. Antialiasing can prevent subsampling from +omitting image features that don't fall in the sample grid, but it is +significantly slower than dezooming via subsampling. The default is no +antialising.
+ +
Tile Frames
+
The default display mode is to view one frame at a time. In tile frames +mode, 2 or 4 frames may be viewed simultaneously in the display window. All +the usual operations (zoom and pan, colortable enhancement, cursor readback, +etc.) still work for each frame even when in tile frames mode.
+ +
Warnings
+
The warnings options toggles whether you see warning dialog boxes in +situations like overwriting an existing file, clearing the frame buffer, etc. +
+
+ +

Colormap Selection

+By default XImtool will display images using either a grayscale colormap +if loaded by a client, or a private colormap when loading an image from +disk that contains a colormap. Each frame defines its own colormap so +you can define different colormaps or enhancements for each frame, they +will change automatically as you cycle through the frames. + +

Builtin Colormaps

+Once loaded, the colormap may either be changed using the builtin colormap +menu under the View menu button on the main window, or from the +Enhancement box on the control panel. Ximtool has about a dozen colormap +options builtin, other user-defined colormaps may +optionally be loaded. + +

User-defined Colormaps

+The cmap[12] and cmapDir[12] resources (or command line +arguments are used to tell ximtool which specific colormaps to make +available or where to look for colortables respectively. The colortables +are loaded when ximtool starts up, or when it is reinitialized (e.g. by +pressing the Initialize button in the control +panel). Ximtool will ignore any files in the colormap directory +which do not look like colortables. New colortables will also be added +for each images loaded from disk. +

+The format of a user lookup table is very simple: each row defines one +colortable entry, and consists of three columns defining the red, green, +and blue values scaled to the range 0.0 (off) to 1.0 (full intensity). +

+        R G B
+        R G B
+        (etc.)
+
+Blank lines and comment lines (# ...) are ignored. +

+Usually 256 rows are provided, but the number may actually be anything in +the range 1 to 256. Ximtool will interpolate the table as necessary to +compute the colortable values used in Ximtool. Ximtool uses at most 201 +colors to render pixel data, so it is usually necessary to interpolate the +table when it is loaded. +

+The name of the colortable as it will appear in the Ximtool control panel +is the root name of the file, e.g., if the file is "rainbow.lut" the +colortable name will be "rainbow". Lower case names are suggested to avoid +name collisions with the builtin colortables. Private colormaps for disk +images will be have the same name as the image loaded. If the same colortable +file appears in multiple user colortable directories, the first one will be +used. +

+The directory "luts" in the ximtool source directory contains a sample set +of colortable files. This can be installed as /usr/local/lib/imtoolcmap +when ximtool is installed. +


+ +

Load Panel

+The Load Panel allows you load images from disk directly to the frame buffer, +this is analogous to loading an image on the command line except that +browsing is possible. At present recognized formats include IRAF OIF format +(i.e. .imh extension), simple FITS files, GIF, and Sun rasterfiles. The +task will automatically sense the format of the image and load it +appropriately. Images with private colormaps (such as GIF) will be loaded +using the private colormap by default (meaning that changing the +brightness/contrast enhancements will render a random-colored image). If +the Grayscale button is enabled the image will be converted to +grayscale and loaded with the standard grayscale colormap. +

+When loading new images the frame buffer configuration table +(imtoolrc) will be searched for a frame buffer that is the same size +or larger than the new image size, if no frame buffer can be found a custom +buffer exactly the size of the image will be created. This means that the +image may not fill the display window when loaded, or you may see a subsection +of the image in the main display window. Setting the +autoscale option will scale the entire image to fit +the main display window. +

+Images with more colors than can be displayed will automatically be quantized +to the number of available colors before display. Formats which allow more +than 8-bit pixels will be sampled to determine an optimal range in the data +to be used to compute the transformation to the number of display colors. +This is the same transformation used by the IRAF DISPLAY task. + +

+
Directory browsing
+
+The load panel contains a list of files in the current directory that may +be selected for loading by selecting with left mouse button. If the file +is a directory the contents of the new directory will be loaded, if it's +a plain file an attempt will be made to load it as an image. Directories +in the list are identified with a trailing '/' character, you will always +see any directories available even if a filter is +specified. +

+The Root button will reset the current directory to the system root +directory. The Home button will reset the current directory to the +user's login directory, the Up button moves up one directory level, +and Rescan reloads the file list by rescanning the directory. The +current working directory is given below the file selection window.

+ +
File Patterns
+
By default all files and directories will be listed. You may specify a +filter to e.g. select only those files with a given extension like "*.fits" +to list only files with a ".fits" extension. Directories will always be seen +in the list and are identified with a trailing '/' character. Any valid +unix pattern matching string will be recognized.
+
Direct File Load
+
If you know exactly which file you wish to load, you may enter its name +in the Load File text box and either hit or the Load button to +load it. An absolute or relative path name may be given, if a simple filename +is specified it will be searched for in the current working directory.
+
Frame Selections
+
By default images will be loaded into frame number 1, you may select a +different frame using the Frame menu button.
+
+
+ +

Save Panel

+The Save Panel lets you save the current contents of the main display window +to a disk file (including the Panner/Coords markers, any general graphics +markers, or overlay graphics displayed by the client program). Presently, +only the contents of the main display window may be saved, there is no +facility for saving the undisplayed contents of the entire frame buffer +other than to enable the autoscale feature. A limited +number of formats are currently available, others will be added in future +versions. +
+
File Name
+
The File Name text box allows you to enter the file name of the +saved file. A "%d" anywhere in the name will be replaced by a sequence number +allowing multiple frames to be saved with unique names.
+
Format
+
The Format box allows you to choose the format of the image to be +created. Not all formats are currently implemented.
+
Color
+
The Color box lets you choose the color type of the image to be +created. The options will change depending on the format, e.g. FITS doesn't +allow color so no color options will be allowed. Formats which allow 24-bit +images will be written using the current colormap after converting to a 24-bit +image, pseudocolor images will be written with the current colormap.
+
+
+ +

Print Panel

+The Print Panel allows you dump the contents of the main display window as +Enacpsulated Postscript to either a named printer device or to a disk file. +The Print To selects the type of output, the Print Command +box will adjust accordingly, either as a Unix printer command or as a file +name. A "%d" anywhere in the name for disk output will be replaced by a +sequence number allowing multiple frames to be saved with unique names. +Selecting printers from the installed list will +automatically change the command to be used to generate the output. This +command does not necessarily need to be a printer command, the +printer configuration file lets you define any command +string to process the image. +

Color Options

+The Color box lets you choose the color type of the image to be created. +PseudoColor or 24-bit postscript will be created using the current colormap. +

Postscript Options

+
+
Orientation
+
Set the page orientation. +
Paper Size
+
Select the paper size to be used. +
Image Scale
+
Set the scale factor used to compute the final image size. +
+

Processing Options

+
+
Auto Scale
+
The auto scale toggles whether or not the image is automatically scaled +to fit the page. If not enabled, the image scale will be used to +dtermine the output image size. +
Auto Rotate
+
Auto rotate determines whether or not the image will be rotated to fit +on the page. When set, an image larger than the current orientation will be +rotated and possibly scaled to fit the page. +
Max Aspect
+
Max Aspect takes images smaller than the page and automatically increases +the scale so the image fills the page in the current orientation. +
Annotate
+
The annotate option toggles whether or not the final file includes +annotation such as the image title, a colorbar, and axis labels. +
+

Printer selection

+The printer selection list lets choose the printer to be used. The printer +configuration file is /usr/local/lib/ximprint.cfg by default or may be reset +using the printConfig resource. The format of the file is simply +
+	name < tab > command
+
+The name value is what appears in the selection list and may be more +than a single word, the command can be any command that accepts EPS +input from a pipe, the two fields must be separated by a tab character. +Normally the command will be +a simple 'lpr -Pfoo' or some such, but can also include converters or +previewers. At most 128 printer commands may be used. +
+ +

Info Panel

+ The information panel is underused at present but is meant to provide +basic information about the frame being displayed. It is updated to be +current while changing enhancements, pan/zoom regions, or frame selection. +In cases where the image title string is truncated in the main display window, +the user can always pop up the info window to see the full title. +
+ +

TclShell

+ The TclShell is mostly used as a development or debugging +tool for the GUI. It allows the user to type commands directly to the +TCL interpreter letting you send messages to the object manager or execute +specific procedures in the TCL code that makes up the GUI. Most users will +never need this, but for an example of what it does, bring it up and type a +command such as +
+    send helpButton set background red
+
+Cool, huh. +
+ +

Acknowledgements

+ XImtool was developed by the IRAF Group at the National Optical +Astronomy Observatories in Tucson, AZ. For further information or to report +problems please contact iraf@noao.edu +
+This document was last updated 11/6/96. + + + diff --git a/vendor/x11iraf/ximtool/OLD/ximtool-mag.man b/vendor/x11iraf/ximtool/OLD/ximtool-mag.man new file mode 100644 index 00000000..c4fcaae0 --- /dev/null +++ b/vendor/x11iraf/ximtool/OLD/ximtool-mag.man @@ -0,0 +1,1493 @@ +.\" @(#)ximtool.1 1.1 10-Dec-96 MJF +.TH XIMTOOL-MAG 1 "10 Dec 1996" "X11IRAF Project" +.SH NAME +ximtool-mag \- interactive image display program for the X Window System with experimental GUI +.SH SYNOPSIS +.B "ximtool-mag" [\-\fItoolkitoption\fP ...] [ \fIoptions\fP ...] [\fIimagename\fP] +.SH OPTIONS +.TP 5 +.B "-basePixel \fIN\fP" +The base colormap cell used by the colormap. This essentially allows you +to reserve \fIbasePixel\fP colors in the global colormap for other applications. +The default is 64, if changed you'll need to also specify the +\fI-cmapInitialize\fP option or resource. +.TP 5 +.B "-cmap1 \fIfile\fP" +User colormap 1. This flag allows you to specify a colormap to be made +available at task startup. +.TP 5 +.B "-cmap2 \fIfile\fP" +User colormap 2. This flag allows you to specify a second colormap to be +made available at task startup. +.TP 5 +.B "-cmapDir1 \fIdir\fP" +User colormap directory 1. Specifies a directory to be searched for colormaps. +.TP 5 +.B "-cmapDir2 \fIdir\fP" +User colormap directory 2. Specifies a directory to be searched for colormaps. +By default this points to the system directory /usr/local/lib/imtoolcmap, +allowing a set of site default colormaps to be defined here. +.TP 5 +.B "-cmapInitialize \fIbool\fP" +Initialize the ximtool colormap at startup. When setting the \fIbasePixel\fP +option or resource this is required in order to force the Gterm widget to +update its global colormap resource in the X server. The default is +\fIfalse\fP. +.TP 5 +.B "-cmapName \fIname\fP" +Name used for private colormap. The default for all IRAF imaging +applications is \fIimage\fP. Gterm widget based imaging applications +which have the same value of cmapName will share the same colormap, +minimizing colormap flashing and allowing multiple applications to be +run at the same time. +.TP 5 +.B "-config \fIN\fP" +Initial frame buffer configuration number. The default value is 1, indicating +a 512x512 frame buffer with 2 frames. See below for information on the frame +buffers. +.TP 5 +.B "-defgui" +Print the default GUI to the stdout. The GUI is a Tcl program that may be +customized by the user and reloaded using the \fI-gui\fP option or +the \fIgui\fP resource parameter. +.TP 5 +.B "-displayPanner \fIbool\fP" +Display panner marker window at startup. If set, a panner window showing +the full frame buffer will appear in the upper-right side of the main display +window. +.TP 5 +.B "-displayMagnifier \fIbool\fP" +Display magnifier marker window at startup. If set, a magnifier window showing +a zoomed section around the cursor will appear in the upper-left side of the +mail display window. +.TP 5 +.B "-displayCoords \fIbool\fP" +Display WCS coordinate marker window at startup. If set, a coordinate +readout text marker showing will appear in the lower-right side of the main +display window. +.TP 5 +.B "-fifo \fIpipe\fP" +Specifies the name of the fifo pipe to be used, the \fIi\fP +and \fIo\fP suffixes will be added automatically. The default pipe names +will be /dev/imt1i (input pipe) and /dev/imt1o (output pipe). +.TP 5 +.B "-fifo_only" +If set, only fifo pipes will be used for communication with a client program, +sockets will be disabled. +.TP 5 +.B "-gui \fIfile\fP" +Specifies the GUI file to be used. +.TP 5 +.B "-help" +Print a summary of command line options to the screen. +.TP 5 +.B "-imtoolrc \fIfile\fP" +Specifies the frame buffer configuration file to be used. See below for +information on frame buffers. +.TP 5 +.B "-inet_only" +If set, only inet sockets will be used for communication with a client program, +fifo pipes and unix sockets will be disabled. +.TP 5 +.B "-invert" +Start XImtool using inverted colormaps. When set, a "normalized" display +will always be the inverse of the selected colormap. +.TP 5 +.B "-maxColors \fIN\fP" +Specify the max number of colors to be used for the display. +.TP 5 +.B "-memModel \fItype\fP" +Determines how ximtool uses memory in the ximtool client and the X server. +The options are \fIfast\fP, \fIbeNiceToServer\fP, and \fIsmall\fP. The +default is \fIfast\fP, which uses server pixmaps to make frame blink fast. +This is recommended unless server memory is very limited. Note that even in +fast mode, the server pixmap is only the size of the display window, so memory +usage is reasonable even if the frame buffer is very large. +.TP 5 +.B "-nframes \fIN\fP" +Specifies the number of frame buffers to configure at startup. By default +there will be 2 frames available, a maximum of 4 frames are allowed. +.TP 5 +.B "-port \fIN\fP" +Specifies the port number to use when connecting through an inet socket. +.TP 5 +.B "-port_only" +Same as \fI-inet_only\fP option. If set, only inet sockets will be used for +communication with a client program. +.TP 5 +.B "-printConfig \fIname\fP" +Specifies the printer configuration file to use. By default this will be +/usr/local/lib/ximprint.cfg. See below for more information on configuring +output devices. +.TP 5 +.B "-tile" +The default display mode is to view one frame at a time. In tile frames mode, +2 or 4 frames may be viewed simultaneously in the display window. All the +usual operations (zoom and pan, colortable enhancement, cursor readback, etc.) +still work for each frame even when in tile frames mode. +.TP 5 +.B "-unix \fIname\fP" +Specifies the unix domain socket name to use. A "%d" in the filename will +be replaced with the user id. +.TP 5 +.B "-unix_only" +If set, only unix domain sockets will be used for communication with a client +program, inet sockets and fifos will be disabled. + +.SH "RESOURCES" +XImtool is implemented as a client program which is responsible for loading +the frame buffers/colormaps, communicating with clients, etc, and a +user-modifiable GUI file written as a Tcl script which handles all the user +interface details. The \fIclient resources\fP described below will be common +to any user-defined GUI, the \fIgui resources\fP may change depending on how +extensively the GUI has been modified by the user. Each of these components +has its own set of resources, but to the user setting them is the same as +with any other application. + +\fIGterm\fP widget resources (i.e. those for the main image window or +colorbar) may be set as either client or GUI resources. See the +\fIxgterm(1)\fP man page for a complete description of \fIGterm\fP widget +resources. + +.SS "CLIENT RESOURCES" +The client resources generally define the initial state of the application +or set configuration parameters. +.RS +.TP 25 +.B "Resource Name" +\fBDefault Value\fP +.sp -0.5 +.TP 25 +defConfig +1 +.sp -0.5 +.TP 25 +defNFrames +0 +.sp -0.5 +.TP 25 +tileBorderWidth +3 +.sp -0.5 +.TP 25 +tileBorderColor +9 +.sp -0.5 +.TP 25 +autoscale +false +.sp -0.5 +.TP 25 +antialias +false +.sp -0.5 +.TP 25 +antialiasType +boxcar +.sp -0.5 +.TP 25 +tileFrames +false +.sp -0.5 +.TP 25 +highlightFrames +true +.sp -0.5 +.TP 25 +gui +default +.sp -0.5 +.TP 25 +imtoolrc +/usr/local/lib/imtoolrc +.sp -0.5 +.TP 25 +invert +false +.sp -0.5 +.TP 25 +memModel +fast +.sp -0.5 +.TP 25 +basePixel: +64 +.sp -0.5 +.TP 25 +maxColors: +216 +.sp -0.5 +.TP 25 +cmapInitialize: +false +.sp -0.5 +.TP 25 +cmap1 +none +.sp -0.5 +.TP 25 +cmap2 +none +.sp -0.5 +.TP 25 +cmapDir1 +none +.sp -0.5 +.TP 25 +cmapDir2 +/usr/local/lib/imtoolcmap +.sp -0.5 +.TP 25 +input_fifo +/dev/imt1i +.sp -0.5 +.TP 25 +output_fifo +/dev/imt1o +.sp -0.5 +.TP 25 +unixaddr +/tmp/.IMT%d +.sp -0.5 +.TP 25 +port +5137 +.RE +.LP +Description of ximtool client resources: + +.TP 18 +.B "defConfig" +Default frame buffer configuration number on startup. See below for more +information on frame buffers. +.TP 18 +.B "defNFrames" +Default number of frames on startup. Set to zero to use the value from +the frame buffer configuration (\fIimtoolrc\fP) file. +.TP 18 +.B "tileBorderWidth" +.sp -0.5 +.TP 18 +.B "tileBorderColor" +Used by the tile frames option. Specifies how far +apart to space the frames in tile frames mode. +Color "9" refers to the Gterm widget resource color9, +which is assigned a color with its own resource. +.TP 18 +.B "autoscale" +Enable/disable the autoscale option. +.TP 18 +.B "antialias" +Enable/disable the antialias option. +.TP 18 +.B "antialiasType" +Type of antialiasing. +.TP 18 +.B "tileFrames" +Enable/disable the tile frames option. +.TP 18 +.B "highlightFrames" +Determines whether the current frame is highlighted when in tile frames mode. +.TP 18 +.B "gui" +The GUI to be executed. "default" refers to the default, builtin ximtool GUI. +You can replace this with your own GUI file if you are bold enough, and +completely change the look and functionality of the GUI if desired. +.TP 18 +.B "imtoolrc" +Where to find the imtoolrc file. This defines the +recognized frame buffer configurations. +.TP 18 +.B "invert" +Start Ximtool using an inverted colormap. When set, a "normalized" display +will always be the inverse of the selected colormap. +.TP 18 +.B "memModel" +Determines how ximtool uses memory in the ximtool client and the X server. +The options are "fast", "beNiceToServer", and "small". The default is fast, +which uses server pixmaps to make frame blink fast. This is recommended +unless server memory is very limited. Note that even in fast mode, the server +pixmap is only the size of the display window, so memory usage is reasonable +even if the frame buffer is very large. +.sp -0.5 +.TP 18 +.B "basePixel" +.sp -0.5 +.TP 18 +.B "maxColors" +These two resources determine the region of colormap space used to +render image pixels. +.TP 18 +.B "cmapInitialize" +Initialize the ximtool colormap at startup. This is sometimes necessary to +clear a previous ximtool colormap allowing a new basePixel and maxColors to +take effect. +.TP 18 +.B "cmap1" +.sp -0.5 +.TP 18 +.B "cmap2" +User colormap files. The intent here is to allow individual colormaps to be +conveniently specified as a resource. +.TP 18 +.B "cmapDir1" +.sp -0.5 +.TP 18 +.B "cmapDir2" +User or system colormap directories. By default cmapDir2 points to the system +directory /usr/local/lib/imtoolcmap, allowing a set of site default colormaps +to be defined here. This leaves cmapDir1 available to a user colormap +directory. +.TP 18 +.B "input_fifo" +.sp -0.5 +.TP 18 +.B "output_fifo" +The input and output fifos for fifo i/o. "Input" and "output" are from the +client's point of view. Note that only one display server can use a +fifo-pair at one time. +.TP 18 +.B "unixaddr" +Template address for unix domain socket. The user must have write permission +on this directory, or the file must already exist. %d, if given, is +replaced by the user's UID. +.TP 18 +.B "port" +TCP/IP port for the server. Note that only one server can listen on a port +at one time, so if multiple ximtool servers are desired on the same +machine, they should be given different ports. + +.SS "GUI RESOURCES" + +In principle ximtool can have any number of different GUIs, each of which +defines its own set of resources. GUIs typically define a great many +resources, but most of these are not really intended for modification by +the user (although one can modify them if desired). + +The following are some of the more useful resources used by the default +ximtool GUI. The \fIimagewin\fR resources are Gterm widget resources. +.RS +.TP 35 +.B " Resource Name" +\fBDefault Value\fP +.sp -0.5 +.TP 35 + .geometry: + +.sp -0.5 +.TP 35 + *controlShell.geometry: + +.sp -0.5 +.TP 35 + *info.geometry: +420x240 +.sp -0.5 +.TP 35 + *load_panel.geometry: + +.sp -0.5 +.TP 35 + *save_panel.geometry: + +.sp -0.5 +.TP 35 + *print_panel.geometry: + +.sp -0.5 +.TP 35 + *help_panel.geometry: + +.sp -0.5 +.TP 35 + *cmapName: +image +.sp -0.5 +.TP 35 + *basePixel: +64 +.sp -0.5 +.TP 35 + *imagewin.warpCursor: +true +.sp -0.5 +.TP 35 + *imagewin.raiseWindow: +true +.sp -0.5 +.TP 35 + *imagewin.deiconifyWindow: +true +.sp -0.5 +.TP 35 + *imagewin.ginmodeCursor: +circle +.sp -0.5 +.TP 35 + *imagewin.ginmodeBlinkInterval: +500 +.sp -0.5 +.TP 35 + *imagewin.color0: +black +.sp -0.5 +.TP 35 + *imagewin.color1: +white +.sp -0.5 +.TP 35 + *imagewin.color8: +#7c8498 +.sp -0.5 +.TP 35 + *imagewin.color9: +steelblue +.sp -0.5 +.TP 35 + *imagewin.width: +512 +.sp -0.5 +.TP 35 + *imagewin.height: +512 +.sp -0.5 +.TP 35 + *autoscale: +True +.sp -0.5 +.TP 35 + *zoomfactors: +1 2 4 8 +.sp -0.5 +.TP 35 + *displayCoords: +True +.sp -0.5 +.TP 35 + *displayPanner: +True +.sp -0.5 +.TP 35 + *displayMagnifier: +False +.sp -0.5 +.TP 35 + *blinkRate: +1.0 +.sp -0.5 +.TP 35 + *pannerArea: +150*150 +.sp -0.5 +.TP 35 + *pannerGeom: +-5+5 +.sp -0.5 +.TP 35 + *magnifierArea: +100*100 +.sp -0.5 +.TP 35 + *magnifierGeom: ++5+5 +.sp -0.5 +.TP 35 + *wcsboxGeom: +-5-5 +.sp -0.5 +.TP 35 + *maxContrast: +5.0 +.sp -0.5 +.TP 35 + *warnings: +True +.RE +.LP +Description of selected resources: + +.TP 22 +.B ".geometry" +Geometry of main image window. +.TP 22 +.B "*controlShell.geometry" +Geometry of control panel shell. +.TP 22 +.B "*info.geometry" +Geometry of info box. +.TP 22 +.B "*load_panel.geometry" +Geometry of file load panel. +.TP 22 +.B "*save_panel.geometry" +Geometry of save control panel. +.TP 22 +.B "*print_panel.geometry" +Geometry of print control panel. +.TP 22 +.B "*help_panel.geometry" +Geometry of help box. +.TP 22 +.B "*cmapName" +Name used for private colormap. The default for all IRAF imaging applications +is "image". Gterm widget based imaging applications which have the same value +of cmapName will share the same colormap, minimizing colormap flashing and +allowing multiple applications to be run at the same time. +.TP 22 +.B "*basePixel" +The base colormap cell used by the display colormap. +.TP 22 +.B "*imagewin.warpCursor" +Warp pointer into image window when initiating a cursor read. +.TP 22 +.B "*imagewin.raiseWindow" +Raise image window when initiating a cursor read. +.TP 22 +.B "*imagewin.deiconifyWindow" +Deiconify image window if necessary when initiating a cursor read. +.TP 22 +.B "*imagewin.ginmodeCursor" +Type of cursor when a cursor read is in progress. The default is a +circle. Any selection from the X cursor font can be used. A special +case is "full_crosshair" which is the full crosshair cursor of the +Gterm widget. +.TP 22 +.B "*imagewin.ginmodeBlinkInterval" +Determines whether the cursor blinks when a cursor read is in progress. +The value is given in milliseconds. +.TP 22 +.B "*imagewin.color0" +Background color. +.TP 22 +.B "*imagewin.color1" +Foreground color. +.TP 22 +.B "*imagewin.color8" +Color assigned the panner window. +.TP 22 +.B "*imagewin.color9" +Color used for the tileFrames highlight. +.TP 22 +.B "*imagewin.width" +Width of the main image window. +.TP 22 +.B "*imagewin.height" +Height of the main image window. +.TP 22 +.B "*pannerArea" +Area in pixels of the panner window. +.TP 22 +.B "*pannerGeom" +Where to place the panner window. +.TP 22 +.B "*magnifierArea" +Area in pixels of the magnifier window. +.TP 22 +.B "*magnifierGeom" +Where to place the magnifier window. +.TP 22 +.B "*wcsboxGeom" +Where to place the coords box. +.TP 22 +.B "*maxContrast" +Maximum contrast value. + +.sp +.SH DESCRIPTION +.LP +As a display server, XImtool is started as a separate process from client +software such as IRAF. Once it is running it will accept client connections +simultaneously on fifo pipes, unix domain sockets, or inet sockets. A +display client like the IRAF \fIDISPLAY\fP task makes a connection and sends +the image across using an IIS protocol. Once the image is loaded in the +display buffer it may be enhanced, saved to a disk file in a number of +different formats, or printed as Encapsulated Postscript to a printer or +disk file. Up to four frame buffers are allowed, these may be displayed +simultaneously in a tiled mode, or blinked frame-to-frame. Each frame may +have its own colormap or brightness/contrast enhancement. Pan/Zoom and +cursor readout are permitted using \fImarkers\fP, on-line help is also +available. + +When run in standalone mode, images (currently IRAF OIF, GIF, Sun Rasterfiles +or simple FITS formats are permitted) may be loaded on the command line or by +using the Load Panel. This allows you to browse images and perform the same +manipulations as if they had been displayed by a client. + +.SS "MOUSE OPERATIONS" + +Clicking and dragging MB1 (mouse button 1) in the main image window creates +a rectangular region marker, used to select a region of the image. If you do +this accidentally and don't want the marker, put the pointer in the marker +and type DELETE or BACKSPACE to delete the marker. With the pointer in the +marker, MB3 will call up a marker menu listing some things you can do with +the marker, like zoom the outlined region. MB1 can be used to drag or resize +the marker. See below for more information on markers. + +Clicking on MB2 in the main image window pans (one click) or zooms (two +clicks) the image. Further clicks cycle through the builtin zoom factors. +Moving the pointer to a new location and clicking moves the feature under +the pointer to the center of the display window. Holding down the Shift +key while clicking MB2 will cause a full-screen crosshair cursor to appear +until the button is released, this can be useful for fine positioning of the +cursor. + +MB3 is used to adjust the contrast and brightness of the displayed image. +The position of the pointer within the display window determines the +contrast and brightness values. Click once to set the values corresponding +to the pointer location, or click and drag to continuously adjust the +display. + +.SS "KEYSTROKE ACCELERATORS" + +The following keystrokes are currently defined in the GUI: + +.TP 12 +.B "Ctrl-b" +Backward frame +.sp -0.5 +.TP 12 +.B "Ctrl-c" +Center frame +.sp -0.5 +.TP 12 +.B "Ctrl-f" +Forward frame +.sp -0.5 +.TP 12 +.B "Ctrl-i" +Invert +.sp -0.5 +.B "Ctrl-m" +Toggle magnifier +.sp -0.5 +.TP 12 +.TP 12 +.B "Ctrl-n" +Normalize +.sp -0.5 +.TP 12 +.B "Ctrl-p" +Toggle panner +.sp -0.5 +.TP 12 +.B "Ctrl-r" +Register +.sp -0.5 +.TP 12 +.B "Ctrl-s" +Match LUT scaling +.sp -0.5 +.TP 12 +.B "Ctrl-t" +Tile frames toggle +.sp -0.5 +.TP 12 +.B "Ctrl-u" +Unzoom (zoom=1) +.sp -0.5 +.TP 12 +.B "Ctrl-x" +Flip X +.sp -0.5 +.TP 12 +.B "Ctrl-y" +Flip Y + +.TP 12 +.B "Alt-b" +Blink frames (toggle) +.sp -0.5 +.TP 12 +.B "Alt-c" +Control panel (toggle) +.sp -0.5 +.TP 12 +.B "Alt-h" +Help popup (toggle) +.sp -0.5 +.TP 12 +.B "Alt-i" +Info box popup (toggle) +.sp -0.5 +.TP 12 +.B "Alt-l" +Load file popup (toggle) +.sp -0.5 +.TP 12 +.B "Alt-p" +Print popup (toggle) +.sp -0.5 +.TP 12 +.B "Alt-s" +Save popup (toggle) +.sp -0.5 +.TP 12 +.B "Alt-t" +TclShell popup (toggle) + +.TP 12 +.B "Ctrl-Alt-q" +Quit +.sp -0.5 +.TP 12 +.B "Ctrl-Alt-f" +Fitframe + +.TP 12 +.B "Ctrl-=" +Print using current setup +.sp -0.5 +.TP 12 +.B "Ctrl-<" +Decrease blink rate (blink faster) +.sp -0.5 +.TP 12 +.B "Ctrl->" +Increase blink rate (blink slower) +.sp -0.5 +.TP 12 +.B "Ctrl-+" +Zoom in +.sp -0.5 +.TP 12 +.B "Ctrl--" +Zoom out + +.TP 12 +.B "Ctrl-[hjkl] or " +Move cursor one pixel in each direction +.sp -0.5 +.TP 12 +.B "Ctrl-Shift-[hjkl] or Shift-" +Move cursor ten pixels in each direction +.sp -0.5 +.TP 12 +.B "Ctrl-" +Move panner one full width in each direction +.sp -0.5 +.TP 12 +.B "Ctrl-Alt-" +Move panner one half width in each direction +.sp -0.5 +.TP 12 +.B "Alt-1 thru Alt-4" +Set frame displayed +.sp -0.5 +.TP 12 +.B "Ctrl-1 thru Ctrl-9" +Set integer zoom factor + +.LP +\fBNOTE:\fP These keystrokes only work with the cursor in the main image window, +not on the subwindows or in markers since they are implemented as +\fIimagewin\fP translations. If a command does not work, check the cursor +location. + +.SH "CLIENT CONNECTIONS" +.LP +XImtool allows clients to connect in any of the following ways: +.TP 5 +.B "fifo pipes" +The traditional approach. The default global /dev/imt1[io] +pipes may be used, or a private set of fifos can be specified using the +\fI-fifo\fP command line argument or \fI*fifo\fP resource. Values should +be specified as the root pathname to a pair of fifo pipes whose last +character is 'i' or 'o', these characters will be added automatically when +opening the pipes. For example, to use the default pipes the path would +be specified as simply "/dev/imt1". A value of "none" disables this connection. +.TP 5 +.B "tcp/ip sockets" +Clients connect via a tcp/ip socket. The default port is \fI5137\fP, or a +custom port may be specified using the \fI-port\fP command line switch or +a \fI*port\fP resource. This permits connecting to the server +over a remote network connection anywhere on the Internet. +A port number of 0 (zero) disables this connection. +.TP 5 +.B "unix domain sockets" +Like a tcp/ip socket, but limited to a single host system. Usually faster +than a tcp/ip socket, and comparable to a fifo. By default each user gets +their own unix domain socket, so this option allows multiple users to run +ximtools on the same host without having to customize things. The default +value is "/tmp/.IMT%d", other sockets may be defined using the \fI-unix\fP +command line switch or the \fI*unixaddr\fR resource. Legal values +should be specified as a filename to be used for the socket, up to two "%d" +fields are allowed and will be replaced by the userid. An empty string value +disables this connection. +.LP +By default ximtool listens simultaneously for client connections on all three +types of ports. Clients may connect simultaneously by different +means allowing up to three different displays to be loading at the same +time into different frames. + +.SS "COMMUNICATIONS PROTOCOL" + +Clients communicate with XImtool using a protocol developed originally for +IIS (International Imaging Systems) Frame Buffer hardware, the so-called +"IIS protocol"; other more modern protocols will likely be supported in the +future. The IIS protocol is basically a command packet stream with a header +describing the operation to be performed (select frame, load display, read +cursor, etc), and an optional data packet containing e.g. pixels. It is beyond +the scope of this document to describe fully the details of the protocol; +interested users should contact \fIiraf@noao.edu\fP for further information. + +.SH "FRAME BUFFERS" + +XImtool starts up using default frame buffer size of 512x512 pixels, two +(of four possible) frames will be created. When loading +disk images (i.e. run in standalone mode) the frame buffer configuration file +will be searched for a defined frame buffer that is the same size or larger +than the current image, if no suitable buffer can be found a custom frame +buffer the same size as the image will be created in an unused portion of +the configuration table. When used as a display server the frame buffer +configuration number is passed in by the client and loaded explicitly even +if it means clipping the image. If a new frame buffer is +a different size than previously defined frames, all available frames +will be initialized and cleared prior to the display. The default frame buffer +configuration file is /usr/local/lib/imtoolrc, +this can be overridden by defining a IMTOOLRC environment variable naming +the file to be used, by creating a .imtoolrc file in your home directory, or +a new file may be specified using the \fI-imtoolrc\fR command line flag or +\fIimtoolrc\fR application resource. + +The format of the frame buffer configuration file is + + \fIconfigno nframes width height [extra fields]\fP + e.g. + 1 2 512 512 + 2 2 800 800 + 3 1 1024 1024 # comment + : : : : + +At most 128 frame buffer sizes may be defined, each configuration may define +up to 4 frames, configuration numbers need not be sequential. + +\fBNOTE:\fR When defining a new frame buffer for use with client software +such as IRAF the user must also remember to define those frame buffers in +the IRAF \fIdev$graphcap\fR file. + +.SH "MARKERS" + +Although ximtool doesn't do much with markers currently, they are a general +feature of the \fIGterm\fP widget and are used more extensively in other +programs (e.g. the prototype IRAF science GUI applications). XImtool uses +markers for the marker zoom feature discussed above, and also for the panner, +magnifier and the coordinates box. All markers share some of the same +characteristics, so it is worthwhile learning basic marker manipulation +keystrokes. +.TP 3 +\fBo\fP +MB1 anywhere inside a marker may be used to drag the marker. +.TP 3 +\fBo\fP +MB1 near a marker corner or edge, depending on the type of marker, +resizes the marker. +.TP 3 +\fBo\fP +Shift-MB1 on the corner of most markers will rotate the marker. +.TP 3 +\fBo\fP +Markers stack, if you have several markers and you put one on top of +the other. The active marker is highlighted to tell you which of the +stacked markers is active. If the markers overlap, this will be marker +"on top" in the stacking order. +.TP 3 +\fBo\fP +MB2 in the body of a marker "lowers" the marker, i.e. moves it to the +bottom of the stacking order. +.TP 3 +\fBo\fP +Delete or backspace in a marker deletes it. +.TP 3 +\fBo\fP +Markers have their own translation resources and so the default +keystroke commands will not be recognized when the cursor is in a marker. +.LP +For example, try placing the pointer anywhere in the coords box, then press +MB1 and hold it down, and drag the coords box marker somewhere else on the +screen. You can also resize the coords box by dragging a corner, or delete +it with the delete or backspace key. (The Initialize button will get the +original coords box back if you delete it, or you can reset the toggle in +the control panel). + +.SS "PANNER MARKER" + +The panner window always displays the full frame buffer. Try setting the +frame buffer configuration to a nonsquare frame buffer (e.g. imtcryo) and +then displaying a square image (e.g. dev$pix) and the panner will show you +exactly where the image has been loaded into the frame. + +The panner window uses two markers, one for the window border and one to +mark the displayed region of the frame. Most of the usual marker keystrokes +mentioned below apply to these markers as well, e.g. you can use MB1 to +reposition on the panner window within the main image display window, or to +drag the region marker within the panner (pan the image). Resizing the +region marker zooms the image; this is a non-aspect constrained zoom. The +panner window itself can be resized by dragging a corner with MB1. Typing +delete or backspace anywhere in the panner window deletes the panner. + +A special case is MB2. Hitting MB2 anywhere in the panner window pans the +image to that point. This is analogous to hitting MB2 in the main display +window to pan the image. + +The panner marker can be disabled by defining the \fIdisplayPanner\fP +GUI resource, its size and location can be controlled using the +\fIpannerArea\fP and \fIpannerGeom\fP GUI resources respectively. + +.SS "MAGNIFIER MARKER" + +The magnifier marker can be used to zoom in on a small area around the cursor. +It will be updated as the cursor moves but only for small motions (either +mouse movement or with the cursor movement keystrokes) to minimize the +impact on the system. The zoom factor is expressed as some fraction of the +size of the magnifier marker itself. The default zoom is 4, i.e. the area +in the marker represents and area in the image that's one-fourth the size +of the marker. Other zoom factors may be selected using the popup menu +created by hitting MB1 in the marker. + +By default the magnifier marker is not visible, to toggle it select the +\fIMagnifier\fR option from the \fIOptions\fR menubar button. Alternatively, +for just a quick look holding down the Shift and MB1 buttons will display +the marker until the button is released. + +The magnifier marker can be disabled by defining the \fIdisplayMagnifier\fP +GUI resource, its size and location can be controlled using the +\fImagnifierArea\fP and \fImagnifierGeom\fP GUI resources respectively. + +.SS "COORDS BOX MARKER" + +XImtool provides a limited notion of world coordinates, allowing frame +buffer pixel coordinates and pixel values to be converted to some arbitrary +linear client-defined coordinate system. The coords box feature is used to +display these world coordinates as the pointer is moved about in the image +window. + +The quantities displayed in the coords box are X, Y, and Z: the X,Y world +coordinates of the pointer, and Z, the world equivalent of the pixel value +under the pointer. All coordinate systems are linear. The precision of a +displayed quantity is limited by the range of values of the associated raw +frame buffer value. For example, if the display window is 512x512 only 512 +coordinate values are possible in either axis (the positional precision can +be increased however by zooming the image). More seriously, at most about +200 pixel values can be displayed since this is the limit on the range of +pixel values loaded into the frame buffer. If a display pixel is saturated a +"+" will be displayed after the intensity value. + +The coords box is a text marker, it can be moved and resized +with the pointer like any other marker. The coords box marker can be +disabled by defining the \fIdisplayCoords\fP GUI resource, its location +can be controlled by the \fIwcsboxGeom\fP GUI resource. + +.SS "MARKER MENU OPTIONS" + +Except for the panner and WCS markers, MB3 (mouse button 3) calls up the +marker menu providing a limited set of functions common to all markers: +.TP 3 +\fBo +Zoom\fP does an equal aspect zoom of the region outlined by the marker. In +this way you can mark a region of the image and zoom it up. +.TP 3 +\fBo +Fill\fP exactly zooms the area outlined by the marker, making it fill the +display window. Since the marker is not likely to be exactly square, +the aspect ratio of the resultant image will not be unitary. +.TP 3 +\fBo +Print\fP prints the region outlined by the marker to the printer or file +currently configured by the Print Panel. +.TP 3 +\fBo +Save\fP saves the region outlined by the marker to the file currently +configured by the Save Panel. +.TP 3 +\fBo +Info\fP prints a description of the marked region. The text is printed in +the Info Panel. +.TP 3 +\fBo +Unrotate\fP unrotates a rotated marker. +.TP 3 +\fBo +Color\fP is a menu of possible marker colors. +.TP 3 +\fBo +Type\fP is a menu of possible marker types. This is still a little buggy +and it isn't very useful, but you can use it to play with different +types of markers. +.TP 3 +\fBo +Destroy\fP destroys the marker. You can also hit the delete or backspace +key in a marker to destroy the marker. + +.SH "CONTROL PANEL" + +XImtool has a control panel which can be used to exercise most of the +capabilities the program has for image display. The control panel can be +accessed either via the \fBOptions\fP menu from the main window menubar, or by +pressing the leftmost button in the row of buttons at the upper right side +of the display. + +.SS "VIEW CONTROLS" + +The \fBFrame box\fP will list only the frame buffers you currently have +defined. Currently, the only way to destroy a frame buffer is to change the +frame buffer configuration, new frame buffers (up to 4) will be created +automatically if requested by the client. The number of frame buffers +created at startup can be controlled using the \fI-nframes\fP command-line +switch or the \fIdefNFrames\fP resource. + +The \fBtext display\fP window gives the field X,Y center, X,Y scale factors, +and the X,Y zoom factors. The scale factor and the zoom factor will be the same +unless \fIautoscale\fP is enabled. The scale is in units of display pixels per +frame buffer pixel, and is an absolute measure (it doesn't matter whether or +not autoscale is enabled). Zoom is relative to the autoscale factor, which +is 1.0 if autoscaling is disabled. This information is also presented in the +Info panel. + +The numbers in the \fBZoom box\fP are zoom factors. Blue numbers zoom, red +numbers dezoom. \fIZoom In\fP and \fIZoom Out\fP may be used to go to larger +or smaller zoom factors, e.g. "Ctrl-5" followed by "Zoom In" will get you to +zoom factor 10. Specific zoom factors may also be accessed directly as Control +keystrokes, e.g. Ctrl-5 will set zoom factor 5. \fICenter\fP centers the field. +\fIToggle Zoom\fP toggles between the current zoom/center values, and the +unzoomed image. + +\fIAspect\fP recomputes the view so that the aspect ratio is 1.0. Aspect also +integerizes the zoom factor (use the version in the View menu if you don't +want integerization). + +\fIFit Frame\fP makes the display window the same size as the frame buffer. Note +that autoscale has much the same effect, and allows you to resize the +display window to any size you want, or view images too large to fit on the +screen. + +.SS "ENHANCEMENT CONTROLS" + +At the top is a scrolled list of all the available colormaps. Click on the +one you want to load. You can add your own colormaps to this list by +defining the \fIcmap[12]\fP or \fIcmapDir[12]\fP command line flags or +application resources. + +The two sliders adjust the contrast (upper slider) and brightness (lower +slider) of the display. The \fIInvert\fP button inverts the colormap (multiples +the contrast by -1.0). Note that due to the use of the private colormap the +sliders are a bit sluggish when dragged to window the display. If this is +annoying, using MB3 in the display window is faster. + +The \fINormalize\fP button (on the bottom of the control panel) will normalize +the enhancement, i.e. set the contrast and brightness to the default one-to-one +values (1.0, 0.5). This is the preferred setting for many of the pseudocolor +colortables and for private colormaps loaded from disk images. The +\fIInitialize\fP button does a reset of the server. + +.SS "BLINK CONTROLS" + +\fIBlink frames\fP is the list of frames to be blinked. When blink mode is +in effect ximtool just cycles through these frames endlessly, pausing +"blink rate" seconds between each frame. The same frame can be entered +in the list more than once. To program an arbitrary list of blink +frames, hit the Reset button and click on each blink frame button until +it is set to the desired frame number. + +The \fIBlink Rate\fP can be adjusted as slow or as fast as you want using the +arrow buttons. If you set the blink rate small enough it will go to +zero, enabling single step mode (see below). + +The \fIRegister\fP button registers all the blink frames with the current +display frame. Frames not in the blink list are not affected. + +The \fIMatch LUTs\fP button sets the enhancement of all blink frames to the +same values as the display frame. Frames not in the blink list are not affected. + +The \fIBlink\fP button turns blink on and off. When the blink rate is set to +zero the Blink button will single step through the blink frames, one +frame per button press. + +\fBNOTE:\fP You can blink no matter what ximtool options are in effect, but +many of these will slow blink down. To get the fastest blink you may want to +turn off the panner and coords box, and match the LUTs of all the blink frames. +All the ximtool controls are fully active during blink mode, plus you can +load frames etc. + +.SS "OPTIONS:" +.TP 5 +.B "Panner" +Toggles whether to display the panner marker. +.TP 5 +.B "Coords Box" +Toggles whether to display the coordinate box marker. +.TP 5 +.B "Autoscale" +If autoscale is enabled then at zoom=1, the frame buffer will be +automatically scaled to fit within the display window. With autoscale +disabled (the default), the image scale is more predictable, but the +image may be clipped by the display window, or may not fill the display +window. +.TP 5 +.B "Antialiasing" +When dezooming an image, i.e., displaying a large image in a smaller +display window, antialiasing causes all the data to be used to compute +the displayed image. If antialiasing is disabled then image is +subsampled to compute the displayed image. Antialiasing can prevent +subsampling from omitting image features that don't fall in the sample +grid, but it is significantly slower than dezooming via subsampling. +The default is no antialising. +.TP 5 +.B "Tile Frames" +The default display mode is to view one frame at a time. In tile frames +mode, 2 or 4 frames may be viewed simultaneously in the display window. +All the usual operations (zoom and pan, colortable enhancement, cursor +readback, etc.) still work for each frame even when in tile frames mode. +.TP 5 +.B "Warnings" +The warnings options toggles whether you see warning dialog boxes in +situations like overwriting an existing file, clearing the frame +buffer, etc. + +.SH "COLORMAP SELECTION" + +By default XImtool will display images using either a grayscale colormap (e.g. +if loaded by a client), or a private colormap when loading an image from disk +that contains a colormap. Each frame defines its own colormap so you can +define different colormaps or enhancements for each frame, they will change +automatically as you cycle through the frames. + +.SS "BUILTIN COLORMAPS" + +Once loaded, the colormap may either be changed using the builtin colormap +menu under the View menu button on the main window, or from the Enhancement +box on the control panel. XImtool has about a dozen colormap options +builtin, other user-defined colormaps may optionally be loaded. It is not +presently possible to save colormaps for later use. + +.SS "USER-DEFINED COLORMAPS" + +The \fIcmap[12]\fP and \fIcmapDir[12]\fP resources (or command line arguments) +are used to tell which specific colormaps to make available or where to look +for colortables respectively. The colortables are loaded when ximtool starts +up, or when it is reinitialized (e.g. by pressing the Initialize button in +the control panel). XImtool will ignore any files in the colormap directory +which do not look like colortables. New colortables will also be added +automatically for each image loaded from disk. + +The format of a user lookup table is very simple: each row defines one +colortable entry, and consists of three columns defining the red, green, and +blue values scaled to the range 0.0 (off) to 1.0 (full intensity). + + R G B + R G B + (etc.) + +Blank and comment lines (lines beginning with a '#') are ignored. + +Usually 256 rows are provided, but the number may actually be anything in +the range 1 to 256. XImtool will interpolate the table as necessary to +compute the colortable values used in XImtool. XImtool uses at most 201 +colors to render pixel data, so it is usually necessary to interpolate the +table when it is loaded. + +The name of the colortable as it will appear in the XImtool control panel is +the root name of the file, e.g., if the file is "rainbow.lut" the colortable +name will be "rainbow". Lower case names are suggested to avoid name +collisions with the builtin colortables. Private colormaps for disk images +will be have the same name as the image loaded. If the same colortable file +appears in multiple user colortable directories, the first one found will be +used. + +.SS "MINIMIZING COLORMAP CONFLICTS" + +The Gterm widget used by XImtool (i.e. the main display window) uses a private +global colormap for display, this allows it to have greater control over color +cell allocation but can occasionally also cause "colormap flashing" as the +mouse is moved in and out of the application. The problem here is that +in a system with only an 8-bit colormap (256 colors) all applications must +compete for colors, programs such as XV or Netscape allocate colors from the +default colormap leaving only a few free cells for XImtool. Since XImtool +defines a private global colormap it is still able to allocate the needed +cells rather than failing, but it's allocating cells already used by other +applications. As the mouse moves out of the ximtool window those cells are +once again defined in terms of the default colormap, so the ximtool window +is then using a different colormap. It is this switching of the colormap +context that causes the flashing to occur, but there are a few things that +can be done to help minimize this. + +XImtool logically defines 200 colors which the client image display program +can use to render pixels. However, ximtool may or may not actually allocate +all of those colors. By default it currently allocates only about 192 +colors, to reserve 64 colors for the other windows on the screen. You don't +normally notice this as 1) usually the default screen colormap has enough +free cells to allow ximtool to match the colors, and 2) the extra unallocated +cells correspond to the brightest pixels in the rendered image, and these +colors may not be used or usually only correspond to a few small regions +near the saturated cores of bright objects. + +You can eliminate this problem by setting the \fIbasePixel\fP resource to e.g. +48 instead of 64, which will let the gterm widget allocate all 200 colors. +However, this isn't recommended for normal use as it will increase the +likelihood of colormap flashing. If you change \fIbasePixel\fP, either restart +the X server or set the resource \fIcmapInitialize\fP=\fITrue\fP to force the +gterm widget to update its global colormap resource in the X server. +The colormap resource may also be deleted by using the command + + \fIxprop -root -remove GT_image\fP + +These options may also be set on the command line when first starting up. + +In general one can set the Gterm widget resources \fIbasePixel\fP +and \fImaxColors\fP to specify the region of colormap space to be used for +image display. If you set \fImaxColors\fP to a small value, the 200 logical +colors defined by the widget will be mapped by the imtool color model into +whatever number of colors are actually available to the widget. For example, +in the default setup, 200 color values are really being mapped into 192 color +cells used for display, the remaining colors are used for buttons, menus etc +and are allocated from the default colormap by the X toolkit when the +application starts up. + +Even though the Gterm widget uses a private colormap, it is a private +\fIglobal\fP colormap meaning that all Gterm widgets share the same colormap. +An example of colormap sharing in ximtool is the main image window and the +colorbar window. These are two separate gterm widgets that share the same +colormap. They have to share the same colormap, as otherwise when you +windowed the main image window the colorbar window would not accurately +reflect the modified colormap. By default two separate ximtools would also +share the same colormap meaning contrast enhancements in one window would +affect the other. By resetting the \fIcmapName\fP command line option or +resource you can change the name of the private colormap used causing +separate ximtools to use different colormaps, but note this also creates +colormap flashing between the two windows that cannot easily be avoided. +By setting the \fIcmapName\fR to "default" the widget will allocate colors +from the default colormap, but this is of little use at the moment. + +There are a number of other resources that can be used to modify the behavior +of the Gterm widget color management scheme, but these are the most useful ones. +For question and further information feel free to contact \fIiraf@noao.edu\fP. + +.SH "LOAD PANEL" + +The Load Panel allows you load images from disk directly to the frame +buffer, this is analogous to loading an image on the command line except +that browsing is possible. At present recognized formats include IRAF OIF +format (i.e. \fI.imh\fP extension), simple FITS files, GIF, and Sun rasterfiles. +The task will automatically sense the format of the image and load it +appropriately. Images with private colormaps (such as GIF) will be loaded +using the private colormap (meaning that changing the brightness/contrast +enhancements will render a random-colored image), all others will be loaded +with a grayscale colormap. If the \fIGrayscale\fP button is enabled the image +colormap will be converted to grayscale and loaded as the standard grayscale +colormap. The Load panel will close automatically once the image has loaded +unless the \fIBrowse\fP button has been set. + +When loading new images the frame buffer configuration table will +be searched for a frame buffer that is the same size or larger than the new +image size, if no frame buffer can be found a custom buffer exactly the size +of the image will be created. This means that the image may not fill the +display window when loaded, or you may see a subsection of the image in the +main display window. Setting the \fIautoscale\fP option will scale the entire +image to fit the main display window, the full frame buffer will always be +visible in the Panner marker window. + +Images with more colors than can be displayed will automatically be +quantized to the number of available colors before display, 24-bit formats +are not currently supported (but may be in the future and will be similarly +quantized). + +Formats which permit larger than 8-bit pixels will be sampled on a grid +to determine an optimal range in the data to be used to compute a linear +transformation to the number of display colors. This is the same sampling +and transformation used by the IRAF \fIDISPLAY\fR task when computing the +\fIz1/z2\fP values and provides a much better initial display than simple +truncation to 8-bits. +.TP 5 +.B "Directory Browsing" +The load panel contains a list of files in the current directory that +may be selected for loading by selecting with left mouse button. If the +file is a directory the contents of the new directory will be loaded, +if it's a plain file an attempt will be made to load it as an image +otherwise an error popup will appear. Directories in the list are identified +with a trailing '/' character, you will always see any subdirectories +listed even if a filter is specified. + +The \fIRoot\fP button will reset the current directory to the system root +directory. The \fIHome\fP button will reset the current directory to the +user's login directory, the \fIUp\fP button moves up one directory level, and +\fIRescan\fP reloads the file list by rescanning the directory. The current +working directory is given below the file selection window. +.TP 5 +.B "File Patterns" +By default all files and directories will be listed. You may specify a +filter to e.g. select only those files with a given extension like +"*.fits" to list only files with a ".fits" extension. Directories will +always be seen in the list and are identified with a trailing '/' +character. Any valid unix pattern matching string will be recognized. +.TP 5 +.B "Direct File Load" +If you know exactly which file you wish to load, you may enter its +name in the \fILoad File\fP text box and either hit or the Load button +to load it. An absolute or relative path name may be given, if a simple +filename is specified it will be searched for in the current working directory. +.TP 5 +.B "Frame Selections" +By default images will be loaded into frame number 1, you may select a +different frame using the Frame menu button to cycle through the available +frames. + +.SH "SAVE PANEL" + +The Save Panel lets you save the current contents of the main display window +to a disk file (including the Panner/Coords markers, any general graphics +markers, or overlay graphics displayed by the client program). Presently, +only the contents of the main display window may be saved, there is no +facility for saving the undisplayed contents of the entire frame buffer +other than to enable the autoscale feature. A limited number of formats are +currently available, others will be added in future versions. +.TP 5 +.B "File Name" +The File Name text box allows you to enter the file name of the saved +file. A "%d" anywhere in the name will be replaced by a sequence number +allowing multiple frames to be saved with unique names. +.TP 5 +.B "Format" +The Format box allows you to choose the format of the image to be +created. Not all formats are currently implemented. +.TP 5 +.B "Color" +The Color box lets you choose the color type of the image to be +created. The options will change depending on the format, e.g. FITS +doesn't allow color so no color options will be allowed. Formats which +allow 24-bit images will be written using the current colormap after +converting to a 24-bit image, pseudocolor images will be written with +the current colormap. + +.SH "PRINT PANEL" + +The Print Panel allows you dump the contents of the main display window as +Encapsulated Postscript to either a named printer device or to a disk file. +The \fIPrint To\fP selects the type of output, the \fIPrint Command\fP box +will adjust accordingly, either as a Unix printer command or as a file name. +A "%d" anywhere in the name for disk output will be replaced by a sequence +number allowing multiple frames to be saved with unique names. Selecting +printers from the installed list will automatically change the command to be +used to generate the output. This command does not necessarily need to be a +printer command, the printer configuration file lets you define any command +string to process the image. + +.SS "COLOR OPTIONS" + +The Color box lets you choose the color type of the image to be created. +PseudoColor or 24-bit postscript will be created using the current colormap +and enhancements. + +.SS "POSTSCRIPT OPTIONS" + +.TP 5 +.B "Orientation" +Set the page orientation. +.TP 5 +.B "Paper Size" +Select the paper size to be used. +.TP 5 +.B "Image Scale" +Set the scale factor used to compute the final image size. No checking is +done to make sure the image will fit correctly on the page. + +.SS "PROCESSING OPTIONS" +.TP 5 +.B "Auto Scale" +Toggles whether or not the image is automatically scaled +to fit the page. If not enabled, the image scale will be used to +determine the output image size, otherwise the image will be scaled down +(if necessary) to fit on the page. +.TP 5 +.B "Auto Rotate" +Determines whether or not the image will be rotated to fit +on the page. When set, an image larger than the current orientation +will be rotated and possibly scaled to fit the page, otherwise the image +may be scaled so that it fits in the current orientation. +.TP 5 +.B "Max Aspect" +Automatically increases the scale so the image fills the page in the current +orientation. +.TP 5 +.B "Annotate" +The annotate option toggles whether or not the final file includes +annotation such as the image title, a colorbar, and axis labels. There is +currently no option for partial annotation. + +.SS "PRINTER SELECTION" + +The printer selection list lets choose the printer to be used. The printer +configuration file is /usr/local/lib/ximprint.cfg by default or may be reset +using the \fI-printConfig\fP command line switch or \fIprintConfig\fP +resource. The format of the file is simply + + \fIname\\tcommand\fP + +The \fIname\fP value is what appears in the selection list and may be more +than a single word, the \fIcommand\fP can be any command that accepts EPS +input from a pipe, the two fields must be separated by a tab character. +Normally the command +will be a simple \fIlpr -Pfoo\fP or some such, but can also include converters +or previewers. At most 128 printer commands may be used. + +.SS "ANNOTATION OPTIONS" + +.TP 5 +.B "Annotate" +Selects whether Postscript image is to be annotated. +.B "Title" +Annotate with a title on the top of the image. +.B "Borders" +Annotate with borders surrounding the image giving image coordinates. +.B "Colorbar" +Annotate with colorbar at the bottom of the image +.B "Title String" +Title string to use when \fItitle\fR is selected. The special value +\fIimtitle\fR will force the title to be the currently displayed image title, +otherwise it will be this user-selected field. + + +.SH "INFO PANEL" + +The information panel is underused at present but is meant to provide basic +information about the frame being displayed. It is updated to be current +while changing enhancements, pan/zoom regions, or frame selection. In cases +where the image title string is truncated in the main display window, the +user can always pop up the info window to see the full title. + +.SH "TCLSHELL" + +The \fITclShell\fP allows the user to type commands directly to the TCL +interpreter, letting you send messages to the object manager or execute +specific procedures in the TCL code that makes up the GUI. It is used as a +development or debugging tool for the GUI, but for an example of what it +does, bring it up and type a command such as + + \fIsend helpButton set background red\fP + + +.SH ENVIRONMENT +DISPLAY specifies which display terminal to use +.br +IMTOOLRC frame buffer configuration file +.br +imtoolrc frame buffer configuration file (alternative) + +.SH FILES +/usr/local/lib/imtoolrc default frame buffer configuration file +.br +/usr/local/lib/ximprint.cfg default printer configuration file +.br +/usr/local/lib/imtoolcmap default colormap directory +.br +/dev/imt1i default input fifo +.br +/dev/imt1o default output fifo +.br +/tmp/.IMT%d default unix socket + +.SH BUGS + +.SH SEE ALSO +xgterm(1), xtapemon(1) + +.SH COPYRIGHT +Copyright(c) 1986 Association of Universities for Research in Astronomy Inc. diff --git a/vendor/x11iraf/ximtool/OLD/ximtool-mag.ps b/vendor/x11iraf/ximtool/OLD/ximtool-mag.ps new file mode 100644 index 00000000..aa974a41 --- /dev/null +++ b/vendor/x11iraf/ximtool/OLD/ximtool-mag.ps @@ -0,0 +1,10025 @@ +%!PS-Adobe-1.0 +%%Creator: devps (Pipeline Associates, Inc.) +%%CreationDate: Wed Sep 10 10:17:53 1997 +%%Pages: (atend) +%%DocumentFonts: (atend) + +/X{exch}def +/r{rmoveto}def +/m{moveto}def +/l{lineto}def +/rl{rlineto}def +/lc{yc X xc X l st}def +/mc{yc X xc X m}def +/el{gs /a X def a div 1 X scale cp np a xc 2 div 0 360 arc st gr}def +/ar{cp 7 2 roll np xc 5 1 roll atan 3 1 roll atan X arc st}def +/sp{yc X xc X 6 2 roll yc X xc X 6 2 roll yc X xc X 6 2 roll ct}def +/st{stroke}def +/gs{gsave}def +/gr{grestore}def +/cp{currentpoint}def +/np{newpath}def +/ct{curveto}def +/m0{0 0 moveto}def +/BP{/devps-save save def m0}def +/EP{ +clear devps-save restore +showpage}def +/res 10.000000 def +/V{res neg div 792 add +currentpoint pop X +m}def +/H{res div +currentpoint X pop +moveto}def +/h{res div 0 r}def +/v{res neg div 0 X r}def +/xc{res div}def +/yc{res neg div 792 add}def +/S{X H show}def +/psize 10 def +/height 1 def +/slant 0 def +/FF{findfont X dup 12 div setlinewidth /psize X def + [psize 0 psize height mul slant sin slant cos div mul psize height mul 0 0] + makefont setfont}def +/shade{gs + /dy X def + /dx X def + np m + setgray + 0 dy rl + dx 0 rl + 0 dy neg rl + dx neg 0 rl + closepath + fill +gr}def +1 setlinecap +/R{/Times-Roman FF}def +/B{/Times-Bold FF}def +/I{/Times-Italic FF}def +/Y{/Symbol FF}def +%%EndProlog +%%Page: 1 1 +BP +/slant 0 def +/height 1.000000 def +10 R +10 R +480 V +900(XIMTOOL)S +1376(\()S +1425(1)S +1491(\))S +2787(USER COMMANDS )S +4956(XIMTOOL)S +5432(\()S +5481(1)S +5547(\))S +960 V +9 B +900(NAME)S +1080 V +10 R +1260(ximtool-mag)S +1807(\261)S +1887(interactive)S +2338(image)S +2612(display)S +2931(program)S +3299(for)S +3445(the)S +3597(X)S +3699(Window)S +4073(System)S +4398(with)S +4606(experimental)S +5157(GUI)S +1248 V +9 B +900(SYNOPSIS)S +1368 V +10 B +1260(ximtool-mag)S +1828([\261)S +10 I +1911(toolkitoption)S +10 B +2453(...])S +2591([)S +10 I +2654(options)S +10 B +2979(...])S +1536 V +9 B +900(OPTIONS)S +1656 V +10 B +1260(-basePixel)S +10 I +1723(N)S +1776 V +10 R +1510(The)S +1709(base)S +1930(colormap)S +2351(cell)S +2539(used)S +2766(by)S +2910(the)S +3076(colormap.)S +3552(This)S +3774(essentially)S +4240(allows)S +4545(you)S +4739(to)S +4861(reserve)S +10 I +5192(basePixel)S +1896 V +10 R +1510(colors)S +1793(in)S +1910(the)S +2071(global)S +2360(colormap)S +2776(for)S +2931(other)S +3175(applications.)S +3752(The)S +3946(default)S +4262(is)S +4367(64,)S +4530(if)S +4629(changed)S +4999(you'll)S +5276(need)S +5502(to)S +2016 V +1510(also)S +1701(specify)S +2019(the)S +10 I +2171(-cmapInitialize)S +10 R +2806(option)S +3092(or)S +3205(resource.)S +2184 V +10 B +1260(-cmap1)S +10 I +1606(\256le)S +2304 V +10 R +1510(User)S +1728(colormap)S +2135(1.)S +2270(This)S +2478(\257ag)S +2658(allows)S +2949(you)S +3129(to)S +3237(specify)S +3555(a)S +3629(colormap)S +4036(to)S +4144(be)S +4268(made)S +4514(available)S +4904(at)S +5006(task)S +5197(startup.)S +2472 V +10 B +1260(-cmap2)S +10 I +1606(\256le)S +2592 V +10 R +1510(User)S +1734(colormap)S +2147(2.)S +2288(This)S +2502(\257ag)S +2688(allows)S +2985(you)S +3171(to)S +3285(specify)S +3609(a)S +3689(second)S +4002(colormap)S +4415(to)S +4529(be)S +4660(made)S +4913(available)S +5310(at)S +5419(task)S +2712 V +1510(startup.)S +2880 V +10 B +1260(-cmapDir1)S +10 I +1750(dir)S +3000 V +10 R +1510(User)S +1728(colormap)S +2135(directory)S +2525(1.)S +2660(Speci\256es)S +3051(a)S +3125(directory)S +3515(to)S +3623(be)S +3747(searched)S +4125(for)S +4271(colormaps.)S +3168 V +10 B +1260(-cmapDir2)S +10 I +1750(dir)S +3288 V +10 R +1510(User)S +1742(colormap)S +2164(directory)S +2569(2.)S +2719(Speci\256es)S +3125(a)S +3214(directory)S +3619(to)S +3742(be)S +3881(searched)S +4274(for)S +4435(colormaps.)S +4951(By)S +5113(default)S +5435(this)S +3408 V +1510(points)S +1790(to)S +1903(the)S +2060(system)S +2373(directory)S +2768(/usr/local/lib/imtoolcmap,)S +3840(allowing)S +4225(a)S +4304(set)S +4450(of)S +4568(site)S +4741(default)S +5052(colormaps)S +5502(to)S +3528 V +1510(be)S +1634(de\256ned)S +1958(here.)S +3696 V +10 B +1260(-cmapInitialize)S +10 I +1934(bool)S +3816 V +10 R +1510(Initialize)S +1908(the)S +2073(ximtool)S +2428(colormap)S +2848(at)S +2963(startup.)S +3333(When)S +3614(setting)S +3924(the)S +10 I +4089(basePixel)S +10 R +4520(option)S +4819(or)S +4945(resource)S +5325(this)S +5513(is)S +3936 V +1510(required)S +1876(in)S +1988(order)S +2232(to)S +2344(force)S +2582(the)S +2738(Gterm)S +3027(widget)S +3333(to)S +3445(update)S +3745(its)S +3874(global)S +4158(colormap)S +4569(resource)S +4940(in)S +5052(the)S +5207(X)S +5312(server.)S +4056 V +1510(The)S +1695(default)S +2002(is)S +10 I +2099(false)S +10 R +2288(.)S +4224 V +10 B +1260(-cmapName)S +10 I +1805(name)S +4344 V +10 R +1510(Name)S +1784(used)S +2003(for)S +2156(private)S +2470(colormap.)S +2939(The)S +3131(default)S +3445(for)S +3598(all)S +3735(IRAF)S +4000(imaging)S +4365(applications)S +4885(is)S +10 I +4989(image)S +10 R +5233(.)S +5325(Gterm)S +4464 V +1510(widget)S +1822(based)S +2089(imaging)S +2457(applications)S +2980(which)S +3264(have)S +3492(the)S +3654(same)S +3899(value)S +4155(of)S +4277(cmapName)S +4770(will)S +4965(share)S +5214(the)S +5375(same)S +4584 V +1510(colormap,)S +1950(minimizing)S +2450(colormap)S +2865(\257ashing)S +3220(and)S +3402(allowing)S +3790(multiple)S +4162(applications)S +4683(to)S +4799(be)S +4931(run)S +5103(at)S +5214(the)S +5375(same)S +4704 V +1510(time.)S +4872 V +10 B +1260(-con\256g)S +10 I +1579(N)S +4992 V +10 R +1510(Initial)S +1799(frame)S +2081(bu)S +2181 H + (f)show 10 -.5 mul h (f)show +10 R +2242(er)S +2369(con\256guration)S +2952(number.)S +3362(The)S +3567(default)S +3894(value)S +4160(is)S +4277(1,)S +4402(indicating)S +4852(a)S +4947(512x512)S +5348(frame)S +5112 V +1510(bu)S +1610 H + (f)show 10 -.5 mul h (f)show +10 R +1671(er)S +1778(with)S +1986(2)S +2066(frames.)S +2422(See)S +2596(below)S +2870(for)S +3016(information)S +3518(on)S +3648(the)S +3800(frame)S +4062(bu)S +4162 H + (f)show 10 -.5 mul h (f)show +10 R +4223(ers.)S +5280 V +10 B +1260(-defgui)S +5400 V +10 R +1510(Print)S +1737(the)S +1892(default)S +2202(GUI)S +2412(to)S +2523(the)S +2678(stdout.)S +3011(The)S +3199(GUI)S +3409(is)S +3509(a)S +3586(Tcl)S +3752(program)S +4123(that)S +4306(may)S +4511(be)S +4638(customized)S +5126(by)S +5259(the)S +5414(user)S +5520 V +1510(and)S +1684(reloaded)S +2057(using)S +2304(the)S +10 I +2456(-gui)S +10 R +2647(option)S +2933(or)S +3046(the)S +10 I +3198(gui)S +10 R +3356(resource)S +3723(parameter.)S +5688 V +10 B +1260(-displayPanner)S +10 I +1941(bool)S +5808 V +10 R +1510(Display)S +1859(panner)S +2168(marker)S +2488(window)S +2848(at)S +2958(startup.)S +3323(If)S +3427(set,)S +3601(a)S +3683(panner)S +3993(window)S +4354(showing)S +4732(the)S +4893(full)S +5071(frame)S +5342(bu)S +5442 H + (f)show 10 -.5 mul h (f)show +10 R +5503(er)S +5928 V +1510(will)S +1696(appear)S +1991(in)S +2099(the)S +2251(upper-right)S +2730(side)S +2921(of)S +3034(the)S +3186(main)S +3416(display)S +3735(window.)S +6096 V +10 B +1260(-displayMagni\256er)S +10 I +2052(bool)S +6216 V +10 R +1510(Display)S +1852(magni\256er)S +2266(marker)S +2579(window)S +2932(at)S +3035(startup.)S +3393(If)S +3490(set,)S +3657(a)S +3733(magni\256er)S +4148(window)S +4502(showing)S +4873(a)S +4949(zoomed)S +5297(section)S +6336 V +1510(around)S +1817(the)S +1969(cursor)S +2248(will)S +2434(appear)S +2729(in)S +2837(the)S +2989(upper-left)S +3412(side)S +3603(of)S +3716(the)S +3868(mail)S +4076(display)S +4395(window.)S +6504 V +10 B +1260(-displayCoords)S +10 I +1941(bool)S +6624 V +10 R +1510(Display)S +1855(WCS)S +2106(coordinate)S +2561(marker)S +2877(window)S +3233(at)S +3339(startup.)S +3700(If)S +3800(set,)S +3970(a)S +4048(coordinate)S +4503(readout)S +4836(text)S +5020(marker)S +5336(show-)S +6744 V +1510(ing)S +1668(will)S +1854(appear)S +2149(in)S +2257(the)S +2409(lower-right)S +2888(side)S +3079(of)S +3192(the)S +3344(main)S +3574(display)S +3893(window.)S +6912 V +10 B +1260(-\256fo)S +10 I +1462(pipe)S +7032 V +10 R +1510(Speci\256es)S +1901(the)S +2053(name)S +2299(of)S +2412(the)S +2564(\256fo)S +2733(pipe)S +2936(to)S +3045(be)S +3170(used,)S +3409(the)S +10 I +3562(i)S +10 R +3621(and)S +10 I +3796(o)S +10 R +3877(su)S +3966 H + (f)show 10 -.5 mul h (\256)show +10 R +4050(xes)S +4214(will)S +4401(be)S +4526(added)S +4795(automatically.)S +5425(The)S +7152 V +1510(default)S +1817(pipe)S +2019(names)S +2304(will)S +2490(be)S +2614(/dev/imt1i)S +3056(\(input)S +3325(pipe\))S +3560(and)S +3734(/dev/imt1o)S +4198(\(output)S +4517(pipe\).)S +7680 V +900(X11IRAF Project)S +2709(Last change: 10 Dec 1996)S +5530(1)S +7920 V +EP +%%Page: 2 2 +BP +/slant 0 def +/height 1.000000 def +10 R +10 R +480 V +900(XIMTOOL)S +1376(\()S +1425(1)S +1491(\))S +2787(USER COMMANDS )S +4956(XIMTOOL)S +5432(\()S +5481(1)S +5547(\))S +960 V +10 B +1260(-\256fo_only)S +1080 V +10 R +1510(If)S +1615(set,)S +1790(only)S +2007(\256fo)S +2185(pipes)S +2435(will)S +2630(be)S +2763(used)S +2985(for)S +3140(communication)S +3801(with)S +4018(a)S +4101(client)S +4363(program,)S +4766(sockets)S +5100(will)S +5296(be)S +5430(dis-)S +1200 V +1510(abled.)S +1368 V +10 B +1260(-gui)S +10 I +1457(\256le)S +1488 V +10 R +1510(Speci\256es)S +1901(the)S +2053(GUI)S +2260(\256le)S +2418(to)S +2526(be)S +2650(used.)S +1656 V +10 B +1260(-help)S +10 R +1510(Print)S +1735(a)S +1809(summary)S +2211(of)S +2324(command)S +2748(line)S +2928(options)S +3253(to)S +3361(the)S +3513(screen.)S +1824 V +10 B +1260(-imtoolrc)S +10 I +1683(\256le)S +1944 V +10 R +1510(Speci\256es)S +1923(the)S +2097(frame)S +2381(bu)S +2481 H + (f)show 10 -.5 mul h (f)show +10 R +2542(er)S +2671(con\256guration)S +3257(\256le)S +3438(to)S +3569(be)S +3716(used.)S +4007(See)S +4204(below)S +4501(for)S +4670(information)S +5195(on)S +5348(frame)S +2064 V +1510(bu)S +1610 H + (f)show 10 -.5 mul h (f)show +10 R +1671(ers.)S +2232 V +10 B +1260(-inet_only)S +2352 V +10 R +1510(If)S +1611(set,)S +1782(only)S +1995(inet)S +2180(sockets)S +2509(will)S +2700(be)S +2829(used)S +3047(for)S +3198(communication)S +3855(with)S +4068(a)S +4147(client)S +4404(program,)S +4802(\256fo)S +4976(pipes)S +5222(and)S +5402(unix)S +2472 V +1510(sockets)S +1834(will)S +2020(be)S +2144(disabled.)S +2640 V +10 B +1260(-invert)S +2760 V +10 R +1510(Start)S +1748(XImtool)S +2136(using)S +2402(inverted)S +2778(colormaps.)S +3298(When)S +3585(set,)S +3770(a)S +3863("normalized")S +4443(display)S +4781(will)S +4987(always)S +5314(be)S +5458(the)S +2880 V +1510(inverse)S +1828(of)S +1941(the)S +2093(selected)S +2444(colormap.)S +3048 V +10 B +1260(-maxColors)S +10 I +1789(N)S +3168 V +10 R +1510(Specify)S +1845(the)S +1997(max)S +2199(number)S +2534(of)S +2647(colors)S +2921(to)S +3029(be)S +3153(used)S +3366(for)S +3512(the)S +3664(display.)S +3336 V +10 B +1260(-memModel)S +10 I +1805(type)S +3456 V +10 R +1510(Determines)S +2003(how)S +2208(ximtool)S +2553(uses)S +2758(memory)S +3125(in)S +3237(the)S +3393(ximtool)S +3739(client)S +3995(and)S +4173(the)S +4329(X)S +4435(server.)S +4737(The)S +4926(options)S +5255(are)S +10 I +5410(fast)S +10 R +5555(,)S +3576 V +10 I +1510(beNiceToServer)S +10 R +2153(,)S +2220(and)S +10 I +2406(small)S +10 R +2623(.)S +2720(The)S +2917(default)S +3236(is)S +10 I +3345(fast)S +10 R +3490(,)S +3557(which)S +3843(uses)S +4057(server)S +4342(pixmaps)S +4723(to)S +4843(make)S +5101(frame)S +5374(blink)S +3696 V +1510(fast.)S +1742(This)S +1953(is)S +2053(recommended)S +2651(unless)S +2934(server)S +3210(memory)S +3576(is)S +3676(very)S +3886(limited.)S +4258(Note)S +4485(that)S +4668(even)S +4889(in)S +5000(fast)S +5177(mode,)S +5458(the)S +3816 V +1510(server)S +1792(pixmap)S +2131(is)S +2237(only)S +2454(the)S +2615(size)S +2808(of)S +2929(the)S +3089(display)S +3416(window,)S +3801(so)S +3928(memory)S +4299(usage)S +4564(is)S +4669(reasonable)S +5133(even)S +5359(if)S +5458(the)S +3936 V +1510(frame)S +1772(bu)S +1872 H + (f)show 10 -.5 mul h (f)show +10 R +1933(er)S +2040(is)S +2137(very)S +2344(large.)S +4104 V +10 B +1260(-nframes)S +10 I +1672(N)S +4224 V +10 R +1510(Speci\256es)S +1913(the)S +2077(number)S +2424(of)S +2549(frame)S +2823(bu)S +2923 H + (f)show 10 -.5 mul h (f)show +10 R +2984(ers)S +3142(to)S +3262(con\256gure)S +3681(at)S +3795(startup.)S +4164(By)S +4323(default)S +4642(there)S +4883(will)S +5081(be)S +5217(2)S +5309(frames)S +4344 V +1510(available,)S +1925(a)S +1999(maximum)S +2435(of)S +2548(4)S +2628(frames)S +2929(are)S +3080(allowed.)S +4512 V +10 B +1260(-port)S +10 I +1506(N)S +4632 V +10 R +1510(Speci\256es)S +1901(the)S +2053(port)S +2244(number)S +2579(to)S +2687(use)S +2850(when)S +3096(connecting)S +3564(through)S +3905(an)S +4029(inet)S +4209(socket.)S +4800 V +10 B +1260(-port_only)S +4920 V +10 R +1510(Same)S +1770(as)S +10 I +1891(-inet_only)S +10 R +2334(option.)S +2683(If)S +2787(set,)S +2961(only)S +3177(inet)S +3365(sockets)S +3697(will)S +3891(be)S +4023(used)S +4244(for)S +4398(communication)S +5058(with)S +5275(a)S +5358(client)S +5040 V +1510(program.)S +5208 V +10 B +1260(-printCon\256g)S +10 I +1824(name)S +5328 V +10 R +1510(Speci\256es)S +1916(the)S +2083(printer)S +2394(con\256guration)S +2973(\256le)S +3147(to)S +3271(use.)S +3505(By)S +3668(default)S +3991(this)S +4182(will)S +4384(be)S +4524(/usr/local/lib/ximprint.cfg.)S +5448 V +1510(See)S +1684(below)S +1958(for)S +2104(more)S +2339(information)S +2841(on)S +2971(con\256guring)S +3462(output)S +3748(devices.)S +5616 V +10 B +1260(-tile)S +10 R +1510(The)S +1695(default)S +2002(display)S +2321(mode)S +2573(is)S +2670(to)S +2778(view)S +3002(one)S +3177(frame)S +3440(at)S +3543(a)S +3618(time.)S +3852(In)S +3966(tile)S +4125(frames)S +4427(mode,)S +4705(2)S +4786(or)S +4900(4)S +4981(frames)S +5283(may)S +5486(be)S +5736 V +1510(viewed)S +1834(simultaneously)S +2476(in)S +2590(the)S +2748(display)S +3073(window.)S +3486(All)S +3650(the)S +3808(usual)S +4055(operations)S +4507(\(zoom)S +4798(and)S +4977(pan,)S +5181(colortable)S +5856 V +1510(enhancement,)S +2091(cursor)S +2370(readback,)S +2784(etc.\))S +3018(still)S +3199(work)S +3434(for)S +3580(each)S +3792(frame)S +4054(even)S +4272(when)S +4518(in)S +4626(tile)S +4784(frames)S +5085(mode.)S +6024 V +10 B +1260(-unix)S +10 I +1513(name)S +6144 V +10 R +1510(Speci\256es)S +1909(the)S +2069(unix)S +2285(domain)S +2623(socket)S +2916(name)S +3170(to)S +3286(use.)S +3512(A)S +3622("%d")S +3876(in)S +3993(the)S +4154(\256lename)S +4537(will)S +4732(be)S +4865(replaced)S +5241(with)S +5458(the)S +6264 V +1510(user)S +1706(id.)S +6432 V +10 B +1260(-unix_only)S +6552 V +10 R +1510(If)S +1607(set,)S +1774(only)S +1983(unix)S +2192(domain)S +2523(sockets)S +2848(will)S +3035(be)S +3160(used)S +3374(for)S +3521(communication)S +4174(with)S +4383(a)S +4458(client)S +4711(program,)S +5105(inet)S +5286(sockets)S +6672 V +1510(and)S +1684(\256fos)S +1892(will)S +2078(be)S +2202(disabled.)S +6960 V +9 B +900(RESOURCES)S +7080 V +10 R +1260(XImtool)S +1629(is)S +1726(implemented)S +2278(as)S +2391(a)S +2465(client)S +2717(program)S +3085(which)S +3359(is)S +3456(responsible)S +3941(for)S +4087(loading)S +4418(the)S +4571(frame)S +4834(bu)S +4934 H + (f)show 10 -.5 mul h (f)show +10 R +4995(ers/colormaps,)S +7200 V +1260(communicating)S +1917(with)S +2130(clients,)S +2451(etc,)S +2627(and)S +2806(a)S +2885(user-modi\256able)S +3547(GUI)S +3759(\256le)S +3922(written)S +4240(as)S +4358(a)S +4437(Tcl)S +4605(script)S +4862(which)S +5141(handles)S +5480(all)S +7680 V +900(X11IRAF Project)S +2709(Last change: 10 Dec 1996)S +5530(2)S +7920 V +EP +%%Page: 3 3 +BP +/slant 0 def +/height 1.000000 def +10 R +10 R +480 V +900(XIMTOOL)S +1376(\()S +1425(1)S +1491(\))S +2787(USER COMMANDS )S +4956(XIMTOOL)S +5432(\()S +5481(1)S +5547(\))S +960 V +1260(the)S +1412(user)S +1608(interface)S +1986(details.)S +2332(The)S +10 I +2517(client)S +2770(resources)S +10 R +3189(described)S +3602(below)S +3877(will)S +4064(be)S +4189(common)S +4570(to)S +4679(any)S +4854(user-de\256ned)S +5378(GUI,)S +1080 V +1260(the)S +10 I +1426(gui)S +1598(resources)S +10 R +2030(may)S +2246(change)S +2572(depending)S +3032(on)S +3176(how)S +3392(extensively)S +3890(the)S +4055(GUI)S +4275(has)S +4451(been)S +4682(modi\256ed)S +5081(by)S +5224(the)S +5389(user.)S +1200 V +1260(Each)S +1495(of)S +1615(these)S +1857(components)S +2377(has)S +2547(its)S +2679(own)S +2888(set)S +3036(of)S +3156(resources,)S +3594(but)S +3759(to)S +3874(the)S +4033(user)S +4236(setting)S +4540(them)S +4777(is)S +4881(the)S +5040(same)S +5282(as)S +5402(with)S +1320 V +1260(any)S +1434(other)S +1669(application.)S +1560 V +10 I +1260(Gterm)S +10 R +1548(widget)S +1853(resources)S +2262(\(i.e.)S +2450(those)S +2694(for)S +2844(the)S +3000(main)S +3234(image)S +3512(window)S +3868(or)S +3985(colorbar\))S +4384(may)S +4590(be)S +4718(set)S +4863(as)S +4980(either)S +5241(client)S +5497(or)S +1680 V +1260(GUI)S +1467(resources.)S +1928(See)S +2102(the)S +10 I +2254(xgterm\(1\))S +10 R +2677(man)S +2879(page)S +3097(for)S +3243(a)S +3317(complete)S +3713(description)S +4187(of)S +10 I +4300(Gterm)S +10 R +4585(widget)S +4887(resources.)S +1968 V +9 B +1080(CLIENT)S +1452(RESOURCES)S +2088 V +10 R +1260(The)S +1445(client)S +1697(resources)S +2103(generally)S +2504(de\256ne)S +2778(the)S +2930(initial)S +3194(state)S +3407(of)S +3520(the)S +3672(application)S +4146(or)S +4259(set)S +4400(con\256guration)S +4963(parameters.)S +2256 V +10 B +1620(Resource)S +2043(Name)S +2870(Default)S +3216(Value)S +2364 V +10 R +1620(defCon\256g)S +2870(1)S +2472 V +1620(defNFrames)S +2870(0)S +2580 V +1620(tileBorderWidth)S +2870(3)S +2688 V +1620(tileBorderColor)S +2870(9)S +2796 V +1620(autoscale)S +2870(false)S +2904 V +1620(antialias)S +2870(false)S +3012 V +1620(antialiasType)S +2870(boxcar)S +3120 V +1620(tileFrames)S +2870(false)S +3228 V +1620(highlightFrames)S +2870(true)S +3336 V +1620(gui)S +2870(default)S +3444 V +1620(imtoolrc)S +2870(/usr/local/lib/imtoolrc)S +3552 V +1620(invert)S +2870(false)S +3660 V +1620(memModel)S +2870(fast)S +3768 V +1620(basePixel:)S +2870(64)S +3876 V +1620(maxColors:)S +2870(216)S +3984 V +1620(cmapInitialize:)S +2870(false)S +4092 V +1620(cmap1)S +2870(none)S +4200 V +1620(cmap2)S +2870(none)S +4308 V +1620(cmapDir1)S +2870(none)S +4416 V +1620(cmapDir2)S +2870(/usr/local/lib/imtoolcmap)S +4524 V +1620(input_\256fo)S +2870(/dev/imt1i)S +4632 V +1620(output_\256fo)S +2870(/dev/imt1o)S +4740 V +1620(unixaddr)S +2870(/tmp/.IMT%d)S +4848 V +1620(port)S +2870(5137)S +5016 V +1260(Description)S +1756(of)S +1869(ximtool)S +2211(client)S +2463(resources:)S +5304 V +10 B +1260(defCon\256g)S +10 R +2160(Default)S +2499(frame)S +2772(bu)S +2872 H + (f)show 10 -.5 mul h (f)show +10 R +2933(er)S +3051(con\256guration)S +3625(number)S +3971(on)S +4112(startup.)S +4480(See)S +4665(below)S +4950(for)S +5107(more)S +5353(infor-)S +5424 V +2160(mation)S +2468(on)S +2598(frame)S +2860(bu)S +2960 H + (f)show 10 -.5 mul h (f)show +10 R +3021(ers.)S +5592 V +10 B +1260(defNFrames)S +10 R +2160(Default)S +2496(number)S +2838(of)S +2958(frames)S +3266(on)S +3403(startup.)S +3767(Set)S +3932(to)S +4047(zero)S +4255(to)S +4371(use)S +4542(the)S +4702(value)S +4956(from)S +5188(the)S +5348(frame)S +5712 V +2160(bu)S +2260 H + (f)show 10 -.5 mul h (f)show +10 R +2321(er)S +2428(con\256guration)S +2991(\()S +10 I +3024(imtoolrc)S +10 R +3363(\))S +3426(\256le.)S +5880 V +10 B +1260(tileBorderWidth)S +5988 V +1260(tileBorderColor)S +10 R +2160(Used)S +2401(by)S +2537(the)S +2695(tile)S +2859(frames)S +3166(option.)S +3513(Speci\256es)S +3910(how)S +4118(far)S +4264(apart)S +4499(to)S +4613(space)S +4870(the)S +5029(frames)S +5337(in)S +5452(tile)S +6108 V +2160(frames)S +2484(mode.)S +2814(Color)S +3095("9")S +3280(refers)S +3559(to)S +3690(the)S +3865(Gterm)S +4172(widget)S +4496(resource)S +4885(color9,)S +5217(which)S +5513(is)S +6228 V +2160(assigned)S +2534(a)S +2608(color)S +2843(with)S +3051(its)S +3176(own)S +3378(resource.)S +6396 V +10 B +1260(autoscale)S +10 R +2160(Enable/disable)S +2778(the)S +2930(autoscale)S +3331(option.)S +6564 V +10 B +1260(antialias)S +10 R +2160(Enable/disable)S +2778(the)S +2930(antialias)S +3293(option.)S +6732 V +10 B +1260(antialiasType)S +10 R +2160(Type)S +2395(of)S +2508(antialiasing.)S +6900 V +10 B +1260(tileFrames)S +10 R +2160(Enable/disable)S +2778(the)S +2930(tile)S +3088(frames)S +3389(option.)S +7068 V +10 B +1260(highlightFrames)S +10 R +2160(Determines)S +2650(whether)S +3001(the)S +3153(current)S +3465(frame)S +3727(is)S +3824(highlighted)S +4310(when)S +4556(in)S +4664(tile)S +4822(frames)S +5123(mode.)S +7236 V +10 B +1260(gui)S +10 R +2160(The)S +2349(GUI)S +2560(to)S +2672(be)S +2800(executed.)S +3243("default")S +3636(refers)S +3896(to)S +4008(the)S +4164(default,)S +4500(builtin)S +4796(ximtool)S +5142(GUI.)S +5408(You)S +7716 V +900(X11IRAF Project)S +2709(Last change: 10 Dec 1996)S +5530(3)S +7920 V +EP +%%Page: 4 4 +BP +/slant 0 def +/height 1.000000 def +10 R +10 R +480 V +900(XIMTOOL)S +1376(\()S +1425(1)S +1491(\))S +2787(USER COMMANDS )S +4956(XIMTOOL)S +5432(\()S +5481(1)S +5547(\))S +960 V +2160(can)S +2341(replace)S +2671(this)S +2859(with)S +3080(your)S +3306(own)S +3521(GUI)S +3741(\256le)S +3911(if)S +4014(you)S +4206(are)S +4369(bold)S +4589(enough,)S +4950(and)S +5136(completely)S +1080 V +2160(change)S +2472(the)S +2624(look)S +2832(and)S +3006(functionality)S +3547(of)S +3660(the)S +3812(GUI)S +4019(if)S +4110(desired.)S +1248 V +10 B +1260(imtoolrc)S +10 R +2160(Where)S +2496(to)S +2645(\256nd)S +2872(the)S +3065(imtoolrc)S +3475(\256le.)S +3730(This)S +3980(de\256nes)S +4335(the)S +4529(recognized)S +5038(frame)S +5342(bu)S +5442 H + (f)show 10 -.5 mul h (f)show +10 R +5503(er)S +1368 V +2160(con\256gurations.)S +1536 V +10 B +1260(invert)S +10 R +2160(Start)S +2388(Ximtool)S +2761(using)S +3017(an)S +3150(inverted)S +3516(colormap.)S +3987(When)S +4264(set,)S +4440(a)S +4524("normalized")S +5095(display)S +5424(will)S +1656 V +2160(always)S +2467(be)S +2591(the)S +2743(inverse)S +3061(of)S +3174(the)S +3326(selected)S +3677(colormap.)S +1824 V +10 B +1260(memModel)S +10 R +2160(Determines)S +2656(how)S +2864(ximtool)S +3212(uses)S +3420(memory)S +3789(in)S +3904(the)S +4063(ximtool)S +4412(client)S +4671(and)S +4852(the)S +5011(X)S +5120(server.)S +5425(The)S +1944 V +2160(options)S +2493(are)S +2652("fast",)S +2941("beNiceToServer",)S +3739(and)S +3920("small".)S +4311(The)S +4503(default)S +4817(is)S +4921(fast,)S +5127(which)S +5408(uses)S +2064 V +2160(server)S +2457(pixmaps)S +2851(to)S +2984(make)S +3255(frame)S +3542(blink)S +3803(fast.)S +4057(This)S +4290(is)S +4412(recommended)S +5032(unless)S +5337(server)S +2184 V +2160(memory)S +2525(is)S +2624(very)S +2833(limited.)S +3204(Note)S +3430(that)S +3612(even)S +3831(in)S +3940(fast)S +4115(mode,)S +4393(the)S +4546(server)S +4820(pixmap)S +5151(is)S +5249(only)S +5458(the)S +2304 V +2160(size)S +2346(of)S +2460(the)S +2613(display)S +2933(window,)S +3311(so)S +3431(memory)S +3795(usage)S +4054(is)S +4153(reasonable)S +4611(even)S +4831(if)S +4924(the)S +5078(frame)S +5342(bu)S +5442 H + (f)show 10 -.5 mul h (f)show +10 R +5503(er)S +2424 V +2160(is)S +2257(very)S +2464(large.)S +2532 V +10 Y +1260(*)S +10 B +1310(basePixel)S +2640 V +10 Y +1260(*)S +10 B +1310(maxColors)S +10 R +2160(These)S +2434(two)S +2620(resources)S +3032(determine)S +3467(the)S +3626(region)S +3918(of)S +4038(colormap)S +4452(space)S +4710(used)S +4930(to)S +5045(render)S +5336(image)S +2760 V +2160(pixels.)S +2928 V +10 Y +1260(*)S +10 B +1310(cmapInitialize)S +10 R +2160(Initialize)S +2555(the)S +2717(ximtool)S +3069(colormap)S +3486(at)S +3598(startup.)S +3965(This)S +4183(is)S +4290(sometimes)S +4758(necessary)S +5185(to)S +5303(clear)S +5536(a)S +3048 V +2160(previous)S +2534(ximtool)S +2876(colormap)S +3283(allowing)S +3663(a)S +3737(new)S +3933(basePixel)S +4346(and)S +4520(maxColors)S +4989(to)S +5097(take)S +5293(e)S +5337 H + (f)show 10 -.5 mul h (f)show +10 R +5398(ect.)S +3216 V +10 B +1260(cmap1)S +3324 V +1260(cmap2)S +10 R +2160(User)S +2389(colormap)S +2807(\256les.)S +3070(The)S +3266(intent)S +3535(here)S +3748(is)S +3857(to)S +3977(allow)S +4241(individual)S +4689(colormaps)S +5147(to)S +5267(be)S +5403(con-)S +3444 V +2160(veniently)S +2562(speci\256ed)S +2947(as)S +3060(a)S +3134(resource.)S +3612 V +10 B +1260(cmapDir1)S +3720 V +1260(cmapDir2)S +10 R +2160(User)S +2393(or)S +2521(system)S +2844(colormap)S +3266(directories.)S +3788(By)S +3951(default)S +4274(cmapDir2)S +4719(points)S +5010(to)S +5134(the)S +5302(system)S +3840 V +2160(directory)S +2564(/usr/local/lib/imtoolcmap,)S +3644(allowing)S +4037(a)S +4124(set)S +4278(of)S +4404(site)S +4586(default)S +4906(colormaps)S +5365(to)S +5486(be)S +3960 V +2160(de\256ned)S +2484(here.)S +2740(This)S +2948(leaves)S +3227(cmapDir1)S +3656(available)S +4046(to)S +4154(a)S +4228(user)S +4424(colormap)S +4831(directory.)S +4128 V +10 B +1260(input_\256fo)S +4236 V +1260(output_\256fo)S +10 R +2160(The)S +2354(input)S +2600(and)S +2784(output)S +3080(\256fos)S +3298(for)S +3454(\256fo)S +3633(i/o.)S +3834("Input")S +4167(and)S +4351("output")S +4729(are)S +4890(from)S +5124(the)S +5286(client's)S +4356 V +2160(point)S +2396(of)S +2509(view.)S +2788(Note)S +3012(that)S +3192(only)S +3400(one)S +3574(display)S +3893(server)S +4166(can)S +4334(use)S +4497(a)S +4571(\256fo-pair)S +4928(at)S +5030(one)S +5204(time.)S +4524 V +10 B +1260(unixaddr)S +10 R +2160(Template)S +2569(address)S +2900(for)S +3048(unix)S +3258(domain)S +3591(socket.)S +3934(The)S +4122(user)S +4321(must)S +4549(have)S +4770(write)S +5008(permission)S +5480(on)S +4644 V +2160(this)S +2338(directory,)S +2756(or)S +2872(the)S +3027(\256le)S +3188(must)S +3416(already)S +3742(exist.)S +4019(%d,)S +4210(if)S +4304(given,)S +4584(is)S +4684(replaced)S +5054(by)S +5187(the)S +5342(user's)S +4764 V +2160(UID.)S +4932 V +10 B +1260(port)S +10 R +2160(TCP/IP)S +2500(port)S +2700(for)S +2855(the)S +3017(server.)S +3355(Note)S +3589(that)S +3779(only)S +3997(one)S +4181(server)S +4464(can)S +4642(listen)S +4899(on)S +5039(a)S +5123(port)S +5324(at)S +5436(one)S +5052 V +2160(time,)S +2402(so)S +2530(if)S +2630(multiple)S +3003(ximtool)S +3354(servers)S +3675(are)S +3835(desired)S +4161(on)S +4299(the)S +4459(same)S +4702(machine,)S +5103(they)S +5313(should)S +5172 V +2160(be)S +2284(given)S +2536(di)S +2614 H + (f)show 10 -.5 mul h (f)show +10 R +2675(erent)S +2904(ports.)S +5460 V +9 B +1080(GUI)S +1277(RESOURCES)S +5580 V +10 R +1260(In)S +1394(principle)S +1800(ximtool)S +2163(can)S +2352(have)S +2592(any)S +2788(number)S +3145(of)S +3280(di)S +3358 H + (f)show 10 -.5 mul h (f)show +10 R +3419(erent)S +3670(GUIs,)S +3963(each)S +4197(of)S +4332(which)S +4628(de\256nes)S +4963(its)S +5110(own)S +5334(set)S +5497(of)S +5700 V +1260(resources.)S +1733(GUIs)S +1991(typically)S +2383(de\256ne)S +2669(a)S +2755(great)S +2996(many)S +3260(resources,)S +3703(but)S +3873(most)S +4110(of)S +4234(these)S +4480(are)S +4642(not)S +4811(really)S +5079(intended)S +5464(for)S +5820 V +1260(modi\256cation)S +1796(by)S +1926(the)S +2078(user)S +2274(\(although)S +2687(one)S +2861(can)S +3029(modify)S +3348(them)S +3578(if)S +3669(desired\).)S +6060 V +1260(The)S +1455(following)S +1884(are)S +2045(some)S +2296(of)S +2419(the)S +2581(more)S +2826(useful)S +3110(resources)S +3526(used)S +3749(by)S +3889(the)S +4051(default)S +4369(ximtool)S +4722(GUI.)S +4995(The)S +10 I +5191(imagewin)S +6180 V +10 R +1260(resources)S +1666(are)S +1817(Gterm)S +2102(widget)S +2404(resources.)S +6348 V +10 B +1650(Resource)S +2073(Name)S +3370(Default)S +3716(Value)S +6456 V +10 R +1650(.geometry:)S +6564 V +10 Y +1650(*)S +10 R +1700(controlShell.geometry:)S +6672 V +10 Y +1650(*)S +10 R +1700(info.geometry:)S +3370(420x240)S +6780 V +10 Y +1650(*)S +10 R +1700(load_panel.geometry:)S +6888 V +10 Y +1650(*)S +10 R +1700(save_panel.geometry:)S +6996 V +10 Y +1650(*)S +10 R +1700(print_panel.geometry:)S +7104 V +10 Y +1650(*)S +10 R +1700(help_panel.geometry:)S +7212 V +10 Y +1650(*)S +10 R +1700(cmapName:)S +3370(image)S +7692 V +900(X11IRAF Project)S +2709(Last change: 10 Dec 1996)S +5530(4)S +7920 V +EP +%%Page: 5 5 +BP +/slant 0 def +/height 1.000000 def +10 R +10 R +480 V +900(XIMTOOL)S +1376(\()S +1425(1)S +1491(\))S +2787(USER COMMANDS )S +4956(XIMTOOL)S +5432(\()S +5481(1)S +5547(\))S +960 V +10 Y +1650(*)S +10 R +1700(basePixel:)S +3370(64)S +1068 V +10 Y +1650(*)S +10 R +1700(imagewin.warpCursor:)S +3370(true)S +1176 V +10 Y +1650(*)S +10 R +1700(imagewin.raiseWindow:)S +3370(true)S +1284 V +10 Y +1650(*)S +10 R +1700(imagewin.deiconifyWindow:)S +3370(true)S +1392 V +10 Y +1650(*)S +10 R +1700(imagewin.ginmodeCursor:)S +3370(circle)S +1500 V +10 Y +1650(*)S +10 R +1700(imagewin.ginmodeBlinkInterval:)S +3370(500)S +1608 V +10 Y +1650(*)S +10 R +1700(imagewin.color0:)S +3370(black)S +1716 V +10 Y +1650(*)S +10 R +1700(imagewin.color1:)S +3370(white)S +1824 V +10 Y +1650(*)S +10 R +1700(imagewin.color8:)S +3370(#7c8498)S +1932 V +10 Y +1650(*)S +10 R +1700(imagewin.color9:)S +3370(steelblue)S +2040 V +10 Y +1650(*)S +10 R +1700(imagewin.width:)S +3370(512)S +2148 V +10 Y +1650(*)S +10 R +1700(imagewin.height:)S +3370(512)S +2256 V +10 Y +1650(*)S +10 R +1700(autoscale:)S +3370(True)S +2364 V +10 Y +1650(*)S +10 R +1700(zoomfactors:)S +3370(1)S +3450(2)S +3530(4)S +3610(8)S +2472 V +10 Y +1650(*)S +10 R +1700(displayCoords:)S +3370(True)S +2580 V +10 Y +1650(*)S +10 R +1700(displayPanner:)S +3370(True)S +2688 V +10 Y +1650(*)S +10 R +1700(displayMagni\256er:)S +3370(False)S +2796 V +10 Y +1650(*)S +10 R +1700(blinkRate:)S +3370(1.0)S +2904 V +10 Y +1650(*)S +10 R +1700(pannerArea:)S +3370(150)S +10 Y +3520(*)S +10 R +3570(150)S +3012 V +10 Y +1650(*)S +10 R +1700(pannerGeom:)S +3370(-5+5)S +3120 V +10 Y +1650(*)S +10 R +1700(magni\256erArea:)S +3370(100)S +10 Y +3520(*)S +10 R +3570(100)S +3228 V +10 Y +1650(*)S +10 R +1700(magni\256erGeom:)S +3370(+5+5)S +3336 V +10 Y +1650(*)S +10 R +1700(wcsboxGeom:)S +3370(-5-5)S +3444 V +10 Y +1650(*)S +10 R +1700(maxContrast:)S +3370(5.0)S +3552 V +10 Y +1650(*)S +10 R +1700(warnings:)S +3370(True)S +3720 V +1260(Description)S +1756(of)S +1869(selected)S +2220(resources:)S +4008 V +10 B +1260(.geometry)S +10 R +2360(Geometry)S +2789(of)S +2902(main)S +3132(image)S +3406(window.)S +4176 V +10 Y +1260(*)S +10 B +1310(controlShell.geometry)S +10 R +2360(Geometry)S +2789(of)S +2902(control)S +3215(panel)S +3461(shell.)S +4344 V +10 Y +1260(*)S +10 B +1310(info.geometry)S +10 R +2360(Geometry)S +2789(of)S +2902(info)S +3093(box.)S +4512 V +10 Y +1260(*)S +10 B +1310(load_panel.geometry)S +10 R +2360(Geometry)S +2789(of)S +2902(\256le)S +3060(load)S +3262(panel.)S +4680 V +10 Y +1260(*)S +10 B +1310(save_panel.geometry)S +10 R +2360(Geometry)S +2789(of)S +2902(save)S +3109(control)S +3422(panel.)S +4848 V +10 Y +1260(*)S +10 B +1310(print_panel.geometry)S +10 R +2360(Geometry)S +2789(of)S +2902(print)S +3121(control)S +3434(panel.)S +5016 V +10 Y +1260(*)S +10 B +1310(help_panel.geometry)S +10 R +2360(Geometry)S +2789(of)S +2902(help)S +3104(box.)S +5184 V +10 Y +1260(*)S +10 B +1310(cmapName)S +10 R +2360(Name)S +2638(used)S +2861(for)S +3018(private)S +3336(colormap.)S +3809(The)S +4005(default)S +4323(for)S +4480(all)S +4621(IRAF)S +4890(imaging)S +5259(applica-)S +5304 V +2360(tions)S +2601(is)S +2714("image".)S +3141(Gterm)S +3442(widget)S +3760(based)S +4033(imaging)S +4407(applications)S +4936(which)S +5225(have)S +5458(the)S +5424 V +2360(same)S +2597(value)S +2845(of)S +2961(cmapName)S +3448(will)S +3637(share)S +3880(the)S +4035(same)S +4273(colormap,)S +4708(minimizing)S +5203(colormap)S +5544 V +2360(\257ashing)S +2707(and)S +2881(allowing)S +3261(multiple)S +3625(applications)S +4138(to)S +4246(be)S +4370(run)S +4533(at)S +4635(the)S +4787(same)S +5022(time.)S +5712 V +10 Y +1260(*)S +10 B +1310(basePixel)S +10 R +2360(The)S +2545(base)S +2752(colormap)S +3159(cell)S +3333(used)S +3546(by)S +3676(the)S +3828(display)S +4147(colormap.)S +5880 V +10 Y +1260(*)S +10 B +1310(imagewin.warpCursor)S +10 R +2360(Warp)S +2611(pointer)S +2924(into)S +3110(image)S +3384(window)S +3736(when)S +3982(initiating)S +4374(a)S +4448(cursor)S +4727(read.)S +6048 V +10 Y +1260(*)S +10 B +1310(imagewin.raiseWindow)S +10 R +2360(Raise)S +2612(image)S +2886(window)S +3238(when)S +3484(initiating)S +3876(a)S +3950(cursor)S +4229(read.)S +6216 V +10 Y +1260(*)S +10 B +1310(imagewin.deiconifyWindow)S +6336 V +10 R +2360(Deiconify)S +2789(image)S +3063(window)S +3415(if)S +3506(necessary)S +3923(when)S +4169(initiating)S +4561(a)S +4635(cursor)S +4914(read.)S +6504 V +10 Y +1260(*)S +10 B +1310(imagewin.ginmodeCursor)S +6624 V +10 R +2360(Type)S +2596(of)S +2710(cursor)S +2990(when)S +3237(a)S +3312(cursor)S +3592(read)S +3795(is)S +3894(in)S +4004(progress.)S +4429(The)S +4616(default)S +4925(is)S +5024(a)S +5100(circle.)S +5408(Any)S +6744 V +2360(selection)S +2800(from)S +3079(the)S +3285(X)S +3441(cursor)S +3774(font)S +4019(can)S +4241(be)S +4419(used.)S +4741(A)S +4897(special)S +5258(case)S +5513(is)S +6864 V +2360("full_crosshair")S +3021(which)S +3295(is)S +3392(the)S +3544(full)S +3713(crosshair)S +4103(cursor)S +4382(of)S +4495(the)S +4647(Gterm)S +4932(widget.)S +7032 V +10 Y +1260(*)S +10 B +1310(imagewin.ginmodeBlinkInterval)S +7152 V +10 R +2360(Determines)S +2857(whether)S +3215(the)S +3374(cursor)S +3660(blinks)S +3942(when)S +4195(a)S +4277(cursor)S +4564(read)S +4773(is)S +4878(in)S +4994(progress.)S +5425(The)S +7272 V +2360(value)S +2606(is)S +2703(given)S +2955(in)S +3063(milliseconds.)S +7752 V +900(X11IRAF Project)S +2709(Last change: 10 Dec 1996)S +5530(5)S +7920 V +EP +%%Page: 6 6 +BP +/slant 0 def +/height 1.000000 def +10 R +10 R +480 V +900(XIMTOOL)S +1376(\()S +1425(1)S +1491(\))S +2787(USER COMMANDS )S +4956(XIMTOOL)S +5432(\()S +5481(1)S +5547(\))S +960 V +10 Y +1260(*)S +10 B +1310(imagewin.color0)S +10 R +2360(Background)S +2878(color.)S +1128 V +10 Y +1260(*)S +10 B +1310(imagewin.color1)S +10 R +2360(Foreground)S +2856(color.)S +1296 V +10 Y +1260(*)S +10 B +1310(imagewin.color8)S +10 R +2360(Color)S +2618(assigned)S +2992(the)S +3144(panner)S +3445(window.)S +1464 V +10 Y +1260(*)S +10 B +1310(imagewin.color9)S +10 R +2360(Color)S +2618(used)S +2831(for)S +2977(the)S +3129(tileFrames)S +3581(highlight.)S +1632 V +10 Y +1260(*)S +10 B +1310(imagewin.width)S +10 R +2360(Width)S +2640(of)S +2753(the)S +2905(main)S +3135(image)S +3409(window.)S +1800 V +10 Y +1260(*)S +10 B +1310(imagewin.height)S +10 R +2360(Height)S +2662(of)S +2775(the)S +2927(main)S +3157(image)S +3431(window.)S +1968 V +10 Y +1260(*)S +10 B +1310(pannerArea)S +10 R +2360(Area)S +2583(in)S +2691(pixels)S +2960(of)S +3073(the)S +3225(panner)S +3526(window.)S +2136 V +10 Y +1260(*)S +10 B +1310(pannerGeom)S +10 R +2360(Where)S +2655(to)S +2763(place)S +3003(the)S +3155(panner)S +3456(window.)S +2304 V +10 Y +1260(*)S +10 B +1310(magni\256erArea)S +10 R +2360(Area)S +2583(in)S +2691(pixels)S +2960(of)S +3073(the)S +3225(magni\256er)S +3638(window.)S +2472 V +10 Y +1260(*)S +10 B +1310(magni\256erGeom)S +10 R +2360(Where)S +2655(to)S +2763(place)S +3003(the)S +3155(magni\256er)S +3568(window.)S +2640 V +10 Y +1260(*)S +10 B +1310(wcsboxGeom)S +10 R +2360(Where)S +2655(to)S +2763(place)S +3003(the)S +3155(coords)S +3451(box.)S +2808 V +10 Y +1260(*)S +10 B +1310(maxContrast)S +10 R +2360(Maximum)S +2807(contrast)S +3153(value.)S +3216 V +9 B +900(DESCRIPTION)S +3336 V +10 R +1260(As)S +1401(a)S +1475(display)S +1794(server,)S +2092(XImtool)S +2461(is)S +2558(started)S +2854(as)S +2967(a)S +3041(separate)S +3397(process)S +3726(from)S +3950(client)S +4202(software)S +4575(such)S +4788(as)S +4901(IRAF.)S +5185(Once)S +5426(it)S +5513(is)S +3456 V +1260(running)S +1606(it)S +1697(will)S +1888(accept)S +2177(client)S +2434(connections)S +2946(simultaneously)S +3587(on)S +3721(\256fo)S +3894(pipes,)S +4164(unix)S +4376(domain)S +4710(sockets,)S +5063(or)S +5180(inet)S +5364(sock-)S +3576 V +1260(ets.)S +1432(A)S +1540(display)S +1865(client)S +2123(like)S +2309(the)S +2467(IRAF)S +10 I +2731(DISPLAY)S +10 R +3156(task)S +3353(makes)S +3644(a)S +3724(connection)S +4198(and)S +4378(sends)S +4637(the)S +4796(image)S +5077(across)S +5363(using)S +3696 V +1260(an)S +1385(IIS)S +1538(protocol.)S +1957(Once)S +2198(the)S +2351(image)S +2625(is)S +2722(loaded)S +3018(in)S +3126(the)S +3278(display)S +3597(bu)S +3697 H + (f)show 10 -.5 mul h (f)show +10 R +3758(er)S +3865(it)S +3951(may)S +4153(be)S +4277(enhanced,)S +4708(saved)S +4965(to)S +5073(a)S +5147(disk)S +5344(\256le)S +5502(in)S +3816 V +1260(a)S +1340(number)S +1681(of)S +1800(di)S +1878 H + (f)show 10 -.5 mul h (f)show +10 R +1939(erent)S +2174(formats,)S +2540(or)S +2659(printed)S +2978(as)S +3097(Encapsulated)S +3665(Postscript)S +4097(to)S +4212(a)S +4293(printer)S +4596(or)S +4716(disk)S +4920(\256le.)S +5140(Up)S +5299(to)S +5414(four)S +3936 V +1260(frame)S +1531(bu)S +1631 H + (f)show 10 -.5 mul h (f)show +10 R +1692(ers)S +1847(are)S +2007(allowed,)S +2387(these)S +2631(may)S +2842(be)S +2975(displayed)S +3397(simultaneously)S +4042(in)S +4159(a)S +4242(tiled)S +4459(mode,)S +4745(or)S +4866(blinked)S +5204(frame-to-)S +4056 V +1260(frame.)S +1582(Each)S +1816(frame)S +2083(may)S +2290(have)S +2513(its)S +2643(own)S +2850(colormap)S +3262(or)S +3380(brightness/contrast)S +4170(enhancement.)S +4787(Pan/Zoom)S +5240(and)S +5420(cur-)S +4176 V +1260(sor)S +1412(readout)S +1741(are)S +1892(permitted)S +2305(using)S +10 I +2552(markers)S +10 R +2879(,)S +2934(on-line)S +3247(help)S +3449(is)S +3546(also)S +3737(available.)S +4416 V +1260(When)S +1530(run)S +1695(in)S +1805(standalone)S +2264(mode,)S +2543(images)S +2858(\(currently)S +3283(IRAF)S +3543(OIF,)S +3761(GIF,)S +3979(Sun)S +4167(Raster\256les)S +4621(or)S +4736(simple)S +5036(FITS)S +5275(formats)S +4536 V +1260(are)S +1428(permitted\))S +1891(may)S +2110(be)S +2251(loaded)S +2564(on)S +2711(the)S +2880(command)S +3321(line)S +3518(or)S +3648(by)S +3795(using)S +4059(the)S +4228(Load)S +4480(Panel.)S +4774(This)S +4999(allows)S +5306(you)S +5502(to)S +4656 V +1260(browse)S +1578(images)S +1891(and)S +2065(perform)S +2416(the)S +2568(same)S +2803(manipulations)S +3400(as)S +3513(if)S +3604(they)S +3806(had)S +3980(been)S +4198(displayed)S +4611(by)S +4741(a)S +4815(client.)S +4944 V +9 B +1080(MOUSE)S +1437(OPERATIONS)S +5064 V +10 R +1260(Clicking)S +1648(and)S +1835(dragging)S +2233(MB1)S +2482(\(mouse)S +2819(button)S +3118(1\))S +3244(in)S +3365(the)S +3530(main)S +3773(image)S +4060(window)S +4425(creates)S +4745(a)S +4833(rectangular)S +5325(region)S +5184 V +1260(marker,)S +1604(used)S +1824(to)S +1939(select)S +2203(a)S +2284(region)S +2576(of)S +2696(the)S +2855(image.)S +3161(If)S +3264(you)S +3451(do)S +3588(this)S +3770(accidentally)S +4289(and)S +4470(don't)S +4718(want)S +4949(the)S +5108(marker,)S +5452(put)S +5304 V +1260(the)S +1419(pointer)S +1739(in)S +1854(the)S +2013(marker)S +2332(and)S +2513(type)S +2722(DELETE)S +3137(or)S +3258(BACKSPACE)S +3886(to)S +4002(delete)S +4278(the)S +4438(marker.)S +4783(With)S +5021(the)S +5181(pointer)S +5502(in)S +5424 V +1260(the)S +1417(marker,)S +1759(MB3)S +2000(will)S +2191(call)S +2370(up)S +2505(a)S +2584(marker)S +2901(menu)S +3158(listing)S +3444(some)S +3690(things)S +3970(you)S +4155(can)S +4328(do)S +4463(with)S +4676(the)S +4833(marker,)S +5174(like)S +5358(zoom)S +5544 V +1260(the)S +1420(outlined)S +1786(region.)S +2104(MB1)S +2348(can)S +2524(be)S +2656(used)S +2877(to)S +2993(drag)S +3208(or)S +3329(resize)S +3599(the)S +3759(marker.)S +4104(See)S +4287(below)S +4570(for)S +4725(more)S +4969(information)S +5480(on)S +5664 V +1260(markers.)S +5904 V +1260(Clicking)S +1642(on)S +1779(MB2)S +2022(in)S +2137(the)S +2296(main)S +2533(image)S +2814(window)S +3173(pans)S +3394(\(one)S +3609(click\))S +3874(or)S +3995(zooms)S +4294(\(two)S +4515(clicks\))S +4819(the)S +4979(image.)S +5286(Further)S +6024 V +1260(clicks)S +1529(cycle)S +1775(through)S +2122(the)S +2280(builtin)S +2578(zoom)S +2836(factors.)S +3198(Moving)S +3551(the)S +3709(pointer)S +4028(to)S +4142(a)S +4222(new)S +4424(location)S +4782(and)S +4962(clicking)S +5319(moves)S +6144 V +1260(the)S +1425(feature)S +1744(under)S +2014(the)S +2179(pointer)S +2505(to)S +2627(the)S +2793(center)S +3080(of)S +3207(the)S +3373(display)S +3706(window.)S +4127(Holding)S +4499(down)S +4765(the)S +4931(Shift)S +5170(key)S +5358(while)S +6264 V +1260(clicking)S +1620(MB2)S +1864(will)S +2058(cause)S +2317(a)S +2399(full-screen)S +2863(crosshair)S +3261(cursor)S +3547(to)S +3662(appear)S +3964(until)S +4185(the)S +4344(button)S +4637(is)S +4741(released,)S +5129(this)S +5311(can)S +5486(be)S +6384 V +1260(useful)S +1534(for)S +1680(\256ne)S +1860(positioning)S +2341(of)S +2454(the)S +2606(cursor.)S +6624 V +1260(MB3)S +1507(is)S +1615(used)S +1839(to)S +1958(adjust)S +2238(the)S +2401(contrast)S +2758(and)S +2943(brightness)S +3395(of)S +3519(the)S +3682(displayed)S +4106(image.)S +4446(The)S +4643(position)S +5008(of)S +5133(the)S +5297(pointer)S +6744 V +1260(within)S +1560(the)S +1726(display)S +2059(window)S +2425(determines)S +2906(the)S +3071(contrast)S +3430(and)S +3617(brightness)S +4071(values.)S +4394(Click)S +4654(once)S +4885(to)S +5006(set)S +5160(the)S +5325(values)S +6864 V +1260(corresponding)S +1861(to)S +1969(the)S +2121(pointer)S +2434(location,)S +2811(or)S +2924(click)S +3148(and)S +3322(drag)S +3529(to)S +3637(continuously)S +4184(adjust)S +4453(the)S +4605(display.)S +7680 V +900(X11IRAF Project)S +2709(Last change: 10 Dec 1996)S +5530(6)S +7920 V +EP +%%Page: 7 7 +BP +/slant 0 def +/height 1.000000 def +10 R +10 R +480 V +900(XIMTOOL)S +1376(\()S +1425(1)S +1491(\))S +2787(USER COMMANDS )S +4956(XIMTOOL)S +5432(\()S +5481(1)S +5547(\))S +960 V +9 B +1080(KEYSTROKE)S +1677(ACCELERATORS)S +1080 V +10 R +1260(The)S +1445(following)S +1864(keystrokes)S +2321(are)S +2472(currently)S +2862(de\256ned)S +3186(in)S +3294(the)S +3446(GUI:)S +1368 V +10 B +1260(Ctrl-b)S +10 R +1860(Backward)S +2294(frame)S +1476 V +10 B +1260(Ctrl-c)S +10 R +1860(Center)S +2156(frame?)S +1584 V +10 B +1260(Ctrl-f)S +10 R +1860(Forward)S +2228(frame)S +1692 V +10 B +1260(Ctrl-i)S +10 R +1860(Invert?)S +1800 V +10 B +1260(Ctrl-m)S +10 R +1860(Match)S +2145(LUTs)S +1908 V +10 B +1260(Ctrl-n)S +10 R +1860(Normalize)S +2016 V +10 B +1260(Ctrl-r)S +10 R +1860(Register)S +2124 V +10 B +1260(Ctrl-t)S +10 R +1860(Tile)S +2051(frames)S +2352(toggle)S +2232 V +10 B +1260(Ctrl-u)S +10 R +1860(Unzoom)S +2234(\(zoom=1\))S +2340 V +10 B +1260(Ctrl-x)S +10 R +1860(Flip)S +2052(X)S +2448 V +10 B +1260(Ctrl-y)S +10 R +1860(Flip)S +2052(Y)S +2736 V +10 B +1260(Alt-b)S +10 R +1860(Blink)S +2113(frames)S +2414(\(toggle\))S +2844 V +10 B +1260(Alt-c)S +10 R +1860(Control)S +2196(panel)S +2442(\(toggle\))S +2952 V +10 B +1260(Alt-h)S +10 R +1860(Help)S +2084(popup)S +2364(\(toggle\))S +3060 V +10 B +1260(Alt-i)S +10 R +1860(Info)S +2056(box)S +2236(popup)S +2516(\(toggle\))S +3168 V +10 B +1260(Alt-l)S +10 R +1860(Load)S +2095(\256le)S +2253(popup)S +2533(\(toggle\))S +3276 V +10 B +1260(Alt-p)S +10 R +1860(Print)S +2085(popup)S +2365(\(toggle\))S +3384 V +10 B +1260(Alt-s)S +10 R +1860(Save)S +2084(popup)S +2364(\(toggle\))S +3492 V +10 B +1260(Alt-t)S +10 R +1860(TclShell)S +2229(popup)S +2509(\(toggle\))S +3780 V +10 B +1260(Ctrl-Alt-q)S +10 R +1860(Quit)S +3888 V +10 B +1260(Ctrl-Alt-f)S +10 R +1860(Fitframe)S +4176 V +10 B +1260(Ctrl-=)S +10 R +1860(Print)S +2085(using)S +2332(current)S +2644(setup)S +4284 V +10 B +1260(Ctrl-<)S +10 R +1860(Decrease)S +2254(blink)S +2490(rate)S +2669(\(blink)S +2938(faster\))S +4392 V +10 B +1260(Ctrl->)S +10 R +1860(Increase)S +2221(blink)S +2457(rate)S +2636(\(blink)S +2905(slower\))S +4500 V +10 B +1260(Ctrl-+)S +10 R +1860(Zoom)S +2129(in)S +4608 V +10 B +1260(Ctrl--)S +10 R +1860(Zoom)S +2129(out)S +4896 V +10 B +1260(Ctrl-[hjkl])S +1769(or)S +1923(Ctrl-[arrow_key])S +5016 V +10 R +1860(Move)S +2123(cursor)S +2402(one)S +2576(pixel)S +2806(in)S +2914(each)S +3126(direction)S +5124 V +10 B +1260(Ctrl-Shift-[hjkl])S +2008(or)S +2162(Ctrl-Shift-[arrow_key])S +5244 V +10 R +1860(Move)S +2123(cursor)S +2402(ten)S +2554(pixels)S +2823(in)S +2931(each)S +3143(direction)S +5352 V +10 B +1260(Alt-1)S +1506(thru)S +1725(Alt-4)S +5472 V +10 R +1860(Set)S +2018(frame)S +2280(displayed)S +5580 V +10 B +1260(Ctrl-1)S +1550(thru)S +1769(Ctrl-9)S +5700 V +10 R +1860(Set)S +2018(integer)S +2325(zoom)S +2577(factor)S +5988 V +10 B +1260(NOTE:)S +10 R +1612(These)S +1885(keystrokes)S +2347(only)S +2560(work)S +2800(with)S +3013(the)S +3170(cursor)S +3454(in)S +3567(the)S +3724(main)S +3959(image)S +4239(window,)S +4622(not)S +4786(on)S +4922(the)S +5080(subwindows)S +6108 V +1260(or)S +1378(in)S +1491(markers)S +1847(since)S +2087(they)S +2294(are)S +2450(implemented)S +3007(as)S +10 I +3125(imagewin)S +10 R +3549(translations.)S +4099(If)S +4199(a)S +4277(command)S +4705(does)S +4922(not)S +5084(work,)S +5348(check)S +6228 V +1260(the)S +1412(cursor)S +1691(location.)S +6516 V +9 B +900(CLIENT)S +1272(CONNECTIONS)S +6636 V +10 R +1260(XImtool)S +1629(allows)S +1920(clients)S +2211(to)S +2319(connect)S +2659(in)S +2767(any)S +2941(of)S +3054(the)S +3206(following)S +3625(ways:)S +6804 V +10 B +1260(\256fo)S +1429(pipes)S +6924 V +10 R +1510(The)S +1706(traditional)S +2158(approach.)S +2589(The)S +2785(default)S +3103(global)S +3394(/dev/imt1[io])S +3963(pipes)S +4215(may)S +4428(be)S +4564(used,)S +4814(or)S +4939(a)S +5025(private)S +5344(set)S +5497(of)S +7044 V +1510(\256fos)S +1728(can)S +1906(be)S +2040(speci\256ed)S +2435(using)S +2692(the)S +10 I +2854(-\256fo)S +10 R +3055(command)S +3489(line)S +3678(argument)S +4094(or)S +10 Y +4216(*)S +10 I +4266(\256fo)S +10 R +4433(resource.)S +4864(Values)S +5180(should)S +5486(be)S +7164 V +1510(speci\256ed)S +1895(as)S +2008(the)S +2160(root)S +2351(pathname)S +2769(to)S +2877(a)S +2951(pair)S +3136(of)S +3250(\256fo)S +3420(pipes)S +3662(whose)S +3948(last)S +4118(character)S +4513(is)S +4611('i')S +4736(or)S +4850('o',)S +5052(these)S +5288(charac-)S +7284 V +1510(ters)S +1687(will)S +1876(be)S +2003(added)S +2274(automatically)S +2851(when)S +3100(opening)S +3455(the)S +3610(pipes.)S +3909(For)S +4081(example,)S +4477(to)S +4587(use)S +4752(the)S +4906(default)S +5215(pipes)S +5458(the)S +7764 V +900(X11IRAF Project)S +2709(Last change: 10 Dec 1996)S +5530(7)S +7920 V +EP +%%Page: 8 8 +BP +/slant 0 def +/height 1.000000 def +10 R +10 R +480 V +900(XIMTOOL)S +1376(\()S +1425(1)S +1491(\))S +2787(USER COMMANDS )S +4956(XIMTOOL)S +5432(\()S +5481(1)S +5547(\))S +960 V +1510(path)S +1712(would)S +1992(be)S +2116(speci\256ed)S +2501(as)S +2614(simply)S +2917("/dev/imt1".)S +3438(A)S +3540(value)S +3786(of)S +3899("none")S +4205(disables)S +4557(this)S +4732(connection.)S +1128 V +10 B +1260(tcp/ip)S +1535(sockets)S +1248 V +10 R +1510(Clients)S +1836(connect)S +2188(via)S +2352(a)S +2438(tcp/ip)S +2708(socket.)S +3030(The)S +3227(default)S +3546(port)S +3749(is)S +10 I +3858(5137)S +10 R +4058(,)S +4125(or)S +4250(a)S +4337(custom)S +4669(port)S +4873(may)S +5088(be)S +5225(speci\256ed)S +1368 V +1510(using)S +1758(the)S +10 I +1911(-port)S +10 R +2142(command)S +2567(line)S +2747(switch)S +3038(or)S +3151(a)S +10 Y +3225(*)S +10 I +3275(port)S +10 R +3472(resource.)S +3864(This)S +4072(permits)S +4402(connecting)S +4870(to)S +4978(the)S +5130(server)S +5403(over)S +1488 V +1510(a)S +1584(remote)S +1891(network)S +2248(connection)S +2716(anywhere)S +3133(on)S +3263(the)S +3415(Internet.)S +3780(A)S +3883(port)S +4075(number)S +4411(of)S +4525(0)S +4606(\(zero\))S +4874(disables)S +5227(this)S +5403(con-)S +1608 V +1510(nection.)S +1776 V +10 B +1260(unix)S +1480(domain)S +1833(sockets)S +1896 V +10 R +1510(Like)S +1733(a)S +1817(tcp/ip)S +2085(socket,)S +2405(but)S +2573(limited)S +2898(to)S +3017(a)S +3102(single)S +3382(host)S +3590(system.)S +3934(Usually)S +4286(faster)S +4548(than)S +4761(a)S +4846(tcp/ip)S +5115(socket,)S +5436(and)S +2016 V +1510(comparable)S +2008(to)S +2119(a)S +2196(\256fo.)S +2393(By)S +2543(default)S +2853(each)S +3068(user)S +3267(gets)S +3460(their)S +3675(own)S +3879(unix)S +4089(domain)S +4421(socket,)S +4733(so)S +4854(this)S +5031(option)S +5319(allows)S +2136 V +1510(multiple)S +1882(users)S +2125(to)S +2241(run)S +2413(ximtools)S +2803(on)S +2942(the)S +3103(same)S +3347(host)S +3553(without)S +3898(having)S +4209(to)S +4326(customize)S +4770(things.)S +5109(The)S +5303(default)S +2256 V +1510(value)S +1761(is)S +1863("/tmp/.IMT%d",)S +2558(other)S +2798(sockets)S +3126(may)S +3332(be)S +3460(de\256ned)S +3788(using)S +4039(the)S +10 I +4195(-unix)S +10 R +4434(command)S +4862(line)S +5046(switch)S +5341(or)S +5458(the)S +2376 V +10 Y +1510(*)S +10 I +1560(unixaddr)S +10 R +1953(resource.)S +2377(Legal)S +2636(values)S +2923(should)S +3222(be)S +3348(speci\256ed)S +3735(as)S +3850(a)S +3926(\256lename)S +4302(to)S +4412(be)S +4538(used)S +4753(for)S +4901(the)S +5056(socket,)S +5369(up)S +5502(to)S +2496 V +1510(two)S +1693("%d")S +1941(\256elds)S +2190(are)S +2343(allowed)S +2691(and)S +2867(will)S +3055(be)S +3181(replaced)S +3550(by)S +3682(the)S +3836(userid.)S +4137(An)S +4291(empty)S +4573(string)S +4833(value)S +5081(disables)S +5435(this)S +2616 V +1510(connection.)S +2784 V +1260(By)S +1410(default)S +1720(ximtool)S +2065(listens)S +2354(simultaneously)S +2993(for)S +3142(client)S +3397(connections)S +3908(on)S +4042(all)S +4176(three)S +4409(types)S +4654(of)S +4771(ports.)S +5090(Clients)S +5408(may)S +2904 V +1260(connect)S +1614(simultaneously)S +2264(by)S +2408(di)S +2486 H + (f)show 10 -.5 mul h (f)show +10 R +2547(erent)S +2790(means)S +3089(allowing)S +3483(up)S +3627(to)S +3748(three)S +3990(di)S +4068 H + (f)show 10 -.5 mul h (f)show +10 R +4129(erent)S +4371(displays)S +4742(to)S +4863(be)S +5000(loading)S +5343(at)S +5458(the)S +3024 V +1260(same)S +1495(time)S +1703(into)S +1889(di)S +1967 H + (f)show 10 -.5 mul h (f)show +10 R +2028(erent)S +2257(frames.)S +3312 V +9 B +1080(COMMUNICATIONS)S +1987(PROTOCOL)S +3432 V +10 R +1260(Clients)S +1583(communicate)S +2160(with)S +2377(XImtool)S +2755(using)S +3011(a)S +3094(protocol)S +3467(developed)S +3917(originally)S +4346(for)S +4502(IIS)S +4664(\(International)S +5247(Imaging)S +3552 V +1260(Systems\))S +1659(Frame)S +1946(Bu)S +2063 H + (f)show 10 -.5 mul h (f)show +10 R +2124(er)S +2232(hardware,)S +2658(the)S +2811(so-called)S +3202("IIS)S +3396(protocol";)S +3829(other)S +4065(more)S +4301(modern)S +4637(protocols)S +5040(will)S +5227(likely)S +5486(be)S +3672 V +1260(supported)S +1687(in)S +1798(the)S +1953(future.)S +2279(The)S +2467(IIS)S +2622(protocol)S +2988(is)S +3088(basically)S +3476(a)S +3553(command)S +3981(packet)S +4275(stream)S +4575(with)S +4787(a)S +4865(header)S +5164(describing)S +3792 V +1260(the)S +1421(operation)S +1837(to)S +1954(be)S +2087(performed)S +2541(\(select)S +2840(frame,)S +3136(load)S +3347(display,)S +3700(read)S +3910(cursor,)S +4223(etc\),)S +4436(and)S +4618(an)S +4750(optional)S +5116(data)S +5320(packet)S +3912 V +1260(containing)S +1712(e.g.)S +1886(pixels.)S +2180(It)S +2271(is)S +2368(beyond)S +2692(the)S +2844(scope)S +3101(of)S +3214(this)S +3390(document)S +3815(to)S +3924(describe)S +4287(fully)S +4507(the)S +4660(details)S +4952(of)S +5066(the)S +5219(protocol;)S +4032 V +1260(interested)S +1678(users)S +1913(should)S +2210(contact)S +10 I +2528(iraf@noao.edu)S +10 R +3164(for)S +3310(further)S +3611(information.)S +4320 V +9 B +900(FRAME)S +1257(BUFFERS)S +4440 V +10 R +1260(XImtool)S +1630(starts)S +1872(up)S +2003(using)S +2251(default)S +2560(frame)S +2824(bu)S +2924 H + (f)show 10 -.5 mul h (f)show +10 R +2985(er)S +3094(size)S +3281(of)S +3396(512x512)S +3778(pixels,)S +4074(two)S +4256(\(of)S +4404(four)S +4602(possible\))S +4995(frames)S +5298(will)S +5486(be)S +4560 V +1260(created.)S +1610(When)S +1886(loading)S +2224(disk)S +2429(images)S +2750(\(i.e.)S +2943(run)S +3114(in)S +3230(standalone)S +3694(mode\))S +3986(the)S +4145(frame)S +4414(bu)S +4514 H + (f)show 10 -.5 mul h (f)show +10 R +4575(er)S +4689(con\256guration)S +5259(\256le)S +5424(will)S +4680 V +1260(be)S +1385(searched)S +1764(for)S +1911(a)S +1986(de\256ned)S +2311(frame)S +2574(bu)S +2674 H + (f)show 10 -.5 mul h (f)show +10 R +2735(er)S +2843(that)S +3024(is)S +3122(the)S +3275(same)S +3511(size)S +3697(or)S +3811(larger)S +4074(than)S +4277(the)S +4430(current)S +4743(image,)S +5044(if)S +5137(no)S +5269(suitable)S +4800 V +1260(bu)S +1360 H + (f)show 10 -.5 mul h (f)show +10 R +1421(er)S +1529(can)S +1698(be)S +1822(found)S +2085(a)S +2159(custom)S +2478(frame)S +2740(bu)S +2840 H + (f)show 10 -.5 mul h (f)show +10 R +2901(er)S +3008(the)S +3160(same)S +3395(size)S +3580(as)S +3693(the)S +3845(image)S +4119(will)S +4305(be)S +4429(created)S +4746(in)S +4854(an)S +4978(unused)S +5291(portion)S +4920 V +1260(of)S +1373(the)S +1525(con\256guration)S +2088(table.)S +2367(When)S +2635(used)S +2848(as)S +2962(a)S +3037(display)S +3357(server)S +3631(the)S +3784(frame)S +4047(bu)S +4147 H + (f)show 10 -.5 mul h (f)show +10 R +4208(er)S +4316(con\256guration)S +4880(number)S +5216(is)S +5314(passed)S +5040 V +1260(in)S +1381(by)S +1524(the)S +1689(client)S +1954(and)S +2140(loaded)S +2448(explicitly)S +2868(even)S +3098(if)S +3201(it)S +3299(means)S +3596(clipping)S +3966(the)S +4130(image.)S +4471(If)S +4579(a)S +4665(new)S +4873(frame)S +5147(bu)S +5247 H + (f)show 10 -.5 mul h (f)show +10 R +5308(er)S +5427(is)S +5536(a)S +5160 V +1260(di)S +1338 H + (f)show 10 -.5 mul h (f)show +10 R +1399(erent)S +1635(size)S +1827(than)S +2036(previously)S +2495(de\256ned)S +2826(frames,)S +3159(all)S +3296(available)S +3693(frames)S +4001(will)S +4194(be)S +4325(initialized)S +4763(and)S +4945(cleared)S +5270(prior)S +5502(to)S +5280 V +1260(the)S +1422(display.)S +1806(The)S +2001(default)S +2318(frame)S +2590(bu)S +2690 H + (f)show 10 -.5 mul h (f)show +10 R +2751(er)S +2868(con\256guration)S +3441(\256le)S +3609(is)S +3716(/usr/local/lib/imtoolrc,)S +4654(this)S +4838(can)S +5015(be)S +5148(overridden)S +5400 V +1260(by)S +1391(de\256ning)S +1750(a)S +1825(IMTOOLRC)S +2378(environment)S +2914(variable)S +3266(naming)S +3597(the)S +3750(\256le)S +3909(to)S +4019(be)S +4145(used,)S +4385(by)S +4517(creating)S +4870(a)S +4946(.imtoolrc)S +5342(\256le)S +5502(in)S +5520 V +1260(your)S +1482(home)S +1743(directory,)S +2167(or)S +2289(a)S +2372(new)S +2577(\256le)S +2744(may)S +2955(be)S +3088(speci\256ed)S +3482(using)S +3738(the)S +10 I +3899(-imtoolrc)S +10 R +4310(command)S +4743(line)S +4932(\257ag)S +5120(or)S +10 I +5241(imtoolrc)S +5640 V +10 R +1260(application)S +1734(resource.)S +5880 V +1260(The)S +1445(format)S +1741(of)S +1854(the)S +2006(frame)S +2268(bu)S +2368 H + (f)show 10 -.5 mul h (f)show +10 R +2429(er)S +2536(con\256guration)S +3099(\256le)S +3257(is)S +6120 V +10 I +1410(con\256gno)S +1784(nframes)S +2136(width)S +2389(height)S +2669([extra)S +2943(\256elds])S +6240 V +10 R +1290(e.g.)S +6360 V +1560(1)S +1670(2)S +1780(512)S +1990(512)S +6480 V +1560(2)S +1670(2)S +1780(800)S +1990(800)S +6600 V +1560(3)S +1670(1)S +1750(1024)S +1980(1024)S +2480(#)S +2560(comment)S +6720 V +1560(:)S +1648(:)S +1766(:)S +1914(:)S +6960 V +1260(At)S +1420(most)S +1675(128)S +1885(frame)S +2177(bu)S +2277 H + (f)show 10 -.5 mul h (f)show +10 R +2338(er)S +2475(sizes)S +2730(may)S +2963(be)S +3118(de\256ned,)S +3498(each)S +3741(con\256guration)S +4335(may)S +4568(de\256ne)S +4873(up)S +5034(to)S +5173(4)S +5284(frames,)S +7080 V +1260(con\256guration)S +1823(numbers)S +2197(need)S +2415(not)S +2573(be)S +2697(sequential.)S +7680 V +900(X11IRAF Project)S +2709(Last change: 10 Dec 1996)S +5530(8)S +7920 V +EP +%%Page: 9 9 +BP +/slant 0 def +/height 1.000000 def +10 R +10 R +480 V +900(XIMTOOL)S +1376(\()S +1425(1)S +1491(\))S +2787(USER COMMANDS )S +4956(XIMTOOL)S +5432(\()S +5481(1)S +5547(\))S +960 V +10 B +1260(NOTE:)S +10 R +1640(When)S +1911(de\256ning)S +2272(a)S +2349(new)S +2548(frame)S +2813(bu)S +2913 H + (f)show 10 -.5 mul h (f)show +10 R +2974(er)S +3084(for)S +3233(use)S +3399(with)S +3610(client)S +3865(software)S +4241(such)S +4457(as)S +4573(IRAF)S +4834(the)S +4990(user)S +5190(must)S +5419(also)S +1080 V +1260(remember)S +1694(to)S +1802(de\256ne)S +2076(those)S +2317(frame)S +2579(bu)S +2679 H + (f)show 10 -.5 mul h (f)show +10 R +2740(ers)S +2886(in)S +2994(the)S +3146(IRAF)S +10 I +3404(dev$graphcap)S +10 R +4005(\256le.)S +1368 V +9 B +900(MARKERS)S +1488 V +10 R +1260(Although)S +1668(ximtool)S +2010(doesn't)S +2334(do)S +2464(much)S +2717(with)S +2926(markers)S +3278(currently,)S +3694(they)S +3897(are)S +4049(a)S +4124(general)S +4448(feature)S +4755(of)S +4869(the)S +10 I +5022(Gterm)S +10 R +5308(widget)S +1608 V +1260(and)S +1450(are)S +1616(used)S +1844(more)S +2094(extensively)S +2594(in)S +2717(other)S +2967(programs)S +3389(\(e.g.)S +3611(the)S +3778(prototype)S +4206(IRAF)S +4479(science)S +4817(GUI)S +5039(applications\).)S +1728 V +1260(XImtool)S +1639(uses)S +1851(markers)S +2212(for)S +2368(the)S +2530(marker)S +2852(zoom)S +3114(feature)S +3430(discussed)S +3853(above,)S +4156(and)S +4340(also)S +4541(for)S +4697(the)S +4860(panner,)S +5197(magni\256er)S +1848 V +1260(and)S +1439(the)S +1596(coordinates)S +2091(box.)S +2301(All)S +2464(markers)S +2820(share)S +3064(some)S +3309(of)S +3426(the)S +3582(same)S +3821(characteristics,)S +4450(so)S +4573(it)S +4663(is)S +4764(worthwhile)S +5253(learning)S +1968 V +1260(basic)S +1495(marker)S +1807(manipulation)S +2365(keystrokes.)S +2136 V +10 B +1260(o)S +10 R +1410(MB1)S +1646(anywhere)S +2063(inside)S +2332(a)S +2406(marker)S +2718(may)S +2920(be)S +3044(used)S +3257(to)S +3365(drag)S +3572(the)S +3724(marker.)S +2304 V +10 B +1260(o)S +10 R +1410(MB1)S +1646(near)S +1847(a)S +1921(marker)S +2233(corner)S +2517(or)S +2630(edge,)S +2873(depending)S +3319(on)S +3449(the)S +3601(type)S +3803(of)S +3916(marker,)S +4253(resizes)S +4554(the)S +4706(marker.)S +2472 V +10 B +1260(o)S +10 R +1410(Shift-MB1)S +1874(on)S +2004(the)S +2156(corner)S +2440(of)S +2553(most)S +2778(markers)S +3129(will)S +3315(rotate)S +3572(the)S +3724(marker.)S +2640 V +10 B +1260(o)S +10 R +1410(Markers)S +1775(stack,)S +2038(if)S +2132(you)S +2315(have)S +2536(several)S +2851(markers)S +3205(and)S +3382(you)S +3565(put)S +3726(one)S +3903(on)S +4037(top)S +4199(of)S +4316(the)S +4472(other.)S +4736(The)S +4925(active)S +5197(marker)S +5513(is)S +2760 V +1410(highlighted)S +1909(to)S +2030(tell)S +2201(you)S +2394(which)S +2681(of)S +2807(the)S +2972(stacked)S +3314(markers)S +3678(is)S +3788(active.)S +4094(If)S +4203(the)S +4368(markers)S +4732(overlap,)S +5099(this)S +5287(will)S +5486(be)S +2880 V +1410(marker)S +1722("on)S +1893(top")S +2092(in)S +2200(the)S +2352(stacking)S +2715(order.)S +3048 V +10 B +1260(o)S +10 R +1410(MB2)S +1646(in)S +1754(the)S +1906(body)S +2136(of)S +2249(a)S +2323(marker)S +2635("lowers")S +3013(the)S +3165(marker,)S +3502(i.e.)S +3654(moves)S +3945(it)S +4031(to)S +4139(the)S +4291(bottom)S +4605(of)S +4718(the)S +4870(stacking)S +5233(order.)S +3216 V +10 B +1260(o)S +10 R +1410(Delete)S +1700(or)S +1813(backspace)S +2252(in)S +2360(a)S +2434(marker)S +2746(deletes)S +3053(it.)S +3384 V +10 B +1260(o)S +10 R +1410(Markers)S +1789(have)S +2024(their)S +2254(own)S +2473(translation)S +2942(resources)S +3365(and)S +3557(so)S +3694(the)S +3864(default)S +4189(keystroke)S +4625(commands)S +5106(will)S +5310(not)S +5486(be)S +3504 V +1410(recognized)S +1877(when)S +2123(the)S +2275(cursor)S +2554(is)S +2651(in)S +2759(a)S +2833(marker.)S +3672 V +1260(For)S +1433(example,)S +1830(try)S +1976(placing)S +2305(the)S +2462(pointer)S +2780(anywhere)S +3202(in)S +3315(the)S +3472(coords)S +3773(box,)S +3983(then)S +4190(press)S +4430(MB1)S +4671(and)S +4850(hold)S +5063(it)S +5154(down,)S +5436(and)S +3792 V +1260(drag)S +1474(the)S +1633(coords)S +1936(box)S +2123(marker)S +2442(somewhere)S +2933(else)S +3125(on)S +3262(the)S +3421(screen.)S +3737(You)S +3946(can)S +4121(also)S +4319(resize)S +4588(the)S +4746(coords)S +5048(box)S +5234(by)S +5370(drag-)S +3912 V +1260(ging)S +1478(a)S +1562(corner,)S +1881(or)S +2004(delete)S +2282(it)S +2379(with)S +2598(the)S +2761(delete)S +3040(or)S +3164(backspace)S +3614(key.)S +3824(\(The)S +4053(Initialize)S +4449(button)S +4746(will)S +4943(get)S +5106(the)S +5269(original)S +4032 V +1260(coords)S +1556(box)S +1736(back)S +1954(if)S +2045(you)S +2225(delete)S +2493(it,)S +2604(or)S +2717(you)S +2897(can)S +3065(reset)S +3283(the)S +3435(toggle)S +3715(in)S +3823(the)S +3975(control)S +4288(panel\).)S +4320 V +9 B +1080(PANNER)S +1482(MARKER)S +4440 V +10 R +1260(The)S +1449(panner)S +1754(window)S +2110(always)S +2421(displays)S +2783(the)S +2939(full)S +3112(frame)S +3379(bu)S +3479 H + (f)show 10 -.5 mul h (f)show +10 R +3540(er.)S +3677(Try)S +3856(setting)S +4158(the)S +4315(frame)S +4582(bu)S +4682 H + (f)show 10 -.5 mul h (f)show +10 R +4743(er)S +4855(con\256guration)S +5423(to)S +5536(a)S +4560 V +1260(nonsquare)S +1708(frame)S +1978(bu)S +2078 H + (f)show 10 -.5 mul h (f)show +10 R +2139(er)S +2254(\(e.g.)S +2469(imtcryo\))S +2851(and)S +3033(then)S +3243(displaying)S +3698(a)S +3780(square)S +4078(image)S +4360(\(e.g.)S +4575(dev$pix\))S +4968(and)S +5150(the)S +5309(panner)S +4680 V +1260(will)S +1446(show)S +1687(you)S +1867(exactly)S +2185(where)S +2458(the)S +2610(image)S +2884(has)S +3047(been)S +3265(loaded)S +3561(into)S +3747(the)S +3899(frame.)S +4920 V +1260(The)S +1450(panner)S +1756(window)S +2113(uses)S +2321(two)S +2507(markers,)S +2889(one)S +3069(for)S +3221(the)S +3379(window)S +3737(border)S +4033(and)S +4213(one)S +4393(to)S +4507(mark)S +4748(the)S +4906(displayed)S +5325(region)S +5040 V +1260(of)S +1379(the)S +1537(frame.)S +1830(Most)S +2072(of)S +2191(the)S +2349(usual)S +2596(marker)S +2914(keystrokes)S +3377(mentioned)S +3835(below)S +4115(apply)S +4373(to)S +4487(these)S +4728(markers)S +5085(as)S +5204(well,)S +5436(e.g.)S +5160 V +1260(you)S +1443(can)S +1614(use)S +1780(MB1)S +2019(to)S +2130(reposition)S +2563(on)S +2696(the)S +2851(panner)S +3156(window)S +3512(within)S +3802(the)S +3958(main)S +4192(image)S +4470(display)S +4793(window,)S +5174(or)S +5291(to)S +5403(drag)S +5280 V +1260(the)S +1414(region)S +1701(marker)S +2015(within)S +2303(the)S +2457(panner)S +2760(\(pan)S +2969(the)S +3123(image\).)S +3456(Resizing)S +3837(the)S +3990(region)S +4276(marker)S +4589(zooms)S +4881(the)S +5034(image;)S +5337(this)S +5513(is)S +5400 V +1260(a)S +1336(non-aspect)S +1800(constrained)S +2292(zoom.)S +2571(The)S +2758(panner)S +3061(window)S +3415(itself)S +3647(can)S +3817(be)S +3943(resized)S +4257(by)S +4389(dragging)S +4776(a)S +4852(corner)S +5138(with)S +5349(MB1.)S +5520 V +1260(Typing)S +1579(delete)S +1847(or)S +1960(backspace)S +2399(anywhere)S +2816(in)S +2924(the)S +3076(panner)S +3377(window)S +3729(deletes)S +4036(the)S +4188(panner.)S +5760 V +1260(A)S +1362(special)S +1669(case)S +1870(is)S +1967(MB2.)S +2228(Hitting)S +2542(MB2)S +2778(anywhere)S +3195(in)S +3303(the)S +3455(panner)S +3757(window)S +4110(pans)S +4324(the)S +4477(image)S +4752(to)S +4861(that)S +5042(point.)S +5304(This)S +5513(is)S +5880 V +1260(analogous)S +1695(to)S +1803(hitting)S +2095(MB2)S +2331(in)S +2439(the)S +2591(main)S +2821(display)S +3140(window)S +3492(to)S +3600(pan)S +3774(the)S +3926(image.)S +6120 V +1260(The)S +1447(panner)S +1750(marker)S +2064(can)S +2234(be)S +2360(disabled)S +2725(by)S +2857(de\256ning)S +3218(the)S +10 I +3373(displayPanner)S +10 R +3989(GUI)S +4199(resource,)S +4594(its)S +4722(size)S +4910(and)S +5087(location)S +5442(can)S +6240 V +1260(be)S +1384(controlled)S +1819(using)S +2066(the)S +10 I +2218(pannerArea)S +10 R +2725(and)S +10 I +2899(pannerGeom)S +10 R +3450(GUI)S +3657(resources)S +4063(respectively.)S +6528 V +9 B +1080(MAGNIFIER)S +1642(MARKER)S +6648 V +10 R +1260(The)S +1445(magni\256er)S +1858(marker)S +2170(can)S +2338(be)S +2462(used)S +2676(to)S +2785(zoom)S +3038(in)S +3147(on)S +3278(a)S +3353(small)S +3601(area)S +3797(around)S +4105(the)S +4258(cursor.)S +4593(It)S +4685(will)S +4872(be)S +4997(updated)S +5344(as)S +5458(the)S +6768 V +1260(cursor)S +1552(moves)S +1856(but)S +2027(only)S +2248(for)S +2407(small)S +2666(motions)S +3031(\(either)S +3333(mouse)S +3636(movement)S +4100(or)S +4225(with)S +4445(the)S +4609(cursor)S +4900(movement)S +5364(keys-)S +6888 V +1260(trokes\))S +1570(to)S +1681(minimize)S +2092(the)S +2247(impact)S +2552(on)S +2685(the)S +2840(system.)S +3207(The)S +3396(zoom)S +3652(factor)S +3918(is)S +4019(expressed)S +4446(as)S +4563(some)S +4808(fraction)S +5152(of)S +5269(the)S +5425(size)S +7008 V +1260(of)S +1381(the)S +1541(magni\256er)S +1962(marker)S +2282(itself.)S +2575(The)S +2768(default)S +3083(zoom)S +3343(is)S +3448(4,)S +3561(i.e.)S +3721(the)S +3881(area)S +4084(in)S +4200(the)S +4359(marker)S +4678(represents)S +5119(and)S +5300(area)S +5502(in)S +7128 V +1260(the)S +1417(image)S +1696(that's)S +1953(one-fourth)S +2409(the)S +2566(size)S +2756(of)S +2874(the)S +3031(marker.)S +3403(Other)S +3665(zoom)S +3922(factors)S +4228(may)S +4435(be)S +4564(selected)S +4920(using)S +5172(the)S +5330(popup)S +7248 V +1260(menu)S +1512(created)S +1829(by)S +1959(hitting)S +2251(MB1)S +2487(in)S +2595(the)S +2747(marker.)S +7728 V +900(X11IRAF Project)S +2709(Last change: 10 Dec 1996)S +5530(9)S +7920 V +EP +%%Page: 10 10 +BP +/slant 0 def +/height 1.000000 def +10 R +10 R +480 V +900(XIMTOOL)S +1376(\()S +1425(1)S +1491(\))S +2787(USER COMMANDS )S +4956(XIMTOOL)S +5432(\()S +5481(1)S +5547(\))S +960 V +1260(By)S +1414(default)S +1728(the)S +1887(magni\256er)S +2307(marker)S +2626(is)S +2730(not)S +2895(visible,)S +3224(to)S +3339(toggle)S +3626(it)S +3720(select)S +3985(the)S +10 I +4145(Magni\256er)S +10 R +4577(option)S +4871(from)S +5103(the)S +10 I +5263(Options)S +1080 V +10 R +1260(menubar)S +1660(button.)S +2022(Alternatively,)S +2625(for)S +2792(just)S +2988(a)S +3083(quick)S +3356(look)S +3584(holding)S +3940(down)S +4212(the)S +4384(Shift)S +4629(and)S +4823(MB1)S +5079(buttons)S +5424(will)S +1200 V +1260(display)S +1579(the)S +1731(marker)S +2043(until)S +2257(the)S +2409(button)S +2695(is)S +2792(released.)S +1440 V +1260(The)S +1453(magni\256er)S +1874(marker)S +2194(can)S +2370(be)S +2502(disabled)S +2873(by)S +3011(de\256ning)S +3377(the)S +10 I +3537(displayMagni\256er)S +10 R +4258(GUI)S +4473(resource,)S +4873(its)S +5006(size)S +5199(and)S +5381(loca-)S +1560 V +1260(tion)S +1446(can)S +1614(be)S +1738(controlled)S +2173(using)S +2420(the)S +10 I +2572(magni\256erArea)S +10 R +3179(and)S +10 I +3353(magni\256erGeom)S +10 R +4004(GUI)S +4211(resources)S +4617(respectively.)S +1848 V +9 B +1080(COORDS)S +1492(BOX)S +1714(MARKER)S +1968 V +10 R +1260(XImtool)S +1629(provides)S +2003(a)S +2077(limited)S +2391(notion)S +2677(of)S +2790(world)S +3054(coordinates,)S +3570(allowing)S +3951(frame)S +4214(bu)S +4314 H + (f)show 10 -.5 mul h (f)show +10 R +4375(er)S +4483(pixel)S +4714(coordinates)S +5205(and)S +5380(pixel)S +2088 V +1260(values)S +1546(to)S +1655(be)S +1780(converted)S +2204(to)S +2312(some)S +2553(arbitrary)S +2926(linear)S +3183(client-de\256ned)S +3762(coordinate)S +4213(system.)S +4546(The)S +4731(coords)S +5027(box)S +5207(feature)S +5513(is)S +2208 V +1260(used)S +1473(to)S +1581(display)S +1900(these)S +2135(world)S +2398(coordinates)S +2888(as)S +3001(the)S +3153(pointer)S +3466(is)S +3563(moved)S +3865(about)S +4117(in)S +4225(the)S +4377(image)S +4651(window.)S +2448 V +1260(The)S +1445(quantities)S +1865(displayed)S +2279(in)S +2388(the)S +2541(coords)S +2838(box)S +3019(are)S +3171(X,)S +3299(Y,)S +3427(and)S +3602(Z:)S +3722(the)S +3875(X,Y)S +4075(world)S +4339(coordinates)S +4830(of)S +4944(the)S +5097(pointer,)S +5436(and)S +2568 V +1260(Z,)S +1379(the)S +1534(world)S +1800(equivalent)S +2249(of)S +2365(the)S +2520(pixel)S +2753(value)S +3002(under)S +3262(the)S +3417(pointer.)S +3758(All)S +3919(coordinate)S +4373(systems)S +4723(are)S +4877(linear.)S +5161(The)S +5348(preci-)S +2688 V +1260(sion)S +1466(of)S +1588(a)S +1671(displayed)S +2093(quantity)S +2460(is)S +2566(limited)S +2889(by)S +3028(the)S +3189(range)S +3449(of)S +3571(values)S +3865(of)S +3988(the)S +4150(associated)S +4600(raw)S +4789(frame)S +5061(bu)S +5161 H + (f)show 10 -.5 mul h (f)show +10 R +5222(er)S +5339(value.)S +2808 V +1260(For)S +1431(example,)S +1826(if)S +1919(the)S +2073(display)S +2394(window)S +2748(is)S +2846(512x512)S +3227(only)S +3436(512)S +3617(coordinate)S +4069(values)S +4355(are)S +4507(possible)S +4866(in)S +4975(either)S +5233(axis)S +5425(\(the)S +2928 V +1260(positional)S +1687(precision)S +2085(can)S +2256(be)S +2383(increased)S +2792(however)S +3168(by)S +3301(zooming)S +3684(the)S +3839(image\).)S +4174(More)S +4423(seriously,)S +4842(at)S +4947(most)S +5175(about)S +5430(200)S +3048 V +1260(pixel)S +1501(values)S +1797(can)S +1976(be)S +2111(displayed)S +2534(since)S +2779(this)S +2964(is)S +3071(the)S +3233(limit)S +3463(on)S +3603(the)S +3765(range)S +4026(of)S +4149(pixel)S +4389(values)S +4684(loaded)S +4990(into)S +5186(the)S +5348(frame)S +3168 V +1260(bu)S +1360 H + (f)show 10 -.5 mul h (f)show +10 R +1421(er.)S +1553(If)S +1649(a)S +1723(display)S +2042(pixel)S +2272(is)S +2369(saturated)S +2759(a)S +2833("+")S +3001(will)S +3187(be)S +3311(displayed)S +3724(after)S +3936(the)S +4088(intensity)S +4463(value.)S +3408 V +1260(The)S +1446(coords)S +1743(box)S +1924(is)S +2022(a)S +2097(text)S +2278(marker,)S +2616(it)S +2703(can)S +2872(be)S +2997(moved)S +3300(and)S +3475(resized)S +3788(with)S +3997(the)S +4150(pointer)S +4464(like)S +4645(any)S +4820(other)S +5056(marker.)S +5425(The)S +3528 V +1260(coords)S +1561(box)S +1746(marker)S +2063(can)S +2236(be)S +2365(disabled)S +2733(by)S +2868(de\256ning)S +3231(the)S +10 I +3388(displayCoords)S +10 R +4007(GUI)S +4219(resource,)S +4616(its)S +4746(location)S +5103(can)S +5275(be)S +5403(con-)S +3648 V +1260(trolled)S +1551(by)S +1681(the)S +10 I +1833(wcsboxGeom)S +10 R +2395(GUI)S +2602(resource.)S +3936 V +9 B +1080(MARKER)S +1517(MENU)S +1819(OPTIONS)S +4056 V +10 R +1260(Except)S +1575(for)S +1729(the)S +1889(panner)S +2198(and)S +2380(WCS)S +2635(markers,)S +3019(MB3)S +3263(\(mouse)S +3595(button)S +3889(3\))S +4010(calls)S +4231(up)S +4369(the)S +4529(marker)S +4849(menu)S +5109(providing)S +5536(a)S +4176 V +1260(limited)S +1574(set)S +1715(of)S +1828(functions)S +2230(common)S +2610(to)S +2718(all)S +2848(markers:)S +4344 V +10 B +1260(o)S +10 R +1410(Zoom)S +1686(does)S +1906(an)S +2037(equal)S +2291(aspect)S +2578(zoom)S +2838(of)S +2959(the)S +3119(region)S +3412(outlined)S +3778(by)S +3916(the)S +4076(marker.)S +4421(In)S +4542(this)S +4725(way)S +4929(you)S +5117(can)S +5293(mark)S +5536(a)S +4464 V +1410(region)S +1695(of)S +1808(the)S +1960(image)S +2234(and)S +2408(zoom)S +2660(it)S +2746(up.)S +4632 V +10 B +1260(o)S +10 R +1410(Fill)S +1597(exactly)S +1933(zooms)S +2242(the)S +2412(area)S +2625(outlined)S +3001(by)S +3149(the)S +3319(marker,)S +3674(making)S +4022(it)S +4126(\256ll)S +4286(the)S +4456(display)S +4793(window.)S +5188(Since)S +5458(the)S +4752 V +1410(marker)S +1722(is)S +1819(not)S +1977(likely)S +2235(to)S +2343(be)S +2467(exactly)S +2785(square,)S +3100(the)S +3252(aspect)S +3531(ratio)S +3744(of)S +3857(the)S +4009(resultant)S +4383(image)S +4657(will)S +4843(not)S +5001(be)S +5125(unitary.)S +4920 V +10 B +1260(o)S +10 R +1410(Print)S +1643(prints)S +1909(the)S +2069(region)S +2362(outlined)S +2728(by)S +2866(the)S +3027(marker)S +3348(to)S +3465(the)S +3626(printer)S +3931(or)S +4053(\256le)S +4220(currently)S +4619(con\256gured)S +5085(by)S +5224(the)S +5385(Print)S +5040 V +1410(Panel.)S +5208 V +10 B +1260(o)S +10 R +1410(Save)S +1634(saves)S +1880(the)S +2032(region)S +2317(outlined)S +2675(by)S +2805(the)S +2957(marker)S +3269(to)S +3377(the)S +3529(\256le)S +3687(currently)S +4077(con\256gured)S +4534(by)S +4664(the)S +4816(Save)S +5040(Panel.)S +5376 V +10 B +1260(o)S +10 R +1410(Info)S +1606(prints)S +1864(a)S +1938(description)S +2412(of)S +2525(the)S +2677(marked)S +3006(region.)S +3316(The)S +3501(text)S +3681(is)S +3778(printed)S +4091(in)S +4199(the)S +4351(Info)S +4547(Panel.)S +5544 V +10 B +1260(o)S +10 R +1410(Unrotate)S +1789(unrotates)S +2185(a)S +2259(rotated)S +2566(marker.)S +5712 V +10 B +1260(o)S +10 R +1410(Color)S +1668(is)S +1765(a)S +1839(menu)S +2091(of)S +2204(possible)S +2562(marker)S +2874(colors.)S +5880 V +10 B +1260(o)S +10 R +1410(Type)S +1651(is)S +1754(a)S +1834(menu)S +2092(of)S +2211(possible)S +2575(marker)S +2893(types.)S +3165(This)S +3379(is)S +3482(still)S +3669(a)S +3749(little)S +3969(buggy)S +4256(and)S +4437(it)S +4530(isn't)S +4745(very)S +4959(useful,)S +5265(but)S +5430(you)S +6000 V +1410(can)S +1578(use)S +1741(it)S +1827(to)S +1935(play)S +2137(with)S +2345(di)S +2423 H + (f)show 10 -.5 mul h (f)show +10 R +2484(erent)S +2713(types)S +2954(of)S +3067(markers.)S +6168 V +10 B +1260(o)S +10 R +1410(Destroy)S +1760(destroys)S +2127(the)S +2283(marker.)S +2624(You)S +2830(can)S +3002(also)S +3197(hit)S +3337(the)S +3493(delete)S +3766(or)S +3884(backspace)S +4328(key)S +4507(in)S +4620(a)S +4699(marker)S +5016(to)S +5129(destroy)S +5458(the)S +6288 V +1410(marker.)S +6576 V +9 B +900(CONTROL)S +1382(PANEL)S +6696 V +10 R +1260(XImtool)S +1636(has)S +1806(a)S +1887(control)S +2207(panel)S +2460(which)S +2741(can)S +2917(be)S +3049(used)S +3270(to)S +3386(exercise)S +3750(most)S +3983(of)S +4104(the)S +4264(capabilities)S +4757(the)S +4917(program)S +5293(has)S +5464(for)S +6816 V +1260(image)S +1544(display.)S +1928(The)S +2123(control)S +2445(panel)S +2700(can)S +2877(be)S +3010(accessed)S +3397(either)S +3663(via)S +3824(the)S +10 B +3985(Options)S +10 R +4364(menu)S +4625(from)S +4858(the)S +5019(main)S +5258(window)S +6936 V +1260(menubar,)S +1664(or)S +1777(by)S +1907(pressing)S +2270(the)S +2422(leftmost)S +2780(button)S +3066(in)S +3174(the)S +3326(row)S +3511(of)S +3624(buttons)S +3949(at)S +4051(the)S +4203(upper)S +4460(right)S +4679(side)S +4870(of)S +4983(the)S +5135(display.)S +7680 V +900(X11IRAF Project)S +2709(Last change: 10 Dec 1996)S +5480(10)S +7920 V +EP +%%Page: 11 11 +BP +/slant 0 def +/height 1.000000 def +10 R +10 R +480 V +900(XIMTOOL)S +1376(\()S +1425(1)S +1491(\))S +2787(USER COMMANDS )S +4956(XIMTOOL)S +5432(\()S +5481(1)S +5547(\))S +960 V +9 B +1080(VIEW)S +1357(CONTROLS)S +1080 V +10 R +1260(The)S +10 B +1452(Frame)S +1771(box)S +10 R +1964(will)S +2157(list)S +2317(only)S +2532(the)S +2692(frame)S +2962(bu)S +3062 H + (f)show 10 -.5 mul h (f)show +10 R +3123(ers)S +3277(you)S +3465(currently)S +3863(have)S +4089(de\256ned.)S +4476(Currently,)S +4922(the)S +5082(only)S +5298(way)S +5502(to)S +1200 V +1260(destroy)S +1594(a)S +1678(frame)S +1950(bu)S +2050 H + (f)show 10 -.5 mul h (f)show +10 R +2111(er)S +2228(is)S +2335(to)S +2453(change)S +2775(the)S +2937(frame)S +3209(bu)S +3309 H + (f)show 10 -.5 mul h (f)show +10 R +3370(er)S +3487(con\256guration,)S +4085(new)S +4291(frame)S +4563(bu)S +4663 H + (f)show 10 -.5 mul h (f)show +10 R +4724(ers)S +4880(\(up)S +5052(to)S +5169(4\))S +5291(will)S +5486(be)S +1320 V +1260(created)S +1586(automatically)S +2169(if)S +2269(requested)S +2690(by)S +2829(the)S +2990(client.)S +3306(The)S +3500(number)S +3845(of)S +3968(frame)S +4240(bu)S +4340 H + (f)show 10 -.5 mul h (f)show +10 R +4401(ers)S +4557(created)S +4884(at)S +4996(startup)S +5308(can)S +5486(be)S +1440 V +1260(controlled)S +1695(using)S +1942(the)S +10 I +2094(-nframes)S +10 R +2479(command-line)S +3086(switch)S +3377(or)S +3490(the)S +10 I +3642(defNFrames)S +10 R +4166(resource.)S +1680 V +1260(The)S +10 B +1453(text)S +1651(display)S +10 R +1996(window)S +2356(gives)S +2605(the)S +2765(\256eld)S +2981(X,Y)S +3189(center,)S +3496(X,Y)S +3704(scale)S +3942(factors,)S +4277(and)S +4460(the)S +4621(X,Y)S +4829(zoom)S +5090(factors.)S +5425(The)S +1800 V +1260(scale)S +1501(factor)S +1774(and)S +1959(the)S +2122(zoom)S +2385(factor)S +2658(will)S +2855(be)S +2990(the)S +3153(same)S +3399(unless)S +10 I +3690(autoscale)S +10 R +4114(is)S +4222(enabled.)S +4598(The)S +4794(scale)S +5034(is)S +5142(in)S +5261(units)S +5497(of)S +1920 V +1260(display)S +1583(pixels)S +1856(per)S +2017(frame)S +2283(bu)S +2383 H + (f)show 10 -.5 mul h (f)show +10 R +2444(er)S +2555(pixel,)S +2814(and)S +2992(is)S +3093(an)S +3221(absolute)S +3589(measure)S +3956(\(it)S +4080(doesn't)S +4409(matter)S +4699(whether)S +5055(or)S +5173(not)S +5336(autos-)S +2040 V +1260(cale)S +1464(is)S +1575(enabled\).)S +1987(Zoom)S +2270(is)S +2381(relative)S +2724(to)S +2845(the)S +3010(autoscale)S +3424(factor,)S +3724(which)S +4011(is)S +4121(1.0)S +4289(if)S +4393(autoscaling)S +4891(is)S +5001(disabled.)S +5402(This)S +2160 V +1260(information)S +1762(is)S +1859(also)S +2050(presented)S +2462(in)S +2570(the)S +2722(Info)S +2918(panel.)S +2400 V +1260(The)S +1446(numbers)S +1821(in)S +1930(the)S +10 B +2083(Zoom)S +2364(box)S +10 R +2551(are)S +2703(zoom)S +2956(factors.)S +3283(Blue)S +3503(numbers)S +3878(zoom,)S +4156(red)S +4314(numbers)S +4689(dezoom.)S +10 I +5061(Zoom)S +5321(In)S +10 R +5436(and)S +2520 V +10 I +1260(Zoom)S +1522(Out)S +10 R +1706(may)S +1912(be)S +2039(used)S +2255(to)S +2366(go)S +2499(to)S +2610(larger)S +2875(or)S +2991(smaller)S +3318(zoom)S +3573(factors,)S +3902(e.g.)S +4079("Ctrl-5")S +4433(followed)S +4821(by)S +4954("Zoom)S +5267(In")S +5424(will)S +2640 V +1260(get)S +1421(you)S +1610(to)S +1727(zoom)S +1988(factor)S +2259(10.)S +2453(Speci\256c)S +2814(zoom)S +3075(factors)S +3385(may)S +3596(also)S +3796(be)S +3929(accessed)S +4316(directly)S +4660(as)S +4782(Control)S +5128(keystrokes,)S +2760 V +1260(e.g.)S +1448(Ctrl-5)S +1731(will)S +1931(set)S +2086(zoom)S +2352(factor)S +2628(5.)S +10 I +2747(Center)S +10 R +3063(centers)S +3389(the)S +3555(\256eld.)S +10 I +3832(Toggle)S +4154(Zoom)S +10 R +4426(toggles)S +4758(between)S +5133(the)S +5298(current)S +2880 V +1260(zoom/center)S +1783(values,)S +2093(and)S +2267(the)S +2419(unzoomed)S +2865(image.)S +3120 V +10 I +1260(Aspect)S +10 R +1564(recomputes)S +2062(the)S +2222(view)S +2454(so)S +2581(that)S +2769(the)S +2929(aspect)S +3217(ratio)S +3439(is)S +3545(1.0.)S +3734(Aspect)S +4050(also)S +4250(integerizes)S +4721(the)S +4882(zoom)S +5143(factor)S +5414(\(use)S +3240 V +1260(the)S +1412(version)S +1736(in)S +1844(the)S +1996(View)S +2242(menu)S +2494(if)S +2585(you)S +2765(don't)S +3006(want)S +3230(integerization\).)S +3480 V +10 I +1260(Fit)S +1408(Frame)S +10 R +1706(makes)S +1993(the)S +2147(display)S +2468(window)S +2822(the)S +2976(same)S +3213(size)S +3400(as)S +3515(the)S +3669(frame)S +3933(bu)S +4033 H + (f)show 10 -.5 mul h (f)show +10 R +4094(er.)S +4228(Note)S +4454(that)S +4636(autoscale)S +5039(has)S +5204(much)S +5458(the)S +3600 V +1260(same)S +1499(e)S +1543 H + (f)show 10 -.5 mul h (f)show +10 R +1604(ect,)S +1779(and)S +1957(allows)S +2252(you)S +2436(to)S +2548(resize)S +2814(the)S +2970(display)S +3293(window)S +3649(to)S +3761(any)S +3938(size)S +4126(you)S +4309(want,)S +4561(or)S +4677(view)S +4904(images)S +5220(too)S +5381(large)S +3720 V +1260(to)S +1368(\256t)S +1482(on)S +1612(the)S +1764(screen.)S +4008 V +9 B +1080(ENHANCEMENT)S +1827(CONTROLS)S +4128 V +10 R +1260(At)S +1398(the)S +1558(top)S +1724(is)S +1829(a)S +1911(scrolled)S +2265(list)S +2426(of)S +2547(all)S +2685(the)S +2845(available)S +3243(colormaps.)S +3722(Click)S +3977(on)S +4115(the)S +4275(one)S +4457(you)S +4645(want)S +4878(to)S +4995(load.)S +5231(You)S +5442(can)S +4248 V +1260(add)S +1447(your)S +1673(own)S +1888(colormaps)S +2347(to)S +2468(this)S +2656(list)S +2822(by)S +2965(de\256ning)S +3336(the)S +10 I +3501(cmap[12])S +10 R +3938(or)S +10 I +4063(cmapDir[12])S +10 R +4638(command)S +5074(line)S +5266(\257ags)S +5497(or)S +4368 V +1260(application)S +1734(resources.)S +4608 V +1260(The)S +1451(two)S +1637(sliders)S +1934(adjust)S +2209(the)S +2367(contrast)S +2719(\(upper)S +3015(slider\))S +3306(and)S +3486(brightness)S +3933(\(lower)S +4229(slider\))S +4520(of)S +4640(the)S +4799(display.)S +5150(The)S +10 I +5342(Invert)S +4728 V +10 R +1260(button)S +1549(inverts)S +1854(the)S +2009(colormap)S +2419(\(multiples)S +2858(the)S +3013(contrast)S +3362(by)S +3495(-1.0\).)S +3744(Note)S +3971(that)S +4154(due)S +4331(to)S +4442(the)S +4597(use)S +4763(of)S +4879(the)S +5033(private)S +5342(color-)S +4848 V +1260(map)S +1464(the)S +1618(sliders)S +1911(are)S +2064(a)S +2140(bit)S +2278(sluggish)S +2644(when)S +2892(dragged)S +3245(to)S +3355(window)S +3709(the)S +3863(display.)S +4209(If)S +4307(this)S +4484(is)S +4583(annoying,)S +5013(using)S +5263(MB3)S +5502(in)S +4968 V +1260(the)S +1412(display)S +1731(window)S +2083(is)S +2180(faster.)S +5208 V +1260(The)S +10 I +1454(Normalize)S +10 R +1910(button)S +2205(\(on)S +2377(the)S +2538(bottom)S +2861(of)S +2983(the)S +3145(control)S +3468(panel\))S +3757(will)S +3953(normalize)S +4392(the)S +4554(enhancement,)S +5145(i.e.)S +5307(set)S +5458(the)S +5328 V +1260(contrast)S +1613(and)S +1794(brightness)S +2242(to)S +2357(the)S +2516(default)S +2830(one-to-one)S +3299(values)S +3590(\(1.0,)S +3809(0.5\).)S +4028(This)S +4242(is)S +4345(the)S +4503(preferred)S +4903(setting)S +5206(for)S +5358(many)S +5448 V +1260(of)S +1381(the)S +1541(pseudocolor)S +2067(colortables)S +2543(and)S +2725(for)S +2879(private)S +3194(colormaps)S +3648(loaded)S +3952(from)S +4184(disk)S +4389(images.)S +4735(The)S +10 I +4929(Initialize)S +10 R +5324(button)S +5568 V +1260(does)S +1473(a)S +1547(reset)S +1765(of)S +1878(the)S +2030(server.)S +5856 V +9 B +1080(BLINK)S +1397(CONTROLS)S +5976 V +10 I +1260(Blink)S +1503(frames)S +10 R +1807(is)S +1907(the)S +2062(list)S +2218(of)S +2334(frames)S +2638(to)S +2749(be)S +2876(blinked.)S +3234(When)S +3505(blink)S +3744(mode)S +3999(is)S +4099(in)S +4210(e)S +4254 H + (f)show 10 -.5 mul h (f)show +10 R +4315(ect)S +4464(ximtool)S +4809(just)S +4987(cycles)S +5269(through)S +6096 V +1260(these)S +1498(frames)S +1802(endlessly,)S +2232(pausing)S +2576("blink)S +2856(rate")S +3079(seconds)S +3428(between)S +3793(each)S +4008(frame.)S +4298(The)S +4486(same)S +4724(frame)S +4989(can)S +5160(be)S +5287(entered)S +6216 V +1260(in)S +1371(the)S +1526(list)S +1682(more)S +1920(than)S +2125(once.)S +2371(To)S +2515(program)S +2886(an)S +3013(arbitrary)S +3389(list)S +3545(of)S +3662(blink)S +3902(frames,)S +4232(hit)S +4372(the)S +4528(Reset)S +4784(button)S +5074(and)S +5252(click)S +5480(on)S +6336 V +1260(each)S +1472(blink)S +1708(frame)S +1970(button)S +2256(until)S +2470(it)S +2556(is)S +2653(set)S +2794(to)S +2902(the)S +3054(desired)S +3372(frame)S +3634(number.)S +6576 V +1260(The)S +10 I +1455(Blink)S +1706(Rate)S +10 R +1929(can)S +2107(be)S +2242(adjusted)S +2616(as)S +2740(slow)S +2970(or)S +3094(as)S +3218(fast)S +3403(as)S +3527(you)S +3718(want)S +3953(using)S +4211(the)S +4374(arrow)S +4647(buttons.)S +5008(If)S +5115(you)S +5306(set)S +5458(the)S +6696 V +1260(blink)S +1496(rate)S +1675(small)S +1922(enough)S +2246(it)S +2332(will)S +2518(go)S +2648(to)S +2756(zero,)S +2982(enabling)S +3356(single)S +3625(step)S +3816(mode)S +4068(\(see)S +4258(below\).)S +6936 V +1260(The)S +10 I +1449(Register)S +10 R +1816(button)S +2106(registers)S +2478(all)S +2612(the)S +2768(blink)S +3008(frames)S +3313(with)S +3525(the)S +3681(current)S +3997(display)S +4320(frame.)S +4612(Frames)S +4941(not)S +5104(in)S +5217(the)S +5374(blink)S +7056 V +1260(list)S +1413(are)S +1564(not)S +1722(a)S +1766 H + (f)show 10 -.5 mul h (f)show +10 R +1827(ected.)S +7296 V +1260(The)S +10 I +1446(Match)S +1732(LUTs)S +10 R +1986(button)S +2273(sets)S +2454(the)S +2607(enhancement)S +3164(of)S +3278(all)S +3409(blink)S +3646(frames)S +3948(to)S +4057(the)S +4210(same)S +4446(values)S +4733(as)S +4848(the)S +5002(display)S +5323(frame.)S +7776 V +900(X11IRAF Project)S +2709(Last change: 10 Dec 1996)S +5480(11)S +7920 V +EP +%%Page: 12 12 +BP +/slant 0 def +/height 1.000000 def +10 R +10 R +480 V +900(XIMTOOL)S +1376(\()S +1425(1)S +1491(\))S +2787(USER COMMANDS )S +4956(XIMTOOL)S +5432(\()S +5481(1)S +5547(\))S +960 V +1260(Frames)S +1584(not)S +1742(in)S +1850(the)S +2002(blink)S +2238(list)S +2391(are)S +2542(not)S +2700(a)S +2744 H + (f)show 10 -.5 mul h (f)show +10 R +2805(ected.)S +1200 V +1260(The)S +10 I +1453(Blink)S +10 R +1702(button)S +1996(turns)S +2234(blink)S +2478(on)S +2616(and)S +2799(o)S +2849 H + (f)show 10 -.5 mul h (f)show +10 R +2910(.)S +2974(When)S +3251(the)S +3412(blink)S +3657(rate)S +3845(is)S +3951(set)S +4101(to)S +4218(zero)S +4428(the)S +4589(Blink)S +4851(button)S +5146(will)S +5341(single)S +1320 V +1260(step)S +1451(through)S +1792(the)S +1944(blink)S +2180(frames,)S +2506(one)S +2680(frame)S +2942(per)S +3099(button)S +3385(press.)S +1560 V +10 B +1260(NOTE:)S +10 R +1615(You)S +1825(can)S +2001(blink)S +2245(no)S +2383(matter)S +2677(what)S +2910(ximtool)S +3261(options)S +3595(are)S +3755(in)S +3872(e)S +3916 H + (f)show 10 -.5 mul h (f)show +10 R +3977(ect,)S +4157(but)S +4324(many)S +4585(of)S +4707(these)S +4951(will)S +5146(slow)S +5374(blink)S +1680 V +1260(down.)S +1541(To)S +1686(get)S +1842(the)S +1998(fastest)S +2287(blink)S +2527(you)S +2711(may)S +2917(want)S +3145(to)S +3257(turn)S +3451(o)S +3501 H + (f)show 10 -.5 mul h (f)show +10 R +3595(the)S +3750(panner)S +4054(and)S +4231(coords)S +4530(box,)S +4738(and)S +4915(match)S +5192(the)S +5347(LUTs)S +1800 V +1260(of)S +1382(all)S +1521(the)S +1682(blink)S +1927(frames.)S +2292(All)S +2459(the)S +2620(ximtool)S +2971(controls)S +3332(are)S +3492(fully)S +3721(active)S +3999(during)S +4300(blink)S +4546(mode,)S +4833(plus)S +5040(you)S +5230(can)S +5408(load)S +1920 V +1260(frames)S +1561(etc.)S +2208 V +9 B +1080(OPTIONS:)S +2328 V +10 B +1260(Panner)S +2448 V +10 R +1510(Toggles)S +1862(whether)S +2213(to)S +2321(display)S +2640(the)S +2792(panner)S +3093(marker.)S +2616 V +10 B +1260(Coords)S +1601(Box)S +2736 V +10 R +1510(Toggles)S +1862(whether)S +2213(to)S +2321(display)S +2640(the)S +2792(coordinate)S +3243(box)S +3423(marker.)S +2904 V +10 B +1260(Autoscale)S +3024 V +10 R +1510(If)S +1613(autoscale)S +2021(is)S +2126(enabled)S +2474(then)S +2684(at)S +2794(zoom=1,)S +3185(the)S +3345(frame)S +3615(bu)S +3715 H + (f)show 10 -.5 mul h (f)show +10 R +3776(er)S +3891(will)S +4085(be)S +4217(automatically)S +4799(scaled)S +5086(to)S +5202(\256t)S +5324(within)S +3144 V +1510(the)S +1667(display)S +1991(window.)S +2373(With)S +2608(autoscale)S +3014(disabled)S +3382(\(the)S +3572(default\),)S +3942(the)S +4099(image)S +4377(scale)S +4610(is)S +4711(more)S +4950(predictable,)S +5452(but)S +3264 V +1510(the)S +1662(image)S +1936(may)S +2138(be)S +2262(clipped)S +2586(by)S +2716(the)S +2868(display)S +3187(window,)S +3564(or)S +3677(may)S +3879(not)S +4037(\256ll)S +4179(the)S +4331(display)S +4650(window.)S +3432 V +10 B +1260(Antialiasing)S +3552 V +10 R +1510(When)S +1780(dezooming)S +2257(an)S +2384(image,)S +2686(i.e.,)S +2866(displaying)S +3316(a)S +3393(large)S +3625(image)S +3902(in)S +4013(a)S +4090(smaller)S +4417(display)S +4739(window,)S +5119(antialiasing)S +3672 V +1510(causes)S +1802(all)S +1933(the)S +2086(data)S +2283(to)S +2392(be)S +2517(used)S +2731(to)S +2840(compute)S +3215(the)S +3368(displayed)S +3782(image.)S +4082(If)S +4179(antialiasing)S +4671(is)S +4769(disabled)S +5133(then)S +5336(image)S +3792 V +1510(is)S +1607(subsampled)S +2109(to)S +2217(compute)S +2592(the)S +2745(displayed)S +3159(image.)S +3459(Antialiasing)S +3979(can)S +4148(prevent)S +4478(subsampling)S +5015(from)S +5240(omitting)S +3912 V +1510(image)S +1792(features)S +2145(that)S +2333(don't)S +2582(fall)S +2753(in)S +2869(the)S +3028(sample)S +3348(grid,)S +3571(but)S +3736(it)S +3829(is)S +3933(signi\256cantly)S +4465(slower)S +4768(than)S +4977(dezooming)S +5458(via)S +4032 V +1510(subsampling.)S +2101(The)S +2286(default)S +2593(is)S +2690(no)S +2820(antialising.)S +4200 V +10 B +1260(Tile)S +1457(Frames)S +4320 V +10 R +1510(The)S +1695(default)S +2002(display)S +2321(mode)S +2573(is)S +2670(to)S +2778(view)S +3002(one)S +3177(frame)S +3440(at)S +3543(a)S +3618(time.)S +3852(In)S +3966(tile)S +4125(frames)S +4427(mode,)S +4705(2)S +4786(or)S +4900(4)S +4981(frames)S +5283(may)S +5486(be)S +4440 V +1510(viewed)S +1834(simultaneously)S +2476(in)S +2590(the)S +2748(display)S +3073(window.)S +3486(All)S +3650(the)S +3808(usual)S +4055(operations)S +4507(\(zoom)S +4798(and)S +4977(pan,)S +5181(colortable)S +4560 V +1510(enhancement,)S +2091(cursor)S +2370(readback,)S +2784(etc.\))S +2988(still)S +3169(work)S +3404(for)S +3550(each)S +3762(frame)S +4024(even)S +4242(when)S +4488(in)S +4596(tile)S +4754(frames)S +5055(mode.)S +4728 V +10 B +1260(Warnings)S +4848 V +10 R +1510(The)S +1701(warnings)S +2103(options)S +2435(toggles)S +2761(whether)S +3119(you)S +3306(see)S +3470(warning)S +3834(dialog)S +4121(boxes)S +4391(in)S +4506(situations)S +4927(like)S +5114(overwriting)S +4968 V +1510(an)S +1634(existing)S +1981(\256le,)S +2164(clearing)S +2515(the)S +2667(frame)S +2929(bu)S +3029 H + (f)show 10 -.5 mul h (f)show +10 R +3090(er,)S +3222(etc.)S +5256 V +9 B +900(COLORMAP)S +1462(SELECTION)S +5376 V +10 R +1260(By)S +1410(default)S +1721(XImtool)S +2094(will)S +2284(display)S +2607(images)S +2924(using)S +3175(either)S +3436(a)S +3514(grayscale)S +3924(colormap)S +4335(\(e.g.)S +4576(if)S +4671(loaded)S +4971(by)S +5105(a)S +5183(client\),)S +5497(or)S +5496 V +1260(a)S +1346(private)S +1665(colormap)S +2084(when)S +2342(loading)S +2684(an)S +2820(image)S +3106(from)S +3342(disk)S +3551(that)S +3743(contains)S +4118(a)S +4204(colormap.)S +4648(Each)S +4888(frame)S +5161(de\256nes)S +5485(its)S +5616 V +1260(own)S +1470(colormap)S +1885(so)S +2013(you)S +2202(can)S +2379(de\256ne)S +2662(di)S +2740 H + (f)show 10 -.5 mul h (f)show +10 R +2801(erent)S +3039(colormaps)S +3494(or)S +3616(enhancements)S +4220(for)S +4375(each)S +4596(frame,)S +4892(they)S +5103(will)S +5298(change)S +5736 V +1260(automatically)S +1834(as)S +1947(you)S +2127(cycle)S +2367(through)S +2708(the)S +2860(frames.)S +6024 V +9 B +1080(BUILTIN)S +1487(COLORMAPS)S +6144 V +10 R +1260(Once)S +1501(loaded,)S +1823(the)S +1976(colormap)S +2384(may)S +2588(either)S +2847(be)S +2973(changed)S +3337(using)S +3586(the)S +3740(builtin)S +4034(colormap)S +4443(menu)S +4697(under)S +4956(the)S +5110(View)S +5358(menu)S +6264 V +1260(button)S +1559(on)S +1702(the)S +1867(main)S +2110(window,)S +2500(or)S +2625(from)S +2861(the)S +3025(Enhancement)S +3610(box)S +3802(on)S +3944(the)S +4108(control)S +4433(panel.)S +4716(XImtool)S +5097(has)S +5272(about)S +5536(a)S +6384 V +1260(dozen)S +1556(colormap)S +1991(options)S +2344(builtin,)S +2689(other)S +2952(user-de\256ned)S +3503(colormaps)S +3977(may)S +4208(optionally)S +4673(be)S +4826(loaded.)S +5206(It)S +5326(is)S +5452(not)S +6504 V +1260(presently)S +1656(possible)S +2014(to)S +2122(save)S +2329(colormaps)S +2775(for)S +2921(later)S +3128(use.)S +6792 V +9 B +1080(USER-DEFINED)S +1782(COLORMAPS)S +6912 V +10 R +1260(The)S +10 I +1454(cmap[12])S +10 R +1887(and)S +10 I +2070(cmapDir[12])S +10 R +2642(resources)S +3057(\(or)S +3212(command)S +3645(line)S +3834(arguments\))S +4322(are)S +4482(used)S +4705(to)S +4823(tell)S +4991(which)S +5275(speci\256c)S +7032 V +1260(colormaps)S +1719(to)S +1840(make)S +2099(available)S +2502(or)S +2628(where)S +2914(to)S +3035(look)S +3256(for)S +3415(colortables)S +3895(respectively.)S +4474(The)S +4671(colortables)S +5151(are)S +5314(loaded)S +7152 V +1260(when)S +1519(ximtool)S +1874(starts)S +2128(up,)S +2296(or)S +2422(when)S +2681(it)S +2780(is)S +2890(reinitialized)S +3410(\(e.g.)S +3630(by)S +3773(pressing)S +4149(the)S +4314(Initialize)S +4712(button)S +5011(in)S +5132(the)S +5297(control)S +7272 V +1260(panel\).)S +1598(XImtool)S +1971(will)S +2161(ignore)S +2450(any)S +2628(\256les)S +2829(in)S +2941(the)S +3097(colormap)S +3508(directory)S +3901(which)S +4178(do)S +4311(not)S +4472(look)S +4683(like)S +4866(colortables.)S +5392(New)S +7752 V +900(X11IRAF Project)S +2709(Last change: 10 Dec 1996)S +5480(12)S +7920 V +EP +%%Page: 13 13 +BP +/slant 0 def +/height 1.000000 def +10 R +10 R +480 V +900(XIMTOOL)S +1376(\()S +1425(1)S +1491(\))S +2787(USER COMMANDS )S +4956(XIMTOOL)S +5432(\()S +5481(1)S +5547(\))S +960 V +1260(colortables)S +1728(will)S +1914(also)S +2105(be)S +2229(added)S +2497(automatically)S +3071(for)S +3217(each)S +3429(image)S +3703(loaded)S +3999(from)S +4223(disk.)S +1200 V +1260(The)S +1451(format)S +1753(of)S +1872(a)S +1952(user)S +2154(lookup)S +2468(table)S +2698(is)S +2801(very)S +3015(simple:)S +3347(each)S +3566(row)S +3758(de\256nes)S +4078(one)S +4259(colortable)S +4695(entry,)S +4962(and)S +5143(consists)S +5497(of)S +1320 V +1260(three)S +1489(columns)S +1858(de\256ning)S +2216(the)S +2368(red,)S +2550(green,)S +2826(and)S +3000(blue)S +3202(values)S +3487(scaled)S +3766(to)S +3874(the)S +4026(range)S +4277(0.0)S +4432(\(o)S +4515 H + (f)show 10 -.5 mul h (f)show +10 R +4576(\))S +4639(to)S +4747(1.0)S +4902(\(full)S +5104(intensity\).)S +1560 V +1500(R)S +1597(G)S +1699(B)S +1680 V +1500(R)S +1597(G)S +1699(B)S +1800 V +1500(\(etc.\))S +2040 V +1260(Blank)S +1529(and)S +1703(comment)S +2105(lines)S +2324(\(lines)S +2576(beginning)S +3006(with)S +3214(a)S +3288('#'\))S +3467(are)S +3618(ignored.)S +2280 V +1260(Usually)S +1605(256)S +1789(rows)S +2017(are)S +2172(provided,)S +2586(but)S +2748(the)S +2904(number)S +3243(may)S +3449(actually)S +3799(be)S +3927(anything)S +4311(in)S +4423(the)S +4579(range)S +4834(1)S +4918(to)S +5031(256.)S +5241(XImtool)S +2400 V +1260(will)S +1451(interpolate)S +1912(the)S +2068(table)S +2296(as)S +2413(necessary)S +2834(to)S +2946(compute)S +3324(the)S +3480(colortable)S +3913(values)S +4202(used)S +4419(in)S +4531(XImtool.)S +4929(XImtool)S +5302(uses)S +5508(at)S +2520 V +1260(most)S +1485(201)S +1665(colors)S +1939(to)S +2047(render)S +2331(pixel)S +2561(data,)S +2782(so)S +2901(it)S +2987(is)S +3084(usually)S +3403(necessary)S +3820(to)S +3928(interpolate)S +4385(the)S +4537(table)S +4761(when)S +5007(it)S +5093(is)S +5190(loaded.)S +2760 V +1260(The)S +1446(name)S +1693(of)S +1807(the)S +1960(colortable)S +2390(as)S +2504(it)S +2591(will)S +2778(appear)S +3074(in)S +3183(the)S +3336(XImtool)S +3706(control)S +4020(panel)S +4267(is)S +4365(the)S +4518(root)S +4710(name)S +4957(of)S +5072(the)S +5226(\256le,)S +5411(e.g.,)S +2880 V +1260(if)S +1365(the)S +1531(\256le)S +1703(is)S +1814("rainbow.lut")S +2398(the)S +2564(colortable)S +3007(name)S +3267(will)S +3467(be)S +3605("rainbow".)S +4083(Lower)S +4387(case)S +4602(names)S +4901(are)S +5065(suggested)S +5502(to)S +3000 V +1260(avoid)S +1525(name)S +1784(collisions)S +2211(with)S +2432(the)S +2597(builtin)S +2902(colortables.)S +3408(Private)S +3734(colormaps)S +4193(for)S +4352(disk)S +4562(images)S +4888(will)S +5088(be)S +5226(have)S +5458(the)S +3120 V +1260(same)S +1497(name)S +1745(as)S +1860(the)S +2014(image)S +2290(loaded.)S +2613(If)S +2711(the)S +2865(same)S +3102(colortable)S +3533(\256le)S +3693(appears)S +4029(in)S +4139(multiple)S +4505(user)S +4703(colortable)S +5134(directories,)S +3240 V +1260(the)S +1412(\256rst)S +1598(one)S +1772(found)S +2035(will)S +2221(be)S +2345(used.)S +3528 V +9 B +1080(MINIMIZING)S +1677(COLORMAP)S +2239(CONFLICTS)S +3648 V +10 R +1260(The)S +1456(Gterm)S +1752(widget)S +2065(used)S +2289(by)S +2430(XImtool)S +2810(\(i.e.)S +3006(the)S +3169(main)S +3410(display)S +3740(window\))S +4136(uses)S +4349(a)S +4434(private)S +4753(global)S +5045(colormap)S +5464(for)S +3768 V +1260(display,)S +1615(this)S +1801(allows)S +2103(it)S +2200(to)S +2319(have)S +2548(greater)S +2865(control)S +3189(over)S +3407(color)S +3653(cell)S +3838(allocation)S +4273(but)S +4441(can)S +4619(occasionally)S +5158(also)S +5359(cause)S +3888 V +1260("colormap)S +1712(\257ashing")S +2104(as)S +2221(the)S +2377(mouse)S +2672(is)S +2773(moved)S +3079(in)S +3191(and)S +3370(out)S +3533(of)S +3651(the)S +3808(application.)S +4372(The)S +4562(problem)S +4930(here)S +5136(is)S +5238(that)S +5423(in)S +5536(a)S +4008 V +1260(system)S +1572(with)S +1784(only)S +1996(an)S +2124(8-bit)S +2347(colormap)S +2758(\(256)S +2975(colors\))S +3286(all)S +3420(applications)S +3937(must)S +4165(compete)S +4536(for)S +4685(colors,)S +4987(programs)S +5397(such)S +4128 V +1260(as)S +1380(XV)S +1561(or)S +1681(Netscape)S +2083(allocate)S +2430(colors)S +2711(from)S +2942(the)S +3102(default)S +3417(colormap)S +3832(leaving)S +4164(only)S +4380(a)S +4462(few)S +4649(free)S +4841(cells)S +5062(for)S +5216(XImtool.)S +4248 V +1260(Since)S +1513(XImtool)S +1883(de\256nes)S +2197(a)S +2271(private)S +2578(global)S +2858(colormap)S +3265(it)S +3351(is)S +3448(still)S +3629(able)S +3825(to)S +3933(allocate)S +4273(the)S +4425(needed)S +4737(cells)S +4950(rather)S +5212(than)S +5414(fail-)S +4368 V +1260(ing,)S +1449(but)S +1613(it's)S +1777(allocating)S +2207(cells)S +2426(already)S +2755(used)S +2974(by)S +3110(other)S +3351(applications.)S +3925(As)S +4072(the)S +4230(mouse)S +4527(moves)S +4824(out)S +4989(of)S +5109(the)S +5268(ximtool)S +4488 V +1260(window)S +1623(those)S +1875(cells)S +2099(are)S +2261(once)S +2490(again)S +2747(de\256ned)S +3082(in)S +3201(terms)S +3464(of)S +3587(the)S +3749(default)S +4066(colormap,)S +4508(so)S +4637(the)S +4799(ximtool)S +5151(window)S +5513(is)S +4608 V +1260(then)S +1470(using)S +1725(a)S +1807(di)S +1885 H + (f)show 10 -.5 mul h (f)show +10 R +1946(erent)S +2183(colormap.)S +2653(It)S +2752(is)S +2857(this)S +3040(switching)S +3467(of)S +3588(the)S +3748(colormap)S +4164(context)S +4497(that)S +4686(causes)S +4985(the)S +5146(\257ashing)S +5502(to)S +4728 V +1260(occur,)S +1536(but)S +1694(there)S +1923(are)S +2074(a)S +2148(few)S +2327(things)S +2602(that)S +2782(can)S +2950(be)S +3074(done)S +3298(to)S +3406(help)S +3608(minimize)S +4016(this.)S +4968 V +1260(XImtool)S +1640(logically)S +2031(de\256nes)S +2356(200)S +2548(colors)S +2834(which)S +3120(the)S +3284(client)S +3548(image)S +3834(display)S +4165(program)S +4545(can)S +4725(use)S +4900(to)S +5020(render)S +5316(pixels.)S +5088 V +1260(However,)S +1687(ximtool)S +2036(may)S +2245(or)S +2365(may)S +2574(not)S +2739(actually)S +3092(allocate)S +3439(all)S +3576(of)S +3695(those)S +3942(colors.)S +4277(By)S +4430(default)S +4743(it)S +4835(currently)S +5231(allocates)S +5208 V +1260(only)S +1479(about)S +1743(192)S +1935(colors,)S +2246(to)S +2366(reserve)S +2695(64)S +2837(colors)S +3123(for)S +3281(the)S +3445(other)S +3692(windows)S +4095(on)S +4237(the)S +4401(screen.)S +4752(You)S +4966(don't)S +5219(normally)S +5328 V +1260(notice)S +1539(this)S +1719(as)S +1837(1\))S +1955(usually)S +2279(the)S +2436(default)S +2748(screen)S +3037(colormap)S +3449(has)S +3617(enough)S +3946(free)S +4135(cells)S +4353(to)S +4466(allow)S +4722(ximtool)S +5068(to)S +5180(match)S +5458(the)S +5448 V +1260(colors,)S +1570(and)S +1755(2\))S +1879(the)S +2042(extra)S +2282(unallocated)S +2784(cells)S +3009(correspond)S +3494(to)S +3614(the)S +3778(brightest)S +4170(pixels)S +4451(in)S +4571(the)S +4735(rendered)S +5125(image,)S +5436(and)S +5568 V +1260(these)S +1496(colors)S +1771(may)S +1974(not)S +2132(be)S +2256(used)S +2469(or)S +2582(usually)S +2901(only)S +3109(correspond)S +3582(to)S +3690(a)S +3764(few)S +3943(small)S +4190(regions)S +4514(near)S +4715(the)S +4867(saturated)S +5257(cores)S +5497(of)S +5688 V +1260(bright)S +1529(objects.)S +5928 V +1260(You)S +1465(can)S +1636(eliminate)S +2041(this)S +2219(problem)S +2585(by)S +2718(setting)S +3018(the)S +10 I +3173(basePixel)S +10 R +3594(resource)S +3965(to)S +4077(e.g.)S +4285(48)S +4419(instead)S +4736(of)S +4853(64,)S +5012(which)S +5290(will)S +5480(let)S +6048 V +1260(the)S +1428(gterm)S +1707(widget)S +2025(allocate)S +2381(all)S +2527(200)S +2723(colors.)S +3068(However,)S +3504(this)S +3695(isn't)S +3918(recommended)S +4528(for)S +4689(normal)S +5017(use)S +5195(as)S +5323(it)S +5424(will)S +6168 V +1260(increase)S +1624(the)S +1784(likelihood)S +2228(of)S +2349(colormap)S +2764(\257ashing.)S +3174(If)S +3278(you)S +3466(change)S +10 I +3787(basePixel)S +10 R +4175(,)S +4239(either)S +4505(restart)S +4793(the)S +4954(X)S +5065(server)S +5347(or)S +5469(set)S +6288 V +1260(the)S +1418(resource)S +10 I +1791(cmapInitialize)S +10 R +2363(=)S +10 I +2419(True)S +10 R +2644(to)S +2758(force)S +2998(the)S +3156(gterm)S +3425(widget)S +3732(to)S +3845(update)S +4146(its)S +4276(global)S +4561(colormap)S +4973(resource)S +5345(in)S +5458(the)S +6408 V +1260(X)S +1362(server.)S +1660(The)S +1845(colormap)S +2252(resource)S +2619(may)S +2821(also)S +3012(be)S +3136(deleted)S +3454(by)S +3584(using)S +3831(the)S +3983(command)S +6648 V +10 I +1980(xprop)S +2243(-root)S +2473(-remove)S +2829(GT_image)S +6888 V +10 R +1260(These)S +1528(options)S +1853(may)S +2055(also)S +2246(be)S +2370(set)S +2511(on)S +2641(the)S +2793(command)S +3217(line)S +3397(when)S +3643(\256rst)S +3829(starting)S +4159(up.)S +7128 V +1260(In)S +1388(general)S +1726(one)S +1915(can)S +2098(set)S +2254(the)S +2421(Gterm)S +2721(widget)S +3039(resources)S +10 I +3461(basePixel)S +10 R +3895(and)S +10 I +4085(maxColors)S +10 R +4570(to)S +4694(specify)S +5028(the)S +5196(region)S +5497(of)S +7248 V +1260(colormap)S +1680(space)S +1944(to)S +2065(be)S +2202(used)S +2428(for)S +2587(image)S +2874(display.)S +3261(If)S +3370(you)S +3563(set)S +10 I +3717(maxColors)S +10 R +4199(to)S +4320(a)S +4407(small)S +4667(value,)S +4951(the)S +5116(200)S +5308(logical)S +7728 V +900(X11IRAF Project)S +2709(Last change: 10 Dec 1996)S +5480(13)S +7920 V +EP +%%Page: 14 14 +BP +/slant 0 def +/height 1.000000 def +10 R +10 R +480 V +900(XIMTOOL)S +1376(\()S +1425(1)S +1491(\))S +2787(USER COMMANDS )S +4956(XIMTOOL)S +5432(\()S +5481(1)S +5547(\))S +960 V +1260(colors)S +1541(de\256ned)S +1872(by)S +2009(the)S +2168(widget)S +2477(will)S +2670(be)S +2801(mapped)S +3154(by)S +3291(the)S +3450(imtool)S +3749(color)S +3991(model)S +4278(into)S +4471(whatever)S +4873(number)S +5215(of)S +5336(colors)S +1080 V +1260(are)S +1417(actually)S +1769(available)S +2165(to)S +2279(the)S +2437(widget.)S +2800(For)S +2974(example,)S +3372(in)S +3485(the)S +3642(default)S +3954(setup,)S +4225(200)S +4410(color)S +4650(values)S +4940(are)S +5096(really)S +5358(being)S +1200 V +1260(mapped)S +1606(into)S +1792(192)S +1972(color)S +2207(cells)S +2420(used)S +2633(for)S +2779(display,)S +3123(the)S +3275(remaining)S +3710(colors)S +3984(are)S +4135(used)S +4348(for)S +4494(buttons,)S +4845(menus)S +5137(etc)S +5284(and)S +5459(are)S +1320 V +1260(allocated)S +1650(from)S +1874(the)S +2026(default)S +2333(colormap)S +2740(by)S +2870(the)S +3022(X)S +3124(toolkit)S +3416(when)S +3662(the)S +3814(application)S +4288(starts)S +4529(up.)S +1560 V +1260(Even)S +1501(though)S +1815(the)S +1973(Gterm)S +2264(widget)S +2572(uses)S +2780(a)S +2860(private)S +3174(colormap,)S +3613(it)S +3706(is)S +3810(a)S +3891(private)S +10 I +4205(global)S +10 R +4498(colormap)S +4912(meaning)S +5293(that)S +5480(all)S +1680 V +1260(Gterm)S +1550(widgets)S +1896(share)S +2141(the)S +2298(same)S +2537(colormap.)S +3003(An)S +3159(example)S +3531(of)S +3648(colormap)S +4059(sharing)S +4387(in)S +4499(ximtool)S +4845(is)S +4946(the)S +5102(main)S +5336(image)S +1800 V +1260(window)S +1619(and)S +1800(the)S +1959(colorbar)S +2328(window.)S +2742(These)S +3017(are)S +3175(two)S +3362(separate)S +3725(gterm)S +3995(widgets)S +4343(that)S +4530(share)S +4777(the)S +4936(same)S +5178(colormap.)S +1920 V +1260(They)S +1506(have)S +1735(to)S +1854(share)S +2105(the)S +2268(same)S +2514(colormap,)S +2957(as)S +3080(otherwise)S +3508(when)S +3764(you)S +3954(windowed)S +4410(the)S +4572(main)S +4812(image)S +5096(window)S +5458(the)S +2040 V +1260(colorbar)S +1630(window)S +1990(would)S +2278(not)S +2444(accurately)S +2891(re\257ect)S +3178(the)S +3338(modi\256ed)S +3732(colormap.)S +4203(By)S +4359(default)S +4675(two)S +4864(separate)S +5229(ximtools)S +2160 V +1260(would)S +1556(also)S +1763(share)S +2019(the)S +2186(same)S +2436(colormap)S +2858(meaning)S +3247(contrast)S +3608(enhancements)S +4218(in)S +4341(one)S +4530(window)S +4897(would)S +5192(a)S +5236 H + (f)show 10 -.5 mul h (f)show +10 R +5297(ect)S +5458(the)S +2280 V +1260(other.)S +1563(By)S +1723(resetting)S +2110(the)S +10 I +2275(cmapName)S +10 R +2767(command)S +3204(line)S +3397(option)S +3696(or)S +3822(resource)S +4203(you)S +4397(can)S +4579(change)S +4905(the)S +5071(name)S +5331(of)S +5458(the)S +2400 V +1260(private)S +1582(colormap)S +2004(used)S +2232(causing)S +2582(separate)S +2953(ximtools)S +3349(to)S +3472(use)S +3650(di)S +3728 H + (f)show 10 -.5 mul h (f)show +10 R +3789(erent)S +4033(colormaps,)S +4519(but)S +4692(note)S +4909(this)S +5099(also)S +5304(creates)S +2520 V +1260(colormap)S +1671(\257ashing)S +2022(between)S +2388(the)S +2544(two)S +2728(windows)S +3123(that)S +3307(cannot)S +3607(easily)S +3874(be)S +4002(avoided.)S +4407(By)S +4559(setting)S +4861(the)S +10 I +5018(cmapName)S +10 R +5502(to)S +2640 V +1260("default")S +1649(the)S +1801(widget)S +2103(will)S +2289(allocate)S +2629(colors)S +2903(from)S +3127(the)S +3279(default)S +3586(colormap,)S +4018(but)S +4176(this)S +4351(is)S +4448(of)S +4561(little)S +4775(use)S +4938(at)S +5040(the)S +5192(moment.)S +2880 V +1260(There)S +1524(are)S +1677(a)S +1753(number)S +2090(of)S +2205(other)S +2442(resources)S +2850(that)S +3032(can)S +3202(be)S +3328(used)S +3543(to)S +3653(modify)S +3974(the)S +4129(behavior)S +4511(of)S +4627(the)S +4782(Gterm)S +5070(widget)S +5375(color)S +3000 V +1260(management)S +1801(scheme,)S +2156(but)S +2315(these)S +2551(are)S +2703(the)S +2856(most)S +3082(useful)S +3356(ones.)S +3624(For)S +3793(question)S +4162(and)S +4336(further)S +4637(information)S +5139(feel)S +5318(free)S +5502(to)S +3120 V +1260(contact)S +10 I +1578(iraf@noao.edu)S +10 R +2184(.)S +3408 V +9 B +900(LOAD)S +1187(PANEL)S +3528 V +10 R +1260(The)S +1448(Load)S +1687(Panel)S +1943(allows)S +2238(you)S +2422(load)S +2628(images)S +2945(from)S +3173(disk)S +3374(directly)S +3713(to)S +3825(the)S +3981(frame)S +4247(bu)S +4347 H + (f)show 10 -.5 mul h (f)show +10 R +4408(er,)S +4544(this)S +4723(is)S +4824(analogous)S +5263(to)S +5375(load-)S +3648 V +1260(ing)S +1439(an)S +1584(image)S +1879(on)S +2030(the)S +2203(command)S +2648(line)S +2848(except)S +3158(that)S +3358(browsing)S +3780(is)S +3897(possible.)S +4300(At)S +4450(present)S +4788(recognized)S +5275(formats)S +3768 V +1260(include)S +1587(IRAF)S +1848(OIF)S +2042(format)S +2341(\(i.e.)S +10 I +2529(.imh)S +10 R +2737(extension\),)S +3211(simple)S +3511(FITS)S +3750(\256les,)S +3975(GIF,)S +4195(and)S +4373(Sun)S +4563(raster\256les.)S +5040(The)S +5229(task)S +5424(will)S +3888 V +1260(automatically)S +1850(sense)S +2112(the)S +2280(format)S +2592(of)S +2721(the)S +2888(image)S +3177(and)S +3366(load)S +3583(it)S +3684(appropriately.)S +4286(Images)S +4619(with)S +4842(private)S +5164(colormaps)S +4008 V +1260(\(such)S +1515(as)S +1637(GIF\))S +1870(will)S +2065(be)S +2198(loaded)S +2503(using)S +2759(the)S +2920(private)S +3236(colormap)S +3652(\(meaning)S +4068(that)S +4257(changing)S +4663(the)S +4825(brightness/contrast)S +4128 V +1260(enhancements)S +1861(will)S +2053(render)S +2343(a)S +2423(random-colored)S +3096(image\),)S +3434(all)S +3570(others)S +3850(will)S +4042(be)S +4172(loaded)S +4474(with)S +4688(a)S +4767(grayscale)S +5178(colormap.)S +4248 V +1260(If)S +1363(the)S +10 I +1522(Grayscale)S +10 R +1969(button)S +2262(is)S +2366(enabled)S +2713(the)S +2872(image)S +3153(colormap)S +3567(will)S +3760(be)S +3891(converted)S +4321(to)S +4437(grayscale)S +4851(and)S +5033(loaded)S +5337(as)S +5458(the)S +4368 V +1260(standard)S +1633(grayscale)S +2044(colormap.)S +2511(The)S +2701(Load)S +2941(panel)S +3192(will)S +3383(close)S +3623(automatically)S +4202(once)S +4425(the)S +4582(image)S +4861(has)S +5029(loaded)S +5330(unless)S +4488 V +1260(the)S +10 I +1412(Browse)S +10 R +1742(button)S +2028(has)S +2191(been)S +2409(set.)S +4728 V +1260(When)S +1531(loading)S +1864(new)S +2063(images)S +2379(the)S +2534(frame)S +2799(bu)S +2899 H + (f)show 10 -.5 mul h (f)show +10 R +2960(er)S +3070(con\256guration)S +3636(table)S +3863(will)S +4053(be)S +4181(searched)S +4563(for)S +4713(a)S +4791(frame)S +5057(bu)S +5157 H + (f)show 10 -.5 mul h (f)show +10 R +5218(er)S +5329(that)S +5513(is)S +4848 V +1260(the)S +1417(same)S +1657(size)S +1847(or)S +1965(larger)S +2231(than)S +2437(the)S +2593(new)S +2793(image)S +3071(size,)S +3285(if)S +3380(no)S +3514(frame)S +3780(bu)S +3880 H + (f)show 10 -.5 mul h (f)show +10 R +3941(er)S +4052(can)S +4224(be)S +4352(found)S +4619(a)S +4697(custom)S +5020(bu)S +5120 H + (f)show 10 -.5 mul h (f)show +10 R +5181(er)S +5292(exactly)S +4968 V +1260(the)S +1420(size)S +1613(of)S +1734(the)S +1894(image)S +2176(will)S +2370(be)S +2502(created.)S +2852(This)S +3068(means)S +3361(that)S +3549(the)S +3709(image)S +3991(may)S +4201(not)S +4367(\256ll)S +4517(the)S +4677(display)S +5004(window)S +5364(when)S +5088 V +1260(loaded,)S +1596(or)S +1724(you)S +1919(may)S +2136(see)S +2308(a)S +2397(subsection)S +2864(of)S +2992(the)S +3159(image)S +3447(in)S +3569(the)S +3735(main)S +3979(display)S +4312(window.)S +4703(Setting)S +5031(the)S +10 I +5197(autoscale)S +5208 V +10 R +1260(option)S +1557(will)S +1754(scale)S +1994(the)S +2157(entire)S +2425(image)S +2710(to)S +2829(\256t)S +2954(the)S +3117(main)S +3358(display)S +3688(window,)S +4076(the)S +4239(full)S +4419(frame)S +4692(bu)S +4792 H + (f)show 10 -.5 mul h (f)show +10 R +4853(er)S +4971(will)S +5168(always)S +5486(be)S +5328 V +1260(visible)S +1557(in)S +1665(the)S +1817(Panner)S +2124(marker)S +2436(window.)S +5568 V +1260(Images)S +1578(with)S +1786(more)S +2021(colors)S +2295(than)S +2497(can)S +2665(be)S +2789(displayed)S +3202(will)S +3389(automatically)S +3964(be)S +4089(quantized)S +4508(to)S +4617(the)S +4770(number)S +5106(of)S +5220(available)S +5688 V +1260(colors)S +1546(before)S +1842(display,)S +2198(24-bit)S +2479(formats)S +2826(are)S +2988(not)S +3157(currently)S +3558(supported)S +3993(\(but)S +4195(may)S +4408(be)S +4543(in)S +4662(the)S +4825(future)S +5104(and)S +5289(will)S +5486(be)S +5808 V +1260(similarly)S +1646(quantized\).)S +6048 V +1260(Formats)S +1620(which)S +1896(permit)S +2189(larger)S +2454(than)S +2659(8-bit)S +2881(pixels)S +3153(will)S +3342(be)S +3469(sampled)S +3835(on)S +3968(a)S +4045(grid)S +4239(to)S +4350(determine)S +4782(an)S +4909(optimal)S +5248(range)S +5502(in)S +6168 V +1260(the)S +1418(data)S +1620(to)S +1734(be)S +1864(used)S +2083(to)S +2197(compute)S +2577(a)S +2657(linear)S +2920(transformation)S +3544(to)S +3658(the)S +3816(number)S +4157(of)S +4275(display)S +4599(colors.)S +4903(This)S +5116(is)S +5218(the)S +5375(same)S +6288 V +1260(sampling)S +1660(and)S +1837(transformation)S +2458(used)S +2674(by)S +2807(the)S +2962(IRAF)S +10 I +3223(DISPLAY)S +10 R +3645(task)S +3839(when)S +4089(computing)S +4551(the)S +10 I +4707(z1/z2)S +10 R +4947(values)S +5236(and)S +5414(pro-)S +6408 V +1260(vides)S +1501(a)S +1575(much)S +1827(better)S +2084(initial)S +2348(display)S +2667(than)S +2869(simple)S +3166(truncation)S +3601(to)S +3709(8-bits.)S +6576 V +10 B +1260(Directory)S +1699(Browsing)S +6696 V +10 R +1510(The)S +1702(load)S +1911(panel)S +2165(contains)S +2536(a)S +2618(list)S +2779(of)S +2900(\256les)S +3105(in)S +3221(the)S +3381(current)S +3701(directory)S +4099(that)S +4287(may)S +4497(be)S +4629(selected)S +4988(for)S +5142(loading)S +5480(by)S +6816 V +1510(selecting)S +1901(with)S +2115(left)S +2284(mouse)S +2581(button.)S +2898(If)S +3000(the)S +3158(\256le)S +3322(is)S +3425(a)S +3504(directory)S +3899(the)S +4056(contents)S +4424(of)S +4542(the)S +4699(new)S +4900(directory)S +5295(will)S +5486(be)S +6936 V +1510(loaded,)S +1836(if)S +1932(it's)S +2095(a)S +2174(plain)S +2409(\256le)S +2572(an)S +2701(attempt)S +3036(will)S +3227(be)S +3356(made)S +3607(to)S +3720(load)S +3927(it)S +4018(as)S +4137(an)S +4267(image)S +4547(otherwise)S +4971(an)S +5101(error)S +5330(popup)S +7056 V +1510(will)S +1706(appear.)S +2065(Directories)S +2547(in)S +2664(the)S +2825(list)S +2987(are)S +3147(identi\256ed)S +3564(with)S +3781(a)S +3864(trailing)S +4192('/')S +4325(character,)S +4753(you)S +4942(will)S +5137(always)S +5453(see)S +7176 V +1510(any)S +1684(subdirectories)S +2274(listed)S +2521(even)S +2739(if)S +2830(a)S +2904(\256lter)S +3123(is)S +3220(speci\256ed.)S +7680 V +900(X11IRAF Project)S +2709(Last change: 10 Dec 1996)S +5480(14)S +7920 V +EP +%%Page: 15 15 +BP +/slant 0 def +/height 1.000000 def +10 R +10 R +480 V +900(XIMTOOL)S +1376(\()S +1425(1)S +1491(\))S +2787(USER COMMANDS )S +4956(XIMTOOL)S +5432(\()S +5481(1)S +5547(\))S +960 V +1510(The)S +10 I +1698(Root)S +10 R +1920(button)S +2209(will)S +2398(reset)S +2619(the)S +2774(current)S +3089(directory)S +3482(to)S +3593(the)S +3748(system)S +4059(root)S +4254(directory.)S +4673(The)S +10 I +4862(Home)S +10 R +5134(button)S +5424(will)S +1080 V +1510(reset)S +1730(the)S +1884(current)S +2198(directory)S +2590(to)S +2700(the)S +2854(user's)S +3124(login)S +3362(directory,)S +3779(the)S +10 I +3932(Up)S +10 R +4085(button)S +4372(moves)S +4664(up)S +4795(one)S +4970(directory)S +5361(level,)S +1200 V +1510(and)S +10 I +1688(Rescan)S +10 R +2010(reloads)S +2332(the)S +2488(\256le)S +2650(list)S +2807(by)S +2942(rescanning)S +3409(the)S +3566(directory.)S +3986(The)S +4176(current)S +4493(working)S +4861(directory)S +5256(is)S +5358(given)S +1320 V +1510(below)S +1784(the)S +1936(\256le)S +2094(selection)S +2479(window.)S +1488 V +10 B +1260(File)S +1451(Patterns)S +1608 V +10 R +1510(By)S +1663(default)S +1976(all)S +2112(\256les)S +2315(and)S +2495(directories)S +2952(will)S +3144(be)S +3274(listed.)S +3552(You)S +3760(may)S +3968(specify)S +4292(a)S +4372(\256lter)S +4597(to)S +4711(e.g.)S +4891(select)S +5154(only)S +5369(those)S +1728 V +1510(\256les)S +1718(with)S +1936(a)S +2020(given)S +2282(extension)S +2705(like)S +2895(")S +10 Y +2936(*)S +10 R +2986(.\256ts")S +3215(to)S +3333(list)S +3496(only)S +3714(\256les)S +3921(with)S +4139(a)S +4223(".\256ts")S +4493(extension.)S +4941(Directories)S +5424(will)S +1848 V +1510(always)S +1830(be)S +1967(seen)S +2187(in)S +2308(the)S +2473(list)S +2639(and)S +2826(are)S +2990(identi\256ed)S +3411(with)S +3632(a)S +3719(trailing)S +4051('/')S +4188(character.)S +4621(Any)S +4837(valid)S +5081(unix)S +5303(pattern)S +1968 V +1510(matching)S +1912(string)S +2170(will)S +2356(be)S +2480(recognized.)S +2136 V +10 B +1260(Direct)S +1555(File)S +1746(Load)S +2256 V +10 R +1510(If)S +1608(you)S +1791(know)S +2046(exactly)S +2367(which)S +2644(\256le)S +2805(you)S +2988(wish)S +3210(to)S +3321(load,)S +3551(you)S +3734(may)S +3939(enter)S +4171(its)S +4299(name)S +4548(in)S +4659(the)S +10 I +4814(Load)S +5053(File)S +10 R +5247(text)S +5430(box)S +2376 V +1510(and)S +1688(either)S +1949(hit)S +2089()S +2312(or)S +2429(the)S +2585(Load)S +2824(button)S +3114(to)S +3226(load)S +3432(it.)S +3577(An)S +3733(absolute)S +4099(or)S +4215(relative)S +4547(path)S +4752(name)S +5001(may)S +5206(be)S +5333(given,)S +2496 V +1510(if)S +1601(a)S +1675(simple)S +1972(\256lename)S +2346(is)S +2443(speci\256ed)S +2828(it)S +2914(will)S +3100(be)S +3224(searched)S +3602(for)S +3748(in)S +3856(the)S +4008(current)S +4320(working)S +4683(directory.)S +2664 V +10 B +1260(Frame)S +1572(Selections)S +2784 V +10 R +1510(By)S +1662(default)S +1974(images)S +2292(will)S +2483(be)S +2612(loaded)S +2914(into)S +3106(frame)S +3374(number)S +3715(1,)S +3826(you)S +4012(may)S +4220(select)S +4483(a)S +4563(di)S +4641 H + (f)show 10 -.5 mul h (f)show +10 R +4702(erent)S +4937(frame)S +5205(using)S +5458(the)S +2904 V +1510(Frame)S +1795(menu)S +2047(button)S +2333(to)S +2441(cycle)S +2681(through)S +3022(the)S +3174(available)S +3564(frames.)S +3192 V +9 B +900(SAVE)S +1167(PANEL)S +3312 V +10 R +1260(The)S +1445(Save)S +1669(Panel)S +1921(lets)S +2090(you)S +2270(save)S +2477(the)S +2629(current)S +2941(contents)S +3304(of)S +3418(the)S +3571(main)S +3802(display)S +4122(window)S +4475(to)S +4584(a)S +4659(disk)S +4857(\256le)S +5016(\(including)S +5458(the)S +3432 V +1260(Panner/Coords)S +1896(markers,)S +2284(any)S +2470(general)S +2805(graphics)S +3185(markers,)S +3573(or)S +3698(overlay)S +4039(graphics)S +4419(displayed)S +4844(by)S +4986(the)S +5150(client)S +5414(pro-)S +3552 V +1260(gram\).)S +1554(Presently,)S +1982(only)S +2191(the)S +2344(contents)S +2708(of)S +2822(the)S +2975(main)S +3206(display)S +3526(window)S +3879(may)S +4082(be)S +4207(saved,)S +4490(there)S +4720(is)S +4819(no)S +4951(facility)S +5266(for)S +5414(sav-)S +3672 V +1260(ing)S +1424(the)S +1582(undisplayed)S +2101(contents)S +2470(of)S +2589(the)S +2747(entire)S +3010(frame)S +3278(bu)S +3378 H + (f)show 10 -.5 mul h (f)show +10 R +3439(er)S +3552(other)S +3792(than)S +3999(to)S +4112(enable)S +4407(the)S +4564(autoscale)S +4970(feature.)S +5306(A)S +5413(lim-)S +3792 V +1260(ited)S +1440(number)S +1775(of)S +1888(formats)S +2223(are)S +2374(currently)S +2764(available,)S +3179(others)S +3453(will)S +3639(be)S +3763(added)S +4031(in)S +4139(future)S +4407(versions.)S +3960 V +10 B +1260(File)S +1451(Name)S +4080 V +10 R +1510(The)S +1695(File)S +1881(Name)S +2149(text)S +2329(box)S +2509(allows)S +2800(you)S +2980(to)S +3088(enter)S +3317(the)S +3469(\256le)S +3627(name)S +3873(of)S +3987(the)S +4140(saved)S +4398(\256le.)S +4582(A)S +4685("%d")S +4931(anywhere)S +5349(in)S +5458(the)S +4200 V +1510(name)S +1770(will)S +1970(be)S +2108(replaced)S +2489(by)S +2632(a)S +2719(sequence)S +3127(number)S +3475(allowing)S +3868(multiple)S +4245(frames)S +4559(to)S +4680(be)S +4817(saved)S +5087(with)S +5308(unique)S +4320 V +1510(names.)S +4488 V +10 B +1260(Format)S +4608 V +10 R +1510(The)S +1704(Format)S +2032(box)S +2221(allows)S +2521(you)S +2710(to)S +2827(choose)S +3143(the)S +3305(format)S +3611(of)S +3734(the)S +3896(image)S +4180(to)S +4298(be)S +4432(created.)S +4784(Not)S +4974(all)S +5114(formats)S +5459(are)S +4728 V +1510(currently)S +1900(implemented.)S +4896 V +10 B +1260(Color)S +5016 V +10 R +1510(The)S +1701(Color)S +1965(box)S +2151(lets)S +2326(you)S +2512(choose)S +2825(the)S +2983(color)S +3224(type)S +3432(of)S +3551(the)S +3709(image)S +3989(to)S +4103(be)S +4233(created.)S +4581(The)S +4773(options)S +5105(will)S +5298(change)S +5136 V +1510(depending)S +1965(on)S +2104(the)S +2265(format,)S +2595(e.g.)S +2778(FITS)S +3023(doesn't)S +3356(allow)S +3617(color)S +3861(so)S +3989(no)S +4127(color)S +4370(options)S +4703(will)S +4897(be)S +5029(allowed.)S +5408(For-)S +5256 V +1510(mats)S +1741(which)S +2027(allow)S +2291(24-bit)S +2572(images)S +2897(will)S +3095(be)S +3231(written)S +3556(using)S +3815(the)S +3979(current)S +4303(colormap)S +4722(after)S +4946(converting)S +5415(to)S +5536(a)S +5376 V +1510(24-bit)S +1779(image,)S +2078(pseudocolor)S +2596(images)S +2909(will)S +3095(be)S +3219(written)S +3532(with)S +3740(the)S +3892(current)S +4204(colormap.)S +5664 V +9 B +900(PRINT)S +1207(PANEL)S +5784 V +10 R +1260(The)S +1449(Print)S +1678(Panel)S +1934(allows)S +2229(you)S +2413(dump)S +2675(the)S +2831(contents)S +3198(of)S +3315(the)S +3471(main)S +3706(display)S +4030(window)S +4387(as)S +4505(Encapsulated)S +5072(Postscript)S +5502(to)S +5904 V +1260(either)S +1526(a)S +1608(named)S +1912(printer)S +2216(device)S +2514(or)S +2635(to)S +2751(a)S +2833(disk)S +3038(\256le.)S +3259(The)S +10 I +3452(Print)S +3696(To)S +10 R +3840(selects)S +4144(the)S +4304(type)S +4514(of)S +4635(output,)S +4954(the)S +10 I +5114(Print)S +5358(Com-)S +6024 V +1260(mand)S +10 R +1513(box)S +1694(will)S +1881(adjust)S +2151(accordingly,)S +2678(either)S +2936(as)S +3050(a)S +3125(Unix)S +3356(printer)S +3653(command)S +4078(or)S +4192(as)S +4306(a)S +4381(\256le)S +4540(name.)S +4842(A)S +4946("%d")S +5193(anywhere)S +6144 V +1260(in)S +1372(the)S +1528(name)S +1778(for)S +1928(disk)S +2129(output)S +2419(will)S +2609(be)S +2737(replaced)S +3108(by)S +3242(a)S +3320(sequence)S +3719(number)S +4058(allowing)S +4442(multiple)S +4810(frames)S +5115(to)S +5226(be)S +5353(saved)S +6264 V +1260(with)S +1469(unique)S +1772(names.)S +2083(Selecting)S +2486(printers)S +2822(from)S +3047(the)S +3200(installed)S +3570(list)S +3724(will)S +3911(automatically)S +4486(change)S +4799(the)S +4952(command)S +5377(to)S +5486(be)S +6384 V +1260(used)S +1474(to)S +1583(generate)S +1951(the)S +2104(output.)S +2416(This)S +2625(command)S +3049(does)S +3262(not)S +3420(necessarily)S +3893(need)S +4111(to)S +4219(be)S +4343(a)S +4417(printer)S +4713(command,)S +5162(the)S +5314(printer)S +6504 V +1260(con\256guration)S +1823(\256le)S +1981(lets)S +2150(you)S +2330(de\256ne)S +2604(any)S +2778(command)S +3202(string)S +3460(to)S +3568(process)S +3897(the)S +4049(image.)S +6792 V +9 B +1080(COLOR)S +1437(OPTIONS)S +6912 V +10 R +1260(The)S +1469(Color)S +1751(box)S +1955(lets)S +2148(you)S +2352(choose)S +2683(the)S +2859(color)S +3118(type)S +3344(of)S +3481(the)S +3657(image)S +3955(to)S +4087(be)S +4235(created.)S +4631(PseudoColor)S +5203(or)S +5341(24-bit)S +7032 V +1260(postscript)S +1679(will)S +1865(be)S +1989(created)S +2306(using)S +2553(the)S +2705(current)S +3017(colormap)S +3424(and)S +3598(enhancements.)S +7680 V +900(X11IRAF Project)S +2709(Last change: 10 Dec 1996)S +5480(15)S +7920 V +EP +%%Page: 16 16 +BP +/slant 0 def +/height 1.000000 def +10 R +10 R +480 V +900(XIMTOOL)S +1376(\()S +1425(1)S +1491(\))S +2787(USER COMMANDS )S +4956(XIMTOOL)S +5432(\()S +5481(1)S +5547(\))S +960 V +9 B +1080(POSTSCRIPT)S +1672(OPTIONS)S +1080 V +10 B +1260(Orientation)S +1200 V +10 R +1510(Set)S +1668(the)S +1820(page)S +2038(orientation.)S +1368 V +10 B +1260(Paper)S +1545(Size)S +1488 V +10 R +1510(Select)S +1784(the)S +1936(paper)S +2187(size)S +2372(to)S +2480(be)S +2604(used.)S +1656 V +10 B +1260(Image)S +1556(Scale)S +1776 V +10 R +1510(Set)S +1677(the)S +1838(scale)S +2076(factor)S +2347(used)S +2569(to)S +2686(compute)S +3069(the)S +3230(\256nal)S +3447(image)S +3730(size.)S +3979(No)S +4140(checking)S +4539(is)S +4645(done)S +4878(to)S +4996(make)S +5252(sure)S +5458(the)S +1896 V +1510(image)S +1784(will)S +1970(\256t)S +2084(correctly)S +2468(on)S +2598(the)S +2750(page.)S +2184 V +9 B +1080(PROCESSING)S +1692(OPTIONS)S +2304 V +10 B +1260(Auto)S +1501(Scale)S +2424 V +10 R +1510(Toggles)S +1865(whether)S +2219(or)S +2335(not)S +2496(the)S +2651(image)S +2928(is)S +3028(automatically)S +3605(scaled)S +3887(to)S +3998(\256t)S +4116(the)S +4272(page.)S +4549(If)S +4649(not)S +4811(enabled,)S +5180(the)S +5336(image)S +2544 V +1510(scale)S +1744(will)S +1935(be)S +2064(used)S +2282(to)S +2395(determine)S +2829(the)S +2986(output)S +3277(image)S +3556(size,)S +3771(otherwise)S +4194(the)S +4351(image)S +4629(will)S +4819(be)S +4947(scaled)S +5230(down)S +5486(\(if)S +2664 V +1510(necessary\))S +1960(to)S +2068(\256t)S +2182(on)S +2312(the)S +2464(page.)S +2832 V +10 B +1260(Auto)S +1501(Rotate)S +2952 V +10 R +1510(Determines)S +2005(whether)S +2361(or)S +2479(not)S +2642(the)S +2800(image)S +3080(will)S +3272(be)S +3402(rotated)S +3715(to)S +3829(\256t)S +3949(on)S +4085(the)S +4243(page.)S +4492(When)S +4766(set,)S +4938(an)S +5068(image)S +5348(larger)S +3072 V +1510(than)S +1717(the)S +1874(current)S +2191(orientation)S +2659(will)S +2850(be)S +2979(rotated)S +3291(and)S +3470(possibly)S +3839(scaled)S +4123(to)S +4236(\256t)S +4355(the)S +4511(page,)S +4758(otherwise)S +5180(the)S +5336(image)S +3192 V +1510(may)S +1712(be)S +1836(scaled)S +2115(so)S +2234(that)S +2414(it)S +2500(\256ts)S +2653(in)S +2761(the)S +2913(current)S +3225(orientation.)S +3360 V +10 B +1260(Max)S +1484(Aspect)S +3480 V +10 R +1510(Automatically)S +2112(increases)S +2507(the)S +2659(scale)S +2888(so)S +3007(the)S +3159(image)S +3433(\256lls)S +3614(the)S +3766(page)S +3984(in)S +4092(the)S +4244(current)S +4556(orientation.)S +3648 V +10 B +1260(Annotate)S +3768 V +10 R +1510(The)S +1696(annotate)S +2065(option)S +2352(toggles)S +2672(whether)S +3024(or)S +3138(not)S +3297(the)S +3450(\256nal)S +3660(\256le)S +3820(includes)S +4185(annotation)S +4639(such)S +4854(as)S +4969(the)S +5123(image)S +5399(title,)S +3888 V +1510(a)S +1584(colorbar,)S +1971(and)S +2145(axis)S +2336(labels.)S +2654(There)S +2916(is)S +3013(currently)S +3403(no)S +3533(option)S +3819(for)S +3965(partial)S +4250(annotation.)S +4176 V +9 B +1080(PRINTER)S +1512(SELECTION)S +4296 V +10 R +1260(The)S +1487(printer)S +1825(selection)S +2252(list)S +2447(lets)S +2658(choose)S +3007(the)S +3201(printer)S +3540(to)S +3691(be)S +3858(used.)S +4139(The)S +4367(printer)S +4706(con\256guration)S +5312(\256le)S +5513(is)S +4416 V +1260(/usr/local/lib/ximprint.cfg)S +2342(by)S +2493(default)S +2821(or)S +2954(may)S +3176(be)S +3320(reset)S +3558(using)S +3825(the)S +10 I +3997(-printCon\256g)S +10 R +4542(command)S +4986(line)S +5186(switch)S +5497(or)S +4536 V +10 I +1260(printCon\256g)S +10 R +1752(resource.)S +2144(The)S +2329(format)S +2625(of)S +2738(the)S +2890(\256le)S +3048(is)S +3145(simply)S +4776 V +10 I +1950(name\\tcommand)S +5016 V +10 R +1260(The)S +10 I +1450(name)S +10 R +1701(value)S +1952(is)S +2054(what)S +2284(appears)S +2624(in)S +2738(the)S +2896(selection)S +3287(list)S +3446(and)S +3626(may)S +3834(be)S +3964(more)S +4205(than)S +4413(a)S +4493(single)S +4768(word,)S +5034(the)S +10 I +5192(command)S +5136 V +10 R +1260(can)S +1432(be)S +1560(any)S +1738(command)S +2166(that)S +2350(accepts)S +2677(EPS)S +2884(input)S +3124(from)S +3352(a)S +3429(pipe,)S +3659(the)S +3814(two)S +3997(\256elds)S +4247(must)S +4475(be)S +4602(separated)S +5011(by)S +5144(a)S +5221(tab)S +5376(char-)S +5256 V +1260(acter.)S +1538(Normally)S +1951(the)S +2103(command)S +2527(will)S +2713(be)S +2837(a)S +2912(simple)S +10 I +3210(lpr)S +3358(-Pfoo)S +10 R +3611(or)S +3725(some)S +3967(such,)S +4206(but)S +4365(can)S +4534(also)S +4726(include)S +5051(converters)S +5497(or)S +5376 V +1260(previewers.)S +1752(At)S +1882(most)S +2107(128)S +2287(printer)S +2583(commands)S +3046(may)S +3248(be)S +3372(used.)S +5664 V +9 B +900(INFO)S +1152(PANEL)S +5784 V +10 R +1260(The)S +1450(information)S +1957(panel)S +2208(is)S +2310(underused)S +2755(at)S +2862(present)S +3185(but)S +3348(is)S +3450(meant)S +3729(to)S +3842(provide)S +4183(basic)S +4424(information)S +4932(about)S +5190(the)S +5348(frame)S +5904 V +1260(being)S +1524(displayed.)S +1974(It)S +2077(is)S +2186(updated)S +2544(to)S +2664(be)S +2800(current)S +3124(while)S +3388(changing)S +3796(enhancements,)S +4428(pan/zoom)S +4864(regions,)S +5224(or)S +5348(frame)S +6024 V +1260(selection.)S +1684(In)S +1811(cases)S +2065(where)S +2352(the)S +2518(image)S +2806(title)S +3006(string)S +3278(is)S +3389(truncated)S +3804(in)S +3926(the)S +4093(main)S +4338(display)S +4672(window,)S +5064(the)S +5231(user)S +5442(can)S +6144 V +1260(always)S +1567(pop)S +1747(up)S +1877(the)S +2029(info)S +2220(window)S +2572(to)S +2680(see)S +2837(the)S +2989(full)S +3158(title.)S +6432 V +9 B +900(TCLSHELL)S +6552 V +10 R +1260(The)S +10 I +1446(TclShell)S +10 R +1805(allows)S +2097(the)S +2250(user)S +2447(to)S +2556(type)S +2759(commands)S +3224(directly)S +3561(to)S +3671(the)S +3825(TCL)S +4046(interpreter,)S +4518(letting)S +4806(you)S +4988(send)S +5203(messages)S +6672 V +1260(to)S +1369(the)S +1522(object)S +1797(manager)S +2171(or)S +2284(execute)S +2618(speci\256c)S +2953(procedures)S +3420(in)S +3528(the)S +3680(TCL)S +3899(code)S +4117(that)S +4297(makes)S +4582(up)S +4712(the)S +4864(GUI.)S +5096(It)S +5187(is)S +5284(used)S +5497(as)S +6792 V +1260(a)S +1338(development)S +1888(or)S +2005(debugging)S +2461(tool)S +2651(for)S +2801(the)S +2957(GUI,)S +3193(but)S +3355(for)S +3505(an)S +3633(example)S +4005(of)S +4122(what)S +4350(it)S +4440(does,)S +4682(bring)S +4927(it)S +5017(up)S +5151(and)S +5329(type)S +5536(a)S +6912 V +1260(command)S +1684(such)S +1897(as)S +7152 V +10 I +1380(send)S +1593(helpButton)S +2062(set)S +2203(background)S +2710(red)S +7680 V +10 R +900(X11IRAF Project)S +2709(Last change: 10 Dec 1996)S +5480(16)S +7920 V +EP +%%Page: 17 17 +BP +/slant 0 def +/height 1.000000 def +10 R +10 R +480 V +900(XIMTOOL)S +1376(\()S +1425(1)S +1491(\))S +2787(USER COMMANDS )S +4956(XIMTOOL)S +5432(\()S +5481(1)S +5547(\))S +960 V +9 B +900(ENVIRONMENT)S +1080 V +10 R +1260(DISPLAY)S +2700(speci\256es)S +3074(which)S +3348(display)S +3667(terminal)S +4030(to)S +4138(use)S +1200 V +1260(IMTOOLRC)S +2700(frame)S +2962(bu)S +3062 H + (f)show 10 -.5 mul h (f)show +10 R +3123(er)S +3230(con\256guration)S +3793(\256le)S +1320 V +1260(imtoolrc)S +2700(frame)S +2962(bu)S +3062 H + (f)show 10 -.5 mul h (f)show +10 R +3123(er)S +3230(con\256guration)S +3793(\256le)S +3951(\(alternative\))S +1608 V +9 B +900(FILES)S +1728 V +10 R +1260(/usr/local/lib/imtoolrc)S +2700(default)S +3007(frame)S +3269(bu)S +3369 H + (f)show 10 -.5 mul h (f)show +10 R +3430(er)S +3537(con\256guration)S +4100(\256le)S +1848 V +1260(/usr/local/lib/ximprint.cfg)S +2700(default)S +3007(printer)S +3303(con\256guration)S +3866(\256le)S +1968 V +1260(/usr/local/lib/imtoolcmap)S +2700(default)S +3007(colormap)S +3414(directory)S +2088 V +1260(/dev/imt1i)S +2700(default)S +3007(input)S +3243(\256fo)S +2208 V +1260(/dev/imt1o)S +2700(default)S +3007(output)S +3293(\256fo)S +2328 V +1260(/tmp/.IMT%d)S +2700(default)S +3007(unix)S +3215(socket)S +2616 V +9 B +900(BUGS)S +2736 V +900(SEE)S +1112(ALSO)S +2856 V +10 R +1260(xgterm\(1\),)S +1714(xtapemon\(1\))S +3144 V +9 B +900(COPYRIGHT)S +3264 V +10 R +1260(Copyright\(c\))S +1806(1986)S +2036(Association)S +2538(of)S +2651(Universities)S +3164(for)S +3310(Research)S +3705(in)S +3813(Astronomy)S +4293(Inc.)S +7680 V +900(X11IRAF Project)S +2709(Last change: 10 Dec 1996)S +5480(17)S +7920 V +EP +%%Trailer +%%DocumentFonts: Times-Roman Times-Bold Times-Italic Symbol +%%Pages: 17 + \ No newline at end of file diff --git a/vendor/x11iraf/ximtool/TODO b/vendor/x11iraf/ximtool/TODO new file mode 100644 index 00000000..cccda8ee --- /dev/null +++ b/vendor/x11iraf/ximtool/TODO @@ -0,0 +1,241 @@ + TODO -- XIMTOOL -- TODO + +============================================================================== +V1.3 TODO List + + - Revise installation script + - CDL needs the new WCS mappings + - Update documentation + - online help + - document ISM protocol + - loading image standalone + - WCS/Info shows incorrect dest rect dnx/dny + - switching images seems to hang ISM + - MEF support in ISM + +============================================================================== + + +============================================================================== +- Translations should use #augment so users can add translations easily +- Gui box to edit/create/save LUTs +- snap to equal aspect +- Need a way to rotate an image by +/- 90 deg +- Create a new frame when running in standalone +- Convert private colormap-to-grayscale option + + +============================================================================== + + +Tue Oct 18 13:11:36 MST 1994 + + o Cache a more useful default imtoolrc internally, providing more than + just the 512sq frame buffer. + + +============================================================================== +OLD NOTES BELOW +============================================================================== + +Miscellaneous +------------------------------ + + o Add cursor marking feature - each cursor read leaves a mark in + the frame buffer. + + +Wed May 11 12:13:31 MST 1994 +------------------------------ + +Thoughts on priorities for next few changes: + + o Revise menubar. New menus, improve font. + + o Add toggle button to map/unmap control panel. + + o Support for command line options. + + o Should be a way to have some system wide resource overrides without + losing all the builtin fallback resources. + + o Print dialog. Add Quit confirm popup if print is enabled, so that + an accidental menu selection doesn't terminate program. + + o Revise info box. Separate version and configuration information + from output text area. Add "messages" line for informational + messages generated during execution. + + o Add command entry dialog, for entering GUI commands. + + o Add actions for common ximtool operations (frame select, zoom, pan, + window, print, etc.) so that users can bind keys to these functions. + Note that this can already be done using "call". + + o Help feature. + + +Print dialog + Print command: lpr -Plw %s + Options: + Type of output: postscript, EPS, sunraster + Enhancement: color or grayscale + Annotation: none, wysiwyg, manufacture + Compression: enabled, disabled + Buttons: + Print, Dismiss, Help + + +Info Box + Types of information displayed + Program version and origin + GUI being run + Title of current frame + Message and status display + Program state + frame buffer configuration, number of frames, frame size + window size, mapping from frame to window + active ports + number and type of client connections + number of defined colortables, current colortable + memory model + base pixel, ncolors + imtoolrc file - defined fb configurations + Text output (markers etc.) + + +Command Entry + command entry text widget + accumulate text until complete command is entered; handle + backslash and curly brace continuation before returning + command string. callback occurs when return is hit and + complete command has been entered. + command entry + enter command and hit return to execute + hitting return after executing command, with no changes, + clears command buffer + use arrow keys to move up and down in history list + command output + scrolled text + debug output + output of print, OBMDEBUG, etc. + scrolled text, append + controls + set debug level + clear output + done + + Support required: + new "command mode" callback for text widget + when appending text to text widget, should be able to specify + maximum size of saved text, with automatic truncation + OBM - modifications to optionally direct output of print, + debug, and error mesages to callbacks + OBM - need to be able to set debug level from GUI + + +Menus + File Menu + Info + Load + Save + Print + Execute + ----- + Reset + Quit + + View Menu + Next frame Colortable + Prev frame Normalize + ----- Invert + Colortable Optimize + Flip ----- + ----- Colormaps + Equal aspect Flip + Integer zoom X + Toggle zoom Y + Unzoom XY + + Options Menu + Autoscale + Antialias + Panner + Coords box + Match LUTs + Register + Blink frames + Clear frame + Tile frames + Fit frame + Control panel + + +Mon Apr 4 18:20:50 MST 1994 +------------------------------ + +1. Colormap enhancements + +[DONE] Allow arbitrary base pixel, number of gray levels; client + colortable still has 200 entries, but if there is insufficient + space some of them may map to the same screen pixel. + +[DONE] Option to force private colormap to be re-installed in server. + +[DONE] Figure out why colormap gets messed up when passing through + colorbar window. + +[DONE] Optimize update_default_colormap code, which currently uses an + inefficient technique to invert the colormap when updating the + default colormap. + + o Optional support for default colormap (should this be the default?) + + o Add option to automatically invert colormap when initializing. + + +2. Required Features + +[DONE] Implement tile frames option. + +[DONE] Fix fitframe function. + +[DONE] Add socket i/o option. + +[DONE] Add support for simultaneous connections to multiple clients, + maintaining the state separately for each (i.e. reference frame, + i/o streams, etc.). + + o Add main window button to bring up control panel. + + o Revise main window menubar. + + o Check out memoryModel options. + + o Add online help. + + +3. Add When Time Permits + + o "snap-to equal aspect" feature for panner window. + + o Implement Optimize enhancement feature. + + o Print dialog. + + o File load/save functions. + + +4. Other + + o Update manual page. Program options, client-server protocol. + + +5. Optional Features + + o Magnifier option. + + o Split screen. + + o Porthole option (view into alternate frame). + diff --git a/vendor/x11iraf/ximtool/clients.old/.DONE b/vendor/x11iraf/ximtool/clients.old/.DONE new file mode 100644 index 00000000..e69de29b diff --git a/vendor/x11iraf/ximtool/clients.old/DONE b/vendor/x11iraf/ximtool/clients.old/DONE new file mode 100644 index 00000000..e69de29b diff --git a/vendor/x11iraf/ximtool/clients.old/Imakefile b/vendor/x11iraf/ximtool/clients.old/Imakefile new file mode 100644 index 00000000..3ab5b034 --- /dev/null +++ b/vendor/x11iraf/ximtool/clients.old/Imakefile @@ -0,0 +1,32 @@ +XCOMM Imakefile for the Image Support Module components. + +X11IRAFDIR = ../../ +#include <../../X11IRAF.tmpl> + + WC_SRCS = wcspix/t_wcspix.x wcspix/wcimage.x wcspix/wcmef.x \ + wcspix/wcmspec.x wcspix/wcspix.h + LIB_SRCS = lib/dspmmap.x lib/reopen.x lib/ximtool.x + + +all:: ism_wcspix.e + +ism_wcspix.e: $(WC_SRCS) $(LIB_SRCS) + mkpkg relink + touch DONE + +SubdirLibraryRule($(WC_SRCS) $(LIB_SRCS)) + +clean:: + $(RM) *.[aeo] + touch DONE + +includes:: + +#if InstallBinaries +install:: ism_wcspix.e + -@if [ -d X11irafBinDir ]; then set +x; \ + else (set -x; $(MKDIRHIER) X11irafBinDir); fi + mv ism_wcspix.e X11irafBinDir +#endif + +DependTarget() diff --git a/vendor/x11iraf/ximtool/clients.old/README b/vendor/x11iraf/ximtool/clients.old/README new file mode 100644 index 00000000..e69de29b diff --git a/vendor/x11iraf/ximtool/clients.old/_spplint b/vendor/x11iraf/ximtool/clients.old/_spplint new file mode 100644 index 00000000..28486ee8 --- /dev/null +++ b/vendor/x11iraf/ximtool/clients.old/_spplint @@ -0,0 +1,489 @@ +/u2/fitz/iraf/ximtool/clients/x_ism.x + sys_runtask: +/u2/fitz/iraf/ximtool/clients/wcspix/t_wcspix.x + t_wcspix: + wp_initialize: + wp_cache: + wp_uncache: + wp_wcstran: + wp_wcslist: + wp_objinfo: + wp_setpar: + wp_getpar: + wp_init: + wp_shutdown: + wp_class: + wp_id2obj: + wp_class_init: + wp_load_class: + wcspix_message: + wp_cnvdate: + dbg_printcache: +/u2/fitz/iraf/ximtool/clients/wcspix/wcimage.x + img_init: + img_cache: + img_uncache: + img_wcstran: + img_wcslist: + img_get_data: + img_objinfo: + img_send_header: + img_send_compass: + img_send_wcsinfo: + img_send_pixtab: + img_amp_wcs: + img_det_wcs: + img_coord_labels: + img_coord_fmt: + img_get_coord: +/u2/fitz/iraf/ximtool/clients/wcspix/wcmef.x + mef_init: + mef_cache: + mef_uncache: + mef_wcstran: + mef_wcslist: + mef_objinfo: +/u2/fitz/iraf/ximtool/clients/wcspix/wcmspec.x + msp_init: + msp_cache: + msp_uncache: + msp_wcstran: + msp_wcslist: + msp_objinfo: +/u2/fitz/iraf/ximtool/clients/wcspix/wcunknown.x + unk_init: + unk_cache: + unk_uncache: + unk_wcstran: + unk_wcslist: + unk_getdata: + unk_objinfo: +/u2/fitz/iraf/ximtool/clients/lib/dspmmap.x + ds_pmmap: + ds_pmimmap: + ds_match: +/u2/fitz/iraf/ximtool/clients/lib/reopen.x + reopen: +/u2/fitz/iraf/ximtool/clients/lib/skywcs/skdecode.x + sk_decwcs: + sk_decwstr: + sk_decim: + sk_strwcs: + sk_imwcs: + sk_enwcs: + sk_copy: + sk_close: +/u2/fitz/iraf/ximtool/clients/lib/skywcs/sksaveim.x + sk_saveim: + sk_ctypeim: +/u2/fitz/iraf/ximtool/clients/lib/skywcs/skset.x + sk_setd: + sk_seti: + sk_sets: +/u2/fitz/iraf/ximtool/clients/lib/skywcs/skstat.x + sk_statd: + sk_stati: + sk_stats: +/u2/fitz/iraf/ximtool/clients/lib/skywcs/sktransform.x + sk_ultran: + sk_lltran: + sk_equatorial: +/u2/fitz/iraf/ximtool/clients/lib/skywcs/skwrdstr.x + sk_wrdstr: +/u2/fitz/iraf/ximtool/clients/lib/skywcs/skwrite.x + sk_iiprint: + sk_iiwrite: + sk_inprint: + sk_inwrite: + sk_imprint: + sk_imwrite: +/u2/fitz/iraf/ximtool/clients/lib/ximtool.x + xim_connect: + xim_disconnect: + xim_message: + xim_alert: + xim_write: + xim_read: + xim_intrhandler: + xim_zxwhen: + xim_onerror: +/u2/fitz/iraf/ximtool/clients/lib/idxstr.x + idxstr: +/u2/fitz/iraf/ximtool/clients/lib/wcsgfterm.x + wcs_gfterm: +Making function prototype file..... +FTN.f: + dspmmp: + dspmip: + dsmath: +Warning on line 279 of FTN.f: inconsistent calling sequences for mwctrd: + here 4, previously 3 args and string lengths. + idxstr: + reopen: + skdecs: + skdecr: + skdecm: + skstrs: + skimws: + skenws: + skcopy: + skcloe: + sksavm: + skctym: + sksetd: + skseti: + sksets: + skstad: + skstai: + skstas: + skultn: + sklltn: + skequl: + skwrdr: + skiipt: + skiiwe: + skinpt: + skinwe: + skimpt: + skimwe: + twcspx: + wpinie: + wpcace: + wpunce: + wpwcsn: +Warning on line 4823 of FTN.f: inconsistent calling sequences for zcall4, + arg 4: here real variable, previously integer variable. + wpwcst: + wpobjo: + wpsetr: + wpgetr: + wpinit: + wpshun: + wpclas: + wpid2j: + wpclat: + wploas: + wcspie: + wpcnve: + dbgpre: + imgint: + imgcae: + imgune: + imgwcn: + imgwct: + imggea: + imgobo: + imgser: + imgses: + imgseo: + imgseb: + imgams: + imgdes: + imgcos: + imgcot: + imgged: + mefint: + mefcae: + mefune: + mefwcn: + mefwct: + mefobo: + mspint: + mspcae: + mspune: + mspwcn: + mspwct: + mspobo: + wcsgfm: + unkint: + unkcae: + unkune: + unkwcn: + unkwct: + unkgea: + unkobo: + sysruk: + ximcot: + ximdit: + ximmee: + ximalt: + ximwre: + ximred: + ximinr: + ximzxn: + ximonr: +Warning on line 8474 of FTN.f: inconsistent calling sequences for ximalt, + arg 2: here integer variable, previously integer*2 variable. +Rerunning "f2c -P ... FTN.f FTN.P" may change prototypes or declarations. +Converting fortran source file..... +First pass.... +FTN.f: + dspmmp: + dspmip: + dsmath: +Warning on line 264 of FTN.f: inconsistent calling sequences for mwctrd: + here 3, previously 4 args and string lengths. + idxstr: + reopen: + skdecs: + skdecr: + skdecm: + skstrs: + skimws: + skenws: + skcopy: + skcloe: + sksavm: + skctym: + sksetd: + skseti: + sksets: + skstad: + skstai: + skstas: + skultn: + sklltn: + skequl: + skwrdr: + skiipt: + skiiwe: + skinpt: + skinwe: + skimpt: + skimwe: + twcspx: + wpinie: + wpcace: + wpunce: + wpwcsn: +Warning on line 4823 of FTN.f: inconsistent calling sequences for zcall4, + arg 4: here real variable, previously integer variable. + wpwcst: + wpobjo: + wpsetr: + wpgetr: + wpinit: + wpshun: + wpclas: + wpid2j: + wpclat: + wploas: + wcspie: + wpcnve: + dbgpre: + imgint: + imgcae: + imgune: + imgwcn: + imgwct: + imggea: + imgobo: + imgser: + imgses: + imgseo: + imgseb: + imgams: + imgdes: + imgcos: + imgcot: + imgged: + mefint: + mefcae: + mefune: + mefwcn: + mefwct: + mefobo: + mspint: + mspcae: + mspune: + mspwcn: + mspwct: + mspobo: + wcsgfm: + unkint: + unkcae: + unkune: + unkwcn: + unkwct: + unkgea: + unkobo: + sysruk: + ximcot: + ximdit: + ximmee: + ximalt: + ximwre: + ximred: + ximinr: + ximzxn: + ximonr: +Warning on line 8474 of FTN.f: inconsistent calling sequences for ximalt, + arg 2: here integer variable, previously integer*2 variable. +Second pass.... +dspmmap.f: + dspmmp: + dspmip: + dsmath: +Warning on line 264 of dspmmap.f: inconsistent calling sequences for mwctrd: + here 3, previously 4 args and string lengths. +idxstr.f: + idxstr: +reopen.f: + reopen: +skdecode.f: + skdecs: + skdecr: + skdecm: + skstrs: + skimws: + skenws: + skcopy: + skcloe: +sksaveim.f: + sksavm: + skctym: +skset.f: + sksetd: + skseti: + sksets: +skstat.f: + skstad: + skstai: + skstas: +sktransform.f: + skultn: + sklltn: + skequl: +skwrdstr.f: + skwrdr: +skwrite.f: + skiipt: + skiiwe: + skinpt: + skinwe: + skimpt: + skimwe: +t_wcspix.f: + twcspx: + wpinie: + wpcace: + wpunce: + wpwcsn: +Warning on line 414 of t_wcspix.f: inconsistent calling sequences for zcall4, + arg 4: here real variable, previously integer variable. + wpwcst: + wpobjo: + wpsetr: + wpgetr: + wpinit: + wpshun: + wpclas: + wpid2j: + wpclat: + wploas: + wcspie: + wpcnve: + dbgpre: +wcimage.f: + imgint: + imgcae: + imgune: + imgwcn: + imgwct: + imggea: + imgobo: + imgser: + imgses: + imgseo: + imgseb: + imgams: + imgdes: + imgcos: + imgcot: + imgged: +wcmef.f: + mefint: + mefcae: + mefune: + mefwcn: + mefwct: + mefobo: +wcmspec.f: + mspint: + mspcae: + mspune: + mspwcn: + mspwct: + mspobo: +wcsgfterm.f: + wcsgfm: +wcunknown.f: + unkint: + unkcae: + unkune: + unkwcn: + unkwct: + unkgea: + unkobo: +x_ism.f: + sysruk: +ximtool.f: + ximcot: + ximdit: + ximmee: + ximalt: + ximwre: + ximred: + ximinr: + ximzxn: + ximonr: +Warning on line 482 of ximtool.f: inconsistent calling sequences for ximalt, + arg 2: here integer variable, previously integer*2 variable. +Running LINT on converted C source.... +dspmmap.c: +dspmmap.c(152): warning: argument refim unused in function dspmip_ +idxstr.c: +reopen.c: +skdecode.c: +sksaveim.c: +skset.c: +skstat.c: +sktransform.c: +skwrdstr.c: +skwrite.c: +t_wcspix.c: +t_wcspix.c(830): warning: argument wp unused in function wpgetr_ +wcimage.c: +wcimage.c(257): warning: argument id unused in function imgune_ +wcimage.c(380): warning: im set but not used in function imgwcn_ +wcimage.c(430): warning: argument id unused in function imgwct_ +wcimage.c(470): warning: im set but not used in function imgwct_ +wcimage.c(510): warning: argument id unused in function imggea_ +wcimage.c(609): warning: argument id unused in function imgobo_ +wcimage.c(899): warning: co set but not used in function imgses_ +wcmef.c: +wcmspec.c: +wcsgfterm.c: +wcsgfterm.c(122): warning: errcoe set but not used in function wcsgfm_ +wcunknown.c: +wcunknown.c(108): warning: argument id unused in function unkune_ +wcunknown.c(173): warning: wp set but not used in function unkwcn_ +wcunknown.c(144): warning: argument id unused in function unkwcn_ +wcunknown.c(208): warning: argument cp unused in function unkwct_ +wcunknown.c(208): warning: argument id unused in function unkwct_ +wcunknown.c(234): warning: argument id unused in function unkgea_ +wcunknown.c(284): warning: argument id unused in function unkobo_ +x_ism.c: +ximtool.c: +ximtool.c(573): warning: argument nexthr unused in function ximzxn_ +ximtool.c(603): warning: code set but not used in function ximonr_ +Lint pass2: +mwctrd_: variable # of args. dspmmap.c(362) :: dspmmap.c(395) +zcall4_, arg. 4 used inconsistently t_wcspix.c(441) :: t_wcspix.c(525) +zcall4_, arg. 5 used inconsistently t_wcspix.c(441) :: t_wcspix.c(525) +ximalt_, arg. 2 used inconsistently ximtool.c(295) :: ximtool.c(607) +ximalt_, arg. 3 used inconsistently ximtool.c(295) :: ximtool.c(607) +Saving output.... +Cleaning up.... +/bin/rm: No match. +Done. diff --git a/vendor/x11iraf/ximtool/clients.old/doc/Notes b/vendor/x11iraf/ximtool/clients.old/doc/Notes new file mode 100644 index 00000000..da021306 --- /dev/null +++ b/vendor/x11iraf/ximtool/clients.old/doc/Notes @@ -0,0 +1,199 @@ + + +define MAX_WCSLINES 4 + +define SZ_WPIX 6 +define WP_CPTR Memi[$1 ] # cache pointer +define WP_PTABSZ Memi[$1+1] # pixel table size +define WP_SYSTEMS Memi[$1+2] # WCS readout systems +define WP_FORMATS Memi[$1+3] # WCS readout formats + +define SYSTEMS Memi[WP_SYSTEMS($1)+$2-1] # WCS systems per line +define FORMATS Memi[WP_FORMATS($1)+$2-1] # WCS formats per line +define OBJCACHE Memi[WP_CPTR($1)+$2] # object cache + +# Element of an object cache. +define SZ_CNODE 135 # size of a cache node +define SZ_OBJREF 128 # size of a object reference + +define C_OBJID Memi[$1] # object id +define C_REGID Memi[$1+1] # region id +define C_CLASS Memi[$1+2] # object class +define C_DATA Memi[$1+3] # object data ptr +define C_REF Memc[P2C($1+4)] # object reference file + +# Object class definitions. +define IMAGE_CLASS 1 # generic image class +define MEF_CLASS 2 # Mosaic MEF image class +define MULTISPEC_CLASS 3 # multispec data class + +# Class methods. +define LEN_CL 6 # length of class table +define MAX_CL 6 # max supported classes +define SZ_CLNAME 16 # size of a class name + +define CL_INIT cl_table[1,$1] # class initializer +define CL_CACHE cl_table[2,$1] # cache the object +define CL_UNCACHE cl_table[3,$1] # uncache the object +define CL_WCSTRAN cl_table[4,$1] # WCS tranformations +define CL_WCSLIST cl_table[5,$1] # list available WCS +define CL_GETDATA cl_table[6,$1] # get object data +define CL_NAME cl_names[1,$1] # class name + +# Class common. +int cl_nclasses # number of defined functions +int cl_table[LEN_CL,MAX_CL] # class table +char cl_names[SZ_CLNAME,MAX_CL] # class names +common /class_com/ cl_nclasses, cl_table, cl_names + + +# Image class data. +define O_IM Memi[$1+2] # image pointer +define O_MW Memi[$1+3] # image wcs pointer +define O_CO Memi[$1+3] # skywcs transform pointer +define O_CT Memi[$1+4] # mwcs transform pointer +define O_ROT Memr[$1+5] # rotation angle +define O_SCALE Memr[$1+6] # plate scale + + + +-------------------------------------------------------------------------------- +ISM Methods: +-------------------------------------------------------------------------------- + + initialize + cache + uncache + wcstran [[ ] ["NDC" ]] + wcslist + getheader + + +procedure initialize +begin + for (each object in the cache) + uncache object + send startup req to GUI +end + +procedure cache +begin +end + +procedure uncache +begin +end + +procedure wcstran +begin +end + +procedure wcslist +begin +end + +procedure getheader +begin +end + + +-------------------------------------------------------------------------------- +GUI Callbacks +-------------------------------------------------------------------------------- + +proc ism_msg { param old new } { + + set target [lindex $new 0] ;# name of ism module + + switch [lindex $new 0] { + source { source [lindex $new 1] } ;# source Tcl code + alert { Wexec client [lindex $new 1] } ;# alert from ism client + + deliver { set ism [lindex $new 0] ;# determine ISM name + set argv [lrange $new 1 end] ;# get args + set argc [llength $argv] + ${ism}_msg $argc $argv ;# call module + } + } +} ; send ism_msg addCallback ism_msg + + +proc wpix_msg { argc argv } { + + switch [lindex $argv 0] { + startup { wpix_startup } + shutdown { wpix_shutdown } + cache { .... save image name to GUI cache list + } + uncache { .... remove image name from GUI cache list + } + wcstran { .... parse argv for WCS field and update display + } + pixtab { + } + wcslist { + } + wcstype { set type [lindex $argv 1] ;# Set WCS for a line + set line [lindex $argv 2] + send sysWcs$line set label $type + if {$type == "None"} { + send wpWcs$line set on False + } else { + send wpWcs$line set on True + } + setCoordPanelHeight + } + wcsfmt { set fmt [lindex $argv 1] ;# Set fmt for a line + set line [lindex $argv 2] + send fmtWcs$line set label $fmt + } + header { set type [lindex $argv 1] ;# write header text + set text [lindex $argv 2] + switch $type { + imghdr {send hdrText append $text} + wcshdr {send hdrKGText append $text} + wcsinfo {send hdrIGText append $text} + } + } + } ;# end switch +} + +proc wpix_startup args { + global ismEnabled frameCache + + set ismEnabled 1 ;# initialize buttons + send ismToggle set on True + send imageHeader setSensitive True + setCoordPanelSensitivity + + resizeCoordsBox $up_todo ;# resize wcsbox marker + updateCoordsBox + + foreach c [array names frameCache] { ;# initialize local frame cache + if {$c != "0"} { unset frameCache($c) } + } + + catch { ;# update ISM with GUI settings + send wpix set psize $psize + set wcsfmt [string tolower [send wcsFmtMenu get label]] + send wpix set wcsfmt $wcsfmt + if {[send wcsSysAltWCS get on]} { + setAltSystem + } + } +} + +proc wpix_shutdown args { + global ismEnabled + + set ismEnabled 0 + send ismToggle set on False + send imageHeader setSensitive False + setCoordPanelSensitivity + wcsFmtIValue "" + wcsFmtImWCS "" "" "" + wcsFmtAltWCS "" "" "" + resizeCoordsBox 0 +} + + diff --git a/vendor/x11iraf/ximtool/clients.old/doc/README b/vendor/x11iraf/ximtool/clients.old/doc/README new file mode 100644 index 00000000..e69de29b diff --git a/vendor/x11iraf/ximtool/clients.old/lib/README b/vendor/x11iraf/ximtool/clients.old/lib/README new file mode 100644 index 00000000..e69de29b diff --git a/vendor/x11iraf/ximtool/clients.old/lib/dspmmap.f b/vendor/x11iraf/ximtool/clients.old/lib/dspmmap.f new file mode 100644 index 00000000..3542286f --- /dev/null +++ b/vendor/x11iraf/ximtool/clients.old/lib/dspmmap.f @@ -0,0 +1,356 @@ + integer function dspmmp (pmname, refim) + logical Memb(1) + integer*2 Memc(1) + integer*2 Mems(1) + integer Memi(1) + integer*4 Meml(1) + real Memr(1) + double precision Memd(1) + complex Memx(1) + equivalence (Memb, Memc, Mems, Memi, Meml, Memr, Memd, Memx) + common /Mem/ Memd + integer refim + integer*2 pmname(*) + integer im + integer*2 fname(255 +1) + integer nowhie + integer errcoe + logical streq + integer impmmp + integer dspmip + logical xerpop + logical xerflg + common /xercom/ xerflg + integer sw0001 + integer*2 st0001(6) + integer*2 st0002(4) + integer*2 st0003(4) + save + data st0001 / 69, 77, 80, 84, 89, 0/ + data st0002 / 66, 80, 77, 0/ + data st0003 / 66, 80, 77, 0/ + if (.not.(nowhie (pmname, fname, 255 ) .eq. 0)) goto 110 + dspmmp = (0) + goto 100 +110 continue + if (.not.(streq (fname, st0001))) goto 120 + dspmmp = (0) + goto 100 +120 continue + if (.not.(fname(1) .eq. 33)) goto 130 + call xerpsh + call imgstr (refim, fname(2), fname, 255 ) + if (.not.xerpop()) goto 140 + fname(1) = 0 +140 continue + goto 131 +130 continue + if (.not.(streq (fname, st0002))) goto 150 + call xerpsh + call imgstr (refim, st0003, fname, 255 ) + if (.not.xerpop()) goto 160 + dspmmp = (0) + goto 100 +160 continue +150 continue +131 continue + call xerpsh + im = impmmp (fname, 1 , 0) + if (.not.xerpop()) goto 170 + sw0001=(errcoe()) + goto 180 +190 continue + im = dspmip (fname, refim) + if (xerflg) goto 100 + goto 181 +200 continue + call erract (2 ) + if (xerflg) goto 100 + goto 181 +180 continue + if (sw0001.eq.743) goto 190 + if (sw0001.eq.921) goto 190 + goto 200 +181 continue +170 continue + call xerpsh + call dsmath (im, refim) + if (.not.xerpop()) goto 210 + call erract (3 ) + if (xerflg) goto 100 +210 continue + dspmmp = (im) + goto 100 +100 return + end + integer function dspmip (pmname, refim) + logical Memb(1) + integer*2 Memc(1) + integer*2 Mems(1) + integer Memi(1) + integer*4 Meml(1) + real Memr(1) + double precision Memd(1) + complex Memx(1) + equivalence (Memb, Memc, Mems, Memi, Meml, Memr, Memd, Memx) + common /Mem/ Memd + integer refim + integer*2 pmname(*) + integer i + integer ndim + integer npix + integer val + integer sp + integer v1 + integer v2 + integer imin + integer imout + integer pm + integer mw + integer data + integer imgnli + integer immap + integer pmnewk + integer impmmo + integer imgl1i + integer mwopem + logical xerflg + common /xercom/ xerflg + save + call smark (sp) + call salloc (v1, 7 , 5) + call salloc (v2, 7 , 5) + call amovkl (int(1), meml(v1), 7 ) + call amovkl (int(1), meml(v2), 7 ) + imin = immap (pmname, 1 , 0) + if (xerflg) goto 100 + pm = pmnewk (imin, 27) + ndim = memi(imin+200 +7) + npix = meml(imin+200 +1+8-1) +110 if (.not.(imgnli (imin, data, meml(v1)) .ne. -2)) goto 111 + do 120 i = 0, npix-1 + val = memi(data+i) + if (.not.(val .lt. 0)) goto 130 + memi(data+i) = 0 +130 continue +120 continue +121 continue + call pmplpi (pm, meml(v2), memi(data), 0, npix, 12 ) + call amovl (meml(v1), meml(v2), ndim) + goto 110 +111 continue + imout = impmmo (pm, imin) + data = imgl1i (imout) + mw = mwopem (imin) + if (xerflg) goto 100 + call mwsavm (mw, imout) + call mwcloe (mw) + call imunmp (imin) + call sfree (sp) + dspmip = (imout) + goto 100 +100 return + end + subroutine dsmath (im, refim) + logical Memb(1) + integer*2 Memc(1) + integer*2 Mems(1) + integer Memi(1) + integer*4 Meml(1) + real Memr(1) + double precision Memd(1) + complex Memx(1) + equivalence (Memb, Memc, Mems, Memi, Meml, Memr, Memd, Memx) + common /Mem/ Memd + integer im + integer refim + integer i + integer j + integer k + integer l + integer i1 + integer i2 + integer j1 + integer j2 + integer nc + integer nl + integer ncpm + integer nlpm + integer nx + integer val + double precision x1 + double precision x2 + double precision y1 + double precision y2 + double precision lt(6) + double precision lt1(6) + double precision lt2(6) + integer*4 vold(7 ) + integer*4 vnew(7 ) + integer pm + integer pmnew + integer imnew + integer mw + integer ctx + integer cty + integer bufref + integer bufpm + integer imstai + integer plopen + integer mwopem + integer impmmo + integer imgl1i + integer mwsctn + logical pmempy + logical pmliny + logical xerflg + common /xercom/ xerflg + integer*2 st0001(40) + integer*2 st0002(8) + integer*2 st0003(9) + integer*2 st0004(8) + integer*2 st0005(9) + save + integer iyy + data (st0001(iyy),iyy= 1, 8) / 73,109, 97,103,101, 32, 97,110/ + data (st0001(iyy),iyy= 9,16) /100, 32,109, 97,115,107, 32,104/ + data (st0001(iyy),iyy=17,24) / 97,118,101, 32, 97, 32,114,101/ + data (st0001(iyy),iyy=25,32) /108, 97,116,105,118,101, 32,114/ + data (st0001(iyy),iyy=33,40) /111,116, 97,116,105,111,110, 0/ + data st0002 /108,111,103,105, 99, 97,108, 0/ + data (st0003(iyy),iyy= 1, 8) /112,104,121,115,105, 99, 97,108/ + data (st0003(iyy),iyy= 9, 9) / 0/ + data st0004 /108,111,103,105, 99, 97,108, 0/ + data (st0005(iyy),iyy= 1, 8) /112,104,121,115,105, 99, 97,108/ + data (st0005(iyy),iyy= 9, 9) / 0/ + if (.not.(im .eq. 0)) goto 110 + goto 100 +110 continue + nc = meml(refim+200 +1+8-1) + nl = meml(refim+200 +2+8-1) + ncpm = meml(im+200 +1+8-1) + nlpm = meml(im+200 +2+8-1) + pm = imstai (im, 16 ) + if (.not.(pmempy(pm) .and. nc .eq. ncpm .and. nl .eq. nlpm)) + * goto 120 + goto 100 +120 continue + mw = mwopem (im) + if (xerflg) goto 100 + call mwgltd (mw, lt, lt(5), 2) + call mwcloe (mw) + mw = mwopem (refim) + if (xerflg) goto 100 + call mwgltd (mw, lt2, lt2(5), 2) + call mwcloe (mw) + call mwinvd (lt, lt1, 2) + call mwmmud (lt1, lt2, lt, 2) + call mwvmud (lt, lt(5), lt(5), 2) + lt(5) = lt2(5) - lt(5) + lt(6) = lt2(6) - lt(6) + do 130 i = 1, 6 + lt(i) = nint (1d6 * (lt(i)-int(lt(i)))) / 1d6 + int(lt(i)) +130 continue +131 continue + if (.not.(lt(2) .ne. 0. .or. lt(3) .ne. 0.)) goto 140 + call xerror(1, st0001) + if (xerflg) goto 100 +140 continue + if (.not.(lt(1) .eq. 1d0 .and. lt(4) .eq. 1d0 .and. lt(5) .eq. + * 0d0 .and. lt(6) .eq. 0d0)) goto 150 + goto 100 +150 continue + mw = mwopem (im) + if (xerflg) goto 100 + call mwsltd (mw, lt, lt(5), 2) + ctx = mwsctn (mw, st0002, st0003, 1) + cty = mwsctn (mw, st0004, st0005, 2) + pmnew = plopen(0) + if (xerflg) goto 100 + call plssie(pmnew, 2, meml(refim+200 +1+8-1) , 27) + imnew = impmmo (pmnew, 0) + bufref = imgl1i (imnew) + call mwctrd (ctx, 1-0.5d0, x1, 1) + call mwctrd (ctx, nc+0.5d0, x2, 1) + i1 = max (1, nint(min(x1,x2)+1d-5)) + i2 = min (ncpm, nint(max(x1,x2)-1d-5)) + call mwctrd (cty, 1-0.5d0, y1, 1) + call mwctrd (cty, nl+0.5d0, y2, 1) + j1 = max (1, nint(min(y1,y2)+1d-5)) + j2 = min (nlpm, nint(max(y1,y2)-1d-5)) + if (.not.(i1 .le. i2 .and. j1 .le. j2)) goto 160 + nx = i2 - i1 + 1 + call xmallc(bufpm, nx, 4) + call xmallc(bufref, nc, 4) + vold(1) = i1 + vnew(1) = 1 + do 170 j = 1, nl + call mwctrd (cty, j-0.5d0, y1, 1) + call mwctrd (cty, j+0.5d0, y2, 1) + j1 = max (1, nint(min(y1,y2)+1d-5)) + j2 = min (nlpm, nint(max(y1,y2)-1d-5)) + if (.not.(j2 .lt. j1)) goto 180 + goto 170 +180 continue + vnew(2) = j + call aclri (memi(bufref), nc) + do 190 l = j1, j2 + vold(2) = l + if (.not.(.not.pmliny (pm, vold))) goto 200 + goto 190 +200 continue + call pmglpi (pm, vold, memi(bufpm), 0, nx, 0) + do 210 i = 1, nc + call mwctrd (ctx, i-0.5d0, x1, 1) + call mwctrd (ctx, i+0.5d0, x2, 1) + i1 = max (1, nint(min(x1,x2)+1d-5)) + i2 = min (ncpm, nint(max(x1,x2)-1d-5)) + if (.not.(i2 .lt. i1)) goto 220 + goto 210 +220 continue + val = memi(bufref+i-1) + do 230 k = i1-vold(1), i2-vold(1) + val = max (val, memi(bufpm+k)) +230 continue +231 continue + memi(bufref+i-1) = val +210 continue +211 continue +190 continue +191 continue + call pmplpi (pmnew, vnew, memi(bufref), 0, nc, 12 ) +170 continue +171 continue + call xmfree(bufref, 4) + call xmfree(bufpm, 4) +160 continue + call mwcloe (mw) + call imunmp (im) + im = imnew + call imseti (im, 16 , pmnew) +100 return + end +c pmliny pm_linenotempty +c mwmmud mw_mmuld +c errcoe errcode +c mwsltd mw_sltermd +c mwinvd mw_invertd +c impmmo im_pmmapo +c plssie pl_ssize +c mwctrd mw_ctrand +c pmempy pm_empty +c mwvmud mw_vmuld +c dsmath ds_match +c plopen pl_open +c mwsavm mw_saveim +c mwopem mw_openim +c imunmp imunmap +c mwsctn mw_sctran +c impmmp im_pmmap +c dspmip ds_pmimmap +c dspmmp ds_pmmap +c imstai imstati +c nowhie nowhite +c mwcloe mw_close +c pmnewk pm_newmask +c mwgltd mw_gltermd diff --git a/vendor/x11iraf/ximtool/clients.old/lib/dspmmap.x b/vendor/x11iraf/ximtool/clients.old/lib/dspmmap.x new file mode 100644 index 00000000..621f0372 --- /dev/null +++ b/vendor/x11iraf/ximtool/clients.old/lib/dspmmap.x @@ -0,0 +1,244 @@ +include +include +include +include +include +include +include + + +# DS_PMMAP -- Open a pixel mask READ_ONLY. +# +# Open the pixel mask. If a regular image is specified convert it to +# a pixel mask. Match the mask to the reference image based on the +# physical coordinates. A null filename is allowed and returns NULL. + +pointer procedure ds_pmmap (pmname, refim) + +char pmname[ARB] #I Pixel mask name +pointer refim #I Reference image pointer + +pointer im +char fname[SZ_FNAME] +int nowhite(), errcode() +bool streq() +pointer im_pmmap(), ds_pmimmap() +errchk ds_pmimmap, ds_match + +begin + if (nowhite (pmname, fname, SZ_FNAME) == 0) + return (NULL) + if (streq (fname, "EMPTY")) + return (NULL) + if (fname[1] == '!') { + iferr (call imgstr (refim, fname[2], fname, SZ_FNAME)) + fname[1] = EOS + } else if (streq (fname, "BPM")) { + iferr (call imgstr (refim, "BPM", fname, SZ_FNAME)) + return (NULL) + } + + iferr (im = im_pmmap (fname, READ_ONLY, NULL)) { + switch (errcode()) { + case SYS_FOPNNEXFIL, SYS_PLBADSAVEF: + im = ds_pmimmap (fname, refim) + default: + call erract (EA_ERROR) + } + } + + iferr (call ds_match (im, refim)) + call erract (EA_WARN) + + return (im) +end + + +# DS_PMIMMAP -- Open a pixel mask from a non-pixel list image. +# Return error if the image cannot be opened. + +pointer procedure ds_pmimmap (pmname, refim) + +char pmname[ARB] #I Image name +pointer refim #I Reference image pointer + +int i, ndim, npix, val +pointer sp, v1, v2, im_in, im_out, pm, mw, data + +int imgnli() +pointer immap(), pm_newmask(), im_pmmapo(), imgl1i(), mw_openim() +errchk immap, mw_openim + +begin + call smark (sp) + call salloc (v1, IM_MAXDIM, TY_LONG) + call salloc (v2, IM_MAXDIM, TY_LONG) + + call amovkl (long(1), Meml[v1], IM_MAXDIM) + call amovkl (long(1), Meml[v2], IM_MAXDIM) + + im_in = immap (pmname, READ_ONLY, 0) + pm = pm_newmask (im_in, 27) + + ndim = IM_NDIM(im_in) + npix = IM_LEN(im_in,1) + + while (imgnli (im_in, data, Meml[v1]) != EOF) { + do i = 0, npix-1 { + val = Memi[data+i] + if (val < 0) + Memi[data+i] = 0 + } + call pmplpi (pm, Meml[v2], Memi[data], 0, npix, PIX_SRC) + call amovl (Meml[v1], Meml[v2], ndim) + } + + im_out = im_pmmapo (pm, im_in) + data = imgl1i (im_out) # Force I/O to set header + mw = mw_openim (im_in) # Set WCS + call mw_saveim (mw, im_out) + call mw_close (mw) + + call imunmap (im_in) + call sfree (sp) + return (im_out) +end + + +# DS_MATCH -- Set the pixel mask to match the reference image. +# This matches sizes and physical coordinates and allows the +# original mask to be smaller or larger than the reference image. +# Subsequent use of the pixel mask can then work in the logical +# coordinates of the reference image. The mask values are the maximum +# of the mask values which overlap each reference image pixel. +# A null input returns a null output. + +procedure ds_match (im, refim) + +pointer im #U Pixel mask image pointer +pointer refim #I Reference image pointer + +int i, j, k, l, i1, i2, j1, j2, nc, nl, ncpm, nlpm, nx, val +double x1, x2, y1, y2, lt[6], lt1[6], lt2[6] +long vold[IM_MAXDIM], vnew[IM_MAXDIM] +pointer pm, pmnew, imnew, mw, ctx, cty, bufref, bufpm + +int imstati() +pointer pm_open(), mw_openim(), im_pmmapo(), imgl1i(), mw_sctran() +bool pm_empty(), pm_linenotempty() +errchk pm_open, mw_openim + +begin + if (im == NULL) + return + + # Set sizes. + nc = IM_LEN(refim,1) + nl = IM_LEN(refim,2) + ncpm = IM_LEN(im,1) + nlpm = IM_LEN(im,2) + + # If the mask is empty and the sizes are the same then it does not + # matter if the two are actually matched in physical coordinates. + pm = imstati (im, IM_PMDES) + if (pm_empty(pm) && nc == ncpm && nl == nlpm) + return + + # Compute transformation between reference (logical) coordinates + # and mask (physical) coordinates. + + mw = mw_openim (im) + call mw_gltermd (mw, lt, lt[5], 2) + call mw_close (mw) + + mw = mw_openim (refim) + call mw_gltermd (mw, lt2, lt2[5], 2) + call mw_close (mw) + + # Combine lterms. + call mw_invertd (lt, lt1, 2) + call mw_mmuld (lt1, lt2, lt, 2) + call mw_vmuld (lt, lt[5], lt[5], 2) + lt[5] = lt2[5] - lt[5] + lt[6] = lt2[6] - lt[6] + do i = 1, 6 + lt[i] = nint (1D6 * (lt[i]-int(lt[i]))) / 1D6 + int(lt[i]) + + # Check for a rotation. For now don't allow any rotation. + if (lt[2] != 0. || lt[3] != 0.) + call error (1, "Image and mask have a relative rotation") + + # Check for an exact match. + if (lt[1] == 1D0 && lt[4] == 1D0 && lt[5] == 0D0 && lt[6] == 0D0) + return + + # Set reference to mask coordinates. + mw = mw_openim (im) + call mw_sltermd (mw, lt, lt[5], 2) + ctx = mw_sctran (mw, "logical", "physical", 1) + cty = mw_sctran (mw, "logical", "physical", 2) + + # Create a new pixel mask of the required size and offset. + # Do dummy image I/O to set the header. + pmnew = pm_open (NULL) + call pm_ssize (pmnew, 2, IM_LEN(refim,1), 27) + imnew = im_pmmapo (pmnew, NULL) + bufref = imgl1i (imnew) + + # Compute region of mask overlapping the reference image. + call mw_ctrand (ctx, 1-0.5D0, x1, 1) + call mw_ctrand (ctx, nc+0.5D0, x2, 1) + i1 = max (1, nint(min(x1,x2)+1D-5)) + i2 = min (ncpm, nint(max(x1,x2)-1D-5)) + call mw_ctrand (cty, 1-0.5D0, y1, 1) + call mw_ctrand (cty, nl+0.5D0, y2, 1) + j1 = max (1, nint(min(y1,y2)+1D-5)) + j2 = min (nlpm, nint(max(y1,y2)-1D-5)) + + # Set the new mask values to the maximum of all mask values falling + # within each reference pixel in the overlap region. + if (i1 <= i2 && j1 <= j2) { + nx = i2 - i1 + 1 + call malloc (bufpm, nx, TY_INT) + call malloc (bufref, nc, TY_INT) + vold[1] = i1 + vnew[1] = 1 + do j = 1, nl { + call mw_ctrand (cty, j-0.5D0, y1, 1) + call mw_ctrand (cty, j+0.5D0, y2, 1) + j1 = max (1, nint(min(y1,y2)+1D-5)) + j2 = min (nlpm, nint(max(y1,y2)-1D-5)) + if (j2 < j1) + next + + vnew[2] = j + call aclri (Memi[bufref], nc) + do l = j1, j2 { + vold[2] = l + if (!pm_linenotempty (pm, vold)) + next + call pmglpi (pm, vold, Memi[bufpm], 0, nx, 0) + do i = 1, nc { + call mw_ctrand (ctx, i-0.5D0, x1, 1) + call mw_ctrand (ctx, i+0.5D0, x2, 1) + i1 = max (1, nint(min(x1,x2)+1D-5)) + i2 = min (ncpm, nint(max(x1,x2)-1D-5)) + if (i2 < i1) + next + val = Memi[bufref+i-1] + do k = i1-vold[1], i2-vold[1] + val = max (val, Memi[bufpm+k]) + Memi[bufref+i-1] = val + } + } + call pmplpi (pmnew, vnew, Memi[bufref], 0, nc, PIX_SRC) + } + call mfree (bufref, TY_INT) + call mfree (bufpm, TY_INT) + } + + call mw_close (mw) + call imunmap (im) + im = imnew + call imseti (im, IM_PMDES, pmnew) +end diff --git a/vendor/x11iraf/ximtool/clients.old/lib/idxstr.f b/vendor/x11iraf/ximtool/clients.old/lib/idxstr.f new file mode 100644 index 00000000..ac16febf --- /dev/null +++ b/vendor/x11iraf/ximtool/clients.old/lib/idxstr.f @@ -0,0 +1,44 @@ + integer function idxstr (index, outstr, maxch, dict) + integer index + integer maxch + integer*2 outstr(*) + integer*2 dict(*) + integer i + integer len + integer start + integer count + integer xstrln + save + outstr(1) = 0 + if (.not.(dict(1) .eq. 0)) goto 110 + idxstr = (0) + goto 100 +110 continue + count = 1 + len = xstrln(dict) + start = 2 +120 if (.not.(count .lt. index)) goto 122 + if (.not.(dict(start) .eq. dict(1))) goto 130 + count = count + 1 +130 continue + if (.not.(start .eq. len)) goto 140 + idxstr = (0) + goto 100 +140 continue +121 start = start + 1 + goto 120 +122 continue + i = start +150 if (.not.(dict(i) .ne. 0 .and. dict(i) .ne. dict(1))) goto 152 + if (.not.(i - start + 1 .gt. maxch)) goto 160 + goto 152 +160 continue + outstr(i - start + 1) = dict(i) +151 i = i + 1 + goto 150 +152 continue + outstr(i - start + 1) = 0 + idxstr = (count) + goto 100 +100 return + end diff --git a/vendor/x11iraf/ximtool/clients.old/lib/idxstr.x b/vendor/x11iraf/ximtool/clients.old/lib/idxstr.x new file mode 100644 index 00000000..7b055658 --- /dev/null +++ b/vendor/x11iraf/ximtool/clients.old/lib/idxstr.x @@ -0,0 +1,54 @@ +# Copyright(c) 1986 Association of Universities for Research in Astronomy Inc. + + +# IDXSTR -- Search a dictionary string for a given string index number. +# This is the opposite function of strdic(), that returns the index for +# given string. The entries in the dictionary string are separated by +# a delimiter character which is the first character of the dictionary +# string. The index of the string found is returned as the function value. +# Otherwise, if there is no string for that index, a zero is returned. + +int procedure idxstr (index, outstr, maxch, dict) + +int index #i String index +char outstr[ARB] #o Output string as found in dictionary +int maxch #i Maximum length of output string +char dict[ARB] #i Dictionary string + +int i, len, start, count + +int strlen() + +begin + # Clear the output string. + outstr[1] = EOS + + # Return if the dictionary is not long enough. + if (dict[1] == EOS) + return (0) + + # Initialize the counters. + count = 1 + len = strlen (dict) + + # Search the dictionary string. This loop only terminates + # successfully if the index is found. Otherwise the procedure + # returns with and error condition. + for (start = 2; count < index; start = start + 1) { + if (dict[start] == dict[1]) + count = count + 1 + if (start == len) + return (0) + } + + # Extract the output string from the dictionary. + for (i = start; dict[i] != EOS && dict[i] != dict[1]; i = i + 1) { + if (i - start + 1 > maxch) + break + outstr[i - start + 1] = dict[i] + } + outstr[i - start + 1] = EOS + + # Return index for output string. + return (count) +end diff --git a/vendor/x11iraf/ximtool/clients.old/lib/mkpkg b/vendor/x11iraf/ximtool/clients.old/lib/mkpkg new file mode 100644 index 00000000..3c6a6c14 --- /dev/null +++ b/vendor/x11iraf/ximtool/clients.old/lib/mkpkg @@ -0,0 +1,17 @@ +# Make the ISM Client tasks. + +$checkout libpkg.a ../ +$update libpkg.a +$checkin libpkg.a ../ +$exit + +libpkg.a: + @skywcs + idxstr.x + reopen.x + dspmmap.x \ + + wcsgfterm.x + ximtool.x + ; + diff --git a/vendor/x11iraf/ximtool/clients.old/lib/reopen.f b/vendor/x11iraf/ximtool/clients.old/lib/reopen.f new file mode 100644 index 00000000..f7a1c456 --- /dev/null +++ b/vendor/x11iraf/ximtool/clients.old/lib/reopen.f @@ -0,0 +1,70 @@ + integer function reopen (fd, mode) + integer fd + integer mode + logical Memb(1) + integer*2 Memc(1) + integer*2 Mems(1) + integer Memi(1) + integer*4 Meml(1) + real Memr(1) + double precision Memd(1) + complex Memx(1) + equivalence (Memb, Memc, Mems, Memi, Meml, Memr, Memd, Memx) + common /Mem/ Memd + integer newfp + integer ffp + integer newfd + integer fgetfd + integer*4 boffst(4096 ) + integer bufptr(4096 ) + integer buftop(4096 ) + integer iop(4096 ) + integer itop(4096 ) + integer otop(4096 ) + integer fiodes(4096 ) + integer fflags(4096 ) + integer redird(4096 ) + integer zdev(150 ) + integer nextdv + integer fp + integer*2 pathne(511 +1) + logical xerflg + common /xercom/ xerflg + common /fiocom/ boffst, bufptr, buftop, iop, itop, otop, fiodes, + *fflags, redird, zdev, nextdv, fp, pathne + save + ffp = fiodes(fd) + if (.not.(fd .le. 0 .or. ffp .eq. 0)) goto 110 + call syserr (733) + if (xerflg) goto 100 +110 continue + if (.not.(memi(ffp+1) .eq. 1 .and. mode .ne. 1 )) goto 120 + call filerr (memc((((ffp+20+(10+256))-1)*2+1)) , 750) +120 continue + if (.not.(memi(ffp+2) .ne. 12)) goto 130 + call filerr (memc((((ffp+20+(10+256))-1)*2+1)) , 751) +130 continue + newfd = fgetfd (memc((((ffp+20+(10+256))-1)*2+1)) , mode, 12) + newfp = fiodes(newfd) + memi(newfp+3) = memi(ffp+3) + memi(newfp+4) = memi(ffp+4) + memi(newfp) = memi(ffp) + if (.not.(memi(ffp+18) .eq. (ffp+20) )) goto 140 + call xmallc(memi(ffp+18) , (10+256), 10 ) + if (xerflg) goto 100 + call amovi (memi((ffp+20) ), memi(memi(ffp+18) ), (10+256)) +140 continue + memi(memi(ffp+18) ) = memi(memi(ffp+18) ) + 1 + memi(newfp+18) = memi(ffp+18) + if (.not.(mode .eq. 4)) goto 150 + call xfseek(newfd, -2) + if (xerflg) goto 100 +150 continue + reopen = (newfd) + goto 100 +100 return + end +c nextdv next_dev +c boffst boffset +c redird redir_fd +c pathne pathname diff --git a/vendor/x11iraf/ximtool/clients.old/lib/reopen.x b/vendor/x11iraf/ximtool/clients.old/lib/reopen.x new file mode 100644 index 00000000..59ddba30 --- /dev/null +++ b/vendor/x11iraf/ximtool/clients.old/lib/reopen.x @@ -0,0 +1,55 @@ +# Copyright(c) 1986 Association of Universities for Research in Astronomy Inc. + +include +include +include + +# REOPEN -- Reopen a binary file. Used to gain two or more independent +# sets of buffers to access a binary file. No protection against two +# file descriptors trying to write to the same part of the file at the +# same time, which may result in loss of data. The file descriptors and +# buffers of reopened files are independent, but all files accessing the +# same channel share the same channel descriptor (necessary to synchronize +# i/o requests and to maintain a unique file size parameter). + +int procedure reopen (fd, mode) + +int fd, mode +pointer newfp, ffp +int newfd, fgetfd() +errchk syserr, malloc, seek +include + +begin + ffp = fiodes[fd] + if (fd <= 0 || ffp == NULL) + call syserr (SYS_FILENOTOPEN) + + if (FMODE(ffp) == READ_ONLY && mode != READ_ONLY) + call filerr (FNAME(ffp), SYS_FREOPNMODE) + if (FTYPE(ffp) != BINARY_FILE) + call filerr (FNAME(ffp), SYS_FREOPNTYPE) + + newfd = fgetfd (FNAME(ffp), mode, BINARY_FILE) + newfp = fiodes[newfd] + + FDEV(newfp) = FDEV(ffp) + FBUFSIZE(newfp) = FBUFSIZE(ffp) + FCHAN(newfp) = FCHAN(ffp) + + # If this is the first reopen, allocate space for a separate channel + # descriptor and copy the channel descriptor from the original file. + + if (FCD(ffp) == FLCD(ffp)) { + call malloc (FCD(ffp), LEN_CHANDES, TY_STRUCT) + call amovi (Memi[FLCD(ffp)], Memi[FCD(ffp)], LEN_CHANDES) + } + + FREFCNT(ffp) = FREFCNT(ffp) + 1 # bump ref count + FCD(newfp) = FCD(ffp) + + if (mode == APPEND) + call seek (newfd, EOFL) + + return (newfd) +end diff --git a/vendor/x11iraf/ximtool/clients.old/lib/skywcs/doc/README b/vendor/x11iraf/ximtool/clients.old/lib/skywcs/doc/README new file mode 100644 index 00000000..d15ab738 --- /dev/null +++ b/vendor/x11iraf/ximtool/clients.old/lib/skywcs/doc/README @@ -0,0 +1,302 @@ + SKYWCS: The Sky Coordinates Package + +1. Introduction + + The skywcs package contains a simple set of routines for doing managing sky +coordinate information and for transforming from one sky coordinate system to +another. The sky coordinate system is defined either by a system name, e.g. +"J2000", "galactic, etc., or by an image system name, e.g. "dev$ypix" or +"dev$ypix world". + + The skywcs routine are layered on the Starlink Positional Astronomy library +SLALIB which is installed in the IRAF MATH package. Type "help slalib option= +sys" for more information about SLALIB. + + +2. The Interface Routines + +The package prefix is sk. The interface routines are listed below. + + stat = sk_decwcs (ccsystem, mw, coo, imcoo) + stat = sk_decwstr (ccsystem, coo, imcoo) + stat = sk_decim (im, wcs, mw, coo) + sk_enwcs (coo, ccsystem, maxch) + newcoo = sk_copy (coo) + sk_iiprint (label, imagesys, mw, coo) + sk_iiwrite (fd, label, imagesys, mw, coo) +[id]val = sk_stat[id] (coo, param) + sk_stats (coo, param, str, maxch) + sk_set[id] (coo, param, [id]val) + sk_sets (coo, param, str) + sk_ultran (incoo, outcoo, ilng, ilat, olng, olat, npts) + sk_lltran (incoo, outoo, ilng, ilat, ipmlng, ipmlat, px, rv, + olng, olat) + sk_equatorial (incoo, outcoo, ilng, ilat, ipmlng, ipmlat, px, + rv, olng, olat) + sk_saveim (coo, mw, im) + sk_close (coo) + + +3. Notes + + An "include " statement must be included in the calling +program to make the skywcs package parameter definitions visible to the calling +program. + + An "-lxtools -lslalib" must be included in the calling program link line +to link in the skywcs and the slalib routines. + + The sky coordinate descriptor is created with a call to one of the +sk_decwcs, sk_decwstr, or sk_imwcs routines. If the source of the sky +coordinate descriptor is an image then an IRAF MWCS descriptor will be returned +with the sky oordinate descriptor. The sky coordinate descriptor is freed with a +call to sk_close. A separate call to mw_close must be made to free the MWCS +descriptor if one was allocated. + + By default the main skywcs coordinate transformation routine sk_ultran +assumes that the input and output sky coordinates are in hours and degrees +if the input and output coordinate systems are equatorial, otherwise the +coordinates are assumed to be in degrees and degrees. The default input and +output sky coordinate units can be reset with calls to sk_seti. Two lower level +coordinate transformations for handling proper motions sk_lltran and +sk_equatorial are also available. These routines that the input and output +coordinates and proper motions are in radians. + + Calling programs working with both sky coordinate and MWCS descriptors +need to be aware that the MWCS routines assume that all sky coordinates +must be input in degrees and will be output in degrees and adjust their +code accordingly. + + The skywcs routine sk_saveim can be used to update an image header. + + +3. Examples + +Example 1: Convert from B1950 coordinates to J2000 coordinates. + + include + + .... + + # Open input coordinate system. + instat = sk_decwstr ("B1950", incoo, NULL) + if (instat == ERR) { + call sk_close (incoo) + return + } + + # Open output coordinate system. + outstat = sk_decwstr ("J2000", outcoo, NULL) + if (outstat == ERR) { + call sk_close (outcoo) + return + } + + # Do the transformation assuming the input coordinates are in hours + # and degrees. The output coordinates will be in hours and degrees + # as well. + call sk_ultran (incoo, outcoo, rain, decin, raout, decout, npts) + + # Close the coordinate descriptors. + call sk_close (incoo) + call sk_close (outcoo) + + ... + + +Example 2: Repeat example 1 but convert to galactic coordinates. + + include + + .... + + # Open the input coordinate system. + instat = sk_decwstr ("B1950", incoo, NULL) + if (instat == ERR) { + call sk_close (incoo) + return + } + + # Open the output coordinate system. + outstat = sk_decwstr ("galactic", outcoo, NULL) + if (outstat == ERR) { + call sk_close (outcoo) + return + } + + # Dd the transformation assuming the input coordinates are in hours and + # degrees. The output coordinates will be in degrees and degrees. + call sk_ultran (incoo, outcoo, rain, decin, raout, decout, npts) + + # Close the coordinate descriptors. + call sk_close (incoo) + call sk_close (outcoo) + + ... + +Example 3: Convert a grid of pixel coordinates in the input image to the +equivalent pixel coordinate in the output image using the image world +coordinate systems to connect the two. + + include + + .... + + # Mwref will be defined because the input system is an image. + refstat = sk_decwcs ("refimage logical", mwref, refcoo, NULL) + if (refstat == ERR || mwref == NULL) { + if (mwref != NULL) + call mw_close (mwref) + call sk_close (refcoo) + return + } + + # Set the reference coordinate descriptor so it expects input in degrees + # and degrees. + call sk_seti (refcoo, S_NLNGUNUTS, SKY_DEGREES) + call sk_seti (refcoo, S_NLATUNUTS, SKY_DEGREES) + + # Mwout will be defined because the output system is an image. + outstat = sk_decwcs ("image logical", mwout, outcoo, NULL) + if (outstat == ERR || mwout == NULL) { + if (mwout != NULL) + call mw_close (mwout) + call sk_close (outcoo) + call mw_close (mwref) + call sk_close (refcoo) + return + } + + # Set the output coordinate descriptor so it will output coordinates + # in degrees and degrees. + call sk_seti (outcoo, S_NLNGUNUTS, SKY_DEGREES) + call sk_seti (outcoo, S_NLATUNUTS, SKY_DEGREES) + + # Compute pixel grid in refimage and store coordinate in the arrays + # xref and yref. + npts = 0 + do j = 1, IM_LEN(im,2), 100 { + do i = 1, IM_LEN(im,1), 100 { + npts = npts + 1 + xref[npts] = i + yref[npts] = j + } + } + + # Convert xref and yref to celestial coordinates raref and decref using + # mwref. The output coordinates will be in degrees and degrees. + ctref = mw_sctran (mwref, "logical", "world", 03B) + do i = 1, npts + call mw_c2trand (ctref, xref[i], yref[i], raref[i], decref[i]) + call ct_free (ctref) + + # Convert the reference celestial coordinates to the output celestial + # coordinate system using the coordinate descriptors. + call sk_ultran (refcoo, outcoo, raref, decref, raout, decout, npts) + + # Convert the output celestial coordinates to pixel coordinates in + # the other image using mwout. + ctout = mw_sctran (mwout, "world", "logical", 03B) + do i = 1, npts + call mw_c2trand (ctout, raout[i], decout[i], xout[i], yout[i]) + call ct_free (ctout) + + # Print the input and output pixel coordinates. + do i = 1, npts { + call printf ("%10.3f %10.3f %10.3f %10.3f\n") + call pargd (xref[i]) + call pargd (yref[i]) + call pargd (xout[i]) + call pargd (yout[i]) + } + + # Tidy up. + call mw_close (mwref) + call mw_close (mwout) + call sk_close (refcoo) + call sk_close (outcoo) + + +Example 4: Convert a 2D image with an J2000 tangent plane projection wcs to the +equivalent galactic wcs. The transformation requires a shift in origin and a +rotation. Assume that the ra axis is 1 and the dec axis is 2. The details of +how to compute the rotation are not shown here. See the imcctran task for +details. + + include + include + + ... + + # Open image. + im = immap (image, READ_WRITE, 0) + + # Open the image coordinate system. + instat = sk_decim (im, "logical", mwin, cooin) + if (instat == ERR || mwin == NULL) { + ... + call sk_close (cooin) + ... + } + + # Get the dimensions of the mwcs descriptor. This should be 2. + ndim = mw_ndim (mwin, MW_NPHYSDIM) + + # Get the default coordinates to degrees and degreees. + call sk_seti (cooin, S_NLNGUNITS, SKY_DEGREES) + call sk_seti (cooin, S_NATGUNITS, SKY_DEGREES) + + # Open the output coordinate system. Mwout is NULL because this system + # is not an image. + outstat = sk_decwstr ("galactic", mwout, cooout, cooin) + if (outstat == ERR) { + ... + call sk_close (outstat) + ... + } + + # Make a copy of the mwcs descriptor. + mwout = mw_newcopy (mwin) + + # Allocate space for the r and w vectors and cd matrix. + call malloc (r, ndim, TY_DOUBLE) + call malloc (w, ndim, TY_DOUBLE) + call malloc (cd, ndim * ndim, TY_DOUBLE) + call malloc (newcd, ndim * ndim, TY_DOUBLE) + + # Assume for simplicty that the MWCS LTERM is the identify transform. + # so we don't have to worry about it. Get the WTERM which consists + # of r the reference point in pixels, w the reference point in degrees, + # and the cd matrix in degrees per pixel. + call mw_gwtermd (mwin, Memd[r], Memd[w], Memd[cd], ndim) + + # Convert the world coordinates zero point. The pixel zero point + # remains the same. + tilng = Memd[w] + tilat = Memd[w+1] + call sk_ultran (incoo, outcoo, tilng, tilat, tolng, tolat, 1) + Memd[w] = tolng + Memd[w+1] = tolat + + # Figure out how much to rotate the coordinate system and edit the + # compute a new CD matrix. Call it newcd. + ... + + # Enter the new CD matrix and zero point. + call mw_swterm (mwout, Memd[r], Memd[w], Memd[newcd], ndim) + + # Update the header. + call sk_saveim (cooout, mwout, im) + call mw_saveim (mwout, im) + ... + + # Tidy up. + call mfree (r, TY_DOUBLE) + call mfree (w, TY_DOUBLE) + call mfree (cd, TY_DOUBLE) + call mfree (newcd, TY_DOUBLE) + call mw_close (mwin) + call mw_close (mwout) + call sk_close (cooin) + call sk_close (cooout) + call imunmap (im) diff --git a/vendor/x11iraf/ximtool/clients.old/lib/skywcs/doc/ccsystems.hlp b/vendor/x11iraf/ximtool/clients.old/lib/skywcs/doc/ccsystems.hlp new file mode 100644 index 00000000..e812fc8d --- /dev/null +++ b/vendor/x11iraf/ximtool/clients.old/lib/skywcs/doc/ccsystems.hlp @@ -0,0 +1,134 @@ +.help ccsystems Mar00 Skywcs +.ih +NAME +ccsystems -- list and describe the supported sky coordinate systems +.ih +USAGE +help ccsystems + +.ih +SKY COORDINATE SYSTEMS + +The sky package supports the equatorial ("fk4", "fk4-noe", "fk5", "icrs"), +ecliptic, galactic, and supergalactic celestial coordinate systems. In most +cases and unless otherwise noted users can input their coordinates in +any one of these systems as long as they specify the coordinate system +correctly. + +Considerable flexibility is permitted in how the coordinate systems are +specified, e.g. J2000.0, j2000.0, 2000.0, fk5, fk5 J2000, and fk5 2000.0 +all specify the mean place post-IAU 1976 or FK5 system. Missing equinox and +epoch fields assume reasonable defaults. In most cases the +systems of most interest to users are are "icrs", "j2000", and "b1950" +which stand for the ICRS J2000.0, FK5 J2000.0 and FK4 B1950.0 celestial +coordinate systems respectively. The full set of options are listed below: + +.ls equinox [epoch] +The equatorial mean place post-IAU 1976 (FK5) system if equinox is a +Julian epoch, e.g. J2000.0 or 2000.0, or the equatorial mean place +pre-IAU 1976 system (FK4) if equinox is a Besselian epoch, e.g. B1950.0 +or 1950.0. Julian equinoxes are prefixed by a J or j, Besselian equinoxes +by a B or b. Equinoxes without the J / j or B / b prefix are treated as +Besselian epochs if they are < 1984.0, Julian epochs if they are >= 1984.0. +Epoch is the epoch of the observation and may be a Julian +epoch, a Besselian epoch, or a Julian date. Julian epochs +are prefixed by a J or j, Besselian epochs by a B or b. +Epochs without the J / j or B / b prefix default to the epoch type of +equinox if the epoch value <= 3000.0, otherwise epoch is interpreted as +a Julian date. If undefined epoch defaults to equinox. +.le +.ls icrs [equinox] [epoch] +The International Celestial Reference System where equinox is +a Julian or Besselian epoch e.g. J2000.0 or B1980.0. +Equinoxes without the J / j or B / b prefix are treated as Julian epochs. +The default value of equinox is J2000.0. +Epoch is a Besselian epoch, a Julian epoch, or a Julian date. +Julian epochs are prefixed by a J or j, Besselian epochs by a B or b. +Epochs without the J / j or B / b prefix default to Julian epochs +if the epoch value <= 3000.0, otherwise epoch is interpreted as +a Julian date. If undefined epoch defaults to equinox. +.le +.ls fk5 [equinox] [epoch] +The equatorial mean place post-IAU 1976 (FK5) system where equinox is +a Julian or Besselian epoch e.g. J2000.0 or B1980.0. +Equinoxes without the J / j or B / b prefix are treated as Julian epochs. +The default value of equinox is J2000.0. +Epoch is a Besselian epoch, a Julian epoch, or a Julian date. +Julian epochs are prefixed by a J or j, Besselian epochs by a B or b. +Epochs without the J / j or B / b prefix default to Julian epochs +if the epoch value <= 3000.0, otherwise epoch is interpreted as +a Julian date. If undefined epoch defaults to equinox. +.le +.ls fk4 [equinox] [epoch] +The equatorial mean place pre-IAU 1976 (FK4) system where equinox is a +Besselian or Julian epoch e.g. B1950.0 or J2000.0, +and epoch is the Besselian epoch, the Julian epoch, or the Julian date of the +observation. +Equinoxes without the J / j or B / b prefix are treated +as Besselian epochs. The default value of equinox is B1950.0. Epoch +is a Besselian epoch, a Julian epoch, or a Julian date. +Julian epochs are prefixed by a J or j, Besselian epochs by a B or b. +Epochs without the J / j or B / b prefix default to Besselian epochs +if the epoch value <= 3000.0, otherwise epoch is interpreted as +a Julian date. If undefined epoch defaults to equinox. +.le +.ls noefk4 [equinox] [epoch] +The equatorial mean place pre-IAU 1976 (FK4) system but without the E-terms +where equinox is a Besselian or Julian epoch e.g. B1950.0 or J2000.0, +and epoch is the Besselian epoch, the Julian epoch, or the Julian date of the +observation. +Equinoxes without the J / j or B / b prefix are treated +as Besselian epochs. The default value of equinox is B1950.0. +Epoch is a Besselian epoch, a Julian epoch, or a Julian date. +Julian epochs are prefixed by a J or j, Besselian epochs by a B or b. +Epochs without the J / j or B / b prefix default to Besselian epochs +if the epoch value <= 3000.0, otherwise epoch is interpreted as +a Julian day. If undefined epoch defaults to equinox. +.le +.ls apparent epoch +The equatorial geocentric apparent place post-IAU 1976 system where +epoch is the epoch of observation. +Epoch is a Besselian epoch, a Julian epoch or a Julian date. +Julian epochs are prefixed by a J or j, Besselian epochs by a B or b. +Epochs without the J / j or B / b prefix default to Besselian +epochs if the epoch value < 1984.0, Julian epochs +if the epoch value <= 3000.0, otherwise epoch is interpreted as +a Julian date. +.le +.ls ecliptic epoch +The ecliptic coordinate system where epoch is the epoch of observation. +Epoch is a Besselian epoch, a Julian epoch, or a Julian date. +Julian epochs are prefixed by a J or j, Besselian epochs by a B or b. +Epochs without the J / j or B / b prefix default to Besselian epochs +if the epoch values < 1984.0, Julian epochs +if the epoch value <= 3000.0, otherwise epoch is interpreted as +a Julian day. +.le +.ls galactic [epoch] +The IAU 1958 galactic coordinate system. +Epoch is a Besselian epoch, a Julian epoch or a Julian date. +Julian epochs are prefixed by a J or j, Besselian epochs by a B or b. +Epochs without the J / j or B / b prefix default to Besselian +epochs if the epoch value < 1984.0, Julian epochs +if the epoch value <= 3000.0, otherwise epoch is interpreted as +a Julian date. The default value of epoch is B1950.0. +.le +.ls supergalactic [epoch] +The deVaucouleurs supergalactic coordinate system. +Epoch is a Besselian epoch, a Julian epoch or a Julian date. +Julian epochs are prefixed by a J or j, Besselian epochs by a B or b. +Epochs without the J / j or B / b prefix default to Besselian +epochs if the epoch value < 1984.0, Julian epochs +if the epoch value <= 3000.0, otherwise epoch is interpreted as +a Julian date. The default value of epoch is B1950.0. +.le + +Fields enclosed in [] are optional with the defaults as described. The epoch +field for the "icrs" , "fk5", "galactic", and "supergalactic" coordinate +systems is only used if the input coordinates are in the equatorial fk4, +noefk4, fk5, or icrs systems and proper motions are used to transform from +coordinate system to another. + +.ih +SEE ALSO +.endhelp diff --git a/vendor/x11iraf/ximtool/clients.old/lib/skywcs/doc/skclose.hlp b/vendor/x11iraf/ximtool/clients.old/lib/skywcs/doc/skclose.hlp new file mode 100644 index 00000000..191b08b5 --- /dev/null +++ b/vendor/x11iraf/ximtool/clients.old/lib/skywcs/doc/skclose.hlp @@ -0,0 +1,23 @@ +.help skclose Mar00 Skywcs +.ih +NAME +skclose -- free the sky coordinate descriptor +.ih +SYNOPSIS +call sk_close (coo) + +.nf +pointer coo # the sky coordinate descriptor +.fi +.ih +ARGUMENTS +.ls coo +The sky coordinate descriptor to be freed. +.le +.ih +DESCRIPTION +Sk_close frees a previously allocated sky coordinate descriptor. +.ih +SEE ALSO +skdecwcs, skdecwstr, skdecim, skcopy +.endhelp diff --git a/vendor/x11iraf/ximtool/clients.old/lib/skywcs/doc/skcopy.hlp b/vendor/x11iraf/ximtool/clients.old/lib/skywcs/doc/skcopy.hlp new file mode 100644 index 00000000..68219c0d --- /dev/null +++ b/vendor/x11iraf/ximtool/clients.old/lib/skywcs/doc/skcopy.hlp @@ -0,0 +1,24 @@ +.help skcopy Mar00 Skywcs +.ih +NAME +skcopy -- copy a sky coordinate descriptor +.ih +SYNOPSIS +newcoo = sk_copy (coo) + +.nf +pointer coo # the sky coordinate descriptor +.fi +.ih +ARGUMENTS +.ls coo +The sky coordinate descriptor to be copied. +.le +.ih +DESCRIPTION +Sk_copy is a pointer function which returns a copy of the input sky coordinate +descriptor as its function value. +.ih +SEE ALSO +skdecwcs, skdecwstr, skdecim, skclose +.endhelp diff --git a/vendor/x11iraf/ximtool/clients.old/lib/skywcs/doc/skdecim.hlp b/vendor/x11iraf/ximtool/clients.old/lib/skywcs/doc/skdecim.hlp new file mode 100644 index 00000000..c8f7b2e7 --- /dev/null +++ b/vendor/x11iraf/ximtool/clients.old/lib/skywcs/doc/skdecim.hlp @@ -0,0 +1,55 @@ +.help skdecim Mar00 Skywcs +.ih +NAME +skdecim -- open a sky coordinate descriptor using an image descriptor +.ih +SYNOPSIS +stat = sk_decim (im, mw, coo, imcoo) + +.nf +pointer im # the input image descriptor +pointer mw # the output mwcs descriptor +pointer coo # the output sky coordinate descriptor +pointer imcoo # the input image sky coordinate descriptor +.fi +.ih +ARGUMENTS +.ls im +The input image descriptor. +.le +.ls mw +The output mwcs descriptor. A NULL value for mw is returned if the image +world coordinate system cannot be read. +.le +.ls coo +The output sky coordinate descriptor. +.le +.ls imcoo +The parent image sky coordinate descriptor. Imcoo is set to NULL +except in cases where the sky coordinate descriptor for an image is +transformed and written back to the same image. +.ih +DESCRIPTION +Sk_decim is an integer function which returns OK or ERR as its function +value. ERR is returned if a valid sky coordinate system cannot be opened, +OK otherwise. + +Sk_decim returns the image MWCS descriptor mw. The MWCS descriptor is used +to convert from pixel coordinates to world coordinates and vice versa. +The MWCS descriptor must be freed with a call to the MWCS routine +mw_close before task termination. + +Sk_decim returns the sky descriptor coo. The sky coordinate descriptor +is defined even if an error is detected in reading the image celestial +coordinate system, and must be freed with a call to sk_close before +task termination. + +.ih +NOTES +Type "help ccsystems" to see the list of the supported sky coordinate systems. + +Type "help mwcs$MWCS.hlp fi+" to find out more about the IRAF image world +coordinate system library MWCS. +SEE ALSO +skdecwcs, skdecwstr, skcopy, skclose +.endhelp diff --git a/vendor/x11iraf/ximtool/clients.old/lib/skywcs/doc/skdecwcs.hlp b/vendor/x11iraf/ximtool/clients.old/lib/skywcs/doc/skdecwcs.hlp new file mode 100644 index 00000000..2081fd50 --- /dev/null +++ b/vendor/x11iraf/ximtool/clients.old/lib/skywcs/doc/skdecwcs.hlp @@ -0,0 +1,62 @@ +.help skdecwcs Mar00 Skywcs +.ih +NAME +skdecwcs -- open a sky coordinate descriptor using an image or system name +.ih +SYNOPSIS +stat = sk_decwcs (ccsystem, mw, coo, imcoo) + +.nf +char ccsystem # the input celestial coordinate system name +pointer mw # the output mwcs descriptor +pointer coo # the output sky coordinate descriptor +pointer imcoo # the input image sky coordinate descriptor +.fi +.ih +ARGUMENTS +.ls ccsystem. +The celestial coordinate system name. Ccsystem is a either an image system +name, e.g. "dev$ypix logical" or "dev$ypix world" or a system name, e.g. +"J2000" or "galactic". +.le +.ls mw +The output mwcs descriptor. A NULL value for mw is returned if the +image world coordinate system cannot be read or ccsystem is not an image +system name. +.le +.ls coo +The output sky coordinate descriptor. +.le +.ls imcoo +The parent image coordinate descriptor. Imcoo is set to NULL +except in cases where the sky coordinate descriptor for an image is +transformed and written back to the same image. +.le +.ih +DESCRIPTION +Sk_decwcs is an integer function which returns OK or ERR as its function +value. ERR is returned if a valid sky coordinate system cannot be opened, +OK otherwise. + +Sk_decwcs returns the image MWCS descriptor mw if ccsystem is an image +system, otherwise it returns NULL. The MWCS descriptor is used +to convert from pixel coordinates to world coordinates and vice versa. +The MWCS descriptor must be freed with a call to the MWCS routine +mw_close before task termination. + +Sk_decwcs returns the sky descriptor coo. The sky coordinate descriptor +is defined even if an error is detected in reading the image celestial +coordinate system, and must be freed with a call to sk_close before +task termination. + +.ih +NOTES +Type "help ccsystems" to see the list of the supported sky coordinate systems. + +Type "help mwcs$MWCS.hlp fi+" to find out more about the IRAF image world +coordinate system library MWCS. + + +SEE ALSO +skdecwstr, skdecim +.endhelp diff --git a/vendor/x11iraf/ximtool/clients.old/lib/skywcs/doc/skdecwstr.hlp b/vendor/x11iraf/ximtool/clients.old/lib/skywcs/doc/skdecwstr.hlp new file mode 100644 index 00000000..f81c2d48 --- /dev/null +++ b/vendor/x11iraf/ximtool/clients.old/lib/skywcs/doc/skdecwstr.hlp @@ -0,0 +1,46 @@ +.help skdecwstr Mar00 Skywcs +.ih +NAME +skdecwstr -- open a sky coordinate descriptor using a system name +.ih +SYNOPSIS +stat = sk_decwstr (csystem, coo, imcoo) + +.nf +char csystem # the input celestial coordinate system name +pointer coo # the output sky coordinate descriptor +pointer imcoo # the input image sky coordinate descriptor +.fi +.ih +ARGUMENTS +.ls csystem +The sky coordinates definition. Ccsystem is a system name, e.g. "J2000" +or "galactic. +.le +.ls coo +The output sky coordinate descriptor. +.le +.ls imcoo +The parent image coordinate descriptor. Imcoo is set to NULL +except in cases where the sky coordinate descriptor for an image is +transformed and written back to the same image. +.le +.ih +DESCRIPTION +Sk_decwstr is an integer function which returns OK or ERR as its function +value. ERR is returned if a valid sky coordinate system cannot be opened, +OK otherwise. + +Sk_decwstr returns the sky descriptor coo. The sky coordinate descriptor +is defined even if an error is detected in reading the image celestial +coordinate system, and must be freed with a call to sk_close before +task termination. + +.ih +NOTES + +Type "help ccsystems" to get a list of the supported sky coordinate systems. + +SEE ALSO +skdecwcs, skdecim, skcopy, skclose +.endhelp diff --git a/vendor/x11iraf/ximtool/clients.old/lib/skywcs/doc/skenwcs.hlp b/vendor/x11iraf/ximtool/clients.old/lib/skywcs/doc/skenwcs.hlp new file mode 100644 index 00000000..cc388108 --- /dev/null +++ b/vendor/x11iraf/ximtool/clients.old/lib/skywcs/doc/skenwcs.hlp @@ -0,0 +1,32 @@ +.help skenwcs Mar00 Skywcs +.ih +NAME +skenwcs -- encode a system name using a sky coordinate descriptor +.ih +SYNOPSIS + +call sk_enwcs (coo, csystem, maxch) + +.nf +pointer coo # the input sky coordinate descriptor +char csystem # the output system name +int maxch # the maximum size of the output system name +.fi +.ih +ARGUMENTS +.ls coo +The input sky coordinate descriptor +.le +.ls csystem +The output system name, e.g. "galactic". +.le +.ls maxch +The maximum size of the output system name. +.le +.ih +DESCRIPTION +Sk_enwcs returns the sky coordinate system name. +.ih +SEE ALSO +skdecwcs, skdecwstr +.endhelp diff --git a/vendor/x11iraf/ximtool/clients.old/lib/skywcs/doc/skequatorial.hlp b/vendor/x11iraf/ximtool/clients.old/lib/skywcs/doc/skequatorial.hlp new file mode 100644 index 00000000..4adc7590 --- /dev/null +++ b/vendor/x11iraf/ximtool/clients.old/lib/skywcs/doc/skequatorial.hlp @@ -0,0 +1,59 @@ +.help skequatorial Mar00 Skywcs +.ih +NAME +skequatorial -- apply pm and transform between equatorial coordinate systems +.ih +SYNOPSIS +call sk_equatorial (incoo, outcoo, ilng, ilat, ipmlng, ipmlat, px, rv, + olng, olat) + +.nf +pointer incoo # the input sky coordinate descriptor +pointer outcoo # the output sky coordinate descriptor +double ilng, ilat # the input sky coordinates in radians +double ipmlng, ipmlat # the input proper motions in radians / year +double px # the input parallax in arcsec +double rv # the input radial velocity in km / sec (+ve receding) +double olng, olat # the output output sky coordinates in radians +.fi +.ih +ARGUMENTS +.ls incoo +The input sky coordinate descriptor. +.le +.ls parameter +.ls outcoo +The output sky coordinate descriptor. +.le +.ls ilng, ilat +The input sky coordinates in radians. +.le +.ls ipmlng, ipmlat +The input proper motions. If proper motions are unknown do not set ipmlng +and ipmlat to 0.0, use sk_ultran instead. Note that the ra proper motion +is in dra not cos (dec) * dra units. +.le +.ls px +The parallax in arcseconds. Use 0.0 if the proper motion is unknown unknown. +The parallax value is used only if proper motions are defined. +.le +.ls rv +The radial velocity in km / sec. Use 0.0 if the radial velocity is unknown. +The radial velocity value is used only if proper motions are defined. +.le +.ls olng, olat +The output sky coordinates in radians. +.le +.ih +DESCRIPTION +The coordinates in the input sky coordinate system are converted to +coordinates in the output sky coordinate system. +.ih +NOTES +If the proper motions are undefined use the routine sk_ultran. Zero valued +proper motions are not the same as undefined proper motions. + +.ih +SEE ALSO +sk_lltran, sk_ultran +.endhelp diff --git a/vendor/x11iraf/ximtool/clients.old/lib/skywcs/doc/skiiprint.hlp b/vendor/x11iraf/ximtool/clients.old/lib/skywcs/doc/skiiprint.hlp new file mode 100644 index 00000000..217819c2 --- /dev/null +++ b/vendor/x11iraf/ximtool/clients.old/lib/skywcs/doc/skiiprint.hlp @@ -0,0 +1,39 @@ +.help skiiprint Mar00 Skywcs +.ih +NAME +skiiprint -- print the sky coordinate system summary +.ih +SYNOPSIS + +call sk_iprint (label, imagesys, mw, coo) + +.nf +char label # the input user label +char imagesys # the input image system +pointer mw # the input mwcs descriptor +pointer coo # the sky coordinate descriptor +.fi +.ih +ARGUMENTS +.ls label +The input user supplied label, e.g. "Input System", "Ref System", +"Output System" etc. +.le +.ls imagesys +The input image system, e.g. "dev$ypix logical", "dev$ypix world", etc. +.le +.ls mwcs +The input image mwcs descriptor if defined. If mwcs is defined then +information about which sky coordinate corresponds to which image +axis etc is read from the mwcs descriptor. +.le +.ls coo +The input sky coordinate descriptor. +.le +.ih +DESCRIPTION +A summary of the sky coordinate system is printed on the standard output. +.ih +SEE ALSO +skiiwrite +.endhelp diff --git a/vendor/x11iraf/ximtool/clients.old/lib/skywcs/doc/skiiwrite.hlp b/vendor/x11iraf/ximtool/clients.old/lib/skywcs/doc/skiiwrite.hlp new file mode 100644 index 00000000..c82472f4 --- /dev/null +++ b/vendor/x11iraf/ximtool/clients.old/lib/skywcs/doc/skiiwrite.hlp @@ -0,0 +1,43 @@ +.help skiiwrite Mar00 Skywcs +.ih +NAME +skiiwrite -- write the sky coordinate system summary to a file +.ih +SYNOPSIS + +call sk_iiwrite (outfd, label, imagesys, mw, coo) + +.nf +int outfd # the input file descriptor +char label # the input user label +char imagesys # the input image system +pointer mw # the input mwcs descriptor +pointer coo # the sky coordinate descriptor +.fi +.ih +ARGUMENTS +.ls outfd +The input file descriptor. +.le +.ls label +The input user supplied label, e.g. "Input System", "Ref System", +"Output System" etc. +.le +.ls imagesys +The input image system, e.g. "dev$ypix logical", "dev$ypix world", etc. +.le +.ls mwcs +The input image mwcs descriptor if defined. If mwcs is defined then +information about which sky coordinate corresponds to which image +axis etc is read from the mwcs descriptor. +.le +.ls coo +The input sky coordinate descriptor. +.le +.ih +DESCRIPTION +A summary of the sky coordinate system is written to a file. +.ih +SEE ALSO +skiiprint +.endhelp diff --git a/vendor/x11iraf/ximtool/clients.old/lib/skywcs/doc/sklltran.hlp b/vendor/x11iraf/ximtool/clients.old/lib/skywcs/doc/sklltran.hlp new file mode 100644 index 00000000..a0040507 --- /dev/null +++ b/vendor/x11iraf/ximtool/clients.old/lib/skywcs/doc/sklltran.hlp @@ -0,0 +1,60 @@ +.help sklltran Mar00 Skywcs +.ih +NAME +sklltran -- apply pm and transform between coordinate systems +.ih +SYNOPSIS +call sk_lltran (incoo, outcoo, ilng, ilat, ipmlng, ipmlat, px, rv, olng, olat) + +.nf +pointer incoo # the input sky coordinate descriptor +pointer outcoo # the output sky coordinate descriptor +double ilng, ilat # the input sky coordinates in radians +double ipmlng, ipmlat # the input proper motions in radians / year +double px # the input parallax in arcsec +double rv # the input radial velocity in km / sec (+ve receding) +double olng, olat # the output sky coordinates in radians +.fi +.ih +ARGUMENTS +.ls incoo +The input sky coordinate descriptor. +.le +.ls parameter +.ls outcoo +The output sky coordinate descriptor. +.le +.ls ilng, ilat +The input sky coordinates in radians. +.le +.ls ipmlng, ipmlat +The input proper motions. For these to be applied the input coordinate +system must be an equatorial coordinate system. If proper motions are +unknown do not set ipmlng and ipmlat to 0.0, use sk_ultran instead. Note that +the ra proper motion is in dra not cos (dec) * dra units. +.le +.ls px +The parallax in arcseconds. Use 0.0 if the proper motion is unknown unknown. +The parallax value is used only if proper motions are defined. +.le +.ls rv +The radial velocity in km / sec. Use 0.0 if the radial velocity is unknown. +The radial velocity value is used only if proper motions are defined. +.le +.ls olng, olat +The onput sky coordinates in radians. +.le + +.ih +DESCRIPTION +The coordinates in the input sky coordinate system are converted to +coordinates in the output sky coordinate system. +.ih +NOTES +If the proper motions are undefined use the routine sk_ultran. Zero valued +proper motions are not the same as undefined proper motions. + +.ih +SEE ALSO +sk_ultran, sk_equatorial +.endhelp diff --git a/vendor/x11iraf/ximtool/clients.old/lib/skywcs/doc/sksaveim.hlp b/vendor/x11iraf/ximtool/clients.old/lib/skywcs/doc/sksaveim.hlp new file mode 100644 index 00000000..82c16f3f --- /dev/null +++ b/vendor/x11iraf/ximtool/clients.old/lib/skywcs/doc/sksaveim.hlp @@ -0,0 +1,39 @@ +.help sksaveim Mar00 Skywcs +.ih +NAME +sksaveim -- update the image header using a sky coordinate descriptor +.ih +SYNOPSIS +call sk_saveim (coo, mw, im) + +.nf +pointer coo # the input sky coordinate descriptor +pointer mw # the input mwcs descriptor +pointer im # the input image descriptor +.fi +.ih +ARGUMENTS +.ls coo +The input sky coordinate descriptor. +.le +.ls mw +The IRAF mwcs descriptor. +.le +.ls im +The input image descriptor. +.le +.ih +DESCRIPTION +The image world coordinate system is updated using information in +the sky coordinate descriptor and the mwcs descriptor. + +.ih +NOTES +Note that the sk_saveim call does not include a call to the MWCS mw_saveim +routine. This call must be made separately. + +Type "help mwcs$MWCS.hlp fi+" to find out more about the IRAF image world +coordinate system code. +SEE ALSO +skdecwcs, skdecim +.endhelp diff --git a/vendor/x11iraf/ximtool/clients.old/lib/skywcs/doc/sksetd.hlp b/vendor/x11iraf/ximtool/clients.old/lib/skywcs/doc/sksetd.hlp new file mode 100644 index 00000000..f518d71c --- /dev/null +++ b/vendor/x11iraf/ximtool/clients.old/lib/skywcs/doc/sksetd.hlp @@ -0,0 +1,53 @@ +.help sksetd Mar00 Skywcs +.ih +NAME +sksetd -- set a double sky coordinate descriptor parameter +.ih +SYNOPSIS +include + +call sk_setd (coo, parameter, dval) + +.nf +pointer coo # the input sky coordinate descriptor +int parameter # the double parameter to be set +double dval # the value of the parameter to be set +.fi +.ih +ARGUMENTS +.ls coo +The sky coordinate descriptor. +.le +.ls parameter +The parameter to be set. The double parameter definitions in skywcs.h are: +.nf + S_VXOFF # the logical ra / longitude offset in pixels + S_VYOFF # the logical dec / latitude offset in pixels + S_VXSTEP # the logical ra / longitude step size in pixels + S_VYSTEP # the logical dec / latitude step size in pixels + S_EQUINOX # the equinox in years + S_EPOCH # the MJD of the observation +.fi +.le +.ls dval +The value of the parameter to be set. +.le +.ih +DESCRIPTION +Sk_setd sets the values of double sky coordinate descriptor parameters. +.ih +NOTES +The offsets and step sizes default to 0 and 1 for both axes. However +if the sky coordinate descriptor was derived from an input image section, e.g. +"dev$ypix[100:300,100:300]" these numbers may assume other values in some +circumstances. + +The equinox and epoch of observation are normally set by the calling program +when the sky coordinate descriptor is initialized, e.g. they default +to 2000.0 and 51544.50000 if the input coordinate system was "fk5". + +In most cases these parameters should not be set by the user. +.ih +SEE ALSO +skseti, sksets +.endhelp diff --git a/vendor/x11iraf/ximtool/clients.old/lib/skywcs/doc/skseti.hlp b/vendor/x11iraf/ximtool/clients.old/lib/skywcs/doc/skseti.hlp new file mode 100644 index 00000000..b08be476 --- /dev/null +++ b/vendor/x11iraf/ximtool/clients.old/lib/skywcs/doc/skseti.hlp @@ -0,0 +1,93 @@ +.help skseti Mar00 Skywcs +.ih +NAME +skseti -- set an integer sky coordinate descriptor parameter +.ih +SYNOPSIS +include + +call sk_seti (coo, parameter, ival) + +.nf +pointer coo # the input sky coordinate descriptor +int parameter # the integer parameter to be set +int ival # the value of the parameter to be set +.fi +.ih +ARGUMENTS +.ls coo +The sky coordinate descriptor. +.le +.ls parameter +The parameter to be set. The double parameter definitions in skywcs.h are: +.nf + S_CTYPE # the celestial coordinate system type + S_RADECSYS # the equatorial system type + S_NLNGUNITS # the ra / longitude units + S_NLATUNITS # the dec/ latitude units + S_WTYPE # the projection type + S_PLNGAX # the physical ra / longitude axis + S_PLATAX # the physical dec / latitude axis + S_XLAX # the logical ra / longitude axis + S_YLAX # the logical dec / latitude axis + S_PIXTYPE # the IRAF pixel coordinate system type + S_NLNGAX # the length of ra / longitude axis + S_NLATAX # the length of dec / latitude axis + S_STATUS # the coordinate system status +.fi +.le +.ls ival +The value of the parameter to be set. +.le +.ih +DESCRIPTION +Sk_seti sets the values of integer sky coordinate descriptor parameters. +.ih +NOTES +Permitted values of S_CTYPE are CTYPE_EQUATORIAL, CTYPE_ECLIPTIC, +CTYPE_GALACTIC, and CTYPE_SUPERGALACTIC. The corresponding string dictionary +is CTYPE_LIST. + +Permitted types of S_RADECSYS are EQTYPE_FK4, EQTYPE_FK4NOE, +EQTYPE_FK5, EQTYPE, ICRS, and EQTYPE_GAPPT. The corresponding string +dictionary is EQTYPE_LIST. + +Permitted values of S_WTYPE are WTYPE_LIN, WTYPE_AZP, WTYPE_TAN, WTYPE_SIN, +WTYPE_STG, WTYPE_ARC, WTYPE_ZPN, WTYPE_ZEA, WTYPE_AIR, WTYPE_CYP, WTYPE_CAR, +WTYPE_MER, WTYPE_CEA, WTYPE_COP, WTYPE_COD, WTYPE_COE, WTYPE_COO, WTYPE_BON, +WTYPE_PCO, WTYPE_GLS, WTYPE_PAR, WTYPE_AIT, WTYPE_MOL, WTYPE_CSC, WTYPE_QSC, +WTYPE_TSC, WTYPE_TNX, WTYPE_ZPX. The corresponding string dictionary is +WTYPE_LIST. + +Permitted values of S_PIXTYPE are PIXTYPE_LOGICAL, PIXTYPE_TV, +PIXTYPE_PHYSICAL. and PIXTPE_WORLD. The corresponding string dictionary +is PIXTYPE_LIST. + +Permitted values of S_NLNGUNITS are SKY_HOURS, SKY_DEGREES, and SKY_RADIANS. +The corresponding string dictionary is SKY_LNG_UNITLIST. +Permitted values of S_NLATUNITS are SKY_DEGREES, and SKY_RADIANS. +The corresponding string dictionary is SKY_LAT_UNITLIST. + +The parameters S_CTYPE, S_RADECSYS, S_NLNGUNITS, and S_NLATUNITS are +important for all sky coordinate descriptors regardless of the source. +The parameters S_WTYPE, S_PLNGAX, S_PLATAX, S_XLAX, S_YLAX, S_PIXTYPE, +S_NLNGAX, and S_NLATAX are only important for sky coordinate descriptors +derived from an image sky coordinate systems. S_STATUS is OK if the sky +coordinate descriptor describes a valid celestial coordinate system, ERR +otherwise. + +In most cases these parameters should not be modified by the user. The +major exceptions are the units parameters S_NLNGUNITS and N_LATUNITS +which assumes default values fo hours and degrees for equatorial sky +coordinate systems and degrees and degrees for other sky coordinate systems. +If the user input and output units are different from the normal defaults +then the units parameters should be set appropriately. + +Parameters that occasionally need to be reset when a coordinate system +is created, edited, or saved to an image are S_WTYPE, S_PIXTYPE, S_PLNGAX, +and S_PLATAX. + +.ih +SEE ALSO +sksetd, sksets +.endhelp diff --git a/vendor/x11iraf/ximtool/clients.old/lib/skywcs/doc/sksets.hlp b/vendor/x11iraf/ximtool/clients.old/lib/skywcs/doc/sksets.hlp new file mode 100644 index 00000000..8e4179b4 --- /dev/null +++ b/vendor/x11iraf/ximtool/clients.old/lib/skywcs/doc/sksets.hlp @@ -0,0 +1,36 @@ +.help sksets Mar00 Skywcs +.ih +NAME +sksets -- set a string sky coordinate descriptor parameter +.ih +SYNOPSIS +include + +call sk_sets (coo, parameter, str) + +.nf +pointer coo # the input sky coordinate descriptor +int parameter # the string parameter to be set +char str # the value of the string parameter to be set +.fi +.ih +ARGUMENTS +.ls coo +The sky coordinate descriptor. +.le +.ls parameter +The parameter to be set. The string parameter definitions in skywcs.h are: +.nf + S_COOSYSTEM # the celestial coordinate system name +.fi +.le +.ls str +The value of the parameter to be set. +.le +.ih +DESCRIPTION +Sk_sets sets the values of string sky coordinate descriptor parameters. +.ih +SEE ALSO +sksetd, skseti +.endhelp diff --git a/vendor/x11iraf/ximtool/clients.old/lib/skywcs/doc/skstatd.hlp b/vendor/x11iraf/ximtool/clients.old/lib/skywcs/doc/skstatd.hlp new file mode 100644 index 00000000..52dc0c70 --- /dev/null +++ b/vendor/x11iraf/ximtool/clients.old/lib/skywcs/doc/skstatd.hlp @@ -0,0 +1,49 @@ +.help skstatd Mar00 Skywcs +.ih +NAME +skstatd -- get a double sky coordinate descriptor parameter +.ih +SYNOPSIS +include + +dval = sk_statd (coo, parameter) + +.nf +pointer coo # the input sky coordinate descriptor +int parameter # the double parameter to be returned +.fi +.ih +ARGUMENTS +.ls coo +The sky coordinate descriptor. +.le +.ls parameter +The oarameter to be returned. The double parameter definitions in skywcs.h are: +.nf + S_VXOFF # the logical ra / longitude offset in pixels + S_VYOFF # the logical dec / latitude offset in pixels + S_VXSTEP # the logical ra / longitude step size in pixels + S_VYSTEP # the logical dec / latitude step size in pixels + S_EQUINOX # the equinox in years + S_EPOCH # the MJD of the observation +.fi +.le +.ih +DESCRIPTION +Sk_statd returns the values of double sky coordinate descriptor parameters. + +.ih +NOTES +The offsets and step sizes default to 0 and 1 for both axes. However +if the sky coordinate descriptor was derived from an input image section, e.g. +"dev$ypix[100:300,100:300]" these numbers may assume other values in some +circumstances. + +The equinox and epoch of observation are normally set by the calling program +when the sky coordinate descriptor is initialized, e.g. they default +to 2000.0 and 51544.50000 if the input coordinate system was "fk5". + +.ih +SEE ALSO +skstati, skstats +.endhelp diff --git a/vendor/x11iraf/ximtool/clients.old/lib/skywcs/doc/skstati.hlp b/vendor/x11iraf/ximtool/clients.old/lib/skywcs/doc/skstati.hlp new file mode 100644 index 00000000..90d33eb1 --- /dev/null +++ b/vendor/x11iraf/ximtool/clients.old/lib/skywcs/doc/skstati.hlp @@ -0,0 +1,79 @@ +.help skstati Mar00 Skywcs +.ih +NAME +skstati -- get an integer sky coordinate descriptor parameter +.ih +SYNOPSIS +include + +ival = sk_stati (coo, parameter) + +.nf +pointer coo # the input sky coordinate descriptor +int parameter # the integer parameter to be returned +.fi +.ih +ARGUMENTS +.ls coo +The sky coordinate descriptor. +.le +.ls parameter +Parameter to be returned. The integer parameter definitions in skywcs.h are: +.nf + S_CTYPE # the celestial coordinate system type + S_RADECSYS # the equatorial system type + S_NLNGUNITS # the ra / longitude units + S_NLATUNITS # the dec/ latitude units + S_WTYPE # the projection type + S_PLNGAX # the physical ra / longitude axis + S_PLATAX # the physical dec / latitude axis + S_XLAX # the logical ra / longitude axis + S_YLAX # the logical dec / latitude axis + S_PIXTYPE # the IRAF pixel coordinate system type + S_NLNGAX # the length of the ra / longitude axis + S_NLATAX # the length of the dec / latitude axis + S_STATUS # the coordinate system status +.fi +.le +.ih +DESCRIPTION +Sk_stati returns the values of integer sky coordinate descriptor parameters. + +.ih +NOTES +Permitted values of S_CTYPE are CTYPE_EQUATORIAL, CTYPE_ECLIPTIC, +CTYPE_GALACTIC, and CTYPE_SUPERGALACTIC. The corresponding string dictionary +is CTYPE_LIST. + +Permitted types of S_RADECSYS are EQTYPE_FK4, EQTYPE_FK4NOE, +EQTYPE_FK5, EQTYPE, ICRS, and EQTYPE_GAPPT. The corresponding string +dictionary is EQTYPE_LIST. + +Permitted values of S_WTYPE are WTYPE_LIN, WTYPE_AZP, WTYPE_TAN, WTYPE_SIN, +WTYPE_STG, WTYPE_ARC, WTYPE_ZPN, WTYPE_ZEA, WTYPE_AIR, WTYPE_CYP, WTYPE_CAR, +WTYPE_MER, WTYPE_CEA, WTYPE_COP, WTYPE_COD, WTYPE_COE, WTYPE_COO, WTYPE_BON, +WTYPE_PCO, WTYPE_GLS, WTYPE_PAR, WTYPE_AIT, WTYPE_MOL, WTYPE_CSC, WTYPE_QSC, +WTYPE_TSC, WTYPE_TNX, WTYPE_ZPX. The corresponding string dictionary is +WTYPE_LIST. + +Permitted values of S_PIXTYPE are PIXTYPE_LOGICAL, PIXTYPE_TV, +PIXTYPE_PHYSICAL. and PIXTPE_WORLD. The corresponding string dictionary +is PIXTYPE_LIST. + +Permitted values of S_NLNGUNITS are SKY_HOURS, SKY_DEGREES, and SKY_RADIANS. +The corresponding string dictionary is SKY_LNG_UNITLIST. +Permitted values of S_NLATUNITS are SKY_DEGREES, and SKY_RADIANS. +The corresponding string dictionary is SKY_LAT_UNITLIST. + +The parameters S_CTYPE, S_RADECSYS, S_NLNGUNITS, and S_NLATUNITS are +important for all sky coordinate descriptors regardless of the source. +The parameters S_WTYPE, S_PLNGAX, S_PLATAX, S_XLAX, S_YLAX, S_PIXTYPE, +S_NLNGAX, and S_NLATAX are only important for sky coordinate descriptors +derived from an image sky coordinate systems. S_STATUS is OK if the sky +coordinate descriptor describes a valid celestial coordinate system, ERR +otherwise. + +.ih +SEE ALSO +skstatd, skstats +.endhelp diff --git a/vendor/x11iraf/ximtool/clients.old/lib/skywcs/doc/skstats.hlp b/vendor/x11iraf/ximtool/clients.old/lib/skywcs/doc/skstats.hlp new file mode 100644 index 00000000..483ed3e5 --- /dev/null +++ b/vendor/x11iraf/ximtool/clients.old/lib/skywcs/doc/skstats.hlp @@ -0,0 +1,40 @@ +.help skstats Mar00 Skywcs +.ih +NAME +skstats -- get a string sky coordinate descriptor parameter +.ih +SYNOPSIS +include + +call sk_stats (coo, parameter, str, maxch) + +.nf +pointer coo # the input sky coordinate descriptor +int parameter # the string parameter to be returned +char str # the returned string parameter value +int maxch # the maximum size of the returned string parameter +.fi +.ih +ARGUMENTS +.ls coo +The sky coordinate descriptor. +.le +.ls parameter +The parameter to be returned. The string parameter definitions in skywcs.h are: +.nf + S_COOSYSTEM # the celestial coordinate system name +.fi +.le +.ls str +The value of the returned string. +.le +.ls maxch +The maximum size of the returned string. +.le +.ih +DESCRIPTION +Sk_stats returns the values of string sky coordinate descriptor parameters. +.ih +SEE ALSO +skstati, skstatd +.endhelp diff --git a/vendor/x11iraf/ximtool/clients.old/lib/skywcs/doc/skultran.hlp b/vendor/x11iraf/ximtool/clients.old/lib/skywcs/doc/skultran.hlp new file mode 100644 index 00000000..417eaba6 --- /dev/null +++ b/vendor/x11iraf/ximtool/clients.old/lib/skywcs/doc/skultran.hlp @@ -0,0 +1,51 @@ +.help skultran Mar00 Skywcs +.ih +NAME +skultran -- transform between coordinate systems +.ih +SYNOPSIS +call sk_ultran (incoo, outcoo, ilng, ilat, olng, olat, npts) + +.nf +pointer incoo # the input sky coordinate descriptor +pointer outcoo # the output sky coordinate descriptor +double ilng, ilat # the input celestial coordinates in expected units +double olng, olat # the output celestial coordinates in expected units +int npts # the number of input and output coordinate pairs +.fi +.ih +ARGUMENTS +.ls incoo +The input sky coordinate descriptor. +.le +.ls parameter +.ls outcoo +The output sky coordinate descriptor. +.le +.ls ilng, ilat +The input sky coordinates in the units defined by the integer parameters +S_NLNGUNITS and S_NLATUNITS. +.le +.ls olng, olat +The output sky coordinates in the units defined by the integer parameters +S_NLNGUNITS and S_NLATUNITS. +.le +.ls npts +The number of input and output coordinate pairs. +.le +.ih +DESCRIPTION +The coordinates in the input coordinate system are converted to +coordinates in the output coordinates system. + +If the calling program has not set the S_NLNGUNITS and S_NLATUNITS parameters +in either system the expected coordinates are hours and degrees for +equatorial sky coordinate systems and degrees and degrees for other sky +coordinate systems. The calling program must either perform the necessary +coordinate conversions or set the units parameters in the input and output +sky coordinate descriptors appropriately. + +.ih +SEE ALSO +sk_lltran, sk_equatorial +.endhelp diff --git a/vendor/x11iraf/ximtool/clients.old/lib/skywcs/doc/skywcs.hd b/vendor/x11iraf/ximtool/clients.old/lib/skywcs/doc/skywcs.hd new file mode 100644 index 00000000..74bac140 --- /dev/null +++ b/vendor/x11iraf/ximtool/clients.old/lib/skywcs/doc/skywcs.hd @@ -0,0 +1,25 @@ +# Help directory for the SKYWCS library + +$doc = "./" +$source = "../" + +skdecwcs hlp=doc$skdecwcs.hlp, src=source$skdecode.x +skdecwstr hlp=doc$skdecwstr.hlp, src=source$skdecode.x +skdecim hlp=doc$skdecim.hlp, src=source$skdecode.x +skenwcs hlp=doc$skenwcs.hlp, src=source$skdecode.x +skcopy hlp=doc$skcopy.hlp, src=source$skdecode.x +skiiprint hlp=doc$skiiprint.hlp, src=source$skwrite.x +skiiwrite hlp=doc$skiiwrite.hlp, src=source$skwrite.x +skstati hlp=doc$skstati.hlp, src=source$skstat.x +skstatd hlp=doc$skstatd.hlp, src=source$skstat.x +skstats hlp=doc$skstats.hlp, src=source$skstat.x +skseti hlp=doc$skseti.hlp, src=source$skset.x +sksetd hlp=doc$sksetd.hlp, src=source$skset.x +sksets hlp=doc$sksets.hlp, src=source$skset.x +skultran hlp=doc$skultran.hlp, src=source$skytransform.x +sklltran hlp=doc$sklltran.hlp, src=source$skytransform.x +skequatorial hlp=doc$skequatorial.hlp, src=source$skytransform.x +sksaveim hlp=doc$sksaveim.hlp, src=source$sksaveim.x +skclose hlp=doc$skclose.hlp, src=source$skdecode.x + +ccsystems hlp=doc$ccsystems.hlp diff --git a/vendor/x11iraf/ximtool/clients.old/lib/skywcs/doc/skywcs.hlp b/vendor/x11iraf/ximtool/clients.old/lib/skywcs/doc/skywcs.hlp new file mode 100644 index 00000000..498f9b43 --- /dev/null +++ b/vendor/x11iraf/ximtool/clients.old/lib/skywcs/doc/skywcs.hlp @@ -0,0 +1,306 @@ +.help skywcs Oct00 xtools +.ih +NAME +skywcs -- sky coordinates package +.ih +SYNOPSIS + +.nf + stat = sk_decwcs (ccsystem, mw, coo, imcoo) + stat = sk_decwstr (ccsystem, coo, imcoo) + stat = sk_decim (im, wcs, mw, coo) + sk_enwcs (coo, ccsystem, maxch) + newcoo = sk_copy (coo) + sk_iiprint (label, imagesys, mw, coo) + sk_iiwrite (fd, label, imagesys, mw, coo) +[id]val = sk_stat[id] (coo, param) + sk_stats (coo, param, str, maxch) + sk_set[id] (coo, param, [id]val) + sk_sets (coo, param, str) + sk_ultran (incoo, outcoo, ilng, ilat, olng, olat, npts) + sk_lltran (incoo, outoo, ilng, ilat, ipmlng, ipmlat, px, rv, + olng, olat) + sk_equatorial (incoo, outcoo, ilng, ilat, ipmlng, ipmlat, px, + rv, olng, olat) + sk_saveim (coo, mw, im) + sk_close (coo) + +.fi +.ih +DESCRIPTION + +The skywcs package contains a simple set of routines for doing managing +sky coordinate information and for transforming from one sky coordinate +system to another. The sky coordinate system is defined either by a system +name, e.g. "J2000", "galactic, etc. or by an image system name, e.g. +"dev$ypix" or "dev$ypix world". + +The skywcs routine are layered on the Starlink Positional Astronomy library +SLALIB which is installed in the IRAF MATH package. Type "help slalib +option=sys" for more information about SLALIB. + + +.ih +NOTES + +An "include " statement must be included in the calling program +to make the skywcs package parameter definitions visible to the calling +program. + +The sky coordinate descriptor is created with a call to one of the sk_decwcs +sk_decwstr or sk_imwcs routines. If the source of sky coordinate descriptor +is an image then an IRAF MWCS descriptor will be returned with the sky +oordinate descriptor. The sky coordinate descriptor is freed with a +call to sk_close. A separate call to mw_close must be made to free the +MWCS descriptor if one was allocated. + +By default the main skywcs coordinate transformation routine sk_ultran +assumes that the input and output sky coordinates are in hours and degrees +if the input and output coordinate systems are equatorial, otherwise the +coordinates are assumed to be in degrees and degrees. The default input and +output sky coordinate units can be reset with calls to sk_seti. Two lower level +coordinate transformations for handling proper motions sk_lltran and +sk_equatorial are also available. These routines that the input and output +coordinates and proper motions are in radians. + +Calling programs working with both sky coordinate and MWCS descriptors +need to be aware that the MWCS routines assume that all sky coordinates +must be input in degrees and will be output in degrees and adjust their +code accordingly. + +The skywcs routine sk_saveim can be used to update an image header. + + +.ih +EXAMPLES +.nf +Example 1: Convert from B1950 coordinates to J2000 coordinates. + + include + + .... + + # Open input coordinate system. + instat = sk_decwstr ("B1950", incoo, NULL) + if (instat == ERR) { + call sk_close (incoo) + return + } + + # Open output coordinate system. + outstat = sk_decwstr ("J2000", outcoo, NULL) + if (outstat == ERR) { + call sk_close (outcoo) + return + } + + # Do the transformation assuming the input coordinates are in hours + # and degrees. The output coordinates will be in hours and degrees + # as well. + call sk_ultran (incoo, outcoo, rain, decin, raout, decout, npts) + + # Close the coordinate descriptors. + call sk_close (incoo) + call sk_close (outcoo) + + ... + + +Example 2: Repeat example 1 but convert to galactic coordinates. + + include + + .... + + # Open the input coordinate system. + instat = sk_decwstr ("B1950", incoo, NULL) + if (instat == ERR) { + call sk_close (incoo) + return + } + + # Open the output coordinate system. + outstat = sk_decwstr ("galactic", outcoo, NULL) + if (outstat == ERR) { + call sk_close (outcoo) + return + } + + # Dd the transformation assuming the input coordinates are in hours and + # degrees. The output coordinates will be in degrees and degrees. + call sk_ultran (incoo, outcoo, rain, decin, raout, decout, npts) + + # Close the coordinate descriptors. + call sk_close (incoo) + call sk_close (outcoo) + + ... + +Example 3: Convert a grid of pixel coordinates in the input image to the + equivalent pixel coordinate in the output image using the + image world coordinate systems to connect the two. + + include + + .... + + # Mwref will be defined because the input system is an image. + refstat = sk_decwcs ("refimage logical", mwref, refcoo, NULL) + if (refstat == ERR || mwref == NULL) { + if (mwref != NULL) + call mw_close (mwref) + call sk_close (refcoo) + return + } + + # Set the reference coordinate descriptor so it expects input in degrees + # and degrees. + call sk_seti (refcoo, S_NLNGUNUTS, SKY_DEGREES) + call sk_seti (refcoo, S_NLATUNUTS, SKY_DEGREES) + + # Mwout will be defined because the output system is an image. + outstat = sk_decwcs ("image logical", mwout, outcoo, NULL) + if (outstat == ERR || mwout == NULL) { + if (mwout != NULL) + call mw_close (mwout) + call sk_close (outcoo) + call mw_close (mwref) + call sk_close (refcoo) + return + } + + # Set the output coordinate descriptor so it will output coordinates + # in degrees and degrees. + call sk_seti (outcoo, S_NLNGUNUTS, SKY_DEGREES) + call sk_seti (outcoo, S_NLATUNUTS, SKY_DEGREES) + + # Compute pixel grid in refimage and store coordinate in the arrays + # xref and yref. + npts = 0 + do j = 1, IM_LEN(im,2), 100 { + do i = 1, IM_LEN(im,1), 100 { + npts = npts + 1 + xref[npts] = i + yref[npts] = j + } + } + + # Convert xref and yref to celestial coordinates raref and decref using + # mwref. The output coordinates will be in degrees and degrees. + ctref = mw_sctran (mwref, "logical", "world", 03B) + do i = 1, npts + call mw_c2trand (ctref, xref[i], yref[i], raref[i], decref[i]) + call ct_free (ctref) + + # Convert the reference celestial coordinates to the output celestial + # coordinate system using the coordinate descriptors. + call sk_ultran (refcoo, outcoo, raref, decref, raout, decout, npts) + + # Convert the output celestial coordinates to pixel coordinates in + # the other image using mwout. + ctout = mw_sctran (mwout, "world", "logical", 03B) + do i = 1, npts + call mw_c2trand (ctout, raout[i], decout[i], xout[i], yout[i]) + call ct_free (ctout) + + # Print the input and output pixel coordinates. + do i = 1, npts { + call printf ("%10.3f %10.3f %10.3f %10.3f\n") + call pargd (xref[i]) + call pargd (yref[i]) + call pargd (xout[i]) + call pargd (yout[i]) + } + + # Tidy up. + call mw_close (mwref) + call mw_close (mwout) + call sk_close (refcoo) + call sk_close (outcoo) + + +Example 4: Convert a 2D image with an J2000 tangent plane projection + wcs to the equivalent galactic wcs. The transformation + requires a shift in origin and a rotation. Assume that the ra + axis is 1 and the dec axis is 2. The details of how to compute + the rotation are not shown here. See the + imcctran task for details. + + include + include + + ... + + # Open image. + im = immap (image, READ_WRITE, 0) + + # Open the image coordinate system. + instat = sk_decim (im, "logical", mwin, cooin) + if (instat == ERR || mwin == NULL) { + ... + call sk_close (cooin) + ... + } + + # Get the dimensions of the mwcs descriptor. This should be 2. + ndim = mw_ndim (mwin, MW_NPHYSDIM) + + # Get the default coordinates to degrees and degreees. + call sk_seti (cooin, S_NLNGUNITS, SKY_DEGREES) + call sk_seti (cooin, S_NATGUNITS, SKY_DEGREES) + + # Open the output coordinate system. Mwout is NULL because this system + # is not an image. + outstat = sk_decwstr ("galactic", mwout, cooout, cooin) + if (outstat == ERR) { + ... + call sk_close (outstat) + ... + } + + # Make a copy of the mwcs descriptor. + mwout = mw_newcopy (mwin) + + # Allocate space for the r and w vectors and cd matrix. + call malloc (r, ndim, TY_DOUBLE) + call malloc (w, ndim, TY_DOUBLE) + call malloc (cd, ndim * ndim, TY_DOUBLE) + call malloc (newcd, ndim * ndim, TY_DOUBLE) + + # Assume for simplicty that the MWCS LTERM is the identify transform. + # so we don't have to worry about it. Get the WTERM which consists + # of r the reference point in pixels, w the reference point in degrees, + # and the cd matrix in degrees per pixel. + call mw_gwtermd (mwin, Memd[r], Memd[w], Memd[cd], ndim) + + # Convert the world coordinates zero point. The pixel zero point + # remains the same. + tilng = Memd[w] + tilat = Memd[w+1] + call sk_ultran (incoo, outcoo, tilng, tilat, tolng, tolat, 1) + Memd[w] = tolng + Memd[w+1] = tolat + + # Figure out how much to rotate the coordinate system and edit the + # compute a new CD matrix. Call it newcd. + ... + + # Enter the new CD matrix and zero point. + call mw_swterm (mwout, Memd[r], Memd[w], Memd[newcd], ndim) + + # Update the header. + call sk_saveim (cooout, mwout, im) + call mw_saveim (mwout, im) + ... + + # Tidy up. + call mfree (r, TY_DOUBLE) + call mfree (w, TY_DOUBLE) + call mfree (cd, TY_DOUBLE) + call mfree (newcd, TY_DOUBLE) + call mw_close (mwin) + call mw_close (mwout) + call sk_close (cooin) + call sk_close (cooout) + call imunmap (im) +.fi diff --git a/vendor/x11iraf/ximtool/clients.old/lib/skywcs/doc/skywcs.men b/vendor/x11iraf/ximtool/clients.old/lib/skywcs/doc/skywcs.men new file mode 100644 index 00000000..9eecc277 --- /dev/null +++ b/vendor/x11iraf/ximtool/clients.old/lib/skywcs/doc/skywcs.men @@ -0,0 +1,15 @@ + skdecwcs - Open a sky coordinate descriptor usning an image or system name + skdecwstr - Open a sky coordinate descriptor using a system name + skdecim - Open a sky coordinate descriptor using an image descriptor + skenwcs - Encode a system name using a sky coordinate descriptor + skcopy - Copy a sky coordinate descriptor + skstat[ids] - Get a sky coordinate descriptor parameter value + skset[ids] - Set a sky coordinate descriptor parameter value + skiiprint - Print a sky coordinate descriptor summary + skiiwrite - Write a sky coordinate descriptor summary + skultran - Transform between coordinate systems + sklltran - Apply pm and transform between coordinates systems +skequatorial - Apply pm and transform between equatorial coordinate systems + sksaveim - Update image header using sky coordinate descriptor + skclose - Close the sky coordinate descriptor + ccsystems - Describe the supported celestial coordinate systems diff --git a/vendor/x11iraf/ximtool/clients.old/lib/skywcs/mkpkg b/vendor/x11iraf/ximtool/clients.old/lib/skywcs/mkpkg new file mode 100644 index 00000000..ad049271 --- /dev/null +++ b/vendor/x11iraf/ximtool/clients.old/lib/skywcs/mkpkg @@ -0,0 +1,16 @@ +# Libary for the celestial coordinate sytem pacakge + +$checkout libpkg.a ../../ +$update libpkg.a +$checkin libpkg.a ../../ +$exit + +libpkg.a: + skdecode.x skywcsdef.h skywcs.h + skwrite.x skywcsdef.h skywcs.h + skstat.x skywcsdef.h skywcs.h + skset.x skywcsdef.h skywcs.h + sktransform.x skywcsdef.h skywcs.h + sksaveim.x skywcsdef.h skywcs.h + skwrdstr.x + ; diff --git a/vendor/x11iraf/ximtool/clients.old/lib/skywcs/skdecode.f b/vendor/x11iraf/ximtool/clients.old/lib/skywcs/skdecode.f new file mode 100644 index 00000000..03e49f1b --- /dev/null +++ b/vendor/x11iraf/ximtool/clients.old/lib/skywcs/skdecode.f @@ -0,0 +1,1412 @@ + integer function skdecs (instr, mw, coo, imcoo) + logical Memb(1) + integer*2 Memc(1) + integer*2 Mems(1) + integer Memi(1) + integer*4 Meml(1) + real Memr(1) + double precision Memd(1) + complex Memx(1) + equivalence (Memb, Memc, Mems, Memi, Meml, Memr, Memd, Memx) + common /Mem/ Memd + integer mw + integer coo + integer imcoo + integer*2 instr(*) + integer stat + integer sp + integer str1 + integer str2 + integer laxno + integer paxval + integer im + integer skstrs + integer skdecm + integer immap + logical xerpop + logical xerflg + common /xercom/ xerflg + integer sw0001 + save + call xcallc(coo, (30 + 255 + 1), 10 ) + call xstrcy(instr, memc((((coo+25)-1)*2+1)) , 255 ) + call smark (sp) + call salloc (str1, 1023 , 2) + call salloc (str2, 1023 , 2) + call salloc (laxno, 7 , 4) + call salloc (paxval, 7 , 4) + call sscan (instr) + call gargwd (memc(str1), 1023 ) + call gargwd (memc(str2), 1023 ) + call xerpsh + im = immap (memc(str1), 1 , 0) + if (xerflg) goto 112 +112 if (.not.xerpop()) goto 110 + mw = 0 + if (.not.(imcoo .eq. 0)) goto 120 + memi(coo+20) = 2048 + memi(coo+21) = 2048 + memi(coo+15) = 1 + memi(coo+16) = 2 + memi(coo+17) = 1 + memi(coo+18) = 2 + memd((((coo)-1)/2+1)) = 0.0d0 + memd((((coo+2)-1)/2+1)) = 0.0d0 + memd((((coo+4)-1)/2+1)) = 1.0d0 + memd((((coo+6)-1)/2+1)) = 1.0d0 + memi(coo+14) = 0 + goto 121 +120 continue + memi(coo+20) = memi(imcoo+20) + memi(coo+21) = memi(imcoo+21) + memi(coo+15) = memi(imcoo+15) + memi(coo+16) = memi(imcoo+16) + memi(coo+17) = memi(imcoo+17) + memi(coo+18) = memi(imcoo+18) + memd((((coo)-1)/2+1)) = memd((((imcoo)-1)/2+1)) + memd((((coo+2)-1)/2+1)) = memd((((imcoo+2)-1)/2+1)) + memd((((coo+4)-1)/2+1)) = memd((((imcoo+4)-1)/2+1)) + memd((((coo+6)-1)/2+1)) = memd((((imcoo+6)-1)/2+1)) + memi(coo+14) = memi(imcoo+14) +121 continue + memi(coo+19) = 4 + stat = skstrs (instr, memi(coo+12) , memi(coo+13) , memd(((( + * coo+8)-1)/2+1)) , memd((((coo+10)-1)/2+1)) ) + sw0001=(memi(coo+12) ) + goto 130 +140 continue + memi(coo+22) = 3 + memi(coo+23) = 1 + goto 131 +150 continue + memi(coo+22) = 1 + memi(coo+23) = 1 + goto 131 +130 continue + if (sw0001.eq.1) goto 140 + goto 150 +131 continue + goto 111 +110 continue + stat = skdecm (im, memc(str2), mw, coo) + call imunmp (im) +111 continue + call sfree (sp) + memi(coo+24) = stat + skdecs = (stat) + goto 100 +100 return + end + integer function skdecr (instr, coo, imcoo) + logical Memb(1) + integer*2 Memc(1) + integer*2 Mems(1) + integer Memi(1) + integer*4 Meml(1) + real Memr(1) + double precision Memd(1) + complex Memx(1) + equivalence (Memb, Memc, Mems, Memi, Meml, Memr, Memd, Memx) + common /Mem/ Memd + integer coo + integer imcoo + integer*2 instr(*) + integer stat + integer skstrs + integer sw0001 + save + call xcallc(coo, (30 + 255 + 1), 10 ) + call xstrcy(instr, memc((((coo+25)-1)*2+1)) , 255 ) + if (.not.(imcoo .eq. 0)) goto 110 + memi(coo+20) = 2048 + memi(coo+21) = 2048 + memi(coo+15) = 1 + memi(coo+16) = 2 + memi(coo+17) = 1 + memi(coo+18) = 2 + memd((((coo)-1)/2+1)) = 0.0d0 + memd((((coo+2)-1)/2+1)) = 0.0d0 + memd((((coo+4)-1)/2+1)) = 1.0d0 + memd((((coo+6)-1)/2+1)) = 1.0d0 + memi(coo+14) = 0 + goto 111 +110 continue + memi(coo+20) = memi(imcoo+20) + memi(coo+21) = memi(imcoo+21) + memi(coo+15) = memi(imcoo+15) + memi(coo+16) = memi(imcoo+16) + memi(coo+17) = memi(imcoo+17) + memi(coo+18) = memi(imcoo+18) + memd((((coo)-1)/2+1)) = memd((((imcoo)-1)/2+1)) + memd((((coo+2)-1)/2+1)) = memd((((imcoo+2)-1)/2+1)) + memd((((coo+4)-1)/2+1)) = memd((((imcoo+4)-1)/2+1)) + memd((((coo+6)-1)/2+1)) = memd((((imcoo+6)-1)/2+1)) + memi(coo+14) = memi(imcoo+14) +111 continue + memi(coo+19) = 4 + stat = skstrs (instr, memi(coo+12) , memi(coo+13) , memd((((coo + * +8)-1)/2+1)) , memd((((coo+10)-1)/2+1)) ) + sw0001=(memi(coo+12) ) + goto 120 +130 continue + memi(coo+22) = 3 + memi(coo+23) = 1 + goto 121 +140 continue + memi(coo+22) = 1 + memi(coo+23) = 1 + goto 121 +120 continue + if (sw0001.eq.1) goto 130 + goto 140 +121 continue + memi(coo+24) = stat + skdecr = (stat) + goto 100 +100 return + end + integer function skdecm (im, wcs, mw, coo) + logical Memb(1) + integer*2 Memc(1) + integer*2 Mems(1) + integer Memi(1) + integer*4 Meml(1) + real Memr(1) + double precision Memd(1) + complex Memx(1) + equivalence (Memb, Memc, Mems, Memi, Meml, Memr, Memd, Memx) + common /Mem/ Memd + integer im + integer mw + integer coo + integer*2 wcs(*) + integer stat + integer sp + integer str1 + integer laxno + integer paxval + integer skimws + integer strdic + integer mwstai + integer mwopem + logical xerpop + logical xerflg + common /xercom/ xerflg + integer sw0001 + integer*2 st0001(6) + integer*2 st0002(28) + save + integer iyy + data st0001 / 37,115, 32, 37,115, 0/ + data (st0002(iyy),iyy= 1, 8) /124,108,111,103,105, 99, 97,108/ + data (st0002(iyy),iyy= 9,16) /124,116,118,124,112,104,121,115/ + data (st0002(iyy),iyy=17,24) /105, 99, 97,108,124,119,111,114/ + data (st0002(iyy),iyy=25,28) /108,100,124, 0/ + call xmallc(coo, (30 + 255 + 1), 10 ) + call sprinf (memc((((coo+25)-1)*2+1)) , 255 , st0001) + call pargsr (memc((((im+200 +165)-1)*2+1)) ) + call pargsr (wcs) + call smark (sp) + call salloc (str1, 1023 , 2) + call salloc (laxno, 7 , 4) + call salloc (paxval, 7 , 4) + call xerpsh + mw = mwopem (im) + if (xerflg) goto 112 +112 if (.not.xerpop()) goto 110 + memi(coo+12) = 0 + memi(coo+13) = 0 + memd((((coo+8)-1)/2+1)) = 1.6d308 + memd((((coo+10)-1)/2+1)) = 1.6d308 + mw = 0 + memi(coo+15) = 1 + memi(coo+16) = 2 + memi(coo+17) = 1 + memi(coo+18) = 2 + memi(coo+20) = 2048 + memi(coo+21) = 2048 + memd((((coo)-1)/2+1)) = 0.0d0 + memd((((coo+2)-1)/2+1)) = 0.0d0 + memd((((coo+4)-1)/2+1)) = 1.0d0 + memd((((coo+6)-1)/2+1)) = 1.0d0 + memi(coo+14) = 0 + memi(coo+19) = 1 + memi(coo+22) = 1 + memi(coo+23) = 1 + stat = -1 + goto 111 +110 continue + memi(coo+19) = strdic (wcs, memc(str1), 1023 , st0002) + if (.not.(memi(coo+19) .le. 0)) goto 120 + memi(coo+19) = 1 +120 continue + if (.not.(skimws (im, mw, memi(coo+12) , memi(coo+15) , memi + * (coo+16) , memi(coo+14) , memi(coo+13) , memd((((coo+8)-1)/2 + * +1)) , memd((((coo+10)-1)/2+1)) ) .eq. 0)) goto 130 + sw0001=(memi(coo+12) ) + goto 140 +150 continue + memi(coo+22) = 3 + memi(coo+23) = 1 + goto 141 +160 continue + memi(coo+22) = 1 + memi(coo+23) = 1 + goto 141 +140 continue + if (sw0001.eq.1) goto 150 + goto 160 +141 continue + call mwgaxp (mw, memi(laxno), memi(paxval), mwstai(mw, 5 + * )) + if (.not.(memi(laxno+memi(coo+15) -1) .lt. memi(laxno+ + * memi(coo+16) -1))) goto 170 + memi(coo+17) = memi(laxno+memi(coo+15) -1) + memi(coo+18) = memi(laxno+memi(coo+16) -1) + goto 171 +170 continue + memi(coo+17) = memi(laxno+memi(coo+16) -1) + memi(coo+18) = memi(laxno+memi(coo+15) -1) +171 continue + if (.not.(memi(coo+17) .le. 0 .or. memi(coo+18) .le. 0)) + * goto 180 + memd((((coo)-1)/2+1)) = 0.0d0 + memd((((coo+2)-1)/2+1)) = 0.0d0 + memd((((coo+4)-1)/2+1)) = 1.0d0 + memd((((coo+6)-1)/2+1)) = 1.0d0 + memi(coo+20) = 2048 + memi(coo+21) = 2048 + stat = -1 + goto 181 +180 continue + memd((((coo)-1)/2+1)) = meml(im+memi(im+memi(coo+17) + + * 47-1) +54-1) + memd((((coo+2)-1)/2+1)) = meml(im+memi(im+memi(coo+18) + * +47-1) +54-1) + memd((((coo+4)-1)/2+1)) = memi(im+memi(coo+17) +59-1) + memd((((coo+6)-1)/2+1)) = memi(im+memi(coo+18) +59-1) + memi(coo+20) = meml(im+200 +memi(coo+17) +8-1) + memi(coo+21) = meml(im+200 +memi(coo+18) +8-1) + stat = 0 +181 continue + goto 131 +130 continue + call mwcloe (mw) + mw = 0 + memi(coo+17) = 1 + memi(coo+18) = 2 + memi(coo+20) = 2048 + memi(coo+21) = 2048 + memd((((coo)-1)/2+1)) = 0.0d0 + memd((((coo+2)-1)/2+1)) = 0.0d0 + memd((((coo+4)-1)/2+1)) = 1.0d0 + memd((((coo+6)-1)/2+1)) = 1.0d0 + memi(coo+22) = 1 + memi(coo+23) = 1 + stat = -1 +131 continue +111 continue + call sfree (sp) + memi(coo+24) = stat + skdecm = (stat) + goto 100 +100 return + end + integer function skstrs (instr, ctype, radecs, equinx, epoch) + integer ctype + integer radecs + double precision equinx + double precision epoch + integer*2 instr(*) + integer ip + integer nitems + integer sctype + integer srades + integer stat + logical Memb(1) + integer*2 Memc(1) + integer*2 Mems(1) + integer Memi(1) + integer*4 Meml(1) + real Memr(1) + double precision Memd(1) + complex Memx(1) + equivalence (Memb, Memc, Mems, Memi, Meml, Memr, Memd, Memx) + common /Mem/ Memd + integer sp + integer str1 + integer str2 + integer strdic + integer nscan + integer ctod + double precision slej2d + double precision slepb + double precision sleb2d + double precision slepj + integer sw0001,sw0002,sw0003 + integer*2 st0001(63) + save + integer iyy + data (st0001(iyy),iyy= 1, 8) /124,102,107, 52,124,110,111,101/ + data (st0001(iyy),iyy= 9,16) /102,107, 52,124,102,107, 53,124/ + data (st0001(iyy),iyy=17,24) /105, 99,114,115,124, 97,112,112/ + data (st0001(iyy),iyy=25,32) / 97,114,101,110,116,124,101, 99/ + data (st0001(iyy),iyy=33,40) /108,105,112,116,105, 99,124,103/ + data (st0001(iyy),iyy=41,48) / 97,108, 97, 99,116,105, 99,124/ + data (st0001(iyy),iyy=49,56) /115,117,112,101,114,103, 97,108/ + data (st0001(iyy),iyy=57,63) / 97, 99,116,105, 99,124, 0/ + ctype = 0 + radecs = 0 + equinx = 1.6d308 + epoch = 1.6d308 + call smark (sp) + call salloc (str1, 1023 , 2) + call salloc (str2, 1023 , 2) + call sscan (instr) + call gargwd (memc(str1), 1023 ) + if (.not.(memc(str1) .eq. 0 .or. nscan() .lt. 1)) goto 110 + call sfree (sp) + skstrs = (-1) + goto 100 +110 continue + nitems = 1 +111 continue + sctype = strdic (memc(str1), memc(str2), 1023 , st0001) + if (.not.(sctype .le. 0)) goto 120 + ctype = 1 + goto 121 +120 continue + sw0001=(sctype) + goto 130 +140 continue + ctype = 1 + radecs = 1 + goto 131 +150 continue + ctype = 1 + radecs = 2 + goto 131 +160 continue + ctype = 1 + radecs = 3 + goto 131 +170 continue + ctype = 1 + radecs = 4 + goto 131 +180 continue + ctype = 1 + radecs = 5 + goto 131 +190 continue + ctype = 2 + goto 131 +200 continue + ctype = 3 + goto 131 +210 continue + ctype = 4 + goto 131 +130 continue + if (sw0001.lt.1.or.sw0001.gt.8) goto 131 + goto (140,150,160,170,180,190,200,210),sw0001 +131 continue + call gargwd (memc(str1), 1023 ) + if (.not.(nscan() .gt. nitems)) goto 220 + nitems = nitems + 1 +220 continue +121 continue + sctype = ctype + srades = radecs + sw0002=(sctype) + goto 230 +240 continue + sw0003=(srades) + goto 250 +260 continue + if (.not.(memc(str1) .eq. 74 .or. memc(str1) .eq. 106 .or + * . memc(str1) .eq. 66 .or. memc(str1) .eq. 98)) goto 270 + ip = 2 + goto 271 +270 continue + ip = 1 +271 continue + if (.not.(ctod (memc(str1), ip, equinx) .le. 0)) goto 280 + equinx = 1950.0d0 +280 continue + if (.not.(memc(str1) .eq. 74 .or. memc(str1) .eq. 106)) + * goto 290 + equinx = slepb (slej2d (equinx)) +290 continue + call gargwd (memc(str2), 1023 ) + if (.not.(nscan() .le. nitems)) goto 300 + epoch = sleb2d (equinx) + goto 301 +300 continue + if (.not.(memc(str2) .eq. 74 .or. memc(str2) .eq. 106 + * .or. memc(str2) .eq. 66 .or. memc(str2) .eq. 98)) goto + * 310 + ip = 2 + goto 311 +310 continue + ip = 1 +311 continue + if (.not.(ctod (memc(str2), ip, epoch) .le. 0)) goto + * 320 + epoch = sleb2d (equinx) + goto 321 +320 continue + if (.not.(epoch .le. 3000.0d0 .and. (memc(str2) .eq. + * 74 .or. memc(str2) .eq. 106))) goto 330 + epoch = slej2d (epoch) + goto 331 +330 continue + if (.not.(epoch .gt. 3000.0d0)) goto 340 + epoch = epoch - 2400000.5d0 + goto 341 +340 continue + epoch = sleb2d (epoch) +341 continue +331 continue +321 continue +301 continue + goto 251 +350 continue + if (.not.(memc(str1) .eq. 74 .or. memc(str1) .eq. 106 .or + * . memc(str1) .eq. 66 .or. memc(str1) .eq. 98)) goto 360 + ip = 2 + goto 361 +360 continue + ip = 1 +361 continue + if (.not.(ctod (memc(str1), ip, equinx) .le. 0)) goto 370 + equinx = 2000.0d0 +370 continue + if (.not.(memc(str1) .eq. 66 .or. memc(str1) .eq. 98)) + * goto 380 + equinx = slepj(sleb2d (equinx)) +380 continue + call gargwd (memc(str2), 1023 ) + if (.not.(nscan() .le. nitems)) goto 390 + epoch = slej2d (equinx) + goto 391 +390 continue + if (.not.(memc(str2) .eq. 74 .or. memc(str2) .eq. 106 + * .or. memc(str2) .eq. 66 .or. memc(str2) .eq. 98)) goto + * 400 + ip = 2 + goto 401 +400 continue + ip = 1 +401 continue + if (.not.(ctod (memc(str2), ip, epoch) .le. 0)) goto + * 410 + epoch = slej2d (equinx) + goto 411 +410 continue + if (.not.(epoch .le. 3000.0d0 .and. (memc(str2) .eq. + * 66 .or. memc(str2) .eq. 98))) goto 420 + epoch = sleb2d (epoch) + goto 421 +420 continue + if (.not.(epoch .gt. 3000.0d0)) goto 430 + epoch = epoch - 2400000.5d0 + goto 431 +430 continue + epoch = slej2d (epoch) +431 continue +421 continue +411 continue +391 continue + goto 251 +440 continue + equinx = 2000.0d0 + if (.not.(memc(str1) .eq. 74 .or. memc(str1) .eq. 106 .or + * . memc(str1) .eq. 66 .or. memc(str1) .eq. 98)) goto 450 + ip = 2 + goto 451 +450 continue + ip = 1 +451 continue + if (.not.(ctod (memc(str1), ip, epoch) .le. 0)) goto 460 + epoch = 1.6d308 + goto 461 +460 continue + if (.not.(epoch .le. 3000.0d0)) goto 470 + if (.not.(memc(str1) .eq. 66 .or. memc(str1) .eq. 98)) + * goto 480 + epoch = sleb2d (epoch) + goto 481 +480 continue + if (.not.(memc(str1) .eq. 74 .or. memc(str1) .eq. 106) + * ) goto 490 + epoch = slej2d (epoch) + goto 491 +490 continue + if (.not.(epoch .lt. 1984.0d0)) goto 500 + epoch = sleb2d (epoch) + goto 501 +500 continue + epoch = slej2d (epoch) +501 continue +491 continue +481 continue + goto 471 +470 continue + epoch = epoch - 2400000.5d0 +471 continue +461 continue + goto 251 +510 continue + ip = 1 + if (.not.(memc(str1) .eq. 66 .or. memc(str1) .eq. 98)) + * goto 520 + radecs = 1 + ip = ip + 1 + if (.not.(ctod (memc(str1), ip, equinx) .le. 0)) goto + * 530 + equinx = 1950.0d0 +530 continue + call gargwd (memc(str2), 1023 ) + if (.not.(nscan() .le. nitems)) goto 540 + epoch = sleb2d (equinx) + goto 541 +540 continue + if (.not.(memc(str2) .eq. 74 .or. memc(str2) .eq. + * 106)) goto 550 + ip = 2 + goto 551 +550 continue + if (.not.(memc(str2) .eq. 66 .or. memc(str2) .eq. + * 98)) goto 560 + ip = 2 + goto 561 +560 continue + ip = 1 +561 continue +551 continue + if (.not.(ctod (memc(str2), ip, epoch) .le. 0)) + * goto 570 + epoch = sleb2d (equinx) + goto 571 +570 continue + if (.not.(epoch .le. 3000.0d0 .and. (memc(str2) .eq + * . 74 .or. memc(str2) .eq. 106))) goto 580 + epoch = slej2d (epoch) + goto 581 +580 continue + if (.not.(epoch .gt. 3000.0d0)) goto 590 + epoch = epoch - 2400000.5d0 + goto 591 +590 continue + epoch = sleb2d (epoch) +591 continue +581 continue +571 continue +541 continue + goto 521 +520 continue + if (.not.(memc(str1) .eq. 74 .or. memc(str1) .eq. 106)) + * goto 600 + radecs = 3 + ip = ip + 1 + if (.not.(ctod (memc(str1), ip, equinx) .le. 0)) goto + * 610 + equinx = 2000.0d0 +610 continue + call gargwd (memc(str2), 1023 ) + if (.not.(nscan() .le. nitems)) goto 620 + epoch = slej2d (equinx) + goto 621 +620 continue + if (.not.(memc(str2) .eq. 74 .or. memc(str2) .eq. + * 106 .or. memc(str2) .eq. 66 .or. memc(str2) .eq. 98 + * )) goto 630 + ip = 2 + goto 631 +630 continue + ip = 1 +631 continue + if (.not.(ctod (memc(str2), ip, epoch) .le. 0)) + * goto 640 + epoch = slej2d (equinx) + goto 641 +640 continue + if (.not.(epoch .le. 3000.0d0 .and. (memc(str2) .eq + * . 66 .or. memc(str2) .eq. 98))) goto 650 + epoch = sleb2d (epoch) + goto 651 +650 continue + if (.not.(epoch .gt. 3000.0d0)) goto 660 + epoch = epoch - 2400000.5d0 + goto 661 +660 continue + epoch = slej2d (epoch) +661 continue +651 continue +641 continue +621 continue + goto 601 +600 continue + if (.not.(ctod (memc(str1), ip, equinx) .le. 0)) goto 670 + ctype = 0 + radecs = 0 + equinx = 1.6d308 + epoch = 1.6d308 + goto 671 +670 continue + if (.not.(equinx .lt. 1984.0d0)) goto 680 + radecs = 1 + call gargwd (memc(str2), 1023 ) + if (.not.(nscan() .le. nitems)) goto 690 + epoch = sleb2d (equinx) + goto 691 +690 continue + if (.not.(memc(str2) .eq. 74 .or. memc(str2) .eq. + * 106 .or. memc(str2) .eq. 66 .or. memc(str2) .eq. 98 + * )) goto 700 + ip = 2 + goto 701 +700 continue + ip = 1 +701 continue + if (.not.(ctod (memc(str2), ip, epoch) .le. 0)) + * goto 710 + epoch = sleb2d (equinx) + goto 711 +710 continue + if (.not.(epoch .le. 3000.0d0 .and. (memc(str2) .eq + * . 74 .or. memc(str2) .eq. 106))) goto 720 + epoch = slej2d (epoch) + goto 721 +720 continue + if (.not.(epoch .gt. 3000.0d0)) goto 730 + epoch = epoch - 2400000.5d0 + goto 731 +730 continue + epoch = sleb2d (epoch) +731 continue +721 continue +711 continue +691 continue + goto 681 +680 continue + radecs = 3 + call gargwd (memc(str2), 1023 ) + if (.not.(nscan() .le. nitems)) goto 740 + epoch = slej2d (equinx) + goto 741 +740 continue + if (.not.(memc(str2) .eq. 74 .or. memc(str2) .eq. + * 106 .or. memc(str2) .eq. 66 .or. memc(str2) .eq. 98 + * )) goto 750 + ip = 2 + goto 751 +750 continue + ip = 1 +751 continue + if (.not.(ctod (memc(str2), ip, epoch) .le. 0)) + * goto 760 + epoch = slej2d (equinx) + goto 761 +760 continue + if (.not.(epoch .le. 3000.0d0 .and. (memc(str2) .eq + * . 66 .or. memc(str2) .eq. 98))) goto 770 + epoch = sleb2d (epoch) + goto 771 +770 continue + if (.not.(epoch .gt. 3000.0d0)) goto 780 + epoch = epoch - 2400000.5d0 + goto 781 +780 continue + epoch = slej2d (epoch) +781 continue +771 continue +761 continue +741 continue +681 continue +671 continue +601 continue +521 continue + goto 251 +250 continue + if (sw0003.lt.1.or.sw0003.gt.5) goto 510 + goto (260,260,350,350,440),sw0003 +251 continue + goto 231 +790 continue + if (.not.(memc(str1) .eq. 74 .or. memc(str1) .eq. 106 .or. + * memc(str1) .eq. 66 .or. memc(str1) .eq. 98)) goto 800 + ip = 2 + goto 801 +800 continue + ip = 1 +801 continue + if (.not.(ctod (memc(str1), ip, epoch) .le. 0)) goto 810 + epoch = 1.6d308 + goto 811 +810 continue + if (.not.(epoch .le. 3000.0d0)) goto 820 + if (.not.(memc(str1) .eq. 66 .or. memc(str1) .eq. 98)) + * goto 830 + epoch = sleb2d (epoch) + goto 831 +830 continue + if (.not.(memc(str1) .eq. 74 .or. memc(str1) .eq. 106)) + * goto 840 + epoch = slej2d (epoch) + goto 841 +840 continue + if (.not.(epoch .lt. 1984.0d0)) goto 850 + epoch = sleb2d (epoch) + goto 851 +850 continue + epoch = slej2d (epoch) +851 continue +841 continue +831 continue + goto 821 +820 continue + epoch = epoch - 2400000.5d0 +821 continue +811 continue + goto 231 +860 continue + if (.not.(memc(str1) .eq. 74 .or. memc(str1) .eq. 106 .or. + * memc(str1) .eq. 66 .or. memc(str1) .eq. 98)) goto 870 + ip = 2 + goto 871 +870 continue + ip = 1 +871 continue + if (.not.(ctod (memc(str1), ip, epoch) .le. 0)) goto 880 + epoch = sleb2d (1950.0d0) + goto 881 +880 continue + if (.not.(epoch .le. 3000.0d0)) goto 890 + if (.not.(memc(str1) .eq. 74 .or. memc(str1) .eq. 106)) + * goto 900 + epoch = slej2d (epoch) + goto 901 +900 continue + if (.not.(memc(str1) .eq. 66 .or. memc(str1) .eq. 98)) + * goto 910 + epoch = sleb2d (epoch) + goto 911 +910 continue + if (.not.(epoch .lt. 1984.0d0)) goto 920 + epoch = sleb2d (epoch) + goto 921 +920 continue + epoch = slej2d (epoch) +921 continue +911 continue +901 continue + goto 891 +890 continue + epoch = epoch - 2400000.5d0 +891 continue +881 continue + goto 231 +230 continue + if (sw0002.lt.1.or.sw0002.gt.4) goto 231 + goto (240,790,860,860),sw0002 +231 continue + if (.not.(ctype .eq. 0)) goto 930 + stat = -1 + goto 931 +930 continue + if (.not.(ctype .eq. 1 .and. (radecs .eq. 0 .or. ((equinx).eq.1 + * .6d308) .or. ((epoch).eq.1.6d308)))) goto 940 + stat = -1 + goto 941 +940 continue + if (.not.(ctype .eq. 2 .and. ((epoch).eq.1.6d308))) goto 950 + stat = -1 + goto 951 +950 continue + stat = 0 +951 continue +941 continue +931 continue + call sfree (sp) + skstrs = (stat) + goto 100 +100 return + end + integer function skimws (im, mw, ctype, lngax, latax, wtype, + *radecs, equinx, epoch) + logical Memb(1) + integer*2 Memc(1) + integer*2 Mems(1) + integer Memi(1) + integer*4 Meml(1) + real Memr(1) + double precision Memd(1) + complex Memx(1) + equivalence (Memb, Memc, Mems, Memi, Meml, Memr, Memd, Memx) + common /Mem/ Memd + integer im + integer mw + integer ctype + integer lngax + integer latax + integer wtype + integer radecs + double precision equinx + double precision epoch + integer i + integer ndim + integer axtype + integer day + integer month + integer year + integer ier + integer oldfis + integer sp + integer atval + double precision hours + double precision imgetd + double precision sleb2d + double precision slej2d + integer mwstai + integer strdic + integer dtmdee + logical xerpop + logical xerflg + common /xercom/ xerflg + integer sw0001,sw0002,sw0003 + integer*2 st0001(7) + integer*2 st0002(6) + integer*2 st0003(39) + integer*2 st0004(6) + integer*2 st0005(6) + integer*2 st0006(7) + integer*2 st0007(114) + integer*2 st0008(8) + integer*2 st0009(6) + integer*2 st0010(9) + integer*2 st0011(30) + integer*2 st0012(8) + integer*2 st0013(8) + integer*2 st0014(9) + integer*2 st0015(8) + integer*2 st0016(8) + integer*2 st0017(9) + integer*2 st0018(8) + integer*2 st0019(8) + integer*2 st0020(9) + save + integer iyy + data st0001 / 97,120,116,121,112,101, 0/ + data st0002 / 73, 78, 68, 69, 70, 0/ + data (st0003(iyy),iyy= 1, 8) /124,114, 97,124,100,101, 99,124/ + data (st0003(iyy),iyy= 9,16) /103,108,111,110,124,103,108, 97/ + data (st0003(iyy),iyy=17,24) /116,124,101,108,111,110,124,101/ + data (st0003(iyy),iyy=25,32) /108, 97,116,124,115,108,111,110/ + data (st0003(iyy),iyy=33,39) /124,115,108, 97,116,124, 0/ + data st0004 /119,116,121,112,101, 0/ + data st0005 /119,116,121,112,101, 0/ + data st0006 /108,105,110,101, 97,114, 0/ + data (st0007(iyy),iyy= 1, 8) /124,108,105,110,124, 97,122,112/ + data (st0007(iyy),iyy= 9,16) /124,116, 97,110,124,115,105,110/ + data (st0007(iyy),iyy=17,24) /124,115,116,103,124, 97,114, 99/ + data (st0007(iyy),iyy=25,32) /124,122,112,110,124,122,101, 97/ + data (st0007(iyy),iyy=33,40) /124, 97,105,114,124, 99,121,112/ + data (st0007(iyy),iyy=41,48) /124, 99, 97,114,124,109,101,114/ + data (st0007(iyy),iyy=49,56) /124, 99,101, 97,124, 99,111,112/ + data (st0007(iyy),iyy=57,64) /124, 99,111,100,124, 99,111,101/ + data (st0007(iyy),iyy=65,72) /124, 99,111,111,124, 98,111,110/ + data (st0007(iyy),iyy=73,80) /124,112, 99,111,124,103,108,115/ + data (st0007(iyy),iyy=81,88) /124,112, 97,114,124, 97,105,116/ + data (st0007(iyy),iyy=89,96) /124,109,111,108,124, 99,115, 99/ + data (st0007(iyy),iyy=97,104) /124,113,115, 99,124,116,115, 99/ + data (st0007(iyy),iyy=105,112) /124,116,110,120,124,122,112,120/ + data (st0007(iyy),iyy=113,114) /124, 0/ + data st0008 / 69, 81, 85, 73, 78, 79, 88, 0/ + data st0009 / 69, 80, 79, 67, 72, 0/ + data (st0010(iyy),iyy= 1, 8) / 82, 65, 68, 69, 67, 83, 89, 83/ + data (st0010(iyy),iyy= 9, 9) / 0/ + data (st0011(iyy),iyy= 1, 8) /124,102,107, 52,124,102,107, 52/ + data (st0011(iyy),iyy= 9,16) / 45,110,111, 45,101,124,102,107/ + data (st0011(iyy),iyy=17,24) / 53,124,105, 99,114,115,124,103/ + data (st0011(iyy),iyy=25,30) / 97,112,112,116,124, 0/ + data st0012 / 77, 74, 68, 45, 87, 67, 83, 0/ + data st0013 / 77, 74, 68, 45, 79, 66, 83, 0/ + data (st0014(iyy),iyy= 1, 8) / 68, 65, 84, 69, 45, 79, 66, 83/ + data (st0014(iyy),iyy= 9, 9) / 0/ + data st0015 / 77, 74, 68, 45, 87, 67, 83, 0/ + data st0016 / 77, 74, 68, 45, 79, 66, 83, 0/ + data (st0017(iyy),iyy= 1, 8) / 68, 65, 84, 69, 45, 79, 66, 83/ + data (st0017(iyy),iyy= 9, 9) / 0/ + data st0018 / 77, 74, 68, 45, 87, 67, 83, 0/ + data st0019 / 77, 74, 68, 45, 79, 66, 83, 0/ + data (st0020(iyy),iyy= 1, 8) / 68, 65, 84, 69, 45, 79, 66, 83/ + data (st0020(iyy),iyy= 9, 9) / 0/ + call smark (sp) + call salloc (atval, 1023 , 2) + ctype = 0 + lngax = 0 + latax = 0 + wtype = 0 + radecs = 0 + equinx = 1.6d308 + epoch = 1.6d308 + ndim = mwstai (mw, 5 ) + do 110 i = 1, ndim + call xerpsh + call mwgwas (mw, i, st0001, memc(atval), 1023 ) + if (.not.xerpop()) goto 120 + call xstrcy(st0002, memc(atval), 1023 ) +120 continue + axtype = strdic (memc(atval), memc(atval), 1023 , st0003) + sw0001=(axtype) + goto 130 +140 continue + ctype = 1 + goto 131 +150 continue + ctype = 2 + goto 131 +160 continue + ctype = 3 + goto 131 +170 continue + ctype = 4 + goto 131 +180 continue + goto 131 +130 continue + if (sw0001.lt.1.or.sw0001.gt.8) goto 180 + goto (140,140,160,160,150,150,170,170),sw0001 +131 continue + sw0002=(axtype) + goto 190 +200 continue + lngax = i + goto 191 +210 continue + latax = i + goto 191 +220 continue + goto 191 +190 continue + if (sw0002.lt.1.or.sw0002.gt.8) goto 220 + goto (200,210,200,210,200,210,200,210),sw0002 +191 continue +110 continue +111 continue + if (.not.(ctype .eq. 0 .or. lngax .eq. 0 .or. latax .eq. 0)) + * goto 230 + call sfree (sp) + skimws = (-1) + goto 100 +230 continue + call xerpsh + call mwgwas (mw, lngax, st0004, memc(atval), 1023 ) + if (xerflg) goto 242 +242 if (.not.xerpop()) goto 240 + call xerpsh + call mwgwas(mw, latax, st0005, memc(atval), 1023 ) + if (.not.xerpop()) goto 250 + call xstrcy(st0006, memc(atval), 1023 ) +250 continue +240 continue + wtype = strdic (memc(atval), memc(atval), 1023 , st0007) + if (.not.(wtype .eq. 0)) goto 260 + call sfree (sp) + skimws = (-1) + goto 100 +260 continue + if (.not.(ctype .eq. 1)) goto 270 + call xerpsh + equinx = imgetd (im, st0008) + if (xerflg) goto 282 +282 if (.not.xerpop()) goto 280 + call xerpsh + equinx = imgetd (im, st0009) + if (xerflg) goto 292 +292 if (.not.xerpop()) goto 290 + equinx = 1.6d308 +290 continue +280 continue + call xerpsh + call imgstr (im, st0010, memc(atval), 1023 ) + if (xerflg) goto 302 +302 if (.not.xerpop()) goto 300 + radecs = 0 + goto 301 +300 continue + call strlwr (memc(atval)) + radecs = strdic (memc(atval), memc(atval), 1023 , st0011) +301 continue + if (.not.(radecs .eq. 0)) goto 310 + if (.not.(((equinx).eq.1.6d308))) goto 320 + radecs = 3 + goto 321 +320 continue + if (.not.(equinx .lt. 1984.0d0)) goto 330 + radecs = 1 + goto 331 +330 continue + radecs = 3 +331 continue +321 continue +310 continue + call xerpsh + epoch = imgetd (im, st0012) + if (xerflg) goto 342 +342 if (.not.xerpop()) goto 340 + call xerpsh + epoch = imgetd (im, st0013) + if (xerflg) goto 352 +352 if (.not.xerpop()) goto 350 + call xerpsh + call imgstr (im, st0014, memc(atval), 1023 ) + if (xerflg) goto 362 +362 if (.not.xerpop()) goto 360 + epoch = 1.6d308 + goto 361 +360 continue + if (.not.(dtmdee (memc(atval), year, month, day, hours + * , oldfis) .eq. 0)) goto 370 + call slcadj (year, month, day, epoch, ier) + if (.not.(ier .ne. 0)) goto 380 + epoch = 1.6d308 + goto 381 +380 continue + if (.not.(.not. ((hours).eq.1.6d308) .and. hours . + * ge. 0.0d0 .and. hours .le. 24.0d0)) goto 390 + epoch = epoch + hours / 24.0d0 +390 continue +381 continue + goto 371 +370 continue + epoch = 1.6d308 +371 continue +361 continue +350 continue +340 continue + sw0003=(radecs) + goto 400 +410 continue + if (.not.(((equinx).eq.1.6d308))) goto 420 + equinx = 1950.0d0 +420 continue + if (.not.(((epoch).eq.1.6d308))) goto 430 + epoch = sleb2d (1950.0d0) +430 continue + goto 401 +440 continue + if (.not.(((equinx).eq.1.6d308))) goto 450 + equinx = 2000.0d0 +450 continue + if (.not.(((epoch).eq.1.6d308))) goto 460 + epoch = slej2d (2000.0d0) +460 continue + goto 401 +470 continue + equinx = 2000.0d0 + goto 401 +400 continue + if (sw0003.lt.1.or.sw0003.gt.5) goto 401 + goto (410,410,440,440,470),sw0003 +401 continue + if (.not.(((epoch).eq.1.6d308))) goto 480 + call sfree (sp) + skimws = (-1) + goto 100 +480 continue +270 continue + if (.not.(ctype .eq. 2)) goto 490 + call xerpsh + epoch = imgetd (im, st0015) + if (xerflg) goto 502 +502 if (.not.xerpop()) goto 500 + call xerpsh + epoch = imgetd (im, st0016) + if (xerflg) goto 512 +512 if (.not.xerpop()) goto 510 + call xerpsh + call imgstr (im, st0017, memc(atval), 1023 ) + if (xerflg) goto 522 +522 if (.not.xerpop()) goto 520 + epoch = 1.6d308 + goto 521 +520 continue + if (.not.(dtmdee (memc(atval), year, month, day, hours + * , oldfis) .eq. 0)) goto 530 + call slcadj (year, month, day, epoch, ier) + if (.not.(ier .ne. 0)) goto 540 + epoch = 1.6d308 + goto 541 +540 continue + if (.not.(.not. ((hours).eq.1.6d308) .and. hours . + * ge. 0.0d0 .and. hours .le. 24.0d0)) goto 550 + epoch = epoch + hours / 24.0d0 +550 continue +541 continue + goto 531 +530 continue + epoch = 1.6d308 +531 continue +521 continue +510 continue +500 continue + if (.not.(((epoch).eq.1.6d308))) goto 560 + call sfree (sp) + skimws = (-1) + goto 100 +560 continue +490 continue + if (.not.(ctype .eq. 3 .or. ctype .eq. 4)) goto 570 + call xerpsh + epoch = imgetd (im, st0018) + if (xerflg) goto 582 +582 if (.not.xerpop()) goto 580 + call xerpsh + epoch = imgetd (im, st0019) + if (xerflg) goto 592 +592 if (.not.xerpop()) goto 590 + call xerpsh + call imgstr (im, st0020, memc(atval), 1023 ) + if (xerflg) goto 602 +602 if (.not.xerpop()) goto 600 + epoch = sleb2d (1950.0d0) + goto 601 +600 continue + if (.not.(dtmdee (memc(atval), year, month, day, hours + * , oldfis) .eq. 0)) goto 610 + call slcadj (year, month, day, epoch, ier) + if (.not.(ier .ne. 0)) goto 620 + epoch = sleb2d (1950.0d0) + goto 621 +620 continue + if (.not.(.not. ((hours).eq.1.6d308) .and. hours + * .ge. 0.0d0 .and. hours .le. 24.0d0)) goto 630 + epoch = epoch + hours / 24.0d0 +630 continue +621 continue + goto 611 +610 continue + epoch = sleb2d (1950.0d0) +611 continue +601 continue +590 continue +580 continue +570 continue + call sfree (sp) + skimws = (0) + goto 100 +100 return + end + subroutine skenws (coo, wcsstr, maxch) + logical Memb(1) + integer*2 Memc(1) + integer*2 Mems(1) + integer Memi(1) + integer*4 Meml(1) + real Memr(1) + double precision Memd(1) + complex Memx(1) + equivalence (Memb, Memc, Mems, Memi, Meml, Memr, Memd, Memx) + common /Mem/ Memd + integer coo + integer maxch + integer*2 wcsstr(*) + double precision skstad + double precision slepj + double precision slepb + integer skstai + integer sw0001,sw0002 + integer*2 st0001(9) + integer*2 st0002(16) + integer*2 st0003(18) + integer*2 st0004(19) + integer*2 st0005(18) + integer*2 st0006(21) + integer*2 st0007(9) + integer*2 st0008(16) + integer*2 st0009(16) + integer*2 st0010(21) + save + integer iyy + data (st0001(iyy),iyy= 1, 8) / 97,112,112, 97,114,101,110,116/ + data (st0001(iyy),iyy= 9, 9) / 0/ + data (st0002(iyy),iyy= 1, 8) / 97,112,112, 97,114,101,110,116/ + data (st0002(iyy),iyy= 9,16) / 32, 74, 37, 48, 46, 56,102, 0/ + data (st0003(iyy),iyy= 1, 8) /102,107, 53, 32, 74, 37, 48, 46/ + data (st0003(iyy),iyy= 9,16) / 51,102, 32, 74, 37, 48, 46, 56/ + data (st0003(iyy),iyy=17,18) /102, 0/ + data (st0004(iyy),iyy= 1, 8) /105, 99,114,115, 32, 74, 37, 48/ + data (st0004(iyy),iyy= 9,16) / 46, 51,102, 32, 74, 37, 48, 46/ + data (st0004(iyy),iyy=17,19) / 56,102, 0/ + data (st0005(iyy),iyy= 1, 8) /102,107, 52, 32, 66, 37, 48, 46/ + data (st0005(iyy),iyy= 9,16) / 51,102, 32, 66, 37, 48, 46, 56/ + data (st0005(iyy),iyy=17,18) /102, 0/ + data (st0006(iyy),iyy= 1, 8) /102,107, 52,110,111,101, 32, 66/ + data (st0006(iyy),iyy= 9,16) / 37, 48, 46, 51,102, 32, 66, 37/ + data (st0006(iyy),iyy=17,21) / 48, 46, 56,102, 0/ + data (st0007(iyy),iyy= 1, 8) /101, 99,108,105,112,116,105, 99/ + data (st0007(iyy),iyy= 9, 9) / 0/ + data (st0008(iyy),iyy= 1, 8) /101, 99,108,105,112,116,105, 99/ + data (st0008(iyy),iyy= 9,16) / 32, 74, 37, 48, 46, 56,102, 0/ + data (st0009(iyy),iyy= 1, 8) /103, 97,108, 97, 99,116,105, 99/ + data (st0009(iyy),iyy= 9,16) / 32, 74, 37, 48, 46, 56,102, 0/ + data (st0010(iyy),iyy= 1, 8) /115,117,112,101,114,103, 97,108/ + data (st0010(iyy),iyy= 9,16) / 97, 99,116,105, 99, 32,106, 37/ + data (st0010(iyy),iyy=17,21) / 48, 46, 56,102, 0/ + sw0001=(skstai (coo, 7)) + goto 110 +120 continue + sw0002=(skstai(coo, 8)) + goto 130 +140 continue + if (.not.(((skstad(coo, 6)).eq.1.6d308))) goto 150 + call sprinf (wcsstr, maxch, st0001) + goto 151 +150 continue + call sprinf (wcsstr, maxch, st0002) + call pargd (slepj(skstad(coo, 6))) +151 continue + goto 131 +160 continue + call sprinf (wcsstr, maxch, st0003) + call pargd (skstad(coo, 5)) + call pargd (slepj(skstad(coo, 6))) + goto 131 +170 continue + call sprinf (wcsstr, maxch, st0004) + call pargd (skstad(coo, 5)) + call pargd (slepj(skstad(coo, 6))) + goto 131 +180 continue + call sprinf (wcsstr, maxch, st0005) + call pargd (skstad(coo, 5)) + call pargd (slepb(skstad(coo, 6))) + goto 131 +190 continue + call sprinf (wcsstr, maxch, st0006) + call pargd (skstad(coo, 5)) + call pargd (slepb(skstad(coo, 6))) + goto 131 +200 continue + wcsstr(1) = 0 + goto 131 +130 continue + if (sw0002.lt.1.or.sw0002.gt.5) goto 200 + goto (180,190,160,170,140),sw0002 +131 continue + goto 111 +210 continue + if (.not.(((skstad(coo, 6)).eq.1.6d308))) goto 220 + call sprinf (wcsstr, maxch, st0007) + goto 221 +220 continue + call sprinf (wcsstr, maxch, st0008) + call pargd (slepj(skstad(coo, 6))) +221 continue + goto 111 +230 continue + call sprinf (wcsstr, maxch, st0009) + call pargd (slepj(skstad(coo, 6))) + goto 111 +240 continue + call sprinf (wcsstr, maxch, st0010) + call pargd (slepj(skstad(coo, 6))) + goto 111 +110 continue + if (sw0001.lt.1.or.sw0001.gt.4) goto 111 + goto (120,210,230,240),sw0001 +111 continue +100 return + end + integer function skcopy (cooin) + logical Memb(1) + integer*2 Memc(1) + integer*2 Mems(1) + integer Memi(1) + integer*4 Meml(1) + real Memr(1) + double precision Memd(1) + complex Memx(1) + equivalence (Memb, Memc, Mems, Memi, Meml, Memr, Memd, Memx) + common /Mem/ Memd + integer cooin + integer cooout + save + if (.not.(cooin .eq. 0)) goto 110 + cooout = 0 + goto 111 +110 continue + call xcallc(cooout, (30 + 255 + 1), 10 ) + memd((((cooout)-1)/2+1)) = memd((((cooin)-1)/2+1)) + memd((((cooout+2)-1)/2+1)) = memd((((cooin+2)-1)/2+1)) + memd((((cooout+4)-1)/2+1)) = memd((((cooin+4)-1)/2+1)) + memd((((cooout+6)-1)/2+1)) = memd((((cooin+6)-1)/2+1)) + memd((((cooout+8)-1)/2+1)) = memd((((cooin+8)-1)/2+1)) + memd((((cooout+10)-1)/2+1)) = memd((((cooin+10)-1)/2+1)) + memi(cooout+12) = memi(cooin+12) + memi(cooout+13) = memi(cooin+13) + memi(cooout+14) = memi(cooin+14) + memi(cooout+15) = memi(cooin+15) + memi(cooout+16) = memi(cooin+16) + memi(cooout+17) = memi(cooin+17) + memi(cooout+18) = memi(cooin+18) + memi(cooout+19) = memi(cooin+19) + memi(cooout+20) = memi(cooin+20) + memi(cooout+21) = memi(cooin+21) + memi(cooout+22) = memi(cooin+22) + memi(cooout+23) = memi(cooin+23) + call xstrcy(memc((((cooin+25)-1)*2+1)) , memc((((cooout+25)- + * 1)*2+1)) , 255 ) +111 continue + skcopy = (cooout) + goto 100 +100 return + end + subroutine skcloe (coo) + logical Memb(1) + integer*2 Memc(1) + integer*2 Mems(1) + integer Memi(1) + integer*4 Meml(1) + real Memr(1) + double precision Memd(1) + complex Memx(1) + equivalence (Memb, Memc, Mems, Memi, Meml, Memr, Memd, Memx) + common /Mem/ Memd + integer coo + save + if (.not.(coo .ne. 0)) goto 110 + call xmfree(coo, 10 ) +110 continue +100 return + end +c sprinf sprintf +c dtmdee dtm_decode +c skenws sk_enwcs +c skstad sk_statd +c radecs radecsys +c equinx equinox +c skdecs sk_decwcs +c skimws sk_imwcs +c skstrs sk_strwcs +c skdecr sk_decwstr +c skstai sk_stati +c mwstai mw_stati +c skdecm sk_decim +c mwgaxp mw_gaxmap +c gargwd gargwrd +c sleb2d sl_eb2d +c mwopem mw_openim +c oldfis oldfits +c imunmp imunmap +c mwgwas mw_gwattrs +c skcopy sk_copy +c slej2d sl_ej2d +c srades sradecsys +c slcadj sl_cadj +c skcloe sk_close +c pargsr pargstr +c mwcloe mw_close diff --git a/vendor/x11iraf/ximtool/clients.old/lib/skywcs/skdecode.x b/vendor/x11iraf/ximtool/clients.old/lib/skywcs/skdecode.x new file mode 100644 index 00000000..5fa88f3b --- /dev/null +++ b/vendor/x11iraf/ximtool/clients.old/lib/skywcs/skdecode.x @@ -0,0 +1,999 @@ +include +include +include +include "skywcs.h" +include "skywcsdef.h" + +# SK_DECWCS -- Decode the wcs string which may be either an image name +# plus wcs, e.g. "dev$pix logical" or a string describing the celestial +# coordinate system, e.g. "J2000" or "galactic" into a celestial coordinate +# structure. If the input wcs is an image wcs then a non-NULL pointer to +# the image wcs structure is also returned. ERR is returned if a valid +# celestial coordinate structure cannot be created. + +int procedure sk_decwcs (instr, mw, coo, imcoo) + +char instr[ARB] #I the input wcs string +pointer mw #O the pointer to the image wcs structure +pointer coo #O the pointer to the coordinate structure +pointer imcoo #I pointer to an existing coordinate structure + +int stat +pointer sp, str1, str2, laxno, paxval, im +int sk_strwcs(), sk_decim() +pointer immap() +errchk immap() + +begin + call calloc (coo, LEN_SKYCOOSTRUCT, TY_STRUCT) + call strcpy (instr, SKY_COOSYSTEM(coo), SZ_FNAME) + + # Allocate some working space. + call smark (sp) + call salloc (str1, SZ_LINE, TY_CHAR) + call salloc (str2, SZ_LINE, TY_CHAR) + call salloc (laxno, IM_MAXDIM, TY_INT) + call salloc (paxval, IM_MAXDIM, TY_INT) + + # Decode the wcs. + call sscan (instr) + call gargwrd (Memc[str1], SZ_LINE) + call gargwrd (Memc[str2], SZ_LINE) + + # First try to open an image wcs. + iferr { + im = immap (Memc[str1], READ_ONLY, 0) + + # Decode the user wcs. + } then { + + # Initialize. + mw = NULL + if (imcoo == NULL) { + SKY_NLNGAX(coo) = 2048 + SKY_NLATAX(coo) = 2048 + SKY_PLNGAX(coo) = 1 + SKY_PLATAX(coo) = 2 + SKY_XLAX(coo) = 1 + SKY_YLAX(coo) = 2 + SKY_VXOFF(coo) = 0.0d0 + SKY_VYOFF(coo) = 0.0d0 + SKY_VXSTEP(coo) = 1.0d0 + SKY_VYSTEP(coo) = 1.0d0 + SKY_WTYPE(coo) = 0 + } else { + SKY_NLNGAX(coo) = SKY_NLNGAX(imcoo) + SKY_NLATAX(coo) = SKY_NLATAX(imcoo) + SKY_PLNGAX(coo) = SKY_PLNGAX(imcoo) + SKY_PLATAX(coo) = SKY_PLATAX(imcoo) + SKY_XLAX(coo) = SKY_XLAX(imcoo) + SKY_YLAX(coo) = SKY_YLAX(imcoo) + SKY_VXOFF(coo) = SKY_VXOFF(imcoo) + SKY_VYOFF(coo) = SKY_VYOFF(imcoo) + SKY_VXSTEP(coo) = SKY_VXSTEP(imcoo) + SKY_VYSTEP(coo) = SKY_VYSTEP(imcoo) + SKY_WTYPE(coo) = SKY_WTYPE(imcoo) + } + SKY_PIXTYPE(coo) = PIXTYPE_WORLD + + # Decode the actual wcs. + stat = sk_strwcs (instr, SKY_CTYPE(coo), SKY_RADECSYS(coo), + SKY_EQUINOX(coo), SKY_EPOCH(coo)) + switch (SKY_CTYPE(coo)) { + case CTYPE_EQUATORIAL: + SKY_NLNGUNITS(coo) = SKY_HOURS + SKY_NLATUNITS(coo) = SKY_DEGREES + default: + SKY_NLNGUNITS(coo) = SKY_DEGREES + SKY_NLATUNITS(coo) = SKY_DEGREES + } + + # Decode the image wcs. + } else { + stat = sk_decim (im, Memc[str2], mw, coo) + call imunmap (im) + } + + call sfree (sp) + + SKY_STATUS(coo) = stat + return (stat) +end + + +# SK_DECWSTR -- Decode the wcs string coordinate system, e.g. "J2000" or +# "galactic" into a celestial coordinate structure. ERR is returned if a +# valid celestial coordinate structure cannot be created. + +int procedure sk_decwstr (instr, coo, imcoo) + +char instr[ARB] #I the input wcs string +pointer coo #O the pointer to the coordinate structure +pointer imcoo #I pointer to an existing coordinate structure + +int stat +int sk_strwcs() + +begin + call calloc (coo, LEN_SKYCOOSTRUCT, TY_STRUCT) + call strcpy (instr, SKY_COOSYSTEM(coo), SZ_FNAME) + + # Initialize. + if (imcoo == NULL) { + SKY_NLNGAX(coo) = 2048 + SKY_NLATAX(coo) = 2048 + SKY_PLNGAX(coo) = 1 + SKY_PLATAX(coo) = 2 + SKY_XLAX(coo) = 1 + SKY_YLAX(coo) = 2 + SKY_VXOFF(coo) = 0.0d0 + SKY_VYOFF(coo) = 0.0d0 + SKY_VXSTEP(coo) = 1.0d0 + SKY_VYSTEP(coo) = 1.0d0 + SKY_WTYPE(coo) = 0 + } else { + SKY_NLNGAX(coo) = SKY_NLNGAX(imcoo) + SKY_NLATAX(coo) = SKY_NLATAX(imcoo) + SKY_PLNGAX(coo) = SKY_PLNGAX(imcoo) + SKY_PLATAX(coo) = SKY_PLATAX(imcoo) + SKY_XLAX(coo) = SKY_XLAX(imcoo) + SKY_YLAX(coo) = SKY_YLAX(imcoo) + SKY_VXOFF(coo) = SKY_VXOFF(imcoo) + SKY_VYOFF(coo) = SKY_VYOFF(imcoo) + SKY_VXSTEP(coo) = SKY_VXSTEP(imcoo) + SKY_VYSTEP(coo) = SKY_VYSTEP(imcoo) + SKY_WTYPE(coo) = SKY_WTYPE(imcoo) + } + SKY_PIXTYPE(coo) = PIXTYPE_WORLD + + # Decode the actual wcs. + stat = sk_strwcs (instr, SKY_CTYPE(coo), SKY_RADECSYS(coo), + SKY_EQUINOX(coo), SKY_EPOCH(coo)) + switch (SKY_CTYPE(coo)) { + case CTYPE_EQUATORIAL: + SKY_NLNGUNITS(coo) = SKY_HOURS + SKY_NLATUNITS(coo) = SKY_DEGREES + default: + SKY_NLNGUNITS(coo) = SKY_DEGREES + SKY_NLATUNITS(coo) = SKY_DEGREES + } + + SKY_STATUS(coo) = stat + + return (stat) +end + + +# SK_DECIM -- Given an image descriptor and an image wcs string create a +# celstial coordinate structure. A non-NULL pointer to the image wcs structure +# is also returned. ERR is returned if a valid celestial coordinate descriptor +# cannot be created. + + +int procedure sk_decim (im, wcs, mw, coo) + +pointer im #I the pointer to the input image +char wcs[ARB] #I the wcs string [logical|tv|physical|world] +pointer mw #O the pointer to the image wcs structure +pointer coo #O the pointer to the coordinate structure + +int stat +pointer sp, str1, laxno, paxval +int sk_imwcs(), strdic(), mw_stati() +pointer mw_openim() +errchk mw_openim() + +begin + call malloc (coo, LEN_SKYCOOSTRUCT, TY_STRUCT) + call sprintf (SKY_COOSYSTEM(coo), SZ_FNAME, "%s %s") + call pargstr (IM_HDRFILE(im)) + call pargstr (wcs) + + call smark (sp) + call salloc (str1, SZ_LINE, TY_CHAR) + call salloc (laxno, IM_MAXDIM, TY_INT) + call salloc (paxval, IM_MAXDIM, TY_INT) + + # Try to open the image wcs. + iferr { + mw = mw_openim (im) + + # Set up a dummy wcs. + } then { + + #Initialize. + SKY_CTYPE(coo) = 0 + SKY_RADECSYS(coo) = 0 + SKY_EQUINOX(coo) = INDEFD + SKY_EPOCH(coo) = INDEFD + mw = NULL + SKY_PLNGAX(coo) = 1 + SKY_PLATAX(coo) = 2 + SKY_XLAX(coo) = 1 + SKY_YLAX(coo) = 2 + SKY_NLNGAX(coo) = 2048 + SKY_NLATAX(coo) = 2048 + SKY_VXOFF(coo) = 0.0d0 + SKY_VYOFF(coo) = 0.0d0 + SKY_VXSTEP(coo) = 1.0d0 + SKY_VYSTEP(coo) = 1.0d0 + SKY_WTYPE(coo) = 0 + SKY_PIXTYPE(coo) = PIXTYPE_LOGICAL + SKY_NLNGUNITS(coo) = SKY_DEGREES + SKY_NLATUNITS(coo) = SKY_DEGREES + stat = ERR + + # Decode the wcs. + } else { + SKY_PIXTYPE(coo) = strdic (wcs, Memc[str1], SZ_LINE, PIXTYPE_LIST) + if (SKY_PIXTYPE(coo) <= 0) + SKY_PIXTYPE(coo) = PIXTYPE_LOGICAL + if (sk_imwcs (im, mw, SKY_CTYPE(coo), SKY_PLNGAX(coo), + SKY_PLATAX(coo), SKY_WTYPE(coo), SKY_RADECSYS(coo), + SKY_EQUINOX(coo), SKY_EPOCH(coo)) == OK) { + switch (SKY_CTYPE(coo)) { + case CTYPE_EQUATORIAL: + SKY_NLNGUNITS(coo) = SKY_HOURS + SKY_NLATUNITS(coo) = SKY_DEGREES + default: + SKY_NLNGUNITS(coo) = SKY_DEGREES + SKY_NLATUNITS(coo) = SKY_DEGREES + } + call mw_gaxmap (mw, Memi[laxno], Memi[paxval], mw_stati(mw, + MW_NPHYSDIM)) + if (Memi[laxno+SKY_PLNGAX(coo)-1] < + Memi[laxno+SKY_PLATAX(coo)-1]) { + SKY_XLAX(coo) = Memi[laxno+SKY_PLNGAX(coo)-1] + SKY_YLAX(coo) = Memi[laxno+SKY_PLATAX(coo)-1] + } else { + SKY_XLAX(coo) = Memi[laxno+SKY_PLATAX(coo)-1] + SKY_YLAX(coo) = Memi[laxno+SKY_PLNGAX(coo)-1] + } + if (SKY_XLAX(coo) <= 0 || SKY_YLAX(coo) <= 0) { + SKY_VXOFF(coo) = 0.0d0 + SKY_VYOFF(coo) = 0.0d0 + SKY_VXSTEP(coo) = 1.0d0 + SKY_VYSTEP(coo) = 1.0d0 + SKY_NLNGAX(coo) = 2048 + SKY_NLATAX(coo) = 2048 + stat = ERR + } else { + SKY_VXOFF(coo) = IM_VOFF(im,IM_VMAP(im,SKY_XLAX(coo))) + SKY_VYOFF(coo) = IM_VOFF(im,IM_VMAP(im,SKY_YLAX(coo))) + SKY_VXSTEP(coo) = IM_VSTEP(im,SKY_XLAX(coo)) + SKY_VYSTEP(coo) = IM_VSTEP(im,SKY_YLAX(coo)) + SKY_NLNGAX(coo) = IM_LEN(im,SKY_XLAX(coo)) + SKY_NLATAX(coo) = IM_LEN(im,SKY_YLAX(coo)) + stat = OK + } + } else { + call mw_close (mw) + mw = NULL + SKY_XLAX(coo) = 1 + SKY_YLAX(coo) = 2 + SKY_NLNGAX(coo) = 2048 + SKY_NLATAX(coo) = 2048 + SKY_VXOFF(coo) = 0.0d0 + SKY_VYOFF(coo) = 0.0d0 + SKY_VXSTEP(coo) = 1.0d0 + SKY_VYSTEP(coo) = 1.0d0 + SKY_NLNGUNITS(coo) = SKY_DEGREES + SKY_NLATUNITS(coo) = SKY_DEGREES + stat = ERR + } + } + + call sfree (sp) + + SKY_STATUS(coo) = stat + return (stat) +end + + +# SK_STRWCS -- Decode the sky coordinate system from an input string. +# The string syntax is [ctype] equinox [epoch]. The various options +# have been placed case statements. Although there is considerable +# duplication of code in the case statements, there are minor differences +# and I found it clearer to write it out rather than trying to be +# concise. I might want to clean this up a bit later. + +int procedure sk_strwcs (instr, ctype, radecsys, equinox, epoch) + +char instr[ARB] #I the input wcs string +int ctype #O the output coordinate type +int radecsys #O the output equatorial reference system +double equinox #O the output equinox +double epoch #O the output epoch of the observation + +int ip, nitems, sctype, sradecsys, stat +pointer sp, str1, str2 +int strdic(), nscan(), ctod() +double sl_ej2d(), sl_epb(), sl_eb2d(), sl_epj() + +begin + # Initialize. + ctype = 0 + radecsys = 0 + equinox = INDEFD + epoch = INDEFD + + # Allocate working space. + call smark (sp) + call salloc (str1, SZ_LINE, TY_CHAR) + call salloc (str2, SZ_LINE, TY_CHAR) + + # Determine the coordinate string. + call sscan (instr) + call gargwrd (Memc[str1], SZ_LINE) + + # Return with an error if the string is blank. + if (Memc[str1] == EOS || nscan() < 1) { + call sfree (sp) + return (ERR) + } else + nitems = 1 + + # If the coordinate type is undefined temporarily default it to + # equatorial. + sctype = strdic (Memc[str1], Memc[str2], SZ_LINE, FTYPE_LIST) + if (sctype <= 0) { + ctype = CTYPE_EQUATORIAL + } else { + switch (sctype) { + case FTYPE_FK4: + ctype = CTYPE_EQUATORIAL + radecsys = EQTYPE_FK4 + case FTYPE_FK4NOE: + ctype = CTYPE_EQUATORIAL + radecsys = EQTYPE_FK4NOE + case FTYPE_FK5: + ctype = CTYPE_EQUATORIAL + radecsys = EQTYPE_FK5 + case FTYPE_ICRS: + ctype = CTYPE_EQUATORIAL + radecsys = EQTYPE_ICRS + case FTYPE_GAPPT: + ctype = CTYPE_EQUATORIAL + radecsys = EQTYPE_GAPPT + case FTYPE_ECLIPTIC: + ctype = CTYPE_ECLIPTIC + case FTYPE_GALACTIC: + ctype = CTYPE_GALACTIC + case FTYPE_SUPERGALACTIC: + ctype = CTYPE_SUPERGALACTIC + } + call gargwrd (Memc[str1], SZ_LINE) + if (nscan() > nitems) + nitems = nitems + 1 + } + sctype = ctype + sradecsys = radecsys + + # Decode the coordinate system. + switch (sctype) { + + # Decode the equatorial system, equinox, and epoch. + case CTYPE_EQUATORIAL: + + switch (sradecsys) { + case EQTYPE_FK4, EQTYPE_FK4NOE: + if (Memc[str1] == 'J' || Memc[str1] == 'j' || + Memc[str1] == 'B' || Memc[str1] == 'b') + ip = 2 + else + ip = 1 + if (ctod (Memc[str1], ip, equinox) <= 0) + equinox = 1950.0d0 + if (Memc[str1] == 'J' || Memc[str1] == 'j') + equinox = sl_epb (sl_ej2d (equinox)) + + call gargwrd (Memc[str2], SZ_LINE) + if (nscan() <= nitems) + epoch = sl_eb2d (equinox) + else { + if (Memc[str2] == 'J' || Memc[str2] == 'j' || + Memc[str2] == 'B' || Memc[str2] == 'b') + ip = 2 + else + ip = 1 + if (ctod (Memc[str2], ip, epoch) <= 0) + epoch = sl_eb2d (equinox) + else if (epoch <= 3000.0d0 && (Memc[str2] == 'J' || + Memc[str2] == 'j')) + epoch = sl_ej2d (epoch) + else if (epoch > 3000.0d0) + epoch = epoch - 2400000.5d0 + else + epoch = sl_eb2d (epoch) + } + + case EQTYPE_FK5, EQTYPE_ICRS: + if (Memc[str1] == 'J' || Memc[str1] == 'j' || + Memc[str1] == 'B' || Memc[str1] == 'b') + ip = 2 + else + ip = 1 + if (ctod (Memc[str1], ip, equinox) <= 0) + equinox = 2000.0d0 + if (Memc[str1] == 'B' || Memc[str1] == 'b') + equinox = sl_epj(sl_eb2d (equinox)) + + call gargwrd (Memc[str2], SZ_LINE) + if (nscan() <= nitems) + epoch = sl_ej2d (equinox) + else { + if (Memc[str2] == 'J' || Memc[str2] == 'j' || + Memc[str2] == 'B' || Memc[str2] == 'b') + ip = 2 + else + ip = 1 + if (ctod (Memc[str2], ip, epoch) <= 0) + epoch = sl_ej2d (equinox) + else if (epoch <= 3000.0d0 && (Memc[str2] == 'B' || + Memc[str2] == 'b')) + epoch = sl_eb2d (epoch) + else if (epoch > 3000.0d0) + epoch = epoch - 2400000.5d0 + else + epoch = sl_ej2d (epoch) + } + + case EQTYPE_GAPPT: + equinox = 2000.0d0 + if (Memc[str1] == 'J' || Memc[str1] == 'j' || + Memc[str1] == 'B' || Memc[str1] == 'b') + ip = 2 + else + ip = 1 + if (ctod (Memc[str1], ip, epoch) <= 0) { + epoch = INDEFD + } else if (epoch <= 3000.0d0) { + if (Memc[str1] == 'B' || Memc[str1] == 'b') + epoch = sl_eb2d (epoch) + else if (Memc[str1] == 'J' || Memc[str1] == 'j') + epoch = sl_ej2d (epoch) + else if (epoch < 1984.0d0) + epoch = sl_eb2d (epoch) + else + epoch = sl_ej2d (epoch) + } else { + epoch = epoch - 2400000.5d0 + } + + default: + ip = 1 + if (Memc[str1] == 'B' || Memc[str1] == 'b') { + radecsys = EQTYPE_FK4 + ip = ip + 1 + if (ctod (Memc[str1], ip, equinox) <= 0) + equinox = 1950.0d0 + + call gargwrd (Memc[str2], SZ_LINE) + if (nscan() <= nitems) + epoch = sl_eb2d (equinox) + else { + if (Memc[str2] == 'J' || Memc[str2] == 'j') + ip = 2 + else if (Memc[str2] == 'B' || Memc[str2] == 'b') + ip = 2 + else + ip = 1 + if (ctod (Memc[str2], ip, epoch) <= 0) + epoch = sl_eb2d (equinox) + else if (epoch <= 3000.0d0 && (Memc[str2] == 'J' || + Memc[str2] == 'j')) + epoch = sl_ej2d (epoch) + else if (epoch > 3000.0d0) + epoch = epoch - 2400000.5d0 + else + epoch = sl_eb2d (epoch) + } + + } else if (Memc[str1] == 'J' || Memc[str1] == 'j') { + radecsys = EQTYPE_FK5 + ip = ip + 1 + if (ctod (Memc[str1], ip, equinox) <= 0) + equinox = 2000.0d0 + + call gargwrd (Memc[str2], SZ_LINE) + if (nscan() <= nitems) + epoch = sl_ej2d (equinox) + else { + if (Memc[str2] == 'J' || Memc[str2] == 'j' || + Memc[str2] == 'B' || Memc[str2] == 'b') + ip = 2 + else + ip = 1 + if (ctod (Memc[str2], ip, epoch) <= 0) + epoch = sl_ej2d (equinox) + else if (epoch <= 3000.0d0 && (Memc[str2] == 'B' || + Memc[str2] == 'b')) + epoch = sl_eb2d (epoch) + else if (epoch > 3000.0d0) + epoch = epoch - 2400000.5d0 + else + epoch = sl_ej2d (epoch) + } + + } else if (ctod (Memc[str1], ip, equinox) <= 0) { + ctype = 0 + radecsys = 0 + equinox = INDEFD + epoch = INDEFD + + } else if (equinox < 1984.0d0) { + radecsys = EQTYPE_FK4 + call gargwrd (Memc[str2], SZ_LINE) + if (nscan() <= nitems) + epoch = sl_eb2d (equinox) + else { + if (Memc[str2] == 'J' || Memc[str2] == 'j' || + Memc[str2] == 'B' || Memc[str2] == 'b') + ip = 2 + else + ip = 1 + if (ctod (Memc[str2], ip, epoch) <= 0) + epoch = sl_eb2d (equinox) + else if (epoch <= 3000.0d0 && (Memc[str2] == 'J' || + Memc[str2] == 'j')) + epoch = sl_ej2d (epoch) + else if (epoch > 3000.0d0) + epoch = epoch - 2400000.5d0 + else + epoch = sl_eb2d (epoch) + } + + } else { + radecsys = EQTYPE_FK5 + call gargwrd (Memc[str2], SZ_LINE) + if (nscan() <= nitems) + epoch = sl_ej2d (equinox) + else { + if (Memc[str2] == 'J' || Memc[str2] == 'j' || + Memc[str2] == 'B' || Memc[str2] == 'b') + ip = 2 + else + ip = 1 + if (ctod (Memc[str2], ip, epoch) <= 0) + epoch = sl_ej2d (equinox) + else if (epoch <= 3000.0d0 && (Memc[str2] == 'B' || + Memc[str2] == 'b')) + epoch = sl_eb2d (epoch) + else if (epoch > 3000.0d0) + epoch = epoch - 2400000.5d0 + else + epoch = sl_ej2d (epoch) + } + } + } + + # Decode the ecliptic coordinate system. + case CTYPE_ECLIPTIC: + if (Memc[str1] == 'J' || Memc[str1] == 'j' || + Memc[str1] == 'B' || Memc[str1] == 'b') + ip = 2 + else + ip = 1 + if (ctod (Memc[str1], ip, epoch) <= 0) { + epoch = INDEFD + } else if (epoch <= 3000.0d0) { + if (Memc[str1] == 'B' || Memc[str1] == 'b') + epoch = sl_eb2d (epoch) + else if (Memc[str1] == 'J' || Memc[str1] == 'j') + epoch = sl_ej2d (epoch) + else if (epoch < 1984.0d0) + epoch = sl_eb2d (epoch) + else + epoch = sl_ej2d (epoch) + } else { + epoch = epoch - 2400000.5d0 + } + + # Decode the galactic and supergalactic coordinate system. + case CTYPE_GALACTIC, CTYPE_SUPERGALACTIC: + if (Memc[str1] == 'J' || Memc[str1] == 'j' || + Memc[str1] == 'B' || Memc[str1] == 'b') + ip = 2 + else + ip = 1 + if (ctod (Memc[str1], ip, epoch) <= 0) { + epoch = sl_eb2d (1950.0d0) + } else if (epoch <= 3000.0d0) { + if (Memc[str1] == 'J' || Memc[str1] == 'j') + epoch = sl_ej2d (epoch) + else if (Memc[str1] == 'B' || Memc[str1] == 'b') + epoch = sl_eb2d (epoch) + else if (epoch < 1984.0d0) + epoch = sl_eb2d (epoch) + else + epoch = sl_ej2d (epoch) + } else { + epoch = epoch - 2400000.5d0 + } + } + + # Return the appropriate error status. + if (ctype == 0) + stat = ERR + else if (ctype == CTYPE_EQUATORIAL && (radecsys == 0 || + IS_INDEFD(equinox) || IS_INDEFD(epoch))) + stat = ERR + else if (ctype == CTYPE_ECLIPTIC && IS_INDEFD(epoch)) + stat = ERR + else + stat = OK + + call sfree (sp) + + return (stat) +end + + +# SK_IMWCS -- Decode the sky coordinate system of the image. Return +# an error if the sky coordinate system is not one of the supported types +# or required information is missing from the image header. + +int procedure sk_imwcs (im, mw, ctype, lngax, latax, wtype, radecsys, + equinox, epoch) + +pointer im #I the image pointer +pointer mw #I pointer to the world coordinate system +int ctype #O the output coordinate type +int lngax #O the output ra/glon/elon axis +int latax #O the output dec/glat/elat axis +int wtype #O the output projection type +int radecsys #O the output equatorial reference system +double equinox #O the output equinox +double epoch #O the output epoch of the observation + +int i, ndim, axtype, day, month, year, ier, oldfits +pointer sp, atval +double hours +double imgetd(), sl_eb2d(), sl_ej2d() +int mw_stati(), strdic(), dtm_decode() +errchk mw_gwattrs(), imgstr(), imgetd() + +begin + call smark (sp) + call salloc (atval, SZ_LINE, TY_CHAR) + + # Initialize + ctype = 0 + lngax = 0 + latax = 0 + wtype = 0 + radecsys = 0 + equinox = INDEFD + epoch = INDEFD + + # Determine the sky coordinate system of the image. + ndim = mw_stati (mw, MW_NPHYSDIM) + do i = 1, ndim { + iferr (call mw_gwattrs (mw, i, "axtype", Memc[atval], SZ_LINE)) + call strcpy ("INDEF", Memc[atval], SZ_LINE) + axtype = strdic (Memc[atval], Memc[atval], SZ_LINE, AXTYPE_LIST) + switch (axtype) { + case AXTYPE_RA, AXTYPE_DEC: + ctype = CTYPE_EQUATORIAL + case AXTYPE_ELON, AXTYPE_ELAT: + ctype = CTYPE_ECLIPTIC + case AXTYPE_GLON, AXTYPE_GLAT: + ctype = CTYPE_GALACTIC + case AXTYPE_SLON, AXTYPE_SLAT: + ctype = CTYPE_SUPERGALACTIC + default: + ; + } + switch (axtype) { + case AXTYPE_RA, AXTYPE_ELON, AXTYPE_GLON, AXTYPE_SLON: + lngax = i + case AXTYPE_DEC, AXTYPE_ELAT, AXTYPE_GLAT, AXTYPE_SLAT: + latax = i + default: + ; + } + } + + # Return if the sky coordinate system cannot be decoded. + if (ctype == 0 || lngax == 0 || latax == 0) { + call sfree (sp) + return (ERR) + } + + # Decode the sky projection. + iferr { + call mw_gwattrs (mw, lngax, "wtype", Memc[atval], SZ_LINE) + } then { + iferr (call mw_gwattrs(mw, latax, "wtype", Memc[atval], SZ_LINE)) + call strcpy ("linear", Memc[atval], SZ_LINE) + } + wtype = strdic (Memc[atval], Memc[atval], SZ_LINE, WTYPE_LIST) + + # Return if the sky projection system is not supported. + if (wtype == 0) { + call sfree (sp) + return (ERR) + } + + # Determine the RA/DEC system and equinox. + if (ctype == CTYPE_EQUATORIAL) { + + # Get the equinox of the coordinate system. The EQUINOX keyword + # takes precedence over EPOCH. + iferr { + equinox = imgetd (im, "EQUINOX") + } then { + iferr { + equinox = imgetd (im, "EPOCH") + } then { + equinox = INDEFD + } + } + + # Determine which equatorial system will be used. The default + # is FK4 if equinox < 1984.0, FK5 if equinox is >= 1984. + iferr { + call imgstr (im, "RADECSYS", Memc[atval], SZ_LINE) + } then { + radecsys = 0 + } else { + call strlwr (Memc[atval]) + radecsys = strdic (Memc[atval], Memc[atval], SZ_LINE, + EQTYPE_LIST) + } + if (radecsys == 0) { + if (IS_INDEFD(equinox)) + radecsys = EQTYPE_FK5 + else if (equinox < 1984.0d0) + radecsys = EQTYPE_FK4 + else + radecsys = EQTYPE_FK5 + } + + # Get the MJD of the observation. If there is no MJD in the + # header use the DATE_OBS keyword value and transform it to + # an MJD. + iferr { + epoch = imgetd (im, "MJD-WCS") + } then { + iferr { + epoch = imgetd (im, "MJD-OBS") + } then { + iferr { + call imgstr (im, "DATE-OBS", Memc[atval], SZ_LINE) + } then { + epoch = INDEFD + } else if (dtm_decode (Memc[atval], year, month, day, + hours, oldfits) == OK) { + call sl_cadj (year, month, day, epoch, ier) + if (ier != 0) + epoch = INDEFD + else if (! IS_INDEFD(hours) && hours >= 0.0d0 && + hours <= 24.0d0) + epoch = epoch + hours / 24.0d0 + } else + epoch = INDEFD + } + } + + # Set the default equinox and epoch appropriate for each + # equatorial system if these are undefined. + switch (radecsys) { + case EQTYPE_FK4, EQTYPE_FK4NOE: + if (IS_INDEFD(equinox)) + equinox = 1950.0d0 + if (IS_INDEFD(epoch)) + epoch = sl_eb2d (1950.0d0) + case EQTYPE_FK5, EQTYPE_ICRS: + if (IS_INDEFD(equinox)) + equinox = 2000.0d0 + if (IS_INDEFD(epoch)) + epoch = sl_ej2d (2000.0d0) + case EQTYPE_GAPPT: + equinox = 2000.0d0 + ; + } + + # Return if the epoch is undefined. This can only occur if + # the equatorial coordinate system is GAPPT and there is NO + # epoch of observation in the image header. + if (IS_INDEFD(epoch)) { + call sfree (sp) + return (ERR) + } + } + + # Get the MJD of the observation. If there is no MJD in the + # header use the DATE_OBS keyword value and transform it to + # an MJD. + if (ctype == CTYPE_ECLIPTIC) { + + iferr { + epoch = imgetd (im, "MJD-WCS") + } then { + iferr { + epoch = imgetd (im, "MJD-OBS") + } then { + iferr { + call imgstr (im, "DATE-OBS", Memc[atval], SZ_LINE) + } then { + epoch = INDEFD + } else if (dtm_decode (Memc[atval], year, month, day, + hours, oldfits) == OK) { + call sl_cadj (year, month, day, epoch, ier) + if (ier != 0) + epoch = INDEFD + else if (! IS_INDEFD(hours) && hours >= 0.0d0 && + hours <= 24.0d0) + epoch = epoch + hours / 24.0d0 + } else + epoch = INDEFD + } + } + + # Return if the epoch is undefined. + if (IS_INDEFD(epoch)) { + call sfree (sp) + return (ERR) + } + } + + if (ctype == CTYPE_GALACTIC || ctype == CTYPE_SUPERGALACTIC) { + + # Get the MJD of the observation. If there is no MJD in the + # header use the DATE_OBS keyword value and transform it to + # an MJD. + iferr { + epoch = imgetd (im, "MJD-WCS") + } then { + iferr { + epoch = imgetd (im, "MJD-OBS") + } then { + iferr { + call imgstr (im, "DATE-OBS", Memc[atval], SZ_LINE) + } then { + epoch = sl_eb2d (1950.0d0) + } else if (dtm_decode (Memc[atval], year, month, day, + hours, oldfits) == OK) { + call sl_cadj (year, month, day, epoch, ier) + if (ier != 0) + epoch = sl_eb2d (1950.0d0) + else { + if (! IS_INDEFD(hours) && hours >= 0.0d0 && + hours <= 24.0d0) + epoch = epoch + hours / 24.0d0 + #if (epoch < 1984.0d0) + #epoch = sl_eb2d (epoch) + #else + #epoch = sl_ej2d (epoch) + } + } else + epoch = sl_eb2d (1950.0d0) + } + } + } + + call sfree (sp) + + return (OK) +end + + +# SK_ENWCS -- Encode the celestial wcs system. + +procedure sk_enwcs (coo, wcsstr, maxch) + +pointer coo #I the celestial coordinate system descriptor +char wcsstr[ARB] #O the output wcs string +int maxch #I the size of the output string + +double sk_statd(), sl_epj(), sl_epb() +int sk_stati() + +begin + switch (sk_stati (coo, S_CTYPE)) { + + case CTYPE_EQUATORIAL: + + switch (sk_stati(coo, S_RADECSYS)) { + + case EQTYPE_GAPPT: + if (IS_INDEFD(sk_statd(coo, S_EPOCH))) { + call sprintf (wcsstr, maxch, "apparent") + } else { + call sprintf (wcsstr, maxch, "apparent J%0.8f") + call pargd (sl_epj(sk_statd(coo, S_EPOCH))) + } + + case EQTYPE_FK5: + call sprintf (wcsstr, maxch, "fk5 J%0.3f J%0.8f") + call pargd (sk_statd(coo, S_EQUINOX)) + call pargd (sl_epj(sk_statd(coo, S_EPOCH))) + + case EQTYPE_ICRS: + call sprintf (wcsstr, maxch, "icrs J%0.3f J%0.8f") + call pargd (sk_statd(coo, S_EQUINOX)) + call pargd (sl_epj(sk_statd(coo, S_EPOCH))) + + case EQTYPE_FK4: + call sprintf (wcsstr, maxch, "fk4 B%0.3f B%0.8f") + call pargd (sk_statd(coo, S_EQUINOX)) + call pargd (sl_epb(sk_statd(coo, S_EPOCH))) + + case EQTYPE_FK4NOE: + call sprintf (wcsstr, maxch, "fk4noe B%0.3f B%0.8f") + call pargd (sk_statd(coo, S_EQUINOX)) + call pargd (sl_epb(sk_statd(coo, S_EPOCH))) + + default: + wcsstr[1] = EOS + } + + case CTYPE_ECLIPTIC: + if (IS_INDEFD(sk_statd(coo, S_EPOCH))) { + call sprintf (wcsstr, maxch, "ecliptic") + } else { + call sprintf (wcsstr, maxch, "ecliptic J%0.8f") + call pargd (sl_epj(sk_statd(coo, S_EPOCH))) + } + + case CTYPE_GALACTIC: + call sprintf (wcsstr, maxch, "galactic J%0.8f") + call pargd (sl_epj(sk_statd(coo, S_EPOCH))) + + case CTYPE_SUPERGALACTIC: + call sprintf (wcsstr, maxch, "supergalactic j%0.8f") + call pargd (sl_epj(sk_statd(coo, S_EPOCH))) + } +end + + +# SK_COPY -- Copy the coodinate structure. + +pointer procedure sk_copy (cooin) + +pointer cooin #I the pointer to the input structure + +pointer cooout + +begin + if (cooin == NULL) + cooout = NULL + else { + call calloc (cooout, LEN_SKYCOOSTRUCT, TY_STRUCT) + SKY_VXOFF(cooout) = SKY_VXOFF(cooin) + SKY_VYOFF(cooout) = SKY_VYOFF(cooin) + SKY_VXSTEP(cooout) = SKY_VXSTEP(cooin) + SKY_VYSTEP(cooout) = SKY_VYSTEP(cooin) + SKY_EQUINOX(cooout) = SKY_EQUINOX(cooin) + SKY_EPOCH(cooout) = SKY_EPOCH(cooin) + SKY_CTYPE(cooout) = SKY_CTYPE(cooin) + SKY_RADECSYS(cooout) = SKY_RADECSYS(cooin) + SKY_WTYPE(cooout) = SKY_WTYPE(cooin) + SKY_PLNGAX(cooout) = SKY_PLNGAX(cooin) + SKY_PLATAX(cooout) = SKY_PLATAX(cooin) + SKY_XLAX(cooout) = SKY_XLAX(cooin) + SKY_YLAX(cooout) = SKY_YLAX(cooin) + SKY_PIXTYPE(cooout) = SKY_PIXTYPE(cooin) + SKY_NLNGAX(cooout) = SKY_NLNGAX(cooin) + SKY_NLATAX(cooout) = SKY_NLATAX(cooin) + SKY_NLNGUNITS(cooout) = SKY_NLNGUNITS(cooin) + SKY_NLATUNITS(cooout) = SKY_NLATUNITS(cooin) + call strcpy (SKY_COOSYSTEM(cooin), SKY_COOSYSTEM(cooout), + SZ_FNAME) + } + + return (cooout) +end + + +# SK_CLOSE -- Free the coordinate structure. + +procedure sk_close (coo) + +pointer coo #U the input coordinate structure + +begin + if (coo != NULL) + call mfree (coo, TY_STRUCT) +end diff --git a/vendor/x11iraf/ximtool/clients.old/lib/skywcs/sksaveim.f b/vendor/x11iraf/ximtool/clients.old/lib/skywcs/sksaveim.f new file mode 100644 index 00000000..63e39d30 --- /dev/null +++ b/vendor/x11iraf/ximtool/clients.old/lib/skywcs/sksaveim.f @@ -0,0 +1,363 @@ + subroutine sksavm (coo, mw, im) + logical Memb(1) + integer*2 Memc(1) + integer*2 Mems(1) + integer Memi(1) + integer*4 Meml(1) + real Memr(1) + double precision Memd(1) + complex Memx(1) + equivalence (Memb, Memc, Mems, Memi, Meml, Memr, Memd, Memx) + common /Mem/ Memd + integer coo + integer mw + integer im + logical xerpop + logical xerflg + common /xercom/ xerflg + integer sw0001,sw0002 + integer*2 st0001(7) + integer*2 st0002(3) + integer*2 st0003(7) + integer*2 st0004(4) + integer*2 st0005(9) + integer*2 st0006(4) + integer*2 st0007(8) + integer*2 st0008(8) + integer*2 st0009(9) + integer*2 st0010(7) + integer*2 st0011(8) + integer*2 st0012(8) + integer*2 st0013(9) + integer*2 st0014(4) + integer*2 st0015(8) + integer*2 st0016(8) + integer*2 st0017(9) + integer*2 st0018(5) + integer*2 st0019(8) + integer*2 st0020(8) + integer*2 st0021(9) + integer*2 st0022(6) + integer*2 st0023(8) + integer*2 st0024(8) + integer*2 st0025(7) + integer*2 st0026(5) + integer*2 st0027(7) + integer*2 st0028(5) + integer*2 st0029(9) + integer*2 st0030(8) + integer*2 st0031(8) + integer*2 st0032(7) + integer*2 st0033(5) + integer*2 st0034(7) + integer*2 st0035(5) + integer*2 st0036(9) + integer*2 st0037(8) + integer*2 st0038(8) + integer*2 st0039(7) + integer*2 st0040(5) + integer*2 st0041(7) + integer*2 st0042(5) + integer*2 st0043(9) + integer*2 st0044(8) + integer*2 st0045(8) + save + integer iyy + data st0001 / 97,120,116,121,112,101, 0/ + data st0002 /114, 97, 0/ + data st0003 / 97,120,116,121,112,101, 0/ + data st0004 /100,101, 99, 0/ + data (st0005(iyy),iyy= 1, 8) /114, 97,100,101, 99,115,121,115/ + data (st0005(iyy),iyy= 9, 9) / 0/ + data st0006 / 70, 75, 52, 0/ + data st0007 /101,113,117,105,110,111,120, 0/ + data st0008 /109,106,100, 45,119, 99,115, 0/ + data (st0009(iyy),iyy= 1, 8) /114, 97,100,101, 99,115,121,115/ + data (st0009(iyy),iyy= 9, 9) / 0/ + data st0010 / 70, 75, 52, 78, 79, 69, 0/ + data st0011 /101,113,117,105,110,111,120, 0/ + data st0012 /109,106,100, 45,119, 99,115, 0/ + data (st0013(iyy),iyy= 1, 8) /114, 97,100,101, 99,115,121,115/ + data (st0013(iyy),iyy= 9, 9) / 0/ + data st0014 / 70, 75, 53, 0/ + data st0015 /101,113,117,105,110,111,120, 0/ + data st0016 /109,106,100, 45,119, 99,115, 0/ + data (st0017(iyy),iyy= 1, 8) /114, 97,100,101, 99,115,121,115/ + data (st0017(iyy),iyy= 9, 9) / 0/ + data st0018 / 73, 67, 82, 83, 0/ + data st0019 /101,113,117,105,110,111,120, 0/ + data st0020 /109,106,100, 45,119, 99,115, 0/ + data (st0021(iyy),iyy= 1, 8) /114, 97,100,101, 99,115,121,115/ + data (st0021(iyy),iyy= 9, 9) / 0/ + data st0022 / 71, 65, 80, 80, 84, 0/ + data st0023 /101,113,117,105,110,111,120, 0/ + data st0024 /109,106,100, 45,119, 99,115, 0/ + data st0025 / 97,120,116,121,112,101, 0/ + data st0026 /101,108,111,110, 0/ + data st0027 / 97,120,116,121,112,101, 0/ + data st0028 /101,108, 97,116, 0/ + data (st0029(iyy),iyy= 1, 8) /114, 97,100,101, 99,115,121,115/ + data (st0029(iyy),iyy= 9, 9) / 0/ + data st0030 /101,113,117,105,110,111,120, 0/ + data st0031 /109,106,100, 45,119, 99,115, 0/ + data st0032 / 97,120,116,121,112,101, 0/ + data st0033 /103,108,111,110, 0/ + data st0034 / 97,120,116,121,112,101, 0/ + data st0035 /103,108, 97,116, 0/ + data (st0036(iyy),iyy= 1, 8) /114, 97,100,101, 99,115,121,115/ + data (st0036(iyy),iyy= 9, 9) / 0/ + data st0037 /101,113,117,105,110,111,120, 0/ + data st0038 /109,106,100, 45,119, 99,115, 0/ + data st0039 / 97,120,116,121,112,101, 0/ + data st0040 /115,108,111,110, 0/ + data st0041 / 97,120,116,121,112,101, 0/ + data st0042 /115,108, 97,116, 0/ + data (st0043(iyy),iyy= 1, 8) /114, 97,100,101, 99,115,121,115/ + data (st0043(iyy),iyy= 9, 9) / 0/ + data st0044 /101,113,117,105,110,111,120, 0/ + data st0045 /109,106,100, 45,119, 99,115, 0/ + sw0001=(memi(coo+12) ) + goto 110 +120 continue + call mwswas (mw, memi(coo+15) , st0001, st0002) + call mwswas (mw, memi(coo+16) , st0003, st0004) + sw0002=(memi(coo+13) ) + goto 130 +140 continue + call imastr (im, st0005, st0006) + call imaddd (im, st0007, memd((((coo+8)-1)/2+1)) ) + call imaddd (im, st0008, memd((((coo+10)-1)/2+1)) ) + goto 131 +150 continue + call imastr (im, st0009, st0010) + call imaddd (im, st0011, memd((((coo+8)-1)/2+1)) ) + call imaddd (im, st0012, memd((((coo+10)-1)/2+1)) ) + goto 131 +160 continue + call imastr (im, st0013, st0014) + call imaddd (im, st0015, memd((((coo+8)-1)/2+1)) ) + call xerpsh + call imdelf (im, st0016) + if (.not.xerpop()) goto 170 +170 continue + goto 131 +180 continue + call imastr (im, st0017, st0018) + call imaddd (im, st0019, memd((((coo+8)-1)/2+1)) ) + call xerpsh + call imdelf (im, st0020) + if (.not.xerpop()) goto 190 +190 continue + goto 131 +200 continue + call imastr (im, st0021, st0022) + call xerpsh + call imdelf (im, st0023) + if (.not.xerpop()) goto 210 +210 continue + call imaddd (im, st0024, memd((((coo+10)-1)/2+1)) ) + goto 131 +130 continue + if (sw0002.lt.1.or.sw0002.gt.5) goto 131 + goto (140,150,160,180,200),sw0002 +131 continue + goto 111 +220 continue + call mwswas (mw, memi(coo+15) , st0025, st0026) + call mwswas (mw, memi(coo+16) , st0027, st0028) + call xerpsh + call imdelf (im, st0029) + if (.not.xerpop()) goto 230 +230 continue + call xerpsh + call imdelf (im, st0030) + if (.not.xerpop()) goto 240 +240 continue + call imaddd (im, st0031, memd((((coo+10)-1)/2+1)) ) + goto 111 +250 continue + call mwswas (mw, memi(coo+15) , st0032, st0033) + call mwswas (mw, memi(coo+16) , st0034, st0035) + call xerpsh + call imdelf (im, st0036) + if (.not.xerpop()) goto 260 +260 continue + call xerpsh + call imdelf (im, st0037) + if (.not.xerpop()) goto 270 +270 continue + call xerpsh + call imdelf (im, st0038) + if (.not.xerpop()) goto 280 +280 continue + goto 111 +290 continue + call mwswas (mw, memi(coo+15) , st0039, st0040) + call mwswas (mw, memi(coo+16) , st0041, st0042) + call xerpsh + call imdelf (im, st0043) + if (.not.xerpop()) goto 300 +300 continue + call xerpsh + call imdelf (im, st0044) + if (.not.xerpop()) goto 310 +310 continue + call xerpsh + call imdelf (im, st0045) + if (.not.xerpop()) goto 320 +320 continue + goto 111 +110 continue + if (sw0001.lt.1.or.sw0001.gt.4) goto 111 + goto (120,220,250,290),sw0001 +111 continue +100 return + end + subroutine skctym (coo, im) + logical Memb(1) + integer*2 Memc(1) + integer*2 Mems(1) + integer Memi(1) + integer*4 Meml(1) + real Memr(1) + double precision Memd(1) + complex Memx(1) + equivalence (Memb, Memc, Mems, Memi, Meml, Memr, Memd, Memx) + common /Mem/ Memd + integer coo + integer im + integer sp + integer wtype + integer key1 + integer key2 + integer attr + integer skwrdr + integer sw0001 + integer*2 st0001(8) + integer*2 st0002(8) + integer*2 st0003(7) + integer*2 st0004(7) + integer*2 st0005(114) + integer*2 st0006(4) + integer*2 st0007(9) + integer*2 st0008(9) + integer*2 st0009(9) + integer*2 st0010(9) + integer*2 st0011(9) + integer*2 st0012(9) + integer*2 st0013(9) + integer*2 st0014(9) + integer*2 st0015(7) + integer*2 st0016(7) + save + integer iyy + data st0001 / 67, 84, 89, 80, 69, 37,100, 0/ + data st0002 / 67, 84, 89, 80, 69, 37,100, 0/ + data st0003 / 76, 73, 78, 69, 65, 82, 0/ + data st0004 / 76, 73, 78, 69, 65, 82, 0/ + data (st0005(iyy),iyy= 1, 8) /124,108,105,110,124, 97,122,112/ + data (st0005(iyy),iyy= 9,16) /124,116, 97,110,124,115,105,110/ + data (st0005(iyy),iyy=17,24) /124,115,116,103,124, 97,114, 99/ + data (st0005(iyy),iyy=25,32) /124,122,112,110,124,122,101, 97/ + data (st0005(iyy),iyy=33,40) /124, 97,105,114,124, 99,121,112/ + data (st0005(iyy),iyy=41,48) /124, 99, 97,114,124,109,101,114/ + data (st0005(iyy),iyy=49,56) /124, 99,101, 97,124, 99,111,112/ + data (st0005(iyy),iyy=57,64) /124, 99,111,100,124, 99,111,101/ + data (st0005(iyy),iyy=65,72) /124, 99,111,111,124, 98,111,110/ + data (st0005(iyy),iyy=73,80) /124,112, 99,111,124,103,108,115/ + data (st0005(iyy),iyy=81,88) /124,112, 97,114,124, 97,105,116/ + data (st0005(iyy),iyy=89,96) /124,109,111,108,124, 99,115, 99/ + data (st0005(iyy),iyy=97,104) /124,113,115, 99,124,116,115, 99/ + data (st0005(iyy),iyy=105,112) /124,116,110,120,124,122,112,120/ + data (st0005(iyy),iyy=113,114) /124, 0/ + data st0006 /116, 97,110, 0/ + data (st0007(iyy),iyy= 1, 8) / 82, 65, 45, 45, 45, 37, 51,115/ + data (st0007(iyy),iyy= 9, 9) / 0/ + data (st0008(iyy),iyy= 1, 8) / 68, 69, 67, 45, 45, 37, 51,115/ + data (st0008(iyy),iyy= 9, 9) / 0/ + data (st0009(iyy),iyy= 1, 8) / 69, 76, 79, 78, 45, 37, 51,115/ + data (st0009(iyy),iyy= 9, 9) / 0/ + data (st0010(iyy),iyy= 1, 8) / 69, 76, 65, 84, 45, 37, 51,115/ + data (st0010(iyy),iyy= 9, 9) / 0/ + data (st0011(iyy),iyy= 1, 8) / 71, 76, 79, 78, 45, 37, 51,115/ + data (st0011(iyy),iyy= 9, 9) / 0/ + data (st0012(iyy),iyy= 1, 8) / 71, 76, 65, 84, 45, 37, 51,115/ + data (st0012(iyy),iyy= 9, 9) / 0/ + data (st0013(iyy),iyy= 1, 8) / 83, 76, 79, 78, 45, 37, 51,115/ + data (st0013(iyy),iyy= 9, 9) / 0/ + data (st0014(iyy),iyy= 1, 8) / 83, 76, 65, 84, 45, 37, 51,115/ + data (st0014(iyy),iyy= 9, 9) / 0/ + data st0015 / 76, 73, 78, 69, 65, 82, 0/ + data st0016 / 76, 73, 78, 69, 65, 82, 0/ + call smark (sp) + call salloc (key1, 8, 2) + call salloc (key2, 8, 2) + call salloc (wtype, 3, 2) + call salloc (attr, 8, 2) + call sprinf (memc(key1), 8, st0001) + call pargi (memi(coo+15) ) + call sprinf (memc(key2), 8, st0002) + call pargi (memi(coo+16) ) + if (.not.(memi(coo+14) .le. 0 .or. memi(coo+14) .eq. 1)) goto + * 110 + call imastr (im, memc(key1), st0003) + call imastr (im, memc(key2), st0004) + call sfree (sp) + goto 100 +110 continue + if (.not.(skwrdr (memi(coo+14) , memc(wtype), 3, st0005) .le. 0 + * )) goto 120 + call xstrcy(st0006, memc(wtype), 3) +120 continue + call strupr (memc(wtype)) + sw0001=(memi(coo+12) ) + goto 130 +140 continue + call sprinf (memc(attr), 8, st0007) + call pargsr (memc(wtype)) + call imastr (im, memc(key1), memc(attr)) + call sprinf (memc(attr), 8, st0008) + call pargsr (memc(wtype)) + call imastr (im, memc(key2), memc(attr)) + goto 131 +150 continue + call sprinf (memc(attr), 8, st0009) + call pargsr (memc(wtype)) + call imastr (im, memc(key1), memc(attr)) + call sprinf (memc(attr), 8, st0010) + call pargsr (memc(wtype)) + call imastr (im, memc(key2), memc(attr)) + goto 131 +160 continue + call sprinf (memc(attr), 8, st0011) + call pargsr (memc(wtype)) + call imastr (im, memc(key1), memc(attr)) + call sprinf (memc(attr), 8, st0012) + call pargsr (memc(wtype)) + call imastr (im, memc(key2), memc(attr)) + goto 131 +170 continue + call sprinf (memc(attr), 8, st0013) + call pargsr (memc(wtype)) + call imastr (im, memc(key1), memc(attr)) + call sprinf (memc(attr), 8, st0014) + call pargsr (memc(wtype)) + call imastr (im, memc(key2), memc(attr)) + goto 131 +180 continue + call imastr (im, memc(key1), st0015) + call imastr (im, memc(key2), st0016) + goto 131 +130 continue + if (sw0001.lt.1.or.sw0001.gt.4) goto 180 + goto (140,150,160,170),sw0001 +131 continue + call sfree (sp) +100 return + end +c sprinf sprintf +c skctym sk_ctypeim +c skwrdr sk_wrdstr +c sksavm sk_saveim +c mwswas mw_swattrs +c pargsr pargstr diff --git a/vendor/x11iraf/ximtool/clients.old/lib/skywcs/sksaveim.x b/vendor/x11iraf/ximtool/clients.old/lib/skywcs/sksaveim.x new file mode 100644 index 00000000..77b5a1d9 --- /dev/null +++ b/vendor/x11iraf/ximtool/clients.old/lib/skywcs/sksaveim.x @@ -0,0 +1,157 @@ +include "skywcsdef.h" +include "skywcs.h" + +# SK_SAVEIM -- Update the image header keywords that describe the +# fundamental coordinate system, CTYPE, RADECSYS, EQUINOX (EPOCH), and +# MJD-WCS. + +procedure sk_saveim (coo, mw, im) + +pointer coo #I pointer to the coordinate structure +pointer mw #I pointer to the mwcs structure +pointer im #I image descriptor + +errchk imdelf() + +begin + # Move all this to a separate routine + switch (SKY_CTYPE(coo)) { + + case CTYPE_EQUATORIAL: + call mw_swattrs (mw, SKY_PLNGAX(coo), "axtype", "ra") + call mw_swattrs (mw, SKY_PLATAX(coo), "axtype", "dec") + switch (SKY_RADECSYS(coo)) { + case EQTYPE_FK4: + call imastr (im, "radecsys", "FK4") + call imaddd (im, "equinox", SKY_EQUINOX(coo)) + call imaddd (im, "mjd-wcs", SKY_EPOCH(coo)) + case EQTYPE_FK4NOE: + call imastr (im, "radecsys", "FK4NOE") + call imaddd (im, "equinox", SKY_EQUINOX(coo)) + call imaddd (im, "mjd-wcs", SKY_EPOCH(coo)) + case EQTYPE_FK5: + call imastr (im, "radecsys", "FK5") + call imaddd (im, "equinox", SKY_EQUINOX(coo)) + iferr (call imdelf (im, "mjd-wcs")) + ; + case EQTYPE_ICRS: + call imastr (im, "radecsys", "ICRS") + call imaddd (im, "equinox", SKY_EQUINOX(coo)) + iferr (call imdelf (im, "mjd-wcs")) + ; + case EQTYPE_GAPPT: + call imastr (im, "radecsys", "GAPPT") + iferr (call imdelf (im, "equinox")) + ; + call imaddd (im, "mjd-wcs", SKY_EPOCH(coo)) + } + + case CTYPE_ECLIPTIC: + call mw_swattrs (mw, SKY_PLNGAX(coo), "axtype", "elon") + call mw_swattrs (mw, SKY_PLATAX(coo), "axtype", "elat") + iferr (call imdelf (im, "radecsys")) + ; + iferr (call imdelf (im, "equinox")) + ; + call imaddd (im, "mjd-wcs", SKY_EPOCH(coo)) + + case CTYPE_GALACTIC: + call mw_swattrs (mw, SKY_PLNGAX(coo), "axtype", "glon") + call mw_swattrs (mw, SKY_PLATAX(coo), "axtype", "glat") + iferr (call imdelf (im, "radecsys")) + ; + iferr (call imdelf (im, "equinox")) + ; + iferr (call imdelf (im, "mjd-wcs")) + ; + + case CTYPE_SUPERGALACTIC: + call mw_swattrs (mw, SKY_PLNGAX(coo), "axtype", "slon") + call mw_swattrs (mw, SKY_PLATAX(coo), "axtype", "slat") + iferr (call imdelf (im, "radecsys")) + ; + iferr (call imdelf (im, "equinox")) + ; + iferr (call imdelf (im, "mjd-wcs")) + ; + } +end + + +# SK_CTYPEIM -- Modify the CTYPE keywords appropriately. This step will +# become unnecessary when MWCS is updated to deal with non-equatorial celestial +# coordinate systems. + +procedure sk_ctypeim (coo, im) + +pointer coo #I pointer to the coordinate structure +pointer im #I image descriptor + +pointer sp, wtype, key1, key2, attr +int sk_wrdstr() + +begin + call smark (sp) + call salloc (key1, 8, TY_CHAR) + call salloc (key2, 8, TY_CHAR) + call salloc (wtype, 3, TY_CHAR) + call salloc (attr, 8, TY_CHAR) + + call sprintf (Memc[key1], 8, "CTYPE%d") + call pargi (SKY_PLNGAX(coo)) + call sprintf (Memc[key2], 8, "CTYPE%d") + call pargi (SKY_PLATAX(coo)) + + if (SKY_WTYPE(coo) <= 0 || SKY_WTYPE(coo) == WTYPE_LIN) { + call imastr (im, Memc[key1], "LINEAR") + call imastr (im, Memc[key2], "LINEAR") + call sfree (sp) + return + } + + if (sk_wrdstr (SKY_WTYPE(coo), Memc[wtype], 3, WTYPE_LIST) <= 0) + call strcpy ("tan", Memc[wtype], 3) + call strupr (Memc[wtype]) + + # Move all this to a separate routine + switch (SKY_CTYPE(coo)) { + + case CTYPE_EQUATORIAL: + call sprintf (Memc[attr], 8, "RA---%3s") + call pargstr (Memc[wtype]) + call imastr (im, Memc[key1], Memc[attr]) + call sprintf (Memc[attr], 8, "DEC--%3s") + call pargstr (Memc[wtype]) + call imastr (im, Memc[key2], Memc[attr]) + + case CTYPE_ECLIPTIC: + call sprintf (Memc[attr], 8, "ELON-%3s") + call pargstr (Memc[wtype]) + call imastr (im, Memc[key1], Memc[attr]) + call sprintf (Memc[attr], 8, "ELAT-%3s") + call pargstr (Memc[wtype]) + call imastr (im, Memc[key2], Memc[attr]) + + case CTYPE_GALACTIC: + call sprintf (Memc[attr], 8, "GLON-%3s") + call pargstr (Memc[wtype]) + call imastr (im, Memc[key1], Memc[attr]) + call sprintf (Memc[attr], 8, "GLAT-%3s") + call pargstr (Memc[wtype]) + call imastr (im, Memc[key2], Memc[attr]) + + case CTYPE_SUPERGALACTIC: + call sprintf (Memc[attr], 8, "SLON-%3s") + call pargstr (Memc[wtype]) + call imastr (im, Memc[key1], Memc[attr]) + call sprintf (Memc[attr], 8, "SLAT-%3s") + call pargstr (Memc[wtype]) + call imastr (im, Memc[key2], Memc[attr]) + + default: + call imastr (im, Memc[key1], "LINEAR") + call imastr (im, Memc[key2], "LINEAR") + } + + call sfree (sp) +end diff --git a/vendor/x11iraf/ximtool/clients.old/lib/skywcs/skset.f b/vendor/x11iraf/ximtool/clients.old/lib/skywcs/skset.f new file mode 100644 index 00000000..65765222 --- /dev/null +++ b/vendor/x11iraf/ximtool/clients.old/lib/skywcs/skset.f @@ -0,0 +1,179 @@ + subroutine sksetd (coo, param, value) + logical Memb(1) + integer*2 Memc(1) + integer*2 Mems(1) + integer Memi(1) + integer*4 Meml(1) + real Memr(1) + double precision Memd(1) + complex Memx(1) + equivalence (Memb, Memc, Mems, Memi, Meml, Memr, Memd, Memx) + common /Mem/ Memd + integer coo + integer param + double precision value + logical xerflg + common /xercom/ xerflg + integer sw0001 + integer*2 st0001(46) + save + integer iyy + data (st0001(iyy),iyy= 1, 8) / 83, 75, 89, 95, 83, 69, 84, 68/ + data (st0001(iyy),iyy= 9,16) / 58, 32, 85,110,107,110,111,119/ + data (st0001(iyy),iyy=17,24) /110, 32, 99,111,111,114,100,105/ + data (st0001(iyy),iyy=25,32) /110, 97,116,101, 32,115,121,115/ + data (st0001(iyy),iyy=33,40) /116,101,109, 32,112, 97,114, 97/ + data (st0001(iyy),iyy=41,46) /109,101,116,101,114, 0/ + sw0001=(param) + goto 110 +120 continue + memd((((coo)-1)/2+1)) = value + goto 111 +130 continue + memd((((coo+2)-1)/2+1)) = value + goto 111 +140 continue + memd((((coo+4)-1)/2+1)) = value + goto 111 +150 continue + memd((((coo+6)-1)/2+1)) = value + goto 111 +160 continue + memd((((coo+8)-1)/2+1)) = value + goto 111 +170 continue + memd((((coo+10)-1)/2+1)) = value + goto 111 +180 continue + call xerror(0, st0001) + if (xerflg) goto 100 + goto 111 +110 continue + if (sw0001.lt.1.or.sw0001.gt.6) goto 180 + goto (120,130,140,150,160,170),sw0001 +111 continue +100 return + end + subroutine skseti (coo, param, value) + logical Memb(1) + integer*2 Memc(1) + integer*2 Mems(1) + integer Memi(1) + integer*4 Meml(1) + real Memr(1) + double precision Memd(1) + complex Memx(1) + equivalence (Memb, Memc, Mems, Memi, Meml, Memr, Memd, Memx) + common /Mem/ Memd + integer coo + integer param + integer value + logical xerflg + common /xercom/ xerflg + integer sw0001 + integer*2 st0001(46) + save + integer iyy + data (st0001(iyy),iyy= 1, 8) / 83, 75, 89, 95, 83, 69, 84, 73/ + data (st0001(iyy),iyy= 9,16) / 58, 32, 85,110,107,110,111,119/ + data (st0001(iyy),iyy=17,24) /110, 32, 99,111,111,114,100,105/ + data (st0001(iyy),iyy=25,32) /110, 97,116,101, 32,115,121,115/ + data (st0001(iyy),iyy=33,40) /116,101,109, 32,112, 97,114, 97/ + data (st0001(iyy),iyy=41,46) /109,101,116,101,114, 0/ + sw0001=(param) + goto 110 +120 continue + memi(coo+12) = value + goto 111 +130 continue + memi(coo+13) = value + goto 111 +140 continue + memi(coo+14) = value + goto 111 +150 continue + memi(coo+15) = value + goto 111 +160 continue + memi(coo+16) = value + goto 111 +170 continue + memi(coo+17) = value + goto 111 +180 continue + memi(coo+18) = value + goto 111 +190 continue + memi(coo+19) = value + goto 111 +200 continue + memi(coo+20) = value + goto 111 +210 continue + memi(coo+21) = value + goto 111 +220 continue + memi(coo+22) = value + goto 111 +230 continue + memi(coo+23) = value + goto 111 +240 continue + memi(coo+24) = value + goto 111 +250 continue + call xerror(0, st0001) + if (xerflg) goto 100 + goto 111 +110 continue + sw0001=sw0001-6 + if (sw0001.lt.1.or.sw0001.gt.14) goto 250 + goto (120,130,140,150,160,170,180,190,200,210,220,230,250, + * 240),sw0001 +111 continue +100 return + end + subroutine sksets (coo, param, value) + logical Memb(1) + integer*2 Memc(1) + integer*2 Mems(1) + integer Memi(1) + integer*4 Meml(1) + real Memr(1) + double precision Memd(1) + complex Memx(1) + equivalence (Memb, Memc, Mems, Memi, Meml, Memr, Memd, Memx) + common /Mem/ Memd + integer coo + integer param + integer*2 value(*) + logical xerflg + common /xercom/ xerflg + integer sw0001 + integer*2 st0001(48) + save + integer iyy + data (st0001(iyy),iyy= 1, 8) / 83, 75, 89, 95, 83, 69, 84, 83/ + data (st0001(iyy),iyy= 9,16) / 84, 82, 58, 32, 85,110,107,110/ + data (st0001(iyy),iyy=17,24) /111,119,110, 32, 99,111,111,114/ + data (st0001(iyy),iyy=25,32) /100,105,110, 97,116,101, 32,115/ + data (st0001(iyy),iyy=33,40) /121,115,116,101,109, 32,112, 97/ + data (st0001(iyy),iyy=41,48) /114, 97,109,101,116,101,114, 0/ + sw0001=(param) + goto 110 +120 continue + call xstrcy(value, memc((((coo+25)-1)*2+1)) , 255 ) + goto 111 +130 continue + call xerror(0, st0001) + if (xerflg) goto 100 + goto 111 +110 continue + if (sw0001.eq.19) goto 120 + goto 130 +111 continue +100 return + end +c sksetd sk_setd +c skseti sk_seti +c sksets sk_sets diff --git a/vendor/x11iraf/ximtool/clients.old/lib/skywcs/skset.x b/vendor/x11iraf/ximtool/clients.old/lib/skywcs/skset.x new file mode 100644 index 00000000..9e7191c3 --- /dev/null +++ b/vendor/x11iraf/ximtool/clients.old/lib/skywcs/skset.x @@ -0,0 +1,90 @@ +include "skywcsdef.h" +include "skywcs.h" + + +# SK_SETD -- Set a double precision coordinate parameter. + +procedure sk_setd (coo, param, value) + +pointer coo #I pointer to the coordinate structure +int param #I the input parameter +double value #I the parameter value + +begin + switch (param) { + case S_VXOFF: + SKY_VXOFF(coo) = value + case S_VYOFF: + SKY_VYOFF(coo) = value + case S_VXSTEP: + SKY_VXSTEP(coo) = value + case S_VYSTEP: + SKY_VYSTEP(coo) = value + case S_EQUINOX: + SKY_EQUINOX(coo) = value + case S_EPOCH: + SKY_EPOCH(coo) = value + default: + call error (0, "SKY_SETD: Unknown coordinate system parameter") + } +end + + +# SK_SETI -- Set an integer coordinate parameter. + +procedure sk_seti (coo, param, value) + +pointer coo #I pointer to the coordinate structure +int param #I the input parameter +int value #I the parameter value + +begin + switch (param) { + case S_CTYPE: + SKY_CTYPE(coo) = value + case S_RADECSYS: + SKY_RADECSYS(coo) = value + case S_WTYPE: + SKY_WTYPE(coo) = value + case S_PLNGAX: + SKY_PLNGAX(coo) = value + case S_PLATAX: + SKY_PLATAX(coo) = value + case S_XLAX: + SKY_XLAX(coo) = value + case S_YLAX: + SKY_YLAX(coo) = value + case S_PIXTYPE: + SKY_PIXTYPE(coo) = value + case S_NLNGAX: + SKY_NLNGAX(coo) = value + case S_NLATAX: + SKY_NLATAX(coo) = value + case S_NLNGUNITS: + SKY_NLNGUNITS(coo) = value + case S_NLATUNITS: + SKY_NLATUNITS(coo) = value + case S_STATUS: + SKY_STATUS(coo) = value + default: + call error (0, "SKY_SETI: Unknown coordinate system parameter") + } +end + + +# SK_SETS -- Set a character string coordinate parameter. + +procedure sk_sets (coo, param, value) + +pointer coo #I pointer to the coordinate structure +int param #I the input parameter +char value[ARB] #I the parameter value + +begin + switch (param) { + case S_COOSYSTEM: + call strcpy (value, SKY_COOSYSTEM(coo), SZ_FNAME) + default: + call error (0, "SKY_SETSTR: Unknown coordinate system parameter") + } +end diff --git a/vendor/x11iraf/ximtool/clients.old/lib/skywcs/skstat.f b/vendor/x11iraf/ximtool/clients.old/lib/skywcs/skstat.f new file mode 100644 index 00000000..4c3c8397 --- /dev/null +++ b/vendor/x11iraf/ximtool/clients.old/lib/skywcs/skstat.f @@ -0,0 +1,179 @@ + double precision function skstad (coo, param) + logical Memb(1) + integer*2 Memc(1) + integer*2 Mems(1) + integer Memi(1) + integer*4 Meml(1) + real Memr(1) + double precision Memd(1) + complex Memx(1) + equivalence (Memb, Memc, Mems, Memi, Meml, Memr, Memd, Memx) + common /Mem/ Memd + integer coo + integer param + logical xerflg + common /xercom/ xerflg + integer sw0001 + integer*2 st0001(47) + save + integer iyy + data (st0001(iyy),iyy= 1, 8) / 83, 75, 89, 95, 83, 84, 65, 84/ + data (st0001(iyy),iyy= 9,16) / 68, 58, 32, 85,110,107,110,111/ + data (st0001(iyy),iyy=17,24) /119,110, 32, 99,111,111,114,100/ + data (st0001(iyy),iyy=25,32) /105,110, 97,116,101, 32,115,121/ + data (st0001(iyy),iyy=33,40) /115,116,101,109, 32,112, 97,114/ + data (st0001(iyy),iyy=41,47) / 97,109,101,116,101,114, 0/ + skstad = 0 + sw0001=(param) + goto 110 +120 continue + skstad = (memd((((coo)-1)/2+1)) ) + goto 100 +130 continue + skstad = (memd((((coo+2)-1)/2+1)) ) + goto 100 +140 continue + skstad = (memd((((coo+4)-1)/2+1)) ) + goto 100 +150 continue + skstad = (memd((((coo+6)-1)/2+1)) ) + goto 100 +160 continue + skstad = (memd((((coo+8)-1)/2+1)) ) + goto 100 +170 continue + skstad = (memd((((coo+10)-1)/2+1)) ) + goto 100 +180 continue + call xerror(0, st0001) + if (xerflg) goto 100 + goto 111 +110 continue + if (sw0001.lt.1.or.sw0001.gt.6) goto 180 + goto (120,130,140,150,160,170),sw0001 +111 continue +100 return + end + integer function skstai (coo, param) + logical Memb(1) + integer*2 Memc(1) + integer*2 Mems(1) + integer Memi(1) + integer*4 Meml(1) + real Memr(1) + double precision Memd(1) + complex Memx(1) + equivalence (Memb, Memc, Mems, Memi, Meml, Memr, Memd, Memx) + common /Mem/ Memd + integer coo + integer param + logical xerflg + common /xercom/ xerflg + integer sw0001 + integer*2 st0001(47) + save + integer iyy + data (st0001(iyy),iyy= 1, 8) / 83, 75, 89, 95, 83, 84, 65, 84/ + data (st0001(iyy),iyy= 9,16) / 73, 58, 32, 85,110,107,110,111/ + data (st0001(iyy),iyy=17,24) /119,110, 32, 99,111,111,114,100/ + data (st0001(iyy),iyy=25,32) /105,110, 97,116,101, 32,115,121/ + data (st0001(iyy),iyy=33,40) /115,116,101,109, 32,112, 97,114/ + data (st0001(iyy),iyy=41,47) / 97,109,101,116,101,114, 0/ + sw0001=(param) + goto 110 +120 continue + skstai = (memi(coo+12) ) + goto 100 +130 continue + skstai = (memi(coo+13) ) + goto 100 +140 continue + skstai = (memi(coo+14) ) + goto 100 +150 continue + skstai = (memi(coo+15) ) + goto 100 +160 continue + skstai = (memi(coo+16) ) + goto 100 +170 continue + skstai = (memi(coo+17) ) + goto 100 +180 continue + skstai = (memi(coo+18) ) + goto 100 +190 continue + skstai = (memi(coo+19) ) + goto 100 +200 continue + skstai = (memi(coo+20) ) + goto 100 +210 continue + skstai = (memi(coo+21) ) + goto 100 +220 continue + skstai = (memi(coo+22) ) + goto 100 +230 continue + skstai = (memi(coo+23) ) + goto 100 +240 continue + skstai = (memi(coo+24) ) + goto 100 +250 continue + call xerror(0, st0001) + if (xerflg) goto 100 + goto 111 +110 continue + sw0001=sw0001-6 + if (sw0001.lt.1.or.sw0001.gt.14) goto 250 + goto (120,130,140,150,160,170,180,190,200,210,220,230,250, + * 240),sw0001 +111 continue +100 return + end + subroutine skstas (coo, param, value, maxch) + logical Memb(1) + integer*2 Memc(1) + integer*2 Mems(1) + integer Memi(1) + integer*4 Meml(1) + real Memr(1) + double precision Memd(1) + complex Memx(1) + equivalence (Memb, Memc, Mems, Memi, Meml, Memr, Memd, Memx) + common /Mem/ Memd + integer coo + integer param + integer*2 value + integer maxch + logical xerflg + common /xercom/ xerflg + integer sw0001 + integer*2 st0001(48) + save + integer iyy + data (st0001(iyy),iyy= 1, 8) / 83, 75, 89, 95, 71, 69, 84, 83/ + data (st0001(iyy),iyy= 9,16) / 84, 82, 58, 32, 85,110,107,110/ + data (st0001(iyy),iyy=17,24) /111,119,110, 32, 99,111,111,114/ + data (st0001(iyy),iyy=25,32) /100,105,110, 97,116,101, 32,115/ + data (st0001(iyy),iyy=33,40) /121,115,116,101,109, 32,112, 97/ + data (st0001(iyy),iyy=41,48) /114, 97,109,101,116,101,114, 0/ + sw0001=(param) + goto 110 +120 continue + call xstrcy(memc((((coo+25)-1)*2+1)) , value, maxch) + goto 111 +130 continue + call xerror(0, st0001) + if (xerflg) goto 100 + goto 111 +110 continue + if (sw0001.eq.19) goto 120 + goto 130 +111 continue +100 return + end +c skstad sk_statd +c skstai sk_stati +c skstas sk_stats diff --git a/vendor/x11iraf/ximtool/clients.old/lib/skywcs/skstat.x b/vendor/x11iraf/ximtool/clients.old/lib/skywcs/skstat.x new file mode 100644 index 00000000..82d2f1c2 --- /dev/null +++ b/vendor/x11iraf/ximtool/clients.old/lib/skywcs/skstat.x @@ -0,0 +1,90 @@ +include "skywcsdef.h" +include "skywcs.h" + + +# SK_STATD -- Get a double precision coordinate parameter. + +double procedure sk_statd (coo, param) + +pointer coo #I pointer to the coordinate structure +int param #I the input parameter + +begin + switch (param) { + case S_VXOFF: + return (SKY_VXOFF(coo)) + case S_VYOFF: + return (SKY_VYOFF(coo)) + case S_VXSTEP: + return (SKY_VXSTEP(coo)) + case S_VYSTEP: + return (SKY_VYSTEP(coo)) + case S_EQUINOX: + return (SKY_EQUINOX(coo)) + case S_EPOCH: + return (SKY_EPOCH(coo)) + default: + call error (0, "SKY_STATD: Unknown coordinate system parameter") + } +end + + +# SK_STATI -- Get an integer coordinate parameter. + +int procedure sk_stati (coo, param) + +pointer coo #I pointer to the coordinate structure +int param #I the input parameter + +begin + switch (param) { + case S_CTYPE: + return (SKY_CTYPE(coo)) + case S_RADECSYS: + return (SKY_RADECSYS(coo)) + case S_WTYPE: + return (SKY_WTYPE(coo)) + case S_PLNGAX: + return (SKY_PLNGAX(coo)) + case S_PLATAX: + return (SKY_PLATAX(coo)) + case S_XLAX: + return (SKY_XLAX(coo)) + case S_YLAX: + return (SKY_YLAX(coo)) + case S_PIXTYPE: + return (SKY_PIXTYPE(coo)) + case S_NLNGAX: + return (SKY_NLNGAX(coo)) + case S_NLATAX: + return (SKY_NLATAX(coo)) + case S_NLNGUNITS: + return (SKY_NLNGUNITS(coo)) + case S_NLATUNITS: + return (SKY_NLATUNITS(coo)) + case S_STATUS: + return (SKY_STATUS(coo)) + default: + call error (0, "SKY_STATI: Unknown coordinate system parameter") + } +end + + + +# SK_STATS -- Get a character string coordinate parameter. + +procedure sk_stats (coo, param, value, maxch) + +pointer coo #I pointer to the coordinate structure +int param #I the input parameter +char value #O the output string +int maxch #I the maximum size of the string + +begin + switch (param) { + case S_COOSYSTEM: + call strcpy (SKY_COOSYSTEM(coo), value, maxch) + default: + call error (0, "SKY_GETSTR: Unknown coordinate system parameter") + } +end diff --git a/vendor/x11iraf/ximtool/clients.old/lib/skywcs/sktransform.f b/vendor/x11iraf/ximtool/clients.old/lib/skywcs/sktransform.f new file mode 100644 index 00000000..85aff7b1 --- /dev/null +++ b/vendor/x11iraf/ximtool/clients.old/lib/skywcs/sktransform.f @@ -0,0 +1,756 @@ + subroutine skultn (cooin, cooout, ilng, ilat, olng, olat, npts) + logical Memb(1) + integer*2 Memc(1) + integer*2 Mems(1) + integer Memi(1) + integer*4 Meml(1) + real Memr(1) + double precision Memd(1) + complex Memx(1) + equivalence (Memb, Memc, Mems, Memi, Meml, Memr, Memd, Memx) + common /Mem/ Memd + integer cooin + integer cooout + integer npts + double precision ilng(*) + double precision ilat(*) + double precision olng(*) + double precision olat(*) + double precision tilng + double precision tilat + double precision tolng + double precision tolat + integer i + integer sw0001,sw0002,sw0003,sw0004 + save + do 110 i = 1, npts + sw0001=(memi(cooin+22) ) + goto 120 +130 continue + tilng = ((15.0d0 * ilng(i))/57.295779513082320877) + goto 121 +140 continue + tilng = ((ilng(i))/57.295779513082320877) + goto 121 +150 continue + tilng = ilng(i) + goto 121 +160 continue + tilng = ilng(i) + goto 121 +120 continue + if (sw0001.lt.1.or.sw0001.gt.3) goto 160 + goto (140,150,130),sw0001 +121 continue + sw0002=(memi(cooin+23) ) + goto 170 +180 continue + tilat = ((15.0d0 * ilat(i))/57.295779513082320877) + goto 171 +190 continue + tilat = ((ilat(i))/57.295779513082320877) + goto 171 +200 continue + tilat = ilat(i) + goto 171 +210 continue + tilat = ilat(i) + goto 171 +170 continue + if (sw0002.lt.1.or.sw0002.gt.3) goto 210 + goto (190,200,180),sw0002 +171 continue + call sklltn (cooin, cooout, tilng, tilat, 1.6d308, 1.6d308, + * 0.0d0, 0.0d0, tolng, tolat) + sw0003=(memi(cooout+22) ) + goto 220 +230 continue + olng(i) = ((tolng)*57.295779513082320877) / 15.0d0 + goto 221 +240 continue + olng(i) = ((tolng)*57.295779513082320877) + goto 221 +250 continue + olng(i) = tolng + goto 221 +260 continue + olng(i) = tolng + goto 221 +220 continue + if (sw0003.lt.1.or.sw0003.gt.3) goto 260 + goto (240,250,230),sw0003 +221 continue + sw0004=(memi(cooout+23) ) + goto 270 +280 continue + olat(i) = ((tolat)*57.295779513082320877) / 15.0d0 + goto 271 +290 continue + olat(i) = ((tolat)*57.295779513082320877) + goto 271 +300 continue + olat(i) = tolat + goto 271 +310 continue + olat(i) = tolat + goto 271 +270 continue + if (sw0004.lt.1.or.sw0004.gt.3) goto 310 + goto (290,300,280),sw0004 +271 continue +110 continue +111 continue +100 return + end + subroutine sklltn (cooin, cooout, ilng, ilat, ipmlng, ipmlat, px, + *rv, olng, olat) + logical Memb(1) + integer*2 Memc(1) + integer*2 Mems(1) + integer Memi(1) + integer*4 Meml(1) + real Memr(1) + double precision Memd(1) + complex Memx(1) + equivalence (Memb, Memc, Mems, Memi, Meml, Memr, Memd, Memx) + common /Mem/ Memd + integer cooin + integer cooout + double precision ilng + double precision ilat + double precision ipmlng + double precision ipmlat + double precision px + double precision rv + double precision olng + double precision olat + integer pmflag + double precision pmr + double precision pmd + double precision slepj + double precision slepb + integer sw0001,sw0002,sw0003,sw0004,sw0005,sw0006,sw0007,sw0008, + *sw0009,sw0010 + save + if (.not.(memi(cooin+12) .eq. memi(cooout+12) )) goto 110 + sw0001=(memi(cooin+12) ) + goto 120 +130 continue + call skequl (cooin, cooout, ilng, ilat, ipmlng, ipmlat, + * px, rv, olng, olat) + goto 121 +140 continue + if (.not.(memd((((cooin+10)-1)/2+1)) .eq. memd((((cooout+ + * 10)-1)/2+1)) )) goto 150 + olng = ilng + olat = ilat + goto 151 +150 continue + call sleceq (ilng, ilat, memd((((cooin+10)-1)/2+1)) , + * olng, olat) + call sleqec (olng, olat, memd((((cooout+10)-1)/2+1)) , + * olng, olat) +151 continue + goto 121 +160 continue + olng = ilng + olat = ilat + goto 121 +120 continue + if (sw0001.eq.1) goto 130 + if (sw0001.eq.2) goto 140 + goto 160 +121 continue + goto 100 +110 continue + if (.not.(.not. ((ipmlng).eq.1.6d308) .and. .not. ((ipmlat).eq. + * 1.6d308))) goto 170 + pmflag = 1 + goto 171 +170 continue + pmflag = 0 +171 continue + sw0002=(memi(cooin+12) ) + goto 180 +190 continue + sw0003=(memi(cooin+13) ) + goto 200 +210 continue + if (.not.(pmflag .eq. 1)) goto 220 + call slpm (ilng, ilat, ipmlng, ipmlat, px, rv, slepb ( + * memd((((cooin+10)-1)/2+1)) ), slepb (memd((((cooout+10 + * )-1)/2+1)) ), olng, olat) + goto 221 +220 continue + olng = ilng + olat = ilat +221 continue + if (.not.(memi(cooin+13) .eq. 1)) goto 230 + call slsuet (olng, olat, memd((((cooin+8)-1)/2+1)) , + * olng, olat) +230 continue + if (.not.(memd((((cooin+8)-1)/2+1)) .ne. 1950.0d0)) goto + * 240 + call slprcs (1, memd((((cooin+8)-1)/2+1)) , 1950.0d0, + * olng, olat) +240 continue + call sladet (olng, olat, 1950.0d0, olng, olat) + if (.not.(pmflag .eq. 1)) goto 250 + call slf45z (olng, olat, slepb(memd((((cooout+10)-1)/2 + * +1)) ), olng, olat) + goto 251 +250 continue + call slf45z (olng, olat, slepb (memd((((cooin+10)-1)/2 + * +1)) ), olng, olat) +251 continue + goto 201 +260 continue + if (.not.(pmflag .eq. 1)) goto 270 + call slpm (ilng, ilat, ipmlng, ipmlat, px, rv, slepj ( + * memd((((cooin+10)-1)/2+1)) ), slepj(memd((((cooout+10) + * -1)/2+1)) ), olng, olat) + goto 271 +270 continue + olng = ilng + olat = ilat +271 continue + if (.not.(memd((((cooin+8)-1)/2+1)) .ne. 2000.0d0)) goto + * 280 + call slprcs (2, memd((((cooin+8)-1)/2+1)) , 2000.0d0, + * olng, olat) +280 continue + goto 201 +290 continue + if (.not.(pmflag .eq. 1)) goto 300 + call slpm (ilng, ilat, ipmlng, ipmlat, px, rv, slepj ( + * memd((((cooin+10)-1)/2+1)) ), slepj(memd((((cooout+10) + * -1)/2+1)) ), olng, olat) + goto 301 +300 continue + olng = ilng + olat = ilat +301 continue + if (.not.(memd((((cooin+8)-1)/2+1)) .ne. 2000.0d0)) goto + * 310 + call slprcs (2, memd((((cooin+8)-1)/2+1)) , 2000.0d0, + * olng, olat) +310 continue + call slhf5z (olng, olat, 2000.0d0, olng, olat, pmr, pmd) + goto 201 +320 continue + call slamp (ilng, ilat, memd((((cooin+10)-1)/2+1)) , 2000 + * .0d0, olng, olat) + goto 201 +200 continue + if (sw0003.lt.1.or.sw0003.gt.5) goto 201 + goto (210,210,260,290,320),sw0003 +201 continue + sw0004=(memi(cooout+12) ) + goto 330 +340 continue + call sleqec (olng, olat, memd((((cooout+10)-1)/2+1)) , + * olng, olat) + goto 331 +350 continue + call sleqga (olng, olat, olng, olat) + goto 331 +360 continue + call sleqga (olng, olat, olng, olat) + call slgasu (olng, olat, olng, olat) + goto 331 +370 continue + olng = ilng + olat = ilat + goto 331 +330 continue + sw0004=sw0004-1 + if (sw0004.lt.1.or.sw0004.gt.3) goto 370 + goto (340,350,360),sw0004 +331 continue + goto 181 +380 continue + call sleceq (ilng, ilat, memd((((cooin+10)-1)/2+1)) , olng, + * olat) + sw0005=(memi(cooout+12) ) + goto 390 +400 continue + sw0006=(memi(cooout+13) ) + goto 410 +420 continue + call slf54z (olng, olat, slepb(memd((((cooout+10)-1)/2 + * +1)) ), olng, olat, pmr, pmd) + call slsuet (olng, olat, 1950.0d0, olng, olat) + if (.not.(memd((((cooout+8)-1)/2+1)) .ne. 1950.0d0)) + * goto 430 + call slprcs (1, 1950.0d0, memd((((cooout+8)-1)/2+1) + * ) , olng, olat) +430 continue + if (.not.(memi(cooout+13) .eq. 1)) goto 440 + call sladet (olng, olat, memd((((cooout+8)-1)/2+1)) + * , olng, olat) +440 continue + goto 411 +450 continue + if (.not.(memd((((cooout+8)-1)/2+1)) .ne. 2000.0d0)) + * goto 460 + call slprcs (2, 2000.0d0, memd((((cooout+8)-1)/2+1) + * ) , olng, olat) +460 continue + goto 411 +470 continue + call slf5hz (olng, olat, 2000.0d0, olng, olat) + if (.not.(memd((((cooout+8)-1)/2+1)) .ne. 2000.0d0)) + * goto 480 + call slprcs (2, 2000.0d0, memd((((cooout+8)-1)/2+1) + * ) , olng, olat) +480 continue + goto 411 +490 continue + call slmap (olng, olat, 0.0d0, 0.0d0, px, 0.0d0, 2000. + * 0d0, memd((((cooout+10)-1)/2+1)) , olng, olat) + goto 411 +410 continue + if (sw0006.lt.1.or.sw0006.gt.5) goto 411 + goto (420,420,450,470,490),sw0006 +411 continue + goto 391 +500 continue + call sleqga (olng, olat, olng, olat) + goto 391 +510 continue + call sleqga (olng, olat, olng, olat) + call slgasu (olng, olat, olng, olat) + goto 391 +520 continue + olng = ilng + olat = ilat + goto 391 +390 continue + if (sw0005.lt.1.or.sw0005.gt.4) goto 520 + goto (400,520,500,510),sw0005 +391 continue + goto 181 +530 continue + sw0007=(memi(cooout+12) ) + goto 540 +550 continue + call slgaeq (ilng, ilat, olng, olat) + sw0008=(memi(cooout+13) ) + goto 560 +570 continue + call slf54z (olng, olat, slepb(memd((((cooout+10)-1)/2 + * +1)) ), olng, olat, pmr, pmd) + call slsuet (olng, olat, 1950.0d0, olng, olat) + if (.not.(memd((((cooout+8)-1)/2+1)) .ne. 1950.0d0)) + * goto 580 + call slprcs (1, 1950.0d0, memd((((cooout+8)-1)/2+1) + * ) , olng, olat) +580 continue + if (.not.(memi(cooout+13) .eq. 1)) goto 590 + call sladet (olng, olat, memd((((cooout+8)-1)/2+1)) + * , olng, olat) +590 continue + goto 561 +600 continue + if (.not.(memd((((cooout+8)-1)/2+1)) .ne. 2000.0d0)) + * goto 610 + call slprcs (2, 2000.0d0, memd((((cooout+8)-1)/2+1) + * ) , olng, olat) +610 continue + goto 561 +620 continue + call slf5hz (olng, olat, 2000.0d0, olng, olat) + if (.not.(memd((((cooout+8)-1)/2+1)) .ne. 2000.0d0)) + * goto 630 + call slprcs (2, 2000.0d0, memd((((cooout+8)-1)/2+1) + * ) , olng, olat) +630 continue + goto 561 +640 continue + call slmap (olng, olat, 0.0d0, 0.0d0, px, 0.0d0, 2000. + * 0d0, memd((((cooout+10)-1)/2+1)) , olng, olat) + goto 561 +560 continue + if (sw0008.lt.1.or.sw0008.gt.5) goto 561 + goto (570,570,600,620,640),sw0008 +561 continue + goto 541 +650 continue + call slgaeq (ilng, ilat, olng, olat) + call sleqec (olng, olat, memd((((cooout+10)-1)/2+1)) , + * olng, olat) + goto 541 +660 continue + call slgasu (ilng, ilat, olng, olat) + goto 541 +670 continue + olng = ilng + olat = ilat + goto 541 +540 continue + if (sw0007.lt.1.or.sw0007.gt.4) goto 670 + goto (550,650,670,660),sw0007 +541 continue + goto 181 +680 continue + sw0009=(memi(cooout+12) ) + goto 690 +700 continue + call slsuga (ilng, ilat, olng, olat) + sw0010=(memi(cooout+13) ) + goto 710 +720 continue + call slgaeq (olng, olat, olng, olat) + call slf54z (olng, olat, slepb (memd((((cooout+10)-1)/ + * 2+1)) ), olng, olat, pmr, pmd) + call slsuet (olng, olat, 1950.0d0, olng, olat) + if (.not.(memd((((cooout+8)-1)/2+1)) .ne. 1950.0d0)) + * goto 730 + call slprcs (1, 1950.0d0, memd((((cooout+8)-1)/2+1) + * ) , olng, olat) +730 continue + call sladet (olng, olat, memd((((cooout+8)-1)/2+1)) , + * olng, olat) + goto 711 +740 continue + call slgaeq (olng, olat, olng, olat) + call slf54z (olng, olat, slepb (memd((((cooout+10)-1)/ + * 2+1)) ), olng, olat, pmr, pmd) + call slsuet (olng, olat, 1950.0d0, olng, olat) + if (.not.(memd((((cooout+8)-1)/2+1)) .ne. 1950.0d0)) + * goto 750 + call slprcs (1, 1950.0d0, memd((((cooout+8)-1)/2+1) + * ) , olng, olat) +750 continue + goto 711 +760 continue + call slgaeq (olng, olat, olng, olat) + if (.not.(memd((((cooout+8)-1)/2+1)) .ne. 2000.0d0)) + * goto 770 + call slprcs (2, 2000.0d0, memd((((cooout+8)-1)/2+1) + * ) , olng, olat) +770 continue + goto 711 +780 continue + call slgaeq (olng, olat, olng, olat) + call slf5hz (olng, olat, 2000.0d0, olng, olat) + if (.not.(memd((((cooout+8)-1)/2+1)) .ne. 2000.0d0)) + * goto 790 + call slprcs (2, 2000.0d0, memd((((cooout+8)-1)/2+1) + * ) , olng, olat) +790 continue + goto 711 +800 continue + call slgaeq (olng, olat, olng, olat) + call slmap (olng, olat, 0.0d0, 0.0d0, px, 0.0d0, 2000. + * 0d0, memd((((cooout+10)-1)/2+1)) , olng, olat) + goto 711 +710 continue + if (sw0010.lt.1.or.sw0010.gt.5) goto 711 + goto (720,740,760,780,800),sw0010 +711 continue + goto 691 +810 continue + call slsuga (ilng, ilat, olng, olat) + call slgaeq (olng, olat, olng, olat) + call sleqec (olng, olat, memd((((cooout+10)-1)/2+1)) , + * olng, olat) + goto 691 +820 continue + call slsuga (ilng, ilat, olng, olat) + goto 691 +830 continue + olng = ilng + olat = ilat + goto 691 +690 continue + if (sw0009.lt.1.or.sw0009.gt.3) goto 830 + goto (700,810,820),sw0009 +691 continue + goto 181 +840 continue + olng = ilng + olat = ilat + goto 181 +180 continue + if (sw0002.lt.1.or.sw0002.gt.4) goto 840 + goto (190,380,530,680),sw0002 +181 continue +100 return + end + subroutine skequl (cooin, cooout, ilng, ilat, ipmlng, ipmlat, px, + *rv, olng, olat) + logical Memb(1) + integer*2 Memc(1) + integer*2 Mems(1) + integer Memi(1) + integer*4 Meml(1) + real Memr(1) + double precision Memd(1) + complex Memx(1) + equivalence (Memb, Memc, Mems, Memi, Meml, Memr, Memd, Memx) + common /Mem/ Memd + integer cooin + integer cooout + double precision ilng + double precision ilat + double precision ipmlng + double precision ipmlat + double precision px + double precision rv + double precision olng + double precision olat + integer pmflag + double precision pmr + double precision pmd + double precision slepb + double precision slepj + integer sw0001,sw0002,sw0003,sw0004 + save + if (.not.((memi(cooin+13) .eq. memi(cooout+13) ) .and. (memd((( + * (cooin+8)-1)/2+1)) .eq. memd((((cooout+8)-1)/2+1)) ) .and. ( + * memd((((cooin+10)-1)/2+1)) .eq. memd((((cooout+10)-1)/2+1)) ))) + * goto 110 + olng = ilng + olat = ilat + goto 100 +110 continue + if (.not.(.not. ((ipmlng).eq.1.6d308) .and. .not. ((ipmlat).eq. + * 1.6d308))) goto 120 + pmflag = 1 + goto 121 +120 continue + pmflag = 0 +121 continue + sw0001=(memi(cooin+13) ) + goto 130 +140 continue + if (.not.(pmflag .eq. 1)) goto 150 + call slpm (ilng, ilat, ipmlng, ipmlat, px, rv, slepb ( + * memd((((cooin+10)-1)/2+1)) ), slepb (memd((((cooout+10)-1 + * )/2+1)) ), olng, olat) + goto 151 +150 continue + olng = ilng + olat = ilat +151 continue + if (.not.(memi(cooin+13) .eq. 1)) goto 160 + call slsuet (olng, olat, memd((((cooin+8)-1)/2+1)) , olng + * , olat) +160 continue + if (.not.(memd((((cooin+8)-1)/2+1)) .ne. 1950.0d0)) goto 170 + call slprcs (1, memd((((cooin+8)-1)/2+1)) , 1950.0d0, + * olng, olat) +170 continue + call sladet (olng, olat, 1950.0d0, olng, olat) + if (.not.(pmflag .eq. 1)) goto 180 + call slf45z (olng, olat, slepb (memd((((cooout+10)-1)/2+1 + * )) ), olng, olat) + goto 181 +180 continue + call slf45z (olng, olat, slepb (memd((((cooin+10)-1)/2+1) + * ) ), olng, olat) +181 continue + sw0002=(memi(cooout+13) ) + goto 190 +200 continue + call slf54z (olng, olat, slepb (memd((((cooout+10)-1)/2+1 + * )) ), olng, olat, pmr, pmd) + call slsuet (olng, olat, 1950.0d0, olng, olat) + if (.not.(memd((((cooout+8)-1)/2+1)) .ne. 1950.0d0)) goto + * 210 + call slprcs (1, 1950.0d0, memd((((cooout+8)-1)/2+1)) , + * olng, olat) +210 continue + if (.not.(memi(cooout+13) .eq. 1)) goto 220 + call sladet (olng, olat, memd((((cooout+8)-1)/2+1)) , + * olng, olat) +220 continue + goto 191 +230 continue + if (.not.(memd((((cooout+8)-1)/2+1)) .ne. 2000.0d0)) goto + * 240 + call slprcs (2, 2000.0d0, memd((((cooout+8)-1)/2+1)) , + * olng, olat) +240 continue + goto 191 +250 continue + call slf5hz (olng, olat, 2000.0d0, olng, olat) + if (.not.(memd((((cooout+8)-1)/2+1)) .ne. 2000.0d0)) goto + * 260 + call slprcs (2, 2000.0d0, memd((((cooout+8)-1)/2+1)) , + * olng, olat) +260 continue + goto 191 +270 continue + call slmap (olng, olat, 0.0d0, 0.0d0, px, 0.0d0, 2000.0d0 + * , memd((((cooout+10)-1)/2+1)) , olng, olat) + goto 191 +190 continue + if (sw0002.lt.1.or.sw0002.gt.5) goto 191 + goto (200,200,230,250,270),sw0002 +191 continue + goto 131 +280 continue + if (.not.(memi(cooin+13) .eq. 3)) goto 290 + if (.not.(pmflag .eq. 1)) goto 300 + call slpm (ilng, ilat, ipmlng, ipmlat, px, rv, slepj ( + * memd((((cooin+10)-1)/2+1)) ), slepj (memd((((cooout+10 + * )-1)/2+1)) ), olng, olat) + goto 301 +300 continue + olng = ilng + olat = ilat +301 continue + goto 291 +290 continue + call slamp (ilng, ilat, memd((((cooin+10)-1)/2+1)) , 2000 + * .0d0, olng, olat) +291 continue + sw0003=(memi(cooout+13) ) + goto 310 +320 continue + if (.not.(memd((((cooin+8)-1)/2+1)) .ne. 2000.0d0)) goto + * 330 + call slprcs (2, memd((((cooin+8)-1)/2+1)) , 2000.0d0, + * olng, olat) +330 continue + call slf54z (olng, olat, slepb(memd((((cooout+10)-1)/2+1) + * ) ), olng, olat, pmr, pmd) + call slsuet (olng, olat, 1950.0d0, olng, olat) + if (.not.(memd((((cooout+8)-1)/2+1)) .ne. 1950.0d0)) goto + * 340 + call slprcs (1, 1950.0d0, memd((((cooout+8)-1)/2+1)) , + * olng, olat) +340 continue + if (.not.(memi(cooout+13) .eq. 1)) goto 350 + call sladet (olng, olat, memd((((cooout+8)-1)/2+1)) , + * olng, olat) +350 continue + goto 311 +360 continue + if (.not.(memd((((cooin+8)-1)/2+1)) .ne. memd((((cooout+8 + * )-1)/2+1)) )) goto 370 + call slprcs (2, memd((((cooin+8)-1)/2+1)) , memd(((( + * cooout+8)-1)/2+1)) , olng, olat) +370 continue + goto 311 +380 continue + if (.not.(memd((((cooin+8)-1)/2+1)) .ne. 2000.0d0)) goto + * 390 + call slprcs (2, memd((((cooin+8)-1)/2+1)) , 2000.0d0, + * olng, olat) +390 continue + call slf5hz (olng, olat, slepj(memd((((cooin+10)-1)/2+1)) + * ), olng, olat) + if (.not.(memd((((cooout+8)-1)/2+1)) .ne. 2000.0d0)) goto + * 400 + call slprcs (2, 2000.0d0, memd((((cooout+8)-1)/2+1)) , + * olng, olat) +400 continue + goto 311 +410 continue + if (.not.(memd((((cooin+8)-1)/2+1)) .ne. 2000.0d0)) goto + * 420 + call slprcs (2, memd((((cooin+8)-1)/2+1)) , 2000.0d0, + * olng, olat) +420 continue + call slmap (olng, olat, 0.0d0, 0.0d0, px, 0.0d0, 2000.0d0 + * , memd((((cooout+10)-1)/2+1)) , olng, olat) + goto 311 +310 continue + if (sw0003.lt.1.or.sw0003.gt.5) goto 311 + goto (320,320,360,380,410),sw0003 +311 continue + goto 131 +430 continue + if (.not.(pmflag .eq. 1)) goto 440 + call slpm (ilng, ilat, ipmlng, ipmlat, px, rv, slepj ( + * memd((((cooin+10)-1)/2+1)) ), slepj (memd((((cooout+10)-1 + * )/2+1)) ), olng, olat) + goto 441 +440 continue + olng = ilng + olat = ilat +441 continue + sw0004=(memi(cooout+13) ) + goto 450 +460 continue + if (.not.(memd((((cooin+8)-1)/2+1)) .ne. 2000.0d0)) goto + * 470 + call slprcs (2, memd((((cooin+8)-1)/2+1)) , 2000.0d0, + * olng, olat) +470 continue + call slhf5z (olng, olat, 2000.0d0, olng, olat, pmr, pmd) + call slf54z (olng, olat, slepb(memd((((cooout+10)-1)/2+1) + * ) ), olng, olat, pmr, pmd) + call slsuet (olng, olat, 1950.0d0, olng, olat) + if (.not.(memd((((cooout+8)-1)/2+1)) .ne. 1950.0d0)) goto + * 480 + call slprcs (1, 1950.0d0, memd((((cooout+8)-1)/2+1)) , + * olng, olat) +480 continue + if (.not.(memi(cooout+13) .eq. 1)) goto 490 + call sladet (olng, olat, memd((((cooout+8)-1)/2+1)) , + * olng, olat) +490 continue + goto 451 +500 continue + if (.not.(memd((((cooin+8)-1)/2+1)) .ne. 2000.0d0)) goto + * 510 + call slprcs (2, memd((((cooin+8)-1)/2+1)) , 2000.0d0, + * olng, olat) +510 continue + call slhf5z (olng, olat, slepj(memd((((cooout+10)-1)/2+1) + * ) ), olng, olat, pmr, pmd) + if (.not.(memd((((cooout+8)-1)/2+1)) .ne. 2000.0d0)) goto + * 520 + call slprcs (2, 2000.0d0, memd((((cooout+8)-1)/2+1)) , + * olng, olat) +520 continue + goto 451 +530 continue + if (.not.(memd((((cooin+8)-1)/2+1)) .ne. memd((((cooout+8 + * )-1)/2+1)) )) goto 540 + call slprcs (2, memd((((cooin+8)-1)/2+1)) , memd(((( + * cooout+8)-1)/2+1)) , olng, olat) +540 continue + goto 451 +550 continue + if (.not.(memd((((cooin+8)-1)/2+1)) .ne. 2000.0d0)) goto + * 560 + call slprcs (2, memd((((cooin+8)-1)/2+1)) , 2000.0d0, + * olng, olat) +560 continue + call slhf5z (olng, olat, slepj(memd((((cooout+10)-1)/2+1) + * ) ), olng, olat, pmr, pmd) + call slmap (olng, olat, 0.0d0, 0.0d0, px, 0.0d0, 2000.0d0 + * , memd((((cooout+10)-1)/2+1)) , olng, olat) + goto 451 +450 continue + if (sw0004.lt.1.or.sw0004.gt.5) goto 451 + goto (460,460,500,530,550),sw0004 +451 continue + goto 131 +130 continue + if (sw0001.lt.1.or.sw0001.gt.5) goto 131 + goto (140,140,280,430,280),sw0001 +131 continue +100 return + end +c sleceq sl_eceq +c sleqec sl_eqec +c sladet sl_adet +c sleqga sl_eqga +c slgaeq sl_gaeq +c slf45z sl_f45z +c slf54z sl_f54z +c slhf5z sl_hf5z +c slf5hz sl_f5hz +c slgasu sl_gasu +c slsuga sl_suga +c skequl sk_equatorial +c sklltn sk_lltran +c slprcs sl_prcs +c skultn sk_ultran +c slsuet sl_suet diff --git a/vendor/x11iraf/ximtool/clients.old/lib/skywcs/sktransform.x b/vendor/x11iraf/ximtool/clients.old/lib/skywcs/sktransform.x new file mode 100644 index 00000000..a8cf87c3 --- /dev/null +++ b/vendor/x11iraf/ximtool/clients.old/lib/skywcs/sktransform.x @@ -0,0 +1,577 @@ +include +include "skywcsdef.h" +include "skywcs.h" + +# SK_ULTRAN -- Transform the sky coordinates from the input coordinate +# system to the output coordinate system using the units conversions as +# appropriate. + +procedure sk_ultran (cooin, cooout, ilng, ilat, olng, olat, npts) + +pointer cooin #I pointer to the input coordinate system structure +pointer cooout #I pointer to the output coordinate system structure +double ilng[ARB] #I the input ra/longitude in radians +double ilat[ARB] #I the input dec/latitude in radians +double olng[ARB] #O the output ra/longitude in radians +double olat[ARB] #O the output dec/latitude in radians +int npts #I the number of points to be converted + +double tilng, tilat, tolng, tolat +int i + +begin + do i = 1, npts { + + switch (SKY_NLNGUNITS(cooin)) { + case SKY_HOURS: + tilng = DEGTORAD(15.0d0 * ilng[i]) + case SKY_DEGREES: + tilng = DEGTORAD(ilng[i]) + case SKY_RADIANS: + tilng = ilng[i] + default: + tilng = ilng[i] + } + switch (SKY_NLATUNITS(cooin)) { + case SKY_HOURS: + tilat = DEGTORAD(15.0d0 * ilat[i]) + case SKY_DEGREES: + tilat = DEGTORAD(ilat[i]) + case SKY_RADIANS: + tilat = ilat[i] + default: + tilat = ilat[i] + } + + call sk_lltran (cooin, cooout, tilng, tilat, INDEFD, INDEFD, + 0.0d0, 0.0d0, tolng, tolat) + + switch (SKY_NLNGUNITS(cooout)) { + case SKY_HOURS: + olng[i] = RADTODEG(tolng) / 15.0d0 + case SKY_DEGREES: + olng[i] = RADTODEG(tolng) + case SKY_RADIANS: + olng[i] = tolng + default: + olng[i] = tolng + } + switch (SKY_NLATUNITS(cooout)) { + case SKY_HOURS: + olat[i] = RADTODEG(tolat) / 15.0d0 + case SKY_DEGREES: + olat[i] = RADTODEG(tolat) + case SKY_RADIANS: + olat[i] = tolat + default: + olat[i] = tolat + } + } +end + + +# SK_LLTRAN -- Transform the sky coordinate from the input coordinate +# system to the output coordinate system assuming that all the coordinate +# are in radians. + +procedure sk_lltran (cooin, cooout, ilng, ilat, ipmlng, ipmlat, px, rv, + olng, olat) + +pointer cooin #I pointer to the input coordinate system structure +pointer cooout #I pointer to the output coordinate system structure +double ilng #I the input ra/longitude in radians +double ilat #I the input dec/latitude in radians +double ipmlng #I the input proper motion in ra in radians +double ipmlat #I the input proper motion in dec in radians +double px #I the input parallax in arcseconds +double rv #I the input radial velocity in km / second +double olng #O the output ra/longitude in radians +double olat #O the output dec/latitude in radians + +int pmflag +double pmr, pmd +double sl_epj(), sl_epb() + +begin + # Test for the case where the input coordinate system is the + # same as the output coordinate system. + if (SKY_CTYPE(cooin) == SKY_CTYPE(cooout)) { + + switch (SKY_CTYPE(cooin)) { + + case CTYPE_EQUATORIAL: + call sk_equatorial (cooin, cooout, ilng, ilat, ipmlng, + ipmlat, px, rv, olng, olat) + + case CTYPE_ECLIPTIC: + if (SKY_EPOCH(cooin) == SKY_EPOCH(cooout)) { + olng = ilng + olat = ilat + } else { + call sl_eceq (ilng, ilat, SKY_EPOCH(cooin), olng, olat) + call sl_eqec (olng, olat, SKY_EPOCH(cooout), olng, olat) + } + + default: + olng = ilng + olat = ilat + } + + return + } + + # Compute proper motions ? + if (! IS_INDEFD(ipmlng) && ! IS_INDEFD(ipmlat)) + pmflag = YES + else + pmflag = NO + + # Cover the remaining cases. + switch (SKY_CTYPE(cooin)) { + + # The input system is equatorial. + case CTYPE_EQUATORIAL: + + switch (SKY_RADECSYS(cooin)) { + + case EQTYPE_FK4, EQTYPE_FK4NOE: + if (pmflag == YES) { + call sl_pm (ilng, ilat, ipmlng, ipmlat, px, rv, + sl_epb (SKY_EPOCH(cooin)), sl_epb (SKY_EPOCH(cooout)), + olng, olat) + } else { + olng = ilng + olat = ilat + } + if (SKY_RADECSYS(cooin) == EQTYPE_FK4) + call sl_suet (olng, olat, SKY_EQUINOX(cooin), olng, olat) + if (SKY_EQUINOX(cooin) != 1950.0d0) + call sl_prcs (1, SKY_EQUINOX(cooin), 1950.0d0, olng, olat) + call sl_adet (olng, olat, 1950.0d0, olng, olat) + if (pmflag == YES) + call sl_f45z (olng, olat, sl_epb(SKY_EPOCH(cooout)), + olng, olat) + else + call sl_f45z (olng, olat, sl_epb (SKY_EPOCH(cooin)), + olng, olat) + + case EQTYPE_FK5: + if (pmflag == YES) { + call sl_pm (ilng, ilat, ipmlng, ipmlat, px, rv, + sl_epj (SKY_EPOCH(cooin)), sl_epj(SKY_EPOCH(cooout)), + olng, olat) + } else { + olng = ilng + olat = ilat + } + if (SKY_EQUINOX(cooin) != 2000.0d0) + call sl_prcs (2, SKY_EQUINOX(cooin), 2000.0d0, olng, olat) + + case EQTYPE_ICRS: + if (pmflag == YES) { + call sl_pm (ilng, ilat, ipmlng, ipmlat, px, rv, + sl_epj (SKY_EPOCH(cooin)), sl_epj(SKY_EPOCH(cooout)), + olng, olat) + } else { + olng = ilng + olat = ilat + } + if (SKY_EQUINOX(cooin) != 2000.0d0) + call sl_prcs (2, SKY_EQUINOX(cooin), 2000.0d0, olng, olat) + call sl_hf5z (olng, olat, 2000.0d0, olng, olat, pmr, pmd) + + case EQTYPE_GAPPT: + call sl_amp (ilng, ilat, SKY_EPOCH(cooin), 2000.0d0, olng, olat) + + } + + switch (SKY_CTYPE(cooout)) { + + # The output coordinate system is ecliptic. + case CTYPE_ECLIPTIC: + call sl_eqec (olng, olat, SKY_EPOCH(cooout), olng, olat) + + # The output coordinate system is galactic. + case CTYPE_GALACTIC: + call sl_eqga (olng, olat, olng, olat) + + # The output coordinate system is supergalactic. + case CTYPE_SUPERGALACTIC: + call sl_eqga (olng, olat, olng, olat) + call sl_gasu (olng, olat, olng, olat) + + default: + olng = ilng + olat = ilat + } + + # The input coordinate system is ecliptic. + case CTYPE_ECLIPTIC: + + call sl_eceq (ilng, ilat, SKY_EPOCH(cooin), olng, olat) + switch (SKY_CTYPE(cooout)) { + + # The output coordinate system is equatorial. + case CTYPE_EQUATORIAL: + + switch (SKY_RADECSYS(cooout)) { + case EQTYPE_FK4, EQTYPE_FK4NOE: + call sl_f54z (olng, olat, sl_epb(SKY_EPOCH(cooout)), + olng, olat, pmr, pmd) + call sl_suet (olng, olat, 1950.0d0, olng, olat) + if (SKY_EQUINOX(cooout) != 1950.0d0) + call sl_prcs (1, 1950.0d0, SKY_EQUINOX(cooout), + olng, olat) + if (SKY_RADECSYS(cooout) == EQTYPE_FK4) + call sl_adet (olng, olat, SKY_EQUINOX(cooout), + olng, olat) + + case EQTYPE_FK5: + if (SKY_EQUINOX(cooout) != 2000.0d0) + call sl_prcs (2, 2000.0d0, SKY_EQUINOX(cooout), + olng, olat) + + case EQTYPE_ICRS: + #call sl_f5hz (olng, olat, sl_epj(SKY_EPOCH(cooin)), + #olng, olat) + call sl_f5hz (olng, olat, 2000.0d0, olng, olat) + if (SKY_EQUINOX(cooout) != 2000.0d0) + call sl_prcs (2, 2000.0d0, SKY_EQUINOX(cooout), + olng, olat) + + case EQTYPE_GAPPT: + call sl_map (olng, olat, 0.0d0, 0.0d0, px, 0.0d0, + 2000.0d0, SKY_EPOCH(cooout), olng, olat) + } + + # The output coordinate system is galactic. + case CTYPE_GALACTIC: + call sl_eqga (olng, olat, olng, olat) + + # The output system is supergalactic. + case CTYPE_SUPERGALACTIC: + call sl_eqga (olng, olat, olng, olat) + call sl_gasu (olng, olat, olng, olat) + + default: + olng = ilng + olat = ilat + } + + # The input coordinate system is galactic. + case CTYPE_GALACTIC: + + switch (SKY_CTYPE(cooout)) { + + # The output coordinate system is equatorial. + case CTYPE_EQUATORIAL: + call sl_gaeq (ilng, ilat, olng, olat) + + switch (SKY_RADECSYS(cooout)) { + case EQTYPE_FK4, EQTYPE_FK4NOE: + call sl_f54z (olng, olat, sl_epb(SKY_EPOCH(cooout)), + olng, olat, pmr, pmd) + call sl_suet (olng, olat, 1950.0d0, olng, olat) + if (SKY_EQUINOX(cooout) != 1950.0d0) + call sl_prcs (1, 1950.0d0, SKY_EQUINOX(cooout), + olng, olat) + if (SKY_RADECSYS(cooout) == EQTYPE_FK4) + call sl_adet (olng, olat, SKY_EQUINOX(cooout), + olng, olat) + + case EQTYPE_FK5: + if (SKY_EQUINOX(cooout) != 2000.0d0) + call sl_prcs (2, 2000.0d0, SKY_EQUINOX(cooout), + olng, olat) + + case EQTYPE_ICRS: + call sl_f5hz (olng, olat, 2000.0d0, olng, olat) + if (SKY_EQUINOX(cooout) != 2000.0d0) + call sl_prcs (2, 2000.0d0, SKY_EQUINOX(cooout), + olng, olat) + + case EQTYPE_GAPPT: + call sl_map (olng, olat, 0.0d0, 0.0d0, px, 0.0d0, + 2000.0d0, SKY_EPOCH(cooout), olng, olat) + } + + # The output coordinate system is ecliptic. + case CTYPE_ECLIPTIC: + call sl_gaeq (ilng, ilat, olng, olat) + call sl_eqec (olng, olat, SKY_EPOCH(cooout), olng, olat) + + # The output coordinate system is supergalactic. + case CTYPE_SUPERGALACTIC: + call sl_gasu (ilng, ilat, olng, olat) + + default: + olng = ilng + olat = ilat + } + + # The input coordinates are supergalactic. + case CTYPE_SUPERGALACTIC: + + switch (SKY_CTYPE(cooout)) { + + case CTYPE_EQUATORIAL: + call sl_suga (ilng, ilat, olng, olat) + + switch (SKY_RADECSYS(cooout)) { + + case EQTYPE_FK4: + call sl_gaeq (olng, olat, olng, olat) + call sl_f54z (olng, olat, sl_epb (SKY_EPOCH(cooout)), + olng, olat, pmr, pmd) + call sl_suet (olng, olat, 1950.0d0, olng, olat) + if (SKY_EQUINOX(cooout) != 1950.0d0) + call sl_prcs (1, 1950.0d0, SKY_EQUINOX(cooout), + olng, olat) + call sl_adet (olng, olat, SKY_EQUINOX(cooout), olng, olat) + + case EQTYPE_FK4NOE: + call sl_gaeq (olng, olat, olng, olat) + call sl_f54z (olng, olat, sl_epb (SKY_EPOCH(cooout)), + olng, olat, pmr, pmd) + call sl_suet (olng, olat, 1950.0d0, olng, olat) + if (SKY_EQUINOX(cooout) != 1950.0d0) + call sl_prcs (1, 1950.0d0, SKY_EQUINOX(cooout), + olng, olat) + + case EQTYPE_FK5: + call sl_gaeq (olng, olat, olng, olat) + if (SKY_EQUINOX(cooout) != 2000.0d0) + call sl_prcs (2, 2000.0d0, SKY_EQUINOX(cooout), + olng, olat) + + case EQTYPE_ICRS: + call sl_gaeq (olng, olat, olng, olat) + call sl_f5hz (olng, olat, 2000.0d0, olng, olat) + if (SKY_EQUINOX(cooout) != 2000.0d0) + call sl_prcs (2, 2000.0d0, SKY_EQUINOX(cooout), + olng, olat) + + case EQTYPE_GAPPT: + call sl_gaeq (olng, olat, olng, olat) + call sl_map (olng, olat, 0.0d0, 0.0d0, px, 0.0d0, + 2000.0d0, SKY_EPOCH(cooout), olng, olat) + } + + case CTYPE_ECLIPTIC: + call sl_suga (ilng, ilat, olng, olat) + call sl_gaeq (olng, olat, olng, olat) + call sl_eqec (olng, olat, SKY_EPOCH(cooout), olng, olat) + + case CTYPE_GALACTIC: + call sl_suga (ilng, ilat, olng, olat) + + default: + olng = ilng + olat = ilat + } + + default: + olng = ilng + olat = ilat + } +end + + +# SK_EQUATORIAL -- Convert / precess equatorial coordinates. + +procedure sk_equatorial (cooin, cooout, ilng, ilat, ipmlng, ipmlat, + px, rv, olng, olat) + +pointer cooin #I the input coordinate system structure +pointer cooout #I the output coordinate system structure +double ilng #I the input ra in radians +double ilat #I the input dec in radians +double ipmlng #I the input proper motion in ra in radians +double ipmlat #I the input proper motion in dec in radians +double px #I the input parallax in arcseconds +double rv #I the input radial valocity in km / second +double olng #O the output ra in radians +double olat #O the output dec in radians + +int pmflag +double pmr, pmd +double sl_epb(), sl_epj() + +begin + # Check to see whether or not conversion / precession is necessary. + if ((SKY_RADECSYS(cooin) == SKY_RADECSYS(cooout)) && + (SKY_EQUINOX(cooin) == SKY_EQUINOX(cooout)) && + (SKY_EPOCH(cooin) == SKY_EPOCH(cooout))) { + olng = ilng + olat = ilat + return + } + + # Compute proper motions ? + if (! IS_INDEFD(ipmlng) && ! IS_INDEFD(ipmlat)) + pmflag = YES + else + pmflag = NO + + switch (SKY_RADECSYS(cooin)) { + + # The input coordinate system is FK4 with or without the E terms. + case EQTYPE_FK4, EQTYPE_FK4NOE: + + if (pmflag == YES) { + call sl_pm (ilng, ilat, ipmlng, ipmlat, px, rv, + sl_epb (SKY_EPOCH(cooin)), sl_epb (SKY_EPOCH(cooout)), + olng, olat) + } else { + olng = ilng + olat = ilat + } + if (SKY_RADECSYS(cooin) == EQTYPE_FK4) + call sl_suet (olng, olat, SKY_EQUINOX(cooin), olng, olat) + if (SKY_EQUINOX(cooin) != 1950.0d0) + call sl_prcs (1, SKY_EQUINOX(cooin), 1950.0d0, olng, olat) + call sl_adet (olng, olat, 1950.0d0, olng, olat) + if (pmflag == YES) + call sl_f45z (olng, olat, sl_epb (SKY_EPOCH(cooout)), + olng, olat) + else + call sl_f45z (olng, olat, sl_epb (SKY_EPOCH(cooin)), + olng, olat) + + switch (SKY_RADECSYS(cooout)) { + + # The output coordinate system is FK4 with and without the E terms. + case EQTYPE_FK4, EQTYPE_FK4NOE: + call sl_f54z (olng, olat, sl_epb (SKY_EPOCH(cooout)), + olng, olat, pmr, pmd) + call sl_suet (olng, olat, 1950.0d0, olng, olat) + if (SKY_EQUINOX(cooout) != 1950.0d0) + call sl_prcs (1, 1950.0d0, SKY_EQUINOX(cooout), + olng, olat) + if (SKY_RADECSYS(cooout) == EQTYPE_FK4) + call sl_adet (olng, olat, SKY_EQUINOX(cooout), olng, olat) + + # The output coordinate system is FK5. + case EQTYPE_FK5: + if (SKY_EQUINOX(cooout) != 2000.0d0) + call sl_prcs (2, 2000.0d0, SKY_EQUINOX(cooout), olng, olat) + + # The output coordinate system is ICRS (Hipparcos). + case EQTYPE_ICRS: + call sl_f5hz (olng, olat, 2000.0d0, olng, olat) + if (SKY_EQUINOX(cooout) != 2000.0d0) + call sl_prcs (2, 2000.0d0, SKY_EQUINOX(cooout), olng, olat) + + # The output coordinate system is geocentric apparent. + case EQTYPE_GAPPT: + call sl_map (olng, olat, 0.0d0, 0.0d0, px, 0.0d0, 2000.0d0, + SKY_EPOCH(cooout), olng, olat) + } + + # The input coordinate system is FK5 or geocentric apparent. + case EQTYPE_FK5, EQTYPE_GAPPT: + + if (SKY_RADECSYS(cooin) == EQTYPE_FK5) { + if (pmflag == YES) { + call sl_pm (ilng, ilat, ipmlng, ipmlat, px, rv, + sl_epj (SKY_EPOCH(cooin)), sl_epj (SKY_EPOCH(cooout)), + olng, olat) + } else { + olng = ilng + olat = ilat + } + } else + call sl_amp (ilng, ilat, SKY_EPOCH(cooin), 2000.0d0, olng, olat) + + switch (SKY_RADECSYS(cooout)) { + + # The output coordinate system is FK4 with or without the E terms. + case EQTYPE_FK4, EQTYPE_FK4NOE: + if (SKY_EQUINOX(cooin) != 2000.0d0) + call sl_prcs (2, SKY_EQUINOX(cooin), 2000.0d0, olng, olat) + call sl_f54z (olng, olat, sl_epb(SKY_EPOCH(cooout)), + olng, olat, pmr, pmd) + call sl_suet (olng, olat, 1950.0d0, olng, olat) + if (SKY_EQUINOX(cooout) != 1950.0d0) + call sl_prcs (1, 1950.0d0, SKY_EQUINOX(cooout), olng, olat) + if (SKY_RADECSYS(cooout) == EQTYPE_FK4) + call sl_adet (olng, olat, SKY_EQUINOX(cooout), olng, olat) + + # The output coordinate system is FK5. + case EQTYPE_FK5: + if (SKY_EQUINOX(cooin) != SKY_EQUINOX(cooout)) + call sl_prcs (2, SKY_EQUINOX(cooin), SKY_EQUINOX(cooout), + olng, olat) + + # The output coordinate system is ICRS. + case EQTYPE_ICRS: + if (SKY_EQUINOX(cooin) != 2000.0d0) + call sl_prcs (2, SKY_EQUINOX(cooin), 2000.0d0, olng, olat) + call sl_f5hz (olng, olat, sl_epj(SKY_EPOCH(cooin)), olng, olat) + if (SKY_EQUINOX(cooout) != 2000.0d0) + call sl_prcs (2, 2000.0d0, SKY_EQUINOX(cooout), olng, olat) + + # The output coordinate system is geocentric apparent. + case EQTYPE_GAPPT: + if (SKY_EQUINOX(cooin) != 2000.0d0) + call sl_prcs (2, SKY_EQUINOX(cooin), 2000.0d0, olng, olat) + call sl_map (olng, olat, 0.0d0, 0.0d0, px, 0.0d0, 2000.0d0, + SKY_EPOCH(cooout), olng, olat) + } + + # The input coordinate system is ICRS. + case EQTYPE_ICRS: + + if (pmflag == YES) { + call sl_pm (ilng, ilat, ipmlng, ipmlat, px, rv, + sl_epj (SKY_EPOCH(cooin)), sl_epj (SKY_EPOCH(cooout)), + olng, olat) + } else { + olng = ilng + olat = ilat + } + + switch (SKY_RADECSYS(cooout)) { + + # The output coordinate system is FK4 with or without the E terms. + case EQTYPE_FK4, EQTYPE_FK4NOE: + if (SKY_EQUINOX(cooin) != 2000.0d0) + call sl_prcs (2, SKY_EQUINOX(cooin), 2000.0d0, olng, olat) + call sl_hf5z (olng, olat, 2000.0d0, olng, olat, + pmr, pmd) + call sl_f54z (olng, olat, sl_epb(SKY_EPOCH(cooout)), olng, olat, + pmr, pmd) + call sl_suet (olng, olat, 1950.0d0, olng, olat) + if (SKY_EQUINOX(cooout) != 1950.0d0) + call sl_prcs (1, 1950.0d0, SKY_EQUINOX(cooout), olng, olat) + if (SKY_RADECSYS(cooout) == EQTYPE_FK4) + call sl_adet (olng, olat, SKY_EQUINOX(cooout), olng, olat) + + # The output coordinate system is FK5. + case EQTYPE_FK5: + if (SKY_EQUINOX(cooin) != 2000.0d0) + call sl_prcs (2, SKY_EQUINOX(cooin), 2000.0d0, olng, olat) + call sl_hf5z (olng, olat, sl_epj(SKY_EPOCH(cooout)), + olng, olat, pmr, pmd) + if (SKY_EQUINOX(cooout) != 2000.0d0) + call sl_prcs (2, 2000.0d0, SKY_EQUINOX(cooout), olng, olat) + + # The output coordinate system is ICRS. + case EQTYPE_ICRS: + if (SKY_EQUINOX(cooin) != SKY_EQUINOX(cooout)) + call sl_prcs (2, SKY_EQUINOX(cooin), SKY_EQUINOX(cooout), + olng, olat) + + # The output coordinate system is geocentric apparent. + case EQTYPE_GAPPT: + if (SKY_EQUINOX(cooin) != 2000.0d0) + call sl_prcs (2, SKY_EQUINOX(cooin), 2000.0d0, olng, olat) + call sl_hf5z (olng, olat, sl_epj(SKY_EPOCH(cooout)), + olng, olat, pmr, pmd) + call sl_map (olng, olat, 0.0d0, 0.0d0, px, 0.0d0, 2000.0d0, + SKY_EPOCH(cooout), olng, olat) + + } + + } +end diff --git a/vendor/x11iraf/ximtool/clients.old/lib/skywcs/skwrdstr.f b/vendor/x11iraf/ximtool/clients.old/lib/skywcs/skwrdstr.f new file mode 100644 index 00000000..41fd369e --- /dev/null +++ b/vendor/x11iraf/ximtool/clients.old/lib/skywcs/skwrdstr.f @@ -0,0 +1,45 @@ + integer function skwrdr (index, outstr, maxch, dict) + integer index + integer maxch + integer*2 outstr(*) + integer*2 dict(*) + integer i + integer len + integer start + integer count + integer xstrln + save + outstr(1) = 0 + if (.not.(dict(1) .eq. 0)) goto 110 + skwrdr = (0) + goto 100 +110 continue + count = 1 + len = xstrln(dict) + start = 2 +120 if (.not.(count .lt. index)) goto 122 + if (.not.(dict(start) .eq. dict(1))) goto 130 + count = count + 1 +130 continue + if (.not.(start .eq. len)) goto 140 + skwrdr = (0) + goto 100 +140 continue +121 start = start + 1 + goto 120 +122 continue + i = start +150 if (.not.(dict(i) .ne. 0 .and. dict(i) .ne. dict(1))) goto 152 + if (.not.(i - start + 1 .gt. maxch)) goto 160 + goto 152 +160 continue + outstr(i - start + 1) = dict(i) +151 i = i + 1 + goto 150 +152 continue + outstr(i - start + 1) = 0 + skwrdr = (count) + goto 100 +100 return + end +c skwrdr sk_wrdstr diff --git a/vendor/x11iraf/ximtool/clients.old/lib/skywcs/skwrdstr.x b/vendor/x11iraf/ximtool/clients.old/lib/skywcs/skwrdstr.x new file mode 100644 index 00000000..a7c6b359 --- /dev/null +++ b/vendor/x11iraf/ximtool/clients.old/lib/skywcs/skwrdstr.x @@ -0,0 +1,53 @@ + +# SK_WRDSTR -- Search a dictionary string for a given string index number. +# This is the opposite function of strdic(), that returns the index for +# given string. The entries in the dictionary string are separated by +# a delimiter character which is the first character of the dictionary +# string. The index of the string found is returned as the function value. +# Otherwise, if there is no string for that index, a zero is returned. + +int procedure sk_wrdstr (index, outstr, maxch, dict) + +int index #I the string index +char outstr[ARB] #O the output string as found in dictionary +int maxch #I the maximum length of output string +char dict[ARB] #I the dictionary string + +int i, len, start, count + +int strlen() + +begin + # Clear output string + outstr[1] = EOS + + # Return if the dictionary is not long enough + if (dict[1] == EOS) + return (0) + + # Initialize counters + count = 1 + len = strlen (dict) + + # Search the dictionary string. This loop only terminates + # successfully if the index is found. Otherwise the procedure + # returns with and error condition. + for (start = 2; count < index; start = start + 1) { + if (dict[start] == dict[1]) + count = count + 1 + if (start == len) + return (0) + } + + # Extract the output string from the dictionary + for (i = start; dict[i] != EOS && dict[i] != dict[1]; i = i + 1) { + if (i - start + 1 > maxch) + break + outstr[i - start + 1] = dict[i] + } + + outstr[i - start + 1] = EOS + + # Return index for output string + return (count) +end diff --git a/vendor/x11iraf/ximtool/clients.old/lib/skywcs/skwrite.f b/vendor/x11iraf/ximtool/clients.old/lib/skywcs/skwrite.f new file mode 100644 index 00000000..223f8f1e --- /dev/null +++ b/vendor/x11iraf/ximtool/clients.old/lib/skywcs/skwrite.f @@ -0,0 +1,1014 @@ + subroutine skiipt (label, images, mw, coo) + logical Memb(1) + integer*2 Memc(1) + integer*2 Mems(1) + integer Memi(1) + integer*4 Meml(1) + real Memr(1) + double precision Memd(1) + complex Memx(1) + equivalence (Memb, Memc, Mems, Memi, Meml, Memr, Memd, Memx) + common /Mem/ Memd + integer mw + integer coo + integer*2 label(*) + integer*2 images(*) + save + if (.not.(mw .eq. 0)) goto 110 + call skinpt (label, images, memi(coo+12) , memi(coo+13) , + * memd((((coo+8)-1)/2+1)) , memd((((coo+10)-1)/2+1)) ) + goto 111 +110 continue + call skimpt (label, images, memi(coo+12) , memi(coo+15) , + * memi(coo+16) , memi(coo+14) , memi(coo+19) , memi(coo+13) , + * memd((((coo+8)-1)/2+1)) , memd((((coo+10)-1)/2+1)) ) +111 continue +100 return + end + subroutine skiiwe (fd, label, images, mw, coo) + integer fd + logical Memb(1) + integer*2 Memc(1) + integer*2 Mems(1) + integer Memi(1) + integer*4 Meml(1) + real Memr(1) + double precision Memd(1) + complex Memx(1) + equivalence (Memb, Memc, Mems, Memi, Meml, Memr, Memd, Memx) + common /Mem/ Memd + integer mw + integer coo + integer*2 label(*) + integer*2 images(*) + save + if (.not.(mw .eq. 0)) goto 110 + call skinwe (fd, label, images, memi(coo+12) , memi(coo+13) + * , memd((((coo+8)-1)/2+1)) , memd((((coo+10)-1)/2+1)) ) + goto 111 +110 continue + call skimwe (fd, label, images, memi(coo+12) , memi(coo+15) + * , memi(coo+16) , memi(coo+14) , memi(coo+19) , memi(coo+13) + * , memd((((coo+8)-1)/2+1)) , memd((((coo+10)-1)/2+1)) ) +111 continue +100 return + end + subroutine skinpt (label, system, ctype, radecs, equinx, epoch) + integer ctype + integer radecs + double precision equinx + double precision epoch + integer*2 label(*) + integer*2 system(*) + logical Memb(1) + integer*2 Memc(1) + integer*2 Mems(1) + integer Memi(1) + integer*4 Meml(1) + real Memr(1) + double precision Memd(1) + complex Memx(1) + equivalence (Memb, Memc, Mems, Memi, Meml, Memr, Memd, Memx) + common /Mem/ Memd + integer sp + integer radecr + double precision slepj + double precision slepb + integer skwrdr + integer sw0001,sw0002 + integer*2 st0001(30) + integer*2 st0002(4) + integer*2 st0003(36) + integer*2 st0004(37) + integer*2 st0005(46) + integer*2 st0006(46) + integer*2 st0007(31) + integer*2 st0008(37) + integer*2 st0009(31) + integer*2 st0010(37) + integer*2 st0011(36) + integer*2 st0012(37) + save + integer iyy + data (st0001(iyy),iyy= 1, 8) /124,102,107, 52,124,102,107, 52/ + data (st0001(iyy),iyy= 9,16) / 45,110,111, 45,101,124,102,107/ + data (st0001(iyy),iyy=17,24) / 53,124,105, 99,114,115,124,103/ + data (st0001(iyy),iyy=25,30) / 97,112,112,116,124, 0/ + data st0002 / 70, 75, 53, 0/ + data (st0003(iyy),iyy= 1, 8) / 37,115, 58, 32, 37,115, 32, 32/ + data (st0003(iyy),iyy= 9,16) / 67,111,111,114,100,105,110, 97/ + data (st0003(iyy),iyy=17,24) /116,101,115, 58, 32,101,113,117/ + data (st0003(iyy),iyy=25,32) / 97,116,111,114,105, 97,108, 32/ + data (st0003(iyy),iyy=33,36) / 37,115, 10, 0/ + data (st0004(iyy),iyy= 1, 8) / 32, 32, 32, 32, 77, 74, 68, 58/ + data (st0004(iyy),iyy= 9,16) / 32, 37, 48, 46, 53,102, 32, 69/ + data (st0004(iyy),iyy=17,24) /112,111, 99,104, 58, 32, 74, 37/ + data (st0004(iyy),iyy=25,32) / 48, 46, 56,102, 32, 66, 37, 48/ + data (st0004(iyy),iyy=33,37) / 46, 56,102, 10, 0/ + data (st0005(iyy),iyy= 1, 8) / 32, 32, 32, 32, 69,113,117,105/ + data (st0005(iyy),iyy= 9,16) /110,111,120, 58, 32, 74, 37, 48/ + data (st0005(iyy),iyy=17,24) / 46, 51,102, 32, 69,112,111, 99/ + data (st0005(iyy),iyy=25,32) /104, 58, 32, 74, 37, 48, 46, 56/ + data (st0005(iyy),iyy=33,40) /102, 32, 77, 74, 68, 58, 32, 37/ + data (st0005(iyy),iyy=41,46) / 48, 46, 53,102, 10, 0/ + data (st0006(iyy),iyy= 1, 8) / 32, 32, 32, 32, 69,113,117,105/ + data (st0006(iyy),iyy= 9,16) /110,111,120, 58, 32, 66, 37, 48/ + data (st0006(iyy),iyy=17,24) / 46, 51,102, 32, 69,112,111, 99/ + data (st0006(iyy),iyy=25,32) /104, 58, 32, 66, 37, 48, 46, 56/ + data (st0006(iyy),iyy=33,40) /102, 32, 77, 74, 68, 58, 32, 37/ + data (st0006(iyy),iyy=41,46) / 48, 46, 53,102, 10, 0/ + data (st0007(iyy),iyy= 1, 8) / 37,115, 58, 32, 37,115, 32, 32/ + data (st0007(iyy),iyy= 9,16) / 67,111,111,114,100,105,110, 97/ + data (st0007(iyy),iyy=17,24) /116,101,115, 58, 32,101, 99,108/ + data (st0007(iyy),iyy=25,31) /105,112,116,105, 99, 10, 0/ + data (st0008(iyy),iyy= 1, 8) / 32, 32, 32, 32, 77, 74, 68, 58/ + data (st0008(iyy),iyy= 9,16) / 32, 37, 48, 46, 53,102, 32, 69/ + data (st0008(iyy),iyy=17,24) /112,111, 99,104, 58, 32, 74, 37/ + data (st0008(iyy),iyy=25,32) / 48, 46, 56,102, 32, 66, 37, 48/ + data (st0008(iyy),iyy=33,37) / 46, 56,102, 10, 0/ + data (st0009(iyy),iyy= 1, 8) / 37,115, 58, 32, 37,115, 32, 32/ + data (st0009(iyy),iyy= 9,16) / 67,111,111,114,100,105,110, 97/ + data (st0009(iyy),iyy=17,24) /116,101,115, 58, 32,103, 97,108/ + data (st0009(iyy),iyy=25,31) / 97, 99,116,105, 99, 10, 0/ + data (st0010(iyy),iyy= 1, 8) / 32, 32, 32, 32, 77, 74, 68, 58/ + data (st0010(iyy),iyy= 9,16) / 32, 37, 48, 46, 53,102, 32, 69/ + data (st0010(iyy),iyy=17,24) /112,111, 99,104, 58, 32, 74, 37/ + data (st0010(iyy),iyy=25,32) / 48, 46, 56,102, 32, 66, 37, 48/ + data (st0010(iyy),iyy=33,37) / 46, 56,102, 10, 0/ + data (st0011(iyy),iyy= 1, 8) / 37,115, 58, 32, 37,115, 32, 32/ + data (st0011(iyy),iyy= 9,16) / 67,111,111,114,100,105,110, 97/ + data (st0011(iyy),iyy=17,24) /116,101,115, 58, 32,115,117,112/ + data (st0011(iyy),iyy=25,32) /101,114,103, 97,108, 97, 99,116/ + data (st0011(iyy),iyy=33,36) /105, 99, 10, 0/ + data (st0012(iyy),iyy= 1, 8) / 32, 32, 32, 32, 77, 74, 68, 58/ + data (st0012(iyy),iyy= 9,16) / 32, 37, 48, 46, 53,102, 32, 69/ + data (st0012(iyy),iyy=17,24) /112,111, 99,104, 58, 32, 74, 37/ + data (st0012(iyy),iyy=25,32) / 48, 46, 56,102, 32, 66, 37, 48/ + data (st0012(iyy),iyy=33,37) / 46, 56,102, 10, 0/ + call smark (sp) + call salloc (radecr, 255 , 2) + sw0001=(ctype) + goto 110 +120 continue + if (.not.(skwrdr (radecs, memc(radecr), 255 , st0001) .le. 0 + * )) goto 130 + call xstrcy(st0002, memc(radecr), 255 ) +130 continue + call strupr (memc(radecr)) + call xprinf(st0003) + call pargsr (label) + call pargsr (system) + call pargsr (memc(radecr)) + sw0002=(radecs) + goto 140 +150 continue + call xprinf(st0004) + call pargd (epoch) + if (.not.(((epoch).eq.1.6d308))) goto 160 + call pargd (1.6d308) + call pargd (1.6d308) + goto 161 +160 continue + call pargd (slepj (epoch)) + call pargd (slepb (epoch)) +161 continue + goto 141 +170 continue + call xprinf(st0005) + call pargd (equinx) + call pargd (slepj(epoch)) + call pargd (epoch) + goto 141 +180 continue + call xprinf(st0006) + call pargd (equinx) + call pargd (slepb(epoch)) + call pargd (epoch) + goto 141 +140 continue + sw0002=sw0002-2 + if (sw0002.lt.1.or.sw0002.gt.3) goto 180 + goto (170,170,150),sw0002 +141 continue + goto 111 +190 continue + call xprinf(st0007) + call pargsr (label) + call pargsr (system) + call xprinf(st0008) + call pargd (epoch) + if (.not.(((epoch).eq.1.6d308))) goto 200 + call pargd (1.6d308) + call pargd (1.6d308) + goto 201 +200 continue + call pargd (slepj(epoch)) + call pargd (slepb(epoch)) +201 continue + goto 111 +210 continue + call xprinf(st0009) + call pargsr (label) + call pargsr (system) + call xprinf(st0010) + call pargd (epoch) + call pargd (slepj (epoch)) + call pargd (slepb (epoch)) + goto 111 +220 continue + call xprinf(st0011) + call pargsr (label) + call pargsr (system) + call xprinf(st0012) + call pargd (epoch) + call pargd (slepj (epoch)) + call pargd (slepb (epoch)) + goto 111 +110 continue + if (sw0001.lt.1.or.sw0001.gt.4) goto 111 + goto (120,190,210,220),sw0001 +111 continue + call sfree (sp) +100 return + end + subroutine skinwe (fd, label, system, ctype, radecs, equinx, epoch + *) + integer fd + integer ctype + integer radecs + double precision equinx + double precision epoch + integer*2 label(*) + integer*2 system(*) + logical Memb(1) + integer*2 Memc(1) + integer*2 Mems(1) + integer Memi(1) + integer*4 Meml(1) + real Memr(1) + double precision Memd(1) + complex Memx(1) + equivalence (Memb, Memc, Mems, Memi, Meml, Memr, Memd, Memx) + common /Mem/ Memd + integer sp + integer radecr + double precision slepj + double precision slepb + integer skwrdr + integer sw0001,sw0002 + integer*2 st0001(30) + integer*2 st0002(4) + integer*2 st0003(38) + integer*2 st0004(39) + integer*2 st0005(48) + integer*2 st0006(48) + integer*2 st0007(33) + integer*2 st0008(39) + integer*2 st0009(33) + integer*2 st0010(39) + integer*2 st0011(38) + integer*2 st0012(39) + save + integer iyy + data (st0001(iyy),iyy= 1, 8) /124,102,107, 52,124,102,107, 52/ + data (st0001(iyy),iyy= 9,16) / 45,110,111, 45,101,124,102,107/ + data (st0001(iyy),iyy=17,24) / 53,124,105, 99,114,115,124,103/ + data (st0001(iyy),iyy=25,30) / 97,112,112,116,124, 0/ + data st0002 / 70, 75, 53, 0/ + data (st0003(iyy),iyy= 1, 8) / 35, 32, 37,115, 58, 32, 37,115/ + data (st0003(iyy),iyy= 9,16) / 32, 32, 67,111,111,114,100,105/ + data (st0003(iyy),iyy=17,24) /110, 97,116,101,115, 58, 32,101/ + data (st0003(iyy),iyy=25,32) /113,117, 97,116,111,114,105, 97/ + data (st0003(iyy),iyy=33,38) /108, 32, 37,115, 10, 0/ + data (st0004(iyy),iyy= 1, 8) / 35, 32, 32, 32, 32, 32, 77, 74/ + data (st0004(iyy),iyy= 9,16) / 68, 58, 32, 37, 48, 46, 53,102/ + data (st0004(iyy),iyy=17,24) / 32, 69,112,111, 99,104, 58, 32/ + data (st0004(iyy),iyy=25,32) / 74, 37, 48, 46, 56,102, 32, 66/ + data (st0004(iyy),iyy=33,39) / 37, 48, 46, 56,102, 10, 0/ + data (st0005(iyy),iyy= 1, 8) / 35, 32, 32, 32, 32, 32, 69,113/ + data (st0005(iyy),iyy= 9,16) /117,105,110,111,120, 58, 32, 74/ + data (st0005(iyy),iyy=17,24) / 37, 48, 46, 51,102, 32, 69,112/ + data (st0005(iyy),iyy=25,32) /111, 99,104, 58, 32, 74, 37, 48/ + data (st0005(iyy),iyy=33,40) / 46, 56,102, 32, 77, 74, 68, 58/ + data (st0005(iyy),iyy=41,48) / 32, 37, 48, 46, 53,102, 10, 0/ + data (st0006(iyy),iyy= 1, 8) / 35, 32, 32, 32, 32, 32, 69,113/ + data (st0006(iyy),iyy= 9,16) /117,105,110,111,120, 58, 32, 66/ + data (st0006(iyy),iyy=17,24) / 37, 48, 46, 51,102, 32, 69,112/ + data (st0006(iyy),iyy=25,32) /111, 99,104, 58, 32, 66, 37, 48/ + data (st0006(iyy),iyy=33,40) / 46, 56,102, 32, 77, 74, 68, 58/ + data (st0006(iyy),iyy=41,48) / 32, 37, 48, 46, 53,102, 10, 0/ + data (st0007(iyy),iyy= 1, 8) / 35, 32, 37,115, 58, 32, 37,115/ + data (st0007(iyy),iyy= 9,16) / 32, 32, 67,111,111,114,100,105/ + data (st0007(iyy),iyy=17,24) /110, 97,116,101,115, 58, 32,101/ + data (st0007(iyy),iyy=25,32) / 99,108,105,112,116,105, 99, 10/ + data (st0007(iyy),iyy=33,33) / 0/ + data (st0008(iyy),iyy= 1, 8) / 35, 32, 32, 32, 32, 32, 77, 74/ + data (st0008(iyy),iyy= 9,16) / 68, 58, 32, 37, 48, 46, 53,102/ + data (st0008(iyy),iyy=17,24) / 32, 69,112,111, 99,104, 58, 32/ + data (st0008(iyy),iyy=25,32) / 74, 37, 48, 46, 56,102, 32, 66/ + data (st0008(iyy),iyy=33,39) / 37, 48, 46, 56,102, 10, 0/ + data (st0009(iyy),iyy= 1, 8) / 35, 32, 37,115, 58, 32, 37,115/ + data (st0009(iyy),iyy= 9,16) / 32, 32, 67,111,111,114,100,105/ + data (st0009(iyy),iyy=17,24) /110, 97,116,101,115, 58, 32,103/ + data (st0009(iyy),iyy=25,32) / 97,108, 97, 99,116,105, 99, 10/ + data (st0009(iyy),iyy=33,33) / 0/ + data (st0010(iyy),iyy= 1, 8) / 35, 32, 32, 32, 32, 32, 77, 74/ + data (st0010(iyy),iyy= 9,16) / 68, 58, 32, 37, 48, 46, 53,102/ + data (st0010(iyy),iyy=17,24) / 32, 69,112,111, 99,104, 58, 32/ + data (st0010(iyy),iyy=25,32) / 74, 37, 48, 46, 56,102, 32, 66/ + data (st0010(iyy),iyy=33,39) / 37, 48, 46, 56,102, 10, 0/ + data (st0011(iyy),iyy= 1, 8) / 35, 32, 37,115, 58, 32, 37,115/ + data (st0011(iyy),iyy= 9,16) / 32, 32, 67,111,111,114,100,105/ + data (st0011(iyy),iyy=17,24) /110, 97,116,101,115, 58, 32,115/ + data (st0011(iyy),iyy=25,32) /117,112,101,114,103, 97,108, 97/ + data (st0011(iyy),iyy=33,38) / 99,116,105, 99, 10, 0/ + data (st0012(iyy),iyy= 1, 8) / 35, 32, 32, 32, 32, 32, 77, 74/ + data (st0012(iyy),iyy= 9,16) / 68, 58, 32, 37, 48, 46, 53,102/ + data (st0012(iyy),iyy=17,24) / 32, 69,112,111, 99,104, 58, 32/ + data (st0012(iyy),iyy=25,32) / 74, 37, 48, 46, 56,102, 32, 66/ + data (st0012(iyy),iyy=33,39) / 37, 48, 46, 56,102, 10, 0/ + call smark (sp) + call salloc (radecr, 255 , 2) + sw0001=(ctype) + goto 110 +120 continue + if (.not.(skwrdr (radecs, memc(radecr), 255 , st0001) .le. 0 + * )) goto 130 + call xstrcy(st0002, memc(radecr), 255 ) +130 continue + call strupr (memc(radecr)) + call fprinf (fd, st0003) + call pargsr (label) + call pargsr (system) + call pargsr (memc(radecr)) + sw0002=(radecs) + goto 140 +150 continue + call fprinf (fd, st0004) + call pargd (epoch) + if (.not.(((epoch).eq.1.6d308))) goto 160 + call pargd (1.6d308) + call pargd (1.6d308) + goto 161 +160 continue + call pargd (slepj(epoch)) + call pargd (slepb(epoch)) +161 continue + goto 141 +170 continue + call fprinf (fd, st0005) + call pargd (equinx) + call pargd (slepj(epoch)) + call pargd (epoch) + goto 141 +180 continue + call fprinf (fd, st0006) + call pargd (equinx) + call pargd (slepb(epoch)) + call pargd (epoch) + goto 141 +140 continue + sw0002=sw0002-2 + if (sw0002.lt.1.or.sw0002.gt.3) goto 180 + goto (170,170,150),sw0002 +141 continue + goto 111 +190 continue + call fprinf (fd, st0007) + call pargsr (label) + call pargsr (system) + call fprinf (fd, st0008) + call pargd (epoch) + if (.not.(((epoch).eq.1.6d308))) goto 200 + call pargd (1.6d308) + call pargd (1.6d308) + goto 201 +200 continue + call pargd (slepj(epoch)) + call pargd (slepb(epoch)) +201 continue + goto 111 +210 continue + call fprinf (fd, st0009) + call pargsr (label) + call pargsr (system) + call fprinf (fd, st0010) + call pargd (epoch) + call pargd (slepj(epoch)) + call pargd (slepb(epoch)) + goto 111 +220 continue + call fprinf (fd, st0011) + call pargsr (label) + call pargsr (system) + call fprinf (fd, st0012) + call pargd (epoch) + call pargd (slepj(epoch)) + call pargd (slepb(epoch)) + goto 111 +110 continue + if (sw0001.lt.1.or.sw0001.gt.4) goto 111 + goto (120,190,210,220),sw0001 +111 continue + call sfree (sp) +100 return + end + subroutine skimpt (label, images, ctype, lngax, latax, wtype, + *ptype, radecs, equinx, epoch) + integer ctype + integer lngax + integer latax + integer wtype + integer ptype + integer radecs + double precision equinx + double precision epoch + integer*2 label(*) + integer*2 images(*) + logical Memb(1) + integer*2 Memc(1) + integer*2 Mems(1) + integer Memi(1) + integer*4 Meml(1) + real Memr(1) + double precision Memd(1) + complex Memx(1) + equivalence (Memb, Memc, Mems, Memi, Meml, Memr, Memd, Memx) + common /Mem/ Memd + integer sp + integer imname + integer projsr + integer wcsstr + integer radecr + double precision slepj + double precision slepb + integer skwrdr + integer sw0001,sw0002 + integer*2 st0001(114) + integer*2 st0002(7) + integer*2 st0003(28) + integer*2 st0004(6) + integer*2 st0005(30) + integer*2 st0006(4) + integer*2 st0007(47) + integer*2 st0008(32) + integer*2 st0009(37) + integer*2 st0010(48) + integer*2 st0011(30) + integer*2 st0012(48) + integer*2 st0013(30) + integer*2 st0014(51) + integer*2 st0015(27) + integer*2 st0016(37) + integer*2 st0017(51) + integer*2 st0018(27) + integer*2 st0019(38) + integer*2 st0020(51) + integer*2 st0021(32) + integer*2 st0022(37) + save + integer iyy + data (st0001(iyy),iyy= 1, 8) /124,108,105,110,124, 97,122,112/ + data (st0001(iyy),iyy= 9,16) /124,116, 97,110,124,115,105,110/ + data (st0001(iyy),iyy=17,24) /124,115,116,103,124, 97,114, 99/ + data (st0001(iyy),iyy=25,32) /124,122,112,110,124,122,101, 97/ + data (st0001(iyy),iyy=33,40) /124, 97,105,114,124, 99,121,112/ + data (st0001(iyy),iyy=41,48) /124, 99, 97,114,124,109,101,114/ + data (st0001(iyy),iyy=49,56) /124, 99,101, 97,124, 99,111,112/ + data (st0001(iyy),iyy=57,64) /124, 99,111,100,124, 99,111,101/ + data (st0001(iyy),iyy=65,72) /124, 99,111,111,124, 98,111,110/ + data (st0001(iyy),iyy=73,80) /124,112, 99,111,124,103,108,115/ + data (st0001(iyy),iyy=81,88) /124,112, 97,114,124, 97,105,116/ + data (st0001(iyy),iyy=89,96) /124,109,111,108,124, 99,115, 99/ + data (st0001(iyy),iyy=97,104) /124,113,115, 99,124,116,115, 99/ + data (st0001(iyy),iyy=105,112) /124,116,110,120,124,122,112,120/ + data (st0001(iyy),iyy=113,114) /124, 0/ + data st0002 /108,105,110,101, 97,114, 0/ + data (st0003(iyy),iyy= 1, 8) /124,108,111,103,105, 99, 97,108/ + data (st0003(iyy),iyy= 9,16) /124,116,118,124,112,104,121,115/ + data (st0003(iyy),iyy=17,24) /105, 99, 97,108,124,119,111,114/ + data (st0003(iyy),iyy=25,28) /108,100,124, 0/ + data st0004 /119,111,114,108,100, 0/ + data (st0005(iyy),iyy= 1, 8) /124,102,107, 52,124,102,107, 52/ + data (st0005(iyy),iyy= 9,16) / 45,110,111, 45,101,124,102,107/ + data (st0005(iyy),iyy=17,24) / 53,124,105, 99,114,115,124,103/ + data (st0005(iyy),iyy=25,30) / 97,112,112,116,124, 0/ + data st0006 / 70, 75, 53, 0/ + data (st0007(iyy),iyy= 1, 8) / 37,115, 58, 32, 37,115, 32, 37/ + data (st0007(iyy),iyy= 9,16) /115, 32, 32, 80,114,111,106,101/ + data (st0007(iyy),iyy=17,24) / 99,116,105,111,110, 58, 32, 37/ + data (st0007(iyy),iyy=25,32) /115, 32, 32, 82, 97, 47, 68,101/ + data (st0007(iyy),iyy=33,40) / 99, 32, 97,120,101,115, 58, 32/ + data (st0007(iyy),iyy=41,47) / 37,100, 47, 37,100, 10, 0/ + data (st0008(iyy),iyy= 1, 8) / 32, 32, 32, 32, 67,111,111,114/ + data (st0008(iyy),iyy= 9,16) /100,105,110, 97,116,101,115, 58/ + data (st0008(iyy),iyy=17,24) / 32,101,113,117, 97,116,111,114/ + data (st0008(iyy),iyy=25,32) /105, 97,108, 32, 37,115, 10, 0/ + data (st0009(iyy),iyy= 1, 8) / 32, 32, 32, 32, 77, 74, 68, 58/ + data (st0009(iyy),iyy= 9,16) / 32, 37, 48, 46, 53,102, 32, 69/ + data (st0009(iyy),iyy=17,24) /112,111, 99,104, 58, 32, 74, 37/ + data (st0009(iyy),iyy=25,32) / 48, 46, 56,102, 32, 66, 37, 48/ + data (st0009(iyy),iyy=33,37) / 46, 56,102, 10, 0/ + data (st0010(iyy),iyy= 1, 8) / 32, 32, 32, 32, 67,111,111,114/ + data (st0010(iyy),iyy= 9,16) /100,105,110, 97,116,101,115, 58/ + data (st0010(iyy),iyy=17,24) / 32,101,113,117, 97,116,111,114/ + data (st0010(iyy),iyy=25,32) /105, 97,108, 32, 37,115, 32, 69/ + data (st0010(iyy),iyy=33,40) /113,117,105,110,111,120, 58, 32/ + data (st0010(iyy),iyy=41,48) / 74, 37, 48, 46, 51,102, 10, 0/ + data (st0011(iyy),iyy= 1, 8) / 32, 32, 32, 32, 69,112,111, 99/ + data (st0011(iyy),iyy= 9,16) /104, 58, 32, 74, 37, 48, 46, 56/ + data (st0011(iyy),iyy=17,24) /102, 32, 77, 74, 68, 58, 32, 37/ + data (st0011(iyy),iyy=25,30) / 48, 46, 53,102, 10, 0/ + data (st0012(iyy),iyy= 1, 8) / 32, 32, 32, 32, 67,111,111,114/ + data (st0012(iyy),iyy= 9,16) /100,105,110, 97,116,101,115, 58/ + data (st0012(iyy),iyy=17,24) / 32,101,113,117, 97,116,111,114/ + data (st0012(iyy),iyy=25,32) /105, 97,108, 32, 37,115, 32, 69/ + data (st0012(iyy),iyy=33,40) /113,117,105,110,111,120, 58, 32/ + data (st0012(iyy),iyy=41,48) / 66, 37, 48, 46, 51,102, 10, 0/ + data (st0013(iyy),iyy= 1, 8) / 32, 32, 32, 32, 69,112,111, 99/ + data (st0013(iyy),iyy= 9,16) /104, 58, 32, 66, 37, 48, 46, 56/ + data (st0013(iyy),iyy=17,24) /102, 32, 77, 74, 68, 58, 32, 37/ + data (st0013(iyy),iyy=25,30) / 48, 46, 53,102, 10, 0/ + data (st0014(iyy),iyy= 1, 8) / 37,115, 58, 32, 37,115, 32, 37/ + data (st0014(iyy),iyy= 9,16) /115, 32, 32, 80,114,111,106,101/ + data (st0014(iyy),iyy=17,24) / 99,116,105,111,110, 58, 32, 37/ + data (st0014(iyy),iyy=25,32) /115, 32, 32, 69,108,111,110,103/ + data (st0014(iyy),iyy=33,40) / 47, 69,108, 97,116, 32, 97,120/ + data (st0014(iyy),iyy=41,48) /101,115, 58, 32, 37,100, 47, 37/ + data (st0014(iyy),iyy=49,51) /100, 10, 0/ + data (st0015(iyy),iyy= 1, 8) / 32, 32, 32, 32, 67,111,111,114/ + data (st0015(iyy),iyy= 9,16) /100,105,110, 97,116,101,115, 58/ + data (st0015(iyy),iyy=17,24) / 32,101, 99,108,105,112,116,105/ + data (st0015(iyy),iyy=25,27) / 99, 10, 0/ + data (st0016(iyy),iyy= 1, 8) / 32, 32, 32, 32, 77, 74, 68, 58/ + data (st0016(iyy),iyy= 9,16) / 32, 37, 48, 46, 53,102, 32, 69/ + data (st0016(iyy),iyy=17,24) /112,111, 99,104, 58, 32, 74, 37/ + data (st0016(iyy),iyy=25,32) / 48, 46, 56,102, 32, 66, 37, 48/ + data (st0016(iyy),iyy=33,37) / 46, 56,102, 10, 0/ + data (st0017(iyy),iyy= 1, 8) / 37,115, 58, 32, 37,115, 32, 37/ + data (st0017(iyy),iyy= 9,16) /115, 32, 32, 80,114,111,106,101/ + data (st0017(iyy),iyy=17,24) / 99,116,105,111,110, 58, 32, 37/ + data (st0017(iyy),iyy=25,32) /115, 32, 32, 71,108,111,110,103/ + data (st0017(iyy),iyy=33,40) / 47, 71,108, 97,116, 32, 97,120/ + data (st0017(iyy),iyy=41,48) /101,115, 58, 32, 37,100, 47, 37/ + data (st0017(iyy),iyy=49,51) /100, 10, 0/ + data (st0018(iyy),iyy= 1, 8) / 32, 32, 32, 32, 67,111,111,114/ + data (st0018(iyy),iyy= 9,16) /100,105,110, 97,116,101,115, 58/ + data (st0018(iyy),iyy=17,24) / 32,103, 97,108, 97, 99,116,105/ + data (st0018(iyy),iyy=25,27) / 99, 10, 0/ + data (st0019(iyy),iyy= 1, 8) / 32, 32, 32, 32, 77, 74, 68, 58/ + data (st0019(iyy),iyy= 9,16) / 32, 37, 48, 46, 53,102, 32, 32/ + data (st0019(iyy),iyy=17,24) / 69,112,111, 99,104, 58, 32, 74/ + data (st0019(iyy),iyy=25,32) / 37, 48, 46, 56,102, 32, 66, 37/ + data (st0019(iyy),iyy=33,38) / 48, 46, 56,102, 10, 0/ + data (st0020(iyy),iyy= 1, 8) / 37,115, 58, 32, 37,115, 32, 37/ + data (st0020(iyy),iyy= 9,16) /115, 32, 32, 80,114,111,106,101/ + data (st0020(iyy),iyy=17,24) / 99,116,105,111,110, 58, 32, 37/ + data (st0020(iyy),iyy=25,32) /115, 32, 32, 83,108,111,110,103/ + data (st0020(iyy),iyy=33,40) / 47, 83,108, 97,116, 32, 97,120/ + data (st0020(iyy),iyy=41,48) /101,115, 58, 32, 37,100, 47, 37/ + data (st0020(iyy),iyy=49,51) /100, 10, 0/ + data (st0021(iyy),iyy= 1, 8) / 32, 32, 32, 32, 67,111,111,114/ + data (st0021(iyy),iyy= 9,16) /100,105,110, 97,116,101,115, 58/ + data (st0021(iyy),iyy=17,24) / 32,115,117,112,101,114,103, 97/ + data (st0021(iyy),iyy=25,32) /108, 97, 99,116,105, 99, 10, 0/ + data (st0022(iyy),iyy= 1, 8) / 32, 32, 32, 32, 77, 74, 68, 58/ + data (st0022(iyy),iyy= 9,16) / 32, 37, 48, 46, 53,102, 32, 69/ + data (st0022(iyy),iyy=17,24) /112,111, 99,104, 58, 32, 74, 37/ + data (st0022(iyy),iyy=25,32) / 48, 46, 56,102, 32, 66, 37, 48/ + data (st0022(iyy),iyy=33,37) / 46, 56,102, 10, 0/ + call smark (sp) + call salloc (imname, 255 , 2) + call salloc (projsr, 255 , 2) + call salloc (wcsstr, 255 , 2) + call salloc (radecr, 255 , 2) + call sscan (images) + call gargwd (memc(imname), 255 ) + if (.not.(skwrdr (wtype, memc(projsr), 255 , st0001) .le. 0)) + * goto 110 + call xstrcy(st0002, memc(projsr), 255 ) +110 continue + call strupr (memc(projsr)) + if (.not.(skwrdr (ptype, memc(wcsstr), 255 , st0003) .le. 0)) + * goto 120 + call xstrcy(st0004, memc(wcsstr), 255 ) +120 continue + call strlwr (memc(wcsstr)) + sw0001=(ctype) + goto 130 +140 continue + if (.not.(skwrdr (radecs, memc(radecr), 255 , st0005) .le. 0 + * )) goto 150 + call xstrcy(st0006, memc(radecr), 255 ) +150 continue + call strupr (memc(radecr)) + call xprinf( st0007) + call pargsr (label) + call pargsr (memc(imname)) + call pargsr (memc(wcsstr)) + call pargsr (memc(projsr)) + call pargi (lngax) + call pargi (latax) + sw0002=(radecs) + goto 160 +170 continue + call xprinf(st0008) + call pargsr (memc(radecr)) + call xprinf(st0009) + call pargd (epoch) + if (.not.(((epoch).eq.1.6d308))) goto 180 + call pargd (1.6d308) + call pargd (1.6d308) + goto 181 +180 continue + call pargd (slepj(epoch)) + call pargd (slepb(epoch)) +181 continue + goto 161 +190 continue + call xprinf(st0010) + call pargsr (memc(radecr)) + call pargd (equinx) + call xprinf(st0011) + call pargd (slepj (epoch)) + call pargd (epoch) + goto 161 +200 continue + call xprinf(st0012) + call pargsr (memc(radecr)) + call pargd (equinx) + call xprinf(st0013) + call pargd (slepb (epoch)) + call pargd (epoch) + goto 161 +160 continue + sw0002=sw0002-2 + if (sw0002.lt.1.or.sw0002.gt.3) goto 200 + goto (190,190,170),sw0002 +161 continue + goto 131 +210 continue + call xprinf( st0014) + call pargsr (label) + call pargsr (memc(imname)) + call pargsr (memc(wcsstr)) + call pargsr (memc(projsr)) + call pargi (lngax) + call pargi (latax) + call xprinf(st0015) + call xprinf(st0016) + call pargd (epoch) + if (.not.(((epoch).eq.1.6d308))) goto 220 + call pargd (1.6d308) + call pargd (1.6d308) + goto 221 +220 continue + call pargd (slepj(epoch)) + call pargd (slepb(epoch)) +221 continue + goto 131 +230 continue + call xprinf( st0017) + call pargsr (label) + call pargsr (memc(imname)) + call pargsr (memc(wcsstr)) + call pargsr (memc(projsr)) + call pargi (lngax) + call pargi (latax) + call xprinf(st0018) + call xprinf(st0019) + call pargd (epoch) + call pargd (slepj (epoch)) + call pargd (slepb (epoch)) + goto 131 +240 continue + call xprinf( st0020) + call pargsr (label) + call pargsr (memc(imname)) + call pargsr (memc(wcsstr)) + call pargsr (memc(projsr)) + call pargi (lngax) + call pargi (latax) + call xprinf(st0021) + call xprinf(st0022) + call pargd (epoch) + call pargd (slepj (epoch)) + call pargd (slepb (epoch)) + goto 131 +130 continue + if (sw0001.lt.1.or.sw0001.gt.4) goto 131 + goto (140,210,230,240),sw0001 +131 continue + call sfree (sp) +100 return + end + subroutine skimwe (fd, label, images, ctype, lngax, latax, wtype, + *ptype, radecs, equinx, epoch) + integer fd + integer ctype + integer lngax + integer latax + integer wtype + integer ptype + integer radecs + double precision equinx + double precision epoch + integer*2 label(*) + integer*2 images(*) + logical Memb(1) + integer*2 Memc(1) + integer*2 Mems(1) + integer Memi(1) + integer*4 Meml(1) + real Memr(1) + double precision Memd(1) + complex Memx(1) + equivalence (Memb, Memc, Mems, Memi, Meml, Memr, Memd, Memx) + common /Mem/ Memd + integer sp + integer imname + integer projsr + integer wcsstr + integer radecr + double precision slepj + double precision slepb + integer skwrdr + integer sw0001,sw0002 + integer*2 st0001(114) + integer*2 st0002(7) + integer*2 st0003(28) + integer*2 st0004(6) + integer*2 st0005(30) + integer*2 st0006(4) + integer*2 st0007(49) + integer*2 st0008(34) + integer*2 st0009(39) + integer*2 st0010(50) + integer*2 st0011(32) + integer*2 st0012(50) + integer*2 st0013(32) + integer*2 st0014(53) + integer*2 st0015(29) + integer*2 st0016(40) + integer*2 st0017(53) + integer*2 st0018(29) + integer*2 st0019(39) + integer*2 st0020(53) + integer*2 st0021(34) + integer*2 st0022(39) + save + integer iyy + data (st0001(iyy),iyy= 1, 8) /124,108,105,110,124, 97,122,112/ + data (st0001(iyy),iyy= 9,16) /124,116, 97,110,124,115,105,110/ + data (st0001(iyy),iyy=17,24) /124,115,116,103,124, 97,114, 99/ + data (st0001(iyy),iyy=25,32) /124,122,112,110,124,122,101, 97/ + data (st0001(iyy),iyy=33,40) /124, 97,105,114,124, 99,121,112/ + data (st0001(iyy),iyy=41,48) /124, 99, 97,114,124,109,101,114/ + data (st0001(iyy),iyy=49,56) /124, 99,101, 97,124, 99,111,112/ + data (st0001(iyy),iyy=57,64) /124, 99,111,100,124, 99,111,101/ + data (st0001(iyy),iyy=65,72) /124, 99,111,111,124, 98,111,110/ + data (st0001(iyy),iyy=73,80) /124,112, 99,111,124,103,108,115/ + data (st0001(iyy),iyy=81,88) /124,112, 97,114,124, 97,105,116/ + data (st0001(iyy),iyy=89,96) /124,109,111,108,124, 99,115, 99/ + data (st0001(iyy),iyy=97,104) /124,113,115, 99,124,116,115, 99/ + data (st0001(iyy),iyy=105,112) /124,116,110,120,124,122,112,120/ + data (st0001(iyy),iyy=113,114) /124, 0/ + data st0002 /108,105,110,101, 97,114, 0/ + data (st0003(iyy),iyy= 1, 8) /124,108,111,103,105, 99, 97,108/ + data (st0003(iyy),iyy= 9,16) /124,116,118,124,112,104,121,115/ + data (st0003(iyy),iyy=17,24) /105, 99, 97,108,124,119,111,114/ + data (st0003(iyy),iyy=25,28) /108,100,124, 0/ + data st0004 /119,111,114,108,100, 0/ + data (st0005(iyy),iyy= 1, 8) /124,102,107, 52,124,102,107, 52/ + data (st0005(iyy),iyy= 9,16) / 45,110,111, 45,101,124,102,107/ + data (st0005(iyy),iyy=17,24) / 53,124,105, 99,114,115,124,103/ + data (st0005(iyy),iyy=25,30) / 97,112,112,116,124, 0/ + data st0006 / 70, 75, 53, 0/ + data (st0007(iyy),iyy= 1, 8) / 35, 32, 37,115, 58, 32, 37,115/ + data (st0007(iyy),iyy= 9,16) / 32, 37,115, 32, 32, 80,114,111/ + data (st0007(iyy),iyy=17,24) /106,101, 99,116,105,111,110, 58/ + data (st0007(iyy),iyy=25,32) / 32, 37,115, 32, 32, 82, 97, 47/ + data (st0007(iyy),iyy=33,40) / 68,101, 99, 32, 97,120,101,115/ + data (st0007(iyy),iyy=41,48) / 58, 32, 37,100, 47, 37,100, 10/ + data (st0007(iyy),iyy=49,49) / 0/ + data (st0008(iyy),iyy= 1, 8) / 35, 32, 32, 32, 32, 32, 67,111/ + data (st0008(iyy),iyy= 9,16) /111,114,100,105,110, 97,116,101/ + data (st0008(iyy),iyy=17,24) /115, 58, 32,101,113,117, 97,116/ + data (st0008(iyy),iyy=25,32) /111,114,105, 97,108, 32, 37,115/ + data (st0008(iyy),iyy=33,34) / 10, 0/ + data (st0009(iyy),iyy= 1, 8) / 35, 32, 32, 32, 32, 32, 77, 74/ + data (st0009(iyy),iyy= 9,16) / 68, 58, 32, 37, 48, 46, 53,102/ + data (st0009(iyy),iyy=17,24) / 32, 69,112,111, 99,104, 58, 32/ + data (st0009(iyy),iyy=25,32) / 74, 37, 48, 46, 56,102, 32, 66/ + data (st0009(iyy),iyy=33,39) / 37, 48, 46, 56,102, 10, 0/ + data (st0010(iyy),iyy= 1, 8) / 35, 32, 32, 32, 32, 32, 67,111/ + data (st0010(iyy),iyy= 9,16) /111,114,100,105,110, 97,116,101/ + data (st0010(iyy),iyy=17,24) /115, 58, 32,101,113,117, 97,116/ + data (st0010(iyy),iyy=25,32) /111,114,105, 97,108, 32, 37,115/ + data (st0010(iyy),iyy=33,40) / 32, 69,113,117,105,110,111,120/ + data (st0010(iyy),iyy=41,48) / 58, 32, 74, 37, 48, 46, 51,102/ + data (st0010(iyy),iyy=49,50) / 10, 0/ + data (st0011(iyy),iyy= 1, 8) / 35, 32, 32, 32, 32, 32, 69,112/ + data (st0011(iyy),iyy= 9,16) /111, 99,104, 58, 32, 74, 37, 48/ + data (st0011(iyy),iyy=17,24) / 46, 56,102, 32, 77, 74, 68, 58/ + data (st0011(iyy),iyy=25,32) / 32, 37, 48, 46, 53,102, 10, 0/ + data (st0012(iyy),iyy= 1, 8) / 35, 32, 32, 32, 32, 32, 67,111/ + data (st0012(iyy),iyy= 9,16) /111,114,100,105,110, 97,116,101/ + data (st0012(iyy),iyy=17,24) /115, 58, 32,101,113,117, 97,116/ + data (st0012(iyy),iyy=25,32) /111,114,105, 97,108, 32, 37,115/ + data (st0012(iyy),iyy=33,40) / 32, 69,113,117,105,110,111,120/ + data (st0012(iyy),iyy=41,48) / 58, 32, 66, 37, 48, 46, 51,102/ + data (st0012(iyy),iyy=49,50) / 10, 0/ + data (st0013(iyy),iyy= 1, 8) / 35, 32, 32, 32, 32, 32, 69,112/ + data (st0013(iyy),iyy= 9,16) /111, 99,104, 58, 32, 66, 37, 48/ + data (st0013(iyy),iyy=17,24) / 46, 56,102, 32, 77, 74, 68, 58/ + data (st0013(iyy),iyy=25,32) / 32, 37, 48, 46, 53,102, 10, 0/ + data (st0014(iyy),iyy= 1, 8) / 35, 32, 37,115, 58, 32, 37,115/ + data (st0014(iyy),iyy= 9,16) / 32, 37,115, 32, 32, 80,114,111/ + data (st0014(iyy),iyy=17,24) /106,101, 99,116,105,111,110, 58/ + data (st0014(iyy),iyy=25,32) / 32, 37,115, 32, 32, 69,108,111/ + data (st0014(iyy),iyy=33,40) /110,103, 47, 69,108, 97,116, 32/ + data (st0014(iyy),iyy=41,48) / 97,120,101,115, 58, 32, 37,100/ + data (st0014(iyy),iyy=49,53) / 47, 37,100, 10, 0/ + data (st0015(iyy),iyy= 1, 8) / 35, 32, 32, 32, 32, 32, 67,111/ + data (st0015(iyy),iyy= 9,16) /111,114,100,105,110, 97,116,101/ + data (st0015(iyy),iyy=17,24) /115, 58, 32,101, 99,108,105,112/ + data (st0015(iyy),iyy=25,29) /116,105, 99, 10, 0/ + data (st0016(iyy),iyy= 1, 8) / 35, 32, 32, 32, 32, 32, 77, 74/ + data (st0016(iyy),iyy= 9,16) / 68, 58, 32, 37, 48, 46, 53,102/ + data (st0016(iyy),iyy=17,24) / 32, 32, 69,112,111, 99,104, 58/ + data (st0016(iyy),iyy=25,32) / 32, 74, 37, 48, 46, 56,102, 32/ + data (st0016(iyy),iyy=33,40) / 66, 37, 48, 46, 56,102, 10, 0/ + data (st0017(iyy),iyy= 1, 8) / 35, 32, 37,115, 58, 32, 37,115/ + data (st0017(iyy),iyy= 9,16) / 32, 37,115, 32, 32, 80,114,111/ + data (st0017(iyy),iyy=17,24) /106,101, 99,116,105,111,110, 58/ + data (st0017(iyy),iyy=25,32) / 32, 37,115, 32, 32, 71,108,111/ + data (st0017(iyy),iyy=33,40) /110,103, 47, 71,108, 97,116, 32/ + data (st0017(iyy),iyy=41,48) / 97,120,101,115, 58, 32, 37,100/ + data (st0017(iyy),iyy=49,53) / 47, 37,100, 10, 0/ + data (st0018(iyy),iyy= 1, 8) / 35, 32, 32, 32, 32, 32, 67,111/ + data (st0018(iyy),iyy= 9,16) /111,114,100,105,110, 97,116,101/ + data (st0018(iyy),iyy=17,24) /115, 58, 32,103, 97,108, 97, 99/ + data (st0018(iyy),iyy=25,29) /116,105, 99, 10, 0/ + data (st0019(iyy),iyy= 1, 8) / 35, 32, 32, 32, 32, 32, 77, 74/ + data (st0019(iyy),iyy= 9,16) / 68, 58, 32, 37, 48, 46, 53,102/ + data (st0019(iyy),iyy=17,24) / 32, 69,112,111, 99,104, 58, 32/ + data (st0019(iyy),iyy=25,32) / 74, 37, 48, 46, 56,102, 32, 66/ + data (st0019(iyy),iyy=33,39) / 37, 48, 46, 56,102, 10, 0/ + data (st0020(iyy),iyy= 1, 8) / 35, 32, 37,115, 58, 32, 37,115/ + data (st0020(iyy),iyy= 9,16) / 32, 37,115, 32, 32, 80,114,111/ + data (st0020(iyy),iyy=17,24) /106,101, 99,116,105,111,110, 58/ + data (st0020(iyy),iyy=25,32) / 32, 37,115, 32, 32, 83,108,111/ + data (st0020(iyy),iyy=33,40) /110,103, 47, 83,108, 97,116, 32/ + data (st0020(iyy),iyy=41,48) / 97,120,101,115, 58, 32, 37,100/ + data (st0020(iyy),iyy=49,53) / 47, 37,100, 10, 0/ + data (st0021(iyy),iyy= 1, 8) / 35, 32, 32, 32, 32, 32, 67,111/ + data (st0021(iyy),iyy= 9,16) /111,114,100,105,110, 97,116,101/ + data (st0021(iyy),iyy=17,24) /115, 58, 32,115,117,112,101,114/ + data (st0021(iyy),iyy=25,32) /103, 97,108, 97, 99,116,105, 99/ + data (st0021(iyy),iyy=33,34) / 10, 0/ + data (st0022(iyy),iyy= 1, 8) / 35, 32, 32, 32, 32, 32, 77, 74/ + data (st0022(iyy),iyy= 9,16) / 68, 58, 32, 37, 48, 46, 53,102/ + data (st0022(iyy),iyy=17,24) / 32, 69,112,111, 99,104, 58, 32/ + data (st0022(iyy),iyy=25,32) / 74, 37, 48, 46, 56,102, 32, 66/ + data (st0022(iyy),iyy=33,39) / 37, 48, 46, 56,102, 10, 0/ + call smark (sp) + call salloc (imname, 255 , 2) + call salloc (projsr, 255 , 2) + call salloc (wcsstr, 255 , 2) + call salloc (radecr, 255 , 2) + call sscan (images) + call gargwd (memc(imname), 255 ) + if (.not.(skwrdr (wtype, memc(projsr), 255 , st0001) .le. 0)) + * goto 110 + call xstrcy(st0002, memc(projsr), 255 ) +110 continue + call strupr (memc(projsr)) + if (.not.(skwrdr (ptype, memc(wcsstr), 255 , st0003) .le. 0)) + * goto 120 + call xstrcy(st0004, memc(wcsstr), 255 ) +120 continue + call strlwr (memc(wcsstr)) + sw0001=(ctype) + goto 130 +140 continue + if (.not.(skwrdr (radecs, memc(radecr), 255 , st0005) .le. 0 + * )) goto 150 + call xstrcy(st0006, memc(radecr), 255 ) +150 continue + call strupr (memc(radecr)) + call fprinf (fd, st0007) + call pargsr (label) + call pargsr (memc(imname)) + call pargsr (memc(wcsstr)) + call pargsr (memc(projsr)) + call pargi (lngax) + call pargi (latax) + sw0002=(radecs) + goto 160 +170 continue + call fprinf (fd, st0008) + call pargsr (memc(radecr)) + call fprinf (fd, st0009) + call pargd (epoch) + if (.not.(((epoch).eq.1.6d308))) goto 180 + call pargd (1.6d308) + call pargd (1.6d308) + goto 181 +180 continue + call pargd (slepj(epoch)) + call pargd (slepb(epoch)) +181 continue + goto 161 +190 continue + call fprinf (fd, st0010) + call pargsr (memc(radecr)) + call pargd (equinx) + call fprinf (fd, st0011) + call pargd (slepj(epoch)) + call pargd (epoch) + goto 161 +200 continue + call fprinf (fd, st0012) + call pargsr (memc(radecr)) + call pargd (equinx) + call fprinf (fd, st0013) + call pargd (slepb (epoch)) + call pargd (epoch) + goto 161 +160 continue + sw0002=sw0002-2 + if (sw0002.lt.1.or.sw0002.gt.3) goto 200 + goto (190,190,170),sw0002 +161 continue + goto 131 +210 continue + call fprinf (fd, st0014) + call pargsr (label) + call pargsr (memc(imname)) + call pargsr (memc(wcsstr)) + call pargsr (memc(projsr)) + call pargi (lngax) + call pargi (latax) + call fprinf (fd, st0015) + call fprinf (fd, st0016) + call pargd (epoch) + if (.not.(((epoch).eq.1.6d308))) goto 220 + call pargd (1.6d308) + call pargd (1.6d308) + goto 221 +220 continue + call pargd (slepj(epoch)) + call pargd (slepb(epoch)) +221 continue + goto 131 +230 continue + call fprinf (fd, st0017) + call pargsr (label) + call pargsr (memc(imname)) + call pargsr (memc(wcsstr)) + call pargsr (memc(projsr)) + call pargi (lngax) + call pargi (latax) + call fprinf (fd, st0018) + call fprinf (fd, st0019) + call pargd (epoch) + call pargd (slepj(epoch)) + call pargd (slepb(epoch)) + goto 131 +240 continue + call fprinf (fd, st0020) + call pargsr (label) + call pargsr (memc(imname)) + call pargsr (memc(wcsstr)) + call pargsr (memc(projsr)) + call pargi (lngax) + call pargi (latax) + call fprinf (fd, st0021) + call fprinf (fd, st0022) + call pargd (epoch) + call pargd (slepj(epoch)) + call pargd (slepb(epoch)) + goto 131 +130 continue + if (sw0001.lt.1.or.sw0001.gt.4) goto 131 + goto (140,210,230,240),sw0001 +131 continue + call sfree (sp) +100 return + end +c radecs radecsys +c equinx equinox +c images imagesys +c skwrdr sk_wrdstr +c skiiwe sk_iiwrite +c skiipt sk_iiprint +c skimwe sk_imwrite +c skinwe sk_inwrite +c skimpt sk_imprint +c skinpt sk_inprint +c projsr projstr +c gargwd gargwrd +c fprinf fprintf +c radecr radecstr +c pargsr pargstr diff --git a/vendor/x11iraf/ximtool/clients.old/lib/skywcs/skwrite.x b/vendor/x11iraf/ximtool/clients.old/lib/skywcs/skwrite.x new file mode 100644 index 00000000..2e779b09 --- /dev/null +++ b/vendor/x11iraf/ximtool/clients.old/lib/skywcs/skwrite.x @@ -0,0 +1,510 @@ +include "skywcsdef.h" +include "skywcs.h" + + +# SK_IIPRINT -- Print a summary of the input image or list coordinate system. + +procedure sk_iiprint (label, imagesys, mw, coo) + +char label[ARB] #I the input label +char imagesys[ARB] #I the input image name and wcs +pointer mw #I pointer to the image wcs +pointer coo #I pointer to the coordinate system structure + +begin + if (mw == NULL) + call sk_inprint (label, imagesys, SKY_CTYPE(coo), + SKY_RADECSYS(coo), SKY_EQUINOX(coo), SKY_EPOCH(coo)) + else + call sk_imprint (label, imagesys, SKY_CTYPE(coo), SKY_PLNGAX(coo), + SKY_PLATAX(coo), SKY_WTYPE(coo), SKY_PIXTYPE(coo), + SKY_RADECSYS(coo), SKY_EQUINOX(coo), SKY_EPOCH(coo)) +end + + +# SK_IIWRITE -- Write a summary of the input image or list coordinate system +# to the output file + +procedure sk_iiwrite (fd, label, imagesys, mw, coo) + +int fd #I the output file descriptor +char label[ARB] #I the input label +char imagesys[ARB] #I the input image name and wcs +pointer mw #I pointer to the image wcs +pointer coo #I pointer to the coordinate system structure + +begin + if (mw == NULL) + call sk_inwrite (fd, label, imagesys, SKY_CTYPE(coo), + SKY_RADECSYS(coo), SKY_EQUINOX(coo), SKY_EPOCH(coo)) + else + call sk_imwrite (fd, label, imagesys, SKY_CTYPE(coo), + SKY_PLNGAX(coo), SKY_PLATAX(coo), SKY_WTYPE(coo), + SKY_PIXTYPE(coo), SKY_RADECSYS(coo), SKY_EQUINOX(coo), + SKY_EPOCH(coo)) +end + + +# SK_INPRINT -- Print a summary of the input list coordinate system. +# This should probably be a call to sk_inwrite with the file descriptor +# set to STDOUT to avoid duplication of code. There was a reason for +# having two routines at one point but I can't remember what it was ... + +procedure sk_inprint (label, system, ctype, radecsys, equinox, epoch) + +char label[ARB] #I the input label +char system[ARB] #I the input system +int ctype #I the input coordinate type +int radecsys #I the input equatorial reference system +double equinox #I the input equinox +double epoch #I the input epoch of the observation + +pointer sp, radecstr +double sl_epj(), sl_epb() +int sk_wrdstr() + +begin + call smark (sp) + call salloc (radecstr, SZ_FNAME, TY_CHAR) + + switch (ctype) { + + case CTYPE_EQUATORIAL: + if (sk_wrdstr (radecsys, Memc[radecstr], SZ_FNAME, + EQTYPE_LIST) <= 0) + call strcpy ("FK5", Memc[radecstr], SZ_FNAME) + call strupr (Memc[radecstr]) + call printf ("%s: %s Coordinates: equatorial %s\n") + call pargstr (label) + call pargstr (system) + call pargstr (Memc[radecstr]) + switch (radecsys) { + case EQTYPE_GAPPT: + call printf (" MJD: %0.5f Epoch: J%0.8f B%0.8f\n") + call pargd (epoch) + if (IS_INDEFD(epoch)) { + call pargd (INDEFD) + call pargd (INDEFD) + } else { + call pargd (sl_epj (epoch)) + call pargd (sl_epb (epoch)) + } + case EQTYPE_FK5, EQTYPE_ICRS: + call printf (" Equinox: J%0.3f Epoch: J%0.8f MJD: %0.5f\n") + call pargd (equinox) + call pargd (sl_epj(epoch)) + call pargd (epoch) + default: + call printf (" Equinox: B%0.3f Epoch: B%0.8f MJD: %0.5f\n") + call pargd (equinox) + call pargd (sl_epb(epoch)) + call pargd (epoch) + } + + case CTYPE_ECLIPTIC: + call printf ("%s: %s Coordinates: ecliptic\n") + call pargstr (label) + call pargstr (system) + call printf (" MJD: %0.5f Epoch: J%0.8f B%0.8f\n") + call pargd (epoch) + if (IS_INDEFD(epoch)) { + call pargd (INDEFD) + call pargd (INDEFD) + } else { + call pargd (sl_epj(epoch)) + call pargd (sl_epb(epoch)) + } + + case CTYPE_GALACTIC: + call printf ("%s: %s Coordinates: galactic\n") + call pargstr (label) + call pargstr (system) + call printf (" MJD: %0.5f Epoch: J%0.8f B%0.8f\n") + call pargd (epoch) + call pargd (sl_epj (epoch)) + call pargd (sl_epb (epoch)) + + case CTYPE_SUPERGALACTIC: + call printf ("%s: %s Coordinates: supergalactic\n") + call pargstr (label) + call pargstr (system) + call printf (" MJD: %0.5f Epoch: J%0.8f B%0.8f\n") + call pargd (epoch) + call pargd (sl_epj (epoch)) + call pargd (sl_epb (epoch)) + + } + + call sfree (sp) +end + + +# SK_INWRITE -- Write a summary of the input coordinate system. + +procedure sk_inwrite (fd, label, system, ctype, radecsys, equinox, epoch) + +int fd #I the output file descriptor +char label[ARB] #I the input label +char system[ARB] #I the input system +int ctype #I the input coordinate type +int radecsys #I the input equatorial reference system +double equinox #I the input equinox +double epoch #I the input epoch of the observation + +pointer sp, radecstr +double sl_epj(), sl_epb() +int sk_wrdstr() + +begin + call smark (sp) + call salloc (radecstr, SZ_FNAME, TY_CHAR) + + switch (ctype) { + + case CTYPE_EQUATORIAL: + if (sk_wrdstr (radecsys, Memc[radecstr], SZ_FNAME, + EQTYPE_LIST) <= 0) + call strcpy ("FK5", Memc[radecstr], SZ_FNAME) + call strupr (Memc[radecstr]) + call fprintf (fd, "# %s: %s Coordinates: equatorial %s\n") + call pargstr (label) + call pargstr (system) + call pargstr (Memc[radecstr]) + switch (radecsys) { + case EQTYPE_GAPPT: + call fprintf (fd, "# MJD: %0.5f Epoch: J%0.8f B%0.8f\n") + call pargd (epoch) + if (IS_INDEFD(epoch)) { + call pargd (INDEFD) + call pargd (INDEFD) + } else { + call pargd (sl_epj(epoch)) + call pargd (sl_epb(epoch)) + } + case EQTYPE_FK5, EQTYPE_ICRS: + call fprintf (fd, + "# Equinox: J%0.3f Epoch: J%0.8f MJD: %0.5f\n") + call pargd (equinox) + call pargd (sl_epj(epoch)) + call pargd (epoch) + default: + call fprintf (fd, + "# Equinox: B%0.3f Epoch: B%0.8f MJD: %0.5f\n") + call pargd (equinox) + call pargd (sl_epb(epoch)) + call pargd (epoch) + } + + case CTYPE_ECLIPTIC: + call fprintf (fd, "# %s: %s Coordinates: ecliptic\n") + call pargstr (label) + call pargstr (system) + call fprintf (fd, "# MJD: %0.5f Epoch: J%0.8f B%0.8f\n") + call pargd (epoch) + if (IS_INDEFD(epoch)) { + call pargd (INDEFD) + call pargd (INDEFD) + } else { + call pargd (sl_epj(epoch)) + call pargd (sl_epb(epoch)) + } + + case CTYPE_GALACTIC: + call fprintf (fd, "# %s: %s Coordinates: galactic\n") + call pargstr (label) + call pargstr (system) + call fprintf (fd, "# MJD: %0.5f Epoch: J%0.8f B%0.8f\n") + call pargd (epoch) + call pargd (sl_epj(epoch)) + call pargd (sl_epb(epoch)) + + case CTYPE_SUPERGALACTIC: + call fprintf (fd, "# %s: %s Coordinates: supergalactic\n") + call pargstr (label) + call pargstr (system) + call fprintf (fd, "# MJD: %0.5f Epoch: J%0.8f B%0.8f\n") + call pargd (epoch) + call pargd (sl_epj(epoch)) + call pargd (sl_epb(epoch)) + + } + + call sfree (sp) +end + + +# SK_IMPRINT -- Print a summary of the input image coordinate system. +# This should probably be a call to sk_imwrite with the file descriptor +# set to STDOUT to avoid duplication of code. There was a reason for +# having two routines at one point but I can't remember what it was ... + +procedure sk_imprint (label, imagesys, ctype, lngax, latax, wtype, ptype, + radecsys, equinox, epoch) + +char label[ARB] #I input label +char imagesys[ARB] #I the input image name and system +int ctype #I the image coordinate type +int lngax #I the image ra/glon/elon axis +int latax #I the image dec/glat/elat axis +int wtype #I the image projection type +int ptype #I the image image wcs type +int radecsys #I the image equatorial reference system +double equinox #I the image equinox +double epoch #I the image epoch of the observation + +pointer sp, imname, projstr, wcsstr, radecstr +double sl_epj(), sl_epb() +int sk_wrdstr() + +begin + call smark (sp) + call salloc (imname, SZ_FNAME, TY_CHAR) + call salloc (projstr, SZ_FNAME, TY_CHAR) + call salloc (wcsstr, SZ_FNAME, TY_CHAR) + call salloc (radecstr, SZ_FNAME, TY_CHAR) + + call sscan (imagesys) + call gargwrd (Memc[imname], SZ_FNAME) + if (sk_wrdstr (wtype, Memc[projstr], SZ_FNAME, WTYPE_LIST) <= 0) + call strcpy ("linear", Memc[projstr], SZ_FNAME) + call strupr (Memc[projstr]) + if (sk_wrdstr (ptype, Memc[wcsstr], SZ_FNAME, PIXTYPE_LIST) <= 0) + call strcpy ("world", Memc[wcsstr], SZ_FNAME) + call strlwr (Memc[wcsstr]) + + switch (ctype) { + + case CTYPE_EQUATORIAL: + if (sk_wrdstr (radecsys, Memc[radecstr], SZ_FNAME, + EQTYPE_LIST) <= 0) + call strcpy ("FK5", Memc[radecstr], SZ_FNAME) + call strupr (Memc[radecstr]) + call printf ( + "%s: %s %s Projection: %s Ra/Dec axes: %d/%d\n") + call pargstr (label) + call pargstr (Memc[imname]) + call pargstr (Memc[wcsstr]) + call pargstr (Memc[projstr]) + call pargi (lngax) + call pargi (latax) + switch (radecsys) { + case EQTYPE_GAPPT: + call printf (" Coordinates: equatorial %s\n") + call pargstr (Memc[radecstr]) + call printf (" MJD: %0.5f Epoch: J%0.8f B%0.8f\n") + call pargd (epoch) + if (IS_INDEFD(epoch)) { + call pargd (INDEFD) + call pargd (INDEFD) + } else { + call pargd (sl_epj(epoch)) + call pargd (sl_epb(epoch)) + } + case EQTYPE_FK5, EQTYPE_ICRS: + call printf (" Coordinates: equatorial %s Equinox: J%0.3f\n") + call pargstr (Memc[radecstr]) + call pargd (equinox) + call printf (" Epoch: J%0.8f MJD: %0.5f\n") + call pargd (sl_epj (epoch)) + call pargd (epoch) + default: + call printf (" Coordinates: equatorial %s Equinox: B%0.3f\n") + call pargstr (Memc[radecstr]) + call pargd (equinox) + call printf (" Epoch: B%0.8f MJD: %0.5f\n") + call pargd (sl_epb (epoch)) + call pargd (epoch) + } + + case CTYPE_ECLIPTIC: + call printf ( + "%s: %s %s Projection: %s Elong/Elat axes: %d/%d\n") + call pargstr (label) + call pargstr (Memc[imname]) + call pargstr (Memc[wcsstr]) + call pargstr (Memc[projstr]) + call pargi (lngax) + call pargi (latax) + call printf (" Coordinates: ecliptic\n") + call printf (" MJD: %0.5f Epoch: J%0.8f B%0.8f\n") + call pargd (epoch) + if (IS_INDEFD(epoch)) { + call pargd (INDEFD) + call pargd (INDEFD) + } else { + call pargd (sl_epj(epoch)) + call pargd (sl_epb(epoch)) + } + + case CTYPE_GALACTIC: + call printf ( + "%s: %s %s Projection: %s Glong/Glat axes: %d/%d\n") + call pargstr (label) + call pargstr (Memc[imname]) + call pargstr (Memc[wcsstr]) + call pargstr (Memc[projstr]) + call pargi (lngax) + call pargi (latax) + call printf (" Coordinates: galactic\n") + call printf (" MJD: %0.5f Epoch: J%0.8f B%0.8f\n") + call pargd (epoch) + call pargd (sl_epj (epoch)) + call pargd (sl_epb (epoch)) + + case CTYPE_SUPERGALACTIC: + call printf ( + "%s: %s %s Projection: %s Slong/Slat axes: %d/%d\n") + call pargstr (label) + call pargstr (Memc[imname]) + call pargstr (Memc[wcsstr]) + call pargstr (Memc[projstr]) + call pargi (lngax) + call pargi (latax) + call printf (" Coordinates: supergalactic\n") + call printf (" MJD: %0.5f Epoch: J%0.8f B%0.8f\n") + call pargd (epoch) + call pargd (sl_epj (epoch)) + call pargd (sl_epb (epoch)) + } + + call sfree (sp) +end + + +# SK_IMWRITE -- Write a summary of the image coordinate system to the +# output file. + +procedure sk_imwrite (fd, label, imagesys, ctype, lngax, latax, wtype, ptype, + radecsys, equinox, epoch) + +int fd #I the output file descriptor +char label[ARB] #I input label +char imagesys[ARB] #I the input image name and wcs +int ctype #I the image coordinate type +int lngax #I the image ra/glon/elon axis +int latax #I the image dec/glat/elat axis +int wtype #I the image projection type +int ptype #I the image image wcs type +int radecsys #I the image equatorial reference system +double equinox #I the image equinox +double epoch #I the image epoch of the observation + +pointer sp, imname, projstr, wcsstr, radecstr +double sl_epj(), sl_epb() +int sk_wrdstr() + +begin + call smark (sp) + call salloc (imname, SZ_FNAME, TY_CHAR) + call salloc (projstr, SZ_FNAME, TY_CHAR) + call salloc (wcsstr, SZ_FNAME, TY_CHAR) + call salloc (radecstr, SZ_FNAME, TY_CHAR) + + call sscan (imagesys) + call gargwrd (Memc[imname], SZ_FNAME) + if (sk_wrdstr (wtype, Memc[projstr], SZ_FNAME, WTYPE_LIST) <= 0) + call strcpy ("linear", Memc[projstr], SZ_FNAME) + call strupr (Memc[projstr]) + if (sk_wrdstr (ptype, Memc[wcsstr], SZ_FNAME, PIXTYPE_LIST) <= 0) + call strcpy ("world", Memc[wcsstr], SZ_FNAME) + call strlwr (Memc[wcsstr]) + + switch (ctype) { + + case CTYPE_EQUATORIAL: + if (sk_wrdstr (radecsys, Memc[radecstr], SZ_FNAME, + EQTYPE_LIST) <= 0) + call strcpy ("FK5", Memc[radecstr], SZ_FNAME) + call strupr (Memc[radecstr]) + call fprintf (fd, + "# %s: %s %s Projection: %s Ra/Dec axes: %d/%d\n") + call pargstr (label) + call pargstr (Memc[imname]) + call pargstr (Memc[wcsstr]) + call pargstr (Memc[projstr]) + call pargi (lngax) + call pargi (latax) + switch (radecsys) { + case EQTYPE_GAPPT: + call fprintf (fd, "# Coordinates: equatorial %s\n") + call pargstr (Memc[radecstr]) + call fprintf (fd, "# MJD: %0.5f Epoch: J%0.8f B%0.8f\n") + call pargd (epoch) + if (IS_INDEFD(epoch)) { + call pargd (INDEFD) + call pargd (INDEFD) + } else { + call pargd (sl_epj(epoch)) + call pargd (sl_epb(epoch)) + } + case EQTYPE_FK5, EQTYPE_ICRS: + call fprintf (fd, + "# Coordinates: equatorial %s Equinox: J%0.3f\n") + call pargstr (Memc[radecstr]) + call pargd (equinox) + call fprintf (fd, "# Epoch: J%0.8f MJD: %0.5f\n") + call pargd (sl_epj(epoch)) + call pargd (epoch) + default: + call fprintf (fd, + "# Coordinates: equatorial %s Equinox: B%0.3f\n") + call pargstr (Memc[radecstr]) + call pargd (equinox) + call fprintf (fd, "# Epoch: B%0.8f MJD: %0.5f\n") + call pargd (sl_epb (epoch)) + call pargd (epoch) + } + + case CTYPE_ECLIPTIC: + call fprintf (fd, + "# %s: %s %s Projection: %s Elong/Elat axes: %d/%d\n") + call pargstr (label) + call pargstr (Memc[imname]) + call pargstr (Memc[wcsstr]) + call pargstr (Memc[projstr]) + call pargi (lngax) + call pargi (latax) + call fprintf (fd, "# Coordinates: ecliptic\n") + call fprintf (fd, "# MJD: %0.5f Epoch: J%0.8f B%0.8f\n") + call pargd (epoch) + if (IS_INDEFD(epoch)) { + call pargd (INDEFD) + call pargd (INDEFD) + } else { + call pargd (sl_epj(epoch)) + call pargd (sl_epb(epoch)) + } + + case CTYPE_GALACTIC: + call fprintf (fd, + "# %s: %s %s Projection: %s Glong/Glat axes: %d/%d\n") + call pargstr (label) + call pargstr (Memc[imname]) + call pargstr (Memc[wcsstr]) + call pargstr (Memc[projstr]) + call pargi (lngax) + call pargi (latax) + call fprintf (fd, "# Coordinates: galactic\n") + call fprintf (fd, "# MJD: %0.5f Epoch: J%0.8f B%0.8f\n") + call pargd (epoch) + call pargd (sl_epj(epoch)) + call pargd (sl_epb(epoch)) + + case CTYPE_SUPERGALACTIC: + call fprintf (fd, + "# %s: %s %s Projection: %s Slong/Slat axes: %d/%d\n") + call pargstr (label) + call pargstr (Memc[imname]) + call pargstr (Memc[wcsstr]) + call pargstr (Memc[projstr]) + call pargi (lngax) + call pargi (latax) + call fprintf (fd, "# Coordinates: supergalactic\n") + call fprintf (fd, "# MJD: %0.5f Epoch: J%0.8f B%0.8f\n") + call pargd (epoch) + call pargd (sl_epj(epoch)) + call pargd (sl_epb(epoch)) + } + + call sfree (sp) +end diff --git a/vendor/x11iraf/ximtool/clients.old/lib/skywcs/skywcs.h b/vendor/x11iraf/ximtool/clients.old/lib/skywcs/skywcs.h new file mode 100644 index 00000000..c0c6a3b7 --- /dev/null +++ b/vendor/x11iraf/ximtool/clients.old/lib/skywcs/skywcs.h @@ -0,0 +1,132 @@ +# Public definitions file for the SKYWCS library. + +# Define the SKYWCS library parameters. + +define S_VXOFF 1 +define S_VYOFF 2 +define S_VXSTEP 3 +define S_VYSTEP 4 +define S_EQUINOX 5 +define S_EPOCH 6 +define S_CTYPE 7 +define S_RADECSYS 8 +define S_WTYPE 9 +define S_PLNGAX 10 +define S_PLATAX 11 +define S_XLAX 12 +define S_YLAX 13 +define S_PIXTYPE 14 +define S_NLNGAX 15 +define S_NLATAX 16 +define S_NLNGUNITS 17 +define S_NLATUNITS 18 +define S_COOSYSTEM 19 +define S_STATUS 20 + +# Define the list of supported fundamental coordinate systems. + +define FTYPE_LIST "|fk4|noefk4|fk5|icrs|apparent|ecliptic|galactic|\ +supergalactic|" + +define FTYPE_FK4 1 +define FTYPE_FK4NOE 2 +define FTYPE_FK5 3 +define FTYPE_ICRS 4 +define FTYPE_GAPPT 5 +define FTYPE_ECLIPTIC 6 +define FTYPE_GALACTIC 7 +define FTYPE_SUPERGALACTIC 8 + +# Define the list of supported coordinate systems. + +define CTYPE_LIST "|equatorial|ecliptic|galactic|supergalactic|" + +define CTYPE_EQUATORIAL 1 +define CTYPE_ECLIPTIC 2 +define CTYPE_GALACTIC 3 +define CTYPE_SUPERGALACTIC 4 + +# Define the supported equatoral reference systems. + +define EQTYPE_LIST "|fk4|fk4-no-e|fk5|icrs|gappt|" + +define EQTYPE_FK4 1 +define EQTYPE_FK4NOE 2 +define EQTYPE_FK5 3 +define EQTYPE_ICRS 4 +define EQTYPE_GAPPT 5 + +# Define the input coordinate file longitude latitude units. + +define SKY_LNG_UNITLIST "|degrees|radians|hours|" +define SKY_LAT_UNITLIST "|degrees|radians|" + +define SKY_DEGREES 1 +define SKY_RADIANS 2 +define SKY_HOURS 3 + +# Define the list of supported image sky projection types. + +define WTYPE_LIST "|lin|azp|tan|sin|stg|arc|zpn|zea|air|cyp|car|\ +mer|cea|cop|cod|coe|coo|bon|pco|gls|par|ait|mol|csc|qsc|tsc|tnx|zpx|" + +define PTYPE_LIST "|z|z|z|z|z|z|z|z|z|c|c|c|c|n|n|n|n|c|c|c|c|c|c|c|c|c|\ +x|x|" + +define WTYPE_LIN 1 +define WTYPE_AZP 2 +define WTYPE_TAN 3 +define WTYPE_SIN 4 +define WTYPE_STG 5 +define WTYPE_ARC 6 +define WTYPE_ZPN 7 +define WTYPE_ZEA 8 +define WTYPE_AIR 9 +define WTYPE_CYP 10 +define WTYPE_CAR 11 +define WTYPE_MER 12 +define WTYPE_CEA 13 +define WTYPE_COP 14 +define WTYPE_COD 15 +define WTYPE_COE 16 +define WTYPE_COO 17 +define WTYPE_BON 18 +define WTYPE_PCO 19 +define WTYPE_GLS 20 +define WTYPE_PAR 21 +define WTYPE_AIT 22 +define WTYPE_MOL 23 +define WTYPE_CSC 24 +define WTYPE_QSC 25 +define WTYPE_TSC 26 +define WTYPE_TNX 27 +define WTYPE_ZPX 28 + +define PTYPE_NAMES "|z|c|n|x|" + +define PTYPE_ZEN 1 +define PTYPE_CYL 2 +define PTYPE_CON 3 +define PTYPE_EXP 4 + +# Define the supported image axis types. + +define AXTYPE_LIST "|ra|dec|glon|glat|elon|elat|slon|slat|" + +define AXTYPE_RA 1 +define AXTYPE_DEC 2 +define AXTYPE_GLON 3 +define AXTYPE_GLAT 4 +define AXTYPE_ELON 5 +define AXTYPE_ELAT 6 +define AXTYPE_SLON 7 +define AXTYPE_SLAT 8 + +# Define the supported image pixel coordinate systems. + +define PIXTYPE_LIST "|logical|tv|physical|world|" + +define PIXTYPE_LOGICAL 1 +define PIXTYPE_TV 2 +define PIXTYPE_PHYSICAL 3 +define PIXTYPE_WORLD 4 diff --git a/vendor/x11iraf/ximtool/clients.old/lib/skywcs/skywcsdef.h b/vendor/x11iraf/ximtool/clients.old/lib/skywcs/skywcsdef.h new file mode 100644 index 00000000..433247bd --- /dev/null +++ b/vendor/x11iraf/ximtool/clients.old/lib/skywcs/skywcsdef.h @@ -0,0 +1,24 @@ +# The SKYWCS library structure. + +define LEN_SKYCOOSTRUCT (30 + SZ_FNAME + 1) + +define SKY_VXOFF Memd[P2D($1)] # logical ra/longitude offset +define SKY_VYOFF Memd[P2D($1+2)] # logical dec/tatitude offset +define SKY_VXSTEP Memd[P2D($1+4)] # logical ra/longitude stepsize +define SKY_VYSTEP Memd[P2D($1+6)] # logical dec/latitude stepsize +define SKY_EQUINOX Memd[P2D($1+8)] # equinox of ra/dec system (B or J) +define SKY_EPOCH Memd[P2D($1+10)] # epoch of observation (MJD) +define SKY_CTYPE Memi[$1+12] # celestial coordinate system code +define SKY_RADECSYS Memi[$1+13] # ra/dec system code +define SKY_WTYPE Memi[$1+14] # sky projection function code +define SKY_PLNGAX Memi[$1+15] # physical ra/longitude axis +define SKY_PLATAX Memi[$1+16] # physical dec/latitude axis +define SKY_XLAX Memi[$1+17] # logical ra/longitude axis +define SKY_YLAX Memi[$1+18] # logical dec/latitude axis +define SKY_PIXTYPE Memi[$1+19] # iraf wcs system code +define SKY_NLNGAX Memi[$1+20] # length of ra/longitude axis +define SKY_NLATAX Memi[$1+21] # length of dec/latitude axis +define SKY_NLNGUNITS Memi[$1+22] # the native ra/longitude units +define SKY_NLATUNITS Memi[$1+23] # the native dec/latitude units +define SKY_STATUS Memi[$1+24] # the status (OK or ERR) +define SKY_COOSYSTEM Memc[P2C($1+25)] # the coordinate system name diff --git a/vendor/x11iraf/ximtool/clients.old/lib/wcsgfterm.f b/vendor/x11iraf/ximtool/clients.old/lib/wcsgfterm.f new file mode 100644 index 00000000..a8f7b191 --- /dev/null +++ b/vendor/x11iraf/ximtool/clients.old/lib/wcsgfterm.f @@ -0,0 +1,89 @@ + subroutine wcsgfm (mw, crpix, crval, cd, ndim) + logical Memb(1) + integer*2 Memc(1) + integer*2 Mems(1) + integer Memi(1) + integer*4 Meml(1) + real Memr(1) + double precision Memd(1) + complex Memx(1) + equivalence (Memb, Memc, Mems, Memi, Meml, Memr, Memd, Memx) + common /Mem/ Memd + integer mw + integer ndim + double precision crpix(ndim) + double precision crval(ndim) + double precision cd(ndim,ndim) + integer sp + integer r + integer wcd + integer ltv + integer ltm + integer iltm + integer alert + integer errmsg + integer i + integer errcoe + integer errget + logical xerpop + logical xerflg + common /xercom/ xerflg + integer*2 st0001(8) + integer*2 st0002(26) + integer*2 st0003(1) + integer*2 st0004(1) + save + integer iyy + data st0001 / 37,115, 10, 34, 37,115, 34, 0/ + data (st0002(iyy),iyy= 1, 8) / 69,114,114,111,114, 32,100,101/ + data (st0002(iyy),iyy= 9,16) / 99,111,100,105,110,103, 32,105/ + data (st0002(iyy),iyy=17,24) /109, 97,103,101, 32, 87, 67, 83/ + data (st0002(iyy),iyy=25,26) / 58, 0/ + data st0003 / 0/ + data st0004 / 0/ + call smark (sp) + call salloc (r, ndim, 7) + call salloc (wcd, ndim * ndim, 7) + call salloc (ltv, ndim, 7) + call salloc (ltm, ndim * ndim, 7) + call salloc (iltm, ndim * ndim, 7) + call xerpsh + call mwgwtd (mw, memd(r), crval, memd(wcd), ndim) + if (xerflg) goto 112 + call mwgltd (mw, memd(ltm), memd(ltv), ndim) + if (xerflg) goto 112 + call mwvmud (memd(ltm), memd(r), crpix, ndim) + call aaddd (crpix, memd(ltv), crpix, ndim) + call mwinvd (memd(ltm), memd(iltm), ndim) + call mwmmud (memd(wcd), memd(iltm), cd, ndim) +112 if (.not.xerpop()) goto 110 + call salloc (alert, 1023 , 2) + call salloc (errmsg, 1023 , 2) + call aclrd (cd, ndim*ndim) + i=1 +120 if (.not.(i .le. ndim)) goto 122 + crpix(i) = 1.0d0 + crval(i) = 1.0d0 + cd(i,i) = 1.0d0 +121 i=i+1 + goto 120 +122 continue + errcoe = errget (memc(errmsg), 1023 ) + call sprinf (memc(alert), 255 , st0001) + call pargsr (st0002) + call pargsr (memc(errmsg)) + call ximalt (memc(alert), st0003, st0004) +110 continue + call sfree (sp) +100 return + end +c sprinf sprintf +c mwinvd mwinvertd +c mwvmud mwvmuld +c errcoe errcode +c mwgwtd mw_gwtermd +c ximalt xim_alert +c mwmmud mwmmuld +c pargsr pargstr +c wcsgfm wcs_gfterm +c mwgltd mw_gltermd diff --git a/vendor/x11iraf/ximtool/clients.old/lib/wcsgfterm.x b/vendor/x11iraf/ximtool/clients.old/lib/wcsgfterm.x new file mode 100644 index 00000000..8b97a55b --- /dev/null +++ b/vendor/x11iraf/ximtool/clients.old/lib/wcsgfterm.x @@ -0,0 +1,61 @@ +# Copyright(c) 1986 Association of Universities for Research in Astronomy Inc. + + +# WCS_GFTERM -- Compute the output FITS CRPIX, CRVAL, and CD arrays from the +# MWCS LTERM and WTERM. Note that the CD matrix terms are still transposed +# from the usual Fortran order. + +procedure wcs_gfterm (mw, crpix, crval, cd, ndim) + +pointer mw #i the input mwcs pointer +double crpix[ndim] #o the output FITS CRPIX array +double crval[ndim] #o the output FITS CRVAL array +double cd[ndim,ndim] #o the output FITS CD matrix +int ndim #i the dimensionality of the wcs + +pointer sp, r, wcd, ltv, ltm, iltm +pointer alert, errmsg +int i, errcode + +int errget() + +errchk mw_gwtermd, mw_gltermd + +begin + call smark (sp) + call salloc (r, ndim, TY_DOUBLE) + call salloc (wcd, ndim * ndim, TY_DOUBLE) + call salloc (ltv, ndim, TY_DOUBLE) + call salloc (ltm, ndim * ndim, TY_DOUBLE) + call salloc (iltm, ndim * ndim, TY_DOUBLE) + + iferr { + call mw_gwtermd (mw, Memd[r], crval, Memd[wcd], ndim) + call mw_gltermd (mw, Memd[ltm], Memd[ltv], ndim) + call mwvmuld (Memd[ltm], Memd[r], crpix, ndim) + call aaddd (crpix, Memd[ltv], crpix, ndim) + call mwinvertd (Memd[ltm], Memd[iltm], ndim) + call mwmmuld (Memd[wcd], Memd[iltm], cd, ndim) + + } then { + call salloc (alert, SZ_LINE, TY_CHAR) + call salloc (errmsg, SZ_LINE, TY_CHAR) + + # Set up a default value. + call aclrd (cd, ndim*ndim) + for (i=1; i <= ndim; i=i+1) { + crpix[i] = 1.0d0 + crval[i] = 1.0d0 + cd[i,i] = 1.0d0 + } + + # Send alert to the GUI. + errcode = errget (Memc[errmsg], SZ_LINE) + call sprintf (Memc[alert], SZ_FNAME, "%s\n\"%s\"") + call pargstr ("Error decoding image WCS:") + call pargstr (Memc[errmsg]) + call xim_alert (Memc[alert], "", "") + } + + call sfree (sp) +end diff --git a/vendor/x11iraf/ximtool/clients.old/lib/ximtool.f b/vendor/x11iraf/ximtool/clients.old/lib/ximtool.f new file mode 100644 index 00000000..80dabf3f --- /dev/null +++ b/vendor/x11iraf/ximtool/clients.old/lib/ximtool.f @@ -0,0 +1,510 @@ + integer function ximcot (device, name, type) + integer*2 device(*) + integer*2 name(*) + integer*2 type(*) + logical Memb(1) + integer*2 Memc(1) + integer*2 Mems(1) + integer Memi(1) + integer*4 Meml(1) + real Memr(1) + double precision Memd(1) + complex Memx(1) + equivalence (Memb, Memc, Mems, Memi, Meml, Memr, Memd, Memx) + common /Mem/ Memd + integer sp + integer cmsg + integer dev + integer buf + integer msglen + integer*2 connet(255 +1) + integer ndopen + integer reopen + integer xstrln + integer ximred + logical streq + external ximonr + integer fdin + integer fdout + integer mode + integer nbuf + integer nr + integer nw + integer*2 buffer(2047+1) + integer ximepa + integer ximstt + integer oldont + integer ximfd + integer ximjmp(64 ) + integer ximert + logical xerpop + logical xerflg + common /xercom/ xerflg + common /ximfd/ fdin, fdout, mode, nbuf, buffer, nr, nw + common /ximcom/ ximfd, ximjmp, ximepa, ximstt, oldont + common /ximecm/ ximert + integer*2 st0001(6) + integer*2 st0002(5) + integer*2 st0003(12) + integer*2 st0004(8) + integer*2 st0005(12) + integer*2 st0006(21) + integer*2 st0007(10) + integer*2 st0008(8) + save + integer iyy + data st0001 / 37,115, 58, 37,115, 0/ + data st0002 /116,101,120,116, 0/ + data (st0003(iyy),iyy= 1, 8) / 99,111,110,110,101, 99,116, 32/ + data (st0003(iyy),iyy= 9,12) / 37,115, 0, 0/ + data st0004 /120,105,109,116,111,111,108, 0/ + data (st0005(iyy),iyy= 1, 8) /117,110,105,120, 58, 37,115, 58/ + data (st0005(iyy),iyy= 9,12) / 37,115, 0, 0/ + data (st0006(iyy),iyy= 1, 8) / 82,101, 99,111,110,110,101, 99/ + data (st0006(iyy),iyy= 9,16) /116,101,100, 32,111,110, 32, 39/ + data (st0006(iyy),iyy=17,21) / 37,115, 39, 10, 0/ + data (st0007(iyy),iyy= 1, 8) /114,101, 97,100,121, 32, 37,115/ + data (st0007(iyy),iyy= 9,10) / 0, 0/ + data st0008 /120,105,109,116,111,111,108, 0/ + data ximert /0/ + call smark (sp) + call salloc (buf, 1023 , 2) + call salloc (cmsg, 1023 , 2) + call salloc (dev, 255 , 2) + call aclrc (memc(buf), 1023 ) + call aclrc (memc(cmsg), 1023 ) + call aclrc (memc(dev), 255 ) + call aclrc (buffer, 2047) + fdin = 0 + fdout = 0 + nbuf = 0 + nr = 0 + nw = 0 + call sprinf (memc(dev), 255 , st0001) + call pargsr (device) + call pargsr (type) + if (.not.(streq (type, st0002))) goto 110 + mode = 1 + goto 111 +110 continue + mode = 2 +111 continue + call xerpsh + fdin = ndopen (memc(dev), 2) + if (.not.xerpop()) goto 120 + call sfree (sp) + ximcot = (-1) + goto 100 +120 continue + fdout = reopen (fdin, 2) + call sprinf (memc(cmsg), 1023 , st0003) + call pargsr (name) + msglen = xstrln(memc(cmsg)) + call ximmee (st0004, memc(cmsg)) + if (.not.(ximred (memc(buf), msglen) .eq. -2)) goto 130 + call sfree (sp) + ximcot = (-1) + goto 100 +130 continue + call xfcloe(fdout) + call xfcloe(fdin) + call sprinf (connet, 1023 , st0005) + call pargsr (memc(buf+8)) + call pargsr (type) + call xerpsh + fdin = ndopen (connet, 2) + if (.not.xerpop()) goto 140 + call sfree (sp) + ximcot = (-1) + goto 100 +140 continue + fdout = reopen (fdin, 2) + if (.not.(.true.)) goto 150 + call eprinf (st0006) + call pargsr (connet) +150 continue + call sprinf (memc(cmsg), 1023 , st0007) + call pargsr (name) + msglen = xstrln(memc(cmsg)) + call ximmee (st0008, memc(cmsg)) + call onerrr (ximonr) + call sfree (sp) + ximcot = (0) + goto 100 +100 return + end + subroutine ximdit (sendqt) + integer sendqt + integer fdin + integer fdout + integer mode + integer nbuf + integer nr + integer nw + integer*2 buffer(2047+1) + common /ximfd/ fdin, fdout, mode, nbuf, buffer, nr, nw + integer*2 st0001(8) + integer*2 st0002(5) + save + data st0001 /120,105,109,116,111,111,108, 0/ + data st0002 /113,117,105,116, 0/ + if (.not.(sendqt .eq. 1)) goto 110 + call ximmee (st0001, st0002) +110 continue + call xffluh(fdout) + call xfcloe(fdin) + call xfcloe(fdout) + fdin = 0 + fdout = 0 +100 return + end + subroutine ximmee (object, messae) + integer*2 object(*) + integer*2 messae(*) + logical Memb(1) + integer*2 Memc(1) + integer*2 Mems(1) + integer Memi(1) + integer*4 Meml(1) + real Memr(1) + double precision Memd(1) + complex Memx(1) + equivalence (Memb, Memc, Mems, Memi, Meml, Memr, Memd, Memx) + common /Mem/ Memd + integer sp + integer msgbuf + integer msglen + integer olen + integer mlen + integer ip + integer xstrln + logical streq + integer*2 st0001(8) + integer*2 st0002(6) + integer*2 st0003(4) + integer*2 st0004(4) + save + data st0001 /120,105,109,116,111,111,108, 0/ + data st0002 /115,101,110,100, 32, 0/ + data st0003 / 32,123, 32, 0/ + data st0004 / 32,125, 0, 0/ + olen = xstrln(object) + mlen = xstrln(messae) + msglen = olen + mlen + 20 + call smark (sp) + call salloc (msgbuf, msglen, 2) + call aclrc (memc(msgbuf), msglen) + if (.not.(streq (object, st0001))) goto 110 + call xstrcy(messae, memc(msgbuf), msglen) + goto 111 +110 continue + ip = 0 + call amovc (st0002, memc(msgbuf+ip), 5) + ip = ip + 5 + call amovc (object, memc(msgbuf+ip), olen) + ip = ip + olen + call amovc (st0003, memc(msgbuf+ip), 3) + ip = ip + 3 + call amovc (messae, memc(msgbuf+ip), mlen) + ip = ip + mlen + call amovc (st0004, memc(msgbuf+ip), 2) + ip = ip + 3 +111 continue + msglen = xstrln(memc(msgbuf)) + call ximwre (memc(msgbuf), msglen) + call sfree (sp) +100 return + end + subroutine ximalt (text, ok, cancel) + integer*2 text(*) + integer*2 ok(*) + integer*2 cancel(*) + logical Memb(1) + integer*2 Memc(1) + integer*2 Mems(1) + integer Memi(1) + integer*4 Meml(1) + real Memr(1) + double precision Memd(1) + complex Memx(1) + equivalence (Memb, Memc, Mems, Memi, Meml, Memr, Memd, Memx) + common /Mem/ Memd + integer sp + integer msg + integer*2 st0001(15) + integer*2 st0002(6) + save + integer iyy + data (st0001(iyy),iyy= 1, 8) /123, 37,115,125, 32,123, 37,115/ + data (st0001(iyy),iyy= 9,15) /125, 32,123, 37,115,125, 0/ + data st0002 / 97,108,101,114,116, 0/ + call smark (sp) + call salloc (msg, 1023 , 2) + call sprinf (memc(msg), 1023 , st0001) + call pargsr (text) + call pargsr (ok) + call pargsr (cancel) + call ximmee (st0002, memc(msg)) + call sfree (sp) +100 return + end + subroutine ximwre (messae, len) + integer len + integer*2 messae(*) + integer nleft + integer n + integer ip + integer*2 msgbuf(2047+1) + integer xstrln + integer fdin + integer fdout + integer mode + integer nbuf + integer nr + integer nw + integer*2 buffer(2047+1) + common /ximfd/ fdin, fdout, mode, nbuf, buffer, nr, nw + logical xerflg + common /xercom/ xerflg + integer*2 st0001(42) + save + integer iyy + data (st0001(iyy),iyy= 1, 8) /120,105,109, 95,119,114,105,116/ + data (st0001(iyy),iyy= 9,16) /101, 58, 32, 39, 37, 46, 52, 53/ + data (st0001(iyy),iyy=17,24) /115, 39, 32,108,101,110, 61, 37/ + data (st0001(iyy),iyy=25,32) /100, 32,109,111,100,101, 61, 37/ + data (st0001(iyy),iyy=33,40) /100, 32,116,111,116, 61, 37,100/ + data (st0001(iyy),iyy=41,42) / 10, 0/ + len = xstrln(messae) + 1 + messae(len) = 0 + if (.not.(mod(len,2) .eq. 1)) goto 110 + len = len + 1 + messae(len) = 0 +110 continue + ip = 1 + nleft = len +120 if (.not.(nleft .gt. 0)) goto 121 + n = min (nleft, 2047) + call amovc (messae(ip), msgbuf, n) + if (.not.(mode .eq. 2)) goto 130 + call achtcb (msgbuf, msgbuf, n) + call xfwrie(fdout, msgbuf, n / 2 ) + if (xerflg) goto 100 + goto 131 +130 continue + call xfwrie(fdout, msgbuf, n) + if (xerflg) goto 100 +131 continue + ip = ip + n + nleft = nleft - n + goto 120 +121 continue + nw = nw + len + call xffluh(fdout) + if (xerflg) goto 100 + if (.not.(.true.)) goto 140 + call eprinf (st0001) + call pargsr (messae) + call pargi (len) + call pargi (mode) + call pargi (nw) +140 continue +100 return + end + integer function ximred (messae, len) + integer len + integer*2 messae(*) + integer i + integer n + integer nleft + integer xfread + integer fdin + integer fdout + integer mode + integer nbuf + integer nr + integer nw + integer*2 buffer(2047+1) + integer ximepa + integer ximstt + integer oldont + integer ximfd + integer ximjmp(64 ) + logical xerpop + logical xerflg + common /xercom/ xerflg + common /ximfd/ fdin, fdout, mode, nbuf, buffer, nr, nw + common /ximcom/ ximfd, ximjmp, ximepa, ximstt, oldont + integer*2 st0001(42) + integer*2 st0002(40) + save + integer iyy + data (st0001(iyy),iyy= 1, 8) /120,105,109, 95,114,101, 97,100/ + data (st0001(iyy),iyy= 9,16) / 58, 32,116,111,116, 61, 37,100/ + data (st0001(iyy),iyy=17,24) / 32,108,101,110, 61, 37,100, 47/ + data (st0001(iyy),iyy=25,32) / 37,100, 32,109,115,103, 61, 39/ + data (st0001(iyy),iyy=33,40) / 37, 51, 48, 46, 51, 48,115, 39/ + data (st0001(iyy),iyy=41,42) / 10, 0/ + data (st0002(iyy),iyy= 1, 8) /120,105,109, 95,114,101, 97,100/ + data (st0002(iyy),iyy= 9,16) / 58, 32,110, 98,117,102, 61, 37/ + data (st0002(iyy),iyy=17,24) /100, 32,110,108,101,102,116, 61/ + data (st0002(iyy),iyy=25,32) / 37,100, 32, 98,117,102,102,101/ + data (st0002(iyy),iyy=33,40) /114, 61, 39, 37,115, 39, 10, 0/ + if (.not.(nbuf .eq. 0)) goto 110 + call aclrc (buffer, 2047) + nbuf = 0 + call xerpsh + n = xfread(fdin, messae, 2047) + if (xerflg) goto 122 + if (.not.(n .lt. 0)) goto 130 + ximred = (-2) + goto 100 +130 continue +122 if (.not.xerpop()) goto 120 + call xerret() + call zdojmp (ximjmp, 504 ) +120 continue + if (.not.(mode .eq. 2)) goto 140 + len = n * 2 + call achtbc (messae, messae, len) + goto 141 +140 continue + len = n +141 continue + call amovc (messae, buffer, len) + if (.not.(buffer(len) .eq. 0 .and. buffer(len-1) .eq. 0)) + * goto 150 + nbuf = len + goto 151 +150 continue + nbuf = len + 1 +151 continue + buffer(nbuf) = -2 +110 continue + i=1 +160 if (.not.(buffer(i) .ne. 0 .and. buffer(i) .ne. -2 .and. i .le. + * nbuf)) goto 162 + messae(i) = buffer(i) +161 i=i+1 + goto 160 +162 continue + messae(i) = 0 + len = i + nleft = nbuf - i + nr = nr + len + if (.not.(buffer(i) .eq. 0 .and. buffer(i+1) .eq. -2)) goto 170 + if (.not.(i .gt. 1 .and. nleft .gt. 1)) goto 180 + call amovc (buffer(i+1), buffer, nleft) +180 continue + nbuf = 0 + goto 171 +170 continue + if (.not.(nleft .gt. 0)) goto 190 + call amovc (buffer(i+1), buffer, nleft) +190 continue + nbuf = nleft +171 continue + if (.not.(.true.)) goto 200 + call eprinf (st0001) + call pargi(nr) + call pargi (len) + call pargsr(messae) + call eprinf (st0002) + call pargi (nbuf) + call pargi(nleft) + call pargsr(buffer) +200 continue + ximred = (nleft) + goto 100 +100 return + end + integer function ximinr () + external ximzxn + integer ximepa + integer ximstt + integer oldont + integer ximfd + integer ximjmp(64 ) + common /ximcom/ ximfd, ximjmp, ximepa, ximstt, oldont + save + call zlocpr (ximzxn, ximepa) + call xwhen (503 , ximepa, oldont) + call zsvjmp (ximjmp, ximstt) + if (.not.(ximstt .eq. 0)) goto 110 + ximinr = (0) + goto 100 +110 continue + ximinr = (-1) + goto 100 +111 continue +100 return + end + subroutine ximzxn (vex, nexthr) + integer vex + integer nexthr + integer ximepa + integer ximstt + integer oldont + integer ximfd + integer ximjmp(64 ) + common /ximcom/ ximfd, ximjmp, ximepa, ximstt, oldont + save + call ximdit (1) + call xerret() + call zdojmp (ximjmp, vex) +100 return + end + subroutine ximonr (status) + integer status + integer ximert + integer code + integer*2 buf(1023 +1) + integer*2 errmsg(1023 +1) + integer errget + integer ximepa + integer ximstt + integer oldont + integer ximfd + integer ximjmp(64 ) + common /ximecm/ ximert + common /ximcom/ ximfd, ximjmp, ximepa, ximstt, oldont + integer*2 st0001(25) + save + integer iyy + data (st0001(iyy),iyy= 1, 8) / 73, 83, 77, 32, 69,114,114,111/ + data (st0001(iyy),iyy= 9,16) /114, 44, 32, 99,111,100,101, 32/ + data (st0001(iyy),iyy=17,24) / 37,100, 58, 10, 96, 37,115, 39/ + data (st0001(iyy),iyy=25,25) / 0/ + if (.not.(status .ne. 0)) goto 110 + code = errget (errmsg, 1023 ) + call sprinf (buf, 1023 , st0001) + call pargi (status) + call pargsr (errmsg) + call ximalt (buf, 0, 0) + call ximdit (1) +110 continue +100 return + end +c ximonr xim_onerror +c sprinf sprintf +c onerrr onerror +c ximstt ximstat +c ximmee xim_message +c messae message +c ximcot xim_connect +c connet connect +c ximinr xim_intrhandler +c ximalt xim_alert +c oldont old_onint +c ximecm ximecom +c ximred xim_read +c ximjmp xim_jmp +c sendqt send_quit +c eprinf eprintf +c nexthr next_handler +c ximzxn xim_zxwhen +c xerret xer_reset +c ximdit xim_disconnect +c ximwre xim_write +c pargsr pargstr +c ximert xim_errstat diff --git a/vendor/x11iraf/ximtool/clients.old/lib/ximtool.x b/vendor/x11iraf/ximtool/clients.old/lib/ximtool.x new file mode 100644 index 00000000..dff5869c --- /dev/null +++ b/vendor/x11iraf/ximtool/clients.old/lib/ximtool.x @@ -0,0 +1,459 @@ +# Copyright(c) 1986 Association of Universities for Research in Astronomy Inc. + +include +include +include +include + + +# XIMTOOL.X -- Interface routines for client programs to connect to +# XImtool on the message bus. +# +# status = xim_connect (device, name, mode) +# status = xim_file_connect (infile, outfile, name) +# xim_disconnect (send_quit) +# xim_message (object, message) +# xim_alert (text, ok_action, cancel_action) +# +# xim_write (message, len) +# nremain = xim_read (message, len) +# +# Client programs should install an exception handler to first disconnect +# from the device before shutting down. The procedure xim_zxwhen() is +# provided for this purpose. + + +define XIM_DBG TRUE + +define SZ_MESSAGE 2047 + +define XIM_TEXT 1 +define XIM_BINARY 2 + + +# XIM_CONNECT -- Negotiate a connection on the named device. Once +# established we can begin sending and reading messages from the server. + +int procedure xim_connect (device, name, type) + +char device[ARB] #I socket to connect on +char name[ARB] #I module name +char type[ARB] #I requested connection mode + +pointer sp, cmsg, dev, buf +int msglen +char connect[SZ_FNAME] + +int ndopen(), reopen(), strlen() +int xim_read() +bool streq() + +extern xim_onerror() + +# I/O common. +int fdin, fdout, mode, nbuf, nr, nw +char buffer[SZ_MESSAGE] +common /ximfd/ fdin, fdout, mode, nbuf, buffer, nr, nw + +# Interrupt handler variables common. +int ximepa, ximstat, old_onint, xim_fd, xim_jmp[LEN_JUMPBUF] +common /ximcom/ xim_fd, xim_jmp, ximepa, ximstat, old_onint + +# Exception handler variables common. +int xim_errstat +data xim_errstat /OK/ +common /ximecom/ xim_errstat + +begin + call smark (sp) + call salloc (buf, SZ_LINE, TY_CHAR) + call salloc (cmsg, SZ_LINE, TY_CHAR) + call salloc (dev, SZ_FNAME, TY_CHAR) + + # Initialize. + call aclrc (Memc[buf], SZ_LINE) + call aclrc (Memc[cmsg], SZ_LINE) + call aclrc (Memc[dev], SZ_FNAME) + call aclrc (buffer, SZ_MESSAGE) + fdin = NULL + fdout = NULL + nbuf = 0 + nr = 0 + nw = 0 + + # Generate the device name. We assume the call was made with either + # a "unix:" or "inet:" prefix, so just append the type and set the + # mode. + + call sprintf (Memc[dev], SZ_FNAME, "%s:%s") + call pargstr (device) + call pargstr (type) + if (streq (type, "text")) + mode = XIM_TEXT + else + mode = XIM_BINARY + + # Open the initial connection + iferr (fdin = ndopen (Memc[dev], READ_WRITE)) { + call sfree (sp) + return (ERR) + } + fdout = reopen (fdin, READ_WRITE) + + # Send the connect request. + call sprintf (Memc[cmsg], SZ_LINE, "connect %s\0") + call pargstr (name) + msglen = strlen (Memc[cmsg]) + call xim_message ("ximtool", Memc[cmsg]) + + # Read the acknowledgement. + if (xim_read (Memc[buf], msglen) == EOF) { + call sfree (sp) + return (ERR) + } + + # Close the original socket. + call close (fdout) + call close (fdin) + + # Get the new device name. + call sprintf (connect, SZ_LINE, "unix:%s:%s\0") + call pargstr (Memc[buf+8]) + call pargstr (type) + + # Open the new channel. + iferr (fdin = ndopen (connect, READ_WRITE)) { + call sfree (sp) + return (ERR) + } + fdout = reopen (fdin, READ_WRITE) + + if (XIM_DBG) { + call eprintf ("Reconnected on '%s'\n"); call pargstr (connect) + } + + # Tell the server we're ready to begin. + call sprintf (Memc[cmsg], SZ_LINE, "ready %s\0") + call pargstr (name) + msglen = strlen (Memc[cmsg]) + call xim_message ("ximtool", Memc[cmsg]) + + + # Post the xim_onerror procedure to be executed upon process shutdown + # to issue a warning to the server in case we don't close normally. + + call onerror (xim_onerror) + + call sfree (sp) + return (OK) +end + + +# XIM_DISCONNECT -- Disconnect from the currect channel. + +procedure xim_disconnect (send_quit) + +int send_quit + +# I/O common. +int fdin, fdout, mode, nbuf, nr, nw +char buffer[SZ_MESSAGE] +common /ximfd/ fdin, fdout, mode, nbuf, buffer, nr, nw + +begin + # Send a QUIT message to the server so we shut down the connection. + if (send_quit == YES) + call xim_message ("ximtool", "quit") + + call flush (fdout) # Close the socket connection. + call close (fdin) + call close (fdout) + fdin = NULL + fdout = NULL +end + + +# XIM_MESSAGE -- Send a message to an XImtool named object. If the object +# is 'ximtool' then just pass the message directly without formatting it. + +procedure xim_message (object, message) + +char object[ARB] #I object name +char message[ARB] #I message to send + +pointer sp, msgbuf +int msglen, olen, mlen, ip + +int strlen() +bool streq() + +begin + # Get the message length plus some extra for the braces and padding. + olen = strlen (object) + mlen = strlen (message) + msglen = olen + mlen + 20 + + # Allocate and clear the message buffer. + call smark (sp) + call salloc (msgbuf, msglen, TY_CHAR) + call aclrc (Memc[msgbuf], msglen) + + if (streq (object, "ximtool")) { + # Just send the message. + call strcpy (message, Memc[msgbuf], msglen) + } else { + # Format the message. We can't use a sprintf here since the + # message may be bigger than that allowed by a pargstr(). + ip = 0 + call amovc ("send ", Memc[msgbuf+ip], 5) ; ip = ip + 5 + call amovc (object, Memc[msgbuf+ip], olen) ; ip = ip + olen + call amovc (" { ", Memc[msgbuf+ip], 3) ; ip = ip + 3 + call amovc (message, Memc[msgbuf+ip], mlen) ; ip = ip + mlen + call amovc (" }\0", Memc[msgbuf+ip], 2) ; ip = ip + 3 + } + msglen = strlen (Memc[msgbuf]) + + # Now send the message. The write routine does the strpak(). + call xim_write (Memc[msgbuf], msglen) + + call sfree (sp) +end + + +# XIM_ALERT -- Send an alert message to XImtool. + +procedure xim_alert (text, ok, cancel) + +char text[ARB] #I warning text +char ok[ARB] #i client OK message +char cancel[ARB] #i client CANCEL message + +pointer sp, msg + +begin + call smark (sp) + call salloc (msg, SZ_LINE, TY_CHAR) + + call sprintf (Memc[msg], SZ_LINE, "{%s} {%s} {%s}") + call pargstr (text) + call pargstr (ok) + call pargstr (cancel) + + call xim_message ("alert", Memc[msg]) + + call sfree (sp) +end + + +# XIM_WRITE -- Low-level write of a message to the socket. Writes exactly +# len bytes to the stream. + +procedure xim_write (message, len) + +char message[ARB] #I message to send +int len #I length of message + +int nleft, n, ip +char msgbuf[SZ_MESSAGE] +int strlen() + +# I/O common. +int fdin, fdout, mode, nbuf, nr, nw +char buffer[SZ_MESSAGE] +common /ximfd/ fdin, fdout, mode, nbuf, buffer, nr, nw + +errchk write, flush + +begin + # Pad message with a NULL to terminate it. + len = strlen (message) + 1 + message[len] = '\0' + + if (mod(len,2) == 1) { + len = len + 1 + message[len] = '\0' + } + + ip = 1 + nleft = len + while (nleft > 0) { + n = min (nleft, SZ_MESSAGE) + call amovc (message[ip], msgbuf, n) + if (mode == XIM_BINARY) { + call achtcb (msgbuf, msgbuf, n) + call write (fdout, msgbuf, n / SZB_CHAR) + } else + call write (fdout, msgbuf, n) + + ip = ip + n + nleft = nleft - n + } + nw = nw + len + call flush (fdout) + + if (XIM_DBG) { + call eprintf ("xim_write: '%.45s' len=%d mode=%d tot=%d\n") + call pargstr (message);call pargi (len) + call pargi (mode); call pargi (nw) + } +end + + +# XIM_READ -- Low-level read from the socket. + +int procedure xim_read (message, len) + +char message[ARB] #O message read +int len #O length of message + +int i, n, nleft, read() + +# I/O common. +int fdin, fdout, mode, nbuf, nr, nw +char buffer[SZ_MESSAGE] +common /ximfd/ fdin, fdout, mode, nbuf, buffer, nr, nw + +# Interrupt handler variables common. +int ximepa, ximstat, old_onint, xim_fd, xim_jmp[LEN_JUMPBUF] +common /ximcom/ xim_fd, xim_jmp, ximepa, ximstat, old_onint + +errchk read + +begin + # No data left in the buffer so read from the socket + if (nbuf == 0) { + call aclrc (buffer, SZ_MESSAGE) + nbuf = 0 + + iferr { + n = read (fdin, message, SZ_MESSAGE) + if (n < 0) + return (EOF) + } then { + call xer_reset() + call zdojmp (xim_jmp, X_IPC) + } + + if (mode == XIM_BINARY) { + len = n * SZB_CHAR + call achtbc (message, message, len) + } else + len = n + + # Save the data read to a local buffer. Remove any extra + # EOS padding and append an EOF on the string. + call amovc (message, buffer, len) + if (buffer[len] == EOS && buffer[len-1] == EOS) + nbuf = len + else + nbuf = len + 1 + buffer[nbuf] = EOF + } + + for (i=1; buffer[i] != EOS && buffer[i] != EOF && i <= nbuf; i=i+1) + message[i] = buffer[i] + message[i] = '\0' + len = i # length of the current message + nleft = nbuf - i # nchars left in the buffer + nr = nr + len + + if (buffer[i] == EOS && buffer[i+1] == EOF) { + # That was the last message, force a new read next time we're + # called. + if (i > 1 && nleft > 1) + call amovc (buffer[i+1], buffer, nleft) + nbuf = 0 + } else { + # More of the message is left in the buffer. + if (nleft > 0) + call amovc (buffer[i+1], buffer, nleft) + nbuf = nleft + } + + if (XIM_DBG) { + call eprintf ("xim_read: tot=%d len=%d/%d msg='%30.30s'\n") + call pargi(nr); call pargi (len) + call pargstr(message) + call eprintf ("xim_read: nbuf=%d nleft=%d buffer='%s'\n") + call pargi (nbuf); call pargi(nleft); call pargstr(buffer) + } + + #return (len) + return (nleft) +end + + +# XIM_INTRHANDLER -- User-callable interrupt handler so the ISM client code +# doesn't need to know about our internals. + +int procedure xim_intrhandler() + +extern xim_zxwhen() + +# Interrupt handler variables common. +int ximepa, ximstat, old_onint, xim_fd, xim_jmp[LEN_JUMPBUF] +common /ximcom/ xim_fd, xim_jmp, ximepa, ximstat, old_onint + +begin + call zlocpr (xim_zxwhen, ximepa) + call xwhen (X_INT, ximepa, old_onint) + call zsvjmp (xim_jmp, ximstat) + + if (ximstat == OK) + return (OK) + else + return (ERR) +end + + +# XIM_ZXWHEN -- Interrupt handler for the Ximtool client task. Branches back +# to ZSVJMP in the user routine to permit shutdown without an error message +# after first disconnecting from the socket. + +procedure xim_zxwhen (vex, next_handler) + +int vex # virtual exception +int next_handler # not used + +# Interrupt handler variables common. +int ximepa, ximstat, old_onint, xim_fd, xim_jmp[LEN_JUMPBUF] +common /ximcom/ xim_fd, xim_jmp, ximepa, ximstat, old_onint + +begin + call xim_disconnect (YES) + call xer_reset() + call zdojmp (xim_jmp, vex) +end + + +# XIM_ONERROR -- Error exit handler for the interface. If this is a normal exit +# the shut down quietly, otherwise notify the server. + +procedure xim_onerror (status) + +int status #i not used (req. for ONEXIT) + +# Exception handler variables common. +int xim_errstat +common /ximecom/ xim_errstat + +int code +char buf[SZ_LINE], errmsg[SZ_LINE] + +int errget() + +# Interrupt handler variables common. +int ximepa, ximstat, old_onint, xim_fd, xim_jmp[LEN_JUMPBUF] +common /ximcom/ xim_fd, xim_jmp, ximepa, ximstat, old_onint + +begin + if (status != OK) { + code = errget (errmsg, SZ_LINE) + call sprintf (buf, SZ_LINE, "ISM Error, code %d:\n`%s\'") + call pargi (status) + call pargstr (errmsg) + + call xim_alert (buf, NULL, NULL) + call xim_disconnect (YES) + } +end diff --git a/vendor/x11iraf/ximtool/clients.old/lib/zfiond.c b/vendor/x11iraf/ximtool/clients.old/lib/zfiond.c new file mode 100644 index 00000000..1ae65048 --- /dev/null +++ b/vendor/x11iraf/ximtool/clients.old/lib/zfiond.c @@ -0,0 +1,723 @@ +/* Copyright(c) 1986 Association of Universities for Research in Astronomy Inc. + */ + +#include +#include +#include +#include +#include +#include +#include +#include + +#ifdef LINUX +#include +#endif + +#include +#include + +#define import_kernel +#define import_knames +#define import_zfstat +#define import_spp +#include + +/* + * ZFIOND -- This driver provides a FIO-compatible interface to network or + * IPC streaming devices such as Berkeley sockets, FIFOs, and the like. + * Any connection-oriented stream type network interface can be supported. + * + * The type of connection desired is determined at device open time by the + * "filename" and file access mode arguments. The syntax for the filename + * argument is as follows: + * + * :
[ : is one of "inet" (internet tcp/ip socket), "unix" (unix + * domain socket) or "fifo" (named pipe). The form of the address depends + * upon the domain, as illustrated in the examples below. + * + * inet:5187 Server connection to port 5187 on the local + * host. For a client, a connection to the + * given port on the local host. + * + * inet:5187:foo.bar.edu Client connection to port 5187 on internet + * host foo.bar.edu. The dotted form of address + * may also be used. + * + * unix:/tmp/.IMT212 Unix domain socket with the given pathname + * IPC method, local host only. + * + * fifo:/dev/imt1i:/dev/imt1o FIFO or named pipe with the given pathname. + * IPC method, local host only. Two pathnames + * are required, one for input and one for + * output, since FIFOs are not bidirectional. + * For a client the first fifo listed will be + * the client's input fifo; for a server the + * first fifo will be the server's output fifo. + * This allows the same address to be used for + * both the client and the server, as for the + * other domains. + * + * The address field may contain up to two "%d" fields. If present, the + * user's UID will be substituted (e.g. "unix:/tmp/.IMT%d"). + * + * The only protocol flags currently supported are "text" and "binary". + * If "text" is specified the datastream is assumed to consist only of byte + * packed ascii text and is automatically converted by the driver to and + * from SPP chars during i/o. The default is binary i/o (no conversions). + * + * Client connections normally use mode READ_WRITE, although READ_ONLY and + * WRITE_ONLY are permitted. APPEND is the same as WRITE_ONLY. A server + * connection is indicated by the mode NEW_FILE. The endpoints of the server + * connection will be created if necessary. A client connection will timeout + * if no server responds. + * + * An INET or UNIX domain server connection will block indefinitely until a + * client connects. Since connections are synchronous only a single client + * can be supported. The server sees an EOF on the input stream when the + * client disconnects. + * + * FIFO domain connection are slightly different. When the server opens a FIFO + * connection the open returns immediately. When the server reads from the + * input fifo the server will block until some data is written to the fifo by a + * client. The server connection will remain open over multiple client + * connections until it is closed by the server. This is done to avoid a race + * condition that could otherwise occur at open time, with both the client and + * the server blocked waiting for an open on the opposite stream. + */ + +#define SZ_NAME 256 +#define SZ_OBUF 4096 +#define MAXCONN 5 +#define MAXSEL 32 + +#define INET 1 +#define UNIX 2 +#define FIFO 3 + +#define F_SERVER 00001 +#define F_DEL1 00002 +#define F_DEL2 00004 +#define F_TEXT 00010 + +/* Network portal descriptor. */ +struct portal { + int domain; + int flags; + int datain; + int dataout; + int keepalive; + char path1[SZ_NAME]; + char path2[SZ_NAME]; +}; + +#define get_desc(fd) ((struct portal *)zfd[fd].fp) +#define set_desc(fd,np) zfd[fd].fp = (FILE *)np +#define min(a,b) (((a)<(b))?(a):(b)) + +extern int errno; +static int getstr(); + + +/* ZOPNND -- Open a network device. + */ +ZOPNND (pk_osfn, mode, chan) +PKCHAR *pk_osfn; /* UNIX name of file */ +XINT *mode; /* file access mode */ +XINT *chan; /* file number (output) */ +{ + register int fd; + register struct portal *np; + unsigned short host_port; + unsigned long host_addr; + char osfn[SZ_NAME*2]; + char flag[SZ_NAME]; + char *ip; + + /* Get network device descriptor. */ + if (!(np = (struct portal *) calloc (1, sizeof(struct portal)))) { + *chan = XERR; + return; + } + + /* Expand any %d fields in the network address to the UID. */ + sprintf (osfn, (char *)pk_osfn, getuid(), getuid()); + + /* Parse the network filename to determine the domain type and + * network address. + */ + if (strncmp (osfn, "inet:", 5) == 0) { + /* Internet connection. + */ + char port_str[SZ_NAME]; + char host_str[SZ_NAME]; + unsigned short port; + struct servent *sv; + struct hostent *hp; + + /* Get port number. This may be specified either as a service + * name or as a decimal port number. + */ + ip = osfn + 5; + if (getstr (&ip, port_str, SZ_NAME) <= 0) + goto err; + if (isdigit (port_str[0])) { + port = atoi (port_str); + host_port = htons (port); + } else if (sv = getservbyname(port_str,"tcp")) { + host_port = sv->s_port; + } else + goto err; + + /* Get host address. This may be specified either has a host + * name or as an Internet address in dot notation. If no host + * name is specified default to the local host. + */ + if (getstr (&ip, host_str, SZ_NAME) <= 0) + strcpy (host_str, "localhost"); + if (isdigit (host_str[0])) { + host_addr = inet_addr (host_str); + if ((int)host_addr == -1) + goto err; + } else if (hp = gethostbyname(host_str)) { + bcopy (hp->h_addr, (char *)&host_addr, sizeof(host_addr)); + } else + goto err; + + np->domain = INET; + + } else if (strncmp (osfn, "unix:", 5) == 0) { + /* Unix domain socket connection. + */ + ip = osfn + 5; + if (!getstr (&ip, np->path1, SZ_NAME)) + goto err; + np->domain = UNIX; + + } else if (strncmp (osfn, "fifo:", 5) == 0) { + /* FIFO (named pipe) connection. + */ + ip = osfn + 5; + if (*mode == NEW_FILE) { + /* Server. */ + if (!getstr (&ip, np->path2, SZ_NAME)) + goto err; + if (!getstr (&ip, np->path1, SZ_NAME)) + goto err; + } else { + /* Client. */ + if (!getstr (&ip, np->path1, SZ_NAME)) + goto err; + if (!getstr (&ip, np->path2, SZ_NAME)) + goto err; + } + np->domain = FIFO; + + } else + goto err; + + /* Process any optional protocol flags. + */ + while (getstr (&ip, flag, SZ_NAME) > 0) { + /* Get content type (text or binary). If the stream will be used + * only for byte-packed character data the content type can be + * specified as "text" and data will be automatically packed and + * unpacked during i/o. + */ + if (strcmp (flag, "text") == 0) + np->flags |= F_TEXT; + if (strcmp (flag, "binary") == 0) + np->flags &= ~F_TEXT; + } + + /* Open the network connection. + */ + switch (*mode) { + case READ_ONLY: + /* Client side read only FIFO connection. */ + if (np->domain == FIFO) { + if ((fd = open (np->path1, O_RDONLY|O_NDELAY)) != ERR) + fcntl (fd, F_SETFL, O_RDONLY); + np->datain = fd; + np->dataout = -1; + break; + } + /* fall through */ + + case WRITE_ONLY: + case APPEND: + /* Client side write only FIFO connection. */ + if (np->domain == FIFO) { + if ((fd = open (np->path2, O_WRONLY|O_NDELAY)) != ERR) + fcntl (fd, F_SETFL, O_WRONLY); + np->datain = -1; + np->dataout = fd; + break; + } + /* fall through */ + + case READ_WRITE: + if (np->domain == INET) { + /* Client side Internet domain connection. */ + struct sockaddr_in sockaddr; + + /* Get socket. */ + if ((fd = socket (AF_INET, SOCK_STREAM, 0)) < 0) + goto err; + + /* Compose network address. */ + bzero ((char *)&sockaddr, sizeof(sockaddr)); + sockaddr.sin_family = AF_INET; + sockaddr.sin_port = host_port; + bcopy ((char *)&host_addr, (char *)&sockaddr.sin_addr, + sizeof(host_addr)); + + /* Connect to server. */ + if (fd >= MAXOFILES || connect (fd, + (struct sockaddr *)&sockaddr, sizeof(sockaddr)) < 0) { + close (fd); + fd = ERR; + } else { + np->datain = fd; + np->dataout = fd; + } + + } else if (np->domain == UNIX) { + /* Client side Unix domain socket connection. */ + struct sockaddr_un sockaddr; + + /* Get socket. */ + if ((fd = socket (AF_UNIX, SOCK_STREAM, 0)) < 0) + goto err; + + /* Compose network address. */ + bzero ((char *)&sockaddr, sizeof(sockaddr)); + sockaddr.sun_family = AF_UNIX; + strncpy (sockaddr.sun_path, + np->path1, sizeof(sockaddr.sun_path)); + + /* Connect to server. */ + if (fd >= MAXOFILES || connect (fd, + (struct sockaddr *)&sockaddr, sizeof(sockaddr)) < 0) { + close (fd); + fd = ERR; + } else { + np->datain = fd; + np->dataout = fd; + } + + } else if (np->domain == FIFO) { + /* Client side FIFO connection. */ + int fd1, fd2; + + /* Open the fifos. */ + if ((fd1 = open (np->path1, O_RDONLY|O_NDELAY)) != ERR) + fcntl (fd1, F_SETFL, O_RDONLY); + if ((fd2 = open (np->path2, O_WRONLY|O_NDELAY)) != ERR) + fcntl (fd2, F_SETFL, O_WRONLY); + + /* Clean up if there is an error. */ + if (fd1 < 0 || fd1 > MAXOFILES || fd2 < 0 || fd2 > MAXOFILES) { + if (fd1 > 0) + close (fd1); + if (fd2 > 0) + close (fd2); + fd = ERR; + } else { + np->datain = fd1; + np->dataout = fd2; + fd = fd1; + } + } else + goto err; + break; + + case NEW_FILE: + /* Connect to a client. */ + np->flags |= F_SERVER; + + if (np->domain == INET) { + /* Server side Internet domain connection. */ + struct sockaddr_in sockaddr; + int s, reuse=1; + + /* Get socket. */ + if ((s = socket (AF_INET, SOCK_STREAM, 0)) < 0) + goto err; + + /* Bind server port to socket. */ + bzero ((char *)&sockaddr, sizeof(sockaddr)); + sockaddr.sin_family = AF_INET; + sockaddr.sin_port = host_port; + sockaddr.sin_addr.s_addr = htonl(INADDR_ANY); + + if (setsockopt(s, SOL_SOCKET, SO_REUSEADDR, (char *)&reuse, + sizeof(reuse)) < 0) { + close (s); + goto err; + } + + if (bind (s, + (struct sockaddr *)&sockaddr, sizeof(sockaddr)) < 0) { + close (s); + goto err; + } + + /* Wait for client to connect. */ + if (listen (s, MAXCONN) < 0) { + close (s); + goto err; + } + if ((fd = accept (s, (struct sockaddr *)0, (int *)0)) < 0) { + close (s); + goto err; + } else + close (s); + + np->datain = fd; + np->dataout = fd; + + } else if (np->domain == UNIX) { + /* Server side Unix domain connection. */ + struct sockaddr_un sockaddr; + int addrlen, s; + + /* Get socket. */ + if ((s = socket (AF_UNIX, SOCK_STREAM, 0)) < 0) + goto err; + + /* Bind server port to socket. */ + bzero ((char *)&sockaddr, sizeof(sockaddr)); + sockaddr.sun_family = AF_UNIX; + strncpy (sockaddr.sun_path,np->path1,sizeof(sockaddr.sun_path)); + addrlen = sizeof(sockaddr) - sizeof(sockaddr.sun_path) + + strlen(np->path1); + + unlink (np->path1); + if (bind (s, (struct sockaddr *)&sockaddr, addrlen) < 0) { + close (s); + goto err; + } + + /* Wait for client to connect. */ + if (listen (s, MAXCONN) < 0) { + close (s); + goto err; + } + if ((fd = accept (s, (struct sockaddr *)0, (int *)0)) < 0) { + close (s); + goto err; + } else + close (s); + + np->datain = fd; + np->dataout = fd; + np->flags |= F_DEL1; + + } else if (np->domain == FIFO) { + /* Server side FIFO connection. */ + int fd1, fd2, keepalive; + + /* Create fifos if necessary. */ + if (access (np->path1, 0) < 0) { + if (mknod (np->path1, 010660, 0) < 0) + goto err; + else + np->flags |= F_DEL1; + } + if (access (np->path2, 0) < 0) { + if (mknod (np->path2, 010660, 0) < 0) { + unlink (np->path1); + goto err; + } else + np->flags |= F_DEL2; + } + + /* Open the output fifo (which is the client's input fifo). + * We have to open it ourselves first as a client to get + * around the fifo open-no-client error. + */ + if ((fd1 = open (np->path2, O_RDONLY|O_NDELAY)) != -1) { + if ((fd2 = open (np->path2, O_WRONLY|O_NDELAY)) != -1) + fcntl (fd2, F_SETFL, O_WRONLY); + close (fd1); + } + + /* Open the input fifo. */ + if ((fd1 = open (np->path1, O_RDONLY|O_NDELAY)) == -1) + fprintf (stderr, "Warning: cannot open %s\n", np->path1); + else { + /* Clear O_NDELAY for reading. */ + fcntl (fd1, F_SETFL, O_RDONLY); + + /* Open the client's output fifo as a pseudo-client to + * make it appear that a client is connected. + */ + keepalive = open (np->path1, O_WRONLY); + } + + /* Clean up if there is an error. */ + if (fd1 < 0 || fd1 > MAXOFILES || fd2 < 0 || fd2 > MAXOFILES) { + if (fd1 > 0) { + close (fd1); + close (keepalive); + } + if (fd2 > 0) + close (fd2); + fd = ERR; + } else { + np->datain = fd1; + np->dataout = fd2; + np->keepalive = keepalive; + fd = fd1; + } + + } else + goto err; + break; + + default: + fd = ERR; + } + + /* Initialize the kernel file descriptor. Seeks are illegal for a + * network device; network devices are "streaming" files (blksize=1) + * which can only be accessed sequentially. + */ + if ((*chan = fd) == ERR) { +err: free (np); + *chan = XERR; + } else if (fd >= MAXOFILES) { + free (np); + close (fd); + *chan = XERR; + } else { + zfd[fd].fp = NULL; + zfd[fd].fpos = 0L; + zfd[fd].nbytes = 0; + zfd[fd].flags = 0; + zfd[fd].filesize = 0; + set_desc(fd,np); + } +} + + +/* ZCLSND -- Close a network device. + */ +ZCLSND (fd, status) +XINT *fd; +XINT *status; +{ + register struct portal *np = get_desc(*fd); + register int flags; + + if (np) { + flags = np->flags; + + if (np->datain > 0) + close (np->datain); + if (np->dataout > 0 && np->dataout != np->datain) + close (np->dataout); + if (np->keepalive > 0) + close (np->keepalive); + + if (flags & F_DEL1) + unlink (np->path1); + if (flags & F_DEL2) + unlink (np->path2); + + free (np); + set_desc(*fd,NULL); + *status = XOK; + + } else + *status = XERR; +} + + +/* ZARDND -- "Asynchronous" binary block read. Initiate a read of at most + * maxbytes bytes from the file FD into the buffer BUF. Status is returned + * in a subsequent call to ZAWTND. + */ +ZARDND (chan, buf, maxbytes, offset) +XINT *chan; /* UNIX file number */ +XCHAR *buf; /* output buffer */ +XINT *maxbytes; /* max bytes to read */ +XLONG *offset; /* 1-indexed file offset to read at */ +{ + register int n; + int fd = *chan; + struct fiodes *kfp = &zfd[fd]; + register struct portal *np = get_desc (fd); + register char *ip; + register XCHAR *op; + int nbytes, maxread; + + /* Determine maximum amount of data to be read. */ + maxread = (np->flags & F_TEXT) ? *maxbytes/sizeof(XCHAR) : *maxbytes; + + /* The following call to select shouldn't be necessary, but it + * appears that, due to the way we open a FIFO with O_NDELAY, read + * can return zero if read is called before the process on the other + * end writes any data. This happens even though fcntl is called to + * restore blocking i/o after the open. + */ + if (np->domain == FIFO && np->datain < MAXSEL) { +#ifdef SOLARIS + fd_set readfds; + FD_ZERO (&readfds); + FD_SET (np->datain, &readfds); +#else + int readfds = (1 << np->datain); +#endif + select (MAXSEL, &readfds, NULL, NULL, NULL); + nbytes = read (np->datain, (char *)buf, maxread); + } else + nbytes = read (np->datain, (char *)buf, maxread); + + if ((n = nbytes) && (np->flags & F_TEXT)) { + op = (XCHAR *) buf; + op[n] = XEOS; + for (ip = (char *)buf; --n >= 0; ) + op[n] = ip[n]; + nbytes *= sizeof(XCHAR); + } + + kfp->nbytes = nbytes; +} + + +/* ZAWRND -- "Asynchronous" binary block write. Initiate a write of exactly + * nbytes bytes from the buffer BUF to the file FD. Status is returned in a + * subsequent call to ZAWTND. + */ +ZAWRND (chan, buf, nbytes, offset) +XINT *chan; /* UNIX file number */ +XCHAR *buf; /* buffer containing data */ +XINT *nbytes; /* nbytes to be written */ +XLONG *offset; /* 1-indexed file offset */ +{ + register int fd = *chan; + register struct fiodes *kfp = &zfd[fd]; + register struct portal *np = get_desc (fd); + int nwritten, maxbytes, n; + char *text, *ip = (char *)buf; + char obuf[SZ_OBUF]; + + maxbytes = (np->domain == FIFO || (np->flags & F_TEXT)) ? SZ_OBUF : 0; + for (nwritten=0; nwritten < *nbytes; nwritten += n, ip+=n) { + n = *nbytes - nwritten; + if (maxbytes) + n = min (maxbytes, n); + + if (np->flags & F_TEXT) { + register XCHAR *ipp = (XCHAR *)ip; + register char *op = (char *)obuf; + register int nbytes = n; + + while (--nbytes >= 0) + *op++ = *ipp++; + text = obuf; + if ((n = write (np->dataout, text, n / sizeof(XCHAR))) < 0) + break; + n *= sizeof(XCHAR); + + } else { + text = ip; + if ((n = write (np->dataout, text, n)) < 0) + break; + } + } + + kfp->nbytes = nwritten; +} + + +/* ZAWTND -- "Wait" for an "asynchronous" read or write to complete, and + * return the number of bytes read or written, or ERR. + */ +ZAWTND (fd, status) +XINT *fd; +XINT *status; +{ + if ((*status = zfd[*fd].nbytes) == ERR) + *status = XERR; +} + + +/* ZSTTND -- Return file status information for a network device. + */ +ZSTTND (fd, param, lvalue) +XINT *fd; +XINT *param; +XLONG *lvalue; +{ + register struct fiodes *kfp = &zfd[*fd]; + struct stat filstat; + + switch (*param) { + case FSTT_BLKSIZE: + (*lvalue) = 0L; + break; + + case FSTT_FILSIZE: + (*lvalue) = 0L; + break; + + case FSTT_OPTBUFSIZE: + /* On some systems this parameter may be device dependent in which + * case device dependent code should be substituted here. + */ + (*lvalue) = ND_OPTBUFSIZE; + break; + + case FSTT_MAXBUFSIZE: + /* On some systems this parameter may be device dependent in which + * case device dependent code should be substituted here. + */ + (*lvalue) = ND_MAXBUFSIZE; + break; + + default: + (*lvalue) = XERR; + break; + } +} + + +/* + * Internal routines. + * ---------------------------- + */ + +/* GETSTR -- Internal routine to extract a colon delimited string from a + * network filename. + */ +static int +getstr (ipp, obuf, maxch) +char **ipp; +char *obuf; +int maxch; +{ + register char *ip = *ipp, *op = obuf; + register char *otop = obuf + maxch; + char *start; + + while (isspace(*ip)) + ip++; + for (start=ip; *ip; ip++) { + if (*ip == ':') { + ip++; + break; + } else if (op && op < otop) + *op++ = *ip; + } + + if (op) + *op = '\0'; + *ipp = ip; + + return (ip - start); +} diff --git a/vendor/x11iraf/ximtool/clients.old/mkpkg b/vendor/x11iraf/ximtool/clients.old/mkpkg new file mode 100644 index 00000000..3b50a906 --- /dev/null +++ b/vendor/x11iraf/ximtool/clients.old/mkpkg @@ -0,0 +1,34 @@ +# Make the ISM Client tasks. + +$call relink +$exit + +update: + $call relink + $call install + ; + +relink: + $set LIBS = "-lslalib" + $update libpkg.a + $omake x_ism.x + $link -z x_ism.o libpkg.a -o ism_wcspix.e $(LIBS) + ; + +debug: + $set LIBS = "-lslalib" + $set XFLAGS = "$(XFLAGS) -xqF" + $update libpkg.a + $omake x_ism.x + $link -z -x x_ism.o libpkg.a -o ism_wcspix.e $(LIBS) + ; + +install: + $move ism_wcspix.e ../../bin/ism_wcspix.e + ; + + +libpkg.a: + @lib + @wcspix + ; diff --git a/vendor/x11iraf/ximtool/clients.old/wcspix/README b/vendor/x11iraf/ximtool/clients.old/wcspix/README new file mode 100644 index 00000000..e69de29b diff --git a/vendor/x11iraf/ximtool/clients.old/wcspix/class.com b/vendor/x11iraf/ximtool/clients.old/wcspix/class.com new file mode 100644 index 00000000..c6116c11 --- /dev/null +++ b/vendor/x11iraf/ximtool/clients.old/wcspix/class.com @@ -0,0 +1,6 @@ +# Class common. +int cl_nclass # number of defined functions +int cl_table[LEN_CLASS,MAX_CLASSES] # class table +char cl_names[SZ_CLNAME,MAX_CLASSES] # class names +common /class_com/ cl_nclass, cl_table, cl_names + diff --git a/vendor/x11iraf/ximtool/clients.old/wcspix/mkpkg b/vendor/x11iraf/ximtool/clients.old/wcspix/mkpkg new file mode 100644 index 00000000..baa3b090 --- /dev/null +++ b/vendor/x11iraf/ximtool/clients.old/wcspix/mkpkg @@ -0,0 +1,15 @@ +# Make the WCSPIX ISM Client task. + +$checkout libpkg.a ../ +$update libpkg.a +$checkin libpkg.a ../ +$exit + +libpkg.a: + t_wcspix.x wcspix.h class.com + wcimage.x wcspix.h + wcmef.x wcspix.h + wcmspec.x wcspix.h + wcunknown.x wcspix.h + ; + diff --git a/vendor/x11iraf/ximtool/clients.old/wcspix/t_wcspix.f b/vendor/x11iraf/ximtool/clients.old/wcspix/t_wcspix.f new file mode 100644 index 00000000..a1fce8a5 --- /dev/null +++ b/vendor/x11iraf/ximtool/clients.old/wcspix/t_wcspix.f @@ -0,0 +1,1124 @@ + subroutine twcspx () + logical Memb(1) + integer*2 Memc(1) + integer*2 Mems(1) + integer Memi(1) + integer*4 Meml(1) + real Memr(1) + double precision Memd(1) + complex Memx(1) + equivalence (Memb, Memc, Mems, Memi, Meml, Memr, Memd, Memx) + common /Mem/ Memd + integer wp + integer len + integer discot + integer ncmd + integer*2 socket(255 +1) + integer*2 cmd(255 +1) + integer*2 messae(1023 +1) + integer*2 buf(12 +1) + integer objid + integer regid + real x + real y + integer*2 ref(255 +1) + integer*2 temple(1023 +1) + integer*2 param(255 +1) + logical debug + integer*4 clktie + integer wpinit + integer envges + integer envgei + integer strdic + integer ximcot + integer wpread + integer ximinr + logical xerpop + logical xerflg + common /xercom/ xerflg + integer sw0001 + integer*2 st0001(7) + integer*2 st0002(17) + integer*2 st0003(7) + integer*2 st0004(5) + integer*2 st0005(13) + integer*2 st0006(28) + integer*2 st0007(8) + integer*2 st0008(22) + integer*2 st0009(73) + integer*2 st0010(31) + integer*2 st0011(35) + integer*2 st0012(41) + integer*2 st0013(8) + integer*2 st0014(16) + integer*2 st0015(38) + integer*2 st0016(8) + integer*2 st0017(25) + integer*2 st0018(16) + integer*2 st0019(27) + integer*2 st0020(30) + save + integer iyy + data st0001 / 73, 83, 77, 68, 69, 86, 0/ + data (st0002(iyy),iyy= 1, 8) /117,110,105,120, 58, 47,116,109/ + data (st0002(iyy),iyy= 9,16) /112, 47, 46, 73, 83, 77, 37,100/ + data (st0002(iyy),iyy=17,17) / 0/ + data st0003 /119, 99,115,112,105,120, 0/ + data st0004 /116,101,120,116, 0/ + data (st0005(iyy),iyy= 1, 8) / 87, 67, 83, 80, 73, 88, 95, 68/ + data (st0005(iyy),iyy= 9,13) / 69, 66, 85, 71, 0/ + data (st0006(iyy),iyy= 1, 8) /105,110,102,111, 32,123, 32, 37/ + data (st0006(iyy),iyy= 9,16) /115, 58, 32, 87, 67, 83, 80, 73/ + data (st0006(iyy),iyy=17,24) / 88, 32, 67,111,110,110,101, 99/ + data (st0006(iyy),iyy=25,28) /116,125, 10, 0/ + data st0007 /105,115,109, 95,109,115,103, 0/ + data (st0008(iyy),iyy= 1, 8) /109,101,115,115, 97,103,101, 58/ + data (st0008(iyy),iyy= 9,16) / 32, 39, 37,115, 39, 32,108,101/ + data (st0008(iyy),iyy=17,22) /110, 61, 37,100, 10, 0/ + data (st0009(iyy),iyy= 1, 8) /124,115,101,116,124,103,101,116/ + data (st0009(iyy),iyy= 9,16) /124,113,117,105,116,124,105,110/ + data (st0009(iyy),iyy=17,24) /105,116,105, 97,108,105,122,101/ + data (st0009(iyy),iyy=25,32) /124, 99, 97, 99,104,101,124,117/ + data (st0009(iyy),iyy=33,40) /110, 99, 97, 99,104,101, 9, 9/ + data (st0009(iyy),iyy=41,48) / 9, 32,124,119, 99,115,116,114/ + data (st0009(iyy),iyy=49,56) / 97,110,124,119, 99,115,108,105/ + data (st0009(iyy),iyy=57,64) /115,116,124,111, 98,106,105,110/ + data (st0009(iyy),iyy=65,72) /102,111,124,100,101, 98,117,103/ + data (st0009(iyy),iyy=73,73) / 0/ + data (st0010(iyy),iyy= 1, 8) /105,110,102,111, 32,123, 32, 37/ + data (st0010(iyy),iyy= 9,16) /115, 58, 32, 87, 67, 83, 80, 73/ + data (st0010(iyy),iyy=17,24) / 88, 32, 73,110,105,116,105, 97/ + data (st0010(iyy),iyy=25,31) /108,105,122,101,125, 10, 0/ + data (st0011(iyy),iyy= 1, 8) / 99, 97, 99,104,101, 58, 32,111/ + data (st0011(iyy),iyy= 9,16) / 98,106,105,100, 61, 37,100, 32/ + data (st0011(iyy),iyy=17,24) /114,101,103,105,100, 61, 37,100/ + data (st0011(iyy),iyy=25,32) / 32,114,101,102, 61, 39, 37,115/ + data (st0011(iyy),iyy=33,35) / 39, 10, 0/ + data (st0012(iyy),iyy= 1, 8) /105,110,102,111, 32,123, 32, 37/ + data (st0012(iyy),iyy= 9,16) /115, 58, 32, 87, 67, 83, 80, 73/ + data (st0012(iyy),iyy=17,24) / 88, 32, 67, 97, 99,104,101, 32/ + data (st0012(iyy),iyy=25,32) / 32, 32,111, 98,106,105,100, 61/ + data (st0012(iyy),iyy=33,40) / 37, 51,100, 32, 37,115,125, 10/ + data (st0012(iyy),iyy=41,41) / 0/ + data st0013 /105,115,109, 95,109,115,103, 0/ + data (st0014(iyy),iyy= 1, 8) /117,110, 99, 97, 99,104,101, 58/ + data (st0014(iyy),iyy= 9,16) / 32,105,100, 61, 37,100, 10, 0/ + data (st0015(iyy),iyy= 1, 8) /105,110,102,111, 32,123, 32, 37/ + data (st0015(iyy),iyy= 9,16) /115, 58, 32, 87, 67, 83, 80, 73/ + data (st0015(iyy),iyy=17,24) / 88, 32, 85,110, 99, 97, 99,104/ + data (st0015(iyy),iyy=25,32) /101, 32,111, 98,106,105,100, 61/ + data (st0015(iyy),iyy=33,38) / 37, 51,100,125, 10, 0/ + data st0016 /105,115,109, 95,109,115,103, 0/ + data (st0017(iyy),iyy= 1, 8) /119, 99,115,116,114, 97,110, 58/ + data (st0017(iyy),iyy= 9,16) / 32,105,100, 61, 37,100, 32, 32/ + data (st0017(iyy),iyy=17,24) / 40, 37,103, 44, 37,103, 41, 10/ + data (st0017(iyy),iyy=25,25) / 0/ + data (st0018(iyy),iyy= 1, 8) /119, 99,115,108,105,115,116, 58/ + data (st0018(iyy),iyy= 9,16) / 32,105,100, 61, 37,100, 10, 0/ + data (st0019(iyy),iyy= 1, 8) /111, 98,106,105,110,102,111, 58/ + data (st0019(iyy),iyy= 9,16) / 32,105,100, 61, 37,100, 32, 32/ + data (st0019(iyy),iyy=17,24) /116,101,109,112, 61, 39, 37,115/ + data (st0019(iyy),iyy=25,27) / 39, 10, 0/ + data (st0020(iyy),iyy= 1, 8) / 73, 83, 77, 32,100,101,102, 97/ + data (st0020(iyy),iyy= 9,16) /117,108,116, 58, 32,108,101,110/ + data (st0020(iyy),iyy=17,24) / 61, 37,100, 32,109,115,103, 61/ + data (st0020(iyy),iyy=25,30) / 39, 37,115, 39, 10, 0/ + call aclrc (messae, 1023 ) + call aclrc (cmd, 255 ) + call aclrc (socket, 255 ) + if (.not.(envges (st0001, socket, 255 ) .le. 0).and.(.not. + * xerflg)) goto 110 + if (xerflg) goto 100 + call xstrcy(st0002, socket, 255 ) +110 continue + if (.not.(ximcot (socket, st0003, st0004) .eq. -1)) goto 120 + goto 100 +120 continue + if (.not.(ximinr() .eq. -1)) goto 130 + goto 100 +130 continue + wp = wpinit () + call xerpsh + memi(wp+6) = envgei (st0005) + if (.not.xerpop()) goto 140 + memi(wp+6) = 0 +140 continue + call wpcnve (clktie(0), buf, 12 ) + call sprinf (messae, 1023 , st0006) + call pargsr (buf) + call ximmee (st0007, messae) + discot = 1 + debug = (.false. .or. memi(wp+6) .gt. 0) +150 if (.not.(wpread (messae, len) .ne. -2).and.(.not.xerflg)) goto + * 151 + if (xerflg) goto 100 + if (.not.(debug)) goto 160 + call eprinf(st0008) + call pargsr (messae) + call pargi (len) +160 continue + if (.not.(len .le. 0)) goto 170 + discot = 0 + goto 151 +170 continue + call sscan (messae) + call gargwd (cmd, 1023 ) + ncmd = strdic (cmd, cmd, 1023 , st0009) + sw0001=(ncmd) + goto 180 +190 continue + discot = 0 + goto 151 +200 continue + call wpcnve (clktie(0), buf, 12 ) + call sprinf (messae, 1023 , st0010) + call pargsr (buf) + call wpinie (wp) + goto 181 +210 continue + call gargwd (ref, 255 ) + call gargi (objid) + call gargi (regid) + if (.not.(debug)) goto 220 + call xprinf(st0011) + call pargi(objid) + call pargi(regid) + call pargsr(ref) +220 continue + call wpcnve (clktie(0), buf, 12 ) + call sprinf (messae, 1023 , st0012) + call pargsr (buf) + call pargi (objid) + call pargsr (ref) + call ximmee (st0013, messae) + call wpcace (wp, objid, regid, ref) + goto 181 +230 continue + call gargi (objid) + if (.not.(debug)) goto 240 + call xprinf(st0014) + call pargi(objid) +240 continue + call wpcnve (clktie(0), buf, 12 ) + call sprinf (messae, 1023 , st0015) + call pargsr (buf) + call pargi (objid) + call ximmee (st0016, messae) + call wpunce (wp, objid) + goto 181 +250 continue + call gargi (objid) + call gargr (x) + call gargr (y) + if (.not.(debug)) goto 260 + call xprinf(st0017) + call pargi(objid) + call pargr (x) + call pargr (y) +260 continue + call wpwcsn (wp, objid, x, y) + goto 181 +270 continue + call gargi (objid) + if (.not.(debug)) goto 280 + call xprinf(st0018) + call pargi(objid) +280 continue + call wpwcst (wp, objid) + goto 181 +290 continue + call gargi (objid) + call gargwd (temple, 255 ) + if (.not.(debug)) goto 300 + call xprinf(st0019) + call pargi(objid) + call pargsr (temple) +300 continue + call wpobjo (wp, objid, temple) + goto 181 +310 continue + call gargwd (param, 255 ) + call wpsetr (wp, param) + goto 181 +320 continue + goto 181 +330 continue + debug = .not.(debug) + goto 181 +340 continue + if (.not.(debug)) goto 350 + call eprinf (st0020) + call pargi(len) + call pargsr(messae) +350 continue + goto 181 +180 continue + if (sw0001.lt.1.or.sw0001.gt.10) goto 340 + goto (310,320,190,200,210,230,250,270,290,330),sw0001 +181 continue + call aclrc (messae, 1023 ) + goto 150 +151 continue + call ximdit (discot) + call wpshun (wp) +100 return + end + subroutine wpinie (wp) + logical Memb(1) + integer*2 Memc(1) + integer*2 Mems(1) + integer Memi(1) + integer*4 Meml(1) + real Memr(1) + double precision Memd(1) + complex Memx(1) + equivalence (Memb, Memc, Mems, Memi, Meml, Memr, Memd, Memx) + common /Mem/ Memd + integer wp + integer cp + integer wpid2j + integer i + save + i=0 +110 if (.not.(i .lt. 256 )) goto 112 + cp = wpid2j (wp, i) + if (.not.(cp .ne. 0 .and. memi(cp) .ne. 0)) goto 120 + call wpunce (wp, memi(cp) ) +120 continue +111 i=i+1 + goto 110 +112 continue +100 return + end + subroutine wpcace (wp, objid, regid, ref) + logical Memb(1) + integer*2 Memc(1) + integer*2 Mems(1) + integer Memi(1) + integer*4 Meml(1) + real Memr(1) + double precision Memd(1) + complex Memx(1) + equivalence (Memb, Memc, Mems, Memi, Meml, Memr, Memd, Memx) + common /Mem/ Memd + integer wp + integer objid + integer regid + integer*2 ref(*) + integer cp + integer i + integer class + integer*2 alert(255 +1) + integer wpclas + integer clncls + integer cltabe(6 ,16 ) + integer*2 clnams(32 +1,16 ) + common /classm/ clncls, cltabe, clnams + integer*2 st0001(29) + integer*2 st0002(1) + integer*2 st0003(1) + save + integer iyy + data (st0001(iyy),iyy= 1, 8) /119,112, 95, 99, 97, 99,104,101/ + data (st0001(iyy),iyy= 9,16) / 58, 32, 85,110, 97, 98,108,101/ + data (st0001(iyy),iyy=17,24) / 32,116,111, 32, 99, 97, 99,104/ + data (st0001(iyy),iyy=25,29) /101, 10, 37,115, 0/ + data st0002 / 0/ + data st0003 / 0/ + i=0 +110 if (.not.(i .lt. 256 )) goto 112 + cp = memi(memi(wp ) +i) + if (.not.(memi(cp+4) .eq. 0)) goto 120 + goto 112 +120 continue +111 i=i+1 + goto 110 +112 continue + class = wpclas (ref) + if (.not.(class .eq. -1)) goto 130 + call sprinf (alert, 255 , st0001) + call pargsr (ref) + call ximalt (alert, st0002, st0003) + goto 100 +130 continue + memi(cp+2) = class + if (.not.(class .ne. 0 .and. cltabe(1,class) .ne. 0)) goto 140 + call zcall2 (cltabe(1,class) , cp, wp) +140 continue + if (.not.(class .ne. 0 .and. cltabe(2,class) .ne. 0)) goto 150 + call zcall4 (cltabe(2,class) , cp, objid, regid, ref) +150 continue +100 return + end + subroutine wpunce (wp, id) + logical Memb(1) + integer*2 Memc(1) + integer*2 Mems(1) + integer Memi(1) + integer*4 Meml(1) + real Memr(1) + double precision Memd(1) + complex Memx(1) + equivalence (Memb, Memc, Mems, Memi, Meml, Memr, Memd, Memx) + common /Mem/ Memd + integer wp + integer id + integer cp + integer wpid2j + integer class + integer clncls + integer cltabe(6 ,16 ) + integer*2 clnams(32 +1,16 ) + common /classm/ clncls, cltabe, clnams + save + cp = wpid2j (wp, id) + if (.not.(cp .eq. 0)) goto 110 + goto 100 +110 continue + class = memi(cp+2) + if (.not.(class .ne. 0 .and. cltabe(3,class) .ne. 0)) goto 120 + call zcall2 (cltabe(3,class) , cp, id) +120 continue + memi(cp+4) = 0 +100 return + end + subroutine wpwcsn (wp, id, x, y) + logical Memb(1) + integer*2 Memc(1) + integer*2 Mems(1) + integer Memi(1) + integer*4 Meml(1) + real Memr(1) + double precision Memd(1) + complex Memx(1) + equivalence (Memb, Memc, Mems, Memi, Meml, Memr, Memd, Memx) + common /Mem/ Memd + integer wp + integer id + real x + real y + integer cp + integer wpid2j + integer class + integer clncls + integer cltabe(6 ,16 ) + integer*2 clnams(32 +1,16 ) + common /classm/ clncls, cltabe, clnams + save + cp = wpid2j (wp, id) + if (.not.(cp .eq. 0)) goto 110 + goto 100 +110 continue + class = memi(cp+2) + if (.not.(class .ne. 0 .and. cltabe(4,class) .ne. 0)) goto 120 + call zcall4 (cltabe(4,class) , cp, id, x, y) +120 continue +100 return + end + subroutine wpwcst (wp, id) + logical Memb(1) + integer*2 Memc(1) + integer*2 Mems(1) + integer Memi(1) + integer*4 Meml(1) + real Memr(1) + double precision Memd(1) + complex Memx(1) + equivalence (Memb, Memc, Mems, Memi, Meml, Memr, Memd, Memx) + common /Mem/ Memd + integer wp + integer id + integer cp + integer wpid2j + integer class + integer clncls + integer cltabe(6 ,16 ) + integer*2 clnams(32 +1,16 ) + common /classm/ clncls, cltabe, clnams + save + cp = wpid2j (wp, id) + if (.not.(cp .eq. 0)) goto 110 + goto 100 +110 continue + class = memi(cp+2) + if (.not.(class .ne. 0 .and. cltabe(5,class) .ne. 0)) goto 120 + call zcall2 (cltabe(5,class) , cp, id) +120 continue +100 return + end + subroutine wpobjo (wp, id, temple) + logical Memb(1) + integer*2 Memc(1) + integer*2 Mems(1) + integer Memi(1) + integer*4 Meml(1) + real Memr(1) + double precision Memd(1) + complex Memx(1) + equivalence (Memb, Memc, Mems, Memi, Meml, Memr, Memd, Memx) + common /Mem/ Memd + integer wp + integer id + integer*2 temple(*) + integer cp + integer wpid2j + integer class + integer clncls + integer cltabe(6 ,16 ) + integer*2 clnams(32 +1,16 ) + common /classm/ clncls, cltabe, clnams + save + cp = wpid2j (wp, id) + if (.not.(cp .eq. 0)) goto 110 + goto 100 +110 continue + class = memi(cp+2) + if (.not.(class .ne. 0 .and. cltabe(6,class) .ne. 0)) goto 120 + call zcall3 (cltabe(6,class) , cp, id, temple) +120 continue +100 return + end + subroutine wpsetr (wp, param) + logical Memb(1) + integer*2 Memc(1) + integer*2 Mems(1) + integer Memi(1) + integer*4 Meml(1) + real Memr(1) + double precision Memd(1) + complex Memx(1) + equivalence (Memb, Memc, Mems, Memi, Meml, Memr, Memd, Memx) + common /Mem/ Memd + integer wp + integer*2 param(255 +1) + integer*2 arg(32 +1) + integer*2 buf(32 +1) + integer*2 msg(32 +1) + integer line + integer strdic + integer clncls + integer cltabe(6 ,16 ) + integer*2 clnams(32 +1,16 ) + integer sw0001,sw0002,sw0003 + common /classm/ clncls, cltabe, clnams + integer*2 st0001(11) + integer*2 st0002(23) + integer*2 st0003(4) + integer*2 st0004(4) + integer*2 st0005(66) + integer*2 st0006(12) + integer*2 st0007(14) + integer*2 st0008(30) + integer*2 st0009(12) + integer*2 st0010(13) + save + integer iyy + data (st0001(iyy),iyy= 1, 8) /115,101,116, 58, 32, 37,115, 32/ + data (st0001(iyy),iyy= 9,11) / 61, 32, 0/ + data (st0002(iyy),iyy= 1, 8) /124,112,115,105,122,101,124, 98/ + data (st0002(iyy),iyy= 9,16) /112,109,124,119, 99,115,124,102/ + data (st0002(iyy),iyy=17,23) /111,114,109, 97,116,124, 0/ + data st0003 / 37,100, 10, 0/ + data st0004 / 37,100, 10, 0/ + data (st0005(iyy),iyy= 1, 8) /124,110,111,110,101,124,108,111/ + data (st0005(iyy),iyy= 9,16) /103,105, 99, 97,108,124,112,104/ + data (st0005(iyy),iyy=17,24) /121,115,105, 99, 97,108,124,119/ + data (st0005(iyy),iyy=25,32) /111,114,108,100,124,115,107,121/ + data (st0005(iyy),iyy=33,40) / 9, 9, 9,124, 97,109,112,108/ + data (st0005(iyy),iyy=41,48) /105,102,105,101,114,124, 99, 99/ + data (st0005(iyy),iyy=49,56) /100,124,100,101,116,101, 99,116/ + data (st0005(iyy),iyy=57,64) /111,114,124,111,116,104,101,114/ + data (st0005(iyy),iyy=65,66) /124, 0/ + data (st0006(iyy),iyy= 1, 8) / 37,115, 32,108,105,110,101, 61/ + data (st0006(iyy),iyy= 9,12) / 37,100, 10, 0/ + data (st0007(iyy),iyy= 1, 8) /119, 99,115,116,121,112,101, 32/ + data (st0007(iyy),iyy= 9,14) / 37,115, 32, 37,100, 0/ + data (st0008(iyy),iyy= 1, 8) /124,100,101,102, 97,117,108,116/ + data (st0008(iyy),iyy= 9,16) /124,104,109,115,124,100,101,103/ + data (st0008(iyy),iyy=17,24) /114,101,101,115,124,114, 97,100/ + data (st0008(iyy),iyy=25,30) /105, 97,110,115,124, 0/ + data (st0009(iyy),iyy= 1, 8) / 37,115, 32,108,105,110,101, 61/ + data (st0009(iyy),iyy= 9,12) / 37,100, 10, 0/ + data (st0010(iyy),iyy= 1, 8) /119, 99,115,102,109,116, 32, 37/ + data (st0010(iyy),iyy= 9,13) /115, 32, 37,100, 0/ + if (.not.(.false.)) goto 110 + call xprinf(st0001) + call pargsr(param) +110 continue + sw0001=(strdic (param, param, 32 , st0002)) + goto 120 +130 continue + call gargi (memi(wp+1) ) + if (.not.(.false.)) goto 140 + call xprinf(st0003) + call pargi(memi(wp+1) ) +140 continue + goto 121 +150 continue + call gargi (memi(wp+2) ) + if (.not.(.false.)) goto 160 + call xprinf(st0004) + call pargi(memi(wp+2) ) +160 continue + goto 121 +170 continue + call gargwd (buf, 255 ) + call gargi (line) + call xstrcy(buf, arg, 32 ) + call strlwr (buf) + sw0002=(strdic (buf, buf, 255 , st0005)) + goto 180 +190 continue + memi(memi(wp+3) +line-1) = 2 + goto 181 +200 continue + memi(memi(wp+3) +line-1) = 3 + goto 181 +210 continue + memi(memi(wp+3) +line-1) = 4 + goto 181 +220 continue + memi(memi(wp+3) +line-1) = 1 + goto 181 +230 continue + memi(memi(wp+3) +line-1) = 6 + goto 181 +240 continue + memi(memi(wp+3) +line-1) = 3 + goto 181 +250 continue + memi(memi(wp+3) +line-1) = 8 + goto 181 +260 continue + memi(memi(wp+3) +line-1) = 5 + goto 181 +180 continue + if (sw0002.lt.1.or.sw0002.gt.8) goto 260 + goto (220,190,200,210,260,230,240,250),sw0002 +181 continue + call xstrcy(buf, memc(memi(wp+4) +(32 *(line-1))), 32 ) + if (.not.(.false.)) goto 270 + call xprinf(st0006) + call pargsr(buf) + call pargi(line) +270 continue + call sprinf (msg, 255 , st0007) + call pargsr (arg) + call pargi (line) + call wcspie (msg) + goto 121 +280 continue + call gargwd (buf, 255 ) + call gargi (line) + call xstrcy(buf, arg, 32 ) + call strlwr (buf) + sw0003=(strdic (buf, buf, 255 , st0008)) + goto 290 +300 continue + memi(memi(wp+5) +line-1) = 1 + goto 291 +310 continue + memi(memi(wp+5) +line-1) = 2 + goto 291 +320 continue + memi(memi(wp+5) +line-1) = 3 + goto 291 +330 continue + memi(memi(wp+5) +line-1) = 4 + goto 291 +340 continue + memi(memi(wp+5) +line-1) = 1 + goto 291 +290 continue + if (sw0003.lt.1.or.sw0003.gt.4) goto 340 + goto (300,310,320,330),sw0003 +291 continue + if (.not.(.false.)) goto 350 + call xprinf(st0009) + call pargsr(buf) + call pargi(line) +350 continue + call sprinf (msg, 255 , st0010) + call pargsr (arg) + call pargi (line) + call wcspie (msg) + goto 121 +120 continue + if (sw0001.lt.1.or.sw0001.gt.4) goto 121 + goto (130,150,170,280),sw0001 +121 continue +100 return + end + subroutine wpgetr (wp, param) + logical Memb(1) + integer*2 Memc(1) + integer*2 Mems(1) + integer Memi(1) + integer*4 Meml(1) + real Memr(1) + double precision Memd(1) + complex Memx(1) + equivalence (Memb, Memc, Mems, Memi, Meml, Memr, Memd, Memx) + common /Mem/ Memd + integer wp + integer*2 param(255 +1) + integer strdic + integer sw0001 + integer*2 st0001(11) + integer*2 st0002(23) + save + integer iyy + data (st0001(iyy),iyy= 1, 8) /115,101,116, 58, 32, 37,115, 32/ + data (st0001(iyy),iyy= 9,11) / 61, 32, 0/ + data (st0002(iyy),iyy= 1, 8) /124,112,115,105,122,101,124, 98/ + data (st0002(iyy),iyy= 9,16) /112,109,124,119, 99,115,124,102/ + data (st0002(iyy),iyy=17,23) /111,114,109, 97,116,124, 0/ + if (.not.(.false.)) goto 110 + call xprinf(st0001) + call pargsr(param) +110 continue + sw0001=(strdic (param, param, 32 , st0002)) + goto 120 +130 continue + goto 121 +140 continue + goto 121 +150 continue + goto 121 +160 continue + goto 121 +120 continue + if (sw0001.lt.1.or.sw0001.gt.4) goto 121 + goto (130,140,150,160),sw0001 +121 continue +100 return + end + integer function wpinit () + logical Memb(1) + integer*2 Memc(1) + integer*2 Mems(1) + integer Memi(1) + integer*4 Meml(1) + real Memr(1) + double precision Memd(1) + complex Memx(1) + equivalence (Memb, Memc, Mems, Memi, Meml, Memr, Memd, Memx) + common /Mem/ Memd + integer wp + integer i + logical xerpop + logical xerflg + common /xercom/ xerflg + integer*2 st0001(37) + integer*2 st0002(5) + save + integer iyy + data (st0001(iyy),iyy= 1, 8) / 69,114,114,111,114, 32,111,112/ + data (st0001(iyy),iyy= 9,16) /101,110,105,110,103, 32, 87, 67/ + data (st0001(iyy),iyy=17,24) / 83, 80, 73, 88, 32,116, 97,115/ + data (st0001(iyy),iyy=25,32) /107, 32,115,116,114,117, 99,116/ + data (st0001(iyy),iyy=33,37) /117,114,101, 46, 0/ + data st0002 /110,111,110,101, 0/ + call xerpsh + call xcallc(wp, 7, 10 ) + if (.not.xerpop()) goto 110 + call xerror(0, st0001) + if (xerflg) goto 100 +110 continue + call xcallc(memi(wp+3) , 4 , 4) + call xcallc(memi(wp+5) , 4 , 4) + call xcallc(memi(wp+4) , (32 *4 ), 2) + i=1 +120 if (.not.(i .le. 4 )) goto 122 + memi(memi(wp+5) +i-1) = 1 + memi(memi(wp+3) +i-1) = 2 + call xstrcy(st0002, memc(memi(wp+4) +(32 *(i-1))), 32 ) +121 i=i+1 + goto 120 +122 continue + call xcallc(memi(wp ) , 256 , 10 ) + i=0 +130 if (.not.(i .lt. 256 )) goto 132 + call xcallc(memi(memi(wp ) +i) , 135 , 10 ) +131 i=i+1 + goto 130 +132 continue + memi(wp+1) = 0 + memi(wp+2) = 1 + call wpclat() + wpinit = (wp) + goto 100 +100 return + end + integer function wpread (messae, len) + integer len + integer*2 messae(*) + integer nread + integer ximred + logical xerflg + common /xercom/ xerflg + save + nread = ximred (messae, len) + if (xerflg) goto 100 + wpread = (nread) + goto 100 +100 return + end + subroutine wpshun (wp) + logical Memb(1) + integer*2 Memc(1) + integer*2 Mems(1) + integer Memi(1) + integer*4 Meml(1) + real Memr(1) + double precision Memd(1) + complex Memx(1) + equivalence (Memb, Memc, Mems, Memi, Meml, Memr, Memd, Memx) + common /Mem/ Memd + integer wp + integer i + save + call xmfree(memi(wp+4) , 2) + call xmfree(memi(wp+5) , 4) + call xmfree(memi(wp+3) , 4) + i=0 +110 if (.not.(i .lt. 256 )) goto 112 + call xmfree(memi(memi(wp ) +i) , 10 ) +111 i=i+1 + goto 110 +112 continue + call xmfree(memi(wp ) , 10 ) + call xmfree(wp, 10 ) +100 return + end + integer function wpclas (object) + integer*2 object(*) + integer n + integer class + logical Memb(1) + integer*2 Memc(1) + integer*2 Mems(1) + integer Memi(1) + integer*4 Meml(1) + real Memr(1) + double precision Memd(1) + complex Memx(1) + equivalence (Memb, Memc, Mems, Memi, Meml, Memr, Memd, Memx) + common /Mem/ Memd + integer im + integer*2 ch + integer*2 buf(255 +1) + integer xstrln + integer stridx + logical streq + integer immap + logical xerpop + logical xerflg + common /xercom/ xerflg + integer*2 st0001(9) + integer*2 st0002(8) + save + integer iyy + data (st0001(iyy),iyy= 1, 8) / 47,100,101,118, 47,112,105,120/ + data (st0001(iyy),iyy= 9, 9) / 0/ + data st0002 /100,101,118, 36,112,105,120, 0/ + call imgime (object, buf, 255 ) + n = xstrln(buf) - 7 + if (.not.(streq (buf(n), st0001))) goto 110 + call xstrcy(st0002, buf, 255 ) + ch = 91 + n = stridx (ch, object) + if (.not.(n .gt. 0)) goto 120 + call xstrct(object(n), buf, 255 ) +120 continue + call xstrcy(buf, object, 255 ) +110 continue + class = 1 + call xerpsh + im = immap (object, 1 , 0) + if (xerpop()) goto 130 + class = 2 + call imunmp (im) +130 continue + wpclas = (class) + goto 100 +100 return + end + integer function wpid2j (wp, id) + logical Memb(1) + integer*2 Memc(1) + integer*2 Mems(1) + integer Memi(1) + integer*4 Meml(1) + real Memr(1) + double precision Memd(1) + complex Memx(1) + equivalence (Memb, Memc, Mems, Memi, Meml, Memr, Memd, Memx) + common /Mem/ Memd + integer wp + integer id + integer i + integer cp + save + i=0 +110 if (.not.(i .lt. 256 )) goto 112 + cp = memi(memi(wp ) +i) + if (.not.(memi(cp) .eq. id)) goto 120 + wpid2j = (cp) + goto 100 +120 continue +111 i=i+1 + goto 110 +112 continue + wpid2j = (0) + goto 100 +100 return + end + subroutine wpclat () + external imgint + external imgcae + external imgune + external imgwcn + external imgwct + external imgobo + external mefint + external mefcae + external mefune + external mefwcn + external mefwct + external mefobo + external mspint + external mspcae + external mspune + external mspwcn + external mspwct + external mspobo + external unkint + external unkcae + external unkune + external unkwcn + external unkwct + external unkobo + integer clncls + integer cltabe(6 ,16 ) + integer*2 clnams(32 +1,16 ) + integer locpr + common /classm/ clncls, cltabe, clnams + integer*2 st0001(8) + integer*2 st0002(6) + integer*2 st0003(4) + integer*2 st0004(10) + save + integer iyy + data st0001 /117,110,107,110,111,119,110, 0/ + data st0002 /105,109, 97,103,101, 0/ + data st0003 /109,101,102, 0/ + data (st0004(iyy),iyy= 1, 8) /109,117,108,116,105,115,112,101/ + data (st0004(iyy),iyy= 9,10) / 99, 0/ + clncls = 0 + call wploas (st0001, locpr(unkint), locpr(unkcae), locpr(unkune + * ), locpr(unkwcn), locpr(unkwct), locpr(unkobo)) + call wploas (st0002, locpr(imgint), locpr(imgcae), locpr(imgune + * ), locpr(imgwcn), locpr(imgwct), locpr(imgobo)) + call wploas (st0003, locpr(mefint), locpr(mefcae), locpr(mefune + * ), locpr(mefwcn), locpr(mefwct), locpr(mefobo)) + call wploas (st0004, locpr(mspint), locpr(mspcae), locpr(mspune + * ), locpr(mspwcn), locpr(mspwct), locpr(mspobo)) +100 return + end + subroutine wploas (name, init, cache, uncace, tran, list, info) + integer init + integer cache + integer uncace + integer tran + integer list + integer info + integer*2 name(*) + integer clncls + integer cltabe(6 ,16 ) + integer*2 clnams(32 +1,16 ) + logical xerflg + common /xercom/ xerflg + common /classm/ clncls, cltabe, clnams + save + if (.not.(clncls + 1 .gt. 16 )) goto 110 + goto 100 +110 continue + clncls = clncls + 1 + cltabe(1,clncls) = init + cltabe(2,clncls) = cache + cltabe(3,clncls) = uncace + cltabe(4,clncls) = tran + cltabe(5,clncls) = list + cltabe(6,clncls) = info + call xstrcy(name, clnams(1,clncls) , 255 ) +100 return + end + subroutine wcspie (messae) + integer*2 messae(*) + logical Memb(1) + integer*2 Memc(1) + integer*2 Mems(1) + integer Memi(1) + integer*4 Meml(1) + real Memr(1) + double precision Memd(1) + complex Memx(1) + equivalence (Memb, Memc, Mems, Memi, Meml, Memr, Memd, Memx) + common /Mem/ Memd + integer sp + integer msgbuf + integer msglen + integer mlen + integer ip + integer xstrln + integer*2 st0001(18) + integer*2 st0002(4) + integer*2 st0003(8) + save + integer iyy + data (st0001(iyy),iyy= 1, 8) /100,101,108,105,118,101,114, 32/ + data (st0001(iyy),iyy= 9,16) /119, 99,115,112,105,120, 32,123/ + data (st0001(iyy),iyy=17,18) / 32, 0/ + data st0002 / 32,125, 0, 0/ + data st0003 /105,115,109, 95,109,115,103, 0/ + mlen = xstrln(messae) + msglen = mlen + 64 + call smark (sp) + call salloc (msgbuf, msglen, 2) + call aclrc (memc(msgbuf), msglen) + ip = 0 + call amovc (st0001, memc(msgbuf), 17) + ip = ip + 17 + call amovc (messae, memc(msgbuf+ip), mlen) + ip = ip + mlen + call amovc (st0002, memc(msgbuf+ip), 2) + ip = ip + 2 + call ximmee (st0003, memc(msgbuf)) + call sfree (sp) +100 return + end + subroutine wpcnve (ltime, outstr, maxch) + integer*4 ltime + integer maxch + integer*2 outstr(*) + integer tm(8 ) + integer*2 st0001(14) + save + integer iyy + data (st0001(iyy),iyy= 1, 8) / 37, 50,100, 58, 37, 48, 50,100/ + data (st0001(iyy),iyy= 9,14) / 58, 37, 48, 50,100, 0/ + call brktie (ltime, tm) + call sprinf (outstr, maxch, st0001) + call pargi (tm(3) ) + call pargi (tm(2) ) + call pargi (tm(1) ) +100 return + end + subroutine dbgpre (wp, buf) + logical Memb(1) + integer*2 Memc(1) + integer*2 Mems(1) + integer Memi(1) + integer*4 Meml(1) + real Memr(1) + double precision Memd(1) + complex Memx(1) + equivalence (Memb, Memc, Mems, Memi, Meml, Memr, Memd, Memx) + common /Mem/ Memd + integer wp + integer*2 buf(*) + integer cp + integer wpid2j + integer i + integer*2 st0001(4) + integer*2 st0002(23) + save + integer iyy + data st0001 / 37,115, 10, 0/ + data (st0002(iyy),iyy= 1, 8) / 37, 51,100, 58, 32, 32,105,100/ + data (st0002(iyy),iyy= 9,16) / 61, 37,100, 32, 32,114,101,102/ + data (st0002(iyy),iyy=17,23) / 61, 39, 37,115, 39, 10, 0/ + call xprinf(st0001) + call pargsr (buf) + i=0 +110 if (.not.(i .lt. 256 )) goto 112 + cp = wpid2j (wp, i) + if (.not.(memi(cp+3) .ne. 0)) goto 120 + call xprinf(st0002) + call pargi(i) + call pargi(memi(cp) ) + call pargsr(memc((((cp+6)-1)*2+1)) ) +120 continue +111 i=i+1 + goto 110 +112 continue +100 return + end +c temple template +c sprinf sprintf +c wpclas wp_class +c clncls cl_nclass +c wcspie wcspix_message +c classm class_com +c unkwct unk_wcslist +c mefcae mef_cache +c mspwct msp_wcslist +c cltabe cl_table +c unkint unk_init +c wpread wp_read +c mspint msp_init +c ximmee xim_message +c wpcace wp_cache +c imgcae img_cache +c messae message +c unkobo unk_objinfo +c mspobo msp_objinfo +c clktie clktime +c ximcot xim_connect +c wpshun wp_shutdown +c wpclat wp_class_init +c imgime imgimage +c mefune mef_uncache +c mefwcn mef_wcstran +c ximinr xim_intrhandler +c clnams cl_names +c gargwd gargwrd +c ximalt xim_alert +c brktie brktime +c twcspx t_wcspix +c wpunce wp_uncache +c wpwcsn wp_wcstran +c imgune img_uncache +c imgwcn img_wcstran +c envgei envgeti +c wpgetr wp_getpar +c mefwct mef_wcslist +c wpinie wp_initialize +c ximred xim_read +c mefint mef_init +c unkcae unk_cache +c wpwcst wp_wcslist +c imunmp imunmap +c imgwct img_wcslist +c mspcae msp_cache +c eprinf eprintf +c wpinit wp_init +c imgint img_init +c mefobo mef_objinfo +c envges envgets +c ximdit xim_disconnect +c discot disconnect +c dbgpre dbg_printcache +c wpcnve wp_cnvdate +c wpsetr wp_setpar +c wpid2j wp_id2obj +c wpobjo wp_objinfo +c imgobo img_objinfo +c unkune unk_uncache +c unkwcn unk_wcstran +c wploas wp_load_class +c uncace uncache +c pargsr pargstr +c mspune msp_uncache +c mspwcn msp_wcstran diff --git a/vendor/x11iraf/ximtool/clients.old/wcspix/t_wcspix.x b/vendor/x11iraf/ximtool/clients.old/wcspix/t_wcspix.x new file mode 100644 index 00000000..675fb57a --- /dev/null +++ b/vendor/x11iraf/ximtool/clients.old/wcspix/t_wcspix.x @@ -0,0 +1,769 @@ +# Copyright(c) 1986 Association of Universities for Research in Astronomy Inc. + +include +include +include "wcspix.h" + + +# T_WCSPIX -- Entry point for the WCSPIX Image Support Module for XImtool. +# The WCSPIX task is responsible for converting image coordinates and getting +# pixel values from images of various types. Results are returned to the +# GUI directly using ISM messaging. + +procedure t_wcspix () + +pointer wp +int len, disconnect, ncmd +char socket[SZ_FNAME], cmd[SZ_FNAME], message[SZ_LINE], buf[SZ_DATE] + +int objid, regid +real x, y +char ref[SZ_FNAME], template[SZ_LINE], param[SZ_FNAME] + +bool debug + +long clktime() +pointer wp_init() +int envgets(), envgeti(), strdic() + +# Standard declarations for the Ximtool WCSPIX client interface. +int xim_connect(), wp_read(), xim_intrhandler() +errchk wp_read, envgets, envgeti + +begin + call aclrc (message, SZ_LINE) + call aclrc (cmd, SZ_FNAME) + call aclrc (socket, SZ_FNAME) + + # Get the connection socket name from the environment if defined + # or else use the default socket. + if (envgets ("ISMDEV", socket, SZ_FNAME) <= 0) + call strcpy (WCSPIX_CONNECT, socket, SZ_FNAME) + + # Open the socket connection on a negotiated socket. + if (xim_connect (socket, WCSPIX_NAME, WCSPIX_MODE) == ERR) + return + + # Install an interrupt exception handler so we can exit cleanly. + if (xim_intrhandler() == ERR) + return + + + # Initialize the task data structures. + wp = wp_init () + + # Check for a runtime debug level. + iferr (WP_DBGLEVEL(wp) = envgeti ("WCSPIX_DEBUG")) + WP_DBGLEVEL(wp) = 0 + + # Log the connection. + call wp_cnvdate (clktime(0), buf, SZ_DATE) + call sprintf (message, SZ_LINE, "info { %s: WCSPIX Connect}\n") + call pargstr (buf) + call xim_message ("ism_msg", message) + + # Loop over the commands read on the connection and process. + disconnect = 1 + debug = (WCSPIX_DBG || WP_DBGLEVEL(wp) > 0) + while (wp_read (message, len) != EOF) { + + if (debug) { + call eprintf("message: '%s' len=%d\n") + call pargstr (message); call pargi (len) + } + if (len <= 0) { + # Server has disconnected. + disconnect = 0 + break + } + + # Scan the command string and get the first word. + call sscan (message) + call gargwrd (cmd, SZ_LINE) + ncmd = strdic (cmd, cmd, SZ_LINE, WCSPIX_CMDS) + + switch (ncmd) { + case QUIT: + # Server wants us to shut down. + disconnect = 0 + break + + case INITIALIZE: + call wp_cnvdate (clktime(0), buf, SZ_DATE) + call sprintf (message, SZ_LINE, + "info { %s: WCSPIX Initialize}\n") + call pargstr (buf) + call wp_initialize (wp) + + case CACHE: + # + call gargwrd (ref, SZ_FNAME) + call gargi (objid) + call gargi (regid) + if (debug) { + call printf ("cache: objid=%d regid=%d ref='%s'\n") + call pargi(objid); call pargi(regid); call pargstr(ref) + } + + # Log the event. + call wp_cnvdate (clktime(0), buf, SZ_DATE) + call sprintf (message, SZ_LINE, + "info { %s: WCSPIX Cache objid=%3d %s}\n") + call pargstr (buf) + call pargi (objid) + call pargstr (ref) + call xim_message ("ism_msg", message) + + call wp_cache (wp, objid, regid, ref) + + case UNCACHE: + # + call gargi (objid) + if (debug) { call printf("uncache: id=%d\n");call pargi(objid) } + + # Log the event. + call wp_cnvdate (clktime(0), buf, SZ_DATE) + call sprintf (message, SZ_LINE, + "info { %s: WCSPIX Uncache objid=%3d}\n") + call pargstr (buf) + call pargi (objid) + call xim_message ("ism_msg", message) + + call wp_uncache (wp, objid) + + case WCSTRAN: + # [[ ] ["NDC" ]] + call gargi (objid) + call gargr (x) ; call gargr (y) + if (debug) { + call printf ("wcstran: id=%d (%g,%g)\n") + call pargi(objid); call pargr (x); call pargr (y) + } + call wp_wcstran (wp, objid, x, y) + + case WCSLIST: + # + call gargi (objid) + if (debug) { call printf ("wcslist: id=%d\n");call pargi(objid)} + call wp_wcslist (wp, objid) + + case OBJINFO: + # + call gargi (objid) + call gargwrd (template, SZ_FNAME) + if (debug) { + call printf ("objinfo: id=%d temp='%s'\n") + call pargi(objid); call pargstr (template); + } + call wp_objinfo (wp, objid, template) + + case SET: + # + call gargwrd (param, SZ_FNAME) + call wp_setpar (wp, param) + + case GET: + # + + case DEBUG: + debug = !(debug) + + default: + if (debug) { + call eprintf ("ISM default: len=%d msg='%s'\n") + call pargi(len); call pargstr(message) + } + } + + # Clear the buffer for the next read. + call aclrc (message, SZ_LINE) + } + + # Disconnect from the server and clean up. + call xim_disconnect (disconnect) + call wp_shutdown (wp) +end + + +# WP_INITIALIZE -- Initialize the WCSPIX, uncache any previously cached images. + +procedure wp_initialize (wp) + +pointer wp #i WCSPIX structure + +pointer cp, wp_id2obj() +int i + +begin + for (i=0; i < SZ_CACHE; i=i+1) { + cp = wp_id2obj (wp, i) + if (cp != NULL && C_OBJID(cp) != NULL) + call wp_uncache (wp, C_OBJID(cp)) + } +end + + +# WP_CACHE -- Associate and object reference with a unique object id. + +procedure wp_cache (wp, objid, regid, ref) + +pointer wp #i WCSPIX structure +int objid #i object id +int regid #i region id +char ref[ARB] #i object ref + +pointer cp +int i, class +char alert[SZ_FNAME] + +int wp_class() + +include "class.com" + +begin + # Find an unused slot in the object cache. + for (i=0; i < SZ_CACHE; i=i+1) { + cp = OBJCACHE(wp,i) + if (C_NREF(cp) == 0) + break + } + + # Get the object class. + class = wp_class (ref) + if (class == ERR) { + # Send alert to the GUI. + call sprintf (alert, SZ_FNAME, "wp_cache: Unable to cache\n%s") + call pargstr (ref) + call xim_alert (alert, "", "") + + # Setup for linear system. + return + } + C_CLASS(cp) = class + + # Initialize the object. + if (class != NULL && CL_INIT(class) != NULL) + call zcall2 (CL_INIT(class), cp, wp) + + # Call the cache function. + if (class != NULL && CL_CACHE(class) != NULL) + call zcall4 (CL_CACHE(class), cp, objid, regid, ref) +end + + +# WP_UNCACHE -- Remove an object from the WCSPIX cache. + +procedure wp_uncache (wp, id) + +pointer wp #i WCSPIX structure +int id #i object id + +pointer cp, wp_id2obj() +int class + +include "class.com" + +begin + cp = wp_id2obj (wp, id) + if (cp == NULL) + return + + # Call the uncache function. + class = C_CLASS(cp) + if (class != NULL && CL_UNCACHE(class) != NULL) + call zcall2 (CL_UNCACHE(class), cp, id) + + C_NREF(cp) = 0 +end + + +# WP_WCSTRAN -- Translate image coords to WCS values. + +procedure wp_wcstran (wp, id, x, y) + +pointer wp #i WCSPIX structure +int id #i object id +real x, y #i image coords + +pointer cp, wp_id2obj() +int class + +include "class.com" + +begin + cp = wp_id2obj (wp, id) + if (cp == NULL) + return + + # Call the uncache function. + class = C_CLASS(cp) + if (class != NULL && CL_WCSTRAN(class) != NULL) + call zcall4 (CL_WCSTRAN(class), cp, id, x, y) +end + + +# WP_WCSLIST -- List the available world coordinate systems for the given +# object. + +procedure wp_wcslist (wp, id) + +pointer wp #i WCSPIX structure +int id #i object id + +pointer cp, wp_id2obj() +int class + +include "class.com" + +begin + cp = wp_id2obj (wp, id) + if (cp == NULL) + return + + # Call the uncache function. + class = C_CLASS(cp) + if (class != NULL && CL_WCSLIST(class) != NULL) + call zcall2 (CL_WCSLIST(class), cp, id) +end + + +# WP_OBJINFO -- Get and image header or keyword templates for the given +# object. + +procedure wp_objinfo (wp, id, template) + +pointer wp #i WCSPIX structure +int id #i object id +char template[ARB] #i keyword template + +pointer cp, wp_id2obj() +int class + +include "class.com" + +begin + cp = wp_id2obj (wp, id) + if (cp == NULL) + return + + # Call the uncache function. + class = C_CLASS(cp) + if (class != NULL && CL_OBJINFO(class) != NULL) + call zcall3 (CL_OBJINFO(class), cp, id, template) +end + + +# WP_SETPAR -- Set the value of a WCSPIX ISM parameter. + +procedure wp_setpar (wp, param) + +pointer wp #i WCSPIX structure pointer +char param[SZ_FNAME] #i WCSPIX param name + +char arg[SZ_PARAM], buf[SZ_PARAM], msg[SZ_PARAM] +int line + +int strdic() + +include "class.com" + +begin + if (WCSPIX_DBG) { call printf ("set: %s = ");call pargstr(param) } + + switch (strdic (param, param, SZ_PARAM, WCSPIX_PARAMS)) { + case PAR_PSIZE: + call gargi (WP_PTABSZ(wp)) + if (WCSPIX_DBG) { call printf ("%d\n");call pargi(WP_PTABSZ(wp)) } + + case PAR_BPM: + call gargi (WP_BPM(wp)) + if (WCSPIX_DBG) { call printf ("%d\n");call pargi(WP_BPM(wp)) } + + case PAR_WCS: + call gargwrd (buf, SZ_FNAME) + call gargi (line) + + call strcpy (buf, arg, SZ_PARAM) + call strlwr (buf) + switch (strdic (buf, buf, SZ_FNAME, WCSPIX_SYSTEMS)) { + case SYS_LOGICAL: SYSTEMS(wp,line) = SYS_LOGICAL + case SYS_PHYSICAL: SYSTEMS(wp,line) = SYS_PHYSICAL + case SYS_WORLD: SYSTEMS(wp,line) = SYS_WORLD + case SYS_NONE: SYSTEMS(wp,line) = SYS_NONE + case SYS_AMP: SYSTEMS(wp,line) = SYS_AMP + case SYS_CCD: SYSTEMS(wp,line) = SYS_PHYSICAL + case SYS_DETECTOR: SYSTEMS(wp,line) = SYS_DETECTOR + default: SYSTEMS(wp,line) = SYS_SKY + } + call strcpy (buf, WCSNAME(wp,line), LEN_WCSNAME) + + if (WCSPIX_DBG) { + call printf("%s line=%d\n");call pargstr(buf);call pargi(line) } + + call sprintf (msg, SZ_FNAME, "wcstype %s %d") + call pargstr (arg) + call pargi (line) + call wcspix_message (msg) + + case PAR_FMT: + call gargwrd (buf, SZ_FNAME) + call gargi (line) + + call strcpy (buf, arg, SZ_PARAM) + call strlwr (buf) + switch (strdic (buf, buf, SZ_FNAME, WCSPIX_FMT)) { + case FMT_DEFAULT: FORMATS(wp,line) = FMT_DEFAULT + case FMT_HMS: FORMATS(wp,line) = FMT_HMS + case FMT_DEG: FORMATS(wp,line) = FMT_DEG + case FMT_RAD: FORMATS(wp,line) = FMT_RAD + default: FORMATS(wp,line) = FMT_DEFAULT + } + + if (WCSPIX_DBG) { + call printf("%s line=%d\n");call pargstr(buf);call pargi(line) } + + call sprintf (msg, SZ_FNAME, "wcsfmt %s %d") + call pargstr (arg) + call pargi (line) + call wcspix_message (msg) + } +end + + +# WP_GETPAR -- Get the value of a WCSPIX ISM parameter. + +procedure wp_getpar (wp, param) + +pointer wp #i WCSPIX structure pointer +char param[SZ_FNAME] #i WCSPIX param name + +int strdic() + +begin + if (WCSPIX_DBG) { call printf ("set: %s = ");call pargstr(param) } + + switch (strdic (param, param, SZ_PARAM, WCSPIX_PARAMS)) { + case PAR_PSIZE: + case PAR_BPM: + case PAR_WCS: + case PAR_FMT: + } +end + + +################################################################################ +# +# Private procedures. +# +################################################################################ + + +# WP_INIT -- Initialize the WCSPIX task and data structures. + +pointer procedure wp_init () + +pointer wp #r WCSPIX structure pointer +int i + +begin + # Allocate the task structure. + iferr (call calloc (wp, SZ_WCSPIX, TY_STRUCT)) + call error (0, "Error opening WCSPIX task structure.") + + call calloc (WP_SYSTEMS(wp), MAX_WCSLINES, TY_INT) + call calloc (WP_FORMATS(wp), MAX_WCSLINES, TY_INT) + call calloc (WP_WCS(wp), (LEN_WCSNAME*MAX_WCSLINES), TY_CHAR) + for (i=1; i <= MAX_WCSLINES; i=i+1) { + FORMATS(wp,i) = DEF_FMT + SYSTEMS(wp,i) = DEF_SYSTEM + call strcpy ("none", WCSNAME(wp,i), LEN_WCSNAME) + } + + # Allocate the object cache. + call calloc (WP_CPTR(wp), SZ_CACHE, TY_STRUCT) + for (i=0; i < SZ_CACHE; i=i+1) + call calloc (OBJCACHE(wp,i), SZ_CNODE, TY_STRUCT) + + WP_PTABSZ(wp) = DEF_PTABSZ + WP_BPM(wp) = DEF_BPM_FLAG + + # Initialize the class modules. + call wp_class_init() + + return (wp) +end + + +# WP_READ -- Read messages from the connection and process them optimally for +# this ISM. This means we segment the messages and handle only the last +# few WCS requests so we can keep up with the server requests. Presumably +# there are more cursor events coming which are no longer valid so some are +# thrown out. + +int procedure wp_read (message, len) + +char message[ARB] #o message buffer +int len #o length of message + +int nread + +int xim_read() # low-level i/o +errchk xim_read + +begin + nread = xim_read (message, len) + + return (nread) +end + + +# WP_SHUTDOWN -- Shut down the WCSPIX, freeing all storage + +procedure wp_shutdown (wp) + +pointer wp #i WCSPIX structure +int i + +begin + # Free the structures. + call mfree (WP_WCS(wp), TY_CHAR) + call mfree (WP_FORMATS(wp), TY_INT) + call mfree (WP_SYSTEMS(wp), TY_INT) + for (i=0; i < SZ_CACHE; i=i+1) + call mfree (OBJCACHE(wp,i), TY_STRUCT) + + call mfree (WP_CPTR(wp), TY_STRUCT) + call mfree (wp, TY_STRUCT) +end + + +# WP_CLASS -- Determine the object class for the named image/file. + +int procedure wp_class (object) + +char object[ARB] #i object reference + +int n, class +pointer im +char ch, buf[SZ_FNAME] + +int strlen(), stridx() +bool streq() +pointer immap() + +errchk immap + +begin + # The following kludge is necessary to protect against the case + # where dev$pix is used as a test image. The 'object' pathname in + # this case is "node!/path/dev/pix" which lacks the extension + # and causes the task to fail to open because of a conflict with + # the pix.hhh in the same directory. Most IRAF tasks work since + # the imio$iki code treats the string "dev$pix" as a special case. + + call imgimage (object, buf, SZ_FNAME) + n = strlen (buf) - 7 + if (streq (buf[n], "/dev/pix")) { + call strcpy ("dev$pix", buf, SZ_FNAME) + ch = '[' + n = stridx (ch, object) + if (n > 0) + call strcat (object[n], buf, SZ_FNAME) + call strcpy (buf, object, SZ_FNAME) + } + + + # See if we can map the image to get at least an image class. If + # so then check for special subclasses like Mosaic files, spectra, etc. + + class = UNKNOWN_CLASS + ifnoerr (im = immap (object, READ_ONLY, 0)) { + class = IMAGE_CLASS + + # Now check for subclasses. (TBD) + + call imunmap (im) + } + + return (class) +end + + +# WP_ID2OBJ -- Utility routine to convert and object id to the cache pointer. + +pointer procedure wp_id2obj (wp, id) + +pointer wp #i WCSPIX structure +int id #i object id + +int i +pointer cp + +begin + for (i=0; i < SZ_CACHE; i=i+1) { + cp = OBJCACHE(wp,i) + if (C_OBJID(cp) == id) + return (cp) + } + return (NULL) +end + + +# WP_CLASS_INIT -- Initialize the WCSPIX ISM class modules. + +procedure wp_class_init() + +extern img_init(), img_cache(), img_uncache() +extern img_wcstran(), img_wcslist(), img_objinfo() + +extern mef_init(), mef_cache(), mef_uncache() +extern mef_wcstran(), mef_wcslist(), mef_objinfo() + +extern msp_init(), msp_cache(), msp_uncache() +extern msp_wcstran(), msp_wcslist(), msp_objinfo() + +extern unk_init(), unk_cache(), unk_uncache() +extern unk_wcstran(), unk_wcslist(), unk_objinfo() + +include "class.com" +int locpr() + +begin + cl_nclass = 0 + + # Load the class modules. + call wp_load_class ("unknown", + locpr(unk_init), locpr(unk_cache), locpr(unk_uncache), + locpr(unk_wcstran), locpr(unk_wcslist), locpr(unk_objinfo)) + call wp_load_class ("image", + locpr(img_init), locpr(img_cache), locpr(img_uncache), + locpr(img_wcstran), locpr(img_wcslist), locpr(img_objinfo)) + call wp_load_class ("mef", + locpr(mef_init), locpr(mef_cache), locpr(mef_uncache), + locpr(mef_wcstran), locpr(mef_wcslist), locpr(mef_objinfo)) + call wp_load_class ("multispec", + locpr(msp_init), locpr(msp_cache), locpr(msp_uncache), + locpr(msp_wcstran), locpr(msp_wcslist), locpr(msp_objinfo)) +end + + +# WP_LOAD_CLASS -- Load an object class module for the ISM task. + +procedure wp_load_class (name, init, cache, uncache, tran, list, info) + +char name[ARB] #I module name +int init #I initialize procedure +int cache #I cache the object procedure +int uncache #I uncache the object procedure +int tran #I translate WCS procedure +int list #I list WCS proedure +int info #I get header procedure + +errchk syserrs +include "class.com" + +begin + # Get a new driver slot. + if (cl_nclass + 1 > MAX_CLASSES) + return + cl_nclass = cl_nclass + 1 + + # Load the driver. + CL_INIT(cl_nclass) = init + CL_CACHE(cl_nclass) = cache + CL_UNCACHE(cl_nclass) = uncache + CL_WCSTRAN(cl_nclass) = tran + CL_WCSLIST(cl_nclass) = list + CL_OBJINFO(cl_nclass) = info + call strcpy (name, CL_NAME(cl_nclass), SZ_FNAME) +end + + +# WCSPIX_MESSAGE -- Deliver a message to the ISM callback, tagged with +# our name so it can be passed off to the correct code. + +procedure wcspix_message (message) + +char message[ARB] #I message to send + +pointer sp, msgbuf +int msglen, mlen, ip + +int strlen() + +begin + # Get the message length plus some extra for the braces and padding. + mlen = strlen (message) + msglen = mlen + 64 + + # Allocate and clear the message buffer. + call smark (sp) + call salloc (msgbuf, msglen, TY_CHAR) + call aclrc (Memc[msgbuf], msglen) + + ip = 0 + call amovc ("deliver wcspix { ", Memc[msgbuf], 17) ; ip = ip + 17 + call amovc (message, Memc[msgbuf+ip], mlen) ; ip = ip + mlen + call amovc (" }\0", Memc[msgbuf+ip], 2) ; ip = ip + 2 + + call xim_message ("ism_msg", Memc[msgbuf]) + + call sfree (sp) +end + + +define SZ_WEEKDAY 3 +define SZ_MONTH 3 + +# WP_CNVDATE -- Convert a time in integer seconds since midnight on Jan 1, 1980 +# into a short string such as "5/15 18:24". + +procedure wp_cnvdate (ltime, outstr, maxch) + +long ltime # seconds since 00:00:00 10-Jan-1980 +char outstr[ARB] +int maxch + +int tm[LEN_TMSTRUCT] + +begin + call brktime (ltime, tm) + +# call sprintf (outstr, maxch, "%2d/%2d %2d:%02d") +# call pargi (TM_MONTH(tm)) +# call pargi (TM_MDAY(tm)) +# call pargi (TM_HOUR(tm)) +# call pargi (TM_MIN(tm)) + +# call sprintf (outstr, maxch, "%2d:%02d") +# call pargi (TM_HOUR(tm)) +# call pargi (TM_MIN(tm)) + + call sprintf (outstr, maxch, "%2d:%02d:%02d") + call pargi (TM_HOUR(tm)) + call pargi (TM_MIN(tm)) + call pargi (TM_SEC(tm)) +end + + + +#---------------- +# DEBUG ROUTINES. +#---------------- +procedure dbg_printcache (wp, buf) +pointer wp +char buf[ARB] +pointer cp, wp_id2obj() +int i +begin + call printf ("%s\n") ; call pargstr (buf) + for (i=0; i < SZ_CACHE; i=i+1) { + cp = wp_id2obj (wp, i) + if (C_DATA(cp) != NULL) { + call printf ("%3d: id=%d ref='%s'\n") + call pargi(i) + call pargi(C_OBJID(cp)) + call pargstr(C_REF(cp)) + } + } +end diff --git a/vendor/x11iraf/ximtool/clients.old/wcspix/wcimage.f b/vendor/x11iraf/ximtool/clients.old/wcspix/wcimage.f new file mode 100644 index 00000000..116b7106 --- /dev/null +++ b/vendor/x11iraf/ximtool/clients.old/wcspix/wcimage.f @@ -0,0 +1,1975 @@ + subroutine imgint (cp, wp) + logical Memb(1) + integer*2 Memc(1) + integer*2 Mems(1) + integer Memi(1) + integer*4 Meml(1) + real Memr(1) + double precision Memd(1) + complex Memx(1) + equivalence (Memb, Memc, Mems, Memi, Meml, Memr, Memd, Memx) + common /Mem/ Memd + integer cp + integer wp + integer img + logical xerpop + logical xerflg + common /xercom/ xerflg + integer*2 st0001(12) + save + integer iyy + data (st0001(iyy),iyy= 1, 8) /105,109,103, 95,105,110,105,116/ + data (st0001(iyy),iyy= 9,12) / 58, 32, 10, 0/ + if (.not.(.false.)) goto 110 + call xprinf(st0001) +110 continue + if (.not.(memi(cp+3) .eq. 0)) goto 120 + call xerpsh + call xcallc(memi(cp+3) , 15, 10 ) + if (.not.xerpop()) goto 130 + goto 100 +130 continue +120 continue + img = memi(cp+3) + memi(img ) = wp + memi(img+1) = 0 + memi(img+3) = 0 + memi(img+4) = 0 + memi(img+5) = 0 + memi(img+6) = 0 + memr(img+9) = 0.0 + memr(img+10) = 0.0 + memi(img+11) = 1 +100 return + end + subroutine imgcae (cp, objid, regid, ref) + logical Memb(1) + integer*2 Memc(1) + integer*2 Mems(1) + integer Memi(1) + integer*4 Meml(1) + real Memr(1) + double precision Memd(1) + complex Memx(1) + equivalence (Memb, Memc, Mems, Memi, Meml, Memr, Memd, Memx) + common /Mem/ Memd + integer cp + integer objid + integer regid + integer*2 ref(*) + integer img + integer im + integer wp + integer stat + integer*2 alert(1023 +1) + integer immap + integer dspmmp + integer mwsctn + integer imgams + integer imgdes + integer imaccf + integer skdecm + logical xerpop + logical xerflg + common /xercom/ xerflg + integer*2 st0001(13) + integer*2 st0002(19) + integer*2 st0003(1) + integer*2 st0004(1) + integer*2 st0005(6) + integer*2 st0006(8) + integer*2 st0007(6) + integer*2 st0008(8) + integer*2 st0009(9) + integer*2 st0010(7) + integer*2 st0011(7) + integer*2 st0012(5) + integer*2 st0013(5) + integer*2 st0014(7) + integer*2 st0015(7) + integer*2 st0016(5) + integer*2 st0017(5) + integer*2 st0018(30) + integer*2 st0019(1) + integer*2 st0020(1) + integer*2 st0021(4) + save + integer iyy + data (st0001(iyy),iyy= 1, 8) /105,109,103, 95, 99, 97, 99,104/ + data (st0001(iyy),iyy= 9,13) /101, 58, 32, 10, 0/ + data (st0002(iyy),iyy= 1, 8) / 85,110, 97, 98,108,101, 32,116/ + data (st0002(iyy),iyy= 9,16) /111, 32, 99, 97, 99,104,101, 10/ + data (st0002(iyy),iyy=17,19) / 37,115, 0/ + data st0003 / 0/ + data st0004 / 0/ + data st0005 /119,111,114,108,100, 0/ + data st0006 /108,111,103,105, 99, 97,108, 0/ + data st0007 /119,111,114,108,100, 0/ + data st0008 /108,111,103,105, 99, 97,108, 0/ + data (st0009(iyy),iyy= 1, 8) /112,104,121,115,105, 99, 97,108/ + data (st0009(iyy),iyy= 9, 9) / 0/ + data st0010 / 65, 84, 77, 49, 95, 49, 0/ + data st0011 / 65, 84, 77, 50, 95, 50, 0/ + data st0012 / 65, 84, 86, 49, 0/ + data st0013 / 65, 84, 86, 50, 0/ + data st0014 / 68, 84, 77, 49, 95, 49, 0/ + data st0015 / 68, 84, 77, 50, 95, 50, 0/ + data st0016 / 68, 84, 86, 49, 0/ + data st0017 / 68, 84, 86, 50, 0/ + data (st0018(iyy),iyy= 1, 8) / 85,110, 97, 98,108,101, 32,116/ + data (st0018(iyy),iyy= 9,16) /111, 32,100,101, 99,111,100,101/ + data (st0018(iyy),iyy=17,24) / 32,105,109, 97,103,101, 32, 87/ + data (st0018(iyy),iyy=25,30) / 67, 83, 10, 37,115, 0/ + data st0019 / 0/ + data st0020 / 0/ + data st0021 / 66, 80, 77, 0/ + if (.not.(.false.)) goto 110 + call xprinf(st0001) +110 continue + img = memi(cp+3) + wp = memi(img ) + call xerpsh + memi(img+1) = immap (ref, 1 , 0) + if (.not.xerpop()) goto 120 + call sprinf (alert, 255 , st0002) + call pargsr (ref) + call ximalt (alert, st0003, st0004) + goto 100 +120 continue + memi(img+4) = 0 + memi(img+5) = 0 + memi(img+6) = 0 + call xerpsh + stat = skdecm (memi(img+1) , st0005, memi(img+3) , memi(img+4) + * ) + if (xerflg) goto 132 + if (.not.(stat .eq. -1 .or. memi(img+3) .eq. 0)) goto 140 + memi(img+11) = 1 +140 continue + if (.not.(memi(img+3) .ne. 0)) goto 150 + memi(img+5) = mwsctn (memi(img+3) , st0006, st0007, 3) + if (xerflg) goto 132 + memi(img+6) = mwsctn (memi(img+3) , st0008, st0009, 3) + if (xerflg) goto 132 + im = memi(img+1) + if (.not.(imaccf(im,st0010) .eq. 1 .and. imaccf(im,st0011) . + * eq. 1 .and. imaccf(im,st0012) .eq. 1 .and. imaccf(im,st0013) + * .eq. 1)) goto 160 + memi(img+7) = imgams (im, memi(img+3) ) +160 continue + if (.not.(imaccf(im,st0014) .eq. 1 .and. imaccf(im,st0015) . + * eq. 1 .and. imaccf(im,st0016) .eq. 1 .and. imaccf(im,st0017) + * .eq. 1)) goto 170 + memi(img+8) = imgdes (im, memi(img+3) ) +170 continue +150 continue +132 if (.not.xerpop()) goto 130 + call sprinf (alert, 255 , st0018) + call pargsr (ref) + call ximalt (alert, st0019, st0020) + memi(img+11) = 1 +130 continue + if (.not.(memi(wp+2) .eq. 1)) goto 180 + call xerpsh + memi(img+2) = dspmmp (st0021, memi(img+1) ) + if (.not.xerpop()) goto 190 + memi(img+2) = 0 +190 continue +180 continue + memi(cp) = objid + memi(cp+1) = regid + memi(cp+4) = memi(cp+4) + 1 + call xstrcy(ref, memc((((cp+6)-1)*2+1)) , 128) +100 return + end + subroutine imgune (cp, id) + logical Memb(1) + integer*2 Memc(1) + integer*2 Mems(1) + integer Memi(1) + integer*4 Meml(1) + real Memr(1) + double precision Memd(1) + complex Memx(1) + equivalence (Memb, Memc, Mems, Memi, Meml, Memr, Memd, Memx) + common /Mem/ Memd + integer cp + integer id + integer img + integer*2 st0001(15) + integer*2 st0002(1) + save + integer iyy + data (st0001(iyy),iyy= 1, 8) /105,109,103, 95,117,110, 99, 97/ + data (st0001(iyy),iyy= 9,15) / 99,104,101, 58, 32, 10, 0/ + data st0002 / 0/ + if (.not.(.false.)) goto 110 + call xprinf(st0001) +110 continue + memi(cp) = 0 + memi(cp+4) = 0 + call xstrcy(st0002, memc((((cp+6)-1)*2+1)) , 255 ) + img = memi(cp+3) + if (.not.(memi(img+3) .ne. 0)) goto 120 + call mwcloe (memi(img+3) ) +120 continue + if (.not.(memi(img+2) .ne. 0)) goto 130 + call imunmp (memi(img+2) ) +130 continue + if (.not.(memi(img+1) .ne. 0)) goto 140 + call imunmp (memi(img+1) ) +140 continue + memi(img+1) = 0 + memi(img+2) = 0 + memi(img+3) = 0 + memi(img+5) = 0 + memi(img+6) = 0 + memi(img+4) = 0 + memr(img+9) = 0.0 + memr(img+10) = 0.0 + memi(img+11) = 0 + call xmfree(memi(cp+3) , 10 ) + memi(cp+3) = 0 +100 return + end + subroutine imgwcn (cp, id, x, y) + logical Memb(1) + integer*2 Memc(1) + integer*2 Mems(1) + integer Memi(1) + integer*4 Meml(1) + real Memr(1) + double precision Memd(1) + complex Memx(1) + equivalence (Memb, Memc, Mems, Memi, Meml, Memr, Memd, Memx) + common /Mem/ Memd + integer cp + integer id + real x + real y + integer img + integer im + integer wp + integer co + double precision dx + double precision dy + double precision wx + double precision wy + double precision pixval + real rx + real ry + integer i + integer bpm + integer*2 buf(1023 +1) + integer*2 msg(1023 +1) + integer*2 wcs(32 +1) + integer*2 xc(32 +1) + integer*2 yc(32 +1) + integer*2 xunits(32 +1) + integer*2 yunits(32 +1) + double precision skstad + integer*2 st0001(15) + integer*2 st0002(37) + integer*2 st0003(29) + integer*2 st0004(41) + save + integer iyy + data (st0001(iyy),iyy= 1, 8) /105,109,103, 95,119, 99,115,116/ + data (st0001(iyy),iyy= 9,15) /114, 97,110, 58, 32, 10, 0/ + data (st0002(iyy),iyy= 1, 8) /119, 99,115,116,114, 97,110, 32/ + data (st0002(iyy),iyy= 9,16) /123, 32,111, 98,106,101, 99,116/ + data (st0002(iyy),iyy=17,24) / 32, 37,100, 32,125, 32,123, 32/ + data (st0002(iyy),iyy=25,32) /114,101,103,105,111,110, 32, 37/ + data (st0002(iyy),iyy=33,37) /100, 32,125, 32, 0/ + data (st0003(iyy),iyy= 1, 8) /123, 32,112,105,120,118, 97,108/ + data (st0003(iyy),iyy= 9,16) / 32, 37, 57, 46, 57,103, 32,125/ + data (st0003(iyy),iyy=17,24) / 32,123, 32, 98,112,109, 32, 37/ + data (st0003(iyy),iyy=25,29) /100, 32,125, 10, 0/ + data (st0004(iyy),iyy= 1, 8) /123, 99,111,111,114,100, 32,123/ + data (st0004(iyy),iyy= 9,16) / 37, 57,115,125, 32,123, 37, 49/ + data (st0004(iyy),iyy=17,24) / 50,115,125, 32,123, 37, 49, 50/ + data (st0004(iyy),iyy=25,32) /115,125, 32,123, 37, 52,115,125/ + data (st0004(iyy),iyy=33,40) / 32,123, 37, 52,115,125,125, 10/ + data (st0004(iyy),iyy=41,41) / 0/ + if (.not.(.false.)) goto 110 + call xprinf(st0001) +110 continue + img = memi(cp+3) + co = memi(img+4) + wp = memi(img ) + im = memi(img+1) + dx = (dble(x) - skstad(co,1)) / skstad(co,3) + dy = (dble(y) - skstad(co,2)) / skstad(co,4) + rx = dx + ry = dy + call imggea (cp, id, rx, ry, pixval, bpm) + call aclrc (msg, 1023 ) + call sprinf (msg, 1023 , st0002) + call pargi (memi(cp) ) + call pargi (memi(cp+1) ) + call sprinf (buf, 1023 , st0003) + call pargd (pixval) + call pargi (bpm) + call xstrct(buf, msg, 1023 ) + i=1 +120 if (.not.(i .le. 4 )) goto 122 + call imgged (img, dx, dy, memi(memi(wp+3) +i-1), memc(memi( + * wp+4) +(32 *(i-1))), wx, wy) + call imgcos (cp, i, wcs, xunits, yunits) + call imgcot (cp, i, wx, wy, xc, yc) + call sprinf (buf, 1023 , st0004) + call pargsr (wcs) + call pargsr (xc) + call pargsr (yc) + call pargsr (xunits) + call pargsr (yunits) + call xstrct(buf, msg, 1023 ) +121 i=i+1 + goto 120 +122 continue + call wcspie (msg) +100 return + end + subroutine imgwct (cp, id) + logical Memb(1) + integer*2 Memc(1) + integer*2 Mems(1) + integer Memi(1) + integer*4 Meml(1) + real Memr(1) + double precision Memd(1) + complex Memx(1) + equivalence (Memb, Memc, Mems, Memi, Meml, Memr, Memd, Memx) + common /Mem/ Memd + integer cp + integer id + integer img + integer im + integer mw + integer*2 msg(1023 +1) + integer*2 st0001(15) + integer*2 st0002(43) + integer*2 st0003(12) + integer*2 st0004(11) + integer*2 st0005(6) + integer*2 st0006(7) + integer*2 st0007(60) + integer*2 st0008(2) + save + integer iyy + data (st0001(iyy),iyy= 1, 8) /105,109,103, 95,119, 99,115,108/ + data (st0001(iyy),iyy= 9,15) /105,115,116, 58, 32, 10, 0/ + data (st0002(iyy),iyy= 1, 8) /119, 99,115,108,105,115,116, 32/ + data (st0002(iyy),iyy= 9,16) /123, 78,111,110,101, 32, 76,111/ + data (st0002(iyy),iyy=17,24) /103,105, 99, 97,108, 32, 87,111/ + data (st0002(iyy),iyy=25,32) /114,108,100, 32, 80,104,121,115/ + data (st0002(iyy),iyy=33,40) /105, 99, 97,108, 32,108,105,110/ + data (st0002(iyy),iyy=41,43) /101, 32, 0/ + data (st0003(iyy),iyy= 1, 8) / 32, 65,109,112,108,105,102,105/ + data (st0003(iyy),iyy= 9,12) /101,114, 32, 0/ + data (st0004(iyy),iyy= 1, 8) / 32, 68,101,116,101, 99,116,111/ + data (st0004(iyy),iyy= 9,11) /114, 32, 0/ + data st0005 / 32, 67, 67, 68, 32, 0/ + data st0006 / 32,108,105,110,101, 32, 0/ + data (st0007(iyy),iyy= 1, 8) / 70, 75, 53, 32, 70, 75, 52, 32/ + data (st0007(iyy),iyy= 9,16) / 73, 67, 82, 83, 32, 71, 65, 80/ + data (st0007(iyy),iyy=17,24) / 80, 84, 32, 70, 75, 52, 45, 78/ + data (st0007(iyy),iyy=25,32) / 79, 45, 69, 32, 69, 99,108,105/ + data (st0007(iyy),iyy=33,40) /112,116,105, 99, 32, 71, 97,108/ + data (st0007(iyy),iyy=41,48) / 97, 99,116,105, 99, 32, 83,117/ + data (st0007(iyy),iyy=49,56) /112,101,114,103, 97,108, 97, 99/ + data (st0007(iyy),iyy=57,60) /116,105, 99, 0/ + data st0008 /125, 0/ + if (.not.(.false.)) goto 110 + call xprinf(st0001) +110 continue + img = memi(cp+3) + mw = memi(img+3) + im = memi(img+1) + call xstrcy(st0002, msg, 1023 ) + if (.not.(memi(img+7) .ne. 0)) goto 120 + call xstrct(st0003, msg, 1023 ) +120 continue + if (.not.(memi(img+8) .ne. 0)) goto 130 + call xstrct(st0004, msg, 1023 ) +130 continue + if (.not.(memi(img+7) .ne. 0 .or. memi(img+8) .ne. 0)) goto 140 + call xstrct(st0005, msg, 1023 ) +140 continue + call xstrct(st0006, msg, 1023 ) + if (.not.(mw .ne. 0)) goto 150 + call xstrct(st0007, msg, 1023 ) +150 continue + call xstrct(st0008, msg, 1023 ) + call wcspie (msg) +100 return + end + subroutine imggea (cp, id, x, y, pixval, bpmpix) + logical Memb(1) + integer*2 Memc(1) + integer*2 Mems(1) + integer Memi(1) + integer*4 Meml(1) + real Memr(1) + double precision Memd(1) + complex Memx(1) + equivalence (Memb, Memc, Mems, Memi, Meml, Memr, Memd, Memx) + common /Mem/ Memd + integer cp + integer id + real x + real y + double precision pixval + integer bpmpix + integer img + integer wp + integer im + integer bpm + integer pix + integer nl + integer nc + integer ix + integer iy + integer size + integer x1 + integer x2 + integer y1 + integer y2 + integer imgs2r + integer imgs2i + integer*2 st0001(16) + save + integer iyy + data (st0001(iyy),iyy= 1, 8) /105,109,103, 95,103,101,116, 95/ + data (st0001(iyy),iyy= 9,16) /100, 97,116, 97, 58, 32, 10, 0/ + if (.not.(.false.)) goto 110 + call xprinf(st0001) +110 continue + img = memi(cp+3) + wp = memi(img ) + im = memi(img+1) + bpm = memi(img+2) + nc = meml(im+200 +1+8-1) + nl = meml(im+200 +2+8-1) + size = memi(wp+1) + if (.not.(x .lt. 0.0 .or. y .lt. 0.0 .or. x .gt. nc .or. y .gt. + * nl)) goto 120 + goto 100 +120 continue + ix = int (x + 0.5) + iy = int (y + 0.5) + ix = max (size/2+1, ix) + iy = max (size/2+1, iy) + ix = min (ix, (nc-(size/2)-1)) + iy = min (iy, (nl-(size/2)-1)) + x1 = ix - size / 2 + 0.5 + x2 = ix + size / 2 + 0.5 + y1 = iy - size / 2 + 0.5 + y2 = iy + size / 2 + 0.5 + x1 = max (1, x1) + x2 = min (nc, x2) + y1 = max (1, y1) + y2 = min (nl, y2) + pix = imgs2r (im, int(x1), int(x2), int(y1), int(y2)) + if (.not.(bpm .ne. 0 .and. memi(wp+2) .eq. 1)) goto 130 + bpmpix = memi(imgs2i (bpm, ix, ix, iy, iy)) + goto 131 +130 continue + bpmpix = 0 +131 continue + pixval = memr(pix + ((size/2)*size) + (size/2)) * 1.0d0 + if (.not.(memi(wp+1) .gt. 1)) goto 140 + call imgseb (memr(pix), memi(wp+1) , x1, x2, y1, y2) +140 continue +100 return + end + subroutine imgobo (cp, id, temple) + logical Memb(1) + integer*2 Memc(1) + integer*2 Mems(1) + integer Memi(1) + integer*4 Meml(1) + real Memr(1) + double precision Memd(1) + complex Memx(1) + equivalence (Memb, Memc, Mems, Memi, Meml, Memr, Memd, Memx) + common /Mem/ Memd + integer cp + integer id + integer*2 temple(*) + integer im + integer img + integer*2 st0001(15) + integer*2 st0002(7) + integer*2 st0003(7) + integer*2 st0004(96) + save + integer iyy + data (st0001(iyy),iyy= 1, 8) /105,109,103, 95,111, 98,106,105/ + data (st0001(iyy),iyy= 9,15) /110,102,111, 58, 32, 10, 0/ + data st0002 /105,109,103,104,100,114, 0/ + data st0003 /119, 99,115,104,100,114, 0/ + data (st0004(iyy),iyy= 1, 8) / 87, 67, 83, 68, 73, 77, 44, 67/ + data (st0004(iyy),iyy= 9,16) / 84, 89, 80, 69, 42, 44, 67, 82/ + data (st0004(iyy),iyy=17,24) / 80, 73, 88, 42, 44, 67, 82, 86/ + data (st0004(iyy),iyy=25,32) / 65, 76, 42, 44, 67, 68, 42, 44/ + data (st0004(iyy),iyy=33,40) / 67, 82, 79, 84, 65, 50, 44, 76/ + data (st0004(iyy),iyy=41,48) / 84, 86, 42, 44, 76, 84, 77, 42/ + data (st0004(iyy),iyy=49,56) / 44, 87, 83, 86, 42, 44, 87, 65/ + data (st0004(iyy),iyy=57,64) / 84, 42, 44, 82, 65, 42, 44, 68/ + data (st0004(iyy),iyy=65,72) / 69, 67, 42, 44, 69, 81, 85, 73/ + data (st0004(iyy),iyy=73,80) / 78, 79, 88, 44, 69, 80, 79, 67/ + data (st0004(iyy),iyy=81,88) / 72, 44, 77, 74, 68, 42, 44, 68/ + data (st0004(iyy),iyy=89,96) / 65, 84, 69, 45, 79, 66, 83, 0/ + if (.not.(.false.)) goto 110 + call xprinf(st0001) +110 continue + img = memi(cp+3) + im = memi(img+1) + call imgser (im, st0002, temple) + call imgser (im, st0003, st0004) + call imgseo (im, cp) + call imgses (im, cp) +100 return + end + subroutine imgser (im, object, temple) + logical Memb(1) + integer*2 Memc(1) + integer*2 Mems(1) + integer Memi(1) + integer*4 Meml(1) + real Memr(1) + double precision Memd(1) + complex Memx(1) + equivalence (Memb, Memc, Mems, Memi, Meml, Memr, Memd, Memx) + common /Mem/ Memd + integer im + integer*2 object(*) + integer*2 temple(*) + integer sp + integer hdr + integer lbuf + integer line + integer field + integer keyw + integer dict + integer ip + integer lp + integer list + integer nlines + integer in + integer out + integer i + integer hdrsie + logical keywfr + integer stropn + integer getlie + integer stridx + integer imgnfn + integer strdic + integer imofnu + logical streq + logical xerflg + common /xercom/ xerflg + integer*2 st0001(5) + integer*2 st0002(2) + integer*2 st0003(2) + integer*2 st0004(2) + integer*2 st0005(3) + integer*2 st0006(2) + integer*2 st0007(5) + integer*2 st0008(2) + integer*2 st0009(11) + save + integer iyy + data st0001 / 37,115, 32,123, 0/ + data st0002 / 42, 0/ + data st0003 /124, 0/ + data st0004 /124, 0/ + data st0005 / 91,123, 0/ + data st0006 /125, 0/ + data st0007 / 37,115, 32,123, 0/ + data st0008 /125, 0/ + data (st0009(iyy),iyy= 1, 8) / 37,100, 32,123, 32, 10, 10, 10/ + data (st0009(iyy),iyy= 9,11) / 32,125, 0/ + hdrsie = (200 + memi(im+30) - (200 +1024 ) ) * 2 - 1 + hdrsie = hdrsie + 1023 + call smark (sp) + call salloc (hdr, hdrsie, 2) + call salloc (dict, hdrsie, 2) + call salloc (field, 1023 , 2) + call salloc (lbuf, 1023 , 2) + call salloc (line, 1023 , 2) + call salloc (keyw, 8, 2) + in = stropn (memc((im+(200 +1024 ) -1)*2 + 1), hdrsie, 1 ) + if (xerflg) goto 100 + out = stropn (memc(hdr), hdrsie, 3) + if (xerflg) goto 100 + call fprinf (out, st0001) + call pargsr (object) + keywfr = (.not.streq (temple, st0002)) + if (.not.(keywfr)) goto 110 + list = imofnu (im, temple) + if (xerflg) goto 100 + call xstrcy(st0003, memc(dict), hdrsie) +120 if (.not.(imgnfn (list, memc(field), 255 ) .ne. -2).and.(. + * not.xerflg)) goto 121 + if (xerflg) goto 100 + call xstrct(memc(field), memc(dict), hdrsie) + call xstrct(st0004, memc(dict), hdrsie) + goto 120 +121 continue + call imcfnl (list) +110 continue + nlines = 0 +130 if (.not.(getlie (in, memc(lbuf)) .ne. -2).and.(.not.xerflg)) + * goto 131 + if (xerflg) goto 100 + call aclrc (memc(line), 1023 ) + ip = lbuf + lp = line +140 if (.not.(memc(ip) .ne. 0 .and. memc(ip) .ne. 10)) goto 141 + if (.not.(stridx (memc(ip), st0005) .gt. 0)) goto 150 + memc(lp) = 92 + lp = lp + 1 +150 continue + memc(lp) = memc(ip) + ip = ip + 1 + lp = lp + 1 + goto 140 +141 continue + memc(lp) = 10 + memc(lp+1) = 0 + if (.not.(keywfr)) goto 160 + i=0 +170 if (.not.(i .lt. 8 .and. .not.(memc(line+i).eq.32.or.memc + * (line+i).eq.9))) goto 172 + memc(keyw+i) = memc(line+i) +171 i=i+1 + goto 170 +172 continue + memc(keyw+i) = 0 + if (.not.(strdic (memc(keyw), memc(keyw), 8, memc(dict)) + * .eq. 0).and.(.not.xerflg)) goto 180 + if (xerflg) goto 100 + goto 130 +180 continue +160 continue + call putci (out, 32) + if (xerflg) goto 100 + call putlie (out, memc(line)) + if (xerflg) goto 100 + nlines = nlines + 1 + if (.not.(mod(nlines,10) .eq. 0)) goto 190 + call fprinf (out, st0006) + call xfcloe(out) + call wcspie (memc(hdr)) + call aclrc (memc(hdr), hdrsie) + out = stropn (memc(hdr), hdrsie, 3) + if (xerflg) goto 100 + call fprinf (out, st0007) + call pargsr (object) +190 continue + goto 130 +131 continue + call fprinf (out, st0008) + call xfcloe(in) + call xfcloe(out) + call wcspie (memc(hdr)) + call sprinf (memc(hdr), 1023 , st0009) + call pargsr (object) + call wcspie (memc(hdr)) + call sfree (sp) +100 return + end + subroutine imgses (im, cp) + logical Memb(1) + integer*2 Memc(1) + integer*2 Mems(1) + integer Memi(1) + integer*4 Meml(1) + real Memr(1) + double precision Memd(1) + complex Memx(1) + equivalence (Memb, Memc, Mems, Memi, Meml, Memr, Memd, Memx) + common /Mem/ Memd + integer im + integer cp + integer sp + integer buf + integer img + integer co + double precision cx + double precision cy + double precision cx1 + double precision cy1 + double precision dx + double precision dy + double precision x1 + double precision y1 + double precision cosa + double precision sina + double precision angle + integer i + integer j + integer compx + integer compy + integer*4 axis(7 ) + integer*4 lv(7 ) + integer*4 pv1(7 ) + integer*4 pv2(7 ) + integer*2 st0001(24) + integer*2 st0002(4) + integer*2 st0003(4) + save + integer iyy + data (st0001(iyy),iyy= 1, 8) / 99,111,109,112, 97,115,115, 32/ + data (st0001(iyy),iyy= 9,16) / 37,100, 32, 37,103, 32, 37,100/ + data (st0001(iyy),iyy=17,24) / 32, 37,100, 32, 37,115, 0, 0/ + data st0002 / 69, 32, 78, 0/ + data st0003 / 88, 32, 89, 0/ + call smark (sp) + call salloc (buf, 1023 , 2) + call aclrc (memc(buf), 1023 ) + img = memi(cp+3) + co = memi(img+4) + if (.not.(memi(img+5) .ne. 0)) goto 110 + if (.not.(memr(img+9) .gt. 0.0)) goto 120 + angle = -memr(img+9) + goto 121 +120 continue + angle = memr(img+9) + 360.0 +121 continue + cosa = cos (((angle)/57.295779513082320877)) + sina = sin (((angle)/57.295779513082320877)) + cx = meml(im+200 +1+8-1) / 2.0d0 + cy = meml(im+200 +2+8-1) / 2.0d0 + call mwc2td (memi(img+5) , cx, cy, cx1, cy1) + dx = cx + ( 10.0 * sina) + dy = cy + ( 10.0 * cosa) + call mwc2td (memi(img+5) , dx, dy, x1, y1) + if (.not.(y1 .ge. cy1)) goto 130 + compy = 1 + goto 131 +130 continue + compy = -1 +131 continue + dx = cx + (-10.0 * cosa) + dy = cy + ( 10.0 * sina) + call mwc2td (memi(img+5) , dx, dy, x1, y1) + if (.not.(x1 .ge. cx1)) goto 140 + compx = 1 + goto 141 +140 continue + compx = -1 +141 continue + goto 111 +110 continue + lv(1) = 0 + lv(2) = 0 + call imaplv (im, lv, pv1, 2) + lv(1) = 1 + lv(2) = 1 + call imaplv (im, lv, pv2, 2) + i = 1 + axis(1) = 1 + axis(2) = 2 + do 150 j = 1, 7 + if (.not.(pv1(j) .ne. pv2(j))) goto 160 + axis(i) = j + i = i + 1 +160 continue +150 continue +151 continue + compx = - (pv2(axis(1)) - pv1(axis(1))) + compy = (pv2(axis(2)) - pv1(axis(2))) +111 continue + call sprinf (memc(buf), 1023 , st0001) + call pargi (memi(cp) ) + call pargr (memr(img+9) ) + call pargi (compx) + call pargi (compy) + if (.not.(memi(img+3) .ne. 0)) goto 170 + call pargsr (st0002) + goto 171 +170 continue + call pargsr (st0003) +171 continue + call wcspie (memc(buf)) + call sfree (sp) +100 return + end + subroutine imgseo (im, cp) + logical Memb(1) + integer*2 Memc(1) + integer*2 Mems(1) + integer Memi(1) + integer*4 Meml(1) + real Memr(1) + double precision Memd(1) + complex Memx(1) + equivalence (Memb, Memc, Mems, Memi, Meml, Memr, Memd, Memx) + common /Mem/ Memd + integer im + integer cp + integer sp + integer co + integer img + integer mw + integer buf + integer proj + integer radecr + integer fd + integer radecs + integer ctype + integer wtype + integer ndim + double precision crpix1 + double precision crpix2 + double precision crval1 + double precision crval2 + double precision cval1 + double precision cval2 + double precision xscale + double precision yscale + double precision xrot + double precision yrot + double precision r(7 ) + double precision w(7 ) + double precision cd(7 ,7 ) + integer idxstr + integer skstai + integer stropn + integer mwstai + double precision skstad + double precision slepj + double precision slepb + logical fpequd + integer sw0001,sw0002 + logical xerflg + common /xercom/ xerflg + integer*2 st0001(21) + integer*2 st0002(15) + integer*2 st0003(15) + integer*2 st0004(29) + integer*2 st0005(15) + integer*2 st0006(15) + integer*2 st0007(30) + integer*2 st0008(4) + integer*2 st0009(114) + integer*2 st0010(8) + integer*2 st0011(11) + integer*2 st0012(52) + integer*2 st0013(11) + integer*2 st0014(9) + integer*2 st0015(1) + integer*2 st0016(9) + integer*2 st0017(1) + integer*2 st0018(14) + integer*2 st0019(1) + integer*2 st0020(7) + integer*2 st0021(1) + integer*2 st0022(25) + integer*2 st0023(41) + integer*2 st0024(53) + integer*2 st0025(4) + integer*2 st0026(4) + integer*2 st0027(4) + integer*2 st0028(4) + integer*2 st0029(53) + integer*2 st0030(4) + integer*2 st0031(4) + integer*2 st0032(4) + integer*2 st0033(4) + integer*2 st0034(58) + integer*2 st0035(55) + integer*2 st0036(57) + integer*2 st0037(2) + integer*2 st0038(2) + integer*2 st0039(2) + integer*2 st0040(2) + integer*2 st0041(2) + integer*2 st0042(2) + integer*2 st0043(25) + integer*2 st0044(7) + save + integer iyy + data (st0001(iyy),iyy= 1, 8) / 87, 67, 83, 32, 73,110,102,111/ + data (st0001(iyy),iyy= 9,16) / 58, 10, 61, 61, 61, 61, 61, 61/ + data (st0001(iyy),iyy=17,21) / 61, 61, 61, 10, 0/ + data (st0002(iyy),iyy= 1, 8) / 82, 32,116,101,114,109, 58, 32/ + data (st0002(iyy),iyy= 9,15) / 37,103, 32, 37,103, 10, 0/ + data (st0003(iyy),iyy= 1, 8) / 87, 32,116,101,114,109, 58, 32/ + data (st0003(iyy),iyy= 9,15) / 37,103, 32, 37,103, 10, 0/ + data (st0004(iyy),iyy= 1, 8) / 32, 32, 32, 32, 99,100, 58, 32/ + data (st0004(iyy),iyy= 9,16) / 37,103, 32, 37,103, 10, 32, 32/ + data (st0004(iyy),iyy=17,24) / 32, 32, 32, 32, 32, 32, 37,103/ + data (st0004(iyy),iyy=25,29) / 32, 37,103, 10, 0/ + data (st0005(iyy),iyy= 1, 8) / 32,115, 99, 97,108,101, 58, 32/ + data (st0005(iyy),iyy= 9,15) / 37,103, 32, 37,103, 10, 0/ + data (st0006(iyy),iyy= 1, 8) / 32, 32, 32,114,111,116, 58, 32/ + data (st0006(iyy),iyy= 9,15) / 37,103, 32, 37,103, 10, 0/ + data (st0007(iyy),iyy= 1, 8) /124,102,107, 52,124,102,107, 52/ + data (st0007(iyy),iyy= 9,16) / 45,110,111, 45,101,124,102,107/ + data (st0007(iyy),iyy=17,24) / 53,124,105, 99,114,115,124,103/ + data (st0007(iyy),iyy=25,30) / 97,112,112,116,124, 0/ + data st0008 / 70, 75, 53, 0/ + data (st0009(iyy),iyy= 1, 8) /124,108,105,110,124, 97,122,112/ + data (st0009(iyy),iyy= 9,16) /124,116, 97,110,124,115,105,110/ + data (st0009(iyy),iyy=17,24) /124,115,116,103,124, 97,114, 99/ + data (st0009(iyy),iyy=25,32) /124,122,112,110,124,122,101, 97/ + data (st0009(iyy),iyy=33,40) /124, 97,105,114,124, 99,121,112/ + data (st0009(iyy),iyy=41,48) /124, 99, 97,114,124,109,101,114/ + data (st0009(iyy),iyy=49,56) /124, 99,101, 97,124, 99,111,112/ + data (st0009(iyy),iyy=57,64) /124, 99,111,100,124, 99,111,101/ + data (st0009(iyy),iyy=65,72) /124, 99,111,111,124, 98,111,110/ + data (st0009(iyy),iyy=73,80) /124,112, 99,111,124,103,108,115/ + data (st0009(iyy),iyy=81,88) /124,112, 97,114,124, 97,105,116/ + data (st0009(iyy),iyy=89,96) /124,109,111,108,124, 99,115, 99/ + data (st0009(iyy),iyy=97,104) /124,113,115, 99,124,116,115, 99/ + data (st0009(iyy),iyy=105,112) /124,116,110,120,124,122,112,120/ + data (st0009(iyy),iyy=113,114) /124, 0/ + data st0010 /108,111,103,105, 99, 97,108, 0/ + data (st0011(iyy),iyy= 1, 8) /119, 99,115,105,110,102,111, 32/ + data (st0011(iyy),iyy= 9,11) /123, 10, 0/ + data (st0012(iyy),iyy= 1, 8) / 32, 32, 32, 32, 32, 32, 80,114/ + data (st0012(iyy),iyy= 9,16) /111,106,101, 99,116,105,111,110/ + data (st0012(iyy),iyy=17,24) / 58, 32, 32, 37, 45, 54,115, 9/ + data (st0012(iyy),iyy=25,32) / 32, 32, 32, 32, 32, 32, 32, 32/ + data (st0012(iyy),iyy=33,40) / 32, 32, 32, 32, 83,121,115,116/ + data (st0012(iyy),iyy=41,48) /101,109, 58, 32, 32, 37,115, 32/ + data (st0012(iyy),iyy=49,52) / 37,115, 10, 0/ + data (st0013(iyy),iyy= 1, 8) / 69,113,117, 97,116,111,114,105/ + data (st0013(iyy),iyy= 9,11) / 97,108, 0/ + data (st0014(iyy),iyy= 1, 8) / 69, 99,108,105,112,116,105, 99/ + data (st0014(iyy),iyy= 9, 9) / 0/ + data st0015 / 0/ + data (st0016(iyy),iyy= 1, 8) / 71, 97,108, 97, 99,116,105, 99/ + data (st0016(iyy),iyy= 9, 9) / 0/ + data st0017 / 0/ + data (st0018(iyy),iyy= 1, 8) / 83,117,112,101,114, 71, 97,108/ + data (st0018(iyy),iyy= 9,14) / 97, 99,116,105, 99, 0/ + data st0019 / 0/ + data st0020 / 76,105,110,101, 97,114, 0/ + data st0021 / 0/ + data (st0022(iyy),iyy= 1, 8) / 32, 32, 32, 32, 32, 82, 97, 47/ + data (st0022(iyy),iyy= 9,16) / 68,101, 99, 32, 97,120,101,115/ + data (st0022(iyy),iyy=17,24) / 58, 32, 32, 37,100, 47, 37,100/ + data (st0022(iyy),iyy=25,25) / 0/ + data (st0023(iyy),iyy= 1, 8) / 32, 32, 32, 32, 32, 32, 32, 32/ + data (st0023(iyy),iyy= 9,16) / 32, 32, 32, 32, 32, 32, 32, 32/ + data (st0023(iyy),iyy=17,24) / 32, 32, 68,105,109,101,110,115/ + data (st0023(iyy),iyy=25,32) /105,111,110,115, 58, 32, 32, 37/ + data (st0023(iyy),iyy=33,40) /100, 32,120, 32, 37,100, 10, 10/ + data (st0023(iyy),iyy=41,41) / 0/ + data (st0024(iyy),iyy= 1, 8) / 32, 32, 32, 32, 32, 32, 67,101/ + data (st0024(iyy),iyy= 9,16) /110,116,101,114, 32, 80,111,115/ + data (st0024(iyy),iyy=17,24) / 58, 32, 37, 51,115, 58, 32, 32/ + data (st0024(iyy),iyy=25,32) / 37, 45, 49, 50, 72, 32, 32, 32/ + data (st0024(iyy),iyy=33,40) / 32, 32, 32, 32, 32, 32, 32, 32/ + data (st0024(iyy),iyy=41,48) / 37, 51,115, 58, 32, 32, 37, 45/ + data (st0024(iyy),iyy=49,53) / 49, 50,104, 10, 0/ + data st0025 / 32, 82, 65, 0/ + data st0026 / 76,111,110, 0/ + data st0027 / 68,101, 99, 0/ + data st0028 / 76, 97,116, 0/ + data (st0029(iyy),iyy= 1, 8) / 32, 32, 32, 82,101,102,101,114/ + data (st0029(iyy),iyy= 9,16) /101,110, 99,101, 32, 80,111,115/ + data (st0029(iyy),iyy=17,24) / 58, 32, 37, 51,115, 58, 32, 32/ + data (st0029(iyy),iyy=25,32) / 37, 45, 49, 50, 72, 32, 32, 32/ + data (st0029(iyy),iyy=33,40) / 32, 32, 32, 32, 32, 32, 32, 32/ + data (st0029(iyy),iyy=41,48) / 37, 51,115, 58, 32, 32, 37, 45/ + data (st0029(iyy),iyy=49,53) / 49, 50,104, 10, 0/ + data st0030 / 32, 82, 65, 0/ + data st0031 / 76,111,110, 0/ + data st0032 / 68,101, 99, 0/ + data st0033 / 76, 97,116, 0/ + data (st0034(iyy),iyy= 1, 8) / 32, 82,101,102,101,114,101,110/ + data (st0034(iyy),iyy= 9,16) / 99,101, 32, 80,105,120,101,108/ + data (st0034(iyy),iyy=17,24) / 58, 32, 32, 32, 88, 58, 32, 32/ + data (st0034(iyy),iyy=25,32) / 37, 45, 57, 46, 52,102, 32, 32/ + data (st0034(iyy),iyy=33,40) / 32, 32, 32, 32, 32, 32, 32, 32/ + data (st0034(iyy),iyy=41,48) / 32, 32, 32, 32, 32, 32, 89, 58/ + data (st0034(iyy),iyy=49,56) / 32, 32, 37, 45, 57, 46, 52,102/ + data (st0034(iyy),iyy=57,58) / 10, 0/ + data (st0035(iyy),iyy= 1, 8) / 32, 32, 32, 32, 32, 80,108, 97/ + data (st0035(iyy),iyy= 9,16) /116,101, 32, 83, 99, 97,108,101/ + data (st0035(iyy),iyy=17,24) / 58, 32, 32, 37, 45, 56,102, 32/ + data (st0035(iyy),iyy=25,32) / 32, 32, 32, 32, 32, 32, 32, 32/ + data (st0035(iyy),iyy=33,40) / 32, 32, 32, 32, 32, 82,111,116/ + data (st0035(iyy),iyy=41,48) / 32, 65,110,103,108,101, 58, 32/ + data (st0035(iyy),iyy=49,55) / 32, 37, 45, 56,102, 10, 0/ + data (st0036(iyy),iyy= 1, 8) / 32, 32, 32, 32, 32, 32, 32, 32/ + data (st0036(iyy),iyy= 9,16) / 32, 69,113,117,105,110,111,120/ + data (st0036(iyy),iyy=17,24) / 58, 32, 32, 37,115, 37, 56,102/ + data (st0036(iyy),iyy=25,32) / 32, 32, 32, 32, 32, 32, 32, 32/ + data (st0036(iyy),iyy=33,40) / 32, 32, 32, 32, 32, 32, 32, 32/ + data (st0036(iyy),iyy=41,48) / 32, 69,112,111, 99,104, 58, 32/ + data (st0036(iyy),iyy=49,56) / 32, 37,115, 37, 46, 54,102, 10/ + data (st0036(iyy),iyy=57,57) / 0/ + data st0037 / 74, 0/ + data st0038 / 74, 0/ + data st0039 / 32, 0/ + data st0040 / 32, 0/ + data st0041 / 66, 0/ + data st0042 / 66, 0/ + data (st0043(iyy),iyy= 1, 8) / 32, 32, 32, 32, 32, 32, 32, 32/ + data (st0043(iyy),iyy= 9,16) / 32, 32, 32, 32, 32, 77, 74, 68/ + data (st0043(iyy),iyy=17,24) / 58, 32, 32, 37, 46, 54,102, 10/ + data (st0043(iyy),iyy=25,25) / 0/ + data st0044 /125, 10, 32, 10, 32, 10, 0/ + call smark (sp) + call salloc (buf, 1023 , 2) + call salloc (proj, 255 , 2) + call salloc (radecr, 255 , 2) + fd = stropn (memc(buf), 1023 , 3) + if (xerflg) goto 100 + img = memi(cp+3) + co = memi(img+4) + radecs = skstai (co, 8) + ctype = skstai (co, 7) + wtype = skstai (co, 9) + mw = memi(img+3) + if (.not.(mw .ne. 0)) goto 110 + ndim = mwstai (mw, 5 ) + call wcsgfm (mw, r, w, cd, ndim) + crpix1 = r(1) + crpix2 = r(2) + crval1 = w(1) + crval2 = w(2) + xscale = sqrt (cd(1,1)**2 + cd(2,1)**2) * 3600.0d0 + yscale = sqrt (cd(1,2)**2 + cd(2,2)**2) * 3600.0d0 + xrot = 0.0 + yrot = 0.0 + if (.not.(.not.fpequd (cd(1,1), 0.0d0))) goto 120 + xrot = ((atan ( cd(2,1) / cd(1,1)))*57.295779513082320877 + * d0) +120 continue + if (.not.(.not.fpequd (cd(2,2), 0.0d0))) goto 130 + yrot = ((atan (-cd(1,2) / cd(2,2)))*57.295779513082320877 + * d0) +130 continue + goto 111 +110 continue + ndim = 2 + xscale = 1.0 + yscale = 1.0 + xrot = 0.0 + yrot = 0.0 +111 continue + if (.not.(.false.)) goto 140 + call xprinf(st0001) + call xprinf(st0002) + call pargd(r(1)) + call pargd(r(2)) + call xprinf(st0003) + call pargd(w(1)) + call pargd(w(2)) + call xprinf(st0004) + call pargd(cd(1,1)) + call pargd(cd(1,2)) + call pargd(cd(2,1)) + call pargd(cd(2,2)) + call xprinf(st0005) + call pargd(xscale) + call pargd(yscale) + call xprinf(st0006) + call pargd(xrot) + call pargd(yrot) +140 continue + memr(img+10) = (xscale + yscale) / 2.0d0 + memr(img+9) = xrot + if (.not.(idxstr (radecs, memc(radecr), 255 , st0007) .le. 0)) + * goto 150 + call xstrcy(st0008, memc(radecr), 255 ) +150 continue + call strupr (memc(radecr)) + if (.not.(idxstr (wtype, memc(proj), 255 , st0009) .le. 0)) + * goto 160 + call xstrcy(st0010, memc(proj), 255 ) +160 continue + call strupr (memc(proj)) + call fprinf (fd, st0011) + call fprinf (fd, st0012) + call pargsr (memc(proj)) + sw0001=(ctype) + goto 170 +180 continue + call pargsr (st0013) + call pargsr (memc(radecr)) + goto 171 +190 continue + call pargsr (st0014) + call pargsr (st0015) + goto 171 +200 continue + call pargsr (st0016) + call pargsr (st0017) + goto 171 +210 continue + call pargsr (st0018) + call pargsr (st0019) + goto 171 +220 continue + call pargsr (st0020) + call pargsr (st0021) + goto 171 +170 continue + if (sw0001.lt.1.or.sw0001.gt.4) goto 220 + goto (180,190,200,210),sw0001 +171 continue + call fprinf (fd, st0022) + call pargi (skstai (co, 10)) + call pargi (skstai (co, 11)) + call fprinf (fd, st0023) + call pargi (meml(im+200 +1+8-1) ) + call pargi (meml(im+200 +2+8-1) ) + call fprinf (fd, st0024) + if (.not.(ctype .eq. 1)) goto 230 + call pargsr (st0025) + goto 231 +230 continue + call pargsr (st0026) +231 continue + call pargd (cval1) + if (.not.(ctype .eq. 1)) goto 240 + call pargsr (st0027) + goto 241 +240 continue + call pargsr (st0028) +241 continue + call pargd (cval2) + call fprinf (fd, st0029) + if (.not.(ctype .eq. 1)) goto 250 + call pargsr (st0030) + goto 251 +250 continue + call pargsr (st0031) +251 continue + call pargd (crval1) + if (.not.(ctype .eq. 1)) goto 260 + call pargsr (st0032) + goto 261 +260 continue + call pargsr (st0033) +261 continue + call pargd (crval2) + call fprinf (fd, st0034) + call pargd (crpix1) + call pargd (crpix2) + call fprinf (fd, st0035) + call pargr (memr(img+10) ) + call pargr (memr(img+9) ) + call fprinf (fd, st0036) + sw0002=(radecs) + goto 270 +280 continue + call pargsr (st0037) + call pargd (skstad(co,5)) + call pargsr (st0038) + call pargd (slepj(skstad(co,6))) + goto 271 +290 continue + if (.not.(memi(img+11) .eq. 1)) goto 300 + call pargsr (st0039) + call pargd (1.6d308) + call pargsr (st0040) + call pargd (1.6d308) + goto 301 +300 continue + call pargsr (st0041) + call pargd (skstad(co,5)) + call pargsr (st0042) + call pargd (slepb(skstad(co,6))) +301 continue + goto 271 +270 continue + if (sw0002.eq.3) goto 280 + if (sw0002.eq.4) goto 280 + goto 290 +271 continue + call fprinf (fd, st0043) + call pargd (skstad(co,6)) + call fprinf (fd, st0044) + call xfcloe(fd) + call wcspie (memc(buf)) + call sfree (sp) +100 return + end + subroutine imgseb (pixtab, size, x1, x2, y1, y2) + integer size + integer x1 + integer x2 + integer y1 + integer y2 + real pixtab(*) + logical Memb(1) + integer*2 Memc(1) + integer*2 Mems(1) + integer Memi(1) + integer*4 Meml(1) + real Memr(1) + double precision Memd(1) + complex Memx(1) + equivalence (Memb, Memc, Mems, Memi, Meml, Memr, Memd, Memx) + common /Mem/ Memd + integer sp + integer buf + integer el + integer i + integer j + integer npix + real pix + real sum + real sum2 + real mean + real var + real stdev + real x + real y + integer*2 st0001(20) + integer*2 st0002(10) + integer*2 st0003(2) + integer*2 st0004(5) + integer*2 st0005(2) + integer*2 st0006(10) + integer*2 st0007(3) + integer*2 st0008(2) + integer*2 st0009(10) + integer*2 st0010(3) + integer*2 st0011(20) + integer*2 st0012(2) + save + integer iyy + data (st0001(iyy),iyy= 1, 8) /112,105,120,116, 97, 98, 32,123/ + data (st0001(iyy),iyy= 9,16) / 10,123, 10,116, 97, 98,108,101/ + data (st0001(iyy),iyy=17,20) / 32,123, 10, 0/ + data (st0002(iyy),iyy= 1, 8) / 32,123, 37, 49, 48, 46, 49,102/ + data (st0002(iyy),iyy= 9,10) /125, 0/ + data st0003 / 10, 0/ + data st0004 /125, 10,125, 10, 0/ + data st0005 /123, 0/ + data (st0006(iyy),iyy= 1, 8) / 32,123, 37, 49, 48, 46, 49,102/ + data (st0006(iyy),iyy= 9,10) /125, 0/ + data st0007 /125, 10, 0/ + data st0008 /123, 0/ + data (st0009(iyy),iyy= 1, 8) / 32,123, 37, 49, 48, 46, 49,102/ + data (st0009(iyy),iyy= 9,10) /125, 0/ + data st0010 /125, 10, 0/ + data (st0011(iyy),iyy= 1, 8) / 32,123, 32, 37, 49, 48, 46, 50/ + data (st0011(iyy),iyy= 9,16) /102, 32, 37, 49, 48, 46, 52,102/ + data (st0011(iyy),iyy=17,20) / 32,125, 10, 0/ + data st0012 /125, 0/ + call smark (sp) + call salloc (buf, (6*1023 ), 2) + call salloc (el, 255 , 2) + call xstrcy(st0001, memc(buf), (6*1023 )) + sum = 0.0 + sum2 = 0.0 + npix = size * size + i=size - 1 +110 if (.not.(i .ge. 0)) goto 112 + j=1 +120 if (.not.(j .le. size)) goto 122 + pix = pixtab((i * size) + j) + sum = sum + pix + sum2 = sum2 + (pix * pix) + call sprinf (memc(el), 255 , st0002) + call pargr (pix) + call xstrct(memc(el), memc(buf), (6*1023 )) +121 j=j+1 + goto 120 +122 continue + call xstrct(st0003, memc(buf), (6*1023 )) +111 i=i-1 + goto 110 +112 continue + call xstrct(st0004, memc(buf), (6*1023 )) + call xstrct(st0005, memc(buf), (6*1023 )) + x = x1 +130 if (.not.(x .le. x2)) goto 132 + call sprinf (memc(el), 255 , st0006) + call pargr (x) + call xstrct(memc(el), memc(buf), (6*1023 )) +131 x = x + 1. + goto 130 +132 continue + call xstrct(st0007, memc(buf), (6*1023 )) + call xstrct(st0008, memc(buf), (6*1023 )) + y = y2 +140 if (.not.(y .ge. y1)) goto 142 + call sprinf (memc(el), 255 , st0009) + call pargr (y) + call xstrct(memc(el), memc(buf), (6*1023 )) +141 y = y - 1. + goto 140 +142 continue + call xstrct(st0010, memc(buf), (6*1023 )) + mean = sum / real(npix) + var = (sum2 - sum * mean) / real(npix - 1) + if (.not.(var .le. 0)) goto 150 + stdev = 0.0 + goto 151 +150 continue + stdev = sqrt (var) +151 continue + call sprinf (memc(el), 255 , st0011) + call pargr (mean) + call pargr (stdev) + call xstrct(memc(el), memc(buf), (6*1023 )) + call xstrct(st0012, memc(buf), (6*1023 )) + call wcspie (memc(buf)) + call sfree (sp) +100 return + end + integer function imgams (im, mw) + logical Memb(1) + integer*2 Memc(1) + integer*2 Mems(1) + integer Memi(1) + integer*4 Meml(1) + real Memr(1) + double precision Memd(1) + complex Memx(1) + equivalence (Memb, Memc, Mems, Memi, Meml, Memr, Memd, Memx) + common /Mem/ Memd + integer im + integer mw + integer ct + double precision r(7 ) + double precision w(7 ) + double precision cd(7 ,7 ) + double precision imgetd + integer mwsctn + integer*2 st0001(5) + integer*2 st0002(5) + integer*2 st0003(7) + integer*2 st0004(7) + integer*2 st0005(10) + integer*2 st0006(8) + integer*2 st0007(10) + save + integer iyy + data st0001 / 65, 84, 86, 49, 0/ + data st0002 / 65, 84, 86, 50, 0/ + data st0003 / 65, 84, 77, 49, 95, 49, 0/ + data st0004 / 65, 84, 77, 50, 95, 50, 0/ + data (st0005(iyy),iyy= 1, 8) / 97,109,112,108,105,102,105,101/ + data (st0005(iyy),iyy= 9,10) /114, 0/ + data st0006 /108,111,103,105, 99, 97,108, 0/ + data (st0007(iyy),iyy= 1, 8) / 97,109,112,108,105,102,105,101/ + data (st0007(iyy),iyy= 9,10) /114, 0/ + r(1) = 0.0d0 + r(2) = 0.0d0 + w(1) = imgetd (im, st0001) + w(2) = imgetd (im, st0002) + cd(1,1) = imgetd (im, st0003) + cd(1,2) = 0.0d0 + cd(2,1) = 0.0d0 + cd(2,2) = imgetd (im, st0004) + call mwnewm (mw, st0005, 2) + call mwswtd (mw, r, w, cd, 2) + ct = mwsctn (mw, st0006, st0007, 3) + call mwsdes (mw) + imgams = (ct) + goto 100 +100 return + end + integer function imgdes (im, mw) + logical Memb(1) + integer*2 Memc(1) + integer*2 Mems(1) + integer Memi(1) + integer*4 Meml(1) + real Memr(1) + double precision Memd(1) + complex Memx(1) + equivalence (Memb, Memc, Mems, Memi, Meml, Memr, Memd, Memx) + common /Mem/ Memd + integer im + integer mw + integer ct + double precision r(7 ) + double precision w(7 ) + double precision cd(7 ,7 ) + double precision imgetd + integer mwsctn + integer*2 st0001(5) + integer*2 st0002(5) + integer*2 st0003(7) + integer*2 st0004(7) + integer*2 st0005(9) + integer*2 st0006(8) + integer*2 st0007(9) + save + integer iyy + data st0001 / 68, 84, 86, 49, 0/ + data st0002 / 68, 84, 86, 50, 0/ + data st0003 / 68, 84, 77, 49, 95, 49, 0/ + data st0004 / 68, 84, 77, 50, 95, 50, 0/ + data (st0005(iyy),iyy= 1, 8) /100,101,116,101, 99,116,111,114/ + data (st0005(iyy),iyy= 9, 9) / 0/ + data st0006 /108,111,103,105, 99, 97,108, 0/ + data (st0007(iyy),iyy= 1, 8) /100,101,116,101, 99,116,111,114/ + data (st0007(iyy),iyy= 9, 9) / 0/ + r(1) = 0.0d0 + r(2) = 0.0d0 + w(1) = imgetd (im, st0001) + w(2) = imgetd (im, st0002) + cd(1,1) = imgetd (im, st0003) + cd(1,2) = 0.0d0 + cd(2,1) = 0.0d0 + cd(2,2) = imgetd (im, st0004) + call mwnewm (mw, st0005, 2) + call mwswtd (mw, r, w, cd, 2) + ct = mwsctn (mw, st0006, st0007, 3) + call mwsdes (mw) + imgdes = (ct) + goto 100 +100 return + end + subroutine imgcos (cp, line, wcsnae, xunits, yunits) + logical Memb(1) + integer*2 Memc(1) + integer*2 Mems(1) + integer Memi(1) + integer*4 Meml(1) + real Memr(1) + double precision Memd(1) + complex Memx(1) + equivalence (Memb, Memc, Mems, Memi, Meml, Memr, Memd, Memx) + common /Mem/ Memd + integer cp + integer line + integer*2 wcsnae(*) + integer*2 xunits(*) + integer*2 yunits(*) + integer img + integer co + integer wp + integer sp + integer proj + integer radecr + integer xstrcp + integer skstai + integer idxstr + integer sw0001,sw0002 + integer*2 st0001(5) + integer*2 st0002(5) + integer*2 st0003(5) + integer*2 st0004(5) + integer*2 st0005(5) + integer*2 st0006(5) + integer*2 st0007(5) + integer*2 st0008(5) + integer*2 st0009(9) + integer*2 st0010(5) + integer*2 st0011(5) + integer*2 st0012(9) + integer*2 st0013(5) + integer*2 st0014(5) + integer*2 st0015(14) + integer*2 st0016(5) + integer*2 st0017(5) + integer*2 st0018(5) + integer*2 st0019(5) + integer*2 st0020(2) + integer*2 st0021(2) + integer*2 st0022(9) + integer*2 st0023(3) + integer*2 st0024(4) + integer*2 st0025(4) + integer*2 st0026(5) + integer*2 st0027(5) + integer*2 st0028(30) + integer*2 st0029(4) + integer*2 st0030(2) + integer*2 st0031(3) + integer*2 st0032(114) + integer*2 st0033(7) + integer*2 st0034(4) + integer*2 st0035(4) + integer*2 st0036(5) + integer*2 st0037(6) + integer*2 st0038(9) + save + integer iyy + data st0001 / 32, 32, 82, 65, 0/ + data st0002 / 32, 68,101, 99, 0/ + data st0003 / 69, 76,111,110, 0/ + data st0004 / 69, 76, 97,116, 0/ + data st0005 / 71, 76,111,110, 0/ + data st0006 / 71, 76, 97,116, 0/ + data st0007 / 83, 76,111,110, 0/ + data st0008 / 83, 76, 97,116, 0/ + data (st0009(iyy),iyy= 1, 8) /101, 99,108,105,112,116,105, 99/ + data (st0009(iyy),iyy= 9, 9) / 0/ + data st0010 / 69, 76,111,110, 0/ + data st0011 / 69, 76, 97,116, 0/ + data (st0012(iyy),iyy= 1, 8) /103, 97,108, 97, 99,116,105, 99/ + data (st0012(iyy),iyy= 9, 9) / 0/ + data st0013 / 71, 76,111,110, 0/ + data st0014 / 71, 76, 97,116, 0/ + data (st0015(iyy),iyy= 1, 8) /115,117,112,101,114,103, 97,108/ + data (st0015(iyy),iyy= 9,14) / 97, 99,116,105, 99, 0/ + data st0016 / 83, 76,111,110, 0/ + data st0017 / 83, 76, 97,116, 0/ + data st0018 / 32, 32, 82, 65, 0/ + data st0019 / 32, 68,101, 99, 0/ + data st0020 / 88, 0/ + data st0021 / 89, 0/ + data (st0022(iyy),iyy= 1, 8) / 37,115, 45, 37,115, 45, 37,115/ + data (st0022(iyy),iyy= 9, 9) / 0/ + data st0023 / 69, 81, 0/ + data st0024 / 69, 67, 76, 0/ + data st0025 / 71, 65, 76, 0/ + data st0026 / 83, 71, 65, 76, 0/ + data st0027 / 85, 78, 75, 78, 0/ + data (st0028(iyy),iyy= 1, 8) /124,102,107, 52,124,102,107, 52/ + data (st0028(iyy),iyy= 9,16) / 45,110,111, 45,101,124,102,107/ + data (st0028(iyy),iyy=17,24) / 53,124,105, 99,114,115,124,103/ + data (st0028(iyy),iyy=25,30) / 97,112,112,116,124, 0/ + data st0029 / 70, 75, 53, 0/ + data st0030 / 45, 0/ + data st0031 / 45, 45, 0/ + data (st0032(iyy),iyy= 1, 8) /124,108,105,110,124, 97,122,112/ + data (st0032(iyy),iyy= 9,16) /124,116, 97,110,124,115,105,110/ + data (st0032(iyy),iyy=17,24) /124,115,116,103,124, 97,114, 99/ + data (st0032(iyy),iyy=25,32) /124,122,112,110,124,122,101, 97/ + data (st0032(iyy),iyy=33,40) /124, 97,105,114,124, 99,121,112/ + data (st0032(iyy),iyy=41,48) /124, 99, 97,114,124,109,101,114/ + data (st0032(iyy),iyy=49,56) /124, 99,101, 97,124, 99,111,112/ + data (st0032(iyy),iyy=57,64) /124, 99,111,100,124, 99,111,101/ + data (st0032(iyy),iyy=65,72) /124, 99,111,111,124, 98,111,110/ + data (st0032(iyy),iyy=73,80) /124,112, 99,111,124,103,108,115/ + data (st0032(iyy),iyy=81,88) /124,112, 97,114,124, 97,105,116/ + data (st0032(iyy),iyy=89,96) /124,109,111,108,124, 99,115, 99/ + data (st0032(iyy),iyy=97,104) /124,113,115, 99,124,116,115, 99/ + data (st0032(iyy),iyy=105,112) /124,116,110,120,124,122,112,120/ + data (st0032(iyy),iyy=113,114) /124, 0/ + data st0033 /108,105,110,101, 97,114, 0/ + data st0034 /102,107, 52, 0/ + data st0035 /102,107, 53, 0/ + data st0036 /105, 99,114,115, 0/ + data st0037 /103, 97,112,112,116, 0/ + data (st0038(iyy),iyy= 1, 8) /102,107, 52, 45,110,111, 45,101/ + data (st0038(iyy),iyy= 9, 9) / 0/ + img = memi(cp+3) + co = memi(img+4) + wp = memi(img ) + if (.not.(memi(memi(wp+3) +line-1) .eq. 4 )) goto 110 + sw0001=(skstai(co,7)) + goto 120 +130 continue + call xstrcy(st0001, xunits, 32 ) + call xstrcy(st0002, yunits, 32 ) + goto 121 +140 continue + call xstrcy(st0003, xunits, 32 ) + call xstrcy(st0004, yunits, 32 ) + goto 121 +150 continue + call xstrcy(st0005, xunits, 32 ) + call xstrcy(st0006, yunits, 32 ) + goto 121 +160 continue + call xstrcy(st0007, xunits, 32 ) + call xstrcy(st0008, yunits, 32 ) + goto 121 +120 continue + if (sw0001.lt.1.or.sw0001.gt.4) goto 121 + goto (130,140,150,160),sw0001 +121 continue + goto 111 +110 continue + if (.not.(memi(memi(wp+3) +line-1) .eq. 5 )) goto 170 + call xstrcy(memc(memi(wp+4) +(32 *(line-1))), wcsnae, 32 ) + call strlwr (wcsnae) + if (.not.(xstrcp(wcsnae,st0009) .eq. 0)) goto 180 + call xstrcy(st0010, xunits, 32 ) + call xstrcy(st0011, yunits, 32 ) + goto 181 +180 continue + if (.not.(xstrcp(wcsnae,st0012) .eq. 0)) goto 190 + call xstrcy(st0013, xunits, 32 ) + call xstrcy(st0014, yunits, 32 ) + goto 191 +190 continue + if (.not.(xstrcp(wcsnae,st0015) .eq. 0)) goto 200 + call xstrcy(st0016, xunits, 32 ) + call xstrcy(st0017, yunits, 32 ) + goto 201 +200 continue + call xstrcy(st0018, xunits, 32 ) + call xstrcy(st0019, yunits, 32 ) +201 continue +191 continue +181 continue + goto 171 +170 continue + call xstrcy(st0020, xunits, 32 ) + call xstrcy(st0021, yunits, 32 ) +171 continue +111 continue + if (.not.(memi(memi(wp+3) +line-1) .ne. 4 )) goto 210 + call xstrcy(memc(memi(wp+4) +(32 *(line-1))), wcsnae, 32 ) + goto 211 +210 continue + call smark (sp) + call salloc (radecr, 255 , 2) + call salloc (proj, 255 , 2) + call sprinf (wcsnae, 32 , st0022) + sw0002=(skstai(co,7)) + goto 220 +230 continue + call pargsr (st0023) + goto 221 +240 continue + call pargsr (st0024) + goto 221 +250 continue + call pargsr (st0025) + goto 221 +260 continue + call pargsr (st0026) + goto 221 +270 continue + call pargsr (st0027) + goto 221 +220 continue + if (sw0002.lt.1.or.sw0002.gt.4) goto 270 + goto (230,240,250,260),sw0002 +221 continue + if (.not.(skstai(co,7) .eq. 1)) goto 280 + if (.not.(idxstr(skstai(co,8), memc(radecr), 255 , st0028 + * ) .le. 0)) goto 290 + call xstrcy(st0029, memc(radecr), 255 ) +290 continue + call strupr (memc(radecr)) + call pargsr (memc(radecr)) + goto 281 +280 continue + if (.not.(skstai(co,7) .eq. 4)) goto 300 + call pargsr (st0030) + goto 301 +300 continue + call pargsr (st0031) +301 continue +281 continue + if (.not.(idxstr(skstai(co,9), memc(proj), 255 , st0032) .le + * . 0)) goto 310 + call xstrcy(st0033, memc(proj), 255 ) +310 continue + call strupr (memc(proj)) + call pargsr (memc(proj)) + call sfree (sp) +211 continue + if (.not.(xstrcp(wcsnae, st0034) .eq. 0 .or. xstrcp(wcsnae, + * st0035) .eq. 0 .or. xstrcp(wcsnae, st0036) .eq. 0 .or. xstrcp( + * wcsnae, st0037) .eq. 0 .or. xstrcp(wcsnae, st0038) .eq. 0)) + * goto 320 + call strupr (wcsnae) + goto 321 +320 continue + if (.not.((wcsnae(1).ge.97.and.wcsnae(1).le.122))) goto 330 + wcsnae(1) = (wcsnae(1)+65-97) +330 continue +321 continue +100 return + end + subroutine imgcot (cp, line, xval, yval, xc, yc) + logical Memb(1) + integer*2 Memc(1) + integer*2 Mems(1) + integer Memi(1) + integer*4 Meml(1) + real Memr(1) + double precision Memd(1) + complex Memx(1) + equivalence (Memb, Memc, Mems, Memi, Meml, Memr, Memd, Memx) + common /Mem/ Memd + integer cp + integer line + double precision xval + double precision yval + integer*2 xc(*) + integer*2 yc(*) + integer img + integer co + integer wp + integer*2 xfmt(32 +1) + integer*2 yfmt(32 +1) + integer skstai + logical streq + integer*2 st0001(7) + integer*2 st0002(7) + integer*2 st0003(9) + integer*2 st0004(9) + integer*2 st0005(14) + integer*2 st0006(3) + integer*2 st0007(5) + integer*2 st0008(5) + integer*2 st0009(7) + integer*2 st0010(7) + integer*2 st0011(5) + integer*2 st0012(5) + integer*2 st0013(3) + integer*2 st0014(7) + integer*2 st0015(7) + save + integer iyy + data st0001 / 37, 49, 48, 46, 50,102, 0/ + data st0002 / 37, 49, 48, 46, 50,102, 0/ + data (st0003(iyy),iyy= 1, 8) /101, 99,108,105,112,116,105, 99/ + data (st0003(iyy),iyy= 9, 9) / 0/ + data (st0004(iyy),iyy= 1, 8) /103, 97,108, 97, 99,116,105, 99/ + data (st0004(iyy),iyy= 9, 9) / 0/ + data (st0005(iyy),iyy= 1, 8) /115,117,112,101,114,103, 97,108/ + data (st0005(iyy),iyy= 9,14) / 97, 99,116,105, 99, 0/ + data st0006 / 37,104, 0/ + data st0007 / 37, 46, 50, 72, 0/ + data st0008 / 37, 46, 49,104, 0/ + data st0009 / 37, 49, 48, 46, 50,102, 0/ + data st0010 / 37, 49, 48, 46, 50,102, 0/ + data st0011 / 37, 46, 50, 72, 0/ + data st0012 / 37, 46, 49,104, 0/ + data st0013 / 37,104, 0/ + data st0014 / 37, 49, 48, 46, 50,102, 0/ + data st0015 / 37, 49, 48, 46, 50,102, 0/ + img = memi(cp+3) + co = memi(img+4) + wp = memi(img ) + if (.not.(memi(memi(wp+5) +line-1) .eq. 1 )) goto 110 + if (.not.(memi(img+3) .eq. 0)) goto 120 + call xstrcy(st0001, xfmt, 32 ) + call xstrcy(st0002, yfmt, 32 ) + goto 121 +120 continue + if (.not.(memi(memi(wp+3) +line-1) .eq. 4 .or. memi(memi( + * wp+3) +line-1) .eq. 5 )) goto 130 + if (.not.(streq(memc(memi(wp+4) +(32 *(line-1))), + * st0003) .or. streq(memc(memi(wp+4) +(32 *(line-1))), + * st0004) .or. streq(memc(memi(wp+4) +(32 *(line-1))), + * st0005))) goto 140 + call xstrcy(st0006, xfmt, 32 ) + goto 141 +140 continue + call xstrcy(st0007, xfmt, 32 ) +141 continue + call xstrcy(st0008, yfmt, 32 ) + goto 131 +130 continue + call xstrcy(st0009, xfmt, 32 ) + call xstrcy(st0010, yfmt, 32 ) +131 continue +121 continue + goto 111 +110 continue + if (.not.(memi(memi(wp+5) +line-1) .eq. 2 )) goto 150 + if (.not.(skstai(co, 7) .eq. 1)) goto 160 + call xstrcy(st0011, xfmt, 32 ) + goto 161 +160 continue + call xstrcy(st0012, xfmt, 32 ) +161 continue + call xstrcy(st0013, yfmt, 32 ) + goto 151 +150 continue + call xstrcy(st0014, xfmt, 32 ) + call xstrcy(st0015, yfmt, 32 ) +151 continue +111 continue + call sprinf (xc, 32 , xfmt) + if (.not.(memi(memi(wp+5) +line-1) .ne. 4 )) goto 170 + call pargd (xval) + goto 171 +170 continue + call pargd (((xval)/57.295779513082320877)) +171 continue + call sprinf (yc, 32 , yfmt) + if (.not.(memi(memi(wp+5) +line-1) .ne. 4 )) goto 180 + call pargd (yval) + goto 181 +180 continue + call pargd (((yval)/57.295779513082320877)) +181 continue +100 return + end + subroutine imgged (img, x, y, system, wcsnae, wx, wy) + logical Memb(1) + integer*2 Memc(1) + integer*2 Mems(1) + integer Memi(1) + integer*4 Meml(1) + real Memr(1) + double precision Memd(1) + complex Memx(1) + equivalence (Memb, Memc, Mems, Memi, Meml, Memr, Memd, Memx) + common /Mem/ Memd + integer img + double precision x + double precision y + integer system + double precision wx + double precision wy + integer*2 wcsnae(*) + double precision ox + double precision oy + real epoch + integer im + integer co + integer nco + integer*2 buf(1023 +1) + integer stat + real imgetr + integer imaccf + integer skstai + integer skdecr + logical streq + integer sw0001 + logical xerflg + common /xercom/ xerflg + integer*2 st0001(9) + integer*2 st0002(6) + integer*2 st0003(6) + integer*2 st0004(6) + integer*2 st0005(8) + save + integer iyy + data (st0001(iyy),iyy= 1, 8) /101, 99,108,105,112,116,105, 99/ + data (st0001(iyy),iyy= 9, 9) / 0/ + data st0002 /103, 97,112,112,116, 0/ + data st0003 / 69, 80, 79, 67, 72, 0/ + data st0004 / 69, 80, 79, 67, 72, 0/ + data st0005 / 37,115, 32, 37, 46, 49,102, 0/ + im = memi(img+1) + co = memi(img+4) + wx = x + wy = y + sw0001=(system) + goto 110 +120 continue + wx = x + wy = y + goto 111 +130 continue + if (.not.(memi(img+6) .ne. 0)) goto 140 + call mwc2td (memi(img+6) , x, y, wx, wy) +140 continue + goto 111 +150 continue + if (.not.(memi(img+5) .ne. 0)) goto 160 + call mwc2td (memi(img+5) , x, y, wx, wy) +160 continue + goto 111 +170 continue + if (.not.(memi(img+7) .ne. 0)) goto 180 + call mwc2td (memi(img+7) , x, y, wx, wy) +180 continue + goto 111 +190 continue + goto 111 +200 continue + if (.not.(memi(img+8) .ne. 0)) goto 210 + call mwc2td (memi(img+8) , x, y, wx, wy) +210 continue + goto 111 +220 continue + if (.not.(streq (wcsnae, st0001) .or. streq (wcsnae, st0002) + * )) goto 230 + if (.not.(imaccf (im, st0003) .eq. 1)) goto 240 + epoch = imgetr (im, st0004) + if (xerflg) goto 100 + if (.not.(epoch .eq. 0.0 .or. ((epoch).eq.1.6e38))) + * goto 250 + epoch = 1950.0 +250 continue + goto 241 +240 continue + epoch = 1950.0 +241 continue + call sprinf (buf, 1023 , st0005) + call pargsr (wcsnae) + call pargr (epoch) + goto 231 +230 continue + call xstrcy(wcsnae, buf, 1023 ) +231 continue + stat = skdecr (buf, nco, co) + if (.not.(stat .ne. -1)) goto 260 + if (.not.(memi(img+5) .ne. 0)) goto 270 + call mwc2td (memi(img+5) , x, y, ox, oy) +270 continue + call sklltn (co, nco, ((ox)/57.295779513082320877), ((oy) + * /57.295779513082320877), 1.6d308, 1.6d308, 0.0d0, 0.0d0, + * wx, wy) + if (.not.(skstai(co,11) .lt. skstai(co,10))) goto 280 + wx = ((wy)*57.295779513082320877) + wy = ((wx)*57.295779513082320877) + goto 281 +280 continue + wx = ((wx)*57.295779513082320877) + wy = ((wy)*57.295779513082320877) +281 continue +260 continue + goto 111 +290 continue + goto 111 +300 continue + wx = x + wy = y + goto 111 +110 continue + if (sw0001.lt.1.or.sw0001.gt.9) goto 300 + goto (120,300,130,150,220,170,190,200,290),sw0001 +111 continue +100 return + end +c sprinf sprintf +c temple template +c skstad sk_statd +c wcspie wcspix_message +c imgser img_send_header +c radecs radecsys +c stropn stropen +c skstai sk_stati +c skdecr sk_decwstr +c imgcae img_cache +c mwstai mw_stati +c getlie getline +c skdecm sk_decim +c imgses img_send_compass +c imgseo img_send_wcsinfo +c ximalt xim_alert +c wcsnae wcsname +c bpmpix bpm_pix +c mwc2td mw_c2trand +c imgune img_uncache +c imgwcn img_wcstran +c mwswtd mw_swtermd +c sklltn sk_lltran +c mwsctn mw_sctran +c imunmp imunmap +c imgwct img_wcslist +c keywfr keyw_filter +c imgged img_get_coord +c fprinf fprintf +c imgint img_init +c imofnu imofnlu +c dspmmp ds_pmmap +c imggea img_get_data +c imgseb img_send_pixtab +c imgcos img_coord_labels +c imgcot img_coord_fmt +c imgobo img_objinfo +c putlie putline +c imgdes img_det_wcs +c hdrsie hdr_size +c radecr radecstr +c imgams img_amp_wcs +c pargsr pargstr +c mwcloe mw_close +c mwnewm mw_newsystem +c wcsgfm wcs_gfterm +c fpequd fp_equald +c mwsdes mw_sdefwcs diff --git a/vendor/x11iraf/ximtool/clients.old/wcspix/wcimage.x b/vendor/x11iraf/ximtool/clients.old/wcspix/wcimage.x new file mode 100644 index 00000000..a21571a3 --- /dev/null +++ b/vendor/x11iraf/ximtool/clients.old/wcspix/wcimage.x @@ -0,0 +1,1268 @@ +# Copyright(c) 1986 Association of Universities for Research in Astronomy Inc. + +include +include +include +include +include +include "../lib/skywcs/skywcs.h" +include "wcspix.h" + + +# Image class data. +define LEN_IMGDATA 15 +define IMG_WP Memi[$1 ] # wcspix back-pointer +define IMG_IM Memi[$1+1] # image pointer +define IMG_BPM Memi[$1+2] # bad pixel mask pointer +define IMG_MW Memi[$1+3] # image wcs pointer +define IMG_CO Memi[$1+4] # skywcs transform pointer +define IMG_CTW Memi[$1+5] # mwcs log->world transform ptr +define IMG_CTP Memi[$1+6] # mwcs log->phys transform ptr +define IMG_CTA Memi[$1+7] # mwcs log->amplifier transform +define IMG_CTD Memi[$1+8] # mwcs log->detector transform +define IMG_ROT Memr[$1+9] # rotation angle +define IMG_SCALE Memr[$1+10] # plate scale +define IMG_LINEAR Memi[$1+11] # linear coords + + +define IMG_DEBUG FALSE + + +# IMG_INIT -- Initialize the object structure. + +procedure img_init (cp, wp) + +pointer cp #i cache pointer +pointer wp #i WCSPIX structure + +pointer img # data pointer + +begin + if (IMG_DEBUG) call printf ("img_init: \n") + + # Allocate the image data structure if not previously allocated. + if (C_DATA(cp) == NULL) { + iferr (call calloc (C_DATA(cp), LEN_IMGDATA, TY_STRUCT)) + return + } + + img = C_DATA(cp) + IMG_WP(img) = wp + IMG_IM(img) = NULL + IMG_MW(img) = NULL + IMG_CO(img) = NULL + IMG_CTW(img) = NULL + IMG_CTP(img) = NULL + IMG_ROT(img) = 0.0 + IMG_SCALE(img) = 0.0 + IMG_LINEAR(img) = YES +end + + +# IMG_CACHE -- Cache an image in the object cache. + +procedure img_cache (cp, objid, regid, ref) + +pointer cp #i cache pointer +int objid #i object id +int regid #i region id +char ref[ARB] #i object reference + +pointer img, im, wp +int stat +char alert[SZ_LINE] + +pointer immap(), ds_pmmap(), mw_sctran() +pointer img_amp_wcs(), img_det_wcs() +int imaccf(), sk_decim() + +errchk immap, ds_pmmap(), mw_sctran, sk_decim + +begin + if (IMG_DEBUG) call printf ("img_cache: \n") + + # Now map the image and WCS. + img = C_DATA(cp) + wp = IMG_WP(img) + + iferr (IMG_IM(img) = immap (ref, READ_ONLY, 0)) { + # Send alert to the GUI. + call sprintf (alert, SZ_FNAME, "Unable to cache\n%s") + call pargstr (ref) + call xim_alert (alert, "", "") + return + } + + IMG_CO(img) = NULL + IMG_CTW(img) = NULL + IMG_CTP(img) = NULL + iferr { + stat = sk_decim (IMG_IM(img), "world", IMG_MW(img), IMG_CO(img)) + if (stat == ERR || IMG_MW(img) == NULL) + IMG_LINEAR(img) = YES + + if (IMG_MW(img) != NULL) { + IMG_CTW(img) = mw_sctran (IMG_MW(img), "logical", "world", 03B) + IMG_CTP(img) = mw_sctran (IMG_MW(img), "logical", "physical", + 03B) + + # Get the amplifier transformation values if present. + im = IMG_IM(img) + if (imaccf(im,"ATM1_1") == YES && + imaccf(im,"ATM2_2") == YES && + imaccf(im,"ATV1") == YES && + imaccf(im,"ATV2") == YES) + IMG_CTA(img) = img_amp_wcs (im, IMG_MW(img)) + + if (imaccf(im,"DTM1_1") == YES && + imaccf(im,"DTM2_2") == YES && + imaccf(im,"DTV1") == YES && + imaccf(im,"DTV2") == YES) + IMG_CTD(img) = img_det_wcs (im, IMG_MW(img)) + } + + } then { + # Send alert to the GUI. + call sprintf (alert, SZ_FNAME, "Unable to decode image WCS\n%s") + call pargstr (ref) + call xim_alert (alert, "", "") + IMG_LINEAR(img) = YES + } + + # See if we can find a bad pixel mask. + if (WP_BPM(wp) == YES) { + iferr (IMG_BPM(img) = ds_pmmap ("BPM", IMG_IM(img))) + IMG_BPM(img) = NULL + } + + C_OBJID(cp) = objid + C_REGID(cp) = regid + C_NREF(cp) = C_NREF(cp) + 1 + call strcpy (ref, C_REF(cp), 128) +end + + +# IMG_UNCACHE -- Uncache an image in the object cache. + +procedure img_uncache (cp, id) + +pointer cp #i cache pointer +int id #i image id + +pointer img + +begin + if (IMG_DEBUG) call printf ("img_uncache: \n") + + C_OBJID(cp) = NULL + C_NREF(cp) = 0 + call strcpy ("", C_REF(cp), SZ_FNAME) + + img = C_DATA(cp) + if (IMG_MW(img) != NULL) + call mw_close (IMG_MW(img)) + if (IMG_BPM(img) != NULL) + call imunmap (IMG_BPM(img)) + if (IMG_IM(img) != NULL) + call imunmap (IMG_IM(img)) + + IMG_IM(img) = NULL + IMG_BPM(img) = NULL + IMG_MW(img) = NULL + IMG_CTW(img) = NULL + IMG_CTP(img) = NULL + IMG_CO(img) = NULL + IMG_ROT(img) = 0.0 + IMG_SCALE(img) = 0.0 + IMG_LINEAR(img) = NO + + call mfree (C_DATA(cp), TY_STRUCT) + C_DATA(cp) = NULL +end + + +# IMG_WCSTRAN -- Translate object source (x,y) coordinates to the +# desired output WCSs. Message is returned as something like: +# +# set value { +# { object } { region } +# { pixval [] } +# { bpm } +# { coord [ ] } +# { coord [ ] } +# : +# } + + +procedure img_wcstran (cp, id, x, y) + +pointer cp #i cache pointer +int id #i image id +real x, y #i source coords + +pointer img, im, wp, co +double dx, dy, wx, wy, pixval +real rx, ry +int i, bpm + +# Use static storage to avoid allocation overhead. +char buf[SZ_LINE] +char msg[SZ_LINE], wcs[LEN_WCSNAME], xc[LEN_WCSNAME], yc[LEN_WCSNAME] +char xunits[LEN_WCSNAME], yunits[LEN_WCSNAME] + +double sk_statd() + +begin + if (IMG_DEBUG) call printf ("img_wcstran: \n") + + img = C_DATA(cp) # initialize + co = IMG_CO(img) + wp = IMG_WP(img) + im = IMG_IM(img) + + # Get the translation to the image section. + dx = (double(x) - sk_statd(co,S_VXOFF)) / sk_statd(co,S_VXSTEP) + dy = (double(y) - sk_statd(co,S_VYOFF)) / sk_statd(co,S_VYSTEP) + rx = dx + ry = dy + + # Read the pixel data. + call img_get_data (cp, id, rx, ry, pixval, bpm) + + # Begin formatting the message. + call aclrc (msg, SZ_LINE) + call sprintf (msg, SZ_LINE, "wcstran { object %d } { region %d } ") + call pargi (C_OBJID(cp)) + call pargi (C_REGID(cp)) + + call sprintf (buf, SZ_LINE, "{ pixval %9.9g } { bpm %d }\n") + call pargd (pixval) + call pargi (bpm) + call strcat (buf, msg, SZ_LINE) + + # Now loop over the requested systems and generate a coordinate + # for each. + for (i=1; i <= MAX_WCSLINES; i=i+1) { + + # Get the coordinate value. + call img_get_coord (img, dx, dy, SYSTEMS(wp,i), WCSNAME(wp,i), + wx, wy) + + # Get the system name, labels, and formats strings for the WCS. + call img_coord_labels (cp, i, wcs, xunits, yunits) + + # Format the values as requested. + call img_coord_fmt (cp, i, wx, wy, xc, yc) + + # Format the coord buffer and append it to the message. + call sprintf (buf, SZ_LINE, + "{coord {%9s} {%12s} {%12s} {%4s} {%4s}}\n") + call pargstr (wcs) + call pargstr (xc) + call pargstr (yc) + call pargstr (xunits) + call pargstr (yunits) + call strcat (buf, msg, SZ_LINE) + } + + # Now send the completed message. + call wcspix_message (msg); +end + + +# IMG_WCSLIST -- List the WCSs available for the given image. + +procedure img_wcslist (cp, id) + +pointer cp #i cache pointer +int id #i image id + +pointer img, im, mw +char msg[SZ_LINE] + +begin + if (IMG_DEBUG) call printf ("img_wcslist: \n") + + img = C_DATA(cp) # initialize + mw = IMG_MW(img) + im = IMG_IM(img) + + call strcpy ("wcslist {None Logical World Physical line ", msg, SZ_LINE) + + # See if we can do amplifier/detector coords by checking for ATM/ATV + # and DTM/DTV keywords. + + if (IMG_CTA(img) != NULL) + call strcat (" Amplifier ", msg, SZ_LINE) + if (IMG_CTD(img) != NULL) + call strcat (" Detector ", msg, SZ_LINE) + if (IMG_CTA(img) != NULL || IMG_CTD(img) != NULL) + call strcat (" CCD ", msg, SZ_LINE) + call strcat (" line ", msg, SZ_LINE) + + # If we have a MWCS pointer list the sky projections. + if (mw != NULL) + call strcat (SKYPROJ, msg, SZ_LINE) + + # Close the message. + call strcat ("}", msg, SZ_LINE) + + call wcspix_message (msg) +end + + +# IMG_GET_DATA -- Get data from the image. + +procedure img_get_data (cp, id, x, y, pixval, bpm_pix) + +pointer cp #i cache pointer +int id #i image id +real x, y #i source coords +double pixval #o central pixel value +int bpm_pix #o bad pixel mask value + +pointer img, wp, im, bpm, pix +int nl, nc, ix, iy +int size, x1, x2, y1, y2 + +pointer imgs2r(), imgs2i() + +begin + if (IMG_DEBUG) call printf ("img_get_data: \n") + + img = C_DATA(cp) + wp = IMG_WP(img) + im = IMG_IM(img) + bpm = IMG_BPM(img) + nc = IM_LEN(im,1) + nl = IM_LEN(im,2) + size = WP_PTABSZ(wp) + + # Sanity check on the cursor image position. + if (x < 0.0 || y < 0.0 || x > nc || y > nl) + return + + # Bounds checking. Rather than deal with out of bounds pixels we'll + # adjust the center pixel so we get the same size raster up to each + # boundary. + + ix = int (x + 0.5) ; iy = int (y + 0.5) + ix = max (size/2+1, ix) ; iy = max (size/2+1, iy) + ix = min (ix, (nc-(size/2)-1)) ; iy = min (iy, (nl-(size/2)-1)) + + # Compute the box offset given the center and size. + x1 = ix - size / 2 + 0.5 + x2 = ix + size / 2 + 0.5 + y1 = iy - size / 2 + 0.5 + y2 = iy + size / 2 + 0.5 + + # Get the image pixels + x1 = max (1, x1) + x2 = min (nc, x2) + y1 = max (1, y1) + y2 = min (nl, y2) + pix = imgs2r (im, int(x1), int(x2), int(y1), int(y2)) + + if (bpm != NULL && WP_BPM(wp) == YES) + bpm_pix = Memi[imgs2i (bpm, ix, ix, iy, iy)] + else + bpm_pix = 0 + + # Compute the image pixel associated with the requested coords. + pixval = Memr[pix + ((size/2)*size) + (size/2)] * 1.0d0 + + # Send the pixel table. + if (WP_PTABSZ(wp) > 1) + call img_send_pixtab (Memr[pix], WP_PTABSZ(wp), x1, x2, y1, y2) +end + + +# IMG_OBJINFO -- Get header information from the image. + +procedure img_objinfo (cp, id, template) + +pointer cp #i cache pointer +int id #i image id +char template[ARB] #i keyword template + +pointer im, img + +define WCS_TEMPLATE "WCSDIM,CTYPE*,CRPIX*,CRVAL*,CD*,CROTA2,LTV*,LTM*,WSV*,WAT*,RA*,DEC*,EQUINOX,EPOCH,MJD*,DATE-OBS" + +begin + if (IMG_DEBUG) call printf ("img_objinfo: \n") + + # Send the full header (or keyword filtered header), only the WCS + # keywords, and a plain-text explanation of the WCS. + + img = C_DATA(cp) + im = IMG_IM(img) + + call img_send_header (im, "imghdr", template) + call img_send_header (im, "wcshdr", WCS_TEMPLATE) + call img_send_wcsinfo (im, cp) + call img_send_compass (im, cp) +end + + + +#============================================================================== + +# IMG_SEND_HEADER -- Send an image header to the named GUI object. Keywords +# are filtered according to a specified template + +procedure img_send_header (im, object, template) + +pointer im #i image descriptor +char object[ARB] #i object for the message +char template[ARB] #i keyword template + +pointer sp, hdr, lbuf, line, field, keyw, dict +pointer ip, lp, list +int nlines, in, out, i, hdr_size +bool keyw_filter + +int stropen(), getline(), stridx(), imgnfn(), strdic() +pointer imofnlu() +bool streq() +errchk stropen, getline, putci, putline, imgnfn, imofnlu, strdic + +define USER_AREA Memc[($1+IMU-1)*SZ_STRUCT + 1] +define SZ_KEYW 8 + +begin + hdr_size = (LEN_IMDES + IM_LENHDRMEM(im) - IMU) * SZ_STRUCT - 1 + hdr_size = hdr_size + SZ_LINE + + call smark (sp) + call salloc (hdr, hdr_size, TY_CHAR) + call salloc (dict, hdr_size, TY_CHAR) + call salloc (field, SZ_LINE, TY_CHAR) + call salloc (lbuf, SZ_LINE, TY_CHAR) + call salloc (line, SZ_LINE, TY_CHAR) + call salloc (keyw, SZ_KEYW, TY_CHAR) + + in = stropen (USER_AREA(im), hdr_size, READ_ONLY) + out = stropen (Memc[hdr], hdr_size, WRITE_ONLY) + call fprintf (out, "%s {") + call pargstr (object) + + # Build up a dictionary of header keywords based on the template. + keyw_filter = (!streq (template, "*")) + if (keyw_filter) { + list = imofnlu (im, template) + call strcpy ("|", Memc[dict], hdr_size) + while (imgnfn (list, Memc[field], SZ_FNAME) != EOF) { + call strcat (Memc[field], Memc[dict], hdr_size) + call strcat ("|", Memc[dict], hdr_size) + } + call imcfnl (list) + } + + + # Copy header records to the output, stripping any trailing + # whitespace and clipping at the right margin. We also filter + # against the keyword dictionary found above. + + nlines = 0 + while (getline (in, Memc[lbuf]) != EOF) { + + call aclrc (Memc[line], SZ_LINE) + + # Escape any brackets passed to the Tcl. + ip = lbuf + lp = line + while (Memc[ip] != EOS && Memc[ip] != '\n') { + if (stridx (Memc[ip], "[{") > 0) { + Memc[lp] = '\\' + lp = lp + 1 + } + Memc[lp] = Memc[ip] + ip = ip + 1 + lp = lp + 1 + } + Memc[lp] = '\n' + Memc[lp+1] = EOS + + # See whether the line matches a keyword we want to output. + if (keyw_filter) { + for (i=0; i < SZ_KEYW && !IS_WHITE(Memc[line+i]); i=i+1) + Memc[keyw+i] = Memc[line+i] + Memc[keyw+i] = '\0' + + # If not in the dictionary skip to the next line. + if (strdic (Memc[keyw], Memc[keyw], SZ_KEYW, Memc[dict]) == 0) + next + } + + call putci (out, ' ') + call putline (out, Memc[line]) + + # Send the header in small chunks so we don't overflow the + # message buffer. + nlines = nlines + 1 + if (mod(nlines,10) == 0) { + call fprintf (out, "}") + call close (out) + call wcspix_message (Memc[hdr]); + call aclrc (Memc[hdr], hdr_size) + out = stropen (Memc[hdr], hdr_size, WRITE_ONLY) + call fprintf (out, "%s {") + call pargstr (object) + } + } + call fprintf (out, "}") + + call close (in) + call close (out) + + # Send the final message. + call wcspix_message (Memc[hdr]) + + # Pad a few lines for the GUI + call sprintf (Memc[hdr], SZ_LINE, "%d { \n\n\n }") + call pargstr (object) + call wcspix_message (Memc[hdr]) + + call sfree (sp) +end + + +# IMG_SEND_COMPASS -- Send information about the image WCS in a plain-english +# string. + +procedure img_send_compass (im, cp) + +pointer im #i image descriptor +pointer cp #i cache element pointer + +pointer sp, buf, img, co +double cx, cy, cx1, cy1, dx, dy, x1, y1 +double cosa, sina, angle +int i, j, comp_x, comp_y +long axis[IM_MAXDIM], lv[IM_MAXDIM], pv1[IM_MAXDIM], pv2[IM_MAXDIM] + +begin + call smark (sp) + call salloc (buf, SZ_LINE, TY_CHAR) + call aclrc (Memc[buf], SZ_LINE) + + # Get the data pointer. + img = C_DATA(cp) + co = IMG_CO(img) + + # Get world coords at the image corners. + if (IMG_CTW(img) != NULL) { + + if (IMG_ROT(img) > 0.0) + angle = -IMG_ROT(img) + else + angle = IMG_ROT(img) + 360.0 + cosa = cos (DEGTORAD(angle)) + sina = sin (DEGTORAD(angle)) + + # Image center position + cx = IM_LEN(im,1) / 2.0d0 + cy = IM_LEN(im,2) / 2.0d0 + call mw_c2trand (IMG_CTW(img), cx, cy, cx1, cy1) + + # Extend a unit vector up from the center assuming it's North + # and rotate it by the wcs angle. + dx = cx + ( 10.0 * sina) + dy = cy + ( 10.0 * cosa) + call mw_c2trand (IMG_CTW(img), dx, dy, x1, y1) + + # Check new point Y value relative to the center position. + if (y1 >= cy1) + comp_y = 1 # North is up + else + comp_y = -1 # North is down + + # Extend a unit vector left from the center assuming it's East + # and rotate it by the wcs angle. + dx = cx + (-10.0 * cosa) + dy = cy + ( 10.0 * sina) + call mw_c2trand (IMG_CTW(img), dx, dy, x1, y1) + + # Check new point X value relative to the center position. + if (x1 >= cx1) + comp_x = 1 # East is left and we have a WCS + else + comp_x = -1 # East is right + + } else { + # Determine the logical to physical mapping by evaluating two + # points and determining the axis reduction if any. pv1 will be + # the offset and pv2-pv1 will be the scale. + + lv[1] = 0; lv[2] = 0; call imaplv (im, lv, pv1, 2) + lv[1] = 1; lv[2] = 1; call imaplv (im, lv, pv2, 2) + + i = 1 + axis[1] = 1; axis[2] = 2 + do j = 1, IM_MAXDIM { + if (pv1[j] != pv2[j]) { + axis[i] = j + i = i + 1 + } + } + comp_x = - (pv2[axis[1]] - pv1[axis[1]]) + comp_y = (pv2[axis[2]] - pv1[axis[2]]) + } + + call sprintf (Memc[buf], SZ_LINE, "compass %d %g %d %d %s\0") + call pargi (C_OBJID(cp)) + call pargr (IMG_ROT(img)) + call pargi (comp_x) + call pargi (comp_y) + if (IMG_MW(img) != NULL) + call pargstr ("E N") + else + call pargstr ("X Y") + + call wcspix_message (Memc[buf]) + call sfree (sp) +end + + +# IMG_SEND_WCSINFO -- Send information about the image WCS in a plain-english +# string. + +procedure img_send_wcsinfo (im, cp) + +pointer im #i image descriptor +pointer cp #i cache element pointer + +pointer sp, co, img, mw +pointer buf, proj, radecstr +int fd, radecsys, ctype, wtype, ndim +double crpix1, crpix2, crval1, crval2, cval1, cval2 +double xscale, yscale, xrot, yrot +double r[IM_MAXDIM], w[IM_MAXDIM], cd[IM_MAXDIM,IM_MAXDIM], + +int idxstr(), sk_stati(), stropen(), mw_stati() +double sk_statd(), sl_epj(), sl_epb() +bool fp_equald() + +errchk stropen + +begin + call smark (sp) + call salloc (buf, SZ_LINE, TY_CHAR) + call salloc (proj, SZ_FNAME, TY_CHAR) + call salloc (radecstr, SZ_FNAME, TY_CHAR) + + # Open a string on a file. + fd = stropen (Memc[buf], SZ_LINE, WRITE_ONLY) + + # Get the data pointer. + img = C_DATA(cp) + + # Get the coordinate transform descriptor. + co = IMG_CO(img) + radecsys = sk_stati (co, S_RADECSYS) + ctype = sk_stati (co, S_CTYPE) + wtype = sk_stati (co, S_WTYPE) + + mw = IMG_MW(img) + if (mw != NULL) { + # Now get the mwcs Rterm (CRPIXi), Wterm (CRVALi), and CD matrix. + ndim = mw_stati (mw, MW_NPHYSDIM) + call wcs_gfterm (mw, r, w, cd, ndim) + crpix1 = r[1] + crpix2 = r[2] + crval1 = w[1] + crval2 = w[2] + + xscale = sqrt (cd[1,1]**2 + cd[2,1]**2) * 3600.0d0 + yscale = sqrt (cd[1,2]**2 + cd[2,2]**2) * 3600.0d0 + xrot = 0.0 + yrot = 0.0 + if (!fp_equald (cd[1,1], 0.0d0)) + xrot = DRADTODEG(atan ( cd[2,1] / cd[1,1])) + if (!fp_equald (cd[2,2], 0.0d0)) + yrot = DRADTODEG(atan (-cd[1,2] / cd[2,2])) + } else { + ndim = 2 + xscale = 1.0 + yscale = 1.0 + xrot = 0.0 + yrot = 0.0 + } + + if (IMG_DEBUG) { + call printf("WCS Info:\n=========\n") + call printf("R term: %g %g\n"); call pargd(r[1]); call pargd(r[2]) + call printf("W term: %g %g\n"); call pargd(w[1]); call pargd(w[2]) + call printf(" cd: %g %g\n %g %g\n") + call pargd(cd[1,1]); call pargd(cd[1,2]) + call pargd(cd[2,1]); call pargd(cd[2,2]) + call printf(" scale: %g %g\n");call pargd(xscale);call pargd(yscale) + call printf(" rot: %g %g\n");call pargd(xrot);call pargd(yrot) + } + + IMG_SCALE(img) = (xscale + yscale) / 2.0d0 + #IMG_ROT(img) = (xrot + yrot) / 2.0d0 + IMG_ROT(img) = xrot + + + # Now format a WCS text panel such as + # + # Projection: TAN System: Equatorial FK5 + # Ra/Dec axes: 1/2 Dimensions: 512 x 512 + # + # Center Pos: RA: 13:29:52.856 Dec: +47:11:40.39 + # Reference Pos: RA: 13:29:52.856 Dec: +47:11:40.39 + # Ref pixel coord: X: 250.256 Y: 266.309 + # Plate Scale: 0.765194 Rot Angle: 1.02939 + # Equinox: J2000.000 Epoch: J1987.25775240 + # MJD: 46890.39406 + + # Get some preliminary values. + if (idxstr (radecsys, Memc[radecstr], SZ_FNAME, EQTYPE_LIST) <= 0) + call strcpy ("FK5", Memc[radecstr], SZ_FNAME) + call strupr (Memc[radecstr]) + + if (idxstr (wtype, Memc[proj], SZ_FNAME, WTYPE_LIST) <= 0) + call strcpy ("logical", Memc[proj], SZ_FNAME) + call strupr (Memc[proj]) + + call fprintf (fd, "wcsinfo {\n") + + call fprintf (fd, + " Projection: %-6s\t System: %s %s\n") + call pargstr (Memc[proj]) + switch (ctype) { + case CTYPE_EQUATORIAL: + call pargstr ("Equatorial") + call pargstr (Memc[radecstr]) + case CTYPE_ECLIPTIC: + call pargstr ("Ecliptic") + call pargstr ("") + case CTYPE_GALACTIC: + call pargstr ("Galactic") + call pargstr ("") + case CTYPE_SUPERGALACTIC: + call pargstr ("SuperGalactic") + call pargstr ("") + default: + call pargstr ("Linear") + call pargstr ("") + } + + call fprintf (fd, " Ra/Dec axes: %d/%d") + call pargi (sk_stati (co, S_PLNGAX)) + call pargi (sk_stati (co, S_PLATAX)) + call fprintf (fd, " Dimensions: %d x %d\n\n") + call pargi (IM_LEN(im,1)) + call pargi (IM_LEN(im,2)) + + call fprintf (fd, + " Center Pos: %3s: %-12H %3s: %-12h\n") + if (ctype == CTYPE_EQUATORIAL) + call pargstr (" RA") + else + call pargstr ("Lon") + call pargd (cval1) + if (ctype == CTYPE_EQUATORIAL) + call pargstr ("Dec") + else + call pargstr ("Lat") + call pargd (cval2) + + call fprintf (fd, + " Reference Pos: %3s: %-12H %3s: %-12h\n") + if (ctype == CTYPE_EQUATORIAL) + call pargstr (" RA") + else + call pargstr ("Lon") + call pargd (crval1) + if (ctype == CTYPE_EQUATORIAL) + call pargstr ("Dec") + else + call pargstr ("Lat") + call pargd (crval2) + + call fprintf (fd, + " Reference Pixel: X: %-9.4f Y: %-9.4f\n") + call pargd (crpix1) + call pargd (crpix2) + + call fprintf (fd, + " Plate Scale: %-8f Rot Angle: %-8f\n") + call pargr (IMG_SCALE(img)) + call pargr (IMG_ROT(img)) + + call fprintf (fd, + " Equinox: %s%8f Epoch: %s%.6f\n") + switch (radecsys) { + case EQTYPE_FK5, EQTYPE_ICRS: + call pargstr ("J") ; call pargd (sk_statd(co,S_EQUINOX)) + call pargstr ("J") ; call pargd (sl_epj(sk_statd(co,S_EPOCH))) + default: + if (IMG_LINEAR(img) == YES) { + call pargstr (" ") ; call pargd (INDEFD) + call pargstr (" ") ; call pargd (INDEFD) + } else { + call pargstr ("B") + call pargd (sk_statd(co,S_EQUINOX)) + call pargstr ("B") + call pargd (sl_epb(sk_statd(co,S_EPOCH))) + } + } + + call fprintf (fd, " MJD: %.6f\n") + call pargd (sk_statd(co,S_EPOCH)) + + call fprintf (fd, "}\n \n \n") + + # Close the formatted string and send the message. + call close (fd) + call wcspix_message (Memc[buf]) + + call sfree (sp) +end + + +# IMG_SEND_PIXTAB -- Send a 'pixtab' message. Format of the message is +# +# pixtab { +# { {pix} {pix} ... } # pixel table values +# { {x1} {x2} ... } # column label values +# { {y1} {y2} ... } # row label values +# { } # pixtab statistics +# } +# + +procedure img_send_pixtab (pixtab, size, x1, x2, y1, y2) + +real pixtab[ARB] #i pixtab array +int size #i pixtab size +int x1, x2, y1, y2 #i raster boundaries + +pointer sp, buf, el +int i, j, npix +real pix, sum, sum2, mean, var, stdev, x, y + +define SZ_PIXTAB (6*SZ_LINE) + +begin + call smark (sp) + call salloc (buf, SZ_PIXTAB, TY_CHAR) + call salloc (el, SZ_FNAME, TY_CHAR) + + # Begin the pixtab message. + call strcpy ("pixtab {\n{\ntable {\n", Memc[buf], SZ_PIXTAB) + + # Format the pixels into a table for presentation. Do the y-flip + # here so the pixels are in order for the List widget in the GUI. + # Accumulate the pixel statistics so we don't have to do it in the + # GUI where it's slower. + + sum = 0.0 + sum2 = 0.0 + npix = size * size + + for (i=size - 1; i >= 0; i=i-1) { + for (j=1; j <= size; j=j+1) { + pix = pixtab[(i * size) + j] + sum = sum + pix + sum2 = sum2 + (pix * pix) + + call sprintf (Memc[el], SZ_FNAME, " {%10.1f}") + call pargr (pix) + + call strcat (Memc[el], Memc[buf], SZ_PIXTAB) + } + call strcat ("\n", Memc[buf], SZ_PIXTAB) + } + call strcat ("}\n}\n", Memc[buf], SZ_PIXTAB) + + + # Do the row and column label parts of the message. + call strcat ("{", Memc[buf], SZ_PIXTAB) + for (x = x1; x <= x2; x = x + 1.) { + call sprintf (Memc[el], SZ_FNAME, " {%10.1f}") + call pargr (x) + call strcat (Memc[el], Memc[buf], SZ_PIXTAB) + } + call strcat ("}\n", Memc[buf], SZ_PIXTAB) + + call strcat ("{", Memc[buf], SZ_PIXTAB) + for (y = y2; y >= y1; y = y - 1.) { + call sprintf (Memc[el], SZ_FNAME, " {%10.1f}") + call pargr (y) + call strcat (Memc[el], Memc[buf], SZ_PIXTAB) + } + call strcat ("}\n", Memc[buf], SZ_PIXTAB) + + + # Compute the statistics for the raster. + mean = sum / real(npix) + var = (sum2 - sum * mean) / real(npix - 1) + if (var <= 0) + stdev = 0.0 + else + stdev = sqrt (var) + + call sprintf (Memc[el], SZ_FNAME, " { %10.2f %10.4f }\n") + call pargr (mean) + call pargr (stdev) + call strcat (Memc[el], Memc[buf], SZ_PIXTAB) + + + # Close the message. + call strcat ("}", Memc[buf], SZ_PIXTAB) + + # Send the formatted message. + call wcspix_message (Memc[buf]) + + call sfree (sp) +end + + +# IMG_AMP_WCS -- Create a WCS transformation for the amplifier coordinates. + +pointer procedure img_amp_wcs (im, mw) + +pointer im #i image pointer +pointer mw #i MWCS descriptor + +pointer ct +double r[IM_MAXDIM], w[IM_MAXDIM], cd[IM_MAXDIM,IM_MAXDIM] + +double imgetd() +pointer mw_sctran() + +begin + r[1] = 0.0d0 + r[2] = 0.0d0 + w[1] = imgetd (im, "ATV1") + w[2] = imgetd (im, "ATV2") + cd[1,1] = imgetd (im, "ATM1_1") + cd[1,2] = 0.0d0 + cd[2,1] = 0.0d0 + cd[2,2] = imgetd (im, "ATM2_2") + + # Create a new named system. + call mw_newsystem (mw, "amplifier", 2) + + # Set the new Wterm for the system. + call mw_swtermd (mw, r, w, cd, 2) + + # Set up the transform. + ct = mw_sctran (mw, "logical", "amplifier", 03B) + + # Reset the default world system. + call mw_sdefwcs (mw) + + return (ct) +end + + +# IMG_DET_WCS -- Create a WCS transformation for the detector coordinates. + +pointer procedure img_det_wcs (im, mw) + +pointer im #i image pointer +pointer mw #i MWCS descriptor + +pointer ct +double r[IM_MAXDIM], w[IM_MAXDIM], cd[IM_MAXDIM,IM_MAXDIM] + +double imgetd() +pointer mw_sctran() + +begin + r[1] = 0.0d0 + r[2] = 0.0d0 + w[1] = imgetd (im, "DTV1") + w[2] = imgetd (im, "DTV2") + cd[1,1] = imgetd (im, "DTM1_1") + cd[1,2] = 0.0d0 + cd[2,1] = 0.0d0 + cd[2,2] = imgetd (im, "DTM2_2") + + # Create a new named system. + call mw_newsystem (mw, "detector", 2) + + # Set the new Wterm for the system. + call mw_swtermd (mw, r, w, cd, 2) + + # Set up the transform. + ct = mw_sctran (mw, "logical", "detector", 03B) + + # Reset the default world system. + call mw_sdefwcs (mw) + + return (ct) +end + + +# IMG_COORD_LABELS -- Get the WCS name, coord labels and format strings for +# the specified object. + +procedure img_coord_labels (cp, line, wcsname, xunits, yunits) + +pointer cp #i cache pointer +pointer line #i WCS output line +char wcsname[ARB] #o WCS name string +char xunits[ARB], yunits[ARB] #o WCS coord labels + +pointer img, co, wp +pointer sp, proj, radecstr + +int strcmp(), sk_stati(), idxstr() + +begin + img = C_DATA(cp) # initialize ptrs + co = IMG_CO(img) + wp = IMG_WP(img) + + if (SYSTEMS(wp,line) == SYS_WORLD) { + switch (sk_stati(co,S_CTYPE)) { + case CTYPE_EQUATORIAL: + call strcpy (" RA", xunits, LEN_WCSNAME) + call strcpy (" Dec", yunits, LEN_WCSNAME) + case CTYPE_ECLIPTIC: + call strcpy ("ELon", xunits, LEN_WCSNAME) + call strcpy ("ELat", yunits, LEN_WCSNAME) + case CTYPE_GALACTIC: + call strcpy ("GLon", xunits, LEN_WCSNAME) + call strcpy ("GLat", yunits, LEN_WCSNAME) + case CTYPE_SUPERGALACTIC: + call strcpy ("SLon", xunits, LEN_WCSNAME) + call strcpy ("SLat", yunits, LEN_WCSNAME) + } + } else if (SYSTEMS(wp,line) == SYS_SKY) { + call strcpy (WCSNAME(wp,line), wcsname, LEN_WCSNAME) + call strlwr (wcsname) + if (strcmp (wcsname,"ecliptic") == 0) { + call strcpy ("ELon", xunits, LEN_WCSNAME) + call strcpy ("ELat", yunits, LEN_WCSNAME) + } else if (strcmp (wcsname,"galactic") == 0) { + call strcpy ("GLon", xunits, LEN_WCSNAME) + call strcpy ("GLat", yunits, LEN_WCSNAME) + } else if (strcmp (wcsname,"supergalactic") == 0) { + call strcpy ("SLon", xunits, LEN_WCSNAME) + call strcpy ("SLat", yunits, LEN_WCSNAME) + } else { + call strcpy (" RA", xunits, LEN_WCSNAME) + call strcpy (" Dec", yunits, LEN_WCSNAME) + } + } else { + call strcpy ("X", xunits, LEN_WCSNAME) + call strcpy ("Y", yunits, LEN_WCSNAME) + } + + + # Now get the format strings. For systems other than the image + # default just use the WCS string as the name, otherwise format a + # string giving more information about the system. + if (SYSTEMS(wp,line) != SYS_WORLD) + call strcpy (WCSNAME(wp,line), wcsname, LEN_WCSNAME) + + else { + call smark (sp) + call salloc (radecstr, SZ_FNAME, TY_CHAR) + call salloc (proj, SZ_FNAME, TY_CHAR) + + call sprintf (wcsname, LEN_WCSNAME, "%s-%s-%s") + + switch (sk_stati(co,S_CTYPE)) { + case CTYPE_EQUATORIAL: call pargstr ("EQ") + case CTYPE_ECLIPTIC: call pargstr ("ECL") + case CTYPE_GALACTIC: call pargstr ("GAL") + case CTYPE_SUPERGALACTIC: call pargstr ("SGAL") + default: call pargstr ("UNKN") + } + + if (sk_stati(co,S_CTYPE) == CTYPE_EQUATORIAL) { + if (idxstr(sk_stati(co,S_RADECSYS), Memc[radecstr], + SZ_FNAME, EQTYPE_LIST) <= 0) + call strcpy ("FK5", Memc[radecstr], SZ_FNAME) + call strupr (Memc[radecstr]) + call pargstr (Memc[radecstr]) + } else { + if (sk_stati(co,S_CTYPE) == CTYPE_SUPERGALACTIC) + call pargstr ("-") + else + call pargstr ("--") + } + + if (idxstr(sk_stati(co,S_WTYPE), Memc[proj], SZ_FNAME, + WTYPE_LIST) <= 0) + call strcpy ("linear", Memc[proj], SZ_FNAME) + call strupr (Memc[proj]) + call pargstr (Memc[proj]) + + call sfree (sp) + } + + # Now fix up the WCS system name. + if (strcmp (wcsname, "fk4") == 0 || + strcmp (wcsname, "fk5") == 0 || + strcmp (wcsname, "icrs") == 0 || + strcmp (wcsname, "gappt") == 0 || + strcmp (wcsname, "fk4-no-e") == 0) { + call strupr (wcsname) + + } else if (IS_LOWER(wcsname[1])) + wcsname[1] = TO_UPPER(wcsname[1]) +end + + +# IMG_COORD_FMT -- Format the coordinate strings. + +procedure img_coord_fmt (cp, line, xval, yval, xc, yc) + +pointer cp #i object cache pointer +int line #i output line number +double xval, yval #i input coords +char xc[ARB], yc[ARB] #o formatted coord strings + +pointer img, co, wp +char xfmt[LEN_WCSNAME], yfmt[LEN_WCSNAME] + +int sk_stati() +bool streq() + +begin + img = C_DATA(cp) # initialize ptrs + co = IMG_CO(img) + wp = IMG_WP(img) + + # Convert coords to the requested format. + if (FORMATS(wp,line) == FMT_DEFAULT) { + if (IMG_MW(img) == NULL) { + call strcpy ("%10.2f", xfmt, LEN_WCSNAME) + call strcpy ("%10.2f", yfmt, LEN_WCSNAME) + } else { + if (SYSTEMS(wp,line) == SYS_WORLD || + SYSTEMS(wp,line) == SYS_SKY) { + + if (streq(WCSNAME(wp,line),"ecliptic") || + streq(WCSNAME(wp,line),"galactic") || + streq(WCSNAME(wp,line),"supergalactic")) + call strcpy ("%h", xfmt, LEN_WCSNAME) + else + call strcpy ("%.2H", xfmt, LEN_WCSNAME) + call strcpy ("%.1h", yfmt, LEN_WCSNAME) + } else { + call strcpy ("%10.2f", xfmt, LEN_WCSNAME) + call strcpy ("%10.2f", yfmt, LEN_WCSNAME) + } + } + + } else if (FORMATS(wp,line) == FMT_HMS) { + if (sk_stati(co, S_CTYPE) == CTYPE_EQUATORIAL) + call strcpy ("%.2H", xfmt, LEN_WCSNAME) + else + call strcpy ("%.1h", xfmt, LEN_WCSNAME) + call strcpy ("%h", yfmt, LEN_WCSNAME) + } else { + call strcpy ("%10.2f", xfmt, LEN_WCSNAME) + call strcpy ("%10.2f", yfmt, LEN_WCSNAME) + } + + # Convert the value to the requested format + call sprintf (xc, LEN_WCSNAME, xfmt) + if (FORMATS(wp,line) != FMT_RAD) + call pargd (xval) + else + call pargd (DEGTORAD(xval)) + + call sprintf (yc, LEN_WCSNAME, yfmt) + if (FORMATS(wp,line) != FMT_RAD) + call pargd (yval) + else + call pargd (DEGTORAD(yval)) +end + + +# IMG_GET_COORD -- Given an x,y position in the image return the coordinate in +# the given system. + +procedure img_get_coord (img, x, y, system, wcsname, wx, wy) + +pointer img #i IMG struct pointer +double x, y #i input image position +int system #i coordinate system requested +char wcsname[ARB] #i desired WCS name +double wx, wy #o output coordinates + +double ox, oy +real epoch +pointer im, co, nco +char buf[SZ_LINE] +int stat + +real imgetr() +int imaccf(), sk_stati(), sk_decwstr() +bool streq() + +errchk imgetr + +begin + im = IMG_IM(img) + co = IMG_CO(img) + + wx = x # fallback values + wy = y + + switch (system) { + case SYS_NONE: + wx = x + wy = y + case SYS_PHYSICAL: + if (IMG_CTP(img) != NULL) + call mw_c2trand (IMG_CTP(img), x, y, wx, wy) + case SYS_WORLD: + if (IMG_CTW(img) != NULL) + call mw_c2trand (IMG_CTW(img), x, y, wx, wy) + case SYS_AMP: + if (IMG_CTA(img) != NULL) + call mw_c2trand (IMG_CTA(img), x, y, wx, wy) + case SYS_CCD: + ; # TBD + case SYS_DETECTOR: + if (IMG_CTD(img) != NULL) + call mw_c2trand (IMG_CTD(img), x, y, wx, wy) + case SYS_SKY: + # Note Ecliptic/GAPPT coords need an epoch value. + if (streq (wcsname, "ecliptic") || streq (wcsname, "gappt")) { + if (imaccf (im, "EPOCH") == YES) { + epoch = imgetr (im, "EPOCH") + if (epoch == 0.0 || IS_INDEFR(epoch)) + epoch = 1950.0 + } else + epoch = 1950.0 + + call sprintf (buf, SZ_LINE, "%s %.1f") + call pargstr (wcsname) + call pargr (epoch) + } else + call strcpy (wcsname, buf, SZ_LINE) + + stat = sk_decwstr (buf, nco, co) + if (stat != ERR) { + if (IMG_CTW(img) != NULL) + call mw_c2trand (IMG_CTW(img), x, y, ox, oy) + call sk_lltran (co, nco, DEGTORAD(ox), DEGTORAD(oy), + INDEFD, INDEFD, 0.0d0, 0.0d0, wx, wy) + if (sk_stati(co,S_PLATAX) < sk_stati(co,S_PLNGAX)) { + wx = RADTODEG(wy) # transposed image + wy = RADTODEG(wx) + } else { + wx = RADTODEG(wx) # regular image + wy = RADTODEG(wy) + } + } + case SYS_OTHER: + ; # TBD + + default: # default coords + wx = x + wy = y + } +end diff --git a/vendor/x11iraf/ximtool/clients.old/wcspix/wcmef.f b/vendor/x11iraf/ximtool/clients.old/wcspix/wcmef.f new file mode 100644 index 00000000..d98ff3e6 --- /dev/null +++ b/vendor/x11iraf/ximtool/clients.old/wcspix/wcmef.f @@ -0,0 +1,30 @@ + subroutine mefint () + save +100 return + end + subroutine mefcae () + save +100 return + end + subroutine mefune () + save +100 return + end + subroutine mefwcn () + save +100 return + end + subroutine mefwct () + save +100 return + end + subroutine mefobo () + save +100 return + end +c mefcae mef_cache +c mefune mef_uncache +c mefwcn mef_wcstran +c mefwct mef_wcslist +c mefint mef_init +c mefobo mef_objinfo diff --git a/vendor/x11iraf/ximtool/clients.old/wcspix/wcmef.x b/vendor/x11iraf/ximtool/clients.old/wcspix/wcmef.x new file mode 100644 index 00000000..050e5596 --- /dev/null +++ b/vendor/x11iraf/ximtool/clients.old/wcspix/wcmef.x @@ -0,0 +1,50 @@ +# Copyright(c) 1986 Association of Universities for Research in Astronomy Inc. + +include "wcspix.h" + + +# MEF Image class data. + + +# MEF_INIT -- Initialize the MEF Class module. + +procedure mef_init () +begin +end + + +# MEF_CACHE -- Cache an image in the object cache. + +procedure mef_cache () +begin +end + + +# MEF_UNCACHE -- Uncache an image in the object cache. + +procedure mef_uncache () +begin +end + + +# MEF_WCSTRAN -- Translate object source (x,y) coordinates to the +# desired output WCSs. + +procedure mef_wcstran () +begin +end + + +# MEF_WCSLIST -- List the WCSs available for the given image. + +procedure mef_wcslist () +begin +end + + +# MEF_OBJINFO -- Get header information from the image. + +procedure mef_objinfo () +begin +end + diff --git a/vendor/x11iraf/ximtool/clients.old/wcspix/wcmspec.f b/vendor/x11iraf/ximtool/clients.old/wcspix/wcmspec.f new file mode 100644 index 00000000..c2924bd1 --- /dev/null +++ b/vendor/x11iraf/ximtool/clients.old/wcspix/wcmspec.f @@ -0,0 +1,30 @@ + subroutine mspint () + save +100 return + end + subroutine mspcae () + save +100 return + end + subroutine mspune () + save +100 return + end + subroutine mspwcn () + save +100 return + end + subroutine mspwct () + save +100 return + end + subroutine mspobo () + save +100 return + end +c mspwct msp_wcslist +c mspint msp_init +c mspobo msp_objinfo +c mspcae msp_cache +c mspune msp_uncache +c mspwcn msp_wcstran diff --git a/vendor/x11iraf/ximtool/clients.old/wcspix/wcmspec.x b/vendor/x11iraf/ximtool/clients.old/wcspix/wcmspec.x new file mode 100644 index 00000000..64198d69 --- /dev/null +++ b/vendor/x11iraf/ximtool/clients.old/wcspix/wcmspec.x @@ -0,0 +1,50 @@ +# Copyright(c) 1986 Association of Universities for Research in Astronomy Inc. + +include "wcspix.h" + + +# Multispec image class data. + + +# MSP_INIT -- Initialize the Image Class module. + +procedure msp_init () +begin +end + + +# MSP_CACHE -- Cache an image in the object cache. + +procedure msp_cache () +begin +end + + +# MSP_UNCACHE -- Uncache an image in the object cache. + +procedure msp_uncache () +begin +end + + +# MSP_WCSTRAN -- Translate object source (x,y) coordinates to the +# desired output WCSs. + +procedure msp_wcstran () +begin +end + + +# MSP_WCSLIST -- List the WCSs available for the given image. + +procedure msp_wcslist () +begin +end + + +# MSP_OBJINFO -- Get header information from the image. + +procedure msp_objinfo () +begin +end + diff --git a/vendor/x11iraf/ximtool/clients.old/wcspix/wcspix.h b/vendor/x11iraf/ximtool/clients.old/wcspix/wcspix.h new file mode 100644 index 00000000..e0657154 --- /dev/null +++ b/vendor/x11iraf/ximtool/clients.old/wcspix/wcspix.h @@ -0,0 +1,111 @@ +# WCSPIX.H -- Include file for the WCS/Pixel value ISM task + +define WCSPIX_NAME "wcspix" +define WCSPIX_MODE "text" +define WCSPIX_CONNECT "unix:/tmp/.ISM%d" + +define WCSPIX_DBG FALSE + +# Main task data structures. +define MAX_WCSLINES 4 # max WCS output lines +define LEN_PIXTAB 81 # size of pixel table +define LEN_WCSNAME 32 # size of a WCS name + +define SZ_WCSPIX 7 +define WP_CPTR Memi[$1 ] # object cache pointer +define WP_PTABSZ Memi[$1+1] # pixel table size +define WP_BPM Memi[$1+2] # get BPM data +define WP_SYSTEMS Memi[$1+3] # WCS readout systems +define WP_WCS Memi[$1+4] # WCS system string +define WP_FORMATS Memi[$1+5] # WCS readout formats +define WP_DBGLEVEL Memi[$1+6] # debug level + +define OBJCACHE Memi[WP_CPTR($1)+$2] # object cache +define SYSTEMS Memi[WP_SYSTEMS($1)+$2-1] +define FORMATS Memi[WP_FORMATS($1)+$2-1] +define WCSNAME Memc[WP_WCS($1)+(LEN_WCSNAME*($2-1))] + + +# Element of an object cache. +define SZ_CACHE 256 # size of object cache +define SZ_CNODE 135 # size of a cache node +define SZ_OBJREF 128 # size of a object reference + +define C_OBJID Memi[$1] # object id +define C_REGID Memi[$1+1] # region id +define C_CLASS Memi[$1+2] # object class +define C_DATA Memi[$1+3] # object data ptr +define C_NREF Memi[$1+4] # no. times object referenced +define C_REF Memc[P2C($1+6)] # object reference file + + +# WCSPIX ISM task methods. +define WCSPIX_CMDS "|set|get|quit|initialize|cache|uncache\ + |wcstran|wcslist|objinfo|debug" + +define SET 1 +define GET 2 +define QUIT 3 +define INITIALIZE 4 +define CACHE 5 +define UNCACHE 6 +define WCSTRAN 7 +define WCSLIST 8 +define OBJINFO 9 +define DEBUG 10 + +# Parameters definable from the GUI +define SZ_PARAM 32 # size of a parameter string + +define WCSPIX_SYSTEMS "|none|logical|physical|world|sky\ + |amplifier|ccd|detector|other|" +define SYS_NONE 1 # no coords requested +define SYS_LOGICAL 2 # logical coords +define SYS_PHYSICAL 3 # physical coords +define SYS_WORLD 4 # world coords +define SYS_SKY 5 # sky coords +define SYS_AMP 6 # amplifier coords +define SYS_CCD 7 # CCD coords +define SYS_DETECTOR 8 # detector coords +define SYS_OTHER 9 # ??? coords + +define SKYPROJ "FK5 FK4 ICRS GAPPT FK4-NO-E Ecliptic Galactic Supergalactic" + + +define WCSPIX_PARAMS "|psize|bpm|wcs|format|" +define PAR_PSIZE 1 # pixel table size +define PAR_BPM 2 # get BPM data +define PAR_WCS 3 # WCS system +define PAR_FMT 4 # WCS format + +define WCSPIX_FMT "|default|hms|degrees|radians|" +define FMT_DEFAULT 1 # no formatting +define FMT_HMS 2 # covert to sexigesimal +define FMT_DEG 3 # output degrees +define FMT_RAD 4 # output radians + +define DEF_PTABSZ 0 # default pixtable size +define DEF_FMT FMT_DEFAULT # default output format +define DEF_SYSTEM SYS_LOGICAL # default coord system +define DEF_BPM_FLAG YES # default get-BPM-data flag + + +# Object class definitions. +define UNKNOWN_CLASS 1 # unknown class +define IMAGE_CLASS 2 # generic image class +define MEF_CLASS 3 # Mosaic MEF image class +define MULTISPEC_CLASS 4 # multispec data class + +# Class methods. +define LEN_CLASS 6 # length of class table +define MAX_CLASSES 16 # max supported classes +define SZ_CLNAME 32 # size of a class name + +define CL_INIT cl_table[1,$1] # class initializer +define CL_CACHE cl_table[2,$1] # cache the object +define CL_UNCACHE cl_table[3,$1] # uncache the object +define CL_WCSTRAN cl_table[4,$1] # WCS tranformations +define CL_WCSLIST cl_table[5,$1] # list available WCS +define CL_OBJINFO cl_table[6,$1] # get object header +define CL_NAME cl_names[1,$1] # class name + diff --git a/vendor/x11iraf/ximtool/clients.old/wcspix/wcunknown.f b/vendor/x11iraf/ximtool/clients.old/wcspix/wcunknown.f new file mode 100644 index 00000000..0061fbcd --- /dev/null +++ b/vendor/x11iraf/ximtool/clients.old/wcspix/wcunknown.f @@ -0,0 +1,229 @@ + subroutine unkint (cp, wp) + logical Memb(1) + integer*2 Memc(1) + integer*2 Mems(1) + integer Memi(1) + integer*4 Meml(1) + real Memr(1) + double precision Memd(1) + complex Memx(1) + equivalence (Memb, Memc, Mems, Memi, Meml, Memr, Memd, Memx) + common /Mem/ Memd + integer cp + integer wp + logical xerpop + logical xerflg + common /xercom/ xerflg + save + if (.not.(memi(cp+3) .eq. 0)) goto 110 + call xerpsh + call xcallc(memi(cp+3) , 1, 10 ) + if (.not.xerpop()) goto 120 + goto 100 +120 continue +110 continue + memi(memi(cp+3) ) = wp +100 return + end + subroutine unkcae (cp, objid, regid, ref) + logical Memb(1) + integer*2 Memc(1) + integer*2 Mems(1) + integer Memi(1) + integer*4 Meml(1) + real Memr(1) + double precision Memd(1) + complex Memx(1) + equivalence (Memb, Memc, Mems, Memi, Meml, Memr, Memd, Memx) + common /Mem/ Memd + integer cp + integer objid + integer regid + integer*2 ref(*) + save + memi(cp) = objid + memi(cp+1) = regid + memi(cp+4) = memi(cp+4) + 1 + call xstrcy(ref, memc((((cp+6)-1)*2+1)) , 128) +100 return + end + subroutine unkune (cp, id) + logical Memb(1) + integer*2 Memc(1) + integer*2 Mems(1) + integer Memi(1) + integer*4 Meml(1) + real Memr(1) + double precision Memd(1) + complex Memx(1) + equivalence (Memb, Memc, Mems, Memi, Meml, Memr, Memd, Memx) + common /Mem/ Memd + integer cp + integer id + integer*2 st0001(1) + save + data st0001 / 0/ + memi(cp) = 0 + memi(cp+4) = 0 + call xstrcy(st0001, memc((((cp+6)-1)*2+1)) , 255 ) + call xmfree(memi(cp+3) , 10 ) + memi(cp+3) = 0 +100 return + end + subroutine unkwcn (cp, id, x, y) + logical Memb(1) + integer*2 Memc(1) + integer*2 Mems(1) + integer Memi(1) + integer*4 Meml(1) + real Memr(1) + double precision Memd(1) + complex Memx(1) + equivalence (Memb, Memc, Mems, Memi, Meml, Memr, Memd, Memx) + common /Mem/ Memd + integer cp + integer id + real x + real y + integer wp + integer i + integer*2 buf(1023 +1) + integer*2 msg(1023 +1) + integer*2 st0001(37) + integer*2 st0002(27) + integer*2 st0003(37) + integer*2 st0004(5) + save + integer iyy + data (st0001(iyy),iyy= 1, 8) /119, 99,115,116,114, 97,110, 32/ + data (st0001(iyy),iyy= 9,16) /123, 32,111, 98,106,101, 99,116/ + data (st0001(iyy),iyy=17,24) / 32, 37,100, 32,125, 32,123, 32/ + data (st0001(iyy),iyy=25,32) /114,101,103,105,111,110, 32, 37/ + data (st0001(iyy),iyy=33,37) /100, 32,125, 32, 0/ + data (st0002(iyy),iyy= 1, 8) /123, 32,112,105,120,118, 97,108/ + data (st0002(iyy),iyy= 9,16) / 32, 48, 46, 48, 32,125, 32,123/ + data (st0002(iyy),iyy=17,24) / 32, 98,112,109, 32, 48, 32,125/ + data (st0002(iyy),iyy=25,27) / 32, 10, 0/ + data (st0003(iyy),iyy= 1, 8) /123, 99,111,111,114,100, 32,123/ + data (st0003(iyy),iyy= 9,16) / 37, 57,115,125, 32,123, 37, 49/ + data (st0003(iyy),iyy=17,24) / 50,103,125, 32,123, 37, 49, 50/ + data (st0003(iyy),iyy=25,32) /103,125, 32,123, 88,125, 32,123/ + data (st0003(iyy),iyy=33,37) / 89,125,125, 10, 0/ + data st0004 / 85, 78, 75, 78, 0/ + wp = memi(memi(cp+3) ) + call aclrc (msg, 1023 ) + call sprinf (msg, 1023 , st0001) + call pargi (memi(cp) ) + call pargi (memi(cp+1) ) + call xstrct(st0002, msg, 1023 ) + i=1 +110 if (.not.(i .le. 4 )) goto 112 + call sprinf (buf, 1023 , st0003) + call pargsr (st0004) + call pargr (x) + call pargr (y) + call xstrct(buf, msg, 1023 ) +111 i=i+1 + goto 110 +112 continue + call wcspie (msg) +100 return + end + subroutine unkwct (cp, id) + logical Memb(1) + integer*2 Memc(1) + integer*2 Mems(1) + integer Memi(1) + integer*4 Meml(1) + real Memr(1) + double precision Memd(1) + complex Memx(1) + equivalence (Memb, Memc, Mems, Memi, Meml, Memr, Memd, Memx) + common /Mem/ Memd + integer cp + integer id + save +100 return + end + subroutine unkgea (cp, id, x, y, pixval) + logical Memb(1) + integer*2 Memc(1) + integer*2 Mems(1) + integer Memi(1) + integer*4 Meml(1) + real Memr(1) + double precision Memd(1) + complex Memx(1) + equivalence (Memb, Memc, Mems, Memi, Meml, Memr, Memd, Memx) + common /Mem/ Memd + integer cp + integer id + real x + real y + real pixval + integer wp + integer pix + integer size + integer x1 + integer x2 + integer y1 + integer y2 + save + wp = memi(memi(cp+3) ) + size = memi(wp+1) + x1 = x - size / 2 + 0.5 + x2 = x + size / 2 + 0.5 + y1 = y - size / 2 + 0.5 + y2 = y + size / 2 + 0.5 + pixval = 0.0 + if (.not.(size .gt. 1)) goto 110 + call xcallc(pix, size * size, 6) + call imgseb (memr(pix), size, x1, x2, y1, y2) + call xmfree(pix, 6) +110 continue +100 return + end + subroutine unkobo (cp, id, temple) + logical Memb(1) + integer*2 Memc(1) + integer*2 Mems(1) + integer Memi(1) + integer*4 Meml(1) + real Memr(1) + double precision Memd(1) + complex Memx(1) + equivalence (Memb, Memc, Mems, Memi, Meml, Memr, Memd, Memx) + common /Mem/ Memd + integer cp + integer id + integer*2 temple(*) + integer sp + integer buf + integer*2 st0001(25) + save + integer iyy + data (st0001(iyy),iyy= 1, 8) / 99,111,109,112, 97,115,115, 32/ + data (st0001(iyy),iyy= 9,16) / 37,100, 32, 48, 46, 48, 32, 45/ + data (st0001(iyy),iyy=17,24) / 49, 32, 49, 32, 88, 32, 89, 0/ + data (st0001(iyy),iyy=25,25) / 0/ + call smark (sp) + call salloc (buf, 1023 , 2) + call aclrc (memc(buf), 1023 ) + call sprinf (memc(buf), 1023 , st0001) + call pargi (memi(cp) ) + call wcspie (memc(buf)) + call sfree (sp) +100 return + end +c sprinf sprintf +c temple template +c wcspie wcspix_message +c unkwct unk_wcslist +c unkint unk_init +c unkobo unk_objinfo +c unkcae unk_cache +c imgseb img_send_pixtab +c unkune unk_uncache +c unkwcn unk_wcstran +c pargsr pargstr +c unkgea unk_getdata diff --git a/vendor/x11iraf/ximtool/clients.old/wcspix/wcunknown.x b/vendor/x11iraf/ximtool/clients.old/wcspix/wcunknown.x new file mode 100644 index 00000000..9a1afe1b --- /dev/null +++ b/vendor/x11iraf/ximtool/clients.old/wcspix/wcunknown.x @@ -0,0 +1,185 @@ +# Copyright(c) 1986 Association of Universities for Research in Astronomy Inc. + +include +include "wcspix.h" + + +# Unknown class data. +define LEN_UNKDATA 1 +define UNK_WP Memi[$1 ] # wcspix back-pointer + + +# UNK_INIT -- Initialize the object structure. + +procedure unk_init (cp, wp) + +pointer cp #i cache pointer +pointer wp #i WCSPIX structure + +begin + # Allocate the image data structure if not previously allocated. + if (C_DATA(cp) == NULL) { + iferr (call calloc (C_DATA(cp), LEN_UNKDATA, TY_STRUCT)) + return + } + + UNK_WP(C_DATA(cp)) = wp +end + + +# UNK_CACHE -- Cache an image in the object cache. Since we don't know +# what this is we simply setup so that a query to the object id will still +# return a result of some kind rather than ignore it. In most cases this +# just means the input arguments are echoed back (e.g. coords), or default +# values such as a rotation value can be retrieved. + +procedure unk_cache (cp, objid, regid, ref) + +pointer cp #i cache pointer +int objid #i object id +int regid #i region id +char ref[ARB] #i object reference + +begin + C_OBJID(cp) = objid + C_REGID(cp) = regid + C_NREF(cp) = C_NREF(cp) + 1 + call strcpy (ref, C_REF(cp), 128) +end + + +# UNK_UNCACHE -- Uncache an unknown image in the object cache. + +procedure unk_uncache (cp, id) + +pointer cp #i cache pointer +int id #i image id + +begin + C_OBJID(cp) = NULL + C_NREF(cp) = 0 + call strcpy ("", C_REF(cp), SZ_FNAME) + + call mfree (C_DATA(cp), TY_STRUCT) + C_DATA(cp) = NULL +end + + +# UNK_WCSTRAN -- Translate object source (x,y) coordinates to the +# desired output WCSs. Message is returned as something like: +# +# set value { +# { object } { region } +# { pixval [] } +# { coord [ ] } +# { coord [ ] } +# } + + +procedure unk_wcstran (cp, id, x, y) + +pointer cp #i cache pointer +int id #i image id +real x, y #i source coords + +pointer wp +int i + +# Use static storage to avoid allocation overhead. +char buf[SZ_LINE], msg[SZ_LINE] + +begin + wp = UNK_WP(C_DATA(cp)) + + # Begin formatting the message. + call aclrc (msg, SZ_LINE) + call sprintf (msg, SZ_LINE, "wcstran { object %d } { region %d } ") + call pargi (C_OBJID(cp)) + call pargi (C_REGID(cp)) + call strcat ("{ pixval 0.0 } { bpm 0 } \n", msg, SZ_LINE) + + + # Now loop over the requested systems and generate a coordinate + # for each. + for (i=1; i <= MAX_WCSLINES; i=i+1) { + + # Format the coord buffer and append it to the message. + call sprintf (buf, SZ_LINE, "{coord {%9s} {%12g} {%12g} {X} {Y}}\n") + call pargstr ("UNKN") + call pargr (x) + call pargr (y) + call strcat (buf, msg, SZ_LINE) + } + + # Now send the completed message. + call wcspix_message (msg) +end + + +# UNK_WCSLIST -- List the WCSs available for the given image. + +procedure unk_wcslist (cp, id) + +pointer cp #i cache pointer +int id #i image id + +begin + #call wcspix_message ("wcslist {None Logical}") +end + + +# UNK_GETDATA -- Get data from the image. + +procedure unk_getdata (cp, id, x, y, pixval) + +pointer cp #i cache pointer +int id #i image id +real x, y #i source coords +real pixval #o central pixel value + +pointer wp, pix +int size, x1, x2, y1, y2 + +begin + wp = UNK_WP(C_DATA(cp)) + size = WP_PTABSZ(wp) + + # Compute the box offset given the center and size. + x1 = x - size / 2 + 0.5 + x2 = x + size / 2 + 0.5 + y1 = y - size / 2 + 0.5 + y2 = y + size / 2 + 0.5 + + pixval = 0.0 + + # Send the pixel table. + if (size > 1) { + call calloc (pix, size * size, TY_REAL) + call img_send_pixtab (Memr[pix], size, x1, x2, y1, y2) + call mfree (pix, TY_REAL) + } +end + + +# UNK_OBJINFO -- Get header information from the image. + +procedure unk_objinfo (cp, id, template) + +pointer cp #i cache pointer +int id #i image id +char template[ARB] #i keyword template + +pointer sp, buf + +begin + call smark (sp) + call salloc (buf, SZ_LINE, TY_CHAR) + + # Send a default (X,Y) compass indicator. + call aclrc (Memc[buf], SZ_LINE) + call sprintf (Memc[buf], SZ_LINE, "compass %d 0.0 -1 1 X Y\0") + call pargi (C_OBJID(cp)) + call wcspix_message (Memc[buf]) + + call sfree (sp) +end diff --git a/vendor/x11iraf/ximtool/clients.old/x_ism.f b/vendor/x11iraf/ximtool/clients.old/x_ism.f new file mode 100644 index 00000000..218b5d0b --- /dev/null +++ b/vendor/x11iraf/ximtool/clients.old/x_ism.f @@ -0,0 +1,145 @@ + integer function sysruk (task, cmd, rukarf, rukint) + integer rukarf + integer rukint + integer*2 task(*) + integer*2 cmd(*) + integer i + integer ntasks + integer lmarg + integer rmarg + integer maxch + integer ncol + integer rukean + integer envgei + integer envscn + logical streq + logical xerpop + logical xerflg + common /xercom/ xerflg + integer iyy + integer dp(2) + integer*2 dict(7) + integer*2 st0001(9) + integer*2 st0002(6) + integer*2 st0003(3) + integer*2 st0004(6) + integer*2 st0005(6) + integer*2 st0006(4) + integer*2 st0007(6) + integer*2 st0008(2) + integer*2 st0009(29) + integer*2 st0010(25) + save + data dict /119, 99,115,112,105,120, 0/ + data (st0001(iyy),iyy= 1, 8) /116,116,121,110, 99,111,108,115/ + data (st0001(iyy),iyy= 9, 9) / 0/ + data st0002 / 99,104,100,105,114, 0/ + data st0003 / 99,100, 0/ + data st0004 /104,111,109,101, 36, 0/ + data st0005 / 72, 79, 77, 69, 36, 0/ + data st0006 /115,101,116, 0/ + data st0007 /114,101,115,101,116, 0/ + data st0008 / 9, 0/ + data (st0009(iyy),iyy= 1, 8) /105,110,118, 97,108,105,100, 32/ + data (st0009(iyy),iyy= 9,16) /115,101,116, 32,115,116, 97,116/ + data (st0009(iyy),iyy=17,24) /101,109,101,110,116, 58, 32, 39/ + data (st0009(iyy),iyy=25,29) / 37,115, 39, 10, 0/ + data (st0010(iyy),iyy= 1, 8) /105,110,118, 97,108,105,100, 32/ + data (st0010(iyy),iyy= 9,16) / 83, 69, 84, 32,105,110, 32, 73/ + data (st0010(iyy),iyy=17,24) / 82, 65, 70, 32, 77, 97,105,110/ + data (st0010(iyy),iyy=25,25) / 0/ + data (dp(iyy),iyy= 1, 2) / 1, 0/ + data lmarg /5/, maxch /0/, ncol /0/, rukean /3/ + data ntasks /0/ + if (.not.(ntasks .eq. 0)) goto 110 + i=1 +120 if (.not.(dp(i) .ne. 0)) goto 122 +121 i=i+1 + goto 120 +122 continue + ntasks = i - 1 +110 continue + if (.not.(task(1) .eq. 63)) goto 130 + call xerpsh + rmarg = envgei (st0001) + if (.not.xerpop()) goto 140 + rmarg = 80 +140 continue + call strtbl (4, dict, dp, ntasks, lmarg, rmarg, maxch, ncol) + sysruk = (0) + goto 100 +130 continue + if (.not.(streq(task,st0002) .or. streq(task,st0003))) goto 150 + call xerpsh + if (.not.(cmd(rukarf) .eq. 0)) goto 170 + call xerpsh + call xfchdr(st0004) + if (.not.xerpop()) goto 180 + call xfchdr(st0005) +180 continue + goto 171 +170 continue + call xfchdr(cmd(rukarf)) +171 continue +162 if (.not.xerpop()) goto 160 + if (.not.(rukint .eq. 1)) goto 190 + call erract (rukean) + if (xerflg) goto 100 + goto 191 +190 continue +191 continue +160 continue + sysruk = (0) + goto 100 +150 continue + if (.not.(streq(task,st0006) .or. streq(task,st0007))) goto 200 + call xerpsh + if (.not.(cmd(rukarf) .eq. 0)) goto 220 + call envlit (4, st0008, 1) + call xffluh(4) + goto 221 +220 continue + if (.not.(envscn (cmd) .le. 0)) goto 230 + if (.not.(rukint .eq. 1)) goto 240 + call eprinf (st0009) + call pargsr (cmd) + goto 241 +240 continue + goto 91 +241 continue +230 continue +221 continue +212 if (.not.xerpop()) goto 210 + if (.not.(rukint .eq. 1)) goto 250 + call erract (rukean) + if (xerflg) goto 100 + goto 251 +250 continue +91 call syspac (0, st0010) +251 continue +210 continue + sysruk = (0) + goto 100 +200 continue +151 continue +131 continue + if (.not.(streq (task, dict(dp(1))))) goto 260 + call twcspx + sysruk = (0) + goto 100 +260 continue + sysruk = (-1) + goto 100 +100 return + end +c rukint ruk_interact +c sysruk sys_runtask +c envscn envscan +c twcspx t_wcspix +c envgei envgeti +c syspac sys_panic +c eprinf eprintf +c rukarf ruk_argoff +c rukean ruk_eawarn +c pargsr pargstr +c envlit envlist diff --git a/vendor/x11iraf/ximtool/clients.old/x_ism.x b/vendor/x11iraf/ximtool/clients.old/x_ism.x new file mode 100644 index 00000000..8f401873 --- /dev/null +++ b/vendor/x11iraf/ximtool/clients.old/x_ism.x @@ -0,0 +1 @@ +task wcspix = t_wcspix diff --git a/vendor/x11iraf/ximtool/clients/DONE b/vendor/x11iraf/ximtool/clients/DONE new file mode 100644 index 00000000..e69de29b diff --git a/vendor/x11iraf/ximtool/clients/Imakefile b/vendor/x11iraf/ximtool/clients/Imakefile new file mode 100644 index 00000000..0c126522 --- /dev/null +++ b/vendor/x11iraf/ximtool/clients/Imakefile @@ -0,0 +1,32 @@ +XCOMM Imakefile for the Image Support Module components. + +X11IRAFDIR = ../../ +#include <../../X11IRAF.tmpl> + + WC_SRCS = wcspix/t_wcspix.x wcspix/wcimage.x wcspix/wcmef.x \ + wcspix/wcmspec.x wcspix/wcspix.h + LIB_SRCS = lib/dspmmap.x lib/ism.x lib/idxstr.x lib/wcsgfterm.x + + +all:: ism_wcspix.e + +ism_wcspix.e: $(WC_SRCS) $(LIB_SRCS) + @(SHELL=/bin/sh ; export SHELL ; mkpkg relink) + touch DONE + +SubdirLibraryRule($(WC_SRCS) $(LIB_SRCS)) + +clean:: + @(rmbin -v .) + touch DONE + +includes:: + +#if InstallBinaries +install:: ism_wcspix.e + -@if [ -d X11irafBinDir ]; then set +x; \ + else (set -x; $(MKDIRHIER) X11irafBinDir); fi + mv ism_wcspix.e X11irafBinDir +#endif + +DependTarget() diff --git a/vendor/x11iraf/ximtool/clients/Makefile b/vendor/x11iraf/ximtool/clients/Makefile new file mode 100644 index 00000000..9de62c08 --- /dev/null +++ b/vendor/x11iraf/ximtool/clients/Makefile @@ -0,0 +1,1067 @@ +# Makefile generated by imake - do not edit! +# $Xorg: imake.c,v 1.6 2001/02/09 02:03:15 xorgcvs Exp $ + +# ---------------------------------------------------------------------- +# Makefile generated from "Imake.tmpl" and +# $Xorg: Imake.tmpl,v 1.4 2000/08/17 19:41:46 cpqbld Exp $ +# +# +# +# +# $XFree86: xc/config/cf/Imake.tmpl,v 3.138 2002/12/10 03:20:41 dawes Exp $ +# ---------------------------------------------------------------------- + +all:: + +.SUFFIXES: .i + +# $Xorg: Imake.cf,v 1.4 2000/08/17 19:41:45 cpqbld Exp $ + +# $XFree86: xc/config/cf/Imake.cf,v 3.80 2003/01/15 02:52:12 dawes Exp $ + +# Keep cpp from replacing path elements containing i486/i586/i686 + +# ----------------------------------------------------------------------- +# site-specific configuration parameters that need to come before +# the platform-specific parameters - edit site.def to change + +# site: $TOG: site.sample /main/r64_final/1 1998/02/05 16:28:49 kaleb $ + +# site: $XFree86: xc/config/cf/site.def,v 3.24 2000/06/25 20:17:29 dawes Exp $ + +# $XFree86: xc/config/cf/xf86site.def,v 3.181 2002/02/22 21:32:33 dawes Exp $ + +# ---------------------------------------------------------------------- +# platform-specific configuration parameters - edit linux.cf to change + +# platform: $Xorg: linux.cf,v 1.3 2000/08/17 19:41:47 cpqbld Exp $ + +# platform: $XFree86: xc/config/cf/linux.cf,v 3.201tsi Exp $ + +# operating system: Linux 2.4.29-4aslsmp i686 [ELF] (2.4.29) +# libc: (6.3.2) +# binutils: (213) + +# $Xorg: lnxLib.rules,v 1.3 2000/08/17 19:41:47 cpqbld Exp $ +# $XFree86: xc/config/cf/lnxLib.rules,v 3.43 2002/04/04 14:05:33 eich Exp $ + +# $XFree86: xc/config/cf/xfree86.cf,v 3.439.2.1 2003/03/13 04:10:40 tsi Exp $ + +# $Xorg: xfree86.cf,v 1.4 2000/08/17 19:41:49 cpqbld Exp $ + +VENDORMANNAME = XFree86 +VENDORMANVERSION = `echo 4 3 0 | sed -e 's/ /./g' -e 's/^/Version\\\ /'` + +AFB_DEFS = -DUSE_AFB + +DRIVERSDKDIR = $(USRLIBDIR)/Server +DRIVERSDKMODULEDIR = $(USRLIBDIR)/Server/modules +DRIVERSDKINCLUDEDIR = $(USRLIBDIR)/Server/include + + XF86SRC = $(SERVERSRC)/hw/xfree86 + XF86COMSRC = $(XF86SRC)/common + XF86PARSERSRC = $(XF86SRC)/parser + XF86OSSRC = $(XF86SRC)/os-support + XF86DRIVERSRC = $(XF86SRC)/drivers + DRIVERSRC = $(XF86DRIVERSRC) + + XFREE86DOCDIR = $(DOCDIR) + XFREE86PSDOCDIR = $(DOCPSDIR) + XFREE86HTMLDOCDIR = $(DOCHTMLDIR) +XFREE86JAPANESEDOCDIR = $(DOCDIR)/Japanese + +# $Xorg: xf86.rules,v 1.3 2000/08/17 19:41:48 cpqbld Exp $ + +# $XFree86: xc/config/cf/xf86.rules,v 3.33 2001/01/17 16:38:51 dawes Exp $ + +# ---------------------------------------------------------------------- +# site-specific configuration parameters that go after +# the platform-specific parameters - edit site.def to change + +# site: $TOG: site.sample /main/r64_final/1 1998/02/05 16:28:49 kaleb $ + +# site: $XFree86: xc/config/cf/site.def,v 3.24 2000/06/25 20:17:29 dawes Exp $ + +# --------------------------------------------------------------------- +# Imake rules for building libraries, programs, scripts, and data files +# rules: $Xorg: Imake.rules,v 1.3 2000/08/17 19:41:46 cpqbld Exp $ +# +# +# +# +# rules: $XFree86: xc/config/cf/Imake.rules,v 3.112 2002/11/14 21:01:13 tsi Exp $ + + _NULLCMD_ = @ echo -n + +GLIDE2INCDIR = /usr/include/glide + +GLIDE3INCDIR = /usr/include/glide3 + +GLIDE3LIBNAME = glide3 + +TKLIBNAME = + +TKLIBDIR = + +TCLLIBNAME = + +TCLIBDIR = + + PATHSEP = / + SHELL = /bin/sh -e + + TOP = ../.. + CURRENT_DIR = ximtool/clients + + IMAKE = imake + DEPEND = gccmakedep + MKDIRHIER = mkdir -p + REVPATH = revpath + EXPORTLISTGEN = + RMAN = rman + RMANBASENAME = rman + RMANOPTIONS = -f HTML + CONFIGSRC = $(TOP)/config + IMAKESRC = $(CONFIGSRC)/imake + DEPENDSRC = $(CONFIGSRC)/util + + INCROOT = /usr/X11R6/include + USRLIBDIR = /usr/X11R6/lib + VARDIR = /var + VARLIBDIR = $(VARDIR)/lib + SYSTEMUSRLIBDIR = /usr/lib + SYSTEMUSRINCDIR = /usr/include + SHLIBDIR = /usr/X11R6/lib + LINTLIBDIR = $(USRLIBDIR)/lint + MANPATH = /usr/X11R6/man + MANSOURCEPATH = $(MANPATH)/man + MANDIR = $(MANSOURCEPATH)1 + LIBMANDIR = $(MANSOURCEPATH)3 + FILEMANDIR = $(MANSOURCEPATH)5 + MISCMANDIR = $(MANSOURCEPATH)7 + DRIVERMANDIR = $(MANSOURCEPATH)4 + ICONDIR = /usr/share/icons + XCURSORPATH = "~/.icons:/usr/share/icons:/usr/share/pixmaps" + LOGDIRECTORY = $(VARDIR)/log + + VARRUNDIR = $(VARDIR)/run + + VARDBDIR = $(VARDIR)/lib + + AR = ar clq + +# Nice try but useless: make will inherit BOOTSTRAPCFLAGS +# from top Makefile + BOOTSTRAPCFLAGS = -O2 -pipe -march=i386 -mcpu=i686 -pipe + + CC = gcc -m32 + AS = gcc -m32 -c -x assembler + +.SUFFIXES: .cc + + CXX = c++ -m32 + + CXXFILT = c++filt + CXXLIB = + CXXDEBUGFLAGS = -O2 -pipe -march=i386 -mcpu=i686 -fno-strict-aliasing -pipe +CXXDEPENDINCLUDES = + CXXEXTRA_DEFINES = +CXXEXTRA_INCLUDES = + CXXSTD_DEFINES = -Dlinux -D__i386__ -D_POSIX_C_SOURCE=199309L -D_POSIX_SOURCE -D_XOPEN_SOURCE -D_BSD_SOURCE -D_SVID_SOURCE $(CXXPROJECT_DEFINES) + CXXOPTIONS = + CXXINCLUDES = $(INCLUDES) $(TOP_INCLUDES) $(CXXEXTRA_INCLUDES) + CXXDEFINES = $(CXXINCLUDES) $(CXXSTD_DEFINES) $(THREADS_CXXDEFINES) $(DEFINES) $(CXXEXTRA_DEFINES) + CXXFLAGS = $(CXXDEBUGFLAGS) $(CXXOPTIONS) $(THREADS_CXXFLAGS) $(CXXDEFINES) + + COMPRESS = compress + GZIPCMD = gzip + + CPP = /usr/bin/cpp $(STD_CPP_DEFINES) + RAWCPP = /usr/bin/cpp -undef $(STD_CPP_OPTIONS) + PREPROCESSCMD = gcc -m32 -E $(STD_CPP_DEFINES) + + INSTALL = install + INSTALLFLAGS = -c + + LD = gcc -m32 -nostdlib + + LEX = flex -l + M4 = m4 + M4FLAGS = + LEXLIB = -lfl + YACC = bison -y + CCYACC = bison -y + + LINT = lint + + LINTLIBFLAG = -C + LINTOPTS = -axz + LN = ln -s + MAKE = make + MV = mv -f + CP = cp + + RANLIB = ranlib + + RANLIBINSTFLAGS = + + RM = rm -f + PERL = perl + PERLOPTS = + MANSUFFIX = 1x + LIBMANSUFFIX = 3x + FILEMANSUFFIX = 5x + MISCMANSUFFIX = 7x + DRIVERMANSUFFIX = 4x + MANSRCSUFFIX = man + MANNEWSUFFIX = _man + MANDEFS = -D__apploaddir__=$(XAPPLOADDIR) -D__filemansuffix__=$(FILEMANSUFFIX) -D__libmansuffix__=$(LIBMANSUFFIX) -D__miscmansuffix__=$(MISCMANSUFFIX) -D__drivermansuffix__=$(DRIVERMANSUFFIX) -D__projectroot__=$(PROJECTROOT) $(XORGMANDEFS) $(VENDORMANDEFS) + + COMPRESSMANCMD = gzip -n + + TROFF = groff -Tps + NROFF = nroff + MSMACROS = -ms + MANMACROS = -man + TBL = tbl + EQN = eqn + NEQN = neqn + COL = col + COLFLAGS = -b + + MODCC = gcc -m32 + + MODCPP = /usr/bin/cpp + MODCFLAGS = $(CFLAGS) + MODAS = gcc -m32 -c -x assembler + MODASFLAGS = + + MODLD = gcc -m32 -nostdlib + + MODLDFLAGS = +MODLDCOMBINEFLAGS = -r + MODAR = ar clq + + MODRANLIB = ranlib + + STD_INCLUDES = + STD_CPP_OPTIONS = -traditional + STD_CPP_DEFINES = -traditional -Dlinux -D__i386__ -D_POSIX_C_SOURCE=199309L -D_POSIX_SOURCE -D_XOPEN_SOURCE -D_BSD_SOURCE -D_SVID_SOURCE $(PROJECT_DEFINES) + STD_DEFINES = -Dlinux -D__i386__ -D_POSIX_C_SOURCE=199309L -D_POSIX_SOURCE -D_XOPEN_SOURCE -D_BSD_SOURCE -D_SVID_SOURCE $(PROJECT_DEFINES) + EXTRA_LOAD_FLAGS = + EXTRA_LDOPTIONS = + EXTRA_LIBRARIES = + TAGS = ctags + + PARALLELMFLAGS = + + SHAREDCODEDEF = + SHLIBDEF = + + SHLIBLDFLAGS = -shared $(SHLIBGLOBALSFLAGS) + + PICFLAGS = -fPIC + + CXXPICFLAGS = -fPIC + + PROTO_DEFINES = -DFUNCPROTO=15 -DNARROWPROTO + + INSTPGMFLAGS = + + INSTBINFLAGS = -m 0755 + INSTUIDFLAGS = -m 4711 + INSTLIBFLAGS = -m 0644 + INSTINCFLAGS = -m 0444 + INSTMANFLAGS = -m 0444 + INSTDATFLAGS = -m 0444 + INSTKMEMFLAGS = -m 4711 + + PROJECTROOT = /usr/X11R6 + + CDEBUGFLAGS = -O2 -pipe -march=i386 -mcpu=i686 -fno-strict-aliasing -pipe + CCOPTIONS = + + ALLINCLUDES = $(INCLUDES) $(EXTRA_INCLUDES) $(TOP_INCLUDES) $(INSTALLED_INCLUDES) $(STD_INCLUDES) + ALLDEFINES = $(ALLINCLUDES) $(STD_DEFINES) $(PROTO_DEFINES) $(THREADS_DEFINES) $(MODULE_DEFINES) $(DEFINES) $(EXTRA_DEFINES) + CFLAGS = $(CDEBUGFLAGS) $(CCOPTIONS) $(THREADS_CFLAGS) $(MODULE_CFLAGS) $(ALLDEFINES) + LINTFLAGS = $(LINTOPTS) -DLINT $(ALLDEFINES) $(DEPEND_DEFINES) + LDPRELIB = -L$(USRLIBDIR) $(INSTALLED_LIBS) + LDPOSTLIB = + LDOPTIONS = $(CDEBUGFLAGS) $(CCOPTIONS) $(EXTRA_LDOPTIONS) $(THREADS_LDFLAGS) $(LOCAL_LDFLAGS) $(LDPRELIBS) + CXXLDOPTIONS = $(CXXDEBUGFLAGS) $(CXXOPTIONS) $(EXTRA_LDOPTIONS) $(THREADS_CXXLDFLAGS) $(LOCAL_LDFLAGS) $(LDPRELIBS) + + LDLIBS = $(LDPOSTLIBS) $(THREADS_LIBS) $(SYS_LIBRARIES) $(EXTRA_LIBRARIES) + + CCLINK = $(CC) + + CXXLINK = $(CXX) + + LDSTRIPFLAGS = -x + LDCOMBINEFLAGS = -r + DEPENDFLAGS = + DEPEND_DEFINES = + +# Not sure this belongs here + TKLIBDIR = + TKINCDIR = + TKLIBNAME = + TKLIBRARY = -L$(TKLIBDIR) -l$(TKLIBNAME) + TCLLIBDIR = + TCLINCDIR = + TCLLIBNAME = + TCLLIBRARY = -L$(TCLLIBDIR) -l$(TCLLIBNAME) + + MACROFILE = linux.cf + RM_CMD = $(RM) + + IMAKE_DEFINES = + IMAKE_WARNINGS = -Wundef + + IRULESRC = $(CONFIGDIR) + IMAKE_CMD = $(IMAKE) -DUseInstalled -I$(IRULESRC) $(IMAKE_DEFINES) $(IMAKE_WARNINGS) + + ICONFIGFILES = $(IRULESRC)/Imake.tmpl $(IRULESRC)/X11.tmpl $(IRULESRC)/site.def $(IRULESRC)/$(MACROFILE) $(IRULESRC)/xfree86.cf $(IRULESRC)/xf86.rules $(IRULESRC)/xf86site.def $(IRULESRC)/host.def $(EXTRA_ICONFIGFILES) + +# $Xorg: X11.rules,v 1.4 2000/08/17 19:41:46 cpqbld Exp $ + +# $XFree86: xc/config/cf/X11.rules,v 1.5 2000/11/06 19:24:00 dawes Exp $ + +# ---------------------------------------------------------------------- +# X Window System Build Parameters and Rules +# $Xorg: X11.tmpl,v 1.6 2000/08/17 19:41:46 cpqbld Exp $ +# +# +# +# +# $XFree86: xc/config/cf/X11.tmpl,v 1.196.2.2 2003/09/17 05:58:15 herrb Exp $ + +XORGRELSTRING = Release 6.6 +XORGMANNAME = X Version 11 + +VENDORMANNAME = XFree86 +VENDORMANVERSION = `echo 4 3 0 | sed -e 's/ /./g' -e 's/^/Version\\\ /'` + +STICKY_DEFINES = -DHAS_STICKY_DIR_BIT + +FCHOWN_DEFINES = -DHAS_FCHOWN + +# ----------------------------------------------------------------------- +# X Window System make variables; these need to be coordinated with rules + + XTOP = $(TOP) + BINDIR = /usr/X11R6/bin + BUILDINCROOT = $(TOP)/exports + BUILDINCDIR = $(BUILDINCROOT)/include + BUILDINCTOP = ../.. + BUILDLIBDIR = $(TOP)/exports/lib + BUILDLIBTOP = ../.. + BUILDBINDIR = $(TOP)/exports/bin + BUILDBINTOP = ../.. + BUILDMODULEDIR = $(BUILDLIBDIR)/modules + BUILDMODULETOP = $(BUILDLIBTOP)/.. + XBUILDINCROOT = $(XTOP)/exports + XBUILDINCDIR = $(XBUILDINCROOT)/include/X11 + XBUILDINCTOP = ../../.. + XBUILDBINDIR = $(XBUILDINCROOT)/bin + INCDIR = $(INCROOT) + ADMDIR = /var/log + LIBDIR = /usr/X11R6/lib/X11 + LIBEXECDIR = /usr/X11R6/libexec + MODULEDIR = $(USRLIBDIR)/modules + TOP_X_INCLUDES = + + ETCX11DIR = /etc/X11 + + CONFDIR = $(ETCX11DIR) + + DOCDIR = $(LIBDIR)/doc + DOCHTMLDIR = $(DOCDIR)/html + DOCPSDIR = $(DOCDIR)/PostScript + FONTDIR = $(LIBDIR)/fonts + ENCODINGSDIR = $(FONTDIR)/encodings + XINITDIR = /etc/X11/xinit + XDMDIR = /etc/X11/xdm + XDMVARDIR = $(VARLIBDIR)/xdm + TWMDIR = $(LIBDIR)/twm + XSMDIR = $(LIBDIR)/xsm + NLSDIR = $(LIBDIR)/nls + XLOCALEDIR = $(LIBDIR)/locale + PEXAPIDIR = $(LIBDIR)/PEX + LBXPROXYDIR = /etc/X11/lbxproxy + PROXYMANAGERDIR = /etc/X11/proxymngr + XPRINTDIR = /etc/X11/xserver + XAPPLOADDIR = $(LIBDIR)/app-defaults + FONTCFLAGS = -t + + INSTAPPFLAGS = $(INSTDATFLAGS) + + RGB = $(BINDIR)/rgb + FONTC = $(BINDIR)/bdftopcf + MKFONTDIR = $(BINDIR)/mkfontdir + MKHTMLINDEX = $(BINDIR)/mkhtmlindex + UCS2ANY = $(BINDIR)/ucs2any + BDFTRUNCATE = $(BINDIR)/bdftruncate + UCSMAPPREFIX = $(FONTDIR)/util/map- + XCURSORGEN = $(BINDIR)/xcursorgen + + HTMLINDEXCMD = HtmlIndexCmd + + DOCUTILSRC = $(XTOP)/doc/util + CLIENTSRC = $(TOP)/clients + DEMOSRC = $(TOP)/demos + XDOCMACROS = $(DOCUTILSRC)/macros.t + XIDXMACROS = $(DOCUTILSRC)/indexmacros.t + PROGRAMSRC = $(TOP)/programs + LIBSRC = $(XTOP)/lib + FONTSRC = $(XTOP)/fonts + ENCODINGSSRC = $(FONTSRC)/encodings + INCLUDESRC = $(BUILDINCROOT)/include + XINCLUDESRC = $(INCLUDESRC)/X11 + SERVERSRC = $(XTOP)/programs/Xserver + CONTRIBSRC = $(XTOP)/../contrib + UNSUPPORTEDSRC = $(XTOP)/unsupported + DOCSRC = $(XTOP)/doc + RGBSRC = $(XTOP)/programs/rgb + BDFTOPCFSRC = $(PROGRAMSRC)/bdftopcf + MKFONTDIRSRC = $(PROGRAMSRC)/mkfontdir + FONTSERVERSRC = $(PROGRAMSRC)/xfs + FONTINCSRC = $(XTOP)/include/fonts + EXTINCSRC = $(XTOP)/include/extensions + FTSOURCEDIR = $(TOP)/extras/FreeType + XTTSOURCEDIR = $(TOP)/extras/X-TrueType + MESASRCDIR = $(TOP)/extras/Mesa + OGLSAMPLESRCDIR = $(TOP)/extras/ogl-sample + PSWRAPSRC = $(XTOP)/config/pswrap + TRANSCOMMSRC = $(LIBSRC)/xtrans + TRANS_INCLUDES = -I$(TRANSCOMMSRC) + CONNECTION_FLAGS = -DUNIXCONN -DTCPCONN $(STICKY_DEFINES) $(FCHOWN_DEFINES) + + XORGMANDEFS = -D__xorgversion__='"$(XORGRELSTRING)" "$(XORGMANNAME)"' + VENDORMANDEFS = -D__vendorversion__="\"Version $(VENDORMANVERSION)\" $(VENDORMANNAME)" + + XENVLIBDIR = $(USRLIBDIR) + CLIENTENVSETUP = LD_LIBRARY_PATH=$(XENVLIBDIR) + +# $Xorg: lnxLib.tmpl,v 1.3 2000/08/17 19:41:47 cpqbld Exp $ +# $XFree86: xc/config/cf/lnxLib.tmpl,v 3.13 2001/01/17 16:22:32 dawes Exp $ + + XLIBSRC = $(LIBSRC)/X11 + +SOXLIBREV = 6.2 +DEPXONLYLIB = +XONLYLIB = -lX11 + +LINTXONLY = $(LINTLIBDIR)/llib-lX11.ln + + XLIBONLY = $(XONLYLIB) + + XEXTLIBSRC = $(LIBSRC)/Xext + +SOXEXTREV = 6.4 +DEPEXTENSIONLIB = +EXTENSIONLIB = -lXext + +LINTEXTENSION = $(LINTLIBDIR)/llib-lXext.ln + +LINTEXTENSIONLIB = $(LINTEXTENSION) + DEPXLIB = $(DEPEXTENSIONLIB) $(DEPXONLYLIB) + XLIB = $(EXTENSIONLIB) $(XONLYLIB) + LINTXLIB = $(LINTXONLYLIB) + + XSSLIBSRC = $(LIBSRC)/Xss + +DEPXSSLIB = $(USRLIBDIR)/libXss.a +XSSLIB = -lXss + +LINTXSS = $(LINTLIBDIR)/llib-lXss.ln + + XXF86MISCLIBSRC = $(LIBSRC)/Xxf86misc + +DEPXXF86MISCLIB = $(USRLIBDIR)/libXxf86misc.a +XXF86MISCLIB = -lXxf86misc + +LINTXXF86MISC = $(LINTLIBDIR)/llib-lXxf86misc.ln + + XXF86VMLIBSRC = $(LIBSRC)/Xxf86vm + +DEPXXF86VMLIB = $(USRLIBDIR)/libXxf86vm.a +XXF86VMLIB = -lXxf86vm + +LINTXXF86VM = $(LINTLIBDIR)/llib-lXxf86vm.ln + + XXF86DGALIBSRC = $(LIBSRC)/Xxf86dga + +DEPXXF86DGALIB = $(USRLIBDIR)/libXxf86dga.a +XXF86DGALIB = -lXxf86dga + +LINTXXF86DGA = $(LINTLIBDIR)/llib-lXxf86dga.ln + + XXF86RUSHLIBSRC = $(LIBSRC)/Xxf86rush + +DEPXXF86RUSHLIB = $(USRLIBDIR)/libXxf86rush.a +XXF86RUSHLIB = -lXxf86rush + +LINTXXF86RUSH = $(LINTLIBDIR)/llib-lXxf86rush.ln + + XVLIBSRC = $(LIBSRC)/Xv + +SOXVREV = 1.0 +DEPXVLIB = +XVLIB = -lXv + +LINTXV = $(LINTLIBDIR)/llib-lXv.ln + + XVMCLIBSRC = $(LIBSRC)/XvMC + +DEPXVMCLIB = $(USRLIBDIR)/libXvMC.a +XVMCLIB = -lXvMC + +LINTXVMC = $(LINTLIBDIR)/llib-lXvMC.ln + + XINERAMALIBSRC = $(LIBSRC)/Xinerama + +DEPXINERAMALIB = $(USRLIBDIR)/libXinerama.a +XINERAMALIB = -lXinerama + +LINTXINERAMA = $(LINTLIBDIR)/llib-lXinerama.ln + + XRESLIBSRC = $(LIBSRC)/XRes + +DEPXRESLIB = $(USRLIBDIR)/libXRes.a +XRESLIB = -lXRes + +LINTXRES = $(LINTLIBDIR)/llib-lXRes.ln + + DPSLIBSRC = $(LIBSRC)/dps + +SODPSREV = 1.0 +DEPDPSLIB = +DPSLIB = -ldps + +LINTDPS = $(LINTLIBDIR)/llib-ldps.ln + + DPSTKLIBSRC = $(LIBSRC)/dpstk + +SODPSTKREV = 1.0 +DEPDPSTKLIB = +DPSTKLIB = -ldpstk + +LINTDPSTK = $(LINTLIBDIR)/llib-ldpstk.ln + + PSRESLIBSRC = $(LIBSRC)/psres + +SOPSRESREV = 1.0 +DEPPSRESLIB = +PSRESLIB = -lpsres + +LINTPSRES = $(LINTLIBDIR)/llib-lpsres.ln + + GLULIBSRC = $(LIBSRC)/GLU + +SOGLUREV = 1.3 +DEPGLULIB = +GLULIB = -lGLU + +LINTGLU = $(LINTLIBDIR)/llib-lGLU.ln + + GLXLIBSRC = $(LIBSRC)/GL + +SOGLREV = 1.2 +DEPGLXLIB = +GLXLIB = -lGL + +LINTGLX = $(LINTLIBDIR)/llib-lGL.ln + + GLWIDGETSRC = $(LIBSRC)/GLw + +DEPGLWLIB = $(USRLIBDIR)/libGLw.a +GLWLIB = -lGLw + +LINTGLW = $(LINTLIBDIR)/llib-lGLw.ln + + XRENDERLIBSRC = $(LIBSRC)/Xrender + +SOXRENDERREV = 1.2 +DEPXRENDERLIB = +XRENDERLIB = -lXrender + +LINTXRENDER = $(LINTLIBDIR)/llib-lXrender.ln + + XRANDRRLIBSRC = $(LIBSRC)/Xrandr + +SOXRANDRREV = 2.0 +DEPXRANDRLIB = +XRANDRLIB = -lXrandr + +LINTXRANDR = $(LINTLIBDIR)/llib-lXrandr.ln + + XCURSORRLIBSRC = $(LIBSRC)/Xcursor + +SOXCURSORREV = 1.0 +DEPXCURSORLIB = +XCURSORLIB = -lXcursor + +LINTXCURSOR = $(LINTLIBDIR)/llib-lXcursor.ln + + XFONTCACHELIBSRC = $(LIBSRC)/Xfontcache + +DEPXFONTCACHELIB = $(USRLIBDIR)/libXfontcache.a +XFONTCACHELIB = -lXfontcache + +LINTXFONTCACHE = $(LINTLIBDIR)/llib-lXfontcache.ln + + XAUTHSRC = $(LIBSRC)/Xau + +DEPXAUTHLIB = $(USRLIBDIR)/libXau.a +XAUTHLIB = -lXau + +LINTXAUTH = $(LINTLIBDIR)/llib-lXau.ln + + XDMCPLIBSRC = $(LIBSRC)/Xdmcp + +DEPXDMCPLIB = $(USRLIBDIR)/libXdmcp.a +XDMCPLIB = -lXdmcp + +LINTXDMCP = $(LINTLIBDIR)/llib-lXdmcp.ln + + XMUSRC = $(LIBSRC)/Xmu + +SOXMUREV = 6.2 +DEPXMULIB = +XMULIB = -lXmu + +LINTXMU = $(LINTLIBDIR)/llib-lXmu.ln + + XMUUSRC = $(LIBSRC)/Xmuu + +SOXMUUREV = 1.0 +DEPXMUULIB = +XMUULIB = -lXmuu + +LINTXMUU = $(LINTLIBDIR)/llib-lXmuu.ln + + OLDXLIBSRC = $(LIBSRC)/oldX + +DEPOLDXLIB = $(USRLIBDIR)/liboldX.a +OLDXLIB = -loldX + +LINTOLDX = $(LINTLIBDIR)/llib-loldX.ln + + XPLIBSRC = $(LIBSRC)/Xp + +SOXPREV = 6.2 +DEPXPLIB = +XPLIB = -lXp + +LINTXP = $(LINTLIBDIR)/llib-lXp.ln + + TOOLKITSRC = $(LIBSRC)/Xt + +SOXTREV = 6.0 +DEPXTOOLONLYLIB = +XTOOLONLYLIB = -lXt + +LINTXTOOLONLY = $(LINTLIBDIR)/llib-lXt.ln + + DEPXTOOLLIB = $(DEPXTOOLONLYLIB) $(DEPSMLIB) $(DEPICELIB) + XTOOLLIB = $(XTOOLONLYLIB) $(SMLIB) $(ICELIB) + LINTXTOOLLIB = $(LINTXTOOLONLYLIB) + + XALIBSRC = $(LIBSRC)/Xa + +SOXAREV = 1.0 +DEPXALIB = +XALIB = -lXa + +LINTXA = $(LINTLIBDIR)/llib-lXa.ln + + AWIDGETSRC = $(LIBSRC)/Xaw + +SOXAWREV = 7.0 +DEPXAWLIB = +XAWLIB = -lXaw + +LINTXAW = $(LINTLIBDIR)/llib-lXaw.ln + + AWIDGET6SRC = $(LIBSRC)/Xaw6 + +SOXAW6REV = 6.1 +DEPXAW6LIB = +XAW6LIB = -lXaw + +LINTXAW6 = $(LINTLIBDIR)/llib-lXaw.ln + + XILIBSRC = $(LIBSRC)/Xi + +SOXINPUTREV = 6.0 +DEPXILIB = +XILIB = -lXi + +LINTXI = $(LINTLIBDIR)/llib-lXi.ln + + XTESTLIBSRC = $(LIBSRC)/Xtst + +SOXTESTREV = 6.1 +DEPXTESTLIB = +XTESTLIB = -lXtst + +LINTXTEST = $(LINTLIBDIR)/llib-lXtst.ln + + PEXLIBSRC = $(LIBSRC)/PEX5 + +SOPEXREV = 6.0 +DEPPEXLIB = +PEXLIB = -lPEX5 + +LINTPEX = $(LINTLIBDIR)/llib-lPEX5.ln + + XIELIBSRC = $(LIBSRC)/XIE + +SOXIEREV = 6.0 +DEPXIELIB = +XIELIB = -lXIE + +LINTXIE = $(LINTLIBDIR)/llib-lXIE.ln + + PHIGSLIBSRC = $(LIBSRC)/PHIGS + +DEPPHIGSLIB = $(USRLIBDIR)/libphigs.a +PHIGSLIB = -lphigs + +LINTPHIGS = $(LINTLIBDIR)/llib-lphigs.ln + +DEPXBSDLIB = $(USRLIBDIR)/libXbsd.a +XBSDLIB = -lXbsd + +LINTXBSD = $(LINTLIBDIR)/llib-lXbsd.ln + + ICESRC = $(LIBSRC)/ICE + +SOICEREV = 6.3 +DEPICELIB = +ICELIB = -lICE + +LINTICE = $(LINTLIBDIR)/llib-lICE.ln + + SMSRC = $(LIBSRC)/SM + +SOSMREV = 6.0 +DEPSMLIB = +SMLIB = -lSM + +LINTSM = $(LINTLIBDIR)/llib-lSM.ln + + XKEYSRC = $(LIBSRC)/Xkey + +SOXKEYREV = 6.0 +DEPXKEYLIB = +XKEYLIB = -lXkey + +LINTXKEY = $(LINTLIBDIR)/llib-lXkey.ln + + FSLIBSRC = $(LIBSRC)/FS + +DEPFSLIB = $(USRLIBDIR)/libFS.a +FSLIB = -lFS + +LINTFS = $(LINTLIBDIR)/llib-lFS.ln + + FONTLIBSRC = $(LIBSRC)/font + +SOFONTREV = 1.4 +DEPFONTLIB = +FONTLIB = -L$(FREETYPELIBDIR) -L$(FONTLIBSRC) -lXfont + +LINTXFONT = $(LINTLIBDIR)/llib-lXfont.ln +# +SOFONTREV = 1.4 +DEPXFONTLIB = +XFONTLIB = -lXfont + +LINTXFONT = $(LINTLIBDIR)/llib-lXfont.ln + + FONTSTUBLIBSRC = $(FONTLIBSRC)/stubs + +DEPFONTSTUBLIB = $(USRLIBDIR)/libfntstubs.a +FONTSTUBLIB = -lfntstubs + +LINTFONTSTUB = $(LINTLIBDIR)/llib-lfntstubs.ln + DEPFONTLIB = $(DEPXFONTLIB) $(DEPFONTSTUBLIB) + FONTLIB = $(XFONTLIB) $(FONTSTUBLIB) $(FONTFT2LIB) + + FONTENCLIBSRC = $(LIBSRC)/fontenc + +DEPXFONTENCLIB = $(USRLIBDIR)/libfontenc.a +XFONTENCLIB = -lfontenc + +LINTXFONTENC = $(LINTLIBDIR)/llib-lfontenc.ln + + XPMLIBSRC = $(LIBSRC)/Xpm + +SOXPMREV = 4.11 +DEPXPMLIB = +XPMLIB = -lXpm + +LINTXPM = $(LINTLIBDIR)/llib-lXpm.ln + +FREETYPE2DIR = /usr +FREETYPE2LIBDIR = /usr/lib +FREETYPE2INCDIR = /usr/include/freetype2 + +FREETYPE2LIB = -lfreetype + +FREETYPE2INCLUDES = -I$(FREETYPE2INCDIR) +FREETYPE2DEFINES = -DFREETYPE2 + + EXPATLIBSRC = $(LIBSRC)/expat + +SOEXPATREV = 1.0 +DEPEXPATLIB = +EXPATLIB = -lexpat + +LINTEXPAT = $(LINTLIBDIR)/llib-lexpat.ln + +EXPATDIR = /usr +EXPATLIBDIR = /usr/lib +EXPATINCDIR = /usr/include + +EXPATINCLUDES = + +EXPATLIB = -lexpat + +EXPATDEFINES = -DEXPAT + + XFT1LIBSRC = $(LIBSRC)/Xft1 + +SOXFT1REV = 1.1 +DEPXFT1LIB = +XFT1LIB = -lXft + +LINTXFT1 = $(LINTLIBDIR)/llib-lXft.ln + + XFTLIBSRC = $(LIBSRC)/Xft + +SOXFTREV = 2.1 +DEPXFTLIB = +XFTLIB = -lXft + +LINTXFT = $(LINTLIBDIR)/llib-lXft.ln + +XFTINCLUDES=$(FONTCONFIGINCLUDES) $(FREETYPE2INCLUDES) + +FONTCONFIGDIR = /usr +FONTCONFIGLIBDIR = /usr/lib +FONTCONFIGINCDIR = /usr/include +FONTCONFIGBINDIR = /usr/bin + +FONTCONFIGLIB = -lfontconfig + +FONTCONFIGINCLUDES = + +FCCACHE = $(FONTCONFIGBINDIR)/fc-cache + +FONTCONFIGDEFINES = -DFONTCONFIG + +LIBPNGINCDIR = /usr/include + +LIBPNGINC= + +LIBPNGDIR = /usr +LIBPNGLIBDIR = /usr/lib +LIBPNGINCDIR = /usr/include + +LIBPNGLIB = -lpng + + XKBFILELIBSRC = $(LIBSRC)/xkbfile + +DEPXKBFILELIB = $(USRLIBDIR)/libxkbfile.a +XKBFILELIB = -lxkbfile + +LINTXKBFILE = $(LINTLIBDIR)/llib-lxkbfile.ln + + XKBCOMPCMD = $(BINDIR)/xkbcomp + + XKBUILIBSRC = $(LIBSRC)/xkbui + +DEPXKBUILIB = $(USRLIBDIR)/libxkbui.a +XKBUILIB = -lxkbui + +LINTXKBUI = $(LINTLIBDIR)/llib-lxkbui.ln + + XTRAPLIBSRC = $(LIBSRC)/XTrap + +SOXTRAPREV = 6.4 +DEPXTRAPLIB = +XTRAPLIB = -lXTrap + +LINTXTRAP = $(LINTLIBDIR)/llib-lXTrap.ln + + DEPLIBS = $(DEPXAWLIB) $(DEPXMULIB) $(DEPXTOOLLIB) $(DEPXLIB) + + DEPLIBS1 = $(DEPLIBS) + DEPLIBS2 = $(DEPLIBS) + DEPLIBS3 = $(DEPLIBS) + DEPLIBS4 = $(DEPLIBS) + DEPLIBS5 = $(DEPLIBS) + DEPLIBS6 = $(DEPLIBS) + DEPLIBS7 = $(DEPLIBS) + DEPLIBS8 = $(DEPLIBS) + DEPLIBS9 = $(DEPLIBS) + DEPLIBS10 = $(DEPLIBS) + +XMULIBONLY = -lXmu +XMULIB = $(XMULIBONLY) $(XTOOLLIB) $(XLIB) + + CONFIGDIR = $(LIBDIR)/config + + USRLIBDIRPATH = $(USRLIBDIR) + LDPRELIBS = -L$(USRLIBDIR) $(INSTALLED_LIBS) + LDPOSTLIBS = + TOP_INCLUDES = -I$(INCROOT) $(TOP_X_INCLUDES) + PROJECT_DEFINES = + +CXXPROJECT_DEFINES = + +# ---------------------------------------------------------------------- +# start of Imakefile + +# Imakefile for the Image Support Module components. + +X11IRAFDIR = ../../ + +# $Xorg: Library.tmpl,v 1.3 2000/08/17 19:41:46 cpqbld Exp $ + +# $XFree86: xc/config/cf/Library.tmpl,v 3.20 2002/11/25 14:04:47 eich Exp $ + + CC = gcc -m32 + + CCOPTIONS = +STD_DEFINES = -Dlinux -D__i386__ -D_POSIX_C_SOURCE=199309L -D_POSIX_SOURCE -D_XOPEN_SOURCE -D_BSD_SOURCE -D_SVID_SOURCE $(PROJECT_DEFINES) +CDEBUGFLAGS = -O2 -pipe -march=i386 -mcpu=i686 -fno-strict-aliasing -pipe +CLIBDEBUGFLAGS = + CFLAGS = $(CDEBUGFLAGS) $(CLIBDEBUGFLAGS) $(CCOPTIONS) $(THREADS_CFLAGS) $(ALLDEFINES) + +LIB_MT_DEFINES = LibraryMTDefines + +SOSYMLINK = true + + X11IRAFBINDIR = $(X11IRAFDIR)/bin + X11IRAFMANDIR = $(X11IRAFDIR)/man + X11IRAFLIBDIR = $(X11IRAFDIR)/lib + X11IRAFINCDIR = $(X11IRAFDIR)/include + + XGTERMDIR = $(X11IRAFDIR)/xgterm + XIMTOOLDIR = $(X11IRAFDIR)/ximtool + XTAPEMONDIR = $(X11IRAFDIR)/xtapemon + OBMSHDIR = $(X11IRAFDIR)/obmsh + OBMDIR = $(X11IRAFDIR)/obm + XPMDIR = $(X11IRAFDIR)/xpm + XAW3DDIR = $(X11IRAFDIR)/xaw3d + CDLDIR = $(X11IRAFDIR)/cdl + + DEPLIBOBM = $(OBMDIR)/libobm.a + LIBOBM = -lobm + DEPLIBXPM = $(XPMDIR)/libXpm.a + LIBXPM = -lXpm + DEPLIBXAW3D = $(XAW3DDIR)/libXaw3d.a + LIBXAW3D = -lXaw3d + LIBCDL = -lcdl + + X11IRAF_LDFLAGS = -L$(X11IRAFDIR)/lib -L../lib + X11IRAF_INCLUDES = -I$(X11IRAFDIR)/include -I../include + + CP = cp -p + + WC_SRCS = wcspix/t_wcspix.x wcspix/wcimage.x wcspix/wcmef.x wcspix/wcmspec.x wcspix/wcspix.h + + LIB_SRCS = lib/dspmmap.x lib/ism.x lib/idxstr.x lib/wcsgfterm.x + +all:: ism_wcspix.e + +ism_wcspix.e: $(WC_SRCS) $(LIB_SRCS) + @(SHELL=/bin/sh ; export SHELL ; mkpkg relink) + touch DONE + +all:: DONE + +DONE: $(WC_SRCS) $(LIB_SRCS) + $(RM) $@ + touch $@ + +cleandir:: + $(RM) DONE + +cleandir:: + @(rmbin -v .) + touch DONE + +includes:: + +install:: ism_wcspix.e + -@if [ -d $(X11IRAFDIR)/bin ]; then set +x; else (set -x; $(MKDIRHIER) $(X11IRAFDIR)/bin); fi + + mv ism_wcspix.e $(X11IRAFDIR)/bin + +depend:: + $(DEPEND) $(DEPENDFLAGS) -- $(ALLDEFINES) $(DEPEND_DEFINES) -- $(SRCS) + +# ---------------------------------------------------------------------- +# common rules for all Makefiles - do not edit + +.c.i: + $(RM) $@ + $(CC) -E $(CFLAGS) $(_NOOP_) $*.c > $@ + +.SUFFIXES: .s + +.c.s: + $(RM) $@ + $(CC) -S $(CFLAGS) $(_NOOP_) $*.c + +emptyrule:: + +cleandir:: + $(RM) *.CKP *.ln *.BAK *.bak *.o core errs ,* *~ *.a .emacs_* tags TAGS make.log MakeOut "#"* + +Makefile:: + -@if [ -f Makefile ]; then set -x; \ + $(RM) Makefile.bak; $(MV) Makefile Makefile.bak; \ + else exit 0; fi + $(IMAKE_CMD) -DTOPDIR=$(TOP) -DCURDIR=$(CURRENT_DIR) + +tags:: + $(TAGS) -w *.[ch] + $(TAGS) -xw *.[ch] > TAGS + +man_keywords:: + +html_index:: + +clean:: cleandir + +distclean:: cleandir + +# ---------------------------------------------------------------------- +# empty rules for directories that do not have SUBDIRS - do not edit + +install:: + @echo "install in $(CURRENT_DIR) done" + +install.man:: + @echo "install.man in $(CURRENT_DIR) done" + +install.sdk:: + @echo "install.sdk in $(CURRENT_DIR) done" + +Makefiles:: + +includes:: + +depend:: + +distclean:: + $(RM) Makefile Makefile.dep + +# ---------------------------------------------------------------------- +# dependencies generated by makedepend + diff --git a/vendor/x11iraf/ximtool/clients/README b/vendor/x11iraf/ximtool/clients/README new file mode 100644 index 00000000..c668daaa --- /dev/null +++ b/vendor/x11iraf/ximtool/clients/README @@ -0,0 +1,3 @@ +# +# CLIENTS -- This directory contains the code for the ISM client tasks. +# diff --git a/vendor/x11iraf/ximtool/clients/doc/Notes b/vendor/x11iraf/ximtool/clients/doc/Notes new file mode 100644 index 00000000..da021306 --- /dev/null +++ b/vendor/x11iraf/ximtool/clients/doc/Notes @@ -0,0 +1,199 @@ + + +define MAX_WCSLINES 4 + +define SZ_WPIX 6 +define WP_CPTR Memi[$1 ] # cache pointer +define WP_PTABSZ Memi[$1+1] # pixel table size +define WP_SYSTEMS Memi[$1+2] # WCS readout systems +define WP_FORMATS Memi[$1+3] # WCS readout formats + +define SYSTEMS Memi[WP_SYSTEMS($1)+$2-1] # WCS systems per line +define FORMATS Memi[WP_FORMATS($1)+$2-1] # WCS formats per line +define OBJCACHE Memi[WP_CPTR($1)+$2] # object cache + +# Element of an object cache. +define SZ_CNODE 135 # size of a cache node +define SZ_OBJREF 128 # size of a object reference + +define C_OBJID Memi[$1] # object id +define C_REGID Memi[$1+1] # region id +define C_CLASS Memi[$1+2] # object class +define C_DATA Memi[$1+3] # object data ptr +define C_REF Memc[P2C($1+4)] # object reference file + +# Object class definitions. +define IMAGE_CLASS 1 # generic image class +define MEF_CLASS 2 # Mosaic MEF image class +define MULTISPEC_CLASS 3 # multispec data class + +# Class methods. +define LEN_CL 6 # length of class table +define MAX_CL 6 # max supported classes +define SZ_CLNAME 16 # size of a class name + +define CL_INIT cl_table[1,$1] # class initializer +define CL_CACHE cl_table[2,$1] # cache the object +define CL_UNCACHE cl_table[3,$1] # uncache the object +define CL_WCSTRAN cl_table[4,$1] # WCS tranformations +define CL_WCSLIST cl_table[5,$1] # list available WCS +define CL_GETDATA cl_table[6,$1] # get object data +define CL_NAME cl_names[1,$1] # class name + +# Class common. +int cl_nclasses # number of defined functions +int cl_table[LEN_CL,MAX_CL] # class table +char cl_names[SZ_CLNAME,MAX_CL] # class names +common /class_com/ cl_nclasses, cl_table, cl_names + + +# Image class data. +define O_IM Memi[$1+2] # image pointer +define O_MW Memi[$1+3] # image wcs pointer +define O_CO Memi[$1+3] # skywcs transform pointer +define O_CT Memi[$1+4] # mwcs transform pointer +define O_ROT Memr[$1+5] # rotation angle +define O_SCALE Memr[$1+6] # plate scale + + + +-------------------------------------------------------------------------------- +ISM Methods: +-------------------------------------------------------------------------------- + + initialize + cache + uncache + wcstran [[ ] ["NDC" ]] + wcslist + getheader + + +procedure initialize +begin + for (each object in the cache) + uncache object + send startup req to GUI +end + +procedure cache +begin +end + +procedure uncache +begin +end + +procedure wcstran +begin +end + +procedure wcslist +begin +end + +procedure getheader +begin +end + + +-------------------------------------------------------------------------------- +GUI Callbacks +-------------------------------------------------------------------------------- + +proc ism_msg { param old new } { + + set target [lindex $new 0] ;# name of ism module + + switch [lindex $new 0] { + source { source [lindex $new 1] } ;# source Tcl code + alert { Wexec client [lindex $new 1] } ;# alert from ism client + + deliver { set ism [lindex $new 0] ;# determine ISM name + set argv [lrange $new 1 end] ;# get args + set argc [llength $argv] + ${ism}_msg $argc $argv ;# call module + } + } +} ; send ism_msg addCallback ism_msg + + +proc wpix_msg { argc argv } { + + switch [lindex $argv 0] { + startup { wpix_startup } + shutdown { wpix_shutdown } + cache { .... save image name to GUI cache list + } + uncache { .... remove image name from GUI cache list + } + wcstran { .... parse argv for WCS field and update display + } + pixtab { + } + wcslist { + } + wcstype { set type [lindex $argv 1] ;# Set WCS for a line + set line [lindex $argv 2] + send sysWcs$line set label $type + if {$type == "None"} { + send wpWcs$line set on False + } else { + send wpWcs$line set on True + } + setCoordPanelHeight + } + wcsfmt { set fmt [lindex $argv 1] ;# Set fmt for a line + set line [lindex $argv 2] + send fmtWcs$line set label $fmt + } + header { set type [lindex $argv 1] ;# write header text + set text [lindex $argv 2] + switch $type { + imghdr {send hdrText append $text} + wcshdr {send hdrKGText append $text} + wcsinfo {send hdrIGText append $text} + } + } + } ;# end switch +} + +proc wpix_startup args { + global ismEnabled frameCache + + set ismEnabled 1 ;# initialize buttons + send ismToggle set on True + send imageHeader setSensitive True + setCoordPanelSensitivity + + resizeCoordsBox $up_todo ;# resize wcsbox marker + updateCoordsBox + + foreach c [array names frameCache] { ;# initialize local frame cache + if {$c != "0"} { unset frameCache($c) } + } + + catch { ;# update ISM with GUI settings + send wpix set psize $psize + set wcsfmt [string tolower [send wcsFmtMenu get label]] + send wpix set wcsfmt $wcsfmt + if {[send wcsSysAltWCS get on]} { + setAltSystem + } + } +} + +proc wpix_shutdown args { + global ismEnabled + + set ismEnabled 0 + send ismToggle set on False + send imageHeader setSensitive False + setCoordPanelSensitivity + wcsFmtIValue "" + wcsFmtImWCS "" "" "" + wcsFmtAltWCS "" "" "" + resizeCoordsBox 0 +} + + diff --git a/vendor/x11iraf/ximtool/clients/doc/README b/vendor/x11iraf/ximtool/clients/doc/README new file mode 100644 index 00000000..142c9652 --- /dev/null +++ b/vendor/x11iraf/ximtool/clients/doc/README @@ -0,0 +1,3 @@ +# +# This directory contains documentation on the ISM client tasks. +# diff --git a/vendor/x11iraf/ximtool/clients/lib/README b/vendor/x11iraf/ximtool/clients/lib/README new file mode 100644 index 00000000..f91f44ce --- /dev/null +++ b/vendor/x11iraf/ximtool/clients/lib/README @@ -0,0 +1,11 @@ +# +# ISM LIBRARY UTILITIES -- This directory contains various utility +# procedures which may be used by one or more ISM client tasks. +o + + dsppmmap.x -- Opens a pixel mask associated with an image BPM keyword + idxstr.x -- Inverse strdic() function + ism.x -- Low-level ISM communications routines + wcsgterm.x -- Compute the output FITS CRPIX, CRVAL, and CD arrays from + the # MWCS LTERM and WTERM + diff --git a/vendor/x11iraf/ximtool/clients/lib/dspmmap.x b/vendor/x11iraf/ximtool/clients/lib/dspmmap.x new file mode 100644 index 00000000..621f0372 --- /dev/null +++ b/vendor/x11iraf/ximtool/clients/lib/dspmmap.x @@ -0,0 +1,244 @@ +include +include +include +include +include +include +include + + +# DS_PMMAP -- Open a pixel mask READ_ONLY. +# +# Open the pixel mask. If a regular image is specified convert it to +# a pixel mask. Match the mask to the reference image based on the +# physical coordinates. A null filename is allowed and returns NULL. + +pointer procedure ds_pmmap (pmname, refim) + +char pmname[ARB] #I Pixel mask name +pointer refim #I Reference image pointer + +pointer im +char fname[SZ_FNAME] +int nowhite(), errcode() +bool streq() +pointer im_pmmap(), ds_pmimmap() +errchk ds_pmimmap, ds_match + +begin + if (nowhite (pmname, fname, SZ_FNAME) == 0) + return (NULL) + if (streq (fname, "EMPTY")) + return (NULL) + if (fname[1] == '!') { + iferr (call imgstr (refim, fname[2], fname, SZ_FNAME)) + fname[1] = EOS + } else if (streq (fname, "BPM")) { + iferr (call imgstr (refim, "BPM", fname, SZ_FNAME)) + return (NULL) + } + + iferr (im = im_pmmap (fname, READ_ONLY, NULL)) { + switch (errcode()) { + case SYS_FOPNNEXFIL, SYS_PLBADSAVEF: + im = ds_pmimmap (fname, refim) + default: + call erract (EA_ERROR) + } + } + + iferr (call ds_match (im, refim)) + call erract (EA_WARN) + + return (im) +end + + +# DS_PMIMMAP -- Open a pixel mask from a non-pixel list image. +# Return error if the image cannot be opened. + +pointer procedure ds_pmimmap (pmname, refim) + +char pmname[ARB] #I Image name +pointer refim #I Reference image pointer + +int i, ndim, npix, val +pointer sp, v1, v2, im_in, im_out, pm, mw, data + +int imgnli() +pointer immap(), pm_newmask(), im_pmmapo(), imgl1i(), mw_openim() +errchk immap, mw_openim + +begin + call smark (sp) + call salloc (v1, IM_MAXDIM, TY_LONG) + call salloc (v2, IM_MAXDIM, TY_LONG) + + call amovkl (long(1), Meml[v1], IM_MAXDIM) + call amovkl (long(1), Meml[v2], IM_MAXDIM) + + im_in = immap (pmname, READ_ONLY, 0) + pm = pm_newmask (im_in, 27) + + ndim = IM_NDIM(im_in) + npix = IM_LEN(im_in,1) + + while (imgnli (im_in, data, Meml[v1]) != EOF) { + do i = 0, npix-1 { + val = Memi[data+i] + if (val < 0) + Memi[data+i] = 0 + } + call pmplpi (pm, Meml[v2], Memi[data], 0, npix, PIX_SRC) + call amovl (Meml[v1], Meml[v2], ndim) + } + + im_out = im_pmmapo (pm, im_in) + data = imgl1i (im_out) # Force I/O to set header + mw = mw_openim (im_in) # Set WCS + call mw_saveim (mw, im_out) + call mw_close (mw) + + call imunmap (im_in) + call sfree (sp) + return (im_out) +end + + +# DS_MATCH -- Set the pixel mask to match the reference image. +# This matches sizes and physical coordinates and allows the +# original mask to be smaller or larger than the reference image. +# Subsequent use of the pixel mask can then work in the logical +# coordinates of the reference image. The mask values are the maximum +# of the mask values which overlap each reference image pixel. +# A null input returns a null output. + +procedure ds_match (im, refim) + +pointer im #U Pixel mask image pointer +pointer refim #I Reference image pointer + +int i, j, k, l, i1, i2, j1, j2, nc, nl, ncpm, nlpm, nx, val +double x1, x2, y1, y2, lt[6], lt1[6], lt2[6] +long vold[IM_MAXDIM], vnew[IM_MAXDIM] +pointer pm, pmnew, imnew, mw, ctx, cty, bufref, bufpm + +int imstati() +pointer pm_open(), mw_openim(), im_pmmapo(), imgl1i(), mw_sctran() +bool pm_empty(), pm_linenotempty() +errchk pm_open, mw_openim + +begin + if (im == NULL) + return + + # Set sizes. + nc = IM_LEN(refim,1) + nl = IM_LEN(refim,2) + ncpm = IM_LEN(im,1) + nlpm = IM_LEN(im,2) + + # If the mask is empty and the sizes are the same then it does not + # matter if the two are actually matched in physical coordinates. + pm = imstati (im, IM_PMDES) + if (pm_empty(pm) && nc == ncpm && nl == nlpm) + return + + # Compute transformation between reference (logical) coordinates + # and mask (physical) coordinates. + + mw = mw_openim (im) + call mw_gltermd (mw, lt, lt[5], 2) + call mw_close (mw) + + mw = mw_openim (refim) + call mw_gltermd (mw, lt2, lt2[5], 2) + call mw_close (mw) + + # Combine lterms. + call mw_invertd (lt, lt1, 2) + call mw_mmuld (lt1, lt2, lt, 2) + call mw_vmuld (lt, lt[5], lt[5], 2) + lt[5] = lt2[5] - lt[5] + lt[6] = lt2[6] - lt[6] + do i = 1, 6 + lt[i] = nint (1D6 * (lt[i]-int(lt[i]))) / 1D6 + int(lt[i]) + + # Check for a rotation. For now don't allow any rotation. + if (lt[2] != 0. || lt[3] != 0.) + call error (1, "Image and mask have a relative rotation") + + # Check for an exact match. + if (lt[1] == 1D0 && lt[4] == 1D0 && lt[5] == 0D0 && lt[6] == 0D0) + return + + # Set reference to mask coordinates. + mw = mw_openim (im) + call mw_sltermd (mw, lt, lt[5], 2) + ctx = mw_sctran (mw, "logical", "physical", 1) + cty = mw_sctran (mw, "logical", "physical", 2) + + # Create a new pixel mask of the required size and offset. + # Do dummy image I/O to set the header. + pmnew = pm_open (NULL) + call pm_ssize (pmnew, 2, IM_LEN(refim,1), 27) + imnew = im_pmmapo (pmnew, NULL) + bufref = imgl1i (imnew) + + # Compute region of mask overlapping the reference image. + call mw_ctrand (ctx, 1-0.5D0, x1, 1) + call mw_ctrand (ctx, nc+0.5D0, x2, 1) + i1 = max (1, nint(min(x1,x2)+1D-5)) + i2 = min (ncpm, nint(max(x1,x2)-1D-5)) + call mw_ctrand (cty, 1-0.5D0, y1, 1) + call mw_ctrand (cty, nl+0.5D0, y2, 1) + j1 = max (1, nint(min(y1,y2)+1D-5)) + j2 = min (nlpm, nint(max(y1,y2)-1D-5)) + + # Set the new mask values to the maximum of all mask values falling + # within each reference pixel in the overlap region. + if (i1 <= i2 && j1 <= j2) { + nx = i2 - i1 + 1 + call malloc (bufpm, nx, TY_INT) + call malloc (bufref, nc, TY_INT) + vold[1] = i1 + vnew[1] = 1 + do j = 1, nl { + call mw_ctrand (cty, j-0.5D0, y1, 1) + call mw_ctrand (cty, j+0.5D0, y2, 1) + j1 = max (1, nint(min(y1,y2)+1D-5)) + j2 = min (nlpm, nint(max(y1,y2)-1D-5)) + if (j2 < j1) + next + + vnew[2] = j + call aclri (Memi[bufref], nc) + do l = j1, j2 { + vold[2] = l + if (!pm_linenotempty (pm, vold)) + next + call pmglpi (pm, vold, Memi[bufpm], 0, nx, 0) + do i = 1, nc { + call mw_ctrand (ctx, i-0.5D0, x1, 1) + call mw_ctrand (ctx, i+0.5D0, x2, 1) + i1 = max (1, nint(min(x1,x2)+1D-5)) + i2 = min (ncpm, nint(max(x1,x2)-1D-5)) + if (i2 < i1) + next + val = Memi[bufref+i-1] + do k = i1-vold[1], i2-vold[1] + val = max (val, Memi[bufpm+k]) + Memi[bufref+i-1] = val + } + } + call pmplpi (pmnew, vnew, Memi[bufref], 0, nc, PIX_SRC) + } + call mfree (bufref, TY_INT) + call mfree (bufpm, TY_INT) + } + + call mw_close (mw) + call imunmap (im) + im = imnew + call imseti (im, IM_PMDES, pmnew) +end diff --git a/vendor/x11iraf/ximtool/clients/lib/idxstr.x b/vendor/x11iraf/ximtool/clients/lib/idxstr.x new file mode 100644 index 00000000..7b055658 --- /dev/null +++ b/vendor/x11iraf/ximtool/clients/lib/idxstr.x @@ -0,0 +1,54 @@ +# Copyright(c) 1986 Association of Universities for Research in Astronomy Inc. + + +# IDXSTR -- Search a dictionary string for a given string index number. +# This is the opposite function of strdic(), that returns the index for +# given string. The entries in the dictionary string are separated by +# a delimiter character which is the first character of the dictionary +# string. The index of the string found is returned as the function value. +# Otherwise, if there is no string for that index, a zero is returned. + +int procedure idxstr (index, outstr, maxch, dict) + +int index #i String index +char outstr[ARB] #o Output string as found in dictionary +int maxch #i Maximum length of output string +char dict[ARB] #i Dictionary string + +int i, len, start, count + +int strlen() + +begin + # Clear the output string. + outstr[1] = EOS + + # Return if the dictionary is not long enough. + if (dict[1] == EOS) + return (0) + + # Initialize the counters. + count = 1 + len = strlen (dict) + + # Search the dictionary string. This loop only terminates + # successfully if the index is found. Otherwise the procedure + # returns with and error condition. + for (start = 2; count < index; start = start + 1) { + if (dict[start] == dict[1]) + count = count + 1 + if (start == len) + return (0) + } + + # Extract the output string from the dictionary. + for (i = start; dict[i] != EOS && dict[i] != dict[1]; i = i + 1) { + if (i - start + 1 > maxch) + break + outstr[i - start + 1] = dict[i] + } + outstr[i - start + 1] = EOS + + # Return index for output string. + return (count) +end diff --git a/vendor/x11iraf/ximtool/clients/lib/ism.x b/vendor/x11iraf/ximtool/clients/lib/ism.x new file mode 100644 index 00000000..1d7310cc --- /dev/null +++ b/vendor/x11iraf/ximtool/clients/lib/ism.x @@ -0,0 +1,432 @@ +# Copyright(c) 1986 Association of Universities for Research in Astronomy Inc. + +include +include +include +include + + +# ISM.X -- Interface routines for client programs to connect to the +# XImtool ISM port on the local socket +# +# status = ism_connect (device, name, mode) +# ism_disconnect (send_quit) +# ism_message (object, message) +# ism_alert (text, ok_action, cancel_action) +# +# ism_write (message, len) +# nread = ism_read (message, len) +# +# Client programs should install an exception handler to first disconnect +# from the device before shutting down. The procedure ism_zxwhen() is +# provided for this purpose. + + +define ISM_DBG FALSE + +define SZ_MESSAGE 2047 + +define ISM_TEXT 1 +define ISM_BINARY 2 + + +# ISM_CONNECT -- Negotiate a connection on the named device. Once +# established we can begin sending and reading messages from the server. + +int procedure ism_connect (device, name, type) + +char device[ARB] #I socket to connect on +char name[ARB] #I module name +char type[ARB] #I requested connection mode + +pointer sp, cmsg, dev, buf +int msglen +char connect[SZ_FNAME] + +int ndopen(), reopen(), strlen() +int ism_read() +bool streq() + +extern ism_onerror() + +include "ismfd.com" # I/O common +include "ismcom.com" # Interrupt handler variables + +# Exception handler variables common. +int ism_errstat +data ism_errstat /OK/ +common /ismecom/ ism_errstat + +begin + call smark (sp) + call salloc (buf, SZ_LINE, TY_CHAR) + call salloc (cmsg, SZ_LINE, TY_CHAR) + call salloc (dev, SZ_FNAME, TY_CHAR) + + # Initialize. + call aclrc (Memc[buf], SZ_LINE) + call aclrc (Memc[cmsg], SZ_LINE) + call aclrc (Memc[dev], SZ_FNAME) + call aclrc (buffer, 2*SZ_MESSAGE+1) + fdin = NULL + fdout = NULL + nbuf = 0 + bp = 0 + ep = 0 + + # Generate the device name. We assume the call was made with either + # a "unix:" or "inet:" prefix, so just append the type and set the + # mode. + + call sprintf (Memc[dev], SZ_FNAME, "%s:%s") + call pargstr (device) + call pargstr (type) + if (streq (type, "text")) + mode = ISM_TEXT + else + mode = ISM_BINARY + + # Open the initial connection + iferr (fdin = ndopen (Memc[dev], READ_WRITE)) { + call sfree (sp) + return (ERR) + } + fdout = reopen (fdin, READ_WRITE) + + # Send the connect request. + call sprintf (Memc[cmsg], SZ_LINE, "connect %s\0") + call pargstr (name) + msglen = strlen (Memc[cmsg]) + call ism_message ("ximtool", Memc[cmsg]) + + # Read the acknowledgement. + if (ism_read (Memc[buf], msglen) == EOF) { + call sfree (sp) + return (ERR) + } + + # Close the original socket. + call close (fdout) + call close (fdin) + + # Get the new device name. + call sprintf (connect, SZ_LINE, "unix:%s:%s\0") + call pargstr (Memc[buf+8]) + call pargstr (type) + + # Open the new channel. + iferr (fdin = ndopen (connect, READ_WRITE)) { + call sfree (sp) + return (ERR) + } + fdout = reopen (fdin, READ_WRITE) + + if (ISM_DBG) { + call eprintf ("Reconnected on '%s'\n"); call pargstr (connect) + } + + # Tell the server we're ready to begin. + call sprintf (Memc[cmsg], SZ_LINE, "ready %s\0") + call pargstr (name) + msglen = strlen (Memc[cmsg]) + call ism_message ("ximtool", Memc[cmsg]) + + + # Post the ism_onerror procedure to be executed upon process shutdown + # to issue a warning to the server in case we don't close normally. + + call onerror (ism_onerror) + + call sfree (sp) + return (OK) +end + + +# ISM_DISCONNECT -- Disconnect from the currect channel. + +procedure ism_disconnect (send_quit) + +int send_quit + +include "ismfd.com" # I/O common + +begin + # Send a QUIT message to the server so we shut down the connection. + if (send_quit == YES) + call ism_message ("ximtool", "quit") + + call close (fdin) # Close the socket connection. + call close (fdout) + fdin = NULL + fdout = NULL +end + + +# ISM_MESSAGE -- Send a message to an XImtool named object. If the object +# is 'ximtool' then just pass the message directly without formatting it. + +procedure ism_message (object, message) + +char object[ARB] #I object name +char message[ARB] #I message to send + +pointer sp, msgbuf +int msglen, olen, mlen, ip + +int strlen() +bool streq() + +begin + # Get the message length plus some extra for the braces and padding. + olen = strlen (object) + mlen = strlen (message) + msglen = olen + mlen + 20 + + # Allocate and clear the message buffer. + call smark (sp) + call salloc (msgbuf, msglen, TY_CHAR) + call aclrc (Memc[msgbuf], msglen) + + if (streq (object, "ximtool")) { + # Just send the message. + call strcpy (message, Memc[msgbuf], msglen) + } else { + # Format the message. We can't use a sprintf here since the + # message may be bigger than that allowed by a pargstr(). + ip = 0 + call amovc ("send ", Memc[msgbuf+ip], 5) ; ip = ip + 5 + call amovc (object, Memc[msgbuf+ip], olen) ; ip = ip + olen + call amovc (" { ", Memc[msgbuf+ip], 3) ; ip = ip + 3 + call amovc (message, Memc[msgbuf+ip], mlen) ; ip = ip + mlen + call amovc (" }\0", Memc[msgbuf+ip], 2) ; ip = ip + 3 + } + msglen = strlen (Memc[msgbuf]) + + # Now send the message. The write routine does the strpak(). + call ism_write (Memc[msgbuf], msglen) + + call sfree (sp) +end + + +# ISM_ALERT -- Send an alert message to XImtool. + +procedure ism_alert (text, ok, cancel) + +char text[ARB] #I warning text +char ok[ARB] #i client OK message +char cancel[ARB] #i client CANCEL message + +pointer sp, msg + +begin + call smark (sp) + call salloc (msg, SZ_LINE, TY_CHAR) + + call sprintf (Memc[msg], SZ_LINE, "{%s} {%s} {%s}") + call pargstr (text) + call pargstr (ok) + call pargstr (cancel) + + call ism_message ("alert", Memc[msg]) + + call sfree (sp) +end + + +# ISM_WRITE -- Low-level write of a message to the socket. Writes exactly +# len bytes to the stream. + +procedure ism_write (message, len) + +char message[ARB] #I message to send +int len #I length of message + +int nleft, n, ip +char msgbuf[SZ_MESSAGE] +int strlen() + +include "ismfd.com" # I/O common + +errchk write, flush + +begin + # Pad message with a NULL to terminate it. + len = strlen (message) + 1 + message[len] = '\0' + + if (mod(len,2) == 1) { + len = len + 1 + message[len] = '\0' + } + + ip = 1 + nleft = len + while (nleft > 0) { + n = min (nleft, SZ_MESSAGE) + call amovc (message[ip], msgbuf, n) + if (mode == ISM_BINARY) { + call achtcb (msgbuf, msgbuf, n) + call write (fdout, msgbuf, n / SZB_CHAR) + } else + call write (fdout, msgbuf, n) + + ip = ip + n + nleft = nleft - n + } + call flush (fdout) + + if (ISM_DBG) { + call eprintf ("ism_write: '%.45s' len=%d mode=%d\n") + call pargstr (message);call pargi (len); call pargi (mode) + } +end + + +# ISM_READ -- Low-level read from the socket. + +int procedure ism_read (message, len) + +char message[ARB] #O message read +int len #O length of message + +int i, n, nleft, read() + +include "ismfd.com" # I/O common +include "ismcom.com" # Interrupt handler variables + +errchk read + +begin + # No data left in the buffer so read from the socket + if (nbuf == 0) { + call aclrc (buffer, SZ_MESSAGE) + #call amovkc (EOF, buffer, SZ_MESSAGE) + nbuf = 0 + + iferr { + n = read (fdin, message, SZ_MESSAGE) + if (n < 0) + return (EOF) + } then { + if (n < 0) + return (EOF) + call xer_reset() + call zdojmp (ism_jmp, X_IPC) + } + + if (mode == ISM_BINARY) { + len = n * SZB_CHAR + call achtbc (message, message, len) + } else + len = n + + # Save the data read to a local buffer. Remove any extra + # EOS padding and append an EOF on the string. + call amovc (message, buffer, len) + if (buffer[len] == EOS && buffer[len-1] == EOS) + nbuf = len + else + nbuf = len + 1 + buffer[nbuf] = EOF + } + + for (i=1; buffer[i] != EOS && buffer[i] != EOF && i <= nbuf; i=i+1) + message[i] = buffer[i] + message[i] = '\0' + len = i # length of the current message + nleft = nbuf - i # nchars left in the buffer + + if (buffer[i] == EOS && buffer[i+1] == EOF) { + # That was the last message, force a new read next time we're + # called. + if (i > 1 && nleft > 1) + call amovc (buffer[i+1], buffer, nleft) + nbuf = 0 + } else { + # More of the message is left in the buffer. + if (nleft > 0) + call amovc (buffer[i+1], buffer, nleft) + nbuf = nleft + } + + if (ISM_DBG) { + message[len] = '\0'; + call eprintf ("ism_read: len=%d msg='%s'\n") + call pargi (len); call pargstr(message) + call eprintf ("ism_read: nbuf=%d nleft=%d buffer='%s'\n") + call pargi (nbuf); call pargi(nleft); call pargstr(buffer) + } + + return (nleft) +end + + +# ISM_INTRHANDLER -- User-callable interrupt handler so the ISM client code +# doesn't need to know about our internals. + +int procedure ism_intrhandler() + +extern ism_zxwhen() + +include "ismcom.com" # Interrupt handler variables + +begin + call zlocpr (ism_zxwhen, ismepa) + call xwhen (X_INT, ismepa, old_onint) + call zsvjmp (ism_jmp, ismstat) + + if (ismstat == OK) + return (OK) + else + return (ERR) +end + + +# ISM_ZXWHEN -- Interrupt handler for the ISM client task. Branches back +# to ZSVJMP in the user routine to permit shutdown without an error message +# after first disconnecting from the socket. + +procedure ism_zxwhen (vex, next_handler) + +int vex # virtual exception +int next_handler # not used + +include "ismcom.com" # Interrupt handler variables + +begin + call ism_disconnect (YES) + call xer_reset() + call zdojmp (ism_jmp, vex) +end + + +# ISM_ONERROR -- Error exit handler for the interface. If this is a normal exit +# the shut down quietly, otherwise notify the server. + +procedure ism_onerror (status) + +int status #i not used (req. for ONEXIT) + +# Exception handler variables common. +int ism_errstat +common /ismecom/ ism_errstat + +int code +char buf[SZ_LINE], errmsg[SZ_LINE] + +int errget() + +include "ismcom.com" # Interrupt handler variables + +begin + if (status != OK) { + code = errget (errmsg, SZ_LINE) + call sprintf (buf, SZ_LINE, "ISM Error, code %d:\n`%s\'") + call pargi (status) + call pargstr (errmsg) + + call ism_alert (buf, "", "") + call ism_disconnect (YES) + } +end diff --git a/vendor/x11iraf/ximtool/clients/lib/ismcom.com b/vendor/x11iraf/ximtool/clients/lib/ismcom.com new file mode 100644 index 00000000..fd2c2939 --- /dev/null +++ b/vendor/x11iraf/ximtool/clients/lib/ismcom.com @@ -0,0 +1,4 @@ +# ISM interrupt handler variables common. +int ismepa, ismstat, old_onint, ism_fd, ism_jmp[LEN_JUMPBUF] +common /ismcom/ ism_fd, ism_jmp, ismepa, ismstat, old_onint + diff --git a/vendor/x11iraf/ximtool/clients/lib/ismfd.com b/vendor/x11iraf/ximtool/clients/lib/ismfd.com new file mode 100644 index 00000000..ebb94d9a --- /dev/null +++ b/vendor/x11iraf/ximtool/clients/lib/ismfd.com @@ -0,0 +1,11 @@ +# ISM I/O common. +int fdin # input descriptor +int fdout # output descriptor +int mode # file mode +int nbuf # no. chars in buffer +int bp # begin buffer ptr +int ep # end buffer ptr +char buffer[2*SZ_MESSAGE+1] # text buffer + +common /ismfd/ fdin, fdout, mode, nbuf, buffer, bp, ep + diff --git a/vendor/x11iraf/ximtool/clients/lib/mkpkg b/vendor/x11iraf/ximtool/clients/lib/mkpkg new file mode 100644 index 00000000..896134d4 --- /dev/null +++ b/vendor/x11iraf/ximtool/clients/lib/mkpkg @@ -0,0 +1,15 @@ +# Make the ISM Client utility procedures. + +$checkout libpkg.a ../ +$update libpkg.a +$checkin libpkg.a ../ +$exit + +libpkg.a: +# dspmmap.x \ +# + idxstr.x + ism.x ismfd.com ismcom.com + wcsgfterm.x + ; + diff --git a/vendor/x11iraf/ximtool/clients/lib/wcsgfterm.x b/vendor/x11iraf/ximtool/clients/lib/wcsgfterm.x new file mode 100644 index 00000000..ea026f89 --- /dev/null +++ b/vendor/x11iraf/ximtool/clients/lib/wcsgfterm.x @@ -0,0 +1,61 @@ +# Copyright(c) 1986 Association of Universities for Research in Astronomy Inc. + + +# WCS_GFTERM -- Compute the output FITS CRPIX, CRVAL, and CD arrays from the +# MWCS LTERM and WTERM. Note that the CD matrix terms are still transposed +# from the usual Fortran order. + +procedure wcs_gfterm (mw, crpix, crval, cd, ndim) + +pointer mw #i the input mwcs pointer +double crpix[ndim] #o the output FITS CRPIX array +double crval[ndim] #o the output FITS CRVAL array +double cd[ndim,ndim] #o the output FITS CD matrix +int ndim #i the dimensionality of the wcs + +pointer sp, r, wcd, ltv, ltm, iltm +pointer alert, errmsg +int i, errcode + +int errget() + +errchk mw_gwtermd, mw_gltermd + +begin + call smark (sp) + call salloc (r, ndim, TY_DOUBLE) + call salloc (wcd, ndim * ndim, TY_DOUBLE) + call salloc (ltv, ndim, TY_DOUBLE) + call salloc (ltm, ndim * ndim, TY_DOUBLE) + call salloc (iltm, ndim * ndim, TY_DOUBLE) + + iferr { + call mw_gwtermd (mw, Memd[r], crval, Memd[wcd], ndim) + call mw_gltermd (mw, Memd[ltm], Memd[ltv], ndim) + call mwvmuld (Memd[ltm], Memd[r], crpix, ndim) + call aaddd (crpix, Memd[ltv], crpix, ndim) + call mwinvertd (Memd[ltm], Memd[iltm], ndim) + call mwmmuld (Memd[wcd], Memd[iltm], cd, ndim) + + } then { + call salloc (alert, SZ_LINE, TY_CHAR) + call salloc (errmsg, SZ_LINE, TY_CHAR) + + # Set up a default value. + call aclrd (cd, ndim*ndim) + for (i=1; i <= ndim; i=i+1) { + crpix[i] = 1.0d0 + crval[i] = 1.0d0 + cd[i,i] = 1.0d0 + } + + # Send alert to the GUI. + errcode = errget (Memc[errmsg], SZ_LINE) + call sprintf (Memc[alert], SZ_FNAME, "%s\n\"%s\"") + call pargstr ("Error decoding image WCS:") + call pargstr (Memc[errmsg]) + call ism_alert (Memc[alert], "", "") + } + + call sfree (sp) +end diff --git a/vendor/x11iraf/ximtool/clients/lib/ximtool.x b/vendor/x11iraf/ximtool/clients/lib/ximtool.x new file mode 100644 index 00000000..108b325e --- /dev/null +++ b/vendor/x11iraf/ximtool/clients/lib/ximtool.x @@ -0,0 +1,531 @@ +# Copyright(c) 1986 Association of Universities for Research in Astronomy Inc. + +include +include +include +include + + +# XIMTOOL.X -- Interface routines for client programs to connect to +# XImtool on the message bus. +# +# status = xim_connect (device, name, mode) +# xim_disconnect (send_quit) +# xim_message (object, message) +# xim_alert (text, ok_action, cancel_action) +# +# xim_write (message, len) +# nread = xim_read (message, len) +# +# Client programs should install an exception handler to first disconnect +# from the device before shutting down. The procedure xim_zxwhen() is +# provided for this purpose. + + +define XIM_DBG FALSE + +define SZ_MESSAGE 2047 + +define XIM_TEXT 1 +define XIM_BINARY 2 + + +# XIM_CONNECT -- Negotiate a connection on the named device. Once +# established we can begin sending and reading messages from the server. + +int procedure xim_connect (device, name, type) + +char device[ARB] #I socket to connect on +char name[ARB] #I module name +char type[ARB] #I requested connection mode + +pointer sp, cmsg, dev, buf +int msglen +char connect[SZ_FNAME] + +int ndopen(), reopen(), strlen() +int xim_read() +bool streq() + +extern xim_onerror() + +# I/O common. +int fdin, fdout, mode, nbuf, nsave, nr, nw +char buffer[SZ_MESSAGE], bufsave[SZ_MESSAGE] +common /ximfd/ fdin, fdout, mode, nbuf, buffer, nsave, bufsave, nr, nw + +# Interrupt handler variables common. +int ximepa, ximstat, old_onint, xim_fd, xim_jmp[LEN_JUMPBUF] +common /ximcom/ xim_fd, xim_jmp, ximepa, ximstat, old_onint + +# Exception handler variables common. +int xim_errstat +data xim_errstat /OK/ +common /ximecom/ xim_errstat + +begin + call smark (sp) + call salloc (buf, SZ_LINE, TY_CHAR) + call salloc (cmsg, SZ_LINE, TY_CHAR) + call salloc (dev, SZ_FNAME, TY_CHAR) + + # Initialize. + call aclrc (Memc[buf], SZ_LINE) + call aclrc (Memc[cmsg], SZ_LINE) + call aclrc (Memc[dev], SZ_FNAME) + call aclrc (buffer, SZ_MESSAGE) + fdin = NULL + fdout = NULL + nbuf = 0 + nsave = 0 + nr = 0 + nw = 0 + + # Generate the device name. We assume the call was made with either + # a "unix:" or "inet:" prefix, so just append the type and set the + # mode. + + call sprintf (Memc[dev], SZ_FNAME, "%s:%s") + call pargstr (device) + call pargstr (type) + if (streq (type, "text")) + mode = XIM_TEXT + else + mode = XIM_BINARY + + # Open the initial connection + iferr (fdin = ndopen (Memc[dev], READ_WRITE)) { + call sfree (sp) + return (ERR) + } + fdout = reopen (fdin, READ_WRITE) + + # Send the connect request. + call sprintf (Memc[cmsg], SZ_LINE, "connect %s\0") + call pargstr (name) + msglen = strlen (Memc[cmsg]) + call xim_message ("ximtool", Memc[cmsg]) + + # Read the acknowledgement. + if (xim_read (Memc[buf], msglen) == EOF) { + call sfree (sp) + return (ERR) + } + + # Close the original socket. + call close (fdout) + call close (fdin) + + # Get the new device name. + call sprintf (connect, SZ_LINE, "unix:%s:%s\0") + call pargstr (Memc[buf+8]) + call pargstr (type) + + # Open the new channel. + iferr (fdin = ndopen (connect, READ_WRITE)) { + call sfree (sp) + return (ERR) + } + fdout = reopen (fdin, READ_WRITE) + + if (XIM_DBG) { + call eprintf ("Reconnected on '%s'\n"); call pargstr (connect) + } + + # Tell the server we're ready to begin. + call sprintf (Memc[cmsg], SZ_LINE, "ready %s\0") + call pargstr (name) + msglen = strlen (Memc[cmsg]) + call xim_message ("ximtool", Memc[cmsg]) + + + # Post the xim_onerror procedure to be executed upon process shutdown + # to issue a warning to the server in case we don't close normally. + + call onerror (xim_onerror) + + call sfree (sp) + return (OK) +end + + +# XIM_DISCONNECT -- Disconnect from the currect channel. + +procedure xim_disconnect (send_quit) + +int send_quit + +# I/O common. +int fdin, fdout, mode, nbuf, nsave, nr, nw +char buffer[SZ_MESSAGE], bufsave[SZ_MESSAGE] +common /ximfd/ fdin, fdout, mode, nbuf, buffer, nsave, bufsave, nr, nw + +begin + # Send a QUIT message to the server so we shut down the connection. + if (send_quit == YES) + call xim_message ("ximtool", "quit") + + call flush (fdout) # Close the socket connection. + call close (fdin) + call close (fdout) + fdin = NULL + fdout = NULL +end + + +# XIM_MESSAGE -- Send a message to an XImtool named object. If the object +# is 'ximtool' then just pass the message directly without formatting it. + +procedure xim_message (object, message) + +char object[ARB] #I object name +char message[ARB] #I message to send + +pointer sp, msgbuf +int msglen, olen, mlen, ip + +int strlen() +bool streq() + +begin + # Get the message length plus some extra for the braces and padding. + olen = strlen (object) + mlen = strlen (message) + msglen = olen + mlen + 20 + + # Allocate and clear the message buffer. + call smark (sp) + call salloc (msgbuf, msglen, TY_CHAR) + call aclrc (Memc[msgbuf], msglen) + + if (streq (object, "ximtool")) { + # Just send the message. + call strcpy (message, Memc[msgbuf], msglen) + } else { + # Format the message. We can't use a sprintf here since the + # message may be bigger than that allowed by a pargstr(). + ip = 0 + call amovc ("send ", Memc[msgbuf+ip], 5) ; ip = ip + 5 + call amovc (object, Memc[msgbuf+ip], olen) ; ip = ip + olen + call amovc (" { ", Memc[msgbuf+ip], 3) ; ip = ip + 3 + call amovc (message, Memc[msgbuf+ip], mlen) ; ip = ip + mlen + call amovc (" }\0", Memc[msgbuf+ip], 2) ; ip = ip + 3 + } + msglen = strlen (Memc[msgbuf]) + + # Now send the message. The write routine does the strpak(). + call xim_write (Memc[msgbuf], msglen) + + call sfree (sp) +end + + +# XIM_ALERT -- Send an alert message to XImtool. + +procedure xim_alert (text, ok, cancel) + +char text[ARB] #I warning text +char ok[ARB] #i client OK message +char cancel[ARB] #i client CANCEL message + +pointer sp, msg + +begin + call smark (sp) + call salloc (msg, SZ_LINE, TY_CHAR) + + call sprintf (Memc[msg], SZ_LINE, "{%s} {%s} {%s}") + call pargstr (text) + call pargstr (ok) + call pargstr (cancel) + + call xim_message ("alert", Memc[msg]) + + call sfree (sp) +end + + +# XIM_WRITE -- Low-level write of a message to the socket. Writes exactly +# len bytes to the stream. + +procedure xim_write (message, len) + +char message[ARB] #I message to send +int len #I length of message + +int nleft, n, ip +char msgbuf[SZ_MESSAGE] +int strlen() + +# I/O common. +int fdin, fdout, mode, nbuf, nsave, nr, nw +char buffer[SZ_MESSAGE], bufsave[SZ_MESSAGE] +common /ximfd/ fdin, fdout, mode, nbuf, buffer, nsave, bufsave, nr, nw + +errchk write, flush + +begin + # Pad message with a NULL to terminate it. + len = strlen (message) + 1 + message[len] = '\0' + + if (mod(len,2) == 1) { + len = len + 1 + message[len] = '\0' + } + + ip = 1 + nleft = len + while (nleft > 0) { + n = min (nleft, SZ_MESSAGE) + call amovc (message[ip], msgbuf, n) + if (mode == XIM_BINARY) { + call achtcb (msgbuf, msgbuf, n) + call write (fdout, msgbuf, n / SZB_CHAR) + } else + call write (fdout, msgbuf, n) + + ip = ip + n + nleft = nleft - n + } + nw = nw + len + call flush (fdout) + + if (XIM_DBG) { + call eprintf ("xim_write: '%.45s' len=%d mode=%d tot=%d\n") + call pargstr (message);call pargi (len) + call pargi (mode); call pargi (nw) + } +end + + +# XIM_READ -- Low-level read from the socket. + +int procedure xim_read2 (message, len) + +char message[ARB] #O message read +int len #O length of message + +int i, n, nleft, read() + +# I/O common. +int fdin, fdout, mode, nbuf, nsave, nr, nw +char buffer[SZ_MESSAGE], bufsave[SZ_MESSAGE] +common /ximfd/ fdin, fdout, mode, nbuf, buffer, nsave, bufsave, nr, nw + +# Interrupt handler variables common. +int ximepa, ximstat, old_onint, xim_fd, xim_jmp[LEN_JUMPBUF] +common /ximcom/ xim_fd, xim_jmp, ximepa, ximstat, old_onint + +errchk read + +begin + if (nbuf == 0) { + clear the message buffer + n = read (fdin, message, SZ_MESSAGE) + if (n < 0) + return (EOF) + + if (mode == XIM_BINARY) + msglen = N * SZ_CHAR + unpack binary data + } else + msglen = N + + if (message[msglen] != EOS) + # Incomplete message so save the partial to a local buffer. + for (i=msglen; message[i] != EOS && i > 0; i=i-1) { + ; + nsave = msglen - i + 1 + call strcpy (message[i+1], bufsave) # save partial + call aclrc (message[i+1], nsave) # clear partial + nbuf = i + } else { + # Complete message. + nbuf = msglen + nsave = 0 + call aclrc (bufsave, SZ_MESSAGE) + } + } + + # Pull out a null-terminated message from the buffer. + for (i=1; buffer[i] != EOS && buffer[i] != EOF && i <= nbuf; i=i+1) + message[i] = buffer[i] + message[i] = '\0' + len = i # length of the current message + nleft = nbuf - i # nchars left in the buffer + nr = nr + len + + if (buffer[i] == EOS && buffer[i+1] == EOF) { + # That was the last message, force a new read next time we're + # called. + if (i > 1 && nleft > 1) + call amovc (buffer[i+1], buffer, nleft) + nbuf = 0 + } else { + # More of the message is left in the buffer. + if (nleft > 0) + call amovc (buffer[i+1], buffer, nleft) + nbuf = nleft + } +end + + +# XIM_READ -- Low-level read from the socket. + +int procedure xim_read (message, len) + +char message[ARB] #O message read +int len #O length of message + +int i, n, nleft, read() + +# I/O common. +int fdin, fdout, mode, nbuf, nsave, nr, nw +char buffer[SZ_MESSAGE], bufsave[SZ_MESSAGE] +common /ximfd/ fdin, fdout, mode, nbuf, buffer, nsave, bufsave, nr, nw + +# Interrupt handler variables common. +int ximepa, ximstat, old_onint, xim_fd, xim_jmp[LEN_JUMPBUF] +common /ximcom/ xim_fd, xim_jmp, ximepa, ximstat, old_onint + +errchk read + +begin + # No data left in the buffer so read from the socket + if (nbuf == 0) { + call aclrc (buffer, SZ_MESSAGE) + #call amovkc (EOF, buffer, SZ_MESSAGE) + nbuf = 0 + + iferr { + n = read (fdin, message, SZ_MESSAGE) + if (n < 0) + return (EOF) + } then { + call xer_reset() + call zdojmp (xim_jmp, X_IPC) + } + + if (mode == XIM_BINARY) { + len = n * SZB_CHAR + call achtbc (message, message, len) + } else + len = n + + # Save the data read to a local buffer. Remove any extra + # EOS padding and append an EOF on the string. + call amovc (message, buffer, len) + if (buffer[len] == EOS && buffer[len-1] == EOS) + nbuf = len + else + nbuf = len + 1 + buffer[nbuf] = EOF + } + + for (i=1; buffer[i] != EOS && buffer[i] != EOF && i <= nbuf; i=i+1) + message[i] = buffer[i] + message[i] = '\0' + len = i # length of the current message + nleft = nbuf - i # nchars left in the buffer + nr = nr + len + + if (buffer[i] == EOS && buffer[i+1] == EOF) { + # That was the last message, force a new read next time we're + # called. + if (i > 1 && nleft > 1) + call amovc (buffer[i+1], buffer, nleft) + nbuf = 0 + } else { + # More of the message is left in the buffer. + if (nleft > 0) + call amovc (buffer[i+1], buffer, nleft) + nbuf = nleft + } + + if (XIM_DBG) { + call eprintf ("xim_read: tot=%d len=%d msg='%s'\n") + call pargi(nr); call pargi (len); + call pargstr(message) + call eprintf ("xim_read: nbuf=%d nleft=%d buffer='%s'\n") + call pargi (nbuf); call pargi(nleft); call pargstr(buffer) + } + + return (len) +end + + +# XIM_INTRHANDLER -- User-callable interrupt handler so the ISM client code +# doesn't need to know about our internals. + +int procedure xim_intrhandler() + +extern xim_zxwhen() + +# Interrupt handler variables common. +int ximepa, ximstat, old_onint, xim_fd, xim_jmp[LEN_JUMPBUF] +common /ximcom/ xim_fd, xim_jmp, ximepa, ximstat, old_onint + +begin + call zlocpr (xim_zxwhen, ximepa) + call xwhen (X_INT, ximepa, old_onint) + call zsvjmp (xim_jmp, ximstat) + + if (ximstat == OK) + return (OK) + else + return (ERR) +end + + +# XIM_ZXWHEN -- Interrupt handler for the Ximtool client task. Branches back +# to ZSVJMP in the user routine to permit shutdown without an error message +# after first disconnecting from the socket. + +procedure xim_zxwhen (vex, next_handler) + +int vex # virtual exception +int next_handler # not used + +# Interrupt handler variables common. +int ximepa, ximstat, old_onint, xim_fd, xim_jmp[LEN_JUMPBUF] +common /ximcom/ xim_fd, xim_jmp, ximepa, ximstat, old_onint + +begin + call xim_disconnect (YES) + call xer_reset() + call zdojmp (xim_jmp, vex) +end + + +# XIM_ONERROR -- Error exit handler for the interface. If this is a normal exit +# the shut down quietly, otherwise notify the server. + +procedure xim_onerror (status) + +int status #i not used (req. for ONEXIT) + +# Exception handler variables common. +int xim_errstat +common /ximecom/ xim_errstat + +int code +char buf[SZ_LINE], errmsg[SZ_LINE] + +int errget() + +# Interrupt handler variables common. +int ximepa, ximstat, old_onint, xim_fd, xim_jmp[LEN_JUMPBUF] +common /ximcom/ xim_fd, xim_jmp, ximepa, ximstat, old_onint + +begin + if (status != OK) { + code = errget (errmsg, SZ_LINE) + call sprintf (buf, SZ_LINE, "ISM Error, code %d:\n`%s\'") + call pargi (status) + call pargstr (errmsg) + + call xim_alert (buf, NULL, NULL) + call xim_disconnect (YES) + } +end diff --git a/vendor/x11iraf/ximtool/clients/mkpkg b/vendor/x11iraf/ximtool/clients/mkpkg new file mode 100644 index 00000000..52fdef97 --- /dev/null +++ b/vendor/x11iraf/ximtool/clients/mkpkg @@ -0,0 +1,34 @@ +# Make the ISM Client tasks. + +$call relink +$exit + +update: + $call relink + $call install + ; + +relink: + $set LIBS = "-lds -lxtools -liminterp -lslalib" + $update libpkg.a + $omake x_ism.x + $link -z x_ism.o libpkg.a -o ism_wcspix.e $(LIBS) + ; + +debug: + $set LIBS = "-lds -lxtools -lslalib" + $set XFLAGS = "$(XFLAGS) -xqF" + $update libpkg.a + $omake x_ism.x + $link -z -x x_ism.o libpkg.a -o ism_wcspix.e $(LIBS) + ; + +install: + $move ism_wcspix.e ../../bin/ism_wcspix.e + ; + + +libpkg.a: + @lib + @wcspix + ; diff --git a/vendor/x11iraf/ximtool/clients/wcspix/README b/vendor/x11iraf/ximtool/clients/wcspix/README new file mode 100644 index 00000000..e69de29b diff --git a/vendor/x11iraf/ximtool/clients/wcspix/class.com b/vendor/x11iraf/ximtool/clients/wcspix/class.com new file mode 100644 index 00000000..c6116c11 --- /dev/null +++ b/vendor/x11iraf/ximtool/clients/wcspix/class.com @@ -0,0 +1,6 @@ +# Class common. +int cl_nclass # number of defined functions +int cl_table[LEN_CLASS,MAX_CLASSES] # class table +char cl_names[SZ_CLNAME,MAX_CLASSES] # class names +common /class_com/ cl_nclass, cl_table, cl_names + diff --git a/vendor/x11iraf/ximtool/clients/wcspix/mkpkg b/vendor/x11iraf/ximtool/clients/wcspix/mkpkg new file mode 100644 index 00000000..80b80f48 --- /dev/null +++ b/vendor/x11iraf/ximtool/clients/wcspix/mkpkg @@ -0,0 +1,16 @@ +# Make the WCSPIX ISM Client task. + +$checkout libpkg.a ../ +$update libpkg.a +$checkin libpkg.a ../ +$exit + +libpkg.a: + t_wcspix.x wcspix.h class.com + wcimage.x wcspix.h \ + wcspix.h + wcmef.x wcspix.h + wcmspec.x wcspix.h + wcunknown.x wcspix.h + ; + diff --git a/vendor/x11iraf/ximtool/clients/wcspix/t_wcspix.x b/vendor/x11iraf/ximtool/clients/wcspix/t_wcspix.x new file mode 100644 index 00000000..b0170f5b --- /dev/null +++ b/vendor/x11iraf/ximtool/clients/wcspix/t_wcspix.x @@ -0,0 +1,792 @@ +# Copyright(c) 1986 Association of Universities for Research in Astronomy Inc. + +include +include +include "wcspix.h" + + +# T_WCSPIX -- Entry point for the WCSPIX Image Support Module for XImtool. +# The WCSPIX task is responsible for converting image coordinates and getting +# pixel values from images of various types. Results are returned to the +# GUI directly using ISM messaging. + +procedure t_wcspix () + +pointer wp +real x, y +int len, disconnect, ncmd, objid, regid +char socket[SZ_FNAME], cmd[SZ_FNAME], message[SZ_LINE], buf[SZ_DATE] +char ref[SZ_FNAME], template[SZ_LINE], param[SZ_FNAME] +bool debug + +long clktime() +pointer wp_init() +int envgets(), envgeti(), strdic() + +# Standard declarations for the Ximtool WCSPIX client interface. +int ism_connect(), wp_read(), ism_intrhandler() +errchk wp_read, envgets, envgeti + +begin + # Initialize local storage. + call aclrc (buf, SZ_DATE) + call aclrc (cmd, SZ_FNAME) + call aclrc (ref, SZ_FNAME) + call aclrc (param, SZ_FNAME) + call aclrc (socket, SZ_FNAME) + call aclrc (message, SZ_LINE) + call aclrc (template, SZ_LINE) + + # Get the connection socket name from the environment if defined + # or else use the default socket. + if (envgets ("ISMDEV", socket, SZ_FNAME) <= 0) + call strcpy (WCSPIX_CONNECT, socket, SZ_FNAME) + + # Open the socket connection on a negotiated socket. + if (ism_connect (socket, WCSPIX_NAME, WCSPIX_MODE) == ERR) + return + + # Install an interrupt exception handler so we can exit cleanly. + if (ism_intrhandler() == ERR) + return + + + # Initialize the task data structures. + wp = wp_init () + + # Check for a runtime debug level. + iferr (WP_DBGLEVEL(wp) = envgeti ("WCSPIX_DEBUG")) + WP_DBGLEVEL(wp) = 0 + + # Log the connection. + call wp_cnvdate (clktime(0), buf, SZ_DATE) + call sprintf (message, SZ_LINE, "info { %s: WCSPIX Connect}\n") + call pargstr (buf) + call ism_message ("ism_msg", message) + + # Loop over the commands read on the connection and process. + disconnect = 1 + debug = (WCSPIX_DBG || WP_DBGLEVEL(wp) > 0) + while (wp_read (wp, message, len) != EOF) { + + if (debug) { + message[len] = '\0' + call eprintf("message: '%s' len=%d\n") + call pargstr (message); call pargi (len) + } + if (len <= 0) { + # Server has disconnected. + disconnect = 0 + break + } + + # Scan the command string and get the first word. + call sscan (message) + call gargwrd (cmd, SZ_LINE) + ncmd = strdic (cmd, cmd, SZ_LINE, WCSPIX_CMDS) + + switch (ncmd) { + case QUIT: + # Server wants us to shut down. + disconnect = 0 + break + + case INITIALIZE: + call wp_cnvdate (clktime(0), buf, SZ_DATE) + call sprintf (message, SZ_LINE, + "info { %s: WCSPIX Initialize}\n") + call pargstr (buf) + call wp_initialize (wp) + + case CACHE: + # + call gargwrd (ref, SZ_FNAME) + call gargi (objid) + call gargi (regid) + if (debug) { + call printf ("cache: objid=%d regid=%d ref='%s'\n") + call pargi(objid); call pargi(regid); call pargstr(ref) + } + + # Log the event. + call wp_cnvdate (clktime(0), buf, SZ_DATE) + call sprintf (message, SZ_LINE, + "info { %s: WCSPIX Cache objid=%3d %s}\n") + call pargstr (buf) + call pargi (objid) + call pargstr (ref) + call ism_message ("ism_msg", message) + + call wp_cache (wp, objid, regid, ref) + + case UNCACHE: + # + call gargi (objid) + if (debug) { call printf("uncache: id=%d\n");call pargi(objid) } + + # Log the event. + call wp_cnvdate (clktime(0), buf, SZ_DATE) + call sprintf (message, SZ_LINE, + "info { %s: WCSPIX Uncache objid=%3d}\n") + call pargstr (buf) + call pargi (objid) + call ism_message ("ism_msg", message) + + call wp_uncache (wp, objid) + + case WCSTRAN: + # [[ ] ["NDC" ]] + call gargi (objid) + call gargr (x) ; call gargr (y) + if (debug) { + call printf ("wcstran: id=%d (%g,%g)\n") + call pargi(objid); call pargr (x); call pargr (y) + } + call wp_wcstran (wp, objid, x, y) + + case WCSLIST: + # + call gargi (objid) + if (debug) { call printf ("wcslist: id=%d\n");call pargi(objid)} + call wp_wcslist (wp, objid) + + case OBJINFO: + # + call gargi (objid) + call gargwrd (template, SZ_FNAME) + if (debug) { + call printf ("objinfo: id=%d temp='%s'\n") + call pargi(objid); call pargstr (template); + } + call wp_objinfo (wp, objid, template) + + case SET: + # + call gargwrd (param, SZ_FNAME) + call wp_setpar (wp, param) + + case GET: + # + + case DEBUG: + debug = !(debug) + + default: + if (debug) { + call eprintf ("ISM default: len=%d msg='%s'\n") + call pargi(len); call pargstr(message) + } + } + + # Clear the buffer for the next read. + call aclrc (message, SZ_LINE) + } + + # Disconnect from the server and clean up. + call ism_disconnect (disconnect) + call wp_shutdown (wp) +end + + +# WP_INITIALIZE -- Initialize the WCSPIX, uncache any previously cached images. + +procedure wp_initialize (wp) + +pointer wp #i WCSPIX structure + +pointer cp, wp_id2obj() +int i + +begin + for (i=0; i < SZ_CACHE; i=i+1) { + cp = wp_id2obj (wp, i) + if (cp != NULL && C_OBJID(cp) != NULL) + call wp_uncache (wp, C_OBJID(cp)) + } +end + + +# WP_CACHE -- Associate and object reference with a unique object id. + +procedure wp_cache (wp, objid, regid, ref) + +pointer wp #i WCSPIX structure +int objid #i object id +int regid #i region id +char ref[ARB] #i object ref + +pointer cp +int i, class +char alert[SZ_FNAME] + +int wp_class() + +include "class.com" + +begin + # Find an unused slot in the object cache. + for (i=0; i < SZ_CACHE; i=i+1) { + cp = OBJCACHE(wp,i) + if (C_NREF(cp) == 0) + break + } + + # Get the object class. + class = wp_class (ref) + if (class == ERR) { + # Send alert to the GUI. + call sprintf (alert, SZ_FNAME, "wp_cache: Unable to cache\n%s") + call pargstr (ref) + call ism_alert (alert, "", "") + + # Setup for linear system. + return + } + C_CLASS(cp) = class + + # Initialize the object. + if (class != NULL && CL_INIT(class) != NULL) + call zcall2 (CL_INIT(class), cp, wp) + + # Call the cache function. + if (class != NULL && CL_CACHE(class) != NULL) + call zcall4 (CL_CACHE(class), cp, objid, regid, ref) +end + + +# WP_UNCACHE -- Remove an object from the WCSPIX cache. + +procedure wp_uncache (wp, id) + +pointer wp #i WCSPIX structure +int id #i object id + +pointer cp, wp_id2obj() +int class + +include "class.com" + +begin + cp = wp_id2obj (wp, id) + if (cp == NULL) + return + + # Call the uncache function. + class = C_CLASS(cp) + if (class != NULL && CL_UNCACHE(class) != NULL) + call zcall2 (CL_UNCACHE(class), cp, id) + + C_NREF(cp) = 0 +end + + +# WP_WCSTRAN -- Translate image coords to WCS values. + +procedure wp_wcstran (wp, id, x, y) + +pointer wp #i WCSPIX structure +int id #i object id +real x, y #i image coords + +pointer cp, wp_id2obj() +int class + +include "class.com" + +begin + cp = wp_id2obj (wp, id) + if (cp == NULL) + return + + # Call the uncache function. + class = C_CLASS(cp) + if (class != NULL && CL_WCSTRAN(class) != NULL) + call zcall4 (CL_WCSTRAN(class), cp, id, x, y) +end + + +# WP_WCSLIST -- List the available world coordinate systems for the given +# object. + +procedure wp_wcslist (wp, id) + +pointer wp #i WCSPIX structure +int id #i object id + +pointer cp, wp_id2obj() +int class + +include "class.com" + +begin + cp = wp_id2obj (wp, id) + if (cp == NULL) + return + + # Call the uncache function. + class = C_CLASS(cp) + if (class != NULL && CL_WCSLIST(class) != NULL) + call zcall2 (CL_WCSLIST(class), cp, id) +end + + +# WP_OBJINFO -- Get and image header or keyword templates for the given +# object. + +procedure wp_objinfo (wp, id, template) + +pointer wp #i WCSPIX structure +int id #i object id +char template[ARB] #i keyword template + +pointer cp, wp_id2obj() +int class + +include "class.com" + +begin + cp = wp_id2obj (wp, id) + if (cp == NULL) + return + + # Call the uncache function. + class = C_CLASS(cp) + if (class != NULL && CL_OBJINFO(class) != NULL) + call zcall3 (CL_OBJINFO(class), cp, id, template) +end + + +# WP_SETPAR -- Set the value of a WCSPIX ISM parameter. + +procedure wp_setpar (wp, param) + +pointer wp #i WCSPIX structure pointer +char param[SZ_FNAME] #i WCSPIX param name + +char arg[SZ_PARAM], buf[SZ_PARAM], msg[SZ_PARAM] +int line + +int strdic() + +include "class.com" + +begin + if (WCSPIX_DBG) { call printf ("set: %s = ");call pargstr(param) } + + switch (strdic (param, param, SZ_PARAM, WCSPIX_PARAMS)) { + case PAR_PSIZE: + call gargi (WP_PTABSZ(wp)) + if (WCSPIX_DBG) { call printf ("%d\n");call pargi(WP_PTABSZ(wp)) } + + case PAR_BPM: + call gargi (WP_BPM(wp)) + if (WCSPIX_DBG) { call printf ("%d\n");call pargi(WP_BPM(wp)) } + + case PAR_WCS: + call gargwrd (buf, SZ_FNAME) + call gargi (line) + + call strcpy (buf, arg, SZ_PARAM) + call strlwr (buf) + switch (strdic (buf, buf, SZ_FNAME, WCSPIX_SYSTEMS)) { + case SYS_DISPLAY: SYSTEMS(wp,line) = SYS_DISPLAY + case SYS_LOGICAL: SYSTEMS(wp,line) = SYS_LOGICAL + case SYS_PHYSICAL: SYSTEMS(wp,line) = SYS_PHYSICAL + case SYS_WORLD: SYSTEMS(wp,line) = SYS_WORLD + case SYS_NONE: SYSTEMS(wp,line) = SYS_NONE + case SYS_AMP: SYSTEMS(wp,line) = SYS_AMP + case SYS_CCD: SYSTEMS(wp,line) = SYS_PHYSICAL + case SYS_DETECTOR: SYSTEMS(wp,line) = SYS_DETECTOR + default: SYSTEMS(wp,line) = SYS_SKY + } + call strcpy (buf, WCSNAME(wp,line), LEN_WCSNAME) + + if (WCSPIX_DBG) { + call printf("%s line=%d\n");call pargstr(buf);call pargi(line) } + + call sprintf (msg, SZ_FNAME, "wcstype %s %d") + call pargstr (arg) + call pargi (line) + call wcspix_message (msg) + + case PAR_FMT: + call gargwrd (buf, SZ_FNAME) + call gargi (line) + + call strcpy (buf, arg, SZ_PARAM) + call strlwr (buf) + switch (strdic (buf, buf, SZ_FNAME, WCSPIX_FMT)) { + case FMT_DEFAULT: FORMATS(wp,line) = FMT_DEFAULT + case FMT_HMS: FORMATS(wp,line) = FMT_HMS + case FMT_DEG: FORMATS(wp,line) = FMT_DEG + case FMT_RAD: FORMATS(wp,line) = FMT_RAD + default: FORMATS(wp,line) = FMT_DEFAULT + } + + if (WCSPIX_DBG) { + call printf("%s line=%d\n");call pargstr(buf);call pargi(line) } + + call sprintf (msg, SZ_FNAME, "wcsfmt %s %d") + call pargstr (arg) + call pargi (line) + call wcspix_message (msg) + } +end + + +# WP_GETPAR -- Get the value of a WCSPIX ISM parameter. + +procedure wp_getpar (wp, param) + +pointer wp #i WCSPIX structure pointer +char param[SZ_FNAME] #i WCSPIX param name + +int strdic() + +begin + if (WCSPIX_DBG) { call printf ("set: %s = ");call pargstr(param) } + + switch (strdic (param, param, SZ_PARAM, WCSPIX_PARAMS)) { + case PAR_PSIZE: + case PAR_BPM: + case PAR_WCS: + case PAR_FMT: + } +end + + +################################################################################ +# +# Private procedures. +# +################################################################################ + + +# WP_INIT -- Initialize the WCSPIX task and data structures. + +pointer procedure wp_init () + +pointer wp #r WCSPIX structure pointer +int i + +begin + # Allocate the task structure. + iferr (call calloc (wp, SZ_WCSPIX, TY_STRUCT)) + call error (0, "Error opening WCSPIX task structure.") + + call calloc (WP_SYSTEMS(wp), MAX_WCSLINES, TY_INT) + call calloc (WP_FORMATS(wp), MAX_WCSLINES, TY_INT) + call calloc (WP_WCS(wp), (LEN_WCSNAME*MAX_WCSLINES), TY_CHAR) + for (i=1; i <= MAX_WCSLINES; i=i+1) { + FORMATS(wp,i) = DEF_FMT + SYSTEMS(wp,i) = DEF_SYSTEM + call strcpy ("none", WCSNAME(wp,i), LEN_WCSNAME) + } + + # Allocate the object cache. + call calloc (WP_CPTR(wp), SZ_CACHE, TY_STRUCT) + for (i=0; i < SZ_CACHE; i=i+1) + call calloc (OBJCACHE(wp,i), SZ_CNODE, TY_STRUCT) + + WP_PTABSZ(wp) = 0 + WP_BPM(wp) = DEF_BPM_FLAG + + # Initialize the class modules. + call wp_class_init() + + return (wp) +end + + +# WP_READ -- Read messages from the connection and process them optimally for +# this ISM. This means we segment the messages and handle only the last +# few WCS requests so we can keep up with the server requests. Presumably +# there are more cursor events coming which are no longer valid so some are +# thrown out. + +int procedure wp_read (wp, message, len) + +pointer wp #i WCSPIX structure pointer +char message[ARB] #o message buffer +int len #o length of message + +int nleft + +int ism_read(), strncmp() +errchk ism_read + +begin + while (true) { + nleft = ism_read (message, len) + + # Return EOF if the server hung up on us. + if (nleft == EOF) + return (EOF) + + # In debug mode process all messages. + if (WP_DBGLEVEL(wp) > 0) + break + + # Pass back all non-wcstran messages. + if (strncmp ("wcstran", message, 7) != 0) + break + + # Only pass back the last wcstran messages received (eat the rest). + if (strncmp ("wcstran", message, 7) == 0 && nleft <= 1) + break + } + + return (len) +end + + +# WP_SHUTDOWN -- Shut down the WCSPIX, freeing all storage + +procedure wp_shutdown (wp) + +pointer wp #i WCSPIX structure +int i + +begin + # Free the structures. + call mfree (WP_WCS(wp), TY_CHAR) + call mfree (WP_FORMATS(wp), TY_INT) + call mfree (WP_SYSTEMS(wp), TY_INT) + for (i=0; i < SZ_CACHE; i=i+1) + call mfree (OBJCACHE(wp,i), TY_STRUCT) + + call mfree (WP_CPTR(wp), TY_STRUCT) + call mfree (wp, TY_STRUCT) +end + + +# WP_CLASS -- Determine the object class for the named image/file. + +int procedure wp_class (object) + +char object[ARB] #i object reference + +int n, class +pointer im +char ch, buf[SZ_FNAME] + +int strlen(), stridx() +bool streq() +pointer immap() + +errchk immap + +begin + # The following kludge is necessary to protect against the case + # where dev$pix is used as a test image. The 'object' pathname in + # this case is "node!/path/dev/pix" which lacks the extension + # and causes the task to fail to open because of a conflict with + # the pix.hhh in the same directory. Most IRAF tasks work since + # the imio$iki code treats the string "dev$pix" as a special case. + + call imgimage (object, buf, SZ_FNAME) + n = strlen (buf) - 7 + if (streq (buf[n], "/dev/pix")) { + call strcpy ("dev$pix", buf, SZ_FNAME) + ch = '[' + n = stridx (ch, object) + if (n > 0) + call strcat (object[n], buf, SZ_FNAME) + call strcpy (buf, object, SZ_FNAME) + } + + + # See if we can map the image to get at least an image class. If + # so then check for special subclasses like Mosaic files, spectra, etc. + + class = UNKNOWN_CLASS + ifnoerr (im = immap (object, READ_ONLY, 0)) { + class = IMAGE_CLASS + + # Now check for subclasses. (TBD) + + call imunmap (im) + } + + return (class) +end + + +# WP_ID2OBJ -- Utility routine to convert and object id to the cache pointer. + +pointer procedure wp_id2obj (wp, id) + +pointer wp #i WCSPIX structure +int id #i object id + +int i +pointer cp + +begin + for (i=0; i < SZ_CACHE; i=i+1) { + cp = OBJCACHE(wp,i) + if (C_OBJID(cp) == id) + return (cp) + } + return (NULL) +end + + +# WP_CLASS_INIT -- Initialize the WCSPIX ISM class modules. + +procedure wp_class_init() + +extern img_init(), img_cache(), img_uncache() +extern img_wcstran(), img_wcslist(), img_objinfo() + +extern mef_init(), mef_cache(), mef_uncache() +extern mef_wcstran(), mef_wcslist(), mef_objinfo() + +extern msp_init(), msp_cache(), msp_uncache() +extern msp_wcstran(), msp_wcslist(), msp_objinfo() + +extern unk_init(), unk_cache(), unk_uncache() +extern unk_wcstran(), unk_wcslist(), unk_objinfo() + +include "class.com" +int locpr() + +begin + cl_nclass = 0 + + # Load the class modules. + call wp_load_class ("unknown", + locpr(unk_init), locpr(unk_cache), locpr(unk_uncache), + locpr(unk_wcstran), locpr(unk_wcslist), locpr(unk_objinfo)) + call wp_load_class ("image", + locpr(img_init), locpr(img_cache), locpr(img_uncache), + locpr(img_wcstran), locpr(img_wcslist), locpr(img_objinfo)) + call wp_load_class ("mef", + locpr(mef_init), locpr(mef_cache), locpr(mef_uncache), + locpr(mef_wcstran), locpr(mef_wcslist), locpr(mef_objinfo)) + call wp_load_class ("multispec", + locpr(msp_init), locpr(msp_cache), locpr(msp_uncache), + locpr(msp_wcstran), locpr(msp_wcslist), locpr(msp_objinfo)) +end + + +# WP_LOAD_CLASS -- Load an object class module for the ISM task. + +procedure wp_load_class (name, init, cache, uncache, tran, list, info) + +char name[ARB] #I module name +int init #I initialize procedure +int cache #I cache the object procedure +int uncache #I uncache the object procedure +int tran #I translate WCS procedure +int list #I list WCS proedure +int info #I get header procedure + +errchk syserrs +include "class.com" + +begin + # Get a new driver slot. + if (cl_nclass + 1 > MAX_CLASSES) + return + cl_nclass = cl_nclass + 1 + + # Load the driver. + CL_INIT(cl_nclass) = init + CL_CACHE(cl_nclass) = cache + CL_UNCACHE(cl_nclass) = uncache + CL_WCSTRAN(cl_nclass) = tran + CL_WCSLIST(cl_nclass) = list + CL_OBJINFO(cl_nclass) = info + call strcpy (name, CL_NAME(cl_nclass), SZ_FNAME) +end + + +# WCSPIX_MESSAGE -- Deliver a message to the ISM callback, tagged with +# our name so it can be passed off to the correct code. + +procedure wcspix_message (message) + +char message[ARB] #I message to send + +pointer sp, msgbuf +int msglen, mlen, ip + +int strlen() + +begin + # Get the message length plus some extra for the braces and padding. + mlen = strlen (message) + msglen = mlen + 64 + + # Allocate and clear the message buffer. + call smark (sp) + call salloc (msgbuf, msglen, TY_CHAR) + call aclrc (Memc[msgbuf], msglen) + + ip = 0 + call amovc ("deliver wcspix { ", Memc[msgbuf], 17) ; ip = ip + 17 + call amovc (message, Memc[msgbuf+ip], mlen) ; ip = ip + mlen + call amovc (" }\0", Memc[msgbuf+ip], 2) ; ip = ip + 2 + + call ism_message ("ism_msg", Memc[msgbuf]) + + call sfree (sp) +end + + +define SZ_WEEKDAY 3 +define SZ_MONTH 3 + +# WP_CNVDATE -- Convert a time in integer seconds since midnight on Jan 1, 1980 +# into a short string such as "5/15 18:24". + +procedure wp_cnvdate (ltime, outstr, maxch) + +long ltime # seconds since 00:00:00 10-Jan-1980 +char outstr[ARB] +int maxch + +int tm[LEN_TMSTRUCT] + +begin + call brktime (ltime, tm) + +# call sprintf (outstr, maxch, "%2d/%2d %2d:%02d") +# call pargi (TM_MONTH(tm)) +# call pargi (TM_MDAY(tm)) +# call pargi (TM_HOUR(tm)) +# call pargi (TM_MIN(tm)) + +# call sprintf (outstr, maxch, "%2d:%02d") +# call pargi (TM_HOUR(tm)) +# call pargi (TM_MIN(tm)) + + call sprintf (outstr, maxch, "%2d:%02d:%02d") + call pargi (TM_HOUR(tm)) + call pargi (TM_MIN(tm)) + call pargi (TM_SEC(tm)) +end + + + +#---------------- +# DEBUG ROUTINES. +#---------------- +procedure dbg_printcache (wp, buf) +pointer wp +char buf[ARB] +pointer cp, wp_id2obj() +int i +begin + call printf ("%s\n") ; call pargstr (buf) + for (i=0; i < SZ_CACHE; i=i+1) { + cp = wp_id2obj (wp, i) + if (C_DATA(cp) != NULL) { + call printf ("%3d: id=%d ref='%s'\n") + call pargi(i) + call pargi(C_OBJID(cp)) + call pargstr(C_REF(cp)) + } + } +end diff --git a/vendor/x11iraf/ximtool/clients/wcspix/wcimage.x b/vendor/x11iraf/ximtool/clients/wcspix/wcimage.x new file mode 100644 index 00000000..4a27af46 --- /dev/null +++ b/vendor/x11iraf/ximtool/clients/wcspix/wcimage.x @@ -0,0 +1,1465 @@ +# Copyright(c) 1986 Association of Universities for Research in Astronomy Inc. + +include +include +include +include +include +include +include +include "wcspix.h" + + +# Image class data. +define LEN_IMGDATA 15 +define IMG_WP Memi[$1 ] # wcspix back-pointer +define IMG_IM Memi[$1+1] # image pointer +define IMG_BPM Memi[$1+2] # bad pixel mask pointer +define IMG_MW Memi[$1+3] # image wcs pointer +define IMG_CO Memi[$1+4] # skywcs transform pointer +define IMG_CTW Memi[$1+5] # mwcs log->world transform ptr +define IMG_CTP Memi[$1+6] # mwcs log->phys transform ptr +define IMG_CTA Memi[$1+7] # mwcs log->amplifier transform +define IMG_CTD Memi[$1+8] # mwcs log->detector transform +define IMG_ROT Memr[$1+9] # rotation angle +define IMG_SCALE Memr[$1+10] # plate scale +define IMG_LINEAR Memi[$1+11] # linear coords + + +define IMG_DEBUG FALSE + + +# IMG_INIT -- Initialize the object structure. + +procedure img_init (cp, wp) + +pointer cp #i cache pointer +pointer wp #i WCSPIX structure + +pointer img # data pointer + +begin + if (IMG_DEBUG) call printf ("img_init: \n") + + # Allocate the image data structure if not previously allocated. + if (C_DATA(cp) == NULL) { + iferr (call calloc (C_DATA(cp), LEN_IMGDATA, TY_STRUCT)) + return + } + + img = C_DATA(cp) + IMG_WP(img) = wp + IMG_IM(img) = NULL + IMG_BPM(img) = NULL + IMG_MW(img) = NULL + IMG_CO(img) = NULL + IMG_CTW(img) = NULL + IMG_CTP(img) = NULL + IMG_CTA(img) = NULL + IMG_CTD(img) = NULL + IMG_ROT(img) = 0.0 + IMG_SCALE(img) = 0.0 + IMG_LINEAR(img) = YES +end + + +# IMG_CACHE -- Cache an image in the object cache. + +procedure img_cache (cp, objid, regid, ref) + +pointer cp #i cache pointer +int objid #i object id +int regid #i region id +char ref[ARB] #i object reference + +pointer img, im, wp, co +int stat, i1, i2 +char alert[SZ_LINE] + +pointer immap(), ds_pmmap(), mw_sctran() +pointer img_amp_wcs(), img_det_wcs() +int imaccf(), sk_decim() + +errchk immap, ds_pmmap, mw_sctran, sk_decim, sk_setd + +begin + if (IMG_DEBUG) call printf ("img_cache: \n") + + # Now map the image and WCS. + img = C_DATA(cp) + wp = IMG_WP(img) + + iferr (IMG_IM(img) = immap (ref, READ_ONLY, 0)) { + # Send alert to the GUI. + call sprintf (alert, SZ_FNAME, "Unable to cache\n%s") + call pargstr (ref) + call ism_alert (alert, "", "") + return + } + im = IMG_IM(img) + + IMG_CO(img) = NULL + IMG_CTW(img) = NULL + IMG_CTP(img) = NULL + IMG_CTA(img) = NULL + IMG_CTD(img) = NULL + iferr { + stat = sk_decim (IMG_IM(img), "world", IMG_MW(img), IMG_CO(img)) + if (IMG_DEBUG) { + call eprintf ("img_cache - decim: stat=%d mw=%d co=%d \n") + call pargi(stat);call pargi(IMG_MW(img)) + call pargi(IMG_CO(img)); + } + if (stat == ERR || IMG_MW(img) == NULL) { + IMG_LINEAR(img) = YES + + co = IMG_CO(img) + i1 = IM_VMAP(im,1) + i2 = IM_VMAP(im,2) + call sk_setd (co, S_VXOFF, double(IM_VOFF(im,i1))) + call sk_setd (co, S_VYOFF, double(IM_VOFF(im,i2))) + call sk_setd (co, S_VXSTEP, double(IM_VSTEP(im,i1))) + call sk_setd (co, S_VYSTEP, double(IM_VSTEP(im,i2))) + + IMG_MW(img) = NULL + IMG_LINEAR(img) = YES + } + + if (IMG_MW(img) != NULL) { + IMG_CTW(img) = mw_sctran (IMG_MW(img), "logical", "world", 03B) + IMG_CTP(img) = mw_sctran (IMG_MW(img), "logical", "physical", + 03B) + + # Get the amplifier transformation values if present. + if (imaccf(im,"ATM1_1") == YES && + imaccf(im,"ATM2_2") == YES && + imaccf(im,"ATV1") == YES && + imaccf(im,"ATV2") == YES) + IMG_CTA(img) = img_amp_wcs (im, IMG_MW(img)) + + if (imaccf(im,"DTM1_1") == YES && + imaccf(im,"DTM2_2") == YES && + imaccf(im,"DTV1") == YES && + imaccf(im,"DTV2") == YES) + IMG_CTD(img) = img_det_wcs (im, IMG_MW(img)) + } + + } then { + # Send alert to the GUI. + call sprintf (alert, SZ_FNAME, "Unable to decode image WCS\n%s") + call pargstr (ref) + call ism_alert (alert, "", "") + IMG_LINEAR(img) = YES + } + + + # See if we can find a bad pixel mask. + IMG_BPM(img) = NULL + if (WP_BPM(wp) == YES) { + iferr (IMG_BPM(img) = ds_pmmap ("BPM", IMG_IM(img))) + IMG_BPM(img) = NULL + } + + C_OBJID(cp) = objid + C_REGID(cp) = regid + C_NREF(cp) = C_NREF(cp) + 1 + call strcpy (ref, C_REF(cp), 128) +end + + +# IMG_UNCACHE -- Uncache an image in the object cache. + +procedure img_uncache (cp, id) + +pointer cp #i cache pointer +int id #i image id + +pointer img + +begin + if (IMG_DEBUG) call printf ("img_uncache: \n") + + C_OBJID(cp) = NULL + C_NREF(cp) = 0 + call strcpy ("", C_REF(cp), SZ_FNAME) + + img = C_DATA(cp) + if (IMG_MW(img) != NULL) + call mw_close (IMG_MW(img)) + if (IMG_BPM(img) != NULL) + call imunmap (IMG_BPM(img)) + if (IMG_IM(img) != NULL) + call imunmap (IMG_IM(img)) + + IMG_IM(img) = NULL + IMG_BPM(img) = NULL + IMG_MW(img) = NULL + IMG_CTW(img) = NULL + IMG_CTP(img) = NULL + IMG_CTA(img) = NULL + IMG_CTD(img) = NULL + IMG_CO(img) = NULL + IMG_ROT(img) = 0.0 + IMG_SCALE(img) = 0.0 + IMG_LINEAR(img) = NO + + call mfree (C_DATA(cp), TY_STRUCT) + C_DATA(cp) = NULL +end + + +# IMG_WCSTRAN -- Translate object source (x,y) coordinates to the +# desired output WCSs. Message is returned as something like: +# +# set value { +# { object } { region } +# { pixval [] } +# { bpm } +# { coord [ ] } +# { coord [ ] } +# : +# } + + +procedure img_wcstran (cp, id, x, y) + +pointer cp #i cache pointer +int id #i image id +real x, y #i source coords + +pointer img, im, wp, co +double dx, dy, wx, wy +real rx, ry, pixval +int i, bpm + +# Use static storage to avoid allocation overhead. +char buf[SZ_LINE] +char msg[SZ_LINE], wcs[LEN_WCSNAME], xc[LEN_WCSNAME], yc[LEN_WCSNAME] +char xunits[LEN_WCSNAME], yunits[LEN_WCSNAME] + +double sk_statd() + +begin + if (IMG_DEBUG) call printf ("img_wcstran: \n") + + img = C_DATA(cp) # initialize + co = IMG_CO(img) + wp = IMG_WP(img) + im = IMG_IM(img) + + # Get the translation to the image section. + dx = (double(x) - sk_statd(co,S_VXOFF)) / sk_statd(co,S_VXSTEP) + dy = (double(y) - sk_statd(co,S_VYOFF)) / sk_statd(co,S_VYSTEP) + rx = dx + ry = dy + + # Read the pixel data. + call img_get_data (cp, id, rx, ry, pixval, bpm) + + # Begin formatting the message. + call aclrc (msg, SZ_LINE) + call sprintf (msg, SZ_LINE, "wcstran { object %d } { region %d } ") + call pargi (C_OBJID(cp)) + call pargi (C_REGID(cp)) + + call sprintf (buf, SZ_LINE, "{ pixval %9.9g } { bpm %d }\n") + call pargr (pixval) + call pargi (bpm) + call strcat (buf, msg, SZ_LINE) + + # Now loop over the requested systems and generate a coordinate + # for each. + for (i=1; i <= MAX_WCSLINES; i=i+1) { + + # Get the coordinate value. + call img_get_coord (img, dx, dy, SYSTEMS(wp,i), WCSNAME(wp,i), + wx, wy) + + # Get the system name, labels, and formats strings for the WCS. + call img_coord_labels (cp, i, wcs, xunits, yunits) + + # Format the values as requested. + call img_coord_fmt (cp, i, wx, wy, xc, yc) + + # Format the coord buffer and append it to the message. + call sprintf (buf, SZ_LINE, + "{coord {%9s} {%12s} {%12s} {%4s} {%4s}}\n") + call pargstr (wcs) + call pargstr (xc) + call pargstr (yc) + call pargstr (xunits) + call pargstr (yunits) + call strcat (buf, msg, SZ_LINE) + } + + # Now send the completed message. + call wcspix_message (msg); +end + + +# IMG_WCSLIST -- List the WCSs available for the given image. + +procedure img_wcslist (cp, id) + +pointer cp #i cache pointer +int id #i image id + +pointer img, im, mw +char msg[SZ_LINE] + +begin + if (IMG_DEBUG) call printf ("img_wcslist: \n") + + img = C_DATA(cp) # initialize + mw = IMG_MW(img) + im = IMG_IM(img) + + call strcpy ("wcslist {None Display Logical World Physical line ", + msg, SZ_LINE) + + # See if we can do amplifier/detector coords by checking for ATM/ATV + # and DTM/DTV keywords. + + if (IMG_CTA(img) != NULL) + call strcat (" Amplifier ", msg, SZ_LINE) + if (IMG_CTD(img) != NULL) + call strcat (" Detector ", msg, SZ_LINE) + if (IMG_CTA(img) != NULL || IMG_CTD(img) != NULL) + call strcat (" CCD ", msg, SZ_LINE) + + # If we have a MWCS pointer list the sky projections. + if (mw != NULL) { + call strcat (" line ", msg, SZ_LINE) + call strcat (SKYPROJ, msg, SZ_LINE) + } + + # Close the message. + call strcat ("}", msg, SZ_LINE) + + call wcspix_message (msg) +end + + +# IMG_GET_DATA -- Get data from the image. + +procedure img_get_data (cp, id, x, y, pixval, bpm_pix) + +pointer cp #i cache pointer +int id #i image id +real x, y #i source coords +real pixval #o central pixel value +int bpm_pix #o bad pixel mask value + +pointer img, wp, im, bpm, pix, sp, msg, buf +int nl, nc, ix, iy, s2 +int size, x1, x2, y1, y2 + +long clktime() +pointer imgs2r(), imgs2i(), ds_pmmap() +errchk ds_pmmap + +begin + + img = C_DATA(cp) + wp = IMG_WP(img) + im = IMG_IM(img) + bpm = IMG_BPM(img) + nc = IM_LEN(im,1) + nl = IM_LEN(im,2) +# size = WP_PTABSZ(wp) + size = min(min(nc,nl),WP_PTABSZ(wp)) + + if (IMG_DEBUG) { + call printf ("img_get_data: \n") + call eprintf ("\tx: %g y: %g nc: %d nl: %d\n") + call pargr(x); call pargr(y); call pargi(nc); call pargi(nl) + } + + # Sanity check on the cursor image position. + if (x < 0.0 || y < 0.0 || x > (nc+0.5) || y > (nl+0.5)) + return + + # Bounds checking. Rather than deal with out of bounds pixels we'll + # adjust the center pixel so we get the same size raster up to each + # boundary. + + ix = int (x + 0.5) ; iy = int (y + 0.5) + ix = min (ix, (nc-(size/2)-1)) ; iy = min (iy, (nl-(size/2)-1)) + ix = max (size/2+1, ix) ; iy = max (size/2+1, iy) + + # Compute the box offset given the center and size. + x1 = ix - size / 2 + 0.5 + x2 = ix + size / 2 + 0.5 + y1 = iy - size / 2 + 0.5 + y2 = iy + size / 2 + 0.5 + + if (IMG_DEBUG) { + call printf ("img_get_data: \n") + call eprintf ("\tix: %d iy: %g size: %d\n") + call pargi(ix); call pargi(iy); call pargi(size) + call eprintf ("\tx1: %d y1: %d x2: %d y2: %d\n") + call pargi(x1); call pargi(y1); + call pargi(x2); call pargi(y2); + } + + x1 = max (1, x1) + x2 = min (nc, x2) + y1 = max (1, y1) + y2 = min (nl, y2) + + if (IMG_DEBUG) { + call eprintf ("\tx1: %d y1: %d x2: %d y2: %d\n") + call pargi(x1); call pargi(y1); + call pargi(x2); call pargi(y2); + } + + # Get the image pixels + pix = imgs2r (im, int(x1), int(x2), int(y1), int(y2)) + + if (WP_BPM(wp) == YES) { + if (bpm != NULL) { + bpm_pix = Memi[imgs2i (bpm, ix, ix, iy, iy)] + } else { + # See if we can find a bad pixel mask. The option is enabled + # but we haven't mappend the mask yet. + + # Log the event. + call smark (sp) + call salloc (msg, SZ_LINE, TY_CHAR) + call salloc (buf, SZ_LINE, TY_CHAR) + call wp_cnvdate (clktime(0), Memc[buf], SZ_DATE) + call sprintf (Memc[msg], SZ_LINE, + "info { %s: WCSPIX BPM map objid=%3d %s}\n") + call pargstr (Memc[buf]) + call pargi (C_OBJID(cp)) + call pargstr (C_REF(cp)) + call ism_message ("ism_msg", Memc[msg]) + + iferr (IMG_BPM(img) = ds_pmmap ("BPM", im)) { + IMG_BPM(img) = NULL + bpm_pix = 0 + + # Send alert to the GUI. + call sprintf (Memc[buf], SZ_FNAME, + "Unable to map BPM image for\n%s") + call pargstr (C_REF(cp)) + call ism_alert (Memc[buf], "", "") + } else + bpm_pix = Memi[imgs2i (IMG_BPM(img), ix, ix, iy, iy)] + + call sfree (sp) + } + } else + bpm_pix = 0 + + # See if we're near an edge... + s2 = size / 2 + if (int(x)(nl-s2-1) || int(y)(nc-s2-1)) { + # Compute the image pixel associated with the requested coords. + ix = int (x + 0.5) + iy = int (y + 0.5) + pixval = Memr[imgs2r(im, ix, ix, iy, iy)] + } else { + pixval = Memr[pix + ((size/2)*size) + (size/2)] + } + + # Send the pixel table. + if (WP_PTABSZ(wp) > 1) + call img_send_pixtab (Memr[pix], WP_PTABSZ(wp), x1, x2, y1, y2) + + if (IMG_DEBUG) { + call printf ("img_get_data: pixval=%g\n") ; call pargr (pixval) + } +end + + +# IMG_OBJINFO -- Get header information from the image. + +procedure img_objinfo (cp, id, template) + +pointer cp #i cache pointer +int id #i image id +char template[ARB] #i keyword template + +pointer im, img + +define WCS_TEMPLATE "WCSDIM,CTYPE*,CRPIX*,CRVAL*,CD*,CROTA2,LTV*,LTM*,WSV*,WAT*,RA*,DEC*,EQUINOX,EPOCH,MJD*,DATE-OBS" + +begin + if (IMG_DEBUG) call printf ("img_objinfo: \n") + + # Send the full header (or keyword filtered header), only the WCS + # keywords, and a plain-text explanation of the WCS. + + img = C_DATA(cp) + im = IMG_IM(img) + + call img_send_header (im, "imghdr", template) + call img_send_header (im, "wcshdr", WCS_TEMPLATE) + call img_send_wcsinfo (im, cp) + call img_send_compass (im, cp) +end + + + +#============================================================================== + +# IMG_SEND_HEADER -- Send an image header to the named GUI object. Keywords +# are filtered according to a specified template + +procedure img_send_header (im, object, template) + +pointer im #i image descriptor +char object[ARB] #i object for the message +char template[ARB] #i keyword template + +pointer sp, hdr, lbuf, line, field, keyw, dict +pointer ip, lp, list +int nlines, in, out, i, hdr_size +bool keyw_filter + +int stropen(), getline(), stridx(), imgnfn(), strdic() +pointer imofnlu() +bool streq() +errchk stropen, getline, putci, putline, imgnfn, imofnlu, strdic + +define USER_AREA Memc[($1+IMU-1)*SZ_STRUCT + 1] +define SZ_KEYW 8 + +begin + hdr_size = (LEN_IMDES + IM_LENHDRMEM(im) - IMU) * SZ_STRUCT - 1 + hdr_size = hdr_size + SZ_LINE + + call smark (sp) + call salloc (hdr, hdr_size, TY_CHAR) + call salloc (dict, hdr_size, TY_CHAR) + call salloc (field, SZ_LINE, TY_CHAR) + call salloc (lbuf, SZ_LINE, TY_CHAR) + call salloc (line, SZ_LINE, TY_CHAR) + call salloc (keyw, SZ_KEYW, TY_CHAR) + + in = stropen (USER_AREA(im), hdr_size, READ_ONLY) + out = stropen (Memc[hdr], hdr_size, WRITE_ONLY) + call fprintf (out, "%s {") + call pargstr (object) + + # Build up a dictionary of header keywords based on the template. + keyw_filter = (!streq (template, "*")) + if (keyw_filter) { + list = imofnlu (im, template) + call strcpy ("|", Memc[dict], hdr_size) + while (imgnfn (list, Memc[field], SZ_FNAME) != EOF) { + call strcat (Memc[field], Memc[dict], hdr_size) + call strcat ("|", Memc[dict], hdr_size) + } + call imcfnl (list) + } + + + # Copy header records to the output, stripping any trailing + # whitespace and clipping at the right margin. We also filter + # against the keyword dictionary found above. + + nlines = 0 + while (getline (in, Memc[lbuf]) != EOF) { + + call aclrc (Memc[line], SZ_LINE) + + # Escape any brackets passed to the Tcl. + ip = lbuf + lp = line + while (Memc[ip] != EOS && Memc[ip] != '\n') { + if (stridx (Memc[ip], "[{") > 0) { + Memc[lp] = '\\' + lp = lp + 1 + } + Memc[lp] = Memc[ip] + ip = ip + 1 + lp = lp + 1 + } + Memc[lp] = '\n' + Memc[lp+1] = EOS + + # See whether the line matches a keyword we want to output. + if (keyw_filter) { + for (i=0; i < SZ_KEYW && !IS_WHITE(Memc[line+i]); i=i+1) + Memc[keyw+i] = Memc[line+i] + Memc[keyw+i] = '\0' + + # If not in the dictionary skip to the next line. + if (strdic (Memc[keyw], Memc[keyw], SZ_KEYW, Memc[dict]) == 0) + next + } + + call putci (out, ' ') + call putline (out, Memc[line]) + + # Send the header in small chunks so we don't overflow the + # message buffer. + nlines = nlines + 1 + if (mod(nlines,10) == 0) { + call fprintf (out, "}") + call close (out) + call wcspix_message (Memc[hdr]); + call aclrc (Memc[hdr], hdr_size) + out = stropen (Memc[hdr], hdr_size, WRITE_ONLY) + call fprintf (out, "%s {") + call pargstr (object) + } + } + call fprintf (out, "}") + + call close (in) + call close (out) + + # Send the final message. + call wcspix_message (Memc[hdr]) + + # Pad a few lines for the GUI + call sprintf (Memc[hdr], SZ_LINE, "%d { \n\n\n }") + call pargstr (object) + call wcspix_message (Memc[hdr]) + + call sfree (sp) +end + + +# IMG_SEND_COMPASS -- Send information about the image WCS in a plain-english +# string. + +procedure img_send_compass (im, cp) + +pointer im #i image descriptor +pointer cp #i cache element pointer + +pointer sp, buf, img, co, mw +double r[IM_MAXDIM], w[IM_MAXDIM], cd[IM_MAXDIM,IM_MAXDIM] +int i, j +long axis[IM_MAXDIM], lv[IM_MAXDIM], pv1[IM_MAXDIM], pv2[IM_MAXDIM] + +real north[2], east[2] + +int mw_stati(), sk_stati() + +begin + call smark (sp) + call salloc (buf, SZ_LINE, TY_CHAR) + call aclrc (Memc[buf], SZ_LINE) + + # Get the data pointer. + img = C_DATA(cp) + co = IMG_CO(img) + + # Get world coords at the image corners. + if (IMG_CTW(img) != NULL) { + + # Get the CD matrix for the image. + mw = IMG_MW(img) + call wcs_gfterm (mw, r, w, cd, mw_stati(mw, MW_NPHYSDIM)) + + # Compute a Nort and East vector for the CD matrix. + call img_cvectors (cd, 1.0, north, east) + + } else { + # Determine the logical to physical mapping by evaluating two + # points and determining the axis reduction if any. pv1 will be + # the offset and pv2-pv1 will be the scale. + + lv[1] = 0; lv[2] = 0; call imaplv (im, lv, pv1, 2) + lv[1] = 1; lv[2] = 1; call imaplv (im, lv, pv2, 2) + + i = 1 + axis[1] = 1; axis[2] = 2 + do j = 1, IM_MAXDIM { + if (pv1[j] != pv2[j]) { + axis[i] = j + i = i + 1 + } + } + north[1] = 0.0 + north[2] = (pv2[axis[2]] - pv1[axis[2]]) + east[1] = -(pv2[axis[1]] - pv1[axis[1]]) + east[2] = 0.0 + } + + call sprintf (Memc[buf], SZ_LINE, "compass %d %g %g %g %g %g %d %s\0") + call pargi (C_OBJID(cp)) + call pargr (IMG_ROT(img)) + call pargr (north[1]) + call pargr (north[2]) + call pargr (east[1]) + call pargr (east[2]) + if (sk_stati(co,S_PLATAX) < sk_stati(co,S_PLNGAX)) + call pargi (1) # transposed image + else + call pargi (0) + if (IMG_MW(img) != NULL) + call pargstr ("E N") + else + call pargstr ("X Y") + + call wcspix_message (Memc[buf]) + + call sfree (sp) +end + + +# IMG_CVECTORS -- Get north and east vectors for the compass + +procedure img_cvectors (cd, length, north, east) + +double cd[2,2] #i CD matrix +real length #i length of vectors +real north[2] #o vector pointing north +real east[2] #o vector pointing east + +double d # determinant of CD matrix +double x, y # scratch for vector components +double l # length of a vector + +begin + d = cd[1,1] * cd[2,2] - cd[1,2] * cd[2,1] + if (d == 0.d0) + call error (1, "CD matrix is singular") + + # North. + x = -cd[1,2] / d + y = cd[1,1] / d + + # Normalize by the length and copy to output. + l = sqrt (x**2 + y**2) + north[1] = x * length / l + north[2] = y * length / l + + # East. + x = cd[2,2] / d + y = -cd[2,1] / d + l = sqrt (x**2 + y**2) + east[1] = x * length / l + east[2] = y * length / l +end + + +# IMG_SEND_WCSINFO -- Send information about the image WCS in a plain-english +# string. + +procedure img_send_wcsinfo (im, cp) + +pointer im #i image descriptor +pointer cp #i cache element pointer + +pointer sp, co, img, mw +pointer buf, proj, radecstr +int fd, radecsys, ctype, wtype, ndim +double crpix1, crpix2, crval1, crval2, cval1, cval2 +double xscale, yscale, xrot, yrot +double r[IM_MAXDIM], w[IM_MAXDIM], cd[IM_MAXDIM,IM_MAXDIM], + +int idxstr(), sk_stati(), stropen(), mw_stati() +double sk_statd(), sl_epj(), sl_epb() +bool fp_equald() + +errchk stropen + +begin + call smark (sp) + call salloc (buf, SZ_LINE, TY_CHAR) + call salloc (proj, SZ_FNAME, TY_CHAR) + call salloc (radecstr, SZ_FNAME, TY_CHAR) + + # Open a string on a file. + fd = stropen (Memc[buf], SZ_LINE, WRITE_ONLY) + + # Get the data pointer. + img = C_DATA(cp) + + # Get the coordinate transform descriptor. + co = IMG_CO(img) + radecsys = sk_stati (co, S_RADECSYS) + ctype = sk_stati (co, S_CTYPE) + wtype = sk_stati (co, S_WTYPE) + + mw = IMG_MW(img) + if (mw != NULL) { + # Now get the mwcs Rterm (CRPIXi), Wterm (CRVALi), and CD matrix. + ndim = mw_stati (mw, MW_NPHYSDIM) + call wcs_gfterm (mw, r, w, cd, ndim) + crpix1 = r[1] + crpix2 = r[2] + crval1 = w[1] + crval2 = w[2] + + xscale = sqrt (cd[1,1]**2 + cd[2,1]**2) * 3600.0d0 + yscale = sqrt (cd[1,2]**2 + cd[2,2]**2) * 3600.0d0 + xrot = 0.0 + yrot = 0.0 + if (!fp_equald (cd[1,1], 0.0d0)) + xrot = DRADTODEG(atan ( cd[2,1] / cd[1,1])) + if (!fp_equald (cd[2,2], 0.0d0)) + yrot = DRADTODEG(atan (-cd[1,2] / cd[2,2])) + } else { + ndim = 2 + xscale = 1.0 + yscale = 1.0 + xrot = 0.0 + yrot = 0.0 + } + + if (IMG_DEBUG) { + call printf("WCS Info:\n=========\n") + call printf("R term: %g %g\n"); call pargd(r[1]); call pargd(r[2]) + call printf("W term: %g %g\n"); call pargd(w[1]); call pargd(w[2]) + call printf(" cd: %g %g\n %g %g\n") + call pargd(cd[1,1]); call pargd(cd[1,2]) + call pargd(cd[2,1]); call pargd(cd[2,2]) + call printf(" scale: %g %g\n");call pargd(xscale);call pargd(yscale) + call printf(" rot: %g %g\n");call pargd(xrot);call pargd(yrot) + } + + IMG_SCALE(img) = (xscale + yscale) / 2.0d0 + #IMG_ROT(img) = (xrot + yrot) / 2.0d0 + IMG_ROT(img) = xrot + + + # Now format a WCS text panel such as + # + # Projection: TAN System: Equatorial FK5 + # Ra/Dec axes: 1/2 Dimensions: 512 x 512 + # + # Center Pos: RA: 13:29:52.856 Dec: +47:11:40.39 + # Reference Pos: RA: 13:29:52.856 Dec: +47:11:40.39 + # Ref pixel coord: X: 250.256 Y: 266.309 + # Plate Scale: 0.765194 Rot Angle: 1.02939 + # Equinox: J2000.000 Epoch: J1987.25775240 + # MJD: 46890.39406 + + # Get some preliminary values. + if (idxstr (radecsys, Memc[radecstr], SZ_FNAME, EQTYPE_LIST) <= 0) + call strcpy ("FK5", Memc[radecstr], SZ_FNAME) + call strupr (Memc[radecstr]) + + if (idxstr (wtype, Memc[proj], SZ_FNAME, WTYPE_LIST) <= 0) + call strcpy ("logical", Memc[proj], SZ_FNAME) + call strupr (Memc[proj]) + + call fprintf (fd, "wcsinfo {\n") + + call fprintf (fd, + " Projection: %-6s\t System: %s %s\n") + call pargstr (Memc[proj]) + switch (ctype) { + case CTYPE_EQUATORIAL: + call pargstr ("Equatorial") + call pargstr (Memc[radecstr]) + case CTYPE_ECLIPTIC: + call pargstr ("Ecliptic") + call pargstr ("") + case CTYPE_GALACTIC: + call pargstr ("Galactic") + call pargstr ("") + case CTYPE_SUPERGALACTIC: + call pargstr ("SuperGalactic") + call pargstr ("") + default: + call pargstr ("Linear") + call pargstr ("") + } + + call fprintf (fd, " Ra/Dec axes: %d/%d") + call pargi (sk_stati (co, S_PLNGAX)) + call pargi (sk_stati (co, S_PLATAX)) + call fprintf (fd, " Dimensions: %d x %d\n\n") + call pargi (IM_LEN(im,1)) + call pargi (IM_LEN(im,2)) + + call fprintf (fd, + " Center Pos: %3s: %-12H %3s: %-12h\n") + if (ctype == CTYPE_EQUATORIAL) + call pargstr (" RA") + else + call pargstr ("Lon") + call pargd (cval1) + if (ctype == CTYPE_EQUATORIAL) + call pargstr ("Dec") + else + call pargstr ("Lat") + call pargd (cval2) + + call fprintf (fd, + " Reference Pos: %3s: %-12H %3s: %-12h\n") + if (ctype == CTYPE_EQUATORIAL) + call pargstr (" RA") + else + call pargstr ("Lon") + call pargd (crval1) + if (ctype == CTYPE_EQUATORIAL) + call pargstr ("Dec") + else + call pargstr ("Lat") + call pargd (crval2) + + call fprintf (fd, + " Reference Pixel: X: %-9.4f Y: %-9.4f\n") + call pargd (crpix1) + call pargd (crpix2) + + call fprintf (fd, + " Plate Scale: %-8f Rot Angle: %-8f\n") + call pargr (IMG_SCALE(img)) + call pargr (IMG_ROT(img)) + + call fprintf (fd, + " Equinox: %s%8f Epoch: %s%.6f\n") + switch (radecsys) { + case EQTYPE_FK5, EQTYPE_ICRS: + call pargstr ("J") ; call pargd (sk_statd(co,S_EQUINOX)) + call pargstr ("J") ; call pargd (sl_epj(sk_statd(co,S_EPOCH))) + default: + if (IMG_LINEAR(img) == YES) { + call pargstr (" ") ; call pargd (INDEFD) + call pargstr (" ") ; call pargd (INDEFD) + } else { + call pargstr ("B") + call pargd (sk_statd(co,S_EQUINOX)) + call pargstr ("B") + call pargd (sl_epb(sk_statd(co,S_EPOCH))) + } + } + + call fprintf (fd, " MJD: %.6f\n") + call pargd (sk_statd(co,S_EPOCH)) + + call fprintf (fd, "}\n \n \n") + + # Close the formatted string and send the message. + call close (fd) + call wcspix_message (Memc[buf]) + + call sfree (sp) +end + + +# IMG_SEND_PIXTAB -- Send a 'pixtab' message. Format of the message is +# +# pixtab { +# { {pix} {pix} ... } # pixel table values +# { {x1} {x2} ... } # column label values +# { {y1} {y2} ... } # row label values +# { } # pixtab statistics +# } +# + +procedure img_send_pixtab (pixtab, size, x1, x2, y1, y2) + +real pixtab[ARB] #i pixtab array +int size #i pixtab size +int x1, x2, y1, y2 #i raster boundaries + +pointer sp, buf, el +int i, j, npix +real pix, sum, sum2, mean, var, stdev, x, y + +define SZ_PIXTAB (6*SZ_LINE) + +begin + call smark (sp) + call salloc (buf, SZ_PIXTAB, TY_CHAR) + call salloc (el, SZ_FNAME, TY_CHAR) + + # Begin the pixtab message. + call strcpy ("pixtab {\n{\ntable {\n", Memc[buf], SZ_PIXTAB) + + # Format the pixels into a table for presentation. Do the y-flip + # here so the pixels are in order for the List widget in the GUI. + # Accumulate the pixel statistics so we don't have to do it in the + # GUI where it's slower. + + sum = 0.0 + sum2 = 0.0 + npix = size * size + + for (i=size - 1; i >= 0; i=i-1) { + for (j=1; j <= size; j=j+1) { + pix = pixtab[(i * size) + j] + sum = sum + pix + sum2 = sum2 + (pix * pix) + + call sprintf (Memc[el], SZ_FNAME, " {%10.1f}") + call pargr (pix) + + call strcat (Memc[el], Memc[buf], SZ_PIXTAB) + } + call strcat ("\n", Memc[buf], SZ_PIXTAB) + } + call strcat ("}\n}\n", Memc[buf], SZ_PIXTAB) + + + # Do the row and column label parts of the message. + call strcat ("{", Memc[buf], SZ_PIXTAB) + for (x = x1; x <= x2; x = x + 1.) { + call sprintf (Memc[el], SZ_FNAME, " {%10.1f}") + call pargr (x) + call strcat (Memc[el], Memc[buf], SZ_PIXTAB) + } + call strcat ("}\n", Memc[buf], SZ_PIXTAB) + + call strcat ("{", Memc[buf], SZ_PIXTAB) + for (y = y2; y >= y1; y = y - 1.) { + call sprintf (Memc[el], SZ_FNAME, " {%10.1f}") + call pargr (y) + call strcat (Memc[el], Memc[buf], SZ_PIXTAB) + } + call strcat ("}\n", Memc[buf], SZ_PIXTAB) + + + # Compute the statistics for the raster. + mean = sum / real(npix) + var = (sum2 - sum * mean) / real(npix - 1) + if (var <= 0) + stdev = 0.0 + else + stdev = sqrt (var) + + call sprintf (Memc[el], SZ_FNAME, " { %10.2f %10.4f }\n") + call pargr (mean) + call pargr (stdev) + call strcat (Memc[el], Memc[buf], SZ_PIXTAB) + + + # Close the message. + call strcat ("}", Memc[buf], SZ_PIXTAB) + + if (IMG_DEBUG) { + call eprintf ("pixtab: %s\n");call pargstr(Memc[buf]) + } + + # Send the formatted message. + call wcspix_message (Memc[buf]) + + call sfree (sp) +end + + +# IMG_AMP_WCS -- Create a WCS transformation for the amplifier coordinates. + +pointer procedure img_amp_wcs (im, mw) + +pointer im #i image pointer +pointer mw #i MWCS descriptor + +pointer ct +double r[IM_MAXDIM], w[IM_MAXDIM], cd[IM_MAXDIM,IM_MAXDIM] + +double imgetd() +pointer mw_sctran() + +begin + r[1] = 0.0d0 + r[2] = 0.0d0 + w[1] = imgetd (im, "ATV1") + w[2] = imgetd (im, "ATV2") + cd[1,1] = imgetd (im, "ATM1_1") + cd[1,2] = 0.0d0 + cd[2,1] = 0.0d0 + cd[2,2] = imgetd (im, "ATM2_2") + + # Create a new named system. + call mw_newsystem (mw, "amplifier", 2) + + # Set the new Wterm for the system. + call mw_swtermd (mw, r, w, cd, 2) + + # Set up the transform. + ct = mw_sctran (mw, "logical", "amplifier", 03B) + + # Reset the default world system. + call mw_sdefwcs (mw) + + return (ct) +end + + +# IMG_DET_WCS -- Create a WCS transformation for the detector coordinates. + +pointer procedure img_det_wcs (im, mw) + +pointer im #i image pointer +pointer mw #i MWCS descriptor + +pointer ct +double r[IM_MAXDIM], w[IM_MAXDIM], cd[IM_MAXDIM,IM_MAXDIM] + +double imgetd() +pointer mw_sctran() + +begin + r[1] = 0.0d0 + r[2] = 0.0d0 + w[1] = imgetd (im, "DTV1") + w[2] = imgetd (im, "DTV2") + cd[1,1] = imgetd (im, "DTM1_1") + cd[1,2] = 0.0d0 + cd[2,1] = 0.0d0 + cd[2,2] = imgetd (im, "DTM2_2") + + # Create a new named system. + call mw_newsystem (mw, "detector", 2) + + # Set the new Wterm for the system. + call mw_swtermd (mw, r, w, cd, 2) + + # Set up the transform. + ct = mw_sctran (mw, "logical", "detector", 03B) + + # Reset the default world system. + call mw_sdefwcs (mw) + + return (ct) +end + + +# IMG_COORD_LABELS -- Get the WCS name, coord labels and format strings for +# the specified object. + +procedure img_coord_labels (cp, line, wcsname, xunits, yunits) + +pointer cp #i cache pointer +pointer line #i WCS output line +char wcsname[ARB] #o WCS name string +char xunits[ARB], yunits[ARB] #o WCS coord labels + +pointer img, co, wp +pointer sp, proj, radecstr + +int strcmp(), sk_stati(), idxstr() + +begin + img = C_DATA(cp) # initialize ptrs + co = IMG_CO(img) + wp = IMG_WP(img) + + if (SYSTEMS(wp,line) == SYS_WORLD) { + switch (sk_stati(co,S_CTYPE)) { + case CTYPE_EQUATORIAL: + call strcpy (" RA", xunits, LEN_WCSNAME) + call strcpy (" Dec", yunits, LEN_WCSNAME) + case CTYPE_ECLIPTIC: + call strcpy ("ELon", xunits, LEN_WCSNAME) + call strcpy ("ELat", yunits, LEN_WCSNAME) + case CTYPE_GALACTIC: + call strcpy ("GLon", xunits, LEN_WCSNAME) + call strcpy ("GLat", yunits, LEN_WCSNAME) + case CTYPE_SUPERGALACTIC: + call strcpy ("SLon", xunits, LEN_WCSNAME) + call strcpy ("SLat", yunits, LEN_WCSNAME) + } + } else if (SYSTEMS(wp,line) == SYS_SKY) { + call strcpy (WCSNAME(wp,line), wcsname, LEN_WCSNAME) + call strlwr (wcsname) + if (strcmp (wcsname,"ecliptic") == 0) { + call strcpy ("ELon", xunits, LEN_WCSNAME) + call strcpy ("ELat", yunits, LEN_WCSNAME) + } else if (strcmp (wcsname,"galactic") == 0) { + call strcpy ("GLon", xunits, LEN_WCSNAME) + call strcpy ("GLat", yunits, LEN_WCSNAME) + } else if (strcmp (wcsname,"supergalactic") == 0) { + call strcpy ("SLon", xunits, LEN_WCSNAME) + call strcpy ("SLat", yunits, LEN_WCSNAME) + } else { + call strcpy (" RA", xunits, LEN_WCSNAME) + call strcpy (" Dec", yunits, LEN_WCSNAME) + } + } else { + call strcpy ("X", xunits, LEN_WCSNAME) + call strcpy ("Y", yunits, LEN_WCSNAME) + } + + + # Now get the format strings. For systems other than the image + # default just use the WCS string as the name, otherwise format a + # string giving more information about the system. + if (SYSTEMS(wp,line) != SYS_WORLD) + call strcpy (WCSNAME(wp,line), wcsname, LEN_WCSNAME) + + else { + call smark (sp) + call salloc (radecstr, SZ_FNAME, TY_CHAR) + call salloc (proj, SZ_FNAME, TY_CHAR) + + call sprintf (wcsname, LEN_WCSNAME, "%s-%s-%s") + + switch (sk_stati(co,S_CTYPE)) { + case CTYPE_EQUATORIAL: call pargstr ("EQ") + case CTYPE_ECLIPTIC: call pargstr ("ECL") + case CTYPE_GALACTIC: call pargstr ("GAL") + case CTYPE_SUPERGALACTIC: call pargstr ("SGAL") + default: call pargstr ("UNKN") + } + + if (sk_stati(co,S_CTYPE) == CTYPE_EQUATORIAL) { + if (idxstr(sk_stati(co,S_RADECSYS), Memc[radecstr], + SZ_FNAME, EQTYPE_LIST) <= 0) + call strcpy ("FK5", Memc[radecstr], SZ_FNAME) + call strupr (Memc[radecstr]) + call pargstr (Memc[radecstr]) + } else { + if (sk_stati(co,S_CTYPE) == CTYPE_SUPERGALACTIC) + call pargstr ("-") + else + call pargstr ("--") + } + + if (idxstr(sk_stati(co,S_WTYPE), Memc[proj], SZ_FNAME, + WTYPE_LIST) <= 0) + call strcpy ("linear", Memc[proj], SZ_FNAME) + call strupr (Memc[proj]) + call pargstr (Memc[proj]) + + call sfree (sp) + } + + # Now fix up the WCS system name. + if (strcmp (wcsname, "fk4") == 0 || + strcmp (wcsname, "fk5") == 0 || + strcmp (wcsname, "icrs") == 0 || + strcmp (wcsname, "gappt") == 0 || + strcmp (wcsname, "fk4-no-e") == 0) { + call strupr (wcsname) + + } else if (IS_LOWER(wcsname[1])) + wcsname[1] = TO_UPPER(wcsname[1]) +end + + +# IMG_COORD_FMT -- Format the coordinate strings. + +procedure img_coord_fmt (cp, line, xval, yval, xc, yc) + +pointer cp #i object cache pointer +int line #i output line number +double xval, yval #i input coords +char xc[ARB], yc[ARB] #o formatted coord strings + +pointer img, co, wp +char xfmt[LEN_WCSNAME], yfmt[LEN_WCSNAME] +int ctype + +int sk_stati() +bool streq() + +begin + img = C_DATA(cp) # initialize ptrs + co = IMG_CO(img) + wp = IMG_WP(img) + + + ctype = sk_stati (co, S_CTYPE) + + # Convert coords to the requested format. + if (FORMATS(wp,line) == FMT_DEFAULT) { + if (IMG_MW(img) == NULL) { + call strcpy ("%10.2f", xfmt, LEN_WCSNAME) + call strcpy ("%10.2f", yfmt, LEN_WCSNAME) + } else { + if (SYSTEMS(wp,line) == SYS_WORLD || + SYSTEMS(wp,line) == SYS_SKY) { + + if (streq(WCSNAME(wp,line),"ecliptic") || + streq(WCSNAME(wp,line),"galactic") || + streq(WCSNAME(wp,line),"supergalactic")) + call strcpy ("%h", xfmt, LEN_WCSNAME) + else { + if (sk_stati(co, S_CTYPE) == CTYPE_EQUATORIAL) + call strcpy ("%.2H", xfmt, LEN_WCSNAME) + else + call strcpy ("%.2h", xfmt, LEN_WCSNAME) + } + call strcpy ("%.1h", yfmt, LEN_WCSNAME) + } else { + call strcpy ("%10.2f", xfmt, LEN_WCSNAME) + call strcpy ("%10.2f", yfmt, LEN_WCSNAME) + } + } + + } else if (FORMATS(wp,line) == FMT_HMS) { + if (sk_stati(co, S_CTYPE) == CTYPE_EQUATORIAL) + call strcpy ("%.2H", xfmt, LEN_WCSNAME) + else + call strcpy ("%.1h", xfmt, LEN_WCSNAME) + call strcpy ("%h", yfmt, LEN_WCSNAME) + } else { + call strcpy ("%10.2f", xfmt, LEN_WCSNAME) + call strcpy ("%10.2f", yfmt, LEN_WCSNAME) + } + + # Convert the value to the requested format + call sprintf (xc, LEN_WCSNAME, xfmt) + if (FORMATS(wp,line) != FMT_RAD) + call pargd (xval) + else + call pargd (DEGTORAD(xval)) + + call sprintf (yc, LEN_WCSNAME, yfmt) + if (FORMATS(wp,line) != FMT_RAD) + call pargd (yval) + else + call pargd (DEGTORAD(yval)) +end + + +# IMG_GET_COORD -- Given an x,y position in the image return the coordinate in +# the given system. + +procedure img_get_coord (img, x, y, system, wcsname, wx, wy) + +pointer img #i IMG struct pointer +double x, y #i input image position +int system #i coordinate system requested +char wcsname[ARB] #i desired WCS name +double wx, wy #o output coordinates + +double ox, oy, tmp +real epoch +pointer im, co, nco +char buf[SZ_LINE] +int stat + +real imgetr() +int imaccf(), sk_stati(), sk_decwstr() +bool streq() + +errchk imgetr + +begin + im = IMG_IM(img) + co = IMG_CO(img) + + wx = x # fallback values + wy = y + + switch (system) { + case SYS_NONE: + wx = x + wy = y + case SYS_DISPLAY: + call img_ltov (im, x, y, wx, wy) + #wx = x + #wy = y + case SYS_PHYSICAL: + if (IMG_CTP(img) != NULL) + call mw_c2trand (IMG_CTP(img), x, y, wx, wy) + case SYS_WORLD: + if (IMG_CTW(img) != NULL) { + call mw_c2trand (IMG_CTW(img), x, y, wx, wy) + + # Check for transposed image. + if (sk_stati(co,S_PLATAX) < sk_stati(co,S_PLNGAX)) { + tmp = wx + wx = wy + wy = tmp + } + } + case SYS_AMP: + if (IMG_CTA(img) != NULL) + call mw_c2trand (IMG_CTA(img), x, y, wx, wy) + case SYS_CCD: + if (IMG_CTD(img) != NULL) + call mw_c2trand (IMG_CTD(img), x, y, wx, wy) + case SYS_DETECTOR: + if (IMG_CTD(img) != NULL) + call mw_c2trand (IMG_CTD(img), x, y, wx, wy) + case SYS_SKY: + # Note Ecliptic/GAPPT coords need an epoch value. + if (imaccf (im, "EPOCH") == YES) { + epoch = imgetr (im, "EPOCH") + if (epoch == 0.0 || IS_INDEFR(epoch)) + epoch = 1950.0 + } else + epoch = 1950.0 + + if (streq (wcsname, "ecliptic") || streq (wcsname, "gappt")) { + call sprintf (buf, SZ_LINE, "%s %.1f") + if (streq (wcsname, "gappt")) + call pargstr ("apparent") + else + call pargstr (wcsname) + call pargr (epoch) + } else { + call sprintf (buf, SZ_LINE, "%s") + if (streq(wcsname,"gappt")) + call pargstr ("apparent") + else if (streq(wcsname,"fk4-no-e")) + call pargstr ("noefk4") + else + call pargstr (wcsname) + } + + stat = sk_decwstr (buf, nco, co) + if (stat != ERR) { + if (IMG_CTW(img) != NULL) + call mw_c2trand (IMG_CTW(img), x, y, ox, oy) + call sk_lltran (co, nco, DEGTORAD(ox), DEGTORAD(oy), + INDEFD, INDEFD, 0.0d0, 0.0d0, wx, wy) + if (sk_stati(co,S_PLATAX) < sk_stati(co,S_PLNGAX)) { + wx = RADTODEG(wy) # transposed image + wy = RADTODEG(wx) + } else { + wx = RADTODEG(wx) # regular image + wy = RADTODEG(wy) + } + } else { + wx = x + wy = y + } + case SYS_OTHER: + ; # TBD + + default: # default coords + wx = x + wy = y + } +end + + +# IMG_LTOV -- Convert coordinate from the logical coordinate system to the +# output coordinate system. + +procedure img_ltov (im, xin, yin, xout, yout) + +pointer im # the input image descriptor +double xin # the input x coordinate +double yin # the input y coordinate +double xout # the output x coordinate +double yout # the output y coordinate + +int index1, index2 + +begin + index1 = IM_VMAP(im,1) + index2 = IM_VMAP(im,2) + + xout = xin * IM_VSTEP(im,index1) + IM_VOFF(im,index1) + yout = yin * IM_VSTEP(im,index2) + IM_VOFF(im,index2) +end + + +# IMG_VTOL -- Convert coordinate from the tv coordinate system to the +# logical coordinate system. + +procedure img_vtol (im, xin, yin, xout, yout) + +pointer im # the input image descriptor +double xin # the input x coordinate +double yin # the input y coordinate +double xout # the output x coordinate +double yout # the output y coordinate + +int index1, index2 + +begin + index1 = IM_VMAP(im,1) + index2 = IM_VMAP(im,2) + + xout = (xin - IM_VOFF(im,index1)) / IM_VSTEP(im,index1) + yout = (yin - IM_VOFF(im,index2)) / IM_VSTEP(im,index2) +end diff --git a/vendor/x11iraf/ximtool/clients/wcspix/wcimage.x.bak b/vendor/x11iraf/ximtool/clients/wcspix/wcimage.x.bak new file mode 100644 index 00000000..87a12a39 --- /dev/null +++ b/vendor/x11iraf/ximtool/clients/wcspix/wcimage.x.bak @@ -0,0 +1,1515 @@ +# Copyright(c) 1986 Association of Universities for Research in Astronomy Inc. + +include +include +include +include +include +include +include +include "wcspix.h" + + +# Image class data. +define LEN_IMGDATA 15 +define IMG_WP Memi[$1 ] # wcspix back-pointer +define IMG_IM Memi[$1+1] # image pointer +define IMG_BPM Memi[$1+2] # bad pixel mask pointer +define IMG_MW Memi[$1+3] # image wcs pointer +define IMG_CO Memi[$1+4] # skywcs transform pointer +define IMG_CTW Memi[$1+5] # mwcs log->world transform ptr +define IMG_CTP Memi[$1+6] # mwcs log->phys transform ptr +define IMG_CTA Memi[$1+7] # mwcs log->amplifier transform +define IMG_CTD Memi[$1+8] # mwcs log->detector transform +define IMG_ROT Memr[$1+9] # rotation angle +define IMG_SCALE Memr[$1+10] # plate scale +define IMG_LINEAR Memi[$1+11] # linear coords + + +define IMG_DEBUG FALSE + + +# IMG_INIT -- Initialize the object structure. + +procedure img_init (cp, wp) + +pointer cp #i cache pointer +pointer wp #i WCSPIX structure + +pointer img # data pointer + +begin + if (IMG_DEBUG) call printf ("img_init: \n") + + # Allocate the image data structure if not previously allocated. + if (C_DATA(cp) == NULL) { + iferr (call calloc (C_DATA(cp), LEN_IMGDATA, TY_STRUCT)) + return + } + + img = C_DATA(cp) + IMG_WP(img) = wp + IMG_IM(img) = NULL + IMG_BPM(img) = NULL + IMG_MW(img) = NULL + IMG_CO(img) = NULL + IMG_CTW(img) = NULL + IMG_CTP(img) = NULL + IMG_CTA(img) = NULL + IMG_CTD(img) = NULL + IMG_ROT(img) = 0.0 + IMG_SCALE(img) = 0.0 + IMG_LINEAR(img) = YES +end + + +# IMG_CACHE -- Cache an image in the object cache. + +procedure img_cache (cp, objid, regid, ref) + +pointer cp #i cache pointer +int objid #i object id +int regid #i region id +char ref[ARB] #i object reference + +pointer img, im, wp, co +int stat, i1, i2 +char alert[SZ_LINE] + +pointer immap(), ds_pmmap(), mw_sctran() +pointer img_amp_wcs(), img_det_wcs() +int imaccf(), sk_decim() + +errchk immap, ds_pmmap, mw_sctran, sk_decim, sk_setd + +begin + if (IMG_DEBUG) call printf ("img_cache: \n") + + # Now map the image and WCS. + img = C_DATA(cp) + wp = IMG_WP(img) + + iferr (IMG_IM(img) = immap (ref, READ_ONLY, 0)) { + # Send alert to the GUI. + call sprintf (alert, SZ_FNAME, "Unable to cache\n%s") + call pargstr (ref) + call ism_alert (alert, "", "") + return + } + im = IMG_IM(img) + + IMG_CO(img) = NULL + IMG_CTW(img) = NULL + IMG_CTP(img) = NULL + IMG_CTA(img) = NULL + IMG_CTD(img) = NULL + iferr { + stat = sk_decim (IMG_IM(img), "world", IMG_MW(img), IMG_CO(img)) + if (IMG_DEBUG) { + call eprintf ("img_cache - decim: stat=%d mw=%d co=%d \n") + call pargi(stat);call pargi(IMG_MW(img)) + call pargi(IMG_CO(img)); + } + if (stat == ERR || IMG_MW(img) == NULL) { + IMG_LINEAR(img) = YES + + co = IMG_CO(img) + i1 = IM_VMAP(im,1) + i2 = IM_VMAP(im,2) + call sk_setd (co, S_VXOFF, double(IM_VOFF(im,i1))) + call sk_setd (co, S_VYOFF, double(IM_VOFF(im,i2))) + call sk_setd (co, S_VXSTEP, double(IM_VSTEP(im,i1))) + call sk_setd (co, S_VYSTEP, double(IM_VSTEP(im,i2))) + + IMG_MW(img) = NULL + IMG_LINEAR(img) = YES + } + + if (IMG_MW(img) != NULL) { + IMG_CTW(img) = mw_sctran (IMG_MW(img), "logical", "world", 03B) + IMG_CTP(img) = mw_sctran (IMG_MW(img), "logical", "physical", + 03B) + + # Get the amplifier transformation values if present. + if (imaccf(im,"ATM1_1") == YES && + imaccf(im,"ATM2_2") == YES && + imaccf(im,"ATV1") == YES && + imaccf(im,"ATV2") == YES) + IMG_CTA(img) = img_amp_wcs (im, IMG_MW(img)) + + if (imaccf(im,"DTM1_1") == YES && + imaccf(im,"DTM2_2") == YES && + imaccf(im,"DTV1") == YES && + imaccf(im,"DTV2") == YES) + IMG_CTD(img) = img_det_wcs (im, IMG_MW(img)) + } + + } then { + # Send alert to the GUI. + call sprintf (alert, SZ_FNAME, "Unable to decode image WCS\n%s") + call pargstr (ref) + call ism_alert (alert, "", "") + IMG_LINEAR(img) = YES + } + + + # See if we can find a bad pixel mask. + IMG_BPM(img) = NULL + if (WP_BPM(wp) == YES) { + iferr (IMG_BPM(img) = ds_pmmap ("BPM", IMG_IM(img))) + IMG_BPM(img) = NULL + } + + C_OBJID(cp) = objid + C_REGID(cp) = regid + C_NREF(cp) = C_NREF(cp) + 1 + call strcpy (ref, C_REF(cp), 128) +end + + +# IMG_UNCACHE -- Uncache an image in the object cache. + +procedure img_uncache (cp, id) + +pointer cp #i cache pointer +int id #i image id + +pointer img + +begin + if (IMG_DEBUG) call printf ("img_uncache: \n") + + C_OBJID(cp) = NULL + C_NREF(cp) = 0 + call strcpy ("", C_REF(cp), SZ_FNAME) + + img = C_DATA(cp) + if (IMG_MW(img) != NULL) + call mw_close (IMG_MW(img)) + if (IMG_BPM(img) != NULL) + call imunmap (IMG_BPM(img)) + if (IMG_IM(img) != NULL) + call imunmap (IMG_IM(img)) + + IMG_IM(img) = NULL + IMG_BPM(img) = NULL + IMG_MW(img) = NULL + IMG_CTW(img) = NULL + IMG_CTP(img) = NULL + IMG_CTA(img) = NULL + IMG_CTD(img) = NULL + IMG_CO(img) = NULL + IMG_ROT(img) = 0.0 + IMG_SCALE(img) = 0.0 + IMG_LINEAR(img) = NO + + call mfree (C_DATA(cp), TY_STRUCT) + C_DATA(cp) = NULL +end + + +# IMG_WCSTRAN -- Translate object source (x,y) coordinates to the +# desired output WCSs. Message is returned as something like: +# +# set value { +# { object } { region } +# { pixval [] } +# { bpm } +# { coord [ ] } +# { coord [ ] } +# : +# } + + +procedure img_wcstran (cp, id, x, y) + +pointer cp #i cache pointer +int id #i image id +real x, y #i source coords + +pointer img, im, wp, co +double dx, dy, wx, wy +real rx, ry, pixval +int i, bpm + +# Use static storage to avoid allocation overhead. +char buf[SZ_LINE] +char msg[SZ_LINE], wcs[LEN_WCSNAME], xc[LEN_WCSNAME], yc[LEN_WCSNAME] +char xunits[LEN_WCSNAME], yunits[LEN_WCSNAME] + +double sk_statd() + +begin + if (IMG_DEBUG) call printf ("img_wcstran: \n") + + img = C_DATA(cp) # initialize + co = IMG_CO(img) + wp = IMG_WP(img) + im = IMG_IM(img) + + # Get the translation to the image section. + dx = (double(x) - sk_statd(co,S_VXOFF)) / sk_statd(co,S_VXSTEP) + dy = (double(y) - sk_statd(co,S_VYOFF)) / sk_statd(co,S_VYSTEP) + rx = dx + ry = dy + + # Read the pixel data. + call img_get_data (cp, id, rx, ry, pixval, bpm) + + # Begin formatting the message. + call aclrc (msg, SZ_LINE) + call sprintf (msg, SZ_LINE, "wcstran { object %d } { region %d } ") + call pargi (C_OBJID(cp)) + call pargi (C_REGID(cp)) + + call sprintf (buf, SZ_LINE, "{ pixval %9.9g } { bpm %d }\n") + call pargr (pixval) + call pargi (bpm) + call strcat (buf, msg, SZ_LINE) + + # Now loop over the requested systems and generate a coordinate + # for each. + for (i=1; i <= MAX_WCSLINES; i=i+1) { + + # Get the coordinate value. + call img_get_coord (img, dx, dy, SYSTEMS(wp,i), WCSNAME(wp,i), + wx, wy) + + # Get the system name, labels, and formats strings for the WCS. + call img_coord_labels (cp, i, wcs, xunits, yunits) + + # Format the values as requested. + call img_coord_fmt (cp, i, wx, wy, xc, yc) + + # Format the coord buffer and append it to the message. + call sprintf (buf, SZ_LINE, + "{coord {%9s} {%12s} {%12s} {%4s} {%4s}}\n") + call pargstr (wcs) + call pargstr (xc) + call pargstr (yc) + call pargstr (xunits) + call pargstr (yunits) + call strcat (buf, msg, SZ_LINE) + } + + # Now send the completed message. + call wcspix_message (msg); +end + + +# IMG_WCSLIST -- List the WCSs available for the given image. + +procedure img_wcslist (cp, id) + +pointer cp #i cache pointer +int id #i image id + +pointer img, im, mw +char msg[SZ_LINE] + +begin + if (IMG_DEBUG) call printf ("img_wcslist: \n") + + img = C_DATA(cp) # initialize + mw = IMG_MW(img) + im = IMG_IM(img) + + call strcpy ("wcslist {None Display Logical World Physical line ", + msg, SZ_LINE) + + # See if we can do amplifier/detector coords by checking for ATM/ATV + # and DTM/DTV keywords. + + if (IMG_CTA(img) != NULL) + call strcat (" Amplifier ", msg, SZ_LINE) + if (IMG_CTD(img) != NULL) + call strcat (" Detector ", msg, SZ_LINE) + if (IMG_CTA(img) != NULL || IMG_CTD(img) != NULL) + call strcat (" CCD ", msg, SZ_LINE) + + # If we have a MWCS pointer list the sky projections. + if (mw != NULL) { + call strcat (" line ", msg, SZ_LINE) + call strcat (SKYPROJ, msg, SZ_LINE) + } + + # Close the message. + call strcat ("}", msg, SZ_LINE) + + call wcspix_message (msg) +end + + +# IMG_GET_DATA -- Get data from the image. + +procedure img_get_data (cp, id, x, y, pixval, bpm_pix) + +pointer cp #i cache pointer +int id #i image id +real x, y #i source coords +real pixval #o central pixel value +int bpm_pix #o bad pixel mask value + +pointer img, wp, im, bpm, pix, sp, msg, buf +int nl, nc, ix, iy, s2 +int size, x1, x2, y1, y2 + +long clktime() +pointer imgs2r(), imgs2i(), ds_pmmap() +errchk ds_pmmap + +begin + + img = C_DATA(cp) + wp = IMG_WP(img) + im = IMG_IM(img) + bpm = IMG_BPM(img) + nc = IM_LEN(im,1) + nl = IM_LEN(im,2) +# size = WP_PTABSZ(wp) + size = min(min(nc,nl),WP_PTABSZ(wp)) + + if (IMG_DEBUG) { + call printf ("img_get_data: \n") + call eprintf ("\tx: %g y: %g nc: %d nl: %d\n") + call pargr(x); call pargr(y); call pargi(nc); call pargi(nl) + } + + # Sanity check on the cursor image position. + if (x < 0.0 || y < 0.0 || x > (nc+0.5) || y > (nl+0.5)) + return + + # Bounds checking. Rather than deal with out of bounds pixels we'll + # adjust the center pixel so we get the same size raster up to each + # boundary. + + ix = int (x + 0.5) ; iy = int (y + 0.5) + ix = min (ix, (nc-(size/2)-1)) ; iy = min (iy, (nl-(size/2)-1)) + ix = max (size/2+1, ix) ; iy = max (size/2+1, iy) + + # Compute the box offset given the center and size. + x1 = ix - size / 2 + 0.5 + x2 = ix + size / 2 + 0.5 + y1 = iy - size / 2 + 0.5 + y2 = iy + size / 2 + 0.5 + + if (IMG_DEBUG) { + call printf ("img_get_data: \n") + call eprintf ("\tix: %d iy: %g size: %d\n") + call pargi(ix); call pargi(iy); call pargi(size) + call eprintf ("\tx1: %d y1: %d x2: %d y2: %d\n") + call pargi(x1); call pargi(y1); + call pargi(x2); call pargi(y2); + } + + x1 = max (1, x1) + x2 = min (nc, x2) + y1 = max (1, y1) + y2 = min (nl, y2) + + if (IMG_DEBUG) { + call eprintf ("\tx1: %d y1: %d x2: %d y2: %d\n") + call pargi(x1); call pargi(y1); + call pargi(x2); call pargi(y2); + } + + # Get the image pixels + pix = imgs2r (im, int(x1), int(x2), int(y1), int(y2)) + + if (WP_BPM(wp) == YES) { + if (bpm != NULL) { + bpm_pix = Memi[imgs2i (bpm, ix, ix, iy, iy)] + } else { + # See if we can find a bad pixel mask. The option is enabled + # but we haven't mappend the mask yet. + + # Log the event. + call smark (sp) + call salloc (msg, SZ_LINE, TY_CHAR) + call salloc (buf, SZ_LINE, TY_CHAR) + call wp_cnvdate (clktime(0), Memc[buf], SZ_DATE) + call sprintf (Memc[msg], SZ_LINE, + "info { %s: WCSPIX BPM map objid=%3d %s}\n") + call pargstr (Memc[buf]) + call pargi (C_OBJID(cp)) + call pargstr (C_REF(cp)) + call ism_message ("ism_msg", Memc[msg]) + + iferr (IMG_BPM(img) = ds_pmmap ("BPM", im)) { + IMG_BPM(img) = NULL + bpm_pix = 0 + + # Send alert to the GUI. + call sprintf (Memc[buf], SZ_FNAME, + "Unable to map BPM image for\n%s") + call pargstr (C_REF(cp)) + call ism_alert (Memc[buf], "", "") + } else + bpm_pix = Memi[imgs2i (IMG_BPM(img), ix, ix, iy, iy)] + + call sfree (sp) + } + } else + bpm_pix = 0 + + # See if we're near an edge... + s2 = size / 2 + if (int(x)(nl-s2-1) || int(y)(nc-s2-1)) { + # Compute the image pixel associated with the requested coords. + ix = int (x + 0.5) + iy = int (y + 0.5) + pixval = Memr[imgs2r(im, ix, ix, iy, iy)] + } else { + pixval = Memr[pix + ((size/2)*size) + (size/2)] + } + + # Send the pixel table. + if (WP_PTABSZ(wp) > 1) + call img_send_pixtab (Memr[pix], WP_PTABSZ(wp), x1, x2, y1, y2) + + if (IMG_DEBUG) { + call printf ("img_get_data: pixval=%g\n") ; call pargr (pixval) + } +end + + +# IMG_OBJINFO -- Get header information from the image. + +procedure img_objinfo (cp, id, template) + +pointer cp #i cache pointer +int id #i image id +char template[ARB] #i keyword template + +pointer im, img + +define WCS_TEMPLATE "WCSDIM,CTYPE*,CRPIX*,CRVAL*,CD*,CROTA2,LTV*,LTM*,WSV*,WAT*,RA*,DEC*,EQUINOX,EPOCH,MJD*,DATE-OBS" + +begin + if (IMG_DEBUG) call printf ("img_objinfo: \n") + + # Send the full header (or keyword filtered header), only the WCS + # keywords, and a plain-text explanation of the WCS. + + img = C_DATA(cp) + im = IMG_IM(img) + + call img_send_header (im, "imghdr", template) + call img_send_header (im, "wcshdr", WCS_TEMPLATE) + call img_send_wcsinfo (im, cp) + call img_send_compass (im, cp) +end + + + +#============================================================================== + +# IMG_SEND_HEADER -- Send an image header to the named GUI object. Keywords +# are filtered according to a specified template + +procedure img_send_header (im, object, template) + +pointer im #i image descriptor +char object[ARB] #i object for the message +char template[ARB] #i keyword template + +pointer sp, hdr, lbuf, line, field, keyw, dict +pointer ip, lp, list +int nlines, in, out, i, hdr_size +bool keyw_filter + +int stropen(), getline(), stridx(), imgnfn(), strdic() +pointer imofnlu() +bool streq() +errchk stropen, getline, putci, putline, imgnfn, imofnlu, strdic + +define USER_AREA Memc[($1+IMU-1)*SZ_STRUCT + 1] +define SZ_KEYW 8 + +begin + hdr_size = (LEN_IMDES + IM_LENHDRMEM(im) - IMU) * SZ_STRUCT - 1 + hdr_size = hdr_size + SZ_LINE + + call smark (sp) + call salloc (hdr, hdr_size, TY_CHAR) + call salloc (dict, hdr_size, TY_CHAR) + call salloc (field, SZ_LINE, TY_CHAR) + call salloc (lbuf, SZ_LINE, TY_CHAR) + call salloc (line, SZ_LINE, TY_CHAR) + call salloc (keyw, SZ_KEYW, TY_CHAR) + + in = stropen (USER_AREA(im), hdr_size, READ_ONLY) + out = stropen (Memc[hdr], hdr_size, WRITE_ONLY) + call fprintf (out, "%s {") + call pargstr (object) + + # Build up a dictionary of header keywords based on the template. + keyw_filter = (!streq (template, "*")) + if (keyw_filter) { + list = imofnlu (im, template) + call strcpy ("|", Memc[dict], hdr_size) + while (imgnfn (list, Memc[field], SZ_FNAME) != EOF) { + call strcat (Memc[field], Memc[dict], hdr_size) + call strcat ("|", Memc[dict], hdr_size) + } + call imcfnl (list) + } + + + # Copy header records to the output, stripping any trailing + # whitespace and clipping at the right margin. We also filter + # against the keyword dictionary found above. + + nlines = 0 + while (getline (in, Memc[lbuf]) != EOF) { + + call aclrc (Memc[line], SZ_LINE) + + # Escape any brackets passed to the Tcl. + ip = lbuf + lp = line + while (Memc[ip] != EOS && Memc[ip] != '\n') { + if (stridx (Memc[ip], "[{") > 0) { + Memc[lp] = '\\' + lp = lp + 1 + } + Memc[lp] = Memc[ip] + ip = ip + 1 + lp = lp + 1 + } + Memc[lp] = '\n' + Memc[lp+1] = EOS + + # See whether the line matches a keyword we want to output. + if (keyw_filter) { + for (i=0; i < SZ_KEYW && !IS_WHITE(Memc[line+i]); i=i+1) + Memc[keyw+i] = Memc[line+i] + Memc[keyw+i] = '\0' + + # If not in the dictionary skip to the next line. + if (strdic (Memc[keyw], Memc[keyw], SZ_KEYW, Memc[dict]) == 0) + next + } + + call putci (out, ' ') + call putline (out, Memc[line]) + + # Send the header in small chunks so we don't overflow the + # message buffer. + nlines = nlines + 1 + if (mod(nlines,10) == 0) { + call fprintf (out, "}") + call close (out) + call wcspix_message (Memc[hdr]); + call aclrc (Memc[hdr], hdr_size) + out = stropen (Memc[hdr], hdr_size, WRITE_ONLY) + call fprintf (out, "%s {") + call pargstr (object) + } + } + call fprintf (out, "}") + + call close (in) + call close (out) + + # Send the final message. + call wcspix_message (Memc[hdr]) + + # Pad a few lines for the GUI + call sprintf (Memc[hdr], SZ_LINE, "%d { \n\n\n }") + call pargstr (object) + call wcspix_message (Memc[hdr]) + + call sfree (sp) +end + + +# IMG_SEND_COMPASS -- Send information about the image WCS in a plain-english +# string. + +procedure img_send_compass (im, cp) + +pointer im #i image descriptor +pointer cp #i cache element pointer + +pointer sp, buf, img, co, mw +double cx, cy, cx1, cy1, dx, dy, x1, y1 +double cosa, sina, angle +double r[IM_MAXDIM], w[IM_MAXDIM], cd[IM_MAXDIM,IM_MAXDIM] +int i, j, comp_x, comp_y +long axis[IM_MAXDIM], lv[IM_MAXDIM], pv1[IM_MAXDIM], pv2[IM_MAXDIM] +bool fp_equalr() + +real length, north[2], east[2] + +int mw_stati(), sk_stati() + +begin + call smark (sp) + call salloc (buf, SZ_LINE, TY_CHAR) + call aclrc (Memc[buf], SZ_LINE) + + # Get the data pointer. + img = C_DATA(cp) + co = IMG_CO(img) + + # Get world coords at the image corners. + if (IMG_CTW(img) != NULL) { + + if (fp_equalr(IMG_ROT(img),0.0)) + angle = -IMG_ROT(img) + else if (IMG_ROT(img) > 0.0) + angle = -IMG_ROT(img) + else + angle = IMG_ROT(img) + 360.0 + cosa = cos (DEGTORAD(angle)) + sina = sin (DEGTORAD(angle)) +call eprintf ("compass: angle = %g sina=%g cosa=%g\n") +call pargd(angle); call pargd(sina); call pargd(cosa) + + # Image center position + cx = IM_LEN(im,1) / 2.0d0 + cy = IM_LEN(im,2) / 2.0d0 + call mw_c2trand (IMG_CTW(img), cx, cy, cx1, cy1) + + # Extend a unit vector up from the center assuming it's North + # and rotate it by the wcs angle. + dx = cx + ( 10.0 * sina) + dy = cy + ( 10.0 * cosa) + call mw_c2trand (IMG_CTW(img), dx, dy, x1, y1) + + # Check new point Y value relative to the center position. + if (y1 >= cy1) + comp_y = 1 # North is up + else + comp_y = -1 # North is down +call eprintf ("compass: y1=%g cy1=%g \n");call pargd(y1);call pargd(cy1) + + # Extend a unit vector left from the center assuming it's East + # and rotate it by the wcs angle. + dx = cx + (-10.0 * cosa) + dy = cy + ( 10.0 * sina) + call mw_c2trand (IMG_CTW(img), dx, dy, x1, y1) + + # Check new point X value relative to the center position. + if (x1 >= cx1) + comp_x = 1 # East is left and we have a WCS + else + comp_x = -1 # East is right +call eprintf ("compass: x1=%g cx1=%g \n");call pargd(x1);call pargd(cx1) + +#------------------------------ +# New compass algorithm +#------------------------------ + + # Get the CD matrix for the image. + mw = IMG_MW(img) + call wcs_gfterm (mw, r, w, cd, mw_stati(mw, MW_NPHYSDIM)) + call img_cvectors (cd, 1.0, north, east) + + if (y1 >= 0.0) + comp_y = 1 # North is up + else + comp_y = -1 # North is down + + if (x1 >= 0.0) + comp_x = 1 # East is left + else + comp_x = -1 # East is right + + } else { + # Determine the logical to physical mapping by evaluating two + # points and determining the axis reduction if any. pv1 will be + # the offset and pv2-pv1 will be the scale. + + lv[1] = 0; lv[2] = 0; call imaplv (im, lv, pv1, 2) + lv[1] = 1; lv[2] = 1; call imaplv (im, lv, pv2, 2) + + i = 1 + axis[1] = 1; axis[2] = 2 + do j = 1, IM_MAXDIM { + if (pv1[j] != pv2[j]) { + axis[i] = j + i = i + 1 + } + } + comp_x = - (pv2[axis[1]] - pv1[axis[1]]) + comp_y = (pv2[axis[2]] - pv1[axis[2]]) + } + + call sprintf (Memc[buf], SZ_LINE, "compass %d %g %d %d %d %s\0") + call pargi (C_OBJID(cp)) + call pargr (IMG_ROT(img)) + call pargi (comp_x) + call pargi (comp_y) + if (sk_stati(co,S_PLATAX) < sk_stati(co,S_PLNGAX)) + call pargi (1) # transposed image + else + call pargi (0) + if (IMG_MW(img) != NULL) + call pargstr ("E N") + else + call pargstr ("X Y") +call eprintf ("msg: '%s'\n");call pargstr(Memc[buf]) + + call wcspix_message (Memc[buf]) + call sfree (sp) +end + + +# IMG_CVECTORS -- Get north and east vectors for the compass + +procedure img_cvectors (cd, length, north, east) + +double cd[2,2] #i CD matrix +real length #i length of vectors +real north[2] #o vector pointing north +real east[2] #o vector pointing east + +double d # determinant of CD matrix +double x, y # scratch for vector components +double l # length of a vector + +begin + d = cd[1,1] * cd[2,2] - cd[1,2] * cd[2,1] + if (d == 0.d0) + call error (1, "CD matrix is singular") + + # North. + x = -cd[1,2] / d + y = cd[1,1] / d + + # Normalize by the length and copy to output. + l = sqrt (x**2 + y**2) + north[1] = x * length / l + north[2] = y * length / l + + # East. + x = cd[2,2] / d + y = -cd[2,1] / d + l = sqrt (x**2 + y**2) + east[1] = x * length / l + east[2] = y * length / l + +call eprintf ("new: north (%g,%g) east (%g,%g)\n") +call pargr(north[1]);call pargr(north[2]) +call pargr(east[1]) ;call pargr(east[2]) +end + + + +# IMG_SEND_WCSINFO -- Send information about the image WCS in a plain-english +# string. + +procedure img_send_wcsinfo (im, cp) + +pointer im #i image descriptor +pointer cp #i cache element pointer + +pointer sp, co, img, mw +pointer buf, proj, radecstr +int fd, radecsys, ctype, wtype, ndim +double crpix1, crpix2, crval1, crval2, cval1, cval2 +double xscale, yscale, xrot, yrot +double r[IM_MAXDIM], w[IM_MAXDIM], cd[IM_MAXDIM,IM_MAXDIM], + +int idxstr(), sk_stati(), stropen(), mw_stati() +double sk_statd(), sl_epj(), sl_epb() +bool fp_equald() + +errchk stropen + +begin + call smark (sp) + call salloc (buf, SZ_LINE, TY_CHAR) + call salloc (proj, SZ_FNAME, TY_CHAR) + call salloc (radecstr, SZ_FNAME, TY_CHAR) + + # Open a string on a file. + fd = stropen (Memc[buf], SZ_LINE, WRITE_ONLY) + + # Get the data pointer. + img = C_DATA(cp) + + # Get the coordinate transform descriptor. + co = IMG_CO(img) + radecsys = sk_stati (co, S_RADECSYS) + ctype = sk_stati (co, S_CTYPE) + wtype = sk_stati (co, S_WTYPE) + + mw = IMG_MW(img) + if (mw != NULL) { + # Now get the mwcs Rterm (CRPIXi), Wterm (CRVALi), and CD matrix. + ndim = mw_stati (mw, MW_NPHYSDIM) + call wcs_gfterm (mw, r, w, cd, ndim) + crpix1 = r[1] + crpix2 = r[2] + crval1 = w[1] + crval2 = w[2] + + xscale = sqrt (cd[1,1]**2 + cd[2,1]**2) * 3600.0d0 + yscale = sqrt (cd[1,2]**2 + cd[2,2]**2) * 3600.0d0 + xrot = 0.0 + yrot = 0.0 + if (!fp_equald (cd[1,1], 0.0d0)) + xrot = DRADTODEG(atan ( cd[2,1] / cd[1,1])) + if (!fp_equald (cd[2,2], 0.0d0)) + yrot = DRADTODEG(atan (-cd[1,2] / cd[2,2])) + } else { + ndim = 2 + xscale = 1.0 + yscale = 1.0 + xrot = 0.0 + yrot = 0.0 + } + + if (IMG_DEBUG) { + call printf("WCS Info:\n=========\n") + call printf("R term: %g %g\n"); call pargd(r[1]); call pargd(r[2]) + call printf("W term: %g %g\n"); call pargd(w[1]); call pargd(w[2]) + call printf(" cd: %g %g\n %g %g\n") + call pargd(cd[1,1]); call pargd(cd[1,2]) + call pargd(cd[2,1]); call pargd(cd[2,2]) + call printf(" scale: %g %g\n");call pargd(xscale);call pargd(yscale) + call printf(" rot: %g %g\n");call pargd(xrot);call pargd(yrot) + } + + IMG_SCALE(img) = (xscale + yscale) / 2.0d0 + #IMG_ROT(img) = (xrot + yrot) / 2.0d0 + IMG_ROT(img) = xrot + + + # Now format a WCS text panel such as + # + # Projection: TAN System: Equatorial FK5 + # Ra/Dec axes: 1/2 Dimensions: 512 x 512 + # + # Center Pos: RA: 13:29:52.856 Dec: +47:11:40.39 + # Reference Pos: RA: 13:29:52.856 Dec: +47:11:40.39 + # Ref pixel coord: X: 250.256 Y: 266.309 + # Plate Scale: 0.765194 Rot Angle: 1.02939 + # Equinox: J2000.000 Epoch: J1987.25775240 + # MJD: 46890.39406 + + # Get some preliminary values. + if (idxstr (radecsys, Memc[radecstr], SZ_FNAME, EQTYPE_LIST) <= 0) + call strcpy ("FK5", Memc[radecstr], SZ_FNAME) + call strupr (Memc[radecstr]) + + if (idxstr (wtype, Memc[proj], SZ_FNAME, WTYPE_LIST) <= 0) + call strcpy ("logical", Memc[proj], SZ_FNAME) + call strupr (Memc[proj]) + + call fprintf (fd, "wcsinfo {\n") + + call fprintf (fd, + " Projection: %-6s\t System: %s %s\n") + call pargstr (Memc[proj]) + switch (ctype) { + case CTYPE_EQUATORIAL: + call pargstr ("Equatorial") + call pargstr (Memc[radecstr]) + case CTYPE_ECLIPTIC: + call pargstr ("Ecliptic") + call pargstr ("") + case CTYPE_GALACTIC: + call pargstr ("Galactic") + call pargstr ("") + case CTYPE_SUPERGALACTIC: + call pargstr ("SuperGalactic") + call pargstr ("") + default: + call pargstr ("Linear") + call pargstr ("") + } + + call fprintf (fd, " Ra/Dec axes: %d/%d") + call pargi (sk_stati (co, S_PLNGAX)) + call pargi (sk_stati (co, S_PLATAX)) + call fprintf (fd, " Dimensions: %d x %d\n\n") + call pargi (IM_LEN(im,1)) + call pargi (IM_LEN(im,2)) + + call fprintf (fd, + " Center Pos: %3s: %-12H %3s: %-12h\n") + if (ctype == CTYPE_EQUATORIAL) + call pargstr (" RA") + else + call pargstr ("Lon") + call pargd (cval1) + if (ctype == CTYPE_EQUATORIAL) + call pargstr ("Dec") + else + call pargstr ("Lat") + call pargd (cval2) + + call fprintf (fd, + " Reference Pos: %3s: %-12H %3s: %-12h\n") + if (ctype == CTYPE_EQUATORIAL) + call pargstr (" RA") + else + call pargstr ("Lon") + call pargd (crval1) + if (ctype == CTYPE_EQUATORIAL) + call pargstr ("Dec") + else + call pargstr ("Lat") + call pargd (crval2) + + call fprintf (fd, + " Reference Pixel: X: %-9.4f Y: %-9.4f\n") + call pargd (crpix1) + call pargd (crpix2) + + call fprintf (fd, + " Plate Scale: %-8f Rot Angle: %-8f\n") + call pargr (IMG_SCALE(img)) + call pargr (IMG_ROT(img)) + + call fprintf (fd, + " Equinox: %s%8f Epoch: %s%.6f\n") + switch (radecsys) { + case EQTYPE_FK5, EQTYPE_ICRS: + call pargstr ("J") ; call pargd (sk_statd(co,S_EQUINOX)) + call pargstr ("J") ; call pargd (sl_epj(sk_statd(co,S_EPOCH))) + default: + if (IMG_LINEAR(img) == YES) { + call pargstr (" ") ; call pargd (INDEFD) + call pargstr (" ") ; call pargd (INDEFD) + } else { + call pargstr ("B") + call pargd (sk_statd(co,S_EQUINOX)) + call pargstr ("B") + call pargd (sl_epb(sk_statd(co,S_EPOCH))) + } + } + + call fprintf (fd, " MJD: %.6f\n") + call pargd (sk_statd(co,S_EPOCH)) + + call fprintf (fd, "}\n \n \n") + + # Close the formatted string and send the message. + call close (fd) + call wcspix_message (Memc[buf]) + + call sfree (sp) +end + + +# IMG_SEND_PIXTAB -- Send a 'pixtab' message. Format of the message is +# +# pixtab { +# { {pix} {pix} ... } # pixel table values +# { {x1} {x2} ... } # column label values +# { {y1} {y2} ... } # row label values +# { } # pixtab statistics +# } +# + +procedure img_send_pixtab (pixtab, size, x1, x2, y1, y2) + +real pixtab[ARB] #i pixtab array +int size #i pixtab size +int x1, x2, y1, y2 #i raster boundaries + +pointer sp, buf, el +int i, j, npix +real pix, sum, sum2, mean, var, stdev, x, y + +define SZ_PIXTAB (6*SZ_LINE) + +begin + call smark (sp) + call salloc (buf, SZ_PIXTAB, TY_CHAR) + call salloc (el, SZ_FNAME, TY_CHAR) + + # Begin the pixtab message. + call strcpy ("pixtab {\n{\ntable {\n", Memc[buf], SZ_PIXTAB) + + # Format the pixels into a table for presentation. Do the y-flip + # here so the pixels are in order for the List widget in the GUI. + # Accumulate the pixel statistics so we don't have to do it in the + # GUI where it's slower. + + sum = 0.0 + sum2 = 0.0 + npix = size * size + + for (i=size - 1; i >= 0; i=i-1) { + for (j=1; j <= size; j=j+1) { + pix = pixtab[(i * size) + j] + sum = sum + pix + sum2 = sum2 + (pix * pix) + + call sprintf (Memc[el], SZ_FNAME, " {%10.1f}") + call pargr (pix) + + call strcat (Memc[el], Memc[buf], SZ_PIXTAB) + } + call strcat ("\n", Memc[buf], SZ_PIXTAB) + } + call strcat ("}\n}\n", Memc[buf], SZ_PIXTAB) + + + # Do the row and column label parts of the message. + call strcat ("{", Memc[buf], SZ_PIXTAB) + for (x = x1; x <= x2; x = x + 1.) { + call sprintf (Memc[el], SZ_FNAME, " {%10.1f}") + call pargr (x) + call strcat (Memc[el], Memc[buf], SZ_PIXTAB) + } + call strcat ("}\n", Memc[buf], SZ_PIXTAB) + + call strcat ("{", Memc[buf], SZ_PIXTAB) + for (y = y2; y >= y1; y = y - 1.) { + call sprintf (Memc[el], SZ_FNAME, " {%10.1f}") + call pargr (y) + call strcat (Memc[el], Memc[buf], SZ_PIXTAB) + } + call strcat ("}\n", Memc[buf], SZ_PIXTAB) + + + # Compute the statistics for the raster. + mean = sum / real(npix) + var = (sum2 - sum * mean) / real(npix - 1) + if (var <= 0) + stdev = 0.0 + else + stdev = sqrt (var) + + call sprintf (Memc[el], SZ_FNAME, " { %10.2f %10.4f }\n") + call pargr (mean) + call pargr (stdev) + call strcat (Memc[el], Memc[buf], SZ_PIXTAB) + + + # Close the message. + call strcat ("}", Memc[buf], SZ_PIXTAB) + + if (IMG_DEBUG) { + call eprintf ("pixtab: %s\n");call pargstr(Memc[buf]) + } + + # Send the formatted message. + call wcspix_message (Memc[buf]) + + call sfree (sp) +end + + +# IMG_AMP_WCS -- Create a WCS transformation for the amplifier coordinates. + +pointer procedure img_amp_wcs (im, mw) + +pointer im #i image pointer +pointer mw #i MWCS descriptor + +pointer ct +double r[IM_MAXDIM], w[IM_MAXDIM], cd[IM_MAXDIM,IM_MAXDIM] + +double imgetd() +pointer mw_sctran() + +begin + r[1] = 0.0d0 + r[2] = 0.0d0 + w[1] = imgetd (im, "ATV1") + w[2] = imgetd (im, "ATV2") + cd[1,1] = imgetd (im, "ATM1_1") + cd[1,2] = 0.0d0 + cd[2,1] = 0.0d0 + cd[2,2] = imgetd (im, "ATM2_2") + + # Create a new named system. + call mw_newsystem (mw, "amplifier", 2) + + # Set the new Wterm for the system. + call mw_swtermd (mw, r, w, cd, 2) + + # Set up the transform. + ct = mw_sctran (mw, "logical", "amplifier", 03B) + + # Reset the default world system. + call mw_sdefwcs (mw) + + return (ct) +end + + +# IMG_DET_WCS -- Create a WCS transformation for the detector coordinates. + +pointer procedure img_det_wcs (im, mw) + +pointer im #i image pointer +pointer mw #i MWCS descriptor + +pointer ct +double r[IM_MAXDIM], w[IM_MAXDIM], cd[IM_MAXDIM,IM_MAXDIM] + +double imgetd() +pointer mw_sctran() + +begin + r[1] = 0.0d0 + r[2] = 0.0d0 + w[1] = imgetd (im, "DTV1") + w[2] = imgetd (im, "DTV2") + cd[1,1] = imgetd (im, "DTM1_1") + cd[1,2] = 0.0d0 + cd[2,1] = 0.0d0 + cd[2,2] = imgetd (im, "DTM2_2") + + # Create a new named system. + call mw_newsystem (mw, "detector", 2) + + # Set the new Wterm for the system. + call mw_swtermd (mw, r, w, cd, 2) + + # Set up the transform. + ct = mw_sctran (mw, "logical", "detector", 03B) + + # Reset the default world system. + call mw_sdefwcs (mw) + + return (ct) +end + + +# IMG_COORD_LABELS -- Get the WCS name, coord labels and format strings for +# the specified object. + +procedure img_coord_labels (cp, line, wcsname, xunits, yunits) + +pointer cp #i cache pointer +pointer line #i WCS output line +char wcsname[ARB] #o WCS name string +char xunits[ARB], yunits[ARB] #o WCS coord labels + +pointer img, co, wp +pointer sp, proj, radecstr + +int strcmp(), sk_stati(), idxstr() + +begin + img = C_DATA(cp) # initialize ptrs + co = IMG_CO(img) + wp = IMG_WP(img) + + if (SYSTEMS(wp,line) == SYS_WORLD) { + switch (sk_stati(co,S_CTYPE)) { + case CTYPE_EQUATORIAL: + call strcpy (" RA", xunits, LEN_WCSNAME) + call strcpy (" Dec", yunits, LEN_WCSNAME) + case CTYPE_ECLIPTIC: + call strcpy ("ELon", xunits, LEN_WCSNAME) + call strcpy ("ELat", yunits, LEN_WCSNAME) + case CTYPE_GALACTIC: + call strcpy ("GLon", xunits, LEN_WCSNAME) + call strcpy ("GLat", yunits, LEN_WCSNAME) + case CTYPE_SUPERGALACTIC: + call strcpy ("SLon", xunits, LEN_WCSNAME) + call strcpy ("SLat", yunits, LEN_WCSNAME) + } + } else if (SYSTEMS(wp,line) == SYS_SKY) { + call strcpy (WCSNAME(wp,line), wcsname, LEN_WCSNAME) + call strlwr (wcsname) + if (strcmp (wcsname,"ecliptic") == 0) { + call strcpy ("ELon", xunits, LEN_WCSNAME) + call strcpy ("ELat", yunits, LEN_WCSNAME) + } else if (strcmp (wcsname,"galactic") == 0) { + call strcpy ("GLon", xunits, LEN_WCSNAME) + call strcpy ("GLat", yunits, LEN_WCSNAME) + } else if (strcmp (wcsname,"supergalactic") == 0) { + call strcpy ("SLon", xunits, LEN_WCSNAME) + call strcpy ("SLat", yunits, LEN_WCSNAME) + } else { + call strcpy (" RA", xunits, LEN_WCSNAME) + call strcpy (" Dec", yunits, LEN_WCSNAME) + } + } else { + call strcpy ("X", xunits, LEN_WCSNAME) + call strcpy ("Y", yunits, LEN_WCSNAME) + } + + + # Now get the format strings. For systems other than the image + # default just use the WCS string as the name, otherwise format a + # string giving more information about the system. + if (SYSTEMS(wp,line) != SYS_WORLD) + call strcpy (WCSNAME(wp,line), wcsname, LEN_WCSNAME) + + else { + call smark (sp) + call salloc (radecstr, SZ_FNAME, TY_CHAR) + call salloc (proj, SZ_FNAME, TY_CHAR) + + call sprintf (wcsname, LEN_WCSNAME, "%s-%s-%s") + + switch (sk_stati(co,S_CTYPE)) { + case CTYPE_EQUATORIAL: call pargstr ("EQ") + case CTYPE_ECLIPTIC: call pargstr ("ECL") + case CTYPE_GALACTIC: call pargstr ("GAL") + case CTYPE_SUPERGALACTIC: call pargstr ("SGAL") + default: call pargstr ("UNKN") + } + + if (sk_stati(co,S_CTYPE) == CTYPE_EQUATORIAL) { + if (idxstr(sk_stati(co,S_RADECSYS), Memc[radecstr], + SZ_FNAME, EQTYPE_LIST) <= 0) + call strcpy ("FK5", Memc[radecstr], SZ_FNAME) + call strupr (Memc[radecstr]) + call pargstr (Memc[radecstr]) + } else { + if (sk_stati(co,S_CTYPE) == CTYPE_SUPERGALACTIC) + call pargstr ("-") + else + call pargstr ("--") + } + + if (idxstr(sk_stati(co,S_WTYPE), Memc[proj], SZ_FNAME, + WTYPE_LIST) <= 0) + call strcpy ("linear", Memc[proj], SZ_FNAME) + call strupr (Memc[proj]) + call pargstr (Memc[proj]) + + call sfree (sp) + } + + # Now fix up the WCS system name. + if (strcmp (wcsname, "fk4") == 0 || + strcmp (wcsname, "fk5") == 0 || + strcmp (wcsname, "icrs") == 0 || + strcmp (wcsname, "gappt") == 0 || + strcmp (wcsname, "fk4-no-e") == 0) { + call strupr (wcsname) + + } else if (IS_LOWER(wcsname[1])) + wcsname[1] = TO_UPPER(wcsname[1]) +end + + +# IMG_COORD_FMT -- Format the coordinate strings. + +procedure img_coord_fmt (cp, line, xval, yval, xc, yc) + +pointer cp #i object cache pointer +int line #i output line number +double xval, yval #i input coords +char xc[ARB], yc[ARB] #o formatted coord strings + +pointer img, co, wp +char xfmt[LEN_WCSNAME], yfmt[LEN_WCSNAME] + +int sk_stati() +bool streq() + +begin + img = C_DATA(cp) # initialize ptrs + co = IMG_CO(img) + wp = IMG_WP(img) + + # Convert coords to the requested format. + if (FORMATS(wp,line) == FMT_DEFAULT) { + if (IMG_MW(img) == NULL) { + call strcpy ("%10.2f", xfmt, LEN_WCSNAME) + call strcpy ("%10.2f", yfmt, LEN_WCSNAME) + } else { + if (SYSTEMS(wp,line) == SYS_WORLD || + SYSTEMS(wp,line) == SYS_SKY) { + + if (streq(WCSNAME(wp,line),"ecliptic") || + streq(WCSNAME(wp,line),"galactic") || + streq(WCSNAME(wp,line),"supergalactic")) + call strcpy ("%h", xfmt, LEN_WCSNAME) + else + call strcpy ("%.2H", xfmt, LEN_WCSNAME) + call strcpy ("%.1h", yfmt, LEN_WCSNAME) + } else { + call strcpy ("%10.2f", xfmt, LEN_WCSNAME) + call strcpy ("%10.2f", yfmt, LEN_WCSNAME) + } + } + + } else if (FORMATS(wp,line) == FMT_HMS) { + if (sk_stati(co, S_CTYPE) == CTYPE_EQUATORIAL) + call strcpy ("%.2H", xfmt, LEN_WCSNAME) + else + call strcpy ("%.1h", xfmt, LEN_WCSNAME) + call strcpy ("%h", yfmt, LEN_WCSNAME) + } else { + call strcpy ("%10.2f", xfmt, LEN_WCSNAME) + call strcpy ("%10.2f", yfmt, LEN_WCSNAME) + } + + # Convert the value to the requested format + call sprintf (xc, LEN_WCSNAME, xfmt) + if (FORMATS(wp,line) != FMT_RAD) + call pargd (xval) + else + call pargd (DEGTORAD(xval)) + + call sprintf (yc, LEN_WCSNAME, yfmt) + if (FORMATS(wp,line) != FMT_RAD) + call pargd (yval) + else + call pargd (DEGTORAD(yval)) +end + + +# IMG_GET_COORD -- Given an x,y position in the image return the coordinate in +# the given system. + +procedure img_get_coord (img, x, y, system, wcsname, wx, wy) + +pointer img #i IMG struct pointer +double x, y #i input image position +int system #i coordinate system requested +char wcsname[ARB] #i desired WCS name +double wx, wy #o output coordinates + +double ox, oy, tmp +real epoch +pointer im, co, nco +char buf[SZ_LINE] +int stat + +real imgetr() +int imaccf(), sk_stati(), sk_decwstr() +bool streq() + +errchk imgetr + +begin + im = IMG_IM(img) + co = IMG_CO(img) + + wx = x # fallback values + wy = y + + switch (system) { + case SYS_NONE: + wx = x + wy = y + case SYS_DISPLAY: + call img_ltov (im, x, y, wx, wy) + #wx = x + #wy = y + case SYS_PHYSICAL: + if (IMG_CTP(img) != NULL) + call mw_c2trand (IMG_CTP(img), x, y, wx, wy) + case SYS_WORLD: + if (IMG_CTW(img) != NULL) { + call mw_c2trand (IMG_CTW(img), x, y, wx, wy) + + # Check for transposed image. + if (sk_stati(co,S_PLATAX) < sk_stati(co,S_PLNGAX)) { + tmp = wx + wx = wy + wy = tmp + } + } + case SYS_AMP: + if (IMG_CTA(img) != NULL) + call mw_c2trand (IMG_CTA(img), x, y, wx, wy) + case SYS_CCD: + if (IMG_CTD(img) != NULL) + call mw_c2trand (IMG_CTD(img), x, y, wx, wy) + case SYS_DETECTOR: + if (IMG_CTD(img) != NULL) + call mw_c2trand (IMG_CTD(img), x, y, wx, wy) + case SYS_SKY: + # Note Ecliptic/GAPPT coords need an epoch value. + if (imaccf (im, "EPOCH") == YES) { + epoch = imgetr (im, "EPOCH") + if (epoch == 0.0 || IS_INDEFR(epoch)) + epoch = 1950.0 + } else + epoch = 1950.0 + + if (streq (wcsname, "ecliptic") || streq (wcsname, "gappt")) { + call sprintf (buf, SZ_LINE, "%s %.1f") + if (streq (wcsname, "gappt")) + call pargstr ("apparent") + else + call pargstr (wcsname) + call pargr (epoch) + } else { + call sprintf (buf, SZ_LINE, "%s") + if (streq(wcsname,"gappt")) + call pargstr ("apparent") + else if (streq(wcsname,"fk4-no-e")) + call pargstr ("noefk4") + else + call pargstr (wcsname) + } + + stat = sk_decwstr (buf, nco, co) + if (stat != ERR) { + if (IMG_CTW(img) != NULL) + call mw_c2trand (IMG_CTW(img), x, y, ox, oy) + call sk_lltran (co, nco, DEGTORAD(ox), DEGTORAD(oy), + INDEFD, INDEFD, 0.0d0, 0.0d0, wx, wy) + if (sk_stati(co,S_PLATAX) < sk_stati(co,S_PLNGAX)) { + wx = RADTODEG(wy) # transposed image + wy = RADTODEG(wx) + } else { + wx = RADTODEG(wx) # regular image + wy = RADTODEG(wy) + } + } else { + wx = x + wy = y + } + case SYS_OTHER: + ; # TBD + + default: # default coords + wx = x + wy = y + } +end + + +# IMG_LTOV -- Convert coordinate from the logical coordinate system to the +# output coordinate system. + +procedure img_ltov (im, xin, yin, xout, yout) + +pointer im # the input image descriptor +double xin # the input x coordinate +double yin # the input y coordinate +double xout # the output x coordinate +double yout # the output y coordinate + +int index1, index2 + +begin + index1 = IM_VMAP(im,1) + index2 = IM_VMAP(im,2) + + xout = xin * IM_VSTEP(im,index1) + IM_VOFF(im,index1) + yout = yin * IM_VSTEP(im,index2) + IM_VOFF(im,index2) +end + + +# IMG_VTOL -- Convert coordinate from the tv coordinate system to the +# logical coordinate system. + +procedure img_vtol (im, xin, yin, xout, yout) + +pointer im # the input image descriptor +double xin # the input x coordinate +double yin # the input y coordinate +double xout # the output x coordinate +double yout # the output y coordinate + +int index1, index2 + +begin + index1 = IM_VMAP(im,1) + index2 = IM_VMAP(im,2) + + xout = (xin - IM_VOFF(im,index1)) / IM_VSTEP(im,index1) + yout = (yin - IM_VOFF(im,index2)) / IM_VSTEP(im,index2) +end diff --git a/vendor/x11iraf/ximtool/clients/wcspix/wcmef.x b/vendor/x11iraf/ximtool/clients/wcspix/wcmef.x new file mode 100644 index 00000000..050e5596 --- /dev/null +++ b/vendor/x11iraf/ximtool/clients/wcspix/wcmef.x @@ -0,0 +1,50 @@ +# Copyright(c) 1986 Association of Universities for Research in Astronomy Inc. + +include "wcspix.h" + + +# MEF Image class data. + + +# MEF_INIT -- Initialize the MEF Class module. + +procedure mef_init () +begin +end + + +# MEF_CACHE -- Cache an image in the object cache. + +procedure mef_cache () +begin +end + + +# MEF_UNCACHE -- Uncache an image in the object cache. + +procedure mef_uncache () +begin +end + + +# MEF_WCSTRAN -- Translate object source (x,y) coordinates to the +# desired output WCSs. + +procedure mef_wcstran () +begin +end + + +# MEF_WCSLIST -- List the WCSs available for the given image. + +procedure mef_wcslist () +begin +end + + +# MEF_OBJINFO -- Get header information from the image. + +procedure mef_objinfo () +begin +end + diff --git a/vendor/x11iraf/ximtool/clients/wcspix/wcmspec.x b/vendor/x11iraf/ximtool/clients/wcspix/wcmspec.x new file mode 100644 index 00000000..64198d69 --- /dev/null +++ b/vendor/x11iraf/ximtool/clients/wcspix/wcmspec.x @@ -0,0 +1,50 @@ +# Copyright(c) 1986 Association of Universities for Research in Astronomy Inc. + +include "wcspix.h" + + +# Multispec image class data. + + +# MSP_INIT -- Initialize the Image Class module. + +procedure msp_init () +begin +end + + +# MSP_CACHE -- Cache an image in the object cache. + +procedure msp_cache () +begin +end + + +# MSP_UNCACHE -- Uncache an image in the object cache. + +procedure msp_uncache () +begin +end + + +# MSP_WCSTRAN -- Translate object source (x,y) coordinates to the +# desired output WCSs. + +procedure msp_wcstran () +begin +end + + +# MSP_WCSLIST -- List the WCSs available for the given image. + +procedure msp_wcslist () +begin +end + + +# MSP_OBJINFO -- Get header information from the image. + +procedure msp_objinfo () +begin +end + diff --git a/vendor/x11iraf/ximtool/clients/wcspix/wcspix.h b/vendor/x11iraf/ximtool/clients/wcspix/wcspix.h new file mode 100644 index 00000000..0233ff21 --- /dev/null +++ b/vendor/x11iraf/ximtool/clients/wcspix/wcspix.h @@ -0,0 +1,112 @@ +# WCSPIX.H -- Include file for the WCS/Pixel value ISM task + +define WCSPIX_NAME "wcspix" +define WCSPIX_MODE "text" +define WCSPIX_CONNECT "unix:/tmp/.ISM%d" + +define WCSPIX_DBG FALSE + +# Main task data structures. +define MAX_WCSLINES 4 # max WCS output lines +define LEN_PIXTAB 81 # size of pixel table +define LEN_WCSNAME 32 # size of a WCS name + +define SZ_WCSPIX 7 +define WP_CPTR Memi[$1 ] # object cache pointer +define WP_PTABSZ Memi[$1+1] # pixel table size +define WP_BPM Memi[$1+2] # get BPM data +define WP_SYSTEMS Memi[$1+3] # WCS readout systems +define WP_WCS Memi[$1+4] # WCS system string +define WP_FORMATS Memi[$1+5] # WCS readout formats +define WP_DBGLEVEL Memi[$1+6] # debug level + +define OBJCACHE Memi[WP_CPTR($1)+$2] # object cache +define SYSTEMS Memi[WP_SYSTEMS($1)+$2-1] +define FORMATS Memi[WP_FORMATS($1)+$2-1] +define WCSNAME Memc[WP_WCS($1)+(LEN_WCSNAME*($2-1))] + + +# Element of an object cache. +define SZ_CACHE 256 # size of object cache +define SZ_CNODE 135 # size of a cache node +define SZ_OBJREF 128 # size of a object reference + +define C_OBJID Memi[$1] # object id +define C_REGID Memi[$1+1] # region id +define C_CLASS Memi[$1+2] # object class +define C_DATA Memi[$1+3] # object data ptr +define C_NREF Memi[$1+4] # no. times object referenced +define C_REF Memc[P2C($1+6)] # object reference file + + +# WCSPIX ISM task methods. +define WCSPIX_CMDS "|set|get|quit|initialize|cache|uncache\ + |wcstran|wcslist|objinfo|debug" + +define SET 1 +define GET 2 +define QUIT 3 +define INITIALIZE 4 +define CACHE 5 +define UNCACHE 6 +define WCSTRAN 7 +define WCSLIST 8 +define OBJINFO 9 +define DEBUG 10 + +# Parameters definable from the GUI +define SZ_PARAM 32 # size of a parameter string + +define WCSPIX_SYSTEMS "|none|display|logical|physical|world|sky\ + |amplifier|ccd|detector|other|" +define SYS_NONE 1 # no coords requested +define SYS_DISPLAY 2 # image display coords +define SYS_LOGICAL 3 # logical coords +define SYS_PHYSICAL 4 # physical coords +define SYS_WORLD 5 # world coords +define SYS_SKY 6 # sky coords +define SYS_AMP 7 # amplifier coords +define SYS_CCD 8 # CCD coords +define SYS_DETECTOR 9 # detector coords +define SYS_OTHER 10 # ??? coords + +define SKYPROJ "FK5 FK4 ICRS GAPPT FK4-NO-E Ecliptic Galactic Supergalactic" + + +define WCSPIX_PARAMS "|psize|bpm|wcs|format|" +define PAR_PSIZE 1 # pixel table size +define PAR_BPM 2 # get BPM data +define PAR_WCS 3 # WCS system +define PAR_FMT 4 # WCS format + +define WCSPIX_FMT "|default|hms|degrees|radians|" +define FMT_DEFAULT 1 # no formatting +define FMT_HMS 2 # covert to sexigesimal +define FMT_DEG 3 # output degrees +define FMT_RAD 4 # output radians + +define DEF_PTABSZ 0 # default pixtable size +define DEF_FMT FMT_DEFAULT # default output format +define DEF_SYSTEM SYS_LOGICAL # default coord system +define DEF_BPM_FLAG NO # default get-BPM-data flag + + +# Object class definitions. +define UNKNOWN_CLASS 1 # unknown class +define IMAGE_CLASS 2 # generic image class +define MEF_CLASS 3 # Mosaic MEF image class +define MULTISPEC_CLASS 4 # multispec data class + +# Class methods. +define LEN_CLASS 6 # length of class table +define MAX_CLASSES 16 # max supported classes +define SZ_CLNAME 32 # size of a class name + +define CL_INIT cl_table[1,$1] # class initializer +define CL_CACHE cl_table[2,$1] # cache the object +define CL_UNCACHE cl_table[3,$1] # uncache the object +define CL_WCSTRAN cl_table[4,$1] # WCS tranformations +define CL_WCSLIST cl_table[5,$1] # list available WCS +define CL_OBJINFO cl_table[6,$1] # get object header +define CL_NAME cl_names[1,$1] # class name + diff --git a/vendor/x11iraf/ximtool/clients/wcspix/wcunknown.x b/vendor/x11iraf/ximtool/clients/wcspix/wcunknown.x new file mode 100644 index 00000000..86e5e6d8 --- /dev/null +++ b/vendor/x11iraf/ximtool/clients/wcspix/wcunknown.x @@ -0,0 +1,185 @@ +# Copyright(c) 1986 Association of Universities for Research in Astronomy Inc. + +include +include "wcspix.h" + + +# Unknown class data. +define LEN_UNKDATA 1 +define UNK_WP Memi[$1 ] # wcspix back-pointer + + +# UNK_INIT -- Initialize the object structure. + +procedure unk_init (cp, wp) + +pointer cp #i cache pointer +pointer wp #i WCSPIX structure + +begin + # Allocate the image data structure if not previously allocated. + if (C_DATA(cp) == NULL) { + iferr (call calloc (C_DATA(cp), LEN_UNKDATA, TY_STRUCT)) + return + } + + UNK_WP(C_DATA(cp)) = wp +end + + +# UNK_CACHE -- Cache an image in the object cache. Since we don't know +# what this is we simply setup so that a query to the object id will still +# return a result of some kind rather than ignore it. In most cases this +# just means the input arguments are echoed back (e.g. coords), or default +# values such as a rotation value can be retrieved. + +procedure unk_cache (cp, objid, regid, ref) + +pointer cp #i cache pointer +int objid #i object id +int regid #i region id +char ref[ARB] #i object reference + +begin + C_OBJID(cp) = objid + C_REGID(cp) = regid + C_NREF(cp) = C_NREF(cp) + 1 + call strcpy (ref, C_REF(cp), 128) +end + + +# UNK_UNCACHE -- Uncache an unknown image in the object cache. + +procedure unk_uncache (cp, id) + +pointer cp #i cache pointer +int id #i image id + +begin + C_OBJID(cp) = NULL + C_NREF(cp) = 0 + call strcpy ("", C_REF(cp), SZ_FNAME) + + call mfree (C_DATA(cp), TY_STRUCT) + C_DATA(cp) = NULL +end + + +# UNK_WCSTRAN -- Translate object source (x,y) coordinates to the +# desired output WCSs. Message is returned as something like: +# +# set value { +# { object } { region } +# { pixval [] } +# { coord [ ] } +# { coord [ ] } +# } + + +procedure unk_wcstran (cp, id, x, y) + +pointer cp #i cache pointer +int id #i image id +real x, y #i source coords + +pointer wp +int i + +# Use static storage to avoid allocation overhead. +char buf[SZ_LINE], msg[SZ_LINE] + +begin + wp = UNK_WP(C_DATA(cp)) + + # Begin formatting the message. + call aclrc (msg, SZ_LINE) + call sprintf (msg, SZ_LINE, "wcstran { object %d } { region %d } ") + call pargi (C_OBJID(cp)) + call pargi (C_REGID(cp)) + call strcat ("{ pixval 0.0 } { bpm 0 } \n", msg, SZ_LINE) + + + # Now loop over the requested systems and generate a coordinate + # for each. + for (i=1; i <= MAX_WCSLINES; i=i+1) { + + # Format the coord buffer and append it to the message. + call sprintf (buf, SZ_LINE, "{coord {%9s} {%12g} {%12g} {X} {Y}}\n") + call pargstr ("UNKN") + call pargr (x) + call pargr (y) + call strcat (buf, msg, SZ_LINE) + } + + # Now send the completed message. + call wcspix_message (msg) +end + + +# UNK_WCSLIST -- List the WCSs available for the given image. + +procedure unk_wcslist (cp, id) + +pointer cp #i cache pointer +int id #i image id + +begin + #call wcspix_message ("wcslist {None Logical}") +end + + +# UNK_GETDATA -- Get data from the image. + +procedure unk_getdata (cp, id, x, y, pixval) + +pointer cp #i cache pointer +int id #i image id +real x, y #i source coords +real pixval #o central pixel value + +pointer wp, pix +int size, x1, x2, y1, y2 + +begin + wp = UNK_WP(C_DATA(cp)) + size = WP_PTABSZ(wp) + + # Compute the box offset given the center and size. + x1 = x - size / 2 + 0.5 + x2 = x + size / 2 + 0.5 + y1 = y - size / 2 + 0.5 + y2 = y + size / 2 + 0.5 + + pixval = 0.0 + + # Send the pixel table. + if (size > 1) { + call calloc (pix, size * size, TY_REAL) + call img_send_pixtab (Memr[pix], size, x1, x2, y1, y2) + call mfree (pix, TY_REAL) + } +end + + +# UNK_OBJINFO -- Get header information from the image. + +procedure unk_objinfo (cp, id, template) + +pointer cp #i cache pointer +int id #i image id +char template[ARB] #i keyword template + +pointer sp, buf + +begin + call smark (sp) + call salloc (buf, SZ_LINE, TY_CHAR) + + # Send a default (X,Y) compass indicator. + call aclrc (Memc[buf], SZ_LINE) + call sprintf (Memc[buf], SZ_LINE, "compass %d 0.0 -1 1 0 X Y\0") + call pargi (C_OBJID(cp)) + call wcspix_message (Memc[buf]) + + call sfree (sp) +end diff --git a/vendor/x11iraf/ximtool/clients/x_ism.x b/vendor/x11iraf/ximtool/clients/x_ism.x new file mode 100644 index 00000000..8f401873 --- /dev/null +++ b/vendor/x11iraf/ximtool/clients/x_ism.x @@ -0,0 +1 @@ +task wcspix = t_wcspix diff --git a/vendor/x11iraf/ximtool/data/README b/vendor/x11iraf/ximtool/data/README new file mode 100644 index 00000000..c033f821 --- /dev/null +++ b/vendor/x11iraf/ximtool/data/README @@ -0,0 +1,2 @@ +The files in this directory are included in Ximtool, either at compile time +or manually in the GUI file. diff --git a/vendor/x11iraf/ximtool/data/aips0.lut b/vendor/x11iraf/ximtool/data/aips0.lut new file mode 100644 index 00000000..351cc2e4 --- /dev/null +++ b/vendor/x11iraf/ximtool/data/aips0.lut @@ -0,0 +1,257 @@ +256, +0.00000, 0.00000, 0.00000, +0.19608, 0.19608, 0.19608, +0.19608, 0.19608, 0.19608, +0.19608, 0.19608, 0.19608, +0.19608, 0.19608, 0.19608, +0.19608, 0.19608, 0.19608, +0.19608, 0.19608, 0.19608, +0.19608, 0.19608, 0.19608, +0.19608, 0.19608, 0.19608, +0.19608, 0.19608, 0.19608, +0.19608, 0.19608, 0.19608, +0.19608, 0.19608, 0.19608, +0.19608, 0.19608, 0.19608, +0.19608, 0.19608, 0.19608, +0.19608, 0.19608, 0.19608, +0.19608, 0.19608, 0.19608, +0.19608, 0.19608, 0.19608, +0.19608, 0.19608, 0.19608, +0.19608, 0.19608, 0.19608, +0.19608, 0.19608, 0.19608, +0.19608, 0.19608, 0.19608, +0.19608, 0.19608, 0.19608, +0.19608, 0.19608, 0.19608, +0.19608, 0.19608, 0.19608, +0.19608, 0.19608, 0.19608, +0.19608, 0.19608, 0.19608, +0.19608, 0.19608, 0.19608, +0.19608, 0.19608, 0.19608, +0.19608, 0.19608, 0.19608, +0.19608, 0.19608, 0.19608, +0.19608, 0.19608, 0.19608, +0.19608, 0.19608, 0.19608, +0.47451, 0.00000, 0.60784, +0.47451, 0.00000, 0.60784, +0.47451, 0.00000, 0.60784, +0.47451, 0.00000, 0.60784, +0.47451, 0.00000, 0.60784, +0.47451, 0.00000, 0.60784, +0.47451, 0.00000, 0.60784, +0.47451, 0.00000, 0.60784, +0.47451, 0.00000, 0.60784, +0.47451, 0.00000, 0.60784, +0.47451, 0.00000, 0.60784, +0.47451, 0.00000, 0.60784, +0.47451, 0.00000, 0.60784, +0.47451, 0.00000, 0.60784, +0.47451, 0.00000, 0.60784, +0.47451, 0.00000, 0.60784, +0.47451, 0.00000, 0.60784, +0.47451, 0.00000, 0.60784, +0.47451, 0.00000, 0.60784, +0.47451, 0.00000, 0.60784, +0.47451, 0.00000, 0.60784, +0.47451, 0.00000, 0.60784, +0.47451, 0.00000, 0.60784, +0.47451, 0.00000, 0.60784, +0.47451, 0.00000, 0.60784, +0.47451, 0.00000, 0.60784, +0.47451, 0.00000, 0.60784, +0.47451, 0.00000, 0.60784, +0.00000, 0.00000, 0.78431, +0.00000, 0.00000, 0.78431, +0.00000, 0.00000, 0.78431, +0.00000, 0.00000, 0.78431, +0.00000, 0.00000, 0.78431, +0.00000, 0.00000, 0.78431, +0.00000, 0.00000, 0.78431, +0.00000, 0.00000, 0.78431, +0.00000, 0.00000, 0.78431, +0.00000, 0.00000, 0.78431, +0.00000, 0.00000, 0.78431, +0.00000, 0.00000, 0.78431, +0.00000, 0.00000, 0.78431, +0.00000, 0.00000, 0.78431, +0.00000, 0.00000, 0.78431, +0.00000, 0.00000, 0.78431, +0.00000, 0.00000, 0.78431, +0.00000, 0.00000, 0.78431, +0.00000, 0.00000, 0.78431, +0.00000, 0.00000, 0.78431, +0.00000, 0.00000, 0.78431, +0.00000, 0.00000, 0.78431, +0.00000, 0.00000, 0.78431, +0.00000, 0.00000, 0.78431, +0.00000, 0.00000, 0.78431, +0.00000, 0.00000, 0.78431, +0.00000, 0.00000, 0.78431, +0.00000, 0.00000, 0.78431, +0.37255, 0.65490, 0.92549, +0.37255, 0.65490, 0.92549, +0.37255, 0.65490, 0.92549, +0.37255, 0.65490, 0.92549, +0.37255, 0.65490, 0.92549, +0.37255, 0.65490, 0.92549, +0.37255, 0.65490, 0.92549, +0.37255, 0.65490, 0.92549, +0.37255, 0.65490, 0.92549, +0.37255, 0.65490, 0.92549, +0.37255, 0.65490, 0.92549, +0.37255, 0.65490, 0.92549, +0.37255, 0.65490, 0.92549, +0.37255, 0.65490, 0.92549, +0.37255, 0.65490, 0.92549, +0.37255, 0.65490, 0.92549, +0.37255, 0.65490, 0.92549, +0.37255, 0.65490, 0.92549, +0.37255, 0.65490, 0.92549, +0.37255, 0.65490, 0.92549, +0.37255, 0.65490, 0.92549, +0.37255, 0.65490, 0.92549, +0.37255, 0.65490, 0.92549, +0.37255, 0.65490, 0.92549, +0.37255, 0.65490, 0.92549, +0.37255, 0.65490, 0.92549, +0.37255, 0.65490, 0.92549, +0.37255, 0.65490, 0.92549, +0.00000, 0.56863, 0.00000, +0.00000, 0.56863, 0.00000, +0.00000, 0.56863, 0.00000, +0.00000, 0.56863, 0.00000, +0.00000, 0.56863, 0.00000, +0.00000, 0.56863, 0.00000, +0.00000, 0.56863, 0.00000, +0.00000, 0.56863, 0.00000, +0.00000, 0.56863, 0.00000, +0.00000, 0.56863, 0.00000, +0.00000, 0.56863, 0.00000, +0.00000, 0.56863, 0.00000, +0.00000, 0.56863, 0.00000, +0.00000, 0.56863, 0.00000, +0.00000, 0.56863, 0.00000, +0.00000, 0.56863, 0.00000, +0.00000, 0.56863, 0.00000, +0.00000, 0.56863, 0.00000, +0.00000, 0.56863, 0.00000, +0.00000, 0.56863, 0.00000, +0.00000, 0.56863, 0.00000, +0.00000, 0.56863, 0.00000, +0.00000, 0.56863, 0.00000, +0.00000, 0.56863, 0.00000, +0.00000, 0.56863, 0.00000, +0.00000, 0.56863, 0.00000, +0.00000, 0.56863, 0.00000, +0.00000, 0.56863, 0.00000, +0.00000, 0.96471, 0.00000, +0.00000, 0.96471, 0.00000, +0.00000, 0.96471, 0.00000, +0.00000, 0.96471, 0.00000, +0.00000, 0.96471, 0.00000, +0.00000, 0.96471, 0.00000, +0.00000, 0.96471, 0.00000, +0.00000, 0.96471, 0.00000, +0.00000, 0.96471, 0.00000, +0.00000, 0.96471, 0.00000, +0.00000, 0.96471, 0.00000, +0.00000, 0.96471, 0.00000, +0.00000, 0.96471, 0.00000, +0.00000, 0.96471, 0.00000, +0.00000, 0.96471, 0.00000, +0.00000, 0.96471, 0.00000, +0.00000, 0.96471, 0.00000, +0.00000, 0.96471, 0.00000, +0.00000, 0.96471, 0.00000, +0.00000, 0.96471, 0.00000, +0.00000, 0.96471, 0.00000, +0.00000, 0.96471, 0.00000, +0.00000, 0.96471, 0.00000, +0.00000, 0.96471, 0.00000, +0.00000, 0.96471, 0.00000, +0.00000, 0.96471, 0.00000, +0.00000, 0.96471, 0.00000, +0.00000, 0.96471, 0.00000, +1.00000, 1.00000, 0.00000, +1.00000, 1.00000, 0.00000, +1.00000, 1.00000, 0.00000, +1.00000, 1.00000, 0.00000, +1.00000, 1.00000, 0.00000, +1.00000, 1.00000, 0.00000, +1.00000, 1.00000, 0.00000, +1.00000, 1.00000, 0.00000, +1.00000, 1.00000, 0.00000, +1.00000, 1.00000, 0.00000, +1.00000, 1.00000, 0.00000, +1.00000, 1.00000, 0.00000, +1.00000, 1.00000, 0.00000, +1.00000, 1.00000, 0.00000, +1.00000, 1.00000, 0.00000, +1.00000, 1.00000, 0.00000, +1.00000, 1.00000, 0.00000, +1.00000, 1.00000, 0.00000, +1.00000, 1.00000, 0.00000, +1.00000, 1.00000, 0.00000, +1.00000, 1.00000, 0.00000, +1.00000, 1.00000, 0.00000, +1.00000, 1.00000, 0.00000, +1.00000, 1.00000, 0.00000, +1.00000, 1.00000, 0.00000, +1.00000, 1.00000, 0.00000, +1.00000, 1.00000, 0.00000, +1.00000, 1.00000, 0.00000, +1.00000, 0.69412, 0.00000, +1.00000, 0.69412, 0.00000, +1.00000, 0.69412, 0.00000, +1.00000, 0.69412, 0.00000, +1.00000, 0.69412, 0.00000, +1.00000, 0.69412, 0.00000, +1.00000, 0.69412, 0.00000, +1.00000, 0.69412, 0.00000, +1.00000, 0.69412, 0.00000, +1.00000, 0.69412, 0.00000, +1.00000, 0.69412, 0.00000, +1.00000, 0.69412, 0.00000, +1.00000, 0.69412, 0.00000, +1.00000, 0.69412, 0.00000, +1.00000, 0.69412, 0.00000, +1.00000, 0.69412, 0.00000, +1.00000, 0.69412, 0.00000, +1.00000, 0.69412, 0.00000, +1.00000, 0.69412, 0.00000, +1.00000, 0.69412, 0.00000, +1.00000, 0.69412, 0.00000, +1.00000, 0.69412, 0.00000, +1.00000, 0.69412, 0.00000, +1.00000, 0.69412, 0.00000, +1.00000, 0.69412, 0.00000, +1.00000, 0.69412, 0.00000, +1.00000, 0.69412, 0.00000, +1.00000, 0.69412, 0.00000, +1.00000, 0.00000, 0.00000, +1.00000, 0.00000, 0.00000, +1.00000, 0.00000, 0.00000, +1.00000, 0.00000, 0.00000, +1.00000, 0.00000, 0.00000, +1.00000, 0.00000, 0.00000, +1.00000, 0.00000, 0.00000, +1.00000, 0.00000, 0.00000, +1.00000, 0.00000, 0.00000, +1.00000, 0.00000, 0.00000, +1.00000, 0.00000, 0.00000, +1.00000, 0.00000, 0.00000, +1.00000, 0.00000, 0.00000, +1.00000, 0.00000, 0.00000, +1.00000, 0.00000, 0.00000, +1.00000, 0.00000, 0.00000, +1.00000, 0.00000, 0.00000, +1.00000, 0.00000, 0.00000, +1.00000, 0.00000, 0.00000, +1.00000, 0.00000, 0.00000, +1.00000, 0.00000, 0.00000, +1.00000, 0.00000, 0.00000, +1.00000, 0.00000, 0.00000, +1.00000, 0.00000, 0.00000, +1.00000, 0.00000, 0.00000, +1.00000, 0.00000, 0.00000, +1.00000, 0.00000, 0.00000, +1.00000, 0.00000, 0.00000 diff --git a/vendor/x11iraf/ximtool/data/blue.lut b/vendor/x11iraf/ximtool/data/blue.lut new file mode 100644 index 00000000..3f9caf87 --- /dev/null +++ b/vendor/x11iraf/ximtool/data/blue.lut @@ -0,0 +1,257 @@ +256, +0.00000, 0.00000, 0.00000, +0.00000, 0.00000, 0.00392, +0.00000, 0.00000, 0.00784, +0.00000, 0.00000, 0.01176, +0.00000, 0.00000, 0.01569, +0.00000, 0.00000, 0.01961, +0.00000, 0.00000, 0.02353, +0.00000, 0.00000, 0.02745, +0.00000, 0.00000, 0.03137, +0.00000, 0.00000, 0.03529, +0.00000, 0.00000, 0.03922, +0.00000, 0.00000, 0.04314, +0.00000, 0.00000, 0.04706, +0.00000, 0.00000, 0.05098, +0.00000, 0.00000, 0.05490, +0.00000, 0.00000, 0.05882, +0.00000, 0.00000, 0.06275, +0.00000, 0.00000, 0.06667, +0.00000, 0.00000, 0.07059, +0.00000, 0.00000, 0.07451, +0.00000, 0.00000, 0.07843, +0.00000, 0.00000, 0.08235, +0.00000, 0.00000, 0.08627, +0.00000, 0.00000, 0.09020, +0.00000, 0.00000, 0.09412, +0.00000, 0.00000, 0.09804, +0.00000, 0.00000, 0.10196, +0.00000, 0.00000, 0.10588, +0.00000, 0.00000, 0.10980, +0.00000, 0.00000, 0.11373, +0.00000, 0.00000, 0.11765, +0.00000, 0.00000, 0.12157, +0.00000, 0.00000, 0.12549, +0.00000, 0.00000, 0.12941, +0.00000, 0.00000, 0.13333, +0.00000, 0.00000, 0.13725, +0.00000, 0.00000, 0.14118, +0.00000, 0.00000, 0.14510, +0.00000, 0.00000, 0.14902, +0.00000, 0.00000, 0.15294, +0.00000, 0.00000, 0.15686, +0.00000, 0.00000, 0.16078, +0.00000, 0.00000, 0.16471, +0.00000, 0.00000, 0.16863, +0.00000, 0.00000, 0.17255, +0.00000, 0.00000, 0.17647, +0.00000, 0.00000, 0.18039, +0.00000, 0.00000, 0.18431, +0.00000, 0.00000, 0.18824, +0.00000, 0.00000, 0.19216, +0.00000, 0.00000, 0.19608, +0.00000, 0.00000, 0.20000, +0.00000, 0.00000, 0.20392, +0.00000, 0.00000, 0.20784, +0.00000, 0.00000, 0.21176, +0.00000, 0.00000, 0.21569, +0.00000, 0.00000, 0.21961, +0.00000, 0.00000, 0.22353, +0.00000, 0.00000, 0.22745, +0.00000, 0.00000, 0.23137, +0.00000, 0.00000, 0.23529, +0.00000, 0.00000, 0.23922, +0.00000, 0.00000, 0.24314, +0.00000, 0.00000, 0.24706, +0.00000, 0.00000, 0.25098, +0.00000, 0.00000, 0.25490, +0.00000, 0.00000, 0.25882, +0.00000, 0.00000, 0.26275, +0.00000, 0.00000, 0.26667, +0.00000, 0.00000, 0.27059, +0.00000, 0.00000, 0.27451, +0.00000, 0.00000, 0.27843, +0.00000, 0.00000, 0.28235, +0.00000, 0.00000, 0.28627, +0.00000, 0.00000, 0.29020, +0.00000, 0.00000, 0.29412, +0.00000, 0.00000, 0.29804, +0.00000, 0.00000, 0.30196, +0.00000, 0.00000, 0.30588, +0.00000, 0.00000, 0.30980, +0.00000, 0.00000, 0.31373, +0.00000, 0.00000, 0.31765, +0.00000, 0.00000, 0.32157, +0.00000, 0.00000, 0.32549, +0.00000, 0.00000, 0.32941, +0.00000, 0.00000, 0.33333, +0.00000, 0.00000, 0.33725, +0.00000, 0.00000, 0.34118, +0.00000, 0.00000, 0.34510, +0.00000, 0.00000, 0.34902, +0.00000, 0.00000, 0.35294, +0.00000, 0.00000, 0.35686, +0.00000, 0.00000, 0.36078, +0.00000, 0.00000, 0.36471, +0.00000, 0.00000, 0.36863, +0.00000, 0.00000, 0.37255, +0.00000, 0.00000, 0.37647, +0.00000, 0.00000, 0.38039, +0.00000, 0.00000, 0.38431, +0.00000, 0.00000, 0.38824, +0.00000, 0.00000, 0.39216, +0.00000, 0.00000, 0.39608, +0.00000, 0.00000, 0.40000, +0.00000, 0.00000, 0.40392, +0.00000, 0.00000, 0.40784, +0.00000, 0.00000, 0.41176, +0.00000, 0.00000, 0.41569, +0.00000, 0.00000, 0.41961, +0.00000, 0.00000, 0.42353, +0.00000, 0.00000, 0.42745, +0.00000, 0.00000, 0.43137, +0.00000, 0.00000, 0.43529, +0.00000, 0.00000, 0.43922, +0.00000, 0.00000, 0.44314, +0.00000, 0.00000, 0.44706, +0.00000, 0.00000, 0.45098, +0.00000, 0.00000, 0.45490, +0.00000, 0.00000, 0.45882, +0.00000, 0.00000, 0.46275, +0.00000, 0.00000, 0.46667, +0.00000, 0.00000, 0.47059, +0.00000, 0.00000, 0.47451, +0.00000, 0.00000, 0.47843, +0.00000, 0.00000, 0.48235, +0.00000, 0.00000, 0.48627, +0.00000, 0.00000, 0.49020, +0.00000, 0.00000, 0.49412, +0.00000, 0.00000, 0.49804, +0.00000, 0.00000, 0.50196, +0.00000, 0.00000, 0.50588, +0.00000, 0.00000, 0.50980, +0.00000, 0.00000, 0.51373, +0.00000, 0.00000, 0.51765, +0.00000, 0.00000, 0.52157, +0.00000, 0.00000, 0.52549, +0.00000, 0.00000, 0.52941, +0.00000, 0.00000, 0.53333, +0.00000, 0.00000, 0.53725, +0.00000, 0.00000, 0.54118, +0.00000, 0.00000, 0.54510, +0.00000, 0.00000, 0.54902, +0.00000, 0.00000, 0.55294, +0.00000, 0.00000, 0.55686, +0.00000, 0.00000, 0.56078, +0.00000, 0.00000, 0.56471, +0.00000, 0.00000, 0.56863, +0.00000, 0.00000, 0.57255, +0.00000, 0.00000, 0.57647, +0.00000, 0.00000, 0.58039, +0.00000, 0.00000, 0.58431, +0.00000, 0.00000, 0.58824, +0.00000, 0.00000, 0.59216, +0.00000, 0.00000, 0.59608, +0.00000, 0.00000, 0.60000, +0.00000, 0.00000, 0.60392, +0.00000, 0.00000, 0.60784, +0.00000, 0.00000, 0.61176, +0.00000, 0.00000, 0.61569, +0.00000, 0.00000, 0.61961, +0.00000, 0.00000, 0.62353, +0.00000, 0.00000, 0.62745, +0.00000, 0.00000, 0.63137, +0.00000, 0.00000, 0.63529, +0.00000, 0.00000, 0.63922, +0.00000, 0.00000, 0.64314, +0.00000, 0.00000, 0.64706, +0.00000, 0.00000, 0.65098, +0.00000, 0.00000, 0.65490, +0.00000, 0.00000, 0.65882, +0.00000, 0.00000, 0.66275, +0.00000, 0.00000, 0.66667, +0.00000, 0.00000, 0.67059, +0.00000, 0.00000, 0.67451, +0.00000, 0.00000, 0.67843, +0.00000, 0.00000, 0.68235, +0.00000, 0.00000, 0.68627, +0.00000, 0.00000, 0.69020, +0.00000, 0.00000, 0.69412, +0.00000, 0.00000, 0.69804, +0.00000, 0.00000, 0.70196, +0.00000, 0.00000, 0.70588, +0.00000, 0.00000, 0.70980, +0.00000, 0.00000, 0.71373, +0.00000, 0.00000, 0.71765, +0.00000, 0.00000, 0.72157, +0.00000, 0.00000, 0.72549, +0.00000, 0.00000, 0.72941, +0.00000, 0.00000, 0.73333, +0.00000, 0.00000, 0.73725, +0.00000, 0.00000, 0.74118, +0.00000, 0.00000, 0.74510, +0.00000, 0.00000, 0.74902, +0.00000, 0.00000, 0.75294, +0.00000, 0.00000, 0.75686, +0.00000, 0.00000, 0.76078, +0.00000, 0.00000, 0.76471, +0.00000, 0.00000, 0.76863, +0.00000, 0.00000, 0.77255, +0.00000, 0.00000, 0.77647, +0.00000, 0.00000, 0.78039, +0.00000, 0.00000, 0.78431, +0.00000, 0.00000, 0.78824, +0.00000, 0.00000, 0.79216, +0.00000, 0.00000, 0.79608, +0.00000, 0.00000, 0.80000, +0.00000, 0.00000, 0.80392, +0.00000, 0.00000, 0.80784, +0.00000, 0.00000, 0.81176, +0.00000, 0.00000, 0.81569, +0.00000, 0.00000, 0.81961, +0.00000, 0.00000, 0.82353, +0.00000, 0.00000, 0.82745, +0.00000, 0.00000, 0.83137, +0.00000, 0.00000, 0.83529, +0.00000, 0.00000, 0.83922, +0.00000, 0.00000, 0.84314, +0.00000, 0.00000, 0.84706, +0.00000, 0.00000, 0.85098, +0.00000, 0.00000, 0.85490, +0.00000, 0.00000, 0.85882, +0.00000, 0.00000, 0.86275, +0.00000, 0.00000, 0.86667, +0.00000, 0.00000, 0.87059, +0.00000, 0.00000, 0.87451, +0.00000, 0.00000, 0.87843, +0.00000, 0.00000, 0.88235, +0.00000, 0.00000, 0.88627, +0.00000, 0.00000, 0.89020, +0.00000, 0.00000, 0.89412, +0.00000, 0.00000, 0.89804, +0.00000, 0.00000, 0.90196, +0.00000, 0.00000, 0.90588, +0.00000, 0.00000, 0.90980, +0.00000, 0.00000, 0.91373, +0.00000, 0.00000, 0.91765, +0.00000, 0.00000, 0.92157, +0.00000, 0.00000, 0.92549, +0.00000, 0.00000, 0.92941, +0.00000, 0.00000, 0.93333, +0.00000, 0.00000, 0.93725, +0.00000, 0.00000, 0.94118, +0.00000, 0.00000, 0.94510, +0.00000, 0.00000, 0.94902, +0.00000, 0.00000, 0.95294, +0.00000, 0.00000, 0.95686, +0.00000, 0.00000, 0.96078, +0.00000, 0.00000, 0.96471, +0.00000, 0.00000, 0.96863, +0.00000, 0.00000, 0.97255, +0.00000, 0.00000, 0.97647, +0.00000, 0.00000, 0.98039, +0.00000, 0.00392, 0.98431, +0.00000, 0.00784, 0.98824, +0.00000, 0.01176, 0.99216, +0.00000, 0.01569, 0.99608, +0.00000, 0.00392, 1.00000 diff --git a/vendor/x11iraf/ximtool/data/brightness.xbm b/vendor/x11iraf/ximtool/data/brightness.xbm new file mode 100644 index 00000000..ce875ea6 --- /dev/null +++ b/vendor/x11iraf/ximtool/data/brightness.xbm @@ -0,0 +1,6 @@ +#define brightness_width 15 +#define brightness_height 15 +static char brightness_bits[] = { + 0x00, 0x00, 0x80, 0x00, 0x84, 0x10, 0xe8, 0x0b, 0x10, 0x04, 0x08, 0x08, + 0x08, 0x08, 0x0e, 0x38, 0x08, 0x08, 0x08, 0x08, 0x10, 0x04, 0xe8, 0x0b, + 0x84, 0x10, 0x80, 0x00, 0x00, 0x00}; diff --git a/vendor/x11iraf/ximtool/data/color.lut b/vendor/x11iraf/ximtool/data/color.lut new file mode 100644 index 00000000..580a589e --- /dev/null +++ b/vendor/x11iraf/ximtool/data/color.lut @@ -0,0 +1,257 @@ +256, +0.00000, 0.00000, 0.00000, +0.00000, 0.00000, 0.00000, +0.00000, 0.00000, 0.00000, +0.00000, 0.00000, 0.00000, +0.00000, 0.00000, 0.00000, +0.00000, 0.00000, 0.00000, +0.00000, 0.00000, 0.00000, +0.00000, 0.00000, 0.00000, +0.00000, 0.00000, 0.00000, +0.00000, 0.00000, 0.00000, +0.00000, 0.00000, 0.00000, +0.00000, 0.00000, 0.00000, +0.00000, 0.00000, 0.00000, +0.00000, 0.00000, 0.00000, +0.00000, 0.00000, 0.00000, +0.00000, 0.00000, 0.00000, +0.18431, 0.18431, 0.18431, +0.18431, 0.18431, 0.18431, +0.18431, 0.18431, 0.18431, +0.18431, 0.18431, 0.18431, +0.18431, 0.18431, 0.18431, +0.18431, 0.18431, 0.18431, +0.18431, 0.18431, 0.18431, +0.18431, 0.18431, 0.18431, +0.18431, 0.18431, 0.18431, +0.18431, 0.18431, 0.18431, +0.18431, 0.18431, 0.18431, +0.18431, 0.18431, 0.18431, +0.18431, 0.18431, 0.18431, +0.18431, 0.18431, 0.18431, +0.18431, 0.18431, 0.18431, +0.18431, 0.18431, 0.18431, +0.37255, 0.37255, 0.37255, +0.37255, 0.37255, 0.37255, +0.37255, 0.37255, 0.37255, +0.37255, 0.37255, 0.37255, +0.37255, 0.37255, 0.37255, +0.37255, 0.37255, 0.37255, +0.37255, 0.37255, 0.37255, +0.37255, 0.37255, 0.37255, +0.37255, 0.37255, 0.37255, +0.37255, 0.37255, 0.37255, +0.37255, 0.37255, 0.37255, +0.37255, 0.37255, 0.37255, +0.37255, 0.37255, 0.37255, +0.37255, 0.37255, 0.37255, +0.37255, 0.37255, 0.37255, +0.37255, 0.37255, 0.37255, +0.56078, 0.56078, 0.56078, +0.56078, 0.56078, 0.56078, +0.56078, 0.56078, 0.56078, +0.56078, 0.56078, 0.56078, +0.56078, 0.56078, 0.56078, +0.56078, 0.56078, 0.56078, +0.56078, 0.56078, 0.56078, +0.56078, 0.56078, 0.56078, +0.56078, 0.56078, 0.56078, +0.56078, 0.56078, 0.56078, +0.56078, 0.56078, 0.56078, +0.56078, 0.56078, 0.56078, +0.56078, 0.56078, 0.56078, +0.56078, 0.56078, 0.56078, +0.56078, 0.56078, 0.56078, +0.56078, 0.56078, 0.56078, +0.74902, 0.74902, 0.74902, +0.74902, 0.74902, 0.74902, +0.74902, 0.74902, 0.74902, +0.74902, 0.74902, 0.74902, +0.74902, 0.74902, 0.74902, +0.74902, 0.74902, 0.74902, +0.74902, 0.74902, 0.74902, +0.74902, 0.74902, 0.74902, +0.74902, 0.74902, 0.74902, +0.74902, 0.74902, 0.74902, +0.74902, 0.74902, 0.74902, +0.74902, 0.74902, 0.74902, +0.74902, 0.74902, 0.74902, +0.74902, 0.74902, 0.74902, +0.74902, 0.74902, 0.74902, +0.74902, 0.74902, 0.74902, +0.93725, 0.93725, 0.93725, +0.93725, 0.93725, 0.93725, +0.93725, 0.93725, 0.93725, +0.93725, 0.93725, 0.93725, +0.93725, 0.93725, 0.93725, +0.93725, 0.93725, 0.93725, +0.93725, 0.93725, 0.93725, +0.93725, 0.93725, 0.93725, +0.93725, 0.93725, 0.93725, +0.93725, 0.93725, 0.93725, +0.93725, 0.93725, 0.93725, +0.93725, 0.93725, 0.93725, +0.93725, 0.93725, 0.93725, +0.93725, 0.93725, 0.93725, +0.93725, 0.93725, 0.93725, +0.93725, 0.93725, 0.93725, +0.00000, 0.18431, 0.93725, +0.00000, 0.18431, 0.93725, +0.00000, 0.18431, 0.93725, +0.00000, 0.18431, 0.93725, +0.00000, 0.18431, 0.93725, +0.00000, 0.18431, 0.93725, +0.00000, 0.18431, 0.93725, +0.00000, 0.18431, 0.93725, +0.00000, 0.18431, 0.93725, +0.00000, 0.18431, 0.93725, +0.00000, 0.18431, 0.93725, +0.00000, 0.18431, 0.93725, +0.00000, 0.18431, 0.93725, +0.00000, 0.18431, 0.93725, +0.00000, 0.18431, 0.93725, +0.00000, 0.18431, 0.93725, +0.00000, 0.37255, 0.74902, +0.00000, 0.37255, 0.74902, +0.00000, 0.37255, 0.74902, +0.00000, 0.37255, 0.74902, +0.00000, 0.37255, 0.74902, +0.00000, 0.37255, 0.74902, +0.00000, 0.37255, 0.74902, +0.00000, 0.37255, 0.74902, +0.00000, 0.37255, 0.74902, +0.00000, 0.37255, 0.74902, +0.00000, 0.37255, 0.74902, +0.00000, 0.37255, 0.74902, +0.00000, 0.37255, 0.74902, +0.00000, 0.37255, 0.74902, +0.00000, 0.37255, 0.74902, +0.00000, 0.37255, 0.74902, +0.00000, 0.49804, 0.49804, +0.00000, 0.49804, 0.49804, +0.00000, 0.49804, 0.49804, +0.00000, 0.49804, 0.49804, +0.00000, 0.49804, 0.49804, +0.00000, 0.49804, 0.49804, +0.00000, 0.49804, 0.49804, +0.00000, 0.49804, 0.49804, +0.00000, 0.49804, 0.49804, +0.00000, 0.49804, 0.49804, +0.00000, 0.49804, 0.49804, +0.00000, 0.49804, 0.49804, +0.00000, 0.49804, 0.49804, +0.00000, 0.49804, 0.49804, +0.00000, 0.49804, 0.49804, +0.00000, 0.49804, 0.49804, +0.00000, 0.74902, 0.30980, +0.00000, 0.74902, 0.30980, +0.00000, 0.74902, 0.30980, +0.00000, 0.74902, 0.30980, +0.00000, 0.74902, 0.30980, +0.00000, 0.74902, 0.30980, +0.00000, 0.74902, 0.30980, +0.00000, 0.74902, 0.30980, +0.00000, 0.74902, 0.30980, +0.00000, 0.74902, 0.30980, +0.00000, 0.74902, 0.30980, +0.00000, 0.74902, 0.30980, +0.00000, 0.74902, 0.30980, +0.00000, 0.74902, 0.30980, +0.00000, 0.74902, 0.30980, +0.00000, 0.74902, 0.30980, +0.00000, 0.93725, 0.00000, +0.00000, 0.93725, 0.00000, +0.00000, 0.93725, 0.00000, +0.00000, 0.93725, 0.00000, +0.00000, 0.93725, 0.00000, +0.00000, 0.93725, 0.00000, +0.00000, 0.93725, 0.00000, +0.00000, 0.93725, 0.00000, +0.00000, 0.93725, 0.00000, +0.00000, 0.93725, 0.00000, +0.00000, 0.93725, 0.00000, +0.00000, 0.93725, 0.00000, +0.00000, 0.93725, 0.00000, +0.00000, 0.93725, 0.00000, +0.00000, 0.93725, 0.00000, +0.00000, 0.93725, 0.00000, +0.30980, 0.62353, 0.00000, +0.30980, 0.62353, 0.00000, +0.30980, 0.62353, 0.00000, +0.30980, 0.62353, 0.00000, +0.30980, 0.62353, 0.00000, +0.30980, 0.62353, 0.00000, +0.30980, 0.62353, 0.00000, +0.30980, 0.62353, 0.00000, +0.30980, 0.62353, 0.00000, +0.30980, 0.62353, 0.00000, +0.30980, 0.62353, 0.00000, +0.30980, 0.62353, 0.00000, +0.30980, 0.62353, 0.00000, +0.30980, 0.62353, 0.00000, +0.30980, 0.62353, 0.00000, +0.30980, 0.62353, 0.00000, +0.49804, 0.49804, 0.00000, +0.49804, 0.49804, 0.00000, +0.49804, 0.49804, 0.00000, +0.49804, 0.49804, 0.00000, +0.49804, 0.49804, 0.00000, +0.49804, 0.49804, 0.00000, +0.49804, 0.49804, 0.00000, +0.49804, 0.49804, 0.00000, +0.49804, 0.49804, 0.00000, +0.49804, 0.49804, 0.00000, +0.49804, 0.49804, 0.00000, +0.49804, 0.49804, 0.00000, +0.49804, 0.49804, 0.00000, +0.49804, 0.49804, 0.00000, +0.49804, 0.49804, 0.00000, +0.49804, 0.49804, 0.00000, +0.62353, 0.30980, 0.00000, +0.62353, 0.30980, 0.00000, +0.62353, 0.30980, 0.00000, +0.62353, 0.30980, 0.00000, +0.62353, 0.30980, 0.00000, +0.62353, 0.30980, 0.00000, +0.62353, 0.30980, 0.00000, +0.62353, 0.30980, 0.00000, +0.62353, 0.30980, 0.00000, +0.62353, 0.30980, 0.00000, +0.62353, 0.30980, 0.00000, +0.62353, 0.30980, 0.00000, +0.62353, 0.30980, 0.00000, +0.62353, 0.30980, 0.00000, +0.62353, 0.30980, 0.00000, +0.62353, 0.30980, 0.00000, +0.93725, 0.00000, 0.00000, +0.93725, 0.00000, 0.00000, +0.93725, 0.00000, 0.00000, +0.93725, 0.00000, 0.00000, +0.93725, 0.00000, 0.00000, +0.93725, 0.00000, 0.00000, +0.93725, 0.00000, 0.00000, +0.93725, 0.00000, 0.00000, +0.93725, 0.00000, 0.00000, +0.93725, 0.00000, 0.00000, +0.93725, 0.00000, 0.00000, +0.93725, 0.00000, 0.00000, +0.93725, 0.00000, 0.00000, +0.93725, 0.00000, 0.00000, +0.93725, 0.00000, 0.00000, +0.93725, 0.00000, 0.00000, +0.74902, 0.00000, 0.30980, +0.74902, 0.00000, 0.30980, +0.74902, 0.00000, 0.30980, +0.74902, 0.00000, 0.30980, +0.74902, 0.00000, 0.30980, +0.74902, 0.00000, 0.30980, +0.74902, 0.00000, 0.30980, +0.74902, 0.00000, 0.30980, +0.74902, 0.00000, 0.30980, +0.74902, 0.00000, 0.30980, +0.74902, 0.00000, 0.30980, +0.74902, 0.00000, 0.30980, +0.74902, 0.00000, 0.30980, +0.74902, 0.00000, 0.30980, +0.74902, 0.00000, 0.30980, +0.74902, 0.00000, 0.30980 diff --git a/vendor/x11iraf/ximtool/data/contrast.xbm b/vendor/x11iraf/ximtool/data/contrast.xbm new file mode 100644 index 00000000..07e4a20f --- /dev/null +++ b/vendor/x11iraf/ximtool/data/contrast.xbm @@ -0,0 +1,6 @@ +#define contrast_width 15 +#define contrast_height 15 +static char contrast_bits[] = { + 0x00, 0x00, 0x00, 0x00, 0xc0, 0x01, 0x30, 0x07, 0x08, 0x0f, 0x08, 0x0f, + 0x04, 0x1f, 0x04, 0x1f, 0x04, 0x1f, 0x08, 0x0f, 0x08, 0x0f, 0x30, 0x07, + 0xc0, 0x01, 0x00, 0x00, 0x00, 0x00}; diff --git a/vendor/x11iraf/ximtool/data/green.lut b/vendor/x11iraf/ximtool/data/green.lut new file mode 100644 index 00000000..1af43427 --- /dev/null +++ b/vendor/x11iraf/ximtool/data/green.lut @@ -0,0 +1,257 @@ +256, +0.00000, 0.00000, 0.00000, +0.00000, 0.00392, 0.00000, +0.00000, 0.00784, 0.00000, +0.00000, 0.01176, 0.00000, +0.00000, 0.01569, 0.00000, +0.00000, 0.01961, 0.00000, +0.00000, 0.02353, 0.00000, +0.00000, 0.02745, 0.00000, +0.00000, 0.03137, 0.00000, +0.00000, 0.03529, 0.00000, +0.00000, 0.03922, 0.00000, +0.00000, 0.04314, 0.00000, +0.00000, 0.04706, 0.00000, +0.00000, 0.05098, 0.00000, +0.00000, 0.05490, 0.00000, +0.00000, 0.05882, 0.00000, +0.00000, 0.06275, 0.00000, +0.00000, 0.06667, 0.00000, +0.00000, 0.07059, 0.00000, +0.00000, 0.07451, 0.00000, +0.00000, 0.07843, 0.00000, +0.00000, 0.08235, 0.00000, +0.00000, 0.08627, 0.00000, +0.00000, 0.09020, 0.00000, +0.00000, 0.09412, 0.00000, +0.00000, 0.09804, 0.00000, +0.00000, 0.10196, 0.00000, +0.00000, 0.10588, 0.00000, +0.00000, 0.10980, 0.00000, +0.00000, 0.11373, 0.00000, +0.00000, 0.11765, 0.00000, +0.00000, 0.12157, 0.00000, +0.00000, 0.12549, 0.00000, +0.00000, 0.12941, 0.00000, +0.00000, 0.13333, 0.00000, +0.00000, 0.13725, 0.00000, +0.00000, 0.14118, 0.00000, +0.00000, 0.14510, 0.00000, +0.00000, 0.14902, 0.00000, +0.00000, 0.15294, 0.00000, +0.00000, 0.15686, 0.00000, +0.00000, 0.16078, 0.00000, +0.00000, 0.16471, 0.00000, +0.00000, 0.16863, 0.00000, +0.00000, 0.17255, 0.00000, +0.00000, 0.17647, 0.00000, +0.00000, 0.18039, 0.00000, +0.00000, 0.18431, 0.00000, +0.00000, 0.18824, 0.00000, +0.00000, 0.19216, 0.00000, +0.00000, 0.19608, 0.00000, +0.00000, 0.20000, 0.00000, +0.00000, 0.20392, 0.00000, +0.00000, 0.20784, 0.00000, +0.00000, 0.21176, 0.00000, +0.00000, 0.21569, 0.00000, +0.00000, 0.21961, 0.00000, +0.00000, 0.22353, 0.00000, +0.00000, 0.22745, 0.00000, +0.00000, 0.23137, 0.00000, +0.00000, 0.23529, 0.00000, +0.00000, 0.23922, 0.00000, +0.00000, 0.24314, 0.00000, +0.00000, 0.24706, 0.00000, +0.00000, 0.25098, 0.00000, +0.00000, 0.25490, 0.00000, +0.00000, 0.25882, 0.00000, +0.00000, 0.26275, 0.00000, +0.00000, 0.26667, 0.00000, +0.00000, 0.27059, 0.00000, +0.00000, 0.27451, 0.00000, +0.00000, 0.27843, 0.00000, +0.00000, 0.28235, 0.00000, +0.00000, 0.28627, 0.00000, +0.00000, 0.29020, 0.00000, +0.00000, 0.29412, 0.00000, +0.00000, 0.29804, 0.00000, +0.00000, 0.30196, 0.00000, +0.00000, 0.30588, 0.00000, +0.00000, 0.30980, 0.00000, +0.00000, 0.31373, 0.00000, +0.00000, 0.31765, 0.00000, +0.00000, 0.32157, 0.00000, +0.00000, 0.32549, 0.00000, +0.00000, 0.32941, 0.00000, +0.00000, 0.33333, 0.00000, +0.00000, 0.33725, 0.00000, +0.00000, 0.34118, 0.00000, +0.00000, 0.34510, 0.00000, +0.00000, 0.34902, 0.00000, +0.00000, 0.35294, 0.00000, +0.00000, 0.35686, 0.00000, +0.00000, 0.36078, 0.00000, +0.00000, 0.36471, 0.00000, +0.00000, 0.36863, 0.00000, +0.00000, 0.37255, 0.00000, +0.00000, 0.37647, 0.00000, +0.00000, 0.38039, 0.00000, +0.00000, 0.38431, 0.00000, +0.00000, 0.38824, 0.00000, +0.00000, 0.39216, 0.00000, +0.00000, 0.39608, 0.00000, +0.00000, 0.40000, 0.00000, +0.00000, 0.40392, 0.00000, +0.00000, 0.40784, 0.00000, +0.00000, 0.41176, 0.00000, +0.00000, 0.41569, 0.00000, +0.00000, 0.41961, 0.00000, +0.00000, 0.42353, 0.00000, +0.00000, 0.42745, 0.00000, +0.00000, 0.43137, 0.00000, +0.00000, 0.43529, 0.00000, +0.00000, 0.43922, 0.00000, +0.00000, 0.44314, 0.00000, +0.00000, 0.44706, 0.00000, +0.00000, 0.45098, 0.00000, +0.00000, 0.45490, 0.00000, +0.00000, 0.45882, 0.00000, +0.00000, 0.46275, 0.00000, +0.00000, 0.46667, 0.00000, +0.00000, 0.47059, 0.00000, +0.00000, 0.47451, 0.00000, +0.00000, 0.47843, 0.00000, +0.00000, 0.48235, 0.00000, +0.00000, 0.48627, 0.00000, +0.00000, 0.49020, 0.00000, +0.00000, 0.49412, 0.00000, +0.00000, 0.49804, 0.00000, +0.00000, 0.50196, 0.00000, +0.00000, 0.50588, 0.00000, +0.00000, 0.50980, 0.00000, +0.00000, 0.51373, 0.00000, +0.00000, 0.51765, 0.00000, +0.00000, 0.52157, 0.00000, +0.00000, 0.52549, 0.00000, +0.00000, 0.52941, 0.00000, +0.00000, 0.53333, 0.00000, +0.00000, 0.53725, 0.00000, +0.00000, 0.54118, 0.00000, +0.00000, 0.54510, 0.00000, +0.00000, 0.54902, 0.00000, +0.00000, 0.55294, 0.00000, +0.00000, 0.55686, 0.00000, +0.00000, 0.56078, 0.00000, +0.00000, 0.56471, 0.00000, +0.00000, 0.56863, 0.00000, +0.00000, 0.57255, 0.00000, +0.00000, 0.57647, 0.00000, +0.00000, 0.58039, 0.00000, +0.00000, 0.58431, 0.00000, +0.00000, 0.58824, 0.00000, +0.00000, 0.59216, 0.00000, +0.00000, 0.59608, 0.00000, +0.00000, 0.60000, 0.00000, +0.00000, 0.60392, 0.00000, +0.00000, 0.60784, 0.00000, +0.00000, 0.61176, 0.00000, +0.00000, 0.61569, 0.00000, +0.00000, 0.61961, 0.00000, +0.00000, 0.62353, 0.00000, +0.00000, 0.62745, 0.00000, +0.00000, 0.63137, 0.00000, +0.00000, 0.63529, 0.00000, +0.00000, 0.63922, 0.00000, +0.00000, 0.64314, 0.00000, +0.00000, 0.64706, 0.00000, +0.00000, 0.65098, 0.00000, +0.00000, 0.65490, 0.00000, +0.00000, 0.65882, 0.00000, +0.00000, 0.66275, 0.00000, +0.00000, 0.66667, 0.00000, +0.00000, 0.67059, 0.00000, +0.00000, 0.67451, 0.00000, +0.00000, 0.67843, 0.00000, +0.00000, 0.68235, 0.00000, +0.00000, 0.68627, 0.00000, +0.00000, 0.69020, 0.00000, +0.00000, 0.69412, 0.00000, +0.00000, 0.69804, 0.00000, +0.00000, 0.70196, 0.00000, +0.00000, 0.70588, 0.00000, +0.00000, 0.70980, 0.00000, +0.00000, 0.71373, 0.00000, +0.00000, 0.71765, 0.00000, +0.00000, 0.72157, 0.00000, +0.00000, 0.72549, 0.00000, +0.00000, 0.72941, 0.00000, +0.00000, 0.73333, 0.00000, +0.00000, 0.73725, 0.00000, +0.00000, 0.74118, 0.00000, +0.00000, 0.74510, 0.00000, +0.00000, 0.74902, 0.00000, +0.00000, 0.75294, 0.00000, +0.00000, 0.75686, 0.00000, +0.00000, 0.76078, 0.00000, +0.00000, 0.76471, 0.00000, +0.00000, 0.76863, 0.00000, +0.00000, 0.77255, 0.00000, +0.00000, 0.77647, 0.00000, +0.00000, 0.78039, 0.00000, +0.00000, 0.78431, 0.00000, +0.00000, 0.78824, 0.00000, +0.00000, 0.79216, 0.00000, +0.00000, 0.79608, 0.00000, +0.00000, 0.80000, 0.00000, +0.00000, 0.80392, 0.00000, +0.00000, 0.80784, 0.00000, +0.00000, 0.81176, 0.00000, +0.00000, 0.81569, 0.00000, +0.00000, 0.81961, 0.00000, +0.00000, 0.82353, 0.00000, +0.00000, 0.82745, 0.00000, +0.00000, 0.83137, 0.00000, +0.00000, 0.83529, 0.00000, +0.00000, 0.83922, 0.00000, +0.00000, 0.84314, 0.00000, +0.00000, 0.84706, 0.00000, +0.00000, 0.85098, 0.00000, +0.00000, 0.85490, 0.00000, +0.00000, 0.85882, 0.00000, +0.00000, 0.86275, 0.00000, +0.00000, 0.86667, 0.00000, +0.00000, 0.87059, 0.00000, +0.00000, 0.87451, 0.00000, +0.00000, 0.87843, 0.00000, +0.00000, 0.88235, 0.00000, +0.00000, 0.88627, 0.00000, +0.00000, 0.89020, 0.00000, +0.00000, 0.89412, 0.00000, +0.00000, 0.89804, 0.00000, +0.00000, 0.90196, 0.00000, +0.00000, 0.90588, 0.00000, +0.00000, 0.90980, 0.00000, +0.00000, 0.91373, 0.00000, +0.00000, 0.91765, 0.00000, +0.00000, 0.92157, 0.00000, +0.00000, 0.92549, 0.00000, +0.00000, 0.92941, 0.00000, +0.00000, 0.93333, 0.00000, +0.00000, 0.93725, 0.00000, +0.00000, 0.94118, 0.00000, +0.00000, 0.94510, 0.00000, +0.00000, 0.94902, 0.00000, +0.00000, 0.95294, 0.00000, +0.00000, 0.95686, 0.00000, +0.00000, 0.96078, 0.00000, +0.00000, 0.96471, 0.00000, +0.00000, 0.96863, 0.00000, +0.00000, 0.97255, 0.00000, +0.00000, 0.97647, 0.00000, +0.00000, 0.98039, 0.00000, +0.00000, 0.98431, 0.00000, +0.00000, 0.98824, 0.00000, +0.00000, 0.99216, 0.00000, +0.00000, 0.99608, 0.00392, +0.00000, 1.00000, 0.00784 diff --git a/vendor/x11iraf/ximtool/data/halley.lut b/vendor/x11iraf/ximtool/data/halley.lut new file mode 100644 index 00000000..ac00326a --- /dev/null +++ b/vendor/x11iraf/ximtool/data/halley.lut @@ -0,0 +1,257 @@ +256, +0.00000, 0.00000, 0.00000, +0.00000, 0.00000, 0.00000, +0.00000, 0.00000, 0.00000, +0.00000, 0.00000, 0.70588, +0.00000, 0.00000, 0.70588, +0.00000, 0.00000, 0.86275, +0.00000, 0.00000, 0.86275, +0.47059, 0.00000, 0.86275, +0.47059, 0.00000, 0.86275, +0.47059, 0.00000, 0.86275, +0.70588, 0.00000, 0.90196, +0.70588, 0.00000, 0.90196, +1.00000, 0.00000, 1.00000, +1.00000, 0.00000, 1.00000, +1.00000, 0.00000, 0.70588, +1.00000, 0.00000, 0.70588, +1.00000, 0.00000, 0.51765, +1.00000, 0.00000, 0.00000, +1.00000, 0.00000, 0.00000, +1.00000, 0.47059, 0.00000, +1.00000, 0.47059, 0.00000, +0.98824, 0.72549, 0.00000, +0.98824, 0.72549, 0.00000, +0.98431, 0.81176, 0.00000, +0.98431, 0.85098, 0.00000, +0.98431, 0.85098, 0.00000, +1.00000, 1.00000, 0.00000, +1.00000, 1.00000, 0.00000, +0.70588, 1.00000, 0.00000, +0.70588, 1.00000, 0.00000, +0.00000, 1.00000, 0.00000, +0.00000, 1.00000, 0.00000, +0.00000, 1.00000, 0.00000, +0.00000, 1.00000, 0.70588, +0.00000, 1.00000, 0.70588, +0.00000, 1.00000, 1.00000, +0.00000, 1.00000, 1.00000, +0.47059, 0.78431, 1.00000, +0.47059, 0.78431, 1.00000, +0.47059, 0.78431, 1.00000, +0.62745, 0.62745, 1.00000, +0.62745, 0.62745, 1.00000, +0.78431, 0.47059, 1.00000, +0.78431, 0.47059, 1.00000, +1.00000, 0.70588, 1.00000, +1.00000, 0.70588, 1.00000, +1.00000, 0.76863, 1.00000, +1.00000, 0.86275, 1.00000, +1.00000, 0.86275, 1.00000, +1.00000, 1.00000, 1.00000, +1.00000, 1.00000, 1.00000, +1.00000, 1.00000, 1.00000, +1.00000, 1.00000, 1.00000, +1.00000, 0.89804, 1.00000, +1.00000, 0.86275, 1.00000, +1.00000, 0.86275, 1.00000, +1.00000, 0.86275, 1.00000, +0.00000, 1.00000, 0.00000, +0.00000, 1.00000, 0.00000, +0.00000, 1.00000, 0.00000, +0.00000, 1.00000, 0.00000, +0.00000, 1.00000, 0.00000, +0.00000, 1.00000, 0.00000, +0.00000, 1.00000, 0.00000, +0.00000, 1.00000, 0.00000, +0.00000, 1.00000, 0.00000, +0.00000, 1.00000, 0.00000, +0.00000, 1.00000, 0.00000, +0.00000, 1.00000, 0.00000, +0.00000, 1.00000, 0.00000, +0.00000, 1.00000, 0.00000, +0.00000, 1.00000, 0.00000, +0.92157, 0.61961, 1.00000, +0.78431, 0.47059, 1.00000, +0.78431, 0.47059, 1.00000, +0.78431, 0.47059, 1.00000, +0.78431, 0.47059, 1.00000, +0.78431, 0.47059, 1.00000, +0.78431, 0.47059, 1.00000, +0.78431, 0.47059, 1.00000, +0.78431, 0.47059, 1.00000, +0.78431, 0.47059, 1.00000, +0.65882, 0.59608, 1.00000, +0.62745, 0.62745, 1.00000, +0.62745, 0.62745, 1.00000, +0.00000, 0.00000, 1.00000, +0.00000, 0.00000, 1.00000, +0.00000, 0.00000, 1.00000, +0.00000, 0.00000, 1.00000, +0.00000, 0.00000, 1.00000, +0.00000, 0.00000, 1.00000, +0.00000, 0.00000, 1.00000, +0.00000, 0.00000, 1.00000, +0.00000, 0.00000, 1.00000, +1.00000, 0.00000, 0.00000, +1.00000, 0.00000, 0.00000, +1.00000, 0.00000, 0.00000, +1.00000, 0.00000, 0.00000, +1.00000, 0.00000, 0.00000, +1.00000, 0.00000, 0.00000, +1.00000, 0.00000, 0.00000, +1.00000, 0.00000, 0.00000, +1.00000, 0.00000, 0.00000, +1.00000, 0.00000, 0.00000, +1.00000, 0.00000, 0.00000, +1.00000, 0.00000, 0.00000, +1.00000, 0.00000, 0.00000, +1.00000, 0.00000, 0.00000, +1.00000, 0.00000, 0.00000, +1.00000, 0.00000, 0.00000, +1.00000, 0.00000, 0.00000, +1.00000, 0.00000, 0.00000, +1.00000, 0.00000, 0.00000, +1.00000, 0.00000, 0.00000, +0.00000, 1.00000, 0.70588, +0.00000, 1.00000, 0.70588, +0.00000, 1.00000, 0.70588, +0.00000, 1.00000, 0.70588, +0.00000, 1.00000, 0.70588, +0.00000, 1.00000, 0.70588, +0.00000, 1.00000, 0.65490, +0.00000, 1.00000, 0.00000, +0.00000, 1.00000, 0.00000, +0.00000, 1.00000, 0.00000, +0.00000, 1.00000, 0.00000, +0.00000, 1.00000, 0.00000, +0.00000, 1.00000, 0.00000, +0.00000, 1.00000, 0.00000, +0.00000, 1.00000, 0.00000, +0.00000, 1.00000, 0.00000, +0.36078, 1.00000, 0.00000, +0.70588, 1.00000, 0.00000, +0.70588, 1.00000, 0.00000, +0.70588, 1.00000, 0.00000, +0.70588, 1.00000, 0.00000, +0.70588, 1.00000, 0.00000, +0.70588, 1.00000, 0.00000, +0.70588, 1.00000, 0.00000, +0.70588, 1.00000, 0.00000, +0.70588, 1.00000, 0.00000, +0.98431, 1.00000, 0.00000, +1.00000, 1.00000, 0.00000, +1.00000, 1.00000, 0.00000, +1.00000, 1.00000, 0.00000, +1.00000, 1.00000, 0.00000, +1.00000, 1.00000, 0.00000, +1.00000, 1.00000, 0.00000, +1.00000, 1.00000, 0.00000, +1.00000, 1.00000, 0.00000, +0.99608, 0.97647, 0.00000, +0.98431, 0.85098, 0.00000, +0.98431, 0.85098, 0.00000, +0.98431, 0.85098, 0.00000, +0.98431, 0.85098, 0.00000, +0.98431, 0.85098, 0.00000, +0.98431, 0.85098, 0.00000, +0.98431, 0.85098, 0.00000, +0.98431, 0.85098, 0.00000, +0.98431, 0.85098, 0.00000, +0.98824, 0.77647, 0.00000, +0.98824, 0.72549, 0.00000, +0.98824, 0.72549, 0.00000, +0.98824, 0.72549, 0.00000, +0.98824, 0.72549, 0.00000, +0.98824, 0.72549, 0.00000, +0.98824, 0.72549, 0.00000, +0.98824, 0.72549, 0.00000, +0.98824, 0.72549, 0.00000, +0.98824, 0.72549, 0.00000, +1.00000, 0.47059, 0.00000, +1.00000, 0.47059, 0.00000, +1.00000, 0.47059, 0.00000, +1.00000, 0.47059, 0.00000, +1.00000, 0.47059, 0.00000, +1.00000, 0.47059, 0.00000, +1.00000, 0.47059, 0.00000, +1.00000, 0.47059, 0.00000, +1.00000, 0.47059, 0.00000, +1.00000, 0.36863, 0.00000, +1.00000, 0.00000, 0.00000, +1.00000, 0.00000, 0.00000, +1.00000, 0.00000, 0.00000, +1.00000, 0.00000, 0.00000, +1.00000, 0.00000, 0.00000, +1.00000, 0.00000, 0.00000, +1.00000, 0.00000, 0.00000, +1.00000, 0.00000, 0.00000, +1.00000, 0.00000, 0.00000, +1.00000, 0.00000, 0.46667, +1.00000, 0.00000, 0.70588, +1.00000, 0.00000, 0.70588, +1.00000, 0.00000, 0.70588, +1.00000, 0.00000, 0.70588, +1.00000, 0.00000, 0.70588, +1.00000, 0.00000, 0.70588, +1.00000, 0.00000, 0.70588, +1.00000, 0.00000, 0.70588, +1.00000, 0.00000, 0.70588, +1.00000, 0.00000, 1.00000, +1.00000, 0.00000, 1.00000, +1.00000, 0.00000, 1.00000, +1.00000, 0.00000, 1.00000, +1.00000, 0.00000, 1.00000, +1.00000, 0.00000, 1.00000, +1.00000, 0.00000, 1.00000, +1.00000, 0.00000, 1.00000, +1.00000, 0.00000, 1.00000, +0.91373, 0.00000, 0.97255, +0.70588, 0.00000, 0.90196, +0.70588, 0.00000, 0.90196, +0.70588, 0.00000, 0.90196, +0.70588, 0.00000, 0.90196, +0.70588, 0.00000, 0.90196, +0.70588, 0.00000, 0.90196, +0.70588, 0.00000, 0.90196, +0.70588, 0.00000, 0.90196, +0.70588, 0.00000, 0.90196, +0.53333, 0.00000, 0.87451, +0.47059, 0.00000, 0.86275, +0.47059, 0.00000, 0.86275, +0.47059, 0.00000, 0.86275, +0.47059, 0.00000, 0.86275, +0.47059, 0.00000, 0.86275, +0.47059, 0.00000, 0.86275, +0.47059, 0.00000, 0.86275, +0.47059, 0.00000, 0.86275, +0.47059, 0.00000, 0.86275, +1.00000, 1.00000, 1.00000, +1.00000, 1.00000, 1.00000, +1.00000, 1.00000, 1.00000, +1.00000, 1.00000, 1.00000, +1.00000, 1.00000, 1.00000, +0.00000, 0.00000, 0.86275, +0.00000, 0.00000, 0.86275, +0.00000, 0.00000, 0.86275, +0.00000, 0.00000, 0.86275, +0.00000, 0.00000, 0.80392, +0.00000, 0.00000, 0.70588, +0.00000, 0.00000, 0.70588, +0.00000, 0.00000, 0.70588, +0.00000, 0.00000, 0.70588, +0.00000, 0.00000, 0.70588, +0.00000, 0.00000, 0.70588, +0.00000, 0.00000, 0.70588, +0.00000, 0.00000, 0.70588, +0.00000, 0.00000, 0.70588, +0.00000, 0.00000, 0.13725, +0.00000, 0.00000, 0.00000, +0.00000, 0.00000, 0.00000, +0.00000, 0.00000, 0.00000, +0.00000, 0.00000, 0.00000, +0.00000, 0.00000, 0.00000, +0.00000, 0.00000, 0.00000, +0.00000, 0.00000, 0.00000, +0.00000, 0.00000, 0.00000, +0.00000, 0.00000, 0.00000 diff --git a/vendor/x11iraf/ximtool/data/heat.lut b/vendor/x11iraf/ximtool/data/heat.lut new file mode 100644 index 00000000..124a70f4 --- /dev/null +++ b/vendor/x11iraf/ximtool/data/heat.lut @@ -0,0 +1,257 @@ +256, +0.00000, 0.00000, 0.00000, +0.01176, 0.00392, 0.00000, +0.02353, 0.00784, 0.00000, +0.03529, 0.01176, 0.00000, +0.04706, 0.01569, 0.00000, +0.05882, 0.01961, 0.00000, +0.07059, 0.02353, 0.00000, +0.08235, 0.02745, 0.00000, +0.09412, 0.03137, 0.00000, +0.10588, 0.03529, 0.00000, +0.11765, 0.03922, 0.00000, +0.12941, 0.04314, 0.00000, +0.14118, 0.04706, 0.00000, +0.15294, 0.05098, 0.00000, +0.16471, 0.05490, 0.00000, +0.17647, 0.05882, 0.00000, +0.18824, 0.06275, 0.00000, +0.20000, 0.06667, 0.00000, +0.21176, 0.07059, 0.00000, +0.22353, 0.07451, 0.00000, +0.23529, 0.07843, 0.00000, +0.24706, 0.08235, 0.00000, +0.25882, 0.08627, 0.00000, +0.27059, 0.09020, 0.00000, +0.28235, 0.09412, 0.00000, +0.29412, 0.09804, 0.00000, +0.30588, 0.10196, 0.00000, +0.31765, 0.10588, 0.00000, +0.32941, 0.10980, 0.00000, +0.34118, 0.11373, 0.00000, +0.35294, 0.11765, 0.00000, +0.36471, 0.12157, 0.00000, +0.37647, 0.12549, 0.00000, +0.38824, 0.12941, 0.00000, +0.40000, 0.13333, 0.00000, +0.41176, 0.13725, 0.00000, +0.42353, 0.14118, 0.00000, +0.43529, 0.14510, 0.00000, +0.44706, 0.14902, 0.00000, +0.45882, 0.15294, 0.00000, +0.47059, 0.15686, 0.00000, +0.48235, 0.16078, 0.00000, +0.49412, 0.16471, 0.00000, +0.50588, 0.16863, 0.00000, +0.51765, 0.17255, 0.00000, +0.52941, 0.17647, 0.00000, +0.54118, 0.18039, 0.00000, +0.55294, 0.18431, 0.00000, +0.56471, 0.18824, 0.00000, +0.57647, 0.19216, 0.00000, +0.58824, 0.19608, 0.00000, +0.60000, 0.20000, 0.00000, +0.61176, 0.20392, 0.00000, +0.62353, 0.20784, 0.00000, +0.63529, 0.21176, 0.00000, +0.64706, 0.21569, 0.00000, +0.65882, 0.21961, 0.00000, +0.67059, 0.22353, 0.00000, +0.68235, 0.22745, 0.00000, +0.69412, 0.23137, 0.00000, +0.70588, 0.23529, 0.00000, +0.71765, 0.23922, 0.00000, +0.72941, 0.24314, 0.00000, +0.74118, 0.24706, 0.00000, +0.75294, 0.25098, 0.00000, +0.76471, 0.25490, 0.00000, +0.77647, 0.25882, 0.00000, +0.78824, 0.26275, 0.00000, +0.80000, 0.26667, 0.00000, +0.81176, 0.27059, 0.00000, +0.82353, 0.27451, 0.00000, +0.83529, 0.27843, 0.00000, +0.84706, 0.28235, 0.00000, +0.85882, 0.28627, 0.00000, +0.87059, 0.29020, 0.00000, +0.88235, 0.29412, 0.00000, +0.89412, 0.29804, 0.00000, +0.90588, 0.30196, 0.00000, +0.91765, 0.30588, 0.00000, +0.92941, 0.30980, 0.00000, +0.94118, 0.31373, 0.00000, +0.95294, 0.31765, 0.00000, +0.96471, 0.32157, 0.00000, +0.97647, 0.32549, 0.00000, +0.98824, 0.32941, 0.00000, +1.00000, 0.33333, 0.00000, +1.00000, 0.33725, 0.00000, +1.00000, 0.34118, 0.00000, +1.00000, 0.34510, 0.00000, +1.00000, 0.34902, 0.00000, +1.00000, 0.35294, 0.00000, +1.00000, 0.35686, 0.00000, +1.00000, 0.36078, 0.00000, +1.00000, 0.36471, 0.00000, +1.00000, 0.36863, 0.00000, +1.00000, 0.37255, 0.00000, +1.00000, 0.37647, 0.00000, +1.00000, 0.38039, 0.00000, +1.00000, 0.38431, 0.00000, +1.00000, 0.38824, 0.00000, +1.00000, 0.39216, 0.00000, +1.00000, 0.39608, 0.00000, +1.00000, 0.40000, 0.00000, +1.00000, 0.40392, 0.00000, +1.00000, 0.40784, 0.00000, +1.00000, 0.41176, 0.00000, +1.00000, 0.41569, 0.00000, +1.00000, 0.41961, 0.00000, +1.00000, 0.42353, 0.00000, +1.00000, 0.42745, 0.00000, +1.00000, 0.43137, 0.00000, +1.00000, 0.43529, 0.00000, +1.00000, 0.43922, 0.00000, +1.00000, 0.44314, 0.00000, +1.00000, 0.44706, 0.00000, +1.00000, 0.45098, 0.00000, +1.00000, 0.45490, 0.00000, +1.00000, 0.45882, 0.00000, +1.00000, 0.46275, 0.00000, +1.00000, 0.46667, 0.00000, +1.00000, 0.47059, 0.00000, +1.00000, 0.47451, 0.00000, +1.00000, 0.47843, 0.00000, +1.00000, 0.48235, 0.00000, +1.00000, 0.48627, 0.00000, +1.00000, 0.49020, 0.00000, +1.00000, 0.49412, 0.00000, +1.00000, 0.49804, 0.00000, +1.00000, 0.50196, 0.00000, +1.00000, 0.50588, 0.00000, +1.00000, 0.50980, 0.00000, +1.00000, 0.51373, 0.00000, +1.00000, 0.51765, 0.00000, +1.00000, 0.52157, 0.00000, +1.00000, 0.52549, 0.00000, +1.00000, 0.52941, 0.00000, +1.00000, 0.53333, 0.00000, +1.00000, 0.53725, 0.00000, +1.00000, 0.54118, 0.00000, +1.00000, 0.54510, 0.00000, +1.00000, 0.54902, 0.00000, +1.00000, 0.55294, 0.00000, +1.00000, 0.55686, 0.00000, +1.00000, 0.56078, 0.00000, +1.00000, 0.56471, 0.00000, +1.00000, 0.56863, 0.00000, +1.00000, 0.57255, 0.00000, +1.00000, 0.57647, 0.00000, +1.00000, 0.58039, 0.00000, +1.00000, 0.58431, 0.00000, +1.00000, 0.58824, 0.00000, +1.00000, 0.59216, 0.00000, +1.00000, 0.59608, 0.00000, +1.00000, 0.60000, 0.00000, +1.00000, 0.60392, 0.00000, +1.00000, 0.60784, 0.00000, +1.00000, 0.61176, 0.00000, +1.00000, 0.61569, 0.00000, +1.00000, 0.61961, 0.00000, +1.00000, 0.62353, 0.00000, +1.00000, 0.62745, 0.00000, +1.00000, 0.63137, 0.00000, +1.00000, 0.63529, 0.00000, +1.00000, 0.63922, 0.00000, +1.00000, 0.64314, 0.00000, +1.00000, 0.64706, 0.00000, +1.00000, 0.65098, 0.01176, +1.00000, 0.65490, 0.02353, +1.00000, 0.65882, 0.03529, +1.00000, 0.66275, 0.04706, +1.00000, 0.66667, 0.05882, +1.00000, 0.67059, 0.07059, +1.00000, 0.67451, 0.08235, +1.00000, 0.67843, 0.09412, +1.00000, 0.68235, 0.10588, +1.00000, 0.68627, 0.11765, +1.00000, 0.69020, 0.12941, +1.00000, 0.69412, 0.14118, +1.00000, 0.69804, 0.15294, +1.00000, 0.70196, 0.16471, +1.00000, 0.70588, 0.17647, +1.00000, 0.70980, 0.18824, +1.00000, 0.71373, 0.20000, +1.00000, 0.71765, 0.21176, +1.00000, 0.72157, 0.22353, +1.00000, 0.72549, 0.23529, +1.00000, 0.72941, 0.24706, +1.00000, 0.73333, 0.25882, +1.00000, 0.73725, 0.27059, +1.00000, 0.74118, 0.28235, +1.00000, 0.74510, 0.29412, +1.00000, 0.74902, 0.30588, +1.00000, 0.75294, 0.31765, +1.00000, 0.75686, 0.32941, +1.00000, 0.76078, 0.34118, +1.00000, 0.76471, 0.35294, +1.00000, 0.76863, 0.36471, +1.00000, 0.77255, 0.37647, +1.00000, 0.77647, 0.38824, +1.00000, 0.78039, 0.40000, +1.00000, 0.78431, 0.41176, +1.00000, 0.78824, 0.42353, +1.00000, 0.79216, 0.43529, +1.00000, 0.79608, 0.44706, +1.00000, 0.80000, 0.45882, +1.00000, 0.80392, 0.47059, +1.00000, 0.80784, 0.48235, +1.00000, 0.81176, 0.49412, +1.00000, 0.81569, 0.50588, +1.00000, 0.81961, 0.51765, +1.00000, 0.82353, 0.52941, +1.00000, 0.82745, 0.54118, +1.00000, 0.83137, 0.55294, +1.00000, 0.83529, 0.56471, +1.00000, 0.83922, 0.57647, +1.00000, 0.84314, 0.58824, +1.00000, 0.84706, 0.60000, +1.00000, 0.85098, 0.61176, +1.00000, 0.85490, 0.62353, +1.00000, 0.85882, 0.63529, +1.00000, 0.86275, 0.64706, +1.00000, 0.86667, 0.65882, +1.00000, 0.87059, 0.67059, +1.00000, 0.87451, 0.68235, +1.00000, 0.87843, 0.69412, +1.00000, 0.88235, 0.70588, +1.00000, 0.88627, 0.71765, +1.00000, 0.89020, 0.72941, +1.00000, 0.89412, 0.74118, +1.00000, 0.89804, 0.75294, +1.00000, 0.90196, 0.76471, +1.00000, 0.90588, 0.77647, +1.00000, 0.90980, 0.78824, +1.00000, 0.91373, 0.80000, +1.00000, 0.91765, 0.81176, +1.00000, 0.92157, 0.82353, +1.00000, 0.92549, 0.83529, +1.00000, 0.92941, 0.84706, +1.00000, 0.93333, 0.85882, +1.00000, 0.93725, 0.87059, +1.00000, 0.94118, 0.88235, +1.00000, 0.94510, 0.89412, +1.00000, 0.94902, 0.90588, +1.00000, 0.95294, 0.91765, +1.00000, 0.95686, 0.92941, +1.00000, 0.96078, 0.94118, +1.00000, 0.96471, 0.95294, +1.00000, 0.96863, 0.96471, +1.00000, 0.97255, 0.97647, +1.00000, 0.97647, 0.98824, +1.00000, 0.98039, 1.00000, +1.00000, 0.98431, 1.00000, +1.00000, 0.98824, 1.00000, +1.00000, 0.99216, 1.00000, +1.00000, 0.99608, 1.00000, +1.00000, 1.00000, 1.00000 diff --git a/vendor/x11iraf/ximtool/data/hflip.xbm b/vendor/x11iraf/ximtool/data/hflip.xbm new file mode 100644 index 00000000..44b105bb --- /dev/null +++ b/vendor/x11iraf/ximtool/data/hflip.xbm @@ -0,0 +1,6 @@ +#define hflip_width 16 +#define hflip_height 16 +static char hflip_bits[] = { + 0x00, 0x00, 0x00, 0x00, 0x02, 0x40, 0x02, 0x40, 0x02, 0x40, 0x06, 0x60, + 0x0e, 0x70, 0xfe, 0x7f, 0xfe, 0x7f, 0x0e, 0x70, 0x06, 0x60, 0x02, 0x40, + 0x02, 0x40, 0x02, 0x40, 0x00, 0x00, 0x00, 0x00}; diff --git a/vendor/x11iraf/ximtool/data/larrow.xbm b/vendor/x11iraf/ximtool/data/larrow.xbm new file mode 100644 index 00000000..47272aa6 --- /dev/null +++ b/vendor/x11iraf/ximtool/data/larrow.xbm @@ -0,0 +1,6 @@ +#define larrow_width 16 +#define larrow_height 16 +static char larrow_bits[] = { + 0x00, 0x02, 0x00, 0x03, 0x80, 0x03, 0xc0, 0x1f, 0xe0, 0x1f, 0xf0, 0x1f, + 0xf8, 0x1f, 0xfc, 0x1f, 0xfc, 0x1f, 0xf8, 0x1f, 0xf0, 0x1f, 0xe0, 0x1f, + 0xc0, 0x1f, 0x80, 0x03, 0x00, 0x03, 0x00, 0x02}; diff --git a/vendor/x11iraf/ximtool/data/panel.xbm b/vendor/x11iraf/ximtool/data/panel.xbm new file mode 100644 index 00000000..2b2b99b1 --- /dev/null +++ b/vendor/x11iraf/ximtool/data/panel.xbm @@ -0,0 +1,6 @@ +#define panel_width 16 +#define panel_height 16 +static char panel_bits[] = { + 0x00, 0x00, 0xf8, 0x1f, 0xf8, 0x1f, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, + 0x98, 0x19, 0x98, 0x19, 0x98, 0x19, 0x98, 0x19, 0x98, 0x19, 0x18, 0x18, + 0x18, 0x18, 0x18, 0x18, 0xf8, 0x1f, 0xf8, 0x1f}; diff --git a/vendor/x11iraf/ximtool/data/panel1.xbm b/vendor/x11iraf/ximtool/data/panel1.xbm new file mode 100644 index 00000000..405605c2 --- /dev/null +++ b/vendor/x11iraf/ximtool/data/panel1.xbm @@ -0,0 +1,6 @@ +#define panel1_width 16 +#define panel1_height 16 +static char panel1_bits[] = { + 0x00, 0x00, 0xfc, 0x3f, 0xfc, 0x3f, 0x0c, 0x30, 0x0c, 0x30, 0xcc, 0x33, + 0x4c, 0x32, 0x4c, 0x32, 0x4c, 0x32, 0x4c, 0x32, 0x4c, 0x32, 0xcc, 0x33, + 0x0c, 0x30, 0x0c, 0x30, 0xfc, 0x3f, 0xfc, 0x3f}; diff --git a/vendor/x11iraf/ximtool/data/qmark.xbm b/vendor/x11iraf/ximtool/data/qmark.xbm new file mode 100644 index 00000000..f6edbc04 --- /dev/null +++ b/vendor/x11iraf/ximtool/data/qmark.xbm @@ -0,0 +1,6 @@ +#define qmark_width 16 +#define qmark_height 16 +static char qmark_bits[] = { + 0x00, 0x00, 0x00, 0x00, 0xf0, 0x07, 0xf8, 0x0f, 0x18, 0x0c, 0x18, 0x0c, + 0x18, 0x0e, 0x00, 0x07, 0x80, 0x03, 0x80, 0x01, 0x80, 0x01, 0x00, 0x00, + 0x80, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x00}; diff --git a/vendor/x11iraf/ximtool/data/rainbow.lut b/vendor/x11iraf/ximtool/data/rainbow.lut new file mode 100644 index 00000000..a26cbca6 --- /dev/null +++ b/vendor/x11iraf/ximtool/data/rainbow.lut @@ -0,0 +1,257 @@ +256, +0.00000, 0.00000, 0.16471, +0.02745, 0.00000, 0.18431, +0.05882, 0.00000, 0.20000, +0.08627, 0.00000, 0.21961, +0.11373, 0.00000, 0.23922, +0.14510, 0.00000, 0.25882, +0.17647, 0.00000, 0.27843, +0.20392, 0.00000, 0.29804, +0.23137, 0.00000, 0.31765, +0.26275, 0.00000, 0.33725, +0.29412, 0.00000, 0.35686, +0.32157, 0.00000, 0.37647, +0.35294, 0.00000, 0.39608, +0.38039, 0.00000, 0.41569, +0.41176, 0.00000, 0.43529, +0.43922, 0.00000, 0.45490, +0.47059, 0.00000, 0.47451, +0.49804, 0.00000, 0.49412, +0.52941, 0.00000, 0.51373, +0.55686, 0.00000, 0.53725, +0.58824, 0.00000, 0.55686, +0.55686, 0.00000, 0.57647, +0.52941, 0.00000, 0.59608, +0.49804, 0.00000, 0.61569, +0.47059, 0.00000, 0.63922, +0.43922, 0.00000, 0.65882, +0.41176, 0.00000, 0.67843, +0.38039, 0.00000, 0.70196, +0.35294, 0.00000, 0.72157, +0.32157, 0.00000, 0.74118, +0.29412, 0.00000, 0.76471, +0.26275, 0.00000, 0.78431, +0.23137, 0.00000, 0.80392, +0.20392, 0.00000, 0.82745, +0.17647, 0.00000, 0.84706, +0.14510, 0.00000, 0.87059, +0.11373, 0.00000, 0.89020, +0.08627, 0.00000, 0.91373, +0.05882, 0.00000, 0.93333, +0.02745, 0.00000, 0.95686, +0.00000, 0.00000, 0.97647, +0.00000, 0.00000, 1.00000, +0.00000, 0.02353, 0.97647, +0.00000, 0.04706, 0.95686, +0.00000, 0.06275, 0.93333, +0.00000, 0.08235, 0.91373, +0.00000, 0.09804, 0.89020, +0.00000, 0.11373, 0.87059, +0.00000, 0.12941, 0.84706, +0.00000, 0.14118, 0.82745, +0.00000, 0.15686, 0.80392, +0.00000, 0.16863, 0.78431, +0.00000, 0.18431, 0.76471, +0.00000, 0.19608, 0.74118, +0.00000, 0.21176, 0.72157, +0.00000, 0.22353, 0.70196, +0.00000, 0.23529, 0.67843, +0.00000, 0.25098, 0.65882, +0.00000, 0.26275, 0.63922, +0.00000, 0.27451, 0.61569, +0.00000, 0.28627, 0.59608, +0.00000, 0.29804, 0.57647, +0.00000, 0.30980, 0.55686, +0.00000, 0.32157, 0.53725, +0.00000, 0.33333, 0.51373, +0.00000, 0.34510, 0.49412, +0.00000, 0.35686, 0.47451, +0.00000, 0.36863, 0.45490, +0.00000, 0.38039, 0.43529, +0.00000, 0.39216, 0.41569, +0.00000, 0.40392, 0.39608, +0.00000, 0.41176, 0.37647, +0.00000, 0.42353, 0.35686, +0.00000, 0.43529, 0.33725, +0.00000, 0.44706, 0.31765, +0.00000, 0.45882, 0.29804, +0.00000, 0.46667, 0.27843, +0.00000, 0.47843, 0.25882, +0.00000, 0.49020, 0.23922, +0.00000, 0.49804, 0.21961, +0.00000, 0.50980, 0.20000, +0.00000, 0.52157, 0.18431, +0.00000, 0.52941, 0.16471, +0.00000, 0.54118, 0.14510, +0.00000, 0.55294, 0.12941, +0.00000, 0.56078, 0.10980, +0.00000, 0.57255, 0.09412, +0.00000, 0.58431, 0.07451, +0.00000, 0.59216, 0.05882, +0.00000, 0.60392, 0.04314, +0.00000, 0.61176, 0.02745, +0.00000, 0.62353, 0.01176, +0.00000, 0.63137, 0.00000, +0.00000, 0.64314, 0.00000, +0.00000, 0.65098, 0.00000, +0.00000, 0.66275, 0.00000, +0.00000, 0.67059, 0.00000, +0.00000, 0.68235, 0.00000, +0.00000, 0.69020, 0.00000, +0.00000, 0.70196, 0.00000, +0.00000, 0.70980, 0.00000, +0.00000, 0.72157, 0.00000, +0.00000, 0.72941, 0.00000, +0.00000, 0.74118, 0.00000, +0.00000, 0.74902, 0.00000, +0.00000, 0.76078, 0.00000, +0.00000, 0.76863, 0.00000, +0.00000, 0.77647, 0.00000, +0.00000, 0.78824, 0.00000, +0.00000, 0.79608, 0.00000, +0.00000, 0.80784, 0.00000, +0.00000, 0.81569, 0.00000, +0.00000, 0.82353, 0.00000, +0.00000, 0.83529, 0.00000, +0.00000, 0.84314, 0.00000, +0.00000, 0.85490, 0.00000, +0.00000, 0.86275, 0.00000, +0.00000, 0.87059, 0.00000, +0.00000, 0.88235, 0.00000, +0.00000, 0.89020, 0.00000, +0.00000, 0.89804, 0.00000, +0.00000, 0.90980, 0.00000, +0.00000, 0.91765, 0.00000, +0.00000, 0.92549, 0.00000, +0.00000, 0.93725, 0.00000, +0.00000, 0.94510, 0.00000, +0.00000, 0.95294, 0.00000, +0.00000, 0.96078, 0.00000, +0.00000, 0.97255, 0.00000, +0.00000, 0.98039, 0.00000, +0.00000, 0.98824, 0.00000, +0.00000, 1.00000, 0.00000, +0.00000, 0.98824, 0.00000, +0.00000, 0.98039, 0.00000, +0.00000, 0.97255, 0.00000, +0.00000, 0.96078, 0.00000, +0.00000, 0.95294, 0.00000, +0.00000, 0.94510, 0.00000, +0.00000, 0.93725, 0.00000, +0.00000, 0.92549, 0.00000, +0.00000, 0.91765, 0.00000, +0.00000, 0.90980, 0.00000, +0.00000, 0.89804, 0.00000, +0.00000, 0.89020, 0.00000, +0.00000, 0.88235, 0.00000, +0.00000, 0.87059, 0.00000, +0.00000, 0.86275, 0.00000, +0.00000, 0.85490, 0.00000, +0.00000, 0.84314, 0.00000, +0.00000, 0.83529, 0.00000, +0.00000, 0.82353, 0.00000, +0.00000, 0.81569, 0.00000, +0.00000, 0.80784, 0.00000, +0.00000, 0.79608, 0.00000, +0.00000, 0.78824, 0.00000, +0.00000, 0.77647, 0.00000, +0.00784, 0.76863, 0.00000, +0.03529, 0.77647, 0.00000, +0.06667, 0.78824, 0.00000, +0.09804, 0.80000, 0.00000, +0.12941, 0.81176, 0.00000, +0.16471, 0.82745, 0.00000, +0.20000, 0.84314, 0.00000, +0.23529, 0.85882, 0.00000, +0.26667, 0.87059, 0.00000, +0.30588, 0.89020, 0.00000, +0.34118, 0.90196, 0.00000, +0.37647, 0.92157, 0.00000, +0.41176, 0.93333, 0.00000, +0.44706, 0.95294, 0.00000, +0.48627, 0.96863, 0.00000, +0.52157, 0.98824, 0.00000, +0.56078, 1.00000, 0.00000, +0.59608, 1.00000, 0.00000, +0.63529, 1.00000, 0.00000, +0.67059, 1.00000, 0.00000, +0.70980, 1.00000, 0.00000, +0.74902, 1.00000, 0.00000, +0.78431, 1.00000, 0.00000, +0.82353, 1.00000, 0.00000, +0.85882, 1.00000, 0.00000, +0.89804, 1.00000, 0.00000, +0.93333, 1.00000, 0.00000, +0.97647, 1.00000, 0.00000, +1.00000, 1.00000, 0.00000, +1.00000, 1.00000, 0.00000, +1.00000, 1.00000, 0.00000, +1.00000, 1.00000, 0.00000, +1.00000, 1.00000, 0.00000, +1.00000, 1.00000, 0.00000, +1.00000, 1.00000, 0.00000, +0.99608, 1.00000, 0.00000, +0.98039, 1.00000, 0.00000, +0.96078, 0.97647, 0.00000, +0.94510, 0.93725, 0.00000, +0.92549, 0.89804, 0.00000, +0.90980, 0.85882, 0.00000, +0.89412, 0.81961, 0.00000, +0.87451, 0.78039, 0.00000, +0.85882, 0.74118, 0.00000, +0.83922, 0.70196, 0.00000, +0.82353, 0.66275, 0.00000, +0.80392, 0.62353, 0.00000, +0.78824, 0.58431, 0.00000, +0.76863, 0.54510, 0.00000, +0.75686, 0.50980, 0.00000, +0.74118, 0.46667, 0.00000, +0.72549, 0.43137, 0.00000, +0.70980, 0.39216, 0.00000, +0.69412, 0.35294, 0.00000, +0.68235, 0.31765, 0.00000, +0.66275, 0.27451, 0.00000, +0.65098, 0.23922, 0.00000, +0.63529, 0.20000, 0.00000, +0.62745, 0.16863, 0.00000, +0.61569, 0.12941, 0.00000, +0.60784, 0.09804, 0.00000, +0.61961, 0.08235, 0.00000, +0.62745, 0.06275, 0.00000, +0.63922, 0.04706, 0.00000, +0.64706, 0.02353, 0.00000, +0.65882, 0.00000, 0.00000, +0.66667, 0.00000, 0.00000, +0.67843, 0.00000, 0.00000, +0.68627, 0.00000, 0.00000, +0.69804, 0.00000, 0.00000, +0.70980, 0.00000, 0.00000, +0.71765, 0.00000, 0.00000, +0.72941, 0.00000, 0.00000, +0.73725, 0.00000, 0.00000, +0.74902, 0.00000, 0.00000, +0.75686, 0.00000, 0.00000, +0.76863, 0.00000, 0.00000, +0.77647, 0.00000, 0.00000, +0.78824, 0.00000, 0.00000, +0.80000, 0.00784, 0.00784, +0.80784, 0.02745, 0.02745, +0.81961, 0.05098, 0.05098, +0.82745, 0.08235, 0.08235, +0.83922, 0.11373, 0.11373, +0.84706, 0.14902, 0.14902, +0.85882, 0.19216, 0.19216, +0.86667, 0.23137, 0.23137, +0.87843, 0.27843, 0.27843, +0.88627, 0.32549, 0.32549, +0.89804, 0.37647, 0.37647, +0.90980, 0.43137, 0.43137, +0.91765, 0.48627, 0.48627, +0.92941, 0.54118, 0.54118, +0.93725, 0.60000, 0.60000, +0.94902, 0.66275, 0.66275, +0.95686, 0.72549, 0.72549, +0.96863, 0.79216, 0.79216, +0.97647, 0.85882, 0.85882, +0.98824, 0.92941, 0.92941, +1.00000, 1.00000, 1.00000 diff --git a/vendor/x11iraf/ximtool/data/rarrow.xbm b/vendor/x11iraf/ximtool/data/rarrow.xbm new file mode 100644 index 00000000..ef327106 --- /dev/null +++ b/vendor/x11iraf/ximtool/data/rarrow.xbm @@ -0,0 +1,6 @@ +#define rarrow_width 16 +#define rarrow_height 16 +static char rarrow_bits[] = { + 0x40, 0x00, 0xc0, 0x00, 0xc0, 0x01, 0xf8, 0x03, 0xf8, 0x07, 0xf8, 0x0f, + 0xf8, 0x1f, 0xf8, 0x3f, 0xf8, 0x3f, 0xf8, 0x1f, 0xf8, 0x0f, 0xf8, 0x07, + 0xf8, 0x03, 0xc0, 0x01, 0xc0, 0x00, 0x40, 0x00}; diff --git a/vendor/x11iraf/ximtool/data/red.lut b/vendor/x11iraf/ximtool/data/red.lut new file mode 100644 index 00000000..0af15037 --- /dev/null +++ b/vendor/x11iraf/ximtool/data/red.lut @@ -0,0 +1,257 @@ +256, +0.00000, 0.00000, 0.00000, +0.00392, 0.00000, 0.00000, +0.00784, 0.00000, 0.00000, +0.01176, 0.00000, 0.00000, +0.01569, 0.00000, 0.00000, +0.01961, 0.00000, 0.00000, +0.02353, 0.00000, 0.00000, +0.02745, 0.00000, 0.00000, +0.03137, 0.00000, 0.00000, +0.03529, 0.00000, 0.00000, +0.03922, 0.00000, 0.00000, +0.04314, 0.00000, 0.00000, +0.04706, 0.00000, 0.00000, +0.05098, 0.00000, 0.00000, +0.05490, 0.00000, 0.00000, +0.05882, 0.00000, 0.00000, +0.06275, 0.00000, 0.00000, +0.06667, 0.00000, 0.00000, +0.07059, 0.00000, 0.00000, +0.07451, 0.00000, 0.00000, +0.07843, 0.00000, 0.00000, +0.08235, 0.00000, 0.00000, +0.08627, 0.00000, 0.00000, +0.09020, 0.00000, 0.00000, +0.09412, 0.00000, 0.00000, +0.09804, 0.00000, 0.00000, +0.10196, 0.00000, 0.00000, +0.10588, 0.00000, 0.00000, +0.10980, 0.00000, 0.00000, +0.11373, 0.00000, 0.00000, +0.11765, 0.00000, 0.00000, +0.12157, 0.00000, 0.00000, +0.12549, 0.00000, 0.00000, +0.12941, 0.00000, 0.00000, +0.13333, 0.00000, 0.00000, +0.13725, 0.00000, 0.00000, +0.14118, 0.00000, 0.00000, +0.14510, 0.00000, 0.00000, +0.14902, 0.00000, 0.00000, +0.15294, 0.00000, 0.00000, +0.15686, 0.00000, 0.00000, +0.16078, 0.00000, 0.00000, +0.16471, 0.00000, 0.00000, +0.16863, 0.00000, 0.00000, +0.17255, 0.00000, 0.00000, +0.17647, 0.00000, 0.00000, +0.18039, 0.00000, 0.00000, +0.18431, 0.00000, 0.00000, +0.18824, 0.00000, 0.00000, +0.19216, 0.00000, 0.00000, +0.19608, 0.00000, 0.00000, +0.20000, 0.00000, 0.00000, +0.20392, 0.00000, 0.00000, +0.20784, 0.00000, 0.00000, +0.21176, 0.00000, 0.00000, +0.21569, 0.00000, 0.00000, +0.21961, 0.00000, 0.00000, +0.22353, 0.00000, 0.00000, +0.22745, 0.00000, 0.00000, +0.23137, 0.00000, 0.00000, +0.23529, 0.00000, 0.00000, +0.23922, 0.00000, 0.00000, +0.24314, 0.00000, 0.00000, +0.24706, 0.00000, 0.00000, +0.25098, 0.00000, 0.00000, +0.25490, 0.00000, 0.00000, +0.25882, 0.00000, 0.00000, +0.26275, 0.00000, 0.00000, +0.26667, 0.00000, 0.00000, +0.27059, 0.00000, 0.00000, +0.27451, 0.00000, 0.00000, +0.27843, 0.00000, 0.00000, +0.28235, 0.00000, 0.00000, +0.28627, 0.00000, 0.00000, +0.29020, 0.00000, 0.00000, +0.29412, 0.00000, 0.00000, +0.29804, 0.00000, 0.00000, +0.30196, 0.00000, 0.00000, +0.30588, 0.00000, 0.00000, +0.30980, 0.00000, 0.00000, +0.31373, 0.00000, 0.00000, +0.31765, 0.00000, 0.00000, +0.32157, 0.00000, 0.00000, +0.32549, 0.00000, 0.00000, +0.32941, 0.00000, 0.00000, +0.33333, 0.00000, 0.00000, +0.33725, 0.00000, 0.00000, +0.34118, 0.00000, 0.00000, +0.34510, 0.00000, 0.00000, +0.34902, 0.00000, 0.00000, +0.35294, 0.00000, 0.00000, +0.35686, 0.00000, 0.00000, +0.36078, 0.00000, 0.00000, +0.36471, 0.00000, 0.00000, +0.36863, 0.00000, 0.00000, +0.37255, 0.00000, 0.00000, +0.37647, 0.00000, 0.00000, +0.38039, 0.00000, 0.00000, +0.38431, 0.00000, 0.00000, +0.38824, 0.00000, 0.00000, +0.39216, 0.00000, 0.00000, +0.39608, 0.00000, 0.00000, +0.40000, 0.00000, 0.00000, +0.40392, 0.00000, 0.00000, +0.40784, 0.00000, 0.00000, +0.41176, 0.00000, 0.00000, +0.41569, 0.00000, 0.00000, +0.41961, 0.00000, 0.00000, +0.42353, 0.00000, 0.00000, +0.42745, 0.00000, 0.00000, +0.43137, 0.00000, 0.00000, +0.43529, 0.00000, 0.00000, +0.43922, 0.00000, 0.00000, +0.44314, 0.00000, 0.00000, +0.44706, 0.00000, 0.00000, +0.45098, 0.00000, 0.00000, +0.45490, 0.00000, 0.00000, +0.45882, 0.00000, 0.00000, +0.46275, 0.00000, 0.00000, +0.46667, 0.00000, 0.00000, +0.47059, 0.00000, 0.00000, +0.47451, 0.00000, 0.00000, +0.47843, 0.00000, 0.00000, +0.48235, 0.00000, 0.00000, +0.48627, 0.00000, 0.00000, +0.49020, 0.00000, 0.00000, +0.49412, 0.00000, 0.00000, +0.49804, 0.00000, 0.00000, +0.50196, 0.00000, 0.00000, +0.50588, 0.00000, 0.00000, +0.50980, 0.00000, 0.00000, +0.51373, 0.00000, 0.00000, +0.51765, 0.00000, 0.00000, +0.52157, 0.00000, 0.00000, +0.52549, 0.00000, 0.00000, +0.52941, 0.00000, 0.00000, +0.53333, 0.00000, 0.00000, +0.53725, 0.00000, 0.00000, +0.54118, 0.00000, 0.00000, +0.54510, 0.00000, 0.00000, +0.54902, 0.00000, 0.00000, +0.55294, 0.00000, 0.00000, +0.55686, 0.00000, 0.00000, +0.56078, 0.00000, 0.00000, +0.56471, 0.00000, 0.00000, +0.56863, 0.00000, 0.00000, +0.57255, 0.00000, 0.00000, +0.57647, 0.00000, 0.00000, +0.58039, 0.00000, 0.00000, +0.58431, 0.00000, 0.00000, +0.58824, 0.00000, 0.00000, +0.59216, 0.00000, 0.00000, +0.59608, 0.00000, 0.00000, +0.60000, 0.00000, 0.00000, +0.60392, 0.00000, 0.00000, +0.60784, 0.00000, 0.00000, +0.61176, 0.00000, 0.00000, +0.61569, 0.00000, 0.00000, +0.61961, 0.00000, 0.00000, +0.62353, 0.00000, 0.00000, +0.62745, 0.00000, 0.00000, +0.63137, 0.00000, 0.00000, +0.63529, 0.00000, 0.00000, +0.63922, 0.00000, 0.00000, +0.64314, 0.00000, 0.00000, +0.64706, 0.00000, 0.00000, +0.65098, 0.00000, 0.00000, +0.65490, 0.00000, 0.00000, +0.65882, 0.00000, 0.00000, +0.66275, 0.00000, 0.00000, +0.66667, 0.00000, 0.00000, +0.67059, 0.00000, 0.00000, +0.67451, 0.00000, 0.00000, +0.67843, 0.00000, 0.00000, +0.68235, 0.00000, 0.00000, +0.68627, 0.00000, 0.00000, +0.69020, 0.00000, 0.00000, +0.69412, 0.00000, 0.00000, +0.69804, 0.00000, 0.00000, +0.70196, 0.00000, 0.00000, +0.70588, 0.00000, 0.00000, +0.70980, 0.00000, 0.00000, +0.71373, 0.00000, 0.00000, +0.71765, 0.00000, 0.00000, +0.72157, 0.00000, 0.00000, +0.72549, 0.00000, 0.00000, +0.72941, 0.00000, 0.00000, +0.73333, 0.00000, 0.00000, +0.73725, 0.00000, 0.00000, +0.74118, 0.00000, 0.00000, +0.74510, 0.00000, 0.00000, +0.74902, 0.00000, 0.00000, +0.75294, 0.00000, 0.00000, +0.75686, 0.00000, 0.00000, +0.76078, 0.00000, 0.00000, +0.76471, 0.00000, 0.00000, +0.76863, 0.00000, 0.00000, +0.77255, 0.00000, 0.00000, +0.77647, 0.00000, 0.00000, +0.78039, 0.00000, 0.00000, +0.78431, 0.00000, 0.00000, +0.78824, 0.00000, 0.00000, +0.79216, 0.00000, 0.00000, +0.79608, 0.00000, 0.00000, +0.80000, 0.00000, 0.00000, +0.80392, 0.00000, 0.00000, +0.80784, 0.00000, 0.00000, +0.81176, 0.00000, 0.00000, +0.81569, 0.00000, 0.00000, +0.81961, 0.00000, 0.00000, +0.82353, 0.00000, 0.00000, +0.82745, 0.00000, 0.00000, +0.83137, 0.00000, 0.00000, +0.83529, 0.00000, 0.00000, +0.83922, 0.00000, 0.00000, +0.84314, 0.00000, 0.00000, +0.84706, 0.00000, 0.00000, +0.85098, 0.00000, 0.00000, +0.85490, 0.00000, 0.00000, +0.85882, 0.00000, 0.00000, +0.86275, 0.00000, 0.00000, +0.86667, 0.00000, 0.00000, +0.87059, 0.00000, 0.00000, +0.87451, 0.00000, 0.00000, +0.87843, 0.00000, 0.00000, +0.88235, 0.00000, 0.00000, +0.88627, 0.00000, 0.00000, +0.89020, 0.00000, 0.00000, +0.89412, 0.00000, 0.00000, +0.89804, 0.00000, 0.00000, +0.90196, 0.00000, 0.00000, +0.90588, 0.00000, 0.00000, +0.90980, 0.00000, 0.00000, +0.91373, 0.00000, 0.00000, +0.91765, 0.00000, 0.00000, +0.92157, 0.00000, 0.00000, +0.92549, 0.00000, 0.00000, +0.92941, 0.00000, 0.00000, +0.93333, 0.00000, 0.00000, +0.93725, 0.00000, 0.00000, +0.94118, 0.00000, 0.00000, +0.94510, 0.00000, 0.00000, +0.94902, 0.00000, 0.00000, +0.95294, 0.00000, 0.00000, +0.95686, 0.00000, 0.00000, +0.96078, 0.00000, 0.00000, +0.96471, 0.00000, 0.00000, +0.96863, 0.00000, 0.00000, +0.97255, 0.00000, 0.00000, +0.97647, 0.00000, 0.00000, +0.98039, 0.00000, 0.00000, +0.98431, 0.00000, 0.00000, +0.98824, 0.00000, 0.00000, +0.99216, 0.00000, 0.00000, +0.99608, 0.00000, 0.00392, +1.00000, 0.00000, 0.00784 diff --git a/vendor/x11iraf/ximtool/data/solid.xbm b/vendor/x11iraf/ximtool/data/solid.xbm new file mode 100644 index 00000000..4e24b3a0 --- /dev/null +++ b/vendor/x11iraf/ximtool/data/solid.xbm @@ -0,0 +1,19 @@ +#define solid_width 64 +#define solid_height 24 +static char solid_bits[] = { + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 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, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; diff --git a/vendor/x11iraf/ximtool/data/staircase.lut b/vendor/x11iraf/ximtool/data/staircase.lut new file mode 100644 index 00000000..88e84057 --- /dev/null +++ b/vendor/x11iraf/ximtool/data/staircase.lut @@ -0,0 +1,257 @@ +256, +0.00392, 0.00392, 0.31373, +0.00784, 0.00784, 0.31373, +0.01176, 0.01176, 0.31373, +0.01569, 0.01569, 0.31373, +0.01961, 0.01961, 0.31373, +0.02353, 0.02353, 0.31373, +0.02745, 0.02745, 0.31373, +0.03137, 0.03137, 0.31373, +0.03529, 0.03529, 0.31373, +0.03922, 0.03922, 0.31373, +0.04314, 0.04314, 0.31373, +0.04706, 0.04706, 0.31373, +0.05098, 0.05098, 0.31373, +0.05490, 0.05490, 0.31373, +0.05882, 0.05882, 0.31373, +0.06275, 0.06275, 0.31373, +0.06667, 0.06667, 0.47059, +0.07059, 0.07059, 0.47059, +0.07451, 0.07451, 0.47059, +0.07843, 0.07843, 0.47059, +0.08235, 0.08235, 0.47059, +0.08627, 0.08627, 0.47059, +0.09020, 0.09020, 0.47059, +0.09412, 0.09412, 0.47059, +0.09804, 0.09804, 0.47059, +0.10196, 0.10196, 0.47059, +0.10588, 0.10588, 0.47059, +0.10980, 0.10980, 0.47059, +0.11373, 0.11373, 0.47059, +0.11765, 0.11765, 0.47059, +0.12157, 0.12157, 0.47059, +0.12549, 0.12549, 0.47059, +0.12941, 0.12941, 0.62745, +0.13333, 0.13333, 0.62745, +0.13725, 0.13725, 0.62745, +0.14118, 0.14118, 0.62745, +0.14510, 0.14510, 0.62745, +0.14902, 0.14902, 0.62745, +0.15294, 0.15294, 0.62745, +0.15686, 0.15686, 0.62745, +0.16078, 0.16078, 0.62745, +0.16471, 0.16471, 0.62745, +0.16863, 0.16863, 0.62745, +0.17255, 0.17255, 0.62745, +0.17647, 0.17647, 0.62745, +0.18039, 0.18039, 0.62745, +0.18431, 0.18431, 0.62745, +0.18824, 0.18824, 0.62745, +0.19216, 0.19216, 0.78431, +0.19608, 0.19608, 0.78431, +0.20000, 0.20000, 0.78431, +0.20392, 0.20392, 0.78431, +0.20784, 0.20784, 0.78431, +0.21176, 0.21176, 0.78431, +0.21569, 0.21569, 0.78431, +0.21961, 0.21961, 0.78431, +0.22353, 0.22353, 0.78431, +0.22745, 0.22745, 0.78431, +0.23137, 0.23137, 0.78431, +0.23529, 0.23529, 0.78431, +0.23922, 0.23922, 0.78431, +0.24314, 0.24314, 0.78431, +0.24706, 0.24706, 0.78431, +0.25098, 0.25098, 0.78431, +0.25490, 0.25490, 0.94118, +0.25882, 0.25882, 0.94118, +0.26275, 0.26275, 0.94118, +0.26667, 0.26667, 0.94118, +0.27059, 0.27059, 0.94118, +0.27451, 0.27451, 0.94118, +0.27843, 0.27843, 0.94118, +0.28235, 0.28235, 0.94118, +0.28627, 0.28627, 0.94118, +0.29020, 0.29020, 0.94118, +0.29412, 0.29412, 0.94118, +0.29804, 0.29804, 0.94118, +0.30196, 0.30196, 0.94118, +0.30588, 0.30588, 0.94118, +0.30980, 0.30980, 0.94118, +0.31373, 0.31373, 0.94118, +0.31765, 0.31765, 0.95294, +0.32157, 0.32157, 0.96471, +0.32549, 0.32549, 0.97647, +0.32941, 0.32941, 0.98824, +0.33333, 0.33333, 1.00000, +0.00392, 0.31373, 0.00392, +0.00784, 0.31373, 0.00784, +0.01176, 0.31373, 0.01176, +0.01569, 0.31373, 0.01569, +0.01961, 0.31373, 0.01961, +0.02353, 0.31373, 0.02353, +0.02745, 0.31373, 0.02745, +0.03137, 0.31373, 0.03137, +0.03529, 0.31373, 0.03529, +0.03922, 0.31373, 0.03922, +0.04314, 0.31373, 0.04314, +0.04706, 0.31373, 0.04706, +0.05098, 0.31373, 0.05098, +0.05490, 0.31373, 0.05490, +0.05882, 0.31373, 0.05882, +0.06275, 0.31373, 0.06275, +0.06667, 0.47059, 0.06667, +0.07059, 0.47059, 0.07059, +0.07451, 0.47059, 0.07451, +0.07843, 0.47059, 0.07843, +0.08235, 0.47059, 0.08235, +0.08627, 0.47059, 0.08627, +0.09020, 0.47059, 0.09020, +0.09412, 0.47059, 0.09412, +0.09804, 0.47059, 0.09804, +0.10196, 0.47059, 0.10196, +0.10588, 0.47059, 0.10588, +0.10980, 0.47059, 0.10980, +0.11373, 0.47059, 0.11373, +0.11765, 0.47059, 0.11765, +0.12157, 0.47059, 0.12157, +0.12549, 0.47059, 0.12549, +0.12941, 0.62745, 0.12941, +0.13333, 0.62745, 0.13333, +0.13725, 0.62745, 0.13725, +0.14118, 0.62745, 0.14118, +0.14510, 0.62745, 0.14510, +0.14902, 0.62745, 0.14902, +0.15294, 0.62745, 0.15294, +0.15686, 0.62745, 0.15686, +0.16078, 0.62745, 0.16078, +0.16471, 0.62745, 0.16471, +0.16863, 0.62745, 0.16863, +0.17255, 0.62745, 0.17255, +0.17647, 0.62745, 0.17647, +0.18039, 0.62745, 0.18039, +0.18431, 0.62745, 0.18431, +0.18824, 0.62745, 0.18824, +0.19216, 0.78431, 0.19216, +0.19608, 0.78431, 0.19608, +0.20000, 0.78431, 0.20000, +0.20392, 0.78431, 0.20392, +0.20784, 0.78431, 0.20784, +0.21176, 0.78431, 0.21176, +0.21569, 0.78431, 0.21569, +0.21961, 0.78431, 0.21961, +0.22353, 0.78431, 0.22353, +0.22745, 0.78431, 0.22745, +0.23137, 0.78431, 0.23137, +0.23529, 0.78431, 0.23529, +0.23922, 0.78431, 0.23922, +0.24314, 0.78431, 0.24314, +0.24706, 0.78431, 0.24706, +0.25098, 0.78431, 0.25098, +0.25490, 0.94118, 0.25490, +0.25882, 0.94118, 0.25882, +0.26275, 0.94118, 0.26275, +0.26667, 0.94118, 0.26667, +0.27059, 0.94118, 0.27059, +0.27451, 0.94118, 0.27451, +0.27843, 0.94118, 0.27843, +0.28235, 0.94118, 0.28235, +0.28627, 0.94118, 0.28627, +0.29020, 0.94118, 0.29020, +0.29412, 0.94118, 0.29412, +0.29804, 0.94118, 0.29804, +0.30196, 0.94118, 0.30196, +0.30588, 0.94118, 0.30588, +0.30980, 0.94118, 0.30980, +0.31373, 0.94118, 0.31373, +0.31765, 0.95294, 0.31765, +0.32157, 0.96471, 0.32157, +0.32549, 0.97647, 0.32549, +0.32941, 0.98824, 0.32941, +0.33333, 1.00000, 0.33333, +0.31373, 0.00392, 0.00392, +0.31373, 0.00784, 0.00784, +0.31373, 0.01176, 0.01176, +0.31373, 0.01569, 0.01569, +0.31373, 0.01961, 0.01961, +0.31373, 0.02353, 0.02353, +0.31373, 0.02745, 0.02745, +0.31373, 0.03137, 0.03137, +0.31373, 0.03529, 0.03529, +0.31373, 0.03922, 0.03922, +0.31373, 0.04314, 0.04314, +0.31373, 0.04706, 0.04706, +0.31373, 0.05098, 0.05098, +0.31373, 0.05490, 0.05490, +0.31373, 0.05882, 0.05882, +0.31373, 0.06275, 0.06275, +0.47059, 0.06667, 0.06667, +0.47059, 0.07059, 0.07059, +0.47059, 0.07451, 0.07451, +0.47059, 0.07843, 0.07843, +0.47059, 0.08235, 0.08235, +0.47059, 0.08627, 0.08627, +0.47059, 0.09020, 0.09020, +0.47059, 0.09412, 0.09412, +0.47059, 0.09804, 0.09804, +0.47059, 0.10196, 0.10196, +0.47059, 0.10588, 0.10588, +0.47059, 0.10980, 0.10980, +0.47059, 0.11373, 0.11373, +0.47059, 0.11765, 0.11765, +0.47059, 0.12157, 0.12157, +0.47059, 0.12549, 0.12549, +0.62745, 0.12941, 0.12941, +0.62745, 0.13333, 0.13333, +0.62745, 0.13725, 0.13725, +0.62745, 0.14118, 0.14118, +0.62745, 0.14510, 0.14510, +0.62745, 0.14902, 0.14902, +0.62745, 0.15294, 0.15294, +0.62745, 0.15686, 0.15686, +0.62745, 0.16078, 0.16078, +0.62745, 0.16471, 0.16471, +0.62745, 0.16863, 0.16863, +0.62745, 0.17255, 0.17255, +0.62745, 0.17647, 0.17647, +0.62745, 0.18039, 0.18039, +0.62745, 0.18431, 0.18431, +0.62745, 0.18824, 0.18824, +0.78431, 0.19216, 0.19216, +0.78431, 0.19608, 0.19608, +0.78431, 0.20000, 0.20000, +0.78431, 0.20392, 0.20392, +0.78431, 0.20784, 0.20784, +0.78431, 0.21176, 0.21176, +0.78431, 0.21569, 0.21569, +0.78431, 0.21961, 0.21961, +0.78431, 0.22353, 0.22353, +0.78431, 0.22745, 0.22745, +0.78431, 0.23137, 0.23137, +0.78431, 0.23529, 0.23529, +0.78431, 0.23922, 0.23922, +0.78431, 0.24314, 0.24314, +0.78431, 0.24706, 0.24706, +0.78431, 0.25098, 0.25098, +0.94118, 0.25490, 0.25490, +0.94118, 0.25882, 0.25882, +0.94118, 0.26275, 0.26275, +0.94118, 0.26667, 0.26667, +0.94118, 0.27059, 0.27059, +0.94118, 0.27451, 0.27451, +0.94118, 0.27843, 0.27843, +0.94118, 0.28235, 0.28235, +0.94118, 0.28627, 0.28627, +0.94118, 0.29020, 0.29020, +0.94118, 0.29412, 0.29412, +0.94118, 0.29804, 0.29804, +0.94118, 0.30196, 0.30196, +0.94118, 0.30588, 0.30588, +0.94118, 0.30980, 0.30980, +0.94118, 0.31373, 0.31373, +0.94902, 0.39216, 0.39216, +0.96078, 0.52941, 0.52941, +0.97255, 0.66667, 0.66667, +0.98431, 0.80392, 0.80392, +0.99216, 0.80000, 0.80000, +1.00000, 1.00000, 1.00000 diff --git a/vendor/x11iraf/ximtool/data/standard.lut b/vendor/x11iraf/ximtool/data/standard.lut new file mode 100644 index 00000000..f77dcf02 --- /dev/null +++ b/vendor/x11iraf/ximtool/data/standard.lut @@ -0,0 +1,257 @@ +256, +0.00392, 0.00392, 0.33333, +0.00784, 0.00784, 0.34118, +0.01176, 0.01176, 0.34902, +0.01569, 0.01569, 0.35686, +0.01961, 0.01961, 0.36471, +0.02353, 0.02353, 0.37255, +0.02745, 0.02745, 0.38039, +0.03137, 0.03137, 0.38824, +0.03529, 0.03529, 0.39608, +0.03922, 0.03922, 0.40392, +0.04314, 0.04314, 0.41176, +0.04706, 0.04706, 0.41961, +0.05098, 0.05098, 0.42745, +0.05490, 0.05490, 0.43529, +0.05882, 0.05882, 0.44314, +0.06275, 0.06275, 0.45098, +0.06667, 0.06667, 0.45882, +0.07059, 0.07059, 0.46667, +0.07451, 0.07451, 0.47451, +0.07843, 0.07843, 0.48235, +0.08235, 0.08235, 0.49020, +0.08627, 0.08627, 0.49804, +0.09020, 0.09020, 0.50588, +0.09412, 0.09412, 0.51373, +0.09804, 0.09804, 0.52157, +0.10196, 0.10196, 0.52941, +0.10588, 0.10588, 0.53725, +0.10980, 0.10980, 0.54510, +0.11373, 0.11373, 0.55294, +0.11765, 0.11765, 0.56078, +0.12157, 0.12157, 0.56863, +0.12549, 0.12549, 0.57647, +0.12941, 0.12941, 0.58431, +0.13333, 0.13333, 0.59210, +0.13725, 0.13725, 0.60000, +0.14118, 0.14118, 0.60784, +0.14510, 0.14510, 0.61569, +0.14902, 0.14902, 0.62353, +0.15294, 0.15294, 0.63137, +0.15686, 0.15686, 0.63922, +0.16078, 0.16078, 0.64706, +0.16471, 0.16471, 0.65490, +0.16863, 0.16863, 0.66275, +0.17255, 0.17255, 0.67059, +0.17647, 0.17647, 0.67843, +0.18039, 0.18039, 0.68627, +0.18431, 0.18431, 0.69412, +0.18824, 0.18824, 0.70196, +0.19216, 0.19216, 0.70980, +0.19608, 0.19608, 0.71765, +0.20000, 0.20000, 0.72549, +0.20392, 0.20392, 0.73333, +0.20784, 0.20784, 0.74118, +0.21176, 0.21176, 0.74902, +0.21569, 0.21569, 0.75686, +0.21961, 0.21961, 0.76471, +0.22353, 0.22353, 0.77255, +0.22745, 0.22745, 0.78039, +0.23137, 0.23137, 0.78824, +0.23529, 0.23529, 0.79608, +0.23922, 0.23922, 0.80392, +0.24314, 0.24314, 0.81176, +0.24706, 0.24706, 0.81961, +0.25098, 0.25098, 0.82745, +0.25490, 0.25490, 0.83529, +0.25882, 0.25882, 0.84314, +0.26275, 0.26275, 0.85098, +0.26667, 0.26667, 0.85882, +0.27059, 0.27059, 0.86667, +0.27451, 0.27451, 0.87451, +0.27843, 0.27843, 0.88235, +0.28235, 0.28235, 0.89020, +0.28627, 0.28627, 0.89804, +0.29020, 0.29020, 0.90588, +0.29412, 0.29412, 0.91373, +0.29804, 0.29804, 0.92157, +0.30196, 0.30196, 0.92941, +0.30588, 0.30588, 0.93725, +0.30980, 0.30980, 0.94510, +0.31373, 0.31373, 0.95294, +0.31765, 0.31765, 0.96078, +0.32157, 0.32157, 0.96863, +0.32549, 0.32549, 0.97647, +0.32941, 0.32941, 0.98431, +0.33333, 0.33333, 0.99216, +0.00392, 0.33333, 0.00392, +0.00784, 0.34118, 0.00784, +0.01176, 0.34902, 0.01176, +0.01569, 0.35686, 0.01569, +0.01961, 0.36471, 0.01961, +0.02353, 0.37255, 0.02353, +0.02745, 0.38039, 0.02745, +0.03137, 0.38824, 0.03137, +0.03529, 0.39608, 0.03529, +0.03922, 0.40392, 0.03922, +0.04314, 0.41176, 0.04314, +0.04706, 0.41961, 0.04706, +0.05098, 0.42745, 0.05098, +0.05490, 0.43529, 0.05490, +0.05882, 0.44314, 0.05882, +0.06275, 0.45098, 0.06275, +0.06667, 0.45882, 0.06667, +0.07059, 0.46667, 0.07059, +0.07451, 0.47451, 0.07451, +0.07843, 0.48235, 0.07843, +0.08235, 0.49020, 0.08235, +0.08627, 0.49804, 0.08627, +0.09020, 0.50588, 0.09020, +0.09412, 0.51373, 0.09412, +0.09804, 0.52157, 0.09804, +0.10196, 0.52941, 0.10196, +0.10588, 0.53725, 0.10588, +0.10980, 0.54510, 0.10980, +0.11373, 0.55294, 0.11373, +0.11765, 0.56078, 0.11765, +0.12157, 0.56863, 0.12157, +0.12549, 0.57647, 0.12549, +0.12941, 0.58431, 0.12941, +0.13333, 0.59210, 0.13333, +0.13725, 0.60000, 0.13725, +0.14118, 0.60784, 0.14118, +0.14510, 0.61569, 0.14510, +0.14902, 0.62353, 0.14902, +0.15294, 0.63137, 0.15294, +0.15686, 0.63922, 0.15686, +0.16078, 0.64706, 0.16078, +0.16471, 0.65490, 0.16471, +0.16863, 0.66275, 0.16863, +0.17255, 0.67059, 0.17255, +0.17647, 0.67843, 0.17647, +0.18039, 0.68627, 0.18039, +0.18431, 0.69412, 0.18431, +0.18824, 0.70196, 0.18824, +0.19216, 0.70980, 0.19216, +0.19608, 0.71765, 0.19608, +0.20000, 0.72549, 0.20000, +0.20392, 0.73333, 0.20392, +0.20784, 0.74118, 0.20784, +0.21176, 0.74902, 0.21176, +0.21569, 0.75686, 0.21569, +0.21961, 0.76471, 0.21961, +0.22353, 0.77255, 0.22353, +0.22745, 0.78039, 0.22745, +0.23137, 0.78824, 0.23137, +0.23529, 0.79608, 0.23529, +0.23922, 0.80392, 0.23922, +0.24314, 0.81176, 0.24314, +0.24706, 0.81961, 0.24706, +0.25098, 0.82745, 0.25098, +0.25490, 0.83529, 0.25490, +0.25882, 0.84314, 0.25882, +0.26275, 0.85098, 0.26275, +0.26667, 0.85882, 0.26667, +0.27059, 0.86667, 0.27059, +0.27451, 0.87451, 0.27451, +0.27843, 0.88235, 0.27843, +0.28235, 0.89020, 0.28235, +0.28627, 0.89804, 0.28627, +0.29020, 0.90588, 0.29020, +0.29412, 0.91373, 0.29412, +0.29804, 0.92157, 0.29804, +0.30196, 0.92941, 0.30196, +0.30588, 0.93725, 0.30588, +0.30980, 0.94510, 0.30980, +0.31373, 0.95294, 0.31373, +0.31765, 0.96078, 0.31765, +0.32157, 0.96863, 0.32157, +0.32549, 0.97647, 0.32549, +0.32941, 0.98431, 0.32941, +0.33333, 0.99216, 0.33333, +0.33333, 0.00392, 0.00392, +0.34118, 0.00784, 0.00784, +0.34902, 0.01176, 0.01176, +0.35686, 0.01569, 0.01569, +0.36471, 0.01961, 0.01961, +0.37255, 0.02353, 0.02353, +0.38039, 0.02745, 0.02745, +0.38824, 0.03137, 0.03137, +0.39608, 0.03529, 0.03529, +0.40392, 0.03922, 0.03922, +0.41176, 0.04314, 0.04314, +0.41961, 0.04706, 0.04706, +0.42745, 0.05098, 0.05098, +0.43529, 0.05490, 0.05490, +0.44314, 0.05882, 0.05882, +0.45098, 0.06275, 0.06275, +0.45882, 0.06667, 0.06667, +0.46667, 0.07059, 0.07059, +0.47451, 0.07451, 0.07451, +0.48235, 0.07843, 0.07843, +0.49020, 0.08235, 0.08235, +0.49804, 0.08627, 0.08627, +0.50588, 0.09020, 0.09020, +0.51373, 0.09412, 0.09412, +0.52157, 0.09804, 0.09804, +0.52941, 0.10196, 0.10196, +0.53725, 0.10588, 0.10588, +0.54510, 0.10980, 0.10980, +0.55294, 0.11373, 0.11373, +0.56078, 0.11765, 0.11765, +0.56863, 0.12157, 0.12157, +0.57647, 0.12549, 0.12549, +0.58431, 0.12941, 0.12941, +0.59210, 0.13333, 0.13333, +0.60000, 0.13725, 0.13725, +0.60784, 0.14118, 0.14118, +0.61569, 0.14510, 0.14510, +0.62353, 0.14902, 0.14902, +0.63137, 0.15294, 0.15294, +0.63922, 0.15686, 0.15686, +0.64706, 0.16078, 0.16078, +0.65490, 0.16471, 0.16471, +0.66275, 0.16863, 0.16863, +0.67059, 0.17255, 0.17255, +0.67843, 0.17647, 0.17647, +0.68627, 0.18039, 0.18039, +0.69412, 0.18431, 0.18431, +0.70196, 0.18824, 0.18824, +0.70980, 0.19216, 0.19216, +0.71765, 0.19608, 0.19608, +0.72549, 0.20000, 0.20000, +0.73333, 0.20392, 0.20392, +0.74118, 0.20784, 0.20784, +0.74902, 0.21176, 0.21176, +0.75686, 0.21569, 0.21569, +0.76471, 0.21961, 0.21961, +0.77255, 0.22353, 0.22353, +0.78039, 0.22745, 0.22745, +0.78824, 0.23137, 0.23137, +0.79608, 0.23529, 0.23529, +0.80392, 0.23922, 0.23922, +0.81176, 0.24314, 0.24314, +0.81961, 0.24706, 0.24706, +0.82745, 0.25098, 0.25098, +0.83529, 0.25490, 0.25490, +0.84314, 0.25882, 0.25882, +0.85098, 0.26275, 0.26275, +0.85882, 0.26667, 0.26667, +0.86667, 0.27059, 0.27059, +0.87451, 0.27451, 0.27451, +0.88235, 0.27843, 0.27843, +0.89020, 0.28235, 0.28235, +0.89804, 0.28627, 0.28627, +0.90588, 0.29020, 0.29020, +0.91373, 0.29412, 0.29412, +0.92157, 0.29804, 0.29804, +0.92941, 0.30196, 0.30196, +0.93725, 0.30588, 0.30588, +0.94510, 0.30980, 0.30980, +0.95294, 0.31373, 0.31373, +0.96078, 0.31765, 0.31765, +0.96863, 0.32157, 0.32157, +0.97647, 0.32549, 0.32549, +0.98431, 0.32941, 0.32941, +0.99216, 0.33333, 0.33333, +1.00000, 0.33725, 0.33725 diff --git a/vendor/x11iraf/ximtool/data/vflip.xbm b/vendor/x11iraf/ximtool/data/vflip.xbm new file mode 100644 index 00000000..73426f85 --- /dev/null +++ b/vendor/x11iraf/ximtool/data/vflip.xbm @@ -0,0 +1,6 @@ +#define vflip_width 16 +#define vflip_height 16 +static char vflip_bits[] = { + 0x00, 0x00, 0xfc, 0x3f, 0xe0, 0x07, 0xc0, 0x03, 0x80, 0x01, 0x80, 0x01, + 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, + 0xc0, 0x03, 0xe0, 0x07, 0xfc, 0x3f, 0x00, 0x00}; diff --git a/vendor/x11iraf/ximtool/data/xflip.xbm b/vendor/x11iraf/ximtool/data/xflip.xbm new file mode 100644 index 00000000..bdbbeb43 --- /dev/null +++ b/vendor/x11iraf/ximtool/data/xflip.xbm @@ -0,0 +1,6 @@ +#define xflip_width 16 +#define xflip_height 16 +static char xflip_bits[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x08, 0x18, 0x18, + 0x1c, 0x38, 0xfe, 0x7f, 0xfe, 0x7f, 0x1c, 0x38, 0x18, 0x18, 0x10, 0x08, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; diff --git a/vendor/x11iraf/ximtool/data/xflip2.xbm b/vendor/x11iraf/ximtool/data/xflip2.xbm new file mode 100644 index 00000000..326cff7b --- /dev/null +++ b/vendor/x11iraf/ximtool/data/xflip2.xbm @@ -0,0 +1,6 @@ +#define xflip2_width 16 +#define xflip2_height 16 +static char xflip2_bits[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x0c, 0x18, 0x18, + 0x0c, 0x30, 0xfe, 0x7f, 0x06, 0x60, 0xfe, 0x7f, 0x0c, 0x30, 0x18, 0x18, + 0x30, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; diff --git a/vendor/x11iraf/ximtool/data/yflip.xbm b/vendor/x11iraf/ximtool/data/yflip.xbm new file mode 100644 index 00000000..69603e9c --- /dev/null +++ b/vendor/x11iraf/ximtool/data/yflip.xbm @@ -0,0 +1,6 @@ +#define yflip_width 16 +#define yflip_height 16 +static char yflip_bits[] = { + 0x00, 0x00, 0x80, 0x01, 0xc0, 0x03, 0xe0, 0x07, 0xf0, 0x0f, 0x80, 0x01, + 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0xf0, 0x0f, + 0xe0, 0x07, 0xc0, 0x03, 0x80, 0x01, 0x00, 0x00}; diff --git a/vendor/x11iraf/ximtool/data/yflip2.xbm b/vendor/x11iraf/ximtool/data/yflip2.xbm new file mode 100644 index 00000000..6ea8ae78 --- /dev/null +++ b/vendor/x11iraf/ximtool/data/yflip2.xbm @@ -0,0 +1,6 @@ +#define yflip2_width 16 +#define yflip2_height 16 +static char yflip2_bits[] = { + 0x00, 0x00, 0xc0, 0x01, 0xe0, 0x03, 0x70, 0x07, 0x58, 0x0d, 0x48, 0x09, + 0x40, 0x01, 0x40, 0x01, 0x40, 0x01, 0x40, 0x01, 0x48, 0x09, 0x58, 0x0d, + 0x70, 0x07, 0xe0, 0x03, 0xc0, 0x01, 0x00, 0x00}; diff --git a/vendor/x11iraf/ximtool/eps.c b/vendor/x11iraf/ximtool/eps.c new file mode 100644 index 00000000..ec7f83a8 --- /dev/null +++ b/vendor/x11iraf/ximtool/eps.c @@ -0,0 +1,1902 @@ +#include +#include +#include +#include +#include "eps.h" + +#ifdef __STDC__ +#include +#include +#endif + +#ifdef SOLARIS +#include +#endif + + +/* +** EPS.C -- EPS hardcopy routines. This code takes an input structure +** containing the pixels, colormap, and output specifications and creates +** and Encapsulated PostScript file. +** +** #include "eps.h" # flags, macro defs, etc. +** +** psim = eps_init () +** eps_print (psim, fp, &data, xdim, ydim, depth, pad) +** eps_close (psim) +** +** eps_setPage (psim, orient, paper_size, scale, flags) +** eps_setCmap (psim, &r, &g, &b, ncolors) +** eps_setCompress (psim, ctype) +** eps_setColorType (psim, otype) +** eps_setLabel (psim, &label) +** eps_setTransform (psim, z1, z2, ztype, offset, slope, cmap_name) +** eps_setCorners (psim, llx, lly, urx, ury) +** +** eps_getImageSize (psim, xdim, ydim, &width, &height) +** eps_getImagePos (psim, xdim, ydim, &llx, &llx) +** +** # Read-only Macro functions: Result type +** ---------------------------- ----------- +** Orientation (psim) EPS_PORTRAIT | EPS_LANDSCAPE +** Scale (psim) float scale value +** MaxScale (psim) float maxaspect scale value +** DoAutoScale (psim) bool +** DoAutoRotate (psim) bool +** DoMaxAspect (psim) bool +** PageType (psim) EPS_LETTER | EPS_LEGAL | ... +** PageXdim (psim) page pixel width +** PageYdim (psim) page pixel height +** PageWidth (psim) page size in inches +** PageHeight (psim) page size in inches +** +** The first three routines are all that's required to output an array of +** pixels to an open file descriptor. The default output produced is a +** grayscale EPS file, centered in a portrait orientation (unless a rotation +** is required to make it fit on the page) and auto scaled to fit on a normal +** 8.5"x11" page. +** +** The remaining routines can be used to set various options, new colormaps +** labels, etc. They are not required unless you need to override one or +** more of the output defaults. +*/ + +#define MAX_LENLABEL 256 +#define SZ_EPSBUF 8193 + +#ifndef AIXV3 +#ifndef OSF1 +typedef unsigned char uchar; +#endif +#endif + + +static char *hextab = "0123456789abcdef"; +static int pixnum = 0, lpix = 0; +static uchar *pixbuf; + + +/* Public procedures. +*/ +void eps_setPage(), eps_setTransform(), eps_setCorners(); + + +/* Private procedures. +*/ +static void eps_simpleHeader(), eps_colorHeader(); +static void eps_pageParams(), eps_simpleTrailer(); +static void eps_writeCmap(), eps_writeTrailer(); +static void eps_writeMono(), eps_writePix(); +static void eps_writeMonoRGB(), eps_writeRGB(); +static void eps_putPix(), eps_flushPix(); +static void eps_annotate(), eps_portLabels(), eps_landLabels(); +static void eps_doColorbar(); +static float ticstep(); +static char *make_label(); + + +static int debug = 0; + + +/* EPS_INIT -- Allocate and return an initialized pointer to a structure +** containing the default output setup. +*/ +PSImage * +eps_init() +{ + register int i, n; + register PSImage *ps; + register uchar *op; + + + /* Allocate the structure. */ + ps = (PSImage *) calloc ((unsigned)1, sizeof (PSImage)); + + /* Initialize the structure. */ + ps->cols = 0; + ps->rows = 0; + ps->colorClass = EPS_GRAYSCALE; + ps->compression = NoCompression; + ps->annotate = 1; + ps->label = (char *) calloc (MAX_LENLABEL, sizeof (uchar)); + ps->z1 = 0.0; + ps->z2 = 255.0; + ps->ztype = 0; + + /* Set up a default grayscale colormap. */ + ps->cmap.ncolors = 256; + for (i=0; icmap.ncolors; i++) + ps->cmap.r[i] = ps->cmap.g[i] = ps->cmap.b[i] = i; + ps->cmap.IsDefault = 1; + + /* Load the page information defaults. */ + eps_setPage (ps, EPS_PORTRAIT, EPS_LETTER, 100, EPS_AUTOSCALE); + + /* Initialize the annotation flags */ + ps->page.flags |= (EPS_DOTITLE|EPS_DOBORDERS|EPS_DOCOLORBAR); + + /* Initialize the pixel buffer array */ + pixbuf = (uchar *) calloc (SZ_EPSBUF, sizeof (uchar)); + + return (ps); +} + + +/* EPS_PRINT -- Dump the given array of pixels to the output file as an EPS +** format file. The data array may contain 8-bit, 24-bit RGB triplets, or +** 32-bit RGBA pixels. +*/ +void +eps_print (psim, fp, data, xdim, ydim, depth, pad) +PSImage *psim; /* EPS image structure */ +FILE *fp; /* output file descriptor */ +uchar *data; /* array of image pixels */ +int xdim, ydim; /* image dimensions */ +int depth; /* bits / pixel, must be 8,24, or 32 */ +int pad; /* bytes per line of padding */ +{ + int npix = xdim * ydim; + uchar *pix = data; + + + psim->cols = xdim; /* save it for the headers */ + psim->rows = ydim; + + if (debug) + fprintf (stderr, "eps_print: w=%d h=%d d=%d pad=%d\n", + xdim, ydim, depth, pad); + + switch (psim->colorClass) { + case EPS_GRAYSCALE: + /* Regardless of the color type desired we'll either write the + * pixels directly or convert from pseudocolor or RGB. For a + * start dump the header. + */ + eps_simpleHeader (psim, fp); + + if (psim->cmap.IsDefault && depth == 8) { + /* We're using the default grayscale colormap with an + * 8-bit image, so just dump the pixels. + */ + if (debug) + fprintf (stderr,"eps_print: straight grayscale.\n"); + eps_writePix (fp, pix, &psim->cmap, npix, xdim, pad); + + } else if (!psim->cmap.IsDefault && depth == 8) { + /* We're using an arbitrary colormap with an 8-bit image, + * so convert to grayscale and write the pixels. + */ + if (debug) + fprintf (stderr,"eps_print: pseudo cnv to grayscale.\n"); + eps_writeMono (fp, pix, &psim->cmap, npix, xdim, pad); + + } else { + /* Convert RGBA to grayscale. */ + if (debug) + fprintf (stderr,"eps_print: RGB cnv to grayscale.\n"); + eps_writeMonoRGB (fp, pix, npix, xdim, depth, pad); + + } + + /* Now that the image is out we restore the graphics context. */ + fprintf (fp, "grestore\n" ); + + /* Write the colorbar. */ + if (psim->annotate) + eps_annotate (psim, fp); + + /* Write the trailer. */ + eps_simpleTrailer (fp); + break; + + case EPS_PSEUDOCOLOR: + /* Write the color prolog header. */ + eps_colorHeader (psim, fp); + + /* Dump the colormap. */ + eps_writeCmap (&psim->cmap, fp); + + /* Write color indices. */ + eps_writePix (fp, pix, &psim->cmap, npix, xdim, pad); + + /* Write the colorbar. */ + if (psim->annotate) + eps_annotate (psim, fp); + + /* Write the trailer to finish it off. */ + eps_writeTrailer (fp); + break; + + case EPS_TRUECOLOR: + /* Write the seudocolor prolog header. */ + eps_colorHeader (psim, fp); + + eps_writeRGB (fp, pix, &psim->cmap, npix, xdim, depth, pad); + + /* Write the colorbar. */ + if (psim->annotate) + eps_annotate (psim, fp); + + /* Write the trailer to finish it off. */ + eps_writeTrailer (fp); + break; + + default: + perror ("Bad colorClass specification.\n"); + break; + } + + fflush (fp); +} + + +/* EPS_CLOSE -- Close down the EPS output structure. +*/ +void +eps_close (psim) +PSImage *psim; /* EPS image structure */ +{ + if (psim->label) + (void) free ((char *) psim->label); + (void) free ((char *) pixbuf); + (void) free (psim); +} + + +/* EPS_SETPAGE -- Inialize the page setup with a different size, orientation, +** or scale options. +*/ +void +eps_setPage (psim, orientation, paper_size, scale, flags) +PSImage *psim; /* EPS image structure */ +int orientation; /* page orientation flag */ +int paper_size; /* paper size flag */ +int scale; /* image scale percentage */ +int flags; /* option flags */ +{ + int NPageTypes = sizeof (PageInfo) / sizeof (PSPageInfo); + + + /* Set the orientation of the output */ + if (orientation == EPS_PORTRAIT) + psim->page.orientation = EPS_PORTRAIT; + else if (orientation == EPS_LANDSCAPE) + psim->page.orientation = EPS_LANDSCAPE; + else + perror ("eps_setPage: Invalid orientation."); + + /* Set the output paper size */ + if (paper_size >= 0 && paper_size <= NPageTypes) + psim->page.page_type = paper_size; + else + perror ("eps_setPage: Invalid paper size."); + + /* Set scale and recompute dpi resolution. */ + psim->page.scale = (float) scale / 100.0; + psim->page.maxscale = (float) scale / 100.0; + psim->page.dpi = 72; /* need to recalculate */ + + /* Set the option flags */ + psim->page.flags = flags; + + if (debug) { + fprintf (stderr, + "eps_setPage: orientation:%d size:%d scale:%g\n", + Orientation(psim), PageType(psim), Scale(psim)); + fprintf (stderr,"\tautoscale:%d autorotate:%d maxaspect:%d\n", + DoAutoScale(psim), DoAutoRotate(psim), DoMaxAspect(psim)); + } +} + + +/* EPS_SETCMAP -- Define a given colormap to be used on output. +*/ +void +eps_setCmap (psim, r, g, b, ncolors) +PSImage *psim; /* EPS image structure */ +uchar *r, *g, *b; /* color components */ +int ncolors; /* number of colors in colormap */ +{ + register int i = 0; + + /* Load the colormap. */ + psim->cmap.ncolors = ncolors; + /* for (i=0; i < ncolors; i++) { */ + for (i=0; i < 256; i++) { + psim->cmap.r[i] = r[i]; + psim->cmap.g[i] = g[i]; + psim->cmap.b[i] = b[i]; + } + + psim->cmap.IsDefault = 0; +} + + +/* EPS_SETCOMPRESS -- Define the type of output compression to use. +*/ +void +eps_setCompress (psim, compress) +PSImage *psim; /* EPS image structure */ +int compress; /* compression type flag */ +{ + /* Set the compression type to use. */ + switch (compress) { + case NoCompression: + case RLECompression: + psim->compression = compress; + break; + case LZWCompression: + case JPEGCompression: + default: + perror ("eps_setCompress: Invalid compression type."); + } +} + + +/* EPS_SETCOLORTYPE -- Set the type of output image to be written, e.g. even +** though we have an RGB or pseudocolor image we may wish to coerce it to +** a grayscale on output. +*/ +void +eps_setColorType (psim, color_class) +PSImage *psim; /* EPS image structure */ +int color_class; /* output color class */ +{ + /* Set the compression type to use. */ + switch (color_class) { + case EPS_GRAYSCALE: + case EPS_PSEUDOCOLOR: + case EPS_TRUECOLOR: + psim->colorClass = color_class; + break; + default: + perror ("eps_setColorType: Invalid output color type."); + } +} + + +/* EPS_SETLABEL -- Set the output label to be used in annotation. +*/ +void +eps_setLabel (psim, label) +register PSImage *psim; /* EPS image structure */ +char *label; /* Label string */ +{ + register int maxlen = MAX_LENLABEL; + + if (!psim->label) + psim->label = (char *) malloc (maxlen); + + if (psim->page.flags & EPS_DOTITLE) { + (void) strncpy (psim->label, label, maxlen-1); + psim->label[maxlen-1] = '\0'; + } else + psim->label[0] = '\0'; +} + + +/* EPS_SETTRANSFORM -- Set the color transformation parameters, i.e. the +** z1/z2 values that map the image pixel values being displayed to the number +** of colors we have available. This is used in the annotation when labeling +** the colorbar. +*/ +void +eps_setTransform (psim, z1, z2, ztype, offset, scale, cmap_name) +PSImage *psim; /* EPS image structure */ +float z1, z2; /* zscale values */ +int ztype; /* Transformation type */ +float offset, scale; /* brightness/contrast values */ +char *cmap_name; /* colormap name */ +{ + psim->z1 = z1; + psim->z2 = z2; + psim->ztype = ztype; + psim->offset = offset; + psim->scale = scale; + if (!psim->cmap.cmap_name) + psim->cmap.cmap_name = (char *) malloc (16); + strcpy (psim->cmap.cmap_name, cmap_name); + + if (debug) { + fprintf (stderr, + "setTransform: z1=%g z2=%g zt=%d offset=%g scale=%g name='%s'\n", + psim->z1, psim->z2, psim->ztype, + psim->offset, psim->scale, + psim->cmap.cmap_name); + } +} + + +/* EPS_SETCORNERS -- Set the image corner values. +*/ +void +eps_setCorners (psim, llx, lly, urx, ury) +PSImage *psim; /* EPS image structure */ +int llx, lly, urx, ury; /* image corners */ +{ + psim->llx = llx; + psim->lly = lly; + psim->urx = urx; + psim->ury = ury; +} + + +/* EPS_GETIMAGESIZE -- Given the current page parameters and image dimensions, +** compute the size of the image (in inches) on the page. +*/ +void +eps_getImageSize (psim, xdim, ydim, width, height) +PSImagePtr psim; /* EPS image struct */ +int xdim, ydim; /* image dimensions */ +float *width, *height; /* width x height of image on page */ +{ + int icols, irows, scols, srows, turnflag; + float llx, lly; + + + /* Get the common page parameters. */ + eps_pageParams (psim, &llx, &lly, &icols, &irows, &scols, &srows, + &turnflag); + + *width = (scols / (float) psim->page.dpi); + *height = (srows / (float) psim->page.dpi); +} + + +/* EPS_GETIMAGEPOS -- Given the current page parameters and image dimensions, +** compute the position of the image (in pixels) on the page. +*/ +void +eps_getImagePos (psim, xdim, ydim, llx, lly) +PSImagePtr psim; /* EPS image struct */ +int xdim, ydim; /* image dimensions */ +int *llx, *lly; /* LL coords for centered image */ +{ + int icols, irows, scols, srows, turnflag; + float lx, ly; + + + /* Get the common page parameters. */ + eps_pageParams (psim, &lx, &ly, &icols, &irows, &scols, &srows, + &turnflag); + + *llx = (int) lx; + *lly = (int) ly; +} + + +/************************ + * Private Procedures * + ************************/ + + +/* EPS_PAGEPARAMS -- Compute the EPS page parameters. +*/ +static void +eps_pageParams (psim, llx, lly, icols, irows, scols, srows, turnflag) +PSImagePtr psim; /* EPS image struct */ +float *llx, *lly; /* LL coords for centered image */ +int *icols, *irows; /* final image rows/cols */ +int *scols, *srows; /* scaled rows/cols */ +int *turnflag; /* turn the image? */ +{ + int devpix, pwidth, pheight, cols=0, rows=0; + float pixfac, scale = Scale(psim), margin; + + + /* See if we need to rotate the image to fit on the page. */ + margin = (psim->annotate ? 0.9 : 0.95); + pwidth = (int) PageXdim(psim) * margin; + pheight = (int) PageYdim(psim) * margin; + *icols = cols = psim->cols; + *irows = rows = psim->rows; + *turnflag = 0; + if (DoAutoRotate(psim)) { + if (psim->cols > psim->rows && (scale * psim->cols) > pwidth) { + if (debug) fprintf (stderr, "Rotating image....\n"); + *turnflag = 1; + cols = *irows; + rows = *icols; + } + } else if (psim->page.orientation == EPS_LANDSCAPE) { + if (debug) fprintf (stderr, "Rotating image....\n"); + *turnflag = 1; + cols = *irows; + rows = *icols; + } + + if (turnflag) { + margin = (turnflag ? 0.825 : margin); + pwidth = (int) PageXdim(psim) * margin; + pheight = (int) PageYdim(psim) * margin; + } + + /* Figure out the image size. */ + devpix = psim->page.dpi / 72.0 + 0.5; /* device pixels per unit */ + pixfac = 72.0 / psim->page.dpi * devpix; + *scols = psim->page.scale * cols * pixfac; + *srows = psim->page.scale * rows * pixfac; + + /* See if we need to fiddle with the size to get it on the page + * the way we want. + */ + if (debug) { + fprintf (stderr, "before: scale=%g scols=%d srows=%d pixfac=%g\n", + scale, *scols, *srows, pixfac); + fprintf (stderr, "\tpwidth=%d pheight=%d\n", pwidth, pheight); + fprintf (stderr,"\tautoscale:%d autorotate:%d maxaspect:%d\n", + DoAutoScale(psim), DoAutoRotate(psim), DoMaxAspect(psim)); + } + if ( *scols > pwidth || *srows > pheight ) { + + /* Image is larger than we think will fit on the page. If we're + * autoscaling reset the scale. + */ + if (DoAutoScale(psim)) { + if (debug) + fprintf (stderr, "Image too big, autoscaling...\n"); + if ( *scols >= pwidth ) { + if (*scols >= *srows) { + scale *= (float)PageXdim(psim) / (float)*scols * margin; + *scols = scale * cols * pixfac; + *srows = scale * rows * pixfac; + } else { + scale *= (float)PageYdim(psim) / (float)*srows * margin; + *scols = scale * cols * pixfac; + *srows = scale * rows * pixfac; + } + } + if (debug) + fprintf (stderr, ": scale=%f scols=%d srows=%d pixfac=%g\n", + scale, *scols, *srows, pixfac); + if ( *srows >= pheight ) { + if (*scols >= *srows) { + scale *= (float)PageXdim(psim) / (float)*scols * margin; + *scols = scale * cols * pixfac; + *srows = scale * rows * pixfac; + } else { + scale *= (float)PageYdim(psim) / (float)*srows * margin; + *scols = scale * cols * pixfac; + *srows = scale * rows * pixfac; + } + } + if (debug) + fprintf (stderr, ": scale=%f scols=%d srows=%d pixfac=%g\n", + scale, *scols, *srows, pixfac); + psim->page.maxscale = scale; /* update new scale factor */ + + } else { + /* Notify user that the image won't fit and suggest a scale. */ + if ( *scols > pwidth ) + scale *= (float) PageXdim(psim) / (float) *scols * margin; + if ( *srows > pheight ) + scale *= (float) PageYdim(psim) / (float) *srows * margin; + psim->page.maxscale = scale; /* update new scale factor */ + + fprintf (stderr, + "Image too big for the page, no autoscaling set...\n"); + fprintf (stderr, "Reset autoscale flag or use scale < %g\n", + scale); + } + + } + + if (DoMaxAspect(psim)) { + /* Image will fit on page, but blow it up to a maximum size for + * the page orientation but retain the image aspect. + */ + if (debug) + fprintf (stderr, "Doing max aspect..."); + if ( *scols >= *srows ) { + scale *= (float) PageXdim(psim) / (float) *scols * margin; + *scols = scale * cols * pixfac; + *srows = scale * rows * pixfac; + } else if ( *srows > *scols ) { + scale *= (float) PageYdim(psim) / (float) *srows * margin; + *scols = scale * cols * pixfac; + *srows = scale * rows * pixfac; + } + psim->page.maxscale = scale; /* update new scale factor */ + } + + /* Center it on the page. */ + *llx = (PageXdim(psim) - *scols) / 2 - (*turnflag ? 10 : 0); + *lly = (PageYdim(psim) - *srows) / 2 + (*turnflag ? 0 : 10); + + if (debug) { + fprintf(stderr,"after: scale=%g scols=%d srows=%d ", + scale, *scols, *srows); + fprintf(stderr,"icols=%d irows=%d llx=%g lly=%g\n", + *icols, *irows, *llx, *lly); + } +} + + +/* EPS_WRITEPIX -- Write the pixels or color indices directly. +*/ +static void +eps_writePix (fp, pix, cmap, npix, xdim, pad) +FILE *fp; +uchar *pix; +PSCmap *cmap; +int npix; +int xdim; +int pad; +{ + register int i, min, max; + + + min = *pix; + max = *pix; + while (npix > 0) { + min = (min > *pix ? *pix : min); + max = (max < *pix ? *pix : max); + + /* Write the pixels. */ + for (i=0; i < PIX_PER_LINE && npix--; i+=2) { + pixbuf[pixnum++] = (uchar) hextab[((uchar)*pix >> 4)]; + pixbuf[pixnum++] = (uchar) hextab[((uchar)*pix++ & 0x0F)]; + } + pixbuf[pixnum++] = '\n'; + + if (pixnum >= (SZ_EPSBUF - PIX_PER_LINE - 1)) { + pixbuf[pixnum] = '\0'; + fwrite ((char *)pixbuf, sizeof(char), pixnum, fp); + pixnum = 0; + } + + /* Skip the pad chars. */ + for (i=0; imin = min; + cmap->max = max; + eps_flushPix (fp); +} + + +/* EPS_WRITEMONO -- Write a pseudocolor image and convert to grayscale. +*/ +static void +eps_writeMono (fp, pix, cmap, npix, xdim, pad) +FILE *fp; +uchar *pix; +PSCmap *cmap; +int npix; +int xdim; +int pad; +{ + register int i, min, max; + register uchar pval; + + min = *pix; + max = *pix; + while (npix > 0) { + min = (min > *pix ? *pix : min); + max = (max < *pix ? *pix : max); + + /* Write the pixels. */ + for (i=0; i < PIX_PER_LINE && npix; i+=2, npix-- ) { + pval = (uchar) MONO (cmap->r[*pix], + cmap->g[*pix], + cmap->b[*pix++]); + pixbuf[pixnum++] = (uchar) hextab[(pval >> 4)]; + pixbuf[pixnum++] = (uchar) hextab[(pval & 0x0F)]; + } + pixbuf[pixnum++] = '\n'; + + if (pixnum >= (SZ_EPSBUF - PIX_PER_LINE - 1) || !npix) { + pixbuf[pixnum] = '\0'; + fwrite ((char *)pixbuf, sizeof(char), pixnum, fp); + pixnum = 0; + } + + /* skip the pad chars */ + for (i=0; imin = min; + cmap->max = max; + eps_flushPix (fp); +} + + +/* EPS_WRITEMONORGB -- Write RGB data converted to grayscale. +*/ +static void +eps_writeMonoRGB (fp, pix, npix, xdim, depth, pad) +FILE *fp; +uchar *pix; +int npix; +int xdim; +int depth; +int pad; +{ + register int i; + register uchar pval; + + + while (npix > 0) { + /* Write the pixels. */ + if (depth < 24) { + for (i=0; i < PIX_PER_LINE && npix; i+=2, npix-=3 ) { + pval = (uchar) MONO (*pix++, *pix++, *pix++); + pixbuf[pixnum++] = (uchar) hextab[(pval >> 4)]; + pixbuf[pixnum++] = (uchar) hextab[(pval & 0x0F)]; + } + } else { + /* Skip alpha channel in the loop */ + for (i=0; i < PIX_PER_LINE && npix; i+=2, npix-=3, pix++ ) { + pval = (uchar) MONO (*pix++, *pix++, *pix++); + pixbuf[pixnum++] = (uchar) hextab[(pval >> 4)]; + pixbuf[pixnum++] = (uchar) hextab[(pval & 0x0F)]; + } + } + pixbuf[pixnum++] = '\n'; + + if (pixnum >= (SZ_EPSBUF - PIX_PER_LINE - 1)) { + pixbuf[pixnum] = '\0'; + fwrite ((char *)pixbuf, sizeof(char), pixnum, fp); + pixnum = 0; + } + + /* skip the pad chars */ + for (i=0; i 0) { + min = (min > *pix ? *pix : min); + max = (max < *pix ? *pix : max); + + /* Write the pixels. */ + if (depth < 24) { + for (i=0; i < PIX_PER_LINE && npix; i+=6, npix--, pix++ ) { + val = (uchar) cmap->r[*pix]; + pixbuf[pixnum++] = (uchar) hextab[((uchar)val >> 4)]; + pixbuf[pixnum++] = (uchar) hextab[((uchar)val & 0x0F)]; + val = (uchar) cmap->g[*pix]; + pixbuf[pixnum++] = (uchar) hextab[((uchar)val >> 4)]; + pixbuf[pixnum++] = (uchar) hextab[((uchar)val & 0x0F)]; + val = (uchar) cmap->b[*pix]; + pixbuf[pixnum++] = (uchar) hextab[((uchar)val >> 4)]; + pixbuf[pixnum++] = (uchar) hextab[((uchar)val & 0x0F)]; + } + } else { + /* Skip alpha channel in the loop */ + for (i=0; i < PIX_PER_LINE && npix; i+=6, npix-=3, pix++ ) { + pixbuf[pixnum++] = (uchar) hextab[((uchar)*pix >> 4)]; + pixbuf[pixnum++] = (uchar) hextab[((uchar)*pix++ & 0x0F)]; + pixbuf[pixnum++] = (uchar) hextab[((uchar)*pix >> 4)]; + pixbuf[pixnum++] = (uchar) hextab[((uchar)*pix++ & 0x0F)]; + pixbuf[pixnum++] = (uchar) hextab[((uchar)*pix >> 4)]; + pixbuf[pixnum++] = (uchar) hextab[((uchar)*pix++ & 0x0F)]; + } + } + pixbuf[pixnum++] = '\n'; + + if (pixnum >= (SZ_EPSBUF - PIX_PER_LINE - 1)) { + pixbuf[pixnum] = '\0'; + fwrite ((char *)pixbuf, sizeof(char), pixnum, fp); + pixnum = 0; + } + + + /* skip the pad chars */ + for (i=0; imin = min; + cmap->max = max; + eps_flushPix (fp); +} + + +/* EPS_WRITECMAP -- Output Postscript colormap. +*/ +static void +eps_writeCmap (cmap, fp) +PSCmap *cmap; +FILE *fp; +{ + register int i, j; + + /* Dump number of colors and colormap used. */ + fprintf (fp, "256\n"); + for (i=0; i < 256; ) { + for (j=0; j < 10 && i < 256; i++, j++) { + fprintf (fp, "%02x%02x%02x", + cmap->r[i], cmap->g[i], cmap->b[i]); + } + fprintf (fp, "\n"); + } +} + + +/* EPS_SIMPLEHEADER -- Output simple Postscript header. +*/ +static char *EPSSimpleRLEProlog[]= { + "/rlestr1 1 string def\n", + "/readrlestring { /* s -- nr */\n", + " /rlestr exch def /* - */\n", + " currentfile rlestr1 readhexstring pop /* s1 */\n", + " 0 get /* c */\n", + " dup 127 le { /* c */\n", + " currentfile rlestr 0 /* c f s 0 */\n", + " 4 3 roll /* f s 0 c */\n", + " 1 add getinterval /* f s */\n", + " readhexstring pop /* s */\n", + " length /* nr */\n", + " } { /* c */\n", + " 256 exch sub dup /* n n */\n", + " currentfile rlestr1 readhexstring pop /* n n s1 */\n", + " 0 get /* n n c */\n", + " exch 0 exch 1 exch 1 sub { /* n c 0 1 n-1*/\n", + " rlestr exch 2 index put\n", + " } for /* n c */\n", + " pop /* nr */\n", + " } ifelse /* nr */\n", + "} bind def\n", + "/readstring { /* s -- s */\n", + " dup length 0 { /* s l 0 */\n", + " 3 copy exch /* s l n s n l*/\n", + " 1 index sub /* s l n s n r*/\n", + " getinterval /* s l n ss */\n", + " readrlestring /* s l n nr */\n", + " add /* s l n */\n", + " 2 copy le { exit } if /* s l n */\n", + " } loop /* s l l */\n", + " pop pop /* s */\n", + "} bind def\n", + NULL +}; + +static void +eps_simpleHeader (psim, fp) +PSImagePtr psim; +FILE *fp; +{ + register char **line; + int icols=0, irows=0, scols=0, srows=0, turnflag=0; + float llx = 0.0, lly = 0.0; + time_t timer; + + + /* Get the common page parameters. */ + eps_pageParams (psim, &llx, &lly, &icols, &irows, &scols, &srows, + &turnflag); + + /* Now write header and prolog stuff */ + fprintf (fp, "%%!PS-Adobe-3.0 EPSF-3.0\n" ); + fprintf (fp, "%%%%Title: XImtool Screen Hardcopy\n"); + fprintf (fp, "%%%%Creator: XImtool\n"); + timer = time ((time_t *) NULL); + (void) localtime (&timer); + fprintf (fp, "%%%%CreationDate: %s", ctime(&timer)); + if (psim->annotate) + fprintf (fp, "%%%%BoundingBox: %d %d %d %d\n", + (int) (MAX (0, llx - X_ANNOT_MARGIN)), + (int) (MAX (0, lly - Y_ANNOT_MARGIN)), + (int) ( llx + scols + 0.5 + X_ANNOT_MARGIN), + (int) ( lly + srows + 0.5 + Y_ANNOT_MARGIN) ); + else + fprintf (fp, "%%%%BoundingBox: %d %d %d %d\n", + (int) (MAX (0, llx - 10)), + (int) (MAX (0, lly - 10)), + (int) ( llx + scols + 0.5 + 10), + (int) ( lly + srows + 0.5 + 10) ); + fprintf (fp, "%%%%Pages: 1\n"); + fprintf (fp, "%%%%EndComments\n" ); + + if ( psim->compression == RLECompression ) { + for (line = EPSSimpleRLEProlog; *line; line++) + fprintf (fp, "%s\n",*line); + } else { + fprintf (fp, "/readstring {\n" ); /* s -- s */ + fprintf (fp, " currentfile exch readhexstring pop\n" ); + fprintf (fp, "} bind def\n" ); + } + + if (psim->colorClass == EPS_TRUECOLOR) { + fprintf (fp, "/rpicstr %d string def\n", icols ); + fprintf (fp, "/gpicstr %d string def\n", icols ); + fprintf (fp, "/bpicstr %d string def\n", icols ); + } else + fprintf (fp, "/picstr %d string def\n", icols ); + fprintf (fp, "%%%%EndProlog\n" ); + fprintf (fp, "%%%%Page: 1 1\n" ); + fprintf (fp, "gsave\n" ); + + fprintf (fp, "%g %g translate\n", llx, lly ); + fprintf (fp, "%d %d scale\n", scols, srows ); + if ( turnflag ) { + if (debug) fprintf (stderr, "turnflag enabled....\n"); + fprintf (fp, "0.5 0.5 translate 90 rotate -0.5 -0.5 translate\n"); + } + fprintf (fp, "%d %d 8\n", icols, irows); + fprintf (fp, "[ %d 0 0 -%d 0 %d ]\n", icols, irows, irows ); + + if (psim->colorClass == EPS_TRUECOLOR) { + fprintf (fp, "{ rpicstr readstring }\n" ); + fprintf (fp, "{ gpicstr readstring }\n" ); + fprintf (fp, "{ bpicstr readstring }\n" ); + fprintf (fp, "true 3\n" ); + fprintf (fp, "colorimage\n" ); + } else { + fprintf (fp, "{ picstr readstring }\n" ); + fprintf (fp, "image\n" ); + } +} + + +/* EPS_ANNOTATE -- Annotate the main image window with axis labels, +** colorbars, and the title string. +*/ + +static void +eps_annotate (psim, fp) +PSImagePtr psim; +FILE *fp; +{ + register char **line; + register int i; + int icols=0, irows=0, scols=0, srows=0, turnflag=0; + int cbar_size, nlabels; + int xpos, xstep, ypos, ystep; + float Mval, xval, yval, tic, mtic, Mtic; + float llx = 0.0, lly = 0.0; + + + /* Get the common page parameters. */ + eps_pageParams (psim, &llx, &lly, &icols, &irows, &scols, &srows, + &turnflag); + + /* Main image title. */ + if (psim->label != NULL && (psim->page.flags & EPS_DOTITLE)) { + /* Write the annotation prolog stufd. */ + fprintf (fp, "gsave\n" ); + + fprintf (fp, + "/labelfont /NewCenturySchlbk-Roman findfont 16 scalefont def\n"); + if (turnflag) { + fprintf (fp, "/label { moveto labelfont setfont\n"); + fprintf (fp, " 90 rotate show -90 rotate\n} def\n" ); + fprintf (fp, "(%s) %g %g label\n", psim->label, + llx - TITLE_OFFSET, + lly + (srows/2) - 8.25*(strlen(psim->label)/2) ); + } else { + fprintf (fp, "/label { moveto labelfont setfont show } def\n" ); + fprintf (fp, "(%s) %g %g label\n", psim->label, + llx + (scols/2) - 8.25*(strlen(psim->label)/2), + lly + srows + TITLE_OFFSET); + } + fprintf (fp, "grestore\n"); + } + + /* A border for the image axes. */ + if (psim->page.flags & EPS_DOBORDERS) { + fprintf (fp, "gsave\n" ); + fprintf (fp, "/imBorder {\n"); + fprintf (fp, " %-4d %-4d moveto %% Outer axis\n", + (int)(llx - AXIS_OOFFSET), + (int)(lly - AXIS_OOFFSET)); + fprintf (fp, " 0 %-4d rlineto\n", srows + (2 * AXIS_OOFFSET)); + fprintf (fp, " %-4d 0 rlineto\n", scols + (2 * AXIS_OOFFSET)); + fprintf (fp, " 0 -%-4d rlineto\n", srows + (2 * AXIS_OOFFSET)); + fprintf (fp, " closepath\n"); + fprintf (fp, " %g setlinewidth\n", AXIS_OWIDTH); + fprintf (fp, " stroke\n"); + + fprintf (fp, " %-4d %-4d moveto %% Inner axis\n", + (int)(llx - AXIS_IOFFSET), + (int)(lly - AXIS_IOFFSET)); + fprintf (fp, " 0 %-4d rlineto\n", srows + (2 * AXIS_IOFFSET)); + fprintf (fp, " %-4d 0 rlineto\n", scols + (2 * AXIS_IOFFSET)); + fprintf (fp, " 0 -%-4d rlineto\n", srows + (2 * AXIS_IOFFSET)); + fprintf (fp, " closepath\n"); + fprintf (fp, " %g setlinewidth\n", AXIS_IWIDTH); + fprintf (fp, " stroke\n"); + + fprintf (fp, "} def\n"); + fprintf (fp, "imBorder\n"); + + /* Axis label font definitions. */ + fprintf (fp,"/axlabelfont /Times-Roman findfont 8 scalefont def\n"); + fprintf (fp, + "/axlabel { moveto axlabelfont setfont %s show %s } def\n", + (turnflag ? "90 rotate" : " "), + (turnflag ? "-90 rotate" : " ")); + + /* Axis ticmark procedures. */ + fprintf (fp, "/xMajorTicmark {\n"); + fprintf (fp, " moveto\n"); + fprintf (fp, " 0 %d rlineto ", MAJOR_TICK_SIZE); + fprintf (fp, " 0 %d rmoveto ", + srows + MAJOR_TICK_SIZE + (2 * AXIS_IOFFSET) ); + fprintf (fp, " 0 -%d rlineto\n", MAJOR_TICK_SIZE); + fprintf (fp, " %g setlinewidth\n stroke\n", MAJOR_TICK_WIDTH); + fprintf (fp, "} def\n"); + fprintf (fp, "/yMajorTicmark {\n"); + fprintf (fp, " moveto\n"); + fprintf (fp, " %d 0 rlineto ", MAJOR_TICK_SIZE); + fprintf (fp, " %d 0 rmoveto ", + scols + MAJOR_TICK_SIZE + (2 * AXIS_IOFFSET) ); + fprintf (fp, " -%d 0 rlineto\n", MAJOR_TICK_SIZE); + fprintf (fp, " %g setlinewidth\n stroke\n", MAJOR_TICK_WIDTH); + fprintf (fp, "} def\n"); + fprintf (fp, "/xMinorTicmark {\n"); + fprintf (fp, " moveto\n"); + fprintf (fp, " 0 %d rlineto ", MINOR_TICK_SIZE); + fprintf (fp, " 0 %d rmoveto ", + srows + MAJOR_TICK_SIZE + (2*AXIS_IOFFSET) + + (MAJOR_TICK_SIZE - MINOR_TICK_SIZE) ); + fprintf (fp, " 0 -%d rlineto\n", MINOR_TICK_SIZE); + fprintf (fp, " %g setlinewidth\n stroke\n", MINOR_TICK_WIDTH); + fprintf (fp, "} def\n"); + fprintf (fp, "/yMinorTicmark {\n"); + fprintf (fp, " moveto\n"); + fprintf (fp, " %d 0 rlineto ", MINOR_TICK_SIZE); + fprintf (fp, " %d 0 rmoveto ", + scols + MAJOR_TICK_SIZE + (2*AXIS_IOFFSET) + + (MAJOR_TICK_SIZE - MINOR_TICK_SIZE) ); + fprintf (fp, " -%d 0 rlineto\n", MINOR_TICK_SIZE); + fprintf (fp, " %g setlinewidth\n stroke\n", MINOR_TICK_WIDTH); + fprintf (fp, "} def\n"); + + /* The axis labeling. */ + if (turnflag) + eps_landLabels (fp, psim, scols, srows, icols, irows, llx, lly); + else + eps_portLabels (fp, psim, scols, srows, icols, irows, llx, lly); + fprintf (fp, "grestore\n"); + } + + /* The colorbar. */ + if (psim->page.flags & EPS_DOCOLORBAR) { + eps_doColorbar (fp, psim, scols, srows, llx, lly, turnflag); + + /* Print the transform information. */ + fprintf (fp, "gsave\n"); + fprintf (fp, "/Times-Roman findfont 8 scalefont setfont\n"); + if (turnflag) { + cbar_size = MIN (512, MAX (256, srows + 2)); + fprintf (fp, "%d %d moveto\n", + (int)llx + scols + 26, + (int)lly + (srows/2) - (cbar_size/2)-(cbar_size==256?5:1)); + } else { + cbar_size = MIN (512, MAX (256, scols + 2)); + fprintf (fp, "%d %d moveto\n", + (int)llx + (scols/2) - (cbar_size/2)-(cbar_size==256?5:1), + (int)(lly-29)); + } + fprintf (fp, "(z1=%.2f z2=%.2f ztrans=%s Con=%.2f Brt=%.2f cmap=%s ncolors=%d) %s show %s\n", + psim->z1, psim->z2, + (psim->ztype==EPS_UNITARY ? "unitary": + (psim->ztype==EPS_LINEAR ? "linear" : "log")), + psim->scale, psim->offset, + psim->cmap.cmap_name, + psim->cmap.max - psim->cmap.min + 1, + (turnflag ? "90 rotate" : " "), + (turnflag ? "-90 rotate" : " ")); + fprintf (fp, "grestore\n"); + } + + /* Print the timestamp. */ + fprintf (fp, "gsave\n"); + fprintf (fp, "/Times-Roman findfont 6 scalefont setfont\n"); + fprintf (fp, "20 15 moveto\n(%s) show\n", make_label()); + fprintf (fp, "grestore\n"); + + if (debug) { + fprintf (stderr, "colormap: min/max = %d/%d\n", + psim->cmap.min, psim->cmap.max); + fprintf (stderr, "label: '%s'", make_label()); + } +} + + +/* EPS_PORTRAITLABELS -- Write out the labeling procedures for a portrait +** mode image. +*/ + +static void +eps_portLabels (fp, psim, scols, srows, icols, irows, llx, lly) +FILE *fp; +PSImagePtr psim; +int scols, srows; +int icols, irows; +float llx, lly; +{ + int start, end, range, nlabels; + float xpos, xstep, ypos, ystep; + float Mval, xval=0.0, yval=0.0, tic, mtic, Mtic; + + + /* X Axis labeling and ticmarks. + */ + nlabels = (scols > 256 ? 5 : 3); + fprintf (fp, "/axLabelX {\n"); + if (psim->urx > psim->llx) { + start = psim->llx; + end = psim->urx; + } else { + start = psim->urx; + end = psim->llx; + } + range = end - start + 1; + Mtic = tic = ticstep ((float)range, (range>=256 ? NTICMARKS : 3)); + mtic = (float) tic / (tic < 100 ? 5. : 10.); + Mval = ( (int)(start + Mtic) / (int) Mtic) * Mtic; + xval = ( (int)(start + mtic) / (int) mtic) * mtic; + xstep = mtic * ((float)scols/(float)(range)); + if (psim->urx > psim->llx) + xpos = llx + ( (float)(xval - start) / (float)range * scols); + else { + xpos = (llx + scols) - ((float)(xval-start) / (float)range * scols); + xstep = -xstep; + } + while (xval <= end) { + if ( xval == Mval ) { + fprintf (fp, " %4d %4d xMajorTicmark\t", + (int)xpos, (int)(lly-AXIS_OOFFSET)); + fprintf (fp, " (%g) %d %d axlabel\n", + xval, + (int)xpos-(xval>=1000?8:(xval>=100?5:2)), + (int)(lly-14)); + Mval += Mtic; + } else + fprintf (fp, "\t%4d %4d xMinorTicmark\n", + (int)xpos, (int)(lly-AXIS_OOFFSET)); + xval += mtic; + xpos += xstep; + } + fprintf (fp, "} def\n"); + fprintf (fp, "axLabelX\n"); + + /* Y Axis labeling and ticmarks. */ + nlabels = (srows > 256 ? 5 : 3); + fprintf (fp, "/axLabelY {\n"); + if (psim->ury > psim->lly) { + start = psim->lly; + end = psim->ury; + } else { + start = psim->ury; + end = psim->lly; + } + range = end - start + 1; + Mtic = tic = ticstep ((float)range, (range>=256 ? NTICMARKS : 3)); + mtic = (float) tic / (tic < 100 ? 5. : 10.); + Mval = ( (int)(start + Mtic) / (int) Mtic) * Mtic; + yval = ( (int)(start + mtic) / (int) mtic) * mtic; + ystep = mtic * ((float)srows/(float)(range)); + if (psim->ury > psim->lly) + ypos = lly + ( (float)(yval - start) / (float)range * srows); + else { + ypos = (lly + srows) - ((float)(yval-start) / (float)range * srows); + ystep = -ystep; + } + while (yval <= end) { + if ( yval == Mval ) { + fprintf (fp, " %4d %4d yMajorTicmark\t", + (int)(llx-AXIS_OOFFSET), (int)ypos); + fprintf (fp, " (%g) %d %d axlabel\n", + yval, + (int)(llx-(yval>=1000?27:(yval>=100?20:16))), + (int)ypos-2); + Mval += Mtic; + } else + fprintf (fp, "\t%4d %4d yMinorTicmark\n", + (int)(llx-AXIS_OOFFSET), (int)ypos); + yval += mtic; + ypos += ystep; + } + fprintf (fp, "} def\n"); + fprintf (fp, "axLabelY\n"); +} + + +/* EPS_LANDSCAPELABELS -- Write out the labeling procedures for a landscape +** mode image. +*/ +static void +eps_landLabels (fp, psim, scols, srows, icols, irows, llx, lly) +FILE *fp; +PSImagePtr psim; +int scols, srows; +int icols, irows; +float llx, lly; +{ + float xpos, xstep, ypos, ystep; + int start, end, range, nlabels; + float Mval, xval=0.0, yval=0.0, tic, mtic, Mtic; + + + /* X Axis labeling and ticmarks. */ + nlabels = (srows > 256 ? 5 : 3); + fprintf (fp, "/axLabelX {\n"); + if (psim->ury > psim->lly) { + start = psim->lly; + end = psim->ury; + } else { + start = psim->ury; + end = psim->lly; + } + range = end - start + 1; + Mtic = tic = ticstep ((float)range, (range>=256 ? NTICMARKS : 3)); + mtic = (float) tic / (tic < 100 ? 5. : 10.); + Mval = ( (int)(start + Mtic) / (int) Mtic) * Mtic; + xval = ( (int)(start + mtic) / (int) mtic) * mtic; + xstep = mtic * ((float)scols/(float)(range)); + if (psim->ury > psim->lly) + xpos = (llx + scols) - ((float)(xval-start) / (float)range * scols); + else { + xpos = llx + ((float)(xval-start) / (float)range * scols); + xstep = -xstep; + } + while (xval <= end ) { + if ( xval == Mval ) { + fprintf (fp, " %4d %4d xMajorTicmark\t", + (int)xpos, (int)(lly-AXIS_OOFFSET)); + fprintf (fp, " (%g) %d %d axlabel\n", + xval, + (int)xpos+2, + (int)(lly-(yval>=1000?30:(yval>=100?25:20))) ); + Mval += Mtic; + } else + fprintf (fp, "\t%4d %4d xMinorTicmark\n", + (int)xpos, (int)(lly-AXIS_OOFFSET)); + xval += mtic; + xpos -= xstep; + } + fprintf (fp, "} def\n"); + fprintf (fp, "axLabelX\n"); + + /* Y Axis labeling and ticmarks. */ + nlabels = (srows > 256 ? 5 : 3); + fprintf (fp, "/axLabelY {\n"); + if (psim->urx > psim->llx) { + start = psim->llx; + end = psim->urx; + } else { + start = psim->urx; + end = psim->llx; + } + Mtic = tic = ticstep ((float)range, (range>=256 ? NTICMARKS : 3)); + mtic = (float) tic / (tic < 100 ? 5. : 10.); + Mval = ( (int)(start + Mtic) / (int) Mtic) * Mtic; + yval = ( (int)(start + mtic) / (int) mtic) * mtic; + ystep = mtic * ((float)scols/(float)(range)); + if (psim->urx > psim->llx) + ypos = lly + ( (float)(yval - start) / (float)range * scols); + else { + ypos = (lly + srows) - ((float)(yval-start) / (float)range * scols); + ystep = -ystep; + } + while (yval <= end) { + if ( yval == Mval ) { + fprintf (fp, " %4d %4d yMajorTicmark\t", + (int)(llx-AXIS_OOFFSET), (int)ypos); + fprintf (fp, " (%g) %d %d axlabel\n", + yval, + (int)(llx+scols+(2*AXIS_OOFFSET)+2), + (int)ypos-(yval>=1000?9:(yval>=100?6:2)) ); + Mval += Mtic; + } else + fprintf (fp, "\t%4d %4d yMinorTicmark\n", + (int)(llx-AXIS_OOFFSET), (int)ypos); + yval += mtic; + ypos += ystep; + } + fprintf (fp, "} def\n"); + fprintf (fp, "axLabelY\n"); +} + + +/* EPS_DOCOLORBAR -- Annotate the image with a colorbar. +*/ + +static void +eps_doColorbar (fp, psim, scols, srows, llx, lly, turnflag) +FILE *fp; +PSImagePtr psim; +int scols, srows; +float llx, lly; +int turnflag; +{ + register int i, j, cbar_size; + int ncolors, nlabels, pos, step, cmel, cmstep, val; + + + /* Colorbar label font definitions. */ + fprintf (fp, "/cblabelfont /Times-Roman findfont 10 scalefont def\n"); + fprintf (fp, "/cblabel { moveto cblabelfont setfont %s show %s } def\n", + (turnflag ? "90 rotate" : " "), + (turnflag ? "-90 rotate" : " ")); + + /* A border for the colorbar. */ + fprintf (fp, "/cbarBorder {\n"); + if (turnflag) { + cbar_size = MIN (512, MAX (256, srows + 2)) - 1; + fprintf (fp, " %4d %4d moveto\n", + (int)llx + scols + 31, + (int)lly + (srows/2) - (cbar_size/2) - 1); + fprintf (fp, " 17 0 rlineto\n"); + fprintf (fp, " 0 %4d rlineto\n", cbar_size + 3); + fprintf (fp, " -17 0 rlineto\n"); + } else { + cbar_size = MIN (512, MAX (256, scols + 2)); + fprintf (fp, " %-4d %4d moveto\n", + (int)llx + (scols/2) - (cbar_size/2) - 1, + (int)(lly - 46)); + fprintf (fp, " 0 14 rlineto\n"); + fprintf (fp, " %-4d 0 rlineto\n", cbar_size + 3); + fprintf (fp, " 0 -14 rlineto\n"); + } + fprintf (fp, " closepath\n"); + fprintf (fp, " 1 setlinewidth\n"); + fprintf (fp, " stroke\n"); + fprintf (fp, "} def\n"); + fprintf (fp, "cbarBorder\n"); + + /* Draw the colorbar labels, but only for grayscale images. */ + ncolors = psim->cmap.max - psim->cmap.min + 1; + nlabels = 5; + if (turnflag) + pos = (int)lly + (srows/2) - (cbar_size/2); + else + pos = (int)llx + (scols/2) - (cbar_size/2); + step = cbar_size / nlabels; + cmel = psim->cmap.min; + cmstep = ncolors / nlabels; + for (i=0; i <= nlabels; i++) { + val = MONO(psim->cmap.r[cmel], /* get grayscale value */ + psim->cmap.g[cmel], + psim->cmap.b[cmel]); + if (psim->z1 != 0.0 && psim->z2 != 0.0) { + /* We have a transformation defined, convert the grayscale + * value to original image values. Assumes a linear + * transformation, for a log transformation the wcsbox + * reports only screen units so we'll do that here as well. + */ + if (psim->ztype == EPS_LINEAR) + val = ((psim->z2-psim->z1)/(float)ncolors)*cmel + psim->z1; + } + + if (turnflag) + fprintf (fp, "(%d) %d %d cblabel\n", + val, + (int)llx + scols + 57, + pos-(val<100?3:6)); + else + fprintf (fp, "(%d) %d %d cblabel\n", + val, + pos-(val<100?3:6), + (int)(lly-55)); + cmel += cmstep; + cmel = (cmel < psim->cmap.max ? cmel : psim->cmap.max); + pos += step; + } + + /* Draw the colorbar. */ + if (psim->colorClass == EPS_GRAYSCALE) { + fprintf (fp, "/cbarstr %d string def\n", ncolors); + fprintf (fp, "gsave\n" ); + if (turnflag) { + fprintf (fp, "%d %d translate\n", + (int)(llx + scols + 45), + (int)(lly + (srows/2) - (cbar_size/2)) + 1); + fprintf (fp, + "0.5 0.5 translate 90 rotate -0.5 -0.5 translate\n"); + } else { + fprintf (fp, "%g %g translate\n", + llx + (scols/2) - (cbar_size/2) + 1, + lly - 45 ); + } + fprintf (fp, "%d 12 scale\n", cbar_size); + fprintf (fp, "%d 1 8 [ %d 0 0 1 0 0 ]\n", ncolors, ncolors); + + fprintf (fp, "{ cbarstr readstring }\n" ); + fprintf (fp, "image\n" ); + + } else { + fprintf (fp, "DisplayImage\n" ); + if (turnflag) { + fprintf (fp, "%d %d\n", + (int)(llx + scols + 34), + (int)(lly + (srows/2) - (cbar_size/2))); + fprintf (fp, "12 %d\n", cbar_size); + } else { + fprintf (fp, "%d %d\n", + (int)llx + (scols/2) - (cbar_size/2), + (int)lly - 45 ); + fprintf (fp, "%d 12\n", cbar_size); + } + fprintf (fp, "%d 1\n", ncolors); + fprintf (fp, "%d\n", turnflag); + fprintf (fp, "0\n"); + fprintf (fp, "1\n"); + } + + /* Write out the colormap used. */ + if (psim->colorClass == EPS_GRAYSCALE) { + for (i=psim->cmap.min; i <= psim->cmap.max; i++ ) { + fprintf (fp, "%02x", + MONO(psim->cmap.r[i],psim->cmap.g[i], psim->cmap.b[i])); + if ((i+1) % 32 == 0) + fprintf (fp, "\n"); + } + fprintf (fp, "\n"); + fprintf (fp, "grestore\n"); + } else { + for (j=1, i=psim->cmap.min; i <= psim->cmap.max; i++, j++ ) + fprintf (fp, "%02x%02x%02x\n", + psim->cmap.r[i],psim->cmap.g[i], psim->cmap.b[i]); + if (j % 12 ==0) + fprintf (fp, "\n"); + } +} + + +/* EPS_COLORHEADER - Write the pseudocolor header prolog and compute EPS page +** parameters. +*/ +static char *EPSColorProlog[]= + { + "%%BeginProlog", + "%", + "% Display a color image. The image is displayed in color on", + "% Postscript viewers or printers that support color, otherwise", + "% it is displayed as grayscale.", + "%", + "/buffer 512 string def", + "/byte 1 string def", + "/color_packet 3 string def", + "/pixels 768 string def", + "", + "/DirectClassPacket", + "{", + " %", + " % Get a DirectClass packet.", + " %", + " % Parameters: ", + " % red.", + " % green.", + " % blue.", + " % length: number of pixels minus one of this color (optional).", + " %", + " currentfile color_packet readhexstring pop pop", + " compression 0 gt", + " {", + " /number_pixels 3 def", + " }", + " {", + " currentfile byte readhexstring pop 0 get", + " /number_pixels exch 1 add 3 mul def", + " } ifelse", + " 0 3 number_pixels 1 sub", + " {", + " pixels exch color_packet putinterval", + " } for", + " pixels 0 number_pixels getinterval", + "} bind def", + "", + "/DirectClassImage", + "{", + " %", + " % Display a DirectClass image.", + " %", + " systemdict /colorimage known", + " {", + " columns rows 8", + " [", + " columns 0 0", + " rows neg 0 rows", + " ]", + " { DirectClassPacket } false 3 colorimage", + " }", + " {", + " %", + " % No colorimage operator; convert to grayscale.", + " %", + " columns rows 8", + " [", + " columns 0 0", + " rows neg 0 rows", + " ]", + " { GrayDirectClassPacket } image", + " } ifelse", + "} bind def", + "", + "/GrayDirectClassPacket", + "{", + " %", + " % Get a DirectClass packet; convert to grayscale.", + " %", + " % Parameters: ", + " % red", + " % green", + " % blue", + " % length: number of pixels minus one of this color (optional).", + " %", + " currentfile color_packet readhexstring pop pop", + " color_packet 0 get 0.299 mul", + " color_packet 1 get 0.587 mul add", + " color_packet 2 get 0.114 mul add", + " cvi", + " /gray_packet exch def", + " compression 0 gt", + " {", + " /number_pixels 1 def", + " }", + " {", + " currentfile byte readhexstring pop 0 get", + " /number_pixels exch 1 add def", + " } ifelse", + " 0 1 number_pixels 1 sub", + " {", + " pixels exch gray_packet put", + " } for", + " pixels 0 number_pixels getinterval", + "} bind def", + "", + "/GrayPseudoClassPacket", + "{", + " %", + " % Get a PseudoClass packet; convert to grayscale.", + " %", + " % Parameters: ", + " % index: index into the colormap.", + " % length: number of pixels minus one of this color (optional).", + " %", + " currentfile byte readhexstring pop 0 get", + " /offset exch 3 mul def", + " /color_packet colormap offset 3 getinterval def", + " color_packet 0 get 0.299 mul", + " color_packet 1 get 0.587 mul add", + " color_packet 2 get 0.114 mul add", + " cvi", + " /gray_packet exch def", + " compression 0 gt", + " {", + " /number_pixels 1 def", + " }", + " {", + " currentfile byte readhexstring pop 0 get", + " /number_pixels exch 1 add def", + " } ifelse", + " 0 1 number_pixels 1 sub", + " {", + " pixels exch gray_packet put", + " } for", + " pixels 0 number_pixels getinterval", + "} bind def", + "", + "/PseudoClassPacket", + "{", + " %", + " % Get a PseudoClass packet.", + " %", + " % Parameters: ", + " % index: index into the colormap.", + " % length: number of pixels minus one of this color (optional).", + " %", + " currentfile byte readhexstring pop 0 get", + " /offset exch 3 mul def", + " /color_packet colormap offset 3 getinterval def", + " compression 0 gt", + " {", + " /number_pixels 3 def", + " }", + " {", + " currentfile byte readhexstring pop 0 get", + " /number_pixels exch 1 add 3 mul def", + " } ifelse", + " 0 3 number_pixels 1 sub", + " {", + " pixels exch color_packet putinterval", + " } for", + " pixels 0 number_pixels getinterval", + "} bind def", + "", + "/PseudoClassImage", + "{", + " %", + " % Display a PseudoClass image.", + " %", + " % Parameters: ", + " % colors: number of colors in the colormap.", + " % colormap: red, green, blue color packets.", + " %", + " currentfile buffer readline pop", + " token pop /colors exch def pop", + " /colors colors 3 mul def", + " /colormap colors string def", + " currentfile colormap readhexstring pop pop", + " systemdict /colorimage known", + " {", + " columns rows 8", + " [", + " columns 0 0", + " rows neg 0 rows", + " ]", + " { PseudoClassPacket } false 3 colorimage", + " }", + " {", + " %", + " % No colorimage operator; convert to grayscale.", + " %", + " columns rows 8", + " [", + " columns 0 0", + " rows neg 0 rows", + " ]", + " { GrayPseudoClassPacket } image", + " } ifelse", + "} bind def", + "", + "/DisplayImage", + "{", + " %", + " % Display a DirectClass or PseudoClass image.", + " %", + " % Parameters: ", + " % x & y translation.", + " % x & y scale.", + " % image columns & rows.", + " % orientation: 0-Portrait or 1-Landscape", + " % class: 0-DirectClass or 1-PseudoClass.", + " % compression: 0-RunlengthEncodedCompression or 1-NoCompression.", + " % hex color packets.", + " %", + " gsave", + " currentfile buffer readline pop", + " token pop /x exch def", + " token pop /y exch def pop", + " x y translate", + " currentfile buffer readline pop", + " token pop /x exch def", + " token pop /y exch def pop", + " x y scale", + " currentfile buffer readline pop", + " token pop /columns exch def", + " token pop /rows exch def pop", + " currentfile buffer readline pop", + " token pop /orient exch def pop", + " orient 0 gt { 0.5 0.5 translate 90 rotate -0.5 -0.5 translate } if", + " currentfile buffer readline pop", + " token pop /class exch def pop", + " currentfile buffer readline pop", + " token pop /compression exch def pop", + " class 0 gt { PseudoClassImage } { DirectClassImage } ifelse", + " grestore", + "} bind def", + "%%EndProlog", + "%%Page: 1 1", + NULL +}; + + +static void +eps_colorHeader (psim, fp) +PSImagePtr psim; +FILE *fp; +{ + register char **line; + int icols=0, irows=0, scols=0, srows=0, turnflag=0; + float llx = 0.0, lly = 0.0; + time_t timer; + + + /* Get the common page parameters. */ + eps_pageParams (psim, &llx, &lly, &icols, &irows, &scols, &srows, + &turnflag); + + /* Now write header and prolog stuff */ + fprintf (fp, "%%!PS-Adobe-3.0 EPSF-3.0\n"); + fprintf (fp, "%%%%Title: XImtool Screen Hardcopy\n"); + fprintf (fp, "%%%%Creator: XImtool\n"); + timer = time ((time_t *) NULL); + (void) localtime (&timer); + fprintf (fp, "%%%%CreationDate: %s", ctime(&timer)); + if (psim->annotate) + fprintf (fp, "%%%%BoundingBox: %d %d %d %d\n", + (int) (MAX (0, llx - X_ANNOT_MARGIN)), + (int) (MAX (0, lly - Y_ANNOT_MARGIN)), + (int) ( llx + scols + 0.5 + X_ANNOT_MARGIN), + (int) ( lly + srows + 0.5 + Y_ANNOT_MARGIN) ); + else + fprintf (fp, "%%%%BoundingBox: %d %d %d %d\n", + (int) (MAX (0, llx - 10)), + (int) (MAX (0, lly - 10)), + (int) ( llx + scols + 0.5 + 10), + (int) ( lly + srows + 0.5 + 10) ); + fprintf (fp, "%%%%Pages: 1\n"); + fprintf (fp, "%%%%EndComments\n"); + + /* Output remaining Postscript prolog commands. */ + for (line = EPSColorProlog; *line; line++) + fprintf (fp, "%s\n",*line); + fprintf (fp, "userdict begin\n"); + fprintf (fp, "%%%%BeginData:\n"); + + fprintf (fp, "DisplayImage\n"); + + /* Now write the image display parameters, specifically + * + * x & y translation. + * x & y scale. + * image columns & rows. + * orientation: 0-Portrait or 1-Landscape + * class: 0-DirectClass or 1-PseudoClass. + * compression: 0-RunlengthEncodedCompression or 1-NoCompression. + * hex color packets. + */ + + fprintf (fp, "%d %d\n%u %u\n%u %u\n%d\n%d\n%d\n", + (int) llx, (int) lly, + (int) scols, (int) srows, + psim->cols, psim->rows, + turnflag, + psim->colorClass == EPS_PSEUDOCOLOR, + psim->compression == NoCompression); +} + + +/* EPS_WRITETRAILER -- Output Postscript trailer blurb. +*/ +static void +eps_writeTrailer (fp) +FILE *fp; +{ + fprintf (fp, "\n"); + fprintf (fp, "showpage\n"); + fprintf (fp, "%%%%EndData\n"); + fprintf (fp, "end\n"); + fprintf (fp, "%%%%PageTrailer\n"); + fprintf (fp, "%%%%Trailer\n"); + fprintf (fp, "%%%%EOF\n"); +} + + +/* EPS_SIMPLETRAILER -- Output Postscript trailer blurb. +*/ +static void +eps_simpleTrailer (fp) +FILE *fp; +{ + fprintf (fp, "showpage\n"); +} + + +static void +eps_flushPix (fp) +FILE *fp; +{ + pixbuf[pixnum] = '\0'; + fprintf (fp, "%s", pixbuf); + pixnum = 0; + lpix = 0; +} + + +/* Utility Routines. +*/ + +/* TICSTEP -- calculate nice intervals for the ticmarks. +*/ +static float +ticstep (range,nsteps) +float range; +int nsteps; +{ + double df, t2, t5, p1, p2, p3; + float ticstep; + int logtic; + + + df = range / (float)(nsteps + 1); + t2 = 0.301029996; + t5 = 0.698970004; + p1 = log10 ((double)(df > 0.0 ? df : -df)); + p2 = (int) p1; + p3 = p1 - p2; + if(p3 < 0.) { + p3 = p2 + 1.; + p2 = p2 - 1.; + } + + if (p3 < 1.0e-10) + ticstep = pow((double)10.0,(double)(p2)); + else if (p3 > 0. && p3 <= t2) + ticstep = pow((double)10.0,(double)(p2+t2)); + else if (p3 > t2 && p3 <= t5) + ticstep = pow((double)10.0,(double)(p2+t5)); + else if (p3 > t5 && p3 <= 1.) + ticstep = pow((double)10.0,(double)(p2+1.)); + else + ticstep = df; + + logtic = (int) log10(ticstep) - 1; + ticstep = (int)( (ticstep / pow((double)10.,(double)logtic)) * + pow((double)10.,(double)logtic) ); + + if (ticstep < 0.1) ticstep = 0.10; + + return (ticstep); +} + + +/* MAKE_LABEL -- Generate the label for the output printer page. +*/ +static char * +make_label() +{ + static char buf[128]; + char hostname[32]; + char username[32]; + struct passwd *pw; + long clock; + + + bzero (buf, 128); + bzero (hostname, 32); + bzero (username, 32); + +#ifdef SOLARIS + sysinfo (SI_HOSTNAME, hostname, 32); +#else + gethostname (hostname, 32); +#endif + + clock = time(0); + pw = getpwuid (getuid()); + strcpy (username, pw->pw_name); + endpwent(); + + sprintf (buf, "NOAO/IRAF %s@%s %s", + username, hostname, asctime(localtime(&clock))); + + return (buf); +} diff --git a/vendor/x11iraf/ximtool/eps.h b/vendor/x11iraf/ximtool/eps.h new file mode 100644 index 00000000..89427ee1 --- /dev/null +++ b/vendor/x11iraf/ximtool/eps.h @@ -0,0 +1,146 @@ +/* + * EPS.H -- Include definitions for EPS hardcopy routines. + */ + + +/* Handy macro definitions */ + +#define MONO(rd,gn,bl) ((int)(rd*11 + gn*16 + bl*5) >> 5) /*.33R+ .5G+ .17B*/ +#undef MAX +#define MAX(a,b) ((a) > (b) ? (a) : (b)) +#undef MIN +#define MIN(a,b) ((a) < (b) ? (a) : (b)) + + +#define Orientation(ps) ( ps->page.orientation ) +#define Scale(ps) ( ps->page.scale ) +#define MaxScale(ps) ( ps->page.maxscale ) +#define PageType(ps) ( ps->page.page_type ) +#define DoAutoScale(ps) ( ps->page.flags & EPS_AUTOSCALE ) +#define DoAutoRotate(ps) ( ps->page.flags & EPS_AUTOROTATE ) +#define DoMaxAspect(ps) ( ps->page.flags & EPS_MAXASPECT ) + +#define PIX_PER_LINE 72 + +/* Compression options. */ +#define NoCompression 0 /* Don't compress image */ +#define RLECompression 1 /* RLE compression */ +#define LZWCompression 2 /* LZW compression (not implemted) */ +#define JPEGCompression 3 /* JPEG compression (not implemted) */ + +/* Output color classes. */ +#define EPS_GRAYSCALE 0 /* Write a grayscale image */ +#define EPS_PSEUDOCOLOR 1 /* Write a pseudocolor image */ +#define EPS_TRUECOLOR 2 /* Write a RGB image */ + +/* Page option flags. */ +#define EPS_PORTRAIT 0 /* Page orientations */ +#define EPS_LANDSCAPE 1 +#define EPS_AUTOSCALE 0x01 /* Auto scale to fit on page */ +#define EPS_AUTOROTATE 0x02 /* Auto rotate to fit on page */ +#define EPS_MAXASPECT 0x04 /* Increase scale to max aspect */ +#define EPS_DOTITLE 0x10 /* Do title string */ +#define EPS_DOBORDERS 0x20 /* Do image borders */ +#define EPS_DOCOLORBAR 0x40 /* Do colorbar */ + +/* Transformation parameters. */ +#define EPS_UNITARY 0 +#define EPS_LINEAR 1 +#define EPS_LOG 2 + +/* Page layout structure. */ +typedef struct { + int orientation; /* page orioentation */ + float scale; /* image scale factor */ + float maxscale; /* maxaspect image scale factor */ + int dpi; /* dpi resolution */ + int page_type; /* type of paper being used */ + int flags; /* option flags */ +} PSPage, *PSPagePtr; + +/* Colormap structure. */ +typedef struct { + int IsDefault; /* Are we using the default colormap? */ + int ncolors; /* number of colormap colors */ + int min, max; /* image min/max */ + unsigned char r[256]; /* red colormap */ + unsigned char g[256]; /* green colormap */ + unsigned char b[256]; /* blue colormap */ + char *cmap_name; /* colormap name */ +} PSCmap, *PSCmapPtr; + +/* Main EPS structure. */ +typedef struct { + int cols; /* num output columns */ + int rows; /* num output rows */ + int colorClass; /* output color class */ + int compression; /* output compression type */ + int annotate; /* annotate the output image? */ + int llx, lly, urx, ury; /* image coordinate corners */ + float z1, z2; /* zscale transform values */ + int ztype; /* type of transformation */ + float offset, scale; /* brightness/contrast values */ + char *label; /* label string */ + + PSPage page; /* Page layout structure */ + PSCmap cmap; /* Colormap struct */ +} PSImage, *PSImagePtr; + + +/* Page sizes and resolution information. */ +#define EPS_LETTER 0 +#define EPS_LEGAL 1 +#define EPS_A4 2 +#define EPS_B5 3 +#define EPS_BSIZE 4 +#define EPS_4BY5 5 +#define EPS_35MM 6 + +#define PageXdim(ps) ( PageInfo[ps->page.page_type].npixx ) +#define PageYdim(ps) ( PageInfo[ps->page.page_type].npixy ) +#define PageWidth(ps) ( PageInfo[ps->page.page_type].sizex ) +#define PageHeight(ps) ( PageInfo[ps->page.page_type].sizey ) + +/* Page layout definitions. */ +#define X_ANNOT_MARGIN 30 /* margin in pixels for annotation */ +#define Y_ANNOT_MARGIN 60 /* margin in pixels for annotation */ +#define TITLE_OFFSET 20 /* Offset for title string */ +#define AXIS_OOFFSET 7 /* Outer offset for axis */ +#define AXIS_IOFFSET 2 /* Inner offset for axis */ +#define AXIS_OWIDTH 1.5 /* Outer axis width */ +#define AXIS_IWIDTH 1.0 /* Inner axis width */ +#define MAJOR_TICK_SIZE 5 /* Size of major tic mark */ +#define MAJOR_TICK_WIDTH 1.5 /* Width of major tic mark */ +#define MINOR_TICK_SIZE 3 /* Size of major tic mark */ +#define MINOR_TICK_WIDTH 0.5 /* Width of major tic mark */ +#define NTICMARKS 5 /* Number of major tick marks */ + + +typedef struct { + float sizex, sizey; /* page size in inches */ + int npixx, npixy; /* pix resolution at 72 dpi */ +} PSPageInfo; + +static PSPageInfo PageInfo[] = { /* assumes 300 dpi */ + { 8.500, 11.000, /* US NORMAL, aka LETTER */ + 612, 762 + }, + { 8.500, 14.000, /* US LEGAL */ + 612, 1008 + }, + { 8.267, 11.811, /* A4 */ + 595, 850 + }, + { 7.283, 10.630, /* B5 */ + 524, 765 + }, + {11.000, 17.000, /* B-size */ + 762, 1224 + }, + { 3.875, 4.875, /* 4 by 5 */ + 279, 351 + }, + { 0.945, 1.417, /* 35mm (24x36) */ + 68, 102 + } +}; diff --git a/vendor/x11iraf/ximtool/fitsio.c b/vendor/x11iraf/ximtool/fitsio.c new file mode 100644 index 00000000..9bbd50c1 --- /dev/null +++ b/vendor/x11iraf/ximtool/fitsio.c @@ -0,0 +1,923 @@ +/* + * FITSIO.C -- Routines to load and save simple FITS files. + * + * ival = isFITS (fname) + * loadFITS (fname, pixels, w, h, r, g, b, ncolors, + * zsc, zr, &z1, &z2, nsample) + * writeFITS (fp, pixels, pixtype, w,h, r,g,b, ncolors) + * str = getFITSHdr (fname) + + * LoadFITS(fname, numcols) - loads a FITS file + * WriteFITS(fp, pic, w, h, rmap, gmap, bmap, numcols) + * + * isFITS -- returns nonzero if the named file is a FITS file. + * loadFITS -- reads a FITS file and returns the decoded pixel array and gray- + * scale 8 bit colormap. The caller is responsible for freeing + * the pixels buffer. + * writeFITS -- performs the converse operation, writing the given pixel array + * and colormap to the output Sun rasterfile. + * Based on contributed FITS I/O software for XV by David Robinson. + */ + + +#include +#include +#include + +#define NCARDS 36 +#define BLOCKSIZE 2880 +#define EPSILON 1.192e-7 + + +#define CONTRAST 0.25 /* zscaling parameters */ +#define NSAMPLE 1000 + + +/* MONO returns total intensity of r,g,b components */ +#define MONO(rd,gn,bl) (((rd)*11 + (gn)*16 + (bl)*5) >> 5) /*.33R+ .5G+ .17B*/ + +/* data types */ +enum datatype { T_INT, T_LOG, T_REAL, T_NOVAL, T_STRING }; + +typedef unsigned char byte; +#ifndef AIXV3 +#ifndef OSF1 +typedef unsigned char uchar; +#endif +#endif + +typedef struct { + FILE *fp; /* file pointer */ + int bitpix, size; /* bits per pixel, sizeof(unit) */ + int naxis; /* number of axes */ + long int axes[2]; /* size of each axis */ + long int ndata; /* number of elements in data */ + long int cpos; /* current position in data file */ + char title[80]; /* image title */ + int extend; /* image has extensions? */ + int nextend; /* number of extensions */ + float bscale, bzero; /* scaling parameters */ +} FITS; + +/* Function prototypes */ +#ifdef __STDC__ + +#include +#include + +static char *ftopen2d (FITS *fs, char *file, int *nx, int *ny, int *bitpix); +static void ftclose (FITS *fs); +static char *ftgbyte (FITS *fs, uchar *buffer, int nelem, int zsc, int zr, float *z1, float *z2, int nsample); +static char *rdheader (FITS *fs); +static char *wrheader (FILE *fp, int nx, int ny); +static char *rdcard (char *card, char *name, enum datatype dtype, long int *kvalue, float *rvalue); +static void wrcard (char *card, char *name, enum datatype dtype, int kvalue); +static char *ftgdata (FITS *fs, void *buffer, int nelem); +static char *ftfixdata (FITS *fs, void *buffer, int nelem); +#else +static char *ftopen2d (); +static void ftclose (); +static char *ftgbyte (); +static char *rdheader (); +static char *wrheader (); +static char *rdcard (); +static void wrcard (); +static char *ftgdata (); +static char *ftfixdata (); +#endif + + +/* ---------------- + * Public routines. + * ----------------*/ + + +/* loadFits - Load a simple FITS file. + */ +char * +loadFITS (fname, pix, nx, ny, r,g,b, ncolors, zsc, zr, z1, z2, nsample) +char *fname; /* input filename */ +uchar **pix; /* output pixels */ +int *nx, *ny; /* dimensions */ +uchar *r, *g, *b; /* colormap */ +int *ncolors; /* number of colors */ +int zsc, zr; /* z-scaling flags */ +float *z1, *z2; /* zscale values */ +int nsample; /* number of sample pts */ + +{ + FITS fs; + int i, w = 0, h = 0, bitpix, np; + byte *image; + char *error; + + error = ftopen2d (&fs, fname, &w, &h, &bitpix); + if (error) + return error; + if (fs.extend) + return "Load support for MEF files\nis not currently implemented"; + + /* allocate memory for image and read it in */ + np = w * h; + image = (byte *) malloc (np); + if (image == NULL) + return "Insufficient memory"; + + error = ftgbyte (&fs, image, np, zsc, zr, z1, z2, nsample); + ftclose (&fs); + if (error) { + free (image); + return error; + } + + /* There seems to be a convention that fits files be displayed using + * a cartesian coordinate system. Thus the first pixel is in the lower + * left corner. Fix this by reflecting in the line y=h/2. + */ + flip (image, w, h); + + /* sucess ! */ + *pix = (unsigned char *) image; + *nx = w; + *ny = h; + *ncolors = 256; + for (i = 0; i < 256; i++) + r[i] = g[i] = b[i] = i; + + return NULL; +} + + +/* writeFITS -- Write the current frame buffer out as a FITS image. + */ + +char * +writeFITS (fp, image, w, h, rmap, gmap, bmap, numcols) +FILE *fp; +byte *image; +int w, h; +byte *rmap, *gmap, *bmap; +int numcols; +{ + register int i, j, np, nend; + register byte *ptr; + char *error; + byte rgb[256]; + + error = wrheader(fp, w, h); + if (error != NULL) + return error; + + for (i = 0; i < numcols; i++) + rgb[i] = MONO(rmap[i], gmap[i], bmap[i]); + + /* flip line ordering when writing out */ + for (i = h - 1; i >= 0; i--) { + ptr = &image[i*w]; + for (j = 0; j < w; j++, ptr++) + putc(rgb[*ptr], fp); + } + + np = w * h; + /* nend is the number of padding characters at the end of the last + * block. + */ + nend = ((np + BLOCKSIZE - 1) / BLOCKSIZE) * BLOCKSIZE - np; + + if (nend) + for (i = 0; i < nend; i++) + putc('\0', fp); + + return NULL; +} + + +/* IsFITS -- Test a file to see if it is a FITS file. + */ +int +isFITS (fname) +char *fname; /* input filename */ +{ + register FILE *fp; + int value = 0; + char keyw[8], val; + + if (fp = fopen (fname, "r")) { + fscanf (fp, "%6s = %c", keyw, &val); + if (strcmp ("SIMPLE", keyw) == 0 && val == 'T') + value = 1; + fclose (fp); + } + return value; +} + + +/* getFITSHdr -- Get some set of header information for the GUI. + */ + +char * +getFITSHdr (fname) +char *fname; +{ + FITS fs; + char *error, *title, *line; + int w, h, bitpix; + + line = (char *) malloc (80); + + error = ftopen2d (&fs, fname, &w, &h, &bitpix); + if (error) { + strcpy (line, error); + return (line); + } + + if (fs.extend) { + sprintf (line, "%-16.16s %3d (%2d extns) %s", + fname, bitpix, fs.nextend, fs.title); + } else { + sprintf (line, "%-16.16s %3d %5dx%-5d %s", + fname, bitpix, w,h, fs.title); + } + + ftclose (&fs); + + return (line); +} + + + +/* + * Private Procedures + * ------------------ + */ + +/* Writes a minimalist FITS file header */ +static char +*wrheader (fp, nx, ny) +FILE *fp; +int nx, ny; +{ + char *block; + int i; + + block = (char *) malloc (BLOCKSIZE); + if (block == NULL) + return "Insufficient memory for workspace"; + memset(block, ' ', BLOCKSIZE); + + i = 0; + wrcard(&block[80*i++], "SIMPLE", T_LOG, 1); /* SIMPLE keyword */ + wrcard(&block[80*i++], "BITPIX", T_INT, 8); /* BITPIX keyword */ + wrcard(&block[80*i++], "NAXIS", T_INT, 2); /* NAXIS keyword */ + wrcard(&block[80*i++], "NAXIS1", T_INT, nx); /* NAXIS1 keyword */ + wrcard(&block[80*i++], "NAXIS2", T_INT, ny); /* NAXIS2 keyword */ + wrcard(&block[80*i++], "END", T_NOVAL, 0); /* END keyword */ + i = fwrite(block, sizeof(char), BLOCKSIZE, fp); + if (i != BLOCKSIZE) + return "Error writing FITS file"; + return NULL; +} + + +/* open a 2-dimensional fits file. + * Stores the dimensions of the file in nx and ny, and updates the FITS + * structure passed in fs. + * If successful, returns NULL otherwise returns an error message. + * Will return an error message if the primary data unit is not a 2-dimensional + * array. + */ +static char +*ftopen2d(fs, file, nx, ny, bitpix) +FITS *fs; +char *file; +int *nx, *ny, *bitpix; +{ + FILE *fp; + int naxis, i; + char *error; + + fp = fopen(file, "rb"); + if (fp == NULL) + return "Unable to open FITS file"; + + fs->fp = fp; + fs->bitpix = 0; + fs->naxis = 0; + fs->cpos = 0; + + /* read header */ + error = rdheader(fs); + + if (error != NULL) { + ftclose(fs); + return error; + } + + /* get number of data */ + fs->ndata = 1; + for (i = 0; i < fs->naxis; i++) + fs->ndata = fs->ndata * fs->axes[i]; + + naxis = fs->naxis; + + *nx = fs->axes[0]; + *ny = fs->axes[1]; + *bitpix = fs->bitpix; + + return error; +} + + +/* closes a fits file */ +static void +ftclose (fs) +FITS *fs; +{ + if (fs == NULL) + return; + if (fs->fp != NULL) + fclose(fs->fp); +} + + +/* reads the fits header, and updates the FITS structure fs. + * Returns NULL on success, or an error message otherwise. + */ +static char * +rdheader (fs) +FITS *fs; +{ + int i, j, res; + char name[9]; + char *block; + char *error; + long int val; /* the value */ + float rval; /* floating point value */ + + block = (char *) malloc(BLOCKSIZE); + if (block == NULL) + return "Insufficient memory for workspace"; + + res = fread(block, sizeof(char), BLOCKSIZE, fs->fp); + if (res != BLOCKSIZE) + return "Error reading FITS file"; + i = 0; + + /* read SIMPLE key */ + error = rdcard(block, "SIMPLE", T_LOG, &val, &rval); + if (error != NULL) + return error; + /* + if (val == 0) + return "Not a SIMPLE FITS file"; + */ + i++; + + /* read BITPIX key */ + error = rdcard(&block[80], "BITPIX", T_INT, &val, &rval); + if (error != NULL) + return error; + if (val != 8 && val != 16 && val != 32 && val != 64 && val != -32 && + val != -64) + return "Bad BITPIX value in FITS file"; + fs->bitpix = val; + j = fs->bitpix; + if (j < 0) + j = -j; + fs->size = j / 8; + i++; + + /* read NAXIS key */ + error = rdcard(&block[2*80], "NAXIS", T_INT, &val, &rval); + if (error != NULL) + return error; + if (val < 0 || val > 999) + return "Bad NAXIS value in FITS file"; + if (val == 1 || val > 2) + return "FITS file is not a two-dimensional image"; + fs->naxis = val; + i++; + + /* Check for an EXTEND/NEXTEND keyword pair. */ + error = rdcard(&block[3*80], "EXTEND", T_LOG, &val, &rval); + if (error == NULL) { + fs->extend = val; i++; + } else + fs->extend = 0; + error = rdcard(&block[4*80], "NEXTEND", T_INT, &val, &rval); + if (error == NULL) { + fs->nextend = val; i++; + } else + fs->nextend = 0; + + + /* read NAXISnnn keys. + * We allow NAXIS to be > 2 iff the dimensions of the extra axes are 1 + */ + for (j = 0; j < fs->naxis; j++) { + if (i == NCARDS) { + res = fread(block, sizeof(char), BLOCKSIZE, fs->fp); + if (res != BLOCKSIZE) + return "Error reading FITS file"; + i = 0; + } + + sprintf(name, "NAXIS%d", j + 1); + error = rdcard(&block[i*80], name, T_INT, &val, &rval); + if (error != NULL) + return error; + if (val < 0) + return "Bad NAXISn value in FITS file"; + if (j < 2) + fs->axes[j] = val; + else if (val != 1) + return "FITS file is not a two-dimensional image"; + i++; + } + fs->naxis = 2; + + /* do remainder */ + fs->bscale = 1.0; + fs->bzero = 0.0; + memset(fs->title, '\0', 80); + strcpy (fs->title, "No Title"); + for (; ; ) { + + if (block[i*80] == 'B') { + /* Try reading a BSCALE or BZERO keyword from this card. */ + error = rdcard(&block[i*80], "BSCALE", T_REAL, &val, &rval); + if (error == NULL) + fs->bscale = rval; + error = rdcard(&block[i*80], "BZERO", T_REAL, &val, &rval); + if (error == NULL) + fs->bzero = rval; + } + + if (i == NCARDS) { + res = fread(block, sizeof(char), BLOCKSIZE, fs->fp); + if (res != BLOCKSIZE) + return "Unexpected eof in FITS file"; + i = 0; + } + + if (strncmp(&block[i*80], "OBJECT ", 8) == 0) { + char *ip = &block[i*80]; + int i = 0, j = 0; + + /* Skip ahead to opening quote. */ + while (*ip != '\'' && i < 80) ip++, i++; + ip++, i++; + for (j=0; j < 80 && *ip != '\''; j++) { + fs->title[j] = *ip; + ip++; + } + fs->title[j] = '\0'; + } + + if (strncmp(&block[i*80], "END ", 8) == 0) + break; + i++; + } + free(block); + return NULL; +} + + +/* write a header record into the 80 byte buffer card. + * The keyword name is passed in name. The value type is in dtype; this + * can have the following values: + * dtype = T_NOVAL + * no keyword value is written + * dtype = T_LOG + * a logical value, either 'T' or 'F' in column 30 is written + * dtype = T_INT + * an integer is written, right justified in columns 11-30 + */ +static void +wrcard (card, name, dtype, kvalue) +char *card, *name; +enum datatype dtype; /* type of value */ +int kvalue; +{ + int l; + memset(card, ' ', 80); + l = strlen(name); + if (l) + memcpy(card, name, l); /* copy name */ + + if (dtype == T_NOVAL) + return; + + card[8] = '='; + + if (dtype == T_LOG) + card[29] = kvalue ? 'T' : 'F'; + else /* an integer */ { + sprintf(&card[10], "%20d", kvalue); + card[30] = ' '; + } + +} + + +/* Read a header record, from the 80 byte buffer card. + * the keyword name must match 'name'; and parse its value according to + * dtype. This can have the following values: + * dtype = T_LOG + * value is logical, either 'T' or 'F' in column 30. + * dtype = T_INT + * value is an integer, right justified in columns 11-30. + * dtype = T_REAL + * value is a real + * + * The value is stored in kvalue. + * It returns NULL on success, or an error message otherwise. + */ +static char * +rdcard (card, name, dtype, kvalue, rvalue) +char *card, *name; +enum datatype dtype; /* type of value */ +long int *kvalue; +float *rvalue; +{ + int i, ptr; + char namestr[9]; + static char error[45]; + + memcpy(namestr, card, 8); + i = 8; + do + i--; + while (i >= 0 && namestr[i] == ' '); + namestr[i+1] = '\0'; + + if (strcmp(namestr, name) != 0) { + sprintf(error, "Keyword %s not found in FITS file", name); + return error; + } + + /* get start of value */ + ptr = 10; + while (ptr < 80 && card[ptr] == ' ') + ptr++; + if (ptr == 80 || card[ptr] == '/') + return "FITS file has missing keyword value"; /* no value */ + + if (dtype == T_LOG) { + if ((card[ptr] != 'T' && card[ptr] != 'F')) + return "Keyword has bad logical value in FITS file"; + *kvalue = (card[ptr] == 'T'); + + } else /* an integer or real */ { + int j, end; + long int ival; + float fval; + char num[21]; + + /* + if (ptr > 29) + return "Keyword has bad integer value in FITS file"; + */ + end = ptr; + while (end < 80 && (card[end] != ' ' && card[end] != '/')) + end++; + memcpy(num, &card[ptr], end - ptr); + num[end-ptr] = '\0'; + if (dtype == T_INT) { + j = sscanf(num, "%ld", &ival); + if (j != 1) + return "Keyword has bad integer value in FITS file"; + *kvalue = ival; + *rvalue = 0.0; + } else if (dtype == T_REAL) { + j = sscanf(num, "%g", &fval); + if (j != 1) + return "Keyword has bad real value in FITS file"; + *kvalue = 0; + *rvalue = fval; + } + } + + return NULL; +} + + +/* reads nelem values into the buffer. + * returns NULL for success or an error message. + * Copes with the fact that the last 2880 byte record of the FITS file + * may be truncated, and should be padded out with zeros. + */ +static char * +ftgdata (fs, buffer, nelem) +FITS *fs; +void *buffer; +int nelem; +{ + int res; + + if (nelem == 0) + return NULL; + + res = fread(buffer, fs->size, nelem, fs->fp); + /* if failed to read all the data */ + if (res != nelem) { + /* nblock is the number of elements in a record. size is + * always a factor of BLOCKSIZE */ + int loffs, nblock = BLOCKSIZE / fs->size; + + if (!feof(fs->fp)) + return "I/O error reading FITS file"; + + /* The last record might be short; check this. + * loffs is the offset of the start of the last record from + * the current position. + */ + loffs = ((fs->ndata + nblock - 1) / nblock - 1) * nblock - fs->cpos; + + /* if we didn't read to the end of the penultimate record */ + if (res < loffs) + return "Unexpected EOF reading FITS file"; + + /* pad with zeros */ + memset((char *)buffer + res * fs->size, '\0', + (nelem - res) * fs->size); + } + fs->cpos += res; + return ftfixdata(fs, buffer, nelem); +} + + +/* convert the raw data, as stored in the FITS file, to the format + * appropiate for the data representation of the host computer. + * Assumes that + * short int = 2 byte integer + * int = 4 byte integer + */ +static char * +ftfixdata (fs, buffer, nelem) +FITS *fs; +void *buffer; +int nelem; +{ + register int i, n = nelem; + register uchar *ptr = buffer; + + /* conversions. Although the data may be signed, reverse using unsigned + * variables. Convert from big-endian two-byte signed integer to + * native form + */ + if (fs->bitpix == 16) + for (i = 0; i < n; i++, ptr += 2) + *(unsigned short int *)ptr = (((int)*ptr) << 8) | (int)(ptr[1]); + + /* convert from big-endian four-byte signed integer to native form */ + else if (fs->bitpix == 32) + for (i = 0; i < n; i++, ptr += 4) + *(unsigned int *)ptr = (((unsigned int)*ptr) << 24) | + ((unsigned int)ptr[1] << 16) | + ((unsigned int)ptr[2] << 8) | + (unsigned int)ptr[3]; + + /* convert from IEE 754 single precision to native form */ + else if (fs->bitpix == -32) { + register int j, k, expo; + static float *exps = NULL; + + if (exps == NULL) { + exps = (float *)calloc(256, sizeof(float)); + if (exps == NULL) + return "Insufficient memory for workspace"; + exps[150] = 1.; + for (i = 151; i < 256; i++) + exps[i] = 2. * exps[i-1]; + for (i = 149; i >= 0; i--) + exps[i] = 0.5 * exps[i+1]; + } + + + for (i = 0; i < n; i++, ptr += 4) { + k = (int)*ptr; + j = ((int)ptr[1] << 16) | ((int)ptr[2] << 8) | (int)ptr[3]; + expo = ((k & 127) << 1) | (j >> 23); + if ((expo | j) == 0) + *(float *)ptr = 0.; + else + *(float *)ptr = exps[expo] * (float)(j | 0x800000); + if (k & 128) + *(float *)ptr = -*(float *)ptr; + } + + /* convert from IEE 754 double precision to native form */ + } else if (fs->bitpix == -64) { + register int expo, k, l; + register unsigned int j; + static double *exps = NULL; + + if (exps == NULL) { + exps = (double *)calloc(2048, sizeof(double)); + if (exps == NULL) + return "Insufficient memory for workspace"; + exps[1075] = 1.; + for (i = 1076; i < 2048; i++) + exps[i] = 2. * exps[i-1]; + for (i = 1074; i >= 0; i--) + exps[i] = 0.5 * exps[i+1]; + } + + for (i = 0; i < n; i++, ptr += 8) { + k = (int)*ptr; + j = ((unsigned int)ptr[1] << 24) | ((unsigned int)ptr[2] << 16) | + ((unsigned int)ptr[3] << 8) | (unsigned int)ptr[4]; + l = ((int)ptr[5] << 16) | ((int)ptr[6] << 8) | (int)ptr[7]; + expo = ((k & 127) << 4) | (j >> 28); + if ((expo | j | l) == 0) + *(double *)ptr = 0.; + else + *(double *)ptr = exps[expo] * (16777216. * + (double)((j & 0x0FFFFFFF) | 0x10000000) + (double)l); + if (k & 128) + *(double *)ptr = -*(double *)ptr; + } + } + return NULL; +} + + +#undef max +#define f_max(a,b) ((a) > (b) ? (a) : (b)) +#undef min +#define f_min(a,b) ((a) < (b) ? (a) : (b)) + + +/* Reads a byte image from the FITS file fs. The image contains nelem pixels. + * If bitpix = 8, then the image is loaded as stored in the file if not scaled. + * Otherwise, it is rescaled so that the minimum value is stored as 0, and + * the maximum is stored as 255 + */ +static char * +ftgbyte(fs, cbuff, nelem, zsc, zr, z1, z2, nsample) +FITS *fs; +uchar *cbuff; +int nelem; +int zsc, zr; +float *z1, *z2; +int nsample; +{ + char * voidbuff; + register int i, n = nelem; + char *error; + int pmin = 0, pmax = 255; + int npts, stdline; + extern void zscale(); + + /* if the data is uchar, then read it directly */ + if (fs->bitpix == 8 && (fs->bscale == 1.0 && fs->bzero == 0.0)) { + *z1 = 0.0; + *z2 = 255.0; + return ftgdata(fs, cbuff, nelem); + } + + /* allocate a buffer to store the image */ + if (fabs((double)fs->bscale-1.0) > EPSILON || + fabs((double)fs->bzero) > EPSILON) + voidbuff = (char * )malloc(nelem * f_max(fs->size,4)); + else + voidbuff = (char * )malloc(nelem * fs->size); + if (voidbuff == NULL) + return "Insufficient memory for workspace"; + error = ftgdata(fs, voidbuff, nelem); + if (error != NULL) { + printf ("ftgbyte: %s\n", error); + return error; + } + + /* If we've got BSCALE/BZERO values compute the original pixel values + * and convert the buffer to floating point before processing it. + * The voidbuff was allocated above with this in mind so it should be + * large enough that we can fix the pixels in place. + */ + + npts = fs->axes[0] * fs->axes[1]; + stdline = (int)((float)fs->axes[1] / sqrt((float)npts/(float)nsample)); + if (fs->bscale != 1.0 || fs->bzero != 0.0) { + register float *buf; + + buf = (float *)voidbuff; + + if (fs->bitpix == 8) { + for (i=(nelem-1); i >= 0; i--) + buf[i] = (float) voidbuff[i] * fs->bscale + fs->bzero; + } else if (fs->bitpix == 16) { + register short *old; + for (i=(nelem-1); i >= 0; i--) { + old = (short *) &voidbuff[i * 2]; + buf[i] = (float) *old * fs->bscale + fs->bzero; + } + } else if (fs->bitpix == 32) { + register int *old; + for (i=(nelem-1); i >= 0; i--) { + old = (int *) &voidbuff[i * 4]; + buf[i] = (float) *old * fs->bscale + fs->bzero; + } + } else if (fs->bitpix == -32) { + register float *old; + for (i=(nelem-1); i >= 0; i--) { + old = (float *) &voidbuff[i * 4]; + buf[i] = (float) *old * fs->bscale + fs->bzero; + } + } else if (fs->bitpix == -64) { + register double *old, *dbuf; + register float *fpix; + + dbuf = (double *) malloc (nelem * sizeof(double)); + for (i=(nelem-1); i >= 0; i--) { + old = (double *) &voidbuff[i * 8]; + dbuf[i] = (float) *old * fs->bscale + fs->bzero; + } + fpix = (float *) voidbuff; + for (i=0; isize = 4; + fs->bitpix = -32; + + /* compute the optimal zscale values */ + if (zsc) + zscale ((char *)buf, fs->axes[0], fs->axes[1], fs->bitpix, + z1, z2, CONTRAST, nsample, stdline); + else if (zr) + min_max ((float *)buf, nelem, fs->bitpix, z1, z2); + + } else { + /* compute the optimal zscale values */ + if (zsc) + zscale (voidbuff, fs->axes[0], fs->axes[1], fs->bitpix, + z1, z2, CONTRAST, nsample, stdline); + else if (zr) + min_max ((float *)voidbuff, nelem, fs->bitpix, z1, z2); + } + + /* convert short int to uchar */ + if (fs->bitpix == 16) { + register short int *buffer = (short *)voidbuff; + register int max, min; + register float scale; + + min = (int) *z1; + max = (int) *z2; + scale = (max == min) ? 0. : 255. / (*z2 -*z1); + + /* rescale and convert */ + for (i = 0, buffer = (short *)voidbuff; i < n; i++) + cbuff[i] = f_max (pmin, f_min (pmax, + (int)(scale * (float)((int)buffer[i] - min)) )); + + /* convert long int to uchar */ + } else if (fs->bitpix == 32) { + register int *buffer = (int *)voidbuff; + register int max, min; + register float scale; + + min = (int) *z1; + max = (int) *z2; + scale = (max == min) ? 0. : 255. / (*z2 - *z1); + + /* rescale and convert */ + for (i = 0, buffer = (int *)voidbuff; i < n; i++) + cbuff[i] = f_max (pmin, f_min (pmax, + (int)(scale * (float)((int)buffer[i] - min)) )); + + /* convert float to uchar */ + } else if (fs->bitpix == -32) { + register float *buffer = (float *)voidbuff; + register float max, min, scale; + + min = *z1; + max = *z2; + scale = (max == min) ? 0. : 255. / (*z2 - *z1); + + /* rescale and convert */ + for (i = 0, buffer = (float *)voidbuff; i < n; i++) + cbuff[i] = f_max (pmin, f_min (pmax, + (int)(scale * ((float)buffer[i] - min)) )); + + /* convert double to uchar */ + } else if (fs->bitpix == -64) { + register double *buffer = (double *)voidbuff; + register double max, min, scale; + + min = (double) *z1; + max = (double) *z2; + scale = (max == min) ? 0. : 255. / (*z2 - *z1); + + /* rescale and convert */ + for (i = 0, buffer = (double *)voidbuff; i < n; i++) + cbuff[i] = f_max (pmin, f_min (pmax, + (int)(scale * ((double)buffer[i] - min)) )); + } + + free( (char *)voidbuff); + return NULL; +} diff --git a/vendor/x11iraf/ximtool/gifio.c b/vendor/x11iraf/ximtool/gifio.c new file mode 100644 index 00000000..de81085b --- /dev/null +++ b/vendor/x11iraf/ximtool/gifio.c @@ -0,0 +1,1325 @@ +/* + * GIFIO.C -- Routines to load and save simple GIF files. + * + * ival = isGIF (fname) + * loadGIF (fname, pixels, pixtype, w,h, r,g,b, ncolors) + * writeGIF (fp, pixels, pixtype, w,h, r,g,b, ncolors, gray) + + * LoadGIF(fname, numcols) - loads a GIF file + * WriteGIF(fp, pic, w, h, rmap, gmap, bmap, numcols) + * + * isGIF -- returns nonzero if the named file is a GIF file. + * loadGIF -- reads a GIF file and returns the decoded pixel array and gray- + * scale 8 bit colormap. The caller is responsible for freeing + * the pixels buffer. + * writeGIF -- performs the converse operation, writing the given pixel array + * and colormap to the output GIF file. + * + * Based on GIFENCOD by David Rowley .A + * Lempel-Zim compression based on "compress". + */ + +#include +#include + + +/* a code_int must be able to hold 2**GIFBITS values of type int, and also -1 + */ +typedef int code_int; +typedef long int count_int; +typedef unsigned char byte; +#ifndef AIXV3 +#ifndef OSF1 +typedef unsigned char uchar; +#endif +#endif + +#define MAXCOLORS 256 +#define TRUE 1 +#define FALSE 0 + +#define CM_RED 0 +#define CM_GREEN 1 +#define CM_BLUE 2 + +#define GIFBITS 12 + +#define INTERLACE 0x40 +#define LOCALCOLORMAP 0x80 + +#define BitSet(byte, bit) (((byte) & (bit)) == (bit)) +#define ReadOK(file,buffer,len) (fread(buffer, len, 1, file) != 0) +#define LM_to_uint(a,b) (((b)<<8)|(a)) + +static struct { + unsigned int Width; + unsigned int Height; + unsigned int BitPixel; + unsigned int ColorResolution; + unsigned int Background; + unsigned int AspectRatio; +} GifScreen; + +static struct { + int transparent; + int delayTime; + int inputFlag; + int disposal; +} Gif89 = { + -1, -1, -1, 0 }; + + + +/* MONO returns total intensity of r,g,b components */ +#define MONO(rd,gn,bl) (((rd)*11 + (gn)*16 + (bl)*5) >> 5) /*.33R+ .5G+ .17B*/ + + +/* Function prototypes */ +#ifdef __STDC__ + +#include +#include + +static int colorstobpp (int colors); +static int GetPixel (int x, int y); +static void BumpPixel (void); +static int GIFNextPixel (); +static void GIFEncode (FILE* fp, int GWidth, int GHeight, int GInterlace, + int Background, int BitsPerPixel, int Red[], int Green[], int Blue[]); +static void Putword (int w, FILE* fp); +static void compress (int init_bits, FILE* outfile); +static void output (code_int code); +static void cl_block (void); +static void cl_hash (count_int hsize); +static void writeerr (void); +static void char_init (void); +static void char_out (int c); +static void flush_char (void); + +static char *ReadGIF (FILE *fd, int imageNumber, uchar **pix, int *nx, int *ny, + uchar *r, uchar *g, uchar *b, int *ncolors); +static int ReadColorMap (FILE *fd, int number, uchar *r, uchar *g, uchar *b ); +static int DoExtension (FILE *fd, int label ); +static int GetDataBlock (FILE *fd, uchar *buf ); +static int GetCode (FILE *fd, int code_size, int flag ); +static int LWZReadByte (FILE *fd, int flag, int input_code_size ); +static char *ReadImage (FILE *fd, int len, int height, + int interlace, int ignore, uchar **image ); + +#else +static int colorstobpp(), GIFNextPixel(); +static void BumpPixel (), GIFEncode (), Putword (), compress (); +static void output (), cl_block (), cl_hash (), writeerr (), char_init (); +static void char_out (), flush_char (); + +static char *ReadGIF (), *ReadImage (); +static int ReadColorMap (), DoExtension (), GetDataBlock (); +static int GetCode (), LWZReadByte (); +#endif + +static byte *pixels; +static int nrows, ncols; +static char *errstr = NULL; + + +/* ---------------- + * Public routines. + * ----------------*/ + + +/* loadGIF - Load a GIF file. + */ + +char * +loadGIF (fname, pix, nx, ny, r,g,b, ncolors, gray) +char *fname; /* input filename */ +uchar **pix; /* output pixels */ +int *nx, *ny; /* dimensions */ +uchar *r, *g, *b; /* colormap */ +int *ncolors; /* number of colors */ +int gray; /* read as a grayscale? */ +{ + register FILE *fd; + register int i, imageNumber = 1; + + if ((fd = fopen(fname, "rb")) == NULL) + return "Unable to open FITS file"; + + for (i=0; i < 256; i++) + r[i] = g[i] = b[i] = 0; + + errstr = ReadGIF(fd, imageNumber, pix, nx, ny, r, g, b, ncolors); + + /* If we requested grayscale reset the colormap and pixels. */ + if (gray) + for (i=0; i < 256; i++) + r[i] = g[i] = b[i] = MONO(r[i],g[i],b[i]); + + fclose (fd); + return (errstr); +} + + +/* writeGIF -- Write a GIF image. + */ + +int +writeGIF (fp, image, w, h, rmap, gmap, bmap, numcols, gray) +FILE *fp; /* output file descriptor */ +byte *image; /* image pixels */ +int w, h; /* image dimensions */ +byte *rmap, *gmap, *bmap; /* colormap */ +int numcols; /* number of colors */ +int gray; /* save as grayscale? */ +{ + register int i, bpp, npix; + int r[MAXCOLORS], g[MAXCOLORS], b[MAXCOLORS]; + + /* Change type of the colormap. */ + if (gray) + for (i = 0; i < MAXCOLORS; i++) + r[i] = g[i] = b[i] = (int) MONO(rmap[i],gmap[i],bmap[i]); + else + for (i = 0; i < MAXCOLORS; i++) { + r[i] = (int) rmap[i]; + g[i] = (int) gmap[i]; + b[i] = (int) bmap[i]; + } + bpp = colorstobpp (numcols); + + /* Load the pixel buffer */ + npix = w * h; + ncols = w; + nrows = h; + pixels = (byte *) malloc (npix * sizeof(byte)); + for (i = 0; i < npix; i++) + pixels[i] = image[i]; + + /* All set, write it out. */ + GIFEncode (fp, w, h, 0, 0, bpp, r, g, b); + + /* Clean up. */ + free ((byte *)pixels); +} + + +/* IsGIF -- Test a file to see if it is a GIF file. + */ +int +isGIF (fname) +char *fname; /* input filename */ +{ + register FILE *fp; + int value = 0; + char tag[5]; + + if (fp = fopen (fname, "r")) { + fread (tag, sizeof(char), 4, fp); + if (strncmp ("GIF8", tag, 4) == 0) + value = 1; + fclose (fp); + } + return value; +} + + +/* getGIFHdr -- Get some set of header information for the GUI. + */ + +char * +getGIFHdr (fname) +char *fname; +{ + FILE *fp; + char *line; + uchar buf[16], version[4]; + int nx, ny, ncolors; + + + /* Open the image. */ + fp = fopen (fname, "r"); + if (!fp) + return NULL; + + /* Get the version. */ + if (!ReadOK(fp, buf, 6) || strncmp(buf, "GIF", 3) != 0) + return NULL; + strncpy(version, buf + 3, 3); + version[3] = '\0'; + + + /* Read the image header. */ + if (!ReadOK(fp, buf, 7)) + return NULL; + nx = LM_to_uint(buf[0], buf[1]); + ny = LM_to_uint(buf[2], buf[3]); + ncolors = 2 << (buf[4] & 0x07); + + /* Format the description. */ + line = (char *) malloc (80); + sprintf (line, "%-16.16s 8 %5dx%-5d GIF%s Image (%d colors)", + fname, nx, ny, version, ncolors); + + fclose (fp); + return (line); +} + + + +/* ------------------ + * Private Procedures + * ------------------*/ + + +/* COLORSTOBPP -- Convert the numbers of colors we're writing to a + * bits-per-pixel value. + */ +static int +colorstobpp (colors) +int colors; +{ + int bpp; + + if (colors <= 2) + bpp = 1; + else if (colors <= 4) + bpp = 2; + else if (colors <= 8) + bpp = 3; + else if (colors <= 16) + bpp = 4; + else if (colors <= 32) + bpp = 5; + else if (colors <= 64) + bpp = 6; + else if (colors <= 128) + bpp = 7; + else if (colors <= 256) + bpp = 8; + else + perror ("can't happen"); + + return bpp; +} + + + +/*---------------------- + * GIF Input Procedures + *----------------------*/ + + +/* +-------------------------------------------------------------------+ + * | Copyright 1990, David Koblas. | + * | Permission to use, copy, modify, and distribute this software | + * | and its documentation for any purpose and without fee is hereby | + * | granted, provided that the above copyright notice appear in all | + * | copies and that both that copyright notice and this permission | + * | notice appear in supporting documentation. This software is | + * | provided "as is" without express or implied warranty. | + * +-------------------------------------------------------------------+ + */ + + +static char * +ReadGIF(fd, imageNumber, pix, nx, ny, r, g, b, ncolors) +FILE *fd; +int imageNumber; +uchar **pix; +int *nx, *ny; +uchar *r, *g, *b; +int *ncolors; +{ + uchar buf[16]; + uchar c; + int useGlobalColormap; + int bitPixel; + int imageCount = 0; + char version[4]; + + if (!ReadOK(fd, buf, 6)) + return "error reading magic number"; + + if (strncmp(buf, "GIF", 3) != 0) + return "not a GIF file"; + + strncpy(version, buf + 3, 3); + version[3] = '\0'; + + if ((strcmp(version, "87a") != 0) && (strcmp(version, "89a") != 0)) + return "bad version number, not '87a' or '89a'"; + + if (!ReadOK(fd, buf, 7)) + return "failed to read screen descriptor"; + + *nx = GifScreen.Width = LM_to_uint(buf[0], buf[1]); + *ny = GifScreen.Height = LM_to_uint(buf[2], buf[3]); + *ncolors = GifScreen.BitPixel = 2 << (buf[4] & 0x07); + GifScreen.ColorResolution = (((buf[4] & 0x70) >> 3) + 1); + GifScreen.Background = buf[5]; + GifScreen.AspectRatio = buf[6]; + + if (BitSet(buf[4], LOCALCOLORMAP)) { /* Global Colormap */ + if (ReadColorMap(fd, *ncolors, r, g, b)) + return "error reading global colormap"; + } + + if (GifScreen.AspectRatio != 0 && GifScreen.AspectRatio != 49) { + float r; + r = ( (float) GifScreen.AspectRatio + 15.0 ) / 64.0; + } + + for (; ; ) { + if (!ReadOK(fd, &c, 1)) + return "EOF / read error on image data"; + + if (c == ';') { /* GIF terminator */ + if (imageCount < imageNumber) + return "requested image number not found"; + return; + } + + if (c == '!') { /* Extension */ + if (!ReadOK(fd, &c, 1)) + return "OF / read error on extention function code"; + DoExtension(fd, c); + continue; + } + + if (c != ',') /* Not a valid start character */ + continue; + + ++imageCount; + + if (!ReadOK(fd, buf, 9)) + return "couldn't read left/top/width/height"; + + useGlobalColormap = !BitSet(buf[8], LOCALCOLORMAP); + + bitPixel = 1 << ((buf[8] & 0x07) + 1); + + if (!useGlobalColormap) { + if (ReadColorMap(fd, bitPixel, r, g, b)) + return "error reading local colormap"; + return (ReadImage(fd, LM_to_uint(buf[4], buf[5]), + LM_to_uint(buf[6], buf[7]), BitSet(buf[8], INTERLACE), + imageCount != imageNumber, pix )); + } else { + return (ReadImage(fd, LM_to_uint(buf[4], buf[5]), + LM_to_uint(buf[6], buf[7]), BitSet(buf[8], INTERLACE), + imageCount != imageNumber, pix )); + } + + } +} + + +static int +ReadColorMap(fd, number, r, g, b) +FILE *fd; +int number; +uchar *r, *g, *b; +{ + int i; + uchar rgb[3]; + + for (i = 0; i < number; ++i) { + if (!ReadOK(fd, rgb, sizeof(rgb))) + return TRUE; + + r[i] = rgb[0] ; + g[i] = rgb[1] ; + b[i] = rgb[2] ; + } + return FALSE; +} + + +static int +DoExtension(fd, label) +FILE *fd; +int label; +{ + static char buf[256]; + char *str; + + switch (label) { + case 0x01: /* Plain Text Extension */ + str = "Plain Text Extension"; + break; + case 0xff: /* Application Extension */ + str = "Application Extension"; + break; + case 0xfe: /* Comment Extension */ + str = "Comment Extension"; + while (GetDataBlock(fd, (uchar * ) buf) != 0) + ; + return FALSE; + case 0xf9: /* Graphic Control Extension */ + str = "Graphic Control Extension"; + (void) GetDataBlock(fd, (uchar * ) buf); + Gif89.disposal = (buf[0] >> 2) & 0x7; + Gif89.inputFlag = (buf[0] >> 1) & 0x1; + Gif89.delayTime = LM_to_uint(buf[1], buf[2]); + if ((buf[0] & 0x1) != 0) + Gif89.transparent = buf[3]; + + while (GetDataBlock(fd, (uchar * ) buf) != 0) + ; + return FALSE; + default: + str = buf; + sprintf(buf, "UNKNOWN (0x%02x)", label); + break; + } + + while (GetDataBlock(fd, (uchar * ) buf) != 0) ; + + return FALSE; +} + + +static int ZeroDataBlock = FALSE; + +static int +GetDataBlock(fd, buf) +FILE *fd; +uchar *buf; +{ + uchar count; + + if (!ReadOK(fd, &count, 1)) + return - 1; + + ZeroDataBlock = count == 0; + + if ((count != 0) && (!ReadOK(fd, buf, count))) + return - 1; + + return count; +} + + +static int +GetCode(fd, code_size, flag) +FILE *fd; +int code_size; +int flag; +{ + static uchar buf[280]; + static int curbit, lastbit, done, last_byte; + int i, j, ret; + uchar count; + + if (flag) { + curbit = 0; + lastbit = 0; + done = FALSE; + return 0; + } + + if ( (curbit + code_size) >= lastbit) { + if (done) + return - 1; + buf[0] = buf[last_byte-2]; + buf[1] = buf[last_byte-1]; + + if ((count = GetDataBlock(fd, &buf[2])) == 0) + done = TRUE; + + last_byte = 2 + count; + curbit = (curbit - lastbit) + 16; + lastbit = (2 + count) * 8 ; + } + + ret = 0; + for (i = curbit, j = 0; j < code_size; ++i, ++j) + ret |= ((buf[ i / 8 ] & (1 << (i % 8))) != 0) << j; + + curbit += code_size; + + return ret; +} + + +static int +LWZReadByte(fd, flag, input_code_size) +FILE *fd; +int flag; +int input_code_size; +{ + static int fresh = FALSE; + int code, incode; + static int code_size, set_code_size; + static int max_code, max_code_size; + static int firstcode, oldcode; + static int clear_code, end_code; + static int table[2][(1<< GIFBITS)]; + static int stack[(1<<(GIFBITS))*2], *sp; + register int i; + + if (flag) { + set_code_size = input_code_size; + code_size = set_code_size + 1; + clear_code = 1 << set_code_size ; + end_code = clear_code + 1; + max_code_size = 2 * clear_code; + max_code = clear_code + 2; + + GetCode(fd, 0, TRUE); + + fresh = TRUE; + + for (i = 0; i < clear_code; ++i) { + table[0][i] = 0; + table[1][i] = i; + } + for (; i < (1 << GIFBITS); ++i) + table[0][i] = table[1][0] = 0; + + sp = stack; + + return 0; + } else if (fresh) { + fresh = FALSE; + do { + firstcode = oldcode = + GetCode(fd, code_size, FALSE); + } while (firstcode == clear_code); + return firstcode; + } + + if (sp > stack) + return * --sp; + + while ((code = GetCode(fd, code_size, FALSE)) >= 0) { + if (code == clear_code) { + for (i = 0; i < clear_code; ++i) { + table[0][i] = 0; + table[1][i] = i; + } + for (; i < (1 << GIFBITS); ++i) + table[0][i] = table[1][i] = 0; + code_size = set_code_size + 1; + max_code_size = 2 * clear_code; + max_code = clear_code + 2; + sp = stack; + firstcode = oldcode = + GetCode(fd, code_size, FALSE); + return firstcode; + } else if (code == end_code) { + int count; + uchar buf[260]; + + if (ZeroDataBlock) + return - 2; + + while ((count = GetDataBlock(fd, buf)) > 0) + ; + + return - 2; + } + + incode = code; + + if (code >= max_code) { + *sp++ = firstcode; + code = oldcode; + } + + while (code >= clear_code) { + *sp++ = table[1][code]; + code = table[0][code]; + } + + *sp++ = firstcode = table[1][code]; + + if ((code = max_code) < (1 << GIFBITS)) { + table[0][code] = oldcode; + table[1][code] = firstcode; + ++max_code; + if ((max_code >= max_code_size) && + (max_code_size < (1 << GIFBITS))) { + max_code_size *= 2; + ++code_size; + } + } + + oldcode = incode; + + if (sp > stack) + return * --sp; + } + return code; +} + + +static char * +ReadImage(fd, len, height, interlace, ignore, image) +FILE *fd; +int len, height; +int interlace, ignore; +uchar **image; +{ + uchar c; + int v; + int xpos = 0, ypos = 0, pass = 0; + + /* Initialize the Compression routines */ + if (!ReadOK(fd, &c, 1)) + return "EOF / read error on image data"; + + if (LWZReadByte(fd, TRUE, c) < 0) + return "error reading image"; + + /* If this is an "uninteresting picture" ignore it. */ + if (ignore) { + while (LWZReadByte(fd, FALSE, c) >= 0) + ; + return; + } + + if ((*image = (uchar *)malloc(len * height)) == NULL) + return "couldn't alloc space for image"; + + while ((v = LWZReadByte(fd, FALSE, c)) >= 0 ) { + (*image)[ypos * len + xpos] = v; + + ++xpos; + if (xpos == len) { + xpos = 0; + if (interlace) { + switch (pass) { + case 0: + case 1: + ypos += 8; + break; + case 2: + ypos += 4; + break; + case 3: + ypos += 2; + break; + } + + if (ypos >= height) { + ++pass; + switch (pass) { + case 1: + ypos = 4; + break; + case 2: + ypos = 2; + break; + case 3: + ypos = 1; + break; + default: + goto fini; + } + } + } else { + ++ypos; + } + } + if (ypos >= height) + break; + } + +fini: + return NULL; +} + + + +/*----------------------- + * GIF Output Procedures + *-----------------------*/ + +/***************************************************************************** + * + * GIFENCODE.C - GIF Image compression interface + * + * GIFEncode (FName, GHeight, GWidth, GInterlace, Background, + * BitsPerPixel, Red, Green, Blue) + * + *****************************************************************************/ + +#define TRUE 1 +#define FALSE 0 + +static int Width, Height; +static int curx, cury; +static long CountDown; +static int Pass = 0; +static int Interlace; + + + +static void +GIFEncode (fp, GWidth, GHeight, GInterlace, Background, +BitsPerPixel, Red, Green, Blue) + +FILE*fp; +int GWidth, GHeight; +int GInterlace; +int Background; +int BitsPerPixel; +int Red[], Green[], Blue[]; +{ + int B; + int RWidth, RHeight; + int LeftOfs, TopOfs; + int Resolution; + int ColorMapSize; + int InitCodeSize; + int i; + + Interlace = GInterlace; + + ColorMapSize = 1 << BitsPerPixel; + + RWidth = Width = GWidth; + RHeight = Height = GHeight; + LeftOfs = TopOfs = 0; + + Resolution = BitsPerPixel; + + /* Calculate number of bits we are expecting */ + CountDown = (long)Width * (long)Height; + + /* Indicate which pass we are on (if interlace) */ + Pass = 0; + + /* The initial code size */ + if (BitsPerPixel <= 1) + InitCodeSize = 2; + else + InitCodeSize = BitsPerPixel; + + /* Set up the current x and y position */ + curx = cury = 0; + + /* Write the Magic header */ + fwrite ("GIF87a", 1, 6, fp); + + /* Write out the screen width and height */ + Putword (RWidth, fp); + Putword (RHeight, fp); + + /* Indicate that there is a global colour map */ + B = 0x80; /* Yes, there is a color map */ + + /* OR in the resolution */ + B |= (Resolution - 1) << 5; + + /* OR in the Bits per Pixel */ + B |= (BitsPerPixel - 1); + + /* Write it out */ + fputc (B, fp); + + /* Write out the Background colour */ + fputc (Background, fp); + + /* Byte of 0's (future expansion) */ + fputc (0, fp); + + /* Write out the Global Colour Map */ + for (i = 0; i < ColorMapSize; ++i) { + fputc (Red[i], fp); + fputc (Green[i], fp); + fputc (Blue[i], fp); + } + + /* Write an Image separator */ + fputc (',', fp); + + /* Write the Image header */ + Putword (LeftOfs, fp); + Putword (TopOfs, fp); + Putword (Width, fp); + Putword (Height, fp); + + /* Write out whether or not the image is interlaced */ + if (Interlace) + fputc (0x40, fp); + else + fputc (0x00, fp); + + /* Write out the initial code size */ + fputc (InitCodeSize, fp); + + /* Go and actually compress the data */ + compress (InitCodeSize + 1, fp); + + /* Write out a Zero-length packet (to end the series) */ + fputc (0, fp); + + /* Write the GIF file terminator */ + fputc (';', fp); +} + + +/* Bump the 'curx' and 'cury' to point to the next pixel + */ +static void +BumpPixel() +{ + /* Bump the current X position */ + ++curx; + + /* If we are at the end of a scan line, set curx back to the beginning + * If we are interlaced, bump the cury to the appropriate spot, + * otherwise, just increment it. + */ + if (curx == Width) { + curx = 0; + + if (!Interlace) + ++cury; + else { + switch (Pass) { + case 0: + cury += 8; + if (cury >= Height) { + ++Pass; + cury = 4; + } + break; + case 1: + cury += 8; + if (cury >= Height) { + ++Pass; + cury = 2; + } + break; + case 2: + cury += 4; + if (cury >= Height) { + ++Pass; + cury = 1; + } + break; + case 3: + cury += 2; + break; + } + } + } +} + + +/* Return the next pixel from the image + */ +static int +GIFNextPixel () +{ + int r; + + if (CountDown == 0) + return EOF; + + --CountDown; + r = (int) pixels[ cury * ncols + curx ] ; + BumpPixel(); + return r; +} + + +/* Write out a word to the GIF file + */ +static void +Putword (w, fp) +int w; +FILE*fp; +{ + fputc (w & 0xff, fp); + fputc ((w / 256) & 0xff, fp); +} + + +/*************************************************************************** + * + * GIFCOMPR.C - GIF Image compression routines + * + * Lempel-Ziv compression based on 'compress'. GIF modifications by + * David Rowley (mgardi@watdcsu.waterloo.edu) + * + ***************************************************************************/ + +/* + * General DEFINEs + */ + +#define GIFBITS 12 +#define HSIZE 5003 /* 80% occupancy */ + +#ifdef NO_UCHAR +typedef char char_type; +#else /*NO_UCHAR*/ +typedef unsigned char char_type; +#endif /*NO_UCHAR*/ + +/* + * + * GIF Image compression - modified 'compress' + * + * Based on: compress.c - File compression ala IEEE Computer, June 1984. + * + * By Authors: Spencer W. Thomas (decvax!harpo!utah-cs!utah-gr!thomas) + * Jim McKie (decvax!mcvax!jim) + * Steve Davies (decvax!vax135!petsd!peora!srd) + * Ken Turkowski (decvax!decwrl!turtlevax!ken) + * James A. Woods (decvax!ihnp4!ames!jaw) + * Joe Orost (decvax!vax135!petsd!joe) + * + */ +#include + +#define ARGVAL() (*++(*argv) || (--argc && *++argv)) + +static int n_bits; /* number of bits/code */ +static int maxbits = GIFBITS; /* user settable max # bits/code */ +static code_int maxcode; /* maximum code, given n_bits */ + /* should NEVER generate this code */ +static code_int maxmaxcode = (code_int) 1 << GIFBITS; +#ifdef COMPATIBLE /* But wrong! */ +# define MAXCODE(n_bits) ((code_int) 1 << (n_bits) - 1) +#else /*COMPATIBLE*/ +# define MAXCODE(n_bits) (((code_int) 1 << (n_bits)) - 1) +#endif /*COMPATIBLE*/ + +static count_int htab [HSIZE]; +static unsigned short codetab [HSIZE]; +#define HashTabOf(i) htab[i] +#define CodeTabOf(i) codetab[i] + +/*static*/ code_int hsize = HSIZE; /* for dynamic table sizing */ + +/* To save much memory, we overlay the table used by compress() with those + * used by decompress(). The tab_prefix table is the same size and type + * as the codetab. The tab_suffix table needs 2**GIFBITS characters. We + * get this from the beginning of htab. The output stack uses the rest + * of htab, and contains characters. There is plenty of room for any + * possible stack (stack used to be 8000 characters). + */ + +#define tab_prefixof(i) CodeTabOf(i) +#define tab_suffixof(i) ((char_type*)(htab))[i] +#define de_stack ((char_type*)&tab_suffixof((code_int)1< 0) + goto probe; +nomatch: + output ((code_int) ent); + ++out_count; + ent = c; + if (free_ent < maxmaxcode) { /* } */ + CodeTabOf (i) = free_ent++; /* code -> hashtable */ + HashTabOf (i) = fcode; + } else + cl_block(); + } + + /* + * Put out the final code. + */ + output ((code_int)ent); + ++out_count; + output ((code_int) EOFCode); +} + +/***************************************************************** + * TAG (output) + * + * Output the given code. + * Inputs: + * code: A n_bits-bit integer. If == -1, then EOF. This assumes + * that n_bits =< (long)wordsize - 1. + * Outputs: + * Outputs code to the file. + * Assumptions: + * Chars are 8 bits long. + * Algorithm: + * Maintain a GIFBITS character long buffer (so that 8 codes will + * fit in it exactly). Use the VAX insv instruction to insert each + * code in turn. When the buffer fills up empty it and start over. + */ + + +static void +output (code) +code_int code; +{ + cur_accum &= masks[ cur_bits ]; + + if (cur_bits > 0) + cur_accum |= ((long)code << cur_bits); + else + cur_accum = code; + + cur_bits += n_bits; + + while (cur_bits >= 8) { + char_out ((unsigned int)(cur_accum & 0xff)); + cur_accum >>= 8; + cur_bits -= 8; + } + + /* + * If the next entry is going to be too big for the code size, + * then increase it, if possible. + */ + if (free_ent > maxcode || clear_flg) { + + if (clear_flg) { + maxcode = MAXCODE (n_bits = g_init_bits); + clear_flg = 0; + } else { + ++n_bits; + if (n_bits == maxbits) + maxcode = maxmaxcode; + else + maxcode = MAXCODE(n_bits); + } + } + + if (code == EOFCode) { + /* At EOF, write the rest of the buffer. */ + while (cur_bits > 0) { + char_out ((unsigned int)(cur_accum & 0xff)); + cur_accum >>= 8; + cur_bits -= 8; + } + flush_char(); + fflush (g_outfile); + if (ferror (g_outfile)) + writeerr(); + } +} + + +/* + * Clear out the hash table + */ +static void +cl_block () /* table clear for block compress */ +{ + + cl_hash ((count_int) hsize); + free_ent = ClearCode + 2; + clear_flg = 1; + + output ((code_int)ClearCode); +} + +static void +cl_hash(hsize) /* reset code table */ +register count_int hsize; +{ + + register count_int *htab_p = htab + hsize; + + register long i; + register long m1 = -1; + + i = hsize - 16; + do { /* might use Sys V memset(3) here */ + *(htab_p - 16) = m1; + *(htab_p - 15) = m1; + *(htab_p - 14) = m1; + *(htab_p - 13) = m1; + *(htab_p - 12) = m1; + *(htab_p - 11) = m1; + *(htab_p - 10) = m1; + *(htab_p - 9) = m1; + *(htab_p - 8) = m1; + *(htab_p - 7) = m1; + *(htab_p - 6) = m1; + *(htab_p - 5) = m1; + *(htab_p - 4) = m1; + *(htab_p - 3) = m1; + *(htab_p - 2) = m1; + *(htab_p - 1) = m1; + htab_p -= 16; + } while ((i -= 16) >= 0); + + for (i += 16; i > 0; --i) + *--htab_p = m1; +} + +static void +writeerr() +{ + perror ("error writing output file"); +} + + +/****************************************************************************** + * + * GIF Specific routines + * + ******************************************************************************/ + + +/* Set up the 'byte output' routine + */ +static void +char_init() +{ + register int i; + + a_count = 0; + for (i=0; i<256; i++) + accum[i] = 0; +} + + +/* + * Add a character to the end of the current packet, and if it is 254 + * characters, flush the packet to disk. + */ +static void +char_out (c) +int c; +{ + accum[ a_count++ ] = c; + if (a_count >= 254) + flush_char(); +} + +/* + * Flush the packet to disk, and reset the accumulator + */ +static void +flush_char() +{ + if (a_count > 0) { + fputc (a_count, g_outfile); + fwrite (accum, 1, a_count, g_outfile); + a_count = 0; + } +} diff --git a/vendor/x11iraf/ximtool/gui.bak/blink.obj b/vendor/x11iraf/ximtool/gui.bak/blink.obj new file mode 100644 index 00000000..dfae6861 --- /dev/null +++ b/vendor/x11iraf/ximtool/gui.bak/blink.obj @@ -0,0 +1,46 @@ + +set Objects(blink_panel) { \ + toplevel TopLevelShell blink_panel\ + blink_panel Layout bpLayout\ +\ + bpLayout Frame brMenuFrame\ + brMenuFrame Layout brMenuBar\ + brMenuBar Command brClose\ +\ + bpLayout Frame brFrame\ + brFrame Layout brLayout\ +\ + brLayout Group brFramesG\ + brFramesG Layout brFrames\ + brFrames MenuButton brFrame1\ + brFrames MenuButton brFrame2\ + brFrames MenuButton brFrame3\ + brFrames MenuButton brFrame4\ + brFrames MenuButton brFrame5\ + brFrames MenuButton brFrame6\ + brFrames MenuButton brFrame7\ + brFrames MenuButton brFrame8\ + brFrames MenuButton brFrame9\ + brFrames MenuButton brFrame10\ + brFrames MenuButton brFrame11\ + brFrames MenuButton brFrame12\ + brFrames MenuButton brFrame13\ + brFrames MenuButton brFrame14\ + brFrames MenuButton brFrame15\ + brFrames MenuButton brFrame16\ +\ + brLayout Group brCmdG\ + brCmdG Layout brCmd\ + brCmd Command brReset\ + brCmd Label brRateLabel\ + brCmd Frame brBRframe\ + brBRframe Layout brBRlayout\ + brBRlayout Arrow brBRdecrease\ + brBRlayout TextBox brBRtext\ + brBRlayout Arrow brBRincrease\ + brCmd Command brRegButton\ + brCmd Command brMatchButton\ + brCmd TextToggle brBlinkButton\ + brCmd TextToggle brAregButton\ +} + diff --git a/vendor/x11iraf/ximtool/gui.bak/blink.res b/vendor/x11iraf/ximtool/gui.bak/blink.res new file mode 100644 index 00000000..311bad2a --- /dev/null +++ b/vendor/x11iraf/ximtool/gui.bak/blink.res @@ -0,0 +1,167 @@ + +set Resources(blink_panel) { \ + + *blink_panel.geometry: 425x200 + *blink_panel.title: Blink/Register Frames + + *brMenuBar*Command.internalHeight: 4 + *brMenuBar*Command.internalWidth: 12 + *brMenuBar*Command.height: 27 + *brMenuBar*borderWidth: 0 + + *brMenuBar*Label.font: 7x13bold + *brLayout*Command.font: -*-helvetica-medium-r-normal-*-12-*-iso8859-1 + *brRegButton.font: -*-helvetica-medium-r-normal-*-12-*-iso8859-1 + *brReset.font: -*-helvetica-medium-r-normal-*-12-*-iso8859-1 + *brMatchButton.font: -*-helvetica-medium-r-normal-*-12-*-iso8859-1 + *brBlinkButton.font: -*-helvetica-medium-r-normal-*-12-*-iso8859-1 + *brAregButton.font: -*-helvetica-medium-r-normal-*-12-*-iso8859-1 + + + *brMenuBar.layout: vertical { \ + 5 < -5 > \ + horizontal { 10 < +inf -10> brClose 5 } \ + 5 < -5 > \ + } + *brClose.label: Dismiss + + *brMenuFrame.frameType: raised + *brMenuFrame.frameWidth: 2 + *bpLayout.layout: vertical { \ + brMenuFrame < +inf -inf * > \ + 1 < -1 > \ + brFrame < +inf -inf * +inf -inf > \ + } + + *brFrame.frameType: chiseled + *brFrame.frameWidth: 2 + *brFrame.outerOffset: 4 + *brFrame.innerOffset: 4 + + *brLayout.borderWidth: 0 + *brLayout.layout: vertical { \ + 3 < -3 > \ + horizontal { -3 brFramesG < +inf -inf * > -3 } \ + -5 \ + horizontal { -3 brCmdG < +inf -inf * +inf -inf > -3 } \ + -5 \ + } + + *brCmdG.label: + *brCmdG.outerOffset: 7 + *brCmdG.innerOffset: 7 + *brCmdG*borderWidth: 0 + *brCmd.layout: horizontal { \ + 2 \ + vertical { \ + 2 \ + horizontal { \ + 2 \ + brRateLabel \ + 2 \ + brBRframe < +inf -inf * >\ + 4 \ + brReset \ + 2 \ + } \ + 8 < -8 > \ + horizontal { \ + 4 \ + brMatchButton < +inf -inf * > \ + 5 < -5 > \ + brRegButton < +inf -inf * > \ + 2 \ + } \ + 1 < +inf > \ + } \ + 10 \ + vertical { \ + 2 \ + brBlinkButton < +inf * > \ + 10 < -10 > \ + brAregButton < +inf * > \ + 1 < +inf > \ + } \ + 2 \ + } + + *brFramesG.label: Frames List + *brFramesG.outerOffset: 7 + *brFramesG.innerOffset: 7 + *brFramesG*SimpleMenu.borderColor: black + *brFramesG*SimpleMenu.borderWidth: 1 + *brFramesG*SimpleMenu.foreground: White + *brFramesG*SimpleMenu.background: SteelBlue + + *brFrames.borderWidth: 0 + *brFrames.layout: horizontal { \ + 5 < +inf > \ + brFrame1 < +inf * > 1 \ + brFrame2 < +inf * > 1 \ + brFrame3 < +inf * > 1 \ + brFrame4 < +inf * > 1 \ + brFrame5 < +inf * > 1 \ + brFrame6 < +inf * > 1 \ + brFrame7 < +inf * > 1 \ + brFrame8 < +inf * > 1 \ + brFrame9 < +inf * > 1 \ + brFrame10 < +inf * > 1 \ + brFrame11 < +inf * > 1 \ + brFrame12 < +inf * > 1 \ + brFrame13 < +inf * > 1 \ + brFrame14 < +inf * > 1 \ + brFrame15 < +inf * > 1 \ + brFrame16 < +inf * > \ + 5 < +inf > \ + } + + *brBRlayout.layout: horizontal { \ + brBRdecrease \ + brBRtext < +inf -100% * > \ + brBRincrease \ + } + + *blink_panel*TextToggle.location: 0 0 110 23 + *blink_panel*TextToggle.frameWidth: 1 + *blink_panel*TextToggle.highlightColor: yellow + *blink_panel*TextToggle.offIcon: square0s + *blink_panel*TextToggle.onIcon: square1s + *blink_panel*TextToggle.outerOffset: 0 + *blink_panel*TextToggle.innerOffset: 2 + *blink_panel*Command.height: 23 + *blink_panel*Arrow.width: 16 + *blink_panel*Arrow.height: 20 + + + *brFramesLabel.label: Frames: + *brFrame1.menuName: frame1Menu + *brFrame2.menuName: frame2Menu + *brFrame3.menuName: frame3Menu + *brFrame4.menuName: frame4Menu + *brFrame5.menuName: frame5Menu + *brFrame6.menuName: frame6Menu + *brFrame7.menuName: frame7Menu + *brFrame8.menuName: frame8Menu + *brFrame9.menuName: frame9Menu + *brFrame10.menuName: frame10Menu + *brFrame11.menuName: frame11Menu + *brFrame12.menuName: frame12Menu + *brFrame13.menuName: frame13Menu + *brFrame14.menuName: frame14Menu + *brFrame15.menuName: frame15Menu + *brFrame16.menuName: frame16Menu + *brReset.label: Reset + + *brRateLabel.label: Rate: + *brBRframe.frameType: sunken + *brBRframe.frameWidth: 1 + *brBRtext.width: 40 + *brBRtext.height: 23 + *brBRdecrease.direction: left + *brBRincrease.direction: right + *brRegButton.label: Register + *brMatchButton.label: Match LUTs + *brBlinkButton.label: Blink + *brAregButton.label: Auto-Register +} + diff --git a/vendor/x11iraf/ximtool/gui.bak/boot.tcl b/vendor/x11iraf/ximtool/gui.bak/boot.tcl new file mode 100644 index 00000000..936273a5 --- /dev/null +++ b/vendor/x11iraf/ximtool/gui.bak/boot.tcl @@ -0,0 +1,74 @@ + + +################################################################################ +# GUI Bootstrap Procedures +################################################################################ + +# Initialize the widget tree. +proc InitWidgetTree args \ +{ + global Objects Resources Version + + + # Add a new objects description for each of the panels found so we can + # create them by name later rather that with the defaults. + + set guiResources "" + foreach obj [array names Objects] { + set guiResources \ + [ format "%s\n\n*%s_objects:%s\n" \ + $guiResources $obj $Objects($obj) ] + } + + # Now append all the Resource strings, changing any version strings as + # needed. + + foreach res [array names Resources] { + regsub -all XIMTOOL_VERSION $Resources($res) $Version ver + set guiResources [ format "%s\n\n%s\n\n" $guiResources $ver ] + } + + # Define all of the GUI objects and resources. + appInitialize ximtool XImtool $guiResources +} + + +# Realize a window module, i.e. create it's objects. +proc Realize { module args } \ +{ + global Objects + + # Create any widgets for the module. We only do this once and set a + # flag to indicate the objects have been created so we don't do it on + # subsequent realizations. + if { [info exists Objects($module)] } { + createObjects [format "%s_objects" $module] + reset-server + } +} + + +# Bootstrap up the GUI. +InitWidgetTree +Realize ximtool +Realize parameters +Realize panelShell +Realize tcl_panel +Realize pixel_table +Realize hdr_panel +Realize blink_panel +Realize help_panel +Realize xpan_panel +Realize xmag_panel +Realize warning + +reset-server + +# Set the gterm widget focus. +send colorbar setGterm ; send colorbar activate +send imagewin setGterm ; send imagewin activate + +# Crank it up. +activate + + diff --git a/vendor/x11iraf/ximtool/gui.bak/compass.tcl b/vendor/x11iraf/ximtool/gui.bak/compass.tcl new file mode 100644 index 00000000..2822e1d8 --- /dev/null +++ b/vendor/x11iraf/ximtool/gui.bak/compass.tcl @@ -0,0 +1,205 @@ + + +################################################################################ +# Compass indicator procedures. +################################################################################ + +set compassColor 207 ;# normally this is yellow +set last_compass [send compass get on] ;# save compass state + +proc drawCompass args \ +{ + global ism_enable frame frameCache compassColor Compass Orient + global panner_x panner_y panner_width panner_height cur_objid + global redraw_compass last_compass + + + if {! [send compass get on]} \ + return + + eraseCompass ;# erase the old compass + + if {! [info exists frameCache($frame)] } { + set id -1 + } elseif {$cur_objid != [lindex $frameCache($frame) 1]} { + set id [lindex $frameCache($frame) 1] + } else { + set id $cur_objid + } + + if { [info exists Compass($id)] } { + set angle [lindex $Compass($id) 0] + set n_x [lindex $Compass($id) 1] + set n_y [lindex $Compass($id) 2] + set e_x [lindex $Compass($id) 3] + set e_y [lindex $Compass($id) 4] + set trans [lindex $Compass($id) 5] + set xlab [lindex $Compass($id) 6] + set ylab [lindex $Compass($id) 7] + } else { + set n_x 0.0 ; set n_y 1.0 + set e_x 1.0 ; set e_y 0.0 + set xlab X ; set ylab Y + set angle 0.0 ; set trans 0 + set Compass($id) { 0.0 0.0 1.0 1.0 0.0 0 X Y } + } + set xflip 1 + set yflip 1 + + # Adjust the compass for the display orientation (e.g. image sections + # used to flip an image during display). + if { [info exists Orient($id)] } { + set xflip [expr $xflip * [lindex $Orient($id) 1] ] + set yflip [expr $yflip * [lindex $Orient($id) 2] ] + } + + # Get the panner center position. + set pcx [expr ($panner_x + $panner_width / 2)] + set pcy [expr ($panner_y + $panner_height / 2)] + + # Setup for the overlay. + send imagewin getLogRes sv_xl sv_yl + send imagewin getPhysRes sv_xp sv_yp + send imagewin setLogRes $sv_xp $sv_yp + send imagewin setLineWidth 2 + + set xflip [ expr ($xflip * ([send xflipButton get state] ? -1 : 1))] + set yflip [ expr ($yflip * ([send yflipButton get state] ? -1 : 1))] + + # Normalized compass points. The first row are the axes, second is + # the pointer head, and last are the X/Y label coords. Assumes a + # zero rotation with North up and East left, or standard X/Y orientation. + set cpoints { + {-1 0} {0 0} {0 -1} + {-0.07 -0.85} {0 -1} {0.07 -0.85} {-0.07 -0.85} + {-1.2 0} {0 -1.2} + } + + + # Get rotation and scale factors. + set angle [expr "atan2($n_y,$n_x)"] + set scale [expr ([min $panner_width $panner_height] * 0.3)] + + # Initialize the graphics. + send imagewin setColorIndex $compassColor + send imagewin setFillType solid + + # Now draw the parts of the compass. + drawCompassAxes $n_x $n_y $e_x $e_y $trans $xflip $yflip $scale \ + $pcx $pcy + drawCompassLabels $n_x $n_y $e_x $e_y $trans $xflip $yflip $scale\ + $pcx $pcy $xlab $ylab + drawCompassPtr $n_x $n_y $e_x $e_y $trans $xflip $yflip $scale \ + $pcx $pcy $angle + + # Reset the logical resolution of the window. + send imagewin setLogRes $sv_xl $sv_yl + set redraw_compass 0 + +} ; foreach w {xflip yflip} { send $w addCallback drawCompass } + + +proc drawCompassAxes {n_x n_y e_x e_y trans xflip yflip scale pcx pcy} \ +{ + set cpoints { } + lappend cpoints [list $e_x $e_y ] + lappend cpoints [list 0 0] + lappend cpoints [list $n_x $n_y] + foreach p $cpoints { + # Get the scaled position. + set sx [expr ($scale * [lindex $p [expr "($trans > 0) ? 1 : 0"]])] + set sy [expr ($scale * [lindex $p [expr "($trans > 0) ? 0 : 1"]])] + + # Translate to the scaled position. + set rx [expr int($pcx + $sx + 0.5)] + set ry [expr int($pcy - $sy + 0.5)] + + lappend pts $rx $ry + } + + # Draw the compass axes. + send imagewin drawPolyline $pts +} + +proc drawCompassLabels {n_x n_y e_x e_y trans xflip yflip scale pcx pcy xlab ylab} \ +{ + + set pts { } + set lpoints { } + + set xo [expr (0.2 * [expr "($xflip > 0) ? -1 : 1"])] + set yo [expr (0.2 * [expr "($yflip > 0) ? 1 : -1"])] + + lappend lpoints [list [expr "$e_x+$xo"] $e_y ] + lappend lpoints [list $n_x [expr "$n_y+$yo"] ] + foreach p $lpoints { + # Get the scaled position. + set sx [expr ($scale * [lindex $p [expr "($trans > 0) ? 1 : 0"]])] + set sy [expr ($scale * [lindex $p [expr "($trans > 0) ? 0 : 1"]])] + + # Translate to the scaled position. + set rx [expr int($pcx + $sx + 0.5)] + set ry [expr int($pcy - $sy - 0.5)] + + lappend pts $rx $ry + } + + # Draw the labels. + send imagewin drawAlphaText [lindex $pts 0] [lindex $pts 1] $xlab + send imagewin drawAlphaText [lindex $pts 2] [lindex $pts 3] $ylab +} + +proc drawCompassPtr {n_x n_y e_x e_y trans xflip yflip scale pcx pcy angle} \ +{ + + set coso [expr "cos (-$angle)"] + set sino [expr "sin (-$angle)"] + + # Initialize the drawing points. + set pts {} + set hpoints { {0.0 0.0} {-0.1 -0.07} {-0.1 0.07} {0.0 0.0} } + foreach p $hpoints { + # Break out the position. + set sx [lindex $p [expr "($trans > 0) ? 1 : 0"]] + set sy [lindex $p [expr "($trans > 0) ? 0 : 1"]] + + # Do the rotation of the head at the origin. + set rx [expr ($n_x + ($sx * $coso + $sy * $sino))] + set ry [expr ($n_y - ($sx * $sino + $sy * $coso))] + + # Get the scaled position. + set sx [expr ($scale * $rx)] + set sy [expr ($scale * $ry)] + + # Translate to the scaled position. + set rx [expr int($pcx + $sx + 0.5)] + set ry [expr int($pcy - $sy + 0.5)] + + lappend pts $rx $ry + } + + # Draw the compass pointer. + send imagewin drawPolygon $pts +} + + +proc eraseCompass args \ +{ + global panner_mapping + send imagewin refreshMapping $panner_mapping +} + +proc toggleCompass { widget type state args } \ +{ + global last_compass + + if {$state} { + drawCompass + set last_compass True + } else { + eraseCompass + set last_compass False + } +} ; send compass addCallback toggleCompass + + diff --git a/vendor/x11iraf/ximtool/gui.bak/compass.tcl.bak b/vendor/x11iraf/ximtool/gui.bak/compass.tcl.bak new file mode 100644 index 00000000..761b99c3 --- /dev/null +++ b/vendor/x11iraf/ximtool/gui.bak/compass.tcl.bak @@ -0,0 +1,195 @@ + + +################################################################################ +# Compass indicator procedures. +################################################################################ + +set compassColor 207 ;# normally this is yellow +set last_compass [send compass get on] ;# save compass state + +proc drawCompass args \ +{ + global ism_enable frame frameCache compassColor Compass Orient + global panner_x panner_y panner_width panner_height cur_objid + global redraw_compass last_compass + + + if {! [send compass get on]} \ + return + + eraseCompass ;# erase the old compass + + if {! [info exists frameCache($frame)] } { + set id -1 + } elseif {$cur_objid != [lindex $frameCache($frame) 1]} { + set id [lindex $frameCache($frame) 1] + } else { + set id $cur_objid + } + + if { [info exists Compass($id)] } { + set angle [lindex $Compass($id) 0] + set north_x [lindex $Compass($id) 1] + set north_y [lindex $Compass($id) 2] + set east_x [lindex $Compass($id) 3] + set east_y [lindex $Compass($id) 4] + set transpose [lindex $Compass($id) 5] + set xlab [lindex $Compass($id) 6] + set ylab [lindex $Compass($id) 7] + } else { + set north_x 0.0 ; set north_y 1.0 + set east_x 1.0 ; set east_y 0.0 + set xlab X ; set ylab Y + set angle 0.0 ; set transpose 0 + set Compass($id) { 0.0 1.0 0.0 1.0 0.0 0 X Y } + } + set xflip 1 + set yflip 1 + + # Adjust the compass for the display orientation (e.g. image sections + # used to flip an image during display). + if { [info exists Orient($id)] } { + set xflip [expr $xflip * [lindex $Orient($id) 1] ] + set yflip [expr $yflip * [lindex $Orient($id) 2] ] + } + + # Get the panner center position. + set pcx [expr ($panner_x + $panner_width / 2)] + set pcy [expr ($panner_y + $panner_height / 2)] + + # Setup for the overlay. + send imagewin getLogRes sv_xl sv_yl + send imagewin getPhysRes sv_xp sv_yp + send imagewin setLogRes $sv_xp $sv_yp + send imagewin setLineWidth 2 + + set xflip [ expr ($xflip * ([send xflipButton get state] ? -1 : 1))] + set yflip [ expr ($yflip * ([send yflipButton get state] ? -1 : 1))] + + # Normalized compass points. The first row are the axes, second is + # the pointer head, and last are the X/Y label coords. Assumes a + # zero rotation with North up and East left, or standard X/Y orientation. + set cpoints { + {-1 0} {0 0} {0 -1} + {-0.07 -0.85} {0 -1} {0.07 -0.85} {-0.07 -0.85} + {-1.2 0} {0 -1.2} + } + + + # Get rotation and scale factors. + set angle [expr "atan2($north_y,$north_x)"] + set coso [expr "cos (-$angle)"] + set sino [expr "sin (-$angle)"] + set scale [expr ([min $panner_width $panner_height] * 0.3)] + + # Initialize the drawing points. + set pts {} + + set cpoints { } + lappend cpoints [list $east_x $east_y ] + lappend cpoints [list 0 0] + lappend cpoints [list $north_x $north_y] + foreach p $cpoints { + # Get the scaled position. + set sx [expr ($scale * [lindex $p [expr "($transpose > 0) ? 1 : 0"]])] + set sy [expr ($scale * [lindex $p [expr "($transpose > 0) ? 0 : 1"]])] + + # Translate to the scaled position. + set rx [expr int($pcx + $sx + 0.5)] + set ry [expr int($pcy - $sy + 0.5)] + + # Now handle the axis flip. + set rx [expr (($xflip < 0) ? ($pcx + ($pcx - $rx)) : $rx)] + set ry [expr (($yflip < 0) ? ($pcy + ($pcy - $ry)) : $ry)] + lappend pts $rx $ry + } + + + set rpoints { } + set hpoints { {0.0 0.0} {-0.1 -0.07} {-0.1 0.07} {0.0 0.0} } + foreach p $hpoints { + # Break out the position. + set sx [lindex $p [expr "($transpose > 0) ? 1 : 0"]] + set sy [lindex $p [expr "($transpose > 0) ? 0 : 1"]] + + # Do the rotation of the head at the origin. + set rx [expr ($north_x + ($sx * $coso + $sy * $sino))] + set ry [expr ($north_y - ($sx * $sino + $sy * $coso))] + + lappend rpoints [list $rx $ry] + } + foreach p $rpoints { + # Get the scaled position. + set sx [expr ($scale * [lindex $p [expr "($transpose > 0) ? 1 : 0"]])] + set sy [expr ($scale * [lindex $p [expr "($transpose > 0) ? 0 : 1"]])] + + # Translate to the scaled position. + set rx [expr int($pcx + $sx + 0.5)] + set ry [expr int($pcy - $sy + 0.5)] + + # Now handle the axis flip. + set rx [expr (($xflip < 0) ? ($pcx + ($pcx - $rx)) : $rx)] + set ry [expr (($yflip < 0) ? ($pcy + ($pcy - $ry)) : $ry)] + lappend pts $rx $ry + } + + set lpoints { } + lappend lpoints [list [expr "$east_x-0.2"] $east_y ] + lappend lpoints [list $north_x [expr "$north_y+0.2"] ] + foreach p $lpoints { + # Get the scaled position. + set sx [expr ($scale * [lindex $p [expr "($transpose > 0) ? 1 : 0"]])] + set sy [expr ($scale * [lindex $p [expr "($transpose > 0) ? 0 : 1"]])] + + # Translate to the scaled position. + set rx [expr int($pcx + $sx + 0.5)] + set ry [expr int($pcy - $sy - 0.5)] + + # Now handle the axis flip. + set rx [expr (($xflip < 0) ? ($pcx + ($pcx - $rx)) : $rx)] + set ry [expr (($yflip < 0) ? ($pcy + ($pcy - $ry)) : $ry)] + lappend pts $rx $ry + } + + + # Draw the compass axes. + set compassPts [lrange $pts 0 5] + send imagewin setColorIndex $compassColor + send imagewin drawPolyline $compassPts + + # Draw the compass pointer. + set head [lrange $pts 6 13] + send imagewin setFillType solid + send imagewin drawPolygon $head + + # Draw the labels. + send imagewin drawAlphaText [lindex $pts 14] [lindex $pts 15] $xlab + send imagewin drawAlphaText [lindex $pts 16] [lindex $pts 17] $ylab + + send imagewin setLogRes $sv_xl $sv_yl + + set redraw_compass 0 + +} ; foreach w {xflip yflip} { send $w addCallback drawCompass } + + +proc eraseCompass args \ +{ + global panner_mapping + send imagewin refreshMapping $panner_mapping +} + +proc toggleCompass { widget type state args } \ +{ + global last_compass + + if {$state} { + drawCompass + set last_compass True + } else { + eraseCompass + set last_compass False + } +} ; send compass addCallback toggleCompass + + diff --git a/vendor/x11iraf/ximtool/gui.bak/display.res b/vendor/x11iraf/ximtool/gui.bak/display.res new file mode 100644 index 00000000..2f3f47e2 --- /dev/null +++ b/vendor/x11iraf/ximtool/gui.bak/display.res @@ -0,0 +1,451 @@ + +set Resources(display_panel) { \ + + !================================ + ! Main Display Control Panel. + !================================ + *controlPanel*internalWidth: 0 + *controlPanel*borderWidth: 0 + + *TextBox.font: 7x13bold + *TextToggle.font: -adobe-times-medium-r-normal-*-12-*-*-*-*-*-iso8859-1 + *Command.font: -adobe-times-bold-i-normal-*-12-*-*-*-*-*-iso8859-1 + *Toggle.font: -adobe-times-medium-r-normal-*-12-*-*-*-*-*-iso8859-1 + *Label.font: -*-helvetica-medium-r-normal-*-12-*-iso8859-1 + *MultiList.font: -adobe-times-medium-r-normal-*-12-*-*-*-*-*-iso8859-1 + *toggleZoom.font: -*-helvetica-medium-r-normal-*-12-*-iso8859-1 + *centerFrame.font: -*-helvetica-medium-r-normal-*-12-*-iso8859-1 + *zoom*Command.font: 7x13bold + + *blinkFrame1.font: -adobe-times-medium-r-normal-*-12-*-iso8859-1 + *blinkFrame2.font: -adobe-times-medium-r-normal-*-12-*-iso8859-1 + *blinkFrame3.font: -adobe-times-medium-r-normal-*-12-*-iso8859-1 + *blinkFrame4.font: -adobe-times-medium-r-normal-*-12-*-iso8859-1 + *matchButton.font: -adobe-times-medium-r-normal-*-12-*-iso8859-1 + *registerButton.font: -adobe-times-medium-r-normal-*-12-*-iso8859-1 + *blinkButton.font: -adobe-times-medium-r-normal-*-12-*-iso8859-1 + *autoregButton.font: -adobe-times-medium-r-normal-*-12-*-iso8859-1 + + *controlPanel.layout: vertical { \ + 5 < -5 > \ + horizontal { \ + -1 \ + viewBox < +inf -inf * > \ + -1 \ + } \ + 5 < -5 > \ + horizontal { \ + -1 \ + enhancementBox < +inf -inf * +inf -inf > \ + -5 \ + vertical { \ + -1 \ + blinkBox < * +inf - inf > \ + 1 \ + optionsBox < * +inff -inff > \ + -1 \ + } \ + -1 \ + } \ + -5 \ + controlBox < +inf * > \ + -5 \ + } + + ! VIEW + ! ------------------ + *viewBox.label: View + *viewBox.location: 0 0 410 0 + *viewBox.shrinkToFit: True + *viewBox.outerOffset: 7 + + *view.layout: vertical { \ + 5 < +inf -5 > \ + horizontal { \ + -1 \ + frameSelect \ + vertical { \ + 3 < -3 > \ + frameDataBox < +inff -100% * +inff -100% > \ + 3 < -3 > \ + } \ + zoomBox \ + -1 \ + } \ + 1 < +inf > \ + viewButtons < +inf -inf * +inf -inf > \ + 5 < +inf -5 > \ + } + + *frameDataBox.frameType: sunken + *frameDataBox.frameWidth: 1 + *frameData.width: 150 + *frameData.height: 50 + + *frameSelect.location: 0 0 72 0 + *frameSelect.shrinkToFit: True + *frameSelect.outerOffset: 7 + *frameSelect.innerOffset: 2 + *frameSelect.frameWidth: 2 + *frameSelect*offIcon: diamond0s + *frameSelect*onIcon: diamond1s + *frameSelect*highlightColor: blue + *frameSelect.label: Frame + + *frameBox.layout: vertical { \ + 3 \ + horizontal { -2 frlistBox < * +inff -inff > } \ + 3 < +inf -3 > \ + horizontal { prevFrame < +inf -inf * > 4 nextFrame < +inf -inf * > } \ + } + *framePort.allowVert: True + *framePort.allowHoriz: False + *framePort.useRight: True + *framePort.height: 80 + + *frameBox*alignment: left + *frameBox*frameWidth: 0 + *frameBox*frame1.label: 1\ \ + *frameBox*frame2.label: 2\ \ + *frameBox*frame3.label: 3\ \ + *frameBox*frame4.label: 4\ \ + + *frameBox*frame5.label: 5\ \ + *frameBox*frame6.label: 6\ \ + *frameBox*frame7.label: 7\ \ + *frameBox*frame8.label: 8\ \ + *frameBox*frame9.label: 9\ \ + *frameBox*frame10.label: 10\ + *frameBox*frame11.label: 11\ + *frameBox*frame12.label: 12\ + *frameBox*frame13.label: 13\ + *frameBox*frame14.label: 14\ + *frameBox*frame15.label: 15\ + *frameBox*frame16.label: 16\ + *frameBox*Command.width: 24 + *frameBox*prevFrame.label: xxx + *frameBox*nextFrame.label: xxx + + *frameList*location: 0 0 50 20 + *frameList.layout: vertical { \ + frame1 < +inf * >\ + frame2 < +inf * >\ + frame3 < +inf * >\ + frame4 < +inf * >\ + frame5 < +inf * >\ + frame6 < +inf * >\ + frame7 < +inf * >\ + frame8 < +inf * >\ + frame9 < +inf * >\ + frame10 < +inf * >\ + frame11 < +inf * >\ + frame12 < +inf * >\ + frame13 < +inf * >\ + frame14 < +inf * >\ + frame15 < +inf * >\ + frame16 < +inf * >\ + } + + + *zoomBox.label: Zoom: + *zoomBox.location: 0 0 160 127 + *zoomBox.outerOffset: 7 + *zoomBox.shrinkToFit: True + *zoomBox*TextButton.frameWidth: 1 + *zoomBox*TextButton.outerOffset: 0 + + *controlPanel*zoom*internalWidth: 4 + *zoom.layout: vertical { \ + space = ((50% of width zoom) - (50% of width z5)) \ + 1 < +inf > \ + horizontal { \ + vertical { toggleZoom < +inf * +inf > 1 } \ + 1 \ + vertical { 1 < +inf > z5 1 < +inf > z3 0 < +inf > } \ + 1 \ + vertical { zoomIn < +inf * +inf > 1 } \ + } \ + 1 \ + horizontal { \ + 1 < +inf > \ + d8 1 d4 1 d2 1 x1 1 z2 1 z4 1 z8 \ + 1 < +inf > \ + } \ + 1 \ + horizontal { \ + vertical { 1 zoomOut < +inf * +inf > } \ + 1 \ + vertical { 0 < +inf > d3 1 < +inf > d5 1 < +inf > } \ + 1 \ + vertical { 1 centerFrame < +inf * +inf > } \ + } \ + 1 < +inf > \ + } + + *toggleZoom.label: Toggle\nZoom + *toggleZoom.outerOffset: 2 + *toggleZoom.width: 30 + *toggleZoom.height: 25 + + *zoomIn.label: Zoom\nIn + *zoomIn.outerOffset: 2 + *zoomIn.width: 30 + *zoomIn.height: 25 + + *x1.label: 1 + *z2.label: 2 + *z3.label: 3 + *z4.label: 4 + *z5.label: 5 + *z8.label: 8 + + *controlPanel*zoomIn.foreground: royalBlue3 + *controlPanel*z4.foreground: royalBlue3 + *controlPanel*z5.foreground: royalBlue3 + *controlPanel*z8.foreground: royalBlue3 + *controlPanel*z2.foreground: royalBlue3 + *controlPanel*z3.foreground: royalBlue3 + + *zoomOut.label: Zoom\nOut + *zoomOut.outerOffset: 2 + *zoomOut.width: 30 + *zoomOut.height: 25 + + *centerFrame.label: Center + *centerFrame.outerOffset: 2 + *centerFrame.width: 30 + *centerFrame.height: 25 + + *d2.label: 2 + *d3.label: 3 + *d4.label: 4 + *d5.label: 5 + *d8.label: 8 + + *controlPanel*zoomOut.foreground: mediumVioletRed + *controlPanel*d2.foreground: mediumVioletRed + *controlPanel*d3.foreground: mediumVioletRed + *controlPanel*d4.foreground: mediumVioletRed + *controlPanel*d5.foreground: mediumVioletRed + *controlPanel*d8.foreground: mediumVioletRed + + *viewButtons.location: 0 0 100 80 + *viewButtons.layout: horizontal { \ + 2 < -2 > \ + aspect < +inf * > 2 \ + flipX < +inf * > 2 \ + flipY < +inf * > 2 \ + flipXY < +inf * > 2 \ + clearFrame < +inf * > 2 \ + fitFrame < +inf * > \ + 2 < -2 > \ + } + *nextFrame.label: Next Frame + *prevFrame.label: Previous Frame + *fitFrame.label: Fit Frame + *aspect.label: Aspect + *clearFrame.label: Clear Frame + *flipX.label: Flip X + *flipY.label: Flip Y + *flipXY.label: Flip XY + + + ! ENHANCEMENT + ! ------------------ + *enhancementBox.label: Enhancement + *enhancementBox.location: 0 0 110 0 + *enhancementBox.shrinkToFit: True + *enhancementBox.outerOffset: 7 + + *enhance*Viewport.allowVert: True + *enhance*Viewport.allowHoriz: False + *enhance*Viewport.useRight: False + *enhance*Viewport.resizeable: True + *enhance*Scrollbar.width: 17 + *enhance*Scrollbar.minimumThumb: 10 + *enhance.layout: vertical { \ + 3 < -3 > \ + horizontal { \ + 2 < -2 > \ + colorlistFrame < +inf -inf * +inff -inff > \ + 2 < -2 > \ + } \ + 2 \ + horizontal { \ + 2 < -2 > \ + colordataFrame < +inf -inf * +inf -inf > \ + 2 < -2 > \ + } \ + 5 < -5 > \ + horizontal { \ + 2 < -2 > \ + vertical { -1 contrastLabel 3 < -3 > brightnessLabel -1 } \ + 3 < -3 > \ + vertical { \ + -1 \ + contrastSlider < +inf -inf * > \ + 3 < -3 > \ + brightnessSlider < +inf -inf * > \ + -1 \ + } \ + 2 < -2 > \ + } \ + 5 < -5 > \ + horizontal { \ + 3 < -3 > \ + invertButton < +inf -inf * > \ + 5 < -5 > \ + optimizeButton < +inf -inf * > \ + 3 < -3 > \ + } \ + 3 < -3 > \ + } + + *enhance*frameType: sunken + *enhance*frameWidth: 1 + *enhance*BorderWidth: 0 + *enhance*Label.ShadowWidth: 0 + + *colorlist.width: 100 + *colorlist.height: 98 + *colordata.width: 100 + *colordata.height: 45 + *enhance*colordata.frameWidth: 0 + *contrastLabel.label: x + *contrastSlider.location: 0 0 100 17 + *brightnessLabel.label: x + *brightnessSlider.location: 0 0 100 17 + *invertButton.label: Invert + *optimizeButton.label: Optimize + + + ! --------------------- + ! BLINK/REGISTER + ! --------------------- + *blinkBox.label: Blink/Register + *blinkBox.location: 0 0 235 0 + *blinkBox.shrinkToFit: True + *blinkBox.outerOffset: 7 + *blinkBox*TextToggle.frameWidth: 1 + + *blink.layout: vertical { \ + space = (width blinkFramesLabel - width blinkRateLabel) \ + 3 < -3 > \ + horizontal { \ + 0 \ + blinkFramesLabel \ + 3 < +inf > \ + blinkFrame1 < -50% * > \ + blinkFrame2 < -50% * > \ + blinkFrame3 < -50% * > \ + blinkFrame4 < -50% * > \ + 4 < +inf > \ + blinkPanel < -50% * > \ + blinkReset \ + 2 \ + } \ + 5 < -5 > \ + horizontal { \ + $space \ + blinkRateLabel \ + 2 \ + BRframe < +inf * > \ + } \ + 5 < +inf -100% > \ + horizontal { \ + vertical { \ + 2 matchButton < +inf * > 4 < -4 > registerButton < +inf * > \ + } \ + 5 < -5 > \ + vertical { \ + 1 blinkButton < +inf * > 4 < -4 > autoregButton < +inf * > \ + } \ + } \ + } + + *BRlayout.layout: horizontal { \ + BRdecrease \ + BRtext < +inf -100% * > \ + BRincrease \ + } + + *blink.Label.borderWidth: 0 + *blink.Label.shadowWidth: 0 + *controlPanel*blink*internalWidth: 4 + *blink.TextToggle.location: 0 0 102 23 + *blink.TextToggle.frameWidth: 1 + *blink*TextToggle.highlightColor: yellow + *blink*TextToggle.offIcon: square0s + *blink*TextToggle.onIcon: square1s + *blink*TextToggle.outerOffset: 1 + *blink*Command.height: 27 + *blink*Arrow.width: 16 + *blink*Arrow.height: 25 + + + *blinkFramesLabel.label: Frames List: + *blinkFrame1.label: 1 + *blinkFrame2.label: 2 + *blinkFrame3.label: 3 + *blinkFrame4.label: 4 + *blinkPanel.label: x + *blinkPanel.width: 20 + *blinkReset.label: Reset + + *blinkRateLabel.label: Blink Rate: + *BRframe.frameType: sunken + *BRframe.frameWidth: 1 + *BRtext.width: 40 + *BRtext.height: 23 + *BRdecrease.direction: left + *BRincrease.direction: right + *registerButton.label: Register + *matchButton.label: Match LUTs + *blinkButton.label: Blink + *autoregButton.label: Auto-Register + + ! OPTIONS + ! --------------------- + *optionsBox.label: Options + *optionsBox.location: 0 0 220 0 + *optionsBox.shrinkToFit: False + *optionsBox.outerOffset: 7 + *optionsBox*offIcon: square0s + *optionsBox*onIcon: square1s + *optionsBox*selectionStyle: multi + *optionsBox*highlightColor: yellow + *optionsBox.TextToggle.location: 0 0 102 20 + *optionsBox.TextToggle.frameWidth: 0 + *optionsBox.TextToggle.highlightThickness: 0 + *optionsBox*alignment: left + + *pannerButton.label: Panner + *coordsBoxButton.label: Coords Box + *autoscaleButton.label: Autoscale + *antialiasButton.label: Antialias + *tileFramesButton.label: Tile Frames + *magnifierButton.label: Magnifier + *warningsButton.label: Warnings + *peakupButton.label: Centroid Peaks + *peakupButton.on: True + + ! CONTROL + ! ---------------------- + *controlBox.frameType: chiseled + *controlBox.frameWidth: 2 + *controlBox.outerOffset: 7 + *controlBox.innerOffset: 5 + *controlBox.height: 30 + + *control.layout: horizontal { \ + 1 \ + initializeButton < +inf * > \ + 5 < -5 > \ + normalizeButton < +inf * > \ + 80 < +inf -100% > \ + } + + *initializeButton.label: Initialize + *normalizeButton.label: Normalize +} + diff --git a/vendor/x11iraf/ximtool/gui.bak/func.tcl b/vendor/x11iraf/ximtool/gui.bak/func.tcl new file mode 100644 index 00000000..3f521a0f --- /dev/null +++ b/vendor/x11iraf/ximtool/gui.bak/func.tcl @@ -0,0 +1,123 @@ + +################################################################################ +# CURSOR CENTEROID AND AUTO-REGISTER FUNCTIONS. +################################################################################ + +# Set the centroiding box size. +set ctid 0 +set cid 0 + +proc cbxDestroy args \ +{ + global centerBoxSize cid ctid + catch { + if {$ctid != 0} { + send cbm$cid destroy + deleteTimedCallback $ctid + set ctid 0 + } + } +} + +proc setCtrBoxSize { x y delta args } \ +{ + global centerBoxSize cid ctid + global cpXscale cpYscale + + incr centerBoxSize $delta + if {$centerBoxSize <= 1} { set centerBoxSize 1 } + + # Kill off any old markers before drawing the new one. + catch { + if {$ctid != 0} { + send cbm$cid destroy + deleteTimedCallback $ctid + set ctid 0 + } + } + + # create a transient marker indicating the centering box and post a + # callback to delete it in about a second. + incr cid + send imagewin createMarker cbm$cid \ + type box \ + createMode noninteractive \ + lineColor red \ + x $x \ + y $y \ + width [expr $cpXscale * $centerBoxSize] \ + height [expr $cpXscale * $centerBoxSize] \ + activated True \ + visible True \ + sensitive False + + set ctid [ postTimedCallback cbxDestroy 500] +} + + +# Compute a centroid offset for the current position to peak-up on the +# feature. + +proc centroid { x y type args } \ +{ + global centerBoxSize + global cpXscale cpYscale + + # Convert to image coords. + set sz [expr "int ($centerBoxSize * $cpXscale)"] + + # Get the centroid position. + if {$type != "min"} { + if {[send peakupButton get on]} { + set center [ send client centroid $x $y $sz ] + } else { + set center [ send client centroid $x $y $sz max ] + } + } else { + set center [ send client centroid $x $y $sz min ] + } + + # Now reposition the cursor. + set xoff [lindex $center 0 ] + set yoff [lindex $center 1 ] + move_cursor $xoff $yoff +} + + +# Set the auto-register center offset position +proc offset { x y args } \ +{ + global frame blinkFrames auto_reg + global frameCenterX frameCenterY + global frameOffsetX frameOffsetY + + # No-op of auto-register isn't on. + if { $auto_reg == 0 } { + Wexec client "Auto-Register is not enabled!" + return + } + + # If we're not in the blink frames list ignore the request. + if { [string first $frame $blinkFrames] == -1 } { + Wexec client "Frame not in current\nregister list." + return + } + + set rx $x; set ry $y + set raster 0 + + # Convert raw screen coordinates to frame buffer raster coordinates. + send imagewin unmapPixel $x $y raster rx ry + + # Select a pixel. + set xoff [expr "int ($rx) - $frameCenterX($frame)" ] + set yoff [expr "int ($ry) - $frameCenterY($frame)" ] + + set frameOffsetX($frame) $xoff + set frameOffsetY($frame) $yoff + + # Adjust the display. + send client setOffset $xoff $yoff +} + + diff --git a/vendor/x11iraf/ximtool/gui.bak/global.res b/vendor/x11iraf/ximtool/gui.bak/global.res new file mode 100644 index 00000000..59bb1e67 --- /dev/null +++ b/vendor/x11iraf/ximtool/gui.bak/global.res @@ -0,0 +1,103 @@ + +set Resources(global) { \ + + !--------------------------------------------------------- + ! Define some global widget resources for the main panels. + !--------------------------------------------------------- + *shadowWidth: 1 + *background: gray77 +! *foreground: black + *Arrow.width: 16 + *Arrow.height: 25 + *Text*height: 21 + *Command.height: 21 + *Command.highlightThickness: 1 + *MenuButton.height: 21 + *MenuButton.highlightThickness: 1 + *Label.borderWidth: 0 + *Label.shadowWidth: 0 + *TextButton.shadowWidth: 0 + *TextButton.highlightThickness: 1 + *TextToggle*borderWidth: 0 + *TextToggle.highlightThickness: 0 + *Toggle.highlightThickness: 1 + *Group.shrinkToFit: True + + *Arrow.foreground: gray + *Arrow.background: gray68 + *Text*background: gray68 + *AsciiText*background: gray68 + *TextBox.background: gray68 + *MultiList*background: gray68 + *Slider2d.thumbColor: gray77 + + + !------------------------------------------------------------- + ! Define resources to take advantage of the 3D scrollbar look. + !------------------------------------------------------------- + *Scrollbar*background: gray77 + *Scrollbar*shadowWidth: 1 + *Scrollbar*width: 15 + *Scrollbar*height: 15 + *Scrollbar*cursorName: top_left_arrow + *Scrollbar*pushThumb: true + + *HTML.Scrollbar.shadowWidth: 1 + *HTML*Scrollbar*width: 15 + *HTML*Scrollbar*height: 15 + + + !---------------------------------------- + ! Menu resources giving a shadow effect. + !---------------------------------------- + *SmeBSB.leftMargin: 10 + *SmeBSB.rightMargin: 5 + *SmeBSB.shadowWidth: 2 + *SmeBSB.foreground: gray90 + *SmeBSB.background: SteelBlue + *SimpleMenu.background: gray77 + *SimpleMenu.borderWidth: 2 + *SimpleMenu.borderColor: black + *SimpleMenu.line1.foreground: gray61 + *SimpleMenu.line2.foreground: gray91 + *SimpleMenu.line3.foreground: gray61 + *SimpleMenu.line4.foreground: gray91 + *SimpleMenu.line5.foreground: gray61 + *SimpleMenu.line6.foreground: gray91 + *SimpleMenu.line7.foreground: gray61 + *SimpleMenu.line8.foreground: gray91 + *SimpleMenu.line9.foreground: gray61 + *SimpleMenu.line10.foreground: gray91 + *SimpleMenu.line11.foreground: gray61 + *SimpleMenu.line12.foreground: gray91 + *SimpleMenu.line13.foreground: gray61 + *SimpleMenu.line14.foreground: gray91 + *SimpleMenu.line15.foreground: gray61 + *SimpleMenu.line16.foreground: gray91 + *SimpleMenu.line17.foreground: gray61 + *SimpleMenu.line18.foreground: gray91 + *SimpleMenu.line19.foreground: gray61 + *SimpleMenu.line20.foreground: gray91 + *SimpleMenu.line21.foreground: gray61 + *SimpleMenu.line22.foreground: gray91 + *SimpleMenu.line23.foreground: gray61 + *SimpleMenu.line24.foreground: gray91 + *SimpleMenu.line25.foreground: gray61 + *SimpleMenu.line26.foreground: gray91 + *SimpleMenu.line27.foreground: gray61 + *SimpleMenu.line28.foreground: gray91 + *SimpleMenu.line29.foreground: gray61 + *SimpleMenu.line30.foreground: gray91 + *SimpleMenu.line31.foreground: gray61 + *SimpleMenu.line32.foreground: gray91 + *SimpleMenu.line33.foreground: gray61 + *SimpleMenu.line34.foreground: gray91 + *SimpleMenu.line35.foreground: gray61 + *SimpleMenu.line36.foreground: gray91 + *SimpleMenu.line37.foreground: gray61 + *SimpleMenu.line38.foreground: gray91 + *SimpleMenu.line39.foreground: gray61 + *SimpleMenu.line40.foreground: gray91 +} + + diff --git a/vendor/x11iraf/ximtool/gui.bak/global.tcl b/vendor/x11iraf/ximtool/gui.bak/global.tcl new file mode 100644 index 00000000..4908e752 --- /dev/null +++ b/vendor/x11iraf/ximtool/gui.bak/global.tcl @@ -0,0 +1,147 @@ + + +############################################################################## +# Utility Procedures. +############################################################################## + +# Utility procedure to test True/False strings in resources. +proc true {v} {expr {$v == "true" || $v == "True" || $v == "TRUE"}} + +# Utility functions. +proc min {a b} { expr {($a < $b) ? $a : $b} } +proc max {a b} { expr {($a > $b) ? $a : $b} } + +# Global variables. +set version "NOAO/IRAF XImtool Version 1.3EXPORT" + +set winWidth [send imagewin get width ] ;# display window width +set winHeight [send imagewin get height] ;# display window height +set appWidth [send display get width ] ;# application window width +set appHeight [send display get height] ;# application window height +set marker none ;# selected marker +set markno 0 ;# used to name new markers +set ruler none ;# selected ruler +set ruleno 0 ;# used to name new rulers +set blinkFrames "1 2" ;# list of blink frames +set auto_reg 0 + +set panel_up 0 ;# control panel mapped +set help_up 0 ;# help panel mapped +set ism_enable 0 ;# ISM is running +set ism_capable 1 ;# Client is ISM capable +set frameCache(0) "" ;# ISM frame cache + +set ctype "equatorial" ;# default coord type +set eqtype "fk5" ;# default equatorial type + +# Global constants. +set MAX_FRAMES 16 ;# max frame buffers + +# TCL constants +set tcl_precision 8 + + + +# Window resize callbacks. +proc winResize {w width height} { + global winWidth winHeight + + if {$width <= 1 || $height <= 1} \ + return + + set winWidth $width + set winHeight $height +} ; send imagewin addCallback winResize resize + +proc appResize {w width height} \ +{ + global doHcut doVcut cutXPos cutYPos + global appWidth appHeight + + set appWidth $width + set appHeight $height + + catch { + if {$doHcut} { + send hcutPlot clearScreen + hcutInit + send hcutAxes1 redraw ; send hcutAxes2 redraw + cutPlots $cutXPos $cutYPos + } + if {$doVcut} { + send vcutPlot clearScreen + vcutInit + send vcutAxes1 redraw ; send vcutAxes2 redraw + cutPlots $cutXPos $cutYPos + } + } +} ; #send imagewin addCallback appResize resize + + + +# Additional global variables, taking default values from resources. +getResources { + { zoomfactors } + { displayCoords } + { displayPanner } + { displayMagnifier } + { blinkRate } + { pannerArea } + { pannerGeom } + { magnifierArea } + { magnifierGeom } + { wcsboxGeom } + { maxContrast } + { showToolBar } + { showPanelBar } + { warnings } + { centerBoxSize } + { peakCentroid } + { highlight } +} + +set warnings [true $warnings] +set defaultBlinkRate $blinkRate + +# Client state variables (UI parameter objects). Certain of these parameters +# we mirror in Tcl variables here, updating the values with a callback when +# the parameter value changes. Others require special callbacks. + +set frame 1 ;# current display frame +set nframes 0 ;# number of frame buffers +set frames {1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16} ;# list of image frames +set frameWidth 0 ;# frame buffer width, pixels +set frameHeight 0 ;# frame buffer height, pixels +set frameDepth 8 ;# frame buffer pixel size, bits +set cursorMode 0 ;# true when cursor read pending + +foreach i $frames { + set frameZoomX($i) 0 ;# X zoom factor + set frameZoomY($i) 0 ;# Y zoom factor + set frameCenterX($i) 0 ;# X center of field + set frameCenterY($i) 0 ;# Y center of field + set frameScaleX($i) 0 ;# X scale factor + set frameScaleY($i) 0 ;# Y scale factor + set frameOffsetX($i) 0 ;# X register offset + set frameOffsetY($i) 0 ;# Y register offset + set enhancement($i) none ;# colortable enhancement +} + + +#trace variable frameOffsetX w debug_pvar ;# Debug stuff +#trace variable frameOffsetY w debug_pvar +#trace variable frameZoomX w debug_pvar +#trace variable frameZoomY w debug_pvar +#trace variable frameScaleX w debug_pvar +#trace variable frameScaleY w debug_pvar + +proc debug_pvar { name element op } \ +{ + if {$element != ""} { + set name ${name}($element) + } + upvar $name x + puts "Variable $name set to $x" +} + + diff --git a/vendor/x11iraf/ximtool/gui.bak/hdr.obj b/vendor/x11iraf/ximtool/gui.bak/hdr.obj new file mode 100644 index 00000000..5940a85a --- /dev/null +++ b/vendor/x11iraf/ximtool/gui.bak/hdr.obj @@ -0,0 +1,36 @@ + +set Objects(hdr_panel) { \ + toplevel TopLevelShell hdr_panel\ + hdr_panel Layout hdrLayout\ +\ + hdrLayout Frame hdrMenuFrame\ + hdrMenuFrame Layout hdrMenuBar\ + hdrMenuBar Command hdrClose\ +\ + hdrLayout Group hdrObjGroup\ + hdrObjGroup Layout hdrObjLayout\ + hdrObjLayout Label hdrObjLabel\ + hdrObjLayout MenuButton hdrObjMenu\ +\ + hdrLayout Frame hdrTabFrame\ + hdrTabFrame Tabs hdrTabs\ + hdrTabs Group hdrHdrGroup\ + hdrTabs Group hdrWcsGroup\ +\ + hdrHdrGroup Layout hdrHdrLayout\ + hdrHdrLayout Frame hFindFrame\ + hFindFrame AsciiText hFindEntry\ + hdrHdrLayout Command hdrFilter\ + hdrHdrLayout Command hdrFind\ + hdrHdrLayout Command hdrClear\ + hdrHdrLayout HTML hdrText\ +\ + hdrWcsGroup Layout hdrWcsLayout\ + hdrWcsLayout Group hdrInfoGroup\ + hdrInfoGroup Frame hdrIGFrame\ + hdrIGFrame AsciiText hdrIGText\ + hdrWcsLayout Group hdrKeywGroup\ + hdrKeywGroup Frame hdrKGFrame\ + hdrKGFrame AsciiText hdrKGText\ +} + diff --git a/vendor/x11iraf/ximtool/gui.bak/hdr.res b/vendor/x11iraf/ximtool/gui.bak/hdr.res new file mode 100644 index 00000000..b0b96528 --- /dev/null +++ b/vendor/x11iraf/ximtool/gui.bak/hdr.res @@ -0,0 +1,138 @@ + +set Resources(hdr_panel) { \ + + *hdr_panel.geometry: 550x600 + *hdr_panel.title: Image Header + + *hdr_panel*SimpleMenu.borderColor: black + *hdr_panel*SimpleMenu.borderWidth: 1 + *hdr_panel*SimpleMenu.foreground: White + *hdr_panel*SimpleMenu.background: SteelBlue + + *hdrMenuFrame.frameType: raised + *hdrMenuFrame.frameWidth: 2 + *hdrLayout.layout: vertical { \ + hdrMenuFrame < +inf -inf * > \ + hdrObjGroup < +inf -inf * > \ + hdrTabFrame < +inf -inf * +inf -inf> \ + } + + *hdrMenuBar*borderWidth: 0 + *hdrMenuBar*Command.internalHeight: 5 + *hdrMenuBar*Command.internalWidth: 12 + *hdrMenuBar.layout: vertical { \ + 5 < -5 > \ + horizontal { 10 < +inf -10> hdrClose 7 } \ + 5 < -5 > \ + } + *hdrClose.label: Dismiss + + *hdrObjGroup.label: + *hdrObjGroup.outerOffset: 7 + *hdrObjGroup.innerOffset: 4 + *hdrObjLayout.borderWidth: 0 + *hdrObjLayout.layout: vertical { \ + horizontal { hdrObjLabel 2 hdrObjMenu < +inf -inf * > 2 } \ + } + *hdrObjLabel.label: Image Name: + *hdrObjMenu.label: + *hdrObjMenu.justify: left + *hdrObjMenu.font: 7x13 + *hdrObjMenu.menuName: objMenu + *hdrObjMenu.internalWidth: 5 + *hdrObjMenu.internalHeight: 1 + *hdrObjMenu.shadowWidth: 1 + + *hdrHdrGroup.tabLabel: Image Header + *hdrHdrGroup.label: + *hdrHdrGroup.outerOffset: 7 + *hdrHdrGroup.innerOffset: 5 + *hdrHdrLayout.borderWidth: 0 + *hdrHdrLayout.layout: vertical { \ + horizontal { \ + hdrFilter 2 hFindFrame < +inf -inf * > 2 hdrFind 1 hdrClear \ + } \ + 5 \ + hdrText < +inf -inf * +inf -inf > \ + } + *hFindEntry*editType: edit + *hFindEntry*font: 7x13 + *hFindEntry*displayCaret: True + *hFindEntry*width: 150 + *hFindFrame.frameWidth: 1 + *hFindFrame*borderWidth: 0 + *hFindFrame.frameType: sunken + *hFindFrame.width: 150 + *hFindFrame.height: 23 + *hdrFilter.label: Keyword Filter + *hdrFind.label: Search + *hdrClear.label: Clear + + ! Resources if the header text widget is AsciiText +! *hdrText*scrollVertical: Always +! *hdrText*scrollHorizontal: Always +! *hdrText*editType: edit +! *hdrText*font: 7x13 +! *hdrText*background: gray77 +! *hdrText*displayCaret: False +! *hdrText*bottomMargin: 10 +! *hdrText*Scrollbar.width: 15 +! *hdrText*Scrollbar.height: 15 + + ! Resources if the header text widget is HTML + *hdrText.width: 600 + *hdrText.height: 500 + *hdrText.anchorUnderlines: 1 + *hdrText.visitedAnchorUnderlines: 1 + *hdrText.verticalScrollOnRight: True + *hdrText.plainFont: 7x13 + *hdrText.marginWidth: 5 + *hdrText.marginHeight: 5 + + + *hdrWcsGroup.tabLabel: Image WCS Info + *hdrWcsGroup.label: + *hdrWcsGroup.outerOffset: 5 + *hdrWcsGroup.innerOffset: 5 + *hdrWcsGroup*Text*scrollVertical: whenNeeded + *hdrWcsGroup*Text*scrollHorizontal: whenNeeded + *hdrWcsGroup*Text*editType: edit + *hdrWcsGroup*Text*displayCaret: False + *hdrWcsGroup*Text*borderWidth: 0 + *hdrWcsGroup*Text*editType: edit + *hdrWcsGroup*Text*font: 7x13 + *hdrWcsGroup*Text*Scrollbar.width: 15 + *hdrWcsGroup*Text*Scrollbar.height: 15 + *hdrWcsLayout.borderWidth: 0 + *hdrWcsLayout.layout: vertical { \ + 2 < -2 > \ + hdrInfoGroup < +inf -inf * > \ + 2 < -2 > \ + hdrKeywGroup < +inf -inf * +inf -inf > \ + -4 \ + } + *hdrInfoGroup.label: Basic WCS Information + *hdrInfoGroup.outerOffset: 7 + *hdrInfoGroup.innerOffset: 0 + *hdrIGFrame.frameType: sunken + *hdrIGFrame.frameWidth: 1 + *hdrIGText.height: 130 +! *hdrIGText*background: black +! *hdrIGText*foreground: yellow2 + *hdrIGText*background: gray68 + *hdrIGText*foreground: black + *hdrWcsGroup*hdrIGText*scrollVertical: never + *hdrWcsGroup*hdrIGText*scrollHorizontal: never + *hdrWcsGroup*hdrIGText*font: 7x13 + *hdrKeywGroup.label: WCS Header Keywords + *hdrKeywGroup.outerOffset: 7 + *hdrKeywGroup.innerOffset: 5 + *hdrKGFrame.frameType: sunken + *hdrKGFrame.frameWidth: 1 + *hdrKGText*background: gray77 + *hdrKGText*bottomMargin: 10 + + *hdrIGText*background: gray77 + *hdrIGFrame.frameWidth: 0 +} + diff --git a/vendor/x11iraf/ximtool/gui.bak/hdr.tcl b/vendor/x11iraf/ximtool/gui.bak/hdr.tcl new file mode 100644 index 00000000..4dc7489a --- /dev/null +++ b/vendor/x11iraf/ximtool/gui.bak/hdr.tcl @@ -0,0 +1,105 @@ + +################################################################################ +# Header Display Callbacks. +################################################################################ + +set hdrImage "" +set hdrImageId "" +set hdrKeywords "*" + + +proc fitsHdrClose args \ +{ + global hdr_up + + send hdr_panel unmap + send imageHeader set on False + set hdr_up 0 +} ; send hdrClose addCallback fitsHdrClose + +proc ptFitsHeader {widget type state args} \ +{ + global hdr_up + + set hdr_up $state + if {$hdr_up == 1} { + send imageHeader set on True + send hdr_panel map + } else { + send imageHeader set on False + send hdr_panel unmap + } +}; send imageHeader addCallback ptFitsHeader + +proc getHeader { name id } \ +{ + global hdrImage hdrImageId hdrKeywords + + set hdrImage $name + set hdrImageId $id + send hdrObjMenu set label $name + send hdrText setText "" + send hdrIGText set string "" + send hdrKGText set string "" + + catch { send wcspix objinfo $hdrImageId $hdrKeywords } +} + +proc hdrKeywFilter args \ +{ + global hdrImageId hdrKeywords + + set str [ send hFindEntry get string ] + if {$str != ""} { + set hdrKeywords $str + send hdrText setText "" + catch { send wcspix objinfo $hdrImageId $hdrKeywords } + } +} ; send hdrFilter addCallback hdrKeywFilter + + +# Set the image menu in the header panel. +proc setHdrObjMenu { frame args } \ +{ + global frameCache ism_enable + + if {! $ism_enable} \ + return + + # Create the menu of images for the header panel. + set items { } + foreach i [list $frameCache($frame)] { + set l [lindex $i 0] + set lid [lindex $i 1] + regsub -all {[\[]} $l "\\\[" l2 + catch { + lappend items [format "%s f.exec \{getHeader %s %d\}" $l $l2 $lid] + } + } + editMenu objMenu hdrObjMenu $items +} + + +# Search box for the header. +proc hdrFind args \ +{ + set phrase [send hFindEntry get string] + + if { $phrase != "" } { + if {[send hdrText searchText $phrase start end forward caseless] > 0} { + set elid [lindex [lindex $start 0] 0] + set id [max 1 [expr $elid - 10] ] + send hdrText gotoId $id + send hdrText setSelection $start $end + } else { + send warnText set label "Search string not found." + send warning map + } + } else { + send warnText set label "Warning: No search phrase entered." + send warning map + } +} ; foreach w { hFindEntry hdrFind } { send $w addCallback hdrFind } + +send hdrClear addCallback { send hFindEntry set string "" } + diff --git a/vendor/x11iraf/ximtool/gui.bak/help.obj b/vendor/x11iraf/ximtool/gui.bak/help.obj new file mode 100644 index 00000000..36759f63 --- /dev/null +++ b/vendor/x11iraf/ximtool/gui.bak/help.obj @@ -0,0 +1,27 @@ + +set Objects(help_panel) { \ + toplevel TopLevelShell help_panel\ + help_panel Layout helpLayout\ + helpLayout Group helpMenuGroup\ + helpMenuGroup Layout helpMenubar\ + helpLayout Layout helpInfoLayout\ +\ + helpMenubar Command helpClose\ +\ + helpLayout Command helpBack\ + helpLayout Command helpForward\ + helpLayout Command helpHome\ + helpLayout Frame hfFrame\ + hfFrame AsciiText hfEntry\ + helpLayout Command hfFind\ + helpLayout Command hfClear\ + helpLayout Frame helpTextFrame\ + helpTextFrame HTML helpText\ +\ + helpInfoLayout Label helpIRAFLogo\ + helpInfoLayout Label helpInfo1\ + helpInfoLayout Label helpInfo2\ + helpInfoLayout Label helpInfo3\ + helpInfoLayout Label helpNOAOLogo\ +} + diff --git a/vendor/x11iraf/ximtool/gui.bak/help.res b/vendor/x11iraf/ximtool/gui.bak/help.res new file mode 100644 index 00000000..ca70390b --- /dev/null +++ b/vendor/x11iraf/ximtool/gui.bak/help.res @@ -0,0 +1,111 @@ + +set Resources(help_panel) { \ + + !---------------------- + ! Help panel resources. + !---------------------- + *help_panel.title: XImtool Help Summary + *help_panel.width: 500 + *help_panel.height: 550 + *helpLayout*borderWidth: 0 + *helpLayout*Command.internalHeight: 4 + *helpLayout*Command.internalWidth: 12 + *helpLayout*HTML*shadowWidth: 1 + *helpLayout*helpText*Scrollbar.shadowWidth: 1 + + *helpMenuGroup.label: + *helpMenuGroup.height: 45 + *helpMenuGroup.outerOffset: 0 + *helpMenuGroup.innerOffset: 0 + *helpMenuGroup.frameType: raised + *helpMenubar.layout: vertical { \ + 5 < -5 > \ + horizontal { 20 < +inf -20 > helpClose 7 } \ + 5 < -5 > \ + } + *helpBack.label: Back + *helpBack.sensitive: False + *helpForward.label: Forward + *helpForward.sensitive: False + *helpHome.label: Home + *helpClose.label: Dismiss + + + *hfEntry*editType: edit + *hfEntry*font: 7x13 + *hfEntry*displayCaret: True + *hfFrame.frameWidth: 1 + *hfFrame.frameType: sunken + *hfFrame.width: 250 + *hfFind.label: Search + *hfFind.shadowWidth: 1 + *hfClear.label: Clear + *hfClear.shadowWidth: 1 + + *helpLayout.layout: vertical { \ + -1 \ + horizontal { helpMenuGroup < +inf -inf * > } \ + 5 \ + horizontal { \ + 5 \ + helpBack 2 helpForward 2 helpHome \ + 20 < +inf -20 > \ + hfFrame < +inf -inf * > 3 hfFind 1 hfClear \ + 5 \ + } \ + 5 \ + horizontal { helpTextFrame < +inf -inf * +inf -inf > } \ + horizontal { helpInfoLayout < +inf -inf * > } \ + -1 \ + } + *helpTextFrame.frameWidth: 1 + *helpTextFrame.frameType: sunken + *helpText.width: 600 + *helpText.height: 500 + *helpText.anchorUnderlines: 1 + *helpText.visitedAnchorUnderlines: 1 + *helpText.verticalScrollOnRight: true + *helpText*Scrollbar.shadowWidth: 1 + *helpText.plainFont: -adobe-courier-medium-r-normal-*-12-*-*-*-*-*-*-* + *helpText.plainboldFont: -adobe-courier-bold-r-normal-*-12-*-*-*-*-*-*-* + *helpText.plainitalicFont: -adobe-courier-medium-o-normal-*-12-*-*-*-*-*-*-* +! *helpText.boldFont: 6x12bold + + + ! Contact info at the bottom of the panel. + *helpInfoLayout*Label.justify: center + *helpInfoLayout*Label.internalHeight: 0 + *helpInfoLayout.layout: horizontal { \ + 5 \ + vertical { 5 helpIRAFLogo 5 } \ + 1 < +inf > \ + vertical { \ + 5 \ + helpInfo1 < +inf -inf * +inf -inf > \ + helpInfo2 < +inf -inf * +inf -inf > \ + helpInfo3 < +inf -inf * +inf -inf > \ + 5 \ + } \ + 1 < +inf > \ + vertical { 5 helpNOAOLogo 5 } \ + 5 \ + } + *helpInfo1.label: XIMTOOL_VERSION + *helpInfo2.label: iraf@noao.edu (520) 318-8160 + *helpInfo3.label: \ + NOAO is operated by AURA under cooperative agreement with the NSF + + *helpInfoLayout*helpInfo1.font: -*-helvetica-medium-r-normal-*-12-*-*-* + *helpInfoLayout*helpInfo2.font: -*-helvetica-medium-r-normal-*-12-*-*-* + *helpInfoLayout*helpInfo3.font: -*-helvetica-medium-r-normal-*-10-*-*-* + + *helpInfoLayout.helpIRAFLogo.internalWidth: 0 + *helpInfoLayout.helpIRAFLogo.internalHeight: 0 + *helpInfoLayout.helpIRAFLogo.foreground: SteelBlue + *helpInfoLayout.helpIRAFLogo.background: white + *helpInfoLayout.helpNOAOLogo.internalWidth: 0 + *helpInfoLayout.helpNOAOLogo.internalHeight: 0 + *helpInfoLayout.helpNOAOLogo.foreground: SteelBlue + *helpInfoLayout.helpNOAOLogo.background: white +} + diff --git a/vendor/x11iraf/ximtool/gui.bak/help.tcl b/vendor/x11iraf/ximtool/gui.bak/help.tcl new file mode 100644 index 00000000..cc55e978 --- /dev/null +++ b/vendor/x11iraf/ximtool/gui.bak/help.tcl @@ -0,0 +1,209 @@ + +############################################### +# Define procedure for the help panel +############################################### + +# Help Panel Bitmaps +#------------------- +createBitmap iraf_logo 45 45 { +0xff, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f, 0xff, 0xff, 0xff, 0xff, +0xff, 0x3f, 0xfc, 0xff, 0xff, 0xff, 0xff, 0x3f, 0xfc, 0xff, 0xff, 0xff, +0xff, 0x3f, 0xf8, 0xff, 0xff, 0xff, 0xff, 0x3f, 0xf0, 0xff, 0xff, 0xff, +0xff, 0x3f, 0xf0, 0xff, 0xff, 0xff, 0xff, 0x3f, 0xe0, 0xff, 0xff, 0xff, +0xff, 0x3f, 0xc0, 0xff, 0xff, 0xff, 0xff, 0x3f, 0xc0, 0xff, 0xff, 0xff, +0xff, 0x3f, 0x80, 0xff, 0xff, 0xff, 0xff, 0x3f, 0x80, 0xfc, 0xff, 0xff, +0xff, 0x3f, 0x84, 0xf8, 0xff, 0xff, 0xff, 0x1f, 0x84, 0xf4, 0xff, 0xff, +0xff, 0x1b, 0x04, 0x09, 0x00, 0xfc, 0xff, 0x11, 0x04, 0x11, 0xf8, 0xff, +0x7f, 0x10, 0x04, 0x21, 0xc0, 0xff, 0x1f, 0x10, 0x04, 0x41, 0xf0, 0xff, +0x00, 0x18, 0x04, 0x01, 0xe0, 0xff, 0x00, 0x18, 0x00, 0x81, 0xc0, 0xff, +0x00, 0x08, 0x00, 0x01, 0xe0, 0xff, 0x07, 0x08, 0x00, 0x01, 0xf1, 0xff, +0x1f, 0x08, 0x80, 0x21, 0xf0, 0xff, 0xff, 0x08, 0xc0, 0x41, 0xf4, 0xff, +0xff, 0x08, 0xc0, 0x41, 0xf8, 0xff, 0xff, 0x09, 0xc0, 0xc1, 0xf0, 0xff, +0xff, 0x0b, 0x80, 0xc1, 0xf1, 0xff, 0xff, 0x07, 0x80, 0x81, 0xe1, 0xff, +0xff, 0x07, 0x80, 0x01, 0xc1, 0xff, 0xff, 0x07, 0x00, 0x01, 0xc0, 0xff, +0xff, 0x07, 0xc2, 0x05, 0x81, 0xff, 0xff, 0x07, 0xf2, 0x07, 0x81, 0xff, +0xff, 0x07, 0xf2, 0x17, 0x03, 0xff, 0xff, 0x03, 0xfa, 0x7f, 0x02, 0xfe, +0xff, 0x03, 0xfe, 0xff, 0x02, 0xfe, 0xff, 0x03, 0xfe, 0xff, 0x03, 0xfc, +0xff, 0x03, 0xff, 0xff, 0x07, 0xfc, 0xff, 0x83, 0xff, 0xff, 0x0f, 0xf8, +0xff, 0xc1, 0xff, 0xff, 0x3f, 0xf0, 0xff, 0xe1, 0xff, 0xff, 0x7f, 0xf8, +0xff, 0xf1, 0xff, 0xff, 0xff, 0xf0, 0xff, 0xf8, 0xff, 0xff, 0xff, 0xe0, +0xff, 0xf8, 0xff, 0xff, 0xff, 0xe3, 0xff, 0xfc, 0xff, 0xff, 0xff, 0xe7, +0xff, 0xfc, 0xff, 0xff, 0xff, 0xef}; send helpIRAFLogo "set bitmap iraf_logo" + +createBitmap noao_logo 45 45 { +0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, +0xff, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0x03, 0xfe, 0xff, 0xff, +0xff, 0xff, 0x01, 0xfc, 0xff, 0xff, 0xff, 0xff, 0x00, 0xf8, 0xff, 0xff, +0xff, 0xff, 0x00, 0xf8, 0xff, 0xff, 0xff, 0xff, 0x00, 0xf8, 0xff, 0xff, +0xff, 0x7f, 0x00, 0xf0, 0xff, 0xff, 0xff, 0xff, 0x00, 0xf8, 0xff, 0xff, +0xff, 0xff, 0x00, 0xf8, 0xff, 0xff, 0xff, 0xff, 0x00, 0xf8, 0xff, 0xff, +0xff, 0xff, 0x01, 0xfc, 0xff, 0xff, 0xff, 0xff, 0x03, 0xfe, 0xff, 0xff, +0xff, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, +0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xff, 0xff, 0xff, +0xff, 0xff, 0x8f, 0xff, 0xff, 0xff, 0xff, 0xff, 0x8f, 0xff, 0xff, 0xff, +0xff, 0xff, 0x07, 0xff, 0xff, 0xff, 0xff, 0xff, 0x07, 0xff, 0xff, 0xff, +0xff, 0xff, 0x03, 0xfe, 0xff, 0xff, 0xff, 0xff, 0x03, 0xfe, 0xff, 0xff, +0xff, 0xff, 0x01, 0xfc, 0xff, 0xff, 0xff, 0xff, 0x01, 0xfc, 0xff, 0xff, +0xff, 0xff, 0x00, 0xf8, 0xff, 0xff, 0xff, 0x7f, 0x00, 0xf0, 0xff, 0xff, +0xff, 0x7f, 0x00, 0xf0, 0xff, 0xff, 0xff, 0x3f, 0x00, 0xe0, 0xff, 0xff, +0xff, 0x3f, 0x00, 0xe0, 0xff, 0xff, 0xff, 0x1f, 0x00, 0xc0, 0xff, 0xff, +0xff, 0x1f, 0x00, 0xc0, 0xff, 0xff, 0xff, 0x0f, 0x00, 0x80, 0xff, 0xff, +0xff, 0x0f, 0x00, 0x80, 0xff, 0xff, 0xff, 0x07, 0x00, 0x00, 0xff, 0xff, +0xff, 0x03, 0x00, 0x00, 0xfe, 0xff, 0xff, 0x03, 0x00, 0x00, 0xfe, 0xff, +0xff, 0x01, 0x00, 0x00, 0xfc, 0xff, 0xff, 0x01, 0x00, 0x00, 0xfc, 0xff, +0xff, 0x00, 0x00, 0x00, 0xf8, 0xff, 0xff, 0x00, 0x00, 0x00, 0xf8, 0xff, +0x7f, 0x00, 0x00, 0x00, 0xf0, 0xff, 0x7f, 0x00, 0x00, 0x00, 0xf0, 0xff, +0x3f, 0x00, 0x00, 0x00, 0xe0, 0xff}; send helpNOAOLogo "set bitmap noao_logo" + +send helpInfo1 set label $version + +# Stuff for keeping track of visited anchors. +set links { 0 } +set linkIndex 0 +set visited(0) empty + +proc Help args \ +{ + global help_up + if {$help_up == 0} { + send client help + } else { + send help_panel unmap + set help_up 0 + } +} + +proc helpPanel args \ +{ + global help_up + if {$help_up} { + send help_panel unmap + set help_up 0 + } else { + send help_panel map + set help_up 1 + } +} + +proc panelHelp args \ +{ + Help +} ; send panelHelp addCallback panelHelp + +proc helpQuit args \ +{ + global help_up + send help_panel unmap + set help_up 0 +}; send helpClose addCallback helpQuit + +proc getHelpText { param old new } \ +{ + send helpText setText $new + helpPanel +}; send help addCallback getHelpText + +proc anchorSelected {widget cbtype event text href args} \ +{ + global visited links linkIndex + set anchID [send helpText anchorToId $href] + set visited($href) 1 + if {$linkIndex == 0} { + send helpBack setSensitive True + if {[lindex $links 1] != $anchID} { + set links { 0 } + send helpForward setSensitive False + } + } + if {$linkIndex > 0 && [lindex $links [expr $linkIndex + 1]] != $anchID} { + set links [lrange $links 0 $linkIndex] + } + if {[lindex $links [expr $linkIndex + 1]] != $anchID} { + lappend links $anchID + incr linkIndex + } else { + send helpForward setSensitive False + incr linkIndex + } + if {$linkIndex == [expr [llength $links] - 1]} { + send helpForward setSensitive False + } + send helpText gotoId $anchID + send helpText retestAnchors +}; send helpText addCallback anchorSelected anchor + +proc testAnchor {widget cbtype href} \ +{ + global visited + return [info exists visited($href)] +}; send helpText addCallback testAnchor testAnchor + + +# Callbacks to position forwards and backwards in link list. +proc hlpForward args \ +{ + global links linkIndex + incr linkIndex + if {$linkIndex <= [llength $links]} { + set anchID [lindex $links $linkIndex] + send helpText gotoId $anchID + send helpText retestAnchors + if {$linkIndex == [expr [llength $links] - 1]} { + send helpForward setSensitive False + send helpBack setSensitive True + } else { + send helpBack setSensitive True + } + } else { + incr linkIndex -1 + } +}; send helpForward addCallback hlpForward + +proc hlpBack args \ +{ + global links linkIndex + incr linkIndex -1 + if {$linkIndex >= 0} { + set anchID [lindex $links $linkIndex] + send helpText gotoId $anchID + send helpText retestAnchors + if {$linkIndex == 0} { send helpBack setSensitive False } + if {$linkIndex >= 0} { send helpForward setSensitive True } + } else { + incr linkIndex 1 + } +}; send helpBack addCallback hlpBack + +proc hlpHome args \ +{ + global links linkIndex + set links { 0 } + set linkIndex 0 + send helpText gotoId 0 + send helpForward setSensitive False + send helpBack setSensitive False +}; send helpHome addCallback hlpHome + + +proc helpFind args \ +{ + set phrase [send hfEntry get string] + + if { $phrase != "" } { + if {[send helpText searchText $phrase start end forward caseless] > 0} { + set elid [lindex [lindex $start 0] 0] + set id [max 1 [expr $elid - 10] ] + send helpText gotoId $id + send helpText setSelection $start $end + } else { + send warnText set label "Search string not found." + send warning map + } + } else { + send warnText set label "Warning: No search phrase entered." + send warning map + } +} ; foreach w { hfEntry hfFind } { send $w addCallback helpFind } + +send hfClear addCallback { send hfEntry set string "" } + diff --git a/vendor/x11iraf/ximtool/gui.bak/imagewin.tcl b/vendor/x11iraf/ximtool/gui.bak/imagewin.tcl new file mode 100644 index 00000000..5969ac6c --- /dev/null +++ b/vendor/x11iraf/ximtool/gui.bak/imagewin.tcl @@ -0,0 +1,1123 @@ + +# Cursor positioning routines +#---------------------------- + +proc move_cursor { xstep ystep args } \ +{ + set raster 0 + send imagewin getCursorPos rx ry + send imagewin setCursorPos [expr $rx + $xstep] [expr $ry + $ystep] $raster +} + + +# Called when the number of frames changes. +proc setNFrames {param old new} \ +{ + global frameMenuDescription nframes frames + + set nframes $new + if {$old != $new} { + foreach i {prevButton nextButton} { + send $i set sensitive [expr "$nframes > 1"] + } + + if {$nframes > 0} { + + # Creates the Frames menu on the main image window. + set items { } + for {set i 1} {$i <= $nframes} {incr i} { + set l [format "%2d" $i] + lappend items "$l f.exec \{send client setFrame $i\} sensitive \{[expr \"$nframes >= $i\"]\}" + } + editMenu frameMenu frameButton $items + + # Create the menu for the blink frames list. + set items { } + for {set i 0} {$i <= $nframes} {incr i} { + set j [expr ($i + 1)] + if {$i == 0} { + set s "\"none\" f.exec \{send brFrameBTN set label \" \"\}" + lappend items $s + } else { + set l [format "%2d" $i] + lappend items "$l f.exec \{send brFrameBTN set label $l\} sensitive \{[expr \"$nframes >= $i\"]\}" + } + } + for {set i 1} {$i <= $nframes} {incr i} { + send brFrame$i setSensitive True + send tFrame$i setSensitive True + regsub -all BTN $items $i nmenu + editMenu frame${i}Menu brFrame$i $nmenu + } + + } else { + editMenu frameMenu frameButton $frameMenuDescription + + for {set i 1} {$i <= $nframes} {incr i} { + send brFrame$i setSensitive True + send tFrame$i setSensitive True + editMenu frame${i}Menu brFrame$i $frameMenuDescription + } + } + } + + for {set i 1} {$i <= 16} {incr i} { + if {$i <= $nframes} { + send frame$i map + } else { + send frame$i unmap + } + } + + if {$nframes > 2} { + setAllTileFrames + } +}; send nframes addCallback setNFrames + + +# Set the default main window frame menu. +set frameMenuDescription { + {" 1" f.exec "send client setFrame 1" sensitive {[expr "$nframes >= 1"]} } + {" 2" f.exec "send client setFrame 2" sensitive {[expr "$nframes >= 2"]} } + {" 3" f.exec "send client setFrame 3" sensitive {[expr "$nframes >= 3"]} } + {" 4" f.exec "send client setFrame 4" sensitive {[expr "$nframes >= 4"]} } +}; createMenu frameMenu frameButton $frameMenuDescription + + + + +# Initialize the frame lists panels (blink panel and tile tab). +for {set i 1} {$i <= 16} {incr i} { + send brFrame$i set label [format "%2d" $i] + send tFrame$i set label [format "%2d" $i] + if {$i <= 4} { + send brFrame$i setSensitive True + send tFrame$i "setSensitive True ; set state 1" + } else { + send brFrame$i setSensitive False + send tFrame$i "setSensitive False ; set state 0" + } + createMenu frame${i}Menu brFrame$i $frameMenuDescription +} + + +# Called when the frame being displayed changes. +proc frameChanged {param old new} \ +{ + global frame + + set frame $new + send frameButton set label [format "%2d" $frame] + + # The first time we request frame 5 or higher reset + # the extra frame buttons on the control panel to make + # them visible. + if {$new >= 5} { + send frlistBox set width 49 + } + wcsFmtFBConfig + drawCompass +}; send frame addCallback frameChanged + + +# Called when the frame buffer configuration changes. +proc setFrameSize {param old new} \ +{ + global frameWidth frameHeight frameDepth + set frameWidth [lindex $new 0] + set frameHeight [lindex $new 1] + set frameDepth [lindex $new 2] + + wcsFmtFBConfig +}; send frameSize addCallback setFrameSize + +# Called when the current frame is zoomed or panned. +proc setFrameView {param old new} \ +{ + global frameZoomX frameZoomY frameCenterX frameCenterY + global frameScaleX frameScaleY frameOffsetX frameOffsetY + global frame auto_reg blinkFrames + + # Update the position. + set frameZoomX($frame) [lindex $new 0] + set frameZoomY($frame) [lindex $new 1] + set frameCenterX($frame) [lindex $new 2] + set frameCenterY($frame) [lindex $new 3] + set frameScaleX($frame) [lindex $new 4] + set frameScaleY($frame) [lindex $new 5] + set frameOffsetX($frame) [lindex $new 6] + set frameOffsetY($frame) [lindex $new 7] + + # If auto-registering is enabled, do it now, but only when we're updating + # the current display frame, and only if that frame is in the framelist. + + if {$auto_reg == 1 && $frame == [send frameButton get label]} { + if {[string first $frame $blinkFrames] != -1} { + send client offsetRegister \{$blinkFrames\} + } + + foreach f $blinkFrames { + if {$f != $frame} { + set frameZoomX($f) $frameZoomX($frame) + set frameZoomY($f) $frameZoomY($frame) + set frameCenterX($f) $frameCenterX($frame) + set frameCenterY($f) $frameCenterY($frame) + set frameScaleX($f) $frameScaleX($frame) + set frameScaleY($f) $frameScaleY($frame) + } + } + } + deleteAllRulers + +}; send frameView addCallback setFrameView + + +# Called when the color enhancement for a frame changes. +proc setEnhancement {param old new} \ +{ + global enhancement + set enhancement([lindex $new 0]) [lrange $new 1 end] +}; send enhancement addCallback setEnhancement + +# Called when the frame title changes (e.g. frame change or new frame loaded). +proc setTitle {param old new} \ +{ + set lab [string trimright $new] + send imageTitle set label $lab + + set image [lindex [ split $lab '-'] 0 ] + wcsFmtImname $image + + set title [lindex [ split $lab '-'] 1 ] + wcsFmtImtitle $title + deleteAllRulers +}; send frameTitle addCallback setTitle + +# Called when the image is flipped in an axis. +proc setFlip {param old new} \ +{ + if {$param == "xflip"} { + send xflipButton set state [true $new] + } else { + send yflipButton set state [true $new] + } + deleteAllRulers +}; foreach i {xflip yflip} { send $i addCallback setFlip } + + +# Various general callbacks. + +proc Quit args \ +{ + global ism_enable + + if {$ism_enable} { + catch { send wcspix quit } + } + send client Quit +} +proc nextFrame args { send client nextFrame } +proc prevFrame args { send client prevFrame } +proc setColormap { mapno } { send client setColormap $mapno } +proc xflip args { send client flip x ; flipRegister } +proc yflip args { send client flip y ; flipRegister } +proc xyflip args { send client flip x y ; flipRegister } +proc flipRegister args \ +{ + global auto_reg frame blinkFrames + + if {$auto_reg == 1 && $frame == [send frameButton get label]} { + if {[string first $frame $blinkFrames] != -1} { + send client offsetRegister \{$blinkFrames\} + } + } +} + + + +# Initialize bitmaps. +createBitmap xflip 16 16 { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x08, 0x18, 0x18, + 0x1c, 0x38, 0xfe, 0x7f, 0xfe, 0x7f, 0x1c, 0x38, 0x18, 0x18, 0x10, 0x08, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00} + +createBitmap yflip 16 16 { + 0x00, 0x00, 0x80, 0x01, 0xc0, 0x03, 0xe0, 0x07, 0xf0, 0x0f, 0x80, 0x01, + 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0xf0, 0x0f, + 0xe0, 0x07, 0xc0, 0x03, 0x80, 0x01, 0x00, 0x00} + +createBitmap qmark 16 16 { + 0x00, 0x00, 0x00, 0x00, 0xf0, 0x07, 0xf8, 0x0f, 0x18, 0x0c, 0x18, 0x0c, + 0x18, 0x0e, 0x00, 0x07, 0x80, 0x03, 0x80, 0x01, 0x80, 0x01, 0x00, 0x00, + 0x80, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x00} + +createBitmap larrow 16 16 { + 0x00, 0x00, 0x00, 0x03, 0x80, 0x03, 0xc0, 0x03, 0xe0, 0x1e, 0x70, 0x1e, + 0x38, 0x18, 0x1c, 0x18, 0x1c, 0x18, 0x38, 0x18, 0x70, 0x1e, 0xe0, 0x1e, + 0xc0, 0x03, 0x80, 0x03, 0x00, 0x03, 0x00, 0x00} + +createBitmap rarrow 16 16 { + 0x00, 0x00, 0xc0, 0x00, 0xc0, 0x01, 0xc0, 0x03, 0x78, 0x07, 0x78, 0x0e, + 0x18, 0x1c, 0x18, 0x38, 0x18, 0x38, 0x18, 0x1c, 0x78, 0x0e, 0x78, 0x07, + 0xc0, 0x03, 0xc0, 0x01, 0xc0, 0x00, 0x00, 0x00} + +createBitmap panel 16 16 { + 0x00, 0x00, 0xf8, 0x1f, 0xf8, 0x1f, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, + 0x98, 0x19, 0x98, 0x19, 0x98, 0x19, 0x98, 0x19, 0x98, 0x19, 0x18, 0x18, + 0x18, 0x18, 0x18, 0x18, 0xf8, 0x1f, 0xf8, 0x1f} + +createBitmap brightness 15 15 { + 0x00, 0x00, 0x80, 0x00, 0x84, 0x10, 0xe8, 0x0b, 0x10, 0x04, 0x08, 0x08, + 0x08, 0x08, 0x0e, 0x38, 0x08, 0x08, 0x08, 0x08, 0x10, 0x04, 0xe8, 0x0b, + 0x84, 0x10, 0x80, 0x00, 0x00, 0x00} + +createBitmap contrast 15 15 { + 0x00, 0x00, 0x00, 0x00, 0xc0, 0x01, 0x30, 0x07, 0x08, 0x0f, 0x08, 0x0f, + 0x04, 0x1f, 0x04, 0x1f, 0x04, 0x1f, 0x08, 0x0f, 0x08, 0x0f, 0x30, 0x07, + 0xc0, 0x01, 0x00, 0x00, 0x00, 0x00} + +createBitmap bar 10 10 { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0x00, 0x42, 0x00, 0x7e, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00} + +createBitmap dot 16 16 { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x01, + 0xe0, 0x03, 0xf0, 0x07, 0xf0, 0x07, 0xf0, 0x07, 0xe0, 0x03, 0xc0, 0x01, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00} + +createBitmap null 16 16 { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00} + +createBitmap solid 64 24 { + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 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, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00} + +catch { send controlButton "set bitmap panel; addCallback panel" } +catch { send helpButton "set bitmap qmark; addCallback Help" } +send xflipButton "set bitmap xflip; addCallback xflip" +send yflipButton "set bitmap yflip; addCallback yflip" +send prevButton "set bitmap larrow; addCallback prevFrame" +send nextButton "set bitmap rarrow; addCallback nextFrame" +send blinkPanel "set bitmap panel" + + + +# WINDOW the current frame. +proc windowColormap {x y} \ +{ + global winWidth winHeight maxContrast + + send client windowColormap \ + [expr "double($x) / $winWidth"] \ + [expr "(double($y) - $winHeight / 2.0) / $winHeight * \ + $maxContrast * 2.0"] +} + + +# WINDOW the current frame, but only one color at a time. +proc windowRGB {color x y save_flag} \ +{ + global winWidth winHeight maxContrast + + send client windowRGB $color \ + [expr "double($x) / $winWidth"] \ + [expr "(double($y) - $winHeight / 2.0) / $winHeight * \ + $maxContrast * 2.0"] $save_flag +} + + +# ZOOM and PAN. +set xcen 0 +set ycen 0 +foreach i $frames {set zoomindex($i) 0} +set nzoomfactors 0 +foreach i $zoomfactors { + set zoomfactor($nzoomfactors) $i + incr nzoomfactors +} + +# Zoom or pan image at given center. +proc zoom {x y} \ +{ + global xcen ycen frame + global zoomindex zoomfactor + global nzoomfactors + + set rx $x; set ry $y + set raster 0 + + # Convert raw screen coordinates to frame buffer raster coordinates. + send imagewin unmapPixel $x $y raster rx ry + + # Select a pixel. + set rx [expr "int ($rx)"] + set ry [expr "int ($ry)"] + + # If the pointer did not move (much) zoom the image, otherwise + # pan it. + + send imagewin setCursorType busy + if {sqrt(pow($x-$xcen, 2) + pow($y-$ycen, 2)) < 4} { + set zoomindex($frame) [expr [incr zoomindex($frame)] % $nzoomfactors] + set mag $zoomfactor($zoomindex($frame)) + send client zoom $mag $mag $rx $ry + } else { + send client pan $rx $ry + set xcen $x + set ycen $y + } + + # Move the pointer so that it tracks the object feature the user + # selected. + + send imagewin setCursorPos $rx $ry $raster + send imagewin getCursorPos xcen ycen + send imagewin setCursorType idle +} + + +# Zoom using a marker to indicate the region to be displayed. +proc zoomMarker {marker aspect} \ +{ + global xcen ycen frame + global winWidth winHeight + global zoomindex nzoomfactors + global auto_reg frame frameOffsetX frameOffsetY + + # getRegion returns: "rectangle raster x y width height rotangle". + set region [send $marker getRegion unmap] + + set raster [lindex $region 1] + set xcen [expr "int([lindex $region 2]) + 0.5"] + set ycen [expr "int([lindex $region 3]) + 0.5"] + set snx [expr "[lindex $region 4] * 2"] + set sny [expr "[lindex $region 5] * 2"] + + # Compute the magnification ratio. + set xmag [expr "$winWidth / $snx"] + set ymag [expr "$winHeight / $sny"] + if {$aspect == "equal"} { + set mag [expr "($xmag < $ymag) ? $xmag : $ymag"] + set xmag $mag; set ymag $mag + } + + # Zoom the image. + send client zoomAbs \ + $xmag $ymag $xcen $ycen \ + $frameOffsetX($frame) $frameOffsetY($frame) + + # The following causes a button2 to redisplay the full image. + send imagewin setCursorPos $xcen $ycen $raster + send imagewin getCursorPos xcen ycen + set zoomindex($frame) [expr "$nzoomfactors - 1"] +} + +# Pan the display frame one width/height in a given direction. +proc moveFrame { xs ys args } \ +{ + global winWidth winHeight frame + global frameWidth frameHeight + global frameZoomX frameZoomY frameCenterX frameCenterY + global frameOffsetX frameOffsetY + + # Get the step size for the new position. + set xstep_size [ expr "$xs * $winWidth / $frameZoomX($frame)" ] + set ystep_size [ expr "$ys * $winHeight / $frameZoomY($frame)" ] + + # Set the boundaries so we only move up to the edges. + set xl [ expr "($winWidth / $frameZoomX($frame)) / 2 + 1" ] + set yl [ expr "($winHeight / $frameZoomY($frame)) / 2 + 1" ] + set xu [ expr "$frameWidth - $xl" ] + set yu [ expr "$frameHeight - $yl" ] + + # Set the new center position. + set nxc [ expr "$frameCenterX($frame) + $xstep_size" ] + set nyc [ expr "$frameCenterY($frame) + $ystep_size" ] + if {$nxc < $xl} { set nxc $xl } + if {$nxc > $xu} { set nxc $xu } + if {$nyc < $yl} { set nyc $yl } + if {$nyc > $yu} { set nyc $yu } + + # Finally, send the command to move the frame. + send client zoomAbs \ + $frameZoomX($frame) $frameZoomY($frame) $nxc $nyc \ + $frameOffsetX($frame) $frameOffsetY($frame) +} + +proc resetView {param old new} { + global zoomindex xcen ycen frames + global frameWidth frameHeight + + if {$new == "done"} { + foreach i $frames { + send client setFrame $i + set xcen [expr $frameWidth / 2] + set ycen [expr $frameHeight / 2] + send client zoom 1 1 $xcen $ycen + set zoomindex($i) 0 + send client setColormap Grayscale + normalize + } + send client setFrame 1 + } +}; #send initialize addCallback resetView + + +# CURSOR READ stuff. +proc setCursorMode {param old new} \ +{ + global cursorMode + + if {$new == "on"} { + send imagewin "activate; setCursorType ginMode" + set cursorMode 1 + } elseif {$new == "off"} { + send imagewin "setCursorType idle; deactivate" + set cursorMode 0 + } +} + +proc keyInput {widget event sx sy data} \ +{ + global cursorMode frame + + if {!$cursorMode || $event != "keyPress"} \ + return + if {[lindex $data 0] == "??"} \ + return + + # Convert raw screen coordinates to raster pixel coordinates. + send imagewin unmapPixel $sx $sy raster rx ry + + # Return the cursor value and exit cursor mode. + send client retCursorVal $rx $ry $frame 1 [lindex $data 0] +} + +proc resetCursorMode args { + global cursorMode frame + if {$cursorMode} { + send imagewin getCursorPos x y + send client retCursorVal $x $y $frame 1 ^D + } +}; send initialize addCallback resetCursorMode + +send cursorMode addCallback setCursorMode +send imagewin addCallback keyInput input + + +# MARKER stuff. The active marker is determined by the global variable +# "marker", which is the marker the pointer is in, or which the pointer +# was most recently in. + +# Translations when pointer is inside marker. +set markerTranslations { \ +!Shift : m_rotateResize() + : m_moveResize() + !Shift : m_raise() m_markpos() + : m_raise() m_markposAdd() + : m_redraw() m_destroyNull() + : m_lower() + : popup(markerMenu) + : popdown(markerMenu) + !Ctrl b: call(prevFrame,$name) + !Ctrl f: call(nextFrame,$name) + !Ctrl h: call(move_cursor,-1,0) + !Ctrl j: call(move_cursor,0,1) + !Ctrl k: call(move_cursor,0,-1) + !Ctrl l: call(move_cursor,1,0) + !Ctrl n: call(normalize) + !Ctrl c: call(cpZoomAction,centerFrame) + !Ctrl i: call(cpInvert) + !Ctrl m: call(cpMatchFrames) + !Ctrl r: call(cpRegisterFrames) + !Ctrl p: call(togglePanner) + !Alt 1: call(cpSetFrame,frame1) + !Alt 2: call(cpSetFrame,frame2) + !Alt 3: call(cpSetFrame,frame3) + !Alt 4: call(cpSetFrame,frame4) + !Ctrl 1: call(cpZoom,1,1,fixed) + !Ctrl 2: call(cpZoom,2,2,fixed) + !Ctrl 3: call(cpZoom,3,3,fixed) + !Ctrl 4: call(cpZoom,4,4,fixed) + !Ctrl 5: call(cpZoom,5,5,fixed) + !Ctrl 6: call(cpZoom,6,6,fixed) + !Ctrl 7: call(cpZoom,7,7,fixed) + !Ctrl 8: call(cpZoom,8,8,fixed) + !Ctrl 9: call(cpZoom,9,9,fixed) + BackSpace: m_deleteDestroy() + Delete: m_deleteDestroy() + : m_input() + : track-cursor() call(wcsUpdate,$x,$y) call(magnifierMapImage,$x,$y) +} + +# Popup menu in effect when inside marker. +createMenu markerMenu imagewin { + { Marker f.title } + { f.dblline } + { Zoom f.exec { + zoomMarker $marker equal + send $marker destroy + } } + { Fill f.exec { + zoomMarker $marker fill + send $marker destroy + } } + { Print f.exec { + send $marker getRect interior x0 y0 nx ny + setPrintCorners $x0 [expr $y0 + $ny -1] \ + [expr $x0 + $nx -1] $y0 + send client print $x0 $y0 $nx $ny + } } + { Save f.exec { + send imagewin setCursorType busy + send $marker getRect interior x0 y0 nx ny + send client save $x0 $y0 $nx $ny + send imagewin setCursorType idle + } } + { Info f.exec { + send infoText append \ + [format "%s\n" [send $marker getRegion unmap]] + } } + { Unrotate f.exec { + send $marker setAttribute rotangle 0 + } } + { f.dblline } + { Color f.menu markerColor } + { Type f.menu markerType } + { f.dblline } + { Destroy f.exec { + send $marker destroy + } } +} + +createMenu markerType markerMenu { + { Type f.title } + { f.dblline } + { Rectangle f.exec "m_setType $marker rectangle" } + { Box f.exec "m_setType $marker box" } + { Circle f.exec "m_setType $marker circle" } + { Ellipse f.exec "m_setType $marker ellipse" } + { Polygon f.exec "m_setType $marker polygon" } +} + +createMenu markerColor markerMenu { + { Color f.title } + { f.dblline } + { "" f.exec "m_setColor $marker black" + bitmap solid foreground black } + { "" f.exec "m_setColor $marker white" + bitmap solid foreground white } + { "" f.exec "m_setColor $marker red" + bitmap solid foreground red } + { "" f.exec "m_setColor $marker green" + bitmap solid foreground green } + { "" f.exec "m_setColor $marker blue" + bitmap solid foreground blue } + { "" f.exec "m_setColor $marker magenta" + bitmap solid foreground magenta } + { "" f.exec "m_setColor $marker cyan" + bitmap solid foreground cyan } + { "" f.exec "m_setColor $marker yellow" + bitmap solid foreground yellow } +} + +proc m_setType {marker type} { + send $marker "markpos; set type $type; redraw" +} +proc m_setColor {marker color} { + send $marker "markpos; + set lineColor $color; set highlightColor $color; redraw" +} + +# Callback executed when a marker gets or loses the focus. +proc selectMarker {active_marker event event_data} \ +{ + global marker + switch $event { + focusIn { set marker $active_marker } + focusOut { } + } +} + +# Create marker action. Makes a new marker. +proc makeMarker {parent x y} \ +{ + global markerTranslations markno + set marker marker$markno; incr markno + + send $parent createMarker $marker \ + type rectangle \ + createMode interactive \ + translations $markerTranslations \ + x $x \ + y $y + + send $marker addCallback selectMarker focusIn focusOut +} + + + +# WCSBOX -- Real time coordinate display. + +set track_enable 0 +set last_x 0 +set last_y 0 + +proc wcsUpdate {x y} \ +{ + global track_enable frame pixtab_up tabTop + global frameWidth frameHeight redraw_compass + global ism_enable wcsLabels last_x last_y + global ct_warn plotSpeed doHcut doVcut + + + # If the cursor was frozen release it now. + if {$ct_warn} { + curtrack_destroy + } + + # Convert screen coords to raster pixel. + send imagewin unmapPixel $x $y raster rx ry rz + + # Set the current frame to the frame the pointer is within. + if {$frame && $raster} { + set track_frame [send client getFrame $raster] + if {$frame != $track_frame} { + send client setFrame $track_frame + } + } + + # Update coords box. + if {$raster} { + set text [send client encodewcs $rx $ry $rz] + scan $text "%g %g %g" nx ny nz + } else { + set text [format " %7.2f %7.2f %9.1f " $rx $ry $rz] + set nx $rx ; set ny $ry ; set nz $rz + } + + # Update the coords panel and pixel table. + wcsFmtSValue $nz + if {$pixtab_up} { + updatePixelTable $x $y $nx $ny + } + + # If the ISM is running update the coords box with all the selected + # options, otherwise just write the one-line frame wcs coords. + if {$ism_enable} { + updateCoordsBox + + } else { + # Update the on-screen marker. + if {$track_enable} { + send wcsbox "set text \{$text\}; redraw noerase" + } + + # Update the control panel readout (always done). + if {$wcsLabels} { + set ln [format " X: %12s Y: %12s WCS: Display" $nx $ny] + } else { + set ln [format " %12s %12s Display" $nx $ny] + } + send wtWcs1 set string $ln + + if {$redraw_compass} \ + drawCompass + } + + + # Update the cut-plots if enabled. If we're set for speed the don't + # track the really large cursor motions, wait till the differences are + # small indicating a finer motion. + if {$doHcut || $doVcut} { + set dist [ expr "sqrt(pow(($last_x - $x),2) + pow(($last_y - $y),2))" ] + if {($plotSpeed && $dist < 30) || ! $plotSpeed} { + cutPlots $x $y + } + } + + # Save the position so we can track differences with last position. + set last_x $x + set last_y $y +} + + +proc setTrack {state} \ +{ + global ism_enable track_enable wcsboxGeom + global winWidth winHeight up_todo + + if {$state} { + if {$track_enable} \ + return + + send imagewin createMarker wcsbox { + type text + createMode noninteractive + width 27ch + height 1ch + lineWidth 0 + imageText true + textBgColor black + textColor yellow + visible false + } + + set box_width [send wcsbox get width] + set box_height [send wcsbox get height] + set defGeom [format "%sx%s-5-5" $box_width $box_height] + send imagewin parseGeometry $wcsboxGeom $defGeom x y width height + + send wcsbox setAttributes \ + x $x \ + y $y \ + activated true \ + visible true \ + sensitive true + + send wcsbox { + addCallback wcsboxDestroyCallback destroy + addCallback wcsboxMoved moveResize + } + + send imagewin addCallback wcsboxWindowResize resize + set track_enable 1 + send imagewin getCursorPos x y + wcsUpdate $x $y + magnifierMapImage $x $y + + # Turn on the option toggles on the control panel. + foreach n {1 2 3 4} { + if {[send sysWcs$n get label] != "None"} { + send wiWcs$n set on True + } + } + if {$ism_enable} { + resizeCoordsBox $up_todo + } + + } elseif {$track_enable} { + set track_enable 0 + send wcsbox destroy + + # Turn off the option toggles on the control panel. + foreach w {wiWcs1 wiWcs2 wiWcs3 wiWcs4} { send $w set on False } + resizeCoordsBox 0 + } + updateCoordsBox +} + +proc wcsboxDestroyCallback args \ +{ + global track_enable + send imagewin deleteCallback wcsboxWindowResize + set track_enable 0 +} + +# If the window is resized make the wcsbox track the corner. +proc wcsboxWindowResize args \ +{ + global track_enable + global wcsboxGeom + + if {$track_enable} { + # Get new location. + set box_width [send wcsbox get width] + set box_height [send wcsbox get height] + set defGeom [format "%sx%s-5-5" $box_width $box_height] + send imagewin parseGeometry $wcsboxGeom $defGeom x y width height + + # Move the marker. + send wcsbox "\ + deleteCallback wcsboxMoved; \ + markpos; setAttributes x $x y $y; redraw; \ + addCallback wcsboxMoved moveResize" + set wcsboxGeom [send imagewin getGeometry $x $y $width $height] + } +} + +proc wcsboxMoved {marker event position} \ +{ + global wcsboxGeom + send wcsbox getRect boundary x y width height + set wcsboxGeom [send imagewin getGeometry $x $y $width $height] +} + +proc resetWcsbox {param old new} \ +{ + global track_enable wcsboxGeom displayCoords + if {$new == "done"} { + setTrack [true $displayCoords] + } elseif {$track_enable} { + setTrack 0 + if {$new == "restart"} { + set wcsboxGeom -5-5 + } + } +}; send initialize addCallback resetWcsbox + + + +#--------------------- +# FRAME BLINK. +#--------------------- +set blinkId 0 +set blinkIndex 0 + +proc toggleBlink args \ +{ + global blinkId blinkRate blinkIndex + global optionsMenuDescription + + if {$blinkId} { + deleteTimedCallback $blinkId + set blinkId 0 + } else { + set blinkId [postTimedCallback blink [expr int($blinkRate * 1000)]] + } + + set blinkIndex 0 + editMenu optionsMenu viewButton $optionsMenuDescription +} + +proc blink args \ +{ + global blinkId blinkRate blinkFrames blinkIndex + + send client setFrame [lindex $blinkFrames $blinkIndex] + incr blinkIndex + if {$blinkIndex >= [llength $blinkFrames]} { + set blinkIndex 0 + } + + set blinkId [postTimedCallback blink [expr int($blinkRate * 1000)]] +} + +proc resetBlink args \ +{ + global blinkId + if {$blinkId} \ + toggleBlink +}; send initialize addCallback resetBlink + + + +# Normalize -- Reset the view parameters for the current frame. +proc normalize args \ +{ + global zoomindex zoomfactor + global frameWidth frameHeight + global xcen ycen frame + + #set zoomindex($frame) 0 + #set xcen [expr $frameWidth / 2] + #set ycen [expr $frameHeight / 2] + #send client zoom 1 1 $xcen $ycen + send client windowColormap 0.5 1.0 +} + + +# Popdown menus. +createMenu fileMenu fileButton { + { "Info" f.exec { panelTabToggle info_panel } } + { "Load" f.exec { + panelTabToggle load_panel + set panel_up 1 + } } + { "Save" f.exec { Save } } + { "Save As..." f.exec { panelTabToggle save_panel } } + { "Print" f.exec { + send imagewin setCursorType busy + Print + send imagewin setCursorType idle + } } + { "Print Setup" f.exec { panelTabToggle print_panel } } + { f.dblline } + { "Reset" f.exec { + # Do a hard reset. + send client Reset + #resetView initialize done done + } } + { "Quit" f.exec { Quit } } +} + +createMenu viewMenu viewButton { + { "Next frame" f.exec nextFrame } + { "Prev frame" f.exec prevFrame } + { f.dblline } + { "Colormap" f.menu cmapMenu } + { "Flip" f.menu flipMenu } + { f.dblline } + { "Equal aspect" f.exec { + set xmag $frameZoomX($frame) + set ymag $frameZoomY($frame) + set zoom [expr ($xmag + $ymag) / 2.0] + cpZoom $zoom $zoom fixed + } } + { "Integer zoom" f.exec { + set xmag [expr round ($frameZoomX($frame))] + set ymag [expr round ($frameZoomY($frame))] + cpZoom $xmag $ymag fixed + } } + { "Toggle zoom" f.exec toggleZoom } + { "Unzoom" f.exec { + set zoomindex($frame) 0 + set mag $zoomfactor($zoomindex($frame)) + send client zoom $mag $mag $xcen $ycen + } } +} + +createMenu cmapMenu viewMenu { + { "Normalize" f.exec normalize } + { "Invert" f.exec cpInvert } + { "Optimize" f.exec cpOptimize sensitive false } + { f.dblline } + { "Grayscale" f.exec "send client setColormap Grayscale" } + { "Color" f.exec "send client setColormap Color" } + { "Heat" f.exec "send client setColormap Heat" } + { "HSV" f.exec "send client setColormap HSV" } + { "AIPS0" f.exec "send client setColormap AIPS0" } + { "Halley" f.exec "send client setColormap Halley" } + { "Ramp" f.exec "send client setColormap Ramp" } + { "Standard" f.exec "send client setColormap Standard" } + { "Staircase" f.exec "send client setColormap Staircase" } + { "Rainbow1" f.exec "send client setColormap Rainbow1" } + { "Rainbow2" f.exec "send client setColormap Rainbow2" } + { "Random8" f.exec "send client setColormap Random8" } +} + +createMenu flipMenu viewMenu { + { "Flip X" f.exec xflip } + { "Flip Y" f.exec yflip } + { "Flip XY" f.exec xyflip } +} + +set optionsMenuDescription { + { "Autoscale" f.exec { + set value [send autoscaleButton get on] + send autoscaleButton set on [expr !$value] + cpSetAutoscale + } } + { "Antialias" f.exec { + set value [send antialiasButton get on] + send antialiasButton set on [expr !$value] + cpSetAntialias + } } + { "Panner" f.exec { setPanner [expr !$panner_enable] } } + { "Magnifier" f.exec { setMagnifier [expr !$magnifier_enable] }} + { "Coords box" f.exec { setTrack [expr !$track_enable] } } + { "Tile frames" f.exec { + set value [send tileFramesButton get on] + send tileFramesButton set on [expr !$value] + cpSetTileFrames + } } + { "Clear frame" f.exec clearFrame } + { "Fit frame" f.exec fitFrame } + { "Match LUTs" f.exec cpMatchFrames } + { "Auto-Register" f.exec cpAutoRegister } + { "Register" f.exec cpRegisterFrames } + { {$blinkId ? "Stop blink" : "Blink frames"} + f.exec toggleBlink } + { f.dblline } + { "Control Panel" f.exec { panelTabToggle display_panel } } + { "Print Panel" f.exec { panelTabToggle print_panel } } + { "Load Panel" f.exec { panelTabToggle load_panel } } + { "Save Panel" f.exec { panelTabToggle save_panel } } +}; createMenu optionsMenu optionsButton $optionsMenuDescription + + + +#------------------------------- +# Frozen Cursor Warning Message +#------------------------------- + +set ct_warn 0 + +proc curtrack_msg { x y args } \ +{ + global ct_warn last_x last_y winHeight winWidth + + + if {! $ct_warn == 0} { + return + } + + send imagewin createMarker curtrack_warn { + type text + createMode noninteractive + width 25ch + height 21 + lineWidth 0 + imageText true + textBgColor red + textColor yellow + visible true + sensitive true + activated true + x 5 + y 5 + } + + send curtrack_warn "set text \{ CURSOR READOUT FROZEN \}" + set ypos [ expr ($winHeight - 25) ] + send curtrack_warn "markpos; setAttributes x 5 y $ypos; redraw" + send curtrack_warn "redraw noerase" + set ct_warn 1 + + # Mark the position of the cursor. + send imagewin createMarker x_curpos \ + type box \ + createMode noninteractive \ + lineColor red \ + x 1 \ + y $last_y \ + width $winWidth \ + height 1 \ + activated True \ + visible True \ + sensitive False + + send imagewin createMarker y_curpos \ + type box \ + createMode noninteractive \ + lineColor red \ + x $last_x \ + y 1 \ + width 1 \ + height $winHeight \ + activated True \ + visible True \ + sensitive False + + # Raise the coordinate marker so we can see where we are. + send wcsbox raise +} + + +proc curtrack_destroy args \ +{ + global ct_warn + + if {$ct_warn} { + send curtrack_warn destroy + send x_curpos destroy + send y_curpos destroy + set ct_warn 0 + } +} diff --git a/vendor/x11iraf/ximtool/gui.bak/info.res b/vendor/x11iraf/ximtool/gui.bak/info.res new file mode 100644 index 00000000..227681fb --- /dev/null +++ b/vendor/x11iraf/ximtool/gui.bak/info.res @@ -0,0 +1,58 @@ + +set Resources(info_panel) { \ + + !-------------------- + ! Information Panel + !-------------------- + *infoLayout*borderWidth: 0 + *infoLayout*Frame.frameType: sunken + *infoLayout*Frame.frameWidth: 1 + *infoLayout*Command.internalWidth: 12 + *infoLayout*Text*editType: read + *infoLayout*Text*scrollVertical: whenNeeded + *infoLayout*Text*scrollHorizontal: whenNeeded + *infoLayout*Text*displayCaret: False + *infoLayout*Scrollbar.background: gray77 + *infoLayout*Scrollbar.width: 17 + *infoLayout*Scrollbar.height: 17 + + *infoText.height: 240 + *infoText*font: 6x13 + *infoLayout.layout: vertical { \ + infoBox < +inf -inf * > \ + } + + *infoBox.label: + *infoBox.outerOffset: 0 + *infoBox.innerOffset: 3 + *infoBoxL*TextToggle.frameType: raised + *infoBoxL*TextToggle.frameWidth: 1 + *infoBoxL*TextToggle*outerOffset: 0 + *infoBoxL*TextToggle*innerOffset: 1 + *infoBoxL*TextToggle.location: 0 0 100 25 + *infoBoxL*TextToggle*onIcon: square1s + *infoBoxL*TextToggle*offIcon: square0s + *infoBoxL*TextToggle*highlightColor: cyan + *infoBoxL.layout: vertical { \ + infoFrame < +inf -inf * +inf -inf > 1 \ + 4 \ + horizontal { \ + infoOptFr < +inf -inf * > 1 \ + infoOptSvr < +inf -inf * > 1 \ + infoOptClients < +inf -inf * > 1 \ + infoOptWCS < +inf -inf * > 1 \ + infoOptIsm < +inf -inf * > 1 \ + infoOptFB < +inf -inf * > \ + }\ + 2 \ + } + *infoOptFr.label: Frame + *infoOptFr.on: True + *infoOptSvr.label: Server + *infoOptWCS.label: WCS + *infoOptIsm.label: ISM + *infoOptClients.label: Clients + *infoOptFB.label: Imtoolrc +} + + diff --git a/vendor/x11iraf/ximtool/gui.bak/info.tcl b/vendor/x11iraf/ximtool/gui.bak/info.tcl new file mode 100644 index 00000000..3f0e89fc --- /dev/null +++ b/vendor/x11iraf/ximtool/gui.bak/info.tcl @@ -0,0 +1,86 @@ + +################################################################################ +# INFO box. +################################################################################ + +set infoMode infoOptFr + + +# Current Frame information. +proc infoFrameUpdate args \ +{ + global version frame nframes + global frameWidth frameHeight frameDepth + global enhancement + global cpXcen cpYcen cpXoff cpYoff + global cpXmag cpYmag cpXscale cpYscale + + if { [send infoOptWCS get on] } { + send client info wcs + return + } elseif {! [send infoOptFr get on]} \ + return + + + if {$frame == 0} { + send infoText set string "initializing display..." + } else { + set line1 $version + set line2 [format "Image:\t\t%s" [send imageTitle get label]] + set line3 [format "Frame %d of %d:\t%d x %d" \ + $frame $nframes $frameWidth $frameHeight] + set cmap [lindex $enhancement($frame) 0] + set brt [lindex $enhancement($frame) 1] + set con [lindex $enhancement($frame) 2] + set line4 [format "Colormap:\t%s" $cmap] + set line5 [format "Enhancement:\tBrt=%s Cont=%s" $brt $con] + + set cntr [format "X: %0.1f\n\t\tY: %0.1f" $cpXcen $cpYcen] + set line6 [format "Center:\t\t%s" $cntr] + + set line7 [format "Zoom:\t\tX: %0.2f\n\t\tY: %0.2f" $cpXmag $cpYmag] + set line8 [format "Scale:\t\tX: %0.2f\n\t\tY: %0.2f" $cpXscale $cpYscale] + set line9 [format "Offset:\t\tX: %0.2f\n\t\tY: %0.2f" $cpXoff $cpYoff] + + send infoText set string [ + format "%s\n\n%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s\n\n" \ + $line1 $line2 $line3 $line4 $line5 $line6 $line7 $line8 $line9 + ] + } +} +set params {frame frameView nframes frameSize frameTitle enhancement} +foreach p $params { send $p addCallback infoFrameUpdate } + + +# Server Program State information. +proc infoOptToggle { widget type state args } \ +{ + global infoMode ismInfoText + + if {$state} { set not False } else { set not True } + + send $infoMode set on $not + set infoMode $widget + + switch $widget { + infoOptFr { infoFrameUpdate } + infoOptSvr { set bp [send imagewin get basePixel] + set mc [send imagewin get maxColors] + send client info server $bp $mc + } + infoOptIsm { send infoText set string $ismInfoText } + infoOptClients { send client info clients } + infoOptWCS { send client info wcs } + infoOptFB { send client info imtoolrc } + } +} +set iopts {infoOptFr infoOptSvr infoOptIsm infoOptClients infoOptWCS infoOptFB } +foreach w $iopts { send $w addCallback infoOptToggle } + + +proc infoSetText { param old new } \ +{ + send infoText set string $new +} ; send info addCallback infoSetText + + diff --git a/vendor/x11iraf/ximtool/gui.bak/ism.tcl b/vendor/x11iraf/ximtool/gui.bak/ism.tcl new file mode 100644 index 00000000..e0947d90 --- /dev/null +++ b/vendor/x11iraf/ximtool/gui.bak/ism.tcl @@ -0,0 +1,423 @@ + + +################################################ +# ISM Module support routines. +################################################ + + +# Turn the ISM on or off. +proc ismToggle { widget type state args } \ +{ + global ism_enable ism_capable psize + + set ism_enable $state + + # Set the coord-panel header option availability. + if {$ism_enable == 1 && $ism_capable} { + send imageHeader setSensitive True + send woptBPM setSensitive True + catch { send client ism_start wcspix } + } else { + send imageHeader setSensitive False + send woptBPM set on False + send woptBPM setSensitive False + catch { send client ism_stop wcspix } + send hdr_panel unmap + } + setCoordPanelSensitivity + +} ; send ismToggle addCallback ismToggle + + + +# Handle messages from ISM clients and pass them on to the appropiate +# callback. + +proc ism_msg { param old new } \ +{ + global ism_enable + + set cmd [lindex $new 0] ;# command name + set ism [lindex $new 1] ;# determine ISM name + set argv [lrange $new 2 end] ;# get args + set argc [llength $argv] + + switch $cmd { + source { source [lindex $new 1] } + alert { Wexec client [lindex $new 1] } + deliver { ${ism}_msg $argc $argv } + info { ism_info $ism } + } +} ; send ism_msg addCallback ism_msg + + + +# Log a client message to the info panel +set ismInfoText " " + +proc ism_info { text } \ +{ + global infoMode ismInfoText + + set ismInfoText [format "%s\n%s" $ismInfoText $text] + if {$infoMode == "infoOptIsm"} { + send infoText set string $ismInfoText + } +} + +# Initialize the text. +proc ismInitInfoText args \ +{ + global ismInfoText + + set ismInfoText "" + ism_info "\t ISM Client Message Logs" + ism_info "\t -----------------------" + ism_info " " +} ; ismInitInfoText + + + +################################################ +# WPIX module support routines. +################################################ + +set cur_objid 0 +set cur_regid 0 +set redraw_compass 0 +#set Compass(0) { 0.0 1 1 0 X Y } +set Compass(0) { 0.0 0.0 1.0 -1.0 0.0 0 X Y } +set Orient(0) { 1 1 1 } + +set wcspix_debug 0 + +proc wcspix_msg { argc argv } \ +{ + global wcspix_debug + + set arg [string trimleft [ string trimright [lindex $argv 0] ] ] + set cmd [lindex $arg 0] + + if {$wcspix_debug} { print "wcspix_msg: $cmd" } + + + switch $cmd { + startup { wcspix_startup } + shutdown { wcspix_shutdown } + disable { wcspix_disable } + capable { wcspix_capable } + + cache { wcspix_cache [lrange $arg 1 end] } + uncache { wcspix_uncache [lrange $arg 1 end] } + wcstran { wcspix_wcstran [lrange $arg 1 end] } + wcslist { wcspix_wcslist [lrange $arg 1 end] } + + imghdr { send hdrText \ + setText [format "
%s\n%s
" \ + [string trimright [send hdrText getText simple] "\n"]\ + [lindex $arg 1] ] + } + wcshdr { send hdrKGText append [lindex $arg 1] } + + wcsinfo { send hdrIGText append [lindex $arg 1] + send hdrText gotoId 0 + send hdrKGText set insertPosition 0 + } + + compass { wcspix_compass [lrange $arg 1 end] } + orient { wcspix_orient [lrange $arg 1 end] } + wcstype { wcspix_wcstype [lindex $arg 1] [lindex $arg 2]} + wcsfmt { set num [lindex $arg 2] + send fmtWcs$num set label [lindex $arg 1] } + + wcspix_cmd { send wcsIsmCmd set string [lindex $arg 1] } + + pixtab { set tab [lindex [lindex $arg 1] 0] + set col [lindex [lindex $arg 1] 1] + set row [lindex [lindex $arg 1] 2] + set stat [lindex [lindex $arg 1] 3] + wcspix_pixtab $tab $col $row $stat + } + } +} + + +# Startup and initialize the wcspix module with the GUI state. +proc wcspix_startup args \ +{ + global ism_enable frame + global up_todo psize pixtab_up frameCache + + set ism_enable 1 + send ismToggle set on True + send imageHeader setSensitive True + send woptBPM setSensitive True + setCoordPanelSensitivity + ismInitInfoText + + if {$up_todo < 3} { + resizeCoordsBox $up_todo + } + updateCoordsBox + drawCompass + + # Initialize the frame cache. + foreach c [array names frameCache] { + if {$c != "0"} { unset frameCache($c) } + } + + catch { + if {$pixtab_up} { send wcspix set psize $psize } + for {set i 1} {$i <= 4} {incr i} { + send wcspix set wcs [send sysWcs$i get label] $i + send wcspix set format [send fmtWcs$i get label] $i + } + } + + if { [send infoOptClients get on] } { + send client info clients + } +} + +# Shutdown the WPIX module. +proc wcspix_shutdown args \ +{ + global ism_enable frame + + set ism_enable 0 + send ismToggle set on False + send imageHeader setSensitive False + send woptBPM set on False + send woptBPM setSensitive False + setCoordPanelSensitivity + setCoordPanelHeight + + wcsFmtIValue "N/A" + wcsFmtBValue "0" + + resizeCoordsBox 0 + drawCompass + + if { [send infoOptClients get on] } { + send client info clients + } +} + + +# Disable the WPIX module. We are only called when a display client has +# indicated it doesn't use the new mapping facilities and having the WPIX +# ISM visible will only confuse the user. + +proc wcspix_disable args \ +{ + global ism_enable ism_capable rulerWCS + + if {$ism_enable} { + send wcspix quit + } + set ism_capable 0 + set rulerWCS 0 + wcspix_shutdown + send ismToggle setSensitive False +} + + +# Client connected is capable of using the ISM, but don't necessarily turn +# it on at this point. + +proc wcspix_capable args \ +{ + global ism_capable + + set ism_capable 1 + wcsFmtIValue "0" + wcsFmtBValue "0" + send ismToggle setSensitive True +} + + +# Cache an image in the GUI. +proc wcspix_cache { argv } \ +{ + global frameCache redraw_compass cur_objid + + set name [lindex $argv 0] + set frame [lindex $argv 1] + set id [lindex $argv 2] + + # Store the image name and id in a local cache. + lappend frameCache($frame) $name $id + send hdrObjMenu set label $name + + # Automatically get the header. + regsub -all {[\[]} $name "\\\[" image + catch { getHeader $image $id } + + setHdrObjMenu $frame + + set cur_objid $id + set redraw_compass 1 +} + +# Uncache an image in the GUI. +proc wcspix_uncache { argv } \ +{ + global frameCache Compass + + set id [lindex $argv 0] + foreach c [array names frameCache] { + set i1 0 + set i2 1 + set new { } + while { $i2 < [llength $frameCache($c)] } { + if {[lindex $frameCache($c) $i2] != $id} { + lappend new [lindex $frameCache($c) $i1] + lappend new [lindex $frameCache($c) $i2] + } + incr i1 2 + incr i2 2 + } + set frameCache($c) $new + } + if [info exists Compass($id)] { + unset Compass($id) + } +} + +# Format the results of the WCSTRAN method. +proc wcspix_wcstran { argv } \ +{ + global frameCache cur_objid cur_regid redraw_compass + + set objid [ lindex [lindex $argv 0] 1] + set regid [ lindex [lindex $argv 1] 1] + set pixval [ lindex [lindex $argv 2] 1] + set bpmval [ lindex [lindex $argv 3] 1] + + wcsFmtIValue $pixval + wcsFmtBValue $bpmval + + set args [lrange $argv 4 end] + set nargs [llength $args] + for {set i 0} {$i < 4} {incr i} { + set coord [lindex $args $i] + set wcsname [lindex $coord 1] + set xval [lindex $coord 2] + set yval [lindex $coord 3] + set xunits [lindex $coord 4] + set yunits [lindex $coord 5] + wcsFmtWcs [expr ($i + 1)] $wcsname $xval $yval $xunits $yunits + } + + set cur_objid $objid + set cur_regid $regid + + if {$redraw_compass} \ + drawCompass +} + +# Save the object compass information. +proc wcspix_compass { argv } \ +{ + global Compass + + set objid [lindex $argv 0] + set angle [lindex $argv 1] + + #set xflip [lindex $argv 2] + #set yflip [lindex $argv 3] + #set transpose [lindex $argv 4] + #set xlab [lindex $argv 5] + #set ylab [lindex $argv 6] + + set north_x [lindex $argv 2] + set north_y [lindex $argv 3] + set east_x [lindex $argv 4] + set east_y [lindex $argv 5] + set transpose [lindex $argv 6] + set xlab [lindex $argv 7] + set ylab [lindex $argv 8] + + #lappend Compass($objid) $angle $xflip $yflip $transpose $xlab $ylab + #set Compass($objid) [list $angle $xflip $yflip $transpose $xlab $ylab] + set Compass($objid) [list $angle $north_x $north_y $east_x $east_y \ + $transpose $xlab $ylab] + drawCompass +} + +# Save the image display orientation information. +proc wcspix_orient { argv } \ +{ + global Orient + + set objid [lindex $argv 0] + set frame [lindex $argv 1] + set xflip [lindex $argv 2] + set yflip [lindex $argv 3] + + set Orient($objid) [list $frame $xflip $yflip] +} + + +# Handle the list of WCSs available for the current image. +proc wcspix_wcslist { argv } \ +{ + set wcslist [lindex $argv 0] + + for {set i 1} {$i <= 4} {incr i} { + set items {} + foreach nam $wcslist { + if {[string tolower $nam] == "line"} { + lappend items "f.dblline" + } else { + lappend items "\"$nam\" f.exec \{setWcsSys $nam $i\}" + } + } + editMenu sysMenu$i sysWcs$i $items + } +} + +# Set the type of the WCS. +proc wcspix_wcstype { label num } \ +{ + global up_todo + + send sysWcs$num set label $label + if {[string tolower $label] == "none"} { + send wpWcs$num "set on False ; setSensitive False" + send wiWcs$num "set on False ; setSensitive False" + send fmtWcs$num setSensitive False + set hght 4 + } else { + send wpWcs$num "set on True ; setSensitive True" + send wiWcs$num setSensitive True + send fmtWcs$num setSensitive True + set hght 17 + } + send wtWcs$num set height $hght + setCoordPanelHeight + + #resizeCoordsBox $up_todo + updateCoordsBox +} + +# Display the pixel table. +proc wcspix_pixtab { tab col row stat } \ +{ + global psize + + # Update the pixel table. + send pixtab setList [lindex $tab 1] + send pixtab highlight [expr int(($psize * $psize) / 2)] + + # Update the table labels. + set c [ expr int($psize / 2) ] + send ptColLabs setList $col ; send ptColLabs highlight $c + send ptRowLabs setList $row ; send ptRowLabs highlight $c + + # Update the pixtab stats. + send meanValue set label [ format "%10.2f" [lindex $stat 0] ] + send sigValue set label [ format "%10.4f" [lindex $stat 1] ] +} + + diff --git a/vendor/x11iraf/ximtool/gui.bak/ism.tcl.bak b/vendor/x11iraf/ximtool/gui.bak/ism.tcl.bak new file mode 100644 index 00000000..4dd43305 --- /dev/null +++ b/vendor/x11iraf/ximtool/gui.bak/ism.tcl.bak @@ -0,0 +1,411 @@ + + +################################################ +# ISM Module support routines. +################################################ + + +# Turn the ISM on or off. +proc ismToggle { widget type state args } \ +{ + global ism_enable ism_capable psize + + set ism_enable $state + + # Set the coord-panel header option availability. + if {$ism_enable == 1 && $ism_capable} { + send imageHeader setSensitive True + send woptBPM setSensitive True + catch { send client ism_start wcspix } + } else { + send imageHeader setSensitive False + send woptBPM set on False + send woptBPM setSensitive False + catch { send client ism_stop wcspix } + send hdr_panel unmap + } + setCoordPanelSensitivity + +} ; send ismToggle addCallback ismToggle + + + +# Handle messages from ISM clients and pass them on to the appropiate +# callback. + +proc ism_msg { param old new } \ +{ + global ism_enable + + set cmd [lindex $new 0] ;# command name + set ism [lindex $new 1] ;# determine ISM name + set argv [lrange $new 2 end] ;# get args + set argc [llength $argv] + + switch $cmd { + source { source [lindex $new 1] } + alert { Wexec client [lindex $new 1] } + deliver { ${ism}_msg $argc $argv } + info { ism_info $ism } + } +} ; send ism_msg addCallback ism_msg + + + +# Log a client message to the info panel +set ismInfoText " " + +proc ism_info { text } \ +{ + global infoMode ismInfoText + + set ismInfoText [format "%s\n%s" $ismInfoText $text] + if {$infoMode == "infoOptIsm"} { + send infoText set string $ismInfoText + } +} + +# Initialize the text. +proc ismInitInfoText args \ +{ + global ismInfoText + + set ismInfoText "" + ism_info "\t ISM Client Message Logs" + ism_info "\t -----------------------" + ism_info " " +} ; ismInitInfoText + + + +################################################ +# WPIX module support routines. +################################################ + +set cur_objid 0 +set cur_regid 0 +set redraw_compass 0 +set Compass(0) { 0.0 1 1 0 X Y } +set Orient(0) { 1 1 1 } + +set wcspix_debug 0 + +proc wcspix_msg { argc argv } \ +{ + global wcspix_debug + + set arg [string trimleft [ string trimright [lindex $argv 0] ] ] + set cmd [lindex $arg 0] + + if {$wcspix_debug} { print "wcspix_msg: $cmd" } + + + switch $cmd { + startup { wcspix_startup } + shutdown { wcspix_shutdown } + disable { wcspix_disable } + capable { wcspix_capable } + + cache { wcspix_cache [lrange $arg 1 end] } + uncache { wcspix_uncache [lrange $arg 1 end] } + wcstran { wcspix_wcstran [lrange $arg 1 end] } + wcslist { wcspix_wcslist [lrange $arg 1 end] } + + imghdr { send hdrText \ + setText [format "
%s\n%s
" \ + [string trimright [send hdrText getText simple] "\n"]\ + [lindex $arg 1] ] + } + wcshdr { send hdrKGText append [lindex $arg 1] } + + wcsinfo { send hdrIGText append [lindex $arg 1] + send hdrText gotoId 0 + send hdrKGText set insertPosition 0 + } + + compass { wcspix_compass [lrange $arg 1 end] } + orient { wcspix_orient [lrange $arg 1 end] } + wcstype { wcspix_wcstype [lindex $arg 1] [lindex $arg 2]} + wcsfmt { set num [lindex $arg 2] + send fmtWcs$num set label [lindex $arg 1] } + + wcspix_cmd { send wcsIsmCmd set string [lindex $arg 1] } + + pixtab { set tab [lindex [lindex $arg 1] 0] + set col [lindex [lindex $arg 1] 1] + set row [lindex [lindex $arg 1] 2] + set stat [lindex [lindex $arg 1] 3] + wcspix_pixtab $tab $col $row $stat + } + } +} + + +# Startup and initialize the wcspix module with the GUI state. +proc wcspix_startup args \ +{ + global ism_enable frame + global up_todo psize pixtab_up frameCache + + set ism_enable 1 + send ismToggle set on True + send imageHeader setSensitive True + send woptBPM setSensitive True + setCoordPanelSensitivity + ismInitInfoText + + if {$up_todo < 3} { + resizeCoordsBox $up_todo + } + updateCoordsBox + drawCompass + + # Initialize the frame cache. + foreach c [array names frameCache] { + if {$c != "0"} { unset frameCache($c) } + } + + catch { + if {$pixtab_up} { send wcspix set psize $psize } + for {set i 1} {$i <= 4} {incr i} { + send wcspix set wcs [send sysWcs$i get label] $i + send wcspix set format [send fmtWcs$i get label] $i + } + } + + if { [send infoOptClients get on] } { + send client info clients + } +} + +# Shutdown the WPIX module. +proc wcspix_shutdown args \ +{ + global ism_enable frame + + set ism_enable 0 + send ismToggle set on False + send imageHeader setSensitive False + send woptBPM set on False + send woptBPM setSensitive False + setCoordPanelSensitivity + setCoordPanelHeight + + wcsFmtIValue "N/A" + wcsFmtBValue "0" + + resizeCoordsBox 0 + drawCompass + + if { [send infoOptClients get on] } { + send client info clients + } +} + + +# Disable the WPIX module. We are only called when a display client has +# indicated it doesn't use the new mapping facilities and having the WPIX +# ISM visible will only confuse the user. + +proc wcspix_disable args \ +{ + global ism_enable ism_capable rulerWCS + + if {$ism_enable} { + send wcspix quit + } + set ism_capable 0 + set rulerWCS 0 + wcspix_shutdown + send ismToggle setSensitive False +} + + +# Client connected is capable of using the ISM, but don't necessarily turn +# it on at this point. + +proc wcspix_capable args \ +{ + global ism_capable + + set ism_capable 1 + wcsFmtIValue "0" + wcsFmtBValue "0" + send ismToggle setSensitive True +} + + +# Cache an image in the GUI. +proc wcspix_cache { argv } \ +{ + global frameCache redraw_compass cur_objid + + set name [lindex $argv 0] + set frame [lindex $argv 1] + set id [lindex $argv 2] + + # Store the image name and id in a local cache. + lappend frameCache($frame) $name $id + send hdrObjMenu set label $name + + # Automatically get the header. + regsub -all {[\[]} $name "\\\[" image + catch { getHeader $image $id } + + setHdrObjMenu $frame + + set cur_objid $id + set redraw_compass 1 +} + +# Uncache an image in the GUI. +proc wcspix_uncache { argv } \ +{ + global frameCache Compass + + set id [lindex $argv 0] + foreach c [array names frameCache] { + set i1 0 + set i2 1 + set new { } + while { $i2 < [llength $frameCache($c)] } { + if {[lindex $frameCache($c) $i2] != $id} { + lappend new [lindex $frameCache($c) $i1] + lappend new [lindex $frameCache($c) $i2] + } + incr i1 2 + incr i2 2 + } + set frameCache($c) $new + } + if [info exists Compass($id)] { + unset Compass($id) + } +} + +# Format the results of the WCSTRAN method. +proc wcspix_wcstran { argv } \ +{ + global frameCache cur_objid cur_regid redraw_compass + + set objid [ lindex [lindex $argv 0] 1] + set regid [ lindex [lindex $argv 1] 1] + set pixval [ lindex [lindex $argv 2] 1] + set bpmval [ lindex [lindex $argv 3] 1] + + wcsFmtIValue $pixval + wcsFmtBValue $bpmval + + set args [lrange $argv 4 end] + set nargs [llength $args] + for {set i 0} {$i < 4} {incr i} { + set coord [lindex $args $i] + set wcsname [lindex $coord 1] + set xval [lindex $coord 2] + set yval [lindex $coord 3] + set xunits [lindex $coord 4] + set yunits [lindex $coord 5] + wcsFmtWcs [expr ($i + 1)] $wcsname $xval $yval $xunits $yunits + } + + set cur_objid $objid + set cur_regid $regid + + if {$redraw_compass} \ + drawCompass +} + +# Save the object compass information. +proc wcspix_compass { argv } \ +{ + global Compass + + set objid [lindex $argv 0] + set angle [lindex $argv 1] + set xflip [lindex $argv 2] + set yflip [lindex $argv 3] + set transpose [lindex $argv 4] + set xlab [lindex $argv 5] + set ylab [lindex $argv 6] + + #lappend Compass($objid) $angle $xflip $yflip $transpose $xlab $ylab + set Compass($objid) [list $angle $xflip $yflip $transpose $xlab $ylab] + drawCompass +} + +# Save the image display orientation information. +proc wcspix_orient { argv } \ +{ + global Orient + + set objid [lindex $argv 0] + set frame [lindex $argv 1] + set xflip [lindex $argv 2] + set yflip [lindex $argv 3] + + set Orient($objid) [list $frame $xflip $yflip] +} + + +# Handle the list of WCSs available for the current image. +proc wcspix_wcslist { argv } \ +{ + set wcslist [lindex $argv 0] + + for {set i 1} {$i <= 4} {incr i} { + set items {} + foreach nam $wcslist { + if {[string tolower $nam] == "line"} { + lappend items "f.dblline" + } else { + lappend items "\"$nam\" f.exec \{setWcsSys $nam $i\}" + } + } + editMenu sysMenu$i sysWcs$i $items + } +} + +# Set the type of the WCS. +proc wcspix_wcstype { label num } \ +{ + global up_todo + + send sysWcs$num set label $label + if {[string tolower $label] == "none"} { + send wpWcs$num "set on False ; setSensitive False" + send wiWcs$num "set on False ; setSensitive False" + send fmtWcs$num setSensitive False + set hght 4 + } else { + send wpWcs$num "set on True ; setSensitive True" + send wiWcs$num setSensitive True + send fmtWcs$num setSensitive True + set hght 17 + } + send wtWcs$num set height $hght + setCoordPanelHeight + + #resizeCoordsBox $up_todo + updateCoordsBox +} + +# Display the pixel table. +proc wcspix_pixtab { tab col row stat } \ +{ + global psize + + # Update the pixel table. + send pixtab setList [lindex $tab 1] + send pixtab highlight [expr int(($psize * $psize) / 2)] + + # Update the table labels. + set c [ expr int($psize / 2) ] + send ptColLabs setList $col ; send ptColLabs highlight $c + send ptRowLabs setList $row ; send ptRowLabs highlight $c + + # Update the pixtab stats. + send meanValue set label [ format "%10.2f" [lindex $stat 0] ] + send sigValue set label [ format "%10.4f" [lindex $stat 1] ] +} + + diff --git a/vendor/x11iraf/ximtool/gui.bak/load.res b/vendor/x11iraf/ximtool/gui.bak/load.res new file mode 100644 index 00000000..6686f5c4 --- /dev/null +++ b/vendor/x11iraf/ximtool/gui.bak/load.res @@ -0,0 +1,173 @@ + +set Resources(load_panel) { \ + + !------------------------------- + ! File Load Control Panel. + !------------------------------- + *filesLayout*borderWidth: 0 + *filesLayout*Group.shrinkToFit: True + *filesLayout*Group.frameType: chiseled + *filesLayout*Frame*frameType: sunken + *filesLayout*Frame*frameWidth: 1 + *filesLayout*TextToggle.frameWidth: 0 + *filesLayout*TextToggle.height: 28 + *filesLayout*TextToggle.alignment: left + *filesLayout*TextToggle.ledtMargin: 3 + *filesLayout*SimpleMenu.borderWidth: 1 + *filesLayout*SimpleMenu.borderColor: black + *filesLayout*SimpleMenu.foreground: White + *filesLayout*SimpleMenu.background: SteelBlue + *filesLayout*Label.borderWidth: 0 + *filesLayout*Label.shadowWidth: 0 + *filesLayout.layout: vertical { \ + imlistGroup < +inf -inf * > \ + 3 \ + horizontal { -5 imoptsGroup < +inf -inf * > -5 } \ + -1 \ + loadCmdGroup < +inf -inf * > \ + } + + *imlistGroup.label: + *imlistGroup.frameWidth: 2 + *imlistGroup.outerOffset: 2 + *imlistLayout*Label.shadowWidth: 0 + *imlistLayout*Label.justify: left + *imlistLayout*Command.width: 90 + *imlistLayout*Command.height: 23 + *imlistLayout*Command.shadowWidth: 1 + *imlistLayout*Viewport.allowVert: True + *imlistLayout*Viewport.allowHoriz True + *imlistLayout*Viewport.useRight: True + *imlistLayout*Viewport.useBottom: True + *imlistLayout*Viewport.resizeable: True + *imlistLayout*Scrollbar.height: 17 + *imlistLayout*Scrollbar.width: 17 + *imlistLayout.layout: vertical { \ + 3 \ + horizontal { \ + 3 \ + rootButton < +inf -inf * > 1 \ + homeButton < +inf -inf * > 1 \ + upButton < +inf -inf * > 1 \ + rescanButton < +inf -inf * > \ + 3 \ + imtemplateLabel 3 imtemplateFrame < +inf -inf * > \ + 3 \ + } \ + 5 \ + horizontal { 1 imlistLabel < +inf -inf * > 1 } \ + imlistFrame < +inf -inf * +inf -inf > \ + 3 \ + dirLabel < +inf -inf * > \ + 3 \ + horizontal { 5 fnameLabel 5 filnamFrame < +inf -inf * > } \ + 3 \ + } + *imtemplateLabel.label: Filter: + *imtemplateText*editType: edit + *imtemplateText*height: 23 + *imtemplateText*font: 7x13 + !*imageList.width: 100 + *imageList*height: 140 + *imageList.shadeSurplus: False + *imageList.defaultColumns: 3 + *imageList.font: 7x13 + *imlistView.resizeable: True + *imlistLabel.height: 0 + *imlistLabel.label: xxx + *imlistLabel.justify: left + *imlistLabel.font: *lucida-bold-r*10* + *upButton.label: Up + *rootButton.label: Root + *homeButton.label: Home + *rescanButton.label: Rescan + *dirLabel.label: \ \ Directory: + *dirLabel.alignment: left + *fnameLabel.label: Load File: + *fnameText*editType: edit + *fnameText.height: 22 + + *imoptsGroup.label: Options + *imoptsGroup.frameWidth: 2 + *imoptsGroup.outerOffset: 7 + *imoptsGroup*offIcon: square0s + *imoptsGroup*onIcon: square1s + *imoptsGroup*highlightColor: yellow + *imoptsLayout*Label.shadowWidth: 0 + *imoptsLayout*Label.justify: left + *imoptsLayout.layout: vertical { \ + 3 \ + horizontal { \ + 3 \ + autoload 6 grayscale \ + 3 < +inf > \ + browseHdrs \ + 3 < +inf > \ + frameLabel 2 frameFrame \ + 3 \ + } \ + 6 \ + horizontal { \ + 3 \ + zscale 6 zrange \ + 3 \ + z1Label z1Frame < +inf * > 2 \ + z2Label z2Frame < +inf * > 2 \ + nsampLabel nsampFrame < +inf * > \ + 3 \ + } \ + 3 \ + } + *grayscale.label: Auto Grayscale + *grayscale.location: 0 0 100 22 + *autoload.label: Auto Load + *autoload.location: 0 0 80 22 + *autoload.on: True + *browseHdrs.label: List Image Headers + *browseHdrs.location: 0 0 120 22 + *browseHdrs.on: False + *zscale.label: Zscale + *zscale.location: 0 0 60 22 + *zrange.label: Zrange + *zrange.location: 0 0 60 22 + *z1Label.label: z1 + *z1Value*width: 60 + *z1Value*height: 22 + *z1Value*editType: edit + *z2Label.label: z2 + *z2Value*width: 60 + *z2Value*height: 22 + *z2Value*editType: edit + *nsampLabel.label: Nsample + *nsampValue*width: 60 + *nsampValue*height: 22 + *nsampValue*editType: edit + *frameLabel.label: Frame:\ + *frameFrame.width: 50 + *frameFrame.resize: False + *frameFrame.label: Current + *frameFrame.font: 6x13 + *frameFrame.menuName: loadFrames + + + *loadCmdGroup.label: + *loadCmdGroup*frameWidth: 2 + *loadCmdGroup*outerOffset: 5 + *loadCmdGroup.outerOffset: 2 + *loadCmdGroup*innerOffset: 5 + *loadCmdGroup.frameType: sunken + *loadCmdGroup.label: + *loadCmdGroup.location: 0 0 400 45 + *loadCmdLayout*Command.internalWidth: 12 + *loadCmdLayout.layout: horizontal { \ + 2 \ + filesLoadButton \ + 1 < +inf > \ + filesStatus \ + 2 \ + } + *filesLoadButton.label: Load + *filesStatus.label: +} + + diff --git a/vendor/x11iraf/ximtool/gui.bak/load.tcl b/vendor/x11iraf/ximtool/gui.bak/load.tcl new file mode 100644 index 00000000..425f0226 --- /dev/null +++ b/vendor/x11iraf/ximtool/gui.bak/load.tcl @@ -0,0 +1,247 @@ + +################################################################################ +# Image and objects list display and section +################################################################################ + +proc filesTextHighlight { widget event args } \ +{ + if { $event == "enterNotify" } { + send $widget set displayCaret True + } elseif { $event == "leaveNotify" } { + send $widget set displayCaret False + } +} +foreach w {imtemplateText fnameText z1Value z2Value} { + send $w addEventHandler filesTextHighlight enterWindowMask + send $w addEventHandler filesTextHighlight leaveWindowMask +} + +send rootButton addCallback "send client setLoadOption root" +send homeButton addCallback "send client setLoadOption home" +send upButton addCallback "send client setLoadOption up" +send rescanButton addCallback "send client setLoadOption rescan" + +set label \ + [format "%-35.35s %6s %12s %12s"\ + " Image" "Bitpix" " Size" " Title"] +send imlistLabel set label $label +send imlistLabel "set height 0 ; unmap" + + +# Create the Frames menu on the load panel window. +set loadItems { "Current f.exec \{send frameFrame set label Current\}"} +for {set i 1} {$i <= $MAX_FRAMES} {incr i} { + lappend loadItems "\"\ \ $i\ \ \" f.exec \{send frameFrame set label $i\}" +}; createMenu loadFrames frameFrame $loadItems + + + + + +# Filename pattern callback. +proc setPattern { widget mode pattern args } \ +{ + send client setLoadOption pattern $pattern +} ; send imtemplateText addCallback setPattern + + +# Load options parameter callback. +proc doLoadOptions { param old new } \ +{ + global warnings panel_up + + set val [ join [lrange $new 1 end] " " ] + + switch [lindex $new 0] { + pattern { send imtemplateText set string [format "%s" $val ] } + curdir { send dirLabel set label [format " Directory: %s" $val ] } + newfile { send fnameText set string $val } + status { send filesStatus set label $val + if { ! $panel_up } { send imageTitle set label $val } + send server synchronize + } + warning { if {$warnings} { Wexec server $val } } + gray { send grayscale set on $val } + zscale { send zscale set on $val + if {$val} { + send zrange setSensitive False + } else { + send zrange setSensitive True + } + } + zrange { send zrange set on $val + if {$val} { + foreach w {z1Label z1Value z2Label z2Value} { + send $w setSensitive False + } + } else { + foreach w {z1Label z1Value z2Label z2Value} { + send $w setSensitive True + } + } + } + z1 { send z1Value set string [format "%s" $val ] } + z2 { send z2Value set string [format "%s" $val ] } + nsample { send nsampValue set string [format "%s" $val ] } + } +} ; send loadOptions addCallback doLoadOptions + +# Option utility routines. +proc toggleGraymap args \ +{ + send client setLoadOption gray [ send grayscale get on ] +} ; send grayscale addCallback toggleGraymap + +proc toggleHeaders args \ +{ + if { [send browseHdrs get on] } { + send client setLoadOption headers + send rootButton setSensitive False + send homeButton setSensitive False + send upButton setSensitive False + send rescanButton setSensitive False + send imlistLabel "set height 10 ; map" + } else { + send client setLoadOption rescan + send rootButton setSensitive True + send homeButton setSensitive True + send upButton setSensitive True + send rescanButton setSensitive True + send imlistLabel "set height 0 ; unmap" + } +} ; send browseHdrs addCallback toggleHeaders + +proc toggleZscale args \ +{ + send client setLoadOption zscale [send zscale get on] +} ; send zscale addCallback toggleZscale + +proc toggleZrange args \ +{ + send client setLoadOption zrange [send zrange get on] +} ; send zrange addCallback toggleZrange + +proc setZ1 { widget mode pattern args } \ +{ + send client setLoadOption z1 $pattern +} ; send z1Value addCallback setZ1 + +proc setZ2 { widget mode pattern args } \ +{ + send client setLoadOption z2 $pattern +} ; send z2Value addCallback setZ2 + +proc setNsamp { widget mode pattern args } \ +{ + send client setLoadOption nsample $pattern +} ; send nsampValue addCallback setNsamp + +proc fileLoad { widget mode fname args } \ +{ + loadImage $fname +} ; send fnameText addCallback fileLoad + + + +# Image list selection routines. + +set fileList {} + +proc setFileList { param old new } \ +{ + global fileList + set fileList $new + + # Get the max length of the strings so we can set + # the list columns appropriately. + set max 0 + foreach n $new { + set len [string length $n] + if {$len > $max} { set max $len } + } + + # Optimize the number of columns for the file list. + if {$max > 35} { + send imageList set defaultColumns 1 + } elseif {$max > 21} { + send imageList set defaultColumns 2 + } elseif {$max > 12} { + send imageList set defaultColumns 3 + } elseif {$max > 5} { + send imageList set defaultColumns 4 + } else { + send imageList set defaultColumns 5 + } + + send imageList setList $new resize +}; send filelist addCallback setFileList + +proc flResize args \ +{ + global fileList + send imageList setList $fileList resize +}; send imageList addEventHandler flResize ResizeRedirectMask + +proc flSelectPrint { widget cbtype selections args } \ +{ + if {! [send autoload get on]} \ + return + + foreach selection $selections { + if { [send zrange get on] } { + loadImage [lindex $selection 0] + } else { + loadImage $selection + } + } +}; send imageList addCallback flSelectPrint + + +# Load the named image in the display. +proc loadImage { name } \ +{ + global frame + + set fr [send frameFrame get label] + + if { $fr == "Current" } { set fr $frame } + + if { [fileSetOptions] >= 0 } { + send imagewin setCursorType busy + send client load $name $fr + send imagewin setCursorType idle + send fnameText set string $name + } +} + +# Load button callback. +proc fileLoadB args \ +{ + set fname [send fnameText get string] + if {$fname == ""} { + Wexec client "No image name specified" + } else { + loadImage $fname + } +} ; send filesLoadButton addCallback fileLoadB + + +# Send and selected options to the client before loading the image. +proc fileSetOptions args \ +{ + if { ![send zscale get on] && ![send zrange get on] } { + set z1 [send z1Value get string] + set z2 [send z2Value get string] + + if {$z1 == $z2} { + Wexec client "z1/z2 values are not set properly" + return -1 + } else { + send client setLoadOption z1 $z1 + send client setLoadOption z2 $z2 + } + } + + return 0 +} + diff --git a/vendor/x11iraf/ximtool/gui.bak/magnifier.tcl b/vendor/x11iraf/ximtool/gui.bak/magnifier.tcl new file mode 100644 index 00000000..74e43f94 --- /dev/null +++ b/vendor/x11iraf/ximtool/gui.bak/magnifier.tcl @@ -0,0 +1,576 @@ + +################################################################################ +# MAGNIFIER. A subraster around the cursor in the main image window is +# displayed at a high resolution in a marker (known as the magnifier window) +# within the main image window. +################################################################################ + +set magnifier_x 0 +set magnifier_y 0 +set magnifier_width 0 +set magnifier_height 0 +set mrm_width 0 +set mrm_height 0 + +set magnifier_enable 0 +set magnifier_mag_enable 0 +set magnifier_mapping 0 + +createMenu magzoomMenu imagewin { + { "Zoom Factors" f.title } + { f.dblline } + { "Zoom 1" f.exec "setMagnifierZoom 1" } + { "Zoom 2" f.exec "setMagnifierZoom 2" } + { "Zoom 4" f.exec "setMagnifierZoom 4" } + { "Zoom 8" f.exec "setMagnifierZoom 8" } + { "Zoom 16" f.exec "setMagnifierZoom 16" } +} + +# Magnifier window translations. +set magnifierWinTranslations { \ + !Shift : m_rotateResize() + : m_moveResize() + !Shift : m_raise() m_markpos() + : m_raise() m_markposAdd() + : m_redraw() m_destroyNull() + : m_lower() + : popup(magzoomMenu) + : popdown(magzoomMenu) + !Ctrl m: call(toggleMagnifier) + !Ctrl p: call(togglePanner) + BackSpace: m_deleteDestroy() + Delete: m_deleteDestroy() + : graphics-input() + : track-cursor() call(wcsUpdate,$x,$y) +} + + +# setMagnifier -- Turn the magnifier on or off. + +set magAlreadyOn 0 + +proc setDynamicMagnifier {state} \ +{ + global magAlreadyOn magnifier_enable + + if {$state} { + set magAlreadyOn $magnifier_enable + } + if {$magAlreadyOn} { + return + } else { + setMagnifier $state + } +} + +proc toggleMagnifier args \ +{ + global magnifier_enable + if {$magnifier_enable} { + setMagnifier 0 + } else { + setMagnifier 1 + } +} + + +proc setMagnifier {state} \ +{ + global winWidth winHeight frameWidth frameHeight + global frame magnifier_mapping magnifierWinTranslations magnifierArea + global magnifier_enable magnifier_height + global magnifierGeom magnifier_x magnifier_y magnifier_width + + if {$state} { + if {$magnifier_enable} \ + return + + # Determine where to place the magnifier. + set scale [expr sqrt(double($magnifierArea) / (512 * 512))] + set scaled_width [expr int(512 * $scale) / 2 * 2 + 1] + set scaled_height [expr int(512 * $scale) / 2 * 2 + 1] + set defGeom [format "%sx%s-5+5" $scaled_width $scaled_height] + send imagewin parseGeometry $magnifierGeom $defGeom x y width height + + # Create the main magnifier window (marker). + send imagewin createMarker magnifierWin \ + type rectangle \ + createMode noninteractive \ + width [expr $width / 2] \ + height [expr $height / 2] \ + x [expr $x + $width / 2] \ + y [expr $y + $height / 2] \ + lineColor 8 \ + highlightColor 8 \ + translations $magnifierWinTranslations \ + visible true \ + sensitive true \ + activated true + + # Update the magnifier window position variables so that it comes up + # in the same place the next time. + + send magnifierWin getRect boundary \ + magnifier_x magnifier_y magnifier_width magnifier_height + set magnifierGeom [send imagewin getGeometry \ + $magnifier_x $magnifier_y $magnifier_width $magnifier_height] + + # Register callbacks. + send imagewin addCallback magnifierImagewinResized resize + send resize addCallback magnifierImagewinResized + send magnifierWin addCallback magnifierMovedMapImage moveResize + + send magnifierWin { + addCallback magnifierMoved moveResize; + addCallback magnifierDestroy destroy; + addCallback magnifierWinConstraint constraint; + } + + # Map display frame to magnifier window. + set magnifier_enable 1 + set magnifier_mapping [send imagewin nextMapping] + send imagewin refreshMapping $magnifier_mapping + + # create cross-hair + send imagewin createMarker magPointer \ + type rectangle \ + createMode noninteractive \ + width 3 \ + height 3 \ + lineWidth 3 \ + lineColor green \ + highlightcolor green \ + activated true \ + visible true + + # set its position and size + setMagPointerPosition + magnifierMapImage [expr $winWidth / 2] [expr $winHeight / 2] + + } elseif {$magnifier_enable} { + magnifierDestroy + } +} + + +# magnifierDestroy -- Delete the magnifier. + +proc magnifierDestroy args \ +{ + global magnifier_enable + global magnifier_mapping + + if {$magnifier_enable} { + set magnifier_enable 0 + + send imagewin freeMapping $magnifier_mapping + send imagewin deleteCallback magnifierImagewinResized + send resize deleteCallback magnifierImagewinResized + send frame deleteCallback magnifierMapImage + + if [send server queryObject magnifierWin] { + send magnifierWin destroy + } + if [send server queryObject magPointer] { + send magPointer destroy + } + } +} + + +# magnifierMoved -- Called when the user moves the magnifier window. We need to +# move the region marker to the new window location and record the new location +# so that the window will come up in the same place if closed and reopened. + +proc magnifierMoved {marker event position} \ +{ + global winWidth winHeight magnifierGeom frame + global magnifier_x magnifier_y magnifier_width magnifier_height + + # Move the region marker to the new location. + send client getSource raster sx sy snx sny + + # Update the magnifier window position variables so that it comes up + # in the same place the next time. + + send magnifierWin getRect boundary \ + magnifier_x magnifier_y magnifier_width magnifier_height + set magnifierGeom [send imagewin getGeometry \ + $magnifier_x $magnifier_y $magnifier_width $magnifier_height] +} + + +# magnifierWinConstraint -- Called when the magnifier window is moved, resized, +# or rotated. Constrain the magnifier window to remain within the image window; +# rotation is not permitted. + +proc magnifierWinConstraint {marker event attributes} \ +{ + global winWidth winHeight + global magnifier_width magnifier_height + + set width $magnifier_width + set height $magnifier_height + set constraints [list {}] + + # Check the width and height first as we need these below. + foreach i $attributes { + set new [lindex $i 2] + switch [lindex $i 0] { + width { set ww [expr $winWidth / 2] + if {$new > $ww} { + lappend constraints "width $ww" + set width $ww + } else { + set width $new + } + } + height { set wh [expr $winHeight / 2] + if {$new > $wh} { + lappend constraints "height $wh" + set height $wh + } else { + set height $new + } + } + rotangle { lappend constraints "rotangle 0" + } + } + } + + # Constrain X and Y. + foreach i $attributes { + set new [lindex $i 2] + switch [lindex $i 0] { + x { set pw [expr $width / 2] + if {$new < $pw} { + lappend constraints "x $pw" + } elseif {$new > $winWidth - $pw} { + lappend constraints "x [expr $winWidth - $pw]" + } + } + y { set ph [expr $height / 2] + if {$new < $ph} { + lappend constraints "y $ph" + } elseif {$new > $winHeight - $ph} { + lappend constraints "y [expr $winHeight - $ph]" + } + } + } + } + + return $constraints +} + + +# magnifierRegionConstraint -- Called when the region marker in the magnifier +# window is moved, resized, or rotated. + +proc magnifierRegionConstraint {marker event attributes} \ +{ + global winWidth winHeight + + set constraints [list {}] + send magnifierWin getRect interior p_x p_y p_width p_height + + # Since the magnifier region marker is a box marker x,y and width,height + # will not both change in the same call, so we can process them all + # independently. + + foreach i $attributes { + set new [lindex $i 2] + + switch [lindex $i 0] { + x { set left [expr $p_x + $rwidth + 1] + set right [expr $p_x + $p_width - $rwidth - 1] + if {$new < $left} { + lappend constraints "x $left" + } elseif {$new > $right} { + lappend constraints "x $right" + } + } + y { set top [expr $p_y + $rheight + 1] + set bottom [expr $p_y + $p_height - $rheight - 1] + if {$new < $top} { + lappend constraints "y $top" + } elseif {$new > $bottom} { + lappend constraints "y $bottom" + } + } + width { set ww [expr $winWidth / 2] + if {$new > $ww / 2} { + lappend constraints "width $ww" + } + } + height { set wh [expr $winHeight / 2] + if {$new > $wh / 2} { + lappend constraints "height $wh" + } + } + rotangle { lappend constraints "rotangle 0" + } + } + } + + return $constraints +} + + +# magnifierImagewinResized -- If the display window is resized make the +# magnifier track the corner. + +proc magnifierImagewinResized args \ +{ + global magnifier_enable magnifier_mapping magnifier_height + global magnifierGeom magnifier_x magnifier_y magnifier_width + + if {$magnifier_enable} { + set old_x $magnifier_x; set old_width $magnifier_width + set old_y $magnifier_y; set old_height $magnifier_height + + # Get new location of magnifier window. + set defGeom [format "%sx%s+5+5" $magnifier_width $magnifier_height] + send imagewin parseGeometry $magnifierGeom $defGeom x y width height + + # Reposition the marker. + send magnifierWin "\ + markpos; \ + setAttributes \ + x [expr $x + $width / 2] \ + y [expr $y + $height / 2] \ + width [expr $width / 2] \ + height [expr $height / 2]; \ + redraw" + + # Update the magnifier window position variables so that it comes up + # in the same place the next time. + send magnifierWin getRect boundary \ + magnifier_x magnifier_y magnifier_width magnifier_height + set magnifierGeom [send imagewin getGeometry \ + $magnifier_x $magnifier_y $magnifier_width $magnifier_height] + + # Make sure the magnifier window is on top. + send imagewin raiseMapping $magnifier_mapping + + # Refresh the magnifier window if it did not move. + if {$magnifier_x == $old_x && $magnifier_y == $old_y && + $magnifier_width == $old_width && $magnifier_height == $old_height} { + send imagewin refreshMapping $magnifier_mapping + } + } +} + + +# resetMagnifier -- Reinitialize the magnifier. + +proc resetMagnifier {param old new} \ +{ + global magnifierGeom displayMagnifier + + if {$new == "done"} { + setMagnifier [true $displayMagnifier] + } else { + setMagnifier 0 + if {$new != "startup"} { + set magnifierGeom +5+5 + } + } +}; send initialize addCallback resetMagnifier + + +set last_mag_x [expr $winWidth / 2] +set last_mag_y [expr $winHeight / 2] + +# magnifierMovedMapImage -- Front end to magnifierMapImage, called when +# magnifier window is moved or resized. + +proc magnifierMovedMapImage args \ +{ + global last_mag_x last_mag_y + + magnifierMapImage $last_mag_x $last_mag_y + setMagPointerPosition +} + +# The following code was borrowed from the SAOtng GUI by Eric Mandel of SAO +#-------------------------------------------------------------------------- + +# globals for magnifier +set mag_w 0 +set mag_h 0 + +# +# setMagnifierZoom -- set the zoom factor for the magnifier +# +proc setMagnifierZoom { zoom } \ +{ + global mag_w mag_h + + send magnifierWin getRect boundary \ + magnifier_x magnifier_y magnifier_width magnifier_height + set mag_w [expr int( ( $magnifier_width + $zoom - 1 ) / $zoom) ] + set mag_h [expr int( ( $magnifier_height + $zoom - 1 ) / $zoom) ] + + #set mw [expr int (($magnifier_width - 1) / ($mag_w * 2))] + #if { $mw < 4 } { set mw 4 } + #set mh [expr int (($magnifier_height - 1) / ($mag_h * 2))] + #if { $mh < 4 } { set mh 4 } + #send magPointer "setAttributes width $mw height $mh; redraw" +} + +# magnifierMapImage -- Map the of the current display frame centered on the +# pointer into the magnifier window. Called when the frame changes, the +# pointer moves in the main image window, or (via magnifierMovedMapImage) +# the magnifier window is moved or resized. + +set magnifierROP 0 + +proc magnifierMapImage {x y} \ +{ + global magnifier_enable frame + global last_mag_x last_mag_y + global magnifier_mapping + global winWidth winHeight + global mag_w mag_h + global magnifierROP + + if {!$magnifier_enable || $frame == 0} \ + return + +# if {abs($last_mag_x-$x) != 1 && abs($last_mag_y-$y) != 1} { +# # For efficiency we won't compute the sqrt of the distance but instead +# # just compare the square. Use a threshold of 6 pixels so when we +# # narrow in on the ROI the magnifier is still (mostly) correct. +# set diff [expr (($last_mag_x-$x) * ($last_mag_x-$x)) + \ +# (($last_mag_y-$y) * ($last_mag_y-$y))] +# if {$diff > 36} { +# set last_mag_x $x +# set last_mag_y $y +# return +# } +# } + + set last_mag_x $x + set last_mag_y $y + + send magnifierWin getRect interior dx dy dnx dny + if [send imagewin activeMapping $magnifier_mapping] { + send imagewin raiseMapping $magnifier_mapping + } + # initialize the magnifier zoom factor, if necessary + if { !$mag_w || !$mag_h } { + setMagnifierZoom 4 + } + + set sx [expr $x - $mag_w / 2 ] + set sy [expr $y - $mag_h / 2 ] + + # Constrain the source rectangle within the main image window + # (not overlapping an edge or the magnifier window). + + if {$sx > [expr $dx - $mag_w] && $sx < [expr $dx + $dnx] && + $sy > [expr $dy - $mag_h] && $sy < [expr $dy + $dny] } { + + # The source rectangle would overlap the magnifier window; fix that. + + set dist(l) [expr $sx - ($dx - $mag_w)] + set dist(b) [expr $dy + $dny - $sy] + set dist(r) [expr $dx + $dnx - $sx] + set dist(t) [expr $sy - ($dy - $mag_h)] + + # Put the distances in order. + + foreach j [array names dist] { + set alreadyset($j) 0 + } + + for {set i 0} {$i < 4} {incr i} { + set candidate "" + foreach j [array names dist] { + if {!$alreadyset($j)} { + if {$candidate == ""} { + set candidate $j + set minsofar $dist($j) + } elseif {$dist($j) < $minsofar} { + set candidate $j + set minsofar $dist($j) + } + } + } + set order($i) $candidate + set alreadyset($candidate) 1 + } + + # Try the sides in order, using the first one where there's room. + + for {set i 0} {$i < 4} {incr i} { + if {$order($i) == "l"} { + if {$dx >= $mag_w} { + set sx [expr $dx - $mag_w] + break + } + } elseif {$order($i) == "b"} { + if {$winHeight >= $dy + $dny + $mag_h} { + set sy [expr $dy + $dny] + break + } + } elseif {$order($i) == "r"} { + if {$winWidth >= $dx + $dnx + $mag_w} { + set sx [expr $dx + $dnx] + break + } + } elseif {$order($i) == "t"} { + if {$dy >= $mag_h} { + set sy [expr $dy - $mag_h] + break + } + } + } + } + + # Make sure we don't go beyond an edge of the main window. + + if {$sx < 0} { + set sx 0 + } else { + set sxmax [expr $winWidth - $mag_w] + if {$sx > $sxmax} { + set sx $sxmax + } + } + + if {$sy < 0} { + set sy 0 + } else { + set symax [expr $winHeight - $mag_h] + if {$sy > $symax} { + set sy $symax + } + } + + # Map 32 x 32 centered on pointer in main window. + set err [catch {send imagewin setMapping $magnifier_mapping $magnifierROP \ + 0 pixel $sx $sy $mag_w $mag_h \ + 0 pixel $dx $dy $dnx $dny}] + if { $err != 0 } { + Print "There was a problem setting up the magnifier ... recovering" + } +} + + +# set the position of the magnifier marker in the center of the mag window +proc setMagPointerPosition args \ +{ + global magnifier_enable + + if { !$magnifier_enable } \ + return + + send magnifierWin "getAttributes x x y y" + set xpos [expr $x + 1] + set ypos [expr $y + 1] + + send magPointer "setAttributes x $xpos y $ypos visible true; redraw" +} + + diff --git a/vendor/x11iraf/ximtool/gui.bak/main-old.obj b/vendor/x11iraf/ximtool/gui.bak/main-old.obj new file mode 100644 index 00000000..87617b81 --- /dev/null +++ b/vendor/x11iraf/ximtool/gui.bak/main-old.obj @@ -0,0 +1,51 @@ +#!/usr/local/bin/obmsh +# +# XIMTOOL.GUI -- Default GUI for the Ximtool image display server. +# +# Version 1.3 -- EXPORT VERSION + + +set Version "NOAO/IRAF XImtool Version 1.3EXPORT" + + +reset-server + +set Objects(ximtool) { \ + toplevel Layout display \ +\ + display Group menuGroup\ + menuGroup Layout menubar\ + menubar MenuButton fileButton \ + menubar MenuButton viewButton \ + menubar MenuButton optionsButton \ + menubar Label imageTitle \ + menubar Toggle controlButton \ + menubar Toggle xflipButton \ + menubar Toggle yflipButton \ + menubar Command prevButton \ + menubar MenuButton frameButton \ + menubar Command nextButton \ + menubar Toggle helpButton \ +\ + display Frame imageFrame\ + imageFrame Gterm imagewin\ + display Frame cbarFrame\ + cbarFrame Gterm colorbar\ + display Toggle hcut\ + display Toggle vcut\ + display Frame hcutFrame\ + hcutFrame Gterm hcutPlot\ + display Frame vcutFrame\ + vcutFrame Gterm vcutPlot\ +\ + display Group plotOpts\ + plotOpts Layout poptsLayout\ + poptsLayout TextToggle plotSpeed\ + poptsLayout TextToggle plotAccurate\ + poptsLayout TextToggle plotImgPix\ + poptsLayout Frame optLine\ + poptsLayout TextToggle curJump\ + poptsLayout TextToggle curSmooth\ + poptsLayout TextToggle curTrack\ +} + diff --git a/vendor/x11iraf/ximtool/gui.bak/main-old.res b/vendor/x11iraf/ximtool/gui.bak/main-old.res new file mode 100644 index 00000000..70d95cc0 --- /dev/null +++ b/vendor/x11iraf/ximtool/gui.bak/main-old.res @@ -0,0 +1,422 @@ + + +set Resources(ximtool) { \ + + ! Main image window resources. + ! ------------------------------- + *allowShellResize: True + *beNiceToColormap: False + *menuLabel.foreground: Gold + *markerMenu.foreground: Black + *markerMenu.background: SteelBlue + *markerMenu*SimpleMenu.foreground: Black + *markerMenu*SimpleMenu.background: SteelBlue + *rulerMenu.foreground: Black + *rulerMenu.background: SteelBlue + *rulerMenu*SimpleMenu.foreground: Black + *rulerMenu*SimpleMenu.background: SteelBlue + *rulerMenu.SmeBSB.leftMargin: 16 + *magzoomMenu.foreground: Black + *magzoomMenu.background: SteelBlue + *magzoomMenu*SimpleMenu.foreground: Black + *magzoomMenu*SimpleMenu.background: SteelBlue + *markerColor.SmeBSB.leftMargin: 64 + *markerColor.SmeBSB.rightMargin: 0 + *markerColor.menuLabel.leftMargin: 5 + *markerColor.menuLabel.rightMargin: 5 + *rulerColor.SmeBSB.leftMargin: 64 + *rulerColor.SmeBSB.rightMargin: 0 + *rulerColor.menuLabel.leftMargin: 5 + *rulerColor.menuLabel.rightMargin: 5 + + *ximtool.title: XIMTOOL_VERSION + + *display.borderWidth: 0 + *display.layout: horizontal { \ + -0 \ + vertical { \ + menuGroup < +inf -inf * > \ + -2 \ + vertical { \ + horizontal { \ + imageFrame < +inf -inf * +inf -inf > \ + vcutFrame < * +inf -inf > \ + } \ + horizontal { \ + hcutFrame < +inf -inf * > 1 \ + vertical { 4 plotOpts -4 } \ + } \ + horizontal { \ + cbarFrame < +inf -inf * > \ + hcut 2 vcut \ + } \ + } \ + } \ + -0 \ + } + *hcut.label: H + *hcut.font: *lucida-bold-r*10* + *vcut.label: V + *vcut.font: *lucida-bold-r*10* + + *hcutFrame.frameType: sunken + *hcutFrame.frameWidth: 1 + *hcutFrame.innerOffset: 0 + *hcutFrame.outerOffset: 0 + *hcutPlot.color0: gray77 + *hcutPlot.color1: black + *hcutPlot.color0: darkslategray + *hcutPlot.color1: ivory2 + *hcutPlot.crosshairCursorColor: red + *hcutPlot.width: 512 + *hcutPlot.height: 5 + *hcutPlot.borderWidth: 0 + *hcutPlot.alphaFont1: 6x10 + *hcutPlot.alphaFont2: 6x10 + *hcutPlot.alphaFont3: 6x10 + *hcutPlot.alphaFont4: 6x10 + *hcutPlot.alphaFont5: 6x10 + *hcutPlot.alphaFont6: 6x10 + *hcutPlot.alphaFont7: 6x10 + *hcutPlot.alphaFont8: 6x10 + *hcutPlot.translations: \ + !Ctrl 1: call(cpZoom,1,1,fixed) \n\ + !Ctrl 2: call(cpZoom,2,2,fixed) \n\ + !Ctrl 3: call(cpZoom,3,3,fixed) \n\ + !Ctrl 4: call(cpZoom,4,4,fixed) \n\ + !Ctrl 5: call(cpZoom,5,5,fixed) \n\ + !Ctrl 6: call(cpZoom,6,6,fixed) \n\ + !Ctrl 7: call(cpZoom,7,7,fixed) \n\ + !Ctrl 8: call(cpZoom,8,8,fixed) \n\ + !Ctrl 9: call(cpZoom,9,9,fixed) \n\ + !Ctrl b: call(prevFrame,$name) \n\ + !Ctrl f: call(nextFrame,$name) \n\ + !Ctrl i: call(cpInvert) \n\ + !Ctrl m: call(toggleMagnifier) \n\ + !Ctrl n: call(normalize) \n\ + !Ctrl p: call(togglePanner) \n\ + !Ctrl Alt q: call(Quit) \n\ + !Ctrl r: call(cpRegisterFrames) \n\ + !Ctrl s: call(cpMatchFrames) \n\ + !Ctrl u: call(cpZoom,1,1,fixed) \n\ + Ctrl +: call(cpZoom,2.0,2.0,relative) \n\ + Ctrl -: call(cpZoom,0.5,0.5,relative) \n\ + Ctrl \<: call(cpSetBlinkRate,BRdecrease) \n\ + Ctrl \>: call(cpSetBlinkRate,BRincrease) \n\ + !Alt b: call(toggleBlink) \n\ + !Alt c: call(controlPanel) \n\ + !Alt h: call(Help) \n\ + !Alt i: call(infoPanel) \n\ + !Ctrl Alt f: call(fitFrame) \n\ + !Alt l: call(loadPanel) \n\ + !Alt p: call(printPanel) \n\ + !Alt s: call(savePanel) \n\ + !Alt t: call(tclPanel) \n\ + !: call(makeMarker,$name,$x,$y) m_create() \n\ + : enter-window() \n\ + : leave-window() \n\ + : graphics-input() \n\ + !Alt : call(curtrack_msg,$x,$y) \n\ + : track-cursor() call(hcutWCSUpdate,$x,$y) + + + *vcutFrame.frameType: sunken + *vcutFrame.frameWidth: 1 + *vcutFrame.innerOffset: 0 + *vcutFrame.outerOffset: 0 + *vcutPlot.color0: gray77 + *vcutPlot.color1: black + *vcutPlot.color0: darkslategray + *vcutPlot.color1: ivory2 + *vcutPlot.crosshairCursorColor: red + *vcutPlot.width: 5 + *vcutPlot.height: 512 + *vcutPlot.borderWidth: 0 + *vcutPlot.alphaFont1: 6x10 + *vcutPlot.alphaFont2: 6x10 + *vcutPlot.alphaFont3: 6x10 + *vcutPlot.alphaFont4: 6x10 + *vcutPlot.alphaFont5: 6x10 + *vcutPlot.alphaFont6: 6x10 + *vcutPlot.alphaFont7: 6x10 + *vcutPlot.alphaFont8: 6x10 + *vcutPlot.translations: \ + !Ctrl 1: call(cpZoom,1,1,fixed) \n\ + !Ctrl 2: call(cpZoom,2,2,fixed) \n\ + !Ctrl 3: call(cpZoom,3,3,fixed) \n\ + !Ctrl 4: call(cpZoom,4,4,fixed) \n\ + !Ctrl 5: call(cpZoom,5,5,fixed) \n\ + !Ctrl 6: call(cpZoom,6,6,fixed) \n\ + !Ctrl 7: call(cpZoom,7,7,fixed) \n\ + !Ctrl 8: call(cpZoom,8,8,fixed) \n\ + !Ctrl 9: call(cpZoom,9,9,fixed) \n\ + !Ctrl b: call(prevFrame,$name) \n\ + !Ctrl f: call(nextFrame,$name) \n\ + !Ctrl i: call(cpInvert) \n\ + !Ctrl m: call(toggleMagnifier) \n\ + !Ctrl n: call(normalize) \n\ + !Ctrl p: call(togglePanner) \n\ + !Ctrl Alt q: call(Quit) \n\ + !Ctrl r: call(cpRegisterFrames) \n\ + !Ctrl s: call(cpMatchFrames) \n\ + !Ctrl u: call(cpZoom,1,1,fixed) \n\ + Ctrl +: call(cpZoom,2.0,2.0,relative) \n\ + Ctrl -: call(cpZoom,0.5,0.5,relative) \n\ + Ctrl \<: call(cpSetBlinkRate,BRdecrease) \n\ + Ctrl \>: call(cpSetBlinkRate,BRincrease) \n\ + !Alt b: call(toggleBlink) \n\ + !Alt c: call(controlPanel) \n\ + !Alt h: call(Help) \n\ + !Alt i: call(infoPanel) \n\ + !Ctrl Alt f: call(fitFrame) \n\ + !Alt l: call(loadPanel) \n\ + !Alt p: call(printPanel) \n\ + !Alt s: call(savePanel) \n\ + !Alt t: call(tclPanel) \n\ + !: call(makeMarker,$name,$x,$y) m_create() \n\ + : enter-window() \n\ + : leave-window() \n\ + : graphics-input() \n\ + !Alt : call(curtrack_msg,$x,$y) \n\ + : track-cursor() call(vcutWCSUpdate,$x,$y) + + + *plotOpts.label: Options + !*plotOpts*location: 0 0 105 18 + *plotOpts*location: 0 0 1 18 + *plotOpts.shrinkToFit: True + *plotOpts.outerOffset: 5 + *plotOpts.innerOffset: 3 + *plotOpts.frameWidth: 2 + *plotOpts*TextToggle.offIcon: square0s + *plotOpts*TextToggle.onIcon: square1s + *plotOpts*TextToggle.highlightColor: yellow + *plotOpts*TextToggle.outerOffset: 0 + *plotOpts*TextToggle.frameWidth: 0 + *plotOpts*TextToggle.selectionStyle: multi + *plotOpts*TextToggle.leftMargin: 3 + *plotOpts*TextToggle.alignment: left + + *poptsLayout.borderWidth: 0 + *poptsLayout.layout: vertical { \ + -1 \ + plotSpeed plotAccurate plotImgPix \ + 2 < -2 > \ + horizontal { -4 optLine < +inf -inf * > -4 } \ + 2 < -2 > \ + curJump curSmooth curTrack \ + -1 \ + } + *plotSpeed.label: Better Speed + *plotSpeed.on: True + *plotAccurate.label: Better Accuracy + *plotAccurate.on: False + *plotImgPix.label: Image Pixels + *plotImgPix.on: False + *plotImgPix.sensitive: False + *optLine.height: 2 + *optLine.width: 120 + *optLine.outerOffset: 0 + *optLine.innerOffset: 0 + *optLine.frameWidth: 2 + *optLine.frameType: chiseled + *curJump.label: Jump Cursor + *curJump.on: True + *curSmooth.label: Smooth Cursor + *curSmooth.on: False + *curTrack.label: Graphics Cursors + *curTrack.on: True + + + *menuGroup.label: + *menuGroup.height: 40 + *menuGroup.width: 518 + *menuGroup.frameType: raised + *menuGroup.frameWidth: 2 + *menubar.layout: horizontal { \ + 1 < -1 > \ + fileButton 1 < -1 > viewButton 1 < -1 > optionsButton \ + 1 < -1 > \ + imageTitle < +inff -inff * > \ + 1 < -1 > \ + controlButton 1 < -1 > \ + 1 < -1 > \ + xflipButton 1 < -1 > yflipButton \ + 1 < -1 > \ + prevButton 1 < -1 > frameButton 1 < -1 > nextButton \ + 1 < -1 > \ + helpButton \ + 1 < -1 > \ + } + + *menubar*SimpleMenu.borderColor: Black + *menubar*SimpleMenu.borderWidth: 1 + *menubar*SimpleMenu.foreground: white + *menubar*SimpleMenu.background: SteelBlue + *SmeBSB.vertSpace: 10 + + *SimpleMenu*font: -adobe-times-bold-r-normal-*-12-*-*-*-*-*-iso8859-1 + *fileButton.font: -adobe-times-bold-i-normal-*-12-*-*-*-*-*-iso8859-1 + *optionsButton.font: -adobe-times-bold-i-normal-*-12-*-*-*-*-*-iso8859-1 + *viewButton.font: -adobe-times-bold-i-normal-*-12-*-*-*-*-*-iso8859-1 + + *menubar.width: 518 + *menubar*borderWidth: 0 + *menubar*Command.label: x + *menubar*Command.internalWidth: 0 + *menubar*Command.borderWidth: 0 + *menubar*Toggle.label: x + *menubar*Toggle.internalWidth: 0 + *menubar*Toggle.borderWidth: 0 + + *fileButton.label: File + *fileButton.menuName: fileMenu + *viewButton.label: View + *viewButton.menuName: viewMenu + *optionsButton.label: Options + *optionsButton.menuName: optionsMenu + *imageTitle*font: *times-bold-r*12* + *imageTitle.width: 40 + *imageTitle.height: 20 + *frameButton.menuName: frameMenu + *frameButton.label: 1 + *frameButton.width: 20 + + *Gterm.cmapName: image + *Gterm.basePixel: 64 + *imageFrame.frameType: sunken + *imageFrame.frameWidth: 1 + *imageFrame.outerOffset: 0 + *imageFrame.innerOffset: 0 + *imageFrame.width: 518 + *imageFrame.height: 518 + *cbarFrame.frameType: sunken + *cbarFrame.frameWidth: 1 + *cbarFrame.outerOffset: 0 + *cbarFrame.innerOffset: 0 + *cbarFrame.width: 518 + *imagewin.warpCursor: true + *imagewin.raiseWindow: true + *imagewin.deiconifyWindow: true + *imagewin.ginmodeCursor: circle + *imagewin.ginmodeBlinkInterval: 500 + *imagewin.resizable: true + *imagewin.copyOnResize: false + *imagewin.width: 512 + *imagewin.height: 512 + *imagewin.color8: #7c8498 + *imagewin.color9: steelblue + *imagewin.maxMappings: 64 + *imagewin.borderWidth: 0 + + *imagewin.translations: \ + NoneLeft: call(move_cursor,-1,0) \n\ + NoneDown: call(move_cursor,0,1) \n\ + NoneUp: call(move_cursor,0,-1) \n\ + NoneRight: call(move_cursor,1,0) \n\ + !Shift Left: call(move_cursor,-10,0) \n\ + !Shift Down: call(move_cursor,0,10) \n\ + !Shift Up: call(move_cursor,0,-10) \n\ + !Shift Right: call(move_cursor,10,0) \n\ + !Ctrl h: call(move_cursor,-1,0) \n\ + !Ctrl j: call(move_cursor,0,1) \n\ + !Ctrl k: call(move_cursor,0,-1) \n\ + !Ctrl l: call(move_cursor,1,0) \n\ + !Ctrl Shift h: call(move_cursor,-10,0) \n\ + !Ctrl Shift j: call(move_cursor,0,10) \n\ + !Ctrl Shift k: call(move_cursor,0,-10) \n\ + !Ctrl Shift l: call(move_cursor,10,0) \n\ + !Alt 1: call(cpSetFrame,frame1) \n\ + !Alt 2: call(cpSetFrame,frame2) \n\ + !Alt 3: call(cpSetFrame,frame3) \n\ + !Alt 4: call(cpSetFrame,frame4) \n\ + !Ctrl 1: call(cpZoom,1,1,fixed) \n\ + !Ctrl 2: call(cpZoom,2,2,fixed) \n\ + !Ctrl 3: call(cpZoom,3,3,fixed) \n\ + !Ctrl 4: call(cpZoom,4,4,fixed) \n\ + !Ctrl 5: call(cpZoom,5,5,fixed) \n\ + !Ctrl 6: call(cpZoom,6,6,fixed) \n\ + !Ctrl 7: call(cpZoom,7,7,fixed) \n\ + !Ctrl 8: call(cpZoom,8,8,fixed) \n\ + !Ctrl 9: call(cpZoom,9,9,fixed) \n\ + !Ctrl Left: call(moveFrame,-1,0) \n\ + !Ctrl Down: call(moveFrame,0,1) \n\ + !Ctrl Up: call(moveFrame,0,-1) \n\ + !Ctrl Right: call(moveFrame,1,0) \n\ + !Ctrl Alt Left: call(moveFrame,-0.5,0) \n\ + !Ctrl Alt Down: call(moveFrame,0,0.5) \n\ + !Ctrl Alt Up: call(moveFrame,0,-0.5) \n\ + !Ctrl Alt Right: call(moveFrame,0.5,0) \n\ + !Ctrl a: call(toggleAutoReg) \n\ + !Ctrl b: call(prevFrame,$name) \n\ + !Ctrl c: call(cpZoomAction,centerFrame) \n\ + !Ctrl f: call(nextFrame,$name) \n\ + !Ctrl i: call(cpInvert) \n\ + !Ctrl m: call(toggleMagnifier) \n\ + !Ctrl n: call(normalize) \n\ + !Ctrl o: call(offset,$x,$y) \n\ + !Ctrl p: call(togglePanner) \n\ + !Ctrl Alt q: call(Quit) \n\ + !Ctrl r: call(cpRegisterFrames) \n\ + !Ctrl s: call(cpMatchFrames) \n\ + !Ctrl t: call(tileFramesToggle) \n\ + !Ctrl u: call(cpZoom,1,1,fixed) \n\ + !Ctrl x: call(cpFrameAction,flipX) \n\ + !Ctrl y: call(cpFrameAction,flipY) \n\ + !Ctrl Alt =: call(Print) \n\ + Ctrl +: call(cpZoom,2.0,2.0,relative) \n\ + Ctrl -: call(cpZoom,0.5,0.5,relative) \n\ + Ctrl \<: call(cpSetBlinkRate,BRdecrease) \n\ + Ctrl \>: call(cpSetBlinkRate,BRincrease) \n\ + Ctrl \[: call(setCtrBoxSize,$x,$y,-1) \n\ + Ctrl \]: call(setCtrBoxSize,$x,$y,1) \n\ + !Ctrl 0: call(centroid,$x,$y,peak) \n\ + !Ctrl Alt 0: call(centroid,$x,$y,min) \n\ + !Alt b: call(toggleBlink) \n\ + !Alt c: call(controlPanel) \n\ + !Ctrl Alt f: call(fitFrame) \n\ + !Alt h: call(Help) \n\ + !Alt i: call(infoPanel) \n\ + !Alt l: call(loadPanel) \n\ + !Alt p: call(printPanel) \n\ + !Alt s: call(savePanel) \n\ + !Alt t: call(tclPanel) \n\ + !: call(makeMarker,$name,$x,$y) m_create() \n\ + !Shift : crosshair(on) \n\ + !Shift : crosshair(on) \n\ + !Shift: crosshair(off) \n\ + !: crosshair(off) \n\ + !: call(zoom,$x,$y) \n\ + !: call(windowColormap,$x,$y) \n\ + !: call(windowColormap,$x,$y) \n\ + !Ctrl : call(makeRuler,$name,$x,$y) \n\ + !Ctrl : track-cursor() call(wcsUpdate,$x,$y) call(magnifierMapImage,$x,$y) call(resizeRuler,$x,$y,0) \n\ + !Ctrl : call(deleteRuler,$x,$y) \n\ + : enter-window() \n\ + : leave-window() \n\ + : graphics-input() \n\ + !Alt : call(curtrack_msg,$x,$y) \n\ + : track-cursor() call(wcsUpdate,$x,$y) call(magnifierMapImage,$x,$y) + + +! The following translations can be used to enable windowing of the +! individual RGB components of the colormap. It's not very useful but +! included here for those that may wish to use it. +!-------------------------------------------------------------------------- +! !Ctrl : call(windowRGB,1,$x,$y,0) \n\ +! !Ctrl : call(windowRGB,1,$x,$y,0) \n\ +! !Ctrl : call(windowRGB,1,$x,$y,1) \n\ +! !Ctrl : call(windowRGB,2,$x,$y,0) \n\ +! !Ctrl : call(windowRGB,2,$x,$y,0) \n\ +! !Ctrl : call(windowRGB,2,$x,$y,1) \n\ +! !Ctrl : call(windowRGB,3,$x,$y,0) \n\ +! !Ctrl : call(windowRGB,3,$x,$y,0) \n\ +! !Ctrl : call(windowRGB,3,$x,$y,1) \n\ + + *colorbar.borderWidth: 0 + *colorbar.maxRasters: 1 + *colorbar.maxMappings: 1 + *colorbar.width: 50 + *colorbar.height: 17 +} + diff --git a/vendor/x11iraf/ximtool/gui.bak/main.obj b/vendor/x11iraf/ximtool/gui.bak/main.obj new file mode 100644 index 00000000..c866908f --- /dev/null +++ b/vendor/x11iraf/ximtool/gui.bak/main.obj @@ -0,0 +1,85 @@ +#!/usr/local/bin/obmsh +# +# XIMTOOL-ALT.GUI -- Default GUI for the Ximtool-alt image display server. +# +# Version 1.3 -- EXPORT VERSION + +set Version "NOAO/IRAF XImtool Version 1.3EXPORT" + +reset-server + +set Objects(ximtool) { \ + toplevel Layout display\ +\ + display Group menuGroup\ + menuGroup Layout menubar\ + menubar MenuButton fileButton\ + menubar MenuButton viewButton\ + menubar MenuButton optionsButton\ + menubar Label imageTitle\ + menubar Toggle mXflipButton\ + menubar Toggle mYflipButton\ + menubar Command mPrevButton\ + menubar MenuButton mFrameButton\ + menubar Command mNextButton\ + menubar Toggle toolButton\ + menubar Toggle panelButton\ +\ + display Layout toolbar\ + toolbar Command tbZoomIn\ + toolbar Command tbZoom0\ + toolbar Command tbZoomOut\ + toolbar Command tbInvert\ + toolbar Command tbNormalize\ + toolbar Command tbMatchLUT\ + toolbar Toggle tbAutoReg\ + toolbar Command tbRegister\ + toolbar Command tbCenter\ + toolbar Command tbBlinkDec\ + toolbar Toggle tbBlink\ + toolbar Command tbBlinkInc\ + toolbar Toggle xflipButton\ + toolbar Toggle yflipButton\ + toolbar Toggle tbTile\ + toolbar Toggle tbCompass\ + toolbar Command prevButton\ + toolbar MenuButton frameButton\ + toolbar Command nextButton\ +\ + display Frame imageFrame\ + imageFrame Gterm imagewin\ + display Frame cbarFrame\ + cbarFrame Gterm colorbar\ + display Toggle hcut\ + display Toggle vcut\ + display Frame hcutFrame\ + hcutFrame Gterm hcutPlot\ + display Frame vcutFrame\ + vcutFrame Gterm vcutPlot\ +\ + display Group plotOpts\ + plotOpts Layout poptsLayout\ + poptsLayout TextToggle plotSpeed\ + poptsLayout TextToggle plotAccurate\ + poptsLayout TextToggle plotImgPix\ + poptsLayout Frame optLine\ + poptsLayout TextToggle curJump\ + poptsLayout TextToggle curSmooth\ + poptsLayout TextToggle curTrack\ +\ + display Layout panelbar\ + panelbar Toggle pbDisplayP\ + panelbar Toggle pbLoadP\ + panelbar Toggle pbSaveP\ + panelbar Toggle pbPrintP\ + panelbar Toggle pbInfoP\ + panelbar Toggle pbTileP\ + panelbar Toggle pbCoordP\ + panelbar Toggle pbPanM\ + panelbar Toggle pbMagM\ + panelbar Toggle pbWcsM\ + panelbar Toggle pbIsm\ + panelbar Toggle helpButton\ + panelbar Command pbQuit\ +} + diff --git a/vendor/x11iraf/ximtool/gui.bak/main.res b/vendor/x11iraf/ximtool/gui.bak/main.res new file mode 100644 index 00000000..3f1ccb84 --- /dev/null +++ b/vendor/x11iraf/ximtool/gui.bak/main.res @@ -0,0 +1,521 @@ + +set Resources(ximtool) { \ + + ! Main image window resources. + ! ------------------------------- + *allowShellResize: True + *beNiceToColormap: False + *menuLabel.foreground: Gold + *markerMenu.foreground: White + *rulerMenu.foreground: White + *display.imagewin.markerMenu.foreground: White + *display.imagewin.rulerMenu.foreground: White + *markerMenu.background: SteelBlue + *markerMenu*SimpleMenu.foreground: White + *markerMenu*SimpleMenu.background: SteelBlue + *rulerMenu.background: SteelBlue + *rulerMenu*SimpleMenu.foreground: White + *rulerMenu*SimpleMenu.background: SteelBlue + *rulerColor.SmeBSB.leftMargin: 16 + *magzoomMenu.foreground: White + *magzoomMenu.background: SteelBlue + *magzoomMenu*SimpleMenu.foreground: White + *magzoomMenu*SimpleMenu.background: SteelBlue + *markerColor.SmeBSB.leftMargin: 64 + *markerColor.SmeBSB.rightMargin: 0 + *markerColor.menuLabel.leftMargin: 5 + *markerColor.menuLabel.rightMargin: 5 + *rulerColor.SmeBSB.leftMargin: 64 + *rulerColor.SmeBSB.rightMargin: 0 + *rulerColor.menuLabel.leftMargin: 5 + *rulerColor.menuLabel.rightMargin: 5 + + *ximtool.title: XIMTOOL_VERSION + + *display.borderWidth: 0 + *display.layout: horizontal { \ + -0 \ + vertical { \ + menuGroup < +inf -inf * > \ + horizontal { 1 toolbar < +inf -inf * > 1 } \ + 1 < -1 > \ + horizontal { 1 panelbar < +inf -inf * > 1 } \ + 1 < -1 > \ + vertical { \ + horizontal { \ + imageFrame < +inf -inf * +inf -inf > \ + vcutFrame < * +inf -inf > \ + } \ + horizontal { \ + hcutFrame < +inf -inf * > 1 \ + vertical { 4 plotOpts -4 } \ + } \ + horizontal { \ + cbarFrame < +inf -inf * > \ + hcut 2 vcut \ + } \ + } \ + } \ + -0 \ + } + *hcut.label: H + *hcut.font: *lucida-bold-r*10* + *vcut.label: V + *vcut.font: *lucida-bold-r*10* + + *hcutFrame.frameType: sunken + *hcutFrame.frameWidth: 1 + *hcutFrame.innerOffset: 0 + *hcutFrame.outerOffset: 0 + *hcutPlot.color0: gray77 + *hcutPlot.color1: black + *hcutPlot.color0: darkslategray + *hcutPlot.color1: ivory2 + *hcutPlot.crosshairCursorColor: red + *hcutPlot.width: 512 + *hcutPlot.height: 5 + *hcutPlot.borderWidth: 0 + *hcutPlot.alphaFont1: 6x10 + *hcutPlot.alphaFont2: 6x10 + *hcutPlot.alphaFont3: 6x10 + *hcutPlot.alphaFont4: 6x10 + *hcutPlot.alphaFont5: 6x10 + *hcutPlot.alphaFont6: 6x10 + *hcutPlot.alphaFont7: 6x10 + *hcutPlot.alphaFont8: 6x10 + *hcutPlot.translations: \ + !Ctrl 1: call(cpZoom,1,1,fixed) \n\ + !Ctrl 2: call(cpZoom,2,2,fixed) \n\ + !Ctrl 3: call(cpZoom,3,3,fixed) \n\ + !Ctrl 4: call(cpZoom,4,4,fixed) \n\ + !Ctrl 5: call(cpZoom,5,5,fixed) \n\ + !Ctrl 6: call(cpZoom,6,6,fixed) \n\ + !Ctrl 7: call(cpZoom,7,7,fixed) \n\ + !Ctrl 8: call(cpZoom,8,8,fixed) \n\ + !Ctrl 9: call(cpZoom,9,9,fixed) \n\ + !Ctrl b: call(prevFrame,$name) \n\ + !Ctrl f: call(nextFrame,$name) \n\ + !Ctrl i: call(cpInvert) \n\ + !Ctrl m: call(toggleMagnifier) \n\ + !Ctrl n: call(normalize) \n\ + !Ctrl p: call(togglePanner) \n\ + !Ctrl Alt q: call(Quit) \n\ + !Ctrl r: call(cpRegisterFrames) \n\ + !Ctrl s: call(cpMatchFrames) \n\ + !Ctrl u: call(cpZoom,1,1,fixed) \n\ + Ctrl +: call(cpZoom,2.0,2.0,relative) \n\ + Ctrl -: call(cpZoom,0.5,0.5,relative) \n\ + Ctrl \<: call(cpSetBlinkRate,BRdecrease) \n\ + Ctrl \>: call(cpSetBlinkRate,BRincrease) \n\ + !Alt b: call(toggleBlink) \n\ + !Alt c: call(controlPanel) \n\ + !Alt h: call(Help) \n\ + !Alt i: call(infoPanel) \n\ + !Ctrl Alt f: call(fitFrame) \n\ + !Alt l: call(loadPanel) \n\ + !Alt p: call(printPanel) \n\ + !Alt s: call(savePanel) \n\ + !Alt t: call(tclPanel) \n\ + !: call(makeMarker,$name,$x,$y) m_create() \n\ + : enter-window() \n\ + : leave-window() \n\ + : graphics-input() \n\ + !Alt : call(curtrack_msg,$x,$y) \n\ + : track-cursor() call(hcutWCSUpdate,$x,$y) + + + *vcutFrame.frameType: sunken + *vcutFrame.frameWidth: 1 + *vcutFrame.innerOffset: 0 + *vcutFrame.outerOffset: 0 + *vcutPlot.color0: gray77 + *vcutPlot.color1: black + *vcutPlot.color0: darkslategray + *vcutPlot.color1: ivory2 + *vcutPlot.crosshairCursorColor: red + *vcutPlot.width: 5 + *vcutPlot.height: 512 + *vcutPlot.borderWidth: 0 + *vcutPlot.alphaFont1: 6x10 + *vcutPlot.alphaFont2: 6x10 + *vcutPlot.alphaFont3: 6x10 + *vcutPlot.alphaFont4: 6x10 + *vcutPlot.alphaFont5: 6x10 + *vcutPlot.alphaFont6: 6x10 + *vcutPlot.alphaFont7: 6x10 + *vcutPlot.alphaFont8: 6x10 + *vcutPlot.translations: \ + !Ctrl 1: call(cpZoom,1,1,fixed) \n\ + !Ctrl 2: call(cpZoom,2,2,fixed) \n\ + !Ctrl 3: call(cpZoom,3,3,fixed) \n\ + !Ctrl 4: call(cpZoom,4,4,fixed) \n\ + !Ctrl 5: call(cpZoom,5,5,fixed) \n\ + !Ctrl 6: call(cpZoom,6,6,fixed) \n\ + !Ctrl 7: call(cpZoom,7,7,fixed) \n\ + !Ctrl 8: call(cpZoom,8,8,fixed) \n\ + !Ctrl 9: call(cpZoom,9,9,fixed) \n\ + !Ctrl b: call(prevFrame,$name) \n\ + !Ctrl f: call(nextFrame,$name) \n\ + !Ctrl i: call(cpInvert) \n\ + !Ctrl m: call(toggleMagnifier) \n\ + !Ctrl n: call(normalize) \n\ + !Ctrl p: call(togglePanner) \n\ + !Ctrl Alt q: call(Quit) \n\ + !Ctrl r: call(cpRegisterFrames) \n\ + !Ctrl s: call(cpMatchFrames) \n\ + !Ctrl u: call(cpZoom,1,1,fixed) \n\ + Ctrl +: call(cpZoom,2.0,2.0,relative) \n\ + Ctrl -: call(cpZoom,0.5,0.5,relative) \n\ + Ctrl \<: call(cpSetBlinkRate,BRdecrease) \n\ + Ctrl \>: call(cpSetBlinkRate,BRincrease) \n\ + !Alt b: call(toggleBlink) \n\ + !Alt c: call(controlPanel) \n\ + !Alt h: call(Help) \n\ + !Alt i: call(infoPanel) \n\ + !Ctrl Alt f: call(fitFrame) \n\ + !Alt l: call(loadPanel) \n\ + !Alt p: call(printPanel) \n\ + !Alt s: call(savePanel) \n\ + !Alt t: call(tclPanel) \n\ + !: call(makeMarker,$name,$x,$y) m_create() \n\ + : enter-window() \n\ + : leave-window() \n\ + : graphics-input() \n\ + !Alt : call(curtrack_msg,$x,$y) \n\ + : track-cursor() call(vcutWCSUpdate,$x,$y) + + + *plotOpts.label: Options + !*plotOpts*location: 0 0 105 18 + *plotOpts*location: 0 0 1 18 + *plotOpts.shrinkToFit: True + *plotOpts.outerOffset: 5 + *plotOpts.innerOffset: 3 + *plotOpts.frameWidth: 2 + *plotOpts*TextToggle.offIcon: square0s + *plotOpts*TextToggle.onIcon: square1s + *plotOpts*TextToggle.highlightColor: yellow + *plotOpts*TextToggle.outerOffset: 0 + *plotOpts*TextToggle.frameWidth: 0 + *plotOpts*TextToggle.selectionStyle: multi + *plotOpts*TextToggle.leftMargin: 3 + *plotOpts*TextToggle.alignment: left + + *poptsLayout.borderWidth: 0 + *poptsLayout.layout: vertical { \ + -1 \ + plotSpeed plotAccurate plotImgPix \ + 2 < -2 > \ + horizontal { -4 optLine < +inf -inf * > -4 } \ + 2 < -2 > \ + curJump curSmooth curTrack \ + -1 \ + } + *plotSpeed.label: Better Speed + *plotSpeed.on: True + *plotAccurate.label: Better Accuracy + *plotAccurate.on: False + *plotImgPix.label: Image Pixels + *plotImgPix.on: False + *plotImgPix.sensitive: False + *optLine.height: 2 + *optLine.width: 120 + *optLine.outerOffset: 0 + *optLine.innerOffset: 0 + *optLine.frameWidth: 2 + *optLine.frameType: chiseled + *curJump.label: Jump Cursor + *curJump.on: True + *curSmooth.label: Smooth Cursor + *curSmooth.on: False + *curTrack.label: Graphics Cursors + *curTrack.on: True + + + *menuGroup.label: + *menuGroup.height: 40 + *menuGroup.width: 518 + *menuGroup.frameType: raised + *menuGroup.frameWidth: 2 + *menubar.layout: horizontal { \ + 2 < -2 > \ + fileButton 1 < -1 > viewButton 1 < -1 > optionsButton \ + 1 < -1 > \ + imageTitle < +inff -inff * > \ + 1 < -1 > \ + mXflipButton 1 < -1 > mYflipButton \ + 1 < -1 > \ + mPrevButton 1 < -1 > mFrameButton 1 < -1 > mNextButton \ + 1 < -1 > \ + toolButton 1 < -1 > panelButton \ + 2 < -2 > \ + } + + *menubar*SimpleMenu.foreground: Black + *menubar*SimpleMenu.borderWidth: 1 + *menubar*SimpleMenu.foreground: White + *menubar*SimpleMenu.background: SteelBlue + *SmeBSB.vertSpace: 10 + + *menubar.width: 518 + *menubar*borderWidth: 0 + *menubar*Command.internalWidth: 0 + *menubar*Command.borderWidth: 0 + *menubar*Toggle.label: x + *menubar*Toggle.internalWidth: 0 + *menubar*Toggle.borderWidth: 0 + + *toolbar.layout: horizontal { \ + tbZoomIn < +inf -inf * > 1 < -1 > \ + tbZoom0 < +inf -inf * > 1 < -1 > \ + tbZoomOut < +inf -inf * > 1 < -1 > \ + tbInvert < +inf -inf * > 1 < -1 > \ + tbNormalize < +inf -inf * > 1 < -1 > \ + tbMatchLUT < +inf -inf * > 1 < -1 > \ + tbAutoReg < +inf -inf * > 1 < -1 > \ + tbRegister < +inf -inf * > 1 < -1 > \ + tbCenter < +inf -inf * > 1 < -1 > \ + tbBlinkDec < +inf -inf * > 1 < -1 > \ + tbBlink < +inf -inf * > 1 < -1 > \ + tbBlinkInc < +inf -inf * > 1 < -1 > \ + xflipButton < +inf -inf * > 1 < -1 > \ + yflipButton < +inf -inf * > 1 < -1 > \ + tbCompass < +inf -inf * > 1 < -1 > \ + tbTile < +inf -inf * > 1 < -1 > \ + prevButton < +inf -inf * > 1 < -1 > \ + frameButton < +inf -inf * > 1 < -1 > \ + nextButton < +inf -inf * > 1 < -1 > \ + } + *toolbar.width: 518 + *toolbar.height: 25 + *toolbar*borderWidth: 0 + *toolbar*Command.internalWidth: 3 + *toolbar*Command.borderWidth: 0 + *toolbar*Toggle.internalWidth: 2 + *toolbar*Toggle.borderWidth: 0 + + *panelbar.layout: horizontal { \ + pbDisplayP < +inf -inf * > 1 < -1 > \ + pbPrintP < +inf -inf * > 1 < -1 > \ + pbLoadP < +inf -inf * > 1 < -1 > \ + pbSaveP < +inf -inf * > 1 < -1 > \ + pbInfoP < +inf -inf * > 1 < -1 > \ + pbTileP < +inf -inf * > 1 < -1 > \ + pbCoordP < +inf -inf * > 1 < -1 > \ + pbPanM < +inf -inf * > 1 < -1 > \ + pbMagM < +inf -inf * > 1 < -1 > \ + pbWcsM < +inf -inf * > 1 < -1 > \ + pbIsm < +inf -inf * > 1 < -1 > \ + helpButton < +inf -inf * > 1 < -1 > \ + pbQuit < +inf -inf * > 1 < -1 > \ + } + *panelbar*SimpleMenu.borderColor: Black + *panelbar*SimpleMenu.borderWidth: 1 + *SmeBSB.vertSpace: 10 + + *panelbar.width: 12 + *panelbar.height: 25 + *panelbar*borderWidth: 0 + *panelbar*Label.internalWidth: 4 + *panelbar*Label.borderWidth: 0 + *panelbar*Command.internalWidth: 4 + *panelbar*Command.borderWidth: 0 + *panelbar*Toggle.internalWidth: 3 + *panelbar*Toggle.borderWidth: 0 + + *pbLoadP.label: Load + *pbDisplayP.label: Display + *pbSaveP.label: Save + *pbPrintP.label: Print + *pbInfoP.label: Info + *pbTileP.label: Tile + *pbCoordP.label: Coords + *pbPanM.label: Pan + *pbPanM.state: 1 + *pbMagM.label: Mag + *pbMagM.state: 0 + *pbWcsM.label: WCS + *pbWcsM.state: 1 + *pbIsm.label: ISM + *pbIsm.state: 0 + *helpButton.label: + + *fileButton.label: File + *fileButton.menuName: fileMenu + *viewButton.label: View + *viewButton.menuName: viewMenu + *optionsButton.label: Options + *optionsButton.menuName: optionsMenu + *toolButton.label: + *toolButton.state: 0 + *panelButton.label: + *panelButton.state: 0 + *imageTitle*font: *times-bold-r*12* + *imageTitle.width: 40 + *imageTitle.height: 20 + *frameButton.menuName: frameMenu + *frameButton.label: 1 + *frameButton.width: 20 + *mFrameButton.menuName: mFrameMenu + *mFrameButton.label: 1 + *mFrameButton.width: 20 + *pbQuit.label: Quit + *tbZoom0.label: Mag + *tbBlink.label: Blink + *tbBlink.internalWidth: 3 + *tbCenter.label: Cntr + *tbAutoReg.label: AReg + *tbRegister.label: Reg + *tbInvert.label: Inv + *tbNormalize.label: Norm + *tbMatchLUT.label: Match + + *SimpleMenu*font: -adobe-times-bold-r-normal-*-12-*-*-*-*-*-iso8859-1 + *fileButton.font: -adobe-times-bold-i-normal-*-12-*-*-*-*-*-iso8859-1 + *optionsButton.font: -adobe-times-bold-i-normal-*-12-*-*-*-*-*-iso8859-1 + *viewButton.font: -adobe-times-bold-i-normal-*-12-*-*-*-*-*-iso8859-1 + *panelbar*font: -adobe-times-bold-i-normal-*-12-*-*-*-*-*-iso8859-1 + *toolbar*font: -adobe-times-bold-i-normal-*-12-*-*-*-*-*-iso8859-1 + + *Gterm.cmapName: image + *Gterm.basePixel: 64 + *imageFrame.frameType: sunken + *imageFrame.frameWidth: 1 + *imageFrame.outerOffset: 0 + *imageFrame.innerOffset: 0 + *imageFrame.width: 518 + *imageFrame.height: 518 + *cbarFrame.frameType: sunken + *cbarFrame.frameWidth: 1 + *cbarFrame.outerOffset: 0 + *cbarFrame.innerOffset: 0 + *cbarFrame.width: 518 + *imagewin.warpCursor: true + *imagewin.raiseWindow: true + *imagewin.deiconifyWindow: true + *imagewin.idleCursor: crosshair + *imagewin.ginmodeCursor: circle + *imagewin.ginmodeBlinkInterval: 500 + *imagewin.resizable: true + *imagewin.copyOnResize: false + *imagewin.width: 512 + *imagewin.height: 512 + *imagewin.color8: #7c8498 + *imagewin.color9: SteelBlue + *imagewin.maxMappings: 64 + *imagewin.borderWidth: 0 + + + *imagewin.translations: \ + NoneLeft: call(move_cursor,-1,0) \n\ + NoneDown: call(move_cursor,0,1) \n\ + NoneUp: call(move_cursor,0,-1) \n\ + NoneRight: call(move_cursor,1,0) \n\ + !Shift Left: call(move_cursor,-10,0) \n\ + !Shift Down: call(move_cursor,0,10) \n\ + !Shift Up: call(move_cursor,0,-10) \n\ + !Shift Right: call(move_cursor,10,0) \n\ + !Ctrl h: call(move_cursor,-1,0) \n\ + !Ctrl j: call(move_cursor,0,1) \n\ + !Ctrl k: call(move_cursor,0,-1) \n\ + !Ctrl l: call(move_cursor,1,0) \n\ + !Ctrl Shift h: call(move_cursor,-10,0) \n\ + !Ctrl Shift j: call(move_cursor,0,10) \n\ + !Ctrl Shift k: call(move_cursor,0,-10) \n\ + !Ctrl Shift l: call(move_cursor,10,0) \n\ + !Ctrl Left: call(moveFrame,-1,0) \n\ + !Ctrl Down: call(moveFrame,0,1) \n\ + !Ctrl Up: call(moveFrame,0,-1) \n\ + !Ctrl Right: call(moveFrame,1,0) \n\ + !Ctrl Alt Left: call(moveFrame,-0.5,0) \n\ + !Ctrl Alt Down: call(moveFrame,0,0.5) \n\ + !Ctrl Alt Up: call(moveFrame,0,-0.5) \n\ + !Ctrl Alt Right: call(moveFrame,0.5,0) \n\ + !Alt 1: call(cpSetFrame,frame1) \n\ + !Alt 2: call(cpSetFrame,frame2) \n\ + !Alt 3: call(cpSetFrame,frame3) \n\ + !Alt 4: call(cpSetFrame,frame4) \n\ + !Ctrl 1: call(cpZoom,1,1,fixed) \n\ + !Ctrl 2: call(cpZoom,2,2,fixed) \n\ + !Ctrl 3: call(cpZoom,3,3,fixed) \n\ + !Ctrl 4: call(cpZoom,4,4,fixed) \n\ + !Ctrl 5: call(cpZoom,5,5,fixed) \n\ + !Ctrl 6: call(cpZoom,6,6,fixed) \n\ + !Ctrl 7: call(cpZoom,7,7,fixed) \n\ + !Ctrl 8: call(cpZoom,8,8,fixed) \n\ + !Ctrl 9: call(cpZoom,9,9,fixed) \n\ + !Ctrl a: call(tbToggleAutoReg) \n\ + !Ctrl b: call(prevFrame,$name) \n\ + !Ctrl c: call(cpZoomAction,centerFrame) \n\ + !Ctrl f: call(nextFrame,$name) \n\ + !Ctrl i: call(cpInvert) \n\ + !Ctrl m: call(toggleMagnifier) \n\ + !Ctrl n: call(normalize) \n\ + !Ctrl o: call(offset,$x,$y) \n\ + !Ctrl p: call(togglePanner) \n\ + !Ctrl Alt q: call(Quit) \n\ + !Ctrl r: call(cpRegisterFrames) \n\ + !Ctrl s: call(cpMatchFrames) \n\ + !Ctrl t: call(tbTileFramesToggle) \n\ + !Ctrl u: call(cpZoom,1,1,fixed) \n\ + !Ctrl x: call(cpFrameAction,flipX) \n\ + !Ctrl y: call(cpFrameAction,flipY) \n\ + Ctrl +: call(cpZoom,2.0,2.0,relative) \n\ + Ctrl -: call(cpZoom,0.5,0.5,relative) \n\ + !Ctrl Alt =: call(Print) \n\ + Ctrl \<: call(cpSetBlinkRate,BRdecrease) \n\ + Ctrl \>: call(cpSetBlinkRate,BRincrease) \n\ + Ctrl \[: call(setCtrBoxSize,$x,$y,-1) \n\ + Ctrl \]: call(setCtrBoxSize,$x,$y,1) \n\ + !Ctrl 0: call(centroid,$x,$y,peak) \n\ + !Ctrl Alt 0: call(centroid,$x,$y,min) \n\ + !Alt b: call(toggleBlink) \n\ + !Alt c: call(controlPanel) \n\ + !Alt h: call(Help) \n\ + !Alt i: call(infoPanel) \n\ + !Ctrl Alt f: call(fitFrame) \n\ + !Alt l: call(loadPanel) \n\ + !Alt p: call(printPanel) \n\ + !Alt s: call(savePanel) \n\ + !Alt t: call(tclPanel) \n\ + !Shift: call(setDynamicMagnifier,1) \n\ + !Shift: call(setDynamicMagnifier,0) \n\ + !: call(makeMarker,$name,$x,$y) m_create() \n\ + !Shift : crosshair(on) \n\ + !Shift : crosshair(on) \n\ + !Shift : crosshair(off) \n\ + !: crosshair(off) \n\ + !: call(zoom,$x,$y) \n\ + !: call(windowColormap,$x,$y) \n\ + !: call(windowColormap,$x,$y) \n\ + !Ctrl : call(makeRuler,$name,$x,$y) \n\ + !Ctrl : track-cursor() call(wcsUpdate,$x,$y) call(magnifierMapImage,$x,$y) call(resizeRuler,$x,$y,0) \n\ + !Ctrl : call(deleteRuler,$x,$y) \n\ + : enter-window() \n\ + : leave-window() \n\ + : graphics-input() \n\ + !Alt : call(curtrack_msg,$x,$y) \n\ + : track-cursor() call(wcsUpdate,$x,$y) call(magnifierMapImage,$x,$y) + +! The following translations can be used to enable windowing of the +! individual RGB components of the colormap. It's not very useful but +! included here for those that may wish to use it. +!-------------------------------------------------------------------------- +! !Ctrl : call(windowRGB,1,$x,$y,0) \n\ +! !Ctrl : call(windowRGB,1,$x,$y,0) \n\ +! !Ctrl : call(windowRGB,1,$x,$y,1) \n\ +! !Ctrl : call(windowRGB,2,$x,$y,0) \n\ +! !Ctrl : call(windowRGB,2,$x,$y,0) \n\ +! !Ctrl : call(windowRGB,2,$x,$y,1) \n\ +! !Ctrl : call(windowRGB,3,$x,$y,0) \n\ +! !Ctrl : call(windowRGB,3,$x,$y,0) \n\ +! !Ctrl : call(windowRGB,3,$x,$y,1) \n\ + + + *colorbar.maxRasters: 1 + *colorbar.maxMappings: 1 + *colorbar.height: 17 + *colorbar.width: 50 + *colorbar.borderWidth: 0 +} + diff --git a/vendor/x11iraf/ximtool/gui.bak/mkgui b/vendor/x11iraf/ximtool/gui.bak/mkgui new file mode 100755 index 00000000..76f9f288 --- /dev/null +++ b/vendor/x11iraf/ximtool/gui.bak/mkgui @@ -0,0 +1,81 @@ +#!/bin/csh -f + +set old = 0 +set file = ximtool.gui + +old: + +echo -n "Building $file ..." +if ($old == 0) then + cat main.obj > $file +else + cat main-old.obj > $file +endif +cat panel.obj >> $file +cat param.obj >> $file +cat help.obj >> $file +cat blink.obj >> $file +cat hdr.obj >> $file +cat pixtab.obj >> $file +cat tcl.obj >> $file +cat warn.obj >> $file + +cat global.res >> $file +if ($old == 0) then + cat main.res >> $file +else + cat main-old.res >> $file +endif +cat panel.res >> $file +cat display.res >> $file +cat print.res >> $file +cat info.res >> $file +cat load.res >> $file +cat save.res >> $file +cat tile.res >> $file +cat wcs.res >> $file +cat blink.res >> $file +cat hdr.res >> $file +cat pixtab.res >> $file +cat help.res >> $file +cat tcl.res >> $file +cat warn.res >> $file +cat resources.res >> $file + +cat boot.tcl >> $file +cat global.tcl >> $file +cat plots.tcl >> $file +cat imagewin.tcl >> $file +cat func.tcl >> $file +cat panel.tcl >> $file +cat magnifier.tcl >> $file +cat panner.tcl >> $file +cat print.tcl >> $file +cat info.tcl >> $file +cat load.tcl >> $file +cat save.tcl >> $file +cat tile.tcl >> $file +cat wcs.tcl >> $file +cat compass.tcl >> $file +cat rulers.tcl >> $file +cat help.tcl >> $file +cat hdr.tcl >> $file +cat pixtab.tcl >> $file +cat warn.tcl >> $file +cat tcl.tcl >> $file +cat ism.tcl >> $file +if ($old == 0) then + cat toolbars.tcl >> $file +endif + +echo "Done" + +if ($old == 0) then + set old = 1 + set file = ximtool-old.gui + goto old +endif + +echo -n "Installing files ..." +mv *.gui ../ +echo "Done" diff --git a/vendor/x11iraf/ximtool/gui.bak/panel.obj b/vendor/x11iraf/ximtool/gui.bak/panel.obj new file mode 100644 index 00000000..26157cef --- /dev/null +++ b/vendor/x11iraf/ximtool/gui.bak/panel.obj @@ -0,0 +1,412 @@ + +set Objects(panelShell) { \ + toplevel TopLevelShell panelShell\ + panelShell Layout panel\ +\ + panel Frame panelMenuFrame\ + panelMenuFrame Layout panelMenuBar\ + panelMenuBar Command panelHelp\ + panelMenuBar Command panelClose\ +\ + panel Frame tabFrame\ + tabFrame Tabs panelTabs\ + panelTabs Frame display_panel\ + panelTabs Frame print_panel\ + panelTabs Frame load_panel\ + panelTabs Frame save_panel\ + panelTabs Frame info_panel\ + panelTabs Frame tile_panel\ + panelTabs Frame wcs_panel\ +\ +\ + display_panel Layout controlPanel\ + controlPanel Group viewBox\ + controlPanel Group enhancementBox\ + controlPanel Group blinkBox\ + controlPanel Group optionsBox\ + controlPanel Frame controlBox\ +\ + viewBox Layout view\ + view Group frameSelect\ + frameSelect Layout frameBox\ + frameBox Box frlistBox\ + frlistBox Viewport framePort\ + framePort Layout frameList\ + frameList TextToggle frame1\ + frameList TextToggle frame2\ + frameList TextToggle frame3\ + frameList TextToggle frame4\ + frameList TextToggle frame5\ + frameList TextToggle frame6\ + frameList TextToggle frame7\ + frameList TextToggle frame8\ + frameList TextToggle frame9\ + frameList TextToggle frame10\ + frameList TextToggle frame11\ + frameList TextToggle frame12\ + frameList TextToggle frame13\ + frameList TextToggle frame14\ + frameList TextToggle frame15\ + frameList TextToggle frame16\ + frameBox Command prevFrame\ + frameBox Command nextFrame\ + view Frame frameDataBox\ + frameDataBox TextBox frameData\ + view Group zoomBox\ + zoomBox Layout zoom\ + zoom TextButton toggleZoom\ + zoom TextButton zoomIn\ + zoom Command x1\ + zoom Command z2\ + zoom Command z3\ + zoom Command z4\ + zoom Command z5\ + zoom Command z8\ + zoom TextButton zoomOut\ + zoom TextButton centerFrame\ + zoom Command d2\ + zoom Command d3\ + zoom Command d4\ + zoom Command d5\ + zoom Command d8\ + view Layout viewButtons\ + viewButtons Command aspect\ + viewButtons Command flipX\ + viewButtons Command flipY\ + viewButtons Command flipXY\ + viewButtons Command clearFrame\ + viewButtons Command fitFrame\ +\ + enhancementBox Layout enhance\ + enhance Frame colorlistFrame\ + colorlistFrame Viewport colorlistView\ + colorlistView MultiList colorlist\ + enhance Frame colordataFrame\ + colordataFrame TextBox colordata\ + enhance Label contrastLabel\ + enhance Slider2d contrastSlider\ + enhance Label brightnessLabel\ + enhance Slider2d brightnessSlider\ + enhance Command invertButton\ + enhance Command optimizeButton\ +\ + blinkBox Layout blink\ + blink Label blinkFramesLabel\ + blink Command blinkFrame1\ + blink Command blinkFrame2\ + blink Command blinkFrame3\ + blink Command blinkFrame4\ + blink Toggle blinkPanel\ + blink Command blinkReset\ + blink Label blinkRateLabel\ + blink Frame BRframe\ + BRframe Layout BRlayout\ + BRlayout Arrow BRdecrease\ + BRlayout TextBox BRtext\ + BRlayout Arrow BRincrease\ + blink Command registerButton\ + blink Command matchButton\ + blink TextToggle blinkButton\ + blink TextToggle autoregButton\ +\ + optionsBox TextToggle pannerButton\ + optionsBox TextToggle magnifierButton\ + optionsBox TextToggle coordsBoxButton\ + optionsBox TextToggle autoscaleButton\ + optionsBox TextToggle antialiasButton\ + optionsBox TextToggle tileFramesButton\ + optionsBox TextToggle warningsButton\ + optionsBox TextToggle peakupButton\ +\ + controlBox Layout control\ + control Command initializeButton\ + control Command normalizeButton\ +\ +\ + print_panel Layout printLayout\ +\ + printLayout Group printCmdGroup\ + printLayout Group optGroup\ + printLayout Group cmdGroup\ +\ + printCmdGroup Layout printCmdLayout\ + printCmdLayout Layout labelLayout\ + labelLayout Label toLabel\ + labelLayout Label printerLabel\ + printCmdLayout Layout inputLayout\ + inputLayout TextToggle toPrinter\ + inputLayout TextToggle toFile\ + inputLayout Frame printcmdFrame\ + printcmdFrame AsciiText printcmd\ +\ + optGroup Layout optLayout\ + optLayout Group epsPageGroup\ + optLayout Group optionsGroup\ + optLayout Group printColorGroup\ + optLayout Group printerGroup\ + optLayout Group annOptsGroup\ +\ + epsPageGroup Layout epsPage\ + epsPage Label epsOrientLabel\ + epsPage TextToggle epsPortButton\ + epsPage TextToggle epsLandButton\ + epsPage TextToggle epsSquareButton\ + epsPage Label epsSizeLabel\ + epsPage TextToggle epsLetterButton\ + epsPage TextToggle epsLegalButton\ + epsPage TextToggle epsA4Button\ + epsPage TextToggle epsB5Button\ + epsPage Label epsScaleLabel\ + epsPage Frame ScaleFrame\ + ScaleFrame Layout ScaleLayout\ + ScaleLayout Arrow SCdecrease\ + ScaleLayout TextBox SCtext\ + ScaleLayout Arrow SCincrease\ +\ + optionsGroup Layout options\ + options TextToggle epsscaleButton\ + options TextToggle autorotateButton\ + options TextToggle aspectButton\ + options TextToggle compressButton\ +\ + annOptsGroup Layout annOpts\ + annOpts TextToggle annotateButton\ + annOpts TextToggle colorbarButton\ + annOpts TextToggle titleButton\ + annOpts TextToggle bordersButton\ + annOpts Label titleLabel\ + annOpts Frame titleFrame\ + titleFrame AsciiText titleString\ +\ + printColorGroup Layout printColor\ + printColor TextToggle prGrayButton\ + printColor TextToggle prPseudoButton\ + printColor TextToggle prRGBButton\ +\ + printerGroup Layout printers\ + printers Frame printlistFrame\ + printlistFrame Viewport printlistView\ + printlistView MultiList printlist\ +\ + cmdGroup Layout cmdLayout\ + cmdLayout Command okayPrint\ + cmdLayout Label printStatus\ +\ +\ + load_panel Layout filesLayout\ + filesLayout Group imlistGroup\ + imlistGroup Layout imlistLayout\ + imlistLayout Command rootButton\ + imlistLayout Command homeButton\ + imlistLayout Command upButton\ + imlistLayout Command rescanButton\ + imlistLayout Label dirLabel\ + imlistLayout Label fnameLabel\ + imlistLayout Frame filnamFrame\ + filnamFrame AsciiText fnameText\ + imlistLayout Label imtemplateLabel\ + imlistLayout Frame imtemplateFrame\ + imtemplateFrame AsciiText imtemplateText\ + imlistLayout Label imlistLabel\ + imlistLayout Frame imlistFrame\ + imlistFrame Viewport imlistView\ + imlistView MultiList imageList\ +\ + filesLayout Group imoptsGroup\ + imoptsGroup Layout imoptsLayout\ + imoptsLayout TextToggle grayscale\ + imoptsLayout TextToggle autoload\ + imoptsLayout TextToggle browseHdrs\ + imoptsLayout TextToggle zscale\ + imoptsLayout TextToggle zrange\ + imoptsLayout Label z1Label\ + imoptsLayout Frame z1Frame\ + z1Frame AsciiText z1Value\ + imoptsLayout Label z2Label\ + imoptsLayout Frame z2Frame\ + z2Frame AsciiText z2Value\ + imoptsLayout Label nsampLabel\ + imoptsLayout Frame nsampFrame\ + nsampFrame AsciiText nsampValue\ + imoptsLayout Label frameLabel\ + imoptsLayout MenuButton frameFrame\ +\ + filesLayout Group loadCmdGroup\ + loadCmdGroup Layout loadCmdLayout\ + loadCmdLayout Command filesLoadButton\ + loadCmdLayout Label filesStatus\ +\ +\ + save_panel Layout saveLayout\ + saveLayout Group saveNameGroup\ + saveNameGroup Layout saveNameLayout\ + saveNameLayout Label saveLabel\ + saveNameLayout Frame fnameFrame\ + fnameFrame AsciiText saveFile\ +\ + saveLayout Group saveOptGroup\ + saveOptGroup Layout saveOptLayout\ + saveOptLayout Group fmtGroup\ + saveOptLayout Group saveColorGroup\ + saveOptLayout Frame saveDataBox\ + saveDataBox TextBox saveData\ +\ + fmtGroup Layout formats\ + formats TextToggle rasButton\ + formats TextToggle gifButton\ + formats TextToggle jpegButton\ + formats TextToggle tiffButton\ + formats TextToggle fitsButton\ + formats TextToggle epsButton\ + formats TextToggle x11Button\ + formats TextToggle rawButton\ +\ + saveColorGroup Layout saveColor\ + saveColor TextToggle svGrayButton\ + saveColor TextToggle svPseudoButton\ + saveColor TextToggle svRGBButton\ +\ + saveLayout Group saveCmdGroup\ + saveCmdGroup Layout saveCmdLayout\ + saveCmdLayout Command okaySave\ + saveCmdLayout Label saveStatus\ +\ +\ + info_panel Layout infoLayout\ + infoLayout Group infoBox\ + infoBox Layout infoBoxL\ + infoBoxL Frame infoFrame\ + infoFrame AsciiText infoText\ + infoBoxL TextToggle infoOptFr\ + infoBoxL TextToggle infoOptWCS\ + infoBoxL TextToggle infoOptSvr\ + infoBoxL TextToggle infoOptClients\ + infoBoxL TextToggle infoOptIsm\ + infoBoxL TextToggle infoOptFB\ +\ +\ + wcs_panel Layout wcsLayout\ + wcsLayout Group wcsGroup\ + wcsGroup Layout wcsBox\ +\ + wcsBox Frame wcsFrame\ + wcsFrame Layout wcsText\ + wcsText AsciiText wtName\ + wcsText AsciiText wtTitle\ + wcsText AsciiText wtFBCfg\ + wcsText AsciiText wtIPixval\ + wcsText AsciiText wtSPixval\ + wcsText AsciiText wtBPixval\ + wcsText AsciiText wtWcs1\ + wcsText AsciiText wtWcs2\ + wcsText AsciiText wtWcs3\ + wcsText AsciiText wtWcs4\ +\ + wcsBox TextToggle ismToggle\ + wcsBox TextToggle pixelTable\ + wcsBox TextToggle imageHeader\ + wcsBox TextToggle compass\ + wcsBox TextToggle wcsOptions\ +\ +\ + wcsLayout Group wcsOptGroup\ + wcsOptGroup Layout wcsOptLayout\ +\ + wcsOptLayout Group wcsCoords\ + wcsCoords Layout wcLayout\ + wcLayout Label wcTitle\ + wcLayout Frame wcLine\ + wcLayout Label wlWcs1\ + wcLayout Label wlWcs2\ + wcLayout Label wlWcs3\ + wcLayout Label wlWcs4\ + wcLayout MenuButton sysWcs1\ + wcLayout MenuButton sysWcs2\ + wcLayout MenuButton sysWcs3\ + wcLayout MenuButton sysWcs4\ + wcLayout MenuButton fmtWcs1\ + wcLayout MenuButton fmtWcs2\ + wcLayout MenuButton fmtWcs3\ + wcLayout MenuButton fmtWcs4\ + wcLayout TextToggle wpWcs1\ + wcLayout TextToggle wpWcs2\ + wcLayout TextToggle wpWcs3\ + wcLayout TextToggle wpWcs4\ + wcLayout TextToggle wiWcs1\ + wcLayout TextToggle wiWcs2\ + wcLayout TextToggle wiWcs3\ + wcLayout TextToggle wiWcs4\ +\ + wcsOptLayout Group wcsOpts\ + wcsOpts Layout woLayout\ + woLayout TextToggle woptLabels\ + woLayout TextToggle woptTitles\ + woLayout TextToggle woptFBinfo\ + woLayout TextToggle woptBPM\ +\ + wcsOptLayout Group wcsIsmGroup\ + wcsIsmGroup Layout wcsIsmLayout\ + wcsIsmLayout Label wcsIsmLabel\ + wcsIsmLayout Frame wcsIsmFrame\ + wcsIsmFrame AsciiText wcsIsmCmd\ + wcsIsmLayout Command wcsIsmInit\ +\ +\ + tile_panel Frame tileOpts\ + tileOpts Layout toptLayout\ + toptLayout Group tFramesG\ + toptLayout Group tileMode\ + tileMode TextToggle tileDisabled\ + tileMode TextToggle tileManual\ + tileMode TextToggle tileBest\ + tileMode TextToggle tileSquare\ + tileMode TextToggle tileHorizontal\ + tileMode TextToggle tileVertical\ + tileMode TextToggle tileRow\ + tileMode TextToggle tileCol\ + toptLayout Group userOrientG\ + toptLayout Group fillStyle\ + fillStyle TextToggle byCols\ + fillStyle TextToggle bottomUp\ + toptLayout Group tileLabel\ + tileLabel TextToggle labelImname\ + tileLabel TextToggle labelTitles\ + tileLabel TextToggle labelFrames\ + toptLayout Frame geomFrame\ + geomFrame Label tileGeometry\ +\ + userOrientG Layout userOrientL\ + userOrientL Label nrowLab\ + userOrientL Frame nrFrame\ + nrFrame Layout nrLayout\ + nrLayout Arrow nrdecrease\ + nrLayout Label nrtext\ + nrLayout Arrow nrincrease\ + userOrientL Label ncolLab\ + userOrientL Frame ncFrame\ + ncFrame Layout ncLayout\ + ncLayout Arrow ncdecrease\ + ncLayout Label nctext\ + ncLayout Arrow ncincrease\ +\ + tFramesG Layout tFrames\ + tFrames Command tAll\ + tFrames Command tNone\ + tFrames Toggle tFrame1\ + tFrames Toggle tFrame2\ + tFrames Toggle tFrame3\ + tFrames Toggle tFrame4\ + tFrames Toggle tFrame5\ + tFrames Toggle tFrame6\ + tFrames Toggle tFrame7\ + tFrames Toggle tFrame8\ + tFrames Toggle tFrame9\ + tFrames Toggle tFrame10\ + tFrames Toggle tFrame11\ + tFrames Toggle tFrame12\ + tFrames Toggle tFrame13\ + tFrames Toggle tFrame14\ + tFrames Toggle tFrame15\ + tFrames Toggle tFrame16\ +} + diff --git a/vendor/x11iraf/ximtool/gui.bak/panel.res b/vendor/x11iraf/ximtool/gui.bak/panel.res new file mode 100644 index 00000000..52e27826 --- /dev/null +++ b/vendor/x11iraf/ximtool/gui.bak/panel.res @@ -0,0 +1,69 @@ + +set Resources(panelShell) { \ + + !================================ + ! Main Integrated Control Panel + !================================ + *panelShell.title: XImtool Control Panel + *panelShell.geometry: 480x630 + *panelShell.maxWidth: 480 + *panelShell.minWidth: 480 + *panelTabs.internalHeight: 3 + *panelTabs.internalWidth: 10 + + *Text*font: -*-helvetica-medium-r-normal-*-12-*-iso8859-1 + *TextBox*font: -*-helvetica-medium-r-normal-*-12-*-iso8859-1 + *List.font: -*-helvetica-medium-r-normal-*-12-*-iso8859-1 + *MultiList.font: -*-helvetica-medium-r-normal-*-12-*-iso8859-1 + *TextButton.font: -*-helvetica-medium-r-normal-*-12-*-iso8859-1 + *TextToggle.font: -*-helvetica-medium-r-normal-*-12-*-iso8859-1 + + *display_panel.tabLabel: Display + *display_panel.innerOffset: 5 + *print_panel.tabLabel: Print + *print_panel.innerOffset: 5 + *load_panel.tabLabel: Load + *load_panel.innerOffset: 5 + *save_panel.tabLabel: Save + *save_panel.innerOffset: 5 + *info_panel.tabLabel: Info + *info_panel.innerOffset: 5 + *tile_panel.tabLabel: Tile + *tile_panel.innerOffset: 5 + *wcs_panel.tabLabel: Coords + *wcs_panel.innerOffset: 5 + + *panelMenuBar*borderWidth: 0 + *panelMenuBar*Command.internalHeight: 4 + *panelMenuBar*Command.internalWidth: 15 + *panelMenuBar.layout: vertical { \ + 5 < -5 > \ + horizontal { \ + 10 < +inf -10> \ + panelHelp \ + 3 < -3 > \ + panelClose \ + 7 < -7 > \ + } \ + 5 < -5 > \ + } + + *panelHelp.label: Help + *panelClose.label: Dismiss + + + *tabFrame.outerOffset: 3 + *tabFrame.innerOffset: 0 + *tabFrame.frameWidth: 0 + *tabFrame.frameType: chiseled + *panelMenuFrame.outerOffset: 0 + *panelMenuFrame.innerOffset: 1 + *panelMenuFrame.frameType: raised + *panelMenuFrame.frameWidth: 2 + *panel.layout: vertical { \ + panelMenuFrame < +inf -inf * > \ + 3 \ + horizontal { tabFrame < +inf -inf * +inf -inf> } \ + } +} + diff --git a/vendor/x11iraf/ximtool/gui.bak/panel.tcl b/vendor/x11iraf/ximtool/gui.bak/panel.tcl new file mode 100644 index 00000000..0c873862 --- /dev/null +++ b/vendor/x11iraf/ximtool/gui.bak/panel.tcl @@ -0,0 +1,833 @@ + +################################################################################ +# MAIN CONTROL PANEL +################################################################################ + + +# Global control panel buttons. +# ------------------------------- +proc cpInitialize args \ +{ + send imagewin setCursorType busy + send client initialize + send imagewin setCursorType idle +} +send initializeButton addCallback cpInitialize +send normalizeButton addCallback normalize + +# Temporarily deactivate some buttons. +send optimizeButton setSensitive false + +#----------------------------------------------------------------------------- + +foreach i $frames {set saveView($i) "1 1"} + +send prevFrame set bitmap larrow +send nextFrame set bitmap rarrow +send contrastLabel set bitmap contrast +send brightnessLabel set bitmap brightness +send contrastSlider resizeThumb 0.1 1.0 +send brightnessSlider resizeThumb 0.1 1.0 + + +# panel -- Toggle control panel display. +proc panel args \ +{ + global panel_up + if {$panel_up} { + send panelShell unmap + set panel_up 0 + } else { + send panelShell map + set panel_up 1 + } +} + +proc pbTracePanel {name element op} \ +{ + catch { + upvar $name panel_up + send controlButton set state $panel_up + } +} ; trace variable panel_up w pbTracePanel + + +# resetPanel -- Calling during startup or in an initialize, to reset things. +proc resetPanel {param old new} \ +{ + global frame nframes frames + global displayPanner displayMagnifier displayCoords + global blinkFrames warnings peakCentroid + + switch $new { + startup { + } + restart { foreach i $frames { + send frame$frame set on 0 + } + + # Initialize to hide the extra frames. + send frlistBox set width 30 + } + done { if {$frame} { + send frame$frame set on 1 + } + + cpResetBlink + set button 1 + foreach i {1 2 3 4} { + send blinkFrame$button set label $i + incr button + } + for {set i 1} {$i <= 16} {incr i} { + send brFrame$i set label $i + } + + cpResetEnhance + send pannerButton set on [true $displayPanner] + send magnifierButton set on [true $displayMagnifier] + send coordsBoxButton set on [true $displayCoords] + send warningsButton set on $warnings + send peakupButton set on [true $peakCentroid] + } + } +}; send initialize addCallback resetPanel + + + +# Control Panel Tabs widget procedures. +#---------------------------------------- + +set cpTabs { display_panel print_panel load_panel save_panel \ + info_panel wcs_panel tile_panel} +set tabTop "display_panel" + + +# Resize the control panel depending on the Tab selected. +proc cpResizeCB { widget event a b c d e args } \ +{ + global tabTop fileList + + # Handle only the first exposure event generated. + if { $a == 0 && $b == 0 && $c == 0 && $d == 0 && $e == 0 } { + set tabTop $widget + + switch $widget { + display_panel { send panel set height 595 } + print_panel { send panel set height 545 } + load_panel { send panel set height 485 + if { [send browseHdrs get on] } { + send imageList setList $fileList resize + } else { + send client setLoadOption rescan + } + } + save_panel { send panel set height 325 } + info_panel { send panel set height 380 } + tile_panel { send panel set height 405 } + wcs_panel { setCoordPanelHeight } + } + } +} ; foreach w $cpTabs { send $w addEventHandler cpResizeCB exposureMask } + + +proc panelDismiss args \ +{ + global panel_up + send panelShell unmap + set panel_up 0 +} ; send panelClose addCallback panelDismiss + + +proc panelTabToggle { panel args } \ +{ + global tabTop panel_up + + if {$tabTop == $panel && $panel_up} { + send panelShell unmap + send $widget set state 0 + set panel_up 0 + return + } + + # Special cases for each panel. + if {$panel == "load_panel"} { + send client setLoadOption rescan + } + + send panelTabs setTop $panel + set tabTop $panel + + # Now fire it up if it's not already open. + if {$panel_up == 0} { + send panelShell map + set panel_up 1 + } +} + +proc displayPanel args { panelTabToggle display_panel } +proc infoPanel args { panelTabToggle info_panel } +proc loadPanel args { panelTabToggle load_panel } +proc savePanel args { panelTabToggle save_panel } +proc printPanel args { panelTabToggle print_panel } +proc tilePanel args { panelTabToggle tile_panel } +proc wcsPanel args { panelTabToggle wcs_panel } + + + + +# Frame selection. +# ------------------------------- +proc cpSetFrame {widget args} \ +{ + send $widget set on 0 + send client setFrame [send $widget get label] +} + +proc cpFrameChanged {param old new} \ +{ + global frameCache + + if {$old > 0} { + send frame$old set on 0 + } + if {$new > 0} { + send frame$new set on 1 + } + + # The first time we request frame 5 or higher reset + # the extra frame buttons on the control panel to make + # them visible. + if {$new >= 5} { + send frlistBox set width 49 + } + + # Update the header panel object list. + catch { + # Only update when the header panel is open. + if {[info exists frameCache($new)] && [send imageHeader get on]} { + setHdrObjMenu $new + getHeader [lindex $frameCache($new) 0] [lindex $frameCache($new) 1] + } + } +} + +send prevFrame addCallback prevFrame +send nextFrame addCallback nextFrame +send frame addCallback cpFrameChanged +for {set i 1} {$i <= 16} {incr i} {send frame$i addCallback cpSetFrame} + +# Initialize to hide the extra frames. +send frlistBox set width 30 + +proc blinkPanelCB { widget type state args } \ +{ + if {$state} { + send blink_panel map + } else { + send blink_panel unmap + } +} ; send blinkPanel addCallback blinkPanelCB + +proc blinkPanelClose args \ +{ + send blink_panel unmap + send blinkPanel set state 0 +} ; send brClose addCallback blinkPanelClose + + + +# Frame buttons. +proc cpFrameAction {widget args} \ +{ + global frameZoomX frameZoomY frame + switch $widget { + aspect { set xmag $frameZoomX($frame) + set ymag $frameZoomY($frame) + set zoom [expr round (($xmag + $ymag) / 2.0)] + cpZoom $zoom $zoom fixed + } + flipX { send client flip x } + flipY { send client flip y } + flipXY { send client flip x y } + clearFrame { clearFrame } + fitFrame { fitFrame } + } +} +foreach widget {aspect flipX flipY flipXY clearFrame fitFrame} { + send $widget addCallback cpFrameAction +} + +# clearFrame -- Clear the current display frame. +proc clearFrame args \ +{ + global warnings + if {$warnings} { + Wexec client \ + "Clearing the frame will destroy\n\ + all data in the frame" \ + clearFrame + } else { + send client clearFrame + } +} + +# fitFrame -- Resize the display window to fit the frame buffer. +proc fitFrame args \ +{ + global frameWidth frameHeight winWidth winHeight + set dw [expr [send display get width] - $winWidth] + set dh [expr [send display get height] - $winHeight] + send display "resize [expr $frameWidth + $dw] [expr $frameHeight + $dh]" +} + +proc initFitFrame { param old new } \ +{ + if { [lindex $new 0] == "resize"} { + fitFrame + } + pannerMapImage init +}; send frameFit addCallback initFitFrame + + + +# Zoom and pan buttons. +# ------------------------------- +proc cpZoomAction {widget args} \ +{ + global frameWidth frameHeight + + switch $widget { + x1 { cpZoom 1 1 fixed } + z2 { cpZoom 2 2 fixed } + z3 { cpZoom 3 3 fixed } + z4 { cpZoom 4 4 fixed } + z5 { cpZoom 5 5 fixed } + z8 { cpZoom 8 8 fixed } + + d2 { cpZoom [expr 1.0/2] [expr 1.0/2] fixed } + d3 { cpZoom [expr 1.0/3] [expr 1.0/3] fixed } + d4 { cpZoom [expr 1.0/4] [expr 1.0/4] fixed } + d5 { cpZoom [expr 1.0/5] [expr 1.0/5] fixed } + d8 { cpZoom [expr 1.0/8] [expr 1.0/8] fixed } + + zoomIn { cpZoom 2.0 2.0 relative } + zoomOut { cpZoom 0.5 0.5 relative } + + centerFrame { send client pan \ + [expr $frameWidth/2.0] \ + [expr $frameHeight/2.0] + } + toggleZoom { toggleZoom } + } +} + +proc cpZoom {zoom_x zoom_y mode} \ +{ + global frameZoomX frameZoomY zoomindex frame + global frameOffsetX frameOffsetY frameCenterX frameCenterY + + if {$mode == "fixed"} { + #send client zoom $zoom_x $zoom_y + send client zoomAbs $zoom_x $zoom_y \ + $frameCenterX($frame) $frameCenterY($frame) \ + $frameOffsetX($frame) $frameOffsetY($frame) + } else { + #send client zoom \ + # [expr $frameZoomX($frame) * $zoom_x] \ + # [expr $frameZoomY($frame) * $zoom_y] + send client zoomAbs \ + [expr $frameZoomX($frame) * $zoom_x] \ + [expr $frameZoomY($frame) * $zoom_y] \ + $frameCenterX($frame) $frameCenterY($frame) \ + $frameOffsetX($frame) $frameOffsetY($frame) + } + + set zoomindex($frame) 0 +} + +proc toggleZoom args \ +{ + global frameZoomX frameZoomY frameCenterX frameCenterY + global frameWidth frameHeight saveView frame + + if {$frameZoomX($frame) != 1 && $frameZoomY($frame) != 1} { + set saveView($frame) \ + "$frameZoomX($frame) $frameZoomY($frame) \ + $frameCenterX($frame) $frameCenterY($frame)" + send client zoom 1 1 \ + [expr $frameWidth/2.0] \ + [expr $frameHeight/2.0] + } else { + send client zoom $saveView($frame) + } +} + +foreach widget { toggleZoom centerFrame zoomIn zoomOut \ + x1 z2 z3 z4 z5 z8 d2 d3 d4 d5 d8 } { + send $widget addCallback cpZoomAction +} + +# Frame data display. +# ------------------------------- +set cpFrame 0 +set cpXcen 0 +set cpYcen 0 +set cpXmag 0 +set cpYmag 0 +set cpXscale 0 +set cpYscale 0 +set cpXoff 0 +set cpYoff 0 + +proc cpDisplayFrameData {name old new} \ +{ + global cpFrame cpXcen cpYcen cpXoff cpYoff + global cpXmag cpYmag cpXscale cpYscale + + set update 0 + switch $name { + frame { if {$new != $cpFrame} { + set cpFrame $new + set update 1 + } + } + frameView { # Parse the frameView input. + set xmag [lindex $new 0]; set ymag [lindex $new 1] + set xcen [lindex $new 2]; set ycen [lindex $new 3] + set xnorm [lindex $new 4]; set ynorm [lindex $new 5] + set xoff [lindex $new 6]; set yoff [lindex $new 7] + + # We need client coords and the overall scale factors. + set text [send client encodewcs $xcen $ycen] + set xcen [lindex $text 0] + set ycen [lindex $text 1] + set xscale [expr $xmag * $xnorm] + set yscale [expr $ymag * $ynorm] + + if {$xcen != $cpXcen || $ycen != $cpYcen || + $xmag != $cpXmag || $ymag != $cpYmag || + $xoff != $cpXoff || $yoff != $cpYoff || + $xscale != $cpXscale || $yscale != $cpYscale} { + + set cpXcen $xcen; set cpXscale $xscale + set cpYcen $ycen; set cpYscale $yscale + set cpXmag $xmag; set cpXoff $xoff; + set cpYmag $ymag; set cpYoff $yoff; + set update 1 + } + } + } + + if {$update} { + set header [format "-- Frame %d --" $cpFrame] + set center [format "X center: %0.1f\nY center: %0.1f" $cpXcen $cpYcen] + if {int($cpXmag) >= 10} { + set zoom1 [format " X zoom: %0.1f" $cpXmag] + set zoom2 [format " Y zoom: %0.1f" $cpYmag] + } else { + set zoom1 [format "X zoom: %0.1f" $cpXmag] + set zoom2 [format "Y zoom: %0.1f" $cpYmag] + } + if {int($cpXscale) >= 10} { + set scale1 [format "X scale: %0.1f" $cpXscale] + set scale2 [format "Y scale: %0.1f" $cpYscale] + } else { + set scale1 [format "X scale: %0.2f" $cpXscale] + set scale2 [format "Y scale: %0.2f" $cpYscale] + } + set offset [format " Offset: (%0.1f,%0.1f)" $cpXoff $cpYoff] + + send frameData set label [format "%s\n%s\n%s\n%s\n%s\n%s\n%s" \ + $header $center $scale1 $scale2 $zoom1 $zoom2 $offset \ + ] + } +}; foreach p {frame frameView} {send $p addCallback cpDisplayFrameData} + + +# Frame enhancement. +# ------------------------------- +set cpEnhanceDisable 0 +set cpEnhanceId 0 +set cpEnhanceMode none +set cpEnhanceVal 0 +set cpListItem none + +# Windowing the colormap is slow when the mouse is not in the image window, +# so it is necessary to execute the windowColormap in a work procedure. +# This allows any number of slider motion events to be processed for each +# windowColormap, preventing slider events from queueing up. + +proc cpResetEnhance args \ +{ + global cpListItem cpEnhanceId + set cpListItem none + set cpEnhanceId 0 +} + +proc cpSetEnhancement {widget cbtype x y} \ +{ + global cpEnhanceMode cpEnhanceVal cpEnhanceId cpEnhanceDisable + set cpEnhanceMode $widget + set cpEnhanceVal $x + if {!$cpEnhanceId && !$cpEnhanceDisable} { + set cpEnhanceId [postWorkProc cpEnhanceProc] + } +} +proc cpEnhanceProc args \ +{ + global cpEnhanceMode cpEnhanceVal cpEnhanceId + global enhancement frame maxContrast + set val $cpEnhanceVal + + if {$cpEnhanceMode == "contrastSlider"} { + set contrast [lindex $enhancement($frame) 2] + send client windowColormap [lindex $enhancement($frame) 1] \ + [expr (($contrast < 0) ? -$val : $val) * $maxContrast] + } else { + send client windowColormap $val + } + + set cpEnhanceId 0 + return done +} + +proc cpInvert args \ +{ + global enhancement frame + set contrast [lindex $enhancement($frame) 2] + send client windowColormap [lindex $enhancement($frame) 1] \ + [expr -1.0 * $contrast] +} + +proc cpDisplayEnhancement {param old new} \ +{ + global cpEnhanceId maxContrast cpEnhanceDisable + global cpListItem enhancement frame + + if {!$frame} \ + return + set enhance $enhancement($frame) + if {[llength $enhance] < 3} \ + return + + set colortable [lindex $enhance 0] + set offset [lindex $enhance 1] + set scale [lindex $enhance 2] + + send colordata set label [format "-- %s --\nCon %0.2f Brt %0.2f" \ + $colortable $scale $offset] + + if {$colortable != $cpListItem} { + send colorlist highlight $colortable + set cpListItem $colortable + } + + if {!$cpEnhanceId && !$cpEnhanceDisable} { + set cpEnhanceDisable 1 + send contrastSlider moveThumb [expr abs($scale) / $maxContrast] + send brightnessSlider moveThumb $offset + set cpEnhanceDisable 0 + } +} + +foreach i {enhancement frame} { + send $i addCallback cpDisplayEnhancement +} +send contrastSlider addCallback cpSetEnhancement scroll +send brightnessSlider addCallback cpSetEnhancement scroll +send invertButton addCallback cpInvert + + +# Colortable display and selection. +# ------------------------------- +set colorTables {} + +proc cpSetColorList {param old new} \ +{ + set colorTables $new + send colorlist setList $new resize +}; send colortables addCallback cpSetColorList + +proc colorlistResize args \ +{ + global colorTables + send colorlist setList $colorTables resize +}; send colorlist addEventHandler colorlistResize ResizeRedirectMask + +proc cpSelectColor {widget cbtype selections indices} \ +{ + global colortable + foreach selection $selections { + send client setColormap $selection + } +}; send colorlist addCallback cpSelectColor + + +# Frame blink. +# ------------------------------- +send BRtext set label $blinkRate +send brBRtext set label $blinkRate + +proc cpSetBlinkRate {w args} \ +{ + global blinkRate + if {$w == "BRincrease" || $w == "brBRincrease"} { + if {$blinkRate < 0.01} { + set blinkRate 0.125 + } else { + set blinkRate [expr $blinkRate * 2.0] + } + } else { + set blinkRate [expr $blinkRate / 2.0] + if {$blinkRate < 0.01} { + set blinkRate 0 + } + } + send BRtext set label $blinkRate + send brBRtext set label $blinkRate +} +foreach w {BRincrease BRdecrease brBRincrease brBRdecrease} { + send $w addCallback cpSetBlinkRate +} + +proc cpSetBlinkFrame {widget args} \ +{ + global blinkFrames frames nframes + + set frame [send $widget get label] + if {$frame == " "} { + set frame 1 + } else { + incr frame + if {$frame > $nframes} { + set frame " " + } + } + send $widget set label $frame + + set blinkFrames {} + foreach i {1 2 3 4} { + set frame [send blinkFrame$i get label] + if {$frame != " "} { + lappend blinkFrames $frame + } + } +}; foreach i {1 2 3 4} {send blinkFrame$i addCallback cpSetBlinkFrame} + +proc cpBlink {widget args} \ +{ + global blinkRate blinkId + + if {$blinkRate < 0.01} { + send blinkButton set on False + send brBlinkButton set on False + blink + } elseif {($blinkId != 0) != [send $widget get on]} { + toggleBlink + } +} ; foreach w {blinkButton brBlinkButton} {send $w addCallback cpBlink} + + +proc cpAutoRegister {widget type state args} \ +{ + global auto_reg frame frames blinkFrames + global frameZoomX frameZoomY frameOffsetX frameOffsetY + + set auto_reg $state + if {$auto_reg == 1} { + send autoregButton set on True + send brAregButton set on True + } else { + send autoregButton set on False + send brAregButton set on False + } + + # Register the frames to zero the offsets. + send client registerFrames \{$blinkFrames\} + foreach f $frames { + set frameOffsetX($f) 0 + set frameOffsetY($f) 0 + } +} ; foreach w {autoregButton brAregButton} {send $w addCallback cpAutoRegister} + + +proc toggleAutoReg args \ +{ + global auto_reg + if {$auto_reg} { + cpAutoRegister autoregButton dummy 0 + set auto_reg 0 + } else { + cpAutoRegister autoregButton dummy 1 + set auto_reg 1 + } +} + +proc resetAutoReg args \ +{ + global auto_reg + if {$auto_reg} \ + toggleAutoReg +}; send initialize addCallback resetAutoReg + + +proc cpResetBlink args \ +{ + global blinkRate blinkFrames blinkIndex frames + global defaultBlinkRate + + foreach i {1 2 3 4} { + send blinkFrame$i set label " " + } + for {set i 1} {$i <= 16} {incr i} { + send brFrame$i set label $i + } + set blinkRate $defaultBlinkRate + send BRtext set label $blinkRate + send brBRtext set label $blinkRate + set blinkIndex 0 +} +send blinkReset addCallback cpResetBlink +send brReset addCallback cpResetBlink + +proc cpTraceBlink {name element op} \ +{ + upvar $name blinkId + send blinkButton set on [expr $blinkId != 0] + send brBlinkButton set on [expr $blinkId != 0] +}; trace variable blinkId w cpTraceBlink + +proc cpSetBlinkFrames {param old new} \ +{ + global blinkFrames frames + + set blinkFrames {} + foreach i $frames { + if {$i <= $new} { + lappend blinkFrames $i + } + } + cpResetBlink + set button 1 + for {set i 1} {$i <= $new} {incr i} { + if {$i <= 4} { + send blinkFrame$button set label $i + } + send brFrame$button set label $i + incr button + } +}; send nframes addCallback cpSetBlinkFrames + +proc cpRegisterFrames args \ +{ + global frames blinkFrames + global frameOffsetX frameOffsetY + + foreach f $frames { + set frameOffsetX($f) 0 + set frameOffsetY($f) 0 + } + send client registerFrames \{$blinkFrames\} +} +send registerButton addCallback cpRegisterFrames +send brRegButton addCallback cpRegisterFrames + +proc cpMatchFrames args \ +{ + global blinkFrames + send client matchFrames \{$blinkFrames\} +} +send matchButton addCallback cpMatchFrames +send brMatchButton addCallback cpMatchFrames + + +# Options buttons. +# ------------------------------- +proc cpSetPanner {widget args} \ +{ + setPanner [send $widget get on] +}; send pannerButton addCallback cpSetPanner + +proc cpTracePanner {name element op} \ +{ + upvar $name panner_enable + send pannerButton set on $panner_enable +}; trace variable panner_enable w cpTracePanner + +proc cpSetMagnifier {widget args} \ +{ + setMagnifier [send $widget get on] +}; send magnifierButton addCallback cpSetMagnifier + +proc cpTraceMagnifier {name element op} \ +{ + upvar $name magnifier_enable + send magnifierButton set on $magnifier_enable +}; trace variable magnifier_enable w cpTraceMagnifier + +proc cpSetCoordsBox {widget args} \ +{ + setTrack [send $widget get on] +}; send coordsBoxButton addCallback cpSetCoordsBox + +proc cpTraceCoordsBox {name element op} \ +{ + upvar $name track_enable + send coordsBoxButton set on $track_enable +}; trace variable track_enable w cpTraceCoordsBox + +proc cpSetWarnings args \ +{ + global warnings + set warnings [send warningsButton get on] +}; send warningsButton addCallback cpSetWarnings + +proc cpSetAutoscale args \ +{ + set value [send autoscaleButton get on] + send client setOption autoscale [expr {$value ? "True" : "False"}] +}; send autoscaleButton addCallback cpSetAutoscale + +proc cpTrackAutoscale {param old new} \ +{ + send autoscaleButton set on [true $new] +}; send autoscale addCallback cpTrackAutoscale + +proc cpSetAntialias args \ +{ + set value [send antialiasButton get on] + send client setOption antialias [expr {$value ? "True" : "False"}] +}; send antialiasButton addCallback cpSetAntialias + +proc cpTrackAntialias {param old new} \ +{ + send antialiasButton set on [true $new] +}; send antialias addCallback cpTrackAntialias + +proc cpSetTileFrames { widget type state args } \ +{ + global tile_frames tileOpt + + set value [send tileFramesButton get on] + if {$value} { + selectTileOrientation junk junk [tileSelToLabel $tileOpt] + } else { + selectTileOrientation junk junk Disabled + } + send client setOption tileFrames \ + [expr {$value ? "True" : "False"}] \{ $tile_frames \} +} ; send tileFramesButton addCallback cpSetTileFrames + +proc cpTrackTileFrames {param old new} \ +{ + send tileFramesButton set on [true $new] +}; send tileFrames addCallback cpTrackTileFrames + +proc tileFramesToggle args \ +{ + set value [send tileFramesButton get on] + send tileFramesButton set on [expr !$value] + cpSetTileFrames +} + diff --git a/vendor/x11iraf/ximtool/gui.bak/panner.tcl b/vendor/x11iraf/ximtool/gui.bak/panner.tcl new file mode 100644 index 00000000..6bdea0c7 --- /dev/null +++ b/vendor/x11iraf/ximtool/gui.bak/panner.tcl @@ -0,0 +1,535 @@ + +################################################################################ +# PANNER. The full frame mapped into the main image window is displayed at a +# reduced resolution in a marker (known as the panner window) within the main +# image window. The currently displayed region of the frame is indicated +# using a small marker within the panner window. This small marker may be +# moved or resized to pan or zoom the image in the main display window. +################################################################################ + +set panner_x 0 +set panner_y 0 +set panner_width 0 +set panner_height 0 +set prm_width 0 +set prm_height 0 + +set panner_enable 0 +set panner_pan_enable 0 +set panner_mag_enable 0 +set panner_region_enable 0 +set panner_mapping 0 + +# Panner window translations. +set pannerWinTranslations { \ + !Shift : m_rotateResize() + : m_moveResize() + !Shift : m_raise() m_markpos() + : m_raise() m_markposAdd() + : m_redraw() m_destroyNull() + : m_lower() + : call(pannerPanXY,$x,$y) + !Ctrl b: call(prevFrame,$name) + !Ctrl f: call(nextFrame,$name) + !Ctrl h: call(move_cursor,-1,0) + !Ctrl j: call(move_cursor,0,1) + !Ctrl k: call(move_cursor,0,-1) + !Ctrl l: call(move_cursor,1,0) + !Ctrl n: call(normalize) + !Ctrl c: call(cpZoomAction,centerFrame) + !Ctrl i: call(cpInvert) + !Ctrl m: call(toggleMagnifier) + !Ctrl p: call(togglePanner) + !Ctrl r: call(cpRegisterFrames) + !Ctrl s: call(cpMatchFrames) + !Alt 1: call(cpSetFrame,frame1) + !Alt 2: call(cpSetFrame,frame2) + !Alt 3: call(cpSetFrame,frame3) + !Alt 4: call(cpSetFrame,frame4) + !Ctrl 1: call(cpZoom,1,1,fixed) + !Ctrl 2: call(cpZoom,2,2,fixed) + !Ctrl 3: call(cpZoom,3,3,fixed) + !Ctrl 4: call(cpZoom,4,4,fixed) + !Ctrl 5: call(cpZoom,5,5,fixed) + !Ctrl 6: call(cpZoom,6,6,fixed) + !Ctrl 7: call(cpZoom,7,7,fixed) + !Ctrl 8: call(cpZoom,8,8,fixed) + !Ctrl 9: call(cpZoom,9,9,fixed) + BackSpace: m_deleteDestroy() + Delete: m_deleteDestroy() + : graphics-input() + : track-cursor() call(wcsUpdate,$x,$y) +} + + +# setPanner -- Turn the panner on or off. + +proc togglePanner args \ +{ + global panner_enable + + if {$panner_enable} { + setPanner 0 + } else { + setPanner 1 + } +} + + +proc setPanner {state} \ +{ + global winWidth winHeight frameWidth frameHeight + global frame panner_mapping pannerWinTranslations pannerArea + global panner_enable panner_region_enable panner_pan_enable + global pannerGeom panner_x panner_y panner_width panner_height + global last_compass + + if {$state} { + if {$panner_enable} \ + return + + # Determine where to place the panner. + set scale \ + [expr sqrt(double($pannerArea) / ($frameWidth * $frameHeight))] + set scaled_width [expr int($frameWidth * $scale) / 2 * 2 + 1] + set scaled_height [expr int($frameHeight * $scale) / 2 * 2 + 1] + set defGeom [format "%sx%s-5+5" $scaled_width $scaled_height] + send imagewin parseGeometry $pannerGeom $defGeom x y width height + + # Create the main panner window (marker). + send imagewin createMarker pannerWin \ + type rectangle \ + createMode noninteractive \ + width [expr $width / 2] \ + height [expr $height / 2] \ + x [expr $x + $width / 2] \ + y [expr $y + $height / 2] \ + lineColor 8 \ + highlightColor 8 \ + translations $pannerWinTranslations \ + visible true \ + sensitive true \ + activated true + + # Update the panner window position variables so that it comes up + # in the same place the next time. + + send pannerWin getRect boundary \ + panner_x panner_y panner_width panner_height + set pannerGeom [send imagewin getGeometry \ + $panner_x $panner_y $panner_width $panner_height] + + # Register callbacks. + send frame addCallback pannerMapImage + send frameRegion addCallback pannerSetRegion + send imagewin addCallback pannerImagewinResized resize + send resize addCallback pannerImagewinResized + + send pannerWin { + addCallback pannerMapImage moveResize; + addCallback pannerMoved moveResize; + addCallback pannerDestroy destroy; + addCallback pannerWinConstraint constraint; + } + + # Map display frame to panner window. + set panner_enable 1 + set panner_region_enable 1 + set panner_mapping [send imagewin nextMapping] + pannerMapImage init; send imagewin refreshMapping $panner_mapping + + # Redraw the compass if necessary. + send compass "setSensitive True ; set on $last_compass" + if { $last_compass } \ + drawCompass + + # Draw a marker in the panner window outlining displayed region. + send imagewin createMarker pannerRegionMarker \ + type box \ + createMode noninteractive \ + translations $pannerWinTranslations \ + lineColor green \ + highlightColor green \ + sensitive true + + # Fire up the panner region marker. + send client getSource raster sx sy snx sny + pannerSetRegion dummy dummy [concat $frame $sx $sy $snx $sny] + send pannerRegionMarker "\ + addCallback pannerPanImage moveResize; \ + addCallback pannerDestroy destroy; \ + addCallback pannerRegionConstraint constraint; \ + setAttributes visible true activated true; \ + redraw" + set panner_pan_enable 1 + + } elseif {$panner_enable} { + pannerDestroy + } +} + + +# pannerDestroy -- Delete the panner. + +proc pannerDestroy args \ +{ + global panner_enable panner_region_enable panner_pan_enable + global panner_mapping + + if {$panner_enable} { + set panner_enable 0 + set panner_pan_enable 0 + set panner_region_enable 0 + + send imagewin freeMapping $panner_mapping + send imagewin deleteCallback pannerImagewinResized + send resize deleteCallback pannerImagewinResized + send frame deleteCallback pannerMapImage + send frameRegion deleteCallback pannerSetRegion + + if [send server queryObject pannerRegionMarker] { + send pannerRegionMarker destroy + } + if [send server queryObject pannerWin] { + send pannerWin destroy + } + + # Disable the compass. + send compass "setSensitive False ; set on False" + } +} + + +# pannerMapImage -- Map the current display frame into the panner window. +# Called when the frame changes or the panner window is moved or resized. +# The panner window displays a small dezoomed version of the full frame. + +proc pannerMapImage args \ +{ + global panner_enable frame + global panner_mapping + + if {!$panner_enable || $frame == 0} \ + return + + set raster [send client getRaster] + send pannerWin getRect interior dx dy dnx dny + send imagewin queryRaster $raster width height + + if [send imagewin activeMapping $panner_mapping] { + send imagewin raiseMapping $panner_mapping + } + send imagewin setMapping $panner_mapping 0 \ + $raster pixel 0 0 $width $height \ + 0 pixel $dx $dy $dnx $dny +} + + +# pannerSetRegion -- Adjust the pannerWin region marker to outline the +# region displayed in the main display window. This is called in response +# to a frameRegion event when the main display mapping changes, e.g. when +# the frame changes or the user zooms or pans the main window. The region +# marker is moved and resized to reflect the new view. + +proc pannerSetRegion {param old new} \ +{ + global panner_enable panner_region_marker + global panner_region_enable panner_pan_enable + global frame frameWidth frameHeight prm_width prm_height + + if {!$panner_enable || !$panner_region_enable || $frame == 0} \ + return + + # new: frame sx sy snx sny + set src_frame [lindex $new 0] + set sx [lindex $new 1]; set snx [lindex $new 3] + set sy [lindex $new 2]; set sny [lindex $new 4] + + if {$src_frame != $frame} \ + return + + send pannerWin getRect interior px py pnx pny + + set x [expr ($sx + $snx/2.0) / $frameWidth * $pnx + $px] + set y [expr ($sy + $sny/2.0) / $frameHeight * $pny + $py] + set width [expr ($snx/2.0) / $frameWidth * $pnx + 1] + set height [expr ($sny/2.0) / $frameHeight * $pny + 1] + + set pan_save $panner_pan_enable; set panner_pan_enable 0 + set panner_region_enable 0 + + send pannerRegionMarker "\ + markpos; \ + setAttributes x $x y $y width $width height $height; \ + redraw; raise" + send pannerRegionMarker getAttributes width prm_width height prm_height + + set panner_region_enable 1 + set panner_pan_enable $pan_save +} + + +# pannerPanImage -- Pan or zoom the image in the main image window. This is +# called when the user moves the region marker within the panner window. + +proc pannerPanImage {marker event position} \ +{ + global panner_pan_enable + global winWidth winHeight + global prm_width prm_height + global frame auto_reg frameOffsetX frameOffsetY + + if {!$panner_pan_enable} \ + return + + # position: x y width height. + set new_width [lindex $position 2] + set new_height [lindex $position 3] + + # region: type raster x y width height. + set region [send pannerRegionMarker getRegion unmap] + set x [expr [lindex $region 2] + 1]; set width [lindex $region 4] + set y [expr [lindex $region 3] + 1]; set height [lindex $region 5] + + set panner_pan_enable 0 + if {$new_width == $prm_width && $new_height == $prm_height} { + send client pan $x $y + } else { + set xscale [expr ($winWidth / 2.0) / $width] + set yscale [expr ($winHeight / 2.0) / $height] + if {$auto_reg == 1} { + send client zoomAbs $xscale $yscale $x $y \ + $frameOffsetX($frame) $frameOffsetY($frame) + } else { + send client zoom $xscale $yscale $x $y + } + } + set panner_pan_enable 1 +} + + +# pannerPanXY -- Pan to the point X,Y in the panner window coordinate +# system. Called when the user clicks MB2 in the panner window. + +proc pannerPanXY {x y} \ +{ + send imagewin unmapPixel $x $y raster rx ry + send client pan $rx $ry +} + + +# pannerMoved -- Called when the user moves the panner window. We need to +# move the region marker to the new window location and record the new location +# so that the window will come up in the same place if closed and reopened. + +proc pannerMoved {marker event position} \ +{ + global winWidth winHeight + global frame panner_pan_enable pannerGeom + global panner_x panner_y panner_width panner_height + + # Move the region marker to the new location. + set pan_save $panner_pan_enable; set panner_pan_enable 0 + send client getSource raster sx sy snx sny + pannerSetRegion dummy dummy [concat $frame $sx $sy $snx $sny] + set panner_pan_enable $pan_save + + # Update the panner window position variables so that it comes up + # in the same place the next time. + + send pannerWin getRect boundary \ + panner_x panner_y panner_width panner_height + set pannerGeom [send imagewin getGeometry \ + $panner_x $panner_y $panner_width $panner_height] + + drawCompass + + send pannerRegionMarker raise +} + + +# pannerWinConstraint -- Called when the panner window is moved, resized, or +# rotated. Constrain the panner window to remain within the image window; +# rotation is not permitted. + +proc pannerWinConstraint {marker event attributes} \ +{ + global winWidth winHeight + global panner_width panner_height + + set width $panner_width + set height $panner_height + set constraints [list {}] + + # Check the width and height first as we need these below. + foreach i $attributes { + set new [lindex $i 2] + switch [lindex $i 0] { + width { set ww [expr $winWidth / 2] + if {$new > $ww} { + lappend constraints "width $ww" + set width $ww + } else { + set width $new + } + } + height { set wh [expr $winHeight / 2] + if {$new > $wh} { + lappend constraints "height $wh" + set height $wh + } else { + set height $new + } + } + rotangle { lappend constraints "rotangle 0" + } + } + } + + # Constrain X and Y. + foreach i $attributes { + set new [lindex $i 2] + switch [lindex $i 0] { + x { set pw [expr $width / 2] + if {$new < $pw} { + lappend constraints "x $pw" + } elseif {$new > $winWidth - $pw} { + lappend constraints "x [expr $winWidth - $pw]" + } + } + y { set ph [expr $height / 2] + if {$new < $ph} { + lappend constraints "y $ph" + } elseif {$new > $winHeight - $ph} { + lappend constraints "y [expr $winHeight - $ph]" + } + } + } + } + + return $constraints +} + + +# pannerRegionConstraint -- Called when the region marker in the panner +# window is moved, resized, or rotated. + +proc pannerRegionConstraint {marker event attributes} \ +{ + global winWidth winHeight + global frame + + set constraints [list {}] + send pannerWin getRect interior p_x p_y p_width p_height + send pannerRegionMarker getAttributes width rwidth height rheight + + # Since the panner region marker is a box marker x,y and width,height + # will not both change in the same call, so we can process them all + # independently. + + foreach i $attributes { + set new [lindex $i 2] + + switch [lindex $i 0] { + x { set left [expr $p_x + $rwidth + 1] + set right [expr $p_x + $p_width - $rwidth - 1] + if {$new < $left} { + lappend constraints "x $left" + } elseif {$new > $right} { + lappend constraints "x $right" + } + } + y { set top [expr $p_y + $rheight + 1] + set bottom [expr $p_y + $p_height - $rheight - 1] + if {$new < $top} { + lappend constraints "y $top" + } elseif {$new > $bottom} { + lappend constraints "y $bottom" + } + } + width { set ww [expr $winWidth / 2] + if {$new > $ww / 2} { + lappend constraints "width $ww" + } + } + height { set wh [expr $winHeight / 2] + if {$new > $wh / 2} { + lappend constraints "height $wh" + } + } + rotangle { lappend constraints "rotangle 0" + } + } + } + drawCompass + + return $constraints +} + + +# pannerImagewinResized -- If the display window is resized make the panner +# track the corner. + +proc pannerImagewinResized args \ +{ + global panner_enable panner_mapping + global pannerGeom panner_x panner_y panner_width panner_height + global frame + + if {$panner_enable} { + set old_x $panner_x; set old_width $panner_width + set old_y $panner_y; set old_height $panner_height + + eraseCompass + + # Get new location of panner window. + set defGeom [format "%sx%s-5+5" $panner_width $panner_height] + send imagewin parseGeometry $pannerGeom $defGeom x y width height + + # Reposition the marker. + send pannerWin "\ + markpos; \ + setAttributes \ + x [expr $x + $width / 2] \ + y [expr $y + $height / 2] \ + width [expr $width / 2] \ + height [expr $height / 2]; \ + redraw" + + # Update the panner window position variables so that it comes up + # in the same place the next time. + send pannerWin getRect boundary \ + panner_x panner_y panner_width panner_height + set pannerGeom [send imagewin getGeometry \ + $panner_x $panner_y $panner_width $panner_height] + + # Make sure the panner window is on top. + send imagewin raiseMapping $panner_mapping + + # Refresh the panner window if it did not move. + if {$panner_x == $old_x && $panner_y == $old_y && + $panner_width == $old_width && $panner_height == $old_height} { + send imagewin refreshMapping $panner_mapping + } + + drawCompass + } +} + + +# resetPanner -- Reinitialize the panner. + +proc resetPanner {param old new} \ +{ + global pannerGeom displayPanner + if {$new == "done"} { + setPanner [true $displayPanner] + } else { + setPanner 0 + if {$new != "startup"} { + set pannerGeom -5+5 + } + } +}; send initialize addCallback resetPanner + + diff --git a/vendor/x11iraf/ximtool/gui.bak/param.obj b/vendor/x11iraf/ximtool/gui.bak/param.obj new file mode 100644 index 00000000..b9a2d734 --- /dev/null +++ b/vendor/x11iraf/ximtool/gui.bak/param.obj @@ -0,0 +1,32 @@ + +set Objects(parameters) { \ + toplevel Parameter ximtool\ + ximtool Parameter alert\ + ximtool Parameter initialize\ + ximtool Parameter resize\ + ximtool Parameter frame\ + ximtool Parameter nframes\ + ximtool Parameter frameSize\ + ximtool Parameter frameRegion\ + ximtool Parameter frameView\ + ximtool Parameter frameTitle\ + ximtool Parameter frameFit\ + ximtool Parameter enhancement\ + ximtool Parameter colortables\ + ximtool Parameter autoscale\ + ximtool Parameter antialias\ + ximtool Parameter tileFrames\ + ximtool Parameter cursorMode\ + ximtool Parameter xflip\ + ximtool Parameter yflip\ + ximtool Parameter printerList\ + ximtool Parameter printOptions\ + ximtool Parameter loadOptions\ + ximtool Parameter saveOptions\ + ximtool Parameter tileOptions\ + ximtool Parameter filelist\ + ximtool Parameter help\ + ximtool Parameter info\ + ximtool Parameter ism_msg\ +} + diff --git a/vendor/x11iraf/ximtool/gui.bak/pixtab.obj b/vendor/x11iraf/ximtool/gui.bak/pixtab.obj new file mode 100644 index 00000000..1da660a2 --- /dev/null +++ b/vendor/x11iraf/ximtool/gui.bak/pixtab.obj @@ -0,0 +1,30 @@ + +set Objects(pixel_table) { \ + toplevel TopLevelShell pixel_panel\ +\ + pixel_panel Layout pixel_table\ + pixel_table Frame pixtabMenuFrame\ + pixtabMenuFrame Layout pixtabMenuBar\ + pixtabMenuBar MenuButton pixtabSize\ + pixtabMenuBar Command pixtabHelp\ + pixtabMenuBar Command pixtabClose\ +\ + pixel_table Frame pixtabFrame\ + pixtabFrame Porthole ptPort\ + ptPort Layout ptLayout\ + ptLayout Frame ptColFrame\ + ptColFrame MultiList ptColLabs\ + ptLayout Frame ptRowFrame\ + ptRowFrame MultiList ptRowLabs\ + ptLayout Frame ptFrame\ + ptFrame MultiList pixtab\ +\ + ptLayout Label meanLabel\ + ptLayout Frame meanFrame\ + meanFrame Label meanValue\ +\ + ptLayout Label sigLabel\ + ptLayout Frame sigFrame\ + sigFrame Label sigValue\ +} + diff --git a/vendor/x11iraf/ximtool/gui.bak/pixtab.res b/vendor/x11iraf/ximtool/gui.bak/pixtab.res new file mode 100644 index 00000000..b41296c7 --- /dev/null +++ b/vendor/x11iraf/ximtool/gui.bak/pixtab.res @@ -0,0 +1,128 @@ + +set Resources(pixel_table) { \ + + *pixel_panel.title: Image Pixel Table + *pixel_panel*SimpleMenu.borderWidth: 1 + *pixel_panel*SimpleMenu.borderColor: black + *pixel_panel*SimpleMenu.foreground: White + *pixel_panel*SimpleMenu.background: SteelBlue + + *pixtabMenuBar*borderWidth: 0 + *pixtabMenuBar*Command.internalHeight: 4 + *pixtabMenuBar*Command.internalWidth: 12 + *pixtabMenuBar.layout: vertical { \ + 5 \ + horizontal { \ + 5 \ + pixtabSize 10 < +inf -10> pixtabHelp 5 pixtabClose \ + 7 \ + } \ + 5 \ + } + *pixtabSize.label: Size + *pixtabSize.menuName: pixtabMenu + *pixtabHelp.label: Help + *pixtabHelp.sensitive: False + *pixtabClose.label: Dismiss + + *pixtabMenuFrame.frameType: raised + *pixtabMenuFrame.frameWidth: 2 + *pixel_table.layout: vertical { \ + 1 \ + pixtabMenuFrame < +inf -inf * > \ + 1 \ + pixtabFrame < +inf -inf * +inf -inf > \ + 1 \ + } + + + *pixtabFrame.frameType: raised + *pixtabFrame.frameWidth: 0 + *pixtabFrame*borderWidth: 0 + *pixtabFrame*font: 6x10 + *pixtabFrame*MultiList.font: -*-helvetica-medium-r-normal-*-10-* + *pixtabFrame*Label.font: -*-helvetica-medium-r-normal-*-10-* + *pixtabFrame*TextToggle.font: -*-helvetica-medium-r-normal-*-10-* + + *pixtabFrame*MultiList.forceColumns: True + *pixtabFrame*MultiList.defaultColumns: 5 + *pixtabFrame*MultiList.shadeSurplus: False + *pixtabFrame*MultiList.borderWidth: 0 + *pixtabFrame*MultiList.rowHeight: 25 + *pixtabFrame*MultiList.rowSpacing: 7 + *pixtabFrame*MultiList.internalWidth: 7 + *pixtabFrame*MultiList.internalHeight: 4 + *pixtabFrame*MultiList.width: 410 + *pixtabFrame*MultiList.height: 160 + *pixtabFrame*MultiList.columnWidth: 50 + *pixtabFrame*MultiList.columnSpacing: 2 + *pixtabFrame*MultiList.maxSelectable: 1 + *pixtabFrame*MultiList.highlightForeground: red + *pixtabFrame*MultiList.highlightBackground: gray77 + *pixtabFrame*MultiList.background: gray77 + *pixtabFrame*TextToggle.background: gray77 + + *pixtabFrame*Label.width: 00 + !*pixtabFrame*Label.resize: False + + *meanFrame.frameWidth: 2 + *meanFrame.frameType: chiseled + *meanFrame.outerOffset: 0 + *meanFrame.width: 120 + *meanLabel.label: Mean: + *meanValue.label: + *meanValue.resize: False + + *sigFrame.frameWidth: 2 + *sigFrame.frameType: chiseled + *sigFrame.outerOffset: 0 + *sigFrame.width: 120 + *sigLabel.label: Stdev: + *sigValue.label: + *sigValue.resize: False + + *ptColFrame.frameWidth: 0 + *ptColFrame.outerOffset: 0 + *ptRowFrame.frameWidth: 0 + *ptRowFrame.outerOffset: 0 + + *pixtabFrame*ptColLabs.width: 410 + *pixtabFrame*ptColLabs.height: 23 + *pixtabFrame*ptColLabs.defaultColumns: 5 + *pixtabFrame*ptColLabs.forceColumns: True + *pixtabFrame*ptColLabs.columnWidth: 50 + *pixtabFrame*ptColLabs.columnSpacing: 2 + *pixtabFrame*ptRowLabs.width: 60 + *pixtabFrame*ptRowLabs.height: 110 + *pixtabFrame*ptRowLabs.defaultColumns: 1 + *pixtabFrame*ptRowLabs.forceColumns: True + *pixtabFrame*ptRowLabs.verticalList: True + *pixtabFrame*ptRowLabs.columnWidth: 50 + *pixtabFrame*ptRowLabs.columnSpacing: 2 + *pixtabFrame*pixtab.verticalList: True + + *ptFrame.outerOffset: 0 + *ptFrame.innerOffset: 0 + *ptFrame.borderWidth: 0 + *ptFrame.frameWidth: 1 + *ptFrame.frameType: sunken + *ptLayout.layout: vertical { \ + 3 \ + horizontal { 65 ptColFrame < +inf -inf * > 5 } \ + 1 \ + horizontal { \ + vertical { ptRowFrame< * +inf -inf > 5 } \ + 1 \ + vertical { ptFrame } \ + 5 \ + } \ + 1 \ + horizontal { \ + 2 < +inf > \ + meanLabel meanFrame < +inf -inf * > 2 \ + sigLabel sigFrame < +inf -inf * > \ + 10 \ + } \ + } +} + diff --git a/vendor/x11iraf/ximtool/gui.bak/pixtab.tcl b/vendor/x11iraf/ximtool/gui.bak/pixtab.tcl new file mode 100644 index 00000000..d23827c9 --- /dev/null +++ b/vendor/x11iraf/ximtool/gui.bak/pixtab.tcl @@ -0,0 +1,144 @@ + +################################################################################ +# Pixel Table Callbacks. +################################################################################ + +set psize 5 +set pixtab_up 0 +set hdr_up 0 + +createMenu pixtabMenu pixtabSize { + { "3x3" f.exec { pixtabSetSize 3 } } + { "5x5" f.exec { pixtabSetSize 5 } } + { "7x7" f.exec { pixtabSetSize 7 } } + { "9x9" f.exec { pixtabSetSize 9 } } +} + + +proc updatePixelTable { cx cy wx wy args } \ +{ + global psize pixtab_up ism_enable + + if {! $pixtab_up} \ + return + if {$ism_enable} \ + return + + set delta [expr int($psize / 2) ] + set x1 [expr ($wx - $delta) ] + set x2 [expr ($wx + $delta) ] + set y1 [expr ($wy - $delta) ] + set y2 [expr ($wy + $delta) ] + set c [ expr int($psize / 2) ] + + + # Update the table labels. + set x $x1 ; set xl {} + set y $y2 ; set yl {} + for {set i 0} {$i < $psize} {incr i} { + lappend xl [format " %10.1f " $x] ; set x [ expr ($x + 1.) ] + lappend yl [format " %10.1f " $y] ; set y [ expr ($y - 1.) ] + } + send ptColLabs setList $xl ; send ptColLabs highlight $c + send ptRowLabs setList $yl ; send ptRowLabs highlight $c + + # Update the pixel table itself. + #set pix [ send client getPixels $cx $cy $psize True ] + + set x0 [ expr int($cx - $psize / 2. + 0.5)] + set y0 [ expr int($cy - $psize / 2. + 0.5)] + set pix [ send client getPixels $x0 $y0 $psize $psize ] + send pixtab setList [ lrange $pix 4 end ] + set c [ expr int(($psize * $psize) / 2) ] + send pixtab highlight $c + + # Update the pixtab stats. + set sum 0.0 + set sum2 0.0 + set npix [ expr ($psize * $psize) ] + set nend [ expr ($psize * $psize) + 4 ] + for {set i 4} {$i < $nend} {incr i} { + set val [lindex $pix $i] + catch { + set sum [ expr ($sum + $val) ] + set sum2 [ expr ($sum2 + $val * $val) ] + } + } + + set mean [ expr ($sum / ($npix * 1.0)) ] + set var [ expr (($sum2 - $sum * $mean) / ($npix - 1)) ] + if {$var <= 0.0} { + set stdev 0.0 + } else { + set stdev [ expr sqrt ($var) ] + } + send meanValue set label [ format "%10.2f" $mean ] + send sigValue set label [ format "%10.4f" $stdev ] +} + + +proc pixtabClose args \ +{ + global pixtab_up + + send pixel_panel unmap + send pixelTable set on False + set pixtab_up 0 + catch { send wcspix set psize 0 } +} ; send pixtabClose addCallback pixtabClose + + +proc pixtabSetSize { size args } \ +{ + global psize ism_enable + + set c [ expr int(($psize * $psize) / 2) ] + send pixtab highlight $c + + # Now reset the window size. + switch $size { + 3 { send pixel_panel "resize 265 175" + send pixtab "set width 180 ; set height 60" + } + 5 { send pixel_panel "resize 375 215" + send pixtab "set width 290 ; set height 105" + } + 7 { send pixel_panel "resize 495 265" + send pixtab "set width 410 ; set height 150" + } + 9 { send pixel_panel "resize 610 310" + send pixtab "set width 525 ; set height 195" + } + } + + send pixtab set defaultColumns $size + send ptColLabs set defaultColumns $size + set psize $size + + # Notify the ISM we've changed size. + if ($ism_enable) { + catch { send wcspix set psize $psize } + } + + send imagewin getCursorPos xc yc + updatePixelTable $xc $yc $xc $yc + +} ; pixtabSetSize $psize + + +proc ptPixelTable {widget type state args} \ +{ + global pixtab_up psize + + set pixtab_up $state + if {$pixtab_up == 1} { + send pixelTable set on True + send pixel_panel map + catch { send wcspix set psize $psize } + } else { + send pixelTable set on False + send pixel_panel unmap + catch { send wcspix set psize 0 } + } +}; send pixelTable addCallback ptPixelTable + diff --git a/vendor/x11iraf/ximtool/gui.bak/plots.tcl b/vendor/x11iraf/ximtool/gui.bak/plots.tcl new file mode 100644 index 00000000..c4abd426 --- /dev/null +++ b/vendor/x11iraf/ximtool/gui.bak/plots.tcl @@ -0,0 +1,659 @@ + + +################################################################################ +# Cut-plot handling routines. +################################################################################ + +set doHcut 0 +set doVcut 0 +set plotSpeed 1 ; send plotSpeed set on True +set curJump 1 ; send curJump set on True +set curTrack 1 ; send curTrack set on True + +set cutXPos [expr "$winWidth / 2"] +set cutYPos [expr "$winHeight / 2"] +set cutXScale 1.0 +set cutYScale 1.0 + + + +# Change the cursor to the crosshair when in the plot +proc cutCursor { widget event args } \ +{ + global doHcut doVcut curTrack + + if {! $curTrack} \ + return + + if { $event == "enterNotify" } { + send $widget setCursorType ginMode + + # Disable the update of the graph we're in while in the plot window. + if {$widget == "hcutPlot"} { set doHcut 0 } else { set doVcut 0 } + } elseif { $event == "leaveNotify" } { + send $widget setCursorType idle + + # Enable the update of the graph we're leaving. + if {$widget == "hcutPlot"} { set doHcut 1 } else { set doVcut 1 } + } + cutPlotRefresh +} +foreach w {hcutPlot vcutPlot} { + send $w addEventHandler cutCursor enterWindowMask + send $w addEventHandler cutCursor leaveWindowMask +} + +proc cutPlotRefresh args \ +{ + global doHcut doVcut cutXPos cutYPos + + if {$doHcut} { + send hcutPlot clearScreen + hcutInit + send hcutAxes1 redraw ; send hcutAxes2 redraw + cutPlots $cutXPos $cutYPos + } + if {$doVcut} { + send vcutPlot clearScreen + vcutInit + send vcutAxes1 redraw ; send vcutAxes2 redraw + cutPlots $cutXPos $cutYPos + } +} ; send imagewin addEventHandler cutPlotRefresh enterWindowMask + +proc cutPlotRedraw args \ +{ + global doHcut doVcut cutXPos cutYPos + + if {$doHcut} { + send hcutAxes1 redraw ; send hcutAxes2 redraw + cutPlots $cutXPos $cutYPos + } + if {$doVcut} { + send vcutAxes1 redraw ; send vcutAxes2 redraw + cutPlots $cutXPos $cutYPos + } +} + + +# Disable the options when we first start up. +#send plotOpts "set height 1 ; set width 1 ; unmap" +foreach w {plotOpts hcutFrame vcutFrame} { send $w unmap } + + +# Cut-Plot options callback. +proc doPlotOpts { widget type state args } \ +{ + global plotSpeed curJump curTrack doHcut doVcut + global cutXPos cutYPos + + if {$state} { set not 0 } else { set not 1 } + + switch $widget { + plotSpeed { if {$state} { + send plotAccurate set on 0 ; send plotImgPix set on 0 + } else { + send plotSpeed set on True ; + } + set plotSpeed $not + } + plotAccurate { if {$state} { + send plotImgPix set on 0 ; send plotSpeed set on 0 + } else { + send plotSpeed set on True ; + } + set plotSpeed $not + } + plotImgPix { if {$state} { + send plotAccurate set on 0 ; send plotSpeed set on 0 + } else { + send plotSpeed set on True ; + } + set plotSpeed $not + } + curJump { send curSmooth set on $not ; set curJump $state } + curSmooth { send curJump set on $not ; set curJump $not } + curTrack { set curTrack $state } + } + + # Redraw the plots right away. + if {$widget == "plotSpeed" || $widget == "plotAccurate"} { + cutPlots $cutXPos $cutYPos + } +} +foreach w { plotSpeed plotAccurate plotImgPix curJump curSmooth curTrack } { + send $w addCallback doPlotOpts +} + + +# Toggle the display of the horizontal or vertical cut plot windows. + +proc cutPlotToggle { widget type state args } \ +{ + global doHcut doVcut cutXPos cutYPos + set debug 0 + + set hstate [send hcut get state] + set vstate [send vcut get state] + set w [send display get width] + set h [send display get height] + + if {$debug} { print " " ; print [format "display: %d x %d\n" $w $h] } + + if {$widget == "hcut"} { + set hfw [expr [send hcutFrame get width] - 4] + set hpw [send hcutPlot get width] + if {$state} { + # Enable the plot and resize the main window + if {$vstate} { + send plotOpts set width 134 + } + send hcutFrame "set width $hpw ; set height 132; map" + send hcutPlot "set width $hfw ; set height 128" + send display "set height [ expr ($h + 132) ]; set width $w" + drawHcutAxes 1 + setHcutCursor 1 + if {$vstate} { + send plotOpts "set height 134 ; map" + vcutInit + } + hcutInit ;# Initialize the plot. + } else { + # Disable the plot and resize the main window + setHcutCursor 0 + drawHcutAxes 0 + send hcutPlot clearScreen + send plotOpts "unmap; set height 4" + send hcutFrame "unmap; set width $hfw; set height 4" + send plotOpts "set width 4" + send display "set height [ expr ($h - 128) ] ; set width $w" + if {$vstate} { + vcutInit + } + } + set doHcut $state + } else { + set vfh [expr [send vcutFrame get height] - 4] + set vph [send vcutPlot get height] + if {$state} { + # Enable the plot and resize the main window + if {$hstate} { + send plotOpts set height 134 + } + send vcutFrame "set height $vph ; set width 132 ; map" + send vcutPlot "set height $vfh ; set width 128" + send display "set height $h; set width [ expr ($w + 132) ]" + drawVcutAxes 1 + setVcutCursor 1 + if {$hstate} { + send plotOpts "set height 134 ; set width 134; map" + hcutInit + } + vcutInit ;# Initialize the plot. + } else { + # Disable the plot and resize the main window + setVcutCursor 0 + drawVcutAxes 0 + send vcutPlot clearScreen + send plotOpts "unmap; set width 4" + send vcutFrame "unmap; set height $vfh; set width 4" + send plotOpts "set height 4" + send display "set width [ expr ($w - 128) ] ; set height $h" + if {$hstate} { + hcutInit + } + } + set doVcut $state + } + + if {$debug} { + print [format " hFrame: %d x %d\n" \ + [send hcutFrame get width] [send hcutFrame get height] ] + print [format " hPlot: %d x %d\n" \ + [send hcutPlot get width] [send hcutPlot get height] ] + print [format " vFrame: %d x %d\n" \ + [send vcutFrame get width] [send vcutFrame get height] ] + print [format " vPlot: %d x %d\n" \ + [send vcutPlot get width] [send vcutPlot get height] ] + print [format "state: %d %d\n" $hstate $vstate] + print [format "display: %d x %d\n" $w $h] + } + + cutPlots $cutXPos $cutYPos +} ; foreach w { hcut vcut } { send $w addCallback cutPlotToggle } + + +# Draw the cut plots. +proc cutPlots { xpos ypos args } \ +{ + global doHcut doVcut cutXPos cutYPos + + catch { + if {$doHcut} { plotHcut $xpos $ypos } + if {$doVcut} { plotVcut $xpos $ypos } + } + + set cutXPos $xpos ; set cutYPos $ypos +} + + +################################################################################ +# Horizontal Cut-Plot Routines +################################################################################ + +set hcutVec {} + +# Initiailize the horizontal cut-plot +proc hcutInit args \ +{ + global logz cutXScale winWidth cutXPos cutYPos + + # Just get some dummy pixels, we only want the z1/z2 values so we can + # initialize the labels. + set xp [expr [send imagewin get width] / 2 ] + set yp [expr [send imagewin get height] / 2 ] + set pix [send client getPixels $xp $yp 2 2 ] + set z1 [lindex $pix 0] + set z2 [lindex $pix 1] + + send hcutPlot getPhysRes xr yr + send hcutPlot setLogRes $xr $yr + + set logx [send imagewin get width] + set logz [expr ($z2 - $z1)] + set cutXScale [expr ($xr * 1.0) / ($logx * 1.0)] + + # Initialize the labels. + send vcutPlot "setColorIndex 6" + drawHcutLabels $z1 $z2 +} + +# Draw the horizontal cut-plot. +proc plotHcut { xpos ypos } \ +{ + global doHcut cutXScale + global hcutVec cutXPos plotSpeed + + + if { ($xpos == 0 && $ypos == 0) || ! $doHcut } \ + return + + # Do the horizontal cut plot. + set width [send imagewin get width] + if {$plotSpeed} { + set pix [send client getPixels 0 $ypos $width 1 2 5 $cutXScale] + } else { + set pix [send client getPixels 0 $ypos $width 1 2 1 $cutXScale] + } + set z1 [lindex $pix 0] + set z2 [lindex $pix 1] + set vec [lrange $pix 2 end] + + # Erase the last plot rather than clear the screen and redraw + # the new vector. + send hcutPlot setColorIndex background + send hcutPlot drawPolyline $hcutVec + send hcutPlot setColorIndex foreground + send hcutPlot drawPolyline $vec + set hcutVec $vec ;# save for later erasure + + # Mark the cursor position. + drawHcutIndicator $xpos + + # Minimize the screen refreshes to speed things up. + if { [expr "$ypos % 3"] == 0} { + catch { + drawHcutLabels $z1 $z2 ;# redraw the labels + } + send hcutAxes1 redraw ;# redraw the axes markers + send hcutAxes2 redraw + } +} + + +# Create markers to indicate axes on the horizontal cut-plot. +proc drawHcutAxes { state } \ +{ + if {$state} { + send hcutPlot createMarker hcutAxes1 \ + type box \ + createMode noninteractive \ + lineColor gray60 \ + lineStyle 0 \ + x 1 \ + y 60 \ + height 30 \ + width 4096 \ + activated True \ + visible True \ + sensitive False + send hcutPlot createMarker hcutAxes2 \ + type box \ + createMode noninteractive \ + lineColor gray60 \ + lineStyle 0 \ + x 1 \ + y 1 \ + height 60 \ + width 4096 \ + activated True \ + visible True \ + sensitive False + } else { + send hcutAxes1 destroy ; send hcutAxes2 destroy + } +} + +# Create a marker to be used as the cursor indicator. +proc setHcutCursor { state } \ +{ + if {$state} { + set pts { {252 10} {260 10} {256 1} } + + send hcutPlot createMarker hcutCursor \ + type polygon \ + createMode noninteractive \ + lineColor black \ + fill True \ + fillColor yellow \ + x 256 \ + y 12 \ + width 8 \ + height 10 \ + knotSize 0 \ + activated True \ + visible False \ + sensitive False + send hcutCursor setVertices $pts + send hcutCursor set visible True + + } else { + send hcutCursor destroy + } +} + +# Label the axes on the horizontal cut plot. +proc drawHcutLabels { z1 z2 } \ +{ + set mid [expr "($z2-$z1)/2.0+$z1"] + set low [expr "($mid-$z1)/2.0+$z1"] + set high [expr "($z2-$mid)/2.0+$mid"] + + send hcutPlot "setColorIndex 6 ; \ + drawAlphaText 2 10 [format "%.1f" $z2] ; \ + drawAlphaText 2 34 [format "%.1f" $high] ; \ + drawAlphaText 2 64 [format "%.1f" $mid] ; \ + drawAlphaText 2 94 [format "%.1f" $low] ; \ + drawAlphaText 2 120 [format "%.1f" $z1]" +} + +# Draw the cursor position indicator on the horizontal cut plot. +proc drawHcutIndicator { xpos } \ +{ + global cutXScale cutXPos + + send hcutCursor move [expr ($xpos * $cutXScale)] 12 + set cutXPos $xpos +} + +# Track the cursor while in the cut-graph window. +proc hcutWCSUpdate { x y args } \ +{ + global cutYPos curTrack + if {$curTrack} { + wcsUpdate $x $cutYPos + } + drawHcutIndicator $x +} + + + + +################################################################################ +# Vertical Cut-Plot Routines +################################################################################ + +set vcutVec {} + +# Initiailize the vertical cut-plot +proc vcutInit args \ +{ + global cutYScale winWidth cutXPos cutYPos + + # Just get some dummy pixels, we only want the z1/z2 values so we can + # initialize the labels. + set xp [expr [send imagewin get width] / 2 ] + set yp [expr [send imagewin get height] / 2 ] + set pix [send client getPixels $xp $yp 2 2 ] + set z1 [lindex $pix 0] + set z2 [lindex $pix 1] + + send vcutPlot getPhysRes xr yr + send vcutPlot setLogRes $xr $yr + + set logy [send imagewin get height] + set logz [expr ($z2 - $z1)] + set cutYScale [expr ($yr * 1.0) / ($logy * 1.0)] + + # Initialize the labels. + send vcutPlot "setColorIndex 6; reset" + drawVcutLabels $z1 $z2 +} + +# Draw the horizontal cut-plot. +proc plotVcut { xpos ypos } \ +{ + global doVcut cutYScale + global vcutVec cutXPos plotSpeed + + + if { ($xpos == 0 && $ypos == 0) || ! $doVcut } \ + return + + # Do the vertical cut plot. + set height [send imagewin get height] + if {$plotSpeed} { + set pix [send client getPixels $xpos 0 1 $height 3 5 $cutYScale] + } else { + set pix [send client getPixels $xpos 0 1 $height 3 1 $cutYScale] + } + set z1 [lindex $pix 0] + set z2 [lindex $pix 1] + set vec [lrange $pix 2 end] + + # Draw the vector. + send vcutPlot setColorIndex background + send vcutPlot drawPolyline $vcutVec + send vcutPlot setColorIndex foreground + send vcutPlot drawPolyline $vec + set vcutVec $vec ;# save for later erasure + + # Mark the cursor position. + drawVcutIndicator $ypos + + # Minimize the screen refreshes to speed things up. + if { [expr "$xpos % 3"] == 0} { + catch { + drawVcutLabels $z1 $z2 ;# redraw the labels + } + send vcutAxes1 redraw ;# redraw the axes markers + send vcutAxes2 redraw + } +} + +# Erase the last plot rather than clear the screen and redraw it all. The +# erase is done by redrawing the last vector in the the background color. +proc eraseOldVcut args \ +{ + global cutYPos vcutVec + + send vcutPlot setColorIndex background + send vcutPlot drawPolyline $vcutVec + send vcutPlot setColorIndex foreground +} + +# Draw the horizontal cut-plot. +# Create markers to indicate axes on the vertical cut-plot. +proc drawVcutAxes { state } \ +{ + if {$state} { + send vcutPlot createMarker vcutAxes1 \ + type box \ + createMode noninteractive \ + lineColor gray60 \ + lineStyle 0 \ + x 60 \ + y 1 \ + height 4096 \ + width 30 \ + activated True \ + visible True \ + sensitive False + send vcutPlot createMarker vcutAxes2 \ + type box \ + createMode noninteractive \ + lineColor gray60 \ + lineStyle 0 \ + x 1 \ + y 1 \ + width 60 \ + height 4096 \ + activated True \ + visible True \ + sensitive False + } else { + send vcutAxes1 destroy ; send vcutAxes2 destroy + } +} + +# Create a marker to be used as the cursor indicator. +proc setVcutCursor { state } \ +{ + if {$state} { + set pts { {10 252} {10 260} {1 256} } + + send vcutPlot createMarker vcutCursor \ + type polygon \ + createMode noninteractive \ + lineColor black \ + fill True \ + fillColor yellow \ + x 12 \ + y 256 \ + width 10 \ + height 8 \ + knotSize 0 \ + activated True \ + visible False \ + sensitive False + send vcutCursor setVertices $pts + send vcutCursor set visible True + + } else { + send vcutCursor destroy + } +} + +# Label the axes on the vertical cut plot. +proc drawVcutLabels { z1 z2 } \ +{ + set mid [expr "($z2-$z1)/2.0+$z1"] + set low [expr "($mid-$z1)/2.0+$z1"] + set high [expr "($z2-$mid)/2.0+$mid"] + + # Initialize the label strings and positions. + set labels {} + foreach i [list $z2 $high $mid $low $z1] { + lappend labels [ format "%.1f" $i ] + } + set xposns { 2 28 58 88 112 } + + send vcutPlot "setColorIndex 6" + + # Draw each label vertically down the position since we can't rotate + # the text. + set xp 0 + foreach lab $labels { + set chars [split $lab {} ] + set yp 12 + set xpos [lindex $xposns $xp] + foreach ch $chars { + if {$ch == "."} { incr yp -4 } + send vcutPlot drawAlphaText $xpos $yp $ch + incr yp 10 + } + incr xp + } +} + + +# Draw the cursor position indicator on the horizontal cut plot. +proc drawVcutIndicator { ypos } \ +{ + global cutYScale cutYPos + + send vcutCursor move 12 [expr ($ypos * $cutYScale)] + set cutYPos $ypos +} + + +# Track the cursor while in the cut-graph window. +proc vcutWCSUpdate { x y args } \ +{ + global cutXPos curTrack + if {$curTrack} { + wcsUpdate $cutXPos $y + } + drawVcutIndicator $y +} + + + +################################################################################ +# UTILITY ROUTINES +################################################################################ + + +# TICSTEP -- Utility routine to compute nice ticmark steps in plots. +# [ NOT CURRENTLY USED. ] + +proc ticstep { range nsteps } \ +{ + set t2 0.301029996 + set t5 0.698970004 + set df [ expr "$range / double($nsteps + 1)" ] + if {$df > 0.0} { + set p1 [ expr "log10(double($df))" ] + } else { + set p1 [ expr "log10(double(-$df))" ] + } + set p2 [ expr "int($p1)" ] + set p3 [ expr "$p1 - $p2" ] + + if { $p3 < 0.0 } { + set p3 [ expr "$p2 + 1.0" ] + set p2 [ expr "$p2 - 1.0" ] + } + + if { $p3 < 1.0e-10 } { + set ticstep [ expr "pow(double(10.0),double($p2))" ] + } elseif { $p3 > 0. && $p3 <= $t2 } { + set ticstep [ expr "pow(double(10.0),double($p2 + $t2))" ] + } elseif { $p3 > $t2 && $p3 <= $t5 } { + set ticstep [ expr "pow(double(10.0),double($p2 + $t5))" ] + } elseif { $p3 > $t5 && $p3 <= 1.0 } { + set ticstep [ expr "pow(double(10.0),double($p2 + 1.))" ] + } else { + set ticstep $df + } + + set logtic [ expr "int(log10($ticstep)) - 1" ] + set scale [ expr "pow(double(10.0),double($logtic))" ] + set ticstep [ expr "int( ($ticstep / $scale) * $scale)" ] + + if {$ticstep < 0.1} { set ticstep 0.10 } + + return $ticstep +} + + diff --git a/vendor/x11iraf/ximtool/gui.bak/print.res b/vendor/x11iraf/ximtool/gui.bak/print.res new file mode 100644 index 00000000..aa88bd37 --- /dev/null +++ b/vendor/x11iraf/ximtool/gui.bak/print.res @@ -0,0 +1,304 @@ + +set Resources(print_panel) { \ + + !===================================== + ! Print Setup Panel resources. ! + !===================================== + *print_panel*TextToggle.alignment: left + *print_panel*Arrow.width: 16 + *print_panel*Arrow.height: 20 + *print_panel*TextToggle.frameWidth: 0 + *print_panel*TextToggle.height: 20 + *print_panel*Label.borderWidth: 0 + *print_panel*Label.shadowWidth: 0 + *print_panel*TextButton.width: 40 + *print_panel*TextButton.height: 25 + + *printLayout.borderWidth: 0 + *printLayout.layout: vertical { \ + -1 \ + printCmdGroup < +inf * > \ + -1 \ + optGroup < +inf -inf * +inf -inf > \ + -3 \ + cmdGroup < +inf * > \ + -1\ + } + + + ! Print Group resources. + !---------------------------------- + *printCmdGroup.borderWidth: 0 + *printCmdGroup.outerOffset: 5 + *printCmdGroup.label: + *printCmdGroup.location: 0 0 400 80 + *printCmdGroup*offIcon: diamond0s + *printCmdGroup*onIcon: diamond1s + *printCmdGroup*highlightColor: cyan + *printCmdGroup*Frame.frameType: sunken + *printCmdGroup*Frame.frameWidth: 1 + *printCmdGroup*Frame.width: 300 + *printCmdGroup*Label.justify: right + *printCmdGroup*Text*editType: edit + *printCmdGroup*Text*height: 22 + *printCmdGroup*TextToggle.width: 70 + *printCmdGroup*shadowWidth: 0 + *printCmdGroup*borderWidth: 0 + *printCmdLayout.borderWidth: 0 + *printCmdLayout.layout: horizontal { \ + labelLayout 5 inputLayout < +inf -inf * > \ + } + *labelLayout.borderWidth: 0 + *labelLayout.layout: vertical { 5 toLabel 7 printerLabel } + *printerLabel.label: Print Command: + *toLabel.label: Print To: + *toPrinter.label: Printer + *toPrinter.on: True + *toFile.label: File + + *inputLayout.borderWidth: 0 + *inputLayout.layout: horizontal { \ + 3 \ + vertical { \ + 5 \ + horizontal { 5 toPrinter 5 toFile 5 < +inf -inf > } \ + 5 \ + printcmdFrame < +inf -inf * > \ + 5 \ + } \ + 3 \ + } + *printcmd*string: lpr + *printcmd*height: 22 + *printcmd*Text*editType: edit + + + ! Main options groups layout resources. + !--------------------------------------- + *optGroup.frameWidth: 2 + *optGroup.frameType: chiseled + *optGroup.label: + *optGroup.location: 0 0 400 330 + *optGroup.outerOffset: 5 + *optGroup.innerOffset: 2 + *optLayout*borderWidth: 0 + *optLayout.layout: vertical { \ + -1 \ + horizontal { \ + vertical { \ + 5 \ + epsPageGroup < +inf -inf * > \ + optionsGroup < +inf -inf * +inf -inf > \ + -1 \ + } \ + vertical { \ + 5 \ + printColorGroup < +inf -inf * > \ + printerGroup < +inf -inf * > \ + -1 \ + } \ + -1 \ + } \ + 5 \ + horizontal { annOptsGroup < +inf * +inf > -1 } \ + -1 \ + } + + + ! Postscript Options group resources. + ! ----------------------------------- + *epsPageGroup.label: Postscript Options + *epsPageGroup.outerOffset: 7 + *epsPageGroup.innerOffset: 5 + *epsPageGroup.location: 0 0 250 150 + *epsPageGroup*offIcon: diamond0s + *epsPageGroup*onIcon: diamond1s + *epsPageGroup*highlightColor: cyan + *epsPage*Label.justify: left + *epsPage.layout: vertical { \ + -1 \ + epsOrientLabel 4 < -4 > \ + horizontal { 25 epsPortButton epsLandButton epsSquareButton -1 } \ + 4 \ + epsSizeLabel -1 \ + horizontal { \ + 25 epsLetterButton epsLegalButton epsA4Button epsB5Button -1 \ + } \ + 10 \ + horizontal { 5 epsScaleLabel 4 ScaleFrame < +inf -inf * > } \ + -1 \ + } + + + ! Page Layout resources. + ! ------------------------------- + *epsOrientLabel.label: Orientation: + *epsPortButton.label: Portrait + *epsPortButton.width: 65 + *epsLandButton.label: Landscape + *epsLandButton.width: 85 + *epsSquareButton.label: Square + *epsSquareButton.width: 70 + *epsSquareButton.sensitive: False + + *epsSizeLabel.label: Paper Size: + *epsLetterButton.label: Letter + *epsLetterButton.width: 60 + *epsLegalButton.label: Legal + *epsLegalButton.width: 60 + *epsA4Button.label: A4 + *epsA4Button.width: 50 + *epsB5Button.label: B5 + *epsB5Button.width: 50 + + ! Image scale box resources. + ! ------------------------------- + *epsScaleLabel.label: Output Image Scale: + *epsScaleLabel.justify: right + *ScaleFrame.frameType: sunken + *ScaleFrame.frameWidth: 1 + *ScaleFrame*shadowWidth: 0 + *ScaleLayout.location: 0 0 100 35 + *ScaleLayout.label: + *ScaleLayout.layout: horizontal { \ + SCdecrease SCtext < +inf -100% * > SCincrease \ + } + *SCdecrease.direction: left + *SCtext.width: 75 + *SCtext.height: 22 + *SCtext.label: 100 % + *SCincrease.direction: right + + + ! Miscellaneous print options box resources. + ! ------------------------------------ + *optionsGroup.outerOffset: 7 + *optionsGroup.innerOffset: 5 + *optionsGroup*onIcon: square1s + *optionsGroup*offIcon: square0s + *optionsGroup.label: Processing Options + *optionsGroup*TextToggle.width: 125 + *optionsGroup*TextToggle.highlightColor: yellow + *options.location: 0 0 250 60 + *options.frameWidth: 2 + *options.layout: horizontal { \ + 5 \ + vertical { -1 epsscaleButton 2 autorotateButton -1 } \ + 3 \ + vertical { -1 aspectButton 2 compressButton -1 } \ + -1 \ + } + *epsscaleButton.label: Auto Scale + *autorotateButton.label: Auto Rotate + *aspectButton.label: Max Aspect + *compressButton.label: RLE Compress + *compressButton.sensitive: False + + + ! Annotation options box resources. + ! ------------------------------------ + *annOptsGroup.outerOffset: 7 + *annOptsGroup.innerOffset: 5 + *annOptsGroup*onIcon: square1s + *annOptsGroup*offIcon: square0s + *annOptsGroup.label: Annotation Options + *annOptsGroup*TextToggle.width: 90 + *annOptsGroup*TextToggle.highlightColor: yellow + *annOptsGroup*Frame.frameType: sunken + *annOptsGroup*Frame.frameWidth: 1 + *annOptsGroup*Frame.width: 300 + *annOptsGroup*Text*editType: edit + *annOpts.frameWidth: 2 + *annOpts.location: 0 0 400 70 + *annOpts.layout: vertical { \ + 2 \ + horizontal { \ + 5 annotateButton 2 titleButton 2 bordersButton 2 colorbarButton 5 \ + } \ + 3 \ + horizontal { -1 titleLabel 2 titleFrame < +inf -inf * > -1 } \ + -1 \ + } + *annotateButton.label: \ Annotate + *titleButton.label: \ Title + *bordersButton.label: \ Borders + *colorbarButton.label: \ Colorbar + *titleLabel.label: Title String + *titleString*string: imtitle + *titleString*height: 23 + *titleString*Text*editType: edit + + + ! Output color box resources. + ! ------------------------------ + *printColorGroup.location: 0 0 150 90 + *printColorGroup.outerOffset: 7 + *printColorGroup.frameWidth: 2 + *printColorGroup*offIcon: diamond0s + *printColorGroup*onIcon: diamond1s + *printColorGroup*highlightColor: cyan + *printColorGroup.innerOffset: 5 + *printColorGroup.label: Output Color + *printColorGroup*TextToggle.width: 110 + *printColor.frameWidth: 2 + *printColor.location: 0 0 250 75 + *printColor.layout: horizontal { \ + 1 \ + vertical { -1 prGrayButton 2 prPseudoButton 2 prRGBButton -1 } \ + -1 \ + } + *prGrayButton.label: Grayscale + *prPseudoButton.label: PseudoColor + *prRGBButton.label: RGB + + ! Printer Selection. + ! -------------------------- + *printerGroup.label: Printers + *printerGroup.location: 0 0 110 130 + *printerGroup.shrinkToFit: True + *printerGroup.outerOffset: 7 + + *printers*Viewport.allowVert: True + *printers*Viewport.allowHoriz: False + *printers*Viewport.useRight: True + *printers*Viewport.resizeable: True + *printers*Scrollbar.width: 17 + *printers*Scrollbar.minimumThumb: 10 + *printers.layout: vertical { \ + 3 < -3 > \ + horizontal { \ + 2 < -2 > \ + printlistFrame < +inf -inf * +inff -inff > \ + 2 < -2 > \ + } \ + 3 < -3 > \ + } + + *printers*frameType: sunken + *printers*frameWidth: 1 + *printers*BorderWidth: 0 + *printers*Label.ShadowWidth: 0 + + *printlist.width: 100 + *printlist.height: 78 + + + ! Panel command resources. + ! ------------------------------ + *cmdGroup.frameType: chiseled + *cmdGroup.frameWidth: 2 + *cmdGroup.outerOffset: 5 + *cmdGroup.innerOffset: 5 + *cmdGroup.label: + *cmdGroup.location: 0 0 150 50 + *cmdLayout.borderWidth: 0 + *cmdLayout*Command.internalWidth: 12 + *cmdLayout.layout: horizontal { \ + 2 \ + okayPrint 1 < +inf > printStatus < +inf -inf * +inf -inf > \ + 2 \ + } + *cmdGroup*TextButton*location: 0 0 80 0 + *okayPrint.label: Print +} + diff --git a/vendor/x11iraf/ximtool/gui.bak/print.tcl b/vendor/x11iraf/ximtool/gui.bak/print.tcl new file mode 100644 index 00000000..983d2a15 --- /dev/null +++ b/vendor/x11iraf/ximtool/gui.bak/print.tcl @@ -0,0 +1,342 @@ + +################################################################################ +# Print Panel Functions. +################################################################################ + +# Global variables needed for the print setup panel + +set printColor prGrayButton +set orientation epsPortButton +set page_size epsLetterButton +set imageScale 100 + +set epsWidgets { epsPageGroup epsOrientLabel epsSizeLabel + epsPortButton epsLandButton epsLetterButton epsLegalButton epsA4Button + ScaleFrame SCdecrease SCtext SCincrease +} + + +proc psetup_init args \ +{ + global printColor orientation page_size imageScale #format + + set_printer toPrinter callback 1 + send SCtext set label [ format "%d %%" $imageScale ] + send $printColor set on true + send $orientation set on true + send $page_size set on true +} + + +proc doPrintOptions { param old new } \ +{ + global imageScale page_size orientation imageScale printColor + global warnings + + send printStatus set label {} + set val [join [lrange $new 1 end] " "] + + # print [format "doPrintOptions %s = %s" [lindex $new 0] $val] + switch [lindex $new 0] { + autoscale { if { $val == "True" } { + send epsscaleButton set on true + } elseif { $val == "False" } { + send epsscaleButton set on false + } + } + autorotate { if { $val == "True" } { + send autorotateButton set on true + } elseif { $val == "False" } { + send autorotateButton set on false + } + } + maxaspect { if { $val == "True" } { + send aspectButton set on true + } elseif { $val == "False" } { + send aspectButton set on false + } + } + annotate { if { $val == "True" } { + send annotateButton set on true + send titleButton setSensitive true + send colorbarButton setSensitive true + send bordersButton setSensitive true + send titleLabel setSensitive true + send titleString setSensitive true + } elseif { $val == "False" } { + send annotateButton set on false + send titleButton setSensitive false + send colorbarButton setSensitive false + send bordersButton setSensitive false + send titleLabel setSensitive false + send titleString setSensitive false + } + } + compress { if { $val == "True" } { + send compressButton set on true + } elseif { $val == "False" } { + send compressButton set on false + } + } + orientation { send $orientation set on false + if { $val == "portrait" } { + send epsPortButton set on true + set orientation epsPortButton + } elseif { $val == "landscape" } { + send epsPortButton set on false + set orientation epsLandButton + } + } + papersize { send $page_size set on false + if { $val == "letter" } { + send epsLetterButton set on true + set page_size epsLetterButton + } elseif { $val == "legal" } { + send epsLegalButton set on true + set page_size epsLegalButton + } elseif { $val == "A4" } { + send epsA4Button set on true + set page_size epsA4Button + } elseif { $val == "B5" } { + send epsB5Button set on true + set page_size epsB5Button + } + } + imscale { set imageScale $val + send SCtext set label [ format "%d %%" $imageScale ] + } + colortype { send $printColor set on false + if { $val == "gray" } { + send prGrayButton set on true + set printColor prGrayButton + } elseif { $val == "pseudo" } { + send prPseudoButton set on true + set printColor prPseudoButton + } elseif { $val == "rgb" } { + send prRGBButton set on true + set printColor prRGBButton + } + } + printerName { if [send toPrinter get on] { + send printlist highlight $val + } + } + printCmd { if [send toPrinter get on] { + send printcmd set string $val + } + } + printFile { if [send toFile get on] { + send printcmd set string $val + } + } + deviceType { if { $val == "Printer" } { + send printerLabel set label "Print Command:" + send toPrinter set on true + send toFile set on false + } elseif { $val == "File" } { + send printerLabel set label "File Name:" + send toPrinter set on false + send toFile set on true + send printlist unhighlight + } + } + dotitle { if { $val == "True" } { + send titleButton set on true + } elseif { $val == "False" } { + send titleButton set on false + } + } + doborders { if { $val == "True" } { + send bordersButton set on true + } elseif { $val == "False" } { + send bordersButton set on false + } + } + docolorbar { if { $val == "True" } { + send colorbarButton set on true + } elseif { $val == "False" } { + send colorbarButton set on false + } + } + title { send titleString set string $val + } + + status { send printStatus set label $val + send server synchronize + } + warning { if {$warnings} { Wexec server $val } + } + } +}; send printOptions addCallback doPrintOptions + + +# Print options procedures. +# ------------------------------- + +set prOptsWidgets { + toPrinter toFile + prGrayButton prPseudoButton prRGBButton + epsLandButton epsPortButton + epsLetterButton epsLegalButton epsA4Button epsB5Button + SCincrease SCdecrease +} +set prSimpleOptions { + epsscaleButton autorotateButton aspectButton annotateButton compressButton + titleButton bordersButton colorbarButton +} + +proc prPrintCommand { widget cbtype args } \ +{ + if [send toFile get on] { + send client setPrintOption printfile $args + send printStatus set label [format "output file set to %s" $args] + } else { + send client setPrintOption printcmd $args + send printStatus set label [format "print command set to %s" $args] + } +}; send printcmd addCallback prPrintCommand + +proc prTitleString { widget cbtype args } \ +{ + send client setPrintOption title $args +}; send titleString addCallback prTitleString + +proc prOptionToggle { widget cbtype args } \ +{ + global imageScale + + # Handle the image scale widgets first. + switch $widget { + SCincrease { set scale [expr $imageScale + 5] + send client setPrintOption imscale $scale + return + } + SCdecrease { set scale [ expr $imageScale - 5 ] + send client setPrintOption imscale $scale + return + } + } + + # If it's not one of those it must be one of the radio toggles. + set val [ send $widget get on ] + #print [ format "prOptionToggle %s = %s" $widget $val ] + if { $val == 1 } { + switch $widget { + toPrinter { send client setPrintOption devicetype printer } + toFile { send client setPrintOption devicetype file } + + epsLandButton { send client setPrintOption orientation landscape } + epsPortButton { send client setPrintOption orientation portrait } + + epsLetterButton { send client setPrintOption papersize letter } + epsLegalButton { send client setPrintOption papersize legal } + epsA4Button { send client setPrintOption papersize A4 } + epsB5Button { send client setPrintOption papersize B5 } + + prGrayButton { send client setPrintOption colortype gray } + prPseudoButton { send client setPrintOption colortype pseudo } + prRGBButton { send client setPrintOption colortype rgb } + } + } else { + send $widget set on true + } + +} ; foreach w $prOptsWidgets { send $w addCallback prOptionToggle } + +proc prSimpleOptionToggle { widget args } \ +{ + set val [ send $widget get on ] + #print [ format "prSimpleOptionToggle %s = %s" $widget $val ] + + switch $widget { + epsscaleButton { send client setPrintOption autoscale $val } + autorotateButton { send client setPrintOption autorotate $val } + aspectButton { send client setPrintOption maxaspect $val } + annotateButton { send client setPrintOption annotate $val } + compressButton { send client setPrintOption compress $val } + + titleButton { send client setPrintOption dotitle $val } + bordersButton { send client setPrintOption doborders $val } + colorbarButton { send client setPrintOption docolorbar $val } + } +} ; foreach w $prSimpleOptions { send $w addCallback prSimpleOptionToggle } + + + +# Printer display and selection. +# ------------------------------- +set lprList {} + +proc psSetPrintList {param old new} \ +{ + global lprList + set lprList $new + send printlist setList $new resize + send printlist highlight 0 +}; send printerList addCallback psSetPrintList + +proc lprResize args \ +{ + global lprList + send printlist setList $lprList resize + send printlist highlight 0 +}; send printlist addEventHandler lprResize ResizeRedirectMask + +proc psSelectPrint {widget cbtype selections indices} \ +{ + global printerlist + foreach selection $selections { + send client setPrintOption printername $selection + } +}; send printlist addCallback psSelectPrint + + +proc Print args \ +{ + global winWidth winHeight + send imagewin setCursorType busy + + # Get the print command or file template if not previous reset. + set val [ send printcmd get string ] + if [send toFile get on] { + send client setPrintOption printfile $val + } else { + send client setPrintOption printcmd $val + } + set val [ send titleString get string ] + send client setPrintOption title $val + setPrintCorners 0 [expr $winWidth - 1] [expr $winHeight - 1] 0 + + send client print + send imagewin setCursorType idle +} ; send okayPrint addCallback Print + + + +# setPrintCorners -- Tell the client the WCS of the image being printed. + +proc setPrintCorners { lx ly ux uy args } \ +{ + global winWidth winHeight + + # Convert raw corner screen coordinates to frame buffer raster coords. + send imagewin unmapPixel $lx $ly raster llx lly + set llx [expr "int ($llx)"] + set lly [expr "int ($lly)"] + set str [send client encodewcs $llx $lly] + scan $str "%g %g %g" llx_r lly_r z + set llx_i [expr "int ($llx_r)"] + set lly_i [expr "int ($lly_r)"] + + send imagewin unmapPixel $ux $uy raster urx ury + set urx [expr "int ($urx)"] + set ury [expr "int ($ury)"] + set str [send client encodewcs $urx $ury] + scan $str "%g %g %g" urx_r ury_r z + set urx_i [expr "int ($urx_r)"] + set ury_i [expr "int ($ury_r)"] + + send client setPrintOption corners $llx_i $lly_i $urx_i $ury_i +} + + diff --git a/vendor/x11iraf/ximtool/gui.bak/resources.res b/vendor/x11iraf/ximtool/gui.bak/resources.res new file mode 100644 index 00000000..201e2e16 --- /dev/null +++ b/vendor/x11iraf/ximtool/gui.bak/resources.res @@ -0,0 +1,26 @@ + +set Resources(gui) { \ + + ! GUI resources. + ! ------------------------------ + *autoscale: True + *zoomfactors: 1 2 4 8 + *displayCoords: True + *displayPanner: True + *displayMagnifier: False + *blinkRate: 1.0 + *pannerArea: 150*150 + *pannerGeom: -5+5 + *magnifierArea: 100*100 + *magnifierGeom: +5+5 + *wcsboxGeom: -5-5 + *maxContrast: 5.0 + *showToolBar: False + *showPanelBar: False + *warnings: True + *centerBoxSize: 5 + *peakCentroid: True +} + + + diff --git a/vendor/x11iraf/ximtool/gui.bak/rulers.tcl b/vendor/x11iraf/ximtool/gui.bak/rulers.tcl new file mode 100644 index 00000000..98f30a0f --- /dev/null +++ b/vendor/x11iraf/ximtool/gui.bak/rulers.tcl @@ -0,0 +1,524 @@ + + +################################################################################ +# RULER MARKERS +################################################################################ + +set rulerX 0 ;# ruler start in screen coords +set rulerY 0 +set rulerPts { {0 0} {0 0} {0 0} } ;# ruler vertices +set rulerList { } ;# ruler list + +set rulerSticky { } ;# list of sticky rulers +set isSticky "Sticky" ;# menu label + +set rulerWCS 0 ;# use WCS coords +set rulerXWCS 0 ;# ruler start in WCS units +set rulerYWCS 0 +set rulerXWCS2 0 ;# ruler end in WCS units +set rulerYWCS2 0 +set rulerFmt pixel ;# ruler label format + + +# Translations when pointer is inside marker. +set rulerTranslations { \ + !Ctrl b: call(prevFrame,$name) + !Ctrl b: call(prevFrame,$name) + !Ctrl f: call(nextFrame,$name) + !Ctrl h: call(move_cursor,-1,0) + !Ctrl j: call(move_cursor,0,1) + !Ctrl k: call(move_cursor,0,-1) + !Ctrl l: call(move_cursor,1,0) + !Ctrl n: call(normalize) + !Ctrl c: call(cpZoomAction,centerFrame) + !Ctrl i: call(cpInvert) + !Ctrl m: call(cpMatchFrames) + !Ctrl r: call(cpRegisterFrames) + !Ctrl p: call(togglePanner) + !Alt 1: call(cpSetFrame,frame1) + !Alt 2: call(cpSetFrame,frame2) + !Alt 3: call(cpSetFrame,frame3) + !Alt 4: call(cpSetFrame,frame4) + !Ctrl 1: call(cpZoom,1,1,fixed) + !Ctrl 2: call(cpZoom,2,2,fixed) + !Ctrl 3: call(cpZoom,3,3,fixed) + !Ctrl 4: call(cpZoom,4,4,fixed) + !Ctrl 5: call(cpZoom,5,5,fixed) + !Ctrl 6: call(cpZoom,6,6,fixed) + !Ctrl 7: call(cpZoom,7,7,fixed) + !Ctrl 8: call(cpZoom,8,8,fixed) + !Ctrl 9: call(cpZoom,9,9,fixed) + BackSpace: call(deleteNamedRuler,NAME,$x,$y) + Delete: call(deleteNamedRuler,NAME,$x,$y) + : m_input() + : call(setRulerMenu) popup(rulerMenu) + : popdown(rulerMenu) +!Ctrl : track-cursor() call(wcsUpdate,$x,$y) call(resizeRuler,$x,$y,0) + !Ctrl : call(deleteRuler,$x,$y) + : track-cursor() call(wcsUpdate,$x,$y) call(magnifierMapImage,$x,$y) +} + + + +# Popup menu in effect when inside marker. +set rulerMenuDescription { + { "Ruler" f.title } + { f.dblline } + { "$isSticky" f.exec { + toggleSticky $ruler + } } + { f.line } + { "Units" f.menu rulerUnits } + { "Color" f.menu rulerColor } + { f.line } + { "Draw into Frame" f.exec { + writeRuler $ruler + } sensitive False } + { f.line } + { "Destroy" f.exec { + scan $ruler "ruler%d" num + deleteNamedRuler $num x y + } } +} ; createMenu rulerMenu imagewin $rulerMenuDescription + +set rulerUnitsDescription { + { Units f.title } + { f.dblline } + { "Pixels" f.exec { setUnits $ruler pixel } } + { "Arc Seconds" f.exec { setUnits $ruler arcsec + } sensitive { ($rulerWCS > 0) ? "True" : "False"} } + { "Arc Minutes" f.exec { setUnits $ruler arcmin + } sensitive { ($rulerWCS > 0) ? "True" : "False"} } + { "Degrees" f.exec { setUnits $ruler degrees + } sensitive { ($rulerWCS > 0) ? "True" : "False"} } +} ; createMenu rulerUnits rulerMenu $rulerUnitsDescription + +set rulerColorDescription { + { Color f.title } + { f.dblline } + { "" f.exec "r_setColor $ruler black yellow" + bitmap solid foreground black } + { "" f.exec "r_setColor $ruler white black" + bitmap solid foreground white } + { "" f.exec "r_setColor $ruler red yellow" + bitmap solid foreground red } + { "" f.exec "r_setColor $ruler green black" + bitmap solid foreground green } + { "" f.exec "r_setColor $ruler blue white" + bitmap solid foreground blue } + { "" f.exec "r_setColor $ruler magenta black" + bitmap solid foreground magenta } + { "" f.exec "r_setColor $ruler cyan black" + bitmap solid foreground cyan } + { "" f.exec "r_setColor $ruler yellow black" + bitmap solid foreground yellow } +} ; createMenu rulerColor rulerMenu $rulerColorDescription + + +proc makeRuler {parent x y} \ +{ + global rulerTranslations ruleno rulerWCS rulerXWCS rulerYWCS + global rulerPts rulerX rulerY rulerList + global isSticky rulerMenuDescription rulerUnitsDescription + global coord coordLab + + + incr ruleno ; set ruler ruler$ruleno + + # Substitute so the marker translation will delete the marker + # by it's number rather than the default parent widget name. + regsub -all NAME $rulerTranslations $ruleno translations + + # Create the polygon for the marker. + send $parent createMarker $ruler \ + type polygon\ + createMode noninteractive\ + translations $translations\ + lineColor yellow\ + fill False\ + highlightWidth 1\ + highlightColor yellow\ + knotSize 0\ + activated True\ + visible False\ + sensitive True\ + x $x\ + y $y + + # Define a callback so we can identify the ruler. + send $ruler addCallback selectRuler focusIn focusOut + + # Create the text markers for the labels. + send $parent set markerTextFont 6x9 + makeLabelMarker $parent rulerXlab$ruleno 5ch 1ch + makeLabelMarker $parent rulerYlab$ruleno 5ch 1ch + makeLabelMarker $parent rulerHlab$ruleno 8ch 1ch + send $parent set markerTextFont 6x13 + + set rulerX $x ;# save the reference point + set rulerY $y + + set ref [ list $x $y ] ;# initialize the polygon + set rx [ list [expr "$x +1"] $y ] + set ry [ list $x [expr "$y +1"] ] + set rulerPts [list $ref $rx $ry ] + + send $ruler setVertices $rulerPts ;# set attributes + send $ruler set visible True" + send $ruler setAttribute autoRedraw True + + # See whether we have a WCS to use. + set rulerWCS 0 + set rulerXWCS 0 + set rulerYWCS 0 + for {set num 1} {$num <= 4 && $rulerWCS == 0} {incr num} { + if { [info exists coordLab(wcs$num)] } { + set xl [string tolower [lindex $coordLab(wcs$num) 0]] + set yl [string tolower [lindex $coordLab(wcs$num) 1]] + set fmt [string tolower [send fmtWcs$num get label] ] + if {$xl==" ra" || $xl=="elon" || $xl=="glon" || $xl=="slon"} { + set rulerWCS $num + set rulerXWCS [wcs2log [lindex $coord(wcs$num) 0] $xl $fmt] + set rulerYWCS [wcs2log [lindex $coord(wcs$num) 1] $yl $fmt] + } + } + } + + # Edit the menus. + set isSticky "Sticky" + editMenu rulerMenu imagewin $rulerMenuDescription + editMenu rulerUnits imagewin $rulerUnitsDescription + + + lappend rulerList $ruleno +} + +proc wcs2log { val label fmt} \ +{ + set newval $val + if {$fmt == "sexigesimal" || $fmt == "default"} { + scan $val "%d:%d:%f" h m s + set newval [expr "double($h) + double($m) / 60.0 + double($s) / 3600.0"] + if {$label == " ra"} { + set newval [expr "double($newval * 15.0)"] + } + } + return [expr "double($newval)" ] +} + + +proc resizeRuler {x y redraw} \ +{ + global rulerPts rulerX rulerY ruleno coord coordLab + global rulerWCS rulerXWCS rulerYWCS rulerFmt + global rulerXWCS2 rulerYWCS2 + + + # Track the mouse. + set ref [ list $rulerX $rulerY ] + set rx [ list $x $rulerY ] + set ry [ list $x $y ] + set rulerPts [list $ref $rx $ry ] + + # Compute the distances. + if {$rulerWCS > 0} { + set num $rulerWCS + set xl [string tolower [lindex $coordLab(wcs$num) 0]] + set yl [string tolower [lindex $coordLab(wcs$num) 1]] + set fmt [string tolower [send fmtWcs$num get label] ] + + # Save the cursor coords in WCS so we can convert labels. + if {$redraw} { + set nx $rulerXWCS2 + set ny $rulerYWCS2 + } else { + set nx [wcs2log [lindex $coord(wcs$num) 0] $xl $fmt] + set ny [wcs2log [lindex $coord(wcs$num) 1] $yl $fmt] + set rulerXWCS2 $nx + set rulerYWCS2 $ny + } + } + + if {$rulerFmt == "pixel"} { + set xdist [ expr "abs($x - $rulerX)" ] + set ydist [ expr "abs($y - $rulerY)" ] + set hdist [ expr "sqrt($xdist * $xdist + $ydist * $ydist)" ] + } else { + set xdist [ expr "abs($nx - $rulerXWCS)" ] + set ydist [ expr "abs($ny - $rulerYWCS)" ] + set hdist [ expr "sqrt($xdist * $xdist + $ydist * $ydist)" ] + } + + # Redraw the polygon. + send ruler$ruleno setVertices $rulerPts + + # Label the distances. + setXRulerLabel $x $y $xdist + setYRulerLabel $x $y $ydist + setHRulerLabel $x $y $hdist +} + +# Create a label marker for the ruler. +proc makeLabelMarker { parent name width height } \ +{ + send $parent createMarker $name \ + type text \ + createMode noninteractive \ + width $width \ + height $height \ + lineWidth 0 \ + imageText true \ + textBgColor yellow \ + textColor black \ + activated true \ + visible false +} + +proc setXRulerLabel { cx cy dist } \ +{ + global rulerX rulerY ruleno winWidth winHeight + global cpXscale rulerFmt + + send rulerXlab$ruleno set visible False + + if {[expr "abs($cx - $rulerX)"] > 30} { + switch $rulerFmt { + pixel { set text [format "%.1f" [expr "$dist / $cpXscale"] ] } + arcsec { set text [format "%.2f\"" [expr "$dist * 3600.0"] ] } + arcmin { set text [format "%.2f\'" [expr "$dist * 60.0"] ] } + degrees { set text [format "%.2fd" "$dist" ] } + } + set len [expr [string length $text] + 1] + send rulerXlab$ruleno "set width ${len}ch" + + # Compute the placement of the label marker. + if {$cy > $rulerY} { + set yp [expr "$rulerY - 14"] + } else { + set yp [expr "$rulerY + 2"] + } + if {$cx > $rulerX} { + set xp [expr "$rulerX + abs($cx - $rulerX)/2 - 10"] + } else { + set xp [expr "$rulerX - abs($cx - $rulerX)/2 - 10"] + } + + # Bounds checking. + if {$xp < 0} { set xp 1 } + if {$yp < 0} { set yp 1 } + if {$xp > $winWidth} { set xp [expr "$winWidth - 20" } + if {$yp > $winHeight} { set yp [expr "$winHeight - 20" } + + send rulerXlab$ruleno "setAttributes x $xp y $yp" + send rulerXlab$ruleno "set text \{$text\}; redraw erase" + + send rulerXlab$ruleno set visible True + } +} + +proc setYRulerLabel { cx cy dist } \ +{ + global rulerX rulerY ruleno winWidth winHeight + global cpYscale rulerFmt + + send rulerYlab$ruleno set visible False + + if {[expr "abs($cy - $rulerY)"] > 20} { + switch $rulerFmt { + pixel { set text [format "%.1f" [expr "$dist / $cpYscale"] ] } + arcsec { set text [format "%.2f\"" [expr "$dist * 3600.0"] ] } + arcmin { set text [format "%.2f\'" [expr "$dist * 60.0"] ] } + degrees { set text [format "%.2fd" "$dist" ] } + } + set len [expr [string length $text] + 1] + send rulerYlab$ruleno "set width ${len}ch" + + # Compute the placement of the label marker. + if {$cx > $rulerX} { + set xp [expr "$cx + 2"] + } else { + set xp [expr "$cx - $len * 6 - 5"] + } + if {$cy > $rulerY} { + set yp [expr "$rulerY + abs($cy - $rulerY)/2"] + } else { + set yp [expr "$rulerY - abs($cy - $rulerY)/2"] + } + + # Bounds checking. + if {$xp < 0} { set xp 1 } + if {$yp < 0} { set yp 1 } + if {$xp > $winWidth} { set xp [expr "$winWidth - 20" } + if {$yp > $winHeight} { set yp [expr "$winHeight - 20" } + + send rulerYlab$ruleno "setAttributes x $xp y $yp" + send rulerYlab$ruleno "set text \{$text\}; redraw erase" + send rulerYlab$ruleno set visible True + } +} + +proc setHRulerLabel { cx cy dist } \ +{ + global rulerX rulerY ruleno winWidth winHeight + global cpYscale cpXscale rulerFmt + + send rulerHlab$ruleno set visible False + + set xdist [ expr "abs($cx - $rulerX)" ] + set ydist [ expr "abs($cy - $rulerY)" ] + set hdist [ expr "sqrt($xdist * $xdist + $ydist * $ydist)" ] + + if {$hdist > 30} { + switch $rulerFmt { + pixel { set text [format "%.1f" [expr "$dist / $cpXscale"] ] } + arcsec { set text [format "%.2f\"" [expr "$dist * 3600.0"] ] } + arcmin { set text [format "%.2f\'" [expr "$dist * 60.0"] ] } + degrees { set text [format "%.2fd" "$dist" ] } + } + set len [expr [string length $text] + 1] + send rulerHlab$ruleno "set width ${len}ch" + + # Compute the placement of the label marker. + if {$cx > $rulerX} { + set xp [expr "$rulerX + abs($cx - $rulerX)/2 - $len * 6"] + } else { + set xp [expr "$rulerX - abs($cx - $rulerX)/2 - $len * 3"] + } + if {$cy > $rulerY} { + set yp [expr "$rulerY + abs($cy - $rulerY)/2"] + } else { + set yp [expr "$rulerY - abs($cy - $rulerY)/2"] + } + + # Bounds checking. + if {$xp < 0} { set xp 1 } + if {$yp < 0} { set yp 1 } + if {$xp > $winWidth} { set xp [expr "$winWidth - 20" } + if {$yp > $winHeight} { set yp [expr "$winHeight - 20" } + + send rulerHlab$ruleno "setAttributes x $xp y $yp" + send rulerHlab$ruleno "set text \{$text\}; redraw erase" + send rulerHlab$ruleno set visible True + } else { + send rulerHlab$ruleno set visible False + } +} + + +# Callback executed when a marker gets or loses the focus. +proc selectRuler {active_ruler event event_data} \ +{ + global ruler + switch $event { + focusIn { set ruler $active_ruler } + focusOut { } + } +} + +# Reset the ruler format type. +proc setUnits { ruler units } \ +{ + global rulerFmt rulerX rulerY + + send $ruler getVertices pts + set rulerX [lindex [lindex [lindex $pts 0] 0] 0] + set rulerY [lindex [lindex [lindex $pts 0] 0] 1] + set cx [lindex [lindex [lindex $pts 0] 1] 0] ; incr cx -1 + set cy [lindex [lindex [lindex $pts 0] 2] 1] ; incr cy -1 + + set rulerFmt $units + resizeRuler $cx $cy 1 +} + +# Menu option toggle callbacks. +proc toggleSticky { ruler } \ +{ + global isSticky rulerSticky rulerMenuDescription + + set index [ lsearch $rulerSticky $ruler] + if { $index >= 0 } { + # Remove it from the list. + set rulerSticky [lreplace $rulerSticky $index $index] + set isSticky "Sticky" + } else { + # Add it to the list. + lappend rulerSticky $ruler + set isSticky "UnSticky" + } + editMenu rulerMenu imagewin $rulerMenuDescription +} + +proc setRulerMenu args \ +{ + global ruler isSticky rulerSticky rulerMenuDescription + + if { [lsearch $rulerSticky $ruler] >= 0 } { + set isSticky "UnSticky" + } else { + set isSticky "Sticky" + } + editMenu rulerMenu imagewin $rulerMenuDescription +} + + +# Draw the ruler to the frame buffer as a graphic. +proc writeRuler { ruler } \ +{ +} + +# Change the color of the ruler. +proc r_setColor {ruler bgcolor fgcolor} { + + # Recolor the polygon. + send $ruler \ + "markpos; set lineColor $bgcolor; set highlightColor $bgcolor; redraw" + + # Recolor the labels. + scan $ruler "ruler%d" num + send rulerXlab$num \ + "markpos; set textBgColor $bgcolor; set textColor $fgcolor; redraw" + send rulerYlab$num \ + "markpos; set textBgColor $bgcolor; set textColor $fgcolor; redraw" + send rulerHlab$num \ + "markpos; set textBgColor $bgcolor; set textColor $fgcolor; redraw" +} + + +# Delete the current ruler, called when we have a Btn1Up on the current ruler. +proc deleteRuler {x y} { global ruleno ; deleteNamedRuler $ruleno $x $y } + +# Delete all rulers on the screen, usually called when the view changes. +# We preserve the rulers marked as 'sticky'. +proc deleteAllRulers args \ +{ + global rulerList rulerSticky + + foreach r $rulerList { + # Delete the ruler if it's not in the sticky list. + if { [lsearch $rulerSticky ruler$r] == -1 } { + deleteNamedRuler $r x y + } + } +} + +# Delete a particular ruler, usually called from the translation table on +# the marker itself. +proc deleteNamedRuler {name x y} \ +{ + global rulerList + + catch { + send ruler$name destroy + send rulerXlab$name destroy + send rulerYlab$name destroy + send rulerHlab$name destroy + } + + # Remove the ruler from the list. + set index [lsearch $rulerList $name] + set rulerList [lreplace $rulerList $index $index] +} + + + + diff --git a/vendor/x11iraf/ximtool/gui.bak/save.res b/vendor/x11iraf/ximtool/gui.bak/save.res new file mode 100644 index 00000000..81c45ace --- /dev/null +++ b/vendor/x11iraf/ximtool/gui.bak/save.res @@ -0,0 +1,143 @@ + +set Resources(save_panel) { \ + + !===================================== + ! Save Setup Panel resources. ! + !===================================== + *save_panel*TextToggle.alignment: left + *save_panel*TextToggle.frameWidth: 0 + *save_panel*TextToggle.height: 20 + *save_panel*Label.borderWidth: 0 + *save_panel*Label.shadowWidth: 0 + *save_panel*TextButton.width: 80 + + *saveLayout.borderWidth: 0 + *saveLayout.layout: vertical { \ + saveNameGroup < +inf * > \ + saveOptGroup < +inf -inf * > -3 \ + saveCmdGroup < +inf * > \ + } + + ! Save Name Group resources. + !---------------------------------- + *saveNameGroup.borderWidth: 0 + *saveNameGroup.outerOffset: 5 + *saveNameGroup.label: + *saveNameGroup.location: 0 0 400 50 + *saveNameGroup*offIcon: diamond0s + *saveNameGroup*onIcon: diamond1s + *saveNameGroup*highlightColor: cyan + *saveNameGroup*Frame.frameType: sunken + *saveNameGroup*Frame.frameWidth: 1 + *saveNameGroup*Label.justify: right + *saveNameGroup*Text*editType: edit + *saveNameGroup*shadowWidth: 0 + *saveNameGroup*borderWidth: 0 + *saveNameLayout.borderWidth: 0 + *saveNameLayout.layout: vertical { \ + 2 \ + horizontal { 5 saveLabel 5 fnameFrame < +inf -inf * > 5 } \ + 2 \ + } + *saveLabel.label: File Name: + *saveFile.height: 22 + + ! Main options groups layout resources. + !--------------------------------------- + *saveOptGroup.frameWidth: 2 + *saveOptGroup.frameType: chiseled + *saveOptGroup.label: + *saveOptGroup.location: 0 0 400 140 + *saveOptGroup.outerOffset: 5 + *saveOptGroup.innerOffset: 0 + *saveOptLayout*borderWidth: 0 + *saveOptLayout.layout: horizontal { \ + -1 \ + vertical { 5 < -5 > fmtGroup < +inf * +inf > -1 } \ + -1 \ + vertical { \ + 10 < -10 > \ + saveDataBox < +inff -inff * +inff -inff > \ + 5 < -5 > \ + } \ + -1 \ + vertical { 5 < -5 > saveColorGroup < +inf * +inf > -1 } \ + -1 \ + } + + ! Output color box resources. + ! ------------------------------ + *saveColorGroup.location: 0 0 140 120 + *saveColorGroup.outerOffset: 7 + *saveColorGroup.frameWidth: 2 + *saveColorGroup*offIcon: diamond0s + *saveColorGroup*onIcon: diamond1s + *saveColorGroup*highlightColor: cyan + *saveColorGroup.innerOffset: 5 + *saveColorGroup.label: Output Color + *saveColorGroup*TextToggle.width: 110 + *saveColor.frameWidth: 2 + *saveColor.layout: horizontal { \ + 3 \ + vertical { 5 svGrayButton 2 svPseudoButton 2 svRGBButton -1 } \ + -1 \ + } + *svGrayButton.label: Grayscale + *svPseudoButton.label: PseudoColor + *svRGBButton.label: RGB + + *saveDataBox.frameType: sunken + *saveDataBox.frameWidth: 1 + + + ! Output format box resources. + ! ----------------------------------- + *fmtGroup.location: 0 0 140 120 + *fmtGroup.outerOffset: 7 + *fmtGroup.frameWidth: 2 + *fmtGroup*offIcon: diamond0s + *fmtGroup*onIcon: diamond1s + *fmtGroup*TextToggle.width: 55 + *fmtGroup*highlightColor: cyan + *fmtGroup.label: File Format + *formats.layout: horizontal { \ + 3 \ + vertical { 5 fitsButton 2 gifButton 2 tiffButton 2 rawButton 1 } \ + 2 < -2 > \ + vertical { 5 epsButton 2 rasButton 2 x11Button 2 jpegButton 1 } \ + -1 \ + } + *rasButton.label: RAS + *gifButton.label: GIF + *jpegButton.label: JPEG + *tiffButton.label: TIFF + *fitsButton.label: FITS + *x11Button.label: X11 + *epsButton.label: EPS + *rawButton.label: Raw + + ! Change the sensitivity once these formats are implemented. ! + !------------------------------------------------------------- + *jpegButton.sensitive: False + *x11Button.sensitive: False + *rawButton.sensitive: False + + + ! Panel command resources. + ! ------------------------------ + *saveCmdLayout.borderWidth: 0 + *saveCmdGroup.frameType: chiseled + *saveCmdGroup.frameWidth: 2 + *saveCmdGroup.outerOffset: 5 + *saveCmdGroup.innerOffset: 5 + *saveCmdGroup.label: + *saveCmdGroup.location: 0 0 400 50 + *saveCmdLayout*Command.internalWidth: 12 + *saveCmdLayout.layout: horizontal { \ + 2 \ + okaySave 1 < +inf -1 > saveStatus < +inf -inf * > \ + 2 \ + } + *okaySave.label: Save +} + diff --git a/vendor/x11iraf/ximtool/gui.bak/save.tcl b/vendor/x11iraf/ximtool/gui.bak/save.tcl new file mode 100644 index 00000000..36706d31 --- /dev/null +++ b/vendor/x11iraf/ximtool/gui.bak/save.tcl @@ -0,0 +1,156 @@ + +################################################################################ +# Save panel functions. +################################################################################ + +# Global variables needed for the save setup panel + +set format rasButton +set saveColor svPseudoButton + +set fileFmtButtons { + rasButton gifButton jpegButton tiffButton + fitsButton x11Button epsButton rawButton +} + + +# Format group procedures. +#--------------------------------- + +# Select a format. + +proc set_format { widget func state args } \ +{ + global format saveColor + + send $format set on false + if {$widget == $format} { + send $widget set on true + } else { + switch $widget { + rasButton { send client setSaveOption format ras } + gifButton { send client setSaveOption format gif } + jpegButton { send client setSaveOption format jpeg } + tiffButton { send client setSaveOption format tiff } + fitsButton { send client setSaveOption format fits } + x11Button { send client setSaveOption format x11 } + epsButton { send client setSaveOption format eps } + rawButton { send client setSaveOption format raw } + } + } +} ; foreach fmt $fileFmtButtons { send $fmt addCallback set_format } + +proc setSaveFile { widget cbtype args } \ +{ + send client setSaveOption fname $args + send saveStatus set label [format "output file set to %s" $args] +}; send saveFile addCallback setSaveFile + + +proc doSaveOptions { param old new } \ +{ + global format saveColor + global warnings + + send saveStatus set label {} + set val [join [lrange $new 1 end] " "] + + #print [format "doSaveOptions %s = %s" [lindex $new 0] $val] + switch [lindex $new 0] { + format { + # Now (de)sensitize the color options depending on the format, + # force the color choice when needed. + send $format set on false + switch [lindex $val 0] { + ras { #send svRGBButton setSensitive false + send svPseudoButton setSensitive true + set format rasButton + } + gif { send svRGBButton setSensitive false + send svPseudoButton setSensitive true + if {$saveColor == "svRGBButton"} { + send $saveColor set on false + send svPseudoButton set on true + set saveColor svPseudoButton + } + set format gifButton + } + jpeg { send svRGBButton setSensitive true + send svPseudoButton setSensitive true + set format jpegButton + } + tiff { send svRGBButton setSensitive false + send svPseudoButton setSensitive true + set format tiffButton + } + fits { send svRGBButton setSensitive false + send svPseudoButton setSensitive false + send $saveColor set on false + send svGrayButton set on true + set saveColor svGrayButton + set format fitsButton + } + x11 { send svRGBButton setSensitive true + send svPseudoButton setSensitive true + set format x11Button + } + eps { send svRGBButton setSensitive true + send svPseudoButton setSensitive true + set format epsButton + } + raw { send svRGBButton setSensitive true + send svPseudoButton setSensitive true + set format rawButton + } + } + send $format set on true + } + color { send $saveColor set on false + switch [lindex $val 0] { + grayscale { send svGrayButton set on true + set saveColor svGrayButton + } + pseudocolor { send svPseudoButton set on true + set saveColor svPseudoButton + } + rgb { send svRGBButton set on true + set saveColor svRGBButton + } + } + } + fname { send saveFile set string $val + } + status { send saveStatus set label $val + send server synchronize + } + text { send saveData set label $val + } + warning { if {$warnings} { Wexec server $val } + } + } +} ; send saveOptions addCallback doSaveOptions + + +# Color group procedures. +#--------------------------------- +send svGrayButton addCallback "send client setSaveOption color grayscale" +send svPseudoButton addCallback "send client setSaveOption color pseudocolor" +send svRGBButton addCallback "send client setSaveOption color rgb" + + +proc Save args \ +{ + global panel_up + + send imagewin setCursorType busy + + # Get the print command or file template if not previous reset. + set val [ send saveFile get string ] + send client setSaveOption fname $val + send saveStatus set label [format "output file set to %s" $args] + + send client save + send imagewin setCursorType idle +} ; send okaySave addCallback Save + + diff --git a/vendor/x11iraf/ximtool/gui.bak/tcl.obj b/vendor/x11iraf/ximtool/gui.bak/tcl.obj new file mode 100644 index 00000000..3bea2d87 --- /dev/null +++ b/vendor/x11iraf/ximtool/gui.bak/tcl.obj @@ -0,0 +1,13 @@ + +set Objects(tcl_panel) { \ + toplevel TopLevelShell tcl_panel\ + tcl_panel Layout tclLayout\ + tclLayout Group tclCmdGroup\ + tclCmdGroup Layout tclCmd\ + tclCmd Command tclClear\ + tclCmd Command tclExecute\ + tclCmd Command tclDismiss\ + tclLayout Frame tclFrame\ + tclFrame AsciiText tclEntry\ +} + diff --git a/vendor/x11iraf/ximtool/gui.bak/tcl.res b/vendor/x11iraf/ximtool/gui.bak/tcl.res new file mode 100644 index 00000000..6c250bc7 --- /dev/null +++ b/vendor/x11iraf/ximtool/gui.bak/tcl.res @@ -0,0 +1,44 @@ +set Resources(tcl_panel) { \ + + !-------------------------------- + ! Define a debug Tcl shell. + !-------------------------------- + *tcl_panel.width: 550 + *tcl_panel.height: 180 + *tcl_panel.title: Debug TCL Command Entry + *tclLayout*borderWidth: 0 + *tclLayout*Frame.frameType: sunken + *tclLayout*Frame.frameWidth: 2 + *tclLayout.layout: vertical { \ + 0 < +0 -0 > \ + tclCmdGroup < +inf -inf * > \ + tclFrame < +inf -inf * +inf -inf> \ + 0 < +0 -0 > \ + } + *tclEntry*foreground: black + *tclEntry*editType: edit + *tclEntry*type: string + *tclEntry*font: 7x13 + *tclEntry*scrollVertical: Always + *tclEntry*scrollHorizontal: whenNeeded + + *tclCmdGroup.label: + *tclCmdGroup.outerOffset: 0 + *tclCmdGroup.innerOffset: 0 + *tclCmd.layout: vertical { \ + 5 \ + horizontal { \ + 5 \ + tclClear 3 \ + tclExecute \ + 10 < +inf -10> \ + tclDismiss \ + 5 \ + } \ + 5 \ + } + *tclClear.label: Clear + *tclExecute.label: Execute + *tclDismiss.label: Dismiss +} + diff --git a/vendor/x11iraf/ximtool/gui.bak/tcl.tcl b/vendor/x11iraf/ximtool/gui.bak/tcl.tcl new file mode 100644 index 00000000..44d5e04e --- /dev/null +++ b/vendor/x11iraf/ximtool/gui.bak/tcl.tcl @@ -0,0 +1,36 @@ + +################################################ +# Define some TCL debug procedures. +################################################ + +set tcl_up 0 + +proc tclCommandClear {widget args} { send tclEntry set string "" } +proc tclCommandExecute {widget args} { send server [send tclEntry {get string}] +} +proc tclCommand {widget mode command args} { send server $command } +proc tclClose {widget args} { send tcl_panel unmap } +proc tclOpen args \ +{ + global tcl_up + send tcl_panel map + set tcl_up 1 +} + +proc tclPanel args \ +{ + global tcl_up + if {$tcl_up} { + send tcl_panel unmap + set tcl_up 0 + } else { + send tcl_panel map + set tcl_up 1 + } +} + +send tclClear addCallback tclCommandClear +send tclExecute addCallback tclCommandExecute +send tclEntry addCallback tclCommand +send tclDismiss addCallback tclClose + diff --git a/vendor/x11iraf/ximtool/gui.bak/tile.res b/vendor/x11iraf/ximtool/gui.bak/tile.res new file mode 100644 index 00000000..29390013 --- /dev/null +++ b/vendor/x11iraf/ximtool/gui.bak/tile.res @@ -0,0 +1,149 @@ + +set Resources(tile_panel) { \ + + *tileOpts.frameType: chiseled + *tileOpts.frameWidth: 2 + *tileOpts.outerOffset: 5 + *tileOpts.innerOffset: 7 + *tileOpts*shrinkToFit: True + *tileOpts*borderWidth: 0 + + *toptLayout.layout: vertical { \ + horizontal { -6 tFramesG < +inf -inf * > -6 } \ + horizontal { \ + -1 \ + horizontal { -6 tileMode < * +inf -inf > -6 } \ + vertical { \ + horizontal { -3 userOrientG < +inf -inf * > -3 } \ + horizontal { -3 fillStyle < +inf -inf * > -3 } \ + horizontal { -3 tileLabel < +inf -inf * > -3 } \ + -7 \ + horizontal { -3 geomFrame < +inf -inf * > -3 } \ + } \ + -1 \ + } \ + -4 \ + } + *tileMode.label: Tile Mode + *tileMode.outerOffset: 7 + *tileMode.innerOffset: 5 + *tileMode*location: 0 0 150 20 + *tileMode*TextToggle.outerOffset: 2 + *tileMode*TextToggle.innerOffset: 1 + *tileMode*TextToggle.frameWidth: 0 + *tileMode*TextToggle.leftMargin: 10 + *tileMode*TextToggle.rightMargin: 20 + *tileMode*TextToggle.onIcon: diamond1s + *tileMode*TextToggle.offIcon: diamond0s + *tileMode*TextToggle.highlightColor: yellow + + *tileDisabled.label: Disabled + *tileManual.label: Manual + *tileBest.label: Best + *tileSquare.label: Square + *tileHorizontal.label: Horizontal + *tileVertical.label: Vertical + *tileRow.label: One Row + *tileCol.label: One Column + + *fillStyle.label: Fill Style + *fillStyle.location: 0 0 160 30 + *fillStyle.outerOffset: 7 + *fillStyle.innerOffset: 5 + *fillStyle.rows: 1 + *fillStyle*selectionStyle: multi + *fillStyle*outerOffset: 0 + *fillStyle*innerOffset: 1 + *fillStyle*leftMargin: 7 + *fillStyle*onIcon: square1s + *fillStyle*offIcon: square0s + *fillStyle*highlightColor: yellow + *fillStyle.TextToggle.frameWidth: 0 + *fillStyle.TextToggle.location: 0 0 85 23 + *byCols.label: Fill by Columns + *bottomUp.label: Fill from Bottom + + *tileLabel.label: Tile Labels + *tileLabel.location: 0 0 175 30 + *tileLabel.outerOffset: 7 + *tileLabel.innerOffset: 5 + *tileLabel.rows: 1 + *tileLabel*selection: -1 + *tileLabel*outerOffset: 0 + *tileLabel*innerOffset: 1 + *tileLabel*leftMargin: 7 + *tileLabel*onIcon: square1s + *tileLabel*offIcon: square0s + *tileLabel*highlightColor: yellow + *tileLabel.TextToggle.frameWidth: 0 + *tileLabel.TextToggle.location: 0 0 85 23 + *labelFrames.label: Frameno + *labelImname.label: Img Name + *labelTitles.label: Img Title + + *geomFrame.frameWidth: 0 + *geomFrame.frameType: sunken + *geomFrame.outerOffset: 7 + *geomFrame.innerOffset: 4 + *tileGeometry.width: 220 + *tileGeometry.height; 37 + *tileGeometry.background: gray77 + *tileGeometry.font: 7x13bold + *tileGeometry.label: Tile Geometry: 1 x 2 + + *userOrientG.label: Manual Configuration + *userOrientG.height: 90 + *userOrientG.width: 220 + *userOrientG.outerOffset: 7 + *userOrientG.innerOffset: 5 + *userOrientG.shrinkToFit: True + *userOrientG*Frame.frameWidth: 1 + *userOrientG*Frame.frameType: sunken + *userOrientG*Text.height: 21 + *userOrientG*Text*editType: edit + *userOrientL.borderWidth: 0 + *userOrientL.layout: vertical { \ + 1 \ + horizontal { 18 nrowLab < +50% -inf * > nrFrame < +inf -inf * > 5 } \ + 1 \ + horizontal { ncolLab < +50% -inf * > ncFrame < +inf -inf * > 5 } \ + } + *nrowLab.justify: right + *ncolLab.justify: right + + *nrLayout.layout: horizontal {nrdecrease nrtext < +inf -inf * > nrincrease} + *nrdecrease.direction: left + *nrincrease.direction: right + *nrowLab.label: Tile Rows: + *nrtext.background: gray68 + *nrtext.justify: center + *nrtext.font: 7x13bold + *nrtext.label: 1 + + *ncLayout.layout: horizontal {ncdecrease nctext < +inf -inf * > ncincrease} + *ncdecrease.direction: left + *ncincrease.direction: right + *ncolLab.label: Tile Columns: + *nctext.background: gray68 + *nctext.justify: center + *nctext.font: 7x13bold + *nctext.label: 2 + + *tFramesG.label: Tile Frames + *tFramesG.outerOffset: 7 + *tFramesG.innerOffset: 7 + *tFrames.borderWidth: 0 + *tFrames*Toggle.height: 17 + *tFrames.layout: horizontal { \ + tAll \ + 2 \ + tFrame1 tFrame2 tFrame3 tFrame4 tFrame5 \ + tFrame6 tFrame7 tFrame8 tFrame9 tFrame10 \ + tFrame11 tFrame12 tFrame13 tFrame14 tFrame15 tFrame16 \ + 2 \ + tNone \ + } + *tAll.label: All\ + *tNone.label: None +} + diff --git a/vendor/x11iraf/ximtool/gui.bak/tile.tcl b/vendor/x11iraf/ximtool/gui.bak/tile.tcl new file mode 100644 index 00000000..279475ab --- /dev/null +++ b/vendor/x11iraf/ximtool/gui.bak/tile.tcl @@ -0,0 +1,214 @@ + +################################################################################ +# TILE GEOMETRY +################################################################################ + +set tileSel 2 +set tileOpt 0 +set tileNcols 2 +set tileNrows 1 +set tile_frames {} + +proc selectTileOrientation { widget type select args } \ +{ + global tileSel tileOpt + + set w { nrowLab ncolLab nrdecrease nrincrease ncdecrease ncincrease } + if {$select == "Manual"} { + foreach p $w { send $p setSensitive True } + } elseif {$select != "none"} { + foreach p $w { send $p setSensitive False } + } + + set w { byCols bottomUp labelFrames labelImname labelTitles } + if {$select == "Disabled"} { + foreach p $w { send $p setSensitive False } + } else { + foreach p $w { send $p setSensitive True } + } + + switch $select { + Disabled { set tileSel 0 } + Manual { set tileSel 1 + set nx [send nctext get label] + set ny [send nrtext get label] + set select [format "%dx%d" $nx $ny] + } + Best { set tileSel 2 } + Square { set tileSel 3 } + Horizontal { set tileSel 4 } + Vertical { set tileSel 5 } + "One Row" { set tileSel 6 } + "One Column" { set tileSel 7 } + none { send tileMode set selection $tileSel ; return } + } + + # Reset the button in case we're called directly from elsewhere. + send tileMode set selection $tileSel + + # Send the option to the client. + if {$tileSel > 0} { + setTileFrames + send client setOption tileFrames "True" + set tileOpt $tileSel + } else { + send client setOption tileFrames "False" + } + +} ; send tileMode addCallback selectTileOrientation + +proc tileSelToLabel { selection args } \ +{ + switch $selection { + 0 { return "Disabled" } + 1 { return "Manual" } + 2 { return "Best" } + 3 { return "Square" } + 4 { return "Horizontal" } + 5 { return "Vertical" } + 6 { return "One Row" } + 7 { return "One Column" } + } + return "Best" +} + +# Callback for the fill style options. +proc selectFillStyle { widget type state args } \ +{ + if {$state} { set not False } else { set not True } + + switch $widget { + byCols { send client setOption tileByRows $not } + bottomUp { send client setOption tileTopDown $not } + } +} ; foreach w {byCols bottomUp} { send $w addCallback selectFillStyle } + +# Callback for the tile labelling options. +proc selectTileLabels { widget type state args } \ +{ + if {$state} { + switch $widget { + labelFrames { send client setOption tileLabels 1 } + labelImname { send client setOption tileLabels 2 } + labelTitles { send client setOption tileLabels 3 } + } + } else { + send client setOption tileLabels 0 + } + send $widget set on $state +} +foreach w {labelFrames labelImname labelTitles} { + send $w addCallback selectTileLabels +} + +# Callback for the Tile Frame selection toggles. +proc setTileFrames args \ +{ + global tile_frames tileSel tileNcols tileNrows + + # No-op if tiling isn't enabled. + if {$tileSel == 0} \ + return + + # Get the new tile frames list. + set tile_frames {} + for {set i 1} {$i <= 16} {incr i} { + if {[send tFrame$i get state]} { + lappend tile_frames $i + } + } + + # Reset the geometry. + set geom [format "%dx%d" $tileNcols $tileNrows] + switch $tileSel { + 1 { send client setOption tileGeom $geom \{ $tile_frames \} } + 2 { send client setOption tileGeom Best \{ $tile_frames \} } + 3 { send client setOption tileGeom Square \{ $tile_frames \} } + 4 { send client setOption tileGeom Horizontal \{ $tile_frames \} } + 5 { send client setOption tileGeom Vertical \{ $tile_frames \} } + 6 { send client setOption tileGeom Row \{ $tile_frames \} } + 7 { send client setOption tileGeom Column \{ $tile_frames \} } + } +}; for {set i 1} {$i <= 16} {incr i} {send tFrame$i addCallback setTileFrames} + +proc setAllTileFrames args \ +{ + global tileNcols tileNrows + for {set i 1} {$i <= 16} {incr i} { + if {[send tFrame$i get sensitive]} { + send tFrame$i set state True + } + } + setTileFrames +} ; send tAll addCallback setAllTileFrames + +proc setNoTileFrames args \ +{ + global tileNcols tileNrows + for {set i 1} {$i <= 16} {incr i} { + if {[send tFrame$i get sensitive]} { + send tFrame$i set state False + } + } + setTileFrames +} ; send tNone addCallback setNoTileFrames + +proc tileOptions { param old new } \ +{ + global tileNcols tileNrows + + set tileNcols [lindex $new 0] + set tileNrows [lindex $new 1] + + # Set the geometry. + send nctext set label $tileNcols + send nrtext set label $tileNrows + send tileGeometry set label [format \ + "Tile Geometry: %-2dx%2d" $tileNcols $tileNrows] + +} ; send tileOptions addCallback tileOptions + + +proc tileSetRows { widget args } \ +{ + global nframes tile_frames + + set nx [send nctext get label] + set ny [send nrtext get label] + + if {$widget == "nrdecrease" && [expr ($ny-1)] > 0} { + incr ny -1 + } elseif {$widget == "nrincrease" && [expr ($ny+1)] <= $nframes} { + incr ny 1 + } else { + return + } + set geom [format "%dx%d" $nx $ny] + send client setOption tileGeom $geom $tile_frames +} ; foreach w { nrdecrease nrincrease } { send $w addCallback tileSetRows } + +proc tileSetCols { widget args } \ +{ + global nframes tile_frames + + set nx [send nctext get label] + set ny [send nrtext get label] + + if {$widget == "ncdecrease" && [expr ($nx-1)] > 0} { + incr nx -1 + } elseif {$widget == "ncincrease" && [expr ($nx+1)] <= $nframes} { + incr nx 1 + } else { + return + } + set geom [format "%dx%d" $nx $ny] + send client setOption tileGeom $geom $tile_frames +} ; foreach w { ncdecrease ncincrease } { send $w addCallback tileSetCols } + + +# Initialize the frame tiling. +setAllTileFrames +selectTileOrientation junk junk Disabled +selectFillStyle byRows junk True +selectFillStyle topDown junk True +selectTileLabels labelImname junk False diff --git a/vendor/x11iraf/ximtool/gui.bak/toolbars.tcl b/vendor/x11iraf/ximtool/gui.bak/toolbars.tcl new file mode 100644 index 00000000..626b93e3 --- /dev/null +++ b/vendor/x11iraf/ximtool/gui.bak/toolbars.tcl @@ -0,0 +1,555 @@ + + +################################################################################ +# +# XIMTOOL-ALT -- Procedures and declarations for the ALT GUI. +# +################################################################################ + +# Creat the bitmaps needed for the alternate optional bars. + +createBitmap tools 16 16 { + 0xff, 0xff, 0xff, 0xff, 0x03, 0xc0, 0xf3, 0xcf, 0xf3, 0xcf, 0xf3, 0xcf, + 0x83, 0xc1, 0x83, 0xc1, 0x83, 0xc1, 0x83, 0xc1, 0x83, 0xc1, 0x83, 0xc1, + 0x83, 0xc1, 0x03, 0xc0, 0xff, 0xff, 0xff, 0xff}; + +createBitmap control 16 16 { + 0xff, 0xff, 0xff, 0xff, 0x03, 0xc0, 0xe3, 0xc7, 0xe3, 0xcf, 0x33, 0xcc, + 0x33, 0xc0, 0x1b, 0xc0, 0x1b, 0xc0, 0x1b, 0xc0, 0x33, 0xcc, 0xf3, 0xcf, + 0xe3, 0xc7, 0x03, 0xc0, 0xff, 0xff, 0xff, 0xff}; + +createBitmap tile 16 16 { + 0xff, 0xff, 0xff, 0xff, 0x83, 0xc1, 0x83, 0xc1, 0x83, 0xc1, 0x83, 0xc1, + 0x83, 0xc1, 0xff, 0xff, 0xff, 0xff, 0x83, 0xc1, 0x83, 0xc1, 0x83, 0xc1, + 0x83, 0xc1, 0x83, 0xc1, 0xff, 0xff, 0xff, 0xff}; + +createBitmap compass 16 16 { + 0x00, 0x00, 0x00, 0x02, 0x00, 0x07, 0x80, 0x0f, 0xc0, 0x1f, 0x00, 0x07, + 0x00, 0x07, 0x00, 0x07, 0x00, 0x07, 0x00, 0x07, 0x00, 0x07, 0xfc, 0x07, + 0xfc, 0x07, 0xfc, 0x07, 0x00, 0x00, 0x00, 0x00} + +createBitmap plus 11 11 { + 0x00, 0x00, 0x70, 0x00, 0x70, 0x00, 0x70, 0x00, 0xfe, 0x03, 0xfe, 0x03, + 0xfe, 0x03, 0x70, 0x00, 0x70, 0x00, 0x70, 0x00, 0x00, 0x00}; + +createBitmap minus 11 11 { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x03, 0xfe, 0x03, + 0xfe, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; + +createBitmap disk 16 16 { + 0xfe,0x1f,0x11,0x25,0x11,0x45,0x11,0x44,0xf1,0x47,0x01,0x40,0x01,0x40,0xf9, + 0x4f,0x05,0x50,0x05,0x50,0x05,0x50,0x05,0x50,0x05,0x50,0x05,0x50,0xff,0x7f, + 0x00,0x00}; + +createBitmap printer 32 16 { + 0x00, 0xfe, 0x07, 0x00, 0x00, 0x02, 0x0a, 0x00, 0x00, 0x02, 0x12, 0x00, + 0x00, 0x02, 0x22, 0x00, 0x00, 0x02, 0x3e, 0x00, 0x00, 0x02, 0x20, 0x00, + 0x00, 0x02, 0x20, 0x00, 0xe0, 0x03, 0xe0, 0x03, 0x10, 0x03, 0xe0, 0x06, + 0x08, 0xff, 0x7f, 0x09, 0x04, 0x00, 0x00, 0x10, 0xfc, 0xff, 0xff, 0x1f, + 0x04, 0x00, 0x00, 0x10, 0xfc, 0xff, 0xff, 0x1f, 0x08, 0x00, 0x00, 0x08, + 0xf8, 0xff, 0xff, 0x0f}; + + +send tbBlinkDec "set bitmap larrow" ;# Assign the bitmaps to the buttons. +send tbBlinkInc "set bitmap rarrow" +send tbZoomIn "set bitmap plus" +send tbZoomOut "set bitmap minus" +send tbTile "set bitmap tile" +send tbCompass "set bitmap compass; addCallback toggleCompass" +#send helpButton "set bitmap qmark; addCallback Help" +send mXflipButton "set bitmap xflip; addCallback xflip" +send mYflipButton "set bitmap yflip; addCallback yflip" +send mNextButton "set bitmap rarrow; addCallback nextFrame" +send mPrevButton "set bitmap larrow; addCallback prevFrame" + + +# toolBox -- Toggle the toolbox and panelbar display. + +set toolbox_up [ true $showToolBar ] +set panelbar_up [ true $showPanelBar ] + +proc toolBoxToggle args \ +{ + global toolbox_up + + set w [send display get width] ; set h [send display get height] + set iw [send imagewin get width] ; set ih [send imagewin get height] + + if {$toolbox_up} { + send toolbar set height 0 + send toolButton set state 0 + send imagewin "set width $iw; set height $ih" + set nh [expr $h - 25] + send display "set width $w; set height $nh" + set toolbox_up 0 + send mXflipButton map + send mYflipButton map + send mPrevButton map + send mFrameButton map + send mNextButton map + } else { + send toolbar set height 25 + send toolButton set state 1 + send imagewin "set width $iw; set height $ih" + set nh [expr $h + 25] + send display "set width $w ; set height $nh" + set toolbox_up 1 + send mXflipButton unmap + send mYflipButton unmap + send mPrevButton unmap + send mFrameButton unmap + send mNextButton unmap + } +} + +proc panelBarToggle args \ +{ + global panelbar_up + + set w [send display get width] ; set h [send display get height] + set iw [send imagewin get width] ; set ih [send imagewin get height] + + if {$panelbar_up} { + send panelbar set height 0 + send panelButton set state 0 + send imagewin "set width $iw; set height $ih" + set nh [expr $h - 25] + send display "set width $w ; set height $nh" + set panelbar_up 0 + } else { + send panelbar set height 25 + send panelButton set state 1 + send imagewin "set width $iw; set height $ih" + set nh [expr $h + 25] + send display "set width $w ; set height $nh" + set panelbar_up 1 + } +} + + + +# Initialize the bars to be displayed if the resource was set. + +send toolButton "set bitmap tools; addCallback toolBoxToggle" +if { ! [ true $showToolBar ] } { + send display set height [expr [send display get height] - 25] + send toolbar set height 0 + send toolButton set state 0 +} else { + send toolButton set state 1 + send mXflipButton unmap + send mYflipButton unmap + send mPrevButton unmap + send mFrameButton unmap + send mNextButton unmap +} + +send panelButton "deleteCallback panel" +send panelButton "set bitmap control; addCallback panelBarToggle" + +if { ! [ true $showPanelBar ] } { + send display set height [expr [send display get height] - 25] + send panelbar set height 0 + send panelButton set state 0 +} else { + send panelButton set state 1 +} + + +############################################## +# Panelbar callbacks. +############################################## + +send pbQuit addCallback Quit +send helpClose addCallback "send helpButton set state 0" + + +# Control Panel. +#------------------------------------------------------ +proc pbToggleControl {name element op} \ +{ + upvar $name panel_up + send pbDisplayP set state [expr !($panel_up)] +} ; #trace variable panel_up w pbToggleControl + +proc pbResetPanel {param old new} \ +{ + global displayPanner displayMagnifier displayCoords + switch $new { + done { send pbPanM set state [true $displayPanner] + send pbMagM set state [true $displayMagnifier] + send pbWcsM set state [true $displayCoords] + } + } +} ; send initialize addCallback pbResetPanel + +set WidgetToTab(pbDisplayP) display_panel +set WidgetToTab(pbInfoP) info_panel +set WidgetToTab(pbLoadP) load_panel +set WidgetToTab(pbPrintP) print_panel +set WidgetToTab(pbSaveP) save_panel +set WidgetToTab(pbTileP) tile_panel +set WidgetToTab(pbCoordP) wcs_panel + +set TabToWidget(display_panel) pbDisplayP +set TabToWidget(print_panel) pbPrintP +set TabToWidget(load_panel) pbLoadP +set TabToWidget(save_panel) pbSaveP +set TabToWidget(info_panel) pbInfoP +set TabToWidget(tile_panel) pbTileP +set TabToWidget(wcs_panel) pbCoordP + +set pbTabTop "pbDisplayP" + +proc pbPanelDismiss args \ +{ + global tabTop TabToWidget WidgetToTab + set panel $TabToWidget($tabTop) + send $panel set state 0 +} ; send panelClose addCallback pbPanelDismiss + +proc pbResizeCB {widget event a b c d e args} \ +{ + global pbTabTop TabToWidget WidgetToTab + if { $a == 0 && $b == 0 && $c == 0 && $d == 0 && $e == 0 } { + send $pbTabTop set state 0 + set new $TabToWidget($widget) + send $new set state 1 + set pbTabTop $new + } +} ; foreach w $cpTabs {send $w addEventHandler pbResizeCB exposureMask} + +proc pbPanelTabs { widget type state args } \ +{ + global pbTabTop tabTop panel_up + global TabToWidget WidgetToTab + + set panel $WidgetToTab($widget) + if {$tabTop == $panel && $panel_up} { + send panelShell unmap + send $widget set state 0 + set panel_up 0 + return + } + + send $TabToWidget($tabTop) set state 0 + set tabTop $panel + set pbTabTop $TabToWidget($panel) + send panelTabs setTop $panel + + # Now fire it up if it's not already open. + if {$panel_up == 0} { + send $widget set state 1 + send panelShell map + set panel_up 1 + } +} +foreach w { pbDisplayP pbInfoP pbLoadP pbPrintP pbSaveP pbTileP pbCoordP } { + send $w addCallback pbPanelTabs +} + + + +# Load Panel. (Really need to clean this up.) +#------------------------------------------------------ +proc pbDoLoadOptions { param old new } \ +{ + set val [ join [lrange $new 1 end] " " ] + switch [lindex $new 0] { + newfile { send fnameText set string $val } + } +} ; send loadOptions addCallback pbDoLoadOptions + +proc pbFileLoad { widget mode fname args } \ +{ + set fpath [format "%s/%s" \ + [string range [send dirLabel get label] 12 end] $fname ] + send imagewin setCursorType idle +} ; send fnameText addCallback pbFileLoad + +proc pbflSelectPrint {widget cbtype selections args} \ +{ + foreach selection $selections { + ; + } +}; #send imageList addCallback pbflSelectPrint + +proc pbFileLoadB args \ +{ + set fname [send fnameText get string] + if {$fname != ""} { + set fpath [format "%s/%s" \ + [string range [send dirLabel get label] 12 end] $fname ] + } +} ; send filesLoadButton addCallback pbFileLoadB + + +# Panner Marker. +#------------------------------------------------------ +proc pbTracePanner {name element op} \ +{ + global last_compass + + catch { + upvar $name panner_enable + send pbPanM set state $panner_enable + + if { $panner_enable } { + send tbCompass "setSensitive True ; set state $last_compass" + drawCompass + } else { + send tbCompass "setSensitive False ; set state False" + eraseCompass + } + } +} ; trace variable panner_enable w pbTracePanner + +proc pannerPanel args \ +{ + global panner_enable displayPanner + + setPanner [expr !$panner_enable] + send pannerButton set on [expr $panner_enable] +}; send pbPanM addCallback pannerPanel + + +# Magnifier Marker. +#------------------------------------------------------ +proc pbTraceMagnifier {name element op} \ +{ + upvar $name magnifier_enable + send pbMagM set state $magnifier_enable +} ; trace variable magnifier_enable w pbTraceMagnifier + +proc magnifierPanel args \ +{ + global magnifier_enable displayMagnifier + setMagnifier [expr !$magnifier_enable] + send magnifierButton set on [expr $magnifier_enable] +}; send pbMagM addCallback magnifierPanel + + +# CoordsBox Marker. +#------------------------------------------------------ +proc pbTraceCoordsBox {name element op} \ +{ + upvar $name track_enable + send pbWcsM set state $track_enable +} ; trace variable track_enable w pbTraceCoordsBox + +proc wcsPanel args \ +{ + global track_enable + setTrack [expr !$track_enable] +}; send pbWcsM addCallback wcsPanel + + + +# WPIX ISM Callbacks. +#------------------------------------------------------ + +proc altIsmToggle { widget type state args } \ +{ + ismToggle pbIsm junk $state +} ; send pbIsm addCallback altIsmToggle + +proc pbTraceIsm {name element op} \ +{ + upvar $name ism_enable + send pbIsm set state $ism_enable +} ; trace variable ism_enable w pbTraceIsm + + +proc altIsmMsgCB { param old new } \ +{ + set cmd [lindex $new 0] ;# command name + set ism [lindex $new 1] ;# determine ISM name + set argv [lrange $new 2 end] ;# get args + set argc [llength $argv] + + switch $cmd { + deliver { ${ism}_alt_msg $argc $argv } + } +} ; send ism_msg addCallback altIsmMsgCB + + +proc wcspix_alt_msg { argc argv } \ +{ + set arg [string trimleft [ string trimright [lindex $argv 0] ] ] + set cmd [lindex $arg 0] + switch $cmd { + startup { } + shutdown { } + disable { send pbIsm "set state False ; setSensitive False" } + capable { send pbIsm "setSensitive True" } + } +} + + + +############################################## +# Toolbar callbacks. +############################################## + +send tbNormalize addCallback normalize +send tbInvert addCallback cpInvert +send tbRegister addCallback cpRegisterFrames +send tbMatchLUT addCallback cpMatchFrames + + +# Frame Selection. +#------------------ +createMenu mFrameMenu mFrameButton $frameMenuDescription + +proc altFrameChanged {param old new} \ +{ + send mFrameButton set label $new +} ; send frame addCallback altFrameChanged + + +# Image Flipping. +#------------------------------------------------------ +proc tbSetFlip {param old new} \ +{ + if {$param == "xflip"} { + send mXflipButton set state [true $new] + } else { + send mYflipButton set state [true $new] + } +}; foreach i {xflip yflip} { send $i addCallback tbSetFlip } + + +# Zoom/Pan buttons. +#------------------------------------------------------ +proc tbZoomAction { widget args } \ +{ + global frameWidth frameHeight + + switch $widget { + tbZoom0 { cpZoom 1 1 fixed } + tbZoomIn { cpZoom 2.0 2.0 relative } + tbZoomOut { cpZoom 0.5 0.5 relative } + tbCenter { send client pan [expr $frameWidth/2.0] [expr $frameHeight/2.0] } + } +} +foreach widget { tbCenter tbZoomIn tbZoom0 tbZoomOut } { + send $widget addCallback tbZoomAction +} + + +# Frame Blink. +#------------------------------------------------------ +proc tbSetBlinkRate {w args} \ +{ + if {$w == "tbBlinkInc"} { + cpSetBlinkRate BRincrease + } else { + cpSetBlinkRate BRdeccrease + } +} +foreach w {tbBlinkDec tbBlinkInc} { send $w addCallback tbSetBlinkRate } + +proc tbBlink { widget args } \ +{ + global blinkRate blinkId + + if {$blinkRate < 0.01} { + send tbBlink set state 0 + } else { + if {$widget != "tbBlink"} { + if {($blinkId != 0) != [send $widget get on]} { + toggleBlink + } + } else { + if {($blinkId != 0) != [send $widget get state]} { + toggleBlink + } + } + } +} ; send tbBlink addCallback tbBlink + +proc tbTraceBlink {name element op} \ +{ + upvar $name blinkId + send tbBlink set state [expr $blinkId != 0] +} ; trace variable blinkId w tbTraceBlink + + +# Auto-register. +#------------------------------------------------------ +proc tbAutoRegister { widget type state args } \ +{ + send tbAutoReg set state $state +} +foreach w {autoregButton brAregButton tbAutoReg} { + send $w addCallback cpAutoRegister +} + +proc tbToggleAutoReg args \ +{ + global auto_reg + if {$auto_reg} { + cpAutoRegister autoregButton dummy 0 + set auto_reg 0 + } else { + cpAutoRegister autoregButton dummy 1 + set auto_reg 1 + } +} + + +# Frame Tiles. +#------------------------------------------------------ +proc tbSetTileFrames args \ +{ + global tileOpt + + # Send the option to the client. + if {[send tbTile get state ]} { + if {$tileOpt == 0} { + # If mode is disabled, turn on the tile selection. + selectTileOrientation junk junk Best + } else { + # Otherwise, turn on in current mode. + selectTileOrientation junk junk [tileSelToLabel $tileOpt] + } + } else { + selectTileOrientation junk junk Disabled + } +}; send tbTile addCallback tbSetTileFrames + +proc tbTrackTileFrames {param old new} \ +{ + send tileFramesButton set on [true $new] + send tbTile set state $new +}; send tileFrames addCallback tbTrackTileFrames + +proc tbTileFramesToggle args \ +{ + set value [send tileFramesButton get on] + if {$value} { set not 0 } else { set not 1 } + + send tileFramesButton set on [expr $not] + send tbTile set on [expr $not] + cpSetTileFrames +} + + +# Compass Indicator. +#------------------------------------------------------ +proc tbToggleCompass { widget type state args } \ +{ + global frame + + if {$state} { + send compass set on True + send tbCompass set state 1 + drawCompass + } else { + send compass set on False + send tbCompass set state 0 + eraseCompass + } +} ; foreach w {compass tbCompass} { send $w addCallback tbToggleCompass } + + diff --git a/vendor/x11iraf/ximtool/gui.bak/warn.obj b/vendor/x11iraf/ximtool/gui.bak/warn.obj new file mode 100644 index 00000000..51c617e0 --- /dev/null +++ b/vendor/x11iraf/ximtool/gui.bak/warn.obj @@ -0,0 +1,12 @@ + +set Objects(warning) { \ + toplevel TransientShell warning\ + warning Layout warn\ + warn Frame warnFrame\ + warnFrame Layout WFlayout\ + WFlayout Icon warnIcon\ + WFlayout TextBox warnText\ + warn Command warnOk\ + warn Command warnCancel\ +} + diff --git a/vendor/x11iraf/ximtool/gui.bak/warn.res b/vendor/x11iraf/ximtool/gui.bak/warn.res new file mode 100644 index 00000000..e1608938 --- /dev/null +++ b/vendor/x11iraf/ximtool/gui.bak/warn.res @@ -0,0 +1,49 @@ + +set Resources(warning) { \ + + ! --------------------- + ! WARNING dialog. + ! --------------------- + *warning.geometry: +400+300 + *warning*borderWidth: 0 + *warning*TextBox.frameWidth: 0 + + *warn.layout: vertical { \ + 5 < -5 > \ + horizontal { 5 warnFrame < +inf * +inf > 5 } \ + 5 < -5 > \ + horizontal { \ + 10 \ + warnOk < +inf * > \ + 5 < +inf -5 > \ + warnCancel < +inf * > \ + 10 \ + } \ + 5 < -5 > \ + } + *warnOk.label: Okay + *warnCancel.label: Cancel + + *WFlayout.layout: horizontal { \ + 5 < -5 > \ + vertical { 5 < +inf -5 > warnIcon 5 < +inf -5 > } \ + 5 < -5 > \ + warnText < +inf -inf * +inf -inf > \ + 5 < -5 > \ + } + + *warnLabel.label: Warning + *warnLabel.width: 300 + *warnLabel.height: 20 + *warnFrame.frameType: sunken + *warnFrame.frameWidth: 2 + *warnIcon.location: 0 0 40 40 + *warnIcon.image: WARNING + *warnText.label: generic warning text + *warnText.width: 270 + *warnText.height: 60 + *warnText.background: gray77 +} + + + diff --git a/vendor/x11iraf/ximtool/gui.bak/warn.tcl b/vendor/x11iraf/ximtool/gui.bak/warn.tcl new file mode 100644 index 00000000..e0465bc3 --- /dev/null +++ b/vendor/x11iraf/ximtool/gui.bak/warn.tcl @@ -0,0 +1,49 @@ + +################################################################################ +# Warning dialog. This pops up a dialog box with the given warning message, +# and executes the given command if the user pushes OK. +# +# Usage: Wexec object message [ok_action [cancel_action]] +# +# The message text is displayed in a popup and the user hits the ok or +# cancel button to close the popup. If an action has been posted for the +# button selected then it is sent to the named object. Only one alert can +# be in effect at a time; posting another alert before the first has +# completed causes the new alert to override the first. +################################################################################ + +set W_object "" +set W_ok_cmd "" +set W_cancel_cmd "" + +proc Wexec {object msg args} \ +{ + global W_object W_ok_cmd W_cancel_cmd + set W_object $object + set W_ok_cmd [lindex $args 0] + set W_cancel_cmd [lindex $args 1] + send warnText set label $msg + send warning map +} + +proc Wbutton {widget args} \ +{ + global W_object W_ok_cmd W_cancel_cmd + switch $widget { + warnOk { if [llength $W_ok_cmd] { send $W_object $W_ok_cmd } + } + warnCancel { if [llength $W_cancel_cmd] { send $W_object $W_cancel_cmd } + } + } + send warning unmap +} +send warnOk addCallback Wbutton +send warnCancel addCallback Wbutton + +# The parameter "alert" is used to forward alerts from the client. +proc setAlert {param old new} \ +{ + Wexec client [lindex $new 0] [lindex $new 1] +}; send alert addCallback setAlert + + diff --git a/vendor/x11iraf/ximtool/gui.bak/wcs.res b/vendor/x11iraf/ximtool/gui.bak/wcs.res new file mode 100644 index 00000000..0f9ec8d5 --- /dev/null +++ b/vendor/x11iraf/ximtool/gui.bak/wcs.res @@ -0,0 +1,212 @@ + +set Resources(wcs_panel) { \ + + !-------------------- + ! WCS Readout Panel + !-------------------- + *wcsGroup*TextToggle.offIcon: square0s + *wcsGroup*TextToggle.onIcon: square1s + + !*wcsLayout*TextToggle.location: 0 0 160 23 + *wcsLayout*TextToggle.height: 23 + *wcsLayout*TextToggle.outerOffset: 0 + *wcsLayout*Layout.borderWidth: 0 + *wcsLayout.borderWidth: 0 + *wcsLayout.layout: vertical { \ + 0 < +0 -0 > \ + wcsGroup < +inf -inf * > \ + 5 \ + horizontal { -1 wcsOptGroup < +inf -inf * > -1 } \ + -2 \ + } + + *wcsOptGroup.label: + *wcsOptGroup.outerOffset: 0 + *wcsOptGroup.innerOffset: 5 + *wcsOptGroup.frameType: chiseled + *wcsOptGroup.frameWidth: 0 + *wcsOptLayout.layout: vertical { \ + horizontal { -9 wcsCoords < +inf -inf * > -9 } \ + -3 \ + horizontal { -5 wcsOpts < +inf -inf * > -5 } \ + horizontal { -5 wcsIsmGroup < +inf -inf * > -5 } \ + 1 \ + } + + *wcsOpts.label: + *wcsOpts.width: 265 + *wcsOpts.height: 40 + *wcsOpts.outerOffset: 3 + *wcsOpts.innerOffset: 3 + *woLayout*TextToggle.frameWidth: 0 + *woLayout*TextToggle.onIcon: square1s + *woLayout*TextToggle.offIcon: square0s + *woLayout*TextToggle.highlightColor: cyan + *woLayout*TextToggle.alignment: left + *woLayout*TextToggle.leftMargin: 5 + *woLayout.layout: horizontal { \ + 3 \ + woptLabels < +inf -inf * > 2 \ + woptTitles < +inf -inf * > 2 \ + woptFBinfo < +inf -inf * > 2 \ + woptBPM < +inf -inf * > \ + 3 \ + } + *woptLabels.label: WCS Labels + *woptLabels.on: True + *woptTitles.label: Image Titles + *woptTitles.on: True + *woptFBinfo.label: Frame Buffer Info + *woptFBinfo.on: True + *woptBPM.label: BPM Data + *woptBPM.on: False + *woptLabels.location: 0 0 150 21 + *woptTitles.location: 0 0 150 21 + *woptFBinfo.location: 0 0 175 21 + *woptBPM.location: 0 0 120 21 + + + *wcsCoords.label: Readout Values + *wcsCoords.width: 265 + *wcsCoords.height: 135 + *wcsCoords.outerOffset: 7 + *wcsCoords.innerOffset: 3 + *wcLayout*TextToggle.offIcon: diamond0s + *wcLayout*TextToggle.onIcon: diamond1s + *wcLayout*TextToggle.highlightColor: yellow2 + *wcLayout*TextToggle.shrinkToFit: True + *wcLayout*TextToggle.frameWidth: 0 + *wcLayout*TextToggle.label: + *wcLayout*TextToggle.on: True + *wcLayout*Label.justify: right + *wcLayout*Label.font: 7x13bold + *wcLayout*SimpleMenu.borderColor: black + *wcLayout*SimpleMenu.borderWidth: 1 + *wcLayout*SimpleMenu.foreground: White + *wcLayout*SimpleMenu.background: SteelBlue + *wcLayout*MenuButton.shadowWidth: 1 + *wcLayout*MenuButton.resize: False + *wcLayout.layout: vertical {\ + 1 \ + horizontal { 20 < -20 > wcTitle < +inf -inf * > 20 < -20 > }\ + 1 \ + horizontal { 5 wcLine < +inf -inf * > 5 } \ + 5 \ + horizontal { \ + 10 \ + vertical { 2 wlWcs1 2 wlWcs2 2 wlWcs3 2 wlWcs4 2 } 5 \ + vertical { 1 sysWcs1 1 sysWcs2 1 sysWcs3 1 sysWcs4 1 } 5 \ + vertical { 1 fmtWcs1 1 fmtWcs2 1 fmtWcs3 1 fmtWcs4 1 } 20 \ + vertical { 1 wpWcs1 3 wpWcs2 3 wpWcs3 3 wpWcs4 3 } 20 \ + vertical { 1 wiWcs1 3 wiWcs2 3 wiWcs3 3 wiWcs4 3 } 15 \ + } \ + 3 \ + } + *wcTitle.label: Type\ \ \ \ \ \ \ \ \ \ Format\ \ \ \ \ \ Panel\ ImgWin + + *wcLine.height: 2 + *wcLine.frameWidth: 2 + *wcLine.frameType: ledged + + *wlWcs1.label: First WCS + *wlWcs2.label: Second WCS + *wlWcs3.label: Third WCS + *wlWcs4.label: Fourth WCS + *sysWcs1.label: \ Image Display\ + *sysWcs1.menuName: sysMenu1 + *sysWcs2.label: None + *sysWcs2.menuName: sysMenu2 + *sysWcs3.label: None + *sysWcs3.menuName: sysMenu3 + *sysWcs4.label: None + *sysWcs4.menuName: sysMenu4 + *fmtWcs1.label: \ Sexigesimal\ + *fmtWcs1.menuName: fmtMenu1 + *fmtWcs2.label: None + *fmtWcs2.menuName: fmtMenu2 + *fmtWcs3.label: None + *fmtWcs3.menuName: fmtMenu3 + *fmtWcs4.label: None + *fmtWcs4.menuName: fmtMenu4 + + *editMenu fmtWcsMenu$i fmtWcs$i $items + + *wcsIsmGroup.label: + *wcsIsmGroup.width: 395 + *wcsIsmGroup.height: 50 + *wcsIsmGroup.outerOffset: 3 + *wcsIsmGroup.innerOffset: 5 + *wcsIsmGroup*borderWidth: 0 + *wcsIsmLayout.layout: horizontal { \ + wcsIsmLabel 1 wcsIsmFrame < +inf -inf * > 3 wcsIsmInit 1 \ + } + *wcsIsmLabel.label: ISM Command + *wcsIsmFrame.frameType: sunken + *wcsIsmFrame.frameWidth: 1 + *wcsIsmFrame.outerOffset: 1 + *wcsIsmFrame*height: 23 + *wcsIsmCmd*editType: edit + *wcsIsmCmd.displayCaret: True + *wcsIsmInit.label: Initialize + *wcsIsmInit.internalWidth: 7 + + *wcsBox*borderWidth: 0 + *wcsBox*TextToggle.frameType: raised + *wcsBox*TextToggle.frameWidth: 1 + *wcsBox*TextToggle.leftMargin: 2 + *wcsBox*borderWidth: 0 + *wcsBox.layout: vertical { \ + wcsFrame < +inf -inf * > \ + 2 \ + horizontal { \ + 2 \ + ismToggle < +inf -inf * > 2 \ + pixelTable < +inf -inf * > 2 \ + imageHeader < +inf -inf * > 2 \ + compass < +inf -inf * > 2 \ + wcsOptions < +inf -inf * > \ + 2 \ + } \ + } + *ismToggle.label: ISM Mod + *ismToggle.label: WCS/Pix + *pixelTable.label: Pix Table + *imageHeader.label: Header + *imageHeader.sensitive: False + *compass.label: Compass + *wcsOptions.label: Options + + *wcsGroup.label: + *wcsGroup.outerOffset: 0 + *wcsGroup.innerOffset: 5 + *wcsGroup.frameType: chiseled + *wcsGroup.frameWidth: 2 + *wcsGroup*Text*width: 260 + *wcsGroup*Text*height: 17 + *wcsGroup*Text*font: 7x13 + *wcsGroup*Text*displayCaret: False + *wcsGroup*Text*editType: read + *wcsGroup*Text*background: black + *wcsGroup*Text*foreground: yellow2 + *wcsGroup*TextToggle.highlightColor: cyan + *wcsFrame.frameType: sunken + *wcsFrame.frameWidth: 1 + *wcsText*background: yellow4 + *wcsText.layout: vertical { \ + wtName < +inf -inf * > -3 \ + wtTitle < +inf -inf * > -3 \ + wtFBCfg < +inf -inf * > \ + 1 < -1 > \ + wtWcs1 < +inf -inf * > -3 \ + wtWcs2 < +inf -inf * > -3 \ + wtWcs3 < +inf -inf * > -3 \ + wtWcs4 < +inf -inf * > \ + 1 < -1 > \ + horizontal { \ + wtIPixval < +inf -inf * +inf > 1 \ + wtSPixval < +inf -inf * +inf > 1 \ + wtBPixval < +inf -inf * +inf > \ + } \ + } +} + diff --git a/vendor/x11iraf/ximtool/gui.bak/wcs.tcl b/vendor/x11iraf/ximtool/gui.bak/wcs.tcl new file mode 100644 index 00000000..8b14db4f --- /dev/null +++ b/vendor/x11iraf/ximtool/gui.bak/wcs.tcl @@ -0,0 +1,464 @@ + +################################################################################ +# Coords Panel Callbacks. +################################################################################ + +# In case we need to change the values.... +#global wcsPHeight wcsPTxtHeight wcsPGrHeight wcsPOptHeight +#set wcsPHeight 267 +#set wcsPTxtHeight 132 +#set wcsPGrHeight 175 +#set wcsPOptHeight 233 +#setCoordPanelHeight + +set wcsPHeight 267 ;# full panel no options +set wcsPTxtHeight 132 ;# size of text area box +set wcsPGrHeight 175 ;# size of text area group +set wcsPOptHeight 233 ;# extra height for opts boxes + +# Set the WCS readout panel sensitivity depending on whether the ISM +# is currently enabled. +proc setCoordPanelSensitivity args \ +{ + set widgets { + wpWcs2 wpWcs3 wpWcs4 + wiWcs2 wiWcs3 wiWcs4 + wlWcs2 wlWcs3 wlWcs4 + sysWcs2 sysWcs3 sysWcs4 + fmtWcs2 fmtWcs3 fmtWcs4 + } + + send sysWcs1 set label "Display" + send fmtWcs1 set label "Default" + + for {set i 2} {$i <= 4} {incr i} { + send sysWcs$i set label "None" ; send fmtWcs$i set label "Default" + send wpWcs$i set on False ; send wiWcs$i set on False + send wtWcs$i set height 4 + } + + if {[send ismToggle get on]} { + send sysWcs2 set label "World" ; send fmtWcs2 set label "Default" + send wpWcs2 set on True ; send wiWcs2 set on True + send wtWcs2 set height 17 + + foreach w $widgets { send $w setSensitive True } + } else { + foreach w $widgets { send $w setSensitive False } + } +} + + +# Set the Coords Panel height depending on the option settings. +proc setCoordPanelHeight args \ +{ + global wcsPHeight wcsPOptHeight wcsPTxtHeight wcsPGrHeight + global tabTop + + if {$tabTop != "wcs_panel"} \ + return + + # Get the height of the text area + set panel_h $wcsPHeight + set shrinkage 0 + foreach w { wpWcs1 wpWcs2 wpWcs3 wpWcs4 woptFBinfo } { + if {[send $w get on] == 0} { + incr shrinkage 13 + } + } + if {[send woptTitles get on] == 0} { + incr shrinkage 26 + } + + set ph [expr ($wcsPHeight - $shrinkage)] + if {[send wcsOptions get on] == 1} { + incr ph $wcsPOptHeight + } + + send wcsGroup set height [ expr ($wcsPGrHeight - $shrinkage) ] + send wcsFrame set height [ expr ($wcsPTxtHeight - $shrinkage) ] + send panel set height $ph +} + +# Toggle the options display for the panel. +proc wcsOptToggle { widget type state args } \ +{ + global wcsPOptHeight + set h [ send panel get height ] + if {$state == 1} { + send panel set height [ expr ($h + $wcsPOptHeight) ] + } else { + send panel set height [ expr ($h - $wcsPOptHeight) ] + } +} ; send wcsOptions addCallback wcsOptToggle + +# Handle the panel display toggles. +proc wcsCoordsCB { widget type state args } \ +{ + + set hght [ expr (($state == 1) ? 17 : 4)] + switch $widget { + wpWcs1 { send wtWcs1 set height $hght } + wpWcs2 { send wtWcs2 set height $hght } + wpWcs3 { send wtWcs3 set height $hght } + wpWcs4 { send wtWcs4 set height $hght } + woptFBinfo { send wtFBCfg set height $hght } + woptTitles { send wtName set height $hght ; send wtTitle set height $hght } + } + setCoordPanelHeight +} +set wcValues { wpWcs1 wpWcs2 wpWcs3 wpWcs4 woptFBinfo woptTitles } +foreach w $wcValues { send $w addCallback wcsCoordsCB } + + +# Handle WCS label string options. +set wcsLabels 1 +proc wcsLabelsCB { widget type state args } \ +{ + global up_todo wcsLabels + set wcsLabels $state + #resizeCoordsBox 0 + resizeCoordsBox $up_todo + updateCoordsBox +} ; send woptLabels addCallback wcsLabelsCB + + +# Toggle the BPM tracking state. +proc wcsBPMCB { widget type state args } \ +{ + global ism_enable + if ($ism_enable) { catch { send wcspix set bpm $state } } +} ; send woptBPM addCallback wcsBPMCB + + +# Procedures to format lines in the wcsText box. +proc wcsFmtImname { name } \ +{ + send wtName set string [format " Name: %s" [string trimleft $name]] +} + +proc wcsFmtImtitle { title } \ +{ + send wtTitle set string [format " Title: %s" [string trimleft $title]] +} + +proc wcsFmtFBConfig args \ +{ + global frameWidth frameHeight frame nframes + set buf [ format "%5d x %-5d" $frameWidth $frameHeight ] + set line [ format "Frame Buf: %-13s Frame: %d of %d" \ + [string trimleft $buf] $frame $nframes ] + send wtFBCfg set string $line +} + +proc wcsFmtIValue { value } \ +{ + global coord + set line [ format " Pixel: %.11s" $value ] + send wtIPixval set string $line + if {[info exists coord(ival)]} { + set coord(ival) $value + updateCoordsBox + } +} + +proc wcsFmtSValue { value } \ +{ + global coord + set line [ format " Scaled: %.8s" $value ] + send wtSPixval set string $line + set coord(sval) [format "%s" $value] +} + +proc wcsFmtBValue { value } \ +{ + global coord + + if { [send woptBPM get on] } { + set line [ format " BPM: %s" $value ] + set color [expr { ($value == 0) ? "black" : "red" } ] + set msg [format "set string \{%s\}; set background %s" $line $color ] + set coord(bval) [format "%s" $value] + } else { + set line [ format " BPM: (off)" ] + set msg [format "set string \{%s\}" $line] + } + send wtBPixval $msg +} + +proc wcsFmtWcs { num wcsname x y xunit yunit args } \ +{ + global coord coordLab wcsLabels + + if {$wcsLabels} { + set line [ format "%4s: %12s %4s: %12s WCS: %s" \ + $xunit $x $yunit $y [string trimleft $wcsname] ] + } else { + set line [ format "%4s %12s %4s %12s %s" \ + " " $x " " $y [string trimleft $wcsname] ] + } + send wtWcs$num set string $line + + if {[info exists coord(wcs$num)]} { + if {$num == 1} { + set coord(wcs1) [ format "\{%s\} \{%s\} \{%s\}" $x $y $coord(sval) ] + } elseif {$num == 2} { + set coord(wcs2) [ format "\{%s\} \{%s\} \{%s\}" $x $y $coord(ival) ] + } else { + set coord(wcs$num) [ format "\{%s\} \{%s\} \{%s\}" $x $y $wcsname ] + } + + set coordLab(wcs$num) [ format "\{%s\} \{%s\} \{%s\}" \ + $xunit $yunit [string trimleft $wcsname ] ] + updateCoordsBox + } +} + + + +# Handle the wcsbox readout. +#------------------------------ +set up_todo 2 +set up_done 0 +set coord(ival) 0. +set coord(sval) 0. +set coord(bval) 0 +set coord(wcs1) { 0. 0. 0. } +set coord(wcs2) { 0. 0. 0. } +set coord(wcs3) { 0. 0. 0. } +set coord(wcs4) { 0. 0. 0. } + +proc wcsCoordB { widget type state args } \ +{ + global coord up_todo + + switch $widget { + wiWcs1 { set line wcs1 ;set coord($line) { 0. 0. "" } } + wiWcs2 { set line wcs2 ;set coord($line) { 0. 0. "" } } + wiWcs3 { set line wcs3 ;set coord($line) { 0. 0. "" } } + wiWcs4 { set line wcs4 ;set coord($line) { 0. 0. "" } } + } + + if {$state} { + incr up_todo + } else { + unset coord($line) + incr up_todo -1 + } + + resizeCoordsBox $up_todo + updateCoordsBox +} +set wiValues { wiWcs1 wiWcs2 wiWcs3 wiWcs4 } +foreach w $wiValues { send $w addCallback wcsCoordB } + + +# Resize the coords box depending on the panel options. +proc resizeCoordsBox { nlines } \ +{ + global track_enable wcsLabels winWidth winHeight wcsboxGeom + + if {! $track_enable} \ + return + + send wcsbox getAttributes width cur_w height cur_h + set defGeom [format "%sx%s-5-5" $cur_w $cur_h] + send imagewin parseGeometry $wcsboxGeom $defGeom x y width height + + set ew [expr (($wcsLabels == 1) ? 125 : 65)] + + # Reset to the default geometry + if {$nlines == 0} { + set x [expr ($x + $ew)] + set y [expr ($y + $height - 17 + 1)] + set new_w 166 + set new_h 17 + + } else { + if {$width > 166} { ;# not using default wcsbox + set new_w $width + } else { + set new_w [expr ($width + $ew)] + set x [expr ($x - $ew)] + if {$wcsLabels == 0} { + incr x 60 + } + } + set new_h [ expr ($nlines * 17) ] + set y [expr ($y + $height - $new_h + 1)] + } + + # Bounds checking. + if {$x < 5} { + set x 5 + } elseif {$x > [expr ($winWidth - $new_w - 5)]} { + set x [expr ($winWidth - $new_w - 5)] + } + if {$y < 5} { + set y 5 + } elseif {$y > [expr ($winHeight - $new_h - 5)]} { + set y [expr ($winHeight - $new_h - 5)] + } + + # Finally redraw the marker. + send wcsbox "\ + setAttributes \ + width $new_w \ + height $new_h \ + x $x \ + y $y; \ + redraw" + + set wcsboxGeom [send imagewin getGeometry $x $y $new_w $new_h] + send client encodewcs [expr ($winWidth / 2)] [expr ($winHeight / 2)] + updateCoordsBox +} + + +# Shortcuts for known WCS labels. +set labels(display) "TV" +set labels(logical) "Log" +set labels(physical) "Phys" +set labels(equatorial) "Eq" +set labels(ecliptic) "Ecl" +set labels(galactic) "Gal" +set labels(supergalactic) "SGal" +set labels(amplifier) "Amp" +set labels(ccd) "CCD" +set labels(detector) "Det" + + +# Format the coords box marker with the selected output options. +proc updateCoordsBox args \ +{ + global ism_enable coord coordLab wcsLabels + global up_done up_todo labels track_enable + global coord + + if {! $ism_enable} \ + return + + incr up_done + + set text "" + foreach l {wcs1 wcs2 wcs3 wcs4} { + if {[info exists coord($l)]} { + set x [lindex $coord($l) 0] + set y [lindex $coord($l) 1] + set z [string tolower [string trimleft [lindex $coord($l) 2] ] ] + if {[info exists labels($z)]} { + set z $labels($z) + } + + if {$wcsLabels && [info exists coordLab($l)]} { + set lx [lindex $coordLab($l) 0] + set ly [lindex $coordLab($l) 1] + append text [format " %4s %12.12s %4s %12.12s %9.9s \n" \ + $lx $x $ly $y $z ] + } else { + append text [format " %12.12s %12.12s %9.9s \n" $x $y $z ] + } + } + } + + # Now send the string. + if {$track_enable} { + set color [expr { ($coord(bval) == 0) ? "black" : "red" } ] + set txt [format "set text \{%s\}; set textBgColor %s; redraw noerase" \ + $text $color ] + send wcsbox $txt + } + + if {$up_done >= $up_todo} { + set up_done 0 ;# reset counter + } +} + + +# Create the WCS format menus. +#------------------------------------ +proc setWcsFmt { format line } \ +{ + catch { send wcspix set format $format $line } +} + +for {set i 1} {$i <= 4} {incr i} { + set items {} + lappend items "\"Default\" f.exec \{setWcsFmt default $i\}" + lappend items "\"Sexigesimal\" f.exec \{setWcsFmt hms $i\}" + lappend items "\"Degrees\" f.exec \{setWcsFmt deg $i\}" + lappend items "\"Radians\" f.exec \{setWcsFmt rad $i\}" + editMenu fmtMenu$i fmtWcs$i $items +} + + +# Create the default WCS type menus. +#------------------------------------ + +set defaultWcsMenu { + { "None" f.exec {setWcsSys none WCS_LINE } } + { "Display" f.exec {setWcsSys display WCS_LINE } } + { "World" f.exec {setWcsSys world WCS_LINE } } + { "Logical" f.exec {setWcsSys logical WCS_LINE } } + { "Physical" f.exec {setWcsSys physical WCS_LINE } } + { f.dblline } +} + +proc setWcsSys { sys line } \ +{ + if {[string tolower $sys] == "none"} { + wcsCoordB wiWcs$line junk 0 + send sysWcs$line set label "None"; send fmtWcs$line set label "Default" + send wpWcs$line set on False ; send wiWcs$line set on False + send wtWcs$line set height 4 + setCoordPanelHeight + + } else { + catch { send wcspix set wcs $sys $line } + } +} + +proc resetDefaultWcsMenu args \ +{ + global defaultWcsMenu + + for {set i 1} {$i <= 4} {incr i} { + regsub -all WCS_LINE $defaultWcsMenu $i menu_def + editMenu sysMenu$i sysWcs$i $menu_def + } +} ; resetDefaultWcsMenu + + +# Initialize the coordinates panel. +#------------------------------------ + +proc initCoordsPanel args \ +{ + #send wcLine set height 2 ;# kludge for label widget + + # Initialize the display strings in the coords box. + wcsFmtImname "" + wcsFmtImtitle "" + wcsFmtFBConfig + wcsFmtIValue "0." ; wcsFmtSValue "0." ; wcsFmtBValue "0" + wcsFmtWcs 1 "" "" "" " X" " Y" + wcsFmtWcs 2 "" "" "" " X" " Y" + wcsFmtWcs 3 "" "" "" " X" " Y" + wcsFmtWcs 4 "" "" "" " X" " Y" + + send fmtWcs1 set label Default + send wpWcs1 set on True ;send wiWcs1 set on True + send wpWcs2 set on True ;send wiWcs2 set on True + send wpWcs3 set on False ;send wiWcs3 set on False ;send wtWcs3 set height 4 + send wpWcs4 set on False ;send wiWcs4 set on False ;send wtWcs4 set height 4 + + # Set the Coords Panel height. + set wcsPTxtHeight [send wcsText get height] + setCoordPanelHeight + + # Set the WCS readout panel sensitivity. + setCoordPanelSensitivity + +} ; initCoordsPanel + + diff --git a/vendor/x11iraf/ximtool/gui.bak/zztest b/vendor/x11iraf/ximtool/gui.bak/zztest new file mode 100644 index 00000000..c7eabfe1 --- /dev/null +++ b/vendor/x11iraf/ximtool/gui.bak/zztest @@ -0,0 +1,56 @@ + +# Test to see if we can create a new panel. +appExtend { + *test_objects:\ + toplevel TopLevelShell testPanel\ + testPanel Form testForm\ + testForm Label testLabel\ + testForm Command testQuit + + *testPanel.geometry: 250x40 + *testLabel.label: Hello, world! + *testQuit.fromHoriz: testLabel + *testQuit.label: Quit +} +createObjects test_objects + + +#------------------------------------------------------------------------------ +# Test to see if we can add a widget to an existing widget tree, i.e. create +# a widget and assign an existing parent. Try adding a new button to the +# ximtool panelbar. + +appExtend { + *par_objects:\ + panelbar Toggle pbTest + + *pbTest.label: TESTING +} +createObjects par_objects + +# change the layout to include the new widget. +#send panelbar unmap +send panelbar set layout "horizontal \{ \ + pbTest < +inf -inf * > 1 < -1 > \ + pbDisplayP < +inf -inf * > 1 < -1 > \ + pbPrintP < +inf -inf * > 1 < -1 > \ + pbLoadP < +inf -inf * > 1 < -1 > \ + pbSaveP < +inf -inf * > 1 < -1 > \ + pbInfoP < +inf -inf * > 1 < -1 > \ + pbTileP < +inf -inf * > 1 < -1 > \ + pbCoordP < +inf -inf * > 1 < -1 > \ + pbPanM < +inf -inf * > 1 < -1 > \ + pbMagM < +inf -inf * > 1 < -1 > \ + pbWcsM < +inf -inf * > 1 < -1 > \ + pbIsm < +inf -inf * > 1 < -1 > \ + helpButton < +inf -inf * > 1 < -1 > \ + pbQuit < +inf -inf * > 1 < -1 > \ + \}" +#send panelbar map + +# Do the callbacks +proc testToggle { widget type state args } \ +{ + if {$state} { send testPanel map } else { send testPanel unmap } +} ; send pbTest addCallback testToggle +send testQuit addCallback "send testPanel unmap; send pbTest set state False" diff --git a/vendor/x11iraf/ximtool/gui/blink.obj b/vendor/x11iraf/ximtool/gui/blink.obj new file mode 100644 index 00000000..dfae6861 --- /dev/null +++ b/vendor/x11iraf/ximtool/gui/blink.obj @@ -0,0 +1,46 @@ + +set Objects(blink_panel) { \ + toplevel TopLevelShell blink_panel\ + blink_panel Layout bpLayout\ +\ + bpLayout Frame brMenuFrame\ + brMenuFrame Layout brMenuBar\ + brMenuBar Command brClose\ +\ + bpLayout Frame brFrame\ + brFrame Layout brLayout\ +\ + brLayout Group brFramesG\ + brFramesG Layout brFrames\ + brFrames MenuButton brFrame1\ + brFrames MenuButton brFrame2\ + brFrames MenuButton brFrame3\ + brFrames MenuButton brFrame4\ + brFrames MenuButton brFrame5\ + brFrames MenuButton brFrame6\ + brFrames MenuButton brFrame7\ + brFrames MenuButton brFrame8\ + brFrames MenuButton brFrame9\ + brFrames MenuButton brFrame10\ + brFrames MenuButton brFrame11\ + brFrames MenuButton brFrame12\ + brFrames MenuButton brFrame13\ + brFrames MenuButton brFrame14\ + brFrames MenuButton brFrame15\ + brFrames MenuButton brFrame16\ +\ + brLayout Group brCmdG\ + brCmdG Layout brCmd\ + brCmd Command brReset\ + brCmd Label brRateLabel\ + brCmd Frame brBRframe\ + brBRframe Layout brBRlayout\ + brBRlayout Arrow brBRdecrease\ + brBRlayout TextBox brBRtext\ + brBRlayout Arrow brBRincrease\ + brCmd Command brRegButton\ + brCmd Command brMatchButton\ + brCmd TextToggle brBlinkButton\ + brCmd TextToggle brAregButton\ +} + diff --git a/vendor/x11iraf/ximtool/gui/blink.res b/vendor/x11iraf/ximtool/gui/blink.res new file mode 100644 index 00000000..311bad2a --- /dev/null +++ b/vendor/x11iraf/ximtool/gui/blink.res @@ -0,0 +1,167 @@ + +set Resources(blink_panel) { \ + + *blink_panel.geometry: 425x200 + *blink_panel.title: Blink/Register Frames + + *brMenuBar*Command.internalHeight: 4 + *brMenuBar*Command.internalWidth: 12 + *brMenuBar*Command.height: 27 + *brMenuBar*borderWidth: 0 + + *brMenuBar*Label.font: 7x13bold + *brLayout*Command.font: -*-helvetica-medium-r-normal-*-12-*-iso8859-1 + *brRegButton.font: -*-helvetica-medium-r-normal-*-12-*-iso8859-1 + *brReset.font: -*-helvetica-medium-r-normal-*-12-*-iso8859-1 + *brMatchButton.font: -*-helvetica-medium-r-normal-*-12-*-iso8859-1 + *brBlinkButton.font: -*-helvetica-medium-r-normal-*-12-*-iso8859-1 + *brAregButton.font: -*-helvetica-medium-r-normal-*-12-*-iso8859-1 + + + *brMenuBar.layout: vertical { \ + 5 < -5 > \ + horizontal { 10 < +inf -10> brClose 5 } \ + 5 < -5 > \ + } + *brClose.label: Dismiss + + *brMenuFrame.frameType: raised + *brMenuFrame.frameWidth: 2 + *bpLayout.layout: vertical { \ + brMenuFrame < +inf -inf * > \ + 1 < -1 > \ + brFrame < +inf -inf * +inf -inf > \ + } + + *brFrame.frameType: chiseled + *brFrame.frameWidth: 2 + *brFrame.outerOffset: 4 + *brFrame.innerOffset: 4 + + *brLayout.borderWidth: 0 + *brLayout.layout: vertical { \ + 3 < -3 > \ + horizontal { -3 brFramesG < +inf -inf * > -3 } \ + -5 \ + horizontal { -3 brCmdG < +inf -inf * +inf -inf > -3 } \ + -5 \ + } + + *brCmdG.label: + *brCmdG.outerOffset: 7 + *brCmdG.innerOffset: 7 + *brCmdG*borderWidth: 0 + *brCmd.layout: horizontal { \ + 2 \ + vertical { \ + 2 \ + horizontal { \ + 2 \ + brRateLabel \ + 2 \ + brBRframe < +inf -inf * >\ + 4 \ + brReset \ + 2 \ + } \ + 8 < -8 > \ + horizontal { \ + 4 \ + brMatchButton < +inf -inf * > \ + 5 < -5 > \ + brRegButton < +inf -inf * > \ + 2 \ + } \ + 1 < +inf > \ + } \ + 10 \ + vertical { \ + 2 \ + brBlinkButton < +inf * > \ + 10 < -10 > \ + brAregButton < +inf * > \ + 1 < +inf > \ + } \ + 2 \ + } + + *brFramesG.label: Frames List + *brFramesG.outerOffset: 7 + *brFramesG.innerOffset: 7 + *brFramesG*SimpleMenu.borderColor: black + *brFramesG*SimpleMenu.borderWidth: 1 + *brFramesG*SimpleMenu.foreground: White + *brFramesG*SimpleMenu.background: SteelBlue + + *brFrames.borderWidth: 0 + *brFrames.layout: horizontal { \ + 5 < +inf > \ + brFrame1 < +inf * > 1 \ + brFrame2 < +inf * > 1 \ + brFrame3 < +inf * > 1 \ + brFrame4 < +inf * > 1 \ + brFrame5 < +inf * > 1 \ + brFrame6 < +inf * > 1 \ + brFrame7 < +inf * > 1 \ + brFrame8 < +inf * > 1 \ + brFrame9 < +inf * > 1 \ + brFrame10 < +inf * > 1 \ + brFrame11 < +inf * > 1 \ + brFrame12 < +inf * > 1 \ + brFrame13 < +inf * > 1 \ + brFrame14 < +inf * > 1 \ + brFrame15 < +inf * > 1 \ + brFrame16 < +inf * > \ + 5 < +inf > \ + } + + *brBRlayout.layout: horizontal { \ + brBRdecrease \ + brBRtext < +inf -100% * > \ + brBRincrease \ + } + + *blink_panel*TextToggle.location: 0 0 110 23 + *blink_panel*TextToggle.frameWidth: 1 + *blink_panel*TextToggle.highlightColor: yellow + *blink_panel*TextToggle.offIcon: square0s + *blink_panel*TextToggle.onIcon: square1s + *blink_panel*TextToggle.outerOffset: 0 + *blink_panel*TextToggle.innerOffset: 2 + *blink_panel*Command.height: 23 + *blink_panel*Arrow.width: 16 + *blink_panel*Arrow.height: 20 + + + *brFramesLabel.label: Frames: + *brFrame1.menuName: frame1Menu + *brFrame2.menuName: frame2Menu + *brFrame3.menuName: frame3Menu + *brFrame4.menuName: frame4Menu + *brFrame5.menuName: frame5Menu + *brFrame6.menuName: frame6Menu + *brFrame7.menuName: frame7Menu + *brFrame8.menuName: frame8Menu + *brFrame9.menuName: frame9Menu + *brFrame10.menuName: frame10Menu + *brFrame11.menuName: frame11Menu + *brFrame12.menuName: frame12Menu + *brFrame13.menuName: frame13Menu + *brFrame14.menuName: frame14Menu + *brFrame15.menuName: frame15Menu + *brFrame16.menuName: frame16Menu + *brReset.label: Reset + + *brRateLabel.label: Rate: + *brBRframe.frameType: sunken + *brBRframe.frameWidth: 1 + *brBRtext.width: 40 + *brBRtext.height: 23 + *brBRdecrease.direction: left + *brBRincrease.direction: right + *brRegButton.label: Register + *brMatchButton.label: Match LUTs + *brBlinkButton.label: Blink + *brAregButton.label: Auto-Register +} + diff --git a/vendor/x11iraf/ximtool/gui/boot.tcl b/vendor/x11iraf/ximtool/gui/boot.tcl new file mode 100644 index 00000000..936273a5 --- /dev/null +++ b/vendor/x11iraf/ximtool/gui/boot.tcl @@ -0,0 +1,74 @@ + + +################################################################################ +# GUI Bootstrap Procedures +################################################################################ + +# Initialize the widget tree. +proc InitWidgetTree args \ +{ + global Objects Resources Version + + + # Add a new objects description for each of the panels found so we can + # create them by name later rather that with the defaults. + + set guiResources "" + foreach obj [array names Objects] { + set guiResources \ + [ format "%s\n\n*%s_objects:%s\n" \ + $guiResources $obj $Objects($obj) ] + } + + # Now append all the Resource strings, changing any version strings as + # needed. + + foreach res [array names Resources] { + regsub -all XIMTOOL_VERSION $Resources($res) $Version ver + set guiResources [ format "%s\n\n%s\n\n" $guiResources $ver ] + } + + # Define all of the GUI objects and resources. + appInitialize ximtool XImtool $guiResources +} + + +# Realize a window module, i.e. create it's objects. +proc Realize { module args } \ +{ + global Objects + + # Create any widgets for the module. We only do this once and set a + # flag to indicate the objects have been created so we don't do it on + # subsequent realizations. + if { [info exists Objects($module)] } { + createObjects [format "%s_objects" $module] + reset-server + } +} + + +# Bootstrap up the GUI. +InitWidgetTree +Realize ximtool +Realize parameters +Realize panelShell +Realize tcl_panel +Realize pixel_table +Realize hdr_panel +Realize blink_panel +Realize help_panel +Realize xpan_panel +Realize xmag_panel +Realize warning + +reset-server + +# Set the gterm widget focus. +send colorbar setGterm ; send colorbar activate +send imagewin setGterm ; send imagewin activate + +# Crank it up. +activate + + diff --git a/vendor/x11iraf/ximtool/gui/compass.tcl b/vendor/x11iraf/ximtool/gui/compass.tcl new file mode 100644 index 00000000..13f5bed8 --- /dev/null +++ b/vendor/x11iraf/ximtool/gui/compass.tcl @@ -0,0 +1,215 @@ + + +################################################################################ +# Compass indicator procedures. +################################################################################ + +set compassColor 207 ;# normally this is yellow +set last_compass [send compass get on] ;# save compass state + +proc drawCompass args \ +{ + global ism_enable frame frameCache compassColor Compass Orient + global panner_x panner_y panner_width panner_height cur_objid + global redraw_compass last_compass + + + if {! [send compass get on]} \ + return + + eraseCompass ;# erase the old compass + + if {! [info exists frameCache($frame)] } { + set id -1 + } elseif {$cur_objid != [lindex $frameCache($frame) 1]} { + set id [lindex $frameCache($frame) 1] + } else { + set id $cur_objid + } + + if { [info exists Compass($id)] } { + set angle [lindex $Compass($id) 0] + set north_x [lindex $Compass($id) 1] + set north_y [lindex $Compass($id) 2] + set east_x [lindex $Compass($id) 3] + set east_y [lindex $Compass($id) 4] + set transpose [lindex $Compass($id) 5] + set xlab [lindex $Compass($id) 6] + set ylab [lindex $Compass($id) 7] + } else { + set north_x 0.0 ; set north_y 1.0 + set east_x 1.0 ; set east_y 0.0 + set xlab X ; set ylab Y + set angle 0.0 ; set transpose 0 + set Compass($id) { 0.0 1.0 0.0 1.0 0.0 0 X Y } + } + set xflip 1 + set yflip 1 + + # Adjust the compass for the display orientation (e.g. image sections + # used to flip an image during display). + if { [info exists Orient($id)] } { + set xflip [expr $xflip * [lindex $Orient($id) 1] ] + set yflip [expr $yflip * [lindex $Orient($id) 2] ] + } + + # Get the panner center position. + set pcx [expr ($panner_x + $panner_width / 2)] + set pcy [expr ($panner_y + $panner_height / 2)] + + # Setup for the overlay. + send imagewin getLogRes sv_xl sv_yl + send imagewin getPhysRes sv_xp sv_yp + send imagewin setLogRes $sv_xp $sv_yp + send imagewin setLineWidth 2 + + set xflip [ expr ($xflip * ([send xflipButton get state] ? -1 : 1))] + set yflip [ expr ($yflip * ([send yflipButton get state] ? -1 : 1))] + + # Normalized compass points. The first row are the axes, second is + # the pointer head, and last are the X/Y label coords. Assumes a + # zero rotation with North up and East left, or standard X/Y orientation. + set cpoints { + {-1 0} {0 0} {0 -1} + {-0.07 -0.85} {0 -1} {0.07 -0.85} {-0.07 -0.85} + {-1.2 0} {0 -1.2} + } + + + # Get rotation and scale factors. + set angle [expr "atan2($north_y,$north_x)"] + set coso [expr "cos (-$angle)"] + set sino [expr "sin (-$angle)"] + set scale [expr ([min $panner_width $panner_height] * 0.3)] + + # Initialize the drawing points. + set pts {} + + set cpoints { } + lappend cpoints [list $east_x $east_y ] + lappend cpoints [list 0 0] + lappend cpoints [list $north_x $north_y] + foreach p $cpoints { + # Get the scaled position. + set sx [expr ($scale * [lindex $p [expr "($transpose > 0) ? 1 : 0"]])] + set sy [expr ($scale * [lindex $p [expr "($transpose > 0) ? 0 : 1"]])] + + # Translate to the scaled position. + set rx [expr int($pcx + $sx + 0.5)] + set ry [expr int($pcy - $sy + 0.5)] + + # Now handle the axis flip. + set rx [expr (($xflip < 0) ? ($pcx + ($pcx - $rx)) : $rx)] + set ry [expr (($yflip < 0) ? ($pcy + ($pcy - $ry)) : $ry)] + lappend pts $rx $ry + } + + + set rpoints { } + set hpoints { {0.0 0.0} {-0.1 -0.07} {-0.1 0.07} {0.0 0.0} } + foreach p $hpoints { + # Break out the position. + set sx [lindex $p [expr "($transpose > 0) ? 1 : 0"]] + set sy [lindex $p [expr "($transpose > 0) ? 0 : 1"]] + + # Do the rotation of the head at the origin. + set rx [expr ($north_x + ($sx * $coso + $sy * $sino))] + set ry [expr ($north_y - ($sx * $sino + $sy * $coso))] + + lappend rpoints [list $rx $ry] + } + foreach p $rpoints { + # Get the scaled position. + set sx [expr ($scale * [lindex $p [expr "($transpose > 0) ? 1 : 0"]])] + set sy [expr ($scale * [lindex $p [expr "($transpose > 0) ? 0 : 1"]])] + + # Translate to the scaled position. + set rx [expr int($pcx + $sx + 0.5)] + set ry [expr int($pcy - $sy + 0.5)] + + # Now handle the axis flip. + set rx [expr (($xflip < 0) ? ($pcx + ($pcx - $rx)) : $rx)] + set ry [expr (($yflip < 0) ? ($pcy + ($pcy - $ry)) : $ry)] + lappend pts $rx $ry + } + + set lpoints { } + lappend lpoints [list [expr "$east_x-0.2"] $east_y ] + lappend lpoints [list $north_x [expr "$north_y+0.2"] ] + foreach p $lpoints { + # Get the scaled position. + set sx [expr ($scale * [lindex $p [expr "($transpose > 0) ? 1 : 0"]])] + set sy [expr ($scale * [lindex $p [expr "($transpose > 0) ? 0 : 1"]])] + + # Translate to the scaled position. + set rx [expr int($pcx + $sx + 0.5)] + set ry [expr int($pcy - $sy - 0.5)] + + # Now handle the axis flip. + set rx [expr (($xflip < 0) ? ($pcx + ($pcx - $rx)) : $rx)] + set ry [expr (($yflip < 0) ? ($pcy + ($pcy - $ry)) : $ry)] + lappend pts $rx $ry + } + + + # Draw the compass axes. + set compassPts [lrange $pts 0 5] + send imagewin setColorIndex $compassColor + send imagewin drawPolyline $compassPts + + + # Draw the compass pointer. + set head [lrange $pts 6 13] + send imagewin setFillType solid + send imagewin drawPolygon $head + + # Draw the labels. + send imagewin drawAlphaText [lindex $pts 14] [lindex $pts 15] $xlab + send imagewin drawAlphaText [lindex $pts 16] [lindex $pts 17] $ylab + + send imagewin setLogRes $sv_xl $sv_yl + + set redraw_compass 0 + +} ; foreach w {xflip yflip} { send $w addCallback drawCompass } + + +# This is a kludge to redraw the compass after it is erased when displaying +# a new image. Once the user moves the mouse back into the main window we'll +# do the redraw. +send imagewin addEventHandler drawCompass enterWindowMask + + + +proc createCompassMarker { pts args } \ +{ + set cm_points { } + lappend cm_points [lrange $pts 0 1] + lappend cm_points [lrange $pts 2 3] + lappend cm_points [lrange $pts 4 5] + + print [list $cm_points] + +} + + +proc eraseCompass args \ +{ + global panner_mapping + send imagewin refreshMapping $panner_mapping +} + +proc toggleCompass { widget type state args } \ +{ + global last_compass + + if {$state} { + drawCompass + set last_compass True + } else { + eraseCompass + set last_compass False + } +} ; send compass addCallback toggleCompass + + diff --git a/vendor/x11iraf/ximtool/gui/compass.tcl.bak b/vendor/x11iraf/ximtool/gui/compass.tcl.bak new file mode 100644 index 00000000..761b99c3 --- /dev/null +++ b/vendor/x11iraf/ximtool/gui/compass.tcl.bak @@ -0,0 +1,195 @@ + + +################################################################################ +# Compass indicator procedures. +################################################################################ + +set compassColor 207 ;# normally this is yellow +set last_compass [send compass get on] ;# save compass state + +proc drawCompass args \ +{ + global ism_enable frame frameCache compassColor Compass Orient + global panner_x panner_y panner_width panner_height cur_objid + global redraw_compass last_compass + + + if {! [send compass get on]} \ + return + + eraseCompass ;# erase the old compass + + if {! [info exists frameCache($frame)] } { + set id -1 + } elseif {$cur_objid != [lindex $frameCache($frame) 1]} { + set id [lindex $frameCache($frame) 1] + } else { + set id $cur_objid + } + + if { [info exists Compass($id)] } { + set angle [lindex $Compass($id) 0] + set north_x [lindex $Compass($id) 1] + set north_y [lindex $Compass($id) 2] + set east_x [lindex $Compass($id) 3] + set east_y [lindex $Compass($id) 4] + set transpose [lindex $Compass($id) 5] + set xlab [lindex $Compass($id) 6] + set ylab [lindex $Compass($id) 7] + } else { + set north_x 0.0 ; set north_y 1.0 + set east_x 1.0 ; set east_y 0.0 + set xlab X ; set ylab Y + set angle 0.0 ; set transpose 0 + set Compass($id) { 0.0 1.0 0.0 1.0 0.0 0 X Y } + } + set xflip 1 + set yflip 1 + + # Adjust the compass for the display orientation (e.g. image sections + # used to flip an image during display). + if { [info exists Orient($id)] } { + set xflip [expr $xflip * [lindex $Orient($id) 1] ] + set yflip [expr $yflip * [lindex $Orient($id) 2] ] + } + + # Get the panner center position. + set pcx [expr ($panner_x + $panner_width / 2)] + set pcy [expr ($panner_y + $panner_height / 2)] + + # Setup for the overlay. + send imagewin getLogRes sv_xl sv_yl + send imagewin getPhysRes sv_xp sv_yp + send imagewin setLogRes $sv_xp $sv_yp + send imagewin setLineWidth 2 + + set xflip [ expr ($xflip * ([send xflipButton get state] ? -1 : 1))] + set yflip [ expr ($yflip * ([send yflipButton get state] ? -1 : 1))] + + # Normalized compass points. The first row are the axes, second is + # the pointer head, and last are the X/Y label coords. Assumes a + # zero rotation with North up and East left, or standard X/Y orientation. + set cpoints { + {-1 0} {0 0} {0 -1} + {-0.07 -0.85} {0 -1} {0.07 -0.85} {-0.07 -0.85} + {-1.2 0} {0 -1.2} + } + + + # Get rotation and scale factors. + set angle [expr "atan2($north_y,$north_x)"] + set coso [expr "cos (-$angle)"] + set sino [expr "sin (-$angle)"] + set scale [expr ([min $panner_width $panner_height] * 0.3)] + + # Initialize the drawing points. + set pts {} + + set cpoints { } + lappend cpoints [list $east_x $east_y ] + lappend cpoints [list 0 0] + lappend cpoints [list $north_x $north_y] + foreach p $cpoints { + # Get the scaled position. + set sx [expr ($scale * [lindex $p [expr "($transpose > 0) ? 1 : 0"]])] + set sy [expr ($scale * [lindex $p [expr "($transpose > 0) ? 0 : 1"]])] + + # Translate to the scaled position. + set rx [expr int($pcx + $sx + 0.5)] + set ry [expr int($pcy - $sy + 0.5)] + + # Now handle the axis flip. + set rx [expr (($xflip < 0) ? ($pcx + ($pcx - $rx)) : $rx)] + set ry [expr (($yflip < 0) ? ($pcy + ($pcy - $ry)) : $ry)] + lappend pts $rx $ry + } + + + set rpoints { } + set hpoints { {0.0 0.0} {-0.1 -0.07} {-0.1 0.07} {0.0 0.0} } + foreach p $hpoints { + # Break out the position. + set sx [lindex $p [expr "($transpose > 0) ? 1 : 0"]] + set sy [lindex $p [expr "($transpose > 0) ? 0 : 1"]] + + # Do the rotation of the head at the origin. + set rx [expr ($north_x + ($sx * $coso + $sy * $sino))] + set ry [expr ($north_y - ($sx * $sino + $sy * $coso))] + + lappend rpoints [list $rx $ry] + } + foreach p $rpoints { + # Get the scaled position. + set sx [expr ($scale * [lindex $p [expr "($transpose > 0) ? 1 : 0"]])] + set sy [expr ($scale * [lindex $p [expr "($transpose > 0) ? 0 : 1"]])] + + # Translate to the scaled position. + set rx [expr int($pcx + $sx + 0.5)] + set ry [expr int($pcy - $sy + 0.5)] + + # Now handle the axis flip. + set rx [expr (($xflip < 0) ? ($pcx + ($pcx - $rx)) : $rx)] + set ry [expr (($yflip < 0) ? ($pcy + ($pcy - $ry)) : $ry)] + lappend pts $rx $ry + } + + set lpoints { } + lappend lpoints [list [expr "$east_x-0.2"] $east_y ] + lappend lpoints [list $north_x [expr "$north_y+0.2"] ] + foreach p $lpoints { + # Get the scaled position. + set sx [expr ($scale * [lindex $p [expr "($transpose > 0) ? 1 : 0"]])] + set sy [expr ($scale * [lindex $p [expr "($transpose > 0) ? 0 : 1"]])] + + # Translate to the scaled position. + set rx [expr int($pcx + $sx + 0.5)] + set ry [expr int($pcy - $sy - 0.5)] + + # Now handle the axis flip. + set rx [expr (($xflip < 0) ? ($pcx + ($pcx - $rx)) : $rx)] + set ry [expr (($yflip < 0) ? ($pcy + ($pcy - $ry)) : $ry)] + lappend pts $rx $ry + } + + + # Draw the compass axes. + set compassPts [lrange $pts 0 5] + send imagewin setColorIndex $compassColor + send imagewin drawPolyline $compassPts + + # Draw the compass pointer. + set head [lrange $pts 6 13] + send imagewin setFillType solid + send imagewin drawPolygon $head + + # Draw the labels. + send imagewin drawAlphaText [lindex $pts 14] [lindex $pts 15] $xlab + send imagewin drawAlphaText [lindex $pts 16] [lindex $pts 17] $ylab + + send imagewin setLogRes $sv_xl $sv_yl + + set redraw_compass 0 + +} ; foreach w {xflip yflip} { send $w addCallback drawCompass } + + +proc eraseCompass args \ +{ + global panner_mapping + send imagewin refreshMapping $panner_mapping +} + +proc toggleCompass { widget type state args } \ +{ + global last_compass + + if {$state} { + drawCompass + set last_compass True + } else { + eraseCompass + set last_compass False + } +} ; send compass addCallback toggleCompass + + diff --git a/vendor/x11iraf/ximtool/gui/compass.tcl.new b/vendor/x11iraf/ximtool/gui/compass.tcl.new new file mode 100644 index 00000000..2822e1d8 --- /dev/null +++ b/vendor/x11iraf/ximtool/gui/compass.tcl.new @@ -0,0 +1,205 @@ + + +################################################################################ +# Compass indicator procedures. +################################################################################ + +set compassColor 207 ;# normally this is yellow +set last_compass [send compass get on] ;# save compass state + +proc drawCompass args \ +{ + global ism_enable frame frameCache compassColor Compass Orient + global panner_x panner_y panner_width panner_height cur_objid + global redraw_compass last_compass + + + if {! [send compass get on]} \ + return + + eraseCompass ;# erase the old compass + + if {! [info exists frameCache($frame)] } { + set id -1 + } elseif {$cur_objid != [lindex $frameCache($frame) 1]} { + set id [lindex $frameCache($frame) 1] + } else { + set id $cur_objid + } + + if { [info exists Compass($id)] } { + set angle [lindex $Compass($id) 0] + set n_x [lindex $Compass($id) 1] + set n_y [lindex $Compass($id) 2] + set e_x [lindex $Compass($id) 3] + set e_y [lindex $Compass($id) 4] + set trans [lindex $Compass($id) 5] + set xlab [lindex $Compass($id) 6] + set ylab [lindex $Compass($id) 7] + } else { + set n_x 0.0 ; set n_y 1.0 + set e_x 1.0 ; set e_y 0.0 + set xlab X ; set ylab Y + set angle 0.0 ; set trans 0 + set Compass($id) { 0.0 0.0 1.0 1.0 0.0 0 X Y } + } + set xflip 1 + set yflip 1 + + # Adjust the compass for the display orientation (e.g. image sections + # used to flip an image during display). + if { [info exists Orient($id)] } { + set xflip [expr $xflip * [lindex $Orient($id) 1] ] + set yflip [expr $yflip * [lindex $Orient($id) 2] ] + } + + # Get the panner center position. + set pcx [expr ($panner_x + $panner_width / 2)] + set pcy [expr ($panner_y + $panner_height / 2)] + + # Setup for the overlay. + send imagewin getLogRes sv_xl sv_yl + send imagewin getPhysRes sv_xp sv_yp + send imagewin setLogRes $sv_xp $sv_yp + send imagewin setLineWidth 2 + + set xflip [ expr ($xflip * ([send xflipButton get state] ? -1 : 1))] + set yflip [ expr ($yflip * ([send yflipButton get state] ? -1 : 1))] + + # Normalized compass points. The first row are the axes, second is + # the pointer head, and last are the X/Y label coords. Assumes a + # zero rotation with North up and East left, or standard X/Y orientation. + set cpoints { + {-1 0} {0 0} {0 -1} + {-0.07 -0.85} {0 -1} {0.07 -0.85} {-0.07 -0.85} + {-1.2 0} {0 -1.2} + } + + + # Get rotation and scale factors. + set angle [expr "atan2($n_y,$n_x)"] + set scale [expr ([min $panner_width $panner_height] * 0.3)] + + # Initialize the graphics. + send imagewin setColorIndex $compassColor + send imagewin setFillType solid + + # Now draw the parts of the compass. + drawCompassAxes $n_x $n_y $e_x $e_y $trans $xflip $yflip $scale \ + $pcx $pcy + drawCompassLabels $n_x $n_y $e_x $e_y $trans $xflip $yflip $scale\ + $pcx $pcy $xlab $ylab + drawCompassPtr $n_x $n_y $e_x $e_y $trans $xflip $yflip $scale \ + $pcx $pcy $angle + + # Reset the logical resolution of the window. + send imagewin setLogRes $sv_xl $sv_yl + set redraw_compass 0 + +} ; foreach w {xflip yflip} { send $w addCallback drawCompass } + + +proc drawCompassAxes {n_x n_y e_x e_y trans xflip yflip scale pcx pcy} \ +{ + set cpoints { } + lappend cpoints [list $e_x $e_y ] + lappend cpoints [list 0 0] + lappend cpoints [list $n_x $n_y] + foreach p $cpoints { + # Get the scaled position. + set sx [expr ($scale * [lindex $p [expr "($trans > 0) ? 1 : 0"]])] + set sy [expr ($scale * [lindex $p [expr "($trans > 0) ? 0 : 1"]])] + + # Translate to the scaled position. + set rx [expr int($pcx + $sx + 0.5)] + set ry [expr int($pcy - $sy + 0.5)] + + lappend pts $rx $ry + } + + # Draw the compass axes. + send imagewin drawPolyline $pts +} + +proc drawCompassLabels {n_x n_y e_x e_y trans xflip yflip scale pcx pcy xlab ylab} \ +{ + + set pts { } + set lpoints { } + + set xo [expr (0.2 * [expr "($xflip > 0) ? -1 : 1"])] + set yo [expr (0.2 * [expr "($yflip > 0) ? 1 : -1"])] + + lappend lpoints [list [expr "$e_x+$xo"] $e_y ] + lappend lpoints [list $n_x [expr "$n_y+$yo"] ] + foreach p $lpoints { + # Get the scaled position. + set sx [expr ($scale * [lindex $p [expr "($trans > 0) ? 1 : 0"]])] + set sy [expr ($scale * [lindex $p [expr "($trans > 0) ? 0 : 1"]])] + + # Translate to the scaled position. + set rx [expr int($pcx + $sx + 0.5)] + set ry [expr int($pcy - $sy - 0.5)] + + lappend pts $rx $ry + } + + # Draw the labels. + send imagewin drawAlphaText [lindex $pts 0] [lindex $pts 1] $xlab + send imagewin drawAlphaText [lindex $pts 2] [lindex $pts 3] $ylab +} + +proc drawCompassPtr {n_x n_y e_x e_y trans xflip yflip scale pcx pcy angle} \ +{ + + set coso [expr "cos (-$angle)"] + set sino [expr "sin (-$angle)"] + + # Initialize the drawing points. + set pts {} + set hpoints { {0.0 0.0} {-0.1 -0.07} {-0.1 0.07} {0.0 0.0} } + foreach p $hpoints { + # Break out the position. + set sx [lindex $p [expr "($trans > 0) ? 1 : 0"]] + set sy [lindex $p [expr "($trans > 0) ? 0 : 1"]] + + # Do the rotation of the head at the origin. + set rx [expr ($n_x + ($sx * $coso + $sy * $sino))] + set ry [expr ($n_y - ($sx * $sino + $sy * $coso))] + + # Get the scaled position. + set sx [expr ($scale * $rx)] + set sy [expr ($scale * $ry)] + + # Translate to the scaled position. + set rx [expr int($pcx + $sx + 0.5)] + set ry [expr int($pcy - $sy + 0.5)] + + lappend pts $rx $ry + } + + # Draw the compass pointer. + send imagewin drawPolygon $pts +} + + +proc eraseCompass args \ +{ + global panner_mapping + send imagewin refreshMapping $panner_mapping +} + +proc toggleCompass { widget type state args } \ +{ + global last_compass + + if {$state} { + drawCompass + set last_compass True + } else { + eraseCompass + set last_compass False + } +} ; send compass addCallback toggleCompass + + diff --git a/vendor/x11iraf/ximtool/gui/display.res b/vendor/x11iraf/ximtool/gui/display.res new file mode 100644 index 00000000..155d8e17 --- /dev/null +++ b/vendor/x11iraf/ximtool/gui/display.res @@ -0,0 +1,451 @@ + +set Resources(display_panel) { \ + + !================================ + ! Main Display Control Panel. + !================================ + *controlPanel*internalWidth: 0 + *controlPanel*borderWidth: 0 + + *TextBox.font: 7x13bold + *TextToggle.font: -adobe-times-medium-r-normal-*-12-*-*-*-*-*-iso8859-1 + *Command.font: -adobe-times-bold-i-normal-*-12-*-*-*-*-*-iso8859-1 + *Toggle.font: -adobe-times-medium-r-normal-*-12-*-*-*-*-*-iso8859-1 + *Label.font: -*-helvetica-medium-r-normal-*-12-*-iso8859-1 + *MultiList.font: -adobe-times-medium-r-normal-*-12-*-*-*-*-*-iso8859-1 + *toggleZoom.font: -*-helvetica-medium-r-normal-*-12-*-iso8859-1 + *centerFrame.font: -*-helvetica-medium-r-normal-*-12-*-iso8859-1 + *zoom*Command.font: 7x13bold + + *blinkFrame1.font: -adobe-times-medium-r-normal-*-12-*-iso8859-1 + *blinkFrame2.font: -adobe-times-medium-r-normal-*-12-*-iso8859-1 + *blinkFrame3.font: -adobe-times-medium-r-normal-*-12-*-iso8859-1 + *blinkFrame4.font: -adobe-times-medium-r-normal-*-12-*-iso8859-1 + *matchButton.font: -adobe-times-medium-r-normal-*-12-*-iso8859-1 + *registerButton.font: -adobe-times-medium-r-normal-*-12-*-iso8859-1 + *blinkButton.font: -adobe-times-medium-r-normal-*-12-*-iso8859-1 + *autoregButton.font: -adobe-times-medium-r-normal-*-12-*-iso8859-1 + + *controlPanel.layout: vertical { \ + 5 < -5 > \ + horizontal { \ + -1 \ + viewBox < +inf -inf * > \ + -1 \ + } \ + 5 < -5 > \ + horizontal { \ + -1 \ + enhancementBox < +inf -inf * +inf -inf > \ + -5 \ + vertical { \ + -1 \ + blinkBox < * +inf - inf > \ + 1 \ + optionsBox < * +inff -inff > \ + -1 \ + } \ + -1 \ + } \ + -5 \ + controlBox < +inf * > \ + -5 \ + } + + ! VIEW + ! ------------------ + *viewBox.label: View + *viewBox.location: 0 0 410 0 + *viewBox.shrinkToFit: True + *viewBox.outerOffset: 7 + + *view.layout: vertical { \ + 5 < +inf -5 > \ + horizontal { \ + -1 \ + frameSelect \ + vertical { \ + 3 < -3 > \ + frameDataBox < +inff -100% * +inff -100% > \ + 3 < -3 > \ + } \ + zoomBox \ + -1 \ + } \ + 1 < +inf > \ + viewButtons < +inf -inf * +inf -inf > \ + 5 < +inf -5 > \ + } + + *frameDataBox.frameType: sunken + *frameDataBox.frameWidth: 1 + *frameData.width: 150 + *frameData.height: 50 + + *frameSelect.location: 0 0 72 0 + *frameSelect.shrinkToFit: True + *frameSelect.outerOffset: 7 + *frameSelect.innerOffset: 2 + *frameSelect.frameWidth: 2 + *frameSelect*offIcon: diamond0s + *frameSelect*onIcon: diamond1s + *frameSelect*highlightColor: blue + *frameSelect.label: Frame + + *frameBox.layout: vertical { \ + 3 \ + horizontal { -2 frlistBox < * +inff -inff > } \ + 3 < +inf -3 > \ + horizontal { prevFrame < +inf -inf * > 4 nextFrame < +inf -inf * > } \ + } + *framePort.allowVert: True + *framePort.allowHoriz: False + *framePort.useRight: True + *framePort.height: 80 + + *frameBox*alignment: left + *frameBox*frameWidth: 0 + *frameBox*frame1.label: 1\ \ + *frameBox*frame2.label: 2\ \ + *frameBox*frame3.label: 3\ \ + *frameBox*frame4.label: 4\ \ + + *frameBox*frame5.label: 5\ \ + *frameBox*frame6.label: 6\ \ + *frameBox*frame7.label: 7\ \ + *frameBox*frame8.label: 8\ \ + *frameBox*frame9.label: 9\ \ + *frameBox*frame10.label: 10\ + *frameBox*frame11.label: 11\ + *frameBox*frame12.label: 12\ + *frameBox*frame13.label: 13\ + *frameBox*frame14.label: 14\ + *frameBox*frame15.label: 15\ + *frameBox*frame16.label: 16\ + *frameBox*Command.width: 24 + *frameBox*prevFrame.label: xxx + *frameBox*nextFrame.label: xxx + + *frameList*location: 0 0 50 20 + *frameList.layout: vertical { \ + frame1 < +inf * >\ + frame2 < +inf * >\ + frame3 < +inf * >\ + frame4 < +inf * >\ + frame5 < +inf * >\ + frame6 < +inf * >\ + frame7 < +inf * >\ + frame8 < +inf * >\ + frame9 < +inf * >\ + frame10 < +inf * >\ + frame11 < +inf * >\ + frame12 < +inf * >\ + frame13 < +inf * >\ + frame14 < +inf * >\ + frame15 < +inf * >\ + frame16 < +inf * >\ + } + + + *zoomBox.label: Zoom: + *zoomBox.location: 0 0 160 127 + *zoomBox.outerOffset: 7 + *zoomBox.shrinkToFit: True + *zoomBox*TextButton.frameWidth: 1 + *zoomBox*TextButton.outerOffset: 0 + + *controlPanel*zoom*internalWidth: 4 + *zoom.layout: vertical { \ + space = ((50% of width zoom) - (50% of width z5)) \ + 1 < +inf > \ + horizontal { \ + vertical { toggleZoom < +inf * +inf > 1 } \ + 1 \ + vertical { 1 < +inf > z5 1 < +inf > z3 0 < +inf > } \ + 1 \ + vertical { zoomIn < +inf * +inf > 1 } \ + } \ + 1 \ + horizontal { \ + 1 < +inf > \ + d8 1 d4 1 d2 1 x1 1 z2 1 z4 1 z8 \ + 1 < +inf > \ + } \ + 1 \ + horizontal { \ + vertical { 1 zoomOut < +inf * +inf > } \ + 1 \ + vertical { 0 < +inf > d3 1 < +inf > d5 1 < +inf > } \ + 1 \ + vertical { 1 centerFrame < +inf * +inf > } \ + } \ + 1 < +inf > \ + } + + *toggleZoom.label: Toggle\nZoom + *toggleZoom.outerOffset: 2 + *toggleZoom.width: 30 + *toggleZoom.height: 25 + + *zoomIn.label: Zoom\nIn + *zoomIn.outerOffset: 2 + *zoomIn.width: 30 + *zoomIn.height: 25 + + *x1.label: 1 + *z2.label: 2 + *z3.label: 3 + *z4.label: 4 + *z5.label: 5 + *z8.label: 8 + + *controlPanel*zoomIn.foreground: royalBlue3 + *controlPanel*z4.foreground: royalBlue3 + *controlPanel*z5.foreground: royalBlue3 + *controlPanel*z8.foreground: royalBlue3 + *controlPanel*z2.foreground: royalBlue3 + *controlPanel*z3.foreground: royalBlue3 + + *zoomOut.label: Zoom\nOut + *zoomOut.outerOffset: 2 + *zoomOut.width: 30 + *zoomOut.height: 25 + + *centerFrame.label: Center + *centerFrame.outerOffset: 2 + *centerFrame.width: 30 + *centerFrame.height: 25 + + *d2.label: 2 + *d3.label: 3 + *d4.label: 4 + *d5.label: 5 + *d8.label: 8 + + *controlPanel*zoomOut.foreground: mediumVioletRed + *controlPanel*d2.foreground: mediumVioletRed + *controlPanel*d3.foreground: mediumVioletRed + *controlPanel*d4.foreground: mediumVioletRed + *controlPanel*d5.foreground: mediumVioletRed + *controlPanel*d8.foreground: mediumVioletRed + + *viewButtons.location: 0 0 100 80 + *viewButtons.layout: horizontal { \ + 2 < -2 > \ + aspect < +inf * > 2 \ + flipX < +inf * > 2 \ + flipY < +inf * > 2 \ + flipXY < +inf * > 2 \ + clearFrame < +inf * > 2 \ + fitFrame < +inf * > \ + 2 < -2 > \ + } + *nextFrame.label: Next Frame + *prevFrame.label: Previous Frame + *fitFrame.label: Fit Frame + *aspect.label: Aspect + *clearFrame.label: Clear Frame + *flipX.label: Flip X + *flipY.label: Flip Y + *flipXY.label: Flip XY + + + ! ENHANCEMENT + ! ------------------ + *enhancementBox.label: Enhancement + *enhancementBox.location: 0 0 110 0 + *enhancementBox.shrinkToFit: True + *enhancementBox.outerOffset: 7 + + *enhance*Viewport.allowVert: True + *enhance*Viewport.allowHoriz: False + *enhance*Viewport.useRight: False + *enhance*Viewport.resizeable: True + *enhance*Scrollbar.width: 17 + *enhance*Scrollbar.minimumThumb: 10 + *enhance.layout: vertical { \ + 3 < -3 > \ + horizontal { \ + 2 < -2 > \ + colorlistFrame < +inf -inf * +inff -inff > \ + 2 < -2 > \ + } \ + 2 \ + horizontal { \ + 2 < -2 > \ + colordataFrame < +inf -inf * +inf -inf > \ + 2 < -2 > \ + } \ + 5 < -5 > \ + horizontal { \ + 2 < -2 > \ + vertical { -1 contrastLabel 3 < -3 > brightnessLabel -1 } \ + 3 < -3 > \ + vertical { \ + -1 \ + contrastSlider < +inf -inf * > \ + 3 < -3 > \ + brightnessSlider < +inf -inf * > \ + -1 \ + } \ + 2 < -2 > \ + } \ + 5 < -5 > \ + horizontal { \ + 3 < -3 > \ + invertButton < +inf -inf * > \ + 5 < -5 > \ + optimizeButton < +inf -inf * > \ + 3 < -3 > \ + } \ + 3 < -3 > \ + } + + *enhance*frameType: sunken + *enhance*frameWidth: 1 + *enhance*BorderWidth: 0 + *enhance*Label.ShadowWidth: 0 + + *colorlist.width: 100 + *colorlist.height: 98 + *colordata.width: 100 + *colordata.height: 45 + *enhance*colordata.frameWidth: 0 + *contrastLabel.label: x + *contrastSlider.location: 0 0 100 17 + *brightnessLabel.label: x + *brightnessSlider.location: 0 0 100 17 + *invertButton.label: Invert + *optimizeButton.label: Optimize + + + ! --------------------- + ! BLINK/REGISTER + ! --------------------- + *blinkBox.label: Blink/Register + *blinkBox.location: 0 0 235 0 + *blinkBox.shrinkToFit: True + *blinkBox.outerOffset: 7 + *blinkBox*TextToggle.frameWidth: 1 + + *blink.layout: vertical { \ + space = (width blinkFramesLabel - width blinkRateLabel) \ + 3 < -3 > \ + horizontal { \ + 0 \ + blinkFramesLabel \ + 3 < +inf > \ + blinkFrame1 < -50% * > \ + blinkFrame2 < -50% * > \ + blinkFrame3 < -50% * > \ + blinkFrame4 < -50% * > \ + 4 < +inf > \ + blinkPanel < -50% * > \ + blinkReset \ + 2 \ + } \ + 5 < -5 > \ + horizontal { \ + $space \ + blinkRateLabel \ + 2 \ + BRframe < +inf * > \ + } \ + 5 < +inf -100% > \ + horizontal { \ + vertical { \ + 2 matchButton < +inf * > 4 < -4 > registerButton < +inf * > \ + } \ + 5 < -5 > \ + vertical { \ + 1 blinkButton < +inf * > 4 < -4 > autoregButton < +inf * > \ + } \ + } \ + } + + *BRlayout.layout: horizontal { \ + BRdecrease \ + BRtext < +inf -100% * > \ + BRincrease \ + } + + *blink.Label.borderWidth: 0 + *blink.Label.shadowWidth: 0 + *controlPanel*blink*internalWidth: 4 + *blink.TextToggle.location: 0 0 102 23 + *blink.TextToggle.frameWidth: 1 + *blink*TextToggle.highlightColor: yellow + *blink*TextToggle.offIcon: square0s + *blink*TextToggle.onIcon: square1s + *blink*TextToggle.outerOffset: 1 + *blink*Command.height: 27 + *blink*Arrow.width: 16 + *blink*Arrow.height: 25 + + + *blinkFramesLabel.label: Frames List: + *blinkFrame1.label: 1 + *blinkFrame2.label: 2 + *blinkFrame3.label: 3 + *blinkFrame4.label: 4 + *blinkPanel.label: x + *blinkPanel.width: 20 + *blinkReset.label: Reset + + *blinkRateLabel.label: Blink Rate: + *BRframe.frameType: sunken + *BRframe.frameWidth: 1 + *BRtext.width: 40 + *BRtext.height: 23 + *BRdecrease.direction: left + *BRincrease.direction: right + *registerButton.label: Register + *matchButton.label: Match LUTs + *blinkButton.label: Blink + *autoregButton.label: Auto-Register + + ! OPTIONS + ! --------------------- + *optionsBox.label: Options + *optionsBox.location: 0 0 220 0 + *optionsBox.shrinkToFit: False + *optionsBox.outerOffset: 7 + *optionsBox*offIcon: square0s + *optionsBox*onIcon: square1s + *optionsBox*selectionStyle: multi + *optionsBox*highlightColor: yellow + *optionsBox.TextToggle.location: 0 0 102 20 + *optionsBox.TextToggle.frameWidth: 0 + *optionsBox.TextToggle.highlightThickness: 0 + *optionsBox*alignment: left + + *pannerButton.label: Panner + *coordsBoxButton.label: Coords Box + *autoscaleButton.label: Autoscale + *antialiasButton.label: Antialias + *tileFramesButton.label: Tile Frames + *magnifierButton.label: Magnifier + *warningsButton.label: Warnings + *peakupButton.label: Centroid Peaks + *peakupButton.on: True + + ! CONTROL + ! ---------------------- + *controlBox.frameType: chiseled + *controlBox.frameWidth: 2 + *controlBox.outerOffset: 7 + *controlBox.innerOffset: 5 + *controlBox.height: 30 + + *control.layout: horizontal { \ + 1 \ + initializeButton < +inf * > \ + 5 < -5 > \ + normalizeButton < +inf * > \ + 80 < +inf -100% > \ + } + + *initializeButton.label: Initialize + *normalizeButton.label: Normalize +} + diff --git a/vendor/x11iraf/ximtool/gui/func.tcl b/vendor/x11iraf/ximtool/gui/func.tcl new file mode 100644 index 00000000..3144e214 --- /dev/null +++ b/vendor/x11iraf/ximtool/gui/func.tcl @@ -0,0 +1,202 @@ + +################################################################################ +# CURSOR CENTEROID AND AUTO-REGISTER FUNCTIONS. +################################################################################ + +# Set the centroiding box size. +set ctid 0 +set cid 0 + +proc cbxDestroy args \ +{ + global centerBoxSize cid ctid + catch { + if {$ctid != 0} { + send cbm$cid destroy + deleteTimedCallback $ctid + set ctid 0 + } + } +} + +proc setCtrBoxSize { x y delta args } \ +{ + global centerBoxSize cid ctid + global cpXscale cpYscale + + incr centerBoxSize $delta + if {$centerBoxSize <= 1} { set centerBoxSize 1 } + + # Kill off any old markers before drawing the new one. + catch { + if {$ctid != 0} { + send cbm$cid destroy + deleteTimedCallback $ctid + set ctid 0 + } + } + + # create a transient marker indicating the centering box and post a + # callback to delete it in about a second. + incr cid + send imagewin createMarker cbm$cid \ + type box \ + createMode noninteractive \ + lineColor red \ + x $x \ + y $y \ + width [expr $cpXscale * $centerBoxSize] \ + height [expr $cpXscale * $centerBoxSize] \ + activated True \ + visible True \ + sensitive False + + set ctid [ postTimedCallback cbxDestroy 500] +} + + +# Box size is half-width of the marker size. Value is the slider value. +set focusBoxSize $winWidth +set focusValue 100.0 +set fid 0 +set ftid 0 +set moving 0 + +proc setFocusBoxSize { sz args } \ +{ + global focusBoxSize fid ftid focusValue moving + global winWidth winHeight + + + if { $moving == 0 } { + return done + } + + if { $winWidth < $winHeight } { + set max [expr $winWidth / 2 - 64] + } else { + set max [expr $winHeight / 2 - 64] + } + set focusBoxSize [expr 64 + ($sz * $max) - 1] + #send client setOption cmfocus [expr ($focusBoxSize / 2)] + send client setOption cmfocus $focusBoxSize + + # Destroy any existing markers. + catch { + if {$ftid != 0} { + send fm$fid destroy + set ftid 0 + } + } + + # create a transient marker indicating the centering box and post a + # callback to delete it in about a second. + incr fid + send imagewin createMarker fm$fid \ + type box \ + createMode noninteractive \ + lineColor green \ + lineWidth 4 \ + x [expr $winWidth / 2] \ + y [expr $winHeight / 2] \ + width $focusBoxSize \ + height $focusBoxSize \ + activated True \ + visible True \ + sensitive False + + set ftid [ postTimedCallback fbxDestroy 500] + set moving 0 +} + +proc fbxDestroy args \ +{ + global fid ftid moving + catch { + if {$ftid != 0} { + send fm$fid destroy + set ftid 0 + } + } +} + +proc setFocusSize { widget cbtype x y } \ +{ + global focusValue ftid moving + + # Only update once we've stopped the movement. + if { $x == $focusValue && $moving == 1 } { + set ftid [ postWorkProc setFocusBoxSize $x ] + } else { + set moving 1 + } + set focusValue $x +} ; send focusSlider addCallback setFocusSize scroll + + +# Compute a centroid offset for the current position to peak-up on the +# feature. + +proc centroid { x y type args } \ +{ + global centerBoxSize + global cpXscale cpYscale + + # Convert to image coords. + set sz [expr "int ($centerBoxSize * $cpXscale)"] + + # Get the centroid position. + if {$type != "min"} { + if {[send peakupButton get on]} { + set center [ send client centroid $x $y $sz ] + } else { + set center [ send client centroid $x $y $sz max ] + } + } else { + set center [ send client centroid $x $y $sz min ] + } + + # Now reposition the cursor. + set xoff [lindex $center 0 ] + set yoff [lindex $center 1 ] + move_cursor $xoff $yoff +} + + +# Set the auto-register center offset position +proc offset { x y args } \ +{ + global frame blinkFrames auto_reg + global frameCenterX frameCenterY + global frameOffsetX frameOffsetY + + # No-op of auto-register isn't on. + if { $auto_reg == 0 } { + Wexec client "Auto-Register is not enabled!" + return + } + + # If we're not in the blink frames list ignore the request. + if { [string first $frame $blinkFrames] == -1 } { + Wexec client "Frame not in current\nregister list." + return + } + + set rx $x; set ry $y + set raster 0 + + # Convert raw screen coordinates to frame buffer raster coordinates. + send imagewin unmapPixel $x $y raster rx ry + + # Select a pixel. + set xoff [expr "int ($rx) - $frameCenterX($frame)" ] + set yoff [expr "int ($ry) - $frameCenterY($frame)" ] + + set frameOffsetX($frame) $xoff + set frameOffsetY($frame) $yoff + + # Adjust the display. + send client setOffset $xoff $yoff +} + + diff --git a/vendor/x11iraf/ximtool/gui/global.res b/vendor/x11iraf/ximtool/gui/global.res new file mode 100644 index 00000000..c91dde63 --- /dev/null +++ b/vendor/x11iraf/ximtool/gui/global.res @@ -0,0 +1,161 @@ + +set Resources(global) { \ + + !--------------------------------------------------------- + ! Define some global widget resources for the main panels. + !--------------------------------------------------------- + *shadowWidth: 1 + *background: #c4c4c4 +! *foreground: black + *Arrow.width: 16 + *Arrow.height: 25 + *Text*height: 21 + *Command.height: 21 + *Command.highlightThickness: 1 + *MenuButton.height: 21 + *MenuButton.highlightThickness: 1 + *Label.borderWidth: 0 + *Label.shadowWidth: 0 + *TextButton.shadowWidth: 0 + *TextButton.highlightThickness: 1 + *TextToggle*borderWidth: 0 + *TextToggle.highlightThickness: 0 + *Toggle.highlightThickness: 1 + *Group.shrinkToFit: True + + *Arrow.foreground: gray + *Arrow.background: #adadad + *Text*background: #adadad + *AsciiText*background: #adadad + *TextBox.background: #adadad + *MultiList*background: #adadad + *Slider2d.thumbColor: #c4c4c4 + + + !------------------------------------------------------------- + ! Define resources to take advantage of the 3D scrollbar look. + !------------------------------------------------------------- + *Scrollbar*background: #c4c4c4 + *Scrollbar*shadowWidth: 1 + *Scrollbar*width: 15 + *Scrollbar*height: 15 + *Scrollbar*cursorName: top_left_arrow + *Scrollbar*pushThumb: true + + *HTML.Scrollbar.shadowWidth: 1 + *HTML*Scrollbar*width: 15 + *HTML*Scrollbar*height: 15 + + + !---------------------------------------- + ! Menu resources giving a shadow effect. + !---------------------------------------- + *SmeBSB.leftMargin: 10 + *SmeBSB.rightMargin: 5 + *SmeBSB.shadowWidth: 2 + *SmeBSB.foreground: #e5e5e5 + *SmeBSB.background: SteelBlue + *SimpleMenu.background: #c4c4c4 + *SimpleMenu.borderWidth: 2 + *SimpleMenu.borderColor: black + *SimpleMenu.line1.foreground: #9c9c9c + *SimpleMenu.line2.foreground: #e8e8e8 + *SimpleMenu.line3.foreground: #9c9c9c + *SimpleMenu.line4.foreground: #e8e8e8 + *SimpleMenu.line5.foreground: #9c9c9c + *SimpleMenu.line6.foreground: #e8e8e8 + *SimpleMenu.line7.foreground: #9c9c9c + *SimpleMenu.line8.foreground: #e8e8e8 + *SimpleMenu.line9.foreground: #9c9c9c + *SimpleMenu.line10.foreground: #e8e8e8 + *SimpleMenu.line11.foreground: #9c9c9c + *SimpleMenu.line12.foreground: #e8e8e8 + *SimpleMenu.line13.foreground: #9c9c9c + *SimpleMenu.line14.foreground: #e8e8e8 + *SimpleMenu.line15.foreground: #9c9c9c + *SimpleMenu.line16.foreground: #e8e8e8 + *SimpleMenu.line17.foreground: #9c9c9c + *SimpleMenu.line18.foreground: #e8e8e8 + *SimpleMenu.line19.foreground: #9c9c9c + *SimpleMenu.line20.foreground: #e8e8e8 + *SimpleMenu.line21.foreground: #9c9c9c + *SimpleMenu.line22.foreground: #e8e8e8 + *SimpleMenu.line23.foreground: #9c9c9c + *SimpleMenu.line24.foreground: #e8e8e8 + *SimpleMenu.line25.foreground: #9c9c9c + *SimpleMenu.line26.foreground: #e8e8e8 + *SimpleMenu.line27.foreground: #9c9c9c + *SimpleMenu.line28.foreground: #e8e8e8 + *SimpleMenu.line29.foreground: #9c9c9c + *SimpleMenu.line30.foreground: #e8e8e8 + *SimpleMenu.line31.foreground: #9c9c9c + *SimpleMenu.line32.foreground: #e8e8e8 + *SimpleMenu.line33.foreground: #9c9c9c + *SimpleMenu.line34.foreground: #e8e8e8 + *SimpleMenu.line35.foreground: #9c9c9c + *SimpleMenu.line36.foreground: #e8e8e8 + *SimpleMenu.line37.foreground: #9c9c9c + *SimpleMenu.line38.foreground: #e8e8e8 + *SimpleMenu.line39.foreground: #9c9c9c + *SimpleMenu.line40.foreground: #e8e8e8 + + + !--------------------------------------------- + ! Fixups for 24-bit displays + !--------------------------------------------- + *hFindEntry.background: #adadad + *hdrIGText.background: #adadad + *hdrKGText.background: #adadad + *hfEntry.background: #adadad + *printcmd.background: #adadad + *titleString.background: #adadad + *fnameText.background: #adadad + *imtemplateText.background: #adadad + *z1Value.background: #adadad + *z2Value.background: #adadad + *nsampValue.background: #adadad + *saveFile.background: #adadad + *infoText.background: #adadad + *wtName.background: #adadad + *wtTitle.background: #adadad + *wtFBCfg.background: #adadad + *wtIPixval.background: #adadad + *wtSPixval.background: #adadad + *wtBPixval.background: #adadad + *wtWcs1.background: #adadad + *wtWcs2.background: #adadad + *wtWcs3.background: #adadad + *wtWcs4.background: #adadad + *wcsIsmCmd.background: #adadad + *tclEntry.background: #adadad + + *hFindEntry.foreground: #000000 + *hdrIGText.foreground: #000000 + *hdrKGText.foreground: #000000 + *hfEntry.foreground: #000000 + *printcmd.foreground: #000000 + *titleString.foreground: #000000 + *fnameText.foreground: #000000 + *imtemplateText.foreground: #000000 + *z1Value.foreground: #000000 + *z2Value.foreground: #000000 + *nsampValue.foreground: #000000 + *saveFile.foreground: #000000 + *infoText.foreground: #000000 + *wtName.foreground: #000000 + *wtTitle.foreground: #000000 + *wtFBCfg.foreground: #000000 + *wtIPixval.foreground: #000000 + *wtSPixval.foreground: #000000 + *wtBPixval.foreground: #000000 + *wtWcs1.foreground: #000000 + *wtWcs2.foreground: #000000 + *wtWcs3.foreground: #000000 + *wtWcs4.foreground: #000000 + *wcsIsmCmd.foreground: #000000 + *tclEntry.foreground: #000000 +} + + + + diff --git a/vendor/x11iraf/ximtool/gui/global.tcl b/vendor/x11iraf/ximtool/gui/global.tcl new file mode 100644 index 00000000..38115f93 --- /dev/null +++ b/vendor/x11iraf/ximtool/gui/global.tcl @@ -0,0 +1,147 @@ + + +############################################################################## +# Utility Procedures. +############################################################################## + +# Utility procedure to test True/False strings in resources. +proc true {v} {expr {$v == "true" || $v == "True" || $v == "TRUE"}} + +# Utility functions. +proc min {a b} { expr {($a < $b) ? $a : $b} } +proc max {a b} { expr {($a > $b) ? $a : $b} } + +# Global variables. +set version "NOAO/IRAF XImtool Version 2.0BETA" + +set winWidth [send imagewin get width ] ;# display window width +set winHeight [send imagewin get height] ;# display window height +set appWidth [send display get width ] ;# application window width +set appHeight [send display get height] ;# application window height +set marker none ;# selected marker +set markno 0 ;# used to name new markers +set ruler none ;# selected ruler +set ruleno 0 ;# used to name new rulers +set blinkFrames "1 2" ;# list of blink frames +set auto_reg 0 + +set panel_up 0 ;# control panel mapped +set help_up 0 ;# help panel mapped +set ism_enable 0 ;# ISM is running +set ism_capable 1 ;# Client is ISM capable +set frameCache(0) "" ;# ISM frame cache + +set ctype "equatorial" ;# default coord type +set eqtype "fk5" ;# default equatorial type + +# Global constants. +set MAX_FRAMES 16 ;# max frame buffers + +# TCL constants +set tcl_precision 8 + + + +# Window resize callbacks. +proc winResize {w width height} { + global winWidth winHeight + + if {$width <= 1 || $height <= 1} \ + return + + set winWidth $width + set winHeight $height +} ; send imagewin addCallback winResize resize + +proc appResize {w width height} \ +{ + global doHcut doVcut cutXPos cutYPos + global appWidth appHeight + + set appWidth $width + set appHeight $height + + catch { + if {$doHcut} { + send hcutPlot clearScreen + hcutInit + send hcutAxes1 redraw ; send hcutAxes2 redraw + cutPlots $cutXPos $cutYPos + } + if {$doVcut} { + send vcutPlot clearScreen + vcutInit + send vcutAxes1 redraw ; send vcutAxes2 redraw + cutPlots $cutXPos $cutYPos + } + } +} ; #send imagewin addCallback appResize resize + + + +# Additional global variables, taking default values from resources. +getResources { + { zoomfactors } + { displayCoords } + { displayPanner } + { displayMagnifier } + { blinkRate } + { pannerArea } + { pannerGeom } + { magnifierArea } + { magnifierGeom } + { wcsboxGeom } + { maxContrast } + { showToolBar } + { showPanelBar } + { warnings } + { centerBoxSize } + { peakCentroid } + { highlight } +} + +set warnings [true $warnings] +set defaultBlinkRate $blinkRate + +# Client state variables (UI parameter objects). Certain of these parameters +# we mirror in Tcl variables here, updating the values with a callback when +# the parameter value changes. Others require special callbacks. + +set frame 1 ;# current display frame +set nframes 0 ;# number of frame buffers +set frames {1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16} ;# list of image frames +set frameWidth 0 ;# frame buffer width, pixels +set frameHeight 0 ;# frame buffer height, pixels +set frameDepth 8 ;# frame buffer pixel size, bits +set cursorMode 0 ;# true when cursor read pending + +foreach i $frames { + set frameZoomX($i) 0 ;# X zoom factor + set frameZoomY($i) 0 ;# Y zoom factor + set frameCenterX($i) 0 ;# X center of field + set frameCenterY($i) 0 ;# Y center of field + set frameScaleX($i) 0 ;# X scale factor + set frameScaleY($i) 0 ;# Y scale factor + set frameOffsetX($i) 0 ;# X register offset + set frameOffsetY($i) 0 ;# Y register offset + set enhancement($i) none ;# colortable enhancement +} + + +#trace variable frameOffsetX w debug_pvar ;# Debug stuff +#trace variable frameOffsetY w debug_pvar +#trace variable frameZoomX w debug_pvar +#trace variable frameZoomY w debug_pvar +#trace variable frameScaleX w debug_pvar +#trace variable frameScaleY w debug_pvar + +proc debug_pvar { name element op } \ +{ + if {$element != ""} { + set name ${name}($element) + } + upvar $name x + puts "Variable $name set to $x" +} + + diff --git a/vendor/x11iraf/ximtool/gui/hdr.obj b/vendor/x11iraf/ximtool/gui/hdr.obj new file mode 100644 index 00000000..5940a85a --- /dev/null +++ b/vendor/x11iraf/ximtool/gui/hdr.obj @@ -0,0 +1,36 @@ + +set Objects(hdr_panel) { \ + toplevel TopLevelShell hdr_panel\ + hdr_panel Layout hdrLayout\ +\ + hdrLayout Frame hdrMenuFrame\ + hdrMenuFrame Layout hdrMenuBar\ + hdrMenuBar Command hdrClose\ +\ + hdrLayout Group hdrObjGroup\ + hdrObjGroup Layout hdrObjLayout\ + hdrObjLayout Label hdrObjLabel\ + hdrObjLayout MenuButton hdrObjMenu\ +\ + hdrLayout Frame hdrTabFrame\ + hdrTabFrame Tabs hdrTabs\ + hdrTabs Group hdrHdrGroup\ + hdrTabs Group hdrWcsGroup\ +\ + hdrHdrGroup Layout hdrHdrLayout\ + hdrHdrLayout Frame hFindFrame\ + hFindFrame AsciiText hFindEntry\ + hdrHdrLayout Command hdrFilter\ + hdrHdrLayout Command hdrFind\ + hdrHdrLayout Command hdrClear\ + hdrHdrLayout HTML hdrText\ +\ + hdrWcsGroup Layout hdrWcsLayout\ + hdrWcsLayout Group hdrInfoGroup\ + hdrInfoGroup Frame hdrIGFrame\ + hdrIGFrame AsciiText hdrIGText\ + hdrWcsLayout Group hdrKeywGroup\ + hdrKeywGroup Frame hdrKGFrame\ + hdrKGFrame AsciiText hdrKGText\ +} + diff --git a/vendor/x11iraf/ximtool/gui/hdr.res b/vendor/x11iraf/ximtool/gui/hdr.res new file mode 100644 index 00000000..44e7c79a --- /dev/null +++ b/vendor/x11iraf/ximtool/gui/hdr.res @@ -0,0 +1,138 @@ + +set Resources(hdr_panel) { \ + + *hdr_panel.geometry: 550x600 + *hdr_panel.title: Image Header + + *hdr_panel*SimpleMenu.borderColor: black + *hdr_panel*SimpleMenu.borderWidth: 1 + *hdr_panel*SimpleMenu.foreground: White + *hdr_panel*SimpleMenu.background: SteelBlue + + *hdrMenuFrame.frameType: raised + *hdrMenuFrame.frameWidth: 2 + *hdrLayout.layout: vertical { \ + hdrMenuFrame < +inf -inf * > \ + hdrObjGroup < +inf -inf * > \ + hdrTabFrame < +inf -inf * +inf -inf> \ + } + + *hdrMenuBar*borderWidth: 0 + *hdrMenuBar*Command.internalHeight: 5 + *hdrMenuBar*Command.internalWidth: 12 + *hdrMenuBar.layout: vertical { \ + 5 < -5 > \ + horizontal { 10 < +inf -10> hdrClose 7 } \ + 5 < -5 > \ + } + *hdrClose.label: Dismiss + + *hdrObjGroup.label: + *hdrObjGroup.outerOffset: 7 + *hdrObjGroup.innerOffset: 4 + *hdrObjLayout.borderWidth: 0 + *hdrObjLayout.layout: vertical { \ + horizontal { hdrObjLabel 2 hdrObjMenu < +inf -inf * > 2 } \ + } + *hdrObjLabel.label: Image Name: + *hdrObjMenu.label: + *hdrObjMenu.justify: left + *hdrObjMenu.font: 7x13 + *hdrObjMenu.menuName: objMenu + *hdrObjMenu.internalWidth: 5 + *hdrObjMenu.internalHeight: 1 + *hdrObjMenu.shadowWidth: 1 + + *hdrHdrGroup.tabLabel: Image Header + *hdrHdrGroup.label: + *hdrHdrGroup.outerOffset: 7 + *hdrHdrGroup.innerOffset: 5 + *hdrHdrLayout.borderWidth: 0 + *hdrHdrLayout.layout: vertical { \ + horizontal { \ + hdrFilter 2 hFindFrame < +inf -inf * > 2 hdrFind 1 hdrClear \ + } \ + 5 \ + hdrText < +inf -inf * +inf -inf > \ + } + *hFindEntry*editType: edit + *hFindEntry*font: 7x13 + *hFindEntry*displayCaret: True + *hFindEntry*width: 150 + *hFindFrame.frameWidth: 1 + *hFindFrame*borderWidth: 0 + *hFindFrame.frameType: sunken + *hFindFrame.width: 150 + *hFindFrame.height: 23 + *hdrFilter.label: Keyword Filter + *hdrFind.label: Search + *hdrClear.label: Clear + + ! Resources if the header text widget is AsciiText +! *hdrText*scrollVertical: Always +! *hdrText*scrollHorizontal: Always +! *hdrText*editType: edit +! *hdrText*font: 7x13 +! *hdrText*background: #c4c4c4 +! *hdrText*displayCaret: False +! *hdrText*bottomMargin: 10 +! *hdrText*Scrollbar.width: 15 +! *hdrText*Scrollbar.height: 15 + + ! Resources if the header text widget is HTML + *hdrText.width: 600 + *hdrText.height: 500 + *hdrText.anchorUnderlines: 1 + *hdrText.visitedAnchorUnderlines: 1 + *hdrText.verticalScrollOnRight: True + *hdrText.plainFont: 7x13 + *hdrText.marginWidth: 5 + *hdrText.marginHeight: 5 + + + *hdrWcsGroup.tabLabel: Image WCS Info + *hdrWcsGroup.label: + *hdrWcsGroup.outerOffset: 5 + *hdrWcsGroup.innerOffset: 5 + *hdrWcsGroup*Text*scrollVertical: whenNeeded + *hdrWcsGroup*Text*scrollHorizontal: whenNeeded + *hdrWcsGroup*Text*editType: edit + *hdrWcsGroup*Text*displayCaret: False + *hdrWcsGroup*Text*borderWidth: 0 + *hdrWcsGroup*Text*editType: edit + *hdrWcsGroup*Text*font: 7x13 + *hdrWcsGroup*Text*Scrollbar.width: 15 + *hdrWcsGroup*Text*Scrollbar.height: 15 + *hdrWcsLayout.borderWidth: 0 + *hdrWcsLayout.layout: vertical { \ + 2 < -2 > \ + hdrInfoGroup < +inf -inf * > \ + 2 < -2 > \ + hdrKeywGroup < +inf -inf * +inf -inf > \ + -4 \ + } + *hdrInfoGroup.label: Basic WCS Information + *hdrInfoGroup.outerOffset: 7 + *hdrInfoGroup.innerOffset: 0 + *hdrIGFrame.frameType: sunken + *hdrIGFrame.frameWidth: 1 + *hdrIGText.height: 130 +! *hdrIGText*background: black +! *hdrIGText*foreground: yellow2 + *hdrIGText*background: #adadad + *hdrIGText*foreground: black + *hdrWcsGroup*hdrIGText*scrollVertical: never + *hdrWcsGroup*hdrIGText*scrollHorizontal: never + *hdrWcsGroup*hdrIGText*font: 7x13 + *hdrKeywGroup.label: WCS Header Keywords + *hdrKeywGroup.outerOffset: 7 + *hdrKeywGroup.innerOffset: 5 + *hdrKGFrame.frameType: sunken + *hdrKGFrame.frameWidth: 1 + *hdrKGText*background: #c4c4c4 + *hdrKGText*bottomMargin: 10 + + *hdrIGText*background: #c4c4c4 + *hdrIGFrame.frameWidth: 0 +} + diff --git a/vendor/x11iraf/ximtool/gui/hdr.tcl b/vendor/x11iraf/ximtool/gui/hdr.tcl new file mode 100644 index 00000000..4dc7489a --- /dev/null +++ b/vendor/x11iraf/ximtool/gui/hdr.tcl @@ -0,0 +1,105 @@ + +################################################################################ +# Header Display Callbacks. +################################################################################ + +set hdrImage "" +set hdrImageId "" +set hdrKeywords "*" + + +proc fitsHdrClose args \ +{ + global hdr_up + + send hdr_panel unmap + send imageHeader set on False + set hdr_up 0 +} ; send hdrClose addCallback fitsHdrClose + +proc ptFitsHeader {widget type state args} \ +{ + global hdr_up + + set hdr_up $state + if {$hdr_up == 1} { + send imageHeader set on True + send hdr_panel map + } else { + send imageHeader set on False + send hdr_panel unmap + } +}; send imageHeader addCallback ptFitsHeader + +proc getHeader { name id } \ +{ + global hdrImage hdrImageId hdrKeywords + + set hdrImage $name + set hdrImageId $id + send hdrObjMenu set label $name + send hdrText setText "" + send hdrIGText set string "" + send hdrKGText set string "" + + catch { send wcspix objinfo $hdrImageId $hdrKeywords } +} + +proc hdrKeywFilter args \ +{ + global hdrImageId hdrKeywords + + set str [ send hFindEntry get string ] + if {$str != ""} { + set hdrKeywords $str + send hdrText setText "" + catch { send wcspix objinfo $hdrImageId $hdrKeywords } + } +} ; send hdrFilter addCallback hdrKeywFilter + + +# Set the image menu in the header panel. +proc setHdrObjMenu { frame args } \ +{ + global frameCache ism_enable + + if {! $ism_enable} \ + return + + # Create the menu of images for the header panel. + set items { } + foreach i [list $frameCache($frame)] { + set l [lindex $i 0] + set lid [lindex $i 1] + regsub -all {[\[]} $l "\\\[" l2 + catch { + lappend items [format "%s f.exec \{getHeader %s %d\}" $l $l2 $lid] + } + } + editMenu objMenu hdrObjMenu $items +} + + +# Search box for the header. +proc hdrFind args \ +{ + set phrase [send hFindEntry get string] + + if { $phrase != "" } { + if {[send hdrText searchText $phrase start end forward caseless] > 0} { + set elid [lindex [lindex $start 0] 0] + set id [max 1 [expr $elid - 10] ] + send hdrText gotoId $id + send hdrText setSelection $start $end + } else { + send warnText set label "Search string not found." + send warning map + } + } else { + send warnText set label "Warning: No search phrase entered." + send warning map + } +} ; foreach w { hFindEntry hdrFind } { send $w addCallback hdrFind } + +send hdrClear addCallback { send hFindEntry set string "" } + diff --git a/vendor/x11iraf/ximtool/gui/help.obj b/vendor/x11iraf/ximtool/gui/help.obj new file mode 100644 index 00000000..36759f63 --- /dev/null +++ b/vendor/x11iraf/ximtool/gui/help.obj @@ -0,0 +1,27 @@ + +set Objects(help_panel) { \ + toplevel TopLevelShell help_panel\ + help_panel Layout helpLayout\ + helpLayout Group helpMenuGroup\ + helpMenuGroup Layout helpMenubar\ + helpLayout Layout helpInfoLayout\ +\ + helpMenubar Command helpClose\ +\ + helpLayout Command helpBack\ + helpLayout Command helpForward\ + helpLayout Command helpHome\ + helpLayout Frame hfFrame\ + hfFrame AsciiText hfEntry\ + helpLayout Command hfFind\ + helpLayout Command hfClear\ + helpLayout Frame helpTextFrame\ + helpTextFrame HTML helpText\ +\ + helpInfoLayout Label helpIRAFLogo\ + helpInfoLayout Label helpInfo1\ + helpInfoLayout Label helpInfo2\ + helpInfoLayout Label helpInfo3\ + helpInfoLayout Label helpNOAOLogo\ +} + diff --git a/vendor/x11iraf/ximtool/gui/help.res b/vendor/x11iraf/ximtool/gui/help.res new file mode 100644 index 00000000..affdeb2a --- /dev/null +++ b/vendor/x11iraf/ximtool/gui/help.res @@ -0,0 +1,111 @@ + +set Resources(help_panel) { \ + + !---------------------- + ! Help panel resources. + !---------------------- + *help_panel.title: XImtool Help Summary + *help_panel.width: 500 + *help_panel.height: 550 + *helpLayout*borderWidth: 0 + *helpLayout*Command.internalHeight: 4 + *helpLayout*Command.internalWidth: 12 + *helpLayout*HTML*shadowWidth: 1 + *helpLayout*helpText*Scrollbar.shadowWidth: 1 + + *helpMenuGroup.label: + *helpMenuGroup.height: 45 + *helpMenuGroup.outerOffset: 0 + *helpMenuGroup.innerOffset: 0 + *helpMenuGroup.frameType: raised + *helpMenubar.layout: vertical { \ + 5 < -5 > \ + horizontal { 20 < +inf -20 > helpClose 7 } \ + 5 < -5 > \ + } + *helpBack.label: Back + *helpBack.sensitive: False + *helpForward.label: Forward + *helpForward.sensitive: False + *helpHome.label: Home + *helpClose.label: Dismiss + + + *hfEntry*editType: edit + *hfEntry*font: 7x13 + *hfEntry*displayCaret: True + *hfFrame.frameWidth: 1 + *hfFrame.frameType: sunken + *hfFrame.width: 250 + *hfFind.label: Search + *hfFind.shadowWidth: 1 + *hfClear.label: Clear + *hfClear.shadowWidth: 1 + + *helpLayout.layout: vertical { \ + -1 \ + horizontal { helpMenuGroup < +inf -inf * > } \ + 5 \ + horizontal { \ + 5 \ + helpBack 2 helpForward 2 helpHome \ + 20 < +inf -20 > \ + hfFrame < +inf -inf * > 3 hfFind 1 hfClear \ + 5 \ + } \ + 5 \ + horizontal { helpTextFrame < +inf -inf * +inf -inf > } \ + horizontal { helpInfoLayout < +inf -inf * > } \ + -1 \ + } + *helpTextFrame.frameWidth: 1 + *helpTextFrame.frameType: sunken + *helpText.width: 600 + *helpText.height: 500 + *helpText.anchorUnderlines: 1 + *helpText.visitedAnchorUnderlines: 1 + *helpText.verticalScrollOnRight: true + *helpText*Scrollbar.shadowWidth: 1 + *helpText.plainFont: -adobe-courier-medium-r-normal-*-12-*-*-*-*-*-*-* + *helpText.plainboldFont: -adobe-courier-bold-r-normal-*-12-*-*-*-*-*-*-* + *helpText.plainitalicFont: -adobe-courier-medium-o-normal-*-12-*-*-*-*-*-*-* +! *helpText.boldFont: 6x12bold + + + ! Contact info at the bottom of the panel. + *helpInfoLayout*Label.justify: center + *helpInfoLayout*Label.internalHeight: 0 + *helpInfoLayout.layout: horizontal { \ + 5 \ + vertical { 5 helpIRAFLogo 5 } \ + 1 < +inf > \ + vertical { \ + 5 \ + helpInfo1 < +inf -inf * +inf -inf > \ + helpInfo2 < +inf -inf * +inf -inf > \ + helpInfo3 < +inf -inf * +inf -inf > \ + 5 \ + } \ + 1 < +inf > \ + vertical { 5 helpNOAOLogo 5 } \ + 5 \ + } + *helpInfo1.label: XIMTOOL_VERSION + *helpInfo2.label: For help or questions: http://iraf.net + *helpInfo3.label: \ + NOAO is operated by AURA under cooperative agreement with the NSF + + *helpInfoLayout*helpInfo1.font: -*-helvetica-medium-r-normal-*-12-*-*-* + *helpInfoLayout*helpInfo2.font: -*-helvetica-medium-r-normal-*-12-*-*-* + *helpInfoLayout*helpInfo3.font: -*-helvetica-medium-r-normal-*-10-*-*-* + + *helpInfoLayout.helpIRAFLogo.internalWidth: 0 + *helpInfoLayout.helpIRAFLogo.internalHeight: 0 + *helpInfoLayout.helpIRAFLogo.foreground: SteelBlue + *helpInfoLayout.helpIRAFLogo.background: white + *helpInfoLayout.helpNOAOLogo.internalWidth: 0 + *helpInfoLayout.helpNOAOLogo.internalHeight: 0 + *helpInfoLayout.helpNOAOLogo.foreground: SteelBlue + *helpInfoLayout.helpNOAOLogo.background: white +} + diff --git a/vendor/x11iraf/ximtool/gui/help.tcl b/vendor/x11iraf/ximtool/gui/help.tcl new file mode 100644 index 00000000..cc55e978 --- /dev/null +++ b/vendor/x11iraf/ximtool/gui/help.tcl @@ -0,0 +1,209 @@ + +############################################### +# Define procedure for the help panel +############################################### + +# Help Panel Bitmaps +#------------------- +createBitmap iraf_logo 45 45 { +0xff, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f, 0xff, 0xff, 0xff, 0xff, +0xff, 0x3f, 0xfc, 0xff, 0xff, 0xff, 0xff, 0x3f, 0xfc, 0xff, 0xff, 0xff, +0xff, 0x3f, 0xf8, 0xff, 0xff, 0xff, 0xff, 0x3f, 0xf0, 0xff, 0xff, 0xff, +0xff, 0x3f, 0xf0, 0xff, 0xff, 0xff, 0xff, 0x3f, 0xe0, 0xff, 0xff, 0xff, +0xff, 0x3f, 0xc0, 0xff, 0xff, 0xff, 0xff, 0x3f, 0xc0, 0xff, 0xff, 0xff, +0xff, 0x3f, 0x80, 0xff, 0xff, 0xff, 0xff, 0x3f, 0x80, 0xfc, 0xff, 0xff, +0xff, 0x3f, 0x84, 0xf8, 0xff, 0xff, 0xff, 0x1f, 0x84, 0xf4, 0xff, 0xff, +0xff, 0x1b, 0x04, 0x09, 0x00, 0xfc, 0xff, 0x11, 0x04, 0x11, 0xf8, 0xff, +0x7f, 0x10, 0x04, 0x21, 0xc0, 0xff, 0x1f, 0x10, 0x04, 0x41, 0xf0, 0xff, +0x00, 0x18, 0x04, 0x01, 0xe0, 0xff, 0x00, 0x18, 0x00, 0x81, 0xc0, 0xff, +0x00, 0x08, 0x00, 0x01, 0xe0, 0xff, 0x07, 0x08, 0x00, 0x01, 0xf1, 0xff, +0x1f, 0x08, 0x80, 0x21, 0xf0, 0xff, 0xff, 0x08, 0xc0, 0x41, 0xf4, 0xff, +0xff, 0x08, 0xc0, 0x41, 0xf8, 0xff, 0xff, 0x09, 0xc0, 0xc1, 0xf0, 0xff, +0xff, 0x0b, 0x80, 0xc1, 0xf1, 0xff, 0xff, 0x07, 0x80, 0x81, 0xe1, 0xff, +0xff, 0x07, 0x80, 0x01, 0xc1, 0xff, 0xff, 0x07, 0x00, 0x01, 0xc0, 0xff, +0xff, 0x07, 0xc2, 0x05, 0x81, 0xff, 0xff, 0x07, 0xf2, 0x07, 0x81, 0xff, +0xff, 0x07, 0xf2, 0x17, 0x03, 0xff, 0xff, 0x03, 0xfa, 0x7f, 0x02, 0xfe, +0xff, 0x03, 0xfe, 0xff, 0x02, 0xfe, 0xff, 0x03, 0xfe, 0xff, 0x03, 0xfc, +0xff, 0x03, 0xff, 0xff, 0x07, 0xfc, 0xff, 0x83, 0xff, 0xff, 0x0f, 0xf8, +0xff, 0xc1, 0xff, 0xff, 0x3f, 0xf0, 0xff, 0xe1, 0xff, 0xff, 0x7f, 0xf8, +0xff, 0xf1, 0xff, 0xff, 0xff, 0xf0, 0xff, 0xf8, 0xff, 0xff, 0xff, 0xe0, +0xff, 0xf8, 0xff, 0xff, 0xff, 0xe3, 0xff, 0xfc, 0xff, 0xff, 0xff, 0xe7, +0xff, 0xfc, 0xff, 0xff, 0xff, 0xef}; send helpIRAFLogo "set bitmap iraf_logo" + +createBitmap noao_logo 45 45 { +0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, +0xff, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0x03, 0xfe, 0xff, 0xff, +0xff, 0xff, 0x01, 0xfc, 0xff, 0xff, 0xff, 0xff, 0x00, 0xf8, 0xff, 0xff, +0xff, 0xff, 0x00, 0xf8, 0xff, 0xff, 0xff, 0xff, 0x00, 0xf8, 0xff, 0xff, +0xff, 0x7f, 0x00, 0xf0, 0xff, 0xff, 0xff, 0xff, 0x00, 0xf8, 0xff, 0xff, +0xff, 0xff, 0x00, 0xf8, 0xff, 0xff, 0xff, 0xff, 0x00, 0xf8, 0xff, 0xff, +0xff, 0xff, 0x01, 0xfc, 0xff, 0xff, 0xff, 0xff, 0x03, 0xfe, 0xff, 0xff, +0xff, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, +0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xff, 0xff, 0xff, +0xff, 0xff, 0x8f, 0xff, 0xff, 0xff, 0xff, 0xff, 0x8f, 0xff, 0xff, 0xff, +0xff, 0xff, 0x07, 0xff, 0xff, 0xff, 0xff, 0xff, 0x07, 0xff, 0xff, 0xff, +0xff, 0xff, 0x03, 0xfe, 0xff, 0xff, 0xff, 0xff, 0x03, 0xfe, 0xff, 0xff, +0xff, 0xff, 0x01, 0xfc, 0xff, 0xff, 0xff, 0xff, 0x01, 0xfc, 0xff, 0xff, +0xff, 0xff, 0x00, 0xf8, 0xff, 0xff, 0xff, 0x7f, 0x00, 0xf0, 0xff, 0xff, +0xff, 0x7f, 0x00, 0xf0, 0xff, 0xff, 0xff, 0x3f, 0x00, 0xe0, 0xff, 0xff, +0xff, 0x3f, 0x00, 0xe0, 0xff, 0xff, 0xff, 0x1f, 0x00, 0xc0, 0xff, 0xff, +0xff, 0x1f, 0x00, 0xc0, 0xff, 0xff, 0xff, 0x0f, 0x00, 0x80, 0xff, 0xff, +0xff, 0x0f, 0x00, 0x80, 0xff, 0xff, 0xff, 0x07, 0x00, 0x00, 0xff, 0xff, +0xff, 0x03, 0x00, 0x00, 0xfe, 0xff, 0xff, 0x03, 0x00, 0x00, 0xfe, 0xff, +0xff, 0x01, 0x00, 0x00, 0xfc, 0xff, 0xff, 0x01, 0x00, 0x00, 0xfc, 0xff, +0xff, 0x00, 0x00, 0x00, 0xf8, 0xff, 0xff, 0x00, 0x00, 0x00, 0xf8, 0xff, +0x7f, 0x00, 0x00, 0x00, 0xf0, 0xff, 0x7f, 0x00, 0x00, 0x00, 0xf0, 0xff, +0x3f, 0x00, 0x00, 0x00, 0xe0, 0xff}; send helpNOAOLogo "set bitmap noao_logo" + +send helpInfo1 set label $version + +# Stuff for keeping track of visited anchors. +set links { 0 } +set linkIndex 0 +set visited(0) empty + +proc Help args \ +{ + global help_up + if {$help_up == 0} { + send client help + } else { + send help_panel unmap + set help_up 0 + } +} + +proc helpPanel args \ +{ + global help_up + if {$help_up} { + send help_panel unmap + set help_up 0 + } else { + send help_panel map + set help_up 1 + } +} + +proc panelHelp args \ +{ + Help +} ; send panelHelp addCallback panelHelp + +proc helpQuit args \ +{ + global help_up + send help_panel unmap + set help_up 0 +}; send helpClose addCallback helpQuit + +proc getHelpText { param old new } \ +{ + send helpText setText $new + helpPanel +}; send help addCallback getHelpText + +proc anchorSelected {widget cbtype event text href args} \ +{ + global visited links linkIndex + set anchID [send helpText anchorToId $href] + set visited($href) 1 + if {$linkIndex == 0} { + send helpBack setSensitive True + if {[lindex $links 1] != $anchID} { + set links { 0 } + send helpForward setSensitive False + } + } + if {$linkIndex > 0 && [lindex $links [expr $linkIndex + 1]] != $anchID} { + set links [lrange $links 0 $linkIndex] + } + if {[lindex $links [expr $linkIndex + 1]] != $anchID} { + lappend links $anchID + incr linkIndex + } else { + send helpForward setSensitive False + incr linkIndex + } + if {$linkIndex == [expr [llength $links] - 1]} { + send helpForward setSensitive False + } + send helpText gotoId $anchID + send helpText retestAnchors +}; send helpText addCallback anchorSelected anchor + +proc testAnchor {widget cbtype href} \ +{ + global visited + return [info exists visited($href)] +}; send helpText addCallback testAnchor testAnchor + + +# Callbacks to position forwards and backwards in link list. +proc hlpForward args \ +{ + global links linkIndex + incr linkIndex + if {$linkIndex <= [llength $links]} { + set anchID [lindex $links $linkIndex] + send helpText gotoId $anchID + send helpText retestAnchors + if {$linkIndex == [expr [llength $links] - 1]} { + send helpForward setSensitive False + send helpBack setSensitive True + } else { + send helpBack setSensitive True + } + } else { + incr linkIndex -1 + } +}; send helpForward addCallback hlpForward + +proc hlpBack args \ +{ + global links linkIndex + incr linkIndex -1 + if {$linkIndex >= 0} { + set anchID [lindex $links $linkIndex] + send helpText gotoId $anchID + send helpText retestAnchors + if {$linkIndex == 0} { send helpBack setSensitive False } + if {$linkIndex >= 0} { send helpForward setSensitive True } + } else { + incr linkIndex 1 + } +}; send helpBack addCallback hlpBack + +proc hlpHome args \ +{ + global links linkIndex + set links { 0 } + set linkIndex 0 + send helpText gotoId 0 + send helpForward setSensitive False + send helpBack setSensitive False +}; send helpHome addCallback hlpHome + + +proc helpFind args \ +{ + set phrase [send hfEntry get string] + + if { $phrase != "" } { + if {[send helpText searchText $phrase start end forward caseless] > 0} { + set elid [lindex [lindex $start 0] 0] + set id [max 1 [expr $elid - 10] ] + send helpText gotoId $id + send helpText setSelection $start $end + } else { + send warnText set label "Search string not found." + send warning map + } + } else { + send warnText set label "Warning: No search phrase entered." + send warning map + } +} ; foreach w { hfEntry hfFind } { send $w addCallback helpFind } + +send hfClear addCallback { send hfEntry set string "" } + diff --git a/vendor/x11iraf/ximtool/gui/imagewin.tcl b/vendor/x11iraf/ximtool/gui/imagewin.tcl new file mode 100644 index 00000000..af1208d1 --- /dev/null +++ b/vendor/x11iraf/ximtool/gui/imagewin.tcl @@ -0,0 +1,1155 @@ + +# Cursor positioning routines +#---------------------------- + +proc move_cursor { xstep ystep args } \ +{ + set raster 0 + send imagewin getCursorPos rx ry + send imagewin setCursorPos [expr $rx + $xstep] [expr $ry + $ystep] $raster +} + + +# Called when the number of frames changes. +proc setNFrames {param old new} \ +{ + global frameMenuDescription nframes frames + + set nframes $new + if {$old != $new} { + foreach i {prevButton nextButton} { + send $i set sensitive [expr "$nframes > 1"] + } + + if {$nframes > 0} { + + # Creates the Frames menu on the main image window. + set items { } + for {set i 1} {$i <= $nframes} {incr i} { + set l [format "%2d" $i] + lappend items "$l f.exec \{send client setFrame $i\} sensitive \{[expr \"$nframes >= $i\"]\}" + } + editMenu frameMenu frameButton $items + + # Create the menu for the blink frames list. + set items { } + for {set i 0} {$i <= $nframes} {incr i} { + set j [expr ($i + 1)] + if {$i == 0} { + set s "\"none\" f.exec \{send brFrameBTN set label \" \"\}" + lappend items $s + } else { + set l [format "%2d" $i] + lappend items "$l f.exec \{send brFrameBTN set label $l\} sensitive \{[expr \"$nframes >= $i\"]\}" + } + } + for {set i 1} {$i <= $nframes} {incr i} { + send brFrame$i setSensitive True + send tFrame$i setSensitive True + regsub -all BTN $items $i nmenu + editMenu frame${i}Menu brFrame$i $nmenu + } + + } else { + editMenu frameMenu frameButton $frameMenuDescription + + for {set i 1} {$i <= $nframes} {incr i} { + send brFrame$i setSensitive True + send tFrame$i setSensitive True + editMenu frame${i}Menu brFrame$i $frameMenuDescription + } + } + } + + for {set i 1} {$i <= 16} {incr i} { + if {$i <= $nframes} { + send frame$i map + } else { + send frame$i unmap + } + } + + if {$nframes > 2} { + setAllTileFrames + } +}; send nframes addCallback setNFrames + + +# Set the default main window frame menu. +set frameMenuDescription { + {" 1" f.exec "send client setFrame 1" sensitive {[expr "$nframes >= 1"]} } + {" 2" f.exec "send client setFrame 2" sensitive {[expr "$nframes >= 2"]} } + {" 3" f.exec "send client setFrame 3" sensitive {[expr "$nframes >= 3"]} } + {" 4" f.exec "send client setFrame 4" sensitive {[expr "$nframes >= 4"]} } +}; createMenu frameMenu frameButton $frameMenuDescription + + + + +# Initialize the frame lists panels (blink panel and tile tab). +for {set i 1} {$i <= 16} {incr i} { + send brFrame$i set label [format "%2d" $i] + send tFrame$i set label [format "%2d" $i] + if {$i <= 4} { + send brFrame$i setSensitive True + send tFrame$i "setSensitive True ; set state 1" + } else { + send brFrame$i setSensitive False + send tFrame$i "setSensitive False ; set state 0" + } + createMenu frame${i}Menu brFrame$i $frameMenuDescription +} + + +# Called when the frame being displayed changes. +proc frameChanged {param old new} \ +{ + global frame + + set frame $new + send frameButton set label [format "%2d" $frame] + + # The first time we request frame 5 or higher reset + # the extra frame buttons on the control panel to make + # them visible. + if {$new >= 5} { + send frlistBox set width 49 + } + wcsFmtFBConfig + drawCompass +}; send frame addCallback frameChanged + + +# Called when the frame buffer configuration changes. +proc setFrameSize {param old new} \ +{ + global frameWidth frameHeight frameDepth + set frameWidth [lindex $new 0] + set frameHeight [lindex $new 1] + set frameDepth [lindex $new 2] + + wcsFmtFBConfig +}; send frameSize addCallback setFrameSize + +# Called when the current frame is zoomed or panned. +proc setFrameView {param old new} \ +{ + global frameZoomX frameZoomY frameCenterX frameCenterY + global frameScaleX frameScaleY frameOffsetX frameOffsetY + global frame auto_reg blinkFrames + + # Update the position. + set frameZoomX($frame) [lindex $new 0] + set frameZoomY($frame) [lindex $new 1] + set frameCenterX($frame) [lindex $new 2] + set frameCenterY($frame) [lindex $new 3] + set frameScaleX($frame) [lindex $new 4] + set frameScaleY($frame) [lindex $new 5] + set frameOffsetX($frame) [lindex $new 6] + set frameOffsetY($frame) [lindex $new 7] + + # If auto-registering is enabled, do it now, but only when we're updating + # the current display frame, and only if that frame is in the framelist. + + if {$auto_reg == 1 && $frame == [send frameButton get label]} { + if {[string first $frame $blinkFrames] != -1} { + send client offsetRegister \{$blinkFrames\} + } + + foreach f $blinkFrames { + if {$f != $frame} { + set frameZoomX($f) $frameZoomX($frame) + set frameZoomY($f) $frameZoomY($frame) + set frameCenterX($f) $frameCenterX($frame) + set frameCenterY($f) $frameCenterY($frame) + set frameScaleX($f) $frameScaleX($frame) + set frameScaleY($f) $frameScaleY($frame) + } + } + } + deleteAllRulers + +}; send frameView addCallback setFrameView + + +# Called when the color enhancement for a frame changes. +proc setEnhancement {param old new} \ +{ + global enhancement + set enhancement([lindex $new 0]) [lrange $new 1 end] +}; send enhancement addCallback setEnhancement + +# Called when the frame title changes (e.g. frame change or new frame loaded). +proc setTitle {param old new} \ +{ + set lab [string trimright $new] + send imageTitle set label $lab + + set image [lindex [ split $lab '-'] 0 ] + wcsFmtImname $image + + set title [lindex [ split $lab '-'] 1 ] + wcsFmtImtitle $title + deleteAllRulers +}; send frameTitle addCallback setTitle + +# Called when the image is flipped in an axis. +proc setFlip {param old new} \ +{ + if {$param == "xflip"} { + send xflipButton set state [true $new] + } else { + send yflipButton set state [true $new] + } + deleteAllRulers +}; foreach i {xflip yflip} { send $i addCallback setFlip } + + +# Various general callbacks. + +proc Quit args \ +{ + global ism_enable + + if {$ism_enable} { + catch { send wcspix quit } + } + send client Quit +} +proc nextFrame args { send client nextFrame } +proc prevFrame args { send client prevFrame } +proc setColormap { mapno } { send client setColormap $mapno } +proc xflip args { send client flip x ; flipRegister } +proc yflip args { send client flip y ; flipRegister } +proc xyflip args { send client flip x y ; flipRegister } +proc flipRegister args \ +{ + global auto_reg frame blinkFrames + + if {$auto_reg == 1 && $frame == [send frameButton get label]} { + if {[string first $frame $blinkFrames] != -1} { + send client offsetRegister \{$blinkFrames\} + } + } +} + + + +# Initialize bitmaps. +createBitmap xflip 16 16 { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x08, 0x18, 0x18, + 0x1c, 0x38, 0xfe, 0x7f, 0xfe, 0x7f, 0x1c, 0x38, 0x18, 0x18, 0x10, 0x08, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00} + +createBitmap yflip 16 16 { + 0x00, 0x00, 0x80, 0x01, 0xc0, 0x03, 0xe0, 0x07, 0xf0, 0x0f, 0x80, 0x01, + 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0xf0, 0x0f, + 0xe0, 0x07, 0xc0, 0x03, 0x80, 0x01, 0x00, 0x00} + +createBitmap qmark 16 16 { + 0x00, 0x00, 0x00, 0x00, 0xf0, 0x07, 0xf8, 0x0f, 0x18, 0x0c, 0x18, 0x0c, + 0x18, 0x0e, 0x00, 0x07, 0x80, 0x03, 0x80, 0x01, 0x80, 0x01, 0x00, 0x00, + 0x80, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x00} + +createBitmap larrow 16 16 { + 0x00, 0x00, 0x00, 0x03, 0x80, 0x03, 0xc0, 0x03, 0xe0, 0x1e, 0x70, 0x1e, + 0x38, 0x18, 0x1c, 0x18, 0x1c, 0x18, 0x38, 0x18, 0x70, 0x1e, 0xe0, 0x1e, + 0xc0, 0x03, 0x80, 0x03, 0x00, 0x03, 0x00, 0x00} + +createBitmap rarrow 16 16 { + 0x00, 0x00, 0xc0, 0x00, 0xc0, 0x01, 0xc0, 0x03, 0x78, 0x07, 0x78, 0x0e, + 0x18, 0x1c, 0x18, 0x38, 0x18, 0x38, 0x18, 0x1c, 0x78, 0x0e, 0x78, 0x07, + 0xc0, 0x03, 0xc0, 0x01, 0xc0, 0x00, 0x00, 0x00} + +createBitmap panel 16 16 { + 0x00, 0x00, 0xf8, 0x1f, 0xf8, 0x1f, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, + 0x98, 0x19, 0x98, 0x19, 0x98, 0x19, 0x98, 0x19, 0x98, 0x19, 0x18, 0x18, + 0x18, 0x18, 0x18, 0x18, 0xf8, 0x1f, 0xf8, 0x1f} + +createBitmap brightness 15 15 { + 0x00, 0x00, 0x80, 0x00, 0x84, 0x10, 0xe8, 0x0b, 0x10, 0x04, 0x08, 0x08, + 0x08, 0x08, 0x0e, 0x38, 0x08, 0x08, 0x08, 0x08, 0x10, 0x04, 0xe8, 0x0b, + 0x84, 0x10, 0x80, 0x00, 0x00, 0x00} + +createBitmap contrast 15 15 { + 0x00, 0x00, 0x00, 0x00, 0xc0, 0x01, 0x30, 0x07, 0x08, 0x0f, 0x08, 0x0f, + 0x04, 0x1f, 0x04, 0x1f, 0x04, 0x1f, 0x08, 0x0f, 0x08, 0x0f, 0x30, 0x07, + 0xc0, 0x01, 0x00, 0x00, 0x00, 0x00} + +createBitmap bar 10 10 { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0x00, 0x42, 0x00, 0x7e, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00} + +createBitmap dot 16 16 { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x01, + 0xe0, 0x03, 0xf0, 0x07, 0xf0, 0x07, 0xf0, 0x07, 0xe0, 0x03, 0xc0, 0x01, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00} + +createBitmap null 16 16 { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00} + +createBitmap solid 64 24 { + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 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, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00} + +catch { send controlButton "set bitmap panel; addCallback panel" } +catch { send helpButton "set bitmap qmark; addCallback Help" } +send xflipButton "set bitmap xflip; addCallback xflip" +send yflipButton "set bitmap yflip; addCallback yflip" +send prevButton "set bitmap larrow; addCallback prevFrame" +send nextButton "set bitmap rarrow; addCallback nextFrame" +send blinkPanel "set bitmap panel" + + + +# WINDOW the current frame. +set old_cm_x 0 +set old_cm_y 0 + +proc windowColormap {x y} \ +{ + global winWidth winHeight maxContrast old_cm_x old_cm_y + + # For efficiency we won't compute the sqrt of the distance but instead + # just compare the square. Use a threshold of 6 pixels so when we + # narrow in on the ROI we refine the colormap more precisely. + + set diff [expr (($old_cm_x - $x) * ($old_cm_x - $x)) + \ + (($old_cm_y - $y) * ($old_cm_y - $y))] + + # Keep the old position. + set old_cm_x $x + set old_cm_y $y + if {$diff > 36} { + return + } + + send client windowColormap \ + [expr "double($x) / $winWidth"] \ + [expr "(double($y) - $winHeight / 2.0) / $winHeight * \ + $maxContrast * 2.0"] +} + +proc updateColormap {x y} \ +{ + global winWidth winHeight maxContrast old_cm_x old_cm_y + + set old_cm_x $x + set old_cm_y $y + send client updateColormap \ + [expr "double($x) / $winWidth"] \ + [expr "(double($y) - $winHeight / 2.0) / $winHeight * \ + $maxContrast * 2.0"] +} + + + +# WINDOW the current frame, but only one color at a time. +proc windowRGB {color x y save_flag} \ +{ + global winWidth winHeight maxContrast + + send client windowRGB $color \ + [expr "double($x) / $winWidth"] \ + [expr "(double($y) - $winHeight / 2.0) / $winHeight * \ + $maxContrast * 2.0"] $save_flag +} + + +# ZOOM and PAN. +set xcen 0 +set ycen 0 +foreach i $frames {set zoomindex($i) 0} +set nzoomfactors 0 +foreach i $zoomfactors { + set zoomfactor($nzoomfactors) $i + incr nzoomfactors +} + +# Zoom or pan image at given center. +proc zoom {x y} \ +{ + global xcen ycen frame + global zoomindex zoomfactor + global nzoomfactors + + set rx $x; set ry $y + set raster 0 + + # Convert raw screen coordinates to frame buffer raster coordinates. + send imagewin unmapPixel $x $y raster rx ry + + # Select a pixel. + set rx [expr "int ($rx)"] + set ry [expr "int ($ry)"] + + # If the pointer did not move (much) zoom the image, otherwise + # pan it. + + send imagewin setCursorType busy + if {sqrt(pow($x-$xcen, 2) + pow($y-$ycen, 2)) < 4} { + set zoomindex($frame) [expr [incr zoomindex($frame)] % $nzoomfactors] + set mag $zoomfactor($zoomindex($frame)) + send client zoom $mag $mag $rx $ry + } else { + send client pan $rx $ry + set xcen $x + set ycen $y + } + + # Move the pointer so that it tracks the object feature the user + # selected. + + send imagewin setCursorPos $rx $ry $raster + send imagewin getCursorPos xcen ycen + send imagewin setCursorType idle +} + + +# Zoom using a marker to indicate the region to be displayed. +proc zoomMarker {marker aspect} \ +{ + global xcen ycen frame + global winWidth winHeight + global zoomindex nzoomfactors + global auto_reg frame frameOffsetX frameOffsetY + + # getRegion returns: "rectangle raster x y width height rotangle". + set region [send $marker getRegion unmap] + + set raster [lindex $region 1] + set xcen [expr "int([lindex $region 2]) + 0.5"] + set ycen [expr "int([lindex $region 3]) + 0.5"] + set snx [expr "[lindex $region 4] * 2"] + set sny [expr "[lindex $region 5] * 2"] + + # Compute the magnification ratio. + set xmag [expr "$winWidth / $snx"] + set ymag [expr "$winHeight / $sny"] + if {$aspect == "equal"} { + set mag [expr "($xmag < $ymag) ? $xmag : $ymag"] + set xmag $mag; set ymag $mag + } + + # Zoom the image. + send client zoomAbs \ + $xmag $ymag $xcen $ycen \ + $frameOffsetX($frame) $frameOffsetY($frame) + + # The following causes a button2 to redisplay the full image. + send imagewin setCursorPos $xcen $ycen $raster + send imagewin getCursorPos xcen ycen + set zoomindex($frame) [expr "$nzoomfactors - 1"] +} + +# Pan the display frame one width/height in a given direction. +proc moveFrame { xs ys args } \ +{ + global winWidth winHeight frame + global frameWidth frameHeight + global frameZoomX frameZoomY frameCenterX frameCenterY + global frameOffsetX frameOffsetY + + # Get the step size for the new position. + set xstep_size [ expr "$xs * $winWidth / $frameZoomX($frame)" ] + set ystep_size [ expr "$ys * $winHeight / $frameZoomY($frame)" ] + + # Set the boundaries so we only move up to the edges. + set xl [ expr "($winWidth / $frameZoomX($frame)) / 2 + 1" ] + set yl [ expr "($winHeight / $frameZoomY($frame)) / 2 + 1" ] + set xu [ expr "$frameWidth - $xl" ] + set yu [ expr "$frameHeight - $yl" ] + + # Set the new center position. + set nxc [ expr "$frameCenterX($frame) + $xstep_size" ] + set nyc [ expr "$frameCenterY($frame) + $ystep_size" ] + if {$nxc < $xl} { set nxc $xl } + if {$nxc > $xu} { set nxc $xu } + if {$nyc < $yl} { set nyc $yl } + if {$nyc > $yu} { set nyc $yu } + + # Finally, send the command to move the frame. + send client zoomAbs \ + $frameZoomX($frame) $frameZoomY($frame) $nxc $nyc \ + $frameOffsetX($frame) $frameOffsetY($frame) +} + +proc resetView {param old new} { + global zoomindex xcen ycen frames + global frameWidth frameHeight + + if {$new == "done"} { + foreach i $frames { + send client setFrame $i + set xcen [expr $frameWidth / 2] + set ycen [expr $frameHeight / 2] + send client zoom 1 1 $xcen $ycen + set zoomindex($i) 0 + send client setColormap Grayscale + normalize + } + send client setFrame 1 + } +}; #send initialize addCallback resetView + + +# CURSOR READ stuff. +proc setCursorMode {param old new} \ +{ + global cursorMode + + if {$new == "on"} { + send imagewin "activate; setCursorType ginMode" + set cursorMode 1 + } elseif {$new == "off"} { + send imagewin "setCursorType idle; deactivate" + set cursorMode 0 + } +} + +proc keyInput {widget event sx sy data} \ +{ + global cursorMode frame + + if {!$cursorMode || $event != "keyPress"} \ + return + if {[lindex $data 0] == "??"} \ + return + + # Convert raw screen coordinates to raster pixel coordinates. + send imagewin unmapPixel $sx $sy raster rx ry + + # Return the cursor value and exit cursor mode. + send client retCursorVal $rx $ry $frame 1 [lindex $data 0] +} + +proc resetCursorMode args { + global cursorMode frame + if {$cursorMode} { + send imagewin getCursorPos x y + send client retCursorVal $x $y $frame 1 ^D + } +}; send initialize addCallback resetCursorMode + +send cursorMode addCallback setCursorMode +send imagewin addCallback keyInput input + + +# MARKER stuff. The active marker is determined by the global variable +# "marker", which is the marker the pointer is in, or which the pointer +# was most recently in. + +# Translations when pointer is inside marker. +set markerTranslations { \ +!Shift : m_rotateResize() + : m_moveResize() + !Shift : m_raise() m_markpos() + : m_raise() m_markposAdd() + : m_redraw() m_destroyNull() + : m_lower() + : popup(markerMenu) + : popdown(markerMenu) + !Ctrl b: call(prevFrame,$name) + !Ctrl f: call(nextFrame,$name) + !Ctrl h: call(move_cursor,-1,0) + !Ctrl j: call(move_cursor,0,1) + !Ctrl k: call(move_cursor,0,-1) + !Ctrl l: call(move_cursor,1,0) + !Ctrl n: call(normalize) + !Ctrl c: call(cpZoomAction,centerFrame) + !Ctrl i: call(cpInvert) + !Ctrl m: call(cpMatchFrames) + !Ctrl r: call(cpRegisterFrames) + !Ctrl p: call(togglePanner) + !Alt 1: call(cpSetFrame,frame1) + !Alt 2: call(cpSetFrame,frame2) + !Alt 3: call(cpSetFrame,frame3) + !Alt 4: call(cpSetFrame,frame4) + !Ctrl 1: call(cpZoom,1,1,fixed) + !Ctrl 2: call(cpZoom,2,2,fixed) + !Ctrl 3: call(cpZoom,3,3,fixed) + !Ctrl 4: call(cpZoom,4,4,fixed) + !Ctrl 5: call(cpZoom,5,5,fixed) + !Ctrl 6: call(cpZoom,6,6,fixed) + !Ctrl 7: call(cpZoom,7,7,fixed) + !Ctrl 8: call(cpZoom,8,8,fixed) + !Ctrl 9: call(cpZoom,9,9,fixed) + BackSpace: m_deleteDestroy() + Delete: m_deleteDestroy() + : m_input() + : track-cursor() call(wcsUpdate,$x,$y) call(magnifierMapImage,$x,$y) +} + +# Popup menu in effect when inside marker. +createMenu markerMenu imagewin { + { Marker f.title } + { f.dblline } + { Zoom f.exec { + zoomMarker $marker equal + send $marker destroy + } } + { Fill f.exec { + zoomMarker $marker fill + send $marker destroy + } } + { Print f.exec { + send $marker getRect interior x0 y0 nx ny + setPrintCorners $x0 [expr $y0 + $ny -1] \ + [expr $x0 + $nx -1] $y0 + send client print $x0 $y0 $nx $ny + } } + { Save f.exec { + send imagewin setCursorType busy + send $marker getRect interior x0 y0 nx ny + send client save $x0 $y0 $nx $ny + send imagewin setCursorType idle + } } + { Info f.exec { + send infoText append \ + [format "%s\n" [send $marker getRegion unmap]] + } } + { Unrotate f.exec { + send $marker setAttribute rotangle 0 + } } + { f.dblline } + { Color f.menu markerColor } + { Type f.menu markerType } + { f.dblline } + { Destroy f.exec { + send $marker destroy + } } +} + +createMenu markerType markerMenu { + { Type f.title } + { f.dblline } + { Rectangle f.exec "m_setType $marker rectangle" } + { Box f.exec "m_setType $marker box" } + { Circle f.exec "m_setType $marker circle" } + { Ellipse f.exec "m_setType $marker ellipse" } + { Polygon f.exec "m_setType $marker polygon" } +} + +createMenu markerColor markerMenu { + { Color f.title } + { f.dblline } + { "" f.exec "m_setColor $marker black" + bitmap solid foreground black } + { "" f.exec "m_setColor $marker white" + bitmap solid foreground white } + { "" f.exec "m_setColor $marker red" + bitmap solid foreground red } + { "" f.exec "m_setColor $marker green" + bitmap solid foreground green } + { "" f.exec "m_setColor $marker blue" + bitmap solid foreground blue } + { "" f.exec "m_setColor $marker magenta" + bitmap solid foreground magenta } + { "" f.exec "m_setColor $marker cyan" + bitmap solid foreground cyan } + { "" f.exec "m_setColor $marker yellow" + bitmap solid foreground yellow } +} + +proc m_setType {marker type} { + send $marker "markpos; set type $type; redraw" +} +proc m_setColor {marker color} { + send $marker "markpos; + set lineColor $color; set highlightColor $color; redraw" +} + +# Callback executed when a marker gets or loses the focus. +proc selectMarker {active_marker event event_data} \ +{ + global marker + switch $event { + focusIn { set marker $active_marker } + focusOut { } + } +} + +# Create marker action. Makes a new marker. +proc makeMarker {parent x y} \ +{ + global markerTranslations markno + set marker marker$markno; incr markno + + send $parent createMarker $marker \ + type rectangle \ + createMode interactive \ + translations $markerTranslations \ + x $x \ + y $y + + send $marker addCallback selectMarker focusIn focusOut +} + + + +# WCSBOX -- Real time coordinate display. + +set track_enable 0 +set last_x 0 +set last_y 0 + +proc wcsUpdate {x y} \ +{ + global track_enable frame pixtab_up tabTop + global frameWidth frameHeight redraw_compass + global ism_enable wcsLabels last_x last_y + global ct_warn plotSpeed doHcut doVcut + + + # If the cursor was frozen release it now. + if {$ct_warn} { + curtrack_destroy + } + + # Convert screen coords to raster pixel. + send imagewin unmapPixel $x $y raster rx ry rz + + # Set the current frame to the frame the pointer is within. + if {$frame && $raster} { + set track_frame [send client getFrame $raster] + if {$frame != $track_frame} { + send client setFrame $track_frame + } + } + + # Update coords box. + if {$raster} { + set text [send client encodewcs $rx $ry $rz] + scan $text "%g %g %g" nx ny nz + } else { + set text [format " %7.2f %7.2f %9.1f " $rx $ry $rz] + set nx $rx ; set ny $ry ; set nz $rz + } + + # Update the coords panel and pixel table. + wcsFmtSValue $nz + if {$pixtab_up} { + updatePixelTable $x $y $nx $ny + } + + # If the ISM is running update the coords box with all the selected + # options, otherwise just write the one-line frame wcs coords. + if {$ism_enable} { + updateCoordsBox + + } else { + # Update the on-screen marker. + if {$track_enable} { + send wcsbox "set text \{$text\}; redraw noerase" + } + + # Update the control panel readout (always done). + if {$wcsLabels} { + set ln [format " X: %12s Y: %12s WCS: Display" $nx $ny] + } else { + set ln [format " %12s %12s Display" $nx $ny] + } + send wtWcs1 set string $ln + + if {$redraw_compass} \ + drawCompass + } + + + # Update the cut-plots if enabled. If we're set for speed the don't + # track the really large cursor motions, wait till the differences are + # small indicating a finer motion. + if {$doHcut || $doVcut} { + set dist [ expr "sqrt(pow(($last_x - $x),2) + pow(($last_y - $y),2))" ] + if {($plotSpeed && $dist < 30) || ! $plotSpeed} { + cutPlots $x $y + } + } + + # Save the position so we can track differences with last position. + set last_x $x + set last_y $y +} + + +proc setTrack {state} \ +{ + global ism_enable track_enable wcsboxGeom + global winWidth winHeight up_todo + + if {$state} { + if {$track_enable} \ + return + + send imagewin createMarker wcsbox { + type text + createMode noninteractive + width 27ch + height 1ch + lineWidth 0 + imageText true + textBgColor black + textColor yellow + visible false + } + + set box_width [send wcsbox get width] + set box_height [send wcsbox get height] + set defGeom [format "%sx%s-5-5" $box_width $box_height] + send imagewin parseGeometry $wcsboxGeom $defGeom x y width height + + send wcsbox setAttributes \ + x $x \ + y $y \ + activated true \ + visible true \ + sensitive true + + send wcsbox { + addCallback wcsboxDestroyCallback destroy + addCallback wcsboxMoved moveResize + } + + send imagewin addCallback wcsboxWindowResize resize + set track_enable 1 + send imagewin getCursorPos x y + wcsUpdate $x $y + magnifierMapImage $x $y + + # Turn on the option toggles on the control panel. + foreach n {1 2 3 4} { + if {[send sysWcs$n get label] != "None"} { + send wiWcs$n set on True + } + } + if {$ism_enable} { + resizeCoordsBox $up_todo + } + + } elseif {$track_enable} { + set track_enable 0 + send wcsbox destroy + + # Turn off the option toggles on the control panel. + foreach w {wiWcs1 wiWcs2 wiWcs3 wiWcs4} { send $w set on False } + resizeCoordsBox 0 + } + updateCoordsBox +} + +proc wcsboxDestroyCallback args \ +{ + global track_enable + send imagewin deleteCallback wcsboxWindowResize + set track_enable 0 +} + +# If the window is resized make the wcsbox track the corner. +proc wcsboxWindowResize args \ +{ + global track_enable + global wcsboxGeom + + if {$track_enable} { + # Get new location. + set box_width [send wcsbox get width] + set box_height [send wcsbox get height] + set defGeom [format "%sx%s-5-5" $box_width $box_height] + send imagewin parseGeometry $wcsboxGeom $defGeom x y width height + + # Move the marker. + send wcsbox "\ + deleteCallback wcsboxMoved; \ + markpos; setAttributes x $x y $y; redraw; \ + addCallback wcsboxMoved moveResize" + set wcsboxGeom [send imagewin getGeometry $x $y $width $height] + } +} + +proc wcsboxMoved {marker event position} \ +{ + global wcsboxGeom + send wcsbox getRect boundary x y width height + set wcsboxGeom [send imagewin getGeometry $x $y $width $height] +} + +proc resetWcsbox {param old new} \ +{ + global track_enable wcsboxGeom displayCoords + if {$new == "done"} { + setTrack [true $displayCoords] + } elseif {$track_enable} { + setTrack 0 + if {$new == "restart"} { + set wcsboxGeom -5-5 + } + } +}; send initialize addCallback resetWcsbox + + + +#--------------------- +# FRAME BLINK. +#--------------------- +set blinkId 0 +set blinkIndex 0 + +proc toggleBlink args \ +{ + global blinkId blinkRate blinkIndex + global optionsMenuDescription + + if {$blinkId} { + deleteTimedCallback $blinkId + set blinkId 0 + } else { + set blinkId [postTimedCallback blink [expr int($blinkRate * 1000)]] + } + + set blinkIndex 0 + editMenu optionsMenu viewButton $optionsMenuDescription +} + +proc blink args \ +{ + global blinkId blinkRate blinkFrames blinkIndex + + send client setFrame [lindex $blinkFrames $blinkIndex] + incr blinkIndex + if {$blinkIndex >= [llength $blinkFrames]} { + set blinkIndex 0 + } + + set blinkId [postTimedCallback blink [expr int($blinkRate * 1000)]] +} + +proc resetBlink args \ +{ + global blinkId + if {$blinkId} \ + toggleBlink +}; send initialize addCallback resetBlink + + + +# Normalize -- Reset the view parameters for the current frame. +proc normalize args \ +{ + global zoomindex zoomfactor + global frameWidth frameHeight + global xcen ycen frame + + #set zoomindex($frame) 0 + #set xcen [expr $frameWidth / 2] + #set ycen [expr $frameHeight / 2] + #send client zoom 1 1 $xcen $ycen + send client updateColormap 0.5 1.0 +} + + +# Popdown menus. +createMenu fileMenu fileButton { + { "Info" f.exec { panelTabToggle info_panel } } + { "Load" f.exec { + panelTabToggle load_panel + set panel_up 1 + } } + { "Save" f.exec { Save } } + { "Save As..." f.exec { panelTabToggle save_panel } } + { "Print" f.exec { + send imagewin setCursorType busy + Print + send imagewin setCursorType idle + } } + { "Print Setup" f.exec { panelTabToggle print_panel } } + { f.dblline } + { "Reset" f.exec { + # Do a hard reset. + send client Reset + #resetView initialize done done + } } + { "Debug Panel" f.exec { tclPanel 1 } } + { "Quit" f.exec { Quit } } +} + +createMenu viewMenu viewButton { + { "Next frame" f.exec nextFrame } + { "Prev frame" f.exec prevFrame } + { f.dblline } + { "Colormap" f.menu cmapMenu } + { "Flip" f.menu flipMenu } + { f.dblline } + { "Equal aspect" f.exec { + set xmag $frameZoomX($frame) + set ymag $frameZoomY($frame) + set zoom [expr ($xmag + $ymag) / 2.0] + cpZoom $zoom $zoom fixed + } } + { "Integer zoom" f.exec { + set xmag [expr round ($frameZoomX($frame))] + set ymag [expr round ($frameZoomY($frame))] + cpZoom $xmag $ymag fixed + } } + { "Toggle zoom" f.exec toggleZoom } + { "Unzoom" f.exec { + set zoomindex($frame) 0 + set mag $zoomfactor($zoomindex($frame)) + send client zoom $mag $mag $xcen $ycen + } } +} + +createMenu cmapMenu viewMenu { + { "Normalize" f.exec normalize } + { "Invert" f.exec cpInvert } + { "Optimize" f.exec cpOptimize sensitive false } + { f.dblline } + { "Grayscale" f.exec "send client setColormap Grayscale" } + { "Color" f.exec "send client setColormap Color" } + { "Heat" f.exec "send client setColormap Heat" } + { "HSV" f.exec "send client setColormap HSV" } + { "AIPS0" f.exec "send client setColormap AIPS0" } + { "Halley" f.exec "send client setColormap Halley" } + { "Ramp" f.exec "send client setColormap Ramp" } + { "Standard" f.exec "send client setColormap Standard" } + { "Staircase" f.exec "send client setColormap Staircase" } + { "Rainbow1" f.exec "send client setColormap Rainbow1" } + { "Rainbow2" f.exec "send client setColormap Rainbow2" } + { "Random8" f.exec "send client setColormap Random8" } +} + +createMenu flipMenu viewMenu { + { "Flip X" f.exec xflip } + { "Flip Y" f.exec yflip } + { "Flip XY" f.exec xyflip } +} + +set optionsMenuDescription { + { "Autoscale" f.exec { + set value [send autoscaleButton get on] + send autoscaleButton set on [expr !$value] + cpSetAutoscale + } } + { "Antialias" f.exec { + set value [send antialiasButton get on] + send antialiasButton set on [expr !$value] + cpSetAntialias + } } + { "Panner" f.exec { setPanner [expr !$panner_enable] } } + { "Magnifier" f.exec { setMagnifier [expr !$magnifier_enable] }} + { "Coords box" f.exec { setTrack [expr !$track_enable] } } + { "Tile frames" f.exec { + set value [send tileFramesButton get on] + send tileFramesButton set on [expr !$value] + cpSetTileFrames + } } + { "Clear frame" f.exec clearFrame } + { "Fit frame" f.exec fitFrame } + { "Match LUTs" f.exec cpMatchFrames } + { "Auto-Register" f.exec cpAutoRegister } + { "Register" f.exec cpRegisterFrames } + { {$blinkId ? "Stop blink" : "Blink frames"} + f.exec toggleBlink } + { f.dblline } + { "Control Panel" f.exec { panelTabToggle display_panel } } + { "Print Panel" f.exec { panelTabToggle print_panel } } + { "Load Panel" f.exec { panelTabToggle load_panel } } + { "Save Panel" f.exec { panelTabToggle save_panel } } +}; createMenu optionsMenu optionsButton $optionsMenuDescription + + + +#------------------------------- +# Frozen Cursor Warning Message +#------------------------------- + +set ct_warn 0 + +proc curtrack_msg { x y args } \ +{ + global ct_warn last_x last_y winHeight winWidth + + + if {! $ct_warn == 0} { + return + } + + send imagewin createMarker curtrack_warn { + type text + createMode noninteractive + width 25ch + height 21 + lineWidth 0 + imageText true + textBgColor red + textColor yellow + visible true + sensitive true + activated true + x 5 + y 5 + } + + send curtrack_warn "set text \{ CURSOR READOUT FROZEN \}" + set ypos [ expr ($winHeight - 25) ] + send curtrack_warn "markpos; setAttributes x 5 y $ypos; redraw" + send curtrack_warn "redraw noerase" + set ct_warn 1 + + # Mark the position of the cursor. + send imagewin createMarker x_curpos \ + type box \ + createMode noninteractive \ + lineColor red \ + x 1 \ + y $last_y \ + width $winWidth \ + height 1 \ + activated True \ + visible True \ + sensitive False + + send imagewin createMarker y_curpos \ + type box \ + createMode noninteractive \ + lineColor red \ + x $last_x \ + y 1 \ + width 1 \ + height $winHeight \ + activated True \ + visible True \ + sensitive False + + # Raise the coordinate marker so we can see where we are. + send wcsbox raise +} + + +proc curtrack_destroy args \ +{ + global ct_warn + + if {$ct_warn} { + send curtrack_warn destroy + send x_curpos destroy + send y_curpos destroy + set ct_warn 0 + } +} + diff --git a/vendor/x11iraf/ximtool/gui/info.res b/vendor/x11iraf/ximtool/gui/info.res new file mode 100644 index 00000000..7fafa106 --- /dev/null +++ b/vendor/x11iraf/ximtool/gui/info.res @@ -0,0 +1,58 @@ + +set Resources(info_panel) { \ + + !-------------------- + ! Information Panel + !-------------------- + *infoLayout*borderWidth: 0 + *infoLayout*Frame.frameType: sunken + *infoLayout*Frame.frameWidth: 1 + *infoLayout*Command.internalWidth: 12 + *infoLayout*Text*editType: read + *infoLayout*Text*scrollVertical: whenNeeded + *infoLayout*Text*scrollHorizontal: whenNeeded + *infoLayout*Text*displayCaret: False + *infoLayout*Scrollbar.background: #c4c4c4 + *infoLayout*Scrollbar.width: 17 + *infoLayout*Scrollbar.height: 17 + + *infoText.height: 240 + *infoText*font: 6x13 + *infoLayout.layout: vertical { \ + infoBox < +inf -inf * > \ + } + + *infoBox.label: + *infoBox.outerOffset: 0 + *infoBox.innerOffset: 3 + *infoBoxL*TextToggle.frameType: raised + *infoBoxL*TextToggle.frameWidth: 1 + *infoBoxL*TextToggle*outerOffset: 0 + *infoBoxL*TextToggle*innerOffset: 1 + *infoBoxL*TextToggle.location: 0 0 100 25 + *infoBoxL*TextToggle*onIcon: square1s + *infoBoxL*TextToggle*offIcon: square0s + *infoBoxL*TextToggle*highlightColor: cyan + *infoBoxL.layout: vertical { \ + infoFrame < +inf -inf * +inf -inf > 1 \ + 4 \ + horizontal { \ + infoOptFr < +inf -inf * > 1 \ + infoOptSvr < +inf -inf * > 1 \ + infoOptClients < +inf -inf * > 1 \ + infoOptWCS < +inf -inf * > 1 \ + infoOptIsm < +inf -inf * > 1 \ + infoOptFB < +inf -inf * > \ + }\ + 2 \ + } + *infoOptFr.label: Frame + *infoOptFr.on: True + *infoOptSvr.label: Server + *infoOptWCS.label: WCS + *infoOptIsm.label: ISM + *infoOptClients.label: Clients + *infoOptFB.label: Imtoolrc +} + + diff --git a/vendor/x11iraf/ximtool/gui/info.tcl b/vendor/x11iraf/ximtool/gui/info.tcl new file mode 100644 index 00000000..3f0e89fc --- /dev/null +++ b/vendor/x11iraf/ximtool/gui/info.tcl @@ -0,0 +1,86 @@ + +################################################################################ +# INFO box. +################################################################################ + +set infoMode infoOptFr + + +# Current Frame information. +proc infoFrameUpdate args \ +{ + global version frame nframes + global frameWidth frameHeight frameDepth + global enhancement + global cpXcen cpYcen cpXoff cpYoff + global cpXmag cpYmag cpXscale cpYscale + + if { [send infoOptWCS get on] } { + send client info wcs + return + } elseif {! [send infoOptFr get on]} \ + return + + + if {$frame == 0} { + send infoText set string "initializing display..." + } else { + set line1 $version + set line2 [format "Image:\t\t%s" [send imageTitle get label]] + set line3 [format "Frame %d of %d:\t%d x %d" \ + $frame $nframes $frameWidth $frameHeight] + set cmap [lindex $enhancement($frame) 0] + set brt [lindex $enhancement($frame) 1] + set con [lindex $enhancement($frame) 2] + set line4 [format "Colormap:\t%s" $cmap] + set line5 [format "Enhancement:\tBrt=%s Cont=%s" $brt $con] + + set cntr [format "X: %0.1f\n\t\tY: %0.1f" $cpXcen $cpYcen] + set line6 [format "Center:\t\t%s" $cntr] + + set line7 [format "Zoom:\t\tX: %0.2f\n\t\tY: %0.2f" $cpXmag $cpYmag] + set line8 [format "Scale:\t\tX: %0.2f\n\t\tY: %0.2f" $cpXscale $cpYscale] + set line9 [format "Offset:\t\tX: %0.2f\n\t\tY: %0.2f" $cpXoff $cpYoff] + + send infoText set string [ + format "%s\n\n%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s\n\n" \ + $line1 $line2 $line3 $line4 $line5 $line6 $line7 $line8 $line9 + ] + } +} +set params {frame frameView nframes frameSize frameTitle enhancement} +foreach p $params { send $p addCallback infoFrameUpdate } + + +# Server Program State information. +proc infoOptToggle { widget type state args } \ +{ + global infoMode ismInfoText + + if {$state} { set not False } else { set not True } + + send $infoMode set on $not + set infoMode $widget + + switch $widget { + infoOptFr { infoFrameUpdate } + infoOptSvr { set bp [send imagewin get basePixel] + set mc [send imagewin get maxColors] + send client info server $bp $mc + } + infoOptIsm { send infoText set string $ismInfoText } + infoOptClients { send client info clients } + infoOptWCS { send client info wcs } + infoOptFB { send client info imtoolrc } + } +} +set iopts {infoOptFr infoOptSvr infoOptIsm infoOptClients infoOptWCS infoOptFB } +foreach w $iopts { send $w addCallback infoOptToggle } + + +proc infoSetText { param old new } \ +{ + send infoText set string $new +} ; send info addCallback infoSetText + + diff --git a/vendor/x11iraf/ximtool/gui/ism.tcl b/vendor/x11iraf/ximtool/gui/ism.tcl new file mode 100644 index 00000000..0882f37b --- /dev/null +++ b/vendor/x11iraf/ximtool/gui/ism.tcl @@ -0,0 +1,423 @@ + + +################################################ +# ISM Module support routines. +################################################ + + +# Turn the ISM on or off. +proc ismToggle { widget type state args } \ +{ + global ism_enable ism_capable psize + + set ism_enable $state + + # Set the coord-panel header option availability. + if {$ism_enable == 1 && $ism_capable} { + send imageHeader setSensitive True + send woptBPM setSensitive True + catch { send client ism_start wcspix } + } else { + send imageHeader setSensitive False + send woptBPM set on False + send woptBPM setSensitive False + catch { send client ism_stop wcspix } + send hdr_panel unmap + } + setCoordPanelSensitivity + +} ; send ismToggle addCallback ismToggle + + + +# Handle messages from ISM clients and pass them on to the appropiate +# callback. + +proc ism_msg { param old new } \ +{ + global ism_enable + + set cmd [lindex $new 0] ;# command name + set ism [lindex $new 1] ;# determine ISM name + set argv [lrange $new 2 end] ;# get args + set argc [llength $argv] + + switch $cmd { + source { source [lindex $new 1] } + alert { Wexec client [lindex $new 1] } + deliver { ${ism}_msg $argc $argv } + info { ism_info $ism } + } +} ; send ism_msg addCallback ism_msg + + + +# Log a client message to the info panel +set ismInfoText " " + +proc ism_info { text } \ +{ + global infoMode ismInfoText + + set ismInfoText [format "%s\n%s" $ismInfoText $text] + if {$infoMode == "infoOptIsm"} { + send infoText set string $ismInfoText + } +} + +# Initialize the text. +proc ismInitInfoText args \ +{ + global ismInfoText + + set ismInfoText "" + ism_info "\t ISM Client Message Logs" + ism_info "\t -----------------------" + ism_info " " +} ; ismInitInfoText + + + +################################################ +# WPIX module support routines. +################################################ + +set cur_objid 0 +set cur_regid 0 +set redraw_compass 0 +#set Compass(0) { 0.0 1 1 0 X Y } +set Compass(0) { 0.0 0.0 1.0 -1.0 0.0 0 X Y } +set Orient(0) { 1 1 1 } + +set wcspix_debug 0 + +proc wcspix_msg { argc argv } \ +{ + global wcspix_debug + + set arg [string trimleft [ string trimright [lindex $argv 0] ] ] + set cmd [lindex $arg 0] + + if {$wcspix_debug} { print "wcspix_msg: $cmd" } + + + switch $cmd { + startup { wcspix_startup } + shutdown { wcspix_shutdown } + disable { wcspix_disable } + capable { wcspix_capable } + + cache { wcspix_cache [lrange $arg 1 end] } + uncache { wcspix_uncache [lrange $arg 1 end] } + wcstran { wcspix_wcstran [lrange $arg 1 end] } + wcslist { wcspix_wcslist [lrange $arg 1 end] } + + imghdr { send hdrText \ + setText [format "
%s\n%s
" \ + [string trimright [send hdrText getText simple] "\n"]\ + [lindex $arg 1] ] + } + wcshdr { send hdrKGText append [lindex $arg 1] } + + wcsinfo { send hdrIGText append [lindex $arg 1] + send hdrText gotoId 0 + send hdrKGText set insertPosition 0 + } + + compass { wcspix_compass [lrange $arg 1 end] ; drawCompass } + orient { wcspix_orient [lrange $arg 1 end] } + wcstype { wcspix_wcstype [lindex $arg 1] [lindex $arg 2] } + wcsfmt { set num [lindex $arg 2] + send fmtWcs$num set label [lindex $arg 1] } + + wcspix_cmd { send wcsIsmCmd set string [lindex $arg 1] } + + pixtab { set tab [lindex [lindex $arg 1] 0] + set col [lindex [lindex $arg 1] 1] + set row [lindex [lindex $arg 1] 2] + set stat [lindex [lindex $arg 1] 3] + wcspix_pixtab $tab $col $row $stat + } + } +} + + +# Startup and initialize the wcspix module with the GUI state. +proc wcspix_startup args \ +{ + global ism_enable frame + global up_todo psize pixtab_up frameCache + + set ism_enable 1 + send ismToggle set on True + send imageHeader setSensitive True + send woptBPM setSensitive True + setCoordPanelSensitivity + ismInitInfoText + + if {$up_todo < 3} { + resizeCoordsBox $up_todo + } + updateCoordsBox + drawCompass + + # Initialize the frame cache. + foreach c [array names frameCache] { + if {$c != "0"} { unset frameCache($c) } + } + + catch { + if {$pixtab_up} { send wcspix set psize $psize } + for {set i 1} {$i <= 4} {incr i} { + send wcspix set wcs [send sysWcs$i get label] $i + send wcspix set format [send fmtWcs$i get label] $i + } + } + + if { [send infoOptClients get on] } { + send client info clients + } +} + +# Shutdown the WPIX module. +proc wcspix_shutdown args \ +{ + global ism_enable frame + + set ism_enable 0 + send ismToggle set on False + send imageHeader setSensitive False + send woptBPM set on False + send woptBPM setSensitive False + setCoordPanelSensitivity + setCoordPanelHeight + + wcsFmtIValue "N/A" + wcsFmtBValue "0" + + resizeCoordsBox 0 + drawCompass + + if { [send infoOptClients get on] } { + send client info clients + } +} + + +# Disable the WPIX module. We are only called when a display client has +# indicated it doesn't use the new mapping facilities and having the WPIX +# ISM visible will only confuse the user. + +proc wcspix_disable args \ +{ + global ism_enable ism_capable rulerWCS + + if {$ism_enable} { + send wcspix quit + } + set ism_capable 0 + set rulerWCS 0 + wcspix_shutdown + send ismToggle setSensitive False +} + + +# Client connected is capable of using the ISM, but don't necessarily turn +# it on at this point. + +proc wcspix_capable args \ +{ + global ism_capable + + set ism_capable 1 + wcsFmtIValue "0" + wcsFmtBValue "0" + send ismToggle setSensitive True +} + + +# Cache an image in the GUI. +proc wcspix_cache { argv } \ +{ + global frameCache redraw_compass cur_objid + + set name [lindex $argv 0] + set frame [lindex $argv 1] + set id [lindex $argv 2] + + # Store the image name and id in a local cache. + lappend frameCache($frame) $name $id + send hdrObjMenu set label $name + + # Automatically get the header. + regsub -all {[\[]} $name "\\\[" image + catch { getHeader $image $id } + + setHdrObjMenu $frame + + set cur_objid $id + set redraw_compass 1 +} + +# Uncache an image in the GUI. +proc wcspix_uncache { argv } \ +{ + global frameCache Compass + + set id [lindex $argv 0] + foreach c [array names frameCache] { + set i1 0 + set i2 1 + set new { } + while { $i2 < [llength $frameCache($c)] } { + if {[lindex $frameCache($c) $i2] != $id} { + lappend new [lindex $frameCache($c) $i1] + lappend new [lindex $frameCache($c) $i2] + } + incr i1 2 + incr i2 2 + } + set frameCache($c) $new + } + if [info exists Compass($id)] { + unset Compass($id) + } +} + +# Format the results of the WCSTRAN method. +proc wcspix_wcstran { argv } \ +{ + global frameCache cur_objid cur_regid redraw_compass + + set objid [ lindex [lindex $argv 0] 1] + set regid [ lindex [lindex $argv 1] 1] + set pixval [ lindex [lindex $argv 2] 1] + set bpmval [ lindex [lindex $argv 3] 1] + + wcsFmtIValue $pixval + wcsFmtBValue $bpmval + + set args [lrange $argv 4 end] + set nargs [llength $args] + for {set i 0} {$i < 4} {incr i} { + set coord [lindex $args $i] + set wcsname [lindex $coord 1] + set xval [lindex $coord 2] + set yval [lindex $coord 3] + set xunits [lindex $coord 4] + set yunits [lindex $coord 5] + wcsFmtWcs [expr ($i + 1)] $wcsname $xval $yval $xunits $yunits + } + + set cur_objid $objid + set cur_regid $regid + + if {$redraw_compass} \ + drawCompass +} + +# Save the object compass information. +proc wcspix_compass { argv } \ +{ + global Compass + + set objid [lindex $argv 0] + set angle [lindex $argv 1] + + #set xflip [lindex $argv 2] + #set yflip [lindex $argv 3] + #set transpose [lindex $argv 4] + #set xlab [lindex $argv 5] + #set ylab [lindex $argv 6] + + set north_x [lindex $argv 2] + set north_y [lindex $argv 3] + set east_x [lindex $argv 4] + set east_y [lindex $argv 5] + set transpose [lindex $argv 6] + set xlab [lindex $argv 7] + set ylab [lindex $argv 8] + + #lappend Compass($objid) $angle $xflip $yflip $transpose $xlab $ylab + #set Compass($objid) [list $angle $xflip $yflip $transpose $xlab $ylab] + set Compass($objid) [list $angle $north_x $north_y $east_x $east_y \ + $transpose $xlab $ylab] + drawCompass +} + +# Save the image display orientation information. +proc wcspix_orient { argv } \ +{ + global Orient + + set objid [lindex $argv 0] + set frame [lindex $argv 1] + set xflip [lindex $argv 2] + set yflip [lindex $argv 3] + + set Orient($objid) [list $frame $xflip $yflip] +} + + +# Handle the list of WCSs available for the current image. +proc wcspix_wcslist { argv } \ +{ + set wcslist [lindex $argv 0] + + for {set i 1} {$i <= 4} {incr i} { + set items {} + foreach nam $wcslist { + if {[string tolower $nam] == "line"} { + lappend items "f.dblline" + } else { + lappend items "\"$nam\" f.exec \{setWcsSys $nam $i\}" + } + } + editMenu sysMenu$i sysWcs$i $items + } +} + +# Set the type of the WCS. +proc wcspix_wcstype { label num } \ +{ + global up_todo + + send sysWcs$num set label $label + if {[string tolower $label] == "none"} { + send wpWcs$num "set on False ; setSensitive False" + send wiWcs$num "set on False ; setSensitive False" + send fmtWcs$num setSensitive False + set hght 4 + } else { + send wpWcs$num "set on True ; setSensitive True" + send wiWcs$num setSensitive True + send fmtWcs$num setSensitive True + set hght 17 + } + send wtWcs$num set height $hght + setCoordPanelHeight + + #resizeCoordsBox $up_todo + updateCoordsBox +} + +# Display the pixel table. +proc wcspix_pixtab { tab col row stat } \ +{ + global psize + + # Update the pixel table. + send pixtab setList [lindex $tab 1] + send pixtab highlight [expr int(($psize * $psize) / 2)] + + # Update the table labels. + set c [ expr int($psize / 2) ] + send ptColLabs setList $col ; send ptColLabs highlight $c + send ptRowLabs setList $row ; send ptRowLabs highlight $c + + # Update the pixtab stats. + send meanValue set label [ format "%10.2f" [lindex $stat 0] ] + send sigValue set label [ format "%10.4f" [lindex $stat 1] ] +} + + diff --git a/vendor/x11iraf/ximtool/gui/ism.tcl.bak b/vendor/x11iraf/ximtool/gui/ism.tcl.bak new file mode 100644 index 00000000..4dd43305 --- /dev/null +++ b/vendor/x11iraf/ximtool/gui/ism.tcl.bak @@ -0,0 +1,411 @@ + + +################################################ +# ISM Module support routines. +################################################ + + +# Turn the ISM on or off. +proc ismToggle { widget type state args } \ +{ + global ism_enable ism_capable psize + + set ism_enable $state + + # Set the coord-panel header option availability. + if {$ism_enable == 1 && $ism_capable} { + send imageHeader setSensitive True + send woptBPM setSensitive True + catch { send client ism_start wcspix } + } else { + send imageHeader setSensitive False + send woptBPM set on False + send woptBPM setSensitive False + catch { send client ism_stop wcspix } + send hdr_panel unmap + } + setCoordPanelSensitivity + +} ; send ismToggle addCallback ismToggle + + + +# Handle messages from ISM clients and pass them on to the appropiate +# callback. + +proc ism_msg { param old new } \ +{ + global ism_enable + + set cmd [lindex $new 0] ;# command name + set ism [lindex $new 1] ;# determine ISM name + set argv [lrange $new 2 end] ;# get args + set argc [llength $argv] + + switch $cmd { + source { source [lindex $new 1] } + alert { Wexec client [lindex $new 1] } + deliver { ${ism}_msg $argc $argv } + info { ism_info $ism } + } +} ; send ism_msg addCallback ism_msg + + + +# Log a client message to the info panel +set ismInfoText " " + +proc ism_info { text } \ +{ + global infoMode ismInfoText + + set ismInfoText [format "%s\n%s" $ismInfoText $text] + if {$infoMode == "infoOptIsm"} { + send infoText set string $ismInfoText + } +} + +# Initialize the text. +proc ismInitInfoText args \ +{ + global ismInfoText + + set ismInfoText "" + ism_info "\t ISM Client Message Logs" + ism_info "\t -----------------------" + ism_info " " +} ; ismInitInfoText + + + +################################################ +# WPIX module support routines. +################################################ + +set cur_objid 0 +set cur_regid 0 +set redraw_compass 0 +set Compass(0) { 0.0 1 1 0 X Y } +set Orient(0) { 1 1 1 } + +set wcspix_debug 0 + +proc wcspix_msg { argc argv } \ +{ + global wcspix_debug + + set arg [string trimleft [ string trimright [lindex $argv 0] ] ] + set cmd [lindex $arg 0] + + if {$wcspix_debug} { print "wcspix_msg: $cmd" } + + + switch $cmd { + startup { wcspix_startup } + shutdown { wcspix_shutdown } + disable { wcspix_disable } + capable { wcspix_capable } + + cache { wcspix_cache [lrange $arg 1 end] } + uncache { wcspix_uncache [lrange $arg 1 end] } + wcstran { wcspix_wcstran [lrange $arg 1 end] } + wcslist { wcspix_wcslist [lrange $arg 1 end] } + + imghdr { send hdrText \ + setText [format "
%s\n%s
" \ + [string trimright [send hdrText getText simple] "\n"]\ + [lindex $arg 1] ] + } + wcshdr { send hdrKGText append [lindex $arg 1] } + + wcsinfo { send hdrIGText append [lindex $arg 1] + send hdrText gotoId 0 + send hdrKGText set insertPosition 0 + } + + compass { wcspix_compass [lrange $arg 1 end] } + orient { wcspix_orient [lrange $arg 1 end] } + wcstype { wcspix_wcstype [lindex $arg 1] [lindex $arg 2]} + wcsfmt { set num [lindex $arg 2] + send fmtWcs$num set label [lindex $arg 1] } + + wcspix_cmd { send wcsIsmCmd set string [lindex $arg 1] } + + pixtab { set tab [lindex [lindex $arg 1] 0] + set col [lindex [lindex $arg 1] 1] + set row [lindex [lindex $arg 1] 2] + set stat [lindex [lindex $arg 1] 3] + wcspix_pixtab $tab $col $row $stat + } + } +} + + +# Startup and initialize the wcspix module with the GUI state. +proc wcspix_startup args \ +{ + global ism_enable frame + global up_todo psize pixtab_up frameCache + + set ism_enable 1 + send ismToggle set on True + send imageHeader setSensitive True + send woptBPM setSensitive True + setCoordPanelSensitivity + ismInitInfoText + + if {$up_todo < 3} { + resizeCoordsBox $up_todo + } + updateCoordsBox + drawCompass + + # Initialize the frame cache. + foreach c [array names frameCache] { + if {$c != "0"} { unset frameCache($c) } + } + + catch { + if {$pixtab_up} { send wcspix set psize $psize } + for {set i 1} {$i <= 4} {incr i} { + send wcspix set wcs [send sysWcs$i get label] $i + send wcspix set format [send fmtWcs$i get label] $i + } + } + + if { [send infoOptClients get on] } { + send client info clients + } +} + +# Shutdown the WPIX module. +proc wcspix_shutdown args \ +{ + global ism_enable frame + + set ism_enable 0 + send ismToggle set on False + send imageHeader setSensitive False + send woptBPM set on False + send woptBPM setSensitive False + setCoordPanelSensitivity + setCoordPanelHeight + + wcsFmtIValue "N/A" + wcsFmtBValue "0" + + resizeCoordsBox 0 + drawCompass + + if { [send infoOptClients get on] } { + send client info clients + } +} + + +# Disable the WPIX module. We are only called when a display client has +# indicated it doesn't use the new mapping facilities and having the WPIX +# ISM visible will only confuse the user. + +proc wcspix_disable args \ +{ + global ism_enable ism_capable rulerWCS + + if {$ism_enable} { + send wcspix quit + } + set ism_capable 0 + set rulerWCS 0 + wcspix_shutdown + send ismToggle setSensitive False +} + + +# Client connected is capable of using the ISM, but don't necessarily turn +# it on at this point. + +proc wcspix_capable args \ +{ + global ism_capable + + set ism_capable 1 + wcsFmtIValue "0" + wcsFmtBValue "0" + send ismToggle setSensitive True +} + + +# Cache an image in the GUI. +proc wcspix_cache { argv } \ +{ + global frameCache redraw_compass cur_objid + + set name [lindex $argv 0] + set frame [lindex $argv 1] + set id [lindex $argv 2] + + # Store the image name and id in a local cache. + lappend frameCache($frame) $name $id + send hdrObjMenu set label $name + + # Automatically get the header. + regsub -all {[\[]} $name "\\\[" image + catch { getHeader $image $id } + + setHdrObjMenu $frame + + set cur_objid $id + set redraw_compass 1 +} + +# Uncache an image in the GUI. +proc wcspix_uncache { argv } \ +{ + global frameCache Compass + + set id [lindex $argv 0] + foreach c [array names frameCache] { + set i1 0 + set i2 1 + set new { } + while { $i2 < [llength $frameCache($c)] } { + if {[lindex $frameCache($c) $i2] != $id} { + lappend new [lindex $frameCache($c) $i1] + lappend new [lindex $frameCache($c) $i2] + } + incr i1 2 + incr i2 2 + } + set frameCache($c) $new + } + if [info exists Compass($id)] { + unset Compass($id) + } +} + +# Format the results of the WCSTRAN method. +proc wcspix_wcstran { argv } \ +{ + global frameCache cur_objid cur_regid redraw_compass + + set objid [ lindex [lindex $argv 0] 1] + set regid [ lindex [lindex $argv 1] 1] + set pixval [ lindex [lindex $argv 2] 1] + set bpmval [ lindex [lindex $argv 3] 1] + + wcsFmtIValue $pixval + wcsFmtBValue $bpmval + + set args [lrange $argv 4 end] + set nargs [llength $args] + for {set i 0} {$i < 4} {incr i} { + set coord [lindex $args $i] + set wcsname [lindex $coord 1] + set xval [lindex $coord 2] + set yval [lindex $coord 3] + set xunits [lindex $coord 4] + set yunits [lindex $coord 5] + wcsFmtWcs [expr ($i + 1)] $wcsname $xval $yval $xunits $yunits + } + + set cur_objid $objid + set cur_regid $regid + + if {$redraw_compass} \ + drawCompass +} + +# Save the object compass information. +proc wcspix_compass { argv } \ +{ + global Compass + + set objid [lindex $argv 0] + set angle [lindex $argv 1] + set xflip [lindex $argv 2] + set yflip [lindex $argv 3] + set transpose [lindex $argv 4] + set xlab [lindex $argv 5] + set ylab [lindex $argv 6] + + #lappend Compass($objid) $angle $xflip $yflip $transpose $xlab $ylab + set Compass($objid) [list $angle $xflip $yflip $transpose $xlab $ylab] + drawCompass +} + +# Save the image display orientation information. +proc wcspix_orient { argv } \ +{ + global Orient + + set objid [lindex $argv 0] + set frame [lindex $argv 1] + set xflip [lindex $argv 2] + set yflip [lindex $argv 3] + + set Orient($objid) [list $frame $xflip $yflip] +} + + +# Handle the list of WCSs available for the current image. +proc wcspix_wcslist { argv } \ +{ + set wcslist [lindex $argv 0] + + for {set i 1} {$i <= 4} {incr i} { + set items {} + foreach nam $wcslist { + if {[string tolower $nam] == "line"} { + lappend items "f.dblline" + } else { + lappend items "\"$nam\" f.exec \{setWcsSys $nam $i\}" + } + } + editMenu sysMenu$i sysWcs$i $items + } +} + +# Set the type of the WCS. +proc wcspix_wcstype { label num } \ +{ + global up_todo + + send sysWcs$num set label $label + if {[string tolower $label] == "none"} { + send wpWcs$num "set on False ; setSensitive False" + send wiWcs$num "set on False ; setSensitive False" + send fmtWcs$num setSensitive False + set hght 4 + } else { + send wpWcs$num "set on True ; setSensitive True" + send wiWcs$num setSensitive True + send fmtWcs$num setSensitive True + set hght 17 + } + send wtWcs$num set height $hght + setCoordPanelHeight + + #resizeCoordsBox $up_todo + updateCoordsBox +} + +# Display the pixel table. +proc wcspix_pixtab { tab col row stat } \ +{ + global psize + + # Update the pixel table. + send pixtab setList [lindex $tab 1] + send pixtab highlight [expr int(($psize * $psize) / 2)] + + # Update the table labels. + set c [ expr int($psize / 2) ] + send ptColLabs setList $col ; send ptColLabs highlight $c + send ptRowLabs setList $row ; send ptRowLabs highlight $c + + # Update the pixtab stats. + send meanValue set label [ format "%10.2f" [lindex $stat 0] ] + send sigValue set label [ format "%10.4f" [lindex $stat 1] ] +} + + diff --git a/vendor/x11iraf/ximtool/gui/load.res b/vendor/x11iraf/ximtool/gui/load.res new file mode 100644 index 00000000..6686f5c4 --- /dev/null +++ b/vendor/x11iraf/ximtool/gui/load.res @@ -0,0 +1,173 @@ + +set Resources(load_panel) { \ + + !------------------------------- + ! File Load Control Panel. + !------------------------------- + *filesLayout*borderWidth: 0 + *filesLayout*Group.shrinkToFit: True + *filesLayout*Group.frameType: chiseled + *filesLayout*Frame*frameType: sunken + *filesLayout*Frame*frameWidth: 1 + *filesLayout*TextToggle.frameWidth: 0 + *filesLayout*TextToggle.height: 28 + *filesLayout*TextToggle.alignment: left + *filesLayout*TextToggle.ledtMargin: 3 + *filesLayout*SimpleMenu.borderWidth: 1 + *filesLayout*SimpleMenu.borderColor: black + *filesLayout*SimpleMenu.foreground: White + *filesLayout*SimpleMenu.background: SteelBlue + *filesLayout*Label.borderWidth: 0 + *filesLayout*Label.shadowWidth: 0 + *filesLayout.layout: vertical { \ + imlistGroup < +inf -inf * > \ + 3 \ + horizontal { -5 imoptsGroup < +inf -inf * > -5 } \ + -1 \ + loadCmdGroup < +inf -inf * > \ + } + + *imlistGroup.label: + *imlistGroup.frameWidth: 2 + *imlistGroup.outerOffset: 2 + *imlistLayout*Label.shadowWidth: 0 + *imlistLayout*Label.justify: left + *imlistLayout*Command.width: 90 + *imlistLayout*Command.height: 23 + *imlistLayout*Command.shadowWidth: 1 + *imlistLayout*Viewport.allowVert: True + *imlistLayout*Viewport.allowHoriz True + *imlistLayout*Viewport.useRight: True + *imlistLayout*Viewport.useBottom: True + *imlistLayout*Viewport.resizeable: True + *imlistLayout*Scrollbar.height: 17 + *imlistLayout*Scrollbar.width: 17 + *imlistLayout.layout: vertical { \ + 3 \ + horizontal { \ + 3 \ + rootButton < +inf -inf * > 1 \ + homeButton < +inf -inf * > 1 \ + upButton < +inf -inf * > 1 \ + rescanButton < +inf -inf * > \ + 3 \ + imtemplateLabel 3 imtemplateFrame < +inf -inf * > \ + 3 \ + } \ + 5 \ + horizontal { 1 imlistLabel < +inf -inf * > 1 } \ + imlistFrame < +inf -inf * +inf -inf > \ + 3 \ + dirLabel < +inf -inf * > \ + 3 \ + horizontal { 5 fnameLabel 5 filnamFrame < +inf -inf * > } \ + 3 \ + } + *imtemplateLabel.label: Filter: + *imtemplateText*editType: edit + *imtemplateText*height: 23 + *imtemplateText*font: 7x13 + !*imageList.width: 100 + *imageList*height: 140 + *imageList.shadeSurplus: False + *imageList.defaultColumns: 3 + *imageList.font: 7x13 + *imlistView.resizeable: True + *imlistLabel.height: 0 + *imlistLabel.label: xxx + *imlistLabel.justify: left + *imlistLabel.font: *lucida-bold-r*10* + *upButton.label: Up + *rootButton.label: Root + *homeButton.label: Home + *rescanButton.label: Rescan + *dirLabel.label: \ \ Directory: + *dirLabel.alignment: left + *fnameLabel.label: Load File: + *fnameText*editType: edit + *fnameText.height: 22 + + *imoptsGroup.label: Options + *imoptsGroup.frameWidth: 2 + *imoptsGroup.outerOffset: 7 + *imoptsGroup*offIcon: square0s + *imoptsGroup*onIcon: square1s + *imoptsGroup*highlightColor: yellow + *imoptsLayout*Label.shadowWidth: 0 + *imoptsLayout*Label.justify: left + *imoptsLayout.layout: vertical { \ + 3 \ + horizontal { \ + 3 \ + autoload 6 grayscale \ + 3 < +inf > \ + browseHdrs \ + 3 < +inf > \ + frameLabel 2 frameFrame \ + 3 \ + } \ + 6 \ + horizontal { \ + 3 \ + zscale 6 zrange \ + 3 \ + z1Label z1Frame < +inf * > 2 \ + z2Label z2Frame < +inf * > 2 \ + nsampLabel nsampFrame < +inf * > \ + 3 \ + } \ + 3 \ + } + *grayscale.label: Auto Grayscale + *grayscale.location: 0 0 100 22 + *autoload.label: Auto Load + *autoload.location: 0 0 80 22 + *autoload.on: True + *browseHdrs.label: List Image Headers + *browseHdrs.location: 0 0 120 22 + *browseHdrs.on: False + *zscale.label: Zscale + *zscale.location: 0 0 60 22 + *zrange.label: Zrange + *zrange.location: 0 0 60 22 + *z1Label.label: z1 + *z1Value*width: 60 + *z1Value*height: 22 + *z1Value*editType: edit + *z2Label.label: z2 + *z2Value*width: 60 + *z2Value*height: 22 + *z2Value*editType: edit + *nsampLabel.label: Nsample + *nsampValue*width: 60 + *nsampValue*height: 22 + *nsampValue*editType: edit + *frameLabel.label: Frame:\ + *frameFrame.width: 50 + *frameFrame.resize: False + *frameFrame.label: Current + *frameFrame.font: 6x13 + *frameFrame.menuName: loadFrames + + + *loadCmdGroup.label: + *loadCmdGroup*frameWidth: 2 + *loadCmdGroup*outerOffset: 5 + *loadCmdGroup.outerOffset: 2 + *loadCmdGroup*innerOffset: 5 + *loadCmdGroup.frameType: sunken + *loadCmdGroup.label: + *loadCmdGroup.location: 0 0 400 45 + *loadCmdLayout*Command.internalWidth: 12 + *loadCmdLayout.layout: horizontal { \ + 2 \ + filesLoadButton \ + 1 < +inf > \ + filesStatus \ + 2 \ + } + *filesLoadButton.label: Load + *filesStatus.label: +} + + diff --git a/vendor/x11iraf/ximtool/gui/load.tcl b/vendor/x11iraf/ximtool/gui/load.tcl new file mode 100644 index 00000000..425f0226 --- /dev/null +++ b/vendor/x11iraf/ximtool/gui/load.tcl @@ -0,0 +1,247 @@ + +################################################################################ +# Image and objects list display and section +################################################################################ + +proc filesTextHighlight { widget event args } \ +{ + if { $event == "enterNotify" } { + send $widget set displayCaret True + } elseif { $event == "leaveNotify" } { + send $widget set displayCaret False + } +} +foreach w {imtemplateText fnameText z1Value z2Value} { + send $w addEventHandler filesTextHighlight enterWindowMask + send $w addEventHandler filesTextHighlight leaveWindowMask +} + +send rootButton addCallback "send client setLoadOption root" +send homeButton addCallback "send client setLoadOption home" +send upButton addCallback "send client setLoadOption up" +send rescanButton addCallback "send client setLoadOption rescan" + +set label \ + [format "%-35.35s %6s %12s %12s"\ + " Image" "Bitpix" " Size" " Title"] +send imlistLabel set label $label +send imlistLabel "set height 0 ; unmap" + + +# Create the Frames menu on the load panel window. +set loadItems { "Current f.exec \{send frameFrame set label Current\}"} +for {set i 1} {$i <= $MAX_FRAMES} {incr i} { + lappend loadItems "\"\ \ $i\ \ \" f.exec \{send frameFrame set label $i\}" +}; createMenu loadFrames frameFrame $loadItems + + + + + +# Filename pattern callback. +proc setPattern { widget mode pattern args } \ +{ + send client setLoadOption pattern $pattern +} ; send imtemplateText addCallback setPattern + + +# Load options parameter callback. +proc doLoadOptions { param old new } \ +{ + global warnings panel_up + + set val [ join [lrange $new 1 end] " " ] + + switch [lindex $new 0] { + pattern { send imtemplateText set string [format "%s" $val ] } + curdir { send dirLabel set label [format " Directory: %s" $val ] } + newfile { send fnameText set string $val } + status { send filesStatus set label $val + if { ! $panel_up } { send imageTitle set label $val } + send server synchronize + } + warning { if {$warnings} { Wexec server $val } } + gray { send grayscale set on $val } + zscale { send zscale set on $val + if {$val} { + send zrange setSensitive False + } else { + send zrange setSensitive True + } + } + zrange { send zrange set on $val + if {$val} { + foreach w {z1Label z1Value z2Label z2Value} { + send $w setSensitive False + } + } else { + foreach w {z1Label z1Value z2Label z2Value} { + send $w setSensitive True + } + } + } + z1 { send z1Value set string [format "%s" $val ] } + z2 { send z2Value set string [format "%s" $val ] } + nsample { send nsampValue set string [format "%s" $val ] } + } +} ; send loadOptions addCallback doLoadOptions + +# Option utility routines. +proc toggleGraymap args \ +{ + send client setLoadOption gray [ send grayscale get on ] +} ; send grayscale addCallback toggleGraymap + +proc toggleHeaders args \ +{ + if { [send browseHdrs get on] } { + send client setLoadOption headers + send rootButton setSensitive False + send homeButton setSensitive False + send upButton setSensitive False + send rescanButton setSensitive False + send imlistLabel "set height 10 ; map" + } else { + send client setLoadOption rescan + send rootButton setSensitive True + send homeButton setSensitive True + send upButton setSensitive True + send rescanButton setSensitive True + send imlistLabel "set height 0 ; unmap" + } +} ; send browseHdrs addCallback toggleHeaders + +proc toggleZscale args \ +{ + send client setLoadOption zscale [send zscale get on] +} ; send zscale addCallback toggleZscale + +proc toggleZrange args \ +{ + send client setLoadOption zrange [send zrange get on] +} ; send zrange addCallback toggleZrange + +proc setZ1 { widget mode pattern args } \ +{ + send client setLoadOption z1 $pattern +} ; send z1Value addCallback setZ1 + +proc setZ2 { widget mode pattern args } \ +{ + send client setLoadOption z2 $pattern +} ; send z2Value addCallback setZ2 + +proc setNsamp { widget mode pattern args } \ +{ + send client setLoadOption nsample $pattern +} ; send nsampValue addCallback setNsamp + +proc fileLoad { widget mode fname args } \ +{ + loadImage $fname +} ; send fnameText addCallback fileLoad + + + +# Image list selection routines. + +set fileList {} + +proc setFileList { param old new } \ +{ + global fileList + set fileList $new + + # Get the max length of the strings so we can set + # the list columns appropriately. + set max 0 + foreach n $new { + set len [string length $n] + if {$len > $max} { set max $len } + } + + # Optimize the number of columns for the file list. + if {$max > 35} { + send imageList set defaultColumns 1 + } elseif {$max > 21} { + send imageList set defaultColumns 2 + } elseif {$max > 12} { + send imageList set defaultColumns 3 + } elseif {$max > 5} { + send imageList set defaultColumns 4 + } else { + send imageList set defaultColumns 5 + } + + send imageList setList $new resize +}; send filelist addCallback setFileList + +proc flResize args \ +{ + global fileList + send imageList setList $fileList resize +}; send imageList addEventHandler flResize ResizeRedirectMask + +proc flSelectPrint { widget cbtype selections args } \ +{ + if {! [send autoload get on]} \ + return + + foreach selection $selections { + if { [send zrange get on] } { + loadImage [lindex $selection 0] + } else { + loadImage $selection + } + } +}; send imageList addCallback flSelectPrint + + +# Load the named image in the display. +proc loadImage { name } \ +{ + global frame + + set fr [send frameFrame get label] + + if { $fr == "Current" } { set fr $frame } + + if { [fileSetOptions] >= 0 } { + send imagewin setCursorType busy + send client load $name $fr + send imagewin setCursorType idle + send fnameText set string $name + } +} + +# Load button callback. +proc fileLoadB args \ +{ + set fname [send fnameText get string] + if {$fname == ""} { + Wexec client "No image name specified" + } else { + loadImage $fname + } +} ; send filesLoadButton addCallback fileLoadB + + +# Send and selected options to the client before loading the image. +proc fileSetOptions args \ +{ + if { ![send zscale get on] && ![send zrange get on] } { + set z1 [send z1Value get string] + set z2 [send z2Value get string] + + if {$z1 == $z2} { + Wexec client "z1/z2 values are not set properly" + return -1 + } else { + send client setLoadOption z1 $z1 + send client setLoadOption z2 $z2 + } + } + + return 0 +} + diff --git a/vendor/x11iraf/ximtool/gui/magnifier.tcl b/vendor/x11iraf/ximtool/gui/magnifier.tcl new file mode 100644 index 00000000..beb57e2b --- /dev/null +++ b/vendor/x11iraf/ximtool/gui/magnifier.tcl @@ -0,0 +1,577 @@ + +################################################################################ +# MAGNIFIER. A subraster around the cursor in the main image window is +# displayed at a high resolution in a marker (known as the magnifier window) +# within the main image window. +################################################################################ + +set magnifier_x 0 +set magnifier_y 0 +set magnifier_width 0 +set magnifier_height 0 +set mrm_width 0 +set mrm_height 0 + +set magnifier_enable 0 +set magnifier_mag_enable 0 +set magnifier_mapping 0 + +createMenu magzoomMenu imagewin { + { "Zoom Factors" f.title } + { f.dblline } + { "Zoom 1" f.exec "setMagnifierZoom 1" } + { "Zoom 2" f.exec "setMagnifierZoom 2" } + { "Zoom 4" f.exec "setMagnifierZoom 4" } + { "Zoom 8" f.exec "setMagnifierZoom 8" } + { "Zoom 16" f.exec "setMagnifierZoom 16" } +} + +# Magnifier window translations. +set magnifierWinTranslations { \ + !Shift : m_rotateResize() + : m_moveResize() + !Shift : m_raise() m_markpos() + : m_raise() m_markposAdd() + : m_redraw() m_destroyNull() + : m_lower() + : popup(magzoomMenu) + : popdown(magzoomMenu) + !Ctrl m: call(toggleMagnifier) + !Ctrl p: call(togglePanner) + BackSpace: m_deleteDestroy() + Delete: m_deleteDestroy() + : graphics-input() + : track-cursor() call(wcsUpdate,$x,$y) +} + + +# setMagnifier -- Turn the magnifier on or off. + +set magAlreadyOn 0 + +proc setDynamicMagnifier {state} \ +{ + global magAlreadyOn magnifier_enable + + if {$state} { + set magAlreadyOn $magnifier_enable + } + if {$magAlreadyOn} { + return + } else { + setMagnifier $state + } +} + +proc toggleMagnifier args \ +{ + global magnifier_enable + if {$magnifier_enable} { + setMagnifier 0 + } else { + setMagnifier 1 + } +} + + +proc setMagnifier {state} \ +{ + global winWidth winHeight frameWidth frameHeight + global frame magnifier_mapping magnifierWinTranslations magnifierArea + global magnifier_enable magnifier_height + global magnifierGeom magnifier_x magnifier_y magnifier_width + + if {$state} { + if {$magnifier_enable} \ + return + + # Determine where to place the magnifier. + set scale [expr sqrt(double($magnifierArea) / (512 * 512))] + set scaled_width [expr int(512 * $scale) / 2 * 2 + 1] + set scaled_height [expr int(512 * $scale) / 2 * 2 + 1] + set defGeom [format "%sx%s-5+5" $scaled_width $scaled_height] + send imagewin parseGeometry $magnifierGeom $defGeom x y width height + + # Create the main magnifier window (marker). + send imagewin createMarker magnifierWin \ + type rectangle \ + createMode noninteractive \ + width [expr $width / 2] \ + height [expr $height / 2] \ + x [expr $x + $width / 2] \ + y [expr $y + $height / 2] \ + lineColor 8 \ + highlightColor 8 \ + translations $magnifierWinTranslations \ + visible true \ + sensitive true \ + activated true + + # Update the magnifier window position variables so that it comes up + # in the same place the next time. + + send magnifierWin getRect boundary \ + magnifier_x magnifier_y magnifier_width magnifier_height + set magnifierGeom [send imagewin getGeometry \ + $magnifier_x $magnifier_y $magnifier_width $magnifier_height] + + # Register callbacks. + send imagewin addCallback magnifierImagewinResized resize + send resize addCallback magnifierImagewinResized + send magnifierWin addCallback magnifierMovedMapImage moveResize + + send magnifierWin { + addCallback magnifierMoved moveResize; + addCallback magnifierDestroy destroy; + addCallback magnifierWinConstraint constraint; + } + + # Map display frame to magnifier window. + set magnifier_enable 1 + set magnifier_mapping [send imagewin nextMapping] + send imagewin refreshMapping $magnifier_mapping + + # create cross-hair + send imagewin createMarker magPointer \ + type rectangle \ + createMode noninteractive \ + width 3 \ + height 3 \ + lineWidth 3 \ + lineColor green \ + highlightcolor green \ + activated true \ + visible true + + # set its position and size + setMagPointerPosition + magnifierMapImage [expr $winWidth / 2] [expr $winHeight / 2] + + } elseif {$magnifier_enable} { + magnifierDestroy + } +} + + +# magnifierDestroy -- Delete the magnifier. + +proc magnifierDestroy args \ +{ + global magnifier_enable + global magnifier_mapping + + if {$magnifier_enable} { + set magnifier_enable 0 + + send imagewin freeMapping $magnifier_mapping + send imagewin deleteCallback magnifierImagewinResized + send resize deleteCallback magnifierImagewinResized + send frame deleteCallback magnifierMapImage + + if [send server queryObject magnifierWin] { + send magnifierWin destroy + } + if [send server queryObject magPointer] { + send magPointer destroy + } + } +} + + +# magnifierMoved -- Called when the user moves the magnifier window. We need to +# move the region marker to the new window location and record the new location +# so that the window will come up in the same place if closed and reopened. + +proc magnifierMoved {marker event position} \ +{ + global winWidth winHeight magnifierGeom frame + global magnifier_x magnifier_y magnifier_width magnifier_height + + # Move the region marker to the new location. + send client getSource raster sx sy snx sny + + # Update the magnifier window position variables so that it comes up + # in the same place the next time. + + send magnifierWin getRect boundary \ + magnifier_x magnifier_y magnifier_width magnifier_height + set magnifierGeom [send imagewin getGeometry \ + $magnifier_x $magnifier_y $magnifier_width $magnifier_height] +} + + +# magnifierWinConstraint -- Called when the magnifier window is moved, resized, +# or rotated. Constrain the magnifier window to remain within the image window; +# rotation is not permitted. + +proc magnifierWinConstraint {marker event attributes} \ +{ + global winWidth winHeight + global magnifier_width magnifier_height + + set width $magnifier_width + set height $magnifier_height + set constraints [list {}] + + # Check the width and height first as we need these below. + foreach i $attributes { + set new [lindex $i 2] + switch [lindex $i 0] { + width { set ww [expr $winWidth / 2] + if {$new > $ww} { + lappend constraints "width $ww" + set width $ww + } else { + set width $new + } + } + height { set wh [expr $winHeight / 2] + if {$new > $wh} { + lappend constraints "height $wh" + set height $wh + } else { + set height $new + } + } + rotangle { lappend constraints "rotangle 0" + } + } + } + + # Constrain X and Y. + foreach i $attributes { + set new [lindex $i 2] + switch [lindex $i 0] { + x { set pw [expr $width / 2] + if {$new < $pw} { + lappend constraints "x $pw" + } elseif {$new > $winWidth - $pw} { + lappend constraints "x [expr $winWidth - $pw]" + } + } + y { set ph [expr $height / 2] + if {$new < $ph} { + lappend constraints "y $ph" + } elseif {$new > $winHeight - $ph} { + lappend constraints "y [expr $winHeight - $ph]" + } + } + } + } + + return $constraints +} + + +# magnifierRegionConstraint -- Called when the region marker in the magnifier +# window is moved, resized, or rotated. + +proc magnifierRegionConstraint {marker event attributes} \ +{ + global winWidth winHeight + + set constraints [list {}] + send magnifierWin getRect interior p_x p_y p_width p_height + + # Since the magnifier region marker is a box marker x,y and width,height + # will not both change in the same call, so we can process them all + # independently. + + foreach i $attributes { + set new [lindex $i 2] + + switch [lindex $i 0] { + x { set left [expr $p_x + $rwidth + 1] + set right [expr $p_x + $p_width - $rwidth - 1] + if {$new < $left} { + lappend constraints "x $left" + } elseif {$new > $right} { + lappend constraints "x $right" + } + } + y { set top [expr $p_y + $rheight + 1] + set bottom [expr $p_y + $p_height - $rheight - 1] + if {$new < $top} { + lappend constraints "y $top" + } elseif {$new > $bottom} { + lappend constraints "y $bottom" + } + } + width { set ww [expr $winWidth / 2] + if {$new > $ww / 2} { + lappend constraints "width $ww" + } + } + height { set wh [expr $winHeight / 2] + if {$new > $wh / 2} { + lappend constraints "height $wh" + } + } + rotangle { lappend constraints "rotangle 0" + } + } + } + + return $constraints +} + + +# magnifierImagewinResized -- If the display window is resized make the +# magnifier track the corner. + +proc magnifierImagewinResized args \ +{ + global magnifier_enable magnifier_mapping magnifier_height + global magnifierGeom magnifier_x magnifier_y magnifier_width + + if {$magnifier_enable} { + set old_x $magnifier_x; set old_width $magnifier_width + set old_y $magnifier_y; set old_height $magnifier_height + + # Get new location of magnifier window. + set defGeom [format "%sx%s+5+5" $magnifier_width $magnifier_height] + send imagewin parseGeometry $magnifierGeom $defGeom x y width height + + # Reposition the marker. + send magnifierWin "\ + markpos; \ + setAttributes \ + x [expr $x + $width / 2] \ + y [expr $y + $height / 2] \ + width [expr $width / 2] \ + height [expr $height / 2]; \ + redraw" + + # Update the magnifier window position variables so that it comes up + # in the same place the next time. + send magnifierWin getRect boundary \ + magnifier_x magnifier_y magnifier_width magnifier_height + set magnifierGeom [send imagewin getGeometry \ + $magnifier_x $magnifier_y $magnifier_width $magnifier_height] + + # Make sure the magnifier window is on top. + send imagewin raiseMapping $magnifier_mapping + + # Refresh the magnifier window if it did not move. + if {$magnifier_x == $old_x && $magnifier_y == $old_y && + $magnifier_width == $old_width && $magnifier_height == $old_height} { + send imagewin refreshMapping $magnifier_mapping + } + } +} + + +# resetMagnifier -- Reinitialize the magnifier. + +proc resetMagnifier {param old new} \ +{ + global magnifierGeom displayMagnifier + + if {$new == "done"} { + setMagnifier [true $displayMagnifier] + } else { + setMagnifier 0 + if {$new != "startup"} { + set magnifierGeom +5+5 + } + } +}; send initialize addCallback resetMagnifier + + +set last_mag_x [expr $winWidth / 2] +set last_mag_y [expr $winHeight / 2] + +# magnifierMovedMapImage -- Front end to magnifierMapImage, called when +# magnifier window is moved or resized. + +proc magnifierMovedMapImage args \ +{ + global last_mag_x last_mag_y + + magnifierMapImage $last_mag_x $last_mag_y + setMagPointerPosition +} + +# The following code was borrowed from the SAOtng GUI by Eric Mandel of SAO +#-------------------------------------------------------------------------- + +# globals for magnifier +set mag_w 0 +set mag_h 0 + +# +# setMagnifierZoom -- set the zoom factor for the magnifier +# +proc setMagnifierZoom { zoom } \ +{ + global mag_w mag_h + + send magnifierWin getRect boundary \ + magnifier_x magnifier_y magnifier_width magnifier_height + set mag_w [expr int( ( $magnifier_width + $zoom - 1 ) / $zoom) ] + set mag_h [expr int( ( $magnifier_height + $zoom - 1 ) / $zoom) ] + + #set mw [expr int (($magnifier_width - 1) / ($mag_w * 2))] + #if { $mw < 4 } { set mw 4 } + #set mh [expr int (($magnifier_height - 1) / ($mag_h * 2))] + #if { $mh < 4 } { set mh 4 } + #send magPointer "setAttributes width $mw height $mh; redraw" +} + +# magnifierMapImage -- Map the of the current display frame centered on the +# pointer into the magnifier window. Called when the frame changes, the +# pointer moves in the main image window, or (via magnifierMovedMapImage) +# the magnifier window is moved or resized. + +set magnifierROP 0 + +proc magnifierMapImage {x y} \ +{ + global magnifier_enable frame + global last_mag_x last_mag_y + global magnifier_mapping + global winWidth winHeight + global mag_w mag_h + global magnifierROP + + if {!$magnifier_enable || $frame == 0} \ + return + +# if {abs($last_mag_x-$x) != 1 && abs($last_mag_y-$y) != 1} { +# # For efficiency we won't compute the sqrt of the distance but instead +# # just compare the square. Use a threshold of 6 pixels so when we +# # narrow in on the ROI the magnifier is still (mostly) correct. +# set diff [expr (($last_mag_x-$x) * ($last_mag_x-$x)) + \ +# (($last_mag_y-$y) * ($last_mag_y-$y))] +# if {$diff > 36} { +# set last_mag_x $x +# set last_mag_y $y +# return +# } +# } + + set last_mag_x $x + set last_mag_y $y + + send magnifierWin getRect interior dx dy dnx dny + if [send imagewin activeMapping $magnifier_mapping] { + send imagewin raiseMapping $magnifier_mapping + } + + # initialize the magnifier zoom factor, if necessary + if { !$mag_w || !$mag_h } { + setMagnifierZoom 4 + } + + set sx [expr $x - $mag_w / 2 ] + set sy [expr $y - $mag_h / 2 ] + + # Constrain the source rectangle within the main image window + # (not overlapping an edge or the magnifier window). + + if {$sx > [expr $dx - $mag_w] && $sx < [expr $dx + $dnx] && + $sy > [expr $dy - $mag_h] && $sy < [expr $dy + $dny] } { + + # The source rectangle would overlap the magnifier window; fix that. + + set dist(l) [expr $sx - ($dx - $mag_w)] + set dist(b) [expr $dy + $dny - $sy] + set dist(r) [expr $dx + $dnx - $sx] + set dist(t) [expr $sy - ($dy - $mag_h)] + + # Put the distances in order. + + foreach j [array names dist] { + set alreadyset($j) 0 + } + + for {set i 0} {$i < 4} {incr i} { + set candidate "" + foreach j [array names dist] { + if {!$alreadyset($j)} { + if {$candidate == ""} { + set candidate $j + set minsofar $dist($j) + } elseif {$dist($j) < $minsofar} { + set candidate $j + set minsofar $dist($j) + } + } + } + set order($i) $candidate + set alreadyset($candidate) 1 + } + + # Try the sides in order, using the first one where there's room. + + for {set i 0} {$i < 4} {incr i} { + if {$order($i) == "l"} { + if {$dx >= $mag_w} { + set sx [expr $dx - $mag_w] + break + } + } elseif {$order($i) == "b"} { + if {$winHeight >= $dy + $dny + $mag_h} { + set sy [expr $dy + $dny] + break + } + } elseif {$order($i) == "r"} { + if {$winWidth >= $dx + $dnx + $mag_w} { + set sx [expr $dx + $dnx] + break + } + } elseif {$order($i) == "t"} { + if {$dy >= $mag_h} { + set sy [expr $dy - $mag_h] + break + } + } + } + } + + # Make sure we don't go beyond an edge of the main window. + + if {$sx < 0} { + set sx 0 + } else { + set sxmax [expr $winWidth - $mag_w] + if {$sx > $sxmax} { + set sx $sxmax + } + } + + if {$sy < 0} { + set sy 0 + } else { + set symax [expr $winHeight - $mag_h] + if {$sy > $symax} { + set sy $symax + } + } + + # Map 32 x 32 centered on pointer in main window. + set err [catch {send imagewin setMapping $magnifier_mapping $magnifierROP \ + 0 pixel $sx $sy $mag_w $mag_h \ + 0 pixel $dx $dy $dnx $dny}] + if { $err != 0 } { + Print "There was a problem setting up the magnifier ... recovering" + } +} + + +# set the position of the magnifier marker in the center of the mag window +proc setMagPointerPosition args \ +{ + global magnifier_enable + + if { !$magnifier_enable } \ + return + + send magnifierWin "getAttributes x x y y" + set xpos [expr $x + 1] + set ypos [expr $y + 1] + + send magPointer "setAttributes x $xpos y $ypos visible true; redraw" +} + + diff --git a/vendor/x11iraf/ximtool/gui/main-old.obj b/vendor/x11iraf/ximtool/gui/main-old.obj new file mode 100644 index 00000000..a3af5486 --- /dev/null +++ b/vendor/x11iraf/ximtool/gui/main-old.obj @@ -0,0 +1,52 @@ +#!/usr/local/bin/obmsh +# +# XIMTOOL.GUI -- Default GUI for the Ximtool image display server. +# +# Version 2.0 -- BETA VERSION + + +set Version "NOAO/IRAF XImtool Version 2.0BETA" + + +reset-server + +set Objects(ximtool) { \ + toplevel Layout display \ +\ + display Group menuGroup\ + menuGroup Layout menubar\ + menubar MenuButton fileButton \ + menubar MenuButton viewButton \ + menubar MenuButton optionsButton \ + menubar Label imageTitle \ + menubar Toggle controlButton \ + menubar Toggle xflipButton \ + menubar Toggle yflipButton \ + menubar Command prevButton \ + menubar MenuButton frameButton \ + menubar Command nextButton \ + menubar Toggle helpButton \ +\ + display Frame imageFrame\ + imageFrame Gterm imagewin\ + display Frame cbarFrame\ + cbarFrame Gterm colorbar\ + display Toggle hcut\ + display Toggle vcut\ + display Frame hcutFrame\ + hcutFrame Gterm hcutPlot\ + display Frame vcutFrame\ + vcutFrame Gterm vcutPlot\ + display Slider2d focusSlider\ +\ + display Group plotOpts\ + plotOpts Layout poptsLayout\ + poptsLayout TextToggle plotSpeed\ + poptsLayout TextToggle plotAccurate\ + poptsLayout TextToggle plotImgPix\ + poptsLayout Frame optLine\ + poptsLayout TextToggle curJump\ + poptsLayout TextToggle curSmooth\ + poptsLayout TextToggle curTrack\ +} + diff --git a/vendor/x11iraf/ximtool/gui/main-old.res b/vendor/x11iraf/ximtool/gui/main-old.res new file mode 100644 index 00000000..02a9b19e --- /dev/null +++ b/vendor/x11iraf/ximtool/gui/main-old.res @@ -0,0 +1,422 @@ + + +set Resources(ximtool) { \ + + ! Main image window resources. + ! ------------------------------- + *allowShellResize: True + *beNiceToColormap: False + *menuLabel.foreground: Gold + *markerMenu.foreground: Black + *markerMenu.background: SteelBlue + *markerMenu*SimpleMenu.foreground: Black + *markerMenu*SimpleMenu.background: SteelBlue + *rulerMenu.foreground: Black + *rulerMenu.background: SteelBlue + *rulerMenu*SimpleMenu.foreground: Black + *rulerMenu*SimpleMenu.background: SteelBlue + *rulerMenu.SmeBSB.leftMargin: 16 + *magzoomMenu.foreground: Black + *magzoomMenu.background: SteelBlue + *magzoomMenu*SimpleMenu.foreground: Black + *magzoomMenu*SimpleMenu.background: SteelBlue + *markerColor.SmeBSB.leftMargin: 64 + *markerColor.SmeBSB.rightMargin: 0 + *markerColor.menuLabel.leftMargin: 5 + *markerColor.menuLabel.rightMargin: 5 + *rulerColor.SmeBSB.leftMargin: 64 + *rulerColor.SmeBSB.rightMargin: 0 + *rulerColor.menuLabel.leftMargin: 5 + *rulerColor.menuLabel.rightMargin: 5 + + *ximtool.title: XIMTOOL_VERSION + + *display.borderWidth: 0 + *display.layout: horizontal { \ + -0 \ + vertical { \ + menuGroup < +inf -inf * > \ + -2 \ + vertical { \ + horizontal { \ + imageFrame < +inf -inf * +inf -inf > \ + vcutFrame < * +inf -inf > \ + } \ + horizontal { \ + hcutFrame < +inf -inf * > 1 \ + vertical { 4 plotOpts -4 } \ + } \ + horizontal { \ + cbarFrame < +inf -inf * > \ + focusSlider 2 hcut 2 vcut 15 \ + } \ + } \ + } \ + -0 \ + } + *hcut.label: H + *hcut.font: *lucida-bold-r*10* + *vcut.label: V + *vcut.font: *lucida-bold-r*10* + *focusSlider.location: 0 0 100 15 + + *hcutFrame.frameType: sunken + *hcutFrame.frameWidth: 1 + *hcutFrame.innerOffset: 0 + *hcutFrame.outerOffset: 0 + *hcutPlot.color0: #c4c4c4 + *hcutPlot.color1: black + *hcutPlot.color0: darkslategray + *hcutPlot.color1: #eeeee0 + *hcutPlot.crosshairCursorColor: red + *hcutPlot.width: 512 + *hcutPlot.height: 6 + *hcutPlot.borderWidth: 0 + *hcutPlot.alphaFont1: 6x10 + *hcutPlot.alphaFont2: 6x10 + *hcutPlot.alphaFont3: 6x10 + *hcutPlot.alphaFont4: 6x10 + *hcutPlot.alphaFont5: 6x10 + *hcutPlot.alphaFont6: 6x10 + *hcutPlot.alphaFont7: 6x10 + *hcutPlot.alphaFont8: 6x10 + *hcutPlot.translations: \ + !Ctrl 1: call(cpZoom,1,1,fixed) \n\ + !Ctrl 2: call(cpZoom,2,2,fixed) \n\ + !Ctrl 3: call(cpZoom,3,3,fixed) \n\ + !Ctrl 4: call(cpZoom,4,4,fixed) \n\ + !Ctrl 5: call(cpZoom,5,5,fixed) \n\ + !Ctrl 6: call(cpZoom,6,6,fixed) \n\ + !Ctrl 7: call(cpZoom,7,7,fixed) \n\ + !Ctrl 8: call(cpZoom,8,8,fixed) \n\ + !Ctrl 9: call(cpZoom,9,9,fixed) \n\ + !Ctrl b: call(prevFrame,$name) \n\ + !Ctrl f: call(nextFrame,$name) \n\ + !Ctrl i: call(cpInvert) \n\ + !Ctrl m: call(toggleMagnifier) \n\ + !Ctrl n: call(normalize) \n\ + !Ctrl p: call(togglePanner) \n\ + !Ctrl Alt q: call(Quit) \n\ + !Ctrl r: call(cpRegisterFrames) \n\ + !Ctrl s: call(cpMatchFrames) \n\ + !Ctrl u: call(cpZoom,1,1,fixed) \n\ + Ctrl +: call(cpZoom,2.0,2.0,relative) \n\ + Ctrl -: call(cpZoom,0.5,0.5,relative) \n\ + Ctrl \<: call(cpSetBlinkRate,BRdecrease) \n\ + Ctrl \>: call(cpSetBlinkRate,BRincrease) \n\ + !Alt b: call(toggleBlink) \n\ + !Alt c: call(controlPanel) \n\ + !Alt h: call(Help) \n\ + !Alt i: call(infoPanel) \n\ + !Ctrl Alt f: call(fitFrame) \n\ + !Alt l: call(loadPanel) \n\ + !Alt p: call(printPanel) \n\ + !Alt s: call(savePanel) \n\ + !Alt t: call(tclPanel) \n\ + !: call(makeMarker,$name,$x,$y) m_create() \n\ + : enter-window() \n\ + : leave-window() \n\ + : graphics-input() \n\ + !Alt : call(curtrack_msg,$x,$y) \n\ + : track-cursor() call(hcutWCSUpdate,$x,$y) + + + *vcutFrame.frameType: sunken + *vcutFrame.frameWidth: 1 + *vcutFrame.innerOffset: 0 + *vcutFrame.outerOffset: 0 + *vcutPlot.color0: #c4c4c4 + *vcutPlot.color1: black + *vcutPlot.color0: darkslategray + *vcutPlot.color1: #eeeee0 + *vcutPlot.crosshairCursorColor: red + *vcutPlot.width: 6 + *vcutPlot.height: 512 + *vcutPlot.borderWidth: 0 + *vcutPlot.alphaFont1: 6x10 + *vcutPlot.alphaFont2: 6x10 + *vcutPlot.alphaFont3: 6x10 + *vcutPlot.alphaFont4: 6x10 + *vcutPlot.alphaFont5: 6x10 + *vcutPlot.alphaFont6: 6x10 + *vcutPlot.alphaFont7: 6x10 + *vcutPlot.alphaFont8: 6x10 + *vcutPlot.translations: \ + !Ctrl 1: call(cpZoom,1,1,fixed) \n\ + !Ctrl 2: call(cpZoom,2,2,fixed) \n\ + !Ctrl 3: call(cpZoom,3,3,fixed) \n\ + !Ctrl 4: call(cpZoom,4,4,fixed) \n\ + !Ctrl 5: call(cpZoom,5,5,fixed) \n\ + !Ctrl 6: call(cpZoom,6,6,fixed) \n\ + !Ctrl 7: call(cpZoom,7,7,fixed) \n\ + !Ctrl 8: call(cpZoom,8,8,fixed) \n\ + !Ctrl 9: call(cpZoom,9,9,fixed) \n\ + !Ctrl b: call(prevFrame,$name) \n\ + !Ctrl f: call(nextFrame,$name) \n\ + !Ctrl i: call(cpInvert) \n\ + !Ctrl m: call(toggleMagnifier) \n\ + !Ctrl n: call(normalize) \n\ + !Ctrl p: call(togglePanner) \n\ + !Ctrl Alt q: call(Quit) \n\ + !Ctrl r: call(cpRegisterFrames) \n\ + !Ctrl s: call(cpMatchFrames) \n\ + !Ctrl u: call(cpZoom,1,1,fixed) \n\ + Ctrl +: call(cpZoom,2.0,2.0,relative) \n\ + Ctrl -: call(cpZoom,0.5,0.5,relative) \n\ + Ctrl \<: call(cpSetBlinkRate,BRdecrease) \n\ + Ctrl \>: call(cpSetBlinkRate,BRincrease) \n\ + !Alt b: call(toggleBlink) \n\ + !Alt c: call(controlPanel) \n\ + !Alt h: call(Help) \n\ + !Alt i: call(infoPanel) \n\ + !Ctrl Alt f: call(fitFrame) \n\ + !Alt l: call(loadPanel) \n\ + !Alt p: call(printPanel) \n\ + !Alt s: call(savePanel) \n\ + !Alt t: call(tclPanel) \n\ + !: call(makeMarker,$name,$x,$y) m_create() \n\ + : enter-window() \n\ + : leave-window() \n\ + : graphics-input() \n\ + !Alt : call(curtrack_msg,$x,$y) \n\ + : track-cursor() call(vcutWCSUpdate,$x,$y) + + + *plotOpts.label: Options + !*plotOpts*location: 0 0 105 18 + *plotOpts*location: 0 0 1 18 + *plotOpts.shrinkToFit: True + *plotOpts.outerOffset: 5 + *plotOpts.innerOffset: 3 + *plotOpts.frameWidth: 2 + *plotOpts*TextToggle.offIcon: square0s + *plotOpts*TextToggle.onIcon: square1s + *plotOpts*TextToggle.highlightColor: yellow + *plotOpts*TextToggle.outerOffset: 0 + *plotOpts*TextToggle.frameWidth: 0 + *plotOpts*TextToggle.selectionStyle: multi + *plotOpts*TextToggle.leftMargin: 3 + *plotOpts*TextToggle.alignment: left + + *poptsLayout.borderWidth: 0 + *poptsLayout.layout: vertical { \ + -1 \ + plotSpeed plotAccurate plotImgPix \ + 2 < -2 > \ + horizontal { -4 optLine < +inf -inf * > -4 } \ + 2 < -2 > \ + curJump curSmooth curTrack \ + -1 \ + } + *plotSpeed.label: Better Speed + *plotSpeed.on: True + *plotAccurate.label: Better Accuracy + *plotAccurate.on: False + *plotImgPix.label: Image Pixels + *plotImgPix.on: False + *plotImgPix.sensitive: False + *optLine.height: 2 + *optLine.width: 120 + *optLine.outerOffset: 0 + *optLine.innerOffset: 0 + *optLine.frameWidth: 2 + *optLine.frameType: chiseled + *curJump.label: Jump Cursor + *curJump.on: True + *curSmooth.label: Smooth Cursor + *curSmooth.on: False + *curTrack.label: Graphics Cursors + *curTrack.on: True + + + *menuGroup.label: + *menuGroup.height: 40 + *menuGroup.width: 518 + *menuGroup.frameType: raised + *menuGroup.frameWidth: 2 + *menubar.layout: horizontal { \ + 1 < -1 > \ + fileButton 1 < -1 > viewButton 1 < -1 > optionsButton \ + 1 < -1 > \ + imageTitle < +inff -inff * > \ + 1 < -1 > \ + controlButton 1 < -1 > \ + 1 < -1 > \ + xflipButton 1 < -1 > yflipButton \ + 1 < -1 > \ + prevButton 1 < -1 > frameButton 1 < -1 > nextButton \ + 1 < -1 > \ + helpButton \ + 1 < -1 > \ + } + + *menubar*SimpleMenu.borderColor: Black + *menubar*SimpleMenu.borderWidth: 1 + *menubar*SimpleMenu.foreground: white + *menubar*SimpleMenu.background: SteelBlue + *SmeBSB.vertSpace: 10 + + *SimpleMenu*font: -adobe-times-bold-r-normal-*-12-*-*-*-*-*-iso8859-1 + *fileButton.font: -adobe-times-bold-i-normal-*-12-*-*-*-*-*-iso8859-1 + *optionsButton.font: -adobe-times-bold-i-normal-*-12-*-*-*-*-*-iso8859-1 + *viewButton.font: -adobe-times-bold-i-normal-*-12-*-*-*-*-*-iso8859-1 + + *menubar.width: 518 + *menubar*borderWidth: 0 + *menubar*Command.label: x + *menubar*Command.internalWidth: 0 + *menubar*Command.borderWidth: 0 + *menubar*Toggle.label: x + *menubar*Toggle.internalWidth: 0 + *menubar*Toggle.borderWidth: 0 + + *fileButton.label: File + *fileButton.menuName: fileMenu + *viewButton.label: View + *viewButton.menuName: viewMenu + *optionsButton.label: Options + *optionsButton.menuName: optionsMenu + *imageTitle*font: *times-bold-r*12* + *imageTitle.width: 40 + *imageTitle.height: 20 + *frameButton.menuName: frameMenu + *frameButton.label: 1 + *frameButton.width: 20 + + *Gterm.cmapName: image + *Gterm.basePixel: 64 + *imageFrame.frameType: sunken + *imageFrame.frameWidth: 1 + *imageFrame.outerOffset: 0 + *imageFrame.innerOffset: 0 + *imageFrame.width: 518 + *imageFrame.height: 518 + *cbarFrame.frameType: sunken + *cbarFrame.frameWidth: 1 + *cbarFrame.outerOffset: 0 + *cbarFrame.innerOffset: 0 + *cbarFrame.width: 518 + *imagewin.warpCursor: true + *imagewin.raiseWindow: true + *imagewin.deiconifyWindow: true + *imagewin.ginmodeCursor: circle + *imagewin.ginmodeBlinkInterval: 500 + *imagewin.resizable: true + *imagewin.copyOnResize: false + *imagewin.width: 512 + *imagewin.height: 512 + *imagewin.maxMappings: 64 + *imagewin.borderWidth: 0 + + *imagewin.translations: \ + NoneLeft: call(move_cursor,-1,0) \n\ + NoneDown: call(move_cursor,0,1) \n\ + NoneUp: call(move_cursor,0,-1) \n\ + NoneRight: call(move_cursor,1,0) \n\ + !Shift Left: call(move_cursor,-10,0) \n\ + !Shift Down: call(move_cursor,0,10) \n\ + !Shift Up: call(move_cursor,0,-10) \n\ + !Shift Right: call(move_cursor,10,0) \n\ + !Ctrl h: call(move_cursor,-1,0) \n\ + !Ctrl j: call(move_cursor,0,1) \n\ + !Ctrl k: call(move_cursor,0,-1) \n\ + !Ctrl l: call(move_cursor,1,0) \n\ + !Ctrl Shift h: call(move_cursor,-10,0) \n\ + !Ctrl Shift j: call(move_cursor,0,10) \n\ + !Ctrl Shift k: call(move_cursor,0,-10) \n\ + !Ctrl Shift l: call(move_cursor,10,0) \n\ + !Alt 1: call(cpSetFrame,frame1) \n\ + !Alt 2: call(cpSetFrame,frame2) \n\ + !Alt 3: call(cpSetFrame,frame3) \n\ + !Alt 4: call(cpSetFrame,frame4) \n\ + !Ctrl 1: call(cpZoom,1,1,fixed) \n\ + !Ctrl 2: call(cpZoom,2,2,fixed) \n\ + !Ctrl 3: call(cpZoom,3,3,fixed) \n\ + !Ctrl 4: call(cpZoom,4,4,fixed) \n\ + !Ctrl 5: call(cpZoom,5,5,fixed) \n\ + !Ctrl 6: call(cpZoom,6,6,fixed) \n\ + !Ctrl 7: call(cpZoom,7,7,fixed) \n\ + !Ctrl 8: call(cpZoom,8,8,fixed) \n\ + !Ctrl 9: call(cpZoom,9,9,fixed) \n\ + !Ctrl Left: call(moveFrame,-1,0) \n\ + !Ctrl Down: call(moveFrame,0,1) \n\ + !Ctrl Up: call(moveFrame,0,-1) \n\ + !Ctrl Right: call(moveFrame,1,0) \n\ + !Ctrl Alt Left: call(moveFrame,-0.5,0) \n\ + !Ctrl Alt Down: call(moveFrame,0,0.5) \n\ + !Ctrl Alt Up: call(moveFrame,0,-0.5) \n\ + !Ctrl Alt Right: call(moveFrame,0.5,0) \n\ + !Ctrl a: call(toggleAutoReg) \n\ + !Ctrl b: call(prevFrame,$name) \n\ + !Ctrl c: call(cpZoomAction,centerFrame) \n\ + !Ctrl f: call(nextFrame,$name) \n\ + !Ctrl i: call(cpInvert) \n\ + !Ctrl m: call(toggleMagnifier) \n\ + !Ctrl n: call(normalize) \n\ + !Ctrl o: call(offset,$x,$y) \n\ + !Ctrl p: call(togglePanner) \n\ + !Ctrl Alt q: call(Quit) \n\ + !Ctrl r: call(cpRegisterFrames) \n\ + !Ctrl s: call(cpMatchFrames) \n\ + !Ctrl t: call(tileFramesToggle) \n\ + !Ctrl u: call(cpZoom,1,1,fixed) \n\ + !Ctrl x: call(cpFrameAction,flipX) \n\ + !Ctrl y: call(cpFrameAction,flipY) \n\ + !Ctrl Alt =: call(Print) \n\ + Ctrl +: call(cpZoom,2.0,2.0,relative) \n\ + Ctrl -: call(cpZoom,0.5,0.5,relative) \n\ + Ctrl \<: call(cpSetBlinkRate,BRdecrease) \n\ + Ctrl \>: call(cpSetBlinkRate,BRincrease) \n\ + Ctrl \[: call(setCtrBoxSize,$x,$y,-1) \n\ + Ctrl \]: call(setCtrBoxSize,$x,$y,1) \n\ + !Ctrl 0: call(centroid,$x,$y,peak) \n\ + !Ctrl Alt 0: call(centroid,$x,$y,min) \n\ + !Alt b: call(toggleBlink) \n\ + !Alt c: call(controlPanel) \n\ + !Ctrl Alt f: call(fitFrame) \n\ + !Alt h: call(Help) \n\ + !Alt i: call(infoPanel) \n\ + !Alt l: call(loadPanel) \n\ + !Alt p: call(printPanel) \n\ + !Alt s: call(savePanel) \n\ + !Alt t: call(tclPanel) \n\ + !: call(makeMarker,$name,$x,$y) m_create() \n\ + !Shift : crosshair(on) \n\ + !Shift : crosshair(on) \n\ + !Shift: crosshair(off) \n\ + !: crosshair(off) \n\ + !: call(zoom,$x,$y) \n\ + !: call(windowColormap,$x,$y) \n\ + !: call(updateColormap,$x,$y) \n\ + !: call(windowColormap,$x,$y) \n\ + !Ctrl : call(makeRuler,$name,$x,$y) \n\ + !Ctrl : track-cursor() call(wcsUpdate,$x,$y) call(magnifierMapImage,$x,$y) call(resizeRuler,$x,$y,0) \n\ + !Ctrl : call(deleteRuler,$x,$y) \n\ + : enter-window() \n\ + : leave-window() \n\ + : graphics-input() \n\ + !Alt : call(curtrack_msg,$x,$y) \n\ + : track-cursor() call(wcsUpdate,$x,$y) call(magnifierMapImage,$x,$y) + + +! The following translations can be used to enable windowing of the +! individual RGB components of the colormap. It's not very useful but +! included here for those that may wish to use it. +!-------------------------------------------------------------------------- +! !Ctrl : call(windowRGB,1,$x,$y,0) \n\ +! !Ctrl : call(windowRGB,1,$x,$y,0) \n\ +! !Ctrl : call(windowRGB,1,$x,$y,1) \n\ +! !Ctrl : call(windowRGB,2,$x,$y,0) \n\ +! !Ctrl : call(windowRGB,2,$x,$y,0) \n\ +! !Ctrl : call(windowRGB,2,$x,$y,1) \n\ +! !Ctrl : call(windowRGB,3,$x,$y,0) \n\ +! !Ctrl : call(windowRGB,3,$x,$y,0) \n\ +! !Ctrl : call(windowRGB,3,$x,$y,1) \n\ + + *colorbar.borderWidth: 0 + *colorbar.maxRasters: 1 + *colorbar.maxMappings: 1 + *colorbar.width: 50 + *colorbar.height: 17 +} + diff --git a/vendor/x11iraf/ximtool/gui/main.obj b/vendor/x11iraf/ximtool/gui/main.obj new file mode 100644 index 00000000..c8481e04 --- /dev/null +++ b/vendor/x11iraf/ximtool/gui/main.obj @@ -0,0 +1,86 @@ +#!/usr/local/bin/obmsh +# +# XIMTOOL-ALT.GUI -- Default GUI for the Ximtool-alt image display server. +# +# Version 2.0 -- BETA VERSION + +set Version "NOAO/IRAF XImtool Version 2.0BETA" + +reset-server + +set Objects(ximtool) { \ + toplevel Layout display\ +\ + display Group menuGroup\ + menuGroup Layout menubar\ + menubar MenuButton fileButton\ + menubar MenuButton viewButton\ + menubar MenuButton optionsButton\ + menubar Label imageTitle\ + menubar Toggle mXflipButton\ + menubar Toggle mYflipButton\ + menubar Command mPrevButton\ + menubar MenuButton mFrameButton\ + menubar Command mNextButton\ + menubar Toggle toolButton\ + menubar Toggle panelButton\ +\ + display Layout toolbar\ + toolbar Command tbZoomIn\ + toolbar Command tbZoom0\ + toolbar Command tbZoomOut\ + toolbar Command tbInvert\ + toolbar Command tbNormalize\ + toolbar Command tbMatchLUT\ + toolbar Toggle tbAutoReg\ + toolbar Command tbRegister\ + toolbar Command tbCenter\ + toolbar Command tbBlinkDec\ + toolbar Toggle tbBlink\ + toolbar Command tbBlinkInc\ + toolbar Toggle xflipButton\ + toolbar Toggle yflipButton\ + toolbar Toggle tbTile\ + toolbar Toggle tbCompass\ + toolbar Command prevButton\ + toolbar MenuButton frameButton\ + toolbar Command nextButton\ +\ + display Frame imageFrame\ + imageFrame Gterm imagewin\ + display Frame cbarFrame\ + cbarFrame Gterm colorbar\ + display Toggle hcut\ + display Toggle vcut\ + display Frame hcutFrame\ + hcutFrame Gterm hcutPlot\ + display Frame vcutFrame\ + vcutFrame Gterm vcutPlot\ + display Slider2d focusSlider\ +\ + display Group plotOpts\ + plotOpts Layout poptsLayout\ + poptsLayout TextToggle plotSpeed\ + poptsLayout TextToggle plotAccurate\ + poptsLayout TextToggle plotImgPix\ + poptsLayout Frame optLine\ + poptsLayout TextToggle curJump\ + poptsLayout TextToggle curSmooth\ + poptsLayout TextToggle curTrack\ +\ + display Layout panelbar\ + panelbar Toggle pbDisplayP\ + panelbar Toggle pbLoadP\ + panelbar Toggle pbSaveP\ + panelbar Toggle pbPrintP\ + panelbar Toggle pbInfoP\ + panelbar Toggle pbTileP\ + panelbar Toggle pbCoordP\ + panelbar Toggle pbPanM\ + panelbar Toggle pbMagM\ + panelbar Toggle pbWcsM\ + panelbar Toggle pbIsm\ + panelbar Toggle helpButton\ + panelbar Command pbQuit\ +} + diff --git a/vendor/x11iraf/ximtool/gui/main.res b/vendor/x11iraf/ximtool/gui/main.res new file mode 100644 index 00000000..011b7a6f --- /dev/null +++ b/vendor/x11iraf/ximtool/gui/main.res @@ -0,0 +1,525 @@ + +set Resources(ximtool) { \ + + ! Main image window resources. + ! ------------------------------- + *allowShellResize: True + *beNiceToColormap: False + *menuLabel.foreground: Gold + *markerMenu.foreground: White + *rulerMenu.foreground: White + *display.imagewin.markerMenu.foreground: White + *display.imagewin.rulerMenu.foreground: White + *markerMenu.background: SteelBlue + *markerMenu*SimpleMenu.foreground: White + *markerMenu*SimpleMenu.background: SteelBlue + *rulerMenu.background: SteelBlue + *rulerMenu*SimpleMenu.foreground: White + *rulerMenu*SimpleMenu.background: SteelBlue + *rulerColor.SmeBSB.leftMargin: 16 + *magzoomMenu.foreground: White + *magzoomMenu.background: SteelBlue + *magzoomMenu*SimpleMenu.foreground: White + *magzoomMenu*SimpleMenu.background: SteelBlue + *markerColor.SmeBSB.leftMargin: 64 + *markerColor.SmeBSB.rightMargin: 0 + *markerColor.menuLabel.leftMargin: 5 + *markerColor.menuLabel.rightMargin: 5 + *rulerColor.SmeBSB.leftMargin: 64 + *rulerColor.SmeBSB.rightMargin: 0 + *rulerColor.menuLabel.leftMargin: 5 + *rulerColor.menuLabel.rightMargin: 5 + + *ximtool.title: XIMTOOL_VERSION + + *display.borderWidth: 2 + *display.layout: horizontal { \ + -0 \ + vertical { \ + menuGroup < +inf -inf * > \ + horizontal { 1 toolbar < +inf -inf * > 1 } \ + 1 < -1 > \ + horizontal { 1 panelbar < +inf -inf * > 1 } \ + 1 < -1 > \ + vertical { \ + horizontal { \ + imageFrame < +inf -inf * +inf -inf > \ + -2 \ + vcutFrame < * +inf -inf > \ + } \ + -3 \ + horizontal { \ + hcutFrame < +inf -inf * > 1 \ + vertical { 4 horizontal { -4 plotOpts} -4 } \ + } \ + -3 \ + horizontal { \ + cbarFrame < +inf -inf * > \ + focusSlider 2 hcut 2 vcut 15 \ + } \ + } \ + } \ + -0 \ + } + *hcut.label: H + *hcut.font: *lucida-bold-r*10* + *vcut.label: V + *vcut.font: *lucida-bold-r*10* + *focusSlider.location: 0 0 100 15 + + *hcutFrame.frameType: sunken + *hcutFrame.frameWidth: 1 + *hcutFrame.innerOffset: 1 + *hcutFrame.outerOffset: 1 + //*hcutPlot.color0: #c4c4c4 + //*hcutPlot.color1: #000000 + *hcutPlot.color0: #000000 + *hcutPlot.color1: #ffffff + *hcutPlot.crosshairCursorColor: red + *hcutPlot.width: 512 + *hcutPlot.height: 6 + *hcutPlot.borderWidth: 0 + *hcutPlot.alphaFont1: 6x10 + *hcutPlot.alphaFont2: 6x10 + *hcutPlot.alphaFont3: 6x10 + *hcutPlot.alphaFont4: 6x10 + *hcutPlot.alphaFont5: 6x10 + *hcutPlot.alphaFont6: 6x10 + *hcutPlot.alphaFont7: 6x10 + *hcutPlot.alphaFont8: 6x10 + *hcutPlot.translations: \ + !Ctrl 1: call(cpZoom,1,1,fixed) \n\ + !Ctrl 2: call(cpZoom,2,2,fixed) \n\ + !Ctrl 3: call(cpZoom,3,3,fixed) \n\ + !Ctrl 4: call(cpZoom,4,4,fixed) \n\ + !Ctrl 5: call(cpZoom,5,5,fixed) \n\ + !Ctrl 6: call(cpZoom,6,6,fixed) \n\ + !Ctrl 7: call(cpZoom,7,7,fixed) \n\ + !Ctrl 8: call(cpZoom,8,8,fixed) \n\ + !Ctrl 9: call(cpZoom,9,9,fixed) \n\ + !Ctrl b: call(prevFrame,$name) \n\ + !Ctrl f: call(nextFrame,$name) \n\ + !Ctrl i: call(cpInvert) \n\ + !Ctrl m: call(toggleMagnifier) \n\ + !Ctrl n: call(normalize) \n\ + !Ctrl p: call(togglePanner) \n\ + !Ctrl Alt q: call(Quit) \n\ + !Ctrl r: call(cpRegisterFrames) \n\ + !Ctrl s: call(cpMatchFrames) \n\ + !Ctrl u: call(cpZoom,1,1,fixed) \n\ + Ctrl +: call(cpZoom,2.0,2.0,relative) \n\ + Ctrl -: call(cpZoom,0.5,0.5,relative) \n\ + Ctrl \<: call(cpSetBlinkRate,BRdecrease) \n\ + Ctrl \>: call(cpSetBlinkRate,BRincrease) \n\ + !Alt b: call(toggleBlink) \n\ + !Alt c: call(displayPanel) \n\ + !Alt h: call(Help) \n\ + !Alt i: call(infoPanel) \n\ + !Ctrl Alt f: call(fitFrame) \n\ + !Alt l: call(loadPanel) \n\ + !Alt p: call(printPanel) \n\ + !Alt s: call(savePanel) \n\ + !Alt t: call(tclPanel) \n\ + !: call(makeMarker,$name,$x,$y) m_create() \n\ + : enter-window() \n\ + : leave-window() \n\ + : graphics-input() \n\ + !Alt : call(curtrack_msg,$x,$y) \n\ + : track-cursor() call(hcutWCSUpdate,$x,$y) + + + *vcutFrame.frameType: sunken + *vcutFrame.frameWidth: 1 + *vcutFrame.innerOffset: 0 + *vcutFrame.outerOffset: 0 + //*vcutPlot.color0: #c4c4c4 + //*vcutPlot.color1: black + *vcutPlot.color0: #000000 + *vcutPlot.color1: #ffffff + *vcutPlot.crosshairCursorColor: red + *vcutPlot.width: 6 + *vcutPlot.height: 512 + *vcutPlot.borderWidth: 0 + *vcutPlot.alphaFont1: 6x10 + *vcutPlot.alphaFont2: 6x10 + *vcutPlot.alphaFont3: 6x10 + *vcutPlot.alphaFont4: 6x10 + *vcutPlot.alphaFont5: 6x10 + *vcutPlot.alphaFont6: 6x10 + *vcutPlot.alphaFont7: 6x10 + *vcutPlot.alphaFont8: 6x10 + *vcutPlot.translations: \ + !Ctrl 1: call(cpZoom,1,1,fixed) \n\ + !Ctrl 2: call(cpZoom,2,2,fixed) \n\ + !Ctrl 3: call(cpZoom,3,3,fixed) \n\ + !Ctrl 4: call(cpZoom,4,4,fixed) \n\ + !Ctrl 5: call(cpZoom,5,5,fixed) \n\ + !Ctrl 6: call(cpZoom,6,6,fixed) \n\ + !Ctrl 7: call(cpZoom,7,7,fixed) \n\ + !Ctrl 8: call(cpZoom,8,8,fixed) \n\ + !Ctrl 9: call(cpZoom,9,9,fixed) \n\ + !Ctrl b: call(prevFrame,$name) \n\ + !Ctrl f: call(nextFrame,$name) \n\ + !Ctrl i: call(cpInvert) \n\ + !Ctrl m: call(toggleMagnifier) \n\ + !Ctrl n: call(normalize) \n\ + !Ctrl p: call(togglePanner) \n\ + !Ctrl Alt q: call(Quit) \n\ + !Ctrl r: call(cpRegisterFrames) \n\ + !Ctrl s: call(cpMatchFrames) \n\ + !Ctrl u: call(cpZoom,1,1,fixed) \n\ + Ctrl +: call(cpZoom,2.0,2.0,relative) \n\ + Ctrl -: call(cpZoom,0.5,0.5,relative) \n\ + Ctrl \<: call(cpSetBlinkRate,BRdecrease) \n\ + Ctrl \>: call(cpSetBlinkRate,BRincrease) \n\ + !Alt b: call(toggleBlink) \n\ + !Alt c: call(displayPanel) \n\ + !Alt h: call(Help) \n\ + !Alt i: call(infoPanel) \n\ + !Ctrl Alt f: call(fitFrame) \n\ + !Alt l: call(loadPanel) \n\ + !Alt p: call(printPanel) \n\ + !Alt s: call(savePanel) \n\ + !Alt t: call(tclPanel) \n\ + !: call(makeMarker,$name,$x,$y) m_create() \n\ + : enter-window() \n\ + : leave-window() \n\ + : graphics-input() \n\ + !Alt : call(curtrack_msg,$x,$y) \n\ + : track-cursor() call(vcutWCSUpdate,$x,$y) + + + *plotOpts.label: Options + !*plotOpts*location: 0 0 105 18 + *plotOpts*location: 0 0 1 18 + *plotOpts.shrinkToFit: True + *plotOpts.outerOffset: 5 + *plotOpts.innerOffset: 3 + *plotOpts.frameWidth: 2 + *plotOpts*TextToggle.offIcon: square0s + *plotOpts*TextToggle.onIcon: square1s + *plotOpts*TextToggle.highlightColor: yellow + *plotOpts*TextToggle.outerOffset: 0 + *plotOpts*TextToggle.frameWidth: 0 + *plotOpts*TextToggle.selectionStyle: multi + *plotOpts*TextToggle.leftMargin: 3 + *plotOpts*TextToggle.alignment: left + + *poptsLayout.borderWidth: 0 + *poptsLayout.layout: vertical { \ + -1 \ + plotSpeed plotAccurate plotImgPix \ + 2 < -2 > \ + horizontal { -4 optLine < +inf -inf * > -4 } \ + 2 < -2 > \ + curJump curSmooth curTrack \ + -1 \ + } + *plotSpeed.label: Better Speed + *plotSpeed.on: True + *plotAccurate.label: Better Accuracy + *plotAccurate.on: False + *plotImgPix.label: Image Pixels + *plotImgPix.on: False + *plotImgPix.sensitive: False + *optLine.height: 2 + *optLine.width: 120 + *optLine.outerOffset: 0 + *optLine.innerOffset: 0 + *optLine.frameWidth: 2 + *optLine.frameType: chiseled + *curJump.label: Jump Cursor + *curJump.on: True + *curSmooth.label: Smooth Cursor + *curSmooth.on: False + *curTrack.label: Graphics Cursors + *curTrack.on: True + + + *menuGroup.label: + *menuGroup.height: 38 + *menuGroup.width: 512 + *menuGroup.frameType: raised + *menuGroup.frameWidth: 2 + *menubar.layout: horizontal { \ + 2 < -2 > \ + fileButton 1 < -1 > viewButton 1 < -1 > optionsButton \ + 1 < -1 > \ + imageTitle < +inff -inff * > \ + 1 < -1 > \ + mXflipButton 1 < -1 > mYflipButton \ + 1 < -1 > \ + mPrevButton 1 < -1 > mFrameButton 1 < -1 > mNextButton \ + 1 < -1 > \ + toolButton 1 < -1 > panelButton \ + 2 < -2 > \ + } + + *menubar*SimpleMenu.foreground: Black + *menubar*SimpleMenu.borderWidth: 1 + *menubar*SimpleMenu.foreground: White + *menubar*SimpleMenu.background: SteelBlue + *SmeBSB.vertSpace: 10 + + *menubar.width: 512 + *menubar*borderWidth: 0 + *menubar*Command.internalWidth: 0 + *menubar*Command.borderWidth: 0 + *menubar*Toggle.label: x + *menubar*Toggle.internalWidth: 0 + *menubar*Toggle.borderWidth: 0 + + *toolbar.layout: horizontal { \ + tbZoomIn < +inf -inf * > 1 < -1 > \ + tbZoom0 < +inf -inf * > 1 < -1 > \ + tbZoomOut < +inf -inf * > 1 < -1 > \ + tbInvert < +inf -inf * > 1 < -1 > \ + tbNormalize < +inf -inf * > 1 < -1 > \ + tbMatchLUT < +inf -inf * > 1 < -1 > \ + tbAutoReg < +inf -inf * > 1 < -1 > \ + tbRegister < +inf -inf * > 1 < -1 > \ + tbCenter < +inf -inf * > 1 < -1 > \ + tbBlinkDec < +inf -inf * > 1 < -1 > \ + tbBlink < +inf -inf * > 1 < -1 > \ + tbBlinkInc < +inf -inf * > 1 < -1 > \ + xflipButton < +inf -inf * > 1 < -1 > \ + yflipButton < +inf -inf * > 1 < -1 > \ + tbCompass < +inf -inf * > 1 < -1 > \ + tbTile < +inf -inf * > 1 < -1 > \ + prevButton < +inf -inf * > 1 < -1 > \ + frameButton < +inf -inf * > 1 < -1 > \ + nextButton < +inf -inf * > 1 < -1 > \ + } + *toolbar.width: 512 + *toolbar.height: 25 + *toolbar*borderWidth: 0 + *toolbar*Command.internalWidth: 3 + *toolbar*Command.borderWidth: 0 + *toolbar*Toggle.internalWidth: 2 + *toolbar*Toggle.borderWidth: 0 + + *panelbar.layout: horizontal { \ + pbDisplayP < +inf -inf * > 1 < -1 > \ + pbPrintP < +inf -inf * > 1 < -1 > \ + pbLoadP < +inf -inf * > 1 < -1 > \ + pbSaveP < +inf -inf * > 1 < -1 > \ + pbInfoP < +inf -inf * > 1 < -1 > \ + pbTileP < +inf -inf * > 1 < -1 > \ + pbCoordP < +inf -inf * > 1 < -1 > \ + pbPanM < +inf -inf * > 1 < -1 > \ + pbMagM < +inf -inf * > 1 < -1 > \ + pbWcsM < +inf -inf * > 1 < -1 > \ + pbIsm < +inf -inf * > 1 < -1 > \ + helpButton < +inf -inf * > 1 < -1 > \ + pbQuit < +inf -inf * > 1 < -1 > \ + } + *panelbar*SimpleMenu.borderColor: Black + *panelbar*SimpleMenu.borderWidth: 1 + *SmeBSB.vertSpace: 10 + + *panelbar.width: 12 + *panelbar.height: 25 + *panelbar*borderWidth: 0 + *panelbar*Label.internalWidth: 4 + *panelbar*Label.borderWidth: 0 + *panelbar*Command.internalWidth: 4 + *panelbar*Command.borderWidth: 0 + *panelbar*Toggle.internalWidth: 3 + *panelbar*Toggle.borderWidth: 0 + + *pbLoadP.label: Load + *pbDisplayP.label: Display + *pbSaveP.label: Save + *pbPrintP.label: Print + *pbInfoP.label: Info + *pbTileP.label: Tile + *pbCoordP.label: Coords + *pbPanM.label: Pan + *pbPanM.state: 1 + *pbMagM.label: Mag + *pbMagM.state: 0 + *pbWcsM.label: WCS + *pbWcsM.state: 1 + *pbIsm.label: ISM + *pbIsm.state: 0 + *helpButton.label: + + *fileButton.label: File + *fileButton.menuName: fileMenu + *viewButton.label: View + *viewButton.menuName: viewMenu + *optionsButton.label: Options + *optionsButton.menuName: optionsMenu + *toolButton.label: + *toolButton.state: 0 + *panelButton.label: + *panelButton.state: 0 + *imageTitle*font: *times-bold-r*12* + *imageTitle.width: 40 + *imageTitle.height: 20 + *frameButton.menuName: frameMenu + *frameButton.label: 1 + *frameButton.width: 20 + *mFrameButton.menuName: mFrameMenu + *mFrameButton.label: 1 + *mFrameButton.width: 20 + *pbQuit.label: Quit + *tbZoom0.label: Mag + *tbBlink.label: Blink + *tbBlink.internalWidth: 3 + *tbCenter.label: Cntr + *tbAutoReg.label: AReg + *tbRegister.label: Reg + *tbInvert.label: Inv + *tbNormalize.label: Norm + *tbMatchLUT.label: Match + + *SimpleMenu*font: -adobe-times-bold-r-normal-*-12-*-*-*-*-*-iso8859-1 + *fileButton.font: -adobe-times-bold-i-normal-*-12-*-*-*-*-*-iso8859-1 + *optionsButton.font: -adobe-times-bold-i-normal-*-12-*-*-*-*-*-iso8859-1 + *viewButton.font: -adobe-times-bold-i-normal-*-12-*-*-*-*-*-iso8859-1 + *panelbar*font: -adobe-times-bold-i-normal-*-12-*-*-*-*-*-iso8859-1 + *toolbar*font: -adobe-times-bold-i-normal-*-12-*-*-*-*-*-iso8859-1 + + *Gterm.cmapName: image + *Gterm.basePixel: 64 + *imageFrame.frameType: sunken + *imageFrame.frameWidth: 1 + *imageFrame.outerOffset: 0 + *imageFrame.innerOffset: 0 + *imageFrame.width: 512 + *imageFrame.height: 512 + *cbarFrame.frameType: sunken + *cbarFrame.frameWidth: 1 + *cbarFrame.outerOffset: 0 + *cbarFrame.innerOffset: 0 + *cbarFrame.width: 512 + *imagewin.warpCursor: true + *imagewin.raiseWindow: true + *imagewin.deiconifyWindow: true + *imagewin.idleCursor: crosshair + *imagewin.ginmodeCursor: circle + *imagewin.ginmodeBlinkInterval: 500 + *imagewin.resizable: true + *imagewin.copyOnResize: false + *imagewin.width: 512 + *imagewin.height: 512 + *imagewin.maxMappings: 64 + *imagewin.borderWidth: 0 + + *imagewin.translations: \ + NoneLeft: call(move_cursor,-1,0) \n\ + NoneDown: call(move_cursor,0,1) \n\ + NoneUp: call(move_cursor,0,-1) \n\ + NoneRight: call(move_cursor,1,0) \n\ + !Shift Left: call(move_cursor,-10,0) \n\ + !Shift Down: call(move_cursor,0,10) \n\ + !Shift Up: call(move_cursor,0,-10) \n\ + !Shift Right: call(move_cursor,10,0) \n\ + !Ctrl h: call(move_cursor,-1,0) \n\ + !Ctrl j: call(move_cursor,0,1) \n\ + !Ctrl k: call(move_cursor,0,-1) \n\ + !Ctrl l: call(move_cursor,1,0) \n\ + !Ctrl Shift h: call(move_cursor,-10,0) \n\ + !Ctrl Shift j: call(move_cursor,0,10) \n\ + !Ctrl Shift k: call(move_cursor,0,-10) \n\ + !Ctrl Shift l: call(move_cursor,10,0) \n\ + !Ctrl Left: call(moveFrame,-1,0) \n\ + !Ctrl Down: call(moveFrame,0,1) \n\ + !Ctrl Up: call(moveFrame,0,-1) \n\ + !Ctrl Right: call(moveFrame,1,0) \n\ + !Ctrl Alt Left: call(moveFrame,-0.5,0) \n\ + !Ctrl Alt Down: call(moveFrame,0,0.5) \n\ + !Ctrl Alt Up: call(moveFrame,0,-0.5) \n\ + !Ctrl Alt Right: call(moveFrame,0.5,0) \n\ + !Alt 1: call(cpSetFrame,frame1) \n\ + !Alt 2: call(cpSetFrame,frame2) \n\ + !Alt 3: call(cpSetFrame,frame3) \n\ + !Alt 4: call(cpSetFrame,frame4) \n\ + !Ctrl 1: call(cpZoom,1,1,fixed) \n\ + !Ctrl 2: call(cpZoom,2,2,fixed) \n\ + !Ctrl 3: call(cpZoom,3,3,fixed) \n\ + !Ctrl 4: call(cpZoom,4,4,fixed) \n\ + !Ctrl 5: call(cpZoom,5,5,fixed) \n\ + !Ctrl 6: call(cpZoom,6,6,fixed) \n\ + !Ctrl 7: call(cpZoom,7,7,fixed) \n\ + !Ctrl 8: call(cpZoom,8,8,fixed) \n\ + !Ctrl 9: call(cpZoom,9,9,fixed) \n\ + !Ctrl a: call(tbToggleAutoReg) \n\ + !Ctrl b: call(prevFrame,$name) \n\ + !Ctrl c: call(cpZoomAction,centerFrame) \n\ + !Ctrl f: call(nextFrame,$name) \n\ + !Ctrl i: call(cpInvert) \n\ + !Ctrl m: call(toggleMagnifier) \n\ + !Ctrl n: call(normalize) \n\ + !Ctrl o: call(offset,$x,$y) \n\ + !Ctrl p: call(togglePanner) \n\ + !Ctrl Alt q: call(Quit) \n\ + !Ctrl r: call(cpRegisterFrames) \n\ + !Ctrl s: call(cpMatchFrames) \n\ + !Ctrl t: call(tbTileFramesToggle) \n\ + !Ctrl u: call(cpZoom,1,1,fixed) \n\ + !Ctrl x: call(cpFrameAction,flipX) \n\ + !Ctrl y: call(cpFrameAction,flipY) \n\ + Ctrl +: call(cpZoom,2.0,2.0,relative) \n\ + Ctrl -: call(cpZoom,0.5,0.5,relative) \n\ + !Ctrl Alt =: call(Print) \n\ + Ctrl \<: call(cpSetBlinkRate,BRdecrease) \n\ + Ctrl \>: call(cpSetBlinkRate,BRincrease) \n\ + Ctrl \[: call(setCtrBoxSize,$x,$y,-1) \n\ + Ctrl \]: call(setCtrBoxSize,$x,$y,1) \n\ + !Ctrl 0: call(centroid,$x,$y,peak) \n\ + !Ctrl Alt 0: call(centroid,$x,$y,min) \n\ + !Alt b: call(toggleBlink) \n\ + !Alt c: call(displayPanel) \n\ + !Ctrl Shift c: call(displayPanel) \n\ + !Ctrl Alt f: call(fitFrame) \n\ + !Alt h: call(Help) \n\ + !Alt i: call(infoPanel) \n\ + !Alt l: call(loadPanel) \n\ + !Alt p: call(printPanel) \n\ + !Alt s: call(savePanel) \n\ + !Alt t: call(tclPanel) \n\ + !Ctrl Shift t: call(tclPanel) \n\ + !Shift: call(setDynamicMagnifier,1) \n\ + !Shift: call(setDynamicMagnifier,0) \n\ + !: call(makeMarker,$name,$x,$y) m_create() \n\ + !Shift : crosshair(on) \n\ + !Shift : crosshair(on) \n\ + !Shift : crosshair(off) \n\ + !: crosshair(off) \n\ + !: call(zoom,$x,$y) \n\ + !: call(windowColormap,$x,$y) \n\ + !: call(updateColormap,$x,$y) \n\ + !: call(windowColormap,$x,$y) \n\ + !Ctrl : call(makeRuler,$name,$x,$y) \n\ + !Ctrl : track-cursor() call(wcsUpdate,$x,$y) call(magnifierMapImage,$x,$y) call(resizeRuler,$x,$y,0) \n\ + !Ctrl : call(deleteRuler,$x,$y) \n\ + : enter-window() \n\ + : leave-window() \n\ + : graphics-input() \n\ + !Alt : call(curtrack_msg,$x,$y) \n\ + : track-cursor() call(wcsUpdate,$x,$y) call(magnifierMapImage,$x,$y) + +! The following translations can be used to enable windowing of the +! individual RGB components of the colormap. It's not very useful but +! included here for those that may wish to use it. +!-------------------------------------------------------------------------- +! !Ctrl : call(windowRGB,1,$x,$y,0) \n\ +! !Ctrl : call(windowRGB,1,$x,$y,0) \n\ +! !Ctrl : call(windowRGB,1,$x,$y,1) \n\ +! !Ctrl : call(windowRGB,2,$x,$y,0) \n\ +! !Ctrl : call(windowRGB,2,$x,$y,0) \n\ +! !Ctrl : call(windowRGB,2,$x,$y,1) \n\ +! !Ctrl : call(windowRGB,3,$x,$y,0) \n\ +! !Ctrl : call(windowRGB,3,$x,$y,0) \n\ +! !Ctrl : call(windowRGB,3,$x,$y,1) \n\ + + + *colorbar.maxRasters: 1 + *colorbar.maxMappings: 1 + *colorbar.height: 17 + *colorbar.width: 50 + *colorbar.borderWidth: 0 +} + diff --git a/vendor/x11iraf/ximtool/gui/mkgui b/vendor/x11iraf/ximtool/gui/mkgui new file mode 100755 index 00000000..76f9f288 --- /dev/null +++ b/vendor/x11iraf/ximtool/gui/mkgui @@ -0,0 +1,81 @@ +#!/bin/csh -f + +set old = 0 +set file = ximtool.gui + +old: + +echo -n "Building $file ..." +if ($old == 0) then + cat main.obj > $file +else + cat main-old.obj > $file +endif +cat panel.obj >> $file +cat param.obj >> $file +cat help.obj >> $file +cat blink.obj >> $file +cat hdr.obj >> $file +cat pixtab.obj >> $file +cat tcl.obj >> $file +cat warn.obj >> $file + +cat global.res >> $file +if ($old == 0) then + cat main.res >> $file +else + cat main-old.res >> $file +endif +cat panel.res >> $file +cat display.res >> $file +cat print.res >> $file +cat info.res >> $file +cat load.res >> $file +cat save.res >> $file +cat tile.res >> $file +cat wcs.res >> $file +cat blink.res >> $file +cat hdr.res >> $file +cat pixtab.res >> $file +cat help.res >> $file +cat tcl.res >> $file +cat warn.res >> $file +cat resources.res >> $file + +cat boot.tcl >> $file +cat global.tcl >> $file +cat plots.tcl >> $file +cat imagewin.tcl >> $file +cat func.tcl >> $file +cat panel.tcl >> $file +cat magnifier.tcl >> $file +cat panner.tcl >> $file +cat print.tcl >> $file +cat info.tcl >> $file +cat load.tcl >> $file +cat save.tcl >> $file +cat tile.tcl >> $file +cat wcs.tcl >> $file +cat compass.tcl >> $file +cat rulers.tcl >> $file +cat help.tcl >> $file +cat hdr.tcl >> $file +cat pixtab.tcl >> $file +cat warn.tcl >> $file +cat tcl.tcl >> $file +cat ism.tcl >> $file +if ($old == 0) then + cat toolbars.tcl >> $file +endif + +echo "Done" + +if ($old == 0) then + set old = 1 + set file = ximtool-old.gui + goto old +endif + +echo -n "Installing files ..." +mv *.gui ../ +echo "Done" diff --git a/vendor/x11iraf/ximtool/gui/panel.obj b/vendor/x11iraf/ximtool/gui/panel.obj new file mode 100644 index 00000000..26157cef --- /dev/null +++ b/vendor/x11iraf/ximtool/gui/panel.obj @@ -0,0 +1,412 @@ + +set Objects(panelShell) { \ + toplevel TopLevelShell panelShell\ + panelShell Layout panel\ +\ + panel Frame panelMenuFrame\ + panelMenuFrame Layout panelMenuBar\ + panelMenuBar Command panelHelp\ + panelMenuBar Command panelClose\ +\ + panel Frame tabFrame\ + tabFrame Tabs panelTabs\ + panelTabs Frame display_panel\ + panelTabs Frame print_panel\ + panelTabs Frame load_panel\ + panelTabs Frame save_panel\ + panelTabs Frame info_panel\ + panelTabs Frame tile_panel\ + panelTabs Frame wcs_panel\ +\ +\ + display_panel Layout controlPanel\ + controlPanel Group viewBox\ + controlPanel Group enhancementBox\ + controlPanel Group blinkBox\ + controlPanel Group optionsBox\ + controlPanel Frame controlBox\ +\ + viewBox Layout view\ + view Group frameSelect\ + frameSelect Layout frameBox\ + frameBox Box frlistBox\ + frlistBox Viewport framePort\ + framePort Layout frameList\ + frameList TextToggle frame1\ + frameList TextToggle frame2\ + frameList TextToggle frame3\ + frameList TextToggle frame4\ + frameList TextToggle frame5\ + frameList TextToggle frame6\ + frameList TextToggle frame7\ + frameList TextToggle frame8\ + frameList TextToggle frame9\ + frameList TextToggle frame10\ + frameList TextToggle frame11\ + frameList TextToggle frame12\ + frameList TextToggle frame13\ + frameList TextToggle frame14\ + frameList TextToggle frame15\ + frameList TextToggle frame16\ + frameBox Command prevFrame\ + frameBox Command nextFrame\ + view Frame frameDataBox\ + frameDataBox TextBox frameData\ + view Group zoomBox\ + zoomBox Layout zoom\ + zoom TextButton toggleZoom\ + zoom TextButton zoomIn\ + zoom Command x1\ + zoom Command z2\ + zoom Command z3\ + zoom Command z4\ + zoom Command z5\ + zoom Command z8\ + zoom TextButton zoomOut\ + zoom TextButton centerFrame\ + zoom Command d2\ + zoom Command d3\ + zoom Command d4\ + zoom Command d5\ + zoom Command d8\ + view Layout viewButtons\ + viewButtons Command aspect\ + viewButtons Command flipX\ + viewButtons Command flipY\ + viewButtons Command flipXY\ + viewButtons Command clearFrame\ + viewButtons Command fitFrame\ +\ + enhancementBox Layout enhance\ + enhance Frame colorlistFrame\ + colorlistFrame Viewport colorlistView\ + colorlistView MultiList colorlist\ + enhance Frame colordataFrame\ + colordataFrame TextBox colordata\ + enhance Label contrastLabel\ + enhance Slider2d contrastSlider\ + enhance Label brightnessLabel\ + enhance Slider2d brightnessSlider\ + enhance Command invertButton\ + enhance Command optimizeButton\ +\ + blinkBox Layout blink\ + blink Label blinkFramesLabel\ + blink Command blinkFrame1\ + blink Command blinkFrame2\ + blink Command blinkFrame3\ + blink Command blinkFrame4\ + blink Toggle blinkPanel\ + blink Command blinkReset\ + blink Label blinkRateLabel\ + blink Frame BRframe\ + BRframe Layout BRlayout\ + BRlayout Arrow BRdecrease\ + BRlayout TextBox BRtext\ + BRlayout Arrow BRincrease\ + blink Command registerButton\ + blink Command matchButton\ + blink TextToggle blinkButton\ + blink TextToggle autoregButton\ +\ + optionsBox TextToggle pannerButton\ + optionsBox TextToggle magnifierButton\ + optionsBox TextToggle coordsBoxButton\ + optionsBox TextToggle autoscaleButton\ + optionsBox TextToggle antialiasButton\ + optionsBox TextToggle tileFramesButton\ + optionsBox TextToggle warningsButton\ + optionsBox TextToggle peakupButton\ +\ + controlBox Layout control\ + control Command initializeButton\ + control Command normalizeButton\ +\ +\ + print_panel Layout printLayout\ +\ + printLayout Group printCmdGroup\ + printLayout Group optGroup\ + printLayout Group cmdGroup\ +\ + printCmdGroup Layout printCmdLayout\ + printCmdLayout Layout labelLayout\ + labelLayout Label toLabel\ + labelLayout Label printerLabel\ + printCmdLayout Layout inputLayout\ + inputLayout TextToggle toPrinter\ + inputLayout TextToggle toFile\ + inputLayout Frame printcmdFrame\ + printcmdFrame AsciiText printcmd\ +\ + optGroup Layout optLayout\ + optLayout Group epsPageGroup\ + optLayout Group optionsGroup\ + optLayout Group printColorGroup\ + optLayout Group printerGroup\ + optLayout Group annOptsGroup\ +\ + epsPageGroup Layout epsPage\ + epsPage Label epsOrientLabel\ + epsPage TextToggle epsPortButton\ + epsPage TextToggle epsLandButton\ + epsPage TextToggle epsSquareButton\ + epsPage Label epsSizeLabel\ + epsPage TextToggle epsLetterButton\ + epsPage TextToggle epsLegalButton\ + epsPage TextToggle epsA4Button\ + epsPage TextToggle epsB5Button\ + epsPage Label epsScaleLabel\ + epsPage Frame ScaleFrame\ + ScaleFrame Layout ScaleLayout\ + ScaleLayout Arrow SCdecrease\ + ScaleLayout TextBox SCtext\ + ScaleLayout Arrow SCincrease\ +\ + optionsGroup Layout options\ + options TextToggle epsscaleButton\ + options TextToggle autorotateButton\ + options TextToggle aspectButton\ + options TextToggle compressButton\ +\ + annOptsGroup Layout annOpts\ + annOpts TextToggle annotateButton\ + annOpts TextToggle colorbarButton\ + annOpts TextToggle titleButton\ + annOpts TextToggle bordersButton\ + annOpts Label titleLabel\ + annOpts Frame titleFrame\ + titleFrame AsciiText titleString\ +\ + printColorGroup Layout printColor\ + printColor TextToggle prGrayButton\ + printColor TextToggle prPseudoButton\ + printColor TextToggle prRGBButton\ +\ + printerGroup Layout printers\ + printers Frame printlistFrame\ + printlistFrame Viewport printlistView\ + printlistView MultiList printlist\ +\ + cmdGroup Layout cmdLayout\ + cmdLayout Command okayPrint\ + cmdLayout Label printStatus\ +\ +\ + load_panel Layout filesLayout\ + filesLayout Group imlistGroup\ + imlistGroup Layout imlistLayout\ + imlistLayout Command rootButton\ + imlistLayout Command homeButton\ + imlistLayout Command upButton\ + imlistLayout Command rescanButton\ + imlistLayout Label dirLabel\ + imlistLayout Label fnameLabel\ + imlistLayout Frame filnamFrame\ + filnamFrame AsciiText fnameText\ + imlistLayout Label imtemplateLabel\ + imlistLayout Frame imtemplateFrame\ + imtemplateFrame AsciiText imtemplateText\ + imlistLayout Label imlistLabel\ + imlistLayout Frame imlistFrame\ + imlistFrame Viewport imlistView\ + imlistView MultiList imageList\ +\ + filesLayout Group imoptsGroup\ + imoptsGroup Layout imoptsLayout\ + imoptsLayout TextToggle grayscale\ + imoptsLayout TextToggle autoload\ + imoptsLayout TextToggle browseHdrs\ + imoptsLayout TextToggle zscale\ + imoptsLayout TextToggle zrange\ + imoptsLayout Label z1Label\ + imoptsLayout Frame z1Frame\ + z1Frame AsciiText z1Value\ + imoptsLayout Label z2Label\ + imoptsLayout Frame z2Frame\ + z2Frame AsciiText z2Value\ + imoptsLayout Label nsampLabel\ + imoptsLayout Frame nsampFrame\ + nsampFrame AsciiText nsampValue\ + imoptsLayout Label frameLabel\ + imoptsLayout MenuButton frameFrame\ +\ + filesLayout Group loadCmdGroup\ + loadCmdGroup Layout loadCmdLayout\ + loadCmdLayout Command filesLoadButton\ + loadCmdLayout Label filesStatus\ +\ +\ + save_panel Layout saveLayout\ + saveLayout Group saveNameGroup\ + saveNameGroup Layout saveNameLayout\ + saveNameLayout Label saveLabel\ + saveNameLayout Frame fnameFrame\ + fnameFrame AsciiText saveFile\ +\ + saveLayout Group saveOptGroup\ + saveOptGroup Layout saveOptLayout\ + saveOptLayout Group fmtGroup\ + saveOptLayout Group saveColorGroup\ + saveOptLayout Frame saveDataBox\ + saveDataBox TextBox saveData\ +\ + fmtGroup Layout formats\ + formats TextToggle rasButton\ + formats TextToggle gifButton\ + formats TextToggle jpegButton\ + formats TextToggle tiffButton\ + formats TextToggle fitsButton\ + formats TextToggle epsButton\ + formats TextToggle x11Button\ + formats TextToggle rawButton\ +\ + saveColorGroup Layout saveColor\ + saveColor TextToggle svGrayButton\ + saveColor TextToggle svPseudoButton\ + saveColor TextToggle svRGBButton\ +\ + saveLayout Group saveCmdGroup\ + saveCmdGroup Layout saveCmdLayout\ + saveCmdLayout Command okaySave\ + saveCmdLayout Label saveStatus\ +\ +\ + info_panel Layout infoLayout\ + infoLayout Group infoBox\ + infoBox Layout infoBoxL\ + infoBoxL Frame infoFrame\ + infoFrame AsciiText infoText\ + infoBoxL TextToggle infoOptFr\ + infoBoxL TextToggle infoOptWCS\ + infoBoxL TextToggle infoOptSvr\ + infoBoxL TextToggle infoOptClients\ + infoBoxL TextToggle infoOptIsm\ + infoBoxL TextToggle infoOptFB\ +\ +\ + wcs_panel Layout wcsLayout\ + wcsLayout Group wcsGroup\ + wcsGroup Layout wcsBox\ +\ + wcsBox Frame wcsFrame\ + wcsFrame Layout wcsText\ + wcsText AsciiText wtName\ + wcsText AsciiText wtTitle\ + wcsText AsciiText wtFBCfg\ + wcsText AsciiText wtIPixval\ + wcsText AsciiText wtSPixval\ + wcsText AsciiText wtBPixval\ + wcsText AsciiText wtWcs1\ + wcsText AsciiText wtWcs2\ + wcsText AsciiText wtWcs3\ + wcsText AsciiText wtWcs4\ +\ + wcsBox TextToggle ismToggle\ + wcsBox TextToggle pixelTable\ + wcsBox TextToggle imageHeader\ + wcsBox TextToggle compass\ + wcsBox TextToggle wcsOptions\ +\ +\ + wcsLayout Group wcsOptGroup\ + wcsOptGroup Layout wcsOptLayout\ +\ + wcsOptLayout Group wcsCoords\ + wcsCoords Layout wcLayout\ + wcLayout Label wcTitle\ + wcLayout Frame wcLine\ + wcLayout Label wlWcs1\ + wcLayout Label wlWcs2\ + wcLayout Label wlWcs3\ + wcLayout Label wlWcs4\ + wcLayout MenuButton sysWcs1\ + wcLayout MenuButton sysWcs2\ + wcLayout MenuButton sysWcs3\ + wcLayout MenuButton sysWcs4\ + wcLayout MenuButton fmtWcs1\ + wcLayout MenuButton fmtWcs2\ + wcLayout MenuButton fmtWcs3\ + wcLayout MenuButton fmtWcs4\ + wcLayout TextToggle wpWcs1\ + wcLayout TextToggle wpWcs2\ + wcLayout TextToggle wpWcs3\ + wcLayout TextToggle wpWcs4\ + wcLayout TextToggle wiWcs1\ + wcLayout TextToggle wiWcs2\ + wcLayout TextToggle wiWcs3\ + wcLayout TextToggle wiWcs4\ +\ + wcsOptLayout Group wcsOpts\ + wcsOpts Layout woLayout\ + woLayout TextToggle woptLabels\ + woLayout TextToggle woptTitles\ + woLayout TextToggle woptFBinfo\ + woLayout TextToggle woptBPM\ +\ + wcsOptLayout Group wcsIsmGroup\ + wcsIsmGroup Layout wcsIsmLayout\ + wcsIsmLayout Label wcsIsmLabel\ + wcsIsmLayout Frame wcsIsmFrame\ + wcsIsmFrame AsciiText wcsIsmCmd\ + wcsIsmLayout Command wcsIsmInit\ +\ +\ + tile_panel Frame tileOpts\ + tileOpts Layout toptLayout\ + toptLayout Group tFramesG\ + toptLayout Group tileMode\ + tileMode TextToggle tileDisabled\ + tileMode TextToggle tileManual\ + tileMode TextToggle tileBest\ + tileMode TextToggle tileSquare\ + tileMode TextToggle tileHorizontal\ + tileMode TextToggle tileVertical\ + tileMode TextToggle tileRow\ + tileMode TextToggle tileCol\ + toptLayout Group userOrientG\ + toptLayout Group fillStyle\ + fillStyle TextToggle byCols\ + fillStyle TextToggle bottomUp\ + toptLayout Group tileLabel\ + tileLabel TextToggle labelImname\ + tileLabel TextToggle labelTitles\ + tileLabel TextToggle labelFrames\ + toptLayout Frame geomFrame\ + geomFrame Label tileGeometry\ +\ + userOrientG Layout userOrientL\ + userOrientL Label nrowLab\ + userOrientL Frame nrFrame\ + nrFrame Layout nrLayout\ + nrLayout Arrow nrdecrease\ + nrLayout Label nrtext\ + nrLayout Arrow nrincrease\ + userOrientL Label ncolLab\ + userOrientL Frame ncFrame\ + ncFrame Layout ncLayout\ + ncLayout Arrow ncdecrease\ + ncLayout Label nctext\ + ncLayout Arrow ncincrease\ +\ + tFramesG Layout tFrames\ + tFrames Command tAll\ + tFrames Command tNone\ + tFrames Toggle tFrame1\ + tFrames Toggle tFrame2\ + tFrames Toggle tFrame3\ + tFrames Toggle tFrame4\ + tFrames Toggle tFrame5\ + tFrames Toggle tFrame6\ + tFrames Toggle tFrame7\ + tFrames Toggle tFrame8\ + tFrames Toggle tFrame9\ + tFrames Toggle tFrame10\ + tFrames Toggle tFrame11\ + tFrames Toggle tFrame12\ + tFrames Toggle tFrame13\ + tFrames Toggle tFrame14\ + tFrames Toggle tFrame15\ + tFrames Toggle tFrame16\ +} + diff --git a/vendor/x11iraf/ximtool/gui/panel.res b/vendor/x11iraf/ximtool/gui/panel.res new file mode 100644 index 00000000..52e27826 --- /dev/null +++ b/vendor/x11iraf/ximtool/gui/panel.res @@ -0,0 +1,69 @@ + +set Resources(panelShell) { \ + + !================================ + ! Main Integrated Control Panel + !================================ + *panelShell.title: XImtool Control Panel + *panelShell.geometry: 480x630 + *panelShell.maxWidth: 480 + *panelShell.minWidth: 480 + *panelTabs.internalHeight: 3 + *panelTabs.internalWidth: 10 + + *Text*font: -*-helvetica-medium-r-normal-*-12-*-iso8859-1 + *TextBox*font: -*-helvetica-medium-r-normal-*-12-*-iso8859-1 + *List.font: -*-helvetica-medium-r-normal-*-12-*-iso8859-1 + *MultiList.font: -*-helvetica-medium-r-normal-*-12-*-iso8859-1 + *TextButton.font: -*-helvetica-medium-r-normal-*-12-*-iso8859-1 + *TextToggle.font: -*-helvetica-medium-r-normal-*-12-*-iso8859-1 + + *display_panel.tabLabel: Display + *display_panel.innerOffset: 5 + *print_panel.tabLabel: Print + *print_panel.innerOffset: 5 + *load_panel.tabLabel: Load + *load_panel.innerOffset: 5 + *save_panel.tabLabel: Save + *save_panel.innerOffset: 5 + *info_panel.tabLabel: Info + *info_panel.innerOffset: 5 + *tile_panel.tabLabel: Tile + *tile_panel.innerOffset: 5 + *wcs_panel.tabLabel: Coords + *wcs_panel.innerOffset: 5 + + *panelMenuBar*borderWidth: 0 + *panelMenuBar*Command.internalHeight: 4 + *panelMenuBar*Command.internalWidth: 15 + *panelMenuBar.layout: vertical { \ + 5 < -5 > \ + horizontal { \ + 10 < +inf -10> \ + panelHelp \ + 3 < -3 > \ + panelClose \ + 7 < -7 > \ + } \ + 5 < -5 > \ + } + + *panelHelp.label: Help + *panelClose.label: Dismiss + + + *tabFrame.outerOffset: 3 + *tabFrame.innerOffset: 0 + *tabFrame.frameWidth: 0 + *tabFrame.frameType: chiseled + *panelMenuFrame.outerOffset: 0 + *panelMenuFrame.innerOffset: 1 + *panelMenuFrame.frameType: raised + *panelMenuFrame.frameWidth: 2 + *panel.layout: vertical { \ + panelMenuFrame < +inf -inf * > \ + 3 \ + horizontal { tabFrame < +inf -inf * +inf -inf> } \ + } +} + diff --git a/vendor/x11iraf/ximtool/gui/panel.tcl b/vendor/x11iraf/ximtool/gui/panel.tcl new file mode 100644 index 00000000..257f253c --- /dev/null +++ b/vendor/x11iraf/ximtool/gui/panel.tcl @@ -0,0 +1,835 @@ + +################################################################################ +# MAIN CONTROL PANEL +################################################################################ + + +# Global control panel buttons. +# ------------------------------- +proc cpInitialize args \ +{ + send imagewin setCursorType busy + send client initialize + send imagewin setCursorType idle +} +send initializeButton addCallback cpInitialize +send normalizeButton addCallback normalize + +# Temporarily deactivate some buttons. +send optimizeButton setSensitive false + +#----------------------------------------------------------------------------- + +foreach i $frames {set saveView($i) "1 1"} + +send prevFrame set bitmap larrow +send nextFrame set bitmap rarrow +send contrastLabel set bitmap contrast +send brightnessLabel set bitmap brightness +send contrastSlider resizeThumb 0.1 1.0 +send brightnessSlider resizeThumb 0.1 1.0 +send focusSlider "resizeThumb 0.1 1.0 ; moveThumb 1.0" + + +# panel -- Toggle control panel display. +proc panel args \ +{ + global panel_up + if {$panel_up} { + send panelShell unmap + set panel_up 0 + } else { + send panelShell map + set panel_up 1 + } +} + +proc pbTracePanel {name element op} \ +{ + catch { + upvar $name panel_up + send controlButton set state $panel_up + } +} ; trace variable panel_up w pbTracePanel + + +# resetPanel -- Calling during startup or in an initialize, to reset things. +proc resetPanel {param old new} \ +{ + global frame nframes frames + global displayPanner displayMagnifier displayCoords + global blinkFrames warnings peakCentroid + + switch $new { + startup { + } + restart { foreach i $frames { + send frame$frame set on 0 + } + + # Initialize to hide the extra frames. + send frlistBox set width 30 + } + done { if {$frame} { + send frame$frame set on 1 + } + + cpResetBlink + set button 1 + foreach i {1 2 3 4} { + send blinkFrame$button set label $i + incr button + } + for {set i 1} {$i <= 16} {incr i} { + send brFrame$i set label $i + } + + cpResetEnhance + send pannerButton set on [true $displayPanner] + send magnifierButton set on [true $displayMagnifier] + send coordsBoxButton set on [true $displayCoords] + send warningsButton set on $warnings + send peakupButton set on [true $peakCentroid] + } + } +}; send initialize addCallback resetPanel + + + +# Control Panel Tabs widget procedures. +#---------------------------------------- + +set cpTabs { display_panel print_panel load_panel save_panel \ + info_panel wcs_panel tile_panel} +set tabTop "display_panel" + + +# Resize the control panel depending on the Tab selected. +proc cpResizeCB { widget event a b c d e args } \ +{ + global tabTop fileList + + # Handle only the first exposure event generated. + if { $a == 0 && $b == 0 && $c == 0 && $d == 0 && $e == 0 } { + set tabTop $widget + + switch $widget { + display_panel { send panel set height 595 } + print_panel { send panel set height 545 } + load_panel { send panel set height 485 + if { [send browseHdrs get on] } { + send imageList setList $fileList resize + } else { + send client setLoadOption rescan + } + } + save_panel { send panel set height 325 } + info_panel { send panel set height 380 } + tile_panel { send panel set height 405 } + wcs_panel { setCoordPanelHeight } + } + } +} ; foreach w $cpTabs { send $w addEventHandler cpResizeCB exposureMask } + + +proc panelDismiss args \ +{ + global panel_up + send panelShell unmap + set panel_up 0 +} ; send panelClose addCallback panelDismiss + + +proc panelTabToggle { panel args } \ +{ + global tabTop panel_up TabToWidget + + if {$tabTop == $panel && $panel_up} { + send panelShell unmap + send $TabToWidget($panel) set state 0 + set panel_up 0 + + } else { + # Special cases for each panel. + if {$panel == "load_panel"} { + send client setLoadOption rescan + } + + send panelTabs setTop $panel + set tabTop $panel + + # Now fire it up if it's not already open. + if {$panel_up == 0} { + send panelShell map + set panel_up 1 + } + + } +} + +proc displayPanel args { panelTabToggle display_panel } +proc infoPanel args { panelTabToggle info_panel } +proc loadPanel args { panelTabToggle load_panel } +proc savePanel args { panelTabToggle save_panel } +proc printPanel args { panelTabToggle print_panel } +proc tilePanel args { panelTabToggle tile_panel } +proc wcsPanel args { panelTabToggle wcs_panel } + + + + +# Frame selection. +# ------------------------------- +proc cpSetFrame {widget args} \ +{ + send $widget set on 0 + send client setFrame [send $widget get label] +} + +proc cpFrameChanged {param old new} \ +{ + global frameCache + + if {$old > 0} { + send frame$old set on 0 + } + if {$new > 0} { + send frame$new set on 1 + } + + # The first time we request frame 5 or higher reset + # the extra frame buttons on the control panel to make + # them visible. + if {$new >= 5} { + send frlistBox set width 49 + } + + # Update the header panel object list. + catch { + # Only update when the header panel is open. + if {[info exists frameCache($new)] && [send imageHeader get on]} { + setHdrObjMenu $new + getHeader [lindex $frameCache($new) 0] [lindex $frameCache($new) 1] + } + } +} + +send prevFrame addCallback prevFrame +send nextFrame addCallback nextFrame +send frame addCallback cpFrameChanged +for {set i 1} {$i <= 16} {incr i} {send frame$i addCallback cpSetFrame} + +# Initialize to hide the extra frames. +send frlistBox set width 30 + +proc blinkPanelCB { widget type state args } \ +{ + if {$state} { + send blink_panel map + } else { + send blink_panel unmap + } +} ; send blinkPanel addCallback blinkPanelCB + +proc blinkPanelClose args \ +{ + send blink_panel unmap + send blinkPanel set state 0 +} ; send brClose addCallback blinkPanelClose + + + +# Frame buttons. +proc cpFrameAction {widget args} \ +{ + global frameZoomX frameZoomY frame + switch $widget { + aspect { set xmag $frameZoomX($frame) + set ymag $frameZoomY($frame) + set zoom [expr round (($xmag + $ymag) / 2.0)] + cpZoom $zoom $zoom fixed + } + flipX { send client flip x } + flipY { send client flip y } + flipXY { send client flip x y } + clearFrame { clearFrame } + fitFrame { fitFrame } + } +} +foreach widget {aspect flipX flipY flipXY clearFrame fitFrame} { + send $widget addCallback cpFrameAction +} + +# clearFrame -- Clear the current display frame. +proc clearFrame args \ +{ + global warnings + if {$warnings} { + Wexec client \ + "Clearing the frame will destroy\n\ + all data in the frame" \ + clearFrame + } else { + send client clearFrame + } +} + +# fitFrame -- Resize the display window to fit the frame buffer. +proc fitFrame args \ +{ + global frameWidth frameHeight winWidth winHeight + set dw [expr [send display get width] - $winWidth] + set dh [expr [send display get height] - $winHeight] + send display "resize [expr $frameWidth + $dw] [expr $frameHeight + $dh]" +} + +proc initFitFrame { param old new } \ +{ + if { [lindex $new 0] == "resize"} { + fitFrame + } + pannerMapImage init +}; send frameFit addCallback initFitFrame + + + +# Zoom and pan buttons. +# ------------------------------- +proc cpZoomAction {widget args} \ +{ + global frameWidth frameHeight + + switch $widget { + x1 { cpZoom 1 1 fixed } + z2 { cpZoom 2 2 fixed } + z3 { cpZoom 3 3 fixed } + z4 { cpZoom 4 4 fixed } + z5 { cpZoom 5 5 fixed } + z8 { cpZoom 8 8 fixed } + + d2 { cpZoom [expr 1.0/2] [expr 1.0/2] fixed } + d3 { cpZoom [expr 1.0/3] [expr 1.0/3] fixed } + d4 { cpZoom [expr 1.0/4] [expr 1.0/4] fixed } + d5 { cpZoom [expr 1.0/5] [expr 1.0/5] fixed } + d8 { cpZoom [expr 1.0/8] [expr 1.0/8] fixed } + + zoomIn { cpZoom 2.0 2.0 relative } + zoomOut { cpZoom 0.5 0.5 relative } + + centerFrame { send client pan \ + [expr $frameWidth/2.0] \ + [expr $frameHeight/2.0] + } + toggleZoom { toggleZoom } + } +} + +proc cpZoom {zoom_x zoom_y mode} \ +{ + global frameZoomX frameZoomY zoomindex frame + global frameOffsetX frameOffsetY frameCenterX frameCenterY + + if {$mode == "fixed"} { + #send client zoom $zoom_x $zoom_y + send client zoomAbs $zoom_x $zoom_y \ + $frameCenterX($frame) $frameCenterY($frame) \ + $frameOffsetX($frame) $frameOffsetY($frame) + } else { + #send client zoom \ + # [expr $frameZoomX($frame) * $zoom_x] \ + # [expr $frameZoomY($frame) * $zoom_y] + send client zoomAbs \ + [expr $frameZoomX($frame) * $zoom_x] \ + [expr $frameZoomY($frame) * $zoom_y] \ + $frameCenterX($frame) $frameCenterY($frame) \ + $frameOffsetX($frame) $frameOffsetY($frame) + } + + set zoomindex($frame) 0 +} + +proc toggleZoom args \ +{ + global frameZoomX frameZoomY frameCenterX frameCenterY + global frameWidth frameHeight saveView frame + + if {$frameZoomX($frame) != 1 && $frameZoomY($frame) != 1} { + set saveView($frame) \ + "$frameZoomX($frame) $frameZoomY($frame) \ + $frameCenterX($frame) $frameCenterY($frame)" + send client zoom 1 1 \ + [expr $frameWidth/2.0] \ + [expr $frameHeight/2.0] + } else { + send client zoom $saveView($frame) + } +} + +foreach widget { toggleZoom centerFrame zoomIn zoomOut \ + x1 z2 z3 z4 z5 z8 d2 d3 d4 d5 d8 } { + send $widget addCallback cpZoomAction +} + +# Frame data display. +# ------------------------------- +set cpFrame 0 +set cpXcen 0 +set cpYcen 0 +set cpXmag 0 +set cpYmag 0 +set cpXscale 0 +set cpYscale 0 +set cpXoff 0 +set cpYoff 0 + +proc cpDisplayFrameData {name old new} \ +{ + global cpFrame cpXcen cpYcen cpXoff cpYoff + global cpXmag cpYmag cpXscale cpYscale + + set update 0 + switch $name { + frame { if {$new != $cpFrame} { + set cpFrame $new + set update 1 + } + } + frameView { # Parse the frameView input. + set xmag [lindex $new 0]; set ymag [lindex $new 1] + set xcen [lindex $new 2]; set ycen [lindex $new 3] + set xnorm [lindex $new 4]; set ynorm [lindex $new 5] + set xoff [lindex $new 6]; set yoff [lindex $new 7] + + # We need client coords and the overall scale factors. + set text [send client encodewcs $xcen $ycen] + set xcen [lindex $text 0] + set ycen [lindex $text 1] + set xscale [expr $xmag * $xnorm] + set yscale [expr $ymag * $ynorm] + + if {$xcen != $cpXcen || $ycen != $cpYcen || + $xmag != $cpXmag || $ymag != $cpYmag || + $xoff != $cpXoff || $yoff != $cpYoff || + $xscale != $cpXscale || $yscale != $cpYscale} { + + set cpXcen $xcen; set cpXscale $xscale + set cpYcen $ycen; set cpYscale $yscale + set cpXmag $xmag; set cpXoff $xoff; + set cpYmag $ymag; set cpYoff $yoff; + set update 1 + } + } + } + + if {$update} { + set header [format "-- Frame %d --" $cpFrame] + set center [format "X center: %0.1f\nY center: %0.1f" $cpXcen $cpYcen] + if {int($cpXmag) >= 10} { + set zoom1 [format " X zoom: %0.1f" $cpXmag] + set zoom2 [format " Y zoom: %0.1f" $cpYmag] + } else { + set zoom1 [format "X zoom: %0.1f" $cpXmag] + set zoom2 [format "Y zoom: %0.1f" $cpYmag] + } + if {int($cpXscale) >= 10} { + set scale1 [format "X scale: %0.1f" $cpXscale] + set scale2 [format "Y scale: %0.1f" $cpYscale] + } else { + set scale1 [format "X scale: %0.2f" $cpXscale] + set scale2 [format "Y scale: %0.2f" $cpYscale] + } + set offset [format " Offset: (%0.1f,%0.1f)" $cpXoff $cpYoff] + + send frameData set label [format "%s\n%s\n%s\n%s\n%s\n%s\n%s" \ + $header $center $scale1 $scale2 $zoom1 $zoom2 $offset \ + ] + } +}; foreach p {frame frameView} {send $p addCallback cpDisplayFrameData} + + +# Frame enhancement. +# ------------------------------- +set cpEnhanceDisable 0 +set cpEnhanceId 0 +set cpEnhanceMode none +set cpEnhanceVal 0 +set cpListItem none + +# Windowing the colormap is slow when the mouse is not in the image window, +# so it is necessary to execute the windowColormap in a work procedure. +# This allows any number of slider motion events to be processed for each +# windowColormap, preventing slider events from queueing up. + +proc cpResetEnhance args \ +{ + global cpListItem cpEnhanceId + set cpListItem none + set cpEnhanceId 0 +} + +proc cpSetEnhancement {widget cbtype x y} \ +{ + global cpEnhanceMode cpEnhanceVal cpEnhanceId cpEnhanceDisable + set cpEnhanceMode $widget + set cpEnhanceVal $x + if {!$cpEnhanceId && !$cpEnhanceDisable} { + set cpEnhanceId [postWorkProc cpEnhanceProc] + } +} +proc cpEnhanceProc args \ +{ + global cpEnhanceMode cpEnhanceVal cpEnhanceId + global enhancement frame maxContrast + set val $cpEnhanceVal + + if {$cpEnhanceMode == "contrastSlider"} { + set contrast [lindex $enhancement($frame) 2] + send client windowColormap [lindex $enhancement($frame) 1] \ + [expr (($contrast < 0) ? -$val : $val) * $maxContrast] + } else { + send client windowColormap $val + } + + set cpEnhanceId 0 + return done +} + +proc cpInvert args \ +{ + global enhancement frame + set contrast [lindex $enhancement($frame) 2] + send client updateColormap [lindex $enhancement($frame) 1] \ + [expr -1.0 * $contrast] +} + +proc cpDisplayEnhancement {param old new} \ +{ + global cpEnhanceId maxContrast cpEnhanceDisable + global cpListItem enhancement frame + + if {!$frame} \ + return + set enhance $enhancement($frame) + if {[llength $enhance] < 3} \ + return + + set colortable [lindex $enhance 0] + set offset [lindex $enhance 1] + set scale [lindex $enhance 2] + + send colordata set label [format "-- %s --\nCon %0.2f Brt %0.2f" \ + $colortable $scale $offset] + + if {$colortable != $cpListItem} { + send colorlist highlight $colortable + set cpListItem $colortable + } + + if {!$cpEnhanceId && !$cpEnhanceDisable} { + set cpEnhanceDisable 1 + send contrastSlider moveThumb [expr abs($scale) / $maxContrast] + send brightnessSlider moveThumb $offset + set cpEnhanceDisable 0 + } +} + +foreach i {enhancement frame} { + send $i addCallback cpDisplayEnhancement +} +send contrastSlider addCallback cpSetEnhancement scroll +send brightnessSlider addCallback cpSetEnhancement scroll +send invertButton addCallback cpInvert + + +# Colortable display and selection. +# ------------------------------- +set colorTables {} + +proc cpSetColorList {param old new} \ +{ + set colorTables $new + send colorlist setList $new resize +}; send colortables addCallback cpSetColorList + +proc colorlistResize args \ +{ + global colorTables + send colorlist setList $colorTables resize +}; send colorlist addEventHandler colorlistResize ResizeRedirectMask + +proc cpSelectColor {widget cbtype selections indices} \ +{ + global colortable + foreach selection $selections { + send client setColormap $selection + } +}; send colorlist addCallback cpSelectColor + + +# Frame blink. +# ------------------------------- +send BRtext set label $blinkRate +send brBRtext set label $blinkRate + +proc cpSetBlinkRate {w args} \ +{ + global blinkRate + if {$w == "BRincrease" || $w == "brBRincrease"} { + if {$blinkRate < 0.01} { + set blinkRate 0.125 + } else { + set blinkRate [expr $blinkRate * 2.0] + } + } else { + set blinkRate [expr $blinkRate / 2.0] + if {$blinkRate < 0.01} { + set blinkRate 0 + } + } + send BRtext set label $blinkRate + send brBRtext set label $blinkRate +} +foreach w {BRincrease BRdecrease brBRincrease brBRdecrease} { + send $w addCallback cpSetBlinkRate +} + +proc cpSetBlinkFrame {widget args} \ +{ + global blinkFrames frames nframes + + set frame [send $widget get label] + if {$frame == " "} { + set frame 1 + } else { + incr frame + if {$frame > $nframes} { + set frame " " + } + } + send $widget set label $frame + + set blinkFrames {} + foreach i {1 2 3 4} { + set frame [send blinkFrame$i get label] + if {$frame != " "} { + lappend blinkFrames $frame + } + } +}; foreach i {1 2 3 4} {send blinkFrame$i addCallback cpSetBlinkFrame} + +proc cpBlink {widget args} \ +{ + global blinkRate blinkId + + if {$blinkRate < 0.01} { + send blinkButton set on False + send brBlinkButton set on False + blink + } elseif {($blinkId != 0) != [send $widget get on]} { + toggleBlink + } +} ; foreach w {blinkButton brBlinkButton} {send $w addCallback cpBlink} + + +proc cpAutoRegister {widget type state args} \ +{ + global auto_reg frame frames blinkFrames + global frameZoomX frameZoomY frameOffsetX frameOffsetY + + set auto_reg $state + if {$auto_reg == 1} { + send autoregButton set on True + send brAregButton set on True + } else { + send autoregButton set on False + send brAregButton set on False + } + + # Register the frames to zero the offsets. + send client registerFrames \{$blinkFrames\} + foreach f $frames { + set frameOffsetX($f) 0 + set frameOffsetY($f) 0 + } +} ; foreach w {autoregButton brAregButton} {send $w addCallback cpAutoRegister} + + +proc toggleAutoReg args \ +{ + global auto_reg + if {$auto_reg} { + cpAutoRegister autoregButton dummy 0 + set auto_reg 0 + } else { + cpAutoRegister autoregButton dummy 1 + set auto_reg 1 + } +} + +proc resetAutoReg args \ +{ + global auto_reg + if {$auto_reg} \ + toggleAutoReg +}; send initialize addCallback resetAutoReg + + +proc cpResetBlink args \ +{ + global blinkRate blinkFrames blinkIndex frames + global defaultBlinkRate + + foreach i {1 2 3 4} { + send blinkFrame$i set label " " + } + for {set i 1} {$i <= 16} {incr i} { + send brFrame$i set label $i + } + set blinkRate $defaultBlinkRate + send BRtext set label $blinkRate + send brBRtext set label $blinkRate + set blinkIndex 0 +} +send blinkReset addCallback cpResetBlink +send brReset addCallback cpResetBlink + +proc cpTraceBlink {name element op} \ +{ + upvar $name blinkId + send blinkButton set on [expr $blinkId != 0] + send brBlinkButton set on [expr $blinkId != 0] +}; trace variable blinkId w cpTraceBlink + +proc cpSetBlinkFrames {param old new} \ +{ + global blinkFrames frames + + set blinkFrames {} + foreach i $frames { + if {$i <= $new} { + lappend blinkFrames $i + } + } + cpResetBlink + set button 1 + for {set i 1} {$i <= $new} {incr i} { + if {$i <= 4} { + send blinkFrame$button set label $i + } + send brFrame$button set label $i + incr button + } +}; send nframes addCallback cpSetBlinkFrames + +proc cpRegisterFrames args \ +{ + global frames blinkFrames + global frameOffsetX frameOffsetY + + foreach f $frames { + set frameOffsetX($f) 0 + set frameOffsetY($f) 0 + } + send client registerFrames \{$blinkFrames\} +} +send registerButton addCallback cpRegisterFrames +send brRegButton addCallback cpRegisterFrames + +proc cpMatchFrames args \ +{ + global blinkFrames + send client matchFrames \{$blinkFrames\} +} +send matchButton addCallback cpMatchFrames +send brMatchButton addCallback cpMatchFrames + + +# Options buttons. +# ------------------------------- +proc cpSetPanner {widget args} \ +{ + setPanner [send $widget get on] +}; send pannerButton addCallback cpSetPanner + +proc cpTracePanner {name element op} \ +{ + upvar $name panner_enable + send pannerButton set on $panner_enable +}; trace variable panner_enable w cpTracePanner + +proc cpSetMagnifier {widget args} \ +{ + setMagnifier [send $widget get on] +}; send magnifierButton addCallback cpSetMagnifier + +proc cpTraceMagnifier {name element op} \ +{ + upvar $name magnifier_enable + send magnifierButton set on $magnifier_enable +}; trace variable magnifier_enable w cpTraceMagnifier + +proc cpSetCoordsBox {widget args} \ +{ + setTrack [send $widget get on] +}; send coordsBoxButton addCallback cpSetCoordsBox + +proc cpTraceCoordsBox {name element op} \ +{ + upvar $name track_enable + send coordsBoxButton set on $track_enable +}; trace variable track_enable w cpTraceCoordsBox + +proc cpSetWarnings args \ +{ + global warnings + set warnings [send warningsButton get on] +}; send warningsButton addCallback cpSetWarnings + +proc cpSetAutoscale args \ +{ + set value [send autoscaleButton get on] + send client setOption autoscale [expr {$value ? "True" : "False"}] +}; send autoscaleButton addCallback cpSetAutoscale + +proc cpTrackAutoscale {param old new} \ +{ + send autoscaleButton set on [true $new] +}; send autoscale addCallback cpTrackAutoscale + +proc cpSetAntialias args \ +{ + set value [send antialiasButton get on] + send client setOption antialias [expr {$value ? "True" : "False"}] +}; send antialiasButton addCallback cpSetAntialias + +proc cpTrackAntialias {param old new} \ +{ + send antialiasButton set on [true $new] +}; send antialias addCallback cpTrackAntialias + +proc cpSetTileFrames { widget type state args } \ +{ + global tile_frames tileOpt + + set value [send tileFramesButton get on] + if {$value} { + selectTileOrientation junk junk [tileSelToLabel $tileOpt] + } else { + selectTileOrientation junk junk Disabled + } + send client setOption tileFrames \ + [expr {$value ? "True" : "False"}] \{ $tile_frames \} +} ; send tileFramesButton addCallback cpSetTileFrames + +proc cpTrackTileFrames {param old new} \ +{ + send tileFramesButton set on [true $new] +}; send tileFrames addCallback cpTrackTileFrames + +proc tileFramesToggle args \ +{ + set value [send tileFramesButton get on] + send tileFramesButton set on [expr !$value] + cpSetTileFrames +} + diff --git a/vendor/x11iraf/ximtool/gui/panner.tcl b/vendor/x11iraf/ximtool/gui/panner.tcl new file mode 100644 index 00000000..fb374fa2 --- /dev/null +++ b/vendor/x11iraf/ximtool/gui/panner.tcl @@ -0,0 +1,536 @@ + +################################################################################ +# PANNER. The full frame mapped into the main image window is displayed at a +# reduced resolution in a marker (known as the panner window) within the main +# image window. The currently displayed region of the frame is indicated +# using a small marker within the panner window. This small marker may be +# moved or resized to pan or zoom the image in the main display window. +################################################################################ + +set panner_x 0 +set panner_y 0 +set panner_width 0 +set panner_height 0 +set prm_width 0 +set prm_height 0 + +set panner_enable 0 +set panner_pan_enable 0 +set panner_mag_enable 0 +set panner_region_enable 0 +set panner_mapping 0 + +# Panner window translations. +set pannerWinTranslations { \ + !Shift : m_rotateResize() + : m_moveResize() + !Shift : m_raise() m_markpos() + : m_raise() m_markposAdd() + : m_redraw() m_destroyNull() + : m_lower() + : call(pannerPanXY,$x,$y) + !Ctrl b: call(prevFrame,$name) + !Ctrl f: call(nextFrame,$name) + !Ctrl h: call(move_cursor,-1,0) + !Ctrl j: call(move_cursor,0,1) + !Ctrl k: call(move_cursor,0,-1) + !Ctrl l: call(move_cursor,1,0) + !Ctrl n: call(normalize) + !Ctrl c: call(cpZoomAction,centerFrame) + !Ctrl i: call(cpInvert) + !Ctrl m: call(toggleMagnifier) + !Ctrl p: call(togglePanner) + !Ctrl r: call(cpRegisterFrames) + !Ctrl s: call(cpMatchFrames) + !Alt 1: call(cpSetFrame,frame1) + !Alt 2: call(cpSetFrame,frame2) + !Alt 3: call(cpSetFrame,frame3) + !Alt 4: call(cpSetFrame,frame4) + !Ctrl 1: call(cpZoom,1,1,fixed) + !Ctrl 2: call(cpZoom,2,2,fixed) + !Ctrl 3: call(cpZoom,3,3,fixed) + !Ctrl 4: call(cpZoom,4,4,fixed) + !Ctrl 5: call(cpZoom,5,5,fixed) + !Ctrl 6: call(cpZoom,6,6,fixed) + !Ctrl 7: call(cpZoom,7,7,fixed) + !Ctrl 8: call(cpZoom,8,8,fixed) + !Ctrl 9: call(cpZoom,9,9,fixed) + BackSpace: m_deleteDestroy() + Delete: m_deleteDestroy() + : graphics-input() + : track-cursor() call(wcsUpdate,$x,$y) +} + + +# setPanner -- Turn the panner on or off. + +proc togglePanner args \ +{ + global panner_enable + + if {$panner_enable} { + setPanner 0 + } else { + setPanner 1 + } +} + + +proc setPanner {state} \ +{ + global winWidth winHeight frameWidth frameHeight + global frame panner_mapping pannerWinTranslations pannerArea + global panner_enable panner_region_enable panner_pan_enable + global pannerGeom panner_x panner_y panner_width panner_height + global last_compass + + if {$state} { + if {$panner_enable} \ + return + + # Determine where to place the panner. + set scale \ + [expr sqrt(double($pannerArea) / ($frameWidth * $frameHeight))] + set scaled_width [expr int($frameWidth * $scale) / 2 * 2 + 1] + set scaled_height [expr int($frameHeight * $scale) / 2 * 2 + 1] + set defGeom [format "%sx%s-5+5" $scaled_width $scaled_height] + send imagewin parseGeometry $pannerGeom $defGeom x y width height + + # Create the main panner window (marker). + send imagewin createMarker pannerWin \ + type rectangle \ + createMode noninteractive \ + width [expr $width / 2] \ + height [expr $height / 2] \ + x [expr $x + $width / 2] \ + y [expr $y + $height / 2] \ + lineColor 8 \ + highlightColor 8 \ + translations $pannerWinTranslations \ + visible true \ + sensitive true \ + autoRedraw true \ + activated true + + # Update the panner window position variables so that it comes up + # in the same place the next time. + + send pannerWin getRect boundary \ + panner_x panner_y panner_width panner_height + set pannerGeom [send imagewin getGeometry \ + $panner_x $panner_y $panner_width $panner_height] + + # Register callbacks. + send frame addCallback pannerMapImage + send frameRegion addCallback pannerSetRegion + send imagewin addCallback pannerImagewinResized resize + send resize addCallback pannerImagewinResized + + send pannerWin { + addCallback pannerMapImage moveResize; + addCallback pannerMoved moveResize; + addCallback pannerDestroy destroy; + addCallback pannerWinConstraint constraint; + } + + # Map display frame to panner window. + set panner_enable 1 + set panner_region_enable 1 + set panner_mapping [send imagewin nextMapping] + pannerMapImage init; send imagewin refreshMapping $panner_mapping + + # Redraw the compass if necessary. + send compass "setSensitive True ; set on $last_compass" + if { $last_compass } \ + drawCompass + + # Draw a marker in the panner window outlining displayed region. + send imagewin createMarker pannerRegionMarker \ + type box \ + createMode noninteractive \ + translations $pannerWinTranslations \ + lineColor green \ + highlightColor green \ + sensitive true + + # Fire up the panner region marker. + send client getSource raster sx sy snx sny + pannerSetRegion dummy dummy [concat $frame $sx $sy $snx $sny] + send pannerRegionMarker "\ + addCallback pannerPanImage moveResize; \ + addCallback pannerDestroy destroy; \ + addCallback pannerRegionConstraint constraint; \ + setAttributes visible true activated true; \ + redraw" + set panner_pan_enable 1 + + } elseif {$panner_enable} { + pannerDestroy + } +} + + +# pannerDestroy -- Delete the panner. + +proc pannerDestroy args \ +{ + global panner_enable panner_region_enable panner_pan_enable + global panner_mapping + + if {$panner_enable} { + set panner_enable 0 + set panner_pan_enable 0 + set panner_region_enable 0 + + send imagewin freeMapping $panner_mapping + send imagewin deleteCallback pannerImagewinResized + send resize deleteCallback pannerImagewinResized + send frame deleteCallback pannerMapImage + send frameRegion deleteCallback pannerSetRegion + + if [send server queryObject pannerRegionMarker] { + send pannerRegionMarker destroy + } + if [send server queryObject pannerWin] { + send pannerWin destroy + } + + # Disable the compass. + send compass "setSensitive False ; set on False" + } +} + + +# pannerMapImage -- Map the current display frame into the panner window. +# Called when the frame changes or the panner window is moved or resized. +# The panner window displays a small dezoomed version of the full frame. + +proc pannerMapImage args \ +{ + global panner_enable frame + global panner_mapping + + if {!$panner_enable || $frame == 0} \ + return + + set raster [send client getRaster] + send pannerWin getRect interior dx dy dnx dny + send imagewin queryRaster $raster width height + + if [send imagewin activeMapping $panner_mapping] { + send imagewin raiseMapping $panner_mapping + } + send imagewin setMapping $panner_mapping 0 \ + $raster pixel 0 0 $width $height \ + 0 pixel $dx $dy $dnx $dny +} + + +# pannerSetRegion -- Adjust the pannerWin region marker to outline the +# region displayed in the main display window. This is called in response +# to a frameRegion event when the main display mapping changes, e.g. when +# the frame changes or the user zooms or pans the main window. The region +# marker is moved and resized to reflect the new view. + +proc pannerSetRegion {param old new} \ +{ + global panner_enable panner_region_marker + global panner_region_enable panner_pan_enable + global frame frameWidth frameHeight prm_width prm_height + + if {!$panner_enable || !$panner_region_enable || $frame == 0} \ + return + + # new: frame sx sy snx sny + set src_frame [lindex $new 0] + set sx [lindex $new 1]; set snx [lindex $new 3] + set sy [lindex $new 2]; set sny [lindex $new 4] + + if {$src_frame != $frame} \ + return + + send pannerWin getRect interior px py pnx pny + + set x [expr ($sx + $snx/2.0) / $frameWidth * $pnx + $px] + set y [expr ($sy + $sny/2.0) / $frameHeight * $pny + $py] + set width [expr ($snx/2.0) / $frameWidth * $pnx + 1] + set height [expr ($sny/2.0) / $frameHeight * $pny + 1] + + set pan_save $panner_pan_enable; set panner_pan_enable 0 + set panner_region_enable 0 + + send pannerRegionMarker "\ + markpos; \ + setAttributes x $x y $y width $width height $height; \ + redraw; raise" + send pannerRegionMarker getAttributes width prm_width height prm_height + + set panner_region_enable 1 + set panner_pan_enable $pan_save +} + + +# pannerPanImage -- Pan or zoom the image in the main image window. This is +# called when the user moves the region marker within the panner window. + +proc pannerPanImage {marker event position} \ +{ + global panner_pan_enable + global winWidth winHeight + global prm_width prm_height + global frame auto_reg frameOffsetX frameOffsetY + + if {!$panner_pan_enable} \ + return + + # position: x y width height. + set new_width [lindex $position 2] + set new_height [lindex $position 3] + + # region: type raster x y width height. + set region [send pannerRegionMarker getRegion unmap] + set x [expr [lindex $region 2] + 1]; set width [lindex $region 4] + set y [expr [lindex $region 3] + 1]; set height [lindex $region 5] + + set panner_pan_enable 0 + if {$new_width == $prm_width && $new_height == $prm_height} { + send client pan $x $y + } else { + set xscale [expr ($winWidth / 2.0) / $width] + set yscale [expr ($winHeight / 2.0) / $height] + if {$auto_reg == 1} { + send client zoomAbs $xscale $yscale $x $y \ + $frameOffsetX($frame) $frameOffsetY($frame) + } else { + send client zoom $xscale $yscale $x $y + } + } + set panner_pan_enable 1 +} + + +# pannerPanXY -- Pan to the point X,Y in the panner window coordinate +# system. Called when the user clicks MB2 in the panner window. + +proc pannerPanXY {x y} \ +{ + send imagewin unmapPixel $x $y raster rx ry + send client pan $rx $ry +} + + +# pannerMoved -- Called when the user moves the panner window. We need to +# move the region marker to the new window location and record the new location +# so that the window will come up in the same place if closed and reopened. + +proc pannerMoved {marker event position} \ +{ + global winWidth winHeight + global frame panner_pan_enable pannerGeom + global panner_x panner_y panner_width panner_height + + # Move the region marker to the new location. + set pan_save $panner_pan_enable; set panner_pan_enable 0 + send client getSource raster sx sy snx sny + pannerSetRegion dummy dummy [concat $frame $sx $sy $snx $sny] + set panner_pan_enable $pan_save + + # Update the panner window position variables so that it comes up + # in the same place the next time. + + send pannerWin getRect boundary \ + panner_x panner_y panner_width panner_height + set pannerGeom [send imagewin getGeometry \ + $panner_x $panner_y $panner_width $panner_height] + + drawCompass + + send pannerRegionMarker raise +} + + +# pannerWinConstraint -- Called when the panner window is moved, resized, or +# rotated. Constrain the panner window to remain within the image window; +# rotation is not permitted. + +proc pannerWinConstraint {marker event attributes} \ +{ + global winWidth winHeight + global panner_width panner_height + + set width $panner_width + set height $panner_height + set constraints [list {}] + + # Check the width and height first as we need these below. + foreach i $attributes { + set new [lindex $i 2] + switch [lindex $i 0] { + width { set ww [expr $winWidth / 2] + if {$new > $ww} { + lappend constraints "width $ww" + set width $ww + } else { + set width $new + } + } + height { set wh [expr $winHeight / 2] + if {$new > $wh} { + lappend constraints "height $wh" + set height $wh + } else { + set height $new + } + } + rotangle { lappend constraints "rotangle 0" + } + } + } + + # Constrain X and Y. + foreach i $attributes { + set new [lindex $i 2] + switch [lindex $i 0] { + x { set pw [expr $width / 2] + if {$new < $pw} { + lappend constraints "x $pw" + } elseif {$new > $winWidth - $pw} { + lappend constraints "x [expr $winWidth - $pw]" + } + } + y { set ph [expr $height / 2] + if {$new < $ph} { + lappend constraints "y $ph" + } elseif {$new > $winHeight - $ph} { + lappend constraints "y [expr $winHeight - $ph]" + } + } + } + } + + return $constraints +} + + +# pannerRegionConstraint -- Called when the region marker in the panner +# window is moved, resized, or rotated. + +proc pannerRegionConstraint {marker event attributes} \ +{ + global winWidth winHeight + global frame + + set constraints [list {}] + send pannerWin getRect interior p_x p_y p_width p_height + send pannerRegionMarker getAttributes width rwidth height rheight + + # Since the panner region marker is a box marker x,y and width,height + # will not both change in the same call, so we can process them all + # independently. + + foreach i $attributes { + set new [lindex $i 2] + + switch [lindex $i 0] { + x { set left [expr $p_x + $rwidth + 1] + set right [expr $p_x + $p_width - $rwidth - 1] + if {$new < $left} { + lappend constraints "x $left" + } elseif {$new > $right} { + lappend constraints "x $right" + } + } + y { set top [expr $p_y + $rheight + 1] + set bottom [expr $p_y + $p_height - $rheight - 1] + if {$new < $top} { + lappend constraints "y $top" + } elseif {$new > $bottom} { + lappend constraints "y $bottom" + } + } + width { set ww [expr $winWidth / 2] + if {$new > $ww / 2} { + lappend constraints "width $ww" + } + } + height { set wh [expr $winHeight / 2] + if {$new > $wh / 2} { + lappend constraints "height $wh" + } + } + rotangle { lappend constraints "rotangle 0" + } + } + } + drawCompass + + return $constraints +} + + +# pannerImagewinResized -- If the display window is resized make the panner +# track the corner. + +proc pannerImagewinResized args \ +{ + global panner_enable panner_mapping + global pannerGeom panner_x panner_y panner_width panner_height + global frame + + if {$panner_enable} { + set old_x $panner_x; set old_width $panner_width + set old_y $panner_y; set old_height $panner_height + + eraseCompass + + # Get new location of panner window. + set defGeom [format "%sx%s-5+5" $panner_width $panner_height] + send imagewin parseGeometry $pannerGeom $defGeom x y width height + + # Reposition the marker. + send pannerWin "\ + markpos; \ + setAttributes \ + x [expr $x + $width / 2] \ + y [expr $y + $height / 2] \ + width [expr $width / 2] \ + height [expr $height / 2]; \ + redraw" + + # Update the panner window position variables so that it comes up + # in the same place the next time. + send pannerWin getRect boundary \ + panner_x panner_y panner_width panner_height + set pannerGeom [send imagewin getGeometry \ + $panner_x $panner_y $panner_width $panner_height] + + # Make sure the panner window is on top. + send imagewin raiseMapping $panner_mapping + + # Refresh the panner window if it did not move. + if {$panner_x == $old_x && $panner_y == $old_y && + $panner_width == $old_width && $panner_height == $old_height} { + send imagewin refreshMapping $panner_mapping + } + + drawCompass + } +} + + +# resetPanner -- Reinitialize the panner. + +proc resetPanner {param old new} \ +{ + global pannerGeom displayPanner + if {$new == "done"} { + setPanner [true $displayPanner] + } else { + setPanner 0 + if {$new != "startup"} { + set pannerGeom -5+5 + } + } +}; send initialize addCallback resetPanner + + diff --git a/vendor/x11iraf/ximtool/gui/param.obj b/vendor/x11iraf/ximtool/gui/param.obj new file mode 100644 index 00000000..405ec018 --- /dev/null +++ b/vendor/x11iraf/ximtool/gui/param.obj @@ -0,0 +1,33 @@ + +set Objects(parameters) { \ + toplevel Parameter ximtool\ + ximtool Parameter alert\ + ximtool Parameter initialize\ + ximtool Parameter resize\ + ximtool Parameter frame\ + ximtool Parameter nframes\ + ximtool Parameter frameSize\ + ximtool Parameter frameRegion\ + ximtool Parameter frameView\ + ximtool Parameter frameTitle\ + ximtool Parameter frameFit\ + ximtool Parameter enhancement\ + ximtool Parameter colortables\ + ximtool Parameter cmfocus\ + ximtool Parameter autoscale\ + ximtool Parameter antialias\ + ximtool Parameter tileFrames\ + ximtool Parameter cursorMode\ + ximtool Parameter xflip\ + ximtool Parameter yflip\ + ximtool Parameter printerList\ + ximtool Parameter printOptions\ + ximtool Parameter loadOptions\ + ximtool Parameter saveOptions\ + ximtool Parameter tileOptions\ + ximtool Parameter filelist\ + ximtool Parameter help\ + ximtool Parameter info\ + ximtool Parameter ism_msg\ +} + diff --git a/vendor/x11iraf/ximtool/gui/pixtab.obj b/vendor/x11iraf/ximtool/gui/pixtab.obj new file mode 100644 index 00000000..1da660a2 --- /dev/null +++ b/vendor/x11iraf/ximtool/gui/pixtab.obj @@ -0,0 +1,30 @@ + +set Objects(pixel_table) { \ + toplevel TopLevelShell pixel_panel\ +\ + pixel_panel Layout pixel_table\ + pixel_table Frame pixtabMenuFrame\ + pixtabMenuFrame Layout pixtabMenuBar\ + pixtabMenuBar MenuButton pixtabSize\ + pixtabMenuBar Command pixtabHelp\ + pixtabMenuBar Command pixtabClose\ +\ + pixel_table Frame pixtabFrame\ + pixtabFrame Porthole ptPort\ + ptPort Layout ptLayout\ + ptLayout Frame ptColFrame\ + ptColFrame MultiList ptColLabs\ + ptLayout Frame ptRowFrame\ + ptRowFrame MultiList ptRowLabs\ + ptLayout Frame ptFrame\ + ptFrame MultiList pixtab\ +\ + ptLayout Label meanLabel\ + ptLayout Frame meanFrame\ + meanFrame Label meanValue\ +\ + ptLayout Label sigLabel\ + ptLayout Frame sigFrame\ + sigFrame Label sigValue\ +} + diff --git a/vendor/x11iraf/ximtool/gui/pixtab.res b/vendor/x11iraf/ximtool/gui/pixtab.res new file mode 100644 index 00000000..74001dd0 --- /dev/null +++ b/vendor/x11iraf/ximtool/gui/pixtab.res @@ -0,0 +1,128 @@ + +set Resources(pixel_table) { \ + + *pixel_panel.title: Image Pixel Table + *pixel_panel*SimpleMenu.borderWidth: 1 + *pixel_panel*SimpleMenu.borderColor: black + *pixel_panel*SimpleMenu.foreground: White + *pixel_panel*SimpleMenu.background: SteelBlue + + *pixtabMenuBar*borderWidth: 0 + *pixtabMenuBar*Command.internalHeight: 4 + *pixtabMenuBar*Command.internalWidth: 12 + *pixtabMenuBar.layout: vertical { \ + 5 \ + horizontal { \ + 5 \ + pixtabSize 10 < +inf -10> pixtabHelp 5 pixtabClose \ + 7 \ + } \ + 5 \ + } + *pixtabSize.label: Size + *pixtabSize.menuName: pixtabMenu + *pixtabHelp.label: Help + *pixtabHelp.sensitive: False + *pixtabClose.label: Dismiss + + *pixtabMenuFrame.frameType: raised + *pixtabMenuFrame.frameWidth: 2 + *pixel_table.layout: vertical { \ + 1 \ + pixtabMenuFrame < +inf -inf * > \ + 1 \ + pixtabFrame < +inf -inf * +inf -inf > \ + 1 \ + } + + + *pixtabFrame.frameType: raised + *pixtabFrame.frameWidth: 0 + *pixtabFrame*borderWidth: 0 + *pixtabFrame*font: 6x10 + *pixtabFrame*MultiList.font: -*-helvetica-medium-r-normal-*-10-* + *pixtabFrame*Label.font: -*-helvetica-medium-r-normal-*-10-* + *pixtabFrame*TextToggle.font: -*-helvetica-medium-r-normal-*-10-* + + *pixtabFrame*MultiList.forceColumns: True + *pixtabFrame*MultiList.defaultColumns: 5 + *pixtabFrame*MultiList.shadeSurplus: False + *pixtabFrame*MultiList.borderWidth: 0 + *pixtabFrame*MultiList.rowHeight: 25 + *pixtabFrame*MultiList.rowSpacing: 7 + *pixtabFrame*MultiList.internalWidth: 7 + *pixtabFrame*MultiList.internalHeight: 4 + *pixtabFrame*MultiList.width: 410 + *pixtabFrame*MultiList.height: 160 + *pixtabFrame*MultiList.columnWidth: 50 + *pixtabFrame*MultiList.columnSpacing: 2 + *pixtabFrame*MultiList.maxSelectable: 1 + *pixtabFrame*MultiList.highlightForeground: red + *pixtabFrame*MultiList.highlightBackground: #c4c4c4 + *pixtabFrame*MultiList.background: #c4c4c4 + *pixtabFrame*TextToggle.background: #c4c4c4 + + *pixtabFrame*Label.width: 00 + !*pixtabFrame*Label.resize: False + + *meanFrame.frameWidth: 2 + *meanFrame.frameType: chiseled + *meanFrame.outerOffset: 0 + *meanFrame.width: 120 + *meanLabel.label: Mean: + *meanValue.label: + *meanValue.resize: False + + *sigFrame.frameWidth: 2 + *sigFrame.frameType: chiseled + *sigFrame.outerOffset: 0 + *sigFrame.width: 120 + *sigLabel.label: Stdev: + *sigValue.label: + *sigValue.resize: False + + *ptColFrame.frameWidth: 0 + *ptColFrame.outerOffset: 0 + *ptRowFrame.frameWidth: 0 + *ptRowFrame.outerOffset: 0 + + *pixtabFrame*ptColLabs.width: 410 + *pixtabFrame*ptColLabs.height: 23 + *pixtabFrame*ptColLabs.defaultColumns: 5 + *pixtabFrame*ptColLabs.forceColumns: True + *pixtabFrame*ptColLabs.columnWidth: 50 + *pixtabFrame*ptColLabs.columnSpacing: 2 + *pixtabFrame*ptRowLabs.width: 60 + *pixtabFrame*ptRowLabs.height: 110 + *pixtabFrame*ptRowLabs.defaultColumns: 1 + *pixtabFrame*ptRowLabs.forceColumns: True + *pixtabFrame*ptRowLabs.verticalList: True + *pixtabFrame*ptRowLabs.columnWidth: 50 + *pixtabFrame*ptRowLabs.columnSpacing: 2 + *pixtabFrame*pixtab.verticalList: True + + *ptFrame.outerOffset: 0 + *ptFrame.innerOffset: 0 + *ptFrame.borderWidth: 0 + *ptFrame.frameWidth: 1 + *ptFrame.frameType: sunken + *ptLayout.layout: vertical { \ + 3 \ + horizontal { 65 ptColFrame < +inf -inf * > 5 } \ + 1 \ + horizontal { \ + vertical { ptRowFrame< * +inf -inf > 5 } \ + 1 \ + vertical { ptFrame } \ + 5 \ + } \ + 1 \ + horizontal { \ + 2 < +inf > \ + meanLabel meanFrame < +inf -inf * > 2 \ + sigLabel sigFrame < +inf -inf * > \ + 10 \ + } \ + } +} + diff --git a/vendor/x11iraf/ximtool/gui/pixtab.tcl b/vendor/x11iraf/ximtool/gui/pixtab.tcl new file mode 100644 index 00000000..d23827c9 --- /dev/null +++ b/vendor/x11iraf/ximtool/gui/pixtab.tcl @@ -0,0 +1,144 @@ + +################################################################################ +# Pixel Table Callbacks. +################################################################################ + +set psize 5 +set pixtab_up 0 +set hdr_up 0 + +createMenu pixtabMenu pixtabSize { + { "3x3" f.exec { pixtabSetSize 3 } } + { "5x5" f.exec { pixtabSetSize 5 } } + { "7x7" f.exec { pixtabSetSize 7 } } + { "9x9" f.exec { pixtabSetSize 9 } } +} + + +proc updatePixelTable { cx cy wx wy args } \ +{ + global psize pixtab_up ism_enable + + if {! $pixtab_up} \ + return + if {$ism_enable} \ + return + + set delta [expr int($psize / 2) ] + set x1 [expr ($wx - $delta) ] + set x2 [expr ($wx + $delta) ] + set y1 [expr ($wy - $delta) ] + set y2 [expr ($wy + $delta) ] + set c [ expr int($psize / 2) ] + + + # Update the table labels. + set x $x1 ; set xl {} + set y $y2 ; set yl {} + for {set i 0} {$i < $psize} {incr i} { + lappend xl [format " %10.1f " $x] ; set x [ expr ($x + 1.) ] + lappend yl [format " %10.1f " $y] ; set y [ expr ($y - 1.) ] + } + send ptColLabs setList $xl ; send ptColLabs highlight $c + send ptRowLabs setList $yl ; send ptRowLabs highlight $c + + # Update the pixel table itself. + #set pix [ send client getPixels $cx $cy $psize True ] + + set x0 [ expr int($cx - $psize / 2. + 0.5)] + set y0 [ expr int($cy - $psize / 2. + 0.5)] + set pix [ send client getPixels $x0 $y0 $psize $psize ] + send pixtab setList [ lrange $pix 4 end ] + set c [ expr int(($psize * $psize) / 2) ] + send pixtab highlight $c + + # Update the pixtab stats. + set sum 0.0 + set sum2 0.0 + set npix [ expr ($psize * $psize) ] + set nend [ expr ($psize * $psize) + 4 ] + for {set i 4} {$i < $nend} {incr i} { + set val [lindex $pix $i] + catch { + set sum [ expr ($sum + $val) ] + set sum2 [ expr ($sum2 + $val * $val) ] + } + } + + set mean [ expr ($sum / ($npix * 1.0)) ] + set var [ expr (($sum2 - $sum * $mean) / ($npix - 1)) ] + if {$var <= 0.0} { + set stdev 0.0 + } else { + set stdev [ expr sqrt ($var) ] + } + send meanValue set label [ format "%10.2f" $mean ] + send sigValue set label [ format "%10.4f" $stdev ] +} + + +proc pixtabClose args \ +{ + global pixtab_up + + send pixel_panel unmap + send pixelTable set on False + set pixtab_up 0 + catch { send wcspix set psize 0 } +} ; send pixtabClose addCallback pixtabClose + + +proc pixtabSetSize { size args } \ +{ + global psize ism_enable + + set c [ expr int(($psize * $psize) / 2) ] + send pixtab highlight $c + + # Now reset the window size. + switch $size { + 3 { send pixel_panel "resize 265 175" + send pixtab "set width 180 ; set height 60" + } + 5 { send pixel_panel "resize 375 215" + send pixtab "set width 290 ; set height 105" + } + 7 { send pixel_panel "resize 495 265" + send pixtab "set width 410 ; set height 150" + } + 9 { send pixel_panel "resize 610 310" + send pixtab "set width 525 ; set height 195" + } + } + + send pixtab set defaultColumns $size + send ptColLabs set defaultColumns $size + set psize $size + + # Notify the ISM we've changed size. + if ($ism_enable) { + catch { send wcspix set psize $psize } + } + + send imagewin getCursorPos xc yc + updatePixelTable $xc $yc $xc $yc + +} ; pixtabSetSize $psize + + +proc ptPixelTable {widget type state args} \ +{ + global pixtab_up psize + + set pixtab_up $state + if {$pixtab_up == 1} { + send pixelTable set on True + send pixel_panel map + catch { send wcspix set psize $psize } + } else { + send pixelTable set on False + send pixel_panel unmap + catch { send wcspix set psize 0 } + } +}; send pixelTable addCallback ptPixelTable + diff --git a/vendor/x11iraf/ximtool/gui/plots.tcl b/vendor/x11iraf/ximtool/gui/plots.tcl new file mode 100644 index 00000000..9ea56c8b --- /dev/null +++ b/vendor/x11iraf/ximtool/gui/plots.tcl @@ -0,0 +1,667 @@ + + +################################################################################ +# Cut-plot handling routines. +################################################################################ + +set doHcut 0 +set doVcut 0 +set hstate 0 +set vstate 0 +set plotSpeed 1 ; send plotSpeed set on True +set curJump 1 ; send curJump set on True +set curTrack 1 ; send curTrack set on True + +set cutXPos [expr "$winWidth / 2"] +set cutYPos [expr "$winHeight / 2"] +set cutXScale 1.0 +set cutYScale 1.0 + + + +# Change the cursor to the crosshair when in the plot +proc cutCursor { widget event args } \ +{ + global doHcut doVcut curTrack + + if {! $curTrack} \ + return + + if { $event == "enterNotify" } { + send $widget setCursorType ginMode + + # Disable the update of the graph we're in while in the plot window. + if {$widget == "hcutPlot"} { set doHcut 0 } else { set doVcut 0 } + } elseif { $event == "leaveNotify" } { + send $widget setCursorType idle + + # Enable the update of the graph we're leaving. + if {$widget == "hcutPlot"} { set doHcut 1 } else { set doVcut 1 } + } + cutPlotRefresh +} +foreach w {hcutPlot vcutPlot} { + send $w addEventHandler cutCursor enterWindowMask + send $w addEventHandler cutCursor leaveWindowMask +} + +proc cutPlotRefresh args \ +{ + global doHcut doVcut cutXPos cutYPos + + if {$doHcut} { + send hcutPlot clearScreen + hcutInit + send hcutAxes1 redraw ; send hcutAxes2 redraw + cutPlots $cutXPos $cutYPos + } + if {$doVcut} { + send vcutPlot clearScreen + vcutInit + send vcutAxes1 redraw ; send vcutAxes2 redraw + cutPlots $cutXPos $cutYPos + } +} ; send imagewin addEventHandler cutPlotRefresh enterWindowMask + +proc cutPlotRedraw args \ +{ + global doHcut doVcut cutXPos cutYPos + + if {$doHcut} { + send hcutAxes1 redraw ; send hcutAxes2 redraw + cutPlots $cutXPos $cutYPos + } + if {$doVcut} { + send vcutAxes1 redraw ; send vcutAxes2 redraw + cutPlots $cutXPos $cutYPos + } +} + + +# Disable the options when we first start up. +#send plotOpts "set height 1 ; set width 1 ; unmap" +foreach w {plotOpts hcutFrame vcutFrame} { send $w unmap } + + +# Cut-Plot options callback. +proc doPlotOpts { widget type state args } \ +{ + global plotSpeed curJump curTrack doHcut doVcut + global cutXPos cutYPos + + if {$state} { set not 0 } else { set not 1 } + + switch $widget { + plotSpeed { if {$state} { + send plotAccurate set on 0 ; send plotImgPix set on 0 + } else { + send plotSpeed set on True ; + } + set plotSpeed $not + } + plotAccurate { if {$state} { + send plotImgPix set on 0 ; send plotSpeed set on 0 + } else { + send plotSpeed set on True ; + } + set plotSpeed $not + } + plotImgPix { if {$state} { + send plotAccurate set on 0 ; send plotSpeed set on 0 + } else { + send plotSpeed set on True ; + } + set plotSpeed $not + } + curJump { send curSmooth set on $not ; set curJump $state } + curSmooth { send curJump set on $not ; set curJump $not } + curTrack { set curTrack $state } + } + + # Redraw the plots right away. + if {$widget == "plotSpeed" || $widget == "plotAccurate"} { + cutPlots $cutXPos $cutYPos + } +} +foreach w { plotSpeed plotAccurate plotImgPix curJump curSmooth curTrack } { + send $w addCallback doPlotOpts +} + + +# Toggle the display of the horizontal or vertical cut plot windows. + +proc cutPlotToggle { widget type state args } \ +{ + global doHcut doVcut cutXPos cutYPos hstate vstate + set debug 0 + + set hstate [send hcut get state] + set vstate [send vcut get state] + set w [send display get width] + set h [send display get height] + + if {$debug} { print " " ; print [format "display: %d x %d\n" $w $h] } + + if {$widget == "hcut"} { + set hfw [expr [send hcutFrame get width] - 4] + set hpw [send hcutPlot get width] + if {$state} { + # Enable the plot and resize the main window + if {$vstate} { + send plotOpts set width 134 + } + send hcutFrame "set width $hpw ; set height 132; map" + send hcutPlot "set width $hfw ; set height 128" + send display "set height [ expr ($h + 132) ]; set width $w" + drawHcutAxes 1 + setHcutCursor 1 + if {$vstate} { + send plotOpts "set height 134 ; map" + vcutInit + } + hcutInit ;# Initialize the plot. + } else { + # Disable the plot and resize the main window + setHcutCursor 0 + drawHcutAxes 0 + send hcutPlot clearScreen + send plotOpts "unmap; set height 4" + send hcutFrame "unmap; set width $hfw; set height 4" + send plotOpts "set width 4" + send display "set height [ expr ($h - 128) ] ; set width $w" + if {$vstate} { + vcutInit + } + } + set doHcut $state + } else { + set vfh [expr [send vcutFrame get height] - 4] + set vph [send vcutPlot get height] + if {$state} { + # Enable the plot and resize the main window + if {$hstate} { + send plotOpts set height 134 + } + send vcutFrame "set height $vph ; set width 132 ; map" + send vcutPlot "set height $vfh ; set width 128" + send display "set height $h; set width [ expr ($w + 132) ]" + drawVcutAxes 1 + setVcutCursor 1 + if {$hstate} { + send plotOpts "set height 134 ; set width 134; map" + hcutInit + } + vcutInit ;# Initialize the plot. + } else { + # Disable the plot and resize the main window + setVcutCursor 0 + drawVcutAxes 0 + send vcutPlot clearScreen + send plotOpts "unmap; set width 4" + send vcutFrame "unmap; set height $vfh; set width 4" + send plotOpts "set height 4" + send display "set width [ expr ($w - 128) ] ; set height $h" + if {$hstate} { + hcutInit + } + } + set doVcut $state + } + + if {$debug} { + print [format " hFrame: %d x %d\n" \ + [send hcutFrame get width] [send hcutFrame get height] ] + print [format " hPlot: %d x %d\n" \ + [send hcutPlot get width] [send hcutPlot get height] ] + print [format " vFrame: %d x %d\n" \ + [send vcutFrame get width] [send vcutFrame get height] ] + print [format " vPlot: %d x %d\n" \ + [send vcutPlot get width] [send vcutPlot get height] ] + print [format "state: %d %d\n" $hstate $vstate] + print [format "display: %d x %d\n" $w $h] + } + + cutPlots $cutXPos $cutYPos +} ; foreach w { hcut vcut } { send $w addCallback cutPlotToggle } + + +# Draw the cut plots. +proc cutPlots { xpos ypos args } \ +{ + global doHcut doVcut cutXPos cutYPos hstate vstate + + catch { + if {$doHcut} { + drawHcutIndicator $xpos + if {$hstate} { plotHcut $xpos $ypos } + } + if {$doVcut} { + drawVcutIndicator $xpos + if {$vstate} { plotVcut $xpos $ypos } + } + } + + set cutXPos $xpos ; set cutYPos $ypos +} + + +################################################################################ +# Horizontal Cut-Plot Routines +################################################################################ + +set hcutVec {} + +# Initiailize the horizontal cut-plot +proc hcutInit args \ +{ + global logz cutXScale winWidth cutXPos cutYPos + + # Just get some dummy pixels, we only want the z1/z2 values so we can + # initialize the labels. + set xp [expr [send imagewin get width] / 2 ] + set yp [expr [send imagewin get height] / 2 ] + set pix [send client getPixels $xp $yp 2 2 ] + set z1 [lindex $pix 0] + set z2 [lindex $pix 1] + + send hcutPlot getPhysRes xr yr + send hcutPlot setLogRes $xr $yr + + set logx [send imagewin get width] + set logz [expr ($z2 - $z1)] + set cutXScale [expr ($xr * 1.0) / ($logx * 1.0)] + + # Initialize the labels. + send vcutPlot "setColorIndex 6" + drawHcutLabels $z1 $z2 +} + +# Draw the horizontal cut-plot. +proc plotHcut { xpos ypos } \ +{ + global doHcut cutXScale + global hcutVec cutXPos plotSpeed + + + if { ($xpos == 0 && $ypos == 0) || ! $doHcut } \ + return + + # Do the horizontal cut plot. + set width [send imagewin get width] + if {$plotSpeed} { + set pix [send client getPixels 0 $ypos $width 1 2 5 $cutXScale] + } else { + set pix [send client getPixels 0 $ypos $width 1 2 1 $cutXScale] + } + set z1 [lindex $pix 0] + set z2 [lindex $pix 1] + set vec [lrange $pix 2 end] + + # Erase the last plot rather than clear the screen and redraw + # the new vector. + send hcutPlot setColorIndex background + send hcutPlot drawPolyline $hcutVec + send hcutPlot setColorIndex foreground + send hcutPlot drawPolyline $vec + set hcutVec $vec ;# save for later erasure + + # Mark the cursor position. + drawHcutIndicator $xpos + + # Minimize the screen refreshes to speed things up. + if { [expr "$ypos % 3"] == 0} { + catch { + drawHcutLabels $z1 $z2 ;# redraw the labels + } + send hcutAxes1 redraw ;# redraw the axes markers + send hcutAxes2 redraw + } +} + + +# Create markers to indicate axes on the horizontal cut-plot. +proc drawHcutAxes { state } \ +{ + if {$state} { + send hcutPlot createMarker hcutAxes1 \ + type box \ + createMode noninteractive \ + lineColor gray60 \ + lineStyle 0 \ + x 1 \ + y 60 \ + height 30 \ + width 4096 \ + activated True \ + visible True \ + sensitive False + send hcutPlot createMarker hcutAxes2 \ + type box \ + createMode noninteractive \ + lineColor gray60 \ + lineStyle 0 \ + x 1 \ + y 1 \ + height 60 \ + width 4096 \ + activated True \ + visible True \ + sensitive False + } else { + send hcutAxes1 destroy ; send hcutAxes2 destroy + } +} + +# Create a marker to be used as the cursor indicator. +proc setHcutCursor { state } \ +{ + if {$state} { + set pts { {252 10} {260 10} {256 1} } + + send hcutPlot createMarker hcutCursor \ + type polygon \ + createMode noninteractive \ + lineColor black \ + fill True \ + fillColor yellow \ + x 256 \ + y 12 \ + width 8 \ + height 10 \ + knotSize 0 \ + activated True \ + visible False \ + sensitive False + send hcutCursor setVertices $pts + send hcutCursor set visible True + + } else { + send hcutCursor destroy + } +} + +# Label the axes on the horizontal cut plot. +proc drawHcutLabels { z1 z2 } \ +{ + set mid [expr "($z2-$z1)/2.0+$z1"] + set low [expr "($mid-$z1)/2.0+$z1"] + set high [expr "($z2-$mid)/2.0+$mid"] + + send hcutPlot "setColorIndex 6 ; \ + drawAlphaText 2 10 [format "%.1f" $z2] ; \ + drawAlphaText 2 34 [format "%.1f" $high] ; \ + drawAlphaText 2 64 [format "%.1f" $mid] ; \ + drawAlphaText 2 94 [format "%.1f" $low] ; \ + drawAlphaText 2 120 [format "%.1f" $z1]" +} + +# Draw the cursor position indicator on the horizontal cut plot. +proc drawHcutIndicator { xpos } \ +{ + global cutXScale cutXPos + + send hcutCursor move [expr ($xpos * $cutXScale)] 12 + set cutXPos $xpos +} + +# Track the cursor while in the cut-graph window. +proc hcutWCSUpdate { x y args } \ +{ + global cutYPos curTrack + if {$curTrack} { + wcsUpdate $x $cutYPos + } + drawHcutIndicator $x +} + + + + +################################################################################ +# Vertical Cut-Plot Routines +################################################################################ + +set vcutVec {} + +# Initiailize the vertical cut-plot +proc vcutInit args \ +{ + global cutYScale winWidth cutXPos cutYPos + + # Just get some dummy pixels, we only want the z1/z2 values so we can + # initialize the labels. + set xp [expr [send imagewin get width] / 2 ] + set yp [expr [send imagewin get height] / 2 ] + set pix [send client getPixels $xp $yp 2 2 ] + set z1 [lindex $pix 0] + set z2 [lindex $pix 1] + + send vcutPlot getPhysRes xr yr + send vcutPlot setLogRes $xr $yr + + set logy [send imagewin get height] + set logz [expr ($z2 - $z1)] + set cutYScale [expr ($yr * 1.0) / ($logy * 1.0)] + + # Initialize the labels. + send vcutPlot "setColorIndex 6; reset" + drawVcutLabels $z1 $z2 +} + +# Draw the horizontal cut-plot. +proc plotVcut { xpos ypos } \ +{ + global doVcut cutYScale + global vcutVec cutXPos cutYPos plotSpeed + + + if { ($xpos == 0 && $ypos == 0) || ! $doVcut } \ + return + + # Do the vertical cut plot. + set height [send imagewin get height] + if {$plotSpeed} { + set pix [send client getPixels $xpos 0 1 $height 3 5 $cutYScale] + } else { + set pix [send client getPixels $xpos 0 1 $height 3 1 $cutYScale] + } + set z1 [lindex $pix 0] + set z2 [lindex $pix 1] + set vec [lrange $pix 2 end] + + # Draw the vector. + send vcutPlot setColorIndex background + send vcutPlot drawPolyline $vcutVec + send vcutPlot setColorIndex foreground + send vcutPlot drawPolyline $vec + set vcutVec $vec ;# save for later erasure + + # Mark the cursor position. + drawVcutIndicator $ypos + + # Minimize the screen refreshes to speed things up. + if { [expr "$xpos % 3"] == 0} { + catch { + drawVcutLabels $z1 $z2 ;# redraw the labels + } + send vcutAxes1 redraw ;# redraw the axes markers + send vcutAxes2 redraw + } +} + +# Erase the last plot rather than clear the screen and redraw it all. The +# erase is done by redrawing the last vector in the the background color. +proc eraseOldVcut args \ +{ + global cutYPos vcutVec + + send vcutPlot setColorIndex background + send vcutPlot drawPolyline $vcutVec + send vcutPlot setColorIndex foreground +} + +# Draw the horizontal cut-plot. +# Create markers to indicate axes on the vertical cut-plot. +proc drawVcutAxes { state } \ +{ + if {$state} { + send vcutPlot createMarker vcutAxes1 \ + type box \ + createMode noninteractive \ + lineColor gray60 \ + lineStyle 0 \ + x 60 \ + y 1 \ + height 4096 \ + width 30 \ + activated True \ + visible True \ + sensitive False + send vcutPlot createMarker vcutAxes2 \ + type box \ + createMode noninteractive \ + lineColor gray60 \ + lineStyle 0 \ + x 1 \ + y 1 \ + width 60 \ + height 4096 \ + activated True \ + visible True \ + sensitive False + } else { + send vcutAxes1 destroy ; send vcutAxes2 destroy + } +} + +# Create a marker to be used as the cursor indicator. +proc setVcutCursor { state } \ +{ + if {$state} { + set pts { {10 252} {10 260} {1 256} } + + send vcutPlot createMarker vcutCursor \ + type polygon \ + createMode noninteractive \ + lineColor black \ + fill True \ + fillColor yellow \ + x 12 \ + y 256 \ + width 10 \ + height 8 \ + knotSize 0 \ + activated True \ + visible False \ + sensitive False + send vcutCursor setVertices $pts + send vcutCursor set visible True + + } else { + send vcutCursor destroy + } +} + +# Label the axes on the vertical cut plot. +proc drawVcutLabels { z1 z2 } \ +{ + set mid [expr "($z2-$z1)/2.0+$z1"] + set low [expr "($mid-$z1)/2.0+$z1"] + set high [expr "($z2-$mid)/2.0+$mid"] + + # Initialize the label strings and positions. + set labels {} + foreach i [list $z2 $high $mid $low $z1] { + lappend labels [ format "%.1f" $i ] + } + set xposns { 2 28 58 88 112 } + + send vcutPlot "setColorIndex 6" + + # Draw each label vertically down the position since we can't rotate + # the text. + set xp 0 + foreach lab $labels { + set chars [split $lab {} ] + set yp 12 + set xpos [lindex $xposns $xp] + foreach ch $chars { + if {$ch == "."} { incr yp -4 } + send vcutPlot drawAlphaText $xpos $yp $ch + incr yp 10 + } + incr xp + } +} + + +# Draw the cursor position indicator on the horizontal cut plot. +proc drawVcutIndicator { ypos } \ +{ + global cutYScale cutYPos + + send vcutCursor move 12 [expr ($ypos * $cutYScale)] + set cutYPos $ypos +} + + +# Track the cursor while in the cut-graph window. +proc vcutWCSUpdate { x y args } \ +{ + global cutXPos curTrack + if {$curTrack} { + wcsUpdate $cutXPos $y + } + drawVcutIndicator $y +} + + + +################################################################################ +# UTILITY ROUTINES +################################################################################ + + +# TICSTEP -- Utility routine to compute nice ticmark steps in plots. +# [ NOT CURRENTLY USED. ] + +proc ticstep { range nsteps } \ +{ + set t2 0.301029996 + set t5 0.698970004 + set df [ expr "$range / double($nsteps + 1)" ] + if {$df > 0.0} { + set p1 [ expr "log10(double($df))" ] + } else { + set p1 [ expr "log10(double(-$df))" ] + } + set p2 [ expr "int($p1)" ] + set p3 [ expr "$p1 - $p2" ] + + if { $p3 < 0.0 } { + set p3 [ expr "$p2 + 1.0" ] + set p2 [ expr "$p2 - 1.0" ] + } + + if { $p3 < 1.0e-10 } { + set ticstep [ expr "pow(double(10.0),double($p2))" ] + } elseif { $p3 > 0. && $p3 <= $t2 } { + set ticstep [ expr "pow(double(10.0),double($p2 + $t2))" ] + } elseif { $p3 > $t2 && $p3 <= $t5 } { + set ticstep [ expr "pow(double(10.0),double($p2 + $t5))" ] + } elseif { $p3 > $t5 && $p3 <= 1.0 } { + set ticstep [ expr "pow(double(10.0),double($p2 + 1.))" ] + } else { + set ticstep $df + } + + set logtic [ expr "int(log10($ticstep)) - 1" ] + set scale [ expr "pow(double(10.0),double($logtic))" ] + set ticstep [ expr "int( ($ticstep / $scale) * $scale)" ] + + if {$ticstep < 0.1} { set ticstep 0.10 } + + return $ticstep +} + + diff --git a/vendor/x11iraf/ximtool/gui/print.res b/vendor/x11iraf/ximtool/gui/print.res new file mode 100644 index 00000000..3327cb48 --- /dev/null +++ b/vendor/x11iraf/ximtool/gui/print.res @@ -0,0 +1,304 @@ + +set Resources(print_panel) { \ + + !===================================== + ! Print Setup Panel resources. ! + !===================================== + *print_panel*TextToggle.alignment: left + *print_panel*Arrow.width: 16 + *print_panel*Arrow.height: 20 + *print_panel*TextToggle.frameWidth: 0 + *print_panel*TextToggle.height: 20 + *print_panel*Label.borderWidth: 0 + *print_panel*Label.shadowWidth: 0 + *print_panel*TextButton.width: 40 + *print_panel*TextButton.height: 25 + + *printLayout.borderWidth: 0 + *printLayout.layout: vertical { \ + -1 \ + printCmdGroup < +inf * > \ + -1 \ + optGroup < +inf -inf * +inf -inf > \ + -3 \ + cmdGroup < +inf * > \ + -1\ + } + + + ! Print Group resources. + !---------------------------------- + *printCmdGroup.borderWidth: 0 + *printCmdGroup.outerOffset: 5 + *printCmdGroup.label: + *printCmdGroup.location: 0 0 400 80 + *printCmdGroup*offIcon: diamond0s + *printCmdGroup*onIcon: diamond1s + *printCmdGroup*highlightColor: cyan + *printCmdGroup*Frame.frameType: sunken + *printCmdGroup*Frame.frameWidth: 1 + *printCmdGroup*Frame.width: 300 + *printCmdGroup*Label.justify: right + *printCmdGroup*Text*editType: edit + *printCmdGroup*Text*height: 22 + *printCmdGroup*TextToggle.width: 70 + *printCmdGroup*shadowWidth: 0 + *printCmdGroup*borderWidth: 0 + *printCmdLayout.borderWidth: 0 + *printCmdLayout.layout: horizontal { \ + labelLayout 5 inputLayout < +inf -inf * > \ + } + *labelLayout.borderWidth: 0 + *labelLayout.layout: vertical { 5 toLabel 7 printerLabel } + *printerLabel.label: Print Command: + *toLabel.label: Print To: + *toPrinter.label: Printer + *toPrinter.on: True + *toFile.label: File + + *inputLayout.borderWidth: 0 + *inputLayout.layout: horizontal { \ + 3 \ + vertical { \ + 5 \ + horizontal { 5 toPrinter 5 toFile 5 < +inf -inf > } \ + 5 \ + printcmdFrame < +inf -inf * > \ + 5 \ + } \ + 3 \ + } + *printcmd*string: lpr + *printcmd*height: 22 + *printcmd*Text*editType: edit + + + ! Main options groups layout resources. + !--------------------------------------- + *optGroup.frameWidth: 2 + *optGroup.frameType: chiseled + *optGroup.label: + *optGroup.location: 0 0 400 330 + *optGroup.outerOffset: 5 + *optGroup.innerOffset: 2 + *optLayout*borderWidth: 0 + *optLayout.layout: vertical { \ + -1 \ + horizontal { \ + vertical { \ + 5 \ + epsPageGroup < +inf -inf * > \ + optionsGroup < +inf -inf * +inf -inf > \ + -1 \ + } \ + vertical { \ + 5 \ + printColorGroup < +inf -inf * > \ + printerGroup < +inf -inf * > \ + -1 \ + } \ + -1 \ + } \ + 5 \ + horizontal { annOptsGroup < +inf * +inf > -1 } \ + -1 \ + } + + + ! Postscript Options group resources. + ! ----------------------------------- + *epsPageGroup.label: Postscript Options + *epsPageGroup.outerOffset: 7 + *epsPageGroup.innerOffset: 5 + *epsPageGroup.location: 0 0 250 150 + *epsPageGroup*offIcon: diamond0s + *epsPageGroup*onIcon: diamond1s + *epsPageGroup*highlightColor: cyan + *epsPage*Label.justify: left + *epsPage.layout: vertical { \ + -1 \ + epsOrientLabel 4 < -4 > \ + horizontal { 25 epsPortButton epsLandButton epsSquareButton -1 } \ + 4 \ + epsSizeLabel -1 \ + horizontal { \ + 25 epsLetterButton epsLegalButton epsA4Button epsB5Button -1 \ + } \ + 10 \ + horizontal { 5 epsScaleLabel 4 ScaleFrame < +inf -inf * > } \ + -1 \ + } + + + ! Page Layout resources. + ! ------------------------------- + *epsOrientLabel.label: Orientation: + *epsPortButton.label: Portrait + *epsPortButton.width: 65 + *epsLandButton.label: Landscape + *epsLandButton.width: 85 + *epsSquareButton.label: Square + *epsSquareButton.width: 70 + *epsSquareButton.sensitive: False + + *epsSizeLabel.label: Paper Size: + *epsLetterButton.label: Letter + *epsLetterButton.width: 60 + *epsLegalButton.label: Legal + *epsLegalButton.width: 60 + *epsA4Button.label: A4 + *epsA4Button.width: 50 + *epsB5Button.label: B5 + *epsB5Button.width: 50 + + ! Image scale box resources. + ! ------------------------------- + *epsScaleLabel.label: Output Image Scale: + *epsScaleLabel.justify: right + *ScaleFrame.frameType: sunken + *ScaleFrame.frameWidth: 1 + *ScaleFrame*shadowWidth: 0 + *ScaleLayout.location: 0 0 100 35 + *ScaleLayout.label: + *ScaleLayout.layout: horizontal { \ + SCdecrease SCtext < +inf -100% * > SCincrease \ + } + *SCdecrease.direction: left + *SCtext.width: 75 + *SCtext.height: 22 + *SCtext.label: 100 % + *SCincrease.direction: right + + + ! Miscellaneous print options box resources. + ! ------------------------------------ + *optionsGroup.outerOffset: 7 + *optionsGroup.innerOffset: 5 + *optionsGroup*onIcon: square1s + *optionsGroup*offIcon: square0s + *optionsGroup.label: Processing Options + *optionsGroup*TextToggle.width: 125 + *optionsGroup*TextToggle.highlightColor: yellow + *options.location: 0 0 250 60 + *options.frameWidth: 2 + *options.layout: horizontal { \ + 5 \ + vertical { -1 epsscaleButton 2 autorotateButton -1 } \ + 3 \ + vertical { -1 aspectButton 2 compressButton -1 } \ + -1 \ + } + *epsscaleButton.label: Auto Scale + *autorotateButton.label: Auto Rotate + *aspectButton.label: Max Aspect + *compressButton.label: RLE Compress + *compressButton.sensitive: False + + + ! Annotation options box resources. + ! ------------------------------------ + *annOptsGroup.outerOffset: 7 + *annOptsGroup.innerOffset: 5 + *annOptsGroup*onIcon: square1s + *annOptsGroup*offIcon: square0s + *annOptsGroup.label: Annotation Options + *annOptsGroup*TextToggle.width: 90 + *annOptsGroup*TextToggle.highlightColor: yellow + *annOptsGroup*Frame.frameType: sunken + *annOptsGroup*Frame.frameWidth: 1 + *annOptsGroup*Frame.width: 300 + *annOptsGroup*Text*editType: edit + *annOpts.frameWidth: 2 + *annOpts.location: 0 0 400 70 + *annOpts.layout: vertical { \ + 2 \ + horizontal { \ + 5 annotateButton 2 titleButton 2 bordersButton 2 colorbarButton 5 \ + } \ + 3 \ + horizontal { -1 titleLabel 2 titleFrame < +inf -inf * > -1 } \ + -1 \ + } + *annotateButton.label: \ Annotate + *titleButton.label: \ Title + *bordersButton.label: \ Borders + *colorbarButton.label: \ Colorbar + *titleLabel.label: Title String + *titleString*string: imtitle + *titleString*height: 23 + *titleString*Text*editType: edit + + + ! Output color box resources. + ! ------------------------------ + *printColorGroup.location: 0 0 150 90 + *printColorGroup.outerOffset: 7 + *printColorGroup.frameWidth: 2 + *printColorGroup*offIcon: diamond0s + *printColorGroup*onIcon: diamond1s + *printColorGroup*highlightColor: cyan + *printColorGroup.innerOffset: 5 + *printColorGroup.label: Output Color + *printColorGroup*TextToggle.width: 110 + *printColor.frameWidth: 2 + *printColor.location: 0 0 250 75 + *printColor.layout: horizontal { \ + 1 \ + vertical { -1 prGrayButton 2 prPseudoButton 2 prRGBButton -1 } \ + -1 \ + } + *prGrayButton.label: Grayscale + *prPseudoButton.label: PseudoColor + *prRGBButton.label: RGB + + ! Printer Selection. + ! -------------------------- + *printerGroup.label: Printers + *printerGroup.location: 0 0 110 130 + *printerGroup.shrinkToFit: True + *printerGroup.outerOffset: 7 + + *printers*Viewport.allowVert: True + *printers*Viewport.allowHoriz: False + *printers*Viewport.useRight: True + *printers*Viewport.resizeable: True + *printers*Scrollbar.width: 17 + *printers*Scrollbar.minimumThumb: 10 + *printers.layout: vertical { \ + 3 < -3 > \ + horizontal { \ + 2 < -2 > \ + printlistFrame < +inf -inf * +inff -inff > \ + 2 < -2 > \ + } \ + 3 < -3 > \ + } + + *printers*frameType: sunken + *printers*frameWidth: 1 + *printers*BorderWidth: 0 + *printers*Label.ShadowWidth: 0 + + *printlist.width: 100 + *printlist.height: 78 + + + ! Panel command resources. + ! ------------------------------ + *cmdGroup.frameType: chiseled + *cmdGroup.frameWidth: 2 + *cmdGroup.outerOffset: 5 + *cmdGroup.innerOffset: 5 + *cmdGroup.label: + *cmdGroup.location: 0 0 150 50 + *cmdLayout.borderWidth: 0 + *cmdLayout*Command.internalWidth: 12 + *cmdLayout.layout: horizontal { \ + 2 \ + okayPrint 1 < +inf > printStatus < +inf -inf * +inf -inf > \ + 2 \ + } + *cmdGroup*TextButton*location: 0 0 80 0 + *okayPrint.label: Print +} + diff --git a/vendor/x11iraf/ximtool/gui/print.tcl b/vendor/x11iraf/ximtool/gui/print.tcl new file mode 100644 index 00000000..983d2a15 --- /dev/null +++ b/vendor/x11iraf/ximtool/gui/print.tcl @@ -0,0 +1,342 @@ + +################################################################################ +# Print Panel Functions. +################################################################################ + +# Global variables needed for the print setup panel + +set printColor prGrayButton +set orientation epsPortButton +set page_size epsLetterButton +set imageScale 100 + +set epsWidgets { epsPageGroup epsOrientLabel epsSizeLabel + epsPortButton epsLandButton epsLetterButton epsLegalButton epsA4Button + ScaleFrame SCdecrease SCtext SCincrease +} + + +proc psetup_init args \ +{ + global printColor orientation page_size imageScale #format + + set_printer toPrinter callback 1 + send SCtext set label [ format "%d %%" $imageScale ] + send $printColor set on true + send $orientation set on true + send $page_size set on true +} + + +proc doPrintOptions { param old new } \ +{ + global imageScale page_size orientation imageScale printColor + global warnings + + send printStatus set label {} + set val [join [lrange $new 1 end] " "] + + # print [format "doPrintOptions %s = %s" [lindex $new 0] $val] + switch [lindex $new 0] { + autoscale { if { $val == "True" } { + send epsscaleButton set on true + } elseif { $val == "False" } { + send epsscaleButton set on false + } + } + autorotate { if { $val == "True" } { + send autorotateButton set on true + } elseif { $val == "False" } { + send autorotateButton set on false + } + } + maxaspect { if { $val == "True" } { + send aspectButton set on true + } elseif { $val == "False" } { + send aspectButton set on false + } + } + annotate { if { $val == "True" } { + send annotateButton set on true + send titleButton setSensitive true + send colorbarButton setSensitive true + send bordersButton setSensitive true + send titleLabel setSensitive true + send titleString setSensitive true + } elseif { $val == "False" } { + send annotateButton set on false + send titleButton setSensitive false + send colorbarButton setSensitive false + send bordersButton setSensitive false + send titleLabel setSensitive false + send titleString setSensitive false + } + } + compress { if { $val == "True" } { + send compressButton set on true + } elseif { $val == "False" } { + send compressButton set on false + } + } + orientation { send $orientation set on false + if { $val == "portrait" } { + send epsPortButton set on true + set orientation epsPortButton + } elseif { $val == "landscape" } { + send epsPortButton set on false + set orientation epsLandButton + } + } + papersize { send $page_size set on false + if { $val == "letter" } { + send epsLetterButton set on true + set page_size epsLetterButton + } elseif { $val == "legal" } { + send epsLegalButton set on true + set page_size epsLegalButton + } elseif { $val == "A4" } { + send epsA4Button set on true + set page_size epsA4Button + } elseif { $val == "B5" } { + send epsB5Button set on true + set page_size epsB5Button + } + } + imscale { set imageScale $val + send SCtext set label [ format "%d %%" $imageScale ] + } + colortype { send $printColor set on false + if { $val == "gray" } { + send prGrayButton set on true + set printColor prGrayButton + } elseif { $val == "pseudo" } { + send prPseudoButton set on true + set printColor prPseudoButton + } elseif { $val == "rgb" } { + send prRGBButton set on true + set printColor prRGBButton + } + } + printerName { if [send toPrinter get on] { + send printlist highlight $val + } + } + printCmd { if [send toPrinter get on] { + send printcmd set string $val + } + } + printFile { if [send toFile get on] { + send printcmd set string $val + } + } + deviceType { if { $val == "Printer" } { + send printerLabel set label "Print Command:" + send toPrinter set on true + send toFile set on false + } elseif { $val == "File" } { + send printerLabel set label "File Name:" + send toPrinter set on false + send toFile set on true + send printlist unhighlight + } + } + dotitle { if { $val == "True" } { + send titleButton set on true + } elseif { $val == "False" } { + send titleButton set on false + } + } + doborders { if { $val == "True" } { + send bordersButton set on true + } elseif { $val == "False" } { + send bordersButton set on false + } + } + docolorbar { if { $val == "True" } { + send colorbarButton set on true + } elseif { $val == "False" } { + send colorbarButton set on false + } + } + title { send titleString set string $val + } + + status { send printStatus set label $val + send server synchronize + } + warning { if {$warnings} { Wexec server $val } + } + } +}; send printOptions addCallback doPrintOptions + + +# Print options procedures. +# ------------------------------- + +set prOptsWidgets { + toPrinter toFile + prGrayButton prPseudoButton prRGBButton + epsLandButton epsPortButton + epsLetterButton epsLegalButton epsA4Button epsB5Button + SCincrease SCdecrease +} +set prSimpleOptions { + epsscaleButton autorotateButton aspectButton annotateButton compressButton + titleButton bordersButton colorbarButton +} + +proc prPrintCommand { widget cbtype args } \ +{ + if [send toFile get on] { + send client setPrintOption printfile $args + send printStatus set label [format "output file set to %s" $args] + } else { + send client setPrintOption printcmd $args + send printStatus set label [format "print command set to %s" $args] + } +}; send printcmd addCallback prPrintCommand + +proc prTitleString { widget cbtype args } \ +{ + send client setPrintOption title $args +}; send titleString addCallback prTitleString + +proc prOptionToggle { widget cbtype args } \ +{ + global imageScale + + # Handle the image scale widgets first. + switch $widget { + SCincrease { set scale [expr $imageScale + 5] + send client setPrintOption imscale $scale + return + } + SCdecrease { set scale [ expr $imageScale - 5 ] + send client setPrintOption imscale $scale + return + } + } + + # If it's not one of those it must be one of the radio toggles. + set val [ send $widget get on ] + #print [ format "prOptionToggle %s = %s" $widget $val ] + if { $val == 1 } { + switch $widget { + toPrinter { send client setPrintOption devicetype printer } + toFile { send client setPrintOption devicetype file } + + epsLandButton { send client setPrintOption orientation landscape } + epsPortButton { send client setPrintOption orientation portrait } + + epsLetterButton { send client setPrintOption papersize letter } + epsLegalButton { send client setPrintOption papersize legal } + epsA4Button { send client setPrintOption papersize A4 } + epsB5Button { send client setPrintOption papersize B5 } + + prGrayButton { send client setPrintOption colortype gray } + prPseudoButton { send client setPrintOption colortype pseudo } + prRGBButton { send client setPrintOption colortype rgb } + } + } else { + send $widget set on true + } + +} ; foreach w $prOptsWidgets { send $w addCallback prOptionToggle } + +proc prSimpleOptionToggle { widget args } \ +{ + set val [ send $widget get on ] + #print [ format "prSimpleOptionToggle %s = %s" $widget $val ] + + switch $widget { + epsscaleButton { send client setPrintOption autoscale $val } + autorotateButton { send client setPrintOption autorotate $val } + aspectButton { send client setPrintOption maxaspect $val } + annotateButton { send client setPrintOption annotate $val } + compressButton { send client setPrintOption compress $val } + + titleButton { send client setPrintOption dotitle $val } + bordersButton { send client setPrintOption doborders $val } + colorbarButton { send client setPrintOption docolorbar $val } + } +} ; foreach w $prSimpleOptions { send $w addCallback prSimpleOptionToggle } + + + +# Printer display and selection. +# ------------------------------- +set lprList {} + +proc psSetPrintList {param old new} \ +{ + global lprList + set lprList $new + send printlist setList $new resize + send printlist highlight 0 +}; send printerList addCallback psSetPrintList + +proc lprResize args \ +{ + global lprList + send printlist setList $lprList resize + send printlist highlight 0 +}; send printlist addEventHandler lprResize ResizeRedirectMask + +proc psSelectPrint {widget cbtype selections indices} \ +{ + global printerlist + foreach selection $selections { + send client setPrintOption printername $selection + } +}; send printlist addCallback psSelectPrint + + +proc Print args \ +{ + global winWidth winHeight + send imagewin setCursorType busy + + # Get the print command or file template if not previous reset. + set val [ send printcmd get string ] + if [send toFile get on] { + send client setPrintOption printfile $val + } else { + send client setPrintOption printcmd $val + } + set val [ send titleString get string ] + send client setPrintOption title $val + setPrintCorners 0 [expr $winWidth - 1] [expr $winHeight - 1] 0 + + send client print + send imagewin setCursorType idle +} ; send okayPrint addCallback Print + + + +# setPrintCorners -- Tell the client the WCS of the image being printed. + +proc setPrintCorners { lx ly ux uy args } \ +{ + global winWidth winHeight + + # Convert raw corner screen coordinates to frame buffer raster coords. + send imagewin unmapPixel $lx $ly raster llx lly + set llx [expr "int ($llx)"] + set lly [expr "int ($lly)"] + set str [send client encodewcs $llx $lly] + scan $str "%g %g %g" llx_r lly_r z + set llx_i [expr "int ($llx_r)"] + set lly_i [expr "int ($lly_r)"] + + send imagewin unmapPixel $ux $uy raster urx ury + set urx [expr "int ($urx)"] + set ury [expr "int ($ury)"] + set str [send client encodewcs $urx $ury] + scan $str "%g %g %g" urx_r ury_r z + set urx_i [expr "int ($urx_r)"] + set ury_i [expr "int ($ury_r)"] + + send client setPrintOption corners $llx_i $lly_i $urx_i $ury_i +} + + diff --git a/vendor/x11iraf/ximtool/gui/resources.res b/vendor/x11iraf/ximtool/gui/resources.res new file mode 100644 index 00000000..201e2e16 --- /dev/null +++ b/vendor/x11iraf/ximtool/gui/resources.res @@ -0,0 +1,26 @@ + +set Resources(gui) { \ + + ! GUI resources. + ! ------------------------------ + *autoscale: True + *zoomfactors: 1 2 4 8 + *displayCoords: True + *displayPanner: True + *displayMagnifier: False + *blinkRate: 1.0 + *pannerArea: 150*150 + *pannerGeom: -5+5 + *magnifierArea: 100*100 + *magnifierGeom: +5+5 + *wcsboxGeom: -5-5 + *maxContrast: 5.0 + *showToolBar: False + *showPanelBar: False + *warnings: True + *centerBoxSize: 5 + *peakCentroid: True +} + + + diff --git a/vendor/x11iraf/ximtool/gui/rulers.tcl b/vendor/x11iraf/ximtool/gui/rulers.tcl new file mode 100644 index 00000000..98f30a0f --- /dev/null +++ b/vendor/x11iraf/ximtool/gui/rulers.tcl @@ -0,0 +1,524 @@ + + +################################################################################ +# RULER MARKERS +################################################################################ + +set rulerX 0 ;# ruler start in screen coords +set rulerY 0 +set rulerPts { {0 0} {0 0} {0 0} } ;# ruler vertices +set rulerList { } ;# ruler list + +set rulerSticky { } ;# list of sticky rulers +set isSticky "Sticky" ;# menu label + +set rulerWCS 0 ;# use WCS coords +set rulerXWCS 0 ;# ruler start in WCS units +set rulerYWCS 0 +set rulerXWCS2 0 ;# ruler end in WCS units +set rulerYWCS2 0 +set rulerFmt pixel ;# ruler label format + + +# Translations when pointer is inside marker. +set rulerTranslations { \ + !Ctrl b: call(prevFrame,$name) + !Ctrl b: call(prevFrame,$name) + !Ctrl f: call(nextFrame,$name) + !Ctrl h: call(move_cursor,-1,0) + !Ctrl j: call(move_cursor,0,1) + !Ctrl k: call(move_cursor,0,-1) + !Ctrl l: call(move_cursor,1,0) + !Ctrl n: call(normalize) + !Ctrl c: call(cpZoomAction,centerFrame) + !Ctrl i: call(cpInvert) + !Ctrl m: call(cpMatchFrames) + !Ctrl r: call(cpRegisterFrames) + !Ctrl p: call(togglePanner) + !Alt 1: call(cpSetFrame,frame1) + !Alt 2: call(cpSetFrame,frame2) + !Alt 3: call(cpSetFrame,frame3) + !Alt 4: call(cpSetFrame,frame4) + !Ctrl 1: call(cpZoom,1,1,fixed) + !Ctrl 2: call(cpZoom,2,2,fixed) + !Ctrl 3: call(cpZoom,3,3,fixed) + !Ctrl 4: call(cpZoom,4,4,fixed) + !Ctrl 5: call(cpZoom,5,5,fixed) + !Ctrl 6: call(cpZoom,6,6,fixed) + !Ctrl 7: call(cpZoom,7,7,fixed) + !Ctrl 8: call(cpZoom,8,8,fixed) + !Ctrl 9: call(cpZoom,9,9,fixed) + BackSpace: call(deleteNamedRuler,NAME,$x,$y) + Delete: call(deleteNamedRuler,NAME,$x,$y) + : m_input() + : call(setRulerMenu) popup(rulerMenu) + : popdown(rulerMenu) +!Ctrl : track-cursor() call(wcsUpdate,$x,$y) call(resizeRuler,$x,$y,0) + !Ctrl : call(deleteRuler,$x,$y) + : track-cursor() call(wcsUpdate,$x,$y) call(magnifierMapImage,$x,$y) +} + + + +# Popup menu in effect when inside marker. +set rulerMenuDescription { + { "Ruler" f.title } + { f.dblline } + { "$isSticky" f.exec { + toggleSticky $ruler + } } + { f.line } + { "Units" f.menu rulerUnits } + { "Color" f.menu rulerColor } + { f.line } + { "Draw into Frame" f.exec { + writeRuler $ruler + } sensitive False } + { f.line } + { "Destroy" f.exec { + scan $ruler "ruler%d" num + deleteNamedRuler $num x y + } } +} ; createMenu rulerMenu imagewin $rulerMenuDescription + +set rulerUnitsDescription { + { Units f.title } + { f.dblline } + { "Pixels" f.exec { setUnits $ruler pixel } } + { "Arc Seconds" f.exec { setUnits $ruler arcsec + } sensitive { ($rulerWCS > 0) ? "True" : "False"} } + { "Arc Minutes" f.exec { setUnits $ruler arcmin + } sensitive { ($rulerWCS > 0) ? "True" : "False"} } + { "Degrees" f.exec { setUnits $ruler degrees + } sensitive { ($rulerWCS > 0) ? "True" : "False"} } +} ; createMenu rulerUnits rulerMenu $rulerUnitsDescription + +set rulerColorDescription { + { Color f.title } + { f.dblline } + { "" f.exec "r_setColor $ruler black yellow" + bitmap solid foreground black } + { "" f.exec "r_setColor $ruler white black" + bitmap solid foreground white } + { "" f.exec "r_setColor $ruler red yellow" + bitmap solid foreground red } + { "" f.exec "r_setColor $ruler green black" + bitmap solid foreground green } + { "" f.exec "r_setColor $ruler blue white" + bitmap solid foreground blue } + { "" f.exec "r_setColor $ruler magenta black" + bitmap solid foreground magenta } + { "" f.exec "r_setColor $ruler cyan black" + bitmap solid foreground cyan } + { "" f.exec "r_setColor $ruler yellow black" + bitmap solid foreground yellow } +} ; createMenu rulerColor rulerMenu $rulerColorDescription + + +proc makeRuler {parent x y} \ +{ + global rulerTranslations ruleno rulerWCS rulerXWCS rulerYWCS + global rulerPts rulerX rulerY rulerList + global isSticky rulerMenuDescription rulerUnitsDescription + global coord coordLab + + + incr ruleno ; set ruler ruler$ruleno + + # Substitute so the marker translation will delete the marker + # by it's number rather than the default parent widget name. + regsub -all NAME $rulerTranslations $ruleno translations + + # Create the polygon for the marker. + send $parent createMarker $ruler \ + type polygon\ + createMode noninteractive\ + translations $translations\ + lineColor yellow\ + fill False\ + highlightWidth 1\ + highlightColor yellow\ + knotSize 0\ + activated True\ + visible False\ + sensitive True\ + x $x\ + y $y + + # Define a callback so we can identify the ruler. + send $ruler addCallback selectRuler focusIn focusOut + + # Create the text markers for the labels. + send $parent set markerTextFont 6x9 + makeLabelMarker $parent rulerXlab$ruleno 5ch 1ch + makeLabelMarker $parent rulerYlab$ruleno 5ch 1ch + makeLabelMarker $parent rulerHlab$ruleno 8ch 1ch + send $parent set markerTextFont 6x13 + + set rulerX $x ;# save the reference point + set rulerY $y + + set ref [ list $x $y ] ;# initialize the polygon + set rx [ list [expr "$x +1"] $y ] + set ry [ list $x [expr "$y +1"] ] + set rulerPts [list $ref $rx $ry ] + + send $ruler setVertices $rulerPts ;# set attributes + send $ruler set visible True" + send $ruler setAttribute autoRedraw True + + # See whether we have a WCS to use. + set rulerWCS 0 + set rulerXWCS 0 + set rulerYWCS 0 + for {set num 1} {$num <= 4 && $rulerWCS == 0} {incr num} { + if { [info exists coordLab(wcs$num)] } { + set xl [string tolower [lindex $coordLab(wcs$num) 0]] + set yl [string tolower [lindex $coordLab(wcs$num) 1]] + set fmt [string tolower [send fmtWcs$num get label] ] + if {$xl==" ra" || $xl=="elon" || $xl=="glon" || $xl=="slon"} { + set rulerWCS $num + set rulerXWCS [wcs2log [lindex $coord(wcs$num) 0] $xl $fmt] + set rulerYWCS [wcs2log [lindex $coord(wcs$num) 1] $yl $fmt] + } + } + } + + # Edit the menus. + set isSticky "Sticky" + editMenu rulerMenu imagewin $rulerMenuDescription + editMenu rulerUnits imagewin $rulerUnitsDescription + + + lappend rulerList $ruleno +} + +proc wcs2log { val label fmt} \ +{ + set newval $val + if {$fmt == "sexigesimal" || $fmt == "default"} { + scan $val "%d:%d:%f" h m s + set newval [expr "double($h) + double($m) / 60.0 + double($s) / 3600.0"] + if {$label == " ra"} { + set newval [expr "double($newval * 15.0)"] + } + } + return [expr "double($newval)" ] +} + + +proc resizeRuler {x y redraw} \ +{ + global rulerPts rulerX rulerY ruleno coord coordLab + global rulerWCS rulerXWCS rulerYWCS rulerFmt + global rulerXWCS2 rulerYWCS2 + + + # Track the mouse. + set ref [ list $rulerX $rulerY ] + set rx [ list $x $rulerY ] + set ry [ list $x $y ] + set rulerPts [list $ref $rx $ry ] + + # Compute the distances. + if {$rulerWCS > 0} { + set num $rulerWCS + set xl [string tolower [lindex $coordLab(wcs$num) 0]] + set yl [string tolower [lindex $coordLab(wcs$num) 1]] + set fmt [string tolower [send fmtWcs$num get label] ] + + # Save the cursor coords in WCS so we can convert labels. + if {$redraw} { + set nx $rulerXWCS2 + set ny $rulerYWCS2 + } else { + set nx [wcs2log [lindex $coord(wcs$num) 0] $xl $fmt] + set ny [wcs2log [lindex $coord(wcs$num) 1] $yl $fmt] + set rulerXWCS2 $nx + set rulerYWCS2 $ny + } + } + + if {$rulerFmt == "pixel"} { + set xdist [ expr "abs($x - $rulerX)" ] + set ydist [ expr "abs($y - $rulerY)" ] + set hdist [ expr "sqrt($xdist * $xdist + $ydist * $ydist)" ] + } else { + set xdist [ expr "abs($nx - $rulerXWCS)" ] + set ydist [ expr "abs($ny - $rulerYWCS)" ] + set hdist [ expr "sqrt($xdist * $xdist + $ydist * $ydist)" ] + } + + # Redraw the polygon. + send ruler$ruleno setVertices $rulerPts + + # Label the distances. + setXRulerLabel $x $y $xdist + setYRulerLabel $x $y $ydist + setHRulerLabel $x $y $hdist +} + +# Create a label marker for the ruler. +proc makeLabelMarker { parent name width height } \ +{ + send $parent createMarker $name \ + type text \ + createMode noninteractive \ + width $width \ + height $height \ + lineWidth 0 \ + imageText true \ + textBgColor yellow \ + textColor black \ + activated true \ + visible false +} + +proc setXRulerLabel { cx cy dist } \ +{ + global rulerX rulerY ruleno winWidth winHeight + global cpXscale rulerFmt + + send rulerXlab$ruleno set visible False + + if {[expr "abs($cx - $rulerX)"] > 30} { + switch $rulerFmt { + pixel { set text [format "%.1f" [expr "$dist / $cpXscale"] ] } + arcsec { set text [format "%.2f\"" [expr "$dist * 3600.0"] ] } + arcmin { set text [format "%.2f\'" [expr "$dist * 60.0"] ] } + degrees { set text [format "%.2fd" "$dist" ] } + } + set len [expr [string length $text] + 1] + send rulerXlab$ruleno "set width ${len}ch" + + # Compute the placement of the label marker. + if {$cy > $rulerY} { + set yp [expr "$rulerY - 14"] + } else { + set yp [expr "$rulerY + 2"] + } + if {$cx > $rulerX} { + set xp [expr "$rulerX + abs($cx - $rulerX)/2 - 10"] + } else { + set xp [expr "$rulerX - abs($cx - $rulerX)/2 - 10"] + } + + # Bounds checking. + if {$xp < 0} { set xp 1 } + if {$yp < 0} { set yp 1 } + if {$xp > $winWidth} { set xp [expr "$winWidth - 20" } + if {$yp > $winHeight} { set yp [expr "$winHeight - 20" } + + send rulerXlab$ruleno "setAttributes x $xp y $yp" + send rulerXlab$ruleno "set text \{$text\}; redraw erase" + + send rulerXlab$ruleno set visible True + } +} + +proc setYRulerLabel { cx cy dist } \ +{ + global rulerX rulerY ruleno winWidth winHeight + global cpYscale rulerFmt + + send rulerYlab$ruleno set visible False + + if {[expr "abs($cy - $rulerY)"] > 20} { + switch $rulerFmt { + pixel { set text [format "%.1f" [expr "$dist / $cpYscale"] ] } + arcsec { set text [format "%.2f\"" [expr "$dist * 3600.0"] ] } + arcmin { set text [format "%.2f\'" [expr "$dist * 60.0"] ] } + degrees { set text [format "%.2fd" "$dist" ] } + } + set len [expr [string length $text] + 1] + send rulerYlab$ruleno "set width ${len}ch" + + # Compute the placement of the label marker. + if {$cx > $rulerX} { + set xp [expr "$cx + 2"] + } else { + set xp [expr "$cx - $len * 6 - 5"] + } + if {$cy > $rulerY} { + set yp [expr "$rulerY + abs($cy - $rulerY)/2"] + } else { + set yp [expr "$rulerY - abs($cy - $rulerY)/2"] + } + + # Bounds checking. + if {$xp < 0} { set xp 1 } + if {$yp < 0} { set yp 1 } + if {$xp > $winWidth} { set xp [expr "$winWidth - 20" } + if {$yp > $winHeight} { set yp [expr "$winHeight - 20" } + + send rulerYlab$ruleno "setAttributes x $xp y $yp" + send rulerYlab$ruleno "set text \{$text\}; redraw erase" + send rulerYlab$ruleno set visible True + } +} + +proc setHRulerLabel { cx cy dist } \ +{ + global rulerX rulerY ruleno winWidth winHeight + global cpYscale cpXscale rulerFmt + + send rulerHlab$ruleno set visible False + + set xdist [ expr "abs($cx - $rulerX)" ] + set ydist [ expr "abs($cy - $rulerY)" ] + set hdist [ expr "sqrt($xdist * $xdist + $ydist * $ydist)" ] + + if {$hdist > 30} { + switch $rulerFmt { + pixel { set text [format "%.1f" [expr "$dist / $cpXscale"] ] } + arcsec { set text [format "%.2f\"" [expr "$dist * 3600.0"] ] } + arcmin { set text [format "%.2f\'" [expr "$dist * 60.0"] ] } + degrees { set text [format "%.2fd" "$dist" ] } + } + set len [expr [string length $text] + 1] + send rulerHlab$ruleno "set width ${len}ch" + + # Compute the placement of the label marker. + if {$cx > $rulerX} { + set xp [expr "$rulerX + abs($cx - $rulerX)/2 - $len * 6"] + } else { + set xp [expr "$rulerX - abs($cx - $rulerX)/2 - $len * 3"] + } + if {$cy > $rulerY} { + set yp [expr "$rulerY + abs($cy - $rulerY)/2"] + } else { + set yp [expr "$rulerY - abs($cy - $rulerY)/2"] + } + + # Bounds checking. + if {$xp < 0} { set xp 1 } + if {$yp < 0} { set yp 1 } + if {$xp > $winWidth} { set xp [expr "$winWidth - 20" } + if {$yp > $winHeight} { set yp [expr "$winHeight - 20" } + + send rulerHlab$ruleno "setAttributes x $xp y $yp" + send rulerHlab$ruleno "set text \{$text\}; redraw erase" + send rulerHlab$ruleno set visible True + } else { + send rulerHlab$ruleno set visible False + } +} + + +# Callback executed when a marker gets or loses the focus. +proc selectRuler {active_ruler event event_data} \ +{ + global ruler + switch $event { + focusIn { set ruler $active_ruler } + focusOut { } + } +} + +# Reset the ruler format type. +proc setUnits { ruler units } \ +{ + global rulerFmt rulerX rulerY + + send $ruler getVertices pts + set rulerX [lindex [lindex [lindex $pts 0] 0] 0] + set rulerY [lindex [lindex [lindex $pts 0] 0] 1] + set cx [lindex [lindex [lindex $pts 0] 1] 0] ; incr cx -1 + set cy [lindex [lindex [lindex $pts 0] 2] 1] ; incr cy -1 + + set rulerFmt $units + resizeRuler $cx $cy 1 +} + +# Menu option toggle callbacks. +proc toggleSticky { ruler } \ +{ + global isSticky rulerSticky rulerMenuDescription + + set index [ lsearch $rulerSticky $ruler] + if { $index >= 0 } { + # Remove it from the list. + set rulerSticky [lreplace $rulerSticky $index $index] + set isSticky "Sticky" + } else { + # Add it to the list. + lappend rulerSticky $ruler + set isSticky "UnSticky" + } + editMenu rulerMenu imagewin $rulerMenuDescription +} + +proc setRulerMenu args \ +{ + global ruler isSticky rulerSticky rulerMenuDescription + + if { [lsearch $rulerSticky $ruler] >= 0 } { + set isSticky "UnSticky" + } else { + set isSticky "Sticky" + } + editMenu rulerMenu imagewin $rulerMenuDescription +} + + +# Draw the ruler to the frame buffer as a graphic. +proc writeRuler { ruler } \ +{ +} + +# Change the color of the ruler. +proc r_setColor {ruler bgcolor fgcolor} { + + # Recolor the polygon. + send $ruler \ + "markpos; set lineColor $bgcolor; set highlightColor $bgcolor; redraw" + + # Recolor the labels. + scan $ruler "ruler%d" num + send rulerXlab$num \ + "markpos; set textBgColor $bgcolor; set textColor $fgcolor; redraw" + send rulerYlab$num \ + "markpos; set textBgColor $bgcolor; set textColor $fgcolor; redraw" + send rulerHlab$num \ + "markpos; set textBgColor $bgcolor; set textColor $fgcolor; redraw" +} + + +# Delete the current ruler, called when we have a Btn1Up on the current ruler. +proc deleteRuler {x y} { global ruleno ; deleteNamedRuler $ruleno $x $y } + +# Delete all rulers on the screen, usually called when the view changes. +# We preserve the rulers marked as 'sticky'. +proc deleteAllRulers args \ +{ + global rulerList rulerSticky + + foreach r $rulerList { + # Delete the ruler if it's not in the sticky list. + if { [lsearch $rulerSticky ruler$r] == -1 } { + deleteNamedRuler $r x y + } + } +} + +# Delete a particular ruler, usually called from the translation table on +# the marker itself. +proc deleteNamedRuler {name x y} \ +{ + global rulerList + + catch { + send ruler$name destroy + send rulerXlab$name destroy + send rulerYlab$name destroy + send rulerHlab$name destroy + } + + # Remove the ruler from the list. + set index [lsearch $rulerList $name] + set rulerList [lreplace $rulerList $index $index] +} + + + + diff --git a/vendor/x11iraf/ximtool/gui/save.res b/vendor/x11iraf/ximtool/gui/save.res new file mode 100644 index 00000000..81c45ace --- /dev/null +++ b/vendor/x11iraf/ximtool/gui/save.res @@ -0,0 +1,143 @@ + +set Resources(save_panel) { \ + + !===================================== + ! Save Setup Panel resources. ! + !===================================== + *save_panel*TextToggle.alignment: left + *save_panel*TextToggle.frameWidth: 0 + *save_panel*TextToggle.height: 20 + *save_panel*Label.borderWidth: 0 + *save_panel*Label.shadowWidth: 0 + *save_panel*TextButton.width: 80 + + *saveLayout.borderWidth: 0 + *saveLayout.layout: vertical { \ + saveNameGroup < +inf * > \ + saveOptGroup < +inf -inf * > -3 \ + saveCmdGroup < +inf * > \ + } + + ! Save Name Group resources. + !---------------------------------- + *saveNameGroup.borderWidth: 0 + *saveNameGroup.outerOffset: 5 + *saveNameGroup.label: + *saveNameGroup.location: 0 0 400 50 + *saveNameGroup*offIcon: diamond0s + *saveNameGroup*onIcon: diamond1s + *saveNameGroup*highlightColor: cyan + *saveNameGroup*Frame.frameType: sunken + *saveNameGroup*Frame.frameWidth: 1 + *saveNameGroup*Label.justify: right + *saveNameGroup*Text*editType: edit + *saveNameGroup*shadowWidth: 0 + *saveNameGroup*borderWidth: 0 + *saveNameLayout.borderWidth: 0 + *saveNameLayout.layout: vertical { \ + 2 \ + horizontal { 5 saveLabel 5 fnameFrame < +inf -inf * > 5 } \ + 2 \ + } + *saveLabel.label: File Name: + *saveFile.height: 22 + + ! Main options groups layout resources. + !--------------------------------------- + *saveOptGroup.frameWidth: 2 + *saveOptGroup.frameType: chiseled + *saveOptGroup.label: + *saveOptGroup.location: 0 0 400 140 + *saveOptGroup.outerOffset: 5 + *saveOptGroup.innerOffset: 0 + *saveOptLayout*borderWidth: 0 + *saveOptLayout.layout: horizontal { \ + -1 \ + vertical { 5 < -5 > fmtGroup < +inf * +inf > -1 } \ + -1 \ + vertical { \ + 10 < -10 > \ + saveDataBox < +inff -inff * +inff -inff > \ + 5 < -5 > \ + } \ + -1 \ + vertical { 5 < -5 > saveColorGroup < +inf * +inf > -1 } \ + -1 \ + } + + ! Output color box resources. + ! ------------------------------ + *saveColorGroup.location: 0 0 140 120 + *saveColorGroup.outerOffset: 7 + *saveColorGroup.frameWidth: 2 + *saveColorGroup*offIcon: diamond0s + *saveColorGroup*onIcon: diamond1s + *saveColorGroup*highlightColor: cyan + *saveColorGroup.innerOffset: 5 + *saveColorGroup.label: Output Color + *saveColorGroup*TextToggle.width: 110 + *saveColor.frameWidth: 2 + *saveColor.layout: horizontal { \ + 3 \ + vertical { 5 svGrayButton 2 svPseudoButton 2 svRGBButton -1 } \ + -1 \ + } + *svGrayButton.label: Grayscale + *svPseudoButton.label: PseudoColor + *svRGBButton.label: RGB + + *saveDataBox.frameType: sunken + *saveDataBox.frameWidth: 1 + + + ! Output format box resources. + ! ----------------------------------- + *fmtGroup.location: 0 0 140 120 + *fmtGroup.outerOffset: 7 + *fmtGroup.frameWidth: 2 + *fmtGroup*offIcon: diamond0s + *fmtGroup*onIcon: diamond1s + *fmtGroup*TextToggle.width: 55 + *fmtGroup*highlightColor: cyan + *fmtGroup.label: File Format + *formats.layout: horizontal { \ + 3 \ + vertical { 5 fitsButton 2 gifButton 2 tiffButton 2 rawButton 1 } \ + 2 < -2 > \ + vertical { 5 epsButton 2 rasButton 2 x11Button 2 jpegButton 1 } \ + -1 \ + } + *rasButton.label: RAS + *gifButton.label: GIF + *jpegButton.label: JPEG + *tiffButton.label: TIFF + *fitsButton.label: FITS + *x11Button.label: X11 + *epsButton.label: EPS + *rawButton.label: Raw + + ! Change the sensitivity once these formats are implemented. ! + !------------------------------------------------------------- + *jpegButton.sensitive: False + *x11Button.sensitive: False + *rawButton.sensitive: False + + + ! Panel command resources. + ! ------------------------------ + *saveCmdLayout.borderWidth: 0 + *saveCmdGroup.frameType: chiseled + *saveCmdGroup.frameWidth: 2 + *saveCmdGroup.outerOffset: 5 + *saveCmdGroup.innerOffset: 5 + *saveCmdGroup.label: + *saveCmdGroup.location: 0 0 400 50 + *saveCmdLayout*Command.internalWidth: 12 + *saveCmdLayout.layout: horizontal { \ + 2 \ + okaySave 1 < +inf -1 > saveStatus < +inf -inf * > \ + 2 \ + } + *okaySave.label: Save +} + diff --git a/vendor/x11iraf/ximtool/gui/save.tcl b/vendor/x11iraf/ximtool/gui/save.tcl new file mode 100644 index 00000000..36706d31 --- /dev/null +++ b/vendor/x11iraf/ximtool/gui/save.tcl @@ -0,0 +1,156 @@ + +################################################################################ +# Save panel functions. +################################################################################ + +# Global variables needed for the save setup panel + +set format rasButton +set saveColor svPseudoButton + +set fileFmtButtons { + rasButton gifButton jpegButton tiffButton + fitsButton x11Button epsButton rawButton +} + + +# Format group procedures. +#--------------------------------- + +# Select a format. + +proc set_format { widget func state args } \ +{ + global format saveColor + + send $format set on false + if {$widget == $format} { + send $widget set on true + } else { + switch $widget { + rasButton { send client setSaveOption format ras } + gifButton { send client setSaveOption format gif } + jpegButton { send client setSaveOption format jpeg } + tiffButton { send client setSaveOption format tiff } + fitsButton { send client setSaveOption format fits } + x11Button { send client setSaveOption format x11 } + epsButton { send client setSaveOption format eps } + rawButton { send client setSaveOption format raw } + } + } +} ; foreach fmt $fileFmtButtons { send $fmt addCallback set_format } + +proc setSaveFile { widget cbtype args } \ +{ + send client setSaveOption fname $args + send saveStatus set label [format "output file set to %s" $args] +}; send saveFile addCallback setSaveFile + + +proc doSaveOptions { param old new } \ +{ + global format saveColor + global warnings + + send saveStatus set label {} + set val [join [lrange $new 1 end] " "] + + #print [format "doSaveOptions %s = %s" [lindex $new 0] $val] + switch [lindex $new 0] { + format { + # Now (de)sensitize the color options depending on the format, + # force the color choice when needed. + send $format set on false + switch [lindex $val 0] { + ras { #send svRGBButton setSensitive false + send svPseudoButton setSensitive true + set format rasButton + } + gif { send svRGBButton setSensitive false + send svPseudoButton setSensitive true + if {$saveColor == "svRGBButton"} { + send $saveColor set on false + send svPseudoButton set on true + set saveColor svPseudoButton + } + set format gifButton + } + jpeg { send svRGBButton setSensitive true + send svPseudoButton setSensitive true + set format jpegButton + } + tiff { send svRGBButton setSensitive false + send svPseudoButton setSensitive true + set format tiffButton + } + fits { send svRGBButton setSensitive false + send svPseudoButton setSensitive false + send $saveColor set on false + send svGrayButton set on true + set saveColor svGrayButton + set format fitsButton + } + x11 { send svRGBButton setSensitive true + send svPseudoButton setSensitive true + set format x11Button + } + eps { send svRGBButton setSensitive true + send svPseudoButton setSensitive true + set format epsButton + } + raw { send svRGBButton setSensitive true + send svPseudoButton setSensitive true + set format rawButton + } + } + send $format set on true + } + color { send $saveColor set on false + switch [lindex $val 0] { + grayscale { send svGrayButton set on true + set saveColor svGrayButton + } + pseudocolor { send svPseudoButton set on true + set saveColor svPseudoButton + } + rgb { send svRGBButton set on true + set saveColor svRGBButton + } + } + } + fname { send saveFile set string $val + } + status { send saveStatus set label $val + send server synchronize + } + text { send saveData set label $val + } + warning { if {$warnings} { Wexec server $val } + } + } +} ; send saveOptions addCallback doSaveOptions + + +# Color group procedures. +#--------------------------------- +send svGrayButton addCallback "send client setSaveOption color grayscale" +send svPseudoButton addCallback "send client setSaveOption color pseudocolor" +send svRGBButton addCallback "send client setSaveOption color rgb" + + +proc Save args \ +{ + global panel_up + + send imagewin setCursorType busy + + # Get the print command or file template if not previous reset. + set val [ send saveFile get string ] + send client setSaveOption fname $val + send saveStatus set label [format "output file set to %s" $args] + + send client save + send imagewin setCursorType idle +} ; send okaySave addCallback Save + + diff --git a/vendor/x11iraf/ximtool/gui/tcl.obj b/vendor/x11iraf/ximtool/gui/tcl.obj new file mode 100644 index 00000000..3bea2d87 --- /dev/null +++ b/vendor/x11iraf/ximtool/gui/tcl.obj @@ -0,0 +1,13 @@ + +set Objects(tcl_panel) { \ + toplevel TopLevelShell tcl_panel\ + tcl_panel Layout tclLayout\ + tclLayout Group tclCmdGroup\ + tclCmdGroup Layout tclCmd\ + tclCmd Command tclClear\ + tclCmd Command tclExecute\ + tclCmd Command tclDismiss\ + tclLayout Frame tclFrame\ + tclFrame AsciiText tclEntry\ +} + diff --git a/vendor/x11iraf/ximtool/gui/tcl.res b/vendor/x11iraf/ximtool/gui/tcl.res new file mode 100644 index 00000000..6c250bc7 --- /dev/null +++ b/vendor/x11iraf/ximtool/gui/tcl.res @@ -0,0 +1,44 @@ +set Resources(tcl_panel) { \ + + !-------------------------------- + ! Define a debug Tcl shell. + !-------------------------------- + *tcl_panel.width: 550 + *tcl_panel.height: 180 + *tcl_panel.title: Debug TCL Command Entry + *tclLayout*borderWidth: 0 + *tclLayout*Frame.frameType: sunken + *tclLayout*Frame.frameWidth: 2 + *tclLayout.layout: vertical { \ + 0 < +0 -0 > \ + tclCmdGroup < +inf -inf * > \ + tclFrame < +inf -inf * +inf -inf> \ + 0 < +0 -0 > \ + } + *tclEntry*foreground: black + *tclEntry*editType: edit + *tclEntry*type: string + *tclEntry*font: 7x13 + *tclEntry*scrollVertical: Always + *tclEntry*scrollHorizontal: whenNeeded + + *tclCmdGroup.label: + *tclCmdGroup.outerOffset: 0 + *tclCmdGroup.innerOffset: 0 + *tclCmd.layout: vertical { \ + 5 \ + horizontal { \ + 5 \ + tclClear 3 \ + tclExecute \ + 10 < +inf -10> \ + tclDismiss \ + 5 \ + } \ + 5 \ + } + *tclClear.label: Clear + *tclExecute.label: Execute + *tclDismiss.label: Dismiss +} + diff --git a/vendor/x11iraf/ximtool/gui/tcl.tcl b/vendor/x11iraf/ximtool/gui/tcl.tcl new file mode 100644 index 00000000..b3fb08d8 --- /dev/null +++ b/vendor/x11iraf/ximtool/gui/tcl.tcl @@ -0,0 +1,36 @@ + +################################################ +# Define some TCL debug procedures. +################################################ + +set tcl_up 0 + +proc tclCommandClear {widget args} { send tclEntry set string "" } +proc tclCommandExecute {widget args} { send server [send tclEntry {get string}] +} +proc tclCommand {widget mode command args} { send server $command } +proc tclClose {widget args} { tclPanel } +proc tclOpen args \ +{ + global tcl_up + send tcl_panel map + set tcl_up 1 +} + +proc tclPanel args \ +{ + global tcl_up + if {$tcl_up} { + send tcl_panel unmap + set tcl_up 0 + } else { + send tcl_panel map + set tcl_up 1 + } +} + +send tclClear addCallback tclCommandClear +send tclExecute addCallback tclCommandExecute +send tclEntry addCallback tclCommand +send tclDismiss addCallback tclClose + diff --git a/vendor/x11iraf/ximtool/gui/tile.res b/vendor/x11iraf/ximtool/gui/tile.res new file mode 100644 index 00000000..2c1a9607 --- /dev/null +++ b/vendor/x11iraf/ximtool/gui/tile.res @@ -0,0 +1,149 @@ + +set Resources(tile_panel) { \ + + *tileOpts.frameType: chiseled + *tileOpts.frameWidth: 2 + *tileOpts.outerOffset: 5 + *tileOpts.innerOffset: 7 + *tileOpts*shrinkToFit: True + *tileOpts*borderWidth: 0 + + *toptLayout.layout: vertical { \ + horizontal { -6 tFramesG < +inf -inf * > -6 } \ + horizontal { \ + -1 \ + horizontal { -6 tileMode < * +inf -inf > -6 } \ + vertical { \ + horizontal { -3 userOrientG < +inf -inf * > -3 } \ + horizontal { -3 fillStyle < +inf -inf * > -3 } \ + horizontal { -3 tileLabel < +inf -inf * > -3 } \ + -7 \ + horizontal { -3 geomFrame < +inf -inf * > -3 } \ + } \ + -1 \ + } \ + -4 \ + } + *tileMode.label: Tile Mode + *tileMode.outerOffset: 7 + *tileMode.innerOffset: 5 + *tileMode*location: 0 0 150 20 + *tileMode*TextToggle.outerOffset: 2 + *tileMode*TextToggle.innerOffset: 1 + *tileMode*TextToggle.frameWidth: 0 + *tileMode*TextToggle.leftMargin: 10 + *tileMode*TextToggle.rightMargin: 20 + *tileMode*TextToggle.onIcon: diamond1s + *tileMode*TextToggle.offIcon: diamond0s + *tileMode*TextToggle.highlightColor: yellow + + *tileDisabled.label: Disabled + *tileManual.label: Manual + *tileBest.label: Best + *tileSquare.label: Square + *tileHorizontal.label: Horizontal + *tileVertical.label: Vertical + *tileRow.label: One Row + *tileCol.label: One Column + + *fillStyle.label: Fill Style + *fillStyle.location: 0 0 160 30 + *fillStyle.outerOffset: 7 + *fillStyle.innerOffset: 5 + *fillStyle.rows: 1 + *fillStyle*selectionStyle: multi + *fillStyle*outerOffset: 0 + *fillStyle*innerOffset: 1 + *fillStyle*leftMargin: 7 + *fillStyle*onIcon: square1s + *fillStyle*offIcon: square0s + *fillStyle*highlightColor: yellow + *fillStyle.TextToggle.frameWidth: 0 + *fillStyle.TextToggle.location: 0 0 85 23 + *byCols.label: Fill by Columns + *bottomUp.label: Fill from Bottom + + *tileLabel.label: Tile Labels + *tileLabel.location: 0 0 175 30 + *tileLabel.outerOffset: 7 + *tileLabel.innerOffset: 5 + *tileLabel.rows: 1 + *tileLabel*selection: -1 + *tileLabel*outerOffset: 0 + *tileLabel*innerOffset: 1 + *tileLabel*leftMargin: 7 + *tileLabel*onIcon: square1s + *tileLabel*offIcon: square0s + *tileLabel*highlightColor: yellow + *tileLabel.TextToggle.frameWidth: 0 + *tileLabel.TextToggle.location: 0 0 85 23 + *labelFrames.label: Frameno + *labelImname.label: Img Name + *labelTitles.label: Img Title + + *geomFrame.frameWidth: 0 + *geomFrame.frameType: sunken + *geomFrame.outerOffset: 7 + *geomFrame.innerOffset: 4 + *tileGeometry.width: 220 + *tileGeometry.height; 37 + *tileGeometry.background: #c4c4c4 + *tileGeometry.font: 7x13bold + *tileGeometry.label: Tile Geometry: 1 x 2 + + *userOrientG.label: Manual Configuration + *userOrientG.height: 90 + *userOrientG.width: 220 + *userOrientG.outerOffset: 7 + *userOrientG.innerOffset: 5 + *userOrientG.shrinkToFit: True + *userOrientG*Frame.frameWidth: 1 + *userOrientG*Frame.frameType: sunken + *userOrientG*Text.height: 21 + *userOrientG*Text*editType: edit + *userOrientL.borderWidth: 0 + *userOrientL.layout: vertical { \ + 1 \ + horizontal { 18 nrowLab < +50% -inf * > nrFrame < +inf -inf * > 5 } \ + 1 \ + horizontal { ncolLab < +50% -inf * > ncFrame < +inf -inf * > 5 } \ + } + *nrowLab.justify: right + *ncolLab.justify: right + + *nrLayout.layout: horizontal {nrdecrease nrtext < +inf -inf * > nrincrease} + *nrdecrease.direction: left + *nrincrease.direction: right + *nrowLab.label: Tile Rows: + *nrtext.background: #adadad + *nrtext.justify: center + *nrtext.font: 7x13bold + *nrtext.label: 1 + + *ncLayout.layout: horizontal {ncdecrease nctext < +inf -inf * > ncincrease} + *ncdecrease.direction: left + *ncincrease.direction: right + *ncolLab.label: Tile Columns: + *nctext.background: #adadad + *nctext.justify: center + *nctext.font: 7x13bold + *nctext.label: 2 + + *tFramesG.label: Tile Frames + *tFramesG.outerOffset: 7 + *tFramesG.innerOffset: 7 + *tFrames.borderWidth: 0 + *tFrames*Toggle.height: 17 + *tFrames.layout: horizontal { \ + tAll \ + 2 \ + tFrame1 tFrame2 tFrame3 tFrame4 tFrame5 \ + tFrame6 tFrame7 tFrame8 tFrame9 tFrame10 \ + tFrame11 tFrame12 tFrame13 tFrame14 tFrame15 tFrame16 \ + 2 \ + tNone \ + } + *tAll.label: All\ + *tNone.label: None +} + diff --git a/vendor/x11iraf/ximtool/gui/tile.tcl b/vendor/x11iraf/ximtool/gui/tile.tcl new file mode 100644 index 00000000..279475ab --- /dev/null +++ b/vendor/x11iraf/ximtool/gui/tile.tcl @@ -0,0 +1,214 @@ + +################################################################################ +# TILE GEOMETRY +################################################################################ + +set tileSel 2 +set tileOpt 0 +set tileNcols 2 +set tileNrows 1 +set tile_frames {} + +proc selectTileOrientation { widget type select args } \ +{ + global tileSel tileOpt + + set w { nrowLab ncolLab nrdecrease nrincrease ncdecrease ncincrease } + if {$select == "Manual"} { + foreach p $w { send $p setSensitive True } + } elseif {$select != "none"} { + foreach p $w { send $p setSensitive False } + } + + set w { byCols bottomUp labelFrames labelImname labelTitles } + if {$select == "Disabled"} { + foreach p $w { send $p setSensitive False } + } else { + foreach p $w { send $p setSensitive True } + } + + switch $select { + Disabled { set tileSel 0 } + Manual { set tileSel 1 + set nx [send nctext get label] + set ny [send nrtext get label] + set select [format "%dx%d" $nx $ny] + } + Best { set tileSel 2 } + Square { set tileSel 3 } + Horizontal { set tileSel 4 } + Vertical { set tileSel 5 } + "One Row" { set tileSel 6 } + "One Column" { set tileSel 7 } + none { send tileMode set selection $tileSel ; return } + } + + # Reset the button in case we're called directly from elsewhere. + send tileMode set selection $tileSel + + # Send the option to the client. + if {$tileSel > 0} { + setTileFrames + send client setOption tileFrames "True" + set tileOpt $tileSel + } else { + send client setOption tileFrames "False" + } + +} ; send tileMode addCallback selectTileOrientation + +proc tileSelToLabel { selection args } \ +{ + switch $selection { + 0 { return "Disabled" } + 1 { return "Manual" } + 2 { return "Best" } + 3 { return "Square" } + 4 { return "Horizontal" } + 5 { return "Vertical" } + 6 { return "One Row" } + 7 { return "One Column" } + } + return "Best" +} + +# Callback for the fill style options. +proc selectFillStyle { widget type state args } \ +{ + if {$state} { set not False } else { set not True } + + switch $widget { + byCols { send client setOption tileByRows $not } + bottomUp { send client setOption tileTopDown $not } + } +} ; foreach w {byCols bottomUp} { send $w addCallback selectFillStyle } + +# Callback for the tile labelling options. +proc selectTileLabels { widget type state args } \ +{ + if {$state} { + switch $widget { + labelFrames { send client setOption tileLabels 1 } + labelImname { send client setOption tileLabels 2 } + labelTitles { send client setOption tileLabels 3 } + } + } else { + send client setOption tileLabels 0 + } + send $widget set on $state +} +foreach w {labelFrames labelImname labelTitles} { + send $w addCallback selectTileLabels +} + +# Callback for the Tile Frame selection toggles. +proc setTileFrames args \ +{ + global tile_frames tileSel tileNcols tileNrows + + # No-op if tiling isn't enabled. + if {$tileSel == 0} \ + return + + # Get the new tile frames list. + set tile_frames {} + for {set i 1} {$i <= 16} {incr i} { + if {[send tFrame$i get state]} { + lappend tile_frames $i + } + } + + # Reset the geometry. + set geom [format "%dx%d" $tileNcols $tileNrows] + switch $tileSel { + 1 { send client setOption tileGeom $geom \{ $tile_frames \} } + 2 { send client setOption tileGeom Best \{ $tile_frames \} } + 3 { send client setOption tileGeom Square \{ $tile_frames \} } + 4 { send client setOption tileGeom Horizontal \{ $tile_frames \} } + 5 { send client setOption tileGeom Vertical \{ $tile_frames \} } + 6 { send client setOption tileGeom Row \{ $tile_frames \} } + 7 { send client setOption tileGeom Column \{ $tile_frames \} } + } +}; for {set i 1} {$i <= 16} {incr i} {send tFrame$i addCallback setTileFrames} + +proc setAllTileFrames args \ +{ + global tileNcols tileNrows + for {set i 1} {$i <= 16} {incr i} { + if {[send tFrame$i get sensitive]} { + send tFrame$i set state True + } + } + setTileFrames +} ; send tAll addCallback setAllTileFrames + +proc setNoTileFrames args \ +{ + global tileNcols tileNrows + for {set i 1} {$i <= 16} {incr i} { + if {[send tFrame$i get sensitive]} { + send tFrame$i set state False + } + } + setTileFrames +} ; send tNone addCallback setNoTileFrames + +proc tileOptions { param old new } \ +{ + global tileNcols tileNrows + + set tileNcols [lindex $new 0] + set tileNrows [lindex $new 1] + + # Set the geometry. + send nctext set label $tileNcols + send nrtext set label $tileNrows + send tileGeometry set label [format \ + "Tile Geometry: %-2dx%2d" $tileNcols $tileNrows] + +} ; send tileOptions addCallback tileOptions + + +proc tileSetRows { widget args } \ +{ + global nframes tile_frames + + set nx [send nctext get label] + set ny [send nrtext get label] + + if {$widget == "nrdecrease" && [expr ($ny-1)] > 0} { + incr ny -1 + } elseif {$widget == "nrincrease" && [expr ($ny+1)] <= $nframes} { + incr ny 1 + } else { + return + } + set geom [format "%dx%d" $nx $ny] + send client setOption tileGeom $geom $tile_frames +} ; foreach w { nrdecrease nrincrease } { send $w addCallback tileSetRows } + +proc tileSetCols { widget args } \ +{ + global nframes tile_frames + + set nx [send nctext get label] + set ny [send nrtext get label] + + if {$widget == "ncdecrease" && [expr ($nx-1)] > 0} { + incr nx -1 + } elseif {$widget == "ncincrease" && [expr ($nx+1)] <= $nframes} { + incr nx 1 + } else { + return + } + set geom [format "%dx%d" $nx $ny] + send client setOption tileGeom $geom $tile_frames +} ; foreach w { ncdecrease ncincrease } { send $w addCallback tileSetCols } + + +# Initialize the frame tiling. +setAllTileFrames +selectTileOrientation junk junk Disabled +selectFillStyle byRows junk True +selectFillStyle topDown junk True +selectTileLabels labelImname junk False diff --git a/vendor/x11iraf/ximtool/gui/toolbars.tcl b/vendor/x11iraf/ximtool/gui/toolbars.tcl new file mode 100644 index 00000000..85e6946e --- /dev/null +++ b/vendor/x11iraf/ximtool/gui/toolbars.tcl @@ -0,0 +1,557 @@ + + +################################################################################ +# +# XIMTOOL-ALT -- Procedures and declarations for the ALT GUI. +# +################################################################################ + +# Creat the bitmaps needed for the alternate optional bars. + +createBitmap tools 16 16 { + 0xff, 0xff, 0xff, 0xff, 0x03, 0xc0, 0xf3, 0xcf, 0xf3, 0xcf, 0xf3, 0xcf, + 0x83, 0xc1, 0x83, 0xc1, 0x83, 0xc1, 0x83, 0xc1, 0x83, 0xc1, 0x83, 0xc1, + 0x83, 0xc1, 0x03, 0xc0, 0xff, 0xff, 0xff, 0xff}; + +createBitmap control 16 16 { + 0xff, 0xff, 0xff, 0xff, 0x03, 0xc0, 0xe3, 0xc7, 0xe3, 0xcf, 0x33, 0xcc, + 0x33, 0xc0, 0x1b, 0xc0, 0x1b, 0xc0, 0x1b, 0xc0, 0x33, 0xcc, 0xf3, 0xcf, + 0xe3, 0xc7, 0x03, 0xc0, 0xff, 0xff, 0xff, 0xff}; + +createBitmap tile 16 16 { + 0xff, 0xff, 0xff, 0xff, 0x83, 0xc1, 0x83, 0xc1, 0x83, 0xc1, 0x83, 0xc1, + 0x83, 0xc1, 0xff, 0xff, 0xff, 0xff, 0x83, 0xc1, 0x83, 0xc1, 0x83, 0xc1, + 0x83, 0xc1, 0x83, 0xc1, 0xff, 0xff, 0xff, 0xff}; + +createBitmap compass 16 16 { + 0x00, 0x00, 0x00, 0x02, 0x00, 0x07, 0x80, 0x0f, 0xc0, 0x1f, 0x00, 0x07, + 0x00, 0x07, 0x00, 0x07, 0x00, 0x07, 0x00, 0x07, 0x00, 0x07, 0xfc, 0x07, + 0xfc, 0x07, 0xfc, 0x07, 0x00, 0x00, 0x00, 0x00} + +createBitmap plus 11 11 { + 0x00, 0x00, 0x70, 0x00, 0x70, 0x00, 0x70, 0x00, 0xfe, 0x03, 0xfe, 0x03, + 0xfe, 0x03, 0x70, 0x00, 0x70, 0x00, 0x70, 0x00, 0x00, 0x00}; + +createBitmap minus 11 11 { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x03, 0xfe, 0x03, + 0xfe, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; + +createBitmap disk 16 16 { + 0xfe,0x1f,0x11,0x25,0x11,0x45,0x11,0x44,0xf1,0x47,0x01,0x40,0x01,0x40,0xf9, + 0x4f,0x05,0x50,0x05,0x50,0x05,0x50,0x05,0x50,0x05,0x50,0x05,0x50,0xff,0x7f, + 0x00,0x00}; + +createBitmap printer 32 16 { + 0x00, 0xfe, 0x07, 0x00, 0x00, 0x02, 0x0a, 0x00, 0x00, 0x02, 0x12, 0x00, + 0x00, 0x02, 0x22, 0x00, 0x00, 0x02, 0x3e, 0x00, 0x00, 0x02, 0x20, 0x00, + 0x00, 0x02, 0x20, 0x00, 0xe0, 0x03, 0xe0, 0x03, 0x10, 0x03, 0xe0, 0x06, + 0x08, 0xff, 0x7f, 0x09, 0x04, 0x00, 0x00, 0x10, 0xfc, 0xff, 0xff, 0x1f, + 0x04, 0x00, 0x00, 0x10, 0xfc, 0xff, 0xff, 0x1f, 0x08, 0x00, 0x00, 0x08, + 0xf8, 0xff, 0xff, 0x0f}; + + +send tbBlinkDec "set bitmap larrow" ;# Assign the bitmaps to the buttons. +send tbBlinkInc "set bitmap rarrow" +send tbZoomIn "set bitmap plus" +send tbZoomOut "set bitmap minus" +send tbTile "set bitmap tile" +send tbCompass "set bitmap compass; addCallback toggleCompass" +#send helpButton "set bitmap qmark; addCallback Help" +send mXflipButton "set bitmap xflip; addCallback xflip" +send mYflipButton "set bitmap yflip; addCallback yflip" +send mNextButton "set bitmap rarrow; addCallback nextFrame" +send mPrevButton "set bitmap larrow; addCallback prevFrame" + + +# toolBox -- Toggle the toolbox and panelbar display. + +set toolbox_up [ true $showToolBar ] +set panelbar_up [ true $showPanelBar ] + +proc toolBoxToggle args \ +{ + global toolbox_up + + set w [send display get width] ; set h [send display get height] + set iw [send imagewin get width] ; set ih [send imagewin get height] + + if {$toolbox_up} { + send toolbar set height 0 + send toolButton set state 0 + send imagewin "set width $iw; set height $ih" + set nh [expr $h - 25] + send display "set width $w; set height $nh" + set toolbox_up 0 + send mXflipButton map + send mYflipButton map + send mPrevButton map + send mFrameButton map + send mNextButton map + } else { + send toolbar set height 25 + send toolButton set state 1 + send imagewin "set width $iw; set height $ih" + set nh [expr $h + 25] + send display "set width $w ; set height $nh" + set toolbox_up 1 + send mXflipButton unmap + send mYflipButton unmap + send mPrevButton unmap + send mFrameButton unmap + send mNextButton unmap + } +} + +proc panelBarToggle args \ +{ + global panelbar_up + + set w [send display get width] ; set h [send display get height] + set iw [send imagewin get width] ; set ih [send imagewin get height] + + if {$panelbar_up} { + send panelbar set height 0 + send panelButton set state 0 + send imagewin "set width $iw; set height $ih" + set nh [expr $h - 25] + send display "set width $w ; set height $nh" + set panelbar_up 0 + } else { + send panelbar set height 25 + send panelButton set state 1 + send imagewin "set width $iw; set height $ih" + set nh [expr $h + 25] + send display "set width $w ; set height $nh" + set panelbar_up 1 + } +} + + + +# Initialize the bars to be displayed if the resource was set. + +send toolButton "set bitmap tools; addCallback toolBoxToggle" +if { ! [ true $showToolBar ] } { + send display set height [expr [send display get height] - 25] + send toolbar set height 0 + send toolButton set state 0 +} else { + send toolButton set state 1 + send mXflipButton unmap + send mYflipButton unmap + send mPrevButton unmap + send mFrameButton unmap + send mNextButton unmap +} + +send panelButton "deleteCallback panel" +send panelButton "set bitmap control; addCallback panelBarToggle" + +if { ! [ true $showPanelBar ] } { + send display set height [expr [send display get height] - 25] + send panelbar set height 0 + send panelButton set state 0 +} else { + send panelButton set state 1 +} + + +############################################## +# Panelbar callbacks. +############################################## + +send pbQuit addCallback Quit +send helpClose addCallback "send helpButton set state 0" + + +# Control Panel. +#------------------------------------------------------ +proc pbToggleControl {name element op} \ +{ + upvar $name panel_up + send pbDisplayP set state [expr !($panel_up)] +} ; #trace variable panel_up w pbToggleControl + +proc pbResetPanel {param old new} \ +{ + global displayPanner displayMagnifier displayCoords + switch $new { + done { send pbPanM set state [true $displayPanner] + send pbMagM set state [true $displayMagnifier] + send pbWcsM set state [true $displayCoords] + } + } +} ; send initialize addCallback pbResetPanel + +set WidgetToTab(pbDisplayP) display_panel +set WidgetToTab(pbInfoP) info_panel +set WidgetToTab(pbLoadP) load_panel +set WidgetToTab(pbPrintP) print_panel +set WidgetToTab(pbSaveP) save_panel +set WidgetToTab(pbTileP) tile_panel +set WidgetToTab(pbCoordP) wcs_panel + +set TabToWidget(display_panel) pbDisplayP +set TabToWidget(print_panel) pbPrintP +set TabToWidget(load_panel) pbLoadP +set TabToWidget(save_panel) pbSaveP +set TabToWidget(info_panel) pbInfoP +set TabToWidget(tile_panel) pbTileP +set TabToWidget(wcs_panel) pbCoordP + +set pbTabTop "pbDisplayP" + +proc pbPanelDismiss args \ +{ + global tabTop TabToWidget WidgetToTab + set panel $TabToWidget($tabTop) + send $panel set state 0 +} ; send panelClose addCallback pbPanelDismiss + +proc pbResizeCB {widget event a b c d e args} \ +{ + global pbTabTop TabToWidget WidgetToTab + if { $a == 0 && $b == 0 && $c == 0 && $d == 0 && $e == 0 } { + send $pbTabTop set state 0 + set new $TabToWidget($widget) + send $new set state 1 + set pbTabTop $new + } +} ; foreach w $cpTabs {send $w addEventHandler pbResizeCB exposureMask} + +proc pbPanelTabs { widget type state args } \ +{ + global pbTabTop tabTop panel_up + global TabToWidget WidgetToTab + + set panel $WidgetToTab($widget) + if {$tabTop == $panel && $panel_up} { + send panelShell unmap + send $widget set state 0 + set panel_up 0 + return + } + + send $TabToWidget($tabTop) set state 0 + set tabTop $panel + set pbTabTop $TabToWidget($panel) + send panelTabs setTop $panel + + # Now fire it up if it's not already open. + if {$panel_up == 0} { + send $widget set state 1 + send panelShell map + set panel_up 1 + } +} +foreach w { pbDisplayP pbInfoP pbLoadP pbPrintP pbSaveP pbTileP pbCoordP } { + send $w addCallback pbPanelTabs +} + + + +# Load Panel. (Really need to clean this up.) +#------------------------------------------------------ +proc pbDoLoadOptions { param old new } \ +{ + set val [ join [lrange $new 1 end] " " ] + switch [lindex $new 0] { + newfile { send fnameText set string $val } + } +} ; send loadOptions addCallback pbDoLoadOptions + +proc pbFileLoad { widget mode fname args } \ +{ + set fpath [format "%s/%s" \ + [string range [send dirLabel get label] 12 end] $fname ] + send imagewin setCursorType idle +} ; send fnameText addCallback pbFileLoad + +proc pbflSelectPrint {widget cbtype selections args} \ +{ + foreach selection $selections { + ; + } +}; #send imageList addCallback pbflSelectPrint + +proc pbFileLoadB args \ +{ + set fname [send fnameText get string] + if {$fname != ""} { + set fpath [format "%s/%s" \ + [string range [send dirLabel get label] 12 end] $fname ] + } +} ; send filesLoadButton addCallback pbFileLoadB + + +# Panner Marker. +#------------------------------------------------------ +proc pbTracePanner {name element op} \ +{ + global last_compass + + catch { + upvar $name panner_enable + send pbPanM set state $panner_enable + + if { $panner_enable } { + send tbCompass "setSensitive True ; set state $last_compass" + drawCompass + } else { + send tbCompass "setSensitive False ; set state False" + eraseCompass + } + } +} ; trace variable panner_enable w pbTracePanner + +proc pannerPanel args \ +{ + global panner_enable displayPanner + + setPanner [expr !$panner_enable] + send pannerButton set on [expr $panner_enable] +}; send pbPanM addCallback pannerPanel + + +# Magnifier Marker. +#------------------------------------------------------ +proc pbTraceMagnifier {name element op} \ +{ + upvar $name magnifier_enable + send pbMagM set state $magnifier_enable +} ; trace variable magnifier_enable w pbTraceMagnifier + +proc magnifierPanel args \ +{ + global magnifier_enable displayMagnifier + setMagnifier [expr !$magnifier_enable] + send magnifierButton set on [expr $magnifier_enable] +}; send pbMagM addCallback magnifierPanel + + +# CoordsBox Marker. +#------------------------------------------------------ +proc pbTraceCoordsBox {name element op} \ +{ + upvar $name track_enable + send pbWcsM set state $track_enable +} ; trace variable track_enable w pbTraceCoordsBox + +proc wcsPanel args \ +{ + global track_enable + setTrack [expr !$track_enable] +}; send pbWcsM addCallback wcsPanel + + + +# WPIX ISM Callbacks. +#------------------------------------------------------ + +proc altIsmToggle { widget type state args } \ +{ + ismToggle pbIsm junk $state +} ; send pbIsm addCallback altIsmToggle + +proc pbTraceIsm {name element op} \ +{ + upvar $name ism_enable + send pbIsm set state $ism_enable +} ; trace variable ism_enable w pbTraceIsm + + +proc altIsmMsgCB { param old new } \ +{ + set cmd [lindex $new 0] ;# command name + set ism [lindex $new 1] ;# determine ISM name + set argv [lrange $new 2 end] ;# get args + set argc [llength $argv] + + switch $cmd { + deliver { ${ism}_alt_msg $argc $argv } + } +} ; send ism_msg addCallback altIsmMsgCB + + +proc wcspix_alt_msg { argc argv } \ +{ + set arg [string trimleft [ string trimright [lindex $argv 0] ] ] + set cmd [lindex $arg 0] + switch $cmd { + startup { } + shutdown { } + disable { send pbIsm "set state False ; setSensitive False" } + capable { send pbIsm "setSensitive True" } + } +} + + + +############################################## +# Toolbar callbacks. +############################################## + +send tbNormalize addCallback normalize +send tbInvert addCallback cpInvert +send tbRegister addCallback cpRegisterFrames +send tbMatchLUT addCallback cpMatchFrames + + +# Frame Selection. +#------------------ +createMenu mFrameMenu mFrameButton $frameMenuDescription + +proc altFrameChanged {param old new} \ +{ + send mFrameButton set label $new +} ; send frame addCallback altFrameChanged + + +# Image Flipping. +#------------------------------------------------------ +proc tbSetFlip {param old new} \ +{ + if {$param == "xflip"} { + send mXflipButton set state [true $new] + } else { + send mYflipButton set state [true $new] + } +}; foreach i {xflip yflip} { send $i addCallback tbSetFlip } + + +# Zoom/Pan buttons. +#------------------------------------------------------ +proc tbZoomAction { widget args } \ +{ + global frameWidth frameHeight + + switch $widget { + tbZoom0 { cpZoom 1 1 fixed } + tbZoomIn { cpZoom 2.0 2.0 relative } + tbZoomOut { cpZoom 0.5 0.5 relative } + tbCenter { send client pan [expr $frameWidth/2.0] [expr $frameHeight/2.0] } + } +} +foreach widget { tbCenter tbZoomIn tbZoom0 tbZoomOut } { + send $widget addCallback tbZoomAction +} + + +# Frame Blink. +#------------------------------------------------------ +proc tbSetBlinkRate {w args} \ +{ + if {$w == "tbBlinkInc"} { + cpSetBlinkRate BRincrease + } else { + cpSetBlinkRate BRdeccrease + } +} +foreach w {tbBlinkDec tbBlinkInc} { send $w addCallback tbSetBlinkRate } + +proc tbBlink { widget args } \ +{ + global blinkRate blinkId + + if {$blinkRate < 0.01} { + send tbBlink set state 0 + } else { + if {$widget != "tbBlink"} { + if {($blinkId != 0) != [send $widget get on]} { + toggleBlink + } + } else { + if {($blinkId != 0) != [send $widget get state]} { + toggleBlink + } + } + } +} ; send tbBlink addCallback tbBlink + +proc tbTraceBlink {name element op} \ +{ + upvar $name blinkId + send tbBlink set state [expr $blinkId != 0] +} ; trace variable blinkId w tbTraceBlink + + +# Auto-register. +#------------------------------------------------------ +proc tbAutoRegister { widget type state args } \ +{ + send tbAutoReg set state $state +} +foreach w {autoregButton brAregButton tbAutoReg} { + send $w addCallback cpAutoRegister +} + +proc tbToggleAutoReg args \ +{ + global auto_reg + if {$auto_reg} { + cpAutoRegister autoregButton dummy 0 + set auto_reg 0 + send tbAutoReg set state 0 + } else { + cpAutoRegister autoregButton dummy 1 + set auto_reg 1 + send tbAutoReg set state 1 + } +} + + +# Frame Tiles. +#------------------------------------------------------ +proc tbSetTileFrames args \ +{ + global tileOpt + + # Send the option to the client. + if {[send tbTile get state ]} { + if {$tileOpt == 0} { + # If mode is disabled, turn on the tile selection. + selectTileOrientation junk junk Best + } else { + # Otherwise, turn on in current mode. + selectTileOrientation junk junk [tileSelToLabel $tileOpt] + } + } else { + selectTileOrientation junk junk Disabled + } +}; send tbTile addCallback tbSetTileFrames + +proc tbTrackTileFrames {param old new} \ +{ + send tileFramesButton set on [true $new] + send tbTile set state $new +}; send tileFrames addCallback tbTrackTileFrames + +proc tbTileFramesToggle args \ +{ + set value [send tileFramesButton get on] + if {$value} { set not 0 } else { set not 1 } + + send tileFramesButton set on $not + send tbTile set state $not + cpSetTileFrames tbTile junk $not +} + + +# Compass Indicator. +#------------------------------------------------------ +proc tbToggleCompass { widget type state args } \ +{ + global frame + + if {$state} { + send compass set on True + send tbCompass set state 1 + drawCompass + } else { + send compass set on False + send tbCompass set state 0 + eraseCompass + } +} ; foreach w {compass tbCompass} { send $w addCallback tbToggleCompass } + + diff --git a/vendor/x11iraf/ximtool/gui/warn.obj b/vendor/x11iraf/ximtool/gui/warn.obj new file mode 100644 index 00000000..51c617e0 --- /dev/null +++ b/vendor/x11iraf/ximtool/gui/warn.obj @@ -0,0 +1,12 @@ + +set Objects(warning) { \ + toplevel TransientShell warning\ + warning Layout warn\ + warn Frame warnFrame\ + warnFrame Layout WFlayout\ + WFlayout Icon warnIcon\ + WFlayout TextBox warnText\ + warn Command warnOk\ + warn Command warnCancel\ +} + diff --git a/vendor/x11iraf/ximtool/gui/warn.res b/vendor/x11iraf/ximtool/gui/warn.res new file mode 100644 index 00000000..2be08804 --- /dev/null +++ b/vendor/x11iraf/ximtool/gui/warn.res @@ -0,0 +1,49 @@ + +set Resources(warning) { \ + + ! --------------------- + ! WARNING dialog. + ! --------------------- + *warning.geometry: +400+300 + *warning*borderWidth: 0 + *warning*TextBox.frameWidth: 0 + + *warn.layout: vertical { \ + 5 < -5 > \ + horizontal { 5 warnFrame < +inf * +inf > 5 } \ + 5 < -5 > \ + horizontal { \ + 10 \ + warnOk < +inf * > \ + 5 < +inf -5 > \ + warnCancel < +inf * > \ + 10 \ + } \ + 5 < -5 > \ + } + *warnOk.label: Okay + *warnCancel.label: Cancel + + *WFlayout.layout: horizontal { \ + 5 < -5 > \ + vertical { 5 < +inf -5 > warnIcon 5 < +inf -5 > } \ + 5 < -5 > \ + warnText < +inf -inf * +inf -inf > \ + 5 < -5 > \ + } + + *warnLabel.label: Warning + *warnLabel.width: 300 + *warnLabel.height: 20 + *warnFrame.frameType: sunken + *warnFrame.frameWidth: 2 + *warnIcon.location: 0 0 40 40 + *warnIcon.image: WARNING + *warnText.label: generic warning text + *warnText.width: 270 + *warnText.height: 60 + *warnText.background: #c4c4c4 +} + + + diff --git a/vendor/x11iraf/ximtool/gui/warn.tcl b/vendor/x11iraf/ximtool/gui/warn.tcl new file mode 100644 index 00000000..e0465bc3 --- /dev/null +++ b/vendor/x11iraf/ximtool/gui/warn.tcl @@ -0,0 +1,49 @@ + +################################################################################ +# Warning dialog. This pops up a dialog box with the given warning message, +# and executes the given command if the user pushes OK. +# +# Usage: Wexec object message [ok_action [cancel_action]] +# +# The message text is displayed in a popup and the user hits the ok or +# cancel button to close the popup. If an action has been posted for the +# button selected then it is sent to the named object. Only one alert can +# be in effect at a time; posting another alert before the first has +# completed causes the new alert to override the first. +################################################################################ + +set W_object "" +set W_ok_cmd "" +set W_cancel_cmd "" + +proc Wexec {object msg args} \ +{ + global W_object W_ok_cmd W_cancel_cmd + set W_object $object + set W_ok_cmd [lindex $args 0] + set W_cancel_cmd [lindex $args 1] + send warnText set label $msg + send warning map +} + +proc Wbutton {widget args} \ +{ + global W_object W_ok_cmd W_cancel_cmd + switch $widget { + warnOk { if [llength $W_ok_cmd] { send $W_object $W_ok_cmd } + } + warnCancel { if [llength $W_cancel_cmd] { send $W_object $W_cancel_cmd } + } + } + send warning unmap +} +send warnOk addCallback Wbutton +send warnCancel addCallback Wbutton + +# The parameter "alert" is used to forward alerts from the client. +proc setAlert {param old new} \ +{ + Wexec client [lindex $new 0] [lindex $new 1] +}; send alert addCallback setAlert + + diff --git a/vendor/x11iraf/ximtool/gui/wcs.res b/vendor/x11iraf/ximtool/gui/wcs.res new file mode 100644 index 00000000..0f9ec8d5 --- /dev/null +++ b/vendor/x11iraf/ximtool/gui/wcs.res @@ -0,0 +1,212 @@ + +set Resources(wcs_panel) { \ + + !-------------------- + ! WCS Readout Panel + !-------------------- + *wcsGroup*TextToggle.offIcon: square0s + *wcsGroup*TextToggle.onIcon: square1s + + !*wcsLayout*TextToggle.location: 0 0 160 23 + *wcsLayout*TextToggle.height: 23 + *wcsLayout*TextToggle.outerOffset: 0 + *wcsLayout*Layout.borderWidth: 0 + *wcsLayout.borderWidth: 0 + *wcsLayout.layout: vertical { \ + 0 < +0 -0 > \ + wcsGroup < +inf -inf * > \ + 5 \ + horizontal { -1 wcsOptGroup < +inf -inf * > -1 } \ + -2 \ + } + + *wcsOptGroup.label: + *wcsOptGroup.outerOffset: 0 + *wcsOptGroup.innerOffset: 5 + *wcsOptGroup.frameType: chiseled + *wcsOptGroup.frameWidth: 0 + *wcsOptLayout.layout: vertical { \ + horizontal { -9 wcsCoords < +inf -inf * > -9 } \ + -3 \ + horizontal { -5 wcsOpts < +inf -inf * > -5 } \ + horizontal { -5 wcsIsmGroup < +inf -inf * > -5 } \ + 1 \ + } + + *wcsOpts.label: + *wcsOpts.width: 265 + *wcsOpts.height: 40 + *wcsOpts.outerOffset: 3 + *wcsOpts.innerOffset: 3 + *woLayout*TextToggle.frameWidth: 0 + *woLayout*TextToggle.onIcon: square1s + *woLayout*TextToggle.offIcon: square0s + *woLayout*TextToggle.highlightColor: cyan + *woLayout*TextToggle.alignment: left + *woLayout*TextToggle.leftMargin: 5 + *woLayout.layout: horizontal { \ + 3 \ + woptLabels < +inf -inf * > 2 \ + woptTitles < +inf -inf * > 2 \ + woptFBinfo < +inf -inf * > 2 \ + woptBPM < +inf -inf * > \ + 3 \ + } + *woptLabels.label: WCS Labels + *woptLabels.on: True + *woptTitles.label: Image Titles + *woptTitles.on: True + *woptFBinfo.label: Frame Buffer Info + *woptFBinfo.on: True + *woptBPM.label: BPM Data + *woptBPM.on: False + *woptLabels.location: 0 0 150 21 + *woptTitles.location: 0 0 150 21 + *woptFBinfo.location: 0 0 175 21 + *woptBPM.location: 0 0 120 21 + + + *wcsCoords.label: Readout Values + *wcsCoords.width: 265 + *wcsCoords.height: 135 + *wcsCoords.outerOffset: 7 + *wcsCoords.innerOffset: 3 + *wcLayout*TextToggle.offIcon: diamond0s + *wcLayout*TextToggle.onIcon: diamond1s + *wcLayout*TextToggle.highlightColor: yellow2 + *wcLayout*TextToggle.shrinkToFit: True + *wcLayout*TextToggle.frameWidth: 0 + *wcLayout*TextToggle.label: + *wcLayout*TextToggle.on: True + *wcLayout*Label.justify: right + *wcLayout*Label.font: 7x13bold + *wcLayout*SimpleMenu.borderColor: black + *wcLayout*SimpleMenu.borderWidth: 1 + *wcLayout*SimpleMenu.foreground: White + *wcLayout*SimpleMenu.background: SteelBlue + *wcLayout*MenuButton.shadowWidth: 1 + *wcLayout*MenuButton.resize: False + *wcLayout.layout: vertical {\ + 1 \ + horizontal { 20 < -20 > wcTitle < +inf -inf * > 20 < -20 > }\ + 1 \ + horizontal { 5 wcLine < +inf -inf * > 5 } \ + 5 \ + horizontal { \ + 10 \ + vertical { 2 wlWcs1 2 wlWcs2 2 wlWcs3 2 wlWcs4 2 } 5 \ + vertical { 1 sysWcs1 1 sysWcs2 1 sysWcs3 1 sysWcs4 1 } 5 \ + vertical { 1 fmtWcs1 1 fmtWcs2 1 fmtWcs3 1 fmtWcs4 1 } 20 \ + vertical { 1 wpWcs1 3 wpWcs2 3 wpWcs3 3 wpWcs4 3 } 20 \ + vertical { 1 wiWcs1 3 wiWcs2 3 wiWcs3 3 wiWcs4 3 } 15 \ + } \ + 3 \ + } + *wcTitle.label: Type\ \ \ \ \ \ \ \ \ \ Format\ \ \ \ \ \ Panel\ ImgWin + + *wcLine.height: 2 + *wcLine.frameWidth: 2 + *wcLine.frameType: ledged + + *wlWcs1.label: First WCS + *wlWcs2.label: Second WCS + *wlWcs3.label: Third WCS + *wlWcs4.label: Fourth WCS + *sysWcs1.label: \ Image Display\ + *sysWcs1.menuName: sysMenu1 + *sysWcs2.label: None + *sysWcs2.menuName: sysMenu2 + *sysWcs3.label: None + *sysWcs3.menuName: sysMenu3 + *sysWcs4.label: None + *sysWcs4.menuName: sysMenu4 + *fmtWcs1.label: \ Sexigesimal\ + *fmtWcs1.menuName: fmtMenu1 + *fmtWcs2.label: None + *fmtWcs2.menuName: fmtMenu2 + *fmtWcs3.label: None + *fmtWcs3.menuName: fmtMenu3 + *fmtWcs4.label: None + *fmtWcs4.menuName: fmtMenu4 + + *editMenu fmtWcsMenu$i fmtWcs$i $items + + *wcsIsmGroup.label: + *wcsIsmGroup.width: 395 + *wcsIsmGroup.height: 50 + *wcsIsmGroup.outerOffset: 3 + *wcsIsmGroup.innerOffset: 5 + *wcsIsmGroup*borderWidth: 0 + *wcsIsmLayout.layout: horizontal { \ + wcsIsmLabel 1 wcsIsmFrame < +inf -inf * > 3 wcsIsmInit 1 \ + } + *wcsIsmLabel.label: ISM Command + *wcsIsmFrame.frameType: sunken + *wcsIsmFrame.frameWidth: 1 + *wcsIsmFrame.outerOffset: 1 + *wcsIsmFrame*height: 23 + *wcsIsmCmd*editType: edit + *wcsIsmCmd.displayCaret: True + *wcsIsmInit.label: Initialize + *wcsIsmInit.internalWidth: 7 + + *wcsBox*borderWidth: 0 + *wcsBox*TextToggle.frameType: raised + *wcsBox*TextToggle.frameWidth: 1 + *wcsBox*TextToggle.leftMargin: 2 + *wcsBox*borderWidth: 0 + *wcsBox.layout: vertical { \ + wcsFrame < +inf -inf * > \ + 2 \ + horizontal { \ + 2 \ + ismToggle < +inf -inf * > 2 \ + pixelTable < +inf -inf * > 2 \ + imageHeader < +inf -inf * > 2 \ + compass < +inf -inf * > 2 \ + wcsOptions < +inf -inf * > \ + 2 \ + } \ + } + *ismToggle.label: ISM Mod + *ismToggle.label: WCS/Pix + *pixelTable.label: Pix Table + *imageHeader.label: Header + *imageHeader.sensitive: False + *compass.label: Compass + *wcsOptions.label: Options + + *wcsGroup.label: + *wcsGroup.outerOffset: 0 + *wcsGroup.innerOffset: 5 + *wcsGroup.frameType: chiseled + *wcsGroup.frameWidth: 2 + *wcsGroup*Text*width: 260 + *wcsGroup*Text*height: 17 + *wcsGroup*Text*font: 7x13 + *wcsGroup*Text*displayCaret: False + *wcsGroup*Text*editType: read + *wcsGroup*Text*background: black + *wcsGroup*Text*foreground: yellow2 + *wcsGroup*TextToggle.highlightColor: cyan + *wcsFrame.frameType: sunken + *wcsFrame.frameWidth: 1 + *wcsText*background: yellow4 + *wcsText.layout: vertical { \ + wtName < +inf -inf * > -3 \ + wtTitle < +inf -inf * > -3 \ + wtFBCfg < +inf -inf * > \ + 1 < -1 > \ + wtWcs1 < +inf -inf * > -3 \ + wtWcs2 < +inf -inf * > -3 \ + wtWcs3 < +inf -inf * > -3 \ + wtWcs4 < +inf -inf * > \ + 1 < -1 > \ + horizontal { \ + wtIPixval < +inf -inf * +inf > 1 \ + wtSPixval < +inf -inf * +inf > 1 \ + wtBPixval < +inf -inf * +inf > \ + } \ + } +} + diff --git a/vendor/x11iraf/ximtool/gui/wcs.tcl b/vendor/x11iraf/ximtool/gui/wcs.tcl new file mode 100644 index 00000000..8b14db4f --- /dev/null +++ b/vendor/x11iraf/ximtool/gui/wcs.tcl @@ -0,0 +1,464 @@ + +################################################################################ +# Coords Panel Callbacks. +################################################################################ + +# In case we need to change the values.... +#global wcsPHeight wcsPTxtHeight wcsPGrHeight wcsPOptHeight +#set wcsPHeight 267 +#set wcsPTxtHeight 132 +#set wcsPGrHeight 175 +#set wcsPOptHeight 233 +#setCoordPanelHeight + +set wcsPHeight 267 ;# full panel no options +set wcsPTxtHeight 132 ;# size of text area box +set wcsPGrHeight 175 ;# size of text area group +set wcsPOptHeight 233 ;# extra height for opts boxes + +# Set the WCS readout panel sensitivity depending on whether the ISM +# is currently enabled. +proc setCoordPanelSensitivity args \ +{ + set widgets { + wpWcs2 wpWcs3 wpWcs4 + wiWcs2 wiWcs3 wiWcs4 + wlWcs2 wlWcs3 wlWcs4 + sysWcs2 sysWcs3 sysWcs4 + fmtWcs2 fmtWcs3 fmtWcs4 + } + + send sysWcs1 set label "Display" + send fmtWcs1 set label "Default" + + for {set i 2} {$i <= 4} {incr i} { + send sysWcs$i set label "None" ; send fmtWcs$i set label "Default" + send wpWcs$i set on False ; send wiWcs$i set on False + send wtWcs$i set height 4 + } + + if {[send ismToggle get on]} { + send sysWcs2 set label "World" ; send fmtWcs2 set label "Default" + send wpWcs2 set on True ; send wiWcs2 set on True + send wtWcs2 set height 17 + + foreach w $widgets { send $w setSensitive True } + } else { + foreach w $widgets { send $w setSensitive False } + } +} + + +# Set the Coords Panel height depending on the option settings. +proc setCoordPanelHeight args \ +{ + global wcsPHeight wcsPOptHeight wcsPTxtHeight wcsPGrHeight + global tabTop + + if {$tabTop != "wcs_panel"} \ + return + + # Get the height of the text area + set panel_h $wcsPHeight + set shrinkage 0 + foreach w { wpWcs1 wpWcs2 wpWcs3 wpWcs4 woptFBinfo } { + if {[send $w get on] == 0} { + incr shrinkage 13 + } + } + if {[send woptTitles get on] == 0} { + incr shrinkage 26 + } + + set ph [expr ($wcsPHeight - $shrinkage)] + if {[send wcsOptions get on] == 1} { + incr ph $wcsPOptHeight + } + + send wcsGroup set height [ expr ($wcsPGrHeight - $shrinkage) ] + send wcsFrame set height [ expr ($wcsPTxtHeight - $shrinkage) ] + send panel set height $ph +} + +# Toggle the options display for the panel. +proc wcsOptToggle { widget type state args } \ +{ + global wcsPOptHeight + set h [ send panel get height ] + if {$state == 1} { + send panel set height [ expr ($h + $wcsPOptHeight) ] + } else { + send panel set height [ expr ($h - $wcsPOptHeight) ] + } +} ; send wcsOptions addCallback wcsOptToggle + +# Handle the panel display toggles. +proc wcsCoordsCB { widget type state args } \ +{ + + set hght [ expr (($state == 1) ? 17 : 4)] + switch $widget { + wpWcs1 { send wtWcs1 set height $hght } + wpWcs2 { send wtWcs2 set height $hght } + wpWcs3 { send wtWcs3 set height $hght } + wpWcs4 { send wtWcs4 set height $hght } + woptFBinfo { send wtFBCfg set height $hght } + woptTitles { send wtName set height $hght ; send wtTitle set height $hght } + } + setCoordPanelHeight +} +set wcValues { wpWcs1 wpWcs2 wpWcs3 wpWcs4 woptFBinfo woptTitles } +foreach w $wcValues { send $w addCallback wcsCoordsCB } + + +# Handle WCS label string options. +set wcsLabels 1 +proc wcsLabelsCB { widget type state args } \ +{ + global up_todo wcsLabels + set wcsLabels $state + #resizeCoordsBox 0 + resizeCoordsBox $up_todo + updateCoordsBox +} ; send woptLabels addCallback wcsLabelsCB + + +# Toggle the BPM tracking state. +proc wcsBPMCB { widget type state args } \ +{ + global ism_enable + if ($ism_enable) { catch { send wcspix set bpm $state } } +} ; send woptBPM addCallback wcsBPMCB + + +# Procedures to format lines in the wcsText box. +proc wcsFmtImname { name } \ +{ + send wtName set string [format " Name: %s" [string trimleft $name]] +} + +proc wcsFmtImtitle { title } \ +{ + send wtTitle set string [format " Title: %s" [string trimleft $title]] +} + +proc wcsFmtFBConfig args \ +{ + global frameWidth frameHeight frame nframes + set buf [ format "%5d x %-5d" $frameWidth $frameHeight ] + set line [ format "Frame Buf: %-13s Frame: %d of %d" \ + [string trimleft $buf] $frame $nframes ] + send wtFBCfg set string $line +} + +proc wcsFmtIValue { value } \ +{ + global coord + set line [ format " Pixel: %.11s" $value ] + send wtIPixval set string $line + if {[info exists coord(ival)]} { + set coord(ival) $value + updateCoordsBox + } +} + +proc wcsFmtSValue { value } \ +{ + global coord + set line [ format " Scaled: %.8s" $value ] + send wtSPixval set string $line + set coord(sval) [format "%s" $value] +} + +proc wcsFmtBValue { value } \ +{ + global coord + + if { [send woptBPM get on] } { + set line [ format " BPM: %s" $value ] + set color [expr { ($value == 0) ? "black" : "red" } ] + set msg [format "set string \{%s\}; set background %s" $line $color ] + set coord(bval) [format "%s" $value] + } else { + set line [ format " BPM: (off)" ] + set msg [format "set string \{%s\}" $line] + } + send wtBPixval $msg +} + +proc wcsFmtWcs { num wcsname x y xunit yunit args } \ +{ + global coord coordLab wcsLabels + + if {$wcsLabels} { + set line [ format "%4s: %12s %4s: %12s WCS: %s" \ + $xunit $x $yunit $y [string trimleft $wcsname] ] + } else { + set line [ format "%4s %12s %4s %12s %s" \ + " " $x " " $y [string trimleft $wcsname] ] + } + send wtWcs$num set string $line + + if {[info exists coord(wcs$num)]} { + if {$num == 1} { + set coord(wcs1) [ format "\{%s\} \{%s\} \{%s\}" $x $y $coord(sval) ] + } elseif {$num == 2} { + set coord(wcs2) [ format "\{%s\} \{%s\} \{%s\}" $x $y $coord(ival) ] + } else { + set coord(wcs$num) [ format "\{%s\} \{%s\} \{%s\}" $x $y $wcsname ] + } + + set coordLab(wcs$num) [ format "\{%s\} \{%s\} \{%s\}" \ + $xunit $yunit [string trimleft $wcsname ] ] + updateCoordsBox + } +} + + + +# Handle the wcsbox readout. +#------------------------------ +set up_todo 2 +set up_done 0 +set coord(ival) 0. +set coord(sval) 0. +set coord(bval) 0 +set coord(wcs1) { 0. 0. 0. } +set coord(wcs2) { 0. 0. 0. } +set coord(wcs3) { 0. 0. 0. } +set coord(wcs4) { 0. 0. 0. } + +proc wcsCoordB { widget type state args } \ +{ + global coord up_todo + + switch $widget { + wiWcs1 { set line wcs1 ;set coord($line) { 0. 0. "" } } + wiWcs2 { set line wcs2 ;set coord($line) { 0. 0. "" } } + wiWcs3 { set line wcs3 ;set coord($line) { 0. 0. "" } } + wiWcs4 { set line wcs4 ;set coord($line) { 0. 0. "" } } + } + + if {$state} { + incr up_todo + } else { + unset coord($line) + incr up_todo -1 + } + + resizeCoordsBox $up_todo + updateCoordsBox +} +set wiValues { wiWcs1 wiWcs2 wiWcs3 wiWcs4 } +foreach w $wiValues { send $w addCallback wcsCoordB } + + +# Resize the coords box depending on the panel options. +proc resizeCoordsBox { nlines } \ +{ + global track_enable wcsLabels winWidth winHeight wcsboxGeom + + if {! $track_enable} \ + return + + send wcsbox getAttributes width cur_w height cur_h + set defGeom [format "%sx%s-5-5" $cur_w $cur_h] + send imagewin parseGeometry $wcsboxGeom $defGeom x y width height + + set ew [expr (($wcsLabels == 1) ? 125 : 65)] + + # Reset to the default geometry + if {$nlines == 0} { + set x [expr ($x + $ew)] + set y [expr ($y + $height - 17 + 1)] + set new_w 166 + set new_h 17 + + } else { + if {$width > 166} { ;# not using default wcsbox + set new_w $width + } else { + set new_w [expr ($width + $ew)] + set x [expr ($x - $ew)] + if {$wcsLabels == 0} { + incr x 60 + } + } + set new_h [ expr ($nlines * 17) ] + set y [expr ($y + $height - $new_h + 1)] + } + + # Bounds checking. + if {$x < 5} { + set x 5 + } elseif {$x > [expr ($winWidth - $new_w - 5)]} { + set x [expr ($winWidth - $new_w - 5)] + } + if {$y < 5} { + set y 5 + } elseif {$y > [expr ($winHeight - $new_h - 5)]} { + set y [expr ($winHeight - $new_h - 5)] + } + + # Finally redraw the marker. + send wcsbox "\ + setAttributes \ + width $new_w \ + height $new_h \ + x $x \ + y $y; \ + redraw" + + set wcsboxGeom [send imagewin getGeometry $x $y $new_w $new_h] + send client encodewcs [expr ($winWidth / 2)] [expr ($winHeight / 2)] + updateCoordsBox +} + + +# Shortcuts for known WCS labels. +set labels(display) "TV" +set labels(logical) "Log" +set labels(physical) "Phys" +set labels(equatorial) "Eq" +set labels(ecliptic) "Ecl" +set labels(galactic) "Gal" +set labels(supergalactic) "SGal" +set labels(amplifier) "Amp" +set labels(ccd) "CCD" +set labels(detector) "Det" + + +# Format the coords box marker with the selected output options. +proc updateCoordsBox args \ +{ + global ism_enable coord coordLab wcsLabels + global up_done up_todo labels track_enable + global coord + + if {! $ism_enable} \ + return + + incr up_done + + set text "" + foreach l {wcs1 wcs2 wcs3 wcs4} { + if {[info exists coord($l)]} { + set x [lindex $coord($l) 0] + set y [lindex $coord($l) 1] + set z [string tolower [string trimleft [lindex $coord($l) 2] ] ] + if {[info exists labels($z)]} { + set z $labels($z) + } + + if {$wcsLabels && [info exists coordLab($l)]} { + set lx [lindex $coordLab($l) 0] + set ly [lindex $coordLab($l) 1] + append text [format " %4s %12.12s %4s %12.12s %9.9s \n" \ + $lx $x $ly $y $z ] + } else { + append text [format " %12.12s %12.12s %9.9s \n" $x $y $z ] + } + } + } + + # Now send the string. + if {$track_enable} { + set color [expr { ($coord(bval) == 0) ? "black" : "red" } ] + set txt [format "set text \{%s\}; set textBgColor %s; redraw noerase" \ + $text $color ] + send wcsbox $txt + } + + if {$up_done >= $up_todo} { + set up_done 0 ;# reset counter + } +} + + +# Create the WCS format menus. +#------------------------------------ +proc setWcsFmt { format line } \ +{ + catch { send wcspix set format $format $line } +} + +for {set i 1} {$i <= 4} {incr i} { + set items {} + lappend items "\"Default\" f.exec \{setWcsFmt default $i\}" + lappend items "\"Sexigesimal\" f.exec \{setWcsFmt hms $i\}" + lappend items "\"Degrees\" f.exec \{setWcsFmt deg $i\}" + lappend items "\"Radians\" f.exec \{setWcsFmt rad $i\}" + editMenu fmtMenu$i fmtWcs$i $items +} + + +# Create the default WCS type menus. +#------------------------------------ + +set defaultWcsMenu { + { "None" f.exec {setWcsSys none WCS_LINE } } + { "Display" f.exec {setWcsSys display WCS_LINE } } + { "World" f.exec {setWcsSys world WCS_LINE } } + { "Logical" f.exec {setWcsSys logical WCS_LINE } } + { "Physical" f.exec {setWcsSys physical WCS_LINE } } + { f.dblline } +} + +proc setWcsSys { sys line } \ +{ + if {[string tolower $sys] == "none"} { + wcsCoordB wiWcs$line junk 0 + send sysWcs$line set label "None"; send fmtWcs$line set label "Default" + send wpWcs$line set on False ; send wiWcs$line set on False + send wtWcs$line set height 4 + setCoordPanelHeight + + } else { + catch { send wcspix set wcs $sys $line } + } +} + +proc resetDefaultWcsMenu args \ +{ + global defaultWcsMenu + + for {set i 1} {$i <= 4} {incr i} { + regsub -all WCS_LINE $defaultWcsMenu $i menu_def + editMenu sysMenu$i sysWcs$i $menu_def + } +} ; resetDefaultWcsMenu + + +# Initialize the coordinates panel. +#------------------------------------ + +proc initCoordsPanel args \ +{ + #send wcLine set height 2 ;# kludge for label widget + + # Initialize the display strings in the coords box. + wcsFmtImname "" + wcsFmtImtitle "" + wcsFmtFBConfig + wcsFmtIValue "0." ; wcsFmtSValue "0." ; wcsFmtBValue "0" + wcsFmtWcs 1 "" "" "" " X" " Y" + wcsFmtWcs 2 "" "" "" " X" " Y" + wcsFmtWcs 3 "" "" "" " X" " Y" + wcsFmtWcs 4 "" "" "" " X" " Y" + + send fmtWcs1 set label Default + send wpWcs1 set on True ;send wiWcs1 set on True + send wpWcs2 set on True ;send wiWcs2 set on True + send wpWcs3 set on False ;send wiWcs3 set on False ;send wtWcs3 set height 4 + send wpWcs4 set on False ;send wiWcs4 set on False ;send wtWcs4 set height 4 + + # Set the Coords Panel height. + set wcsPTxtHeight [send wcsText get height] + setCoordPanelHeight + + # Set the WCS readout panel sensitivity. + setCoordPanelSensitivity + +} ; initCoordsPanel + + diff --git a/vendor/x11iraf/ximtool/gui2c.sed b/vendor/x11iraf/ximtool/gui2c.sed new file mode 100644 index 00000000..9a70a93c --- /dev/null +++ b/vendor/x11iraf/ximtool/gui2c.sed @@ -0,0 +1,6 @@ +s/\\/\\\\/g +s/"/\\"/g +s/^/"/ +s/$/",/ +p +d diff --git a/vendor/x11iraf/ximtool/iis.c b/vendor/x11iraf/ximtool/iis.c new file mode 100644 index 00000000..8217feca --- /dev/null +++ b/vendor/x11iraf/ximtool/iis.c @@ -0,0 +1,1698 @@ +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include "ximtool.h" +#include "iis.h" + +/* + * IIS.C -- IRAF/IIS "imtool" protocol module. This code is responsible for + * accepting connections from remote network clients and communicating with + * them via the imtool/iis image display server communications prototcol. + * + * fd = xim_iisOpen (xim) + * xim_iisClose (xim) + * xim_iisio (xim, &fd, &id) + * + * xim_frameLabel (xim) + * xim_encodewcs (xim, sx, sy, sz, obuf) + * xim_retCursorVal (xim, sx, sy, frame, wcs, key, strval) + * + * xim_iisiomap (w, iomap, &iomap_len) + * xim_iiscolormap (w, r, g, b, &first, &ngray, &rgb_len) + * + * xim_iisio is a callback procedure called by Xt when there is input to be + * processed on the stream used to communicate with the remote client. + */ + +#define MEMORY 01 /* frame buffer i/o */ +#define LUT 02 /* lut i/o */ +#define FEEDBACK 05 /* used for frame clears */ +#define IMCURSOR 020 /* logical image cursor */ +#define WCS 021 /* used to set WCS */ +#define SZ_IOBUF 65536 /* max size data transfer */ +#define IO_TIMEOUT 30 /* i/o not getting anywhere */ +#define MAXCONN 5 + + +#define IIS_VERSION 11 /* version 10 => 1.0 */ + /* v1.1 => fast subraster write */ +#define IIS_DEBUG 0 /* local debug flag */ + +#define SZ_IMCURVAL 160 +#define PACKED 0040000 +#define COMMAND 0100000 +#define IIS_READ 0100000 +#define IMC_SAMPLE 0040000 +#define IMT_FBCONFIG 077 +#define XYMASK 077777 +#define ALLBITPL 255 + +struct iism70 { + short tid; + short thingct; + short subunit; + short checksum; + short x, y, z; + short t; +}; + +/* Running id for frame mappings. We keep a separate id for each of the + * currently allowed MAX_FRAMES since the object id is used in the WCS + * code for the image along with the (frame_num * 100). + */ +int objid[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }; +static int *wcspix_enabled = NULL; + +static int iis_debug = -1; /* protocol debug */ + +static void set_fbconfig(), add_mapping(); +static void xim_connectClient(), xim_disconnectClient(); +static int chan_read(), chan_write(), decode_frameno(); + +static CtranPtr wcs_update(); +static IoChanPtr open_fifo(), open_inet(), open_unix(); +static IoChanPtr get_iochan(); +static MappingPtr xim_getMapping(); + +extern int errno; + + +/* XIM_IISOPEN -- Initialize the IIS protocol module and ready the module to + * accept client connections and begin processing client requests. Clients + * may connect to the server using a fifo connection or an internet or + * UNIX domain socket connection. All three types of server ports are + * simultaneously ready to receive client connections. + */ +xim_iisOpen (xim) +register XimDataPtr xim; +{ + int i, port, last_port = (xim->port + xim->nports - 1); + int nopen = 0; + + + if (open_unix (xim)) + nopen++; + if (open_fifo (xim)) + nopen++; + + for (port=xim->port; port > 0 && port <= last_port; port++) { + if (open_inet (xim, port)) + nopen++; + } + + return (nopen); +} + + +/* XIM_IISCLOSE -- Close down the IIS protocol module. + */ +void +xim_iisClose (xim) +register XimDataPtr xim; +{ + register IoChanPtr chan; + register int i; + + for (i=0, chan=NULL; i < XtNumber(xim->chan); i++) { + chan = &xim->chan[i]; + if (chan->id) { + xim_removeInput (xim, chan->id); + chan->id = NULL; + } + + switch (chan->type) { + case IO_FIFO: + if (chan->keepalive >= 0) + close (chan->keepalive); + if (chan->datain >= 0) + close (chan->datain); + if (chan->dataout >= 0) + close (chan->dataout); + chan->type = 0; + break; + + case IO_INET: + close (chan->datain); + chan->type = 0; + break; + + case IO_UNIX: + close (chan->datain); + unlink (chan->path); + chan->type = 0; + break; + } + } +} + + +/* OPEN_FIFO -- Open the imtool fifo port and make ready to accept client + * connections and begin processing client requests. There is no client + * yet at this stage. + */ +static IoChanPtr +open_fifo (xim) +register XimDataPtr xim; +{ + register IoChanPtr chan; + int datain, dataout; + int keepalive; + + +#if defined (__DARWIN__) || defined(__CYGWIN__) + /* On OS X we don't use fifos. */ + xim->input_fifo = "none"; + return (NULL); +#endif + + /* Setting the input fifo to "none" or the null string disables + * fifo support. + */ + if (!xim->input_fifo[0] || strcmp(xim->input_fifo,"none")==0) + return (NULL); + + datain = dataout = -1; + + if (IIS_DEBUG) + printf ("Opening fifo: '%s'\n", xim->input_fifo); + + /* Open the output fifo (which is the client's input fifo). We have + * to open it ourselves first as a client to get around the fifo + * open-no-client error. + */ + if ((datain = open (xim->input_fifo, O_RDONLY|O_NDELAY)) != -1) { + if ((dataout = open (xim->input_fifo, O_WRONLY|O_NDELAY)) != -1) + fcntl (dataout, F_SETFL, O_WRONLY); + else + goto done; + close (datain); + } else + goto done; + + /* Open the input stream, a FIFO pseudodevice file used by + * applications to send us commands and data. + */ + if ((datain = open (xim->output_fifo, O_RDONLY|O_NDELAY)) == -1) + goto done; + else { + /* Clear O_NDELAY for reading. */ + fcntl (datain, F_SETFL, O_RDONLY); + + /* Open the client's output fifo as a pseudo-client to make it + * appear that a client is connected. + */ + keepalive = open (xim->output_fifo, O_WRONLY); + } +done: + /* Allocate and fill in i/o channel descriptor. */ + if (datain > 0 && dataout > 0 && (chan = get_iochan(xim))) { + chan->xim = (XtPointer) xim; + chan->type = IO_FIFO; + chan->datain = datain; + chan->dataout = dataout; + chan->keepalive = keepalive; + chan->reference_frame = 1; + chan->version = 0; + chan->rf_p = &xim->frames[0]; + } else { + fprintf (stderr, "Warning: cannot open %s\n", xim->output_fifo); + xim->input_fifo = "none"; + return (NULL); + } + + /* Register input callback. */ + if (chan) { + chan->id = xim_addInput (xim, chan->datain, xim_iisio, + (XtPointer)chan); + } else { + if (datain > 0) + close (datain); + if (dataout > 0) + close (dataout); + } + + return (chan); +} + + +/* OPEN_INET -- Set up a port to be used for incoming client connections + * using internet domain sockets. + */ +static IoChanPtr +open_inet (xim, portnum) +register XimDataPtr xim; +int portnum; +{ + register int s = 0; + register IoChanPtr chan; + struct sockaddr_in sockaddr; + int reuse = 1; + + /* Setting the port to zero disables inet socket support. */ + if (portnum <= 0) + return (NULL); + + + if (IIS_DEBUG) + printf ("Opening inet port: %d\n", portnum); + + if ((s = socket (AF_INET, SOCK_STREAM, 0)) < 0) + goto err; + + memset ((void *)&sockaddr, 0, sizeof(sockaddr)); + sockaddr.sin_family = AF_INET; + sockaddr.sin_port = htons((short)portnum); + sockaddr.sin_addr.s_addr = htonl(INADDR_ANY); + if (setsockopt(s, SOL_SOCKET, SO_REUSEADDR, (char *)&reuse, + sizeof(reuse)) < 0) + goto err; + + if (bind (s, (struct sockaddr *)&sockaddr, sizeof(sockaddr)) < 0) + goto err; + + if (listen (s, MAXCONN) < 0) + goto err; + + /* Allocate and fill in i/o channel descriptor. */ + if (chan = get_iochan(xim)) { + chan->xim = (XtPointer) xim; + chan->type = IO_INET; + chan->datain = s; + chan->dataout = s; + chan->reference_frame = 1; + chan->version = 0; + chan->rf_p = &xim->frames[0]; + + /* Register connectClient callback. */ + chan->id = xim_addInput (xim,s,xim_connectClient,(XtPointer)chan); + return (chan); + } + + +err: + if (errno == EADDRINUSE) { + fprintf (stderr,"ximtool: inet port %d already in use - disabled\n", + portnum); + } else { + fprintf (stderr, "ximtool: can't open inet socket %d, errno=%d\n", + portnum, errno); + } + xim->port = 0; + if (s) + close (s); + return (NULL); +} + + +/* OPEN_UNIX -- Set up a port to be used for incoming client connections + * using unix domain sockets. + */ +static IoChanPtr +open_unix (xim) +register XimDataPtr xim; +{ + register int s = 0; + register IoChanPtr chan; + struct sockaddr_un sockaddr; + int addrlen; + char path[256]; + + /* Setting the addr to "none" or the null string disables unix + * socket support. + */ + if (!xim->unixaddr[0] || strcmp(xim->unixaddr,"none")==0) + return (NULL); + + + if (IIS_DEBUG) + printf ("Opening unix socket: '%s'\n", xim->unixaddr); + + /* Get path to be used for the unix domain socket. */ + sprintf (path, xim->unixaddr, getuid()); + unlink (path); + + if ((s = socket (AF_UNIX, SOCK_STREAM, 0)) < 0) + goto err; + + memset ((void *)&sockaddr, 0, sizeof(sockaddr)); + sockaddr.sun_family = AF_UNIX; + strcpy (sockaddr.sun_path, path); + addrlen = sizeof(sockaddr) - sizeof(sockaddr.sun_path) + strlen(path); + if (bind (s, (struct sockaddr *)&sockaddr, addrlen) < 0) + goto err; + + if (listen (s, MAXCONN) < 0) + goto err; + + /* Allocate and fill in i/o channel descriptor. */ + if (chan = get_iochan(xim)) { + chan->xim = (XtPointer) xim; + chan->type = IO_UNIX; + chan->datain = s; + chan->dataout = s; + chan->reference_frame = 1; + chan->version = 0; + chan->rf_p = &xim->frames[0]; + strncpy (chan->path, path, SZ_FNAME); + + /* Register connectClient callback. */ + chan->id = xim_addInput (xim,s,xim_connectClient,(XtPointer)chan); + return (chan); + } +err: + if (errno == EADDRINUSE) { + fprintf (stderr,"ximtool: unix addr %s already in use - disabled\n", + path); + } else { + fprintf (stderr,"ximtool: cannot open unix socket '%s', errno=%d\n", + path, errno); + } + strcpy (xim->unixaddr, "none"); + if (s) + close (s); + return (NULL); +} + + +/* XIM_CONNECTCLIENT -- Called when a client has attempted a connection on + * a socket port. Accept the connection and set up a new i/o channel to + * communicate with the new client. + */ +static void +xim_connectClient (chan_port, source, id) +IoChanPtr chan_port; +int *source; +XtPointer id; +{ + register XimDataPtr xim = (XimDataPtr) chan_port->xim; + register IoChanPtr chan; + register int s; + + /* Accept connection. */ + if ((s = accept ((int)*source, (struct sockaddr *)0, (int *)0)) < 0) + return; +/* + if (fcntl (s, F_SETFL, O_RDWR|O_NDELAY) < 0) { + close (s); + return; + } +*/ + + /* Allocate and fill in i/o channel descriptor. */ + if (chan = get_iochan(xim)) { + chan->xim = (XtPointer) xim; + chan->type = chan_port->type; + chan->datain = s; + chan->dataout = s; + chan->reference_frame = 1; + chan->version = 0; + chan->rf_p = &xim->frames[0]; + chan->id = xim_addInput (xim, s, xim_iisio, (XtPointer)chan); + } +} + + +/* XIM_DISCONNECTCLIENT -- Called to close a client connection when EOF is + * seen on the input port. Close the connection and free the channel + * descriptor. + */ +static void +xim_disconnectClient (chan) +register IoChanPtr chan; +{ + switch (chan->type) { + case IO_INET: + case IO_UNIX: + close (chan->datain); + if (chan->id) { + xim_removeInput (chan->xim, chan->id); + chan->id = NULL; + } + chan->type = 0; + break; + default: + break; + } +} + + +/* GET_IOCHAN --- Get an i/o channel descriptor. + */ +static IoChanPtr +get_iochan (xim) +register XimDataPtr xim; +{ + register IoChanPtr chan; + register int i; + + for (i=0; i < XtNumber(xim->chan); i++) + if (!xim->chan[i].type) + return (&xim->chan[i]); + + return (NULL); +} + + +/* XIM_IISIO -- Xt file i/o callback procedure, called when there is input + * pending on the data stream to the ximtool client. + */ +void +xim_iisio (chan, fd_addr, id_addr) +IoChanPtr chan; +int *fd_addr; +XtInputId *id_addr; +{ + register XimDataPtr xim = (XimDataPtr) chan->xim; + register MappingPtr mp = (MappingPtr) NULL; + register FrameBufPtr fb; + register int sum, i; + register short *p; + int datain = *fd_addr; + int dataout = chan->dataout; + int ndatabytes, nbytes, n, newframe, ntrys=0; + struct iism70 iis; + char buf[SZ_FIFOBUF]; + static int errmsg=0, bswap=0; + + + /* Initialize the debug output. */ + if (iis_debug == -1) + iis_debug = (getenv("DEBUG_IIS") != (char *)NULL); + + /* Get the IIS header. */ + if ((n = chan_read (datain, (char *)&iis, sizeof(iis))) < sizeof(iis)) { + if (n != 0) + fprintf (stderr, + "ximtool: command input read error, n=%d of %d, errno=%d\n", + n, sizeof(iis), errno); + if (n <= 0) + xim_disconnectClient (chan); + return; + } else if (bswap) + bswap2 ((char *)&iis, (char *)&iis, sizeof(iis)); + + /* Verify the checksum. If it fails swap the bytes and try again. + */ + for (;;) { + for (i=0, sum=0, p=(short *)&iis; i < 8; i++) + sum += *p++; + if ((sum & 0177777) == 0177777) + break; + + if (ntrys++) { + if (!errmsg++) { + fprintf (stderr, "ximtool: bad data header checksum\n"); + if (bswap) + bswap2 ((char *)&iis, (char *)&iis, sizeof(iis)); + fprintf (stderr, "noswap:"); + for (i=0, p=(short *)&iis; i < 8; i++) + fprintf (stderr, " %6o", p[i]); + fprintf (stderr, "\n"); + + bswap2 ((char *)&iis, (char *)&iis, sizeof(iis)); + fprintf (stderr, " swap:"); + for (i=0, p=(short *)&iis; i < 8; i++) + fprintf (stderr, " %6o", p[i]); + fprintf (stderr, "\n"); + } + break; + + } else { + bswap2 ((char *)&iis, (char *)&iis, sizeof(iis)); + bswap = !bswap; + } + } + + ndatabytes = -iis.thingct; + if (!(iis.tid & PACKED)) + ndatabytes *= 2; + + if (iis_debug) { + fprintf (stderr, + "subunit=%06o tid=%06o nbytes=%7d x=%06o y=%06o z=%06o t=%06o\n", + iis.subunit & 077, + iis.tid, + ndatabytes, + iis.x & 0177777, + iis.y & 0177777, + iis.z & 0177777, + iis.t & 0177777); + fflush (stderr); + } + + + switch (iis.subunit & 077) { + case FEEDBACK: + /* The feedback unit is used only to clear a frame. The + * xim_eraseFrame() procedure takes care of uncaching the + * mappings associated with this frame. + */ + newframe = decode_frameno (iis.z & 0177777); + xim_setReferenceFrame (chan, newframe); + if (newframe == chan->reference_frame) + xim_eraseFrame (xim, chan->reference_frame); + + /* ISM: Uncache all mappings associated with this frame. */ + fb = &xim->frames[newframe-1]; + for (i=0; i < fb->nmaps; i++) { + mp = &fb->mapping[i]; + if (mp->id) { + sprintf (buf, "uncache %d", mp->id); + ism_message (xim, "wcspix", buf); + wcspix_message (xim, buf); + mp->id = 0; + } + } + + /* Reset various counters for the new frame and release the + * mappings. + */ + fb->nmaps = 0; + fb->ctran.valid = 0; + objid[newframe-1] = 0; + fb->nmaps = 0; + + if (iis_debug) + fprintf (stderr, "erase frame %d - ref = %d\n", + newframe, chan->reference_frame); + break; + + case LUT: + /* Data mode writes to the frame lookup tables are not implemented. + * A command mode write to the LUT subunit is used to connect + * image memories up to the RGB channels, i.e., to select the frame + * to be displayed. We ignore any attempt to assign multiple + * frames to multiple color channels, and just do a simple frame + * select. + */ + if (iis.subunit & COMMAND) { + int frame, z, n; + short x[17]; + + if (chan_read (datain, (char *)x, ndatabytes) == ndatabytes) { + if (bswap) + bswap2 ((char *)x, (char *)x, ndatabytes); + + z = x[0]; + if (!z) z = 1; + for (n=0; !(z & 1); z >>= 1) + n++; + + frame = max (1, n + 1); + if (frame > xim->nframes) { + if (frame <= MAX_FRAMES) { + set_fbconfig (chan, xim->fb_configno, frame); + if (iis_debug) + fprintf (stderr, "set_fbconfig (%d, %d)\n", + xim->fb_configno, frame); + } else { + fprintf (stderr, "ximtool warning: "); + fprintf (stderr, + "attempt to display nonexistent frame %d\n", + frame); + return; + } + } + + xim_setDisplayFrame (xim, frame); + if (iis_debug) + fprintf (stderr, "set_frame (%d)\n", frame); + return; + } + } + + case MEMORY: + /* Load data into the frame buffer. Data is assumed to be byte + * packed. + */ + if (iis.tid & IIS_READ) { + /* Read from the display. + */ + unsigned char *ip, iobuf[SZ_IOBUF]; + int nbytes, nleft, n, x, y; + long starttime; + + /* Get the frame to read from. */ + xim_setReferenceFrame (chan, decode_frameno (iis.z & 0177777)); + + nbytes = ndatabytes; + x = iis.x & XYMASK; + y = iis.y & XYMASK; + + if (x < 0 || x >= xim->width || y < 0 || y >= xim->height) { + fprintf (stderr, + "ximtool: attempted read out of bounds on framebuf\n"); + fprintf (stderr, + "read %d bytes at [%d,%d]\n", nbytes, x, y); + memset ((void *)iobuf, 0, nbytes); + } else { + int nx, ny; + + /********** OLD CODE ********* + GtReadPixels (xim->gt, chan->rf_p->raster, iobuf, 8, x, y, + min(xim->width-x,nbytes), max(1,nbytes/xim->width)); + ********** OLD CODE **********/ + + /* If the iis.t element is set, it will contain the width + ** of the subraster being read. In the old scheme we + ** assumed we were reading the entire width of the FB. + */ + if (iis.t > 0 && iis.t != ALLBITPL) { + nx = min (xim->width-x, iis.t); + ny = max (1, nbytes/iis.t); + } else { + nx = min (xim->width-x, nbytes); + ny = max (1, nbytes/xim->width); + } + GtReadPixels (xim->gt, chan->rf_p->raster, iobuf, 8, x, y, + nx, ny); + + if (iis_debug) + fprintf (stderr, + "read %d bytes at [%d,%d]\n", nbytes, x, y); + } + + /* Return the data from the frame buffer. */ + starttime = time(0); + for (nleft=nbytes, ip=iobuf; nleft > 0; nleft -= n) { + n = (nleft < SZ_FIFOBUF) ? nleft : SZ_FIFOBUF; + if ((n = chan_write (dataout, ip, n)) <= 0) { + if (n < 0 || (time(0) - starttime > IO_TIMEOUT)) { + fprintf (stderr, "XIMTOOL: timeout on write\n"); + break; + } + } else + ip += n; + } + + return; + + } else { + /* Write to the display. + */ + unsigned char *op, iobuf[SZ_IOBUF]; + int nbytes, nleft, n, x, y; + long starttime; + + /* Get the frame to be written into (encoded with a bit for + * each frame, 01 is frame 1, 02 is frame 2, 04 is frame 3, + * and so on). + */ + xim_setReferenceFrame (chan, decode_frameno (iis.z & 0177777)); + + nbytes = ndatabytes; + x = iis.x & XYMASK; + y = iis.y & XYMASK; + + /* Read the data into the frame buffer. + */ + starttime = time(0); + for (nleft=nbytes, op=iobuf; nleft > 0; nleft -= n) { + n = (nleft < SZ_FIFOBUF) ? nleft : SZ_FIFOBUF; + if ((n = chan_read (datain, op, n)) <= 0) { + if (n < 0 || (time(0) - starttime > IO_TIMEOUT)) { + fprintf (stderr, "XIMTOOL: timeout on read\n"); + break; + } + } else + op += n; + } + + if (x < 0 || x >= xim->width || y < 0 || y >= xim->height) { + fprintf (stderr, + "ximtool: attempted write out of bounds on framebuf\n"); + fprintf (stderr, + "write %d bytes at [%d,%d]\n", nbytes, x, y); + memset ((void *)iobuf, 0, nbytes); + } else { + int nx, ny; + + /********** OLD CODE ********* + GtWritePixels (xim->gt, chan->rf_p->raster, iobuf, 8, x, y, + min(xim->width-x,nbytes), max(1,nbytes/xim->width)); + ********** OLD CODE **********/ + + /* If the iis.t element is set, it will contain the width + ** of the subraster being written. In the old scheme we + ** assumed we were writing the entire width of the FB. + */ + if (iis.t > 0 && iis.t != ALLBITPL) { + nx = min (xim->width-x, iis.t); + ny = max (1, nbytes/iis.t); + } else { + nx = min (xim->width-x, nbytes); + ny = max (1, nbytes/xim->width); + } + GtWritePixels (xim->gt, chan->rf_p->raster, iobuf, 8, + x, y, nx, ny); + + if (iis_debug) + fprintf (stderr, "write %d bytes at x=%d, y=%d\n", + nbytes, x, y, nx, ny); + } + + return; + } + break; + + case WCS: + /* Read or write the WCS for a frame. The frame number to + * which the WCS applies is passed in Z and the frame buffer + * configuration in T. The client changes the frame buffer + * configuration in a WCS set. The WCS text follows the header + * as byte packed ASCII data. + */ + if (iis.tid & IIS_READ) { + /* Return the WCS for the referenced frame. + */ + char emsg[SZ_WCSBUF]; + char *text; + int frame, wcsnum; + + memset ((char *)emsg, 0, SZ_WCSBUF); + + if ((iis.x & 017777) && (iis.y & 017777)) { + /* This is a check by the client on our capabilities. + * Return with a version number which can be used by the + * client. However we write back using the old WCS + * buffer size for compatability. + */ + sprintf (text=emsg, "version=%d", IIS_VERSION); + chan->version = IIS_VERSION; + + chan_write (dataout, text, SZ_OLD_WCSBUF); + if (iis_debug) + fprintf (stderr, "version query wcs: %s\n",text); + + } else if ((iis.x & 017777) && (iis.t & 017777)) { + /* Return the buffer for a specified WCS number. + */ + CtranPtr ct = (CtranPtr) NULL; + FrameBufPtr fr = (FrameBufPtr) NULL; + int wcsnum = (iis.t & 017777); + register int i, j; + + + /* Decode the requested wcs number. */ + frame = decode_frameno (iis.z & 0177777); + + /* Search for the requested WCS number. */ + mp = (MappingPtr) NULL; + for (j=0; j < xim->nframes; j++) { + fr = &xim->frames[j]; + if (fr->frameno != frame) + continue; + for (i=0; i < fr->nmaps; i++) { + mp = &fr->mapping[i]; + if (mp->id == wcsnum) { + /* found the mapping */ + ct = &(mp->ctran); + goto map_found; + } + } + } + + /* Encode the WCS and mapping information. */ +map_found: if (ct) { + char wcs[SZ_WCSBUF], mapping[SZ_WCSBUF]; + + sprintf (wcs, "%s\n%f %f %f %f %f %f %f %f %d\n", + ct->imtitle, ct->a, ct->b, ct->c, ct->d, + ct->tx, ct->ty, ct->z1, ct->z2, ct->zt); + sprintf (mapping, "%s %f %f %d %d %d %d %d %d\n%s\n", + mp->region, mp->sx, mp->sy, mp->snx, mp->sny, + mp->dx, mp->dy, mp->dnx, mp->dny, mp->ref); + + strcpy (text=emsg, wcs); + strcat (text, mapping); + } else + strcpy (text=emsg, "[NOSUCHWCS]\n"); + + chan_write (dataout, text, SZ_WCSBUF); + + if (iis_debug) { + fprintf (stderr, "query specified wcs=%d frame=%d\n", + wcsnum, frame); + write (2, text, strlen (text)); + } + + } else { + frame = decode_frameno (iis.z & 0177777); + xim_setReferenceFrame (chan, frame); + + if (chan->rf_p->frameno <= 0) + strcpy (text=emsg, "[NOSUCHFRAME]\n"); + else + text = chan->rf_p->wcsbuf; + + if ((iis.x & 0777)) + chan_write (dataout, text, SZ_WCSBUF); + else + chan_write (dataout, text, SZ_OLD_WCSBUF); + + if (iis_debug) { + fprintf (stderr, "query wcs: frame = %d\n", frame); + write (2, text, strlen(text)); + } + } + + } else { + /* Set the WCS for the referenced frame. + */ + register CtranPtr ct; + int fb_config, frame, new_wcs = 0; + + frame = decode_frameno (iis.z & 0177777); + fb_config = (iis.t & 0777) + 1; + new_wcs = (iis.x & 0777); + + /* See if we need to change the frame buffer configuration, + * or allocate a new frame. + */ + if (fb_config != xim->fb_configno) + set_fbconfig (chan, fb_config, frame); + else if (frame > xim->nframes && frame <= MAX_FRAMES) + set_fbconfig (chan, xim->fb_configno, frame); + + /* Read in and set up the WCS. */ + xim_setReferenceFrame (chan, frame); + memset ((char *)buf, 0, SZ_WCSBUF); + if (chan_read (datain, buf, ndatabytes) == ndatabytes) + strncpy (chan->rf_p->wcsbuf, buf, + (new_wcs ? SZ_WCSBUF : SZ_OLD_WCSBUF)); + + if (iis_debug) { + fprintf (stderr, "set wcs:\n"); + write (2, buf, ndatabytes); + } + + strcpy (chan->rf_p->ctran.format, W_DEFFORMAT); + chan->rf_p->ctran.imtitle[0] = '\0'; + chan->rf_p->ctran.valid = 0; + ct = wcs_update (xim, chan->rf_p); + + /* If we're connected to an old-style client, disable the + * WCSPIX ISM, otherwise just let the GUI know it capable. + */ + wcspix_message (xim, (new_wcs ? "capable" : "disable")); + + /* Add the mapping information. */ + add_mapping (xim, ct, chan->rf_p->wcsbuf, + &xim->frames[chan->reference_frame-1]); + + xim_message (xim, "frameTitle", ct->imtitle); + } + return; + + case IMCURSOR: + /* Read or write the logical image cursor. This is an extension + * added to provide a high level cursor read facility; this is + * not the same as a low level access to the IIS cursor subunit. + * Cursor reads may be either nonblocking (immediate) or blocking, + * using the keyboard or mouse to terminate the read, and + * coordinates may be returned in either image (world) or frame + * buffer pixel coordinates. + */ + if (iis.tid & IIS_READ) { + /* Read the logical image cursor. In the case of a blocking + * read all we do is initiate a cursor read; completion occurs + * when the user hits a key or button. + */ + if (iis_debug) + fprintf (stderr, "read cursor position\n"); + if (iis.tid & IMC_SAMPLE) { + /* Sample the cursor position and return the cursor value + * on the output datastream encoded in a fixed size + * ascii buffer. + */ + int wcs = iis.z; + int raster, frame; + float sx, sy; + IoChanPtr sv_chan; + + /* Save the cursor channel so that sampled cursor reads + * can occur on one channel without affecting any + * interactive cursor reads in progress on another + * channel. + */ + sv_chan = xim->cursor_chan; + xim->cursor_chan = chan; + xim_getCursorPos (xim, &sx, &sy, &raster, &frame); + xim_retCursorVal (xim, sx, sy, frame, wcs, 0, ""); + xim->cursor_chan = sv_chan; + + } else { + /* Initiate a user triggered cursor read. */ + if (xim->cursor_chan) { + int frame = xim->cursor_chan->reference_frame; + xim_retCursorVal (xim, 0., 0., frame, 0, EOF, ""); + } + xim->cursor_chan = chan; + xim_cursorMode (xim, 1); + } + + } else { + /* Write (set) the logical image cursor position. */ + register CtranPtr ct; + int sx = iis.x, sy = iis.y; + float wx = sx, wy = sy; + int wcs = iis.z; + + if (iis_debug) + fprintf(stderr, "write cursor position: [%d,%d]\n", sx, sy); + if (wcs) { + ct = wcs_update (xim, xim->df_p); + if (ct->valid) { + if (abs(ct->a) > .001) + sx = (wx - ct->tx) / ct->a; + if (abs(ct->d) > .001) + sy = (wy - ct->ty) / ct->d; + } + } + + xim_setCursorPos (xim, sx, sy); + } + return; + + default: + /* Ignore unsupported command input. + */ + break; + } + + /* Discard any data following the header. */ + if (!(iis.tid & IIS_READ)) + for (nbytes = ndatabytes; nbytes > 0; nbytes -= n) { + n = (nbytes < SZ_FIFOBUF) ? nbytes : SZ_FIFOBUF; + if ((n = chan_read (datain, buf, n)) <= 0) { + if (iis_debug) + fprintf (stderr, + "discarding %d bytes following header:\n", n); + break; + } + } +} + + +/* XIM_IISIOMAP, XIM_IISCOLORMAP -- Set the iomap and colormap for a Gterm + * widget to emulate the color allocation scheme assumed by the imtool + * protocol. + * + * The nominal pixel mappings are as follows. + * + * Imtool Gterm Description + * + * 0 0 background + * 1 - 200 10-209 image data + * 201 210 cursor (white) + * 202 0 background (black) + * 203 1 white + * 204 2 red + * 205 3 green + * 206 4 blue + * 207 6 yellow + * 208 5 cyan + * 209 7 magenta + * 210 211 coral + * 211 212 maroon + * 212 213 orange + * 213 214 khaki + * 214 215 orchid + * 215 216 turquoise + * 216 217 violet + * 217 218 wheat + * + * The Gterm color allocation is the standard 10 static colors, followed by + * 200 dynamically allocated colors used to display image data, followed by + * a few additional colors. Only the block of 200 colors are subject to + * modification when the display is windowed or a new colortable is loaded. + * + * If the gterm widget is permitted a sufficient number of dynamic colors then + * pixels will be allocated as in the figure above. If there are too few + * colormap cells available to allocate all the colors then the image data + * region of gterm colormap space will be shrunk to make up the difference. + * The full set of static colors (imtool:201-217) are always allocated; it + * is the range 1-200 which is reduced if there are too few colors. The + * iomap always makes it appear to the client that the full range of 200 + * image levels and 17 static colors are available, even if the actual number + * of color cells available is less. + * + * The input arrays should be dimension of length 256. The number of + * iomap entries and number of RGB entries set is returned in the output + * variables iomap_len and rgb_len. + */ +xim_iisiomap (w, iomap, iomap_len) +register XtPointer w; +unsigned short *iomap; +int *iomap_len; +{ + register int i; + int first, nelem, maxelem; + int delta; + + GtQueryColormap (w, 0, &first, &nelem, &maxelem); + delta = min(maxelem,209) - 209; + + /* Set the iomap. */ + iomap[0] = 0; + for (i=1; i < 201; i++) + iomap[i] = (200 + delta) * (i-1) / 200 + first; + iomap[201] = first + 200 + delta; + for (i=0; i < 8; i++) + iomap[202+i] = i; + iomap[207] = 6; + iomap[208] = 5; + for (i=0; i < 8; i++) + iomap[210+i] = first + 201 + i + delta; + *iomap_len = 218; +} + + +/* xim_iiscolormap -- This is the gterm colormap for the IIS emulation, set + * before the IIS iomap is defined. The first colormap cell corresponds to + * first = gterm color 10. + */ +xim_iiscolormap (w, r, g, b, first, ngray, rgb_len) +register XtPointer w; +unsigned short *r, *g, *b; +int *first, *ngray, *rgb_len; +{ + register int i, j; + int nelem, maxelem; + int delta; + + GtQueryColormap (w, 0, first, &nelem, &maxelem); + delta = min(maxelem,209) - 209; + + /* Set the colormap. */ + for (i=0; i < 256; i++) + r[i] = g[i] = b[i] = 0; + for (i=0; i < 200 + delta; i++) + r[i] = g[i] = b[i] = (i * 255 / (200 + delta)); + + r[i] = 255; g[i] = 255; b[i] = 255; i++; /* 210=cursor */ + r[i] = 255; g[i] = 127; b[i] = 0; i++; /* 211=coral */ + r[i] = 142; g[i] = 35; b[i] = 107; i++; /* 212=maroon */ + r[i] = 204; g[i] = 50; b[i] = 50; i++; /* 213=orange */ + r[i] = 159; g[i] = 159; b[i] = 95; i++; /* 214=khaki */ + r[i] = 219; g[i] = 112; b[i] = 219; i++; /* 215=orchid */ + r[i] = 112; g[i] = 219; b[i] = 219; i++; /* 216=turquoise */ + r[i] = 159; g[i] = 95; b[i] = 159; i++; /* 217=violet */ + r[i] = 216; g[i] = 216; b[i] = 191; i++; /* 218=wheat */ + + /* Scale colormap values to 16 bits. */ + for (j=0; j < i; j++) { + r[j] <<= 8; + g[j] <<= 8; + b[j] <<= 8; + } + + *ngray = 200 + delta; + *rgb_len = i; +} + + +/* SET_FBCONFIG -- Set the frame buffer configuration, or add additional + * frames to the current configuration. + */ +static void +set_fbconfig (chan, config, frame) +IoChanPtr chan; +int config; +int frame; +{ + register XimDataPtr xim = (XimDataPtr) chan->xim; + register FrameBufPtr fb = &xim->frames[frame-1]; + register int i; + + if (config != xim->fb_configno) { + /* Change the frame buffer configuration. */ + xim_initialize (xim, config, + max (xim->fb_config[config-1].nframes, frame), 1); + + /* Reinitialize the tile framing if enabled. */ + if (xim->tileFrames) + xim_tileFrames (xim, xim->tileFramesList); + + /* Initialize the ISM to uncache all images when we change + * frame buffer configs. + */ + ism_message (xim, "wcspix", "initialize"); + + } else if (frame > xim->nframes) { + /* Add additional frames. */ + for (i=1; i <= frame; i++) { + fb = &xim->frames[i-1]; + if (fb->frameno != i) { + xim_initFrame (xim, i, frame, + &xim->fb_config[config-1], xim->memModel); + + /* If we're in tile mode, add the frame to the tile list + * and if needed resize the tile frames. + */ + if (xim->tileFrames) { + xim->tileFramesList |= (1 << (i-1)); + xim->nTileFrames++; + xim_tileFrames (xim, xim->tileFramesList); + } + } + } + } + + xim_setReferenceFrame (chan, frame); + if (frame != xim->display_frame) + xim_setDisplayFrame (xim, frame); +} + + +/* DECODE_FRAMENO -- Decode encoded IIS register frame number. + */ +static +decode_frameno (z) +register int z; +{ + register int n; + + /* Get the frame number, encoded with a bit for each frame, 01 is + * frame 1, 02 is frame 2, 04 is frame 3, and so on. + */ + if (!z) z = 1; + for (n=0; !(z & 1); z >>= 1) + n++; + + return (max (1, n + 1)); +} + + +/* XIM_RETCURSORVAL -- Return the cursor value on the output datastream to + * the client which requested the cursor read. + */ +xim_retCursorVal (xim, sx, sy, frame, wcs, key, strval) +register XimDataPtr xim; +float sx, sy; /* cursor screen coordinates */ +int frame; /* frame number */ +int wcs; /* nonzero if WCS coords desired */ +int key; /* keystroke used as trigger */ +char *strval; /* optional string value */ +{ + register CtranPtr ct; + register MappingPtr mp = (MappingPtr) NULL; + int dataout, wcscode; + char curval[SZ_IMCURVAL]; + char keystr[20]; + float wx, wy; + + if (xim->cursor_chan) + dataout = xim->cursor_chan->dataout; + else + return; + + /* Compute cursor coordinates. */ + if (wcs) { + ct = wcs_update (xim, xim->df_p); + if (ct->valid) { + /* The imtool WCS assumes that the center of the first display + * pixel is at (0,0) but actually it is at (0.5,0.5). + */ + sx -= 0.5; + sy -= 0.5; + + if (abs(ct->a) > .001) + wx = ct->a * sx + ct->c * sy + ct->tx; + if (abs(ct->d) > .001) + wy = ct->b * sx + ct->d * sy + ct->ty; + } + } else { + wx = sx; + wy = sy; + } + + /* Compute WCS code. */ + wcscode = frame * 100 + wcs; + if (wcspix_enabled != NULL && *wcspix_enabled) { + if ((mp = xim_getMapping (xim, sx, sy, frame))) { + wcscode = mp->id; + + /* Return the coordinates in terms of the mapping. */ + ct = &(mp->ctran); + wx = ct->a * sx + ct->c * sy + ct->tx; + wy = ct->b * sx + ct->d * sy + ct->ty; + } + } + + /* Encode the cursor value. */ + if (key == EOF) + sprintf (curval, "EOF\n"); + else { + if (isprint (key) && !isspace(key)) { + keystr[0] = key; + keystr[1] = '\0'; + } else + sprintf (keystr, "\\%03o", key); + + sprintf (curval, "%10.3f %10.3f %d %s %s\n", + wx, wy, wcscode, keystr, strval); + } + + + if (iis_debug) fprintf (stderr, "curval: %s", curval); + + /* Send it to the client program and terminate cursor mode. */ + chan_write (dataout, curval, sizeof(curval)); + xim_cursorMode (xim, 0); + xim->cursor_chan = NULL; +} + + +/* XIM_ENCODEWCS -- Transform the input screen (raster) coordinates and + * pixel value and return a string giving X, Y, and the pixel intensity in + * world units. + */ +xim_encodewcs (xim, sx, sy, sz, obuf) +register XimDataPtr xim; +float sx, sy; /* screen (raster) pixel coordinates */ +int sz; /* screen pixel value */ +char *obuf; /* receives encoded string */ +{ + register CtranPtr ct; + MappingPtr mp = (MappingPtr) NULL; + float wx, wy, wz; + float y = xim->height - sy; + register int j=0, i=0, ch, map_found = 0; + char buf[SZ_LINE]; + + + /* The first time we're called get the address of the wcspix + * connected flag so we can check whether to get screen pixel + * or real-image values. + */ + if (wcspix_enabled == NULL) { + register IsmModule ism; + extern ismModule ism_modules[]; + extern int ism_nmodules; + + for (i=0; i < ism_nmodules; i++) { + ism = &ism_modules[i]; + if (strcmp ("wcspix", ism->name) == 0) + wcspix_enabled = &(ism->connected); + } + } + + + /* Now lookup the coordinate mapping and update the WCS and real + * pixel value if the ISM is running. + */ + if (wcspix_enabled != NULL && *wcspix_enabled) { + if ((mp = xim_getMapping (xim, sx+1.0, sy, xim->display_frame))) { + ct = &(mp->ctran); + sx -= 0.5; + sy -= 0.5; + wx = ct->a * sx + ct->c * sy + ct->tx; + wy = ct->b * sx + ct->d * sy + ct->ty; + +/* +printf ("sx: %f sy: %f\n", sx, sy); +printf ("ct: %s\n%f %f %f %f %f %f %f %f %d\n", + ct->imtitle, ct->a, ct->b, ct->c, ct->d, + ct->tx, ct->ty, ct->z1, ct->z2, ct->zt); +printf ("mp: %s %f %f %d %d %d %d %d %d\n%s\n\n", + mp->region, mp->sx, mp->sy, mp->snx, mp->sny, + mp->dx, mp->dy, mp->dnx, mp->dny, mp->ref); +printf ("wx: %f wy: %f\n", wx, wy); +*/ + + /* Found the image mapping so request the WCS + * and pixel information from the WPIX ISM. + */ + if (mp->ref != NULL) { + sprintf (buf, "wcstran %d %g %g\n", mp->id, wx, wy); + ism_message (xim, "wcspix", buf); + } + map_found++; + } + } + + ct = wcs_update (xim, xim->df_p); + if (ct->valid) { + /* The imtool WCS assumes that the center of the first display + * pixel is at (0,0) but actually it is at (0.5,0.5). + */ + + wx = ct->a * sx + ct->c * sy + ct->tx; + wy = ct->b * sx + ct->d * sy + ct->ty; + + if (sz == 0) + wz = 0.0; + else { + switch (ct->zt) { + case W_LINEAR: + wz = ((sz - CMS_DATASTART) * (ct->z2 - ct->z1) / + (CMS_DATARANGE-1)) + ct->z1; + break; + default: + wz = sz; + break; + } + } + } else { + wx = sx; + wy = sy; + wz = sz; + } + + ch = ' '; + if (sz && ct->valid) { + if (ct->z1 < ct->z2) { + if (wz < (ct->z1 + 0.01)) + ch = '-'; + else if (wz > (ct->z2 - 0.01)) + ch = '+'; + } else if (ct->z1 > ct->z2) { + if (wz < (ct->z2 + 0.01)) + ch = '-'; + else if (wz > (ct->z1 - 0.01)) + ch = '+'; + } + } + sprintf (obuf, ct->format, wx + 0.005, wy + 0.005, wz, ch); +} + + +/* XIM_GETMAPPING -- Return the mapping struct for the given screen coords. + */ +static MappingPtr +xim_getMapping (xim, sx, sy, frame) +register XimDataPtr xim; +float sx, sy; /* screen (raster) pixel coordinates */ +int frame; +{ + FrameBufPtr fb = (FrameBufPtr) NULL; + MappingPtr mp = (MappingPtr) NULL; + register int j=0, i=0; + float y = xim->height - sy; + char buf[SZ_LINE]; + register map_debug = 0; + + + /* Loop through the frame buffers until we find the current one. + * The mappings aren't stored in the display fb so we need to + * search. + */ + for (j=0; j < xim->nframes; j++) { + fb = &xim->frames[j]; + + if (frame == fb->frameno) { + /* Got the right frame, now search for mappings on this + * frame which intersect the screen coords. We assume there + * are no overlapping image mappings. + */ + for (i=0; i < fb->nmaps; i++) { + mp = &fb->mapping[i]; + if (map_debug) { + printf ("%d: sx=%.2f sy=%.2f / %.2f --> ",i,sx,sy,y); + printf ("mp->dx=%d+%d=%d mp->dy=%d+%d=%d", + mp->dx, mp->dnx, mp->dx+mp->dnx, + mp->dy, mp->dny, mp->dy+mp->dny); + } + if ((sx >= mp->dx && sx <= (mp->dx + mp->dnx)) && + ( y >= mp->dy && y <= (mp->dy + mp->dny))) { + if (map_debug) printf (" YES\n"); + return (mp); + } + if (map_debug) printf (" NO\n"); + } + } + } + + return ((MappingPtr) NULL); +} + + +/* XIM_FRAMELABEL -- Return a pointer to the frame label string for the current + * frame. + */ +char * +xim_frameLabel (xim) +register XimDataPtr xim; +{ + register FrameBufPtr df_p = xim->df_p; + + sprintf (df_p->label, "[%d] %s", df_p->frameno, df_p->ctran.imtitle); + return (df_p->label); +} + + +/* WCS_UPDATE -- Load the screen WCS, if not yet validated, from the user + * wcs file, if any. + * + * File format (two lines): + * + * image title (imtool header label string)\n + * a b c d tx ty z1 z2 zt + * + * The WCS text is passed in via the data stream as a write to the subunit + * WCS and left in the buffer "wcsbuf". Mapping information is parsed + * elsewhere if needed, our only purpose here is to extract the frame WCS. + */ +static CtranPtr +wcs_update (xim, fr) +register XimDataPtr xim; +FrameBufPtr fr; +{ + register CtranPtr ct = &fr->ctran; + char buf[1024], *format; + + + /* Get the new WCS. */ + if (!ct->valid) { + fr->label[0] = '\0'; + ct->zt = W_UNITARY; + + /* Attempt to read the WCS and set up a unitary transformation + * if the information cannot be read. + */ + if (sscanf (fr->wcsbuf, "%[^\n]\n%f%f%f%f%f%f%f%f%d", + buf, &ct->a, &ct->b, &ct->c, &ct->d, &ct->tx, &ct->ty, + &ct->z1, &ct->z2, &ct->zt) < 7) { + + if (fr->wcsbuf[0]) + fprintf (stderr, "ximtool: error decoding WCS\n"); + + strncpy (ct->imtitle, "[NO WCS]\n", SZ_IMTITLE); + ct->a = ct->d = 1; + ct->b = ct->c = 0; + ct->tx = ct->ty = 0; + ct->zt = W_UNITARY; + + } else + strncpy (ct->imtitle, buf, SZ_IMTITLE); + + ct->valid++; + } + + /* Determine best format for wcs output. */ + if (ct->valid && ct->zt == W_LINEAR) { + float z1, z2, zrange; + z1 = ct->z1; + z2 = ct->z2; + zrange = (z1 > z2) ? z1 - z2 : z2 - z1; + if (zrange < 0.01 || (abs(z1) + abs(z2)) / 2.0 < 0.01) + format = " %7.2f %7.2f %9.3g%c"; + else if (zrange < 100.0 && (abs(z1) + abs(z2)) / 2.0 < 200.0) + format = " %7.2f %7.2f %7.3f%c"; + else if (zrange > 99999.0 || (abs(z1) + abs(z2)) / 2.0 > 99999.0) + format = " %7.2f %7.2f %9.3g%c"; + else + format = W_DEFFORMAT; + } else + format = " %7.2f %7.2f %7.0f%c"; + + strcpy (ct->format, format); + return (ct); +} + + +/* ADD_MAPPING -- Add a mapping for the current frame. + * + * File format (two lines): + * + * image title (imtool header label string)\n + * a b c d tx ty z1 z2 zt \n + * region_name sx sy snx sny dx dy dnx dny\n + * object_ref + * + * The WCS text is passed in via the data stream as a write to the subunit + * WCS and left in the buffer "wcsbuf". Mapping information is parsed + * elsewhere if needed, our only purpose here is to extract the frame WCS. + */ + +static void +add_mapping (xim, ctran, wcsbuf, fr) +register XimDataPtr xim; +CtranPtr ctran; +char *wcsbuf; +FrameBufPtr fr; +{ + register MappingPtr mp = &fr->mapping[fr->nmaps]; + register CtranPtr ct = &mp->ctran; + register int i, j, frame = fr->frameno; + char buf[SZ_WCSBUF], *format; + + /* Attempt to read the WCS and set up a unitary transformation + * if the information cannot be read. + */ + if (sscanf (wcsbuf, "%[^\n]\n%f%f%f%f%f%f%f%f%d", + buf, &ct->a, &ct->b, &ct->c, &ct->d, &ct->tx, &ct->ty, + &ct->z1, &ct->z2, &ct->zt) < 7) { + + if (wcsbuf[0]) + fprintf (stderr, "ximtool: error decoding WCS\n"); + + strncpy (ct->imtitle, "[NO WCS]\n", SZ_IMTITLE); + ct->a = ct->d = 1; + ct->b = ct->c = 0; + ct->tx = ct->ty = 0; + ct->zt = W_UNITARY; + } else + strncpy (ct->imtitle, buf, SZ_IMTITLE); + + ct->valid = 1; + + + /* Skip over the first two lines of WCS data. + */ + strcpy (buf, wcsbuf); + for (i=0, j=0; j < 2 && buf[i]; i++) + if (buf[i] == '\n') + j++; + + /* Attempt to read the mapping. + */ + mp->regid = (++objid[frame-1]) + (frame * 100); + mp->id = mp->regid; + mp->ref[0] = '\0'; + mp->region[0] = '\0'; + + if (sscanf (&buf[i], "%s%f%f%d%d%d%d%d%d\n%s\n", + mp->region, &mp->sx, &mp->sy, &mp->snx, &mp->sny, + &mp->dx, &mp->dy, &mp->dnx, &mp->dny, mp->ref) < 10) { + + if (!wcsbuf[0]) + fprintf (stderr, "ximtool: error decoding WCS mapping\n"); + strncpy (mp->region, "none", SZ_IMTITLE); + strncpy (mp->ref, "none", SZ_IMTITLE); + + mp->sx = 1.0; + mp->sy = 1.0; + mp->snx = xim->width; + mp->sny = xim->height; + mp->dx = 1; + mp->dy = 1; + mp->dnx = xim->width; + mp->dny = xim->height; + } + memmove (ctran, &mp->ctran, sizeof (Ctran)); + + + /* Tell the ISM to cache this mapping if we have an object ref. */ + sprintf (buf, "cache %s %d", mp->ref, mp->id); + ism_message (xim, "wcspix", buf); + sprintf (buf, "wcslist %d", mp->id); + ism_message (xim, "wcspix", buf); + + /* Send the object ref to the GUI. */ + sprintf (buf, "cache %s %d %d", mp->ref, fr->frameno, mp->id); + wcspix_message (xim, buf); + sprintf (buf, "orient %d %d %d %d", + mp->id, fr->frameno, (int)ctran->a, (int)(-1 * ctran->d)); + wcspix_message (xim, buf); + + fr->nmaps++; + + + /* Debug the mappings. */ + if (getenv("DEBUG_MAPPINGS") != NULL) print_mappings (fr); +} + + +/* PRINT_MAPPINGS -- Debug routine to print all mappings on a frame. + */ +print_mappings (fr) +FrameBufPtr fr; +{ + MappingPtr mp; + register int i; + + if (fr->nmaps == 0) printf ("No mappings for frame %d\n", fr->frameno); + for (i=0; i < fr->nmaps; i++) { + mp = &fr->mapping[i]; + printf ("Mapping %d of %d: id=%d frame=%d:\n", + i+1, fr->nmaps, mp->id, fr->frameno); + printf ("\t%s %f %f %d %d %d %d %d %d\n\t%s\n", + mp->region, mp->sx, mp->sy, mp->snx, mp->sny, + mp->dx, mp->dy, mp->dnx, mp->dny, mp->ref); + } +} + + +/* CHAN_READ -- Read exactly "n" bytes from a descriptor. + */ + +static int +chan_read (fd, vptr, nbytes) +int fd; +void *vptr; +int nbytes; +{ + char *ptr = vptr; + int nread = 0, nleft = nbytes, nb = 0; + + while (nleft > 0) { + if ( (nb = read(fd, ptr, nleft)) < 0) { + if (errno == EINTR) + nb = 0; /* and call read() again */ + else + return(-1); + } else if (nb == 0) + break; /* EOF */ + nleft -= nb; + ptr += nb; + nread += nb; + } + return (nread); /* return no. of bytes read */ +} + + +/* CHAN_WRITE -- Write exactly "n" bytes to a descriptor. + */ + +static int +chan_write (fd, vptr, nbytes) +int fd; +void *vptr; +int nbytes; +{ + char *ptr = vptr; + int nwritten = 0, nleft = nbytes, nb = 0; + + while (nleft > 0) { + if ( (nb = write(fd, ptr, nleft)) <= 0) { + if (errno == EINTR) + nb = 0; /* and call write() again */ + else + return(-1); /* error */ + } + nleft -= nb; + ptr += nb; + nwritten += nb; + } + return (nwritten); +} diff --git a/vendor/x11iraf/ximtool/iis.h b/vendor/x11iraf/ximtool/iis.h new file mode 100644 index 00000000..9689957e --- /dev/null +++ b/vendor/x11iraf/ximtool/iis.h @@ -0,0 +1,18 @@ +/* IIS.H -- Public definitions for the IIS protocol module. + */ + +/* IIS data pixel values. */ +#define CMS_DATASTART 1 +#define CMS_DATAEND 200 +#define CMS_DATARANGE 200 + +/* IIS color assignments. */ +#define CMS_CURSOR 201 +#define CMS_BACKGROUND 202 +#define CMS_FOREGROUND 203 +#define CMS_RED 204 +#define CMS_GREEN 205 +#define CMS_BLUE 206 +#define CMS_YELLOW 207 +#define CMS_CYAN 208 +#define CMS_MAGENTA 209 diff --git a/vendor/x11iraf/ximtool/irafio.c b/vendor/x11iraf/ximtool/irafio.c new file mode 100644 index 00000000..e90ec507 --- /dev/null +++ b/vendor/x11iraf/ximtool/irafio.c @@ -0,0 +1,585 @@ +/* + * IRAF.C -- Routines to load and save simple IRAF files. + * + * ival = isIRAF (fname) + * loadIRAF (fname, pixels, w,h, r,g,b, ncolors, zsc, zr, z1, z2, nsample) + * + * isIRAF -- returns nonzero if the named file is a IRAF file. + * loadIRAF -- reads a IRAF file and returns the decoded pixel array and gray- + * scale 8 bit colormap. The caller is responsible for freeing + * the pixels buffer. + */ + + +#include +#include +#ifdef ULTRIX +#include +#endif +#include + + +#define VERSION_1 1 +#define VERSION_2 2 + +/* Image header parmeters. */ +#define SZ_V1PIXFILE 79 +#define SZ_V1HDR 2048 +#define SZ_V1TITLE 79 + +/* Offsets into header (in sizeof(int) units) for various parameters */ +#define IM_V1PIXTYPE 4 /* datatype of the pixels */ +#define IM_V1NDIM 5 /* number of dimensions */ +#define IM_V1LEN 6 /* image dimensions */ +#define IM_V1PHYSLEN 13 /* physical length (as stored) */ +#define IM_V1PIXOFF 22 /* offset of the pixels */ +#define IM_V1PIXFILE 103 /* name of pixel storage file */ +#define IM_V1TITLE 183 /* image title string */ + +/* Image header parmeters. */ +#define SZ_V2PIXFILE 255 +#define SZ_V2HDR 2046 +#define SZ_V2TITLE 732 + +/* Offsets into header (in sizeof(int) units) for various parameters */ +#define IM_V2PIXTYPE 10 /* datatype of the pixels */ +#define IM_V2SWAPPED 14 /* number of dimensions */ +#define IM_V2NDIM 18 /* number of dimensions */ +#define IM_V2LEN 22 /* image dimensions */ +#define IM_V2PHYSLEN 50 /* physical length (as stored) */ +#define IM_V2PIXOFF 86 /* offset of the pixels */ +#define IM_V2PIXFILE 126 /* name of pixel storage file */ +#define IM_V2TITLE 638 /* image title string */ + +/* IRAF dataype codes */ +#define TY_CHAR 2 +#define TY_SHORT 3 +#define TY_INT 4 +#define TY_LONG 5 +#define TY_REAL 6 +#define TY_DOUBLE 7 +#define TY_USHORT 11 +#define TY_UCHAR 12 + +#define CONTRAST 0.25 /* zscaling parameters */ +#define NSAMPLE 1000 + + +#ifndef AIXV3 +#ifndef OSF1 +typedef unsigned char uchar; +#endif +#endif + +/* Function prototypes */ +#ifdef __STDC__ + +#include +#include + +#else + +#endif + +char *index(); +char *getIRAFHdr(); + +static char *irafReadPixels(); +static void irafGetPixfile (); + + +/* +------------------+ + * | Public routines. | + * +------------------+ + */ + + +/* loadIRAF - Load a IRAF file. + */ +char * +loadIRAF (fname, image, nx, ny, r,g,b, ncolors, zsc, zr, z1, z2, nsample) +char *fname; /* input filename */ +uchar **image; /* output pixels */ +int *nx, *ny; /* dimensions */ +uchar *r, *g, *b; /* colormap */ +int *ncolors; /* number of colors */ +int zsc, zr; /* z-scaling flags */ +float *z1, *z2; /* zscale values */ +int nsample; /* nu,ber of sample pts */ +{ + FILE *hdr; + int i, len, px, py, version, swapped; + int ptype, offset; + char temp[SZ_V1PIXFILE], *ip; + char path[SZ_V1PIXFILE]; + + /* Get the format version. */ + version = isIRAF (fname); + + if ((hdr = fopen (fname, "r")) == NULL) + return "cannot open image"; + + if (version == VERSION_1) { + int header_v1[SZ_V1HDR]; + char pixfile_v1[SZ_V1PIXFILE]; + + + /* Read in the image header. */ + fread ((char *)header_v1, sizeof (char), SZ_V1HDR, hdr); + + /* Get the interesting stuff. */ + px = header_v1[IM_V1PHYSLEN]; + py = header_v1[IM_V1PHYSLEN+1]; + *nx = header_v1[IM_V1LEN]; + *ny = header_v1[IM_V1LEN+1]; + ptype = header_v1[IM_V1PIXTYPE]; + offset = (header_v1[IM_V1PIXOFF] - 1) * sizeof(short); + + /* Find the pixfile and see if it exists. */ + strpak ((char *)&header_v1[IM_V1PIXFILE], pixfile_v1, SZ_V1PIXFILE); + irafGetPixfile (fname, pixfile_v1); + if (access (pixfile_v1, R_OK) != 0) { + fclose (hdr); + return "Cannot access pixel file"; + } + + /* Now read the data and return a pointer to the scaled pixels. */ + irafReadPixels (pixfile_v1, 0, offset, ptype, image, + *nx, *ny, px, py, zsc, zr, z1, z2, nsample); + + } else if (version == VERSION_2) { + char header_v2[SZ_V2HDR]; + char pixfile_v2[SZ_V2PIXFILE]; + + + /* Read in the image header. */ + fread ((char *)header_v2, sizeof (char), SZ_V2HDR, hdr); + + /* Get the interesting stuff. */ + if (is_swapped()) + bswap4 (&header_v2[IM_V2SWAPPED], 1, &swapped, 1, sizeof(int)); + else + bcopy ((char *)&header_v2[IM_V2SWAPPED], &swapped, sizeof(int)); + + if (is_swapped()) { + bswap4 (&header_v2[IM_V2PHYSLEN], 1, &px, 1, sizeof(int)); + bswap4 (&header_v2[IM_V2PHYSLEN+sizeof(int)], 1, &py, 1, + sizeof(int)); + bswap4 (&header_v2[IM_V2LEN], 1, nx, 1, sizeof(int)); + bswap4 (&header_v2[IM_V2LEN+sizeof(int)], 1, ny, 1, + sizeof(int)); + bswap4 (&header_v2[IM_V2PIXTYPE], 1, &ptype, 1, + sizeof(int)); + bswap4 (&header_v2[IM_V2PIXOFF], 1, &offset, 1, + sizeof(int)); + } else { + bcopy ((char *)&header_v2[IM_V2PHYSLEN], &px, sizeof(int)); + bcopy ((char *)&header_v2[IM_V2PHYSLEN+sizeof(int)], &py, + sizeof(int)); + bcopy ((char *)&header_v2[IM_V2LEN], nx, sizeof(int)); + bcopy ((char *)&header_v2[IM_V2LEN+sizeof(int)], ny, + sizeof(int)); + bcopy ((char *)&header_v2[IM_V2PIXTYPE], &ptype, sizeof(int)); + bcopy ((char *)&header_v2[IM_V2PIXOFF], &offset, sizeof(int)); + } + offset = (offset - 1) * sizeof(short); + + /* Find the pixfile and see if it exists. */ + bcopy ((char *)&header_v2[IM_V2PIXFILE], pixfile_v2, SZ_V2PIXFILE); + irafGetPixfile (fname, pixfile_v2); + if (access (pixfile_v2, R_OK) != 0) { + fclose (hdr); + return "Cannot access pixel file"; + } + + /* Now read the data and return a pointer to the scaled pixels. + */ + irafReadPixels (pixfile_v2, + (swapped != is_swapped()), + offset, ptype, image, *nx, *ny, px, py, + zsc, zr, z1, z2, nsample); + } + + /* Set the (grayscale) colormap. */ + for (i=0; i<256; i++) + r[i] = g[i] = b[i] = i; + *ncolors = 256; + + fclose (hdr); /* we're done with the header */ + return NULL; +} + + +/* IsIRAF -- Test a file to see if it is a IRAF file. + */ +int +isIRAF (fname) +char *fname; /* input filename */ +{ + register FILE *fp; + int value = 0; + char magic[24]; + + if (fp = fopen (fname, "r")) { + fread ((char *)magic, sizeof (char), 12, fp); + fclose (fp); + + /* See if this is a valid OIF header file. */ + if (strncmp(magic, "imhv2", 5) == 0) + value = 2; + else { + strpak (magic, magic, 5); + if (strncmp(magic, "imhdr", 5) == 0) + value = 1; + } + return value; + } + + return value; +} + + +/* getIRAFHdr -- Get some set of header information for the GUI. + */ + +char * +getIRAFHdr (fname) +char *fname; +{ + FILE *hdr; + char *error, *title, *line; + int i, bitpix, len, nx, ny, version, swapped, ptype; + + + /* Get the format version. */ + version = isIRAF (fname); + + if ((hdr = fopen (fname, "r")) == NULL) + return ((char *)NULL); + + if (version == VERSION_1) { + int header_v1[SZ_V1HDR]; + char pixfile_v1[SZ_V1PIXFILE]; + char title_v1[SZ_V1TITLE]; + + + /* Read in the image header. */ + fread ((char *)header_v1, sizeof (char), SZ_V1HDR, hdr); + + /* Get the interesting stuff. */ + nx = header_v1[IM_V1LEN]; + ny = header_v1[IM_V1LEN+1]; + ptype = header_v1[IM_V1PIXTYPE]; + + bcopy ((char *)&header_v1[IM_V1TITLE], title_v1, SZ_V1TITLE); + strpak ((char *)&header_v1[IM_V1TITLE], title_v1, SZ_V1TITLE); + + title = (char *) malloc (SZ_V1TITLE); + strncpy (title, title_v1, SZ_V1TITLE); + + } else if (version == VERSION_2) { + char header_v2[SZ_V2HDR]; + char pixfile_v2[SZ_V2PIXFILE]; + char title_v2[SZ_V2TITLE]; + + + /* Read in the image header. */ + fread ((char *)header_v2, sizeof (char), SZ_V2HDR, hdr); + + /* Get the interesting stuff. */ + if (is_swapped()) + bswap4 (&header_v2[IM_V2SWAPPED], 1, &swapped, 1, sizeof(int)); + else + bcopy ((char *)&header_v2[IM_V2SWAPPED], &swapped, sizeof(int)); + + if (is_swapped()) { + bswap4 (&header_v2[IM_V2LEN], 1, &nx, 1, sizeof(int)); + bswap4 (&header_v2[IM_V2LEN+sizeof(int)], 1, &ny, 1, + sizeof(int)); + bswap4 (&header_v2[IM_V2PIXTYPE], 1, &ptype, 1, + sizeof(int)); + } else { + bcopy ((char *)&header_v2[IM_V2LEN], &nx, sizeof(int)); + bcopy ((char *)&header_v2[IM_V2LEN+sizeof(int)], &ny, + sizeof(int)); + bcopy ((char *)&header_v2[IM_V2PIXTYPE], &ptype, sizeof(int)); + } + + bcopy ((char *)&header_v2[IM_V2TITLE], title_v2, SZ_V2TITLE); + title = (char *) malloc (SZ_V2TITLE); + strncpy (title, title_v2, SZ_V2TITLE/2); + } + fclose (hdr); /* we're done with the header */ + + + /* Convert the pixel type flag to a BITPIX value. */ + switch (ptype) { + case 2: bitpix = 16; break; /* TY_CHAR */ + case 3: bitpix = 16; break; /* TY_SHORT */ + case 4: bitpix = 32; break; /* TY_INT */ + case 5: bitpix = 64; break; /* TY_LONG */ + case 6: bitpix = -32; break; /* TY_REAL */ + case 7: bitpix = -64; break; /* TY_REAL */ + default: bitpix = 0; break; /* Error */ + } + + /* Format the header string. */ + line = (char *) malloc (80); + + sprintf (line, "%-16.16s %3d %5dx%-5d %s", + fname, bitpix, nx, ny, title); + + free ((char *)title); + return (line); +} + + + +/* ------------------ + * Private routines. + * ------------------ + */ + +#undef max +#define max(a,b) ((a) > (b) ? (a) : (b)) +#undef min +#define min(a,b) ((a) < (b) ? (a) : (b)) + + + +/* IRAFGETPIXFILE -- Get the pixelfile pathname. + */ + +static void +irafGetPixfile (fname, pfile) +char *fname; +char *pfile; +{ + char temp[SZ_V1PIXFILE], *ip; + int len; + char *index(); + + if (strncmp (pfile, "HDR$", 4) == 0) { + /* Handle the special case of a HDR$ pixfile path, prepend the + * current working directory name to the pixfile. + */ + ip = pfile + 4; + (void) strncpy (temp, ip, SZ_V1PIXFILE); + (void) strncpy (pfile, fname, SZ_V1PIXFILE); + + /* Find the end of the pathname. */ + len = strlen (pfile); + while ( (len > 0) && (pfile[len-1] != '/') ) + len--; + + /* Add the image name. */ + pfile[len] = '\0'; + (void) strncat (pfile, temp, SZ_V1PIXFILE); + + } else if (index (pfile, '!') != NULL) { + /* Strip out the leading node! prefix from the pixfile path. */ + for (ip = pfile; *ip != '!' ; ) + ip++; + (void) strcpy (pfile, ++ip); + } +} + + +/* IRAFREADPIXELS -- Read the pixel file and scale the data. + */ + +static char * +irafReadPixels (pixfile, swap, pix_offset, pixtype, image, nx,ny, px,py, + zsc, zr, z1, z2, nsample) +char *pixfile; /* pixfile pathname */ +int swap; /* byte-swap pixels */ +int pix_offset; /* offset to pixel data */ +int pixtype; /* pixel types */ +uchar **image; /* output image pixels */ +int nx, ny; /* image dimensions */ +int px, py; /* physical storage dims */ +int zsc, zr; /* z-scaling flags */ +float *z1, *z2; +int nsample; +{ + FILE *fd; + register int i, j, npix, stdline; + register float scale; + uchar *line; + unsigned short *uspix, *usline; + short *spix, *sline; + int *ipix, *iline; + float *fpix, *fline; + double *dpix, *dline; + + + /* Open the pixel file and seek to the beginning of the data. */ + fd = fopen (pixfile, "r"); + lseek (fileno(fd), (off_t)pix_offset, SEEK_SET); + + /* Allocat the pointer for the pixels. */ + npix = nx * ny; + *image = (uchar *) malloc (npix * sizeof (uchar)); + + stdline = (int) ((float)ny / sqrt(((double)npix / (double)nsample)) ); + + switch (pixtype) { + case TY_USHORT: + uspix = (unsigned short *) malloc (npix * sizeof (unsigned short)); + usline = (unsigned short *) malloc (px * sizeof (unsigned short)); + for (i=0; i +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include "ximtool.h" + +/* + * ISM.C -- IRAF Image Support Module (ISM) routines. + * + * xim_ismOpen (xim) + * xim_ismClose (xim) + * + * ism_connectClient (chan_port, source, id) + * ism_disconnectClient (chan) + * ism_io (chan, fd_addr, id_addr) + * + * ism_execute (xim, task) + * ism_evaluate (object, command) + * + * ism_openSocket (path) + * ism_read (fd, ptr, nbytes) + * ism_write (fd, ptr, nbytes) + */ + + + +#define CALLBACK 0 +#define QUIT 1 +#define SEND 2 +#define READY 3 + + +#define MAXCONN 5 +#define MAX_TRY 5 + +void xim_ismOpen(), xim_ismClose(); +IsmModule ismNameToPtr(); + +static void ism_connectClient(), ism_disconnectClient(), ism_io(); +static int ism_read(), ism_write(), ism_type(), ism_parseSend(); +static int ism_openSocket(); +static IsmIoChanPtr ism_getChannel(); +static char *ism_parse(); + +static int ism_debug = 0; +extern int errno; + + +/* WCS/Pixel ISM client callbacks. + */ +#define WCSPIX_CMD DEF_ISM_CMD + +void wcspix_connect(), wcspix_disconnect(), wcspix_command(); + + +/* Definitions for the supported ISM Modules. */ +int ism_nmodules = 0; + +ismModule ism_modules[] = { + {"wcspix", WCSPIX_CMD, wcspix_connect, wcspix_disconnect, wcspix_command, 0}, +}; + + + +/* XIM_ISMOPEN -- Initialize the ISM protocol module and ready the module to + * accept client connections and begin processing client requests. This + * procedure only opens the ISM connection port, once clients are connected + * they negotiate for a separate channel and I/O resumes there. Once, + * connected, the client disconnects from this port and it is free to be used + * by another client. Unix sockets are used since we only want to connect to + * local processes and we want to use the uid for a unique address. + */ +void +xim_ismOpen (xim) +register XimDataPtr xim; +{ + register int s = 0; + register IsmIoChanPtr chan = &(xim->ism_chan); + char path[SZ_FNAME], *ism_path; + + + if (getenv("DEBUG_ISM") != NULL) + ism_debug = atoi(getenv("DEBUG_ISM")); + + /* Setting the addr to "none" or the null string disables ISM + * socket support. + */ + if (!xim->ism_addr[0] || strcmp(xim->ism_addr,"none")==0) + return ; + + /* Get path to be used for the unix domain socket. */ + if ((ism_path = getenv ("ISMDEV")) != NULL) { + char *dev = ism_path; + + while (1) { + if (*dev == (char)NULL) { + dev = ism_path; + break; + } else if (*dev == ':') { + ++dev; + break; + } + dev++; + } + sprintf (path, dev, getuid()); + } else + sprintf (path, xim->ism_addr, getuid()); + unlink (path); + + if ((s = ism_openSocket (path))) { + /* Fill in i/o channel descriptor. */ + chan->xim = (XtPointer) xim; + chan->datain = s; + chan->dataout = s; + chan->connected = 0; + strncpy (chan->name, "", SZ_FNAME); + strncpy (chan->path, path, SZ_FNAME); + + if (ism_debug) printf ("opened connection on '%s' %d\n", path, s); + + /* Register connectClient callback. */ + chan->id = xim_addInput (xim, s, ism_connectClient, + (XtPointer)chan); + } + + ism_nmodules = XtNumber (ism_modules); + + /* Set the default ISM path in the GUI. */ + sprintf (path, "wcspix_cmd {%s}", DEF_ISM_CMD); + wcspix_message (xim, path); +} + + +/* XIM_ISMCLOSE -- Close down the ISM protocol module. Disconnect all connected + * clients and close the port. + */ +void +xim_ismClose (xim) +register XimDataPtr xim; +{ + register IsmIoChanPtr chan = &(xim->ism_chan); + register int i; + + /* Send a 'quit' message to all connected clients. */ + for (i=0, chan=NULL; i < XtNumber(xim->ism_client); i++) { + chan = &xim->ism_client[i]; + if (chan->id) { + xim_removeInput (xim, chan->id); + chan->id = NULL; + } + + if (chan->connected) + ism_write (chan->dataout, "quit", 4); + + close (chan->datain); + } + + /* Close the ISM request socket. */ + chan = &(xim->ism_chan); + if (chan->id) { + xim_removeInput (xim, chan->id); + chan->id = NULL; + } + close (chan->datain); + unlink (chan->path); +} + + +/* ISMNAMETOPTR -- Utility procedure to lookup an ISM struct pointer given + * the ISM name. + */ +IsmModule +ismNameToPtr (name) +char *name; +{ + IsmModule ism; + register int i; + + for (i=0; i < ism_nmodules; i++) { + ism = &ism_modules[i]; + if (strcmp (name, ism->name) == 0) + return (ism); + } + return ((IsmModule)NULL); +} + + +/******************************* + * TRANSPORT LAYER PROCEDURES + ******************************/ + + +/* ISM_CONNECTCLIENT -- Called when a client has attempted a connection on + * a socket port. Accept the connection and set up a new i/o channel to + * communicate with the new client. + */ +static void +ism_connectClient (chan, source, id) +IsmIoChanPtr chan; +int *source; +XtPointer id; +{ + register XimDataPtr xim = (XimDataPtr) chan->xim; + register int s; + + /* Accept connection. */ + if ((s = accept ((int)*source, (struct sockaddr *)0, (int *)0)) < 0) + return; + /*if (fcntl (s, F_SETFL, O_RDWR|O_NDELAY) < 0) {*/ + if (fcntl (s, F_SETFL, O_NDELAY) < 0) { + close (s); + return; + } + + /* Fill in the ISM i/o channel descriptor. */ + chan->datain = s; + chan->dataout = s; + chan->connected = 1; + chan->id = xim_addInput (xim, s, ism_io, (XtPointer)chan); +} + + +/* ISM_DISCONNECTCLIENT -- Called to close a client connection when EOF is + * seen on the input port. Close the connection and free the channel + * descriptor. + */ +static void +ism_disconnectClient (chan) +register IsmIoChanPtr chan; +{ + close (chan->datain); + if (chan->id) { + xim_removeInput (chan->xim, chan->id); + chan->connected = 0; + chan->id = NULL; + } +} + + +/* ISM_IO -- Xt file i/o callback procedure, called when there is input + * pending on the data stream to the ximtool client. + */ +static void +ism_io (chan, fd_addr, id_addr) +IsmIoChanPtr chan; +int *fd_addr; +XtInputId *id_addr; +{ + register XimDataPtr xim = (XimDataPtr) chan->xim; + register IsmModule ism; + IsmIoChanPtr new_chan; + int datain = *fd_addr; + int dataout = chan->dataout; + int s, n, ip, type, count = 0; + char name[SZ_FNAME], path[SZ_FNAME]; + char message[2*SZ_ISMBUF+1]; + char buf[SZ_ISMBUF+1]; + char *text = NULL; + static int incomplete_msg = 0; + static int null_count = 0; + static long pkt=0, nread=0; + + + /* Read the message. */ + bzero (buf, SZ_ISMBUF+1); + count = read (datain, buf, SZ_ISMBUF); + nread += count; + if (count > SZ_ISMBUF || count == 0) { + if (null_count++ > MAX_TRY) { + null_count = 0; + ism_disconnectClient (chan); + } + return; + } + + /* Build up a complete message buffer including any incomplete + * text from the last read. + */ + bzero (message, 2*SZ_ISMBUF+1); + if (chan->msgbuf[0]) { + n = strlen(chan->msgbuf); + + memmove (message, chan->msgbuf, n); + memmove (&message[n], buf, count); + count += n; + } else { + bcopy (buf, message, count); + } + bzero (chan->msgbuf, SZ_ISMBUF); + + if (ism_debug >= 2) + printf("\nism_io: nread=%d pkt=%d count=%d n=%d\n",nread,pkt++,count,n); + + + ip = 0; + incomplete_msg = 0; + while (text = ism_parse (message, &ip, &incomplete_msg, count)) { + + if (incomplete_msg) { + /* Save the incomplete message to the buffer for later parsing. + */ + if (ism_debug >= 2) + printf ("INCOMPLETE '%s' ip=%d len=%d\n", text,ip,strlen(text)); + strcpy (chan->msgbuf, text); + break; + } + + + /* Messages + * + * CALLBACK - Negotiate a connection on another socket + * QUIT - client is shutting down and disconnecting + * SEND - send a message to another object + * READY - client is ready to begin processing + */ + switch (ism_type (text)) { + case CALLBACK: + + /* Get the requesting client's name. */ + sscanf (text, "connect %s", name); + + /* Get a new i/o channel. */ + if (new_chan = ism_getChannel (xim)) { + + /* Get path to be used for the unix domain socket. */ + sprintf (path, DEF_ISM_TEMPLATE, getuid(), new_chan->id); + unlink (path); + + if (ism_debug) + printf("ism_io: CONNECT '%s' on socket '%s'\n", name, path); + + if ((s = ism_openSocket (path))) { + /* Fill in i/o channel descriptor. */ + new_chan->xim = (XtPointer) xim; + new_chan->datain = s; + new_chan->dataout = s; + new_chan->connected = 0; + strncpy (new_chan->path, path, SZ_FNAME); + strncpy (new_chan->name, name, SZ_FNAME); + + /* Register connectClient callback. */ + new_chan->id = xim_addInput (xim, s, ism_connectClient, + (XtPointer)new_chan); + } + } + + /* Create a new OBM object for the client, save the client name + * one the channel descriptor so we'll know who disconnected. + */ + if (ismObjects (name) == 0) + obmNewObject (xim->obm, name, "Client", NULL, NULL, 0); + strcpy (chan->name, name); + + /* Now tell the client to call us back on the new channel */ + sprintf (buf, "connect %s", path); + if (ism_debug) printf ("ism_io: msg '%s'\n", buf); + ism_write (dataout, buf, strlen(buf)); + + /* Hang up the current connection. */ + if (ism_debug) printf ("CALLBACK: disconnecting '%s'\n",chan->path); + ism_disconnectClient (chan); + + break; + + case READY: + if (ism_debug) printf ("READY: ready '%s'\n", chan->name); + + /* Execute the ISM startup callback to initialize it. + */ + for (n=0; n < XtNumber (ism_modules) ; n++) { + ism = &ism_modules[n]; + if (strcmp (chan->name, ism->name) == 0) { + ism->connected = 1; + ism->chan = chan; + (*ism->startupCB) (xim, ism); + } + } + break; + + case QUIT: + if (ism_debug) + printf ("QUIT: quit '%s' on '%s'\n", chan->name, chan->path); + + /* Execute the ISM shutdown callback. + */ + for (n=0; n < XtNumber (ism_modules) ; n++) { + ism = &ism_modules[n]; + if (strcmp (chan->name, ism->name) == 0) { + (*ism->shutdownCB) (xim, ism); + ism->connected = 0; + ism->chan = (IsmIoChanPtr) NULL; + } + } + ism_disconnectClient (chan); + + break; + + case SEND: + /* Deliver the message to the named object. + */ + ism_parseSend (text, name, buf); + if (ism_debug >= 3) + printf ("SEND: len=%d '%s'->'%.45s'\n", strlen(buf), name, buf); + xim_message (xim, name, buf); + break; + + default: + fprintf (stderr, "ism_io: Unknown message '%s'\n", text); + break; + } + } +} + + +/* ISM_PARSE -- Parse the client message, returning the type as the function + * value. + */ +static char * +ism_parse (msg, ip, incomplete, maxch) +char *msg; +int *ip; +int *incomplete; +int maxch; +{ + register int j, i = *ip, count=0; + char text[SZ_ISMBUF+1]; + + if (msg[*ip] == '\0') { +/* *incomplete = 1;*/ + return (NULL); + } + + /* Zero the retrun buffer and skip any leading NULL input chars. */ + bzero (text, SZ_ISMBUF+1); + while ((msg[i] == '\0') && i < maxch) i++; + + /* Copy the message up to the terminating NULL. */ + for (j=0; (msg[i] != '\0') && (i < maxch); ) + text[j++] = msg[i++]; + text[j] = msg[i]; + + /* If we hit the end of the input buffer without seeing a null + * then we're parsing a partial message. + */ + *incomplete = (i < maxch ? 0 : 1); + + /* update the position ptr */ + while ((msg[i] == '\0') && i < maxch) i++; + *ip = i; + + if (ism_debug >= 3 && text[0]) { + printf ("ism_parse: ip=%d msg=%d i=%d j=%d inc=%d\n", + *ip, msg[i], i, j, *incomplete); + } + + + return (text[0] ? text : NULL); +} + + +/* ISM_TYPE -- Determine the message type. + */ +static int +ism_type (message) +char *message; +{ + register char *ip; + + for (ip=message; isspace(*ip); ip++) ; /* skip whitespace */ + + if (strncmp (ip, "connect", 7) == 0) + return (CALLBACK); + else if (strncmp (ip, "quit", 4) == 0) + return (QUIT); + else if (strncmp (ip, "ready", 4) == 0) + return (READY); + else if (strncmp (ip, "send", 4) == 0) + return (SEND); + else + return (ERR); +} + + +/* ISM_PARSESEND -- Parse the client SEND message. + */ +static int +ism_parseSend (msg, object, text) +char *msg; +char *object; +char *text; +{ + register int i=0, ip=4, count=0; + + /* skip leading whitespace */ + for ( ; isspace(msg[ip]) && msg[ip]; ip++) ; + + /* Get the object name */ + for (i=0; !isspace(msg[ip]) && msg[ip]; i++, ip++) + object[i] = msg[ip]; + object[i] = '\0'; + + for ( ; msg[ip] != '{'; ip++) ; /* skip to open bracket */ + + /* Get the message text. Count brackets so we can pass + * Tcl code properly. + */ + for (i=0, ip++; msg[ip]; i++, ip++) { + text[i] = msg[ip]; + if (msg[ip] == '{') + count++; + else if (msg[ip] == '}') { + if (count <= 0) { ip++; break; } + count--; + } + } + text[i] = '\0'; +} + + +/* ISM_EVALUATE -- Evaluate a command for the named object. Used by the + * clientEvaluate() method. Can also be used by the rest of ximtool to + * send messages to the ISM, which will be ignored if the client is not + * connected. + */ +ism_evaluate (xim, object, command) +register XimDataPtr xim; +char *object; +char *command; +{ + register IsmIoChanPtr chan; + register int i=0; + register int len = strlen(command) + 1; + char *buf = XtCalloc (len+1, sizeof(char)); + + for (i=0; i < XtNumber (xim->ism_client); i++) { + chan = &xim->ism_client[i]; + if (chan->connected && strcmp (chan->name, object) == 0) { + sprintf (buf, "%s\0", command); + len = strlen (buf) + 1; /* +1 to send the NULL */ + ism_write (chan->dataout, buf, len); + if (ism_debug >= 2) printf("writing %d bytes: '%s'\n", len,buf); + break; + } + } + + XtFree ((char *)buf); +} + + +/* ISM_MESSAGE -- Convenience wrapper for the evaluate procedure. + */ +ism_message (xim, object, command) +register XimDataPtr xim; +char *object, *command; +{ + ism_evaluate (xim, object, command); +} + + +/* ISM_OPENSOCKET -- Open a unix socket on the named path. + */ +static int +ism_openSocket (path) +char *path; /* path to the socket */ +{ + int addrlen, s = 0, on = 1; + struct sockaddr_un sockaddr; + + if ((s = socket (AF_UNIX, SOCK_STREAM, 0)) < 0) + goto err; + + memset ((void *)&sockaddr, 0, sizeof(sockaddr)); + sockaddr.sun_family = AF_UNIX; + strcpy (sockaddr.sun_path, path); + addrlen = sizeof(sockaddr) - sizeof(sockaddr.sun_path) + strlen(path); + if (setsockopt(s, SOL_SOCKET, SO_REUSEADDR, (char *)&on,sizeof(on)) < 0) + goto err; +/* + if (setsockopt(s, SOL_SOCKET, SO_KEEPALIVE, (char *)&on,sizeof(on)) < 0) + goto err; +*/ + if (bind (s, (struct sockaddr *)&sockaddr, addrlen) < 0) + goto err; + + if (listen (s, MAXCONN) < 0) { +err: fprintf (stderr, "ximtool: can't open ISM socket on %s, errno=%d\n", + path, errno); + if (s) + close (s); + return (0); + } + + return (s); +} + + + +/* ISM_GETCHANNEL --- Get an ISM i/o channel descriptor. + */ +static IsmIoChanPtr +ism_getChannel (xim) +register XimDataPtr xim; +{ + register IsmIoChanPtr chan; + register int i; + + for (i=0; i < XtNumber(xim->ism_client); i++) { + if (!xim->ism_client[i].connected) { + xim->ism_client[i].id = (XtPointer) i; + return (&xim->ism_client[i]); + } + } + + return (NULL); +} + + +/* ISMOBJECTS -- Add the named client to the list of known objects, or + * return zero if this is a new object. We keep a list so we don't keep + * creating the same object in the OBM each time a client connects. + */ +ismObjects (name) +char *name; +{ + static char objects[SZ_LINE] = ""; + + if (strstr (objects, name) == NULL) { + strcat (objects, name); + strcat (objects, "|\0"); + return (0); + } else + return (1); +} + + +/* ISM_READ -- Read exactly "n" bytes from a descriptor. + */ + +static int +ism_read (fd, vptr, nbytes) +int fd; +void *vptr; +int nbytes; +{ + char *ptr = vptr; + int nread = 0, nleft = nbytes, nb = 0; + + while (nleft > 0) { + if ( (nb = read(fd, ptr, nleft)) < 0) { + if (errno == EINTR) + nb = 0; /* and call read() again */ + else + return(-1); + } else if (nb == 0) + break; /* EOF */ + nleft -= nb; + ptr += nb; + nread += nb; + } + + return (nread); /* return no. of bytes read */ +} + + +/* ISM_WRITE -- Write exactly "n" bytes to a descriptor. + */ + +static int +ism_write (fd, vptr, nbytes) +int fd; +void *vptr; +int nbytes; +{ + char *ptr = vptr; + int nwritten = 0, nleft = nbytes, nb = 0; + + /* Send the bytecount first. + if ((nb = write (fd, &nleft, sizeof (int))) <= 0) + return (-1); + */ + + /* Now send the message. */ + while (nleft > 0) { + if ( (nb = write(fd, ptr, nleft)) <= 0) { + if (errno == EINTR) + nb = 0; /* and call write() again */ + else + return (-1); /* error */ + } + nleft -= nb; + ptr += nb; + nwritten += nb; + } + + return (nwritten); +} diff --git a/vendor/x11iraf/ximtool/ism_wcspix.c b/vendor/x11iraf/ximtool/ism_wcspix.c new file mode 100644 index 00000000..5c8600ea --- /dev/null +++ b/vendor/x11iraf/ximtool/ism_wcspix.c @@ -0,0 +1,140 @@ +#include +#include +#include +#include +#include +#include +#include "ximtool.h" + +/* + * ISM_WCSPIX.C -- Client callbacks for the WCS/Pixel value ISM. + * + * wcspix_connect (xim) + * wcspix_disconnect (xim) + * wcspix_command (xim, argc, argv) + */ + + +static int wcspix_debug = 0; +extern int errno; + + +/* WCS/Pixel ISM client callbacks. */ +void wcspix_connect(), wcspix_disconnect(), wcspix_command(), wcspix_message(); + + + +/* WCSPIX_CONNECT -- Called when the WCSPIX ISM first connects to the server. + * Used to update with the current cache of mappings as well as initialize + * the GUI that we are alive. + */ +void +wcspix_connect (xim, ism) +register XimDataPtr xim; +register IsmModule ism; + +{ + MappingPtr mp; + FrameBufPtr fr; + register int i, j; + char buf[SZ_LINE]; + + if (wcspix_debug) printf ("ConnectCB for '%s' ....\n", ism->name); + + wcspix_message (xim, "startup"); + + /* Update the ISM with the current set of mappings. */ + for (j=0; j < xim->nframes; j++) { + fr = &xim->frames[j]; + for (i=0; i < fr->nmaps; i++) { + mp = &fr->mapping[i]; + sprintf (buf, "cache %s %d", mp->ref, mp->id); + ism_message (xim, ism->name, buf); + sprintf (buf, "wcslist %d", mp->id); + ism_message (xim, ism->name, buf); + + /* Send the object ref to the GUI. */ + sprintf (buf, "cache %s %d %d", mp->ref, fr->frameno, mp->id); + wcspix_message (xim, buf); + + if (wcspix_debug) printf ("connectCB: '%s'\n", buf); + } + } +} + + +/* WCSPIX_DISCONNECT -- Called to shut down the WCSPIX ISM. Send a "quit" + * command to the module and notify the GUI. + */ +void +wcspix_disconnect (xim, ism) +register XimDataPtr xim; +register IsmModule ism; +{ + MappingPtr mp; + FrameBufPtr fr; + register int i, j; + char buf[SZ_LINE]; + + if (wcspix_debug) printf ("DisconnectCB for '%s' ....\n", ism->name); + + /* Uncache all the mapped images in the GUI. */ + for (j=0; j < xim->nframes; j++) { + fr = &xim->frames[j]; + for (i=0; i < fr->nmaps; i++) { + mp = &fr->mapping[i]; + sprintf (buf, "uncache %d", mp->id); + wcspix_message (xim, buf); + } + } + + /* If we got here from a GUI command send a quit command to the + * ISM, if the ISM shut down itself it will already be disconnected + * so check to see if we're still alive. + */ + if (ism->connected) + ism_message (xim, ism->name, "quit"); + + /* Notify the GUI that we're done. */ + wcspix_message (xim, "shutdown"); +} + + +/* WCSPIX_COMMAND -- Handle all WCSPIX ISM specific commands. + * + * set wcspix_cmd + * pixtab_size + * + */ +void +wcspix_command (xim, ism, argc, argv) +register XimDataPtr xim; +register IsmModule ism; +int argc; +char **argv; +{ + register int i; + char cmd[SZ_FNAME]; + + if (wcspix_debug) printf ("CommandCB....\n"); + + for (i=0; i < argc; i = i + 1) { + printf ("ism_cmd: %d '%s'\n", i, argv[i]); + } +} + + +/* WCSPIX_MESSAGE -- Send a message to the user interface ism_msg callback, + * but format it so it's delivered to the WCSPIX callback procedures. + */ +void +wcspix_message (xim, message) +register XimDataPtr xim; +char *message; +{ + char msgbuf[SZ_MSGBUF]; + + sprintf (msgbuf, "setValue { deliver wcspix { %s } }", message); + ObmDeliverMsg (xim->obm, "ism_msg", msgbuf); +} + diff --git a/vendor/x11iraf/ximtool/load.c b/vendor/x11iraf/ximtool/load.c new file mode 100644 index 00000000..665f6cfb --- /dev/null +++ b/vendor/x11iraf/ximtool/load.c @@ -0,0 +1,925 @@ +#include +#include +#include +#include +#include +#include +#include +#include + +#include "ximtool.h" + +/* LOAD.C -- Package for browsing directories and loading raster files into + * the display. + * + * xim_initLoad (xim) + * xim_loadClose (xim) + * + * xim_dirRescan (xim) + * xim_scanHeaders (xim) + * status = xim_loadFile (xim, fname, frame) + * + * xim_dirRescan scans the current directory and sends the file list to + * the GUI "filelist" parameter. xim_loadFile loads the named raster file + * into the current display frame. + */ + +#define True 1 +#define False 0 + +#undef max +#define max(a,b) ((a) > (b) ? (a) : (b)) +#undef min +#define min(a,b) ((a) < (b) ? (a) : (b)) + +static char **listFiles(); +static int fileCompare(), globExpression(), fileType(), ucharCompare(); +static void amapc(), sortGraymap(), loadstat(), strsort(); + +extern char *getcwd(), *getenv(); + +static int debug = False; + + +/* XIM_INITLOAD -- Initialize the file load structure. + */ +void +xim_initLoad (xim) +register XimDataPtr xim; +{ + register fileLoadPtr flp; + char buf[SZ_LINE]; + + xim->flp = flp = (fileLoadPtr) calloc (1, sizeof (fileLoad)); + if (!flp) + return; + + strcpy (flp->homedir, getenv("HOME")); + if (getcwd (flp->curdir, SZ_FNAME) == NULL) + strcpy (flp->curdir, flp->homedir); + strcpy (flp->pattern, "*.fits,*.imh"); + flp->gray = 0; + flp->zscale = 1; + flp->zrange = 1; + flp->z1 = 0.0; + flp->z2 = 0.0; + flp->nsample = 1000; + + /* Update the GUI with the initial state. */ + sprintf (buf, "curdir %s\0", flp->curdir); + xim_message (xim, "loadOptions", buf); + sprintf (buf, "pattern %s\0", flp->pattern); + xim_message (xim, "loadOptions", buf); + sprintf (buf, "gray %d\0", flp->gray); + xim_message (xim, "loadOptions", buf); + sprintf (buf, "zscale %d\0", flp->zscale); + xim_message (xim, "loadOptions", buf); + sprintf (buf, "zrange %d\0", flp->zrange); + xim_message (xim, "loadOptions", buf); + sprintf (buf, "z1 %g\0", flp->z1); + xim_message (xim, "loadOptions", buf); + sprintf (buf, "z2 %g\0", flp->z2); + xim_message (xim, "loadOptions", buf); + sprintf (buf, "nsample %d\0", flp->nsample); + xim_message (xim, "loadOptions", buf); +} + + +/* XIM_LOADCLOSE -- Close the load struct. + */ +void +xim_loadClose (xim) +XimDataPtr xim; +{ + register fileLoadPtr flp = xim->flp; + register int i; + + if (flp->FileList) + for (i=0; i < flp->nfiles; i++) + free (flp->FileList[i]); + + free ((fileLoadPtr) flp); +} + + +/* XIM_LOADFILE -- Try loading a disk raster file into a display frame and + * colormap. + */ +int +xim_loadFile (xim, fname, frame) +register XimDataPtr xim; +char *fname; +int frame; +{ + register int i, new_config=-1; + register char *ip; + register fileLoadPtr flp = xim->flp; + register FrameBufPtr fr; + register MappingPtr mp; + register FbConfigPtr cf; + + float z1=0.0, z2=0.0; + int status = 0, has_private_cmap = 0, pixtype, w, h, ncolors; + int zscale = flp->zscale, zrange = flp->zrange, nsamp=flp->nsample; + unsigned char *pix=NULL, r[256], g[256], b[256]; + char *mapname, *err, buf[SZ_LINE]; + + extern char *loadSunRas(); + extern char *loadFITS(); + extern char *loadGIF(); + extern char *loadIRAF(); + extern int objid[]; + + /* Make sure the file exists. */ + if (access(fname, R_OK) != 0) { + sprintf (buf, "warning %s\0", "Error: File not found."); + xim_message (xim, "loadOptions", buf); + return (-1); + } + + switch (fileType(fname)) { + case XIM_RAS: /* Sun rasterfile. */ + loadstat (xim, "Reading rasterfile..."); + if (err = loadSunRas(fname,&pix,&pixtype,&w,&h,r,g,b,&ncolors, + flp->gray)) { + pix = NULL; + xim_alert (xim, err, NULL, NULL); + } + if (pixtype > 8) { + xim_alert (xim, "Error: 24 bit Sun rasterfile.", NULL, NULL); + free ((char *) pix); + pix = NULL; + } + has_private_cmap = 1; + break; + + case XIM_FITS: /* FITS file. */ + loadstat (xim, "Reading FITS file..."); + z1 = flp->z1; + z2 = flp->z2; + if (err = loadFITS(fname, &pix, &w, &h, r,g,b, &ncolors, + zscale, zrange, &z1, &z2, flp->nsample)){ + pix = NULL; + xim_alert (xim, err, NULL, NULL); + } + has_private_cmap = 0; + break; + + case XIM_GIF: /* GIF image */ + loadstat (xim, "Reading GIF fle..."); + if (err = loadGIF(fname, &pix, &w,&h, r,g,b, &ncolors, flp->gray)) { + pix = NULL; + xim_alert (xim, err, NULL, NULL); + } + has_private_cmap = 1; + break; + + case XIM_OIF: /* OIF image */ + loadstat (xim, "Reading IRAF image..."); + z1 = flp->z1; + z2 = flp->z2; + if (err = loadIRAF(fname, &pix, &w, &h, r,g,b, &ncolors, + zscale, zrange, &z1, &z2, flp->nsample)){ + pix = NULL; + xim_alert (xim, err, NULL, NULL); + } + has_private_cmap = 0; + break; + + case XIM_TIFF: /* TIFF image */ + case XIM_JPEG: /* JPEG image */ + case XIM_X11: /* X11 image */ + case XIM_RAW: /* RAW binary image */ + /* fall through */ + + default: + /* We don't know what this is so give up and notify the GUI. */ + sprintf (buf, "warning %s\0", "Error: Unknown raster file type."); + xim_message (xim, "loadOptions", buf); + return (-1); + } + + if (debug) { + fprintf (stderr, + "Load: pix=%d w=%d h=%d xnc=%d nc=%d pcm=%d z1=%g z2=%g\n", + pix, w, h, xim->ncolors, ncolors, has_private_cmap, z1, z2); + fflush (stderr); + } + + /* If the new image has more colors that we're allowed to display, + * quantize it to the available number before display. + */ + if (ncolors > xim->ncolors) { + if ( has_private_cmap && ! flp->gray) { + /* Quantize the colormap to the number of display colors. */ + loadstat (xim, "Quantizing colors..."); + ppmquant (pix, r, g, b, w, h, ncolors, xim->ncolors); + } + + if (! has_private_cmap || (has_private_cmap && flp->gray)) { + /* It's a grayscale map, so sort the colors into something + * that can be adjusted when displayed. + */ + loadstat (xim, "Sorting colormap..."); + sortGraymap (pix, pix, w*h, r, g, b, xim->ncolors); + + /* Force a grayscale colormap. */ + for (i=0; incolors; i++) + r[i] = g[i] = b[i] = (float)i / (float)(xim->ncolors) * 255; + } + ncolors = xim->ncolors; + xim->psim->cmap.ncolors = xim->ncolors; + } + + /* Use filename as the colormap name. */ + for (ip=mapname=fname; *ip; ip++) + if (*ip == '/') + mapname = ip + 1; + + /* Now check the dimensions against the current frame buffer config- + * uration. Change the fbconfig if needed. + */ + if (w > xim->width || h > xim->height) { + + register int width, height, tmin = 100000, edges; + + loadstat (xim, "Initializing frame buffer..."); + + /* First look for a frame buffer at least as large as the image. */ + for (i=0; i < MAX_FBCONFIG; i++) { + width = xim->fb_config[i].width; + height = xim->fb_config[i].height; + if (width == w && height == h) { + /* Get an exact match first. */ + new_config = i + 1; + break; + } else if (width >= w && height >= h) { + /* Look for match with smallest padding. */ + edges = width - w + height - h; + if (edges < tmin) { + tmin = edges; + new_config = i + 1; + } + } + } + + if (debug) { + fprintf (stderr, "Load: new_config=%d w=%d h=%d\n", new_config, + xim->fb_config[new_config-1].width, + xim->fb_config[new_config-1].height); + } + + + /* We didn't find a large enough buffer, so create a new one with + * the right size as one of the last available configs. This will + * overwrite anything there but they shouldn't normally be used + * and we'll use the frame as an offset for each display frame. + */ + if (new_config < 0) { + new_config = MAX_FBCONFIG - frame + 1; + cf = &xim->fb_config[new_config-1]; + cf->nframes = xim->nframes; + cf->width = w; + cf->height = h; + } else { + cf = &xim->fb_config[new_config-1]; + cf->nframes = (cf->nframes < frame ? frame : cf->nframes); + cf->nframes = (cf->nframes < xim->nframes ? xim->nframes : + cf->nframes); + xim->fb_configno = new_config; + } + + /* Change the frame buffer configuration. */ + sprintf (buf, "%d %d %d\0", cf->width, cf->height, 8); + xim_message (xim, "frameSize", buf); + + /* Create the frame. */ + for (i=1; i <= cf->nframes; i++) + xim_initFrame (xim, i, cf->nframes, cf, xim->memModel); + + xim->width = cf->width; + xim->height = cf->height; + GtSetLogRes (xim->gt, cf->width, cf->height); + + /* Fit the frame. */ + xim_message (xim, "frameFit", "init"); + } + + /* Take the pixels and colormap and write them to the display. */ + if ((pix == NULL) || (xim_writeDisplay (xim, + frame, mapname, pix, w, h, r, g, b, ncolors) < 0)) + status = -1; + + /* Reset the image title string. */ + loadstat (xim, ""); + xim_message (xim, "frameTitle", mapname); + eps_setLabel (xim->psim, mapname); + + + /* Notify the GUI that we are capable of using the ISM. + */ + wcspix_message (xim, "capable"); + + + /* ISM: Uncache all mappings associated with this frame. */ + fr = &xim->frames[frame-1]; + for (i=0; i < fr->nmaps; i++) { + mp = &fr->mapping[i]; + if (mp->id) { + sprintf (buf, "uncache %d", mp->id); + ism_message (xim, "wcspix", buf); + wcspix_message (xim, buf); + mp->id = 0; + } + } + + /* Now save the mapping information */ + fr->nmaps = 0; + mp = &(fr->mapping[fr->nmaps]); + objid[fr->frameno-1] = 0; + + mp->id = mp->regid = (++objid[fr->frameno-1]) + (fr->frameno * 100); + sprintf (mp->region, "%s", "image"); + if (fname[0] != '/' && getcwd (buf, (size_t) SZ_LINE)) + sprintf (mp->ref, "%s/%s", buf, fname); + else + sprintf (mp->ref, "%s", fname); + + mp->sx = 1.0; + mp->sy = 1.0; + mp->snx = w; + mp->sny = h; + mp->dx = (float) (xim->width - w) / 2.0; + mp->dy = (float) (xim->height - h) / 2.0; + mp->dnx = w; + mp->dny = h; + + /* Load a WCS for the frame. */ + mp->ctran.z1 = fr->ctran.z1 = z1; + mp->ctran.z2 = fr->ctran.z2 = z2; + mp->ctran.zt = fr->ctran.zt = W_LINEAR; + mp->ctran.a = fr->ctran.a = 1.; + mp->ctran.b = fr->ctran.b = 0.; + mp->ctran.c = fr->ctran.c = 0.; + mp->ctran.d = fr->ctran.d = -1.; + mp->ctran.tx = fr->ctran.tx = ((float)w/2.)-((float)xim->width/2.) + 1; + mp->ctran.ty = fr->ctran.ty = ((float)xim->height/2.)+((float)h / 2.); + mp->ctran.valid = fr->ctran.valid = 1; + strcpy (fr->ctran.imtitle, mapname); + strcpy (mp->ctran.imtitle, mapname); + + + /* Tell the ISM to cache this mapping if we have an object ref. */ + sprintf (buf, "cache %s %d", mp->ref, mp->id); + ism_message (xim, "wcspix", buf); + sprintf (buf, "wcslist %d", mp->id); + ism_message (xim, "wcspix", buf); + + /* Send the object ref to the GUI. */ + sprintf (buf, "cache %s %d %d", mp->ref, fr->frameno, mp->id); + wcspix_message (xim, buf); + sprintf (buf, "orient %d %d 1 1", mp->id, fr->frameno); + wcspix_message (xim, buf); + + fr->nmaps++; /* update number of mappings */ + + + /* DEBUG prints. */ + if (debug || getenv("DEBUG_MAPPINGS") != NULL) { + fprintf (stderr,"%s -\n%g %g %g %g %g %g %g %g %d\n", mapname, + fr->ctran.a, fr->ctran.b, fr->ctran.c, fr->ctran.d, + fr->ctran.tx, fr->ctran.ty, fr->ctran.z1, fr->ctran.z2, + fr->ctran.zt); + fprintf (stderr,"%s %d\n%g %g %d %d %d %d %d %d\n", + mp->region, mp->regid, mp->sx, mp->sy, mp->snx, mp->sny, + mp->dx, mp->dy, mp->dnx, mp->dny); + + print_mappings (fr); + } + + + if (pix != NULL) + free ((char *) pix); + return (status); +} + + +/* XIM_DIRRESCAN -- Rescan the current directory and send the resulting file + * list to the GUI. + */ +void +xim_dirRescan (xim) +register XimDataPtr xim; +{ + register fileLoadPtr flp = xim->flp; + register char *ip, *op, *flist; + register int i; + + if (flp->FileList) { + for (i=0; i < flp->nfiles; i++) + free (flp->FileList[i]); + } + + flp->FileList = listFiles (flp->curdir, flp->pattern, &flp->nfiles, 0); + + /* Turn the directory listing into something the GUI wants. */ + if (!(flist = (char *) malloc (SZ_NAME * flp->nfiles))) + return; + + strcpy (flist, "setValue {"); + for (i=0, op = flist+10; i < flp->nfiles; i++) { + *op++ = '"'; + for (ip = flp->FileList[i]; *op = *ip++; op++) + ; + *op++ = '"'; + *op++ = '\n'; + } + *op++ = '}'; + *op = '\0'; + + /* Send the file list to the GUI. */ + ObmDeliverMsg (xim->obm, "filelist", flist); + free ((char *)flist); +} + + +/* XIM_SCANHEADERS -- + */ +void +xim_scanHeaders (xim) +register XimDataPtr xim; +{ + register fileLoadPtr flp = xim->flp; + register char *ip, *op; + register char *entry = (char *)NULL, *flist = (char *)NULL; + register int i; + extern char *getFITSHdr(), *getIRAFHdr(); + extern char *getSunRasHdr(), *getGIFHdr(); + + if (flp->FileList) { + for (i=0; i < flp->nfiles; i++) + free (flp->FileList[i]); + } + + flp->FileList = listFiles (flp->curdir, flp->pattern, &flp->nfiles, 1); + + /* Turn the directory listing into something the GUI wants. */ + if (!(flist = (char *) malloc (SZ_NAME * flp->nfiles))) + return; + + strcpy (flist, "setValue {"); + op = flist+10; + for (i=0; i < flp->nfiles; i++) { + + switch (fileType (flp->FileList[i])) { + case XIM_FITS: entry = getFITSHdr (flp->FileList[i]); break; + case XIM_OIF: entry = getIRAFHdr (flp->FileList[i]); break; + case XIM_GIF: entry = getGIFHdr (flp->FileList[i]); break; + case XIM_RAS: entry = getSunRasHdr (flp->FileList[i]); break; + } + + if (entry) { + /* Copy the entry to the list. */ + *op++ = '"'; + for (ip = entry; *op = *ip++; op++) + ; + *op++ = '"'; + *op++ = '\n'; + + free ((char *) entry); + entry = NULL; + } + } + *op++ = '}'; + *op = '\0'; + + /* Send the file list to the GUI. */ + ObmDeliverMsg (xim->obm, "filelist", flist); + free ((char *) flist); +} + + + +/* ------------------ + * Internal routines. + * ------------------ + */ + +/* fileType -- Given a filename return what type of file it is. + */ +static int +fileType (fname) +char *fname; +{ + int format; + + if (isFITS (fname)) + format = XIM_FITS; + else if (isIRAF (fname)) + format = XIM_OIF; + else if (isSunRas (fname)) + format = XIM_RAS; + else if (isGIF (fname)) + format = XIM_GIF; + else { + /* + * FILL IN WITH REMAINDER OF FORMATS LATER. + */ + format = -1; + } + + return (format); +} + + +/* listFiles -- reads the directory specified and returns a list of + * filenames matching the given pattern contained in the directory + * sorted in ascending alphabetic order. + * + * Adapted from the ImageMagick package originally developed by John Christy. + */ +static char ** +listFiles (directory, pattern, number_entries, files_only) +char *directory; /* directory to be listed */ +char *pattern; /* pattern to be matched */ +int *number_entries; /* number of filenames in the list */ +int files_only; /* list only files, not dirs */ +{ + char **filelist, *ip; + char patterns[64][20]; + DIR *current_directory; + struct dirent *entry; + struct stat file_info; + unsigned int max_entries; + register int i=0, npatterns = 0; + int status, pattern_matches; + + /* Open directory. */ + *number_entries = 0; + status = chdir (directory); + if (status != 0) + return((char **) NULL); + (void) getcwd (directory, SZ_FNAME); + current_directory = opendir (directory); + if (current_directory == (DIR * ) NULL) + return((char **) NULL); + + /* Allocate filelist. */ + max_entries = 4096; + filelist = (char **) malloc (max_entries * sizeof(char *)); + if (filelist == (char **) NULL) { + (void) closedir (current_directory); + return((char **) NULL); + } + + /* Split the pattern list. */ + if (pattern) { + for (ip=pattern, i=0; *ip; ip++) { + if (*ip == ',') { + patterns[npatterns][i] = '\0'; + npatterns++; + i = 0; + } else + patterns[npatterns][i++] = *ip; + } + patterns[npatterns][i] = '\0'; + npatterns++; + } else + npatterns = 0; + + + /* Save the current and change to the new directory. */ + (void) chdir (directory); + entry = readdir (current_directory); + while (entry != (struct dirent *) NULL) { + if (*entry->d_name == '.') { + entry = readdir (current_directory); + continue; + } + (void) stat (entry->d_name, &file_info); + + /* Directory always matches. */ + pattern_matches = 0; + if ((S_ISDIR(file_info.st_mode) && !files_only)) { + pattern_matches = 1; + } else { + /* Otherwise, check the filename against the pattern list. */ + for (i=0; i < npatterns; i++) { + if (globExpression(entry->d_name, &patterns[i])) { + pattern_matches = 1; + break; + } + } + } + + if (pattern_matches) { + + /* Reallocate the list if necessary. */ + if (*number_entries >= max_entries) { + max_entries <<= 1; + filelist = (char **) + realloc((char *)filelist, max_entries * sizeof(char *)); + if (filelist == (char **) NULL) { + (void) closedir(current_directory); + return((char **) NULL); + } + } + filelist[*number_entries] = + (char *) malloc (strlen(entry->d_name) + 2); + if (filelist[*number_entries] == (char *) NULL) + break; + (void) strcpy (filelist[*number_entries], entry->d_name); + if (S_ISDIR(file_info.st_mode)) + strcat (filelist[*number_entries],"/"); + (*number_entries)++; + } + entry = readdir (current_directory); + } + (void) closedir (current_directory); + + /* Sort filelist in ascending order. */ + (void) strsort(filelist, *number_entries); + + return (filelist); +} + + +/* fileCompare -- Comparison routine needed by quicksort for listFiles. + * Adapted from the ImageMagick package originally developed by John Christy. + */ +static int +fileCompare (x, y) +void *x, *y; +{ + register char *p, *q; + + p = (char *) * ((char **) x); + q = (char *) * ((char **) y); + while ((*p != '\0') && (*q != '\0') && (*p == *q)) { + p++; + q++; + } + return (*p - (*q)); +} + + +/* globExpression -- returns True if the expression matches the given pattern. + * Adapted from the ImageMagick package originally developed by John Christy. + */ +static int +globExpression (expression, pattern) +char *expression; /* file name */ +char *pattern; /* matching pattern */ +{ + register int done, match, status; + register char c, *p; + + + if (pattern == (char *) NULL) + return (True); + if (strlen (pattern) == 0) + return (True); + if (strcmp (pattern, "*") == 0) + return (True); + done = False; + + while ((*pattern != '\0') && !done) { + if (*expression == '\0') + if ((*pattern != '{') && (*pattern != '*')) + break; + + switch (*pattern) { + case '\\': + pattern++; + if (*pattern != '\0') + pattern++; + break; + case '*': + pattern++; + status = False; + while ((*expression != '\0') && !status) + status = globExpression((char *) expression++, pattern); + if (status) { + while (*expression != '\0') + expression++; + while (*pattern != '\0') + pattern++; + } + break; + case '[': + pattern++; + for ( ; ; ) { + if ((*pattern == '\0') || (*pattern == ']')) { + done = True; + break; + } + if (*pattern == '\\') { + pattern++; + if (*pattern == '\0') { + done = True; + break; + } + } + if (*(pattern + 1) == '-') { + c = (*pattern); + pattern += 2; + if (*pattern == ']') { + done = True; + break; + } + if (*pattern == '\\') { + pattern++; + if (*pattern == '\0') { + done = True; + break; + } + } + if ((*expression < c) || (*expression > *pattern)) { + pattern++; + continue; + } + } else if (*pattern != *expression) { + pattern++; + continue; + } + pattern++; + while ((*pattern != ']') && (*pattern != '\0')) { + if ((*pattern == '\\') && (*(pattern + 1) != '\0')) + pattern++; + pattern++; + } + if (*pattern != '\0') { + pattern++; + expression++; + } + break; + } + break; + case '?': + pattern++; + expression++; + break; + case '{': + pattern++; + while ((*pattern != '}') && (*pattern != '\0')) { + p = expression; + match = True; + while ((*p != '\0') && (*pattern != '\0') && + (*pattern != ',') && (*pattern != '}') && match) { + if (*pattern == '\\') + pattern++; + match = (*pattern == *p); + p++; + pattern++; + } + if (*pattern == '\0') { + match = False; + done = True; + break; + } else if (match) { + expression = p; + while ((*pattern != '}') && (*pattern != '\0')) { + pattern++; + if (*pattern == '\\') { + pattern++; + if (*pattern == '}') + pattern++; + } + } + } else { + while ((*pattern != '}') && (*pattern != ',') && + (*pattern != '\0')) { + pattern++; + if (*pattern == '\\') { + pattern++; + if ((*pattern == '}') || (*pattern == ',')) + pattern++; + } + } + } + if (*pattern != '\0') + pattern++; + } + break; + default: + if (*expression != *pattern) + done = True; + else { + expression++; + pattern++; + } + } + } + + while (*pattern == '*') + pattern++; + + return ((*expression == '\0') && (*pattern == '\0')); +} + + +/* AMAPC -- Vector linear transformation. Map the range of pixel values + * a1,a2 from a into the range b1,b2 in b. It is assumed that a1 < a2 + * and b1 < b2. + */ + +static void +amapc (a, b, npix, a1, a2, b1, b2) +char *a, *b; +int npix, a1, a2, b1, b2; +{ + register int i, minout, maxout, aoff, boff, pixval; + register double scalar; + + scalar = ((double) b2 - (double) b1) / ((double) a2 - (double) a1); + + minout = min (b1, b2); + maxout = max (b1, b2); + aoff = a1; + boff = b1; + + for (i=0; i < npix; i++) { + pixval = (a[i] - aoff) * scalar; + b[i] = (char) max(minout, min(maxout, pixval + boff)); + } +} + + +/* SORTGRAYMAP -- Sort a random grayscale colormap. + */ + +static void +sortGraymap (a, b, npix, red, green, blue, ncols) +unsigned char *a, *b; +unsigned char *red, *green, *blue; +int npix, ncols; +{ + register int i, pmin=0, pmax=255; + register float scale; + + /* Reset the pixels so they are the final grayscale values. */ + scale = 255.0 / (float) (ncols - 1); + for (i=0; i +#include +#include +#include +#include +#include +#include +#include + +#include "ximtool.h" +#include "logo.h" + + +xim_displayLogo (xim) +register XimDataPtr xim; +{ + register int i; + unsigned char r[256], g[256], b[256]; + + + if (!xim || !xim->gt) + return; + + /* Create the default colormap. + */ + for (i=0; i < 200; i++) + r[i] = g[i] = b[i] = (float)i / (float)(LOGO_NCOLORS) * 255; + + /* Set the logical resolution of the display. + */ + GtSetLogRes (xim->gt, LOGO_XDIM, LOGO_YDIM); + + if (xim_writeDisplay (xim, 1, "logo", logo_data, + LOGO_XDIM, LOGO_YDIM, r, g, b, LOGO_NCOLORS) < 0) + return; +} diff --git a/vendor/x11iraf/ximtool/logo.h b/vendor/x11iraf/ximtool/logo.h new file mode 100644 index 00000000..b821727a --- /dev/null +++ b/vendor/x11iraf/ximtool/logo.h @@ -0,0 +1,17485 @@ +#define LOGO_XDIM 512 +#define LOGO_YDIM 512 +#define LOGO_NCOLORS 200 +#define LOGO_NBYTES 262144 + +unsigned char logo_data[] = { + 0x0e,0x0e,0x0e,0x0e,0x0e,0x0e,0x0e,0x0e,0x0e,0x0e,0x0e,0x0e,0x0e,0x0e,0x0e, + 0x0e,0x0e,0x0e,0x0e,0x0e,0x0e,0x0e,0x0e,0x0e,0x0e,0x0e,0x0e,0x0e,0x0e,0x0e, + 0x0e,0x0e,0x0e,0x0e,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f, + 0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f, + 0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f, + 0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f, + 0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f, + 0x0f,0x0f,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10, + 0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10, + 0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10, + 0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x11,0x11,0x11,0x11, + 0x11,0x11,0x11,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, + 0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, + 0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, + 0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, + 0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, + 0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, + 0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, + 0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, + 0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, + 0x12,0x12,0x12,0x12,0x12,0x13,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14, + 0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14, + 0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x13,0x13,0x13,0x13,0x13,0x13, + 0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13, + 0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13, + 0x13,0x13,0x13,0x13,0x13,0x14,0x14,0x14,0x14,0x14,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14, + 0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x15,0x15,0x15,0x15,0x15,0x14,0x14, + 0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14, + 0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14, + 0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14, + 0x14,0x14,0x14,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x16,0x16,0x15,0x15,0x15, + 0x15,0xc8,0x0e,0x0e,0x0e,0x0e,0x0e,0x0e,0x0e,0x0e,0x0e,0x0e,0x0e,0x0e,0x0e, + 0x0e,0x0e,0x0e,0x0e,0x0e,0x0e,0x0e,0x0e,0x0e,0x0e,0x0e,0x0e,0x0e,0x0e,0x0e, + 0x0e,0x0e,0x0e,0x0e,0x0e,0x0e,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f, + 0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f, + 0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f, + 0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f, + 0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f, + 0x0f,0x0f,0x0f,0x0f,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10, + 0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10, + 0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x11,0x10,0x10, + 0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10, + 0x10,0x10,0x10,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x12,0x12,0x12,0x12,0x12, + 0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, + 0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, + 0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, + 0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, + 0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, + 0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x11,0x11, + 0x11,0x11,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x13, + 0x13,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, + 0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13, + 0x13,0x13,0x13,0x13,0x13,0x14,0x14,0x14,0x13,0x13,0x13,0x13,0x13,0x13,0x13, + 0x13,0x13,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x13,0x13,0x13,0x13, + 0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13, + 0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13, + 0x13,0x13,0x13,0x13,0x13,0x13,0x14,0x14,0x14,0x14,0x14,0x14,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x14,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14, + 0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x15,0x15,0x15,0x15,0x15,0x15,0x14,0x14, + 0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14, + 0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14, + 0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14, + 0x14,0x14,0x14,0x14,0x14,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0xc8,0x0e,0x0e,0x0e,0x0e,0x0e,0x0e,0x0e,0x0e,0x0e,0x0e,0x0e, + 0x0e,0x0e,0x0e,0x0e,0x0e,0x0e,0x0e,0x0e,0x0e,0x0e,0x0e,0x0e,0x0e,0x0e,0x0e, + 0x0e,0x0e,0x0e,0x0e,0x0e,0x0e,0x0e,0x0e,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f, + 0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f, + 0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f, + 0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f, + 0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f, + 0x0f,0x0f,0x0f,0x0f,0x0f,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10, + 0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10, + 0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x11,0x11, + 0x11,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10, + 0x10,0x10,0x10,0x10,0x10,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x12,0x12,0x12, + 0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, + 0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, + 0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, + 0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, + 0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, + 0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, + 0x11,0x11,0x11,0x11,0x11,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, + 0x12,0x13,0x13,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, + 0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x13,0x13,0x13,0x13,0x13,0x13, + 0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x14,0x13,0x13,0x13,0x13,0x13,0x13, + 0x13,0x13,0x13,0x13,0x13,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x13,0x13,0x13, + 0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13, + 0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13, + 0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x14,0x14,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x14,0x14,0x14,0x14,0x14,0x14, + 0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14, + 0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14, + 0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14, + 0x14,0x14,0x14,0x14,0x14,0x14,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0xc8,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f, + 0x0f,0x0f,0x0f,0x0f,0x0f,0x0e,0x0e,0x0e,0x0e,0x0e,0x0e,0x0e,0x0e,0x0e,0x0e, + 0x0e,0x0e,0x0e,0x0e,0x0e,0x0e,0x0e,0x0e,0x0e,0x0e,0x0f,0x0f,0x0f,0x0f,0x0f, + 0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f, + 0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f, + 0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f, + 0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f, + 0x0f,0x0f,0x0f,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10, + 0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10, + 0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x11,0x11,0x11,0x11, + 0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11, + 0x11,0x10,0x10,0x10,0x10,0x10,0x10,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11, + 0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x12,0x12,0x12, + 0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, + 0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, + 0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, + 0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, + 0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, + 0x12,0x12,0x11,0x11,0x11,0x11,0x11,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, + 0x13,0x13,0x13,0x13,0x13,0x13,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, + 0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x13,0x13,0x13,0x13, + 0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13, + 0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x14,0x14,0x14,0x14,0x14,0x14,0x13, + 0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13, + 0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x14,0x14, + 0x14,0x14,0x14,0x13,0x13,0x13,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x15,0x15, + 0x15,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14, + 0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14, + 0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x15, + 0x15,0x15,0x15,0x15,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14, + 0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0xc8,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f, + 0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0e,0x0e,0x0e,0x0e,0x0e,0x0e,0x0e,0x0e, + 0x0e,0x0e,0x0e,0x0e,0x0e,0x0e,0x0e,0x0e,0x0e,0x0e,0x0e,0x0f,0x0f,0x0f,0x0f, + 0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f, + 0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f, + 0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f, + 0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x10,0x0f,0x0f,0x0f,0x0f, + 0x0f,0x0f,0x0f,0x0f,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10, + 0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10, + 0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x11,0x11, + 0x11,0x11,0x11,0x12,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11, + 0x11,0x11,0x11,0x10,0x10,0x10,0x10,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11, + 0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x12, + 0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, + 0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, + 0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, + 0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, + 0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, + 0x12,0x12,0x12,0x12,0x11,0x11,0x11,0x11,0x11,0x12,0x12,0x12,0x12,0x12,0x12, + 0x12,0x12,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x12,0x12,0x12,0x12,0x12,0x12, + 0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x13,0x13, + 0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x14,0x13, + 0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x14,0x13,0x14,0x14,0x14,0x14,0x14,0x14, + 0x14,0x14,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13, + 0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x14,0x13,0x14, + 0x14,0x14,0x14,0x14,0x14,0x14,0x13,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14, + 0x15,0x15,0x15,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14, + 0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14, + 0x14,0x14,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14, + 0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14, + 0x14,0x14,0x14,0x15,0x15,0x15,0x15,0x14,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0xc8,0x0f,0x0f,0x0f,0x0f,0x0f, + 0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0e,0x0e,0x0e,0x0e,0x0e,0x0e, + 0x0e,0x0e,0x0e,0x0e,0x0e,0x0e,0x0e,0x0e,0x0e,0x0e,0x0e,0x0e,0x0f,0x0f,0x0f, + 0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f, + 0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f, + 0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f, + 0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x10,0x10,0x0f,0x0f, + 0x0f,0x0f,0x0f,0x0f,0x0f,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10, + 0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10, + 0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10, + 0x11,0x11,0x11,0x11,0x11,0x12,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11, + 0x11,0x11,0x11,0x11,0x11,0x10,0x10,0x10,0x11,0x11,0x11,0x11,0x11,0x11,0x11, + 0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11, + 0x11,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, + 0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, + 0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, + 0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, + 0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, + 0x12,0x12,0x12,0x12,0x12,0x12,0x11,0x11,0x11,0x11,0x11,0x12,0x12,0x12,0x12, + 0x12,0x12,0x12,0x12,0x13,0x13,0x13,0x13,0x13,0x13,0x12,0x12,0x12,0x12,0x12, + 0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, + 0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x14, + 0x14,0x14,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x14,0x14,0x14,0x14,0x14,0x14, + 0x14,0x14,0x14,0x14,0x14,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13, + 0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x14,0x14, + 0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14, + 0x14,0x14,0x15,0x15,0x15,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14, + 0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14, + 0x14,0x14,0x14,0x14,0x14,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14, + 0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14, + 0x14,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x14,0x14,0x14,0x14,0x14,0x14, + 0x14,0x14,0x14,0x14,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0xc8,0x0f,0x0f,0x0f, + 0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f, + 0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f, + 0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f, + 0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f, + 0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f, + 0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x10,0x10,0x10, + 0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10, + 0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10, + 0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10, + 0x10,0x10,0x10,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11, + 0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11, + 0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11, + 0x11,0x11,0x11,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, + 0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, + 0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, + 0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, + 0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x13,0x12,0x12,0x12,0x12,0x12,0x12, + 0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, + 0x12,0x12,0x12,0x12,0x12,0x12,0x13,0x13,0x13,0x13,0x13,0x13,0x12,0x12,0x12, + 0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, + 0x12,0x12,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13, + 0x13,0x14,0x14,0x14,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x14,0x14,0x14,0x14, + 0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14, + 0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14, + 0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14, + 0x14,0x14,0x14,0x14,0x15,0x15,0x15,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14, + 0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14, + 0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x14,0x14,0x14,0x14,0x14,0x14,0x14, + 0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14, + 0x14,0x14,0x14,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x14, + 0x14,0x14,0x14,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0xc8,0x0f, + 0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f, + 0x0f,0x0f,0x0f,0x0f,0x0f,0x06,0x0c,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f, + 0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f, + 0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f, + 0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f, + 0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x10, + 0x10,0x10,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x10,0x10,0x10,0x10,0x10,0x10, + 0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10, + 0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10, + 0x10,0x10,0x10,0x10,0x10,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11, + 0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11, + 0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11, + 0x11,0x11,0x11,0x11,0x11,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, + 0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, + 0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, + 0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, + 0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x13,0x12,0x12,0x12,0x12, + 0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, + 0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x13,0x13,0x13,0x13,0x13,0x13,0x12, + 0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, + 0x12,0x12,0x12,0x12,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13, + 0x13,0x13,0x13,0x14,0x14,0x14,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x14,0x14, + 0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14, + 0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14, + 0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14, + 0x14,0x14,0x14,0x14,0x14,0x14,0x15,0x15,0x15,0x14,0x14,0x14,0x14,0x14,0x14, + 0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14, + 0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x14,0x14,0x14,0x14, + 0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14, + 0x14,0x14,0x14,0x14,0x14,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x14,0x14,0x14,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0xc8,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f, + 0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0c,0x06,0x0f,0x0f,0x0f,0x0f,0x0f, + 0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f, + 0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f, + 0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f, + 0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x10, + 0x10,0x10,0x10,0x10,0x0f,0x0f,0x0f,0x0f,0x0f,0x10,0x10,0x10,0x10,0x10,0x10, + 0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10, + 0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10, + 0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11, + 0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11, + 0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11, + 0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, + 0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, + 0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, + 0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, + 0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, + 0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, + 0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x13,0x13,0x13,0x13,0x13, + 0x13,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, + 0x12,0x12,0x12,0x12,0x12,0x12,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13, + 0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13, + 0x13,0x13,0x13,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14, + 0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14, + 0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14, + 0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x15,0x15,0x14,0x14,0x14,0x14, + 0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14, + 0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x14, + 0x14,0x14,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x14,0x14,0x14,0x14,0x14,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0xc8,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f, + 0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f, + 0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f, + 0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f, + 0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f, + 0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f, + 0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x0f,0x10,0x0f,0x10,0x10,0x10,0x10,0x10, + 0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10, + 0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10, + 0x10,0x10,0x11,0x11,0x11,0x11,0x11,0x10,0x11,0x11,0x11,0x11,0x11,0x11,0x11, + 0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11, + 0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11, + 0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x12,0x12,0x12,0x12,0x12,0x12, + 0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, + 0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, + 0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, + 0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, + 0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, + 0x12,0x12,0x12,0x12,0x12,0x12,0x13,0x12,0x13,0x12,0x12,0x12,0x13,0x13,0x13, + 0x13,0x13,0x13,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x13,0x13,0x13,0x13, + 0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13, + 0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13, + 0x13,0x13,0x13,0x13,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14, + 0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14, + 0x14,0x14,0x15,0x15,0x15,0x15,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14, + 0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14, + 0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14, + 0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x14,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x14,0x15,0x14,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0xc8,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f, + 0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f, + 0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f, + 0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f, + 0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f, + 0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f, + 0x0f,0x0f,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10, + 0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10, + 0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10, + 0x10,0x10,0x10,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11, + 0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11, + 0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11, + 0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x12,0x12,0x12,0x12, + 0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, + 0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, + 0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, + 0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, + 0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, + 0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x13,0x13,0x13,0x13,0x13,0x12,0x12,0x13, + 0x13,0x13,0x13,0x13,0x13,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x13,0x13,0x13, + 0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13, + 0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x14,0x14,0x13,0x13,0x13,0x13,0x13, + 0x13,0x13,0x13,0x13,0x13,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14, + 0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14, + 0x14,0x14,0x14,0x15,0x15,0x15,0x15,0x15,0x14,0x14,0x14,0x14,0x14,0x14,0x14, + 0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14, + 0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14, + 0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0xc8,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f, + 0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f, + 0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f, + 0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f, + 0x0f,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10, + 0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x0f,0x0f,0x0f, + 0x0f,0x0f,0x0f,0x0f,0x10,0x10,0x10,0x10,0x10,0x11,0x10,0x10,0x10,0x10,0x10, + 0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10, + 0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10, + 0x10,0x10,0x10,0x10,0x10,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11, + 0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11, + 0x11,0x11,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, + 0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x12,0x12, + 0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, + 0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, + 0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, + 0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, + 0x12,0x11,0x11,0x11,0x12,0x12,0x11,0x11,0x11,0x12,0x12,0x12,0x12,0x12,0x12, + 0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x13,0x13,0x13,0x14,0x14,0x13,0x13, + 0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x13, + 0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x14,0x14, + 0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14, + 0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14, + 0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14, + 0x14,0x14,0x14,0x14,0x14,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x14,0x14,0x14, + 0x14,0x14,0x13,0x13,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14, + 0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14, + 0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0xc8,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f, + 0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f, + 0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f, + 0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f, + 0x0f,0x0f,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10, + 0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10, + 0x0f,0x0f,0x0f,0x0f,0x0f,0x10,0x10,0x10,0x10,0x10,0x10,0x11,0x10,0x10,0x10, + 0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10, + 0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10, + 0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11, + 0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11, + 0x11,0x11,0x11,0x11,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, + 0x12,0x12,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11, + 0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, + 0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, + 0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, + 0x12,0x12,0x12,0x12,0x12,0x13,0x13,0x13,0x12,0x12,0x12,0x12,0x12,0x12,0x12, + 0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, + 0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x13,0x13,0x13,0x13,0x14,0x13, + 0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x12,0x12,0x12,0x12,0x12, + 0x12,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x14, + 0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14, + 0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14, + 0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14, + 0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x15,0x15,0x15,0x15,0x15,0x15,0x14, + 0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14, + 0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14, + 0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0xc8,0x0e,0x0e,0x0e,0x0e, + 0x0e,0x0e,0x0e,0x0e,0x0e,0x0e,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f, + 0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0e,0x0e,0x0f,0x0f,0x0f,0x0f,0x0f, + 0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f, + 0x0f,0x0f,0x0f,0x0f,0x0f,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10, + 0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10, + 0x10,0x11,0x11,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10, + 0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10, + 0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x11,0x11,0x11,0x11, + 0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11, + 0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11, + 0x11,0x11,0x11,0x11,0x11,0x11,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, + 0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, + 0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, + 0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, + 0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, + 0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x14,0x14,0x14,0x13,0x13,0x13,0x13,0x13, + 0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13, + 0x13,0x13,0x13,0x12,0x12,0x12,0x12,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13, + 0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13, + 0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13, + 0x13,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14, + 0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14, + 0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14, + 0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14, + 0x14,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x14,0x14,0x14,0x14,0x14,0x14,0x14, + 0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14, + 0x14,0x14,0x14,0x14,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x16,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0xc8,0x0e,0x0e, + 0x0e,0x0e,0x0e,0x0e,0x0e,0x0e,0x0e,0x0e,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f, + 0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0e,0x0e,0x0f,0x0f,0x0f, + 0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f, + 0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10, + 0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10, + 0x10,0x10,0x10,0x11,0x11,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10, + 0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10, + 0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x11,0x11,0x11,0x11,0x10,0x11,0x11,0x11, + 0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11, + 0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11, + 0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x12,0x12,0x12,0x12,0x12,0x12,0x12, + 0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, + 0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, + 0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, + 0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, + 0x12,0x12,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x14,0x14,0x14,0x13,0x13,0x13, + 0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x14,0x14,0x13,0x13, + 0x13,0x13,0x13,0x13,0x13,0x12,0x12,0x12,0x12,0x13,0x13,0x13,0x13,0x13,0x13, + 0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13, + 0x13,0x13,0x13,0x13,0x13,0x13,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14, + 0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14, + 0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14, + 0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14, + 0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14, + 0x14,0x14,0x14,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x14,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x16,0x16,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0xc8, + 0x0e,0x0e,0x0e,0x0e,0x0e,0x0e,0x0e,0x0e,0x0e,0x0e,0x0f,0x0f,0x0f,0x0f,0x0f, + 0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0e,0x0e,0x0f, + 0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f, + 0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x10,0x10,0x10,0x10,0x10,0x10, + 0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10, + 0x10,0x10,0x10,0x10,0x10,0x11,0x11,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10, + 0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10, + 0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x11,0x11,0x11,0x11,0x11,0x11,0x11, + 0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11, + 0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11, + 0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x12,0x12,0x12,0x12,0x12, + 0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, + 0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, + 0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, + 0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, + 0x12,0x12,0x12,0x12,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x14,0x14,0x14,0x13, + 0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x14,0x14,0x14, + 0x14,0x13,0x13,0x13,0x13,0x13,0x12,0x12,0x12,0x12,0x12,0x13,0x13,0x13,0x13, + 0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13, + 0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14, + 0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14, + 0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14, + 0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14, + 0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14, + 0x14,0x14,0x14,0x14,0x14,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x16,0x16,0x16,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0xc8,0x0e,0x0e,0x0e,0x0e,0x0e,0x0e,0x0e,0x0e,0x0e,0x0e,0x0f,0x0f,0x0f, + 0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f, + 0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f, + 0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x10,0x10,0x10,0x10, + 0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10, + 0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10, + 0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10, + 0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x11,0x11,0x11,0x11,0x11, + 0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11, + 0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11, + 0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x12,0x12,0x12, + 0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, + 0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, + 0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, + 0x12,0x12,0x12,0x12,0x12,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13, + 0x13,0x13,0x13,0x12,0x12,0x12,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x14,0x14, + 0x14,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x14, + 0x14,0x14,0x14,0x14,0x13,0x13,0x13,0x13,0x12,0x12,0x12,0x12,0x12,0x13,0x13, + 0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13, + 0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x14,0x14,0x14,0x14,0x14,0x14, + 0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14, + 0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14, + 0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14, + 0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14, + 0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x16,0x16,0x16,0x16,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x16,0x16,0x16, + 0x16,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x16,0x16,0xc8,0x0e,0x0e,0x0e,0x0e,0x0e,0x0e,0x0e,0x0e,0x0e,0x0e,0x0f, + 0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f, + 0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f, + 0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0c,0x06,0x0f,0x0f,0x10,0x12, + 0x32,0x57,0x57,0x38,0x2b,0x19,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10, + 0x10,0x10,0x06,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10, + 0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10, + 0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x11,0x11,0x11, + 0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11, + 0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11, + 0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x12, + 0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, + 0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, + 0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, + 0x12,0x12,0x12,0x12,0x12,0x12,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13, + 0x13,0x13,0x13,0x13,0x13,0x12,0x12,0x12,0x13,0x13,0x13,0x13,0x13,0x13,0x13, + 0x14,0x14,0x14,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13, + 0x13,0x14,0x14,0x14,0x14,0x14,0x14,0x13,0x13,0x13,0x12,0x12,0x12,0x12,0x13, + 0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13, + 0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x14,0x14,0x14,0x14, + 0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14, + 0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14, + 0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14, + 0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14, + 0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x16,0x16,0x16,0x16,0x16,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x16,0x16, + 0x16,0x16,0x16,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x16,0x16,0xc8,0x0e,0x0e,0x0e,0x0e,0x0e,0x0e,0x0e,0x0e,0x0e, + 0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f, + 0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f, + 0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x06,0x0f,0x0f,0x0f,0x6a, + 0x90,0xa9,0xbc,0xbc,0xbc,0xbc,0xbc,0xaf,0xa3,0x90,0x77,0x4b,0x10,0x10,0x10, + 0x10,0x10,0x06,0x10,0x06,0x10,0x06,0x06,0x10,0x10,0x10,0x10,0x10,0x10,0x10, + 0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10, + 0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x11,0x11, + 0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11, + 0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11, + 0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11, + 0x11,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, + 0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, + 0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, + 0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x13,0x13,0x13,0x13,0x13,0x13, + 0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13, + 0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13, + 0x13,0x13,0x13,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x13,0x13,0x13,0x13,0x13, + 0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13, + 0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x14,0x14, + 0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14, + 0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14, + 0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14, + 0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14, + 0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x16,0x16,0x16,0x16, + 0x16,0x16,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x16, + 0x16,0x16,0x16,0x16,0x16,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x16,0x16,0xc8,0x0e,0x0e,0x0e,0x0e,0x0e,0x0e,0x0f, + 0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f, + 0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x10,0x10,0x10, + 0x10,0x0f,0x0f,0x0f,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x77, + 0xaf,0xbc,0xc2,0xbc,0xb5,0xaf,0xa3,0xa3,0xa3,0xaf,0xb5,0xbc,0xbc,0xbc,0xaf, + 0x96,0x6a,0x2b,0x10,0x10,0x10,0x06,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10, + 0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10, + 0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10, + 0x11,0x11,0x11,0x11,0x11,0x11,0x12,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11, + 0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11, + 0x11,0x11,0x11,0x11,0x11,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, + 0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, + 0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, + 0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x13,0x13, + 0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x12,0x12,0x12,0x12, + 0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x13,0x13,0x13,0x13,0x13,0x13,0x13, + 0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13, + 0x13,0x13,0x13,0x13,0x13,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14, + 0x14,0x14,0x14,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13, + 0x13,0x13,0x13,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14, + 0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14, + 0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x14,0x14,0x14,0x14,0x14,0x14, + 0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14, + 0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x16,0x16, + 0x16,0x16,0x16,0x16,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16, + 0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16, + 0x16,0x16,0x16,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x16,0x16, + 0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0xc8,0x0e,0x0e,0x0e,0x0e,0x0e, + 0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f, + 0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x10, + 0x10,0x10,0x10,0x10,0x0f,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x4b, + 0xa3,0xbc,0xbc,0xbc,0xa3,0x6a,0x2b,0x10,0x10,0x10,0x10,0x10,0x19,0x4b,0x70, + 0x90,0xa9,0xbc,0xbc,0xb5,0x96,0x51,0x10,0x10,0x10,0x06,0x06,0x10,0x10,0x10, + 0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10, + 0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10, + 0x10,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x12,0x12,0x11,0x11,0x11,0x11,0x11, + 0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11, + 0x11,0x11,0x11,0x11,0x11,0x11,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, + 0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, + 0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, + 0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x13, + 0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x12,0x12, + 0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x13,0x13,0x13,0x13, + 0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13, + 0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14, + 0x14,0x14,0x14,0x14,0x14,0x14,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13, + 0x13,0x13,0x13,0x13,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14, + 0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14, + 0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x14,0x14,0x14, + 0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14, + 0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x16,0x16,0x16,0x16,0x16,0x16,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16, + 0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16, + 0x16,0x16,0x16,0x16,0x16,0x16,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x16, + 0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0xc8,0x0e,0x0e,0x0e, + 0x0e,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f, + 0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x10, + 0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10, + 0x5e,0xaf,0xbc,0xbc,0xb5,0x6a,0x10,0x10,0x10,0x06,0x10,0x10,0x10,0x06,0x10, + 0x10,0x10,0x10,0x10,0x38,0x77,0xa3,0xb5,0xbc,0xa9,0x6a,0x10,0x10,0x10,0x10, + 0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10, + 0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10, + 0x10,0x10,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11, + 0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11, + 0x11,0x11,0x11,0x11,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, + 0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, + 0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, + 0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, + 0x12,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13, + 0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x13,0x13, + 0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13, + 0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x14,0x14,0x14,0x14,0x14,0x14, + 0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14, + 0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14, + 0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14, + 0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x14, + 0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14, + 0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16, + 0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16, + 0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0xc8,0x0e, + 0x0e,0x0e,0x0e,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f, + 0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f, + 0x0f,0x10,0x10,0x06,0x10,0x10,0x10,0x06,0x0c,0x06,0x10,0x10,0x10,0x10,0x10, + 0x10,0x5e,0xb5,0xbc,0xbc,0xaf,0x4b,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10, + 0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x45,0x83,0xaf,0xbc,0xa9,0x6a, + 0x10,0x10,0x06,0x10,0x10,0x0c,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10, + 0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10, + 0x10,0x10,0x10,0x10,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11, + 0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11, + 0x11,0x11,0x11,0x11,0x11,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, + 0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, + 0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, + 0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, + 0x12,0x12,0x12,0x12,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13, + 0x13,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, + 0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13, + 0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x14,0x14,0x14,0x14, + 0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14, + 0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14, + 0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14, + 0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14, + 0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16, + 0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16, + 0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16, + 0xc8,0x0e,0x0e,0x0e,0x0e,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f, + 0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f, + 0x0f,0x0f,0x0f,0x10,0x10,0x10,0x06,0x10,0x0c,0x06,0x10,0x10,0x10,0x10,0x10, + 0x10,0x10,0x45,0xaf,0xbc,0xbc,0xb5,0x51,0x10,0x10,0x10,0x10,0x10,0x10,0x10, + 0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x06,0x10,0x10,0x10,0x10,0x6a, + 0xa9,0xbc,0xa3,0x45,0x10,0x10,0x06,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10, + 0x10,0x10,0x10,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11, + 0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11, + 0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11, + 0x11,0x11,0x11,0x11,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, + 0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, + 0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, + 0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, + 0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, + 0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, + 0x12,0x12,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13, + 0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x14,0x14, + 0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14, + 0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14, + 0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14, + 0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14, + 0x14,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16, + 0x16,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16, + 0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16, + 0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16, + 0x16,0x16,0xc8,0x0e,0x0e,0x0e,0x0e,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f, + 0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f, + 0x0f,0x0f,0x0f,0x0f,0x0f,0x10,0x10,0x06,0x06,0x06,0x10,0x10,0x10,0x10,0x10, + 0x57,0x7d,0x96,0x83,0xa3,0xbc,0xbc,0xbc,0x77,0x10,0x06,0x10,0x10,0x10,0x10, + 0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x0c,0x10,0x06,0x10, + 0x10,0x10,0x10,0x6a,0xaf,0xb5,0x7d,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10, + 0x10,0x10,0x10,0x10,0x10,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11, + 0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11, + 0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11, + 0x11,0x11,0x11,0x11,0x11,0x11,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, + 0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x13,0x13, + 0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x12,0x12,0x12,0x12, + 0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, + 0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, + 0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, + 0x12,0x12,0x12,0x12,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13, + 0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13, + 0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x14,0x14,0x14,0x14, + 0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14, + 0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x14,0x14,0x14,0x14,0x14, + 0x14,0x14,0x14,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x16,0x16,0x16,0x16,0x16,0x16,0x16, + 0x16,0x16,0x16,0x16,0x15,0x15,0x15,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16, + 0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16, + 0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16, + 0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16, + 0x16,0x16,0x16,0x16,0xc8,0x0e,0x0e,0x0e,0x0e,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f, + 0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f, + 0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x10,0x10,0x06,0x06,0x10,0x19,0x4b,0x32, + 0x70,0xa9,0xb5,0xbc,0xbc,0xa3,0xbc,0xbc,0xbc,0xa3,0x10,0x10,0x10,0x10,0x10, + 0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x06, + 0x06,0x10,0x0c,0x10,0x10,0x10,0x19,0x8a,0xb5,0xa3,0x25,0x10,0x10,0x10,0x10, + 0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11, + 0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11, + 0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11, + 0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x12,0x12,0x12,0x12,0x12,0x12,0x12, + 0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, + 0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x12,0x12, + 0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, + 0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, + 0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, + 0x12,0x12,0x12,0x12,0x12,0x12,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13, + 0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13, + 0x13,0x13,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14, + 0x14,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x14, + 0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14, + 0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14, + 0x14,0x14,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x16,0x16,0x16,0x16,0x16, + 0x16,0x16,0x16,0x16,0x16,0x16,0x15,0x15,0x16,0x16,0x16,0x16,0x16,0x16,0x16, + 0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16, + 0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16, + 0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16, + 0x16,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x16,0x16,0x16,0x16,0x16,0x16,0x16, + 0x16,0x16,0x16,0x16,0x16,0x16,0xc8,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f, + 0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f, + 0x0f,0x0f,0x0f,0x0f,0x10,0x10,0x06,0x10,0x10,0x10,0x10,0x10,0x10,0x45,0x7d, + 0x7d,0xa9,0xbc,0xbc,0xbc,0xbc,0xa3,0xaf,0xbc,0xbc,0xbc,0x57,0x10,0x0c,0x06, + 0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10, + 0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x51,0xaf,0xaf,0x4b,0x11, + 0x06,0x06,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x12,0x12,0x12,0x12,0x12, + 0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, + 0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, + 0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, + 0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, + 0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, + 0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, + 0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13, + 0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13, + 0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13, + 0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x14,0x14, + 0x14,0x14,0x15,0x15,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14, + 0x14,0x14,0x14,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x14,0x14,0x14,0x14,0x14, + 0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14, + 0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x16,0x16,0x16,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x16,0x16,0x16,0x16,0x16, + 0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16, + 0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16, + 0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x16,0x16,0x16,0x16,0x16, + 0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16, + 0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0xc8,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f, + 0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f, + 0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x10,0x10,0x06,0x10,0x0c,0x0c,0x10,0x10,0x6a, + 0x8a,0x90,0xb5,0xbc,0xbc,0xaf,0x7d,0x32,0x77,0xbc,0xbc,0xbc,0xa3,0x10,0x10, + 0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10, + 0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x1f,0xa3, + 0xb5,0x51,0x11,0x06,0x06,0x06,0x11,0x11,0x11,0x11,0x11,0x11,0x12,0x12,0x12, + 0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, + 0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, + 0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, + 0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, + 0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, + 0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, + 0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x13,0x13,0x13,0x13,0x13,0x13,0x13, + 0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13, + 0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13, + 0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13, + 0x14,0x14,0x14,0x15,0x15,0x15,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14, + 0x14,0x14,0x14,0x14,0x14,0x15,0x15,0x15,0x15,0x15,0x15,0x14,0x14,0x14,0x14, + 0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14, + 0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x16,0x16,0x16,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x16,0x16,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x16,0x16,0x16, + 0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16, + 0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16, + 0x16,0x16,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x16,0x16,0x16,0x16, + 0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16, + 0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0xc8,0x0f,0x0f,0x0f,0x0f, + 0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f, + 0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x10,0x10,0x0c,0x0c,0x06,0x10,0x10, + 0x77,0x9c,0x8a,0xbc,0xbc,0xbc,0x8a,0x1f,0x10,0x10,0xa9,0xbc,0xbc,0xbc,0x6a, + 0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10, + 0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x06,0x10, + 0x10,0x11,0x96,0xb5,0x5e,0x11,0x11,0x06,0x11,0x11,0x11,0x11,0x11,0x11,0x12, + 0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, + 0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, + 0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, + 0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, + 0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, + 0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, + 0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x13,0x13,0x13,0x13,0x13, + 0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13, + 0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13, + 0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13, + 0x13,0x13,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14, + 0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x15,0x14,0x14,0x14,0x14,0x14,0x14,0x14, + 0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14, + 0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14, + 0x14,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x16,0x16,0x16,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x16, + 0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16, + 0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16, + 0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0xc8,0x0f,0x0f, + 0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x10,0x10,0x10, + 0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x0c,0x10, + 0x10,0x7d,0xa9,0x8a,0xbc,0xbc,0xb5,0x70,0x10,0x10,0x10,0x51,0xb5,0xbc,0xbc, + 0xaf,0x1f,0x10,0x0c,0x10,0x10,0x10,0x0f,0x0f,0x10,0x10,0x10,0x10,0x10,0x10, + 0x10,0x10,0x10,0x10,0x10,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11, + 0x0c,0x11,0x11,0x11,0x11,0x96,0xb5,0x51,0x11,0x06,0x11,0x11,0x11,0x11,0x11, + 0x11,0x11,0x12,0x11,0x11,0x11,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, + 0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, + 0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, + 0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, + 0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, + 0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, + 0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x13,0x13,0x13,0x13,0x13, + 0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13, + 0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13, + 0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x14,0x14, + 0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14, + 0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14, + 0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14, + 0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14, + 0x14,0x14,0x14,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16, + 0x16,0x16,0x16,0x16,0x15,0x15,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16, + 0x16,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16, + 0x16,0x16,0x16,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x16,0x16,0x16, + 0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x17, + 0x16,0x15,0x15,0x15,0x15,0x15,0x15,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16, + 0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0xc8, + 0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x10, + 0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x06, + 0x10,0x10,0x6a,0xaf,0x8a,0xb5,0xbc,0xbc,0x70,0x10,0x06,0x10,0x10,0x83,0xbc, + 0xbc,0xbc,0x96,0x10,0x10,0x10,0x06,0x10,0x0f,0x0f,0x0f,0x0f,0x10,0x10,0x10, + 0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11, + 0x11,0x11,0x06,0x11,0x06,0x06,0x11,0x11,0x9c,0xb5,0x38,0x11,0x11,0x11,0x11, + 0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x12,0x12,0x12,0x12,0x12,0x12,0x12, + 0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, + 0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, + 0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, + 0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, + 0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, + 0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x13,0x13,0x13,0x13, + 0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13, + 0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13, + 0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x14, + 0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14, + 0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14, + 0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14, + 0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14, + 0x14,0x14,0x14,0x14,0x14,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16, + 0x16,0x16,0x16,0x16,0x16,0x16,0x15,0x15,0x16,0x16,0x16,0x16,0x16,0x16,0x16, + 0x16,0x16,0x16,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16, + 0x16,0x16,0x16,0x16,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17, + 0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17, + 0x17,0x17,0x17,0x16,0x16,0x16,0x16,0x16,0x16,0x17,0x17,0x16,0x16,0x16,0x16, + 0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16, + 0x16,0xc8,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f, + 0x0f,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10, + 0x10,0x10,0x10,0x4b,0xb5,0x96,0xa9,0xbc,0xbc,0x8a,0x10,0x10,0x10,0x10,0x10, + 0xa3,0xbc,0xbc,0xbc,0x70,0x10,0x10,0x10,0x10,0x10,0x0f,0x0f,0x0f,0x0f,0x10, + 0x10,0x10,0x10,0x10,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11, + 0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x19,0xa9,0xa9,0x12,0x11, + 0x11,0x11,0x11,0x0c,0x11,0x10,0x10,0x11,0x11,0x11,0x11,0x11,0x12,0x12,0x12, + 0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, + 0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, + 0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, + 0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, + 0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, + 0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x13,0x13,0x13,0x13,0x13,0x13, + 0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13, + 0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13, + 0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x14,0x14, + 0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14, + 0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14, + 0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16, + 0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x15,0x15,0x16,0x17,0x17,0x16,0x16, + 0x16,0x16,0x16,0x16,0x16,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16, + 0x16,0x16,0x16,0x16,0x16,0x16,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x18,0x18,0x16,0x16, + 0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16, + 0x16,0x16,0x16,0xc8,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f, + 0x0f,0x0f,0x0f,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10, + 0x10,0x10,0x10,0x10,0x12,0xa9,0xaf,0x90,0xbc,0xbc,0xa9,0x06,0x10,0x06,0x10, + 0x10,0x38,0xb5,0xbc,0xbc,0xb5,0x4b,0x10,0x10,0x10,0x10,0x10,0x10,0x0f,0x0f, + 0x0f,0x10,0x10,0x10,0x10,0x10,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11, + 0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x4b,0xb5, + 0x83,0x11,0x06,0x06,0x11,0x11,0x11,0x10,0x10,0x11,0x11,0x11,0x11,0x11,0x12, + 0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, + 0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, + 0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, + 0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, + 0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, + 0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x13,0x13,0x13,0x13,0x13, + 0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13, + 0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13, + 0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x14, + 0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14, + 0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14, + 0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16, + 0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x15,0x15,0x16,0x17,0x17, + 0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16, + 0x16,0x16,0x16,0x16,0x16,0x15,0x15,0x16,0x16,0x16,0x16,0x16,0x17,0x17,0x17, + 0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17, + 0x17,0x17,0x17,0x18,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x18,0x18, + 0x17,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16, + 0x16,0x16,0x16,0x16,0x16,0xc8,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f, + 0x0f,0x0f,0x0f,0x0f,0x0f,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10, + 0x10,0x10,0x10,0x10,0x10,0x10,0x7d,0xbc,0x83,0xb5,0xbc,0xb5,0x51,0x10,0x10, + 0x10,0x45,0x6a,0x8a,0xbc,0xbc,0xbc,0xaf,0x25,0x10,0x10,0x10,0x10,0x10,0x10, + 0x10,0x10,0x10,0x10,0x10,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11, + 0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x06,0x06, + 0x11,0x7d,0xb5,0x32,0x11,0x06,0x06,0x0c,0x11,0x10,0x10,0x11,0x11,0x11,0x11, + 0x11,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, + 0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, + 0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, + 0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, + 0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x13, + 0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13, + 0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13, + 0x13,0x13,0x13,0x13,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14, + 0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14, + 0x14,0x14,0x15,0x15,0x15,0x15,0x15,0x15,0x14,0x14,0x14,0x14,0x14,0x14,0x14, + 0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14, + 0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16, + 0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x15,0x15,0x15,0x16, + 0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x16,0x16,0x16,0x16,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x16,0x16,0x16,0x16,0x16,0x16, + 0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x16, + 0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16, + 0x16,0x16,0x15,0x15,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16, + 0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0xc8,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f, + 0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10, + 0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x45,0xb5,0xa3,0x96,0xbc,0xbc,0x90,0x10, + 0x38,0x57,0x77,0x70,0x4b,0x7d,0xbc,0xbc,0xbc,0xa3,0x10,0x10,0x10,0x10,0x10, + 0x10,0x10,0x11,0x11,0x11,0x11,0x11,0x11,0x12,0x12,0x12,0x12,0x12,0x12,0x11, + 0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11, + 0x11,0x06,0x11,0x12,0xa9,0x90,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11, + 0x11,0x11,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, + 0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, + 0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, + 0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, + 0x12,0x12,0x12,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13, + 0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13, + 0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13, + 0x13,0x13,0x13,0x13,0x13,0x14,0x14,0x14,0x14,0x14,0x14,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x14,0x14,0x14,0x14,0x14,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x14,0x14,0x14,0x14,0x14, + 0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14, + 0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x16, + 0x16,0x16,0x16,0x16,0x16,0x16,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16, + 0x17,0x17,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x15,0x15, + 0x15,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x16,0x16,0x16,0x16,0x16,0x16,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x16,0x16,0x16,0x16, + 0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16, + 0x16,0x16,0x16,0x16,0x15,0x15,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16, + 0x16,0x16,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x16,0x16,0x16, + 0x16,0x16,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0xc8,0x0f,0x0f,0x0f,0x0f,0x0f, + 0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x10,0x10,0x10,0x10,0x10,0x10, + 0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x96,0xbc,0x7d,0xaf,0xbc,0xb5, + 0x5e,0x70,0x70,0x5e,0x25,0x10,0x10,0x90,0xbc,0xbc,0xbc,0x90,0x10,0x10,0x10, + 0x10,0x10,0x10,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x12,0x12,0x12,0x12,0x12, + 0x12,0x12,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11, + 0x11,0x11,0x11,0x06,0x11,0x11,0x5e,0xaf,0x2b,0x11,0x11,0x11,0x11,0x11,0x11, + 0x11,0x11,0x11,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, + 0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, + 0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, + 0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, + 0x12,0x12,0x12,0x12,0x12,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13, + 0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13, + 0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13, + 0x13,0x13,0x13,0x13,0x13,0x13,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x14,0x14,0x14,0x14, + 0x14,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x14,0x14,0x14, + 0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14, + 0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16, + 0x16,0x16,0x17,0x17,0x17,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16, + 0x15,0x15,0x15,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x16,0x16,0x16,0x16,0x16,0x16,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x16,0x16, + 0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x15,0x15,0x15,0x16, + 0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x17,0x17,0x17, + 0x17,0x17,0x17,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16, + 0x16,0x16,0x16,0x16,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x16, + 0x16,0x16,0x16,0x16,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0xc8,0x10,0x10,0x10, + 0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10, + 0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x4b,0xb5,0xa9,0x8a,0xbc, + 0xbc,0x9c,0x6a,0x38,0x12,0x10,0x10,0x0f,0x0f,0x9c,0xbc,0xbc,0xbc,0x83,0x10, + 0x10,0x11,0x11,0x11,0x11,0x11,0x0c,0x11,0x11,0x06,0x11,0x11,0x11,0x11,0x11, + 0x11,0x11,0x11,0x0c,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11, + 0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0xa3,0x83,0x11,0x0c,0x11,0x11, + 0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, + 0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, + 0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x13,0x13,0x13,0x12, + 0x12,0x12,0x12,0x12,0x13,0x13,0x13,0x13,0x12,0x12,0x12,0x12,0x12,0x12,0x12, + 0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13, + 0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13, + 0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13, + 0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x14,0x14,0x14,0x14,0x14,0x14,0x14, + 0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14, + 0x14,0x14,0x14,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x14, + 0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x16, + 0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16, + 0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16, + 0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16, + 0x16,0x16,0x16,0x16,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x16,0x16, + 0x16,0x16,0x16,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x16,0x16,0x16,0x16,0x16,0x16,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x17, + 0x17,0x17,0x17,0x17,0x17,0x18,0x17,0x17,0x17,0x17,0x17,0x17,0x18,0x18,0x18, + 0x18,0x18,0x19,0x18,0x18,0x18,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17, + 0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x18,0x18,0x18,0x18,0x18,0x18,0x17,0x17, + 0x17,0x17,0x17,0x17,0x16,0x16,0x16,0x17,0x17,0x17,0x17,0x17,0x17,0xc8,0x10, + 0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10, + 0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x06,0x10,0x10,0x8a,0xc2,0x9c, + 0x96,0x90,0x51,0x10,0x10,0x10,0x10,0x10,0x10,0x0f,0x0f,0xa3,0xbc,0xbc,0xbc, + 0x77,0x10,0x11,0x11,0x11,0x11,0x11,0x06,0x0c,0x11,0x06,0x11,0x11,0x11,0x11, + 0x11,0x06,0x06,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11, + 0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x6a,0xa3,0x19,0x11, + 0x11,0x11,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, + 0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, + 0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x13,0x14,0x13, + 0x13,0x13,0x13,0x12,0x12,0x13,0x13,0x13,0x14,0x13,0x12,0x12,0x12,0x12,0x12, + 0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x13,0x13,0x13,0x13,0x13,0x13, + 0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13, + 0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13, + 0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x14,0x14,0x14,0x14,0x14, + 0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14, + 0x14,0x14,0x14,0x14,0x14,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16, + 0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16, + 0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16, + 0x16,0x16,0x16,0x16,0x16,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17, + 0x17,0x16,0x16,0x16,0x16,0x16,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x16,0x16,0x16,0x16,0x16,0x16, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16, + 0x17,0x17,0x17,0x17,0x17,0x17,0x18,0x18,0x18,0x17,0x17,0x17,0x17,0x17,0x18, + 0x18,0x18,0x18,0x18,0x19,0x18,0x18,0x18,0x17,0x17,0x17,0x17,0x17,0x17,0x17, + 0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x16,0x17,0x17,0x17,0x17,0x17,0x17,0x17, + 0xc8,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10, + 0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x25,0xb5, + 0xbc,0x77,0x1f,0x10,0x10,0x10,0x10,0x06,0x10,0x10,0x10,0x0f,0x0f,0xa9,0xbc, + 0xbc,0xbc,0x6a,0x10,0x10,0x11,0x11,0x11,0x11,0x06,0x11,0x11,0x11,0x06,0x11, + 0x11,0x11,0x11,0x11,0x06,0x11,0x11,0x06,0x11,0x11,0x11,0x11,0x11,0x11,0x11, + 0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x0c,0xa3, + 0x57,0x11,0x06,0x11,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, + 0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, + 0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x13, + 0x14,0x14,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x14,0x14,0x14,0x12,0x12,0x12, + 0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x13,0x13,0x13,0x13, + 0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13, + 0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13, + 0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x14,0x14,0x14, + 0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14, + 0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16, + 0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16, + 0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16, + 0x16,0x16,0x16,0x16,0x16,0x16,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17, + 0x17,0x17,0x17,0x17,0x16,0x16,0x16,0x16,0x16,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x16,0x16,0x16,0x16, + 0x16,0x16,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16, + 0x16,0x16,0x17,0x17,0x17,0x17,0x18,0x18,0x18,0x18,0x17,0x17,0x17,0x17,0x17, + 0x17,0x17,0x17,0x17,0x17,0x18,0x18,0x17,0x17,0x17,0x16,0x16,0x16,0x16,0x17, + 0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x18,0x18,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x18,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17, + 0x17,0x17,0xc8,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10, + 0x10,0x10,0x11,0x11,0x11,0x11,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x06,0x10, + 0x70,0xbc,0xa9,0x10,0x10,0x10,0x06,0x10,0x0c,0x0c,0x10,0x10,0x10,0x0c,0x57, + 0xaf,0xbc,0xbc,0xbc,0x57,0x0f,0x10,0x10,0x10,0x11,0x11,0x11,0x06,0x11,0x11, + 0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x06,0x11,0x11,0x11,0x11,0x11,0x11,0x11, + 0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11, + 0x11,0x83,0x8a,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, + 0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, + 0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, + 0x12,0x13,0x13,0x13,0x13,0x12,0x12,0x12,0x12,0x12,0x12,0x13,0x13,0x13,0x12, + 0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x13,0x13, + 0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13, + 0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13, + 0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14, + 0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14, + 0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x15, + 0x15,0x16,0x16,0x16,0x16,0x17,0x17,0x17,0x17,0x16,0x16,0x16,0x16,0x16,0x16, + 0x15,0x15,0x15,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16, + 0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16, + 0x16,0x16,0x16,0x16,0x16,0x17,0x17,0x17,0x17,0x17,0x18,0x18,0x17,0x17,0x16, + 0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16, + 0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16, + 0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16, + 0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16, + 0x16,0x16,0x16,0x16,0x17,0x17,0x17,0x17,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x17,0x17,0x17,0x17,0x18,0x18,0x18,0x17,0x18,0x17,0x16,0x16, + 0x17,0x18,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x18,0x18,0x18,0x17, + 0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x16,0x16,0x16,0x16,0x16,0x16, + 0x16,0x16,0x16,0x16,0xc8,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10, + 0x10,0x10,0x10,0x10,0x11,0x11,0x11,0x11,0x11,0x10,0x10,0x10,0x10,0x10,0x10, + 0x10,0x10,0x9c,0xc2,0x83,0x10,0x06,0x10,0x10,0x10,0x10,0x10,0x12,0x4b,0x5e, + 0x77,0x70,0xaf,0xbc,0xbc,0xbc,0x57,0x0f,0x10,0x10,0x10,0x10,0x11,0x11,0x06, + 0x77,0x90,0x90,0x90,0x90,0x90,0x90,0x8a,0x3e,0x11,0x11,0x4b,0x5e,0x4b,0x3e, + 0x2b,0x0c,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11, + 0x11,0x11,0x11,0x51,0xa3,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, + 0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, + 0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, + 0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, + 0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, + 0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13, + 0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13, + 0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x14,0x15,0x14,0x14,0x14,0x14, + 0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14, + 0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16, + 0x16,0x16,0x16,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x16,0x16,0x16, + 0x16,0x16,0x15,0x15,0x15,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16, + 0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16, + 0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x17,0x17,0x17,0x17,0x17,0x18,0x18,0x18, + 0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16, + 0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16, + 0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16, + 0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16, + 0x16,0x16,0x16,0x16,0x16,0x16,0x17,0x17,0x17,0x17,0x17,0x18,0x18,0x18,0x19, + 0x19,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x17,0x17,0x18,0x18,0x18,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x18,0x18, + 0x18,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x16,0x16,0x16,0x16, + 0x16,0x16,0x16,0x16,0x16,0x16,0xc8,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10, + 0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10, + 0x10,0x10,0x10,0x32,0xaf,0xbc,0x57,0x10,0x10,0x10,0x10,0x25,0x45,0x70,0x77, + 0x6a,0x51,0x0c,0x2b,0xaf,0xbc,0xbc,0xbc,0x57,0x10,0x10,0x11,0x11,0x11,0x11, + 0x11,0x11,0xa3,0xbc,0xbc,0xbc,0xbc,0xbc,0xbc,0xbc,0x57,0x11,0x11,0x8a,0xbc, + 0xbc,0xb5,0xaf,0xa9,0xa3,0x90,0x2b,0x12,0x0c,0x19,0x11,0x11,0x11,0x11,0x11, + 0x06,0x0c,0x11,0x11,0x12,0x12,0x9c,0x57,0x12,0x12,0x12,0x12,0x12,0x12,0x12, + 0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, + 0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, + 0x12,0x12,0x12,0x13,0x13,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, + 0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, + 0x12,0x12,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13, + 0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13, + 0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x14,0x15,0x14,0x14, + 0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14, + 0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x16,0x16,0x16,0x16,0x16,0x16, + 0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x17, + 0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x16, + 0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16, + 0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16, + 0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x17,0x17, + 0x17,0x17,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16, + 0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16, + 0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16, + 0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16, + 0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x17,0x18,0x17,0x17,0x17,0x18,0x18, + 0x18,0x19,0x19,0x18,0x18,0x18,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x17,0x17,0x17,0x17,0x17,0x17, + 0x17,0x17,0x17,0x18,0x18,0x18,0x18,0x18,0x18,0x17,0x17,0x17,0x17,0x17,0x16, + 0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0xc8,0x10,0x10,0x10,0x10,0x10,0x10, + 0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10, + 0x10,0x10,0x10,0x0c,0x10,0x57,0xbc,0xaf,0x1f,0x10,0x12,0x57,0x70,0x70,0x70, + 0x3e,0x2b,0x10,0x10,0x0f,0x32,0xaf,0xbc,0xbc,0xbc,0x57,0x10,0x11,0x11,0x11, + 0x11,0x11,0x11,0x11,0xa3,0xbc,0xbc,0xbc,0xbc,0xbc,0xbc,0xb5,0x57,0x11,0x11, + 0x8a,0xbc,0xbc,0xbc,0xbc,0xbc,0xbc,0xbc,0x4b,0x12,0x38,0xa3,0xa3,0x8a,0x70, + 0x3e,0x06,0x11,0x11,0x11,0x12,0x06,0x12,0x83,0x7d,0x12,0x12,0x12,0x12,0x12, + 0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, + 0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, + 0x12,0x12,0x12,0x12,0x12,0x13,0x13,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, + 0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, + 0x12,0x12,0x12,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13, + 0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13, + 0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x14,0x15, + 0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14, + 0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14, + 0x14,0x14,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x16,0x16,0x16,0x16, + 0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16, + 0x16,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17, + 0x17,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16, + 0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16, + 0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16, + 0x16,0x17,0x17,0x17,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16, + 0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16, + 0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16, + 0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16, + 0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x18,0x18,0x17,0x17,0x17, + 0x18,0x18,0x18,0x18,0x19,0x18,0x18,0x18,0x18,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x17,0x17,0x17, + 0x17,0x17,0x17,0x17,0x17,0x18,0x18,0x18,0x18,0x18,0x18,0x17,0x17,0x17,0x17, + 0x17,0x17,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0xc8,0x10,0x10,0x10,0x10, + 0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10, + 0x10,0x10,0x10,0x10,0x10,0x06,0x10,0x83,0xbc,0xa3,0x4b,0x6a,0x77,0x5e,0x51, + 0x12,0x10,0x10,0x10,0x06,0x11,0x10,0x32,0xaf,0xbc,0xbc,0xbc,0x57,0x11,0x11, + 0x11,0x12,0x12,0x12,0x12,0x12,0xa3,0xbc,0xbc,0xbc,0xbc,0xbc,0xbc,0xbc,0x57, + 0x12,0x12,0x90,0xbc,0xbc,0xbc,0xbc,0xbc,0xbc,0xb5,0x4b,0x12,0x32,0xb5,0xbc, + 0xbc,0xbc,0xb5,0x6a,0x12,0x25,0x38,0x12,0x12,0x12,0x6a,0x90,0x12,0x12,0x12, + 0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, + 0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, + 0x12,0x12,0x12,0x12,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13, + 0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13, + 0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13, + 0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13, + 0x13,0x13,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14, + 0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14, + 0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14, + 0x14,0x14,0x14,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x16,0x16, + 0x16,0x17,0x17,0x17,0x17,0x17,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16, + 0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x18,0x18,0x17,0x17, + 0x17,0x17,0x17,0x17,0x17,0x17,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16, + 0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16, + 0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16, + 0x16,0x16,0x16,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17, + 0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17, + 0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17, + 0x17,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16, + 0x16,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x16,0x16,0x17,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x17,0x17,0x17,0x18,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x19,0x18,0x18,0x18,0x18,0x18, + 0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x18,0x18,0x18,0x18,0x18,0x17,0x17,0x17, + 0x17,0x17,0x17,0x17,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0xc8,0x10,0x10, + 0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x0f,0x0f,0x0f, + 0x0f,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x9c,0xbc,0x9c,0x5e,0x45,0x06, + 0x10,0x11,0x11,0x11,0x11,0x0c,0x11,0x11,0x10,0x25,0xaf,0xbc,0xbc,0xbc,0x57, + 0x11,0x11,0x12,0x12,0x12,0x12,0x12,0x12,0x8a,0xa3,0xa3,0x96,0x96,0x96,0x96, + 0x90,0x3e,0x12,0x12,0x6a,0x9c,0xa3,0xaf,0xaf,0xb5,0xbc,0xb5,0x4b,0x12,0x38, + 0xb5,0xbc,0xbc,0xbc,0xbc,0x77,0x12,0x57,0xaf,0xa3,0x70,0x2b,0x45,0x90,0x19, + 0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, + 0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, + 0x12,0x12,0x12,0x12,0x12,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13, + 0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13, + 0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13, + 0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13, + 0x13,0x13,0x13,0x13,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14, + 0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14, + 0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14, + 0x14,0x14,0x14,0x14,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16, + 0x16,0x16,0x16,0x16,0x16,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x16, + 0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16, + 0x16,0x16,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17, + 0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17, + 0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17, + 0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x16,0x16,0x16,0x16,0x16,0x16, + 0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17, + 0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17, + 0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17, + 0x17,0x17,0x17,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16, + 0x16,0x16,0x16,0x17,0x17,0x17,0x18,0x18,0x18,0x17,0x17,0x17,0x16,0x16,0x17, + 0x18,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x16,0x17,0x17,0x17, + 0x17,0x17,0x17,0x17,0x17,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x18,0x18,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17, + 0x17,0x17,0x17,0x16,0x16,0x16,0x16,0x16,0x17,0x17,0x17,0x17,0x17,0x17,0xc8, + 0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x0f, + 0x0f,0x0f,0x0f,0x0f,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0xaf,0xbc,0x6a,0x10, + 0x10,0x10,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x0c,0x25,0x6a,0xaf,0xbc,0xbc, + 0xbc,0x6a,0x11,0x12,0x12,0x12,0x12,0x12,0x12,0x0c,0x12,0x12,0x12,0x12,0x12, + 0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x19,0x1f,0x2b,0x4b,0x57,0x19, + 0x12,0x25,0xa3,0xbc,0xbc,0xbc,0xbc,0x77,0x12,0x57,0xbc,0xbc,0xbc,0x7d,0x12, + 0x90,0x38,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, + 0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, + 0x12,0x12,0x12,0x12,0x12,0x12,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13, + 0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13, + 0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13, + 0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13, + 0x13,0x13,0x13,0x13,0x13,0x13,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14, + 0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14, + 0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14, + 0x14,0x14,0x14,0x14,0x14,0x14,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16, + 0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16, + 0x16,0x16,0x16,0x16,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17, + 0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17, + 0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17, + 0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x16,0x16,0x16, + 0x16,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17, + 0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17, + 0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17, + 0x17,0x17,0x17,0x17,0x17,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16, + 0x16,0x16,0x16,0x16,0x16,0x17,0x17,0x17,0x18,0x18,0x18,0x17,0x17,0x17,0x17, + 0x16,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x16,0x16, + 0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x18,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17, + 0x17,0x17,0x17,0x17,0x16,0x16,0x16,0x16,0x16,0x17,0x17,0x17,0x17,0x17,0x17, + 0x17,0xc8,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10, + 0x10,0x0f,0x0f,0x0f,0x0f,0x0f,0x10,0x10,0x10,0x10,0x10,0x10,0x38,0xb5,0xbc, + 0x45,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x32,0x51,0x5e,0x77,0x70,0x57,0xa9, + 0xbc,0xbc,0xbc,0x77,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, + 0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, + 0x12,0x12,0x12,0x12,0x1f,0x4b,0x77,0x96,0xaf,0x70,0x12,0x57,0xbc,0xbc,0xbc, + 0x77,0x12,0x90,0x4b,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, + 0x12,0x12,0x12,0x12,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13, + 0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13, + 0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13, + 0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13, + 0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x14,0x14,0x14,0x14,0x14, + 0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14, + 0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14, + 0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14, + 0x14,0x14,0x14,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16, + 0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16, + 0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x17,0x17,0x17, + 0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17, + 0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17, + 0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17, + 0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x18,0x18,0x18,0x17,0x17,0x17, + 0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x18,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x18,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17, + 0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x18,0x17,0x17, + 0x16,0x17,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x19,0x19, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x17,0x17, + 0x17,0x17,0x17,0x17,0x17,0x17,0x16,0x16,0x16,0x16,0x16,0x17,0x18,0x18,0x18, + 0x18,0x18,0x18,0xc8,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10, + 0x10,0x10,0x10,0x0f,0x0f,0x0f,0x0f,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x51, + 0xb5,0xb5,0x1f,0x11,0x11,0x11,0x2b,0x3e,0x6a,0x70,0x6a,0x6a,0x51,0x12,0x11, + 0x11,0xa3,0xbc,0xbc,0xbc,0x7d,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, + 0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, + 0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x19,0x12,0x45,0xaf, + 0xbc,0xbc,0x70,0x12,0x83,0x57,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, + 0x12,0x12,0x12,0x12,0x12,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13, + 0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13, + 0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13, + 0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13, + 0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x14,0x14,0x14,0x14, + 0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14, + 0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14, + 0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14, + 0x14,0x14,0x14,0x14,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x16,0x16,0x16,0x16,0x16,0x16,0x16, + 0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16, + 0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16, + 0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17, + 0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17, + 0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17, + 0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x18,0x18,0x18,0x17, + 0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x18,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x17,0x17,0x17,0x17,0x17,0x17, + 0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x18,0x18,0x18,0x18,0x18, + 0x18,0x18,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x18,0x18, + 0x18,0x17,0x16,0x17,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x19,0x19,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x16,0x16,0x16,0x16,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0xc8,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10, + 0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10, + 0x10,0x6a,0xbc,0xa9,0x12,0x3e,0x6a,0x70,0x70,0x70,0x4b,0x32,0x12,0x11,0x11, + 0x11,0x06,0x11,0x9c,0xbc,0xbc,0xbc,0x8a,0x12,0x12,0x12,0x12,0x12,0x11,0x11, + 0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, + 0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x06,0x12,0x13,0x13,0x12,0x12, + 0x12,0x25,0x70,0x9c,0x51,0x12,0x70,0x5e,0x12,0x13,0x13,0x13,0x13,0x13,0x13, + 0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13, + 0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13, + 0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13, + 0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13, + 0x13,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14, + 0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14, + 0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14, + 0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x16,0x16,0x16,0x16,0x16, + 0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x16,0x16,0x16,0x16, + 0x16,0x16,0x16,0x16,0x16,0x17,0x17,0x17,0x17,0x17,0x16,0x16,0x16,0x16,0x16, + 0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x17,0x17,0x17,0x17,0x17,0x17,0x17, + 0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17, + 0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17, + 0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17, + 0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x18, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x17,0x17,0x17,0x17, + 0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x18,0x18,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x17,0x17,0x17,0x17,0x17,0x18,0x18,0x18, + 0x18,0x18,0x18,0x18,0x17,0x17,0x17,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x17,0x17,0x17,0x17,0x17, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0xc8,0x10,0x10,0x10,0x10,0x10,0x10,0x10, + 0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10, + 0x10,0x10,0x10,0x70,0xbc,0xa9,0x77,0x6a,0x51,0x45,0x11,0x11,0x11,0x11,0x11, + 0x11,0x11,0x06,0x06,0x11,0x90,0xbc,0xbc,0xbc,0x96,0x12,0x12,0x12,0x12,0x12, + 0x11,0x11,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, + 0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x13,0x06, + 0x06,0x06,0x13,0x12,0x12,0x12,0x12,0x12,0x5e,0x70,0x12,0x13,0x13,0x13,0x13, + 0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x14,0x14,0x14,0x14,0x14, + 0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x13,0x13,0x13, + 0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13, + 0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13, + 0x13,0x13,0x13,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14, + 0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14, + 0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14, + 0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16, + 0x16,0x16,0x16,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x16,0x16,0x16, + 0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16, + 0x16,0x16,0x16,0x16,0x16,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x16,0x16, + 0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x17,0x17,0x17,0x17,0x16,0x16,0x16,0x16, + 0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x17,0x17,0x17,0x17,0x17, + 0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17, + 0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17, + 0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17, + 0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17, + 0x17,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x18,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17, + 0x17,0x17,0x17,0x17,0x17,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x17, + 0x17,0x17,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0xc8,0x10,0x10,0x10,0x10,0x10, + 0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10, + 0x10,0x10,0x10,0x10,0x10,0x7d,0xc2,0x96,0x0c,0x11,0x11,0x11,0x06,0x06,0x11, + 0x11,0x11,0x06,0x11,0x06,0x11,0x11,0x77,0xbc,0xbc,0xbc,0xa3,0x12,0x12,0x12, + 0x12,0x12,0x11,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, + 0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x06,0x12,0x12,0x12,0x12,0x12, + 0x13,0x13,0x0c,0x06,0x13,0x12,0x12,0x12,0x12,0x12,0x57,0x70,0x12,0x13,0x13, + 0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x14,0x14,0x14,0x14, + 0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14, + 0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13, + 0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13, + 0x13,0x13,0x13,0x13,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14, + 0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14, + 0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14, + 0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16, + 0x16,0x16,0x16,0x16,0x16,0x16,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x16, + 0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16, + 0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16, + 0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x17,0x17,0x17, + 0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17, + 0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17, + 0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17, + 0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17, + 0x17,0x17,0x17,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x17,0x17,0x17,0x17,0x17,0x17,0x17, + 0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x18,0x17,0x17,0x17,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0xc8,0x10,0x10,0x10, + 0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x11,0x11,0x11,0x11, + 0x11,0x10,0x10,0x10,0x10,0x10,0x10,0x7d,0xc2,0x7d,0x12,0x12,0x12,0x12,0x0c, + 0x06,0x06,0x11,0x11,0x11,0x11,0x11,0x0c,0x2b,0x83,0xbc,0xbc,0xbc,0xaf,0x7d, + 0x7d,0x8a,0x96,0x96,0x96,0x96,0xa3,0xa3,0xa3,0xa3,0xa3,0x96,0x90,0x96,0x96, + 0x90,0x83,0x83,0x77,0x70,0x5e,0x51,0x38,0x12,0x12,0x12,0x12,0x12,0x12,0x12, + 0x12,0x12,0x13,0x13,0x13,0x0c,0x13,0x12,0x12,0x12,0x12,0x12,0x57,0x70,0x12, + 0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x14,0x14, + 0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x15,0x15,0x14, + 0x14,0x14,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13, + 0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13, + 0x13,0x13,0x13,0x13,0x13,0x13,0x14,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14, + 0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14, + 0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x16,0x16,0x16,0x16,0x16,0x16, + 0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16, + 0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x16,0x16,0x16,0x16,0x16,0x16,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x17, + 0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x18,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x17,0x17,0x17,0x17,0x17, + 0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17, + 0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17, + 0x17,0x17,0x17,0x17,0x17,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x19,0x19,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x19,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x17,0x17,0x16,0x17,0x18,0x18,0x18, + 0x18,0x18,0x18,0x18,0x17,0x17,0x17,0x17,0x17,0x18,0x19,0x19,0x19,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x18,0x17,0x17,0x17,0x17,0x17,0x18,0x19,0x19,0x19,0x19,0x19,0x19,0xc8,0x10, + 0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x11,0x11, + 0x11,0x11,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x7d,0xc2,0x7d,0x12,0x06,0x06, + 0x12,0x12,0x12,0x11,0x11,0x2b,0x4b,0x51,0x6a,0x77,0x70,0x51,0x57,0xa3,0xbc, + 0xbc,0xbc,0xbc,0xbc,0xbc,0xbc,0xbc,0xc2,0xc2,0xbc,0xc2,0xc2,0xc2,0xc2,0xbc, + 0xbc,0xbc,0xbc,0xbc,0xbc,0xbc,0xbc,0xbc,0xbc,0xb5,0xb5,0xaf,0xa3,0x96,0x7d, + 0x5e,0x4b,0x2b,0x12,0x13,0x13,0x13,0x13,0x13,0x06,0x06,0x12,0x12,0x12,0x51, + 0x5e,0x12,0x12,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13, + 0x13,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14, + 0x14,0x14,0x14,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13, + 0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x14,0x14,0x14,0x13,0x13,0x13,0x13,0x13, + 0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x14,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14, + 0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14, + 0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x16,0x16,0x16,0x16, + 0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16, + 0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x16,0x16,0x16,0x16,0x16,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16, + 0x16,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x18, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x17,0x17,0x17, + 0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17, + 0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17, + 0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x18,0x18,0x19,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x19, + 0x19,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x17,0x17,0x16,0x17,0x18, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x19,0x19,0x19, + 0x18,0x18,0x18,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x18,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x17,0x17,0x17,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0xc8,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x11,0x11,0x11,0x11,0x11, + 0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x11,0x11,0x11,0x7d,0xc2,0x7d,0x12, + 0x12,0x12,0x1f,0x32,0x4b,0x70,0x70,0x6a,0x5e,0x5e,0x38,0x0c,0x11,0x11,0x11, + 0x8a,0xbc,0xbc,0xbc,0xb5,0xaf,0xaf,0xa3,0xa3,0x96,0x90,0x90,0x83,0x7d,0x7d, + 0x83,0x77,0x70,0x70,0x70,0x70,0x70,0x7d,0x83,0x83,0x83,0x90,0x96,0x9c,0xa3, + 0xa9,0xaf,0xb5,0xb5,0xa9,0xa3,0x90,0x77,0x51,0x32,0x12,0x12,0x12,0x12,0x06, + 0x12,0x51,0x51,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, + 0x12,0x12,0x12,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13, + 0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14, + 0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x15,0x15,0x15,0x14,0x14,0x14, + 0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x14,0x14,0x14,0x14,0x14,0x14, + 0x14,0x14,0x14,0x14,0x15,0x15,0x15,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x16,0x16,0x16,0x16,0x16,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16, + 0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16, + 0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16, + 0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16, + 0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x15,0x15,0x15,0x15, + 0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16, + 0x17,0x17,0x17,0x16,0x16,0x17,0x17,0x17,0x17,0x17,0x17,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x17, + 0x17,0x17,0x17,0x17,0x17,0x17,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x19,0x19,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x18,0x18,0x19,0x19,0x18,0x18,0x18,0x18,0x18,0x18,0x17,0x17,0x17,0x17,0x17, + 0x18,0x18,0x18,0x18,0x18,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x1a,0x1a,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x18,0x18,0x18,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0xc8,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x11,0x11, + 0x11,0x11,0x10,0x10,0x10,0x10,0x10,0x11,0x11,0x11,0x11,0x11,0x11,0x70,0xbc, + 0x90,0x45,0x64,0x6a,0x6a,0x70,0x6a,0x3e,0x32,0x19,0x12,0x12,0x12,0x06,0x11, + 0x06,0x11,0x4b,0x7d,0x6a,0x51,0x2b,0x25,0x19,0x0c,0x11,0x11,0x12,0x12,0x12, + 0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, + 0x12,0x12,0x12,0x19,0x25,0x38,0x57,0x77,0x8a,0x90,0x9c,0x96,0x8a,0x77,0x57, + 0x12,0x06,0x12,0x4b,0x2b,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, + 0x12,0x12,0x12,0x12,0x12,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13, + 0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x14,0x14,0x14,0x14,0x14,0x14, + 0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x14,0x14,0x14,0x14, + 0x14,0x14,0x14,0x14,0x14,0x14,0x15,0x15,0x15,0x14,0x14,0x14,0x14,0x14,0x14, + 0x14,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x16,0x15,0x16,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16, + 0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16, + 0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16, + 0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x17,0x16,0x16,0x16,0x16, + 0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16, + 0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16, + 0x16,0x16,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x18,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x19, + 0x19,0x19,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x17,0x17,0x17,0x18,0x18,0x18,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x18,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0xc8,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10, + 0x11,0x11,0x11,0x11,0x10,0x10,0x10,0x10,0x10,0x11,0x11,0x11,0x11,0x11,0x11, + 0x5e,0xbc,0xaf,0x5e,0x4b,0x4b,0x19,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, + 0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x12,0x12, + 0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, + 0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x2b,0x51, + 0x5e,0x6a,0x6a,0x2b,0x12,0x19,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, + 0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13, + 0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x14,0x14,0x14,0x14, + 0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x14,0x14, + 0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x15,0x15,0x15,0x14,0x14,0x14,0x14, + 0x14,0x14,0x14,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16, + 0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16, + 0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16, + 0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x17,0x17,0x16, + 0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16, + 0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16, + 0x16,0x16,0x16,0x16,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x18,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x18,0x19,0x19,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x17,0x18,0x18,0x18,0x18,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0xc8,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10, + 0x10,0x10,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11, + 0x11,0x11,0x38,0xb5,0xb5,0x2b,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, + 0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, + 0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, + 0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, + 0x12,0x12,0x12,0x12,0x12,0x12,0x06,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, + 0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x13,0x13,0x13,0x13,0x13,0x13, + 0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x14,0x14, + 0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x14,0x14,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x14,0x14, + 0x14,0x14,0x14,0x14,0x14,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x16,0x16,0x16,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x16,0x16,0x16,0x16,0x16,0x16, + 0x16,0x16,0x16,0x16,0x16,0x16,0x15,0x15,0x15,0x15,0x15,0x16,0x16,0x16,0x16, + 0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x17, + 0x17,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x17, + 0x17,0x17,0x17,0x17,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16, + 0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16, + 0x16,0x16,0x16,0x16,0x16,0x16,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17, + 0x17,0x17,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x18,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x18,0x18,0x18,0x18,0x18,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0xc8,0x10,0x10,0x10,0x10,0x10,0x10, + 0x10,0x10,0x10,0x10,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11, + 0x11,0x11,0x11,0x06,0x11,0xa9,0xbc,0x70,0x12,0x12,0x12,0x12,0x0c,0x12,0x12, + 0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, + 0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, + 0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, + 0x12,0x12,0x12,0x06,0x06,0x12,0x12,0x12,0x06,0x12,0x12,0x12,0x12,0x12,0x12, + 0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x13,0x13,0x13,0x13, + 0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13, + 0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14, + 0x14,0x14,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x14,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x16,0x16,0x16,0x16,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x16,0x16,0x16,0x16, + 0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x15,0x15,0x15,0x15,0x15,0x16,0x16, + 0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16, + 0x16,0x17,0x17,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16, + 0x16,0x17,0x17,0x17,0x17,0x17,0x17,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16, + 0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16, + 0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x17,0x17,0x17,0x17,0x17,0x17,0x17, + 0x17,0x17,0x17,0x17,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x18, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x18,0x18,0x18,0x18,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0xc8,0x10,0x10,0x10,0x10, + 0x10,0x10,0x10,0x10,0x10,0x10,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11, + 0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x83,0xc2,0xa3,0x12,0x12,0x12,0x12,0x12, + 0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, + 0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x13,0x13,0x12,0x12, + 0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, + 0x12,0x13,0x13,0x12,0x12,0x12,0x12,0x12,0x06,0x0c,0x12,0x0c,0x12,0x13,0x12, + 0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x13,0x13, + 0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13, + 0x13,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14, + 0x14,0x14,0x14,0x14,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16, + 0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16, + 0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x15,0x15, + 0x15,0x15,0x15,0x16,0x16,0x16,0x16,0x17,0x16,0x16,0x16,0x16,0x16,0x17,0x17, + 0x17,0x17,0x17,0x17,0x17,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16, + 0x16,0x16,0x16,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x16,0x16,0x16,0x16,0x16, + 0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16, + 0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x17,0x17,0x17,0x17,0x17, + 0x17,0x17,0x17,0x17,0x17,0x17,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x17,0x17,0x17,0x17,0x17,0x18, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0xc8,0x10,0x10, + 0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11, + 0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x4b,0xb5,0xbc,0x5e,0x12,0x12, + 0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, + 0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x13,0x13,0x12, + 0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, + 0x12,0x12,0x13,0x13,0x13,0x06,0x13,0x13,0x06,0x12,0x12,0x06,0x13,0x13,0x13, + 0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13, + 0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x14,0x14, + 0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14, + 0x14,0x14,0x14,0x14,0x14,0x14,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x14,0x14,0x14,0x14,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x17, + 0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16, + 0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x17,0x16,0x16,0x16, + 0x16,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x16,0x17,0x17,0x17,0x17,0x17,0x17, + 0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x16,0x16,0x16,0x16,0x16,0x16,0x16, + 0x16,0x16,0x16,0x16,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17, + 0x17,0x17,0x17,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16, + 0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17, + 0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x19,0x19, + 0x19,0x19,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x19,0x19,0x19,0x19,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x18,0x18,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0xc8, + 0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x11,0x11,0x11,0x11,0x11,0x11, + 0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x06,0x11,0x11,0x96,0xc2,0xa9, + 0x12,0x12,0x06,0x0c,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, + 0x12,0x12,0x12,0x12,0x19,0x45,0x3e,0x4b,0x5e,0x5e,0x5e,0x5e,0x5e,0x6a,0x77, + 0x77,0x77,0x77,0x77,0x77,0x70,0x5e,0x5e,0x5e,0x5e,0x5e,0x4b,0x45,0x45,0x1f, + 0x0c,0x0c,0x0c,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x12,0x12,0x12,0x06,0x13, + 0x13,0x06,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13, + 0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13, + 0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14, + 0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x14,0x14,0x14,0x14,0x14, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x16,0x16,0x16,0x16,0x16,0x16, + 0x16,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x16,0x16,0x16,0x16,0x16,0x16, + 0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x17,0x17,0x16, + 0x16,0x16,0x16,0x16,0x15,0x15,0x15,0x15,0x15,0x15,0x16,0x17,0x17,0x17,0x17, + 0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x16,0x16,0x16,0x16, + 0x16,0x16,0x16,0x16,0x16,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17, + 0x17,0x17,0x17,0x17,0x17,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16, + 0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x17,0x17,0x17,0x17,0x17,0x17,0x17, + 0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x18,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x19,0x19,0x19,0x19,0x19,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x18,0x19,0x19,0x19,0x19,0x19,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x18,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0xc8,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x12, + 0x12,0x12,0x12,0x12,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x06,0x11,0x45, + 0xb5,0xbc,0x83,0x12,0x12,0x12,0x12,0x12,0x2b,0x3e,0x4b,0x57,0x6a,0x7d,0x8a, + 0x96,0x9c,0xa9,0xa9,0xaf,0xa9,0xa9,0xa9,0xa9,0xa3,0xa9,0xa3,0x96,0x9c,0x96, + 0x8a,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x8a,0x8a,0x8a,0x8a,0x83,0x8a,0x90, + 0x90,0x8a,0x9c,0x90,0x8a,0x83,0x7d,0x70,0x6a,0x57,0x57,0x51,0x3e,0x1f,0x13, + 0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13, + 0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13, + 0x13,0x13,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14, + 0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x14,0x14,0x14, + 0x14,0x14,0x14,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x16,0x16,0x16,0x16, + 0x16,0x16,0x16,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x16,0x16,0x16,0x16,0x16, + 0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x17,0x17,0x17,0x17, + 0x17,0x17,0x17,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x17,0x17, + 0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x18,0x18,0x18,0x17,0x17,0x17,0x17, + 0x17,0x16,0x16,0x16,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17, + 0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16, + 0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17, + 0x17,0x17,0x17,0x17,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x19,0x19,0x19,0x19,0x19, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x18,0x18, + 0x18,0x18,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0xc8,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11, + 0x11,0x12,0x12,0x12,0x12,0x12,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11, + 0x06,0x12,0x70,0xbc,0xbc,0x83,0x83,0x96,0xa3,0xa9,0xaf,0xb5,0xb5,0xbc,0xbc, + 0xb5,0xaf,0xa3,0x9c,0x8a,0x7d,0x77,0x6a,0x5e,0x45,0x3e,0x06,0x12,0x12,0x12, + 0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, + 0x12,0x12,0x12,0x12,0x12,0x0c,0x25,0x45,0x4b,0x5e,0x5e,0x77,0x70,0x6a,0x6a, + 0x6a,0x6a,0x6a,0x5e,0x45,0x1f,0x13,0x13,0x0c,0x0c,0x13,0x13,0x13,0x13,0x13, + 0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13, + 0x13,0x13,0x13,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14, + 0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x14, + 0x14,0x14,0x14,0x14,0x14,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x16,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x16,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x16, + 0x16,0x16,0x16,0x16,0x16,0x17,0x17,0x17,0x17,0x17,0x17,0x16,0x16,0x16,0x16, + 0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x17,0x17, + 0x17,0x17,0x17,0x17,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x17, + 0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x18,0x18,0x18,0x18,0x17,0x17, + 0x17,0x17,0x17,0x16,0x16,0x16,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17, + 0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x16,0x16,0x16,0x16,0x16, + 0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x17,0x17,0x17,0x17,0x17,0x17, + 0x17,0x17,0x17,0x17,0x17,0x17,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x19,0x19,0x19, + 0x19,0x19,0x19,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x18,0x18,0x18,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0xc8,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11, + 0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, + 0x11,0x06,0x0c,0x0c,0x12,0x96,0xbc,0xbc,0xbc,0xbc,0xbc,0xaf,0xa3,0x96,0x7d, + 0x6a,0x45,0x25,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x06, + 0x06,0x12,0x12,0x12,0x12,0x06,0x12,0x12,0x12,0x12,0x0c,0x12,0x12,0x12,0x12, + 0x12,0x12,0x06,0x06,0x06,0x0c,0x0c,0x06,0x13,0x13,0x13,0x13,0x13,0x13,0x13, + 0x13,0x06,0x1f,0x2b,0x2b,0x2b,0x45,0x4b,0x12,0x13,0x13,0x13,0x13,0x13,0x13, + 0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x14,0x14,0x14,0x14,0x14,0x14,0x14, + 0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14, + 0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x14,0x14,0x14,0x14,0x14,0x14,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x16,0x16,0x16,0x16,0x16, + 0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16, + 0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16, + 0x17,0x17,0x17,0x17,0x17,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x17,0x17, + 0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x18,0x18,0x18,0x18,0x18, + 0x18,0x18,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x18,0x18,0x17,0x17, + 0x17,0x17,0x17,0x17,0x17,0x17,0x18,0x18,0x18,0x18,0x18,0x17,0x17,0x17,0x17, + 0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17, + 0x18,0x18,0x18,0x18,0x18,0x18,0x17,0x17,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x18,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x18,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0xc8,0x12,0x12,0x12,0x12,0x12,0x12,0x12, + 0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, + 0x12,0x12,0x12,0x0c,0x06,0x0c,0x12,0x8a,0xbc,0xbc,0x90,0x5e,0x4b,0x2b,0x12, + 0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, + 0x12,0x12,0x06,0x06,0x12,0x06,0x06,0x0c,0x12,0x12,0x12,0x12,0x0c,0x12,0x06, + 0x06,0x13,0x13,0x06,0x13,0x06,0x13,0x06,0x06,0x13,0x13,0x13,0x13,0x13,0x13, + 0x06,0x06,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13, + 0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x14,0x14,0x14,0x14,0x14, + 0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14, + 0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14, + 0x14,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x14,0x14,0x14,0x14,0x14,0x14,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x16,0x16,0x16, + 0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16, + 0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16, + 0x16,0x16,0x17,0x17,0x17,0x17,0x16,0x16,0x16,0x16,0x16,0x16,0x17,0x17,0x17, + 0x17,0x17,0x18,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x18,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x18,0x18,0x18, + 0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x18,0x18,0x18,0x18,0x19,0x18,0x18, + 0x18,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x18,0x18,0x17,0x17,0x17,0x17, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x18,0x18,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x1a,0x1a, + 0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0xc8,0x12,0x12,0x12,0x12,0x12, + 0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, + 0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x90,0xbc,0xb5,0x3e,0x12,0x12, + 0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, + 0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, + 0x12,0x12,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13, + 0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13, + 0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x14,0x14,0x14,0x14, + 0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14, + 0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14, + 0x14,0x14,0x14,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x14,0x14,0x14,0x14,0x14,0x14,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16, + 0x16,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x16, + 0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x16,0x16,0x16,0x16,0x16,0x16, + 0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16, + 0x16,0x16,0x16,0x16,0x17,0x17,0x17,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x17, + 0x17,0x17,0x17,0x17,0x18,0x18,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x18, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x18, + 0x18,0x18,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x18,0x18,0x18,0x18,0x19, + 0x18,0x18,0x18,0x18,0x17,0x17,0x17,0x17,0x17,0x17,0x18,0x18,0x18,0x18,0x17, + 0x17,0x17,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a, + 0x1a,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0xc8,0x11,0x11,0x11, + 0x11,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, + 0x12,0x11,0x11,0x11,0x12,0x12,0x12,0x12,0x12,0x13,0x13,0x90,0xbc,0xb5,0x4b, + 0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, + 0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, + 0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, + 0x12,0x12,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x13,0x13,0x13,0x13,0x13,0x13, + 0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x15, + 0x15,0x15,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14, + 0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14, + 0x14,0x14,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x16,0x17,0x17,0x16,0x16,0x16,0x16,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x16,0x17,0x17,0x16, + 0x16,0x16,0x16,0x15,0x15,0x15,0x15,0x16,0x16,0x17,0x17,0x17,0x17,0x17,0x17, + 0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17, + 0x17,0x17,0x17,0x17,0x17,0x17,0x18,0x18,0x18,0x18,0x18,0x18,0x17,0x17,0x17, + 0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x17,0x17,0x17,0x17,0x17, + 0x17,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x18,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x17,0x18,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x1a,0x1a,0x1a,0x19,0x19,0x19,0x18,0x18, + 0x18,0x18,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x1a,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x1a,0x1a,0x19,0x19,0x19,0x19,0xc8,0x11, + 0x11,0x11,0x11,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, + 0x12,0x12,0x12,0x11,0x11,0x11,0x12,0x12,0x12,0x12,0x12,0x13,0x13,0x90,0xbc, + 0xb5,0x4b,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, + 0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, + 0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, + 0x12,0x12,0x12,0x12,0x13,0x14,0x14,0x14,0x14,0x14,0x13,0x13,0x13,0x13,0x13, + 0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x14,0x14,0x14,0x14,0x14,0x14, + 0x14,0x15,0x15,0x15,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14, + 0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14, + 0x14,0x14,0x14,0x14,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x16,0x17,0x17,0x16,0x16,0x16,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x17,0x17, + 0x17,0x17,0x16,0x16,0x16,0x15,0x15,0x15,0x15,0x16,0x16,0x17,0x17,0x17,0x17, + 0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17, + 0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x17,0x17, + 0x17,0x17,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x18,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x18, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x17,0x18,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x1a,0x1a,0x1a,0x19,0x19,0x19, + 0x18,0x18,0x18,0x18,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x1a,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x1a,0x1a,0x1a,0x1a,0x19,0x19,0x19, + 0xc8,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, + 0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x13,0x13, + 0x90,0xbc,0xb5,0x4b,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, + 0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x13,0x13,0x13,0x12,0x12, + 0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, + 0x12,0x12,0x12,0x12,0x12,0x12,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13, + 0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x14,0x14,0x14,0x14, + 0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14, + 0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x15,0x15,0x14, + 0x14,0x14,0x14,0x14,0x14,0x14,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x16,0x16,0x16,0x16,0x16,0x15, + 0x15,0x15,0x15,0x15,0x15,0x16,0x16,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x16,0x17,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x17,0x17,0x17,0x17,0x17,0x16,0x16,0x15,0x15,0x15,0x16,0x16,0x17,0x17,0x17, + 0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17, + 0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x18,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17, + 0x18,0x19,0x19,0x19,0x19,0x18,0x19,0x19,0x19,0x19,0x18,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x19, + 0x19,0x19,0x19,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x18,0x18,0x18,0x18,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a, + 0x1a,0x1a,0x19,0x19,0x19,0x19,0x19,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x19, + 0x19,0x19,0xc8,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, + 0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, + 0x13,0x13,0x90,0xbc,0xb5,0x4b,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, + 0x12,0x12,0x13,0x13,0x13,0x13,0x13,0x13,0x12,0x12,0x12,0x13,0x13,0x13,0x13, + 0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13, + 0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13, + 0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x14,0x14,0x14,0x14,0x14, + 0x14,0x14,0x14,0x15,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14, + 0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x16,0x16,0x16,0x16,0x16,0x16,0x15,0x15, + 0x15,0x16,0x16,0x16,0x16,0x15,0x16,0x17,0x17,0x17,0x16,0x16,0x16,0x16,0x16, + 0x16,0x15,0x15,0x15,0x15,0x15,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16, + 0x16,0x16,0x16,0x15,0x15,0x15,0x15,0x15,0x15,0x16,0x16,0x16,0x16,0x16,0x16, + 0x15,0x16,0x17,0x17,0x17,0x17,0x17,0x16,0x16,0x16,0x16,0x16,0x16,0x17,0x18, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x17,0x17,0x17,0x17,0x17, + 0x17,0x17,0x18,0x19,0x19,0x19,0x19,0x19,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x17,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x19,0x19,0x19,0x19,0x19,0x19,0x18,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0x1a,0x1a,0x1a,0x1a,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x1a,0x1a,0x1a,0x1a,0x1a, + 0x1a,0x1a,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x1a,0x1a,0x1b,0x1b,0x1b,0x1b, + 0x1b,0x1b,0x1a,0x1a,0x19,0x19,0x19,0x19,0x1a,0x1a,0x1a,0x1b,0x1a,0x19,0x19, + 0x19,0x19,0x19,0x19,0xc8,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, + 0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, + 0x12,0x12,0x13,0x13,0x90,0xbc,0xb5,0x4b,0x12,0x12,0x12,0x12,0x12,0x12,0x12, + 0x0c,0x06,0x06,0x12,0x13,0x06,0x13,0x13,0x06,0x13,0x12,0x12,0x12,0x12,0x13, + 0x0c,0x13,0x13,0x13,0x0c,0x0c,0x06,0x13,0x06,0x13,0x06,0x13,0x0c,0x0c,0x06, + 0x13,0x0c,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13, + 0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x14,0x14,0x14,0x14, + 0x14,0x14,0x14,0x14,0x14,0x15,0x15,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14, + 0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x16,0x16,0x16,0x16,0x16,0x16, + 0x16,0x15,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x17,0x17,0x17,0x17,0x16,0x16, + 0x16,0x16,0x16,0x15,0x15,0x15,0x15,0x15,0x16,0x16,0x16,0x16,0x16,0x16,0x16, + 0x16,0x16,0x16,0x16,0x16,0x16,0x15,0x15,0x15,0x15,0x15,0x16,0x16,0x16,0x16, + 0x16,0x16,0x16,0x16,0x17,0x17,0x17,0x17,0x17,0x16,0x16,0x16,0x16,0x16,0x17, + 0x17,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x17,0x17,0x17, + 0x17,0x17,0x17,0x17,0x18,0x19,0x19,0x19,0x19,0x19,0x18,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x17,0x17,0x18,0x18,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x18,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x18,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x1a,0x1a,0x1a,0x1a,0x1a,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x1a,0x1a,0x1a,0x1a, + 0x1a,0x1a,0x1a,0x1a,0x1a,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x1a,0x1a,0x1b,0x1b, + 0x1b,0x1c,0x1c,0x1b,0x1a,0x1a,0x19,0x19,0x19,0x1a,0x1a,0x1a,0x1b,0x1b,0x1a, + 0x19,0x19,0x19,0x19,0x19,0x19,0xc8,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, + 0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, + 0x12,0x12,0x12,0x12,0x12,0x12,0x90,0xbc,0xb5,0x4b,0x12,0x12,0x12,0x12,0x12, + 0x12,0x12,0x06,0x06,0x06,0x12,0x13,0x06,0x06,0x13,0x13,0x13,0x12,0x12,0x12, + 0x12,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x06,0x13,0x06,0x06,0x06,0x0c, + 0x13,0x06,0x06,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13, + 0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14, + 0x14,0x14,0x14,0x14,0x15,0x15,0x15,0x15,0x15,0x14,0x14,0x14,0x14,0x14,0x14, + 0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x16,0x16,0x16,0x16,0x16,0x16,0x15,0x15,0x16,0x16,0x16,0x17,0x17, + 0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17, + 0x16,0x16,0x16,0x16,0x16,0x15,0x15,0x15,0x15,0x15,0x16,0x16,0x16,0x16,0x16, + 0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16, + 0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x16,0x16, + 0x16,0x17,0x17,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x17, + 0x17,0x17,0x17,0x17,0x17,0x17,0x18,0x19,0x19,0x19,0x19,0x19,0x18,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x18,0x18,0x18,0x18,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x1a,0x1a,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a, + 0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x1a,0x1a, + 0x1a,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1a,0x1a,0x1a,0x1a,0x1a,0x1b,0x1b, + 0x1b,0x1a,0x19,0x19,0x19,0x19,0x19,0x19,0xc8,0x12,0x12,0x12,0x12,0x12,0x12, + 0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, + 0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x90,0xbc,0xb5,0x4b,0x12,0x12,0x12, + 0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x13,0x13,0x13,0x13,0x13,0x12,0x2b,0x2b, + 0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13, + 0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13, + 0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x14,0x14,0x14,0x14,0x14,0x14,0x14, + 0x14,0x14,0x14,0x14,0x14,0x14,0x15,0x15,0x15,0x15,0x14,0x14,0x14,0x14,0x14, + 0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14, + 0x14,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x16,0x16,0x16,0x17,0x16,0x16,0x16,0x15,0x16,0x16,0x16,0x16, + 0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17, + 0x17,0x16,0x16,0x16,0x16,0x16,0x16,0x15,0x15,0x15,0x15,0x16,0x16,0x16,0x16, + 0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16, + 0x16,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17, + 0x16,0x16,0x16,0x17,0x17,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x18,0x17,0x17,0x17,0x17,0x17,0x17,0x18,0x18,0x19,0x19,0x19,0x19,0x19,0x19, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x1a,0x1a,0x1a,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a, + 0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x1a,0x1a,0x1a,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1a,0x1a,0x1a,0x1a, + 0x1b,0x1b,0x1b,0x1a,0x19,0x19,0x19,0x19,0x19,0x19,0xc8,0x12,0x12,0x12,0x12, + 0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, + 0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x90,0xbc,0xb5,0x4b,0x12, + 0x12,0x12,0x12,0x12,0x12,0x1f,0x3e,0x51,0x64,0x6a,0x7d,0x7d,0x64,0x8a,0x96, + 0x96,0x96,0x96,0x9c,0x9c,0x9c,0x9c,0x9c,0x96,0x96,0x96,0x90,0x90,0x83,0x70, + 0x57,0x57,0x38,0x38,0x2b,0x06,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14, + 0x14,0x13,0x13,0x13,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14, + 0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14, + 0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14, + 0x14,0x14,0x14,0x14,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x16,0x16,0x16,0x17,0x17,0x17,0x16,0x16,0x16,0x16,0x16, + 0x16,0x16,0x17,0x17,0x16,0x16,0x16,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17, + 0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16, + 0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16, + 0x16,0x16,0x17,0x17,0x17,0x17,0x17,0x17,0x18,0x18,0x17,0x17,0x17,0x17,0x17, + 0x17,0x17,0x16,0x16,0x16,0x17,0x17,0x17,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x17,0x17,0x17,0x17,0x17,0x18,0x18,0x18,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x18,0x18,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x1a,0x1a,0x1a, + 0x1a,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a, + 0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a, + 0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a, + 0x1a,0x1a,0x1a,0x1a,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x1a,0x1a,0x1a,0x1b,0x1b,0x1a,0x1a,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, + 0x1b,0x1b,0x1a,0x1a,0x1a,0x1a,0x1a,0x19,0x19,0x19,0x19,0x19,0xc8,0x12,0x12, + 0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, + 0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x06,0x11,0x90,0xbc,0xb5, + 0x4b,0x12,0x12,0x1f,0x51,0x7d,0x83,0x96,0x96,0x9c,0x9c,0x9c,0x9c,0x9c,0x64, + 0x9c,0xa3,0xa3,0xa3,0xa3,0xa3,0xa3,0xa9,0xa9,0xa9,0xa9,0xa9,0xa9,0xa9,0xa9, + 0xa9,0xa9,0xa9,0x96,0x96,0x8a,0x8a,0x6a,0x6a,0x4b,0x3e,0x32,0x1f,0x06,0x06, + 0x14,0x14,0x14,0x14,0x14,0x0c,0x06,0x14,0x14,0x0c,0x14,0x14,0x14,0x14,0x14, + 0x14,0x0c,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14, + 0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x15,0x15,0x14,0x14,0x14, + 0x14,0x14,0x14,0x14,0x14,0x14,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x16,0x16,0x17,0x17,0x17,0x17,0x17,0x17,0x16, + 0x16,0x16,0x16,0x16,0x16,0x16,0x15,0x15,0x15,0x16,0x16,0x16,0x16,0x16,0x16, + 0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x17,0x17, + 0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16, + 0x16,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17, + 0x17,0x17,0x17,0x17,0x17,0x16,0x16,0x16,0x16,0x17,0x18,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x17,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x17,0x17,0x18,0x18,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x18,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x18,0x18,0x18,0x18,0x18,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x1a,0x1a,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x1a,0x1a,0x1a,0x1a,0x1a,0x19,0x19,0x1a,0x1a, + 0x1a,0x1b,0x1a,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x1a,0x1a,0x1a, + 0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a, + 0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a, + 0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a, + 0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1b,0x1b,0x1b,0x1a,0x1a,0x1a,0x1b,0x1b,0x1b, + 0x1b,0x1b,0x1b,0x1b,0x1a,0x1a,0x19,0x1a,0x1a,0x1a,0x1a,0x1a,0x19,0x19,0xc8, + 0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, + 0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x06,0x06,0x06,0x0c,0x11,0x90, + 0xbc,0xb5,0x4b,0x5e,0x8a,0xa9,0xa9,0xa9,0xa9,0xa9,0x9c,0x9c,0x9c,0x9c,0x9c, + 0x9c,0x64,0x9c,0xa3,0xa3,0xa3,0xa3,0xa3,0xa3,0xa3,0xa9,0xa9,0xa9,0xa9,0xa9, + 0xa9,0xa9,0xa9,0xa9,0x96,0x96,0x96,0x8a,0x8a,0x8a,0x70,0x70,0x70,0x70,0x4b, + 0x32,0x4b,0x4b,0x3e,0x32,0x19,0x19,0x14,0x14,0x14,0x14,0x14,0x14,0x06,0x06, + 0x06,0x06,0x14,0x06,0x0c,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14, + 0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x15,0x15,0x15,0x15, + 0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x16,0x17,0x17,0x17,0x17,0x17,0x17, + 0x17,0x16,0x16,0x16,0x16,0x16,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x17, + 0x17,0x17,0x17,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16, + 0x16,0x16,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17, + 0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x16,0x16,0x16,0x17,0x18,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x17,0x17,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x17,0x18,0x18,0x19, + 0x19,0x19,0x19,0x19,0x19,0x18,0x18,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x18,0x18,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x18,0x18,0x18,0x18,0x18,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x1a,0x1a,0x1a,0x1a,0x19,0x19,0x19, + 0x19,0x19,0x19,0x1a,0x1a,0x1b,0x1a,0x19,0x1a,0x1a,0x1a,0x1a,0x1a,0x19,0x19, + 0x1a,0x1a,0x1a,0x1b,0x1a,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a, + 0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a, + 0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a, + 0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1b,0x1b,0x1b,0x1b,0x1a,0x1a,0x1a,0x1b, + 0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1a,0x19,0x19,0x1a,0x1a,0x1a,0x1a,0x1a,0x19, + 0x19,0xc8,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, + 0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x06,0x12,0x06, + 0x12,0x90,0xbc,0xb5,0x70,0xb5,0xb5,0xb5,0xa9,0xa9,0xa9,0x9c,0x9c,0x9c,0x9c, + 0x9c,0x9c,0x9c,0x64,0x9c,0xa3,0xa3,0xa3,0xa3,0xa3,0xa3,0xa3,0xa9,0xa9,0xa9, + 0xa9,0xa9,0xa9,0xa9,0xa9,0xa9,0xa9,0x96,0x96,0x96,0x8a,0x8a,0x70,0x70,0x70, + 0x70,0x4b,0x3e,0x57,0x57,0x57,0x57,0x3e,0x8a,0x83,0x83,0x77,0x3e,0x3e,0x12, + 0x14,0x14,0x14,0x14,0x14,0x14,0x06,0x06,0x14,0x14,0x14,0x14,0x14,0x14,0x14, + 0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x16,0x16,0x16,0x17,0x17, + 0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x16,0x16,0x16,0x16,0x16,0x17,0x17,0x16,0x16,0x16,0x16,0x16,0x16,0x16, + 0x16,0x17,0x17,0x17,0x17,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16, + 0x16,0x16,0x16,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17, + 0x17,0x16,0x16,0x17,0x18,0x18,0x18,0x18,0x17,0x17,0x17,0x17,0x17,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x18,0x19,0x19,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x18,0x18,0x19,0x19,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x18,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x1a,0x1a,0x1a,0x1a,0x1a, + 0x1a,0x1a,0x1a,0x1a,0x1a,0x1b,0x1b,0x1c,0x1a,0x19,0x19,0x19,0x1a,0x1a,0x1a, + 0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a, + 0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a, + 0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a, + 0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a, + 0x1b,0x1b,0x1b,0x1a,0x1a,0x1a,0x1a,0x1a,0x1b,0x1b,0x1b,0x1b,0x1b,0x1a,0x1a, + 0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1a,0x1a,0x1a,0x1b,0x1b,0x1b,0x1a, + 0x1a,0x1a,0x1a,0xc8,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, + 0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, + 0x12,0x12,0x12,0x90,0xbc,0xb5,0x77,0xb5,0xb5,0xb5,0xa9,0xa9,0xa9,0x9c,0x9c, + 0x9c,0x9c,0x9c,0x9c,0x9c,0x64,0x9c,0xa3,0xa3,0xa3,0xa3,0xa3,0xa3,0x9c,0x96, + 0x90,0x90,0x90,0x83,0x83,0x83,0x83,0x83,0x70,0x70,0x70,0x70,0x70,0x6a,0x6a, + 0x6a,0x4b,0x4b,0x4b,0x3e,0x57,0x57,0x57,0x57,0x3e,0x8a,0x8a,0x9c,0x9c,0x9c, + 0x9c,0x9c,0x83,0x77,0x51,0x12,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14, + 0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x16,0x15,0x16, + 0x16,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x16,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x16,0x16,0x16,0x16,0x16,0x17,0x17,0x17,0x16,0x16,0x16,0x16, + 0x16,0x16,0x16,0x16,0x17,0x17,0x17,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16, + 0x16,0x16,0x16,0x16,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17, + 0x17,0x17,0x17,0x16,0x16,0x17,0x18,0x18,0x18,0x18,0x17,0x17,0x17,0x17,0x18, + 0x19,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x18,0x19,0x19,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x18,0x19,0x19,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0x18,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0x1a,0x1a,0x1a,0x19,0x19,0x1a,0x1a,0x1b,0x1c,0x1a,0x19,0x19,0x19,0x1a, + 0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1b,0x1b,0x1b,0x1b,0x1a,0x1a, + 0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a, + 0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a, + 0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a, + 0x1a,0x1a,0x1b,0x1b,0x1b,0x1a,0x1a,0x1a,0x1a,0x1a,0x1b,0x1b,0x1b,0x1b,0x1b, + 0x1a,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1a,0x1a,0x1a,0x1b,0x1b, + 0x1b,0x1b,0x1a,0x1b,0x1a,0xc8,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, + 0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, + 0x12,0x0c,0x12,0x4b,0x7d,0x8a,0xbc,0xb5,0x77,0xb5,0xb5,0xb5,0xa9,0xa9,0xa9, + 0x9c,0x9c,0x9c,0x9c,0x9c,0x9c,0x9c,0x64,0x8a,0x8a,0x7d,0x6a,0x57,0x4b,0x2b, + 0x1f,0x19,0x12,0x14,0x14,0x14,0x14,0x14,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x0c,0x0c,0x06,0x19,0x1f,0x32,0x32,0x1f,0x3e,0x77,0x83, + 0x83,0x83,0x9c,0x9c,0xa9,0xa9,0x9c,0x77,0x9c,0x83,0x77,0x51,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x14,0x14,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x16,0x16,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x16,0x16,0x16, + 0x16,0x16,0x16,0x16,0x16,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x16, + 0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17, + 0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17, + 0x17,0x17,0x17,0x17,0x17,0x16,0x16,0x17,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x18,0x18,0x19,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x18,0x18,0x18,0x18,0x18,0x18,0x19,0x19,0x18,0x18,0x18,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x18,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x1a,0x1a,0x1a,0x1a, + 0x1a,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x18, + 0x18,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x1a,0x1b,0x1c,0x1a,0x19,0x19, + 0x19,0x1a,0x1a,0x1a,0x1a,0x1a,0x19,0x19,0x19,0x1a,0x1a,0x1b,0x1b,0x1b,0x1b, + 0x1b,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a, + 0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1b,0x1b,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a, + 0x1a,0x1a,0x1a,0x1a,0x1a,0x1b,0x1b,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a, + 0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1b,0x1b,0x1b, + 0x1c,0x1c,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, + 0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0xc8,0x12,0x12,0x12,0x12,0x12,0x12,0x12, + 0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x0c, + 0x12,0x12,0x12,0x12,0x64,0xb5,0xaf,0x77,0xbc,0xb5,0x77,0xb5,0xb5,0xb5,0xa9, + 0xa9,0xa9,0xa9,0x9c,0x9c,0x96,0x83,0x6a,0x51,0x1f,0x19,0x13,0x14,0x14,0x14, + 0x14,0x14,0x15,0x15,0x15,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14, + 0x14,0x14,0x14,0x1f,0x3e,0x3e,0x51,0x77,0x77,0x77,0xa9,0xa9,0xa9,0xa9,0xa9, + 0x9c,0x51,0x51,0x2b,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x06, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x16, + 0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16, + 0x16,0x16,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x17,0x17,0x17,0x17,0x17, + 0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17, + 0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x17,0x17,0x18,0x18,0x18,0x18,0x18,0x18, + 0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x18,0x18,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x19,0x19,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x18,0x19,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x18,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x18,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a, + 0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1b,0x1a, + 0x1a,0x1a,0x1a,0x19,0x19,0x1a,0x1a,0x1a,0x19,0x19,0x19,0x1a,0x1a,0x1a,0x1a, + 0x19,0x19,0x19,0x19,0x19,0x1a,0x19,0x19,0x19,0x19,0x19,0x1a,0x1a,0x1b,0x1a, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x1a,0x1a,0x1a,0x1a,0x1a, + 0x1a,0x1a,0x19,0x19,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a, + 0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1b,0x1b,0x1b,0x1a,0x1a,0x1a, + 0x1a,0x1b,0x1b,0x1b,0x1a,0x1a,0x1a,0x1b,0x1b,0x1a,0x1a,0x1a,0x19,0x19,0x1a, + 0x1a,0x1a,0x1a,0x1b,0x1b,0x1b,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1b, + 0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1a,0x1a,0x1a,0x1b,0x1b,0x1c,0x1c,0x1c,0x1b, + 0x1b,0x1b,0x1c,0x1c,0x1b,0x1b,0x1b,0x1b,0x1a,0xc8,0x12,0x12,0x12,0x12,0x12, + 0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x13,0x13, + 0x13,0x13,0x13,0x13,0x12,0x64,0xbc,0xc2,0xa9,0x77,0xbc,0xb5,0x77,0xb5,0xb5, + 0xb5,0xb5,0xa9,0xa9,0x96,0x6a,0x51,0x19,0x14,0x13,0x13,0x13,0x13,0x14,0x14, + 0x14,0x14,0x14,0x14,0x15,0x15,0x15,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14, + 0x14,0x14,0x15,0x15,0x15,0x15,0x15,0x15,0x14,0x14,0x14,0x14,0x14,0x13,0x13, + 0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x2b,0x51, + 0x77,0x77,0x9c,0x51,0x9c,0x9c,0x9c,0x77,0x51,0x3e,0x06,0x15,0x15,0x15,0x06, + 0x06,0x0c,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x16,0x16,0x16,0x17,0x17,0x17,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16, + 0x16,0x16,0x16,0x16,0x16,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x17,0x17, + 0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17, + 0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x18, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x17,0x17,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x17,0x17,0x17,0x17,0x17,0x17,0x18,0x18,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x19,0x19,0x18,0x18,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x18,0x19,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x18,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x1a,0x1a,0x19,0x19,0x18,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x1a,0x1b,0x1a,0x1a,0x1a,0x1a,0x1a, + 0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, + 0x1b,0x1b,0x1a,0x1a,0x1a,0x19,0x19,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1b,0x1b, + 0x1b,0x1b,0x1a,0x1a,0x1b,0x1a,0x1a,0x1a,0x19,0x19,0x19,0x19,0x19,0x1a,0x1a, + 0x1a,0x1a,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x1a,0x1a,0x1a,0x1a, + 0x19,0x19,0x19,0x19,0x19,0x19,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a, + 0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1b,0x1b,0x1b,0x1b, + 0x1a,0x1a,0x1a,0x1b,0x1b,0x1b,0x1a,0x1a,0x1a,0x1b,0x1b,0x1a,0x1a,0x1a,0x1a, + 0x19,0x1a,0x1a,0x1a,0x1b,0x1b,0x1c,0x1b,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a, + 0x1a,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1a,0x1a,0x1a,0x1b,0x1c,0x1c,0x1c, + 0x1c,0x1b,0x1b,0x1b,0x1c,0x1c,0x1b,0x1b,0x1b,0x1a,0x1a,0xc8,0x12,0x12,0x12, + 0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x13, + 0x13,0x14,0x0c,0x06,0x06,0x13,0x4b,0xbc,0xc2,0xc2,0xa9,0x77,0xbc,0xb5,0x77, + 0xb5,0xb5,0xb5,0xa9,0x83,0x51,0x12,0x14,0x14,0x14,0x06,0x13,0x13,0x13,0x06, + 0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14, + 0x14,0x14,0x14,0x14,0x15,0x15,0x15,0x15,0x15,0x15,0x14,0x14,0x14,0x14,0x14, + 0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x06,0x06,0x14,0x14,0x14,0x06, + 0x15,0x15,0x15,0x15,0x15,0x15,0x2b,0x3e,0x77,0x83,0x9c,0x9c,0x77,0x77,0x51, + 0x1f,0x0c,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16, + 0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16, + 0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17, + 0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17, + 0x17,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x17,0x17,0x17,0x18, + 0x18,0x18,0x18,0x18,0x18,0x18,0x17,0x17,0x17,0x17,0x17,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x1a,0x1a,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x1a,0x1b,0x1b,0x1b,0x1a, + 0x1a,0x1a,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1a,0x1b,0x1b,0x1b,0x1b,0x1b, + 0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1a,0x19,0x19,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a, + 0x1b,0x1b,0x1b,0x1b,0x1b,0x1c,0x1c,0x1b,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a, + 0x1a,0x1a,0x19,0x1a,0x1b,0x1b,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a, + 0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1a,0x1a,0x1a,0x1a,0x1a, + 0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, + 0x1b,0x1b,0x1a,0x1a,0x1a,0x1b,0x1b,0x1b,0x1b,0x1b,0x1a,0x1a,0x1b,0x1b,0x1b, + 0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1a,0x1a,0x1a,0x1a,0x1a, + 0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1a,0x1a,0x1a,0x1b,0x1c, + 0x1c,0x1c,0x1c,0x1c,0x1b,0x1b,0x1c,0x1c,0x1c,0x1b,0x1b,0x1b,0x1b,0xc8,0x12, + 0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, + 0x12,0x13,0x14,0x14,0x14,0x14,0x14,0x19,0xaf,0xc2,0xc2,0xc2,0xa9,0x77,0xbc, + 0xb5,0x77,0xb5,0xa9,0x7d,0x32,0x13,0x13,0x13,0x14,0x14,0x0c,0x14,0x13,0x13, + 0x13,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14, + 0x14,0x14,0x14,0x14,0x14,0x14,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x14,0x14, + 0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14, + 0x14,0x14,0x15,0x15,0x06,0x06,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x1f,0x51, + 0x51,0x77,0x77,0x77,0x51,0x3e,0x12,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16, + 0x16,0x16,0x16,0x16,0x16,0x16,0x15,0x16,0x16,0x16,0x16,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16, + 0x16,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17, + 0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17, + 0x17,0x17,0x17,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x17,0x17, + 0x17,0x17,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x17,0x17,0x17,0x17,0x17,0x18, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x1a,0x1a,0x19,0x19, + 0x19,0x19,0x1a,0x19,0x1a,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x1a,0x1b,0x1b, + 0x1b,0x1a,0x1a,0x1b,0x1b,0x1b,0x1b,0x1c,0x1b,0x1b,0x1b,0x1a,0x1b,0x1b,0x1b, + 0x1b,0x1b,0x1b,0x1b,0x1b,0x1c,0x1c,0x1c,0x1b,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a, + 0x1a,0x1a,0x1b,0x1b,0x1b,0x1b,0x1b,0x1c,0x1c,0x1b,0x1a,0x1a,0x1a,0x1a,0x1a, + 0x1b,0x1b,0x1a,0x19,0x19,0x1a,0x1c,0x1c,0x1b,0x1b,0x1a,0x1a,0x1a,0x1a,0x1a, + 0x1a,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1a,0x1a,0x1a, + 0x19,0x1a,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, + 0x1b,0x1b,0x1b,0x1a,0x1a,0x1a,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1a,0x1b,0x1c, + 0x1c,0x1b,0x1b,0x1c,0x1c,0x1c,0x1b,0x1b,0x1b,0x1b,0x1b,0x1a,0x1a,0x1a,0x1a, + 0x1a,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1a,0x1a,0x1a, + 0x1b,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1b,0x1c,0x1c,0x1c,0x1c,0x1b,0x1b,0x1b, + 0xc8,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, + 0x13,0x13,0x13,0x14,0x14,0x14,0x06,0x14,0x14,0x8a,0xc2,0xc2,0xc2,0xc2,0xa9, + 0x77,0xbc,0xb5,0x70,0x8a,0x2b,0x13,0x13,0x13,0x13,0x13,0x14,0x14,0x14,0x14, + 0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x15,0x15,0x14,0x14,0x14,0x14,0x14, + 0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14, + 0x14,0x14,0x14,0x14,0x15,0x15,0x15,0x15,0x15,0x15,0x0c,0x15,0x15,0x15,0x15, + 0x15,0x15,0x14,0x14,0x15,0x12,0x3e,0x51,0x1f,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x16,0x16,0x16,0x16,0x16,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x16,0x16,0x16,0x16,0x16,0x16, + 0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x15,0x15,0x15,0x15,0x16,0x16,0x16,0x16, + 0x16,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x16,0x16,0x16,0x17,0x17,0x17, + 0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17, + 0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17, + 0x17,0x17,0x17,0x17,0x17,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x17,0x17,0x17,0x17,0x17,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x17,0x17,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x1a,0x1a, + 0x19,0x19,0x19,0x1a,0x1a,0x1a,0x1a,0x1a,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0x1a,0x1a,0x1a,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x1a,0x1a,0x1a,0x1b, + 0x1b,0x1b,0x1b,0x1a,0x1b,0x1b,0x1b,0x1b,0x1c,0x1c,0x1c,0x1b,0x1b,0x1b,0x1b, + 0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1c,0x1c,0x1c,0x1c,0x1c,0x1a,0x1a,0x1b,0x1a, + 0x1a,0x1a,0x1a,0x1a,0x1b,0x1b,0x1c,0x1b,0x1b,0x1d,0x1d,0x1b,0x1a,0x1a,0x1a, + 0x1a,0x1b,0x1c,0x1c,0x1b,0x19,0x19,0x1b,0x1c,0x1c,0x1c,0x1b,0x1b,0x1b,0x1b, + 0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a, + 0x1a,0x19,0x19,0x19,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a, + 0x1a,0x1a,0x1b,0x1b,0x1b,0x1a,0x1a,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, + 0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1b,0x1b,0x1b,0x1a,0x1a,0x1a, + 0x1a,0x1a,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1a, + 0x1a,0x1a,0x1b,0x1b,0x1c,0x1c,0x1c,0x1c,0x1b,0x1b,0x1c,0x1c,0x1c,0x1c,0x1c, + 0x1b,0x1b,0xc8,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, + 0x12,0x12,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x2b,0xbc,0xc2,0xc2,0xc2, + 0xc2,0xa9,0x7d,0xc2,0xa3,0x32,0x13,0x13,0x12,0x0c,0x13,0x13,0x13,0x14,0x14, + 0x14,0x14,0x14,0x14,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x14,0x14,0x14, + 0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14, + 0x14,0x14,0x14,0x14,0x14,0x14,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x16,0x16,0x16,0x16,0x16, + 0x16,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x16,0x16,0x16,0x16,0x16, + 0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16, + 0x16,0x16,0x16,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x16,0x16,0x17,0x17, + 0x17,0x18,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17, + 0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17, + 0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x19, + 0x18,0x18,0x17,0x17,0x17,0x17,0x17,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x18,0x18,0x18,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x1a,0x1a,0x19,0x19,0x19,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x19,0x19, + 0x19,0x19,0x19,0x1a,0x1a,0x1a,0x1a,0x19,0x19,0x19,0x19,0x19,0x19,0x1a,0x1a, + 0x1a,0x1b,0x1b,0x1b,0x1b,0x1a,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, + 0x1c,0x1c,0x1c,0x1b,0x1b,0x1b,0x1b,0x1a,0x1b,0x1c,0x1b,0x1c,0x1b,0x1a,0x1a, + 0x1b,0x1a,0x1a,0x19,0x1a,0x1a,0x1b,0x1b,0x1b,0x1b,0x1b,0x1c,0x1c,0x1a,0x1a, + 0x1a,0x1a,0x1b,0x1c,0x1c,0x1c,0x1b,0x1a,0x1a,0x1b,0x1c,0x1b,0x1b,0x1b,0x1b, + 0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1a,0x19,0x19,0x19,0x19,0x19,0x19,0x1a, + 0x1a,0x1a,0x1a,0x1a,0x19,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a, + 0x1a,0x1a,0x1a,0x1a,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1c,0x1c, + 0x1b,0x1b,0x1b,0x1b,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1b,0x1b,0x1a, + 0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1c,0x1b, + 0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1c,0x1c,0x1b,0x1b,0x1b,0x1c,0x1d,0x1c, + 0x1c,0x1c,0x1c,0x1c,0xc8,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, + 0x12,0x12,0x12,0x13,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x8a,0xc2,0xc2, + 0xc2,0xc2,0xc2,0xa9,0x77,0x90,0x19,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13, + 0x14,0x14,0x14,0x14,0x14,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x14, + 0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14, + 0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x16,0x16,0x16,0x16, + 0x16,0x16,0x16,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x16,0x16,0x16,0x16, + 0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16, + 0x16,0x16,0x16,0x16,0x16,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x16,0x17, + 0x17,0x17,0x17,0x18,0x18,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17, + 0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17, + 0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x18,0x18,0x18,0x18,0x18,0x18, + 0x18,0x19,0x19,0x18,0x17,0x17,0x17,0x17,0x17,0x18,0x18,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x18,0x18,0x18,0x18,0x18,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x1a,0x1a,0x19,0x19,0x19,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a, + 0x19,0x19,0x19,0x19,0x19,0x1a,0x1a,0x1a,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x1a,0x1a,0x1a,0x1b,0x1b,0x1b,0x1a,0x1a,0x1a,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, + 0x1b,0x1b,0x1c,0x1c,0x1c,0x1b,0x1b,0x1b,0x1a,0x1a,0x1b,0x1b,0x1b,0x1b,0x1b, + 0x1a,0x1b,0x1b,0x1a,0x1a,0x19,0x19,0x1a,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1a, + 0x1a,0x1a,0x1a,0x1b,0x1b,0x1c,0x1c,0x1c,0x1b,0x1b,0x1a,0x1b,0x1b,0x1b,0x1b, + 0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1a,0x19,0x19,0x19,0x19,0x19, + 0x19,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a, + 0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1c, + 0x1c,0x1c,0x1c,0x1b,0x1b,0x1b,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c, + 0x1b,0x1b,0x1c,0x1c,0x1d,0x1c,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1c, + 0x1c,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1c,0x1c,0x1b,0x1b,0x1b,0x1d, + 0x1d,0x1c,0x1c,0x1c,0x1c,0x1c,0xc8,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, + 0x12,0x13,0x13,0x13,0x13,0x13,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x0c,0xb5, + 0xc2,0xc2,0xc2,0xc2,0xc2,0xaf,0x1f,0x13,0x13,0x0c,0x13,0x13,0x14,0x14,0x14, + 0x14,0x14,0x14,0x14,0x14,0x14,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x13,0x13,0x14,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x14,0x14,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x06,0x06,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x16,0x16,0x15,0x15,0x15,0x15,0x15,0x15,0x16,0x16, + 0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16, + 0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x17,0x17,0x17,0x17,0x17, + 0x17,0x16,0x16,0x16,0x16,0x16,0x16,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x16,0x16,0x17,0x18,0x18,0x18,0x18,0x18,0x17,0x17,0x18,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x17,0x17,0x17,0x17, + 0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x19,0x19,0x19,0x18,0x18,0x17,0x17,0x17,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x19,0x19, + 0x19,0x19,0x19,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x19,0x19, + 0x19,0x19,0x19,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x17,0x17,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x1a,0x1a,0x19,0x19,0x19,0x1b,0x1b,0x1b,0x1a,0x1a,0x1a, + 0x1a,0x1a,0x1a,0x1a,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x1a,0x1b,0x1a,0x1a,0x1a,0x1a,0x1a,0x1b,0x1b,0x1b, + 0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a, + 0x1a,0x1a,0x1b,0x1b,0x1b,0x1a,0x1a,0x19,0x19,0x19,0x1a,0x1a,0x1a,0x1a,0x1a, + 0x19,0x19,0x1a,0x1a,0x1b,0x1b,0x1b,0x1b,0x1b,0x1a,0x1b,0x1b,0x1c,0x1b,0x1a, + 0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, + 0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1c,0x1c,0x1b,0x1b,0x1b,0x1b,0x1b, + 0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, + 0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1c,0x1c, + 0x1c,0x1c,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1c,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, + 0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1b,0x1b,0x1b,0x1b, + 0x1b,0x1c,0x1d,0x1d,0x1d,0x1d,0x1c,0x1c,0xc8,0x12,0x12,0x12,0x12,0x12,0x12, + 0x12,0x12,0x13,0x13,0x13,0x13,0x13,0x13,0x14,0x14,0x14,0x14,0x14,0x14,0x14, + 0x2b,0xc2,0xc2,0xc2,0xc2,0xc2,0xc2,0x7d,0x13,0x13,0x06,0x13,0x13,0x13,0x14, + 0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x14,0x14,0x14,0x14,0x14,0x14,0x13,0x13,0x13, + 0x14,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x14,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x0c, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x16,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16, + 0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x17,0x17,0x17,0x17, + 0x17,0x17,0x17,0x17,0x16,0x16,0x16,0x16,0x16,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x16,0x16,0x17,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x17,0x17, + 0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x19,0x19,0x19,0x18,0x18,0x17,0x17,0x17,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x19, + 0x19,0x19,0x19,0x19,0x19,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x19, + 0x19,0x19,0x19,0x19,0x19,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x19,0x19, + 0x19,0x19,0x19,0x19,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x17, + 0x17,0x18,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x1a,0x1a,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x1a,0x1a,0x1a,0x19,0x19,0x19,0x1b,0x1b,0x1b,0x1a, + 0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x1a,0x1b,0x1a,0x1a,0x1a,0x1a,0x1a,0x1b, + 0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1a,0x1b,0x1b,0x1a,0x1a,0x1a,0x1a,0x1a, + 0x1a,0x1a,0x1a,0x1a,0x1b,0x1b,0x1b,0x1a,0x1a,0x19,0x19,0x19,0x1a,0x1a,0x1a, + 0x1a,0x1a,0x19,0x19,0x1a,0x1b,0x1c,0x1c,0x1b,0x1b,0x1a,0x19,0x1a,0x1b,0x1c, + 0x1b,0x1a,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1c, + 0x1c,0x1c,0x1c,0x1c,0x1c,0x1b,0x1b,0x1b,0x1b,0x1b,0x1c,0x1c,0x1b,0x1b,0x1b, + 0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, + 0x1b,0x1b,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, + 0x1c,0x1c,0x1c,0x1d,0x1d,0x1d,0x1d,0x1e,0x1d,0x1d,0x1d,0x1c,0x1b,0x1b,0x1b, + 0x1b,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1d,0x1d,0x1c,0x1c,0x1c,0x1b, + 0x1b,0x1b,0x1b,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1c,0xc8,0x12,0x12,0x12,0x12, + 0x12,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13, + 0x13,0x13,0x64,0xc2,0xc2,0xc2,0xc2,0xc2,0x90,0x13,0x13,0x0c,0x06,0x14,0x14, + 0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x14,0x14,0x14,0x14,0x13, + 0x13,0x13,0x14,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16, + 0x16,0x16,0x17,0x17,0x17,0x17,0x17,0x16,0x16,0x16,0x16,0x16,0x17,0x17,0x17, + 0x17,0x17,0x17,0x17,0x17,0x17,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16, + 0x16,0x16,0x16,0x16,0x17,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x19,0x19,0x19,0x18,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x18,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x18,0x17,0x17,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x1a,0x1a,0x1a,0x1a, + 0x1a,0x1a,0x1a,0x1a,0x1a,0x19,0x1a,0x1a,0x1a,0x1a,0x19,0x19,0x19,0x1b,0x1b, + 0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x1a,0x1b,0x1a,0x1a,0x1a,0x1a, + 0x1a,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a, + 0x1a,0x1a,0x1a,0x1b,0x1b,0x1b,0x1a,0x1a,0x1b,0x1a,0x1a,0x19,0x19,0x19,0x1a, + 0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1b,0x1c,0x1c,0x1c,0x1b,0x1a,0x19,0x19,0x1a, + 0x1b,0x1c,0x1b,0x1a,0x1b,0x1b,0x1b,0x1b,0x1b,0x1c,0x1c,0x1c,0x1b,0x1b,0x1b, + 0x1b,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, + 0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1c,0x1c,0x1b, + 0x1b,0x1b,0x1b,0x1b,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1b,0x1b,0x1b,0x1b,0x1b, + 0x1c,0x1c,0x1c,0x1c,0x1d,0x1d,0x1d,0x1d,0x1d,0x1e,0x1e,0x1d,0x1d,0x1d,0x1c, + 0x1b,0x1b,0x1c,0x1c,0x1c,0x1d,0x1d,0x1c,0x1c,0x1c,0x1d,0x1d,0x1d,0x1d,0x1c, + 0x1c,0x1c,0x1c,0x1c,0x1c,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0xc8,0x12,0x12, + 0x12,0x12,0x12,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13, + 0x13,0x13,0x13,0x13,0x83,0xc2,0xc2,0xc2,0xc2,0xaf,0x19,0x14,0x14,0x14,0x14, + 0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14, + 0x14,0x14,0x14,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x14,0x14, + 0x14,0x14,0x14,0x13,0x14,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x16,0x16, + 0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x15,0x15,0x15,0x16, + 0x16,0x16,0x16,0x16,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17, + 0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x16,0x15,0x15,0x15,0x15,0x15,0x15,0x16, + 0x16,0x16,0x16,0x16,0x16,0x17,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x19,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x17,0x17,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x19,0x19,0x19,0x18,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x1a,0x1a,0x19,0x19,0x18,0x18,0x18,0x18,0x18,0x18,0x19, + 0x19,0x19,0x19,0x18,0x18,0x19,0x19,0x19,0x19,0x18,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x1a,0x1a,0x1a, + 0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1b,0x1a,0x1a,0x19,0x19, + 0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a, + 0x1a,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x1a,0x1a,0x1a,0x1b,0x1b,0x1a,0x1a, + 0x1a,0x1a,0x1a,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1a,0x1a,0x1a,0x1a,0x1a, + 0x1a,0x1a,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x19,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a, + 0x1a,0x1a,0x1b,0x1b,0x1a,0x1a,0x1a,0x1b,0x1c,0x1c,0x1c,0x1c,0x1b,0x1a,0x1a, + 0x1a,0x1a,0x1b,0x1c,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1c,0x1c,0x1c,0x1c,0x1b, + 0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1a,0x1a, + 0x1a,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1c, + 0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1b,0x1b,0x1c,0x1b, + 0x1c,0x1c,0x1c,0x1d,0x1d,0x1d,0x1d,0x1d,0x1c,0x1c,0x1d,0x1d,0x1d,0x1d,0x1d, + 0x1d,0x1d,0x1c,0x1c,0x1d,0x1d,0x1d,0x1d,0x1d,0x1c,0x1c,0x1c,0x1d,0x1d,0x1d, + 0x1d,0x1d,0x1c,0x1c,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0xc8, + 0x12,0x12,0x12,0x12,0x12,0x12,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13, + 0x13,0x13,0x13,0x13,0x13,0x13,0x83,0xc2,0xc2,0xc2,0xc2,0x57,0x14,0x14,0x14, + 0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14, + 0x14,0x14,0x14,0x14,0x14,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x15,0x15, + 0x15,0x15,0x16,0x16,0x16,0x16,0x16,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17, + 0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x16,0x15,0x15,0x15,0x15,0x15, + 0x15,0x16,0x16,0x16,0x16,0x16,0x17,0x17,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x18,0x19,0x19,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x17,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x19,0x19,0x19,0x18, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x1a,0x1a,0x1a,0x1a,0x19,0x18,0x18,0x18,0x18,0x18, + 0x19,0x19,0x19,0x19,0x19,0x19,0x18,0x19,0x19,0x19,0x18,0x18,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x1a,0x1a, + 0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1b,0x1b,0x1a, + 0x19,0x19,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a, + 0x1a,0x1a,0x1a,0x1a,0x19,0x19,0x19,0x19,0x19,0x19,0x1a,0x1a,0x1a,0x1b,0x1b, + 0x1a,0x1a,0x1a,0x1a,0x1a,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1a,0x1a,0x1a, + 0x1a,0x1a,0x1a,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1a,0x19,0x19,0x1a,0x1a,0x1a, + 0x1a,0x1a,0x1a,0x1b,0x1b,0x1b,0x1b,0x1a,0x1b,0x1b,0x1c,0x1c,0x1c,0x1b,0x1b, + 0x1a,0x1a,0x1b,0x1b,0x1c,0x1c,0x1c,0x1b,0x1b,0x1b,0x1b,0x1c,0x1c,0x1c,0x1c, + 0x1c,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, + 0x1a,0x1a,0x1a,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, + 0x1b,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1b,0x1c, + 0x1c,0x1c,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1c,0x1c,0x1c,0x1c,0x1d,0x1d, + 0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1c,0x1c,0x1c,0x1d, + 0x1d,0x1d,0x1d,0x1d,0x1c,0x1c,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d, + 0x1d,0xc8,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x13,0x13,0x13,0x13,0x13,0x13, + 0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x14,0x83,0xc2,0xc2,0xc2,0xa3,0x14,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x14,0x14,0x14,0x14,0x14,0x14,0x15,0x15,0x14, + 0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16, + 0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x16,0x16,0x16,0x17,0x17,0x17,0x17,0x17, + 0x17,0x17,0x17,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x16,0x16,0x16,0x16,0x17,0x17,0x17,0x18,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x19,0x19,0x19,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x18,0x17,0x17,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x19,0x19, + 0x19,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x17, + 0x17,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x19,0x18,0x18,0x18, + 0x18,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x18,0x18,0x18,0x18,0x18,0x18, + 0x18,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x1a,0x1a,0x1a, + 0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x19,0x1a,0x1a,0x1a,0x1a,0x1a,0x1b,0x1b,0x1b, + 0x1b,0x1b,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a, + 0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a, + 0x1b,0x1b,0x1b,0x1b,0x1a,0x1b,0x1b,0x1b,0x1b,0x1c,0x1b,0x1b,0x1b,0x1b,0x1b, + 0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1a,0x1a,0x1a,0x19,0x19,0x1a, + 0x1a,0x1a,0x1a,0x1a,0x1b,0x1c,0x1c,0x1c,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, + 0x1b,0x1b,0x1b,0x1b,0x1c,0x1d,0x1d,0x1d,0x1c,0x1b,0x1b,0x1b,0x1c,0x1c,0x1c, + 0x1c,0x1c,0x1b,0x1b,0x1b,0x1a,0x1a,0x1a,0x1a,0x1a,0x1b,0x1b,0x1b,0x1b,0x1b, + 0x1b,0x1b,0x1b,0x1b,0x1b,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c, + 0x1c,0x1c,0x1c,0x1d,0x1d,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c, + 0x1b,0x1c,0x1d,0x1d,0x1d,0x1d,0x1e,0x1e,0x1d,0x1d,0x1d,0x1c,0x1c,0x1b,0x1b, + 0x1c,0x1c,0x1c,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1b,0x1b, + 0x1c,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1e,0x1e,0x1e,0x1e,0x1d,0x1d, + 0x1d,0x1d,0x1d,0xc8,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x13,0x13,0x13,0x13, + 0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x83,0xc2,0xc2,0xc2,0x57, + 0x14,0x14,0x15,0x15,0x15,0x15,0x15,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14, + 0x15,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x14,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16, + 0x16,0x17,0x17,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16, + 0x17,0x16,0x15,0x15,0x15,0x15,0x15,0x15,0x16,0x16,0x16,0x16,0x17,0x17,0x17, + 0x17,0x16,0x17,0x17,0x17,0x16,0x15,0x15,0x16,0x16,0x16,0x16,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x16,0x16,0x16,0x17,0x17,0x17,0x17,0x18,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x19,0x19,0x19,0x18,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x19, + 0x19,0x19,0x19,0x18,0x18,0x19,0x19,0x19,0x19,0x19,0x18,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x1a,0x1a,0x1a,0x19,0x19,0x19,0x19,0x19,0x1a, + 0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x19,0x1a,0x1a,0x1a,0x1a,0x1a,0x1b, + 0x1b,0x1b,0x1b,0x1b,0x1b,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a, + 0x1a,0x1a,0x1a,0x19,0x1a,0x1b,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a, + 0x1a,0x1a,0x1a,0x1b,0x1b,0x1a,0x1a,0x1a,0x1b,0x1b,0x1b,0x1c,0x1b,0x1b,0x1b, + 0x1b,0x1c,0x1c,0x1b,0x1b,0x1b,0x1b,0x1b,0x1c,0x1c,0x1b,0x1b,0x1b,0x1b,0x1a, + 0x1b,0x1c,0x1b,0x1b,0x1b,0x1b,0x1c,0x1c,0x1d,0x1d,0x1c,0x1b,0x1b,0x1b,0x1b, + 0x1c,0x1c,0x1c,0x1c,0x1c,0x1b,0x1c,0x1c,0x1d,0x1d,0x1c,0x1b,0x1b,0x1b,0x1c, + 0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1b,0x1b,0x1b,0x1b,0x1c,0x1c,0x1c,0x1c, + 0x1c,0x1c,0x1b,0x1c,0x1c,0x1c,0x1c,0x1c,0x1d,0x1d,0x1d,0x1c,0x1c,0x1c,0x1d, + 0x1d,0x1d,0x1d,0x1c,0x1c,0x1d,0x1d,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c, + 0x1c,0x1c,0x1c,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1c,0x1c, + 0x1b,0x1c,0x1c,0x1c,0x1c,0x1d,0x1d,0x1d,0x1d,0x1e,0x1e,0x1d,0x1d,0x1d,0x1d, + 0x1c,0x1c,0x1c,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d, + 0x1d,0x1d,0x1d,0x1d,0x1c,0xc8,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13, + 0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x77,0xc2,0xc2, + 0xaf,0x13,0x13,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14, + 0x14,0x14,0x14,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x16,0x16,0x16,0x16,0x16,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x16,0x16,0x16,0x16,0x16,0x15,0x15, + 0x15,0x16,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17, + 0x17,0x17,0x17,0x17,0x15,0x15,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x17, + 0x18,0x18,0x17,0x16,0x16,0x16,0x16,0x15,0x15,0x15,0x15,0x16,0x16,0x16,0x16, + 0x15,0x15,0x15,0x15,0x15,0x15,0x16,0x16,0x16,0x17,0x17,0x17,0x17,0x17,0x18, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x18,0x18,0x18,0x18,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x1a,0x1a, + 0x19,0x19,0x19,0x19,0x19,0x19,0x1a,0x1a,0x1b,0x1b,0x1b,0x1a,0x19,0x19,0x19, + 0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a, + 0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a, + 0x1a,0x1a,0x1a,0x1a,0x19,0x19,0x1b,0x1b,0x1b,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a, + 0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1b,0x1b,0x1b,0x1b, + 0x1b,0x1b,0x1b,0x1c,0x1c,0x1c,0x1b,0x1b,0x1b,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c, + 0x1c,0x1c,0x1d,0x1d,0x1d,0x1d,0x1c,0x1c,0x1c,0x1d,0x1d,0x1d,0x1c,0x1b,0x1c, + 0x1c,0x1c,0x1c,0x1d,0x1d,0x1d,0x1c,0x1b,0x1b,0x1c,0x1c,0x1d,0x1c,0x1b,0x1b, + 0x1b,0x1c,0x1c,0x1c,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d, + 0x1d,0x1d,0x1d,0x1d,0x1c,0x1c,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1c, + 0x1c,0x1d,0x1d,0x1d,0x1d,0x1c,0x1c,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d, + 0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c, + 0x1c,0x1c,0x1c,0x1c,0x1d,0x1c,0x1c,0x1d,0x1d,0x1d,0x1e,0x1e,0x1e,0x1e,0x1d, + 0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d, + 0x1d,0x1d,0x1d,0x1d,0x1d,0x1c,0x1c,0xc8,0x13,0x13,0x13,0x13,0x13,0x13,0x13, + 0x13,0x13,0x13,0x13,0x13,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x51, + 0xc2,0xc2,0x90,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14, + 0x14,0x14,0x14,0x14,0x14,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x14,0x14,0x14,0x14,0x14,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x16,0x16,0x16,0x16, + 0x16,0x16,0x16,0x16,0x16,0x16,0x15,0x15,0x15,0x15,0x16,0x16,0x16,0x16,0x15, + 0x15,0x15,0x16,0x16,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17, + 0x17,0x17,0x17,0x17,0x17,0x17,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x17,0x17, + 0x17,0x18,0x18,0x18,0x17,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16, + 0x16,0x17,0x16,0x15,0x15,0x16,0x16,0x16,0x16,0x16,0x17,0x17,0x17,0x17,0x17, + 0x17,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x18,0x18,0x18,0x18,0x18, + 0x18,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x1a,0x1b,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1b,0x1b,0x1a,0x19, + 0x19,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x19,0x19,0x19,0x19,0x1a,0x1a, + 0x1a,0x1a,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1a,0x1a, + 0x19,0x19,0x19,0x1a,0x1a,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1a,0x1a, + 0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, + 0x1c,0x1c,0x1c,0x1c,0x1c,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, + 0x1b,0x1b,0x1c,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1c,0x1c,0x1d,0x1d,0x1d,0x1c, + 0x1c,0x1c,0x1c,0x1c,0x1d,0x1d,0x1d,0x1d,0x1c,0x1b,0x1b,0x1c,0x1c,0x1d,0x1c, + 0x1b,0x1b,0x1c,0x1c,0x1c,0x1c,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d, + 0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d, + 0x1d,0x1c,0x1c,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d, + 0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1c,0x1c,0x1d, + 0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1e,0x1e,0x1e, + 0x1e,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d, + 0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0xc8,0x13,0x13,0x13,0x13,0x13, + 0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14, + 0x14,0x25,0xc2,0xc2,0x6a,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14, + 0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x14,0x14,0x14,0x14,0x14, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x16,0x16, + 0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x15,0x15,0x15,0x16,0x16,0x16,0x16, + 0x16,0x15,0x15,0x16,0x16,0x16,0x16,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17, + 0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x16,0x16,0x16,0x16,0x16,0x16,0x16, + 0x17,0x18,0x18,0x18,0x18,0x18,0x18,0x17,0x16,0x16,0x16,0x16,0x16,0x16,0x16, + 0x16,0x16,0x16,0x17,0x16,0x15,0x16,0x16,0x16,0x16,0x16,0x17,0x17,0x17,0x17, + 0x17,0x17,0x17,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x18,0x18,0x19,0x19,0x19,0x19,0x19,0x18,0x18, + 0x18,0x18,0x18,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0x1a,0x1b,0x1b,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1b, + 0x1a,0x19,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x19,0x19,0x19,0x19,0x19, + 0x1a,0x1a,0x1a,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1c,0x1c,0x1b, + 0x1a,0x1a,0x19,0x19,0x19,0x1a,0x1b,0x1b,0x1c,0x1c,0x1b,0x1b,0x1b,0x1b,0x1b, + 0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, + 0x1b,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, + 0x1b,0x1b,0x1b,0x1b,0x1b,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1c,0x1c,0x1d,0x1d, + 0x1d,0x1c,0x1c,0x1d,0x1d,0x1c,0x1c,0x1d,0x1d,0x1d,0x1c,0x1b,0x1b,0x1c,0x1c, + 0x1d,0x1c,0x1b,0x1c,0x1c,0x1c,0x1c,0x1c,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d, + 0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d, + 0x1d,0x1d,0x1d,0x1c,0x1c,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d, + 0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d, + 0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d, + 0x1e,0x1e,0x1e,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d, + 0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0xc8,0x13,0x13,0x13, + 0x13,0x13,0x13,0x13,0x13,0x13,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14, + 0x14,0x14,0x14,0x12,0xb5,0xc2,0x45,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14, + 0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16, + 0x16,0x16,0x16,0x15,0x15,0x16,0x16,0x16,0x16,0x16,0x17,0x17,0x16,0x16,0x16, + 0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x15,0x15,0x15, + 0x16,0x17,0x18,0x19,0x19,0x19,0x19,0x19,0x18,0x17,0x17,0x17,0x17,0x16,0x16, + 0x16,0x16,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17, + 0x17,0x17,0x17,0x17,0x17,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x18,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x1a,0x1a,0x1a,0x1a, + 0x1a,0x1a,0x1a,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1a,0x1a,0x1a, + 0x1a,0x1a,0x19,0x19,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a, + 0x1a,0x1a,0x1a,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1c, + 0x1c,0x1b,0x1b,0x1b,0x1a,0x1a,0x1a,0x1a,0x1b,0x1c,0x1d,0x1d,0x1c,0x1b,0x1b, + 0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1c,0x1c,0x1c,0x1c, + 0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1d,0x1c,0x1b,0x1b,0x1c,0x1c,0x1c,0x1c, + 0x1c,0x1c,0x1b,0x1b,0x1b,0x1b,0x1c,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1c,0x1c, + 0x1d,0x1d,0x1c,0x1b,0x1b,0x1d,0x1d,0x1d,0x1c,0x1c,0x1c,0x1c,0x1c,0x1b,0x1b, + 0x1c,0x1c,0x1d,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d, + 0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d, + 0x1c,0x1c,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1e,0x1d,0x1d,0x1d,0x1d,0x1d, + 0x1d,0x1d,0x1d,0x1d,0x1d,0x1c,0x1c,0x1d,0x1d,0x1d,0x1d,0x1c,0x1c,0x1d,0x1d, + 0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1e,0x1e,0x1e,0x1d,0x1d, + 0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1e,0x1e,0x1e,0x1d,0x1d,0x1d,0x1d, + 0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0xc8,0x13, + 0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x14,0x14,0x14,0x14,0x14,0x14,0x14, + 0x14,0x14,0x14,0x14,0x14,0x14,0x9c,0xc2,0x12,0x14,0x14,0x14,0x14,0x14,0x14, + 0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16, + 0x16,0x16,0x16,0x16,0x16,0x15,0x15,0x15,0x16,0x16,0x16,0x16,0x16,0x16,0x16, + 0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x17,0x16,0x15, + 0x15,0x15,0x16,0x17,0x18,0x19,0x19,0x19,0x19,0x19,0x18,0x17,0x17,0x17,0x17, + 0x17,0x16,0x16,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17, + 0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a, + 0x1a,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x18,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x1a,0x1a, + 0x1a,0x1a,0x1a,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, + 0x1a,0x1a,0x1a,0x1a,0x19,0x19,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1b, + 0x1b,0x1b,0x1b,0x1b,0x1b,0x1c,0x1c,0x1c,0x1b,0x1c,0x1b,0x1b,0x1b,0x1a,0x1a, + 0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1c,0x1c,0x1c,0x1c,0x1b, + 0x1b,0x1b,0x1b,0x1b,0x1c,0x1c,0x1c,0x1b,0x1b,0x1b,0x1b,0x1b,0x1c,0x1c,0x1c, + 0x1d,0x1d,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1d,0x1c,0x1b,0x1c,0x1d,0x1d, + 0x1d,0x1d,0x1d,0x1c,0x1c,0x1b,0x1b,0x1c,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d, + 0x1d,0x1c,0x1d,0x1d,0x1c,0x1b,0x1b,0x1d,0x1d,0x1d,0x1c,0x1c,0x1c,0x1c,0x1c, + 0x1c,0x1b,0x1c,0x1c,0x1d,0x1d,0x1c,0x1c,0x1c,0x1c,0x1d,0x1d,0x1d,0x1d,0x1d, + 0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d, + 0x1d,0x1d,0x1c,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1e,0x1e,0x1e,0x1d,0x1d, + 0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1c,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1c, + 0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1e,0x1d,0x1d,0x1d,0x1d,0x1e,0x1e,0x1e, + 0x1e,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1e,0x1e,0x1e,0x1e,0x1d, + 0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d, + 0xc8,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x14,0x14,0x14,0x14,0x14, + 0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x70,0xb5,0x14,0x14,0x14,0x14,0x14, + 0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16, + 0x16,0x16,0x16,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x16,0x16,0x16,0x16, + 0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x17,0x17,0x17,0x17, + 0x17,0x16,0x15,0x15,0x16,0x17,0x18,0x19,0x19,0x19,0x19,0x18,0x18,0x18,0x17, + 0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x18,0x18,0x17,0x17,0x17,0x17, + 0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x18,0x18,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x1a,0x1a,0x1a,0x1a,0x1a, + 0x1a,0x1a,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x1a,0x1a,0x1a,0x1a,0x1a,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, + 0x1b,0x1b,0x1b,0x1a,0x1a,0x1a,0x19,0x19,0x1a,0x1a,0x1a,0x1b,0x1b,0x1b,0x1b, + 0x1b,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1b,0x1a, + 0x1a,0x1a,0x1a,0x1b,0x1b,0x1b,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1b, + 0x1b,0x1b,0x1b,0x1b,0x1c,0x1c,0x1c,0x1c,0x1c,0x1b,0x1b,0x1b,0x1b,0x1b,0x1c, + 0x1c,0x1d,0x1d,0x1d,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1d,0x1c,0x1b,0x1c, + 0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1c,0x1c,0x1c,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d, + 0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1c,0x1c,0x1c,0x1d,0x1d,0x1c,0x1c,0x1c,0x1c, + 0x1c,0x1d,0x1d,0x1c,0x1c,0x1c,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d, + 0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d, + 0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1e,0x1e,0x1e, + 0x1e,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d, + 0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1e,0x1d,0x1d,0x1d,0x1d,0x1e, + 0x1e,0x1e,0x1e,0x1e,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1e,0x1e,0x1e, + 0x1e,0x1e,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d, + 0x1d,0x1d,0xc8,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x14,0x14,0x14,0x14,0x14, + 0x15,0x15,0x14,0x14,0x14,0x14,0x14,0x14,0x06,0x14,0x19,0xa3,0x0c,0x14,0x14, + 0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16, + 0x16,0x16,0x16,0x16,0x16,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x16, + 0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x17,0x17,0x17,0x17,0x17, + 0x17,0x17,0x17,0x16,0x15,0x15,0x16,0x17,0x17,0x18,0x18,0x18,0x18,0x17,0x18, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x17,0x17, + 0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x17,0x17,0x18,0x18,0x18,0x18,0x18, + 0x18,0x18,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x1a,0x1a,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1b,0x1b,0x1b,0x1b, + 0x1b,0x1b,0x1b,0x1b,0x1b,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1b,0x1b,0x1b, + 0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1c,0x1c,0x1b,0x1b,0x1c,0x1c,0x1c,0x1b, + 0x1b,0x1b,0x1b,0x1a,0x1a,0x1b,0x1b,0x1b,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c, + 0x1b,0x1b,0x1b,0x1b,0x1b,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c, + 0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1d,0x1d, + 0x1c,0x1c,0x1d,0x1e,0x1e,0x1d,0x1d,0x1d,0x1c,0x1c,0x1d,0x1d,0x1d,0x1d,0x1d, + 0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1c,0x1c,0x1c, + 0x1c,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d, + 0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d, + 0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1e, + 0x1e,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1e,0x1d,0x1d,0x1d,0x1e, + 0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1c,0x1c,0x1d,0x1d,0x1d,0x1e,0x1e,0x1d,0x1d, + 0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1e, + 0x1e,0x1e,0x1e,0x1e,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d, + 0x1c,0x1c,0x1d,0x1d,0xc8,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x14,0x14,0x14, + 0x14,0x14,0x15,0x15,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x45,0x14, + 0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14, + 0x14,0x14,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x16,0x16,0x16,0x16,0x16,0x16,0x16, + 0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x17,0x17,0x17,0x17, + 0x17,0x17,0x17,0x17,0x17,0x16,0x15,0x15,0x16,0x16,0x17,0x17,0x18,0x18,0x17, + 0x17,0x17,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x17,0x17,0x17,0x17,0x18,0x18, + 0x18,0x18,0x18,0x18,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x1a,0x1a,0x1a, + 0x1a,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1b, + 0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1b,0x1b, + 0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1a,0x1b,0x1b,0x1b,0x1c, + 0x1b,0x1b,0x1b,0x1b,0x1b,0x1a,0x1a,0x1b,0x1b,0x1b,0x1c,0x1c,0x1c,0x1c,0x1c, + 0x1c,0x1c,0x1b,0x1b,0x1b,0x1b,0x1b,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c, + 0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c, + 0x1d,0x1d,0x1c,0x1c,0x1d,0x1e,0x1e,0x1d,0x1d,0x1d,0x1c,0x1c,0x1d,0x1d,0x1d, + 0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1c, + 0x1c,0x1c,0x1c,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d, + 0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d, + 0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d, + 0x1d,0x1e,0x1e,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1e,0x1e,0x1e,0x1e, + 0x1e,0x1e,0x1e,0x1d,0x1e,0x1f,0x1e,0x1d,0x1c,0x1c,0x1c,0x1d,0x1e,0x1e,0x1e, + 0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d, + 0x1d,0x1e,0x1e,0x1e,0x1e,0x1e,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d, + 0x1d,0x1d,0x1d,0x1c,0x1d,0x1d,0xc8,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x14, + 0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14, + 0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14, + 0x14,0x14,0x14,0x14,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x16,0x16,0x16,0x16,0x16, + 0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x15,0x15,0x15,0x15,0x15,0x15,0x16, + 0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x17,0x17,0x17, + 0x17,0x17,0x17,0x17,0x17,0x18,0x18,0x17,0x16,0x16,0x16,0x16,0x17,0x17,0x17, + 0x17,0x17,0x16,0x17,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x18,0x18,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x18,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0x1a,0x1a,0x1a,0x19,0x19,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a, + 0x1a,0x1a,0x1a,0x1b,0x1a,0x1a,0x19,0x19,0x19,0x19,0x19,0x1a,0x1a,0x1a,0x19, + 0x19,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a, + 0x1a,0x1a,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1a,0x1a,0x1b,0x1b, + 0x1b,0x1b,0x1b,0x1b,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x19,0x19,0x19,0x1a, + 0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1d,0x1d,0x1c,0x1b,0x1b,0x1b, + 0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1c,0x1b,0x1b,0x1b,0x1c,0x1c,0x1c,0x1c,0x1c, + 0x1c,0x1c,0x1c,0x1c,0x1c,0x1d,0x1d,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1d, + 0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d, + 0x1d,0x1d,0x1d,0x1d,0x1c,0x1c,0x1c,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d, + 0x1d,0x1c,0x1c,0x1c,0x1d,0x1d,0x1e,0x1e,0x1e,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d, + 0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d, + 0x1d,0x1d,0x1d,0x1d,0x1d,0x1e,0x1e,0x1d,0x1d,0x1d,0x1d,0x1e,0x1e,0x1d,0x1d, + 0x1d,0x1d,0x1d,0x1e,0x1e,0x1d,0x1d,0x1d,0x1c,0x1c,0x1d,0x1d,0x1d,0x1d,0x1d, + 0x1e,0x1e,0x1d,0x1d,0x1d,0x1d,0x1e,0x20,0x1e,0x1d,0x1c,0x1c,0x1c,0x1d,0x1e, + 0x1e,0x1e,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d, + 0x1d,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d, + 0x1d,0x1e,0x1e,0x1d,0x1d,0x1d,0x1d,0x1d,0xc8,0x13,0x13,0x13,0x13,0x13,0x13, + 0x13,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14, + 0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14, + 0x14,0x14,0x14,0x14,0x14,0x14,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x16,0x16,0x16, + 0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x17,0x17,0x16,0x15,0x15,0x15,0x15, + 0x16,0x17,0x17,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x17,0x17, + 0x17,0x17,0x17,0x17,0x17,0x17,0x18,0x18,0x18,0x18,0x17,0x16,0x16,0x17,0x17, + 0x17,0x17,0x17,0x17,0x16,0x17,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x18,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17, + 0x17,0x17,0x18,0x19,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x1a,0x19,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a, + 0x1a,0x1a,0x1a,0x1a,0x1b,0x1b,0x1b,0x1a,0x1a,0x19,0x19,0x19,0x1a,0x1b,0x1b, + 0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a, + 0x1a,0x1a,0x1a,0x1a,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1a,0x1b, + 0x1b,0x1b,0x1b,0x1b,0x1b,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x19,0x19,0x19, + 0x19,0x1a,0x1a,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1c,0x1d,0x1d,0x1c,0x1b, + 0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1c,0x1c,0x1b,0x1b,0x1b,0x1b,0x1c,0x1c, + 0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1d,0x1d,0x1c,0x1c,0x1c,0x1b,0x1c,0x1c, + 0x1d,0x1d,0x1d,0x1c,0x1c,0x1c,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d, + 0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1c,0x1c,0x1c,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d, + 0x1d,0x1d,0x1d,0x1c,0x1d,0x1d,0x1d,0x1e,0x1e,0x1e,0x1d,0x1d,0x1d,0x1d,0x1d, + 0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d, + 0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1e,0x1e,0x1e,0x1d,0x1d,0x1d,0x1d,0x1d,0x1e, + 0x1d,0x1d,0x1d,0x1d,0x1d,0x1e,0x1e,0x1d,0x1d,0x1d,0x1c,0x1c,0x1d,0x1d,0x1d, + 0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1e,0x1f,0x1e,0x1d,0x1d,0x1d,0x1d, + 0x1d,0x1d,0x1e,0x1e,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d, + 0x1d,0x1d,0x1d,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1d,0x1d,0x1d,0x1d, + 0x1d,0x1d,0x1d,0x1e,0x1f,0x1e,0x1e,0x1d,0x1e,0x1e,0xc8,0x14,0x14,0x14,0x14, + 0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x14,0x14,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x16,0x16,0x16,0x16, + 0x16,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x16, + 0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x17,0x17,0x17,0x17,0x16,0x16, + 0x16,0x16,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x16,0x17,0x17,0x17, + 0x17,0x17,0x17,0x17,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x17,0x17,0x17, + 0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x18,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17, + 0x17,0x17,0x17,0x18,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a, + 0x19,0x19,0x19,0x19,0x19,0x1a,0x1b,0x1b,0x1a,0x1a,0x1a,0x1a,0x1a,0x1b,0x1b, + 0x1c,0x1c,0x1b,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a, + 0x1a,0x1a,0x1a,0x1b,0x1b,0x1b,0x1b,0x1b,0x1c,0x1c,0x1c,0x1c,0x1c,0x1b,0x1b, + 0x1b,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a, + 0x19,0x1a,0x1a,0x1a,0x1a,0x1b,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c, + 0x1c,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1c,0x1c,0x1c,0x1b,0x1b,0x1b,0x1c, + 0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1d,0x1d,0x1c,0x1c,0x1b,0x1b, + 0x1b,0x1d,0x1d,0x1d,0x1d,0x1d,0x1c,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d, + 0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1c,0x1c,0x1d,0x1d,0x1d,0x1d,0x1d, + 0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1e,0x1e,0x1e,0x1e,0x1e,0x1d,0x1d,0x1d, + 0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d, + 0x1d,0x1e,0x1e,0x1d,0x1d,0x1d,0x1d,0x1e,0x1e,0x1e,0x1e,0x1d,0x1d,0x1d,0x1d, + 0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1e,0x1e,0x1e,0x1e,0x1d,0x1d,0x1d,0x1d, + 0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1e,0x1e,0x1e,0x1d, + 0x1d,0x1d,0x1d,0x1d,0x1e,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1e,0x1e,0x1e, + 0x1e,0x1e,0x1d,0x1d,0x1d,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e, + 0x1e,0x1e,0x1e,0x1e,0x1e,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0xc8,0x14,0x14, + 0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x14,0x14,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x16,0x16,0x16, + 0x16,0x16,0x16,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x16,0x16,0x16,0x16,0x16,0x16,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17, + 0x17,0x17,0x17,0x17,0x17,0x17,0x18,0x18,0x18,0x17,0x17,0x17,0x17,0x17,0x17, + 0x17,0x17,0x17,0x17,0x17,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x18,0x18,0x17,0x17,0x17,0x17,0x17,0x17,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17, + 0x17,0x17,0x17,0x17,0x17,0x18,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a, + 0x1a,0x1a,0x19,0x19,0x19,0x19,0x19,0x19,0x1a,0x1a,0x1a,0x19,0x19,0x1a,0x1a, + 0x1b,0x1c,0x1c,0x1c,0x1b,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1b,0x1b,0x1b,0x1b, + 0x1b,0x1b,0x1b,0x1a,0x1b,0x1b,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c, + 0x1c,0x1c,0x1c,0x1a,0x19,0x19,0x19,0x1a,0x1a,0x1a,0x1b,0x1b,0x1b,0x1b,0x1c, + 0x1c,0x1b,0x1b,0x1b,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1b, + 0x1a,0x1b,0x1b,0x1b,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1b,0x1b,0x1b, + 0x1b,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1b,0x1d,0x1d,0x1c,0x1b, + 0x1a,0x1a,0x1b,0x1d,0x1d,0x1e,0x1d,0x1d,0x1c,0x1d,0x1e,0x1d,0x1d,0x1d,0x1d, + 0x1d,0x1d,0x1d,0x1e,0x1e,0x1e,0x1d,0x1d,0x1f,0x1e,0x1d,0x1d,0x1d,0x1e,0x1f, + 0x1f,0x1d,0x1d,0x1d,0x1e,0x1e,0x1e,0x1d,0x1e,0x1e,0x1f,0x1f,0x1e,0x1d,0x1d, + 0x1c,0x1d,0x1d,0x1e,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d, + 0x1d,0x1d,0x1e,0x1f,0x1e,0x1e,0x1d,0x1d,0x1d,0x1e,0x1e,0x1e,0x1e,0x1d,0x1d, + 0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1e,0x1f,0x1f,0x1e,0x1e,0x1e, + 0x1e,0x1e,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1e, + 0x1e,0x1e,0x1e,0x1e,0x1e,0x1d,0x1d,0x1d,0x1e,0x1f,0x1e,0x1d,0x1d,0x1e,0x1e, + 0x1f,0x1f,0x1e,0x1e,0x1d,0x1d,0x1e,0x1e,0x1e,0x1f,0x1f,0x1f,0x1e,0x1e,0x1e, + 0x1e,0x1e,0x1e,0x1f,0x1f,0x1f,0x1f,0x1e,0x1f,0x20,0x20,0x20,0x20,0x1f,0xc8, + 0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x14,0x14,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x16,0x16, + 0x16,0x16,0x16,0x16,0x16,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x16,0x16,0x16,0x16,0x16,0x17,0x17,0x17,0x17,0x17,0x17,0x17, + 0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x18,0x18,0x17,0x17,0x17,0x17, + 0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x17,0x17,0x17,0x17,0x18,0x18,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x17,0x17,0x17,0x17,0x17, + 0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x18,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x1a,0x1a,0x1a,0x1b,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a, + 0x1a,0x1a,0x1a,0x1a,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x1a,0x19,0x19,0x19, + 0x19,0x1a,0x1b,0x1b,0x1b,0x1b,0x1b,0x1a,0x1a,0x1a,0x1a,0x1a,0x1b,0x1b,0x1b, + 0x1b,0x1b,0x1b,0x1b,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c, + 0x1c,0x1c,0x1c,0x1c,0x1c,0x1a,0x19,0x19,0x1a,0x1a,0x1a,0x1a,0x1b,0x1b,0x1b, + 0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c, + 0x1b,0x1b,0x1b,0x1b,0x1b,0x1c,0x1c,0x1d,0x1d,0x1d,0x1d,0x1d,0x1c,0x1c,0x1b, + 0x1b,0x1b,0x1b,0x1c,0x1c,0x1c,0x1c,0x1c,0x1d,0x1d,0x1d,0x1c,0x1b,0x1d,0x1d, + 0x1d,0x1b,0x1b,0x1b,0x1c,0x1d,0x1e,0x1e,0x1e,0x1d,0x1d,0x1d,0x1e,0x1d,0x1d, + 0x1d,0x1d,0x1d,0x1d,0x1d,0x1e,0x1e,0x1e,0x1d,0x1d,0x1e,0x1e,0x1e,0x1e,0x1e, + 0x1f,0x1f,0x1f,0x1d,0x1d,0x1d,0x1e,0x1f,0x1e,0x1e,0x1e,0x1e,0x1f,0x1f,0x1e, + 0x1d,0x1d,0x1c,0x1d,0x1d,0x1e,0x1e,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d, + 0x1d,0x1d,0x1d,0x1d,0x1e,0x1f,0x1f,0x1e,0x1d,0x1d,0x1d,0x1e,0x1e,0x1e,0x1e, + 0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1e,0x1f,0x1f,0x1f, + 0x1e,0x1f,0x1f,0x1f,0x1e,0x1d,0x1e,0x1d,0x1d,0x1d,0x1d,0x1e,0x1e,0x1e,0x1e, + 0x1d,0x1e,0x1f,0x1f,0x20,0x1f,0x1f,0x1e,0x1e,0x1e,0x1e,0x1f,0x1f,0x1e,0x1e, + 0x1f,0x1f,0x1f,0x1f,0x1e,0x1e,0x1d,0x1e,0x1e,0x1e,0x1e,0x1f,0x1f,0x1f,0x1e, + 0x1e,0x1e,0x1e,0x1e,0x1f,0x1f,0x1f,0x1f,0x1f,0x1e,0x1e,0x1f,0x20,0x20,0x1f, + 0x1e,0xc8,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x16,0x16,0x15,0x15,0x15,0x16,0x16,0x16, + 0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16, + 0x16,0x16,0x16,0x16,0x16,0x17,0x18,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17, + 0x17,0x17,0x17,0x17,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16, + 0x16,0x16,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x18,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x18,0x18,0x19,0x19,0x19,0x19,0x19, + 0x18,0x18,0x18,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0x1a,0x1b,0x1c,0x1c,0x1c,0x1b,0x1b,0x1a,0x19,0x19,0x19,0x19,0x19,0x1a, + 0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x1a,0x1a, + 0x1a,0x1a,0x1a,0x19,0x19,0x19,0x19,0x1a,0x1b,0x1b,0x1b,0x1c,0x1c,0x1c,0x1c, + 0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d, + 0x1d,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1b,0x1a,0x1a,0x1b,0x1c,0x1b,0x1a,0x1a, + 0x1a,0x1b,0x1b,0x1b,0x1b,0x1b,0x1c,0x1c,0x1b,0x1a,0x1a,0x1a,0x1b,0x1b,0x1c, + 0x1c,0x1c,0x1c,0x1c,0x1d,0x1d,0x1d,0x1d,0x1d,0x1c,0x1c,0x1d,0x1d,0x1d,0x1d, + 0x1d,0x1d,0x1d,0x1d,0x1c,0x1c,0x1c,0x1d,0x1d,0x1d,0x1e,0x1e,0x1d,0x1d,0x1c, + 0x1c,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d, + 0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d, + 0x1d,0x1d,0x1e,0x1e,0x1d,0x1d,0x1d,0x1d,0x1e,0x1f,0x1e,0x1d,0x1e,0x1e,0x1e, + 0x1e,0x1e,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1e,0x1f,0x1e,0x1e,0x1d,0x1d,0x1d, + 0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1e,0x1e,0x1e,0x1d,0x1d,0x1e,0x1f,0x1f, + 0x1f,0x1f,0x1e,0x1e,0x1e,0x1d,0x1d,0x1e,0x1e,0x1e,0x1d,0x1d,0x1d,0x1e,0x1f, + 0x1f,0x1f,0x1e,0x1e,0x1e,0x1e,0x1e,0x1f,0x20,0x1f,0x1e,0x1f,0x20,0x20,0x1f, + 0x1e,0x1e,0x1f,0x1f,0x1f,0x20,0x20,0x20,0x20,0x20,0x20,0x1f,0x1f,0x1e,0x1f, + 0x20,0x20,0x20,0x20,0x1f,0x1e,0x1d,0x1d,0x1e,0x1e,0x1e,0x1d,0x1d,0x1e,0x1e, + 0x1e,0x1d,0x1d,0x1e,0x1e,0x1f,0x20,0x20,0x1f,0x1f,0x1f,0x1e,0x1e,0x1e,0x1e, + 0x1e,0x1d,0x1d,0xc8,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x16,0x16,0x15,0x15,0x15,0x15, + 0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x15,0x16,0x16,0x16,0x16,0x16,0x16,0x16, + 0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x17,0x18,0x18,0x17,0x18,0x17,0x17,0x17, + 0x17,0x17,0x17,0x17,0x17,0x17,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16, + 0x16,0x16,0x16,0x16,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17, + 0x17,0x17,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x18, + 0x18,0x18,0x19,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x18,0x18,0x19,0x19,0x19, + 0x19,0x19,0x18,0x18,0x18,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x1a,0x1b,0x1b,0x1c,0x1c,0x1b,0x1b,0x1a,0x1a,0x19,0x19,0x19, + 0x1a,0x1b,0x1b,0x1b,0x1a,0x1a,0x1a,0x1a,0x19,0x19,0x19,0x19,0x19,0x19,0x1a, + 0x1a,0x1b,0x1a,0x1a,0x1a,0x19,0x19,0x19,0x1a,0x1b,0x1b,0x1b,0x1b,0x1c,0x1c, + 0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d, + 0x1d,0x1d,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1b,0x1b,0x1c,0x1c,0x1d,0x1c, + 0x1b,0x1b,0x1b,0x1b,0x1c,0x1c,0x1b,0x1c,0x1c,0x1b,0x1b,0x1a,0x1a,0x1a,0x1b, + 0x1b,0x1b,0x1c,0x1c,0x1c,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1c,0x1d,0x1d,0x1d, + 0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1c,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d, + 0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d, + 0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1c, + 0x1c,0x1c,0x1d,0x1d,0x1e,0x1d,0x1d,0x1d,0x1d,0x1d,0x1e,0x1e,0x1e,0x1e,0x1e, + 0x1e,0x1e,0x1e,0x1e,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1e,0x1f,0x1e,0x1d,0x1d, + 0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1e,0x1d,0x1d,0x1d,0x1e, + 0x1e,0x1e,0x1f,0x1e,0x1e,0x1e,0x1d,0x1d,0x1d,0x1e,0x1e,0x1e,0x1d,0x1d,0x1d, + 0x1f,0x1f,0x1f,0x1e,0x1d,0x1d,0x1d,0x1d,0x1e,0x1f,0x1f,0x1f,0x1d,0x1e,0x20, + 0x20,0x20,0x1e,0x1e,0x1f,0x1f,0x1f,0x20,0x20,0x20,0x20,0x20,0x20,0x1f,0x1f, + 0x1e,0x1f,0x20,0x20,0x20,0x20,0x1f,0x1d,0x1d,0x1d,0x1e,0x1e,0x1e,0x1d,0x1d, + 0x1e,0x1e,0x1e,0x1d,0x1d,0x1e,0x1f,0x1f,0x20,0x20,0x1f,0x1f,0x1f,0x1e,0x1e, + 0x1e,0x1e,0x1e,0x1d,0x1d,0xc8,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x16,0x16,0x15,0x15, + 0x15,0x15,0x15,0x16,0x16,0x16,0x16,0x16,0x15,0x15,0x15,0x16,0x16,0x16,0x16, + 0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x17,0x18,0x18,0x18,0x18,0x17, + 0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x16,0x16,0x16,0x16,0x16,0x16,0x16, + 0x16,0x16,0x16,0x16,0x16,0x16,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17, + 0x17,0x17,0x17,0x17,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x18,0x18,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x1a,0x1a,0x1a,0x1a,0x1b,0x1b,0x1b,0x1a,0x1a,0x1a, + 0x1a,0x1a,0x1b,0x1c,0x1c,0x1b,0x1b,0x1b,0x1a,0x1a,0x19,0x19,0x19,0x19,0x19, + 0x19,0x1a,0x1b,0x1b,0x1b,0x1a,0x1a,0x1a,0x1b,0x1b,0x1c,0x1c,0x1c,0x1b,0x1b, + 0x1b,0x1b,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1d,0x1d, + 0x1d,0x1d,0x1d,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1d,0x1d, + 0x1d,0x1c,0x1c,0x1c,0x1c,0x1c,0x1d,0x1d,0x1c,0x1c,0x1c,0x1b,0x1b,0x1b,0x1b, + 0x1b,0x1b,0x1b,0x1b,0x1b,0x1c,0x1c,0x1c,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d, + 0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d, + 0x1d,0x1d,0x1d,0x1d,0x1e,0x1e,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d, + 0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d, + 0x1d,0x1b,0x1b,0x1c,0x1d,0x1d,0x1e,0x1e,0x1d,0x1d,0x1d,0x1d,0x1e,0x1e,0x1e, + 0x1e,0x1e,0x1f,0x1f,0x1e,0x1e,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1e,0x1e,0x1d, + 0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d, + 0x1d,0x1d,0x1d,0x1d,0x1e,0x1e,0x1d,0x1d,0x1d,0x1d,0x1d,0x1e,0x1e,0x1e,0x1d, + 0x1d,0x1e,0x20,0x20,0x1f,0x1e,0x1d,0x1d,0x1d,0x1d,0x1e,0x1f,0x1e,0x1d,0x1d, + 0x1d,0x1e,0x20,0x20,0x1e,0x1e,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f, + 0x1f,0x1f,0x1e,0x1e,0x1f,0x1f,0x1f,0x1f,0x1e,0x1d,0x1d,0x1d,0x1e,0x1e,0x1e, + 0x1d,0x1d,0x1e,0x1e,0x1e,0x1d,0x1d,0x1e,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f, + 0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0xc8,0x14,0x14,0x14,0x14,0x14,0x14,0x14, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x16,0x16,0x16,0x16,0x16,0x16,0x16, + 0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x15,0x15,0x15,0x16,0x16, + 0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x17,0x17,0x17,0x17,0x18,0x19,0x19,0x18, + 0x18,0x18,0x18,0x17,0x17,0x17,0x17,0x17,0x17,0x16,0x16,0x16,0x16,0x16,0x16, + 0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x17,0x17,0x17,0x17,0x17,0x17,0x17, + 0x17,0x17,0x17,0x17,0x17,0x17,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0x1a,0x1a,0x1a,0x1a,0x19,0x19,0x19,0x19,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a, + 0x1a,0x1a,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1a,0x1a,0x19,0x19,0x19, + 0x19,0x1a,0x1a,0x1b,0x1c,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1c,0x1d,0x1d,0x1c, + 0x1b,0x1a,0x1b,0x1b,0x1b,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c, + 0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c, + 0x1d,0x1d,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1d,0x1d,0x1c,0x1c,0x1c,0x1c,0x1c, + 0x1c,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1c,0x1c,0x1d,0x1d,0x1d,0x1d,0x1d, + 0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1c,0x1c, + 0x1c,0x1c,0x1c,0x1d,0x1d,0x1e,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d, + 0x1e,0x1e,0x1d,0x1d,0x1d,0x1e,0x1e,0x1e,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d, + 0x1d,0x1d,0x1d,0x1c,0x1c,0x1d,0x1d,0x1e,0x1f,0x1f,0x1e,0x1e,0x1d,0x1e,0x1e, + 0x1f,0x1e,0x1e,0x1e,0x1f,0x1f,0x1e,0x1e,0x1d,0x1d,0x1d,0x1d,0x1d,0x1e,0x1d, + 0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1e,0x1e, + 0x1e,0x1e,0x1e,0x1e,0x1d,0x1e,0x1e,0x1e,0x1e,0x1d,0x1e,0x1e,0x1e,0x1e,0x1d, + 0x1d,0x1d,0x1e,0x1f,0x20,0x20,0x1f,0x1e,0x1d,0x1e,0x1e,0x1e,0x1f,0x20,0x1f, + 0x1e,0x1d,0x1d,0x1e,0x20,0x20,0x1f,0x1f,0x1f,0x1f,0x1f,0x1e,0x1e,0x1e,0x1e, + 0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1d,0x1e,0x1e,0x1e,0x1e,0x1d,0x1d,0x1d,0x1e, + 0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1f,0x1f,0x1f,0x1f, + 0x1f,0x1f,0x1f,0x1f,0x1f,0x1e,0x1e,0x1e,0x1e,0xc8,0x14,0x14,0x14,0x14,0x14, + 0x14,0x14,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x16,0x16,0x16,0x16,0x16, + 0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x15,0x15,0x15, + 0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x17,0x17,0x17,0x17,0x17,0x18,0x19, + 0x19,0x19,0x18,0x18,0x18,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x16,0x16,0x16, + 0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x17,0x17,0x17,0x17,0x17, + 0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x19,0x19,0x1a,0x1a,0x1a,0x1a,0x1a, + 0x1a,0x1a,0x1a,0x1a,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1a,0x1a, + 0x19,0x1a,0x1a,0x1a,0x1a,0x1b,0x1c,0x1b,0x1b,0x1b,0x1b,0x1b,0x1c,0x1d,0x1d, + 0x1d,0x1c,0x1a,0x1a,0x1b,0x1b,0x1b,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c, + 0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c, + 0x1c,0x1c,0x1d,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1d,0x1d,0x1c,0x1c,0x1c, + 0x1c,0x1c,0x1c,0x1c,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1c,0x1d,0x1d,0x1d,0x1d, + 0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d, + 0x1c,0x1c,0x1c,0x1c,0x1c,0x1d,0x1d,0x1e,0x1d,0x1c,0x1d,0x1d,0x1d,0x1d,0x1d, + 0x1d,0x1d,0x1e,0x1e,0x1e,0x1d,0x1d,0x1e,0x1e,0x1e,0x1d,0x1d,0x1d,0x1d,0x1d, + 0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1e,0x1f,0x20,0x20,0x1f,0x1f,0x1e, + 0x1e,0x1f,0x1f,0x1d,0x1d,0x1e,0x1e,0x1f,0x1e,0x1e,0x1d,0x1d,0x1d,0x1d,0x1e, + 0x1e,0x1e,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1e, + 0x1e,0x1e,0x1f,0x1f,0x1f,0x1f,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1f,0x1f,0x1f, + 0x1e,0x1e,0x1d,0x1d,0x1e,0x1f,0x20,0x20,0x20,0x1e,0x1d,0x1f,0x1f,0x1e,0x1f, + 0x20,0x20,0x1e,0x1d,0x1d,0x1f,0x20,0x20,0x1f,0x1f,0x1f,0x1f,0x1f,0x1e,0x1e, + 0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1d,0x1e,0x1e,0x1e,0x1e,0x1d,0x1d, + 0x1d,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1f,0x1f,0x1f, + 0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1e,0x1e,0x1e,0xc8,0x14,0x14,0x14, + 0x14,0x14,0x14,0x14,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x16,0x16,0x16,0x16,0x16,0x16, + 0x16,0x16,0x16,0x16,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x16,0x16,0x16, + 0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x17,0x17,0x17,0x17,0x17,0x18, + 0x19,0x19,0x19,0x19,0x18,0x18,0x18,0x18,0x18,0x18,0x17,0x17,0x17,0x17,0x17, + 0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17, + 0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x18,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x18,0x18,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x1a,0x1a,0x1a,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x1a,0x1a,0x1a,0x1a,0x1a,0x1b,0x1a,0x1a,0x1a,0x1a,0x1a,0x1b,0x1b,0x1b,0x1b, + 0x1b,0x1b,0x1b,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1b,0x1b, + 0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1c, + 0x1c,0x1d,0x1d,0x1c,0x1a,0x1a,0x1b,0x1b,0x1c,0x1c,0x1c,0x1d,0x1d,0x1d,0x1c, + 0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d, + 0x1d,0x1d,0x1c,0x1c,0x1c,0x1c,0x1c,0x1b,0x1b,0x1b,0x1b,0x1c,0x1c,0x1c,0x1b, + 0x1b,0x1c,0x1d,0x1d,0x1d,0x1c,0x1c,0x1b,0x1b,0x1b,0x1b,0x1c,0x1d,0x1d,0x1d, + 0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d, + 0x1d,0x1d,0x1d,0x1d,0x1c,0x1c,0x1d,0x1d,0x1d,0x1d,0x1d,0x1c,0x1c,0x1c,0x1c, + 0x1c,0x1d,0x1d,0x1d,0x1d,0x1e,0x1e,0x1d,0x1d,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e, + 0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1d,0x1d,0x1d,0x1e,0x20,0x20,0x20,0x20, + 0x1f,0x1f,0x1f,0x1f,0x1f,0x1d,0x1c,0x1d,0x1e,0x1e,0x1e,0x1e,0x1d,0x1d,0x1d, + 0x1e,0x1e,0x1f,0x1e,0x1e,0x1d,0x1d,0x1d,0x1d,0x1d,0x1e,0x1e,0x1e,0x1e,0x1e, + 0x1e,0x1e,0x1f,0x20,0x20,0x20,0x20,0x20,0x1f,0x1f,0x1e,0x1e,0x1f,0x20,0x20, + 0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x20,0x20,0x20,0x20,0x1f,0x1e,0x1f,0x20, + 0x1f,0x1f,0x20,0x20,0x1f,0x1e,0x1f,0x20,0x21,0x21,0x20,0x1f,0x1f,0x1f,0x1f, + 0x1e,0x1e,0x1e,0x1e,0x1e,0x1f,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1f,0x1f, + 0x1e,0x1e,0x1e,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f, + 0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1e,0x1e,0xc8,0x14, + 0x14,0x14,0x14,0x14,0x14,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16, + 0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x15,0x15,0x15,0x16,0x16,0x16,0x16,0x16, + 0x16,0x16,0x16,0x16,0x16,0x16,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17, + 0x16,0x17,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x17,0x17,0x17,0x17,0x17, + 0x18,0x18,0x18,0x19,0x19,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x17,0x17, + 0x17,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x17, + 0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x18,0x18,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x18,0x18,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x1a, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x1a,0x1a,0x1a,0x1a,0x19,0x19, + 0x19,0x19,0x19,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a, + 0x1a,0x1a,0x1a,0x1a,0x1a,0x1b,0x1b,0x1b,0x1b,0x1a,0x1a,0x1a,0x1b,0x1b,0x1c, + 0x1b,0x1b,0x1b,0x1b,0x1b,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x19,0x1a,0x1a, + 0x1b,0x1b,0x1c,0x1c,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, + 0x1b,0x1b,0x1c,0x1c,0x1c,0x1c,0x1b,0x1b,0x1b,0x1c,0x1d,0x1c,0x1d,0x1d,0x1d, + 0x1d,0x1d,0x1c,0x1c,0x1c,0x1c,0x1c,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d, + 0x1d,0x1d,0x1d,0x1d,0x1d,0x1c,0x1d,0x1d,0x1c,0x1c,0x1b,0x1c,0x1c,0x1d,0x1d, + 0x1d,0x1c,0x1c,0x1c,0x1d,0x1d,0x1d,0x1d,0x1d,0x1c,0x1c,0x1b,0x1c,0x1d,0x1d, + 0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d, + 0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d, + 0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1e,0x1d,0x1e, + 0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1d,0x1d,0x1e,0x1f,0x20, + 0x20,0x1f,0x1e,0x1e,0x1e,0x1f,0x1e,0x1d,0x1c,0x1d,0x1e,0x1e,0x1e,0x1e,0x1d, + 0x1d,0x1d,0x1e,0x1f,0x1f,0x1f,0x1e,0x1d,0x1d,0x1d,0x1d,0x1e,0x1e,0x1e,0x1e, + 0x1e,0x1e,0x1e,0x1e,0x1f,0x1f,0x1f,0x20,0x20,0x20,0x1f,0x1e,0x1e,0x1e,0x1f, + 0x1f,0x20,0x1f,0x1f,0x1f,0x1f,0x20,0x20,0x20,0x20,0x1f,0x1f,0x20,0x1f,0x1f, + 0x20,0x20,0x1f,0x1f,0x20,0x20,0x20,0x1f,0x1f,0x20,0x21,0x20,0x1f,0x1f,0x1f, + 0x1f,0x1f,0x1e,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1e,0x1e,0x1e,0x1e,0x1e,0x1f, + 0x1f,0x1f,0x1f,0x1e,0x1f,0x1f,0x20,0x20,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f, + 0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1e, + 0xc8,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x16,0x16,0x16,0x16,0x16,0x16,0x16, + 0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x15,0x15,0x16,0x16,0x16,0x16, + 0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x17,0x17,0x17,0x17,0x17,0x17,0x17, + 0x17,0x17,0x17,0x17,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x17,0x17,0x17,0x17, + 0x17,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x18,0x18,0x18,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x18,0x18,0x18,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x1a,0x1a,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x1a,0x1a,0x1a,0x1a,0x1a, + 0x19,0x19,0x19,0x19,0x1a,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, + 0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, + 0x1c,0x1c,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1a,0x1a,0x1a,0x19,0x19, + 0x1a,0x1a,0x1b,0x1c,0x1c,0x1c,0x1c,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1c,0x1c, + 0x1c,0x1c,0x1b,0x1b,0x1b,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1d,0x1d,0x1d,0x1d, + 0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1c,0x1c,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d, + 0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1c,0x1c,0x1d,0x1d, + 0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1c,0x1c, + 0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d, + 0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1c,0x1c,0x1d, + 0x1e,0x1e,0x1e,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1c,0x1c,0x1c,0x1d,0x1d,0x1d, + 0x1d,0x1d,0x1d,0x1d,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1d,0x1e, + 0x1e,0x1f,0x1f,0x1e,0x1d,0x1d,0x1d,0x1e,0x1e,0x1d,0x1d,0x1d,0x1e,0x1e,0x1e, + 0x1e,0x1d,0x1d,0x1d,0x1e,0x1e,0x1f,0x1f,0x1e,0x1d,0x1d,0x1d,0x1e,0x1e,0x1e, + 0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1f,0x1f,0x1f,0x1e,0x1e,0x1e, + 0x1e,0x1e,0x1f,0x1f,0x1f,0x1f,0x1f,0x20,0x20,0x20,0x20,0x1f,0x1e,0x1e,0x1f, + 0x20,0x20,0x20,0x1f,0x1e,0x1e,0x1f,0x20,0x20,0x1f,0x20,0x20,0x20,0x20,0x1e, + 0x1e,0x1f,0x1f,0x1f,0x1f,0x20,0x20,0x20,0x20,0x20,0x20,0x1f,0x1e,0x1e,0x1e, + 0x1f,0x1f,0x20,0x20,0x1f,0x1f,0x1f,0x20,0x20,0x20,0x1f,0x1f,0x1f,0x1f,0x1f, + 0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x1f, + 0x1f,0x1f,0xc8,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x16,0x16,0x16,0x16,0x16,0x15,0x15,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16, + 0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x15,0x15,0x16,0x16, + 0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x17,0x17,0x17,0x17,0x17, + 0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17, + 0x17,0x17,0x17,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x19,0x19,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x18,0x18,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x18,0x18,0x18,0x18,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x1a,0x1a,0x1b, + 0x1a,0x1a,0x1a,0x19,0x19,0x1a,0x1b,0x1b,0x1b,0x1b,0x1b,0x1c,0x1c,0x1c,0x1c, + 0x1c,0x1c,0x1b,0x1b,0x1c,0x1c,0x1c,0x1c,0x1c,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, + 0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1c,0x1c,0x1c,0x1b,0x1b,0x1b, + 0x1a,0x1a,0x1a,0x1b,0x1c,0x1c,0x1d,0x1c,0x1c,0x1b,0x1a,0x1a,0x1a,0x1b,0x1c, + 0x1c,0x1d,0x1d,0x1c,0x1c,0x1b,0x1b,0x1c,0x1c,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d, + 0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d, + 0x1d,0x1d,0x1d,0x1d,0x1d,0x1e,0x1e,0x1e,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d, + 0x1d,0x1d,0x1e,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d, + 0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d, + 0x1d,0x1d,0x1d,0x1e,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1e,0x1e,0x1e,0x1d,0x1d, + 0x1c,0x1d,0x1f,0x1e,0x1e,0x1e,0x1e,0x1e,0x1d,0x1d,0x1d,0x1d,0x1d,0x1c,0x1d, + 0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1e, + 0x1e,0x1d,0x1d,0x1e,0x1e,0x1d,0x1d,0x1d,0x1d,0x1d,0x1e,0x1e,0x1d,0x1e,0x1e, + 0x1e,0x1e,0x1e,0x1e,0x1d,0x1d,0x1d,0x1d,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e, + 0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e, + 0x1e,0x1e,0x1e,0x1f,0x1f,0x1f,0x1e,0x1e,0x1f,0x20,0x20,0x20,0x20,0x1f,0x1e, + 0x1d,0x1e,0x1f,0x20,0x20,0x1f,0x1e,0x1e,0x1f,0x20,0x20,0x20,0x20,0x21,0x20, + 0x20,0x1d,0x1e,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x1f, + 0x1f,0x1f,0x1f,0x20,0x20,0x20,0x1f,0x1f,0x1f,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x1f,0xc8,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x16,0x16,0x16,0x16,0x16,0x15,0x15,0x16,0x16,0x16,0x16,0x16,0x16, + 0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x15, + 0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x17,0x17,0x17, + 0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17, + 0x17,0x17,0x17,0x17,0x17,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x19,0x19,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x18,0x18,0x18,0x18,0x18,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x1a, + 0x1a,0x1b,0x1b,0x1a,0x1a,0x1a,0x19,0x1a,0x1b,0x1b,0x1b,0x1b,0x1b,0x1c,0x1c, + 0x1c,0x1c,0x1c,0x1c,0x1b,0x1b,0x1c,0x1c,0x1c,0x1c,0x1c,0x1b,0x1b,0x1b,0x1b, + 0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1c,0x1c,0x1c,0x1c,0x1c, + 0x1c,0x1b,0x1b,0x1a,0x1b,0x1c,0x1c,0x1d,0x1d,0x1c,0x1c,0x1b,0x1a,0x1a,0x1a, + 0x1b,0x1c,0x1d,0x1d,0x1d,0x1d,0x1c,0x1c,0x1c,0x1c,0x1d,0x1d,0x1d,0x1d,0x1d, + 0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d, + 0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1e,0x1e,0x1e,0x1d,0x1d,0x1d,0x1d,0x1d, + 0x1d,0x1d,0x1d,0x1e,0x1e,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d, + 0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d, + 0x1d,0x1d,0x1d,0x1d,0x1d,0x1e,0x1e,0x1d,0x1d,0x1d,0x1d,0x1d,0x1e,0x1e,0x1e, + 0x1d,0x1d,0x1c,0x1d,0x1f,0x1e,0x1e,0x1e,0x1e,0x1e,0x1d,0x1d,0x1e,0x1e,0x1d, + 0x1d,0x1d,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1f,0x1f,0x1f,0x1f,0x1f, + 0x1f,0x1f,0x1e,0x1d,0x1d,0x1e,0x1e,0x1d,0x1d,0x1d,0x1d,0x1e,0x1e,0x1e,0x1e, + 0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1d,0x1d,0x1d,0x1d,0x1e,0x1e,0x1e,0x1e, + 0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e, + 0x1e,0x1e,0x1e,0x1e,0x1f,0x1f,0x1f,0x1f,0x1e,0x1e,0x1f,0x20,0x20,0x20,0x20, + 0x1f,0x1e,0x1d,0x1e,0x1f,0x20,0x20,0x20,0x1f,0x1f,0x20,0x20,0x20,0x20,0x20, + 0x21,0x21,0x20,0x1e,0x1f,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x1f,0x1f,0x1f,0x20,0x20,0x20,0x20,0x1f,0x1f,0x1f,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0xc8,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x15,0x16,0x16,0x16, + 0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16, + 0x16,0x16,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x16,0x16,0x16,0x16,0x16,0x17, + 0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17, + 0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x18,0x18, + 0x19,0x19,0x19,0x19,0x19,0x1a,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x1a,0x1a,0x1a,0x1b,0x1b,0x1b,0x1a,0x1a,0x19,0x1a,0x1b,0x1b,0x1b,0x1b,0x1b, + 0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1c,0x1c,0x1c,0x1b,0x1b,0x1b,0x1b, + 0x1b,0x1b,0x1b,0x1c,0x1c,0x1c,0x1c,0x1c,0x1b,0x1b,0x1b,0x1c,0x1c,0x1d,0x1d, + 0x1d,0x1d,0x1d,0x1c,0x1b,0x1b,0x1c,0x1c,0x1d,0x1c,0x1c,0x1c,0x1c,0x1b,0x1b, + 0x1b,0x1b,0x1b,0x1c,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d, + 0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d, + 0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d, + 0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1e,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d, + 0x1d,0x1d,0x1e,0x1e,0x1e,0x1e,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d, + 0x1d,0x1d,0x1e,0x1e,0x1d,0x1d,0x1d,0x1e,0x1e,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d, + 0x1e,0x1e,0x1d,0x1d,0x1d,0x1d,0x1e,0x1d,0x1d,0x1d,0x1e,0x1e,0x1e,0x1e,0x1f, + 0x1f,0x1f,0x1e,0x1e,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f, + 0x1f,0x1f,0x20,0x20,0x1f,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e, + 0x1f,0x1f,0x1f,0x1e,0x1e,0x1e,0x1e,0x1f,0x1f,0x1f,0x1e,0x1d,0x1d,0x1e,0x1f, + 0x1f,0x1f,0x1e,0x1e,0x1f,0x1f,0x1f,0x1f,0x1e,0x1e,0x1e,0x1e,0x1f,0x1e,0x1e, + 0x1e,0x1e,0x1f,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x1f,0x1f,0x20,0x20, + 0x20,0x20,0x20,0x1e,0x1e,0x1e,0x1f,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x21,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x1f,0x20,0x20,0x20,0x20,0x1f,0x1f,0x1f,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0xc8,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x16,0x16,0x16,0x16,0x16,0x16,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x16,0x16,0x16,0x16,0x16,0x16, + 0x16,0x15,0x16,0x16,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x16,0x16,0x16, + 0x16,0x17,0x17,0x17,0x17,0x18,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17, + 0x18,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x18,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x18,0x18,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x18,0x18,0x19,0x19,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x19, + 0x19,0x1a,0x1a,0x1a,0x1a,0x1b,0x1b,0x1b,0x1a,0x1a,0x19,0x1a,0x1c,0x1c,0x1c, + 0x1c,0x1c,0x1b,0x1b,0x1b,0x1c,0x1b,0x1b,0x1b,0x1b,0x1c,0x1c,0x1b,0x1b,0x1a, + 0x1a,0x1a,0x1a,0x1b,0x1b,0x1c,0x1c,0x1c,0x1d,0x1c,0x1c,0x1b,0x1b,0x1c,0x1c, + 0x1d,0x1d,0x1d,0x1d,0x1d,0x1c,0x1c,0x1c,0x1c,0x1c,0x1d,0x1c,0x1c,0x1b,0x1b, + 0x1b,0x1b,0x1c,0x1c,0x1c,0x1c,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1e,0x1e, + 0x1d,0x1c,0x1c,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d, + 0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1e, + 0x1e,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1e,0x1f,0x1e,0x1d,0x1d,0x1d,0x1d,0x1d, + 0x1d,0x1d,0x1d,0x1d,0x1e,0x1e,0x1e,0x1e,0x1e,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d, + 0x1d,0x1d,0x1d,0x1d,0x1e,0x1e,0x1d,0x1d,0x1d,0x1e,0x1e,0x1e,0x1e,0x1e,0x1d, + 0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1e,0x1f,0x1e,0x1d,0x1d,0x1e,0x1e,0x1e, + 0x1e,0x1f,0x1e,0x1e,0x1d,0x1e,0x20,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f, + 0x1f,0x1f,0x1e,0x1f,0x1f,0x1f,0x1e,0x1e,0x1e,0x1e,0x1f,0x1f,0x1e,0x1e,0x1e, + 0x1e,0x1e,0x1f,0x1f,0x1f,0x1e,0x1e,0x1e,0x1e,0x20,0x20,0x20,0x1f,0x1f,0x1e, + 0x1f,0x20,0x20,0x1f,0x1f,0x1f,0x20,0x20,0x20,0x20,0x1f,0x1e,0x1e,0x1e,0x1f, + 0x1e,0x1e,0x1e,0x1e,0x1f,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x1f, + 0x20,0x20,0x20,0x20,0x20,0x1f,0x1f,0x1e,0x1f,0x20,0x20,0x20,0x20,0x20,0x21, + 0x21,0x20,0x1f,0x1f,0x20,0x21,0x21,0x20,0x20,0x21,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x1f,0x1f,0x1f, + 0x20,0x20,0x21,0x20,0x20,0x20,0x20,0x20,0x20,0x21,0x21,0x20,0x20,0x20,0x20, + 0x20,0x21,0x20,0x20,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0xc8,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x16,0x16,0x16,0x16,0x16,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x16,0x16,0x16,0x15, + 0x15,0x15,0x15,0x15,0x16,0x16,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x16, + 0x16,0x16,0x16,0x17,0x17,0x17,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x18,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x18,0x18,0x18,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x18,0x18,0x19,0x19,0x1a,0x1b,0x1b,0x1a,0x1a,0x1a,0x1a,0x1a,0x1b, + 0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1b,0x1b,0x1b,0x1a,0x1a,0x1a,0x1b,0x1c, + 0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1b,0x1b,0x1b,0x1c,0x1c,0x1b, + 0x1a,0x1a,0x1a,0x1a,0x1a,0x1b,0x1b,0x1c,0x1c,0x1c,0x1d,0x1d,0x1c,0x1b,0x1b, + 0x1c,0x1c,0x1d,0x1d,0x1d,0x1d,0x1d,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c, + 0x1b,0x1b,0x1b,0x1c,0x1c,0x1d,0x1d,0x1c,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1e, + 0x1e,0x1e,0x1d,0x1c,0x1b,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d, + 0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d, + 0x1d,0x1d,0x1e,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1e,0x1f,0x1f,0x1e,0x1d,0x1d, + 0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1e,0x1e,0x1e,0x1e,0x1e,0x1d,0x1d,0x1d,0x1d, + 0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1e,0x1e,0x1d,0x1d,0x1d,0x1e,0x1e,0x1e,0x1e, + 0x1e,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1e,0x1f,0x1f,0x1e,0x1e,0x1e,0x1e, + 0x1e,0x1e,0x1e,0x1e,0x1d,0x1d,0x1d,0x1e,0x20,0x20,0x1f,0x1f,0x1f,0x1f,0x1e, + 0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1f,0x1f,0x1e,0x1e,0x1e,0x1f,0x1f,0x1f,0x1e, + 0x1e,0x1e,0x1e,0x1e,0x1f,0x1f,0x1e,0x1e,0x1e,0x1e,0x1f,0x20,0x20,0x20,0x20, + 0x20,0x1f,0x20,0x20,0x20,0x20,0x1f,0x20,0x20,0x20,0x20,0x20,0x1f,0x1f,0x1e, + 0x1e,0x1f,0x1f,0x1e,0x1e,0x1e,0x1f,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x21, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x1f,0x20,0x20,0x20,0x20,0x20, + 0x20,0x21,0x20,0x20,0x1e,0x1e,0x1f,0x20,0x21,0x21,0x21,0x21,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x1f, + 0x1f,0x1f,0x20,0x21,0x21,0x21,0x21,0x20,0x20,0x20,0x21,0x21,0x21,0x21,0x20, + 0x20,0x20,0x20,0x21,0x21,0x20,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0xc8,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x16,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x16,0x16,0x16,0x16,0x16, + 0x15,0x15,0x15,0x15,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16, + 0x15,0x15,0x15,0x15,0x15,0x15,0x16,0x17,0x17,0x16,0x16,0x16,0x16,0x16,0x16, + 0x16,0x17,0x17,0x17,0x17,0x18,0x19,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x18,0x19,0x19,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x18,0x18,0x18,0x18,0x18,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x18,0x19,0x19,0x19, + 0x19,0x1a,0x1a,0x1a,0x1a,0x1a,0x1b,0x1b,0x1a,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x1a,0x1a,0x19,0x19,0x19,0x19, + 0x19,0x19,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a, + 0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1c,0x1c,0x1c,0x1c,0x1c, + 0x1c,0x1c,0x1c,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, + 0x1c,0x1d,0x1d,0x1c,0x1c,0x1b,0x1c,0x1d,0x1c,0x1a,0x1b,0x1c,0x1c,0x1c,0x1b, + 0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1d,0x1d,0x1d,0x1d,0x1c,0x1c,0x1b, + 0x1c,0x1d,0x1d,0x1d,0x1d,0x1c,0x1c,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d, + 0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c, + 0x1c,0x1c,0x1c,0x1c,0x1b,0x1b,0x1c,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d, + 0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1e,0x1e,0x1e,0x1e,0x1d,0x1d,0x1d, + 0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1e,0x1e, + 0x1e,0x1e,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1e,0x1f,0x1d,0x1d,0x1d,0x1d, + 0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1e,0x1e,0x1f,0x1f,0x20,0x20,0x1f, + 0x1f,0x1e,0x1e,0x1e,0x1e,0x1e,0x1d,0x1e,0x20,0x20,0x1f,0x1f,0x1f,0x1f,0x1f, + 0x1f,0x1f,0x1f,0x1f,0x1e,0x1e,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f, + 0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1e,0x1e,0x1f,0x1f,0x20,0x20,0x1f,0x1f, + 0x1f,0x1f,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x21,0x21,0x20,0x20,0x20,0x20,0x20,0x21,0x21,0x20,0x20,0x20,0x20,0x1f, + 0x1f,0x20,0x20,0x20,0x20,0x1f,0x1e,0x1e,0x1f,0x20,0x20,0x1f,0x20,0x20,0x20, + 0x20,0x20,0x1f,0x1f,0x20,0x20,0x21,0x20,0x20,0x20,0x1f,0x1f,0x20,0x20,0x1f, + 0x1f,0x1e,0x1e,0x1f,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x21,0x21,0x21,0x21, + 0x20,0x20,0x1f,0x1f,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0xc8, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x16, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x16,0x16,0x16, + 0x16,0x16,0x15,0x15,0x15,0x16,0x16,0x16,0x16,0x16,0x17,0x17,0x16,0x16,0x16, + 0x16,0x16,0x15,0x15,0x15,0x15,0x15,0x15,0x16,0x17,0x17,0x17,0x17,0x17,0x17, + 0x17,0x17,0x17,0x17,0x17,0x17,0x18,0x19,0x19,0x19,0x18,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x19,0x19,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x18,0x18,0x18,0x18,0x18,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x18,0x18, + 0x19,0x19,0x19,0x1a,0x1a,0x1a,0x1a,0x1a,0x1b,0x1a,0x1a,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a, + 0x1a,0x1a,0x1a,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1c,0x1c, + 0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, + 0x1b,0x1b,0x1c,0x1d,0x1d,0x1c,0x1b,0x1a,0x1b,0x1d,0x1c,0x1a,0x1b,0x1c,0x1c, + 0x1c,0x1b,0x1c,0x1c,0x1d,0x1d,0x1d,0x1d,0x1c,0x1c,0x1d,0x1e,0x1e,0x1d,0x1c, + 0x1c,0x1b,0x1c,0x1c,0x1d,0x1d,0x1d,0x1c,0x1c,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d, + 0x1d,0x1d,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c, + 0x1c,0x1c,0x1c,0x1c,0x1c,0x1b,0x1b,0x1b,0x1c,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d, + 0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1e,0x1e,0x1e,0x1e,0x1d, + 0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d, + 0x1e,0x1e,0x1e,0x1e,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1e,0x1f,0x20,0x1d,0x1c, + 0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1e,0x1f,0x1f,0x1e,0x1f,0x20, + 0x20,0x20,0x1f,0x1e,0x1e,0x1e,0x1e,0x1e,0x1d,0x1e,0x20,0x20,0x20,0x1f,0x1f, + 0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1e,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f, + 0x1e,0x1e,0x1e,0x1e,0x1f,0x1f,0x1f,0x1f,0x1e,0x1e,0x1e,0x1f,0x1f,0x20,0x20, + 0x1f,0x1f,0x1f,0x20,0x20,0x21,0x21,0x21,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x21,0x20,0x20,0x20,0x20,0x20,0x21,0x21,0x21,0x20,0x20, + 0x20,0x1f,0x20,0x20,0x20,0x20,0x1f,0x1f,0x1e,0x1f,0x1f,0x1f,0x1f,0x1e,0x20, + 0x20,0x20,0x1f,0x1f,0x1f,0x1f,0x20,0x21,0x21,0x21,0x20,0x1f,0x1f,0x1f,0x20, + 0x20,0x1f,0x1f,0x1e,0x1f,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x21,0x21,0x21, + 0x21,0x21,0x20,0x20,0x1f,0x1f,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0xc8,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x16, + 0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x17,0x17,0x17,0x17,0x17,0x17, + 0x17,0x17,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x17,0x17,0x17,0x17, + 0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x18,0x19,0x19,0x19,0x18,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x18,0x18,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x18,0x18,0x18,0x18,0x18, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x18,0x18,0x18,0x19,0x19,0x19,0x19,0x19,0x18,0x18,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a, + 0x19,0x19,0x19,0x19,0x19,0x19,0x1a,0x1a,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a, + 0x1a,0x1a,0x1a,0x1a,0x1a,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1a,0x1a,0x1a,0x1a, + 0x1b,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c, + 0x1d,0x1c,0x1c,0x1c,0x1d,0x1d,0x1c,0x1b,0x1a,0x1a,0x1b,0x1d,0x1c,0x1b,0x1b, + 0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1d,0x1d,0x1d,0x1d,0x1d,0x1c,0x1d,0x1e,0x1e, + 0x1d,0x1d,0x1c,0x1c,0x1c,0x1d,0x1d,0x1d,0x1d,0x1c,0x1c,0x1d,0x1d,0x1d,0x1d, + 0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d, + 0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d, + 0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1e,0x1e,0x1e,0x1e, + 0x1e,0x1d,0x1d,0x1d,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1d,0x1d,0x1d, + 0x1d,0x1d,0x1d,0x1d,0x1e,0x1e,0x1f,0x1f,0x1f,0x1e,0x1e,0x1e,0x1f,0x20,0x20, + 0x1e,0x1d,0x1d,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1f,0x20,0x1f,0x1e, + 0x1f,0x20,0x20,0x20,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x20,0x20,0x20, + 0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x1f,0x1f,0x1f,0x20,0x20,0x20,0x20,0x20,0x1f,0x1f,0x1f,0x1f,0x1f, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x21,0x20,0x20,0x20,0x20,0x1f,0x1f,0x20,0x20,0x1f, + 0x1f,0x20,0x20,0x20,0x20,0x1f,0x1f,0x1f,0x20,0x21,0x21,0x21,0x20,0x1f,0x1f, + 0x20,0x20,0x20,0x20,0x1f,0x1f,0x1f,0x20,0x20,0x20,0x20,0x20,0x20,0x21,0x21, + 0x21,0x21,0x21,0x21,0x21,0x20,0x20,0x20,0x20,0x20,0x21,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0xc8,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x17,0x17,0x17,0x17,0x17,0x18,0x17, + 0x17,0x17,0x17,0x17,0x17,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x17,0x17,0x17, + 0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x18,0x19,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x17,0x18,0x18,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x18,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x18,0x18,0x18,0x18, + 0x18,0x18,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x18,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x18,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x1a,0x19,0x1a,0x1a,0x1a,0x1a, + 0x1a,0x1a,0x19,0x19,0x19,0x19,0x19,0x19,0x1a,0x1a,0x19,0x19,0x19,0x19,0x19, + 0x19,0x1a,0x19,0x19,0x1a,0x1a,0x1a,0x1a,0x1a,0x1b,0x1a,0x1a,0x1a,0x1a,0x1a, + 0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1a, + 0x1a,0x1b,0x1b,0x1c,0x1c,0x1c,0x1c,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d, + 0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1c,0x1b,0x1a,0x1a,0x1b,0x1d,0x1c, + 0x1b,0x1c,0x1d,0x1c,0x1c,0x1c,0x1c,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1c,0x1d, + 0x1d,0x1d,0x1d,0x1d,0x1c,0x1c,0x1d,0x1d,0x1d,0x1d,0x1d,0x1c,0x1c,0x1d,0x1d, + 0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d, + 0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1e,0x1e,0x1e,0x1e,0x1d,0x1d, + 0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1e,0x1e,0x1e,0x1f,0x1f, + 0x1e,0x1e,0x1e,0x1d,0x1d,0x1d,0x1e,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1e,0x1e, + 0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1e,0x1f,0x20,0x20,0x1f,0x1f,0x1e,0x1e,0x20, + 0x20,0x21,0x20,0x1e,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x20,0x20, + 0x20,0x1e,0x1f,0x20,0x20,0x20,0x1f,0x1f,0x1f,0x1f,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x21,0x20,0x20,0x20,0x20,0x20, + 0x1f,0x1f,0x20,0x20,0x21,0x20,0x20,0x1f,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x1f,0x20,0x20,0x20,0x20,0x1f,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x21,0x21,0x21,0x21,0x20,0x20,0x20,0x1f,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x1f,0x1f,0x20,0x20,0x20,0x21,0x21,0x20, + 0x20,0x20,0x21,0x21,0x20,0x20,0x20,0x1f,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x21,0x21,0x20,0x21,0x21,0x21,0x20,0x20,0x20,0x20,0x20,0x21,0x21,0x20, + 0x20,0x20,0x20,0x20,0x20,0xc8,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x17,0x17,0x17,0x17,0x17, + 0x18,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x16,0x16,0x16,0x16,0x16,0x16,0x16, + 0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x17,0x17,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x18,0x19,0x19,0x19,0x19,0x19,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x18,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x1a, + 0x1a,0x1a,0x1a,0x1a,0x19,0x19,0x19,0x19,0x19,0x1a,0x1a,0x1a,0x19,0x19,0x19, + 0x19,0x19,0x1a,0x1a,0x1a,0x1a,0x1a,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, + 0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1c,0x1c,0x1b,0x1b,0x1b, + 0x1b,0x1b,0x1b,0x1b,0x1b,0x1c,0x1c,0x1c,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d, + 0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1c,0x1b,0x1a,0x1a,0x1b, + 0x1d,0x1c,0x1b,0x1c,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d, + 0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1c,0x1d,0x1d,0x1d,0x1d,0x1d,0x1b,0x1c, + 0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1e,0x1e,0x1d,0x1d, + 0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1e,0x1e,0x1e,0x1e, + 0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1e,0x1e,0x1e,0x1e, + 0x1f,0x1f,0x1f,0x1e,0x1e,0x1e,0x1d,0x1d,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f, + 0x1f,0x1e,0x1e,0x1e,0x1e,0x1e,0x1d,0x1e,0x1f,0x20,0x20,0x20,0x20,0x1f,0x1e, + 0x1e,0x1f,0x20,0x21,0x20,0x20,0x20,0x20,0x20,0x1f,0x1f,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x1f,0x20,0x20,0x20,0x20,0x1f,0x1f,0x1f,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x1f,0x1f,0x1f,0x20,0x20,0x20,0x21, + 0x21,0x21,0x21,0x21,0x21,0x21,0x20,0x21,0x21,0x21,0x22,0x22,0x20,0x20,0x20, + 0x20,0x20,0x1f,0x1e,0x1f,0x20,0x21,0x21,0x20,0x1e,0x1f,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x1f,0x1f,0x20,0x20,0x20,0x1f,0x1f,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x21,0x21,0x21,0x21,0x21,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x21, + 0x21,0x21,0x20,0x20,0x21,0x21,0x21,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x21,0x21,0x20,0x20,0x20,0x20,0x21,0x21, + 0x21,0x21,0x21,0x21,0x21,0x21,0x21,0xc8,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x17,0x17, + 0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x16,0x16,0x16,0x16,0x16,0x16,0x16, + 0x16,0x16,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17, + 0x18,0x18,0x18,0x18,0x18,0x19,0x18,0x18,0x18,0x18,0x18,0x18,0x17,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x19,0x19,0x19,0x19,0x19,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x18,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x1a,0x1a,0x1a,0x19, + 0x19,0x19,0x19,0x1a,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0x1a,0x1a,0x1a,0x19,0x19,0x19,0x19,0x19,0x1a,0x1a,0x1a,0x1a,0x1a,0x19, + 0x19,0x19,0x19,0x1a,0x1a,0x1a,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1c, + 0x1c,0x1c,0x1c,0x1d,0x1d,0x1c,0x1c,0x1c,0x1c,0x1b,0x1b,0x1c,0x1d,0x1d,0x1c, + 0x1c,0x1c,0x1b,0x1b,0x1b,0x1b,0x1c,0x1c,0x1c,0x1c,0x1d,0x1d,0x1d,0x1d,0x1d, + 0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1c,0x1b, + 0x1b,0x1c,0x1d,0x1d,0x1c,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d, + 0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d, + 0x1b,0x1b,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1e,0x1e,0x1e, + 0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d, + 0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1e,0x1e,0x1e,0x1e,0x1e, + 0x1e,0x1f,0x1f,0x20,0x20,0x1f,0x1f,0x1f,0x1e,0x1e,0x1f,0x1f,0x1f,0x1f,0x1f, + 0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1e,0x1f,0x20,0x20,0x20,0x20,0x1f, + 0x1e,0x1e,0x1e,0x1f,0x20,0x20,0x20,0x21,0x20,0x20,0x20,0x1f,0x1f,0x20,0x20, + 0x20,0x20,0x1f,0x1f,0x1f,0x1f,0x20,0x20,0x20,0x20,0x1f,0x1f,0x1f,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x21,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x21,0x21,0x21,0x21,0x21,0x21,0x20,0x20,0x21,0x21,0x21,0x22,0x22,0x20, + 0x20,0x20,0x20,0x20,0x1f,0x1e,0x1f,0x20,0x21,0x21,0x20,0x1d,0x1e,0x20,0x20, + 0x20,0x21,0x21,0x20,0x20,0x20,0x1f,0x1f,0x20,0x20,0x20,0x1f,0x1f,0x20,0x20, + 0x20,0x20,0x20,0x20,0x1f,0x1f,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x21,0x21,0x21,0x20,0x20,0x21,0x21,0x20,0x20,0x20,0x20, + 0x21,0x22,0x22,0x21,0x20,0x20,0x21,0x21,0x21,0x21,0x20,0x20,0x20,0x20,0x21, + 0x21,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x21,0x21,0x21,0x20,0x20,0x20, + 0x21,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0xc8,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16, + 0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x16,0x16,0x16,0x16,0x16, + 0x16,0x16,0x16,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17, + 0x17,0x17,0x18,0x18,0x18,0x18,0x18,0x19,0x18,0x18,0x18,0x18,0x18,0x17,0x17, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x19,0x19,0x19,0x19,0x19,0x19, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x1a,0x1a, + 0x1a,0x19,0x19,0x19,0x19,0x1a,0x1a,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x1a,0x1a,0x1a,0x19,0x19,0x19,0x19,0x19,0x1a,0x1a,0x1a,0x1a, + 0x1a,0x19,0x19,0x19,0x1a,0x1a,0x1a,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, + 0x1b,0x1c,0x1c,0x1c,0x1d,0x1d,0x1d,0x1d,0x1c,0x1c,0x1c,0x1b,0x1c,0x1c,0x1d, + 0x1d,0x1c,0x1c,0x1c,0x1b,0x1b,0x1b,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1d,0x1d, + 0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d, + 0x1d,0x1b,0x1c,0x1d,0x1d,0x1d,0x1c,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d, + 0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1e,0x1e,0x1e, + 0x1d,0x1d,0x1c,0x1c,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1e, + 0x1e,0x1e,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d, + 0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e, + 0x1e,0x1e,0x1d,0x1e,0x1f,0x20,0x20,0x20,0x20,0x1f,0x1e,0x1e,0x1f,0x1f,0x1f, + 0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x20,0x20,0x20,0x1f, + 0x1f,0x1e,0x1e,0x1e,0x1e,0x1e,0x1f,0x20,0x20,0x21,0x20,0x20,0x20,0x1f,0x1f, + 0x20,0x20,0x20,0x1f,0x1f,0x1e,0x1e,0x1f,0x20,0x20,0x20,0x20,0x1f,0x1f,0x1f, + 0x20,0x20,0x20,0x20,0x20,0x20,0x21,0x21,0x21,0x21,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x21,0x20,0x21,0x20,0x20,0x20,0x20,0x20,0x21,0x21,0x21, + 0x22,0x20,0x20,0x20,0x20,0x20,0x1f,0x1e,0x1e,0x20,0x21,0x21,0x20,0x1e,0x1e, + 0x20,0x20,0x20,0x21,0x21,0x20,0x20,0x20,0x1f,0x1f,0x20,0x20,0x20,0x1f,0x1f, + 0x20,0x20,0x20,0x20,0x20,0x20,0x1f,0x1f,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x21,0x21,0x21,0x20,0x20,0x21,0x21,0x21,0x21, + 0x20,0x21,0x21,0x22,0x21,0x21,0x20,0x21,0x21,0x21,0x21,0x21,0x21,0x20,0x20, + 0x20,0x21,0x21,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x21,0x21,0x21,0x21, + 0x20,0x20,0x21,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0xc8,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x17, + 0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17, + 0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17, + 0x17,0x17,0x17,0x17,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x17, + 0x17,0x17,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x19,0x19,0x19,0x19,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x19, + 0x19,0x19,0x19,0x18,0x18,0x18,0x18,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x18,0x18,0x18,0x18,0x18,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x1a,0x1a,0x1a,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x1a,0x1a,0x1a,0x1a,0x1a, + 0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, + 0x1b,0x1c,0x1c,0x1c,0x1c,0x1c,0x1d,0x1d,0x1d,0x1d,0x1c,0x1c,0x1c,0x1c,0x1c, + 0x1d,0x1d,0x1d,0x1d,0x1d,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1d,0x1d,0x1c,0x1c, + 0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1c,0x1c,0x1c,0x1d,0x1d,0x1d,0x1d, + 0x1d,0x1d,0x1d,0x1c,0x1c,0x1d,0x1d,0x1d,0x1c,0x1c,0x1d,0x1d,0x1d,0x1d,0x1d, + 0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1e,0x1e,0x1e,0x1f, + 0x1f,0x1f,0x1f,0x1e,0x1d,0x1d,0x1e,0x1e,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d, + 0x1d,0x1d,0x1d,0x1d,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e, + 0x1e,0x1e,0x1d,0x1d,0x1d,0x1d,0x1e,0x1f,0x1f,0x1f,0x1f,0x20,0x1f,0x1f,0x1f, + 0x1f,0x1f,0x1e,0x1d,0x1d,0x1d,0x1e,0x20,0x20,0x21,0x20,0x20,0x1f,0x1e,0x1e, + 0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x1f, + 0x1f,0x1e,0x1d,0x1d,0x1e,0x1e,0x1e,0x1e,0x1e,0x1f,0x20,0x20,0x20,0x20,0x1f, + 0x1f,0x1f,0x20,0x20,0x20,0x1f,0x1f,0x1e,0x1e,0x1f,0x20,0x20,0x20,0x20,0x1f, + 0x1f,0x1f,0x20,0x20,0x20,0x20,0x20,0x21,0x21,0x21,0x22,0x22,0x21,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x1f,0x1f,0x1f,0x20,0x20, + 0x20,0x20,0x20,0x20,0x1f,0x20,0x20,0x20,0x1f,0x1e,0x1f,0x20,0x21,0x21,0x20, + 0x1e,0x1e,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x1f,0x1f,0x1f,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x1f,0x1f,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x21,0x21, + 0x22,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21, + 0x20,0x20,0x20,0x21,0x21,0x21,0x20,0x20,0x22,0x22,0x21,0x21,0x21,0x22,0x22, + 0x22,0x22,0x22,0x22,0x22,0x23,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0xc8,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x16,0x16,0x16,0x16,0x16,0x17,0x16,0x16, + 0x17,0x17,0x18,0x18,0x18,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17, + 0x17,0x17,0x17,0x17,0x17,0x17,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x18,0x17,0x17,0x17,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x18,0x18,0x19,0x19,0x19,0x19,0x18,0x18,0x19,0x19,0x18,0x18,0x18,0x18,0x18, + 0x18,0x19,0x19,0x19,0x19,0x19,0x18,0x18,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x18,0x18,0x18,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x1a,0x1a,0x1a,0x19,0x19,0x19, + 0x19,0x1a,0x1a,0x1a,0x1a,0x1a,0x19,0x19,0x19,0x19,0x19,0x19,0x1a,0x1a,0x1a, + 0x1a,0x1a,0x1a,0x1b,0x1b,0x1b,0x1b,0x1b,0x1a,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, + 0x1b,0x1b,0x1b,0x1b,0x1c,0x1c,0x1c,0x1c,0x1c,0x1d,0x1d,0x1c,0x1c,0x1c,0x1c, + 0x1b,0x1c,0x1d,0x1d,0x1d,0x1d,0x1d,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1d,0x1d, + 0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1c,0x1c,0x1c,0x1c,0x1d,0x1d, + 0x1c,0x1d,0x1e,0x1e,0x1d,0x1d,0x1d,0x1d,0x1e,0x1d,0x1c,0x1c,0x1d,0x1d,0x1d, + 0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1e,0x1e, + 0x1e,0x1f,0x1f,0x1f,0x1e,0x1e,0x1d,0x1d,0x1e,0x1e,0x1d,0x1d,0x1d,0x1d,0x1d, + 0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e, + 0x1e,0x1e,0x1e,0x1e,0x1d,0x1d,0x1d,0x1e,0x1e,0x1f,0x1f,0x20,0x20,0x20,0x1f, + 0x1e,0x1e,0x1f,0x1f,0x1e,0x1d,0x1d,0x1d,0x1d,0x20,0x20,0x21,0x20,0x20,0x1f, + 0x1e,0x1e,0x1e,0x1e,0x1f,0x1f,0x1f,0x1f,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x1f,0x1e,0x1d,0x1d,0x1d,0x1e,0x1f,0x1f,0x1f,0x1f,0x1f,0x20,0x20,0x20, + 0x1f,0x1e,0x1f,0x1f,0x20,0x20,0x20,0x20,0x1f,0x1f,0x1f,0x1f,0x20,0x20,0x20, + 0x20,0x1f,0x1f,0x1f,0x20,0x20,0x20,0x20,0x20,0x20,0x21,0x21,0x22,0x22,0x21, + 0x21,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x1f,0x1f,0x1f, + 0x1f,0x1f,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x1f,0x1e,0x1f,0x20,0x20, + 0x20,0x20,0x1f,0x1f,0x20,0x20,0x20,0x20,0x20,0x20,0x1f,0x1f,0x1f,0x1f,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x1f,0x20,0x20,0x20,0x20,0x20,0x20,0x1f,0x1f, + 0x20,0x21,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x21,0x21,0x22,0x22,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x20,0x21,0x21, + 0x21,0x21,0x20,0x20,0x21,0x21,0x22,0x22,0x20,0x20,0x22,0x22,0x21,0x21,0x21, + 0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x23,0x22,0x21,0x21,0x22,0x22,0x22,0x21, + 0xc8,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x16,0x16,0x16,0x17,0x17, + 0x17,0x17,0x17,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x17,0x17,0x17,0x17,0x17, + 0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x17,0x17,0x17,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x18,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x18,0x18, + 0x18,0x18,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x1a,0x1a,0x1a,0x19,0x19,0x19,0x19,0x1a,0x1a,0x1a,0x19, + 0x19,0x19,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x19,0x19,0x19,0x19,0x19,0x1a, + 0x1a,0x1a,0x1a,0x1a,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, + 0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c, + 0x1c,0x1c,0x1b,0x1c,0x1d,0x1d,0x1d,0x1d,0x1d,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c, + 0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1c,0x1c,0x1c,0x1c,0x1c, + 0x1d,0x1d,0x1c,0x1d,0x1e,0x1e,0x1d,0x1d,0x1d,0x1d,0x1e,0x1d,0x1c,0x1c,0x1d, + 0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1c,0x1d,0x1d, + 0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1d,0x1d,0x1e,0x1e,0x1d,0x1d,0x1d, + 0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e, + 0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1d,0x1d,0x1e,0x1e,0x1e,0x1e,0x1f,0x20,0x20, + 0x20,0x1f,0x1e,0x1d,0x1e,0x1f,0x1e,0x1d,0x1d,0x1d,0x1d,0x1f,0x20,0x20,0x20, + 0x20,0x1f,0x1e,0x1e,0x1e,0x1e,0x1f,0x1f,0x1f,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x1f,0x1e,0x1d,0x1d,0x1e,0x1f,0x20,0x20,0x20,0x20,0x1f,0x20, + 0x20,0x1f,0x1f,0x1e,0x1e,0x1f,0x20,0x20,0x20,0x20,0x20,0x1f,0x1f,0x1f,0x20, + 0x20,0x20,0x20,0x20,0x1f,0x1f,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x21,0x21, + 0x21,0x21,0x21,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x1f, + 0x1f,0x1f,0x1f,0x1f,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x1f,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x1f,0x1f,0x1f, + 0x1f,0x20,0x20,0x20,0x20,0x20,0x20,0x1f,0x1f,0x20,0x20,0x20,0x20,0x20,0x20, + 0x1f,0x1f,0x20,0x21,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x1f,0x1f,0x20, + 0x20,0x20,0x20,0x21,0x22,0x22,0x22,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x20, + 0x21,0x21,0x21,0x21,0x20,0x21,0x21,0x22,0x22,0x22,0x21,0x20,0x22,0x22,0x21, + 0x21,0x21,0x22,0x22,0x22,0x21,0x21,0x22,0x22,0x22,0x21,0x21,0x21,0x21,0x21, + 0x21,0x21,0xc8,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x16,0x17,0x17,0x17,0x17,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x17,0x17,0x17, + 0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x18,0x18,0x18,0x18,0x18, + 0x18,0x18,0x17,0x17,0x17,0x17,0x17,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x18,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x1a,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x1a,0x1a,0x1a,0x1a, + 0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x19,0x19,0x1a,0x1a, + 0x1a,0x19,0x19,0x19,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x19,0x19,0x19,0x19, + 0x19,0x1a,0x1a,0x1a,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, + 0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c, + 0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1d,0x1d,0x1d,0x1d,0x1c,0x1c,0x1c,0x1c, + 0x1c,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d, + 0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1e,0x1e,0x1d,0x1c,0x1d,0x1d,0x1e,0x1d,0x1c, + 0x1c,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1e,0x1d,0x1c, + 0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1e,0x1e,0x1e,0x1d,0x1d,0x1d,0x1d,0x1d, + 0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1e,0x1e,0x1e,0x1e,0x1e, + 0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e, + 0x1f,0x1f,0x1f,0x1e,0x1e,0x1d,0x1e,0x20,0x1f,0x1e,0x1d,0x1d,0x1e,0x1e,0x1f, + 0x1f,0x20,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x1f,0x1e,0x1e,0x1e,0x1f,0x20,0x20,0x20,0x20,0x20, + 0x1f,0x1f,0x1f,0x1f,0x1e,0x1e,0x1e,0x1f,0x20,0x20,0x20,0x20,0x20,0x1f,0x1f, + 0x1f,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x21,0x21,0x20,0x20,0x20,0x20,0x20,0x21,0x21,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x21,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x21, + 0x21,0x20,0x20,0x20,0x21,0x21,0x20,0x20,0x20,0x21,0x21,0x21,0x20,0x20,0x1f, + 0x20,0x20,0x20,0x20,0x20,0x22,0x23,0x23,0x22,0x21,0x21,0x21,0x21,0x21,0x22, + 0x21,0x21,0x21,0x22,0x22,0x21,0x21,0x21,0x22,0x23,0x23,0x22,0x21,0x21,0x22, + 0x22,0x21,0x20,0x20,0x21,0x22,0x22,0x21,0x21,0x21,0x22,0x22,0x21,0x21,0x21, + 0x21,0x21,0x21,0x21,0xc8,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x16,0x17,0x17,0x17,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x17, + 0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x18,0x18,0x18, + 0x18,0x18,0x18,0x17,0x17,0x17,0x17,0x17,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x1a,0x1a,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x1a,0x1a, + 0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x19,0x19, + 0x1a,0x1a,0x1a,0x19,0x19,0x19,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x19,0x19, + 0x19,0x19,0x19,0x1a,0x1a,0x1a,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, + 0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c, + 0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1d,0x1d,0x1d,0x1d,0x1c,0x1c, + 0x1c,0x1c,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d, + 0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1e,0x1d,0x1d,0x1c,0x1c,0x1d,0x1e, + 0x1d,0x1c,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1e,0x1e, + 0x1d,0x1c,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1e,0x1f,0x1f,0x1e,0x1d,0x1d, + 0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1e,0x1e,0x1e, + 0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e, + 0x1e,0x1e,0x1f,0x1f,0x1f,0x1f,0x1e,0x1d,0x1f,0x20,0x20,0x1f,0x1f,0x1e,0x1e, + 0x1e,0x1e,0x1e,0x1f,0x1f,0x1f,0x20,0x1f,0x1f,0x1f,0x1f,0x1f,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x1f,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1e,0x1e,0x1f,0x20,0x20,0x20,0x20,0x1f, + 0x1e,0x1e,0x1f,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x21,0x21,0x22,0x21,0x20,0x20,0x20,0x21,0x21, + 0x21,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x21,0x20,0x20,0x20,0x20, + 0x20,0x21,0x21,0x20,0x20,0x20,0x20,0x21,0x22,0x21,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x21,0x21,0x20,0x20,0x21,0x20,0x20,0x20,0x20,0x20,0x21,0x22,0x22,0x21, + 0x20,0x20,0x20,0x21,0x20,0x20,0x20,0x22,0x23,0x23,0x22,0x21,0x21,0x21,0x21, + 0x21,0x22,0x22,0x21,0x22,0x22,0x22,0x22,0x21,0x22,0x22,0x23,0x23,0x22,0x21, + 0x21,0x22,0x22,0x21,0x21,0x21,0x21,0x22,0x22,0x22,0x21,0x21,0x22,0x22,0x21, + 0x21,0x21,0x21,0x21,0x21,0x21,0xc8,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x16,0x16,0x16,0x17,0x18,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x18,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x18, + 0x18,0x18,0x18,0x18,0x17,0x17,0x17,0x17,0x17,0x18,0x18,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x1a,0x1a,0x1a,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x1a,0x1a,0x1a,0x19,0x19,0x19,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a, + 0x19,0x19,0x19,0x19,0x19,0x1a,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, + 0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1c,0x1d,0x1d,0x1d, + 0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d, + 0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d, + 0x1d,0x1d,0x1d,0x1e,0x1e,0x1e,0x1e,0x1e,0x1d,0x1e,0x1e,0x1d,0x1d,0x1b,0x1c, + 0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1d,0x1d, + 0x1e,0x1f,0x1e,0x1d,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1f,0x1f,0x20,0x1f, + 0x1e,0x1d,0x1d,0x1d,0x1d,0x1d,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e, + 0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1f,0x1f,0x1e, + 0x1e,0x1e,0x1e,0x1e,0x1f,0x1f,0x20,0x1f,0x1f,0x1f,0x20,0x20,0x20,0x20,0x20, + 0x1f,0x1f,0x1e,0x1e,0x1e,0x1e,0x1f,0x20,0x20,0x1f,0x1f,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x21,0x21,0x21,0x20, + 0x20,0x20,0x1f,0x1e,0x1e,0x1f,0x20,0x20,0x20,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f, + 0x1e,0x1e,0x1d,0x1d,0x1f,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x21,0x22,0x22,0x22,0x21,0x20,0x20, + 0x21,0x21,0x20,0x20,0x20,0x20,0x20,0x1f,0x1f,0x1f,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x21,0x22,0x22,0x21,0x21,0x20,0x20,0x21,0x23,0x22,0x21,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x21,0x21,0x21,0x21,0x20,0x1f,0x1f,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x21,0x22,0x22,0x20,0x20,0x20,0x20,0x20,0x21,0x22, + 0x23,0x22,0x21,0x21,0x21,0x22,0x20,0x20,0x20,0x22,0x23,0x23,0x22,0x21,0x21, + 0x21,0x21,0x21,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x23,0x23, + 0x23,0x22,0x21,0x23,0x23,0x22,0x22,0x22,0x23,0x23,0x23,0x23,0x23,0x22,0x23, + 0x23,0x22,0x21,0x22,0x22,0x22,0x22,0x22,0xc8,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x16,0x16,0x16,0x16,0x16,0x16,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x16,0x16,0x16,0x16,0x16,0x17,0x17,0x17,0x17, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x18,0x18,0x17,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x17, + 0x18,0x19,0x18,0x18,0x18,0x18,0x17,0x17,0x18,0x17,0x18,0x18,0x18,0x19,0x18, + 0x18,0x18,0x18,0x19,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x1a,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0x1a,0x1a,0x1b,0x1b,0x1a,0x1a,0x1a,0x1b,0x1b,0x1a,0x1a,0x1a,0x19,0x19, + 0x19,0x19,0x19,0x1a,0x1b,0x1a,0x1a,0x19,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a, + 0x1b,0x1b,0x1a,0x1a,0x1a,0x1a,0x1a,0x1b,0x1b,0x1c,0x1c,0x1b,0x1b,0x1c,0x1c, + 0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1d,0x1d,0x1d, + 0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d, + 0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1e,0x1e,0x1e,0x1e,0x1d,0x1d,0x1d,0x1d, + 0x1d,0x1d,0x1d,0x1d,0x1d,0x1e,0x1f,0x1f,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d, + 0x1d,0x1d,0x1d,0x1e,0x1d,0x1d,0x1d,0x1d,0x1d,0x1e,0x1e,0x1e,0x1e,0x1e,0x1d, + 0x1d,0x1e,0x1e,0x1f,0x1f,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1f,0x20,0x20, + 0x20,0x1f,0x1f,0x1d,0x1d,0x1e,0x1e,0x1e,0x1e,0x1f,0x20,0x1f,0x1f,0x1e,0x1e, + 0x1f,0x1f,0x1f,0x1f,0x1f,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1d,0x1d,0x1e, + 0x1f,0x1e,0x1e,0x1e,0x1e,0x1f,0x1f,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x1f,0x1f,0x1f,0x1f,0x20,0x20,0x20,0x20,0x1f,0x1f,0x20,0x20, + 0x20,0x21,0x21,0x21,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x1f,0x1f,0x20,0x20,0x20,0x20,0x20,0x1f,0x1f,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x1f,0x1f,0x1f,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x21, + 0x21,0x21,0x21,0x21,0x21,0x20,0x20,0x20,0x21,0x21,0x22,0x22,0x22,0x22,0x21, + 0x21,0x20,0x21,0x21,0x21,0x21,0x21,0x20,0x20,0x1f,0x1f,0x1f,0x20,0x20,0x20, + 0x20,0x21,0x21,0x21,0x21,0x21,0x22,0x21,0x21,0x20,0x20,0x21,0x23,0x23,0x21, + 0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x22,0x22,0x22,0x21,0x21,0x20,0x20,0x20, + 0x20,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x22,0x22,0x21,0x21,0x21,0x21,0x21, + 0x22,0x22,0x23,0x22,0x22,0x22,0x23,0x23,0x22,0x21,0x21,0x22,0x22,0x22,0x21, + 0x21,0x21,0x21,0x20,0x21,0x21,0x21,0x21,0x22,0x22,0x22,0x22,0x22,0x22,0x22, + 0x22,0x23,0x22,0x22,0x22,0x23,0x22,0x21,0x21,0x20,0x21,0x22,0x22,0x22,0x22, + 0x21,0x21,0x21,0x21,0x21,0x22,0x22,0x22,0x22,0x23,0xc8,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x17,0x17,0x17,0x17,0x17,0x17,0x17, + 0x17,0x17,0x17,0x18,0x18,0x18,0x19,0x19,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x17,0x17,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x19,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x19, + 0x19,0x18,0x18,0x18,0x19,0x19,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x1a,0x1a,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x18,0x18, + 0x18,0x19,0x19,0x1a,0x1b,0x1b,0x1b,0x1a,0x1a,0x1b,0x1c,0x1c,0x1b,0x1b,0x1a, + 0x1a,0x1a,0x1a,0x1a,0x1a,0x1b,0x1c,0x1b,0x1a,0x1a,0x1b,0x1b,0x1b,0x1b,0x1b, + 0x1b,0x1b,0x1c,0x1c,0x1b,0x1b,0x1b,0x1b,0x1b,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c, + 0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d, + 0x1d,0x1d,0x1d,0x1d,0x1e,0x1e,0x1e,0x1e,0x1e,0x1d,0x1d,0x1d,0x1d,0x1d,0x1e, + 0x1e,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1e,0x1f,0x1f,0x1e,0x1d,0x1d, + 0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1e,0x1f,0x1f,0x1d,0x1d,0x1d,0x1d,0x1d, + 0x1d,0x1d,0x1d,0x1e,0x1e,0x1e,0x1e,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d, + 0x1d,0x1d,0x1d,0x1e,0x1e,0x1f,0x1f,0x1e,0x1d,0x1d,0x1d,0x1d,0x1e,0x1f,0x1f, + 0x20,0x20,0x1f,0x1f,0x1e,0x1d,0x1e,0x1f,0x1e,0x1e,0x1e,0x20,0x20,0x20,0x1f, + 0x1e,0x1e,0x1f,0x20,0x20,0x1f,0x1f,0x1f,0x1e,0x1e,0x1e,0x1e,0x1e,0x1d,0x1d, + 0x1d,0x1e,0x1f,0x1e,0x1e,0x1e,0x1f,0x1f,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x1f,0x1f,0x20,0x20,0x20,0x20,0x20,0x20,0x1f,0x1f, + 0x20,0x20,0x21,0x22,0x22,0x22,0x21,0x21,0x20,0x20,0x20,0x1f,0x1f,0x20,0x20, + 0x20,0x1e,0x1d,0x1e,0x20,0x20,0x22,0x22,0x21,0x20,0x1e,0x1f,0x20,0x21,0x22, + 0x22,0x21,0x20,0x20,0x20,0x20,0x22,0x23,0x23,0x21,0x20,0x1f,0x20,0x20,0x21, + 0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x22,0x22,0x22,0x22,0x22,0x22, + 0x22,0x21,0x21,0x21,0x21,0x21,0x22,0x22,0x22,0x22,0x21,0x20,0x20,0x1f,0x20, + 0x20,0x20,0x21,0x21,0x22,0x22,0x21,0x21,0x21,0x21,0x21,0x20,0x20,0x20,0x23, + 0x22,0x21,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x21,0x21,0x20, + 0x20,0x20,0x21,0x21,0x22,0x22,0x22,0x22,0x22,0x22,0x21,0x21,0x23,0x24,0x23, + 0x23,0x22,0x22,0x22,0x22,0x22,0x22,0x23,0x23,0x24,0x24,0x23,0x22,0x22,0x21, + 0x21,0x21,0x21,0x21,0x20,0x20,0x20,0x20,0x20,0x21,0x22,0x22,0x22,0x22,0x22, + 0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x23,0x22,0x21,0x20,0x20,0x20,0x21,0x21, + 0x21,0x21,0x20,0x20,0x20,0x21,0x21,0x22,0x22,0x22,0x23,0x23,0xc8,0x15,0x15, + 0x15,0x15,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16, + 0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x17,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x19,0x19,0x18,0x18,0x18,0x17,0x17, + 0x18,0x18,0x18,0x18,0x18,0x17,0x17,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x18,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x1a,0x1a,0x1a,0x1a, + 0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x1a,0x1a,0x1a,0x1a,0x19,0x1a,0x1b,0x1b,0x1b,0x1b, + 0x1a,0x1a,0x1a,0x1b,0x1b,0x1b,0x1a,0x1b,0x1c,0x1b,0x1b,0x1b,0x1b,0x1c,0x1c, + 0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1b,0x1b,0x1b,0x1b,0x1c,0x1c,0x1c,0x1c, + 0x1c,0x1c,0x1c,0x1c,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d, + 0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d, + 0x1d,0x1e,0x1f,0x1f,0x1f,0x1e,0x1d,0x1d,0x1c,0x1c,0x1c,0x1d,0x1d,0x1d,0x1d, + 0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1e,0x1e,0x1e,0x1d,0x1d,0x1d, + 0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d, + 0x1d,0x1d,0x1d,0x1d,0x1d,0x1e,0x1e,0x1f,0x1f,0x1e,0x1d,0x1d,0x1d,0x1d,0x1e, + 0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1e,0x1e,0x1f,0x20,0x1f,0x1e,0x1e,0x1f,0x20, + 0x20,0x20,0x1f,0x1f,0x20,0x20,0x20,0x1f,0x1f,0x1f,0x1e,0x1e,0x1f,0x1f,0x1f, + 0x1e,0x1d,0x1e,0x1f,0x20,0x1f,0x1f,0x1f,0x1f,0x1f,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x1f,0x1f,0x20,0x21,0x21,0x21,0x20,0x20, + 0x1f,0x1f,0x20,0x20,0x21,0x21,0x21,0x21,0x21,0x20,0x20,0x20,0x20,0x1f,0x1f, + 0x20,0x20,0x20,0x20,0x1f,0x1e,0x20,0x21,0x21,0x21,0x21,0x20,0x1f,0x1f,0x20, + 0x21,0x22,0x22,0x21,0x20,0x20,0x20,0x20,0x21,0x23,0x24,0x22,0x20,0x20,0x20, + 0x20,0x21,0x21,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x21,0x21,0x22, + 0x22,0x22,0x22,0x22,0x22,0x22,0x21,0x21,0x22,0x22,0x22,0x22,0x22,0x21,0x21, + 0x21,0x21,0x22,0x22,0x21,0x20,0x21,0x21,0x20,0x20,0x20,0x22,0x22,0x22,0x21, + 0x21,0x23,0x23,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22, + 0x22,0x22,0x21,0x21,0x21,0x21,0x22,0x22,0x22,0x23,0x23,0x23,0x22,0x22,0x24, + 0x24,0x23,0x23,0x22,0x23,0x23,0x23,0x22,0x22,0x23,0x23,0x24,0x24,0x23,0x22, + 0x22,0x21,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x22,0x22,0x22,0x23, + 0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x24,0x24,0x23,0x22,0x22,0x23, + 0x23,0x23,0x23,0x23,0x23,0x23,0x24,0x22,0x22,0x22,0x22,0x23,0x24,0x24,0xc8, + 0x15,0x15,0x15,0x15,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16, + 0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x18,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x19,0x19,0x18,0x18,0x18, + 0x17,0x17,0x18,0x18,0x18,0x18,0x18,0x17,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x1a,0x1a, + 0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a, + 0x19,0x19,0x19,0x19,0x19,0x19,0x1a,0x1a,0x1a,0x19,0x19,0x19,0x19,0x1a,0x1b, + 0x1b,0x1a,0x1a,0x1a,0x1a,0x1b,0x1b,0x1b,0x1a,0x1b,0x1c,0x1c,0x1b,0x1b,0x1c, + 0x1c,0x1d,0x1d,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1b,0x1b,0x1c,0x1c,0x1c, + 0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d, + 0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d, + 0x1d,0x1d,0x1d,0x1e,0x1e,0x1f,0x1f,0x1e,0x1d,0x1d,0x1c,0x1b,0x1b,0x1c,0x1c, + 0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1e,0x1e,0x1e,0x1d, + 0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d, + 0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1e,0x1e,0x1f,0x1f,0x1e,0x1d,0x1d,0x1d, + 0x1d,0x1e,0x1e,0x1f,0x1f,0x1f,0x1f,0x1e,0x1e,0x1e,0x1f,0x20,0x1f,0x1e,0x1e, + 0x1f,0x20,0x20,0x1f,0x1f,0x1f,0x20,0x20,0x20,0x1f,0x1f,0x1f,0x1e,0x1e,0x1f, + 0x1f,0x1f,0x1f,0x1f,0x1f,0x20,0x20,0x1f,0x1f,0x1f,0x1f,0x1f,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x1f,0x20,0x20,0x21,0x21,0x21, + 0x21,0x20,0x1f,0x20,0x20,0x20,0x20,0x21,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x1f,0x20,0x20,0x21,0x21,0x20,0x20,0x20,0x20,0x21,0x21,0x21,0x20,0x20,0x1f, + 0x20,0x20,0x21,0x22,0x22,0x20,0x20,0x20,0x20,0x20,0x21,0x22,0x24,0x22,0x21, + 0x20,0x20,0x20,0x21,0x21,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x21,0x21,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22, + 0x22,0x22,0x22,0x22,0x23,0x23,0x22,0x20,0x21,0x21,0x20,0x20,0x20,0x22,0x22, + 0x22,0x21,0x21,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22, + 0x22,0x22,0x22,0x22,0x23,0x22,0x22,0x21,0x22,0x22,0x22,0x23,0x23,0x23,0x23, + 0x22,0x23,0x24,0x23,0x22,0x22,0x23,0x23,0x23,0x23,0x22,0x23,0x23,0x24,0x23, + 0x23,0x22,0x22,0x21,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x21,0x22,0x22, + 0x22,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x22,0x23,0x24,0x24,0x23,0x22, + 0x23,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x23,0x22,0x22,0x23,0x23,0x24, + 0x24,0xc8,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x17, + 0x17,0x16,0x16,0x16,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x16,0x16,0x18, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x19,0x19,0x19,0x19,0x19,0x18, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x1a,0x1a,0x1a,0x1a,0x1a,0x19,0x19,0x1a,0x1a,0x1a, + 0x1b,0x1b,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a, + 0x1a,0x1a,0x1a,0x1a,0x1a,0x19,0x19,0x1a,0x1b,0x1b,0x1a,0x19,0x19,0x19,0x19, + 0x1a,0x1b,0x1b,0x1b,0x1b,0x1a,0x1a,0x1b,0x1b,0x1b,0x1a,0x1b,0x1d,0x1c,0x1c, + 0x1c,0x1c,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1c,0x1c,0x1c,0x1c, + 0x1d,0x1d,0x1c,0x1b,0x1b,0x1b,0x1c,0x1c,0x1c,0x1c,0x1d,0x1d,0x1d,0x1d,0x1d, + 0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1e,0x1e,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d, + 0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d, + 0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1e,0x1e, + 0x1e,0x1d,0x1d,0x1e,0x1e,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d, + 0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1e,0x1e,0x1f,0x1f,0x1e,0x1e, + 0x1e,0x1d,0x1d,0x1d,0x1e,0x1e,0x1f,0x1f,0x1e,0x1d,0x1d,0x1f,0x20,0x20,0x1f, + 0x1e,0x1d,0x1e,0x1f,0x1f,0x1f,0x1e,0x1f,0x20,0x20,0x20,0x1f,0x1f,0x1f,0x1f, + 0x1f,0x1f,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x1f, + 0x1f,0x20,0x1f,0x1f,0x1f,0x1f,0x1f,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x21, + 0x21,0x21,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x1f,0x20,0x21,0x21,0x21,0x20,0x20,0x20,0x21,0x21,0x21,0x20,0x20, + 0x20,0x20,0x20,0x20,0x21,0x21,0x21,0x20,0x20,0x20,0x20,0x20,0x21,0x22,0x23, + 0x22,0x21,0x20,0x20,0x20,0x21,0x21,0x21,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x21,0x21,0x21,0x22,0x22,0x22,0x22,0x22,0x23,0x23,0x23,0x23,0x23, + 0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x21,0x20,0x20,0x20, + 0x21,0x22,0x22,0x21,0x20,0x21,0x21,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22, + 0x22,0x22,0x22,0x22,0x22,0x23,0x23,0x23,0x22,0x22,0x22,0x22,0x23,0x23,0x23, + 0x23,0x23,0x23,0x23,0x23,0x22,0x22,0x22,0x23,0x23,0x23,0x23,0x23,0x23,0x23, + 0x24,0x23,0x22,0x22,0x22,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21, + 0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x21,0x21,0x22,0x22, + 0x21,0x21,0x21,0x22,0x23,0x23,0x23,0x23,0x23,0x24,0x24,0x23,0x23,0x23,0x23, + 0x23,0x24,0x24,0xc8,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16, + 0x16,0x16,0x16,0x16,0x16,0x16,0x17,0x17,0x17,0x17,0x18,0x17,0x17,0x17,0x17, + 0x17,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x19,0x19,0x19, + 0x19,0x19,0x18,0x18,0x18,0x18,0x19,0x19,0x19,0x18,0x18,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x19,0x19,0x18, + 0x18,0x18,0x18,0x18,0x18,0x18,0x19,0x19,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x18,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a, + 0x1a,0x1a,0x1b,0x1b,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a, + 0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x19,0x19,0x1a,0x1a,0x1a,0x1a,0x19,0x19, + 0x19,0x19,0x1a,0x1a,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1a,0x1b,0x1d, + 0x1c,0x1c,0x1c,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d, + 0x1d,0x1d,0x1d,0x1d,0x1c,0x1c,0x1b,0x1b,0x1c,0x1c,0x1c,0x1c,0x1c,0x1d,0x1d, + 0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1e,0x1e,0x1d,0x1d,0x1d,0x1d,0x1d, + 0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1c,0x1b,0x1b,0x1b,0x1c,0x1d,0x1e, + 0x1f,0x1f,0x1e,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1e,0x1e,0x1e, + 0x1e,0x1e,0x1e,0x1e,0x1e,0x1f,0x1e,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d, + 0x1d,0x1d,0x1d,0x1d,0x1d,0x1e,0x1e,0x1d,0x1d,0x1d,0x1e,0x1e,0x1e,0x1f,0x1f, + 0x1f,0x1e,0x1e,0x1d,0x1d,0x1d,0x1e,0x1e,0x1e,0x1e,0x1e,0x1d,0x1d,0x1e,0x1f, + 0x1f,0x1f,0x1e,0x1d,0x1e,0x1f,0x1f,0x1e,0x1d,0x1e,0x20,0x20,0x20,0x1f,0x1f, + 0x1f,0x1f,0x1f,0x1f,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x1f,0x20,0x20,0x20,0x1f,0x1f,0x1f,0x1f,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x21,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x1f,0x20,0x20,0x21,0x21,0x20,0x20,0x20,0x20,0x21,0x21, + 0x20,0x20,0x20,0x20,0x20,0x21,0x21,0x21,0x21,0x20,0x20,0x20,0x20,0x20,0x21, + 0x21,0x22,0x21,0x20,0x20,0x20,0x20,0x21,0x21,0x22,0x21,0x21,0x21,0x20,0x20, + 0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x22,0x22,0x21,0x22,0x23,0x24,0x23, + 0x23,0x23,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x21,0x21,0x22,0x22,0x22,0x21, + 0x20,0x20,0x21,0x22,0x22,0x21,0x20,0x20,0x21,0x23,0x23,0x23,0x23,0x23,0x23, + 0x23,0x23,0x23,0x23,0x23,0x22,0x23,0x23,0x23,0x23,0x22,0x22,0x22,0x22,0x23, + 0x23,0x23,0x23,0x23,0x23,0x23,0x22,0x22,0x22,0x22,0x23,0x23,0x24,0x23,0x23, + 0x23,0x23,0x24,0x23,0x22,0x22,0x22,0x22,0x21,0x21,0x21,0x22,0x22,0x22,0x22, + 0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x21,0x21, + 0x22,0x22,0x22,0x22,0x22,0x23,0x23,0x23,0x23,0x23,0x23,0x24,0x24,0x24,0x23, + 0x23,0x23,0x23,0x23,0x24,0xc8,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16, + 0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x17,0x17,0x17,0x18,0x18,0x17,0x17, + 0x17,0x17,0x17,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x19,0x19,0x19,0x19,0x19,0x18,0x18,0x18,0x19,0x19,0x19,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x18,0x18,0x18,0x19, + 0x19,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a, + 0x1a,0x1a,0x1a,0x1a,0x1b,0x1b,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a, + 0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x19,0x19,0x1a,0x1a,0x1a,0x1a, + 0x19,0x19,0x19,0x19,0x1a,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1a, + 0x1b,0x1d,0x1c,0x1c,0x1c,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d, + 0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c, + 0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d, + 0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1c,0x1b,0x1a,0x1b,0x1c, + 0x1e,0x20,0x20,0x20,0x1f,0x1d,0x1d,0x1d,0x1d,0x1d,0x1e,0x1e,0x1e,0x1e,0x1e, + 0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1f,0x1f,0x1e,0x1d,0x1d,0x1d,0x1d,0x1d, + 0x1e,0x1e,0x1d,0x1d,0x1d,0x1d,0x1d,0x1e,0x1e,0x1e,0x1d,0x1d,0x1e,0x1e,0x1e, + 0x1f,0x1f,0x1f,0x1e,0x1e,0x1d,0x1d,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1d,0x1d, + 0x1e,0x1f,0x1f,0x1e,0x1e,0x1d,0x1e,0x1f,0x1f,0x1e,0x1d,0x1e,0x1f,0x20,0x20, + 0x1f,0x1f,0x1f,0x1e,0x1e,0x1f,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x1f,0x1f,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x1f,0x1f,0x20,0x21,0x21,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x21,0x21,0x21,0x21,0x21,0x21,0x20,0x20,0x20,0x20, + 0x20,0x21,0x21,0x21,0x20,0x20,0x20,0x20,0x20,0x21,0x21,0x22,0x22,0x22,0x21, + 0x21,0x22,0x22,0x22,0x22,0x22,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x23, + 0x24,0x23,0x23,0x23,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x21,0x21,0x21,0x22, + 0x22,0x21,0x20,0x20,0x21,0x22,0x22,0x22,0x21,0x21,0x22,0x23,0x23,0x23,0x23, + 0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x22,0x22,0x22, + 0x22,0x23,0x23,0x23,0x23,0x23,0x23,0x22,0x22,0x22,0x22,0x22,0x23,0x23,0x24, + 0x24,0x23,0x23,0x23,0x24,0x24,0x23,0x22,0x22,0x22,0x21,0x21,0x22,0x23,0x23, + 0x23,0x23,0x23,0x23,0x22,0x22,0x22,0x23,0x23,0x23,0x23,0x23,0x22,0x22,0x22, + 0x21,0x21,0x23,0x23,0x23,0x23,0x23,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24, + 0x24,0x23,0x23,0x23,0x23,0x23,0x23,0xc8,0x16,0x16,0x16,0x16,0x16,0x16,0x16, + 0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x17,0x17,0x17,0x17,0x17, + 0x17,0x17,0x17,0x17,0x17,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x19,0x19,0x19,0x19,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x18,0x18, + 0x18,0x19,0x19,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x1a,0x1a,0x1a,0x1a, + 0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1b,0x1b,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a, + 0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x19,0x19,0x19,0x19,0x1a, + 0x1b,0x1b,0x1a,0x19,0x19,0x19,0x1a,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, + 0x1b,0x1a,0x1b,0x1c,0x1c,0x1c,0x1c,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1c,0x1d, + 0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1c,0x1c,0x1c,0x1c,0x1d,0x1c, + 0x1c,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d, + 0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1c,0x1b, + 0x1c,0x1d,0x1e,0x1f,0x20,0x1f,0x1d,0x1c,0x1d,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e, + 0x1e,0x1e,0x1e,0x1e,0x1d,0x1d,0x1d,0x1e,0x1f,0x20,0x1f,0x1f,0x1e,0x1e,0x1d, + 0x1e,0x1e,0x1e,0x1e,0x1e,0x1d,0x1d,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e, + 0x1e,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1e,0x1e,0x1e,0x1f,0x1f,0x1f,0x1e,0x1e, + 0x1d,0x1d,0x1e,0x1f,0x1f,0x1e,0x1e,0x1e,0x1f,0x20,0x1f,0x1e,0x1d,0x1d,0x1e, + 0x20,0x20,0x20,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x21,0x20,0x20,0x20,0x21,0x21,0x20,0x20,0x1f,0x1f,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x21,0x21,0x20,0x21,0x22,0x21,0x21,0x21,0x21,0x21,0x20,0x20, + 0x20,0x20,0x20,0x22,0x21,0x20,0x20,0x20,0x20,0x20,0x20,0x21,0x21,0x22,0x23, + 0x23,0x22,0x22,0x23,0x24,0x24,0x23,0x23,0x22,0x21,0x21,0x21,0x21,0x20,0x20, + 0x20,0x23,0x23,0x22,0x22,0x22,0x23,0x23,0x24,0x24,0x24,0x24,0x24,0x23,0x20, + 0x20,0x21,0x22,0x21,0x20,0x20,0x22,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23, + 0x23,0x23,0x23,0x22,0x22,0x22,0x23,0x23,0x23,0x23,0x23,0x22,0x22,0x22,0x22, + 0x22,0x23,0x23,0x23,0x23,0x23,0x22,0x22,0x21,0x22,0x22,0x21,0x21,0x22,0x23, + 0x23,0x24,0x24,0x23,0x23,0x23,0x23,0x23,0x23,0x22,0x22,0x22,0x22,0x22,0x23, + 0x23,0x23,0x24,0x24,0x24,0x24,0x24,0x23,0x24,0x24,0x24,0x24,0x24,0x24,0x24, + 0x23,0x23,0x22,0x23,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24, + 0x24,0x24,0x24,0x23,0x23,0x23,0x23,0x23,0x23,0xc8,0x16,0x16,0x16,0x16,0x16, + 0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x17,0x17,0x17, + 0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x19,0x19,0x19,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x18,0x18,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x18,0x18,0x18,0x19,0x19,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x1a,0x1a, + 0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1b,0x1b,0x1a,0x1a,0x1a,0x1a,0x1a, + 0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x19,0x19,0x19,0x19, + 0x19,0x1a,0x1b,0x1b,0x1b,0x1a,0x1a,0x1a,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, + 0x1b,0x1b,0x1b,0x1a,0x1b,0x1c,0x1c,0x1c,0x1c,0x1c,0x1d,0x1d,0x1d,0x1d,0x1c, + 0x1c,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1c,0x1c,0x1d, + 0x1d,0x1c,0x1c,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1c, + 0x1c,0x1c,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d, + 0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1e,0x1d,0x1d,0x1d,0x1d,0x1e,0x1e,0x1e,0x1e, + 0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1d,0x1d,0x1d,0x1f,0x20,0x20,0x20,0x1f,0x1e, + 0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1d,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e, + 0x1e,0x1e,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1e,0x1e,0x1e,0x1f,0x1f,0x1f, + 0x1f,0x1e,0x1d,0x1d,0x1e,0x1f,0x1f,0x1f,0x1e,0x1e,0x1f,0x20,0x20,0x1f,0x1d, + 0x1d,0x1e,0x20,0x20,0x20,0x20,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x21,0x21,0x21,0x20, + 0x20,0x20,0x21,0x21,0x20,0x21,0x21,0x21,0x21,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x21,0x22,0x22,0x22,0x22,0x21,0x21,0x21,0x21,0x21, + 0x20,0x20,0x20,0x20,0x21,0x22,0x22,0x20,0x20,0x21,0x21,0x20,0x20,0x21,0x21, + 0x22,0x22,0x23,0x22,0x22,0x24,0x24,0x24,0x23,0x23,0x22,0x22,0x21,0x21,0x21, + 0x20,0x20,0x20,0x22,0x23,0x22,0x22,0x22,0x23,0x23,0x24,0x24,0x24,0x24,0x24, + 0x24,0x21,0x20,0x22,0x23,0x22,0x21,0x20,0x21,0x22,0x23,0x23,0x23,0x24,0x24, + 0x23,0x23,0x23,0x23,0x22,0x22,0x22,0x22,0x23,0x23,0x23,0x23,0x23,0x22,0x22, + 0x22,0x22,0x22,0x23,0x23,0x23,0x23,0x23,0x22,0x21,0x21,0x22,0x22,0x21,0x21, + 0x22,0x23,0x23,0x24,0x24,0x23,0x23,0x23,0x23,0x23,0x23,0x22,0x22,0x22,0x22, + 0x22,0x23,0x23,0x23,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24, + 0x24,0x24,0x24,0x23,0x23,0x23,0x24,0x24,0x23,0x23,0x24,0x24,0x24,0x24,0x24, + 0x23,0x23,0x24,0x24,0x24,0x23,0x23,0x23,0x23,0x23,0x23,0xc8,0x15,0x15,0x16, + 0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x17, + 0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x18,0x18,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x19,0x19,0x18,0x18,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x18,0x17,0x17,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x18,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x18,0x18,0x19,0x19,0x19,0x19,0x19,0x18,0x18,0x18,0x18,0x18,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a, + 0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x19,0x19, + 0x19,0x19,0x1a,0x1b,0x1b,0x1b,0x1b,0x1b,0x1a,0x1a,0x1b,0x1b,0x1c,0x1b,0x1b, + 0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1c,0x1d,0x1c,0x1c,0x1b,0x1c,0x1d,0x1d,0x1d, + 0x1d,0x1c,0x1c,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d, + 0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d, + 0x1d,0x1c,0x1b,0x1c,0x1c,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d, + 0x1c,0x1d,0x1d,0x1f,0x1f,0x1e,0x1d,0x1d,0x1c,0x1c,0x1d,0x1d,0x1e,0x1e,0x1e, + 0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1d,0x1d,0x1d,0x1e,0x1f,0x20,0x20, + 0x20,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1e,0x1e,0x1e,0x1e,0x1e,0x1f,0x1f, + 0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x20,0x20,0x20,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f, + 0x1f,0x1f,0x1f,0x1f,0x1e,0x1e,0x1e,0x1f,0x20,0x1f,0x1f,0x1f,0x20,0x20,0x20, + 0x1f,0x1e,0x1e,0x1f,0x20,0x20,0x20,0x20,0x20,0x1f,0x1f,0x1f,0x20,0x20,0x1f, + 0x1f,0x1f,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x21,0x21,0x21,0x21, + 0x20,0x20,0x20,0x20,0x21,0x21,0x21,0x21,0x21,0x22,0x22,0x21,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x21,0x21,0x21, + 0x21,0x21,0x20,0x20,0x20,0x20,0x21,0x22,0x22,0x23,0x23,0x23,0x22,0x22,0x22, + 0x22,0x22,0x21,0x21,0x21,0x21,0x21,0x22,0x22,0x22,0x22,0x22,0x22,0x21,0x21, + 0x21,0x21,0x22,0x22,0x22,0x21,0x21,0x23,0x23,0x23,0x23,0x23,0x22,0x22,0x22, + 0x21,0x21,0x21,0x21,0x21,0x22,0x23,0x23,0x23,0x23,0x23,0x23,0x22,0x23,0x23, + 0x23,0x23,0x23,0x22,0x21,0x24,0x24,0x24,0x22,0x21,0x21,0x21,0x22,0x22,0x22, + 0x23,0x23,0x23,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x23,0x23, + 0x21,0x21,0x22,0x22,0x22,0x23,0x23,0x23,0x23,0x23,0x22,0x21,0x21,0x22,0x22, + 0x22,0x22,0x22,0x23,0x23,0x24,0x24,0x23,0x23,0x23,0x23,0x23,0x23,0x22,0x22, + 0x22,0x22,0x22,0x23,0x23,0x23,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24, + 0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x23,0x22,0x22,0x22,0x22,0x23,0x23, + 0x23,0x22,0x22,0x21,0x21,0x22,0x23,0x24,0x24,0x24,0x24,0x24,0x24,0xc8,0x15, + 0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x17,0x17,0x17,0x16,0x16, + 0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x19,0x19,0x19,0x19,0x19,0x18,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x18,0x17,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x18,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x18,0x19,0x19,0x19,0x19,0x19,0x19,0x18,0x18,0x18,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x1a,0x1a,0x1a,0x1a,0x1b,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a, + 0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1b,0x1b, + 0x1a,0x19,0x19,0x19,0x1b,0x1b,0x1c,0x1c,0x1b,0x1b,0x1b,0x1b,0x1b,0x1c,0x1c, + 0x1b,0x1b,0x1b,0x1b,0x1c,0x1c,0x1b,0x1b,0x1c,0x1d,0x1c,0x1c,0x1b,0x1c,0x1d, + 0x1d,0x1d,0x1d,0x1d,0x1c,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d, + 0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d, + 0x1d,0x1d,0x1e,0x1c,0x1b,0x1c,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d, + 0x1d,0x1c,0x1c,0x1d,0x1e,0x1f,0x1f,0x1e,0x1d,0x1c,0x1c,0x1d,0x1e,0x1f,0x20, + 0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1d,0x1d,0x1e,0x1f,0x1f, + 0x20,0x20,0x20,0x20,0x1f,0x1f,0x1f,0x20,0x1f,0x1f,0x1e,0x1e,0x1e,0x1e,0x1f, + 0x1f,0x1f,0x20,0x1f,0x1f,0x1f,0x1f,0x20,0x20,0x20,0x20,0x20,0x1f,0x1f,0x1f, + 0x20,0x20,0x1f,0x1f,0x20,0x1f,0x1f,0x1e,0x1e,0x1f,0x20,0x1f,0x1f,0x1f,0x20, + 0x20,0x20,0x20,0x1f,0x1f,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x1f,0x1f,0x20, + 0x20,0x20,0x1f,0x1f,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x21,0x21, + 0x21,0x21,0x20,0x20,0x20,0x20,0x20,0x21,0x21,0x21,0x21,0x22,0x22,0x21,0x21, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x22, + 0x22,0x22,0x22,0x21,0x21,0x21,0x21,0x21,0x21,0x22,0x23,0x23,0x23,0x23,0x22, + 0x22,0x22,0x22,0x22,0x22,0x21,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x23,0x23, + 0x22,0x22,0x21,0x22,0x22,0x22,0x22,0x21,0x21,0x22,0x22,0x22,0x22,0x22,0x22, + 0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x23,0x23,0x24,0x23,0x23,0x23,0x22,0x21, + 0x21,0x21,0x21,0x21,0x22,0x22,0x23,0x25,0x25,0x24,0x23,0x21,0x21,0x22,0x22, + 0x21,0x21,0x22,0x22,0x23,0x23,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22, + 0x23,0x23,0x21,0x21,0x22,0x22,0x22,0x23,0x23,0x24,0x24,0x23,0x23,0x22,0x22, + 0x22,0x23,0x23,0x22,0x23,0x23,0x24,0x24,0x23,0x23,0x23,0x23,0x24,0x23,0x23, + 0x23,0x22,0x22,0x22,0x22,0x23,0x23,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24, + 0x24,0x23,0x23,0x23,0x23,0x23,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x23,0x23, + 0x23,0x24,0x24,0x23,0x23,0x22,0x23,0x23,0x24,0x24,0x24,0x24,0x24,0x24,0x24, + 0xc8,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x17,0x17,0x17,0x17, + 0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x1a,0x1a,0x1a,0x1b,0x1b,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a, + 0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1b, + 0x1b,0x1b,0x1a,0x1a,0x1a,0x1b,0x1b,0x1c,0x1c,0x1c,0x1c,0x1b,0x1b,0x1b,0x1c, + 0x1c,0x1c,0x1b,0x1b,0x1b,0x1b,0x1c,0x1c,0x1c,0x1c,0x1d,0x1d,0x1c,0x1c,0x1c, + 0x1c,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d, + 0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d, + 0x1d,0x1d,0x1d,0x1e,0x1e,0x1d,0x1c,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d, + 0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1e,0x1f,0x1f,0x1e,0x1d,0x1d,0x1d,0x1e,0x1f, + 0x20,0x20,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e, + 0x1f,0x1f,0x20,0x20,0x20,0x20,0x20,0x1f,0x20,0x20,0x1f,0x1f,0x1e,0x1e,0x1e, + 0x1f,0x1f,0x1f,0x20,0x20,0x1f,0x1f,0x1f,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x1f,0x1f,0x20,0x20,0x20,0x20,0x20,0x20,0x1f,0x1f,0x1f,0x20,0x20,0x1f,0x1f, + 0x1f,0x20,0x20,0x20,0x20,0x1f,0x1f,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x21,0x21,0x21,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x21,0x21,0x21, + 0x21,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x22,0x23,0x22,0x22,0x22,0x22,0x22,0x21,0x21,0x21,0x22,0x22,0x23,0x23, + 0x23,0x22,0x22,0x22,0x23,0x23,0x22,0x22,0x22,0x22,0x22,0x23,0x23,0x22,0x23, + 0x23,0x23,0x23,0x22,0x22,0x22,0x23,0x23,0x22,0x21,0x21,0x21,0x21,0x21,0x22, + 0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x23,0x23,0x24,0x24,0x23,0x22, + 0x22,0x21,0x20,0x20,0x20,0x20,0x21,0x23,0x24,0x26,0x26,0x24,0x22,0x21,0x22, + 0x22,0x22,0x22,0x21,0x21,0x22,0x23,0x23,0x23,0x23,0x23,0x22,0x22,0x22,0x23, + 0x23,0x23,0x23,0x23,0x22,0x22,0x22,0x22,0x22,0x23,0x24,0x24,0x24,0x24,0x23, + 0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x24,0x24,0x24,0x24,0x23,0x23,0x23,0x24, + 0x24,0x23,0x23,0x23,0x22,0x22,0x22,0x23,0x23,0x24,0x24,0x24,0x24,0x24,0x24, + 0x24,0x24,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x24,0x24,0x24,0x25,0x25,0x24, + 0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24, + 0x24,0x24,0xc8,0x16,0x16,0x16,0x16,0x16,0x16,0x17,0x17,0x17,0x17,0x17,0x17, + 0x17,0x17,0x18,0x18,0x18,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x19,0x19,0x19,0x19,0x1a,0x1a, + 0x1a,0x1a,0x1a,0x1a,0x19,0x19,0x19,0x19,0x19,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a, + 0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x1a,0x1a,0x1b,0x1b,0x1b,0x1b,0x1b,0x1a,0x1a, + 0x1a,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, + 0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1c,0x1c,0x1d,0x1d,0x1c,0x1b,0x1a,0x1a, + 0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1c,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d, + 0x1d,0x1c,0x1c,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d, + 0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1e,0x1e,0x1e,0x1e,0x1e,0x1d, + 0x1d,0x1d,0x1d,0x1d,0x1e,0x1e,0x1e,0x1e,0x1d,0x1d,0x1e,0x1e,0x1e,0x1e,0x1e, + 0x1e,0x1e,0x1e,0x1e,0x1e,0x1f,0x20,0x1f,0x1e,0x1d,0x1d,0x1d,0x1d,0x1e,0x1f, + 0x20,0x20,0x20,0x1f,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1f,0x1f,0x20, + 0x20,0x1f,0x1e,0x1e,0x1f,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x1f,0x1e,0x1d, + 0x1d,0x1e,0x1f,0x1f,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x1f,0x1f,0x20,0x20, + 0x1f,0x1e,0x1e,0x1f,0x20,0x20,0x20,0x1f,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x1f,0x1f,0x1f,0x1f, + 0x20,0x21,0x21,0x21,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x1f,0x1f,0x20,0x20,0x20,0x20,0x21,0x21,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x22,0x23,0x23,0x23,0x23,0x23,0x23,0x22,0x21,0x21,0x21,0x21, + 0x22,0x23,0x23,0x22,0x22,0x22,0x23,0x23,0x23,0x23,0x22,0x22,0x22,0x23,0x23, + 0x22,0x23,0x24,0x24,0x23,0x22,0x22,0x22,0x23,0x23,0x23,0x22,0x21,0x20,0x20, + 0x21,0x21,0x21,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x23,0x23,0x24, + 0x24,0x23,0x22,0x22,0x21,0x21,0x22,0x23,0x23,0x23,0x23,0x24,0x24,0x24,0x21, + 0x20,0x22,0x24,0x24,0x24,0x23,0x22,0x23,0x24,0x24,0x24,0x23,0x23,0x23,0x23, + 0x23,0x23,0x23,0x24,0x24,0x24,0x24,0x23,0x23,0x23,0x23,0x23,0x23,0x24,0x24, + 0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24, + 0x24,0x24,0x24,0x24,0x24,0x23,0x23,0x22,0x23,0x23,0x24,0x24,0x24,0x24,0x24, + 0x24,0x24,0x24,0x24,0x23,0x23,0x23,0x23,0x23,0x23,0x24,0x24,0x24,0x24,0x26, + 0x25,0x24,0x23,0x23,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24, + 0x24,0x24,0x23,0x23,0xc8,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17, + 0x17,0x17,0x17,0x18,0x18,0x18,0x18,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17, + 0x17,0x17,0x18,0x19,0x18,0x18,0x18,0x18,0x18,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x19,0x19,0x19, + 0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x19,0x19,0x19,0x1a,0x1a,0x1a,0x1a,0x1a, + 0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x1a,0x1a,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, + 0x1a,0x1a,0x1a,0x1b,0x1b,0x1b,0x1c,0x1c,0x1c,0x1c,0x1b,0x1b,0x1b,0x1c,0x1c, + 0x1c,0x1c,0x1c,0x1b,0x1b,0x1b,0x1b,0x1b,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c, + 0x1b,0x1b,0x1c,0x1c,0x1b,0x1b,0x1b,0x1b,0x1b,0x1c,0x1c,0x1d,0x1d,0x1d,0x1d, + 0x1d,0x1d,0x1c,0x1c,0x1c,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d, + 0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1e,0x1e,0x1e,0x1e, + 0x1e,0x1d,0x1d,0x1d,0x1d,0x1d,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e, + 0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1f,0x20,0x20,0x1f,0x1e,0x1d,0x1e,0x1e, + 0x1f,0x20,0x20,0x1f,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1f, + 0x1f,0x20,0x20,0x20,0x1f,0x1f,0x1f,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x1f, + 0x1e,0x1e,0x1e,0x1e,0x1f,0x1f,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x1f, + 0x1f,0x20,0x1f,0x1f,0x1f,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x21,0x21,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x21,0x21,0x21,0x21,0x20, + 0x20,0x21,0x21,0x21,0x21,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x22,0x21,0x21, + 0x21,0x22,0x22,0x23,0x23,0x23,0x22,0x22,0x22,0x23,0x23,0x23,0x22,0x22,0x22, + 0x23,0x22,0x22,0x23,0x24,0x24,0x23,0x22,0x22,0x22,0x23,0x23,0x23,0x22,0x22, + 0x21,0x21,0x21,0x21,0x21,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22, + 0x23,0x23,0x24,0x23,0x23,0x22,0x22,0x23,0x23,0x24,0x24,0x23,0x23,0x24,0x24, + 0x23,0x21,0x21,0x23,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x23,0x23, + 0x23,0x23,0x23,0x23,0x23,0x24,0x24,0x24,0x24,0x23,0x23,0x23,0x23,0x23,0x24, + 0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24, + 0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24, + 0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x23,0x23,0x23,0x23,0x24,0x24,0x24,0x24, + 0x24,0x25,0x25,0x24,0x23,0x23,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24, + 0x24,0x24,0x24,0x24,0x24,0x23,0xc8,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x18,0x19,0x19,0x19,0x19,0x19,0x18,0x18,0x18,0x18,0x18,0x19, + 0x19,0x19,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x19,0x19,0x19,0x19,0x19,0x19, + 0x1a,0x1a,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x18,0x18,0x17,0x18,0x1a, + 0x1a,0x19,0x19,0x19,0x19,0x1a,0x1a,0x1a,0x1a,0x1a,0x19,0x19,0x19,0x19,0x19, + 0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1b,0x1a,0x1a,0x1a,0x1a,0x1a, + 0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, + 0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1c,0x1d,0x1d,0x1d,0x1d,0x1c,0x1c,0x1c, + 0x1d,0x1d,0x1d,0x1d,0x1d,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1b,0x1b,0x1b, + 0x1c,0x1c,0x1d,0x1d,0x1d,0x1d,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1d,0x1d,0x1d, + 0x1d,0x1d,0x1d,0x1d,0x1c,0x1b,0x1b,0x1c,0x1d,0x1d,0x1e,0x1e,0x1d,0x1d,0x1d, + 0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1e,0x1e, + 0x1d,0x1d,0x1d,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1f,0x1f, + 0x1f,0x1f,0x1f,0x1e,0x1e,0x1d,0x1d,0x1d,0x1d,0x1e,0x1f,0x1f,0x1f,0x1f,0x1f, + 0x1f,0x1e,0x1e,0x1e,0x1e,0x1d,0x1d,0x1e,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f, + 0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x20,0x20,0x20,0x20,0x1f,0x1f,0x1f,0x20,0x20, + 0x1f,0x1e,0x1f,0x20,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x22, + 0x21,0x1f,0x1f,0x20,0x20,0x21,0x21,0x21,0x20,0x20,0x20,0x20,0x21,0x21,0x20, + 0x20,0x20,0x21,0x21,0x21,0x21,0x20,0x20,0x20,0x21,0x21,0x22,0x23,0x23,0x22, + 0x22,0x22,0x21,0x20,0x20,0x20,0x20,0x20,0x20,0x21,0x21,0x21,0x21,0x21,0x21, + 0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21, + 0x21,0x21,0x22,0x22,0x23,0x24,0x24,0x23,0x23,0x24,0x24,0x24,0x23,0x23,0x22, + 0x21,0x21,0x22,0x22,0x23,0x24,0x24,0x23,0x23,0x22,0x22,0x22,0x22,0x22,0x22, + 0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x21,0x21,0x21,0x22,0x22,0x22, + 0x22,0x22,0x22,0x22,0x22,0x21,0x21,0x21,0x21,0x21,0x22,0x22,0x22,0x22,0x22, + 0x22,0x22,0x22,0x23,0x23,0x23,0x23,0x22,0x22,0x23,0x23,0x23,0x24,0x24,0x24, + 0x24,0x23,0x22,0x22,0x23,0x24,0x24,0x24,0x24,0x24,0x26,0x25,0x23,0x23,0x23, + 0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x23,0x23,0x23,0x23,0x23,0x23,0x24,0x24, + 0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x23,0x23,0x24,0x24, + 0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24, + 0x24,0x24,0x24,0x24,0x24,0x24,0x25,0x25,0x24,0x24,0x24,0x24,0x24,0x24,0x24, + 0x24,0x24,0x23,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24, + 0x24,0x24,0x25,0x25,0x25,0x25,0x24,0x24,0xc8,0x18,0x18,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x18,0x19,0x19,0x19,0x19,0x19,0x18,0x18,0x18,0x18, + 0x19,0x19,0x19,0x19,0x19,0x18,0x18,0x19,0x19,0x18,0x18,0x18,0x18,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x18,0x18, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x1a,0x1a,0x1a,0x1a,0x1a,0x19,0x19,0x19, + 0x19,0x19,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1b,0x1b,0x1b,0x1b, + 0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1b,0x1b,0x1b,0x1b, + 0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c, + 0x1b,0x1c,0x1c,0x1d,0x1d,0x1d,0x1d,0x1c,0x1b,0x1c,0x1c,0x1c,0x1c,0x1b,0x1b, + 0x1b,0x1b,0x1b,0x1c,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d, + 0x1d,0x1d,0x1c,0x1d,0x1d,0x1c,0x1b,0x1b,0x1b,0x1c,0x1d,0x1d,0x1e,0x1d,0x1d, + 0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1e,0x1e,0x1e,0x1e, + 0x1e,0x1d,0x1d,0x1d,0x1d,0x1d,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e, + 0x1e,0x1f,0x1f,0x1f,0x1e,0x1e,0x1e,0x1d,0x1d,0x1d,0x1d,0x1e,0x1e,0x1e,0x1e, + 0x1f,0x1f,0x1f,0x1e,0x1e,0x1e,0x1e,0x1d,0x1d,0x1e,0x1f,0x1f,0x1f,0x1f,0x1f, + 0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x20,0x20,0x20,0x20,0x1f,0x1f,0x1f, + 0x20,0x20,0x1f,0x1f,0x1f,0x20,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f, + 0x1f,0x1f,0x1f,0x1f,0x20,0x22,0x21,0x21,0x21,0x21,0x21,0x20,0x20,0x20,0x20, + 0x20,0x21,0x20,0x1f,0x1f,0x1f,0x20,0x20,0x20,0x20,0x20,0x1f,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x21,0x21,0x20,0x20,0x20,0x20,0x20,0x21,0x22,0x22, + 0x23,0x22,0x22,0x22,0x21,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x21,0x21,0x21, + 0x21,0x22,0x22,0x22,0x21,0x21,0x21,0x21,0x22,0x22,0x21,0x20,0x21,0x21,0x21, + 0x21,0x21,0x21,0x21,0x22,0x22,0x23,0x23,0x24,0x23,0x23,0x23,0x24,0x23,0x23, + 0x23,0x22,0x21,0x21,0x22,0x22,0x23,0x23,0x24,0x23,0x23,0x22,0x22,0x22,0x22, + 0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x21,0x21,0x22,0x22, + 0x23,0x22,0x23,0x23,0x23,0x23,0x23,0x22,0x21,0x21,0x21,0x21,0x22,0x23,0x22, + 0x23,0x23,0x22,0x22,0x22,0x23,0x23,0x23,0x23,0x22,0x23,0x23,0x23,0x24,0x24, + 0x24,0x24,0x24,0x23,0x22,0x23,0x24,0x24,0x24,0x24,0x24,0x24,0x25,0x24,0x23, + 0x23,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x23,0x23,0x23,0x23,0x23,0x24, + 0x24,0x24,0x25,0x25,0x25,0x24,0x24,0x24,0x24,0x25,0x24,0x24,0x24,0x24,0x23, + 0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24, + 0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x25,0x24,0x24,0x24,0x24,0x24, + 0x24,0x25,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x25,0x24,0x24,0x24,0x24, + 0x24,0x24,0x24,0x24,0x25,0x25,0x25,0x25,0x24,0x24,0xc8,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x19,0x19,0x19,0x19,0x19,0x18,0x18, + 0x18,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x18,0x18,0x18,0x18, + 0x18,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x1a,0x1a,0x1a,0x1a,0x1a,0x19, + 0x19,0x19,0x19,0x19,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1b,0x1b, + 0x1b,0x1b,0x1b,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1b,0x1b,0x1b, + 0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, + 0x1b,0x1b,0x1b,0x1b,0x1c,0x1c,0x1d,0x1d,0x1d,0x1b,0x1b,0x1b,0x1c,0x1c,0x1b, + 0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1c,0x1d,0x1e,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d, + 0x1d,0x1d,0x1d,0x1d,0x1c,0x1d,0x1d,0x1d,0x1c,0x1b,0x1c,0x1c,0x1d,0x1d,0x1d, + 0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1e,0x1e,0x1e, + 0x1e,0x1e,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1e,0x1e,0x1e, + 0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e, + 0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1f,0x1f,0x1f, + 0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x20,0x20,0x20,0x20,0x20, + 0x1f,0x1f,0x20,0x20,0x20,0x1f,0x1f,0x20,0x20,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f, + 0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x20,0x22,0x22,0x21,0x21,0x21,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x1f,0x1f,0x1f,0x20,0x20,0x20,0x1f,0x1f,0x1f,0x1f, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x21,0x22,0x22,0x21,0x21,0x21,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x21,0x21,0x21,0x22,0x22,0x22,0x21,0x21,0x21,0x22,0x22,0x22,0x22,0x20,0x20, + 0x21,0x21,0x21,0x21,0x21,0x21,0x22,0x22,0x22,0x23,0x23,0x23,0x23,0x23,0x23, + 0x23,0x23,0x23,0x22,0x21,0x21,0x22,0x22,0x23,0x23,0x23,0x23,0x23,0x22,0x22, + 0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x23,0x23,0x23,0x23,0x22,0x22, + 0x22,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x22,0x22,0x22,0x22,0x22,0x23, + 0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x24, + 0x24,0x24,0x24,0x24,0x24,0x24,0x23,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24, + 0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24, + 0x24,0x24,0x24,0x24,0x25,0x25,0x25,0x24,0x24,0x24,0x25,0x25,0x24,0x24,0x24, + 0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24, + 0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24, + 0x24,0x24,0x25,0x25,0x24,0x24,0x24,0x24,0x24,0x24,0x25,0x25,0x25,0x25,0x24, + 0x24,0x24,0x24,0x24,0x24,0x24,0x25,0x25,0x25,0x25,0x24,0x24,0xc8,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x19,0x19,0x18,0x18,0x18, + 0x18,0x18,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x18,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x1a,0x1a, + 0x19,0x19,0x19,0x19,0x19,0x19,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a, + 0x1a,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, + 0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1a,0x1a, + 0x1b,0x1c,0x1b,0x1b,0x1b,0x1c,0x1c,0x1d,0x1d,0x1d,0x1d,0x1b,0x1a,0x1b,0x1b, + 0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1c,0x1c,0x1c,0x1c,0x1d,0x1d,0x1c,0x1c,0x1d, + 0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d, + 0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1e, + 0x1e,0x1e,0x1e,0x1e,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1e, + 0x1e,0x1f,0x1f,0x1f,0x1e,0x1e,0x1e,0x1e,0x1e,0x1f,0x1f,0x1f,0x1f,0x1f,0x1e, + 0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f, + 0x1f,0x1f,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x1f,0x1f,0x1f,0x20,0x20,0x20, + 0x20,0x20,0x1f,0x20,0x20,0x20,0x20,0x1f,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x1f,0x1f,0x1f,0x1f,0x1f,0x20,0x21,0x21,0x21,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x21,0x21,0x21,0x21,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x21,0x21,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x23,0x23,0x22, + 0x22,0x22,0x23,0x23,0x24,0x23,0x24,0x24,0x23,0x23,0x23,0x24,0x24,0x23,0x23, + 0x23,0x23,0x23,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x23,0x23,0x22,0x22, + 0x22,0x22,0x22,0x22,0x22,0x23,0x23,0x23,0x22,0x22,0x22,0x23,0x23,0x23,0x23, + 0x22,0x22,0x22,0x23,0x23,0x23,0x22,0x22,0x24,0x24,0x23,0x23,0x23,0x23,0x23, + 0x23,0x24,0x24,0x24,0x23,0x23,0x24,0x24,0x24,0x23,0x23,0x24,0x24,0x24,0x24, + 0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x23, + 0x23,0x23,0x23,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24, + 0x24,0x24,0x24,0x24,0x24,0x24,0x25,0x26,0x26,0x25,0x25,0x25,0x25,0x25,0x25, + 0x25,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24, + 0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x25,0x25,0x24,0x24,0x24,0x24,0x24, + 0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x23,0x24,0x24,0x25,0x26,0x25, + 0x25,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x25,0x25,0x26,0x25,0x24,0xc8, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x19,0x19,0x18, + 0x18,0x18,0x18,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x1a,0x1a,0x19,0x19,0x19,0x19,0x19,0x19,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a, + 0x1a,0x1a,0x1a,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, + 0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, + 0x1b,0x1b,0x1c,0x1c,0x1c,0x1c,0x1c,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1b,0x1a, + 0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1c,0x1c,0x1c,0x1c,0x1c,0x1b,0x1b,0x1c, + 0x1c,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1e,0x1d,0x1d,0x1d,0x1e,0x1e,0x1e, + 0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d, + 0x1d,0x1d,0x1e,0x1e,0x1e,0x1e,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d, + 0x1d,0x1e,0x1f,0x1f,0x1f,0x1f,0x1e,0x1e,0x1e,0x1e,0x1e,0x1f,0x1f,0x1f,0x1f, + 0x1f,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1f,0x1f,0x1f,0x1f, + 0x1f,0x1f,0x1f,0x1f,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x1f,0x1f,0x1f,0x20, + 0x20,0x20,0x20,0x20,0x1f,0x20,0x20,0x20,0x20,0x1f,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x1f,0x1f,0x1f,0x1f,0x20,0x20,0x21,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x21,0x21,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x21,0x21,0x21,0x20,0x20,0x20,0x20,0x20,0x21, + 0x20,0x20,0x20,0x20,0x20,0x21,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x23,0x23, + 0x24,0x23,0x22,0x22,0x23,0x23,0x24,0x24,0x24,0x23,0x23,0x22,0x22,0x23,0x23, + 0x23,0x23,0x23,0x23,0x23,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x23,0x23, + 0x22,0x22,0x22,0x22,0x22,0x22,0x23,0x23,0x23,0x23,0x22,0x22,0x22,0x23,0x23, + 0x23,0x23,0x22,0x22,0x22,0x23,0x23,0x23,0x22,0x23,0x24,0x24,0x23,0x23,0x23, + 0x23,0x23,0x23,0x24,0x24,0x24,0x24,0x23,0x24,0x24,0x24,0x23,0x23,0x24,0x24, + 0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24, + 0x24,0x23,0x23,0x23,0x23,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24, + 0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x25,0x25,0x26,0x25,0x25,0x25,0x25, + 0x25,0x25,0x25,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24, + 0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x25,0x25,0x25,0x25,0x24,0x24, + 0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x23,0x23,0x24,0x25, + 0x26,0x25,0x25,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x25,0x26,0x26,0x26, + 0x25,0xc8,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x18,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x18,0x19,0x19,0x19,0x19,0x19,0x19,0x18,0x18,0x18, + 0x18,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x1a,0x1a,0x1a,0x19,0x19,0x19,0x19,0x19,0x1a,0x1a,0x1a,0x1a,0x19, + 0x19,0x19,0x1a,0x1a,0x1a,0x1b,0x1b,0x1a,0x1a,0x1a,0x1b,0x1b,0x1b,0x1b,0x1c, + 0x1c,0x1c,0x1d,0x1d,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1b,0x1b,0x1b, + 0x1b,0x1b,0x1c,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d, + 0x1b,0x1b,0x1b,0x1c,0x1c,0x1c,0x1c,0x1c,0x1d,0x1d,0x1d,0x1d,0x1d,0x1c,0x1b, + 0x1b,0x1b,0x1c,0x1d,0x1d,0x1d,0x1d,0x1e,0x1e,0x1e,0x1e,0x1e,0x1d,0x1e,0x1e, + 0x1e,0x1e,0x1e,0x1d,0x1d,0x1d,0x1e,0x1e,0x1e,0x1e,0x1d,0x1d,0x1d,0x1d,0x1d, + 0x1d,0x1d,0x1d,0x1d,0x1d,0x1e,0x1e,0x1e,0x1d,0x1d,0x1e,0x1e,0x1e,0x1e,0x1e, + 0x1d,0x1d,0x1d,0x1e,0x1e,0x1f,0x1f,0x1f,0x1e,0x1e,0x1d,0x1e,0x1e,0x1f,0x20, + 0x20,0x1f,0x1f,0x1f,0x1f,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1f,0x1f, + 0x1f,0x20,0x20,0x1f,0x1f,0x1f,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x1f,0x1f, + 0x1f,0x20,0x20,0x20,0x20,0x20,0x1f,0x20,0x20,0x20,0x20,0x1f,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x22,0x22,0x21,0x20, + 0x20,0x20,0x20,0x20,0x21,0x21,0x21,0x20,0x20,0x21,0x21,0x20,0x20,0x20,0x20, + 0x20,0x21,0x21,0x21,0x21,0x21,0x20,0x20,0x21,0x21,0x21,0x20,0x20,0x20,0x21, + 0x21,0x22,0x21,0x21,0x21,0x20,0x20,0x21,0x22,0x23,0x23,0x23,0x22,0x22,0x22, + 0x22,0x23,0x24,0x23,0x21,0x21,0x21,0x22,0x22,0x22,0x22,0x21,0x21,0x21,0x21, + 0x21,0x21,0x23,0x23,0x23,0x23,0x23,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22, + 0x23,0x23,0x22,0x22,0x22,0x22,0x22,0x23,0x23,0x23,0x22,0x22,0x22,0x22,0x23, + 0x24,0x24,0x24,0x24,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x24,0x24,0x24, + 0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x23,0x23, + 0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x23,0x23,0x23,0x24,0x24, + 0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24, + 0x24,0x24,0x25,0x25,0x25,0x24,0x24,0x24,0x24,0x24,0x25,0x25,0x25,0x25,0x25, + 0x24,0x25,0x25,0x24,0x24,0x25,0x25,0x25,0x24,0x24,0x24,0x24,0x24,0x24,0x24, + 0x24,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25, + 0x25,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x23,0x23, + 0x24,0x24,0x25,0x25,0x25,0x24,0x24,0x24,0x24,0x24,0x25,0x24,0x24,0x25,0x26, + 0x26,0x26,0x26,0xc8,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x18,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x18, + 0x18,0x18,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x19,0x19,0x19,0x1a,0x1a,0x1a,0x1a, + 0x1a,0x19,0x19,0x19,0x1a,0x1a,0x1b,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1b, + 0x1b,0x1b,0x1b,0x1c,0x1d,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c, + 0x1c,0x1c,0x1b,0x1b,0x1c,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d, + 0x1d,0x1c,0x1c,0x1b,0x1c,0x1c,0x1c,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d, + 0x1d,0x1c,0x1d,0x1c,0x1c,0x1d,0x1d,0x1d,0x1d,0x1e,0x1d,0x1d,0x1d,0x1d,0x1d, + 0x1d,0x1e,0x1e,0x1e,0x1d,0x1d,0x1d,0x1d,0x1d,0x1e,0x1e,0x1e,0x1e,0x1d,0x1d, + 0x1e,0x1d,0x1d,0x1d,0x1d,0x1d,0x1e,0x1e,0x1e,0x1e,0x1d,0x1d,0x1e,0x1e,0x1f, + 0x1f,0x1e,0x1e,0x1d,0x1d,0x1e,0x1e,0x1f,0x1f,0x1f,0x1e,0x1d,0x1d,0x1d,0x1e, + 0x1f,0x20,0x20,0x20,0x1f,0x1f,0x1f,0x1e,0x1f,0x1e,0x1e,0x1e,0x1e,0x1e,0x1f, + 0x1f,0x1f,0x20,0x20,0x20,0x1f,0x1f,0x1f,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x1f,0x1f,0x1f,0x20,0x20,0x20,0x20,0x20,0x1f,0x20,0x20,0x20,0x20,0x1f,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x1f,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x21,0x21,0x21,0x22,0x21, + 0x21,0x20,0x20,0x20,0x20,0x20,0x20,0x21,0x21,0x20,0x20,0x21,0x21,0x21,0x20, + 0x20,0x20,0x21,0x22,0x22,0x22,0x22,0x21,0x21,0x21,0x22,0x21,0x21,0x20,0x21, + 0x21,0x22,0x22,0x23,0x22,0x22,0x22,0x21,0x20,0x21,0x22,0x23,0x23,0x23,0x22, + 0x22,0x22,0x22,0x22,0x23,0x23,0x22,0x22,0x22,0x22,0x22,0x22,0x21,0x21,0x21, + 0x21,0x21,0x22,0x22,0x23,0x23,0x23,0x23,0x22,0x22,0x22,0x22,0x22,0x22,0x22, + 0x22,0x22,0x23,0x23,0x23,0x22,0x22,0x22,0x23,0x23,0x23,0x23,0x22,0x22,0x21, + 0x22,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24, + 0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24, + 0x24,0x23,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x23,0x23, + 0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24, + 0x24,0x24,0x24,0x25,0x25,0x25,0x25,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24, + 0x25,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x25,0x25,0x25,0x24,0x24,0x24,0x24, + 0x24,0x24,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25, + 0x25,0x25,0x26,0x25,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24, + 0x23,0x23,0x24,0x24,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x24,0x24, + 0x24,0x25,0x26,0x26,0x25,0xc8,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x19,0x19,0x19,0x19,0x19, + 0x19,0x18,0x18,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x19,0x19,0x1a,0x1a, + 0x1a,0x1a,0x1a,0x19,0x19,0x19,0x1a,0x1b,0x1b,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a, + 0x1a,0x1b,0x1b,0x1b,0x1b,0x1b,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c, + 0x1c,0x1c,0x1c,0x1c,0x1b,0x1b,0x1c,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d, + 0x1d,0x1d,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d, + 0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1c, + 0x1d,0x1d,0x1d,0x1d,0x1e,0x1e,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1e,0x1e,0x1e, + 0x1e,0x1e,0x1e,0x1e,0x1d,0x1d,0x1d,0x1e,0x1e,0x1e,0x1e,0x1e,0x1d,0x1d,0x1e, + 0x1f,0x1f,0x1f,0x1f,0x1e,0x1d,0x1d,0x1e,0x1e,0x1f,0x1f,0x1f,0x1e,0x1e,0x1d, + 0x1e,0x1e,0x1f,0x1f,0x20,0x20,0x20,0x1f,0x1f,0x1f,0x1f,0x1f,0x1e,0x1e,0x1e, + 0x1f,0x1f,0x1f,0x1f,0x20,0x20,0x20,0x1f,0x1f,0x1f,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x1f,0x1f,0x1f,0x20,0x20,0x20,0x20,0x20,0x1f,0x20,0x20,0x20,0x20, + 0x1f,0x20,0x20,0x20,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x21,0x21,0x21, + 0x21,0x21,0x21,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x22,0x22, + 0x21,0x20,0x20,0x21,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x21,0x21, + 0x21,0x22,0x22,0x23,0x23,0x23,0x23,0x23,0x22,0x22,0x21,0x22,0x22,0x23,0x23, + 0x23,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x23,0x23,0x23,0x23,0x22,0x22,0x22, + 0x21,0x21,0x21,0x22,0x23,0x23,0x23,0x23,0x23,0x22,0x22,0x22,0x22,0x22,0x22, + 0x22,0x22,0x22,0x22,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x22, + 0x22,0x21,0x22,0x24,0x25,0x25,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24, + 0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24, + 0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24, + 0x24,0x23,0x23,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24, + 0x24,0x24,0x24,0x24,0x24,0x24,0x25,0x25,0x25,0x24,0x24,0x24,0x24,0x24,0x24, + 0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x25,0x25,0x25,0x24, + 0x24,0x24,0x24,0x24,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25, + 0x25,0x25,0x25,0x26,0x26,0x26,0x25,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24, + 0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25, + 0x24,0x24,0x24,0x24,0x25,0x25,0x25,0xc8,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x18,0x18,0x18,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x18,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x19,0x19,0x19,0x19,0x19,0x1a,0x1a,0x1a,0x1a,0x1a, + 0x19,0x19,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1b,0x1b,0x1a,0x1a, + 0x1a,0x1a,0x1a,0x1a,0x1a,0x19,0x19,0x1a,0x1a,0x1a,0x1b,0x1b,0x1c,0x1c,0x1c, + 0x1c,0x1b,0x1b,0x1c,0x1c,0x1c,0x1c,0x1c,0x1b,0x1b,0x1c,0x1c,0x1c,0x1c,0x1c, + 0x1d,0x1d,0x1d,0x1d,0x1c,0x1c,0x1c,0x1c,0x1c,0x1d,0x1d,0x1d,0x1d,0x1c,0x1c, + 0x1c,0x1c,0x1c,0x1c,0x1b,0x1b,0x1c,0x1d,0x1c,0x1c,0x1c,0x1d,0x1d,0x1d,0x1d, + 0x1d,0x1d,0x1d,0x1d,0x1d,0x1e,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d, + 0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1e,0x1e,0x1e,0x1d,0x1d,0x1d,0x1d,0x1e,0x1e, + 0x1e,0x1f,0x1f,0x1f,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1d, + 0x1d,0x1d,0x1e,0x1f,0x1f,0x1f,0x1f,0x1e,0x1e,0x1e,0x1e,0x1e,0x1f,0x1f,0x1f, + 0x1e,0x1e,0x1e,0x1e,0x1f,0x1f,0x20,0x20,0x20,0x20,0x20,0x20,0x1f,0x1f,0x1f, + 0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x1f,0x20,0x20, + 0x20,0x20,0x20,0x20,0x21,0x20,0x1f,0x1f,0x1f,0x1f,0x1f,0x20,0x20,0x20,0x20, + 0x20,0x21,0x21,0x20,0x20,0x20,0x20,0x20,0x20,0x21,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x21,0x21,0x21,0x21,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x21, + 0x22,0x22,0x22,0x21,0x21,0x21,0x22,0x22,0x22,0x23,0x23,0x23,0x23,0x22,0x22, + 0x22,0x22,0x22,0x22,0x23,0x24,0x24,0x24,0x23,0x23,0x23,0x23,0x23,0x23,0x23, + 0x23,0x23,0x23,0x23,0x23,0x23,0x22,0x22,0x21,0x22,0x24,0x24,0x24,0x24,0x24, + 0x23,0x23,0x23,0x23,0x23,0x24,0x24,0x24,0x24,0x24,0x23,0x22,0x22,0x22,0x22, + 0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24, + 0x24,0x23,0x22,0x21,0x22,0x24,0x25,0x24,0x24,0x24,0x23,0x23,0x23,0x24,0x24, + 0x24,0x23,0x23,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24, + 0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x25, + 0x26,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24, + 0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x25,0x25,0x25,0x24,0x24,0x24,0x24, + 0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x25,0x25, + 0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x24,0x24,0x24,0x25,0x25,0x25,0x25, + 0x25,0x26,0x26,0x26,0x26,0x26,0x27,0x26,0x26,0x25,0x25,0x25,0x25,0x25,0x24, + 0x24,0x24,0x24,0x24,0x25,0x25,0x24,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25, + 0x25,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0xc8,0x18,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x18,0x18,0x18,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x18,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x19,0x19,0x19,0x19,0x1a,0x1a,0x1a,0x1a, + 0x1a,0x1a,0x19,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1b,0x1b, + 0x1b,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x19,0x1a,0x1a,0x1a,0x1b,0x1b,0x1c,0x1c, + 0x1c,0x1c,0x1d,0x1d,0x1d,0x1d,0x1d,0x1c,0x1c,0x1c,0x1b,0x1c,0x1c,0x1c,0x1c, + 0x1c,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1c,0x1c,0x1c,0x1c,0x1c,0x1d,0x1d,0x1d, + 0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1b,0x1b,0x1d,0x1d,0x1c,0x1c,0x1c,0x1d,0x1d, + 0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1e,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d, + 0x1d,0x1e,0x1e,0x1e,0x1d,0x1d,0x1d,0x1e,0x1e,0x1e,0x1e,0x1e,0x1d,0x1d,0x1e, + 0x1e,0x1e,0x1f,0x1f,0x1f,0x1f,0x1f,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e, + 0x1e,0x1d,0x1d,0x1d,0x1e,0x1f,0x1f,0x1f,0x1f,0x1f,0x1e,0x1e,0x1e,0x1e,0x1f, + 0x1f,0x1f,0x1f,0x1e,0x1e,0x1e,0x1f,0x1f,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x1f, + 0x20,0x20,0x20,0x20,0x20,0x20,0x21,0x20,0x1f,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x21,0x22,0x22,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x20,0x20, + 0x20,0x20,0x20,0x20,0x21,0x21,0x21,0x21,0x21,0x21,0x20,0x20,0x20,0x20,0x20, + 0x21,0x21,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x23,0x23,0x23,0x23,0x23, + 0x22,0x22,0x22,0x22,0x22,0x23,0x23,0x24,0x24,0x24,0x23,0x23,0x23,0x23,0x23, + 0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x22,0x21,0x21,0x23,0x23,0x23, + 0x23,0x23,0x22,0x22,0x22,0x22,0x23,0x23,0x24,0x24,0x24,0x24,0x23,0x22,0x22, + 0x22,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x24,0x24,0x24,0x24,0x24,0x24,0x24, + 0x24,0x24,0x24,0x23,0x22,0x21,0x22,0x24,0x24,0x24,0x24,0x23,0x23,0x22,0x23, + 0x23,0x24,0x24,0x23,0x23,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24, + 0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24, + 0x24,0x26,0x26,0x25,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24, + 0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x25,0x25,0x25,0x25,0x24,0x24, + 0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24, + 0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x24,0x24,0x24,0x25,0x25, + 0x25,0x25,0x26,0x26,0x26,0x26,0x26,0x27,0x27,0x27,0x26,0x25,0x25,0x25,0x25, + 0x25,0x25,0x24,0x24,0x24,0x25,0x26,0x26,0x25,0x25,0x25,0x25,0x25,0x25,0x25, + 0x25,0x25,0x25,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0xc8,0x18,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x18,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x18,0x18,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x18,0x18,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x18,0x18,0x18,0x18,0x19,0x19,0x19,0x19,0x19,0x19,0x1a,0x1a,0x1a, + 0x1a,0x1a,0x1a,0x1a,0x19,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x19,0x19,0x1a, + 0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1a,0x1a,0x1a,0x1a,0x1a,0x1b,0x1b,0x1b, + 0x1c,0x1c,0x1c,0x1c,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1c,0x1c,0x1c, + 0x1c,0x1c,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1c,0x1c,0x1d, + 0x1d,0x1d,0x1c,0x1c,0x1c,0x1c,0x1c,0x1d,0x1c,0x1c,0x1d,0x1d,0x1d,0x1d,0x1d, + 0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d, + 0x1d,0x1d,0x1e,0x1f,0x1f,0x1f,0x1e,0x1d,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e, + 0x1e,0x1e,0x1e,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1e,0x1e,0x1e,0x1e, + 0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f, + 0x1e,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x1f,0x1f,0x1f,0x1f,0x1f,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x21,0x21, + 0x20,0x20,0x20,0x21,0x21,0x21,0x20,0x21,0x22,0x21,0x20,0x20,0x20,0x20,0x21, + 0x21,0x21,0x21,0x21,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x21, + 0x21,0x21,0x20,0x20,0x20,0x20,0x21,0x21,0x21,0x22,0x22,0x22,0x21,0x21,0x21, + 0x21,0x21,0x21,0x22,0x22,0x22,0x22,0x22,0x23,0x23,0x23,0x22,0x23,0x23,0x23, + 0x23,0x23,0x22,0x21,0x22,0x22,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23, + 0x23,0x24,0x23,0x23,0x23,0x23,0x23,0x24,0x24,0x24,0x23,0x22,0x21,0x21,0x21, + 0x21,0x22,0x22,0x22,0x21,0x21,0x21,0x21,0x21,0x22,0x22,0x22,0x24,0x24,0x23, + 0x22,0x22,0x23,0x23,0x23,0x24,0x24,0x23,0x23,0x23,0x24,0x24,0x24,0x24,0x24, + 0x24,0x24,0x24,0x24,0x24,0x24,0x23,0x22,0x23,0x24,0x24,0x24,0x23,0x23,0x22, + 0x22,0x22,0x23,0x23,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24, + 0x24,0x24,0x24,0x24,0x24,0x24,0x25,0x25,0x25,0x25,0x25,0x25,0x24,0x24,0x24, + 0x25,0x25,0x25,0x26,0x26,0x25,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24, + 0x25,0x25,0x24,0x24,0x24,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25, + 0x25,0x25,0x24,0x24,0x24,0x25,0x25,0x25,0x24,0x24,0x24,0x24,0x25,0x24,0x24, + 0x24,0x24,0x25,0x25,0x25,0x26,0x26,0x26,0x26,0x26,0x25,0x25,0x25,0x25,0x25, + 0x25,0x25,0x25,0x26,0x26,0x26,0x26,0x26,0x26,0x27,0x28,0x27,0x26,0x25,0x25, + 0x26,0x26,0x26,0x25,0x24,0x24,0x24,0x25,0x26,0x26,0x26,0x26,0x26,0x25,0x25, + 0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x24,0x24,0x24,0x24,0x24,0xc8,0x18, + 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x18,0x18,0x18,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x18,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x1a,0x1a, + 0x1a,0x1a,0x1a,0x19,0x19,0x19,0x19,0x19,0x19,0x1a,0x1a,0x1a,0x1a,0x19,0x19, + 0x19,0x1a,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1a,0x1a,0x1a,0x1a,0x1a,0x1b, + 0x1b,0x1b,0x1a,0x1a,0x1b,0x1b,0x1c,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1c, + 0x1c,0x1c,0x1c,0x1c,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d, + 0x1d,0x1d,0x1d,0x1d,0x1c,0x1c,0x1c,0x1d,0x1d,0x1d,0x1d,0x1d,0x1e,0x1e,0x1d, + 0x1d,0x1d,0x1d,0x1d,0x1d,0x1e,0x1e,0x1e,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d, + 0x1d,0x1d,0x1d,0x1d,0x1e,0x1e,0x1e,0x1e,0x1d,0x1d,0x1d,0x1d,0x1d,0x1e,0x1e, + 0x1e,0x1e,0x1d,0x1e,0x1e,0x1e,0x1f,0x1f,0x1f,0x1f,0x1f,0x1e,0x1e,0x1e,0x1e, + 0x1e,0x1e,0x1e,0x1e,0x1e,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x20, + 0x20,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x1f,0x1f,0x1f,0x20,0x20,0x20,0x20,0x21,0x21, + 0x21,0x21,0x21,0x21,0x21,0x20,0x20,0x20,0x21,0x21,0x21,0x21,0x21,0x20,0x20, + 0x22,0x21,0x20,0x20,0x20,0x22,0x22,0x22,0x21,0x21,0x22,0x21,0x20,0x21,0x21, + 0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x22,0x23,0x23,0x23,0x23,0x23, + 0x23,0x22,0x22,0x22,0x21,0x21,0x21,0x20,0x20,0x20,0x21,0x22,0x22,0x22,0x22, + 0x21,0x21,0x21,0x21,0x21,0x22,0x22,0x22,0x23,0x23,0x23,0x23,0x23,0x22,0x22, + 0x22,0x23,0x23,0x23,0x21,0x20,0x21,0x22,0x23,0x23,0x23,0x23,0x23,0x22,0x22, + 0x22,0x23,0x24,0x24,0x24,0x23,0x23,0x23,0x24,0x24,0x24,0x24,0x24,0x22,0x21, + 0x21,0x22,0x23,0x23,0x23,0x24,0x23,0x23,0x23,0x23,0x23,0x24,0x24,0x24,0x24, + 0x24,0x23,0x22,0x22,0x23,0x23,0x24,0x24,0x24,0x24,0x23,0x23,0x23,0x23,0x24, + 0x24,0x24,0x24,0x24,0x25,0x25,0x24,0x24,0x23,0x22,0x23,0x24,0x24,0x24,0x24, + 0x23,0x22,0x22,0x23,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24, + 0x24,0x25,0x25,0x24,0x24,0x24,0x24,0x24,0x25,0x26,0x26,0x26,0x25,0x25,0x25, + 0x24,0x24,0x25,0x25,0x26,0x25,0x25,0x24,0x24,0x24,0x24,0x24,0x25,0x25,0x25, + 0x25,0x25,0x26,0x25,0x24,0x24,0x25,0x25,0x25,0x26,0x25,0x25,0x25,0x25,0x25, + 0x25,0x25,0x26,0x25,0x25,0x24,0x25,0x25,0x25,0x25,0x25,0x24,0x24,0x25,0x26, + 0x25,0x24,0x25,0x25,0x25,0x25,0x26,0x27,0x27,0x27,0x26,0x26,0x25,0x25,0x26, + 0x26,0x26,0x26,0x26,0x26,0x26,0x26,0x26,0x26,0x26,0x26,0x27,0x28,0x27,0x26, + 0x25,0x25,0x26,0x26,0x26,0x25,0x25,0x24,0x25,0x26,0x26,0x26,0x26,0x27,0x26, + 0x26,0x25,0x24,0x24,0x24,0x25,0x26,0x27,0x27,0x26,0x25,0x25,0x24,0x24,0x25, + 0xc8,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x18,0x18,0x18,0x18,0x18,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x18,0x18, + 0x18,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a, + 0x1a,0x1a,0x1a,0x1a,0x1a,0x19,0x19,0x19,0x19,0x19,0x19,0x1a,0x1a,0x1a,0x1a, + 0x19,0x19,0x19,0x1a,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1a,0x1a,0x1a,0x1a, + 0x1a,0x1b,0x1b,0x1b,0x1a,0x19,0x1a,0x1a,0x1b,0x1c,0x1c,0x1d,0x1d,0x1d,0x1d, + 0x1d,0x1c,0x1c,0x1c,0x1c,0x1c,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d, + 0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1c,0x1c,0x1c,0x1d,0x1d,0x1d,0x1d,0x1d,0x1f, + 0x1f,0x1e,0x1e,0x1d,0x1d,0x1d,0x1d,0x1e,0x1e,0x1e,0x1e,0x1d,0x1e,0x1e,0x1d, + 0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d, + 0x1d,0x1d,0x1d,0x1d,0x1d,0x1e,0x1e,0x1e,0x1e,0x1f,0x1f,0x1f,0x1e,0x1e,0x1e, + 0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f, + 0x20,0x20,0x20,0x20,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x1f,0x20,0x20,0x20,0x20,0x20, + 0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x20,0x20,0x20,0x21,0x21,0x21,0x21,0x21, + 0x20,0x21,0x22,0x22,0x21,0x20,0x21,0x22,0x22,0x22,0x21,0x21,0x22,0x22,0x21, + 0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x22,0x23,0x23,0x23, + 0x23,0x23,0x23,0x23,0x23,0x22,0x22,0x22,0x22,0x21,0x20,0x21,0x21,0x22,0x22, + 0x22,0x22,0x21,0x21,0x21,0x21,0x22,0x22,0x22,0x22,0x23,0x23,0x23,0x23,0x23, + 0x22,0x22,0x22,0x23,0x23,0x23,0x21,0x20,0x22,0x23,0x23,0x23,0x23,0x23,0x22, + 0x22,0x22,0x22,0x23,0x24,0x24,0x24,0x23,0x23,0x23,0x24,0x24,0x24,0x24,0x24, + 0x23,0x22,0x22,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24, + 0x24,0x24,0x24,0x23,0x22,0x22,0x23,0x23,0x24,0x24,0x24,0x24,0x24,0x23,0x23, + 0x23,0x24,0x24,0x24,0x24,0x24,0x25,0x25,0x24,0x24,0x24,0x23,0x24,0x24,0x24, + 0x24,0x24,0x24,0x23,0x23,0x24,0x24,0x25,0x25,0x25,0x25,0x24,0x24,0x24,0x24, + 0x24,0x24,0x25,0x25,0x25,0x25,0x24,0x24,0x24,0x25,0x26,0x26,0x26,0x26,0x25, + 0x25,0x25,0x24,0x24,0x25,0x25,0x26,0x25,0x24,0x24,0x24,0x24,0x24,0x24,0x25, + 0x25,0x25,0x25,0x25,0x26,0x26,0x25,0x25,0x25,0x25,0x25,0x26,0x25,0x25,0x25, + 0x25,0x25,0x25,0x25,0x26,0x26,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25, + 0x26,0x26,0x25,0x25,0x25,0x25,0x25,0x26,0x26,0x27,0x27,0x27,0x26,0x26,0x25, + 0x26,0x26,0x26,0x26,0x26,0x26,0x26,0x26,0x26,0x26,0x26,0x26,0x26,0x27,0x28, + 0x27,0x26,0x25,0x25,0x26,0x26,0x26,0x25,0x25,0x25,0x26,0x26,0x26,0x26,0x26, + 0x27,0x27,0x26,0x25,0x24,0x24,0x25,0x26,0x27,0x28,0x27,0x27,0x26,0x26,0x25, + 0x25,0x25,0xc8,0x19,0x19,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x17,0x17,0x18,0x18,0x18,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x18,0x18,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x1a,0x1a,0x1a,0x1b, + 0x1b,0x1a,0x1a,0x19,0x1a,0x1a,0x1b,0x1b,0x1b,0x1a,0x1a,0x1a,0x1b,0x1a,0x1a, + 0x1a,0x1a,0x1b,0x1c,0x1d,0x1d,0x1c,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, + 0x1c,0x1c,0x1b,0x1b,0x1b,0x1b,0x1b,0x1c,0x1c,0x1c,0x1c,0x1c,0x1d,0x1d,0x1c, + 0x1c,0x1c,0x1c,0x1d,0x1d,0x1d,0x1c,0x1b,0x1b,0x1c,0x1c,0x1c,0x1c,0x1d,0x1d, + 0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1c,0x1c,0x1c,0x1c, + 0x1c,0x1c,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1e,0x1e,0x1e,0x1e, + 0x1e,0x1f,0x1f,0x1e,0x1e,0x1e,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1e,0x1e,0x1d, + 0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1e,0x1e,0x1e,0x1e,0x1e, + 0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1e,0x1e,0x1f,0x1f,0x1f,0x1f,0x1e,0x1e,0x1e, + 0x1e,0x1f,0x1f,0x20,0x20,0x20,0x20,0x1f,0x1f,0x1f,0x1f,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x1f,0x1f,0x1f,0x1f,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x21,0x21,0x21, + 0x21,0x21,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x22,0x23,0x22,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x20,0x20,0x20, + 0x22,0x23,0x22,0x22,0x23,0x23,0x23,0x23,0x23,0x23,0x22,0x21,0x21,0x21,0x22, + 0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x22,0x23,0x23, + 0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23, + 0x23,0x23,0x23,0x23,0x23,0x22,0x22,0x22,0x22,0x22,0x23,0x24,0x24,0x23,0x22, + 0x21,0x21,0x22,0x23,0x23,0x22,0x24,0x25,0x24,0x24,0x23,0x23,0x23,0x24,0x24, + 0x24,0x24,0x24,0x24,0x23,0x24,0x24,0x24,0x24,0x24,0x23,0x23,0x23,0x23,0x22, + 0x23,0x22,0x23,0x23,0x23,0x23,0x23,0x23,0x24,0x24,0x24,0x24,0x24,0x24,0x24, + 0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x25, + 0x25,0x25,0x25,0x25,0x25,0x24,0x24,0x24,0x24,0x24,0x24,0x25,0x25,0x25,0x24, + 0x24,0x24,0x24,0x25,0x25,0x26,0x25,0x25,0x25,0x25,0x25,0x26,0x26,0x27,0x27, + 0x26,0x26,0x26,0x25,0x24,0x24,0x25,0x25,0x25,0x25,0x25,0x24,0x24,0x24,0x24, + 0x24,0x24,0x24,0x24,0x24,0x24,0x25,0x26,0x26,0x25,0x25,0x25,0x25,0x25,0x25, + 0x25,0x25,0x25,0x25,0x24,0x24,0x26,0x26,0x26,0x26,0x26,0x26,0x26,0x26,0x26, + 0x26,0x26,0x26,0x26,0x26,0x26,0x25,0x25,0x25,0x26,0x26,0x27,0x27,0x27,0x26, + 0x26,0x26,0x26,0x26,0x26,0x26,0x26,0x26,0x26,0x27,0x27,0x27,0x27,0x27,0x27, + 0x28,0x28,0x27,0x27,0x26,0x25,0x25,0x25,0x25,0x26,0x26,0x27,0x27,0x27,0x25, + 0x25,0x26,0x27,0x27,0x28,0x27,0x26,0x26,0x26,0x26,0x26,0x26,0x26,0x26,0x26, + 0x26,0x26,0x26,0x26,0xc8,0x19,0x19,0x19,0x18,0x18,0x18,0x18,0x18,0x18,0x18, + 0x18,0x18,0x17,0x17,0x18,0x18,0x18,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x18,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x1a,0x1a,0x1a,0x1a, + 0x1b,0x1b,0x1b,0x1b,0x1a,0x1a,0x1b,0x1b,0x1c,0x1c,0x1b,0x1a,0x1a,0x1a,0x1b, + 0x1a,0x19,0x1a,0x1a,0x1b,0x1c,0x1d,0x1d,0x1c,0x1b,0x1b,0x1b,0x1c,0x1c,0x1b, + 0x1b,0x1b,0x1c,0x1c,0x1c,0x1b,0x1b,0x1b,0x1c,0x1c,0x1c,0x1c,0x1c,0x1d,0x1d, + 0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c, + 0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1c,0x1c, + 0x1c,0x1c,0x1c,0x1c,0x1c,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1e,0x1e, + 0x1e,0x1e,0x1e,0x1f,0x1f,0x1e,0x1e,0x1e,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d, + 0x1e,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1e,0x1e,0x1e,0x1f,0x1f, + 0x1f,0x1f,0x1e,0x1d,0x1d,0x1d,0x1d,0x1d,0x1e,0x1f,0x1f,0x20,0x20,0x20,0x1f, + 0x1e,0x1e,0x1e,0x1f,0x20,0x20,0x20,0x20,0x20,0x1f,0x1f,0x1f,0x1f,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x1f,0x1f,0x1f,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x21,0x21,0x21, + 0x21,0x21,0x21,0x21,0x20,0x20,0x21,0x21,0x21,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x22,0x23,0x22,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x20, + 0x20,0x20,0x22,0x23,0x22,0x22,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x22,0x21, + 0x22,0x22,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23, + 0x23,0x23,0x23,0x22,0x22,0x22,0x22,0x22,0x23,0x23,0x23,0x23,0x23,0x23,0x23, + 0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x22,0x22,0x22,0x22,0x23,0x24,0x24,0x24, + 0x23,0x22,0x21,0x21,0x22,0x23,0x23,0x22,0x23,0x25,0x24,0x24,0x23,0x23,0x23, + 0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x23,0x23,0x23, + 0x23,0x22,0x22,0x22,0x22,0x23,0x23,0x23,0x23,0x23,0x24,0x24,0x24,0x24,0x24, + 0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24, + 0x25,0x25,0x25,0x25,0x25,0x26,0x26,0x25,0x24,0x24,0x24,0x24,0x24,0x24,0x25, + 0x25,0x25,0x24,0x24,0x24,0x25,0x26,0x26,0x26,0x25,0x25,0x26,0x26,0x26,0x26, + 0x27,0x26,0x26,0x26,0x25,0x25,0x24,0x24,0x25,0x25,0x25,0x25,0x25,0x24,0x24, + 0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x25,0x25,0x26,0x26,0x25,0x25,0x25, + 0x25,0x25,0x25,0x25,0x25,0x25,0x24,0x24,0x26,0x26,0x26,0x26,0x26,0x26,0x26, + 0x26,0x26,0x26,0x26,0x26,0x26,0x26,0x26,0x25,0x25,0x25,0x26,0x26,0x27,0x27, + 0x27,0x26,0x26,0x26,0x26,0x26,0x26,0x26,0x26,0x26,0x26,0x27,0x27,0x27,0x27, + 0x27,0x28,0x28,0x28,0x28,0x27,0x27,0x26,0x26,0x25,0x26,0x27,0x27,0x27,0x27, + 0x27,0x26,0x26,0x26,0x27,0x27,0x27,0x27,0x27,0x27,0x26,0x26,0x26,0x26,0x26, + 0x26,0x26,0x26,0x26,0x26,0x26,0xc8,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x1a,0x1a,0x1a, + 0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1b,0x1b,0x1c,0x1c,0x1b,0x1a,0x1a,0x19, + 0x19,0x1a,0x19,0x19,0x19,0x19,0x1a,0x1b,0x1b,0x1b,0x1b,0x1a,0x19,0x1a,0x1b, + 0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1a,0x1a,0x1b,0x1c,0x1c,0x1c,0x1c,0x1c, + 0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1c, + 0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d, + 0x1d,0x1d,0x1c,0x1c,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d, + 0x1e,0x1e,0x1e,0x1d,0x1d,0x1f,0x1f,0x1e,0x1e,0x1e,0x1d,0x1d,0x1d,0x1d,0x1d, + 0x1d,0x1d,0x1e,0x1d,0x1d,0x1d,0x1d,0x1d,0x1e,0x1e,0x1e,0x1e,0x1f,0x1f,0x1f, + 0x20,0x20,0x1f,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1f,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x1f,0x1f,0x1f,0x20,0x20,0x20,0x20,0x1f,0x1e,0x1e,0x1e,0x1e, + 0x1f,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x22,0x22,0x22,0x21,0x21,0x21,0x21, + 0x21,0x21,0x21,0x20,0x20,0x20,0x22,0x22,0x21,0x21,0x21,0x21,0x21,0x21,0x21, + 0x21,0x21,0x21,0x21,0x22,0x22,0x22,0x22,0x23,0x23,0x23,0x23,0x23,0x23,0x23, + 0x23,0x22,0x22,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23, + 0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23, + 0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x24, + 0x24,0x24,0x24,0x23,0x22,0x22,0x23,0x23,0x23,0x22,0x23,0x24,0x24,0x24,0x24, + 0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24, + 0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x23,0x23,0x23,0x24,0x24,0x24,0x24,0x24, + 0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24, + 0x24,0x24,0x25,0x25,0x24,0x25,0x25,0x25,0x25,0x25,0x24,0x24,0x24,0x24,0x24, + 0x24,0x24,0x25,0x25,0x24,0x24,0x24,0x25,0x26,0x26,0x26,0x26,0x26,0x26,0x26, + 0x26,0x26,0x26,0x26,0x25,0x25,0x25,0x24,0x24,0x24,0x24,0x24,0x24,0x25,0x25, + 0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x25,0x25,0x26,0x26,0x26, + 0x25,0x25,0x25,0x26,0x26,0x26,0x26,0x25,0x25,0x25,0x26,0x26,0x27,0x27,0x27, + 0x26,0x26,0x26,0x27,0x27,0x27,0x27,0x26,0x25,0x25,0x25,0x25,0x25,0x26,0x26, + 0x26,0x26,0x26,0x26,0x26,0x25,0x25,0x26,0x26,0x26,0x26,0x26,0x26,0x26,0x26, + 0x27,0x27,0x27,0x27,0x27,0x28,0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x28,0x28, + 0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x26,0x26,0x26,0x25,0x25,0x26,0x26, + 0x26,0x26,0x26,0x25,0x25,0x25,0x26,0x26,0xc8,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x18,0x18,0x18,0x18,0x18,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x1a,0x1a,0x1a,0x1a,0x1a,0x1b,0x1b,0x1b,0x1b,0x1b,0x1a, + 0x1a,0x19,0x1a,0x1a,0x1a,0x1a,0x19,0x1a,0x1b,0x1b,0x1b,0x1a,0x1a,0x1a,0x19, + 0x1a,0x1c,0x1b,0x1b,0x1b,0x1c,0x1b,0x1c,0x1b,0x1b,0x1a,0x1b,0x1c,0x1d,0x1d, + 0x1d,0x1d,0x1c,0x1c,0x1b,0x1b,0x1b,0x1c,0x1c,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d, + 0x1d,0x1c,0x1c,0x1c,0x1b,0x1b,0x1b,0x1c,0x1c,0x1c,0x1c,0x1c,0x1d,0x1d,0x1d, + 0x1d,0x1d,0x1d,0x1d,0x1c,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d, + 0x1d,0x1d,0x1e,0x1e,0x1d,0x1d,0x1d,0x1e,0x1e,0x1e,0x1e,0x1e,0x1d,0x1d,0x1d, + 0x1d,0x1d,0x1d,0x1e,0x1f,0x1e,0x1d,0x1d,0x1d,0x1e,0x1e,0x1e,0x1f,0x1f,0x1f, + 0x20,0x20,0x20,0x20,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x1f,0x1e,0x1e, + 0x1e,0x1e,0x1e,0x1f,0x1f,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x21,0x21,0x21,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x21,0x22,0x22,0x22,0x21,0x21, + 0x21,0x21,0x20,0x21,0x20,0x20,0x20,0x20,0x21,0x21,0x21,0x21,0x21,0x21,0x21, + 0x22,0x22,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x22,0x22,0x22,0x22,0x23,0x23, + 0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x22,0x22, + 0x22,0x22,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23, + 0x24,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x24,0x24,0x24,0x24,0x24, + 0x24,0x24,0x24,0x25,0x24,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x22,0x23,0x23, + 0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24, + 0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x23,0x23,0x24,0x24,0x24,0x24, + 0x24,0x24,0x24,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x24,0x24, + 0x24,0x25,0x25,0x25,0x25,0x25,0x24,0x25,0x25,0x25,0x25,0x25,0x24,0x24,0x24, + 0x24,0x24,0x24,0x25,0x26,0x25,0x25,0x24,0x25,0x25,0x26,0x26,0x26,0x26,0x26, + 0x26,0x26,0x26,0x25,0x25,0x25,0x25,0x25,0x25,0x24,0x24,0x24,0x24,0x24,0x24, + 0x24,0x25,0x25,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x25,0x25,0x26,0x27, + 0x26,0x26,0x26,0x26,0x26,0x26,0x26,0x26,0x26,0x25,0x25,0x26,0x26,0x27,0x27, + 0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x26,0x26,0x25,0x25,0x25,0x25, + 0x26,0x26,0x26,0x26,0x26,0x26,0x26,0x25,0x26,0x26,0x26,0x26,0x26,0x26,0x26, + 0x26,0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x28,0x28,0x28, + 0x28,0x28,0x27,0x26,0x27,0x27,0x28,0x28,0x27,0x27,0x26,0x26,0x25,0x25,0x25, + 0x26,0x26,0x26,0x26,0x26,0x25,0x25,0x25,0x26,0x26,0xc8,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x18,0x18,0x18,0x18,0x18,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x1a,0x1a,0x1a,0x1a,0x1a,0x1b,0x1b,0x1b,0x1b, + 0x1b,0x1a,0x1a,0x19,0x1a,0x1b,0x1b,0x1b,0x1a,0x1b,0x1b,0x1b,0x1b,0x1a,0x1a, + 0x1a,0x19,0x1a,0x1c,0x1b,0x1b,0x1c,0x1c,0x1c,0x1c,0x1c,0x1b,0x1b,0x1b,0x1c, + 0x1d,0x1d,0x1d,0x1d,0x1d,0x1c,0x1b,0x1b,0x1b,0x1c,0x1c,0x1d,0x1d,0x1d,0x1d, + 0x1d,0x1d,0x1d,0x1d,0x1d,0x1c,0x1b,0x1b,0x1b,0x1c,0x1c,0x1d,0x1d,0x1c,0x1d, + 0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d, + 0x1d,0x1d,0x1d,0x1d,0x1e,0x1e,0x1d,0x1d,0x1d,0x1e,0x1e,0x1e,0x1e,0x1e,0x1d, + 0x1d,0x1d,0x1d,0x1d,0x1e,0x1f,0x1f,0x1e,0x1d,0x1d,0x1d,0x1e,0x1e,0x1e,0x1f, + 0x1f,0x1f,0x20,0x20,0x20,0x1f,0x1f,0x1f,0x1f,0x1f,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x1f, + 0x1f,0x1e,0x1e,0x1e,0x1e,0x1f,0x1f,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x21,0x21,0x21, + 0x21,0x21,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x22,0x22,0x22, + 0x21,0x21,0x21,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x21,0x21,0x21,0x21,0x21, + 0x21,0x21,0x22,0x22,0x22,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x22,0x22,0x22, + 0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23, + 0x22,0x22,0x22,0x22,0x22,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23, + 0x23,0x24,0x24,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x24,0x24,0x24,0x24, + 0x24,0x24,0x24,0x24,0x25,0x25,0x24,0x24,0x23,0x23,0x23,0x23,0x23,0x23,0x23, + 0x22,0x23,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24, + 0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x23,0x23,0x24,0x24, + 0x24,0x24,0x24,0x24,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25, + 0x25,0x24,0x24,0x25,0x25,0x25,0x25,0x25,0x24,0x25,0x25,0x25,0x25,0x25,0x24, + 0x24,0x24,0x24,0x24,0x25,0x25,0x26,0x26,0x25,0x25,0x25,0x26,0x26,0x26,0x26, + 0x26,0x26,0x26,0x26,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x24,0x24,0x24,0x24, + 0x24,0x24,0x25,0x25,0x25,0x25,0x24,0x24,0x24,0x24,0x24,0x24,0x25,0x25,0x26, + 0x27,0x27,0x27,0x26,0x26,0x26,0x26,0x26,0x26,0x26,0x26,0x26,0x26,0x26,0x27, + 0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x26,0x26,0x26, + 0x26,0x26,0x26,0x26,0x26,0x26,0x26,0x26,0x26,0x26,0x26,0x26,0x26,0x26,0x26, + 0x26,0x26,0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x28, + 0x28,0x28,0x28,0x28,0x27,0x26,0x26,0x28,0x28,0x28,0x28,0x27,0x26,0x26,0x25, + 0x25,0x25,0x26,0x26,0x26,0x26,0x26,0x26,0x26,0x26,0x26,0x26,0xc8,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x18,0x19,0x19,0x18,0x18,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x1a,0x1a,0x1a,0x1a, + 0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1b,0x1b, + 0x1b,0x1b,0x1b,0x1a,0x1a,0x1a,0x1b,0x1c,0x1c,0x1c,0x1b,0x1b,0x1b,0x1b,0x1b, + 0x1b,0x1a,0x1a,0x1a,0x1a,0x1b,0x1b,0x1b,0x1c,0x1c,0x1d,0x1d,0x1d,0x1c,0x1c, + 0x1c,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1c,0x1c,0x1c,0x1c,0x1c,0x1d,0x1d, + 0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1c,0x1c,0x1c,0x1c,0x1d,0x1e,0x1d, + 0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1e,0x1e,0x1e,0x1d, + 0x1d,0x1d,0x1d,0x1d,0x1d,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e, + 0x1e,0x1d,0x1d,0x1d,0x1d,0x1d,0x1e,0x1f,0x1f,0x1e,0x1e,0x1e,0x1e,0x1e,0x1f, + 0x1f,0x1f,0x1f,0x1f,0x1f,0x1e,0x1e,0x1f,0x1f,0x1f,0x1f,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x20,0x20,0x20, + 0x20,0x20,0x20,0x1f,0x1f,0x1f,0x1f,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x21,0x21, + 0x21,0x21,0x21,0x21,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x21, + 0x21,0x21,0x21,0x21,0x21,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x21,0x21, + 0x21,0x21,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x21,0x21,0x21,0x22,0x22,0x22, + 0x22,0x23,0x23,0x23,0x23,0x23,0x23,0x24,0x24,0x23,0x23,0x23,0x23,0x23,0x23, + 0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23, + 0x23,0x23,0x23,0x23,0x23,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24, + 0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x25,0x25,0x24,0x24,0x24,0x24,0x24,0x24, + 0x24,0x23,0x23,0x23,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24, + 0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24, + 0x24,0x24,0x24,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25, + 0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x26,0x26, + 0x26,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x26,0x26,0x25,0x25,0x25,0x26,0x26, + 0x26,0x26,0x26,0x26,0x26,0x26,0x25,0x25,0x26,0x26,0x26,0x25,0x25,0x25,0x25, + 0x25,0x25,0x26,0x25,0x26,0x26,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25, + 0x26,0x27,0x27,0x27,0x27,0x27,0x26,0x26,0x26,0x27,0x27,0x27,0x27,0x27,0x27, + 0x28,0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x27, + 0x27,0x27,0x27,0x28,0x28,0x27,0x27,0x26,0x26,0x26,0x26,0x27,0x27,0x27,0x27, + 0x27,0x27,0x27,0x27,0x27,0x27,0x28,0x28,0x28,0x28,0x27,0x27,0x27,0x27,0x27, + 0x27,0x28,0x28,0x28,0x28,0x28,0x27,0x26,0x26,0x28,0x28,0x28,0x28,0x28,0x27, + 0x26,0x26,0x26,0x26,0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x27,0xc8, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x18,0x18,0x19,0x19,0x18, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x1a,0x1b,0x1b, + 0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a, + 0x1a,0x1b,0x1b,0x1b,0x1b,0x1a,0x1a,0x1a,0x1b,0x1c,0x1c,0x1c,0x1b,0x1b,0x1b, + 0x1b,0x1b,0x1b,0x1a,0x1a,0x1a,0x1a,0x19,0x1a,0x1a,0x1b,0x1c,0x1d,0x1d,0x1d, + 0x1c,0x1c,0x1c,0x1c,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1c,0x1c,0x1c, + 0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1c,0x1c,0x1c,0x1d,0x1d, + 0x1e,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1e,0x1e, + 0x1e,0x1e,0x1d,0x1d,0x1d,0x1d,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e, + 0x1e,0x1e,0x1e,0x1d,0x1d,0x1d,0x1d,0x1d,0x1e,0x1e,0x1f,0x1e,0x1e,0x1e,0x1e, + 0x1e,0x1f,0x1f,0x1f,0x1f,0x1f,0x1e,0x1e,0x1e,0x1e,0x1f,0x1f,0x1f,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x21, + 0x21,0x21,0x21,0x21,0x21,0x21,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x20,0x20,0x20,0x20,0x21, + 0x21,0x21,0x21,0x21,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x21,0x21,0x21,0x22, + 0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x24,0x24,0x24,0x23,0x23,0x23,0x23, + 0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23, + 0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24, + 0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x25,0x25,0x25,0x24,0x24,0x24, + 0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24, + 0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24, + 0x24,0x24,0x24,0x24,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25, + 0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25, + 0x26,0x26,0x26,0x26,0x25,0x25,0x25,0x25,0x25,0x25,0x26,0x26,0x25,0x25,0x25, + 0x26,0x26,0x26,0x26,0x26,0x26,0x26,0x26,0x25,0x25,0x26,0x26,0x26,0x26,0x25, + 0x25,0x25,0x25,0x26,0x27,0x27,0x27,0x26,0x26,0x25,0x25,0x25,0x25,0x25,0x25, + 0x25,0x26,0x27,0x27,0x27,0x27,0x27,0x27,0x26,0x26,0x26,0x27,0x27,0x27,0x27, + 0x27,0x28,0x28,0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x27, + 0x27,0x27,0x27,0x27,0x28,0x28,0x28,0x28,0x27,0x27,0x26,0x26,0x27,0x27,0x27, + 0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x27, + 0x27,0x27,0x28,0x28,0x28,0x28,0x28,0x28,0x27,0x27,0x27,0x28,0x28,0x28,0x28, + 0x28,0x28,0x27,0x26,0x26,0x26,0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x27, + 0x28,0xc8,0x18,0x18,0x19,0x19,0x19,0x19,0x19,0x18,0x18,0x18,0x18,0x18,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x1b, + 0x1b,0x1b,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1b,0x1b,0x1b, + 0x1b,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, + 0x1b,0x1b,0x1b,0x1b,0x1a,0x1a,0x1a,0x1a,0x19,0x19,0x19,0x19,0x1a,0x1c,0x1d, + 0x1d,0x1d,0x1c,0x1c,0x1b,0x1b,0x1c,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d, + 0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1c,0x1c,0x1c, + 0x1d,0x1d,0x1e,0x1e,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d, + 0x1d,0x1d,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f, + 0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1d,0x1e,0x1e,0x1e,0x1e,0x1f,0x1e,0x1e, + 0x1e,0x1e,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1e,0x1e,0x1f,0x1f,0x1f, + 0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x20,0x20,0x20,0x20,0x1f,0x1f,0x1f,0x1f,0x1f, + 0x1f,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x21,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x21,0x21, + 0x21,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x23,0x22,0x22,0x22,0x22,0x21,0x21, + 0x22,0x23,0x23,0x24,0x24,0x24,0x23,0x23,0x23,0x24,0x24,0x24,0x24,0x23,0x23, + 0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x24,0x24,0x24,0x24, + 0x24,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x24,0x25,0x24,0x24,0x24,0x24, + 0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x25,0x25,0x25,0x24, + 0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x25,0x25,0x25, + 0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25, + 0x25,0x25,0x24,0x24,0x24,0x24,0x25,0x25,0x25,0x25,0x26,0x26,0x26,0x26,0x26, + 0x26,0x26,0x26,0x26,0x26,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25, + 0x25,0x25,0x26,0x26,0x26,0x26,0x26,0x26,0x26,0x26,0x25,0x25,0x26,0x26,0x25, + 0x25,0x25,0x26,0x26,0x26,0x26,0x26,0x26,0x26,0x26,0x26,0x26,0x26,0x26,0x26, + 0x26,0x26,0x26,0x26,0x26,0x27,0x27,0x28,0x28,0x27,0x26,0x26,0x26,0x26,0x26, + 0x26,0x26,0x26,0x27,0x27,0x28,0x28,0x28,0x27,0x27,0x27,0x27,0x26,0x27,0x27, + 0x28,0x28,0x28,0x28,0x28,0x26,0x26,0x27,0x27,0x27,0x26,0x26,0x26,0x27,0x27, + 0x27,0x26,0x26,0x27,0x27,0x28,0x28,0x28,0x28,0x28,0x27,0x27,0x27,0x27,0x27, + 0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28, + 0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28, + 0x28,0x28,0x28,0x28,0x28,0x27,0x27,0x27,0x27,0x27,0x28,0x28,0x28,0x28,0x28, + 0x28,0x28,0x28,0xc8,0x18,0x18,0x19,0x19,0x19,0x19,0x19,0x18,0x18,0x18,0x18, + 0x18,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0x1a,0x1a,0x1a,0x1a,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x1b, + 0x1b,0x1b,0x1b,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1b,0x1b,0x1c,0x1b,0x1b,0x1b, + 0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1a,0x1a,0x1b,0x1b,0x1a,0x19,0x19,0x19,0x1a, + 0x1c,0x1d,0x1d,0x1d,0x1d,0x1c,0x1c,0x1c,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d, + 0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1c, + 0x1c,0x1c,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1e,0x1e,0x1e,0x1e,0x1d,0x1d,0x1d, + 0x1d,0x1d,0x1d,0x1d,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1f,0x1f,0x20,0x20,0x20, + 0x20,0x20,0x1f,0x1e,0x1f,0x1f,0x1f,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1f, + 0x1e,0x1e,0x1e,0x1e,0x1f,0x1f,0x1f,0x20,0x20,0x20,0x20,0x20,0x1f,0x1f,0x20, + 0x20,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x1f,0x1f,0x20,0x1f,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x21,0x21,0x22,0x22,0x21,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x21,0x22,0x22,0x22,0x22,0x22,0x23,0x23,0x23,0x23,0x23, + 0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x23,0x23,0x22,0x22,0x21, + 0x21,0x21,0x22,0x23,0x23,0x24,0x24,0x23,0x23,0x22,0x23,0x23,0x24,0x24,0x24, + 0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24, + 0x24,0x24,0x24,0x24,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x24,0x25,0x25,0x25, + 0x25,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x25, + 0x25,0x25,0x24,0x24,0x24,0x24,0x25,0x25,0x25,0x24,0x24,0x24,0x24,0x24,0x25, + 0x25,0x26,0x26,0x26,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25, + 0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x26,0x26,0x26, + 0x26,0x26,0x26,0x27,0x26,0x26,0x26,0x26,0x26,0x26,0x25,0x25,0x25,0x25,0x25, + 0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x26,0x26,0x26,0x26,0x26,0x25,0x25,0x26, + 0x26,0x25,0x25,0x25,0x26,0x26,0x27,0x26,0x26,0x26,0x26,0x26,0x26,0x26,0x26, + 0x26,0x26,0x26,0x26,0x26,0x26,0x27,0x27,0x28,0x28,0x28,0x27,0x26,0x26,0x27, + 0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x28,0x28,0x28,0x28,0x27,0x27,0x27,0x27, + 0x27,0x28,0x28,0x28,0x28,0x28,0x28,0x26,0x26,0x27,0x27,0x27,0x26,0x26,0x26, + 0x27,0x27,0x27,0x26,0x26,0x27,0x27,0x28,0x28,0x28,0x28,0x28,0x28,0x27,0x27, + 0x27,0x27,0x27,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28, + 0x28,0x28,0x28,0x28,0x28,0x28,0x27,0x27,0x27,0x27,0x27,0x28,0x28,0x28,0x28, + 0x27,0x27,0x27,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28, + 0x28,0x28,0x28,0x28,0x28,0xc8,0x18,0x18,0x19,0x19,0x19,0x19,0x19,0x18,0x18, + 0x18,0x18,0x18,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0x1a,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1a,0x1a,0x1a,0x1b,0x1b,0x1c,0x1c, + 0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1c,0x1c,0x1b,0x1a, + 0x1a,0x1b,0x1c,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d, + 0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d, + 0x1d,0x1c,0x1c,0x1c,0x1d,0x1d,0x1d,0x1d,0x1d,0x1e,0x1e,0x1e,0x1e,0x1e,0x1d, + 0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1f,0x1f,0x20, + 0x20,0x20,0x20,0x20,0x1f,0x1f,0x1f,0x1f,0x1f,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e, + 0x1e,0x1f,0x1e,0x1e,0x1e,0x1e,0x1f,0x1f,0x1f,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x1f,0x1f,0x1f,0x1f,0x1f,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x21,0x21,0x22,0x23,0x23,0x22,0x21,0x20,0x20,0x20, + 0x20,0x20,0x20,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x20, + 0x20,0x20,0x20,0x20,0x20,0x21,0x21,0x22,0x22,0x22,0x22,0x22,0x23,0x23,0x23, + 0x23,0x23,0x23,0x23,0x23,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x23,0x23,0x23, + 0x22,0x22,0x21,0x22,0x22,0x23,0x23,0x23,0x23,0x23,0x22,0x22,0x22,0x22,0x23, + 0x24,0x24,0x23,0x23,0x23,0x23,0x23,0x23,0x24,0x24,0x24,0x24,0x24,0x24,0x24, + 0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x23,0x23,0x23,0x23,0x23,0x23,0x24,0x25, + 0x25,0x25,0x25,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24, + 0x24,0x25,0x25,0x25,0x24,0x24,0x24,0x24,0x25,0x25,0x25,0x24,0x24,0x24,0x24, + 0x24,0x25,0x25,0x26,0x26,0x26,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25, + 0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25, + 0x26,0x26,0x26,0x26,0x27,0x27,0x26,0x26,0x26,0x26,0x26,0x26,0x26,0x25,0x25, + 0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x26,0x26,0x26,0x26,0x26,0x25, + 0x25,0x27,0x27,0x26,0x25,0x25,0x26,0x27,0x27,0x26,0x26,0x26,0x26,0x26,0x26, + 0x26,0x26,0x26,0x26,0x26,0x26,0x26,0x27,0x27,0x28,0x28,0x28,0x28,0x27,0x26, + 0x26,0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x28,0x28,0x28,0x28,0x28,0x27, + 0x27,0x27,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x26,0x26,0x27,0x27,0x27,0x26, + 0x26,0x26,0x27,0x27,0x27,0x27,0x26,0x27,0x27,0x28,0x28,0x28,0x28,0x28,0x28, + 0x28,0x27,0x27,0x27,0x27,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28, + 0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x28, + 0x28,0x28,0x27,0x27,0x27,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28, + 0x28,0x28,0x28,0x28,0x28,0x28,0x28,0xc8,0x18,0x18,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x18,0x18,0x18,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x1a,0x1a,0x1b,0x1b,0x1c,0x1c,0x1c,0x1b,0x1b,0x1b,0x1b,0x1b, + 0x1b,0x1b,0x1c,0x1c,0x1d,0x1d,0x1d,0x1d,0x1c,0x1c,0x1c,0x1c,0x1d,0x1d,0x1d, + 0x1d,0x1c,0x1c,0x1c,0x1c,0x1d,0x1d,0x1e,0x1e,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d, + 0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d, + 0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1e,0x1e,0x1e,0x1e,0x1e, + 0x1e,0x1d,0x1d,0x1d,0x1d,0x1d,0x1e,0x1e,0x1e,0x1e,0x1e,0x1d,0x1d,0x1e,0x1f, + 0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1e,0x1e, + 0x1e,0x1e,0x1e,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x21,0x21,0x21,0x21,0x20,0x20,0x20,0x20,0x20,0x20,0x1f,0x20,0x20, + 0x21,0x21,0x21,0x21,0x20,0x20,0x20,0x21,0x21,0x22,0x23,0x23,0x22,0x22,0x21, + 0x20,0x20,0x20,0x20,0x20,0x20,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x22, + 0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x21,0x22,0x22,0x22,0x22,0x22, + 0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x23, + 0x23,0x23,0x23,0x22,0x22,0x22,0x22,0x23,0x23,0x23,0x23,0x23,0x22,0x21,0x21, + 0x22,0x22,0x23,0x23,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24, + 0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24, + 0x25,0x25,0x25,0x25,0x24,0x24,0x24,0x24,0x24,0x24,0x25,0x25,0x25,0x24,0x24, + 0x24,0x24,0x24,0x25,0x25,0x24,0x24,0x24,0x24,0x24,0x25,0x25,0x25,0x25,0x25, + 0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25, + 0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x26,0x26,0x26,0x25,0x25,0x25,0x25, + 0x25,0x25,0x25,0x26,0x26,0x26,0x27,0x27,0x27,0x26,0x26,0x26,0x26,0x26,0x26, + 0x26,0x26,0x26,0x26,0x26,0x26,0x25,0x25,0x25,0x25,0x25,0x26,0x26,0x26,0x26, + 0x26,0x25,0x25,0x28,0x28,0x27,0x26,0x26,0x27,0x27,0x28,0x27,0x27,0x27,0x27, + 0x27,0x26,0x26,0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x28,0x28,0x28,0x27, + 0x26,0x26,0x26,0x27,0x28,0x28,0x28,0x28,0x27,0x27,0x27,0x28,0x28,0x28,0x28, + 0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x27,0x27,0x27,0x27,0x27, + 0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x28,0x28,0x28,0x28,0x28, + 0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28, + 0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x27, + 0x27,0x28,0x27,0x27,0x27,0x27,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28, + 0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0xc8,0x18,0x18,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x18,0x18,0x18,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a, + 0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1b,0x1c,0x1c,0x1d,0x1c,0x1c,0x1b,0x1b, + 0x1b,0x1b,0x1b,0x1c,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1c,0x1c,0x1c,0x1d,0x1d, + 0x1d,0x1e,0x1e,0x1d,0x1c,0x1c,0x1c,0x1d,0x1d,0x1e,0x1e,0x1e,0x1d,0x1d,0x1d, + 0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d, + 0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1e,0x1e,0x1e,0x1e,0x1d,0x1e,0x1e,0x1e,0x1e, + 0x1e,0x1e,0x1e,0x1d,0x1d,0x1d,0x1d,0x1d,0x1e,0x1e,0x1e,0x1e,0x1e,0x1d,0x1d, + 0x1e,0x1e,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f, + 0x1e,0x1e,0x1e,0x1e,0x1e,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f, + 0x1f,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x21,0x21,0x21,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x21,0x22,0x22,0x21,0x21,0x21,0x20,0x20,0x20,0x21,0x21,0x22,0x23,0x22, + 0x22,0x21,0x21,0x20,0x20,0x20,0x20,0x20,0x21,0x21,0x21,0x21,0x21,0x21,0x21, + 0x22,0x22,0x22,0x23,0x23,0x23,0x23,0x23,0x23,0x22,0x22,0x21,0x22,0x22,0x22, + 0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22, + 0x22,0x23,0x23,0x23,0x23,0x23,0x22,0x22,0x22,0x23,0x23,0x23,0x23,0x23,0x22, + 0x22,0x22,0x22,0x23,0x23,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24, + 0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24, + 0x25,0x24,0x25,0x25,0x25,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x25,0x25,0x25, + 0x25,0x24,0x24,0x24,0x24,0x25,0x25,0x24,0x24,0x24,0x24,0x24,0x25,0x25,0x24, + 0x25,0x25,0x25,0x26,0x26,0x25,0x25,0x25,0x24,0x25,0x24,0x25,0x25,0x25,0x25, + 0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x26,0x26,0x26,0x25,0x25, + 0x25,0x25,0x25,0x25,0x25,0x26,0x26,0x26,0x27,0x27,0x27,0x27,0x26,0x26,0x26, + 0x26,0x26,0x26,0x26,0x26,0x26,0x26,0x26,0x26,0x25,0x25,0x25,0x25,0x26,0x26, + 0x26,0x26,0x26,0x25,0x26,0x28,0x28,0x27,0x27,0x27,0x27,0x28,0x28,0x28,0x27, + 0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x28,0x28, + 0x28,0x27,0x26,0x26,0x26,0x27,0x28,0x28,0x28,0x28,0x27,0x27,0x27,0x28,0x28, + 0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x27,0x27,0x27,0x27, + 0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x28,0x28,0x28,0x28, + 0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28, + 0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28, + 0x28,0x28,0x28,0x28,0x28,0x27,0x27,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28, + 0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0xc8,0x19,0x19,0x19, + 0x19,0x1a,0x1a,0x19,0x19,0x19,0x18,0x18,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, + 0x1b,0x1b,0x1b,0x1b,0x1c,0x1c,0x1c,0x1a,0x19,0x1b,0x1c,0x1d,0x1d,0x1d,0x1c, + 0x1b,0x1b,0x1b,0x1b,0x1b,0x1c,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1c,0x1c,0x1c, + 0x1c,0x1d,0x1d,0x1e,0x1f,0x1e,0x1d,0x1b,0x1b,0x1c,0x1d,0x1d,0x1d,0x1d,0x1d, + 0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1c,0x1c,0x1c,0x1d,0x1d,0x1d, + 0x1d,0x1d,0x1d,0x1d,0x1d,0x1e,0x1e,0x1e,0x1e,0x1f,0x1f,0x1f,0x1e,0x1e,0x1e, + 0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1d,0x1d,0x1e,0x1e,0x1e,0x1e,0x1d,0x1d, + 0x1d,0x1d,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1f,0x1f,0x20,0x1f,0x1f, + 0x1f,0x1f,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1f,0x1f,0x1f,0x1f,0x1f,0x1e,0x1e, + 0x1e,0x1e,0x1e,0x1f,0x1f,0x1f,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x21,0x21, + 0x21,0x22,0x22,0x22,0x22,0x22,0x21,0x21,0x21,0x21,0x20,0x20,0x20,0x21,0x21, + 0x22,0x22,0x22,0x21,0x21,0x20,0x20,0x20,0x20,0x20,0x21,0x21,0x21,0x21,0x21, + 0x22,0x22,0x22,0x22,0x22,0x23,0x23,0x23,0x23,0x23,0x23,0x22,0x22,0x22,0x22, + 0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x21, + 0x21,0x22,0x22,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x24,0x24,0x24,0x24, + 0x24,0x23,0x23,0x23,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24, + 0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x25, + 0x25,0x25,0x25,0x25,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x25, + 0x25,0x25,0x24,0x24,0x24,0x24,0x24,0x25,0x25,0x24,0x24,0x23,0x23,0x24,0x25, + 0x24,0x24,0x24,0x24,0x26,0x26,0x26,0x25,0x25,0x24,0x24,0x24,0x24,0x24,0x26, + 0x26,0x26,0x26,0x26,0x26,0x26,0x26,0x26,0x26,0x26,0x26,0x26,0x27,0x27,0x26, + 0x25,0x25,0x25,0x25,0x24,0x24,0x25,0x26,0x26,0x26,0x27,0x27,0x27,0x27,0x27, + 0x26,0x26,0x26,0x26,0x26,0x26,0x26,0x26,0x26,0x26,0x26,0x26,0x25,0x25,0x26, + 0x27,0x27,0x27,0x27,0x27,0x26,0x26,0x28,0x28,0x27,0x27,0x27,0x28,0x28,0x28, + 0x28,0x28,0x27,0x27,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x27,0x27,0x27, + 0x28,0x28,0x28,0x27,0x26,0x26,0x26,0x27,0x28,0x28,0x28,0x28,0x27,0x27,0x27, + 0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x27,0x27,0x27, + 0x27,0x27,0x28,0x28,0x28,0x27,0x27,0x27,0x28,0x28,0x28,0x27,0x27,0x28,0x28, + 0x28,0x28,0x28,0x28,0x28,0x28,0x29,0x29,0x28,0x28,0x28,0x28,0x28,0x28,0x28, + 0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28, + 0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28, + 0x28,0x28,0x28,0x28,0x28,0x28,0x29,0x29,0x28,0x28,0x28,0x28,0x28,0xc8,0x19, + 0x19,0x19,0x19,0x1a,0x1a,0x1a,0x19,0x19,0x19,0x19,0x1a,0x1a,0x1a,0x19,0x19, + 0x18,0x19,0x19,0x1a,0x1a,0x19,0x19,0x19,0x19,0x19,0x19,0x1a,0x1a,0x1a,0x1a, + 0x1a,0x19,0x19,0x19,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1b,0x1c,0x1d,0x1d, + 0x1d,0x1c,0x1c,0x1b,0x1b,0x1b,0x1b,0x1c,0x1d,0x1d,0x1d,0x1d,0x1d,0x1c,0x1c, + 0x1c,0x1d,0x1d,0x1d,0x1b,0x1c,0x1d,0x1d,0x1d,0x1c,0x1c,0x1c,0x1d,0x1d,0x1d, + 0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1c,0x1c,0x1c,0x1d, + 0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1e,0x1e,0x1f,0x1f,0x1f,0x1f,0x1f, + 0x1e,0x1e,0x1e,0x1f,0x1f,0x1f,0x1f,0x1f,0x1e,0x1e,0x1e,0x1e,0x1d,0x1d,0x1e, + 0x1e,0x1e,0x1e,0x1e,0x1f,0x1f,0x1e,0x1e,0x1e,0x1d,0x1d,0x1e,0x1f,0x20,0x20, + 0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x1f,0x1f,0x1e,0x1e,0x1f,0x1f,0x1f,0x20,0x21,0x20,0x20,0x20,0x20,0x20, + 0x20,0x21,0x21,0x21,0x21,0x21,0x21,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x21, + 0x21,0x20,0x20,0x20,0x21,0x21,0x21,0x21,0x21,0x20,0x20,0x20,0x20,0x20,0x21, + 0x21,0x21,0x21,0x22,0x22,0x22,0x22,0x22,0x21,0x21,0x21,0x22,0x22,0x22,0x22, + 0x22,0x21,0x21,0x21,0x21,0x21,0x22,0x22,0x22,0x23,0x22,0x22,0x22,0x22,0x22, + 0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x22,0x22,0x22,0x22,0x22,0x22,0x22, + 0x22,0x22,0x22,0x22,0x22,0x22,0x23,0x23,0x23,0x23,0x24,0x24,0x24,0x24,0x24, + 0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24, + 0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24, + 0x24,0x24,0x25,0x25,0x25,0x25,0x25,0x24,0x25,0x25,0x25,0x24,0x24,0x24,0x24, + 0x25,0x25,0x25,0x25,0x24,0x24,0x24,0x25,0x26,0x26,0x26,0x25,0x24,0x24,0x24, + 0x24,0x26,0x25,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x25,0x25,0x25, + 0x25,0x26,0x26,0x26,0x26,0x26,0x26,0x26,0x26,0x26,0x26,0x26,0x26,0x26,0x27, + 0x27,0x27,0x26,0x26,0x26,0x25,0x25,0x25,0x26,0x26,0x26,0x26,0x27,0x27,0x27, + 0x27,0x26,0x26,0x26,0x26,0x27,0x27,0x27,0x26,0x26,0x26,0x27,0x26,0x26,0x26, + 0x26,0x27,0x27,0x28,0x28,0x27,0x27,0x26,0x27,0x28,0x28,0x26,0x26,0x27,0x28, + 0x28,0x28,0x28,0x27,0x26,0x27,0x28,0x28,0x28,0x28,0x28,0x27,0x27,0x27,0x27, + 0x27,0x28,0x28,0x28,0x28,0x28,0x27,0x27,0x27,0x28,0x28,0x28,0x28,0x28,0x28, + 0x28,0x28,0x28,0x28,0x29,0x29,0x28,0x28,0x28,0x28,0x28,0x27,0x27,0x27,0x27, + 0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28, + 0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28, + 0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x29,0x29,0x29, + 0x29,0x29,0x29,0x29,0x29,0x28,0x28,0x29,0x29,0x29,0x28,0x28,0x28,0x28,0x28, + 0x28,0x28,0x28,0x28,0x28,0x29,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28, + 0xc8,0x19,0x19,0x19,0x19,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1b,0x1b,0x1b,0x1b, + 0x19,0x19,0x18,0x19,0x19,0x1b,0x1c,0x1b,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x1a,0x1a,0x1b,0x1c, + 0x1d,0x1d,0x1d,0x1c,0x1b,0x1b,0x1b,0x1b,0x1c,0x1d,0x1d,0x1d,0x1d,0x1d,0x1c, + 0x1b,0x1b,0x1d,0x1d,0x1d,0x1c,0x19,0x1a,0x1d,0x1d,0x1d,0x1c,0x1d,0x1d,0x1d, + 0x1d,0x1e,0x1e,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d, + 0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1e,0x1e,0x1f,0x1f, + 0x1f,0x1f,0x1e,0x1e,0x1f,0x1f,0x20,0x20,0x20,0x1f,0x1f,0x1e,0x1e,0x1e,0x1d, + 0x1d,0x1e,0x1e,0x1e,0x1f,0x1f,0x1f,0x1f,0x1f,0x1e,0x1e,0x1d,0x1d,0x1d,0x20, + 0x20,0x20,0x1f,0x1f,0x1f,0x1f,0x1f,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x1f,0x1f,0x1f,0x1f,0x1f,0x20,0x20,0x21,0x20,0x20,0x20, + 0x20,0x20,0x21,0x21,0x21,0x21,0x21,0x22,0x22,0x21,0x20,0x20,0x20,0x20,0x20, + 0x21,0x21,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x21,0x21,0x21,0x21,0x21,0x21,0x22,0x23,0x23,0x23,0x23,0x22,0x22,0x23,0x23, + 0x23,0x23,0x22,0x22,0x21,0x21,0x21,0x21,0x21,0x21,0x22,0x22,0x22,0x22,0x22, + 0x22,0x22,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x22,0x22,0x22,0x22,0x22, + 0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x23,0x23,0x23,0x23,0x24,0x24,0x24, + 0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24, + 0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x25,0x25,0x24,0x24,0x24, + 0x24,0x24,0x24,0x24,0x24,0x25,0x25,0x25,0x25,0x25,0x25,0x26,0x26,0x25,0x25, + 0x25,0x25,0x25,0x25,0x25,0x25,0x24,0x24,0x25,0x26,0x27,0x27,0x27,0x26,0x25, + 0x24,0x25,0x25,0x26,0x25,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x25,0x26, + 0x26,0x26,0x26,0x26,0x26,0x26,0x26,0x26,0x26,0x26,0x26,0x26,0x26,0x26,0x26, + 0x26,0x27,0x27,0x27,0x27,0x26,0x26,0x26,0x26,0x26,0x26,0x26,0x26,0x26,0x27, + 0x27,0x27,0x27,0x26,0x26,0x26,0x27,0x27,0x27,0x27,0x27,0x26,0x26,0x27,0x27, + 0x26,0x26,0x26,0x27,0x28,0x28,0x28,0x28,0x27,0x26,0x26,0x28,0x28,0x26,0x26, + 0x26,0x28,0x28,0x28,0x28,0x27,0x26,0x26,0x27,0x28,0x28,0x28,0x28,0x27,0x27, + 0x27,0x27,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28, + 0x28,0x28,0x28,0x28,0x28,0x28,0x2a,0x2a,0x29,0x28,0x28,0x28,0x27,0x27,0x27, + 0x27,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28, + 0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28, + 0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x29, + 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x28,0x28,0x29,0x29,0x29,0x29,0x29,0x28, + 0x28,0x28,0x28,0x29,0x29,0x29,0x29,0x29,0x29,0x28,0x28,0x28,0x28,0x28,0x28, + 0x28,0x28,0xc8,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x1a,0x1a,0x1a,0x1a,0x1b, + 0x1b,0x1b,0x1a,0x19,0x19,0x19,0x1a,0x1c,0x1c,0x1c,0x1a,0x19,0x19,0x1a,0x1b, + 0x1b,0x1b,0x1b,0x1b,0x1b,0x1a,0x1a,0x1a,0x1a,0x1b,0x1b,0x1b,0x1b,0x1a,0x1a, + 0x1b,0x1c,0x1c,0x1c,0x1c,0x1c,0x1b,0x1b,0x1b,0x1c,0x1c,0x1c,0x1d,0x1d,0x1d, + 0x1d,0x1c,0x1b,0x1b,0x1c,0x1d,0x1d,0x1c,0x19,0x1a,0x1d,0x1d,0x1d,0x1d,0x1d, + 0x1d,0x1d,0x1e,0x1f,0x1f,0x1e,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d, + 0x1d,0x1d,0x1e,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1e,0x1e, + 0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1f,0x1f,0x20,0x20,0x20,0x1f,0x1f,0x1f,0x1e, + 0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1e,0x1e,0x1e, + 0x1e,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x1f,0x1f,0x1f,0x1f,0x1f,0x20,0x20,0x21,0x20, + 0x20,0x20,0x20,0x20,0x21,0x21,0x21,0x21,0x21,0x22,0x22,0x21,0x20,0x20,0x20, + 0x20,0x21,0x21,0x21,0x20,0x20,0x20,0x20,0x21,0x21,0x21,0x21,0x21,0x21,0x20, + 0x20,0x20,0x21,0x21,0x22,0x21,0x21,0x21,0x21,0x22,0x23,0x23,0x22,0x22,0x22, + 0x22,0x23,0x23,0x23,0x23,0x22,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x22, + 0x22,0x22,0x22,0x22,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23, + 0x22,0x22,0x23,0x23,0x22,0x22,0x22,0x22,0x22,0x23,0x23,0x23,0x24,0x24,0x24, + 0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24, + 0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x25,0x25,0x24, + 0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x25,0x25,0x25,0x25,0x25, + 0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x26,0x26,0x26,0x26,0x26, + 0x26,0x26,0x26,0x26,0x26,0x26,0x26,0x25,0x24,0x24,0x24,0x24,0x24,0x24,0x25, + 0x26,0x26,0x26,0x26,0x26,0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x27, + 0x27,0x27,0x28,0x27,0x27,0x27,0x26,0x26,0x26,0x26,0x26,0x26,0x26,0x26,0x26, + 0x26,0x27,0x27,0x27,0x27,0x26,0x26,0x27,0x27,0x27,0x27,0x27,0x27,0x26,0x27, + 0x28,0x27,0x27,0x26,0x26,0x27,0x28,0x28,0x28,0x28,0x27,0x25,0x26,0x28,0x27, + 0x26,0x26,0x26,0x28,0x28,0x28,0x28,0x26,0x26,0x26,0x27,0x28,0x28,0x28,0x28, + 0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28, + 0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28, + 0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28, + 0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x29,0x29,0x29,0x29,0x29,0x29, + 0x2a,0x2a,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29, + 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29, + 0x29,0x29,0x28,0x28,0x28,0x28,0x29,0x29,0x29,0x29,0x28,0x28,0x28,0x29,0x29, + 0x28,0x28,0x28,0x28,0xc8,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x1a,0x1a,0x1b, + 0x1b,0x1b,0x1b,0x1b,0x1a,0x19,0x19,0x19,0x1a,0x1c,0x1c,0x1c,0x1b,0x1a,0x19, + 0x1a,0x1b,0x1b,0x1b,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1b,0x1b,0x1c,0x1c, + 0x1b,0x1a,0x1b,0x1b,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1d,0x1d, + 0x1d,0x1d,0x1d,0x1c,0x1b,0x1b,0x1c,0x1d,0x1d,0x1c,0x1a,0x1a,0x1d,0x1d,0x1d, + 0x1d,0x1d,0x1d,0x1d,0x1d,0x1e,0x1e,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d, + 0x1d,0x1d,0x1d,0x1e,0x1e,0x1e,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d, + 0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1f,0x20,0x20,0x20,0x20,0x1f, + 0x1f,0x1f,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f, + 0x1e,0x1e,0x1f,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x1f,0x1f,0x1f,0x1f,0x1f,0x20,0x20, + 0x21,0x20,0x20,0x20,0x20,0x20,0x21,0x21,0x21,0x21,0x21,0x21,0x22,0x21,0x20, + 0x20,0x20,0x20,0x21,0x21,0x21,0x20,0x20,0x20,0x21,0x21,0x21,0x21,0x21,0x21, + 0x21,0x21,0x20,0x20,0x21,0x22,0x22,0x22,0x21,0x21,0x21,0x22,0x22,0x23,0x22, + 0x22,0x22,0x22,0x23,0x23,0x23,0x23,0x22,0x21,0x21,0x21,0x21,0x21,0x21,0x21, + 0x21,0x22,0x22,0x22,0x22,0x22,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23, + 0x23,0x23,0x22,0x22,0x23,0x23,0x22,0x22,0x22,0x22,0x23,0x23,0x23,0x23,0x24, + 0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24, + 0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x25, + 0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x25,0x25, + 0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x26,0x27,0x26,0x26,0x26, + 0x26,0x26,0x26,0x26,0x26,0x27,0x26,0x26,0x26,0x25,0x25,0x24,0x24,0x24,0x24, + 0x25,0x25,0x26,0x26,0x26,0x26,0x26,0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x27, + 0x27,0x27,0x27,0x28,0x28,0x27,0x27,0x27,0x27,0x26,0x26,0x26,0x26,0x26,0x26, + 0x26,0x26,0x26,0x27,0x27,0x27,0x27,0x26,0x27,0x27,0x27,0x27,0x27,0x27,0x27, + 0x26,0x27,0x28,0x28,0x27,0x26,0x27,0x27,0x28,0x28,0x28,0x28,0x27,0x26,0x26, + 0x28,0x28,0x26,0x26,0x27,0x28,0x28,0x28,0x28,0x27,0x26,0x27,0x27,0x28,0x28, + 0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28, + 0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28, + 0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28, + 0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x29,0x29,0x29,0x29, + 0x29,0x2a,0x2a,0x2a,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29, + 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29, + 0x29,0x29,0x29,0x29,0x29,0x28,0x28,0x29,0x29,0x29,0x29,0x29,0x29,0x28,0x29, + 0x29,0x29,0x29,0x28,0x28,0x29,0xc8,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x1a, + 0x1b,0x1c,0x1c,0x1c,0x1b,0x1a,0x19,0x19,0x19,0x19,0x1a,0x1b,0x1c,0x1c,0x1a, + 0x1a,0x1a,0x1b,0x1b,0x1b,0x1b,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c, + 0x1c,0x1c,0x1b,0x1b,0x1b,0x1b,0x1c,0x1c,0x1c,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d, + 0x1d,0x1d,0x1d,0x1d,0x1d,0x1c,0x1b,0x1c,0x1c,0x1d,0x1d,0x1d,0x1a,0x1b,0x1d, + 0x1d,0x1c,0x1c,0x1c,0x1c,0x1d,0x1d,0x1d,0x1d,0x1d,0x1c,0x1c,0x1e,0x1e,0x1d, + 0x1d,0x1d,0x1d,0x1d,0x1e,0x1f,0x1f,0x1e,0x1e,0x1e,0x1d,0x1d,0x1d,0x1d,0x1d, + 0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1d,0x1d,0x1e,0x1f,0x20,0x20,0x20, + 0x20,0x20,0x1f,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1f,0x1f,0x1f,0x1f,0x1f, + 0x1f,0x1f,0x1f,0x1f,0x1f,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x21,0x21,0x20,0x20,0x20,0x21,0x21, + 0x21,0x20,0x20,0x21,0x21,0x21,0x21,0x21,0x20,0x20,0x20,0x20,0x21,0x22,0x22, + 0x22,0x22,0x22,0x21,0x21,0x21,0x22,0x22,0x23,0x23,0x22,0x21,0x21,0x22,0x22, + 0x23,0x22,0x22,0x22,0x22,0x22,0x23,0x23,0x23,0x22,0x21,0x21,0x21,0x21,0x21, + 0x21,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x23,0x23,0x23,0x22,0x22,0x23,0x24, + 0x24,0x24,0x24,0x23,0x22,0x22,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x24, + 0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24, + 0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x25,0x25,0x24,0x24, + 0x24,0x24,0x24,0x24,0x24,0x24,0x25,0x25,0x25,0x25,0x25,0x24,0x24,0x24,0x24, + 0x24,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x26,0x26,0x26,0x27,0x28,0x26, + 0x26,0x25,0x25,0x25,0x26,0x26,0x27,0x27,0x27,0x26,0x26,0x26,0x25,0x25,0x25, + 0x25,0x25,0x25,0x25,0x26,0x26,0x26,0x26,0x26,0x27,0x27,0x27,0x27,0x27,0x27, + 0x27,0x27,0x27,0x27,0x28,0x28,0x28,0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x26, + 0x26,0x26,0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x28, + 0x27,0x27,0x27,0x28,0x28,0x28,0x28,0x27,0x27,0x28,0x28,0x28,0x28,0x28,0x27, + 0x26,0x27,0x28,0x28,0x27,0x27,0x27,0x28,0x28,0x28,0x28,0x28,0x27,0x27,0x28, + 0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28, + 0x28,0x28,0x28,0x29,0x29,0x29,0x29,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28, + 0x28,0x28,0x29,0x29,0x29,0x29,0x29,0x28,0x28,0x28,0x28,0x28,0x28,0x29,0x29, + 0x28,0x28,0x29,0x29,0x29,0x29,0x28,0x28,0x29,0x29,0x29,0x29,0x29,0x29,0x29, + 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29, + 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29, + 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29, + 0x29,0x2a,0x2a,0x29,0x29,0x29,0x29,0x29,0xc8,0x1a,0x1a,0x1a,0x19,0x19,0x19, + 0x1a,0x1b,0x1c,0x1d,0x1c,0x1c,0x1c,0x1b,0x1a,0x19,0x19,0x19,0x1a,0x1b,0x1b, + 0x1b,0x1b,0x1a,0x1a,0x1b,0x1b,0x1b,0x1b,0x1b,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c, + 0x1c,0x1c,0x1c,0x1b,0x1b,0x1c,0x1c,0x1c,0x1c,0x1c,0x1d,0x1d,0x1d,0x1d,0x1d, + 0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1c,0x1c,0x1d,0x1d,0x1d,0x1d,0x1b, + 0x1c,0x1e,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1e,0x1e,0x1d,0x1d,0x1d,0x1d,0x1e, + 0x1e,0x1d,0x1d,0x1d,0x1d,0x1e,0x1f,0x1f,0x20,0x1f,0x1e,0x1e,0x1e,0x1d,0x1d, + 0x1e,0x1e,0x1f,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1f,0x20, + 0x20,0x20,0x20,0x20,0x1f,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e, + 0x1f,0x1f,0x1f,0x1f,0x20,0x20,0x20,0x1f,0x1f,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x21,0x21,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x21,0x21,0x20,0x20,0x20, + 0x20,0x21,0x21,0x21,0x21,0x21,0x22,0x22,0x21,0x21,0x20,0x20,0x21,0x21,0x22, + 0x22,0x22,0x23,0x23,0x23,0x22,0x22,0x22,0x22,0x23,0x23,0x23,0x23,0x22,0x22, + 0x23,0x24,0x24,0x23,0x22,0x21,0x21,0x21,0x22,0x23,0x23,0x22,0x22,0x21,0x22, + 0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23, + 0x23,0x23,0x24,0x24,0x24,0x24,0x23,0x23,0x23,0x24,0x24,0x23,0x23,0x23,0x23, + 0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24, + 0x24,0x24,0x24,0x24,0x24,0x25,0x24,0x24,0x24,0x24,0x24,0x24,0x25,0x25,0x25, + 0x25,0x24,0x24,0x24,0x24,0x24,0x24,0x25,0x25,0x25,0x26,0x26,0x25,0x25,0x24, + 0x24,0x24,0x24,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x26,0x26,0x26,0x27,0x27, + 0x27,0x26,0x25,0x24,0x24,0x24,0x26,0x27,0x27,0x27,0x26,0x25,0x26,0x27,0x26, + 0x25,0x25,0x25,0x25,0x25,0x25,0x26,0x26,0x26,0x26,0x26,0x26,0x26,0x26,0x26, + 0x26,0x27,0x27,0x27,0x27,0x27,0x28,0x28,0x28,0x27,0x27,0x27,0x27,0x27,0x27, + 0x27,0x27,0x26,0x27,0x27,0x27,0x27,0x27,0x28,0x27,0x27,0x27,0x27,0x27,0x27, + 0x28,0x28,0x28,0x27,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28, + 0x28,0x27,0x26,0x27,0x28,0x28,0x28,0x27,0x28,0x28,0x28,0x29,0x28,0x28,0x28, + 0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28, + 0x28,0x28,0x28,0x28,0x29,0x29,0x29,0x29,0x29,0x29,0x28,0x28,0x28,0x28,0x28, + 0x28,0x28,0x28,0x28,0x29,0x2a,0x2a,0x2a,0x29,0x29,0x29,0x28,0x28,0x28,0x28, + 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x28,0x29,0x29,0x29,0x29,0x29, + 0x29,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x29,0x29,0x29,0x29,0x29,0x29,0x29, + 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x2a,0x2a,0x29,0x29, + 0x29,0x29,0x29,0x29,0x2a,0x29,0x29,0x2a,0x2a,0x2a,0x2a,0x29,0x29,0x29,0x29, + 0x29,0x29,0x2a,0x2a,0x2a,0x2a,0x29,0x29,0x29,0x29,0xc8,0x1b,0x1b,0x1b,0x1a, + 0x19,0x1a,0x1a,0x1c,0x1d,0x1d,0x1d,0x1c,0x1c,0x1b,0x1a,0x1a,0x19,0x1a,0x1b, + 0x1b,0x1b,0x1b,0x1b,0x1b,0x1a,0x1b,0x1b,0x1b,0x1b,0x1b,0x1c,0x1c,0x1c,0x1c, + 0x1c,0x1c,0x1c,0x1c,0x1c,0x1b,0x1c,0x1c,0x1c,0x1c,0x1c,0x1d,0x1d,0x1d,0x1d, + 0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1e,0x1e,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d, + 0x1d,0x1c,0x1d,0x1f,0x1f,0x1e,0x1e,0x1e,0x1e,0x1f,0x1f,0x1f,0x1f,0x1e,0x1e, + 0x1d,0x1f,0x1e,0x1d,0x1d,0x1d,0x1d,0x1e,0x1f,0x20,0x20,0x1f,0x1f,0x1e,0x1e, + 0x1e,0x1e,0x1f,0x1f,0x1f,0x1f,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1f, + 0x1f,0x20,0x20,0x20,0x20,0x20,0x1f,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e, + 0x1e,0x1e,0x1f,0x1f,0x1f,0x1f,0x20,0x20,0x20,0x1f,0x1f,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x21,0x21,0x21,0x21,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x21,0x21,0x20, + 0x20,0x20,0x20,0x20,0x21,0x21,0x21,0x22,0x22,0x22,0x22,0x21,0x20,0x20,0x21, + 0x22,0x22,0x22,0x22,0x23,0x23,0x23,0x22,0x22,0x22,0x23,0x23,0x23,0x23,0x23, + 0x22,0x22,0x24,0x24,0x24,0x24,0x23,0x21,0x21,0x21,0x22,0x22,0x22,0x22,0x22, + 0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x23,0x23,0x23,0x23,0x23,0x23,0x23, + 0x23,0x23,0x23,0x24,0x24,0x24,0x24,0x24,0x23,0x23,0x24,0x24,0x24,0x23,0x23, + 0x23,0x23,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24, + 0x24,0x24,0x24,0x24,0x24,0x24,0x25,0x25,0x24,0x24,0x24,0x24,0x24,0x25,0x25, + 0x25,0x25,0x25,0x24,0x24,0x24,0x24,0x24,0x25,0x25,0x25,0x26,0x26,0x26,0x26, + 0x25,0x25,0x24,0x24,0x24,0x25,0x25,0x25,0x25,0x25,0x25,0x26,0x26,0x26,0x26, + 0x27,0x27,0x26,0x25,0x24,0x24,0x24,0x24,0x26,0x27,0x27,0x26,0x26,0x25,0x26, + 0x27,0x27,0x26,0x25,0x25,0x25,0x25,0x25,0x26,0x26,0x26,0x26,0x26,0x26,0x26, + 0x26,0x26,0x26,0x27,0x27,0x27,0x27,0x27,0x28,0x28,0x28,0x27,0x27,0x27,0x27, + 0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x28,0x28,0x27,0x27,0x27,0x27, + 0x27,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28, + 0x28,0x28,0x28,0x27,0x27,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x29,0x29,0x28, + 0x28,0x28,0x29,0x29,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28, + 0x28,0x28,0x28,0x28,0x28,0x28,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x28,0x28, + 0x28,0x28,0x28,0x28,0x28,0x28,0x29,0x2a,0x2a,0x2a,0x2a,0x29,0x29,0x29,0x28, + 0x28,0x28,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x28,0x28,0x29,0x29,0x29, + 0x29,0x29,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x29,0x29,0x29,0x29,0x29, + 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x2a,0x2a,0x2a, + 0x29,0x29,0x29,0x29,0x29,0x2a,0x2a,0x29,0x29,0x2a,0x2a,0x2a,0x2a,0x2a,0x29, + 0x29,0x29,0x29,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x29,0x29,0x29,0xc8,0x1c,0x1c, + 0x1b,0x1a,0x1a,0x1a,0x1b,0x1c,0x1d,0x1d,0x1d,0x1c,0x1b,0x1b,0x1b,0x1b,0x1b, + 0x1b,0x1b,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1d, + 0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d, + 0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1e,0x1e,0x1e,0x1d,0x1d,0x1d,0x1d,0x1d, + 0x1d,0x1d,0x1d,0x1d,0x1d,0x1f,0x1f,0x1f,0x1e,0x1e,0x1f,0x1f,0x1f,0x20,0x20, + 0x1f,0x1e,0x1e,0x1e,0x1e,0x1d,0x1d,0x1d,0x1d,0x1e,0x1f,0x20,0x20,0x1f,0x1e, + 0x1e,0x1f,0x1f,0x1f,0x1f,0x20,0x20,0x20,0x1f,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e, + 0x1f,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x1f,0x1e,0x1e,0x1e,0x1e,0x1f,0x1f, + 0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x21,0x21,0x21,0x21,0x21,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x21,0x21,0x21,0x21,0x21,0x21,0x20,0x20,0x20,0x20,0x21,0x21, + 0x21,0x20,0x20,0x20,0x20,0x20,0x21,0x21,0x22,0x22,0x22,0x22,0x22,0x21,0x21, + 0x21,0x21,0x22,0x22,0x22,0x22,0x23,0x23,0x23,0x22,0x22,0x22,0x23,0x23,0x23, + 0x23,0x23,0x23,0x23,0x24,0x24,0x24,0x24,0x23,0x22,0x22,0x22,0x22,0x22,0x21, + 0x22,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x24,0x24,0x24,0x24, + 0x23,0x23,0x23,0x23,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24, + 0x23,0x23,0x23,0x23,0x23,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24, + 0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x25,0x25,0x25,0x24,0x24,0x25, + 0x25,0x25,0x26,0x25,0x25,0x25,0x25,0x24,0x24,0x24,0x25,0x25,0x26,0x26,0x26, + 0x27,0x27,0x26,0x25,0x25,0x24,0x24,0x24,0x25,0x25,0x25,0x25,0x25,0x26,0x26, + 0x26,0x26,0x27,0x26,0x25,0x25,0x25,0x25,0x25,0x26,0x26,0x26,0x26,0x26,0x25, + 0x25,0x26,0x27,0x26,0x26,0x26,0x25,0x25,0x25,0x26,0x26,0x26,0x26,0x26,0x26, + 0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28, + 0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28, + 0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28, + 0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x29,0x29, + 0x29,0x28,0x28,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x28, + 0x28,0x28,0x28,0x28,0x28,0x28,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29, + 0x29,0x28,0x28,0x29,0x28,0x28,0x28,0x28,0x28,0x29,0x29,0x2a,0x2a,0x2a,0x29, + 0x29,0x28,0x28,0x29,0x2a,0x2a,0x2a,0x29,0x29,0x2a,0x2a,0x29,0x28,0x28,0x29, + 0x2a,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29, + 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x2a,0x2a, + 0x2a,0x2a,0x29,0x29,0x29,0x29,0x2a,0x2a,0x2a,0x29,0x29,0x2a,0x2b,0x2b,0x2a, + 0x2a,0x2a,0x29,0x29,0x2a,0x2a,0x2b,0x2a,0x2a,0x2a,0x2a,0x29,0x29,0x29,0xc8, + 0x1c,0x1c,0x1b,0x1b,0x1a,0x1a,0x1b,0x1b,0x1c,0x1d,0x1c,0x1c,0x1b,0x1b,0x1b, + 0x1b,0x1c,0x1b,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c, + 0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d, + 0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1e,0x1e,0x1e,0x1e,0x1d,0x1d,0x1d, + 0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1e,0x1e,0x1e,0x1d,0x1d,0x1e,0x1e,0x1f, + 0x1f,0x1f,0x1e,0x1e,0x1d,0x1e,0x1e,0x1d,0x1d,0x1d,0x1d,0x1e,0x1f,0x20,0x20, + 0x1f,0x1f,0x1e,0x1f,0x1f,0x1f,0x20,0x20,0x20,0x20,0x1f,0x1f,0x1e,0x1e,0x1e, + 0x1e,0x1f,0x1f,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x1f,0x1f,0x1e,0x1e,0x1f, + 0x20,0x20,0x1f,0x1f,0x1f,0x1f,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x21,0x21, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x21,0x21,0x21,0x21,0x21,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x20,0x20,0x20, + 0x21,0x21,0x21,0x20,0x20,0x20,0x20,0x20,0x21,0x22,0x22,0x22,0x22,0x22,0x21, + 0x21,0x21,0x21,0x21,0x21,0x22,0x22,0x22,0x23,0x23,0x23,0x22,0x22,0x22,0x23, + 0x23,0x23,0x23,0x23,0x23,0x23,0x24,0x24,0x24,0x23,0x23,0x22,0x22,0x23,0x23, + 0x22,0x22,0x22,0x23,0x24,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x24,0x24,0x24, + 0x24,0x24,0x24,0x23,0x23,0x23,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24, + 0x24,0x24,0x24,0x23,0x23,0x23,0x23,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24, + 0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x25,0x25,0x25,0x25,0x24, + 0x25,0x25,0x25,0x26,0x26,0x26,0x25,0x25,0x25,0x24,0x24,0x24,0x25,0x25,0x26, + 0x26,0x26,0x27,0x27,0x27,0x26,0x25,0x24,0x24,0x24,0x24,0x25,0x25,0x25,0x25, + 0x25,0x26,0x26,0x26,0x27,0x26,0x25,0x25,0x25,0x26,0x26,0x26,0x26,0x26,0x26, + 0x25,0x25,0x25,0x26,0x27,0x27,0x26,0x26,0x26,0x25,0x26,0x26,0x26,0x26,0x26, + 0x26,0x26,0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x28,0x28,0x28,0x28,0x28,0x28, + 0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28, + 0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28, + 0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x29, + 0x29,0x29,0x29,0x28,0x28,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29, + 0x29,0x29,0x28,0x28,0x28,0x28,0x28,0x28,0x29,0x29,0x29,0x29,0x29,0x29,0x29, + 0x29,0x29,0x29,0x28,0x29,0x2a,0x29,0x28,0x28,0x28,0x28,0x28,0x29,0x2a,0x2a, + 0x2a,0x2a,0x29,0x28,0x29,0x29,0x2a,0x2a,0x2a,0x2a,0x29,0x2a,0x2a,0x29,0x28, + 0x28,0x29,0x2a,0x29,0x29,0x29,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a, + 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x2a, + 0x2a,0x2a,0x2a,0x2a,0x2a,0x29,0x29,0x2a,0x2a,0x2a,0x2a,0x29,0x2a,0x2a,0x2b, + 0x2b,0x2a,0x2a,0x2a,0x29,0x29,0x2a,0x2b,0x2b,0x2a,0x2a,0x2a,0x2a,0x29,0x29, + 0x29,0xc8,0x1c,0x1c,0x1b,0x1b,0x1a,0x1a,0x1b,0x1b,0x1b,0x1c,0x1c,0x1b,0x1b, + 0x1b,0x1b,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c, + 0x1c,0x1c,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d, + 0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1e,0x1e,0x1e,0x1e,0x1d, + 0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d, + 0x1e,0x1e,0x1e,0x1e,0x1d,0x1d,0x1d,0x1e,0x1e,0x1d,0x1d,0x1d,0x1d,0x1e,0x1f, + 0x1f,0x1f,0x1f,0x1f,0x1e,0x1f,0x1f,0x20,0x20,0x20,0x20,0x20,0x1f,0x1f,0x1f, + 0x1e,0x1e,0x1f,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x1f,0x1f,0x1f, + 0x1f,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x21,0x21,0x21, + 0x22,0x22,0x21,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x21,0x21,0x21,0x20,0x21,0x22,0x21,0x21, + 0x20,0x20,0x21,0x21,0x21,0x20,0x20,0x20,0x20,0x20,0x21,0x22,0x22,0x22,0x22, + 0x21,0x21,0x21,0x22,0x22,0x22,0x21,0x21,0x22,0x22,0x23,0x23,0x23,0x22,0x22, + 0x22,0x23,0x23,0x24,0x24,0x23,0x22,0x22,0x23,0x23,0x23,0x22,0x22,0x23,0x23, + 0x24,0x24,0x24,0x23,0x23,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24, + 0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24, + 0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24, + 0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x25,0x25,0x25,0x25, + 0x25,0x25,0x25,0x25,0x26,0x26,0x26,0x26,0x26,0x26,0x26,0x24,0x24,0x24,0x25, + 0x25,0x25,0x25,0x26,0x27,0x27,0x27,0x27,0x26,0x24,0x24,0x24,0x25,0x25,0x25, + 0x25,0x25,0x25,0x25,0x26,0x26,0x27,0x26,0x25,0x26,0x26,0x27,0x27,0x27,0x26, + 0x26,0x26,0x26,0x26,0x26,0x26,0x27,0x27,0x27,0x26,0x26,0x26,0x26,0x26,0x27, + 0x27,0x26,0x26,0x26,0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x28,0x28,0x28, + 0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28, + 0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28, + 0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28, + 0x29,0x29,0x28,0x28,0x28,0x28,0x28,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29, + 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29, + 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x2a,0x29,0x29,0x28,0x28,0x28,0x29,0x29, + 0x2a,0x2a,0x2a,0x2a,0x2a,0x29,0x29,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a, + 0x29,0x28,0x28,0x29,0x2a,0x2a,0x2a,0x2a,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b, + 0x2b,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a, + 0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a, + 0x2b,0x2b,0x2b,0x2b,0x2b,0x2a,0x2a,0x2a,0x2a,0x2b,0x2b,0x2a,0x2a,0x2a,0x2a, + 0x29,0x29,0x29,0xc8,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, + 0x1b,0x1b,0x1b,0x1b,0x1b,0x1c,0x1c,0x1c,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, + 0x1b,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d, + 0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1c,0x1d,0x1d,0x1d,0x1e,0x1e,0x1e, + 0x1e,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1e,0x1e,0x1e,0x1e,0x1d, + 0x1d,0x1e,0x1f,0x1f,0x1f,0x1f,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e, + 0x1e,0x1e,0x1f,0x1f,0x1f,0x1e,0x1e,0x1f,0x1f,0x20,0x20,0x20,0x20,0x20,0x1f, + 0x1f,0x1e,0x1e,0x1e,0x1f,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x1f, + 0x1f,0x1f,0x1f,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x21, + 0x21,0x21,0x22,0x22,0x21,0x21,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x1f,0x20,0x20,0x20,0x20,0x21,0x21,0x21,0x20,0x21,0x23, + 0x22,0x21,0x21,0x21,0x21,0x21,0x21,0x20,0x20,0x20,0x20,0x21,0x21,0x22,0x22, + 0x22,0x22,0x21,0x21,0x21,0x22,0x22,0x22,0x21,0x21,0x22,0x23,0x23,0x23,0x23, + 0x22,0x22,0x23,0x23,0x24,0x24,0x24,0x24,0x22,0x22,0x22,0x22,0x22,0x22,0x22, + 0x23,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24, + 0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x23,0x23,0x24, + 0x24,0x25,0x25,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24, + 0x24,0x24,0x24,0x24,0x24,0x25,0x25,0x25,0x25,0x25,0x25,0x24,0x25,0x26,0x25, + 0x25,0x25,0x25,0x25,0x25,0x25,0x26,0x26,0x26,0x26,0x26,0x26,0x26,0x25,0x24, + 0x25,0x25,0x25,0x25,0x25,0x26,0x27,0x27,0x27,0x27,0x26,0x25,0x24,0x24,0x25, + 0x26,0x26,0x26,0x26,0x25,0x26,0x26,0x27,0x27,0x26,0x26,0x26,0x27,0x27,0x27, + 0x27,0x27,0x26,0x26,0x26,0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x27, + 0x27,0x28,0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x27, + 0x27,0x27,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28, + 0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x29,0x29,0x29,0x29,0x29, + 0x28,0x28,0x28,0x29,0x29,0x29,0x29,0x29,0x28,0x28,0x28,0x28,0x28,0x28,0x28, + 0x28,0x29,0x29,0x29,0x28,0x28,0x28,0x28,0x28,0x29,0x29,0x29,0x29,0x29,0x29, + 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x29,0x29, + 0x29,0x29,0x29,0x29,0x29,0x29,0x2a,0x2a,0x2a,0x2a,0x2a,0x29,0x28,0x28,0x29, + 0x29,0x2a,0x2b,0x2a,0x2a,0x2a,0x2a,0x29,0x29,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a, + 0x2a,0x2a,0x2a,0x29,0x29,0x29,0x2a,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b, + 0x2b,0x2b,0x2b,0x2b,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a, + 0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a, + 0x2a,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2a, + 0x2a,0x2a,0x2a,0x2a,0x2a,0xc8,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, + 0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1c,0x1c,0x1c,0x1c,0x1b,0x1b,0x1b,0x1b,0x1b, + 0x1b,0x1b,0x1b,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1d,0x1d,0x1d,0x1d, + 0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1c,0x1c,0x1d,0x1d,0x1d,0x1e, + 0x1e,0x1e,0x1e,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1e,0x1f,0x1f,0x1e, + 0x1e,0x1e,0x1e,0x1f,0x1f,0x20,0x20,0x20,0x1f,0x1f,0x1f,0x1e,0x1e,0x1e,0x1e, + 0x1e,0x1e,0x1e,0x1e,0x1f,0x1f,0x1e,0x1e,0x1e,0x1e,0x1f,0x20,0x20,0x20,0x20, + 0x20,0x1f,0x1e,0x1e,0x1e,0x1e,0x1f,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x1f,0x1f,0x1f,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x21,0x21,0x21,0x21,0x21,0x21,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x1f,0x1f,0x20,0x20,0x20,0x21,0x21,0x21,0x21,0x20, + 0x21,0x23,0x22,0x21,0x21,0x21,0x21,0x21,0x21,0x20,0x20,0x20,0x21,0x21,0x21, + 0x22,0x22,0x22,0x22,0x21,0x21,0x21,0x22,0x22,0x22,0x21,0x21,0x23,0x23,0x23, + 0x23,0x23,0x22,0x22,0x23,0x24,0x24,0x24,0x24,0x24,0x23,0x22,0x22,0x22,0x22, + 0x22,0x22,0x24,0x24,0x25,0x25,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24, + 0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x23,0x23, + 0x23,0x24,0x24,0x25,0x25,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24, + 0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25, + 0x26,0x26,0x25,0x25,0x25,0x25,0x25,0x25,0x26,0x26,0x26,0x26,0x26,0x26,0x26, + 0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x26,0x27,0x27,0x27,0x27,0x27,0x26,0x25, + 0x25,0x26,0x26,0x26,0x26,0x26,0x26,0x26,0x27,0x27,0x27,0x27,0x26,0x27,0x27, + 0x27,0x27,0x27,0x27,0x27,0x26,0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x27, + 0x27,0x28,0x28,0x28,0x28,0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x27, + 0x27,0x27,0x27,0x27,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28, + 0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x29,0x29,0x29,0x29, + 0x29,0x29,0x29,0x28,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x28,0x28,0x28,0x28, + 0x28,0x28,0x29,0x29,0x29,0x29,0x28,0x28,0x28,0x28,0x28,0x29,0x29,0x29,0x2a, + 0x2a,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a, + 0x2a,0x29,0x29,0x29,0x29,0x29,0x29,0x2a,0x2a,0x2a,0x2a,0x2a,0x29,0x29,0x28, + 0x28,0x29,0x2a,0x2a,0x2b,0x2b,0x2a,0x2a,0x2a,0x29,0x29,0x2a,0x2a,0x2a,0x2a, + 0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x29,0x2a,0x2a,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b, + 0x2b,0x2b,0x2b,0x2b,0x2b,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a, + 0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a, + 0x2a,0x2a,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b, + 0x2b,0x2b,0x2a,0x2a,0x2a,0x2a,0x2a,0xc8,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, + 0x1b,0x1b,0x1b,0x1b,0x1c,0x1c,0x1c,0x1d,0x1d,0x1d,0x1d,0x1d,0x1c,0x1c,0x1c, + 0x1c,0x1c,0x1c,0x1b,0x1b,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1d,0x1d,0x1d, + 0x1d,0x1d,0x1d,0x1d,0x1d,0x1e,0x1e,0x1e,0x1d,0x1d,0x1d,0x1c,0x1c,0x1d,0x1d, + 0x1d,0x1e,0x1f,0x1e,0x1e,0x1e,0x1e,0x1e,0x1d,0x1d,0x1d,0x1d,0x1e,0x1f,0x1f, + 0x1e,0x1d,0x1d,0x1d,0x1d,0x1d,0x1e,0x1f,0x1f,0x1f,0x1e,0x1e,0x1d,0x1e,0x1e, + 0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x20,0x20, + 0x20,0x20,0x20,0x1f,0x1e,0x1e,0x1e,0x1e,0x1f,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x21,0x21,0x21,0x21, + 0x21,0x21,0x21,0x21,0x21,0x21,0x20,0x20,0x20,0x20,0x20,0x20,0x21,0x22,0x22, + 0x22,0x21,0x22,0x23,0x22,0x22,0x21,0x21,0x21,0x21,0x21,0x20,0x20,0x20,0x21, + 0x21,0x21,0x22,0x22,0x21,0x21,0x20,0x20,0x21,0x23,0x23,0x22,0x21,0x20,0x22, + 0x24,0x24,0x24,0x24,0x23,0x23,0x23,0x24,0x24,0x24,0x24,0x24,0x23,0x23,0x23, + 0x22,0x22,0x22,0x22,0x24,0x25,0x25,0x25,0x25,0x24,0x24,0x24,0x24,0x24,0x24, + 0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x25,0x25,0x25,0x25,0x24, + 0x24,0x23,0x23,0x24,0x24,0x25,0x26,0x25,0x25,0x24,0x24,0x24,0x24,0x24,0x24, + 0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x25,0x25,0x25,0x25,0x25,0x25, + 0x26,0x26,0x26,0x26,0x25,0x25,0x25,0x25,0x25,0x25,0x26,0x26,0x27,0x27,0x27, + 0x26,0x26,0x26,0x26,0x26,0x25,0x25,0x25,0x25,0x26,0x26,0x26,0x27,0x27,0x27, + 0x26,0x26,0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x28,0x28,0x28,0x28,0x28, + 0x27,0x27,0x27,0x26,0x26,0x27,0x27,0x27,0x27,0x27,0x28,0x28,0x27,0x27,0x27, + 0x27,0x27,0x28,0x28,0x28,0x28,0x28,0x28,0x27,0x27,0x28,0x28,0x28,0x28,0x28, + 0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28, + 0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x29,0x29, + 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x2a,0x2a,0x29,0x29,0x29,0x28,0x28, + 0x28,0x28,0x28,0x29,0x29,0x2a,0x2a,0x2a,0x29,0x28,0x28,0x28,0x28,0x29,0x29, + 0x29,0x2a,0x2a,0x2a,0x29,0x29,0x29,0x29,0x29,0x29,0x2a,0x2a,0x2a,0x2b,0x2a, + 0x2a,0x2a,0x2a,0x29,0x29,0x29,0x29,0x29,0x29,0x2a,0x2a,0x2a,0x2a,0x2a,0x29, + 0x29,0x28,0x28,0x29,0x2a,0x2b,0x2b,0x2b,0x2b,0x2a,0x2a,0x29,0x29,0x2a,0x2a, + 0x2a,0x29,0x29,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2b,0x2b,0x2b,0x2b,0x2a,0x2a, + 0x2a,0x29,0x29,0x29,0x29,0x28,0x28,0x29,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a, + 0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2b,0x2b,0x2a,0x2a,0x2a,0x2a, + 0x2a,0x2a,0x2a,0x2a,0x2b,0x2b,0x2b,0x2a,0x2a,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b, + 0x2b,0x2b,0x2b,0x2b,0x2b,0x2a,0x2a,0x2a,0x2a,0xc8,0x1b,0x1b,0x1b,0x1b,0x1b, + 0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1c,0x1c,0x1c,0x1d,0x1d,0x1c,0x1c,0x1c,0x1c, + 0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1b,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1d, + 0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1c,0x1c, + 0x1c,0x1d,0x1d,0x1d,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1d,0x1d,0x1d,0x1e,0x1e, + 0x1e,0x1e,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1e,0x1e,0x1e,0x1e,0x1e, + 0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1f,0x1f,0x1f,0x1f,0x1f, + 0x20,0x20,0x20,0x20,0x20,0x20,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x21,0x21, + 0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x20,0x20,0x20,0x20,0x20,0x21,0x22, + 0x22,0x22,0x22,0x21,0x22,0x23,0x22,0x22,0x21,0x21,0x21,0x21,0x21,0x21,0x21, + 0x21,0x21,0x21,0x21,0x22,0x22,0x21,0x21,0x21,0x21,0x21,0x23,0x23,0x22,0x22, + 0x22,0x23,0x23,0x24,0x24,0x24,0x24,0x23,0x23,0x24,0x24,0x24,0x24,0x23,0x23, + 0x23,0x23,0x23,0x23,0x23,0x23,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24, + 0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x25,0x25, + 0x24,0x24,0x24,0x23,0x22,0x23,0x24,0x25,0x26,0x25,0x25,0x24,0x24,0x24,0x24, + 0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x25,0x25,0x25,0x25,0x25, + 0x25,0x25,0x25,0x26,0x26,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x26,0x26,0x27, + 0x27,0x27,0x26,0x26,0x26,0x26,0x26,0x26,0x26,0x26,0x26,0x26,0x26,0x26,0x27, + 0x27,0x27,0x27,0x27,0x28,0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x28,0x28, + 0x28,0x28,0x28,0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x28,0x28,0x28, + 0x28,0x28,0x27,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28, + 0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28, + 0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28, + 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29, + 0x28,0x28,0x28,0x28,0x29,0x29,0x2a,0x2a,0x29,0x29,0x29,0x28,0x28,0x28,0x28, + 0x29,0x29,0x29,0x29,0x2a,0x2a,0x29,0x29,0x29,0x29,0x29,0x2a,0x2a,0x2a,0x2a, + 0x2b,0x2b,0x2a,0x2a,0x2a,0x29,0x29,0x29,0x29,0x29,0x29,0x2a,0x2a,0x2a,0x2a, + 0x2a,0x29,0x29,0x29,0x29,0x29,0x2a,0x2b,0x2b,0x2b,0x2b,0x2b,0x2a,0x29,0x2a, + 0x2a,0x2a,0x2a,0x29,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2b,0x2b,0x2b,0x2a, + 0x2a,0x2a,0x2a,0x2a,0x2a,0x29,0x29,0x29,0x29,0x2a,0x2b,0x2b,0x2b,0x2a,0x2a, + 0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2b,0x2a,0x2a,0x2a, + 0x2a,0x2a,0x2a,0x2a,0x2a,0x2b,0x2b,0x2b,0x2b,0x2a,0x2a,0x2b,0x2b,0x2b,0x2b, + 0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2a,0x2a,0x2a,0xc8,0x1a,0x1a,0x1a, + 0x1a,0x1a,0x1a,0x1a,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1c,0x1b,0x1b,0x1b, + 0x1b,0x1b,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1d,0x1d,0x1d, + 0x1d,0x1c,0x1c,0x1c,0x1b,0x1b,0x1b,0x1c,0x1c,0x1d,0x1d,0x1d,0x1d,0x1d,0x1c, + 0x1c,0x1c,0x1c,0x1c,0x1d,0x1d,0x1d,0x1d,0x1d,0x1e,0x1e,0x1d,0x1d,0x1d,0x1d, + 0x1e,0x1e,0x1d,0x1d,0x1d,0x1d,0x1e,0x1f,0x1f,0x1e,0x1d,0x1d,0x1d,0x1d,0x1d, + 0x1e,0x1f,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1f,0x1f,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x1f,0x1e, + 0x1f,0x1f,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x21,0x21,0x21,0x21,0x22,0x22,0x22, + 0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22, + 0x22,0x22,0x22,0x22,0x22,0x21,0x21,0x22,0x22,0x22,0x23,0x22,0x22,0x23,0x23, + 0x23,0x24,0x24,0x23,0x23,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x23,0x23, + 0x23,0x23,0x23,0x23,0x23,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24, + 0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24, + 0x24,0x24,0x24,0x24,0x23,0x23,0x22,0x22,0x24,0x24,0x25,0x25,0x25,0x24,0x24, + 0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x25,0x25,0x25,0x25,0x25,0x25, + 0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x26,0x26, + 0x26,0x26,0x26,0x26,0x26,0x26,0x27,0x27,0x27,0x28,0x28,0x27,0x27,0x27,0x26, + 0x26,0x27,0x27,0x27,0x28,0x28,0x28,0x27,0x27,0x26,0x26,0x26,0x26,0x26,0x27, + 0x27,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x27,0x27,0x27,0x28,0x28,0x28, + 0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28, + 0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28, + 0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28, + 0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x29,0x29,0x28,0x28,0x28,0x28,0x28,0x28, + 0x28,0x28,0x28,0x28,0x28,0x29,0x29,0x2a,0x2a,0x29,0x28,0x28,0x28,0x28,0x29, + 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x2a,0x2a,0x2a, + 0x2a,0x2a,0x2a,0x2b,0x2b,0x2b,0x2b,0x2a,0x29,0x29,0x29,0x29,0x2a,0x2a,0x2a, + 0x2a,0x2a,0x29,0x29,0x29,0x2a,0x2a,0x2a,0x2a,0x2a,0x2b,0x2b,0x2b,0x2b,0x2b, + 0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a, + 0x2a,0x2a,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b, + 0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2a,0x2a, + 0x2a,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b, + 0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0xc8,0x1b, + 0x1b,0x1a,0x1a,0x1a,0x1a,0x1a,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1c,0x1b, + 0x1b,0x1b,0x1b,0x1b,0x1c,0x1c,0x1c,0x1c,0x1d,0x1c,0x1c,0x1d,0x1d,0x1d,0x1d, + 0x1d,0x1d,0x1d,0x1d,0x1d,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1d,0x1d,0x1d,0x1d, + 0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1e,0x1f,0x1e,0x1e,0x1e, + 0x1e,0x1e,0x1f,0x1f,0x1e,0x1e,0x1d,0x1d,0x1e,0x1f,0x1f,0x1e,0x1e,0x1d,0x1d, + 0x1d,0x1d,0x1e,0x1f,0x20,0x20,0x20,0x20,0x20,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x1f,0x1e,0x1f,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x21,0x21,0x21,0x21, + 0x21,0x21,0x21,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x21,0x21,0x21,0x21,0x22, + 0x22,0x22,0x21,0x21,0x21,0x22,0x22,0x22,0x22,0x23,0x22,0x22,0x22,0x22,0x22, + 0x22,0x22,0x22,0x22,0x23,0x23,0x22,0x21,0x21,0x22,0x23,0x23,0x23,0x23,0x23, + 0x23,0x23,0x23,0x23,0x24,0x24,0x24,0x24,0x24,0x23,0x23,0x23,0x23,0x24,0x24, + 0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24, + 0x24,0x24,0x25,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24, + 0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x23,0x23,0x23,0x24,0x24,0x25,0x25,0x25, + 0x25,0x24,0x24,0x24,0x24,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25, + 0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x26,0x26,0x26, + 0x26,0x26,0x26,0x26,0x26,0x26,0x26,0x26,0x27,0x27,0x27,0x27,0x27,0x27,0x27, + 0x28,0x27,0x27,0x27,0x26,0x27,0x28,0x28,0x28,0x28,0x27,0x27,0x26,0x26,0x26, + 0x27,0x27,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x27,0x28,0x28, + 0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28, + 0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28, + 0x28,0x28,0x28,0x29,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x29,0x29,0x29,0x29, + 0x29,0x29,0x29,0x29,0x28,0x28,0x28,0x28,0x29,0x29,0x29,0x28,0x28,0x29,0x28, + 0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x29,0x2a,0x2a,0x2a,0x29,0x28,0x28, + 0x29,0x2a,0x2a,0x2a,0x2a,0x29,0x29,0x29,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a, + 0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2b,0x2b,0x2b,0x2a,0x29,0x29,0x29,0x29,0x29, + 0x29,0x29,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2b,0x2b,0x2b, + 0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b, + 0x2a,0x2a,0x2a,0x2a,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b, + 0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b, + 0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b, + 0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b, + 0xc8,0x1b,0x1b,0x1a,0x1a,0x1a,0x1a,0x1a,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, + 0x1c,0x1c,0x1b,0x1b,0x1b,0x1b,0x1c,0x1c,0x1c,0x1d,0x1d,0x1c,0x1c,0x1d,0x1d, + 0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1c,0x1c,0x1d,0x1d, + 0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1e,0x1f,0x1f,0x1f, + 0x1e,0x1e,0x1e,0x1f,0x1f,0x1f,0x1f,0x1f,0x1e,0x1e,0x1e,0x1f,0x1f,0x1e,0x1e, + 0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x1f,0x1f, + 0x1f,0x1f,0x1f,0x1f,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x1f,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x21,0x21,0x21, + 0x21,0x21,0x21,0x21,0x21,0x21,0x20,0x20,0x20,0x20,0x20,0x20,0x21,0x21,0x21, + 0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x22,0x22,0x22,0x23,0x23,0x22,0x22,0x22, + 0x22,0x22,0x22,0x22,0x22,0x23,0x23,0x23,0x22,0x21,0x21,0x22,0x23,0x23,0x23, + 0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x24,0x24,0x24,0x23,0x23,0x23,0x23,0x23, + 0x24,0x24,0x24,0x25,0x25,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24, + 0x24,0x24,0x24,0x24,0x25,0x25,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24, + 0x24,0x24,0x24,0x24,0x24,0x25,0x25,0x24,0x24,0x24,0x24,0x24,0x24,0x25,0x25, + 0x25,0x25,0x25,0x25,0x24,0x24,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25, + 0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x26,0x26, + 0x26,0x26,0x26,0x26,0x26,0x26,0x26,0x26,0x26,0x26,0x27,0x27,0x27,0x27,0x27, + 0x27,0x28,0x28,0x28,0x28,0x27,0x26,0x26,0x28,0x28,0x28,0x28,0x28,0x27,0x27, + 0x27,0x27,0x27,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28, + 0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28, + 0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28, + 0x28,0x28,0x28,0x28,0x29,0x29,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x29,0x29, + 0x29,0x29,0x29,0x29,0x29,0x29,0x28,0x28,0x28,0x29,0x29,0x29,0x29,0x28,0x29, + 0x29,0x29,0x29,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x2a,0x2a,0x2a,0x29, + 0x29,0x29,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x29,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a, + 0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2b,0x2b,0x2b,0x2b,0x2a,0x2a,0x29,0x29, + 0x29,0x29,0x29,0x29,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2b, + 0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b, + 0x2b,0x2b,0x2a,0x2a,0x2a,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b, + 0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b, + 0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b, + 0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b, + 0x2b,0x2b,0xc8,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, + 0x1b,0x1b,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1d,0x1d,0x1d,0x1d,0x1d, + 0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d, + 0x1d,0x1d,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1d,0x1d,0x1e,0x1e,0x1e,0x1f,0x1f, + 0x1f,0x1f,0x1e,0x1e,0x1e,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1e,0x1e, + 0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1e,0x1e,0x1f,0x20,0x1f,0x20,0x20,0x1f,0x1f, + 0x1f,0x1f,0x1f,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x21,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x21,0x21,0x21,0x21, + 0x21,0x22,0x22,0x22,0x22,0x22,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21, + 0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x22,0x22,0x22,0x23,0x23,0x23,0x23, + 0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x22,0x21,0x21,0x22,0x23, + 0x23,0x24,0x24,0x24,0x24,0x24,0x23,0x22,0x22,0x24,0x24,0x24,0x24,0x24,0x23, + 0x23,0x24,0x24,0x24,0x25,0x25,0x25,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24, + 0x24,0x24,0x24,0x24,0x24,0x24,0x25,0x25,0x25,0x24,0x24,0x24,0x24,0x24,0x24, + 0x24,0x24,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25, + 0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x26,0x26,0x26,0x26,0x26,0x25, + 0x25,0x26,0x26,0x26,0x26,0x26,0x26,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x26, + 0x26,0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x26,0x26,0x26,0x26,0x28,0x28,0x27, + 0x26,0x26,0x27,0x27,0x28,0x28,0x28,0x28,0x27,0x26,0x28,0x28,0x28,0x28,0x28, + 0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28, + 0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28, + 0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28, + 0x28,0x28,0x28,0x29,0x29,0x29,0x29,0x2a,0x29,0x29,0x29,0x29,0x29,0x29,0x29, + 0x29,0x29,0x2a,0x2a,0x2a,0x2a,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29, + 0x2a,0x2a,0x2a,0x2a,0x29,0x29,0x28,0x28,0x28,0x28,0x28,0x28,0x29,0x2b,0x2b, + 0x2a,0x2a,0x2a,0x2a,0x2a,0x2b,0x2b,0x2b,0x2b,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a, + 0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2a, + 0x2a,0x29,0x29,0x29,0x29,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2b,0x2b, + 0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b, + 0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b, + 0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b, + 0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b, + 0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b, + 0x2b,0x2b,0x2b,0x2b,0xc8,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, + 0x1b,0x1b,0x1b,0x1b,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1d,0x1d,0x1d, + 0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d, + 0x1d,0x1d,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1d,0x1d,0x1e,0x1e,0x1e, + 0x1f,0x1f,0x1f,0x1e,0x1e,0x1e,0x1e,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f, + 0x1e,0x1e,0x1f,0x1f,0x20,0x20,0x1f,0x1f,0x1e,0x1e,0x1e,0x1e,0x1e,0x1f,0x1f, + 0x1f,0x1f,0x1f,0x20,0x20,0x20,0x20,0x21,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x21,0x21,0x21,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x21,0x21, + 0x21,0x21,0x21,0x22,0x22,0x22,0x22,0x22,0x21,0x21,0x21,0x21,0x21,0x21,0x21, + 0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x22,0x22,0x22,0x23,0x23,0x23, + 0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x21,0x21, + 0x22,0x23,0x23,0x24,0x24,0x24,0x24,0x24,0x23,0x22,0x22,0x24,0x24,0x24,0x24, + 0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24, + 0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x25,0x25,0x25,0x24,0x24,0x24,0x24, + 0x24,0x24,0x24,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x26,0x26, + 0x26,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x26,0x26,0x26,0x26, + 0x26,0x25,0x26,0x27,0x26,0x26,0x26,0x26,0x26,0x26,0x26,0x25,0x25,0x25,0x25, + 0x26,0x26,0x27,0x28,0x27,0x27,0x27,0x27,0x27,0x28,0x27,0x26,0x26,0x27,0x28, + 0x28,0x27,0x26,0x26,0x27,0x28,0x28,0x28,0x28,0x28,0x27,0x26,0x28,0x28,0x28, + 0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28, + 0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28, + 0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28, + 0x28,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x2a,0x2a,0x2a,0x29,0x29,0x29,0x29, + 0x29,0x29,0x29,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x29,0x29,0x29,0x29,0x29,0x29, + 0x29,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x29,0x29,0x28,0x28,0x28,0x28,0x28,0x29, + 0x2b,0x2b,0x2a,0x2a,0x2a,0x2a,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2a,0x2a,0x2a, + 0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b, + 0x2b,0x2b,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2b, + 0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b, + 0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b, + 0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b, + 0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2c,0x2b,0x2b, + 0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b, + 0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0xc8,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1c, + 0x1c,0x1c,0x1c,0x1c,0x1b,0x1b,0x1c,0x1c,0x1c,0x1d,0x1d,0x1c,0x1c,0x1c,0x1c, + 0x1c,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d, + 0x1d,0x1d,0x1d,0x1e,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1e,0x1d,0x1d,0x1d, + 0x1e,0x1f,0x20,0x20,0x1f,0x1e,0x1e,0x1e,0x1e,0x1e,0x1f,0x1f,0x1f,0x1f,0x1f, + 0x1f,0x1f,0x1f,0x1f,0x1f,0x20,0x20,0x20,0x20,0x1f,0x1e,0x1e,0x1d,0x1d,0x1e, + 0x1f,0x1f,0x1f,0x1f,0x20,0x20,0x20,0x20,0x21,0x21,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x21, + 0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21, + 0x21,0x21,0x21,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x21,0x21,0x21,0x21,0x21, + 0x21,0x21,0x21,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x23,0x23, + 0x24,0x24,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23, + 0x22,0x22,0x22,0x23,0x23,0x24,0x24,0x24,0x24,0x24,0x23,0x22,0x22,0x24,0x24, + 0x24,0x24,0x24,0x25,0x25,0x25,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24, + 0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x25,0x25,0x25,0x24,0x24, + 0x24,0x24,0x24,0x24,0x24,0x25,0x25,0x25,0x26,0x26,0x25,0x25,0x25,0x25,0x26, + 0x26,0x26,0x26,0x26,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x26,0x26, + 0x26,0x26,0x26,0x26,0x27,0x28,0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x26,0x26, + 0x26,0x26,0x26,0x27,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x27,0x27, + 0x27,0x28,0x28,0x27,0x27,0x27,0x27,0x28,0x28,0x28,0x28,0x28,0x27,0x27,0x28, + 0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28, + 0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x29,0x28,0x28,0x28,0x28,0x28, + 0x28,0x28,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29, + 0x29,0x29,0x29,0x29,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a, + 0x29,0x29,0x29,0x29,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x29,0x29,0x29, + 0x29,0x29,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x29,0x29,0x29,0x29,0x29, + 0x29,0x29,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b, + 0x2b,0x2b,0x2a,0x2a,0x2a,0x2a,0x2a,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b, + 0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b, + 0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b, + 0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b, + 0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b, + 0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2c,0x2c, + 0x2c,0x2b,0x2b,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2b,0x2b,0x2b,0x2b, + 0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0xc8,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, + 0x1c,0x1c,0x1c,0x1d,0x1d,0x1d,0x1c,0x1c,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1c, + 0x1c,0x1c,0x1c,0x1d,0x1d,0x1d,0x1d,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1d, + 0x1d,0x1d,0x1d,0x1d,0x1e,0x1e,0x1f,0x1f,0x1f,0x20,0x20,0x1f,0x1f,0x1e,0x1e, + 0x1d,0x1d,0x1e,0x20,0x20,0x20,0x20,0x1f,0x1f,0x1e,0x1e,0x1f,0x1f,0x1f,0x1f, + 0x1f,0x1f,0x1f,0x1f,0x20,0x20,0x20,0x20,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f, + 0x1f,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x21,0x21,0x21,0x21,0x21,0x21,0x20,0x20,0x20,0x20,0x21, + 0x21,0x21,0x21,0x21,0x21,0x21,0x22,0x22,0x21,0x21,0x21,0x21,0x21,0x21,0x21, + 0x21,0x21,0x21,0x22,0x22,0x22,0x22,0x22,0x21,0x21,0x21,0x21,0x21,0x21,0x21, + 0x21,0x22,0x22,0x22,0x22,0x22,0x22,0x23,0x23,0x24,0x24,0x24,0x24,0x23,0x23, + 0x23,0x24,0x24,0x24,0x23,0x23,0x23,0x23,0x23,0x24,0x24,0x24,0x24,0x24,0x24, + 0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24, + 0x24,0x24,0x24,0x24,0x25,0x25,0x25,0x25,0x25,0x24,0x24,0x24,0x24,0x24,0x25, + 0x25,0x25,0x24,0x24,0x24,0x24,0x24,0x24,0x25,0x25,0x25,0x25,0x24,0x24,0x24, + 0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x24,0x24,0x25,0x26,0x26,0x26,0x25,0x25, + 0x25,0x26,0x26,0x26,0x26,0x26,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25, + 0x26,0x26,0x26,0x26,0x26,0x26,0x27,0x28,0x28,0x28,0x28,0x27,0x27,0x27,0x27, + 0x27,0x27,0x27,0x27,0x27,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x27, + 0x27,0x27,0x27,0x27,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28, + 0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28, + 0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x29,0x29,0x28,0x28, + 0x28,0x28,0x28,0x29,0x29,0x29,0x29,0x29,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a, + 0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2b,0x2b,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a, + 0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x29,0x2a,0x2a,0x2a,0x2a,0x2a,0x2b, + 0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a, + 0x2a,0x2a,0x29,0x2a,0x2a,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b, + 0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b, + 0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b, + 0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b, + 0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b, + 0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2b,0x2b,0x2b,0x2b,0x2b, + 0x2b,0x2b,0x2b,0x2b,0x2c,0x2c,0x2c,0x2c,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2c, + 0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c, + 0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0xc8,0x1b,0x1b,0x1b,0x1b, + 0x1b,0x1c,0x1c,0x1c,0x1c,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d, + 0x1d,0x1d,0x1c,0x1c,0x1c,0x1d,0x1d,0x1d,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e, + 0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1f,0x1f,0x1f,0x20,0x20,0x1f,0x1f, + 0x1e,0x1e,0x1e,0x1d,0x1e,0x20,0x20,0x20,0x20,0x1f,0x1f,0x1e,0x1e,0x1f,0x1f, + 0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x20,0x20,0x20,0x1f,0x1f,0x1f,0x1f,0x1f,0x20, + 0x20,0x20,0x20,0x20,0x21,0x21,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x21,0x21,0x21,0x21,0x21,0x21,0x20,0x20,0x20, + 0x20,0x21,0x21,0x21,0x21,0x21,0x21,0x22,0x22,0x22,0x22,0x21,0x21,0x21,0x21, + 0x21,0x21,0x21,0x21,0x22,0x22,0x22,0x22,0x22,0x21,0x21,0x21,0x21,0x21,0x21, + 0x21,0x21,0x22,0x22,0x22,0x22,0x22,0x23,0x23,0x24,0x24,0x24,0x24,0x24,0x24, + 0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24, + 0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24, + 0x24,0x24,0x24,0x24,0x25,0x26,0x25,0x25,0x25,0x25,0x25,0x25,0x24,0x24,0x24, + 0x24,0x25,0x25,0x25,0x25,0x25,0x25,0x24,0x24,0x25,0x25,0x25,0x25,0x24,0x24, + 0x24,0x24,0x25,0x25,0x25,0x25,0x25,0x25,0x24,0x24,0x25,0x25,0x27,0x27,0x27, + 0x26,0x26,0x26,0x27,0x27,0x27,0x26,0x26,0x26,0x25,0x25,0x25,0x25,0x25,0x25, + 0x25,0x25,0x26,0x26,0x26,0x26,0x26,0x26,0x27,0x28,0x28,0x28,0x28,0x27,0x27, + 0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28, + 0x27,0x27,0x27,0x27,0x27,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28, + 0x28,0x29,0x29,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28, + 0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x29,0x29, + 0x28,0x28,0x28,0x28,0x29,0x29,0x29,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a, + 0x2a,0x2a,0x2a,0x2a,0x2a,0x2b,0x2b,0x2b,0x2a,0x2b,0x2b,0x2a,0x2a,0x2a,0x2a, + 0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x29,0x29,0x2a,0x2b,0x2b,0x2b, + 0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2a, + 0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b, + 0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b, + 0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b, + 0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b, + 0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b, + 0x2b,0x2b,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2b,0x2b,0x2b, + 0x2b,0x2b,0x2b,0x2b,0x2b,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2b,0x2b,0x2b,0x2b, + 0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c, + 0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0xc8,0x1c,0x1c, + 0x1c,0x1c,0x1c,0x1c,0x1c,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d, + 0x1d,0x1d,0x1d,0x1d,0x1d,0x1c,0x1c,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d, + 0x1e,0x1e,0x1e,0x1f,0x1f,0x1f,0x1f,0x1f,0x1e,0x1d,0x1e,0x1f,0x1f,0x1f,0x1f, + 0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x20,0x20,0x20,0x1f,0x1e,0x1d,0x1d, + 0x1e,0x1e,0x1e,0x1e,0x1e,0x1f,0x1f,0x20,0x20,0x20,0x20,0x1f,0x1f,0x1f,0x1f, + 0x20,0x20,0x20,0x21,0x21,0x21,0x21,0x21,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x20, + 0x20,0x20,0x20,0x21,0x21,0x22,0x22,0x22,0x22,0x22,0x23,0x23,0x23,0x22,0x22, + 0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x21,0x21,0x21,0x21, + 0x21,0x21,0x21,0x22,0x22,0x22,0x22,0x23,0x24,0x23,0x23,0x24,0x24,0x24,0x24, + 0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24, + 0x24,0x24,0x24,0x24,0x24,0x24,0x25,0x25,0x24,0x24,0x24,0x24,0x24,0x24,0x25, + 0x24,0x24,0x24,0x24,0x25,0x25,0x25,0x25,0x25,0x25,0x24,0x24,0x25,0x25,0x25, + 0x25,0x26,0x25,0x25,0x25,0x25,0x25,0x25,0x24,0x24,0x24,0x24,0x24,0x24,0x24, + 0x24,0x24,0x24,0x24,0x24,0x25,0x25,0x25,0x25,0x24,0x25,0x25,0x25,0x26,0x28, + 0x28,0x27,0x26,0x26,0x26,0x27,0x27,0x27,0x27,0x26,0x26,0x26,0x26,0x26,0x25, + 0x25,0x25,0x25,0x25,0x26,0x26,0x26,0x26,0x26,0x26,0x27,0x28,0x28,0x28,0x27, + 0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x27, + 0x27,0x27,0x27,0x27,0x27,0x28,0x28,0x28,0x28,0x28,0x29,0x29,0x2a,0x2a,0x2a, + 0x29,0x28,0x29,0x2a,0x2a,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28, + 0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x29,0x29,0x29,0x29,0x29,0x28,0x28,0x28, + 0x28,0x28,0x29,0x29,0x29,0x29,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2b,0x2b,0x2b, + 0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2b,0x2b,0x2b,0x2b,0x2b,0x29,0x29, + 0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2b,0x2a,0x2b,0x2b,0x2b, + 0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b, + 0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2a,0x2a,0x2b,0x2b,0x2b,0x2b,0x2b, + 0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b, + 0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b, + 0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b, + 0x2b,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2b, + 0x2b,0x2b,0x2b,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2d,0x2d,0x2d,0x2c,0x2c,0x2c, + 0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c, + 0x2c,0x2c,0x2c,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d, + 0x2d,0x2d,0x2d,0x2d,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2d,0x2d,0x2d,0xc8, + 0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1d,0x1d,0x1d,0x1e,0x1d,0x1e,0x1d,0x1d, + 0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1c,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d, + 0x1d,0x1d,0x1d,0x1e,0x1e,0x1e,0x1f,0x1f,0x1f,0x1f,0x1d,0x1d,0x1e,0x1e,0x1f, + 0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x20,0x20,0x1f,0x1e,0x1f,0x20,0x20,0x1f,0x1e, + 0x1d,0x1d,0x1e,0x1e,0x1e,0x1e,0x1e,0x20,0x20,0x20,0x20,0x20,0x20,0x1f,0x1f, + 0x1f,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x21,0x21,0x21,0x21,0x21,0x21,0x21, + 0x21,0x21,0x20,0x20,0x21,0x21,0x22,0x22,0x22,0x22,0x22,0x22,0x23,0x23,0x23, + 0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x21,0x21, + 0x21,0x21,0x21,0x21,0x22,0x22,0x22,0x23,0x23,0x24,0x24,0x24,0x23,0x24,0x24, + 0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24, + 0x24,0x24,0x24,0x24,0x24,0x24,0x25,0x26,0x26,0x26,0x25,0x24,0x24,0x24,0x24, + 0x24,0x25,0x25,0x25,0x25,0x25,0x26,0x25,0x25,0x25,0x25,0x25,0x25,0x24,0x25, + 0x25,0x25,0x26,0x26,0x25,0x24,0x24,0x25,0x25,0x24,0x24,0x24,0x24,0x24,0x24, + 0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x25,0x25,0x26,0x25,0x25,0x25,0x25, + 0x26,0x28,0x28,0x28,0x28,0x27,0x26,0x26,0x27,0x27,0x27,0x27,0x27,0x26,0x26, + 0x26,0x25,0x25,0x25,0x25,0x26,0x26,0x26,0x26,0x26,0x26,0x26,0x27,0x28,0x28, + 0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x27, + 0x27,0x27,0x27,0x27,0x27,0x28,0x28,0x28,0x28,0x28,0x28,0x29,0x2a,0x2a,0x2a, + 0x2a,0x2a,0x2a,0x2a,0x2a,0x2b,0x2a,0x28,0x28,0x28,0x29,0x28,0x28,0x28,0x28, + 0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x29,0x29,0x29,0x29,0x29,0x28, + 0x28,0x28,0x28,0x29,0x29,0x29,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2b,0x2b, + 0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b, + 0x2a,0x29,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2b,0x2b,0x2b,0x2b, + 0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2c,0x2c,0x2c,0x2c,0x2b,0x2b,0x2c, + 0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2a,0x2a,0x2b,0x2b,0x2b, + 0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b, + 0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b, + 0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b, + 0x2b,0x2b,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c, + 0x2c,0x2c,0x2b,0x2b,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2d,0x2d,0x2d,0x2c, + 0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c, + 0x2c,0x2c,0x2c,0x2c,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d, + 0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2d,0x2d,0x2d, + 0x2d,0xc8,0x1d,0x1d,0x1c,0x1c,0x1d,0x1d,0x1d,0x1d,0x1d,0x1e,0x1e,0x1e,0x1e, + 0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1e,0x1e,0x1d, + 0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1e,0x1e,0x1e,0x1e,0x1e,0x1d,0x1d,0x1e, + 0x1e,0x1f,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x1e,0x1f,0x1f,0x20, + 0x20,0x1f,0x1e,0x1e,0x1f,0x1f,0x1f,0x1e,0x1f,0x20,0x20,0x20,0x20,0x20,0x1f, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21, + 0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22, + 0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22, + 0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x24,0x24,0x24,0x24,0x24,0x24,0x24, + 0x24,0x24,0x25,0x25,0x25,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24, + 0x24,0x24,0x24,0x25,0x26,0x26,0x26,0x26,0x27,0x27,0x28,0x28,0x27,0x25,0x25, + 0x25,0x25,0x26,0x27,0x27,0x26,0x26,0x25,0x26,0x26,0x26,0x25,0x25,0x25,0x25, + 0x25,0x25,0x25,0x25,0x25,0x25,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24, + 0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x25,0x26,0x26,0x26,0x26, + 0x26,0x27,0x28,0x28,0x28,0x28,0x28,0x28,0x27,0x27,0x28,0x27,0x27,0x28,0x28, + 0x28,0x28,0x27,0x26,0x26,0x26,0x26,0x26,0x26,0x27,0x27,0x27,0x27,0x27,0x27, + 0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x28,0x28, + 0x28,0x27,0x27,0x27,0x27,0x27,0x28,0x28,0x28,0x28,0x28,0x29,0x29,0x29,0x29, + 0x2a,0x2b,0x2b,0x2b,0x2c,0x2b,0x2a,0x2a,0x2a,0x29,0x28,0x29,0x29,0x29,0x29, + 0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x29,0x2a,0x2a,0x29, + 0x29,0x29,0x29,0x29,0x29,0x29,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2b,0x2b,0x2b, + 0x2b,0x2b,0x2c,0x2c,0x2b,0x2c,0x2c,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b, + 0x2b,0x2b,0x2a,0x2a,0x2b,0x2a,0x2a,0x2a,0x2a,0x2a,0x2b,0x2b,0x2b,0x2b,0x2c, + 0x2b,0x2b,0x2b,0x2c,0x2c,0x2c,0x2c,0x2c,0x2d,0x2c,0x2d,0x2d,0x2d,0x2d,0x2c, + 0x2c,0x2c,0x2c,0x2c,0x2c,0x2b,0x2b,0x2b,0x2b,0x2c,0x2b,0x2b,0x2a,0x2a,0x2b, + 0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b, + 0x2b,0x2b,0x2b,0x2b,0x2b,0x2c,0x2c,0x2c,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b, + 0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c, + 0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c, + 0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2d,0x2d,0x2d,0x2d,0x2d, + 0x2d,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2d,0x2d,0x2d,0x2d, + 0x2d,0x2c,0x2c,0x2c,0x2c,0x2c,0x2d,0x2d,0x2e,0x2e,0x2e,0x2e,0x2e,0x2d,0x2d, + 0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d, + 0x2d,0x2d,0x2d,0xc8,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1e,0x1e, + 0x1e,0x1e,0x1d,0x1c,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1e,0x1e, + 0x1f,0x1f,0x1f,0x1f,0x1f,0x1e,0x1e,0x1e,0x1e,0x1d,0x1d,0x1d,0x1d,0x1d,0x1e, + 0x1e,0x1e,0x1f,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x1f,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x22,0x21,0x20,0x20, + 0x1f,0x1f,0x20,0x20,0x20,0x21,0x21,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x21,0x22,0x22,0x22,0x22,0x21,0x21,0x21,0x21,0x21,0x21, + 0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x22,0x22,0x22,0x21,0x21,0x21, + 0x21,0x21,0x21,0x21,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22, + 0x22,0x22,0x22,0x23,0x23,0x23,0x23,0x23,0x23,0x24,0x24,0x24,0x24,0x24,0x24, + 0x24,0x24,0x25,0x27,0x28,0x28,0x28,0x27,0x26,0x26,0x26,0x26,0x25,0x25,0x25, + 0x26,0x26,0x26,0x26,0x27,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x29,0x29,0x28, + 0x28,0x28,0x28,0x28,0x29,0x2a,0x29,0x28,0x28,0x28,0x27,0x27,0x26,0x26,0x27, + 0x27,0x26,0x26,0x26,0x26,0x25,0x24,0x25,0x26,0x26,0x26,0x26,0x26,0x26,0x26, + 0x26,0x25,0x24,0x24,0x24,0x24,0x25,0x26,0x26,0x26,0x26,0x26,0x26,0x26,0x26, + 0x28,0x28,0x28,0x28,0x28,0x2a,0x2b,0x2a,0x29,0x29,0x29,0x28,0x28,0x28,0x28, + 0x28,0x28,0x28,0x28,0x28,0x28,0x27,0x27,0x27,0x27,0x27,0x28,0x28,0x28,0x28, + 0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28, + 0x29,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x29,0x2a,0x2a,0x2a,0x2a, + 0x2b,0x2a,0x2b,0x2b,0x2c,0x2d,0x2e,0x2e,0x2c,0x2b,0x2b,0x2a,0x2a,0x29,0x29, + 0x29,0x29,0x29,0x28,0x28,0x28,0x29,0x29,0x29,0x28,0x28,0x28,0x29,0x2a,0x2a, + 0x2a,0x2a,0x29,0x29,0x2a,0x2a,0x2a,0x2a,0x2b,0x2b,0x2a,0x2a,0x2b,0x2b,0x2b, + 0x2b,0x2b,0x2c,0x2d,0x2e,0x2e,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2c,0x2d,0x2c, + 0x2b,0x2b,0x2b,0x2b,0x2a,0x2a,0x2b,0x2b,0x2b,0x2a,0x2b,0x2b,0x2b,0x2b,0x2c, + 0x2c,0x2c,0x2c,0x2d,0x2d,0x2d,0x2d,0x2e,0x2f,0x2e,0x2f,0x2f,0x2f,0x2f,0x2f, + 0x2f,0x2e,0x2e,0x2e,0x2d,0x2c,0x2c,0x2c,0x2c,0x2b,0x2b,0x2c,0x2c,0x2b,0x2a, + 0x2a,0x2b,0x2b,0x2b,0x2c,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b, + 0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c, + 0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2b,0x2b,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c, + 0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c, + 0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2d,0x2d,0x2d,0x2d, + 0x2d,0x2d,0x2d,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2d,0x2d, + 0x2d,0x2d,0x2d,0x2d,0x2d,0x2c,0x2c,0x2d,0x2d,0x2d,0x2e,0x2e,0x2e,0x2e,0x2e, + 0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2d,0x2d,0x2d,0x2d,0x2d,0x2c,0x2c, + 0x2d,0x2d,0x2d,0x2d,0x2d,0xc8,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d, + 0x1e,0x1e,0x1e,0x1e,0x1d,0x1c,0x1c,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d, + 0x1e,0x1f,0x1f,0x20,0x20,0x20,0x1f,0x1f,0x1e,0x1e,0x1e,0x1d,0x1d,0x1d,0x1d, + 0x1d,0x1e,0x1f,0x1f,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x21,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x21,0x22,0x21, + 0x20,0x1f,0x1f,0x1f,0x20,0x20,0x21,0x21,0x21,0x21,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x21,0x21,0x22,0x22,0x22,0x21,0x21,0x21,0x21, + 0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x22,0x22,0x22,0x21, + 0x21,0x21,0x21,0x21,0x21,0x21,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22, + 0x22,0x22,0x22,0x22,0x23,0x23,0x23,0x23,0x23,0x23,0x24,0x24,0x24,0x24,0x24, + 0x24,0x24,0x25,0x26,0x28,0x28,0x29,0x29,0x2a,0x29,0x28,0x28,0x28,0x27,0x27, + 0x27,0x27,0x27,0x28,0x28,0x29,0x29,0x29,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2b, + 0x2b,0x2a,0x2a,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2a,0x29,0x29,0x28,0x28,0x28, + 0x28,0x27,0x28,0x28,0x28,0x26,0x25,0x24,0x24,0x24,0x26,0x27,0x27,0x27,0x27, + 0x27,0x27,0x27,0x27,0x26,0x26,0x26,0x26,0x26,0x26,0x26,0x26,0x26,0x26,0x26, + 0x27,0x27,0x28,0x28,0x28,0x29,0x2a,0x2b,0x2b,0x2b,0x2b,0x2b,0x2a,0x2a,0x29, + 0x29,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x27,0x27,0x27,0x27,0x27,0x28,0x28, + 0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28, + 0x28,0x29,0x29,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x29,0x2a,0x2b,0x2b, + 0x2b,0x2c,0x2b,0x2b,0x2b,0x2d,0x2f,0x2f,0x2f,0x2f,0x2e,0x2c,0x2b,0x2b,0x2a, + 0x2a,0x2a,0x29,0x29,0x29,0x29,0x29,0x29,0x2a,0x2a,0x2a,0x2a,0x29,0x2a,0x2b, + 0x2b,0x2b,0x2b,0x2b,0x2b,0x2a,0x2a,0x2a,0x2a,0x2a,0x2b,0x2b,0x2b,0x2b,0x2b, + 0x2b,0x2c,0x2c,0x2d,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2e,0x2f, + 0x2f,0x2e,0x2d,0x2d,0x2c,0x2b,0x2b,0x2a,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b, + 0x2b,0x2c,0x2c,0x2d,0x2d,0x2d,0x2e,0x2f,0x2f,0x2f,0x2f,0x2f,0x30,0x30,0x31, + 0x31,0x32,0x31,0x30,0x2f,0x2f,0x2f,0x2f,0x2e,0x2d,0x2c,0x2c,0x2c,0x2c,0x2c, + 0x2c,0x2b,0x2b,0x2b,0x2b,0x2c,0x2c,0x2c,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b, + 0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c, + 0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2b,0x2b,0x2c,0x2c,0x2c,0x2c, + 0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c, + 0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2d,0x2d,0x2d, + 0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c, + 0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2c,0x2c,0x2d,0x2d,0x2d,0x2e,0x2e,0x2e, + 0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2d,0x2d,0x2d,0x2d,0x2d, + 0x2c,0x2c,0x2d,0x2d,0x2d,0x2d,0x2d,0xc8,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d, + 0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1e,0x1e,0x1e,0x1d,0x1d, + 0x1d,0x1d,0x1d,0x1e,0x1e,0x1e,0x1d,0x1d,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e, + 0x1e,0x1e,0x1e,0x1e,0x1f,0x20,0x20,0x20,0x20,0x20,0x1f,0x1f,0x20,0x20,0x20, + 0x20,0x20,0x20,0x1f,0x1f,0x1f,0x1f,0x1f,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x21,0x21,0x21,0x22,0x22,0x21,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x21,0x21, + 0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x22,0x21,0x20,0x20,0x21, + 0x21,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x23,0x23, + 0x23,0x23,0x23,0x23,0x23,0x23,0x24,0x24,0x24,0x23,0x23,0x23,0x24,0x24,0x24, + 0x24,0x25,0x25,0x27,0x28,0x28,0x29,0x29,0x2a,0x2a,0x2b,0x2b,0x2b,0x2a,0x2a, + 0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2c,0x2c,0x2d,0x2d,0x2d,0x2d,0x2c,0x2c,0x2d, + 0x2d,0x2c,0x2c,0x2d,0x2e,0x2f,0x2f,0x2f,0x2e,0x2e,0x2d,0x2d,0x2d,0x2d,0x2b, + 0x2a,0x29,0x29,0x28,0x28,0x27,0x27,0x26,0x26,0x26,0x26,0x26,0x26,0x26,0x27, + 0x27,0x27,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x27,0x26,0x26,0x26,0x27, + 0x28,0x28,0x28,0x28,0x28,0x29,0x2a,0x2b,0x2b,0x2b,0x2b,0x2b,0x2c,0x2c,0x2c, + 0x2b,0x2c,0x2b,0x2b,0x2b,0x29,0x29,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28, + 0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28, + 0x28,0x28,0x28,0x28,0x29,0x29,0x29,0x29,0x29,0x29,0x2a,0x2a,0x29,0x29,0x29, + 0x2a,0x2b,0x2c,0x2d,0x2e,0x2f,0x30,0x30,0x30,0x31,0x31,0x31,0x2f,0x2d,0x2c, + 0x2c,0x2c,0x2b,0x2b,0x2b,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2b, + 0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2a,0x2a,0x2a,0x2b,0x2c,0x2b,0x2b, + 0x2b,0x2d,0x2d,0x2e,0x2f,0x2f,0x30,0x32,0x32,0x32,0x33,0x33,0x33,0x32,0x32, + 0x31,0x31,0x30,0x30,0x2f,0x2f,0x2e,0x2e,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b, + 0x2b,0x2b,0x2b,0x2c,0x2d,0x2d,0x2c,0x2e,0x2f,0x2f,0x30,0x31,0x32,0x32,0x32, + 0x33,0x33,0x33,0x33,0x34,0x34,0x33,0x32,0x32,0x30,0x2f,0x2e,0x2e,0x2c,0x2c, + 0x2d,0x2c,0x2c,0x2d,0x2c,0x2c,0x2d,0x2d,0x2c,0x2c,0x2b,0x2b,0x2b,0x2b,0x2b, + 0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2c,0x2c,0x2c,0x2c,0x2c,0x2d,0x2c, + 0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c, + 0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d, + 0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2c,0x2c,0x2d,0x2d,0x2d,0x2e, + 0x2e,0x2e,0x2e,0x2e,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d, + 0x2d,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2d,0x2d,0x2d,0x2d,0x2d,0x2e,0x2e,0x2e, + 0x2e,0x2e,0x2d,0x2d,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2e,0x2d,0x2d,0x2d, + 0x2d,0x2d,0x2d,0x2e,0x2e,0x2d,0x2d,0x2d,0x2d,0xc8,0x1d,0x1d,0x1d,0x1d,0x1d, + 0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1e,0x1e,0x1f,0x1e, + 0x1e,0x1d,0x1d,0x1d,0x1d,0x1e,0x1e,0x1d,0x1d,0x1d,0x1e,0x1e,0x1e,0x1e,0x1e, + 0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x20,0x20,0x20,0x20,0x20,0x1f,0x1f,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x1f,0x1f,0x1e,0x1e,0x1f,0x1f,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x21,0x21,0x22,0x22, + 0x21,0x21,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x22,0x22,0x21,0x20, + 0x20,0x20,0x21,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22, + 0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x24,0x24,0x24,0x23,0x23,0x24,0x24, + 0x24,0x24,0x25,0x25,0x27,0x28,0x2a,0x2a,0x2b,0x2b,0x2c,0x2c,0x2d,0x2d,0x2d, + 0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2f,0x2f,0x2f,0x2f,0x2f,0x30,0x30, + 0x2f,0x30,0x2f,0x2f,0x30,0x30,0x32,0x32,0x33,0x32,0x32,0x31,0x31,0x30,0x30, + 0x2f,0x2e,0x2c,0x2b,0x2a,0x29,0x29,0x28,0x28,0x28,0x27,0x26,0x26,0x26,0x27, + 0x27,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x27,0x27, + 0x27,0x28,0x28,0x28,0x28,0x29,0x2a,0x2b,0x2b,0x2c,0x2d,0x2d,0x2e,0x2e,0x2f, + 0x2f,0x2f,0x2f,0x2e,0x2d,0x2c,0x2b,0x2b,0x2a,0x28,0x28,0x28,0x28,0x28,0x28, + 0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x29,0x29,0x28,0x28,0x28,0x28,0x28,0x28, + 0x28,0x28,0x28,0x28,0x29,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x29, + 0x2a,0x2b,0x2b,0x2c,0x2d,0x2f,0x30,0x31,0x32,0x33,0x33,0x33,0x33,0x32,0x31, + 0x30,0x2f,0x2e,0x2d,0x2c,0x2b,0x2b,0x2b,0x2a,0x2a,0x2a,0x2a,0x2a,0x2b,0x2b, + 0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2c, + 0x2c,0x2d,0x2d,0x2e,0x2f,0x2f,0x30,0x31,0x32,0x34,0x35,0x35,0x36,0x36,0x36, + 0x36,0x36,0x34,0x34,0x33,0x32,0x32,0x31,0x2f,0x2f,0x2e,0x2b,0x2b,0x2b,0x2b, + 0x2b,0x2b,0x2b,0x2b,0x2b,0x2c,0x2d,0x2e,0x2e,0x2f,0x30,0x32,0x32,0x33,0x35, + 0x35,0x35,0x36,0x36,0x36,0x36,0x37,0x36,0x36,0x36,0x34,0x33,0x32,0x30,0x2f, + 0x2f,0x2e,0x2d,0x2d,0x2c,0x2d,0x2d,0x2c,0x2d,0x2d,0x2c,0x2c,0x2b,0x2b,0x2b, + 0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2c,0x2c,0x2c,0x2c,0x2c,0x2d, + 0x2d,0x2d,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c, + 0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d, + 0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d, + 0x2d,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d, + 0x2d,0x2d,0x2d,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2d,0x2d,0x2d,0x2d,0x2e, + 0x2e,0x2e,0x2e,0x2e,0x2d,0x2d,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2e,0x2e, + 0x2d,0x2d,0x2d,0x2d,0x2e,0x2e,0x2e,0x2e,0x2d,0x2d,0x2d,0xc8,0x1e,0x1e,0x1d, + 0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1e,0x1e,0x1f, + 0x1f,0x1f,0x1e,0x1e,0x1e,0x1e,0x1e,0x1f,0x1f,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e, + 0x1e,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1e,0x1e,0x20,0x20,0x20,0x20,0x20,0x1f, + 0x1f,0x20,0x20,0x20,0x20,0x21,0x21,0x20,0x20,0x1f,0x1e,0x1e,0x1e,0x1e,0x1e, + 0x1f,0x1f,0x1f,0x1f,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x21, + 0x21,0x21,0x21,0x21,0x21,0x20,0x20,0x20,0x20,0x21,0x21,0x21,0x20,0x20,0x20, + 0x20,0x20,0x21,0x21,0x21,0x21,0x21,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22, + 0x21,0x21,0x20,0x20,0x21,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22, + 0x22,0x22,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23, + 0x24,0x24,0x24,0x25,0x25,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2e,0x2f,0x30,0x30, + 0x32,0x32,0x31,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x31,0x32,0x32,0x32,0x33, + 0x33,0x33,0x33,0x34,0x33,0x33,0x33,0x35,0x37,0x37,0x38,0x37,0x37,0x36,0x36, + 0x34,0x34,0x32,0x31,0x2f,0x2e,0x2c,0x2b,0x2b,0x2a,0x2a,0x29,0x29,0x28,0x28, + 0x28,0x28,0x28,0x29,0x29,0x2a,0x2a,0x2a,0x28,0x28,0x28,0x29,0x29,0x29,0x29, + 0x28,0x28,0x28,0x28,0x29,0x2a,0x2b,0x2b,0x2b,0x2d,0x2f,0x2f,0x2f,0x30,0x31, + 0x32,0x32,0x32,0x32,0x32,0x30,0x2f,0x2e,0x2c,0x2c,0x2b,0x2b,0x2b,0x2a,0x2a, + 0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x29,0x29,0x29,0x29,0x29,0x29, + 0x29,0x29,0x29,0x29,0x2a,0x2a,0x2a,0x2a,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b, + 0x2b,0x2b,0x2b,0x2c,0x2d,0x2e,0x30,0x31,0x32,0xc8,0xc8,0xc8,0xc8,0xc8,0xc4, + 0x36,0x34,0x32,0x31,0x2f,0x2e,0x2d,0x2c,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b, + 0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b, + 0x2b,0x2d,0x2d,0x2e,0x2f,0x2f,0x30,0x31,0x32,0x34,0x35,0x36,0x38,0x39,0x3a, + 0x3a,0x3a,0x3a,0x3a,0x39,0x38,0x37,0x35,0x34,0x32,0x32,0x30,0x2f,0x2e,0x2c, + 0x2c,0x2c,0x2b,0x2b,0x2b,0x2b,0x2c,0x2c,0x2d,0x2e,0x2f,0x2f,0x32,0x33,0x35, + 0x36,0x38,0x38,0x39,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x39,0x37,0x36,0x34, + 0x33,0x31,0x30,0x2f,0x2e,0x2d,0x2d,0x2c,0x2c,0x2d,0x2c,0x2c,0x2c,0x2c,0x2c, + 0x2b,0x2b,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2d,0x2d, + 0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d, + 0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2e,0x2e,0x2e, + 0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d, + 0x2d,0x2d,0x2d,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2d,0x2d,0x2d,0x2d, + 0x2d,0x2d,0x2d,0x2d,0x2d,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2d,0x2d, + 0x2d,0x2e,0x2e,0x2f,0x2f,0x2e,0x2d,0x2d,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f, + 0x2e,0x2e,0x2e,0x2d,0x2d,0x2e,0x2e,0x2e,0x2e,0x2e,0x2d,0x2d,0x2d,0xc8,0x1e, + 0x1e,0x1d,0x1d,0x1d,0x1d,0x1c,0x1d,0x1d,0x1d,0x1d,0x1e,0x1e,0x1d,0x1d,0x1d, + 0x1e,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x20,0x1f,0x1f,0x1f,0x1f, + 0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1e,0x1e,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x21,0x21,0x21,0x20,0x20,0x20,0x1f,0x1f, + 0x1e,0x1e,0x1e,0x1e,0x1f,0x1f,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x22,0x22,0x22,0x21, + 0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x22,0x22,0x22,0x22,0x22,0x22,0x22, + 0x22,0x22,0x21,0x21,0x21,0x21,0x22,0x22,0x23,0x23,0x23,0x23,0x23,0x23,0x23, + 0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23, + 0x23,0x24,0x24,0x24,0x25,0x25,0x26,0x27,0x28,0x2a,0x55,0xc8,0xc8,0xc8,0xc8, + 0xc8,0xc8,0xc1,0x38,0x35,0x35,0x34,0x34,0x34,0x34,0x34,0x55,0xc7,0xc8,0xc8, + 0xc8,0xc8,0xc8,0xae,0x37,0x37,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8, + 0xc8,0xc8,0xc8,0xc8,0xc8,0x35,0x32,0x31,0x2f,0x2e,0x2c,0x2c,0x2b,0x2b,0x2b, + 0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2a,0x2a,0x2a,0x2b,0x2b, + 0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2c,0x2e,0x2f,0x30,0x32,0xc4, + 0xc8,0xc8,0xc8,0xc8,0xc8,0x36,0x36,0x33,0x32,0x30,0x2f,0x2e,0x2c,0x2c,0x2b, + 0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2a, + 0x2a,0x29,0x29,0x29,0x29,0x2b,0x2b,0x2b,0x2b,0x2b,0x2c,0x2c,0x2c,0x2c,0x2c, + 0x2c,0x2c,0x2c,0x2d,0x2d,0x2d,0x2f,0x30,0x32,0x33,0x36,0xc8,0xc8,0xc8,0xc8, + 0xc8,0xc4,0x39,0x36,0x35,0x33,0x31,0x30,0x2f,0x2d,0x2c,0x2b,0x2b,0x2b,0x2b, + 0x2b,0x2b,0x2c,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2c,0x2c,0x2c,0x2d,0x2d, + 0x2d,0x2d,0x2e,0x2e,0x2f,0x2f,0x30,0x31,0x32,0x33,0x42,0x7b,0xa3,0xb7,0xc3, + 0xc7,0xc8,0xc8,0xc7,0xc4,0xb6,0x8e,0x45,0x3a,0x39,0x38,0x36,0x34,0x32,0x30, + 0x2f,0x2f,0x2d,0x2d,0x2d,0x2b,0x2b,0x2c,0x2c,0x2d,0x2e,0x2f,0x30,0x32,0x34, + 0x36,0x38,0x46,0x95,0xb9,0xc5,0xc8,0xc8,0xc8,0xc5,0xba,0x95,0x48,0x3b,0x3a, + 0x39,0x36,0x35,0x33,0x32,0x30,0x2f,0x2e,0x2d,0x2c,0x2c,0x2d,0x2d,0x2c,0x2c, + 0x2c,0x2c,0x2c,0x2c,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d, + 0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d, + 0x2d,0x2d,0x2d,0x2d,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2f, + 0x2f,0x2e,0x2e,0x2e,0x2e,0x2e,0x2d,0x2d,0x2d,0x2d,0x2d,0x2e,0x2e,0x2e,0x2e, + 0x2d,0x2d,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2d,0x2d, + 0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2e,0x2e,0x2e,0x2e,0x2f,0x2f,0x2f,0x2e,0x2e, + 0x2e,0x2e,0x2e,0x2e,0x2f,0x2f,0x2f,0x2e,0x2e,0x2e,0x2f,0x2f,0x2f,0x2f,0x2f, + 0x2f,0x2f,0x2f,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2d,0x2d,0x2d,0x2e, + 0xc8,0x1e,0x1e,0x1d,0x1d,0x1d,0x1c,0x1c,0x1d,0x1d,0x1d,0x1e,0x1e,0x1e,0x1e, + 0x1d,0x1d,0x1e,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x20,0x20,0x1f,0x1f, + 0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1e,0x1e,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x21,0x21,0x21,0x21,0x20, + 0x20,0x20,0x1f,0x1f,0x1e,0x1e,0x1f,0x1f,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x22,0x22, + 0x22,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x22,0x22,0x22,0x22,0x22,0x22, + 0x22,0x22,0x22,0x22,0x21,0x21,0x21,0x22,0x22,0x23,0x23,0x23,0x23,0x23,0x23, + 0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23, + 0x23,0x23,0x23,0x24,0x24,0x24,0x25,0x25,0x27,0x28,0x29,0x2b,0x2d,0x8f,0xc8, + 0xc8,0xc8,0xc8,0xc8,0xc8,0xa0,0x3a,0x3a,0x39,0x39,0x39,0x39,0x3a,0xbe,0xc8, + 0xc8,0xc8,0xc8,0xc8,0xc3,0x42,0x3a,0x3a,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8, + 0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0x38,0x35,0x33,0x32,0x2f,0x2f,0x2f,0x2f, + 0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2d,0x2e,0x2e,0x2d,0x2d,0x2d,0x2c,0x2c,0x2c, + 0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2f,0x2f,0x30,0x32,0x33, + 0x35,0xc4,0xc8,0xc8,0xc8,0xc8,0xc8,0x3a,0x39,0x37,0x36,0x33,0x32,0x30,0x2f, + 0x2e,0x2d,0x2c,0x2c,0x2c,0x2d,0x2d,0x2e,0x2e,0x2e,0x2e,0x2d,0x2d,0x2c,0x2c, + 0x2c,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2c,0x2c,0x2d,0x2d,0x2d,0x2e,0x2e,0x2f, + 0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x30,0x31,0x32,0x35,0x36,0x39,0xc8,0xc8, + 0xc8,0xc8,0xc8,0xc4,0x3b,0x3a,0x38,0x36,0x33,0x31,0x2f,0x2e,0x2d,0x2c,0x2c, + 0x2c,0x2c,0x2d,0x2d,0x2e,0x2e,0x2e,0x2e,0x2f,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e, + 0x2e,0x2f,0x2f,0x2f,0x2f,0x2f,0x30,0x31,0x32,0x32,0x34,0x82,0xc8,0xc8,0xc8, + 0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc6,0x8b,0x3d,0x3b,0x39,0x36, + 0x35,0x32,0x30,0x2f,0x2f,0x2d,0x2d,0x2d,0x2c,0x2c,0x2c,0x2e,0x2f,0x30,0x32, + 0x35,0x37,0x3a,0x8d,0xc7,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc7, + 0x8d,0x3e,0x3c,0x3a,0x38,0x36,0x33,0x32,0x2f,0x2f,0x2d,0x2d,0x2d,0x2d,0x2d, + 0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d, + 0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d, + 0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e, + 0x2f,0x2f,0x2f,0x2f,0x2e,0x2e,0x2e,0x2e,0x2e,0x2d,0x2d,0x2d,0x2e,0x2e,0x2e, + 0x2e,0x2e,0x2d,0x2d,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e, + 0x2e,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2e,0x2e,0x2e,0x2e,0x2e,0x2f,0x2f,0x2f, + 0x2f,0x2e,0x2e,0x2e,0x2e,0x2f,0x2f,0x2f,0x2f,0x2e,0x2e,0x2e,0x2f,0x2f,0x2f, + 0x2f,0x2f,0x2f,0x2f,0x2f,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2d, + 0x2e,0x2e,0xc8,0x1e,0x1e,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1e,0x1e,0x1e, + 0x1f,0x1f,0x1e,0x1e,0x1e,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x21, + 0x22,0x22,0x21,0x21,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x21,0x21,0x21,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x21,0x21,0x21,0x21, + 0x22,0x22,0x22,0x22,0x21,0x21,0x21,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22, + 0x22,0x22,0x22,0x22,0x22,0x23,0x22,0x22,0x22,0x22,0x23,0x23,0x23,0x23,0x23, + 0x23,0x24,0x24,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x24,0x24, + 0x24,0x23,0x23,0x23,0x23,0x24,0x24,0x24,0x25,0x25,0x27,0x28,0x2a,0x2c,0x2f, + 0x31,0xb9,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0x6a,0x3e,0x3e,0x3d,0x3e,0x3e,0x9d, + 0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0x67,0x3e,0x3e,0x3e,0xc8,0xc8,0xc8,0xc8,0xc8, + 0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0x3b,0x38,0x36,0x35,0x32,0x32, + 0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x2f, + 0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x30,0x32,0x33, + 0x36,0x38,0x3a,0xc4,0xc8,0xc8,0xc8,0xc8,0xc8,0x3f,0x3d,0x3c,0x39,0x36,0x35, + 0x32,0x31,0x30,0x2f,0x2f,0x2f,0x2f,0x2f,0x30,0x30,0x30,0x30,0x30,0x30,0x2f, + 0x2f,0x2f,0x2e,0x2e,0x2c,0x2c,0x2c,0x2c,0x2c,0x2d,0x2f,0x2f,0x2f,0x30,0x30, + 0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x32,0x33,0x35,0x36,0x3a,0x3c, + 0xc8,0xc8,0xc8,0xc8,0xc8,0xc4,0x3f,0x3d,0x3a,0x38,0x35,0x32,0x30,0x2f,0x2e, + 0x2e,0x2e,0x2e,0x2f,0x2f,0x2f,0x2f,0x30,0x31,0x31,0x31,0x31,0x31,0x2f,0x2f, + 0x2f,0x2f,0x31,0x31,0x31,0x32,0x31,0x31,0x33,0x34,0x35,0x36,0x37,0x93,0xc8, + 0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0x9b,0x3f, + 0x3c,0x3a,0x37,0x34,0x32,0x30,0x2f,0x2e,0x2d,0x2d,0x2d,0x2d,0x2f,0x2f,0x31, + 0x32,0x35,0x37,0x3b,0x9d,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8, + 0xc8,0xc8,0xc8,0x9d,0x3f,0x3d,0x3a,0x38,0x36,0x33,0x31,0x2f,0x2f,0x2e,0x2e, + 0x2d,0x2d,0x2d,0x2d,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2d,0x2d,0x2d,0x2d, + 0x2c,0x2c,0x2c,0x2c,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d, + 0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e, + 0x2e,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e, + 0x2e,0x2e,0x2e,0x2f,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e, + 0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2f,0x2f,0x2f,0x2f, + 0x2f,0x2f,0x2f,0x2f,0x2e,0x2e,0x2e,0x2f,0x2f,0x2f,0x2f,0x2f,0x2e,0x2e,0x2f, + 0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2e, + 0x2e,0x2e,0x2e,0x2e,0xc8,0x1e,0x1e,0x1d,0x1d,0x1d,0x1d,0x1d,0x1e,0x1e,0x1e, + 0x1e,0x1e,0x1f,0x1e,0x1e,0x1e,0x1e,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f, + 0x1f,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x1f, + 0x20,0x21,0x22,0x23,0x23,0x22,0x21,0x21,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x21,0x21,0x21,0x21,0x21,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x21,0x21, + 0x21,0x21,0x22,0x22,0x22,0x22,0x22,0x21,0x22,0x22,0x22,0x22,0x22,0x22,0x22, + 0x22,0x22,0x22,0x22,0x22,0x22,0x23,0x23,0x22,0x22,0x22,0x23,0x23,0x23,0x23, + 0x23,0x23,0x24,0x24,0x24,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23, + 0x24,0x24,0x24,0x23,0x23,0x23,0x23,0x24,0x24,0x24,0x25,0x26,0x28,0x29,0x2b, + 0x2d,0x30,0x33,0x4b,0xc6,0xc8,0xc8,0xc8,0xc8,0xc8,0xc3,0x48,0x43,0x43,0x43, + 0x6d,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0x97,0x42,0x41,0x41,0x41,0xc7,0xc7,0xc7, + 0xc7,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc7,0xc7,0xc7,0xc7,0x3e,0x3b,0x3a,0x37, + 0x36,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x34,0x34,0x34,0x34,0x34,0x34, + 0x34,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x33, + 0x35,0x36,0x39,0x3c,0x3d,0xc4,0xc8,0xc8,0xc8,0xc8,0xc8,0x45,0x42,0x40,0x3d, + 0x3a,0x38,0x36,0x34,0x32,0x32,0x32,0x32,0x32,0x32,0x33,0x33,0x33,0x33,0x33, + 0x33,0x32,0x32,0x31,0x31,0x30,0x2f,0x2f,0x2f,0x2f,0x30,0x30,0x31,0x31,0x32, + 0x33,0x33,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x35,0x36,0x37,0x3a, + 0x3c,0x40,0xc8,0xc8,0xc8,0xc8,0xc8,0xc4,0x42,0x40,0x3d,0x3a,0x37,0x34,0x31, + 0x30,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x31,0x32,0x32,0x32,0x33,0x33,0x33,0x33, + 0x32,0x32,0x32,0x32,0x32,0x33,0x33,0x34,0x34,0x34,0x35,0x36,0x37,0x37,0x3a, + 0x93,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8, + 0xc8,0x6d,0x40,0x3d,0x3a,0x36,0x33,0x32,0x2f,0x2f,0x2e,0x2d,0x2d,0x2f,0x2f, + 0x30,0x32,0x35,0x37,0x3a,0x74,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8, + 0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0x78,0x41,0x3d,0x3b,0x38,0x36,0x33,0x31,0x2f, + 0x2f,0x2e,0x2d,0x2d,0x2d,0x2d,0x2d,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2d, + 0x2d,0x2c,0x2c,0x2c,0x2c,0x2c,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d, + 0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e, + 0x2e,0x2e,0x2e,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2e,0x2e,0x2e,0x2e,0x2e, + 0x2e,0x2e,0x2e,0x2e,0x2f,0x2f,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e, + 0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2f,0x2f, + 0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2e,0x2e,0x2e,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f, + 0x2e,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f, + 0x2f,0x2e,0x2e,0x2e,0x2e,0x2e,0xc8,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1e,0x1f, + 0x1f,0x1f,0x1f,0x1f,0x1e,0x1e,0x1e,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f, + 0x1f,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x1f,0x1f,0x1f, + 0x1f,0x1f,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x1f,0x20,0x21,0x22,0x23,0x23,0x22,0x22,0x21,0x21,0x21,0x21,0x21,0x20, + 0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x20,0x20,0x20,0x20,0x20,0x20, + 0x21,0x21,0x21,0x21,0x22,0x22,0x22,0x22,0x22,0x22,0x23,0x23,0x23,0x23,0x23, + 0x23,0x23,0x23,0x23,0x22,0x22,0x22,0x22,0x23,0x23,0x22,0x22,0x23,0x23,0x23, + 0x24,0x24,0x23,0x23,0x24,0x24,0x24,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23, + 0x23,0x23,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x25,0x26,0x28, + 0x29,0x2b,0x2e,0x32,0x35,0x38,0x7e,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xa8,0x49, + 0x49,0x4e,0xc3,0xc8,0xc8,0xc8,0xc8,0xc8,0xb9,0x46,0x45,0x45,0x44,0x44,0x45, + 0x47,0x48,0x4b,0xc8,0xc8,0xc8,0xc8,0xc8,0xc4,0x4e,0x4c,0x48,0x45,0x41,0x3e, + 0x3c,0x3a,0x39,0x38,0x38,0x38,0x38,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39, + 0x39,0x39,0x39,0x38,0x38,0x37,0x37,0x37,0x38,0x38,0x37,0x36,0x36,0x36,0x36, + 0x36,0x37,0x39,0x3a,0x3c,0x3f,0x42,0xc4,0xc8,0xc8,0xc8,0xc8,0xc8,0x4b,0x48, + 0x45,0x42,0x3f,0x3c,0x3a,0x39,0x37,0x36,0x36,0x36,0x36,0x37,0x37,0x38,0x39, + 0x39,0x38,0x37,0x36,0x36,0x36,0x35,0x34,0x33,0x32,0x32,0x32,0x32,0x33,0x34, + 0x35,0x36,0x36,0x38,0x39,0x39,0x3a,0x3a,0x38,0x38,0x37,0x37,0x37,0x38,0x39, + 0x3a,0x3d,0x3f,0x42,0xc8,0xc8,0xc8,0xc8,0xc8,0xc4,0x45,0x42,0x3f,0x3c,0x39, + 0x36,0x33,0x32,0x30,0x2f,0x2f,0x2f,0x31,0x32,0x33,0x34,0x36,0x35,0x36,0x36, + 0x36,0x36,0x35,0x35,0x35,0x35,0x36,0x36,0x36,0x38,0x38,0x37,0x38,0x39,0x3a, + 0x3a,0x3c,0x95,0xc8,0xc8,0xc2,0x98,0x65,0x4b,0x4d,0x5e,0xa1,0xc8,0xc8,0xc8, + 0xc8,0xc8,0xc8,0xb3,0x44,0x40,0x3c,0x38,0x35,0x32,0x30,0x2f,0x2f,0x2e,0x2f, + 0x2f,0x30,0x32,0x35,0x36,0x3a,0x3d,0xc0,0xc8,0xc8,0xc8,0xc8,0xc8,0xb7,0x68, + 0x53,0x69,0xb9,0xc8,0xc8,0xc8,0xc8,0xc8,0xc0,0x45,0x41,0x3d,0x3b,0x37,0x35, + 0x32,0x30,0x2f,0x2e,0x2e,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d, + 0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2d,0x2d,0x2d,0x2d,0x2d,0x2e,0x2e,0x2e, + 0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e, + 0x2e,0x2e,0x2e,0x2e,0x2e,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2e,0x2e,0x2e, + 0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2f,0x2f,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e, + 0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e, + 0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f, + 0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f, + 0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0xc8,0x1d,0x1d,0x1e,0x1e,0x1e,0x1e, + 0x1f,0x20,0x20,0x20,0x1f,0x1f,0x1e,0x1e,0x1f,0x1f,0x1f,0x1f,0x1f,0x1e,0x1f, + 0x1f,0x1f,0x1f,0x1f,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x1f,0x20,0x20,0x21,0x21,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x21,0x21,0x20,0x20,0x20,0x20,0x20,0x20,0x21, + 0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21, + 0x21,0x21,0x21,0x21,0x21,0x21,0x22,0x22,0x22,0x22,0x22,0x22,0x23,0x24,0x24, + 0x24,0x24,0x24,0x24,0x23,0x23,0x23,0x22,0x22,0x22,0x22,0x23,0x23,0x23,0x23, + 0x23,0x24,0x24,0x24,0x23,0x23,0x24,0x24,0x24,0x24,0x24,0x24,0x23,0x23,0x23, + 0x23,0x23,0x23,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x25,0x25,0x25,0x26, + 0x27,0x28,0x2a,0x2c,0x2f,0x32,0x37,0x3a,0x3e,0xae,0xc8,0xc8,0xc8,0xc8,0xc8, + 0xc8,0x7a,0x50,0xad,0xc8,0xc8,0xc8,0xc8,0xc8,0xc6,0x5a,0x48,0x48,0x45,0x45, + 0x45,0x46,0x49,0x4c,0x4e,0xc8,0xc8,0xc8,0xc8,0xc8,0xc4,0x52,0x4f,0x4c,0x48, + 0x44,0x41,0x3e,0x3d,0x3c,0xc8,0xc8,0xc8,0xc8,0xc8,0xc4,0x3e,0x4c,0x9c,0xc0, + 0xc7,0xc8,0xc5,0xb4,0x6d,0x3d,0x3d,0x3c,0x3c,0x7e,0xb5,0xc6,0xc8,0xc7,0xbb, + 0x7e,0x3b,0x3b,0x3c,0x3c,0x3e,0x41,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8, + 0xc8,0xc8,0xc8,0xc8,0xc8,0x41,0x3f,0x3d,0x3c,0x3b,0x3a,0x47,0x92,0xb9,0xc4, + 0xc8,0xc8,0xc8,0xc4,0xb9,0x93,0x48,0x3a,0x3a,0x37,0x36,0x36,0x36,0x36,0x36, + 0x36,0x37,0x45,0x91,0xb9,0xc4,0xc8,0xc8,0xc8,0xc4,0xb9,0x94,0x49,0x3c,0x3c, + 0x3c,0x3c,0x3e,0x40,0x43,0x46,0xc8,0xc8,0xc8,0xc8,0xc8,0xc4,0x49,0x46,0x42, + 0x3d,0x3a,0x37,0x34,0x32,0x31,0x30,0x30,0x32,0x32,0x88,0xc8,0xc8,0xc8,0xc8, + 0xc8,0xb0,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0xb8,0xc8,0xc8,0xc8,0xc8,0xc8, + 0x60,0x3c,0x3c,0x3d,0x95,0xc4,0x80,0x45,0x48,0x4a,0x4c,0x4f,0x51,0x53,0x93, + 0xc8,0xc8,0xc8,0xc8,0xc8,0xc5,0x46,0x43,0x3e,0x3b,0x37,0x35,0x32,0x30,0x30, + 0x2f,0x2f,0x30,0x31,0x33,0x36,0x39,0x3c,0x6d,0xc8,0xc8,0xc8,0xc8,0xc8,0xc2, + 0x57,0x57,0x57,0x57,0x59,0xc3,0xc8,0xc8,0xc8,0xc8,0xc8,0x6e,0x43,0x40,0x3c, + 0x39,0x36,0x33,0x31,0x2f,0x2e,0x2e,0x2d,0x2d,0x2e,0x2d,0x2e,0x2e,0x2e,0x2e, + 0x2e,0x2e,0x2d,0x2c,0x2d,0x2d,0x2d,0x2c,0x2d,0x2e,0x2e,0x2e,0x2e,0x2e,0x2f, + 0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2e,0x2e, + 0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f, + 0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2e,0x2e, + 0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e, + 0x2e,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f, + 0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f, + 0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0xc8,0x1e,0x1e,0x1e,0x1e, + 0x1e,0x1f,0x1f,0x20,0x20,0x20,0x20,0x1f,0x1e,0x1e,0x1f,0x1f,0x1f,0x1f,0x1f, + 0x1e,0x1e,0x1f,0x1f,0x1f,0x1f,0x1f,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x21,0x21,0x21,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x21,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21, + 0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x22,0x22,0x22,0x22,0x22,0x22,0x23, + 0x24,0x24,0x24,0x24,0x24,0x24,0x23,0x23,0x23,0x22,0x22,0x22,0x23,0x23,0x23, + 0x23,0x23,0x24,0x24,0x24,0x24,0x23,0x23,0x24,0x24,0x24,0x24,0x24,0x24,0x23, + 0x23,0x23,0x23,0x23,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x25,0x25, + 0x25,0x26,0x27,0x28,0x2a,0x2c,0x2f,0x33,0x37,0x3b,0x40,0x4c,0xc4,0xc8,0xc8, + 0xc8,0xc8,0xc8,0xc4,0x89,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0x80,0x4d,0x4b,0x48, + 0x48,0x45,0x45,0x48,0x4b,0x4c,0x50,0xc8,0xc8,0xc8,0xc8,0xc8,0xc4,0x54,0x51, + 0x4d,0x49,0x46,0x42,0x41,0x3f,0x3e,0xc8,0xc8,0xc8,0xc8,0xc8,0xc4,0x9b,0xc7, + 0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0x98,0x42,0x70,0xc0,0xc8,0xc8,0xc8,0xc8, + 0xc8,0xc8,0xc8,0xa5,0x40,0x40,0x41,0x42,0x45,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8, + 0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0x45,0x42,0x41,0x40,0x3f,0x94,0xc7,0xc8, + 0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc7,0x95,0x3d,0x3d,0x3b,0x3a,0x3a, + 0x3a,0x3a,0x3b,0x93,0xc7,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc7, + 0x95,0x3f,0x40,0x41,0x42,0x45,0x47,0x49,0xc8,0xc8,0xc8,0xc8,0xc8,0xc4,0x4c, + 0x48,0x44,0x40,0x3c,0x38,0x35,0x33,0x32,0x31,0x32,0x32,0x35,0x3f,0xc7,0xc8, + 0xc8,0xc8,0xc8,0xc6,0x40,0x3d,0x3d,0x3d,0x3d,0x3d,0x48,0xc8,0xc8,0xc8,0xc8, + 0xc8,0xc0,0x3d,0x3d,0x3f,0x40,0x4a,0x46,0x44,0x46,0x48,0x4b,0x4d,0x50,0x53, + 0x54,0x57,0xc7,0xc8,0xc8,0xc8,0xc8,0xc8,0x49,0x45,0x41,0x3c,0x39,0x36,0x33, + 0x31,0x30,0x30,0x30,0x31,0x32,0x35,0x37,0x3b,0x3f,0xa3,0xc8,0xc8,0xc8,0xc8, + 0xc8,0x9a,0x59,0x59,0x5a,0x5a,0x5b,0x9e,0xc8,0xc8,0xc8,0xc8,0xc8,0xa3,0x46, + 0x42,0x3e,0x3b,0x37,0x35,0x32,0x30,0x2f,0x2e,0x2d,0x2d,0x2e,0x2e,0x2e,0x2e, + 0x2e,0x2e,0x2e,0x2e,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2e,0x2e,0x2e,0x2e,0x2f, + 0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f, + 0x2f,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f, + 0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f, + 0x2f,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e, + 0x2e,0x2e,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f, + 0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f, + 0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0xc8,0x20,0x20, + 0x1f,0x1f,0x1f,0x1f,0x20,0x20,0x20,0x20,0x20,0x20,0x1f,0x1f,0x20,0x20,0x20, + 0x1f,0x1f,0x1e,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x21,0x21,0x21,0x21,0x20,0x20,0x20, + 0x20,0x20,0x21,0x21,0x21,0x20,0x21,0x22,0x21,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x21,0x21,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22, + 0x22,0x22,0x22,0x22,0x22,0x22,0x21,0x21,0x21,0x21,0x22,0x22,0x22,0x23,0x23, + 0x23,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x23,0x23,0x23,0x23, + 0x23,0x23,0x23,0x23,0x23,0x24,0x24,0x24,0x23,0x23,0x24,0x24,0x24,0x24,0x24, + 0x24,0x23,0x23,0x23,0x23,0x23,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24, + 0x25,0x25,0x25,0x26,0x27,0x28,0x2a,0x2d,0x30,0x34,0x38,0x3b,0x40,0x45,0x73, + 0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xa9,0x51,0x4e, + 0x4c,0x49,0x48,0x46,0x46,0x48,0x4c,0x4e,0x51,0xc8,0xc8,0xc8,0xc8,0xc8,0xc4, + 0x57,0x52,0x4f,0x4a,0x47,0x45,0x42,0x41,0x41,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8, + 0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xb3,0xc8,0xc8,0xc8,0xc8, + 0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0x7e,0x45,0x45,0x47,0x48,0xc8,0xc8,0xc8,0xc8, + 0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0x48,0x47,0x45,0x45,0xae,0xc8, + 0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xae,0x41,0x41, + 0x40,0x3f,0x3f,0x40,0xae,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8, + 0xc8,0xc8,0xc8,0xaf,0x45,0x45,0x47,0x48,0x4b,0x4d,0xc8,0xc8,0xc8,0xc8,0xc8, + 0xc4,0x4f,0x4a,0x45,0x41,0x3d,0x39,0x36,0x33,0x32,0x32,0x32,0x35,0x36,0x38, + 0xb1,0xc8,0xc8,0xc8,0xc8,0xc8,0x7b,0x42,0x42,0x41,0x42,0x42,0x89,0xc8,0xc8, + 0xc8,0xc8,0xc8,0x95,0x41,0x41,0x41,0x41,0x41,0x42,0x44,0x46,0x48,0x4c,0x4e, + 0x50,0x53,0x55,0x57,0xc5,0xc8,0xc8,0xc8,0xc8,0xc8,0x4c,0x47,0x42,0x3e,0x3b, + 0x37,0x34,0x32,0x30,0x30,0x30,0x32,0x33,0x36,0x39,0x3d,0x41,0xbb,0xc8,0xc8, + 0xc8,0xc8,0xc8,0x74,0x5b,0x5b,0x5b,0x5c,0x5b,0x77,0xc8,0xc8,0xc8,0xc8,0xc8, + 0xba,0x4a,0x45,0x41,0x3d,0x39,0x36,0x33,0x31,0x30,0x2f,0x2f,0x2e,0x2f,0x2e, + 0x2f,0x2f,0x2f,0x2f,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2f,0x2f,0x2f,0x2f, + 0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f, + 0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f, + 0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f, + 0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f, + 0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x30,0x2f,0x2f,0x2f, + 0x2f,0x2f,0x30,0x30,0x30,0x30,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x30,0x30,0x30, + 0x30,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x30,0x30,0x30,0x2f,0x2f,0x2f,0x2f,0xc8, + 0x20,0x20,0x20,0x1f,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x1f,0x1f,0x1e,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x20, + 0x20,0x20,0x20,0x20,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x20,0x20, + 0x20,0x20,0x20,0x20,0x21,0x21,0x21,0x20,0x21,0x22,0x22,0x21,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x21,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22, + 0x22,0x22,0x23,0x23,0x22,0x23,0x23,0x22,0x22,0x21,0x21,0x21,0x22,0x22,0x23, + 0x23,0x23,0x23,0x24,0x24,0x23,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x23, + 0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x24,0x24,0x23,0x23,0x23,0x24,0x24,0x24, + 0x24,0x24,0x24,0x23,0x23,0x23,0x23,0x23,0x24,0x24,0x24,0x24,0x24,0x24,0x24, + 0x24,0x24,0x25,0x25,0x25,0x26,0x26,0x28,0x2a,0x2d,0x2f,0x33,0x38,0x3b,0x40, + 0x45,0x4b,0xa3,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc0,0x58, + 0x53,0x50,0x4c,0x48,0x48,0x47,0x46,0x48,0x4c,0x4e,0x51,0xc8,0xc8,0xc8,0xc8, + 0xc8,0xc4,0x57,0x53,0x4f,0x4c,0x48,0x46,0x44,0x44,0x45,0xc8,0xc8,0xc8,0xc8, + 0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8, + 0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xbd,0x49,0x49,0x4c,0x4d,0xc7,0xc7, + 0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc7,0xc7,0xc7,0xc7,0xc7,0x4c,0x4a,0x48,0x9e, + 0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8, + 0x9c,0x45,0x45,0x45,0x45,0x9c,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8, + 0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0x9d,0x4b,0x4c,0x4c,0x4f,0x50,0xc8,0xc8,0xc8, + 0xc8,0xc8,0xc4,0x50,0x4c,0x46,0x42,0x3d,0x3a,0x36,0x34,0x33,0x32,0x33,0x36, + 0x38,0x3a,0x74,0xc8,0xc8,0xc8,0xc8,0xc8,0xb0,0x46,0x46,0x46,0x46,0x47,0xb7, + 0xc8,0xc8,0xc8,0xc8,0xc8,0x52,0x43,0x42,0x41,0x41,0x41,0x42,0x43,0x46,0x49, + 0x4c,0x4e,0x50,0x53,0x56,0x5e,0xc8,0xc8,0xc8,0xc8,0xc8,0xc4,0x4e,0x48,0x44, + 0x40,0x3c,0x38,0x36,0x33,0x32,0x31,0x31,0x32,0x35,0x36,0x3a,0x3e,0x43,0xc4, + 0xc8,0xc8,0xc8,0xc8,0xc8,0x5d,0x5c,0x5c,0x5c,0x5d,0x5c,0x5e,0xc8,0xc8,0xc8, + 0xc8,0xc8,0xc4,0x4d,0x48,0x44,0x3f,0x3b,0x38,0x35,0x32,0x31,0x2f,0x2f,0x2f, + 0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2e,0x2e,0x2e,0x2f,0x2e,0x2e,0x2f,0x2f,0x2f, + 0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f, + 0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f, + 0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x30,0x2f,0x2f,0x2f,0x2f,0x2f, + 0x2f,0x2f,0x30,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f, + 0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x30,0x30,0x30,0x2f, + 0x2f,0x2f,0x2f,0x2f,0x30,0x30,0x30,0x30,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x30, + 0x30,0x30,0x30,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x30,0x31,0x30,0x30,0x2f,0x2f, + 0x30,0xc8,0x20,0x20,0x20,0x20,0x20,0x1f,0x1f,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f, + 0x1f,0x1f,0x20,0x20,0x20,0x20,0x21,0x21,0x21,0x22,0x22,0x22,0x21,0x21,0x21, + 0x20,0x20,0x20,0x20,0x20,0x21,0x21,0x21,0x21,0x20,0x21,0x22,0x21,0x21,0x20, + 0x20,0x20,0x21,0x21,0x21,0x21,0x21,0x20,0x21,0x22,0x22,0x22,0x22,0x22,0x22, + 0x22,0x22,0x22,0x22,0x23,0x23,0x23,0x23,0x23,0x23,0x22,0x22,0x21,0x21,0x22, + 0x23,0x23,0x23,0x23,0x24,0x23,0x23,0x23,0x23,0x24,0x24,0x24,0x24,0x24,0x24, + 0x24,0x24,0x24,0x24,0x23,0x23,0x23,0x23,0x24,0x24,0x23,0x23,0x23,0x23,0x24, + 0x24,0x24,0x24,0x24,0x24,0x23,0x23,0x23,0x23,0x23,0x24,0x24,0x24,0x24,0x24, + 0x24,0x24,0x24,0x24,0x25,0x25,0x25,0x26,0x27,0x28,0x2a,0x2b,0x2f,0x32,0x36, + 0x3a,0x40,0x45,0x4b,0x52,0xc0,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc7, + 0x72,0x57,0x53,0x50,0x4c,0x48,0x46,0x45,0x45,0x48,0x4b,0x4e,0x51,0xc8,0xc8, + 0xc8,0xc8,0xc8,0xc4,0x57,0x53,0x4f,0x4b,0x48,0x47,0x45,0x45,0x47,0xc8,0xc8, + 0xc8,0xc8,0xc8,0xc8,0xc4,0x9c,0x7d,0x8a,0xbf,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8, + 0xc6,0xa4,0x7d,0x83,0xb6,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0x50,0x4f,0x4f,0x51, + 0x53,0x55,0xc4,0xc8,0xc8,0xc8,0xc8,0xc8,0x5e,0x5b,0x58,0x55,0x52,0x50,0x4e, + 0x5f,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xa7,0x5c,0x50,0x5e,0xa8,0xc8,0xc8,0xc8, + 0xc8,0xc8,0xc8,0x5d,0x4a,0x49,0x5d,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xa7,0x5c, + 0x51,0x5e,0xa8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0x61,0x4f,0x50,0x52,0x53,0xc8, + 0xc8,0xc8,0xc8,0xc8,0xc4,0x52,0x4d,0x48,0x43,0x3e,0x3a,0x37,0x35,0x33,0x33, + 0x34,0x36,0x39,0x3c,0x3f,0xc4,0xc8,0xc8,0xc8,0xc8,0xc6,0x4c,0x4c,0x4c,0x4c, + 0x52,0xc7,0xc8,0xc8,0xc8,0xc8,0xb7,0x48,0x46,0x45,0x44,0x42,0x41,0x42,0x44, + 0x45,0x48,0x4a,0x4d,0x50,0x53,0x56,0x99,0xc8,0xc8,0xc8,0xc8,0xc8,0xb5,0x4f, + 0x49,0x45,0x41,0x3d,0x39,0x36,0x33,0x32,0x32,0x32,0x33,0x36,0x38,0x3c,0x41, + 0x45,0xc7,0xc8,0xc8,0xc8,0xc8,0xc6,0x5c,0x5d,0x5d,0x5d,0x5d,0x5d,0x5e,0xc7, + 0xc8,0xc8,0xc8,0xc8,0xc7,0x50,0x4b,0x46,0x41,0x3c,0x3a,0x37,0x34,0x32,0x31, + 0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2e,0x2e,0x2f,0x2f,0x2f,0x2f,0x2f, + 0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f, + 0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f, + 0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x30,0x30,0x30,0x2f,0x2f, + 0x2f,0x2f,0x2f,0x2f,0x30,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f, + 0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x30,0x30,0x30,0x30,0x30,0x31,0x31, + 0x30,0x2f,0x2f,0x2f,0x2f,0x2f,0x30,0x30,0x30,0x30,0x30,0x2f,0x2f,0x2f,0x2f, + 0x30,0x30,0x30,0x30,0x30,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x31,0x31,0x30,0x30, + 0x30,0x30,0x30,0xc8,0x20,0x20,0x20,0x1f,0x1f,0x1f,0x1f,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x1e,0x1e,0x1f,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x21,0x21, + 0x21,0x21,0x21,0x21,0x22,0x22,0x21,0x20,0x20,0x20,0x20,0x21,0x21,0x21,0x21, + 0x21,0x21,0x21,0x22,0x22,0x22,0x22,0x21,0x21,0x21,0x21,0x23,0x22,0x22,0x22, + 0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x23,0x23,0x22,0x22,0x23,0x23,0x23,0x22, + 0x22,0x23,0x23,0x23,0x23,0x23,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24, + 0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24, + 0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24, + 0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x25,0x26,0x27,0x27,0x28,0x29,0x2b,0x2f, + 0x31,0x35,0x3a,0x3f,0x45,0x4b,0x50,0x6d,0xc7,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8, + 0xc8,0x96,0x5d,0x58,0x54,0x50,0x4c,0x48,0x45,0x45,0x45,0x46,0x48,0x4c,0x50, + 0xc8,0xc8,0xc8,0xc8,0xc8,0xc4,0x57,0x53,0x50,0x4c,0x49,0x48,0x46,0x46,0x48, + 0xc8,0xc8,0xc8,0xc8,0xc8,0xc5,0x5b,0x58,0x57,0x58,0x65,0xc8,0xc8,0xc8,0xc8, + 0xc8,0xc8,0x63,0x58,0x57,0x57,0x58,0xc5,0xc8,0xc8,0xc8,0xc8,0xc8,0x69,0x51, + 0x52,0x53,0x55,0x58,0xc4,0xc8,0xc8,0xc8,0xc8,0xc8,0x61,0x5e,0x5a,0x57,0x54, + 0x53,0x51,0xa3,0xc8,0xc8,0xc8,0xc8,0xc8,0xb2,0x54,0x54,0x55,0x55,0x55,0xb2, + 0xc8,0xc8,0xc8,0xc8,0xc8,0xa3,0x50,0x4f,0xa3,0xc8,0xc8,0xc8,0xc8,0xc8,0xb2, + 0x54,0x55,0x56,0x56,0x56,0xb2,0xc8,0xc8,0xc8,0xc8,0xc8,0xa3,0x53,0x54,0x54, + 0x57,0xc8,0xc8,0xc8,0xc8,0xc8,0xc4,0x53,0x4e,0x49,0x45,0x3f,0x3a,0x37,0x35, + 0x34,0x34,0x35,0x36,0x3a,0x3d,0x41,0xa4,0xc8,0xc8,0xc8,0xc8,0xc8,0x80,0x50, + 0x51,0x50,0x8b,0xc8,0xc8,0xc8,0xc8,0xc8,0x84,0x4a,0x48,0x46,0x44,0x42,0x41, + 0x41,0x43,0x44,0x46,0x48,0x4c,0x4f,0x52,0x60,0xc6,0xc8,0xc8,0xc8,0xc8,0xc8, + 0x81,0x50,0x4b,0x46,0x41,0x3d,0x3a,0x36,0x34,0x33,0x33,0x33,0x35,0x37,0x3a, + 0x3e,0x42,0x47,0xc8,0xc8,0xc8,0xc8,0xc8,0xc5,0x5e,0x5e,0x5e,0x5e,0x5d,0x5e, + 0x5e,0xc5,0xc8,0xc8,0xc8,0xc8,0xc8,0x53,0x4d,0x48,0x43,0x3e,0x3a,0x37,0x34, + 0x32,0x31,0x30,0x30,0x30,0x2f,0x2e,0x2e,0x2e,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f, + 0x2f,0x2f,0x2e,0x2e,0x2e,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f, + 0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f, + 0x2f,0x2f,0x2f,0x2f,0x30,0x30,0x30,0x2f,0x30,0x30,0x30,0x30,0x31,0x30,0x30, + 0x30,0x30,0x30,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x30,0x30,0x30,0x2f,0x2f,0x2f, + 0x30,0x30,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x30,0x30,0x30,0x30,0x30,0x31, + 0x31,0x31,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30, + 0x30,0x31,0x31,0x31,0x31,0x31,0x31,0x30,0x30,0x30,0x30,0x30,0x30,0x31,0x31, + 0x31,0x30,0x30,0x30,0x30,0xc8,0x20,0x20,0x1f,0x1f,0x1f,0x1f,0x1f,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x21,0x20,0x1f,0x1e,0x1f,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x21,0x21,0x21,0x21,0x22,0x23,0x23,0x21,0x20,0x20,0x20,0x20,0x21,0x21, + 0x21,0x21,0x21,0x21,0x21,0x22,0x22,0x22,0x22,0x21,0x21,0x21,0x22,0x23,0x23, + 0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x23,0x23,0x22,0x22,0x23,0x23, + 0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24, + 0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24, + 0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24, + 0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x26,0x26,0x26,0x27,0x28,0x29, + 0x2b,0x2f,0x31,0x34,0x39,0x3e,0x44,0x4a,0x50,0x57,0xb2,0xc8,0xc8,0xc8,0xc8, + 0xc8,0xc8,0xc8,0x75,0x5e,0x5a,0x54,0x50,0x4c,0x48,0x45,0x43,0x43,0x45,0x47, + 0x4b,0x4f,0xc8,0xc8,0xc8,0xc8,0xc8,0xc4,0x57,0x54,0x50,0x4c,0x4a,0x48,0x47, + 0x48,0x49,0xc8,0xc8,0xc8,0xc8,0xc8,0xc4,0x5b,0x5b,0x5b,0x5b,0x5c,0xc5,0xc8, + 0xc8,0xc8,0xc8,0xc8,0x5c,0x5b,0x5b,0x5a,0x5a,0xbd,0xc8,0xc8,0xc8,0xc8,0xc8, + 0x77,0x54,0x54,0x55,0x57,0x59,0xc4,0xc8,0xc8,0xc8,0xc8,0xc8,0x62,0x5f,0x5c, + 0x59,0x57,0x54,0x53,0xbf,0xc8,0xc8,0xc8,0xc8,0xc8,0x75,0x57,0x57,0x58,0x58, + 0x59,0x79,0xc8,0xc8,0xc8,0xc8,0xc8,0xbf,0x54,0x54,0xc0,0xc8,0xc8,0xc8,0xc8, + 0xc8,0x77,0x58,0x59,0x59,0x59,0x59,0x79,0xc8,0xc8,0xc8,0xc8,0xc8,0xbf,0x55, + 0x57,0x58,0x59,0xc8,0xc8,0xc8,0xc8,0xc8,0xc4,0x53,0x50,0x4b,0x45,0x40,0x3a, + 0x37,0x35,0x34,0x34,0x35,0x37,0x3b,0x3e,0x42,0x62,0xc8,0xc8,0xc8,0xc8,0xc8, + 0xb1,0x55,0x56,0x54,0xb6,0xc8,0xc8,0xc8,0xc8,0xc6,0x50,0x4c,0x49,0x46,0x44, + 0x42,0x41,0x41,0x41,0x43,0x45,0x48,0x4c,0x4f,0x53,0xba,0xc8,0xc8,0xc8,0xc8, + 0xc8,0xbd,0x55,0x50,0x4c,0x46,0x41,0x3d,0x3a,0x37,0x35,0x33,0x33,0x34,0x36, + 0x38,0x3b,0x3f,0x44,0x49,0xc8,0xc8,0xc8,0xc8,0xc8,0xc4,0x5f,0x5f,0x5e,0x5e, + 0x5d,0x5e,0x5e,0xc4,0xc8,0xc8,0xc8,0xc8,0xc8,0x53,0x4f,0x49,0x45,0x3f,0x3b, + 0x37,0x34,0x32,0x32,0x31,0x30,0x30,0x2f,0x2e,0x2e,0x2e,0x2f,0x2f,0x2f,0x2f, + 0x2f,0x2f,0x2f,0x2f,0x2e,0x2e,0x2e,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f, + 0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x30,0x30,0x30,0x30,0x30, + 0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x31,0x31,0x31,0x31,0x31, + 0x31,0x30,0x30,0x30,0x30,0x30,0x30,0x2f,0x2f,0x2f,0x30,0x30,0x30,0x30,0x30, + 0x30,0x30,0x30,0x30,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x30,0x30,0x30,0x30,0x30, + 0x31,0x31,0x31,0x31,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30, + 0x30,0x30,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x30,0x30,0x30, + 0x31,0x31,0x31,0x31,0x30,0x30,0x30,0xc8,0x20,0x20,0x20,0x20,0x1f,0x1f,0x1f, + 0x20,0x20,0x20,0x20,0x20,0x1f,0x1f,0x1f,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x21,0x21,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x21,0x22,0x20,0x20,0x20,0x21,0x21,0x21,0x20,0x20,0x20,0x20, + 0x21,0x21,0x22,0x22,0x22,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21, + 0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x23,0x23,0x23,0x23,0x23,0x24,0x23, + 0x23,0x23,0x23,0x23,0x23,0x23,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24, + 0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24, + 0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24, + 0x24,0x24,0x24,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x27,0x27,0x27,0x28, + 0x28,0x2a,0x2b,0x2e,0x30,0x34,0x38,0x3e,0x44,0x49,0x51,0x7b,0xc8,0xc8,0xc8, + 0xc8,0xc8,0xc8,0xc8,0xc8,0xc0,0x61,0x5a,0x55,0x50,0x4b,0x47,0x45,0x42,0x43, + 0x44,0x46,0x49,0x4e,0xc8,0xc8,0xc8,0xc8,0xc8,0xc4,0x57,0x53,0x50,0x4d,0x4a, + 0x48,0x48,0x48,0x4c,0xc8,0xc8,0xc8,0xc8,0xc8,0xc4,0x5e,0x5e,0x5e,0x5f,0x5f, + 0xc4,0xc8,0xc8,0xc8,0xc8,0xc8,0x5e,0x5e,0x5e,0x5e,0x5d,0xbb,0xc8,0xc8,0xc8, + 0xc8,0xc8,0x7b,0x57,0x57,0x57,0x58,0x5a,0xc4,0xc8,0xc8,0xc8,0xc8,0xc8,0x61, + 0x5e,0x5c,0x58,0x57,0x55,0x54,0xc7,0xc8,0xc8,0xc8,0xc8,0xc7,0x5a,0x5a,0x5a, + 0x5b,0x5b,0x5c,0x5c,0xc8,0xc8,0xc8,0xc8,0xc8,0xc7,0x5a,0x5a,0xc7,0xc8,0xc8, + 0xc8,0xc8,0xc7,0x5c,0x5c,0x5c,0x5c,0x5b,0x5b,0x5b,0xc8,0xc8,0xc8,0xc8,0xc8, + 0xc7,0x58,0x5a,0x5a,0x5a,0xc8,0xc8,0xc8,0xc8,0xc8,0xc4,0x54,0x4f,0x4a,0x45, + 0x40,0x3b,0x38,0x36,0x35,0x35,0x36,0x38,0x3b,0x3f,0x44,0x48,0xbf,0xc8,0xc8, + 0xc8,0xc8,0xc6,0x59,0x59,0x5b,0xc7,0xc8,0xc8,0xc8,0xc8,0xab,0x50,0x4d,0x49, + 0x46,0x44,0x41,0x41,0x41,0x41,0x43,0x45,0x48,0x4c,0x50,0xb0,0xc8,0xc8,0xc8, + 0xc8,0xc8,0xc7,0x70,0x55,0x51,0x4c,0x47,0x41,0x3e,0x3a,0x38,0x36,0x36,0x35, + 0x36,0x37,0x3a,0x3d,0x41,0x45,0x4a,0xc8,0xc8,0xc8,0xc8,0xc8,0xc5,0x60,0x5f, + 0x5e,0x5e,0x5e,0x5e,0x5e,0xc5,0xc8,0xc8,0xc8,0xc8,0xc8,0x53,0x4f,0x4a,0x45, + 0x40,0x3c,0x37,0x35,0x32,0x32,0x31,0x31,0x30,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f, + 0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x30,0x30,0x30,0x30,0x2f, + 0x2f,0x2f,0x2f,0x30,0x30,0x30,0x2f,0x2f,0x2f,0x2f,0x2f,0x30,0x30,0x30,0x30, + 0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x31,0x31,0x31, + 0x31,0x31,0x31,0x31,0x30,0x30,0x30,0x30,0x31,0x30,0x30,0x30,0x30,0x30,0x30, + 0x30,0x30,0x30,0x30,0x30,0x30,0x2f,0x2f,0x2f,0x30,0x30,0x30,0x30,0x30,0x30, + 0x30,0x31,0x31,0x31,0x31,0x31,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30, + 0x30,0x30,0x30,0x30,0x2f,0x2f,0x2f,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30, + 0x30,0x30,0x31,0x31,0x31,0x30,0x30,0x30,0x30,0xc8,0x20,0x20,0x20,0x1f,0x1f, + 0x1f,0x1f,0x20,0x20,0x20,0x20,0x20,0x1f,0x1f,0x1f,0x1f,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x21,0x21,0x21,0x20,0x21,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x22,0x22,0x20,0x20,0x20,0x20,0x21,0x21,0x21,0x21, + 0x21,0x20,0x21,0x22,0x23,0x22,0x22,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21, + 0x21,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x23,0x23,0x23,0x23,0x23, + 0x24,0x24,0x23,0x23,0x23,0x23,0x23,0x23,0x24,0x24,0x24,0x24,0x24,0x24,0x24, + 0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24, + 0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x25,0x24,0x24,0x24,0x24,0x24, + 0x24,0x24,0x24,0x24,0x25,0x25,0x25,0x26,0x26,0x25,0x25,0x25,0x26,0x27,0x27, + 0x27,0x28,0x28,0x29,0x2b,0x2e,0x30,0x35,0x39,0x3d,0x44,0x4a,0x58,0xc4,0xc8, + 0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xa6,0x5a,0x55,0x4f,0x4a,0x47,0x43, + 0x42,0x42,0x43,0x45,0x48,0x4d,0xc8,0xc8,0xc8,0xc8,0xc8,0xc4,0x57,0x53,0x50, + 0x4d,0x4a,0x48,0x48,0x4a,0x4c,0xc8,0xc8,0xc8,0xc8,0xc8,0xc4,0x5f,0x5f,0x60, + 0x61,0x61,0xc4,0xc8,0xc8,0xc8,0xc8,0xc8,0x61,0x60,0x60,0x5e,0x5e,0xbc,0xc8, + 0xc8,0xc8,0xc8,0xc8,0x7c,0x59,0x57,0x58,0x59,0x5a,0xc4,0xc8,0xc8,0xc8,0xc8, + 0xc8,0x62,0x5f,0x5d,0x59,0x57,0x57,0x56,0xc8,0xc8,0xc8,0xc8,0xc8,0xc5,0x5d, + 0x5d,0x5d,0x5d,0x5d,0x5d,0x5e,0xc5,0xc8,0xc8,0xc8,0xc8,0xc8,0x5d,0x5d,0xc8, + 0xc8,0xc8,0xc8,0xc8,0xc5,0x5e,0x5e,0x5e,0x5d,0x5d,0x5d,0x5d,0xc5,0xc8,0xc8, + 0xc8,0xc8,0xc8,0x5b,0x5b,0x5c,0x5d,0xc8,0xc8,0xc8,0xc8,0xc8,0xc4,0x54,0x4f, + 0x49,0x45,0x40,0x3b,0x38,0x36,0x35,0x35,0x36,0x38,0x3b,0x3f,0x44,0x49,0x96, + 0xc8,0xc8,0xc8,0xc8,0xc8,0x86,0x5e,0x8d,0xc8,0xc8,0xc8,0xc8,0xc8,0x71,0x51, + 0x4e,0x4b,0x47,0x44,0x41,0x41,0x41,0x41,0x43,0x45,0x48,0x4c,0xae,0xc8,0xc8, + 0xc8,0xc8,0xc8,0xc8,0x8d,0x59,0x54,0x50,0x4c,0x47,0x41,0x3e,0x3b,0x39,0x37, + 0x36,0x37,0x37,0x3a,0x3d,0x3f,0x43,0x47,0x4c,0xc7,0xc8,0xc8,0xc8,0xc8,0xc6, + 0x60,0x5f,0x5e,0x5e,0x5e,0x5e,0x5e,0xc7,0xc8,0xc8,0xc8,0xc8,0xc7,0x54,0x4f, + 0x49,0x45,0x41,0x3c,0x38,0x35,0x34,0x32,0x31,0x31,0x30,0x30,0x2f,0x2f,0x2f, + 0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x30,0x2f,0x2f,0x2f,0x2f,0x30,0x31,0x31,0x31, + 0x31,0x30,0x2f,0x2f,0x30,0x30,0x30,0x30,0x30,0x2f,0x2f,0x2f,0x30,0x30,0x30, + 0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30, + 0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x30,0x30,0x31,0x32,0x31,0x30,0x30,0x30, + 0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x2f,0x2f,0x2f,0x30,0x30,0x30,0x30, + 0x30,0x30,0x31,0x31,0x31,0x31,0x31,0x31,0x30,0x30,0x30,0x30,0x30,0x30,0x30, + 0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x31,0x31,0x31,0x31,0x31,0x31, + 0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x30,0x30,0x30,0xc8,0x20,0x20,0x1f, + 0x1f,0x1f,0x1f,0x1f,0x20,0x20,0x20,0x20,0x20,0x1f,0x1f,0x1f,0x1f,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x21,0x21,0x22,0x22,0x21,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x22,0x23,0x20,0x20,0x20,0x20,0x20,0x21, + 0x22,0x22,0x21,0x21,0x21,0x22,0x23,0x22,0x22,0x22,0x22,0x21,0x21,0x21,0x21, + 0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x23,0x23,0x23,0x23,0x23,0x23, + 0x23,0x23,0x24,0x24,0x24,0x23,0x23,0x23,0x23,0x24,0x24,0x24,0x24,0x24,0x24, + 0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24, + 0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x25,0x25,0x25,0x25,0x25, + 0x24,0x24,0x24,0x24,0x24,0x25,0x25,0x25,0x26,0x26,0x26,0x26,0x26,0x26,0x26, + 0x27,0x27,0x27,0x28,0x28,0x29,0x2b,0x2e,0x31,0x36,0x39,0x3e,0x44,0x4b,0xb2, + 0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0x7a,0x55,0x4f,0x4a, + 0x47,0x43,0x42,0x42,0x43,0x45,0x49,0x4e,0xc8,0xc8,0xc8,0xc8,0xc8,0xc4,0x57, + 0x53,0x50,0x4d,0x4a,0x48,0x49,0x4c,0x4d,0xc8,0xc8,0xc8,0xc8,0xc8,0xc4,0x5f, + 0x60,0x61,0x61,0x62,0xc4,0xc8,0xc8,0xc8,0xc8,0xc8,0x62,0x61,0x60,0x60,0x5f, + 0xbc,0xc8,0xc8,0xc8,0xc8,0xc8,0x7d,0x5a,0x59,0x59,0x5a,0x5a,0xc4,0xc8,0xc8, + 0xc8,0xc8,0xc8,0x62,0x5f,0x5d,0x5a,0x58,0x57,0x57,0xc8,0xc8,0xc8,0xc8,0xc8, + 0xc5,0x5e,0x5e,0x5e,0x5e,0x5e,0x5e,0x5e,0xc5,0xc8,0xc8,0xc8,0xc8,0xc8,0x60, + 0x60,0xc8,0xc8,0xc8,0xc8,0xc8,0xc5,0x61,0x5f,0x5f,0x5e,0x5e,0x5e,0x5e,0xc5, + 0xc8,0xc8,0xc8,0xc8,0xc8,0x5d,0x5d,0x5d,0x5d,0xc8,0xc8,0xc8,0xc8,0xc8,0xc4, + 0x54,0x4f,0x4a,0x45,0x41,0x3c,0x39,0x36,0x35,0x35,0x36,0x39,0x3b,0x40,0x45, + 0x49,0x58,0xc8,0xc8,0xc8,0xc8,0xc8,0xb2,0x61,0xb6,0xc8,0xc8,0xc8,0xc8,0xc1, + 0x56,0x52,0x4e,0x4b,0x47,0x44,0x41,0x41,0x41,0x41,0x44,0x46,0x4c,0xb4,0xc8, + 0xc8,0xc8,0xc8,0xc8,0xc8,0x99,0x5a,0x57,0x53,0x50,0x4b,0x47,0x41,0x3f,0x3c, + 0x3a,0x38,0x38,0x38,0x3a,0x3b,0x3d,0x41,0x45,0x48,0x4c,0xc4,0xc8,0xc8,0xc8, + 0xc8,0xc8,0x61,0x5e,0x5e,0x5d,0x5d,0x5d,0x5f,0xc8,0xc8,0xc8,0xc8,0xc8,0xc4, + 0x54,0x4f,0x4a,0x45,0x41,0x3d,0x38,0x36,0x34,0x32,0x31,0x31,0x30,0x30,0x2f, + 0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x30,0x30,0x30,0x2f,0x2f,0x30,0x31,0x31, + 0x31,0x31,0x31,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30, + 0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30, + 0x2f,0x2f,0x30,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x32,0x32,0x31,0x31, + 0x31,0x31,0x31,0x31,0x31,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30, + 0x30,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31, + 0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x32,0x32,0x32,0x32,0x32,0x32,0x32, + 0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x31,0x31,0x31,0xc8,0x1f, + 0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x20,0x20,0x20,0x20,0x20,0x20,0x1f,0x1f,0x1f, + 0x20,0x20,0x21,0x21,0x20,0x20,0x20,0x20,0x21,0x21,0x22,0x22,0x22,0x21,0x20, + 0x20,0x20,0x20,0x20,0x20,0x21,0x20,0x20,0x20,0x22,0x22,0x21,0x20,0x20,0x20, + 0x20,0x21,0x22,0x23,0x22,0x22,0x22,0x22,0x23,0x23,0x22,0x22,0x22,0x22,0x22, + 0x21,0x21,0x21,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x23,0x23,0x23,0x24,0x24, + 0x23,0x23,0x23,0x23,0x24,0x24,0x23,0x23,0x23,0x23,0x23,0x24,0x24,0x24,0x24, + 0x24,0x23,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24, + 0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x25,0x25,0x25,0x26, + 0x25,0x25,0x25,0x24,0x24,0x24,0x25,0x25,0x25,0x26,0x26,0x26,0x26,0x26,0x26, + 0x26,0x26,0x27,0x27,0x27,0x28,0x28,0x29,0x2b,0x2e,0x32,0x36,0x3a,0x3f,0x45, + 0x88,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc5,0xc8,0xc8,0xc8,0xc8,0xc8,0xc3,0x5a, + 0x50,0x4b,0x46,0x43,0x41,0x41,0x42,0x46,0x4a,0x4e,0xc8,0xc8,0xc8,0xc8,0xc8, + 0xc4,0x57,0x54,0x50,0x4d,0x4c,0x4a,0x4b,0x4c,0x4f,0xc8,0xc8,0xc8,0xc8,0xc8, + 0xc4,0x5f,0x61,0x61,0x62,0x62,0xc4,0xc8,0xc8,0xc8,0xc8,0xc8,0x62,0x62,0x61, + 0x61,0x60,0xbc,0xc8,0xc8,0xc8,0xc8,0xc8,0x7e,0x5a,0x59,0x59,0x5a,0x5a,0xc4, + 0xc8,0xc8,0xc8,0xc8,0xc8,0x61,0x5e,0x5d,0x5a,0x58,0x57,0x57,0xc7,0xc8,0xc8, + 0xc8,0xc8,0xc7,0x5e,0x5e,0x5e,0x5e,0x5e,0x5e,0x5f,0xc7,0xc8,0xc8,0xc8,0xc8, + 0xc7,0x62,0x63,0xc7,0xc8,0xc8,0xc8,0xc8,0xc7,0x62,0x60,0x5f,0x5f,0x5e,0x5e, + 0x5f,0xc7,0xc8,0xc8,0xc8,0xc8,0xc7,0x5f,0x5e,0x5e,0x5e,0xc8,0xc8,0xc8,0xc8, + 0xc8,0xc4,0x55,0x50,0x4a,0x45,0x41,0x3d,0x39,0x36,0x36,0x36,0x36,0x39,0x3c, + 0x3f,0x44,0x49,0x4e,0xb6,0xc8,0xc8,0xc8,0xc8,0xc6,0x65,0xc7,0xc8,0xc8,0xc8, + 0xc8,0x9e,0x57,0x52,0x4e,0x4b,0x47,0x45,0x42,0x41,0x41,0x44,0x45,0x53,0xbd, + 0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0x98,0x5c,0x5a,0x57,0x53,0x4f,0x4b,0x47,0x43, + 0x40,0x3d,0x3c,0x3a,0x3a,0x3a,0x3b,0x3d,0x3f,0x41,0x45,0x49,0x4d,0xbc,0xc8, + 0xc8,0xc8,0xc8,0xc8,0x78,0x5e,0x5d,0x5d,0x5c,0x5c,0x79,0xc8,0xc8,0xc8,0xc8, + 0xc8,0xbb,0x54,0x50,0x4a,0x45,0x41,0x3d,0x39,0x36,0x34,0x32,0x30,0x30,0x30, + 0x30,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x30,0x30,0x30,0x30,0x30,0x30,0x30, + 0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x30,0x30,0x2f,0x30,0x30, + 0x30,0x30,0x31,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x31,0x30,0x30,0x30, + 0x30,0x30,0x30,0x30,0x31,0x31,0x31,0x31,0x31,0x31,0x30,0x30,0x31,0x31,0x31, + 0x32,0x32,0x32,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x30,0x30,0x30,0x30,0x31, + 0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31, + 0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31, + 0x32,0x32,0x32,0x32,0x32,0x31,0x31,0x31,0x32,0x32,0x32,0x32,0x31,0x32,0x32, + 0xc8,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x1f,0x1f,0x20,0x21,0x21,0x21,0x20,0x20,0x20,0x20,0x21,0x22,0x22,0x22,0x21, + 0x21,0x20,0x20,0x20,0x20,0x20,0x21,0x21,0x20,0x20,0x20,0x21,0x22,0x21,0x21, + 0x20,0x20,0x21,0x22,0x23,0x23,0x22,0x22,0x22,0x23,0x23,0x23,0x23,0x22,0x22, + 0x22,0x22,0x22,0x21,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x23,0x23,0x23,0x24, + 0x24,0x24,0x24,0x23,0x23,0x23,0x24,0x24,0x23,0x23,0x23,0x23,0x24,0x24,0x24, + 0x24,0x24,0x23,0x23,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24, + 0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x25,0x25,0x25, + 0x25,0x26,0x25,0x25,0x25,0x25,0x24,0x25,0x25,0x25,0x25,0x26,0x26,0x26,0x26, + 0x26,0x26,0x26,0x26,0x27,0x27,0x27,0x28,0x28,0x2a,0x2b,0x2e,0x32,0x36,0x3a, + 0x3f,0x5a,0xc7,0xc8,0xc8,0xc8,0xc8,0xc8,0xa4,0x8c,0xc8,0xc8,0xc8,0xc8,0xc8, + 0xc8,0xae,0x50,0x4c,0x47,0x44,0x42,0x42,0x44,0x47,0x4a,0x4f,0xc8,0xc8,0xc8, + 0xc8,0xc8,0xc4,0x58,0x55,0x51,0x4e,0x4c,0x4b,0x4b,0x4c,0x4f,0xc8,0xc8,0xc8, + 0xc8,0xc8,0xc4,0x5f,0x60,0x61,0x61,0x61,0xc4,0xc8,0xc8,0xc8,0xc8,0xc8,0x62, + 0x61,0x60,0x5f,0x5f,0xbc,0xc8,0xc8,0xc8,0xc8,0xc8,0x7e,0x5a,0x59,0x58,0x59, + 0x5a,0xc4,0xc8,0xc8,0xc8,0xc8,0xc8,0x60,0x5e,0x5b,0x5a,0x58,0x57,0x57,0xc0, + 0xc8,0xc8,0xc8,0xc8,0xc8,0x78,0x5e,0x5e,0x5e,0x5e,0x5f,0x75,0xc8,0xc8,0xc8, + 0xc8,0xc8,0xc0,0x65,0x65,0xc0,0xc8,0xc8,0xc8,0xc8,0xc8,0x7b,0x61,0x5f,0x5f, + 0x5f,0x5f,0x76,0xc8,0xc8,0xc8,0xc8,0xc8,0xc0,0x5f,0x5f,0x5f,0x5e,0xc8,0xc8, + 0xc8,0xc8,0xc8,0xc4,0x54,0x50,0x4b,0x45,0x41,0x3d,0x39,0x36,0x36,0x35,0x36, + 0x37,0x3b,0x3e,0x43,0x48,0x4d,0x83,0xc8,0xc8,0xc8,0xc8,0xc8,0xa7,0xc8,0xc8, + 0xc8,0xc8,0xc8,0x65,0x57,0x52,0x4e,0x4a,0x46,0x44,0x43,0x42,0x43,0x45,0x67, + 0xc4,0xc8,0xc8,0xc8,0xc8,0xc8,0xc7,0x8c,0x5e,0x5c,0x59,0x57,0x53,0x4f,0x4b, + 0x47,0x44,0x41,0x3e,0x3d,0x3d,0x3d,0x3d,0x3d,0x3f,0x41,0x43,0x46,0x4a,0x4f, + 0xa7,0xc8,0xc8,0xc8,0xc8,0xc8,0xa0,0x5e,0x5e,0x5d,0x5d,0x5c,0xa1,0xc8,0xc8, + 0xc8,0xc8,0xc8,0xa6,0x53,0x50,0x4b,0x45,0x41,0x3d,0x38,0x36,0x33,0x32,0x30, + 0x30,0x30,0x30,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x30,0x30,0x30,0x30,0x30,0x30, + 0x30,0x30,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x30,0x2f, + 0x2f,0x30,0x30,0x30,0x31,0x31,0x30,0x30,0x30,0x30,0x30,0x30,0x31,0x31,0x30, + 0x30,0x30,0x30,0x30,0x30,0x30,0x31,0x31,0x31,0x31,0x31,0x31,0x30,0x30,0x31, + 0x31,0x31,0x32,0x32,0x32,0x32,0x31,0x31,0x31,0x31,0x31,0x31,0x30,0x30,0x30, + 0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31, + 0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31, + 0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x30,0x30,0x30,0x31,0x32,0x32,0x31,0x31, + 0x32,0x32,0xc8,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x1f,0x1f,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x21,0x21,0x21, + 0x21,0x21,0x20,0x20,0x20,0x20,0x20,0x21,0x21,0x21,0x20,0x20,0x20,0x20,0x20, + 0x21,0x21,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x23,0x23,0x23, + 0x23,0x23,0x23,0x23,0x23,0x22,0x22,0x22,0x21,0x22,0x23,0x23,0x23,0x24,0x24, + 0x24,0x24,0x24,0x24,0x24,0x23,0x23,0x23,0x24,0x24,0x23,0x23,0x23,0x24,0x24, + 0x24,0x24,0x24,0x24,0x23,0x22,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24, + 0x25,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24, + 0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x26,0x26, + 0x26,0x26,0x26,0x26,0x26,0x26,0x27,0x27,0x28,0x28,0x29,0x2b,0x2c,0x2f,0x32, + 0x36,0x3b,0x40,0xbd,0xc8,0xc8,0xc8,0xc8,0xc8,0xc0,0x68,0x69,0xb2,0xc8,0xc8, + 0xc8,0xc8,0xc8,0xc8,0x82,0x4c,0x48,0x45,0x45,0x45,0x45,0x48,0x4c,0x50,0xc8, + 0xc8,0xc8,0xc8,0xc8,0xc4,0x58,0x55,0x52,0x4f,0x4c,0x4c,0x4c,0x4e,0x50,0xc8, + 0xc8,0xc8,0xc8,0xc8,0xc4,0x5e,0x5e,0x5f,0x5f,0x60,0xc4,0xc8,0xc8,0xc8,0xc8, + 0xc8,0x61,0x60,0x5f,0x5e,0x5e,0xbb,0xc8,0xc8,0xc8,0xc8,0xc8,0x7e,0x5a,0x59, + 0x58,0x58,0x5a,0xc4,0xc8,0xc8,0xc8,0xc8,0xc8,0x76,0x5d,0x5c,0x5a,0x59,0x57, + 0x58,0xa6,0xc8,0xc8,0xc8,0xc8,0xc8,0xb2,0x5f,0x5f,0x5f,0x5f,0x5f,0xb3,0xc8, + 0xc8,0xc8,0xc8,0xc8,0xa9,0x65,0x65,0xaa,0xc8,0xc8,0xc8,0xc8,0xc8,0xb2,0x61, + 0x5f,0x5f,0x5f,0x5f,0xb3,0xc8,0xc8,0xc8,0xc8,0xc8,0xa8,0x60,0x5f,0x5e,0x5f, + 0xc8,0xc8,0xc8,0xc8,0xc8,0xc4,0x54,0x50,0x4b,0x46,0x41,0x3c,0x39,0x36,0x35, + 0x34,0x36,0x36,0x3a,0x3d,0x41,0x46,0x4c,0x52,0xc5,0xc8,0xc8,0xc8,0xc8,0xc8, + 0xc8,0xc8,0xc8,0xc8,0xb9,0x5b,0x57,0x52,0x4d,0x49,0x46,0x44,0x44,0x44,0x45, + 0x85,0xc7,0xc8,0xc8,0xc8,0xc8,0xc8,0xc4,0x79,0x5f,0x5e,0x5c,0x5a,0x57,0x53, + 0x4f,0x4b,0x48,0x45,0x42,0x40,0xc8,0xc8,0xc8,0xc8,0xc8,0xc4,0x42,0x45,0x47, + 0x4b,0x4f,0x79,0xc8,0xc8,0xc8,0xc8,0xc8,0xc4,0x62,0x5e,0x5e,0x5e,0x61,0xc4, + 0xc8,0xc8,0xc8,0xc8,0xc8,0x7a,0x54,0x50,0x4a,0x45,0x41,0x3c,0x38,0x36,0x34, + 0x32,0x31,0x30,0x30,0x30,0x2f,0x30,0x30,0x2f,0x2f,0x2f,0x30,0x30,0x30,0x31, + 0x31,0x30,0x30,0x30,0x31,0x31,0x31,0x31,0x30,0x31,0x32,0x31,0x31,0x31,0x31, + 0x30,0x2f,0x2f,0x30,0x31,0x31,0x31,0x31,0x30,0x30,0x30,0x31,0x31,0x31,0x31, + 0x31,0x31,0x31,0x31,0x31,0x31,0x30,0x30,0x31,0x32,0x32,0x31,0x31,0x31,0x30, + 0x30,0x30,0x30,0x31,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x31,0x31,0x31, + 0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x32,0x32, + 0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32, + 0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x31,0x31,0x31,0x31,0x31,0x32,0x32,0x31, + 0x31,0x31,0x31,0x31,0xc8,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x20,0x20,0x20,0x20, + 0x20,0x21,0x21,0x20,0x1f,0x1f,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x21, + 0x21,0x21,0x20,0x20,0x20,0x20,0x20,0x20,0x21,0x21,0x21,0x21,0x20,0x20,0x20, + 0x20,0x20,0x21,0x22,0x23,0x22,0x22,0x22,0x21,0x21,0x22,0x22,0x22,0x22,0x23, + 0x23,0x23,0x23,0x23,0x24,0x23,0x23,0x23,0x22,0x22,0x21,0x22,0x23,0x24,0x24, + 0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x23,0x23,0x24,0x24,0x24,0x23,0x24,0x24, + 0x24,0x24,0x25,0x24,0x24,0x24,0x23,0x22,0x24,0x25,0x24,0x24,0x24,0x24,0x24, + 0x24,0x25,0x25,0x25,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24, + 0x24,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x26, + 0x26,0x26,0x26,0x26,0x26,0x26,0x26,0x26,0x27,0x28,0x28,0x29,0x2b,0x2c,0x2e, + 0x2f,0x32,0x37,0x3c,0x9a,0xc8,0xc8,0xc8,0xc8,0xc8,0xc7,0x77,0x65,0x67,0x6c, + 0xc5,0xc8,0xc8,0xc8,0xc8,0xc8,0xc5,0x59,0x4a,0x48,0x45,0x45,0x47,0x48,0x4d, + 0x51,0xc8,0xc8,0xc8,0xc8,0xc8,0xc4,0x58,0x55,0x52,0x4f,0x4d,0x4c,0x4c,0x4e, + 0x50,0xc8,0xc8,0xc8,0xc8,0xc8,0xc4,0x5e,0x5e,0x5d,0x5d,0x5e,0xc4,0xc8,0xc8, + 0xc8,0xc8,0xc8,0x5f,0x5e,0x5d,0x5c,0x5d,0xbb,0xc8,0xc8,0xc8,0xc8,0xc8,0x7d, + 0x59,0x57,0x57,0x57,0x58,0xc0,0xc8,0xc8,0xc8,0xc8,0xc8,0xbd,0x6a,0x5c,0x6d, + 0x9d,0x59,0x59,0x6a,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xac,0x6c,0x5f,0x6a,0xaa, + 0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0x72,0x63,0x63,0x72,0xc8,0xc8,0xc8,0xc8,0xc8, + 0xc8,0xac,0x6d,0x5f,0x6a,0xaa,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0x6e,0x5e,0x5e, + 0x5e,0x5e,0xc8,0xc8,0xc8,0xc8,0xc8,0xc4,0x53,0x4f,0x4a,0x45,0x41,0x3c,0x39, + 0x36,0x34,0x33,0x34,0x36,0x39,0x3c,0x41,0x45,0x4b,0x50,0xaa,0xc8,0xc8,0xc8, + 0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0x8c,0x5a,0x56,0x51,0x4c,0x49,0x46,0x45,0x44, + 0x48,0xa8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xba,0x68,0x61,0x61,0x5e,0x5e,0x5a, + 0x56,0x53,0x4f,0x4c,0x48,0x45,0x43,0x41,0xc8,0xc8,0xc8,0xc8,0xc8,0xc4,0x45, + 0x46,0x48,0x4c,0x4f,0x53,0xc2,0xc8,0xc8,0xc8,0xc8,0xc8,0xbb,0x73,0x5f,0x73, + 0xbc,0xc8,0xc8,0xc8,0xc8,0xc8,0xc2,0x58,0x53,0x4f,0x49,0x45,0x40,0x3b,0x38, + 0x36,0x34,0x32,0x31,0x30,0x30,0x30,0x2f,0x30,0x30,0x2f,0x2f,0x2f,0x30,0x30, + 0x30,0x31,0x31,0x30,0x30,0x30,0x30,0x31,0x31,0x30,0x2f,0x31,0x32,0x31,0x31, + 0x31,0x30,0x30,0x2f,0x2f,0x30,0x31,0x31,0x31,0x31,0x30,0x30,0x30,0x31,0x31, + 0x32,0x31,0x31,0x32,0x31,0x31,0x31,0x31,0x30,0x30,0x31,0x32,0x32,0x32,0x31, + 0x31,0x30,0x30,0x30,0x30,0x31,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32, + 0x31,0x31,0x31,0x32,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x32, + 0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32, + 0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32, + 0x32,0x32,0x32,0x32,0x31,0x31,0xc8,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x20,0x20, + 0x20,0x20,0x21,0x21,0x21,0x20,0x1f,0x1f,0x1f,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x21,0x21,0x21,0x21,0x21,0x21, + 0x21,0x21,0x20,0x1f,0x21,0x22,0x23,0x22,0x22,0x21,0x21,0x21,0x22,0x22,0x22, + 0x22,0x23,0x23,0x23,0x23,0x24,0x24,0x23,0x23,0x23,0x22,0x22,0x22,0x23,0x24, + 0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24, + 0x24,0x24,0x24,0x24,0x25,0x24,0x24,0x24,0x23,0x23,0x24,0x25,0x24,0x24,0x24, + 0x24,0x24,0x25,0x25,0x25,0x25,0x25,0x24,0x24,0x25,0x25,0x25,0x24,0x24,0x24, + 0x24,0x24,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x26,0x26,0x26, + 0x26,0x26,0x26,0x26,0x26,0x27,0x27,0x27,0x27,0x28,0x28,0x28,0x29,0x29,0x2b, + 0x2c,0x2f,0x31,0x35,0x39,0x67,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0x9c,0x60,0x62, + 0x64,0x64,0x89,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xb5,0x4c,0x48,0x48,0x47,0xc7, + 0xc7,0xc7,0xc7,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc7,0xc7,0xc7,0xc7,0x4e,0x4c, + 0x4c,0x4f,0x50,0xc8,0xc8,0xc8,0xc8,0xc8,0xc4,0x5a,0x5b,0x5b,0x5b,0x5a,0xc4, + 0xc8,0xc8,0xc8,0xc8,0xc8,0x5d,0x5d,0x5c,0x5a,0x5a,0xbb,0xc8,0xc8,0xc8,0xc8, + 0xc8,0x7c,0x57,0x57,0x56,0x56,0x57,0xae,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8, + 0xc8,0xc8,0xc8,0x58,0x59,0x59,0xa4,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8, + 0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xa5,0x62,0x62,0x61,0x61,0xa7,0xc8,0xc8, + 0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xa4,0x5e, + 0x5d,0x5d,0x5c,0x5c,0xc8,0xc8,0xc8,0xc8,0xc8,0xc4,0x53,0x4e,0x4a,0x45,0x3f, + 0x3b,0x38,0x36,0x33,0x33,0x33,0x36,0x37,0x3b,0x3e,0x44,0x49,0x4e,0x6e,0xc8, + 0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc6,0x5e,0x59,0x55,0x50,0x4c,0x48,0x46, + 0x45,0x45,0xc0,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc7,0xc7,0xc7,0xc7,0xc7, + 0xc7,0xc7,0xc7,0xc7,0xc7,0x4c,0x48,0x47,0x45,0x44,0xc8,0xc8,0xc8,0xc8,0xc8, + 0xc4,0x46,0x47,0x49,0x4c,0x4f,0x52,0x84,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8, + 0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0x89,0x57,0x53,0x4d,0x48,0x43,0x3f, + 0x3a,0x38,0x36,0x34,0x32,0x32,0x31,0x31,0x31,0x30,0x30,0x30,0x30,0x30,0x30, + 0x30,0x30,0x30,0x31,0x31,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x2f,0x31,0x32, + 0x31,0x31,0x31,0x30,0x30,0x30,0x30,0x30,0x31,0x31,0x32,0x31,0x30,0x30,0x30, + 0x31,0x31,0x32,0x32,0x32,0x32,0x32,0x31,0x31,0x31,0x30,0x30,0x31,0x32,0x32, + 0x32,0x32,0x31,0x30,0x30,0x30,0x30,0x31,0x32,0x32,0x32,0x32,0x32,0x32,0x32, + 0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32, + 0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32, + 0x32,0x32,0x32,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x34,0x34,0x34,0x34, + 0x34,0x33,0x33,0x32,0x32,0x32,0x32,0x32,0xc8,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x21,0x21,0x21,0x21,0x20,0x20,0x1f,0x20,0x20,0x20,0x20,0x20, + 0x21,0x21,0x20,0x20,0x20,0x20,0x20,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21, + 0x21,0x22,0x22,0x22,0x20,0x20,0x22,0x23,0x24,0x23,0x22,0x21,0x21,0x22,0x22, + 0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23, + 0x23,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24, + 0x24,0x24,0x24,0x24,0x24,0x24,0x25,0x24,0x24,0x24,0x24,0x24,0x24,0x25,0x24, + 0x24,0x24,0x24,0x24,0x26,0x26,0x26,0x25,0x25,0x24,0x25,0x26,0x26,0x25,0x25, + 0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x26,0x26,0x26,0x26,0x26,0x26,0x27, + 0x27,0x27,0x27,0x26,0x26,0x26,0x26,0x27,0x28,0x28,0x28,0x28,0x28,0x28,0x29, + 0x2a,0x2b,0x2c,0x2f,0x32,0x36,0x42,0xc3,0xc8,0xc8,0xc8,0xc8,0xc8,0xbd,0x5a, + 0x5c,0x5e,0x5f,0x5f,0x5f,0xb1,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0x8d,0x4a,0x48, + 0x48,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8, + 0x4e,0x4c,0x4d,0x4e,0x4f,0xc8,0xc8,0xc8,0xc8,0xc8,0xc4,0x59,0x59,0x58,0x58, + 0x58,0xc4,0xc8,0xc8,0xc8,0xc8,0xc8,0x5b,0x5a,0x5a,0x59,0x59,0xbb,0xc8,0xc8, + 0xc8,0xc8,0xc8,0x7b,0x55,0x55,0x54,0x54,0x55,0x73,0xc8,0xc8,0xc8,0xc8,0xc8, + 0xc8,0xc8,0xc8,0xc8,0xc8,0x56,0x56,0x57,0x58,0xb4,0xc8,0xc8,0xc8,0xc8,0xc8, + 0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xb4,0x5f,0x5f,0x5e,0x5e,0x5e,0x5e, + 0xb5,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xb3, + 0x5c,0x5b,0x5b,0x5b,0x5a,0x5a,0xc8,0xc8,0xc8,0xc8,0xc8,0xc4,0x51,0x4d,0x48, + 0x44,0x3e,0x3b,0x38,0x36,0x34,0x34,0x34,0x35,0x36,0x3a,0x3d,0x41,0x46,0x4c, + 0x51,0xc0,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xae,0x5b,0x58,0x53,0x4f,0x4b, + 0x48,0x46,0x45,0x46,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8, + 0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0x4c,0x49,0x47,0x45,0x45,0xc8,0xc8,0xc8, + 0xc8,0xc8,0xc4,0x48,0x48,0x49,0x4c,0x4e,0x50,0x53,0xa5,0xc8,0xc8,0xc8,0xc8, + 0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xa9,0x57,0x53,0x50,0x4b,0x46, + 0x42,0x3d,0x3a,0x37,0x35,0x33,0x32,0x32,0x32,0x32,0x30,0x30,0x30,0x30,0x30, + 0x30,0x31,0x30,0x30,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x30,0x30, + 0x31,0x32,0x32,0x32,0x32,0x31,0x31,0x31,0x31,0x31,0x31,0x32,0x32,0x32,0x30, + 0x30,0x31,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x31,0x31,0x31,0x32, + 0x32,0x32,0x32,0x32,0x32,0x31,0x31,0x31,0x31,0x32,0x32,0x32,0x32,0x32,0x32, + 0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32, + 0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32, + 0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x33,0x33, + 0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x32,0x33,0xc8,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x21,0x21,0x21,0x21,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x21,0x21,0x21,0x21,0x20,0x20,0x20,0x21,0x21,0x21,0x21,0x21,0x21,0x21, + 0x21,0x21,0x21,0x22,0x22,0x23,0x21,0x21,0x23,0x24,0x24,0x23,0x22,0x21,0x22, + 0x22,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23, + 0x23,0x23,0x23,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24, + 0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x25, + 0x25,0x24,0x24,0x24,0x24,0x25,0x26,0x26,0x26,0x26,0x25,0x24,0x25,0x26,0x26, + 0x26,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x26,0x26,0x26,0x26,0x26,0x26, + 0x27,0x27,0x27,0x27,0x27,0x27,0x26,0x26,0x26,0x28,0x28,0x28,0x28,0x28,0x28, + 0x28,0x29,0x2a,0x2b,0x2d,0x2f,0x32,0x36,0xac,0xc8,0xc8,0xc8,0xc8,0xc8,0xc7, + 0x68,0x57,0x59,0x59,0x5b,0x5b,0x5b,0x61,0xc5,0xc8,0xc8,0xc8,0xc8,0xc8,0xc7, + 0x61,0x48,0x48,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8, + 0xc8,0xc8,0x4e,0x4c,0x4c,0x4d,0x4f,0xc8,0xc8,0xc8,0xc8,0xc8,0xc4,0x57,0x56, + 0x56,0x56,0x55,0xc4,0xc8,0xc8,0xc8,0xc8,0xc8,0x58,0x57,0x57,0x56,0x57,0xba, + 0xc8,0xc8,0xc8,0xc8,0xc8,0x79,0x53,0x53,0x51,0x51,0x52,0x54,0x9b,0xc8,0xc8, + 0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0x54,0x54,0x54,0x56,0x57,0xa0,0xc7,0xc8, + 0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc7,0xa0,0x5c,0x5b,0x5b,0x5a,0x5a, + 0x5a,0x5a,0x5b,0xa0,0xc7,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc7, + 0xa0,0x5a,0x59,0x59,0x59,0x58,0x57,0x57,0xc8,0xc8,0xc8,0xc8,0xc8,0xc4,0x50, + 0x4c,0x47,0x43,0x3e,0x3a,0x37,0x35,0x34,0x32,0x32,0x34,0x36,0x38,0x3c,0x40, + 0x45,0x49,0x4e,0x9b,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0x76,0x59,0x56,0x51, + 0x4c,0x49,0x47,0x45,0x45,0x45,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8, + 0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0x4c,0x49,0x48,0x47,0x46,0xc8, + 0xc8,0xc8,0xc8,0xc8,0xc4,0x48,0x48,0x49,0x4b,0x4c,0x4f,0x51,0x54,0x98,0xc7, + 0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc7,0x9b,0x58,0x55,0x51,0x4d, + 0x48,0x45,0x40,0x3d,0x39,0x36,0x34,0x33,0x32,0x32,0x32,0x32,0x30,0x30,0x30, + 0x30,0x30,0x31,0x31,0x30,0x30,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31, + 0x31,0x30,0x31,0x32,0x32,0x32,0x32,0x32,0x31,0x31,0x31,0x31,0x32,0x32,0x32, + 0x32,0x30,0x30,0x31,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x31, + 0x31,0x32,0x32,0x32,0x32,0x32,0x32,0x31,0x31,0x31,0x32,0x32,0x32,0x32,0x32, + 0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32, + 0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32, + 0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32, + 0x32,0x32,0x32,0x32,0x32,0x32,0x33,0x33,0x33,0x33,0x33,0x33,0xc8,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x21,0x20,0x20, + 0x20,0x20,0x21,0x22,0x22,0x22,0x22,0x21,0x20,0x20,0x21,0x22,0x22,0x22,0x22, + 0x21,0x20,0x20,0x20,0x21,0x22,0x23,0x24,0x22,0x22,0x24,0x24,0x24,0x24,0x22, + 0x22,0x22,0x23,0x24,0x24,0x24,0x24,0x24,0x23,0x23,0x23,0x23,0x23,0x23,0x23, + 0x23,0x23,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24, + 0x24,0x24,0x24,0x25,0x25,0x24,0x24,0x24,0x24,0x24,0x23,0x23,0x23,0x24,0x24, + 0x24,0x25,0x26,0x25,0x24,0x24,0x24,0x25,0x26,0x27,0x27,0x26,0x25,0x24,0x25, + 0x27,0x27,0x27,0x26,0x26,0x26,0x26,0x26,0x26,0x26,0x26,0x26,0x26,0x26,0x26, + 0x26,0x27,0x27,0x28,0x28,0x28,0x27,0x27,0x27,0x27,0x27,0x28,0x28,0x28,0x28, + 0x28,0x28,0x29,0x29,0x2b,0x2b,0x2d,0x2f,0x32,0x7a,0xc8,0xc8,0xc8,0xc8,0xc8, + 0xc8,0x92,0x52,0x53,0x54,0x55,0x57,0x57,0x57,0x57,0x82,0xc8,0xc8,0xc8,0xc8, + 0xc8,0xc8,0xbd,0x4a,0x4a,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8, + 0xc8,0xc8,0xc8,0xc8,0x4d,0x4c,0x4b,0x4c,0x4c,0xc8,0xc8,0xc8,0xc8,0xc8,0xc4, + 0x53,0x53,0x52,0x52,0x52,0xc4,0xc8,0xc8,0xc8,0xc8,0xc8,0x56,0x54,0x54,0x53, + 0x53,0xba,0xc8,0xc8,0xc8,0xc8,0xc8,0x77,0x50,0x50,0x4e,0x4e,0x4f,0x50,0x51, + 0x75,0xb2,0xc4,0xc7,0xc8,0xc8,0xc7,0xc3,0xb5,0x52,0x52,0x53,0x53,0x54,0x56, + 0x62,0x9e,0xbd,0xc5,0xc8,0xc8,0xc8,0xc5,0xbc,0x9e,0x63,0x59,0x58,0x57,0x57, + 0x56,0x56,0x56,0x56,0x57,0x58,0x64,0x9f,0xbd,0xc5,0xc8,0xc8,0xc8,0xc5,0xbc, + 0x9f,0x62,0x59,0x57,0x57,0x56,0x56,0x54,0x53,0x53,0xc8,0xc8,0xc8,0xc8,0xc8, + 0xc4,0x4d,0x49,0x45,0x41,0x3d,0x3a,0x37,0x34,0x32,0x32,0x32,0x33,0x35,0x37, + 0x3a,0x3d,0x41,0x46,0x4c,0x5c,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc1,0x59,0x56, + 0x53,0x4e,0x4a,0x47,0x45,0x44,0x44,0x45,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8, + 0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0x4c,0x4a,0x48,0x47, + 0x47,0xc8,0xc8,0xc8,0xc8,0xc8,0xc4,0x48,0x48,0x49,0x4a,0x4c,0x4e,0x50,0x52, + 0x55,0x62,0xa0,0xbd,0xc5,0xc8,0xc8,0xc8,0xc6,0xbd,0xa2,0x65,0x58,0x56,0x53, + 0x4f,0x4a,0x46,0x43,0x3f,0x3c,0x3a,0x36,0x33,0x32,0x32,0x32,0x32,0x32,0x30, + 0x2f,0x2f,0x2f,0x30,0x31,0x31,0x30,0x30,0x31,0x31,0x31,0x31,0x31,0x32,0x32, + 0x32,0x32,0x32,0x31,0x31,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32, + 0x32,0x32,0x32,0x31,0x31,0x31,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32, + 0x32,0x31,0x31,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32, + 0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x33,0x33, + 0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x32,0x32,0x32,0x32, + 0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x33,0x33,0x33,0x33,0x33,0x33, + 0x33,0x33,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x33,0x33,0xc8, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x21, + 0x20,0x20,0x20,0x20,0x21,0x21,0x21,0x21,0x21,0x21,0x20,0x20,0x22,0x22,0x22, + 0x22,0x22,0x22,0x21,0x21,0x21,0x22,0x22,0x22,0x23,0x22,0x22,0x23,0x24,0x24, + 0x23,0x23,0x23,0x23,0x23,0x24,0x24,0x24,0x24,0x24,0x24,0x23,0x23,0x23,0x23, + 0x23,0x23,0x23,0x23,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24, + 0x24,0x24,0x24,0x25,0x25,0x26,0x25,0x25,0x24,0x24,0x24,0x24,0x24,0x24,0x24, + 0x24,0x25,0x25,0x26,0x26,0x26,0x25,0x25,0x25,0x25,0x25,0x26,0x26,0x26,0x25, + 0x25,0x26,0x28,0x27,0x27,0x26,0x26,0x26,0x26,0x26,0x26,0x26,0x26,0x26,0x27, + 0x27,0x27,0x27,0x27,0x28,0x28,0x28,0x28,0x28,0x27,0x27,0x27,0x27,0x28,0x28, + 0x28,0x28,0x28,0x28,0x2a,0x29,0x2b,0x2b,0x2d,0x2f,0x32,0x36,0x39,0x3d,0x41, + 0x45,0x48,0x4a,0x4c,0x4e,0x4f,0x50,0x50,0x51,0x52,0x52,0x52,0x52,0x51,0x50, + 0x50,0x4f,0x4c,0x4b,0x4a,0x49,0x49,0x4a,0x4c,0x4f,0x51,0x54,0x55,0x57,0x57, + 0x57,0x57,0x54,0x53,0x50,0x4d,0x4c,0x49,0x48,0x49,0x4a,0x4c,0x4c,0x4e,0x4f, + 0x4f,0x4f,0x4f,0x4f,0x4f,0x4f,0x4f,0x4f,0x50,0x50,0x51,0x51,0x51,0x51,0x50, + 0x50,0x50,0x50,0x50,0x50,0x50,0x50,0x50,0x50,0x4e,0x4d,0x4c,0x4b,0x4b,0x4c, + 0x4c,0x4e,0x50,0x51,0x52,0x53,0x53,0x53,0x53,0x51,0x50,0x50,0x4f,0x50,0x50, + 0x50,0x52,0x53,0x54,0x54,0x55,0x56,0x57,0x57,0x57,0x56,0x55,0x56,0x55,0x54, + 0x53,0x51,0x51,0x50,0x51,0x52,0x52,0x53,0x54,0x56,0x57,0x57,0x57,0x58,0x58, + 0x57,0x57,0x57,0x57,0x55,0x54,0x53,0x53,0x51,0x50,0x50,0x50,0x50,0x51,0x51, + 0x51,0x50,0x4d,0x4b,0x47,0x43,0x3f,0x3c,0x38,0x36,0x34,0x32,0x32,0x32,0x32, + 0x35,0x36,0x39,0x3c,0x40,0x44,0x49,0x4d,0x52,0x55,0x58,0x5a,0x5a,0x59,0x58, + 0x55,0x52,0x4f,0x4b,0x47,0x45,0x42,0x41,0x43,0x45,0x47,0x49,0x4e,0x51,0x56, + 0x58,0x5b,0x5e,0x5e,0x5e,0x5e,0x5d,0x5b,0x58,0x56,0x53,0x50,0x4e,0x4b,0x49, + 0x47,0x47,0x47,0x47,0x47,0x47,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x4a,0x4b, + 0x4e,0x4f,0x52,0x53,0x56,0x58,0x59,0x59,0x5a,0x5a,0x5a,0x5a,0x5a,0x58,0x56, + 0x53,0x4f,0x4c,0x48,0x45,0x41,0x3d,0x3a,0x39,0x36,0x33,0x32,0x32,0x32,0x32, + 0x32,0x31,0x30,0x30,0x30,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31, + 0x32,0x32,0x32,0x32,0x32,0x31,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32, + 0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x33,0x33,0x32,0x33,0x32, + 0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x33,0x33,0x32,0x32,0x32,0x32,0x32,0x32, + 0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x33,0x33,0x33, + 0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x32,0x32, + 0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x33,0x34,0x34,0x34,0x34, + 0x34,0x34,0x34,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33, + 0x33,0xc8,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x22, + 0x22,0x22,0x23,0x23,0x23,0x23,0x22,0x22,0x22,0x22,0x22,0x21,0x22,0x22,0x23, + 0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24, + 0x24,0x24,0x23,0x23,0x23,0x23,0x24,0x25,0x25,0x24,0x24,0x24,0x24,0x24,0x24, + 0x24,0x24,0x24,0x24,0x25,0x26,0x26,0x26,0x26,0x25,0x25,0x25,0x26,0x26,0x26, + 0x25,0x25,0x26,0x27,0x27,0x26,0x25,0x26,0x26,0x26,0x25,0x25,0x25,0x25,0x25, + 0x25,0x25,0x26,0x27,0x28,0x27,0x27,0x26,0x26,0x26,0x26,0x26,0x26,0x27,0x27, + 0x27,0x27,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x27,0x27,0x27, + 0x28,0x28,0x28,0x28,0x28,0x29,0x2a,0x2a,0x2b,0x2c,0x2e,0x30,0x32,0x36,0x39, + 0x3c,0x3f,0x42,0x45,0x48,0x49,0x4a,0x4b,0x4c,0x4c,0x4c,0x4c,0x4c,0x4c,0x4c, + 0x4c,0x4c,0x4c,0x4c,0x4a,0x48,0x48,0x48,0x48,0x48,0x4b,0x4c,0x4f,0x51,0x53, + 0x53,0x54,0x54,0x53,0x51,0x4f,0x4c,0x4a,0x48,0x48,0x46,0x46,0x47,0x48,0x49, + 0x4b,0x4b,0x4c,0x4c,0x4b,0x4b,0x4b,0x4b,0x4c,0x4c,0x4c,0x4c,0x4c,0x4c,0x4c, + 0x4c,0x4c,0x4b,0x4b,0x4b,0x4c,0x4c,0x4c,0x4c,0x4c,0x4b,0x49,0x48,0x48,0x48, + 0x48,0x48,0x48,0x4a,0x4c,0x4d,0x4e,0x4f,0x50,0x50,0x4f,0x4e,0x4d,0x4c,0x4c, + 0x4c,0x4c,0x4c,0x4d,0x4e,0x50,0x51,0x51,0x53,0x53,0x53,0x53,0x53,0x52,0x51, + 0x50,0x4f,0x4e,0x4d,0x4c,0x4c,0x4c,0x4d,0x4e,0x4f,0x50,0x51,0x53,0x53,0x53, + 0x53,0x53,0x53,0x53,0x53,0x51,0x51,0x50,0x4f,0x4d,0x4c,0x4c,0x4c,0x4c,0x4c, + 0x4c,0x4d,0x4c,0x4c,0x49,0x47,0x44,0x41,0x3e,0x3a,0x37,0x36,0x33,0x32,0x32, + 0x32,0x32,0x33,0x35,0x37,0x3a,0x3e,0x41,0x45,0x4a,0x4e,0x51,0x53,0x56,0x55, + 0x55,0x53,0x51,0x4e,0x4a,0x47,0x45,0x42,0x41,0x41,0x41,0x43,0x45,0x48,0x4c, + 0x4f,0x53,0x56,0x58,0x5a,0x5b,0x5b,0x5a,0x59,0x58,0x56,0x53,0x50,0x4e,0x4b, + 0x49,0x47,0x47,0x46,0x46,0x46,0x47,0x48,0x48,0x47,0x46,0x46,0x47,0x46,0x46, + 0x47,0x48,0x4a,0x4c,0x4f,0x50,0x52,0x54,0x56,0x56,0x56,0x56,0x57,0x56,0x56, + 0x54,0x52,0x4f,0x4c,0x48,0x45,0x41,0x3e,0x3b,0x3a,0x37,0x35,0x35,0x33,0x32, + 0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32, + 0x31,0x31,0x32,0x32,0x32,0x32,0x32,0x31,0x32,0x32,0x32,0x32,0x32,0x32,0x32, + 0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x33,0x33,0x33, + 0x33,0x33,0x32,0x32,0x32,0x32,0x33,0x33,0x33,0x33,0x33,0x33,0x32,0x32,0x32, + 0x32,0x32,0x32,0x32,0x32,0x32,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33, + 0x34,0x33,0x32,0x33,0x33,0x33,0x33,0x33,0x32,0x32,0x32,0x32,0x32,0x33,0x33, + 0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x35,0x35, + 0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x35,0x35,0x35,0x35, + 0x34,0x33,0x33,0xc8,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x22,0x22,0x22,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x22,0x22,0x22, + 0x22,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x24,0x24,0x24,0x24,0x24,0x24, + 0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24, + 0x24,0x24,0x24,0x24,0x24,0x25,0x26,0x26,0x26,0x26,0x25,0x24,0x24,0x24,0x25, + 0x26,0x26,0x26,0x25,0x25,0x26,0x26,0x26,0x25,0x25,0x26,0x26,0x26,0x26,0x25, + 0x25,0x25,0x25,0x26,0x26,0x27,0x28,0x28,0x27,0x27,0x27,0x27,0x27,0x27,0x27, + 0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28, + 0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x29,0x2a,0x2b,0x2d,0x30,0x32, + 0x34,0x37,0x3a,0x3d,0x3f,0x42,0x44,0x45,0x45,0x46,0x46,0x46,0x46,0x46,0x47, + 0x47,0x48,0x48,0x48,0x48,0x48,0x47,0x45,0x45,0x45,0x45,0x45,0x48,0x49,0x4c, + 0x4c,0x4e,0x4f,0x50,0x50,0x4f,0x4d,0x4b,0x48,0x46,0x45,0x45,0x44,0x43,0x44, + 0x45,0x45,0x46,0x47,0x47,0x47,0x46,0x47,0x47,0x47,0x48,0x48,0x48,0x48,0x48, + 0x48,0x48,0x48,0x48,0x48,0x47,0x46,0x47,0x47,0x47,0x47,0x47,0x46,0x46,0x45, + 0x43,0x43,0x43,0x44,0x45,0x47,0x48,0x48,0x4b,0x4c,0x4c,0x4c,0x4c,0x4b,0x49, + 0x48,0x48,0x48,0x48,0x48,0x49,0x4b,0x4c,0x4c,0x4d,0x4f,0x4f,0x4f,0x4f,0x4e, + 0x4e,0x4c,0x4c,0x4b,0x49,0x48,0x47,0x48,0x48,0x48,0x49,0x4b,0x4c,0x4d,0x4e, + 0x4f,0x4f,0x50,0x50,0x50,0x4f,0x4e,0x4e,0x4c,0x4c,0x4a,0x48,0x47,0x46,0x46, + 0x48,0x48,0x48,0x49,0x48,0x48,0x47,0x44,0x41,0x3f,0x3d,0x3a,0x37,0x35,0x33, + 0x32,0x32,0x32,0x32,0x32,0x34,0x36,0x39,0x3c,0x3e,0x41,0x46,0x49,0x4d,0x4f, + 0x50,0x51,0x50,0x4f,0x4c,0x49,0x47,0x45,0x42,0x40,0x3f,0x3f,0x40,0x41,0x43, + 0x47,0x49,0x4c,0x50,0x52,0x54,0x56,0x57,0x57,0x57,0x56,0x54,0x53,0x50,0x4e, + 0x4c,0x49,0x48,0x46,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x44,0x45, + 0x44,0x45,0x44,0x45,0x47,0x48,0x4a,0x4c,0x4d,0x50,0x51,0x53,0x53,0x52,0x53, + 0x51,0x51,0x50,0x4e,0x4b,0x48,0x45,0x42,0x3f,0x3c,0x3a,0x38,0x36,0x35,0x34, + 0x33,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32, + 0x32,0x32,0x32,0x32,0x32,0x32,0x33,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32, + 0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x33,0x33,0x33, + 0x33,0x33,0x32,0x32,0x32,0x32,0x32,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x32, + 0x32,0x32,0x32,0x32,0x33,0x32,0x32,0x32,0x33,0x34,0x34,0x34,0x33,0x33,0x33, + 0x34,0x34,0x34,0x34,0x33,0x34,0x34,0x34,0x34,0x34,0x33,0x32,0x32,0x32,0x33, + 0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34, + 0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x35,0x35,0x34, + 0x34,0x33,0x33,0x33,0x33,0xc8,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x22,0x22,0x22,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23, + 0x23,0x23,0x22,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x24,0x24,0x24,0x24, + 0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x23,0x23, + 0x23,0x24,0x24,0x24,0x24,0x24,0x25,0x25,0x26,0x26,0x26,0x25,0x24,0x24,0x24, + 0x24,0x25,0x26,0x26,0x25,0x25,0x25,0x25,0x26,0x25,0x25,0x25,0x25,0x26,0x26, + 0x26,0x25,0x25,0x25,0x26,0x26,0x26,0x27,0x28,0x28,0x28,0x27,0x27,0x27,0x27, + 0x27,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28, + 0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x29,0x2a,0x2b,0x2d, + 0x2f,0x31,0x33,0x36,0x38,0x3a,0x3d,0x3e,0x3f,0x41,0x41,0x41,0x41,0x41,0x41, + 0x41,0x41,0x42,0x42,0x43,0x43,0x43,0x43,0x42,0x42,0x42,0x42,0x42,0x42,0x45, + 0x45,0x48,0x48,0x49,0x4a,0x4b,0x4b,0x4a,0x48,0x46,0x45,0x42,0x41,0x41,0x40, + 0x40,0x40,0x41,0x41,0x42,0x43,0x43,0x43,0x42,0x43,0x43,0x43,0x43,0x43,0x43, + 0x44,0x45,0x45,0x45,0x44,0x43,0x43,0x43,0x43,0x43,0x43,0x43,0x43,0x43,0x42, + 0x41,0x40,0x3f,0x3f,0x3f,0x40,0x41,0x43,0x44,0x45,0x46,0x46,0x47,0x47,0x47, + 0x46,0x45,0x45,0x44,0x44,0x44,0x44,0x45,0x46,0x46,0x48,0x49,0x49,0x4a,0x4b, + 0x4a,0x49,0x48,0x48,0x47,0x45,0x44,0x44,0x43,0x42,0x42,0x44,0x45,0x45,0x47, + 0x48,0x49,0x4a,0x4a,0x4b,0x4b,0x4b,0x4a,0x4a,0x49,0x48,0x47,0x45,0x44,0x43, + 0x42,0x43,0x44,0x44,0x44,0x45,0x44,0x44,0x42,0x41,0x3e,0x3c,0x3a,0x37,0x36, + 0x33,0x32,0x32,0x31,0x31,0x32,0x32,0x33,0x35,0x37,0x3a,0x3c,0x3f,0x41,0x45, + 0x48,0x49,0x4b,0x4c,0x4b,0x49,0x48,0x45,0x43,0x41,0x3f,0x3d,0x3d,0x3d,0x3d, + 0x3f,0x41,0x44,0x47,0x49,0x4c,0x4e,0x50,0x51,0x52,0x52,0x52,0x51,0x50,0x4f, + 0x4c,0x4a,0x48,0x47,0x45,0x44,0x43,0x42,0x43,0x43,0x43,0x43,0x43,0x43,0x42, + 0x42,0x41,0x41,0x41,0x41,0x41,0x43,0x45,0x45,0x48,0x49,0x4c,0x4c,0x4e,0x4e, + 0x4d,0x4e,0x4e,0x4c,0x4c,0x4a,0x47,0x45,0x41,0x3f,0x3c,0x3a,0x39,0x36,0x35, + 0x35,0x33,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32, + 0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x33,0x33,0x33,0x32,0x32,0x32,0x32,0x32, + 0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x33, + 0x33,0x33,0x33,0x33,0x32,0x32,0x32,0x32,0x32,0x33,0x33,0x33,0x33,0x33,0x33, + 0x33,0x32,0x32,0x32,0x32,0x33,0x33,0x33,0x33,0x33,0x34,0x34,0x34,0x34,0x33, + 0x33,0x33,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x33,0x32, + 0x33,0x33,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34, + 0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x35,0x35, + 0x34,0x34,0x33,0x33,0x33,0x33,0x33,0xc8,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21, + 0x21,0x21,0x21,0x21,0x21,0x22,0x22,0x23,0x23,0x23,0x24,0x24,0x24,0x24,0x24, + 0x24,0x24,0x24,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x24,0x24, + 0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24, + 0x23,0x23,0x23,0x24,0x24,0x24,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25, + 0x24,0x24,0x25,0x26,0x26,0x26,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25, + 0x26,0x26,0x26,0x26,0x26,0x26,0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x27, + 0x27,0x27,0x27,0x27,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28, + 0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x29,0x29,0x29,0x2a,0x2a, + 0x2b,0x2c,0x2e,0x30,0x32,0x34,0x36,0x38,0x3a,0x3c,0x3d,0x3d,0x3d,0x3d,0x3d, + 0x3d,0x3d,0x3d,0x3d,0x3d,0x3e,0x3f,0x40,0x40,0x40,0x40,0x3f,0x3f,0x3f,0x3e, + 0x3f,0x40,0x41,0x42,0x44,0x45,0x45,0x45,0x45,0x45,0x43,0x42,0x40,0x3e,0x3d, + 0x3d,0x3c,0x3d,0x3d,0x3d,0x3d,0x3d,0x3f,0x3f,0x3f,0x3e,0x3e,0x3f,0x3f,0x3f, + 0x3f,0x40,0x41,0x41,0x41,0x41,0x41,0x3f,0x3f,0x3e,0x3e,0x3e,0x3e,0x3e,0x3e, + 0x3e,0x3d,0x3d,0x3d,0x3c,0x3a,0x3a,0x3c,0x3d,0x3e,0x40,0x41,0x41,0x43,0x43, + 0x43,0x44,0x42,0x41,0x41,0x40,0x40,0x41,0x41,0x41,0x42,0x44,0x44,0x45,0x46, + 0x46,0x46,0x46,0x45,0x45,0x44,0x42,0x41,0x41,0x3f,0x3e,0x3e,0x3f,0x3f,0x40, + 0x41,0x41,0x44,0x45,0x45,0x46,0x47,0x47,0x47,0x46,0x45,0x44,0x43,0x41,0x41, + 0x3f,0x3e,0x3f,0x3f,0x40,0x41,0x41,0x41,0x40,0x40,0x3f,0x3d,0x3c,0x3a,0x37, + 0x36,0x36,0x32,0x32,0x31,0x30,0x30,0x31,0x32,0x33,0x34,0x36,0x37,0x3a,0x3c, + 0x3f,0x41,0x43,0x45,0x45,0x46,0x45,0x45,0x43,0x41,0x40,0x3d,0x3c,0x3a,0x3a, + 0x3a,0x3b,0x3d,0x3e,0x41,0x43,0x45,0x47,0x49,0x4b,0x4c,0x4c,0x4d,0x4c,0x4c, + 0x4b,0x4a,0x48,0x48,0x45,0x44,0x43,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41, + 0x40,0x40,0x40,0x3f,0x3e,0x3f,0x3e,0x3e,0x40,0x41,0x42,0x44,0x45,0x48,0x49, + 0x49,0x49,0x49,0x4a,0x49,0x48,0x47,0x45,0x43,0x41,0x3f,0x3d,0x3a,0x39,0x37, + 0x35,0x35,0x33,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32, + 0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x33,0x33,0x33,0x32,0x32,0x32, + 0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x33, + 0x33,0x33,0x33,0x33,0x32,0x32,0x32,0x32,0x33,0x33,0x33,0x34,0x34,0x34,0x33, + 0x33,0x33,0x33,0x32,0x32,0x32,0x33,0x33,0x33,0x34,0x34,0x34,0x34,0x34,0x34, + 0x34,0x34,0x34,0x34,0x34,0x34,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x34, + 0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x35,0x35,0x35,0x35,0x35,0x35, + 0x35,0x34,0x34,0x34,0x34,0x34,0x35,0x35,0x35,0x35,0x35,0x34,0x34,0x34,0x35, + 0x35,0x35,0x34,0x34,0x34,0x34,0x34,0x35,0x35,0xc8,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x21,0x21,0x21,0x22,0x22,0x21,0x21,0x21,0x21,0x21,0x21,0x21, + 0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x22,0x22,0x23,0x23,0x23,0x24,0x24,0x24, + 0x24,0x24,0x24,0x24,0x24,0x24,0x23,0x23,0x24,0x24,0x24,0x24,0x23,0x23,0x23, + 0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24, + 0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x25,0x25,0x25,0x24,0x24,0x25, + 0x25,0x25,0x24,0x25,0x25,0x26,0x26,0x26,0x26,0x25,0x25,0x25,0x25,0x25,0x25, + 0x25,0x26,0x26,0x26,0x26,0x26,0x26,0x26,0x27,0x27,0x28,0x27,0x26,0x26,0x27, + 0x27,0x27,0x27,0x27,0x27,0x27,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28, + 0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x29,0x29,0x29,0x29,0x29,0x29, + 0x2a,0x2a,0x2b,0x2c,0x2d,0x2f,0x31,0x33,0x34,0x36,0x37,0x39,0x3a,0x39,0x3a, + 0x3a,0x39,0x39,0x3a,0x39,0x39,0x3a,0x3a,0x3a,0x3b,0x3b,0x3b,0x3b,0x3b,0x3b, + 0x3b,0x3a,0x3c,0x3c,0x3d,0x3d,0x40,0x40,0x41,0x41,0x40,0x40,0x3f,0x3d,0x3c, + 0x3b,0x3a,0x3a,0x39,0x39,0x39,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3b, + 0x3b,0x3b,0x3b,0x3c,0x3c,0x3d,0x3d,0x3c,0x3c,0x3b,0x3b,0x3b,0x3b,0x3a,0x3a, + 0x3a,0x3a,0x3a,0x3a,0x3a,0x39,0x38,0x37,0x37,0x38,0x39,0x3b,0x3b,0x3d,0x3d, + 0x3e,0x3e,0x3f,0x3f,0x3e,0x3e,0x3d,0x3d,0x3c,0x3d,0x3d,0x3d,0x3e,0x3f,0x3f, + 0x41,0x41,0x41,0x41,0x41,0x41,0x40,0x3f,0x3e,0x3d,0x3c,0x3b,0x3a,0x3a,0x3a, + 0x3b,0x3c,0x3c,0x3e,0x3f,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x40,0x3f, + 0x3d,0x3d,0x3c,0x3b,0x3c,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3c,0x3c,0x3a,0x39, + 0x37,0x36,0x36,0x34,0x33,0x31,0x30,0x30,0x31,0x31,0x32,0x32,0x33,0x34,0x35, + 0x37,0x3a,0x3c,0x3d,0x3f,0x40,0x41,0x41,0x41,0x41,0x3f,0x3d,0x3c,0x3a,0x3a, + 0x38,0x38,0x38,0x39,0x3a,0x3c,0x3d,0x40,0x41,0x43,0x45,0x46,0x48,0x48,0x48, + 0x48,0x48,0x46,0x45,0x44,0x43,0x42,0x41,0x40,0x3f,0x3e,0x3e,0x3e,0x3e,0x3e, + 0x3e,0x3e,0x3d,0x3d,0x3d,0x3c,0x3c,0x3c,0x3c,0x3c,0x3d,0x3e,0x3e,0x40,0x41, + 0x44,0x45,0x45,0x45,0x45,0x45,0x45,0x43,0x42,0x41,0x40,0x3f,0x3d,0x3b,0x3a, + 0x38,0x36,0x35,0x34,0x33,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32, + 0x32,0x33,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x33,0x33,0x33,0x32, + 0x32,0x32,0x33,0x32,0x32,0x32,0x32,0x33,0x33,0x32,0x32,0x32,0x32,0x32,0x32, + 0x32,0x33,0x33,0x33,0x33,0x33,0x32,0x32,0x32,0x32,0x33,0x33,0x34,0x34,0x34, + 0x34,0x34,0x33,0x33,0x32,0x32,0x32,0x33,0x33,0x33,0x33,0x34,0x34,0x34,0x35, + 0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x35,0x35,0x36,0x36,0x36,0x36,0x35, + 0x35,0x35,0x34,0x35,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x35,0x35,0x35,0x35, + 0x35,0x35,0x35,0x34,0x34,0x34,0x34,0x34,0x35,0x35,0x35,0x35,0x35,0x34,0x34, + 0x34,0x35,0x35,0x35,0x34,0x34,0x34,0x34,0x35,0x35,0x36,0xc8,0x20,0x20,0x20, + 0x20,0x20,0x21,0x21,0x21,0x21,0x21,0x22,0x22,0x22,0x22,0x21,0x21,0x21,0x21, + 0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x22,0x22,0x23,0x23,0x23,0x24, + 0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24, + 0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24, + 0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24, + 0x24,0x24,0x25,0x25,0x25,0x25,0x25,0x26,0x27,0x27,0x27,0x26,0x25,0x25,0x26, + 0x26,0x26,0x26,0x26,0x26,0x26,0x26,0x26,0x26,0x26,0x27,0x27,0x28,0x27,0x26, + 0x26,0x26,0x27,0x27,0x27,0x27,0x27,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28, + 0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x29,0x29,0x29,0x29,0x29, + 0x29,0x29,0x29,0x2b,0x2b,0x2c,0x2d,0x2e,0x30,0x31,0x32,0x34,0x34,0x36,0x36, + 0x36,0x36,0x36,0x36,0x35,0x36,0x36,0x35,0x36,0x36,0x37,0x37,0x37,0x37,0x38, + 0x38,0x38,0x38,0x37,0x37,0x38,0x3a,0x3a,0x3b,0x3b,0x3c,0x3d,0x3d,0x3c,0x3b, + 0x3a,0x38,0x37,0x37,0x37,0x36,0x36,0x36,0x36,0x36,0x37,0x37,0x37,0x37,0x37, + 0x36,0x37,0x37,0x37,0x37,0x39,0x39,0x39,0x39,0x39,0x39,0x37,0x37,0x37,0x37, + 0x36,0x36,0x37,0x37,0x36,0x36,0x36,0x36,0x36,0x35,0x35,0x35,0x36,0x38,0x39, + 0x39,0x3a,0x3a,0x3b,0x3b,0x3b,0x3b,0x3a,0x3a,0x39,0x39,0x39,0x39,0x3a,0x3a, + 0x3b,0x3c,0x3c,0x3c,0x3d,0x3d,0x3d,0x3c,0x3c,0x3b,0x3a,0x39,0x39,0x37,0x38, + 0x37,0x37,0x38,0x38,0x3a,0x3a,0x3b,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3c, + 0x3c,0x3b,0x3a,0x3a,0x38,0x37,0x38,0x38,0x39,0x3a,0x3a,0x3a,0x3a,0x39,0x38, + 0x37,0x37,0x36,0x36,0x35,0x34,0x32,0x30,0x30,0x31,0x31,0x32,0x32,0x32,0x32, + 0x33,0x33,0x36,0x37,0x38,0x3a,0x3c,0x3d,0x3d,0x3d,0x3d,0x3d,0x3c,0x3b,0x3a, + 0x39,0x38,0x37,0x37,0x37,0x38,0x39,0x3a,0x3b,0x3d,0x3e,0x40,0x41,0x42,0x42, + 0x42,0x43,0x42,0x42,0x42,0x41,0x40,0x40,0x3e,0x3d,0x3d,0x3c,0x3c,0x3b,0x3b, + 0x3b,0x3b,0x3c,0x3b,0x3b,0x3b,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3b,0x3c,0x3b, + 0x3c,0x3d,0x40,0x41,0x40,0x40,0x40,0x40,0x3f,0x40,0x3e,0x3d,0x3d,0x3b,0x3a, + 0x39,0x37,0x36,0x36,0x34,0x33,0x32,0x33,0x33,0x33,0x32,0x32,0x32,0x32,0x32, + 0x32,0x32,0x33,0x33,0x33,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x33,0x33, + 0x32,0x32,0x32,0x32,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33, + 0x33,0x33,0x32,0x33,0x33,0x34,0x34,0x33,0x32,0x32,0x32,0x32,0x33,0x34,0x34, + 0x34,0x34,0x34,0x34,0x34,0x33,0x32,0x32,0x33,0x33,0x33,0x34,0x34,0x34,0x34, + 0x35,0x35,0x35,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x35,0x36,0x36,0x36, + 0x36,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x34,0x34,0x34,0x35,0x35, + 0x35,0x35,0x35,0x35,0x35,0x34,0x34,0x34,0x34,0x34,0x35,0x36,0x36,0x35,0x35, + 0x34,0x34,0x34,0x35,0x36,0x36,0x35,0x34,0x34,0x34,0x35,0x36,0x36,0xc8,0x20, + 0x20,0x20,0x20,0x21,0x21,0x21,0x22,0x22,0x22,0x22,0x22,0x23,0x22,0x22,0x22, + 0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x23,0x23,0x23,0x23, + 0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24, + 0x24,0x24,0x24,0x24,0x24,0x24,0x25,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x25, + 0x25,0x25,0x24,0x24,0x24,0x24,0x25,0x25,0x25,0x25,0x25,0x24,0x24,0x24,0x24, + 0x24,0x24,0x24,0x25,0x25,0x25,0x25,0x25,0x25,0x26,0x27,0x27,0x26,0x26,0x25, + 0x25,0x26,0x26,0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x28, + 0x27,0x27,0x27,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28, + 0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x29,0x29,0x29, + 0x29,0x29,0x2a,0x2a,0x2a,0x2b,0x2b,0x2b,0x2d,0x2e,0x2f,0x30,0x31,0x31,0x32, + 0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x33,0x34,0x34, + 0x34,0x34,0x34,0x34,0x34,0x33,0x34,0x36,0x36,0x36,0x37,0x38,0x38,0x39,0x38, + 0x37,0x37,0x36,0x36,0x34,0x35,0x34,0x34,0x33,0x33,0x34,0x34,0x34,0x34,0x34, + 0x34,0x34,0x34,0x34,0x34,0x34,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x34, + 0x34,0x34,0x34,0x35,0x35,0x35,0x35,0x34,0x34,0x34,0x33,0x33,0x33,0x33,0x33, + 0x36,0x36,0x36,0x36,0x36,0x37,0x37,0x37,0x37,0x36,0x36,0x36,0x36,0x37,0x37, + 0x36,0x36,0x37,0x37,0x38,0x39,0x39,0x39,0x39,0x39,0x38,0x37,0x36,0x37,0x36, + 0x35,0x35,0x35,0x35,0x35,0x35,0x37,0x37,0x37,0x39,0x3a,0x3a,0x3a,0x3a,0x3a, + 0x3a,0x39,0x38,0x37,0x37,0x36,0x36,0x35,0x35,0x36,0x37,0x37,0x39,0x39,0x38, + 0x37,0x36,0x36,0x36,0x36,0x34,0x34,0x33,0x31,0x31,0x31,0x30,0x30,0x31,0x32, + 0x32,0x32,0x32,0x32,0x33,0x36,0x37,0x39,0x39,0x3a,0x3a,0x3a,0x3a,0x3a,0x39, + 0x39,0x38,0x36,0x36,0x35,0x35,0x36,0x36,0x36,0x37,0x39,0x3a,0x3b,0x3c,0x3d, + 0x3d,0x3d,0x3e,0x3e,0x3e,0x3d,0x3d,0x3d,0x3d,0x3c,0x3c,0x3b,0x3a,0x3a,0x3a, + 0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x39,0x38,0x39,0x38,0x37,0x37,0x37,0x39, + 0x3a,0x3a,0x3a,0x3a,0x3d,0x3d,0x3d,0x3c,0x3b,0x3c,0x3d,0x3d,0x3c,0x3b,0x3a, + 0x3a,0x38,0x37,0x36,0x36,0x35,0x34,0x33,0x33,0x34,0x34,0x33,0x32,0x32,0x32, + 0x32,0x32,0x33,0x33,0x33,0x34,0x34,0x32,0x32,0x33,0x32,0x32,0x32,0x32,0x32, + 0x32,0x33,0x33,0x32,0x32,0x32,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33, + 0x33,0x33,0x33,0x33,0x33,0x33,0x34,0x35,0x34,0x34,0x33,0x33,0x33,0x33,0x34, + 0x34,0x35,0x35,0x35,0x35,0x34,0x34,0x34,0x33,0x33,0x33,0x33,0x34,0x34,0x35, + 0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x34,0x34,0x35,0x35, + 0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x36,0x36,0x36,0x36,0x35,0x35,0x35,0x35, + 0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x36,0x36,0x36, + 0x36,0x35,0x35,0x34,0x34,0x35,0x36,0x36,0x35,0x34,0x34,0x34,0x35,0x35,0x36, + 0xc8,0x20,0x20,0x20,0x20,0x21,0x21,0x21,0x22,0x22,0x22,0x22,0x22,0x23,0x23, + 0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x23,0x23, + 0x23,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24, + 0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x25,0x25,0x24,0x24,0x24,0x24,0x24, + 0x24,0x25,0x25,0x25,0x25,0x24,0x24,0x25,0x26,0x26,0x25,0x25,0x25,0x24,0x24, + 0x24,0x24,0x24,0x24,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x27,0x27,0x27,0x26, + 0x26,0x25,0x25,0x26,0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x27, + 0x27,0x28,0x28,0x27,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28, + 0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x29, + 0x29,0x29,0x29,0x29,0x2a,0x2a,0x2a,0x2a,0x2b,0x2b,0x2b,0x2d,0x2f,0x2f,0x2f, + 0x2f,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x2f,0x2f,0x2f,0x2f,0x30,0x30,0x31, + 0x31,0x31,0x31,0x31,0x31,0x32,0x32,0x31,0x32,0x32,0x32,0x33,0x34,0x35,0x35, + 0x35,0x35,0x34,0x33,0x33,0x32,0x32,0x32,0x32,0x32,0x32,0x31,0x32,0x32,0x32, + 0x32,0x32,0x32,0x32,0x31,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32, + 0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x31,0x31, + 0x31,0x32,0x33,0x33,0x33,0x33,0x33,0x34,0x34,0x34,0x34,0x34,0x33,0x33,0x33, + 0x34,0x34,0x33,0x34,0x34,0x35,0x36,0x36,0x36,0x36,0x36,0x36,0x35,0x34,0x33, + 0x34,0x34,0x33,0x32,0x32,0x32,0x32,0x33,0x35,0x35,0x35,0x36,0x36,0x37,0x37, + 0x36,0x36,0x36,0x36,0x35,0x35,0x34,0x34,0x33,0x33,0x32,0x34,0x35,0x36,0x36, + 0x36,0x36,0x35,0x34,0x33,0x34,0x34,0x34,0x32,0x32,0x31,0x31,0x30,0x30,0x30, + 0x31,0x32,0x32,0x32,0x31,0x32,0x33,0x33,0x35,0x36,0x36,0x37,0x37,0x37,0x37, + 0x37,0x36,0x36,0x36,0x36,0x34,0x34,0x34,0x34,0x34,0x35,0x36,0x36,0x37,0x39, + 0x39,0x39,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x38,0x39, + 0x38,0x37,0x37,0x37,0x37,0x37,0x37,0x37,0x37,0x37,0x36,0x36,0x36,0x36,0x35, + 0x35,0x37,0x37,0x37,0x37,0x37,0x3a,0x3a,0x3a,0x3a,0x39,0x3a,0x3a,0x3a,0x3a, + 0x38,0x38,0x37,0x36,0x36,0x36,0x34,0x34,0x33,0x33,0x33,0x34,0x33,0x33,0x32, + 0x32,0x32,0x32,0x32,0x33,0x33,0x33,0x34,0x34,0x33,0x32,0x33,0x33,0x32,0x32, + 0x32,0x32,0x33,0x33,0x33,0x33,0x32,0x32,0x33,0x33,0x33,0x33,0x33,0x33,0x33, + 0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x34,0x34,0x35,0x35,0x34,0x34,0x33,0x33, + 0x34,0x34,0x35,0x35,0x35,0x35,0x35,0x35,0x34,0x34,0x34,0x33,0x33,0x33,0x34, + 0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x34, + 0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x36,0x36,0x36,0x36,0x36,0x36,0x35, + 0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x36, + 0x36,0x36,0x36,0x36,0x35,0x34,0x34,0x35,0x36,0x36,0x35,0x34,0x34,0x35,0x35, + 0x35,0x35,0xc8,0x21,0x21,0x21,0x21,0x21,0x21,0x22,0x22,0x22,0x22,0x22,0x23, + 0x23,0x23,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22, + 0x23,0x23,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x23,0x24,0x24, + 0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x25,0x25,0x24,0x24, + 0x24,0x24,0x24,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x26,0x26,0x25,0x25,0x25, + 0x24,0x24,0x24,0x25,0x25,0x26,0x26,0x26,0x25,0x25,0x25,0x25,0x25,0x26,0x27, + 0x27,0x26,0x26,0x26,0x26,0x26,0x27,0x28,0x28,0x28,0x28,0x28,0x28,0x27,0x27, + 0x27,0x27,0x27,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28, + 0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28, + 0x28,0x29,0x29,0x29,0x29,0x29,0x29,0x2a,0x2a,0x2b,0x2b,0x2b,0x2b,0x2c,0x2d, + 0x2e,0x2e,0x2e,0x2e,0x2f,0x2f,0x2e,0x2e,0x2d,0x2d,0x2d,0x2d,0x2d,0x2e,0x2e, + 0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x30,0x31,0x31,0x32,0x32, + 0x32,0x32,0x32,0x32,0x32,0x32,0x31,0x31,0x30,0x2f,0x2f,0x30,0x30,0x30,0x30, + 0x30,0x30,0x30,0x30,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x30,0x30,0x30,0x30, + 0x30,0x30,0x2f,0x2f,0x2f,0x30,0x31,0x30,0x30,0x30,0x30,0x30,0x31,0x31,0x31, + 0x31,0x31,0x31,0x31,0x31,0x31,0x32,0x31,0x31,0x32,0x32,0x32,0x32,0x32,0x32, + 0x32,0x31,0x32,0x32,0x32,0x32,0x32,0x33,0x33,0x34,0x34,0x34,0x34,0x34,0x33, + 0x32,0x32,0x32,0x32,0x32,0x32,0x31,0x32,0x32,0x32,0x32,0x32,0x33,0x33,0x34, + 0x35,0x35,0x35,0x35,0x35,0x34,0x33,0x33,0x32,0x32,0x32,0x32,0x32,0x32,0x33, + 0x34,0x34,0x34,0x33,0x33,0x33,0x33,0x33,0x34,0x33,0x32,0x32,0x31,0x30,0x30, + 0x31,0x31,0x32,0x32,0x32,0x31,0x32,0x31,0x32,0x33,0x34,0x34,0x34,0x35,0x35, + 0x35,0x35,0x35,0x35,0x35,0x35,0x34,0x34,0x34,0x34,0x34,0x34,0x35,0x35,0x35, + 0x36,0x36,0x37,0x37,0x38,0x38,0x38,0x38,0x38,0x38,0x38,0x38,0x38,0x37,0x37, + 0x37,0x36,0x36,0x36,0x35,0x36,0x36,0x36,0x36,0x36,0x36,0x35,0x35,0x35,0x35, + 0x35,0x35,0x35,0x36,0x36,0x35,0x35,0x36,0x37,0x38,0x38,0x37,0x37,0x37,0x38, + 0x39,0x38,0x37,0x36,0x36,0x36,0x35,0x34,0x33,0x33,0x34,0x34,0x34,0x35,0x34, + 0x33,0x33,0x33,0x32,0x32,0x32,0x32,0x32,0x33,0x33,0x33,0x33,0x33,0x34,0x34, + 0x34,0x33,0x33,0x33,0x33,0x34,0x34,0x34,0x33,0x33,0x33,0x33,0x33,0x33,0x33, + 0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x34,0x35,0x35,0x35,0x35,0x35,0x34, + 0x34,0x34,0x34,0x34,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x34,0x34,0x34,0x34, + 0x34,0x34,0x34,0x35,0x35,0x35,0x35,0x34,0x34,0x35,0x35,0x35,0x35,0x35,0x35, + 0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x36,0x36,0x36,0x36,0x36,0x36, + 0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x35, + 0x35,0x36,0x36,0x36,0x36,0x36,0x35,0x35,0x35,0x36,0x36,0x36,0x36,0x35,0x35, + 0x35,0x36,0x36,0x36,0xc8,0x21,0x21,0x21,0x21,0x21,0x22,0x22,0x22,0x22,0x22, + 0x23,0x23,0x23,0x23,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22, + 0x22,0x23,0x23,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x23, + 0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x25,0x25, + 0x25,0x24,0x24,0x24,0x24,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x26,0x25,0x25, + 0x25,0x25,0x24,0x25,0x25,0x25,0x26,0x27,0x27,0x26,0x26,0x25,0x25,0x25,0x26, + 0x26,0x27,0x27,0x26,0x26,0x26,0x26,0x26,0x28,0x28,0x28,0x28,0x28,0x28,0x28, + 0x28,0x27,0x27,0x27,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x27,0x27,0x28, + 0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28, + 0x28,0x28,0x28,0x29,0x2a,0x29,0x29,0x29,0x29,0x29,0x2a,0x2b,0x2b,0x2b,0x2b, + 0x2c,0x2c,0x2c,0x2c,0x2c,0x2d,0x2d,0x2d,0x2c,0x2c,0x2c,0x2b,0x2b,0x2b,0x2c, + 0x2c,0x2d,0x2d,0x2d,0x2d,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2f,0x2f,0x2f, + 0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f, + 0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2e,0x2e,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f, + 0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x30,0x30,0x2f,0x30,0x2f,0x30,0x30, + 0x30,0x2f,0x2f,0x30,0x30,0x2f,0x30,0x30,0x30,0x30,0x31,0x31,0x31,0x31,0x31, + 0x31,0x30,0x30,0x30,0x31,0x31,0x31,0x31,0x31,0x32,0x32,0x32,0x32,0x32,0x32, + 0x32,0x32,0x32,0x32,0x31,0x30,0x30,0x2f,0x2f,0x30,0x30,0x31,0x31,0x32,0x32, + 0x32,0x32,0x33,0x32,0x32,0x32,0x33,0x33,0x32,0x32,0x32,0x32,0x31,0x31,0x31, + 0x32,0x32,0x33,0x33,0x33,0x33,0x33,0x32,0x32,0x32,0x32,0x32,0x32,0x31,0x31, + 0x31,0x30,0x31,0x32,0x32,0x32,0x32,0x31,0x31,0x31,0x32,0x32,0x32,0x33,0x33, + 0x33,0x33,0x34,0x33,0x33,0x34,0x34,0x33,0x32,0x33,0x33,0x33,0x33,0x33,0x34, + 0x35,0x35,0x35,0x35,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36, + 0x36,0x36,0x36,0x36,0x35,0x35,0x34,0x35,0x35,0x35,0x35,0x35,0x35,0x36,0x35, + 0x34,0x33,0x33,0x33,0x33,0x34,0x35,0x34,0x34,0x35,0x36,0x36,0x36,0x35,0x35, + 0x36,0x36,0x36,0x36,0x36,0x36,0x35,0x34,0x34,0x33,0x33,0x34,0x34,0x34,0x33, + 0x34,0x34,0x33,0x33,0x33,0x32,0x32,0x32,0x32,0x32,0x33,0x33,0x33,0x33,0x34, + 0x34,0x35,0x35,0x34,0x34,0x34,0x34,0x35,0x35,0x34,0x34,0x33,0x33,0x33,0x33, + 0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x34,0x34,0x35,0x35,0x35,0x36, + 0x36,0x35,0x35,0x35,0x34,0x34,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x34, + 0x35,0x34,0x34,0x34,0x35,0x35,0x35,0x35,0x35,0x35,0x34,0x35,0x35,0x35,0x35, + 0x35,0x35,0x35,0x36,0x36,0x35,0x35,0x35,0x35,0x35,0x35,0x36,0x36,0x36,0x36, + 0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36, + 0x36,0x35,0x36,0x36,0x36,0x36,0x36,0x36,0x35,0x35,0x36,0x36,0x36,0x36,0x36, + 0x36,0x36,0x36,0x36,0x36,0x36,0xc8,0x21,0x21,0x21,0x21,0x22,0x22,0x22,0x22, + 0x22,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23, + 0x23,0x23,0x23,0x23,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24, + 0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24, + 0x25,0x25,0x25,0x25,0x24,0x24,0x24,0x25,0x25,0x26,0x26,0x25,0x25,0x25,0x25, + 0x25,0x25,0x25,0x25,0x25,0x26,0x26,0x26,0x26,0x27,0x27,0x27,0x26,0x26,0x26, + 0x26,0x26,0x27,0x27,0x27,0x26,0x26,0x26,0x26,0x27,0x28,0x28,0x28,0x28,0x28, + 0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x27, + 0x27,0x27,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28, + 0x28,0x28,0x28,0x28,0x28,0x2a,0x2a,0x2a,0x29,0x29,0x29,0x29,0x29,0x2b,0x2b, + 0x2b,0x2b,0x2b,0x2c,0x2c,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b, + 0x2b,0x2b,0x2b,0x2c,0x2c,0x2c,0x2c,0x2c,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d, + 0x2d,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2d,0x2d,0x2e,0x2d, + 0x2d,0x2d,0x2d,0x2e,0x2e,0x2e,0x2e,0x2e,0x2d,0x2d,0x2d,0x2e,0x2e,0x2e,0x2e, + 0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2e,0x2e,0x2e,0x2e,0x2f,0x2f,0x2f,0x2f,0x2f, + 0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f, + 0x2f,0x30,0x2f,0x2f,0x2f,0x2f,0x30,0x30,0x30,0x30,0x30,0x31,0x31,0x31,0x31, + 0x31,0x31,0x31,0x31,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30, + 0x30,0x30,0x30,0x32,0x32,0x32,0x31,0x31,0x32,0x32,0x31,0x31,0x31,0x31,0x31, + 0x31,0x31,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x31, + 0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x32,0x32,0x31,0x31,0x31,0x31,0x32,0x32, + 0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32, + 0x32,0x33,0x33,0x33,0x34,0x34,0x35,0x35,0x35,0x36,0x36,0x36,0x36,0x36,0x36, + 0x36,0x36,0x36,0x35,0x35,0x35,0x34,0x33,0x33,0x33,0x34,0x34,0x34,0x34,0x34, + 0x34,0x34,0x34,0x34,0x33,0x32,0x32,0x33,0x34,0x33,0x33,0x33,0x35,0x36,0x36, + 0x35,0x34,0x36,0x36,0x36,0x35,0x35,0x35,0x34,0x33,0x33,0x33,0x34,0x34,0x34, + 0x33,0x33,0x35,0x35,0x34,0x33,0x33,0x32,0x32,0x32,0x32,0x32,0x33,0x33,0x33, + 0x34,0x34,0x35,0x35,0x35,0x34,0x34,0x35,0x35,0x35,0x35,0x35,0x34,0x34,0x34, + 0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x35,0x35,0x35, + 0x36,0x36,0x36,0x36,0x36,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35, + 0x35,0x35,0x35,0x34,0x34,0x35,0x35,0x35,0x36,0x36,0x35,0x35,0x35,0x35,0x35, + 0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x35,0x35,0x35,0x35,0x35,0x36,0x36, + 0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x35,0x35,0x35,0x36,0x36, + 0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36, + 0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0xc8,0x22,0x22,0x22,0x22,0x22,0x22, + 0x22,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23, + 0x23,0x23,0x23,0x23,0x23,0x23,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24, + 0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x25,0x25,0x24,0x24,0x24,0x24,0x24, + 0x24,0x24,0x25,0x26,0x25,0x25,0x24,0x24,0x24,0x25,0x25,0x26,0x26,0x26,0x25, + 0x25,0x25,0x25,0x26,0x26,0x26,0x26,0x26,0x26,0x27,0x27,0x27,0x27,0x26,0x27, + 0x26,0x26,0x26,0x26,0x27,0x27,0x27,0x27,0x27,0x26,0x27,0x28,0x27,0x27,0x28, + 0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28, + 0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28, + 0x28,0x28,0x28,0x28,0x29,0x29,0x29,0x2a,0x2b,0x2b,0x2a,0x2a,0x2a,0x2a,0x2a, + 0x2a,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c, + 0x2c,0x2b,0x2b,0x2b,0x2b,0x2c,0x2c,0x2c,0x2c,0x2c,0x2d,0x2d,0x2d,0x2d,0x2d, + 0x2d,0x2d,0x2c,0x2c,0x2c,0x2c,0x2c,0x2b,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c, + 0x2c,0x2c,0x2d,0x2d,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2f, + 0x2f,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f, + 0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2e,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f, + 0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x31,0x32,0x31,0x31,0x31,0x31,0x31, + 0x31,0x31,0x31,0x31,0x31,0x31,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30, + 0x30,0x30,0x30,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x32,0x32,0x32,0x32, + 0x31,0x31,0x31,0x31,0x31,0x31,0x32,0x32,0x32,0x32,0x32,0x32,0x31,0x31,0x31, + 0x31,0x31,0x31,0x32,0x31,0x31,0x31,0x31,0x31,0x31,0x30,0x31,0x31,0x32,0x31, + 0x31,0x31,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32, + 0x32,0x32,0x32,0x32,0x32,0x32,0x33,0x33,0x33,0x33,0x33,0x34,0x34,0x34,0x34, + 0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x33,0x33,0x33,0x33,0x33,0x33,0x34,0x34, + 0x34,0x34,0x33,0x33,0x34,0x34,0x34,0x33,0x32,0x33,0x33,0x32,0x32,0x32,0x34, + 0x35,0x35,0x35,0x35,0x36,0x35,0x35,0x34,0x34,0x34,0x34,0x33,0x33,0x33,0x34, + 0x33,0x33,0x33,0x34,0x36,0x36,0x35,0x34,0x33,0x33,0x32,0x33,0x33,0x33,0x33, + 0x33,0x34,0x35,0x35,0x35,0x35,0x35,0x34,0x34,0x35,0x36,0x36,0x35,0x35,0x34, + 0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x36,0x36, + 0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x35,0x35,0x35,0x35,0x35, + 0x36,0x36,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x36,0x36,0x35,0x35,0x35, + 0x35,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x35,0x35,0x35,0x35, + 0x36,0x36,0x36,0x36,0x36,0x35,0x35,0x36,0x36,0x36,0x35,0x35,0x34,0x34,0x34, + 0x35,0x35,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36, + 0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0xc8,0x23,0x23,0x23,0x23, + 0x22,0x22,0x22,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23, + 0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x24,0x24,0x24,0x24,0x24,0x24,0x24, + 0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x25,0x25,0x25,0x25,0x24,0x24, + 0x24,0x24,0x24,0x24,0x25,0x26,0x26,0x25,0x24,0x24,0x25,0x25,0x25,0x26,0x26, + 0x26,0x25,0x25,0x26,0x26,0x27,0x26,0x26,0x26,0x26,0x26,0x26,0x27,0x27,0x26, + 0x26,0x28,0x27,0x26,0x26,0x26,0x27,0x27,0x27,0x27,0x27,0x27,0x28,0x28,0x27, + 0x27,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x29,0x29,0x29, + 0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28, + 0x28,0x28,0x28,0x28,0x28,0x28,0x29,0x29,0x29,0x2a,0x2b,0x2b,0x2a,0x2a,0x2a, + 0x2a,0x2a,0x2a,0x2a,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b, + 0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2c,0x2c,0x2c, + 0x2c,0x2c,0x2c,0x2b,0x2b,0x2b,0x2b,0x2c,0x2c,0x2b,0x2c,0x2c,0x2c,0x2b,0x2b, + 0x2b,0x2b,0x2b,0x2c,0x2c,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d, + 0x2e,0x2e,0x2e,0x2e,0x2d,0x2d,0x2d,0x2d,0x2d,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e, + 0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2f,0x2f,0x2f,0x2f,0x2e,0x2e,0x2e, + 0x2e,0x2e,0x2e,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x30,0x30,0x30,0x30,0x30, + 0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x2f,0x30,0x30,0x30,0x30,0x30, + 0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x31,0x31, + 0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31, + 0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x30,0x30,0x31, + 0x32,0x32,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x32,0x32,0x32,0x32, + 0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x33,0x33, + 0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x34, + 0x34,0x34,0x34,0x34,0x34,0x33,0x34,0x34,0x34,0x33,0x33,0x34,0x34,0x32,0x32, + 0x33,0x34,0x35,0x35,0x34,0x35,0x36,0x36,0x35,0x35,0x34,0x34,0x34,0x33,0x33, + 0x34,0x33,0x33,0x33,0x34,0x35,0x36,0x36,0x35,0x35,0x34,0x34,0x33,0x34,0x34, + 0x33,0x33,0x34,0x34,0x35,0x35,0x34,0x35,0x34,0x34,0x34,0x35,0x35,0x36,0x35, + 0x35,0x34,0x35,0x36,0x36,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x36, + 0x36,0x36,0x36,0x36,0x36,0x36,0x35,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x35, + 0x35,0x35,0x36,0x36,0x35,0x35,0x35,0x36,0x36,0x35,0x35,0x35,0x36,0x36,0x35, + 0x35,0x35,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x35, + 0x35,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x35,0x35, + 0x35,0x35,0x35,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36, + 0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0xc8,0x24,0x24, + 0x24,0x24,0x24,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23, + 0x23,0x23,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24, + 0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x25,0x25,0x25,0x25,0x26,0x26,0x26, + 0x25,0x25,0x25,0x24,0x24,0x24,0x25,0x26,0x26,0x26,0x26,0x26,0x26,0x26,0x26, + 0x26,0x26,0x26,0x26,0x27,0x28,0x28,0x28,0x26,0x26,0x25,0x25,0x25,0x25,0x25, + 0x26,0x26,0x27,0x28,0x28,0x28,0x27,0x27,0x26,0x26,0x27,0x28,0x28,0x28,0x28, + 0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x29, + 0x2a,0x29,0x29,0x29,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28, + 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x28,0x28,0x2a,0x2a,0x2a,0x2a, + 0x2a,0x2a,0x2a,0x2a,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b, + 0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2c,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b, + 0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2c,0x2c,0x2c,0x2b,0x2b,0x2b,0x2b, + 0x2b,0x2c,0x2c,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2c,0x2d,0x2d,0x2d, + 0x2d,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2f,0x2f,0x2f,0x2f, + 0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f, + 0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f, + 0x30,0x30,0x30,0x30,0x30,0x2f,0x2f,0x2f,0x2f,0x30,0x30,0x30,0x30,0x30,0x30, + 0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x30,0x31,0x31,0x31,0x31,0x31,0x31, + 0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x32,0x32,0x31,0x30,0x30,0x30,0x30,0x30, + 0x31,0x31,0x31,0x31,0x31,0x31,0x32,0x32,0x32,0x32,0x31,0x31,0x31,0x31,0x31, + 0x31,0x31,0x31,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32, + 0x32,0x32,0x33,0x33,0x33,0x33,0x33,0x33,0x32,0x32,0x32,0x32,0x32,0x32,0x33, + 0x35,0x35,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34, + 0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34, + 0x34,0x34,0x34,0x34,0x34,0x34,0x35,0x35,0x35,0x35,0x36,0x36,0x36,0x35,0x35, + 0x35,0x34,0x34,0x34,0x34,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35, + 0x35,0x35,0x35,0x35,0x35,0x35,0x34,0x33,0x33,0x33,0x33,0x34,0x34,0x34,0x35, + 0x35,0x35,0x35,0x35,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x35,0x35,0x35,0x36, + 0x36,0x36,0x36,0x37,0x37,0x36,0x35,0x35,0x34,0x34,0x34,0x35,0x36,0x36,0x37, + 0x37,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36, + 0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36, + 0x36,0x36,0x36,0x36,0x37,0x37,0x37,0x37,0x37,0x37,0x37,0x37,0x37,0x37,0x37, + 0x37,0x37,0x37,0x37,0x37,0x37,0x37,0x37,0x37,0x38,0x38,0x38,0x37,0x37,0x37, + 0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x37,0x37,0x38,0x38,0x38,0x38,0x38,0xc8, + 0x24,0x24,0x24,0x24,0x24,0x24,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23, + 0x22,0x23,0x23,0x23,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24, + 0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x25,0x25,0x25,0x25,0x25,0x25,0x26, + 0x26,0x26,0x25,0x25,0x25,0x25,0x24,0x24,0x25,0x27,0x27,0x27,0x27,0x26,0x26, + 0x26,0x27,0x26,0x26,0x26,0x26,0x27,0x28,0x28,0x27,0x26,0x26,0x25,0x25,0x25, + 0x26,0x26,0x27,0x27,0x28,0x28,0x28,0x28,0x27,0x26,0x26,0x27,0x27,0x28,0x28, + 0x29,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28, + 0x28,0x29,0x2a,0x2a,0x29,0x29,0x29,0x28,0x29,0x28,0x28,0x28,0x28,0x28,0x29, + 0x29,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x29,0x29,0x2a,0x2b, + 0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b, + 0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b, + 0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2c,0x2c,0x2c,0x2c,0x2c,0x2b, + 0x2b,0x2b,0x2c,0x2c,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2c,0x2d, + 0x2d,0x2d,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2f,0x2e,0x2f,0x2f,0x2f, + 0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e, + 0x2e,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2e, + 0x2e,0x2f,0x2f,0x30,0x30,0x30,0x30,0x2f,0x2f,0x2f,0x30,0x30,0x30,0x2f,0x2f, + 0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x30,0x31,0x31,0x31,0x31, + 0x31,0x31,0x31,0x31,0x30,0x30,0x30,0x30,0x30,0x31,0x31,0x30,0x2f,0x2f,0x2f, + 0x2f,0x2f,0x30,0x30,0x30,0x30,0x30,0x32,0x32,0x32,0x32,0x32,0x31,0x31,0x31, + 0x31,0x31,0x31,0x31,0x31,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x33,0x33,0x33, + 0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x33,0x33,0x32,0x32,0x32,0x32,0x32, + 0x32,0x33,0x34,0x35,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34, + 0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x33,0x33,0x33,0x33,0x33,0x33,0x34, + 0x33,0x33,0x33,0x33,0x33,0x34,0x34,0x34,0x35,0x35,0x35,0x36,0x36,0x36,0x35, + 0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35, + 0x35,0x35,0x36,0x36,0x36,0x36,0x35,0x35,0x34,0x34,0x34,0x34,0x34,0x34,0x35, + 0x35,0x35,0x35,0x35,0x35,0x35,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x35, + 0x35,0x36,0x36,0x36,0x36,0x37,0x36,0x36,0x36,0x35,0x35,0x35,0x35,0x35,0x36, + 0x36,0x37,0x37,0x37,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x37,0x37,0x36,0x36, + 0x36,0x36,0x37,0x37,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36, + 0x36,0x36,0x36,0x36,0x36,0x37,0x37,0x37,0x38,0x37,0x37,0x37,0x37,0x37,0x37, + 0x37,0x37,0x37,0x37,0x37,0x37,0x37,0x37,0x37,0x37,0x37,0x38,0x38,0x38,0x37, + 0x37,0x37,0x37,0x37,0x36,0x36,0x36,0x36,0x36,0x37,0x37,0x38,0x38,0x38,0x38, + 0x38,0xc8,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x23,0x23,0x23,0x23,0x23,0x23, + 0x23,0x22,0x22,0x22,0x23,0x23,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24, + 0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x25,0x25,0x25,0x25,0x25,0x25, + 0x25,0x26,0x26,0x26,0x25,0x25,0x25,0x25,0x25,0x24,0x25,0x27,0x27,0x27,0x27, + 0x26,0x26,0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x28,0x28,0x27,0x26,0x26,0x26, + 0x26,0x26,0x27,0x27,0x28,0x28,0x28,0x28,0x28,0x27,0x26,0x26,0x27,0x27,0x28, + 0x28,0x28,0x29,0x29,0x29,0x29,0x29,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28, + 0x28,0x28,0x28,0x28,0x2a,0x2a,0x2a,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29, + 0x29,0x29,0x2a,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2a,0x2a, + 0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b, + 0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b, + 0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b, + 0x2b,0x2b,0x2b,0x2b,0x2b,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2d,0x2d,0x2c,0x2c, + 0x2c,0x2c,0x2c,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2e,0x2e,0x2e,0x2e, + 0x2e,0x2f,0x2f,0x2f,0x2f,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e, + 0x2e,0x2e,0x2e,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f, + 0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f, + 0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x30,0x30, + 0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x31,0x31,0x30,0x2f, + 0x2f,0x2f,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x32,0x32,0x32,0x32,0x32,0x31, + 0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32, + 0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x33,0x33,0x33,0x32,0x32,0x32, + 0x32,0x32,0x32,0x32,0x33,0x33,0x33,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x33, + 0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33, + 0x34,0x34,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x34,0x34,0x34,0x35,0x35,0x35, + 0x35,0x35,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x35,0x35,0x35,0x35,0x35,0x35, + 0x35,0x35,0x35,0x35,0x36,0x36,0x36,0x36,0x36,0x35,0x35,0x35,0x35,0x35,0x35, + 0x35,0x35,0x36,0x36,0x36,0x35,0x35,0x35,0x36,0x36,0x36,0x36,0x36,0x36,0x36, + 0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36, + 0x36,0x36,0x36,0x36,0x36,0x37,0x37,0x36,0x36,0x36,0x36,0x36,0x36,0x37,0x37, + 0x36,0x36,0x36,0x37,0x37,0x37,0x37,0x37,0x36,0x36,0x36,0x36,0x36,0x36,0x36, + 0x36,0x36,0x36,0x36,0x36,0x36,0x37,0x37,0x37,0x37,0x38,0x38,0x37,0x37,0x37, + 0x37,0x37,0x37,0x37,0x37,0x37,0x37,0x37,0x37,0x37,0x37,0x37,0x37,0x38,0x38, + 0x38,0x37,0x37,0x37,0x37,0x37,0x37,0x37,0x37,0x37,0x37,0x37,0x37,0x38,0x38, + 0x38,0x38,0x38,0xc8,0x23,0x23,0x24,0x24,0x24,0x24,0x24,0x24,0x23,0x23,0x23, + 0x23,0x23,0x23,0x22,0x22,0x23,0x23,0x23,0x24,0x24,0x24,0x24,0x24,0x24,0x24, + 0x24,0x24,0x24,0x24,0x24,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25, + 0x25,0x26,0x26,0x26,0x26,0x26,0x26,0x25,0x25,0x25,0x25,0x25,0x26,0x27,0x27, + 0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x28,0x28,0x28,0x27,0x27,0x27,0x27, + 0x27,0x27,0x27,0x27,0x28,0x28,0x28,0x28,0x28,0x28,0x27,0x27,0x27,0x27,0x27, + 0x28,0x28,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x28, + 0x28,0x28,0x28,0x28,0x28,0x29,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x29,0x29,0x2a, + 0x2a,0x2a,0x2a,0x2a,0x29,0x29,0x29,0x2a,0x29,0x29,0x29,0x2a,0x2a,0x2a,0x2a, + 0x2a,0x2a,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b, + 0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b, + 0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2c,0x2c,0x2c, + 0x2c,0x2c,0x2c,0x2b,0x2b,0x2c,0x2c,0x2c,0x2c,0x2d,0x2c,0x2c,0x2c,0x2d,0x2d, + 0x2d,0x2d,0x2d,0x2d,0x2d,0x2e,0x2e,0x2e,0x2d,0x2d,0x2d,0x2d,0x2e,0x2e,0x2e, + 0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2e,0x2e,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f, + 0x2f,0x2f,0x2f,0x2e,0x2e,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f, + 0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f, + 0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30, + 0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x31,0x31, + 0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x32,0x32,0x32,0x32, + 0x32,0x32,0x32,0x32,0x31,0x31,0x31,0x31,0x31,0x31,0x32,0x32,0x32,0x32,0x32, + 0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x33,0x33,0x33,0x33, + 0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x32,0x32,0x32,0x32,0x32,0x32, + 0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x34,0x34,0x34,0x34,0x34,0x34,0x34, + 0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x35,0x35, + 0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35, + 0x35,0x35,0x35,0x35,0x35,0x35,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36, + 0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x35,0x35,0x35,0x36,0x36,0x36,0x36, + 0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36, + 0x37,0x36,0x36,0x36,0x36,0x36,0x36,0x37,0x37,0x37,0x36,0x36,0x37,0x37,0x37, + 0x37,0x37,0x37,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36, + 0x36,0x36,0x36,0x36,0x37,0x37,0x37,0x37,0x37,0x37,0x38,0x38,0x38,0x38,0x38, + 0x37,0x37,0x37,0x37,0x37,0x37,0x37,0x37,0x37,0x37,0x37,0x37,0x37,0x37,0x37, + 0x38,0x38,0x38,0x37,0x37,0x37,0x37,0x37,0x37,0x37,0x38,0x38,0x38,0x38,0x38, + 0x38,0x38,0x39,0x38,0x38,0xc8,0x23,0x23,0x24,0x24,0x24,0x24,0x24,0x24,0x24, + 0x23,0x23,0x23,0x23,0x23,0x22,0x23,0x23,0x23,0x24,0x24,0x24,0x24,0x24,0x24, + 0x24,0x24,0x24,0x24,0x24,0x24,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25, + 0x25,0x25,0x25,0x26,0x26,0x26,0x26,0x26,0x26,0x26,0x25,0x25,0x25,0x25,0x26, + 0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x28,0x28,0x28,0x28,0x27,0x27, + 0x27,0x27,0x27,0x27,0x27,0x27,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x27,0x27, + 0x27,0x27,0x28,0x28,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29, + 0x29,0x28,0x28,0x28,0x28,0x28,0x28,0x29,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x29, + 0x29,0x2a,0x2a,0x2a,0x2a,0x2a,0x29,0x29,0x2a,0x29,0x29,0x28,0x29,0x29,0x2a, + 0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b, + 0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b, + 0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2c, + 0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2b,0x2c,0x2c,0x2c,0x2d,0x2d,0x2c,0x2c,0x2c, + 0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2e,0x2e,0x2e,0x2d,0x2d,0x2d,0x2d,0x2e, + 0x2e,0x2e,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2e,0x2f,0x2f,0x2f,0x2f,0x2f, + 0x2f,0x2f,0x2f,0x2f,0x2f,0x2e,0x2e,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f, + 0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f, + 0x2f,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30, + 0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30, + 0x31,0x31,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x32,0x32, + 0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x31,0x31,0x31,0x31,0x32,0x32,0x32,0x32, + 0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x33,0x33, + 0x33,0x33,0x33,0x33,0x33,0x33,0x34,0x34,0x33,0x33,0x33,0x33,0x32,0x32,0x32, + 0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x34,0x34,0x34,0x34,0x35,0x34, + 0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x35, + 0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35, + 0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36, + 0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x35,0x35,0x36,0x36, + 0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36, + 0x37,0x37,0x38,0x37,0x36,0x36,0x36,0x36,0x36,0x37,0x37,0x37,0x36,0x36,0x37, + 0x37,0x37,0x37,0x37,0x37,0x37,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36, + 0x36,0x36,0x36,0x36,0x36,0x36,0x37,0x37,0x37,0x37,0x37,0x37,0x38,0x38,0x38, + 0x38,0x38,0x37,0x37,0x37,0x37,0x37,0x37,0x37,0x37,0x37,0x37,0x37,0x37,0x37, + 0x37,0x37,0x38,0x38,0x38,0x37,0x37,0x37,0x37,0x37,0x37,0x37,0x38,0x38,0x38, + 0x38,0x38,0x38,0x39,0x39,0x38,0x38,0xc8,0x23,0x23,0x23,0x23,0x24,0x24,0x24, + 0x24,0x24,0x24,0x23,0x23,0x23,0x23,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24, + 0x24,0x24,0x24,0x24,0x24,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25, + 0x25,0x25,0x26,0x25,0x25,0x26,0x26,0x26,0x26,0x26,0x26,0x25,0x25,0x26,0x26, + 0x26,0x26,0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x28,0x28,0x28,0x28,0x28, + 0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28, + 0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28, + 0x28,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29, + 0x29,0x29,0x29,0x2a,0x2a,0x2a,0x2a,0x2a,0x2b,0x2b,0x2b,0x2b,0x2a,0x2a,0x2a, + 0x2b,0x2b,0x2b,0x2c,0x2c,0x2b,0x2b,0x2a,0x2a,0x2a,0x2a,0x2b,0x2b,0x2b,0x2b, + 0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b, + 0x2b,0x2b,0x2b,0x2c,0x2b,0x2b,0x2b,0x2b,0x2b,0x2c,0x2c,0x2c,0x2b,0x2b,0x2b, + 0x2b,0x2c,0x2d,0x2d,0x2d,0x2d,0x2d,0x2c,0x2c,0x2c,0x2c,0x2d,0x2e,0x2e,0x2c, + 0x2c,0x2d,0x2d,0x2d,0x2e,0x2e,0x2e,0x2d,0x2d,0x2e,0x2e,0x2e,0x2d,0x2c,0x2d, + 0x2d,0x2d,0x2e,0x2e,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f, + 0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f, + 0x2f,0x30,0x30,0x30,0x30,0x30,0x30,0x2f,0x2f,0x30,0x30,0x30,0x2f,0x2f,0x2f, + 0x2f,0x2f,0x30,0x30,0x31,0x31,0x31,0x31,0x31,0x30,0x30,0x30,0x31,0x31,0x31, + 0x31,0x31,0x31,0x31,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30, + 0x30,0x30,0x31,0x31,0x31,0x30,0x30,0x30,0x30,0x31,0x31,0x31,0x31,0x31,0x31, + 0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32, + 0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x33,0x33,0x33,0x33,0x32,0x32,0x32,0x32, + 0x33,0x33,0x33,0x33,0x33,0x34,0x34,0x34,0x35,0x35,0x34,0x34,0x34,0x33,0x33, + 0x33,0x33,0x34,0x34,0x34,0x34,0x34,0x34,0x33,0x33,0x34,0x35,0x35,0x35,0x35, + 0x36,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35, + 0x35,0x35,0x35,0x35,0x35,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36, + 0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36, + 0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x35,0x35, + 0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x37,0x37, + 0x37,0x37,0x37,0x38,0x38,0x38,0x37,0x37,0x37,0x37,0x37,0x37,0x37,0x37,0x37, + 0x37,0x37,0x37,0x37,0x37,0x37,0x37,0x37,0x37,0x36,0x36,0x36,0x36,0x37,0x37, + 0x37,0x36,0x36,0x36,0x36,0x36,0x36,0x37,0x38,0x37,0x37,0x37,0x37,0x38,0x38, + 0x38,0x39,0x38,0x38,0x38,0x38,0x38,0x38,0x38,0x38,0x38,0x38,0x38,0x38,0x38, + 0x38,0x38,0x38,0x38,0x38,0x38,0x38,0x38,0x38,0x38,0x38,0x38,0x38,0x38,0x38, + 0x38,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0xc8,0x23,0x23,0x23,0x24,0x24, + 0x24,0x24,0x24,0x24,0x24,0x24,0x23,0x23,0x23,0x24,0x24,0x24,0x24,0x24,0x24, + 0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25, + 0x26,0x25,0x25,0x26,0x26,0x26,0x26,0x26,0x26,0x26,0x26,0x26,0x26,0x26,0x25, + 0x26,0x26,0x26,0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x28,0x28,0x28, + 0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28, + 0x28,0x28,0x29,0x29,0x29,0x29,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28, + 0x28,0x28,0x28,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29, + 0x29,0x29,0x29,0x29,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2b,0x2b,0x2b,0x2b,0x2b, + 0x2b,0x2b,0x2b,0x2b,0x2c,0x2c,0x2d,0x2c,0x2a,0x2a,0x2a,0x2a,0x2a,0x2b,0x2b, + 0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2c,0x2b,0x2b, + 0x2b,0x2b,0x2b,0x2b,0x2c,0x2c,0x2c,0x2b,0x2b,0x2b,0x2c,0x2c,0x2c,0x2c,0x2c, + 0x2b,0x2b,0x2c,0x2c,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2c,0x2d,0x2d,0x2e, + 0x2e,0x2d,0x2c,0x2d,0x2d,0x2e,0x2e,0x2e,0x2e,0x2d,0x2d,0x2d,0x2e,0x2e,0x2d, + 0x2c,0x2d,0x2d,0x2d,0x2e,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f, + 0x2f,0x2f,0x2f,0x30,0x30,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x30,0x2f,0x2f, + 0x2f,0x2f,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30, + 0x2f,0x2f,0x2f,0x30,0x30,0x31,0x31,0x31,0x32,0x32,0x31,0x31,0x31,0x30,0x31, + 0x31,0x31,0x31,0x31,0x31,0x31,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30, + 0x30,0x30,0x30,0x31,0x31,0x31,0x31,0x31,0x30,0x30,0x31,0x32,0x32,0x31,0x31, + 0x31,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32, + 0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x33,0x33,0x33,0x33,0x33,0x32,0x32, + 0x32,0x32,0x33,0x33,0x33,0x33,0x34,0x34,0x34,0x34,0x35,0x35,0x35,0x34,0x34, + 0x34,0x33,0x34,0x34,0x34,0x34,0x35,0x34,0x35,0x34,0x34,0x33,0x34,0x35,0x35, + 0x35,0x36,0x36,0x36,0x36,0x36,0x35,0x35,0x35,0x36,0x36,0x36,0x36,0x36,0x35, + 0x35,0x35,0x35,0x35,0x35,0x35,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36, + 0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36, + 0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x37,0x36,0x37,0x36,0x36,0x36, + 0x35,0x36,0x36,0x36,0x36,0x36,0x36,0x37,0x36,0x36,0x36,0x36,0x36,0x36,0x37, + 0x37,0x38,0x37,0x38,0x38,0x38,0x38,0x38,0x38,0x37,0x37,0x37,0x37,0x37,0x37, + 0x37,0x37,0x37,0x37,0x37,0x37,0x37,0x37,0x37,0x37,0x37,0x37,0x37,0x37,0x37, + 0x38,0x38,0x37,0x37,0x37,0x37,0x36,0x36,0x36,0x37,0x38,0x38,0x37,0x37,0x38, + 0x39,0x38,0x39,0x39,0x39,0x38,0x38,0x38,0x39,0x39,0x39,0x39,0x39,0x39,0x39, + 0x39,0x39,0x39,0x39,0x39,0x38,0x38,0x38,0x38,0x38,0x39,0x38,0x38,0x38,0x38, + 0x38,0x38,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0xc8,0x23,0x23,0x24, + 0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x23,0x23,0x24,0x24,0x24,0x24, + 0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x25,0x25,0x25,0x25,0x25,0x25, + 0x25,0x26,0x26,0x26,0x26,0x26,0x26,0x26,0x26,0x26,0x27,0x27,0x26,0x26,0x26, + 0x26,0x26,0x26,0x26,0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x28, + 0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28, + 0x28,0x28,0x28,0x28,0x29,0x29,0x29,0x29,0x29,0x28,0x28,0x28,0x28,0x28,0x28, + 0x28,0x28,0x28,0x28,0x28,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29, + 0x29,0x29,0x29,0x29,0x29,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2b,0x2b,0x2b,0x2b, + 0x2b,0x2b,0x2b,0x2b,0x2b,0x2c,0x2c,0x2c,0x2c,0x2c,0x2b,0x2a,0x2a,0x2b,0x2b, + 0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2c,0x2b,0x2b,0x2b,0x2b,0x2b,0x2c,0x2c, + 0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c, + 0x2c,0x2c,0x2c,0x2c,0x2c,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d, + 0x2e,0x2e,0x2e,0x2d,0x2d,0x2d,0x2e,0x2e,0x2e,0x2e,0x2e,0x2d,0x2d,0x2d,0x2d, + 0x2e,0x2e,0x2d,0x2d,0x2d,0x2e,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f, + 0x2f,0x2f,0x2f,0x2f,0x2f,0x30,0x30,0x30,0x2f,0x2f,0x2f,0x2f,0x2f,0x30,0x30, + 0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30, + 0x30,0x30,0x30,0x30,0x30,0x30,0x31,0x31,0x31,0x32,0x32,0x32,0x32,0x32,0x31, + 0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31, + 0x31,0x31,0x31,0x31,0x31,0x31,0x32,0x32,0x31,0x31,0x31,0x31,0x32,0x32,0x32, + 0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32, + 0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x33,0x33,0x33,0x33,0x33,0x33, + 0x33,0x32,0x32,0x32,0x33,0x33,0x33,0x34,0x34,0x34,0x34,0x34,0x35,0x35,0x35, + 0x35,0x34,0x34,0x34,0x34,0x34,0x34,0x35,0x35,0x35,0x35,0x35,0x34,0x34,0x34, + 0x35,0x35,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x35,0x36,0x36,0x36,0x36,0x36, + 0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36, + 0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36, + 0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x37,0x37,0x37,0x37,0x37, + 0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x37,0x37,0x37,0x37,0x37,0x37,0x37, + 0x37,0x37,0x38,0x38,0x38,0x38,0x38,0x38,0x38,0x38,0x38,0x38,0x38,0x38,0x38, + 0x38,0x38,0x38,0x37,0x37,0x37,0x38,0x38,0x38,0x38,0x38,0x38,0x37,0x38,0x38, + 0x38,0x38,0x38,0x38,0x38,0x38,0x38,0x38,0x37,0x37,0x37,0x38,0x38,0x38,0x38, + 0x38,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x38,0x38,0x39,0x39,0x39,0x39,0x39, + 0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x38,0x38,0x38,0x39,0x39,0x39,0x39, + 0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0xc8,0x24, + 0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24, + 0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x25,0x25,0x25,0x25,0x25,0x25,0x25, + 0x25,0x25,0x25,0x26,0x26,0x26,0x26,0x26,0x26,0x26,0x26,0x26,0x26,0x27,0x27, + 0x27,0x26,0x26,0x26,0x26,0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x28, + 0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28, + 0x28,0x28,0x29,0x28,0x28,0x28,0x29,0x29,0x29,0x29,0x29,0x29,0x28,0x28,0x29, + 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x28,0x28,0x28,0x28, + 0x29,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2b,0x2b,0x2b,0x2b,0x2a,0x2a,0x2b, + 0x2b,0x2b,0x2b,0x2b,0x2a,0x2a,0x2a,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2a,0x2b, + 0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2c,0x2c,0x2c,0x2c,0x2b,0x2b,0x2b,0x2b,0x2c, + 0x2c,0x2c,0x2d,0x2d,0x2d,0x2c,0x2c,0x2c,0x2c,0x2d,0x2c,0x2c,0x2c,0x2c,0x2c, + 0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2d,0x2d, + 0x2e,0x2e,0x2e,0x2f,0x2f,0x2e,0x2e,0x2e,0x2e,0x2f,0x2f,0x2e,0x2e,0x2e,0x2e, + 0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2f,0x2f,0x2f,0x2f,0x2f,0x30,0x30,0x30, + 0x30,0x2f,0x2f,0x2f,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x2f,0x2f, + 0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x31,0x31,0x31,0x31,0x31,0x30,0x30, + 0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x32,0x32,0x32,0x32,0x32, + 0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32, + 0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32, + 0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x33,0x33,0x33,0x33, + 0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x34,0x34, + 0x34,0x34,0x33,0x32,0x32,0x33,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x35, + 0x35,0x35,0x35,0x34,0x34,0x34,0x34,0x34,0x35,0x35,0x35,0x36,0x36,0x36,0x35, + 0x35,0x35,0x35,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36, + 0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36, + 0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x37,0x37,0x36,0x36,0x36,0x36, + 0x36,0x36,0x37,0x37,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x37,0x37,0x37,0x38, + 0x38,0x38,0x38,0x37,0x36,0x37,0x37,0x37,0x37,0x37,0x37,0x37,0x37,0x37,0x37, + 0x37,0x37,0x37,0x38,0x39,0x39,0x39,0x38,0x38,0x38,0x38,0x38,0x38,0x38,0x39, + 0x39,0x39,0x39,0x39,0x39,0x38,0x38,0x38,0x39,0x39,0x39,0x39,0x39,0x38,0x38, + 0x38,0x38,0x38,0x38,0x38,0x38,0x38,0x38,0x38,0x39,0x39,0x38,0x38,0x39,0x39, + 0x39,0x39,0x39,0x39,0x39,0x3a,0x3a,0x3a,0x39,0x39,0x39,0x39,0x39,0x39,0x39, + 0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39, + 0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x39,0x38,0x39,0x39,0x39,0x39,0x39, + 0xc8,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24, + 0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x25,0x25,0x25,0x25,0x25, + 0x25,0x25,0x25,0x25,0x25,0x26,0x26,0x26,0x26,0x26,0x26,0x26,0x26,0x26,0x27, + 0x27,0x27,0x27,0x26,0x26,0x26,0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x27, + 0x27,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28, + 0x28,0x28,0x29,0x29,0x29,0x29,0x28,0x28,0x29,0x29,0x29,0x29,0x29,0x29,0x28, + 0x28,0x29,0x29,0x29,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x29,0x29,0x29,0x28,0x28, + 0x28,0x28,0x29,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2b,0x2b,0x2b,0x2b,0x2b,0x2a, + 0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2a,0x2a,0x2b,0x2b,0x2b,0x2b,0x2c,0x2b,0x2b, + 0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2c,0x2c,0x2c,0x2c,0x2c,0x2b,0x2b,0x2b, + 0x2c,0x2c,0x2c,0x2c,0x2d,0x2d,0x2d,0x2d,0x2c,0x2c,0x2d,0x2d,0x2d,0x2c,0x2c, + 0x2c,0x2c,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e, + 0x2e,0x2d,0x2e,0x2e,0x2e,0x2f,0x2f,0x2e,0x2e,0x2e,0x2f,0x2f,0x2f,0x2f,0x2e, + 0x2e,0x2e,0x2f,0x2e,0x2e,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x30,0x30, + 0x30,0x30,0x30,0x30,0x2f,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30, + 0x2f,0x2f,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x31,0x31,0x31,0x31,0x31, + 0x30,0x30,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x32,0x32,0x32,0x32, + 0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32, + 0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32, + 0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x33,0x33, + 0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x34, + 0x34,0x34,0x34,0x34,0x33,0x32,0x33,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34, + 0x34,0x34,0x35,0x35,0x35,0x34,0x34,0x34,0x34,0x35,0x35,0x35,0x35,0x36,0x36, + 0x36,0x36,0x35,0x35,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36, + 0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36, + 0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x37,0x37,0x36,0x36, + 0x36,0x36,0x36,0x36,0x37,0x37,0x36,0x36,0x36,0x36,0x36,0x36,0x37,0x37,0x37, + 0x37,0x38,0x38,0x38,0x38,0x38,0x37,0x37,0x37,0x37,0x37,0x37,0x37,0x37,0x37, + 0x37,0x37,0x37,0x37,0x37,0x38,0x39,0x39,0x39,0x38,0x38,0x38,0x38,0x38,0x38, + 0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x38,0x38,0x39,0x39,0x39,0x39,0x39,0x39, + 0x39,0x38,0x38,0x38,0x38,0x38,0x38,0x38,0x38,0x38,0x39,0x39,0x39,0x39,0x39, + 0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x3a,0x3a,0x3a,0x3a,0x39,0x39,0x39,0x39, + 0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39, + 0x39,0x39,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x39,0x38,0x39,0x39,0x39, + 0x39,0x39,0xc8,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24, + 0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x25,0x25,0x25, + 0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x26,0x26,0x26,0x26,0x26,0x26,0x26,0x26, + 0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x28,0x28,0x28,0x28,0x28, + 0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28, + 0x28,0x28,0x28,0x29,0x29,0x29,0x29,0x29,0x28,0x28,0x29,0x29,0x29,0x29,0x29, + 0x28,0x28,0x28,0x29,0x29,0x2a,0x2b,0x2b,0x2b,0x2b,0x2a,0x2a,0x2a,0x29,0x29, + 0x29,0x28,0x28,0x28,0x29,0x2a,0x2a,0x2a,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b, + 0x2b,0x2b,0x2b,0x2c,0x2d,0x2d,0x2c,0x2c,0x2b,0x2b,0x2b,0x2c,0x2c,0x2d,0x2d, + 0x2d,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2c,0x2c,0x2c,0x2c,0x2c,0x2b, + 0x2b,0x2c,0x2c,0x2c,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d, + 0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2e,0x2e,0x2e,0x2d,0x2d,0x2e,0x2e,0x2e,0x2e, + 0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f, + 0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x30,0x30,0x30, + 0x30,0x30,0x31,0x31,0x31,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30, + 0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x31,0x31,0x31,0x31, + 0x31,0x31,0x31,0x31,0x31,0x32,0x32,0x32,0x32,0x32,0x31,0x31,0x32,0x32,0x32, + 0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32, + 0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32, + 0x32,0x32,0x32,0x32,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33, + 0x33,0x33,0x33,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34, + 0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x35,0x35,0x35,0x34,0x34, + 0x34,0x34,0x34,0x34,0x34,0x35,0x35,0x35,0x34,0x34,0x35,0x35,0x35,0x35,0x35, + 0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36, + 0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36, + 0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x37,0x37, + 0x36,0x36,0x36,0x36,0x36,0x37,0x37,0x37,0x37,0x37,0x37,0x37,0x37,0x37,0x37, + 0x37,0x37,0x37,0x38,0x38,0x38,0x38,0x38,0x38,0x38,0x38,0x38,0x38,0x37,0x37, + 0x37,0x37,0x37,0x37,0x37,0x37,0x37,0x38,0x39,0x39,0x39,0x39,0x39,0x39,0x39, + 0x39,0x39,0x39,0x39,0x39,0x39,0x3a,0x3a,0x39,0x39,0x39,0x39,0x39,0x39,0x3a, + 0x3a,0x39,0x39,0x39,0x38,0x38,0x38,0x38,0x38,0x38,0x38,0x38,0x38,0x39,0x3a, + 0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x39,0x39,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x39, + 0x39,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x39, + 0x39,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x39,0x39,0x39, + 0x39,0x3a,0x3a,0x3a,0xc8,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24, + 0x24,0x25,0x25,0x25,0x25,0x25,0x25,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24, + 0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x26,0x26,0x26,0x26,0x26, + 0x26,0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x28,0x28,0x28, + 0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28, + 0x28,0x28,0x28,0x28,0x28,0x28,0x29,0x28,0x29,0x29,0x29,0x29,0x2a,0x2a,0x29, + 0x29,0x29,0x28,0x28,0x28,0x29,0x29,0x2a,0x2b,0x2b,0x2b,0x2b,0x2b,0x2a,0x2a, + 0x29,0x29,0x29,0x29,0x28,0x28,0x29,0x2a,0x2a,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b, + 0x2b,0x2b,0x2b,0x2a,0x2b,0x2c,0x2c,0x2c,0x2c,0x2b,0x2b,0x2b,0x2b,0x2b,0x2c, + 0x2c,0x2c,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b, + 0x2b,0x2b,0x2b,0x2c,0x2c,0x2c,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d, + 0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e, + 0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f, + 0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x30,0x30,0x30,0x2f,0x2f,0x2f,0x2f,0x2f, + 0x30,0x30,0x30,0x30,0x30,0x31,0x31,0x31,0x31,0x31,0x30,0x30,0x30,0x30,0x30, + 0x30,0x30,0x30,0x30,0x31,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x31,0x31,0x31, + 0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32, + 0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x33, + 0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32, + 0x32,0x32,0x32,0x32,0x32,0x33,0x34,0x34,0x34,0x34,0x33,0x33,0x33,0x33,0x33, + 0x33,0x34,0x34,0x34,0x33,0x34,0x34,0x34,0x34,0x34,0x34,0x35,0x35,0x35,0x35, + 0x35,0x35,0x35,0x34,0x34,0x34,0x35,0x35,0x35,0x35,0x34,0x35,0x35,0x35,0x35, + 0x35,0x34,0x34,0x34,0x34,0x34,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35, + 0x35,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36, + 0x36,0x36,0x36,0x36,0x35,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36, + 0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x37,0x37,0x36,0x36,0x36,0x36,0x36,0x36, + 0x36,0x36,0x36,0x36,0x36,0x36,0x37,0x37,0x37,0x38,0x38,0x37,0x37,0x37,0x37, + 0x37,0x37,0x37,0x37,0x37,0x37,0x38,0x38,0x38,0x38,0x37,0x38,0x38,0x38,0x38, + 0x37,0x37,0x37,0x37,0x37,0x37,0x37,0x37,0x37,0x38,0x39,0x39,0x39,0x39,0x39, + 0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39, + 0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x38,0x38,0x38,0x38,0x38,0x38,0x39, + 0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x39,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a, + 0x3a,0x39,0x39,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a, + 0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a, + 0x39,0x39,0x3a,0x3a,0x3a,0x3a,0xc8,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24, + 0x24,0x24,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x24,0x24,0x24,0x24,0x24,0x24, + 0x24,0x24,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x26,0x26,0x26, + 0x26,0x26,0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x28, + 0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28, + 0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x29,0x29,0x29,0x29,0x2a, + 0x2a,0x2a,0x29,0x29,0x28,0x28,0x28,0x29,0x29,0x2a,0x2b,0x2b,0x2b,0x2b,0x2b, + 0x2a,0x2a,0x2a,0x2a,0x2a,0x29,0x29,0x29,0x29,0x2a,0x2b,0x2b,0x2b,0x2b,0x2b, + 0x2b,0x2b,0x2b,0x2b,0x2b,0x2a,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b, + 0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b, + 0x2b,0x2b,0x2b,0x2b,0x2b,0x2c,0x2c,0x2c,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d, + 0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e, + 0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2f,0x2f,0x2f,0x2f,0x2f, + 0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x30,0x30,0x31,0x30,0x30,0x2f,0x2f, + 0x2f,0x2f,0x2f,0x30,0x30,0x30,0x30,0x30,0x31,0x31,0x31,0x31,0x31,0x30,0x30, + 0x30,0x30,0x30,0x30,0x31,0x31,0x31,0x31,0x30,0x30,0x30,0x30,0x30,0x30,0x31, + 0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x32,0x32,0x32,0x32,0x32,0x32, + 0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32, + 0x32,0x33,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32, + 0x32,0x32,0x32,0x32,0x32,0x32,0x33,0x34,0x34,0x34,0x34,0x34,0x34,0x33,0x33, + 0x33,0x33,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x35,0x35,0x35, + 0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x36, + 0x36,0x35,0x35,0x35,0x34,0x34,0x34,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35, + 0x35,0x35,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36, + 0x36,0x36,0x36,0x36,0x36,0x35,0x35,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36, + 0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x37,0x37,0x37,0x36,0x36,0x36, + 0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x37,0x37,0x37,0x38,0x38,0x38,0x38,0x37, + 0x37,0x37,0x37,0x37,0x37,0x37,0x37,0x37,0x38,0x38,0x38,0x38,0x37,0x38,0x38, + 0x38,0x38,0x38,0x38,0x37,0x37,0x37,0x37,0x37,0x37,0x38,0x39,0x39,0x39,0x39, + 0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39, + 0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x3a,0x3a,0x39,0x39,0x39,0x39,0x39, + 0x39,0x39,0x3a,0x3b,0x3b,0x3b,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a, + 0x3a,0x3a,0x3a,0x39,0x39,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a, + 0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a, + 0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0xc8,0x24,0x24,0x24,0x24,0x24,0x24, + 0x24,0x24,0x24,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x24,0x24,0x24,0x24,0x24, + 0x24,0x24,0x24,0x25,0x25,0x25,0x26,0x26,0x26,0x26,0x26,0x26,0x26,0x26,0x27, + 0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x28,0x28,0x28,0x28,0x28, + 0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x29,0x29, + 0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x29,0x29,0x29,0x2a,0x2a,0x29, + 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x2a,0x2a,0x2a,0x2b,0x2a,0x2a,0x2a, + 0x2a,0x2a,0x2a,0x2a,0x2b,0x2b,0x2b,0x2b,0x2a,0x2a,0x2a,0x2b,0x2b,0x2b,0x2b, + 0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2c,0x2c,0x2c, + 0x2c,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c, + 0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2d,0x2c,0x2c,0x2c,0x2c,0x2d,0x2d,0x2d, + 0x2d,0x2d,0x2d,0x2d,0x2e,0x2d,0x2d,0x2d,0x2d,0x2d,0x2e,0x2e,0x2e,0x2e,0x2e, + 0x2e,0x2e,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f, + 0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x30,0x30,0x30,0x2f,0x2f,0x30,0x2f,0x2f, + 0x30,0x30,0x31,0x30,0x30,0x31,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30, + 0x30,0x30,0x31,0x31,0x31,0x31,0x32,0x32,0x32,0x32,0x31,0x31,0x31,0x31,0x31, + 0x31,0x31,0x31,0x31,0x31,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32, + 0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32, + 0x33,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32, + 0x32,0x32,0x33,0x34,0x33,0x33,0x32,0x32,0x33,0x34,0x34,0x35,0x35,0x35,0x35, + 0x34,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x34,0x34,0x35,0x35,0x35,0x35,0x35, + 0x35,0x34,0x34,0x34,0x34,0x34,0x35,0x35,0x36,0x35,0x35,0x34,0x35,0x36,0x36, + 0x36,0x36,0x36,0x35,0x35,0x35,0x35,0x35,0x35,0x36,0x36,0x36,0x36,0x36,0x36, + 0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x37,0x37,0x36,0x36,0x36,0x36, + 0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x37,0x37,0x37,0x36,0x36, + 0x36,0x37,0x38,0x38,0x37,0x36,0x36,0x36,0x37,0x37,0x36,0x36,0x36,0x36,0x36, + 0x37,0x37,0x37,0x37,0x37,0x38,0x37,0x37,0x38,0x38,0x38,0x38,0x38,0x38,0x38, + 0x38,0x38,0x38,0x39,0x38,0x38,0x38,0x38,0x38,0x38,0x39,0x39,0x39,0x39,0x38, + 0x38,0x38,0x38,0x38,0x39,0x39,0x38,0x38,0x39,0x39,0x39,0x39,0x39,0x39,0x39, + 0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a, + 0x3a,0x3a,0x3a,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x3a,0x3a,0x3a,0x3a,0x3a, + 0x39,0x39,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x39,0x3a,0x3a,0x3a,0x3a,0x3a, + 0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a, + 0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3b, + 0x3b,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3b,0x3b,0xc8,0x24,0x24,0x24,0x24, + 0x24,0x24,0x24,0x24,0x24,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x24,0x24,0x24, + 0x24,0x24,0x24,0x24,0x25,0x25,0x25,0x25,0x26,0x26,0x26,0x26,0x26,0x26,0x27, + 0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x28,0x28,0x28,0x28, + 0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x29, + 0x29,0x29,0x29,0x28,0x28,0x28,0x28,0x29,0x29,0x29,0x29,0x29,0x29,0x2a,0x2a, + 0x2a,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x2a,0x2a,0x2a,0x2b,0x2b,0x2b, + 0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2b,0x2b,0x2b,0x2b,0x2b,0x2a,0x2b,0x2b,0x2b, + 0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2c, + 0x2c,0x2c,0x2c,0x2c,0x2b,0x2b,0x2b,0x2b,0x2b,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c, + 0x2c,0x2c,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2c,0x2c,0x2c,0x2d, + 0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2e,0x2d,0x2d,0x2d,0x2d,0x2d,0x2e,0x2e,0x2e, + 0x2e,0x2e,0x2e,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f, + 0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x30,0x30,0x30,0x2f,0x2f,0x2f, + 0x2f,0x2f,0x30,0x30,0x31,0x31,0x31,0x31,0x31,0x30,0x30,0x30,0x30,0x30,0x30, + 0x30,0x30,0x30,0x30,0x31,0x31,0x31,0x32,0x32,0x32,0x32,0x32,0x31,0x31,0x31, + 0x32,0x32,0x31,0x31,0x31,0x31,0x31,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32, + 0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x33,0x33,0x32,0x32,0x32,0x32,0x32, + 0x32,0x32,0x33,0x33,0x32,0x32,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33, + 0x33,0x33,0x33,0x33,0x33,0x34,0x34,0x33,0x33,0x33,0x33,0x34,0x34,0x35,0x35, + 0x35,0x35,0x35,0x34,0x33,0x33,0x33,0x33,0x33,0x33,0x34,0x35,0x35,0x35,0x35, + 0x35,0x35,0x35,0x34,0x34,0x34,0x34,0x34,0x35,0x36,0x36,0x35,0x35,0x34,0x35, + 0x36,0x36,0x36,0x36,0x36,0x35,0x35,0x35,0x36,0x36,0x36,0x36,0x36,0x36,0x36, + 0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x38,0x38,0x37,0x37, + 0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x37,0x37,0x37,0x37,0x38,0x38, + 0x37,0x36,0x36,0x37,0x38,0x39,0x38,0x37,0x36,0x37,0x37,0x37,0x36,0x36,0x36, + 0x36,0x38,0x38,0x38,0x37,0x37,0x38,0x38,0x38,0x38,0x38,0x38,0x38,0x38,0x38, + 0x38,0x38,0x38,0x38,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39, + 0x39,0x39,0x39,0x38,0x38,0x39,0x39,0x39,0x39,0x39,0x3a,0x3a,0x3a,0x3a,0x3a, + 0x3a,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a, + 0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x39,0x39,0x39,0x39,0x39,0x39,0x3a,0x3a,0x3a, + 0x3a,0x3a,0x39,0x39,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x39,0x3a,0x3a,0x3a, + 0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a, + 0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a, + 0x3b,0x3b,0x3b,0x3b,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3b,0x3b,0xc8,0x24,0x24, + 0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25, + 0x25,0x25,0x24,0x24,0x24,0x25,0x25,0x25,0x26,0x26,0x26,0x26,0x26,0x26,0x26, + 0x27,0x27,0x27,0x28,0x28,0x28,0x28,0x28,0x27,0x27,0x27,0x27,0x28,0x28,0x28, + 0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28, + 0x29,0x29,0x29,0x2a,0x2a,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29, + 0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2b,0x2b, + 0x2b,0x2b,0x2b,0x2a,0x2a,0x2a,0x2a,0x2a,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b, + 0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b, + 0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c, + 0x2c,0x2c,0x2c,0x2c,0x2d,0x2d,0x2d,0x2d,0x2d,0x2e,0x2e,0x2d,0x2d,0x2d,0x2d, + 0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2c,0x2c,0x2c,0x2c,0x2d,0x2e, + 0x2e,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x30, + 0x30,0x30,0x30,0x30,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x30,0x30,0x30,0x2f, + 0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x30,0x31,0x31,0x31,0x31,0x30,0x30,0x30,0x30, + 0x30,0x30,0x30,0x30,0x30,0x30,0x31,0x31,0x31,0x32,0x32,0x32,0x32,0x32,0x31, + 0x31,0x31,0x32,0x32,0x32,0x31,0x31,0x31,0x31,0x32,0x32,0x32,0x32,0x32,0x32, + 0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32, + 0x32,0x32,0x32,0x32,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33, + 0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x34,0x34,0x34,0x34,0x34,0x34,0x34, + 0x34,0x34,0x34,0x34,0x34,0x35,0x35,0x34,0x34,0x34,0x34,0x34,0x35,0x35,0x35, + 0x35,0x35,0x35,0x35,0x35,0x34,0x34,0x34,0x34,0x35,0x36,0x36,0x36,0x35,0x35, + 0x35,0x35,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36, + 0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x37,0x38,0x38, + 0x38,0x37,0x37,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x37,0x38,0x38,0x37,0x37, + 0x37,0x38,0x38,0x38,0x37,0x37,0x38,0x38,0x39,0x38,0x37,0x38,0x38,0x36,0x37, + 0x38,0x37,0x37,0x3a,0x39,0x38,0x38,0x38,0x38,0x38,0x38,0x38,0x38,0x39,0x39, + 0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39, + 0x39,0x39,0x39,0x39,0x39,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a, + 0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a, + 0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a, + 0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a, + 0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3b,0x3b,0x3b,0x3b,0x3b,0x3b, + 0x3b,0x3b,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a, + 0x3a,0x3b,0x3b,0x3b,0x3b,0x3b,0x3b,0x3b,0x3b,0x3b,0x3b,0x3b,0x3b,0x3b,0xc8, + 0x25,0x25,0x25,0x25,0x25,0x25,0x24,0x24,0x25,0x25,0x25,0x25,0x25,0x25,0x25, + 0x25,0x25,0x25,0x25,0x24,0x24,0x25,0x25,0x26,0x25,0x26,0x26,0x26,0x27,0x26, + 0x26,0x27,0x27,0x27,0x28,0x28,0x28,0x28,0x28,0x28,0x27,0x27,0x27,0x28,0x28, + 0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x29,0x29,0x28,0x28,0x28,0x28, + 0x28,0x29,0x29,0x29,0x2a,0x2a,0x2a,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29, + 0x29,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2b,0x2b,0x2a,0x2b, + 0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2a,0x2a,0x2a,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b, + 0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2c,0x2c,0x2b,0x2b,0x2b,0x2c, + 0x2c,0x2c,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2c,0x2c,0x2d,0x2d,0x2c, + 0x2c,0x2d,0x2d,0x2d,0x2c,0x2c,0x2d,0x2d,0x2d,0x2d,0x2d,0x2e,0x2e,0x2e,0x2d, + 0x2d,0x2d,0x2d,0x2d,0x2e,0x2d,0x2d,0x2e,0x2e,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d, + 0x2e,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f, + 0x30,0x30,0x30,0x31,0x31,0x31,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x30,0x30, + 0x30,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x30,0x31,0x31,0x31,0x31,0x30,0x30, + 0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x31,0x31,0x31,0x32,0x32,0x32,0x32, + 0x32,0x31,0x31,0x32,0x32,0x32,0x32,0x32,0x31,0x31,0x32,0x32,0x32,0x32,0x32, + 0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32, + 0x32,0x32,0x32,0x32,0x32,0x33,0x33,0x33,0x34,0x33,0x33,0x33,0x33,0x33,0x33, + 0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x32,0x33,0x34,0x35,0x35,0x35, + 0x35,0x34,0x34,0x33,0x33,0x33,0x34,0x35,0x36,0x35,0x35,0x34,0x34,0x35,0x35, + 0x36,0x35,0x35,0x35,0x35,0x36,0x35,0x35,0x34,0x34,0x35,0x35,0x36,0x36,0x36, + 0x36,0x35,0x35,0x35,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36, + 0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x37, + 0x38,0x38,0x38,0x38,0x37,0x37,0x36,0x36,0x36,0x37,0x37,0x37,0x37,0x38,0x38, + 0x38,0x38,0x37,0x38,0x38,0x39,0x38,0x37,0x37,0x38,0x3a,0x38,0x36,0x37,0x38, + 0x37,0x38,0x39,0x37,0x37,0x38,0x38,0x37,0x39,0x3a,0x38,0x38,0x38,0x38,0x39, + 0x39,0x3a,0x39,0x39,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a, + 0x3a,0x3a,0x3a,0x3a,0x39,0x39,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a, + 0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a, + 0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a, + 0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a, + 0x3a,0x3a,0x3b,0x3b,0x3a,0x3b,0x3b,0x3b,0x3b,0x3a,0x3b,0x3b,0x3b,0x3b,0x3b, + 0x3b,0x3b,0x3b,0x3b,0x3b,0x3a,0x3a,0x3a,0x3b,0x3b,0x3b,0x3b,0x3a,0x3b,0x3b, + 0x3a,0x3a,0x3b,0x3c,0x3b,0x3b,0x3b,0x3c,0x3c,0x3b,0x3b,0x3b,0x3b,0x3b,0x3b, + 0x3b,0xc8,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25, + 0x25,0x26,0x26,0x25,0x25,0x25,0x25,0x25,0x25,0x26,0x26,0x26,0x26,0x26,0x27, + 0x27,0x27,0x27,0x27,0x27,0x27,0x28,0x28,0x28,0x28,0x28,0x28,0x27,0x27,0x28, + 0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x29,0x29,0x29,0x28, + 0x28,0x28,0x29,0x29,0x29,0x2a,0x2a,0x2a,0x2a,0x29,0x29,0x29,0x29,0x29,0x29, + 0x29,0x29,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2b,0x2b,0x2b, + 0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2a,0x2b,0x2b,0x2b,0x2b,0x2b, + 0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2c,0x2c,0x2c,0x2c,0x2c, + 0x2c,0x2c,0x2d,0x2d,0x2c,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2c,0x2d,0x2d, + 0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2e,0x2e, + 0x2e,0x2e,0x2d,0x2d,0x2d,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e, + 0x2e,0x2f,0x2f,0x2f,0x2f,0x30,0x30,0x30,0x30,0x30,0x2f,0x2f,0x2f,0x2f,0x2f, + 0x2f,0x30,0x30,0x30,0x30,0x31,0x31,0x31,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f, + 0x30,0x30,0x30,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x30,0x31,0x31,0x31,0x31, + 0x31,0x31,0x31,0x31,0x31,0x30,0x30,0x30,0x30,0x30,0x31,0x31,0x31,0x32,0x32, + 0x32,0x32,0x32,0x31,0x31,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32, + 0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32, + 0x32,0x32,0x32,0x32,0x32,0x32,0x33,0x33,0x33,0x34,0x34,0x33,0x33,0x33,0x33, + 0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x34,0x34,0x32,0x33,0x34,0x36, + 0x36,0x36,0x36,0x35,0x33,0x33,0x33,0x33,0x33,0x35,0x36,0x36,0x36,0x35,0x35, + 0x35,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x35,0x35,0x35,0x35,0x35,0x36, + 0x36,0x36,0x36,0x36,0x35,0x35,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36, + 0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36, + 0x36,0x37,0x38,0x38,0x38,0x38,0x37,0x37,0x37,0x36,0x36,0x37,0x38,0x38,0x38, + 0x38,0x38,0x39,0x39,0x38,0x38,0x38,0x39,0x39,0x38,0x38,0x38,0x3a,0x39,0x36, + 0x37,0x38,0x38,0x39,0x3a,0x38,0x36,0x37,0x37,0x37,0x3a,0x3a,0x38,0x38,0x38, + 0x39,0x39,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a, + 0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a, + 0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a, + 0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a, + 0x3a,0x3b,0x3b,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a, + 0x3b,0x3b,0x3b,0x3b,0x3b,0x3b,0x3b,0x3b,0x3b,0x3b,0x3b,0x3b,0x3b,0x3c,0x3c, + 0x3b,0x3b,0x3b,0x3b,0x3b,0x3b,0x3b,0x3b,0x3b,0x3b,0x3b,0x3b,0x3b,0x3b,0x3b, + 0x3b,0x3b,0x3b,0x3b,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3b,0x3b,0x3b,0x3b, + 0x3b,0x3b,0x3b,0xc8,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x26,0x26, + 0x26,0x26,0x26,0x26,0x26,0x26,0x26,0x26,0x26,0x26,0x26,0x26,0x26,0x26,0x26, + 0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x28,0x28,0x28,0x28,0x28,0x28,0x28, + 0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x29,0x29, + 0x29,0x29,0x29,0x29,0x29,0x29,0x2a,0x2a,0x2a,0x2a,0x2a,0x29,0x29,0x29,0x2a, + 0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2b,0x2b,0x2b,0x2a,0x2a,0x2b,0x2b,0x2b,0x2b, + 0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b, + 0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c, + 0x2c,0x2c,0x2c,0x2d,0x2e,0x2d,0x2d,0x2c,0x2b,0x2b,0x2b,0x2b,0x2b,0x2c,0x2c, + 0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2e,0x2e,0x2e,0x2e, + 0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2f,0x2f, + 0x2f,0x2f,0x2f,0x2f,0x2f,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30, + 0x30,0x30,0x30,0x30,0x30,0x2f,0x2f,0x30,0x30,0x30,0x30,0x2f,0x2f,0x2f,0x2f, + 0x30,0x30,0x30,0x30,0x30,0x30,0x2f,0x2f,0x2f,0x2f,0x2f,0x30,0x31,0x31,0x32, + 0x32,0x32,0x32,0x32,0x32,0x32,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x32, + 0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32, + 0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x33,0x33,0x33,0x33,0x33,0x33, + 0x33,0x33,0x33,0x33,0x32,0x32,0x32,0x33,0x33,0x33,0x34,0x34,0x34,0x34,0x33, + 0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x34,0x34,0x34,0x34,0x34,0x33,0x33, + 0x35,0x36,0x36,0x36,0x36,0x35,0x34,0x33,0x34,0x33,0x34,0x36,0x36,0x36,0x36, + 0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36, + 0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36, + 0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x37,0x36,0x36,0x36,0x36,0x36, + 0x36,0x37,0x37,0x37,0x38,0x38,0x38,0x38,0x38,0x37,0x37,0x37,0x37,0x37,0x38, + 0x38,0x39,0x38,0x37,0x39,0x3a,0x39,0x37,0x36,0x38,0x39,0x3a,0x39,0x39,0x38, + 0x39,0x3a,0x38,0x36,0x36,0x36,0x37,0x39,0x3a,0x3a,0x39,0x38,0x37,0x37,0x38, + 0x38,0x39,0x39,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a, + 0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a, + 0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3b,0x3b,0x3b, + 0x3b,0x3b,0x3b,0x3b,0x3b,0x3b,0x3b,0x3b,0x3b,0x3b,0x3b,0x3b,0x3b,0x3b,0x3b, + 0x3b,0x3b,0x3b,0x3b,0x3b,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3b, + 0x3b,0x3b,0x3b,0x3b,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3b,0x3b,0x3b,0x3b,0x3c, + 0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3b,0x3b,0x3b,0x3b, + 0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3d,0x3d,0x3d,0x3d,0x3c,0x3c,0x3c,0x3c, + 0x3c,0x3c,0x3c,0x3c,0x3c,0xc8,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25, + 0x26,0x26,0x26,0x26,0x26,0x26,0x26,0x26,0x26,0x26,0x26,0x26,0x26,0x26,0x26, + 0x26,0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x28,0x28,0x28,0x28,0x28,0x28, + 0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x29, + 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x2a,0x2a,0x2a,0x2a,0x2a,0x29,0x29, + 0x29,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2b,0x2b,0x2b,0x2b,0x2a,0x2a,0x2b,0x2b, + 0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b, + 0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c, + 0x2c,0x2c,0x2c,0x2c,0x2c,0x2d,0x2e,0x2e,0x2d,0x2c,0x2c,0x2b,0x2b,0x2c,0x2c, + 0x2c,0x2c,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2e,0x2e,0x2e, + 0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e, + 0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30, + 0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x2f,0x2f,0x2f,0x2f,0x2f,0x30,0x30,0x2f, + 0x2f,0x2f,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x2f,0x2f,0x2f,0x30,0x31,0x31, + 0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x31,0x31,0x31,0x31,0x31,0x31, + 0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32, + 0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33, + 0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x32,0x33,0x33,0x33,0x34,0x34,0x34,0x34, + 0x34,0x34,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x34,0x34,0x34,0x34,0x34, + 0x34,0x34,0x35,0x36,0x36,0x36,0x36,0x35,0x35,0x34,0x35,0x34,0x34,0x36,0x36, + 0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36, + 0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36, + 0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x37,0x37,0x37,0x37,0x37,0x36, + 0x36,0x36,0x37,0x37,0x37,0x37,0x38,0x38,0x38,0x38,0x38,0x37,0x37,0x37,0x37, + 0x37,0x38,0x39,0x39,0x38,0x38,0x39,0x3a,0x39,0x37,0x37,0x38,0x39,0x3a,0x3a, + 0x39,0x38,0x39,0x3a,0x38,0x36,0x36,0x36,0x36,0x3a,0x3b,0x3a,0x39,0x39,0x37, + 0x37,0x38,0x39,0x39,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a, + 0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a, + 0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3b, + 0x3b,0x3b,0x3b,0x3b,0x3b,0x3b,0x3b,0x3b,0x3b,0x3b,0x3b,0x3b,0x3b,0x3b,0x3b, + 0x3b,0x3b,0x3b,0x3b,0x3b,0x3b,0x3b,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a, + 0x3b,0x3b,0x3b,0x3b,0x3b,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3b,0x3b,0x3b, + 0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3b, + 0x3b,0x3b,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3c, + 0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3d,0xc8,0x26,0x26,0x26,0x26,0x26,0x26,0x26, + 0x26,0x26,0x26,0x26,0x26,0x27,0x27,0x26,0x26,0x26,0x26,0x26,0x26,0x26,0x26, + 0x27,0x27,0x27,0x27,0x27,0x28,0x28,0x28,0x27,0x27,0x28,0x28,0x28,0x28,0x28, + 0x28,0x28,0x27,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28, + 0x28,0x28,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x2a,0x2a,0x2a,0x2a,0x2a, + 0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2a,0x2a, + 0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b, + 0x2b,0x2b,0x2b,0x2b,0x2b,0x2c,0x2b,0x2b,0x2b,0x2b,0x2c,0x2c,0x2c,0x2c,0x2c, + 0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2d,0x2e,0x2e,0x2d,0x2c,0x2c,0x2c,0x2c, + 0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e, + 0x2e,0x2e,0x2e,0x2f,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2f,0x2f,0x2f,0x2e, + 0x2e,0x2e,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f, + 0x2f,0x2f,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x2f,0x2f,0x2f,0x30, + 0x30,0x30,0x30,0x30,0x30,0x30,0x31,0x31,0x31,0x30,0x30,0x30,0x30,0x30,0x31, + 0x31,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32, + 0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32, + 0x32,0x32,0x32,0x32,0x33,0x33,0x33,0x33,0x33,0x34,0x34,0x34,0x34,0x34,0x34, + 0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34, + 0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x35, + 0x35,0x35,0x36,0x35,0x35,0x35,0x35,0x36,0x36,0x36,0x36,0x36,0x36,0x35,0x35, + 0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x37,0x37,0x37,0x37,0x37,0x37,0x37, + 0x36,0x36,0x36,0x36,0x36,0x37,0x37,0x37,0x37,0x37,0x36,0x36,0x36,0x36,0x36, + 0x36,0x36,0x36,0x36,0x36,0x37,0x37,0x37,0x37,0x37,0x38,0x38,0x38,0x38,0x38, + 0x38,0x37,0x37,0x37,0x37,0x38,0x38,0x38,0x38,0x38,0x38,0x38,0x38,0x38,0x38, + 0x38,0x38,0x38,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x38,0x38,0x39,0x3a,0x3a, + 0x3a,0x39,0x39,0x39,0x3a,0x3a,0x38,0x37,0x3a,0x3a,0x37,0x3a,0x3b,0x37,0x37, + 0x3a,0x39,0x39,0x39,0x39,0x39,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a, + 0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a, + 0x3b,0x3b,0x3b,0x3b,0x3b,0x3b,0x3b,0x3b,0x3b,0x3b,0x3b,0x3b,0x3b,0x3a,0x3a, + 0x3a,0x3b,0x3b,0x3b,0x3b,0x3b,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c, + 0x3c,0x3b,0x3b,0x3b,0x3b,0x3b,0x3b,0x3b,0x3b,0x3b,0x3b,0x3b,0x3b,0x3b,0x3b, + 0x3b,0x3b,0x3b,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3d,0x3d,0x3d,0x3c,0x3c,0x3c, + 0x3c,0x3c,0x3c,0x3c,0x3d,0x3d,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c, + 0x3c,0x3c,0x3c,0x3c,0x3d,0x3d,0x3c,0x3c,0x3c,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d, + 0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0xc8,0x26,0x26,0x26,0x26,0x26, + 0x26,0x26,0x26,0x26,0x26,0x27,0x27,0x27,0x27,0x26,0x26,0x26,0x26,0x26,0x26, + 0x26,0x26,0x27,0x27,0x27,0x27,0x27,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28, + 0x28,0x28,0x28,0x27,0x27,0x28,0x28,0x28,0x28,0x29,0x29,0x28,0x28,0x28,0x28, + 0x28,0x28,0x28,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x2a,0x2a,0x2a,0x2a, + 0x2a,0x2a,0x2b,0x2b,0x2b,0x2b,0x2a,0x2a,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b, + 0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b, + 0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2c,0x2c,0x2c,0x2b,0x2b,0x2c,0x2c,0x2c,0x2c, + 0x2c,0x2c,0x2c,0x2c,0x2d,0x2d,0x2d,0x2d,0x2c,0x2d,0x2e,0x2e,0x2d,0x2d,0x2c, + 0x2c,0x2d,0x2e,0x2e,0x2e,0x2e,0x2d,0x2d,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e, + 0x2e,0x2e,0x2f,0x2e,0x2f,0x2f,0x2f,0x2e,0x2e,0x2e,0x2e,0x2e,0x2f,0x2f,0x2f, + 0x2f,0x2f,0x2e,0x2e,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x30,0x30,0x30, + 0x30,0x30,0x30,0x2f,0x2f,0x2f,0x30,0x30,0x30,0x30,0x30,0x31,0x30,0x30,0x30, + 0x30,0x30,0x31,0x31,0x31,0x31,0x30,0x31,0x31,0x31,0x31,0x31,0x30,0x30,0x30, + 0x30,0x31,0x31,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32, + 0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x33,0x33,0x32, + 0x32,0x33,0x33,0x33,0x32,0x33,0x34,0x34,0x34,0x33,0x34,0x35,0x35,0x35,0x35, + 0x34,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35, + 0x34,0x34,0x34,0x34,0x34,0x34,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x34,0x34, + 0x35,0x35,0x35,0x36,0x36,0x36,0x35,0x35,0x35,0x36,0x36,0x36,0x36,0x36,0x36, + 0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x37,0x37,0x37,0x38,0x38, + 0x37,0x37,0x37,0x36,0x37,0x36,0x37,0x37,0x38,0x38,0x38,0x37,0x37,0x36,0x36, + 0x36,0x36,0x36,0x36,0x36,0x37,0x37,0x37,0x38,0x38,0x38,0x38,0x39,0x39,0x39, + 0x39,0x39,0x39,0x38,0x37,0x37,0x38,0x38,0x39,0x38,0x38,0x38,0x38,0x38,0x38, + 0x38,0x38,0x38,0x38,0x38,0x39,0x39,0x39,0x3a,0x3a,0x38,0x37,0x38,0x3a,0x3a, + 0x3b,0x3a,0x39,0x39,0x39,0x3a,0x3a,0x39,0x38,0x3a,0x3d,0x3c,0x38,0x3a,0x3a, + 0x36,0x36,0x3a,0x3a,0x3a,0x3a,0x39,0x39,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3b, + 0x3a,0x3a,0x3a,0x3a,0x3b,0x3b,0x3b,0x3b,0x3b,0x3b,0x3b,0x3b,0x3b,0x3b,0x3a, + 0x3a,0x3b,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3b, + 0x3a,0x3a,0x3b,0x3b,0x3b,0x3b,0x3b,0x3c,0x3c,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d, + 0x3d,0x3d,0x3c,0x3c,0x3b,0x3b,0x3b,0x3b,0x3b,0x3b,0x3b,0x3b,0x3c,0x3c,0x3b, + 0x3c,0x3c,0x3c,0x3c,0x3c,0x3d,0x3d,0x3d,0x3d,0x3c,0x3c,0x3d,0x3d,0x3d,0x3d, + 0x3c,0x3c,0x3c,0x3c,0x3c,0x3d,0x3d,0x3d,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c, + 0x3c,0x3c,0x3c,0x3c,0x3c,0x3d,0x3d,0x3d,0x3c,0x3c,0x3d,0x3d,0x3d,0x3d,0x3d, + 0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3e,0xc8,0x26,0x26,0x26, + 0x26,0x26,0x26,0x26,0x26,0x26,0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x27, + 0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x28,0x28,0x28,0x28,0x28,0x28, + 0x28,0x28,0x28,0x28,0x28,0x27,0x27,0x28,0x28,0x28,0x28,0x29,0x29,0x29,0x29, + 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x2a,0x2a,0x2a, + 0x2a,0x2a,0x2a,0x2a,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b, + 0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b, + 0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c, + 0x2c,0x2c,0x2c,0x2c,0x2c,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2e,0x2e,0x2d, + 0x2d,0x2d,0x2d,0x2e,0x2e,0x2f,0x2f,0x2e,0x2d,0x2d,0x2e,0x2e,0x2e,0x2e,0x2e, + 0x2e,0x2e,0x2e,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f, + 0x2f,0x2f,0x2f,0x2f,0x2f,0x2e,0x2e,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x30,0x30, + 0x31,0x31,0x31,0x31,0x31,0x2f,0x2f,0x2f,0x30,0x30,0x30,0x31,0x31,0x31,0x31, + 0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31, + 0x30,0x30,0x30,0x31,0x31,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32, + 0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x33,0x33, + 0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x34,0x34,0x34,0x34,0x34,0x35,0x35, + 0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x36,0x36,0x35,0x35,0x35,0x35, + 0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35, + 0x35,0x35,0x35,0x35,0x36,0x36,0x36,0x36,0x36,0x35,0x35,0x36,0x36,0x36,0x37, + 0x37,0x37,0x37,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x37,0x37,0x37,0x38, + 0x38,0x38,0x37,0x37,0x37,0x37,0x37,0x37,0x37,0x38,0x38,0x38,0x38,0x38,0x37, + 0x36,0x36,0x36,0x36,0x36,0x37,0x37,0x38,0x38,0x38,0x39,0x39,0x39,0x39,0x39, + 0x39,0x39,0x39,0x39,0x39,0x39,0x38,0x38,0x38,0x39,0x39,0x39,0x38,0x38,0x38, + 0x39,0x39,0x38,0x38,0x38,0x38,0x38,0x39,0x39,0x3a,0x3b,0x3c,0x37,0x36,0x38, + 0x3a,0x3c,0x3b,0x3a,0x39,0x3a,0x3a,0x3a,0x3a,0x38,0x39,0x3b,0x3e,0x3d,0x39, + 0x3a,0x3a,0x36,0x37,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a, + 0x3b,0x3b,0x3b,0x3b,0x3b,0x3b,0x3b,0x3b,0x3b,0x3b,0x3b,0x3b,0x3b,0x3b,0x3b, + 0x3b,0x3b,0x3b,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c, + 0x3c,0x3c,0x3b,0x3b,0x3b,0x3b,0x3b,0x3c,0x3c,0x3c,0x3d,0x3d,0x3d,0x3d,0x3d, + 0x3d,0x3d,0x3d,0x3d,0x3d,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c, + 0x3c,0x3c,0x3c,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d, + 0x3d,0x3d,0x3d,0x3c,0x3c,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d, + 0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d, + 0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3e,0x3e,0xc8,0x27, + 0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x28,0x28, + 0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28, + 0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x29,0x29,0x29,0x29,0x2a, + 0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x29,0x29,0x29,0x29,0x2a,0x2a,0x2a,0x2a, + 0x2a,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b, + 0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c, + 0x2c,0x2c,0x2c,0x2c,0x2c,0x2b,0x2b,0x2b,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c, + 0x2c,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2e, + 0x2d,0x2d,0x2d,0x2d,0x2e,0x2e,0x2f,0x2f,0x2f,0x2f,0x2e,0x2e,0x2f,0x2f,0x2f, + 0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f, + 0x2f,0x2f,0x30,0x30,0x30,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x30, + 0x31,0x31,0x32,0x32,0x32,0x32,0x31,0x2f,0x2f,0x30,0x31,0x31,0x31,0x31,0x32, + 0x32,0x32,0x31,0x31,0x31,0x32,0x32,0x31,0x31,0x31,0x32,0x32,0x32,0x32,0x32, + 0x31,0x31,0x31,0x31,0x31,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32, + 0x32,0x32,0x32,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33, + 0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x35,0x34,0x34, + 0x35,0x35,0x35,0x36,0x36,0x36,0x36,0x36,0x35,0x35,0x35,0x36,0x36,0x36,0x35, + 0x35,0x35,0x35,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36, + 0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x37,0x37,0x37,0x36,0x36,0x36,0x36, + 0x37,0x38,0x38,0x38,0x38,0x37,0x37,0x36,0x36,0x36,0x36,0x37,0x37,0x37,0x37, + 0x38,0x38,0x38,0x38,0x38,0x38,0x38,0x37,0x37,0x37,0x38,0x39,0x39,0x39,0x38, + 0x38,0x38,0x37,0x36,0x36,0x36,0x36,0x37,0x38,0x39,0x39,0x39,0x39,0x39,0x39, + 0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x3a,0x3a,0x3a,0x39, + 0x39,0x39,0x39,0x3a,0x39,0x39,0x39,0x39,0x39,0x3a,0x3a,0x3a,0x3b,0x3c,0x38, + 0x37,0x39,0x3b,0x3c,0x3a,0x3a,0x3a,0x3b,0x3b,0x3a,0x3a,0x3b,0x3b,0x3b,0x3a, + 0x39,0x38,0x3a,0x3b,0x3b,0x3b,0x3a,0x36,0x36,0x3a,0x3b,0x3a,0x3a,0x3a,0x3a, + 0x3a,0x3a,0x3b,0x3b,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c, + 0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c, + 0x3c,0x3d,0x3d,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d, + 0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d, + 0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d, + 0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3e,0x3e,0x3e,0x3d,0x3d,0x3d, + 0x3d,0x3d,0x3d,0x3d,0x3e,0x3d,0x3d,0x3d,0x3d,0x3e,0x3e,0x3d,0x3d,0x3d,0x3d, + 0x3d,0x3d,0x3e,0x3e,0x3e,0x3e,0x3d,0x3d,0x3d,0x3e,0x3e,0x3e,0x3e,0x3e,0x3e, + 0xc8,0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x28, + 0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x29,0x29,0x28,0x28,0x28,0x28,0x28,0x28, + 0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x29,0x29,0x29,0x29, + 0x29,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x29,0x29,0x29,0x2a,0x2a, + 0x2a,0x2a,0x2a,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b, + 0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2c,0x2c,0x2c,0x2c, + 0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2b,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c, + 0x2c,0x2c,0x2c,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d, + 0x2e,0x2e,0x2e,0x2d,0x2d,0x2d,0x2e,0x2e,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f, + 0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f, + 0x2f,0x2f,0x2f,0x30,0x30,0x30,0x30,0x30,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f, + 0x2f,0x30,0x31,0x31,0x32,0x32,0x32,0x32,0x31,0x2f,0x30,0x30,0x31,0x31,0x31, + 0x31,0x32,0x32,0x31,0x31,0x30,0x31,0x32,0x32,0x31,0x31,0x31,0x32,0x32,0x32, + 0x32,0x32,0x31,0x31,0x31,0x31,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32, + 0x32,0x32,0x32,0x32,0x32,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33, + 0x33,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x35,0x35, + 0x34,0x34,0x35,0x35,0x35,0x36,0x36,0x36,0x36,0x36,0x35,0x35,0x35,0x36,0x36, + 0x36,0x36,0x35,0x35,0x35,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36, + 0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x37,0x37,0x37,0x38,0x38, + 0x38,0x38,0x37,0x38,0x38,0x38,0x38,0x38,0x38,0x37,0x36,0x36,0x36,0x37,0x37, + 0x37,0x38,0x38,0x38,0x38,0x38,0x38,0x38,0x38,0x38,0x37,0x38,0x38,0x39,0x39, + 0x39,0x39,0x38,0x38,0x37,0x37,0x36,0x37,0x37,0x38,0x38,0x39,0x39,0x39,0x39, + 0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x3a,0x3a, + 0x3a,0x3a,0x39,0x39,0x3a,0x3a,0x39,0x39,0x39,0x39,0x39,0x3a,0x3a,0x3a,0x3a, + 0x3a,0x38,0x39,0x3b,0x3c,0x3a,0x37,0x38,0x3b,0x3e,0x3d,0x38,0x37,0x3b,0x3d, + 0x3e,0x3c,0x3a,0x3a,0x39,0x3a,0x3d,0x3d,0x3a,0x36,0x37,0x3b,0x3c,0x3b,0x3b, + 0x3a,0x3a,0x3a,0x3a,0x3b,0x3b,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c, + 0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c, + 0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3c,0x3c,0x3c,0x3c,0x3d,0x3d,0x3d,0x3d,0x3d, + 0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d, + 0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d, + 0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3e,0x3f,0x3f,0x3f,0x3d, + 0x3d,0x3d,0x3d,0x3d,0x3d,0x3e,0x3e,0x3e,0x3e,0x3e,0x3e,0x3e,0x3e,0x3e,0x3d, + 0x3d,0x3d,0x3d,0x3e,0x3e,0x3e,0x3e,0x3e,0x3e,0x3d,0x3e,0x3e,0x3e,0x3e,0x3e, + 0x3e,0x3e,0xc8,0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x27, + 0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x29,0x29,0x29,0x29,0x28,0x28,0x28, + 0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x29,0x29,0x28,0x28,0x28,0x29,0x2a, + 0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a, + 0x2a,0x2a,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b, + 0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2c,0x2c,0x2c,0x2c, + 0x2d,0x2d,0x2d,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c, + 0x2d,0x2c,0x2c,0x2c,0x2c,0x2d,0x2d,0x2d,0x2d,0x2d,0x2e,0x2e,0x2e,0x2e,0x2e, + 0x2e,0x2e,0x2e,0x2f,0x2f,0x2e,0x2d,0x2d,0x2d,0x2e,0x2f,0x2f,0x2f,0x2f,0x2f, + 0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x30, + 0x30,0x30,0x30,0x30,0x30,0x30,0x31,0x31,0x30,0x30,0x30,0x2f,0x2f,0x30,0x30, + 0x30,0x2f,0x2f,0x30,0x30,0x30,0x31,0x31,0x31,0x31,0x31,0x30,0x30,0x31,0x31, + 0x31,0x31,0x31,0x31,0x31,0x31,0x30,0x30,0x30,0x32,0x32,0x32,0x32,0x32,0x32, + 0x32,0x32,0x32,0x32,0x32,0x31,0x31,0x31,0x32,0x32,0x32,0x32,0x32,0x32,0x32, + 0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x33,0x33,0x33,0x34,0x34,0x34, + 0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x35,0x35,0x35,0x34,0x34,0x34,0x34,0x35, + 0x35,0x35,0x34,0x34,0x35,0x35,0x35,0x36,0x36,0x36,0x36,0x36,0x35,0x35,0x35, + 0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36, + 0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x37, + 0x38,0x39,0x39,0x39,0x38,0x37,0x37,0x38,0x38,0x38,0x38,0x38,0x37,0x37,0x37, + 0x37,0x37,0x38,0x38,0x38,0x38,0x38,0x38,0x39,0x39,0x38,0x38,0x38,0x38,0x38, + 0x39,0x39,0x39,0x39,0x39,0x38,0x38,0x38,0x38,0x38,0x39,0x39,0x39,0x39,0x39, + 0x39,0x39,0x39,0x39,0x39,0x38,0x38,0x38,0x39,0x39,0x39,0x39,0x39,0x39,0x39, + 0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a, + 0x3a,0x39,0x39,0x38,0x3a,0x3d,0x3c,0x39,0x34,0x36,0x3d,0x41,0x40,0x36,0x34, + 0x38,0x3e,0x42,0x40,0x40,0x3e,0x37,0x35,0x3a,0x3a,0x39,0x3a,0x3b,0x3c,0x3c, + 0x3c,0x3b,0x3b,0x3b,0x3b,0x3b,0x3b,0x3b,0x3c,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d, + 0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d, + 0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d, + 0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d, + 0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d, + 0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3e,0x3f,0x40, + 0x3f,0x3e,0x3e,0x3e,0x3e,0x3e,0x3e,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f, + 0x3f,0x3e,0x3e,0x3e,0x3e,0x3e,0x3e,0x3e,0x3e,0x3e,0x3e,0x3e,0x3e,0x3e,0x3e, + 0x3e,0x3e,0x3e,0x3e,0xc8,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28, + 0x27,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28, + 0x28,0x28,0x28,0x29,0x29,0x29,0x29,0x29,0x28,0x29,0x29,0x2a,0x29,0x29,0x29, + 0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b, + 0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b, + 0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c, + 0x2c,0x2d,0x2d,0x2d,0x2c,0x2c,0x2c,0x2d,0x2c,0x2c,0x2c,0x2c,0x2d,0x2c,0x2c, + 0x2d,0x2d,0x2c,0x2c,0x2c,0x2c,0x2d,0x2d,0x2d,0x2d,0x2d,0x2e,0x2d,0x2d,0x2d, + 0x2d,0x2e,0x2e,0x2e,0x2e,0x2f,0x2f,0x2e,0x2e,0x2d,0x2d,0x2e,0x2f,0x2f,0x2f, + 0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f, + 0x2f,0x2f,0x30,0x30,0x30,0x30,0x30,0x30,0x31,0x30,0x30,0x30,0x30,0x30,0x30, + 0x31,0x30,0x30,0x30,0x30,0x31,0x31,0x31,0x31,0x31,0x31,0x32,0x32,0x32,0x32, + 0x32,0x31,0x32,0x32,0x32,0x31,0x31,0x31,0x31,0x31,0x32,0x32,0x32,0x32,0x32, + 0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32, + 0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x33,0x33,0x33,0x33,0x34, + 0x34,0x34,0x34,0x35,0x35,0x34,0x34,0x34,0x34,0x34,0x35,0x34,0x34,0x34,0x34, + 0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35, + 0x35,0x35,0x35,0x35,0x35,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36, + 0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36, + 0x37,0x37,0x38,0x39,0x39,0x38,0x37,0x37,0x37,0x37,0x37,0x38,0x38,0x39,0x38, + 0x38,0x38,0x37,0x38,0x38,0x38,0x38,0x38,0x38,0x37,0x38,0x38,0x37,0x38,0x38, + 0x38,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x38,0x39,0x38,0x39,0x39,0x39,0x39, + 0x39,0x39,0x39,0x39,0x38,0x38,0x38,0x37,0x37,0x38,0x38,0x38,0x39,0x39,0x3a, + 0x3a,0x3a,0x3a,0x3a,0x3b,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a, + 0x3a,0x3a,0x3a,0x3a,0x3a,0x3b,0x3b,0x3a,0x3a,0x3a,0x39,0x3a,0x3d,0x3f,0x3d, + 0x35,0x39,0x41,0x36,0x2f,0x30,0x38,0x41,0x41,0x3e,0x3a,0x39,0x3a,0x3c,0x3d, + 0x3d,0x3d,0x3c,0x3b,0x3b,0x3b,0x3c,0x3c,0x3c,0x3b,0x3b,0x3c,0x3d,0x3d,0x3d, + 0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d, + 0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3e,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d, + 0x3e,0x3e,0x3e,0x3e,0x3e,0x3e,0x3d,0x3d,0x3e,0x3e,0x3e,0x3e,0x3e,0x3e,0x3e, + 0x3e,0x3e,0x3e,0x3e,0x3e,0x3e,0x3d,0x3d,0x3e,0x3e,0x3e,0x3e,0x3e,0x3e,0x3d, + 0x3e,0x3e,0x3e,0x3e,0x3e,0x3e,0x3e,0x3e,0x3e,0x3e,0x3e,0x3d,0x3e,0x3e,0x3f, + 0x3f,0x40,0x3f,0x3e,0x3e,0x3e,0x3f,0x3f,0x3f,0x40,0x40,0x3f,0x3f,0x3e,0x3e, + 0x3f,0x3f,0x3e,0x3e,0x3e,0x3e,0x3e,0x3e,0x3e,0x3e,0x3e,0x3e,0x3e,0x3e,0x3f, + 0x3f,0x3f,0x3e,0x3e,0x3f,0x3f,0xc8,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28, + 0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28, + 0x28,0x28,0x28,0x28,0x29,0x29,0x2a,0x2a,0x2a,0x29,0x29,0x29,0x2a,0x2a,0x2a, + 0x2a,0x29,0x2a,0x2a,0x2a,0x2a,0x2a,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b, + 0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b, + 0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2c,0x2c,0x2c,0x2d,0x2d,0x2c, + 0x2c,0x2c,0x2d,0x2d,0x2d,0x2c,0x2c,0x2c,0x2c,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d, + 0x2d,0x2d,0x2d,0x2d,0x2c,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2e,0x2e,0x2d, + 0x2d,0x2d,0x2d,0x2e,0x2e,0x2e,0x2e,0x2f,0x2f,0x2f,0x2e,0x2e,0x2e,0x2f,0x2f, + 0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x30,0x30,0x30,0x30, + 0x2f,0x2f,0x2f,0x2f,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30, + 0x30,0x31,0x31,0x30,0x30,0x30,0x30,0x31,0x32,0x32,0x32,0x32,0x32,0x32,0x32, + 0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x31,0x31,0x32,0x32,0x32,0x32,0x32, + 0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32, + 0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x33,0x33,0x33,0x33, + 0x33,0x34,0x34,0x34,0x35,0x35,0x35,0x35,0x34,0x34,0x34,0x34,0x34,0x34,0x34, + 0x34,0x35,0x35,0x35,0x36,0x36,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35, + 0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x36,0x36,0x36,0x36,0x36,0x36,0x36, + 0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36, + 0x36,0x37,0x37,0x37,0x38,0x38,0x38,0x38,0x37,0x37,0x37,0x37,0x37,0x37,0x39, + 0x39,0x39,0x39,0x38,0x38,0x38,0x38,0x38,0x38,0x38,0x38,0x37,0x37,0x37,0x37, + 0x37,0x38,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39, + 0x39,0x39,0x39,0x39,0x39,0x39,0x38,0x38,0x38,0x37,0x38,0x38,0x38,0x38,0x39, + 0x3a,0x3a,0x3a,0x3a,0x3b,0x3b,0x3b,0x3b,0x3b,0x3a,0x3a,0x3a,0x3a,0x3a,0x3b, + 0x3b,0x3b,0x3b,0x3b,0x3b,0x3b,0x3b,0x3d,0x3a,0x36,0x3a,0x3d,0x3d,0x3d,0x3b, + 0x3b,0x3a,0x37,0x3d,0x42,0x28,0x18,0x1e,0x2c,0x3c,0x42,0x42,0x3b,0x3a,0x3a, + 0x3c,0x3e,0x3f,0x3e,0x3c,0x3a,0x3a,0x3c,0x3d,0x3d,0x3d,0x3c,0x3b,0x3b,0x3c, + 0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d, + 0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3e,0x3e,0x3e,0x3d,0x3d, + 0x3d,0x3d,0x3e,0x3e,0x3e,0x3e,0x3e,0x3e,0x3e,0x3e,0x3e,0x3e,0x3e,0x3e,0x3e, + 0x3e,0x3e,0x3e,0x3e,0x3e,0x3e,0x3e,0x3e,0x3e,0x3e,0x3f,0x3f,0x3f,0x3f,0x3f, + 0x3e,0x3e,0x3e,0x3e,0x3e,0x3e,0x3e,0x3e,0x3e,0x3e,0x3e,0x3e,0x3e,0x3e,0x3e, + 0x3f,0x3f,0x3f,0x3f,0x3f,0x3e,0x3e,0x3e,0x3f,0x3f,0x40,0x40,0x40,0x3f,0x3f, + 0x3e,0x3e,0x3e,0x3e,0x3e,0x3e,0x3e,0x3e,0x3e,0x3e,0x3e,0x3e,0x3e,0x3e,0x3e, + 0x3e,0x40,0x40,0x3f,0x3f,0x3f,0x3f,0x3f,0xc8,0x28,0x28,0x28,0x28,0x28,0x28, + 0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28, + 0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x2a, + 0x2a,0x2a,0x2a,0x29,0x2a,0x2a,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b, + 0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b, + 0x2b,0x2c,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2c,0x2c,0x2c,0x2c,0x2c,0x2d, + 0x2d,0x2c,0x2c,0x2c,0x2d,0x2d,0x2d,0x2c,0x2c,0x2c,0x2c,0x2d,0x2e,0x2e,0x2e, + 0x2e,0x2e,0x2e,0x2e,0x2d,0x2d,0x2d,0x2d,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e, + 0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f, + 0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x30, + 0x30,0x30,0x30,0x2f,0x2f,0x2f,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30, + 0x30,0x30,0x30,0x31,0x32,0x31,0x30,0x30,0x30,0x31,0x32,0x32,0x32,0x32,0x32, + 0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32, + 0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32, + 0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x33,0x33,0x33,0x33,0x33,0x33,0x34,0x34, + 0x34,0x34,0x34,0x34,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35, + 0x35,0x35,0x35,0x35,0x35,0x36,0x36,0x36,0x35,0x35,0x35,0x35,0x35,0x36,0x36, + 0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36, + 0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x37,0x37,0x37,0x37,0x37, + 0x37,0x37,0x37,0x37,0x37,0x38,0x38,0x38,0x39,0x38,0x38,0x38,0x38,0x38,0x38, + 0x38,0x39,0x39,0x39,0x38,0x38,0x38,0x38,0x39,0x39,0x39,0x38,0x38,0x38,0x38, + 0x38,0x38,0x38,0x39,0x39,0x39,0x3a,0x3a,0x3a,0x39,0x39,0x39,0x3a,0x3a,0x3a, + 0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x39,0x39,0x39,0x3a, + 0x3a,0x3a,0x3a,0x3b,0x3b,0x3b,0x3b,0x3b,0x3b,0x3b,0x3b,0x3b,0x3b,0x3b,0x3b, + 0x3b,0x3b,0x3b,0x3b,0x3c,0x3c,0x3c,0x3c,0x3c,0x3a,0x39,0x38,0x3a,0x3c,0x3a, + 0x3a,0x3b,0x36,0x36,0x40,0x3a,0x2b,0x18,0x10,0x19,0x21,0x26,0x26,0x2e,0x40, + 0x40,0x39,0x3a,0x3d,0x3e,0x3e,0x3d,0x3b,0x3b,0x3c,0x3d,0x3d,0x3d,0x3c,0x3c, + 0x3c,0x3c,0x3d,0x3d,0x3d,0x3e,0x3e,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d, + 0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3e,0x3e,0x3e,0x3e, + 0x3d,0x3d,0x3d,0x3d,0x3e,0x3e,0x3e,0x3d,0x3d,0x3e,0x3f,0x3f,0x3e,0x3e,0x3e, + 0x3e,0x3e,0x3e,0x3e,0x3e,0x3e,0x3e,0x3e,0x3e,0x3e,0x3e,0x3e,0x3e,0x3f,0x3f, + 0x3f,0x3f,0x3e,0x3e,0x3e,0x3e,0x3e,0x3e,0x3e,0x3e,0x3e,0x3e,0x3e,0x3e,0x3e, + 0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3e,0x3d,0x3e,0x3e,0x3e,0x3f,0x3f,0x3f,0x3f, + 0x3f,0x3f,0x3f,0x3e,0x3e,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f, + 0x3f,0x3f,0x3f,0x40,0x41,0x40,0x40,0x40,0x3f,0x3f,0xc8,0x28,0x28,0x28,0x28, + 0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28, + 0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x29,0x29,0x29,0x29,0x29, + 0x29,0x2a,0x2a,0x2a,0x29,0x29,0x2a,0x2a,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b, + 0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b, + 0x2b,0x2b,0x2b,0x2c,0x2c,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2c,0x2c,0x2c,0x2c, + 0x2c,0x2d,0x2d,0x2c,0x2c,0x2c,0x2d,0x2d,0x2d,0x2d,0x2c,0x2c,0x2c,0x2d,0x2e, + 0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2d,0x2d,0x2d,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e, + 0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f, + 0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f, + 0x2f,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30, + 0x30,0x30,0x30,0x30,0x30,0x31,0x32,0x31,0x31,0x30,0x30,0x31,0x32,0x32,0x32, + 0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32, + 0x32,0x32,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33, + 0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x33,0x33,0x33,0x33,0x34,0x34,0x34, + 0x34,0x34,0x34,0x34,0x34,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35, + 0x35,0x35,0x35,0x35,0x35,0x35,0x36,0x36,0x36,0x36,0x35,0x35,0x35,0x35,0x35, + 0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36, + 0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x37,0x37,0x37,0x37, + 0x37,0x37,0x37,0x37,0x37,0x37,0x37,0x38,0x38,0x38,0x39,0x39,0x38,0x38,0x38, + 0x38,0x38,0x38,0x39,0x39,0x39,0x39,0x38,0x38,0x39,0x39,0x39,0x39,0x39,0x38, + 0x38,0x38,0x39,0x39,0x39,0x39,0x39,0x39,0x3a,0x3a,0x3a,0x3a,0x39,0x39,0x3a, + 0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3b,0x3b,0x3b,0x3a,0x3a,0x3a, + 0x3a,0x3a,0x3a,0x3a,0x3b,0x3b,0x3b,0x3b,0x3b,0x3b,0x3b,0x3b,0x3b,0x3b,0x3b, + 0x3b,0x3b,0x3b,0x3b,0x3b,0x3b,0x3c,0x3c,0x3c,0x3c,0x3b,0x39,0x39,0x3b,0x3c, + 0x3c,0x3a,0x3b,0x3d,0x36,0x36,0x47,0x3a,0x1d,0x0e,0x09,0x12,0x15,0x14,0x12, + 0x20,0x45,0x47,0x3a,0x3a,0x3b,0x3d,0x3d,0x3d,0x3c,0x3c,0x3c,0x3c,0x3d,0x3d, + 0x3d,0x3d,0x3c,0x3c,0x3d,0x3d,0x3d,0x3e,0x3e,0x3e,0x3d,0x3d,0x3d,0x3d,0x3d, + 0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3e,0x3e,0x3e, + 0x3e,0x3e,0x3e,0x3d,0x3d,0x3e,0x3e,0x3e,0x3e,0x3d,0x3d,0x3e,0x3f,0x3f,0x3e, + 0x3e,0x3e,0x3e,0x3e,0x3e,0x3e,0x3e,0x3e,0x3e,0x3e,0x3e,0x3e,0x3e,0x3e,0x3e, + 0x3f,0x3f,0x3f,0x3f,0x3e,0x3e,0x3e,0x3e,0x3e,0x3e,0x3e,0x3e,0x3e,0x3e,0x3e, + 0x3e,0x3e,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3e,0x3d,0x3e,0x3e,0x3e,0x3e,0x3f, + 0x3f,0x3f,0x3f,0x3f,0x3f,0x3e,0x3e,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f, + 0x3f,0x3f,0x3f,0x3f,0x3f,0x41,0x41,0x41,0x40,0x40,0x40,0x40,0xc8,0x28,0x28, + 0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28, + 0x28,0x28,0x29,0x29,0x29,0x29,0x29,0x28,0x28,0x28,0x29,0x29,0x29,0x2a,0x2a, + 0x29,0x29,0x29,0x2a,0x2a,0x2a,0x29,0x29,0x2a,0x2a,0x2a,0x2a,0x2a,0x2b,0x2b, + 0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b, + 0x2c,0x2c,0x2c,0x2b,0x2b,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c, + 0x2c,0x2d,0x2d,0x2d,0x2d,0x2c,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2c,0x2c, + 0x2d,0x2e,0x2e,0x2e,0x2e,0x2f,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2f,0x2f, + 0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x30,0x2f, + 0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f, + 0x2f,0x2f,0x2f,0x30,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31, + 0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x32,0x31,0x31,0x31,0x31,0x31,0x32, + 0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x33,0x33,0x33, + 0x33,0x33,0x33,0x33,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34, + 0x34,0x34,0x33,0x32,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x34,0x34,0x34,0x35, + 0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x36,0x36,0x36,0x36,0x36,0x36, + 0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x35,0x35,0x35, + 0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36, + 0x37,0x37,0x37,0x37,0x37,0x37,0x37,0x37,0x37,0x37,0x37,0x37,0x37,0x37,0x38, + 0x38,0x38,0x38,0x38,0x38,0x37,0x37,0x37,0x37,0x37,0x38,0x38,0x39,0x39,0x39, + 0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x3a,0x3a,0x3a, + 0x3a,0x39,0x39,0x39,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a, + 0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3b,0x3b,0x3b,0x3b,0x3b, + 0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3b,0x3b,0x3b,0x3b,0x3b,0x3b,0x3b,0x3b, + 0x3b,0x3b,0x3b,0x3b,0x3b,0x3b,0x3b,0x3b,0x3c,0x3c,0x3c,0x3c,0x3b,0x39,0x3a, + 0x3d,0x3d,0x3c,0x3c,0x3d,0x3e,0x39,0x3a,0x4b,0x3a,0x1a,0x09,0x03,0x0a,0x0a, + 0x07,0x08,0x1c,0x47,0x4c,0x3e,0x3b,0x3a,0x3d,0x3d,0x3d,0x3d,0x3d,0x3c,0x3c, + 0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3e,0x3e,0x3e,0x3e,0x3e,0x3d,0x3d, + 0x3e,0x3e,0x3e,0x3d,0x3d,0x3e,0x3e,0x3e,0x3e,0x3e,0x3e,0x3e,0x3e,0x3e,0x3f, + 0x3f,0x3f,0x3f,0x3e,0x3e,0x3e,0x3e,0x3e,0x3f,0x3e,0x3e,0x3d,0x3d,0x3e,0x3f, + 0x40,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3e, + 0x3e,0x3f,0x3f,0x3f,0x3f,0x3f,0x3e,0x3e,0x3e,0x3e,0x3e,0x3e,0x3e,0x3f,0x3f, + 0x3f,0x3f,0x3f,0x3f,0x40,0x40,0x40,0x40,0x40,0x40,0x3f,0x3e,0x3e,0x3e,0x3e, + 0x3e,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x40,0x40,0x40,0x40,0x40,0x40, + 0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0xc8, + 0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28, + 0x28,0x28,0x28,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x28,0x28,0x29,0x2a,0x29, + 0x2a,0x2a,0x2a,0x29,0x2a,0x2a,0x2b,0x2b,0x2a,0x29,0x2a,0x2a,0x2a,0x2a,0x2a, + 0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b, + 0x2b,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c, + 0x2c,0x2d,0x2d,0x2d,0x2d,0x2e,0x2d,0x2d,0x2d,0x2d,0x2d,0x2e,0x2e,0x2d,0x2d, + 0x2d,0x2d,0x2e,0x2e,0x2e,0x2e,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2e,0x2f, + 0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x30, + 0x30,0x30,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x30,0x30,0x2f,0x2f,0x2f,0x30, + 0x30,0x30,0x30,0x2f,0x30,0x31,0x31,0x31,0x32,0x32,0x32,0x31,0x31,0x31,0x31, + 0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x32,0x32,0x31,0x31,0x31,0x31, + 0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x33, + 0x34,0x34,0x33,0x33,0x33,0x33,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34, + 0x35,0x35,0x35,0x35,0x34,0x33,0x33,0x34,0x33,0x33,0x34,0x34,0x34,0x35,0x34, + 0x35,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36, + 0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x35, + 0x35,0x35,0x36,0x36,0x36,0x36,0x36,0x36,0x37,0x37,0x37,0x37,0x36,0x36,0x36, + 0x36,0x37,0x37,0x37,0x38,0x38,0x38,0x38,0x38,0x38,0x37,0x37,0x37,0x38,0x37, + 0x38,0x39,0x39,0x38,0x38,0x38,0x38,0x38,0x37,0x37,0x37,0x37,0x38,0x39,0x39, + 0x39,0x39,0x39,0x39,0x39,0x39,0x3a,0x39,0x39,0x39,0x39,0x39,0x3a,0x3a,0x3a, + 0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a, + 0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3b,0x3b, + 0x3b,0x3b,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3b,0x3b,0x3b,0x3c,0x3b,0x3b,0x3b, + 0x3b,0x3b,0x3b,0x3b,0x3b,0x3b,0x3b,0x3b,0x3b,0x3b,0x3c,0x3c,0x3c,0x3d,0x3d, + 0x3b,0x3c,0x3e,0x3b,0x3a,0x3e,0x3d,0x3b,0x3b,0x3d,0x42,0x30,0x13,0x05,0x00, + 0x04,0x04,0x03,0x04,0x13,0x34,0x41,0x40,0x3c,0x3a,0x3d,0x3e,0x3e,0x3d,0x3d, + 0x3d,0x3c,0x3d,0x3e,0x3e,0x3e,0x3d,0x3d,0x3d,0x3d,0x3e,0x3e,0x3f,0x3e,0x3e, + 0x3e,0x3e,0x3e,0x3f,0x3e,0x3d,0x3e,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3e, + 0x3f,0x3f,0x40,0x40,0x3f,0x3e,0x3e,0x3f,0x3e,0x3f,0x40,0x3f,0x3e,0x3e,0x3e, + 0x3f,0x40,0x40,0x40,0x3f,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40, + 0x3f,0x3f,0x3f,0x3f,0x40,0x3f,0x40,0x3f,0x3f,0x3e,0x3e,0x3e,0x3f,0x3f,0x3f, + 0x40,0x40,0x40,0x40,0x40,0x40,0x41,0x41,0x41,0x41,0x41,0x41,0x40,0x3f,0x3f, + 0x3f,0x3e,0x3f,0x40,0x40,0x40,0x40,0x40,0x40,0x3f,0x40,0x40,0x40,0x40,0x40, + 0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x41,0x42,0x41,0x41,0x41,0x41, + 0x41,0xc8,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28, + 0x28,0x28,0x28,0x28,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x28,0x28,0x2a, + 0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2b,0x2b,0x2b,0x2b,0x2a,0x2a,0x2a,0x2b, + 0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b, + 0x2b,0x2b,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c, + 0x2c,0x2c,0x2d,0x2d,0x2d,0x2d,0x2d,0x2e,0x2e,0x2d,0x2d,0x2d,0x2e,0x2e,0x2e, + 0x2d,0x2d,0x2d,0x2d,0x2e,0x2e,0x2e,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f, + 0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f, + 0x30,0x30,0x30,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x30,0x30,0x30,0x2f,0x2f, + 0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x31,0x31,0x31,0x32,0x32,0x32,0x31,0x31, + 0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x32,0x32,0x32,0x31, + 0x31,0x31,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x33,0x33,0x33,0x32,0x32,0x32, + 0x32,0x33,0x34,0x34,0x34,0x33,0x33,0x33,0x34,0x34,0x34,0x34,0x34,0x34,0x34, + 0x34,0x35,0x35,0x35,0x35,0x35,0x35,0x34,0x34,0x34,0x34,0x34,0x34,0x35,0x35, + 0x35,0x35,0x35,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36, + 0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36, + 0x36,0x35,0x35,0x35,0x36,0x36,0x36,0x36,0x36,0x37,0x37,0x37,0x37,0x37,0x37, + 0x36,0x36,0x36,0x37,0x37,0x37,0x38,0x38,0x38,0x38,0x38,0x38,0x38,0x37,0x38, + 0x38,0x38,0x39,0x39,0x39,0x39,0x38,0x38,0x38,0x38,0x38,0x37,0x38,0x38,0x39, + 0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x3a,0x3a,0x39,0x39,0x39,0x39,0x39,0x3a, + 0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a, + 0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a, + 0x3a,0x3b,0x3b,0x3b,0x3a,0x3a,0x3a,0x3a,0x3a,0x3b,0x3b,0x3b,0x3c,0x3c,0x3c, + 0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c, + 0x3d,0x3d,0x3d,0x3d,0x3d,0x3a,0x39,0x3f,0x3d,0x38,0x3d,0x3f,0x36,0x23,0x0c, + 0x03,0x00,0x02,0x03,0x03,0x03,0x0b,0x1d,0x32,0x41,0x3e,0x3b,0x3d,0x3e,0x3e, + 0x3e,0x3e,0x3d,0x3d,0x3d,0x3e,0x3f,0x3f,0x3e,0x3d,0x3d,0x3d,0x3e,0x3f,0x3f, + 0x3e,0x3e,0x3e,0x3e,0x3e,0x3f,0x3f,0x3e,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f, + 0x3f,0x3f,0x3f,0x40,0x40,0x40,0x3f,0x3e,0x3f,0x3f,0x3f,0x40,0x40,0x40,0x3f, + 0x3e,0x3e,0x3f,0x41,0x41,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40, + 0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x3f,0x3f,0x3f,0x3f,0x3f, + 0x40,0x40,0x40,0x40,0x40,0x40,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41, + 0x40,0x40,0x40,0x3f,0x3f,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40, + 0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x41,0x42,0x41,0x41, + 0x41,0x41,0x41,0xc8,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28, + 0x28,0x28,0x28,0x28,0x28,0x28,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29, + 0x29,0x2a,0x2a,0x2b,0x2b,0x2b,0x2a,0x2a,0x2a,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b, + 0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b, + 0x2b,0x2b,0x2b,0x2b,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2d,0x2d,0x2d,0x2d, + 0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2e,0x2e,0x2e,0x2d,0x2d,0x2d,0x2e, + 0x2e,0x2e,0x2d,0x2d,0x2d,0x2d,0x2e,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f, + 0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f, + 0x2f,0x2f,0x30,0x30,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x30,0x30,0x30,0x30, + 0x30,0x30,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x32,0x32,0x32, + 0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32, + 0x32,0x31,0x31,0x31,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x33,0x35,0x34,0x33, + 0x32,0x32,0x33,0x33,0x34,0x34,0x34,0x33,0x33,0x33,0x34,0x34,0x34,0x34,0x34, + 0x35,0x35,0x35,0x35,0x35,0x36,0x36,0x36,0x36,0x36,0x35,0x36,0x36,0x35,0x35, + 0x35,0x35,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36, + 0x36,0x36,0x36,0x36,0x36,0x37,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36, + 0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x37,0x37,0x38,0x38, + 0x38,0x37,0x37,0x37,0x37,0x38,0x38,0x38,0x38,0x38,0x38,0x38,0x38,0x38,0x37, + 0x37,0x38,0x38,0x39,0x39,0x39,0x39,0x39,0x39,0x38,0x38,0x38,0x38,0x38,0x39, + 0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x39,0x39,0x39,0x39, + 0x39,0x39,0x39,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a, + 0x3a,0x3b,0x3b,0x3b,0x3b,0x3c,0x3c,0x3b,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a, + 0x3b,0x3b,0x3b,0x3b,0x3c,0x3c,0x3c,0x3b,0x3b,0x3b,0x3c,0x3c,0x3d,0x3d,0x3d, + 0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d, + 0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3c,0x3a,0x3a,0x3f,0x3d,0x39,0x42,0x43,0x30, + 0x19,0x05,0x02,0x03,0x06,0x07,0x07,0x05,0x07,0x0b,0x28,0x47,0x44,0x3e,0x3d, + 0x3d,0x3e,0x3f,0x3e,0x3d,0x3d,0x3d,0x3e,0x3f,0x40,0x3f,0x3e,0x3d,0x3d,0x3e, + 0x3f,0x3f,0x3e,0x3e,0x3e,0x3e,0x3f,0x3f,0x3f,0x3f,0x3f,0x40,0x3f,0x3f,0x3f, + 0x3f,0x3f,0x40,0x40,0x40,0x40,0x40,0x40,0x3f,0x3f,0x3f,0x40,0x40,0x40,0x41, + 0x40,0x3f,0x3f,0x3f,0x40,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41, + 0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x40,0x40,0x40, + 0x40,0x40,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41, + 0x41,0x41,0x41,0x41,0x41,0x41,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x41,0x41, + 0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41, + 0x41,0x41,0x41,0x41,0x41,0xc8,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28, + 0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x29,0x29,0x29,0x29,0x29,0x29,0x29, + 0x29,0x29,0x29,0x2a,0x2a,0x2b,0x2b,0x2b,0x2a,0x2a,0x2a,0x2b,0x2b,0x2b,0x2b, + 0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b, + 0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2d,0x2d, + 0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2e,0x2e,0x2e,0x2e,0x2d,0x2d, + 0x2d,0x2e,0x2e,0x2e,0x2e,0x2d,0x2d,0x2e,0x2e,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f, + 0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f, + 0x2f,0x2f,0x2f,0x2f,0x30,0x30,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x30,0x30,0x30, + 0x30,0x30,0x30,0x30,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x32, + 0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32, + 0x32,0x32,0x32,0x32,0x31,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x33,0x34,0x35, + 0x34,0x33,0x32,0x33,0x33,0x34,0x34,0x34,0x34,0x33,0x33,0x33,0x34,0x34,0x34, + 0x34,0x34,0x35,0x35,0x35,0x35,0x35,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36, + 0x36,0x35,0x35,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36, + 0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x37,0x37,0x36,0x36,0x36,0x36,0x36,0x36, + 0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x37,0x37, + 0x38,0x38,0x38,0x37,0x37,0x37,0x38,0x38,0x38,0x38,0x38,0x38,0x38,0x38,0x38, + 0x38,0x38,0x37,0x38,0x38,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x38,0x38,0x39, + 0x39,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x39,0x39, + 0x39,0x39,0x39,0x39,0x39,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a, + 0x3a,0x3a,0x3a,0x3b,0x3b,0x3b,0x3c,0x3c,0x3c,0x3c,0x3b,0x3b,0x3b,0x3a,0x3a, + 0x3a,0x3b,0x3b,0x3b,0x3b,0x3b,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3d,0x3d,0x3d, + 0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d, + 0x3d,0x3d,0x3d,0x3d,0x3e,0x3d,0x3c,0x3b,0x3b,0x3b,0x3c,0x3d,0x3d,0x3c,0x46, + 0x45,0x2f,0x16,0x03,0x02,0x04,0x06,0x07,0x07,0x05,0x03,0x03,0x20,0x45,0x45, + 0x40,0x3d,0x3d,0x3e,0x3f,0x3f,0x3e,0x3d,0x3d,0x3e,0x3f,0x40,0x40,0x40,0x3e, + 0x3d,0x3e,0x3f,0x3f,0x3e,0x3e,0x3e,0x3f,0x3f,0x3f,0x3f,0x3f,0x40,0x40,0x3f, + 0x3f,0x3f,0x3f,0x3f,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40, + 0x41,0x41,0x41,0x40,0x3f,0x40,0x40,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41, + 0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x40, + 0x40,0x40,0x40,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41, + 0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x40,0x40,0x40,0x40,0x40,0x40, + 0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41, + 0x41,0x41,0x41,0x41,0x41,0x41,0x41,0xc8,0x28,0x28,0x28,0x28,0x28,0x28,0x28, + 0x28,0x28,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x2a,0x2a, + 0x2a,0x2a,0x29,0x29,0x29,0x2a,0x2a,0x2b,0x2b,0x2b,0x2a,0x2a,0x2a,0x2b,0x2b, + 0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b, + 0x2b,0x2c,0x2c,0x2b,0x2b,0x2b,0x2b,0x2c,0x2c,0x2c,0x2d,0x2d,0x2d,0x2c,0x2d, + 0x2e,0x2e,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2e,0x2e,0x2e,0x2e,0x2e,0x2f,0x2f, + 0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2f,0x2f,0x2f,0x2f,0x2f, + 0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x30,0x30,0x2f,0x2f,0x2f,0x2f,0x2f, + 0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x30,0x30,0x30,0x2f,0x2f,0x2f,0x2f,0x30,0x31, + 0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x32,0x32,0x31,0x31,0x31,0x31, + 0x31,0x31,0x31,0x31,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32, + 0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x33,0x33,0x33,0x33,0x33,0x34, + 0x34,0x35,0x35,0x34,0x33,0x33,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34, + 0x34,0x34,0x35,0x35,0x35,0x35,0x35,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36, + 0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36, + 0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x37,0x37,0x37,0x36,0x36,0x36, + 0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x37, + 0x37,0x37,0x38,0x38,0x38,0x37,0x37,0x38,0x38,0x38,0x39,0x39,0x39,0x39,0x39, + 0x39,0x39,0x39,0x39,0x38,0x38,0x38,0x39,0x39,0x3a,0x3a,0x3a,0x3a,0x39,0x39, + 0x39,0x39,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x39,0x39,0x39,0x39,0x39, + 0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a, + 0x3a,0x3a,0x3b,0x3b,0x3b,0x3b,0x3b,0x3c,0x3c,0x3c,0x3d,0x3d,0x3c,0x3c,0x3c, + 0x3b,0x3b,0x3b,0x3b,0x3b,0x3b,0x3b,0x3c,0x3c,0x3c,0x3d,0x3d,0x3d,0x3d,0x3d, + 0x3d,0x3d,0x3d,0x3d,0x3d,0x3c,0x3c,0x3c,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d, + 0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3e,0x3e,0x3b,0x3a,0x3b,0x3e,0x3f,0x3c,0x3c, + 0x40,0x48,0x46,0x30,0x19,0x03,0x01,0x02,0x02,0x03,0x03,0x03,0x02,0x03,0x1c, + 0x3b,0x41,0x41,0x3d,0x3d,0x3e,0x3f,0x3f,0x3f,0x3e,0x3e,0x3f,0x3f,0x40,0x41, + 0x41,0x3e,0x3d,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x40,0x40,0x3f,0x3f, + 0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x41,0x41, + 0x41,0x41,0x41,0x41,0x41,0x41,0x40,0x40,0x41,0x41,0x41,0x41,0x41,0x41,0x41, + 0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41, + 0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41, + 0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x40, + 0x40,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41, + 0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0xc8,0x28,0x28,0x28,0x28,0x28, + 0x28,0x29,0x29,0x29,0x29,0x29,0x29,0x2a,0x29,0x29,0x29,0x2a,0x2a,0x2a,0x2a, + 0x2a,0x2a,0x2a,0x2a,0x29,0x29,0x2a,0x2a,0x2a,0x2b,0x2b,0x2b,0x2a,0x2a,0x2b, + 0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b, + 0x2b,0x2b,0x2b,0x2b,0x2c,0x2c,0x2b,0x2c,0x2c,0x2c,0x2c,0x2d,0x2d,0x2d,0x2d, + 0x2d,0x2d,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2f, + 0x2f,0x2f,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2f,0x2f,0x2f, + 0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x30,0x31,0x30,0x2f,0x2f,0x2f, + 0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x30,0x30,0x30,0x31,0x30,0x30,0x30,0x30, + 0x30,0x31,0x32,0x32,0x32,0x32,0x31,0x31,0x31,0x32,0x31,0x32,0x32,0x32,0x31, + 0x31,0x31,0x31,0x31,0x31,0x31,0x32,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33, + 0x33,0x33,0x33,0x33,0x33,0x33,0x32,0x32,0x32,0x32,0x33,0x33,0x34,0x34,0x34, + 0x34,0x34,0x35,0x35,0x35,0x34,0x34,0x34,0x35,0x35,0x34,0x34,0x34,0x34,0x34, + 0x35,0x35,0x35,0x35,0x35,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36, + 0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36, + 0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x37,0x37,0x37,0x37, + 0x37,0x37,0x37,0x37,0x37,0x37,0x37,0x37,0x37,0x37,0x37,0x37,0x37,0x37,0x36, + 0x37,0x37,0x37,0x38,0x38,0x38,0x38,0x38,0x38,0x38,0x38,0x38,0x39,0x39,0x39, + 0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x38,0x39,0x39,0x3a,0x3a,0x3a,0x3a,0x3a, + 0x3a,0x3a,0x39,0x39,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x39,0x39,0x39, + 0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a, + 0x3a,0x3a,0x3a,0x3b,0x3b,0x3b,0x3b,0x3b,0x3b,0x3c,0x3c,0x3c,0x3d,0x3d,0x3c, + 0x3c,0x3c,0x3b,0x3b,0x3b,0x3b,0x3b,0x3b,0x3b,0x3c,0x3c,0x3c,0x3d,0x3d,0x3d, + 0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3c,0x3c,0x3c,0x3c,0x3d,0x3d,0x3d,0x3d,0x3d, + 0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x40,0x40,0x3d,0x3b,0x3c,0x3f,0x40, + 0x3a,0x3a,0x3f,0x45,0x42,0x2e,0x18,0x05,0x02,0x02,0x02,0x03,0x04,0x02,0x01, + 0x03,0x15,0x2c,0x3f,0x45,0x3d,0x3d,0x3e,0x3f,0x3f,0x40,0x3f,0x3f,0x3f,0x3f, + 0x40,0x41,0x41,0x3e,0x3e,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x40,0x40,0x40, + 0x3f,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x41,0x40,0x40,0x40,0x40,0x41, + 0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x42,0x42,0x42, + 0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42, + 0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x42,0x41,0x41,0x41,0x41,0x41,0x41, + 0x41,0x41,0x42,0x41,0x41,0x41,0x42,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41, + 0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42, + 0x42,0x42,0x42,0x42,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0xc8,0x28,0x28,0x28, + 0x28,0x28,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x2a,0x2a,0x29,0x2a,0x2a,0x2a, + 0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2b,0x2b,0x2b,0x2a, + 0x2a,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b, + 0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2d,0x2d,0x2d, + 0x2d,0x2d,0x2d,0x2d,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e, + 0x2f,0x2f,0x2f,0x2f,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2f, + 0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x30,0x30,0x31,0x30,0x2f, + 0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x30,0x30,0x30,0x30,0x31,0x31,0x31, + 0x31,0x31,0x31,0x32,0x32,0x32,0x32,0x32,0x31,0x31,0x32,0x32,0x32,0x32,0x32, + 0x32,0x32,0x32,0x31,0x31,0x31,0x31,0x32,0x32,0x33,0x33,0x33,0x33,0x33,0x33, + 0x33,0x33,0x33,0x33,0x33,0x33,0x34,0x34,0x33,0x32,0x32,0x33,0x33,0x34,0x34, + 0x34,0x34,0x34,0x35,0x35,0x35,0x34,0x34,0x34,0x34,0x35,0x35,0x35,0x34,0x34, + 0x34,0x35,0x35,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36, + 0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36, + 0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x37,0x37, + 0x37,0x37,0x37,0x37,0x37,0x37,0x37,0x37,0x37,0x37,0x37,0x37,0x37,0x37,0x37, + 0x37,0x37,0x37,0x37,0x38,0x38,0x38,0x38,0x38,0x38,0x38,0x38,0x38,0x38,0x39, + 0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x3a,0x3a,0x3a,0x3a, + 0x3a,0x3a,0x3a,0x3a,0x39,0x39,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x39, + 0x39,0x39,0x39,0x39,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3b,0x3b,0x3b,0x3b,0x3b, + 0x3b,0x3b,0x3b,0x3b,0x3b,0x3b,0x3b,0x3b,0x3b,0x3b,0x3b,0x3c,0x3c,0x3c,0x3d, + 0x3d,0x3c,0x3c,0x3c,0x3b,0x3b,0x3b,0x3b,0x3b,0x3b,0x3c,0x3c,0x3c,0x3c,0x3d, + 0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3c,0x3c,0x3c,0x3c,0x3c,0x3d,0x3d,0x3d, + 0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x40,0x41,0x3e,0x3d,0x3d, + 0x3f,0x3f,0x3a,0x3a,0x3d,0x44,0x40,0x2b,0x18,0x07,0x03,0x03,0x03,0x03,0x03, + 0x03,0x02,0x04,0x0d,0x1d,0x3b,0x48,0x3e,0x3c,0x3d,0x3e,0x3f,0x40,0x40,0x3f, + 0x3f,0x3f,0x40,0x41,0x41,0x3f,0x3e,0x3f,0x40,0x40,0x3f,0x3f,0x3f,0x40,0x40, + 0x41,0x41,0x40,0x41,0x41,0x40,0x40,0x40,0x40,0x40,0x41,0x41,0x41,0x41,0x41, + 0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x42,0x42, + 0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42, + 0x42,0x42,0x42,0x41,0x41,0x41,0x41,0x41,0x41,0x42,0x42,0x42,0x41,0x41,0x41, + 0x41,0x41,0x41,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x41,0x41,0x41,0x41,0x41, + 0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x42,0x42,0x42,0x42,0x42,0x42,0x42, + 0x42,0x42,0x42,0x42,0x42,0x42,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0xc8,0x28, + 0x28,0x28,0x28,0x29,0x29,0x29,0x29,0x29,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a, + 0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b, + 0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b, + 0x2c,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2d, + 0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e, + 0x2e,0x2f,0x2f,0x2f,0x2f,0x2f,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e, + 0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x30,0x30,0x30,0x30,0x30,0x30,0x31,0x31,0x31, + 0x31,0x30,0x30,0x30,0x30,0x30,0x30,0x2f,0x2f,0x30,0x30,0x30,0x30,0x31,0x32, + 0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x31,0x31,0x32,0x32,0x32, + 0x33,0x33,0x33,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32, + 0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x33,0x35,0x33,0x33,0x33,0x33,0x34, + 0x34,0x34,0x34,0x34,0x34,0x35,0x35,0x34,0x34,0x34,0x34,0x34,0x35,0x35,0x35, + 0x34,0x34,0x35,0x35,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36, + 0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36, + 0x36,0x36,0x37,0x37,0x37,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36, + 0x38,0x38,0x38,0x37,0x37,0x37,0x37,0x37,0x37,0x37,0x38,0x38,0x38,0x38,0x38, + 0x38,0x38,0x38,0x38,0x38,0x38,0x38,0x38,0x38,0x38,0x38,0x38,0x38,0x38,0x38, + 0x38,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x3a,0x3a,0x3a, + 0x3b,0x3b,0x3b,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3b,0x3b,0x3b,0x3c,0x3b,0x3b, + 0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3b,0x3b,0x3c,0x3c, + 0x3d,0x3d,0x3d,0x3d,0x3c,0x3c,0x3c,0x3b,0x3b,0x3b,0x3b,0x3b,0x3b,0x3c,0x3c, + 0x3c,0x3d,0x3d,0x3d,0x3d,0x3d,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3d,0x3d, + 0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d, + 0x3e,0x3e,0x3e,0x3e,0x3e,0x3e,0x3d,0x3d,0x3e,0x3e,0x3e,0x3d,0x3e,0x3f,0x40, + 0x40,0x3f,0x3e,0x3d,0x3d,0x3d,0x3f,0x47,0x44,0x2e,0x19,0x07,0x03,0x03,0x03, + 0x02,0x00,0x02,0x03,0x04,0x07,0x10,0x35,0x48,0x3e,0x3d,0x3d,0x3e,0x40,0x41, + 0x41,0x40,0x3f,0x3e,0x40,0x41,0x42,0x40,0x3f,0x40,0x40,0x41,0x40,0x40,0x40, + 0x40,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41, + 0x41,0x41,0x41,0x41,0x42,0x41,0x41,0x41,0x41,0x41,0x42,0x42,0x42,0x42,0x42, + 0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42, + 0x43,0x43,0x43,0x43,0x43,0x42,0x41,0x41,0x41,0x41,0x41,0x42,0x43,0x42,0x42, + 0x42,0x42,0x42,0x42,0x43,0x43,0x43,0x43,0x43,0x43,0x43,0x42,0x42,0x42,0x42, + 0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x41,0x41,0x42,0x42,0x42,0x42,0x42,0x42, + 0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x43,0x43,0x42,0x42,0x42,0x42, + 0xc8,0x28,0x28,0x28,0x28,0x29,0x29,0x29,0x29,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a, + 0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b, + 0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b, + 0x2b,0x2c,0x2d,0x2d,0x2d,0x2d,0x2d,0x2c,0x2c,0x2c,0x2c,0x2d,0x2d,0x2d,0x2c, + 0x2c,0x2d,0x2d,0x2e,0x2e,0x2e,0x2d,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e, + 0x2e,0x2e,0x2e,0x2f,0x2f,0x2f,0x2f,0x2f,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e, + 0x2e,0x2e,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x30,0x30,0x30,0x2f,0x2f,0x2f,0x30, + 0x30,0x30,0x30,0x30,0x30,0x30,0x31,0x31,0x31,0x30,0x30,0x30,0x30,0x31,0x31, + 0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32, + 0x32,0x32,0x33,0x33,0x33,0x33,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32, + 0x32,0x32,0x32,0x32,0x32,0x32,0x33,0x33,0x32,0x32,0x34,0x35,0x34,0x33,0x33, + 0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x35,0x35,0x35,0x35,0x35,0x35,0x35, + 0x35,0x35,0x35,0x35,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36, + 0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36, + 0x36,0x36,0x36,0x37,0x37,0x37,0x37,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36, + 0x36,0x37,0x38,0x39,0x38,0x38,0x37,0x37,0x37,0x37,0x37,0x37,0x38,0x38,0x38, + 0x38,0x38,0x38,0x38,0x38,0x38,0x38,0x38,0x38,0x38,0x39,0x39,0x39,0x39,0x39, + 0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x3a,0x3a,0x3a, + 0x3a,0x3a,0x3b,0x3b,0x3b,0x3a,0x3a,0x3a,0x3a,0x3a,0x3b,0x3c,0x3b,0x3c,0x3c, + 0x3b,0x3b,0x3b,0x3b,0x3a,0x3a,0x3a,0x3b,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c, + 0x3c,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3c,0x3c,0x3c,0x3b,0x3b,0x3b,0x3b,0x3c, + 0x3c,0x3c,0x3c,0x3c,0x3d,0x3d,0x3d,0x3d,0x3c,0x3c,0x3d,0x3d,0x3d,0x3d,0x3d, + 0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3e,0x3e,0x3d,0x3d,0x3d,0x3d,0x3d, + 0x3d,0x3e,0x3e,0x3e,0x3e,0x3e,0x3e,0x3e,0x3e,0x3e,0x3e,0x3f,0x3f,0x3f,0x3f, + 0x3f,0x41,0x41,0x3e,0x3e,0x3e,0x3f,0x3d,0x3d,0x48,0x47,0x2d,0x17,0x07,0x03, + 0x03,0x03,0x02,0x00,0x02,0x03,0x04,0x03,0x09,0x30,0x45,0x3e,0x3d,0x3f,0x3f, + 0x40,0x41,0x41,0x40,0x3e,0x3e,0x40,0x41,0x42,0x41,0x40,0x40,0x41,0x41,0x41, + 0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41, + 0x41,0x41,0x41,0x41,0x41,0x42,0x42,0x42,0x41,0x41,0x41,0x41,0x42,0x42,0x42, + 0x43,0x43,0x43,0x43,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42, + 0x42,0x42,0x43,0x43,0x43,0x43,0x43,0x42,0x42,0x41,0x41,0x41,0x42,0x43,0x43, + 0x43,0x42,0x42,0x42,0x42,0x43,0x43,0x43,0x43,0x43,0x43,0x43,0x43,0x43,0x42, + 0x42,0x42,0x43,0x43,0x43,0x42,0x42,0x42,0x42,0x42,0x43,0x43,0x42,0x42,0x42, + 0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x43,0x43,0x43,0x43,0x42, + 0x42,0x42,0xc8,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x2a,0x2a,0x2a,0x2a,0x2a, + 0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b, + 0x2c,0x2c,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b, + 0x2b,0x2b,0x2c,0x2d,0x2d,0x2e,0x2e,0x2e,0x2d,0x2d,0x2d,0x2d,0x2d,0x2e,0x2e, + 0x2e,0x2d,0x2d,0x2e,0x2e,0x2f,0x2f,0x2f,0x2e,0x2e,0x2f,0x2f,0x2f,0x2f,0x2f, + 0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2f,0x2f,0x2e,0x2e,0x2e,0x2f,0x2f, + 0x2f,0x2e,0x2e,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f, + 0x2f,0x2f,0x2f,0x2f,0x30,0x31,0x31,0x31,0x32,0x32,0x32,0x32,0x32,0x31,0x31, + 0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32, + 0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x33,0x33,0x33,0x33,0x33,0x32,0x32, + 0x32,0x33,0x33,0x33,0x32,0x32,0x32,0x33,0x34,0x34,0x34,0x34,0x34,0x35,0x34, + 0x34,0x34,0x34,0x34,0x35,0x35,0x35,0x34,0x34,0x34,0x35,0x36,0x36,0x36,0x36, + 0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x37,0x37,0x36,0x36,0x36,0x36,0x36,0x36, + 0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36, + 0x36,0x37,0x37,0x37,0x37,0x37,0x37,0x37,0x37,0x37,0x37,0x37,0x37,0x37,0x37, + 0x37,0x37,0x38,0x38,0x39,0x39,0x39,0x38,0x38,0x38,0x38,0x38,0x38,0x38,0x38, + 0x37,0x37,0x38,0x38,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x3a,0x3a,0x3a, + 0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a, + 0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3c,0x3c,0x3c, + 0x3b,0x3b,0x3b,0x3b,0x3b,0x3b,0x3b,0x3b,0x3b,0x3b,0x3d,0x3d,0x3d,0x3d,0x3d, + 0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3c,0x3c,0x3c, + 0x3c,0x3c,0x3c,0x3c,0x3c,0x3b,0x3c,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d, + 0x3d,0x3d,0x3d,0x3d,0x3d,0x3e,0x3e,0x3e,0x3f,0x3f,0x3f,0x3e,0x3e,0x3e,0x3e, + 0x3e,0x3d,0x3d,0x3e,0x3e,0x3d,0x3d,0x3e,0x3e,0x3e,0x3f,0x3f,0x3f,0x40,0x41, + 0x41,0x41,0x41,0x42,0x41,0x3d,0x3f,0x41,0x3d,0x3a,0x39,0x49,0x4a,0x2b,0x14, + 0x06,0x03,0x03,0x02,0x02,0x02,0x01,0x02,0x04,0x03,0x07,0x2c,0x42,0x3e,0x40, + 0x42,0x41,0x40,0x40,0x40,0x40,0x3d,0x3e,0x41,0x42,0x43,0x41,0x41,0x41,0x41, + 0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x42,0x42,0x42,0x42,0x42,0x42,0x42, + 0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x43,0x42,0x42,0x42,0x42,0x42,0x42, + 0x42,0x43,0x43,0x44,0x44,0x44,0x43,0x43,0x43,0x43,0x43,0x43,0x43,0x43,0x43, + 0x43,0x43,0x43,0x43,0x43,0x43,0x43,0x43,0x42,0x42,0x42,0x41,0x41,0x42,0x43, + 0x43,0x44,0x43,0x43,0x43,0x43,0x43,0x43,0x43,0x43,0x43,0x43,0x43,0x43,0x43, + 0x43,0x42,0x42,0x43,0x44,0x44,0x44,0x43,0x43,0x43,0x43,0x43,0x44,0x44,0x42, + 0x42,0x43,0x43,0x43,0x43,0x43,0x43,0x43,0x43,0x43,0x43,0x43,0x43,0x43,0x43, + 0x43,0x43,0x43,0x43,0xc8,0x2a,0x2a,0x2a,0x2a,0x29,0x29,0x2a,0x2a,0x2a,0x2a, + 0x2a,0x2a,0x2a,0x2b,0x2b,0x2b,0x2b,0x2a,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b, + 0x2b,0x2b,0x2c,0x2c,0x2c,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b, + 0x2b,0x2b,0x2b,0x2c,0x2c,0x2d,0x2d,0x2e,0x2e,0x2e,0x2d,0x2d,0x2c,0x2d,0x2d, + 0x2e,0x2e,0x2e,0x2d,0x2d,0x2e,0x2e,0x2f,0x2f,0x2f,0x2e,0x2e,0x2f,0x2f,0x2f, + 0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2e,0x2e,0x2f, + 0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x30,0x2f,0x30,0x2f, + 0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x30,0x31,0x31,0x31,0x32,0x32,0x32,0x32,0x32, + 0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32, + 0x33,0x33,0x33,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x33,0x33,0x33,0x33,0x33, + 0x32,0x33,0x33,0x34,0x34,0x34,0x33,0x33,0x33,0x34,0x35,0x35,0x35,0x35,0x35, + 0x35,0x34,0x34,0x34,0x34,0x34,0x35,0x35,0x36,0x35,0x34,0x34,0x35,0x36,0x36, + 0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x37,0x37,0x36,0x36,0x36,0x36, + 0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x37,0x37,0x36,0x36,0x36,0x36,0x36, + 0x37,0x37,0x37,0x37,0x37,0x37,0x38,0x38,0x38,0x37,0x37,0x38,0x38,0x38,0x38, + 0x38,0x38,0x38,0x38,0x38,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39, + 0x39,0x38,0x38,0x38,0x38,0x39,0x39,0x39,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a, + 0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a, + 0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3c, + 0x3d,0x3d,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3d,0x3d,0x3d, + 0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3c,0x3d,0x3d,0x3d,0x3d,0x3c, + 0x3c,0x3c,0x3c,0x3d,0x3c,0x3c,0x3c,0x3c,0x3c,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d, + 0x3d,0x3e,0x3e,0x3e,0x3d,0x3d,0x3d,0x3e,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f, + 0x3f,0x3f,0x3f,0x3e,0x3e,0x3e,0x3e,0x3d,0x3e,0x3f,0x3f,0x3f,0x40,0x3f,0x3f, + 0x40,0x41,0x41,0x42,0x42,0x43,0x41,0x3d,0x3f,0x40,0x3e,0x3b,0x3a,0x48,0x47, + 0x28,0x12,0x05,0x03,0x03,0x02,0x02,0x03,0x02,0x02,0x05,0x03,0x07,0x28,0x3e, + 0x42,0x43,0x42,0x41,0x40,0x3f,0x3f,0x3f,0x3f,0x40,0x41,0x42,0x41,0x41,0x41, + 0x41,0x41,0x41,0x41,0x42,0x42,0x41,0x41,0x41,0x42,0x43,0x42,0x42,0x42,0x42, + 0x42,0x42,0x42,0x42,0x43,0x43,0x43,0x43,0x43,0x43,0x43,0x43,0x42,0x42,0x42, + 0x42,0x42,0x42,0x43,0x43,0x44,0x44,0x44,0x43,0x43,0x43,0x43,0x43,0x43,0x43, + 0x43,0x43,0x43,0x43,0x43,0x43,0x43,0x43,0x43,0x43,0x42,0x42,0x42,0x41,0x42, + 0x42,0x42,0x43,0x43,0x43,0x44,0x44,0x44,0x44,0x43,0x43,0x43,0x43,0x43,0x43, + 0x43,0x43,0x43,0x42,0x43,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x43,0x44,0x44, + 0x44,0x43,0x43,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44, + 0x44,0x44,0x44,0x44,0x44,0x43,0xc8,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a, + 0x2a,0x2a,0x2a,0x2a,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b, + 0x2b,0x2b,0x2b,0x2b,0x2c,0x2c,0x2c,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b, + 0x2b,0x2b,0x2b,0x2b,0x2c,0x2c,0x2c,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2c, + 0x2c,0x2d,0x2e,0x2e,0x2e,0x2d,0x2d,0x2e,0x2e,0x2f,0x2f,0x2f,0x2e,0x2e,0x2f, + 0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x30,0x30,0x30,0x2f,0x2f,0x2f, + 0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x30,0x30,0x30, + 0x30,0x30,0x2f,0x2f,0x2f,0x30,0x30,0x30,0x31,0x31,0x31,0x31,0x32,0x32,0x32, + 0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32, + 0x32,0x32,0x33,0x33,0x33,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x33,0x33,0x33, + 0x33,0x33,0x33,0x34,0x34,0x35,0x35,0x34,0x34,0x34,0x34,0x35,0x35,0x35,0x35, + 0x35,0x35,0x35,0x34,0x34,0x34,0x34,0x34,0x35,0x35,0x36,0x36,0x35,0x35,0x35, + 0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x37,0x37,0x36,0x36, + 0x36,0x36,0x36,0x36,0x36,0x37,0x37,0x37,0x37,0x37,0x37,0x37,0x37,0x36,0x36, + 0x36,0x37,0x37,0x37,0x37,0x37,0x37,0x37,0x38,0x38,0x38,0x38,0x38,0x38,0x38, + 0x38,0x38,0x38,0x38,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39, + 0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a, + 0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a, + 0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3b,0x3b,0x3b,0x3b,0x3b,0x3a,0x3a,0x3a,0x3a, + 0x3b,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d, + 0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3c,0x3d,0x3d,0x3d, + 0x3d,0x3c,0x3c,0x3c,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d, + 0x3d,0x3d,0x3e,0x3e,0x3e,0x3e,0x3e,0x3e,0x3e,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f, + 0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3e,0x3f,0x3f,0x3e,0x3f,0x3f,0x40,0x40,0x40, + 0x3f,0x3f,0x40,0x41,0x41,0x42,0x43,0x44,0x41,0x3d,0x3f,0x40,0x3f,0x3d,0x3d, + 0x47,0x44,0x2a,0x14,0x05,0x03,0x03,0x02,0x02,0x03,0x02,0x03,0x04,0x03,0x06, + 0x21,0x3a,0x46,0x46,0x40,0x41,0x41,0x3e,0x3e,0x3f,0x41,0x41,0x41,0x41,0x41, + 0x41,0x41,0x41,0x41,0x41,0x42,0x42,0x42,0x42,0x41,0x42,0x42,0x43,0x43,0x42, + 0x42,0x42,0x42,0x42,0x42,0x43,0x43,0x43,0x43,0x43,0x43,0x43,0x43,0x43,0x43, + 0x42,0x42,0x42,0x42,0x42,0x43,0x43,0x43,0x44,0x44,0x43,0x43,0x43,0x43,0x43, + 0x43,0x43,0x43,0x43,0x43,0x43,0x43,0x43,0x43,0x43,0x43,0x43,0x43,0x43,0x43, + 0x42,0x42,0x42,0x42,0x42,0x42,0x43,0x44,0x44,0x44,0x44,0x44,0x43,0x43,0x43, + 0x43,0x43,0x43,0x43,0x43,0x43,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44, + 0x44,0x45,0x45,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x45,0x45,0x45,0x45, + 0x45,0x45,0x45,0x45,0x45,0x45,0x44,0x44,0xc8,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b, + 0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b, + 0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c, + 0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d, + 0x2d,0x2d,0x2d,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2f,0x2f,0x2f,0x2f, + 0x2f,0x2e,0x2e,0x2e,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x30,0x30,0x30,0x30, + 0x30,0x30,0x30,0x30,0x30,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x30,0x30,0x30,0x30, + 0x30,0x31,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x31,0x31,0x31,0x32,0x32,0x32, + 0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32, + 0x32,0x33,0x33,0x33,0x33,0x33,0x33,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x33, + 0x33,0x33,0x34,0x34,0x34,0x34,0x35,0x35,0x35,0x35,0x34,0x34,0x34,0x34,0x35, + 0x35,0x35,0x34,0x35,0x35,0x34,0x34,0x34,0x34,0x35,0x36,0x36,0x36,0x36,0x36, + 0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x37,0x37, + 0x37,0x37,0x37,0x37,0x37,0x37,0x37,0x37,0x38,0x38,0x38,0x38,0x38,0x38,0x38, + 0x38,0x37,0x37,0x37,0x38,0x38,0x38,0x38,0x38,0x38,0x38,0x38,0x38,0x39,0x39, + 0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x3a,0x3a,0x3a,0x39,0x39,0x39,0x39,0x39, + 0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a, + 0x3a,0x3a,0x3a,0x3a,0x3a,0x3b,0x3a,0x3a,0x3a,0x3a,0x3a,0x3b,0x3b,0x3b,0x3b, + 0x3b,0x3b,0x3b,0x3b,0x3b,0x3b,0x3b,0x3b,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3b, + 0x3c,0x3b,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c, + 0x3c,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d, + 0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3e,0x3e,0x3d,0x3d,0x3d,0x3e,0x3e, + 0x3e,0x3e,0x3e,0x3e,0x3e,0x3f,0x3f,0x3f,0x40,0x40,0x40,0x40,0x40,0x40,0x40, + 0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x3f,0x3f,0x40,0x40,0x3f,0x3f,0x40,0x41, + 0x41,0x41,0x40,0x40,0x40,0x41,0x41,0x43,0x44,0x44,0x41,0x3f,0x3f,0x40,0x41, + 0x3f,0x3f,0x46,0x44,0x31,0x19,0x04,0x02,0x03,0x01,0x02,0x02,0x02,0x02,0x03, + 0x02,0x05,0x1a,0x32,0x49,0x48,0x3d,0x41,0x43,0x40,0x3e,0x3f,0x41,0x42,0x41, + 0x41,0x41,0x41,0x41,0x41,0x41,0x42,0x43,0x43,0x42,0x42,0x42,0x42,0x42,0x43, + 0x42,0x42,0x42,0x42,0x43,0x43,0x43,0x43,0x43,0x43,0x43,0x44,0x44,0x44,0x43, + 0x43,0x43,0x43,0x43,0x43,0x43,0x43,0x43,0x43,0x43,0x43,0x43,0x44,0x44,0x44, + 0x43,0x43,0x43,0x43,0x43,0x43,0x43,0x44,0x44,0x44,0x43,0x43,0x44,0x44,0x45, + 0x45,0x44,0x44,0x43,0x43,0x43,0x43,0x43,0x43,0x44,0x44,0x44,0x45,0x45,0x44, + 0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x45,0x45,0x45,0x45,0x45,0x45, + 0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45, + 0x45,0x45,0x45,0x45,0x46,0x46,0x45,0x45,0x45,0x45,0xc8,0x2b,0x2b,0x2b,0x2b, + 0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b, + 0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2c,0x2c,0x2c,0x2c, + 0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d, + 0x2d,0x2d,0x2d,0x2d,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2f,0x2f,0x2f, + 0x2f,0x2f,0x2f,0x2e,0x2e,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x30,0x30, + 0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x2f,0x2f,0x2f,0x2f,0x30,0x30,0x30, + 0x30,0x30,0x31,0x31,0x31,0x30,0x30,0x30,0x30,0x30,0x31,0x31,0x31,0x31,0x32, + 0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32, + 0x32,0x32,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x32,0x32,0x32,0x32,0x32,0x32, + 0x32,0x33,0x33,0x33,0x34,0x34,0x34,0x35,0x35,0x35,0x35,0x35,0x35,0x34,0x34, + 0x35,0x35,0x35,0x35,0x34,0x34,0x35,0x35,0x34,0x34,0x35,0x35,0x36,0x36,0x36, + 0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36, + 0x37,0x37,0x37,0x37,0x37,0x37,0x37,0x37,0x37,0x37,0x38,0x38,0x38,0x38,0x38, + 0x38,0x38,0x38,0x38,0x37,0x38,0x38,0x38,0x38,0x38,0x38,0x38,0x38,0x38,0x38, + 0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x3a,0x3a,0x3a,0x3a,0x39,0x39,0x39, + 0x39,0x39,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a, + 0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3b,0x3b,0x3a,0x3a,0x3a,0x3a,0x3a,0x3b,0x3b, + 0x3b,0x3b,0x3b,0x3b,0x3b,0x3b,0x3b,0x3b,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c, + 0x3c,0x3c,0x3c,0x3c,0x3c,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d, + 0x3d,0x3c,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d, + 0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3e,0x3e,0x3e,0x3e,0x3e,0x3e, + 0x3e,0x3e,0x3e,0x3e,0x3e,0x3e,0x3f,0x3f,0x3f,0x40,0x40,0x40,0x40,0x40,0x40, + 0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x3f,0x40,0x40,0x3f,0x40, + 0x40,0x41,0x41,0x41,0x41,0x40,0x41,0x41,0x41,0x43,0x44,0x43,0x42,0x41,0x40, + 0x40,0x41,0x41,0x41,0x45,0x45,0x3a,0x21,0x04,0x01,0x02,0x01,0x01,0x02,0x02, + 0x02,0x02,0x01,0x03,0x13,0x2b,0x4b,0x48,0x3b,0x41,0x45,0x41,0x40,0x40,0x41, + 0x42,0x41,0x41,0x41,0x41,0x41,0x41,0x42,0x42,0x43,0x43,0x42,0x42,0x42,0x42, + 0x43,0x43,0x43,0x42,0x42,0x43,0x43,0x43,0x43,0x43,0x43,0x43,0x44,0x44,0x44, + 0x44,0x43,0x43,0x43,0x43,0x43,0x43,0x43,0x43,0x43,0x43,0x43,0x43,0x43,0x44, + 0x44,0x44,0x43,0x43,0x43,0x43,0x43,0x43,0x43,0x44,0x44,0x44,0x44,0x43,0x44, + 0x45,0x45,0x45,0x45,0x45,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x45,0x45, + 0x45,0x45,0x45,0x44,0x44,0x44,0x44,0x44,0x44,0x45,0x45,0x45,0x45,0x45,0x45, + 0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45, + 0x45,0x45,0x45,0x45,0x45,0x46,0x46,0x46,0x46,0x45,0x45,0x45,0xc8,0x2b,0x2b, + 0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b, + 0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2c,0x2c, + 0x2c,0x2c,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e, + 0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2f,0x2f,0x2e,0x2e,0x2e,0x2f,0x2f, + 0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f, + 0x2f,0x2f,0x2f,0x31,0x31,0x30,0x30,0x30,0x31,0x31,0x30,0x2f,0x2f,0x30,0x30, + 0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x32,0x32, + 0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32, + 0x32,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33, + 0x33,0x33,0x33,0x33,0x34,0x34,0x34,0x34,0x35,0x35,0x35,0x36,0x36,0x36,0x35, + 0x35,0x35,0x35,0x36,0x36,0x36,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x36, + 0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x37,0x37,0x37,0x37,0x37,0x37, + 0x37,0x37,0x37,0x37,0x37,0x37,0x37,0x37,0x37,0x37,0x37,0x37,0x38,0x38,0x38, + 0x38,0x38,0x38,0x38,0x38,0x38,0x38,0x38,0x38,0x38,0x38,0x38,0x38,0x38,0x38, + 0x38,0x38,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x3a,0x3a,0x3a,0x39, + 0x39,0x39,0x39,0x39,0x39,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a, + 0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3b,0x3b,0x3b,0x3a,0x3a,0x3a,0x3a,0x3b, + 0x3b,0x3b,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3d,0x3d,0x3d,0x3d,0x3d, + 0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d, + 0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d, + 0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3e,0x3e,0x3f,0x3f,0x3f, + 0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x40,0x40,0x40,0x40,0x40,0x41,0x41, + 0x40,0x40,0x40,0x40,0x40,0x41,0x41,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40, + 0x40,0x40,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x42,0x43,0x42,0x42, + 0x42,0x41,0x41,0x40,0x40,0x41,0x43,0x45,0x45,0x2b,0x06,0x01,0x01,0x01,0x01, + 0x01,0x02,0x02,0x01,0x00,0x03,0x0d,0x25,0x4b,0x48,0x39,0x41,0x45,0x43,0x42, + 0x41,0x42,0x41,0x41,0x42,0x44,0x43,0x42,0x42,0x42,0x42,0x43,0x43,0x43,0x42, + 0x42,0x43,0x43,0x44,0x43,0x43,0x43,0x43,0x43,0x43,0x43,0x44,0x44,0x44,0x44, + 0x44,0x44,0x44,0x43,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44, + 0x44,0x45,0x45,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x45,0x45,0x44, + 0x44,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45, + 0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x44,0x45,0x45,0x45,0x45,0x45, + 0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x46,0x46,0x46,0x46,0x45,0x45,0x45,0x45, + 0x45,0x45,0x45,0x45,0x46,0x46,0x46,0x46,0x46,0x46,0x46,0x46,0x46,0x46,0xc8, + 0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b, + 0x2b,0x2b,0x2b,0x2b,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2b,0x2b,0x2b,0x2b, + 0x2c,0x2c,0x2c,0x2c,0x2d,0x2d,0x2d,0x2d,0x2d,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e, + 0x2e,0x2e,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2e,0x2e,0x2f,0x2f,0x2f,0x2f,0x2f, + 0x2f,0x2f,0x2f,0x30,0x2f,0x2f,0x2f,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30, + 0x30,0x30,0x30,0x2f,0x30,0x30,0x30,0x30,0x30,0x30,0x31,0x31,0x31,0x30,0x30, + 0x30,0x31,0x32,0x31,0x31,0x31,0x31,0x32,0x31,0x31,0x31,0x31,0x31,0x31,0x32, + 0x32,0x32,0x32,0x32,0x32,0x32,0x33,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32, + 0x32,0x32,0x33,0x33,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x33,0x33,0x34,0x34, + 0x34,0x34,0x34,0x34,0x34,0x33,0x34,0x34,0x34,0x35,0x36,0x36,0x36,0x36,0x36, + 0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x35, + 0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x37,0x37,0x38,0x38,0x38, + 0x38,0x37,0x37,0x37,0x37,0x37,0x37,0x38,0x37,0x38,0x37,0x37,0x37,0x38,0x38, + 0x38,0x38,0x38,0x38,0x38,0x38,0x38,0x38,0x39,0x39,0x39,0x39,0x38,0x38,0x38, + 0x38,0x38,0x38,0x39,0x39,0x39,0x39,0x3a,0x39,0x39,0x39,0x39,0x3a,0x3a,0x3a, + 0x3a,0x3a,0x39,0x39,0x39,0x39,0x39,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a, + 0x3a,0x3a,0x3a,0x3b,0x3b,0x3b,0x3b,0x3b,0x3b,0x3b,0x3b,0x3c,0x3b,0x3a,0x3a, + 0x3b,0x3b,0x3b,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3d,0x3d,0x3d,0x3d, + 0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d, + 0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3e,0x3e,0x3d,0x3d,0x3d,0x3d,0x3d, + 0x3d,0x3d,0x3d,0x3e,0x3e,0x3e,0x3e,0x3e,0x3e,0x3e,0x3d,0x3e,0x3e,0x3f,0x40, + 0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x3f,0x3f,0x3f,0x40,0x40,0x40,0x40,0x40, + 0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x41,0x41,0x40,0x40,0x40,0x40,0x40, + 0x40,0x41,0x41,0x41,0x41,0x41,0x42,0x42,0x41,0x41,0x41,0x41,0x41,0x43,0x43, + 0x42,0x42,0x43,0x42,0x41,0x40,0x40,0x41,0x40,0x43,0x4c,0x32,0x0a,0x03,0x02, + 0x02,0x02,0x02,0x02,0x02,0x01,0x01,0x03,0x09,0x21,0x4c,0x49,0x39,0x41,0x45, + 0x45,0x44,0x43,0x43,0x42,0x40,0x42,0x45,0x43,0x42,0x42,0x42,0x43,0x43,0x44, + 0x44,0x43,0x42,0x43,0x43,0x44,0x44,0x44,0x44,0x44,0x43,0x43,0x44,0x44,0x44, + 0x44,0x44,0x44,0x44,0x44,0x43,0x44,0x44,0x44,0x44,0x45,0x45,0x45,0x45,0x45, + 0x45,0x45,0x45,0x45,0x45,0x44,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x44,0x45, + 0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45, + 0x45,0x45,0x45,0x46,0x46,0x46,0x46,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45, + 0x46,0x45,0x45,0x45,0x46,0x46,0x46,0x45,0x46,0x46,0x47,0x47,0x46,0x46,0x46, + 0x46,0x46,0x46,0x46,0x46,0x46,0x47,0x47,0x47,0x46,0x46,0x46,0x46,0x46,0x46, + 0x46,0xc8,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b, + 0x2b,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2b, + 0x2b,0x2b,0x2c,0x2c,0x2c,0x2c,0x2d,0x2d,0x2d,0x2d,0x2e,0x2e,0x2e,0x2e,0x2e, + 0x2e,0x2e,0x2e,0x2e,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2e,0x2f,0x2f,0x2f, + 0x2f,0x2f,0x2f,0x2f,0x30,0x30,0x30,0x2f,0x30,0x31,0x31,0x31,0x31,0x31,0x30, + 0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x31,0x31,0x31, + 0x30,0x30,0x30,0x31,0x32,0x31,0x31,0x31,0x32,0x32,0x31,0x31,0x31,0x31,0x31, + 0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x33,0x33,0x33,0x32,0x32,0x32,0x32,0x32, + 0x32,0x32,0x33,0x33,0x33,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x33,0x33, + 0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x34,0x34,0x34,0x35,0x35,0x36,0x36,0x36, + 0x36,0x36,0x36,0x36,0x36,0x36,0x37,0x37,0x37,0x37,0x36,0x36,0x36,0x36,0x36, + 0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x37,0x37,0x38,0x38, + 0x38,0x38,0x38,0x37,0x37,0x37,0x37,0x37,0x38,0x38,0x38,0x38,0x38,0x37,0x37, + 0x38,0x38,0x38,0x38,0x38,0x38,0x38,0x38,0x38,0x38,0x39,0x39,0x39,0x39,0x39, + 0x38,0x38,0x38,0x38,0x39,0x39,0x39,0x39,0x3a,0x3a,0x3a,0x39,0x39,0x3a,0x3a, + 0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a, + 0x3a,0x3a,0x3a,0x3a,0x3b,0x3b,0x3b,0x3b,0x3b,0x3b,0x3b,0x3b,0x3b,0x3c,0x3c, + 0x3b,0x3b,0x3b,0x3b,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3d,0x3d, + 0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d, + 0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3e,0x3e,0x3e,0x3e,0x3d,0x3d, + 0x3d,0x3d,0x3d,0x3d,0x3e,0x3e,0x3e,0x3e,0x3e,0x3e,0x3e,0x3e,0x3e,0x3e,0x3f, + 0x40,0x40,0x41,0x41,0x41,0x41,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40, + 0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x41,0x41,0x40,0x40,0x40, + 0x40,0x40,0x41,0x41,0x41,0x41,0x41,0x42,0x42,0x42,0x41,0x41,0x41,0x41,0x41, + 0x43,0x44,0x42,0x42,0x43,0x42,0x41,0x41,0x41,0x41,0x3e,0x41,0x50,0x39,0x12, + 0x05,0x02,0x03,0x03,0x02,0x02,0x02,0x01,0x01,0x03,0x07,0x1e,0x4c,0x4c,0x3b, + 0x40,0x45,0x45,0x45,0x44,0x45,0x43,0x40,0x42,0x45,0x43,0x42,0x42,0x43,0x43, + 0x44,0x44,0x44,0x44,0x43,0x43,0x43,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44, + 0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x43,0x44,0x44,0x44,0x45,0x45,0x45,0x45, + 0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45, + 0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x46, + 0x46,0x46,0x45,0x46,0x46,0x46,0x46,0x46,0x46,0x46,0x46,0x46,0x45,0x45,0x45, + 0x45,0x46,0x46,0x46,0x46,0x46,0x46,0x46,0x46,0x46,0x46,0x47,0x47,0x47,0x47, + 0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x48,0x48,0x48,0x47,0x46,0x46,0x46, + 0x46,0x46,0x46,0xc8,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b, + 0x2b,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c, + 0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2d,0x2d,0x2d,0x2e,0x2e,0x2e,0x2e, + 0x2e,0x2e,0x2e,0x2e,0x2e,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f, + 0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x30,0x31,0x31,0x30,0x30,0x31,0x31,0x31,0x31, + 0x31,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x31,0x31,0x30,0x30,0x30,0x30,0x31, + 0x31,0x31,0x30,0x30,0x31,0x31,0x32,0x31,0x31,0x32,0x32,0x32,0x32,0x32,0x32, + 0x32,0x32,0x32,0x32,0x32,0x32,0x33,0x33,0x34,0x34,0x34,0x34,0x33,0x33,0x33, + 0x33,0x33,0x33,0x33,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34, + 0x34,0x34,0x36,0x36,0x36,0x36,0x36,0x36,0x35,0x35,0x35,0x35,0x35,0x35,0x36, + 0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x37,0x37,0x37,0x36,0x36,0x36, + 0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x37,0x37,0x38, + 0x38,0x38,0x38,0x38,0x38,0x38,0x38,0x38,0x38,0x38,0x39,0x39,0x39,0x39,0x39, + 0x38,0x38,0x38,0x38,0x38,0x39,0x39,0x39,0x38,0x38,0x39,0x39,0x39,0x39,0x39, + 0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a, + 0x3a,0x3a,0x3a,0x3b,0x3b,0x3b,0x3b,0x3b,0x3b,0x3b,0x3b,0x3b,0x3b,0x3b,0x3b, + 0x3b,0x3b,0x3a,0x3a,0x3a,0x3b,0x3b,0x3b,0x3b,0x3b,0x3b,0x3b,0x3b,0x3c,0x3c, + 0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3d,0x3d,0x3d,0x3c,0x3c,0x3c,0x3c, + 0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d, + 0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3e,0x3f,0x3e,0x3e, + 0x3e,0x3e,0x3e,0x3e,0x3e,0x3e,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f, + 0x3f,0x40,0x40,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41, + 0x41,0x41,0x41,0x41,0x40,0x40,0x40,0x40,0x40,0x40,0x41,0x41,0x41,0x41,0x41, + 0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x42,0x43,0x43,0x43,0x42,0x41,0x41, + 0x41,0x42,0x44,0x45,0x43,0x42,0x42,0x42,0x43,0x43,0x44,0x44,0x3e,0x40,0x50, + 0x3d,0x19,0x08,0x01,0x03,0x03,0x00,0x01,0x01,0x00,0x01,0x03,0x04,0x1c,0x4c, + 0x4e,0x40,0x40,0x42,0x44,0x45,0x45,0x45,0x44,0x41,0x42,0x45,0x43,0x43,0x43, + 0x43,0x44,0x44,0x45,0x45,0x44,0x44,0x44,0x44,0x45,0x45,0x45,0x45,0x45,0x45, + 0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x44,0x44,0x44,0x45,0x45,0x45,0x45, + 0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45, + 0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45, + 0x46,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x46,0x46, + 0x46,0x46,0x46,0x46,0x47,0x47,0x48,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47, + 0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x48,0x48,0x48,0x48,0x48, + 0x48,0x47,0x47,0x47,0x47,0xc8,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b, + 0x2b,0x2b,0x2b,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c, + 0x2c,0x2c,0x2c,0x2d,0x2d,0x2c,0x2c,0x2c,0x2c,0x2d,0x2d,0x2d,0x2d,0x2e,0x2e, + 0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f, + 0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x30,0x31,0x31,0x30,0x30,0x31,0x31, + 0x31,0x31,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x31,0x31,0x31,0x31,0x30,0x30, + 0x30,0x31,0x31,0x31,0x30,0x30,0x31,0x32,0x32,0x32,0x31,0x32,0x32,0x32,0x32, + 0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x33,0x33,0x34,0x34,0x34,0x34,0x34,0x34, + 0x33,0x33,0x33,0x33,0x33,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34, + 0x34,0x34,0x34,0x35,0x35,0x36,0x36,0x36,0x36,0x36,0x36,0x35,0x35,0x35,0x35, + 0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x37,0x37,0x37,0x36, + 0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x37,0x37, + 0x38,0x38,0x38,0x38,0x38,0x38,0x38,0x38,0x38,0x38,0x38,0x38,0x39,0x39,0x39, + 0x39,0x39,0x39,0x38,0x38,0x38,0x38,0x39,0x3a,0x39,0x39,0x38,0x39,0x39,0x39, + 0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a, + 0x3a,0x3a,0x3a,0x3a,0x3a,0x3b,0x3b,0x3b,0x3b,0x3b,0x3b,0x3b,0x3b,0x3b,0x3b, + 0x3b,0x3c,0x3b,0x3c,0x3b,0x3a,0x3b,0x3b,0x3b,0x3b,0x3b,0x3b,0x3b,0x3b,0x3b, + 0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3d,0x3d,0x3d,0x3d,0x3c, + 0x3c,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d, + 0x3e,0x3e,0x3e,0x3e,0x3e,0x3e,0x3e,0x3e,0x3e,0x3e,0x3e,0x3e,0x3e,0x3f,0x3f, + 0x3e,0x3e,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f, + 0x3f,0x3f,0x40,0x40,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41, + 0x41,0x41,0x41,0x41,0x41,0x41,0x40,0x40,0x41,0x41,0x41,0x41,0x41,0x41,0x41, + 0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x42,0x42,0x43,0x43,0x43,0x42, + 0x41,0x41,0x42,0x42,0x44,0x44,0x44,0x43,0x42,0x43,0x43,0x44,0x45,0x47,0x40, + 0x40,0x50,0x41,0x21,0x0b,0x01,0x04,0x03,0x00,0x00,0x01,0x00,0x01,0x03,0x03, + 0x18,0x46,0x4e,0x45,0x41,0x41,0x44,0x45,0x45,0x46,0x45,0x42,0x42,0x44,0x43, + 0x43,0x43,0x44,0x44,0x45,0x45,0x45,0x45,0x44,0x44,0x45,0x45,0x45,0x45,0x45, + 0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45, + 0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x46, + 0x46,0x46,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45, + 0x45,0x46,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47, + 0x47,0x46,0x46,0x46,0x46,0x47,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x48, + 0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x48,0x48,0x48, + 0x48,0x48,0x48,0x48,0x47,0x47,0x47,0xc8,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b, + 0x2b,0x2b,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c, + 0x2c,0x2c,0x2c,0x2c,0x2c,0x2e,0x2e,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d, + 0x2e,0x2e,0x2e,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f, + 0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x30,0x31,0x31,0x31,0x30,0x30, + 0x31,0x31,0x31,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x31,0x31,0x31,0x31,0x31, + 0x31,0x31,0x31,0x32,0x32,0x31,0x31,0x31,0x31,0x31,0x32,0x32,0x32,0x32,0x32, + 0x32,0x32,0x32,0x32,0x32,0x32,0x33,0x33,0x33,0x33,0x34,0x34,0x34,0x35,0x35, + 0x35,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x35,0x35,0x34,0x34,0x34,0x34,0x34, + 0x34,0x34,0x34,0x35,0x35,0x35,0x35,0x35,0x36,0x36,0x36,0x36,0x36,0x36,0x35, + 0x35,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x37,0x36, + 0x36,0x36,0x36,0x36,0x36,0x36,0x37,0x37,0x37,0x36,0x36,0x36,0x36,0x37,0x37, + 0x37,0x38,0x39,0x39,0x39,0x39,0x39,0x38,0x38,0x38,0x38,0x38,0x39,0x39,0x39, + 0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x3a,0x3a,0x3a,0x39,0x39,0x39, + 0x39,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3b,0x3b,0x3b,0x3b, + 0x3b,0x3b,0x3a,0x3a,0x3a,0x3a,0x3a,0x3b,0x3b,0x3b,0x3b,0x3b,0x3b,0x3b,0x3b, + 0x3b,0x3b,0x3c,0x3c,0x3c,0x3c,0x3c,0x3b,0x3b,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c, + 0x3c,0x3c,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d, + 0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3e,0x3e,0x3e,0x3d,0x3d,0x3d,0x3d,0x3d, + 0x3d,0x3e,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x41,0x41,0x41,0x41,0x41, + 0x3f,0x3f,0x3f,0x3f,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40, + 0x40,0x40,0x40,0x40,0x40,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41, + 0x41,0x41,0x42,0x42,0x42,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41, + 0x41,0x41,0x42,0x42,0x42,0x41,0x41,0x41,0x42,0x42,0x42,0x42,0x42,0x44,0x44, + 0x43,0x42,0x42,0x42,0x42,0x43,0x43,0x43,0x44,0x44,0x43,0x43,0x43,0x43,0x46, + 0x49,0x41,0x40,0x4f,0x45,0x29,0x0f,0x01,0x04,0x03,0x00,0x00,0x01,0x01,0x01, + 0x02,0x01,0x14,0x3e,0x4b,0x48,0x42,0x40,0x44,0x45,0x45,0x46,0x45,0x44,0x43, + 0x43,0x44,0x44,0x44,0x44,0x45,0x46,0x46,0x45,0x45,0x45,0x45,0x45,0x45,0x45, + 0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45, + 0x45,0x45,0x45,0x46,0x46,0x46,0x46,0x46,0x46,0x46,0x46,0x46,0x46,0x46,0x46, + 0x46,0x47,0x47,0x47,0x46,0x46,0x46,0x46,0x46,0x45,0x45,0x45,0x45,0x46,0x46, + 0x46,0x46,0x46,0x47,0x47,0x47,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x48, + 0x48,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x48,0x48,0x48,0x49,0x49,0x49,0x48, + 0x48,0x48,0x48,0x48,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x48,0x48,0x48, + 0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0xc8,0x2c,0x2c,0x2c,0x2c,0x2c, + 0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d, + 0x2d,0x2d,0x2d,0x2c,0x2c,0x2c,0x2d,0x2f,0x2f,0x2e,0x2e,0x2e,0x2d,0x2d,0x2d, + 0x2d,0x2d,0x2e,0x2e,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x30,0x30,0x30,0x2f,0x2f, + 0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x30,0x31,0x31,0x31, + 0x31,0x31,0x32,0x32,0x31,0x31,0x31,0x31,0x31,0x31,0x30,0x31,0x31,0x31,0x31, + 0x32,0x32,0x32,0x31,0x32,0x32,0x32,0x32,0x31,0x31,0x31,0x31,0x32,0x32,0x32, + 0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x33,0x33,0x33,0x34,0x34,0x35,0x35,0x35, + 0x35,0x35,0x35,0x35,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34, + 0x34,0x34,0x34,0x34,0x35,0x35,0x35,0x35,0x35,0x35,0x36,0x36,0x36,0x36,0x36, + 0x36,0x35,0x35,0x36,0x36,0x36,0x36,0x36,0x36,0x37,0x37,0x37,0x37,0x37,0x37, + 0x37,0x37,0x36,0x36,0x36,0x36,0x36,0x37,0x38,0x38,0x38,0x37,0x36,0x36,0x37, + 0x38,0x38,0x38,0x39,0x39,0x39,0x39,0x39,0x39,0x38,0x38,0x38,0x38,0x39,0x39, + 0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x39, + 0x39,0x39,0x39,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3b,0x3c, + 0x3c,0x3b,0x3b,0x3b,0x3a,0x3a,0x3a,0x3a,0x3a,0x3b,0x3b,0x3a,0x3a,0x3a,0x3a, + 0x3a,0x3a,0x3b,0x3b,0x3b,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3d,0x3d, + 0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d, + 0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3e,0x3e,0x3e,0x3f,0x3f,0x3f,0x3e,0x3d,0x3e, + 0x3e,0x3e,0x3e,0x3e,0x3e,0x3e,0x3e,0x3e,0x3e,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f, + 0x3f,0x3f,0x3f,0x3f,0x40,0x40,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x40,0x40, + 0x40,0x41,0x40,0x40,0x40,0x40,0x40,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41, + 0x41,0x41,0x42,0x42,0x43,0x43,0x43,0x42,0x41,0x41,0x41,0x41,0x42,0x42,0x42, + 0x42,0x42,0x42,0x42,0x43,0x43,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x43, + 0x44,0x44,0x44,0x43,0x43,0x43,0x43,0x44,0x42,0x43,0x45,0x45,0x44,0x43,0x41, + 0x41,0x45,0x49,0x41,0x3f,0x4d,0x46,0x30,0x12,0x01,0x04,0x03,0x00,0x00,0x02, + 0x02,0x02,0x02,0x01,0x11,0x35,0x47,0x4b,0x44,0x41,0x45,0x45,0x45,0x45,0x45, + 0x45,0x45,0x44,0x44,0x45,0x45,0x45,0x45,0x46,0x47,0x46,0x45,0x45,0x45,0x45, + 0x46,0x45,0x45,0x45,0x45,0x45,0x45,0x46,0x46,0x46,0x46,0x46,0x46,0x46,0x46, + 0x46,0x46,0x46,0x46,0x46,0x46,0x46,0x46,0x46,0x46,0x46,0x46,0x46,0x46,0x46, + 0x46,0x46,0x47,0x47,0x48,0x48,0x47,0x46,0x46,0x46,0x46,0x46,0x46,0x46,0x46, + 0x47,0x47,0x47,0x47,0x47,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x48, + 0x48,0x48,0x48,0x48,0x47,0x47,0x47,0x47,0x47,0x48,0x48,0x49,0x4a,0x4a,0x4a, + 0x4a,0x49,0x49,0x49,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x48, + 0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0xc8,0x2c,0x2c,0x2c, + 0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2d,0x2d,0x2d,0x2d, + 0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2f,0x2f,0x2e,0x2e,0x2e,0x2d, + 0x2d,0x2d,0x2d,0x2d,0x2e,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x30,0x30,0x30,0x30, + 0x30,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x30,0x30,0x31, + 0x31,0x31,0x31,0x31,0x32,0x32,0x32,0x32,0x32,0x31,0x31,0x31,0x31,0x31,0x31, + 0x31,0x31,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x31,0x31,0x31,0x31,0x32, + 0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x33,0x33,0x33,0x33,0x34,0x35,0x35, + 0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34, + 0x34,0x34,0x34,0x34,0x34,0x35,0x35,0x35,0x36,0x36,0x35,0x36,0x36,0x36,0x36, + 0x36,0x36,0x36,0x35,0x35,0x36,0x36,0x36,0x36,0x36,0x37,0x37,0x37,0x37,0x37, + 0x37,0x37,0x37,0x37,0x37,0x36,0x36,0x36,0x37,0x37,0x38,0x38,0x38,0x37,0x37, + 0x37,0x38,0x38,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x38,0x38,0x38, + 0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a, + 0x3a,0x3a,0x39,0x39,0x39,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a, + 0x3b,0x3c,0x3c,0x3b,0x3b,0x3b,0x3a,0x3a,0x3a,0x3a,0x3a,0x3b,0x3b,0x3a,0x3a, + 0x3a,0x3a,0x3a,0x3a,0x3b,0x3b,0x3b,0x3b,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3d, + 0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d, + 0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3e, + 0x3e,0x3e,0x3e,0x3e,0x3e,0x3e,0x3d,0x3d,0x3d,0x3d,0x3d,0x3e,0x3e,0x3e,0x3e, + 0x3e,0x3e,0x3e,0x3e,0x3f,0x3f,0x40,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41, + 0x41,0x40,0x41,0x41,0x40,0x40,0x40,0x40,0x40,0x41,0x41,0x41,0x41,0x41,0x41, + 0x41,0x41,0x41,0x41,0x42,0x42,0x43,0x43,0x43,0x42,0x42,0x41,0x41,0x41,0x42, + 0x42,0x42,0x42,0x42,0x43,0x43,0x43,0x43,0x43,0x43,0x43,0x43,0x42,0x42,0x42, + 0x43,0x43,0x44,0x44,0x44,0x43,0x43,0x43,0x43,0x44,0x43,0x43,0x46,0x46,0x45, + 0x43,0x41,0x40,0x43,0x47,0x41,0x40,0x4c,0x47,0x33,0x15,0x02,0x05,0x03,0x00, + 0x01,0x02,0x03,0x02,0x02,0x01,0x0e,0x2d,0x42,0x4d,0x45,0x42,0x46,0x45,0x45, + 0x45,0x46,0x46,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x46,0x47,0x46,0x45,0x45, + 0x45,0x46,0x46,0x46,0x45,0x45,0x45,0x45,0x46,0x46,0x46,0x46,0x46,0x46,0x46, + 0x46,0x46,0x46,0x46,0x46,0x46,0x46,0x46,0x46,0x46,0x46,0x46,0x46,0x46,0x46, + 0x46,0x46,0x46,0x47,0x48,0x48,0x48,0x48,0x47,0x47,0x46,0x46,0x46,0x46,0x46, + 0x47,0x47,0x47,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x48, + 0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x4a,0x4a, + 0x4a,0x4a,0x4a,0x49,0x49,0x49,0x49,0x48,0x48,0x48,0x48,0x48,0x48,0x49,0x49, + 0x49,0x49,0x49,0x49,0x49,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0xc8,0x2d, + 0x2d,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2d,0x2d,0x2d,0x2d,0x2d, + 0x2c,0x2c,0x2c,0x2d,0x2d,0x2d,0x2e,0x2e,0x2e,0x2e,0x2e,0x2d,0x2d,0x2d,0x2e, + 0x2e,0x2f,0x2e,0x2e,0x2e,0x2e,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x30, + 0x30,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x30,0x30,0x30,0x30,0x2f,0x2f,0x2f, + 0x2f,0x30,0x30,0x30,0x2f,0x2f,0x30,0x32,0x32,0x32,0x32,0x30,0x30,0x30,0x32, + 0x32,0x32,0x30,0x2f,0x30,0x31,0x32,0x32,0x33,0x32,0x32,0x32,0x31,0x31,0x31, + 0x31,0x31,0x32,0x32,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x34, + 0x35,0x35,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x35,0x35,0x35,0x36, + 0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36, + 0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x37,0x36,0x36,0x36,0x37,0x37, + 0x37,0x37,0x37,0x37,0x36,0x36,0x36,0x36,0x37,0x38,0x38,0x38,0x38,0x38,0x38, + 0x38,0x39,0x39,0x39,0x39,0x39,0x39,0x3a,0x39,0x39,0x39,0x39,0x39,0x39,0x39, + 0x39,0x39,0x39,0x39,0x3a,0x39,0x39,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a, + 0x3a,0x3a,0x3b,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3b,0x3b,0x3c,0x3b,0x3a, + 0x3a,0x3b,0x3c,0x3c,0x3c,0x3b,0x3b,0x3b,0x3b,0x3b,0x3b,0x3c,0x3c,0x3c,0x3c, + 0x3b,0x3b,0x3b,0x3b,0x3c,0x3b,0x3c,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d, + 0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3e,0x3e,0x3e,0x3f,0x3e,0x3d, + 0x3d,0x3d,0x3d,0x3e,0x3e,0x3e,0x3e,0x3d,0x3d,0x3d,0x3e,0x3e,0x3e,0x3f,0x3f, + 0x3f,0x3f,0x3f,0x3e,0x3e,0x3e,0x3e,0x3e,0x3e,0x3f,0x3f,0x3f,0x40,0x40,0x41, + 0x41,0x41,0x41,0x40,0x40,0x3f,0x3f,0x3f,0x41,0x41,0x41,0x41,0x41,0x41,0x41, + 0x41,0x41,0x41,0x41,0x41,0x41,0x40,0x3f,0x3f,0x3f,0x40,0x41,0x41,0x41,0x41, + 0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x42,0x42, + 0x43,0x43,0x43,0x43,0x43,0x43,0x43,0x43,0x43,0x44,0x44,0x44,0x44,0x44,0x43, + 0x43,0x43,0x43,0x43,0x44,0x44,0x44,0x43,0x43,0x43,0x43,0x44,0x45,0x45,0x44, + 0x43,0x44,0x45,0x45,0x45,0x45,0x45,0x42,0x44,0x4f,0x47,0x31,0x15,0x04,0x04, + 0x02,0x00,0x00,0x02,0x02,0x02,0x02,0x01,0x0b,0x25,0x3f,0x50,0x48,0x42,0x46, + 0x45,0x43,0x46,0x48,0x48,0x47,0x46,0x46,0x45,0x45,0x45,0x45,0x45,0x45,0x45, + 0x45,0x46,0x46,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47, + 0x47,0x47,0x46,0x46,0x46,0x46,0x46,0x45,0x45,0x46,0x46,0x47,0x47,0x48,0x48, + 0x47,0x47,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x47,0x47,0x47,0x47,0x48, + 0x47,0x47,0x47,0x47,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x49, + 0x49,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x49,0x49,0x49,0x49,0x49,0x49, + 0x49,0x4a,0x4a,0x4a,0x4a,0x4a,0x4a,0x4a,0x4a,0x49,0x49,0x48,0x48,0x48,0x48, + 0x48,0x49,0x4a,0x4a,0x4a,0x49,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x48, + 0xc8,0x2d,0x2d,0x2d,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2d,0x2d,0x2d,0x2d, + 0x2d,0x2d,0x2c,0x2c,0x2c,0x2d,0x2d,0x2d,0x2e,0x2e,0x2e,0x2e,0x2e,0x2d,0x2d, + 0x2d,0x2e,0x2f,0x2f,0x2f,0x2e,0x2e,0x2e,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f, + 0x2f,0x30,0x30,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x31,0x31,0x31,0x30,0x30, + 0x2f,0x2f,0x30,0x30,0x30,0x30,0x30,0x2f,0x30,0x31,0x32,0x32,0x32,0x31,0x30, + 0x31,0x32,0x32,0x32,0x30,0x2f,0x30,0x31,0x32,0x33,0x33,0x32,0x32,0x32,0x31, + 0x31,0x31,0x31,0x31,0x32,0x32,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33, + 0x33,0x34,0x35,0x35,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x35,0x35,0x35, + 0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x37, + 0x37,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x37,0x37,0x36,0x36,0x36, + 0x36,0x37,0x37,0x37,0x37,0x37,0x36,0x36,0x36,0x36,0x37,0x39,0x39,0x38,0x38, + 0x38,0x38,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x3a,0x3a,0x39,0x39,0x39,0x39, + 0x3a,0x3a,0x3a,0x39,0x39,0x3a,0x3a,0x3a,0x39,0x3a,0x3a,0x3a,0x3b,0x3a,0x3a, + 0x3a,0x3a,0x3a,0x3b,0x3b,0x3b,0x3a,0x3a,0x3a,0x3a,0x3a,0x3b,0x3b,0x3c,0x3c, + 0x3c,0x3b,0x3a,0x3b,0x3c,0x3d,0x3c,0x3b,0x3b,0x3b,0x3c,0x3c,0x3c,0x3c,0x3c, + 0x3d,0x3d,0x3d,0x3c,0x3c,0x3c,0x3c,0x3c,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d, + 0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3e,0x3e,0x3e,0x3f,0x3f, + 0x3e,0x3e,0x3d,0x3d,0x3d,0x3e,0x3e,0x3e,0x3e,0x3e,0x3e,0x3e,0x3e,0x3e,0x3e, + 0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x40,0x40, + 0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x40,0x3f,0x40,0x41,0x41,0x41,0x41,0x41, + 0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x40,0x3f,0x40,0x41,0x41,0x41, + 0x41,0x41,0x41,0x41,0x41,0x42,0x42,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x42, + 0x42,0x43,0x44,0x43,0x43,0x43,0x43,0x43,0x43,0x43,0x43,0x44,0x44,0x44,0x44, + 0x44,0x44,0x44,0x43,0x43,0x44,0x44,0x44,0x44,0x44,0x43,0x43,0x44,0x45,0x45, + 0x45,0x42,0x42,0x44,0x45,0x45,0x46,0x45,0x43,0x41,0x45,0x4f,0x46,0x2f,0x15, + 0x03,0x03,0x02,0x00,0x00,0x01,0x02,0x02,0x02,0x01,0x0a,0x20,0x3d,0x52,0x48, + 0x42,0x46,0x45,0x44,0x47,0x48,0x48,0x47,0x46,0x46,0x46,0x46,0x45,0x45,0x45, + 0x45,0x45,0x46,0x47,0x47,0x48,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47, + 0x47,0x47,0x47,0x47,0x46,0x46,0x47,0x46,0x46,0x46,0x46,0x46,0x47,0x48,0x48, + 0x48,0x48,0x48,0x47,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x47,0x47, + 0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x48, + 0x49,0x49,0x49,0x49,0x49,0x49,0x49,0x49,0x49,0x49,0x49,0x49,0x49,0x49,0x49, + 0x49,0x49,0x49,0x49,0x4a,0x4a,0x4a,0x4a,0x4a,0x4a,0x4a,0x4a,0x49,0x49,0x48, + 0x48,0x48,0x48,0x49,0x4a,0x4a,0x4a,0x4a,0x49,0x48,0x48,0x48,0x48,0x48,0x49, + 0x48,0x48,0xc8,0x2d,0x2d,0x2d,0x2d,0x2c,0x2c,0x2c,0x2c,0x2c,0x2d,0x2d,0x2d, + 0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e, + 0x2e,0x2e,0x2e,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f, + 0x2f,0x2f,0x2f,0x30,0x30,0x30,0x30,0x2f,0x2f,0x2f,0x2f,0x2f,0x31,0x31,0x31, + 0x31,0x30,0x30,0x30,0x30,0x31,0x31,0x31,0x31,0x31,0x30,0x31,0x32,0x32,0x32, + 0x32,0x32,0x32,0x31,0x31,0x31,0x31,0x31,0x31,0x32,0x32,0x33,0x33,0x32,0x32, + 0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x33,0x33,0x33,0x34,0x34,0x33,0x33, + 0x33,0x33,0x33,0x34,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35, + 0x35,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36, + 0x36,0x37,0x37,0x36,0x36,0x36,0x37,0x37,0x37,0x36,0x36,0x36,0x36,0x37,0x36, + 0x36,0x36,0x36,0x37,0x37,0x37,0x37,0x37,0x37,0x37,0x37,0x37,0x38,0x39,0x39, + 0x39,0x39,0x39,0x39,0x39,0x39,0x38,0x38,0x38,0x38,0x39,0x3a,0x3a,0x39,0x39, + 0x39,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3b, + 0x3b,0x3a,0x3a,0x3a,0x3a,0x3a,0x3b,0x3b,0x3b,0x3b,0x3b,0x3a,0x3a,0x3b,0x3c, + 0x3c,0x3c,0x3c,0x3c,0x3b,0x3c,0x3d,0x3d,0x3d,0x3c,0x3c,0x3c,0x3d,0x3d,0x3d, + 0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d, + 0x3d,0x3d,0x3d,0x3d,0x3d,0x3e,0x3e,0x3e,0x3e,0x3e,0x3e,0x3e,0x3e,0x3e,0x3e, + 0x3f,0x40,0x3e,0x3d,0x3d,0x3d,0x3d,0x3e,0x3e,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f, + 0x3f,0x3f,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x3f,0x3f,0x3f, + 0x40,0x40,0x41,0x41,0x41,0x41,0x41,0x41,0x40,0x40,0x40,0x40,0x41,0x41,0x41, + 0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x42,0x42,0x41,0x41,0x41,0x41,0x41,0x41, + 0x42,0x42,0x41,0x41,0x41,0x41,0x42,0x43,0x42,0x42,0x41,0x41,0x42,0x42,0x42, + 0x42,0x42,0x43,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44, + 0x45,0x45,0x45,0x45,0x45,0x44,0x44,0x45,0x45,0x45,0x45,0x44,0x44,0x44,0x45, + 0x45,0x45,0x45,0x43,0x43,0x44,0x43,0x43,0x44,0x43,0x42,0x41,0x44,0x4c,0x45, + 0x31,0x14,0x02,0x03,0x02,0x00,0x00,0x01,0x02,0x02,0x03,0x02,0x0a,0x1e,0x3b, + 0x53,0x48,0x41,0x47,0x47,0x45,0x48,0x48,0x47,0x46,0x45,0x46,0x47,0x47,0x46, + 0x46,0x46,0x46,0x46,0x46,0x47,0x48,0x48,0x48,0x47,0x47,0x47,0x47,0x47,0x48, + 0x48,0x48,0x48,0x48,0x47,0x47,0x47,0x47,0x48,0x47,0x47,0x47,0x47,0x47,0x48, + 0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x49,0x49,0x49,0x48, + 0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x49,0x49,0x49,0x49,0x49,0x49, + 0x49,0x49,0x4a,0x4a,0x4a,0x4a,0x4a,0x4a,0x4a,0x4a,0x4a,0x4a,0x4a,0x4a,0x49, + 0x49,0x49,0x4a,0x4a,0x4a,0x4a,0x4a,0x4a,0x4a,0x4a,0x4a,0x4a,0x4b,0x4b,0x4a, + 0x49,0x49,0x48,0x48,0x49,0x49,0x4a,0x4b,0x4b,0x4b,0x4b,0x4b,0x4b,0x4b,0x4a, + 0x4a,0x4a,0x49,0x49,0xc8,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2c,0x2d,0x2d, + 0x2d,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2d,0x2e,0x2f,0x2f,0x2f,0x2f, + 0x2e,0x2e,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f, + 0x2f,0x2f,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x2f,0x30,0x2f,0x2f,0x30,0x30, + 0x31,0x31,0x31,0x30,0x30,0x30,0x30,0x32,0x32,0x32,0x31,0x31,0x31,0x31,0x31, + 0x32,0x33,0x33,0x33,0x32,0x31,0x31,0x31,0x32,0x32,0x31,0x32,0x32,0x33,0x33, + 0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x33,0x33,0x33,0x34,0x34,0x34, + 0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x35,0x35,0x36,0x36,0x36,0x36,0x36,0x36, + 0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36, + 0x37,0x37,0x37,0x36,0x36,0x36,0x36,0x36,0x37,0x38,0x38,0x37,0x36,0x37,0x37, + 0x37,0x36,0x36,0x36,0x36,0x37,0x37,0x37,0x38,0x38,0x38,0x38,0x38,0x38,0x38, + 0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x38,0x38,0x38,0x38,0x39,0x3a,0x3a, + 0x39,0x39,0x39,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3b,0x3a,0x3a,0x3a,0x3a, + 0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3c,0x3c,0x3c,0x3b,0x3b,0x3b, + 0x3c,0x3c,0x3c,0x3d,0x3c,0x3c,0x3c,0x3c,0x3d,0x3d,0x3d,0x3c,0x3c,0x3c,0x3d, + 0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3e,0x3e, + 0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3e,0x3e,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f, + 0x3e,0x3e,0x40,0x40,0x3f,0x3e,0x3e,0x3e,0x3e,0x3e,0x3f,0x40,0x40,0x40,0x40, + 0x3f,0x3f,0x3f,0x40,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x40, + 0x40,0x40,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41, + 0x41,0x41,0x41,0x42,0x41,0x42,0x42,0x42,0x42,0x43,0x42,0x41,0x41,0x41,0x41, + 0x42,0x43,0x43,0x43,0x43,0x42,0x42,0x42,0x43,0x44,0x43,0x42,0x42,0x42,0x43, + 0x43,0x43,0x43,0x43,0x43,0x44,0x44,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45, + 0x44,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45, + 0x45,0x45,0x46,0x46,0x46,0x46,0x46,0x46,0x45,0x45,0x45,0x45,0x44,0x43,0x45, + 0x4c,0x48,0x36,0x16,0x02,0x03,0x02,0x02,0x01,0x02,0x02,0x02,0x03,0x02,0x09, + 0x1c,0x3b,0x54,0x48,0x41,0x48,0x48,0x46,0x48,0x48,0x47,0x46,0x45,0x46,0x47, + 0x47,0x47,0x46,0x46,0x46,0x47,0x47,0x47,0x48,0x48,0x48,0x48,0x47,0x47,0x47, + 0x47,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x48, + 0x48,0x48,0x48,0x48,0x49,0x49,0x48,0x48,0x48,0x48,0x48,0x48,0x49,0x4a,0x4a, + 0x4a,0x49,0x48,0x48,0x48,0x49,0x49,0x49,0x49,0x49,0x49,0x4a,0x4a,0x4a,0x4a, + 0x4a,0x4a,0x4a,0x4a,0x4a,0x4a,0x4a,0x4b,0x4b,0x4b,0x4b,0x4b,0x4b,0x4b,0x4a, + 0x4a,0x49,0x49,0x49,0x4a,0x4b,0x4b,0x4b,0x4b,0x4a,0x4a,0x4a,0x4a,0x4b,0x4b, + 0x4c,0x4c,0x4b,0x4b,0x4a,0x4a,0x4a,0x4b,0x4b,0x4c,0x4c,0x4c,0x4c,0x4c,0x4c, + 0x4c,0x4c,0x4b,0x4b,0x4a,0x49,0xc8,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d, + 0x2d,0x2d,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2f,0x2f,0x2f, + 0x2f,0x2f,0x2e,0x2e,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f, + 0x2f,0x2f,0x2f,0x2f,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30, + 0x30,0x30,0x31,0x31,0x31,0x31,0x30,0x30,0x31,0x32,0x32,0x32,0x31,0x31,0x31, + 0x31,0x31,0x32,0x33,0x34,0x34,0x33,0x32,0x31,0x31,0x32,0x33,0x32,0x32,0x32, + 0x33,0x33,0x32,0x32,0x32,0x32,0x32,0x33,0x33,0x33,0x33,0x33,0x33,0x34,0x34, + 0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x35,0x36,0x36,0x36,0x36,0x36, + 0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36, + 0x36,0x36,0x37,0x37,0x37,0x36,0x36,0x36,0x36,0x36,0x38,0x38,0x38,0x38,0x37, + 0x37,0x37,0x37,0x36,0x36,0x36,0x36,0x37,0x37,0x37,0x38,0x38,0x38,0x38,0x38, + 0x38,0x38,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x3a, + 0x3a,0x3a,0x39,0x39,0x39,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3b,0x3b,0x3a,0x3a, + 0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3c,0x3d,0x3c,0x3c, + 0x3c,0x3c,0x3c,0x3c,0x3c,0x3d,0x3c,0x3c,0x3c,0x3d,0x3d,0x3d,0x3d,0x3c,0x3c, + 0x3c,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3e,0x3e,0x3e,0x3d,0x3d,0x3d,0x3e, + 0x3e,0x3e,0x3e,0x3d,0x3d,0x3d,0x3d,0x3d,0x3e,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f, + 0x3f,0x3f,0x3f,0x3f,0x40,0x40,0x3f,0x3f,0x3f,0x3f,0x3e,0x3f,0x40,0x40,0x40, + 0x40,0x40,0x40,0x3f,0x40,0x40,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41, + 0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x42,0x42,0x42,0x42,0x41,0x41,0x41,0x41, + 0x41,0x41,0x41,0x41,0x42,0x42,0x42,0x43,0x43,0x43,0x43,0x43,0x43,0x42,0x42, + 0x42,0x42,0x44,0x44,0x44,0x44,0x44,0x44,0x43,0x43,0x44,0x44,0x44,0x43,0x42, + 0x42,0x43,0x44,0x44,0x43,0x43,0x43,0x44,0x44,0x45,0x45,0x45,0x45,0x45,0x45, + 0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45, + 0x45,0x45,0x45,0x45,0x46,0x47,0x48,0x48,0x48,0x48,0x46,0x45,0x45,0x45,0x45, + 0x46,0x48,0x4c,0x4a,0x3d,0x19,0x02,0x03,0x03,0x03,0x03,0x02,0x02,0x02,0x03, + 0x01,0x07,0x19,0x3b,0x57,0x49,0x41,0x48,0x48,0x47,0x48,0x48,0x47,0x47,0x47, + 0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x48,0x48,0x48,0x48,0x48, + 0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x48, + 0x48,0x48,0x48,0x48,0x48,0x49,0x49,0x49,0x48,0x48,0x49,0x49,0x48,0x49,0x49, + 0x4a,0x4a,0x4a,0x4a,0x49,0x49,0x49,0x49,0x4a,0x4a,0x4a,0x4a,0x4a,0x4a,0x4a, + 0x4a,0x4a,0x4a,0x4a,0x4a,0x4a,0x4a,0x4a,0x4b,0x4b,0x4c,0x4c,0x4c,0x4c,0x4c, + 0x4b,0x4a,0x4a,0x49,0x49,0x4a,0x4b,0x4b,0x4b,0x4b,0x4b,0x4a,0x4a,0x4a,0x4b, + 0x4b,0x4c,0x4c,0x4c,0x4c,0x4c,0x4c,0x4b,0x4b,0x4c,0x4c,0x4c,0x4c,0x4d,0x4d, + 0x4d,0x4d,0x4d,0x4c,0x4c,0x4b,0x4a,0x4a,0xc8,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d, + 0x2d,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2f,0x2f, + 0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f, + 0x2f,0x2f,0x2f,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x31,0x31,0x31,0x31, + 0x31,0x31,0x31,0x31,0x31,0x32,0x32,0x31,0x31,0x31,0x31,0x32,0x32,0x32,0x32, + 0x32,0x32,0x32,0x32,0x32,0x32,0x33,0x33,0x32,0x32,0x31,0x32,0x32,0x32,0x32, + 0x32,0x32,0x33,0x33,0x32,0x32,0x32,0x32,0x33,0x34,0x34,0x34,0x33,0x33,0x34, + 0x34,0x34,0x35,0x35,0x35,0x34,0x34,0x34,0x34,0x34,0x35,0x36,0x36,0x36,0x36, + 0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36, + 0x36,0x36,0x37,0x37,0x37,0x37,0x37,0x36,0x36,0x36,0x36,0x37,0x39,0x39,0x39, + 0x38,0x38,0x37,0x37,0x37,0x37,0x37,0x37,0x37,0x37,0x37,0x37,0x38,0x38,0x38, + 0x38,0x38,0x38,0x38,0x39,0x39,0x39,0x39,0x39,0x39,0x3a,0x3a,0x3a,0x3a,0x3a, + 0x3a,0x3a,0x3b,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a, + 0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3b,0x3c,0x3d, + 0x3d,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d, + 0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3e,0x3e,0x3e,0x3e,0x3e, + 0x3e,0x3e,0x3e,0x3e,0x3e,0x3e,0x3e,0x3e,0x3e,0x3e,0x3e,0x3f,0x3f,0x3f,0x3f, + 0x3f,0x3f,0x3f,0x3f,0x3f,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x41, + 0x41,0x41,0x41,0x41,0x40,0x3f,0x40,0x40,0x40,0x41,0x41,0x40,0x40,0x40,0x41, + 0x41,0x41,0x41,0x42,0x42,0x42,0x42,0x42,0x43,0x43,0x43,0x43,0x43,0x43,0x42, + 0x42,0x43,0x43,0x42,0x41,0x41,0x42,0x42,0x43,0x43,0x44,0x44,0x44,0x44,0x44, + 0x44,0x44,0x44,0x44,0x44,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x44, + 0x43,0x42,0x42,0x43,0x44,0x45,0x44,0x44,0x44,0x44,0x44,0x45,0x45,0x45,0x45, + 0x45,0x45,0x45,0x45,0x45,0x45,0x46,0x46,0x46,0x46,0x46,0x45,0x45,0x45,0x45, + 0x45,0x45,0x45,0x45,0x45,0x46,0x47,0x47,0x47,0x47,0x48,0x47,0x45,0x45,0x45, + 0x46,0x47,0x47,0x48,0x4a,0x4b,0x44,0x1d,0x03,0x04,0x04,0x05,0x03,0x02,0x02, + 0x02,0x02,0x00,0x07,0x18,0x3c,0x5a,0x4b,0x42,0x48,0x49,0x48,0x48,0x48,0x48, + 0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x49, + 0x48,0x48,0x48,0x48,0x48,0x48,0x49,0x49,0x49,0x49,0x49,0x49,0x49,0x49,0x49, + 0x49,0x49,0x49,0x49,0x49,0x49,0x49,0x49,0x49,0x49,0x49,0x49,0x4a,0x4a,0x4a, + 0x49,0x49,0x4a,0x4a,0x4b,0x4b,0x4b,0x4b,0x4b,0x4b,0x4a,0x4a,0x4a,0x4a,0x4a, + 0x4a,0x4a,0x4a,0x4a,0x4a,0x4a,0x4a,0x4a,0x4a,0x4b,0x4b,0x4b,0x4c,0x4c,0x4c, + 0x4c,0x4c,0x4b,0x4a,0x4a,0x4a,0x4a,0x4c,0x4b,0x4b,0x4b,0x4b,0x4b,0x4b,0x4b, + 0x4b,0x4c,0x4c,0x4c,0x4c,0x4d,0x4d,0x4d,0x4d,0x4c,0x4c,0x4c,0x4c,0x4c,0x4c, + 0x4c,0x4d,0x4d,0x4d,0x4c,0x4c,0x4c,0x4c,0x4b,0x4b,0xc8,0x2d,0x2d,0x2d,0x2d, + 0x2d,0x2d,0x2d,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e, + 0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f, + 0x2f,0x2f,0x2f,0x2f,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x31,0x31, + 0x31,0x31,0x31,0x31,0x31,0x32,0x32,0x32,0x32,0x32,0x31,0x31,0x32,0x32,0x32, + 0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32, + 0x32,0x32,0x32,0x32,0x33,0x33,0x32,0x32,0x32,0x33,0x34,0x34,0x35,0x34,0x33, + 0x33,0x34,0x34,0x34,0x35,0x35,0x35,0x35,0x34,0x34,0x34,0x34,0x35,0x36,0x36, + 0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36, + 0x36,0x36,0x36,0x36,0x37,0x37,0x37,0x37,0x37,0x36,0x36,0x36,0x37,0x38,0x39, + 0x39,0x39,0x39,0x38,0x37,0x37,0x37,0x37,0x37,0x37,0x37,0x37,0x37,0x37,0x38, + 0x38,0x38,0x38,0x38,0x38,0x38,0x39,0x39,0x39,0x39,0x39,0x39,0x3a,0x3a,0x3a, + 0x3a,0x3b,0x3a,0x3b,0x3b,0x3b,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a, + 0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3b,0x3b, + 0x3c,0x3d,0x3d,0x3d,0x3c,0x3c,0x3c,0x3c,0x3c,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d, + 0x3e,0x3d,0x3d,0x3d,0x3d,0x3d,0x3e,0x3e,0x3e,0x3e,0x3d,0x3d,0x3e,0x3e,0x3e, + 0x3e,0x3e,0x3e,0x3e,0x3e,0x3e,0x3e,0x3e,0x3e,0x3e,0x3e,0x3e,0x3f,0x3f,0x3f, + 0x3f,0x3f,0x3f,0x3f,0x3f,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x41,0x41, + 0x41,0x41,0x41,0x41,0x41,0x41,0x40,0x3f,0x40,0x40,0x40,0x41,0x41,0x40,0x40, + 0x40,0x40,0x41,0x41,0x41,0x42,0x42,0x42,0x42,0x42,0x43,0x43,0x43,0x43,0x43, + 0x43,0x42,0x42,0x43,0x43,0x42,0x42,0x41,0x42,0x42,0x43,0x44,0x44,0x44,0x44, + 0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45, + 0x45,0x44,0x43,0x43,0x43,0x44,0x45,0x45,0x45,0x44,0x44,0x44,0x45,0x45,0x46, + 0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x46,0x46,0x46,0x46,0x46,0x46,0x45,0x45, + 0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x46,0x47,0x46,0x45,0x46,0x47,0x46,0x45, + 0x45,0x45,0x46,0x48,0x48,0x48,0x48,0x4b,0x48,0x20,0x03,0x03,0x04,0x05,0x03, + 0x02,0x02,0x02,0x02,0x01,0x07,0x15,0x3a,0x5a,0x4c,0x42,0x48,0x49,0x48,0x48, + 0x48,0x49,0x4a,0x4a,0x48,0x48,0x48,0x48,0x49,0x49,0x49,0x48,0x48,0x48,0x48, + 0x49,0x4a,0x49,0x48,0x48,0x48,0x48,0x49,0x49,0x49,0x49,0x49,0x49,0x49,0x49, + 0x49,0x49,0x49,0x49,0x49,0x49,0x49,0x49,0x49,0x49,0x49,0x49,0x49,0x4a,0x4c, + 0x4c,0x4a,0x49,0x49,0x4a,0x4b,0x4b,0x4b,0x4b,0x4b,0x4c,0x4b,0x4b,0x4a,0x4a, + 0x4a,0x4a,0x4a,0x4a,0x4a,0x4a,0x4a,0x4a,0x4a,0x4a,0x4b,0x4b,0x4b,0x4b,0x4c, + 0x4c,0x4c,0x4c,0x4c,0x4b,0x4a,0x4a,0x4a,0x4b,0x4c,0x4c,0x4b,0x4b,0x4b,0x4b, + 0x4b,0x4c,0x4c,0x4c,0x4c,0x4c,0x4c,0x4d,0x4d,0x4d,0x4d,0x4d,0x4c,0x4c,0x4c, + 0x4c,0x4c,0x4c,0x4c,0x4d,0x4c,0x4c,0x4c,0x4c,0x4c,0x4c,0x4c,0xc8,0x2d,0x2d, + 0x2d,0x2d,0x2d,0x2d,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2f,0x2f,0x2e,0x2e,0x2e, + 0x2e,0x2e,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x30,0x30, + 0x2f,0x2f,0x2f,0x2f,0x2f,0x30,0x30,0x30,0x30,0x30,0x31,0x31,0x31,0x31,0x31, + 0x31,0x31,0x31,0x31,0x31,0x31,0x32,0x32,0x33,0x33,0x32,0x32,0x32,0x32,0x32, + 0x32,0x32,0x32,0x32,0x32,0x33,0x34,0x34,0x33,0x32,0x31,0x31,0x32,0x33,0x34, + 0x33,0x32,0x32,0x32,0x32,0x33,0x33,0x33,0x32,0x32,0x32,0x33,0x34,0x35,0x35, + 0x35,0x34,0x33,0x34,0x34,0x35,0x35,0x35,0x35,0x35,0x34,0x34,0x34,0x34,0x35, + 0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36, + 0x36,0x36,0x36,0x36,0x37,0x37,0x37,0x37,0x37,0x37,0x37,0x37,0x37,0x37,0x38, + 0x38,0x39,0x39,0x3a,0x39,0x39,0x38,0x38,0x38,0x38,0x38,0x38,0x38,0x38,0x38, + 0x38,0x38,0x38,0x38,0x38,0x38,0x38,0x38,0x39,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a, + 0x3a,0x3a,0x3a,0x3b,0x3b,0x3b,0x3c,0x3c,0x3b,0x3a,0x3a,0x3b,0x3b,0x3b,0x3a, + 0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3b,0x3b,0x3b,0x3b,0x3b,0x3b,0x3b,0x3c, + 0x3c,0x3c,0x3d,0x3d,0x3d,0x3d,0x3d,0x3c,0x3c,0x3c,0x3c,0x3c,0x3d,0x3d,0x3d, + 0x3d,0x3e,0x3e,0x3e,0x3e,0x3e,0x3e,0x3e,0x3e,0x3f,0x3f,0x3f,0x3e,0x3e,0x3e, + 0x3e,0x3d,0x3d,0x3d,0x3e,0x3e,0x3e,0x3f,0x3f,0x3f,0x3e,0x3e,0x3f,0x3f,0x40, + 0x3f,0x3f,0x3f,0x3f,0x3f,0x40,0x40,0x41,0x41,0x41,0x40,0x3f,0x40,0x40,0x41, + 0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x40,0x41,0x41,0x41,0x41,0x41, + 0x40,0x40,0x40,0x40,0x41,0x41,0x41,0x42,0x42,0x42,0x42,0x42,0x42,0x43,0x43, + 0x43,0x43,0x42,0x42,0x42,0x43,0x43,0x42,0x42,0x42,0x42,0x43,0x44,0x45,0x45, + 0x45,0x45,0x45,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x45,0x45, + 0x45,0x46,0x46,0x45,0x45,0x44,0x44,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45, + 0x46,0x46,0x46,0x46,0x46,0x46,0x46,0x46,0x46,0x46,0x46,0x46,0x46,0x47,0x47, + 0x46,0x46,0x46,0x46,0x46,0x46,0x45,0x45,0x46,0x47,0x48,0x46,0x45,0x46,0x46, + 0x45,0x45,0x45,0x45,0x47,0x48,0x48,0x48,0x45,0x4a,0x4a,0x20,0x01,0x02,0x03, + 0x03,0x02,0x01,0x03,0x03,0x02,0x01,0x06,0x12,0x36,0x59,0x4c,0x43,0x48,0x48, + 0x48,0x48,0x48,0x4a,0x4b,0x4b,0x49,0x48,0x49,0x4a,0x4a,0x4a,0x4a,0x49,0x49, + 0x49,0x4a,0x4a,0x4b,0x49,0x48,0x48,0x48,0x49,0x49,0x49,0x4a,0x4a,0x4a,0x4a, + 0x4a,0x4a,0x4a,0x49,0x4a,0x4a,0x4a,0x4a,0x4a,0x4a,0x4a,0x4a,0x4a,0x4a,0x4a, + 0x4b,0x4c,0x4c,0x4b,0x49,0x49,0x4a,0x4b,0x4b,0x4b,0x4b,0x4c,0x4c,0x4c,0x4b, + 0x4b,0x4b,0x4b,0x4b,0x4b,0x4b,0x4b,0x4b,0x4b,0x4b,0x4b,0x4a,0x4b,0x4c,0x4c, + 0x4c,0x4c,0x4c,0x4c,0x4c,0x4c,0x4b,0x4b,0x4b,0x4b,0x4c,0x4c,0x4c,0x4c,0x4b, + 0x4b,0x4b,0x4c,0x4c,0x4d,0x4d,0x4d,0x4c,0x4c,0x4c,0x4c,0x4c,0x4d,0x4d,0x4c, + 0x4c,0x4c,0x4c,0x4c,0x4c,0x4c,0x4c,0x4c,0x4c,0x4c,0x4c,0x4c,0x4c,0x4c,0xc8, + 0x2d,0x2d,0x2d,0x2e,0x2d,0x2e,0x2f,0x2f,0x2f,0x2f,0x2e,0x2f,0x2f,0x2f,0x2f, + 0x2f,0x2f,0x2e,0x2e,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x30,0x30, + 0x30,0x30,0x30,0x2f,0x2f,0x2f,0x2f,0x30,0x30,0x31,0x31,0x31,0x31,0x31,0x32, + 0x32,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x32,0x32,0x32,0x32,0x32,0x32,0x32, + 0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x34,0x35,0x35,0x34,0x32,0x31,0x31,0x32, + 0x34,0x35,0x34,0x32,0x32,0x32,0x33,0x34,0x34,0x33,0x33,0x33,0x33,0x34,0x35, + 0x35,0x35,0x35,0x34,0x34,0x34,0x35,0x35,0x35,0x36,0x35,0x35,0x35,0x35,0x34, + 0x34,0x35,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36, + 0x36,0x37,0x37,0x37,0x37,0x37,0x37,0x37,0x37,0x38,0x38,0x38,0x38,0x38,0x38, + 0x38,0x38,0x38,0x39,0x3a,0x3a,0x3a,0x39,0x38,0x38,0x39,0x39,0x39,0x39,0x38, + 0x38,0x38,0x38,0x38,0x38,0x38,0x38,0x38,0x38,0x39,0x3a,0x3a,0x3a,0x3a,0x3a, + 0x3a,0x3a,0x3b,0x3b,0x3b,0x3b,0x3b,0x3b,0x3c,0x3c,0x3b,0x3a,0x3a,0x3b,0x3b, + 0x3c,0x3b,0x3a,0x3b,0x3b,0x3b,0x3b,0x3b,0x3b,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c, + 0x3c,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3c,0x3c,0x3d, + 0x3d,0x3d,0x3d,0x3e,0x3e,0x3e,0x3d,0x3e,0x3e,0x3e,0x3e,0x3f,0x3f,0x3e,0x3e, + 0x3e,0x3e,0x3e,0x3d,0x3d,0x3e,0x3e,0x3e,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x40, + 0x40,0x41,0x40,0x3f,0x3f,0x3f,0x40,0x40,0x40,0x41,0x41,0x41,0x40,0x3f,0x40, + 0x41,0x41,0x42,0x42,0x42,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41, + 0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x42,0x42,0x42,0x42,0x42,0x42, + 0x43,0x43,0x43,0x43,0x42,0x42,0x43,0x43,0x43,0x43,0x43,0x42,0x42,0x43,0x44, + 0x45,0x45,0x45,0x45,0x45,0x45,0x44,0x43,0x43,0x43,0x44,0x44,0x43,0x43,0x43, + 0x44,0x45,0x45,0x46,0x46,0x45,0x45,0x45,0x45,0x45,0x46,0x46,0x46,0x45,0x45, + 0x45,0x45,0x46,0x46,0x46,0x46,0x46,0x46,0x46,0x47,0x47,0x47,0x47,0x46,0x47, + 0x47,0x48,0x47,0x47,0x47,0x47,0x47,0x47,0x46,0x46,0x46,0x47,0x48,0x48,0x47, + 0x48,0x47,0x47,0x46,0x46,0x47,0x48,0x49,0x4a,0x48,0x44,0x4a,0x4d,0x21,0x02, + 0x01,0x02,0x03,0x02,0x01,0x03,0x02,0x01,0x02,0x05,0x0c,0x31,0x56,0x4c,0x45, + 0x48,0x49,0x49,0x49,0x49,0x4a,0x4c,0x4c,0x49,0x48,0x49,0x4a,0x4a,0x4a,0x4a, + 0x49,0x49,0x49,0x4a,0x4b,0x4b,0x4a,0x48,0x48,0x49,0x4a,0x4a,0x49,0x4a,0x4a, + 0x4a,0x4a,0x4a,0x4a,0x4a,0x4a,0x4a,0x4b,0x4a,0x4a,0x4b,0x4a,0x4b,0x4b,0x4b, + 0x4b,0x4b,0x4c,0x4c,0x4c,0x4b,0x4a,0x49,0x4a,0x4b,0x4b,0x4b,0x4b,0x4b,0x4c, + 0x4c,0x4c,0x4b,0x4b,0x4c,0x4c,0x4c,0x4b,0x4b,0x4c,0x4c,0x4c,0x4b,0x4b,0x4c, + 0x4c,0x4c,0x4c,0x4c,0x4c,0x4c,0x4c,0x4c,0x4c,0x4c,0x4c,0x4c,0x4c,0x4d,0x4c, + 0x4c,0x4b,0x4b,0x4c,0x4c,0x4e,0x4e,0x4e,0x4e,0x4d,0x4c,0x4c,0x4c,0x4c,0x4d, + 0x4e,0x4e,0x4d,0x4d,0x4d,0x4d,0x4c,0x4d,0x4d,0x4d,0x4c,0x4c,0x4d,0x4d,0x4d, + 0x4d,0xc8,0x2d,0x2d,0x2e,0x2e,0x2e,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f, + 0x2f,0x2f,0x2f,0x2f,0x2e,0x2e,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x30, + 0x30,0x30,0x30,0x30,0x30,0x30,0x2f,0x2f,0x2f,0x30,0x31,0x31,0x31,0x31,0x31, + 0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32, + 0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x34,0x35,0x35,0x35,0x33,0x32, + 0x31,0x32,0x34,0x35,0x35,0x33,0x32,0x33,0x34,0x34,0x34,0x34,0x33,0x33,0x34, + 0x35,0x35,0x36,0x36,0x35,0x34,0x34,0x35,0x35,0x35,0x36,0x36,0x35,0x35,0x35, + 0x35,0x35,0x35,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36, + 0x36,0x36,0x37,0x37,0x37,0x37,0x37,0x37,0x37,0x37,0x38,0x38,0x38,0x38,0x38, + 0x38,0x38,0x38,0x38,0x38,0x3a,0x3a,0x3a,0x39,0x39,0x38,0x38,0x39,0x39,0x39, + 0x39,0x39,0x38,0x38,0x38,0x38,0x38,0x38,0x38,0x38,0x39,0x3a,0x3a,0x3a,0x3a, + 0x3b,0x3b,0x3b,0x3b,0x3b,0x3b,0x3b,0x3b,0x3b,0x3b,0x3c,0x3c,0x3b,0x3a,0x3a, + 0x3b,0x3c,0x3c,0x3b,0x3b,0x3b,0x3c,0x3c,0x3c,0x3c,0x3c,0x3d,0x3d,0x3d,0x3d, + 0x3d,0x3d,0x3d,0x3d,0x3e,0x3e,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d, + 0x3d,0x3d,0x3d,0x3d,0x3e,0x3e,0x3e,0x3e,0x3d,0x3d,0x3e,0x3e,0x3e,0x3f,0x3f, + 0x3e,0x3e,0x3e,0x3e,0x3e,0x3e,0x3e,0x3e,0x3e,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f, + 0x3f,0x41,0x41,0x41,0x41,0x40,0x40,0x40,0x40,0x40,0x40,0x41,0x42,0x42,0x41, + 0x40,0x41,0x41,0x42,0x42,0x42,0x42,0x42,0x41,0x41,0x41,0x41,0x41,0x41,0x42, + 0x42,0x42,0x42,0x41,0x41,0x41,0x41,0x41,0x41,0x42,0x42,0x42,0x42,0x42,0x42, + 0x42,0x43,0x43,0x43,0x43,0x43,0x43,0x43,0x43,0x44,0x44,0x44,0x44,0x43,0x43, + 0x44,0x44,0x45,0x45,0x45,0x45,0x45,0x45,0x44,0x43,0x43,0x43,0x44,0x44,0x43, + 0x43,0x43,0x44,0x44,0x45,0x46,0x46,0x46,0x45,0x45,0x46,0x46,0x47,0x47,0x46, + 0x46,0x46,0x46,0x46,0x47,0x47,0x46,0x46,0x46,0x46,0x47,0x47,0x47,0x47,0x47, + 0x47,0x47,0x48,0x48,0x48,0x48,0x47,0x48,0x48,0x47,0x47,0x47,0x47,0x48,0x48, + 0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x4a,0x4b,0x48,0x43,0x4b,0x50, + 0x24,0x03,0x02,0x02,0x03,0x02,0x01,0x03,0x02,0x00,0x02,0x03,0x07,0x2b,0x52, + 0x4c,0x46,0x48,0x49,0x4a,0x49,0x4a,0x4b,0x4c,0x4c,0x49,0x48,0x49,0x4a,0x4a, + 0x4a,0x4a,0x49,0x49,0x49,0x4a,0x4a,0x4b,0x4a,0x49,0x49,0x4a,0x4a,0x4a,0x4a, + 0x4a,0x4a,0x4a,0x4a,0x4a,0x4a,0x4b,0x4b,0x4b,0x4b,0x4b,0x4b,0x4b,0x4b,0x4b, + 0x4b,0x4b,0x4b,0x4c,0x4c,0x4c,0x4c,0x4b,0x4a,0x4b,0x4b,0x4b,0x4b,0x4b,0x4b, + 0x4b,0x4c,0x4c,0x4c,0x4c,0x4c,0x4c,0x4c,0x4c,0x4c,0x4c,0x4c,0x4c,0x4c,0x4c, + 0x4c,0x4c,0x4d,0x4d,0x4c,0x4c,0x4c,0x4c,0x4c,0x4c,0x4c,0x4d,0x4d,0x4d,0x4e, + 0x4e,0x4d,0x4c,0x4c,0x4c,0x4c,0x4e,0x4f,0x4f,0x4f,0x4e,0x4e,0x4d,0x4c,0x4c, + 0x4d,0x4e,0x4f,0x4f,0x4f,0x4f,0x4f,0x4f,0x4f,0x4f,0x4e,0x4e,0x4d,0x4d,0x4e, + 0x4e,0x4e,0x4e,0xc8,0x2e,0x2e,0x2e,0x2e,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f, + 0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x30,0x30, + 0x30,0x31,0x31,0x31,0x31,0x31,0x30,0x30,0x30,0x30,0x30,0x31,0x31,0x31,0x32, + 0x32,0x32,0x32,0x32,0x32,0x33,0x33,0x33,0x33,0x32,0x32,0x32,0x32,0x32,0x32, + 0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x33,0x34,0x35,0x35, + 0x34,0x33,0x33,0x33,0x34,0x35,0x35,0x34,0x33,0x34,0x35,0x35,0x35,0x35,0x34, + 0x34,0x35,0x35,0x36,0x36,0x36,0x36,0x35,0x35,0x36,0x36,0x36,0x36,0x36,0x36, + 0x36,0x36,0x36,0x36,0x36,0x36,0x37,0x37,0x37,0x37,0x37,0x37,0x37,0x37,0x37, + 0x37,0x37,0x37,0x37,0x38,0x38,0x38,0x38,0x38,0x38,0x38,0x38,0x39,0x39,0x39, + 0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x3a,0x3a,0x3a,0x39,0x39,0x39,0x39,0x3a, + 0x3a,0x3a,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x3a,0x3a,0x3a,0x3a,0x3a,0x3b, + 0x3b,0x3b,0x3b,0x3b,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3d,0x3c,0x3c, + 0x3b,0x3b,0x3c,0x3c,0x3d,0x3c,0x3c,0x3c,0x3c,0x3d,0x3d,0x3d,0x3d,0x3d,0x3e, + 0x3d,0x3d,0x3d,0x3d,0x3e,0x3e,0x3e,0x3f,0x3e,0x3d,0x3e,0x3e,0x3e,0x3e,0x3e, + 0x3e,0x3e,0x3e,0x3e,0x3e,0x3f,0x3e,0x3e,0x3e,0x3e,0x3e,0x3e,0x3e,0x3e,0x3f, + 0x3f,0x3e,0x3e,0x3e,0x3e,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x40,0x40,0x40, + 0x40,0x40,0x40,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x42,0x42, + 0x43,0x41,0x41,0x41,0x42,0x43,0x43,0x43,0x42,0x42,0x42,0x42,0x42,0x42,0x42, + 0x43,0x43,0x43,0x43,0x43,0x43,0x43,0x43,0x43,0x43,0x43,0x44,0x44,0x44,0x44, + 0x44,0x44,0x44,0x44,0x44,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45, + 0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x46,0x45,0x45,0x44,0x45,0x45,0x45, + 0x45,0x45,0x44,0x44,0x44,0x45,0x45,0x46,0x46,0x46,0x46,0x46,0x46,0x47,0x47, + 0x47,0x47,0x47,0x47,0x47,0x47,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x48, + 0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x48, + 0x48,0x49,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x4a,0x48,0x42, + 0x4c,0x53,0x27,0x05,0x04,0x03,0x02,0x02,0x02,0x03,0x02,0x00,0x02,0x03,0x04, + 0x28,0x4e,0x4d,0x49,0x49,0x4a,0x4c,0x4a,0x4a,0x4c,0x4c,0x4c,0x49,0x48,0x4a, + 0x4a,0x4b,0x4b,0x4a,0x4a,0x49,0x49,0x49,0x4b,0x4c,0x4b,0x4a,0x4a,0x4b,0x4b, + 0x4b,0x4c,0x4c,0x4c,0x4c,0x4b,0x4b,0x4b,0x4b,0x4c,0x4c,0x4c,0x4c,0x4c,0x4c, + 0x4c,0x4c,0x4c,0x4c,0x4c,0x4c,0x4c,0x4c,0x4c,0x4c,0x4c,0x4c,0x4c,0x4c,0x4c, + 0x4c,0x4c,0x4c,0x4c,0x4c,0x4c,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4c,0x4c, + 0x4c,0x4c,0x4c,0x4d,0x4e,0x4e,0x4d,0x4d,0x4d,0x4d,0x4c,0x4d,0x4e,0x4e,0x4f, + 0x4f,0x4f,0x4f,0x4f,0x4e,0x4e,0x4e,0x4e,0x4f,0x4f,0x4f,0x4f,0x4f,0x4f,0x4e, + 0x4d,0x4e,0x4f,0x4f,0x50,0x50,0x50,0x50,0x50,0x50,0x50,0x50,0x50,0x50,0x4f, + 0x4f,0x50,0x50,0x4f,0x4f,0xc8,0x2e,0x2e,0x2e,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f, + 0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x30, + 0x30,0x30,0x31,0x31,0x32,0x31,0x31,0x31,0x30,0x30,0x30,0x30,0x31,0x31,0x31, + 0x31,0x32,0x32,0x32,0x32,0x32,0x33,0x34,0x34,0x34,0x33,0x33,0x32,0x32,0x32, + 0x32,0x33,0x33,0x33,0x32,0x32,0x32,0x32,0x33,0x33,0x33,0x32,0x32,0x33,0x34, + 0x35,0x35,0x36,0x35,0x34,0x34,0x33,0x34,0x35,0x35,0x35,0x35,0x35,0x35,0x35, + 0x35,0x35,0x35,0x35,0x36,0x36,0x36,0x36,0x36,0x35,0x35,0x36,0x36,0x36,0x36, + 0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x37,0x38,0x37,0x37,0x37,0x37,0x37,0x37, + 0x37,0x37,0x37,0x37,0x37,0x38,0x38,0x39,0x38,0x38,0x38,0x38,0x38,0x38,0x39, + 0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x3a,0x3a,0x39,0x39,0x39, + 0x39,0x3a,0x3a,0x3a,0x39,0x39,0x39,0x39,0x39,0x39,0x3a,0x3a,0x3a,0x3a,0x3a, + 0x3a,0x3b,0x3b,0x3b,0x3b,0x3b,0x3c,0x3c,0x3c,0x3c,0x3d,0x3d,0x3d,0x3d,0x3d, + 0x3d,0x3d,0x3c,0x3c,0x3c,0x3d,0x3d,0x3d,0x3c,0x3c,0x3c,0x3d,0x3d,0x3e,0x3d, + 0x3e,0x3e,0x3e,0x3d,0x3d,0x3e,0x3e,0x3e,0x3f,0x3f,0x3e,0x3d,0x3e,0x3f,0x3f, + 0x3f,0x3f,0x3e,0x3e,0x3e,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f, + 0x3f,0x40,0x40,0x3f,0x3f,0x3f,0x3f,0x40,0x40,0x40,0x3f,0x3f,0x3f,0x40,0x40, + 0x40,0x40,0x40,0x40,0x40,0x41,0x41,0x41,0x41,0x41,0x42,0x41,0x41,0x41,0x42, + 0x42,0x43,0x43,0x42,0x42,0x42,0x43,0x43,0x43,0x43,0x42,0x42,0x42,0x42,0x42, + 0x43,0x43,0x43,0x43,0x43,0x43,0x43,0x43,0x43,0x43,0x43,0x44,0x45,0x45,0x45, + 0x45,0x45,0x45,0x45,0x44,0x44,0x45,0x45,0x45,0x45,0x46,0x45,0x45,0x45,0x45, + 0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x46,0x46,0x45,0x45,0x45,0x46, + 0x46,0x47,0x46,0x46,0x45,0x45,0x45,0x45,0x46,0x47,0x46,0x46,0x46,0x46,0x46, + 0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x48, + 0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x48, + 0x48,0x48,0x48,0x49,0x48,0x48,0x49,0x49,0x48,0x49,0x49,0x48,0x48,0x48,0x4b, + 0x49,0x43,0x4d,0x56,0x28,0x07,0x05,0x03,0x01,0x01,0x03,0x04,0x02,0x00,0x02, + 0x03,0x03,0x25,0x4c,0x4f,0x4c,0x4a,0x4b,0x4c,0x4b,0x4a,0x4c,0x4c,0x4c,0x49, + 0x49,0x4b,0x4b,0x4c,0x4c,0x4c,0x4b,0x4a,0x4a,0x4a,0x4b,0x4c,0x4c,0x4c,0x4c, + 0x4c,0x4c,0x4c,0x4c,0x4c,0x4c,0x4c,0x4c,0x4c,0x4c,0x4c,0x4c,0x4c,0x4d,0x4e, + 0x4d,0x4d,0x4d,0x4c,0x4c,0x4c,0x4c,0x4d,0x4d,0x4c,0x4c,0x4c,0x4d,0x4e,0x4e, + 0x4e,0x4d,0x4c,0x4c,0x4c,0x4c,0x4c,0x4d,0x4e,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d, + 0x4d,0x4c,0x4c,0x4c,0x4c,0x4d,0x4e,0x4e,0x4e,0x4d,0x4d,0x4d,0x4e,0x4e,0x4e, + 0x4f,0x50,0x50,0x4f,0x4f,0x50,0x50,0x50,0x50,0x50,0x4f,0x4f,0x4f,0x4f,0x4f, + 0x4f,0x4f,0x4f,0x4f,0x50,0x50,0x50,0x50,0x50,0x50,0x50,0x50,0x50,0x50,0x50, + 0x50,0x50,0x50,0x50,0x50,0x50,0x4f,0xc8,0x2f,0x2f,0x2f,0x2f,0x2f,0x30,0x30, + 0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f, + 0x30,0x30,0x31,0x31,0x31,0x32,0x32,0x32,0x31,0x31,0x31,0x31,0x30,0x31,0x31, + 0x31,0x31,0x32,0x32,0x32,0x32,0x32,0x33,0x34,0x34,0x34,0x34,0x34,0x33,0x33, + 0x33,0x33,0x33,0x34,0x34,0x34,0x33,0x33,0x33,0x33,0x34,0x34,0x34,0x34,0x34, + 0x33,0x33,0x34,0x36,0x36,0x36,0x36,0x35,0x33,0x33,0x34,0x36,0x36,0x36,0x36, + 0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36, + 0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x37,0x38,0x38,0x37,0x37,0x37,0x37, + 0x37,0x37,0x37,0x38,0x38,0x38,0x38,0x38,0x39,0x39,0x39,0x39,0x39,0x39,0x39, + 0x39,0x39,0x39,0x3a,0x3a,0x3a,0x3a,0x3a,0x39,0x39,0x39,0x39,0x39,0x39,0x39, + 0x39,0x39,0x39,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a, + 0x3a,0x3b,0x3b,0x3b,0x3b,0x3b,0x3b,0x3b,0x3c,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d, + 0x3d,0x3e,0x3e,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3c,0x3c,0x3c,0x3d, + 0x3e,0x3e,0x3e,0x3e,0x3e,0x3e,0x3e,0x3e,0x3e,0x3f,0x3f,0x3f,0x3e,0x3e,0x3f, + 0x3f,0x40,0x40,0x40,0x3f,0x3f,0x3f,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40, + 0x40,0x40,0x41,0x41,0x41,0x40,0x40,0x40,0x40,0x41,0x41,0x41,0x40,0x40,0x40, + 0x40,0x41,0x41,0x41,0x41,0x40,0x40,0x41,0x41,0x42,0x42,0x42,0x42,0x42,0x42, + 0x42,0x42,0x43,0x43,0x43,0x43,0x43,0x43,0x43,0x43,0x43,0x43,0x42,0x42,0x42, + 0x43,0x43,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x45, + 0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x46,0x46,0x46, + 0x45,0x45,0x45,0x46,0x46,0x45,0x45,0x45,0x45,0x45,0x46,0x46,0x47,0x46,0x46, + 0x47,0x47,0x48,0x48,0x48,0x48,0x47,0x46,0x46,0x46,0x48,0x47,0x46,0x46,0x46, + 0x46,0x46,0x47,0x47,0x47,0x46,0x46,0x47,0x48,0x48,0x48,0x48,0x48,0x48,0x48, + 0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x49,0x49, + 0x48,0x48,0x48,0x48,0x48,0x49,0x49,0x49,0x4b,0x4b,0x4a,0x4b,0x4c,0x49,0x48, + 0x48,0x4c,0x4c,0x45,0x4f,0x57,0x2a,0x07,0x05,0x02,0x01,0x01,0x03,0x04,0x02, + 0x00,0x02,0x03,0x03,0x25,0x4c,0x50,0x4e,0x4a,0x4b,0x4c,0x4b,0x4a,0x4c,0x4c, + 0x4c,0x4b,0x4a,0x4c,0x4c,0x4c,0x4c,0x4c,0x4c,0x4b,0x4b,0x4c,0x4c,0x4d,0x4d, + 0x4c,0x4c,0x4c,0x4c,0x4d,0x4d,0x4d,0x4d,0x4c,0x4c,0x4c,0x4c,0x4c,0x4d,0x4e, + 0x4e,0x4e,0x4e,0x4e,0x4d,0x4d,0x4d,0x4d,0x4d,0x4e,0x4e,0x4c,0x4c,0x4d,0x4e, + 0x4f,0x50,0x50,0x4f,0x4e,0x4d,0x4c,0x4c,0x4c,0x4d,0x4e,0x4e,0x4e,0x4e,0x4d, + 0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4e,0x4e,0x4e,0x4e,0x4e,0x4e,0x4e,0x4f, + 0x4f,0x4f,0x50,0x50,0x50,0x50,0x50,0x50,0x50,0x51,0x51,0x50,0x50,0x4f,0x4e, + 0x4e,0x4f,0x50,0x50,0x50,0x50,0x50,0x50,0x50,0x50,0x50,0x50,0x50,0x50,0x50, + 0x50,0x50,0x50,0x51,0x50,0x50,0x50,0x50,0x50,0xc8,0x2f,0x2f,0x2f,0x2f,0x2f, + 0x30,0x30,0x30,0x30,0x2f,0x2f,0x2f,0x2f,0x30,0x30,0x30,0x30,0x30,0x30,0x30, + 0x30,0x30,0x2f,0x30,0x30,0x31,0x31,0x32,0x32,0x32,0x32,0x31,0x31,0x31,0x31, + 0x32,0x32,0x31,0x32,0x32,0x32,0x32,0x32,0x32,0x33,0x33,0x33,0x33,0x33,0x33, + 0x33,0x33,0x33,0x33,0x34,0x34,0x34,0x34,0x33,0x33,0x33,0x34,0x35,0x34,0x34, + 0x34,0x34,0x34,0x35,0x35,0x36,0x36,0x36,0x36,0x35,0x34,0x34,0x35,0x36,0x36, + 0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36, + 0x36,0x36,0x36,0x36,0x36,0x37,0x36,0x36,0x36,0x36,0x37,0x37,0x36,0x37,0x38, + 0x38,0x38,0x37,0x37,0x37,0x38,0x38,0x38,0x38,0x38,0x38,0x39,0x39,0x3a,0x3a, + 0x3a,0x39,0x39,0x39,0x39,0x39,0x3a,0x3a,0x3a,0x3a,0x39,0x39,0x39,0x3a,0x3a, + 0x3a,0x39,0x39,0x39,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a, + 0x3b,0x3b,0x3b,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3d, + 0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d, + 0x3d,0x3d,0x3e,0x3e,0x3e,0x3e,0x3e,0x3e,0x3e,0x3e,0x3f,0x3f,0x3f,0x3e,0x3f, + 0x3f,0x3e,0x3e,0x3f,0x40,0x40,0x40,0x40,0x3f,0x40,0x40,0x41,0x41,0x40,0x40, + 0x40,0x40,0x40,0x40,0x41,0x41,0x41,0x41,0x41,0x40,0x40,0x40,0x40,0x40,0x41, + 0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x42,0x42,0x43,0x43,0x43,0x43, + 0x43,0x43,0x43,0x43,0x43,0x43,0x43,0x43,0x42,0x42,0x43,0x43,0x43,0x43,0x43, + 0x43,0x43,0x44,0x44,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45, + 0x45,0x45,0x45,0x45,0x44,0x44,0x44,0x44,0x44,0x45,0x45,0x45,0x45,0x46,0x47, + 0x47,0x47,0x45,0x45,0x46,0x46,0x46,0x46,0x45,0x45,0x45,0x45,0x46,0x46,0x46, + 0x47,0x47,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x47,0x48,0x48,0x48,0x48,0x47, + 0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x48,0x48,0x48,0x48,0x48,0x48, + 0x48,0x48,0x48,0x48,0x48,0x48,0x49,0x49,0x49,0x48,0x48,0x48,0x48,0x48,0x49, + 0x49,0x49,0x48,0x48,0x48,0x49,0x4a,0x4b,0x4b,0x4a,0x4b,0x4b,0x4b,0x4b,0x4b, + 0x4a,0x4a,0x4b,0x4c,0x4b,0x47,0x4f,0x54,0x2b,0x0b,0x05,0x03,0x03,0x03,0x03, + 0x03,0x01,0x00,0x01,0x02,0x03,0x24,0x4b,0x52,0x50,0x48,0x49,0x4c,0x4c,0x4c, + 0x4c,0x4c,0x4c,0x4b,0x4b,0x4c,0x4c,0x4c,0x4c,0x4c,0x4c,0x4c,0x4c,0x4c,0x4c, + 0x4c,0x4d,0x4d,0x4c,0x4c,0x4c,0x4d,0x4e,0x4e,0x4d,0x4c,0x4c,0x4c,0x4c,0x4c, + 0x4d,0x4d,0x4d,0x4d,0x4e,0x4f,0x4f,0x4f,0x4f,0x4f,0x4e,0x4e,0x4d,0x4d,0x4d, + 0x4e,0x4f,0x4f,0x50,0x4f,0x4f,0x4f,0x4e,0x4e,0x4e,0x4e,0x4f,0x4f,0x4e,0x4f, + 0x4f,0x4e,0x4e,0x4e,0x4e,0x4e,0x4e,0x4e,0x4e,0x4f,0x50,0x4f,0x4f,0x4f,0x4f, + 0x4f,0x4f,0x4f,0x4f,0x4f,0x50,0x50,0x50,0x51,0x51,0x51,0x51,0x50,0x50,0x4f, + 0x4f,0x4e,0x4f,0x4f,0x50,0x50,0x50,0x50,0x50,0x50,0x50,0x50,0x50,0x50,0x50, + 0x50,0x50,0x50,0x50,0x50,0x51,0x51,0x50,0x50,0x50,0x50,0xc8,0x2f,0x2f,0x2f, + 0x2f,0x2f,0x30,0x30,0x30,0x30,0x2f,0x2f,0x2f,0x2f,0x2f,0x30,0x30,0x30,0x31, + 0x31,0x31,0x31,0x30,0x2f,0x2f,0x30,0x31,0x31,0x32,0x32,0x32,0x32,0x32,0x31, + 0x31,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x33,0x33,0x33,0x33,0x33, + 0x33,0x33,0x33,0x33,0x33,0x34,0x34,0x33,0x33,0x33,0x33,0x33,0x34,0x34,0x35, + 0x35,0x34,0x33,0x33,0x35,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x35,0x35,0x36, + 0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x37,0x37, + 0x37,0x37,0x36,0x36,0x36,0x36,0x36,0x37,0x37,0x36,0x36,0x36,0x37,0x36,0x36, + 0x37,0x39,0x39,0x39,0x38,0x37,0x37,0x38,0x39,0x39,0x39,0x38,0x38,0x39,0x39, + 0x3a,0x3a,0x3a,0x3a,0x39,0x39,0x39,0x39,0x3a,0x3a,0x3a,0x3a,0x39,0x39,0x39, + 0x3a,0x3a,0x3a,0x3a,0x39,0x39,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3b,0x3b, + 0x3b,0x3b,0x3b,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c, + 0x3c,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3e,0x3e,0x3e,0x3e,0x3e,0x3d,0x3d, + 0x3d,0x3d,0x3d,0x3d,0x3d,0x3e,0x3e,0x3e,0x3e,0x3e,0x3e,0x3f,0x3f,0x3f,0x3f, + 0x3e,0x40,0x40,0x3f,0x3e,0x3e,0x3f,0x40,0x41,0x40,0x3f,0x40,0x41,0x41,0x41, + 0x40,0x40,0x40,0x40,0x40,0x40,0x41,0x41,0x41,0x41,0x41,0x40,0x40,0x40,0x40, + 0x40,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x42,0x42,0x43,0x43,0x43,0x43, + 0x43,0x43,0x43,0x43,0x43,0x43,0x43,0x43,0x43,0x43,0x42,0x42,0x43,0x43,0x43, + 0x43,0x43,0x44,0x44,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45, + 0x45,0x45,0x45,0x45,0x45,0x45,0x44,0x44,0x44,0x44,0x45,0x45,0x45,0x45,0x46, + 0x46,0x47,0x47,0x47,0x46,0x46,0x46,0x46,0x46,0x46,0x46,0x45,0x45,0x45,0x46, + 0x46,0x46,0x47,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x48, + 0x48,0x48,0x48,0x48,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x48,0x48,0x48,0x48, + 0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x49,0x49,0x49,0x49,0x49,0x48,0x48,0x48, + 0x49,0x49,0x49,0x49,0x48,0x48,0x48,0x4a,0x4b,0x4c,0x4c,0x4b,0x4b,0x4b,0x4b, + 0x4a,0x4a,0x4b,0x4c,0x4c,0x4c,0x4a,0x48,0x4f,0x53,0x2d,0x0e,0x05,0x03,0x04, + 0x04,0x03,0x01,0x01,0x01,0x01,0x01,0x02,0x23,0x4a,0x53,0x50,0x47,0x48,0x4c, + 0x4e,0x4e,0x4e,0x4c,0x4c,0x4b,0x4b,0x4c,0x4c,0x4c,0x4c,0x4c,0x4c,0x4c,0x4c, + 0x4c,0x4c,0x4c,0x4d,0x4d,0x4d,0x4c,0x4c,0x4d,0x4e,0x4e,0x4e,0x4c,0x4c,0x4c, + 0x4c,0x4c,0x4d,0x4d,0x4d,0x4d,0x4e,0x4f,0x50,0x50,0x50,0x50,0x4f,0x4e,0x4d, + 0x4d,0x4e,0x4e,0x4f,0x4f,0x4f,0x4f,0x4f,0x4f,0x4f,0x50,0x50,0x50,0x4f,0x4f, + 0x4f,0x50,0x50,0x50,0x4f,0x4f,0x4f,0x4f,0x4f,0x4f,0x4f,0x50,0x50,0x50,0x50, + 0x4f,0x4f,0x4f,0x4f,0x4f,0x4f,0x50,0x50,0x50,0x50,0x52,0x52,0x51,0x50,0x50, + 0x50,0x50,0x4f,0x4f,0x50,0x50,0x50,0x50,0x50,0x50,0x50,0x50,0x50,0x50,0x50, + 0x50,0x51,0x51,0x50,0x50,0x50,0x50,0x50,0x51,0x51,0x51,0x51,0x50,0xc8,0x30, + 0x30,0x2f,0x2f,0x30,0x30,0x31,0x31,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30, + 0x31,0x31,0x31,0x31,0x31,0x31,0x30,0x30,0x31,0x31,0x31,0x32,0x32,0x32,0x32, + 0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x33,0x33,0x33,0x33,0x33,0x33, + 0x33,0x34,0x34,0x34,0x34,0x34,0x34,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x34, + 0x34,0x35,0x35,0x34,0x33,0x34,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x35, + 0x35,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x37, + 0x37,0x37,0x37,0x37,0x36,0x36,0x36,0x36,0x37,0x38,0x37,0x37,0x37,0x37,0x38, + 0x38,0x37,0x38,0x39,0x3a,0x3a,0x39,0x39,0x39,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a, + 0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3b,0x3a,0x3a, + 0x3a,0x3a,0x3a,0x3b,0x3b,0x3a,0x3a,0x3a,0x3a,0x3b,0x3b,0x3b,0x3b,0x3b,0x3b, + 0x3b,0x3c,0x3c,0x3c,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d, + 0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3e,0x3e,0x3e,0x3e,0x3e,0x3e,0x3e,0x3e, + 0x3e,0x3e,0x3e,0x3e,0x3e,0x3e,0x3e,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x40, + 0x40,0x3f,0x3f,0x40,0x41,0x40,0x3f,0x3f,0x40,0x41,0x41,0x41,0x41,0x41,0x41, + 0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41, + 0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x42,0x42,0x42,0x42,0x42,0x43,0x43, + 0x43,0x43,0x43,0x43,0x43,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44, + 0x44,0x44,0x44,0x44,0x44,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45, + 0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x46,0x46,0x46,0x45, + 0x45,0x45,0x45,0x46,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47, + 0x47,0x47,0x47,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x48, + 0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x47,0x47,0x47,0x48,0x48, + 0x48,0x49,0x49,0x49,0x49,0x49,0x49,0x49,0x49,0x4a,0x4a,0x4a,0x4a,0x4a,0x48, + 0x48,0x48,0x48,0x49,0x49,0x49,0x49,0x49,0x49,0x4a,0x4a,0x4b,0x4c,0x4c,0x4c, + 0x4c,0x4c,0x4b,0x4b,0x4b,0x4c,0x4d,0x4c,0x4b,0x48,0x50,0x53,0x2f,0x0f,0x06, + 0x03,0x04,0x03,0x03,0x01,0x01,0x01,0x02,0x01,0x01,0x23,0x4a,0x52,0x50,0x48, + 0x49,0x4d,0x4e,0x4f,0x4f,0x4e,0x4c,0x4c,0x4c,0x4c,0x4c,0x4d,0x4d,0x4d,0x4d, + 0x4d,0x4d,0x4d,0x4d,0x4d,0x4e,0x4f,0x4e,0x4d,0x4d,0x4e,0x4f,0x4f,0x4e,0x4e, + 0x4d,0x4d,0x4d,0x4d,0x4e,0x4e,0x4f,0x4f,0x50,0x50,0x50,0x50,0x4f,0x4f,0x4f, + 0x4e,0x4e,0x4e,0x4e,0x4f,0x4f,0x50,0x4f,0x4e,0x4e,0x4e,0x4f,0x50,0x50,0x50, + 0x50,0x50,0x50,0x50,0x50,0x50,0x50,0x50,0x50,0x50,0x50,0x50,0x50,0x50,0x50, + 0x50,0x50,0x50,0x50,0x50,0x50,0x50,0x50,0x50,0x51,0x51,0x51,0x51,0x51,0x51, + 0x52,0x51,0x51,0x50,0x50,0x50,0x51,0x51,0x52,0x52,0x51,0x50,0x51,0x51,0x50, + 0x50,0x51,0x52,0x52,0x52,0x52,0x51,0x51,0x51,0x51,0x51,0x51,0x52,0x51,0x50, + 0xc8,0x30,0x30,0x30,0x2f,0x30,0x31,0x31,0x31,0x31,0x30,0x30,0x31,0x31,0x31, + 0x30,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x30,0x31,0x31,0x31,0x31,0x32,0x32, + 0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x33,0x33,0x33,0x33, + 0x33,0x33,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x33,0x33,0x33,0x33, + 0x34,0x34,0x35,0x35,0x35,0x35,0x34,0x34,0x36,0x36,0x36,0x36,0x36,0x36,0x36, + 0x36,0x35,0x35,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36, + 0x36,0x37,0x37,0x37,0x37,0x37,0x36,0x36,0x36,0x37,0x38,0x38,0x38,0x37,0x37, + 0x38,0x38,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x3a,0x3a,0x3b,0x3a,0x3a, + 0x3a,0x3b,0x3b,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3b,0x3b,0x3a,0x3a,0x3b, + 0x3b,0x3a,0x3a,0x3a,0x3b,0x3c,0x3b,0x3a,0x3a,0x3a,0x3a,0x3b,0x3c,0x3b,0x3b, + 0x3b,0x3b,0x3c,0x3c,0x3c,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d, + 0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3e,0x3e,0x3e,0x3e,0x3e,0x3e,0x3e, + 0x3e,0x3e,0x3e,0x3e,0x3e,0x3e,0x3e,0x3e,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f, + 0x40,0x41,0x41,0x40,0x3f,0x40,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41, + 0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41, + 0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x42,0x42,0x42,0x42,0x42, + 0x43,0x43,0x43,0x43,0x43,0x43,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44, + 0x44,0x44,0x44,0x44,0x44,0x44,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45, + 0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x46,0x47,0x47,0x48, + 0x47,0x46,0x45,0x45,0x45,0x46,0x46,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47, + 0x47,0x47,0x47,0x47,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x48, + 0x48,0x48,0x48,0x48,0x48,0x49,0x49,0x49,0x49,0x49,0x48,0x48,0x48,0x48,0x48, + 0x48,0x48,0x48,0x49,0x49,0x49,0x49,0x49,0x49,0x49,0x4a,0x4a,0x4a,0x4b,0x4b, + 0x4b,0x49,0x48,0x49,0x49,0x49,0x49,0x49,0x49,0x49,0x49,0x4a,0x4a,0x4b,0x4c, + 0x4c,0x4c,0x4c,0x4c,0x4c,0x4b,0x4c,0x4c,0x4d,0x4c,0x4c,0x49,0x51,0x55,0x30, + 0x11,0x07,0x03,0x04,0x03,0x02,0x01,0x01,0x01,0x03,0x03,0x02,0x22,0x49,0x53, + 0x52,0x4a,0x4b,0x4e,0x4e,0x4f,0x50,0x50,0x4e,0x4d,0x4c,0x4c,0x4d,0x4d,0x4d, + 0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4f,0x50,0x4f,0x4e,0x4d,0x4e,0x4f,0x4f, + 0x4f,0x4e,0x4e,0x4e,0x4f,0x4f,0x4f,0x50,0x50,0x50,0x50,0x50,0x50,0x50,0x4f, + 0x4f,0x4f,0x4f,0x4f,0x4f,0x4f,0x50,0x50,0x50,0x50,0x4f,0x4e,0x4e,0x4f,0x50, + 0x50,0x50,0x50,0x50,0x51,0x51,0x51,0x51,0x51,0x50,0x50,0x50,0x50,0x51,0x51, + 0x50,0x50,0x50,0x50,0x50,0x50,0x50,0x51,0x51,0x51,0x51,0x52,0x53,0x52,0x51, + 0x51,0x51,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x53,0x53,0x53,0x52,0x51,0x52, + 0x52,0x52,0x52,0x52,0x53,0x52,0x53,0x53,0x53,0x53,0x52,0x52,0x52,0x52,0x52, + 0x52,0x51,0xc8,0x30,0x30,0x30,0x30,0x30,0x30,0x31,0x32,0x32,0x31,0x31,0x31, + 0x32,0x32,0x31,0x31,0x32,0x32,0x32,0x32,0x31,0x31,0x31,0x31,0x32,0x32,0x32, + 0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x33,0x33,0x33, + 0x33,0x33,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x35,0x35,0x34,0x34, + 0x34,0x34,0x35,0x36,0x36,0x36,0x36,0x36,0x35,0x35,0x36,0x36,0x36,0x36,0x36, + 0x36,0x36,0x36,0x35,0x35,0x35,0x35,0x35,0x36,0x36,0x36,0x37,0x37,0x37,0x37, + 0x37,0x37,0x37,0x37,0x37,0x37,0x37,0x37,0x37,0x37,0x37,0x38,0x38,0x39,0x39, + 0x38,0x38,0x38,0x39,0x3a,0x3a,0x39,0x39,0x38,0x38,0x38,0x39,0x3a,0x3b,0x3b, + 0x3b,0x3a,0x3a,0x3b,0x3b,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3b,0x3b,0x3b,0x3a, + 0x3a,0x3c,0x3b,0x3a,0x3a,0x3a,0x3c,0x3c,0x3c,0x3b,0x3a,0x3a,0x3b,0x3c,0x3c, + 0x3c,0x3c,0x3c,0x3c,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d, + 0x3d,0x3d,0x3d,0x3d,0x3e,0x3e,0x3e,0x3e,0x3e,0x3e,0x3e,0x3e,0x3e,0x3e,0x3f, + 0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x40,0x40,0x40,0x40, + 0x40,0x40,0x41,0x41,0x41,0x41,0x40,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41, + 0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x42,0x42,0x42, + 0x42,0x42,0x41,0x41,0x41,0x41,0x41,0x42,0x42,0x42,0x42,0x42,0x43,0x43,0x43, + 0x43,0x43,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x45,0x45,0x45,0x45,0x45, + 0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x46, + 0x46,0x46,0x46,0x46,0x46,0x46,0x46,0x46,0x46,0x46,0x46,0x46,0x46,0x46,0x47, + 0x48,0x48,0x48,0x47,0x46,0x45,0x45,0x46,0x47,0x47,0x47,0x47,0x48,0x48,0x48, + 0x48,0x48,0x47,0x47,0x47,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x48, + 0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x4a,0x4a,0x4a,0x4b,0x4b,0x4b,0x4a,0x4a, + 0x4a,0x4a,0x4a,0x4a,0x4a,0x4a,0x4a,0x4a,0x4a,0x4a,0x4a,0x4a,0x4b,0x4b,0x4b, + 0x4c,0x4c,0x4c,0x4a,0x49,0x4a,0x4a,0x4a,0x4a,0x4a,0x4a,0x4a,0x4a,0x4b,0x4b, + 0x4b,0x4c,0x4c,0x4c,0x4c,0x4c,0x4c,0x4c,0x4c,0x4d,0x4e,0x4d,0x4c,0x49,0x52, + 0x57,0x32,0x13,0x07,0x03,0x03,0x03,0x02,0x01,0x01,0x02,0x03,0x03,0x03,0x21, + 0x47,0x53,0x54,0x4c,0x4c,0x4f,0x4d,0x4e,0x51,0x50,0x4f,0x4d,0x4d,0x4d,0x4d, + 0x4e,0x4e,0x4e,0x4e,0x4e,0x4e,0x4e,0x4e,0x4e,0x50,0x50,0x50,0x4e,0x4e,0x4f, + 0x4f,0x4f,0x4f,0x4f,0x4f,0x4f,0x50,0x50,0x50,0x51,0x51,0x51,0x51,0x50,0x50, + 0x50,0x50,0x50,0x50,0x50,0x50,0x50,0x50,0x51,0x51,0x51,0x50,0x50,0x4f,0x4f, + 0x4f,0x50,0x50,0x51,0x51,0x51,0x52,0x52,0x52,0x52,0x52,0x51,0x51,0x51,0x51, + 0x51,0x52,0x51,0x50,0x50,0x50,0x51,0x51,0x51,0x52,0x52,0x53,0x53,0x53,0x53, + 0x53,0x50,0x50,0x51,0x52,0x52,0x53,0x53,0x53,0x53,0x53,0x53,0x53,0x53,0x52, + 0x52,0x53,0x53,0x53,0x53,0x53,0x53,0x53,0x53,0x53,0x53,0x53,0x53,0x53,0x53, + 0x53,0x53,0x52,0x52,0xc8,0x30,0x30,0x2f,0x2f,0x30,0x31,0x31,0x31,0x31,0x31, + 0x31,0x31,0x31,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32, + 0x32,0x32,0x32,0x32,0x32,0x32,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33, + 0x33,0x33,0x33,0x33,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x35,0x35, + 0x35,0x35,0x35,0x35,0x35,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36, + 0x36,0x36,0x36,0x36,0x36,0x36,0x35,0x35,0x35,0x36,0x36,0x36,0x36,0x37,0x37, + 0x38,0x38,0x38,0x37,0x37,0x37,0x37,0x37,0x37,0x37,0x37,0x37,0x38,0x38,0x39, + 0x3a,0x39,0x39,0x39,0x39,0x39,0x3a,0x3a,0x39,0x38,0x37,0x37,0x38,0x39,0x3a, + 0x3a,0x3b,0x3a,0x3a,0x3a,0x3b,0x3b,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3b,0x3b, + 0x3b,0x3b,0x3b,0x3c,0x3c,0x3b,0x3a,0x3b,0x3c,0x3c,0x3c,0x3b,0x3a,0x3a,0x3b, + 0x3c,0x3c,0x3c,0x3c,0x3c,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d, + 0x3d,0x3d,0x3e,0x3e,0x3e,0x3e,0x3e,0x3f,0x3f,0x3f,0x3f,0x3f,0x3e,0x3e,0x3e, + 0x3f,0x3f,0x3f,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x3f,0x3f,0x40,0x40, + 0x40,0x40,0x40,0x40,0x41,0x41,0x41,0x41,0x40,0x40,0x41,0x41,0x41,0x41,0x41, + 0x40,0x40,0x41,0x41,0x42,0x41,0x41,0x41,0x42,0x42,0x42,0x42,0x42,0x42,0x42, + 0x43,0x43,0x43,0x43,0x42,0x42,0x42,0x42,0x42,0x42,0x43,0x43,0x43,0x43,0x43, + 0x44,0x44,0x44,0x44,0x44,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45, + 0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x44, + 0x45,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x46,0x46, + 0x46,0x47,0x48,0x48,0x48,0x48,0x47,0x46,0x46,0x47,0x47,0x48,0x47,0x48,0x48, + 0x48,0x48,0x48,0x48,0x47,0x47,0x48,0x48,0x48,0x48,0x48,0x49,0x49,0x49,0x49, + 0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x49,0x4a,0x4b,0x4b,0x4c,0x4c,0x4c, + 0x4b,0x4b,0x4b,0x4c,0x4c,0x4c,0x4c,0x4b,0x4a,0x4b,0x4b,0x4b,0x4b,0x4b,0x4c, + 0x4c,0x4c,0x4c,0x4c,0x4c,0x4b,0x4a,0x4b,0x4b,0x4b,0x4b,0x4b,0x4b,0x4c,0x4c, + 0x4c,0x4c,0x4c,0x4c,0x4c,0x4d,0x4d,0x4c,0x4c,0x4c,0x4c,0x4e,0x4f,0x4e,0x4c, + 0x4a,0x52,0x57,0x34,0x15,0x07,0x03,0x03,0x02,0x01,0x01,0x01,0x02,0x03,0x03, + 0x02,0x1d,0x40,0x53,0x57,0x4c,0x4c,0x50,0x4e,0x4e,0x50,0x50,0x4f,0x4e,0x4d, + 0x4e,0x4f,0x4f,0x50,0x50,0x4f,0x4f,0x4f,0x4f,0x4f,0x4f,0x50,0x51,0x50,0x50, + 0x4f,0x4f,0x4f,0x4f,0x4f,0x4f,0x50,0x50,0x50,0x50,0x51,0x51,0x51,0x51,0x50, + 0x50,0x50,0x50,0x50,0x50,0x50,0x51,0x51,0x51,0x51,0x52,0x52,0x52,0x51,0x50, + 0x50,0x50,0x50,0x50,0x51,0x52,0x52,0x52,0x52,0x52,0x53,0x52,0x52,0x52,0x52, + 0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x53,0x53,0x53,0x53, + 0x53,0x53,0x53,0x51,0x51,0x52,0x52,0x53,0x53,0x53,0x53,0x53,0x53,0x53,0x53, + 0x53,0x53,0x53,0x53,0x53,0x53,0x53,0x53,0x53,0x53,0x53,0x53,0x54,0x54,0x53, + 0x53,0x53,0x53,0x53,0x53,0x52,0xc8,0x30,0x30,0x2f,0x2f,0x30,0x31,0x31,0x31, + 0x31,0x31,0x31,0x31,0x31,0x31,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32, + 0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33, + 0x33,0x33,0x33,0x33,0x33,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34, + 0x34,0x35,0x35,0x35,0x35,0x35,0x35,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36, + 0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36, + 0x37,0x37,0x38,0x38,0x38,0x37,0x37,0x37,0x37,0x37,0x37,0x37,0x37,0x37,0x38, + 0x39,0x39,0x3a,0x3a,0x39,0x39,0x39,0x39,0x3a,0x3a,0x3a,0x39,0x37,0x38,0x38, + 0x39,0x3a,0x3a,0x3a,0x3a,0x3a,0x3b,0x3b,0x3b,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a, + 0x3b,0x3b,0x3b,0x3b,0x3b,0x3c,0x3c,0x3b,0x3b,0x3b,0x3c,0x3c,0x3c,0x3c,0x3b, + 0x3b,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d, + 0x3d,0x3d,0x3d,0x3e,0x3e,0x3e,0x3e,0x3e,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f, + 0x3e,0x3f,0x3f,0x3f,0x3f,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x3f,0x3f, + 0x40,0x40,0x40,0x40,0x40,0x40,0x41,0x41,0x41,0x41,0x40,0x40,0x40,0x41,0x41, + 0x41,0x41,0x40,0x40,0x41,0x41,0x42,0x42,0x41,0x41,0x42,0x42,0x42,0x42,0x42, + 0x42,0x43,0x43,0x43,0x43,0x43,0x42,0x42,0x42,0x42,0x42,0x43,0x43,0x43,0x43, + 0x43,0x44,0x44,0x44,0x44,0x44,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45, + 0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45, + 0x45,0x44,0x45,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47, + 0x47,0x46,0x47,0x47,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x48, + 0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x4a,0x4b,0x4b, + 0x4b,0x4a,0x4a,0x49,0x4a,0x4a,0x4a,0x4a,0x4a,0x4a,0x4a,0x4a,0x4b,0x4b,0x4c, + 0x4c,0x4c,0x4c,0x4c,0x4c,0x4c,0x4c,0x4c,0x4c,0x4b,0x4b,0x4b,0x4b,0x4b,0x4c, + 0x4c,0x4c,0x4c,0x4c,0x4c,0x4d,0x4d,0x4c,0x4c,0x4b,0x4b,0x4b,0x4b,0x4b,0x4c, + 0x4c,0x4c,0x4c,0x4c,0x4d,0x4c,0x4c,0x4d,0x4d,0x4c,0x4c,0x4c,0x4d,0x4e,0x4f, + 0x4e,0x4c,0x4b,0x52,0x57,0x35,0x15,0x07,0x02,0x03,0x02,0x01,0x01,0x01,0x02, + 0x03,0x03,0x01,0x16,0x36,0x52,0x5a,0x4b,0x4c,0x51,0x50,0x4f,0x50,0x50,0x50, + 0x4f,0x4e,0x4f,0x50,0x50,0x50,0x50,0x50,0x50,0x50,0x50,0x50,0x50,0x50,0x51, + 0x51,0x50,0x50,0x50,0x50,0x50,0x50,0x50,0x50,0x50,0x50,0x51,0x52,0x51,0x51, + 0x51,0x50,0x50,0x50,0x50,0x50,0x50,0x50,0x51,0x52,0x51,0x51,0x52,0x53,0x53, + 0x53,0x52,0x50,0x50,0x51,0x51,0x52,0x53,0x52,0x52,0x52,0x53,0x53,0x52,0x52, + 0x52,0x52,0x52,0x52,0x52,0x52,0x53,0x53,0x53,0x53,0x53,0x53,0x53,0x53,0x53, + 0x53,0x53,0x53,0x53,0x53,0x53,0x53,0x53,0x53,0x53,0x53,0x53,0x53,0x53,0x53, + 0x53,0x53,0x53,0x53,0x53,0x53,0x53,0x53,0x53,0x53,0x53,0x53,0x53,0x53,0x54, + 0x54,0x53,0x53,0x54,0x54,0x54,0x53,0x53,0xc8,0x30,0x30,0x30,0x30,0x30,0x30, + 0x31,0x31,0x31,0x30,0x30,0x30,0x31,0x31,0x32,0x32,0x32,0x32,0x32,0x32,0x32, + 0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x33,0x33,0x33,0x33,0x33,0x34,0x34, + 0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x35,0x35,0x35,0x35, + 0x35,0x34,0x34,0x35,0x34,0x34,0x34,0x34,0x35,0x36,0x36,0x36,0x36,0x36,0x35, + 0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36, + 0x36,0x37,0x37,0x38,0x38,0x38,0x38,0x38,0x38,0x38,0x38,0x38,0x38,0x38,0x37, + 0x37,0x38,0x39,0x3a,0x3a,0x3a,0x39,0x39,0x39,0x3a,0x3a,0x3a,0x3a,0x3a,0x39, + 0x39,0x3a,0x3a,0x3a,0x3a,0x3a,0x3b,0x3c,0x3c,0x3b,0x3b,0x3b,0x3b,0x3b,0x3b, + 0x3a,0x3a,0x3b,0x3b,0x3c,0x3c,0x3d,0x3d,0x3c,0x3c,0x3c,0x3c,0x3d,0x3d,0x3d, + 0x3c,0x3c,0x3c,0x3c,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d, + 0x3d,0x3e,0x3e,0x3e,0x3e,0x3e,0x3e,0x3e,0x3e,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f, + 0x40,0x40,0x3f,0x3f,0x3f,0x40,0x40,0x40,0x40,0x41,0x41,0x41,0x41,0x41,0x41, + 0x3f,0x3f,0x40,0x40,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x40,0x40, + 0x41,0x41,0x41,0x41,0x40,0x40,0x41,0x42,0x42,0x41,0x41,0x41,0x43,0x43,0x43, + 0x43,0x43,0x43,0x43,0x44,0x44,0x43,0x43,0x43,0x43,0x43,0x43,0x43,0x43,0x43, + 0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x45,0x45,0x45,0x45,0x45,0x45,0x45, + 0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45, + 0x45,0x45,0x45,0x44,0x45,0x48,0x48,0x48,0x47,0x47,0x48,0x48,0x48,0x48,0x48, + 0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x49,0x49,0x49,0x49,0x48, + 0x48,0x48,0x48,0x49,0x49,0x49,0x49,0x49,0x49,0x49,0x49,0x49,0x49,0x49,0x4b, + 0x4c,0x4c,0x4c,0x4c,0x4c,0x4c,0x4c,0x4c,0x4c,0x4c,0x4c,0x4c,0x4b,0x4a,0x4a, + 0x4b,0x4c,0x4c,0x4c,0x4c,0x4c,0x4c,0x4c,0x4c,0x4c,0x4c,0x4c,0x4c,0x4c,0x4c, + 0x4c,0x4c,0x4c,0x4c,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4c,0x4c,0x4c,0x4c,0x4c, + 0x4c,0x4c,0x4c,0x4d,0x4d,0x4e,0x4e,0x4e,0x4d,0x4d,0x4d,0x4c,0x4c,0x4c,0x4d, + 0x4e,0x4f,0x4e,0x4c,0x4b,0x52,0x56,0x36,0x17,0x07,0x01,0x03,0x02,0x01,0x02, + 0x02,0x02,0x03,0x02,0x00,0x0e,0x29,0x50,0x5c,0x4a,0x4c,0x52,0x50,0x50,0x50, + 0x51,0x51,0x50,0x50,0x50,0x51,0x52,0x52,0x52,0x51,0x51,0x51,0x52,0x52,0x52, + 0x51,0x51,0x51,0x51,0x51,0x51,0x51,0x51,0x51,0x52,0x51,0x51,0x51,0x51,0x51, + 0x51,0x50,0x50,0x50,0x50,0x50,0x50,0x50,0x51,0x51,0x50,0x50,0x51,0x51,0x52, + 0x53,0x53,0x53,0x53,0x52,0x52,0x52,0x52,0x52,0x53,0x52,0x52,0x53,0x53,0x53, + 0x53,0x53,0x53,0x53,0x53,0x53,0x53,0x53,0x53,0x54,0x54,0x54,0x54,0x54,0x54, + 0x54,0x54,0x54,0x54,0x54,0x54,0x54,0x53,0x54,0x54,0x54,0x53,0x53,0x53,0x53, + 0x53,0x53,0x53,0x53,0x54,0x54,0x54,0x55,0x55,0x54,0x54,0x53,0x53,0x53,0x53, + 0x53,0x53,0x54,0x54,0x54,0x54,0x54,0x54,0x53,0x52,0xc8,0x30,0x30,0x30,0x30, + 0x30,0x31,0x31,0x31,0x31,0x30,0x30,0x30,0x31,0x31,0x32,0x32,0x32,0x32,0x32, + 0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x33,0x33,0x33,0x33,0x33,0x33, + 0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x35,0x35,0x35,0x35, + 0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x34,0x34,0x35,0x35,0x36,0x36,0x36,0x36, + 0x36,0x35,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36, + 0x36,0x36,0x37,0x37,0x38,0x38,0x38,0x38,0x38,0x38,0x38,0x38,0x38,0x38,0x38, + 0x38,0x37,0x38,0x38,0x3a,0x3a,0x3a,0x3a,0x39,0x39,0x3a,0x3a,0x3a,0x3a,0x3a, + 0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3b,0x3c,0x3c,0x3b,0x3b,0x3b,0x3b, + 0x3b,0x3b,0x3a,0x3a,0x3b,0x3b,0x3c,0x3d,0x3d,0x3d,0x3d,0x3c,0x3c,0x3c,0x3d, + 0x3d,0x3d,0x3d,0x3c,0x3c,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d, + 0x3d,0x3e,0x3e,0x3e,0x3e,0x3e,0x3e,0x3e,0x3e,0x3e,0x3f,0x3f,0x3f,0x3f,0x3f, + 0x3f,0x3f,0x40,0x40,0x3f,0x3f,0x3f,0x40,0x40,0x40,0x41,0x41,0x41,0x41,0x41, + 0x41,0x41,0x40,0x40,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x42,0x41,0x41,0x41, + 0x40,0x40,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x42,0x43,0x42,0x41,0x42,0x43, + 0x43,0x43,0x43,0x43,0x43,0x44,0x44,0x44,0x44,0x43,0x43,0x43,0x43,0x43,0x43, + 0x43,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x45,0x45,0x45,0x45,0x45, + 0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x46,0x46, + 0x46,0x46,0x45,0x45,0x45,0x45,0x46,0x48,0x48,0x48,0x47,0x48,0x48,0x48,0x48, + 0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x49,0x4a,0x4a, + 0x49,0x48,0x48,0x48,0x48,0x49,0x49,0x49,0x49,0x49,0x49,0x49,0x49,0x49,0x49, + 0x49,0x4b,0x4c,0x4c,0x4c,0x4c,0x4c,0x4c,0x4c,0x4c,0x4c,0x4c,0x4c,0x4c,0x4c, + 0x4b,0x4b,0x4c,0x4c,0x4c,0x4c,0x4c,0x4c,0x4c,0x4c,0x4c,0x4c,0x4c,0x4c,0x4c, + 0x4c,0x4c,0x4c,0x4c,0x4c,0x4c,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4c, + 0x4c,0x4c,0x4c,0x4c,0x4d,0x4e,0x4e,0x4f,0x50,0x4e,0x4d,0x4d,0x4d,0x4d,0x4c, + 0x4c,0x4d,0x4e,0x4f,0x4e,0x4d,0x4b,0x51,0x55,0x36,0x18,0x07,0x01,0x03,0x01, + 0x01,0x02,0x02,0x02,0x03,0x02,0x00,0x09,0x1f,0x4d,0x5f,0x4b,0x4c,0x53,0x51, + 0x50,0x50,0x50,0x51,0x50,0x50,0x50,0x51,0x52,0x52,0x53,0x53,0x53,0x53,0x52, + 0x52,0x52,0x51,0x51,0x51,0x51,0x51,0x51,0x51,0x51,0x52,0x52,0x52,0x51,0x51, + 0x51,0x51,0x50,0x50,0x51,0x51,0x52,0x53,0x53,0x53,0x52,0x52,0x50,0x50,0x51, + 0x51,0x52,0x53,0x53,0x54,0x53,0x53,0x53,0x53,0x52,0x53,0x53,0x53,0x53,0x53, + 0x53,0x53,0x53,0x53,0x53,0x53,0x53,0x53,0x53,0x53,0x54,0x55,0x55,0x54,0x54, + 0x54,0x54,0x54,0x54,0x54,0x55,0x55,0x55,0x55,0x55,0x55,0x54,0x54,0x54,0x53, + 0x53,0x53,0x53,0x54,0x54,0x54,0x55,0x55,0x55,0x55,0x56,0x55,0x55,0x54,0x54, + 0x53,0x53,0x54,0x54,0x54,0x54,0x54,0x55,0x55,0x55,0x53,0x53,0xc8,0x31,0x31, + 0x31,0x31,0x31,0x32,0x32,0x32,0x32,0x31,0x31,0x31,0x31,0x32,0x32,0x32,0x32, + 0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33, + 0x33,0x33,0x34,0x34,0x34,0x34,0x34,0x35,0x35,0x35,0x35,0x35,0x35,0x36,0x36, + 0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x35,0x35,0x36,0x36,0x36, + 0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x37,0x37,0x37,0x37, + 0x37,0x37,0x37,0x37,0x37,0x37,0x38,0x38,0x38,0x38,0x38,0x38,0x38,0x38,0x38, + 0x39,0x39,0x39,0x38,0x38,0x39,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a, + 0x3a,0x3a,0x3a,0x3b,0x3b,0x3b,0x3a,0x3a,0x3a,0x3a,0x3a,0x3d,0x3c,0x3a,0x3a, + 0x3b,0x3b,0x3b,0x3b,0x3a,0x3a,0x3b,0x3b,0x3c,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d, + 0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3e, + 0x3e,0x3e,0x3e,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f, + 0x3f,0x40,0x40,0x40,0x41,0x41,0x40,0x40,0x40,0x41,0x41,0x41,0x41,0x41,0x41, + 0x41,0x41,0x41,0x41,0x40,0x40,0x41,0x41,0x41,0x42,0x42,0x42,0x43,0x43,0x42, + 0x42,0x41,0x41,0x41,0x41,0x42,0x42,0x41,0x41,0x42,0x42,0x43,0x43,0x43,0x43, + 0x43,0x44,0x44,0x44,0x44,0x44,0x44,0x45,0x45,0x45,0x45,0x44,0x44,0x44,0x44, + 0x44,0x44,0x44,0x44,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45, + 0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x46,0x46,0x46,0x46,0x46, + 0x47,0x47,0x47,0x47,0x46,0x46,0x46,0x46,0x47,0x48,0x48,0x48,0x48,0x48,0x48, + 0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x47,0x47,0x48,0x48,0x49, + 0x4a,0x4a,0x48,0x48,0x48,0x48,0x48,0x49,0x4a,0x4a,0x4a,0x4a,0x49,0x49,0x49, + 0x49,0x49,0x49,0x4b,0x4c,0x4c,0x4c,0x4c,0x4c,0x4c,0x4c,0x4c,0x4c,0x4c,0x4c, + 0x4c,0x4c,0x4c,0x4c,0x4c,0x4d,0x4d,0x4d,0x4c,0x4c,0x4c,0x4c,0x4c,0x4c,0x4c, + 0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4e,0x4e,0x4e,0x4d,0x4d, + 0x4d,0x4c,0x4c,0x4c,0x4c,0x4c,0x4d,0x4e,0x4f,0x4f,0x50,0x4f,0x4e,0x4e,0x4e, + 0x4e,0x4d,0x4d,0x4e,0x4e,0x4f,0x4f,0x4d,0x4b,0x51,0x55,0x37,0x19,0x06,0x01, + 0x03,0x01,0x00,0x02,0x02,0x01,0x02,0x03,0x02,0x06,0x16,0x4c,0x62,0x4e,0x4e, + 0x53,0x52,0x50,0x4f,0x50,0x51,0x50,0x50,0x51,0x52,0x52,0x53,0x53,0x53,0x53, + 0x53,0x52,0x52,0x52,0x51,0x50,0x51,0x51,0x51,0x51,0x51,0x52,0x52,0x52,0x52, + 0x52,0x50,0x50,0x51,0x51,0x51,0x53,0x53,0x54,0x55,0x55,0x55,0x54,0x53,0x52, + 0x51,0x51,0x51,0x52,0x53,0x53,0x54,0x54,0x53,0x53,0x53,0x53,0x53,0x53,0x53, + 0x53,0x53,0x53,0x54,0x54,0x54,0x53,0x53,0x53,0x53,0x53,0x54,0x55,0x55,0x55, + 0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x56,0x56,0x56,0x56,0x55,0x55,0x55,0x54, + 0x54,0x54,0x53,0x53,0x54,0x54,0x55,0x56,0x56,0x56,0x56,0x56,0x56,0x56,0x56, + 0x56,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x56,0x56,0x56,0x55,0x54,0xc8, + 0x32,0x32,0x31,0x31,0x31,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x31,0x32,0x33, + 0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x33,0x34,0x34,0x34,0x33,0x33,0x33, + 0x33,0x33,0x33,0x33,0x34,0x34,0x34,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x36, + 0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36, + 0x36,0x37,0x37,0x36,0x36,0x36,0x36,0x36,0x37,0x37,0x36,0x36,0x37,0x37,0x38, + 0x38,0x38,0x38,0x37,0x37,0x37,0x38,0x38,0x38,0x39,0x39,0x39,0x39,0x38,0x39, + 0x39,0x39,0x3a,0x3a,0x3a,0x39,0x39,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a, + 0x3a,0x3a,0x3a,0x3a,0x3a,0x3b,0x3b,0x3c,0x3b,0x3a,0x3a,0x3a,0x3a,0x3c,0x3c, + 0x3a,0x3a,0x3a,0x3a,0x3b,0x3b,0x3b,0x3a,0x3b,0x3b,0x3c,0x3c,0x3c,0x3d,0x3d, + 0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3e,0x3e,0x3e, + 0x3e,0x3e,0x3f,0x3f,0x3f,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x3f,0x3f,0x3f, + 0x3f,0x3f,0x3f,0x40,0x40,0x41,0x41,0x41,0x41,0x40,0x41,0x41,0x41,0x41,0x41, + 0x42,0x42,0x42,0x42,0x42,0x41,0x41,0x41,0x42,0x42,0x42,0x43,0x43,0x43,0x43, + 0x44,0x43,0x43,0x42,0x42,0x42,0x42,0x42,0x43,0x43,0x43,0x43,0x43,0x44,0x44, + 0x44,0x44,0x44,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45, + 0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45, + 0x46,0x46,0x46,0x46,0x46,0x46,0x46,0x46,0x46,0x46,0x46,0x46,0x46,0x46,0x47, + 0x47,0x47,0x47,0x48,0x48,0x47,0x47,0x47,0x47,0x47,0x48,0x48,0x48,0x48,0x48, + 0x48,0x48,0x48,0x48,0x48,0x48,0x49,0x49,0x49,0x48,0x48,0x48,0x47,0x47,0x48, + 0x48,0x48,0x49,0x49,0x48,0x48,0x48,0x48,0x49,0x49,0x4a,0x4b,0x4b,0x4a,0x49, + 0x49,0x49,0x49,0x49,0x49,0x4a,0x4b,0x4b,0x4b,0x4c,0x4c,0x4c,0x4c,0x4c,0x4c, + 0x4c,0x4c,0x4c,0x4c,0x4d,0x4d,0x4d,0x4e,0x4e,0x4e,0x4d,0x4d,0x4d,0x4c,0x4c, + 0x4c,0x4c,0x4e,0x4e,0x4e,0x4e,0x4e,0x4e,0x4e,0x4e,0x4e,0x4e,0x4e,0x4e,0x4e, + 0x4d,0x4d,0x4e,0x4d,0x4d,0x4d,0x4d,0x4d,0x4e,0x4e,0x4f,0x50,0x50,0x50,0x4f, + 0x4f,0x4f,0x4f,0x4e,0x4e,0x4f,0x50,0x50,0x50,0x4e,0x4b,0x51,0x56,0x39,0x1b, + 0x07,0x01,0x03,0x01,0x00,0x02,0x02,0x02,0x02,0x03,0x04,0x05,0x12,0x49,0x62, + 0x51,0x50,0x53,0x53,0x51,0x50,0x50,0x51,0x51,0x51,0x51,0x52,0x53,0x53,0x53, + 0x53,0x53,0x52,0x52,0x52,0x51,0x51,0x50,0x51,0x51,0x51,0x51,0x52,0x52,0x52, + 0x53,0x53,0x52,0x50,0x51,0x53,0x53,0x53,0x53,0x54,0x55,0x56,0x56,0x56,0x55, + 0x54,0x53,0x53,0x52,0x52,0x53,0x53,0x53,0x54,0x54,0x54,0x54,0x54,0x53,0x53, + 0x53,0x54,0x54,0x54,0x55,0x55,0x55,0x54,0x54,0x54,0x54,0x54,0x54,0x55,0x55, + 0x56,0x56,0x56,0x56,0x56,0x56,0x56,0x56,0x56,0x57,0x57,0x57,0x57,0x56,0x55, + 0x55,0x55,0x55,0x54,0x54,0x54,0x54,0x55,0x56,0x56,0x57,0x57,0x57,0x57,0x57, + 0x57,0x57,0x56,0x56,0x56,0x56,0x56,0x56,0x56,0x56,0x57,0x57,0x57,0x57,0x56, + 0x55,0xc8,0x32,0x32,0x31,0x31,0x31,0x31,0x32,0x32,0x32,0x32,0x32,0x32,0x32, + 0x32,0x33,0x33,0x32,0x32,0x32,0x32,0x32,0x32,0x33,0x34,0x34,0x34,0x34,0x33, + 0x33,0x33,0x33,0x33,0x33,0x33,0x34,0x34,0x34,0x35,0x35,0x35,0x35,0x35,0x35, + 0x35,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x37,0x37,0x37,0x36,0x36, + 0x36,0x36,0x37,0x37,0x37,0x37,0x36,0x36,0x36,0x37,0x37,0x37,0x36,0x36,0x37, + 0x38,0x38,0x38,0x38,0x38,0x37,0x37,0x38,0x39,0x39,0x39,0x39,0x39,0x39,0x39, + 0x39,0x39,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a, + 0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3b,0x3c,0x3c,0x3c,0x3b,0x3a,0x3a,0x3a, + 0x3b,0x3c,0x3a,0x3a,0x3a,0x3a,0x3a,0x3b,0x3b,0x3b,0x3b,0x3c,0x3c,0x3c,0x3c, + 0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3e,0x3e, + 0x3e,0x3e,0x3e,0x3f,0x3f,0x3f,0x3f,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40, + 0x3f,0x3f,0x3f,0x3f,0x3f,0x40,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41, + 0x41,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x41,0x41,0x42,0x43,0x43,0x43,0x43, + 0x43,0x44,0x44,0x44,0x44,0x43,0x43,0x43,0x43,0x43,0x43,0x44,0x45,0x44,0x44, + 0x44,0x44,0x44,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45, + 0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45, + 0x45,0x46,0x46,0x46,0x46,0x46,0x46,0x46,0x46,0x46,0x46,0x46,0x46,0x46,0x46, + 0x46,0x47,0x47,0x47,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x48, + 0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x49,0x49,0x49,0x48,0x48,0x48,0x48, + 0x48,0x48,0x48,0x48,0x49,0x49,0x48,0x48,0x49,0x49,0x4a,0x4a,0x4b,0x4b,0x4c, + 0x4b,0x4b,0x4a,0x4b,0x4b,0x4a,0x4b,0x4b,0x4b,0x4b,0x4c,0x4c,0x4c,0x4c,0x4c, + 0x4c,0x4c,0x4c,0x4c,0x4c,0x4d,0x4e,0x4e,0x4e,0x4e,0x4e,0x4e,0x4e,0x4e,0x4d, + 0x4d,0x4d,0x4d,0x4d,0x4e,0x4e,0x4e,0x4e,0x4e,0x4e,0x4e,0x4e,0x4e,0x4e,0x4e, + 0x4e,0x4e,0x4d,0x4d,0x4e,0x4e,0x4e,0x4f,0x4f,0x4e,0x4e,0x4e,0x4f,0x50,0x50, + 0x50,0x50,0x50,0x50,0x4f,0x4f,0x4e,0x50,0x50,0x50,0x50,0x4e,0x4c,0x52,0x57, + 0x3a,0x1d,0x07,0x01,0x03,0x01,0x00,0x03,0x03,0x02,0x03,0x03,0x05,0x04,0x0e, + 0x46,0x61,0x54,0x51,0x51,0x53,0x53,0x51,0x51,0x51,0x51,0x52,0x52,0x53,0x53, + 0x53,0x53,0x53,0x53,0x52,0x52,0x52,0x51,0x51,0x52,0x52,0x53,0x52,0x52,0x52, + 0x52,0x53,0x53,0x53,0x53,0x52,0x53,0x53,0x53,0x53,0x54,0x54,0x55,0x55,0x55, + 0x56,0x55,0x55,0x56,0x55,0x53,0x53,0x53,0x53,0x53,0x54,0x55,0x55,0x55,0x55, + 0x55,0x54,0x53,0x55,0x55,0x55,0x56,0x56,0x55,0x55,0x55,0x55,0x55,0x55,0x55, + 0x55,0x56,0x56,0x56,0x56,0x56,0x56,0x56,0x56,0x56,0x57,0x57,0x57,0x57,0x57, + 0x56,0x56,0x57,0x57,0x56,0x56,0x56,0x56,0x55,0x56,0x56,0x57,0x57,0x57,0x57, + 0x57,0x57,0x57,0x57,0x57,0x57,0x57,0x57,0x57,0x57,0x56,0x57,0x57,0x57,0x57, + 0x57,0x57,0x56,0xc8,0x31,0x31,0x31,0x31,0x31,0x32,0x32,0x32,0x32,0x32,0x32, + 0x32,0x32,0x33,0x34,0x34,0x33,0x32,0x32,0x32,0x32,0x33,0x34,0x34,0x34,0x34, + 0x34,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x34,0x34,0x35,0x35,0x36,0x35, + 0x35,0x35,0x35,0x35,0x36,0x36,0x36,0x36,0x36,0x37,0x37,0x37,0x37,0x37,0x37, + 0x37,0x36,0x36,0x36,0x37,0x37,0x37,0x37,0x36,0x36,0x36,0x38,0x38,0x37,0x37, + 0x37,0x37,0x37,0x38,0x39,0x39,0x38,0x38,0x38,0x39,0x39,0x39,0x39,0x3a,0x3a, + 0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a, + 0x3a,0x3a,0x3a,0x3a,0x3b,0x3a,0x3a,0x3a,0x3a,0x3c,0x3d,0x3d,0x3d,0x3c,0x3a, + 0x3a,0x3a,0x3b,0x3b,0x3c,0x3b,0x3b,0x3b,0x3b,0x3c,0x3c,0x3d,0x3d,0x3d,0x3d, + 0x3d,0x3d,0x3d,0x3d,0x3e,0x3e,0x3e,0x3d,0x3d,0x3d,0x3d,0x3e,0x3e,0x3d,0x3d, + 0x3e,0x3e,0x3e,0x3e,0x3f,0x3f,0x3f,0x3f,0x3f,0x40,0x40,0x40,0x40,0x40,0x41, + 0x41,0x41,0x40,0x3f,0x3f,0x3f,0x40,0x41,0x41,0x41,0x42,0x42,0x41,0x41,0x41, + 0x41,0x41,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x41,0x41,0x42,0x43,0x43, + 0x43,0x43,0x44,0x45,0x45,0x44,0x43,0x43,0x44,0x45,0x43,0x43,0x44,0x45,0x45, + 0x45,0x45,0x44,0x44,0x44,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x46,0x46, + 0x46,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x46,0x46,0x46,0x46,0x46, + 0x46,0x46,0x46,0x46,0x46,0x46,0x46,0x46,0x47,0x47,0x47,0x47,0x47,0x47,0x47, + 0x47,0x46,0x46,0x46,0x46,0x47,0x47,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x48, + 0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x49,0x49,0x49,0x49,0x49, + 0x49,0x49,0x49,0x48,0x48,0x49,0x49,0x4a,0x4b,0x4a,0x4a,0x4b,0x4c,0x4c,0x4c, + 0x4c,0x4d,0x4c,0x4c,0x4c,0x4c,0x4c,0x4c,0x4c,0x4c,0x4c,0x4c,0x4c,0x4c,0x4c, + 0x4d,0x4d,0x4d,0x4e,0x4e,0x4e,0x4f,0x4e,0x4d,0x4e,0x4e,0x4e,0x4e,0x4e,0x4e, + 0x4e,0x4e,0x4e,0x4e,0x4e,0x4e,0x4f,0x4f,0x4f,0x4f,0x4f,0x4f,0x4e,0x4e,0x4e, + 0x4e,0x4f,0x4f,0x4f,0x4d,0x4d,0x4f,0x4f,0x50,0x50,0x50,0x50,0x4f,0x4f,0x4f, + 0x50,0x50,0x50,0x51,0x51,0x50,0x50,0x50,0x50,0x50,0x50,0x51,0x50,0x4f,0x4c, + 0x53,0x57,0x3b,0x1d,0x08,0x02,0x03,0x01,0x00,0x03,0x03,0x02,0x03,0x03,0x03, + 0x01,0x0b,0x42,0x5e,0x56,0x52,0x50,0x53,0x54,0x53,0x53,0x53,0x53,0x53,0x53, + 0x54,0x55,0x55,0x54,0x54,0x53,0x53,0x53,0x52,0x52,0x52,0x53,0x53,0x54,0x54, + 0x53,0x53,0x53,0x53,0x55,0x55,0x54,0x53,0x54,0x55,0x54,0x54,0x53,0x53,0x53, + 0x53,0x53,0x53,0x54,0x55,0x57,0x57,0x55,0x54,0x54,0x54,0x54,0x55,0x55,0x56, + 0x56,0x56,0x56,0x55,0x54,0x55,0x55,0x56,0x56,0x56,0x56,0x56,0x56,0x56,0x56, + 0x56,0x56,0x56,0x56,0x57,0x57,0x57,0x57,0x56,0x56,0x57,0x57,0x57,0x57,0x57, + 0x58,0x58,0x57,0x57,0x58,0x58,0x57,0x57,0x57,0x57,0x57,0x57,0x57,0x57,0x57, + 0x57,0x57,0x57,0x57,0x57,0x57,0x57,0x58,0x58,0x57,0x57,0x57,0x57,0x57,0x57, + 0x57,0x57,0x57,0x56,0x55,0xc8,0x31,0x31,0x31,0x31,0x31,0x31,0x32,0x32,0x32, + 0x32,0x32,0x32,0x32,0x33,0x34,0x33,0x33,0x33,0x32,0x32,0x33,0x33,0x34,0x34, + 0x34,0x34,0x34,0x33,0x33,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x35,0x35,0x36, + 0x36,0x36,0x35,0x35,0x35,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x37, + 0x37,0x37,0x36,0x36,0x36,0x36,0x37,0x37,0x37,0x37,0x36,0x36,0x37,0x38,0x38, + 0x37,0x37,0x37,0x38,0x38,0x38,0x39,0x39,0x38,0x38,0x39,0x3a,0x3a,0x3a,0x3a, + 0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3b,0x3b,0x3b, + 0x3b,0x3b,0x3b,0x3a,0x3a,0x3a,0x3b,0x3b,0x3b,0x3b,0x3b,0x3c,0x3d,0x3d,0x3d, + 0x3d,0x3b,0x3b,0x3b,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3d,0x3d,0x3d, + 0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3e,0x3e,0x3e,0x3d,0x3e,0x3e,0x3f,0x3f,0x3f, + 0x3e,0x3e,0x3e,0x3e,0x3e,0x3f,0x3f,0x3f,0x3f,0x3f,0x40,0x40,0x41,0x41,0x41, + 0x41,0x41,0x41,0x41,0x41,0x40,0x3f,0x40,0x41,0x41,0x41,0x41,0x42,0x42,0x41, + 0x41,0x41,0x41,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x43,0x43,0x42,0x42,0x42, + 0x43,0x43,0x43,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x45,0x45,0x44,0x43,0x44, + 0x45,0x45,0x46,0x45,0x44,0x44,0x44,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45, + 0x45,0x46,0x46,0x46,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x46,0x46,0x46,0x46, + 0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x46,0x46,0x46,0x48,0x48,0x48,0x48,0x48, + 0x48,0x48,0x48,0x47,0x47,0x47,0x47,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x48, + 0x48,0x48,0x48,0x48,0x48,0x49,0x49,0x49,0x49,0x49,0x49,0x49,0x4a,0x4a,0x4a, + 0x4a,0x4a,0x4a,0x4a,0x4a,0x4a,0x4a,0x4a,0x4a,0x4b,0x4b,0x4c,0x4c,0x4c,0x4c, + 0x4c,0x4c,0x4c,0x4c,0x4c,0x4c,0x4c,0x4c,0x4c,0x4c,0x4c,0x4c,0x4d,0x4c,0x4c, + 0x4c,0x4d,0x4d,0x4d,0x4d,0x4e,0x4e,0x4e,0x4e,0x4e,0x4d,0x4e,0x4e,0x4e,0x4f, + 0x4f,0x4f,0x4f,0x4e,0x4e,0x4e,0x4f,0x4f,0x4f,0x4f,0x4f,0x4f,0x4f,0x4f,0x4f, + 0x4f,0x4f,0x4f,0x4f,0x50,0x50,0x4f,0x4f,0x50,0x50,0x50,0x50,0x50,0x50,0x4f, + 0x4f,0x50,0x50,0x51,0x51,0x52,0x52,0x52,0x51,0x51,0x50,0x51,0x51,0x51,0x50, + 0x4f,0x4c,0x53,0x59,0x3c,0x1e,0x08,0x01,0x02,0x01,0x01,0x03,0x03,0x02,0x03, + 0x03,0x03,0x00,0x08,0x3d,0x5b,0x57,0x53,0x51,0x53,0x55,0x54,0x53,0x53,0x53, + 0x54,0x54,0x55,0x55,0x55,0x55,0x55,0x54,0x53,0x53,0x53,0x53,0x54,0x55,0x55, + 0x55,0x55,0x54,0x54,0x55,0x55,0x56,0x56,0x55,0x55,0x55,0x55,0x54,0x54,0x54, + 0x54,0x54,0x53,0x53,0x54,0x55,0x55,0x56,0x57,0x57,0x57,0x57,0x56,0x55,0x55, + 0x55,0x56,0x56,0x56,0x56,0x56,0x56,0x56,0x56,0x57,0x57,0x57,0x57,0x56,0x56, + 0x57,0x57,0x57,0x57,0x57,0x57,0x57,0x57,0x57,0x57,0x57,0x57,0x57,0x57,0x57, + 0x57,0x57,0x58,0x57,0x57,0x57,0x58,0x58,0x58,0x57,0x57,0x57,0x57,0x57,0x57, + 0x57,0x57,0x57,0x57,0x57,0x57,0x57,0x57,0x58,0x58,0x59,0x59,0x58,0x58,0x57, + 0x58,0x58,0x58,0x57,0x57,0x56,0x55,0xc8,0x32,0x32,0x31,0x31,0x30,0x30,0x31, + 0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33, + 0x33,0x33,0x33,0x33,0x33,0x34,0x34,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35, + 0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36, + 0x36,0x36,0x37,0x36,0x36,0x36,0x37,0x37,0x37,0x37,0x37,0x37,0x37,0x38,0x38, + 0x38,0x38,0x38,0x38,0x38,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x3a,0x3b, + 0x3b,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3b,0x3b, + 0x3c,0x3c,0x3c,0x3c,0x3c,0x3b,0x3b,0x3b,0x3a,0x3b,0x3c,0x3c,0x3c,0x3d,0x3d, + 0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d, + 0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3e,0x3e,0x3d,0x3d,0x3d,0x3e,0x3f,0x40,0x40, + 0x40,0x40,0x40,0x3f,0x3f,0x3f,0x3f,0x3f,0x40,0x40,0x40,0x40,0x40,0x41,0x41, + 0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x40,0x40,0x41,0x41,0x41,0x41,0x41,0x42, + 0x42,0x41,0x41,0x41,0x42,0x42,0x43,0x43,0x43,0x43,0x43,0x43,0x44,0x44,0x43, + 0x43,0x42,0x42,0x43,0x44,0x44,0x44,0x43,0x43,0x44,0x45,0x45,0x45,0x45,0x45, + 0x44,0x43,0x44,0x45,0x46,0x45,0x45,0x44,0x45,0x46,0x46,0x45,0x45,0x45,0x45, + 0x45,0x45,0x45,0x45,0x46,0x46,0x45,0x45,0x45,0x46,0x46,0x46,0x46,0x46,0x46, + 0x46,0x47,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x47,0x47,0x47,0x48,0x48,0x49, + 0x49,0x49,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x49,0x49,0x49,0x49,0x49,0x49, + 0x49,0x49,0x4a,0x4a,0x4a,0x4a,0x4a,0x4a,0x4a,0x4a,0x4b,0x4b,0x4b,0x4b,0x4b, + 0x4b,0x4b,0x4c,0x4c,0x4b,0x4b,0x4b,0x4c,0x4c,0x4c,0x4b,0x4b,0x4b,0x4c,0x4c, + 0x4c,0x4c,0x4c,0x4c,0x4c,0x4c,0x4c,0x4c,0x4c,0x4c,0x4c,0x4c,0x4c,0x4c,0x4d, + 0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4c,0x4c,0x4d,0x4e,0x4e, + 0x4f,0x4f,0x50,0x50,0x50,0x4f,0x4f,0x4f,0x50,0x50,0x50,0x50,0x4f,0x4f,0x4f, + 0x50,0x50,0x50,0x50,0x50,0x50,0x50,0x50,0x50,0x50,0x50,0x50,0x50,0x50,0x50, + 0x4f,0x4f,0x50,0x50,0x51,0x52,0x53,0x53,0x53,0x53,0x53,0x52,0x52,0x53,0x53, + 0x52,0x51,0x50,0x4d,0x55,0x5a,0x3d,0x1e,0x08,0x00,0x00,0x01,0x03,0x04,0x03, + 0x02,0x02,0x03,0x05,0x00,0x06,0x39,0x57,0x58,0x57,0x53,0x55,0x56,0x53,0x53, + 0x53,0x54,0x55,0x54,0x54,0x54,0x55,0x55,0x55,0x55,0x54,0x53,0x53,0x54,0x56, + 0x57,0x56,0x56,0x55,0x55,0x56,0x57,0x57,0x57,0x56,0x56,0x55,0x55,0x54,0x55, + 0x55,0x56,0x56,0x57,0x57,0x57,0x57,0x57,0x56,0x55,0x56,0x59,0x5a,0x58,0x57, + 0x56,0x55,0x55,0x55,0x55,0x55,0x57,0x57,0x57,0x57,0x57,0x58,0x58,0x58,0x57, + 0x57,0x57,0x57,0x57,0x57,0x57,0x57,0x57,0x57,0x58,0x58,0x58,0x58,0x58,0x57, + 0x57,0x57,0x57,0x57,0x57,0x57,0x57,0x57,0x57,0x57,0x57,0x57,0x57,0x57,0x58, + 0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x59,0x5a,0x5a,0x5a, + 0x59,0x59,0x5a,0x5a,0x59,0x58,0x57,0x57,0x57,0xc8,0x32,0x32,0x32,0x31,0x31, + 0x31,0x32,0x32,0x32,0x33,0x32,0x32,0x32,0x32,0x33,0x34,0x34,0x34,0x34,0x34, + 0x34,0x34,0x34,0x34,0x34,0x33,0x34,0x34,0x35,0x36,0x36,0x36,0x36,0x36,0x36, + 0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36, + 0x36,0x36,0x36,0x36,0x37,0x37,0x36,0x37,0x37,0x38,0x38,0x37,0x37,0x37,0x37, + 0x38,0x38,0x38,0x38,0x39,0x39,0x39,0x39,0x39,0x3a,0x39,0x3a,0x3a,0x3a,0x3a, + 0x3a,0x3a,0x3b,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3b, + 0x3b,0x3c,0x3d,0x3d,0x3d,0x3c,0x3c,0x3c,0x3c,0x3b,0x3b,0x3b,0x3c,0x3c,0x3d, + 0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d, + 0x3d,0x3d,0x3d,0x3d,0x3e,0x3e,0x3e,0x3e,0x3f,0x3f,0x3e,0x3e,0x3e,0x3e,0x3f, + 0x3f,0x3f,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40, + 0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41, + 0x42,0x42,0x42,0x41,0x41,0x42,0x42,0x43,0x44,0x44,0x44,0x43,0x43,0x43,0x44, + 0x44,0x44,0x43,0x43,0x43,0x44,0x44,0x44,0x44,0x44,0x43,0x44,0x44,0x45,0x45, + 0x45,0x45,0x44,0x44,0x44,0x45,0x46,0x46,0x45,0x45,0x45,0x46,0x46,0x45,0x45, + 0x45,0x45,0x45,0x45,0x45,0x46,0x47,0x46,0x45,0x45,0x45,0x46,0x46,0x46,0x46, + 0x46,0x47,0x47,0x47,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x47,0x48,0x48, + 0x48,0x49,0x49,0x49,0x48,0x48,0x48,0x48,0x49,0x49,0x4a,0x4a,0x4a,0x4a,0x4a, + 0x4a,0x4a,0x4a,0x4a,0x4b,0x4b,0x4b,0x4b,0x4b,0x4b,0x4b,0x4b,0x4b,0x4b,0x4c, + 0x4c,0x4c,0x4c,0x4c,0x4c,0x4c,0x4b,0x4a,0x4b,0x4c,0x4c,0x4c,0x4b,0x4b,0x4b, + 0x4c,0x4d,0x4c,0x4c,0x4c,0x4c,0x4c,0x4c,0x4c,0x4c,0x4d,0x4d,0x4c,0x4c,0x4c, + 0x4c,0x4d,0x4e,0x4e,0x4e,0x4e,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4e, + 0x4e,0x4f,0x4f,0x50,0x50,0x50,0x50,0x50,0x50,0x50,0x50,0x50,0x50,0x50,0x50, + 0x4f,0x50,0x50,0x50,0x50,0x50,0x50,0x50,0x50,0x51,0x51,0x51,0x51,0x50,0x50, + 0x50,0x50,0x50,0x50,0x51,0x52,0x52,0x53,0x53,0x52,0x53,0x53,0x53,0x53,0x53, + 0x53,0x53,0x53,0x52,0x50,0x4f,0x56,0x5a,0x3d,0x1e,0x08,0x00,0x00,0x01,0x03, + 0x03,0x03,0x02,0x02,0x03,0x04,0x00,0x05,0x36,0x55,0x59,0x56,0x51,0x53,0x54, + 0x53,0x52,0x52,0x54,0x54,0x53,0x53,0x54,0x55,0x55,0x56,0x55,0x54,0x54,0x54, + 0x55,0x56,0x56,0x56,0x55,0x54,0x55,0x56,0x56,0x57,0x56,0x56,0x56,0x55,0x55, + 0x56,0x56,0x56,0x57,0x57,0x57,0x57,0x58,0x57,0x57,0x57,0x57,0x57,0x58,0x59, + 0x58,0x58,0x57,0x56,0x56,0x55,0x56,0x57,0x57,0x57,0x57,0x57,0x58,0x59,0x59, + 0x59,0x58,0x57,0x57,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x59,0x59, + 0x59,0x58,0x57,0x57,0x57,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x58, + 0x58,0x59,0x59,0x59,0x58,0x59,0x59,0x59,0x59,0x59,0x59,0x59,0x5a,0x5a,0x5a, + 0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x59,0x59,0x58,0x58,0xc8,0x32,0x32,0x32, + 0x32,0x32,0x32,0x32,0x32,0x33,0x33,0x33,0x32,0x32,0x33,0x34,0x34,0x34,0x34, + 0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x35,0x36,0x36,0x36,0x36,0x36, + 0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36, + 0x36,0x36,0x36,0x36,0x36,0x37,0x37,0x37,0x37,0x37,0x38,0x38,0x38,0x38,0x37, + 0x37,0x37,0x38,0x38,0x38,0x39,0x39,0x39,0x39,0x39,0x3a,0x3a,0x3a,0x3a,0x3a, + 0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a, + 0x3b,0x3b,0x3c,0x3d,0x3d,0x3d,0x3d,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c, + 0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d, + 0x3d,0x3d,0x3d,0x3d,0x3d,0x3e,0x3e,0x3e,0x3e,0x3e,0x3f,0x3f,0x3f,0x3f,0x3f, + 0x3f,0x3f,0x3f,0x3f,0x3f,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40, + 0x40,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41, + 0x41,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x43,0x44,0x44,0x44,0x44,0x43,0x43, + 0x43,0x44,0x44,0x44,0x44,0x43,0x44,0x44,0x45,0x45,0x44,0x44,0x44,0x44,0x44, + 0x45,0x45,0x45,0x45,0x45,0x44,0x45,0x45,0x47,0x47,0x45,0x45,0x45,0x47,0x47, + 0x46,0x46,0x45,0x45,0x45,0x45,0x46,0x47,0x47,0x47,0x46,0x45,0x46,0x47,0x47, + 0x46,0x46,0x46,0x47,0x47,0x47,0x48,0x48,0x48,0x48,0x48,0x49,0x49,0x48,0x48, + 0x48,0x48,0x49,0x49,0x49,0x49,0x48,0x48,0x48,0x49,0x4a,0x4a,0x4a,0x4a,0x4a, + 0x4a,0x4a,0x4a,0x4a,0x4b,0x4b,0x4b,0x4b,0x4b,0x4b,0x4b,0x4b,0x4b,0x4b,0x4b, + 0x4b,0x4c,0x4c,0x4c,0x4c,0x4c,0x4c,0x4c,0x4b,0x4a,0x4b,0x4c,0x4c,0x4c,0x4b, + 0x4b,0x4c,0x4d,0x4d,0x4d,0x4c,0x4c,0x4c,0x4c,0x4c,0x4d,0x4d,0x4e,0x4e,0x4e, + 0x4d,0x4d,0x4d,0x4d,0x4e,0x4e,0x4e,0x4e,0x4e,0x4e,0x4e,0x4e,0x4e,0x4e,0x4e, + 0x4e,0x4e,0x4f,0x4f,0x50,0x50,0x50,0x50,0x50,0x50,0x50,0x50,0x50,0x50,0x50, + 0x50,0x50,0x50,0x50,0x50,0x50,0x50,0x50,0x51,0x51,0x51,0x51,0x52,0x52,0x51, + 0x50,0x50,0x50,0x51,0x51,0x52,0x53,0x53,0x53,0x53,0x53,0x52,0x53,0x53,0x53, + 0x53,0x53,0x53,0x53,0x53,0x53,0x52,0x50,0x57,0x5a,0x3d,0x1e,0x07,0x00,0x01, + 0x01,0x02,0x03,0x03,0x02,0x02,0x03,0x03,0x00,0x05,0x32,0x53,0x5b,0x57,0x50, + 0x53,0x55,0x53,0x53,0x52,0x53,0x54,0x53,0x54,0x54,0x55,0x56,0x56,0x56,0x55, + 0x55,0x56,0x57,0x56,0x55,0x55,0x55,0x54,0x55,0x55,0x56,0x56,0x56,0x56,0x56, + 0x55,0x56,0x57,0x57,0x57,0x57,0x57,0x57,0x58,0x58,0x58,0x58,0x57,0x57,0x57, + 0x57,0x57,0x58,0x59,0x58,0x57,0x57,0x57,0x57,0x58,0x58,0x58,0x57,0x58,0x59, + 0x59,0x59,0x59,0x58,0x58,0x58,0x59,0x59,0x59,0x59,0x59,0x59,0x58,0x58,0x59, + 0x59,0x59,0x59,0x59,0x58,0x59,0x58,0x59,0x59,0x5a,0x59,0x59,0x59,0x59,0x59, + 0x59,0x59,0x59,0x59,0x59,0x59,0x59,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a, + 0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x59,0xc8,0x32, + 0x32,0x32,0x32,0x32,0x32,0x32,0x33,0x33,0x33,0x33,0x33,0x32,0x33,0x35,0x35, + 0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x36,0x36,0x36,0x36, + 0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x37,0x37,0x37,0x37,0x37,0x37, + 0x37,0x37,0x37,0x37,0x37,0x38,0x38,0x38,0x38,0x38,0x38,0x38,0x39,0x3a,0x3a, + 0x39,0x38,0x38,0x38,0x38,0x38,0x39,0x39,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3b, + 0x3b,0x3b,0x3b,0x3b,0x3b,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3b,0x3b,0x3c,0x3c, + 0x3c,0x3c,0x3c,0x3c,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d, + 0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3e,0x3e,0x3e,0x3e, + 0x3e,0x3e,0x3e,0x3e,0x3e,0x3e,0x3e,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x40, + 0x40,0x41,0x41,0x40,0x40,0x40,0x40,0x40,0x40,0x41,0x41,0x41,0x41,0x40,0x40, + 0x40,0x40,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x42,0x42,0x42,0x42,0x42,0x42, + 0x42,0x42,0x42,0x42,0x43,0x43,0x43,0x44,0x44,0x44,0x44,0x44,0x45,0x45,0x45, + 0x44,0x44,0x44,0x44,0x45,0x44,0x44,0x44,0x44,0x45,0x45,0x45,0x45,0x45,0x45, + 0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x48,0x47,0x46,0x45,0x45, + 0x48,0x48,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x48,0x48,0x48,0x48,0x47,0x47, + 0x48,0x48,0x48,0x47,0x47,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x49,0x4a, + 0x49,0x48,0x48,0x49,0x49,0x4a,0x49,0x49,0x49,0x49,0x49,0x4a,0x4b,0x4b,0x4b, + 0x4b,0x4b,0x4b,0x4b,0x4b,0x4b,0x4b,0x4c,0x4c,0x4c,0x4c,0x4c,0x4c,0x4c,0x4c, + 0x4c,0x4c,0x4c,0x4c,0x4c,0x4c,0x4c,0x4c,0x4d,0x4c,0x4c,0x4c,0x4c,0x4c,0x4c, + 0x4c,0x4c,0x4c,0x4d,0x4e,0x4f,0x4e,0x4d,0x4d,0x4d,0x4d,0x4d,0x4e,0x4f,0x4f, + 0x50,0x50,0x4f,0x4e,0x4e,0x4f,0x4f,0x4f,0x4f,0x4f,0x50,0x50,0x50,0x50,0x50, + 0x50,0x50,0x4f,0x4f,0x4f,0x50,0x50,0x50,0x50,0x50,0x50,0x50,0x50,0x50,0x50, + 0x50,0x50,0x50,0x50,0x50,0x51,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x53, + 0x52,0x51,0x50,0x50,0x50,0x51,0x53,0x53,0x54,0x53,0x53,0x53,0x53,0x53,0x53, + 0x53,0x53,0x53,0x53,0x54,0x54,0x55,0x54,0x53,0x50,0x57,0x5b,0x3e,0x1f,0x08, + 0x01,0x03,0x02,0x01,0x02,0x02,0x02,0x02,0x03,0x05,0x01,0x06,0x2e,0x4f,0x5f, + 0x5c,0x53,0x57,0x5a,0x57,0x55,0x53,0x54,0x55,0x55,0x54,0x55,0x56,0x57,0x57, + 0x57,0x57,0x57,0x57,0x58,0x57,0x56,0x56,0x55,0x55,0x55,0x56,0x56,0x57,0x57, + 0x57,0x56,0x56,0x56,0x57,0x57,0x57,0x57,0x57,0x58,0x58,0x58,0x59,0x59,0x58, + 0x58,0x57,0x57,0x57,0x59,0x5a,0x59,0x59,0x58,0x57,0x58,0x59,0x59,0x58,0x58, + 0x58,0x59,0x5a,0x5a,0x5a,0x59,0x59,0x59,0x59,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a, + 0x59,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a, + 0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5b,0x5b,0x5b,0x5b, + 0x5b,0x5b,0x5b,0x5b,0x5c,0x5b,0x5b,0x5b,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x59, + 0xc8,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x33,0x33,0x33,0x33,0x33,0x32,0x33, + 0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x36,0x36,0x37, + 0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x37,0x38,0x37,0x37, + 0x37,0x37,0x37,0x37,0x38,0x38,0x38,0x39,0x39,0x39,0x38,0x38,0x38,0x38,0x39, + 0x3a,0x3a,0x3a,0x38,0x38,0x38,0x38,0x39,0x39,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a, + 0x3a,0x3b,0x3b,0x3b,0x3b,0x3b,0x3b,0x3b,0x3a,0x3a,0x3a,0x3a,0x3b,0x3c,0x3d, + 0x3d,0x3d,0x3d,0x3d,0x3c,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d, + 0x3e,0x3e,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3e,0x3e,0x3e, + 0x3e,0x3e,0x3e,0x3e,0x3e,0x3e,0x3e,0x3e,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f, + 0x3f,0x40,0x41,0x41,0x41,0x41,0x40,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41, + 0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42, + 0x42,0x42,0x43,0x43,0x43,0x43,0x43,0x43,0x44,0x44,0x45,0x45,0x45,0x45,0x45, + 0x45,0x45,0x45,0x44,0x44,0x45,0x45,0x44,0x44,0x44,0x45,0x45,0x45,0x46,0x46, + 0x45,0x45,0x45,0x45,0x46,0x46,0x45,0x45,0x45,0x45,0x45,0x46,0x48,0x48,0x46, + 0x46,0x46,0x48,0x48,0x48,0x48,0x48,0x47,0x47,0x48,0x48,0x48,0x48,0x48,0x48, + 0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x49,0x49,0x49,0x49,0x49, + 0x4a,0x4a,0x4a,0x49,0x48,0x49,0x4a,0x4a,0x4a,0x49,0x49,0x49,0x4a,0x4b,0x4c, + 0x4b,0x4b,0x4b,0x4b,0x4b,0x4b,0x4b,0x4b,0x4c,0x4c,0x4c,0x4c,0x4c,0x4c,0x4c, + 0x4c,0x4c,0x4c,0x4c,0x4c,0x4c,0x4c,0x4c,0x4c,0x4d,0x4e,0x4e,0x4d,0x4c,0x4c, + 0x4c,0x4c,0x4c,0x4d,0x4d,0x4e,0x4f,0x50,0x4f,0x4f,0x4e,0x4d,0x4d,0x4e,0x4f, + 0x50,0x50,0x50,0x50,0x50,0x50,0x50,0x50,0x50,0x50,0x50,0x50,0x50,0x50,0x50, + 0x50,0x50,0x50,0x50,0x50,0x50,0x50,0x50,0x51,0x51,0x51,0x51,0x51,0x50,0x51, + 0x51,0x51,0x51,0x50,0x50,0x51,0x51,0x52,0x52,0x53,0x53,0x53,0x53,0x53,0x52, + 0x52,0x53,0x53,0x52,0x51,0x51,0x51,0x52,0x53,0x54,0x54,0x53,0x53,0x53,0x53, + 0x53,0x53,0x53,0x54,0x54,0x54,0x55,0x55,0x55,0x54,0x53,0x51,0x58,0x5d,0x41, + 0x20,0x07,0x01,0x04,0x02,0x01,0x02,0x02,0x02,0x02,0x02,0x03,0x00,0x04,0x28, + 0x4a,0x63,0x5e,0x53,0x58,0x5a,0x58,0x56,0x54,0x55,0x56,0x56,0x56,0x56,0x57, + 0x58,0x58,0x57,0x57,0x58,0x58,0x59,0x58,0x57,0x57,0x57,0x57,0x57,0x57,0x57, + 0x57,0x57,0x57,0x57,0x57,0x57,0x57,0x57,0x57,0x57,0x58,0x58,0x58,0x58,0x59, + 0x59,0x58,0x58,0x58,0x57,0x58,0x5a,0x5a,0x5a,0x5a,0x5a,0x59,0x59,0x59,0x59, + 0x59,0x59,0x59,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x59,0x5a,0x5a,0x5a,0x5a,0x5a, + 0x5a,0x5a,0x5a,0x5a,0x5b,0x5b,0x5a,0x5b,0x5b,0x5b,0x5b,0x5b,0x5c,0x5b,0x5a, + 0x5a,0x5b,0x5b,0x5b,0x5b,0x5b,0x5b,0x5b,0x5b,0x5a,0x5a,0x5b,0x5c,0x5c,0x5c, + 0x5c,0x5b,0x5c,0x5c,0x5c,0x5c,0x5c,0x5c,0x5c,0x5b,0x5b,0x5b,0x5b,0x5b,0x5a, + 0x5a,0x5a,0xc8,0x32,0x32,0x32,0x32,0x33,0x33,0x33,0x34,0x34,0x33,0x33,0x33, + 0x32,0x33,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x36,0x36,0x36,0x36,0x36, + 0x37,0x37,0x37,0x37,0x37,0x37,0x37,0x37,0x36,0x36,0x37,0x37,0x37,0x38,0x38, + 0x38,0x38,0x38,0x38,0x38,0x38,0x38,0x39,0x39,0x39,0x39,0x39,0x39,0x38,0x38, + 0x39,0x3a,0x3a,0x3a,0x3a,0x39,0x39,0x39,0x39,0x39,0x3a,0x3a,0x3a,0x3a,0x3a, + 0x3a,0x3a,0x3a,0x3b,0x3b,0x3b,0x3b,0x3b,0x3c,0x3c,0x3b,0x3a,0x3a,0x3b,0x3c, + 0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d, + 0x3d,0x3e,0x3e,0x3e,0x3d,0x3d,0x3e,0x3e,0x3e,0x3e,0x3e,0x3e,0x3e,0x3e,0x3f, + 0x3f,0x3f,0x3f,0x3e,0x3e,0x3e,0x3e,0x3e,0x3f,0x3f,0x3f,0x40,0x40,0x40,0x40, + 0x40,0x3f,0x3f,0x40,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x42,0x42, + 0x42,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x42,0x43,0x43,0x43,0x43,0x43,0x43, + 0x43,0x43,0x43,0x43,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x45,0x45,0x45,0x45, + 0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x44,0x44,0x44,0x45,0x45,0x46, + 0x46,0x47,0x46,0x46,0x46,0x46,0x47,0x46,0x46,0x46,0x46,0x45,0x45,0x46,0x48, + 0x48,0x47,0x47,0x47,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x48, + 0x48,0x48,0x48,0x48,0x49,0x49,0x48,0x48,0x48,0x49,0x49,0x49,0x4a,0x4a,0x4a, + 0x4a,0x4a,0x4b,0x4b,0x4a,0x49,0x49,0x4a,0x4a,0x4a,0x4a,0x4a,0x4a,0x4a,0x4b, + 0x4c,0x4c,0x4c,0x4c,0x4c,0x4c,0x4c,0x4c,0x4c,0x4c,0x4c,0x4c,0x4d,0x4d,0x4c, + 0x4c,0x4c,0x4c,0x4c,0x4c,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4e,0x4f,0x4f,0x4e, + 0x4d,0x4d,0x4c,0x4c,0x4d,0x4e,0x4e,0x4f,0x50,0x50,0x50,0x50,0x4f,0x4e,0x4e, + 0x4f,0x50,0x50,0x51,0x51,0x51,0x51,0x50,0x50,0x50,0x50,0x50,0x50,0x50,0x50, + 0x50,0x50,0x50,0x50,0x50,0x50,0x50,0x50,0x51,0x51,0x52,0x52,0x52,0x52,0x52, + 0x51,0x51,0x52,0x52,0x52,0x51,0x51,0x52,0x52,0x52,0x53,0x53,0x53,0x53,0x53, + 0x53,0x53,0x53,0x53,0x53,0x53,0x52,0x52,0x52,0x53,0x53,0x54,0x54,0x53,0x53, + 0x53,0x53,0x54,0x55,0x55,0x55,0x55,0x55,0x56,0x56,0x56,0x54,0x53,0x51,0x59, + 0x5e,0x43,0x24,0x07,0x00,0x04,0x03,0x02,0x02,0x02,0x02,0x02,0x02,0x01,0x00, + 0x03,0x22,0x45,0x65,0x61,0x51,0x57,0x59,0x57,0x56,0x55,0x57,0x57,0x57,0x57, + 0x57,0x59,0x59,0x59,0x58,0x58,0x59,0x59,0x59,0x5a,0x5a,0x5a,0x5a,0x59,0x59, + 0x59,0x5a,0x5a,0x59,0x59,0x59,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x59, + 0x59,0x59,0x59,0x59,0x59,0x59,0x59,0x59,0x5a,0x5a,0x5a,0x5b,0x5b,0x5a,0x5a, + 0x59,0x59,0x59,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a, + 0x5a,0x5a,0x5b,0x5b,0x5b,0x5b,0x5b,0x5b,0x5b,0x5b,0x5b,0x5b,0x5c,0x5c,0x5c, + 0x5c,0x5b,0x5b,0x5b,0x5c,0x5c,0x5c,0x5c,0x5c,0x5c,0x5c,0x5b,0x5b,0x5b,0x5d, + 0x5d,0x5d,0x5c,0x5c,0x5d,0x5d,0x5d,0x5d,0x5d,0x5d,0x5c,0x5c,0x5d,0x5e,0x5d, + 0x5c,0x5c,0x5c,0x5c,0xc8,0x32,0x32,0x32,0x33,0x34,0x34,0x34,0x34,0x34,0x34, + 0x33,0x33,0x33,0x34,0x35,0x35,0x35,0x35,0x35,0x36,0x36,0x36,0x36,0x36,0x36, + 0x36,0x36,0x37,0x37,0x37,0x37,0x38,0x37,0x37,0x37,0x37,0x37,0x37,0x37,0x37, + 0x38,0x38,0x38,0x38,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x38,0x39,0x39, + 0x39,0x39,0x39,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a, + 0x3a,0x3a,0x3b,0x3b,0x3b,0x3b,0x3b,0x3b,0x3b,0x3b,0x3c,0x3c,0x3c,0x3b,0x3b, + 0x3b,0x3c,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d, + 0x3d,0x3d,0x3d,0x3e,0x3e,0x3e,0x3e,0x3e,0x3e,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f, + 0x3f,0x3f,0x40,0x40,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x40,0x40,0x40,0x40,0x41, + 0x41,0x41,0x41,0x40,0x40,0x40,0x40,0x40,0x41,0x41,0x41,0x42,0x42,0x42,0x42, + 0x42,0x43,0x43,0x42,0x42,0x42,0x42,0x42,0x42,0x43,0x43,0x44,0x44,0x44,0x44, + 0x44,0x44,0x44,0x44,0x44,0x44,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45, + 0x45,0x45,0x45,0x46,0x46,0x46,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45, + 0x46,0x47,0x48,0x48,0x47,0x47,0x47,0x48,0x48,0x47,0x46,0x46,0x46,0x46,0x45, + 0x46,0x48,0x48,0x48,0x48,0x48,0x48,0x49,0x49,0x49,0x49,0x48,0x48,0x48,0x48, + 0x48,0x49,0x49,0x49,0x49,0x49,0x4a,0x49,0x49,0x49,0x49,0x4a,0x4a,0x4a,0x4b, + 0x4b,0x4b,0x4b,0x4b,0x4b,0x4b,0x4a,0x4a,0x4a,0x4a,0x4b,0x4a,0x4b,0x4b,0x4a, + 0x4b,0x4c,0x4c,0x4c,0x4c,0x4c,0x4c,0x4c,0x4c,0x4c,0x4c,0x4c,0x4c,0x4d,0x4d, + 0x4d,0x4d,0x4d,0x4d,0x4d,0x4c,0x4d,0x4d,0x4e,0x4e,0x4e,0x4e,0x4d,0x4e,0x4f, + 0x4f,0x4f,0x4e,0x4d,0x4d,0x4d,0x4d,0x4e,0x4e,0x4f,0x4f,0x50,0x50,0x50,0x50, + 0x4f,0x4f,0x50,0x50,0x51,0x51,0x52,0x51,0x51,0x50,0x50,0x51,0x51,0x51,0x51, + 0x51,0x51,0x51,0x51,0x51,0x51,0x51,0x50,0x51,0x51,0x52,0x52,0x53,0x53,0x53, + 0x53,0x53,0x52,0x52,0x53,0x53,0x52,0x52,0x53,0x53,0x53,0x53,0x53,0x53,0x53, + 0x53,0x54,0x54,0x54,0x53,0x54,0x54,0x53,0x53,0x53,0x53,0x54,0x54,0x54,0x55, + 0x54,0x54,0x54,0x55,0x56,0x56,0x56,0x56,0x56,0x56,0x57,0x57,0x57,0x55,0x53, + 0x52,0x5a,0x60,0x46,0x27,0x09,0x00,0x05,0x03,0x02,0x02,0x02,0x03,0x03,0x03, + 0x03,0x02,0x07,0x20,0x43,0x6a,0x64,0x51,0x56,0x59,0x59,0x59,0x59,0x59,0x58, + 0x58,0x58,0x59,0x59,0x5a,0x5a,0x59,0x59,0x59,0x59,0x5a,0x5a,0x5b,0x5b,0x5a, + 0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x59,0x59,0x59,0x59, + 0x59,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5b,0x5a,0x5a,0x5a,0x5b,0x5c,0x5d, + 0x5c,0x5a,0x59,0x59,0x5a,0x5b,0x5b,0x5b,0x5c,0x5c,0x5c,0x5b,0x5b,0x5b,0x5b, + 0x5b,0x5b,0x5b,0x5b,0x5b,0x5c,0x5c,0x5b,0x5b,0x5b,0x5c,0x5b,0x5b,0x5b,0x5c, + 0x5c,0x5c,0x5c,0x5c,0x5b,0x5c,0x5c,0x5d,0x5d,0x5d,0x5d,0x5d,0x5c,0x5c,0x5c, + 0x5c,0x5d,0x5e,0x5e,0x5d,0x5d,0x5e,0x5e,0x5e,0x5e,0x5e,0x5e,0x5d,0x5d,0x5e, + 0x5e,0x5d,0x5c,0x5c,0x5c,0x5c,0xc8,0x32,0x32,0x33,0x34,0x34,0x34,0x34,0x35, + 0x35,0x34,0x34,0x34,0x34,0x35,0x35,0x35,0x35,0x35,0x35,0x36,0x36,0x36,0x36, + 0x36,0x36,0x36,0x36,0x37,0x37,0x37,0x38,0x38,0x37,0x37,0x37,0x37,0x37,0x37, + 0x37,0x37,0x38,0x38,0x38,0x38,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x38, + 0x38,0x39,0x39,0x39,0x39,0x39,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3b,0x3a, + 0x3a,0x3a,0x3a,0x3b,0x3b,0x3b,0x3b,0x3b,0x3b,0x3b,0x3b,0x3b,0x3d,0x3d,0x3c, + 0x3b,0x3b,0x3c,0x3c,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d, + 0x3d,0x3d,0x3d,0x3d,0x3d,0x3e,0x3e,0x3e,0x3e,0x3e,0x3f,0x3f,0x3f,0x3f,0x3f, + 0x3f,0x3f,0x3f,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40, + 0x41,0x41,0x41,0x42,0x41,0x41,0x41,0x40,0x40,0x40,0x41,0x41,0x42,0x42,0x42, + 0x42,0x42,0x42,0x43,0x43,0x42,0x42,0x42,0x42,0x43,0x43,0x44,0x44,0x45,0x45, + 0x45,0x45,0x44,0x44,0x44,0x44,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45, + 0x45,0x45,0x45,0x45,0x46,0x46,0x46,0x46,0x45,0x45,0x45,0x46,0x46,0x46,0x46, + 0x46,0x46,0x47,0x48,0x48,0x48,0x48,0x47,0x48,0x48,0x48,0x47,0x46,0x47,0x47, + 0x46,0x46,0x47,0x48,0x48,0x48,0x48,0x48,0x49,0x49,0x49,0x49,0x49,0x49,0x49, + 0x48,0x48,0x48,0x49,0x49,0x49,0x4a,0x4a,0x4a,0x4a,0x49,0x49,0x49,0x4a,0x4b, + 0x4b,0x4b,0x4b,0x4b,0x4b,0x4b,0x4b,0x4b,0x4a,0x4a,0x4a,0x4b,0x4b,0x4b,0x4b, + 0x4b,0x4b,0x4c,0x4c,0x4c,0x4c,0x4c,0x4c,0x4c,0x4c,0x4c,0x4c,0x4c,0x4c,0x4d, + 0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4e,0x4e,0x4e,0x4e,0x4e,0x4e, + 0x4f,0x4f,0x4f,0x4f,0x4f,0x4e,0x4d,0x4d,0x4d,0x4e,0x4f,0x4f,0x50,0x50,0x50, + 0x50,0x50,0x50,0x50,0x50,0x51,0x51,0x52,0x52,0x51,0x51,0x50,0x51,0x51,0x51, + 0x51,0x51,0x51,0x51,0x51,0x51,0x51,0x51,0x51,0x51,0x52,0x52,0x53,0x53,0x53, + 0x53,0x53,0x53,0x53,0x53,0x53,0x53,0x53,0x53,0x53,0x53,0x54,0x54,0x53,0x53, + 0x53,0x53,0x54,0x55,0x55,0x55,0x54,0x54,0x54,0x54,0x55,0x56,0x56,0x55,0x55, + 0x55,0x55,0x55,0x55,0x56,0x57,0x57,0x57,0x57,0x57,0x57,0x57,0x57,0x57,0x57, + 0x56,0x55,0x53,0x5a,0x61,0x49,0x2b,0x0a,0x01,0x05,0x03,0x03,0x02,0x02,0x03, + 0x03,0x03,0x04,0x03,0x08,0x1a,0x3d,0x6b,0x65,0x51,0x55,0x59,0x5a,0x5b,0x5b, + 0x5a,0x59,0x59,0x59,0x59,0x5a,0x5a,0x5a,0x5a,0x59,0x59,0x59,0x5a,0x5a,0x5b, + 0x5b,0x5b,0x5b,0x5b,0x5b,0x5b,0x5b,0x5c,0x5c,0x5c,0x5c,0x5b,0x5b,0x5a,0x5a, + 0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5b,0x5c,0x5b,0x5c,0x5d,0x5b,0x5a,0x5a,0x5b, + 0x5d,0x5e,0x5d,0x5b,0x5a,0x5a,0x5b,0x5d,0x5d,0x5d,0x5d,0x5e,0x5d,0x5d,0x5c, + 0x5c,0x5c,0x5c,0x5c,0x5c,0x5c,0x5c,0x5d,0x5c,0x5c,0x5b,0x5c,0x5c,0x5c,0x5d, + 0x5d,0x5c,0x5c,0x5c,0x5c,0x5c,0x5c,0x5c,0x5d,0x5d,0x5d,0x5e,0x5e,0x5d,0x5d, + 0x5d,0x5d,0x5e,0x5e,0x5e,0x5e,0x5e,0x5e,0x5e,0x5e,0x5e,0x5e,0x5e,0x5e,0x5e, + 0x5d,0x5e,0x5e,0x5d,0x5d,0x5c,0x5c,0x5c,0xc8,0x33,0x33,0x33,0x34,0x35,0x35, + 0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36, + 0x36,0x36,0x36,0x37,0x37,0x37,0x38,0x38,0x38,0x38,0x38,0x38,0x38,0x38,0x38, + 0x38,0x38,0x38,0x38,0x38,0x38,0x38,0x38,0x39,0x3a,0x3a,0x3a,0x39,0x39,0x38, + 0x38,0x38,0x39,0x3a,0x39,0x39,0x39,0x39,0x3a,0x3a,0x3a,0x3a,0x3a,0x3b,0x3c, + 0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3b,0x3b,0x3b,0x3b,0x3b,0x3b,0x3b,0x3d, + 0x3d,0x3c,0x3c,0x3c,0x3c,0x3c,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d, + 0x3d,0x3e,0x3e,0x3e,0x3e,0x3e,0x3e,0x3e,0x3e,0x3e,0x3e,0x3f,0x3f,0x3f,0x40, + 0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41, + 0x41,0x41,0x41,0x42,0x43,0x43,0x43,0x43,0x42,0x41,0x41,0x41,0x41,0x42,0x43, + 0x43,0x43,0x42,0x41,0x41,0x42,0x42,0x43,0x43,0x43,0x43,0x44,0x44,0x44,0x44, + 0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x46,0x46,0x46, + 0x46,0x45,0x45,0x45,0x45,0x45,0x46,0x47,0x47,0x47,0x46,0x46,0x46,0x46,0x47, + 0x47,0x48,0x47,0x47,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x48, + 0x48,0x48,0x48,0x47,0x47,0x48,0x49,0x49,0x48,0x48,0x4a,0x4a,0x4a,0x4a,0x4a, + 0x4a,0x4a,0x4a,0x49,0x49,0x4a,0x4a,0x4a,0x4b,0x4b,0x4a,0x4a,0x4a,0x4a,0x4a, + 0x4a,0x4a,0x4b,0x4c,0x4c,0x4c,0x4c,0x4c,0x4c,0x4c,0x4c,0x4c,0x4c,0x4c,0x4c, + 0x4c,0x4c,0x4c,0x4c,0x4c,0x4d,0x4d,0x4d,0x4d,0x4d,0x4e,0x4e,0x4e,0x4e,0x4e, + 0x4e,0x4e,0x4e,0x4f,0x4e,0x4e,0x4e,0x4e,0x4f,0x4f,0x4f,0x4f,0x4f,0x4f,0x4f, + 0x50,0x50,0x50,0x50,0x50,0x50,0x50,0x4f,0x4f,0x4e,0x4f,0x50,0x50,0x50,0x50, + 0x50,0x51,0x51,0x50,0x50,0x50,0x51,0x51,0x51,0x51,0x51,0x51,0x51,0x51,0x52, + 0x53,0x53,0x53,0x53,0x53,0x53,0x53,0x53,0x53,0x53,0x53,0x52,0x53,0x53,0x53, + 0x53,0x53,0x53,0x53,0x53,0x53,0x53,0x53,0x53,0x53,0x54,0x54,0x55,0x56,0x55, + 0x54,0x53,0x53,0x54,0x55,0x56,0x57,0x56,0x56,0x54,0x54,0x56,0x56,0x57,0x57, + 0x56,0x56,0x56,0x56,0x56,0x57,0x57,0x57,0x57,0x57,0x57,0x57,0x57,0x57,0x58, + 0x58,0x58,0x57,0x57,0x54,0x5b,0x62,0x4d,0x2f,0x0a,0x00,0x04,0x03,0x03,0x02, + 0x02,0x02,0x03,0x03,0x03,0x02,0x04,0x0f,0x30,0x65,0x63,0x50,0x55,0x5a,0x5a, + 0x5a,0x5a,0x5a,0x59,0x59,0x59,0x59,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a, + 0x5a,0x5b,0x5b,0x5b,0x5b,0x5b,0x5c,0x5c,0x5c,0x5d,0x5d,0x5d,0x5d,0x5c,0x5c, + 0x5b,0x5b,0x5b,0x5b,0x5b,0x5b,0x5c,0x5c,0x5c,0x5d,0x5d,0x5d,0x5e,0x5c,0x5a, + 0x5a,0x5b,0x5d,0x5e,0x5e,0x5c,0x5b,0x5b,0x5d,0x5e,0x5e,0x5e,0x5e,0x5e,0x5e, + 0x5e,0x5e,0x5e,0x5e,0x5e,0x5e,0x5d,0x5d,0x5e,0x5e,0x5e,0x5d,0x5d,0x5d,0x5e, + 0x5e,0x5e,0x5e,0x5e,0x5e,0x5e,0x5d,0x5d,0x5d,0x5e,0x5e,0x5e,0x5e,0x5e,0x5e, + 0x5e,0x5e,0x5e,0x5e,0x5e,0x5e,0x5e,0x5e,0x5e,0x5e,0x5e,0x5e,0x5f,0x5f,0x5f, + 0x5f,0x5e,0x5e,0x5e,0x5e,0x5e,0x5d,0x5c,0x5c,0x5d,0xc8,0x33,0x34,0x34,0x35, + 0x35,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36, + 0x36,0x36,0x37,0x37,0x37,0x37,0x37,0x37,0x38,0x38,0x38,0x38,0x38,0x38,0x38, + 0x38,0x38,0x38,0x38,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x3a,0x3a,0x3a,0x3a, + 0x39,0x39,0x38,0x38,0x39,0x3a,0x3a,0x39,0x39,0x3a,0x3a,0x3a,0x3a,0x3a,0x3b, + 0x3b,0x3c,0x3c,0x3c,0x3d,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c, + 0x3c,0x3d,0x3d,0x3c,0x3c,0x3c,0x3c,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d, + 0x3d,0x3e,0x3e,0x3e,0x3f,0x3f,0x3e,0x3e,0x3e,0x3e,0x3e,0x3e,0x3f,0x3f,0x3f, + 0x40,0x40,0x41,0x41,0x41,0x41,0x40,0x40,0x40,0x41,0x41,0x41,0x41,0x41,0x41, + 0x41,0x41,0x41,0x42,0x42,0x43,0x44,0x44,0x44,0x44,0x43,0x43,0x42,0x42,0x43, + 0x43,0x43,0x43,0x43,0x42,0x42,0x42,0x42,0x42,0x43,0x44,0x44,0x44,0x44,0x44, + 0x44,0x44,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x46,0x46, + 0x47,0x46,0x47,0x46,0x45,0x45,0x45,0x46,0x47,0x47,0x48,0x47,0x47,0x46,0x47, + 0x47,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x49,0x48,0x48,0x48,0x48,0x48,0x48, + 0x48,0x48,0x49,0x49,0x48,0x48,0x48,0x49,0x4a,0x4a,0x49,0x49,0x4a,0x4b,0x4a, + 0x4a,0x4a,0x4a,0x4b,0x4a,0x4a,0x49,0x4a,0x4a,0x4b,0x4c,0x4c,0x4b,0x4b,0x4b, + 0x4a,0x4a,0x4b,0x4b,0x4c,0x4c,0x4c,0x4c,0x4c,0x4c,0x4c,0x4c,0x4c,0x4c,0x4c, + 0x4d,0x4d,0x4d,0x4c,0x4c,0x4c,0x4d,0x4d,0x4e,0x4e,0x4e,0x4e,0x4f,0x4f,0x4f, + 0x4f,0x4f,0x4f,0x4f,0x4f,0x4f,0x4f,0x4f,0x4f,0x4f,0x4f,0x4f,0x4f,0x50,0x50, + 0x50,0x50,0x50,0x50,0x50,0x50,0x50,0x51,0x51,0x50,0x50,0x50,0x50,0x51,0x52, + 0x51,0x51,0x50,0x51,0x51,0x51,0x51,0x51,0x51,0x51,0x51,0x51,0x51,0x51,0x51, + 0x52,0x53,0x53,0x53,0x53,0x53,0x53,0x53,0x53,0x53,0x53,0x53,0x53,0x53,0x54, + 0x54,0x54,0x54,0x54,0x54,0x54,0x53,0x53,0x53,0x53,0x54,0x54,0x54,0x54,0x56, + 0x57,0x56,0x55,0x54,0x54,0x55,0x56,0x57,0x57,0x57,0x56,0x55,0x55,0x56,0x57, + 0x57,0x57,0x57,0x56,0x56,0x56,0x57,0x57,0x58,0x58,0x57,0x57,0x57,0x57,0x57, + 0x57,0x58,0x59,0x59,0x59,0x57,0x56,0x5d,0x62,0x50,0x32,0x0c,0x00,0x03,0x03, + 0x03,0x03,0x02,0x02,0x02,0x03,0x04,0x03,0x03,0x07,0x28,0x62,0x64,0x53,0x58, + 0x5c,0x5c,0x5b,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a, + 0x5a,0x5b,0x5b,0x5b,0x5c,0x5c,0x5c,0x5c,0x5d,0x5c,0x5d,0x5d,0x5d,0x5e,0x5e, + 0x5d,0x5c,0x5c,0x5c,0x5b,0x5c,0x5c,0x5c,0x5d,0x5d,0x5d,0x5d,0x5d,0x5e,0x5e, + 0x5d,0x5b,0x5b,0x5c,0x5e,0x5e,0x5e,0x5e,0x5e,0x5e,0x5e,0x5e,0x5e,0x5e,0x5e, + 0x5f,0x5e,0x5e,0x5e,0x5e,0x5e,0x5e,0x5e,0x5e,0x5e,0x5e,0x5f,0x5f,0x5e,0x5e, + 0x5e,0x5e,0x5f,0x5f,0x5f,0x5f,0x5f,0x5f,0x5e,0x5e,0x5e,0x5e,0x5e,0x5e,0x5e, + 0x5f,0x5f,0x5f,0x5f,0x5f,0x5f,0x5f,0x5f,0x5f,0x5f,0x5f,0x5f,0x5f,0x5f,0x60, + 0x60,0x60,0x60,0x5f,0x5f,0x60,0x61,0x61,0x60,0x5f,0x5f,0x5e,0xc8,0x34,0x34, + 0x35,0x35,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36, + 0x36,0x36,0x36,0x37,0x37,0x38,0x38,0x38,0x38,0x38,0x38,0x38,0x39,0x39,0x39, + 0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a, + 0x3a,0x3a,0x3a,0x39,0x39,0x39,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3b,0x3b,0x3b, + 0x3b,0x3b,0x3b,0x3c,0x3c,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d, + 0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3e,0x3e, + 0x3e,0x3e,0x3e,0x3f,0x3f,0x3f,0x40,0x40,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f, + 0x3f,0x40,0x40,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41, + 0x41,0x41,0x41,0x41,0x41,0x42,0x43,0x43,0x44,0x44,0x44,0x44,0x44,0x44,0x44, + 0x44,0x44,0x44,0x44,0x43,0x43,0x43,0x43,0x43,0x42,0x42,0x44,0x45,0x45,0x45, + 0x45,0x44,0x44,0x44,0x45,0x45,0x46,0x46,0x45,0x45,0x45,0x45,0x45,0x46,0x46, + 0x46,0x47,0x47,0x47,0x47,0x47,0x46,0x46,0x46,0x47,0x47,0x48,0x48,0x48,0x47, + 0x47,0x48,0x48,0x48,0x49,0x49,0x49,0x49,0x49,0x49,0x49,0x49,0x48,0x48,0x48, + 0x48,0x49,0x48,0x48,0x4a,0x4a,0x49,0x48,0x48,0x4a,0x4b,0x4b,0x4a,0x4a,0x4b, + 0x4b,0x4b,0x4b,0x4b,0x4b,0x4b,0x4b,0x4a,0x4a,0x4a,0x4a,0x4b,0x4c,0x4c,0x4c, + 0x4c,0x4c,0x4b,0x4b,0x4c,0x4c,0x4c,0x4c,0x4c,0x4c,0x4c,0x4c,0x4c,0x4c,0x4c, + 0x4d,0x4d,0x4e,0x4e,0x4d,0x4c,0x4c,0x4d,0x4d,0x4e,0x4e,0x4e,0x4f,0x4f,0x50, + 0x50,0x50,0x50,0x50,0x50,0x50,0x50,0x50,0x50,0x50,0x50,0x50,0x50,0x50,0x50, + 0x50,0x50,0x50,0x50,0x50,0x50,0x50,0x50,0x51,0x52,0x52,0x52,0x51,0x51,0x51, + 0x53,0x53,0x53,0x52,0x51,0x51,0x51,0x52,0x53,0x53,0x52,0x52,0x52,0x52,0x52, + 0x52,0x52,0x53,0x53,0x54,0x54,0x54,0x54,0x54,0x54,0x54,0x54,0x55,0x55,0x55, + 0x56,0x56,0x55,0x55,0x55,0x55,0x55,0x55,0x54,0x54,0x54,0x54,0x55,0x55,0x55, + 0x55,0x56,0x57,0x57,0x57,0x56,0x56,0x56,0x57,0x57,0x58,0x57,0x57,0x56,0x56, + 0x57,0x57,0x57,0x57,0x57,0x57,0x57,0x57,0x57,0x57,0x58,0x58,0x58,0x58,0x58, + 0x57,0x57,0x57,0x59,0x5a,0x5a,0x5a,0x58,0x57,0x5e,0x63,0x53,0x35,0x0d,0x00, + 0x03,0x03,0x03,0x03,0x02,0x01,0x02,0x03,0x06,0x04,0x03,0x03,0x23,0x62,0x66, + 0x57,0x5b,0x5e,0x5e,0x5d,0x5b,0x5a,0x5a,0x5a,0x5a,0x5a,0x5b,0x5b,0x5b,0x5b, + 0x5b,0x5b,0x5b,0x5c,0x5c,0x5c,0x5d,0x5d,0x5d,0x5e,0x5e,0x5d,0x5d,0x5d,0x5e, + 0x5e,0x5e,0x5e,0x5d,0x5d,0x5d,0x5c,0x5c,0x5d,0x5d,0x5d,0x5e,0x5e,0x5e,0x5e, + 0x5e,0x5e,0x5e,0x5e,0x5d,0x5d,0x5e,0x5e,0x5e,0x5f,0x5f,0x5f,0x5f,0x5e,0x5e, + 0x5e,0x5f,0x5f,0x5f,0x5f,0x5f,0x5e,0x5e,0x5f,0x5f,0x5f,0x5e,0x5f,0x60,0x60, + 0x60,0x5f,0x5f,0x60,0x61,0x61,0x61,0x61,0x61,0x61,0x60,0x5f,0x5f,0x5f,0x5f, + 0x5f,0x5f,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60, + 0x60,0x61,0x61,0x61,0x61,0x60,0x60,0x62,0x62,0x63,0x63,0x63,0x62,0x62,0xc8, + 0x34,0x34,0x35,0x35,0x36,0x36,0x36,0x36,0x36,0x35,0x36,0x36,0x36,0x36,0x36, + 0x36,0x36,0x36,0x36,0x37,0x37,0x38,0x38,0x38,0x39,0x39,0x39,0x39,0x39,0x39, + 0x39,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3b,0x3b,0x3b,0x3a,0x3a, + 0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3b,0x3c, + 0x3c,0x3c,0x3c,0x3b,0x3b,0x3c,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d, + 0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3e,0x3e,0x3e, + 0x3e,0x3f,0x3f,0x3f,0x3f,0x3f,0x40,0x40,0x41,0x41,0x40,0x40,0x40,0x40,0x3f, + 0x3f,0x3f,0x3f,0x3f,0x40,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41, + 0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x42,0x43,0x43,0x44,0x45,0x45,0x43,0x43, + 0x44,0x45,0x45,0x45,0x45,0x44,0x44,0x44,0x44,0x44,0x44,0x43,0x43,0x44,0x45, + 0x45,0x46,0x45,0x45,0x44,0x44,0x45,0x45,0x46,0x46,0x45,0x45,0x46,0x46,0x46, + 0x46,0x46,0x47,0x47,0x47,0x48,0x48,0x47,0x47,0x46,0x47,0x47,0x48,0x48,0x48, + 0x48,0x48,0x48,0x48,0x48,0x48,0x49,0x49,0x49,0x49,0x49,0x49,0x49,0x49,0x48, + 0x48,0x48,0x49,0x4a,0x49,0x4a,0x4b,0x4a,0x4a,0x49,0x49,0x4a,0x4b,0x4c,0x4b, + 0x4b,0x4b,0x4c,0x4c,0x4c,0x4c,0x4c,0x4b,0x4b,0x4b,0x4b,0x4b,0x4b,0x4c,0x4c, + 0x4d,0x4c,0x4c,0x4c,0x4c,0x4c,0x4c,0x4c,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d, + 0x4d,0x4d,0x4e,0x4f,0x4f,0x4e,0x4e,0x4d,0x4c,0x4d,0x4e,0x4f,0x4e,0x4e,0x4f, + 0x4f,0x50,0x50,0x50,0x50,0x50,0x50,0x50,0x50,0x50,0x50,0x50,0x50,0x50,0x50, + 0x50,0x50,0x51,0x51,0x51,0x51,0x51,0x51,0x50,0x50,0x50,0x52,0x52,0x52,0x52, + 0x52,0x52,0x53,0x53,0x53,0x52,0x51,0x51,0x52,0x53,0x53,0x53,0x53,0x53,0x53, + 0x52,0x53,0x53,0x53,0x53,0x54,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x56,0x56, + 0x57,0x57,0x57,0x57,0x57,0x56,0x56,0x56,0x56,0x56,0x55,0x55,0x55,0x56,0x56, + 0x56,0x56,0x55,0x56,0x57,0x57,0x57,0x57,0x57,0x57,0x58,0x59,0x59,0x58,0x57, + 0x57,0x58,0x59,0x59,0x59,0x59,0x58,0x57,0x57,0x57,0x57,0x58,0x59,0x59,0x58, + 0x59,0x58,0x58,0x57,0x58,0x59,0x59,0x5a,0x5a,0x58,0x57,0x5e,0x63,0x54,0x36, + 0x0e,0x00,0x02,0x03,0x03,0x03,0x02,0x01,0x02,0x03,0x03,0x03,0x05,0x04,0x24, + 0x65,0x69,0x57,0x58,0x5a,0x5b,0x5b,0x5b,0x5c,0x5c,0x5c,0x5c,0x5c,0x5d,0x5d, + 0x5d,0x5d,0x5c,0x5c,0x5d,0x5d,0x5e,0x5e,0x5e,0x5e,0x5e,0x5e,0x5e,0x5e,0x5e, + 0x5e,0x5e,0x5e,0x5e,0x5e,0x5d,0x5d,0x5d,0x5d,0x5d,0x5e,0x5e,0x5e,0x5e,0x5e, + 0x5e,0x5e,0x5e,0x5e,0x5f,0x60,0x5f,0x5e,0x5d,0x5d,0x5e,0x60,0x61,0x61,0x5e, + 0x5c,0x5e,0x5f,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x61,0x60,0x60,0x60, + 0x60,0x60,0x60,0x5f,0x5f,0x60,0x61,0x62,0x62,0x62,0x62,0x62,0x61,0x60,0x60, + 0x60,0x60,0x60,0x60,0x60,0x61,0x61,0x61,0x61,0x61,0x61,0x61,0x61,0x61,0x61, + 0x61,0x61,0x61,0x62,0x62,0x62,0x62,0x62,0x61,0x60,0x61,0x62,0x63,0x64,0x64, + 0x63,0xc8,0x34,0x34,0x35,0x35,0x36,0x36,0x36,0x36,0x35,0x35,0x35,0x36,0x36, + 0x36,0x36,0x36,0x36,0x36,0x36,0x37,0x38,0x38,0x38,0x38,0x39,0x39,0x39,0x39, + 0x39,0x39,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3b,0x3c,0x3b, + 0x3b,0x3b,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3b, + 0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3b,0x3c,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d, + 0x3e,0x3e,0x3e,0x3e,0x3e,0x3e,0x3e,0x3d,0x3d,0x3d,0x3e,0x3e,0x3e,0x3e,0x3e, + 0x3e,0x3e,0x3f,0x3f,0x40,0x3f,0x3f,0x40,0x41,0x41,0x41,0x41,0x41,0x41,0x40, + 0x40,0x40,0x3f,0x3f,0x40,0x40,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41, + 0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x42,0x42,0x43,0x43,0x44,0x45,0x45, + 0x44,0x43,0x44,0x45,0x45,0x45,0x45,0x44,0x44,0x44,0x44,0x45,0x45,0x44,0x44, + 0x44,0x45,0x46,0x46,0x46,0x45,0x45,0x45,0x45,0x46,0x46,0x46,0x45,0x46,0x46, + 0x46,0x46,0x46,0x47,0x47,0x47,0x47,0x48,0x48,0x48,0x47,0x47,0x47,0x48,0x48, + 0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x49,0x49,0x49,0x49,0x49,0x49,0x49, + 0x49,0x48,0x48,0x49,0x49,0x4a,0x4a,0x4a,0x4b,0x4b,0x4a,0x4a,0x4a,0x4b,0x4b, + 0x4c,0x4b,0x4b,0x4c,0x4c,0x4c,0x4c,0x4c,0x4c,0x4c,0x4b,0x4b,0x4b,0x4b,0x4c, + 0x4c,0x4d,0x4d,0x4c,0x4c,0x4c,0x4c,0x4c,0x4c,0x4d,0x4e,0x4e,0x4f,0x4e,0x4e, + 0x4e,0x4d,0x4d,0x4e,0x4e,0x4f,0x4f,0x4f,0x4e,0x4e,0x4d,0x4d,0x4e,0x4f,0x4f, + 0x4e,0x4f,0x50,0x50,0x50,0x50,0x50,0x50,0x50,0x50,0x50,0x50,0x50,0x50,0x50, + 0x50,0x50,0x51,0x51,0x51,0x51,0x51,0x51,0x51,0x51,0x51,0x50,0x50,0x51,0x52, + 0x52,0x52,0x52,0x52,0x53,0x53,0x53,0x53,0x52,0x52,0x53,0x53,0x54,0x54,0x54, + 0x53,0x53,0x53,0x53,0x53,0x54,0x54,0x55,0x55,0x55,0x55,0x55,0x56,0x56,0x56, + 0x57,0x57,0x57,0x57,0x58,0x57,0x57,0x57,0x57,0x57,0x57,0x57,0x57,0x56,0x56, + 0x57,0x57,0x57,0x57,0x56,0x57,0x58,0x58,0x58,0x57,0x57,0x58,0x59,0x5a,0x59, + 0x58,0x57,0x59,0x5a,0x5a,0x5a,0x5a,0x59,0x59,0x58,0x58,0x58,0x58,0x59,0x59, + 0x5a,0x5a,0x59,0x59,0x58,0x58,0x58,0x59,0x5a,0x5a,0x5a,0x59,0x57,0x5d,0x62, + 0x57,0x3c,0x0e,0x00,0x01,0x02,0x03,0x03,0x02,0x01,0x03,0x03,0x01,0x02,0x04, + 0x04,0x24,0x66,0x6a,0x58,0x58,0x59,0x59,0x5a,0x5c,0x5d,0x5d,0x5d,0x5d,0x5d, + 0x5e,0x5e,0x5e,0x5e,0x5d,0x5d,0x5d,0x5e,0x5e,0x5f,0x5f,0x5f,0x5f,0x5f,0x5f, + 0x5f,0x5e,0x5e,0x5e,0x5e,0x5e,0x5e,0x5e,0x5e,0x5e,0x5e,0x5e,0x5f,0x5f,0x5f, + 0x5f,0x5f,0x5f,0x5f,0x5f,0x5f,0x60,0x61,0x61,0x5f,0x5e,0x5e,0x5f,0x61,0x62, + 0x62,0x5f,0x5d,0x5e,0x60,0x61,0x61,0x61,0x61,0x61,0x61,0x61,0x61,0x61,0x61, + 0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x61,0x62,0x62,0x62,0x62,0x62,0x62,0x62, + 0x61,0x61,0x61,0x61,0x61,0x61,0x61,0x61,0x61,0x61,0x61,0x61,0x61,0x61,0x61, + 0x61,0x61,0x61,0x61,0x62,0x62,0x62,0x62,0x62,0x62,0x62,0x60,0x5f,0x61,0x62, + 0x64,0x64,0x63,0xc8,0x34,0x34,0x35,0x35,0x36,0x36,0x36,0x35,0x35,0x34,0x35, + 0x36,0x36,0x37,0x37,0x37,0x37,0x37,0x37,0x38,0x38,0x38,0x38,0x38,0x39,0x3a, + 0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x39,0x39,0x39,0x39,0x39,0x3a,0x3a,0x3a,0x3a, + 0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3b,0x3b,0x3b,0x3b,0x3a,0x3a,0x3a, + 0x3a,0x3b,0x3b,0x3c,0x3d,0x3d,0x3d,0x3d,0x3d,0x3c,0x3c,0x3d,0x3d,0x3d,0x3d, + 0x3d,0x3e,0x3e,0x3e,0x3d,0x3d,0x3d,0x3d,0x3d,0x3e,0x3e,0x3e,0x3e,0x3f,0x3f, + 0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x40,0x41,0x41,0x41,0x41,0x41,0x41, + 0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41, + 0x41,0x41,0x41,0x41,0x43,0x43,0x43,0x42,0x42,0x42,0x42,0x43,0x43,0x43,0x44, + 0x44,0x44,0x45,0x45,0x45,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x45,0x45,0x45, + 0x46,0x46,0x43,0x44,0x47,0x47,0x46,0x45,0x45,0x46,0x46,0x46,0x47,0x46,0x46, + 0x46,0x46,0x46,0x46,0x46,0x47,0x47,0x47,0x47,0x48,0x48,0x48,0x48,0x48,0x48, + 0x48,0x48,0x49,0x49,0x49,0x49,0x49,0x49,0x49,0x49,0x4a,0x4b,0x4a,0x4a,0x4a, + 0x4a,0x49,0x49,0x49,0x49,0x49,0x49,0x49,0x49,0x49,0x4b,0x4b,0x4c,0x4c,0x4b, + 0x4b,0x4b,0x4b,0x4b,0x4c,0x4c,0x4c,0x4c,0x4c,0x4c,0x4e,0x4d,0x4c,0x4c,0x4c, + 0x4c,0x4c,0x4c,0x4d,0x4d,0x4d,0x4d,0x4e,0x4e,0x4e,0x4e,0x4e,0x4f,0x50,0x50, + 0x50,0x4f,0x4f,0x4e,0x4d,0x4d,0x4d,0x4e,0x4f,0x50,0x50,0x50,0x4f,0x4f,0x4f, + 0x50,0x50,0x50,0x50,0x50,0x51,0x50,0x50,0x50,0x50,0x50,0x50,0x50,0x50,0x50, + 0x50,0x51,0x51,0x51,0x51,0x51,0x52,0x52,0x52,0x52,0x52,0x52,0x51,0x50,0x50, + 0x51,0x52,0x52,0x51,0x51,0x51,0x52,0x53,0x53,0x53,0x53,0x53,0x54,0x54,0x54, + 0x54,0x54,0x54,0x54,0x54,0x55,0x55,0x54,0x54,0x56,0x57,0x57,0x56,0x56,0x56, + 0x57,0x57,0x57,0x57,0x57,0x57,0x57,0x57,0x55,0x56,0x57,0x57,0x58,0x59,0x58, + 0x57,0x57,0x57,0x57,0x57,0x57,0x58,0x59,0x59,0x58,0x58,0x58,0x58,0x59,0x5a, + 0x5a,0x59,0x57,0x57,0x59,0x5a,0x59,0x59,0x58,0x58,0x58,0x59,0x59,0x59,0x59, + 0x5a,0x5a,0x5a,0x5a,0x5a,0x59,0x59,0x59,0x59,0x59,0x5a,0x5a,0x5a,0x59,0x58, + 0x5b,0x5e,0x5d,0x45,0x11,0x00,0x00,0x01,0x02,0x01,0x02,0x03,0x03,0x03,0x04, + 0x02,0x01,0x02,0x23,0x64,0x6b,0x5e,0x5e,0x5d,0x58,0x5a,0x5d,0x5c,0x5b,0x5c, + 0x5c,0x5d,0x5e,0x5e,0x5e,0x5e,0x5e,0x5e,0x5e,0x5e,0x5e,0x5f,0x5e,0x5e,0x5f, + 0x5f,0x5f,0x60,0x60,0x60,0x60,0x5f,0x5f,0x5f,0x60,0x60,0x60,0x60,0x61,0x62, + 0x61,0x61,0x61,0x61,0x61,0x61,0x62,0x62,0x61,0x60,0x5f,0x5f,0x5f,0x60,0x61, + 0x61,0x62,0x62,0x62,0x62,0x61,0x61,0x62,0x62,0x62,0x61,0x61,0x61,0x61,0x61, + 0x60,0x5f,0x5e,0x5e,0x5f,0x5f,0x60,0x62,0x62,0x62,0x62,0x62,0x62,0x62,0x62, + 0x62,0x62,0x62,0x62,0x62,0x62,0x62,0x62,0x62,0x62,0x62,0x62,0x62,0x62,0x62, + 0x62,0x62,0x62,0x62,0x62,0x62,0x62,0x62,0x62,0x62,0x62,0x62,0x62,0x62,0x61, + 0x62,0x62,0x62,0x62,0x62,0xc8,0x34,0x34,0x35,0x36,0x36,0x36,0x36,0x36,0x35, + 0x34,0x35,0x36,0x37,0x38,0x37,0x37,0x37,0x37,0x37,0x38,0x38,0x38,0x38,0x38, + 0x39,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a, + 0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3b,0x3b,0x3b,0x3b,0x3b,0x3b, + 0x3b,0x3b,0x3b,0x3b,0x3c,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3c,0x3d,0x3e,0x3e, + 0x3e,0x3e,0x3e,0x3f,0x3f,0x3f,0x3e,0x3e,0x3e,0x3e,0x3e,0x3f,0x3f,0x3f,0x3f, + 0x40,0x3f,0x3f,0x3f,0x40,0x40,0x40,0x40,0x40,0x40,0x41,0x41,0x41,0x41,0x41, + 0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x42,0x42,0x42,0x41,0x41,0x41,0x41, + 0x41,0x42,0x42,0x42,0x42,0x42,0x43,0x43,0x43,0x43,0x42,0x42,0x43,0x43,0x43, + 0x44,0x44,0x44,0x44,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45, + 0x45,0x45,0x47,0x46,0x42,0x44,0x47,0x47,0x46,0x45,0x46,0x48,0x47,0x46,0x47, + 0x47,0x46,0x46,0x46,0x46,0x46,0x46,0x47,0x47,0x47,0x48,0x48,0x48,0x48,0x49, + 0x48,0x48,0x48,0x49,0x49,0x49,0x49,0x4a,0x4a,0x4a,0x49,0x4a,0x4b,0x4b,0x4b, + 0x4b,0x4b,0x4b,0x4a,0x4a,0x4a,0x4a,0x4a,0x4a,0x4a,0x4a,0x4a,0x4b,0x4c,0x4c, + 0x4c,0x4c,0x4c,0x4c,0x4c,0x4c,0x4c,0x4d,0x4c,0x4c,0x4c,0x4d,0x4e,0x4e,0x4e, + 0x4d,0x4d,0x4c,0x4c,0x4d,0x4d,0x4e,0x4e,0x4e,0x4f,0x4f,0x4f,0x4f,0x4f,0x4f, + 0x50,0x50,0x50,0x50,0x50,0x50,0x4f,0x4e,0x4e,0x4f,0x50,0x50,0x50,0x50,0x50, + 0x50,0x50,0x50,0x50,0x50,0x50,0x51,0x51,0x51,0x50,0x50,0x50,0x50,0x50,0x50, + 0x50,0x50,0x50,0x51,0x51,0x51,0x51,0x51,0x52,0x52,0x52,0x52,0x52,0x52,0x52, + 0x51,0x52,0x52,0x53,0x53,0x52,0x52,0x52,0x53,0x53,0x53,0x53,0x54,0x54,0x55, + 0x55,0x55,0x55,0x55,0x55,0x55,0x56,0x56,0x56,0x55,0x55,0x56,0x57,0x57,0x57, + 0x56,0x56,0x57,0x57,0x57,0x57,0x57,0x57,0x57,0x57,0x56,0x57,0x57,0x58,0x59, + 0x59,0x59,0x59,0x58,0x58,0x58,0x58,0x58,0x59,0x59,0x59,0x58,0x58,0x58,0x58, + 0x59,0x5a,0x5a,0x5a,0x58,0x58,0x5a,0x5a,0x59,0x59,0x58,0x59,0x59,0x5a,0x5a, + 0x5a,0x5a,0x5a,0x5a,0x5c,0x5c,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5b,0x5b,0x5b, + 0x5a,0x5a,0x5b,0x5e,0x62,0x4c,0x13,0x00,0x01,0x02,0x03,0x01,0x02,0x03,0x03, + 0x03,0x03,0x02,0x01,0x00,0x20,0x63,0x6a,0x5c,0x5e,0x5e,0x5b,0x5c,0x5e,0x5c, + 0x5c,0x5d,0x5d,0x5e,0x5e,0x5e,0x5e,0x5e,0x5e,0x5e,0x5e,0x5e,0x5e,0x5e,0x5e, + 0x5e,0x5f,0x5f,0x5f,0x60,0x60,0x60,0x61,0x61,0x60,0x61,0x62,0x61,0x61,0x61, + 0x61,0x62,0x61,0x61,0x61,0x61,0x62,0x62,0x62,0x62,0x62,0x61,0x60,0x61,0x62, + 0x62,0x62,0x62,0x62,0x63,0x64,0x64,0x62,0x62,0x62,0x62,0x62,0x62,0x62,0x62, + 0x62,0x62,0x62,0x61,0x60,0x61,0x61,0x61,0x61,0x61,0x61,0x62,0x62,0x62,0x63, + 0x63,0x63,0x63,0x63,0x63,0x63,0x63,0x63,0x63,0x62,0x62,0x62,0x62,0x62,0x62, + 0x62,0x62,0x62,0x62,0x63,0x63,0x63,0x62,0x62,0x62,0x62,0x62,0x62,0x62,0x62, + 0x62,0x62,0x62,0x62,0x63,0x63,0x62,0xc8,0x35,0x35,0x36,0x36,0x36,0x36,0x36, + 0x36,0x36,0x35,0x36,0x36,0x38,0x38,0x37,0x36,0x36,0x37,0x37,0x38,0x38,0x38, + 0x38,0x39,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a, + 0x3b,0x3c,0x3c,0x3b,0x3b,0x3b,0x3b,0x3b,0x3b,0x3b,0x3b,0x3b,0x3b,0x3b,0x3b, + 0x3c,0x3d,0x3d,0x3c,0x3c,0x3c,0x3d,0x3d,0x3d,0x3d,0x3d,0x3c,0x3c,0x3c,0x3d, + 0x3f,0x3f,0x3f,0x3f,0x3f,0x40,0x40,0x40,0x3f,0x3f,0x3f,0x3f,0x3f,0x40,0x40, + 0x40,0x40,0x40,0x40,0x40,0x40,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41, + 0x41,0x41,0x41,0x41,0x41,0x41,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42, + 0x42,0x42,0x42,0x43,0x43,0x43,0x43,0x43,0x43,0x43,0x43,0x43,0x43,0x43,0x43, + 0x43,0x44,0x44,0x44,0x44,0x44,0x45,0x46,0x46,0x45,0x45,0x45,0x45,0x45,0x45, + 0x45,0x46,0x46,0x46,0x46,0x45,0x43,0x45,0x47,0x47,0x46,0x45,0x46,0x48,0x47, + 0x46,0x48,0x47,0x46,0x47,0x47,0x47,0x47,0x47,0x48,0x48,0x48,0x48,0x48,0x48, + 0x48,0x49,0x49,0x48,0x49,0x49,0x4a,0x4a,0x4a,0x4a,0x4a,0x4a,0x4a,0x4a,0x4c, + 0x4c,0x4c,0x4c,0x4c,0x4b,0x4b,0x4b,0x4b,0x4b,0x4b,0x4b,0x4b,0x4c,0x4c,0x4c, + 0x4c,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4e,0x4d,0x4c,0x4c,0x4d,0x4e, + 0x4f,0x4f,0x4e,0x4e,0x4d,0x4d,0x4e,0x4e,0x4e,0x4f,0x50,0x50,0x50,0x50,0x4f, + 0x4f,0x4f,0x50,0x50,0x50,0x51,0x51,0x50,0x50,0x50,0x50,0x50,0x51,0x51,0x51, + 0x50,0x50,0x50,0x50,0x51,0x50,0x50,0x51,0x52,0x52,0x51,0x51,0x51,0x51,0x50, + 0x51,0x51,0x51,0x51,0x51,0x51,0x51,0x52,0x52,0x52,0x53,0x53,0x53,0x53,0x53, + 0x53,0x53,0x53,0x53,0x53,0x54,0x54,0x53,0x53,0x53,0x54,0x54,0x54,0x54,0x54, + 0x55,0x55,0x56,0x56,0x56,0x56,0x56,0x57,0x57,0x57,0x57,0x57,0x56,0x57,0x57, + 0x57,0x57,0x56,0x56,0x56,0x57,0x57,0x57,0x57,0x57,0x57,0x57,0x58,0x58,0x58, + 0x59,0x59,0x59,0x59,0x59,0x59,0x59,0x59,0x59,0x59,0x58,0x58,0x59,0x59,0x59, + 0x58,0x58,0x59,0x5a,0x5a,0x5a,0x5a,0x5a,0x5c,0x5b,0x5a,0x59,0x59,0x5a,0x5a, + 0x5a,0x5b,0x5b,0x5b,0x5b,0x5b,0x5c,0x5d,0x5c,0x5b,0x5a,0x5b,0x5b,0x5c,0x5c, + 0x5c,0x5c,0x5c,0x5b,0x5c,0x5e,0x65,0x52,0x16,0x01,0x03,0x03,0x03,0x00,0x02, + 0x04,0x03,0x01,0x00,0x02,0x04,0x00,0x1c,0x63,0x69,0x5a,0x5c,0x5e,0x60,0x60, + 0x5f,0x5e,0x5d,0x5e,0x5e,0x5e,0x5e,0x5e,0x5e,0x5e,0x5e,0x5e,0x5e,0x5e,0x5e, + 0x5e,0x5f,0x5f,0x5f,0x60,0x60,0x60,0x60,0x60,0x61,0x61,0x61,0x61,0x62,0x62, + 0x61,0x60,0x60,0x61,0x61,0x61,0x61,0x61,0x62,0x62,0x62,0x62,0x62,0x62,0x62, + 0x62,0x63,0x63,0x63,0x63,0x63,0x64,0x65,0x65,0x63,0x62,0x62,0x62,0x62,0x62, + 0x62,0x63,0x63,0x63,0x63,0x63,0x62,0x63,0x64,0x63,0x62,0x60,0x60,0x61,0x62, + 0x64,0x65,0x65,0x65,0x64,0x64,0x64,0x64,0x64,0x64,0x64,0x63,0x62,0x62,0x62, + 0x62,0x63,0x64,0x64,0x63,0x63,0x64,0x64,0x64,0x63,0x62,0x62,0x63,0x63,0x63, + 0x63,0x63,0x64,0x64,0x64,0x64,0x64,0x64,0x64,0xc8,0x36,0x36,0x36,0x36,0x37, + 0x37,0x37,0x36,0x36,0x36,0x36,0x37,0x38,0x38,0x37,0x36,0x36,0x36,0x37,0x38, + 0x38,0x39,0x38,0x39,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a, + 0x3a,0x3a,0x3b,0x3c,0x3c,0x3b,0x3b,0x3b,0x3b,0x3b,0x3b,0x3b,0x3b,0x3b,0x3b, + 0x3b,0x3b,0x3c,0x3c,0x3c,0x3b,0x3b,0x3c,0x3c,0x3c,0x3d,0x3d,0x3d,0x3d,0x3d, + 0x3c,0x3d,0x3f,0x3f,0x3f,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x3f,0x3f,0x3f, + 0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41, + 0x41,0x41,0x41,0x41,0x41,0x42,0x42,0x42,0x43,0x43,0x43,0x43,0x42,0x42,0x42, + 0x42,0x42,0x42,0x42,0x43,0x43,0x43,0x44,0x44,0x43,0x43,0x43,0x43,0x43,0x44, + 0x44,0x44,0x44,0x44,0x45,0x44,0x45,0x45,0x46,0x46,0x46,0x46,0x46,0x46,0x46, + 0x46,0x46,0x46,0x46,0x46,0x46,0x46,0x46,0x45,0x45,0x46,0x46,0x45,0x45,0x47, + 0x47,0x45,0x45,0x47,0x47,0x47,0x47,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x48, + 0x49,0x49,0x49,0x4a,0x49,0x49,0x49,0x49,0x4a,0x4a,0x4b,0x4a,0x4a,0x4a,0x4a, + 0x4b,0x4c,0x4c,0x4c,0x4c,0x4c,0x4c,0x4c,0x4c,0x4c,0x4c,0x4c,0x4c,0x4c,0x4c, + 0x4c,0x4d,0x4d,0x4e,0x4e,0x4e,0x4d,0x4d,0x4e,0x4e,0x4e,0x4f,0x4e,0x4c,0x4d, + 0x4e,0x4e,0x4e,0x4f,0x4f,0x4f,0x4e,0x4e,0x4e,0x4e,0x4e,0x4f,0x50,0x50,0x50, + 0x50,0x4f,0x4e,0x4e,0x4f,0x50,0x50,0x51,0x52,0x51,0x50,0x50,0x50,0x50,0x50, + 0x50,0x50,0x50,0x50,0x51,0x51,0x52,0x52,0x52,0x52,0x52,0x53,0x52,0x52,0x52, + 0x51,0x51,0x52,0x52,0x52,0x52,0x52,0x51,0x52,0x52,0x53,0x53,0x53,0x53,0x53, + 0x53,0x53,0x53,0x53,0x53,0x53,0x54,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55, + 0x55,0x55,0x55,0x55,0x56,0x56,0x57,0x57,0x57,0x57,0x57,0x58,0x57,0x57,0x56, + 0x56,0x57,0x57,0x57,0x57,0x57,0x57,0x57,0x57,0x57,0x57,0x57,0x57,0x57,0x58, + 0x57,0x57,0x58,0x57,0x57,0x57,0x58,0x57,0x58,0x58,0x59,0x59,0x58,0x59,0x5a, + 0x5a,0x5a,0x59,0x59,0x59,0x59,0x5a,0x5b,0x5b,0x5b,0x5d,0x5c,0x5a,0x59,0x59, + 0x59,0x5a,0x5c,0x5d,0x5d,0x5c,0x5c,0x5c,0x5c,0x5c,0x5c,0x5b,0x5b,0x5b,0x5c, + 0x5c,0x5d,0x5d,0x5d,0x5d,0x5d,0x5d,0x5e,0x6a,0x58,0x1b,0x03,0x03,0x04,0x04, + 0x00,0x03,0x06,0x03,0x00,0x01,0x03,0x07,0x00,0x1c,0x64,0x6d,0x5e,0x5c,0x5e, + 0x61,0x62,0x62,0x5f,0x5e,0x5e,0x5f,0x5f,0x5f,0x5f,0x5f,0x5f,0x5f,0x5f,0x5f, + 0x5f,0x5f,0x60,0x60,0x60,0x61,0x61,0x61,0x61,0x60,0x60,0x60,0x60,0x61,0x62, + 0x62,0x62,0x62,0x62,0x62,0x63,0x63,0x63,0x63,0x62,0x62,0x62,0x62,0x62,0x62, + 0x62,0x63,0x64,0x64,0x64,0x64,0x63,0x63,0x63,0x64,0x65,0x63,0x62,0x62,0x62, + 0x63,0x63,0x64,0x64,0x64,0x64,0x64,0x64,0x64,0x64,0x64,0x63,0x62,0x62,0x62, + 0x62,0x62,0x63,0x64,0x65,0x65,0x65,0x65,0x63,0x64,0x65,0x65,0x65,0x65,0x65, + 0x64,0x63,0x63,0x64,0x64,0x64,0x65,0x65,0x65,0x65,0x65,0x65,0x64,0x64,0x65, + 0x65,0x65,0x64,0x64,0x64,0x65,0x65,0x65,0x65,0x65,0x65,0xc8,0x37,0x36,0x36, + 0x36,0x37,0x37,0x37,0x36,0x36,0x36,0x36,0x38,0x39,0x39,0x37,0x36,0x36,0x36, + 0x37,0x38,0x39,0x39,0x39,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a, + 0x3a,0x3a,0x3a,0x3a,0x3b,0x3c,0x3c,0x3b,0x3b,0x3b,0x3b,0x3b,0x3b,0x3b,0x3b, + 0x3b,0x3b,0x3b,0x3b,0x3c,0x3c,0x3b,0x3b,0x3b,0x3c,0x3c,0x3c,0x3d,0x3d,0x3d, + 0x3d,0x3d,0x3d,0x3d,0x3f,0x3f,0x3f,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x3f, + 0x3f,0x3f,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x41,0x41,0x41,0x41,0x41,0x41, + 0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x42,0x43,0x43,0x44,0x44,0x44,0x43,0x42, + 0x42,0x42,0x42,0x42,0x42,0x43,0x43,0x43,0x44,0x44,0x44,0x44,0x43,0x43,0x43, + 0x44,0x44,0x44,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x46,0x46,0x46,0x46,0x46, + 0x46,0x46,0x46,0x46,0x46,0x46,0x46,0x46,0x47,0x47,0x46,0x46,0x46,0x45,0x45, + 0x46,0x47,0x47,0x45,0x45,0x47,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x48, + 0x48,0x49,0x49,0x49,0x49,0x4a,0x4a,0x49,0x49,0x4a,0x4a,0x4b,0x4b,0x4a,0x4a, + 0x4a,0x4b,0x4c,0x4c,0x4c,0x4c,0x4c,0x4c,0x4c,0x4c,0x4c,0x4c,0x4c,0x4c,0x4c, + 0x4c,0x4c,0x4c,0x4d,0x4d,0x4e,0x4e,0x4e,0x4d,0x4d,0x4e,0x4e,0x4e,0x4f,0x4e, + 0x4e,0x4e,0x4e,0x4e,0x4f,0x4f,0x4f,0x4f,0x4f,0x4f,0x4e,0x4e,0x4e,0x4f,0x50, + 0x50,0x50,0x50,0x4f,0x4f,0x4e,0x4f,0x50,0x50,0x51,0x52,0x51,0x51,0x50,0x50, + 0x50,0x50,0x50,0x50,0x50,0x50,0x51,0x51,0x52,0x53,0x53,0x53,0x53,0x53,0x53, + 0x53,0x53,0x52,0x52,0x53,0x53,0x53,0x53,0x52,0x52,0x53,0x53,0x53,0x53,0x53, + 0x54,0x54,0x54,0x54,0x54,0x54,0x53,0x54,0x55,0x56,0x56,0x56,0x56,0x56,0x56, + 0x56,0x56,0x56,0x55,0x55,0x55,0x56,0x57,0x57,0x57,0x57,0x57,0x58,0x58,0x57, + 0x57,0x56,0x57,0x57,0x57,0x57,0x57,0x57,0x57,0x57,0x57,0x57,0x57,0x57,0x57, + 0x58,0x59,0x58,0x57,0x57,0x57,0x57,0x57,0x57,0x58,0x58,0x59,0x59,0x5a,0x59, + 0x5a,0x5b,0x5b,0x5b,0x5a,0x5a,0x59,0x5a,0x5a,0x5b,0x5c,0x5c,0x5d,0x5c,0x5a, + 0x5a,0x59,0x5a,0x5b,0x5d,0x5e,0x5e,0x5e,0x5d,0x5c,0x5c,0x5c,0x5c,0x5c,0x5c, + 0x5c,0x5c,0x5d,0x5e,0x5e,0x5e,0x5e,0x5e,0x5d,0x5d,0x6d,0x5e,0x20,0x06,0x03, + 0x04,0x04,0x01,0x03,0x06,0x02,0x00,0x02,0x04,0x07,0x00,0x1c,0x5f,0x6d,0x65, + 0x5e,0x5c,0x5f,0x62,0x64,0x61,0x5f,0x5f,0x60,0x60,0x60,0x60,0x5f,0x5f,0x5f, + 0x5f,0x5f,0x5f,0x60,0x62,0x61,0x62,0x62,0x62,0x61,0x61,0x61,0x60,0x60,0x60, + 0x61,0x62,0x62,0x62,0x62,0x62,0x63,0x65,0x65,0x65,0x65,0x64,0x62,0x62,0x62, + 0x62,0x63,0x63,0x64,0x65,0x65,0x65,0x64,0x63,0x63,0x63,0x64,0x65,0x64,0x63, + 0x62,0x63,0x63,0x64,0x65,0x65,0x65,0x64,0x64,0x64,0x65,0x64,0x63,0x63,0x63, + 0x64,0x63,0x63,0x62,0x62,0x63,0x64,0x65,0x66,0x65,0x64,0x64,0x65,0x65,0x66, + 0x66,0x66,0x65,0x65,0x64,0x65,0x64,0x65,0x65,0x66,0x67,0x67,0x66,0x66,0x65, + 0x65,0x65,0x66,0x66,0x65,0x65,0x65,0x65,0x65,0x65,0x65,0x65,0x65,0xc8,0x38, + 0x38,0x37,0x37,0x37,0x37,0x37,0x36,0x36,0x36,0x37,0x38,0x3a,0x39,0x38,0x37, + 0x36,0x36,0x37,0x38,0x39,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x39,0x39,0x39,0x3a, + 0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3b,0x3c,0x3c,0x3b,0x3b,0x3b,0x3b,0x3b,0x3b, + 0x3b,0x3b,0x3b,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3d,0x3d, + 0x3d,0x3e,0x3e,0x3e,0x3e,0x3e,0x3e,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f, + 0x3f,0x3f,0x3f,0x3f,0x40,0x40,0x40,0x40,0x40,0x41,0x41,0x41,0x41,0x41,0x41, + 0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x42,0x42,0x42,0x42,0x43,0x44,0x44,0x45, + 0x44,0x43,0x43,0x43,0x43,0x43,0x43,0x44,0x44,0x44,0x44,0x45,0x45,0x45,0x45, + 0x45,0x45,0x45,0x45,0x45,0x45,0x46,0x46,0x46,0x46,0x46,0x46,0x46,0x46,0x47, + 0x47,0x47,0x47,0x47,0x47,0x46,0x46,0x46,0x46,0x47,0x48,0x48,0x48,0x48,0x47, + 0x45,0x45,0x47,0x47,0x46,0x45,0x45,0x47,0x48,0x49,0x48,0x48,0x48,0x48,0x48, + 0x49,0x49,0x49,0x49,0x4a,0x4a,0x4a,0x4b,0x4b,0x4b,0x4b,0x4b,0x4c,0x4c,0x4c, + 0x4b,0x4b,0x4c,0x4c,0x4c,0x4c,0x4c,0x4c,0x4c,0x4c,0x4c,0x4c,0x4c,0x4c,0x4c, + 0x4c,0x4c,0x4c,0x4c,0x4d,0x4d,0x4d,0x4e,0x4e,0x4e,0x4e,0x4e,0x4e,0x4e,0x4f, + 0x4f,0x4f,0x50,0x4f,0x4f,0x4f,0x4f,0x4f,0x4f,0x4f,0x4f,0x4f,0x4f,0x4e,0x4e, + 0x50,0x50,0x50,0x51,0x51,0x50,0x50,0x50,0x50,0x50,0x51,0x52,0x52,0x51,0x51, + 0x51,0x51,0x51,0x51,0x51,0x52,0x51,0x51,0x51,0x51,0x52,0x53,0x54,0x53,0x53, + 0x53,0x53,0x53,0x53,0x53,0x53,0x53,0x54,0x54,0x53,0x53,0x53,0x53,0x53,0x53, + 0x54,0x54,0x55,0x55,0x55,0x55,0x55,0x55,0x54,0x55,0x56,0x57,0x57,0x56,0x56, + 0x56,0x57,0x57,0x57,0x56,0x56,0x56,0x56,0x57,0x57,0x57,0x57,0x57,0x58,0x58, + 0x58,0x57,0x57,0x57,0x57,0x58,0x57,0x57,0x57,0x57,0x57,0x57,0x58,0x59,0x59, + 0x59,0x59,0x5a,0x5a,0x5a,0x5a,0x59,0x58,0x58,0x59,0x5a,0x5a,0x5a,0x5a,0x5a, + 0x5a,0x5a,0x5b,0x5c,0x5d,0x5d,0x5c,0x5a,0x5a,0x5a,0x5a,0x5c,0x5c,0x5d,0x5d, + 0x5c,0x5b,0x5a,0x5a,0x5a,0x5c,0x5e,0x5f,0x5f,0x5e,0x5e,0x5e,0x5d,0x5d,0x5d, + 0x5d,0x5e,0x5e,0x5e,0x5e,0x5e,0x5e,0x5e,0x5e,0x5f,0x5d,0x5b,0x6f,0x62,0x24, + 0x07,0x02,0x03,0x04,0x02,0x03,0x04,0x02,0x00,0x02,0x03,0x03,0x00,0x19,0x53, + 0x69,0x6b,0x62,0x5b,0x5a,0x5e,0x62,0x61,0x60,0x61,0x61,0x61,0x61,0x61,0x61, + 0x60,0x60,0x60,0x60,0x60,0x61,0x62,0x62,0x62,0x63,0x62,0x62,0x62,0x61,0x61, + 0x61,0x62,0x62,0x62,0x64,0x63,0x63,0x63,0x64,0x65,0x65,0x65,0x65,0x64,0x64, + 0x63,0x63,0x63,0x64,0x64,0x64,0x65,0x65,0x65,0x65,0x63,0x63,0x63,0x63,0x63, + 0x64,0x64,0x64,0x63,0x63,0x64,0x65,0x65,0x65,0x65,0x64,0x64,0x65,0x63,0x62, + 0x63,0x64,0x65,0x65,0x65,0x64,0x64,0x63,0x64,0x65,0x65,0x65,0x65,0x65,0x66, + 0x66,0x66,0x66,0x66,0x66,0x66,0x65,0x65,0x65,0x66,0x66,0x67,0x68,0x68,0x68, + 0x68,0x67,0x67,0x67,0x67,0x67,0x67,0x66,0x66,0x65,0x66,0x66,0x66,0x65,0x65, + 0xc8,0x38,0x38,0x37,0x37,0x37,0x37,0x37,0x36,0x36,0x36,0x37,0x38,0x3a,0x3a, + 0x38,0x37,0x36,0x36,0x37,0x38,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a, + 0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3b,0x3b,0x3c,0x3c,0x3b,0x3b,0x3b, + 0x3b,0x3c,0x3c,0x3c,0x3c,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d, + 0x3d,0x3d,0x3e,0x3e,0x3e,0x3e,0x3e,0x3e,0x3e,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f, + 0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x40,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41, + 0x42,0x41,0x42,0x42,0x42,0x41,0x41,0x41,0x41,0x42,0x42,0x42,0x43,0x43,0x44, + 0x44,0x45,0x45,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x45,0x45,0x45,0x45,0x45, + 0x45,0x45,0x45,0x45,0x45,0x46,0x45,0x46,0x47,0x47,0x47,0x47,0x46,0x46,0x47, + 0x47,0x48,0x48,0x48,0x48,0x48,0x48,0x47,0x47,0x47,0x47,0x47,0x48,0x49,0x4b, + 0x49,0x47,0x46,0x46,0x48,0x48,0x47,0x45,0x46,0x48,0x49,0x4a,0x49,0x49,0x48, + 0x48,0x48,0x49,0x49,0x49,0x4a,0x4a,0x4b,0x4b,0x4c,0x4c,0x4c,0x4c,0x4c,0x4c, + 0x4c,0x4c,0x4c,0x4c,0x4c,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d, + 0x4d,0x4d,0x4d,0x4d,0x4d,0x4e,0x4e,0x4e,0x4e,0x4e,0x4e,0x4e,0x4f,0x4f,0x4f, + 0x4f,0x50,0x50,0x50,0x50,0x50,0x50,0x4f,0x4f,0x4f,0x4f,0x4f,0x50,0x50,0x50, + 0x4f,0x4f,0x50,0x50,0x51,0x52,0x52,0x51,0x51,0x51,0x51,0x52,0x52,0x52,0x52, + 0x52,0x52,0x52,0x52,0x52,0x53,0x53,0x53,0x53,0x52,0x52,0x52,0x53,0x54,0x55, + 0x54,0x54,0x53,0x53,0x53,0x53,0x54,0x54,0x54,0x55,0x55,0x54,0x53,0x54,0x54, + 0x54,0x54,0x54,0x55,0x56,0x55,0x55,0x55,0x56,0x55,0x54,0x55,0x56,0x57,0x57, + 0x56,0x56,0x56,0x57,0x57,0x57,0x57,0x57,0x57,0x57,0x57,0x58,0x58,0x57,0x58, + 0x58,0x59,0x58,0x58,0x57,0x57,0x58,0x58,0x58,0x58,0x57,0x58,0x58,0x59,0x59, + 0x5a,0x5a,0x5a,0x5a,0x5b,0x5c,0x5b,0x5a,0x5a,0x5a,0x5a,0x5a,0x5b,0x5c,0x5d, + 0x5d,0x5d,0x5c,0x5c,0x5c,0x5d,0x5d,0x5e,0x5d,0x5d,0x5c,0x5c,0x5c,0x5d,0x5d, + 0x5d,0x5e,0x5d,0x5c,0x5b,0x5b,0x5c,0x5e,0x5e,0x5f,0x5f,0x5f,0x5e,0x5e,0x5e, + 0x5e,0x5e,0x5e,0x5e,0x5e,0x5e,0x5e,0x5e,0x5e,0x5f,0x60,0x61,0x5e,0x5b,0x70, + 0x65,0x28,0x0a,0x01,0x02,0x03,0x03,0x03,0x03,0x01,0x01,0x03,0x03,0x01,0x00, + 0x15,0x48,0x64,0x6e,0x65,0x5e,0x5d,0x5e,0x5f,0x60,0x61,0x62,0x62,0x62,0x62, + 0x62,0x62,0x61,0x61,0x61,0x61,0x61,0x61,0x62,0x62,0x63,0x63,0x63,0x63,0x62, + 0x62,0x62,0x62,0x63,0x64,0x65,0x65,0x65,0x64,0x63,0x63,0x64,0x65,0x65,0x65, + 0x65,0x65,0x64,0x65,0x65,0x65,0x65,0x65,0x65,0x65,0x65,0x65,0x65,0x64,0x64, + 0x64,0x64,0x65,0x65,0x65,0x64,0x64,0x65,0x65,0x66,0x65,0x65,0x65,0x65,0x65, + 0x65,0x65,0x65,0x65,0x65,0x66,0x66,0x67,0x67,0x66,0x66,0x65,0x64,0x66,0x69, + 0x69,0x67,0x66,0x66,0x65,0x66,0x66,0x67,0x68,0x68,0x69,0x69,0x68,0x68,0x69, + 0x69,0x68,0x68,0x68,0x68,0x68,0x68,0x68,0x68,0x68,0x68,0x68,0x68,0x68,0x67, + 0x67,0x66,0xc8,0x38,0x38,0x37,0x37,0x37,0x37,0x37,0x37,0x37,0x37,0x37,0x38, + 0x3a,0x3a,0x38,0x37,0x37,0x37,0x38,0x39,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a, + 0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3b,0x3b,0x3c,0x3c,0x3c, + 0x3c,0x3c,0x3c,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3e,0x3f,0x40,0x3f,0x3f, + 0x3f,0x3f,0x3e,0x3e,0x3e,0x3e,0x3e,0x3e,0x3d,0x3e,0x3f,0x3f,0x3f,0x3f,0x3f, + 0x3f,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x41,0x41,0x41,0x41,0x41,0x41,0x41, + 0x42,0x42,0x42,0x42,0x42,0x43,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x43,0x43, + 0x43,0x44,0x44,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45, + 0x45,0x45,0x45,0x45,0x45,0x45,0x46,0x46,0x46,0x47,0x47,0x47,0x47,0x47,0x47, + 0x47,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x49, + 0x4b,0x4c,0x4a,0x48,0x47,0x48,0x49,0x48,0x48,0x48,0x48,0x4b,0x4b,0x4a,0x4a, + 0x4a,0x49,0x49,0x49,0x49,0x49,0x4a,0x4b,0x4b,0x4c,0x4c,0x4d,0x4d,0x4c,0x4c, + 0x4c,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4e,0x4e,0x4e,0x4e,0x4e,0x4e,0x4e,0x4e, + 0x4e,0x4f,0x4f,0x4f,0x4f,0x4f,0x4f,0x4f,0x4f,0x4f,0x4f,0x4f,0x4f,0x4f,0x50, + 0x50,0x50,0x50,0x50,0x50,0x51,0x51,0x51,0x50,0x4f,0x4f,0x4f,0x50,0x50,0x50, + 0x50,0x50,0x50,0x50,0x51,0x52,0x52,0x53,0x53,0x53,0x53,0x53,0x53,0x53,0x53, + 0x52,0x52,0x53,0x53,0x53,0x53,0x53,0x54,0x54,0x54,0x53,0x53,0x53,0x53,0x54, + 0x55,0x55,0x55,0x55,0x54,0x54,0x54,0x54,0x54,0x55,0x55,0x55,0x56,0x55,0x54, + 0x55,0x55,0x55,0x55,0x55,0x56,0x56,0x56,0x56,0x56,0x56,0x56,0x55,0x56,0x57, + 0x57,0x57,0x56,0x56,0x57,0x57,0x57,0x58,0x58,0x58,0x58,0x58,0x59,0x59,0x59, + 0x58,0x58,0x59,0x59,0x59,0x59,0x59,0x58,0x59,0x59,0x59,0x59,0x58,0x59,0x59, + 0x5a,0x5a,0x5a,0x5b,0x5b,0x5b,0x5b,0x5c,0x5b,0x5b,0x5b,0x5b,0x5b,0x5c,0x5d, + 0x5e,0x5e,0x5e,0x5e,0x5e,0x5d,0x5d,0x5d,0x5e,0x5e,0x5e,0x5e,0x5e,0x5e,0x5e, + 0x5e,0x5e,0x5e,0x5e,0x5e,0x5e,0x5d,0x5d,0x5e,0x5f,0x5f,0x5f,0x5f,0x5f,0x5f, + 0x5f,0x5f,0x5f,0x5f,0x5f,0x60,0x60,0x60,0x5f,0x5f,0x5f,0x60,0x61,0x62,0x5e, + 0x5c,0x70,0x67,0x2b,0x0b,0x00,0x00,0x03,0x04,0x03,0x01,0x01,0x03,0x04,0x03, + 0x00,0x00,0x12,0x41,0x60,0x70,0x66,0x60,0x62,0x5f,0x5e,0x61,0x62,0x62,0x63, + 0x63,0x63,0x63,0x62,0x62,0x62,0x62,0x62,0x62,0x62,0x62,0x62,0x63,0x64,0x64, + 0x64,0x63,0x63,0x64,0x65,0x65,0x66,0x67,0x67,0x65,0x65,0x63,0x63,0x63,0x64, + 0x64,0x65,0x65,0x65,0x65,0x65,0x67,0x66,0x65,0x65,0x65,0x65,0x66,0x66,0x65, + 0x65,0x65,0x65,0x65,0x67,0x67,0x65,0x65,0x65,0x66,0x66,0x67,0x67,0x66,0x66, + 0x66,0x67,0x68,0x68,0x67,0x66,0x65,0x66,0x68,0x69,0x6b,0x6a,0x69,0x66,0x63, + 0x66,0x6d,0x6c,0x69,0x67,0x65,0x65,0x65,0x67,0x69,0x69,0x6a,0x6b,0x6a,0x68, + 0x68,0x69,0x69,0x69,0x68,0x68,0x68,0x69,0x69,0x69,0x69,0x69,0x69,0x69,0x69, + 0x69,0x69,0x69,0x69,0xc8,0x38,0x38,0x37,0x37,0x37,0x37,0x38,0x38,0x38,0x38, + 0x38,0x39,0x3a,0x3a,0x39,0x38,0x38,0x38,0x39,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a, + 0x3a,0x3b,0x3b,0x3b,0x3b,0x3b,0x3b,0x3b,0x3b,0x3b,0x3b,0x3b,0x3c,0x3c,0x3c, + 0x3c,0x3c,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3e,0x3e,0x3e,0x3e,0x3f,0x40, + 0x40,0x3f,0x3f,0x3e,0x3e,0x3e,0x3e,0x3f,0x3e,0x3e,0x3d,0x3e,0x40,0x40,0x40, + 0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41, + 0x42,0x42,0x42,0x42,0x42,0x43,0x43,0x43,0x43,0x43,0x43,0x43,0x43,0x43,0x43, + 0x43,0x43,0x44,0x44,0x44,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45, + 0x45,0x45,0x45,0x45,0x45,0x46,0x46,0x46,0x46,0x47,0x47,0x47,0x47,0x47,0x47, + 0x47,0x47,0x48,0x48,0x48,0x48,0x49,0x49,0x49,0x49,0x49,0x49,0x49,0x48,0x48, + 0x48,0x49,0x4b,0x4c,0x4a,0x48,0x48,0x48,0x49,0x49,0x48,0x49,0x4a,0x4c,0x4c, + 0x4b,0x4a,0x4a,0x4a,0x4a,0x4a,0x49,0x4a,0x4a,0x4b,0x4c,0x4c,0x4d,0x4d,0x4d, + 0x4c,0x4c,0x4c,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4e,0x4e,0x4f,0x4f,0x4f,0x4f, + 0x4f,0x4f,0x4f,0x50,0x50,0x50,0x50,0x50,0x50,0x50,0x50,0x50,0x50,0x50,0x50, + 0x50,0x50,0x50,0x50,0x50,0x51,0x51,0x51,0x50,0x50,0x50,0x4f,0x4f,0x4f,0x50, + 0x50,0x51,0x51,0x51,0x51,0x52,0x52,0x53,0x53,0x53,0x53,0x53,0x53,0x54,0x54, + 0x54,0x54,0x53,0x53,0x53,0x53,0x53,0x53,0x53,0x54,0x54,0x55,0x54,0x54,0x54, + 0x54,0x54,0x55,0x56,0x56,0x55,0x55,0x54,0x55,0x55,0x56,0x56,0x56,0x56,0x57, + 0x56,0x55,0x55,0x56,0x56,0x56,0x56,0x57,0x57,0x57,0x57,0x57,0x57,0x57,0x57, + 0x57,0x57,0x57,0x57,0x57,0x57,0x57,0x58,0x59,0x59,0x59,0x59,0x59,0x59,0x5a, + 0x5a,0x5a,0x59,0x59,0x59,0x59,0x5a,0x5a,0x59,0x59,0x59,0x5a,0x5a,0x5a,0x59, + 0x59,0x5a,0x5a,0x5a,0x5b,0x5c,0x5c,0x5c,0x5c,0x5c,0x5c,0x5b,0x5b,0x5c,0x5c, + 0x5d,0x5e,0x5e,0x5e,0x5e,0x5e,0x5e,0x5e,0x5d,0x5e,0x5e,0x5e,0x5f,0x60,0x60, + 0x60,0x60,0x5f,0x5e,0x5e,0x5f,0x5f,0x5e,0x5e,0x5e,0x5f,0x5f,0x5f,0x5e,0x5e, + 0x5e,0x5e,0x5f,0x60,0x60,0x61,0x61,0x61,0x61,0x61,0x61,0x61,0x61,0x62,0x62, + 0x63,0x60,0x5e,0x72,0x69,0x2e,0x0e,0x00,0x00,0x03,0x05,0x03,0x00,0x01,0x03, + 0x04,0x03,0x01,0x00,0x15,0x44,0x63,0x71,0x64,0x5e,0x65,0x64,0x61,0x62,0x63, + 0x63,0x64,0x64,0x65,0x65,0x65,0x64,0x64,0x64,0x64,0x65,0x64,0x63,0x64,0x65, + 0x65,0x65,0x65,0x64,0x64,0x65,0x65,0x65,0x66,0x67,0x67,0x66,0x65,0x65,0x65, + 0x65,0x65,0x65,0x65,0x65,0x66,0x66,0x66,0x68,0x67,0x66,0x65,0x65,0x65,0x66, + 0x67,0x67,0x67,0x67,0x67,0x67,0x68,0x68,0x67,0x67,0x67,0x67,0x67,0x68,0x68, + 0x69,0x69,0x69,0x68,0x69,0x69,0x69,0x67,0x67,0x67,0x69,0x6a,0x6b,0x6b,0x6a, + 0x68,0x65,0x68,0x6c,0x6b,0x69,0x68,0x67,0x67,0x67,0x69,0x69,0x6a,0x6a,0x6a, + 0x6a,0x69,0x69,0x69,0x69,0x69,0x69,0x68,0x69,0x69,0x69,0x69,0x69,0x69,0x69, + 0x69,0x6a,0x69,0x69,0x69,0x69,0xc8,0x38,0x38,0x37,0x37,0x37,0x38,0x38,0x38, + 0x38,0x38,0x39,0x39,0x3a,0x3a,0x39,0x39,0x38,0x39,0x3a,0x3a,0x3a,0x3a,0x3a, + 0x3a,0x3a,0x3b,0x3b,0x3b,0x3b,0x3b,0x3b,0x3b,0x3b,0x3b,0x3b,0x3b,0x3b,0x3c, + 0x3c,0x3c,0x3c,0x3c,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3e,0x3e,0x3e,0x3e,0x3e, + 0x3e,0x3f,0x3f,0x3e,0x3e,0x3e,0x3e,0x3e,0x3f,0x3f,0x3f,0x3e,0x3e,0x3f,0x40, + 0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x41,0x41,0x41,0x41,0x41,0x41,0x41, + 0x41,0x41,0x42,0x42,0x42,0x42,0x42,0x43,0x43,0x43,0x43,0x43,0x43,0x43,0x43, + 0x43,0x43,0x43,0x44,0x44,0x44,0x44,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45, + 0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x46,0x46,0x46,0x47,0x47,0x47,0x47,0x47, + 0x47,0x47,0x47,0x48,0x48,0x48,0x48,0x48,0x49,0x49,0x49,0x49,0x49,0x49,0x49, + 0x49,0x49,0x49,0x4a,0x4a,0x4b,0x49,0x48,0x48,0x49,0x4a,0x49,0x48,0x4b,0x4c, + 0x4c,0x4c,0x4b,0x4a,0x4a,0x4a,0x4a,0x4a,0x4a,0x4b,0x4b,0x4c,0x4c,0x4d,0x4d, + 0x4d,0x4c,0x4c,0x4c,0x4c,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4e,0x4f,0x4f, + 0x4f,0x4f,0x4f,0x4f,0x50,0x50,0x50,0x50,0x50,0x50,0x50,0x50,0x50,0x50,0x50, + 0x50,0x50,0x50,0x50,0x50,0x50,0x51,0x51,0x51,0x51,0x50,0x50,0x50,0x4f,0x4f, + 0x4f,0x50,0x51,0x51,0x52,0x52,0x52,0x52,0x53,0x53,0x53,0x53,0x53,0x53,0x54, + 0x54,0x55,0x55,0x54,0x53,0x53,0x53,0x53,0x53,0x53,0x53,0x54,0x55,0x55,0x54, + 0x54,0x54,0x54,0x54,0x55,0x56,0x56,0x56,0x55,0x55,0x56,0x56,0x57,0x57,0x57, + 0x57,0x57,0x57,0x56,0x56,0x56,0x56,0x57,0x57,0x57,0x57,0x57,0x57,0x57,0x57, + 0x57,0x57,0x58,0x58,0x59,0x58,0x58,0x57,0x58,0x59,0x5a,0x5a,0x5a,0x5a,0x5a, + 0x5a,0x5a,0x5a,0x5a,0x5a,0x59,0x59,0x5a,0x5a,0x5a,0x5a,0x59,0x5a,0x5b,0x5b, + 0x5a,0x5a,0x5a,0x5a,0x5a,0x5b,0x5c,0x5d,0x5d,0x5d,0x5d,0x5d,0x5d,0x5d,0x5d, + 0x5d,0x5e,0x5e,0x5e,0x5e,0x5e,0x5e,0x5e,0x5e,0x5e,0x5e,0x5e,0x5e,0x5f,0x60, + 0x61,0x62,0x62,0x61,0x60,0x60,0x60,0x5f,0x5f,0x5f,0x5f,0x5f,0x60,0x60,0x5f, + 0x5f,0x5e,0x5e,0x5e,0x5f,0x60,0x62,0x62,0x62,0x62,0x62,0x62,0x62,0x62,0x62, + 0x62,0x63,0x64,0x61,0x5f,0x74,0x6a,0x2f,0x0e,0x01,0x00,0x03,0x04,0x03,0x00, + 0x02,0x03,0x03,0x02,0x01,0x00,0x15,0x42,0x64,0x74,0x62,0x5c,0x66,0x66,0x64, + 0x64,0x65,0x65,0x65,0x65,0x65,0x66,0x66,0x65,0x65,0x65,0x65,0x66,0x65,0x65, + 0x66,0x66,0x66,0x65,0x65,0x65,0x65,0x65,0x65,0x65,0x66,0x67,0x67,0x67,0x67, + 0x67,0x68,0x68,0x68,0x68,0x67,0x67,0x66,0x66,0x67,0x68,0x68,0x66,0x66,0x66, + 0x66,0x67,0x68,0x68,0x68,0x69,0x69,0x69,0x68,0x68,0x69,0x69,0x69,0x68,0x67, + 0x68,0x69,0x6a,0x6a,0x69,0x69,0x69,0x6a,0x69,0x69,0x69,0x69,0x69,0x6a,0x6a, + 0x6a,0x6a,0x69,0x69,0x69,0x6a,0x6a,0x69,0x69,0x69,0x69,0x69,0x6a,0x6a,0x6a, + 0x6a,0x69,0x69,0x69,0x69,0x6a,0x6a,0x69,0x69,0x69,0x69,0x69,0x6a,0x6a,0x6b, + 0x6a,0x69,0x69,0x6a,0x6a,0x69,0x69,0x69,0xc8,0x38,0x38,0x37,0x37,0x37,0x37, + 0x38,0x39,0x39,0x39,0x39,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3b,0x3b, + 0x3b,0x3a,0x3a,0x3b,0x3c,0x3c,0x3b,0x3b,0x3b,0x3b,0x3b,0x3b,0x3b,0x3b,0x3b, + 0x3b,0x3c,0x3c,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3e,0x3e,0x3e,0x3e,0x3e,0x3d, + 0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3e,0x3f,0x3f,0x40,0x40,0x40,0x40, + 0x41,0x41,0x40,0x40,0x40,0x40,0x40,0x40,0x41,0x41,0x41,0x41,0x41,0x41,0x42, + 0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x43,0x43,0x43,0x43,0x44,0x44,0x44, + 0x44,0x44,0x44,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45, + 0x45,0x45,0x45,0x45,0x45,0x45,0x46,0x46,0x46,0x48,0x48,0x48,0x47,0x47,0x47, + 0x47,0x47,0x47,0x47,0x48,0x48,0x48,0x48,0x48,0x48,0x49,0x49,0x49,0x49,0x49, + 0x49,0x49,0x4a,0x4a,0x4a,0x4a,0x4a,0x4a,0x49,0x48,0x4a,0x4c,0x4b,0x4a,0x49, + 0x4c,0x4c,0x4b,0x4b,0x4b,0x4b,0x4b,0x4b,0x4b,0x4c,0x4c,0x4c,0x4c,0x4c,0x4d, + 0x4e,0x4e,0x4d,0x4c,0x4c,0x4c,0x4c,0x4c,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4e, + 0x4f,0x4f,0x4f,0x4f,0x4f,0x50,0x50,0x50,0x50,0x50,0x50,0x50,0x50,0x50,0x50, + 0x50,0x50,0x50,0x50,0x50,0x50,0x50,0x51,0x51,0x51,0x51,0x51,0x51,0x50,0x50, + 0x50,0x50,0x50,0x50,0x51,0x52,0x52,0x52,0x52,0x52,0x53,0x53,0x54,0x55,0x54, + 0x54,0x54,0x54,0x54,0x54,0x54,0x53,0x53,0x53,0x53,0x53,0x53,0x53,0x54,0x55, + 0x55,0x54,0x54,0x54,0x54,0x55,0x56,0x57,0x57,0x56,0x56,0x56,0x57,0x57,0x57, + 0x57,0x57,0x57,0x57,0x57,0x57,0x57,0x57,0x57,0x57,0x57,0x57,0x58,0x58,0x58, + 0x58,0x58,0x58,0x58,0x58,0x59,0x5a,0x5a,0x59,0x59,0x5a,0x5a,0x5a,0x5a,0x5a, + 0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5b,0x5a,0x5a,0x5a,0x5b, + 0x5d,0x5c,0x5b,0x5b,0x5b,0x5b,0x5b,0x5c,0x5d,0x5e,0x5e,0x5e,0x5e,0x5e,0x5e, + 0x5f,0x5f,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x5f,0x5f,0x5e, + 0x5f,0x61,0x62,0x62,0x62,0x62,0x61,0x61,0x61,0x60,0x5f,0x5f,0x5f,0x60,0x61, + 0x61,0x61,0x60,0x5f,0x5f,0x5f,0x60,0x61,0x62,0x62,0x62,0x62,0x62,0x62,0x62, + 0x62,0x62,0x62,0x63,0x64,0x62,0x60,0x75,0x6b,0x2e,0x0e,0x01,0x01,0x03,0x03, + 0x02,0x02,0x02,0x02,0x02,0x00,0x00,0x00,0x12,0x38,0x5e,0x77,0x63,0x5a,0x63, + 0x65,0x65,0x65,0x65,0x66,0x66,0x66,0x67,0x67,0x67,0x66,0x66,0x66,0x66,0x67, + 0x67,0x67,0x67,0x67,0x67,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x67,0x68, + 0x69,0x69,0x69,0x69,0x6b,0x6b,0x6a,0x69,0x69,0x68,0x67,0x68,0x69,0x69,0x67, + 0x67,0x68,0x68,0x69,0x69,0x69,0x69,0x69,0x69,0x6a,0x69,0x69,0x6a,0x6a,0x69, + 0x68,0x68,0x69,0x69,0x6b,0x6b,0x6a,0x69,0x69,0x69,0x69,0x6a,0x6b,0x6b,0x6a, + 0x69,0x69,0x69,0x69,0x6a,0x6b,0x6a,0x68,0x69,0x69,0x6a,0x6b,0x6c,0x6d,0x6c, + 0x6b,0x6a,0x69,0x69,0x69,0x6a,0x6b,0x6b,0x6b,0x6a,0x6a,0x6a,0x6a,0x6a,0x6b, + 0x6c,0x6c,0x6c,0x6a,0x6a,0x6a,0x6a,0x6b,0x6a,0x6a,0xc8,0x38,0x38,0x37,0x37, + 0x37,0x38,0x39,0x39,0x3a,0x39,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a, + 0x3b,0x3b,0x3b,0x3a,0x3a,0x3b,0x3c,0x3c,0x3b,0x3b,0x3b,0x3b,0x3b,0x3b,0x3b, + 0x3b,0x3b,0x3b,0x3c,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3e,0x3f,0x3f,0x3f,0x3f, + 0x3e,0x3e,0x3d,0x3d,0x3d,0x3e,0x3e,0x3e,0x3e,0x3e,0x3e,0x3f,0x40,0x40,0x41, + 0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x42, + 0x42,0x43,0x43,0x43,0x43,0x43,0x43,0x43,0x43,0x43,0x43,0x43,0x43,0x43,0x44, + 0x45,0x45,0x44,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45, + 0x45,0x45,0x45,0x45,0x46,0x46,0x46,0x47,0x47,0x47,0x48,0x48,0x48,0x48,0x48, + 0x47,0x47,0x47,0x47,0x47,0x47,0x48,0x48,0x48,0x48,0x49,0x49,0x49,0x49,0x4a, + 0x4a,0x4a,0x4a,0x4a,0x4b,0x4b,0x4b,0x4b,0x4b,0x4b,0x4a,0x49,0x4c,0x4d,0x4c, + 0x4a,0x4a,0x4d,0x4e,0x4b,0x4a,0x4a,0x4b,0x4b,0x4b,0x4c,0x4c,0x4c,0x4c,0x4d, + 0x4d,0x4e,0x4e,0x4e,0x4e,0x4d,0x4d,0x4c,0x4c,0x4d,0x4d,0x4d,0x4d,0x4d,0x4e, + 0x4e,0x4f,0x50,0x50,0x50,0x50,0x50,0x50,0x50,0x50,0x50,0x50,0x50,0x50,0x50, + 0x50,0x50,0x50,0x50,0x50,0x50,0x50,0x50,0x51,0x51,0x51,0x51,0x51,0x52,0x52, + 0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x53,0x52,0x52,0x52,0x53,0x53,0x54,0x55, + 0x56,0x56,0x55,0x54,0x54,0x54,0x54,0x55,0x55,0x54,0x55,0x55,0x55,0x55,0x55, + 0x56,0x57,0x56,0x56,0x55,0x55,0x56,0x57,0x57,0x57,0x57,0x57,0x56,0x57,0x57, + 0x57,0x58,0x58,0x58,0x57,0x57,0x57,0x57,0x57,0x57,0x57,0x57,0x57,0x58,0x58, + 0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x59,0x5a,0x5a,0x59,0x5a,0x5a,0x5a,0x5a, + 0x5a,0x5a,0x5a,0x5a,0x5a,0x5b,0x5b,0x5b,0x5b,0x5b,0x5b,0x5c,0x5c,0x5c,0x5a, + 0x5a,0x5c,0x5e,0x5e,0x5d,0x5c,0x5c,0x5c,0x5d,0x5d,0x5d,0x5e,0x5e,0x5e,0x5e, + 0x5e,0x5f,0x5f,0x60,0x60,0x60,0x60,0x5f,0x5f,0x5f,0x5f,0x5f,0x60,0x61,0x61, + 0x60,0x60,0x61,0x62,0x62,0x62,0x62,0x61,0x61,0x62,0x62,0x60,0x5f,0x5f,0x60, + 0x61,0x62,0x62,0x62,0x62,0x62,0x62,0x62,0x62,0x62,0x63,0x62,0x62,0x62,0x62, + 0x62,0x63,0x63,0x63,0x63,0x64,0x65,0x62,0x60,0x75,0x6a,0x2b,0x0c,0x01,0x01, + 0x03,0x01,0x01,0x03,0x02,0x02,0x02,0x01,0x01,0x01,0x0c,0x24,0x53,0x79,0x6a, + 0x60,0x64,0x65,0x65,0x65,0x66,0x66,0x66,0x66,0x67,0x67,0x67,0x67,0x66,0x66, + 0x67,0x67,0x67,0x66,0x66,0x66,0x66,0x66,0x66,0x67,0x67,0x67,0x67,0x68,0x69, + 0x69,0x6a,0x6a,0x69,0x69,0x69,0x6a,0x6a,0x69,0x69,0x69,0x69,0x69,0x6a,0x6a, + 0x69,0x69,0x69,0x69,0x69,0x69,0x69,0x69,0x69,0x69,0x6a,0x6a,0x69,0x6a,0x6d, + 0x6d,0x6c,0x69,0x68,0x69,0x6a,0x6c,0x6c,0x6a,0x69,0x69,0x69,0x6a,0x6b,0x6c, + 0x6c,0x6b,0x6a,0x6a,0x6a,0x6a,0x6b,0x6c,0x6b,0x69,0x69,0x6b,0x6c,0x6d,0x6d, + 0x6d,0x6c,0x6b,0x6b,0x6a,0x6a,0x6b,0x6d,0x6d,0x6d,0x6d,0x6c,0x6b,0x6b,0x6b, + 0x6b,0x6c,0x6d,0x6d,0x6d,0x6c,0x6b,0x6c,0x6c,0x6d,0x6c,0x6c,0xc8,0x38,0x38, + 0x37,0x37,0x38,0x39,0x39,0x3a,0x3a,0x3a,0x3a,0x3a,0x3b,0x3a,0x3a,0x3a,0x3a, + 0x3b,0x3b,0x3b,0x3b,0x3b,0x3a,0x3a,0x3b,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c, + 0x3c,0x3c,0x3c,0x3c,0x3c,0x3d,0x3d,0x3d,0x3e,0x3e,0x3e,0x3e,0x3f,0x40,0x40, + 0x40,0x40,0x3f,0x3e,0x3e,0x3d,0x3e,0x40,0x40,0x40,0x3f,0x3f,0x3f,0x40,0x40, + 0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x42,0x42, + 0x42,0x43,0x43,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44, + 0x44,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x46,0x46, + 0x45,0x45,0x45,0x46,0x46,0x46,0x47,0x47,0x48,0x48,0x48,0x48,0x48,0x48,0x48, + 0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x49,0x49,0x4a,0x4a, + 0x4a,0x4b,0x4b,0x4b,0x4b,0x4b,0x4c,0x4c,0x4c,0x4c,0x4c,0x4c,0x4b,0x4b,0x4e, + 0x4f,0x4d,0x4c,0x4b,0x4e,0x4e,0x4c,0x4a,0x4a,0x4b,0x4b,0x4c,0x4c,0x4c,0x4d, + 0x4d,0x4e,0x4e,0x4e,0x4e,0x4e,0x4f,0x4f,0x4e,0x4d,0x4d,0x4e,0x4e,0x4e,0x4e, + 0x4e,0x4f,0x50,0x50,0x50,0x50,0x50,0x50,0x50,0x50,0x50,0x50,0x50,0x50,0x50, + 0x50,0x50,0x51,0x51,0x50,0x50,0x50,0x50,0x50,0x51,0x52,0x52,0x52,0x52,0x52, + 0x53,0x53,0x53,0x53,0x53,0x54,0x54,0x53,0x53,0x53,0x53,0x53,0x53,0x53,0x54, + 0x55,0x56,0x57,0x57,0x56,0x55,0x54,0x55,0x55,0x56,0x56,0x56,0x57,0x57,0x57, + 0x57,0x57,0x57,0x57,0x57,0x57,0x57,0x57,0x58,0x58,0x58,0x57,0x57,0x57,0x57, + 0x57,0x57,0x58,0x59,0x59,0x59,0x58,0x57,0x57,0x57,0x57,0x57,0x57,0x57,0x58, + 0x59,0x59,0x59,0x59,0x59,0x59,0x59,0x58,0x59,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a, + 0x5a,0x5a,0x5a,0x5a,0x5a,0x5b,0x5c,0x5c,0x5d,0x5d,0x5d,0x5d,0x5d,0x5e,0x5e, + 0x5d,0x5c,0x5b,0x5e,0x5f,0x5e,0x5e,0x5e,0x5d,0x5d,0x5e,0x5e,0x5e,0x5e,0x5e, + 0x5e,0x5e,0x5e,0x5f,0x5f,0x60,0x60,0x5f,0x5f,0x5f,0x5e,0x5e,0x5e,0x5f,0x60, + 0x62,0x62,0x61,0x61,0x62,0x62,0x62,0x62,0x61,0x61,0x62,0x62,0x62,0x61,0x60, + 0x60,0x60,0x61,0x62,0x62,0x63,0x63,0x63,0x63,0x63,0x64,0x64,0x63,0x63,0x63, + 0x63,0x63,0x63,0x64,0x64,0x64,0x65,0x65,0x65,0x62,0x5f,0x75,0x6a,0x2a,0x0a, + 0x02,0x02,0x02,0x00,0x01,0x03,0x03,0x02,0x03,0x03,0x03,0x03,0x06,0x0f,0x46, + 0x7b,0x72,0x68,0x65,0x65,0x65,0x66,0x66,0x66,0x67,0x67,0x67,0x67,0x67,0x67, + 0x67,0x67,0x67,0x67,0x67,0x66,0x65,0x65,0x65,0x66,0x66,0x68,0x69,0x69,0x69, + 0x69,0x6a,0x6b,0x6d,0x6c,0x6b,0x69,0x69,0x69,0x68,0x68,0x69,0x69,0x6a,0x6c, + 0x6d,0x6b,0x6b,0x6b,0x6b,0x6b,0x6b,0x6b,0x6a,0x69,0x69,0x69,0x6a,0x6b,0x6b, + 0x6c,0x6e,0x6e,0x6d,0x6a,0x69,0x69,0x6b,0x6d,0x6d,0x6b,0x69,0x69,0x6a,0x6b, + 0x6b,0x6b,0x6c,0x6c,0x6c,0x6c,0x6d,0x6d,0x6c,0x6c,0x6c,0x6b,0x6c,0x6d,0x6d, + 0x6d,0x6d,0x6c,0x6b,0x6b,0x6c,0x6d,0x6e,0x6e,0x6e,0x6e,0x6e,0x6e,0x6d,0x6c, + 0x6c,0x6c,0x6d,0x6d,0x6d,0x6d,0x6d,0x6d,0x6d,0x6d,0x6e,0x6e,0x6e,0x6e,0xc8, + 0x38,0x38,0x38,0x39,0x39,0x3a,0x3a,0x39,0x3a,0x3a,0x3a,0x3a,0x3b,0x3c,0x3b, + 0x3a,0x3a,0x3a,0x3b,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3d,0x3d,0x3d, + 0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3e,0x3e,0x3f,0x3f,0x3f,0x3f,0x3f, + 0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x40,0x41,0x41,0x40,0x40,0x40, + 0x40,0x40,0x40,0x41,0x41,0x41,0x41,0x42,0x41,0x41,0x41,0x41,0x41,0x41,0x42, + 0x42,0x43,0x43,0x43,0x43,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x45,0x45,0x45, + 0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x46,0x46,0x46,0x46,0x47, + 0x47,0x47,0x46,0x46,0x46,0x47,0x47,0x47,0x47,0x48,0x48,0x48,0x49,0x4a,0x49, + 0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x49,0x49,0x49,0x49,0x49,0x4a, + 0x4b,0x4b,0x4b,0x4b,0x4b,0x4b,0x4b,0x4b,0x4c,0x4c,0x4c,0x4c,0x4c,0x4c,0x4d, + 0x4d,0x4e,0x4e,0x4e,0x4d,0x4c,0x4c,0x4c,0x4b,0x4b,0x4c,0x4c,0x4c,0x4d,0x4d, + 0x4d,0x4e,0x4e,0x4e,0x4e,0x4e,0x4e,0x4f,0x50,0x50,0x4f,0x4f,0x4e,0x4f,0x4f, + 0x4f,0x4e,0x4f,0x50,0x50,0x50,0x50,0x50,0x50,0x50,0x50,0x50,0x51,0x52,0x53, + 0x53,0x52,0x52,0x51,0x52,0x52,0x51,0x52,0x52,0x52,0x52,0x52,0x53,0x53,0x53, + 0x53,0x53,0x53,0x53,0x54,0x54,0x54,0x55,0x56,0x56,0x56,0x56,0x55,0x54,0x53, + 0x53,0x54,0x54,0x54,0x56,0x57,0x55,0x55,0x55,0x56,0x57,0x55,0x56,0x57,0x57, + 0x57,0x57,0x57,0x57,0x57,0x57,0x57,0x57,0x57,0x57,0x58,0x59,0x5a,0x5a,0x59, + 0x58,0x59,0x59,0x59,0x59,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x59,0x59,0x59, + 0x5a,0x5a,0x5a,0x5b,0x5b,0x5b,0x5b,0x5c,0x5b,0x5a,0x5a,0x5c,0x5c,0x5c,0x5b, + 0x5b,0x5b,0x5c,0x5d,0x5d,0x5d,0x5c,0x5d,0x5e,0x5e,0x5e,0x5e,0x5e,0x5e,0x5e, + 0x5f,0x5f,0x5e,0x5e,0x5e,0x5e,0x60,0x60,0x5f,0x5f,0x5f,0x5f,0x5e,0x5e,0x5e, + 0x5e,0x5f,0x5f,0x5e,0x5e,0x5f,0x60,0x60,0x60,0x60,0x61,0x61,0x61,0x60,0x5f, + 0x60,0x61,0x62,0x62,0x61,0x61,0x61,0x62,0x62,0x62,0x62,0x62,0x63,0x64,0x64, + 0x62,0x62,0x62,0x62,0x62,0x62,0x63,0x63,0x64,0x65,0x64,0x64,0x65,0x64,0x64, + 0x64,0x64,0x64,0x65,0x65,0x65,0x65,0x65,0x66,0x66,0x67,0x63,0x62,0x78,0x6d, + 0x2c,0x0d,0x04,0x02,0x01,0x00,0x02,0x05,0x03,0x01,0x03,0x03,0x03,0x02,0x01, + 0x03,0x3f,0x7d,0x72,0x68,0x66,0x65,0x64,0x66,0x68,0x68,0x69,0x69,0x69,0x69, + 0x69,0x68,0x68,0x68,0x68,0x68,0x68,0x69,0x69,0x69,0x68,0x68,0x69,0x69,0x69, + 0x69,0x6a,0x6a,0x69,0x6a,0x6c,0x6d,0x6c,0x6c,0x6b,0x6a,0x69,0x69,0x6a,0x6c, + 0x6d,0x6e,0x6e,0x6d,0x6c,0x6c,0x6b,0x6b,0x6b,0x6b,0x6b,0x6a,0x6a,0x6b,0x6b, + 0x6c,0x6c,0x6d,0x6d,0x6e,0x6e,0x6c,0x6b,0x6b,0x6b,0x6c,0x6d,0x6c,0x6b,0x6c, + 0x6c,0x6d,0x6d,0x6d,0x6d,0x6d,0x6d,0x6d,0x6d,0x6d,0x6d,0x6d,0x6d,0x6d,0x6d, + 0x6d,0x6e,0x6e,0x6d,0x6d,0x6d,0x6e,0x6e,0x6e,0x70,0x70,0x6f,0x6f,0x6f,0x6e, + 0x6d,0x6d,0x6d,0x6d,0x6d,0x6e,0x6f,0x6f,0x6f,0x6f,0x6f,0x6e,0x6e,0x6e,0x6e, + 0x6e,0xc8,0x38,0x38,0x39,0x3a,0x3a,0x3a,0x3a,0x39,0x39,0x3a,0x3a,0x3a,0x3c, + 0x3d,0x3c,0x3b,0x3a,0x3a,0x3b,0x3c,0x3d,0x3d,0x3d,0x3d,0x3c,0x3c,0x3c,0x3d, + 0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3e,0x3e,0x3e,0x3f,0x3f,0x3f,0x3f,0x3f, + 0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x40,0x40,0x40,0x40,0x40,0x41,0x41,0x41, + 0x41,0x41,0x40,0x40,0x40,0x41,0x41,0x41,0x42,0x42,0x42,0x41,0x41,0x41,0x41, + 0x42,0x43,0x43,0x44,0x43,0x43,0x43,0x44,0x44,0x44,0x44,0x44,0x44,0x45,0x45, + 0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x46,0x46,0x46,0x46, + 0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x48,0x48,0x48,0x48,0x49, + 0x4a,0x49,0x48,0x48,0x48,0x48,0x48,0x48,0x49,0x49,0x49,0x4a,0x4a,0x4a,0x4a, + 0x4a,0x4b,0x4b,0x4b,0x4b,0x4b,0x4b,0x4b,0x4b,0x4b,0x4c,0x4c,0x4c,0x4c,0x4c, + 0x4d,0x4d,0x4e,0x4e,0x4e,0x4e,0x4e,0x4e,0x4c,0x4c,0x4c,0x4c,0x4d,0x4d,0x4e, + 0x4e,0x4e,0x4e,0x4e,0x4e,0x4e,0x4e,0x4e,0x4e,0x4f,0x50,0x50,0x50,0x4f,0x4f, + 0x4f,0x4f,0x4f,0x4f,0x50,0x50,0x50,0x50,0x50,0x50,0x50,0x50,0x50,0x51,0x52, + 0x53,0x53,0x53,0x53,0x53,0x52,0x52,0x52,0x52,0x53,0x53,0x53,0x53,0x53,0x53, + 0x53,0x53,0x54,0x55,0x54,0x53,0x54,0x54,0x55,0x55,0x56,0x57,0x57,0x57,0x57, + 0x57,0x55,0x55,0x56,0x54,0x53,0x56,0x57,0x55,0x55,0x56,0x57,0x57,0x55,0x56, + 0x57,0x57,0x57,0x57,0x57,0x57,0x57,0x57,0x57,0x57,0x57,0x58,0x59,0x5a,0x5a, + 0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5b,0x5a,0x5a, + 0x5a,0x5a,0x5b,0x5c,0x5c,0x5d,0x5d,0x5d,0x5d,0x5d,0x5c,0x5b,0x5c,0x5e,0x5e, + 0x5e,0x5d,0x5d,0x5d,0x5e,0x5e,0x5f,0x5e,0x5e,0x5e,0x5e,0x5e,0x5e,0x5e,0x5e, + 0x5f,0x60,0x60,0x60,0x60,0x5f,0x5f,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60, + 0x5f,0x5f,0x5f,0x5f,0x60,0x60,0x60,0x61,0x62,0x62,0x62,0x62,0x62,0x63,0x62, + 0x62,0x61,0x62,0x62,0x63,0x62,0x61,0x61,0x62,0x62,0x63,0x64,0x64,0x64,0x64, + 0x65,0x65,0x63,0x62,0x64,0x64,0x64,0x63,0x63,0x63,0x64,0x65,0x65,0x65,0x65, + 0x65,0x65,0x65,0x65,0x65,0x65,0x66,0x66,0x66,0x67,0x67,0x68,0x69,0x65,0x63, + 0x7a,0x70,0x32,0x12,0x06,0x02,0x01,0x00,0x03,0x05,0x03,0x01,0x02,0x02,0x02, + 0x02,0x00,0x00,0x3a,0x7b,0x71,0x68,0x67,0x65,0x65,0x67,0x68,0x69,0x69,0x69, + 0x69,0x69,0x6a,0x69,0x69,0x69,0x69,0x69,0x69,0x6a,0x6a,0x6a,0x6a,0x6a,0x69, + 0x69,0x6a,0x6a,0x6b,0x6a,0x69,0x6a,0x6c,0x6d,0x6d,0x6d,0x6d,0x6c,0x6b,0x6b, + 0x6c,0x6d,0x6d,0x6e,0x6e,0x6d,0x6d,0x6d,0x6c,0x6b,0x6c,0x6c,0x6c,0x6c,0x6c, + 0x6d,0x6d,0x6d,0x6d,0x6d,0x6d,0x6e,0x6e,0x6d,0x6d,0x6d,0x6c,0x6c,0x6d,0x6d, + 0x6d,0x6d,0x6d,0x6d,0x6e,0x6e,0x6e,0x6d,0x6d,0x6e,0x6e,0x6f,0x6f,0x6e,0x6e, + 0x6e,0x6e,0x6e,0x6f,0x6f,0x6e,0x6e,0x6f,0x70,0x70,0x6f,0x70,0x70,0x6f,0x6f, + 0x6f,0x6f,0x6e,0x6e,0x6e,0x6e,0x6f,0x70,0x70,0x70,0x70,0x70,0x70,0x70,0x6f, + 0x6e,0x6e,0x6f,0xc8,0x39,0x39,0x3a,0x3a,0x39,0x39,0x39,0x38,0x38,0x3a,0x3a, + 0x3b,0x3d,0x3d,0x3c,0x3b,0x3b,0x3b,0x3b,0x3c,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d, + 0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3e,0x3e,0x3e,0x3f,0x3f,0x3f,0x40, + 0x40,0x40,0x3f,0x3f,0x3f,0x3f,0x40,0x40,0x40,0x41,0x41,0x41,0x41,0x41,0x41, + 0x42,0x42,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x42,0x42,0x43,0x43,0x43,0x43, + 0x43,0x43,0x43,0x44,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45, + 0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x46,0x46,0x46,0x46,0x46,0x47,0x47, + 0x47,0x47,0x47,0x47,0x47,0x47,0x48,0x48,0x48,0x47,0x47,0x48,0x48,0x48,0x48, + 0x48,0x48,0x48,0x48,0x49,0x49,0x49,0x48,0x48,0x49,0x49,0x4a,0x4a,0x4a,0x4b, + 0x4b,0x4b,0x4c,0x4c,0x4c,0x4c,0x4c,0x4c,0x4c,0x4c,0x4c,0x4c,0x4c,0x4c,0x4c, + 0x4c,0x4c,0x4c,0x4d,0x4d,0x4e,0x4e,0x4f,0x4f,0x4f,0x4e,0x4e,0x4e,0x4e,0x4e, + 0x4e,0x4e,0x4e,0x4e,0x4e,0x4e,0x4e,0x4f,0x4f,0x4f,0x4f,0x50,0x51,0x51,0x50, + 0x50,0x50,0x50,0x50,0x50,0x50,0x50,0x51,0x51,0x52,0x52,0x52,0x52,0x52,0x53, + 0x53,0x53,0x53,0x53,0x53,0x53,0x53,0x53,0x53,0x53,0x53,0x53,0x53,0x53,0x54, + 0x54,0x54,0x54,0x54,0x55,0x56,0x55,0x54,0x54,0x54,0x55,0x55,0x55,0x56,0x57, + 0x57,0x57,0x57,0x57,0x57,0x57,0x56,0x56,0x57,0x57,0x57,0x57,0x57,0x58,0x58, + 0x57,0x57,0x58,0x59,0x58,0x58,0x58,0x59,0x59,0x58,0x58,0x59,0x59,0x59,0x59, + 0x5a,0x5b,0x5b,0x5b,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5b,0x5b,0x5b,0x5b,0x5b, + 0x5b,0x5b,0x5b,0x5c,0x5c,0x5d,0x5e,0x5e,0x5d,0x5d,0x5c,0x5b,0x5b,0x5c,0x5d, + 0x5e,0x5f,0x5f,0x5e,0x5f,0x5f,0x60,0x60,0x5f,0x5e,0x5e,0x5e,0x5e,0x5f,0x5f, + 0x5f,0x5f,0x60,0x61,0x61,0x61,0x61,0x61,0x61,0x61,0x61,0x61,0x61,0x61,0x61, + 0x61,0x61,0x61,0x61,0x61,0x61,0x61,0x62,0x62,0x63,0x64,0x64,0x64,0x64,0x64, + 0x65,0x65,0x64,0x64,0x64,0x65,0x65,0x64,0x62,0x62,0x63,0x64,0x65,0x65,0x65, + 0x65,0x65,0x66,0x66,0x64,0x63,0x65,0x65,0x65,0x65,0x65,0x65,0x65,0x65,0x66, + 0x66,0x66,0x66,0x67,0x67,0x67,0x67,0x67,0x67,0x67,0x67,0x68,0x68,0x68,0x69, + 0x65,0x63,0x7a,0x73,0x3c,0x18,0x05,0x02,0x02,0x00,0x01,0x03,0x02,0x01,0x00, + 0x01,0x01,0x03,0x01,0x00,0x38,0x75,0x71,0x6b,0x6a,0x69,0x69,0x67,0x67,0x69, + 0x69,0x6a,0x6a,0x6a,0x6b,0x6b,0x6b,0x6b,0x6c,0x6c,0x6b,0x6b,0x6b,0x6b,0x6b, + 0x6a,0x6a,0x6a,0x6a,0x6c,0x6c,0x6b,0x6b,0x6b,0x6d,0x6d,0x6d,0x6e,0x6e,0x6d, + 0x6d,0x6d,0x6d,0x6c,0x6b,0x6a,0x6b,0x6d,0x6e,0x6e,0x6d,0x6d,0x6d,0x6d,0x6d, + 0x6d,0x6d,0x6d,0x6e,0x6f,0x6f,0x6f,0x70,0x6f,0x6f,0x6e,0x6e,0x6e,0x6d,0x6d, + 0x6e,0x6e,0x6e,0x6d,0x6d,0x6d,0x6e,0x6f,0x6f,0x6f,0x6f,0x6f,0x70,0x70,0x70, + 0x6f,0x6f,0x6f,0x6f,0x6f,0x70,0x70,0x70,0x70,0x70,0x70,0x70,0x70,0x70,0x70, + 0x6f,0x6f,0x70,0x70,0x70,0x70,0x70,0x70,0x70,0x70,0x70,0x70,0x70,0x70,0x70, + 0x70,0x70,0x70,0x70,0x70,0xc8,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a, + 0x3a,0x3b,0x3d,0x3e,0x3e,0x3d,0x3c,0x3b,0x3b,0x3c,0x3c,0x3d,0x3d,0x3d,0x3d, + 0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3e,0x3e,0x3e,0x3e,0x3e,0x3f,0x3f, + 0x3f,0x40,0x41,0x41,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x41,0x41,0x41,0x41, + 0x42,0x42,0x43,0x43,0x42,0x41,0x41,0x41,0x41,0x41,0x42,0x42,0x43,0x43,0x43, + 0x43,0x43,0x43,0x44,0x44,0x44,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45, + 0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x46,0x47,0x47,0x47,0x47,0x47, + 0x48,0x47,0x47,0x47,0x47,0x47,0x47,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x48, + 0x48,0x48,0x48,0x48,0x48,0x48,0x49,0x4a,0x49,0x49,0x49,0x49,0x4a,0x4a,0x4a, + 0x4b,0x4b,0x4b,0x4c,0x4c,0x4c,0x4c,0x4c,0x4c,0x4c,0x4c,0x4c,0x4c,0x4c,0x4c, + 0x4c,0x4c,0x4c,0x4c,0x4c,0x4d,0x4d,0x4e,0x4e,0x4f,0x4f,0x4f,0x4e,0x4e,0x4e, + 0x4e,0x4f,0x4e,0x4e,0x4f,0x4f,0x4f,0x4f,0x4f,0x4f,0x50,0x50,0x50,0x50,0x51, + 0x51,0x50,0x50,0x50,0x51,0x51,0x51,0x51,0x51,0x52,0x52,0x53,0x53,0x53,0x53, + 0x53,0x53,0x53,0x53,0x53,0x53,0x53,0x53,0x53,0x53,0x53,0x53,0x53,0x54,0x54, + 0x54,0x55,0x55,0x55,0x55,0x55,0x56,0x57,0x57,0x56,0x56,0x56,0x56,0x56,0x56, + 0x57,0x57,0x57,0x57,0x58,0x58,0x58,0x58,0x57,0x57,0x58,0x59,0x57,0x58,0x58, + 0x59,0x59,0x57,0x58,0x59,0x5a,0x59,0x59,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a, + 0x5a,0x5a,0x5b,0x5c,0x5c,0x5c,0x5b,0x5b,0x5b,0x5a,0x5b,0x5b,0x5b,0x5b,0x5b, + 0x5b,0x5b,0x5b,0x5c,0x5c,0x5d,0x5d,0x5e,0x5e,0x5e,0x5e,0x5d,0x5c,0x5b,0x5b, + 0x5c,0x5e,0x5e,0x5f,0x60,0x60,0x61,0x61,0x61,0x60,0x60,0x5e,0x5e,0x5e,0x5f, + 0x60,0x60,0x60,0x61,0x61,0x61,0x61,0x62,0x62,0x62,0x62,0x62,0x61,0x62,0x62, + 0x62,0x62,0x62,0x62,0x62,0x62,0x62,0x62,0x62,0x62,0x62,0x63,0x64,0x64,0x64, + 0x64,0x65,0x65,0x65,0x64,0x64,0x64,0x65,0x65,0x65,0x64,0x64,0x64,0x65,0x65, + 0x66,0x66,0x66,0x65,0x67,0x67,0x65,0x64,0x65,0x65,0x65,0x65,0x65,0x65,0x65, + 0x66,0x66,0x66,0x66,0x67,0x68,0x68,0x68,0x68,0x68,0x67,0x67,0x68,0x68,0x69, + 0x69,0x69,0x65,0x63,0x79,0x76,0x46,0x20,0x04,0x01,0x03,0x01,0x01,0x02,0x02, + 0x01,0x00,0x00,0x01,0x04,0x03,0x00,0x33,0x6e,0x72,0x6f,0x6b,0x6a,0x69,0x69, + 0x69,0x69,0x6a,0x6b,0x6b,0x6b,0x6c,0x6b,0x6b,0x6c,0x6d,0x6d,0x6d,0x6c,0x6c, + 0x6c,0x6c,0x6b,0x6b,0x6b,0x6c,0x6d,0x6d,0x6d,0x6d,0x6d,0x6d,0x6d,0x6d,0x6e, + 0x6d,0x6d,0x6d,0x6d,0x6d,0x6d,0x6d,0x6c,0x6c,0x6e,0x6f,0x6f,0x6e,0x6e,0x6e, + 0x6e,0x6e,0x6e,0x6e,0x6f,0x6f,0x70,0x70,0x70,0x70,0x6f,0x6f,0x6e,0x6e,0x6f, + 0x70,0x70,0x70,0x70,0x6f,0x6e,0x6d,0x6e,0x6f,0x70,0x70,0x70,0x70,0x70,0x70, + 0x70,0x70,0x70,0x70,0x70,0x70,0x70,0x72,0x71,0x70,0x70,0x70,0x70,0x70,0x70, + 0x71,0x71,0x70,0x70,0x70,0x71,0x72,0x72,0x71,0x70,0x71,0x71,0x71,0x70,0x70, + 0x71,0x71,0x71,0x71,0x71,0x71,0x71,0xc8,0x3a,0x3a,0x3b,0x3b,0x3b,0x3b,0x3b, + 0x3b,0x3b,0x3c,0x3d,0x3d,0x3f,0x3e,0x3d,0x3c,0x3c,0x3c,0x3c,0x3d,0x3d,0x3d, + 0x3d,0x3d,0x3d,0x3e,0x3e,0x3d,0x3d,0x3e,0x3e,0x3e,0x3f,0x3f,0x3f,0x3f,0x3f, + 0x3f,0x3f,0x40,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41, + 0x41,0x42,0x43,0x43,0x43,0x43,0x43,0x42,0x41,0x41,0x41,0x42,0x42,0x43,0x43, + 0x44,0x44,0x43,0x43,0x43,0x44,0x44,0x44,0x45,0x45,0x45,0x45,0x45,0x45,0x45, + 0x45,0x45,0x45,0x45,0x45,0x46,0x46,0x46,0x46,0x46,0x46,0x47,0x48,0x48,0x48, + 0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x49, + 0x49,0x49,0x49,0x49,0x49,0x49,0x49,0x49,0x4a,0x4a,0x4a,0x4a,0x4a,0x4a,0x4b, + 0x4b,0x4b,0x4b,0x4c,0x4c,0x4c,0x4c,0x4c,0x4d,0x4d,0x4d,0x4d,0x4d,0x4c,0x4c, + 0x4c,0x4c,0x4c,0x4d,0x4c,0x4c,0x4d,0x4e,0x4e,0x4e,0x4e,0x4e,0x4e,0x4e,0x4e, + 0x4e,0x4e,0x4e,0x4f,0x4f,0x4f,0x50,0x50,0x50,0x50,0x50,0x50,0x50,0x50,0x51, + 0x51,0x52,0x52,0x51,0x51,0x51,0x52,0x52,0x52,0x52,0x52,0x52,0x53,0x53,0x53, + 0x53,0x53,0x54,0x54,0x53,0x53,0x53,0x53,0x53,0x53,0x54,0x54,0x54,0x54,0x54, + 0x54,0x55,0x55,0x55,0x56,0x56,0x56,0x57,0x57,0x57,0x57,0x57,0x57,0x57,0x57, + 0x57,0x57,0x57,0x57,0x57,0x57,0x58,0x58,0x58,0x59,0x59,0x58,0x5a,0x5a,0x59, + 0x59,0x59,0x5a,0x59,0x58,0x59,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5b,0x5b,0x5b, + 0x5a,0x5a,0x5a,0x5b,0x5c,0x5d,0x5d,0x5c,0x5c,0x5c,0x5b,0x5b,0x5c,0x5c,0x5c, + 0x5c,0x5c,0x5c,0x5c,0x5c,0x5d,0x5d,0x5e,0x5e,0x5e,0x5e,0x5e,0x5e,0x5e,0x5d, + 0x5d,0x5d,0x5d,0x5e,0x5e,0x5f,0x60,0x61,0x61,0x61,0x61,0x61,0x60,0x5f,0x5e, + 0x60,0x61,0x61,0x62,0x62,0x62,0x62,0x62,0x62,0x62,0x62,0x62,0x62,0x62,0x62, + 0x62,0x63,0x63,0x63,0x63,0x63,0x63,0x63,0x64,0x64,0x64,0x63,0x62,0x62,0x63, + 0x63,0x63,0x63,0x65,0x65,0x64,0x63,0x63,0x64,0x65,0x66,0x65,0x65,0x65,0x65, + 0x65,0x66,0x66,0x66,0x66,0x66,0x67,0x67,0x66,0x65,0x66,0x67,0x67,0x66,0x66, + 0x66,0x67,0x67,0x67,0x67,0x67,0x68,0x69,0x68,0x68,0x68,0x68,0x68,0x68,0x68, + 0x69,0x69,0x69,0x6a,0x65,0x62,0x79,0x78,0x4f,0x25,0x03,0x01,0x03,0x02,0x01, + 0x01,0x02,0x02,0x00,0x00,0x00,0x04,0x03,0x00,0x2f,0x67,0x74,0x74,0x6b,0x69, + 0x69,0x6a,0x6b,0x6c,0x6d,0x6d,0x6d,0x6d,0x6c,0x6b,0x6b,0x6c,0x6c,0x6d,0x6d, + 0x6d,0x6d,0x6d,0x6d,0x6c,0x6c,0x6d,0x6d,0x6d,0x6e,0x6e,0x6d,0x6d,0x6e,0x6e, + 0x6e,0x6d,0x6d,0x6d,0x6d,0x6d,0x6e,0x6f,0x6f,0x6f,0x6e,0x6f,0x6f,0x6f,0x6f, + 0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x70,0x70,0x70,0x70,0x70,0x6f,0x6f,0x6f,0x6e, + 0x6e,0x70,0x70,0x71,0x71,0x71,0x70,0x70,0x6f,0x70,0x70,0x71,0x71,0x71,0x72, + 0x72,0x72,0x72,0x72,0x71,0x71,0x71,0x70,0x70,0x73,0x73,0x71,0x70,0x70,0x71, + 0x71,0x70,0x72,0x73,0x70,0x71,0x72,0x74,0x74,0x73,0x73,0x72,0x72,0x72,0x72, + 0x72,0x72,0x73,0x73,0x73,0x73,0x73,0x73,0x73,0xc8,0x39,0x39,0x3a,0x3a,0x3a, + 0x3b,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3d,0x3d,0x3d,0x3c,0x3c,0x3c,0x3c,0x3d, + 0x3d,0x3d,0x3d,0x3d,0x3d,0x3e,0x3e,0x3e,0x3e,0x3e,0x3e,0x3f,0x40,0x40,0x40, + 0x40,0x40,0x40,0x40,0x40,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41, + 0x41,0x42,0x42,0x42,0x43,0x43,0x43,0x43,0x43,0x42,0x42,0x42,0x42,0x42,0x43, + 0x43,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x45,0x45,0x45,0x45,0x45,0x45, + 0x45,0x46,0x46,0x46,0x46,0x46,0x46,0x47,0x47,0x47,0x47,0x47,0x47,0x48,0x48, + 0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x49, + 0x4a,0x4a,0x4a,0x4a,0x4a,0x4a,0x4b,0x4b,0x4b,0x4b,0x4b,0x4b,0x4b,0x4b,0x4b, + 0x4b,0x4b,0x4c,0x4c,0x4c,0x4c,0x4c,0x4c,0x4d,0x4d,0x4d,0x4d,0x4e,0x4e,0x4e, + 0x4d,0x4d,0x4d,0x4d,0x4d,0x4e,0x4e,0x4e,0x4e,0x4e,0x4f,0x4f,0x4f,0x4e,0x4e, + 0x4e,0x4e,0x4e,0x4e,0x4f,0x50,0x50,0x50,0x50,0x50,0x50,0x50,0x50,0x50,0x50, + 0x51,0x51,0x52,0x53,0x52,0x52,0x52,0x53,0x53,0x53,0x53,0x53,0x52,0x52,0x52, + 0x53,0x53,0x53,0x53,0x54,0x54,0x53,0x53,0x53,0x53,0x53,0x54,0x55,0x55,0x55, + 0x55,0x55,0x55,0x56,0x56,0x56,0x57,0x57,0x57,0x57,0x58,0x58,0x58,0x57,0x58, + 0x58,0x59,0x59,0x59,0x59,0x58,0x58,0x58,0x58,0x58,0x58,0x5a,0x59,0x59,0x5a, + 0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x59,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5b, + 0x5b,0x5c,0x5b,0x5b,0x5b,0x5c,0x5d,0x5e,0x5e,0x5d,0x5d,0x5d,0x5c,0x5c,0x5d, + 0x5d,0x5d,0x5d,0x5d,0x5d,0x5e,0x5e,0x5e,0x5e,0x5e,0x5f,0x5f,0x5e,0x5e,0x5e, + 0x5e,0x5f,0x60,0x60,0x5e,0x5e,0x5f,0x5f,0x5f,0x60,0x60,0x60,0x60,0x60,0x61, + 0x60,0x60,0x61,0x62,0x62,0x63,0x63,0x63,0x62,0x62,0x62,0x62,0x62,0x62,0x62, + 0x62,0x62,0x63,0x64,0x64,0x64,0x64,0x64,0x64,0x64,0x65,0x65,0x65,0x65,0x64, + 0x65,0x66,0x65,0x65,0x65,0x66,0x67,0x66,0x65,0x65,0x67,0x68,0x67,0x66,0x65, + 0x65,0x65,0x66,0x66,0x67,0x67,0x67,0x67,0x67,0x67,0x66,0x67,0x67,0x68,0x68, + 0x68,0x67,0x67,0x67,0x68,0x68,0x68,0x68,0x69,0x69,0x69,0x68,0x69,0x68,0x69, + 0x69,0x69,0x69,0x6a,0x6b,0x6c,0x66,0x62,0x79,0x7a,0x52,0x27,0x03,0x01,0x03, + 0x02,0x02,0x02,0x03,0x03,0x01,0x00,0x01,0x04,0x03,0x00,0x2b,0x62,0x79,0x7b, + 0x6a,0x67,0x69,0x6b,0x6d,0x6d,0x6e,0x6f,0x6e,0x6d,0x6d,0x6b,0x6b,0x6b,0x6c, + 0x6d,0x6d,0x6f,0x6f,0x6e,0x6d,0x6d,0x6d,0x6d,0x6e,0x6e,0x6f,0x6f,0x6e,0x6e, + 0x6f,0x6f,0x6f,0x6e,0x6d,0x6d,0x6d,0x6f,0x70,0x70,0x71,0x72,0x71,0x6f,0x6f, + 0x6f,0x6f,0x70,0x70,0x70,0x70,0x6f,0x70,0x70,0x70,0x70,0x70,0x70,0x70,0x70, + 0x6f,0x6e,0x6f,0x70,0x70,0x71,0x72,0x72,0x71,0x70,0x70,0x70,0x71,0x72,0x72, + 0x72,0x73,0x73,0x73,0x74,0x73,0x73,0x72,0x72,0x71,0x71,0x73,0x73,0x72,0x71, + 0x71,0x73,0x72,0x71,0x72,0x73,0x73,0x73,0x74,0x74,0x74,0x73,0x73,0x72,0x72, + 0x72,0x73,0x74,0x74,0x74,0x74,0x74,0x74,0x74,0x74,0x74,0xc8,0x38,0x38,0x39, + 0x3a,0x3a,0x3b,0x3c,0x3c,0x3c,0x3c,0x3b,0x3b,0x3b,0x3c,0x3d,0x3d,0x3c,0x3c, + 0x3c,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3e,0x3e,0x3e,0x3e,0x3e,0x3f,0x3f,0x40, + 0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41, + 0x41,0x41,0x42,0x42,0x42,0x43,0x43,0x43,0x43,0x43,0x43,0x42,0x42,0x42,0x42, + 0x43,0x43,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x45,0x45,0x45,0x46,0x45, + 0x45,0x46,0x46,0x46,0x46,0x46,0x46,0x46,0x47,0x47,0x48,0x48,0x48,0x48,0x47, + 0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x48, + 0x49,0x4a,0x4b,0x4c,0x4c,0x4b,0x4b,0x4b,0x4c,0x4c,0x4c,0x4c,0x4c,0x4b,0x4b, + 0x4b,0x4b,0x4b,0x4c,0x4c,0x4c,0x4c,0x4c,0x4c,0x4c,0x4d,0x4d,0x4d,0x4e,0x4e, + 0x4e,0x4e,0x4e,0x4e,0x4e,0x4e,0x4e,0x4e,0x4f,0x4f,0x4f,0x4f,0x4f,0x4f,0x4f, + 0x50,0x50,0x50,0x50,0x50,0x50,0x50,0x50,0x50,0x50,0x50,0x51,0x52,0x52,0x51, + 0x51,0x51,0x51,0x51,0x52,0x53,0x53,0x52,0x53,0x53,0x53,0x53,0x53,0x53,0x53, + 0x52,0x53,0x53,0x53,0x54,0x54,0x54,0x54,0x53,0x53,0x53,0x53,0x54,0x55,0x56, + 0x57,0x56,0x55,0x55,0x56,0x56,0x57,0x57,0x57,0x57,0x57,0x58,0x58,0x58,0x57, + 0x57,0x57,0x58,0x59,0x5a,0x5a,0x59,0x59,0x58,0x58,0x59,0x59,0x59,0x5a,0x5a, + 0x59,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a, + 0x5a,0x5b,0x5c,0x5c,0x5c,0x5b,0x5c,0x5d,0x5e,0x5e,0x5e,0x5e,0x5e,0x5d,0x5d, + 0x5e,0x5e,0x5e,0x5e,0x5e,0x5e,0x5e,0x5e,0x60,0x60,0x60,0x60,0x60,0x5f,0x5f, + 0x5f,0x5f,0x60,0x61,0x62,0x62,0x60,0x60,0x60,0x5f,0x5f,0x5f,0x5f,0x5f,0x60, + 0x61,0x62,0x62,0x62,0x62,0x63,0x63,0x64,0x64,0x64,0x63,0x62,0x62,0x62,0x62, + 0x62,0x62,0x63,0x64,0x64,0x65,0x65,0x65,0x65,0x65,0x65,0x65,0x65,0x66,0x66, + 0x65,0x65,0x66,0x67,0x66,0x66,0x66,0x67,0x68,0x67,0x66,0x66,0x68,0x69,0x67, + 0x67,0x66,0x66,0x66,0x66,0x67,0x67,0x67,0x67,0x67,0x67,0x67,0x67,0x68,0x68, + 0x69,0x69,0x69,0x68,0x68,0x68,0x69,0x69,0x69,0x69,0x69,0x69,0x69,0x69,0x69, + 0x69,0x69,0x69,0x6a,0x6b,0x6b,0x6c,0x6d,0x67,0x62,0x7a,0x7b,0x50,0x25,0x03, + 0x00,0x03,0x02,0x02,0x02,0x03,0x03,0x01,0x01,0x02,0x03,0x01,0x00,0x27,0x5b, + 0x7c,0x81,0x6a,0x67,0x6b,0x6d,0x6d,0x6e,0x70,0x70,0x70,0x6f,0x6d,0x6c,0x6c, + 0x6c,0x6d,0x6d,0x6e,0x6f,0x6f,0x6f,0x6e,0x6e,0x6e,0x6e,0x6f,0x6f,0x6f,0x6f, + 0x6e,0x6f,0x70,0x70,0x70,0x70,0x70,0x6f,0x70,0x70,0x71,0x72,0x72,0x73,0x72, + 0x70,0x6f,0x6f,0x70,0x70,0x70,0x70,0x70,0x70,0x70,0x70,0x70,0x70,0x71,0x71, + 0x71,0x71,0x70,0x70,0x70,0x70,0x70,0x71,0x72,0x72,0x71,0x71,0x70,0x71,0x72, + 0x72,0x72,0x72,0x73,0x73,0x74,0x74,0x74,0x73,0x73,0x73,0x72,0x72,0x74,0x74, + 0x73,0x73,0x73,0x74,0x74,0x72,0x72,0x73,0x74,0x74,0x74,0x74,0x74,0x73,0x72, + 0x72,0x72,0x73,0x74,0x74,0x74,0x74,0x74,0x74,0x75,0x75,0x75,0x74,0xc8,0x39, + 0x3a,0x3a,0x3a,0x3c,0x3c,0x3d,0x3d,0x3d,0x3c,0x3c,0x3c,0x3b,0x3c,0x3d,0x3d, + 0x3c,0x3c,0x3c,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3e,0x3f,0x3f,0x3f,0x3f,0x3f, + 0x40,0x40,0x40,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x42, + 0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x43,0x43,0x43,0x43,0x43,0x43,0x42, + 0x42,0x43,0x43,0x44,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x46,0x47, + 0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x48,0x48,0x48,0x48, + 0x48,0x48,0x48,0x48,0x48,0x48,0x49,0x49,0x49,0x49,0x49,0x49,0x49,0x49,0x49, + 0x49,0x49,0x49,0x4a,0x4c,0x4c,0x4c,0x4c,0x4c,0x4c,0x4c,0x4c,0x4c,0x4c,0x4c, + 0x4c,0x4c,0x4c,0x4c,0x4c,0x4c,0x4c,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4e, + 0x4e,0x4f,0x4f,0x4f,0x4f,0x4f,0x4f,0x4f,0x4f,0x50,0x50,0x50,0x50,0x50,0x50, + 0x50,0x50,0x50,0x51,0x52,0x52,0x52,0x52,0x51,0x50,0x50,0x51,0x52,0x52,0x53, + 0x53,0x52,0x52,0x52,0x52,0x52,0x52,0x53,0x53,0x53,0x53,0x53,0x54,0x54,0x54, + 0x53,0x53,0x53,0x53,0x54,0x55,0x56,0x56,0x55,0x55,0x54,0x54,0x55,0x55,0x56, + 0x57,0x57,0x58,0x57,0x56,0x56,0x57,0x57,0x57,0x57,0x57,0x57,0x58,0x59,0x59, + 0x59,0x57,0x55,0x55,0x57,0x57,0x58,0x59,0x59,0x59,0x5a,0x5a,0x5a,0x5a,0x5a, + 0x5a,0x5a,0x5a,0x5a,0x5a,0x5b,0x5b,0x5b,0x5b,0x5b,0x5c,0x5b,0x5b,0x5b,0x5b, + 0x5b,0x5b,0x5b,0x5c,0x5c,0x5c,0x5c,0x5c,0x5d,0x5e,0x5e,0x5e,0x5e,0x5e,0x5e, + 0x5e,0x5e,0x5e,0x5f,0x5f,0x5f,0x5f,0x5f,0x5f,0x5f,0x60,0x61,0x61,0x61,0x61, + 0x61,0x61,0x61,0x61,0x62,0x62,0x63,0x63,0x62,0x62,0x62,0x61,0x61,0x61,0x60, + 0x61,0x61,0x62,0x63,0x63,0x64,0x63,0x63,0x64,0x65,0x65,0x64,0x63,0x63,0x63, + 0x63,0x63,0x63,0x63,0x64,0x65,0x65,0x65,0x65,0x65,0x65,0x65,0x65,0x65,0x65, + 0x66,0x66,0x65,0x64,0x65,0x65,0x65,0x65,0x65,0x65,0x66,0x66,0x65,0x65,0x66, + 0x67,0x68,0x68,0x68,0x68,0x68,0x68,0x68,0x68,0x68,0x69,0x69,0x68,0x68,0x68, + 0x69,0x69,0x69,0x6a,0x69,0x69,0x69,0x69,0x69,0x6a,0x69,0x69,0x6a,0x6b,0x6b, + 0x6b,0x6b,0x6b,0x6b,0x6b,0x6c,0x6d,0x6d,0x6d,0x6e,0x68,0x63,0x7c,0x7b,0x4a, + 0x21,0x03,0x00,0x02,0x02,0x02,0x03,0x03,0x03,0x00,0x01,0x03,0x02,0x00,0x00, + 0x22,0x53,0x7e,0x86,0x6a,0x69,0x6e,0x6d,0x6d,0x6f,0x70,0x70,0x70,0x6f,0x6e, + 0x6d,0x6d,0x6d,0x6e,0x6f,0x70,0x70,0x70,0x70,0x70,0x70,0x6f,0x70,0x70,0x70, + 0x70,0x6f,0x6f,0x6f,0x70,0x71,0x72,0x73,0x73,0x72,0x72,0x71,0x71,0x71,0x71, + 0x71,0x70,0x70,0x70,0x70,0x70,0x71,0x71,0x71,0x72,0x72,0x72,0x72,0x72,0x72, + 0x72,0x73,0x73,0x74,0x73,0x72,0x71,0x71,0x71,0x71,0x72,0x72,0x72,0x72,0x72, + 0x72,0x72,0x72,0x72,0x72,0x72,0x73,0x74,0x74,0x74,0x73,0x73,0x74,0x73,0x73, + 0x74,0x74,0x74,0x74,0x74,0x75,0x75,0x74,0x74,0x74,0x74,0x74,0x75,0x75,0x74, + 0x74,0x73,0x72,0x72,0x73,0x74,0x75,0x75,0x74,0x74,0x75,0x75,0x76,0x75,0x74, + 0xc8,0x3b,0x3b,0x3b,0x3c,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3c,0x3d, + 0x3d,0x3c,0x3c,0x3c,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3f,0x40,0x3f,0x3f, + 0x3f,0x40,0x41,0x40,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x42,0x41,0x41, + 0x41,0x42,0x43,0x42,0x42,0x42,0x42,0x42,0x42,0x43,0x43,0x43,0x43,0x43,0x43, + 0x43,0x43,0x43,0x43,0x44,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x46,0x46, + 0x47,0x47,0x47,0x48,0x48,0x48,0x47,0x47,0x47,0x47,0x47,0x47,0x48,0x48,0x48, + 0x49,0x48,0x48,0x49,0x48,0x48,0x48,0x49,0x4a,0x4a,0x49,0x49,0x4a,0x4a,0x4a, + 0x4a,0x4a,0x4a,0x49,0x4a,0x4b,0x4c,0x4c,0x4c,0x4c,0x4c,0x4c,0x4c,0x4c,0x4c, + 0x4c,0x4c,0x4c,0x4c,0x4c,0x4c,0x4c,0x4c,0x4d,0x4d,0x4e,0x4e,0x4e,0x4e,0x4d, + 0x4e,0x4e,0x4f,0x50,0x50,0x50,0x50,0x50,0x50,0x50,0x50,0x50,0x50,0x50,0x50, + 0x50,0x50,0x50,0x51,0x51,0x52,0x52,0x52,0x52,0x52,0x52,0x51,0x51,0x52,0x53, + 0x53,0x53,0x53,0x53,0x53,0x53,0x53,0x53,0x53,0x53,0x53,0x53,0x53,0x54,0x55, + 0x55,0x55,0x54,0x54,0x54,0x55,0x56,0x57,0x57,0x57,0x56,0x56,0x55,0x55,0x55, + 0x56,0x57,0x57,0x58,0x58,0x57,0x57,0x57,0x57,0x58,0x58,0x58,0x58,0x58,0x58, + 0x59,0x5a,0x5a,0x58,0x56,0x56,0x57,0x57,0x58,0x58,0x59,0x59,0x5a,0x5a,0x5b, + 0x5c,0x5c,0x5a,0x5a,0x5b,0x5b,0x5b,0x5c,0x5c,0x5c,0x5c,0x5c,0x5d,0x5d,0x5d, + 0x5e,0x5e,0x5d,0x5c,0x5c,0x5d,0x5d,0x5d,0x5c,0x5c,0x5d,0x5e,0x5e,0x5e,0x5e, + 0x5e,0x5f,0x5f,0x5f,0x5f,0x60,0x60,0x60,0x61,0x61,0x61,0x60,0x60,0x61,0x61, + 0x61,0x62,0x62,0x62,0x61,0x61,0x62,0x62,0x62,0x62,0x63,0x62,0x62,0x62,0x62, + 0x62,0x62,0x62,0x62,0x63,0x63,0x64,0x65,0x64,0x64,0x64,0x65,0x65,0x65,0x64, + 0x64,0x64,0x64,0x64,0x64,0x64,0x65,0x65,0x65,0x65,0x65,0x65,0x65,0x65,0x65, + 0x65,0x66,0x66,0x66,0x66,0x66,0x67,0x68,0x67,0x67,0x66,0x67,0x68,0x68,0x67, + 0x67,0x68,0x69,0x68,0x69,0x69,0x69,0x69,0x68,0x69,0x69,0x69,0x69,0x69,0x69, + 0x69,0x69,0x6a,0x6a,0x6b,0x6b,0x6a,0x6a,0x69,0x69,0x6a,0x6b,0x6b,0x6a,0x6b, + 0x6c,0x6c,0x6c,0x6c,0x6c,0x6c,0x6c,0x6d,0x6d,0x6d,0x6d,0x6e,0x68,0x64,0x7f, + 0x7b,0x44,0x1c,0x03,0x00,0x01,0x01,0x02,0x03,0x03,0x02,0x00,0x02,0x03,0x03, + 0x00,0x00,0x1c,0x46,0x7b,0x86,0x6a,0x6a,0x71,0x6f,0x6e,0x70,0x70,0x71,0x71, + 0x70,0x6f,0x6f,0x6f,0x70,0x70,0x71,0x70,0x70,0x71,0x71,0x71,0x71,0x71,0x71, + 0x71,0x72,0x71,0x70,0x70,0x70,0x71,0x72,0x74,0x74,0x74,0x74,0x73,0x72,0x71, + 0x71,0x71,0x71,0x70,0x71,0x71,0x71,0x72,0x72,0x72,0x73,0x73,0x73,0x73,0x73, + 0x73,0x73,0x74,0x74,0x74,0x75,0x75,0x74,0x73,0x73,0x73,0x73,0x74,0x74,0x74, + 0x74,0x74,0x73,0x73,0x73,0x73,0x73,0x73,0x74,0x74,0x74,0x74,0x74,0x74,0x75, + 0x74,0x74,0x75,0x75,0x74,0x75,0x76,0x77,0x76,0x74,0x74,0x74,0x74,0x74,0x75, + 0x76,0x76,0x75,0x74,0x74,0x74,0x74,0x74,0x74,0x74,0x75,0x75,0x76,0x76,0x77, + 0x77,0x76,0xc8,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d, + 0x3d,0x3d,0x3d,0x3c,0x3c,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3e,0x3f,0x40, + 0x40,0x40,0x40,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x42,0x42, + 0x42,0x42,0x42,0x43,0x43,0x43,0x43,0x43,0x43,0x43,0x43,0x43,0x43,0x44,0x44, + 0x44,0x44,0x44,0x44,0x44,0x44,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45, + 0x46,0x47,0x47,0x47,0x47,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x48, + 0x48,0x49,0x49,0x49,0x49,0x49,0x49,0x49,0x49,0x49,0x4a,0x4a,0x4a,0x4a,0x4b, + 0x4b,0x4b,0x4b,0x4b,0x4b,0x4a,0x4b,0x4c,0x4c,0x4c,0x4c,0x4c,0x4c,0x4b,0x4b, + 0x4c,0x4c,0x4c,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4e,0x4e,0x4e,0x4e,0x4f,0x4f, + 0x4f,0x4e,0x4e,0x4f,0x50,0x50,0x50,0x50,0x50,0x50,0x50,0x50,0x50,0x50,0x51, + 0x51,0x51,0x51,0x51,0x51,0x51,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x53, + 0x53,0x53,0x54,0x54,0x54,0x54,0x53,0x53,0x53,0x53,0x53,0x54,0x54,0x53,0x54, + 0x55,0x56,0x56,0x56,0x56,0x56,0x56,0x57,0x57,0x57,0x57,0x57,0x57,0x57,0x56, + 0x56,0x56,0x57,0x57,0x57,0x57,0x58,0x58,0x58,0x58,0x58,0x59,0x59,0x59,0x59, + 0x59,0x59,0x5a,0x5a,0x5a,0x5a,0x58,0x58,0x58,0x58,0x58,0x58,0x59,0x5a,0x5a, + 0x5b,0x5c,0x5d,0x5d,0x5b,0x5c,0x5d,0x5c,0x5d,0x5e,0x5e,0x5e,0x5d,0x5e,0x5e, + 0x5e,0x5e,0x5f,0x5f,0x5e,0x5e,0x5e,0x5e,0x5e,0x5e,0x5d,0x5d,0x5e,0x5e,0x5f, + 0x5f,0x5f,0x5f,0x5f,0x60,0x60,0x60,0x61,0x62,0x62,0x62,0x62,0x62,0x61,0x60, + 0x61,0x61,0x62,0x62,0x62,0x62,0x62,0x62,0x62,0x61,0x61,0x62,0x63,0x63,0x63, + 0x63,0x63,0x64,0x64,0x64,0x64,0x64,0x64,0x65,0x65,0x64,0x64,0x65,0x65,0x65, + 0x65,0x65,0x65,0x65,0x65,0x65,0x65,0x65,0x65,0x65,0x65,0x65,0x66,0x66,0x66, + 0x66,0x66,0x66,0x67,0x67,0x67,0x68,0x69,0x6a,0x6a,0x69,0x69,0x69,0x69,0x6a, + 0x69,0x69,0x69,0x6a,0x6b,0x69,0x69,0x69,0x69,0x69,0x69,0x69,0x69,0x6a,0x6a, + 0x6a,0x69,0x69,0x6b,0x6c,0x6c,0x6c,0x6c,0x6b,0x6b,0x6b,0x6b,0x6b,0x6c,0x6c, + 0x6c,0x6d,0x6d,0x6c,0x6c,0x6d,0x6d,0x6d,0x6d,0x6d,0x6d,0x6d,0x6d,0x6e,0x69, + 0x65,0x81,0x7b,0x3d,0x17,0x03,0x00,0x01,0x01,0x02,0x03,0x02,0x01,0x00,0x02, + 0x04,0x03,0x00,0x00,0x14,0x38,0x74,0x86,0x6a,0x6c,0x73,0x70,0x6f,0x70,0x71, + 0x72,0x72,0x72,0x70,0x70,0x70,0x71,0x71,0x72,0x72,0x72,0x73,0x73,0x73,0x73, + 0x73,0x73,0x74,0x74,0x74,0x73,0x71,0x71,0x72,0x74,0x74,0x75,0x74,0x74,0x73, + 0x72,0x72,0x72,0x72,0x72,0x72,0x73,0x73,0x73,0x74,0x74,0x74,0x74,0x74,0x74, + 0x74,0x74,0x74,0x74,0x74,0x75,0x76,0x77,0x77,0x76,0x75,0x74,0x75,0x75,0x76, + 0x76,0x76,0x76,0x75,0x74,0x74,0x74,0x74,0x74,0x74,0x75,0x75,0x76,0x76,0x75, + 0x76,0x77,0x76,0x75,0x77,0x77,0x76,0x77,0x78,0x78,0x78,0x75,0x76,0x76,0x74, + 0x74,0x75,0x77,0x77,0x76,0x76,0x75,0x74,0x74,0x75,0x75,0x74,0x76,0x77,0x77, + 0x78,0x78,0x78,0x78,0xc8,0x3c,0x3c,0x3c,0x3c,0x3b,0x3b,0x3b,0x3c,0x3c,0x3c, + 0x3c,0x3c,0x3c,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3e,0x3e,0x3e,0x3e,0x3e,0x3f, + 0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x42,0x42,0x42,0x42, + 0x42,0x42,0x43,0x43,0x43,0x43,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x43,0x43, + 0x44,0x44,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45, + 0x45,0x45,0x46,0x46,0x47,0x47,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x48, + 0x48,0x49,0x49,0x4a,0x4a,0x4a,0x4a,0x4a,0x4a,0x4a,0x4a,0x4a,0x4a,0x4a,0x4b, + 0x4b,0x4b,0x4c,0x4c,0x4c,0x4c,0x4b,0x4b,0x4c,0x4c,0x4d,0x4d,0x4c,0x4c,0x4c, + 0x4b,0x4c,0x4c,0x4c,0x4d,0x4e,0x4f,0x4e,0x4e,0x4e,0x4e,0x4f,0x4f,0x4f,0x4f, + 0x50,0x50,0x4f,0x4f,0x4f,0x50,0x50,0x50,0x51,0x51,0x51,0x51,0x51,0x51,0x51, + 0x51,0x51,0x52,0x52,0x52,0x52,0x52,0x52,0x53,0x52,0x52,0x52,0x52,0x52,0x52, + 0x53,0x53,0x53,0x54,0x54,0x55,0x55,0x55,0x54,0x55,0x55,0x55,0x55,0x55,0x55, + 0x55,0x55,0x56,0x57,0x57,0x57,0x57,0x57,0x57,0x57,0x57,0x57,0x57,0x57,0x57, + 0x57,0x57,0x57,0x57,0x57,0x57,0x57,0x58,0x58,0x59,0x59,0x59,0x5a,0x5a,0x5a, + 0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5b,0x5b,0x5b,0x5b,0x5a,0x5a,0x5a,0x5a,0x5a, + 0x5a,0x5a,0x5c,0x5d,0x5d,0x5d,0x5c,0x5e,0x5e,0x5d,0x5d,0x5e,0x5e,0x5e,0x5e, + 0x5e,0x5f,0x5f,0x5e,0x5f,0x60,0x60,0x5f,0x5f,0x5f,0x5f,0x5f,0x5e,0x5e,0x5f, + 0x60,0x61,0x61,0x61,0x61,0x61,0x61,0x62,0x62,0x62,0x62,0x62,0x62,0x62,0x62, + 0x62,0x61,0x61,0x62,0x62,0x62,0x63,0x62,0x62,0x62,0x62,0x61,0x60,0x61,0x63, + 0x63,0x63,0x63,0x64,0x65,0x65,0x65,0x65,0x65,0x65,0x65,0x65,0x65,0x65,0x65, + 0x65,0x65,0x65,0x66,0x66,0x66,0x66,0x66,0x65,0x65,0x66,0x66,0x66,0x67,0x67, + 0x67,0x67,0x67,0x67,0x67,0x68,0x68,0x68,0x68,0x69,0x69,0x6a,0x69,0x69,0x69, + 0x69,0x69,0x69,0x69,0x69,0x6a,0x6a,0x69,0x6a,0x6a,0x6a,0x6a,0x6a,0x6a,0x6a, + 0x6b,0x6c,0x6c,0x6b,0x6a,0x6c,0x6d,0x6d,0x6d,0x6d,0x6d,0x6d,0x6c,0x6d,0x6d, + 0x6d,0x6d,0x6d,0x6d,0x6d,0x6d,0x6d,0x6d,0x6d,0x6d,0x6d,0x6e,0x6e,0x6e,0x6e, + 0x6f,0x6a,0x67,0x83,0x7c,0x3a,0x15,0x03,0x00,0x01,0x01,0x03,0x03,0x02,0x01, + 0x01,0x02,0x03,0x03,0x01,0x01,0x0c,0x29,0x6d,0x86,0x6d,0x6d,0x72,0x71,0x71, + 0x72,0x73,0x74,0x74,0x73,0x71,0x71,0x71,0x72,0x72,0x72,0x73,0x74,0x74,0x74, + 0x74,0x74,0x74,0x74,0x75,0x75,0x75,0x75,0x74,0x74,0x74,0x74,0x75,0x74,0x74, + 0x74,0x73,0x72,0x73,0x74,0x74,0x75,0x75,0x74,0x74,0x74,0x74,0x74,0x74,0x74, + 0x74,0x74,0x74,0x75,0x75,0x75,0x75,0x75,0x76,0x77,0x77,0x77,0x76,0x76,0x77, + 0x77,0x78,0x78,0x78,0x78,0x77,0x77,0x76,0x76,0x76,0x76,0x76,0x77,0x78,0x78, + 0x78,0x77,0x77,0x78,0x78,0x77,0x78,0x78,0x78,0x78,0x78,0x78,0x78,0x76,0x77, + 0x77,0x75,0x75,0x77,0x78,0x78,0x78,0x77,0x77,0x77,0x77,0x77,0x76,0x76,0x78, + 0x78,0x78,0x78,0x78,0x78,0x79,0xc8,0x3b,0x3b,0x3b,0x3b,0x3c,0x3c,0x3c,0x3d, + 0x3d,0x3d,0x3d,0x3d,0x3c,0x3d,0x3d,0x3d,0x3d,0x3d,0x3e,0x3e,0x3e,0x3e,0x3e, + 0x3f,0x40,0x41,0x42,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x42,0x42,0x42, + 0x43,0x43,0x43,0x42,0x43,0x43,0x43,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44, + 0x44,0x43,0x44,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45, + 0x45,0x45,0x45,0x46,0x46,0x47,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x48, + 0x48,0x48,0x49,0x4a,0x4a,0x4a,0x4a,0x4a,0x4a,0x4a,0x4a,0x4a,0x4a,0x4a,0x4a, + 0x4b,0x4b,0x4b,0x4b,0x4c,0x4c,0x4c,0x4c,0x4c,0x4c,0x4c,0x4d,0x4e,0x4e,0x4d, + 0x4d,0x4c,0x4c,0x4c,0x4d,0x4d,0x4e,0x4f,0x4f,0x4f,0x4e,0x4e,0x4f,0x4f,0x50, + 0x50,0x50,0x50,0x50,0x50,0x4f,0x4f,0x50,0x50,0x51,0x51,0x51,0x51,0x51,0x51, + 0x51,0x51,0x51,0x52,0x52,0x52,0x52,0x53,0x53,0x53,0x53,0x53,0x53,0x53,0x53, + 0x53,0x53,0x53,0x53,0x53,0x54,0x55,0x55,0x55,0x55,0x55,0x56,0x57,0x57,0x57, + 0x57,0x57,0x57,0x56,0x57,0x57,0x57,0x57,0x57,0x57,0x57,0x57,0x57,0x57,0x57, + 0x57,0x58,0x59,0x59,0x59,0x58,0x57,0x58,0x58,0x59,0x5a,0x59,0x59,0x5a,0x5a, + 0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5b,0x5c,0x5d,0x5d,0x5c,0x5c,0x5b, + 0x5b,0x5b,0x5b,0x5b,0x5c,0x5d,0x5d,0x5d,0x5d,0x5e,0x5f,0x5e,0x5d,0x5e,0x5f, + 0x5f,0x5e,0x5e,0x60,0x5f,0x5e,0x5f,0x60,0x60,0x60,0x60,0x61,0x61,0x61,0x60, + 0x60,0x60,0x62,0x62,0x62,0x62,0x62,0x62,0x62,0x62,0x62,0x62,0x63,0x63,0x63, + 0x63,0x62,0x62,0x62,0x62,0x62,0x63,0x63,0x63,0x64,0x64,0x64,0x63,0x62,0x62, + 0x62,0x64,0x64,0x63,0x64,0x65,0x65,0x66,0x66,0x65,0x65,0x65,0x65,0x66,0x66, + 0x66,0x65,0x65,0x65,0x66,0x67,0x67,0x67,0x67,0x66,0x66,0x66,0x67,0x68,0x67, + 0x68,0x69,0x69,0x68,0x68,0x69,0x69,0x69,0x69,0x69,0x69,0x69,0x6a,0x6b,0x6a, + 0x69,0x69,0x69,0x6a,0x6a,0x69,0x69,0x6a,0x6b,0x6b,0x6b,0x6c,0x6c,0x6c,0x6c, + 0x6c,0x6c,0x6d,0x6d,0x6d,0x6d,0x6c,0x6d,0x6d,0x6d,0x6e,0x6e,0x6e,0x6d,0x6d, + 0x6d,0x6e,0x6e,0x6f,0x6f,0x6e,0x6d,0x6d,0x6e,0x6f,0x6f,0x6f,0x6f,0x6f,0x70, + 0x70,0x70,0x70,0x6b,0x68,0x84,0x7c,0x38,0x13,0x03,0x00,0x01,0x02,0x03,0x03, + 0x02,0x01,0x01,0x02,0x02,0x02,0x02,0x03,0x07,0x1d,0x69,0x87,0x70,0x6d,0x71, + 0x72,0x72,0x73,0x74,0x74,0x74,0x74,0x73,0x72,0x72,0x72,0x72,0x72,0x73,0x74, + 0x74,0x74,0x74,0x74,0x74,0x75,0x75,0x76,0x76,0x76,0x75,0x75,0x75,0x75,0x75, + 0x75,0x74,0x74,0x74,0x74,0x75,0x76,0x77,0x77,0x77,0x76,0x76,0x76,0x76,0x76, + 0x76,0x76,0x76,0x76,0x76,0x77,0x77,0x77,0x76,0x75,0x76,0x77,0x77,0x77,0x77, + 0x77,0x78,0x78,0x78,0x77,0x77,0x78,0x78,0x78,0x78,0x78,0x78,0x78,0x78,0x79, + 0x7a,0x7a,0x79,0x78,0x78,0x78,0x78,0x78,0x7b,0x7a,0x79,0x78,0x78,0x78,0x78, + 0x77,0x78,0x78,0x77,0x78,0x78,0x78,0x78,0x78,0x78,0x78,0x78,0x78,0x78,0x78, + 0x78,0x78,0x79,0x79,0x79,0x79,0x79,0x79,0xc8,0x3d,0x3d,0x3d,0x3d,0x3d,0x3e, + 0x3f,0x40,0x40,0x40,0x3f,0x3f,0x3e,0x3e,0x3e,0x3e,0x3e,0x3e,0x3e,0x3f,0x3f, + 0x3f,0x3f,0x40,0x41,0x41,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x43, + 0x43,0x43,0x43,0x44,0x43,0x43,0x44,0x44,0x44,0x45,0x45,0x45,0x45,0x45,0x45, + 0x45,0x45,0x44,0x44,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45, + 0x45,0x47,0x47,0x47,0x47,0x47,0x48,0x48,0x48,0x49,0x49,0x49,0x49,0x49,0x49, + 0x49,0x49,0x49,0x49,0x4a,0x4a,0x4a,0x4b,0x4b,0x4b,0x4b,0x4b,0x4a,0x4a,0x4a, + 0x4a,0x4b,0x4b,0x4b,0x4b,0x4b,0x4c,0x4c,0x4c,0x4c,0x4c,0x4c,0x4d,0x4e,0x4f, + 0x4f,0x4f,0x4e,0x4e,0x4e,0x4e,0x4f,0x4f,0x50,0x50,0x50,0x50,0x4f,0x4f,0x50, + 0x50,0x50,0x50,0x50,0x51,0x51,0x51,0x50,0x50,0x50,0x51,0x52,0x52,0x52,0x52, + 0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x53,0x53,0x54,0x54,0x54,0x55, + 0x55,0x55,0x55,0x54,0x54,0x54,0x54,0x55,0x55,0x55,0x55,0x55,0x57,0x57,0x57, + 0x58,0x59,0x58,0x57,0x57,0x57,0x57,0x57,0x57,0x57,0x56,0x56,0x56,0x57,0x57, + 0x56,0x57,0x58,0x5a,0x5a,0x5b,0x5a,0x5a,0x59,0x59,0x59,0x5a,0x5b,0x5a,0x5a, + 0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5b,0x5c,0x5d,0x5c,0x5c, + 0x5c,0x5c,0x5c,0x5c,0x5d,0x5d,0x5e,0x5e,0x5d,0x5d,0x5d,0x5e,0x5f,0x5e,0x5d, + 0x5f,0x5f,0x5f,0x5d,0x5e,0x60,0x5e,0x5e,0x5f,0x60,0x60,0x60,0x61,0x62,0x62, + 0x62,0x62,0x62,0x62,0x62,0x63,0x62,0x62,0x62,0x62,0x62,0x62,0x63,0x64,0x64, + 0x64,0x64,0x64,0x63,0x64,0x65,0x65,0x65,0x65,0x65,0x65,0x65,0x65,0x65,0x65, + 0x65,0x65,0x65,0x65,0x65,0x65,0x65,0x65,0x66,0x66,0x66,0x65,0x65,0x66,0x66, + 0x67,0x68,0x67,0x67,0x67,0x67,0x67,0x67,0x68,0x68,0x68,0x67,0x66,0x66,0x67, + 0x69,0x69,0x69,0x69,0x69,0x69,0x69,0x69,0x6a,0x6a,0x6a,0x6a,0x6b,0x6c,0x6d, + 0x6d,0x6d,0x6c,0x6c,0x6c,0x6d,0x6d,0x6c,0x6c,0x6d,0x6d,0x6d,0x6d,0x6e,0x6e, + 0x6d,0x6d,0x6d,0x6e,0x6f,0x70,0x70,0x6f,0x6e,0x6e,0x6e,0x6f,0x6f,0x6f,0x6f, + 0x6e,0x6e,0x6e,0x6f,0x70,0x70,0x70,0x6f,0x6f,0x6f,0x6f,0x70,0x70,0x70,0x70, + 0x71,0x71,0x71,0x71,0x71,0x6c,0x68,0x84,0x7d,0x38,0x12,0x03,0x00,0x02,0x03, + 0x03,0x03,0x02,0x01,0x01,0x00,0x00,0x01,0x03,0x04,0x04,0x17,0x68,0x8a,0x75, + 0x70,0x70,0x71,0x72,0x73,0x73,0x74,0x74,0x74,0x74,0x73,0x73,0x73,0x73,0x74, + 0x74,0x74,0x74,0x74,0x74,0x74,0x74,0x74,0x75,0x76,0x76,0x76,0x75,0x75,0x75, + 0x75,0x76,0x77,0x77,0x77,0x77,0x77,0x78,0x77,0x77,0x75,0x75,0x77,0x78,0x78, + 0x78,0x78,0x78,0x78,0x78,0x78,0x78,0x78,0x78,0x78,0x77,0x77,0x77,0x77,0x77, + 0x77,0x77,0x77,0x77,0x77,0x76,0x75,0x74,0x76,0x78,0x78,0x78,0x78,0x78,0x78, + 0x79,0x7b,0x7b,0x7b,0x7b,0x79,0x78,0x78,0x78,0x79,0x7b,0x7b,0x7a,0x78,0x78, + 0x78,0x78,0x77,0x78,0x79,0x79,0x7a,0x7a,0x7a,0x79,0x78,0x78,0x79,0x79,0x7a, + 0x7a,0x7b,0x7a,0x79,0x78,0x78,0x78,0x79,0x79,0x79,0xc8,0x3d,0x3d,0x3d,0x3d, + 0x3d,0x3d,0x3e,0x3e,0x3e,0x3e,0x3e,0x3e,0x3e,0x3e,0x3e,0x3e,0x3e,0x3e,0x3f, + 0x3f,0x3f,0x3f,0x3f,0x3f,0x40,0x41,0x41,0x42,0x42,0x42,0x42,0x43,0x43,0x42, + 0x43,0x43,0x43,0x43,0x44,0x44,0x44,0x44,0x44,0x44,0x45,0x45,0x45,0x45,0x45, + 0x45,0x45,0x45,0x45,0x45,0x44,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45, + 0x45,0x45,0x47,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x49,0x49,0x4a,0x4a, + 0x4a,0x49,0x49,0x49,0x49,0x4a,0x4a,0x4a,0x4a,0x4b,0x4c,0x4c,0x4c,0x4c,0x4b, + 0x4b,0x4b,0x4b,0x4b,0x4c,0x4c,0x4c,0x4c,0x4c,0x4c,0x4c,0x4c,0x4d,0x4d,0x4e, + 0x4e,0x4f,0x4f,0x4f,0x4f,0x4f,0x4f,0x4f,0x50,0x50,0x50,0x50,0x50,0x50,0x50, + 0x50,0x50,0x50,0x50,0x50,0x51,0x51,0x51,0x51,0x50,0x50,0x51,0x52,0x53,0x53, + 0x53,0x53,0x53,0x53,0x53,0x53,0x53,0x53,0x53,0x53,0x53,0x53,0x54,0x55,0x55, + 0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x56,0x56,0x56,0x56,0x57, + 0x57,0x57,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x59,0x58,0x57,0x57,0x57, + 0x57,0x57,0x58,0x58,0x58,0x59,0x59,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a, + 0x5a,0x5a,0x5b,0x5b,0x5b,0x5c,0x5c,0x5b,0x5b,0x5b,0x5b,0x5c,0x5c,0x5d,0x5d, + 0x5c,0x5c,0x5c,0x5d,0x5e,0x5e,0x5e,0x5f,0x5f,0x5f,0x5e,0x5e,0x5e,0x5e,0x5f, + 0x5e,0x5e,0x5f,0x60,0x5f,0x5e,0x5f,0x60,0x5f,0x5f,0x61,0x62,0x61,0x62,0x62, + 0x62,0x62,0x63,0x63,0x63,0x63,0x63,0x63,0x63,0x63,0x63,0x63,0x63,0x64,0x64, + 0x64,0x65,0x64,0x65,0x64,0x64,0x65,0x65,0x65,0x65,0x65,0x65,0x65,0x65,0x65, + 0x65,0x65,0x65,0x65,0x65,0x65,0x65,0x65,0x65,0x66,0x67,0x66,0x65,0x65,0x66, + 0x68,0x68,0x68,0x69,0x69,0x69,0x69,0x69,0x69,0x69,0x69,0x69,0x69,0x69,0x69, + 0x69,0x69,0x6a,0x69,0x6a,0x6a,0x6a,0x6a,0x6b,0x6b,0x6b,0x6b,0x6c,0x6c,0x6d, + 0x6d,0x6d,0x6d,0x6d,0x6c,0x6c,0x6d,0x6d,0x6d,0x6d,0x6d,0x6d,0x6d,0x6d,0x6d, + 0x6e,0x6e,0x6f,0x6e,0x6e,0x6e,0x6e,0x6f,0x6f,0x6e,0x6e,0x6e,0x6e,0x6f,0x70, + 0x70,0x70,0x70,0x6f,0x6f,0x6f,0x70,0x70,0x70,0x70,0x70,0x70,0x6f,0x70,0x70, + 0x70,0x71,0x71,0x71,0x71,0x71,0x72,0x6d,0x6a,0x86,0x7d,0x38,0x13,0x03,0x01, + 0x02,0x03,0x04,0x04,0x02,0x00,0x02,0x02,0x02,0x02,0x03,0x03,0x01,0x12,0x64, + 0x8a,0x78,0x73,0x70,0x73,0x74,0x74,0x74,0x74,0x74,0x74,0x74,0x74,0x74,0x74, + 0x74,0x74,0x74,0x74,0x75,0x75,0x75,0x75,0x75,0x76,0x76,0x76,0x76,0x76,0x76, + 0x76,0x77,0x77,0x77,0x78,0x78,0x78,0x78,0x78,0x78,0x78,0x78,0x77,0x77,0x78, + 0x78,0x78,0x78,0x78,0x78,0x78,0x78,0x78,0x78,0x78,0x78,0x78,0x78,0x78,0x78, + 0x78,0x78,0x78,0x78,0x78,0x78,0x78,0x78,0x78,0x76,0x78,0x79,0x79,0x79,0x79, + 0x79,0x79,0x7a,0x7b,0x7b,0x7b,0x7a,0x79,0x79,0x78,0x79,0x7a,0x7b,0x7b,0x7a, + 0x79,0x79,0x79,0x78,0x78,0x79,0x7b,0x7b,0x7b,0x7b,0x7b,0x7b,0x7a,0x7a,0x7a, + 0x7b,0x7b,0x7b,0x7b,0x7c,0x7b,0x7b,0x7b,0x7b,0x7b,0x7b,0x7b,0xc8,0x3c,0x3c, + 0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3d,0x3d,0x3d,0x3e,0x3e,0x3e,0x3e,0x3e, + 0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x40,0x41,0x41,0x42,0x42,0x42,0x43,0x43, + 0x43,0x43,0x43,0x43,0x43,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x45,0x45,0x45, + 0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45, + 0x45,0x46,0x46,0x47,0x48,0x49,0x49,0x49,0x49,0x49,0x48,0x48,0x48,0x49,0x49, + 0x4a,0x4b,0x4b,0x49,0x48,0x49,0x4a,0x4a,0x4b,0x4b,0x4b,0x4c,0x4c,0x4c,0x4c, + 0x4c,0x4c,0x4c,0x4c,0x4c,0x4c,0x4c,0x4c,0x4c,0x4d,0x4d,0x4d,0x4d,0x4e,0x4e, + 0x4e,0x4e,0x4e,0x4f,0x4f,0x4f,0x4f,0x4f,0x50,0x50,0x50,0x50,0x50,0x50,0x50, + 0x50,0x50,0x50,0x50,0x50,0x50,0x51,0x51,0x51,0x51,0x51,0x51,0x51,0x52,0x53, + 0x53,0x53,0x53,0x53,0x53,0x53,0x54,0x54,0x54,0x55,0x55,0x54,0x54,0x54,0x55, + 0x55,0x55,0x55,0x54,0x54,0x54,0x55,0x56,0x56,0x56,0x56,0x56,0x57,0x57,0x57, + 0x57,0x57,0x57,0x57,0x57,0x57,0x58,0x58,0x58,0x59,0x59,0x5a,0x5a,0x5a,0x59, + 0x59,0x59,0x59,0x59,0x5a,0x5a,0x58,0x57,0x57,0x58,0x5a,0x5b,0x5b,0x5b,0x5a, + 0x59,0x57,0x5a,0x5d,0x5d,0x5d,0x5d,0x5e,0x5e,0x5d,0x5d,0x5d,0x5e,0x5e,0x5e, + 0x5e,0x5d,0x5c,0x5c,0x5d,0x5e,0x5e,0x5f,0x61,0x62,0x62,0x61,0x60,0x60,0x5f, + 0x5f,0x5f,0x5f,0x5f,0x60,0x60,0x60,0x61,0x61,0x61,0x61,0x61,0x62,0x62,0x62, + 0x62,0x62,0x63,0x63,0x64,0x64,0x64,0x63,0x63,0x62,0x63,0x64,0x64,0x65,0x65, + 0x65,0x65,0x65,0x65,0x65,0x65,0x65,0x65,0x65,0x65,0x65,0x65,0x65,0x65,0x66, + 0x66,0x66,0x65,0x65,0x65,0x65,0x65,0x65,0x65,0x65,0x67,0x69,0x69,0x67,0x65, + 0x65,0x67,0x69,0x69,0x69,0x69,0x69,0x6a,0x6b,0x6b,0x6b,0x6b,0x6c,0x6c,0x6c, + 0x6d,0x6d,0x6d,0x6d,0x6c,0x6b,0x6b,0x6b,0x6c,0x6c,0x6d,0x6d,0x6c,0x6d,0x6d, + 0x6d,0x6d,0x6d,0x6d,0x6c,0x6c,0x6c,0x6c,0x6d,0x6d,0x6e,0x6e,0x6d,0x6d,0x6d, + 0x6c,0x6d,0x6d,0x6f,0x6f,0x6f,0x6f,0x6e,0x6d,0x6d,0x6d,0x6e,0x6e,0x6e,0x6f, + 0x70,0x70,0x70,0x71,0x71,0x70,0x6f,0x6f,0x70,0x70,0x70,0x71,0x72,0x70,0x6f, + 0x6f,0x70,0x70,0x71,0x71,0x71,0x71,0x71,0x72,0x6f,0x6d,0x86,0x7d,0x3c,0x15, + 0x03,0x01,0x02,0x02,0x03,0x05,0x01,0x00,0x02,0x03,0x04,0x03,0x03,0x03,0x00, + 0x0f,0x5f,0x87,0x7b,0x74,0x71,0x74,0x77,0x76,0x76,0x76,0x76,0x76,0x76,0x76, + 0x76,0x76,0x76,0x75,0x76,0x76,0x77,0x78,0x78,0x78,0x78,0x78,0x78,0x77,0x77, + 0x77,0x77,0x78,0x78,0x78,0x78,0x78,0x78,0x78,0x78,0x78,0x78,0x78,0x78,0x78, + 0x78,0x78,0x78,0x78,0x78,0x78,0x79,0x79,0x79,0x79,0x79,0x78,0x78,0x78,0x79, + 0x7a,0x7b,0x7b,0x7b,0x7a,0x7a,0x79,0x7a,0x7a,0x7b,0x7b,0x7a,0x7a,0x7a,0x7a, + 0x7a,0x7a,0x7a,0x7a,0x7a,0x7a,0x7a,0x79,0x79,0x79,0x79,0x79,0x7a,0x7a,0x7b, + 0x7b,0x7b,0x7b,0x7a,0x7a,0x7b,0x7b,0x7b,0x7b,0x7b,0x7c,0x7c,0x7c,0x7c,0x7b, + 0x7b,0x7b,0x7b,0x7b,0x7c,0x7d,0x7d,0x7f,0x7f,0x7e,0x7e,0x7d,0x7d,0x7d,0xc8, + 0x3d,0x3d,0x3c,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3e,0x3e,0x3f, + 0x3f,0x3f,0x40,0x40,0x40,0x40,0x40,0x40,0x41,0x41,0x41,0x41,0x42,0x42,0x43, + 0x43,0x43,0x43,0x43,0x43,0x43,0x43,0x44,0x44,0x45,0x44,0x44,0x44,0x45,0x45, + 0x45,0x45,0x46,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x46,0x46,0x46, + 0x46,0x46,0x46,0x47,0x47,0x47,0x48,0x48,0x48,0x49,0x49,0x49,0x49,0x49,0x49, + 0x49,0x49,0x4a,0x4b,0x4b,0x4a,0x49,0x4a,0x4a,0x4b,0x4b,0x4b,0x4c,0x4c,0x4c, + 0x4c,0x4c,0x4c,0x4c,0x4c,0x4c,0x4c,0x4c,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4e, + 0x4e,0x4e,0x4e,0x4e,0x4f,0x50,0x50,0x50,0x4f,0x50,0x50,0x50,0x50,0x50,0x51, + 0x51,0x51,0x51,0x51,0x51,0x51,0x51,0x51,0x51,0x52,0x52,0x52,0x52,0x51,0x51, + 0x53,0x53,0x53,0x53,0x53,0x53,0x53,0x53,0x54,0x54,0x55,0x55,0x56,0x55,0x55, + 0x55,0x55,0x56,0x56,0x55,0x55,0x55,0x55,0x56,0x57,0x57,0x57,0x57,0x57,0x57, + 0x57,0x57,0x57,0x57,0x57,0x58,0x57,0x58,0x58,0x58,0x58,0x58,0x59,0x5a,0x5a, + 0x5a,0x5a,0x5a,0x5a,0x59,0x5a,0x5b,0x5a,0x5a,0x59,0x5a,0x5a,0x5b,0x5c,0x5c, + 0x5c,0x5b,0x5a,0x5a,0x5c,0x5e,0x5e,0x5e,0x5e,0x5e,0x5f,0x5e,0x5e,0x5e,0x5f, + 0x5f,0x5f,0x5f,0x5e,0x5e,0x5e,0x5e,0x5e,0x5f,0x60,0x60,0x61,0x60,0x5f,0x5f, + 0x5f,0x60,0x60,0x60,0x61,0x61,0x61,0x62,0x62,0x62,0x62,0x62,0x62,0x62,0x62, + 0x62,0x63,0x63,0x63,0x64,0x64,0x64,0x64,0x64,0x64,0x64,0x64,0x64,0x65,0x65, + 0x65,0x65,0x65,0x65,0x65,0x65,0x65,0x65,0x65,0x65,0x65,0x65,0x65,0x65,0x66, + 0x67,0x68,0x68,0x68,0x67,0x66,0x66,0x66,0x66,0x67,0x67,0x66,0x69,0x69,0x6a, + 0x69,0x67,0x69,0x69,0x6b,0x6b,0x6a,0x6a,0x6a,0x6a,0x6b,0x6b,0x6b,0x6b,0x6b, + 0x6c,0x6c,0x6c,0x6d,0x6d,0x6d,0x6d,0x6c,0x6c,0x6c,0x6d,0x6d,0x6d,0x6d,0x6d, + 0x6d,0x6d,0x6e,0x6e,0x6d,0x6d,0x6d,0x6d,0x6d,0x6d,0x6e,0x6e,0x6f,0x6f,0x6e, + 0x6d,0x6d,0x6d,0x6e,0x6f,0x70,0x70,0x70,0x70,0x70,0x70,0x70,0x70,0x70,0x70, + 0x70,0x71,0x72,0x72,0x72,0x72,0x72,0x72,0x71,0x71,0x71,0x71,0x71,0x72,0x72, + 0x70,0x70,0x70,0x70,0x71,0x72,0x72,0x72,0x73,0x73,0x74,0x6f,0x6c,0x84,0x7f, + 0x48,0x1f,0x03,0x01,0x03,0x00,0x01,0x03,0x01,0x00,0x01,0x03,0x04,0x02,0x01, + 0x04,0x00,0x0c,0x5a,0x82,0x7c,0x77,0x72,0x76,0x78,0x78,0x78,0x78,0x78,0x78, + 0x78,0x78,0x77,0x77,0x76,0x75,0x76,0x77,0x78,0x78,0x78,0x78,0x78,0x78,0x78, + 0x78,0x78,0x77,0x77,0x78,0x78,0x78,0x78,0x78,0x78,0x78,0x78,0x79,0x79,0x79, + 0x79,0x79,0x79,0x7a,0x7a,0x7a,0x7a,0x7a,0x7b,0x7b,0x7b,0x7b,0x7a,0x7a,0x7a, + 0x7b,0x7a,0x7a,0x7b,0x7b,0x7b,0x7b,0x7b,0x7b,0x7b,0x7b,0x7c,0x7b,0x7b,0x7b, + 0x7b,0x7b,0x7b,0x7b,0x7b,0x7b,0x7b,0x7b,0x7b,0x7b,0x7b,0x7b,0x7b,0x7b,0x7b, + 0x7b,0x7b,0x7c,0x7c,0x7c,0x7c,0x7c,0x7c,0x7c,0x7c,0x7d,0x7c,0x7d,0x7d,0x7d, + 0x7d,0x7d,0x7c,0x7b,0x7b,0x7c,0x7d,0x7d,0x7e,0x7e,0x7e,0x7e,0x7d,0x7d,0x7d, + 0x7d,0xc8,0x3d,0x3d,0x3d,0x3d,0x3d,0x3e,0x3e,0x3d,0x3d,0x3d,0x3d,0x3d,0x3e, + 0x3f,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x41,0x41,0x41,0x42,0x42,0x42, + 0x42,0x43,0x43,0x43,0x43,0x43,0x43,0x43,0x43,0x44,0x45,0x45,0x45,0x44,0x45, + 0x45,0x45,0x45,0x46,0x46,0x46,0x45,0x45,0x45,0x45,0x46,0x46,0x46,0x46,0x46, + 0x46,0x46,0x46,0x46,0x47,0x47,0x47,0x48,0x48,0x48,0x48,0x48,0x49,0x49,0x49, + 0x49,0x49,0x49,0x4a,0x4a,0x4b,0x4b,0x4b,0x4a,0x4a,0x4b,0x4b,0x4b,0x4c,0x4c, + 0x4c,0x4c,0x4c,0x4c,0x4c,0x4c,0x4d,0x4d,0x4d,0x4e,0x4e,0x4d,0x4d,0x4d,0x4d, + 0x4e,0x4e,0x4e,0x4e,0x4e,0x4f,0x50,0x50,0x50,0x50,0x50,0x50,0x50,0x50,0x50, + 0x51,0x51,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x53,0x53,0x53,0x53, + 0x52,0x52,0x53,0x53,0x53,0x53,0x53,0x53,0x53,0x53,0x54,0x55,0x55,0x56,0x56, + 0x55,0x55,0x56,0x56,0x57,0x56,0x56,0x57,0x56,0x57,0x57,0x57,0x57,0x57,0x57, + 0x57,0x57,0x57,0x58,0x59,0x59,0x58,0x58,0x58,0x58,0x59,0x58,0x58,0x58,0x59, + 0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5b,0x5b,0x5b,0x5b,0x5b,0x5c,0x5c, + 0x5d,0x5d,0x5c,0x5c,0x5c,0x5c,0x5e,0x5f,0x5f,0x5f,0x5f,0x5f,0x5f,0x5f,0x5f, + 0x5f,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60, + 0x5f,0x5f,0x5f,0x61,0x61,0x61,0x62,0x62,0x62,0x62,0x62,0x62,0x62,0x63,0x63, + 0x63,0x62,0x63,0x63,0x64,0x65,0x65,0x64,0x64,0x64,0x64,0x65,0x65,0x65,0x65, + 0x65,0x65,0x66,0x66,0x67,0x67,0x67,0x66,0x65,0x65,0x65,0x65,0x66,0x66,0x66, + 0x67,0x67,0x68,0x69,0x69,0x69,0x69,0x68,0x68,0x68,0x68,0x69,0x69,0x67,0x69, + 0x69,0x6a,0x69,0x69,0x6a,0x6b,0x6c,0x6c,0x6b,0x6a,0x6a,0x6a,0x6b,0x6b,0x6b, + 0x6b,0x6b,0x6c,0x6c,0x6c,0x6c,0x6d,0x6d,0x6d,0x6d,0x6d,0x6d,0x6d,0x6e,0x6d, + 0x6d,0x6e,0x6d,0x6e,0x6e,0x6e,0x6f,0x6e,0x6e,0x6e,0x6d,0x6e,0x6f,0x70,0x70, + 0x70,0x6f,0x6f,0x6f,0x70,0x70,0x70,0x70,0x70,0x71,0x71,0x71,0x71,0x72,0x72, + 0x72,0x73,0x73,0x73,0x73,0x73,0x73,0x73,0x73,0x73,0x73,0x72,0x72,0x72,0x72, + 0x72,0x72,0x71,0x70,0x71,0x72,0x73,0x73,0x74,0x74,0x74,0x74,0x75,0x70,0x6d, + 0x83,0x82,0x57,0x28,0x02,0x01,0x04,0x00,0x00,0x01,0x02,0x02,0x00,0x02,0x04, + 0x01,0x01,0x04,0x00,0x0a,0x52,0x7c,0x7f,0x79,0x72,0x77,0x79,0x78,0x78,0x78, + 0x79,0x79,0x79,0x78,0x78,0x78,0x77,0x77,0x78,0x78,0x78,0x78,0x78,0x78,0x78, + 0x79,0x79,0x79,0x78,0x78,0x78,0x78,0x78,0x78,0x78,0x79,0x79,0x7a,0x7a,0x7a, + 0x7a,0x7b,0x7b,0x7a,0x7a,0x7b,0x7b,0x7b,0x7b,0x7b,0x7b,0x7b,0x7b,0x7b,0x7b, + 0x7b,0x7b,0x7b,0x7a,0x7a,0x7b,0x7b,0x7b,0x7b,0x7b,0x7b,0x7c,0x7c,0x7c,0x7c, + 0x7b,0x7c,0x7d,0x7c,0x7c,0x7c,0x7c,0x7c,0x7c,0x7c,0x7c,0x7c,0x7c,0x7c,0x7d, + 0x7e,0x7d,0x7c,0x7c,0x7d,0x7d,0x7e,0x7e,0x7e,0x7e,0x7d,0x7d,0x7d,0x7d,0x7d, + 0x7d,0x7d,0x7d,0x7d,0x7d,0x7c,0x7c,0x7d,0x7d,0x7e,0x7e,0x7e,0x7e,0x7d,0x7d, + 0x7d,0x7d,0x7d,0xc8,0x3e,0x3e,0x3e,0x3e,0x3f,0x3f,0x3f,0x3e,0x3e,0x3e,0x3e, + 0x3e,0x3f,0x3f,0x40,0x40,0x40,0x40,0x40,0x3f,0x3f,0x40,0x41,0x41,0x41,0x42, + 0x43,0x43,0x43,0x43,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x45,0x45,0x45,0x45, + 0x45,0x45,0x45,0x46,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x46,0x46,0x46,0x46, + 0x46,0x46,0x46,0x46,0x46,0x46,0x46,0x46,0x47,0x48,0x48,0x48,0x48,0x48,0x49, + 0x49,0x4a,0x4a,0x4a,0x4b,0x4b,0x4b,0x4b,0x4b,0x4c,0x4b,0x4b,0x4b,0x4c,0x4c, + 0x4c,0x4c,0x4c,0x4c,0x4c,0x4c,0x4c,0x4d,0x4e,0x4f,0x4f,0x4f,0x4f,0x4f,0x4f, + 0x4f,0x4f,0x4f,0x4f,0x4f,0x4f,0x50,0x50,0x50,0x50,0x50,0x51,0x51,0x51,0x51, + 0x51,0x51,0x51,0x52,0x53,0x53,0x53,0x53,0x53,0x53,0x53,0x53,0x53,0x53,0x53, + 0x54,0x54,0x53,0x53,0x53,0x54,0x55,0x55,0x54,0x54,0x54,0x54,0x54,0x56,0x57, + 0x57,0x57,0x56,0x56,0x57,0x57,0x57,0x57,0x57,0x57,0x57,0x57,0x58,0x58,0x58, + 0x57,0x57,0x57,0x57,0x58,0x59,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a, + 0x59,0x5a,0x5b,0x5b,0x5b,0x5b,0x5b,0x5b,0x5b,0x5c,0x5c,0x5c,0x5c,0x5c,0x5d, + 0x5e,0x5e,0x5e,0x5d,0x5d,0x5d,0x5d,0x5e,0x5f,0x5f,0x5f,0x5f,0x5f,0x5f,0x5f, + 0x5f,0x5f,0x5f,0x60,0x60,0x61,0x61,0x61,0x61,0x61,0x61,0x61,0x61,0x61,0x61, + 0x62,0x62,0x62,0x61,0x62,0x62,0x62,0x62,0x62,0x62,0x62,0x62,0x63,0x63,0x63, + 0x64,0x64,0x64,0x64,0x64,0x65,0x65,0x65,0x65,0x65,0x65,0x64,0x64,0x65,0x65, + 0x66,0x65,0x65,0x66,0x66,0x67,0x67,0x68,0x68,0x67,0x67,0x67,0x67,0x67,0x67, + 0x68,0x68,0x68,0x68,0x68,0x69,0x69,0x69,0x69,0x69,0x69,0x69,0x69,0x6a,0x69, + 0x68,0x68,0x69,0x69,0x69,0x69,0x6a,0x6b,0x6c,0x6b,0x6a,0x6a,0x6b,0x6c,0x6c, + 0x6c,0x6c,0x6c,0x6c,0x6c,0x6c,0x6d,0x6d,0x6d,0x6d,0x6e,0x6e,0x6e,0x6e,0x6e, + 0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x70,0x70,0x70,0x6f,0x6f,0x6f,0x70,0x70, + 0x70,0x71,0x70,0x70,0x70,0x70,0x70,0x70,0x70,0x70,0x70,0x71,0x71,0x71,0x72, + 0x72,0x73,0x73,0x73,0x74,0x74,0x73,0x73,0x73,0x73,0x73,0x73,0x73,0x73,0x72, + 0x71,0x71,0x73,0x74,0x73,0x72,0x73,0x74,0x74,0x74,0x74,0x74,0x74,0x75,0x77, + 0x72,0x6f,0x85,0x86,0x64,0x32,0x03,0x02,0x06,0x03,0x01,0x00,0x03,0x03,0x00, + 0x01,0x03,0x02,0x02,0x03,0x00,0x09,0x49,0x75,0x82,0x7c,0x72,0x76,0x78,0x78, + 0x78,0x79,0x7a,0x7a,0x7a,0x7a,0x7a,0x79,0x79,0x78,0x79,0x79,0x79,0x79,0x79, + 0x79,0x7a,0x7a,0x7b,0x7b,0x7b,0x7a,0x7a,0x7a,0x7a,0x7a,0x7a,0x7a,0x7b,0x7b, + 0x7b,0x7b,0x7b,0x7b,0x7b,0x7b,0x7b,0x7c,0x7c,0x7c,0x7c,0x7c,0x7c,0x7b,0x7b, + 0x7b,0x7b,0x7b,0x7b,0x7c,0x7b,0x7b,0x7b,0x7c,0x7d,0x7d,0x7c,0x7c,0x7c,0x7d, + 0x7c,0x7b,0x7b,0x7c,0x7e,0x7e,0x7d,0x7d,0x7d,0x7d,0x7d,0x7d,0x7e,0x7e,0x7f, + 0x7f,0x7f,0x7f,0x7e,0x7e,0x7d,0x7d,0x7e,0x7e,0x7f,0x7f,0x7e,0x7e,0x7d,0x7d, + 0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7d,0x7d,0x7d,0x7e,0x7e,0x7e,0x7f,0x7f,0x7f, + 0x7f,0x7e,0x7e,0x7e,0x7e,0xc8,0x3f,0x3f,0x3e,0x3f,0x3f,0x40,0x3f,0x3f,0x3f, + 0x3f,0x3f,0x3f,0x3f,0x40,0x40,0x40,0x40,0x40,0x40,0x3f,0x3f,0x40,0x41,0x41, + 0x41,0x42,0x43,0x43,0x43,0x43,0x44,0x45,0x44,0x44,0x44,0x44,0x45,0x45,0x45, + 0x45,0x46,0x46,0x45,0x46,0x47,0x47,0x47,0x47,0x48,0x48,0x48,0x47,0x47,0x47, + 0x46,0x46,0x46,0x46,0x46,0x46,0x46,0x46,0x46,0x46,0x47,0x48,0x48,0x48,0x48, + 0x48,0x49,0x4a,0x4a,0x4b,0x4b,0x4b,0x4c,0x4c,0x4c,0x4c,0x4c,0x4c,0x4c,0x4c, + 0x4c,0x4c,0x4c,0x4c,0x4d,0x4d,0x4d,0x4d,0x4d,0x4e,0x4f,0x50,0x50,0x50,0x50, + 0x50,0x50,0x50,0x50,0x50,0x50,0x4f,0x50,0x50,0x50,0x50,0x51,0x51,0x51,0x51, + 0x51,0x51,0x51,0x51,0x51,0x52,0x53,0x53,0x53,0x53,0x53,0x53,0x53,0x53,0x53, + 0x54,0x54,0x54,0x54,0x53,0x53,0x54,0x55,0x56,0x56,0x55,0x55,0x55,0x55,0x56, + 0x57,0x57,0x57,0x57,0x57,0x57,0x57,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x59, + 0x59,0x58,0x58,0x57,0x57,0x58,0x59,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5b,0x5b, + 0x5b,0x5a,0x5a,0x5b,0x5b,0x5c,0x5c,0x5c,0x5c,0x5c,0x5d,0x5d,0x5d,0x5d,0x5d, + 0x5e,0x5e,0x5e,0x5e,0x5e,0x5e,0x5d,0x5d,0x5e,0x5f,0x5f,0x5f,0x5f,0x5f,0x5f, + 0x5f,0x5f,0x5f,0x5f,0x5f,0x5f,0x60,0x61,0x61,0x61,0x62,0x61,0x61,0x61,0x61, + 0x62,0x62,0x62,0x62,0x63,0x63,0x62,0x62,0x62,0x62,0x62,0x62,0x62,0x63,0x64, + 0x64,0x64,0x65,0x65,0x65,0x65,0x65,0x65,0x66,0x66,0x66,0x66,0x65,0x65,0x65, + 0x65,0x66,0x67,0x67,0x66,0x67,0x67,0x68,0x68,0x69,0x69,0x68,0x68,0x68,0x68, + 0x68,0x69,0x69,0x69,0x69,0x69,0x69,0x69,0x69,0x69,0x69,0x69,0x69,0x6a,0x6b, + 0x6c,0x6a,0x69,0x69,0x69,0x6a,0x6a,0x6b,0x6c,0x6d,0x6d,0x6c,0x6c,0x6c,0x6d, + 0x6d,0x6d,0x6d,0x6d,0x6d,0x6d,0x6d,0x6d,0x6d,0x6d,0x6e,0x6e,0x6f,0x6f,0x6f, + 0x6f,0x70,0x70,0x70,0x70,0x70,0x70,0x70,0x70,0x70,0x71,0x70,0x70,0x70,0x70, + 0x70,0x71,0x71,0x72,0x72,0x71,0x71,0x71,0x71,0x71,0x71,0x71,0x71,0x71,0x71, + 0x72,0x72,0x72,0x73,0x73,0x73,0x74,0x74,0x73,0x73,0x73,0x73,0x73,0x73,0x73, + 0x73,0x72,0x72,0x71,0x74,0x74,0x74,0x74,0x74,0x75,0x76,0x76,0x75,0x74,0x75, + 0x76,0x78,0x73,0x70,0x85,0x88,0x68,0x34,0x02,0x00,0x03,0x04,0x02,0x00,0x02, + 0x03,0x02,0x01,0x01,0x03,0x03,0x03,0x00,0x09,0x43,0x70,0x86,0x7f,0x71,0x77, + 0x7a,0x79,0x79,0x7a,0x7a,0x7b,0x7b,0x7b,0x7b,0x7a,0x7a,0x7b,0x7a,0x7a,0x7a, + 0x7a,0x7a,0x7a,0x7b,0x7b,0x7c,0x7c,0x7c,0x7c,0x7b,0x7b,0x7b,0x7b,0x7b,0x7b, + 0x7b,0x7b,0x7c,0x7c,0x7c,0x7c,0x7b,0x7b,0x7c,0x7c,0x7c,0x7c,0x7c,0x7c,0x7d, + 0x7c,0x7c,0x7b,0x7b,0x7c,0x7d,0x7d,0x7c,0x7c,0x7d,0x7e,0x7e,0x7f,0x7e,0x7d, + 0x7d,0x7e,0x7d,0x7c,0x7c,0x7d,0x7f,0x7f,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7f, + 0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7e,0x7e,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f, + 0x7e,0x7e,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7e,0x7e,0x7f,0x7f,0x7f,0x7f,0x7f, + 0x80,0x80,0x7f,0x7f,0x7f,0x7f,0x7f,0xc8,0x3f,0x3f,0x3f,0x3f,0x40,0x40,0x40, + 0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40, + 0x41,0x41,0x41,0x42,0x43,0x44,0x44,0x44,0x45,0x45,0x45,0x45,0x45,0x45,0x45, + 0x45,0x46,0x46,0x46,0x46,0x46,0x46,0x47,0x47,0x47,0x48,0x48,0x48,0x48,0x48, + 0x48,0x48,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x48,0x48, + 0x49,0x49,0x49,0x4a,0x4a,0x4b,0x4c,0x4c,0x4c,0x4c,0x4c,0x4c,0x4c,0x4c,0x4c, + 0x4c,0x4c,0x4c,0x4c,0x4c,0x4d,0x4e,0x4e,0x4e,0x4e,0x4e,0x4f,0x50,0x50,0x50, + 0x50,0x50,0x50,0x50,0x50,0x50,0x50,0x50,0x50,0x50,0x50,0x51,0x51,0x52,0x52, + 0x52,0x52,0x52,0x52,0x52,0x51,0x51,0x52,0x53,0x53,0x53,0x53,0x53,0x53,0x54, + 0x54,0x54,0x54,0x55,0x55,0x55,0x55,0x55,0x55,0x56,0x56,0x56,0x56,0x56,0x57, + 0x57,0x57,0x57,0x57,0x57,0x57,0x57,0x57,0x57,0x58,0x59,0x59,0x59,0x59,0x59, + 0x59,0x5a,0x5a,0x59,0x58,0x58,0x58,0x59,0x5a,0x5b,0x5c,0x5c,0x5c,0x5c,0x5c, + 0x5c,0x5d,0x5d,0x5c,0x5c,0x5c,0x5c,0x5d,0x5d,0x5c,0x5c,0x5d,0x5e,0x5e,0x5e, + 0x5e,0x5e,0x5e,0x5e,0x5e,0x5e,0x5e,0x5e,0x5e,0x5e,0x5e,0x5f,0x5f,0x5f,0x5f, + 0x5f,0x5f,0x5f,0x5f,0x5f,0x5f,0x5f,0x60,0x60,0x61,0x62,0x62,0x62,0x62,0x62, + 0x62,0x62,0x62,0x62,0x62,0x63,0x64,0x64,0x63,0x62,0x62,0x62,0x62,0x62,0x63, + 0x64,0x65,0x65,0x65,0x65,0x65,0x65,0x66,0x67,0x67,0x67,0x67,0x67,0x67,0x66, + 0x66,0x66,0x67,0x68,0x68,0x68,0x68,0x68,0x68,0x69,0x69,0x69,0x69,0x69,0x69, + 0x69,0x69,0x69,0x6a,0x6b,0x6b,0x6a,0x69,0x69,0x69,0x69,0x69,0x69,0x6a,0x6b, + 0x6c,0x6d,0x6d,0x6d,0x6b,0x6a,0x6a,0x6b,0x6c,0x6d,0x6e,0x6e,0x6e,0x6e,0x6d, + 0x6e,0x6e,0x6d,0x6d,0x6d,0x6d,0x6d,0x6d,0x6d,0x6d,0x6e,0x6f,0x6f,0x70,0x70, + 0x70,0x70,0x70,0x71,0x71,0x71,0x71,0x71,0x70,0x70,0x71,0x72,0x72,0x72,0x71, + 0x71,0x71,0x71,0x72,0x72,0x73,0x73,0x73,0x72,0x72,0x72,0x72,0x72,0x72,0x72, + 0x72,0x73,0x73,0x73,0x73,0x73,0x73,0x73,0x74,0x74,0x74,0x74,0x73,0x73,0x73, + 0x73,0x73,0x73,0x73,0x73,0x73,0x75,0x76,0x75,0x75,0x75,0x76,0x77,0x77,0x76, + 0x75,0x76,0x77,0x78,0x74,0x70,0x86,0x88,0x68,0x34,0x01,0x00,0x02,0x04,0x03, + 0x00,0x01,0x02,0x03,0x01,0x00,0x04,0x06,0x02,0x00,0x09,0x3f,0x6d,0x89,0x81, + 0x71,0x78,0x7b,0x7b,0x7b,0x7b,0x7b,0x7b,0x7b,0x7b,0x7b,0x7b,0x7b,0x7b,0x7b, + 0x7b,0x7b,0x7b,0x7b,0x7b,0x7b,0x7d,0x7e,0x7e,0x7e,0x7e,0x7e,0x7c,0x7b,0x7c, + 0x7c,0x7c,0x7c,0x7d,0x7d,0x7d,0x7d,0x7d,0x7c,0x7c,0x7c,0x7c,0x7c,0x7c,0x7d, + 0x7e,0x7e,0x7e,0x7d,0x7c,0x7c,0x7d,0x7e,0x7f,0x7f,0x7e,0x7f,0x7f,0x7f,0x7f, + 0x7f,0x7f,0x7f,0x7f,0x7f,0x7e,0x7e,0x7f,0x7f,0x7f,0x7f,0x7e,0x7f,0x7f,0x7f, + 0x7f,0x7f,0x80,0x80,0x80,0x80,0x80,0x80,0x7f,0x7f,0x7f,0x7f,0x80,0x80,0x80, + 0x80,0x80,0x80,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x80, + 0x80,0x80,0x82,0x82,0x81,0x81,0x80,0x80,0x80,0xc8,0x3f,0x3f,0x3f,0x40,0x41, + 0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x40,0x40,0x40,0x41,0x41,0x41,0x41, + 0x41,0x41,0x41,0x42,0x42,0x43,0x44,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45, + 0x45,0x45,0x45,0x46,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x48,0x48,0x48,0x48, + 0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x48, + 0x49,0x49,0x4a,0x4b,0x4b,0x4b,0x4b,0x4c,0x4c,0x4c,0x4c,0x4c,0x4d,0x4d,0x4d, + 0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4e,0x4e,0x4f,0x4f,0x4f,0x4f,0x50,0x50, + 0x50,0x50,0x50,0x51,0x51,0x51,0x51,0x51,0x51,0x51,0x50,0x50,0x51,0x51,0x52, + 0x53,0x53,0x53,0x53,0x53,0x53,0x52,0x52,0x52,0x53,0x53,0x54,0x54,0x54,0x54, + 0x54,0x54,0x55,0x55,0x55,0x56,0x56,0x57,0x57,0x57,0x56,0x56,0x56,0x56,0x57, + 0x57,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x59,0x5a,0x5a,0x5a, + 0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5c,0x5d,0x5d,0x5e, + 0x5e,0x5e,0x5e,0x5e,0x5d,0x5d,0x5c,0x5c,0x5c,0x5d,0x5e,0x5d,0x5d,0x5e,0x5e, + 0x5e,0x5f,0x5f,0x5e,0x5e,0x5f,0x5f,0x5e,0x5e,0x5e,0x5e,0x5e,0x5f,0x60,0x61, + 0x62,0x62,0x62,0x62,0x62,0x62,0x61,0x61,0x62,0x62,0x62,0x63,0x63,0x62,0x62, + 0x62,0x62,0x62,0x62,0x62,0x63,0x62,0x63,0x64,0x65,0x64,0x64,0x64,0x64,0x64, + 0x65,0x65,0x65,0x66,0x66,0x66,0x67,0x67,0x67,0x68,0x69,0x69,0x68,0x68,0x68, + 0x68,0x68,0x68,0x69,0x69,0x69,0x69,0x69,0x69,0x69,0x69,0x69,0x69,0x69,0x69, + 0x69,0x69,0x6a,0x6b,0x6c,0x6c,0x6d,0x6d,0x6c,0x6c,0x6c,0x6b,0x6b,0x6b,0x6b, + 0x6c,0x6d,0x6d,0x6d,0x6e,0x6d,0x6d,0x6d,0x6d,0x6d,0x6d,0x6e,0x6f,0x70,0x70, + 0x6f,0x6f,0x70,0x70,0x70,0x70,0x70,0x6f,0x6f,0x6f,0x6f,0x6f,0x70,0x70,0x70, + 0x71,0x71,0x71,0x71,0x71,0x72,0x73,0x73,0x73,0x72,0x72,0x72,0x72,0x72,0x73, + 0x72,0x72,0x72,0x72,0x72,0x73,0x73,0x74,0x74,0x74,0x73,0x74,0x74,0x74,0x74, + 0x74,0x74,0x74,0x75,0x76,0x76,0x75,0x75,0x74,0x74,0x75,0x75,0x76,0x75,0x75, + 0x75,0x75,0x75,0x75,0x75,0x75,0x76,0x77,0x78,0x78,0x77,0x76,0x76,0x78,0x78, + 0x78,0x78,0x77,0x77,0x78,0x78,0x74,0x71,0x86,0x89,0x69,0x35,0x02,0x00,0x02, + 0x03,0x02,0x00,0x00,0x01,0x04,0x02,0x00,0x04,0x06,0x03,0x00,0x09,0x40,0x6e, + 0x8a,0x82,0x72,0x7a,0x7f,0x7d,0x7d,0x7d,0x7c,0x7b,0x7b,0x7b,0x7b,0x7b,0x7c, + 0x7c,0x7d,0x7d,0x7c,0x7c,0x7b,0x7c,0x7d,0x7d,0x7e,0x7f,0x7f,0x7f,0x7f,0x7d, + 0x7b,0x7c,0x7d,0x7c,0x7d,0x7e,0x7e,0x7e,0x7e,0x7e,0x7d,0x7d,0x7d,0x7e,0x7e, + 0x7f,0x7f,0x80,0x80,0x80,0x7f,0x7f,0x7f,0x7f,0x80,0x81,0x80,0x7f,0x7f,0x80, + 0x80,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x80,0x7f,0x7f,0x7f,0x7f,0x7f, + 0x7f,0x80,0x80,0x80,0x80,0x81,0x81,0x81,0x81,0x82,0x82,0x82,0x82,0x82,0x82, + 0x82,0x82,0x82,0x82,0x82,0x82,0x81,0x81,0x81,0x81,0x81,0x82,0x82,0x82,0x82, + 0x82,0x82,0x82,0x82,0x82,0x82,0x82,0x82,0x82,0x82,0x81,0xc8,0x3f,0x3f,0x40, + 0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x40,0x41,0x41,0x41, + 0x42,0x42,0x43,0x43,0x43,0x43,0x43,0x44,0x44,0x45,0x45,0x45,0x45,0x45,0x45, + 0x45,0x45,0x45,0x45,0x46,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x48,0x48,0x48, + 0x48,0x48,0x48,0x48,0x48,0x49,0x49,0x49,0x49,0x4a,0x4a,0x49,0x49,0x49,0x49, + 0x49,0x4a,0x4a,0x4b,0x4c,0x4c,0x4c,0x4c,0x4c,0x4c,0x4c,0x4c,0x4c,0x4d,0x4d, + 0x4e,0x4e,0x4d,0x4d,0x4d,0x4d,0x4e,0x4e,0x4e,0x4e,0x4f,0x50,0x50,0x50,0x50, + 0x50,0x50,0x50,0x50,0x50,0x51,0x51,0x51,0x51,0x51,0x51,0x51,0x51,0x51,0x51, + 0x52,0x52,0x53,0x53,0x53,0x53,0x53,0x53,0x53,0x53,0x53,0x53,0x54,0x54,0x55, + 0x55,0x56,0x56,0x55,0x56,0x56,0x57,0x57,0x57,0x57,0x59,0x58,0x57,0x57,0x56, + 0x57,0x57,0x58,0x59,0x5a,0x5a,0x59,0x58,0x59,0x59,0x59,0x59,0x5a,0x5a,0x5a, + 0x5a,0x5b,0x5a,0x5a,0x5b,0x5b,0x5c,0x5c,0x5b,0x5b,0x5b,0x5b,0x5c,0x5d,0x5d, + 0x5e,0x5e,0x5e,0x5e,0x5e,0x5e,0x5e,0x5d,0x5c,0x5d,0x5e,0x5e,0x5e,0x5e,0x5e, + 0x5f,0x5f,0x60,0x61,0x61,0x60,0x5f,0x5f,0x60,0x60,0x60,0x60,0x60,0x60,0x60, + 0x61,0x62,0x63,0x63,0x63,0x63,0x63,0x63,0x62,0x62,0x63,0x63,0x64,0x65,0x64, + 0x64,0x63,0x64,0x64,0x64,0x64,0x64,0x64,0x64,0x64,0x65,0x65,0x65,0x65,0x65, + 0x65,0x66,0x66,0x67,0x67,0x68,0x68,0x68,0x68,0x68,0x68,0x69,0x69,0x69,0x68, + 0x68,0x68,0x69,0x69,0x69,0x6a,0x6a,0x6a,0x6a,0x6a,0x6a,0x6a,0x6a,0x69,0x69, + 0x69,0x69,0x6a,0x6b,0x6c,0x6d,0x6d,0x6d,0x6d,0x6d,0x6d,0x6d,0x6d,0x6d,0x6d, + 0x6d,0x6d,0x6d,0x6e,0x6e,0x6e,0x6e,0x6e,0x6f,0x6e,0x6d,0x6d,0x6e,0x70,0x70, + 0x70,0x70,0x70,0x70,0x71,0x71,0x71,0x71,0x71,0x70,0x70,0x70,0x70,0x70,0x71, + 0x71,0x72,0x72,0x73,0x73,0x72,0x73,0x74,0x74,0x74,0x74,0x74,0x74,0x74,0x74, + 0x74,0x73,0x73,0x74,0x74,0x74,0x74,0x74,0x74,0x74,0x74,0x74,0x74,0x74,0x75, + 0x76,0x76,0x76,0x76,0x77,0x77,0x78,0x78,0x78,0x77,0x76,0x76,0x76,0x77,0x78, + 0x78,0x78,0x78,0x78,0x77,0x77,0x77,0x78,0x78,0x79,0x79,0x78,0x78,0x77,0x78, + 0x78,0x79,0x79,0x79,0x78,0x78,0x78,0x79,0x75,0x73,0x88,0x8a,0x6d,0x38,0x03, + 0x00,0x03,0x02,0x02,0x03,0x01,0x01,0x04,0x02,0x00,0x03,0x05,0x05,0x00,0x09, + 0x42,0x71,0x8a,0x82,0x74,0x7b,0x7f,0x7e,0x7e,0x7e,0x7d,0x7c,0x7b,0x7b,0x7c, + 0x7c,0x7d,0x7e,0x7e,0x7f,0x7e,0x7d,0x7d,0x7d,0x7d,0x7e,0x7f,0x7f,0x7f,0x7f, + 0x7f,0x7e,0x7d,0x7d,0x7e,0x7e,0x7e,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f, + 0x7f,0x7f,0x80,0x81,0x82,0x82,0x82,0x82,0x81,0x80,0x80,0x81,0x82,0x81,0x81, + 0x81,0x81,0x82,0x82,0x82,0x82,0x82,0x82,0x82,0x83,0x83,0x82,0x7f,0x80,0x80, + 0x80,0x81,0x81,0x82,0x82,0x82,0x82,0x82,0x82,0x82,0x82,0x82,0x83,0x84,0x84, + 0x84,0x84,0x83,0x83,0x83,0x83,0x84,0x83,0x82,0x82,0x82,0x82,0x82,0x83,0x83, + 0x83,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x83,0x83,0x83,0x82,0x82,0xc8,0x40, + 0x40,0x40,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41, + 0x41,0x42,0x42,0x43,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x45,0x45,0x45,0x45, + 0x45,0x45,0x45,0x45,0x46,0x46,0x47,0x47,0x48,0x47,0x47,0x47,0x47,0x48,0x48, + 0x48,0x48,0x48,0x48,0x49,0x49,0x49,0x49,0x4a,0x4a,0x4a,0x4b,0x4a,0x4a,0x4a, + 0x4a,0x4b,0x4b,0x4b,0x4c,0x4c,0x4c,0x4c,0x4c,0x4c,0x4c,0x4c,0x4c,0x4c,0x4d, + 0x4d,0x4e,0x4f,0x4f,0x4e,0x4e,0x4e,0x4e,0x4f,0x4f,0x4f,0x4f,0x4f,0x50,0x50, + 0x50,0x51,0x50,0x50,0x50,0x50,0x50,0x51,0x51,0x51,0x51,0x52,0x52,0x52,0x52, + 0x51,0x51,0x51,0x52,0x53,0x53,0x54,0x54,0x54,0x55,0x55,0x55,0x55,0x56,0x56, + 0x56,0x56,0x57,0x57,0x57,0x57,0x57,0x57,0x57,0x58,0x58,0x58,0x5a,0x59,0x58, + 0x57,0x57,0x57,0x58,0x59,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a, + 0x5a,0x5b,0x5c,0x5b,0x5b,0x5b,0x5c,0x5d,0x5d,0x5d,0x5d,0x5d,0x5d,0x5d,0x5d, + 0x5d,0x5d,0x5e,0x5e,0x5e,0x5e,0x5e,0x5e,0x5e,0x5e,0x5d,0x5e,0x5f,0x5f,0x5f, + 0x5f,0x60,0x61,0x61,0x62,0x62,0x62,0x61,0x61,0x61,0x61,0x62,0x62,0x62,0x62, + 0x62,0x62,0x62,0x63,0x64,0x64,0x64,0x64,0x64,0x64,0x64,0x64,0x64,0x64,0x65, + 0x65,0x65,0x65,0x65,0x65,0x65,0x65,0x65,0x65,0x65,0x65,0x66,0x67,0x67,0x67, + 0x68,0x68,0x68,0x68,0x68,0x69,0x69,0x69,0x69,0x69,0x69,0x69,0x69,0x68,0x68, + 0x68,0x68,0x68,0x68,0x69,0x6a,0x6b,0x6b,0x6b,0x6b,0x6b,0x6b,0x6b,0x6b,0x6b, + 0x6b,0x6b,0x6b,0x6b,0x6b,0x6c,0x6d,0x6d,0x6e,0x6e,0x6e,0x6e,0x6e,0x6f,0x70, + 0x70,0x70,0x70,0x70,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x70,0x6f,0x6e,0x6e,0x6f, + 0x70,0x70,0x70,0x70,0x70,0x71,0x72,0x73,0x73,0x73,0x73,0x73,0x72,0x72,0x72, + 0x72,0x72,0x73,0x74,0x74,0x74,0x74,0x74,0x74,0x74,0x75,0x75,0x74,0x74,0x74, + 0x74,0x75,0x74,0x74,0x74,0x74,0x75,0x75,0x75,0x75,0x75,0x75,0x75,0x76,0x76, + 0x76,0x76,0x76,0x77,0x77,0x78,0x78,0x78,0x78,0x78,0x78,0x78,0x78,0x78,0x78, + 0x78,0x79,0x79,0x7a,0x79,0x78,0x78,0x78,0x78,0x79,0x7a,0x7b,0x7b,0x79,0x78, + 0x78,0x78,0x79,0x7a,0x7b,0x7b,0x7b,0x7a,0x7a,0x7b,0x78,0x76,0x88,0x8c,0x76, + 0x40,0x05,0x03,0x07,0x01,0x03,0x06,0x03,0x01,0x03,0x02,0x00,0x00,0x03,0x07, + 0x00,0x07,0x46,0x76,0x8b,0x84,0x76,0x7b,0x7f,0x7e,0x7e,0x7e,0x7d,0x7d,0x7d, + 0x7d,0x7d,0x7e,0x7f,0x7f,0x7f,0x80,0x7f,0x7f,0x7f,0x7e,0x7e,0x7f,0x7f,0x7f, + 0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x80,0x80,0x81,0x82,0x82,0x81,0x81, + 0x81,0x81,0x82,0x82,0x82,0x82,0x82,0x83,0x83,0x82,0x81,0x81,0x81,0x81,0x82, + 0x82,0x82,0x82,0x82,0x82,0x83,0x83,0x82,0x82,0x82,0x83,0x83,0x84,0x82,0x81, + 0x81,0x82,0x82,0x82,0x83,0x83,0x83,0x84,0x83,0x83,0x83,0x82,0x82,0x82,0x83, + 0x85,0x85,0x85,0x84,0x84,0x84,0x84,0x84,0x85,0x85,0x84,0x84,0x84,0x84,0x84, + 0x85,0x85,0x85,0x85,0x86,0x86,0x85,0x85,0x85,0x85,0x84,0x84,0x84,0x83,0x83, + 0xc8,0x41,0x41,0x41,0x41,0x41,0x42,0x42,0x41,0x41,0x41,0x41,0x42,0x42,0x41, + 0x41,0x41,0x41,0x42,0x42,0x43,0x43,0x44,0x44,0x44,0x44,0x44,0x45,0x45,0x45, + 0x45,0x45,0x45,0x45,0x45,0x45,0x46,0x46,0x47,0x48,0x48,0x48,0x47,0x47,0x48, + 0x48,0x48,0x48,0x48,0x48,0x48,0x49,0x4a,0x49,0x4a,0x4a,0x4a,0x4b,0x4b,0x4b, + 0x4a,0x4a,0x4b,0x4b,0x4b,0x4c,0x4c,0x4c,0x4d,0x4d,0x4c,0x4c,0x4d,0x4d,0x4d, + 0x4d,0x4d,0x4e,0x4e,0x4f,0x4f,0x4f,0x4f,0x4f,0x50,0x50,0x50,0x50,0x50,0x50, + 0x50,0x50,0x51,0x52,0x50,0x50,0x50,0x50,0x50,0x51,0x52,0x52,0x52,0x52,0x53, + 0x53,0x53,0x52,0x52,0x52,0x53,0x53,0x54,0x55,0x55,0x55,0x56,0x56,0x56,0x57, + 0x57,0x57,0x57,0x57,0x57,0x57,0x57,0x57,0x57,0x58,0x58,0x59,0x59,0x59,0x5a, + 0x5a,0x59,0x57,0x57,0x57,0x58,0x59,0x5a,0x5a,0x5b,0x5a,0x5a,0x5b,0x5b,0x5a, + 0x5a,0x5b,0x5c,0x5c,0x5d,0x5c,0x5c,0x5c,0x5d,0x5d,0x5e,0x5e,0x5e,0x5e,0x5e, + 0x5e,0x5e,0x5e,0x5e,0x5e,0x5e,0x5e,0x5e,0x5f,0x5f,0x5f,0x5f,0x5f,0x5f,0x60, + 0x61,0x61,0x61,0x61,0x62,0x62,0x62,0x63,0x62,0x62,0x62,0x62,0x62,0x63,0x63, + 0x63,0x63,0x62,0x63,0x63,0x64,0x64,0x64,0x64,0x64,0x64,0x64,0x64,0x64,0x64, + 0x65,0x65,0x65,0x65,0x65,0x65,0x65,0x65,0x65,0x65,0x66,0x67,0x68,0x68,0x68, + 0x68,0x68,0x69,0x69,0x69,0x69,0x69,0x69,0x69,0x69,0x69,0x69,0x69,0x69,0x69, + 0x68,0x68,0x69,0x69,0x69,0x69,0x6a,0x6a,0x6b,0x6c,0x6b,0x6c,0x6c,0x6c,0x6c, + 0x6c,0x6c,0x6c,0x6c,0x6c,0x6c,0x6d,0x6d,0x6d,0x6e,0x6f,0x6e,0x6e,0x6e,0x6e, + 0x6f,0x70,0x70,0x71,0x71,0x70,0x70,0x70,0x70,0x70,0x70,0x71,0x71,0x71,0x70, + 0x70,0x71,0x73,0x73,0x72,0x71,0x72,0x73,0x74,0x74,0x74,0x74,0x74,0x74,0x74, + 0x73,0x73,0x74,0x74,0x74,0x74,0x74,0x74,0x74,0x74,0x74,0x75,0x76,0x76,0x75, + 0x75,0x75,0x75,0x76,0x76,0x75,0x75,0x76,0x76,0x76,0x76,0x76,0x76,0x76,0x77, + 0x77,0x78,0x77,0x76,0x77,0x77,0x78,0x78,0x78,0x78,0x78,0x78,0x79,0x79,0x79, + 0x79,0x78,0x78,0x79,0x7a,0x7a,0x7a,0x79,0x79,0x79,0x7a,0x7b,0x7b,0x7c,0x7b, + 0x7b,0x7a,0x79,0x79,0x7a,0x7b,0x7c,0x7d,0x7c,0x7b,0x7b,0x7b,0x79,0x77,0x85, + 0x8a,0x7e,0x45,0x04,0x03,0x06,0x00,0x01,0x05,0x02,0x00,0x02,0x02,0x02,0x00, + 0x02,0x07,0x00,0x07,0x46,0x77,0x8c,0x86,0x78,0x7b,0x7e,0x7e,0x7e,0x7f,0x7e, + 0x7e,0x7e,0x7f,0x7f,0x7f,0x80,0x81,0x81,0x81,0x80,0x80,0x80,0x7f,0x7f,0x7f, + 0x7f,0x80,0x80,0x80,0x80,0x81,0x81,0x81,0x81,0x82,0x82,0x82,0x83,0x83,0x83, + 0x83,0x83,0x83,0x83,0x83,0x82,0x82,0x82,0x83,0x83,0x83,0x82,0x82,0x82,0x82, + 0x82,0x82,0x83,0x84,0x83,0x83,0x83,0x84,0x84,0x83,0x82,0x82,0x82,0x83,0x84, + 0x83,0x83,0x83,0x83,0x84,0x84,0x84,0x84,0x85,0x86,0x85,0x85,0x85,0x84,0x83, + 0x83,0x84,0x85,0x85,0x85,0x85,0x85,0x85,0x85,0x84,0x85,0x85,0x85,0x86,0x85, + 0x85,0x85,0x86,0x86,0x86,0x86,0x86,0x86,0x86,0x86,0x86,0x86,0x85,0x85,0x85, + 0x84,0x85,0xc8,0x41,0x41,0x42,0x42,0x42,0x42,0x42,0x41,0x41,0x41,0x42,0x42, + 0x42,0x41,0x41,0x41,0x41,0x42,0x42,0x43,0x43,0x43,0x44,0x44,0x44,0x45,0x45, + 0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x46,0x46,0x46,0x47,0x48,0x48,0x48,0x48, + 0x48,0x48,0x48,0x48,0x48,0x49,0x49,0x49,0x4a,0x4a,0x4a,0x4a,0x4a,0x4b,0x4b, + 0x4b,0x4b,0x4b,0x4b,0x4b,0x4b,0x4c,0x4c,0x4c,0x4c,0x4d,0x4d,0x4d,0x4d,0x4d, + 0x4e,0x4e,0x4e,0x4e,0x4e,0x4f,0x4f,0x4f,0x4f,0x4f,0x50,0x50,0x50,0x50,0x50, + 0x50,0x50,0x50,0x51,0x52,0x53,0x51,0x50,0x51,0x51,0x51,0x52,0x52,0x53,0x53, + 0x53,0x53,0x53,0x53,0x53,0x53,0x53,0x53,0x54,0x55,0x55,0x56,0x56,0x56,0x57, + 0x57,0x57,0x57,0x57,0x57,0x57,0x57,0x57,0x57,0x58,0x58,0x59,0x59,0x59,0x5a, + 0x5a,0x5a,0x5a,0x59,0x59,0x58,0x58,0x58,0x59,0x5a,0x5a,0x5b,0x5b,0x5b,0x5c, + 0x5c,0x5b,0x5b,0x5c,0x5d,0x5d,0x5d,0x5d,0x5d,0x5d,0x5d,0x5e,0x5e,0x5e,0x5e, + 0x5e,0x5f,0x5f,0x5f,0x5e,0x5e,0x5e,0x5f,0x5f,0x60,0x61,0x61,0x61,0x61,0x61, + 0x61,0x62,0x62,0x62,0x62,0x62,0x62,0x63,0x63,0x63,0x63,0x62,0x62,0x62,0x63, + 0x64,0x64,0x64,0x64,0x64,0x65,0x65,0x65,0x64,0x65,0x65,0x65,0x65,0x65,0x65, + 0x65,0x65,0x65,0x65,0x65,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x67,0x68,0x69, + 0x69,0x69,0x69,0x69,0x69,0x69,0x69,0x69,0x69,0x69,0x69,0x69,0x69,0x69,0x69, + 0x69,0x69,0x69,0x69,0x69,0x6a,0x6b,0x6b,0x6b,0x6b,0x6c,0x6c,0x6c,0x6d,0x6d, + 0x6d,0x6d,0x6d,0x6d,0x6d,0x6d,0x6d,0x6d,0x6d,0x6d,0x6e,0x6e,0x6f,0x6f,0x6e, + 0x6e,0x6e,0x6f,0x70,0x70,0x71,0x71,0x71,0x71,0x70,0x71,0x72,0x72,0x73,0x74, + 0x73,0x72,0x71,0x73,0x74,0x74,0x74,0x73,0x74,0x74,0x74,0x74,0x74,0x74,0x74, + 0x74,0x74,0x74,0x74,0x74,0x74,0x74,0x75,0x75,0x75,0x75,0x75,0x75,0x76,0x76, + 0x76,0x76,0x76,0x76,0x76,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77, + 0x78,0x78,0x78,0x78,0x78,0x77,0x77,0x78,0x78,0x78,0x78,0x78,0x78,0x79,0x79, + 0x79,0x7a,0x7a,0x79,0x79,0x7a,0x7a,0x7a,0x7a,0x7a,0x7a,0x7b,0x7b,0x7b,0x7b, + 0x7c,0x7d,0x7d,0x7b,0x7b,0x7a,0x7b,0x7d,0x7e,0x7e,0x7e,0x7d,0x7c,0x7c,0x7a, + 0x78,0x82,0x88,0x85,0x4b,0x03,0x00,0x03,0x00,0x01,0x03,0x00,0x00,0x01,0x03, + 0x03,0x01,0x02,0x06,0x00,0x07,0x45,0x76,0x8d,0x87,0x79,0x7c,0x7f,0x7f,0x7f, + 0x7f,0x7f,0x7f,0x7f,0x80,0x80,0x81,0x82,0x82,0x82,0x82,0x81,0x81,0x81,0x81, + 0x80,0x80,0x80,0x81,0x81,0x81,0x82,0x82,0x83,0x83,0x83,0x83,0x84,0x84,0x85, + 0x85,0x85,0x85,0x85,0x85,0x85,0x84,0x84,0x83,0x83,0x83,0x83,0x83,0x83,0x82, + 0x82,0x83,0x84,0x84,0x85,0x85,0x84,0x84,0x84,0x85,0x85,0x84,0x84,0x83,0x82, + 0x83,0x84,0x85,0x85,0x85,0x85,0x85,0x85,0x85,0x86,0x86,0x86,0x86,0x86,0x86, + 0x85,0x84,0x85,0x85,0x85,0x86,0x86,0x86,0x86,0x86,0x86,0x85,0x85,0x85,0x86, + 0x86,0x86,0x86,0x86,0x86,0x87,0x87,0x87,0x87,0x86,0x86,0x86,0x86,0x86,0x86, + 0x86,0x86,0x86,0x86,0xc8,0x42,0x42,0x43,0x43,0x43,0x43,0x42,0x41,0x41,0x41, + 0x41,0x42,0x42,0x42,0x41,0x41,0x42,0x42,0x42,0x43,0x43,0x43,0x44,0x44,0x45, + 0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x46,0x46,0x47,0x47,0x48,0x48, + 0x48,0x48,0x48,0x48,0x48,0x48,0x49,0x49,0x49,0x4a,0x4a,0x4a,0x4b,0x4b,0x4b, + 0x4b,0x4b,0x4b,0x4b,0x4c,0x4c,0x4c,0x4c,0x4c,0x4c,0x4c,0x4d,0x4d,0x4d,0x4e, + 0x4e,0x4f,0x4f,0x4f,0x4f,0x4f,0x4f,0x50,0x50,0x50,0x4f,0x4f,0x50,0x50,0x51, + 0x50,0x50,0x50,0x50,0x50,0x51,0x52,0x53,0x52,0x51,0x52,0x53,0x52,0x52,0x53, + 0x53,0x53,0x54,0x54,0x54,0x54,0x54,0x54,0x54,0x55,0x55,0x56,0x56,0x56,0x56, + 0x57,0x57,0x57,0x57,0x57,0x57,0x57,0x58,0x58,0x58,0x58,0x58,0x59,0x59,0x59, + 0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x59,0x59,0x59,0x5a,0x5a,0x5b,0x5c, + 0x5d,0x5d,0x5d,0x5c,0x5c,0x5d,0x5d,0x5e,0x5e,0x5e,0x5e,0x5d,0x5e,0x5e,0x5e, + 0x5e,0x5f,0x60,0x61,0x62,0x61,0x60,0x60,0x60,0x61,0x62,0x62,0x62,0x62,0x62, + 0x62,0x62,0x62,0x62,0x62,0x62,0x62,0x62,0x62,0x62,0x62,0x62,0x62,0x62,0x62, + 0x63,0x64,0x64,0x64,0x64,0x64,0x65,0x65,0x65,0x65,0x65,0x65,0x66,0x66,0x66, + 0x66,0x66,0x66,0x66,0x67,0x67,0x67,0x68,0x68,0x68,0x67,0x66,0x65,0x66,0x67, + 0x67,0x67,0x67,0x66,0x65,0x66,0x69,0x69,0x69,0x69,0x69,0x6a,0x6a,0x6a,0x6a, + 0x6b,0x6b,0x6b,0x6b,0x6b,0x6b,0x6d,0x6d,0x6d,0x6d,0x6d,0x6d,0x6d,0x6d,0x6d, + 0x6d,0x6e,0x6d,0x6d,0x6d,0x6d,0x6d,0x6e,0x6e,0x6e,0x6e,0x6d,0x6e,0x6e,0x6f, + 0x70,0x70,0x6f,0x6e,0x6f,0x6f,0x70,0x70,0x70,0x71,0x71,0x72,0x74,0x74,0x72, + 0x73,0x74,0x72,0x70,0x70,0x73,0x74,0x74,0x74,0x72,0x73,0x74,0x74,0x74,0x74, + 0x74,0x74,0x75,0x74,0x74,0x74,0x74,0x74,0x75,0x75,0x75,0x76,0x76,0x76,0x76, + 0x76,0x76,0x76,0x76,0x76,0x76,0x77,0x77,0x78,0x78,0x78,0x78,0x78,0x78,0x78, + 0x78,0x78,0x78,0x78,0x78,0x79,0x79,0x79,0x79,0x7a,0x7a,0x7a,0x7a,0x7a,0x79, + 0x79,0x7a,0x7a,0x7b,0x7b,0x7b,0x7b,0x7b,0x7b,0x7b,0x7b,0x7b,0x7b,0x7c,0x7c, + 0x7c,0x7c,0x7d,0x7e,0x7f,0x7d,0x7b,0x7b,0x7c,0x7e,0x7f,0x7f,0x7f,0x7e,0x7d, + 0x7d,0x7b,0x7a,0x81,0x87,0x8a,0x4e,0x01,0x00,0x02,0x03,0x03,0x00,0x00,0x00, + 0x01,0x03,0x05,0x03,0x01,0x02,0x00,0x0a,0x44,0x74,0x8e,0x88,0x79,0x7e,0x81, + 0x82,0x82,0x82,0x82,0x82,0x82,0x82,0x81,0x82,0x82,0x82,0x82,0x82,0x82,0x82, + 0x82,0x82,0x81,0x81,0x82,0x82,0x82,0x83,0x84,0x84,0x85,0x85,0x85,0x84,0x84, + 0x85,0x85,0x85,0x85,0x85,0x85,0x84,0x85,0x86,0x86,0x85,0x85,0x84,0x84,0x85, + 0x85,0x85,0x85,0x86,0x86,0x87,0x86,0x84,0x84,0x84,0x85,0x86,0x86,0x86,0x86, + 0x85,0x84,0x85,0x86,0x86,0x86,0x86,0x86,0x86,0x86,0x86,0x86,0x86,0x87,0x87, + 0x87,0x87,0x87,0x87,0x87,0x87,0x87,0x87,0x88,0x88,0x89,0x88,0x88,0x87,0x86, + 0x86,0x88,0x88,0x87,0x87,0x87,0x87,0x88,0x88,0x89,0x88,0x87,0x87,0x87,0x88, + 0x88,0x87,0x87,0x87,0x87,0x87,0xc8,0x44,0x44,0x43,0x42,0x42,0x42,0x42,0x42, + 0x42,0x42,0x42,0x42,0x41,0x41,0x41,0x42,0x42,0x42,0x43,0x44,0x44,0x44,0x44, + 0x45,0x45,0x45,0x45,0x45,0x45,0x46,0x46,0x46,0x46,0x46,0x47,0x47,0x48,0x48, + 0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x49,0x4a,0x49,0x4a,0x4a,0x4a,0x4a,0x4b, + 0x4b,0x4c,0x4b,0x4b,0x4c,0x4c,0x4c,0x4c,0x4c,0x4c,0x4c,0x4d,0x4e,0x4e,0x4e, + 0x4e,0x4f,0x4f,0x4f,0x4f,0x50,0x50,0x50,0x50,0x50,0x50,0x50,0x4f,0x50,0x50, + 0x51,0x51,0x51,0x50,0x50,0x50,0x50,0x51,0x52,0x53,0x53,0x53,0x53,0x53,0x53, + 0x53,0x53,0x53,0x54,0x54,0x54,0x54,0x55,0x55,0x56,0x55,0x56,0x56,0x56,0x56, + 0x56,0x57,0x57,0x57,0x57,0x57,0x57,0x57,0x58,0x58,0x59,0x59,0x58,0x59,0x59, + 0x59,0x59,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5b,0x5b,0x5a,0x5a,0x5a,0x5a,0x5b, + 0x5c,0x5d,0x5e,0x5d,0x5d,0x5c,0x5d,0x5d,0x5e,0x5e,0x5e,0x5e,0x5e,0x5e,0x5e, + 0x5f,0x5e,0x5e,0x5f,0x61,0x62,0x62,0x62,0x62,0x61,0x62,0x62,0x62,0x63,0x63, + 0x63,0x63,0x62,0x62,0x62,0x62,0x62,0x62,0x62,0x62,0x62,0x62,0x62,0x63,0x63, + 0x63,0x63,0x63,0x63,0x63,0x63,0x63,0x64,0x65,0x66,0x67,0x67,0x67,0x67,0x67, + 0x68,0x68,0x68,0x67,0x67,0x67,0x68,0x68,0x68,0x69,0x69,0x69,0x68,0x67,0x67, + 0x67,0x68,0x68,0x68,0x68,0x67,0x67,0x67,0x69,0x69,0x69,0x69,0x6a,0x6a,0x6b, + 0x6b,0x6b,0x6c,0x6d,0x6d,0x6d,0x6d,0x6d,0x6d,0x6e,0x6e,0x6e,0x6e,0x6d,0x6d, + 0x6e,0x6e,0x6f,0x70,0x6f,0x6e,0x6e,0x6f,0x6f,0x70,0x70,0x70,0x6f,0x6f,0x6f, + 0x6f,0x6f,0x70,0x70,0x70,0x70,0x70,0x70,0x70,0x71,0x71,0x71,0x72,0x74,0x74, + 0x74,0x73,0x74,0x74,0x73,0x71,0x71,0x73,0x74,0x74,0x74,0x73,0x74,0x74,0x74, + 0x74,0x75,0x75,0x75,0x75,0x75,0x75,0x75,0x75,0x76,0x76,0x76,0x76,0x77,0x77, + 0x77,0x77,0x77,0x77,0x78,0x78,0x77,0x78,0x78,0x78,0x78,0x78,0x79,0x79,0x79, + 0x79,0x79,0x79,0x79,0x79,0x79,0x7a,0x79,0x7a,0x7b,0x7b,0x7b,0x7b,0x7b,0x7b, + 0x7b,0x7b,0x7b,0x7b,0x7b,0x7c,0x7d,0x7c,0x7b,0x7c,0x7c,0x7b,0x7b,0x7c,0x7d, + 0x7d,0x7d,0x7d,0x7d,0x7d,0x7f,0x80,0x7f,0x7d,0x7c,0x7d,0x7f,0x7f,0x7f,0x7f, + 0x7f,0x7e,0x7d,0x7c,0x7c,0x81,0x87,0x8d,0x50,0x01,0x00,0x02,0x05,0x03,0x00, + 0x00,0x01,0x01,0x03,0x06,0x03,0x01,0x02,0x00,0x09,0x3e,0x6f,0x90,0x8a,0x7a, + 0x80,0x84,0x84,0x85,0x85,0x84,0x84,0x83,0x82,0x82,0x82,0x82,0x83,0x83,0x82, + 0x83,0x83,0x83,0x82,0x82,0x82,0x82,0x83,0x84,0x85,0x85,0x86,0x86,0x86,0x86, + 0x86,0x86,0x85,0x85,0x85,0x85,0x85,0x85,0x84,0x85,0x87,0x87,0x86,0x85,0x85, + 0x85,0x86,0x86,0x86,0x86,0x87,0x88,0x88,0x86,0x85,0x85,0x86,0x86,0x87,0x88, + 0x88,0x87,0x86,0x86,0x86,0x87,0x87,0x88,0x87,0x87,0x87,0x87,0x87,0x87,0x87, + 0x88,0x88,0x89,0x89,0x89,0x88,0x88,0x89,0x89,0x89,0x8a,0x8a,0x8a,0x89,0x89, + 0x88,0x88,0x88,0x89,0x89,0x89,0x89,0x89,0x89,0x89,0x89,0x89,0x89,0x89,0x88, + 0x88,0x89,0x8a,0x89,0x88,0x88,0x88,0x88,0xc8,0x45,0x45,0x42,0x41,0x3f,0x41, + 0x42,0x45,0x45,0x45,0x44,0x41,0x40,0x41,0x43,0x43,0x43,0x43,0x44,0x45,0x45, + 0x46,0x45,0x45,0x46,0x46,0x47,0x47,0x47,0x48,0x48,0x48,0x48,0x48,0x49,0x49, + 0x49,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x49,0x4a,0x4b,0x4b,0x4a,0x4a,0x4a, + 0x4a,0x4b,0x4c,0x4c,0x4c,0x4c,0x4d,0x4d,0x4e,0x4d,0x4c,0x4c,0x4d,0x4e,0x4f, + 0x50,0x50,0x50,0x50,0x50,0x50,0x50,0x50,0x50,0x50,0x50,0x50,0x50,0x50,0x50, + 0x50,0x51,0x52,0x52,0x52,0x51,0x51,0x51,0x51,0x52,0x52,0x53,0x53,0x53,0x53, + 0x53,0x53,0x53,0x54,0x54,0x54,0x54,0x54,0x54,0x55,0x56,0x57,0x56,0x56,0x56, + 0x56,0x57,0x57,0x57,0x57,0x57,0x57,0x58,0x58,0x58,0x58,0x59,0x5a,0x5a,0x5a, + 0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5b,0x5c,0x5c,0x5c,0x5c,0x5d, + 0x5d,0x5e,0x5e,0x5d,0x5d,0x5d,0x5d,0x5d,0x5d,0x5e,0x5e,0x5e,0x5f,0x5f,0x60, + 0x60,0x61,0x61,0x5f,0x5e,0x5f,0x60,0x61,0x61,0x61,0x62,0x62,0x62,0x62,0x62, + 0x62,0x62,0x62,0x62,0x63,0x63,0x63,0x63,0x63,0x64,0x64,0x65,0x65,0x64,0x64, + 0x65,0x66,0x65,0x65,0x63,0x62,0x62,0x61,0x62,0x62,0x65,0x66,0x68,0x68,0x68, + 0x69,0x69,0x69,0x69,0x69,0x68,0x68,0x68,0x68,0x68,0x69,0x69,0x6a,0x6a,0x6a, + 0x6a,0x6a,0x6b,0x6b,0x6b,0x6b,0x6b,0x6b,0x6c,0x6c,0x6b,0x6a,0x6b,0x6b,0x6b, + 0x6b,0x6b,0x6c,0x6d,0x6d,0x6d,0x6d,0x6e,0x6e,0x6e,0x6d,0x6d,0x6d,0x6d,0x6d, + 0x6e,0x6e,0x6f,0x6f,0x70,0x71,0x70,0x70,0x70,0x71,0x71,0x71,0x71,0x71,0x71, + 0x71,0x70,0x70,0x70,0x70,0x70,0x70,0x71,0x72,0x73,0x74,0x74,0x74,0x74,0x74, + 0x74,0x74,0x74,0x75,0x75,0x75,0x74,0x74,0x74,0x74,0x74,0x75,0x75,0x75,0x76, + 0x76,0x76,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x78,0x78,0x78,0x78,0x78, + 0x78,0x78,0x78,0x78,0x78,0x79,0x79,0x79,0x7a,0x7a,0x7a,0x7a,0x7a,0x7b,0x7b, + 0x7b,0x7b,0x7b,0x7b,0x7b,0x7b,0x7b,0x7b,0x7b,0x7b,0x7b,0x7c,0x7d,0x7d,0x7c, + 0x7c,0x7c,0x7c,0x7d,0x7d,0x7e,0x7e,0x7e,0x7e,0x7c,0x7c,0x7d,0x7d,0x7d,0x7d, + 0x7d,0x7e,0x7e,0x7e,0x7e,0x7d,0x7d,0x7f,0x81,0x80,0x7f,0x7f,0x7e,0x7f,0x7f, + 0x7f,0x7f,0x7e,0x7d,0x7c,0x7c,0x7f,0x82,0x88,0x8e,0x51,0x01,0x00,0x04,0x03, + 0x01,0x00,0x00,0x01,0x01,0x03,0x04,0x01,0x01,0x06,0x00,0x06,0x35,0x67,0x91, + 0x8c,0x7b,0x82,0x86,0x86,0x86,0x86,0x86,0x85,0x84,0x83,0x82,0x82,0x83,0x85, + 0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x85,0x85,0x85,0x86,0x86,0x86,0x86, + 0x86,0x87,0x87,0x86,0x86,0x85,0x85,0x85,0x85,0x86,0x86,0x86,0x87,0x86,0x86, + 0x86,0x86,0x86,0x86,0x86,0x86,0x86,0x87,0x88,0x88,0x87,0x87,0x87,0x87,0x88, + 0x88,0x89,0x8a,0x89,0x89,0x89,0x89,0x89,0x89,0x89,0x89,0x89,0x89,0x89,0x89, + 0x89,0x89,0x8a,0x8a,0x8a,0x8a,0x89,0x87,0x88,0x89,0x8a,0x8a,0x8a,0x8a,0x8a, + 0x89,0x88,0x88,0x88,0x89,0x8a,0x8a,0x8a,0x8a,0x8a,0x8a,0x8a,0x8a,0x8a,0x8a, + 0x8a,0x8a,0x8a,0x8b,0x8a,0x8a,0x89,0x89,0x89,0x89,0xc8,0x44,0x44,0x42,0x41, + 0x41,0x42,0x44,0x45,0x45,0x45,0x43,0x42,0x41,0x42,0x43,0x44,0x44,0x44,0x45, + 0x46,0x46,0x46,0x46,0x46,0x47,0x47,0x48,0x48,0x48,0x48,0x48,0x49,0x49,0x49, + 0x4a,0x4a,0x4a,0x49,0x49,0x49,0x49,0x49,0x49,0x49,0x4a,0x4b,0x4b,0x4b,0x4b, + 0x4a,0x4b,0x4b,0x4c,0x4c,0x4c,0x4c,0x4c,0x4d,0x4e,0x4e,0x4e,0x4d,0x4d,0x4e, + 0x4f,0x50,0x50,0x50,0x50,0x50,0x50,0x50,0x50,0x50,0x51,0x51,0x51,0x51,0x51, + 0x51,0x50,0x50,0x52,0x52,0x53,0x53,0x53,0x52,0x52,0x52,0x53,0x53,0x53,0x53, + 0x54,0x53,0x53,0x53,0x54,0x55,0x55,0x55,0x55,0x55,0x55,0x56,0x57,0x57,0x57, + 0x56,0x57,0x57,0x57,0x58,0x58,0x57,0x58,0x59,0x59,0x59,0x59,0x59,0x59,0x5a, + 0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5b,0x5b,0x5b,0x5b,0x5b,0x5c,0x5c,0x5c, + 0x5c,0x5d,0x5e,0x5e,0x5e,0x5e,0x5e,0x5e,0x5d,0x5e,0x5e,0x5e,0x5f,0x5f,0x60, + 0x60,0x61,0x61,0x62,0x62,0x61,0x60,0x61,0x62,0x62,0x62,0x61,0x62,0x62,0x62, + 0x62,0x62,0x62,0x62,0x63,0x63,0x64,0x64,0x64,0x64,0x64,0x65,0x65,0x65,0x65, + 0x65,0x65,0x65,0x65,0x65,0x65,0x65,0x65,0x65,0x64,0x64,0x65,0x66,0x68,0x69, + 0x68,0x67,0x68,0x69,0x69,0x69,0x69,0x69,0x69,0x69,0x69,0x69,0x69,0x6a,0x6a, + 0x6a,0x6a,0x6b,0x6b,0x6b,0x6c,0x6c,0x6c,0x6d,0x6d,0x6d,0x6d,0x6d,0x6d,0x6d, + 0x6d,0x6c,0x6c,0x6d,0x6d,0x6d,0x6d,0x6d,0x6e,0x6e,0x6f,0x6e,0x6e,0x6d,0x6d, + 0x6e,0x6e,0x6f,0x6f,0x70,0x70,0x70,0x72,0x71,0x71,0x72,0x72,0x72,0x72,0x72, + 0x72,0x72,0x72,0x72,0x71,0x71,0x71,0x72,0x73,0x73,0x74,0x74,0x74,0x74,0x74, + 0x74,0x74,0x74,0x74,0x75,0x76,0x76,0x76,0x75,0x75,0x75,0x75,0x75,0x76,0x76, + 0x77,0x77,0x77,0x77,0x78,0x78,0x78,0x78,0x78,0x78,0x78,0x78,0x78,0x78,0x78, + 0x78,0x79,0x79,0x79,0x79,0x79,0x79,0x7a,0x7a,0x7a,0x7b,0x7b,0x7b,0x7b,0x7b, + 0x7b,0x7b,0x7b,0x7c,0x7b,0x7b,0x7b,0x7b,0x7b,0x7b,0x7b,0x7b,0x7c,0x7d,0x7e, + 0x7d,0x7d,0x7d,0x7d,0x7d,0x7d,0x7e,0x7e,0x7e,0x7e,0x7e,0x7d,0x7e,0x7e,0x7f, + 0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x80,0x82,0x82,0x81,0x80,0x80, + 0x80,0x81,0x81,0x80,0x80,0x80,0x7f,0x7e,0x7e,0x82,0x89,0x94,0x57,0x03,0x00, + 0x02,0x01,0x01,0x01,0x01,0x01,0x01,0x03,0x04,0x00,0x01,0x07,0x01,0x05,0x32, + 0x64,0x92,0x8e,0x7d,0x82,0x86,0x86,0x86,0x86,0x86,0x86,0x85,0x84,0x83,0x84, + 0x85,0x86,0x86,0x85,0x85,0x85,0x85,0x85,0x86,0x86,0x86,0x86,0x86,0x86,0x86, + 0x87,0x87,0x88,0x88,0x89,0x88,0x87,0x86,0x86,0x86,0x86,0x87,0x88,0x88,0x89, + 0x88,0x87,0x86,0x87,0x87,0x87,0x87,0x86,0x86,0x87,0x88,0x88,0x88,0x88,0x88, + 0x88,0x89,0x8a,0x8a,0x8a,0x8a,0x8a,0x8a,0x8a,0x8a,0x8a,0x8a,0x8a,0x8a,0x8a, + 0x8a,0x8a,0x8a,0x8a,0x8a,0x8a,0x8a,0x8a,0x8a,0x89,0x8a,0x8a,0x8a,0x8b,0x8b, + 0x8a,0x8a,0x8a,0x8a,0x8a,0x8a,0x8b,0x8b,0x8b,0x8b,0x8a,0x8a,0x8a,0x8a,0x8a, + 0x8a,0x8a,0x8b,0x8b,0x8b,0x8c,0x8c,0x8b,0x8a,0x8a,0x8a,0x8a,0xc8,0x42,0x42, + 0x42,0x43,0x44,0x45,0x45,0x44,0x43,0x42,0x42,0x43,0x44,0x44,0x44,0x44,0x44, + 0x45,0x45,0x46,0x46,0x46,0x46,0x46,0x47,0x48,0x48,0x48,0x48,0x48,0x49,0x49, + 0x4a,0x4a,0x4a,0x4b,0x4b,0x4a,0x4a,0x4a,0x4b,0x4b,0x4a,0x4a,0x4a,0x4b,0x4b, + 0x4b,0x4b,0x4b,0x4c,0x4c,0x4d,0x4d,0x4c,0x4c,0x4c,0x4d,0x4e,0x4e,0x4e,0x4e, + 0x4e,0x4f,0x4f,0x50,0x50,0x50,0x50,0x50,0x51,0x51,0x51,0x51,0x51,0x51,0x51, + 0x52,0x52,0x52,0x51,0x51,0x52,0x53,0x53,0x53,0x53,0x53,0x53,0x53,0x53,0x53, + 0x53,0x54,0x55,0x54,0x54,0x54,0x55,0x55,0x56,0x56,0x56,0x56,0x56,0x57,0x57, + 0x57,0x57,0x57,0x57,0x58,0x58,0x59,0x59,0x59,0x5a,0x5a,0x5a,0x5a,0x59,0x59, + 0x59,0x5a,0x5a,0x5a,0x5a,0x5a,0x5b,0x5c,0x5c,0x5c,0x5c,0x5c,0x5c,0x5c,0x5c, + 0x5c,0x5c,0x5c,0x5d,0x5e,0x5e,0x5f,0x5f,0x5f,0x5e,0x5e,0x5f,0x60,0x60,0x60, + 0x60,0x60,0x60,0x61,0x62,0x62,0x62,0x62,0x62,0x62,0x62,0x62,0x62,0x62,0x62, + 0x62,0x62,0x62,0x62,0x62,0x63,0x64,0x65,0x65,0x65,0x65,0x65,0x65,0x65,0x66, + 0x66,0x66,0x66,0x65,0x64,0x65,0x65,0x66,0x67,0x68,0x68,0x68,0x68,0x68,0x69, + 0x69,0x69,0x68,0x66,0x68,0x69,0x69,0x69,0x69,0x69,0x69,0x69,0x69,0x69,0x6a, + 0x6a,0x6a,0x6a,0x6a,0x6b,0x6b,0x6b,0x6c,0x6c,0x6c,0x6d,0x6d,0x6d,0x6d,0x6e, + 0x6e,0x6e,0x6d,0x6d,0x6d,0x6d,0x6d,0x6e,0x6e,0x6e,0x6e,0x6e,0x6f,0x6f,0x6f, + 0x6f,0x6f,0x70,0x70,0x70,0x70,0x70,0x70,0x71,0x72,0x72,0x72,0x72,0x72,0x73, + 0x73,0x73,0x73,0x73,0x73,0x73,0x73,0x73,0x74,0x74,0x74,0x74,0x74,0x75,0x75, + 0x75,0x75,0x75,0x75,0x75,0x75,0x75,0x76,0x76,0x76,0x76,0x76,0x76,0x77,0x77, + 0x77,0x77,0x78,0x78,0x78,0x78,0x78,0x78,0x78,0x78,0x78,0x78,0x78,0x79,0x79, + 0x79,0x79,0x79,0x7a,0x7a,0x7a,0x7a,0x7a,0x7a,0x7a,0x7b,0x7b,0x7b,0x7b,0x7b, + 0x7b,0x7b,0x7b,0x7b,0x7b,0x7c,0x7c,0x7c,0x7c,0x7b,0x7b,0x7b,0x7b,0x7c,0x7d, + 0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7f,0x7f, + 0x7f,0x80,0x80,0x7f,0x7f,0x80,0x81,0x81,0x81,0x81,0x80,0x81,0x82,0x82,0x82, + 0x81,0x82,0x82,0x82,0x82,0x82,0x82,0x82,0x82,0x80,0x7e,0x80,0x89,0x9a,0x5e, + 0x07,0x00,0x00,0x00,0x02,0x03,0x03,0x02,0x01,0x03,0x04,0x00,0x01,0x07,0x02, + 0x06,0x2f,0x62,0x94,0x91,0x7f,0x83,0x86,0x86,0x86,0x86,0x86,0x86,0x85,0x85, + 0x85,0x86,0x86,0x87,0x87,0x86,0x86,0x86,0x86,0x86,0x86,0x87,0x87,0x87,0x88, + 0x88,0x88,0x89,0x89,0x89,0x89,0x8a,0x8a,0x89,0x89,0x88,0x88,0x89,0x89,0x8a, + 0x8a,0x8a,0x8a,0x89,0x88,0x88,0x89,0x89,0x88,0x87,0x87,0x87,0x88,0x89,0x89, + 0x89,0x89,0x8a,0x8a,0x8a,0x8a,0x8a,0x8a,0x8a,0x8a,0x8a,0x8a,0x8a,0x8a,0x8a, + 0x8a,0x8a,0x8a,0x8a,0x8a,0x8a,0x8a,0x8a,0x8a,0x8a,0x8b,0x8b,0x8b,0x8b,0x8b, + 0x8b,0x8b,0x8b,0x8b,0x8b,0x8c,0x8c,0x8d,0x8d,0x8b,0x8b,0x8b,0x8b,0x8b,0x8b, + 0x8b,0x8b,0x8b,0x8b,0x8b,0x8b,0x8b,0x8d,0x8d,0x8c,0x8c,0x8b,0x8b,0x8b,0xc8, + 0x42,0x42,0x43,0x44,0x45,0x46,0x45,0x45,0x43,0x42,0x42,0x44,0x45,0x45,0x45, + 0x44,0x45,0x45,0x45,0x47,0x47,0x47,0x47,0x47,0x48,0x48,0x48,0x48,0x48,0x48, + 0x49,0x49,0x4a,0x4a,0x4a,0x4b,0x4b,0x4b,0x4b,0x4b,0x4c,0x4c,0x4b,0x4b,0x4b, + 0x4b,0x4c,0x4b,0x4b,0x4c,0x4c,0x4c,0x4e,0x4e,0x4d,0x4d,0x4d,0x4e,0x4f,0x50, + 0x4f,0x4f,0x4f,0x50,0x50,0x50,0x50,0x50,0x50,0x51,0x52,0x52,0x52,0x51,0x51, + 0x51,0x51,0x52,0x53,0x53,0x52,0x52,0x52,0x52,0x53,0x53,0x54,0x55,0x55,0x55, + 0x54,0x53,0x53,0x54,0x55,0x54,0x54,0x54,0x55,0x56,0x57,0x57,0x57,0x57,0x57, + 0x57,0x57,0x57,0x57,0x57,0x57,0x58,0x59,0x5a,0x5a,0x5a,0x5a,0x5a,0x5b,0x5a, + 0x5a,0x5a,0x5a,0x5a,0x5a,0x5b,0x5b,0x5b,0x5c,0x5d,0x5d,0x5e,0x5d,0x5d,0x5d, + 0x5d,0x5d,0x5d,0x5d,0x5e,0x5e,0x5e,0x5f,0x5f,0x5e,0x5e,0x5e,0x5f,0x60,0x61, + 0x61,0x61,0x61,0x5f,0x5f,0x60,0x61,0x62,0x63,0x62,0x62,0x63,0x63,0x63,0x63, + 0x62,0x62,0x63,0x64,0x65,0x65,0x65,0x65,0x65,0x65,0x65,0x65,0x65,0x65,0x65, + 0x65,0x66,0x66,0x67,0x66,0x66,0x65,0x66,0x67,0x68,0x69,0x69,0x69,0x69,0x69, + 0x69,0x69,0x69,0x6a,0x69,0x68,0x69,0x69,0x69,0x6a,0x6a,0x6a,0x69,0x69,0x69, + 0x6a,0x6a,0x6a,0x6b,0x6b,0x6b,0x6b,0x6c,0x6c,0x6c,0x6d,0x6d,0x6d,0x6d,0x6d, + 0x6d,0x6d,0x6d,0x6d,0x6e,0x6e,0x6e,0x6e,0x6e,0x6f,0x70,0x70,0x70,0x70,0x70, + 0x70,0x70,0x70,0x70,0x71,0x71,0x71,0x71,0x71,0x71,0x72,0x73,0x73,0x73,0x73, + 0x73,0x73,0x74,0x74,0x74,0x74,0x74,0x74,0x74,0x74,0x74,0x75,0x75,0x75,0x75, + 0x75,0x76,0x76,0x76,0x76,0x76,0x76,0x76,0x76,0x77,0x77,0x77,0x77,0x78,0x78, + 0x78,0x78,0x78,0x78,0x78,0x78,0x78,0x78,0x78,0x78,0x78,0x78,0x79,0x79,0x79, + 0x7a,0x7a,0x7a,0x7b,0x7b,0x7b,0x7b,0x7b,0x7b,0x7b,0x7b,0x7b,0x7b,0x7b,0x7b, + 0x7c,0x7c,0x7c,0x7c,0x7c,0x7d,0x7d,0x7d,0x7d,0x7d,0x7d,0x7d,0x7c,0x7d,0x7d, + 0x7d,0x7e,0x7f,0x7f,0x7f,0x80,0x80,0x81,0x81,0x81,0x80,0x80,0x80,0x7f,0x7f, + 0x7f,0x7f,0x80,0x80,0x81,0x80,0x80,0x80,0x81,0x81,0x82,0x82,0x82,0x81,0x81, + 0x80,0x80,0x81,0x81,0x82,0x82,0x82,0x83,0x83,0x83,0x82,0x82,0x81,0x7f,0x88, + 0x9d,0x63,0x0e,0x00,0x00,0x02,0x03,0x04,0x02,0x00,0x01,0x03,0x03,0x00,0x02, + 0x07,0x03,0x06,0x2b,0x5e,0x95,0x94,0x81,0x83,0x86,0x86,0x86,0x86,0x86,0x86, + 0x86,0x86,0x86,0x86,0x87,0x88,0x88,0x87,0x87,0x87,0x87,0x87,0x88,0x88,0x88, + 0x88,0x89,0x8a,0x89,0x8a,0x8a,0x8a,0x8a,0x8a,0x8a,0x8a,0x8a,0x8a,0x8a,0x8a, + 0x8a,0x8b,0x8b,0x8b,0x8a,0x8a,0x8a,0x8a,0x8a,0x8a,0x8a,0x8a,0x8a,0x8a,0x8a, + 0x8b,0x8a,0x8a,0x8a,0x8a,0x8a,0x8c,0x8c,0x8c,0x8c,0x8b,0x8b,0x8b,0x8b,0x8b, + 0x8b,0x8b,0x8b,0x8b,0x8b,0x8b,0x8b,0x8b,0x8b,0x8b,0x8b,0x8b,0x8c,0x8d,0x8d, + 0x8c,0x8c,0x8c,0x8c,0x8b,0x8c,0x8c,0x8d,0x8d,0x8e,0x8d,0x8c,0x8b,0x8c,0x8c, + 0x8c,0x8c,0x8c,0x8c,0x8c,0x8c,0x8c,0x8b,0x8c,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d, + 0x8c,0xc8,0x43,0x43,0x44,0x45,0x45,0x46,0x46,0x45,0x44,0x43,0x44,0x45,0x46, + 0x46,0x45,0x45,0x45,0x45,0x46,0x47,0x47,0x47,0x47,0x48,0x48,0x48,0x48,0x48, + 0x48,0x48,0x48,0x49,0x4a,0x4a,0x4a,0x4b,0x4b,0x4b,0x4b,0x4b,0x4c,0x4c,0x4b, + 0x4b,0x4c,0x4c,0x4c,0x4c,0x4c,0x4c,0x4c,0x4d,0x4e,0x4e,0x4f,0x4e,0x4e,0x4e, + 0x4f,0x50,0x50,0x50,0x50,0x50,0x50,0x50,0x50,0x50,0x50,0x51,0x52,0x52,0x52, + 0x52,0x51,0x51,0x51,0x52,0x53,0x53,0x52,0x52,0x52,0x53,0x53,0x54,0x55,0x56, + 0x57,0x56,0x55,0x53,0x53,0x54,0x55,0x55,0x54,0x54,0x56,0x57,0x57,0x57,0x57, + 0x57,0x57,0x57,0x58,0x57,0x57,0x57,0x57,0x58,0x59,0x5a,0x5a,0x5a,0x5a,0x5a, + 0x5b,0x5b,0x5a,0x5a,0x5b,0x5a,0x5b,0x5b,0x5c,0x5d,0x5d,0x5e,0x5e,0x5e,0x5e, + 0x5d,0x5d,0x5e,0x5e,0x5e,0x5e,0x5e,0x5f,0x5f,0x60,0x5f,0x5e,0x5e,0x5f,0x61, + 0x61,0x61,0x61,0x61,0x60,0x5f,0x5f,0x60,0x61,0x62,0x63,0x63,0x62,0x63,0x63, + 0x63,0x63,0x63,0x63,0x64,0x65,0x65,0x66,0x66,0x66,0x65,0x65,0x66,0x66,0x65, + 0x65,0x65,0x65,0x66,0x67,0x67,0x67,0x67,0x68,0x69,0x69,0x69,0x69,0x69,0x69, + 0x69,0x69,0x69,0x69,0x69,0x6a,0x69,0x69,0x6a,0x6a,0x6b,0x6b,0x6b,0x6b,0x6a, + 0x69,0x6a,0x6a,0x6a,0x6b,0x6c,0x6b,0x6c,0x6c,0x6d,0x6d,0x6d,0x6d,0x6e,0x6e, + 0x6e,0x6e,0x6d,0x6d,0x6d,0x6d,0x6e,0x6e,0x6e,0x6f,0x70,0x70,0x70,0x70,0x70, + 0x70,0x70,0x70,0x70,0x71,0x72,0x72,0x73,0x73,0x73,0x73,0x73,0x73,0x74,0x74, + 0x73,0x73,0x73,0x73,0x74,0x74,0x74,0x74,0x74,0x74,0x75,0x75,0x75,0x75,0x75, + 0x75,0x75,0x76,0x76,0x77,0x78,0x78,0x78,0x78,0x77,0x77,0x77,0x77,0x78,0x78, + 0x78,0x79,0x79,0x79,0x79,0x79,0x79,0x79,0x79,0x7a,0x7a,0x7a,0x79,0x7a,0x7a, + 0x7b,0x7b,0x7b,0x7b,0x7b,0x7b,0x7b,0x7c,0x7b,0x7b,0x7b,0x7b,0x7b,0x7b,0x7b, + 0x7c,0x7d,0x7c,0x7d,0x7d,0x7e,0x7e,0x7e,0x7f,0x7f,0x7f,0x7f,0x7f,0x7e,0x7e, + 0x7e,0x7f,0x7f,0x7f,0x7f,0x80,0x80,0x81,0x81,0x82,0x82,0x82,0x81,0x81,0x81, + 0x81,0x80,0x7f,0x7f,0x80,0x81,0x81,0x80,0x80,0x80,0x80,0x81,0x82,0x82,0x82, + 0x82,0x81,0x81,0x81,0x82,0x82,0x82,0x83,0x83,0x84,0x84,0x83,0x83,0x83,0x83, + 0x80,0x87,0xa0,0x69,0x15,0x01,0x00,0x04,0x05,0x03,0x01,0x00,0x01,0x02,0x03, + 0x01,0x02,0x07,0x03,0x04,0x24,0x58,0x97,0x96,0x82,0x85,0x86,0x86,0x86,0x87, + 0x87,0x87,0x87,0x87,0x87,0x87,0x88,0x89,0x89,0x88,0x88,0x89,0x89,0x88,0x89, + 0x89,0x8a,0x8a,0x8a,0x8a,0x8a,0x8a,0x8b,0x8b,0x8b,0x8a,0x8a,0x8a,0x8b,0x8b, + 0x8b,0x8b,0x8b,0x8b,0x8b,0x8b,0x8b,0x8a,0x8a,0x8a,0x8b,0x8b,0x8b,0x8b,0x8b, + 0x8b,0x8c,0x8d,0x8c,0x8c,0x8c,0x8c,0x8c,0x8d,0x8d,0x8d,0x8d,0x8d,0x8c,0x8c, + 0x8d,0x8c,0x8b,0x8b,0x8b,0x8b,0x8c,0x8c,0x8c,0x8c,0x8d,0x8d,0x8d,0x8d,0x8d, + 0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x8e,0x8d,0x8d,0x8d, + 0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x8c,0x8d,0x8e,0x8f,0x8e,0x8e, + 0x8e,0x8d,0x8d,0xc8,0x45,0x45,0x44,0x44,0x45,0x45,0x45,0x45,0x45,0x45,0x45, + 0x45,0x45,0x45,0x46,0x46,0x46,0x47,0x47,0x48,0x48,0x48,0x48,0x48,0x48,0x48, + 0x49,0x48,0x48,0x48,0x48,0x48,0x49,0x49,0x4a,0x4b,0x4b,0x4b,0x4b,0x4c,0x4b, + 0x4b,0x4c,0x4c,0x4d,0x4d,0x4e,0x4f,0x4e,0x4e,0x4d,0x4d,0x4e,0x4f,0x50,0x4f, + 0x4f,0x4f,0x4f,0x50,0x50,0x50,0x50,0x50,0x50,0x50,0x50,0x50,0x50,0x51,0x52, + 0x53,0x53,0x52,0x51,0x51,0x52,0x53,0x53,0x53,0x53,0x53,0x53,0x53,0x54,0x55, + 0x56,0x57,0x57,0x57,0x56,0x55,0x54,0x56,0x57,0x56,0x56,0x56,0x56,0x57,0x57, + 0x57,0x57,0x57,0x58,0x59,0x59,0x59,0x58,0x58,0x59,0x59,0x5a,0x5a,0x5a,0x5a, + 0x5a,0x5a,0x5b,0x5b,0x5c,0x5c,0x5c,0x5c,0x5c,0x5d,0x5d,0x5e,0x5e,0x5e,0x5e, + 0x5e,0x5e,0x5c,0x5c,0x5e,0x5e,0x5f,0x60,0x60,0x61,0x61,0x61,0x60,0x5f,0x5e, + 0x60,0x62,0x62,0x62,0x61,0x60,0x60,0x5f,0x5f,0x61,0x62,0x62,0x64,0x63,0x62, + 0x62,0x63,0x64,0x64,0x64,0x65,0x65,0x65,0x65,0x66,0x67,0x67,0x66,0x66,0x67, + 0x67,0x66,0x66,0x66,0x66,0x67,0x67,0x68,0x68,0x68,0x69,0x6a,0x69,0x69,0x69, + 0x69,0x68,0x68,0x68,0x68,0x69,0x69,0x69,0x6a,0x6b,0x6c,0x6c,0x6c,0x6c,0x6c, + 0x6b,0x6b,0x6b,0x6b,0x6b,0x6b,0x6c,0x6d,0x6d,0x6d,0x6d,0x6d,0x6e,0x6e,0x6f, + 0x6f,0x6f,0x6f,0x6f,0x6f,0x6e,0x6e,0x6e,0x6e,0x6f,0x70,0x70,0x70,0x71,0x71, + 0x71,0x71,0x71,0x71,0x71,0x71,0x71,0x72,0x73,0x74,0x74,0x74,0x74,0x74,0x74, + 0x74,0x74,0x74,0x74,0x74,0x74,0x74,0x74,0x74,0x74,0x75,0x76,0x76,0x76,0x76, + 0x76,0x76,0x76,0x76,0x76,0x77,0x78,0x78,0x78,0x78,0x78,0x78,0x78,0x78,0x78, + 0x78,0x78,0x79,0x7a,0x7a,0x7a,0x7a,0x7a,0x7a,0x7a,0x7a,0x7b,0x7b,0x7b,0x7b, + 0x7b,0x7b,0x7b,0x7b,0x7b,0x7c,0x7c,0x7c,0x7c,0x7c,0x7d,0x7c,0x7c,0x7c,0x7c, + 0x7c,0x7d,0x7d,0x7e,0x7e,0x7e,0x7f,0x7f,0x7f,0x7f,0x7f,0x80,0x80,0x80,0x7f, + 0x7f,0x7f,0x7f,0x80,0x80,0x7f,0x7f,0x7f,0x7f,0x80,0x80,0x81,0x81,0x81,0x81, + 0x81,0x82,0x82,0x82,0x80,0x80,0x82,0x82,0x82,0x81,0x80,0x80,0x80,0x81,0x82, + 0x82,0x82,0x82,0x83,0x83,0x83,0x83,0x83,0x84,0x85,0x85,0x85,0x85,0x85,0x84, + 0x85,0x86,0x80,0x87,0xa1,0x6e,0x1d,0x05,0x00,0x07,0x05,0x01,0x00,0x00,0x01, + 0x02,0x03,0x01,0x03,0x07,0x02,0x03,0x1d,0x52,0x98,0x98,0x82,0x86,0x89,0x89, + 0x89,0x89,0x89,0x88,0x88,0x88,0x88,0x88,0x89,0x8a,0x89,0x89,0x8a,0x8a,0x8a, + 0x8a,0x8a,0x8a,0x8a,0x8a,0x8a,0x8a,0x8b,0x8b,0x8c,0x8c,0x8c,0x8b,0x8b,0x8b, + 0x8b,0x8c,0x8c,0x8b,0x8b,0x8b,0x8b,0x8c,0x8c,0x8c,0x8b,0x8b,0x8c,0x8c,0x8c, + 0x8c,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x8e,0x8e,0x8e,0x8d,0x8d, + 0x8d,0x8d,0x8d,0x8d,0x8c,0x8c,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x8e,0x8e,0x8e, + 0x8f,0x8e,0x8d,0x8d,0x8d,0x8d,0x8d,0x8e,0x8e,0x8e,0x8e,0x8d,0x8d,0x8d,0x8d, + 0x8d,0x8e,0x8e,0x8e,0x8e,0x8e,0x8e,0x8e,0x8e,0x8e,0x8e,0x8e,0x8e,0x8f,0x90, + 0x90,0x8f,0x8f,0x8f,0x8e,0xc8,0x45,0x45,0x45,0x44,0x45,0x45,0x45,0x45,0x46, + 0x46,0x46,0x45,0x45,0x45,0x47,0x47,0x47,0x47,0x48,0x48,0x48,0x48,0x48,0x48, + 0x48,0x48,0x49,0x49,0x49,0x49,0x49,0x49,0x49,0x4a,0x4a,0x4b,0x4c,0x4c,0x4c, + 0x4c,0x4c,0x4b,0x4c,0x4d,0x4e,0x4f,0x50,0x50,0x4f,0x4f,0x4e,0x4e,0x4e,0x4f, + 0x50,0x4f,0x4f,0x4f,0x4f,0x50,0x50,0x50,0x50,0x50,0x50,0x50,0x50,0x51,0x52, + 0x53,0x53,0x53,0x53,0x53,0x52,0x52,0x52,0x53,0x53,0x53,0x53,0x53,0x54,0x55, + 0x55,0x56,0x57,0x57,0x57,0x57,0x57,0x56,0x56,0x57,0x57,0x57,0x57,0x57,0x57, + 0x57,0x58,0x58,0x58,0x59,0x59,0x5a,0x5a,0x5a,0x59,0x59,0x59,0x5a,0x5a,0x5a, + 0x5a,0x5a,0x5a,0x5b,0x5c,0x5c,0x5d,0x5d,0x5d,0x5d,0x5d,0x5d,0x5e,0x5e,0x5e, + 0x5f,0x5e,0x5e,0x5e,0x5d,0x5d,0x5e,0x5f,0x60,0x61,0x62,0x62,0x63,0x63,0x62, + 0x61,0x60,0x62,0x62,0x62,0x62,0x62,0x61,0x61,0x62,0x62,0x62,0x63,0x64,0x64, + 0x63,0x63,0x64,0x65,0x65,0x65,0x65,0x65,0x65,0x65,0x65,0x65,0x65,0x66,0x67, + 0x68,0x68,0x68,0x68,0x68,0x67,0x67,0x68,0x69,0x69,0x69,0x69,0x69,0x69,0x69, + 0x69,0x6a,0x6a,0x6a,0x69,0x69,0x69,0x69,0x69,0x6a,0x6b,0x6c,0x6c,0x6c,0x6c, + 0x6c,0x6c,0x6c,0x6c,0x6c,0x6d,0x6d,0x6d,0x6d,0x6d,0x6d,0x6d,0x6e,0x6e,0x6f, + 0x70,0x70,0x70,0x70,0x70,0x70,0x70,0x70,0x70,0x70,0x70,0x70,0x70,0x71,0x71, + 0x71,0x71,0x71,0x71,0x71,0x72,0x72,0x71,0x72,0x73,0x74,0x75,0x75,0x75,0x75, + 0x74,0x74,0x74,0x74,0x74,0x74,0x74,0x74,0x74,0x74,0x75,0x76,0x76,0x77,0x77, + 0x77,0x78,0x77,0x77,0x77,0x77,0x77,0x78,0x78,0x79,0x7a,0x7a,0x7a,0x79,0x79, + 0x78,0x78,0x79,0x7a,0x7a,0x7b,0x7b,0x7b,0x7b,0x7b,0x7a,0x7a,0x7a,0x7b,0x7b, + 0x7b,0x7b,0x7c,0x7c,0x7c,0x7c,0x7d,0x7d,0x7d,0x7d,0x7d,0x7e,0x7e,0x7e,0x7d, + 0x7d,0x7d,0x7e,0x7e,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x80,0x80,0x80,0x81,0x81, + 0x81,0x80,0x80,0x80,0x80,0x81,0x81,0x81,0x7f,0x7f,0x80,0x80,0x81,0x82,0x82, + 0x82,0x82,0x82,0x82,0x82,0x82,0x82,0x82,0x83,0x83,0x83,0x82,0x82,0x81,0x82, + 0x82,0x83,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x85,0x85,0x86,0x86,0x86, + 0x85,0x85,0x85,0x86,0x81,0x8a,0xa6,0x74,0x23,0x07,0x00,0x05,0x03,0x00,0x01, + 0x02,0x01,0x02,0x02,0x01,0x03,0x07,0x02,0x02,0x16,0x4c,0x9a,0x99,0x83,0x88, + 0x8b,0x8a,0x8a,0x8a,0x8a,0x8a,0x8a,0x89,0x89,0x89,0x89,0x8a,0x8a,0x8a,0x8a, + 0x8a,0x8a,0x8b,0x8b,0x8b,0x8b,0x8b,0x8c,0x8c,0x8c,0x8d,0x8d,0x8d,0x8d,0x8d, + 0x8c,0x8c,0x8d,0x8d,0x8d,0x8d,0x8c,0x8c,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d, + 0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x8e,0x8e,0x8d,0x8d,0x8e,0x8e,0x8f,0x8f, + 0x8e,0x8d,0x8d,0x8d,0x8e,0x8d,0x8d,0x8d,0x8e,0x8d,0x8e,0x8f,0x8e,0x8f,0x90, + 0x90,0x90,0x91,0x90,0x8e,0x8e,0x8e,0x8e,0x8f,0x90,0x90,0x90,0x90,0x8f,0x8e, + 0x8d,0x8d,0x8f,0x90,0x90,0x8f,0x8f,0x8f,0x8f,0x8f,0x8f,0x8f,0x90,0x90,0x90, + 0x91,0x91,0x91,0x91,0x90,0x90,0x90,0xc8,0x45,0x45,0x45,0x45,0x45,0x45,0x45, + 0x45,0x46,0x47,0x47,0x46,0x45,0x46,0x48,0x48,0x47,0x48,0x48,0x48,0x48,0x48, + 0x48,0x48,0x48,0x49,0x49,0x4a,0x4a,0x4a,0x4a,0x4a,0x4a,0x4a,0x4b,0x4c,0x4c, + 0x4c,0x4d,0x4d,0x4c,0x4c,0x4c,0x4d,0x4e,0x4f,0x50,0x50,0x50,0x4f,0x4e,0x4e, + 0x4f,0x50,0x50,0x4f,0x4f,0x4f,0x4f,0x50,0x50,0x50,0x50,0x50,0x50,0x50,0x51, + 0x52,0x53,0x53,0x54,0x54,0x54,0x53,0x53,0x53,0x53,0x53,0x54,0x54,0x54,0x54, + 0x55,0x56,0x56,0x57,0x57,0x57,0x57,0x57,0x57,0x57,0x57,0x58,0x58,0x57,0x57, + 0x57,0x58,0x58,0x59,0x59,0x59,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a, + 0x5b,0x5b,0x5b,0x5b,0x5c,0x5c,0x5d,0x5e,0x5e,0x5e,0x5e,0x5d,0x5d,0x5e,0x5e, + 0x5e,0x5f,0x5f,0x5f,0x5f,0x5e,0x5e,0x5e,0x5e,0x5f,0x60,0x62,0x62,0x63,0x64, + 0x64,0x64,0x63,0x62,0x63,0x63,0x62,0x62,0x62,0x62,0x63,0x64,0x65,0x65,0x65, + 0x65,0x64,0x64,0x64,0x65,0x65,0x65,0x65,0x65,0x65,0x65,0x65,0x65,0x65,0x65, + 0x65,0x68,0x69,0x69,0x69,0x69,0x69,0x69,0x69,0x69,0x6a,0x6a,0x6a,0x6a,0x69, + 0x68,0x69,0x6a,0x6a,0x6c,0x6c,0x6c,0x6c,0x6c,0x6c,0x6b,0x6b,0x6c,0x6c,0x6c, + 0x6d,0x6d,0x6d,0x6d,0x6d,0x6d,0x6d,0x6f,0x70,0x70,0x6f,0x6e,0x6e,0x6e,0x6f, + 0x70,0x70,0x70,0x70,0x70,0x70,0x70,0x70,0x71,0x72,0x73,0x72,0x72,0x72,0x72, + 0x72,0x72,0x72,0x72,0x72,0x72,0x72,0x73,0x73,0x72,0x73,0x74,0x75,0x76,0x76, + 0x76,0x76,0x74,0x74,0x74,0x75,0x76,0x76,0x76,0x76,0x76,0x76,0x77,0x77,0x77, + 0x78,0x78,0x78,0x78,0x78,0x78,0x78,0x78,0x78,0x78,0x79,0x7a,0x7b,0x7b,0x7b, + 0x7a,0x7a,0x79,0x7a,0x7a,0x7b,0x7b,0x7b,0x7b,0x7b,0x7b,0x7b,0x7b,0x7b,0x7b, + 0x7c,0x7c,0x7c,0x7d,0x7d,0x7d,0x7d,0x7d,0x7e,0x7e,0x7e,0x7e,0x7e,0x7f,0x7f, + 0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x80,0x80,0x80,0x81,0x81,0x81,0x81, + 0x82,0x82,0x82,0x82,0x81,0x81,0x82,0x82,0x82,0x82,0x81,0x82,0x82,0x82,0x82, + 0x82,0x82,0x82,0x82,0x82,0x83,0x84,0x84,0x84,0x85,0x85,0x86,0x85,0x84,0x83, + 0x82,0x83,0x84,0x85,0x86,0x86,0x86,0x85,0x85,0x85,0x85,0x85,0x85,0x86,0x86, + 0x86,0x86,0x86,0x85,0x85,0x85,0x81,0x8b,0xaa,0x79,0x27,0x08,0x00,0x03,0x02, + 0x00,0x02,0x03,0x01,0x01,0x02,0x01,0x02,0x06,0x01,0x02,0x10,0x46,0x9c,0x9c, + 0x83,0x89,0x8d,0x8b,0x8b,0x8a,0x8a,0x8a,0x8a,0x8a,0x8a,0x8a,0x8a,0x8a,0x8b, + 0x8c,0x8c,0x8c,0x8c,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d, + 0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x8e,0x8f,0x8f,0x8f,0x8f, + 0x8e,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x8f,0x8f,0x8e,0x8f,0x8f,0x8f, + 0x8f,0x8f,0x8f,0x8e,0x8e,0x8f,0x8f,0x8f,0x8e,0x8f,0x8f,0x8f,0x90,0x90,0x90, + 0x91,0x91,0x91,0x91,0x91,0x91,0x90,0x90,0x90,0x90,0x91,0x91,0x91,0x91,0x91, + 0x91,0x90,0x90,0x90,0x91,0x91,0x91,0x91,0x90,0x90,0x90,0x90,0x90,0x90,0x91, + 0x91,0x91,0x91,0x91,0x91,0x91,0x91,0x91,0x91,0xc8,0x44,0x44,0x45,0x45,0x45, + 0x45,0x45,0x45,0x46,0x46,0x47,0x47,0x47,0x48,0x48,0x48,0x48,0x48,0x48,0x49, + 0x48,0x48,0x48,0x48,0x49,0x49,0x4a,0x4b,0x4b,0x4b,0x4b,0x4b,0x4b,0x4c,0x4c, + 0x4c,0x4c,0x4d,0x4d,0x4d,0x4c,0x4c,0x4c,0x4c,0x4d,0x4e,0x4f,0x4f,0x4e,0x4e, + 0x4e,0x4e,0x50,0x50,0x4f,0x4e,0x4e,0x4f,0x4f,0x50,0x50,0x50,0x50,0x50,0x51, + 0x52,0x53,0x53,0x53,0x54,0x55,0x55,0x54,0x53,0x53,0x53,0x53,0x54,0x54,0x55, + 0x55,0x55,0x56,0x56,0x57,0x57,0x57,0x57,0x57,0x57,0x57,0x57,0x57,0x59,0x59, + 0x58,0x58,0x58,0x58,0x58,0x59,0x59,0x59,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a, + 0x5a,0x5b,0x5c,0x5c,0x5c,0x5c,0x5d,0x5e,0x5e,0x5e,0x5e,0x5e,0x5e,0x5e,0x5e, + 0x5e,0x5f,0x60,0x60,0x61,0x60,0x60,0x60,0x60,0x60,0x61,0x61,0x61,0x61,0x62, + 0x62,0x63,0x64,0x64,0x64,0x64,0x63,0x63,0x63,0x63,0x63,0x64,0x65,0x66,0x67, + 0x66,0x65,0x65,0x64,0x65,0x65,0x66,0x67,0x67,0x67,0x66,0x66,0x66,0x67,0x67, + 0x68,0x67,0x67,0x69,0x69,0x69,0x6a,0x6a,0x69,0x69,0x6a,0x6a,0x6b,0x6b,0x6c, + 0x6b,0x6a,0x6a,0x6b,0x6b,0x6c,0x6c,0x6c,0x6d,0x6d,0x6d,0x6d,0x6d,0x6d,0x6d, + 0x6d,0x6d,0x6d,0x6e,0x6e,0x6d,0x6d,0x6e,0x6f,0x70,0x70,0x71,0x70,0x6f,0x70, + 0x70,0x70,0x70,0x70,0x71,0x71,0x71,0x71,0x71,0x71,0x72,0x74,0x74,0x74,0x74, + 0x74,0x74,0x74,0x74,0x74,0x74,0x74,0x74,0x74,0x75,0x75,0x74,0x74,0x74,0x75, + 0x76,0x77,0x77,0x76,0x74,0x74,0x74,0x76,0x78,0x77,0x78,0x78,0x78,0x78,0x78, + 0x78,0x78,0x78,0x78,0x79,0x79,0x7a,0x79,0x79,0x79,0x79,0x79,0x7a,0x7b,0x7b, + 0x7b,0x7b,0x7b,0x7b,0x7b,0x7b,0x7b,0x7c,0x7c,0x7d,0x7d,0x7d,0x7d,0x7d,0x7c, + 0x7c,0x7c,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f, + 0x7f,0x7f,0x7f,0x7f,0x7f,0x80,0x80,0x80,0x80,0x80,0x81,0x81,0x81,0x82,0x82, + 0x82,0x82,0x82,0x83,0x82,0x82,0x82,0x82,0x82,0x82,0x82,0x83,0x84,0x84,0x84, + 0x85,0x85,0x84,0x84,0x84,0x84,0x84,0x85,0x86,0x86,0x86,0x86,0x86,0x86,0x86, + 0x86,0x85,0x84,0x84,0x85,0x86,0x86,0x87,0x86,0x85,0x85,0x85,0x85,0x85,0x86, + 0x86,0x86,0x86,0x86,0x86,0x86,0x86,0x86,0x82,0x8c,0xae,0x7c,0x28,0x09,0x00, + 0x02,0x03,0x03,0x02,0x02,0x01,0x01,0x01,0x01,0x02,0x05,0x02,0x03,0x0c,0x42, + 0xa0,0xa0,0x84,0x89,0x8c,0x8b,0x8a,0x8a,0x8a,0x8b,0x8b,0x8a,0x8a,0x8a,0x8a, + 0x8b,0x8c,0x8d,0x8d,0x8d,0x8d,0x8d,0x8e,0x8e,0x8e,0x8e,0x8e,0x8f,0x8f,0x8e, + 0x8e,0x8e,0x8e,0x8e,0x8e,0x8e,0x8f,0x8f,0x8f,0x8f,0x8f,0x90,0x90,0x91,0x91, + 0x90,0x90,0x90,0x8f,0x8f,0x8f,0x8f,0x90,0x90,0x8f,0x8f,0x90,0x90,0x8f,0x8f, + 0x90,0x90,0x90,0x90,0x90,0x8f,0x8f,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x91, + 0x91,0x91,0x91,0x91,0x91,0x91,0x91,0x91,0x91,0x91,0x91,0x91,0x91,0x91,0x91, + 0x91,0x91,0x91,0x92,0x92,0x92,0x92,0x91,0x91,0x91,0x91,0x91,0x90,0x91,0x91, + 0x91,0x91,0x91,0x91,0x91,0x91,0x92,0x92,0x92,0x91,0x91,0xc8,0x44,0x44,0x45, + 0x46,0x46,0x46,0x46,0x45,0x45,0x46,0x47,0x47,0x48,0x48,0x48,0x48,0x48,0x48, + 0x49,0x49,0x49,0x48,0x48,0x49,0x49,0x4a,0x4b,0x4b,0x4b,0x4b,0x4b,0x4b,0x4c, + 0x4c,0x4c,0x4c,0x4c,0x4d,0x4d,0x4d,0x4d,0x4c,0x4c,0x4c,0x4d,0x4e,0x4e,0x4e, + 0x4e,0x4e,0x4e,0x4f,0x50,0x50,0x4f,0x4f,0x4f,0x4f,0x50,0x50,0x50,0x50,0x50, + 0x51,0x52,0x53,0x53,0x53,0x54,0x54,0x55,0x55,0x54,0x54,0x53,0x53,0x54,0x54, + 0x55,0x55,0x55,0x56,0x56,0x57,0x57,0x57,0x57,0x57,0x57,0x57,0x57,0x57,0x57, + 0x59,0x5a,0x59,0x58,0x58,0x58,0x58,0x59,0x59,0x59,0x5a,0x5a,0x5a,0x5a,0x5a, + 0x5a,0x5a,0x5a,0x5b,0x5c,0x5d,0x5d,0x5e,0x5e,0x5e,0x5e,0x5f,0x5f,0x5e,0x5f, + 0x5f,0x5f,0x60,0x60,0x61,0x61,0x61,0x61,0x62,0x62,0x62,0x62,0x62,0x62,0x62, + 0x61,0x62,0x62,0x62,0x63,0x64,0x64,0x64,0x63,0x63,0x63,0x64,0x64,0x65,0x66, + 0x67,0x67,0x67,0x66,0x65,0x64,0x65,0x66,0x67,0x68,0x68,0x68,0x67,0x68,0x68, + 0x69,0x69,0x69,0x69,0x69,0x69,0x69,0x69,0x6b,0x6b,0x6b,0x6a,0x6b,0x6b,0x6c, + 0x6c,0x6c,0x6d,0x6d,0x6d,0x6d,0x6d,0x6c,0x6c,0x6c,0x6d,0x6d,0x6d,0x6e,0x6f, + 0x6f,0x6f,0x6f,0x6f,0x6f,0x70,0x6f,0x6f,0x6f,0x6f,0x6f,0x70,0x70,0x71,0x71, + 0x70,0x71,0x71,0x71,0x71,0x72,0x72,0x73,0x73,0x73,0x73,0x73,0x73,0x74,0x74, + 0x74,0x74,0x74,0x74,0x74,0x74,0x75,0x75,0x75,0x75,0x75,0x77,0x77,0x76,0x76, + 0x76,0x76,0x77,0x78,0x77,0x76,0x75,0x74,0x74,0x77,0x78,0x78,0x78,0x78,0x79, + 0x79,0x79,0x79,0x7a,0x7a,0x7a,0x79,0x7a,0x7a,0x7a,0x7a,0x7b,0x7b,0x7b,0x7b, + 0x7b,0x7b,0x7b,0x7b,0x7b,0x7b,0x7d,0x7d,0x7d,0x7e,0x7e,0x7f,0x7f,0x7f,0x7f, + 0x7f,0x7e,0x7e,0x7e,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x80,0x80,0x80,0x80, + 0x80,0x80,0x80,0x81,0x81,0x81,0x81,0x81,0x82,0x82,0x82,0x82,0x82,0x82,0x82, + 0x82,0x83,0x83,0x83,0x83,0x84,0x84,0x83,0x83,0x84,0x84,0x84,0x84,0x84,0x85, + 0x85,0x85,0x86,0x86,0x85,0x85,0x85,0x85,0x85,0x86,0x86,0x86,0x86,0x87,0x88, + 0x88,0x87,0x86,0x86,0x86,0x86,0x86,0x86,0x87,0x87,0x86,0x86,0x86,0x86,0x86, + 0x86,0x86,0x87,0x87,0x87,0x87,0x88,0x88,0x89,0x8a,0x82,0x8b,0xae,0x7f,0x2e, + 0x0c,0x00,0x02,0x03,0x04,0x02,0x00,0x01,0x01,0x01,0x01,0x02,0x04,0x02,0x03, + 0x08,0x40,0xa3,0xa2,0x84,0x89,0x8d,0x8c,0x8b,0x8a,0x8b,0x8c,0x8c,0x8b,0x8a, + 0x8a,0x8b,0x8b,0x8d,0x8e,0x8d,0x8e,0x8e,0x8f,0x8f,0x8f,0x8f,0x8f,0x8f,0x8f, + 0x8f,0x8f,0x8e,0x8e,0x8f,0x8f,0x90,0x90,0x90,0x91,0x91,0x91,0x91,0x91,0x91, + 0x91,0x91,0x91,0x91,0x91,0x91,0x91,0x91,0x91,0x91,0x91,0x91,0x91,0x91,0x91, + 0x91,0x90,0x91,0x91,0x91,0x91,0x91,0x91,0x90,0x91,0x91,0x91,0x91,0x91,0x91, + 0x91,0x91,0x91,0x91,0x91,0x91,0x91,0x91,0x91,0x92,0x92,0x92,0x91,0x91,0x91, + 0x91,0x91,0x91,0x91,0x92,0x94,0x95,0x95,0x93,0x92,0x91,0x92,0x91,0x91,0x91, + 0x91,0x91,0x92,0x91,0x92,0x92,0x92,0x92,0x92,0x93,0x93,0x93,0x93,0xc8,0x44, + 0x44,0x45,0x46,0x47,0x47,0x46,0x45,0x45,0x46,0x47,0x48,0x48,0x48,0x49,0x48, + 0x48,0x49,0x49,0x49,0x4a,0x4a,0x49,0x49,0x4a,0x4b,0x4c,0x4c,0x4c,0x4c,0x4c, + 0x4c,0x4c,0x4c,0x4c,0x4d,0x4d,0x4d,0x4d,0x4e,0x4d,0x4d,0x4d,0x4d,0x4e,0x4e, + 0x4f,0x4f,0x4f,0x4f,0x4f,0x4f,0x50,0x50,0x50,0x50,0x50,0x50,0x50,0x51,0x51, + 0x51,0x51,0x52,0x53,0x53,0x54,0x54,0x54,0x54,0x55,0x55,0x55,0x55,0x55,0x55, + 0x55,0x55,0x55,0x56,0x57,0x57,0x57,0x57,0x57,0x57,0x57,0x58,0x58,0x58,0x57, + 0x57,0x57,0x59,0x5a,0x59,0x59,0x59,0x59,0x59,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a, + 0x5a,0x5b,0x5b,0x5b,0x5b,0x5c,0x5d,0x5e,0x5e,0x5e,0x5e,0x5f,0x60,0x60,0x60, + 0x60,0x60,0x61,0x61,0x61,0x61,0x61,0x62,0x62,0x62,0x62,0x62,0x63,0x63,0x63, + 0x63,0x63,0x62,0x62,0x63,0x63,0x64,0x65,0x64,0x64,0x64,0x64,0x64,0x64,0x65, + 0x65,0x65,0x66,0x67,0x67,0x66,0x66,0x65,0x65,0x66,0x67,0x68,0x68,0x68,0x68, + 0x69,0x69,0x6a,0x6b,0x6c,0x6d,0x6b,0x69,0x69,0x6a,0x6b,0x6c,0x6c,0x6c,0x6c, + 0x6d,0x6d,0x6d,0x6d,0x6d,0x6f,0x70,0x6f,0x6d,0x6d,0x6c,0x6c,0x6c,0x6d,0x6d, + 0x6f,0x6f,0x70,0x70,0x70,0x70,0x70,0x70,0x70,0x70,0x70,0x70,0x70,0x70,0x70, + 0x72,0x72,0x72,0x72,0x73,0x73,0x73,0x74,0x74,0x74,0x74,0x74,0x74,0x74,0x74, + 0x74,0x74,0x74,0x74,0x74,0x75,0x75,0x75,0x76,0x76,0x77,0x77,0x78,0x78,0x78, + 0x77,0x77,0x78,0x78,0x78,0x78,0x78,0x77,0x77,0x77,0x77,0x78,0x78,0x79,0x79, + 0x79,0x79,0x7a,0x7a,0x7a,0x7b,0x7b,0x7b,0x7b,0x7b,0x7b,0x7b,0x7b,0x7b,0x7b, + 0x7b,0x7b,0x7b,0x7b,0x7b,0x7c,0x7c,0x7c,0x7f,0x7f,0x7f,0x7f,0x7f,0x80,0x80, + 0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x81,0x81,0x81,0x81,0x81,0x82,0x82, + 0x82,0x82,0x82,0x82,0x82,0x82,0x82,0x82,0x82,0x82,0x83,0x83,0x83,0x83,0x83, + 0x83,0x83,0x83,0x84,0x84,0x85,0x85,0x85,0x85,0x85,0x85,0x85,0x85,0x86,0x86, + 0x85,0x85,0x85,0x86,0x86,0x86,0x86,0x85,0x85,0x85,0x85,0x86,0x86,0x86,0x87, + 0x88,0x89,0x88,0x88,0x87,0x87,0x87,0x87,0x88,0x88,0x88,0x88,0x88,0x88,0x88, + 0x89,0x8a,0x8a,0x8a,0x8a,0x8a,0x8a,0x8a,0x8b,0x8a,0x8c,0x8d,0x82,0x89,0xab, + 0x83,0x39,0x10,0x00,0x03,0x05,0x04,0x02,0x00,0x00,0x01,0x01,0x01,0x02,0x03, + 0x02,0x03,0x05,0x3d,0xa7,0xa4,0x84,0x8a,0x8d,0x8d,0x8c,0x8c,0x8c,0x8d,0x8d, + 0x8c,0x8c,0x8c,0x8c,0x8d,0x8d,0x8e,0x8e,0x8e,0x8f,0x8f,0x90,0x90,0x90,0x90, + 0x90,0x90,0x90,0x8f,0x8f,0x8f,0x90,0x91,0x91,0x91,0x91,0x91,0x91,0x91,0x92, + 0x92,0x91,0x91,0x91,0x92,0x92,0x92,0x92,0x92,0x92,0x93,0x94,0x94,0x93,0x93, + 0x92,0x92,0x91,0x91,0x91,0x92,0x92,0x92,0x91,0x91,0x91,0x91,0x92,0x92,0x92, + 0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x93,0x93,0x93, + 0x93,0x92,0x92,0x92,0x92,0x93,0x93,0x94,0x95,0x95,0x93,0x93,0x93,0x93,0x93, + 0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x94,0x94,0x95,0x94,0x94, + 0xc8,0x45,0x45,0x46,0x46,0x47,0x46,0x45,0x46,0x46,0x47,0x48,0x48,0x48,0x48, + 0x49,0x48,0x48,0x49,0x49,0x49,0x4a,0x4b,0x4a,0x4a,0x4b,0x4c,0x4c,0x4c,0x4c, + 0x4c,0x4c,0x4c,0x4c,0x4d,0x4d,0x4d,0x4e,0x4d,0x4e,0x4e,0x4e,0x4e,0x4e,0x4f, + 0x50,0x50,0x51,0x51,0x51,0x50,0x50,0x50,0x50,0x51,0x52,0x52,0x52,0x51,0x52, + 0x52,0x52,0x51,0x51,0x52,0x53,0x54,0x55,0x55,0x55,0x55,0x55,0x56,0x56,0x56, + 0x56,0x56,0x56,0x57,0x57,0x57,0x57,0x58,0x57,0x57,0x57,0x58,0x59,0x5a,0x5a, + 0x5a,0x58,0x57,0x57,0x5a,0x5c,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a, + 0x5a,0x5b,0x5c,0x5d,0x5d,0x5c,0x5c,0x5d,0x5e,0x5e,0x5f,0x5f,0x5f,0x60,0x61, + 0x61,0x61,0x61,0x61,0x62,0x62,0x62,0x62,0x61,0x61,0x62,0x62,0x62,0x62,0x62, + 0x62,0x62,0x63,0x64,0x64,0x65,0x65,0x65,0x66,0x66,0x66,0x65,0x65,0x65,0x65, + 0x65,0x65,0x65,0x65,0x65,0x65,0x66,0x67,0x67,0x67,0x67,0x67,0x68,0x68,0x68, + 0x68,0x67,0x67,0x68,0x69,0x6b,0x6c,0x6d,0x6c,0x69,0x69,0x6b,0x6d,0x6d,0x6d, + 0x6d,0x6d,0x6d,0x6d,0x6e,0x6e,0x6e,0x6f,0x6f,0x6f,0x6e,0x6d,0x6d,0x6d,0x6e, + 0x6f,0x6f,0x6f,0x70,0x70,0x70,0x70,0x70,0x70,0x70,0x71,0x70,0x70,0x70,0x70, + 0x71,0x72,0x73,0x73,0x74,0x74,0x74,0x74,0x74,0x74,0x74,0x74,0x75,0x75,0x76, + 0x76,0x76,0x76,0x76,0x76,0x75,0x75,0x76,0x76,0x76,0x76,0x77,0x77,0x78,0x78, + 0x78,0x77,0x78,0x78,0x79,0x79,0x79,0x78,0x78,0x78,0x78,0x78,0x78,0x79,0x79, + 0x79,0x7a,0x7a,0x7b,0x7b,0x7b,0x7b,0x7b,0x7b,0x7b,0x7b,0x7b,0x7b,0x7b,0x7b, + 0x7c,0x7c,0x7c,0x7c,0x7c,0x7c,0x7d,0x7e,0x7e,0x7e,0x7f,0x7f,0x7f,0x7f,0x80, + 0x80,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x82,0x82,0x82,0x82,0x82, + 0x82,0x82,0x82,0x82,0x83,0x82,0x83,0x83,0x82,0x83,0x84,0x84,0x85,0x85,0x85, + 0x85,0x85,0x84,0x84,0x85,0x85,0x86,0x86,0x86,0x86,0x86,0x86,0x86,0x86,0x86, + 0x87,0x87,0x86,0x86,0x86,0x87,0x88,0x89,0x88,0x88,0x87,0x86,0x87,0x87,0x88, + 0x89,0x89,0x8a,0x8a,0x8a,0x8a,0x89,0x88,0x88,0x89,0x8a,0x8a,0x8a,0x89,0x88, + 0x88,0x89,0x89,0x8a,0x8a,0x8a,0x8a,0x8a,0x8a,0x8b,0x8b,0x8b,0x8d,0x8e,0x82, + 0x87,0xaa,0x88,0x45,0x15,0x00,0x03,0x03,0x02,0x03,0x02,0x00,0x00,0x01,0x00, + 0x01,0x03,0x01,0x02,0x03,0x3d,0xa8,0xa4,0x82,0x8b,0x90,0x8e,0x8d,0x8d,0x8d, + 0x8e,0x8e,0x8d,0x8d,0x8d,0x8d,0x8d,0x8e,0x8f,0x8f,0x8f,0x90,0x90,0x91,0x91, + 0x91,0x91,0x91,0x91,0x91,0x91,0x90,0x91,0x91,0x92,0x92,0x93,0x92,0x92,0x91, + 0x92,0x92,0x93,0x93,0x92,0x92,0x94,0x94,0x93,0x93,0x92,0x93,0x94,0x94,0x94, + 0x93,0x92,0x93,0x92,0x92,0x91,0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x93, + 0x93,0x92,0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93, + 0x94,0x94,0x95,0x94,0x94,0x94,0x93,0x93,0x94,0x94,0x95,0x95,0x95,0x94,0x95, + 0x95,0x95,0x95,0x95,0x95,0x95,0x94,0x94,0x94,0x94,0x95,0x95,0x95,0x96,0x96, + 0x96,0x95,0xc8,0x45,0x45,0x46,0x46,0x46,0x45,0x45,0x47,0x48,0x48,0x48,0x48, + 0x48,0x48,0x49,0x49,0x48,0x49,0x49,0x4a,0x4b,0x4b,0x4b,0x4b,0x4c,0x4c,0x4d, + 0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4e,0x4e,0x4e,0x4e,0x4e,0x4e,0x4f,0x4f, + 0x50,0x50,0x51,0x52,0x53,0x53,0x53,0x52,0x51,0x51,0x51,0x53,0x53,0x53,0x53, + 0x53,0x53,0x53,0x52,0x52,0x52,0x53,0x53,0x55,0x55,0x56,0x56,0x56,0x56,0x56, + 0x56,0x57,0x57,0x57,0x57,0x57,0x57,0x57,0x59,0x59,0x58,0x58,0x58,0x5a,0x5a, + 0x5b,0x5b,0x5b,0x5a,0x57,0x57,0x5a,0x5d,0x5c,0x5b,0x5a,0x5a,0x5b,0x5b,0x5b, + 0x5b,0x5b,0x5b,0x5c,0x5d,0x5e,0x5e,0x5e,0x5e,0x5e,0x5f,0x60,0x60,0x60,0x60, + 0x60,0x62,0x62,0x62,0x62,0x62,0x62,0x62,0x62,0x62,0x62,0x61,0x61,0x62,0x62, + 0x62,0x62,0x62,0x62,0x63,0x64,0x65,0x66,0x67,0x68,0x68,0x68,0x68,0x67,0x67, + 0x67,0x66,0x65,0x65,0x65,0x65,0x65,0x65,0x65,0x67,0x69,0x69,0x69,0x68,0x68, + 0x68,0x68,0x68,0x67,0x67,0x68,0x69,0x6a,0x6b,0x6c,0x6b,0x69,0x6a,0x6c,0x6d, + 0x6d,0x6e,0x6e,0x6d,0x6e,0x6e,0x6f,0x6f,0x6f,0x6e,0x6e,0x6e,0x6f,0x6f,0x70, + 0x70,0x70,0x70,0x70,0x70,0x70,0x70,0x70,0x6f,0x70,0x70,0x71,0x71,0x71,0x71, + 0x72,0x72,0x73,0x73,0x74,0x74,0x74,0x74,0x74,0x74,0x75,0x75,0x75,0x75,0x76, + 0x77,0x77,0x77,0x77,0x78,0x78,0x78,0x78,0x77,0x77,0x77,0x77,0x77,0x77,0x78, + 0x78,0x78,0x78,0x78,0x78,0x79,0x7a,0x7a,0x7a,0x79,0x79,0x78,0x79,0x7a,0x7b, + 0x7b,0x7a,0x7a,0x7b,0x7b,0x7b,0x7b,0x7b,0x7c,0x7c,0x7c,0x7c,0x7c,0x7c,0x7b, + 0x7c,0x7d,0x7d,0x7d,0x7d,0x7d,0x7d,0x7e,0x7f,0x7f,0x7f,0x7f,0x7f,0x80,0x80, + 0x80,0x80,0x81,0x82,0x82,0x82,0x82,0x82,0x82,0x82,0x82,0x82,0x82,0x82,0x82, + 0x82,0x83,0x83,0x83,0x83,0x84,0x84,0x84,0x84,0x84,0x84,0x85,0x86,0x86,0x86, + 0x86,0x86,0x86,0x86,0x86,0x86,0x86,0x86,0x86,0x86,0x87,0x87,0x87,0x87,0x87, + 0x87,0x88,0x88,0x88,0x88,0x87,0x88,0x89,0x8a,0x8a,0x8a,0x8a,0x8a,0x89,0x89, + 0x8a,0x8a,0x8a,0x8a,0x8a,0x8a,0x8a,0x8a,0x8a,0x8a,0x8a,0x8a,0x8b,0x8b,0x8b, + 0x8a,0x8a,0x88,0x89,0x8a,0x8a,0x8a,0x8a,0x8a,0x8a,0x8a,0x8b,0x8b,0x8b,0x8d, + 0x8d,0x82,0x88,0xa7,0x8d,0x53,0x19,0x00,0x02,0x02,0x00,0x03,0x04,0x01,0x00, + 0x00,0x00,0x00,0x02,0x01,0x03,0x01,0x3a,0xa8,0xa5,0x82,0x8d,0x92,0x91,0x90, + 0x90,0x8f,0x8f,0x8f,0x8f,0x8e,0x8e,0x8e,0x8e,0x8f,0x8f,0x90,0x91,0x91,0x91, + 0x91,0x91,0x91,0x91,0x91,0x91,0x91,0x91,0x91,0x92,0x93,0x94,0x94,0x94,0x94, + 0x93,0x92,0x93,0x93,0x94,0x94,0x94,0x95,0x95,0x95,0x95,0x93,0x93,0x93,0x94, + 0x94,0x94,0x93,0x92,0x93,0x93,0x92,0x92,0x92,0x93,0x93,0x93,0x93,0x93,0x93, + 0x94,0x94,0x94,0x93,0x94,0x94,0x94,0x95,0x95,0x95,0x95,0x95,0x95,0x95,0x95, + 0x95,0x94,0x95,0x95,0x95,0x95,0x95,0x95,0x95,0x94,0x95,0x95,0x95,0x95,0x95, + 0x95,0x95,0x95,0x95,0x96,0x96,0x96,0x96,0x95,0x95,0x95,0x95,0x97,0x97,0x97, + 0x98,0x98,0x98,0x97,0xc8,0x46,0x46,0x45,0x45,0x46,0x46,0x46,0x48,0x48,0x49, + 0x48,0x48,0x48,0x48,0x4a,0x4a,0x49,0x4a,0x4a,0x4a,0x4a,0x4a,0x4b,0x4b,0x4b, + 0x4c,0x4c,0x4c,0x4c,0x4c,0x4d,0x4d,0x4d,0x4d,0x4d,0x4e,0x4e,0x4f,0x50,0x4f, + 0x4e,0x4e,0x4f,0x4f,0x4f,0x50,0x50,0x51,0x51,0x50,0x51,0x51,0x51,0x52,0x53, + 0x53,0x53,0x53,0x54,0x53,0x53,0x53,0x53,0x53,0x54,0x54,0x55,0x56,0x56,0x56, + 0x55,0x55,0x56,0x57,0x57,0x57,0x57,0x57,0x57,0x57,0x59,0x58,0x57,0x58,0x59, + 0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5b,0x5d,0x5d,0x5d,0x5d,0x5e,0x5e, + 0x5e,0x5e,0x5e,0x5e,0x5e,0x5e,0x5e,0x5e,0x5e,0x5f,0x5f,0x60,0x61,0x62,0x62, + 0x62,0x62,0x61,0x61,0x62,0x62,0x62,0x63,0x63,0x63,0x63,0x62,0x62,0x62,0x62, + 0x62,0x62,0x62,0x62,0x62,0x63,0x64,0x65,0x65,0x66,0x67,0x67,0x67,0x67,0x67, + 0x66,0x66,0x66,0x66,0x66,0x67,0x68,0x69,0x69,0x69,0x69,0x68,0x69,0x69,0x69, + 0x69,0x69,0x69,0x69,0x69,0x69,0x6a,0x6a,0x6b,0x6c,0x6c,0x6d,0x6c,0x6b,0x6b, + 0x6b,0x6c,0x6d,0x6e,0x6e,0x6e,0x6e,0x6e,0x6d,0x6e,0x6e,0x6e,0x6e,0x6f,0x70, + 0x70,0x71,0x71,0x71,0x70,0x70,0x70,0x70,0x71,0x71,0x72,0x72,0x73,0x74,0x74, + 0x74,0x74,0x74,0x74,0x74,0x74,0x74,0x75,0x75,0x75,0x75,0x75,0x74,0x74,0x75, + 0x76,0x77,0x78,0x78,0x78,0x78,0x78,0x78,0x78,0x78,0x79,0x79,0x79,0x79,0x78, + 0x78,0x79,0x7a,0x7a,0x7a,0x7a,0x79,0x79,0x7a,0x7b,0x7b,0x7c,0x7b,0x7b,0x7b, + 0x7c,0x7d,0x7b,0x7b,0x7b,0x7c,0x7d,0x7d,0x7d,0x7c,0x7c,0x7c,0x7d,0x7d,0x7e, + 0x7d,0x7d,0x7e,0x7f,0x7f,0x80,0x80,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x80,0x82, + 0x82,0x82,0x82,0x82,0x82,0x82,0x82,0x82,0x82,0x82,0x82,0x82,0x82,0x82,0x82, + 0x83,0x83,0x84,0x84,0x85,0x86,0x86,0x86,0x86,0x86,0x85,0x85,0x86,0x86,0x86, + 0x87,0x87,0x87,0x88,0x87,0x87,0x87,0x89,0x89,0x88,0x88,0x87,0x87,0x87,0x87, + 0x87,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x89,0x8a,0x89,0x89,0x8a,0x8a,0x8a, + 0x89,0x8a,0x8a,0x8a,0x8a,0x8a,0x8a,0x8c,0x8a,0x8a,0x8a,0x8b,0x8c,0x8c,0x8c, + 0x8c,0x8c,0x8d,0x8d,0x8d,0x8c,0x8c,0x8c,0x8c,0x8b,0x8a,0x8b,0x8d,0x8d,0x8d, + 0x8d,0x8c,0x8a,0x86,0x8d,0xa3,0x91,0x61,0x20,0x00,0x02,0x02,0x01,0x03,0x04, + 0x03,0x01,0x00,0x01,0x01,0x00,0x01,0x05,0x00,0x36,0xa5,0xa6,0x87,0x8f,0x93, + 0x91,0x91,0x92,0x91,0x91,0x90,0x90,0x90,0x90,0x90,0x90,0x91,0x91,0x91,0x91, + 0x91,0x91,0x92,0x92,0x92,0x92,0x92,0x92,0x93,0x93,0x93,0x93,0x94,0x94,0x94, + 0x94,0x94,0x94,0x95,0x95,0x95,0x95,0x95,0x95,0x95,0x95,0x95,0x95,0x95,0x95, + 0x95,0x95,0x95,0x95,0x95,0x95,0x95,0x94,0x94,0x94,0x94,0x95,0x95,0x96,0x96, + 0x96,0x96,0x96,0x96,0x96,0x96,0x97,0x97,0x97,0x97,0x97,0x97,0x97,0x97,0x97, + 0x97,0x97,0x96,0x95,0x95,0x95,0x96,0x96,0x96,0x96,0x96,0x96,0x96,0x95,0x95, + 0x95,0x96,0x96,0x96,0x96,0x96,0x96,0x96,0x96,0x96,0x96,0x96,0x96,0x96,0x97, + 0x98,0x98,0x98,0x98,0x97,0x96,0xc8,0x47,0x47,0x46,0x46,0x46,0x47,0x48,0x48, + 0x49,0x4a,0x49,0x48,0x48,0x48,0x4a,0x4a,0x4a,0x4b,0x4b,0x4b,0x4a,0x4b,0x4b, + 0x4c,0x4b,0x4c,0x4c,0x4c,0x4c,0x4c,0x4d,0x4d,0x4d,0x4d,0x4d,0x4e,0x4f,0x50, + 0x50,0x50,0x4f,0x4f,0x50,0x50,0x50,0x50,0x50,0x51,0x50,0x50,0x51,0x52,0x53, + 0x53,0x53,0x53,0x54,0x54,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x56, + 0x56,0x56,0x55,0x56,0x56,0x57,0x57,0x58,0x58,0x57,0x57,0x58,0x59,0x59,0x57, + 0x59,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5b,0x5c,0x5b,0x5b,0x5c,0x5d,0x5d,0x5e, + 0x5e,0x5e,0x5e,0x5e,0x5f,0x5f,0x5f,0x5f,0x5f,0x5f,0x5f,0x60,0x60,0x61,0x61, + 0x62,0x62,0x62,0x62,0x62,0x62,0x62,0x62,0x63,0x63,0x63,0x63,0x64,0x64,0x64, + 0x64,0x64,0x64,0x64,0x64,0x64,0x65,0x65,0x65,0x65,0x67,0x67,0x68,0x68,0x67, + 0x68,0x67,0x66,0x67,0x67,0x67,0x67,0x69,0x6a,0x6b,0x6c,0x6b,0x6a,0x69,0x69, + 0x6a,0x6a,0x6b,0x6b,0x6c,0x6c,0x6c,0x6d,0x6d,0x6d,0x6d,0x6d,0x6d,0x6d,0x6d, + 0x6d,0x6d,0x6c,0x6d,0x6d,0x6f,0x70,0x70,0x6f,0x6e,0x6e,0x6e,0x6f,0x6f,0x70, + 0x70,0x71,0x72,0x73,0x73,0x72,0x71,0x71,0x72,0x73,0x73,0x74,0x74,0x74,0x74, + 0x75,0x75,0x75,0x75,0x74,0x74,0x74,0x75,0x75,0x76,0x76,0x77,0x77,0x76,0x75, + 0x74,0x76,0x77,0x78,0x78,0x78,0x78,0x78,0x78,0x78,0x78,0x79,0x7a,0x7a,0x7b, + 0x7a,0x7a,0x7a,0x7a,0x7b,0x7b,0x7c,0x7c,0x7b,0x7b,0x7b,0x7c,0x7e,0x7e,0x7e, + 0x7d,0x7d,0x7e,0x7f,0x7d,0x7c,0x7d,0x7e,0x7f,0x7f,0x7f,0x7e,0x7e,0x7e,0x7f, + 0x7f,0x7f,0x7f,0x7f,0x80,0x81,0x82,0x82,0x82,0x81,0x81,0x80,0x80,0x80,0x80, + 0x81,0x83,0x83,0x83,0x83,0x83,0x83,0x83,0x83,0x83,0x83,0x83,0x83,0x84,0x84, + 0x84,0x84,0x85,0x85,0x86,0x86,0x86,0x87,0x87,0x87,0x87,0x87,0x86,0x86,0x86, + 0x87,0x88,0x88,0x89,0x89,0x89,0x89,0x89,0x89,0x8a,0x8a,0x8a,0x89,0x89,0x88, + 0x88,0x88,0x88,0x89,0x89,0x89,0x89,0x89,0x89,0x8a,0x8a,0x8a,0x8a,0x8a,0x8a, + 0x8a,0x8a,0x8b,0x8b,0x8a,0x8a,0x8b,0x8a,0x8b,0x8b,0x8a,0x8a,0x8c,0x8c,0x8a, + 0x8a,0x8b,0x8c,0x8d,0x8e,0x8f,0x8f,0x8d,0x8d,0x8d,0x8d,0x8d,0x8c,0x8d,0x8e, + 0x8f,0x8f,0x8d,0x8d,0x8d,0x88,0x8e,0xa3,0x93,0x67,0x23,0x00,0x03,0x03,0x01, + 0x03,0x03,0x03,0x01,0x00,0x02,0x02,0x00,0x01,0x03,0x00,0x32,0xa2,0xa7,0x8d, + 0x91,0x94,0x92,0x94,0x95,0x94,0x92,0x91,0x91,0x91,0x91,0x91,0x91,0x92,0x92, + 0x92,0x92,0x92,0x93,0x94,0x94,0x94,0x94,0x94,0x94,0x95,0x95,0x95,0x95,0x95, + 0x94,0x94,0x94,0x95,0x95,0x96,0x96,0x97,0x97,0x97,0x97,0x96,0x96,0x96,0x96, + 0x96,0x96,0x96,0x96,0x96,0x96,0x96,0x97,0x95,0x95,0x95,0x95,0x95,0x96,0x97, + 0x98,0x98,0x98,0x98,0x98,0x97,0x98,0x98,0x98,0x98,0x98,0x98,0x98,0x98,0x98, + 0x98,0x98,0x98,0x98,0x98,0x96,0x96,0x96,0x96,0x97,0x97,0x98,0x98,0x98,0x98, + 0x97,0x96,0x96,0x96,0x97,0x97,0x97,0x97,0x96,0x96,0x96,0x97,0x98,0x98,0x98, + 0x98,0x98,0x98,0x98,0x98,0x98,0x97,0x96,0xc8,0x48,0x48,0x48,0x48,0x48,0x48, + 0x49,0x4a,0x4a,0x4b,0x4a,0x4a,0x49,0x49,0x4b,0x4b,0x4b,0x4c,0x4c,0x4c,0x4c, + 0x4c,0x4c,0x4c,0x4c,0x4c,0x4c,0x4c,0x4d,0x4e,0x4f,0x4f,0x4e,0x4e,0x4e,0x4f, + 0x50,0x50,0x50,0x50,0x50,0x51,0x51,0x53,0x53,0x53,0x53,0x53,0x52,0x52,0x53, + 0x53,0x54,0x53,0x53,0x54,0x54,0x55,0x55,0x56,0x56,0x56,0x57,0x57,0x57,0x57, + 0x57,0x57,0x57,0x57,0x57,0x57,0x57,0x57,0x58,0x59,0x59,0x59,0x59,0x59,0x5a, + 0x59,0x59,0x5a,0x5b,0x5c,0x5b,0x5a,0x5a,0x5b,0x5d,0x5d,0x5d,0x5c,0x5b,0x5c, + 0x5d,0x5e,0x5e,0x5e,0x5e,0x5e,0x5f,0x60,0x61,0x62,0x61,0x60,0x60,0x61,0x61, + 0x61,0x61,0x61,0x61,0x62,0x62,0x62,0x63,0x63,0x62,0x62,0x63,0x64,0x64,0x65, + 0x65,0x66,0x66,0x66,0x67,0x67,0x67,0x67,0x67,0x68,0x68,0x68,0x69,0x69,0x69, + 0x69,0x69,0x69,0x68,0x68,0x68,0x69,0x69,0x69,0x69,0x6a,0x6b,0x6b,0x6b,0x6a, + 0x6a,0x6b,0x6c,0x6d,0x6e,0x6e,0x6e,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f, + 0x6f,0x6f,0x70,0x70,0x70,0x70,0x70,0x72,0x72,0x72,0x70,0x70,0x70,0x70,0x70, + 0x70,0x71,0x73,0x73,0x74,0x74,0x74,0x74,0x74,0x74,0x74,0x75,0x75,0x75,0x75, + 0x75,0x75,0x75,0x75,0x75,0x75,0x75,0x75,0x75,0x76,0x77,0x77,0x77,0x78,0x78, + 0x77,0x76,0x76,0x78,0x78,0x7a,0x7a,0x79,0x79,0x79,0x79,0x79,0x79,0x7a,0x7a, + 0x7b,0x7b,0x7b,0x7b,0x7b,0x7b,0x7b,0x7c,0x7f,0x7f,0x7e,0x7d,0x7d,0x7e,0x7f, + 0x7f,0x7f,0x7f,0x7f,0x7f,0x80,0x7f,0x7e,0x7e,0x7f,0x7f,0x7f,0x80,0x80,0x81, + 0x81,0x81,0x81,0x82,0x82,0x82,0x82,0x83,0x84,0x83,0x83,0x82,0x82,0x82,0x82, + 0x82,0x81,0x82,0x84,0x85,0x85,0x85,0x85,0x86,0x86,0x86,0x86,0x86,0x86,0x86, + 0x86,0x86,0x87,0x87,0x87,0x87,0x88,0x88,0x88,0x88,0x88,0x89,0x89,0x89,0x87, + 0x87,0x88,0x88,0x89,0x89,0x8a,0x8a,0x8a,0x8a,0x8a,0x8a,0x8a,0x8a,0x8b,0x8a, + 0x8a,0x8a,0x8a,0x8a,0x8a,0x8a,0x8b,0x8b,0x8b,0x8b,0x8b,0x8d,0x8c,0x8b,0x8d, + 0x8e,0x8d,0x8c,0x8d,0x8e,0x8d,0x8b,0x8b,0x8d,0x8d,0x8d,0x8a,0x8a,0x8b,0x8e, + 0x8d,0x87,0x88,0x8a,0x8d,0x8f,0x90,0x90,0x90,0x8f,0x8f,0x8f,0x8f,0x8e,0x8e, + 0x8e,0x90,0x91,0x90,0x8f,0x91,0x92,0x8a,0x8d,0xa7,0x95,0x65,0x21,0x00,0x06, + 0x05,0x02,0x03,0x03,0x01,0x01,0x02,0x03,0x03,0x03,0x01,0x00,0x00,0x2d,0x9f, + 0xa9,0x92,0x93,0x94,0x94,0x95,0x95,0x95,0x94,0x93,0x93,0x94,0x94,0x94,0x94, + 0x94,0x95,0x94,0x94,0x94,0x94,0x95,0x95,0x95,0x95,0x95,0x95,0x96,0x95,0x95, + 0x95,0x95,0x95,0x95,0x95,0x95,0x96,0x97,0x97,0x98,0x98,0x98,0x97,0x97,0x97, + 0x97,0x97,0x98,0x97,0x97,0x97,0x97,0x97,0x97,0x97,0x97,0x97,0x97,0x97,0x97, + 0x97,0x98,0x98,0x98,0x98,0x98,0x98,0x98,0x98,0x99,0x99,0x99,0x99,0x99,0x99, + 0x99,0x99,0x99,0x99,0x99,0x99,0x98,0x98,0x98,0x98,0x98,0x98,0x98,0x98,0x99, + 0x99,0x98,0x98,0x98,0x98,0x98,0x98,0x98,0x98,0x98,0x98,0x98,0x98,0x98,0x98, + 0x98,0x98,0x98,0x98,0x98,0x98,0x98,0x98,0x97,0x97,0xc8,0x49,0x49,0x48,0x48, + 0x48,0x49,0x4a,0x4a,0x4b,0x4c,0x4b,0x4a,0x4a,0x4b,0x4c,0x4c,0x4c,0x4c,0x4c, + 0x4c,0x4c,0x4c,0x4c,0x4c,0x4d,0x4d,0x4d,0x4d,0x4e,0x4f,0x50,0x50,0x50,0x4f, + 0x50,0x50,0x50,0x51,0x51,0x51,0x51,0x52,0x53,0x53,0x54,0x54,0x54,0x53,0x53, + 0x53,0x53,0x54,0x55,0x54,0x53,0x54,0x55,0x55,0x56,0x57,0x57,0x57,0x57,0x57, + 0x57,0x57,0x57,0x57,0x57,0x57,0x57,0x57,0x57,0x58,0x59,0x59,0x5a,0x5a,0x59, + 0x5a,0x5a,0x5a,0x5a,0x5a,0x5c,0x5d,0x5c,0x5a,0x5b,0x5b,0x5d,0x5e,0x5e,0x5d, + 0x5c,0x5d,0x5e,0x5e,0x5e,0x5e,0x5e,0x5f,0x5f,0x60,0x62,0x62,0x62,0x61,0x62, + 0x62,0x62,0x62,0x62,0x61,0x61,0x62,0x62,0x63,0x64,0x64,0x63,0x63,0x64,0x65, + 0x65,0x65,0x66,0x67,0x67,0x67,0x67,0x67,0x67,0x68,0x69,0x69,0x69,0x69,0x69, + 0x69,0x69,0x69,0x69,0x69,0x69,0x69,0x69,0x69,0x69,0x6a,0x6b,0x6b,0x6b,0x6b, + 0x6a,0x6a,0x6b,0x6d,0x6e,0x6e,0x6e,0x6f,0x6f,0x70,0x70,0x70,0x70,0x70,0x70, + 0x70,0x70,0x70,0x70,0x71,0x71,0x70,0x71,0x72,0x73,0x73,0x73,0x71,0x70,0x70, + 0x70,0x70,0x72,0x73,0x74,0x74,0x74,0x75,0x75,0x75,0x75,0x75,0x76,0x77,0x77, + 0x76,0x76,0x76,0x76,0x75,0x75,0x75,0x75,0x75,0x76,0x77,0x78,0x78,0x78,0x77, + 0x78,0x79,0x78,0x77,0x77,0x78,0x7a,0x7b,0x7a,0x79,0x7a,0x7a,0x7a,0x7a,0x7b, + 0x7b,0x7b,0x7b,0x7b,0x7b,0x7b,0x7b,0x7b,0x7c,0x7e,0x80,0x81,0x7f,0x7f,0x7e, + 0x7f,0x7f,0x80,0x7f,0x7f,0x7f,0x7f,0x81,0x80,0x7f,0x7f,0x80,0x80,0x81,0x81, + 0x82,0x82,0x82,0x82,0x82,0x82,0x83,0x83,0x84,0x84,0x84,0x84,0x84,0x84,0x83, + 0x83,0x83,0x84,0x83,0x84,0x86,0x86,0x86,0x86,0x86,0x86,0x86,0x86,0x86,0x86, + 0x86,0x86,0x86,0x87,0x88,0x88,0x88,0x88,0x89,0x89,0x88,0x88,0x88,0x89,0x89, + 0x8a,0x89,0x89,0x89,0x89,0x8a,0x8a,0x8a,0x8a,0x8a,0x8a,0x8a,0x8a,0x8a,0x8b, + 0x8c,0x8b,0x8b,0x8a,0x8a,0x8a,0x8b,0x8b,0x8c,0x8c,0x8c,0x8c,0x8c,0x8d,0x8d, + 0x8d,0x8d,0x8d,0x8e,0x8e,0x8e,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x8c,0x8c, + 0x8d,0x90,0x8e,0x8a,0x8b,0x8e,0x91,0x91,0x8f,0x90,0x91,0x90,0x90,0x91,0x91, + 0x90,0x8f,0x90,0x91,0x91,0x91,0x91,0x91,0x93,0x8a,0x90,0xac,0x91,0x57,0x1b, + 0x00,0x06,0x05,0x01,0x03,0x03,0x02,0x01,0x02,0x02,0x03,0x03,0x02,0x00,0x00, + 0x2a,0x98,0xa9,0x98,0x95,0x93,0x95,0x95,0x95,0x95,0x95,0x94,0x94,0x95,0x95, + 0x95,0x95,0x95,0x95,0x95,0x95,0x95,0x95,0x95,0x95,0x95,0x96,0x96,0x96,0x97, + 0x97,0x97,0x96,0x97,0x97,0x96,0x96,0x97,0x97,0x98,0x98,0x98,0x98,0x98,0x97, + 0x97,0x98,0x97,0x98,0x98,0x98,0x98,0x98,0x98,0x98,0x97,0x97,0x98,0x98,0x98, + 0x98,0x98,0x98,0x98,0x99,0x99,0x98,0x98,0x98,0x98,0x98,0x99,0x99,0x99,0x99, + 0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x98,0x98,0x98,0x98,0x98,0x99, + 0x99,0x9a,0x9a,0x99,0x99,0x98,0x98,0x98,0x98,0x98,0x98,0x98,0x98,0x98,0x98, + 0x98,0x99,0x99,0x99,0x98,0x98,0x98,0x99,0x99,0x98,0x98,0x98,0xc8,0x4a,0x4a, + 0x49,0x49,0x49,0x4a,0x4a,0x4b,0x4b,0x4c,0x4c,0x4b,0x4b,0x4b,0x4c,0x4c,0x4c, + 0x4c,0x4c,0x4c,0x4c,0x4c,0x4c,0x4c,0x4d,0x4d,0x4d,0x4e,0x4f,0x50,0x50,0x50, + 0x50,0x50,0x50,0x51,0x51,0x52,0x52,0x52,0x52,0x52,0x53,0x54,0x55,0x54,0x54, + 0x53,0x53,0x53,0x53,0x55,0x56,0x55,0x54,0x55,0x55,0x56,0x57,0x57,0x57,0x57, + 0x57,0x57,0x57,0x57,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x59,0x59,0x5a,0x5a, + 0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5b,0x5d,0x5c,0x5b,0x5b,0x5c,0x5e,0x5e, + 0x5e,0x5e,0x5e,0x5e,0x5f,0x5f,0x5f,0x5f,0x5f,0x5f,0x5f,0x60,0x61,0x62,0x62, + 0x62,0x62,0x63,0x63,0x63,0x62,0x62,0x62,0x62,0x62,0x63,0x65,0x65,0x64,0x65, + 0x65,0x65,0x65,0x66,0x67,0x67,0x67,0x67,0x67,0x67,0x67,0x69,0x69,0x69,0x69, + 0x69,0x69,0x69,0x69,0x69,0x69,0x69,0x69,0x69,0x69,0x6a,0x6a,0x6b,0x6c,0x6c, + 0x6c,0x6b,0x6b,0x6b,0x6c,0x6d,0x6f,0x6f,0x6e,0x6f,0x6f,0x70,0x70,0x70,0x70, + 0x70,0x70,0x71,0x71,0x71,0x71,0x72,0x72,0x71,0x72,0x72,0x73,0x73,0x73,0x72, + 0x71,0x70,0x70,0x71,0x73,0x74,0x74,0x74,0x74,0x75,0x75,0x75,0x76,0x76,0x77, + 0x78,0x78,0x77,0x76,0x76,0x76,0x76,0x76,0x76,0x76,0x77,0x77,0x78,0x79,0x79, + 0x78,0x77,0x79,0x7a,0x78,0x78,0x78,0x7a,0x7b,0x7b,0x7a,0x79,0x7a,0x7b,0x7b, + 0x7b,0x7b,0x7b,0x7b,0x7c,0x7c,0x7c,0x7c,0x7c,0x7d,0x7e,0x7f,0x81,0x82,0x80, + 0x7f,0x7f,0x7f,0x80,0x80,0x80,0x7f,0x7f,0x80,0x81,0x81,0x81,0x81,0x81,0x81, + 0x82,0x82,0x83,0x83,0x83,0x83,0x83,0x83,0x84,0x84,0x84,0x84,0x84,0x84,0x84, + 0x85,0x85,0x85,0x86,0x86,0x86,0x86,0x86,0x86,0x86,0x86,0x86,0x86,0x86,0x86, + 0x86,0x86,0x86,0x87,0x87,0x88,0x88,0x89,0x89,0x89,0x89,0x89,0x88,0x88,0x88, + 0x89,0x8a,0x8a,0x8a,0x8a,0x8a,0x8a,0x8a,0x8b,0x8b,0x8b,0x8b,0x8b,0x8b,0x8b, + 0x8b,0x8c,0x8c,0x8c,0x8c,0x8b,0x8b,0x8b,0x8c,0x8c,0x8d,0x8d,0x8d,0x8d,0x8d, + 0x8d,0x8e,0x90,0x8d,0x8d,0x8f,0x8f,0x8f,0x8d,0x8d,0x90,0x8e,0x8d,0x8d,0x8e, + 0x8e,0x8e,0x8e,0x8f,0x8f,0x8e,0x90,0x92,0x95,0x93,0x8d,0x8f,0x91,0x91,0x91, + 0x91,0x92,0x91,0x90,0x91,0x91,0x93,0x93,0x92,0x91,0x91,0x8a,0x92,0xb1,0x8d, + 0x48,0x15,0x00,0x05,0x04,0x01,0x02,0x03,0x02,0x02,0x01,0x00,0x01,0x03,0x03, + 0x03,0x00,0x28,0x91,0xa8,0x9f,0x95,0x91,0x95,0x95,0x95,0x95,0x95,0x95,0x95, + 0x95,0x95,0x96,0x96,0x96,0x96,0x96,0x96,0x95,0x95,0x95,0x95,0x95,0x96,0x97, + 0x97,0x98,0x98,0x98,0x98,0x98,0x98,0x98,0x97,0x98,0x98,0x98,0x98,0x98,0x98, + 0x98,0x97,0x97,0x98,0x98,0x98,0x98,0x98,0x98,0x98,0x98,0x98,0x98,0x98,0x98, + 0x98,0x98,0x98,0x98,0x98,0x98,0x99,0x99,0x99,0x98,0x98,0x98,0x99,0x99,0x99, + 0x99,0x98,0x98,0x98,0x98,0x98,0x98,0x99,0x99,0x99,0x99,0x98,0x98,0x98,0x99, + 0x9a,0x9a,0x9a,0x9a,0x9a,0x9a,0x9a,0x9a,0x99,0x99,0x99,0x99,0x99,0x99,0x99, + 0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x9a,0x9a,0x9a,0x9a,0x99,0x98,0xc8, + 0x49,0x49,0x49,0x49,0x49,0x49,0x4a,0x4b,0x4b,0x4c,0x4c,0x4c,0x4c,0x4c,0x4c, + 0x4c,0x4c,0x4c,0x4c,0x4c,0x4c,0x4d,0x4d,0x4d,0x4e,0x4e,0x4e,0x4f,0x50,0x50, + 0x51,0x52,0x52,0x51,0x51,0x51,0x52,0x53,0x53,0x53,0x52,0x52,0x53,0x53,0x54, + 0x54,0x54,0x53,0x53,0x53,0x54,0x55,0x56,0x55,0x55,0x55,0x56,0x57,0x57,0x57, + 0x57,0x57,0x57,0x57,0x57,0x58,0x59,0x59,0x59,0x59,0x59,0x59,0x59,0x5a,0x5a, + 0x5a,0x5a,0x5a,0x5b,0x5b,0x5b,0x5b,0x5a,0x5a,0x5b,0x5d,0x5d,0x5c,0x5c,0x5d, + 0x5e,0x5e,0x5e,0x5e,0x60,0x60,0x61,0x61,0x61,0x61,0x61,0x60,0x60,0x60,0x61, + 0x62,0x62,0x62,0x62,0x63,0x64,0x64,0x64,0x63,0x63,0x63,0x63,0x64,0x65,0x65, + 0x65,0x65,0x65,0x66,0x66,0x67,0x67,0x67,0x67,0x67,0x67,0x67,0x67,0x68,0x69, + 0x69,0x69,0x69,0x69,0x69,0x69,0x69,0x69,0x69,0x69,0x69,0x6a,0x6b,0x6b,0x6c, + 0x6d,0x6d,0x6d,0x6d,0x6d,0x6d,0x6d,0x6d,0x6e,0x6e,0x6d,0x6e,0x6f,0x70,0x70, + 0x70,0x70,0x70,0x71,0x71,0x71,0x72,0x72,0x71,0x71,0x72,0x72,0x72,0x73,0x73, + 0x73,0x72,0x71,0x71,0x71,0x72,0x74,0x74,0x74,0x74,0x74,0x75,0x75,0x75,0x75, + 0x76,0x77,0x78,0x78,0x77,0x76,0x76,0x77,0x77,0x78,0x78,0x78,0x78,0x79,0x7a, + 0x7b,0x7b,0x79,0x78,0x7a,0x7b,0x7a,0x78,0x78,0x7b,0x7c,0x7c,0x7b,0x7a,0x7b, + 0x7c,0x7d,0x7d,0x7c,0x7c,0x7d,0x7d,0x7d,0x7d,0x7d,0x7e,0x7e,0x7f,0x7f,0x81, + 0x81,0x80,0x7f,0x7f,0x7f,0x80,0x80,0x80,0x7f,0x7f,0x80,0x81,0x82,0x82,0x82, + 0x82,0x82,0x82,0x83,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84, + 0x84,0x85,0x86,0x86,0x86,0x86,0x87,0x87,0x86,0x86,0x86,0x86,0x86,0x86,0x86, + 0x86,0x86,0x86,0x87,0x86,0x87,0x87,0x88,0x89,0x89,0x89,0x8a,0x8a,0x89,0x88, + 0x89,0x89,0x8a,0x8a,0x8b,0x8b,0x8b,0x8b,0x8b,0x8b,0x8c,0x8d,0x8d,0x8d,0x8d, + 0x8d,0x8d,0x8c,0x8d,0x8d,0x8d,0x8c,0x8c,0x8c,0x8c,0x8d,0x8d,0x8d,0x8d,0x8d, + 0x8d,0x8e,0x8f,0x8d,0x8d,0x8f,0x90,0x8d,0x8d,0x8e,0x91,0x90,0x8d,0x8f,0x91, + 0x90,0x90,0x91,0x91,0x90,0x8d,0x8d,0x8f,0x91,0x91,0x93,0x91,0x8e,0x90,0x92, + 0x91,0x92,0x93,0x93,0x93,0x91,0x91,0x92,0x93,0x94,0x93,0x92,0x91,0x8c,0x95, + 0xb5,0x8e,0x45,0x15,0x00,0x05,0x04,0x03,0x03,0x04,0x03,0x02,0x00,0x00,0x00, + 0x02,0x05,0x07,0x00,0x26,0x89,0xa6,0xa3,0x96,0x91,0x94,0x95,0x95,0x95,0x95, + 0x95,0x95,0x95,0x95,0x96,0x96,0x96,0x97,0x97,0x97,0x96,0x96,0x96,0x96,0x97, + 0x97,0x98,0x98,0x98,0x98,0x99,0x99,0x98,0x98,0x98,0x98,0x98,0x98,0x98,0x98, + 0x98,0x98,0x98,0x98,0x98,0x98,0x98,0x98,0x99,0x99,0x99,0x99,0x99,0x98,0x98, + 0x98,0x98,0x98,0x98,0x98,0x98,0x98,0x99,0x99,0x99,0x9a,0x99,0x99,0x99,0x99, + 0x9a,0x9a,0x99,0x98,0x98,0x98,0x98,0x98,0x98,0x99,0x9a,0x9a,0x99,0x99,0x99, + 0x99,0x99,0x9a,0x9b,0x9b,0x9b,0x9b,0x9b,0x9b,0x9b,0x9a,0x9a,0x9a,0x9a,0x9a, + 0x9a,0x9a,0x9a,0x9a,0x9a,0x9a,0x9a,0x9a,0x9a,0x9b,0x9b,0x9c,0x9c,0x9c,0x9b, + 0x9b,0xc8,0x49,0x49,0x49,0x49,0x49,0x49,0x4a,0x4b,0x4b,0x4c,0x4c,0x4c,0x4c, + 0x4c,0x4c,0x4c,0x4c,0x4d,0x4d,0x4d,0x4d,0x4e,0x4e,0x4e,0x4f,0x4f,0x4f,0x50, + 0x50,0x51,0x52,0x52,0x52,0x52,0x51,0x52,0x53,0x53,0x53,0x53,0x53,0x52,0x53, + 0x53,0x54,0x54,0x54,0x54,0x54,0x54,0x55,0x56,0x56,0x56,0x55,0x56,0x57,0x57, + 0x57,0x57,0x58,0x58,0x58,0x59,0x59,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a, + 0x5a,0x5b,0x5b,0x5c,0x5c,0x5c,0x5d,0x5d,0x5c,0x5b,0x5b,0x5c,0x5d,0x5e,0x5e, + 0x5e,0x5e,0x5f,0x5e,0x5e,0x5f,0x60,0x61,0x62,0x62,0x62,0x62,0x62,0x61,0x61, + 0x61,0x62,0x62,0x62,0x62,0x62,0x63,0x64,0x65,0x65,0x65,0x65,0x65,0x65,0x65, + 0x65,0x65,0x65,0x65,0x65,0x66,0x66,0x67,0x67,0x68,0x68,0x68,0x68,0x68,0x68, + 0x69,0x69,0x69,0x69,0x69,0x69,0x69,0x6a,0x6a,0x6a,0x6b,0x6b,0x6b,0x6b,0x6c, + 0x6d,0x6d,0x6d,0x6d,0x6e,0x6e,0x6e,0x6e,0x6e,0x6e,0x6e,0x6e,0x6e,0x6f,0x70, + 0x70,0x71,0x71,0x71,0x71,0x71,0x71,0x71,0x72,0x72,0x72,0x72,0x73,0x73,0x73, + 0x74,0x74,0x74,0x73,0x73,0x73,0x74,0x74,0x74,0x74,0x75,0x75,0x75,0x75,0x75, + 0x75,0x76,0x77,0x78,0x78,0x79,0x78,0x77,0x78,0x78,0x78,0x79,0x7a,0x7a,0x7b, + 0x7b,0x7b,0x7b,0x7c,0x7b,0x79,0x7b,0x7c,0x7b,0x7a,0x7a,0x7c,0x7e,0x7d,0x7b, + 0x7b,0x7c,0x7d,0x7f,0x7e,0x7e,0x7e,0x7e,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f, + 0x80,0x81,0x81,0x80,0x80,0x80,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x82,0x82, + 0x83,0x83,0x83,0x84,0x84,0x84,0x84,0x85,0x85,0x85,0x85,0x85,0x85,0x85,0x85, + 0x85,0x85,0x85,0x86,0x86,0x87,0x88,0x88,0x87,0x87,0x87,0x86,0x86,0x86,0x86, + 0x86,0x87,0x87,0x87,0x88,0x88,0x88,0x88,0x88,0x89,0x8a,0x8a,0x8a,0x8a,0x8a, + 0x8a,0x8a,0x8a,0x8a,0x8b,0x8c,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x8e, + 0x8e,0x8e,0x8e,0x8e,0x8d,0x8d,0x8e,0x8d,0x8d,0x8d,0x8d,0x8d,0x8e,0x8e,0x8f, + 0x8f,0x8f,0x8f,0x8f,0x91,0x8f,0x8e,0x90,0x91,0x8f,0x8f,0x90,0x91,0x91,0x90, + 0x91,0x92,0x90,0x90,0x92,0x92,0x91,0x90,0x90,0x91,0x91,0x90,0x92,0x92,0x91, + 0x91,0x93,0x93,0x93,0x95,0x95,0x94,0x92,0x92,0x93,0x94,0x95,0x94,0x94,0x94, + 0x8d,0x96,0xb5,0x94,0x51,0x1a,0x00,0x05,0x04,0x02,0x03,0x03,0x03,0x01,0x01, + 0x00,0x00,0x02,0x05,0x07,0x00,0x24,0x86,0xa5,0xa5,0x96,0x90,0x95,0x96,0x95, + 0x95,0x95,0x95,0x95,0x95,0x96,0x97,0x96,0x97,0x97,0x97,0x98,0x98,0x97,0x97, + 0x98,0x98,0x98,0x98,0x98,0x98,0x98,0x99,0x9a,0x99,0x99,0x98,0x98,0x98,0x98, + 0x98,0x98,0x98,0x98,0x98,0x99,0x99,0x99,0x99,0x99,0x99,0x9a,0x9a,0x9a,0x9a, + 0x9a,0x9a,0x9a,0x99,0x99,0x99,0x99,0x99,0x99,0x9a,0x9a,0x9a,0x9b,0x9b,0x9b, + 0x9b,0x9b,0x9b,0x9b,0x9b,0x9a,0x9a,0x9a,0x9a,0x9a,0x9a,0x9b,0x9b,0x9b,0x9b, + 0x9b,0x9b,0x9b,0x9b,0x9b,0x9c,0x9c,0x9c,0x9c,0x9c,0x9c,0x9c,0x9c,0x9c,0x9c, + 0x9c,0x9c,0x9c,0x9c,0x9c,0x9c,0x9c,0x9c,0x9c,0x9c,0x9c,0x9c,0x9c,0x9d,0x9d, + 0x9d,0x9c,0x9c,0xc8,0x48,0x48,0x48,0x48,0x49,0x49,0x4a,0x4b,0x4b,0x4c,0x4c, + 0x4c,0x4c,0x4c,0x4d,0x4d,0x4d,0x4e,0x4e,0x4e,0x4e,0x4f,0x4f,0x4f,0x50,0x50, + 0x50,0x50,0x51,0x52,0x53,0x53,0x52,0x52,0x52,0x52,0x53,0x53,0x53,0x54,0x53, + 0x53,0x53,0x53,0x53,0x54,0x54,0x55,0x55,0x56,0x56,0x56,0x56,0x56,0x56,0x56, + 0x57,0x57,0x57,0x58,0x59,0x5a,0x5a,0x5a,0x5b,0x5c,0x5c,0x5b,0x5b,0x5b,0x5b, + 0x5b,0x5c,0x5c,0x5c,0x5d,0x5d,0x5e,0x5e,0x5e,0x5f,0x5e,0x5c,0x5c,0x5d,0x5e, + 0x5e,0x5f,0x60,0x61,0x61,0x60,0x5e,0x5e,0x5f,0x61,0x62,0x62,0x62,0x62,0x62, + 0x62,0x62,0x62,0x63,0x64,0x63,0x63,0x63,0x63,0x64,0x64,0x65,0x65,0x65,0x66, + 0x65,0x65,0x65,0x65,0x65,0x65,0x65,0x66,0x67,0x68,0x68,0x69,0x69,0x69,0x6a, + 0x6a,0x6b,0x6b,0x6b,0x6b,0x6b,0x6b,0x6b,0x6b,0x6c,0x6c,0x6d,0x6d,0x6d,0x6d, + 0x6d,0x6d,0x6e,0x6e,0x6e,0x6f,0x6f,0x70,0x70,0x70,0x70,0x70,0x70,0x70,0x71, + 0x71,0x72,0x73,0x73,0x73,0x72,0x72,0x71,0x71,0x71,0x72,0x72,0x74,0x74,0x74, + 0x75,0x75,0x75,0x75,0x75,0x75,0x75,0x76,0x76,0x76,0x74,0x74,0x76,0x76,0x77, + 0x77,0x77,0x77,0x77,0x77,0x78,0x7a,0x7b,0x79,0x78,0x79,0x7b,0x7b,0x7b,0x7c, + 0x7d,0x7c,0x7c,0x7c,0x7c,0x7c,0x7b,0x7b,0x7c,0x7d,0x7c,0x7b,0x7c,0x7e,0x7f, + 0x7e,0x7d,0x7c,0x7d,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f, + 0x80,0x80,0x81,0x82,0x82,0x81,0x81,0x82,0x82,0x82,0x83,0x83,0x83,0x83,0x83, + 0x83,0x83,0x83,0x84,0x85,0x86,0x86,0x86,0x86,0x86,0x86,0x86,0x86,0x87,0x87, + 0x87,0x87,0x87,0x87,0x87,0x87,0x88,0x89,0x89,0x88,0x88,0x87,0x87,0x89,0x89, + 0x89,0x89,0x89,0x89,0x89,0x8a,0x8a,0x8a,0x8a,0x8a,0x8a,0x8a,0x8a,0x8b,0x8b, + 0x8c,0x8c,0x8c,0x8c,0x8c,0x8c,0x8d,0x8e,0x8f,0x8e,0x8e,0x8e,0x8e,0x8e,0x8e, + 0x8f,0x8f,0x8f,0x90,0x90,0x90,0x90,0x90,0x90,0x8f,0x8e,0x8e,0x8e,0x8f,0x8f, + 0x90,0x91,0x91,0x91,0x91,0x91,0x91,0x92,0x93,0x90,0x90,0x92,0x93,0x92,0x90, + 0x91,0x95,0x94,0x91,0x8f,0x90,0x94,0x92,0x91,0x96,0x96,0x92,0x90,0x90,0x93, + 0x94,0x95,0x94,0x94,0x94,0x95,0x95,0x95,0x95,0x93,0x93,0x95,0x95,0x95,0x94, + 0x95,0x96,0x8d,0x94,0xb1,0x9c,0x67,0x21,0x00,0x04,0x03,0x00,0x02,0x03,0x00, + 0x01,0x03,0x02,0x02,0x03,0x05,0x05,0x00,0x22,0x86,0xa6,0xa5,0x96,0x91,0x97, + 0x98,0x97,0x97,0x97,0x97,0x96,0x95,0x97,0x98,0x98,0x98,0x98,0x98,0x98,0x99, + 0x98,0x98,0x99,0x99,0x9a,0x9a,0x9a,0x99,0x99,0x9a,0x9a,0x9a,0x9a,0x99,0x99, + 0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x9b,0x9b,0x9b,0x9b,0x9b,0x9b,0x9b,0x9c, + 0x9c,0x9c,0x9c,0x9c,0x9c,0x9c,0x9b,0x9b,0x9b,0x9b,0x9b,0x9b,0x9c,0x9c,0x9c, + 0x9c,0x9c,0x9c,0x9c,0x9c,0x9c,0x9c,0x9c,0x9c,0x9c,0x9c,0x9c,0x9c,0x9c,0x9c, + 0x9c,0x9c,0x9c,0x9c,0x9c,0x9c,0x9c,0x9d,0x9d,0x9e,0x9e,0x9e,0x9e,0x9d,0x9d, + 0x9d,0x9d,0x9d,0x9d,0x9d,0x9d,0x9d,0x9d,0x9d,0x9d,0x9d,0x9d,0x9d,0x9d,0x9d, + 0x9e,0x9e,0x9e,0x9d,0x9d,0xc8,0x48,0x48,0x49,0x49,0x4a,0x4a,0x4b,0x4c,0x4c, + 0x4c,0x4d,0x4d,0x4d,0x4d,0x4e,0x4e,0x4e,0x4e,0x4e,0x4f,0x4f,0x4f,0x4f,0x50, + 0x50,0x50,0x50,0x50,0x51,0x52,0x53,0x53,0x52,0x52,0x53,0x53,0x53,0x54,0x54, + 0x55,0x55,0x55,0x54,0x54,0x53,0x54,0x55,0x56,0x57,0x57,0x57,0x56,0x56,0x57, + 0x57,0x57,0x58,0x58,0x59,0x59,0x5a,0x5a,0x5a,0x5a,0x5b,0x5c,0x5c,0x5b,0x5b, + 0x5c,0x5c,0x5c,0x5d,0x5d,0x5d,0x5d,0x5d,0x5e,0x5e,0x5e,0x60,0x5f,0x5d,0x5d, + 0x5e,0x5f,0x60,0x60,0x62,0x62,0x62,0x61,0x5f,0x5f,0x60,0x61,0x62,0x62,0x62, + 0x63,0x63,0x63,0x63,0x63,0x64,0x64,0x64,0x65,0x64,0x64,0x64,0x65,0x65,0x65, + 0x66,0x67,0x67,0x67,0x67,0x66,0x66,0x66,0x66,0x67,0x67,0x68,0x69,0x69,0x69, + 0x6a,0x6b,0x6c,0x6c,0x6c,0x6c,0x6c,0x6c,0x6c,0x6c,0x6d,0x6d,0x6d,0x6d,0x6e, + 0x6e,0x6e,0x6f,0x6f,0x6f,0x6f,0x6e,0x6e,0x6f,0x70,0x70,0x71,0x71,0x71,0x70, + 0x71,0x72,0x72,0x73,0x74,0x74,0x74,0x73,0x72,0x71,0x72,0x72,0x73,0x74,0x74, + 0x75,0x75,0x76,0x76,0x76,0x76,0x76,0x76,0x76,0x77,0x77,0x77,0x76,0x76,0x77, + 0x78,0x78,0x78,0x78,0x78,0x78,0x78,0x79,0x7b,0x7b,0x7b,0x7a,0x7b,0x7b,0x7c, + 0x7d,0x7e,0x7e,0x7d,0x7d,0x7c,0x7c,0x7c,0x7c,0x7c,0x7d,0x7d,0x7e,0x7e,0x7e, + 0x7f,0x7f,0x7f,0x7e,0x7e,0x7f,0x7f,0x80,0x80,0x7f,0x7f,0x7f,0x80,0x80,0x81, + 0x80,0x81,0x81,0x82,0x82,0x82,0x82,0x82,0x82,0x83,0x84,0x85,0x85,0x85,0x85, + 0x85,0x85,0x85,0x83,0x83,0x85,0x86,0x86,0x86,0x86,0x86,0x86,0x86,0x87,0x88, + 0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x8a,0x8a,0x8a,0x8a,0x89,0x88,0x89, + 0x8a,0x8a,0x8a,0x8a,0x8a,0x8a,0x8a,0x8a,0x8a,0x8a,0x8b,0x8b,0x8b,0x8b,0x8b, + 0x8c,0x8c,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x8e,0x8f,0x8f,0x8f,0x8f,0x8f, + 0x8f,0x8f,0x90,0x90,0x90,0x90,0x91,0x91,0x91,0x91,0x91,0x90,0x90,0x90,0x90, + 0x90,0x91,0x91,0x91,0x91,0x91,0x91,0x91,0x91,0x91,0x92,0x92,0x93,0x93,0x93, + 0x93,0x93,0x93,0x93,0x93,0x93,0x94,0x93,0x8f,0x8b,0x8a,0x8f,0x8e,0x8a,0x91, + 0x97,0x96,0x95,0x94,0x94,0x94,0x94,0x95,0x96,0x96,0x95,0x94,0x94,0x95,0x95, + 0x95,0x95,0x95,0x95,0x8d,0x93,0xaf,0xa0,0x6f,0x24,0x00,0x03,0x03,0x00,0x01, + 0x02,0x00,0x02,0x03,0x01,0x02,0x05,0x05,0x03,0x00,0x23,0x87,0xa7,0xa6,0x97, + 0x91,0x99,0x99,0x98,0x98,0x98,0x98,0x97,0x96,0x98,0x98,0x99,0x98,0x98,0x99, + 0x99,0x9a,0x9a,0x99,0x9a,0x9b,0x9c,0x9c,0x9b,0x9a,0x9a,0x9a,0x9a,0x9a,0x9b, + 0x9b,0x9a,0x9a,0x9b,0x9b,0x9b,0x9b,0x9b,0x9b,0x9c,0x9c,0x9c,0x9c,0x9c,0x9c, + 0x9c,0x9c,0x9c,0x9d,0x9e,0x9e,0x9e,0x9d,0x9c,0x9c,0x9c,0x9c,0x9c,0x9c,0x9c, + 0x9c,0x9d,0x9d,0x9c,0x9c,0x9c,0x9d,0x9d,0x9d,0x9d,0x9d,0x9d,0x9d,0x9d,0x9d, + 0x9d,0x9d,0x9d,0x9e,0x9e,0x9e,0x9e,0x9e,0x9e,0x9f,0x9f,0x9f,0x9f,0x9f,0x9f, + 0x9f,0x9f,0x9e,0x9e,0x9e,0x9e,0x9e,0x9e,0x9e,0x9e,0x9e,0x9e,0x9e,0x9e,0x9e, + 0x9e,0x9e,0x9f,0x9f,0x9f,0x9e,0x9e,0xc8,0x49,0x49,0x4a,0x4b,0x4b,0x4c,0x4c, + 0x4c,0x4c,0x4d,0x4e,0x4e,0x4e,0x4e,0x4e,0x4e,0x4e,0x4e,0x4e,0x4f,0x4f,0x4f, + 0x50,0x50,0x50,0x50,0x50,0x51,0x51,0x52,0x53,0x53,0x52,0x52,0x53,0x53,0x54, + 0x55,0x55,0x55,0x56,0x56,0x55,0x55,0x54,0x55,0x56,0x57,0x57,0x57,0x57,0x57, + 0x57,0x58,0x5a,0x59,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5b,0x5b, + 0x5b,0x5b,0x5c,0x5d,0x5d,0x5d,0x5d,0x5d,0x5d,0x5d,0x5e,0x5e,0x5f,0x61,0x60, + 0x5e,0x5e,0x5e,0x60,0x61,0x61,0x62,0x62,0x62,0x62,0x60,0x61,0x62,0x62,0x62, + 0x62,0x63,0x63,0x64,0x64,0x64,0x64,0x64,0x64,0x65,0x65,0x65,0x65,0x65,0x65, + 0x65,0x65,0x66,0x67,0x68,0x68,0x68,0x68,0x67,0x67,0x67,0x68,0x69,0x69,0x69, + 0x69,0x6a,0x6b,0x6c,0x6d,0x6d,0x6c,0x6c,0x6c,0x6d,0x6d,0x6d,0x6d,0x6d,0x6d, + 0x6d,0x6e,0x6e,0x6e,0x70,0x70,0x70,0x6f,0x6e,0x6e,0x6e,0x70,0x71,0x72,0x72, + 0x72,0x71,0x71,0x72,0x73,0x73,0x74,0x74,0x74,0x73,0x73,0x72,0x73,0x73,0x74, + 0x74,0x75,0x76,0x76,0x77,0x77,0x76,0x76,0x76,0x76,0x76,0x77,0x78,0x78,0x78, + 0x78,0x78,0x78,0x79,0x79,0x79,0x78,0x79,0x7a,0x7b,0x7b,0x7c,0x7b,0x7b,0x7b, + 0x7c,0x7d,0x7e,0x7e,0x7e,0x7e,0x7d,0x7c,0x7c,0x7c,0x7d,0x7e,0x7d,0x7d,0x7f, + 0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x80,0x81,0x81,0x80,0x80,0x80,0x81, + 0x82,0x82,0x82,0x82,0x82,0x82,0x82,0x83,0x83,0x83,0x84,0x85,0x86,0x86,0x86, + 0x86,0x86,0x86,0x86,0x86,0x84,0x83,0x85,0x86,0x86,0x87,0x87,0x86,0x86,0x86, + 0x87,0x88,0x89,0x89,0x88,0x88,0x88,0x88,0x88,0x89,0x8a,0x8a,0x8a,0x8a,0x8a, + 0x8a,0x8a,0x8a,0x8a,0x8a,0x8a,0x8a,0x8a,0x8b,0x8b,0x8b,0x8b,0x8b,0x8c,0x8c, + 0x8c,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x8e,0x8f,0x8f, + 0x8f,0x8f,0x8f,0x90,0x90,0x90,0x90,0x90,0x91,0x91,0x91,0x91,0x91,0x91,0x91, + 0x91,0x91,0x91,0x91,0x91,0x92,0x92,0x92,0x92,0x92,0x92,0x91,0x90,0x94,0x95, + 0x93,0x93,0x93,0x96,0x95,0x91,0x91,0x94,0x97,0x96,0x91,0x8d,0x8d,0x90,0x8e, + 0x8a,0x93,0x9b,0x98,0x95,0x92,0x94,0x95,0x95,0x95,0x96,0x96,0x96,0x95,0x95, + 0x95,0x96,0x96,0x95,0x95,0x94,0x8d,0x95,0xaf,0xa0,0x70,0x24,0x00,0x02,0x02, + 0x00,0x01,0x02,0x00,0x03,0x04,0x00,0x00,0x05,0x04,0x01,0x00,0x23,0x83,0xa6, + 0xa8,0x98,0x93,0x9c,0x9c,0x99,0x98,0x99,0x99,0x98,0x97,0x98,0x9a,0x9a,0x99, + 0x98,0x9a,0x9b,0x9b,0x9b,0x9a,0x9b,0x9c,0x9c,0x9c,0x9c,0x9c,0x9b,0x9a,0x9b, + 0x9b,0x9b,0x9c,0x9c,0x9c,0x9c,0x9c,0x9c,0x9c,0x9c,0x9d,0x9d,0x9d,0x9d,0x9d, + 0x9d,0x9d,0x9d,0x9d,0x9e,0x9f,0x9f,0x9f,0x9f,0x9f,0x9e,0x9e,0x9e,0x9d,0x9d, + 0x9d,0x9d,0x9d,0x9d,0x9d,0x9d,0x9c,0x9d,0x9e,0x9e,0x9e,0x9e,0x9e,0x9e,0x9e, + 0x9e,0x9e,0x9e,0x9e,0x9e,0x9f,0xa0,0xa0,0x9f,0x9f,0xa0,0xa0,0xa0,0xa0,0xa0, + 0xa0,0xa0,0xa0,0xa0,0x9f,0x9f,0x9f,0x9f,0x9f,0x9f,0x9f,0x9f,0x9f,0x9f,0x9f, + 0x9f,0x9f,0x9f,0x9f,0xa0,0xa0,0xa0,0xa0,0x9f,0xc8,0x4a,0x4b,0x4b,0x4c,0x4c, + 0x4c,0x4d,0x4d,0x4d,0x4d,0x4e,0x4e,0x4e,0x4e,0x4e,0x4e,0x4e,0x4f,0x4f,0x4f, + 0x4f,0x50,0x50,0x50,0x50,0x50,0x51,0x51,0x51,0x52,0x53,0x53,0x52,0x52,0x53, + 0x53,0x54,0x56,0x56,0x56,0x56,0x56,0x55,0x55,0x55,0x55,0x56,0x57,0x57,0x58, + 0x58,0x57,0x57,0x59,0x5b,0x5a,0x5a,0x5b,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a, + 0x5a,0x5a,0x5b,0x5b,0x5c,0x5d,0x5e,0x5e,0x5e,0x5e,0x5e,0x5e,0x5e,0x5e,0x5e, + 0x61,0x60,0x5e,0x5e,0x5f,0x61,0x62,0x62,0x62,0x62,0x62,0x62,0x61,0x62,0x63, + 0x63,0x62,0x62,0x63,0x63,0x64,0x64,0x65,0x65,0x65,0x64,0x65,0x67,0x67,0x66, + 0x65,0x65,0x65,0x65,0x66,0x67,0x68,0x69,0x69,0x69,0x69,0x69,0x69,0x69,0x69, + 0x69,0x69,0x69,0x6a,0x6a,0x6b,0x6c,0x6c,0x6d,0x6d,0x6d,0x6d,0x6d,0x6d,0x6d, + 0x6d,0x6d,0x6e,0x6e,0x6e,0x6f,0x70,0x70,0x70,0x70,0x6f,0x6f,0x6f,0x70,0x71, + 0x73,0x73,0x73,0x72,0x71,0x71,0x72,0x73,0x74,0x74,0x74,0x74,0x73,0x73,0x74, + 0x74,0x74,0x75,0x76,0x77,0x78,0x78,0x78,0x77,0x76,0x76,0x77,0x78,0x78,0x78, + 0x78,0x79,0x79,0x78,0x79,0x79,0x7a,0x7a,0x7a,0x7b,0x7b,0x7b,0x7c,0x7c,0x7c, + 0x7c,0x7d,0x7d,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7f,0x7f,0x7e, + 0x7d,0x7f,0x81,0x82,0x80,0x7f,0x7f,0x80,0x81,0x80,0x80,0x82,0x82,0x81,0x81, + 0x82,0x82,0x83,0x83,0x83,0x83,0x83,0x83,0x83,0x84,0x84,0x84,0x85,0x86,0x86, + 0x86,0x87,0x88,0x88,0x87,0x86,0x86,0x85,0x84,0x85,0x86,0x86,0x87,0x87,0x87, + 0x87,0x87,0x87,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x89,0x8a,0x8a,0x8b,0x8c, + 0x8b,0x8b,0x8b,0x8b,0x8b,0x8b,0x8b,0x8b,0x8b,0x8b,0x8b,0x8c,0x8c,0x8c,0x8c, + 0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d, + 0x8f,0x90,0x90,0x90,0x90,0x91,0x91,0x90,0x90,0x90,0x90,0x91,0x91,0x91,0x92, + 0x92,0x91,0x91,0x91,0x91,0x92,0x93,0x93,0x93,0x93,0x93,0x92,0x91,0x92,0x93, + 0x92,0x93,0x94,0x94,0x95,0x94,0x94,0x94,0x94,0x93,0x8e,0x98,0xab,0xb1,0xb2, + 0xb5,0xb0,0xa4,0x95,0x8d,0x97,0x98,0x94,0x95,0x96,0x96,0x96,0x97,0x97,0x96, + 0x95,0x95,0x96,0x96,0x96,0x95,0x94,0x93,0x90,0x98,0xb3,0x9e,0x69,0x24,0x00, + 0x03,0x03,0x02,0x04,0x04,0x02,0x03,0x03,0x00,0x00,0x03,0x04,0x03,0x00,0x1f, + 0x70,0x9e,0xae,0x9a,0x93,0x9c,0x9c,0x9a,0x99,0x9a,0x9b,0x99,0x98,0x99,0x9b, + 0x9b,0x9b,0x9a,0x9c,0x9c,0x9c,0x9b,0x9b,0x9b,0x9c,0x9d,0x9d,0x9d,0x9c,0x9c, + 0x9b,0x9c,0x9c,0x9c,0x9c,0x9c,0x9d,0x9d,0x9d,0x9e,0x9e,0x9e,0x9e,0x9e,0x9e, + 0x9e,0x9e,0x9e,0x9e,0x9e,0x9e,0x9f,0xa0,0xa0,0xa0,0xa0,0xa0,0x9f,0xa0,0x9f, + 0x9e,0x9e,0x9e,0x9e,0x9e,0x9e,0x9e,0x9d,0x9d,0x9e,0x9f,0x9f,0x9f,0x9f,0x9e, + 0x9e,0x9e,0x9e,0x9f,0x9f,0x9f,0x9e,0xa0,0xa0,0xa0,0xa0,0xa0,0xa0,0xa0,0xa0, + 0xa0,0xa0,0xa0,0xa0,0xa0,0xa0,0xa0,0xa0,0xa0,0xa0,0xa0,0xa0,0xa0,0xa0,0xa0, + 0xa0,0xa0,0xa0,0xa0,0xa0,0xa0,0xa0,0xa1,0xa0,0xa0,0xa0,0xc8,0x4b,0x4b,0x4c, + 0x4c,0x4c,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4e,0x4f,0x4f,0x4f,0x4f, + 0x4f,0x50,0x50,0x50,0x51,0x51,0x51,0x51,0x52,0x51,0x51,0x52,0x53,0x53,0x52, + 0x52,0x53,0x53,0x55,0x56,0x57,0x57,0x56,0x55,0x55,0x56,0x56,0x56,0x57,0x57, + 0x58,0x58,0x59,0x59,0x59,0x5a,0x5b,0x5b,0x5b,0x5b,0x5b,0x5b,0x5a,0x5a,0x5a, + 0x5a,0x5a,0x5a,0x5b,0x5b,0x5c,0x5d,0x5e,0x5e,0x5e,0x5e,0x5e,0x5e,0x5e,0x5e, + 0x5e,0x5f,0x61,0x60,0x5e,0x5f,0x60,0x62,0x62,0x62,0x62,0x62,0x62,0x62,0x62, + 0x62,0x63,0x63,0x62,0x62,0x62,0x63,0x64,0x65,0x65,0x66,0x66,0x65,0x66,0x67, + 0x67,0x67,0x67,0x67,0x67,0x67,0x67,0x67,0x68,0x69,0x69,0x6a,0x6b,0x6b,0x6b, + 0x6a,0x69,0x69,0x69,0x69,0x6a,0x6b,0x6b,0x6c,0x6d,0x6d,0x6d,0x6d,0x6d,0x6d, + 0x6d,0x6e,0x6e,0x6f,0x6f,0x6f,0x6f,0x70,0x70,0x70,0x70,0x70,0x70,0x70,0x70, + 0x70,0x72,0x73,0x74,0x73,0x72,0x72,0x72,0x73,0x74,0x74,0x75,0x75,0x74,0x74, + 0x74,0x74,0x75,0x75,0x76,0x76,0x78,0x78,0x79,0x79,0x78,0x77,0x77,0x78,0x78, + 0x79,0x79,0x7a,0x7b,0x7b,0x7a,0x79,0x79,0x7a,0x7b,0x7b,0x7c,0x7c,0x7c,0x7c, + 0x7c,0x7d,0x7f,0x7f,0x7f,0x7e,0x7e,0x7e,0x7e,0x7e,0x7f,0x7f,0x80,0x80,0x81, + 0x81,0x7f,0x7e,0x80,0x82,0x83,0x81,0x7f,0x7f,0x82,0x82,0x81,0x81,0x83,0x82, + 0x82,0x82,0x82,0x84,0x85,0x85,0x85,0x85,0x85,0x85,0x85,0x85,0x85,0x86,0x86, + 0x86,0x86,0x86,0x87,0x88,0x88,0x88,0x87,0x86,0x86,0x86,0x86,0x86,0x86,0x87, + 0x87,0x87,0x87,0x87,0x87,0x87,0x87,0x88,0x89,0x89,0x89,0x8a,0x8a,0x8a,0x8b, + 0x8b,0x8c,0x8c,0x8c,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d, + 0x8d,0x8d,0x8d,0x8d,0x8d,0x8e,0x8e,0x8e,0x8e,0x8e,0x8e,0x8e,0x8e,0x8e,0x8e, + 0x8e,0x8e,0x8f,0x91,0x91,0x91,0x91,0x91,0x91,0x91,0x90,0x90,0x91,0x91,0x91, + 0x93,0x94,0x93,0x92,0x92,0x92,0x93,0x93,0x93,0x94,0x94,0x94,0x94,0x93,0x92, + 0x93,0x94,0x92,0x92,0x93,0x94,0x95,0x94,0x95,0x97,0x96,0x96,0x98,0x9b,0x9e, + 0x9b,0x95,0x90,0x98,0xa7,0x9c,0x8f,0x95,0x96,0x95,0x96,0x98,0x97,0x97,0x98, + 0x98,0x97,0x96,0x96,0x97,0x98,0x97,0x95,0x95,0x95,0x91,0x99,0xb4,0x9e,0x69, + 0x24,0x00,0x04,0x03,0x01,0x04,0x05,0x02,0x02,0x03,0x02,0x01,0x02,0x03,0x03, + 0x00,0x17,0x58,0x94,0xb6,0x9d,0x93,0x9e,0x9e,0x9b,0x9b,0x9b,0x9c,0x9a,0x98, + 0x9a,0x9c,0x9c,0x9c,0x9c,0x9c,0x9d,0x9d,0x9c,0x9b,0x9c,0x9c,0x9e,0x9f,0x9f, + 0x9d,0x9c,0x9c,0x9c,0x9d,0x9d,0x9d,0x9e,0x9e,0x9e,0x9e,0x9f,0x9f,0x9f,0x9f, + 0x9e,0x9e,0x9e,0x9e,0x9f,0x9f,0x9f,0xa0,0xa0,0xa0,0xa0,0xa0,0xa0,0xa0,0xa0, + 0xa0,0xa0,0x9f,0x9f,0x9f,0x9f,0x9f,0x9f,0x9f,0x9f,0x9f,0x9f,0xa0,0xa0,0xa0, + 0xa0,0x9f,0x9f,0x9f,0x9f,0xa0,0xa0,0xa0,0xa0,0xa0,0xa2,0xa1,0xa1,0xa1,0xa1, + 0xa1,0xa1,0xa1,0xa1,0xa1,0xa1,0xa0,0xa0,0xa1,0xa1,0xa1,0xa1,0xa1,0xa0,0xa0, + 0xa0,0xa0,0xa0,0xa0,0xa0,0xa0,0xa0,0xa0,0xa1,0xa2,0xa1,0xa1,0xa1,0xc8,0x4c, + 0x4c,0x4c,0x4c,0x4d,0x4d,0x4d,0x4d,0x4d,0x4c,0x4c,0x4c,0x4c,0x4d,0x50,0x50, + 0x50,0x50,0x50,0x50,0x51,0x51,0x52,0x52,0x52,0x53,0x53,0x51,0x51,0x52,0x53, + 0x53,0x52,0x52,0x53,0x53,0x54,0x56,0x57,0x57,0x56,0x55,0x56,0x56,0x57,0x57, + 0x57,0x58,0x58,0x59,0x5a,0x5a,0x5a,0x5b,0x5b,0x5b,0x5b,0x5b,0x5b,0x5c,0x5c, + 0x5c,0x5c,0x5c,0x5d,0x5e,0x5e,0x5d,0x5d,0x5e,0x5e,0x5f,0x60,0x60,0x60,0x5f, + 0x5f,0x60,0x60,0x60,0x61,0x60,0x5f,0x60,0x62,0x62,0x62,0x62,0x62,0x62,0x63, + 0x63,0x63,0x62,0x62,0x62,0x61,0x61,0x61,0x62,0x63,0x65,0x66,0x67,0x68,0x68, + 0x67,0x66,0x67,0x68,0x69,0x69,0x69,0x68,0x68,0x68,0x68,0x69,0x69,0x6a,0x6d, + 0x6d,0x6c,0x6b,0x6b,0x6a,0x6a,0x6a,0x6b,0x6c,0x6d,0x6d,0x6d,0x6d,0x6d,0x6d, + 0x6d,0x6e,0x6f,0x6f,0x70,0x70,0x70,0x70,0x70,0x71,0x70,0x70,0x71,0x71,0x72, + 0x72,0x72,0x73,0x73,0x74,0x74,0x73,0x72,0x73,0x74,0x75,0x76,0x78,0x77,0x77, + 0x76,0x75,0x75,0x75,0x76,0x76,0x77,0x78,0x78,0x7a,0x7b,0x7a,0x79,0x79,0x79, + 0x79,0x7a,0x7b,0x7b,0x7c,0x7c,0x7b,0x7b,0x7a,0x7a,0x7b,0x7b,0x7d,0x7e,0x7e, + 0x7d,0x7c,0x7c,0x7f,0x80,0x7f,0x7f,0x7f,0x7e,0x7e,0x7f,0x7f,0x80,0x81,0x82, + 0x83,0x83,0x83,0x7f,0x7f,0x82,0x84,0x86,0x82,0x7f,0x80,0x82,0x85,0x83,0x82, + 0x84,0x84,0x83,0x83,0x83,0x85,0x86,0x86,0x86,0x86,0x86,0x86,0x86,0x86,0x86, + 0x86,0x86,0x86,0x86,0x86,0x86,0x87,0x88,0x88,0x88,0x87,0x87,0x88,0x88,0x88, + 0x88,0x88,0x88,0x88,0x88,0x88,0x87,0x87,0x86,0x89,0x8c,0x8b,0x8b,0x8b,0x8b, + 0x8b,0x8b,0x8b,0x8c,0x8c,0x8d,0x8d,0x8d,0x8e,0x8e,0x8e,0x8e,0x8e,0x8e,0x8e, + 0x8e,0x8e,0x8e,0x8e,0x8e,0x8e,0x8f,0x8f,0x8f,0x8f,0x8f,0x90,0x90,0x90,0x90, + 0x91,0x90,0x90,0x90,0x91,0x91,0x92,0x92,0x93,0x92,0x92,0x91,0x91,0x91,0x91, + 0x92,0x93,0x94,0x95,0x94,0x94,0x93,0x93,0x94,0x94,0x94,0x95,0x95,0x95,0x95, + 0x95,0x95,0x95,0x94,0x94,0x93,0x93,0x94,0x95,0x96,0x97,0x98,0x98,0x9c,0xae, + 0x9b,0x69,0x51,0x41,0x2e,0x4c,0x8f,0xa2,0xa0,0x92,0x8f,0x95,0x98,0x99,0x98, + 0x98,0x98,0x98,0x98,0x97,0x97,0x98,0x98,0x98,0x96,0x97,0x98,0x91,0x97,0xb2, + 0xa0,0x6d,0x24,0x00,0x04,0x03,0x00,0x02,0x03,0x01,0x02,0x03,0x04,0x03,0x01, + 0x03,0x04,0x00,0x0e,0x3d,0x88,0xbe,0xa0,0x93,0x9f,0x9f,0x9c,0x9c,0x9c,0x9d, + 0x9b,0x99,0x9c,0x9c,0x9d,0x9d,0x9d,0x9e,0x9e,0x9e,0x9d,0x9c,0x9c,0x9d,0x9f, + 0xa0,0xa0,0x9e,0x9e,0x9e,0x9e,0x9e,0x9e,0x9e,0x9f,0x9f,0x9f,0x9f,0x9f,0x9f, + 0x9f,0x9f,0x9e,0x9e,0x9f,0x9f,0xa0,0xa0,0xa0,0xa0,0xa1,0xa1,0xa1,0xa1,0xa0, + 0xa0,0xa0,0xa0,0xa0,0xa0,0xa0,0xa0,0xa0,0xa0,0xa0,0xa0,0xa0,0xa0,0xa0,0xa1, + 0xa1,0xa1,0xa0,0xa0,0xa0,0xa0,0xa0,0xa0,0xa0,0xa1,0xa1,0xa2,0xa3,0xa3,0xa3, + 0xa2,0xa2,0xa2,0xa2,0xa2,0xa2,0xa2,0xa2,0xa1,0xa1,0xa2,0xa2,0xa2,0xa2,0xa2, + 0xa2,0xa1,0xa1,0xa1,0xa1,0xa1,0xa1,0xa1,0xa0,0xa0,0xa2,0xa2,0xa2,0xa2,0xa2, + 0xc8,0x4c,0x4c,0x4c,0x4c,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4e, + 0x50,0x50,0x4f,0x4f,0x50,0x50,0x50,0x51,0x51,0x52,0x52,0x52,0x52,0x51,0x51, + 0x52,0x53,0x53,0x53,0x53,0x53,0x54,0x55,0x56,0x57,0x57,0x56,0x55,0x56,0x57, + 0x57,0x58,0x58,0x58,0x58,0x58,0x59,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5b, + 0x5b,0x5b,0x5b,0x5b,0x5c,0x5d,0x5e,0x5e,0x5d,0x5e,0x5e,0x5e,0x5f,0x60,0x60, + 0x5f,0x5e,0x5f,0x61,0x62,0x62,0x62,0x62,0x62,0x63,0x63,0x63,0x63,0x63,0x62, + 0x62,0x62,0x62,0x63,0x63,0x64,0x64,0x64,0x64,0x64,0x65,0x65,0x66,0x66,0x67, + 0x68,0x68,0x67,0x67,0x68,0x69,0x69,0x69,0x69,0x69,0x69,0x69,0x69,0x69,0x6a, + 0x6b,0x6c,0x6c,0x6c,0x6c,0x6b,0x6b,0x6b,0x6c,0x6c,0x6d,0x6d,0x6e,0x6e,0x6d, + 0x6d,0x6e,0x6f,0x6f,0x6f,0x70,0x70,0x70,0x70,0x70,0x71,0x72,0x71,0x70,0x71, + 0x72,0x73,0x74,0x74,0x74,0x74,0x73,0x74,0x74,0x74,0x74,0x75,0x76,0x77,0x78, + 0x78,0x78,0x77,0x77,0x77,0x77,0x78,0x78,0x79,0x78,0x79,0x7a,0x7a,0x7a,0x7a, + 0x7a,0x7a,0x7b,0x7b,0x7b,0x7c,0x7c,0x7b,0x7b,0x7b,0x7b,0x7b,0x7b,0x7b,0x7c, + 0x7d,0x7e,0x7d,0x7d,0x7d,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x80, + 0x81,0x82,0x82,0x82,0x82,0x81,0x81,0x83,0x85,0x86,0x84,0x82,0x82,0x83,0x85, + 0x85,0x85,0x84,0x84,0x83,0x83,0x84,0x85,0x85,0x86,0x86,0x86,0x86,0x86,0x86, + 0x86,0x86,0x86,0x87,0x87,0x87,0x87,0x87,0x88,0x88,0x88,0x88,0x87,0x88,0x89, + 0x89,0x8a,0x8a,0x8a,0x8a,0x89,0x88,0x88,0x89,0x8a,0x8a,0x8b,0x8d,0x8d,0x8d, + 0x8d,0x8c,0x8c,0x8c,0x8c,0x8d,0x8d,0x8d,0x8d,0x8d,0x8e,0x8e,0x8e,0x8e,0x8e, + 0x8f,0x8f,0x8f,0x8f,0x8f,0x8f,0x8f,0x90,0x8f,0x90,0x90,0x90,0x90,0x90,0x91, + 0x90,0x91,0x91,0x91,0x91,0x91,0x91,0x92,0x93,0x94,0x94,0x93,0x93,0x93,0x92, + 0x92,0x93,0x93,0x94,0x95,0x95,0x95,0x94,0x94,0x94,0x95,0x95,0x95,0x95,0x96, + 0x96,0x96,0x95,0x95,0x95,0x96,0x95,0x95,0x95,0x97,0x99,0x98,0x96,0x93,0x99, + 0xa0,0xa0,0x78,0x2e,0x1a,0x16,0x09,0x19,0x46,0x84,0xab,0x98,0x91,0x96,0x98, + 0x99,0x98,0x97,0x97,0x99,0x9a,0x99,0x98,0x98,0x98,0x98,0x98,0x98,0x98,0x91, + 0x97,0xb3,0xa3,0x72,0x24,0x00,0x05,0x05,0x02,0x01,0x01,0x03,0x03,0x03,0x02, + 0x03,0x05,0x07,0x06,0x00,0x0a,0x35,0x85,0xc0,0xa2,0x93,0x9d,0x9e,0x9c,0x9c, + 0x9c,0x9c,0x9c,0x9c,0x9d,0x9e,0x9d,0x9e,0x9f,0x9e,0x9d,0x9d,0x9d,0x9d,0x9d, + 0x9d,0x9e,0x9f,0x9f,0x9e,0x9f,0x9f,0x9f,0x9e,0x9f,0x9f,0xa0,0xa0,0xa0,0x9f, + 0x9f,0x9f,0xa0,0xa0,0xa0,0xa0,0xa0,0xa0,0xa0,0xa1,0xa0,0xa0,0xa0,0xa0,0xa0, + 0xa0,0xa0,0xa0,0xa0,0xa0,0xa0,0xa0,0xa0,0xa0,0xa0,0xa0,0xa0,0xa0,0xa0,0xa0, + 0xa1,0xa2,0xa2,0xa1,0xa1,0xa1,0xa1,0xa1,0xa1,0xa1,0xa1,0xa2,0xa2,0xa2,0xa3, + 0xa3,0xa2,0xa2,0xa2,0xa2,0xa2,0xa2,0xa2,0xa2,0xa3,0xa2,0xa2,0xa2,0xa3,0xa3, + 0xa3,0xa3,0xa3,0xa2,0xa2,0xa2,0xa2,0xa2,0xa2,0xa1,0xa1,0xa2,0xa3,0xa3,0xa3, + 0xa3,0xa3,0xc8,0x4c,0x4c,0x4c,0x4c,0x4d,0x4d,0x4d,0x4e,0x4e,0x4e,0x4f,0x4f, + 0x4f,0x50,0x50,0x50,0x4f,0x4f,0x4f,0x50,0x50,0x50,0x51,0x51,0x51,0x51,0x51, + 0x51,0x51,0x52,0x53,0x53,0x53,0x54,0x54,0x55,0x55,0x56,0x57,0x57,0x56,0x55, + 0x57,0x57,0x58,0x59,0x59,0x58,0x58,0x58,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a, + 0x5a,0x5b,0x5b,0x5b,0x5b,0x5b,0x5c,0x5c,0x5e,0x5e,0x5d,0x5e,0x5e,0x5e,0x5e, + 0x60,0x60,0x5f,0x5e,0x5f,0x62,0x64,0x64,0x62,0x62,0x65,0x65,0x65,0x64,0x64, + 0x64,0x63,0x62,0x62,0x62,0x64,0x65,0x65,0x66,0x67,0x67,0x67,0x67,0x67,0x67, + 0x66,0x67,0x67,0x67,0x68,0x68,0x69,0x69,0x69,0x6a,0x6a,0x6a,0x6a,0x6a,0x6b, + 0x6c,0x6c,0x6c,0x6c,0x6c,0x6c,0x6c,0x6c,0x6c,0x6d,0x6d,0x6d,0x6e,0x6e,0x6f, + 0x6f,0x6e,0x6f,0x6f,0x70,0x70,0x70,0x70,0x70,0x70,0x70,0x71,0x72,0x72,0x72, + 0x72,0x72,0x73,0x74,0x75,0x75,0x74,0x74,0x73,0x73,0x74,0x76,0x76,0x75,0x76, + 0x78,0x78,0x78,0x78,0x78,0x78,0x78,0x78,0x79,0x7b,0x7b,0x79,0x79,0x79,0x79, + 0x79,0x7a,0x7b,0x7b,0x7b,0x7b,0x7b,0x7b,0x7b,0x7b,0x7b,0x7b,0x7b,0x7b,0x7b, + 0x7c,0x7c,0x7d,0x7d,0x7e,0x7e,0x7e,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f, + 0x7f,0x80,0x81,0x81,0x81,0x81,0x82,0x82,0x83,0x85,0x86,0x86,0x86,0x85,0x83, + 0x84,0x85,0x86,0x86,0x84,0x84,0x84,0x84,0x85,0x85,0x85,0x85,0x86,0x86,0x86, + 0x86,0x86,0x87,0x87,0x87,0x88,0x88,0x89,0x89,0x89,0x89,0x89,0x88,0x88,0x88, + 0x89,0x8a,0x8a,0x8b,0x8c,0x8c,0x8b,0x8a,0x89,0x89,0x8a,0x8c,0x8d,0x8d,0x8d, + 0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x8e,0x8e,0x8e, + 0x8e,0x8e,0x8f,0x8f,0x8f,0x90,0x90,0x90,0x91,0x91,0x90,0x91,0x91,0x91,0x91, + 0x91,0x91,0x91,0x91,0x91,0x91,0x92,0x92,0x93,0x94,0x94,0x95,0x95,0x95,0x94, + 0x94,0x94,0x93,0x94,0x95,0x95,0x95,0x95,0x95,0x95,0x95,0x95,0x95,0x96,0x97, + 0x97,0x97,0x97,0x97,0x97,0x95,0x97,0x98,0x96,0x96,0x98,0x9a,0x9b,0x99,0x95, + 0x91,0x9e,0xa0,0x7b,0x44,0x03,0x00,0x02,0x00,0x00,0x08,0x68,0xb3,0x9f,0x95, + 0x99,0x99,0x99,0x99,0x98,0x96,0x98,0x9b,0x9a,0x98,0x97,0x98,0x9a,0x99,0x99, + 0x98,0x91,0x98,0xb5,0xa4,0x73,0x24,0x00,0x05,0x06,0x03,0x01,0x01,0x05,0x05, + 0x03,0x00,0x01,0x07,0x08,0x06,0x00,0x0a,0x33,0x83,0xc1,0xa5,0x95,0x9b,0x9d, + 0x9d,0x9d,0x9c,0x9b,0x9c,0x9d,0x9f,0x9f,0x9d,0x9f,0xa0,0x9e,0x9d,0x9c,0x9d, + 0x9e,0x9e,0x9e,0x9e,0x9e,0x9e,0x9f,0xa0,0xa0,0xa0,0x9f,0xa0,0xa0,0xa0,0xa0, + 0xa0,0xa0,0xa0,0xa0,0xa0,0xa1,0xa1,0xa1,0xa1,0xa1,0xa1,0xa1,0xa1,0xa0,0xa0, + 0xa0,0xa0,0xa0,0xa0,0xa1,0xa1,0xa0,0xa0,0xa0,0xa0,0xa0,0xa0,0xa0,0xa0,0xa0, + 0xa0,0xa0,0xa1,0xa2,0xa2,0xa2,0xa2,0xa2,0xa2,0xa2,0xa2,0xa2,0xa2,0xa2,0xa2, + 0xa3,0xa3,0xa3,0xa2,0xa2,0xa2,0xa2,0xa2,0xa2,0xa2,0xa3,0xa3,0xa3,0xa3,0xa3, + 0xa3,0xa3,0xa3,0xa3,0xa3,0xa3,0xa3,0xa3,0xa3,0xa3,0xa3,0xa2,0xa3,0xa3,0xa3, + 0xa3,0xa3,0xa3,0xa3,0xc8,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4e,0x4e,0x4f, + 0x4f,0x50,0x50,0x50,0x50,0x50,0x50,0x50,0x50,0x50,0x50,0x51,0x51,0x52,0x52, + 0x52,0x52,0x52,0x53,0x53,0x53,0x54,0x54,0x55,0x55,0x55,0x56,0x56,0x57,0x57, + 0x57,0x57,0x57,0x58,0x59,0x59,0x5a,0x5a,0x5a,0x5a,0x5b,0x5b,0x5b,0x5b,0x5c, + 0x5c,0x5c,0x5c,0x5d,0x5d,0x5d,0x5d,0x5d,0x5e,0x5e,0x5f,0x5f,0x5f,0x60,0x60, + 0x5f,0x60,0x62,0x62,0x62,0x62,0x62,0x65,0x66,0x65,0x62,0x62,0x64,0x65,0x65, + 0x64,0x64,0x65,0x64,0x63,0x63,0x64,0x65,0x65,0x66,0x67,0x67,0x68,0x68,0x68, + 0x67,0x67,0x67,0x67,0x68,0x68,0x69,0x69,0x69,0x6a,0x6a,0x6a,0x6b,0x6b,0x6c, + 0x6c,0x6d,0x6d,0x6d,0x6d,0x6d,0x6d,0x6d,0x6d,0x6d,0x6d,0x6e,0x6e,0x6f,0x70, + 0x70,0x70,0x70,0x70,0x70,0x70,0x71,0x70,0x70,0x70,0x70,0x71,0x72,0x72,0x73, + 0x73,0x73,0x74,0x74,0x74,0x75,0x76,0x76,0x75,0x74,0x74,0x74,0x75,0x77,0x77, + 0x76,0x77,0x78,0x79,0x79,0x78,0x78,0x78,0x78,0x78,0x79,0x7b,0x7b,0x7a,0x7a, + 0x7a,0x7a,0x7b,0x7b,0x7b,0x7c,0x7c,0x7d,0x7c,0x7c,0x7d,0x7d,0x7d,0x7d,0x7e, + 0x7e,0x7e,0x7e,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x80,0x80,0x81,0x82,0x81, + 0x81,0x81,0x80,0x80,0x80,0x81,0x81,0x82,0x83,0x84,0x85,0x86,0x86,0x86,0x86, + 0x85,0x83,0x84,0x85,0x86,0x86,0x86,0x86,0x86,0x86,0x86,0x86,0x86,0x86,0x87, + 0x87,0x88,0x88,0x88,0x88,0x89,0x88,0x89,0x89,0x8a,0x8a,0x8a,0x8a,0x8a,0x89, + 0x89,0x89,0x8a,0x8a,0x8b,0x8c,0x8d,0x8d,0x8c,0x8c,0x8c,0x8c,0x8d,0x8e,0x8f, + 0x8e,0x8e,0x8e,0x8f,0x8f,0x8f,0x8e,0x8e,0x8f,0x8f,0x90,0x90,0x8f,0x8f,0x8f, + 0x8f,0x8f,0x90,0x90,0x90,0x91,0x91,0x91,0x91,0x91,0x91,0x91,0x91,0x92,0x92, + 0x92,0x92,0x92,0x92,0x92,0x93,0x93,0x93,0x94,0x94,0x95,0x95,0x95,0x95,0x96, + 0x96,0x95,0x95,0x95,0x95,0x95,0x95,0x96,0x95,0x95,0x95,0x95,0x95,0x96,0x97, + 0x97,0x98,0x98,0x98,0x98,0x98,0x98,0x97,0x98,0x98,0x94,0x96,0x9d,0x9a,0x95, + 0x95,0x99,0xa0,0xab,0x9a,0x3b,0x0a,0x09,0x03,0x00,0x06,0x05,0x0a,0x69,0xb5, + 0x9f,0x96,0x9d,0x9c,0x9c,0xa0,0x9c,0x95,0x98,0x99,0x98,0x97,0x97,0x9a,0x9c, + 0x9c,0x9b,0x99,0x93,0x9a,0xb5,0xa0,0x6a,0x24,0x00,0x03,0x02,0x00,0x03,0x04, + 0x03,0x03,0x03,0x03,0x02,0x02,0x03,0x04,0x00,0x0c,0x2f,0x80,0xc2,0xa8,0x98, + 0x9c,0x9e,0xa0,0x9f,0x9e,0x9d,0x9b,0x9a,0x9d,0xa0,0xa0,0xa0,0xa0,0xa0,0x9f, + 0x9e,0x9e,0x9e,0x9e,0x9f,0xa0,0xa1,0xa1,0xa0,0xa0,0xa1,0xa0,0xa0,0xa0,0xa1, + 0xa2,0xa2,0xa2,0xa1,0xa1,0xa1,0xa1,0xa2,0xa2,0xa2,0xa2,0xa2,0xa2,0xa3,0xa2, + 0xa2,0xa2,0xa2,0xa2,0xa2,0xa2,0xa3,0xa3,0xa3,0xa3,0xa2,0xa2,0xa2,0xa2,0xa2, + 0xa2,0xa3,0xa3,0xa3,0xa3,0xa3,0xa3,0xa3,0xa3,0xa3,0xa3,0xa3,0xa3,0xa3,0xa3, + 0xa3,0xa3,0xa3,0xa3,0xa3,0xa3,0xa3,0xa3,0xa3,0xa3,0xa3,0xa3,0xa3,0xa3,0xa3, + 0xa4,0xa3,0xa3,0xa3,0xa3,0xa3,0xa3,0xa4,0xa4,0xa4,0xa4,0xa4,0xa4,0xa3,0xa3, + 0xa3,0xa4,0xa4,0xa4,0xa4,0xa4,0xc8,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4e, + 0x4e,0x4f,0x50,0x50,0x50,0x51,0x51,0x51,0x51,0x51,0x51,0x51,0x51,0x52,0x52, + 0x53,0x53,0x53,0x53,0x53,0x53,0x53,0x54,0x55,0x55,0x55,0x56,0x56,0x57,0x57, + 0x57,0x58,0x58,0x58,0x58,0x58,0x59,0x5a,0x5a,0x5b,0x5c,0x5c,0x5d,0x5c,0x5b, + 0x5c,0x5e,0x5e,0x5e,0x5e,0x5e,0x5e,0x5e,0x5e,0x5e,0x5e,0x5f,0x60,0x61,0x60, + 0x61,0x61,0x5f,0x60,0x62,0x63,0x63,0x62,0x63,0x65,0x65,0x65,0x62,0x62,0x64, + 0x65,0x65,0x64,0x64,0x65,0x65,0x65,0x64,0x65,0x67,0x67,0x67,0x67,0x68,0x68, + 0x68,0x68,0x68,0x67,0x68,0x68,0x69,0x69,0x6a,0x6b,0x6b,0x6a,0x6a,0x6a,0x6b, + 0x6c,0x6d,0x6d,0x6d,0x6e,0x6e,0x6e,0x6d,0x6e,0x6f,0x6f,0x6f,0x6f,0x6f,0x70, + 0x70,0x70,0x70,0x70,0x70,0x71,0x71,0x72,0x72,0x71,0x71,0x71,0x72,0x72,0x73, + 0x74,0x74,0x74,0x74,0x74,0x75,0x75,0x75,0x76,0x76,0x75,0x75,0x74,0x75,0x77, + 0x78,0x78,0x78,0x78,0x78,0x79,0x79,0x78,0x78,0x78,0x79,0x79,0x79,0x7b,0x7b, + 0x7a,0x7a,0x7a,0x7b,0x7b,0x7b,0x7c,0x7c,0x7d,0x7d,0x7d,0x7d,0x7d,0x7e,0x7f, + 0x7f,0x7f,0x7f,0x7f,0x7f,0x80,0x80,0x80,0x80,0x81,0x80,0x80,0x81,0x82,0x82, + 0x83,0x83,0x82,0x82,0x81,0x81,0x81,0x82,0x82,0x83,0x85,0x85,0x86,0x86,0x86, + 0x86,0x85,0x84,0x84,0x84,0x85,0x86,0x86,0x86,0x87,0x87,0x87,0x87,0x88,0x88, + 0x88,0x88,0x89,0x8a,0x8a,0x8a,0x89,0x89,0x89,0x89,0x89,0x8a,0x8a,0x8a,0x8a, + 0x8a,0x8a,0x8a,0x8a,0x8a,0x8a,0x8b,0x8c,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x8e, + 0x8e,0x8f,0x8e,0x8e,0x8f,0x8f,0x8f,0x8f,0x8f,0x8f,0x8f,0x90,0x91,0x91,0x91, + 0x91,0x91,0x91,0x91,0x91,0x91,0x91,0x91,0x92,0x92,0x92,0x93,0x93,0x93,0x93, + 0x93,0x93,0x94,0x94,0x94,0x94,0x94,0x94,0x95,0x95,0x95,0x95,0x95,0x95,0x95, + 0x95,0x96,0x96,0x96,0x95,0x95,0x95,0x96,0x96,0x96,0x96,0x95,0x95,0x95,0x96, + 0x96,0x97,0x98,0x98,0x98,0x99,0x99,0x99,0x98,0x98,0x98,0x98,0x97,0x98,0x9d, + 0x99,0x94,0x95,0x9c,0xa8,0xaf,0x92,0x20,0x00,0x09,0x07,0x03,0x07,0x05,0x08, + 0x62,0xae,0xa0,0x9a,0x9d,0x9c,0x9c,0x9e,0x9c,0x98,0x99,0x9a,0x99,0x9a,0x9c, + 0x9b,0x9a,0x98,0x98,0x98,0x94,0x9b,0xb3,0x9d,0x69,0x24,0x00,0x01,0x01,0x00, + 0x03,0x03,0x02,0x02,0x03,0x03,0x03,0x00,0x01,0x03,0x00,0x0a,0x28,0x7b,0xc2, + 0xaa,0x99,0x9b,0xa0,0xa3,0xa1,0x9f,0x9d,0x9d,0x9e,0x9e,0xa0,0xa1,0xa1,0xa0, + 0xa1,0xa0,0xa0,0x9f,0x9e,0x9f,0xa0,0xa2,0xa2,0xa2,0xa1,0xa1,0xa1,0xa1,0xa1, + 0xa1,0xa2,0xa2,0xa2,0xa2,0xa2,0xa2,0xa1,0xa2,0xa2,0xa2,0xa2,0xa2,0xa2,0xa2, + 0xa3,0xa3,0xa3,0xa3,0xa3,0xa3,0xa3,0xa3,0xa3,0xa4,0xa4,0xa3,0xa3,0xa3,0xa3, + 0xa3,0xa3,0xa3,0xa4,0xa4,0xa4,0xa3,0xa3,0xa3,0xa3,0xa3,0xa3,0xa3,0xa3,0xa3, + 0xa3,0xa3,0xa3,0xa3,0xa4,0xa4,0xa5,0xa4,0xa4,0xa3,0xa3,0xa3,0xa3,0xa3,0xa3, + 0xa3,0xa4,0xa4,0xa3,0xa3,0xa3,0xa3,0xa4,0xa4,0xa4,0xa4,0xa5,0xa6,0xa6,0xa5, + 0xa5,0xa4,0xa3,0xa4,0xa4,0xa4,0xa4,0xa4,0xc8,0x4d,0x4d,0x4c,0x4c,0x4c,0x4c, + 0x4d,0x4e,0x4e,0x4f,0x50,0x50,0x51,0x51,0x52,0x52,0x52,0x52,0x52,0x52,0x52, + 0x53,0x53,0x53,0x53,0x54,0x54,0x54,0x54,0x54,0x54,0x55,0x56,0x56,0x57,0x57, + 0x57,0x58,0x58,0x59,0x59,0x59,0x58,0x58,0x59,0x5a,0x5b,0x5d,0x5e,0x5e,0x5d, + 0x5d,0x5c,0x5d,0x5e,0x5e,0x5e,0x5e,0x5e,0x5e,0x5e,0x5e,0x5e,0x5e,0x5f,0x61, + 0x61,0x61,0x61,0x61,0x5f,0x60,0x62,0x62,0x62,0x62,0x62,0x63,0x63,0x63,0x62, + 0x62,0x64,0x64,0x64,0x64,0x65,0x65,0x65,0x65,0x65,0x65,0x67,0x68,0x68,0x68, + 0x68,0x69,0x69,0x69,0x69,0x69,0x69,0x69,0x69,0x6a,0x6b,0x6c,0x6b,0x6b,0x6a, + 0x6a,0x6b,0x6c,0x6d,0x6e,0x6f,0x6f,0x6f,0x6f,0x6e,0x6e,0x6f,0x70,0x70,0x70, + 0x70,0x70,0x70,0x70,0x71,0x71,0x71,0x72,0x72,0x72,0x72,0x72,0x72,0x72,0x73, + 0x73,0x74,0x74,0x74,0x74,0x75,0x76,0x76,0x76,0x76,0x76,0x76,0x75,0x75,0x75, + 0x77,0x78,0x7a,0x79,0x78,0x78,0x78,0x79,0x79,0x79,0x79,0x79,0x7a,0x7a,0x7a, + 0x7b,0x7b,0x7a,0x7a,0x7b,0x7b,0x7b,0x7c,0x7c,0x7d,0x7d,0x7d,0x7e,0x7d,0x7d, + 0x7f,0x7f,0x80,0x80,0x80,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x82,0x84,0x85,0x85,0x84,0x82,0x82,0x82,0x82,0x82,0x83,0x85,0x86,0x86,0x86, + 0x86,0x86,0x86,0x85,0x85,0x85,0x85,0x86,0x86,0x87,0x87,0x87,0x88,0x88,0x88, + 0x89,0x89,0x89,0x8a,0x8a,0x8a,0x8a,0x8a,0x8a,0x8a,0x8a,0x8a,0x8a,0x8a,0x8a, + 0x8a,0x8a,0x8b,0x8c,0x8c,0x8c,0x8b,0x8b,0x8b,0x8b,0x8c,0x8c,0x8d,0x8e,0x8e, + 0x8e,0x8e,0x8e,0x8d,0x8d,0x8e,0x8f,0x8f,0x8f,0x8f,0x8e,0x8e,0x8f,0x91,0x91, + 0x91,0x91,0x91,0x92,0x92,0x92,0x92,0x92,0x93,0x93,0x93,0x94,0x94,0x94,0x94, + 0x94,0x94,0x94,0x94,0x94,0x95,0x95,0x95,0x95,0x95,0x95,0x95,0x95,0x95,0x95, + 0x95,0x95,0x95,0x96,0x96,0x96,0x95,0x95,0x95,0x96,0x96,0x96,0x96,0x96,0x96, + 0x96,0x96,0x96,0x97,0x98,0x98,0x99,0x99,0x9a,0x9a,0x99,0x98,0x98,0x98,0x9d, + 0x9d,0x99,0x98,0x98,0x97,0x9e,0xab,0xa6,0x82,0x24,0x00,0x02,0x05,0x07,0x03, + 0x00,0x01,0x51,0x9a,0xa4,0xa1,0x98,0x9b,0x9c,0x95,0x96,0x9d,0x9d,0x9c,0x9c, + 0xa0,0xa3,0x9c,0x95,0x91,0x92,0x95,0x93,0x9a,0xb1,0x9e,0x6d,0x24,0x00,0x02, + 0x03,0x03,0x02,0x00,0x00,0x00,0x00,0x03,0x04,0x02,0x02,0x02,0x00,0x06,0x1f, + 0x77,0xc3,0xaa,0x98,0x98,0xa0,0xa7,0xa3,0x9e,0x9c,0xa1,0xa6,0xa0,0x9f,0xa0, + 0xa1,0xa1,0xa1,0xa1,0xa0,0xa0,0xa0,0xa0,0xa1,0xa2,0xa2,0xa2,0xa1,0xa1,0xa2, + 0xa2,0xa2,0xa2,0xa2,0xa3,0xa3,0xa3,0xa2,0xa2,0xa2,0xa3,0xa3,0xa3,0xa3,0xa3, + 0xa3,0xa3,0xa3,0xa3,0xa3,0xa3,0xa3,0xa4,0xa4,0xa4,0xa4,0xa4,0xa4,0xa3,0xa3, + 0xa3,0xa3,0xa3,0xa3,0xa4,0xa5,0xa5,0xa5,0xa4,0xa4,0xa4,0xa4,0xa4,0xa4,0xa4, + 0xa4,0xa4,0xa4,0xa4,0xa4,0xa4,0xa4,0xa5,0xa5,0xa5,0xa4,0xa4,0xa4,0xa4,0xa4, + 0xa4,0xa4,0xa4,0xa4,0xa4,0xa4,0xa4,0xa4,0xa4,0xa4,0xa5,0xa5,0xa5,0xa6,0xa6, + 0xa6,0xa6,0xa6,0xa5,0xa4,0xa4,0xa4,0xa5,0xa5,0xa5,0xc8,0x4d,0x4d,0x4d,0x4c, + 0x4c,0x4c,0x4d,0x4d,0x4e,0x4f,0x50,0x51,0x51,0x52,0x52,0x52,0x52,0x52,0x52, + 0x53,0x53,0x53,0x53,0x53,0x53,0x54,0x54,0x54,0x55,0x55,0x56,0x56,0x57,0x57, + 0x57,0x57,0x58,0x58,0x59,0x59,0x59,0x59,0x59,0x58,0x59,0x5a,0x5b,0x5d,0x5e, + 0x5e,0x5d,0x5d,0x5c,0x5c,0x5d,0x5d,0x5d,0x5e,0x5e,0x5e,0x5e,0x5e,0x5e,0x5e, + 0x5f,0x60,0x62,0x62,0x63,0x62,0x61,0x61,0x62,0x63,0x63,0x62,0x63,0x64,0x63, + 0x63,0x62,0x63,0x64,0x64,0x64,0x64,0x65,0x65,0x66,0x65,0x65,0x65,0x66,0x68, + 0x69,0x69,0x69,0x69,0x69,0x69,0x69,0x69,0x69,0x6a,0x6a,0x6b,0x6c,0x6d,0x6c, + 0x6c,0x6b,0x6b,0x6b,0x6c,0x6d,0x6e,0x6f,0x6f,0x6f,0x6f,0x6e,0x6f,0x70,0x70, + 0x70,0x70,0x70,0x71,0x70,0x71,0x71,0x71,0x71,0x71,0x72,0x71,0x71,0x72,0x72, + 0x73,0x74,0x74,0x74,0x75,0x75,0x75,0x76,0x76,0x76,0x76,0x77,0x76,0x76,0x75, + 0x75,0x76,0x78,0x78,0x7a,0x79,0x78,0x78,0x78,0x79,0x79,0x7a,0x7a,0x7a,0x7b, + 0x7b,0x7b,0x7b,0x7b,0x7b,0x7b,0x7b,0x7c,0x7c,0x7d,0x7e,0x7e,0x7e,0x7e,0x7e, + 0x7e,0x7e,0x7f,0x80,0x80,0x80,0x81,0x81,0x82,0x81,0x81,0x81,0x81,0x81,0x81, + 0x81,0x82,0x83,0x85,0x86,0x86,0x85,0x84,0x82,0x82,0x83,0x84,0x85,0x86,0x86, + 0x86,0x86,0x86,0x86,0x86,0x86,0x86,0x86,0x86,0x87,0x88,0x88,0x88,0x88,0x89, + 0x88,0x89,0x89,0x8a,0x8a,0x8a,0x8a,0x8a,0x8a,0x8b,0x8a,0x8a,0x8a,0x8a,0x8a, + 0x8a,0x8b,0x8b,0x8c,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x8e,0x8e, + 0x90,0x90,0x90,0x8f,0x8f,0x8e,0x8e,0x8e,0x8f,0x8f,0x8f,0x8e,0x8e,0x8f,0x90, + 0x91,0x91,0x91,0x91,0x92,0x92,0x93,0x93,0x92,0x93,0x94,0x94,0x94,0x94,0x94, + 0x95,0x95,0x95,0x95,0x94,0x94,0x95,0x95,0x95,0x95,0x95,0x95,0x95,0x95,0x96, + 0x96,0x96,0x95,0x95,0x96,0x96,0x96,0x96,0x96,0x96,0x96,0x96,0x96,0x97,0x97, + 0x96,0x96,0x96,0x96,0x97,0x98,0x98,0x99,0x99,0x9a,0x9b,0x9a,0x9a,0x9b,0x9b, + 0x9c,0x9c,0x9b,0x98,0x9a,0x9c,0x98,0xa0,0xae,0x7d,0x3c,0x0f,0x00,0x07,0x06, + 0x04,0x04,0x00,0x00,0x36,0x78,0xa9,0xae,0x92,0x9a,0xa0,0x93,0x97,0xa5,0x9c, + 0x95,0x9a,0xa3,0xae,0xb3,0xb5,0xb4,0xa9,0x9a,0x93,0x9a,0xb2,0xa2,0x74,0x26, + 0x00,0x05,0x05,0x02,0x00,0x00,0x02,0x01,0x01,0x03,0x05,0x07,0x06,0x03,0x00, + 0x04,0x19,0x74,0xc4,0xaa,0x9b,0xa1,0xa1,0xa0,0x9f,0xa0,0xa1,0xa3,0xa3,0xa0, + 0xa0,0xa1,0xa2,0xa2,0xa1,0xa1,0xa1,0xa1,0xa2,0xa2,0xa2,0xa1,0xa1,0xa1,0xa1, + 0xa2,0xa2,0xa2,0xa2,0xa2,0xa3,0xa3,0xa3,0xa3,0xa2,0xa2,0xa2,0xa3,0xa3,0xa3, + 0xa3,0xa3,0xa3,0xa3,0xa3,0xa3,0xa3,0xa3,0xa4,0xa4,0xa4,0xa5,0xa4,0xa4,0xa4, + 0xa4,0xa3,0xa3,0xa3,0xa3,0xa4,0xa5,0xa5,0xa5,0xa6,0xa5,0xa5,0xa5,0xa5,0xa5, + 0xa5,0xa5,0xa5,0xa5,0xa5,0xa5,0xa5,0xa5,0xa5,0xa5,0xa6,0xa5,0xa5,0xa4,0xa4, + 0xa4,0xa4,0xa4,0xa4,0xa4,0xa4,0xa4,0xa4,0xa5,0xa5,0xa4,0xa4,0xa4,0xa5,0xa5, + 0xa5,0xa5,0xa5,0xa5,0xa5,0xa5,0xa4,0xa4,0xa5,0xa6,0xa6,0xa6,0xc8,0x4e,0x4e, + 0x4e,0x4d,0x4d,0x4d,0x4d,0x4e,0x4f,0x50,0x50,0x51,0x52,0x52,0x52,0x52,0x52, + 0x52,0x52,0x53,0x53,0x53,0x53,0x53,0x53,0x54,0x54,0x55,0x56,0x56,0x57,0x57, + 0x57,0x57,0x57,0x58,0x58,0x59,0x59,0x59,0x59,0x59,0x59,0x59,0x59,0x5a,0x5b, + 0x5d,0x5e,0x5e,0x5d,0x5d,0x5c,0x5c,0x5c,0x5c,0x5c,0x5d,0x5d,0x5e,0x5e,0x5e, + 0x5e,0x5e,0x5f,0x60,0x62,0x63,0x64,0x64,0x62,0x62,0x63,0x64,0x64,0x63,0x64, + 0x65,0x64,0x63,0x63,0x64,0x65,0x65,0x64,0x64,0x65,0x66,0x66,0x66,0x65,0x65, + 0x66,0x69,0x6a,0x69,0x69,0x69,0x69,0x69,0x69,0x6a,0x6a,0x6b,0x6c,0x6c,0x6d, + 0x6d,0x6d,0x6d,0x6d,0x6c,0x6c,0x6d,0x6d,0x6e,0x6f,0x6f,0x6f,0x6f,0x6f,0x70, + 0x70,0x70,0x70,0x70,0x71,0x71,0x71,0x71,0x71,0x71,0x71,0x71,0x71,0x71,0x71, + 0x71,0x72,0x73,0x74,0x74,0x75,0x76,0x76,0x76,0x76,0x76,0x76,0x77,0x77,0x77, + 0x76,0x76,0x77,0x77,0x78,0x79,0x7a,0x79,0x78,0x78,0x78,0x79,0x7a,0x7a,0x7b, + 0x7b,0x7c,0x7c,0x7c,0x7d,0x7d,0x7c,0x7c,0x7d,0x7d,0x7e,0x7e,0x7f,0x7f,0x7f, + 0x7f,0x7f,0x7f,0x7f,0x80,0x80,0x80,0x81,0x81,0x82,0x82,0x82,0x82,0x82,0x82, + 0x82,0x82,0x82,0x82,0x84,0x85,0x86,0x86,0x86,0x84,0x84,0x83,0x85,0x86,0x86, + 0x86,0x86,0x86,0x86,0x86,0x86,0x86,0x87,0x87,0x87,0x88,0x88,0x89,0x89,0x89, + 0x89,0x89,0x89,0x8a,0x8a,0x8a,0x8a,0x8a,0x8a,0x8a,0x8b,0x8b,0x8b,0x8b,0x8b, + 0x8c,0x8c,0x8c,0x8d,0x8d,0x8d,0x8d,0x8d,0x8e,0x8e,0x90,0x90,0x90,0x8f,0x8f, + 0x90,0x90,0x91,0x91,0x91,0x91,0x90,0x8f,0x8f,0x8f,0x90,0x90,0x90,0x8f,0x8f, + 0x90,0x91,0x91,0x92,0x92,0x92,0x93,0x93,0x93,0x93,0x93,0x93,0x94,0x94,0x94, + 0x94,0x94,0x95,0x95,0x95,0x95,0x95,0x95,0x95,0x95,0x95,0x95,0x95,0x95,0x95, + 0x96,0x97,0x97,0x97,0x96,0x96,0x97,0x97,0x97,0x97,0x97,0x97,0x98,0x97,0x98, + 0x98,0x98,0x97,0x97,0x97,0x97,0x98,0x98,0x99,0x9a,0x9a,0x9b,0x9b,0x9b,0x9c, + 0x9c,0x9e,0x9f,0x9a,0x98,0x98,0x9c,0x9d,0x97,0xa2,0xb4,0x5e,0x03,0x00,0x03, + 0x0b,0x06,0x01,0x07,0x04,0x00,0x1e,0x56,0xac,0xb9,0x90,0x99,0xa3,0x96,0x99, + 0xa5,0x9e,0x98,0x9f,0x9c,0x95,0x9f,0xaa,0xb5,0xb1,0xa4,0x98,0x9a,0xb3,0xa7, + 0x7c,0x2a,0x00,0x07,0x05,0x00,0x00,0x00,0x03,0x03,0x03,0x03,0x05,0x0a,0x08, + 0x04,0x00,0x03,0x14,0x70,0xc3,0xa8,0x9c,0xa5,0xa0,0x9b,0x9e,0xa2,0xa6,0xa3, + 0x9f,0xa0,0xa1,0xa2,0xa3,0xa3,0xa2,0xa1,0xa2,0xa3,0xa4,0xa4,0xa3,0xa1,0xa0, + 0xa0,0xa2,0xa3,0xa3,0xa3,0xa2,0xa3,0xa3,0xa3,0xa3,0xa3,0xa3,0xa3,0xa3,0xa3, + 0xa3,0xa3,0xa3,0xa3,0xa3,0xa3,0xa3,0xa3,0xa3,0xa4,0xa4,0xa4,0xa5,0xa5,0xa4, + 0xa4,0xa4,0xa4,0xa4,0xa4,0xa4,0xa4,0xa5,0xa5,0xa5,0xa5,0xa6,0xa6,0xa5,0xa5, + 0xa5,0xa5,0xa5,0xa5,0xa5,0xa5,0xa5,0xa6,0xa6,0xa6,0xa6,0xa6,0xa6,0xa6,0xa5, + 0xa5,0xa5,0xa5,0xa4,0xa4,0xa4,0xa4,0xa4,0xa4,0xa5,0xa5,0xa5,0xa4,0xa4,0xa4, + 0xa4,0xa5,0xa5,0xa5,0xa4,0xa4,0xa4,0xa5,0xa5,0xa5,0xa6,0xa6,0xa6,0xa6,0xc8, + 0x50,0x50,0x4f,0x4f,0x4f,0x4f,0x4f,0x50,0x50,0x50,0x52,0x53,0x53,0x53,0x51, + 0x51,0x52,0x52,0x53,0x53,0x53,0x53,0x53,0x53,0x53,0x54,0x55,0x57,0x57,0x57, + 0x57,0x58,0x58,0x59,0x58,0x59,0x59,0x59,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a, + 0x5a,0x5b,0x5d,0x5e,0x5e,0x5e,0x5d,0x5d,0x5c,0x5c,0x5c,0x5d,0x5d,0x5e,0x5e, + 0x5e,0x5e,0x5e,0x5e,0x5f,0x61,0x61,0x60,0x61,0x61,0x60,0x60,0x61,0x62,0x62, + 0x61,0x62,0x64,0x63,0x63,0x65,0x66,0x66,0x66,0x65,0x65,0x66,0x67,0x68,0x67, + 0x66,0x67,0x68,0x69,0x6b,0x6a,0x6a,0x6a,0x6a,0x6a,0x6a,0x6b,0x6c,0x6c,0x6d, + 0x6d,0x6d,0x6e,0x6e,0x6e,0x6e,0x6e,0x6d,0x6d,0x6e,0x6e,0x70,0x70,0x70,0x70, + 0x70,0x70,0x70,0x70,0x70,0x71,0x71,0x72,0x72,0x73,0x72,0x73,0x73,0x72,0x71, + 0x71,0x71,0x72,0x72,0x73,0x74,0x75,0x76,0x77,0x77,0x76,0x76,0x76,0x76,0x77, + 0x78,0x78,0x77,0x77,0x78,0x78,0x78,0x79,0x7a,0x79,0x79,0x78,0x79,0x79,0x7a, + 0x7b,0x7b,0x7c,0x7d,0x7e,0x7e,0x7f,0x7e,0x7e,0x7e,0x7f,0x7f,0x7f,0x80,0x80, + 0x80,0x80,0x80,0x80,0x80,0x80,0x81,0x81,0x81,0x82,0x82,0x82,0x83,0x83,0x83, + 0x83,0x83,0x83,0x83,0x83,0x83,0x84,0x85,0x85,0x85,0x85,0x85,0x85,0x85,0x86, + 0x87,0x87,0x87,0x87,0x86,0x86,0x86,0x87,0x88,0x89,0x89,0x89,0x89,0x8a,0x8a, + 0x8a,0x8a,0x8a,0x8a,0x8a,0x8a,0x8a,0x8a,0x8a,0x8b,0x8b,0x8b,0x8c,0x8c,0x8c, + 0x8d,0x8d,0x8d,0x8d,0x8e,0x8e,0x8f,0x8f,0x8f,0x8f,0x8f,0x90,0x91,0x91,0x91, + 0x91,0x91,0x91,0x91,0x90,0x91,0x91,0x91,0x91,0x90,0x91,0x91,0x92,0x92,0x92, + 0x91,0x91,0x91,0x92,0x94,0x95,0x95,0x95,0x95,0x94,0x94,0x94,0x94,0x94,0x94, + 0x95,0x95,0x95,0x95,0x95,0x95,0x95,0x95,0x96,0x96,0x97,0x97,0x97,0x97,0x97, + 0x97,0x97,0x98,0x98,0x98,0x98,0x98,0x98,0x98,0x98,0x99,0x99,0x99,0x99,0x9a, + 0x9a,0x9a,0x9a,0x9a,0x99,0x99,0x99,0x99,0x99,0x9a,0x9b,0x9c,0x9c,0x9c,0x9c, + 0x9c,0x9c,0x9c,0x9f,0xa0,0x9b,0x9a,0x9e,0x9a,0x96,0x95,0xa9,0xc4,0x6a,0x09, + 0x00,0x03,0x08,0x04,0x00,0x04,0x03,0x00,0x14,0x46,0xaa,0xbf,0x98,0x97,0x9c, + 0x9f,0x99,0x92,0xaa,0xbd,0xb9,0x7f,0x2c,0x1f,0x2f,0x51,0x89,0xbd,0xa6,0x99, + 0xb2,0xad,0x89,0x2e,0x00,0x02,0x04,0x03,0x01,0x00,0x00,0x01,0x02,0x00,0x01, + 0x03,0x02,0x00,0x00,0x02,0x0a,0x69,0xbf,0xa4,0x93,0x98,0x9c,0xa2,0xa6,0xa5, + 0xa1,0xa2,0xa3,0xa4,0xa5,0xa4,0xa3,0xa3,0xa3,0xa3,0xa3,0xa4,0xa4,0xa4,0xa4, + 0xa3,0xa3,0xa3,0xa3,0xa3,0xa3,0xa3,0xa3,0xa3,0xa4,0xa5,0xa5,0xa5,0xa4,0xa4, + 0xa4,0xa5,0xa5,0xa5,0xa4,0xa4,0xa4,0xa5,0xa5,0xa4,0xa4,0xa5,0xa5,0xa5,0xa6, + 0xa6,0xa5,0xa5,0xa5,0xa5,0xa5,0xa6,0xa6,0xa6,0xa6,0xa6,0xa7,0xa6,0xa6,0xa6, + 0xa6,0xa6,0xa6,0xa6,0xa6,0xa6,0xa6,0xa6,0xa6,0xa7,0xa7,0xa7,0xa7,0xa7,0xa7, + 0xa7,0xa7,0xa7,0xa6,0xa6,0xa6,0xa6,0xa6,0xa6,0xa6,0xa6,0xa6,0xa5,0xa5,0xa5, + 0xa5,0xa5,0xa5,0xa5,0xa5,0xa5,0xa5,0xa4,0xa5,0xa6,0xa7,0xa6,0xa7,0xa7,0xa7, + 0xa7,0xc8,0x50,0x50,0x50,0x50,0x50,0x50,0x50,0x50,0x51,0x52,0x53,0x53,0x53, + 0x53,0x52,0x52,0x53,0x53,0x53,0x53,0x53,0x53,0x54,0x54,0x55,0x56,0x57,0x57, + 0x58,0x58,0x58,0x59,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a, + 0x5a,0x5b,0x5c,0x5c,0x5d,0x5e,0x5e,0x5e,0x5e,0x5e,0x5e,0x5e,0x5e,0x5e,0x5e, + 0x5e,0x5f,0x5f,0x5e,0x5e,0x5f,0x60,0x61,0x61,0x60,0x62,0x62,0x62,0x62,0x62, + 0x62,0x62,0x62,0x63,0x65,0x65,0x65,0x66,0x67,0x67,0x67,0x66,0x66,0x67,0x69, + 0x69,0x69,0x68,0x69,0x69,0x6b,0x6c,0x6b,0x6a,0x6a,0x6a,0x6b,0x6b,0x6c,0x6d, + 0x6d,0x6d,0x6d,0x6e,0x6e,0x6f,0x70,0x70,0x70,0x6f,0x6f,0x6f,0x6f,0x70,0x71, + 0x72,0x72,0x72,0x72,0x72,0x72,0x72,0x72,0x72,0x72,0x73,0x74,0x74,0x74,0x74, + 0x73,0x73,0x73,0x73,0x73,0x74,0x74,0x75,0x76,0x77,0x77,0x77,0x76,0x76,0x77, + 0x77,0x78,0x78,0x78,0x78,0x78,0x78,0x79,0x7a,0x7a,0x7a,0x7a,0x7a,0x7a,0x7a, + 0x7b,0x7b,0x7b,0x7c,0x7d,0x7e,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x80,0x81,0x81, + 0x82,0x82,0x82,0x81,0x81,0x82,0x82,0x82,0x82,0x82,0x82,0x82,0x83,0x83,0x84, + 0x85,0x85,0x85,0x85,0x85,0x85,0x85,0x85,0x86,0x86,0x85,0x85,0x85,0x85,0x86, + 0x86,0x87,0x88,0x88,0x88,0x88,0x87,0x87,0x88,0x89,0x8a,0x8a,0x8a,0x8a,0x8a, + 0x8a,0x8a,0x8b,0x8b,0x8b,0x8b,0x8c,0x8c,0x8c,0x8c,0x8c,0x8c,0x8d,0x8d,0x8d, + 0x8d,0x8d,0x8d,0x8d,0x8e,0x8f,0x90,0x90,0x91,0x91,0x91,0x91,0x90,0x90,0x91, + 0x91,0x91,0x91,0x91,0x91,0x91,0x90,0x90,0x91,0x91,0x91,0x91,0x92,0x93,0x94, + 0x94,0x94,0x94,0x93,0x94,0x95,0x95,0x95,0x96,0x96,0x96,0x95,0x95,0x95,0x95, + 0x95,0x95,0x96,0x96,0x96,0x96,0x96,0x97,0x97,0x97,0x97,0x98,0x98,0x98,0x98, + 0x98,0x98,0x98,0x98,0x99,0x99,0x99,0x99,0x9a,0x9a,0x9a,0x9a,0x9a,0x9b,0x9b, + 0x9b,0x9c,0x9c,0x9c,0x9c,0x9b,0x9b,0x9b,0x9b,0x9b,0x9b,0x9b,0x9c,0x9c,0x9c, + 0x9d,0x9d,0x9d,0x9e,0x9e,0x9e,0x9e,0x9c,0x9d,0xa0,0x9b,0x96,0x98,0xac,0xc6, + 0x71,0x12,0x05,0x02,0x03,0x03,0x03,0x06,0x03,0x00,0x06,0x2f,0x9a,0xbb,0xa0, + 0x98,0x98,0xa0,0x9e,0x96,0xaa,0xac,0x89,0x46,0x00,0x00,0x00,0x14,0x53,0x98, + 0xa0,0xa4,0xb5,0xaf,0x8e,0x2f,0x00,0x00,0x03,0x04,0x03,0x01,0x00,0x01,0x03, + 0x01,0x00,0x00,0x00,0x01,0x03,0x01,0x03,0x61,0xbd,0xb3,0xa8,0xa7,0xa1,0x9e, + 0xa4,0xa5,0xa1,0xa3,0xa7,0xa6,0xa5,0xa4,0xa3,0xa3,0xa5,0xa5,0xa5,0xa4,0xa3, + 0xa3,0xa4,0xa5,0xa5,0xa5,0xa4,0xa4,0xa5,0xa5,0xa5,0xa5,0xa6,0xa7,0xa7,0xa7, + 0xa6,0xa6,0xa6,0xa7,0xa7,0xa6,0xa6,0xa6,0xa5,0xa5,0xa5,0xa5,0xa5,0xa5,0xa6, + 0xa6,0xa6,0xa6,0xa6,0xa5,0xa5,0xa6,0xa7,0xa7,0xa7,0xa7,0xa7,0xa7,0xa7,0xa7, + 0xa6,0xa6,0xa7,0xa7,0xa7,0xa7,0xa7,0xa7,0xa6,0xa7,0xa7,0xa7,0xa7,0xa7,0xa7, + 0xa8,0xa8,0xa8,0xa8,0xa7,0xa7,0xa7,0xa7,0xa7,0xa7,0xa7,0xa7,0xa7,0xa7,0xa6, + 0xa6,0xa6,0xa6,0xa6,0xa6,0xa6,0xa7,0xa7,0xa6,0xa6,0xa6,0xa7,0xa7,0xa7,0xa7, + 0xa7,0xa7,0xa7,0xc8,0x50,0x50,0x50,0x50,0x50,0x50,0x51,0x52,0x52,0x53,0x53, + 0x53,0x53,0x53,0x53,0x53,0x54,0x55,0x55,0x55,0x55,0x55,0x56,0x57,0x57,0x57, + 0x58,0x59,0x59,0x59,0x59,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5b,0x5b,0x5b,0x5b, + 0x5b,0x5c,0x5c,0x5d,0x5e,0x5e,0x5e,0x5e,0x5e,0x5f,0x5f,0x5f,0x5f,0x60,0x60, + 0x60,0x60,0x60,0x61,0x60,0x60,0x60,0x60,0x61,0x62,0x62,0x64,0x65,0x66,0x65, + 0x65,0x65,0x65,0x65,0x65,0x66,0x68,0x67,0x67,0x67,0x67,0x68,0x67,0x67,0x67, + 0x68,0x69,0x69,0x69,0x69,0x69,0x6a,0x6c,0x6d,0x6c,0x6b,0x6b,0x6b,0x6b,0x6d, + 0x6d,0x6d,0x6e,0x6e,0x6e,0x6e,0x6f,0x70,0x70,0x70,0x70,0x70,0x70,0x70,0x70, + 0x70,0x71,0x72,0x73,0x73,0x73,0x73,0x73,0x73,0x73,0x73,0x73,0x74,0x74,0x74, + 0x74,0x74,0x75,0x75,0x75,0x75,0x75,0x75,0x75,0x76,0x77,0x77,0x77,0x77,0x77, + 0x77,0x78,0x78,0x78,0x79,0x79,0x79,0x7a,0x7a,0x7b,0x7b,0x7b,0x7b,0x7b,0x7b, + 0x7b,0x7b,0x7c,0x7c,0x7d,0x7e,0x7e,0x7f,0x7f,0x7f,0x7f,0x7f,0x80,0x80,0x81, + 0x82,0x82,0x82,0x82,0x82,0x82,0x82,0x82,0x82,0x82,0x83,0x83,0x83,0x83,0x84, + 0x85,0x85,0x86,0x86,0x86,0x86,0x86,0x86,0x87,0x87,0x86,0x86,0x86,0x86,0x86, + 0x86,0x87,0x88,0x89,0x89,0x89,0x89,0x8a,0x89,0x89,0x8a,0x8a,0x8b,0x8c,0x8c, + 0x8c,0x8b,0x8b,0x8b,0x8b,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d, + 0x8d,0x8d,0x8e,0x8e,0x8e,0x8e,0x8f,0x90,0x91,0x91,0x91,0x91,0x91,0x91,0x91, + 0x91,0x91,0x91,0x91,0x91,0x91,0x91,0x91,0x91,0x91,0x91,0x91,0x92,0x93,0x94, + 0x95,0x95,0x95,0x95,0x95,0x95,0x95,0x95,0x96,0x96,0x97,0x97,0x97,0x97,0x97, + 0x97,0x97,0x97,0x98,0x98,0x98,0x98,0x98,0x98,0x98,0x98,0x98,0x98,0x98,0x98, + 0x99,0x99,0x99,0x99,0x99,0x99,0x9a,0x9a,0x9a,0x9a,0x9b,0x9b,0x9b,0x9b,0x9b, + 0x9b,0x9c,0x9c,0x9c,0x9c,0x9c,0x9c,0x9c,0x9c,0x9c,0x9c,0x9c,0x9c,0x9c,0x9c, + 0x9c,0x9d,0x9d,0x9e,0x9e,0x9f,0xa1,0x9c,0x98,0x9e,0xa0,0x9d,0x9c,0x9d,0x9e, + 0xac,0xbe,0x70,0x1a,0x07,0x00,0x00,0x03,0x08,0x09,0x06,0x01,0x00,0x13,0x7d, + 0xad,0xa9,0x9f,0x97,0x9e,0xa6,0xaa,0x98,0x6d,0x20,0x01,0x03,0x02,0x02,0x00, + 0x18,0x45,0x8b,0xb9,0xb8,0xae,0x8d,0x2f,0x00,0x00,0x01,0x03,0x04,0x03,0x01, + 0x03,0x04,0x03,0x02,0x02,0x03,0x04,0x07,0x03,0x00,0x57,0xb5,0xc8,0xc8,0xc3, + 0xaa,0x96,0x9c,0xa1,0xa4,0xa7,0xa7,0xa3,0xa3,0xa3,0xa3,0xa3,0xa6,0xa7,0xa7, + 0xa4,0xa3,0xa3,0xa4,0xa7,0xa7,0xa7,0xa5,0xa5,0xa6,0xa6,0xa6,0xa6,0xa7,0xa7, + 0xa7,0xa7,0xa7,0xa7,0xa7,0xa8,0xa8,0xa7,0xa7,0xa7,0xa6,0xa6,0xa6,0xa6,0xa6, + 0xa7,0xa7,0xa7,0xa7,0xa7,0xa6,0xa6,0xa7,0xa7,0xa8,0xa9,0xa9,0xa9,0xa8,0xa8, + 0xa7,0xa7,0xa7,0xa7,0xa7,0xa7,0xa7,0xa7,0xa7,0xa7,0xa7,0xa7,0xa8,0xa8,0xa8, + 0xa8,0xa8,0xa9,0xa9,0xa9,0xa9,0xa9,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8, + 0xa7,0xa7,0xa7,0xa7,0xa7,0xa7,0xa7,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa9,0xa9, + 0xa8,0xa8,0xa8,0xa8,0xa8,0xc8,0x4f,0x4f,0x4f,0x50,0x50,0x51,0x52,0x52,0x53, + 0x53,0x53,0x53,0x53,0x53,0x54,0x54,0x55,0x56,0x56,0x56,0x56,0x56,0x57,0x57, + 0x58,0x59,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5b,0x5b,0x5b,0x5b,0x5b,0x5c,0x5c, + 0x5c,0x5c,0x5c,0x5d,0x5e,0x5e,0x5e,0x5e,0x5e,0x5f,0x5f,0x60,0x60,0x61,0x61, + 0x61,0x61,0x62,0x62,0x62,0x62,0x62,0x61,0x61,0x62,0x62,0x63,0x64,0x65,0x66, + 0x66,0x65,0x65,0x65,0x65,0x65,0x65,0x66,0x68,0x67,0x66,0x67,0x68,0x69,0x69, + 0x68,0x67,0x69,0x6a,0x6a,0x6a,0x6a,0x6a,0x6b,0x6d,0x6d,0x6d,0x6c,0x6c,0x6c, + 0x6c,0x6d,0x6e,0x6e,0x6e,0x6f,0x6f,0x6f,0x6f,0x70,0x70,0x70,0x70,0x71,0x71, + 0x71,0x71,0x71,0x72,0x73,0x73,0x74,0x74,0x74,0x74,0x74,0x74,0x74,0x74,0x74, + 0x74,0x75,0x74,0x75,0x76,0x77,0x77,0x77,0x77,0x77,0x77,0x78,0x78,0x78,0x78, + 0x78,0x78,0x78,0x78,0x79,0x7a,0x7a,0x7a,0x7a,0x7b,0x7b,0x7c,0x7c,0x7c,0x7b, + 0x7c,0x7d,0x7d,0x7d,0x7e,0x7e,0x7e,0x7f,0x7f,0x7f,0x80,0x80,0x80,0x80,0x81, + 0x81,0x82,0x82,0x83,0x83,0x83,0x83,0x82,0x82,0x83,0x83,0x84,0x84,0x85,0x85, + 0x85,0x85,0x86,0x86,0x86,0x86,0x86,0x86,0x86,0x87,0x88,0x89,0x88,0x88,0x88, + 0x87,0x87,0x88,0x89,0x8a,0x8a,0x8a,0x8a,0x8a,0x8b,0x8a,0x8a,0x8b,0x8c,0x8d, + 0x8d,0x8d,0x8d,0x8d,0x8d,0x8c,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x8e,0x8e,0x8e, + 0x8e,0x8f,0x8f,0x8f,0x8f,0x8f,0x8f,0x8f,0x90,0x91,0x91,0x91,0x91,0x91,0x92, + 0x91,0x91,0x91,0x92,0x93,0x93,0x94,0x94,0x94,0x94,0x93,0x94,0x94,0x95,0x95, + 0x95,0x95,0x95,0x95,0x95,0x95,0x95,0x95,0x95,0x96,0x96,0x97,0x98,0x97,0x97, + 0x98,0x98,0x98,0x98,0x98,0x98,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99, + 0x99,0x99,0x9a,0x9a,0x9a,0x9a,0x9a,0x9a,0x9a,0x9b,0x9b,0x9b,0x9b,0x9b,0x9b, + 0x9b,0x9b,0x9c,0x9c,0x9c,0x9d,0x9c,0x9c,0x9c,0x9c,0x9c,0x9c,0x9c,0x9c,0x9c, + 0x9c,0x9c,0x9d,0x9d,0x9e,0x9f,0x9e,0xa0,0xa2,0x9d,0x99,0xa0,0xa1,0x9d,0x9c, + 0x9c,0x99,0xa8,0xc0,0x73,0x19,0x04,0x00,0x04,0x06,0x06,0x06,0x04,0x03,0x00, + 0x0a,0x5c,0x98,0xb8,0xa3,0x92,0xa7,0xaf,0xa4,0x64,0x25,0x01,0x00,0x07,0x04, + 0x00,0x00,0x03,0x20,0x82,0xc0,0xb3,0xa6,0x8a,0x31,0x00,0x00,0x00,0x02,0x04, + 0x04,0x01,0x01,0x02,0x03,0x03,0x03,0x03,0x04,0x06,0x01,0x00,0x42,0x8c,0x8d, + 0x8a,0x8b,0xa5,0xb9,0xa4,0x9d,0xa6,0xa7,0xa5,0xa3,0xa5,0xa8,0xa6,0xa4,0xa7, + 0xa7,0xa7,0xa5,0xa4,0xa3,0xa5,0xa7,0xa7,0xa7,0xa7,0xa7,0xa7,0xa7,0xa7,0xa6, + 0xa7,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa9,0xa9,0xa8,0xa7,0xa7,0xa7,0xa7,0xa7, + 0xa7,0xa7,0xa7,0xa7,0xa7,0xa7,0xa7,0xa7,0xa7,0xa7,0xa8,0xa9,0xaa,0xaa,0xaa, + 0xa9,0xa9,0xa8,0xa8,0xa7,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa9,0xa9,0xa9, + 0xa9,0xa9,0xa9,0xa9,0xaa,0xa9,0xa9,0xa9,0xa9,0xa9,0xa9,0xa9,0xa9,0xa9,0xa9, + 0xa9,0xa9,0xa9,0xa9,0xa9,0xa9,0xa9,0xa9,0xa9,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa, + 0xaa,0xaa,0xa9,0xa9,0xa9,0xa8,0xa8,0xc8,0x4e,0x4e,0x4f,0x50,0x50,0x51,0x52, + 0x53,0x53,0x53,0x53,0x53,0x53,0x53,0x54,0x54,0x55,0x57,0x57,0x57,0x57,0x57, + 0x57,0x58,0x59,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5b,0x5b,0x5b,0x5b,0x5b, + 0x5c,0x5c,0x5c,0x5d,0x5d,0x5e,0x5e,0x5e,0x5e,0x5e,0x5f,0x60,0x60,0x61,0x62, + 0x62,0x62,0x62,0x62,0x62,0x62,0x62,0x62,0x62,0x62,0x62,0x62,0x63,0x64,0x65, + 0x65,0x65,0x66,0x64,0x64,0x64,0x65,0x65,0x65,0x67,0x68,0x66,0x65,0x68,0x69, + 0x69,0x69,0x69,0x68,0x69,0x6a,0x6a,0x6a,0x6a,0x6b,0x6c,0x6d,0x6d,0x6d,0x6d, + 0x6d,0x6d,0x6d,0x6e,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x70,0x70,0x70,0x71, + 0x71,0x72,0x72,0x72,0x73,0x73,0x73,0x73,0x74,0x74,0x74,0x74,0x74,0x74,0x74, + 0x74,0x75,0x75,0x75,0x75,0x75,0x77,0x78,0x78,0x78,0x78,0x78,0x78,0x78,0x78, + 0x78,0x78,0x78,0x78,0x79,0x7a,0x7b,0x7b,0x7b,0x7b,0x7b,0x7b,0x7c,0x7d,0x7d, + 0x7d,0x7c,0x7d,0x7e,0x7e,0x7e,0x7f,0x7f,0x7f,0x7f,0x80,0x80,0x81,0x81,0x81, + 0x81,0x81,0x82,0x82,0x83,0x83,0x83,0x83,0x83,0x83,0x84,0x84,0x85,0x86,0x86, + 0x86,0x86,0x86,0x86,0x86,0x86,0x86,0x87,0x87,0x87,0x88,0x88,0x8a,0x8a,0x8a, + 0x89,0x89,0x89,0x8a,0x8a,0x8a,0x8a,0x8a,0x8a,0x8a,0x8b,0x8c,0x8c,0x8c,0x8d, + 0x8d,0x8d,0x8e,0x8e,0x8d,0x8d,0x8d,0x8d,0x8e,0x8e,0x8e,0x8e,0x8e,0x8f,0x8f, + 0x8f,0x8f,0x90,0x91,0x90,0x90,0x90,0x90,0x90,0x90,0x91,0x91,0x91,0x91,0x91, + 0x92,0x92,0x92,0x92,0x92,0x94,0x95,0x95,0x95,0x95,0x95,0x95,0x95,0x96,0x96, + 0x97,0x97,0x97,0x96,0x95,0x95,0x95,0x95,0x95,0x95,0x96,0x97,0x97,0x98,0x98, + 0x97,0x98,0x99,0x99,0x99,0x99,0x99,0x99,0x9a,0x9a,0x9a,0x9a,0x9a,0x9a,0x9a, + 0x99,0x99,0x9a,0x9a,0x9a,0x9b,0x9b,0x9b,0x9b,0x9b,0x9b,0x9c,0x9c,0x9c,0x9c, + 0x9b,0x9b,0x9b,0x9c,0x9c,0x9c,0x9d,0x9d,0x9d,0x9c,0x9c,0x9d,0x9d,0x9d,0x9d, + 0x9c,0x9c,0x9c,0x9d,0x9d,0x9e,0x9f,0x9f,0x9f,0xa0,0xa1,0x9f,0x9d,0xa0,0xa1, + 0x9e,0x9d,0x9c,0x95,0xa5,0xc4,0x7c,0x24,0x06,0x00,0x08,0x06,0x02,0x02,0x03, + 0x04,0x00,0x07,0x39,0x7f,0xc2,0xa9,0x91,0xb3,0xae,0x84,0x2e,0x00,0x00,0x05, + 0x08,0x04,0x00,0x00,0x00,0x0d,0x7b,0xc1,0xb2,0xa1,0x82,0x30,0x00,0x00,0x00, + 0x02,0x03,0x03,0x01,0x00,0x00,0x02,0x03,0x03,0x03,0x03,0x04,0x01,0x00,0x28, + 0x53,0x45,0x3b,0x42,0x88,0xc4,0xae,0xa2,0xa5,0xa5,0xa5,0xa4,0xa7,0xac,0xa9, + 0xa6,0xa7,0xa7,0xa7,0xa7,0xa7,0xa7,0xa7,0xa6,0xa6,0xa7,0xa7,0xa7,0xa7,0xa7, + 0xa7,0xa7,0xa7,0xa8,0xa9,0xa9,0xa9,0xa9,0xa9,0xaa,0xaa,0xaa,0xa9,0xa8,0xa8, + 0xa8,0xa7,0xa7,0xa7,0xa8,0xa8,0xa8,0xa9,0xa9,0xa9,0xa9,0xa9,0xaa,0xaa,0xaa, + 0xaa,0xaa,0xaa,0xaa,0xaa,0xa9,0xa8,0xa9,0xa9,0xa9,0xa9,0xa9,0xa9,0xa9,0xaa, + 0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xa9,0xa9,0xa9,0xa9,0xa9,0xa9,0xa9,0xa9, + 0xa9,0xa9,0xa9,0xa9,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xab,0xab,0xaa, + 0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xa9,0xa8,0xa8,0xc8,0x4e,0x4e,0x4f,0x50,0x51, + 0x52,0x53,0x53,0x53,0x54,0x53,0x53,0x53,0x53,0x53,0x53,0x53,0x55,0x56,0x56, + 0x56,0x56,0x57,0x57,0x58,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5b,0x5b,0x5b, + 0x5b,0x5b,0x5c,0x5c,0x5c,0x5d,0x5e,0x5e,0x5e,0x5e,0x5e,0x5e,0x60,0x61,0x62, + 0x62,0x62,0x62,0x62,0x61,0x61,0x61,0x62,0x62,0x63,0x63,0x63,0x63,0x63,0x64, + 0x65,0x65,0x65,0x65,0x65,0x63,0x63,0x64,0x65,0x66,0x67,0x69,0x6a,0x69,0x67, + 0x69,0x69,0x6a,0x6a,0x69,0x69,0x6a,0x6b,0x6b,0x6b,0x6a,0x6c,0x6d,0x6e,0x6e, + 0x6d,0x6d,0x6d,0x6d,0x6d,0x6f,0x6f,0x70,0x70,0x70,0x70,0x70,0x70,0x70,0x70, + 0x70,0x71,0x72,0x73,0x74,0x74,0x74,0x74,0x74,0x74,0x74,0x74,0x75,0x76,0x76, + 0x76,0x76,0x76,0x77,0x76,0x76,0x75,0x76,0x77,0x78,0x79,0x79,0x7a,0x7a,0x7a, + 0x7a,0x7a,0x79,0x79,0x79,0x79,0x7a,0x7b,0x7b,0x7b,0x7b,0x7b,0x7b,0x7b,0x7c, + 0x7e,0x7f,0x7e,0x7d,0x7e,0x7f,0x7f,0x7f,0x7f,0x7f,0x80,0x80,0x81,0x81,0x82, + 0x82,0x82,0x82,0x82,0x82,0x83,0x83,0x84,0x84,0x84,0x84,0x84,0x85,0x86,0x86, + 0x87,0x87,0x87,0x87,0x87,0x88,0x88,0x88,0x88,0x88,0x89,0x88,0x89,0x8a,0x8a, + 0x8a,0x8a,0x8a,0x8a,0x8a,0x8b,0x8b,0x8c,0x8c,0x8c,0x8c,0x8c,0x8d,0x8d,0x8d, + 0x8d,0x8d,0x8e,0x8f,0x8f,0x8f,0x8f,0x8f,0x8f,0x8f,0x8f,0x90,0x90,0x90,0x90, + 0x90,0x91,0x91,0x91,0x91,0x91,0x91,0x92,0x92,0x92,0x91,0x91,0x91,0x92,0x92, + 0x92,0x92,0x93,0x94,0x94,0x94,0x94,0x94,0x94,0x94,0x94,0x94,0x95,0x95,0x95, + 0x95,0x95,0x95,0x95,0x95,0x95,0x95,0x96,0x97,0x97,0x97,0x97,0x97,0x98,0x98, + 0x99,0x99,0x98,0x99,0x9a,0x9a,0x9a,0x9a,0x9a,0x9a,0x9a,0x9b,0x9b,0x9b,0x9b, + 0x9b,0x9b,0x9a,0x9b,0x9c,0x9c,0x9c,0x9c,0x9c,0x9c,0x9c,0x9c,0x9c,0x9c,0x9c, + 0x9d,0x9d,0x9c,0x9c,0x9c,0x9c,0x9d,0x9e,0x9f,0x9e,0x9e,0x9e,0x9e,0x9e,0x9e, + 0x9f,0x9e,0x9e,0x9d,0x9e,0x9e,0x9f,0xa0,0xa0,0xa0,0xa0,0xa0,0xa0,0xa0,0xa0, + 0x9d,0x9d,0xa0,0xa2,0xa1,0x97,0xa6,0xc5,0x93,0x49,0x12,0x00,0x03,0x02,0x00, + 0x02,0x05,0x07,0x00,0x02,0x15,0x5f,0xc0,0xaf,0x9a,0xc1,0x99,0x3d,0x0f,0x00, + 0x04,0x05,0x02,0x02,0x02,0x00,0x00,0x04,0x70,0xbc,0xbe,0xa6,0x75,0x28,0x00, + 0x02,0x03,0x02,0x01,0x01,0x02,0x02,0x02,0x01,0x01,0x01,0x00,0x00,0x05,0x04, + 0x00,0x09,0x12,0x10,0x0b,0x0b,0x45,0x8a,0xb3,0xb8,0x9f,0xa3,0xaa,0xa6,0xa4, + 0xa7,0xa9,0xa9,0xa6,0xa5,0xa6,0xaa,0xae,0xad,0xa9,0xa3,0xa3,0xa4,0xa8,0xa9, + 0xa7,0xa7,0xa7,0xa7,0xa8,0xa9,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xab,0xab,0xaa, + 0xaa,0xaa,0xaa,0xa9,0xa9,0xa9,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xab, + 0xab,0xab,0xab,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa, + 0xaa,0xaa,0xaa,0xab,0xab,0xab,0xab,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa, + 0xaa,0xaa,0xaa,0xaa,0xa9,0xaa,0xab,0xab,0xaa,0xaa,0xab,0xab,0xab,0xab,0xac, + 0xac,0xab,0xab,0xab,0xab,0xaa,0xaa,0xaa,0xa9,0xa8,0xa8,0xc8,0x4f,0x4f,0x50, + 0x50,0x51,0x52,0x53,0x53,0x53,0x54,0x54,0x53,0x53,0x53,0x53,0x53,0x54,0x55, + 0x55,0x56,0x56,0x56,0x57,0x57,0x57,0x59,0x5a,0x59,0x5a,0x5a,0x5b,0x5b,0x5a, + 0x5a,0x5b,0x5b,0x5c,0x5d,0x5c,0x5b,0x5d,0x5e,0x5e,0x5e,0x5e,0x5e,0x5e,0x5f, + 0x60,0x61,0x62,0x62,0x62,0x62,0x62,0x61,0x62,0x62,0x63,0x63,0x63,0x63,0x63, + 0x63,0x64,0x65,0x65,0x65,0x65,0x65,0x65,0x65,0x65,0x66,0x67,0x68,0x69,0x6a, + 0x69,0x69,0x69,0x6a,0x6c,0x6c,0x6b,0x6b,0x6b,0x6c,0x6c,0x6c,0x6c,0x6d,0x6d, + 0x6e,0x6e,0x6e,0x6e,0x6e,0x6d,0x6e,0x6f,0x70,0x70,0x70,0x70,0x70,0x70,0x70, + 0x70,0x70,0x71,0x72,0x73,0x74,0x74,0x74,0x75,0x75,0x74,0x74,0x74,0x74,0x75, + 0x75,0x76,0x77,0x78,0x78,0x78,0x77,0x77,0x77,0x77,0x78,0x79,0x7a,0x7a,0x7a, + 0x7a,0x7a,0x7a,0x7b,0x7b,0x7b,0x7b,0x7b,0x7b,0x7b,0x7b,0x7b,0x7c,0x7b,0x7b, + 0x7c,0x7d,0x7e,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x80,0x80,0x80,0x81,0x81, + 0x82,0x82,0x82,0x82,0x82,0x82,0x82,0x84,0x84,0x85,0x86,0x85,0x85,0x85,0x86, + 0x86,0x87,0x87,0x88,0x89,0x88,0x88,0x88,0x88,0x88,0x88,0x89,0x89,0x8a,0x8a, + 0x8a,0x8a,0x8a,0x8a,0x8a,0x8a,0x8b,0x8c,0x8c,0x8c,0x8c,0x8d,0x8d,0x8d,0x8d, + 0x8d,0x8d,0x8d,0x8d,0x8e,0x8f,0x8f,0x8f,0x8f,0x8f,0x8f,0x90,0x90,0x90,0x90, + 0x90,0x91,0x91,0x91,0x91,0x91,0x92,0x93,0x93,0x94,0x94,0x93,0x92,0x93,0x93, + 0x93,0x94,0x94,0x94,0x94,0x95,0x95,0x95,0x95,0x95,0x95,0x95,0x95,0x95,0x95, + 0x95,0x96,0x96,0x96,0x96,0x96,0x96,0x96,0x97,0x98,0x98,0x98,0x98,0x98,0x98, + 0x98,0x99,0x99,0x99,0x99,0x9a,0x9b,0x9b,0x9b,0x9b,0x9b,0x9b,0x9b,0x9b,0x9b, + 0x9b,0x9b,0x9b,0x9b,0x9c,0x9c,0x9c,0x9c,0x9c,0x9c,0x9d,0x9d,0x9d,0x9d,0x9d, + 0x9d,0x9e,0x9e,0x9e,0x9e,0x9e,0x9e,0x9e,0x9e,0x9f,0xa0,0xa0,0xa0,0xa0,0xa0, + 0xa0,0xa0,0xa0,0x9f,0x9f,0x9e,0x9e,0x9f,0xa0,0xa1,0xa1,0xa1,0xa1,0xa0,0x9f, + 0xa0,0xa2,0x9f,0x9f,0xa2,0xa3,0xa1,0x98,0xa3,0xbe,0xa8,0x74,0x1e,0x00,0x00, + 0x03,0x04,0x03,0x04,0x07,0x03,0x00,0x00,0x49,0xbb,0xb2,0xa2,0xc8,0x8d,0x19, + 0x00,0x01,0x06,0x03,0x00,0x01,0x03,0x03,0x00,0x02,0x5a,0xa5,0xc2,0xad,0x73, + 0x26,0x00,0x02,0x03,0x02,0x01,0x01,0x02,0x02,0x01,0x00,0x00,0x00,0x00,0x00, + 0x03,0x03,0x01,0x00,0x00,0x00,0x00,0x00,0x16,0x50,0xab,0xc4,0xa1,0xa4,0xab, + 0xa7,0xa4,0xa6,0xa9,0xaa,0xa7,0xa7,0xa8,0xaa,0xaa,0xaa,0xaa,0xa8,0xa6,0xa6, + 0xa8,0xa9,0xa8,0xa9,0xa9,0xa8,0xa9,0xaa,0xab,0xab,0xaa,0xab,0xab,0xab,0xab, + 0xab,0xab,0xab,0xab,0xaa,0xaa,0xaa,0xaa,0xaa,0xab,0xab,0xab,0xab,0xab,0xab, + 0xab,0xac,0xab,0xab,0xac,0xac,0xac,0xac,0xac,0xac,0xac,0xab,0xaa,0xab,0xab, + 0xab,0xab,0xaa,0xaa,0xaa,0xab,0xab,0xab,0xac,0xab,0xaa,0xaa,0xaa,0xaa,0xaa, + 0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xab,0xad,0xad,0xac,0xac,0xac,0xac,0xab, + 0xab,0xac,0xac,0xab,0xab,0xab,0xab,0xab,0xaa,0xaa,0xa9,0xa8,0xa8,0xc8,0x51, + 0x51,0x52,0x52,0x52,0x51,0x51,0x52,0x53,0x53,0x54,0x54,0x53,0x53,0x55,0x56, + 0x57,0x56,0x56,0x56,0x57,0x57,0x57,0x57,0x57,0x59,0x5a,0x57,0x59,0x5b,0x5c, + 0x5c,0x5a,0x5a,0x5a,0x5d,0x5e,0x5e,0x5c,0x5a,0x5c,0x5e,0x5f,0x60,0x60,0x5f, + 0x5e,0x5e,0x5e,0x5f,0x60,0x61,0x61,0x62,0x62,0x62,0x62,0x63,0x64,0x64,0x64, + 0x64,0x63,0x63,0x64,0x65,0x65,0x66,0x67,0x67,0x68,0x68,0x68,0x68,0x68,0x68, + 0x68,0x69,0x69,0x69,0x6a,0x6b,0x6d,0x6d,0x6d,0x6b,0x6b,0x6c,0x6d,0x6d,0x6e, + 0x6e,0x6d,0x6e,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x70,0x70,0x71,0x71,0x71,0x71, + 0x72,0x73,0x73,0x73,0x73,0x73,0x74,0x74,0x74,0x75,0x76,0x76,0x76,0x76,0x75, + 0x74,0x74,0x74,0x75,0x77,0x78,0x78,0x78,0x78,0x78,0x78,0x78,0x7a,0x7b,0x7b, + 0x7b,0x7b,0x7b,0x7b,0x7b,0x7b,0x7b,0x7c,0x7c,0x7c,0x7c,0x7c,0x7c,0x7c,0x7d, + 0x7e,0x7e,0x7e,0x7d,0x7d,0x7d,0x7f,0x80,0x81,0x81,0x81,0x81,0x81,0x81,0x81, + 0x82,0x82,0x82,0x82,0x83,0x83,0x83,0x83,0x83,0x84,0x85,0x86,0x86,0x86,0x86, + 0x86,0x86,0x86,0x86,0x86,0x88,0x89,0x88,0x87,0x87,0x87,0x88,0x89,0x8a,0x8a, + 0x8a,0x8a,0x8a,0x8a,0x8a,0x8b,0x8b,0x8b,0x8c,0x8c,0x8c,0x8c,0x8d,0x8d,0x8d, + 0x8d,0x8d,0x8e,0x8d,0x8d,0x8e,0x8e,0x8f,0x8f,0x8f,0x8f,0x8f,0x90,0x91,0x91, + 0x90,0x90,0x91,0x91,0x91,0x91,0x91,0x91,0x92,0x94,0x95,0x95,0x94,0x93,0x93, + 0x94,0x94,0x94,0x95,0x95,0x95,0x95,0x95,0x95,0x95,0x96,0x96,0x96,0x96,0x96, + 0x96,0x96,0x96,0x97,0x98,0x99,0x9a,0x9a,0x99,0x99,0x99,0x99,0x99,0x9a,0x9a, + 0x9a,0x99,0x99,0x99,0x99,0x99,0x99,0x9a,0x9c,0x9c,0x9c,0x9c,0x9c,0x9c,0x9c, + 0x9c,0x9c,0x9c,0x9c,0x9c,0x9c,0x9c,0x9c,0x9b,0x9b,0x9b,0x9c,0x9e,0x9f,0x9f, + 0x9f,0x9f,0x9f,0xa0,0x9f,0x9f,0x9f,0x9f,0x9f,0x9f,0xa0,0xa0,0xa0,0xa0,0xa0, + 0xa0,0xa1,0xa1,0xa1,0xa0,0xa0,0xa0,0x9f,0x9f,0xa0,0xa0,0xa2,0xa2,0xa2,0xa1, + 0xa0,0x9f,0xa0,0xa2,0xa3,0xa3,0xa3,0xa3,0xa0,0x99,0xa0,0xb1,0xb9,0x9d,0x29, + 0x00,0x00,0x07,0x0b,0x03,0x02,0x05,0x04,0x02,0x00,0x3d,0xb2,0xb4,0xa9,0xc8, + 0x88,0x15,0x00,0x01,0x03,0x01,0x00,0x00,0x03,0x05,0x00,0x03,0x3f,0x82,0xbe, + 0xb4,0x7a,0x2a,0x00,0x00,0x00,0x02,0x03,0x03,0x01,0x00,0x00,0x00,0x00,0x01, + 0x01,0x01,0x00,0x00,0x01,0x01,0x02,0x09,0x07,0x00,0x00,0x20,0x99,0xc7,0xaa, + 0xa7,0xa8,0xa7,0xa7,0xa9,0xa9,0xa9,0xaa,0xab,0xab,0xa7,0xa2,0xa3,0xa9,0xb0, + 0xad,0xa9,0xa7,0xa8,0xa9,0xac,0xad,0xaa,0xaa,0xac,0xac,0xab,0xaa,0xab,0xad, + 0xab,0xaa,0xab,0xab,0xab,0xab,0xab,0xab,0xab,0xab,0xab,0xab,0xab,0xab,0xac, + 0xac,0xac,0xac,0xac,0xac,0xac,0xac,0xad,0xad,0xad,0xae,0xae,0xae,0xac,0xab, + 0xac,0xac,0xac,0xab,0xab,0xaa,0xaa,0xab,0xac,0xac,0xac,0xac,0xab,0xab,0xac, + 0xad,0xad,0xac,0xab,0xab,0xab,0xab,0xac,0xac,0xad,0xaf,0xae,0xae,0xad,0xad, + 0xac,0xac,0xac,0xab,0xab,0xaa,0xaa,0xaa,0xab,0xab,0xaa,0xaa,0xa9,0xa8,0xa8, + 0xc8,0x50,0x50,0x52,0x53,0x53,0x53,0x52,0x51,0x51,0x52,0x53,0x54,0x54,0x55, + 0x56,0x57,0x57,0x57,0x56,0x56,0x57,0x57,0x57,0x57,0x57,0x59,0x5a,0x58,0x59, + 0x5b,0x5c,0x5c,0x5a,0x5a,0x5b,0x5e,0x5e,0x5e,0x5d,0x5b,0x5d,0x5e,0x60,0x61, + 0x62,0x61,0x60,0x60,0x60,0x61,0x62,0x62,0x62,0x62,0x62,0x62,0x62,0x63,0x64, + 0x65,0x65,0x65,0x65,0x65,0x65,0x65,0x65,0x66,0x66,0x66,0x67,0x67,0x67,0x67, + 0x67,0x68,0x68,0x69,0x69,0x69,0x69,0x6b,0x6c,0x6c,0x6b,0x6a,0x6a,0x6a,0x6c, + 0x6d,0x6d,0x6d,0x6d,0x6f,0x70,0x70,0x70,0x70,0x70,0x70,0x70,0x71,0x72,0x72, + 0x72,0x73,0x73,0x74,0x74,0x74,0x74,0x74,0x75,0x75,0x76,0x76,0x76,0x76,0x76, + 0x76,0x77,0x76,0x75,0x75,0x76,0x77,0x78,0x79,0x79,0x79,0x79,0x79,0x7a,0x7b, + 0x7c,0x7b,0x7b,0x7b,0x7b,0x7b,0x7c,0x7c,0x7c,0x7d,0x7d,0x7d,0x7e,0x7f,0x7e, + 0x7e,0x7f,0x7f,0x7f,0x7f,0x7e,0x7d,0x7d,0x7e,0x7f,0x81,0x82,0x82,0x82,0x82, + 0x82,0x82,0x82,0x82,0x83,0x84,0x84,0x84,0x84,0x84,0x84,0x85,0x86,0x86,0x86, + 0x86,0x87,0x87,0x87,0x86,0x87,0x87,0x89,0x89,0x88,0x88,0x88,0x88,0x89,0x8a, + 0x8a,0x8a,0x8b,0x8b,0x8b,0x8b,0x8b,0x8c,0x8c,0x8c,0x8d,0x8d,0x8d,0x8d,0x8d, + 0x8d,0x8d,0x8e,0x8f,0x8f,0x8f,0x8f,0x8f,0x90,0x90,0x90,0x90,0x8f,0x90,0x91, + 0x91,0x91,0x90,0x91,0x91,0x92,0x91,0x91,0x91,0x92,0x93,0x94,0x95,0x95,0x94, + 0x94,0x94,0x95,0x95,0x95,0x95,0x95,0x95,0x95,0x95,0x95,0x96,0x96,0x97,0x97, + 0x97,0x97,0x97,0x97,0x97,0x98,0x99,0x9a,0x9b,0x9b,0x9a,0x9a,0x9a,0x9a,0x9a, + 0x9b,0x9b,0x9b,0x9a,0x9a,0x9a,0x9a,0x9a,0x9a,0x9b,0x9c,0x9c,0x9c,0x9c,0x9c, + 0x9c,0x9c,0x9d,0x9d,0x9d,0x9d,0x9d,0x9d,0x9d,0x9d,0x9c,0x9c,0x9c,0x9e,0x9f, + 0xa0,0x9f,0x9f,0x9f,0xa0,0xa0,0xa0,0xa0,0xa0,0xa0,0xa0,0xa0,0xa0,0xa0,0xa0, + 0xa1,0xa1,0xa1,0xa2,0xa2,0xa2,0xa1,0xa1,0xa0,0xa0,0xa0,0xa0,0xa1,0xa2,0xa3, + 0xa3,0xa2,0xa2,0xa3,0xa3,0xa3,0xa0,0xa0,0xa2,0xa5,0xa6,0x9e,0x9e,0xa7,0xbe, + 0xae,0x2f,0x00,0x00,0x03,0x07,0x03,0x03,0x05,0x06,0x03,0x00,0x36,0xa9,0xb3, + 0xac,0xc2,0x87,0x1d,0x03,0x00,0x05,0x05,0x01,0x01,0x03,0x05,0x00,0x00,0x36, + 0x7a,0xbf,0xb5,0x79,0x28,0x00,0x00,0x00,0x00,0x01,0x01,0x00,0x00,0x00,0x00, + 0x00,0x01,0x01,0x02,0x01,0x02,0x03,0x03,0x03,0x06,0x05,0x01,0x00,0x11,0x8d, + 0xc0,0xac,0xa7,0xa5,0xa6,0xa8,0xab,0xaa,0xa9,0xa8,0xa7,0xa6,0xaa,0xab,0xa8, + 0xa6,0xa5,0xa6,0xa6,0xa3,0xa1,0xa1,0xa9,0xae,0xab,0xaa,0xaa,0xa9,0xaa,0xac, + 0xab,0xa9,0xaa,0xac,0xaa,0xaa,0xaa,0xaa,0xab,0xab,0xab,0xab,0xab,0xac,0xac, + 0xac,0xac,0xac,0xac,0xac,0xac,0xad,0xac,0xad,0xad,0xad,0xad,0xad,0xae,0xae, + 0xad,0xac,0xad,0xad,0xad,0xad,0xac,0xac,0xac,0xad,0xad,0xad,0xad,0xad,0xad, + 0xae,0xae,0xae,0xae,0xae,0xad,0xad,0xad,0xad,0xad,0xae,0xae,0xae,0xae,0xae, + 0xad,0xac,0xab,0xab,0xab,0xab,0xaa,0xaa,0xaa,0xa9,0xaa,0xaa,0xa9,0xa8,0xa7, + 0xa7,0xa7,0xc8,0x4f,0x4f,0x52,0x53,0x54,0x53,0x53,0x51,0x50,0x51,0x53,0x53, + 0x55,0x56,0x57,0x57,0x57,0x57,0x57,0x57,0x57,0x58,0x57,0x57,0x57,0x5a,0x5a, + 0x58,0x59,0x5b,0x5c,0x5c,0x5b,0x5b,0x5c,0x5e,0x5e,0x5e,0x5e,0x5c,0x5e,0x5f, + 0x61,0x62,0x62,0x62,0x62,0x62,0x62,0x63,0x63,0x63,0x62,0x62,0x62,0x62,0x62, + 0x63,0x64,0x65,0x65,0x65,0x65,0x65,0x65,0x66,0x67,0x68,0x67,0x66,0x66,0x66, + 0x66,0x67,0x68,0x68,0x69,0x69,0x69,0x69,0x6a,0x6b,0x6c,0x6c,0x6b,0x6a,0x69, + 0x69,0x6b,0x6d,0x6d,0x6d,0x6d,0x70,0x71,0x71,0x71,0x71,0x71,0x71,0x71,0x71, + 0x72,0x73,0x74,0x74,0x74,0x74,0x74,0x74,0x75,0x76,0x76,0x77,0x77,0x77,0x77, + 0x76,0x76,0x77,0x78,0x78,0x77,0x77,0x78,0x78,0x78,0x79,0x79,0x7a,0x7a,0x7a, + 0x7b,0x7c,0x7c,0x7c,0x7c,0x7c,0x7c,0x7d,0x7d,0x7d,0x7d,0x7e,0x7e,0x7e,0x7f, + 0x80,0x7f,0x7f,0x7f,0x80,0x80,0x7f,0x7f,0x7e,0x7e,0x7f,0x7f,0x81,0x82,0x82, + 0x82,0x82,0x82,0x82,0x83,0x83,0x84,0x85,0x85,0x85,0x85,0x85,0x86,0x86,0x86, + 0x86,0x86,0x87,0x87,0x87,0x87,0x87,0x88,0x88,0x89,0x89,0x89,0x8a,0x8a,0x8a, + 0x8a,0x8a,0x8b,0x8b,0x8c,0x8c,0x8c,0x8c,0x8c,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d, + 0x8d,0x8d,0x8e,0x8f,0x8f,0x90,0x90,0x90,0x90,0x90,0x91,0x91,0x91,0x91,0x90, + 0x91,0x91,0x91,0x91,0x91,0x91,0x92,0x92,0x92,0x91,0x92,0x92,0x94,0x95,0x95, + 0x95,0x94,0x95,0x95,0x95,0x95,0x95,0x95,0x95,0x95,0x95,0x95,0x96,0x96,0x96, + 0x97,0x98,0x98,0x98,0x98,0x98,0x98,0x98,0x99,0x9a,0x9b,0x9b,0x9a,0x9a,0x9a, + 0x9a,0x9a,0x9b,0x9b,0x9b,0x9b,0x9b,0x9b,0x9b,0x9b,0x9b,0x9c,0x9c,0x9c,0x9c, + 0x9d,0x9d,0x9d,0x9e,0x9e,0x9e,0x9e,0x9e,0x9e,0x9e,0x9e,0x9e,0x9d,0x9e,0x9f, + 0x9f,0xa0,0xa0,0x9f,0x9f,0xa0,0xa0,0xa0,0xa0,0xa0,0xa0,0xa0,0xa0,0xa1,0xa1, + 0xa1,0xa2,0xa2,0xa2,0xa2,0xa2,0xa2,0xa2,0xa2,0xa2,0xa1,0xa1,0xa0,0xa1,0xa2, + 0xa3,0xa3,0xa3,0xa3,0xa3,0xa6,0xa6,0xa3,0x9f,0x9e,0xa1,0xa7,0xa9,0xa2,0x9f, + 0xa2,0xbd,0xb5,0x3a,0x00,0x00,0x00,0x02,0x03,0x03,0x04,0x07,0x05,0x00,0x2f, + 0x95,0xaf,0xb4,0xbd,0x81,0x20,0x03,0x00,0x07,0x07,0x02,0x02,0x03,0x03,0x00, + 0x00,0x2f,0x70,0xbe,0xb9,0x7c,0x28,0x00,0x02,0x02,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x01,0x01,0x02,0x03,0x03,0x03,0x04,0x04,0x03,0x03,0x03,0x00, + 0x0c,0x76,0xae,0xb1,0xaa,0xa3,0xa7,0xaa,0xac,0xab,0xaa,0xa7,0xa6,0xa4,0xaa, + 0xae,0xab,0xa7,0xa5,0xa8,0xab,0xaa,0xa5,0xa0,0xa7,0xad,0xad,0xab,0xaa,0xa9, + 0xaa,0xae,0xab,0xa7,0xab,0xad,0xab,0xaa,0xaa,0xaa,0xaa,0xab,0xab,0xab,0xac, + 0xad,0xad,0xad,0xad,0xac,0xac,0xac,0xad,0xad,0xad,0xad,0xad,0xad,0xad,0xad, + 0xad,0xad,0xad,0xad,0xae,0xae,0xae,0xae,0xad,0xad,0xad,0xae,0xae,0xae,0xae, + 0xae,0xae,0xae,0xae,0xae,0xae,0xae,0xae,0xae,0xae,0xae,0xae,0xae,0xae,0xae, + 0xad,0xad,0xab,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xa9,0xa9,0xa9,0xa8,0xa8, + 0xa7,0xa7,0xa7,0xa7,0xc8,0x50,0x50,0x52,0x53,0x53,0x53,0x52,0x52,0x52,0x53, + 0x53,0x54,0x54,0x55,0x56,0x57,0x57,0x57,0x57,0x57,0x58,0x59,0x58,0x58,0x59, + 0x5a,0x5a,0x59,0x59,0x5a,0x5b,0x5b,0x5c,0x5c,0x5d,0x5e,0x5e,0x5e,0x5e,0x5e, + 0x5e,0x5f,0x61,0x62,0x62,0x62,0x62,0x62,0x63,0x64,0x64,0x64,0x63,0x63,0x63, + 0x63,0x63,0x64,0x65,0x65,0x66,0x67,0x67,0x67,0x67,0x66,0x68,0x6a,0x6a,0x69, + 0x69,0x69,0x69,0x69,0x69,0x6b,0x6c,0x6c,0x6c,0x6c,0x6c,0x6d,0x6d,0x6e,0x6d, + 0x6c,0x6c,0x6d,0x6e,0x6f,0x70,0x70,0x70,0x70,0x70,0x72,0x72,0x73,0x72,0x72, + 0x71,0x71,0x72,0x73,0x74,0x74,0x74,0x73,0x74,0x75,0x76,0x76,0x77,0x77,0x77, + 0x77,0x77,0x77,0x76,0x78,0x79,0x79,0x78,0x78,0x78,0x78,0x79,0x7a,0x7a,0x7b, + 0x7b,0x7b,0x7b,0x7c,0x7c,0x7c,0x7c,0x7c,0x7d,0x7d,0x7d,0x7d,0x7e,0x7f,0x7f, + 0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x80,0x80,0x80,0x7f,0x7f,0x7f,0x7f,0x80,0x81, + 0x82,0x82,0x82,0x82,0x82,0x83,0x83,0x84,0x85,0x85,0x86,0x86,0x86,0x86,0x87, + 0x87,0x87,0x87,0x87,0x87,0x87,0x88,0x88,0x89,0x89,0x8a,0x8a,0x8a,0x8a,0x8a, + 0x8b,0x8b,0x8b,0x8b,0x8b,0x8c,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x8e,0x8e,0x8e, + 0x8f,0x8f,0x8f,0x8f,0x8f,0x90,0x90,0x90,0x91,0x91,0x91,0x91,0x91,0x91,0x91, + 0x91,0x91,0x91,0x92,0x92,0x92,0x92,0x93,0x94,0x94,0x93,0x93,0x93,0x94,0x95, + 0x95,0x95,0x95,0x95,0x95,0x96,0x96,0x96,0x97,0x97,0x96,0x96,0x96,0x97,0x97, + 0x97,0x97,0x98,0x98,0x98,0x99,0x99,0x99,0x99,0x99,0x9a,0x9b,0x9b,0x9b,0x9b, + 0x9b,0x9b,0x9b,0x9b,0x9c,0x9c,0x9c,0x9c,0x9c,0x9c,0x9c,0x9c,0x9c,0x9c,0x9d, + 0x9d,0x9d,0x9d,0x9e,0x9e,0x9e,0x9e,0x9f,0x9f,0x9f,0x9f,0xa0,0x9f,0x9f,0x9f, + 0x9f,0xa0,0xa0,0xa0,0xa0,0xa0,0xa0,0xa0,0xa1,0xa2,0xa2,0xa2,0xa2,0xa2,0xa2, + 0xa2,0xa3,0xa3,0xa3,0xa3,0xa3,0xa3,0xa3,0xa3,0xa3,0xa3,0xa3,0xa3,0xa2,0xa2, + 0xa2,0xa3,0xa3,0xa4,0xa5,0xa4,0xa4,0xa6,0xa4,0xa3,0xa3,0xa4,0xa5,0xa4,0xa3, + 0xa4,0xa3,0xa3,0xbf,0xb9,0x4b,0x0b,0x02,0x00,0x03,0x03,0x02,0x02,0x06,0x07, + 0x00,0x21,0x6f,0xa9,0xc5,0xb8,0x6d,0x07,0x00,0x01,0x04,0x04,0x02,0x02,0x02, + 0x03,0x00,0x03,0x1e,0x59,0xba,0xc2,0x8b,0x2f,0x00,0x05,0x06,0x03,0x03,0x03, + 0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x02,0x02,0x02,0x03,0x03,0x05,0x05, + 0x04,0x00,0x07,0x48,0x8a,0xbf,0xb6,0xa3,0xaa,0xac,0xa9,0xaa,0xab,0xaa,0xad, + 0xaf,0xa3,0x9b,0xa1,0xb2,0xc8,0xc8,0xc8,0xc8,0xc4,0xb5,0xac,0xa8,0xab,0xaa, + 0xaa,0xaf,0xb2,0xac,0xad,0xaf,0xae,0xad,0xac,0xac,0xab,0xab,0xab,0xac,0xac, + 0xad,0xad,0xae,0xae,0xae,0xae,0xae,0xae,0xae,0xae,0xae,0xae,0xae,0xae,0xae, + 0xae,0xae,0xae,0xae,0xae,0xae,0xae,0xae,0xae,0xad,0xad,0xad,0xad,0xae,0xae, + 0xae,0xad,0xae,0xaf,0xaf,0xae,0xae,0xae,0xae,0xae,0xad,0xad,0xad,0xad,0xac, + 0xac,0xab,0xab,0xab,0xaa,0xa9,0xa9,0xa9,0xa9,0xa9,0xa8,0xa8,0xa7,0xa7,0xa8, + 0xa7,0xa7,0xa7,0xa7,0xa7,0xa7,0xc8,0x51,0x51,0x51,0x51,0x51,0x51,0x52,0x53, + 0x53,0x54,0x54,0x54,0x53,0x54,0x56,0x57,0x57,0x57,0x57,0x57,0x58,0x59,0x59, + 0x59,0x59,0x5a,0x5b,0x5a,0x5a,0x5a,0x5a,0x5b,0x5c,0x5d,0x5d,0x5e,0x5e,0x5e, + 0x5e,0x5e,0x5f,0x60,0x61,0x61,0x61,0x62,0x62,0x62,0x63,0x64,0x64,0x64,0x63, + 0x63,0x63,0x63,0x64,0x64,0x65,0x66,0x67,0x67,0x67,0x67,0x67,0x67,0x69,0x6b, + 0x6b,0x6a,0x69,0x69,0x69,0x69,0x6a,0x6c,0x6d,0x6d,0x6d,0x6d,0x6c,0x6d,0x6e, + 0x6e,0x6e,0x6d,0x6d,0x6e,0x6f,0x70,0x70,0x70,0x70,0x70,0x71,0x72,0x73,0x73, + 0x73,0x72,0x71,0x71,0x72,0x74,0x74,0x74,0x74,0x74,0x74,0x75,0x76,0x76,0x77, + 0x77,0x77,0x77,0x77,0x78,0x78,0x78,0x7a,0x7a,0x79,0x79,0x79,0x7a,0x7a,0x7b, + 0x7b,0x7b,0x7b,0x7b,0x7c,0x7c,0x7c,0x7c,0x7c,0x7c,0x7d,0x7d,0x7d,0x7e,0x7e, + 0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x80,0x80,0x81,0x81,0x81,0x81,0x82, + 0x82,0x82,0x82,0x82,0x82,0x82,0x83,0x84,0x84,0x85,0x85,0x86,0x86,0x86,0x86, + 0x87,0x87,0x87,0x87,0x87,0x87,0x87,0x87,0x88,0x89,0x89,0x8a,0x8a,0x8a,0x8a, + 0x8a,0x8b,0x8c,0x8c,0x8c,0x8c,0x8c,0x8c,0x8d,0x8d,0x8e,0x8e,0x8e,0x8e,0x8f, + 0x8f,0x8f,0x8f,0x8f,0x8f,0x8f,0x90,0x90,0x90,0x91,0x91,0x91,0x91,0x91,0x91, + 0x91,0x91,0x91,0x91,0x92,0x93,0x94,0x94,0x94,0x94,0x94,0x95,0x95,0x95,0x95, + 0x95,0x95,0x96,0x97,0x96,0x96,0x96,0x96,0x96,0x97,0x97,0x98,0x98,0x98,0x98, + 0x98,0x98,0x98,0x98,0x98,0x99,0x9a,0x9a,0x9a,0x9a,0x99,0x99,0x9a,0x9b,0x9b, + 0x9b,0x9b,0x9b,0x9b,0x9b,0x9c,0x9c,0x9c,0x9c,0x9c,0x9c,0x9c,0x9d,0x9d,0x9d, + 0x9d,0x9e,0x9e,0x9e,0x9e,0x9e,0x9e,0x9e,0x9e,0x9f,0x9f,0x9f,0x9f,0xa0,0x9f, + 0x9f,0x9f,0xa0,0xa0,0xa0,0xa0,0xa0,0xa0,0xa0,0xa0,0xa2,0xa3,0xa3,0xa2,0xa2, + 0xa2,0xa2,0xa3,0xa3,0xa3,0xa3,0xa3,0xa3,0xa3,0xa3,0xa3,0xa3,0xa3,0xa3,0xa3, + 0xa3,0xa3,0xa3,0xa3,0xa4,0xa5,0xa5,0xa5,0xa5,0xa5,0xa4,0xa3,0xa7,0xa8,0xa7, + 0xa3,0xa2,0xa6,0xa4,0xa0,0xbb,0xbe,0x6a,0x29,0x04,0x00,0x04,0x04,0x03,0x01, + 0x03,0x05,0x00,0x16,0x4c,0x9c,0xc8,0xc1,0x73,0x07,0x00,0x01,0x02,0x02,0x01, + 0x01,0x02,0x01,0x00,0x03,0x0a,0x3e,0xb2,0xc7,0x97,0x33,0x00,0x04,0x05,0x03, + 0x03,0x02,0x01,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x02, + 0x04,0x06,0x07,0x00,0x03,0x20,0x65,0xbe,0xbc,0xa7,0xaa,0xab,0xaa,0xaa,0xab, + 0xae,0xaf,0xaf,0xa7,0xa6,0xb5,0xb1,0xa0,0x95,0x90,0x92,0xa3,0xb9,0xb4,0xac, + 0xaa,0xaa,0xab,0xaf,0xb1,0xae,0xae,0xaf,0xae,0xae,0xae,0xae,0xad,0xad,0xad, + 0xad,0xad,0xae,0xae,0xae,0xae,0xae,0xae,0xae,0xae,0xae,0xae,0xae,0xae,0xae, + 0xaf,0xae,0xae,0xae,0xae,0xae,0xae,0xae,0xae,0xae,0xae,0xae,0xad,0xad,0xae, + 0xae,0xae,0xae,0xad,0xae,0xae,0xae,0xad,0xad,0xac,0xac,0xac,0xac,0xac,0xab, + 0xab,0xaa,0xaa,0xaa,0xaa,0xaa,0xa9,0xa9,0xa9,0xa8,0xa7,0xa7,0xa7,0xa7,0xa7, + 0xa7,0xa7,0xa6,0xa6,0xa6,0xa6,0xa6,0xa7,0xc8,0x51,0x51,0x50,0x50,0x50,0x51, + 0x52,0x53,0x54,0x55,0x55,0x55,0x53,0x53,0x55,0x56,0x57,0x57,0x57,0x57,0x58, + 0x59,0x59,0x59,0x59,0x5b,0x5c,0x5a,0x5a,0x5a,0x5a,0x5b,0x5d,0x5d,0x5e,0x5e, + 0x5e,0x5e,0x5e,0x5e,0x5f,0x60,0x60,0x60,0x5f,0x60,0x60,0x62,0x62,0x63,0x64, + 0x64,0x64,0x63,0x63,0x64,0x64,0x65,0x65,0x66,0x67,0x67,0x66,0x66,0x67,0x68, + 0x69,0x69,0x69,0x69,0x69,0x69,0x69,0x69,0x69,0x6b,0x6b,0x6c,0x6d,0x6d,0x6a, + 0x6b,0x6d,0x6d,0x6e,0x6e,0x6e,0x6f,0x70,0x70,0x70,0x6f,0x6f,0x70,0x71,0x73, + 0x74,0x74,0x73,0x73,0x72,0x72,0x73,0x74,0x74,0x74,0x74,0x74,0x75,0x75,0x76, + 0x76,0x76,0x76,0x76,0x77,0x78,0x78,0x79,0x7a,0x7b,0x7b,0x7a,0x7a,0x7a,0x7b, + 0x7b,0x7b,0x7b,0x7b,0x7c,0x7d,0x7d,0x7c,0x7c,0x7c,0x7c,0x7c,0x7d,0x7d,0x7e, + 0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x80,0x81,0x81,0x82,0x82,0x82, + 0x83,0x83,0x83,0x83,0x83,0x83,0x83,0x84,0x84,0x85,0x86,0x86,0x86,0x86,0x86, + 0x86,0x86,0x87,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x89,0x89,0x89,0x8a,0x8a, + 0x8a,0x8a,0x8b,0x8c,0x8c,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x8e,0x8f,0x8f, + 0x8f,0x8f,0x90,0x90,0x90,0x90,0x90,0x90,0x91,0x91,0x91,0x91,0x91,0x91,0x91, + 0x91,0x91,0x91,0x92,0x92,0x92,0x93,0x94,0x95,0x95,0x95,0x95,0x95,0x95,0x95, + 0x95,0x95,0x96,0x97,0x97,0x98,0x98,0x98,0x97,0x97,0x97,0x97,0x98,0x98,0x98, + 0x98,0x98,0x99,0x9a,0x9a,0x9b,0x9a,0x99,0x9b,0x9b,0x9b,0x9a,0x9a,0x9a,0x9a, + 0x9b,0x9c,0x9c,0x9c,0x9b,0x9b,0x9c,0x9c,0x9c,0x9c,0x9d,0x9d,0x9d,0x9d,0x9d, + 0x9e,0x9e,0x9e,0x9f,0x9f,0x9f,0x9f,0x9f,0x9f,0x9f,0x9f,0x9f,0x9f,0x9f,0x9f, + 0x9f,0xa0,0xa0,0xa0,0xa0,0xa0,0xa0,0xa0,0xa1,0xa1,0xa1,0xa2,0xa3,0xa4,0xa3, + 0xa3,0xa3,0xa3,0xa3,0xa3,0xa3,0xa3,0xa3,0xa4,0xa4,0xa4,0xa4,0xa4,0xa3,0xa4, + 0xa4,0xa4,0xa4,0xa3,0xa3,0xa3,0xa5,0xa6,0xa6,0xa6,0xa5,0xa3,0xa3,0xa6,0xa8, + 0xa7,0xa5,0xa5,0xa6,0xa7,0xa3,0x9a,0xb4,0xc0,0x91,0x4e,0x06,0x00,0x05,0x06, + 0x04,0x01,0x00,0x01,0x02,0x0e,0x2f,0x8b,0xc8,0xc8,0x87,0x19,0x00,0x00,0x01, + 0x00,0x00,0x01,0x02,0x00,0x00,0x00,0x00,0x24,0xa7,0xc8,0xa0,0x36,0x00,0x00, + 0x02,0x00,0x00,0x00,0x02,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x01,0x04,0x0a,0x05,0x02,0x03,0x43,0xb0,0xbc,0xab,0xa8,0xaa,0xae, + 0xac,0xab,0xaf,0xad,0xa7,0xb3,0xc3,0xc8,0x9c,0x41,0x26,0x1e,0x1b,0x53,0xa3, + 0xb8,0xb7,0xac,0xaa,0xae,0xaa,0xab,0xb0,0xae,0xa9,0xac,0xae,0xae,0xae,0xae, + 0xae,0xae,0xae,0xae,0xae,0xae,0xae,0xae,0xae,0xae,0xad,0xad,0xae,0xae,0xae, + 0xae,0xae,0xae,0xae,0xae,0xae,0xae,0xae,0xae,0xaf,0xaf,0xaf,0xae,0xae,0xae, + 0xae,0xae,0xae,0xae,0xae,0xad,0xad,0xad,0xac,0xab,0xaa,0xaa,0xaa,0xab,0xab, + 0xab,0xab,0xaa,0xaa,0xaa,0xaa,0xaa,0xa9,0xa9,0xa9,0xa8,0xa8,0xa7,0xa7,0xa7, + 0xa7,0xa7,0xa7,0xa5,0xa4,0xa4,0xa4,0xa4,0xa5,0xa5,0xc8,0x50,0x50,0x50,0x50, + 0x52,0x53,0x53,0x53,0x53,0x53,0x54,0x55,0x55,0x55,0x54,0x56,0x57,0x57,0x57, + 0x57,0x58,0x59,0x59,0x58,0x58,0x5a,0x5b,0x5b,0x5b,0x5a,0x5b,0x5c,0x5d,0x5e, + 0x5e,0x5e,0x5e,0x5e,0x5e,0x5f,0x60,0x61,0x61,0x60,0x5f,0x60,0x61,0x62,0x62, + 0x63,0x64,0x65,0x65,0x64,0x64,0x64,0x65,0x65,0x66,0x67,0x66,0x66,0x65,0x66, + 0x67,0x69,0x69,0x68,0x68,0x68,0x69,0x69,0x69,0x69,0x69,0x6a,0x6b,0x6c,0x6d, + 0x6d,0x6b,0x6b,0x6d,0x6e,0x6f,0x6e,0x6f,0x70,0x70,0x70,0x70,0x6f,0x6f,0x71, + 0x73,0x74,0x74,0x74,0x74,0x73,0x73,0x74,0x74,0x75,0x75,0x75,0x75,0x75,0x76, + 0x76,0x77,0x77,0x77,0x77,0x77,0x78,0x78,0x7a,0x7b,0x7b,0x7b,0x7a,0x7a,0x7a, + 0x7b,0x7b,0x7c,0x7c,0x7c,0x7c,0x7d,0x7d,0x7d,0x7d,0x7d,0x7d,0x7d,0x7e,0x7e, + 0x7f,0x7f,0x7f,0x7f,0x7f,0x80,0x80,0x80,0x81,0x81,0x81,0x82,0x82,0x82,0x82, + 0x83,0x83,0x84,0x84,0x84,0x84,0x85,0x85,0x85,0x86,0x86,0x86,0x86,0x86,0x86, + 0x86,0x87,0x87,0x87,0x87,0x88,0x89,0x88,0x89,0x89,0x89,0x89,0x89,0x89,0x89, + 0x8a,0x8a,0x8a,0x8a,0x8b,0x8b,0x8c,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x8e,0x8e, + 0x8f,0x90,0x90,0x90,0x91,0x91,0x91,0x91,0x90,0x91,0x91,0x91,0x91,0x91,0x91, + 0x91,0x91,0x91,0x91,0x92,0x92,0x93,0x93,0x94,0x95,0x95,0x95,0x95,0x95,0x95, + 0x95,0x95,0x96,0x97,0x97,0x97,0x98,0x98,0x98,0x98,0x98,0x98,0x98,0x98,0x98, + 0x98,0x99,0x99,0x9a,0x9a,0x9b,0x9c,0x9c,0x9a,0x9a,0x9b,0x9c,0x9c,0x9c,0x9b, + 0x9b,0x9b,0x9b,0x9c,0x9c,0x9c,0x9c,0x9b,0x9c,0x9c,0x9c,0x9d,0x9e,0x9d,0x9e, + 0x9e,0x9e,0x9f,0x9f,0xa0,0xa0,0xa0,0xa0,0xa0,0xa0,0xa0,0xa0,0xa0,0xa0,0xa0, + 0xa0,0xa0,0xa0,0xa0,0xa1,0xa1,0xa1,0xa1,0xa0,0xa1,0xa2,0xa3,0xa3,0xa3,0xa4, + 0xa4,0xa3,0xa3,0xa3,0xa3,0xa3,0xa3,0xa3,0xa3,0xa4,0xa4,0xa4,0xa5,0xa5,0xa4, + 0xa4,0xa4,0xa5,0xa5,0xa4,0xa4,0xa3,0xa4,0xa5,0xa6,0xa7,0xa7,0xa6,0xa3,0xa3, + 0xa5,0xa7,0xa7,0xa4,0xa5,0xa7,0xa8,0xa3,0x9c,0xae,0xba,0xa0,0x5f,0x05,0x00, + 0x07,0x05,0x03,0x00,0x01,0x03,0x04,0x03,0x0e,0x7a,0xc8,0xb7,0x6f,0x11,0x00, + 0x00,0x00,0x00,0x03,0x03,0x02,0x01,0x01,0x00,0x00,0x1f,0xa4,0xc8,0xa6,0x39, + 0x00,0x00,0x02,0x00,0x01,0x01,0x02,0x01,0x00,0x00,0x00,0x00,0x01,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x02,0x07,0x06,0x03,0x00,0x32,0xa0,0xb8,0xb2,0xa7, + 0xa7,0xae,0xae,0xac,0xa9,0xaa,0xb0,0xb8,0xb3,0x98,0x5d,0x14,0x03,0x01,0x00, + 0x18,0x4b,0x97,0xc4,0xb5,0xaf,0xaf,0xac,0xab,0xb0,0xae,0xab,0xad,0xae,0xae, + 0xae,0xae,0xae,0xae,0xae,0xae,0xad,0xae,0xae,0xae,0xae,0xae,0xae,0xae,0xaf, + 0xaf,0xaf,0xb0,0xb0,0xb0,0xb0,0xb0,0xb0,0xaf,0xaf,0xae,0xae,0xaf,0xaf,0xae, + 0xae,0xae,0xae,0xae,0xae,0xae,0xae,0xae,0xad,0xad,0xac,0xab,0xaa,0xaa,0xaa, + 0xab,0xac,0xac,0xab,0xab,0xaa,0xaa,0xaa,0xaa,0xaa,0xa9,0xa9,0xa8,0xa7,0xa7, + 0xa7,0xa7,0xa7,0xa7,0xa7,0xa5,0xa4,0xa4,0xa5,0xa5,0xa5,0xa5,0xc8,0x4e,0x4e, + 0x50,0x51,0x53,0x53,0x53,0x53,0x53,0x53,0x53,0x54,0x57,0x56,0x54,0x56,0x57, + 0x57,0x57,0x57,0x58,0x59,0x58,0x58,0x58,0x59,0x5a,0x5c,0x5c,0x5b,0x5c,0x5c, + 0x5e,0x5e,0x5e,0x5e,0x5e,0x5e,0x5e,0x5f,0x61,0x62,0x61,0x61,0x60,0x61,0x62, + 0x62,0x63,0x64,0x65,0x65,0x65,0x65,0x64,0x65,0x65,0x66,0x67,0x67,0x65,0x65, + 0x65,0x65,0x66,0x68,0x69,0x67,0x68,0x68,0x69,0x69,0x69,0x6a,0x6b,0x6a,0x6b, + 0x6c,0x6d,0x6d,0x6d,0x6d,0x6e,0x6f,0x70,0x6f,0x70,0x70,0x70,0x70,0x70,0x70, + 0x70,0x72,0x74,0x74,0x74,0x74,0x74,0x74,0x74,0x74,0x75,0x76,0x76,0x75,0x76, + 0x76,0x77,0x78,0x78,0x78,0x78,0x78,0x78,0x78,0x79,0x7a,0x7b,0x7b,0x7b,0x7a, + 0x7a,0x7b,0x7b,0x7c,0x7d,0x7d,0x7d,0x7d,0x7d,0x7e,0x7e,0x7e,0x7e,0x7e,0x7f, + 0x7f,0x7f,0x80,0x80,0x80,0x81,0x81,0x81,0x81,0x82,0x83,0x82,0x82,0x82,0x82, + 0x82,0x83,0x84,0x84,0x84,0x84,0x84,0x85,0x86,0x86,0x86,0x86,0x86,0x86,0x87, + 0x87,0x87,0x87,0x87,0x88,0x88,0x88,0x89,0x89,0x89,0x8a,0x8a,0x8a,0x8a,0x8a, + 0x8a,0x8a,0x8a,0x8a,0x8b,0x8b,0x8b,0x8c,0x8c,0x8d,0x8d,0x8e,0x8e,0x8e,0x8e, + 0x8e,0x8e,0x8f,0x90,0x90,0x91,0x91,0x91,0x91,0x91,0x91,0x91,0x91,0x91,0x91, + 0x91,0x91,0x91,0x92,0x92,0x93,0x93,0x93,0x93,0x94,0x95,0x95,0x95,0x95,0x95, + 0x95,0x95,0x95,0x96,0x97,0x98,0x98,0x98,0x98,0x98,0x98,0x98,0x98,0x98,0x98, + 0x99,0x99,0x99,0x9a,0x9a,0x9b,0x9b,0x9c,0x9c,0x9c,0x9b,0x9a,0x9c,0x9c,0x9c, + 0x9c,0x9c,0x9b,0x9c,0x9c,0x9c,0x9c,0x9c,0x9c,0x9c,0x9c,0x9c,0x9d,0x9e,0x9e, + 0x9e,0x9e,0x9f,0x9f,0x9f,0xa0,0xa0,0xa1,0xa1,0xa0,0xa0,0xa0,0xa0,0xa0,0xa0, + 0xa0,0xa1,0xa1,0xa2,0xa2,0xa2,0xa2,0xa2,0xa2,0xa1,0xa1,0xa2,0xa3,0xa3,0xa4, + 0xa4,0xa4,0xa4,0xa3,0xa3,0xa3,0xa3,0xa3,0xa3,0xa3,0xa4,0xa4,0xa4,0xa5,0xa5, + 0xa5,0xa5,0xa4,0xa5,0xa5,0xa5,0xa5,0xa4,0xa4,0xa5,0xa6,0xa7,0xa7,0xa7,0xa6, + 0xa5,0xa4,0xa4,0xa6,0xa7,0xa4,0xa5,0xa7,0xa7,0xa5,0xa1,0xaa,0xb2,0xab,0x6e, + 0x09,0x00,0x05,0x03,0x02,0x00,0x02,0x05,0x05,0x00,0x00,0x6d,0xc0,0x99,0x53, + 0x05,0x00,0x02,0x00,0x01,0x04,0x03,0x02,0x02,0x02,0x02,0x00,0x1f,0x9f,0xc8, + 0xae,0x3c,0x00,0x00,0x02,0x01,0x03,0x03,0x01,0x00,0x00,0x00,0x00,0x01,0x01, + 0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x03,0x05,0x06,0x00,0x2a,0x95,0xb5, + 0xb8,0xa9,0xa6,0xad,0xaf,0xae,0xa4,0xad,0xbd,0xa5,0x7e,0x4c,0x22,0x02,0x00, + 0x00,0x00,0x00,0x02,0x6d,0xbd,0xbb,0xb5,0xae,0xad,0xae,0xae,0xaf,0xae,0xae, + 0xae,0xae,0xae,0xae,0xae,0xae,0xae,0xae,0xad,0xae,0xae,0xae,0xae,0xae,0xae, + 0xaf,0xb0,0xb0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb0,0xaf,0xae,0xaf, + 0xaf,0xae,0xae,0xae,0xae,0xaf,0xaf,0xaf,0xae,0xae,0xae,0xae,0xae,0xac,0xac, + 0xab,0xab,0xac,0xac,0xac,0xac,0xab,0xaa,0xaa,0xaa,0xaa,0xaa,0xa9,0xa9,0xa8, + 0xa8,0xa7,0xa7,0xa7,0xa7,0xa7,0xa7,0xa6,0xa5,0xa5,0xa6,0xa6,0xa6,0xa6,0xc8, + 0x4f,0x4f,0x50,0x50,0x51,0x53,0x53,0x53,0x54,0x53,0x54,0x55,0x56,0x56,0x55, + 0x57,0x57,0x57,0x58,0x58,0x59,0x5a,0x58,0x57,0x57,0x59,0x5a,0x5c,0x5c,0x5c, + 0x5c,0x5c,0x5e,0x5e,0x5e,0x5e,0x5e,0x5e,0x5e,0x5f,0x61,0x61,0x61,0x61,0x62, + 0x62,0x64,0x65,0x65,0x65,0x65,0x65,0x65,0x65,0x65,0x65,0x65,0x66,0x66,0x66, + 0x65,0x65,0x65,0x65,0x66,0x68,0x69,0x68,0x69,0x6a,0x6b,0x6c,0x6c,0x6d,0x6d, + 0x6d,0x6d,0x6d,0x6e,0x6e,0x6f,0x70,0x70,0x70,0x71,0x71,0x71,0x71,0x71,0x72, + 0x72,0x72,0x72,0x73,0x74,0x74,0x74,0x74,0x74,0x74,0x74,0x75,0x76,0x77,0x77, + 0x76,0x76,0x77,0x77,0x78,0x78,0x79,0x79,0x79,0x79,0x79,0x79,0x79,0x79,0x7a, + 0x7b,0x7b,0x7b,0x7b,0x7c,0x7d,0x7e,0x7f,0x7f,0x7f,0x7e,0x7f,0x7f,0x7f,0x7f, + 0x7f,0x7f,0x80,0x80,0x81,0x82,0x82,0x82,0x82,0x82,0x82,0x83,0x84,0x84,0x84, + 0x84,0x83,0x83,0x84,0x84,0x85,0x85,0x84,0x84,0x86,0x87,0x87,0x87,0x87,0x87, + 0x87,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x89,0x89,0x8a,0x8a,0x8a,0x8b,0x8b, + 0x8b,0x8b,0x8b,0x8a,0x8a,0x8b,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x8e,0x90,0x90, + 0x90,0x90,0x8f,0x8f,0x90,0x91,0x91,0x91,0x91,0x91,0x91,0x91,0x91,0x92,0x92, + 0x92,0x92,0x93,0x93,0x93,0x93,0x93,0x94,0x95,0x95,0x95,0x95,0x95,0x95,0x95, + 0x96,0x95,0x95,0x95,0x95,0x96,0x98,0x98,0x98,0x98,0x98,0x98,0x98,0x99,0x98, + 0x99,0x9a,0x9a,0x9b,0x9b,0x9b,0x9b,0x9b,0x9c,0x9c,0x9c,0x9c,0x9c,0x9c,0x9c, + 0x9c,0x9d,0x9c,0x9c,0x9c,0x9c,0x9c,0x9d,0x9d,0x9d,0x9c,0x9d,0x9d,0x9e,0x9e, + 0x9f,0xa0,0xa0,0xa0,0xa0,0xa0,0xa0,0xa0,0xa0,0xa2,0xa1,0xa1,0xa1,0xa1,0xa1, + 0xa1,0xa2,0xa2,0xa3,0xa3,0xa3,0xa3,0xa3,0xa3,0xa3,0xa2,0xa2,0xa2,0xa2,0xa3, + 0xa3,0xa4,0xa4,0xa4,0xa3,0xa3,0xa3,0xa3,0xa3,0xa4,0xa4,0xa4,0xa5,0xa5,0xa5, + 0xa5,0xa6,0xa6,0xa5,0xa5,0xa5,0xa6,0xa6,0xa5,0xa5,0xa5,0xa6,0xa7,0xa7,0xa7, + 0xa7,0xa7,0xa7,0xa3,0xa2,0xa7,0xa9,0xa7,0xa5,0xa3,0xa5,0xa7,0xaa,0xa9,0xaa, + 0xbb,0x86,0x15,0x00,0x00,0x03,0x03,0x02,0x03,0x03,0x03,0x00,0x00,0x6c,0xb8, + 0x8c,0x48,0x02,0x00,0x0a,0x06,0x02,0x00,0x00,0x01,0x00,0x01,0x03,0x00,0x1d, + 0x93,0xc7,0xb8,0x40,0x00,0x00,0x01,0x03,0x02,0x01,0x00,0x00,0x00,0x00,0x00, + 0x01,0x02,0x03,0x02,0x02,0x01,0x01,0x01,0x04,0x03,0x00,0x03,0x05,0x00,0x2a, + 0x95,0xba,0xbe,0xac,0xa5,0xa9,0xad,0xae,0xaa,0xba,0xc8,0x68,0x12,0x0b,0x0a, + 0x0a,0x03,0x02,0x0b,0x03,0x00,0x48,0x91,0xb9,0xbb,0xa7,0xac,0xb0,0xac,0xad, + 0xaf,0xac,0xab,0xae,0xae,0xae,0xae,0xae,0xae,0xae,0xae,0xae,0xae,0xae,0xae, + 0xae,0xae,0xae,0xae,0xaf,0xaf,0xaf,0xaf,0xaf,0xaf,0xaf,0xaf,0xaf,0xaf,0xb0, + 0xb1,0xb1,0xb1,0xb0,0xb0,0xb0,0xb1,0xb2,0xb2,0xb2,0xb1,0xb0,0xb0,0xb1,0xb0, + 0xaf,0xae,0xad,0xad,0xac,0xac,0xac,0xab,0xaa,0xa9,0xa9,0xa8,0xa9,0xa9,0xa9, + 0xa9,0xa8,0xa8,0xa7,0xa7,0xa7,0xa6,0xa6,0xa6,0xa5,0xa5,0xa6,0xa6,0xa7,0xa7, + 0xa7,0xc8,0x50,0x50,0x50,0x50,0x50,0x51,0x53,0x54,0x55,0x55,0x55,0x55,0x55, + 0x56,0x56,0x57,0x58,0x58,0x58,0x58,0x5a,0x5a,0x59,0x58,0x57,0x59,0x5a,0x5b, + 0x5c,0x5c,0x5c,0x5c,0x5d,0x5e,0x5e,0x5e,0x5e,0x5e,0x5e,0x5f,0x60,0x61,0x61, + 0x61,0x62,0x63,0x65,0x65,0x65,0x65,0x65,0x65,0x65,0x65,0x65,0x65,0x65,0x66, + 0x66,0x66,0x65,0x65,0x65,0x66,0x67,0x69,0x69,0x69,0x69,0x6a,0x6b,0x6c,0x6d, + 0x6d,0x6d,0x6d,0x6e,0x6e,0x6d,0x6e,0x70,0x71,0x71,0x71,0x71,0x71,0x71,0x71, + 0x72,0x72,0x73,0x74,0x74,0x74,0x74,0x74,0x74,0x74,0x74,0x74,0x74,0x75,0x76, + 0x77,0x77,0x77,0x77,0x77,0x78,0x78,0x79,0x7a,0x7a,0x7a,0x79,0x79,0x79,0x79, + 0x79,0x79,0x7b,0x7b,0x7b,0x7c,0x7d,0x7e,0x7f,0x7f,0x7f,0x7f,0x7f,0x80,0x81, + 0x80,0x7f,0x80,0x80,0x81,0x82,0x82,0x82,0x82,0x82,0x82,0x82,0x82,0x83,0x84, + 0x84,0x84,0x84,0x83,0x83,0x84,0x85,0x86,0x86,0x85,0x85,0x86,0x87,0x88,0x87, + 0x87,0x87,0x87,0x88,0x88,0x88,0x88,0x88,0x88,0x89,0x8a,0x8a,0x8a,0x8a,0x8b, + 0x8b,0x8b,0x8c,0x8b,0x8c,0x8c,0x8c,0x8c,0x8d,0x8e,0x8e,0x8e,0x8e,0x8e,0x8f, + 0x90,0x91,0x90,0x90,0x90,0x90,0x90,0x91,0x91,0x91,0x91,0x91,0x91,0x91,0x92, + 0x92,0x92,0x93,0x93,0x94,0x95,0x95,0x95,0x95,0x95,0x95,0x95,0x95,0x95,0x95, + 0x95,0x96,0x96,0x96,0x95,0x95,0x96,0x97,0x98,0x98,0x98,0x98,0x98,0x98,0x99, + 0x99,0x9a,0x9a,0x9a,0x9b,0x9c,0x9b,0x9b,0x9c,0x9c,0x9c,0x9c,0x9c,0x9c,0x9c, + 0x9c,0x9c,0x9d,0x9d,0x9d,0x9d,0x9d,0x9d,0x9e,0x9f,0x9f,0x9e,0x9e,0x9e,0x9e, + 0x9f,0xa0,0xa0,0xa0,0xa0,0xa0,0xa0,0xa0,0xa1,0xa1,0xa1,0xa2,0xa2,0xa2,0xa1, + 0xa1,0xa1,0xa2,0xa3,0xa3,0xa3,0xa4,0xa4,0xa3,0xa3,0xa3,0xa3,0xa3,0xa3,0xa2, + 0xa2,0xa3,0xa3,0xa4,0xa4,0xa4,0xa3,0xa3,0xa4,0xa4,0xa4,0xa5,0xa5,0xa5,0xa5, + 0xa6,0xa6,0xa6,0xa7,0xa7,0xa6,0xa6,0xa6,0xa6,0xa6,0xa6,0xa6,0xa6,0xa7,0xa7, + 0xa7,0xa7,0xa7,0xa7,0xa7,0xa5,0xa3,0xa7,0xa9,0xa8,0xa7,0xa6,0xa4,0xa6,0xaa, + 0xa7,0xa9,0xc4,0x95,0x27,0x04,0x00,0x03,0x04,0x02,0x03,0x03,0x02,0x00,0x00, + 0x65,0xa6,0x6e,0x32,0x00,0x01,0x09,0x06,0x03,0x01,0x01,0x01,0x00,0x02,0x04, + 0x00,0x19,0x80,0xbd,0xc0,0x44,0x00,0x00,0x01,0x03,0x02,0x01,0x00,0x00,0x00, + 0x00,0x00,0x01,0x02,0x03,0x02,0x02,0x01,0x00,0x01,0x03,0x03,0x01,0x03,0x05, + 0x00,0x28,0x8a,0xb8,0xc4,0xae,0xa5,0xaa,0xae,0xae,0xaa,0xbb,0xc8,0x80,0x30, + 0x04,0x00,0x0a,0x07,0x05,0x0c,0x04,0x00,0x2c,0x6d,0xb8,0xc0,0xa4,0xab,0xb1, + 0xae,0xae,0xae,0xaf,0xaf,0xaf,0xaf,0xaf,0xaf,0xaf,0xaf,0xaf,0xb0,0xb0,0xb0, + 0xb0,0xb0,0xb0,0xb0,0xb0,0xb0,0xb0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1, + 0xb1,0xb2,0xb3,0xb3,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb3,0xb2,0xb2,0xb1,0xb1, + 0xb2,0xb1,0xaf,0xae,0xad,0xac,0xac,0xab,0xaa,0xaa,0xa9,0xa7,0xa7,0xa8,0xa8, + 0xa9,0xa9,0xa9,0xa8,0xa7,0xa7,0xa7,0xa7,0xa7,0xa7,0xa6,0xa5,0xa4,0xa5,0xa6, + 0xa7,0xa7,0xa7,0xc8,0x52,0x52,0x50,0x4f,0x4f,0x50,0x52,0x54,0x56,0x56,0x56, + 0x55,0x54,0x55,0x57,0x57,0x58,0x59,0x59,0x59,0x5a,0x5a,0x59,0x58,0x58,0x5a, + 0x5a,0x5b,0x5b,0x5c,0x5c,0x5c,0x5d,0x5d,0x5e,0x5e,0x5e,0x5e,0x5e,0x5e,0x5f, + 0x60,0x60,0x61,0x62,0x63,0x65,0x65,0x65,0x65,0x64,0x64,0x64,0x65,0x66,0x65, + 0x65,0x65,0x66,0x66,0x66,0x66,0x67,0x67,0x68,0x69,0x69,0x6a,0x6a,0x6a,0x6a, + 0x6b,0x6c,0x6d,0x6d,0x6e,0x6e,0x6d,0x6d,0x6d,0x6f,0x70,0x70,0x70,0x70,0x70, + 0x70,0x71,0x72,0x72,0x73,0x74,0x74,0x74,0x74,0x74,0x74,0x75,0x74,0x74,0x75, + 0x76,0x77,0x78,0x78,0x78,0x77,0x77,0x78,0x78,0x79,0x7a,0x7a,0x7a,0x7a,0x7a, + 0x7a,0x7a,0x79,0x7a,0x7b,0x7c,0x7c,0x7d,0x7e,0x7f,0x7f,0x7f,0x7f,0x7f,0x80, + 0x81,0x82,0x80,0x80,0x81,0x81,0x82,0x82,0x82,0x83,0x83,0x83,0x83,0x83,0x83, + 0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x85,0x86,0x86,0x86,0x86,0x86,0x86,0x88, + 0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x89,0x89,0x89,0x89,0x89,0x8a,0x8b,0x8b, + 0x8b,0x8b,0x8b,0x8c,0x8c,0x8c,0x8c,0x8d,0x8d,0x8d,0x8f,0x8f,0x8f,0x8f,0x8f, + 0x90,0x90,0x91,0x91,0x91,0x91,0x91,0x91,0x91,0x91,0x91,0x91,0x92,0x92,0x92, + 0x92,0x92,0x93,0x93,0x93,0x94,0x94,0x95,0x95,0x95,0x95,0x95,0x96,0x96,0x96, + 0x95,0x95,0x95,0x96,0x96,0x97,0x96,0x96,0x96,0x98,0x99,0x99,0x99,0x99,0x99, + 0x99,0x99,0x9a,0x9b,0x9b,0x9b,0x9c,0x9c,0x9c,0x9c,0x9c,0x9c,0x9c,0x9d,0x9d, + 0x9d,0x9d,0x9d,0x9e,0x9e,0x9e,0x9e,0x9e,0x9f,0x9f,0xa0,0xa0,0xa0,0x9f,0x9f, + 0x9f,0xa0,0xa0,0xa0,0xa0,0xa1,0xa1,0xa1,0xa2,0xa2,0xa2,0xa3,0xa3,0xa3,0xa3, + 0xa3,0xa2,0xa2,0xa2,0xa2,0xa3,0xa3,0xa3,0xa4,0xa4,0xa4,0xa3,0xa3,0xa3,0xa3, + 0xa3,0xa3,0xa3,0xa3,0xa4,0xa4,0xa5,0xa5,0xa4,0xa4,0xa5,0xa5,0xa5,0xa6,0xa6, + 0xa6,0xa7,0xa7,0xa7,0xa7,0xa7,0xa7,0xa7,0xa7,0xa7,0xa7,0xa7,0xa7,0xa7,0xa7, + 0xa7,0xa8,0xa8,0xa8,0xa7,0xa7,0xa7,0xa7,0xa8,0xa7,0xa7,0xa9,0xab,0xab,0xa6, + 0xa3,0xa4,0xa5,0xac,0xc6,0x9c,0x38,0x0e,0x00,0x03,0x03,0x00,0x03,0x04,0x01, + 0x00,0x00,0x5c,0x92,0x4c,0x1a,0x01,0x00,0x03,0x03,0x03,0x04,0x03,0x03,0x02, + 0x03,0x04,0x00,0x13,0x68,0xae,0xc6,0x47,0x00,0x00,0x02,0x03,0x03,0x02,0x01, + 0x00,0x00,0x00,0x00,0x02,0x03,0x03,0x02,0x01,0x00,0x00,0x00,0x00,0x02,0x05, + 0x07,0x06,0x00,0x25,0x78,0xb0,0xc8,0xad,0xa5,0xaf,0xb0,0xae,0xa9,0xb3,0xc5, + 0xc8,0x9c,0x22,0x00,0x04,0x07,0x07,0x05,0x00,0x00,0x18,0x52,0xb5,0xc4,0xa6, + 0xaa,0xb1,0xb2,0xb0,0xae,0xb4,0xb5,0xb1,0xaf,0xb0,0xb1,0xb1,0xb1,0xb1,0xb1, + 0xb1,0xb1,0xb1,0xb1,0xb1,0xb2,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb4,0xb4,0xb3, + 0xb3,0xb3,0xb3,0xb4,0xb4,0xb4,0xb4,0xb3,0xb3,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2, + 0xb1,0xb0,0xae,0xae,0xad,0xac,0xab,0xaa,0xaa,0xaa,0xa9,0xa8,0xa7,0xa7,0xa7, + 0xa8,0xa8,0xa8,0xa9,0xa9,0xa8,0xa7,0xa7,0xa7,0xa7,0xa7,0xa7,0xa7,0xa5,0xa4, + 0xa5,0xa6,0xa7,0xa7,0xa7,0xc8,0x51,0x51,0x50,0x50,0x50,0x52,0x53,0x54,0x54, + 0x54,0x54,0x54,0x55,0x56,0x56,0x57,0x58,0x58,0x59,0x5a,0x5a,0x5b,0x5a,0x59, + 0x58,0x5a,0x5b,0x5b,0x5b,0x5c,0x5c,0x5d,0x5d,0x5d,0x5e,0x5e,0x5f,0x5f,0x5f, + 0x5e,0x60,0x61,0x60,0x60,0x61,0x62,0x64,0x65,0x64,0x64,0x64,0x64,0x64,0x66, + 0x67,0x66,0x65,0x65,0x65,0x66,0x67,0x68,0x68,0x69,0x69,0x69,0x6b,0x6c,0x6c, + 0x6b,0x6a,0x6b,0x6c,0x6d,0x6f,0x70,0x6f,0x6d,0x6d,0x6d,0x6e,0x6e,0x6e,0x6f, + 0x70,0x70,0x72,0x73,0x73,0x73,0x74,0x74,0x75,0x74,0x74,0x75,0x76,0x77,0x76, + 0x76,0x76,0x77,0x78,0x78,0x79,0x79,0x78,0x78,0x78,0x78,0x79,0x79,0x7a,0x7a, + 0x7b,0x7b,0x7b,0x7b,0x7b,0x7b,0x7c,0x7c,0x7c,0x7d,0x7d,0x7e,0x7e,0x7e,0x7f, + 0x7f,0x80,0x81,0x82,0x81,0x81,0x82,0x82,0x82,0x83,0x83,0x84,0x84,0x84,0x84, + 0x84,0x84,0x85,0x86,0x86,0x86,0x86,0x85,0x85,0x86,0x86,0x87,0x87,0x86,0x86, + 0x87,0x8a,0x8a,0x89,0x89,0x89,0x89,0x89,0x89,0x8a,0x8a,0x8a,0x8a,0x8a,0x8b, + 0x8b,0x8b,0x8b,0x8b,0x8b,0x8b,0x8b,0x8c,0x8c,0x8d,0x8d,0x8e,0x8f,0x90,0x90, + 0x90,0x90,0x90,0x91,0x91,0x91,0x91,0x91,0x91,0x91,0x91,0x91,0x91,0x91,0x92, + 0x92,0x92,0x92,0x92,0x93,0x93,0x94,0x94,0x94,0x95,0x95,0x95,0x95,0x96,0x97, + 0x97,0x96,0x95,0x95,0x95,0x96,0x97,0x98,0x98,0x97,0x98,0x98,0x9a,0x9b,0x9a, + 0x9a,0x99,0x99,0x9a,0x9b,0x9b,0x9a,0x9b,0x9b,0x9c,0x9c,0x9c,0x9d,0x9d,0x9d, + 0x9e,0x9e,0x9e,0x9e,0x9e,0x9f,0x9f,0x9e,0x9e,0x9f,0xa0,0xa0,0xa0,0xa0,0xa0, + 0xa0,0xa0,0xa0,0xa0,0xa0,0xa1,0xa1,0xa2,0xa2,0xa2,0xa3,0xa3,0xa3,0xa3,0xa3, + 0xa3,0xa3,0xa3,0xa3,0xa3,0xa3,0xa3,0xa3,0xa3,0xa3,0xa4,0xa5,0xa5,0xa3,0xa3, + 0xa4,0xa5,0xa5,0xa4,0xa4,0xa4,0xa5,0xa6,0xa7,0xa7,0xa6,0xa6,0xa6,0xa6,0xa6, + 0xa7,0xa7,0xa7,0xa7,0xa7,0xa7,0xa7,0xa8,0xa8,0xa8,0xa7,0xa7,0xa7,0xa7,0xa7, + 0xa7,0xa7,0xa8,0xa9,0xa9,0xa9,0xa8,0xa8,0xa8,0xa9,0xaa,0xa9,0xa9,0xa9,0xaa, + 0xaa,0xa9,0xa9,0xa9,0xa3,0xa5,0xc8,0xa2,0x3d,0x10,0x00,0x04,0x06,0x02,0x01, + 0x01,0x01,0x00,0x00,0x63,0xa0,0x5a,0x24,0x00,0x01,0x07,0x02,0x00,0x02,0x03, + 0x03,0x00,0x01,0x03,0x00,0x11,0x53,0x9e,0xc3,0x46,0x00,0x01,0x03,0x01,0x03, + 0x03,0x01,0x00,0x00,0x00,0x00,0x02,0x03,0x03,0x03,0x02,0x01,0x00,0x00,0x00, + 0x00,0x04,0x07,0x07,0x00,0x1b,0x61,0xa3,0xc8,0xaf,0xa7,0xb0,0xb0,0xae,0xaf, + 0xb4,0xb5,0x8d,0x53,0x11,0x00,0x04,0x03,0x03,0x04,0x02,0x00,0x00,0x31,0xaf, + 0xc8,0xb2,0xae,0xae,0xb2,0xb2,0xaf,0xb2,0xb3,0xb2,0xb1,0xb1,0xb2,0xb2,0xb2, + 0xb2,0xb2,0xb2,0xb2,0xb2,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1, + 0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb0,0xaf,0xae,0xae,0xae,0xae,0xad, + 0xac,0xaa,0xa9,0xa8,0xa9,0xa8,0xa7,0xa7,0xa7,0xa7,0xa8,0xa8,0xa8,0xa8,0xa8, + 0xa8,0xa8,0xa8,0xa8,0xa9,0xa9,0xaa,0xa9,0xa9,0xa8,0xa8,0xa8,0xa8,0xa9,0xa9, + 0xa7,0xa7,0xa7,0xa8,0xaa,0xaa,0xaa,0xc8,0x50,0x50,0x50,0x51,0x52,0x53,0x53, + 0x53,0x53,0x53,0x53,0x54,0x57,0x57,0x56,0x57,0x57,0x57,0x58,0x5a,0x5a,0x5b, + 0x5a,0x5a,0x59,0x5a,0x5b,0x5b,0x5c,0x5c,0x5d,0x5d,0x5d,0x5d,0x5e,0x5f,0x60, + 0x60,0x60,0x5f,0x60,0x61,0x60,0x60,0x61,0x62,0x64,0x64,0x63,0x63,0x63,0x64, + 0x65,0x66,0x68,0x66,0x65,0x65,0x65,0x65,0x67,0x69,0x69,0x69,0x6a,0x69,0x6b, + 0x6d,0x6d,0x6c,0x6b,0x6c,0x6d,0x6e,0x70,0x70,0x70,0x6e,0x6d,0x6d,0x6d,0x6e, + 0x6e,0x70,0x70,0x72,0x73,0x74,0x74,0x74,0x74,0x75,0x76,0x75,0x74,0x75,0x77, + 0x78,0x77,0x77,0x77,0x77,0x78,0x78,0x79,0x7a,0x7a,0x79,0x78,0x78,0x79,0x7a, + 0x7a,0x7b,0x7b,0x7c,0x7d,0x7d,0x7d,0x7d,0x7c,0x7c,0x7c,0x7d,0x7e,0x7e,0x7e, + 0x7e,0x7f,0x7f,0x80,0x82,0x82,0x82,0x82,0x82,0x83,0x83,0x84,0x84,0x84,0x85, + 0x85,0x85,0x85,0x85,0x86,0x87,0x86,0x86,0x86,0x86,0x86,0x86,0x87,0x88,0x88, + 0x87,0x86,0x88,0x8a,0x8a,0x8a,0x8a,0x8a,0x8a,0x8a,0x8a,0x8a,0x8a,0x8a,0x8a, + 0x8a,0x8b,0x8b,0x8b,0x8b,0x8b,0x8b,0x8b,0x8b,0x8c,0x8d,0x8d,0x8e,0x8e,0x90, + 0x91,0x91,0x91,0x91,0x91,0x91,0x91,0x91,0x91,0x91,0x92,0x92,0x91,0x91,0x91, + 0x92,0x92,0x92,0x92,0x92,0x93,0x93,0x94,0x94,0x94,0x95,0x95,0x95,0x95,0x95, + 0x96,0x97,0x97,0x97,0x97,0x96,0x97,0x97,0x98,0x98,0x98,0x98,0x98,0x99,0x9b, + 0x9b,0x9b,0x9a,0x9a,0x9a,0x9b,0x9c,0x9b,0x9a,0x9b,0x9c,0x9c,0x9c,0x9c,0x9d, + 0x9e,0x9e,0x9f,0x9f,0x9f,0x9f,0x9f,0x9f,0x9f,0x9f,0x9f,0xa0,0xa0,0xa1,0xa1, + 0xa1,0xa1,0xa0,0xa0,0xa0,0xa1,0xa2,0xa2,0xa2,0xa2,0xa3,0xa3,0xa3,0xa3,0xa3, + 0xa3,0xa3,0xa4,0xa4,0xa4,0xa3,0xa3,0xa3,0xa3,0xa3,0xa3,0xa3,0xa4,0xa5,0xa5, + 0xa4,0xa4,0xa6,0xa6,0xa6,0xa5,0xa5,0xa5,0xa6,0xa7,0xa7,0xa7,0xa7,0xa7,0xa7, + 0xa7,0xa7,0xa7,0xa7,0xa7,0xa8,0xa8,0xa8,0xa8,0xa8,0xa9,0xa8,0xa7,0xa7,0xa7, + 0xa7,0xa7,0xa7,0xa8,0xa9,0xaa,0xaa,0xa9,0xa8,0xa8,0xa9,0xaa,0xaa,0xaa,0xaa, + 0xa9,0xa8,0xa8,0xac,0xae,0xac,0xa2,0xa0,0xc7,0xa7,0x4a,0x16,0x00,0x04,0x07, + 0x03,0x00,0x00,0x01,0x00,0x00,0x59,0x92,0x62,0x2d,0x00,0x03,0x0a,0x02,0x00, + 0x00,0x02,0x03,0x00,0x00,0x01,0x00,0x0e,0x40,0x8d,0xbe,0x45,0x00,0x02,0x03, + 0x01,0x03,0x03,0x00,0x00,0x00,0x00,0x00,0x02,0x03,0x03,0x03,0x02,0x01,0x00, + 0x00,0x00,0x00,0x03,0x07,0x08,0x00,0x12,0x4c,0x98,0xc8,0xb1,0xa7,0xb0,0xb0, + 0xb0,0xb1,0xb6,0xb0,0x54,0x07,0x00,0x00,0x05,0x01,0x00,0x04,0x04,0x02,0x00, + 0x19,0x9a,0xc7,0xbd,0xb2,0xac,0xb2,0xb2,0xb0,0xb0,0xb1,0xb2,0xb2,0xb2,0xb2, + 0xb2,0xb2,0xb1,0xb1,0xb1,0xb1,0xb0,0xb0,0xaf,0xae,0xae,0xae,0xae,0xae,0xae, + 0xad,0xad,0xac,0xad,0xad,0xad,0xad,0xad,0xad,0xac,0xab,0xaa,0xaa,0xa9,0xa9, + 0xa9,0xa8,0xa7,0xa6,0xa5,0xa5,0xa6,0xa6,0xa6,0xa6,0xa7,0xa7,0xa8,0xa9,0xa9, + 0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xab,0xab,0xab,0xaa,0xaa,0xaa,0xaa,0xaa, + 0xab,0xab,0xaa,0xaa,0xac,0xad,0xae,0xae,0xad,0xc8,0x4f,0x4f,0x50,0x51,0x53, + 0x53,0x53,0x53,0x53,0x53,0x53,0x55,0x56,0x57,0x56,0x57,0x57,0x57,0x57,0x58, + 0x5a,0x5b,0x5b,0x5a,0x5a,0x5b,0x5c,0x5d,0x5e,0x5e,0x5e,0x5e,0x5e,0x5e,0x5f, + 0x60,0x61,0x61,0x60,0x60,0x5f,0x5f,0x60,0x62,0x63,0x64,0x65,0x64,0x63,0x62, + 0x63,0x63,0x64,0x66,0x68,0x68,0x67,0x67,0x66,0x66,0x67,0x68,0x69,0x69,0x69, + 0x68,0x69,0x6d,0x6d,0x6d,0x6c,0x6d,0x6d,0x6e,0x6f,0x70,0x70,0x70,0x6f,0x6f, + 0x6f,0x70,0x70,0x72,0x73,0x74,0x74,0x73,0x73,0x73,0x74,0x74,0x75,0x74,0x74, + 0x74,0x74,0x75,0x75,0x75,0x76,0x77,0x77,0x77,0x77,0x77,0x79,0x7b,0x79,0x78, + 0x78,0x7b,0x7c,0x7d,0x7c,0x7b,0x7b,0x7b,0x7d,0x7e,0x7d,0x7e,0x7f,0x7f,0x7f, + 0x7f,0x7f,0x7f,0x80,0x81,0x82,0x82,0x83,0x83,0x83,0x83,0x83,0x84,0x85,0x85, + 0x86,0x86,0x86,0x86,0x86,0x86,0x87,0x88,0x88,0x88,0x88,0x87,0x87,0x87,0x89, + 0x8a,0x8a,0x89,0x88,0x89,0x89,0x8a,0x8a,0x8a,0x8a,0x8a,0x8a,0x8a,0x8a,0x8a, + 0x8a,0x8a,0x8a,0x8c,0x8c,0x8c,0x8c,0x8d,0x8c,0x8d,0x8d,0x8d,0x8e,0x8e,0x8e, + 0x8e,0x8f,0x91,0x91,0x91,0x92,0x92,0x91,0x91,0x91,0x91,0x91,0x92,0x94,0x94, + 0x94,0x93,0x93,0x93,0x94,0x94,0x94,0x94,0x95,0x95,0x95,0x95,0x95,0x95,0x95, + 0x96,0x96,0x97,0x98,0x98,0x98,0x98,0x98,0x98,0x99,0x99,0x98,0x98,0x98,0x98, + 0x99,0x9a,0x9b,0x9b,0x9b,0x9c,0x9c,0x9c,0x9c,0x9c,0x9c,0x9c,0x9c,0x9d,0x9d, + 0x9d,0x9d,0x9e,0x9e,0x9e,0x9e,0x9f,0x9f,0x9f,0xa0,0xa0,0xa0,0xa0,0xa1,0xa1, + 0xa1,0xa2,0xa2,0xa2,0xa2,0xa2,0xa2,0xa2,0xa3,0xa3,0xa3,0xa3,0xa3,0xa3,0xa3, + 0xa3,0xa3,0xa3,0xa4,0xa5,0xa4,0xa3,0xa4,0xa4,0xa5,0xa5,0xa4,0xa4,0xa4,0xa5, + 0xa4,0xa3,0xa5,0xa7,0xa8,0xa7,0xa5,0xa3,0xa3,0xa6,0xa7,0xa7,0xa7,0xa7,0xa7, + 0xa8,0xa8,0xa8,0xa7,0xa8,0xa8,0xa8,0xa9,0xa9,0xaa,0xa9,0xa9,0xa8,0xa8,0xa9, + 0xa9,0xa9,0xa9,0xa9,0xa9,0xa9,0xaa,0xaa,0xaa,0xaa,0xaa,0xa9,0xa9,0xaa,0xab, + 0xa9,0xa7,0xa9,0xaa,0xaa,0xac,0xab,0xa7,0xa3,0xa7,0xc3,0xae,0x68,0x28,0x00, + 0x02,0x03,0x02,0x02,0x02,0x02,0x00,0x01,0x26,0x43,0x41,0x27,0x01,0x05,0x0a, + 0x02,0x00,0x00,0x03,0x05,0x02,0x00,0x00,0x00,0x0a,0x2a,0x7b,0xbc,0x47,0x00, + 0x00,0x03,0x06,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x02,0x02,0x01, + 0x01,0x00,0x00,0x02,0x02,0x02,0x06,0x07,0x00,0x0e,0x3d,0x91,0xc8,0xaf,0xa7, + 0xb4,0xb4,0xaf,0xa7,0xb6,0xc4,0x62,0x0a,0x01,0x01,0x05,0x03,0x01,0x04,0x06, + 0x06,0x00,0x12,0x69,0xa3,0xc1,0xb7,0xae,0xb3,0xb3,0xb1,0xb2,0xb2,0xb4,0xb4, + 0xb2,0xb1,0xaf,0xae,0xae,0xae,0xae,0xae,0xad,0xad,0xac,0xab,0xaa,0xaa,0xaa, + 0xa9,0xa9,0xa9,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa9,0xa9,0xa9,0xa9,0xa8,0xa7, + 0xa7,0xa7,0xa7,0xa9,0xa9,0xaa,0xaa,0xab,0xab,0xab,0xaa,0xaa,0xaa,0xaa,0xaa, + 0xab,0xab,0xac,0xad,0xad,0xae,0xae,0xae,0xae,0xae,0xae,0xae,0xae,0xae,0xae, + 0xae,0xae,0xaf,0xb0,0xaf,0xb0,0xb2,0xb3,0xb2,0xb0,0xae,0xc8,0x4f,0x50,0x50, + 0x52,0x53,0x53,0x53,0x54,0x54,0x55,0x56,0x57,0x58,0x57,0x56,0x57,0x57,0x57, + 0x57,0x57,0x59,0x5a,0x5b,0x5a,0x5a,0x5b,0x5c,0x5d,0x5d,0x5d,0x5e,0x5e,0x5e, + 0x5e,0x5f,0x60,0x61,0x61,0x61,0x61,0x60,0x60,0x61,0x62,0x63,0x64,0x65,0x64, + 0x63,0x63,0x63,0x64,0x65,0x66,0x68,0x68,0x68,0x67,0x67,0x67,0x68,0x69,0x69, + 0x69,0x69,0x69,0x69,0x6d,0x6d,0x6d,0x6d,0x6d,0x6e,0x6f,0x6f,0x70,0x70,0x70, + 0x70,0x70,0x70,0x70,0x72,0x73,0x74,0x74,0x73,0x73,0x73,0x73,0x74,0x74,0x75, + 0x75,0x75,0x75,0x75,0x75,0x75,0x76,0x76,0x77,0x78,0x78,0x78,0x77,0x78,0x7a, + 0x7a,0x7a,0x7b,0x7b,0x7c,0x7d,0x7d,0x7d,0x7d,0x7d,0x7e,0x7e,0x7d,0x7e,0x7f, + 0x7f,0x7f,0x7f,0x7f,0x7f,0x81,0x82,0x82,0x82,0x83,0x83,0x83,0x83,0x84,0x85, + 0x85,0x85,0x86,0x86,0x86,0x86,0x87,0x87,0x88,0x88,0x88,0x88,0x88,0x88,0x88, + 0x88,0x89,0x8a,0x8a,0x8a,0x89,0x89,0x8a,0x8a,0x8a,0x8a,0x8a,0x8a,0x8a,0x8a, + 0x8b,0x8b,0x8b,0x8a,0x8b,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x8e,0x8e,0x8f, + 0x8f,0x8e,0x8f,0x90,0x91,0x91,0x92,0x93,0x93,0x92,0x91,0x91,0x91,0x92,0x93, + 0x94,0x95,0x95,0x95,0x95,0x95,0x95,0x95,0x95,0x95,0x95,0x95,0x95,0x96,0x96, + 0x96,0x97,0x97,0x98,0x98,0x98,0x99,0x99,0x9a,0x9a,0x9a,0x9b,0x9a,0x98,0x98, + 0x98,0x99,0x9a,0x9a,0x9b,0x9c,0x9c,0x9c,0x9c,0x9c,0x9c,0x9c,0x9d,0x9d,0x9d, + 0x9e,0x9e,0x9e,0x9e,0x9e,0x9e,0x9e,0x9f,0xa0,0x9f,0x9f,0xa0,0xa0,0xa0,0xa1, + 0xa1,0xa1,0xa1,0xa2,0xa2,0xa3,0xa3,0xa3,0xa3,0xa3,0xa3,0xa3,0xa3,0xa3,0xa3, + 0xa3,0xa4,0xa4,0xa4,0xa4,0xa4,0xa4,0xa3,0xa3,0xa3,0xa4,0xa6,0xa6,0xa5,0xa5, + 0xa5,0xa6,0xa5,0xa5,0xa7,0xa7,0xa7,0xa5,0xa4,0xa7,0xa7,0xa6,0xa7,0xa8,0xa7, + 0xa7,0xa7,0xa9,0xaa,0xa9,0xa9,0xa8,0xa9,0xa9,0xa9,0xaa,0xaa,0xaa,0xa9,0xa9, + 0xa9,0xa9,0xa9,0xa9,0xa9,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xab, + 0xaa,0xaa,0xa9,0xaa,0xab,0xab,0xab,0xac,0xab,0xa8,0xa6,0xaa,0xbe,0xb8,0x91, + 0x3d,0x00,0x00,0x03,0x03,0x03,0x02,0x03,0x03,0x03,0x0a,0x13,0x20,0x16,0x02, + 0x03,0x07,0x01,0x00,0x03,0x03,0x03,0x03,0x02,0x00,0x00,0x07,0x1f,0x77,0xc1, + 0x49,0x00,0x00,0x03,0x06,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x01,0x01,0x01,0x00,0x00,0x01,0x02,0x03,0x04,0x04,0x00,0x09,0x2a,0x86,0xc8, + 0xb3,0xaa,0xb2,0xb2,0xaf,0xa7,0xb9,0xc8,0x67,0x0c,0x03,0x01,0x03,0x03,0x03, + 0x04,0x07,0x07,0x00,0x0d,0x46,0x8b,0xc5,0xba,0xad,0xb2,0xb2,0xb1,0xb1,0xb2, + 0xb2,0xb1,0xb0,0xae,0xad,0xac,0xac,0xac,0xac,0xac,0xab,0xab,0xaa,0xaa,0xaa, + 0xaa,0xa9,0xa9,0xa9,0xa9,0xa9,0xa9,0xaa,0xaa,0xaa,0xaa,0xab,0xab,0xab,0xac, + 0xac,0xac,0xad,0xad,0xad,0xae,0xae,0xae,0xaf,0xb1,0xb2,0xb2,0xb1,0xaf,0xaf, + 0xaf,0xae,0xae,0xaf,0xaf,0xaf,0xb0,0xb0,0xb2,0xb2,0xb1,0xb1,0xb1,0xb1,0xb1, + 0xb1,0xb1,0xb1,0xb1,0xb2,0xb2,0xb2,0xb2,0xb3,0xb3,0xb2,0xaf,0xad,0xc8,0x50, + 0x50,0x51,0x53,0x54,0x55,0x56,0x57,0x57,0x57,0x58,0x59,0x5a,0x59,0x56,0x56, + 0x57,0x57,0x57,0x57,0x59,0x5a,0x5a,0x5a,0x5a,0x5a,0x5b,0x5b,0x5b,0x5c,0x5d, + 0x5e,0x5e,0x5e,0x5e,0x5f,0x60,0x61,0x61,0x62,0x62,0x62,0x62,0x62,0x62,0x63, + 0x64,0x64,0x64,0x64,0x65,0x65,0x66,0x67,0x68,0x68,0x68,0x67,0x67,0x68,0x69, + 0x69,0x6b,0x6c,0x6c,0x6b,0x6b,0x6d,0x6d,0x6d,0x6e,0x6e,0x6f,0x70,0x70,0x70, + 0x70,0x70,0x71,0x71,0x71,0x71,0x72,0x72,0x72,0x72,0x72,0x73,0x74,0x74,0x74, + 0x74,0x75,0x76,0x77,0x77,0x77,0x78,0x78,0x78,0x78,0x78,0x78,0x79,0x79,0x79, + 0x79,0x79,0x7b,0x7c,0x7d,0x7c,0x7b,0x7b,0x7d,0x7f,0x7f,0x7f,0x7e,0x7d,0x7d, + 0x7e,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x81,0x81,0x81,0x81,0x82,0x83,0x84,0x84, + 0x85,0x85,0x85,0x85,0x86,0x86,0x86,0x87,0x87,0x88,0x88,0x88,0x88,0x88,0x88, + 0x88,0x88,0x89,0x8a,0x8a,0x8a,0x8a,0x89,0x8a,0x8a,0x8a,0x8a,0x8a,0x8a,0x8b, + 0x8b,0x8b,0x8c,0x8c,0x8c,0x8c,0x8d,0x8e,0x8e,0x8e,0x8e,0x8e,0x8e,0x8e,0x8f, + 0x8f,0x8f,0x90,0x90,0x90,0x91,0x91,0x92,0x93,0x93,0x93,0x93,0x92,0x92,0x92, + 0x93,0x94,0x95,0x95,0x95,0x95,0x95,0x95,0x95,0x95,0x95,0x95,0x96,0x96,0x96, + 0x97,0x97,0x98,0x98,0x98,0x99,0x99,0x99,0x9a,0x9b,0x9b,0x9b,0x9c,0x9c,0x9c, + 0x98,0x98,0x99,0x9a,0x9b,0x9c,0x9c,0x9c,0x9c,0x9c,0x9d,0x9d,0x9d,0x9d,0x9d, + 0x9e,0x9e,0x9e,0x9f,0x9f,0x9f,0x9f,0x9f,0xa0,0xa0,0xa0,0xa0,0xa0,0xa0,0xa0, + 0xa0,0xa1,0xa1,0xa1,0xa1,0xa2,0xa3,0xa3,0xa3,0xa3,0xa3,0xa3,0xa3,0xa4,0xa4, + 0xa4,0xa4,0xa4,0xa5,0xa5,0xa5,0xa5,0xa5,0xa3,0xa3,0xa3,0xa4,0xa4,0xa5,0xa5, + 0xa6,0xa7,0xa7,0xa7,0xa7,0xa7,0xa7,0xa6,0xa5,0xa3,0xa4,0xae,0xae,0xa5,0xa7, + 0xa9,0xa7,0xa7,0xa9,0xaa,0xaa,0xaa,0xaa,0xa9,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa, + 0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa, + 0xab,0xae,0xab,0xa8,0xac,0xae,0xae,0xad,0xac,0xab,0xac,0xaf,0xab,0xaa,0xb7, + 0xc1,0xbb,0x54,0x00,0x00,0x03,0x07,0x03,0x00,0x04,0x06,0x04,0x02,0x00,0x02, + 0x03,0x03,0x01,0x00,0x00,0x03,0x07,0x02,0x00,0x03,0x03,0x01,0x00,0x04,0x1a, + 0x77,0xc8,0x4a,0x00,0x01,0x04,0x03,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x05,0x03,0x00,0x01,0x04,0x15, + 0x7b,0xc8,0xba,0xae,0xae,0xaf,0xb0,0xad,0xbd,0xc8,0x65,0x0c,0x03,0x00,0x01, + 0x03,0x03,0x04,0x07,0x09,0x00,0x07,0x30,0x7c,0xc8,0xbb,0xaa,0xae,0xaf,0xaf, + 0xaf,0xae,0xac,0xab,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xab,0xab,0xab,0xab,0xab, + 0xab,0xab,0xab,0xab,0xab,0xac,0xad,0xae,0xae,0xae,0xaf,0xb0,0xb1,0xb0,0xb0, + 0xb1,0xb2,0xb3,0xb4,0xb5,0xb5,0xb5,0xb5,0xb4,0xb3,0xb2,0xb4,0xb6,0xb6,0xb5, + 0xb4,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2, + 0xb2,0xb2,0xb2,0xb2,0xb2,0xb1,0xb2,0xb2,0xb1,0xb0,0xaf,0xae,0xae,0xac,0xab, + 0xc8,0x50,0x50,0x51,0x52,0x53,0x54,0x55,0x55,0x56,0x57,0x57,0x57,0x57,0x57, + 0x56,0x57,0x57,0x57,0x57,0x57,0x59,0x5a,0x5a,0x5a,0x5a,0x5a,0x5b,0x5b,0x5c, + 0x5d,0x5e,0x5e,0x5e,0x5f,0x5f,0x61,0x62,0x62,0x63,0x63,0x62,0x62,0x62,0x62, + 0x62,0x63,0x64,0x64,0x65,0x65,0x65,0x66,0x67,0x67,0x67,0x68,0x68,0x68,0x68, + 0x69,0x69,0x6a,0x6c,0x6d,0x6d,0x6d,0x6d,0x6d,0x6d,0x6e,0x6e,0x6f,0x70,0x70, + 0x70,0x71,0x71,0x71,0x71,0x72,0x73,0x73,0x73,0x72,0x72,0x73,0x74,0x74,0x74, + 0x75,0x75,0x75,0x76,0x77,0x78,0x78,0x78,0x79,0x79,0x79,0x79,0x79,0x79,0x7a, + 0x7b,0x7b,0x7b,0x7b,0x7c,0x7d,0x7d,0x7e,0x7e,0x7e,0x7f,0x7f,0x7f,0x7f,0x7f, + 0x7f,0x7f,0x7f,0x80,0x81,0x82,0x81,0x82,0x82,0x82,0x83,0x83,0x83,0x83,0x84, + 0x84,0x84,0x85,0x85,0x85,0x85,0x86,0x86,0x86,0x87,0x88,0x88,0x88,0x88,0x88, + 0x89,0x88,0x88,0x89,0x8a,0x8a,0x8b,0x8b,0x8a,0x8a,0x8a,0x8b,0x8b,0x8b,0x8b, + 0x8c,0x8c,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x8e,0x90,0x90,0x8f,0x8f,0x8f,0x8f, + 0x90,0x90,0x90,0x90,0x91,0x91,0x91,0x91,0x91,0x93,0x93,0x94,0x94,0x93,0x93, + 0x92,0x93,0x94,0x95,0x95,0x95,0x95,0x95,0x95,0x96,0x96,0x96,0x96,0x96,0x97, + 0x97,0x97,0x98,0x98,0x98,0x98,0x98,0x99,0x99,0x99,0x9a,0x9b,0x9b,0x9c,0x9c, + 0x9c,0x9c,0x99,0x99,0x9a,0x9b,0x9c,0x9c,0x9c,0x9d,0x9d,0x9d,0x9e,0x9e,0x9e, + 0x9e,0x9e,0x9e,0x9e,0x9f,0x9f,0x9f,0xa0,0xa0,0xa0,0xa0,0xa0,0xa1,0xa0,0xa0, + 0xa0,0xa0,0xa1,0xa1,0xa1,0xa1,0xa2,0xa3,0xa3,0xa3,0xa4,0xa4,0xa4,0xa4,0xa4, + 0xa5,0xa5,0xa5,0xa5,0xa5,0xa6,0xa6,0xa6,0xa6,0xa6,0xa7,0xa7,0xa7,0xa7,0xa6, + 0xa6,0xa6,0xa7,0xa6,0xa6,0xa6,0xa7,0xa7,0xa5,0xa7,0xaa,0xa9,0xa7,0xa9,0xa9, + 0xa8,0xa7,0xa7,0xa9,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa, + 0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xab,0xab,0xab,0xab,0xab, + 0xab,0xab,0xac,0xad,0xab,0xaa,0xad,0xae,0xab,0xac,0xac,0xaa,0xaa,0xad,0xab, + 0xaa,0xaa,0xb9,0xc8,0x6f,0x12,0x02,0x01,0x07,0x07,0x05,0x03,0x03,0x03,0x01, + 0x00,0x00,0x03,0x07,0x03,0x00,0x00,0x03,0x03,0x00,0x00,0x03,0x04,0x03,0x00, + 0x00,0x0a,0x5e,0xae,0x46,0x00,0x00,0x01,0x01,0x02,0x02,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x02,0x02,0x03,0x03,0x03, + 0x00,0x07,0x6d,0xc8,0xba,0xb0,0xae,0xae,0xb0,0xae,0xbe,0xc8,0x62,0x08,0x00, + 0x00,0x03,0x03,0x03,0x03,0x07,0x0a,0x00,0x04,0x21,0x71,0xc8,0xb9,0xa5,0xa7, + 0xa9,0xaa,0xaa,0xaa,0xa8,0xa8,0xa8,0xa8,0xa8,0xa9,0xaa,0xaa,0xab,0xab,0xac, + 0xac,0xac,0xac,0xac,0xac,0xac,0xac,0xad,0xae,0xae,0xae,0xae,0xae,0xae,0xaf, + 0xb0,0xb1,0xb1,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb1,0xb0,0xb0,0xb0,0xb2, + 0xb2,0xb1,0xaf,0xae,0xae,0xae,0xae,0xaf,0xaf,0xaf,0xaf,0xae,0xae,0xae,0xae, + 0xae,0xaf,0xaf,0xaf,0xae,0xae,0xac,0xab,0xac,0xac,0xaa,0xa9,0xaa,0xaa,0xab, + 0xad,0xad,0xc8,0x50,0x50,0x50,0x52,0x53,0x53,0x53,0x54,0x54,0x55,0x54,0x53, + 0x53,0x54,0x56,0x57,0x57,0x57,0x57,0x57,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a, + 0x5b,0x5d,0x5e,0x5e,0x5f,0x5f,0x5f,0x60,0x61,0x62,0x63,0x64,0x64,0x62,0x62, + 0x62,0x62,0x62,0x63,0x65,0x65,0x65,0x65,0x66,0x66,0x67,0x67,0x67,0x68,0x69, + 0x69,0x69,0x69,0x69,0x6a,0x6c,0x6c,0x6d,0x6d,0x6d,0x6d,0x6d,0x6e,0x6f,0x70, + 0x70,0x70,0x70,0x71,0x71,0x71,0x72,0x72,0x74,0x74,0x73,0x73,0x73,0x74,0x74, + 0x75,0x76,0x76,0x76,0x76,0x76,0x77,0x78,0x78,0x79,0x7a,0x7a,0x7a,0x7a,0x7a, + 0x7a,0x7b,0x7c,0x7c,0x7d,0x7d,0x7c,0x7c,0x7d,0x7f,0x80,0x80,0x7f,0x7f,0x7f, + 0x7f,0x81,0x81,0x7f,0x80,0x81,0x82,0x82,0x82,0x83,0x84,0x84,0x85,0x85,0x85, + 0x84,0x84,0x84,0x84,0x85,0x85,0x85,0x86,0x86,0x86,0x86,0x88,0x88,0x88,0x88, + 0x88,0x89,0x89,0x89,0x89,0x8a,0x8a,0x8b,0x8b,0x8b,0x8b,0x8b,0x8b,0x8b,0x8c, + 0x8c,0x8c,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x8e,0x8e,0x8f,0x91,0x91,0x90,0x90, + 0x90,0x90,0x91,0x91,0x91,0x91,0x91,0x92,0x92,0x91,0x92,0x93,0x94,0x94,0x94, + 0x94,0x93,0x93,0x93,0x95,0x95,0x95,0x95,0x95,0x95,0x95,0x96,0x96,0x96,0x97, + 0x97,0x97,0x98,0x98,0x98,0x98,0x98,0x98,0x98,0x98,0x98,0x99,0x99,0x9a,0x9b, + 0x9b,0x9c,0x9c,0x9c,0x9a,0x9b,0x9b,0x9c,0x9c,0x9c,0x9d,0x9d,0x9e,0x9e,0x9e, + 0x9f,0x9f,0x9e,0x9e,0x9e,0x9f,0x9f,0x9f,0xa0,0xa0,0xa0,0xa0,0xa0,0xa1,0xa1, + 0xa1,0xa0,0xa0,0xa1,0xa1,0xa1,0xa1,0xa2,0xa2,0xa3,0xa3,0xa3,0xa4,0xa4,0xa4, + 0xa4,0xa4,0xa5,0xa5,0xa5,0xa5,0xa5,0xa6,0xa6,0xa6,0xa6,0xa7,0xa8,0xa9,0xa9, + 0xa8,0xa7,0xa6,0xa7,0xa7,0xa7,0xa6,0xa5,0xa7,0xa7,0xa5,0xa7,0xac,0xac,0xa9, + 0xa4,0xa5,0xaa,0xaa,0xa9,0xaa,0xaa,0xab,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa, + 0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xab,0xab,0xab,0xab,0xab, + 0xab,0xab,0xab,0xac,0xac,0xab,0xac,0xad,0xae,0xac,0xaa,0xaa,0xac,0xaa,0xaa, + 0xaa,0xab,0xaa,0xa3,0xb2,0xc8,0x8b,0x3b,0x0d,0x00,0x07,0x09,0x07,0x03,0x01, + 0x02,0x03,0x03,0x03,0x06,0x08,0x03,0x00,0x01,0x00,0x00,0x00,0x00,0x03,0x03, + 0x03,0x00,0x00,0x00,0x3d,0x82,0x3a,0x01,0x00,0x00,0x00,0x02,0x02,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x03,0x00,0x02, + 0x05,0x03,0x00,0x00,0x60,0xba,0xb8,0xb2,0xae,0xae,0xaf,0xaf,0xbe,0xc5,0x5d, + 0x03,0x00,0x00,0x04,0x03,0x01,0x03,0x07,0x0a,0x00,0x04,0x22,0x71,0xc8,0xb8, + 0xa3,0xa6,0xa7,0xa8,0xa9,0xaa,0xaa,0xa9,0xa9,0xaa,0xaa,0xaa,0xab,0xab,0xac, + 0xad,0xae,0xae,0xae,0xae,0xad,0xad,0xac,0xac,0xad,0xad,0xad,0xad,0xad,0xac, + 0xad,0xad,0xae,0xae,0xae,0xae,0xad,0xad,0xad,0xad,0xad,0xac,0xac,0xab,0xaa, + 0xaa,0xaa,0xaa,0xa9,0xa9,0xa9,0xa9,0xaa,0xaa,0xaa,0xab,0xaa,0xab,0xaa,0xa9, + 0xa9,0xaa,0xaa,0xaa,0xaa,0xaa,0xa9,0xa7,0xa6,0xa5,0xa5,0xa5,0xa3,0xa2,0xa3, + 0xa4,0xa6,0xa8,0xa9,0xc8,0x50,0x51,0x51,0x52,0x53,0x53,0x53,0x54,0x54,0x54, + 0x53,0x53,0x53,0x53,0x57,0x57,0x58,0x58,0x58,0x59,0x5a,0x5b,0x5b,0x5a,0x5a, + 0x5a,0x5b,0x5a,0x5b,0x5c,0x5e,0x5e,0x5e,0x5e,0x5e,0x5f,0x60,0x61,0x62,0x62, + 0x62,0x61,0x61,0x62,0x62,0x64,0x65,0x66,0x66,0x66,0x65,0x65,0x65,0x66,0x67, + 0x68,0x69,0x6a,0x69,0x69,0x69,0x69,0x6a,0x6b,0x6c,0x6c,0x6c,0x6c,0x6d,0x6e, + 0x6f,0x70,0x70,0x70,0x70,0x70,0x70,0x71,0x72,0x72,0x73,0x73,0x73,0x73,0x74, + 0x74,0x76,0x77,0x78,0x78,0x77,0x76,0x76,0x76,0x77,0x78,0x79,0x79,0x7a,0x7a, + 0x7b,0x7b,0x7b,0x7b,0x7c,0x7e,0x7f,0x7f,0x7d,0x7c,0x7c,0x7f,0x81,0x81,0x7f, + 0x7e,0x7e,0x7f,0x82,0x82,0x80,0x80,0x81,0x82,0x82,0x82,0x83,0x84,0x85,0x85, + 0x85,0x84,0x84,0x84,0x85,0x85,0x86,0x86,0x86,0x86,0x86,0x87,0x87,0x88,0x88, + 0x88,0x88,0x89,0x8a,0x8a,0x8a,0x8a,0x8b,0x8b,0x8c,0x8d,0x8d,0x8d,0x8c,0x8c, + 0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x8e,0x8f,0x8f,0x8f,0x8f,0x90,0x91,0x91, + 0x91,0x91,0x91,0x91,0x91,0x91,0x91,0x92,0x93,0x93,0x93,0x92,0x92,0x93,0x94, + 0x94,0x94,0x94,0x94,0x94,0x94,0x95,0x95,0x96,0x95,0x95,0x96,0x96,0x96,0x97, + 0x97,0x97,0x97,0x98,0x98,0x98,0x99,0x98,0x98,0x98,0x98,0x98,0x98,0x98,0x98, + 0x98,0x99,0x9a,0x9a,0x9b,0x9b,0x9c,0x9c,0x9c,0x9c,0x9c,0x9d,0x9d,0x9e,0x9e, + 0x9e,0x9f,0x9f,0x9f,0x9f,0x9f,0x9f,0x9f,0xa0,0xa0,0xa0,0xa0,0xa0,0xa1,0xa1, + 0xa1,0xa2,0xa2,0xa2,0xa2,0xa2,0xa2,0xa2,0xa2,0xa2,0xa2,0xa3,0xa3,0xa3,0xa4, + 0xa4,0xa4,0xa4,0xa4,0xa5,0xa5,0xa5,0xa5,0xa5,0xa5,0xa6,0xa6,0xa6,0xa6,0xa6, + 0xa7,0xa8,0xa8,0xa7,0xa6,0xa7,0xa7,0xa7,0xa7,0xa7,0xa8,0xa9,0xa9,0xa5,0xa0, + 0xa3,0xa6,0xa7,0xa8,0xaa,0xae,0xaf,0xaa,0xa8,0xaa,0xaa,0xaa,0xaa,0xaa,0xab, + 0xab,0xaa,0xaa,0xaa,0xaa,0xaa,0xab,0xab,0xab,0xab,0xab,0xab,0xac,0xac,0xac, + 0xab,0xab,0xab,0xab,0xac,0xad,0xac,0xa9,0xab,0xae,0xac,0xaa,0xab,0xac,0xad, + 0xae,0xad,0xaa,0xae,0xb0,0xa7,0xb0,0xc4,0xa7,0x6e,0x19,0x00,0x06,0x04,0x03, + 0x06,0x05,0x02,0x00,0x00,0x03,0x03,0x01,0x01,0x01,0x01,0x00,0x00,0x02,0x03, + 0x01,0x01,0x02,0x00,0x00,0x00,0x1e,0x42,0x20,0x04,0x03,0x03,0x01,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x01,0x02,0x02,0x00,0x00,0x00,0x52,0xa4,0xb4,0xb5,0xb0,0xae,0xae,0xb1,0xbd, + 0xbf,0x57,0x00,0x00,0x00,0x05,0x03,0x02,0x03,0x06,0x0a,0x00,0x08,0x38,0x82, + 0xc8,0xb9,0xa7,0xac,0xae,0xae,0xb1,0xb2,0xb2,0xb1,0xb1,0xb0,0xb0,0xb0,0xb0, + 0xb0,0xb0,0xb0,0xb0,0xb0,0xb0,0xaf,0xae,0xae,0xae,0xae,0xae,0xae,0xad,0xac, + 0xab,0xab,0xab,0xab,0xaa,0xa8,0xa8,0xa8,0xa8,0xa8,0xa9,0xa9,0xa8,0xa7,0xa6, + 0xa4,0xa3,0xa3,0xa3,0xa3,0xa3,0xa3,0xa3,0xa4,0xa4,0xa5,0xa6,0xa6,0xa6,0xa6, + 0xa6,0xa5,0xa5,0xa5,0xa6,0xa6,0xa6,0xa5,0xa3,0xa2,0xa1,0xa0,0xa0,0xa0,0x9d, + 0x9c,0x9b,0x9a,0x99,0x98,0x98,0xc8,0x52,0x52,0x52,0x52,0x53,0x53,0x53,0x54, + 0x55,0x55,0x54,0x54,0x53,0x54,0x57,0x58,0x58,0x58,0x58,0x59,0x5a,0x5b,0x5b, + 0x5b,0x5a,0x5b,0x5b,0x5a,0x5b,0x5c,0x5d,0x5e,0x5e,0x5e,0x5e,0x5e,0x5f,0x60, + 0x61,0x61,0x61,0x61,0x61,0x62,0x62,0x64,0x65,0x66,0x66,0x66,0x65,0x65,0x65, + 0x66,0x67,0x68,0x69,0x6a,0x6a,0x69,0x69,0x69,0x69,0x6a,0x6a,0x6b,0x6b,0x6c, + 0x6d,0x6d,0x6f,0x70,0x70,0x70,0x70,0x70,0x70,0x71,0x72,0x72,0x72,0x72,0x73, + 0x73,0x74,0x74,0x76,0x77,0x78,0x78,0x77,0x77,0x77,0x77,0x78,0x78,0x78,0x79, + 0x7a,0x7a,0x7b,0x7b,0x7c,0x7c,0x7d,0x7e,0x7e,0x7e,0x7d,0x7d,0x7e,0x7f,0x80, + 0x7f,0x7f,0x7f,0x7f,0x80,0x82,0x82,0x81,0x81,0x82,0x82,0x82,0x82,0x83,0x84, + 0x85,0x85,0x85,0x85,0x85,0x85,0x86,0x86,0x86,0x86,0x87,0x88,0x88,0x88,0x88, + 0x88,0x88,0x88,0x89,0x8a,0x8a,0x8a,0x8b,0x8b,0x8c,0x8c,0x8d,0x8d,0x8d,0x8d, + 0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x8e,0x8f,0x8f,0x90,0x91,0x91,0x91, + 0x91,0x91,0x91,0x91,0x91,0x91,0x91,0x91,0x92,0x93,0x93,0x94,0x94,0x93,0x93, + 0x94,0x94,0x94,0x94,0x94,0x94,0x94,0x95,0x95,0x95,0x96,0x96,0x95,0x96,0x96, + 0x96,0x97,0x97,0x97,0x98,0x98,0x98,0x99,0x99,0x99,0x98,0x98,0x98,0x98,0x98, + 0x98,0x98,0x99,0x99,0x9a,0x9b,0x9b,0x9c,0x9c,0x9c,0x9c,0x9c,0x9d,0x9d,0x9e, + 0x9e,0x9e,0x9f,0x9f,0x9f,0x9f,0xa0,0xa0,0xa0,0xa0,0xa0,0xa1,0xa1,0xa1,0xa1, + 0xa2,0xa2,0xa2,0xa3,0xa3,0xa3,0xa3,0xa3,0xa3,0xa3,0xa3,0xa2,0xa3,0xa3,0xa3, + 0xa4,0xa4,0xa4,0xa4,0xa4,0xa4,0xa5,0xa5,0xa5,0xa5,0xa5,0xa5,0xa6,0xa6,0xa6, + 0xa6,0xa6,0xa7,0xa8,0xa7,0xa7,0xa6,0xa7,0xa7,0xa8,0xa9,0xa9,0xaa,0xaa,0xa4, + 0xa8,0xb2,0xb3,0xb0,0xa8,0xa7,0xab,0xad,0xad,0xaa,0xa9,0xa9,0xaa,0xaa,0xaa, + 0xab,0xac,0xac,0xac,0xab,0xab,0xab,0xab,0xac,0xad,0xac,0xab,0xab,0xac,0xac, + 0xac,0xac,0xac,0xac,0xac,0xac,0xac,0xad,0xac,0xaa,0xab,0xae,0xab,0xab,0xae, + 0xae,0xac,0xaf,0xaf,0xad,0xaf,0xb1,0xaa,0xae,0xb9,0xbc,0x9a,0x2a,0x00,0x03, + 0x02,0x01,0x04,0x05,0x03,0x02,0x01,0x04,0x03,0x00,0x02,0x03,0x00,0x00,0x01, + 0x03,0x03,0x00,0x00,0x03,0x03,0x00,0x00,0x0c,0x1d,0x12,0x07,0x03,0x03,0x03, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x01,0x03,0x04,0x04,0x02,0x00,0x00,0x4c,0x9c,0xb4,0xb9,0xb3,0xae,0xae, + 0xb5,0xbe,0xb9,0x52,0x00,0x00,0x01,0x03,0x04,0x03,0x02,0x05,0x0a,0x00,0x0d, + 0x4c,0x91,0xc8,0xb9,0xaa,0xb1,0xb2,0xb2,0xb5,0xb6,0xb5,0xb4,0xb3,0xb2,0xb2, + 0xb1,0xb0,0xaf,0xaf,0xae,0xae,0xae,0xae,0xab,0xaa,0xaa,0xa9,0xa9,0xa9,0xa9, + 0xa8,0xa7,0xa7,0xa7,0xa6,0xa6,0xa5,0xa4,0xa3,0xa3,0xa2,0xa3,0xa3,0xa3,0xa3, + 0xa2,0xa1,0xa0,0xa0,0xa0,0xa0,0xa0,0xa0,0xa1,0xa1,0xa2,0xa2,0xa2,0xa2,0xa2, + 0xa2,0xa1,0xa1,0xa0,0xa0,0xa0,0x9f,0x9f,0x9e,0x9c,0x9a,0x98,0x97,0x95,0x95, + 0x95,0x94,0x92,0x90,0x8d,0x8b,0x8a,0x89,0xc8,0x52,0x52,0x51,0x51,0x52,0x52, + 0x53,0x54,0x56,0x56,0x56,0x56,0x55,0x55,0x57,0x57,0x58,0x58,0x58,0x59,0x5a, + 0x5b,0x5b,0x5b,0x5a,0x5b,0x5b,0x5b,0x5b,0x5c,0x5d,0x5d,0x5e,0x5e,0x5e,0x5f, + 0x60,0x61,0x61,0x61,0x62,0x62,0x62,0x62,0x62,0x64,0x65,0x66,0x66,0x66,0x65, + 0x65,0x65,0x66,0x67,0x68,0x69,0x6a,0x6a,0x6a,0x69,0x69,0x69,0x69,0x69,0x6a, + 0x6b,0x6c,0x6d,0x6d,0x6f,0x70,0x70,0x70,0x70,0x70,0x70,0x71,0x72,0x72,0x71, + 0x71,0x72,0x73,0x74,0x74,0x75,0x76,0x77,0x77,0x77,0x77,0x78,0x78,0x78,0x78, + 0x78,0x79,0x7a,0x7a,0x7b,0x7b,0x7c,0x7d,0x7d,0x7d,0x7c,0x7b,0x7e,0x7f,0x80, + 0x7f,0x7f,0x7e,0x7f,0x81,0x82,0x82,0x81,0x81,0x82,0x83,0x83,0x83,0x83,0x83, + 0x83,0x84,0x86,0x86,0x86,0x86,0x86,0x86,0x86,0x87,0x88,0x88,0x89,0x89,0x8a, + 0x8a,0x8a,0x89,0x89,0x89,0x8a,0x8a,0x8a,0x8a,0x8b,0x8c,0x8c,0x8d,0x8d,0x8d, + 0x8d,0x8d,0x8e,0x8e,0x8d,0x8d,0x8d,0x8e,0x8e,0x8e,0x8f,0x8f,0x90,0x90,0x91, + 0x91,0x91,0x91,0x91,0x91,0x91,0x91,0x91,0x91,0x91,0x92,0x93,0x94,0x95,0x95, + 0x94,0x94,0x95,0x95,0x95,0x95,0x95,0x95,0x95,0x95,0x96,0x96,0x97,0x96,0x96, + 0x96,0x96,0x97,0x97,0x97,0x98,0x98,0x98,0x99,0x99,0x9a,0x9a,0x99,0x99,0x99, + 0x99,0x99,0x99,0x9a,0x9a,0x9b,0x9b,0x9c,0x9c,0x9c,0x9d,0x9d,0x9d,0x9d,0x9d, + 0x9e,0x9e,0x9e,0x9f,0x9f,0x9f,0x9f,0x9f,0xa0,0xa0,0xa0,0xa0,0xa1,0xa2,0xa2, + 0xa2,0xa3,0xa3,0xa3,0xa3,0xa3,0xa3,0xa3,0xa3,0xa3,0xa3,0xa3,0xa3,0xa3,0xa3, + 0xa3,0xa4,0xa4,0xa4,0xa4,0xa4,0xa5,0xa5,0xa6,0xa6,0xa6,0xa6,0xa6,0xa6,0xa6, + 0xa7,0xa7,0xa7,0xa7,0xa7,0xa8,0xa7,0xa7,0xa7,0xa7,0xa7,0xa8,0xa9,0xaa,0xaa, + 0xa9,0xa0,0xab,0xc8,0xc5,0xb9,0xa9,0xa7,0xad,0xa9,0xa6,0xaa,0xaa,0xa9,0xaa, + 0xab,0xac,0xac,0xad,0xad,0xad,0xad,0xad,0xad,0xad,0xad,0xae,0xad,0xac,0xad, + 0xad,0xad,0xad,0xad,0xad,0xad,0xad,0xad,0xad,0xad,0xad,0xae,0xad,0xac,0xac, + 0xae,0xb2,0xae,0xab,0xae,0xb0,0xb0,0xaf,0xae,0xad,0xac,0xac,0xc7,0xb9,0x3f, + 0x03,0x03,0x01,0x02,0x01,0x03,0x05,0x05,0x04,0x03,0x03,0x03,0x05,0x05,0x00, + 0x01,0x04,0x02,0x00,0x00,0x01,0x04,0x05,0x03,0x00,0x05,0x0e,0x0c,0x07,0x00, + 0x01,0x04,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x01,0x03,0x04,0x07,0x0a,0x05,0x00,0x00,0x4b,0x9c,0xb7,0xbe,0xb6, + 0xb0,0xaf,0xb9,0xc1,0xb6,0x50,0x00,0x00,0x01,0x02,0x04,0x06,0x02,0x04,0x08, + 0x00,0x11,0x5b,0x9c,0xc8,0xb9,0xab,0xb2,0xb5,0xb4,0xb5,0xb5,0xb4,0xb2,0xb2, + 0xb1,0xaf,0xae,0xad,0xab,0xaa,0xaa,0xa9,0xa9,0xa8,0xa4,0xa2,0xa2,0xa2,0xa2, + 0xa2,0xa2,0xa1,0xa1,0xa0,0xa0,0xa0,0xa0,0xa1,0xa2,0xa0,0x9f,0x9d,0x9c,0x9c, + 0x9d,0x9e,0x9e,0x9e,0x9e,0x9e,0x9f,0xa0,0xa0,0xa0,0xa0,0xa0,0xa0,0xa0,0xa0, + 0xa0,0x9e,0x9d,0x9c,0x9c,0x9b,0x99,0x98,0x98,0x96,0x95,0x92,0x90,0x8d,0x8b, + 0x8a,0x8a,0x8a,0x8a,0x89,0x87,0x85,0x82,0x80,0x7f,0xc8,0x51,0x51,0x51,0x51, + 0x51,0x52,0x52,0x53,0x54,0x55,0x56,0x56,0x55,0x55,0x56,0x57,0x57,0x57,0x57, + 0x58,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5b,0x5d,0x5e,0x5e,0x5e,0x5e,0x5e,0x5f, + 0x60,0x62,0x62,0x62,0x62,0x62,0x62,0x62,0x62,0x62,0x63,0x64,0x65,0x65,0x65, + 0x65,0x65,0x66,0x67,0x66,0x66,0x68,0x69,0x6a,0x6a,0x69,0x69,0x69,0x69,0x69, + 0x69,0x69,0x6b,0x6c,0x6d,0x6e,0x70,0x70,0x70,0x70,0x70,0x70,0x71,0x71,0x72, + 0x72,0x72,0x72,0x73,0x74,0x74,0x74,0x74,0x75,0x76,0x77,0x78,0x78,0x79,0x7a, + 0x7a,0x79,0x79,0x7a,0x7a,0x7b,0x7b,0x7c,0x7d,0x7d,0x7d,0x7d,0x7c,0x7c,0x7e, + 0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x81,0x82,0x82,0x82,0x83,0x85,0x85,0x85,0x85, + 0x85,0x84,0x84,0x85,0x86,0x86,0x86,0x86,0x86,0x87,0x87,0x87,0x88,0x89,0x8a, + 0x8a,0x8a,0x8a,0x8a,0x8a,0x8a,0x8a,0x8a,0x8a,0x8a,0x8a,0x8b,0x8c,0x8d,0x8d, + 0x8d,0x8d,0x8d,0x8d,0x8f,0x8e,0x8e,0x8e,0x8e,0x8e,0x8e,0x8f,0x8f,0x90,0x91, + 0x91,0x91,0x91,0x91,0x91,0x91,0x91,0x91,0x91,0x92,0x92,0x92,0x93,0x94,0x95, + 0x95,0x95,0x95,0x95,0x95,0x95,0x95,0x95,0x95,0x95,0x96,0x96,0x97,0x98,0x98, + 0x98,0x97,0x97,0x97,0x98,0x98,0x98,0x98,0x99,0x99,0x9a,0x9a,0x9b,0x9b,0x9b, + 0x9b,0x9b,0x9b,0x9b,0x9b,0x9b,0x9b,0x9c,0x9c,0x9c,0x9c,0x9d,0x9e,0x9e,0x9e, + 0x9e,0x9e,0x9f,0x9f,0x9f,0x9f,0xa0,0xa0,0x9f,0xa0,0xa0,0xa0,0xa1,0xa1,0xa2, + 0xa3,0xa3,0xa3,0xa3,0xa3,0xa3,0xa3,0xa3,0xa4,0xa4,0xa4,0xa4,0xa4,0xa4,0xa4, + 0xa3,0xa3,0xa4,0xa4,0xa4,0xa4,0xa5,0xa5,0xa6,0xa6,0xa7,0xa7,0xa7,0xa7,0xa7, + 0xa7,0xa7,0xa7,0xa7,0xa8,0xa8,0xa9,0xa9,0xa9,0xa9,0xa8,0xa7,0xa7,0xa8,0xa9, + 0xaa,0xa7,0xa9,0xb8,0xaa,0x86,0x7f,0x8b,0xaf,0xb7,0xa8,0xaa,0xad,0xac,0xaa, + 0xaa,0xaa,0xac,0xad,0xad,0xad,0xae,0xae,0xae,0xae,0xae,0xae,0xae,0xae,0xae, + 0xad,0xad,0xae,0xae,0xae,0xae,0xae,0xae,0xae,0xae,0xae,0xad,0xae,0xaf,0xae, + 0xac,0xae,0xaf,0xaf,0xae,0xad,0xad,0xae,0xaf,0xae,0xad,0xb2,0xaf,0xa8,0xc0, + 0xb9,0x55,0x16,0x02,0x02,0x08,0x07,0x05,0x03,0x03,0x03,0x01,0x01,0x02,0x03, + 0x02,0x00,0x00,0x02,0x02,0x01,0x03,0x03,0x02,0x03,0x04,0x06,0x06,0x04,0x03, + 0x03,0x03,0x03,0x02,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x01,0x03,0x04,0x04,0x05,0x00,0x00,0x41,0x8e,0xb9, + 0xc1,0xae,0xae,0xb3,0xba,0xc1,0xb9,0x52,0x00,0x00,0x02,0x04,0x03,0x03,0x04, + 0x06,0x06,0x00,0x12,0x5e,0x9c,0xc7,0xb8,0xaa,0xb0,0xb3,0xb3,0xb2,0xb0,0xb0, + 0xb0,0xaf,0xae,0xad,0xab,0xa9,0xa7,0xa7,0xa6,0xa5,0xa5,0xa5,0xa4,0xa3,0xa3, + 0xa3,0xa3,0xa3,0xa2,0xa2,0xa1,0xa1,0xa1,0xa1,0xa1,0xa0,0xa0,0x9e,0x9c,0x9b, + 0x9a,0x99,0x99,0x9a,0x9b,0x9b,0x9c,0x9c,0x9b,0x99,0x99,0x9a,0x9a,0x9a,0x9a, + 0x99,0x99,0x98,0x97,0x96,0x95,0x94,0x93,0x93,0x93,0x92,0x92,0x91,0x91,0x91, + 0x90,0x90,0x90,0x91,0x91,0x8e,0x8d,0x8e,0x90,0x91,0x91,0x91,0xc8,0x51,0x51, + 0x51,0x51,0x51,0x52,0x52,0x53,0x54,0x55,0x55,0x55,0x55,0x55,0x55,0x56,0x57, + 0x57,0x57,0x57,0x59,0x5a,0x5a,0x59,0x59,0x5a,0x5b,0x5d,0x5e,0x5e,0x5e,0x5e, + 0x5e,0x5f,0x61,0x62,0x63,0x63,0x63,0x63,0x63,0x63,0x63,0x63,0x63,0x64,0x65, + 0x65,0x65,0x65,0x65,0x67,0x68,0x67,0x66,0x68,0x69,0x6a,0x69,0x69,0x69,0x69, + 0x69,0x6a,0x6a,0x6a,0x6b,0x6d,0x6d,0x6e,0x6f,0x70,0x70,0x70,0x70,0x71,0x71, + 0x71,0x72,0x72,0x73,0x74,0x74,0x74,0x74,0x74,0x74,0x74,0x75,0x77,0x78,0x79, + 0x7a,0x7b,0x7b,0x7a,0x7a,0x7a,0x7b,0x7b,0x7c,0x7d,0x7d,0x7d,0x7d,0x7d,0x7d, + 0x7e,0x7e,0x7e,0x7e,0x7f,0x80,0x80,0x81,0x81,0x82,0x82,0x84,0x85,0x86,0x86, + 0x86,0x86,0x86,0x85,0x85,0x85,0x86,0x86,0x86,0x86,0x86,0x87,0x87,0x87,0x88, + 0x89,0x8a,0x8a,0x8a,0x8a,0x8a,0x8a,0x8a,0x8a,0x8a,0x8a,0x8a,0x8a,0x8b,0x8c, + 0x8d,0x8d,0x8d,0x8d,0x8d,0x8e,0x8f,0x8f,0x8e,0x8e,0x8e,0x8e,0x8e,0x8f,0x90, + 0x90,0x91,0x91,0x91,0x91,0x91,0x91,0x91,0x91,0x91,0x92,0x92,0x93,0x93,0x94, + 0x95,0x95,0x95,0x95,0x95,0x96,0x96,0x96,0x96,0x96,0x96,0x96,0x97,0x97,0x98, + 0x98,0x98,0x98,0x98,0x98,0x98,0x98,0x98,0x98,0x99,0x9a,0x9a,0x9b,0x9b,0x9b, + 0x9c,0x9c,0x9c,0x9c,0x9c,0x9c,0x9c,0x9c,0x9c,0x9c,0x9d,0x9d,0x9d,0x9d,0x9e, + 0x9e,0x9e,0x9f,0x9f,0x9f,0x9f,0x9f,0xa0,0xa0,0xa0,0xa0,0xa0,0xa0,0xa0,0xa1, + 0xa2,0xa2,0xa3,0xa3,0xa3,0xa3,0xa3,0xa3,0xa3,0xa3,0xa4,0xa4,0xa4,0xa4,0xa4, + 0xa4,0xa4,0xa4,0xa4,0xa4,0xa4,0xa4,0xa5,0xa6,0xa6,0xa7,0xa7,0xa7,0xa7,0xa7, + 0xa7,0xa7,0xa7,0xa7,0xa7,0xa8,0xa9,0xaa,0xa9,0xa8,0xaa,0xaa,0xaa,0xa8,0xa7, + 0xa9,0xaa,0xaa,0xa6,0xa9,0xc8,0xa1,0x41,0x33,0x57,0xb1,0xc6,0xa5,0xaa,0xb0, + 0xac,0xab,0xab,0xac,0xac,0xad,0xad,0xad,0xad,0xae,0xae,0xae,0xae,0xae,0xae, + 0xae,0xae,0xae,0xae,0xae,0xae,0xae,0xae,0xae,0xae,0xae,0xae,0xae,0xae,0xae, + 0xae,0xae,0xae,0xaf,0xae,0xac,0xae,0xb0,0xae,0xad,0xae,0xae,0xae,0xb4,0xb1, + 0xa7,0xb9,0xb7,0x73,0x32,0x02,0x02,0x0c,0x0a,0x05,0x00,0x00,0x01,0x00,0x00, + 0x02,0x01,0x00,0x00,0x00,0x00,0x01,0x03,0x04,0x03,0x00,0x00,0x03,0x08,0x06, + 0x00,0x00,0x02,0x05,0x03,0x00,0x01,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x02,0x01,0x01,0x05,0x00,0x00,0x36, + 0x7f,0xb9,0xc3,0xa8,0xac,0xb5,0xb8,0xc0,0xbb,0x52,0x00,0x00,0x03,0x07,0x02, + 0x00,0x06,0x07,0x03,0x00,0x12,0x62,0xa0,0xc5,0xb7,0xa9,0xae,0xb2,0xb3,0xaf, + 0xae,0xae,0xae,0xae,0xad,0xac,0xaa,0xa9,0xa7,0xa7,0xa6,0xa5,0xa5,0xa5,0xa7, + 0xa7,0xa7,0xa7,0xa6,0xa5,0xa5,0xa4,0xa3,0xa3,0xa3,0xa3,0xa3,0xa3,0xa2,0xa1, + 0xa0,0xa0,0x9f,0x9e,0x9e,0x9e,0x9e,0x9e,0x9e,0x9e,0x9c,0x99,0x99,0x9a,0x9a, + 0x9a,0x9a,0x99,0x98,0x98,0x97,0x96,0x95,0x95,0x95,0x95,0x95,0x95,0x95,0x96, + 0x97,0x98,0x98,0x98,0x99,0x9a,0x99,0x96,0x95,0x99,0x9c,0x9e,0xa0,0xa0,0xc8, + 0x52,0x52,0x52,0x52,0x53,0x53,0x53,0x54,0x54,0x55,0x55,0x55,0x54,0x54,0x54, + 0x55,0x56,0x56,0x56,0x57,0x58,0x59,0x5a,0x5a,0x59,0x5a,0x5a,0x5b,0x5c,0x5d, + 0x5d,0x5d,0x5d,0x5e,0x5e,0x5f,0x60,0x61,0x61,0x61,0x62,0x63,0x63,0x63,0x64, + 0x65,0x65,0x64,0x64,0x63,0x65,0x66,0x69,0x68,0x67,0x68,0x69,0x69,0x69,0x69, + 0x69,0x69,0x6a,0x6a,0x6b,0x6b,0x6c,0x6d,0x6e,0x6e,0x6f,0x70,0x70,0x70,0x70, + 0x71,0x71,0x71,0x71,0x72,0x74,0x74,0x74,0x75,0x76,0x75,0x76,0x76,0x76,0x77, + 0x78,0x79,0x7a,0x7a,0x7b,0x7b,0x7b,0x7b,0x7b,0x7b,0x7c,0x7c,0x7c,0x7d,0x7d, + 0x7e,0x7f,0x7f,0x7d,0x7c,0x7d,0x7f,0x82,0x82,0x82,0x80,0x81,0x82,0x85,0x86, + 0x84,0x84,0x85,0x85,0x85,0x84,0x84,0x84,0x84,0x85,0x85,0x85,0x85,0x86,0x87, + 0x87,0x87,0x88,0x88,0x89,0x89,0x8a,0x8a,0x8a,0x8a,0x8a,0x8a,0x8a,0x8a,0x8a, + 0x8b,0x8c,0x8d,0x8d,0x8d,0x8c,0x8d,0x8e,0x8f,0x8f,0x8f,0x8f,0x8f,0x8f,0x8f, + 0x8f,0x90,0x90,0x91,0x91,0x91,0x92,0x92,0x92,0x92,0x92,0x92,0x93,0x93,0x93, + 0x94,0x95,0x95,0x95,0x95,0x95,0x96,0x97,0x97,0x96,0x96,0x97,0x97,0x97,0x97, + 0x98,0x98,0x98,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x9a,0x9a,0x9b,0x9c, + 0x9c,0x9c,0x9c,0x9c,0x9c,0x9c,0x9c,0x9c,0x9c,0x9c,0x9d,0x9d,0x9d,0x9d,0x9d, + 0x9d,0x9e,0x9e,0x9e,0x9f,0x9f,0x9f,0x9f,0xa0,0xa0,0xa0,0xa0,0xa0,0xa1,0xa0, + 0xa0,0xa1,0xa2,0xa2,0xa3,0xa3,0xa3,0xa2,0xa2,0xa2,0xa2,0xa3,0xa3,0xa3,0xa4, + 0xa4,0xa5,0xa5,0xa5,0xa5,0xa5,0xa5,0xa5,0xa6,0xa6,0xa6,0xa7,0xa7,0xa7,0xa8, + 0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa9,0xa9,0xa9,0xa8,0xa7,0xa6,0xa8,0xaa,0xaa, + 0xa9,0xa7,0xaa,0xac,0xad,0xa9,0xa9,0xc2,0x8a,0x18,0x07,0x34,0xa7,0xc8,0xa9, + 0xa7,0xa9,0xaa,0xad,0xb0,0xae,0xac,0xac,0xac,0xac,0xad,0xad,0xae,0xae,0xae, + 0xae,0xae,0xae,0xae,0xae,0xae,0xae,0xae,0xae,0xae,0xaf,0xb0,0xb0,0xaf,0xae, + 0xae,0xad,0xac,0xae,0xaf,0xaf,0xae,0xab,0xaf,0xb4,0xb2,0xb0,0xb0,0xb2,0xb3, + 0xb1,0xaa,0xa5,0xbb,0xc4,0x9e,0x57,0x03,0x00,0x0a,0x03,0x01,0x02,0x01,0x01, + 0x03,0x03,0x03,0x03,0x03,0x04,0x02,0x00,0x01,0x02,0x00,0x00,0x00,0x00,0x00, + 0x01,0x00,0x00,0x03,0x05,0x01,0x00,0x00,0x02,0x03,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x05,0x05,0x00,0x02,0x05,0x05,0x00, + 0x00,0x2f,0x71,0xb5,0xc4,0xa7,0xac,0xb4,0xb4,0xba,0xb6,0x4e,0x00,0x00,0x03, + 0x08,0x03,0x00,0x07,0x06,0x02,0x00,0x15,0x70,0xaa,0xc5,0xb7,0xab,0xb1,0xb4, + 0xb5,0xb3,0xb1,0xb1,0xb1,0xb2,0xb1,0xb0,0xaf,0xae,0xad,0xac,0xab,0xab,0xaa, + 0xaa,0xac,0xac,0xab,0xaa,0xa9,0xa9,0xa8,0xa7,0xa7,0xa7,0xa7,0xa7,0xa7,0xaa, + 0xac,0xad,0xae,0xae,0xaf,0xaf,0xaf,0xae,0xac,0xaa,0xaa,0xa8,0xa7,0xa8,0xa8, + 0xa8,0xa8,0xa8,0xa7,0xa7,0xa7,0xa6,0xa6,0xa5,0xa4,0xa5,0xa7,0xa7,0xa5,0xa4, + 0xa3,0xa3,0xa3,0xa3,0xa2,0xa0,0xa0,0x9f,0x9f,0x9f,0xa0,0xa1,0xa2,0xa1,0xa0, + 0x9c,0xc8,0x50,0x50,0x50,0x51,0x52,0x53,0x53,0x53,0x54,0x54,0x54,0x54,0x54, + 0x54,0x54,0x56,0x56,0x56,0x56,0x57,0x58,0x59,0x5a,0x5a,0x59,0x5a,0x5b,0x5b, + 0x5b,0x5c,0x5d,0x5d,0x5d,0x5d,0x5d,0x5e,0x5e,0x5e,0x5f,0x5f,0x61,0x62,0x62, + 0x63,0x65,0x65,0x65,0x64,0x63,0x63,0x65,0x66,0x68,0x68,0x68,0x69,0x69,0x68, + 0x68,0x68,0x68,0x69,0x6a,0x6b,0x6c,0x6c,0x6d,0x6e,0x6e,0x6e,0x6e,0x6f,0x6f, + 0x70,0x70,0x71,0x71,0x71,0x71,0x72,0x73,0x74,0x74,0x75,0x77,0x77,0x78,0x78, + 0x78,0x78,0x78,0x78,0x78,0x79,0x7a,0x7a,0x7b,0x7b,0x7b,0x7b,0x7b,0x7c,0x7c, + 0x7d,0x7e,0x7e,0x7f,0x80,0x7f,0x7e,0x7e,0x7f,0x81,0x82,0x82,0x81,0x82,0x82, + 0x84,0x84,0x82,0x83,0x84,0x85,0x85,0x85,0x85,0x85,0x85,0x85,0x85,0x86,0x86, + 0x86,0x87,0x87,0x87,0x87,0x87,0x88,0x89,0x8a,0x8a,0x8a,0x8a,0x8b,0x8a,0x8a, + 0x8a,0x8a,0x8b,0x8c,0x8d,0x8d,0x8c,0x8b,0x8d,0x8d,0x8f,0x8f,0x8f,0x8f,0x8f, + 0x8f,0x8f,0x8f,0x90,0x90,0x91,0x91,0x91,0x92,0x92,0x92,0x92,0x93,0x93,0x93, + 0x93,0x94,0x94,0x95,0x95,0x95,0x95,0x95,0x97,0x97,0x97,0x96,0x96,0x97,0x97, + 0x97,0x98,0x98,0x98,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x9a,0x9a,0x9b, + 0x9b,0x9c,0x9c,0x9c,0x9c,0x9c,0x9c,0x9c,0x9c,0x9c,0x9c,0x9d,0x9d,0x9d,0x9d, + 0x9d,0x9d,0x9e,0x9e,0x9e,0x9e,0x9e,0x9f,0x9f,0xa0,0xa0,0xa0,0xa0,0xa0,0xa1, + 0xa2,0xa1,0xa1,0xa1,0xa2,0xa2,0xa3,0xa3,0xa3,0xa3,0xa2,0xa2,0xa2,0xa3,0xa3, + 0xa3,0xa4,0xa4,0xa5,0xa5,0xa5,0xa5,0xa5,0xa5,0xa6,0xa6,0xa6,0xa7,0xa7,0xa7, + 0xa7,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa9,0xa9,0xa9,0xaa,0xa7,0xa5,0xa8, + 0xaa,0xab,0xa9,0xa7,0xaa,0xac,0xae,0xa8,0xa8,0xc4,0x8c,0x17,0x00,0x1c,0x9b, + 0xc8,0xad,0xa8,0xa7,0xaa,0xae,0xb1,0xae,0xac,0xac,0xac,0xac,0xad,0xad,0xae, + 0xae,0xae,0xae,0xae,0xae,0xae,0xae,0xae,0xae,0xae,0xae,0xae,0xb0,0xb0,0xb0, + 0xaf,0xae,0xad,0xad,0xae,0xaf,0xaf,0xaf,0xae,0xad,0xaf,0xb1,0xb1,0xb0,0xb0, + 0xb2,0xb3,0xb0,0xab,0xa8,0xb9,0xc2,0xb3,0x6d,0x04,0x00,0x06,0x01,0x00,0x03, + 0x02,0x02,0x03,0x03,0x02,0x03,0x03,0x03,0x03,0x00,0x01,0x01,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x01,0x03,0x03,0x00,0x00,0x02,0x02,0x01,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x04,0x00,0x03,0x06, + 0x04,0x00,0x00,0x29,0x67,0xb3,0xc5,0xa8,0xaa,0xb0,0xb2,0xb5,0xab,0x48,0x00, + 0x00,0x03,0x05,0x04,0x03,0x05,0x03,0x00,0x00,0x19,0x84,0xb7,0xc1,0xb4,0xa9, + 0xae,0xb0,0xb2,0xb0,0xaf,0xaf,0xaf,0xb0,0xb0,0xb0,0xb0,0xaf,0xae,0xad,0xac, + 0xac,0xab,0xaa,0xab,0xaa,0xaa,0xa9,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa9,0xaa, + 0xaa,0xae,0xaf,0xb0,0xb0,0xb0,0xaf,0xaf,0xaf,0xaf,0xae,0xae,0xae,0xae,0xae, + 0xae,0xad,0xac,0xac,0xab,0xaa,0xa9,0xa8,0xa7,0xa7,0xa6,0xa5,0xa6,0xa7,0xa7, + 0xa5,0xa4,0xa3,0xa3,0xa2,0xa0,0x9e,0x9b,0x98,0x97,0x96,0x96,0x95,0x95,0x94, + 0x94,0x94,0x93,0xc8,0x4d,0x4d,0x4e,0x4f,0x50,0x51,0x52,0x53,0x53,0x53,0x53, + 0x53,0x53,0x54,0x55,0x56,0x57,0x56,0x56,0x57,0x58,0x59,0x5a,0x5a,0x5a,0x5a, + 0x5b,0x5b,0x5c,0x5d,0x5e,0x5e,0x5d,0x5c,0x5c,0x5d,0x5d,0x5e,0x5e,0x5e,0x5f, + 0x60,0x61,0x63,0x65,0x65,0x65,0x64,0x63,0x63,0x64,0x65,0x67,0x68,0x68,0x69, + 0x69,0x68,0x67,0x67,0x68,0x69,0x69,0x6b,0x6c,0x6d,0x6d,0x6e,0x6e,0x6e,0x6e, + 0x6e,0x6f,0x70,0x70,0x71,0x71,0x71,0x71,0x71,0x72,0x73,0x74,0x75,0x77,0x78, + 0x78,0x78,0x78,0x78,0x77,0x76,0x76,0x78,0x78,0x79,0x7a,0x7b,0x7b,0x7b,0x7b, + 0x7b,0x7c,0x7d,0x7e,0x7f,0x7f,0x7f,0x80,0x80,0x80,0x7f,0x7f,0x80,0x82,0x82, + 0x83,0x83,0x82,0x82,0x82,0x83,0x84,0x86,0x86,0x86,0x86,0x86,0x86,0x86,0x86, + 0x87,0x87,0x87,0x87,0x87,0x87,0x87,0x87,0x88,0x89,0x8a,0x8a,0x8b,0x8c,0x8c, + 0x8b,0x8a,0x8a,0x8a,0x8a,0x8b,0x8c,0x8c,0x8b,0x8b,0x8c,0x8d,0x8f,0x8f,0x8f, + 0x8f,0x8f,0x8f,0x8f,0x90,0x90,0x90,0x91,0x91,0x91,0x92,0x92,0x93,0x93,0x93, + 0x94,0x94,0x94,0x94,0x95,0x95,0x95,0x95,0x95,0x95,0x97,0x97,0x97,0x96,0x96, + 0x96,0x96,0x97,0x98,0x98,0x98,0x98,0x99,0x99,0x99,0x99,0x99,0x99,0x9a,0x9a, + 0x9b,0x9b,0x9b,0x9c,0x9c,0x9c,0x9c,0x9c,0x9c,0x9c,0x9d,0x9d,0x9d,0x9d,0x9d, + 0x9e,0x9e,0x9e,0x9e,0x9e,0x9e,0x9e,0x9e,0x9e,0x9e,0x9f,0xa0,0xa0,0xa0,0xa0, + 0xa1,0xa2,0xa2,0xa2,0xa2,0xa2,0xa2,0xa3,0xa3,0xa3,0xa3,0xa3,0xa3,0xa3,0xa3, + 0xa3,0xa3,0xa3,0xa4,0xa4,0xa5,0xa5,0xa5,0xa6,0xa6,0xa6,0xa7,0xa7,0xa7,0xa7, + 0xa7,0xa7,0xa7,0xa7,0xa7,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xaa,0xac,0xaa, + 0xa7,0xa9,0xab,0xac,0xa9,0xa7,0xa9,0xab,0xac,0xa5,0xa7,0xc8,0x9e,0x32,0x00, + 0x0f,0x8d,0xc0,0xb1,0xac,0xa9,0xac,0xae,0xaf,0xae,0xad,0xad,0xad,0xad,0xad, + 0xad,0xae,0xae,0xae,0xae,0xae,0xae,0xae,0xae,0xae,0xae,0xae,0xae,0xae,0xaf, + 0xb0,0xb0,0xaf,0xae,0xac,0xad,0xb1,0xb2,0xb0,0xaf,0xb0,0xb2,0xae,0xab,0xae, + 0xaf,0xaf,0xaf,0xaf,0xb0,0xaf,0xae,0xb4,0xb8,0xb9,0x78,0x0a,0x00,0x00,0x03, + 0x03,0x03,0x02,0x02,0x02,0x01,0x00,0x00,0x01,0x01,0x02,0x03,0x00,0x00,0x01, + 0x01,0x01,0x00,0x00,0x02,0x03,0x02,0x00,0x00,0x02,0x04,0x05,0x01,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x03, + 0x03,0x04,0x04,0x00,0x00,0x24,0x60,0xb2,0xc7,0xaa,0xa7,0xaa,0xb3,0xb2,0x9d, + 0x41,0x00,0x02,0x03,0x00,0x07,0x09,0x03,0x01,0x01,0x00,0x1c,0x98,0xc4,0xbc, + 0xae,0xa5,0xa8,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xab,0xad,0xad,0xad,0xac,0xab, + 0xaa,0xaa,0xa9,0xa9,0xa8,0xa7,0xa7,0xa6,0xa6,0xa6,0xa7,0xa7,0xa8,0xa9,0xaa, + 0xab,0xad,0xae,0xae,0xae,0xac,0xaa,0xa8,0xa7,0xa5,0xa6,0xa7,0xa9,0xab,0xae, + 0xb1,0xaf,0xab,0xaa,0xaa,0xa8,0xa7,0xa5,0xa3,0xa2,0xa1,0xa0,0x9f,0x9e,0x9e, + 0x9f,0x9e,0x9c,0x9c,0x9b,0x99,0x98,0x96,0x93,0x90,0x8d,0x8b,0x8a,0x87,0x84, + 0x81,0x80,0x81,0x86,0x8a,0xc8,0x4e,0x4e,0x4e,0x4e,0x4f,0x50,0x52,0x53,0x53, + 0x53,0x53,0x53,0x54,0x55,0x56,0x56,0x56,0x56,0x56,0x57,0x57,0x58,0x58,0x58, + 0x59,0x5a,0x5a,0x5a,0x5b,0x5b,0x5c,0x5c,0x5d,0x5d,0x5e,0x5e,0x5e,0x5e,0x5e, + 0x5e,0x5f,0x60,0x61,0x62,0x63,0x65,0x65,0x64,0x63,0x62,0x63,0x65,0x66,0x65, + 0x65,0x66,0x68,0x69,0x69,0x69,0x69,0x69,0x69,0x69,0x6a,0x6a,0x6b,0x6c,0x6d, + 0x6e,0x6e,0x6f,0x70,0x70,0x70,0x71,0x71,0x71,0x70,0x70,0x72,0x73,0x73,0x74, + 0x75,0x77,0x77,0x77,0x78,0x77,0x77,0x77,0x76,0x77,0x78,0x79,0x7a,0x7b,0x7c, + 0x7d,0x7c,0x7b,0x7b,0x7d,0x7e,0x7e,0x7e,0x7e,0x7c,0x7c,0x7f,0x81,0x82,0x82, + 0x82,0x7f,0x82,0x86,0x85,0x83,0x83,0x84,0x85,0x86,0x86,0x86,0x86,0x86,0x86, + 0x86,0x87,0x87,0x87,0x87,0x88,0x89,0x89,0x8a,0x89,0x89,0x89,0x89,0x8a,0x8a, + 0x8a,0x8a,0x8c,0x8d,0x8c,0x8b,0x8c,0x8c,0x8c,0x8c,0x8d,0x8d,0x8d,0x8d,0x8d, + 0x8d,0x8e,0x92,0x91,0x8d,0x8e,0x91,0x92,0x91,0x91,0x91,0x91,0x92,0x92,0x93, + 0x92,0x92,0x94,0x95,0x94,0x95,0x96,0x94,0x94,0x96,0x96,0x96,0x95,0x97,0x98, + 0x96,0x94,0x95,0x96,0x95,0x97,0x98,0x98,0x98,0x98,0x98,0x99,0x98,0x98,0x98, + 0x99,0x9a,0x9b,0x9c,0x9c,0x9c,0x9c,0x9c,0x9c,0x9c,0x9c,0x9c,0x9c,0x9d,0x9d, + 0x9d,0x9d,0x9d,0x9e,0x9e,0x9e,0x9e,0x9f,0x9f,0x9f,0x9e,0x9f,0x9f,0x9f,0x9f, + 0xa0,0xa0,0xa0,0xa1,0xa2,0xa2,0xa3,0xa3,0xa3,0xa3,0xa3,0xa3,0xa3,0xa3,0xa3, + 0xa3,0xa3,0xa3,0xa3,0xa4,0xa4,0xa5,0xa6,0xa6,0xa6,0xa6,0xa6,0xa7,0xa7,0xa7, + 0xa7,0xa7,0xa7,0xa7,0xa7,0xa7,0xa7,0xa7,0xa8,0xa8,0xa8,0xa8,0xa9,0xa9,0xaa, + 0xab,0xaa,0xa7,0xa8,0xaa,0xac,0xaa,0xa7,0xaa,0xac,0xaa,0xa3,0xa6,0xc8,0xa5, + 0x46,0x09,0x0b,0x82,0xb9,0xb5,0xac,0xa6,0xae,0xb0,0xae,0xad,0xac,0xac,0xac, + 0xac,0xad,0xad,0xae,0xae,0xae,0xae,0xae,0xae,0xae,0xad,0xae,0xae,0xae,0xad, + 0xac,0xad,0xae,0xb1,0xb0,0xae,0xad,0xad,0xae,0xb2,0xb3,0xb0,0xb0,0xb4,0xb1, + 0xad,0xab,0xad,0xb2,0xb2,0xb0,0xb0,0xb0,0xb0,0xae,0xb1,0xc4,0x91,0x2c,0x07, + 0x00,0x03,0x05,0x02,0x00,0x00,0x02,0x01,0x00,0x00,0x02,0x02,0x02,0x01,0x02, + 0x01,0x01,0x01,0x01,0x00,0x01,0x02,0x02,0x02,0x00,0x00,0x02,0x03,0x03,0x01, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x01,0x01,0x02,0x03,0x03,0x00,0x00,0x20,0x5a,0xae,0xc5,0xa8,0xa3,0xa7,0xb6, + 0xb2,0x96,0x3c,0x00,0x03,0x05,0x01,0x03,0x06,0x05,0x04,0x03,0x00,0x1b,0x9a, + 0xc5,0xb9,0xad,0xa6,0xaa,0xaa,0xa9,0xa9,0xa8,0xa7,0xa7,0xa7,0xa7,0xa7,0xa7, + 0xa7,0xa7,0xa7,0xa7,0xa7,0xa7,0xa7,0xa7,0xa8,0xa8,0xa8,0xa8,0xa8,0xaa,0xab, + 0xac,0xae,0xae,0xae,0xae,0xad,0xab,0xa9,0xa7,0xa7,0xa7,0xa7,0xa8,0xa7,0xa7, + 0xa7,0xa7,0xa9,0xa7,0xa4,0xa3,0xa3,0xa3,0xa3,0xa3,0xa3,0xa3,0xa3,0xa3,0xa3, + 0xa3,0xa2,0xa2,0xa2,0xa2,0xa0,0x9d,0x9c,0x9c,0x9c,0x9c,0x9b,0x9a,0x99,0x98, + 0x98,0x98,0x95,0x92,0x90,0x91,0x93,0xc8,0x4f,0x4f,0x4e,0x4e,0x4f,0x50,0x52, + 0x53,0x53,0x53,0x53,0x53,0x55,0x56,0x56,0x55,0x55,0x56,0x56,0x57,0x57,0x57, + 0x57,0x57,0x58,0x59,0x5a,0x5a,0x5a,0x5a,0x5a,0x5b,0x5d,0x5e,0x5e,0x5e,0x5e, + 0x5f,0x5f,0x5f,0x60,0x60,0x61,0x62,0x62,0x63,0x64,0x63,0x62,0x62,0x62,0x64, + 0x65,0x65,0x64,0x65,0x67,0x69,0x6a,0x6a,0x69,0x69,0x68,0x68,0x69,0x69,0x69, + 0x6a,0x6c,0x6d,0x6e,0x6f,0x6f,0x6f,0x70,0x70,0x71,0x71,0x70,0x70,0x72,0x72, + 0x73,0x74,0x74,0x74,0x75,0x76,0x76,0x77,0x77,0x77,0x77,0x77,0x78,0x78,0x79, + 0x7a,0x7c,0x7e,0x7e,0x7b,0x79,0x7c,0x7e,0x7c,0x7d,0x7e,0x7d,0x7e,0x7f,0x81, + 0x82,0x82,0x81,0x7e,0x82,0x87,0x86,0x84,0x83,0x84,0x85,0x86,0x86,0x86,0x85, + 0x85,0x86,0x86,0x87,0x87,0x87,0x88,0x89,0x8a,0x8a,0x8a,0x8a,0x8a,0x89,0x89, + 0x89,0x89,0x89,0x89,0x8c,0x8d,0x8d,0x8d,0x8d,0x8c,0x8c,0x8d,0x8d,0x8d,0x8d, + 0x8d,0x8b,0x8c,0x8f,0x93,0x92,0x8c,0x8e,0x92,0x93,0x92,0x90,0x90,0x91,0x91, + 0x92,0x93,0x93,0x93,0x94,0x95,0x94,0x95,0x96,0x94,0x94,0x95,0x96,0x96,0x95, + 0x97,0x98,0x95,0x94,0x96,0x96,0x95,0x98,0x98,0x98,0x98,0x98,0x98,0x99,0x98, + 0x98,0x98,0x99,0x9b,0x9c,0x9c,0x9c,0x9c,0x9c,0x9c,0x9c,0x9c,0x9c,0x9c,0x9c, + 0x9d,0x9d,0x9d,0x9d,0x9d,0x9e,0x9e,0x9e,0x9e,0x9f,0x9f,0x9f,0x9f,0x9f,0x9f, + 0x9f,0x9f,0xa0,0xa0,0xa0,0xa1,0xa1,0xa3,0xa3,0xa3,0xa3,0xa3,0xa3,0xa3,0xa3, + 0xa3,0xa3,0xa3,0xa3,0xa3,0xa5,0xa5,0xa5,0xa6,0xa6,0xa6,0xa6,0xa6,0xa7,0xa7, + 0xa7,0xa7,0xa8,0xa7,0xa7,0xa7,0xa7,0xa7,0xa7,0xa7,0xa8,0xa8,0xa8,0xa9,0xa9, + 0xa9,0xaa,0xaa,0xaa,0xa8,0xa8,0xaa,0xac,0xaa,0xa8,0xac,0xad,0xaa,0xa3,0xa7, + 0xc7,0xaa,0x58,0x14,0x0b,0x78,0xb2,0xb9,0xae,0xa5,0xae,0xb1,0xae,0xad,0xac, + 0xac,0xac,0xac,0xad,0xad,0xae,0xae,0xae,0xae,0xae,0xae,0xad,0xad,0xae,0xaf, + 0xae,0xad,0xac,0xac,0xae,0xb0,0xb0,0xae,0xad,0xac,0xab,0xaf,0xb2,0xb0,0xb0, + 0xb3,0xb2,0xaf,0xac,0xae,0xb3,0xb2,0xb0,0xb0,0xb1,0xb2,0xab,0xac,0xc8,0xa8, + 0x57,0x1d,0x00,0x03,0x05,0x02,0x01,0x01,0x02,0x02,0x00,0x02,0x03,0x02,0x01, + 0x00,0x02,0x03,0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01, + 0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x01,0x01,0x00,0x01,0x02,0x03,0x00,0x00,0x1d,0x56,0xad,0xc5,0xa9,0xa3, + 0xa8,0xbb,0xb4,0x90,0x38,0x00,0x03,0x06,0x02,0x01,0x02,0x06,0x07,0x06,0x00, + 0x1a,0x98,0xc4,0xb9,0xaf,0xaa,0xae,0xae,0xaa,0xaa,0xaa,0xa8,0xa7,0xa7,0xa7, + 0xa7,0xa7,0xa7,0xa7,0xa8,0xa9,0xa9,0xa9,0xaa,0xaa,0xab,0xad,0xad,0xad,0xac, + 0xad,0xae,0xb0,0xb1,0xb0,0xaf,0xad,0xac,0xab,0xa8,0xa7,0xa7,0xaa,0xab,0xab, + 0xaa,0xa7,0xa5,0xa4,0xa5,0xa5,0xa4,0xa3,0xa4,0xa4,0xa5,0xa7,0xa7,0xa9,0xaa, + 0xaa,0xaa,0xaa,0xa9,0xa8,0xa9,0xaa,0xa7,0xa5,0xa5,0xa6,0xa7,0xa7,0xa7,0xa7, + 0xa8,0xa8,0xa9,0xa9,0xaa,0xa7,0xa3,0xa0,0x9f,0xc8,0x4f,0x4f,0x4e,0x4e,0x4f, + 0x50,0x53,0x53,0x53,0x53,0x53,0x53,0x55,0x56,0x55,0x55,0x55,0x56,0x57,0x57, + 0x58,0x58,0x58,0x58,0x59,0x5a,0x5a,0x5c,0x5c,0x5a,0x5a,0x5b,0x5e,0x5f,0x5f, + 0x5e,0x5c,0x5d,0x5e,0x61,0x60,0x5f,0x60,0x61,0x62,0x63,0x63,0x63,0x62,0x62, + 0x62,0x64,0x65,0x65,0x64,0x65,0x66,0x68,0x69,0x69,0x68,0x68,0x69,0x69,0x69, + 0x6a,0x6b,0x6b,0x6d,0x6d,0x6d,0x6d,0x6d,0x6d,0x6d,0x6e,0x6f,0x70,0x71,0x72, + 0x71,0x71,0x72,0x73,0x74,0x74,0x74,0x75,0x76,0x76,0x77,0x77,0x77,0x78,0x78, + 0x76,0x76,0x78,0x7b,0x7d,0x7d,0x7b,0x7a,0x7b,0x7c,0x7b,0x7c,0x7f,0x88,0x89, + 0x81,0x7f,0x7f,0x7c,0x7e,0x81,0x85,0x87,0x83,0x82,0x82,0x83,0x84,0x85,0x85, + 0x85,0x85,0x85,0x86,0x86,0x86,0x87,0x87,0x88,0x88,0x89,0x89,0x89,0x89,0x89, + 0x89,0x89,0x89,0x8a,0x8a,0x8a,0x8b,0x8c,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d, + 0x8d,0x8d,0x8d,0x8d,0x8e,0x91,0x90,0x90,0x90,0x91,0x91,0x92,0x91,0x90,0x91, + 0x93,0x91,0x92,0x95,0x96,0x95,0x94,0x93,0x95,0x95,0x95,0x98,0x97,0x95,0x95, + 0x95,0x97,0x97,0x95,0x96,0x98,0x98,0x98,0x98,0x98,0x98,0x98,0x99,0x9b,0x9b, + 0x9b,0x9a,0x99,0x99,0x9a,0x9b,0x9c,0x9c,0x9c,0x9c,0x9c,0x9c,0x9c,0x9d,0x9d, + 0x9d,0x9d,0x9d,0x9e,0x9e,0x9e,0x9f,0x9f,0x9f,0x9f,0x9f,0x9f,0x9f,0xa0,0xa0, + 0xa0,0xa0,0xa0,0xa0,0xa0,0xa0,0xa1,0xa1,0xa2,0xa3,0xa3,0xa3,0xa3,0xa3,0xa4, + 0xa4,0xa4,0xa4,0xa4,0xa4,0xa4,0xa5,0xa5,0xa6,0xa6,0xa6,0xa7,0xa7,0xa7,0xa7, + 0xa7,0xa7,0xa8,0xa8,0xa8,0xa8,0xa7,0xa7,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa9, + 0xa9,0xa9,0xa9,0xaa,0xab,0xaa,0xa8,0xaa,0xaa,0xab,0xaa,0xaa,0xab,0xad,0xac, + 0xa5,0xa7,0xc6,0xae,0x65,0x1c,0x0a,0x70,0xad,0xc0,0xb5,0xa8,0xad,0xaf,0xae, + 0xae,0xae,0xae,0xae,0xae,0xae,0xae,0xae,0xae,0xaf,0xae,0xae,0xae,0xae,0xaf, + 0xaf,0xaf,0xaf,0xaf,0xb0,0xae,0xae,0xae,0xb0,0xb1,0xab,0xa8,0xa8,0xa9,0xaa, + 0xae,0xb0,0xae,0xae,0xb0,0xb3,0xb3,0xae,0xae,0xae,0xb2,0xb3,0xb2,0xaa,0xaa, + 0xc1,0xb5,0x86,0x34,0x00,0x02,0x05,0x03,0x05,0x06,0x02,0x01,0x03,0x03,0x02, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00, + 0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x01,0x03,0x03,0x06,0x02,0x00,0x1b,0x53,0xad,0xc8, + 0xad,0xa7,0xac,0xc0,0xb5,0x89,0x35,0x00,0x03,0x05,0x02,0x01,0x02,0x04,0x07, + 0x09,0x00,0x1a,0x98,0xc3,0xba,0xb5,0xb2,0xb5,0xb4,0xb0,0xae,0xae,0xaf,0xaf, + 0xae,0xae,0xae,0xae,0xae,0xae,0xaf,0xb0,0xb0,0xb1,0xb0,0xaf,0xb0,0xb2,0xb2, + 0xb2,0xb1,0xb1,0xb1,0xb2,0xb2,0xaf,0xad,0xaa,0xac,0xae,0xac,0xaa,0xa9,0xaa, + 0xab,0xab,0xab,0xaa,0xaa,0xaa,0xab,0xae,0xb1,0xb1,0xb1,0xb0,0xb0,0xb1,0xb1, + 0xb2,0xb2,0xb2,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb2,0xb2,0xb1,0xb1,0xb1,0xb0, + 0xae,0xaa,0xad,0xaf,0xaa,0xaa,0xae,0xb2,0xb4,0xaf,0xa8,0xc8,0x4e,0x4e,0x4d, + 0x4d,0x4e,0x50,0x51,0x52,0x52,0x52,0x52,0x53,0x53,0x54,0x54,0x54,0x54,0x55, + 0x56,0x57,0x57,0x57,0x57,0x57,0x58,0x58,0x59,0x5c,0x5c,0x5a,0x59,0x5a,0x5e, + 0x5f,0x5e,0x5d,0x5b,0x5c,0x5e,0x61,0x60,0x5f,0x60,0x61,0x62,0x62,0x63,0x63, + 0x62,0x62,0x62,0x64,0x65,0x64,0x64,0x65,0x66,0x67,0x67,0x67,0x67,0x68,0x69, + 0x69,0x6a,0x6b,0x6b,0x6b,0x6c,0x6d,0x6e,0x6d,0x6d,0x6d,0x6d,0x6e,0x6f,0x70, + 0x71,0x72,0x71,0x71,0x72,0x72,0x73,0x74,0x74,0x75,0x75,0x76,0x77,0x77,0x77, + 0x78,0x78,0x74,0x76,0x79,0x7b,0x7b,0x7a,0x7b,0x7c,0x7e,0x7d,0x7a,0x7e,0x83, + 0x86,0x84,0x7f,0x7e,0x7f,0x7c,0x7e,0x82,0x84,0x83,0x82,0x82,0x82,0x83,0x84, + 0x85,0x85,0x85,0x85,0x85,0x86,0x86,0x86,0x86,0x87,0x88,0x88,0x89,0x89,0x89, + 0x89,0x89,0x8a,0x8a,0x8a,0x8b,0x8b,0x8b,0x8b,0x8b,0x8d,0x8d,0x8d,0x8d,0x8d, + 0x8d,0x8d,0x8e,0x8f,0x8f,0x8f,0x90,0x91,0x90,0x90,0x91,0x91,0x91,0x92,0x91, + 0x91,0x92,0x93,0x92,0x93,0x94,0x95,0x95,0x95,0x95,0x95,0x95,0x95,0x98,0x96, + 0x94,0x95,0x96,0x97,0x96,0x95,0x98,0x99,0x98,0x98,0x98,0x98,0x98,0x98,0x99, + 0x9a,0x9a,0x9b,0x9a,0x99,0x99,0x9a,0x9b,0x9c,0x9c,0x9c,0x9c,0x9c,0x9c,0x9c, + 0x9d,0x9d,0x9d,0x9d,0x9e,0x9f,0x9e,0x9f,0x9f,0xa0,0x9f,0xa0,0x9f,0x9f,0x9f, + 0xa0,0xa0,0xa0,0xa0,0xa0,0xa0,0xa0,0xa1,0xa1,0xa2,0xa3,0xa3,0xa3,0xa3,0xa3, + 0xa3,0xa4,0xa4,0xa4,0xa4,0xa4,0xa4,0xa5,0xa5,0xa6,0xa6,0xa6,0xa7,0xa7,0xa7, + 0xa7,0xa7,0xa7,0xa7,0xa7,0xa8,0xa8,0xa7,0xa7,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8, + 0xa8,0xa9,0xa9,0xa9,0xaa,0xaa,0xab,0xa9,0xa7,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa, + 0xac,0xad,0xa7,0xa7,0xc3,0xb2,0x78,0x27,0x07,0x62,0xa3,0xc4,0xb8,0xa7,0xad, + 0xaf,0xae,0xaf,0xb0,0xaf,0xae,0xae,0xae,0xae,0xae,0xaf,0xaf,0xaf,0xae,0xae, + 0xaf,0xaf,0xb0,0xaf,0xae,0xaf,0xb1,0xb1,0xb1,0xaf,0xae,0xae,0xab,0xaf,0xbb, + 0xbb,0xb6,0xb2,0xaf,0xaf,0xae,0xaf,0xb3,0xb4,0xb0,0xae,0xae,0xb1,0xb2,0xb2, + 0xac,0xaa,0xb7,0xbc,0xad,0x48,0x00,0x00,0x04,0x01,0x03,0x05,0x03,0x03,0x03, + 0x03,0x02,0x02,0x01,0x00,0x00,0x02,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x02,0x02,0x03,0x06,0x03,0x00,0x1b,0x51, + 0xae,0xc8,0xae,0xaa,0xaf,0xc5,0xb4,0x80,0x31,0x00,0x03,0x05,0x02,0x02,0x02, + 0x03,0x05,0x06,0x00,0x1d,0x9e,0xc8,0xba,0xb5,0xb3,0xb6,0xb5,0xb4,0xb3,0xb3, + 0xb5,0xb5,0xb4,0xb3,0xb3,0xb3,0xb3,0xb4,0xb5,0xb5,0xb5,0xb5,0xb5,0xb4,0xb4, + 0xb5,0xb6,0xb6,0xb5,0xb5,0xb6,0xb7,0xb7,0xb5,0xb3,0xb1,0xb4,0xb6,0xb5,0xb3, + 0xb2,0xb3,0xb4,0xb5,0xb5,0xb5,0xb5,0xb5,0xb6,0xb8,0xb9,0xb9,0xb8,0xb8,0xb7, + 0xb6,0xb5,0xb5,0xb5,0xb4,0xb3,0xb2,0xb2,0xb1,0xaf,0xae,0xb0,0xb0,0xaf,0xae, + 0xac,0xac,0xaa,0xa8,0xa8,0xa7,0xa3,0xa3,0xa7,0xa7,0xa4,0x9d,0x97,0xc8,0x4c, + 0x4c,0x4c,0x4c,0x4c,0x4e,0x4f,0x50,0x50,0x50,0x50,0x51,0x53,0x53,0x53,0x53, + 0x53,0x53,0x54,0x55,0x56,0x56,0x56,0x56,0x56,0x56,0x57,0x5a,0x5a,0x59,0x59, + 0x5a,0x5c,0x5e,0x5e,0x5c,0x5b,0x5c,0x5e,0x60,0x5f,0x5f,0x60,0x61,0x62,0x62, + 0x63,0x63,0x62,0x62,0x63,0x63,0x64,0x64,0x65,0x65,0x65,0x66,0x66,0x66,0x67, + 0x68,0x69,0x69,0x6a,0x6c,0x6b,0x6a,0x6c,0x6d,0x6f,0x6f,0x6f,0x6f,0x6f,0x70, + 0x70,0x70,0x71,0x71,0x71,0x71,0x71,0x71,0x72,0x74,0x74,0x74,0x75,0x76,0x77, + 0x77,0x78,0x79,0x78,0x74,0x76,0x7b,0x7b,0x7a,0x76,0x79,0x7e,0x7f,0x7e,0x7c, + 0x80,0x82,0x74,0x71,0x7d,0x81,0x81,0x7f,0x80,0x83,0x81,0x7f,0x82,0x83,0x82, + 0x83,0x84,0x85,0x85,0x85,0x85,0x85,0x86,0x86,0x86,0x86,0x86,0x88,0x88,0x89, + 0x89,0x89,0x8a,0x8a,0x8a,0x8b,0x8b,0x8c,0x8c,0x8d,0x8c,0x8c,0x8d,0x8e,0x8f, + 0x8e,0x8e,0x8e,0x8e,0x8f,0x90,0x91,0x91,0x91,0x91,0x91,0x91,0x92,0x91,0x91, + 0x91,0x92,0x93,0x92,0x91,0x93,0x94,0x92,0x92,0x93,0x95,0x96,0x96,0x97,0x97, + 0x95,0x95,0x95,0x96,0x97,0x96,0x96,0x97,0x98,0x98,0x99,0x98,0x98,0x98,0x98, + 0x99,0x98,0x96,0x98,0x9a,0x99,0x98,0x98,0x99,0x9a,0x9b,0x9b,0x9c,0x9c,0x9c, + 0x9d,0x9d,0x9d,0x9d,0x9d,0x9e,0x9f,0x9f,0x9f,0x9f,0xa0,0xa0,0xa0,0xa0,0xa0, + 0x9f,0x9f,0xa0,0xa0,0xa0,0xa1,0xa1,0xa1,0xa1,0xa1,0xa2,0xa3,0xa3,0xa3,0xa3, + 0xa3,0xa3,0xa3,0xa4,0xa4,0xa4,0xa4,0xa4,0xa5,0xa5,0xa5,0xa6,0xa6,0xa7,0xa7, + 0xa7,0xa7,0xa7,0xa7,0xa7,0xa7,0xa7,0xa7,0xa7,0xa7,0xa7,0xa8,0xa8,0xa8,0xa8, + 0xa8,0xa8,0xa8,0xa9,0xaa,0xaa,0xaa,0xaa,0xaa,0xa8,0xa7,0xaa,0xaa,0xa9,0xaa, + 0xaa,0xaa,0xaa,0xac,0xa7,0xa7,0xbd,0xb7,0x90,0x33,0x03,0x4e,0x95,0xc6,0xb8, + 0xa3,0xae,0xb0,0xad,0xae,0xb0,0xaf,0xaf,0xae,0xae,0xae,0xae,0xae,0xaf,0xaf, + 0xaf,0xae,0xae,0xae,0xaf,0xb0,0xae,0xae,0xae,0xb2,0xb4,0xb2,0xac,0xa8,0xae, + 0xb9,0xc6,0xc6,0xbf,0xb5,0xb0,0xb2,0xb1,0xae,0xaf,0xb2,0xb5,0xb2,0xae,0xae, + 0xb0,0xb1,0xae,0xad,0xac,0xbb,0xc8,0x5d,0x00,0x00,0x03,0x00,0x00,0x00,0x03, + 0x03,0x02,0x01,0x02,0x05,0x03,0x00,0x02,0x03,0x03,0x02,0x01,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x03,0x01,0x00,0x00,0x03,0x02,0x01, + 0x1a,0x4f,0xad,0xc8,0xae,0xaa,0xb2,0xc7,0xb2,0x77,0x2b,0x00,0x04,0x07,0x03, + 0x02,0x02,0x04,0x03,0x00,0x00,0x23,0xa8,0xc8,0xba,0xb3,0xb1,0xb3,0xb5,0xb5, + 0xb6,0xb7,0xb8,0xb8,0xb7,0xb6,0xb6,0xb5,0xb5,0xb6,0xb7,0xb7,0xb7,0xb7,0xb7, + 0xb6,0xb6,0xb8,0xb8,0xb8,0xb8,0xb9,0xba,0xbc,0xbd,0xbd,0xbc,0xbb,0xbc,0xbd, + 0xbd,0xbd,0xbc,0xbd,0xbd,0xbf,0xc0,0xc0,0xc0,0xbf,0xc0,0xbd,0xb9,0xb9,0xb8, + 0xb7,0xb5,0xb4,0xb2,0xb2,0xb1,0xaf,0xae,0xae,0xac,0xa7,0xa5,0xa4,0xa3,0xa3, + 0xa4,0xa2,0x9f,0x9f,0xa0,0xa1,0x9c,0x98,0x97,0x97,0x97,0x90,0x86,0x7c,0x7a, + 0xc8,0x4c,0x4c,0x4c,0x4c,0x4c,0x4e,0x50,0x50,0x50,0x51,0x51,0x52,0x53,0x53, + 0x53,0x53,0x53,0x53,0x54,0x55,0x56,0x56,0x56,0x56,0x56,0x56,0x57,0x58,0x59, + 0x58,0x59,0x5a,0x5a,0x5b,0x5b,0x5c,0x5c,0x5d,0x5e,0x5e,0x5e,0x5f,0x5f,0x60, + 0x61,0x62,0x62,0x63,0x62,0x62,0x62,0x63,0x63,0x64,0x65,0x65,0x65,0x65,0x65, + 0x65,0x66,0x67,0x68,0x69,0x69,0x6a,0x6a,0x6a,0x6b,0x6d,0x6e,0x70,0x70,0x70, + 0x70,0x70,0x70,0x70,0x70,0x70,0x70,0x71,0x71,0x72,0x72,0x73,0x74,0x74,0x75, + 0x76,0x76,0x77,0x78,0x78,0x78,0x76,0x76,0x78,0x78,0x7a,0x7d,0x7c,0x7a,0x74, + 0x79,0x8a,0x80,0x69,0x46,0x52,0x8d,0x8f,0x7f,0x7d,0x7e,0x81,0x81,0x80,0x80, + 0x80,0x82,0x82,0x83,0x84,0x84,0x84,0x84,0x85,0x85,0x86,0x86,0x86,0x86,0x87, + 0x88,0x88,0x88,0x89,0x8a,0x8a,0x8a,0x8b,0x8b,0x8c,0x8c,0x8d,0x8c,0x8c,0x8d, + 0x8e,0x8f,0x8f,0x8e,0x8e,0x8f,0x8f,0x90,0x91,0x91,0x8f,0x8e,0x92,0x92,0x8f, + 0x8f,0x8f,0x8f,0x91,0x94,0x91,0x8e,0x93,0x95,0x93,0x91,0x90,0x90,0x92,0x97, + 0x98,0x96,0x94,0x95,0x97,0x96,0x96,0x99,0x99,0x97,0x92,0x91,0x99,0x9b,0x98, + 0x98,0x98,0x96,0x98,0x99,0x9a,0x99,0x98,0x98,0x98,0x99,0x9a,0x9a,0x9b,0x9c, + 0x9c,0x9c,0x9d,0x9d,0x9c,0x9c,0x9d,0x9d,0x9e,0x9f,0x9f,0x9f,0x9f,0xa0,0xa0, + 0xa0,0x9f,0x9f,0x9f,0xa0,0xa0,0xa0,0xa1,0xa1,0xa2,0xa2,0xa2,0xa2,0xa3,0xa3, + 0xa3,0xa3,0xa3,0xa3,0xa3,0xa3,0xa3,0xa3,0xa4,0xa4,0xa5,0xa5,0xa5,0xa5,0xa6, + 0xa6,0xa6,0xa6,0xa6,0xa6,0xa6,0xa6,0xa6,0xa7,0xa7,0xa7,0xa7,0xa7,0xa7,0xa7, + 0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa9,0xa9,0xaa,0xaa,0xaa,0xa8,0xa7,0xa9,0xaa, + 0xa9,0xaa,0xaa,0xaa,0xaa,0xac,0xa7,0xa7,0xb7,0xb9,0xa5,0x41,0x00,0x35,0x7d, + 0xc2,0xb6,0xa3,0xaf,0xb2,0xac,0xad,0xae,0xae,0xae,0xad,0xad,0xae,0xae,0xae, + 0xae,0xaf,0xaf,0xae,0xae,0xac,0xac,0xae,0xb3,0xb0,0xac,0xae,0xb1,0xb4,0xae, + 0xa9,0xc0,0xae,0x6a,0x63,0x7d,0xaa,0xbd,0xb1,0xaf,0xb0,0xac,0xae,0xb5,0xb4, + 0xb0,0xae,0xad,0xad,0xb0,0xb2,0xac,0xb7,0xc6,0x7f,0x31,0x0a,0x00,0x04,0x03, + 0x03,0x04,0x03,0x00,0x00,0x01,0x04,0x03,0x00,0x01,0x01,0x01,0x01,0x02,0x01, + 0x00,0x00,0x00,0x00,0x00,0x01,0x02,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x00,0x00,0x03, + 0x01,0x00,0x12,0x43,0xa8,0xc8,0xb1,0xac,0xb2,0xc7,0xaf,0x71,0x29,0x00,0x05, + 0x08,0x03,0x02,0x02,0x06,0x03,0x00,0x00,0x2b,0xad,0xc8,0xb7,0xb2,0xb2,0xb4, + 0xb5,0xb5,0xb5,0xb5,0xb6,0xb6,0xb5,0xb5,0xb4,0xb3,0xb2,0xb2,0xb2,0xb2,0xb1, + 0xb1,0xb0,0xb0,0xaf,0xaf,0xaf,0xae,0xae,0xae,0xae,0xaf,0xb1,0xb1,0xb1,0xb0, + 0xb0,0xaf,0xb0,0xaf,0xae,0xae,0xad,0xac,0xac,0xab,0xaa,0xa9,0xa7,0xa3,0xa0, + 0x9f,0x9e,0x9d,0x9c,0x9b,0x99,0x98,0x97,0x96,0x95,0x95,0x94,0x94,0x91,0x8f, + 0x8e,0x8f,0x91,0x92,0x91,0x91,0x91,0x91,0x91,0x8e,0x8f,0x8e,0x8c,0x87,0x82, + 0x7f,0x7f,0xc8,0x4c,0x4c,0x4c,0x4c,0x4d,0x4e,0x50,0x50,0x50,0x51,0x51,0x52, + 0x52,0x53,0x53,0x53,0x53,0x54,0x54,0x55,0x55,0x56,0x56,0x56,0x56,0x56,0x56, + 0x56,0x57,0x58,0x59,0x5a,0x5a,0x5a,0x5a,0x5c,0x5e,0x5e,0x5d,0x5c,0x5e,0x5e, + 0x5f,0x5f,0x60,0x61,0x62,0x62,0x62,0x62,0x62,0x62,0x62,0x64,0x65,0x65,0x65, + 0x65,0x65,0x65,0x66,0x66,0x67,0x67,0x68,0x68,0x69,0x6a,0x6b,0x6c,0x6d,0x6e, + 0x6f,0x6f,0x6f,0x6f,0x6f,0x70,0x70,0x70,0x70,0x70,0x71,0x71,0x72,0x73,0x74, + 0x74,0x74,0x75,0x75,0x76,0x76,0x78,0x78,0x78,0x77,0x75,0x76,0x79,0x7f,0x7d, + 0x77,0x6d,0x78,0x95,0x7c,0x4f,0x26,0x3f,0x97,0x97,0x7d,0x7b,0x7c,0x7f,0x81, + 0x82,0x7f,0x7f,0x80,0x82,0x82,0x82,0x83,0x83,0x83,0x84,0x85,0x85,0x86,0x86, + 0x86,0x86,0x87,0x86,0x87,0x88,0x89,0x8a,0x8a,0x8a,0x8a,0x8a,0x8b,0x8b,0x8b, + 0x8c,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x8e,0x8f,0x8f,0x8f,0x8f,0x8d,0x8d,0x93, + 0x94,0x8d,0x8d,0x90,0x8e,0x90,0x95,0x91,0x8d,0x93,0x95,0x93,0x90,0x8d,0x8c, + 0x90,0x97,0x98,0x95,0x91,0x93,0x99,0x96,0x94,0x9a,0x99,0x91,0x8d,0x8d,0x98, + 0x9b,0x98,0x98,0x98,0x95,0x97,0x9c,0x9a,0x99,0x98,0x98,0x98,0x99,0x99,0x9a, + 0x9a,0x9b,0x9b,0x9c,0x9c,0x9c,0x9c,0x9c,0x9c,0x9d,0x9d,0x9e,0x9f,0x9f,0x9f, + 0x9f,0x9f,0x9f,0x9f,0x9f,0x9f,0xa0,0xa0,0xa0,0xa1,0xa2,0xa2,0xa2,0xa2,0xa2, + 0xa2,0xa3,0xa3,0xa3,0xa3,0xa3,0xa3,0xa3,0xa3,0xa3,0xa3,0xa4,0xa5,0xa5,0xa5, + 0xa5,0xa5,0xa5,0xa5,0xa6,0xa6,0xa6,0xa6,0xa6,0xa6,0xa7,0xa7,0xa7,0xa7,0xa7, + 0xa7,0xa7,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa9,0xaa,0xaa,0xaa,0xa9,0xa8, + 0xa9,0xaa,0xa9,0xaa,0xaa,0xaa,0xab,0xab,0xa8,0xa8,0xb2,0xbb,0xb6,0x4e,0x00, + 0x1b,0x65,0xbe,0xb9,0xa5,0xb0,0xb1,0xab,0xac,0xae,0xad,0xac,0xac,0xac,0xad, + 0xae,0xae,0xae,0xaf,0xaf,0xae,0xae,0xac,0xac,0xae,0xb4,0xb2,0xac,0xac,0xae, + 0xb2,0xb1,0xb1,0xc0,0x91,0x1d,0x0e,0x3d,0x9e,0xc8,0xaf,0xae,0xb0,0xac,0xae, + 0xb3,0xb4,0xb2,0xaf,0xad,0xac,0xb1,0xb4,0xac,0xb4,0xc2,0x9c,0x5e,0x12,0x00, + 0x0a,0x07,0x04,0x04,0x03,0x02,0x01,0x01,0x03,0x03,0x02,0x01,0x00,0x00,0x00, + 0x02,0x01,0x00,0x00,0x00,0x00,0x01,0x01,0x02,0x02,0x01,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01, + 0x02,0x03,0x00,0x00,0x0a,0x36,0xa2,0xc8,0xb4,0xae,0xb0,0xc6,0xae,0x70,0x28, + 0x00,0x06,0x09,0x04,0x02,0x02,0x07,0x04,0x00,0x02,0x34,0xae,0xc8,0xb4,0xb3, + 0xb4,0xb5,0xb5,0xb5,0xb4,0xb5,0xb5,0xb5,0xb5,0xb4,0xb3,0xb2,0xb2,0xb0,0xaf, + 0xae,0xae,0xae,0xad,0xac,0xaa,0xaa,0xaa,0xa9,0xa8,0xa7,0xa7,0xa8,0xa9,0xaa, + 0xaa,0xa9,0xa8,0xa7,0xa7,0xa7,0xa6,0xa4,0xa2,0xa0,0xa0,0xa0,0x9f,0x9c,0x9a, + 0x98,0x95,0x95,0x95,0x94,0x93,0x92,0x91,0x91,0x90,0x8f,0x8f,0x8e,0x8f,0x91, + 0x8f,0x8c,0x8d,0x8d,0x90,0x92,0x93,0x93,0x91,0x90,0x91,0x94,0x94,0x93,0x91, + 0x90,0x91,0x92,0x93,0xc8,0x4c,0x4c,0x4c,0x4c,0x4c,0x4d,0x4e,0x4f,0x50,0x50, + 0x50,0x51,0x51,0x52,0x52,0x53,0x53,0x53,0x53,0x53,0x54,0x54,0x54,0x54,0x54, + 0x55,0x55,0x55,0x56,0x58,0x5a,0x5a,0x59,0x59,0x5a,0x5c,0x5e,0x5e,0x5d,0x5b, + 0x5c,0x5e,0x5e,0x5e,0x5e,0x5f,0x60,0x61,0x62,0x62,0x62,0x62,0x61,0x62,0x63, + 0x63,0x63,0x64,0x65,0x65,0x66,0x66,0x66,0x66,0x66,0x65,0x67,0x6b,0x6b,0x6a, + 0x6a,0x6a,0x6b,0x6c,0x6c,0x6d,0x6d,0x6e,0x6e,0x6f,0x6f,0x70,0x70,0x70,0x71, + 0x72,0x73,0x73,0x74,0x74,0x74,0x74,0x74,0x75,0x76,0x76,0x78,0x78,0x78,0x77, + 0x78,0x78,0x78,0x73,0x7c,0x94,0x70,0x3d,0x28,0x45,0x8f,0x91,0x7b,0x7a,0x7b, + 0x7f,0x7f,0x80,0x7f,0x80,0x80,0x81,0x81,0x82,0x82,0x82,0x82,0x82,0x84,0x85, + 0x85,0x85,0x84,0x85,0x85,0x85,0x86,0x86,0x87,0x88,0x88,0x88,0x88,0x89,0x89, + 0x89,0x8a,0x8b,0x8b,0x8b,0x8c,0x8c,0x8c,0x8c,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d, + 0x8d,0x95,0x95,0x8d,0x8f,0x94,0x91,0x91,0x94,0x93,0x92,0x95,0x95,0x92,0x8d, + 0x8b,0x8d,0x91,0x94,0x96,0x95,0x8a,0x8e,0x9d,0x97,0x91,0x98,0x91,0x84,0x8a, + 0x92,0x97,0x98,0x97,0x99,0x9a,0x95,0x95,0x98,0x99,0x99,0x99,0x99,0x99,0x9a, + 0x9a,0x9a,0x9a,0x99,0x99,0x9a,0x9a,0x9b,0x9c,0x9c,0x9c,0x9c,0x9d,0x9d,0x9e, + 0x9e,0x9e,0x9e,0x9e,0x9e,0x9e,0x9f,0x9f,0xa0,0xa0,0xa1,0xa1,0xa2,0xa2,0xa2, + 0xa2,0xa2,0xa2,0xa2,0xa3,0xa3,0xa3,0xa3,0xa3,0xa3,0xa3,0xa3,0xa3,0xa3,0xa4, + 0xa5,0xa5,0xa4,0xa4,0xa5,0xa5,0xa6,0xa6,0xa6,0xa6,0xa6,0xa6,0xa7,0xa7,0xa7, + 0xa7,0xa7,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa9,0xa9,0xa9,0xaa,0xaa,0xaa, + 0xaa,0xa9,0xa9,0xaa,0xaa,0xaa,0xaa,0xac,0xac,0xab,0xaa,0xaa,0xaf,0xbc,0xc1, + 0x57,0x00,0x03,0x4f,0xbe,0xc0,0xac,0xae,0xae,0xad,0xad,0xad,0xac,0xac,0xac, + 0xac,0xac,0xae,0xae,0xae,0xaf,0xaf,0xaf,0xae,0xae,0xb1,0xb1,0xad,0xaf,0xb3, + 0xb2,0xad,0xa7,0xb5,0xc0,0xa2,0x64,0x0d,0x00,0x21,0x97,0xc8,0xaf,0xab,0xae, + 0xb2,0xb2,0xaf,0xaf,0xb1,0xaf,0xb0,0xb2,0xb2,0xaf,0xaa,0xb5,0xc6,0xa9,0x6e, + 0x13,0x00,0x0e,0x07,0x00,0x01,0x06,0x0b,0x09,0x04,0x00,0x02,0x07,0x04,0x02, + 0x01,0x01,0x02,0x02,0x00,0x00,0x00,0x00,0x01,0x02,0x02,0x02,0x01,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x03,0x04,0x02,0x00,0x00,0x03,0x2a,0x9b,0xc8,0xb7,0xae,0xaf,0xc7,0xb0, + 0x73,0x29,0x00,0x06,0x08,0x03,0x01,0x02,0x08,0x06,0x03,0x0d,0x40,0xac,0xc8, + 0xb3,0xb6,0xb9,0xb6,0xb5,0xb5,0xb5,0xb6,0xb5,0xb5,0xb5,0xb5,0xb5,0xb5,0xb5, + 0xb5,0xb5,0xb4,0xb3,0xb3,0xb2,0xaf,0xae,0xae,0xaf,0xaf,0xaf,0xaf,0xb0,0xb0, + 0xb0,0xb0,0xaf,0xaf,0xae,0xae,0xae,0xae,0xad,0xab,0xaa,0xaa,0xab,0xad,0xae, + 0xad,0xac,0xad,0xae,0xae,0xae,0xae,0xae,0xae,0xae,0xae,0xae,0xae,0xae,0xae, + 0xae,0xad,0xaa,0xaa,0xae,0xaf,0xab,0xaa,0xab,0xaf,0xae,0xa7,0xa9,0xac,0xac, + 0xac,0xad,0xae,0xb1,0xb1,0xb1,0xc8,0x4b,0x4b,0x4b,0x4b,0x4c,0x4c,0x4c,0x4d, + 0x4e,0x4f,0x50,0x50,0x50,0x50,0x51,0x51,0x51,0x51,0x52,0x53,0x53,0x54,0x53, + 0x53,0x54,0x54,0x55,0x55,0x57,0x58,0x59,0x59,0x5a,0x5a,0x5b,0x5c,0x5d,0x5d, + 0x5c,0x5b,0x5c,0x5d,0x5d,0x5e,0x5e,0x5e,0x5f,0x60,0x61,0x62,0x62,0x62,0x60, + 0x62,0x63,0x63,0x63,0x64,0x65,0x66,0x66,0x67,0x66,0x66,0x66,0x65,0x67,0x6a, + 0x6a,0x69,0x69,0x69,0x69,0x6a,0x6b,0x6c,0x6d,0x6d,0x6d,0x6d,0x6e,0x6f,0x70, + 0x70,0x70,0x71,0x72,0x73,0x73,0x73,0x73,0x73,0x73,0x74,0x75,0x75,0x76,0x78, + 0x78,0x78,0x78,0x78,0x78,0x73,0x7d,0x94,0x74,0x45,0x2b,0x46,0x8f,0x8d,0x77, + 0x7a,0x7c,0x7e,0x7f,0x7f,0x80,0x81,0x80,0x80,0x81,0x82,0x82,0x82,0x82,0x83, + 0x84,0x84,0x85,0x84,0x84,0x85,0x85,0x85,0x85,0x86,0x87,0x88,0x88,0x88,0x88, + 0x87,0x87,0x88,0x8a,0x8a,0x8a,0x8a,0x8a,0x8a,0x8b,0x8b,0x8d,0x8d,0x8d,0x8d, + 0x8c,0x8c,0x8d,0x91,0x90,0x8b,0x8e,0x93,0x91,0x90,0x8f,0x91,0x94,0x92,0x90, + 0x8e,0x8d,0x8d,0x90,0x92,0x95,0x95,0x93,0x88,0x8d,0x9c,0x92,0x8a,0x94,0x92, + 0x89,0x87,0x8c,0x97,0x98,0x92,0x97,0x99,0x95,0x96,0x9a,0x99,0x98,0x98,0x98, + 0x99,0x99,0x9a,0x9a,0x9a,0x99,0x99,0x99,0x9a,0x9b,0x9c,0x9c,0x9c,0x9c,0x9c, + 0x9d,0x9d,0x9e,0x9e,0x9e,0x9e,0x9d,0x9e,0x9f,0xa0,0xa0,0xa0,0xa1,0xa1,0xa1, + 0xa2,0xa2,0xa2,0xa2,0xa2,0xa2,0xa3,0xa3,0xa3,0xa3,0xa3,0xa3,0xa3,0xa3,0xa3, + 0xa3,0xa4,0xa4,0xa5,0xa4,0xa4,0xa5,0xa6,0xa6,0xa6,0xa6,0xa6,0xa6,0xa6,0xa7, + 0xa7,0xa7,0xa7,0xa7,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa9,0xa9,0xa9,0xaa, + 0xaa,0xaa,0xaa,0xaa,0xa9,0xaa,0xac,0xaa,0xaa,0xac,0xad,0xab,0xaa,0xab,0xae, + 0xbd,0xc8,0x5b,0x00,0x00,0x43,0xc0,0xc5,0xaf,0xaa,0xab,0xaf,0xae,0xad,0xad, + 0xad,0xac,0xac,0xad,0xae,0xae,0xae,0xaf,0xaf,0xaf,0xaf,0xb0,0xb1,0xb0,0xac, + 0xae,0xb2,0xb4,0xaf,0xa5,0xbb,0xc5,0x7f,0x39,0x06,0x00,0x10,0x7f,0xbc,0xb5, + 0xb1,0xad,0xb3,0xb3,0xad,0xae,0xb0,0xae,0xaf,0xb2,0xb1,0xae,0xac,0xb2,0xbb, + 0xb9,0x93,0x2f,0x02,0x05,0x03,0x03,0x03,0x05,0x08,0x07,0x05,0x02,0x03,0x04, + 0x03,0x01,0x02,0x02,0x02,0x01,0x00,0x00,0x00,0x00,0x01,0x02,0x02,0x01,0x01, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x03,0x05,0x01,0x00,0x01,0x00,0x21,0x95,0xc5,0xb9,0xb0,0xaf, + 0xc8,0xb0,0x70,0x28,0x00,0x05,0x07,0x03,0x01,0x03,0x08,0x05,0x02,0x1b,0x53, + 0xb1,0xc6,0xb3,0xb7,0xb9,0xb6,0xb5,0xb5,0xb8,0xb9,0xb6,0xb5,0xb6,0xb6,0xb6, + 0xb7,0xb8,0xb9,0xb9,0xb9,0xb8,0xb8,0xb8,0xb6,0xb5,0xb6,0xb6,0xb6,0xb6,0xb6, + 0xb6,0xb5,0xb5,0xb5,0xb4,0xb4,0xb4,0xb5,0xb5,0xb5,0xb4,0xb2,0xb2,0xb2,0xb3, + 0xb5,0xb5,0xb5,0xb5,0xb5,0xb7,0xb7,0xb7,0xb8,0xb9,0xb9,0xb9,0xb9,0xb9,0xb9, + 0xb9,0xba,0xba,0xb9,0xb9,0xb9,0xb9,0xb9,0xb5,0xb6,0xb8,0xba,0xb9,0xb4,0xb5, + 0xb9,0xb6,0xb6,0xb9,0xb9,0xb9,0xb9,0xba,0xc8,0x49,0x49,0x4a,0x4a,0x4b,0x4c, + 0x4c,0x4c,0x4d,0x4e,0x4f,0x4f,0x50,0x50,0x50,0x50,0x50,0x50,0x51,0x52,0x53, + 0x53,0x53,0x53,0x54,0x55,0x55,0x57,0x57,0x57,0x57,0x59,0x5a,0x5b,0x5b,0x5b, + 0x5b,0x5a,0x5a,0x5b,0x5c,0x5d,0x5d,0x5d,0x5e,0x5e,0x5e,0x60,0x61,0x62,0x62, + 0x61,0x60,0x61,0x62,0x63,0x64,0x65,0x65,0x66,0x67,0x67,0x67,0x67,0x67,0x66, + 0x67,0x69,0x69,0x69,0x69,0x69,0x6a,0x6b,0x6b,0x6c,0x6c,0x6c,0x6c,0x6d,0x6e, + 0x6e,0x6f,0x70,0x70,0x71,0x72,0x72,0x72,0x72,0x72,0x72,0x72,0x74,0x76,0x74, + 0x74,0x74,0x77,0x79,0x7a,0x79,0x77,0x70,0x7b,0x94,0x7e,0x57,0x2f,0x44,0x92, + 0x8d,0x72,0x7a,0x7e,0x7c,0x7d,0x7f,0x80,0x81,0x80,0x80,0x81,0x82,0x82,0x82, + 0x82,0x83,0x84,0x84,0x85,0x84,0x84,0x86,0x86,0x85,0x85,0x86,0x87,0x89,0x89, + 0x89,0x88,0x87,0x87,0x88,0x89,0x8a,0x8a,0x8a,0x8a,0x8a,0x8a,0x8c,0x8d,0x8d, + 0x8d,0x8d,0x8d,0x8d,0x8c,0x8b,0x8a,0x8a,0x8d,0x8f,0x91,0x8e,0x8a,0x8f,0x94, + 0x8d,0x8a,0x8a,0x8c,0x8f,0x8f,0x92,0x97,0x95,0x91,0x8a,0x8d,0x97,0x8a,0x82, + 0x91,0x97,0x94,0x86,0x82,0x97,0x98,0x8d,0x92,0x97,0x96,0x98,0x9c,0x99,0x97, + 0x97,0x98,0x98,0x99,0x99,0x9a,0x9a,0x99,0x9a,0x9a,0x9b,0x9b,0x9b,0x9c,0x9c, + 0x9c,0x9c,0x9c,0x9d,0x9d,0x9d,0x9d,0x9d,0x9d,0x9d,0x9f,0xa0,0xa0,0xa0,0xa0, + 0xa1,0xa1,0xa1,0xa1,0xa1,0xa1,0xa1,0xa1,0xa3,0xa3,0xa3,0xa3,0xa3,0xa3,0xa3, + 0xa3,0xa3,0xa3,0xa4,0xa4,0xa5,0xa4,0xa4,0xa5,0xa5,0xa6,0xa6,0xa6,0xa6,0xa6, + 0xa6,0xa7,0xa7,0xa7,0xa7,0xa7,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa9,0xa9, + 0xa9,0xaa,0xaa,0xaa,0xaa,0xaa,0xa8,0xa9,0xac,0xaa,0xa9,0xac,0xac,0xaa,0xab, + 0xac,0xac,0xbd,0xc8,0x5d,0x00,0x00,0x3e,0xc1,0xc7,0xb0,0xa7,0xa9,0xb1,0xaf, + 0xae,0xae,0xae,0xad,0xad,0xad,0xae,0xaf,0xaf,0xaf,0xaf,0xaf,0xb0,0xb1,0xae, + 0xae,0xb0,0xae,0xae,0xb3,0xb2,0xaa,0xbe,0xc3,0x62,0x1a,0x05,0x00,0x08,0x62, + 0xa4,0xbd,0xb9,0xac,0xb1,0xb2,0xad,0xae,0xb0,0xae,0xae,0xaf,0xaf,0xaf,0xb0, + 0xae,0xaa,0xc4,0xbc,0x60,0x20,0x02,0x03,0x0a,0x08,0x03,0x00,0x01,0x04,0x06, + 0x03,0x00,0x00,0x00,0x03,0x03,0x02,0x01,0x00,0x00,0x00,0x00,0x01,0x01,0x01, + 0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x02,0x01,0x00,0x02,0x04,0x00,0x00,0x03,0x00,0x1b,0x8e,0xc3,0xba, + 0xb2,0xb1,0xc8,0xac,0x64,0x24,0x00,0x04,0x05,0x02,0x01,0x03,0x07,0x02,0x00, + 0x2b,0x6c,0xb8,0xc7,0xb3,0xb5,0xb7,0xb5,0xb5,0xb6,0xb9,0xb9,0xb7,0xb6,0xb7, + 0xb7,0xb7,0xb9,0xb9,0xb9,0xba,0xba,0xba,0xba,0xba,0xbc,0xbd,0xbc,0xbc,0xbb, + 0xba,0xb9,0xb9,0xb8,0xb8,0xb7,0xb7,0xb7,0xb8,0xb9,0xb9,0xb9,0xb9,0xb8,0xb7, + 0xb7,0xb8,0xb9,0xb9,0xb9,0xb7,0xb7,0xb6,0xb6,0xb6,0xb7,0xb7,0xb8,0xb8,0xb8, + 0xb8,0xb8,0xb8,0xb8,0xb8,0xba,0xbb,0xbc,0xb8,0xb5,0xb5,0xb8,0xba,0xba,0xb9, + 0xb8,0xb9,0xba,0xb7,0xb7,0xb9,0xb6,0xb3,0xb2,0xb6,0xc8,0x4a,0x4a,0x4b,0x4c, + 0x4c,0x4c,0x4c,0x4d,0x4e,0x4f,0x50,0x50,0x50,0x50,0x51,0x51,0x50,0x51,0x52, + 0x53,0x53,0x54,0x54,0x55,0x55,0x56,0x57,0x57,0x57,0x57,0x57,0x58,0x59,0x5a, + 0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5c,0x5d,0x5c,0x5d,0x5d,0x5d,0x5d,0x5f,0x60, + 0x62,0x62,0x61,0x5f,0x61,0x62,0x62,0x63,0x64,0x65,0x65,0x65,0x66,0x66,0x67, + 0x67,0x66,0x67,0x68,0x68,0x69,0x69,0x6a,0x6c,0x6d,0x6d,0x6c,0x6b,0x6b,0x6c, + 0x6c,0x6d,0x6e,0x6e,0x6f,0x70,0x70,0x70,0x71,0x71,0x71,0x71,0x71,0x71,0x74, + 0x74,0x73,0x74,0x75,0x78,0x78,0x75,0x76,0x78,0x75,0x7e,0x90,0x77,0x4e,0x2d, + 0x45,0x94,0x8d,0x72,0x79,0x7d,0x7d,0x7c,0x7d,0x7f,0x7f,0x80,0x80,0x81,0x81, + 0x81,0x82,0x82,0x82,0x83,0x84,0x84,0x84,0x84,0x86,0x86,0x85,0x85,0x86,0x87, + 0x88,0x89,0x89,0x88,0x88,0x88,0x89,0x89,0x8a,0x8a,0x8a,0x8a,0x8a,0x8b,0x8c, + 0x8d,0x8d,0x8d,0x8d,0x8d,0x8e,0x8f,0x8c,0x8b,0x8c,0x8c,0x8d,0x92,0x91,0x8a, + 0x8e,0x93,0x90,0x8c,0x88,0x8e,0x91,0x86,0x8a,0x9a,0x94,0x8d,0x93,0x92,0x8c, + 0x80,0x80,0x9a,0x97,0x80,0x84,0x8f,0x9c,0x9c,0x92,0x94,0x97,0x98,0x97,0x96, + 0x95,0x95,0x95,0x96,0x98,0x98,0x98,0x99,0x99,0x99,0x9a,0x9b,0x9c,0x9c,0x9b, + 0x9b,0x9b,0x9b,0x9c,0x9c,0x9c,0x9c,0x9c,0x9c,0x9c,0x9c,0x9d,0x9e,0x9f,0xa0, + 0xa0,0xa0,0xa0,0xa0,0xa0,0xa0,0xa0,0xa0,0xa0,0xa0,0xa1,0xa2,0xa2,0xa2,0xa2, + 0xa2,0xa2,0xa2,0xa3,0xa3,0xa3,0xa4,0xa4,0xa4,0xa4,0xa4,0xa5,0xa5,0xa5,0xa5, + 0xa5,0xa5,0xa6,0xa6,0xa6,0xa6,0xa7,0xa7,0xa7,0xa7,0xa7,0xa7,0xa7,0xa7,0xa7, + 0xa8,0xa8,0xa8,0xa9,0xa9,0xa9,0xa9,0xaa,0xa8,0xa9,0xaa,0xaa,0xa9,0xaa,0xaa, + 0xaa,0xaa,0xab,0xaa,0xbb,0xc8,0x65,0x03,0x00,0x3a,0xb4,0xc0,0xb0,0xa6,0xa7, + 0xb0,0xaf,0xae,0xae,0xad,0xad,0xad,0xad,0xae,0xae,0xae,0xaf,0xaf,0xaf,0xae, + 0xad,0xae,0xb1,0xb2,0xae,0xaa,0xb1,0xb1,0xa9,0xbe,0xc4,0x6b,0x24,0x05,0x00, + 0x07,0x5a,0x9e,0xc0,0xbb,0xaa,0xae,0xb1,0xaf,0xae,0xaf,0xb2,0xb0,0xac,0xae, + 0xb0,0xb1,0xaf,0xad,0xb6,0xb9,0xa8,0x78,0x33,0x0c,0x00,0x03,0x06,0x04,0x03, + 0x03,0x06,0x04,0x00,0x03,0x05,0x03,0x02,0x01,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x06,0x02,0x00,0x02,0x00,0x14,0x87, + 0xc0,0xc0,0xb6,0xb2,0xc8,0xa0,0x49,0x18,0x00,0x05,0x04,0x00,0x01,0x03,0x07, + 0x00,0x00,0x3d,0x82,0xbc,0xc3,0xaf,0xb2,0xb5,0xb5,0xb6,0xb6,0xb5,0xb5,0xb5, + 0xb5,0xb5,0xb5,0xb4,0xb3,0xb3,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2, + 0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb4,0xb5,0xb5,0xb5,0xb5,0xb5,0xb6,0xb7, + 0xb8,0xb8,0xb8,0xb9,0xb9,0xb9,0xb8,0xb7,0xb7,0xb6,0xb6,0xb6,0xb7,0xb7,0xb7, + 0xb6,0xb5,0xb5,0xb5,0xb4,0xb4,0xb4,0xb3,0xb5,0xb7,0xb9,0xb9,0xb7,0xb3,0xb1, + 0xb6,0xbd,0xc4,0xbe,0xb5,0xb8,0xb8,0xb4,0xb1,0xae,0xad,0xab,0xc8,0x4b,0x4b, + 0x4b,0x4c,0x4c,0x4c,0x4c,0x4d,0x4e,0x50,0x50,0x50,0x50,0x50,0x52,0x51,0x51, + 0x51,0x52,0x53,0x53,0x54,0x54,0x54,0x54,0x56,0x56,0x55,0x56,0x57,0x57,0x57, + 0x57,0x57,0x58,0x59,0x5a,0x5a,0x5a,0x59,0x5b,0x5c,0x5c,0x5b,0x5b,0x5b,0x5c, + 0x5e,0x5f,0x61,0x61,0x60,0x5f,0x60,0x62,0x62,0x62,0x62,0x63,0x63,0x64,0x64, + 0x65,0x65,0x65,0x66,0x66,0x67,0x67,0x68,0x69,0x6b,0x6d,0x6d,0x6c,0x6a,0x6a, + 0x6b,0x6c,0x6d,0x6d,0x6d,0x6e,0x6e,0x6f,0x6f,0x70,0x70,0x70,0x71,0x71,0x71, + 0x71,0x72,0x73,0x72,0x73,0x74,0x77,0x77,0x73,0x74,0x77,0x75,0x7e,0x90,0x71, + 0x46,0x2b,0x47,0x93,0x8d,0x72,0x78,0x7c,0x7d,0x7c,0x7b,0x7c,0x7e,0x7f,0x7f, + 0x7f,0x7f,0x80,0x80,0x81,0x82,0x82,0x83,0x82,0x82,0x83,0x85,0x85,0x83,0x83, + 0x84,0x86,0x87,0x87,0x87,0x87,0x88,0x88,0x89,0x89,0x89,0x8a,0x8a,0x8a,0x8a, + 0x8b,0x8b,0x8c,0x8d,0x8d,0x8d,0x8d,0x8f,0x90,0x8e,0x8d,0x8c,0x89,0x89,0x91, + 0x92,0x8b,0x8b,0x8e,0x91,0x8e,0x88,0x8e,0x91,0x82,0x86,0x98,0x91,0x89,0x95, + 0x91,0x82,0x7c,0x83,0x9e,0x96,0x7a,0x85,0x93,0x95,0x94,0x92,0x95,0x97,0x98, + 0x95,0x91,0x93,0x96,0x95,0x96,0x97,0x97,0x98,0x98,0x98,0x98,0x99,0x9a,0x9b, + 0x9b,0x9b,0x9b,0x9b,0x9b,0x9b,0x9c,0x9c,0x9c,0x9c,0x9c,0x9c,0x9c,0x9c,0x9e, + 0x9e,0x9f,0x9f,0x9f,0xa0,0xa0,0x9f,0x9f,0x9f,0x9f,0x9f,0xa0,0xa0,0xa1,0xa1, + 0xa0,0xa1,0xa1,0xa2,0xa2,0xa2,0xa3,0xa3,0xa3,0xa4,0xa4,0xa4,0xa4,0xa4,0xa4, + 0xa4,0xa4,0xa3,0xa4,0xa5,0xa5,0xa5,0xa6,0xa6,0xa6,0xa6,0xa6,0xa6,0xa6,0xa7, + 0xa7,0xa7,0xa7,0xa7,0xa7,0xa7,0xa8,0xa8,0xa8,0xa9,0xa8,0xa8,0xa8,0xa9,0xa9, + 0xa9,0xa9,0xaa,0xaa,0xab,0xa8,0xb8,0xc8,0x72,0x19,0x00,0x31,0x9e,0xb7,0xb4, + 0xa7,0xa7,0xae,0xae,0xad,0xad,0xac,0xad,0xad,0xad,0xae,0xae,0xae,0xae,0xae, + 0xae,0xac,0xaa,0xae,0xb2,0xb2,0xae,0xaa,0xaf,0xb0,0xa9,0xbc,0xc2,0x7b,0x38, + 0x07,0x00,0x07,0x56,0x99,0xc0,0xbb,0xaa,0xad,0xb0,0xb0,0xaf,0xaf,0xb2,0xb1, + 0xab,0xad,0xb0,0xb1,0xb1,0xb0,0xab,0xb0,0xc8,0xb5,0x74,0x32,0x04,0x00,0x03, + 0x09,0x05,0x02,0x04,0x04,0x03,0x06,0x07,0x03,0x01,0x01,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x06,0x03,0x01,0x01,0x00, + 0x10,0x82,0xbf,0xc4,0xba,0xb3,0xc8,0x92,0x2b,0x0a,0x02,0x06,0x04,0x00,0x01, + 0x05,0x07,0x00,0x00,0x4b,0x95,0xbe,0xc0,0xac,0xaf,0xb3,0xb5,0xb5,0xb5,0xb2, + 0xb2,0xb5,0xb5,0xb4,0xb2,0xb2,0xb0,0xae,0xae,0xae,0xad,0xad,0xad,0xac,0xac, + 0xab,0xab,0xab,0xab,0xac,0xac,0xad,0xad,0xae,0xb0,0xb2,0xb2,0xb1,0xb0,0xb1, + 0xb2,0xb3,0xb4,0xb5,0xb5,0xb5,0xb5,0xb5,0xb4,0xb4,0xb3,0xb3,0xb3,0xb3,0xb4, + 0xb4,0xb3,0xb2,0xb1,0xb0,0xaf,0xae,0xaf,0xae,0xab,0xac,0xaf,0xb4,0xb5,0xb1, + 0xae,0xad,0xad,0xab,0xa9,0xac,0xb0,0xb1,0xaf,0xab,0xaa,0xaa,0xa7,0xa2,0xc8, + 0x48,0x49,0x49,0x4a,0x4a,0x4b,0x4b,0x4b,0x4c,0x4e,0x4e,0x4f,0x4e,0x50,0x51, + 0x50,0x50,0x50,0x50,0x51,0x51,0x52,0x52,0x52,0x53,0x53,0x53,0x53,0x54,0x57, + 0x57,0x57,0x54,0x54,0x55,0x58,0x5a,0x5a,0x59,0x57,0x5a,0x5b,0x5a,0x5a,0x5a, + 0x5a,0x5a,0x5c,0x5e,0x5f,0x5f,0x5e,0x5e,0x5f,0x60,0x61,0x61,0x61,0x61,0x61, + 0x62,0x62,0x62,0x63,0x64,0x65,0x65,0x66,0x67,0x68,0x69,0x69,0x6a,0x69,0x69, + 0x68,0x68,0x69,0x6c,0x6d,0x6d,0x6d,0x6d,0x6d,0x6e,0x6e,0x6f,0x70,0x70,0x70, + 0x70,0x70,0x70,0x70,0x70,0x74,0x71,0x6f,0x73,0x76,0x76,0x74,0x71,0x6e,0x7a, + 0x95,0x75,0x45,0x2b,0x45,0x91,0x8b,0x70,0x75,0x7a,0x7c,0x7c,0x7b,0x7b,0x7c, + 0x7d,0x7d,0x7e,0x7e,0x7f,0x7f,0x7f,0x80,0x81,0x82,0x81,0x81,0x81,0x83,0x83, + 0x82,0x81,0x82,0x83,0x85,0x86,0x86,0x86,0x86,0x87,0x89,0x87,0x86,0x88,0x8a, + 0x8a,0x8a,0x89,0x8a,0x8a,0x8a,0x8b,0x8c,0x8c,0x8c,0x8d,0x8f,0x8d,0x86,0x80, + 0x7f,0x8c,0x90,0x8a,0x85,0x84,0x8e,0x90,0x87,0x8b,0x8f,0x89,0x8a,0x91,0x8c, + 0x86,0x8a,0x85,0x7c,0x82,0x8c,0x95,0x97,0x91,0x89,0x80,0x78,0x7b,0x88,0x92, + 0x98,0x95,0x92,0x91,0x95,0x98,0x97,0x97,0x96,0x97,0x97,0x97,0x97,0x97,0x97, + 0x98,0x99,0x9a,0x9a,0x9a,0x9a,0x9a,0x9b,0x9b,0x9b,0x9b,0x9c,0x9c,0x9c,0x9c, + 0x9c,0x9c,0x9d,0x9e,0x9d,0x9e,0x9e,0x9e,0x9d,0x9d,0x9d,0x9d,0x9e,0x9e,0xa0, + 0xa0,0xa0,0xa0,0xa0,0xa0,0xa0,0xa0,0xa1,0xa2,0xa3,0xa3,0xa3,0xa3,0xa3,0xa3, + 0xa3,0xa3,0xa3,0xa3,0xa3,0xa3,0xa3,0xa3,0xa4,0xa4,0xa4,0xa4,0xa4,0xa4,0xa4, + 0xa5,0xa5,0xa5,0xa5,0xa5,0xa6,0xa6,0xa6,0xa7,0xa8,0xa8,0xa7,0xa9,0xa8,0xa7, + 0xa9,0xaa,0xa8,0xa8,0xaa,0xaa,0xaa,0xa7,0xb4,0xc5,0x84,0x36,0x03,0x24,0x81, + 0xae,0xbd,0xaa,0xa6,0xab,0xac,0xab,0xaa,0xaa,0xaa,0xab,0xac,0xad,0xae,0xae, + 0xae,0xad,0xad,0xac,0xac,0xae,0xae,0xae,0xae,0xad,0xb0,0xb0,0xac,0xb9,0xbb, + 0x8a,0x4b,0x0a,0x00,0x05,0x4e,0x91,0xbe,0xba,0xa9,0xad,0xb0,0xb0,0xb1,0xb0, + 0xae,0xad,0xae,0xae,0xaf,0xb0,0xb0,0xaf,0xae,0xae,0xb1,0xb8,0xb7,0x7b,0x37, + 0x04,0x00,0x09,0x05,0x00,0x01,0x02,0x04,0x03,0x03,0x02,0x01,0x01,0x01,0x01, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x00,0x00,0x00,0x00,0x01, + 0x03,0x00,0x12,0x82,0xbd,0xc4,0xbb,0xb4,0xc5,0x82,0x0c,0x00,0x03,0x07,0x05, + 0x00,0x02,0x06,0x07,0x00,0x00,0x53,0x9f,0xbf,0xbd,0xac,0xae,0xb2,0xb2,0xb2, + 0xb2,0xb1,0xb2,0xb5,0xb5,0xb4,0xb2,0xb1,0xb1,0xb0,0xb0,0xb0,0xb0,0xb1,0xb1, + 0xb2,0xb1,0xb0,0xb0,0xaf,0xaf,0xb0,0xb1,0xb0,0xaf,0xae,0xae,0xaf,0xaf,0xae, + 0xae,0xae,0xae,0xad,0xad,0xad,0xad,0xad,0xac,0xac,0xac,0xad,0xad,0xac,0xac, + 0xad,0xad,0xad,0xad,0xab,0xaa,0xaa,0xa9,0xa8,0xa8,0xa7,0xa3,0xa4,0xa8,0xa9, + 0xa6,0x9f,0xab,0xb6,0x9b,0x77,0x53,0x78,0xab,0xa0,0x99,0xa2,0xa4,0xa4,0xa0, + 0x9d,0xc8,0x48,0x48,0x48,0x49,0x49,0x4a,0x4a,0x4a,0x4b,0x4c,0x4c,0x4d,0x4d, + 0x4e,0x4f,0x4f,0x4e,0x4f,0x4f,0x50,0x50,0x50,0x50,0x51,0x51,0x51,0x51,0x51, + 0x53,0x55,0x56,0x55,0x53,0x53,0x53,0x57,0x59,0x5a,0x59,0x57,0x58,0x5a,0x5a, + 0x5b,0x5a,0x59,0x59,0x5b,0x5c,0x5e,0x65,0x66,0x5e,0x5e,0x60,0x5f,0x5e,0x5e, + 0x5f,0x60,0x5f,0x60,0x62,0x62,0x62,0x63,0x65,0x66,0x66,0x66,0x67,0x68,0x68, + 0x68,0x68,0x67,0x68,0x69,0x6b,0x6c,0x6b,0x6b,0x6b,0x6c,0x6d,0x6d,0x6d,0x6d, + 0x6e,0x6f,0x70,0x70,0x70,0x70,0x70,0x72,0x70,0x6e,0x71,0x74,0x76,0x74,0x70, + 0x6c,0x78,0x94,0x75,0x45,0x2b,0x45,0x8e,0x8a,0x70,0x76,0x7a,0x7b,0x7b,0x7b, + 0x7b,0x7b,0x7b,0x7c,0x7c,0x7d,0x7d,0x7d,0x7e,0x7e,0x7f,0x7f,0x81,0x7f,0x7e, + 0x81,0x81,0x80,0x80,0x80,0x82,0x83,0x85,0x84,0x84,0x86,0x86,0x86,0x86,0x87, + 0x88,0x88,0x87,0x8a,0x89,0x86,0x86,0x88,0x89,0x89,0x8a,0x8a,0x89,0x8e,0x8e, + 0x88,0x80,0x7d,0x8c,0x90,0x86,0x7e,0x7c,0x8f,0x91,0x82,0x88,0x8d,0x82,0x80, + 0x87,0x8d,0x8d,0x7e,0x77,0x79,0x84,0x8e,0x91,0x94,0x96,0x8f,0x81,0x6b,0x6f, + 0x83,0x8d,0x93,0x91,0x92,0x95,0x95,0x95,0x94,0x97,0x9a,0x98,0x97,0x96,0x95, + 0x95,0x99,0x9b,0x98,0x98,0x9a,0x99,0x99,0x99,0x99,0x9a,0x9a,0x9b,0x9b,0x9b, + 0x9b,0x9b,0x9b,0x9c,0x9c,0x9c,0x9c,0x9c,0x9d,0x9d,0x9d,0x9d,0x9d,0x9d,0x9e, + 0x9f,0xa0,0xa0,0xa0,0xa0,0xa0,0xa0,0xa0,0xa0,0xa0,0xa1,0xa2,0xa2,0xa3,0xa3, + 0xa3,0xa3,0xa3,0xa3,0xa3,0xa3,0xa3,0xa3,0xa2,0xa3,0xa3,0xa3,0xa4,0xa4,0xa3, + 0xa4,0xa4,0xa4,0xa5,0xa4,0xa5,0xa5,0xa5,0xa6,0xa6,0xa6,0xa7,0xa7,0xa7,0xa7, + 0xa7,0xa7,0xa9,0xaa,0xa7,0xa7,0xa8,0xaa,0xaa,0xa3,0xb1,0xc4,0x8d,0x45,0x07, + 0x19,0x68,0xa3,0xc2,0xad,0xa6,0xa9,0xaa,0xab,0xab,0xaa,0xaa,0xaa,0xaa,0xac, + 0xad,0xae,0xad,0xad,0xad,0xad,0xac,0xac,0xad,0xae,0xae,0xae,0xae,0xae,0xad, + 0xb8,0xb9,0x91,0x55,0x0b,0x00,0x05,0x40,0x82,0xbf,0xbc,0xa7,0xac,0xae,0xae, + 0xb0,0xb2,0xad,0xac,0xae,0xae,0xae,0xae,0xae,0xae,0xae,0xae,0xaa,0xb3,0xc0, + 0xaa,0x7d,0x3c,0x13,0x00,0x00,0x02,0x05,0x05,0x03,0x02,0x02,0x03,0x02,0x00, + 0x01,0x01,0x01,0x01,0x01,0x01,0x00,0x00,0x00,0x01,0x01,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x01,0x00,0x00,0x00, + 0x00,0x00,0x02,0x00,0x10,0x78,0xb5,0xc4,0xc0,0xb8,0xbc,0x74,0x03,0x00,0x01, + 0x06,0x06,0x03,0x03,0x03,0x04,0x00,0x03,0x62,0xaf,0xbe,0xba,0xae,0xb0,0xb2, + 0xb1,0xb1,0xb2,0xb2,0xb2,0xb4,0xb4,0xb3,0xb2,0xb2,0xb2,0xb2,0xb2,0xb1,0xb1, + 0xb1,0xb2,0xb2,0xb1,0xb0,0xb2,0xb3,0xb3,0xb2,0xb1,0xb2,0xb2,0xb1,0xae,0xae, + 0xae,0xae,0xad,0xad,0xad,0xab,0xaa,0xaa,0xaa,0xaa,0xa9,0xa9,0xa9,0xaa,0xa9, + 0xa9,0xaa,0xaa,0xab,0xab,0xab,0xaa,0xa9,0xa6,0xa7,0xaa,0xa9,0xa7,0xa5,0xa7, + 0xaa,0xa7,0xa2,0x98,0x95,0x90,0x7f,0x62,0x41,0x63,0x95,0x90,0x90,0x9b,0x9c, + 0x99,0x95,0x94,0xc8,0x48,0x48,0x48,0x48,0x49,0x49,0x49,0x49,0x4a,0x4b,0x4c, + 0x4c,0x4c,0x4c,0x4c,0x4c,0x4c,0x4d,0x4e,0x4f,0x50,0x50,0x50,0x50,0x50,0x50, + 0x50,0x50,0x50,0x53,0x53,0x53,0x53,0x53,0x53,0x56,0x57,0x57,0x57,0x57,0x57, + 0x57,0x5a,0x5c,0x5c,0x57,0x57,0x5a,0x5b,0x5d,0x68,0x69,0x5e,0x5e,0x60,0x5e, + 0x5d,0x5c,0x5e,0x61,0x5f,0x5f,0x62,0x62,0x62,0x62,0x63,0x65,0x65,0x65,0x65, + 0x65,0x66,0x67,0x68,0x69,0x69,0x69,0x69,0x69,0x69,0x69,0x69,0x6a,0x6a,0x6b, + 0x6b,0x6c,0x6d,0x6d,0x6e,0x6e,0x6f,0x70,0x71,0x70,0x70,0x70,0x72,0x74,0x74, + 0x73,0x72,0x6d,0x77,0x90,0x72,0x45,0x2b,0x45,0x8d,0x89,0x71,0x78,0x7b,0x78, + 0x79,0x7a,0x7a,0x7a,0x7b,0x7b,0x7b,0x7d,0x7d,0x7c,0x7c,0x7c,0x7c,0x7e,0x81, + 0x7e,0x7b,0x7e,0x7f,0x7f,0x7f,0x80,0x81,0x82,0x85,0x83,0x83,0x86,0x85,0x83, + 0x86,0x88,0x88,0x86,0x84,0x89,0x8a,0x84,0x85,0x87,0x86,0x86,0x8a,0x87,0x86, + 0x8d,0x8f,0x8b,0x82,0x7d,0x8e,0x91,0x81,0x78,0x78,0x91,0x92,0x7b,0x84,0x8c, + 0x78,0x72,0x7e,0x92,0x98,0x74,0x69,0x78,0x85,0x8e,0x8d,0x8e,0x91,0x93,0x8a, + 0x6d,0x6d,0x81,0x87,0x8a,0x8c,0x93,0x9b,0x96,0x91,0x90,0x95,0x9d,0x99,0x95, + 0x95,0x95,0x95,0x9c,0x9e,0x96,0x96,0x99,0x98,0x98,0x98,0x98,0x98,0x99,0x9a, + 0x9a,0x9a,0x9a,0x9a,0x9a,0x9a,0x9a,0x9b,0x9c,0x9c,0x9c,0x9d,0x9d,0x9d,0x9d, + 0x9e,0x9f,0x9f,0xa0,0xa0,0xa0,0x9f,0x9f,0x9f,0x9f,0xa0,0xa0,0xa1,0xa1,0xa0, + 0xa0,0xa2,0xa3,0xa1,0xa1,0xa1,0xa2,0xa3,0xa3,0xa2,0xa1,0xa1,0xa2,0xa3,0xa3, + 0xa3,0xa3,0xa3,0xa4,0xa4,0xa4,0xa4,0xa4,0xa5,0xa5,0xa5,0xa6,0xa6,0xa7,0xa7, + 0xa7,0xa6,0xa6,0xa7,0xa8,0xa8,0xa6,0xa5,0xa6,0xa8,0xa9,0xa0,0xae,0xc5,0x8f, + 0x46,0x09,0x12,0x55,0x9b,0xc4,0xae,0xa5,0xa8,0xaa,0xac,0xac,0xab,0xaa,0xa8, + 0xa8,0xaa,0xac,0xae,0xad,0xad,0xae,0xad,0xac,0xaa,0xab,0xaf,0xb0,0xaf,0xac, + 0xab,0xad,0xb9,0xbb,0x95,0x58,0x0c,0x00,0x05,0x2d,0x6f,0xbf,0xbf,0xa6,0xab, + 0xae,0xab,0xae,0xb2,0xaf,0xae,0xae,0xae,0xae,0xad,0xad,0xae,0xae,0xae,0xae, + 0xaa,0xa9,0xbe,0xbd,0x8d,0x48,0x02,0x00,0x03,0x0b,0x09,0x02,0x03,0x03,0x04, + 0x03,0x00,0x01,0x02,0x03,0x03,0x02,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x00, + 0x01,0x02,0x01,0x01,0x00,0x00,0x0d,0x6d,0xaa,0xc3,0xc7,0xba,0xa3,0x5f,0x05, + 0x00,0x00,0x03,0x05,0x07,0x03,0x00,0x00,0x00,0x0d,0x76,0xc1,0xbd,0xb6,0xb1, + 0xb3,0xb4,0xb1,0xb2,0xb4,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb3,0xb4,0xb3,0xb2, + 0xb1,0xb0,0xaf,0xb0,0xb1,0xaf,0xaf,0xb2,0xb5,0xb5,0xb2,0xb1,0xb3,0xb4,0xb3, + 0xae,0xae,0xb0,0xaf,0xae,0xae,0xae,0xad,0xab,0xaa,0xab,0xab,0xaa,0xaa,0xaa, + 0xaa,0xaa,0xa9,0xaa,0xac,0xae,0xad,0xac,0xad,0xab,0xa6,0xa9,0xb0,0xae,0xaa, + 0xaa,0xad,0xae,0xa6,0x9d,0x96,0x74,0x53,0x63,0x68,0x5a,0x68,0x7f,0x88,0x90, + 0x96,0x94,0x8e,0x8d,0x8b,0xc8,0x46,0x46,0x47,0x48,0x48,0x48,0x48,0x48,0x48, + 0x49,0x49,0x4a,0x4b,0x4c,0x4c,0x4c,0x4c,0x4c,0x4c,0x4e,0x4e,0x4f,0x50,0x50, + 0x4f,0x4f,0x4f,0x4f,0x50,0x52,0x53,0x53,0x53,0x52,0x53,0x54,0x56,0x56,0x56, + 0x56,0x57,0x57,0x57,0x58,0x58,0x55,0x55,0x57,0x60,0x62,0x45,0x3e,0x56,0x5d, + 0x5e,0x5c,0x5d,0x60,0x60,0x60,0x62,0x61,0x5e,0x60,0x62,0x62,0x62,0x64,0x64, + 0x64,0x64,0x64,0x65,0x65,0x66,0x67,0x67,0x67,0x67,0x67,0x67,0x67,0x68,0x69, + 0x69,0x69,0x6a,0x6a,0x6b,0x6c,0x6d,0x6d,0x6d,0x6f,0x70,0x6d,0x70,0x72,0x74, + 0x73,0x70,0x70,0x70,0x69,0x74,0x8e,0x70,0x42,0x28,0x44,0x90,0x8b,0x71,0x78, + 0x7b,0x77,0x75,0x75,0x78,0x79,0x7b,0x7a,0x7a,0x7c,0x7c,0x7b,0x7b,0x7c,0x7d, + 0x7e,0x7e,0x7e,0x7e,0x7e,0x7c,0x7b,0x80,0x84,0x82,0x7f,0x7e,0x82,0x84,0x7d, + 0x81,0x8a,0x87,0x85,0x86,0x86,0x86,0x83,0x85,0x8b,0x8b,0x89,0x88,0x88,0x8a, + 0x8a,0x88,0x8d,0x8b,0x82,0x7b,0x7a,0x90,0x90,0x79,0x78,0x82,0x93,0x90,0x7a, + 0x7f,0x86,0x79,0x76,0x7f,0x91,0x96,0x70,0x66,0x76,0x8d,0x99,0x89,0x85,0x8a, + 0x8a,0x87,0x80,0x7e,0x80,0x82,0x85,0x89,0x8e,0x94,0x94,0x94,0x95,0x95,0x93, + 0x91,0x91,0x98,0x9b,0x9a,0x99,0x95,0x8f,0x92,0x98,0x98,0x98,0x98,0x98,0x98, + 0x98,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x9a,0x9a,0x9b,0x9b,0x9c,0x9c,0x9c, + 0x9c,0x9c,0x9d,0x9d,0x9e,0x9f,0xa0,0xa0,0x9f,0x9f,0x9f,0x9e,0x9f,0xa0,0xa0, + 0xa0,0xa0,0x9f,0xa0,0xa2,0xa1,0xa0,0xa0,0xa1,0xa2,0xa2,0xa2,0xa1,0xa2,0xa2, + 0xa3,0xa3,0xa3,0xa3,0xa3,0xa3,0xa3,0xa3,0xa4,0xa4,0xa5,0xa5,0xa5,0xa6,0xa5, + 0xa4,0xa3,0xa3,0xa7,0xa9,0xa7,0xa3,0xa2,0xa4,0xa7,0xa7,0xa8,0xa7,0x9e,0xad, + 0xc4,0x8a,0x40,0x07,0x0e,0x4c,0x9a,0xc8,0xaa,0xa1,0xa7,0xaa,0xaa,0xab,0xaa, + 0xaa,0xa9,0xaa,0xab,0xac,0xad,0xac,0xac,0xac,0xab,0xaa,0xab,0xac,0xad,0xad, + 0xad,0xb0,0xb0,0xac,0xb7,0xbd,0x9c,0x5f,0x0e,0x00,0x03,0x1f,0x5e,0xb9,0xbf, + 0xaa,0xad,0xb0,0xb1,0xb0,0xae,0xae,0xae,0xae,0xae,0xae,0xae,0xaf,0xb0,0xb0, + 0xb0,0xaf,0xad,0xaa,0xb1,0xb6,0xb9,0x8b,0x40,0x0e,0x00,0x00,0x04,0x05,0x08, + 0x08,0x02,0x01,0x02,0x02,0x02,0x02,0x02,0x02,0x01,0x01,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01, + 0x00,0x00,0x01,0x04,0x06,0x05,0x02,0x00,0x0e,0x6b,0xa7,0xc0,0xc8,0xb5,0x65, + 0x28,0x02,0x00,0x04,0x02,0x03,0x06,0x03,0x00,0x00,0x03,0x1a,0x83,0xc8,0xb8, + 0xb2,0xb2,0xb3,0xb4,0xb3,0xb3,0xb3,0xb2,0xb2,0xb3,0xb3,0xb2,0xb2,0xb3,0xb3, + 0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb2,0xb1,0xb1,0xb2,0xb3,0xb5,0xb5,0xb5, + 0xb2,0xae,0xb0,0xb1,0xb2,0xb2,0xb2,0xb2,0xb2,0xb0,0xaf,0xae,0xb0,0xb1,0xb1, + 0xb0,0xb0,0xae,0xae,0xad,0xaf,0xb1,0xae,0xac,0xab,0xae,0xaf,0xaa,0xae,0xb1, + 0xa8,0x9e,0x98,0xa2,0xaa,0x8a,0x7c,0x8f,0x62,0x32,0x69,0x86,0x73,0x81,0x96, + 0x97,0x95,0x95,0x92,0x90,0x91,0x94,0xc8,0x44,0x44,0x45,0x46,0x47,0x48,0x47, + 0x46,0x46,0x47,0x48,0x49,0x4a,0x4b,0x4b,0x4c,0x4b,0x4b,0x4c,0x4c,0x4d,0x4e, + 0x4e,0x4e,0x4d,0x4d,0x4e,0x4e,0x50,0x51,0x52,0x53,0x52,0x51,0x51,0x53,0x54, + 0x54,0x54,0x54,0x56,0x57,0x55,0x54,0x55,0x55,0x54,0x55,0x65,0x67,0x27,0x1b, + 0x51,0x5f,0x5e,0x5c,0x5d,0x61,0x60,0x5e,0x62,0x60,0x5d,0x5f,0x62,0x61,0x62, + 0x62,0x63,0x62,0x62,0x63,0x63,0x64,0x64,0x65,0x65,0x65,0x65,0x65,0x65,0x66, + 0x66,0x67,0x68,0x68,0x69,0x69,0x69,0x6a,0x6b,0x6c,0x6d,0x6d,0x6d,0x6c,0x6f, + 0x73,0x72,0x70,0x6e,0x70,0x70,0x68,0x71,0x8d,0x6d,0x3d,0x26,0x44,0x91,0x8a, + 0x6f,0x78,0x7a,0x75,0x74,0x74,0x77,0x78,0x7a,0x78,0x78,0x7a,0x7b,0x7a,0x7b, + 0x7b,0x7f,0x7e,0x7b,0x7d,0x7f,0x7e,0x7b,0x79,0x7f,0x82,0x80,0x7e,0x7c,0x80, + 0x82,0x7a,0x7f,0x8a,0x8a,0x88,0x85,0x84,0x84,0x80,0x82,0x8b,0x8b,0x86,0x87, + 0x89,0x8a,0x89,0x8a,0x8c,0x86,0x78,0x73,0x78,0x8d,0x8c,0x72,0x79,0x88,0x90, + 0x89,0x76,0x7f,0x88,0x7a,0x77,0x81,0x8c,0x8b,0x70,0x68,0x74,0x8d,0x9b,0x86, + 0x80,0x88,0x86,0x83,0x86,0x7f,0x75,0x7f,0x89,0x88,0x8a,0x8c,0x92,0x98,0x98, + 0x91,0x88,0x8a,0x90,0x99,0x9c,0x9a,0x95,0x91,0x8d,0x91,0x98,0x97,0x96,0x97, + 0x97,0x98,0x98,0x98,0x99,0x99,0x99,0x98,0x98,0x99,0x99,0x9a,0x9b,0x9b,0x9b, + 0x9b,0x9c,0x9c,0x9c,0x9c,0x9c,0x9d,0x9e,0x9e,0x9e,0x9f,0x9e,0x9e,0x9e,0x9e, + 0x9e,0x9f,0x9f,0x9e,0x9e,0xa0,0xa1,0xa0,0xa0,0xa0,0xa0,0xa0,0xa0,0xa1,0xa1, + 0xa1,0xa2,0xa2,0xa2,0xa2,0xa1,0xa2,0xa2,0xa3,0xa3,0xa3,0xa4,0xa5,0xa5,0xa5, + 0xa5,0xa4,0xa3,0xa1,0xa1,0xa7,0xa9,0xa6,0xa2,0xa0,0xa4,0xa7,0xa8,0xa7,0xa4, + 0x9d,0xad,0xc4,0x87,0x3c,0x07,0x0b,0x41,0x95,0xc8,0xa9,0xa0,0xa9,0xa9,0xa9, + 0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xab,0xab,0xab,0xab,0xaa,0xaa,0xaa,0xab,0xac, + 0xab,0xaa,0xaa,0xb1,0xb1,0xa9,0xb5,0xbd,0x9e,0x62,0x10,0x00,0x00,0x0f,0x4d, + 0xb4,0xc0,0xac,0xac,0xaf,0xb3,0xaf,0xaa,0xac,0xad,0xad,0xad,0xae,0xaf,0xb0, + 0xb1,0xb1,0xb0,0xaf,0xae,0xac,0xa7,0xaa,0xc4,0xb5,0x84,0x45,0x13,0x03,0x00, + 0x03,0x08,0x09,0x02,0x01,0x04,0x03,0x02,0x01,0x01,0x01,0x01,0x01,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x01,0x00,0x00,0x02,0x04,0x06,0x07,0x05,0x00,0x0f,0x70,0xad,0xc0,0xc7, + 0xa2,0x33,0x00,0x01,0x04,0x07,0x01,0x01,0x03,0x04,0x03,0x00,0x0a,0x29,0x8d, + 0xc8,0xb3,0xae,0xb3,0xb2,0xb2,0xb4,0xb3,0xb1,0xb2,0xb3,0xb4,0xb4,0xb3,0xb2, + 0xb2,0xb2,0xb2,0xb3,0xb4,0xb5,0xb5,0xb5,0xb5,0xb3,0xb2,0xb2,0xb0,0xb0,0xb5, + 0xb6,0xb3,0xaf,0xad,0xb1,0xb2,0xb2,0xb3,0xb5,0xb3,0xb2,0xb2,0xb0,0xb0,0xb2, + 0xb3,0xb3,0xb3,0xb3,0xb1,0xb1,0xb1,0xb2,0xb2,0xaf,0xad,0xab,0xae,0xb0,0xae, + 0xaf,0xb0,0xa7,0x9c,0x91,0x9e,0xa9,0x7b,0x66,0x80,0x63,0x41,0x66,0x84,0x8c, + 0x9e,0xae,0xa7,0xa1,0x9c,0x9a,0x9b,0x9d,0xa1,0xc8,0x42,0x43,0x44,0x45,0x45, + 0x46,0x45,0x45,0x45,0x45,0x46,0x48,0x49,0x4a,0x4a,0x4a,0x4a,0x4a,0x4b,0x4c, + 0x4c,0x4c,0x4c,0x4c,0x4c,0x4c,0x4c,0x4e,0x4f,0x50,0x51,0x51,0x50,0x50,0x50, + 0x51,0x52,0x53,0x53,0x53,0x53,0x53,0x55,0x53,0x52,0x56,0x57,0x53,0x65,0x69, + 0x1c,0x11,0x56,0x65,0x61,0x5e,0x5c,0x5c,0x5c,0x5d,0x5d,0x5e,0x5e,0x5f,0x60, + 0x5e,0x5f,0x62,0x62,0x61,0x61,0x62,0x62,0x62,0x63,0x63,0x63,0x63,0x62,0x63, + 0x65,0x65,0x65,0x65,0x66,0x66,0x67,0x68,0x69,0x69,0x6a,0x6b,0x6b,0x6a,0x69, + 0x69,0x6d,0x6f,0x6b,0x6b,0x70,0x72,0x70,0x69,0x72,0x8c,0x69,0x38,0x25,0x43, + 0x8c,0x84,0x6a,0x74,0x78,0x74,0x76,0x7a,0x79,0x78,0x77,0x77,0x76,0x74,0x77, + 0x7c,0x7b,0x7a,0x7d,0x7d,0x7b,0x7c,0x7d,0x7d,0x7d,0x7c,0x79,0x78,0x7a,0x7f, + 0x85,0x7c,0x79,0x83,0x83,0x81,0x91,0x97,0x86,0x7f,0x7f,0x82,0x84,0x80,0x7e, + 0x7e,0x82,0x85,0x84,0x85,0x86,0x8a,0x82,0x6f,0x6d,0x76,0x86,0x82,0x6d,0x78, + 0x87,0x86,0x7c,0x6d,0x85,0x95,0x74,0x6f,0x82,0x80,0x78,0x73,0x70,0x70,0x7f, + 0x8a,0x86,0x86,0x8a,0x8a,0x84,0x74,0x65,0x5d,0x81,0x99,0x8b,0x85,0x86,0x93, + 0x9a,0x97,0x8b,0x80,0x8a,0x92,0x93,0x92,0x91,0x94,0x95,0x95,0x95,0x96,0x96, + 0x95,0x95,0x96,0x97,0x97,0x98,0x98,0x98,0x98,0x98,0x98,0x98,0x99,0x99,0x9a, + 0x9a,0x9a,0x9a,0x9a,0x9b,0x9b,0x9b,0x9c,0x9c,0x9c,0x9c,0x9c,0x9c,0x9d,0x9c, + 0x9c,0x9c,0x9d,0x9d,0x9e,0x9e,0x9d,0x9f,0xa0,0x9f,0x9f,0x9f,0x9f,0x9f,0x9f, + 0xa0,0xa0,0xa0,0xa1,0xa1,0xa1,0xa0,0xa0,0xa0,0xa1,0xa2,0xa2,0xa3,0xa4,0xa4, + 0xa3,0xa3,0xa3,0xa3,0xa5,0xa6,0xa5,0xa4,0xa3,0xa3,0xa4,0xa5,0xa5,0xa6,0xa6, + 0xa6,0xa3,0x9e,0xae,0xc5,0x8a,0x3f,0x0c,0x07,0x2e,0x89,0xc6,0xa9,0xa3,0xae, + 0xab,0xa7,0xa8,0xa9,0xa8,0xa8,0xa8,0xa8,0xa9,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa, + 0xab,0xac,0xac,0xaa,0xa7,0xab,0xaa,0xa1,0xb1,0xbc,0x99,0x5d,0x0e,0x00,0x00, + 0x00,0x3a,0xb2,0xc0,0xaa,0xa7,0xa9,0xae,0xab,0xa7,0xa9,0xaa,0xaa,0xaa,0xaa, + 0xac,0xae,0xae,0xae,0xae,0xad,0xab,0xaa,0xae,0xb1,0xae,0xb3,0xba,0xa7,0x76, + 0x20,0x00,0x00,0x00,0x03,0x05,0x06,0x06,0x04,0x02,0x00,0x00,0x00,0x01,0x01, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x01,0x03,0x03,0x00,0x03,0x0a,0x00,0x0e,0x7e,0xbd, + 0xc4,0xb0,0x7b,0x1e,0x00,0x03,0x03,0x02,0x00,0x00,0x03,0x06,0x05,0x00,0x0e, + 0x38,0x95,0xc8,0xaf,0xac,0xb5,0xb2,0xaf,0xb1,0xaf,0xad,0xb0,0xb3,0xb3,0xb3, + 0xb2,0xb2,0xb2,0xb0,0xb0,0xb1,0xb2,0xb2,0xb3,0xb3,0xb3,0xb2,0xb3,0xb5,0xb1, + 0xad,0xb0,0xb1,0xae,0xb0,0xb2,0xb1,0xaf,0xae,0xb0,0xb1,0xae,0xae,0xae,0xad, + 0xad,0xaf,0xb0,0xae,0xb0,0xb0,0xae,0xb0,0xb2,0xae,0xad,0xb0,0xb0,0xad,0xad, + 0xad,0xad,0xad,0xae,0xb1,0xaf,0xa7,0xab,0xad,0x86,0x6a,0x68,0x7e,0x8b,0x4b, + 0x4a,0xa0,0xb9,0xb5,0xb5,0xb2,0xaf,0xae,0xaf,0xaf,0xaf,0xc8,0x41,0x41,0x43, + 0x44,0x45,0x45,0x45,0x44,0x43,0x44,0x45,0x46,0x48,0x48,0x48,0x48,0x48,0x49, + 0x49,0x4a,0x4a,0x4b,0x4b,0x4b,0x4b,0x4b,0x4b,0x4d,0x4e,0x4f,0x50,0x50,0x4f, + 0x4f,0x4f,0x50,0x50,0x51,0x51,0x51,0x50,0x52,0x55,0x53,0x50,0x55,0x57,0x54, + 0x62,0x62,0x1a,0x12,0x57,0x65,0x61,0x5e,0x5a,0x57,0x59,0x5a,0x5a,0x5b,0x5e, + 0x5e,0x5e,0x5c,0x5e,0x61,0x61,0x60,0x60,0x60,0x61,0x62,0x62,0x62,0x62,0x62, + 0x62,0x62,0x64,0x64,0x65,0x65,0x65,0x65,0x65,0x66,0x67,0x69,0x69,0x6a,0x6a, + 0x68,0x68,0x6d,0x6d,0x6b,0x69,0x6b,0x70,0x71,0x70,0x67,0x70,0x8d,0x68,0x33, + 0x22,0x41,0x8a,0x82,0x67,0x71,0x76,0x74,0x75,0x78,0x79,0x78,0x77,0x76,0x75, + 0x76,0x78,0x7a,0x79,0x78,0x78,0x7a,0x7d,0x7c,0x7b,0x7d,0x7d,0x7c,0x78,0x78, + 0x7b,0x7f,0x81,0x79,0x7a,0x8b,0x82,0x6c,0x64,0x6d,0x8a,0x87,0x78,0x7b,0x84, + 0x8d,0x91,0x8f,0x87,0x82,0x82,0x83,0x84,0x82,0x82,0x80,0x74,0x6c,0x7b,0x7f, + 0x73,0x78,0x7f,0x75,0x6e,0x6e,0x82,0x8f,0x7a,0x70,0x76,0x76,0x77,0x7c,0x79, + 0x70,0x75,0x79,0x74,0x7f,0x91,0x8c,0x7b,0x60,0x5e,0x70,0x8b,0x99,0x8a,0x86, + 0x8a,0x92,0x97,0x94,0x88,0x7e,0x8d,0x96,0x8d,0x87,0x86,0x91,0x98,0x95,0x95, + 0x95,0x95,0x95,0x95,0x95,0x95,0x95,0x96,0x97,0x97,0x97,0x97,0x97,0x98,0x98, + 0x98,0x99,0x99,0x99,0x99,0x99,0x9a,0x9a,0x9a,0x9b,0x9b,0x99,0x99,0x9a,0x9b, + 0x9c,0x9c,0x9c,0x9c,0x9c,0x9d,0x9e,0x9e,0x9d,0x9d,0x9d,0x9e,0x9e,0x9e,0x9d, + 0x9d,0x9d,0x9e,0x9f,0xa0,0xa0,0x9f,0xa0,0xa0,0xa0,0xa0,0xa0,0xa1,0xa1,0xa2, + 0xa3,0xa3,0xa2,0xa2,0xa1,0xa1,0xa3,0xa3,0xa3,0xa2,0xa2,0xa3,0xa4,0xa4,0xa3, + 0xa4,0xa6,0xa6,0xa3,0x9c,0xab,0xc5,0x95,0x51,0x13,0x01,0x1d,0x7c,0xc1,0xad, + 0xa5,0xaa,0xa8,0xa7,0xa7,0xa7,0xa7,0xa7,0xa7,0xa7,0xa7,0xa8,0xaa,0xaa,0xaa, + 0xa9,0xa9,0xaa,0xaa,0xac,0xaa,0xa6,0xa9,0xa7,0x9e,0xaf,0xbd,0x9d,0x60,0x0e, + 0x00,0x01,0x00,0x30,0xb2,0xc1,0xaa,0xa5,0xa6,0xab,0xaa,0xa7,0xa8,0xa8,0xa7, + 0xa7,0xa8,0xaa,0xab,0xab,0xab,0xaa,0xaa,0xaa,0xaa,0xae,0xae,0xa5,0xaa,0xb9, + 0xbe,0xaa,0x70,0x46,0x28,0x0a,0x00,0x02,0x06,0x07,0x04,0x02,0x00,0x00,0x00, + 0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x03,0x05,0x00,0x03,0x0a,0x00,0x0f, + 0x81,0xc2,0xc8,0x93,0x4b,0x0e,0x00,0x06,0x04,0x02,0x01,0x02,0x04,0x06,0x04, + 0x00,0x1d,0x5b,0xa4,0xc8,0xaf,0xab,0xb2,0xb1,0xaf,0xaf,0xae,0xad,0xb0,0xb2, + 0xb2,0xb2,0xb2,0xb2,0xb2,0xb1,0xb0,0xaf,0xaf,0xb0,0xb1,0xb2,0xb2,0xb2,0xb2, + 0xb3,0xb1,0xae,0xad,0xae,0xae,0xb0,0xb0,0xae,0xae,0xb1,0xb1,0xaf,0xad,0xad, + 0xae,0xae,0xad,0xae,0xae,0xac,0xae,0xaf,0xae,0xae,0xb0,0xae,0xad,0xaf,0xaf, + 0xae,0xad,0xac,0xad,0xae,0xb0,0xb2,0xb2,0xae,0xaf,0xaf,0xa2,0x8e,0x7a,0x8a, + 0x99,0x55,0x52,0xa9,0xbf,0xb8,0xb5,0xb0,0xad,0xb0,0xb4,0xb3,0xb2,0xc8,0x41, + 0x41,0x42,0x42,0x43,0x43,0x43,0x43,0x43,0x43,0x44,0x45,0x46,0x47,0x47,0x48, + 0x48,0x48,0x48,0x48,0x49,0x49,0x4a,0x4a,0x4a,0x4a,0x4a,0x4c,0x4d,0x4e,0x4f, + 0x4f,0x4e,0x4e,0x4e,0x4f,0x4f,0x50,0x50,0x50,0x50,0x52,0x55,0x53,0x50,0x53, + 0x56,0x57,0x5e,0x57,0x1d,0x1a,0x55,0x62,0x5e,0x5b,0x57,0x53,0x56,0x59,0x57, + 0x59,0x5e,0x5e,0x5c,0x5a,0x5c,0x5f,0x5f,0x5f,0x5f,0x5f,0x60,0x61,0x61,0x61, + 0x61,0x62,0x62,0x62,0x63,0x63,0x64,0x65,0x65,0x65,0x65,0x65,0x66,0x67,0x69, + 0x69,0x69,0x66,0x68,0x70,0x6d,0x67,0x69,0x6d,0x6d,0x6f,0x6e,0x64,0x6f,0x8f, + 0x66,0x2e,0x1d,0x3f,0x8b,0x83,0x67,0x6e,0x73,0x74,0x73,0x72,0x76,0x78,0x78, + 0x75,0x75,0x7a,0x7a,0x75,0x75,0x76,0x74,0x77,0x7e,0x7b,0x79,0x7b,0x7c,0x7b, + 0x7b,0x7b,0x7f,0x7c,0x78,0x78,0x7e,0x8f,0x7e,0x57,0x2a,0x34,0x8f,0x95,0x74, + 0x76,0x85,0x9c,0xa1,0x9b,0x8c,0x82,0x82,0x83,0x84,0x7b,0x82,0x97,0x7e,0x60, + 0x70,0x7c,0x7e,0x79,0x70,0x63,0x65,0x77,0x7d,0x7f,0x82,0x78,0x64,0x6f,0x7f, + 0x83,0x7e,0x72,0x71,0x6f,0x61,0x72,0x95,0x86,0x6c,0x53,0x66,0x93,0x98,0x91, + 0x87,0x89,0x90,0x8f,0x8e,0x91,0x87,0x7e,0x92,0x99,0x88,0x7f,0x7e,0x8f,0x98, + 0x91,0x91,0x94,0x94,0x94,0x94,0x94,0x94,0x95,0x95,0x95,0x95,0x95,0x96,0x96, + 0x96,0x96,0x97,0x98,0x98,0x98,0x98,0x98,0x98,0x98,0x99,0x9a,0x9a,0x98,0x98, + 0x99,0x9a,0x9b,0x9b,0x9b,0x9b,0x9c,0x9c,0x9d,0x9d,0x9d,0x9c,0x9c,0x9d,0x9d, + 0x9d,0x9c,0x9c,0x9c,0x9c,0x9e,0x9f,0x9f,0x9d,0x9e,0xa0,0xa0,0xa0,0xa0,0xa0, + 0xa0,0xa1,0xa1,0xa1,0xa1,0xa0,0xa0,0xa0,0x9f,0x9f,0xa0,0xa0,0xa2,0xa3,0xa3, + 0xa1,0xa0,0xa3,0xa6,0xa6,0xa2,0x98,0xa7,0xc3,0xa3,0x69,0x1a,0x00,0x0f,0x70, + 0xbc,0xb2,0xa8,0xa2,0xa3,0xa6,0xa5,0xa5,0xa6,0xa6,0xa6,0xa6,0xa7,0xa8,0xa9, + 0xa9,0xa7,0xa7,0xa8,0xa7,0xa8,0xab,0xaa,0xa7,0xa8,0xa6,0x9f,0xb0,0xbe,0xa6, + 0x69,0x0e,0x00,0x03,0x00,0x2c,0xad,0xc1,0xad,0xa7,0xa6,0xab,0xaa,0xa8,0xa9, + 0xa8,0xa7,0xa7,0xa7,0xa8,0xa9,0xa9,0xa8,0xa8,0xa8,0xa9,0xaa,0xaa,0xa8,0xa7, + 0xa1,0x9d,0xab,0xba,0xc5,0xaa,0x72,0x2b,0x00,0x00,0x03,0x07,0x04,0x01,0x00, + 0x00,0x00,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x05,0x08,0x03,0x02,0x07, + 0x00,0x12,0x81,0xc2,0xc8,0x72,0x1b,0x04,0x00,0x07,0x05,0x03,0x04,0x05,0x06, + 0x04,0x02,0x00,0x31,0x86,0xb5,0xc4,0xb1,0xab,0xae,0xb0,0xb1,0xae,0xae,0xae, + 0xaf,0xb0,0xb1,0xb1,0xb2,0xb2,0xb2,0xb2,0xb1,0xaf,0xae,0xad,0xae,0xb0,0xb2, + 0xb0,0xaf,0xb0,0xb1,0xb0,0xab,0xac,0xb2,0xae,0xaa,0xaa,0xae,0xb4,0xb2,0xaf, + 0xad,0xae,0xb1,0xaf,0xae,0xae,0xae,0xab,0xae,0xaf,0xae,0xae,0xac,0xae,0xb0, + 0xae,0xae,0xaf,0xae,0xae,0xaf,0xb1,0xb2,0xae,0xad,0xaf,0xaf,0xb0,0xbe,0xbb, + 0x9e,0x8b,0x7e,0x70,0x7f,0xab,0xb9,0xb5,0xa7,0x9f,0x9e,0xa7,0xb1,0xae,0xaf, + 0xc8,0x41,0x41,0x41,0x41,0x41,0x42,0x42,0x42,0x42,0x42,0x43,0x44,0x45,0x46, + 0x46,0x46,0x46,0x47,0x47,0x48,0x48,0x48,0x49,0x49,0x49,0x49,0x4a,0x4b,0x4c, + 0x4c,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4e,0x4e,0x4e,0x4e,0x51,0x52,0x50,0x50, + 0x50,0x4e,0x53,0x5e,0x5e,0x4f,0x19,0x18,0x53,0x5e,0x56,0x54,0x54,0x56,0x57, + 0x57,0x5a,0x5a,0x5a,0x5c,0x5c,0x59,0x5a,0x5d,0x5d,0x5d,0x5d,0x5e,0x5e,0x5e, + 0x5f,0x5f,0x60,0x60,0x60,0x60,0x62,0x62,0x62,0x63,0x64,0x64,0x64,0x65,0x65, + 0x66,0x67,0x68,0x68,0x66,0x67,0x6d,0x6c,0x69,0x6a,0x6a,0x69,0x69,0x69,0x61, + 0x6d,0x8c,0x5e,0x23,0x1a,0x3f,0x88,0x83,0x6b,0x6f,0x71,0x70,0x6f,0x6f,0x71, + 0x74,0x74,0x71,0x70,0x76,0x75,0x71,0x73,0x76,0x79,0x7a,0x78,0x75,0x74,0x77, + 0x78,0x78,0x78,0x79,0x7a,0x7b,0x7b,0x79,0x7c,0x88,0x7e,0x65,0x39,0x3f,0x90, + 0x98,0x7f,0x91,0x8f,0x6c,0x50,0x48,0x70,0x88,0x82,0x82,0x82,0x7d,0x7f,0x86, + 0x78,0x65,0x66,0x72,0x85,0x72,0x5b,0x5f,0x71,0x8b,0x89,0x81,0x85,0x78,0x5e, + 0x6e,0x7f,0x73,0x6d,0x6f,0x7a,0x80,0x7a,0x7e,0x86,0x6c,0x5b,0x6b,0x7c,0x8d, + 0x95,0x93,0x80,0x82,0x8e,0x86,0x86,0x95,0x8b,0x7b,0x8d,0x95,0x84,0x7f,0x83, + 0x91,0x97,0x8d,0x8e,0x92,0x92,0x92,0x92,0x92,0x93,0x93,0x93,0x94,0x94,0x95, + 0x95,0x95,0x95,0x95,0x95,0x96,0x96,0x96,0x97,0x97,0x98,0x98,0x98,0x98,0x98, + 0x98,0x98,0x99,0x9a,0x9b,0x9b,0x9a,0x9a,0x9b,0x9b,0x9b,0x9c,0x9c,0x9b,0x9c, + 0x9c,0x9d,0x9c,0x9c,0x9b,0x9b,0x9c,0x9d,0x9e,0x9d,0x9c,0x9d,0xa0,0x9f,0x9f, + 0x9f,0x9f,0x9f,0xa0,0xa0,0xa0,0xa0,0xa0,0xa0,0xa0,0xa1,0xa0,0x9f,0xa3,0xa4, + 0xa2,0xa0,0xa0,0xa3,0xa5,0xa3,0xa2,0xa1,0x9e,0xaa,0xbd,0xa8,0x75,0x1d,0x00, + 0x04,0x69,0xba,0xb4,0xae,0xaa,0xa7,0xa4,0xa4,0xa4,0xa5,0xa6,0xa7,0xa7,0xa7, + 0xa8,0xa8,0xa7,0xa4,0xa5,0xa7,0xa7,0xa7,0xa8,0xa8,0xa8,0xac,0xaa,0xa3,0xad, + 0xb9,0xb2,0x79,0x0f,0x00,0x03,0x00,0x2b,0x9e,0xbb,0xb4,0xaa,0xa9,0xaf,0xac, + 0xa8,0xaa,0xaa,0xa9,0xa8,0xa9,0xaa,0xaa,0xaa,0xaa,0xa9,0xa9,0xaa,0xaa,0xaa, + 0xaa,0xae,0xaa,0xa3,0xa7,0xae,0xb1,0xb5,0xae,0x78,0x3c,0x0a,0x00,0x05,0x03, + 0x01,0x00,0x00,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x03,0x02,0x04,0x05,0x01, + 0x01,0x03,0x00,0x12,0x8d,0xc8,0xbe,0x58,0x00,0x03,0x05,0x04,0x02,0x01,0x03, + 0x03,0x02,0x03,0x00,0x00,0x3b,0xa8,0xbd,0xb9,0xb0,0xac,0xac,0xaf,0xb0,0xae, + 0xae,0xae,0xae,0xae,0xae,0xae,0xae,0xae,0xaf,0xb0,0xaf,0xae,0xac,0xac,0xad, + 0xaf,0xb1,0xad,0xae,0xb3,0xb0,0xad,0xae,0xb0,0xb1,0xab,0xa7,0xa8,0xac,0xb1, + 0xb2,0xb0,0xae,0xaf,0xb1,0xb0,0xae,0xaf,0xae,0xac,0xae,0xaf,0xaf,0xae,0xae, + 0xad,0xad,0xaf,0xae,0xad,0xac,0xae,0xb3,0xb2,0xae,0xaa,0xab,0xb2,0xb0,0xaa, + 0xb5,0xb5,0xa7,0x76,0x4c,0x7a,0xa2,0xb2,0xb8,0xae,0x8a,0x7f,0x95,0xa7,0xb3, + 0xae,0xad,0xc8,0x41,0x41,0x40,0x40,0x40,0x41,0x41,0x41,0x42,0x41,0x42,0x43, + 0x44,0x45,0x45,0x45,0x45,0x45,0x46,0x46,0x47,0x48,0x48,0x48,0x49,0x49,0x49, + 0x49,0x4a,0x4b,0x4c,0x4c,0x4c,0x4c,0x4c,0x4c,0x4c,0x4c,0x4c,0x4d,0x51,0x51, + 0x4c,0x4d,0x50,0x4c,0x51,0x61,0x5e,0x49,0x14,0x15,0x54,0x5b,0x50,0x50,0x52, + 0x57,0x57,0x57,0x5a,0x5b,0x59,0x5a,0x5b,0x57,0x57,0x5a,0x5a,0x5a,0x5b,0x5b, + 0x5c,0x5d,0x5d,0x5e,0x5e,0x5e,0x5e,0x5f,0x60,0x60,0x61,0x62,0x62,0x62,0x63, + 0x63,0x64,0x64,0x65,0x65,0x66,0x65,0x65,0x67,0x69,0x6b,0x69,0x66,0x65,0x68, + 0x6a,0x63,0x6d,0x87,0x57,0x1b,0x1a,0x41,0x83,0x7f,0x69,0x6c,0x6f,0x6f,0x6d, + 0x6c,0x6d,0x6f,0x6f,0x70,0x70,0x70,0x70,0x70,0x71,0x74,0x78,0x78,0x74,0x71, + 0x70,0x74,0x76,0x78,0x78,0x78,0x75,0x78,0x7b,0x78,0x79,0x84,0x7b,0x69,0x57, + 0x5f,0x89,0x8d,0x82,0x97,0x86,0x3d,0x1b,0x1e,0x62,0x8a,0x82,0x82,0x82,0x80, + 0x7c,0x78,0x70,0x69,0x5e,0x6b,0x8b,0x70,0x50,0x62,0x78,0x8c,0x7f,0x70,0x7f, + 0x78,0x5e,0x72,0x82,0x6d,0x63,0x67,0x78,0x89,0x8e,0x82,0x69,0x57,0x5a,0x85, + 0x8d,0x7f,0x8d,0x91,0x7f,0x82,0x8e,0x80,0x7e,0x98,0x8f,0x78,0x88,0x8f,0x80, + 0x80,0x89,0x91,0x92,0x8c,0x8d,0x91,0x91,0x91,0x91,0x91,0x92,0x91,0x92,0x92, + 0x93,0x94,0x94,0x94,0x93,0x94,0x94,0x95,0x95,0x95,0x95,0x96,0x96,0x97,0x97, + 0x97,0x98,0x98,0x98,0x98,0x99,0x9a,0x9a,0x99,0x99,0x99,0x9a,0x9a,0x99,0x99, + 0x9a,0x9b,0x9c,0x9c,0x9c,0x9c,0x9b,0x9b,0x9c,0x9c,0x9c,0x9c,0x9c,0x9c,0x9f, + 0x9e,0x9e,0x9e,0x9d,0x9e,0x9e,0x9f,0x9f,0xa0,0xa0,0xa0,0xa0,0xa1,0xa0,0xa0, + 0xa3,0xa3,0xa0,0xa0,0xa1,0xa3,0xa3,0xa0,0xa0,0xa1,0xa1,0xa9,0xb5,0xaa,0x80, + 0x1e,0x00,0x00,0x60,0xb1,0xab,0xa8,0xa9,0xa7,0xa5,0xa3,0xa3,0xa3,0xa5,0xa6, + 0xa6,0xa7,0xa8,0xa8,0xa7,0xa3,0xa4,0xa7,0xa6,0xa5,0xa7,0xa8,0xaa,0xae,0xad, + 0xa5,0xaa,0xb3,0xba,0x86,0x12,0x00,0x03,0x00,0x29,0x8d,0xb3,0xb9,0xae,0xaa, + 0xb0,0xad,0xa8,0xaa,0xaa,0xaa,0xaa,0xaa,0xab,0xab,0xaa,0xaa,0xaa,0xaa,0xaa, + 0xab,0xaa,0xaa,0xae,0xae,0xaa,0xa8,0xa3,0x9c,0xad,0xc4,0xb1,0x77,0x15,0x00, + 0x03,0x03,0x02,0x01,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x03,0x03,0x02, + 0x02,0x01,0x00,0x01,0x00,0x15,0x9b,0xc4,0x94,0x3a,0x00,0x03,0x07,0x03,0x00, + 0x00,0x06,0x06,0x03,0x01,0x00,0x00,0x4b,0xbb,0xbd,0xae,0xae,0xad,0xab,0xae, + 0xae,0xac,0xac,0xad,0xac,0xab,0xae,0xad,0xab,0xaa,0xab,0xad,0xae,0xad,0xab, + 0xab,0xac,0xae,0xaf,0xad,0xad,0xb2,0xae,0xab,0xaf,0xb0,0xad,0xae,0xaf,0xb0, + 0xaf,0xac,0xae,0xaf,0xae,0xae,0xae,0xae,0xae,0xae,0xae,0xad,0xad,0xae,0xae, + 0xae,0xb0,0xac,0xaa,0xae,0xae,0xac,0xab,0xad,0xb1,0xaf,0xab,0xaa,0xac,0xb2, + 0xae,0xa7,0xac,0xac,0xa3,0x70,0x44,0x78,0xa4,0xb6,0xb2,0xa0,0x7b,0x76,0x94, + 0xa7,0xb2,0xad,0xaa,0xc8,0x3f,0x3f,0x3d,0x3d,0x3d,0x3e,0x40,0x41,0x41,0x41, + 0x41,0x41,0x41,0x42,0x43,0x43,0x44,0x44,0x45,0x45,0x45,0x46,0x46,0x47,0x48, + 0x48,0x48,0x48,0x48,0x48,0x49,0x4a,0x4b,0x4b,0x4b,0x4b,0x4b,0x4c,0x4b,0x4c, + 0x4f,0x4e,0x48,0x4c,0x51,0x4d,0x52,0x60,0x5a,0x45,0x12,0x17,0x59,0x5e,0x50, + 0x50,0x51,0x55,0x56,0x57,0x58,0x59,0x58,0x59,0x59,0x56,0x56,0x58,0x59,0x59, + 0x59,0x5a,0x5a,0x5a,0x5b,0x5c,0x5d,0x5d,0x5d,0x5e,0x5e,0x5e,0x5e,0x5f,0x5f, + 0x60,0x60,0x61,0x62,0x62,0x62,0x62,0x63,0x64,0x63,0x60,0x65,0x6a,0x64,0x60, + 0x63,0x6d,0x74,0x6d,0x71,0x84,0x53,0x19,0x1e,0x45,0x80,0x77,0x5c,0x62,0x6a, + 0x70,0x6d,0x69,0x6b,0x6d,0x6d,0x71,0x74,0x6e,0x6d,0x70,0x71,0x70,0x6d,0x6f, + 0x74,0x72,0x70,0x75,0x78,0x7a,0x7b,0x7a,0x74,0x71,0x73,0x72,0x77,0x86,0x74, + 0x59,0x77,0x88,0x77,0x71,0x72,0x76,0x5e,0x21,0x26,0x4d,0x74,0x86,0x7f,0x81, + 0x84,0x81,0x7c,0x75,0x6d,0x65,0x5a,0x6a,0x91,0x77,0x56,0x67,0x72,0x6e,0x51, + 0x42,0x6d,0x78,0x65,0x7b,0x8d,0x7e,0x69,0x58,0x66,0x7b,0x8c,0x73,0x43,0x50, + 0x70,0x97,0x91,0x73,0x7e,0x8a,0x86,0x8d,0x93,0x7d,0x79,0x99,0x90,0x76,0x84, + 0x8a,0x7a,0x7f,0x8b,0x8b,0x8b,0x8e,0x8f,0x90,0x90,0x91,0x90,0x91,0x91,0x91, + 0x91,0x91,0x92,0x93,0x93,0x93,0x92,0x92,0x93,0x93,0x94,0x94,0x95,0x95,0x95, + 0x96,0x96,0x96,0x96,0x96,0x97,0x98,0x98,0x98,0x98,0x98,0x98,0x98,0x99,0x99, + 0x99,0x98,0x99,0x9b,0x9b,0x9c,0x9c,0x9c,0x9b,0x9b,0x9c,0x9c,0x9c,0x9c,0x9c, + 0x9c,0x9d,0x9d,0x9c,0x9c,0x9c,0x9c,0x9d,0x9e,0x9e,0x9f,0x9f,0xa0,0x9f,0x9c, + 0x9f,0xa2,0x9e,0x9d,0xa0,0xa3,0xa4,0x9d,0x9a,0x9a,0xa0,0xa3,0xa0,0xa4,0xac, + 0xad,0x8a,0x21,0x00,0x01,0x57,0x9c,0x95,0x94,0x98,0xa3,0xa8,0xa4,0xa3,0xa3, + 0xa3,0xa3,0xa3,0xa4,0xa7,0xa7,0xa6,0xa2,0xa4,0xa7,0xa5,0xa4,0xa7,0xa9,0xa9, + 0xaa,0xaa,0xa6,0xa9,0xae,0xbd,0x8b,0x13,0x00,0x00,0x00,0x22,0x7c,0xaa,0xba, + 0xac,0xa5,0xaa,0xab,0xaa,0xa9,0xa8,0xa9,0xa9,0xaa,0xaa,0xaa,0xaa,0xa9,0xa8, + 0xa8,0xa9,0xaa,0xaa,0xa7,0xa0,0xa5,0xb0,0xae,0xa8,0xa3,0xa3,0xa9,0xbf,0x9c, + 0x1a,0x00,0x03,0x03,0x02,0x02,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01, + 0x02,0x01,0x00,0x02,0x03,0x02,0x00,0x1e,0xa6,0xab,0x43,0x15,0x00,0x03,0x05, + 0x05,0x03,0x04,0x0b,0x0e,0x0d,0x02,0x03,0x1a,0x65,0xbd,0xb3,0xa3,0xab,0xae, + 0xad,0xac,0xab,0xaa,0xaa,0xaa,0xa9,0xaa,0xae,0xac,0xaa,0xa8,0xa8,0xaa,0xab, + 0xab,0xab,0xab,0xab,0xac,0xae,0xaf,0xad,0xa6,0xaa,0xaf,0xaa,0xa7,0xa8,0xb9, + 0xc8,0xc4,0xb8,0xa7,0xa8,0xac,0xab,0xaa,0xaa,0xaa,0xaa,0xad,0xad,0xac,0xaa, + 0xaa,0xaa,0xac,0xad,0xac,0xab,0xaa,0xac,0xae,0xae,0xaa,0xa7,0xa8,0xae,0xb0, + 0xaf,0xaa,0xa8,0xa8,0xb0,0xaa,0x91,0x83,0x7a,0x69,0x7b,0xb5,0xa7,0x85,0x89, + 0x92,0x9d,0xa6,0xaa,0xa8,0xa7,0xc8,0x3d,0x3c,0x3b,0x3a,0x3b,0x3d,0x3e,0x3f, + 0x3f,0x3e,0x3e,0x3f,0x40,0x40,0x41,0x41,0x41,0x42,0x42,0x43,0x44,0x44,0x45, + 0x45,0x45,0x46,0x46,0x45,0x45,0x46,0x47,0x48,0x48,0x48,0x48,0x48,0x48,0x49, + 0x49,0x49,0x4c,0x4c,0x48,0x4c,0x50,0x4d,0x50,0x5a,0x51,0x3a,0x11,0x1a,0x5a, + 0x5e,0x50,0x50,0x51,0x51,0x53,0x55,0x53,0x55,0x57,0x57,0x55,0x53,0x53,0x57, + 0x57,0x57,0x57,0x58,0x58,0x59,0x5a,0x5a,0x5a,0x5a,0x5b,0x5b,0x5b,0x5b,0x5c, + 0x5c,0x5d,0x5e,0x5e,0x5e,0x5e,0x5f,0x60,0x60,0x61,0x62,0x62,0x5f,0x62,0x65, + 0x61,0x60,0x65,0x6c,0x71,0x67,0x6d,0x86,0x55,0x1a,0x1f,0x44,0x7e,0x6e,0x50, + 0x5a,0x67,0x6f,0x65,0x5c,0x68,0x6d,0x6b,0x6d,0x70,0x71,0x72,0x72,0x6f,0x67, + 0x57,0x5e,0x78,0x78,0x73,0x70,0x72,0x75,0x76,0x75,0x73,0x70,0x6f,0x76,0x7a, + 0x78,0x63,0x50,0x81,0x93,0x64,0x48,0x40,0x5a,0x62,0x45,0x57,0x7a,0x81,0x80, + 0x7b,0x7b,0x7e,0x81,0x7f,0x76,0x65,0x59,0x64,0x75,0x88,0x6f,0x53,0x61,0x66, + 0x5d,0x42,0x3a,0x6d,0x79,0x61,0x70,0x83,0x84,0x6c,0x47,0x61,0x7e,0x80,0x5f, + 0x32,0x56,0x82,0x94,0x8b,0x74,0x79,0x82,0x8a,0x91,0x92,0x7b,0x76,0x93,0x8c, + 0x77,0x82,0x86,0x75,0x7a,0x86,0x80,0x7f,0x8b,0x8e,0x8e,0x8e,0x8f,0x8f,0x8f, + 0x90,0x90,0x90,0x90,0x91,0x91,0x92,0x92,0x91,0x91,0x91,0x92,0x92,0x93,0x94, + 0x94,0x95,0x95,0x95,0x95,0x95,0x95,0x95,0x95,0x96,0x96,0x96,0x96,0x97,0x98, + 0x98,0x98,0x98,0x98,0x98,0x99,0x99,0x9a,0x9b,0x9b,0x9b,0x9b,0x9b,0x9b,0x9b, + 0x9b,0x9b,0x9b,0x9b,0x9b,0x9b,0x9c,0x9c,0x9c,0x9c,0x9c,0x9d,0x9d,0x9e,0xa0, + 0x9f,0x9e,0x9e,0x9e,0x9c,0x9d,0xa0,0xa0,0x9e,0xa0,0xa5,0xaa,0xa1,0x98,0x9d, + 0xa5,0xad,0xa7,0x80,0x1e,0x00,0x00,0x57,0x9d,0x97,0x91,0x90,0x9f,0xa8,0xa3, + 0xa1,0xa0,0xa1,0xa1,0xa0,0xa1,0xa4,0xa6,0xa6,0xa3,0xa3,0xa7,0xa3,0xa3,0xa7, + 0xa8,0xa7,0xa7,0xa7,0xa6,0xa9,0xad,0xbe,0x8d,0x15,0x00,0x01,0x00,0x1d,0x6f, + 0xa3,0xbc,0xaa,0xa1,0xa6,0xaa,0xaa,0xa7,0xa5,0xa7,0xa7,0xa8,0xa8,0xa8,0xa7, + 0xa7,0xa7,0xa7,0xa7,0xa7,0xa8,0xa7,0xa2,0xa5,0xad,0xac,0xa8,0xa5,0xa3,0xa5, + 0xc1,0xa9,0x35,0x05,0x03,0x01,0x03,0x03,0x02,0x01,0x00,0x00,0x01,0x01,0x01, + 0x00,0x00,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01, + 0x01,0x00,0x00,0x01,0x02,0x05,0x03,0x00,0x08,0x2f,0x98,0x88,0x18,0x00,0x01, + 0x05,0x06,0x05,0x07,0x08,0x08,0x0a,0x0c,0x00,0x07,0x33,0x7a,0xc0,0xb3,0xa3, + 0xaa,0xac,0xab,0xaa,0xaa,0xac,0xab,0xaa,0xa9,0xaa,0xae,0xad,0xaa,0xa9,0xa9, + 0xa9,0xaa,0xab,0xac,0xac,0xac,0xab,0xab,0xac,0xaa,0xa7,0xaa,0xad,0xa7,0xaa, + 0xb2,0xa4,0x97,0x9d,0xa7,0xb1,0xad,0xa8,0xaa,0xa9,0xa7,0xa8,0xaa,0xac,0xad, + 0xac,0xa9,0xa8,0xaa,0xab,0xaa,0xaa,0xab,0xab,0xac,0xad,0xad,0xaa,0xa6,0xa8, + 0xac,0xac,0xaa,0xaa,0xab,0xad,0xac,0xa6,0x99,0x9e,0x9f,0x6f,0x70,0xb1,0x9c, + 0x77,0x92,0xa6,0xa6,0xa1,0x9a,0x90,0x94,0xc8,0x3a,0x3a,0x38,0x38,0x39,0x3a, + 0x3c,0x3d,0x3d,0x3c,0x3c,0x3d,0x3e,0x3e,0x3e,0x3e,0x3f,0x40,0x40,0x41,0x41, + 0x41,0x42,0x42,0x43,0x44,0x44,0x43,0x43,0x44,0x45,0x45,0x47,0x47,0x47,0x47, + 0x47,0x47,0x47,0x48,0x49,0x4a,0x4a,0x4c,0x4f,0x4c,0x4e,0x56,0x47,0x2e,0x0f, + 0x1d,0x5a,0x5e,0x50,0x51,0x50,0x4d,0x50,0x53,0x50,0x50,0x56,0x54,0x51,0x50, + 0x51,0x56,0x56,0x56,0x56,0x56,0x57,0x57,0x57,0x58,0x58,0x59,0x59,0x59,0x59, + 0x59,0x5a,0x5a,0x5a,0x5c,0x5c,0x5c,0x5c,0x5d,0x5e,0x5e,0x5e,0x5f,0x60,0x61, + 0x5f,0x5e,0x5f,0x63,0x69,0x65,0x5e,0x54,0x64,0x8b,0x5a,0x19,0x1d,0x41,0x7a, + 0x67,0x47,0x58,0x65,0x69,0x58,0x4e,0x66,0x6f,0x66,0x60,0x60,0x71,0x78,0x74, + 0x6b,0x5c,0x41,0x50,0x79,0x7b,0x74,0x6b,0x69,0x6d,0x6e,0x70,0x73,0x70,0x6d, + 0x7d,0x7f,0x63,0x52,0x52,0x80,0x8b,0x54,0x27,0x14,0x50,0x79,0x77,0x88,0x98, + 0x86,0x79,0x77,0x75,0x75,0x7e,0x80,0x7a,0x5c,0x48,0x70,0x82,0x76,0x62,0x53, + 0x57,0x5a,0x5a,0x49,0x46,0x75,0x79,0x57,0x5b,0x6c,0x7f,0x69,0x39,0x5f,0x82, + 0x6b,0x4c,0x34,0x65,0x90,0x85,0x7f,0x7b,0x78,0x7b,0x8a,0x90,0x8d,0x7b,0x74, + 0x89,0x86,0x78,0x7f,0x80,0x71,0x76,0x80,0x75,0x74,0x87,0x8d,0x8c,0x8d,0x8d, + 0x8d,0x8d,0x8e,0x8e,0x8e,0x8e,0x8f,0x90,0x91,0x91,0x90,0x90,0x91,0x91,0x91, + 0x92,0x92,0x92,0x93,0x93,0x94,0x94,0x94,0x93,0x93,0x94,0x94,0x94,0x94,0x94, + 0x95,0x96,0x97,0x97,0x97,0x97,0x98,0x98,0x98,0x98,0x98,0x99,0x9a,0x9a,0x9a, + 0x9a,0x9a,0x9a,0x9a,0x99,0x98,0x98,0x99,0x9a,0x9a,0x9b,0x9b,0x9b,0x9c,0x9c, + 0x9d,0x9e,0xa0,0xa0,0x9c,0x99,0x9c,0x9e,0xa0,0x9a,0x97,0xa3,0xaf,0xb5,0xa0, + 0x8e,0x99,0xa7,0xb2,0xa0,0x70,0x1a,0x00,0x00,0x57,0xa2,0xa3,0x9a,0x8f,0x9c, + 0xa7,0xa2,0xa0,0x9f,0xa0,0xa0,0x9e,0xa0,0xa3,0xa5,0xa5,0xa3,0xa3,0xa4,0xa2, + 0xa2,0xa6,0xa6,0xa4,0xa3,0xa3,0xa5,0xa7,0xac,0xbd,0x8e,0x15,0x00,0x04,0x00, + 0x18,0x62,0x9d,0xbd,0xa8,0x9d,0xa3,0xa7,0xa9,0xa4,0xa3,0xa4,0xa5,0xa6,0xa5, + 0xa4,0xa4,0xa4,0xa5,0xa5,0xa5,0xa5,0xa6,0xa8,0xaa,0xa8,0xa5,0xa6,0xa7,0xa4, + 0xa6,0xaa,0xba,0xa5,0x53,0x1e,0x03,0x00,0x03,0x03,0x02,0x00,0x00,0x00,0x02, + 0x02,0x02,0x01,0x00,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x01,0x02,0x01,0x00,0x01,0x04,0x07,0x03,0x00,0x13,0x38,0x73,0x5b,0x07, + 0x00,0x00,0x07,0x08,0x05,0x09,0x0a,0x02,0x02,0x07,0x00,0x0d,0x4f,0x8f,0xc0, + 0xb6,0xa7,0xa8,0xa9,0xa9,0xaa,0xab,0xad,0xad,0xab,0xa9,0xa9,0xac,0xad,0xad, + 0xac,0xaa,0xaa,0xaa,0xaa,0xab,0xac,0xac,0xab,0xaa,0xa7,0xa8,0xad,0xab,0xa9, + 0xa7,0xb2,0xbf,0x7d,0x42,0x5a,0x89,0xbe,0xb7,0xa5,0xa9,0xa9,0xa6,0xa8,0xab, + 0xac,0xac,0xac,0xa8,0xa7,0xac,0xab,0xa8,0xa8,0xaa,0xae,0xac,0xa9,0xaa,0xab, + 0xaa,0xaa,0xaa,0xa4,0xa4,0xad,0xb0,0xae,0xa5,0xa3,0xac,0xb3,0xae,0x7b,0x74, + 0xaa,0x94,0x73,0x98,0xae,0xaa,0x9c,0x8a,0x79,0x7f,0xc8,0x36,0x36,0x36,0x36, + 0x36,0x39,0x3b,0x3b,0x3b,0x3a,0x3a,0x3b,0x3d,0x3d,0x3c,0x3d,0x3d,0x3d,0x3e, + 0x3e,0x3f,0x3f,0x40,0x40,0x41,0x41,0x42,0x41,0x42,0x42,0x43,0x45,0x45,0x45, + 0x45,0x45,0x45,0x45,0x45,0x46,0x48,0x48,0x48,0x4a,0x4c,0x47,0x4b,0x58,0x45, + 0x26,0x0b,0x1d,0x5a,0x5d,0x4c,0x4c,0x4e,0x4f,0x50,0x50,0x4f,0x50,0x50,0x51, + 0x50,0x4f,0x50,0x54,0x55,0x54,0x54,0x54,0x54,0x55,0x56,0x56,0x57,0x57,0x57, + 0x57,0x57,0x58,0x58,0x59,0x5a,0x5a,0x5a,0x5b,0x5b,0x5c,0x5c,0x5d,0x5d,0x5d, + 0x5c,0x5e,0x5e,0x5e,0x5a,0x60,0x74,0x53,0x28,0x2c,0x53,0x8f,0x57,0x08,0x17, + 0x3c,0x68,0x60,0x50,0x69,0x6c,0x57,0x4a,0x4c,0x6d,0x71,0x57,0x3e,0x38,0x5e, + 0x76,0x7c,0x6b,0x56,0x48,0x56,0x73,0x71,0x6a,0x6b,0x6d,0x6f,0x71,0x71,0x70, + 0x6c,0x6a,0x7c,0x7c,0x58,0x50,0x5f,0x86,0x8a,0x53,0x41,0x4c,0x79,0x7f,0x4a, + 0x59,0x7f,0x7b,0x75,0x77,0x79,0x79,0x6d,0x71,0x85,0x5d,0x37,0x68,0x7b,0x67, + 0x66,0x66,0x53,0x5b,0x79,0x62,0x4f,0x74,0x77,0x57,0x49,0x4c,0x67,0x5d,0x3a, + 0x57,0x6d,0x4c,0x43,0x52,0x7c,0x95,0x7b,0x73,0x77,0x74,0x78,0x86,0x8d,0x8c, + 0x7c,0x76,0x82,0x7f,0x75,0x74,0x73,0x6d,0x78,0x86,0x76,0x74,0x8d,0x90,0x8a, + 0x8a,0x8a,0x8b,0x8b,0x8b,0x8c,0x8c,0x8c,0x8d,0x8d,0x8d,0x8e,0x8e,0x8f,0x8f, + 0x90,0x91,0x91,0x91,0x91,0x91,0x91,0x92,0x91,0x92,0x93,0x93,0x94,0x93,0x92, + 0x93,0x93,0x94,0x95,0x95,0x97,0x96,0x95,0x95,0x96,0x95,0x95,0x97,0x98,0x99, + 0x99,0x99,0x99,0x98,0x98,0x99,0x98,0x98,0x98,0x98,0x9a,0x9a,0x9a,0x9a,0x9a, + 0x9a,0x9b,0x9c,0x9d,0x9c,0x9a,0x9b,0x9c,0x9c,0x9a,0x98,0x9f,0xa3,0x9b,0x8d, + 0x80,0x95,0xa8,0x98,0x9e,0xb2,0xa7,0x7c,0x20,0x00,0x00,0x3d,0x7e,0xa4,0xab, + 0x9d,0x9f,0xa0,0x9d,0x9d,0x9f,0xa0,0xa0,0x9f,0xa0,0xa3,0xa5,0xa4,0xa0,0xa0, + 0xa2,0xa2,0xa2,0xa3,0xa0,0x9e,0xa2,0xa3,0xa0,0x9f,0xa1,0xb9,0x8d,0x13,0x00, + 0x07,0x00,0x14,0x55,0x95,0xbe,0xa6,0x9c,0xa6,0xa5,0xa2,0xa3,0xa4,0xa5,0xa6, + 0xa6,0xa4,0xa3,0xa3,0xa3,0xa5,0xa6,0xa6,0xa6,0xa6,0xa6,0xa7,0xa3,0x9e,0xa2, + 0xa5,0xa1,0xa3,0xa7,0xae,0x96,0x4e,0x1b,0x00,0x00,0x05,0x03,0x01,0x00,0x00, + 0x00,0x02,0x03,0x03,0x01,0x00,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x01,0x01,0x00,0x01,0x03,0x02,0x02,0x03,0x02,0x00,0x0a,0x19,0x27, + 0x1d,0x03,0x02,0x07,0x08,0x07,0x03,0x03,0x03,0x03,0x04,0x06,0x00,0x0f,0x7f, + 0xaf,0xb2,0xae,0xa9,0xa7,0xa7,0xa7,0xa8,0xa9,0xa7,0xa9,0xaa,0xa9,0xa7,0xa7, + 0xa9,0xac,0xad,0xac,0xa9,0xa7,0xa7,0xa9,0xaa,0xaa,0xa8,0xa7,0xa9,0xaa,0xa8, + 0xa7,0xa8,0xac,0xb2,0xb0,0x5a,0x12,0x2c,0x6e,0xc0,0xb7,0x9e,0xa7,0xa9,0xa5, + 0xa7,0xaa,0xa9,0xa8,0xa9,0xa6,0xa6,0xad,0xad,0xa9,0xa8,0xa7,0xa7,0xa7,0xa7, + 0xab,0xac,0xa6,0xa8,0xad,0xa7,0xa6,0xac,0xa7,0xa0,0xa4,0xa9,0xaa,0xa5,0x96, + 0x68,0x68,0xa2,0x99,0x80,0x94,0xa2,0xa4,0x9f,0x97,0x94,0x86,0xc8,0x36,0x35, + 0x35,0x35,0x36,0x37,0x37,0x37,0x37,0x39,0x39,0x3a,0x3a,0x3b,0x3a,0x3b,0x3b, + 0x3c,0x3c,0x3d,0x3d,0x3d,0x3d,0x3d,0x3e,0x3f,0x40,0x3f,0x40,0x41,0x41,0x42, + 0x43,0x44,0x44,0x44,0x43,0x44,0x45,0x45,0x46,0x46,0x45,0x47,0x47,0x42,0x48, + 0x5a,0x42,0x1e,0x0a,0x20,0x5a,0x5a,0x47,0x48,0x4c,0x4e,0x4f,0x4e,0x4e,0x4d, + 0x4c,0x4e,0x50,0x4e,0x50,0x53,0x53,0x52,0x53,0x53,0x53,0x53,0x53,0x54,0x54, + 0x54,0x54,0x54,0x55,0x56,0x57,0x57,0x59,0x59,0x5a,0x5a,0x5a,0x5b,0x5b,0x5b, + 0x5b,0x5a,0x5a,0x5a,0x5d,0x5e,0x56,0x5e,0x7a,0x46,0x05,0x12,0x45,0x8e,0x53, + 0x00,0x14,0x37,0x5d,0x5c,0x56,0x6d,0x67,0x42,0x3d,0x49,0x67,0x66,0x48,0x2b, + 0x24,0x4c,0x69,0x78,0x65,0x4f,0x47,0x56,0x70,0x6c,0x65,0x6a,0x6d,0x6e,0x70, + 0x70,0x6c,0x69,0x6a,0x79,0x74,0x4e,0x56,0x75,0x83,0x78,0x50,0x5c,0x80,0x91, + 0x7a,0x32,0x3f,0x6b,0x6d,0x6d,0x74,0x79,0x78,0x64,0x68,0x86,0x60,0x37,0x5e, + 0x6e,0x5e,0x66,0x6d,0x50,0x57,0x80,0x6d,0x57,0x6c,0x6d,0x58,0x3d,0x32,0x54, + 0x58,0x44,0x4f,0x53,0x34,0x40,0x6b,0x88,0x8f,0x74,0x6c,0x72,0x73,0x76,0x80, + 0x86,0x87,0x7f,0x7b,0x7d,0x7b,0x76,0x6b,0x67,0x6f,0x7a,0x83,0x78,0x78,0x8d, + 0x8d,0x87,0x88,0x89,0x89,0x8a,0x8b,0x8a,0x8a,0x8a,0x8a,0x8c,0x8c,0x8d,0x8d, + 0x8d,0x8e,0x8e,0x8e,0x8e,0x8f,0x8f,0x8e,0x8f,0x90,0x90,0x91,0x92,0x92,0x92, + 0x92,0x92,0x91,0x91,0x91,0x94,0x94,0x8f,0x8f,0x91,0x95,0x96,0x95,0x95,0x94, + 0x95,0x97,0x98,0x98,0x95,0x97,0x98,0x98,0x97,0x97,0x97,0x97,0x98,0x99,0x99, + 0x98,0x98,0x98,0x99,0x9a,0x9b,0x99,0x95,0x98,0x9c,0x9a,0x96,0x93,0xa5,0xad, + 0x87,0x5f,0x42,0x82,0xbd,0xa0,0x97,0xa3,0xa3,0x82,0x24,0x00,0x03,0x27,0x5d, + 0xa1,0xb4,0xa3,0x9f,0x9c,0x9b,0x9b,0x9c,0xa0,0xa1,0xa0,0xa0,0xa0,0xa3,0xa3, + 0x9f,0x9f,0xa0,0xa1,0xa1,0xa0,0x9c,0x9b,0xa1,0xa3,0x9b,0x98,0x9c,0xb5,0x8a, + 0x12,0x00,0x08,0x00,0x10,0x45,0x8c,0xc0,0xa6,0x9b,0xa7,0xa3,0x9e,0xa1,0xa4, + 0xa6,0xa6,0xa5,0xa3,0xa3,0xa2,0xa3,0xa4,0xa5,0xa6,0xa5,0xa5,0xa4,0xa4,0xa0, + 0x9c,0xa0,0xa2,0x9f,0xa0,0xa3,0xa6,0x95,0x64,0x36,0x0f,0x06,0x03,0x03,0x02, + 0x00,0x00,0x00,0x02,0x03,0x02,0x01,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x01,0x01,0x00,0x00,0x04,0x03,0x00,0x01,0x02,0x02,0x03, + 0x02,0x00,0x00,0x05,0x07,0x08,0x07,0x05,0x02,0x00,0x00,0x05,0x05,0x03,0x00, + 0x2b,0xa3,0xc1,0xa5,0xa5,0xa7,0xa7,0xa5,0xa4,0xa6,0xa6,0xa2,0xa3,0xa5,0xa4, + 0xa3,0xa2,0xa5,0xa9,0xaa,0xaa,0xa7,0xa6,0xa4,0xa5,0xa7,0xa7,0xa6,0xa5,0xaa, + 0xa9,0xa3,0xa3,0xa7,0xae,0xb2,0xa7,0x4a,0x00,0x0b,0x53,0xb9,0xb6,0x9f,0xa4, + 0xa6,0xa3,0xa6,0xa8,0xa8,0xa7,0xa3,0x9b,0x99,0xa5,0xaa,0xaa,0xa9,0xa8,0xa6, + 0xa5,0xa7,0xaa,0xa9,0xa3,0xa5,0xab,0xa8,0xa7,0xa9,0x9f,0x92,0x9a,0xa2,0xa4, + 0x94,0x7a,0x5e,0x60,0x83,0x7f,0x74,0x8b,0x9a,0x9c,0x9a,0x99,0xa3,0x89,0xc8, + 0x38,0x38,0x35,0x35,0x37,0x34,0x30,0x2f,0x32,0x38,0x39,0x37,0x35,0x36,0x3a, + 0x3a,0x39,0x3a,0x3a,0x3b,0x3b,0x3b,0x3a,0x3a,0x3a,0x3c,0x3d,0x3a,0x3d,0x41, + 0x40,0x3f,0x40,0x41,0x42,0x41,0x41,0x41,0x42,0x43,0x44,0x45,0x45,0x43,0x41, + 0x3f,0x47,0x59,0x3b,0x13,0x0e,0x27,0x5a,0x56,0x42,0x46,0x49,0x49,0x4d,0x4f, + 0x4c,0x49,0x47,0x4c,0x52,0x4f,0x4f,0x52,0x50,0x4e,0x52,0x53,0x52,0x52,0x53, + 0x52,0x52,0x53,0x53,0x53,0x53,0x53,0x54,0x55,0x57,0x58,0x57,0x57,0x58,0x5a, + 0x5a,0x5a,0x59,0x5a,0x5a,0x58,0x5a,0x5d,0x55,0x5d,0x79,0x47,0x07,0x10,0x3f, + 0x86,0x53,0x07,0x14,0x36,0x5e,0x5d,0x52,0x5d,0x50,0x2c,0x33,0x45,0x4c,0x49, + 0x3d,0x33,0x32,0x41,0x53,0x61,0x57,0x45,0x33,0x48,0x73,0x71,0x68,0x67,0x67, + 0x68,0x69,0x69,0x68,0x6a,0x6e,0x74,0x69,0x44,0x60,0x92,0x71,0x50,0x45,0x66, + 0x91,0x82,0x69,0x51,0x5b,0x6f,0x61,0x5e,0x70,0x73,0x6d,0x66,0x6a,0x78,0x64, + 0x4c,0x57,0x5e,0x5a,0x5c,0x5a,0x48,0x48,0x5e,0x60,0x5d,0x5b,0x5b,0x5a,0x38, + 0x27,0x4f,0x5f,0x57,0x48,0x36,0x27,0x41,0x75,0x82,0x7e,0x6e,0x6a,0x70,0x75, + 0x78,0x78,0x7b,0x7f,0x83,0x82,0x78,0x7a,0x7e,0x67,0x61,0x77,0x79,0x74,0x7a, + 0x7f,0x82,0x83,0x85,0x89,0x8a,0x87,0x8a,0x8d,0x8c,0x8a,0x88,0x8a,0x8d,0x8c, + 0x8b,0x8b,0x8d,0x8f,0x8c,0x8b,0x8c,0x8d,0x8d,0x8b,0x8b,0x8d,0x8e,0x8f,0x91, + 0x90,0x8d,0x91,0x93,0x91,0x8e,0x8d,0x95,0x94,0x7e,0x7f,0x8e,0x95,0x98,0x98, + 0x95,0x90,0x8f,0x91,0x98,0x95,0x8e,0x94,0x98,0x95,0x95,0x97,0x95,0x95,0x95, + 0x97,0x98,0x97,0x96,0x97,0x98,0x98,0x98,0x96,0x95,0x95,0x97,0x97,0x95,0x94, + 0xaa,0xad,0x6b,0x2f,0x0c,0x65,0xbe,0xae,0x96,0x82,0x8a,0x79,0x22,0x00,0x03, + 0x1d,0x4c,0x9b,0xaf,0x99,0x99,0x9c,0x9c,0x9a,0x98,0x9c,0x9f,0x9e,0x9b,0x99, + 0xa0,0xa3,0x9e,0x9d,0xa0,0xa0,0xa0,0x9e,0x9d,0x9e,0xa0,0xa0,0x98,0x99,0x9f, + 0xb3,0x86,0x12,0x00,0x07,0x00,0x0c,0x32,0x81,0xc1,0xa7,0x9a,0xa3,0xa3,0xa0, + 0xa0,0xa2,0xa4,0xa3,0xa1,0xa0,0xa0,0xa1,0xa1,0xa2,0xa3,0xa3,0xa3,0xa3,0xa4, + 0xa4,0xa3,0xa1,0x9d,0x9c,0x9d,0x9d,0x9d,0xa6,0xaa,0xa5,0x7b,0x3f,0x14,0x00, + 0x03,0x04,0x03,0x02,0x01,0x01,0x01,0x00,0x01,0x01,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x00,0x00,0x02,0x01,0x00,0x03,0x03, + 0x00,0x02,0x04,0x02,0x04,0x08,0x05,0x03,0x05,0x04,0x03,0x03,0x03,0x03,0x00, + 0x00,0x2b,0x69,0xb2,0xbc,0x9f,0x9c,0x9f,0xa4,0xa5,0xa2,0xa3,0xa1,0x9d,0x9a, + 0x98,0x98,0x9b,0xa0,0xa2,0xa3,0xa3,0xa4,0xa7,0xa6,0xa3,0xa2,0xa2,0xa3,0xa3, + 0xa4,0xa7,0xa5,0xa0,0xa0,0xa3,0xab,0xb3,0xaf,0x52,0x00,0x00,0x3a,0xa8,0xb7, + 0xa9,0xa2,0xa0,0xa0,0xa2,0xa5,0xab,0xa7,0x99,0x83,0x7b,0x93,0xa1,0xa7,0xad, + 0xae,0xaa,0xa8,0xa7,0xa4,0xa2,0xa0,0xa3,0xa5,0xa3,0xa2,0xa6,0x9c,0x8c,0x82, + 0x8a,0xa2,0x89,0x62,0x69,0x62,0x46,0x3a,0x45,0x7e,0x9c,0x92,0x8b,0x87,0x93, + 0x7b,0xc8,0x37,0x36,0x32,0x32,0x37,0x36,0x33,0x30,0x32,0x36,0x36,0x35,0x33, + 0x34,0x35,0x36,0x36,0x3a,0x3a,0x38,0x37,0x38,0x3a,0x39,0x37,0x38,0x39,0x3a, + 0x3c,0x3e,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3f,0x41,0x41,0x3e,0x40,0x41,0x41, + 0x40,0x3e,0x41,0x4a,0x58,0x36,0x0d,0x0f,0x2b,0x59,0x53,0x41,0x48,0x4b,0x45, + 0x48,0x4c,0x4b,0x48,0x45,0x49,0x4e,0x4c,0x4c,0x50,0x4e,0x4c,0x4e,0x4f,0x50, + 0x50,0x50,0x4f,0x50,0x51,0x51,0x50,0x50,0x52,0x53,0x52,0x50,0x51,0x53,0x55, + 0x56,0x57,0x57,0x57,0x57,0x56,0x57,0x5a,0x5a,0x59,0x53,0x5e,0x78,0x48,0x09, + 0x09,0x33,0x7d,0x50,0x09,0x12,0x32,0x5d,0x56,0x41,0x3d,0x31,0x1f,0x33,0x49, + 0x3d,0x37,0x39,0x36,0x35,0x33,0x3d,0x4d,0x47,0x3d,0x3a,0x4c,0x6b,0x6c,0x66, + 0x65,0x65,0x69,0x67,0x66,0x66,0x70,0x78,0x63,0x51,0x50,0x70,0x91,0x57,0x35, + 0x4d,0x65,0x76,0x6b,0x60,0x5f,0x6f,0x7c,0x59,0x50,0x71,0x71,0x65,0x67,0x65, + 0x5d,0x55,0x53,0x5e,0x63,0x5e,0x60,0x5d,0x40,0x3f,0x5a,0x63,0x61,0x52,0x53, + 0x61,0x54,0x46,0x47,0x50,0x5a,0x4b,0x3c,0x3d,0x50,0x6d,0x75,0x77,0x74,0x70, + 0x6d,0x76,0x7b,0x78,0x76,0x78,0x84,0x86,0x73,0x74,0x7c,0x69,0x62,0x73,0x6b, + 0x60,0x7b,0x8a,0x82,0x81,0x82,0x87,0x88,0x84,0x86,0x89,0x89,0x87,0x85,0x87, + 0x8a,0x8a,0x88,0x87,0x89,0x8a,0x8a,0x8a,0x8b,0x8a,0x89,0x88,0x8a,0x8c,0x8c, + 0x8b,0x8c,0x8c,0x8d,0x8e,0x8f,0x8d,0x8b,0x8a,0x96,0x96,0x7a,0x7b,0x8d,0x8d, + 0x8d,0x95,0x95,0x90,0x8e,0x90,0x95,0x94,0x91,0x92,0x93,0x93,0x92,0x91,0x91, + 0x91,0x8f,0x90,0x91,0x92,0x93,0x95,0x94,0x92,0x95,0x95,0x95,0x95,0x96,0x93, + 0x92,0x94,0xa9,0xab,0x72,0x32,0x00,0x3c,0x8b,0xa4,0x9c,0x80,0x90,0x86,0x26, + 0x00,0x03,0x21,0x54,0x9e,0xae,0x93,0x96,0x9b,0x98,0x98,0x97,0x99,0x9a,0x9a, + 0x9a,0x9b,0x9d,0x9d,0x9a,0x9b,0x9c,0x9d,0x9c,0x99,0x9a,0x9d,0xa0,0x9f,0x9b, + 0x9b,0xa0,0xb3,0x86,0x13,0x00,0x04,0x00,0x0a,0x29,0x7c,0xc0,0xa5,0x96,0x9f, + 0xa0,0x9e,0x9f,0xa0,0x9f,0xa0,0xa1,0x9f,0x9f,0xa1,0xa0,0xa0,0xa0,0xa0,0xa2, + 0xa1,0xa1,0xa1,0xa0,0xa0,0x9c,0x9b,0x9f,0x9e,0x9c,0x9f,0xa0,0x9c,0x7f,0x50, + 0x1b,0x00,0x03,0x04,0x03,0x01,0x00,0x01,0x01,0x01,0x01,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x00,0x00,0x00, + 0x03,0x04,0x02,0x03,0x03,0x04,0x05,0x05,0x03,0x02,0x04,0x05,0x04,0x04,0x04, + 0x03,0x00,0x09,0x5c,0xa1,0xae,0xaa,0x9e,0x9c,0x9e,0xa3,0xa4,0xa2,0xa2,0xa1, + 0x9e,0x9b,0x99,0x98,0x9c,0xa3,0xa0,0x98,0x96,0x99,0xa0,0xa3,0xa3,0xa0,0xa0, + 0xa4,0xa4,0xa3,0xa5,0xa5,0xa3,0xa3,0xa4,0xa4,0xae,0xb7,0x62,0x0a,0x00,0x30, + 0x9d,0xb3,0xab,0xa1,0x9c,0x9c,0x9a,0x9a,0xa1,0xa3,0x9d,0x7a,0x6a,0x8d,0x93, + 0x86,0x7f,0x7f,0x82,0x95,0xac,0xaa,0xa3,0x9f,0x9f,0xa0,0x9d,0xa0,0xa8,0x94, + 0x74,0x66,0x78,0xac,0x8a,0x50,0x62,0x69,0x53,0x46,0x49,0x79,0x8b,0x77,0x6b, + 0x64,0x65,0x59,0xc8,0x2e,0x2d,0x29,0x2b,0x34,0x39,0x3a,0x36,0x34,0x33,0x32, + 0x32,0x35,0x34,0x31,0x32,0x34,0x3a,0x39,0x35,0x34,0x35,0x39,0x38,0x35,0x35, + 0x36,0x3b,0x3c,0x3b,0x3b,0x3c,0x3c,0x3a,0x37,0x39,0x3d,0x41,0x3f,0x3b,0x3d, + 0x3d,0x3e,0x3e,0x3f,0x43,0x4b,0x57,0x32,0x0a,0x12,0x2f,0x56,0x50,0x41,0x4c, + 0x4d,0x43,0x44,0x47,0x49,0x48,0x45,0x46,0x48,0x48,0x4a,0x4c,0x4c,0x4c,0x48, + 0x4a,0x4e,0x4d,0x4c,0x4c,0x4d,0x50,0x4e,0x4d,0x4f,0x51,0x53,0x4f,0x4b,0x49, + 0x4e,0x54,0x53,0x51,0x51,0x53,0x55,0x51,0x53,0x5e,0x5a,0x53,0x52,0x5e,0x74, + 0x48,0x0d,0x03,0x27,0x70,0x4a,0x09,0x0e,0x2c,0x57,0x4a,0x2c,0x1f,0x19,0x1b, + 0x37,0x4c,0x37,0x2f,0x36,0x36,0x31,0x27,0x2c,0x3d,0x3a,0x39,0x48,0x54,0x5e, + 0x62,0x64,0x63,0x65,0x6a,0x67,0x65,0x67,0x74,0x7d,0x50,0x3d,0x69,0x7b,0x75, + 0x41,0x2d,0x57,0x58,0x48,0x53,0x5f,0x65,0x7a,0x85,0x53,0x48,0x73,0x71,0x62, + 0x65,0x5b,0x44,0x42,0x50,0x68,0x6f,0x62,0x67,0x64,0x3a,0x3a,0x64,0x69,0x61, + 0x4e,0x51,0x66,0x73,0x6d,0x41,0x3b,0x55,0x50,0x4c,0x5e,0x62,0x5d,0x68,0x74, + 0x7b,0x74,0x69,0x74,0x7d,0x79,0x74,0x73,0x82,0x85,0x6e,0x6e,0x78,0x6d,0x65, + 0x67,0x5b,0x53,0x7b,0x92,0x87,0x82,0x80,0x83,0x84,0x81,0x81,0x82,0x83,0x83, + 0x82,0x83,0x85,0x86,0x85,0x83,0x83,0x85,0x86,0x87,0x8a,0x87,0x85,0x87,0x89, + 0x8a,0x89,0x87,0x86,0x89,0x8d,0x8d,0x8a,0x8a,0x89,0x89,0x95,0x96,0x7e,0x7d, + 0x8a,0x82,0x7f,0x8e,0x93,0x91,0x91,0x91,0x8f,0x91,0x94,0x90,0x8e,0x91,0x8f, + 0x8b,0x8d,0x8c,0x88,0x87,0x88,0x8c,0x90,0x93,0x90,0x8c,0x91,0x94,0x94,0x95, + 0x95,0x8f,0x8d,0x92,0xa3,0xa8,0x8b,0x50,0x08,0x12,0x45,0x90,0xa6,0x8e,0xa4, + 0x98,0x2e,0x00,0x03,0x2a,0x62,0xa4,0xad,0x8e,0x94,0x9a,0x95,0x95,0x98,0x97, + 0x96,0x98,0x9b,0x9d,0x9a,0x98,0x96,0x97,0x98,0x9a,0x98,0x94,0x96,0x9b,0x9c, + 0x9d,0x9d,0x9c,0x9e,0xb2,0x86,0x14,0x00,0x03,0x00,0x09,0x26,0x79,0xbf,0xa2, + 0x92,0x9b,0x9b,0x9a,0x9d,0x9c,0x99,0x9d,0xa0,0x9d,0x9d,0xa0,0x9f,0x9c,0x9b, + 0x9c,0xa0,0x9e,0x9d,0x9c,0x9c,0x9b,0x9a,0x9b,0x9f,0xa0,0x9c,0x98,0x8c,0x77, + 0x68,0x55,0x20,0x00,0x03,0x03,0x02,0x00,0x00,0x02,0x03,0x03,0x01,0x00,0x00, + 0x00,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x02,0x00, + 0x00,0x00,0x02,0x03,0x04,0x03,0x02,0x04,0x04,0x01,0x02,0x03,0x05,0x06,0x07, + 0x06,0x04,0x03,0x0c,0x28,0x8a,0xc6,0xa0,0x97,0xa0,0x9f,0xa0,0xa3,0xa3,0xa1, + 0xa2,0xa2,0xa0,0x9e,0x9e,0x9e,0xa0,0xa4,0x9c,0x8e,0x8b,0x8e,0x98,0x9e,0xa0, + 0x9c,0x9d,0xa5,0xa3,0xa1,0xa3,0xa5,0xa5,0xa6,0xa5,0x9c,0xa7,0xbd,0x76,0x24, + 0x01,0x2e,0x94,0xae,0xab,0xa2,0x9c,0x9c,0x95,0x91,0x91,0x9b,0xa4,0x76,0x5c, + 0x83,0x7d,0x58,0x45,0x42,0x51,0x78,0xa3,0xa6,0xa0,0xa0,0x9e,0x9c,0x9b,0xa0, + 0xaa,0x86,0x56,0x4d,0x6d,0xb5,0x8e,0x48,0x53,0x6b,0x82,0x78,0x66,0x78,0x78, + 0x5f,0x54,0x4c,0x40,0x41,0xc8,0x12,0x12,0x11,0x18,0x28,0x33,0x3a,0x3a,0x36, + 0x33,0x32,0x32,0x37,0x37,0x32,0x33,0x34,0x35,0x36,0x37,0x37,0x37,0x37,0x38, + 0x3a,0x3a,0x3c,0x3d,0x3c,0x3a,0x39,0x3a,0x3f,0x41,0x40,0x3d,0x3d,0x40,0x41, + 0x42,0x3f,0x3f,0x42,0x45,0x45,0x3a,0x3d,0x51,0x2f,0x0a,0x20,0x3b,0x50,0x4a, + 0x3d,0x41,0x44,0x44,0x41,0x41,0x46,0x48,0x45,0x45,0x46,0x48,0x48,0x46,0x48, + 0x4a,0x48,0x49,0x4b,0x4b,0x4b,0x4c,0x4e,0x4f,0x4c,0x4c,0x4e,0x50,0x50,0x50, + 0x4e,0x4c,0x50,0x54,0x50,0x4d,0x50,0x50,0x50,0x51,0x55,0x5a,0x55,0x4d,0x4e, + 0x57,0x6a,0x46,0x13,0x03,0x1d,0x5c,0x3f,0x0a,0x06,0x1a,0x41,0x3a,0x28,0x2b, + 0x2b,0x27,0x32,0x3d,0x36,0x33,0x33,0x2e,0x28,0x24,0x2b,0x39,0x3b,0x3b,0x41, + 0x49,0x54,0x5f,0x66,0x65,0x63,0x61,0x60,0x63,0x6d,0x6b,0x61,0x48,0x4a,0x7d, + 0x6c,0x3d,0x49,0x4f,0x3c,0x2f,0x2e,0x56,0x72,0x74,0x74,0x6c,0x4f,0x4e,0x72, + 0x74,0x66,0x5d,0x53,0x4c,0x47,0x49,0x61,0x67,0x5b,0x5d,0x5a,0x3d,0x3d,0x5d, + 0x5c,0x54,0x55,0x5a,0x63,0x5a,0x4b,0x3c,0x40,0x52,0x45,0x41,0x5b,0x61,0x58, + 0x63,0x6c,0x66,0x65,0x66,0x6e,0x73,0x70,0x6d,0x6b,0x7c,0x82,0x6d,0x6f,0x7b, + 0x71,0x64,0x58,0x5f,0x70,0x80,0x86,0x80,0x7e,0x7e,0x7f,0x7f,0x7f,0x7f,0x7f, + 0x81,0x82,0x82,0x81,0x80,0x84,0x85,0x82,0x82,0x82,0x81,0x83,0x89,0x87,0x85, + 0x88,0x88,0x85,0x86,0x87,0x8a,0x8a,0x8a,0x8a,0x8b,0x8d,0x8c,0x8a,0x8d,0x8d, + 0x85,0x7f,0x7d,0x78,0x7b,0x8a,0x8b,0x86,0x91,0x95,0x8d,0x88,0x86,0x8e,0x92, + 0x8d,0x8d,0x8f,0x8a,0x85,0x82,0x80,0x81,0x86,0x8d,0x91,0x91,0x8d,0x8e,0x8f, + 0x8f,0x91,0x93,0x8f,0x8c,0x8b,0x9b,0xa6,0x98,0x5f,0x09,0x00,0x22,0x8d,0xb3, + 0x9c,0xad,0x9f,0x3b,0x06,0x03,0x20,0x56,0xa3,0xaf,0x8d,0x8e,0x93,0x91,0x95, + 0x9d,0xa2,0xa3,0x9e,0x97,0x91,0x96,0x98,0x95,0x94,0x94,0x97,0x98,0x98,0x9a, + 0x9b,0x97,0x95,0x98,0x9a,0x9c,0xae,0x82,0x13,0x00,0x03,0x00,0x07,0x20,0x74, + 0xbb,0xa1,0x92,0x98,0x98,0x98,0x99,0x99,0x98,0x99,0x9b,0x9c,0x9c,0x9c,0x99, + 0x98,0x97,0x98,0x9a,0x9b,0x9b,0x99,0x98,0x97,0x95,0x95,0x98,0x9b,0x9e,0x9c, + 0x91,0x7a,0x74,0x6b,0x28,0x00,0x04,0x03,0x00,0x00,0x01,0x01,0x01,0x02,0x01, + 0x01,0x01,0x01,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01, + 0x03,0x06,0x07,0x05,0x01,0x00,0x03,0x01,0x01,0x05,0x07,0x06,0x05,0x05,0x04, + 0x06,0x08,0x01,0x00,0x00,0x32,0x7f,0xa7,0xb2,0x9c,0x97,0x9d,0x9c,0x9c,0x9c, + 0x9c,0x9c,0x9c,0x9c,0x99,0x99,0x9b,0x9b,0x9a,0x99,0x96,0x92,0x8e,0x8d,0x93, + 0x96,0x98,0x96,0x97,0x9b,0x98,0x96,0x9e,0xa0,0x9a,0x9e,0xa2,0x9c,0xa7,0xbb, + 0x80,0x36,0x04,0x25,0x88,0xad,0xb5,0xa7,0xa1,0xa5,0xaa,0xa3,0x88,0x90,0xa7, + 0x6a,0x3d,0x55,0x56,0x48,0x3f,0x45,0x62,0x65,0x5b,0x65,0x7f,0xab,0xb1,0xa2, + 0xa7,0xa7,0x98,0x6a,0x3c,0x43,0x66,0xa0,0x8d,0x5b,0x42,0x53,0x90,0x86,0x69, + 0x70,0x79,0x81,0x86,0x86,0x83,0x82,0xc8,0x02,0x02,0x01,0x08,0x17,0x23,0x2b, + 0x2b,0x2b,0x29,0x2a,0x2d,0x36,0x38,0x36,0x36,0x36,0x35,0x35,0x36,0x35,0x34, + 0x34,0x35,0x36,0x37,0x3a,0x3d,0x3b,0x37,0x35,0x36,0x3e,0x42,0x42,0x3b,0x36, + 0x36,0x3a,0x40,0x3d,0x3e,0x45,0x47,0x42,0x2a,0x28,0x3e,0x23,0x07,0x2e,0x43, + 0x3d,0x39,0x38,0x41,0x45,0x44,0x41,0x41,0x44,0x46,0x46,0x45,0x45,0x45,0x45, + 0x45,0x47,0x4a,0x4b,0x48,0x44,0x46,0x49,0x4a,0x49,0x48,0x48,0x49,0x4b,0x4c, + 0x4b,0x4b,0x4c,0x4d,0x4e,0x4f,0x4c,0x4b,0x4d,0x4d,0x4c,0x50,0x53,0x57,0x52, + 0x4c,0x49,0x52,0x63,0x44,0x17,0x04,0x19,0x51,0x3a,0x0c,0x00,0x12,0x3d,0x3a, + 0x2b,0x2d,0x30,0x30,0x2b,0x2a,0x35,0x36,0x2b,0x27,0x25,0x28,0x2c,0x32,0x41, + 0x49,0x3b,0x3c,0x49,0x59,0x63,0x63,0x60,0x5b,0x5d,0x62,0x6d,0x5c,0x40,0x4c, + 0x61,0x78,0x53,0x20,0x50,0x62,0x30,0x1c,0x21,0x4a,0x6a,0x74,0x67,0x51,0x4a, + 0x52,0x67,0x6c,0x66,0x58,0x51,0x53,0x4c,0x47,0x53,0x54,0x47,0x48,0x4b,0x40, + 0x42,0x51,0x52,0x4e,0x4c,0x4d,0x50,0x42,0x3a,0x4d,0x53,0x49,0x35,0x32,0x5c, + 0x67,0x5b,0x5e,0x60,0x57,0x5d,0x6a,0x6d,0x6b,0x64,0x62,0x66,0x76,0x7b,0x6e, + 0x70,0x76,0x6d,0x60,0x55,0x69,0x86,0x7e,0x77,0x7b,0x7b,0x7a,0x7d,0x7e,0x7b, + 0x7c,0x7f,0x7e,0x7f,0x82,0x7f,0x7b,0x7f,0x82,0x82,0x82,0x80,0x7e,0x80,0x86, + 0x84,0x82,0x86,0x86,0x81,0x83,0x86,0x88,0x86,0x83,0x86,0x88,0x88,0x86,0x83, + 0x85,0x86,0x87,0x80,0x74,0x71,0x73,0x79,0x7e,0x82,0x89,0x8d,0x8e,0x85,0x7b, + 0x86,0x8d,0x8a,0x8d,0x91,0x84,0x7b,0x77,0x7a,0x7f,0x7f,0x86,0x92,0x8f,0x87, + 0x89,0x8c,0x8f,0x8f,0x8d,0x8e,0x8c,0x86,0x92,0x9e,0xa0,0x6d,0x0e,0x00,0x12, + 0x82,0xac,0x94,0x9a,0x8b,0x42,0x13,0x03,0x15,0x45,0x9c,0xaa,0x86,0x86,0x8d, + 0x92,0x95,0x91,0x86,0x86,0x99,0x98,0x8d,0x91,0x95,0x94,0x92,0x91,0x93,0x97, + 0x99,0x98,0x96,0x91,0x90,0x93,0x96,0x9a,0xa9,0x7d,0x12,0x00,0x03,0x00,0x05, + 0x19,0x6b,0xb5,0xa0,0x93,0x96,0x96,0x95,0x95,0x95,0x97,0x96,0x96,0x98,0x98, + 0x96,0x95,0x94,0x95,0x95,0x95,0x97,0x98,0x98,0x96,0x93,0x93,0x93,0x94,0x96, + 0x98,0x9b,0x98,0x8b,0x8b,0x85,0x3c,0x08,0x07,0x03,0x00,0x02,0x03,0x02,0x01, + 0x01,0x03,0x03,0x01,0x01,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x01,0x03,0x07,0x08,0x07,0x02,0x00,0x02,0x01,0x01,0x03,0x05,0x07,0x07, + 0x06,0x04,0x04,0x04,0x06,0x11,0x2b,0x6a,0xb5,0xae,0x9b,0x98,0x98,0x9a,0x99, + 0x98,0x97,0x96,0x96,0x97,0x96,0x93,0x94,0x97,0x96,0x94,0x8f,0x91,0x95,0x91, + 0x8d,0x8e,0x8e,0x8d,0x8d,0x8b,0x8b,0x89,0x87,0x8d,0x8e,0x89,0x8b,0x8f,0x8a, + 0x97,0xac,0x7f,0x41,0x07,0x1c,0x71,0xa3,0xb7,0x9d,0x97,0xa3,0xa1,0x91,0x67, + 0x66,0x7a,0x49,0x20,0x28,0x2e,0x31,0x32,0x3c,0x57,0x45,0x20,0x32,0x5d,0x9c, + 0x9d,0x83,0xa0,0xa8,0x87,0x62,0x45,0x4f,0x69,0x8d,0x82,0x62,0x3a,0x48,0x91, + 0x93,0x7c,0x7f,0x8c,0x9d,0xa0,0x9c,0x96,0x8d,0xc8,0x06,0x05,0x01,0x02,0x06, + 0x09,0x0a,0x09,0x0b,0x11,0x19,0x22,0x2c,0x34,0x39,0x39,0x39,0x3c,0x36,0x2c, + 0x28,0x28,0x2f,0x2e,0x29,0x27,0x2b,0x3a,0x3a,0x33,0x2e,0x2f,0x37,0x3b,0x3a, + 0x2e,0x24,0x20,0x25,0x2f,0x34,0x3a,0x42,0x41,0x35,0x15,0x0a,0x19,0x0b,0x03, + 0x39,0x44,0x1b,0x1d,0x32,0x50,0x54,0x41,0x42,0x48,0x43,0x44,0x48,0x47,0x45, + 0x41,0x44,0x4b,0x4c,0x4c,0x50,0x47,0x3a,0x40,0x47,0x43,0x3d,0x39,0x41,0x48, + 0x45,0x44,0x42,0x3f,0x40,0x49,0x48,0x41,0x48,0x4c,0x49,0x4b,0x4d,0x49,0x4b, + 0x53,0x53,0x4d,0x45,0x4c,0x63,0x45,0x16,0x03,0x19,0x53,0x3b,0x0c,0x00,0x1b, + 0x53,0x4f,0x33,0x1b,0x1b,0x31,0x25,0x1b,0x30,0x32,0x20,0x23,0x2b,0x32,0x2f, + 0x28,0x4c,0x62,0x3c,0x30,0x3d,0x4e,0x5a,0x5c,0x5d,0x5e,0x60,0x63,0x66,0x48, + 0x23,0x5b,0x7b,0x53,0x36,0x2c,0x4a,0x57,0x40,0x2e,0x24,0x28,0x3d,0x62,0x57, + 0x3c,0x45,0x4d,0x50,0x58,0x61,0x5a,0x54,0x51,0x4f,0x4b,0x45,0x37,0x27,0x2a, + 0x36,0x41,0x45,0x42,0x51,0x54,0x2e,0x20,0x2d,0x3a,0x50,0x7a,0x70,0x3c,0x1e, + 0x25,0x69,0x7b,0x67,0x5a,0x52,0x55,0x63,0x74,0x73,0x67,0x54,0x57,0x65,0x70, + 0x74,0x71,0x6c,0x65,0x5e,0x5b,0x63,0x77,0x88,0x72,0x69,0x79,0x79,0x74,0x7e, + 0x80,0x76,0x78,0x7e,0x7a,0x7a,0x7f,0x7d,0x78,0x77,0x7b,0x82,0x81,0x7c,0x7d, + 0x7e,0x7e,0x7d,0x7d,0x7f,0x80,0x7f,0x82,0x84,0x81,0x7d,0x79,0x7e,0x7f,0x76, + 0x73,0x74,0x7d,0x84,0x83,0x7e,0x75,0x6f,0x65,0x57,0x69,0x87,0x79,0x75,0x90, + 0x8a,0x77,0x74,0x79,0x87,0x8d,0x8c,0x7b,0x6e,0x67,0x73,0x80,0x74,0x79,0x95, + 0x8a,0x75,0x7f,0x8c,0x95,0x8f,0x87,0x8b,0x8b,0x86,0x88,0x8e,0xa3,0x7a,0x1a, + 0x00,0x10,0x6d,0x8a,0x6d,0x65,0x5a,0x3f,0x20,0x06,0x0a,0x33,0x8d,0x9d,0x7a, + 0x7c,0x89,0x9c,0x92,0x70,0x36,0x30,0x84,0x9f,0x94,0x8d,0x8b,0x91,0x91,0x8e, + 0x90,0x92,0x93,0x8f,0x8b,0x8d,0x8f,0x8e,0x92,0x97,0xa5,0x7a,0x11,0x00,0x06, + 0x01,0x03,0x12,0x60,0xaa,0x9e,0x93,0x94,0x91,0x90,0x8f,0x90,0x92,0x93,0x93, + 0x93,0x92,0x91,0x91,0x92,0x95,0x95,0x93,0x91,0x92,0x96,0x95,0x90,0x92,0x95, + 0x97,0x92,0x8b,0x8e,0x97,0xa5,0xaa,0x9e,0x5e,0x27,0x0b,0x01,0x02,0x04,0x06, + 0x03,0x02,0x02,0x05,0x05,0x02,0x01,0x01,0x01,0x01,0x01,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x05,0x05,0x00,0x00,0x01,0x03,0x03,0x03,0x03,0x02,0x00,0x00, + 0x00,0x04,0x07,0x05,0x00,0x00,0x18,0x48,0x90,0xaf,0xad,0x9b,0x8f,0x97,0x98, + 0x96,0x97,0x96,0x94,0x93,0x93,0x93,0x92,0x8f,0x91,0x94,0x93,0x91,0x8b,0x8e, + 0x92,0x8e,0x8a,0x87,0x86,0x84,0x7f,0x7b,0x76,0x76,0x77,0x71,0x6f,0x71,0x6e, + 0x69,0x64,0x73,0x90,0x72,0x40,0x0b,0x12,0x4d,0x8c,0xaa,0x7f,0x78,0x8b,0x6d, + 0x45,0x27,0x18,0x15,0x0e,0x0a,0x09,0x0a,0x0c,0x0e,0x12,0x16,0x0f,0x08,0x1f, + 0x41,0x68,0x55,0x34,0x7a,0x9f,0x7c,0x74,0x77,0x70,0x74,0x85,0x70,0x50,0x40, + 0x53,0x8c,0xa3,0xa9,0xad,0xac,0xa3,0x8a,0x6c,0x50,0x42,0xc8,0x03,0x03,0x01, + 0x01,0x03,0x02,0x00,0x00,0x00,0x05,0x0a,0x10,0x16,0x1d,0x20,0x21,0x20,0x21, + 0x1e,0x19,0x16,0x16,0x19,0x18,0x15,0x12,0x15,0x22,0x22,0x1b,0x17,0x18,0x1f, + 0x21,0x1f,0x16,0x0f,0x0e,0x12,0x16,0x1b,0x20,0x24,0x23,0x1b,0x08,0x00,0x07, + 0x03,0x06,0x26,0x28,0x07,0x15,0x32,0x48,0x43,0x28,0x2f,0x3a,0x2d,0x2b,0x34, + 0x3a,0x3f,0x42,0x44,0x45,0x3d,0x3b,0x48,0x48,0x40,0x46,0x4c,0x48,0x44,0x42, + 0x48,0x4c,0x47,0x45,0x46,0x47,0x49,0x4d,0x4c,0x49,0x4d,0x50,0x4c,0x52,0x57, + 0x4f,0x44,0x3a,0x46,0x56,0x4e,0x4f,0x5d,0x43,0x1c,0x08,0x17,0x47,0x32,0x0b, + 0x06,0x21,0x57,0x53,0x38,0x1e,0x1b,0x2b,0x28,0x28,0x45,0x40,0x1d,0x18,0x20, + 0x36,0x3f,0x40,0x50,0x56,0x3d,0x2c,0x29,0x49,0x63,0x5b,0x56,0x55,0x5a,0x5f, + 0x60,0x4a,0x32,0x5e,0x6d,0x35,0x2d,0x3e,0x3d,0x3a,0x39,0x2e,0x20,0x1e,0x35, + 0x68,0x57,0x30,0x3d,0x4c,0x55,0x58,0x57,0x4e,0x4c,0x52,0x51,0x4c,0x45,0x36, + 0x24,0x2b,0x37,0x36,0x3f,0x52,0x57,0x4e,0x31,0x1f,0x1d,0x3a,0x5a,0x6c,0x53, + 0x20,0x28,0x45,0x68,0x6c,0x5a,0x57,0x57,0x58,0x63,0x73,0x74,0x68,0x46,0x50, + 0x70,0x6d,0x68,0x6a,0x69,0x65,0x57,0x53,0x5d,0x73,0x84,0x71,0x68,0x74,0x74, + 0x72,0x76,0x78,0x78,0x78,0x79,0x76,0x78,0x7c,0x78,0x74,0x76,0x7a,0x7e,0x7b, + 0x78,0x7e,0x7f,0x79,0x79,0x7a,0x7b,0x7d,0x7f,0x7f,0x7f,0x7f,0x7b,0x77,0x78, + 0x75,0x68,0x64,0x69,0x74,0x7f,0x86,0x85,0x7b,0x6d,0x57,0x39,0x57,0x8d,0x6e, + 0x5e,0x7f,0x86,0x7c,0x69,0x69,0x83,0x8e,0x8a,0x73,0x5c,0x4d,0x65,0x83,0x74, + 0x74,0x8c,0x83,0x72,0x79,0x7e,0x7d,0x7d,0x7f,0x85,0x86,0x82,0x80,0x85,0xa3, + 0x82,0x2a,0x06,0x08,0x3a,0x48,0x34,0x38,0x3c,0x32,0x1d,0x06,0x05,0x26,0x7b, + 0x89,0x67,0x78,0x8f,0x9d,0x8a,0x5d,0x19,0x12,0x78,0x99,0x8f,0x89,0x86,0x8c, + 0x8d,0x8c,0x8b,0x8b,0x8d,0x8b,0x88,0x8d,0x8f,0x8a,0x8c,0x91,0x9f,0x75,0x0f, + 0x00,0x05,0x02,0x01,0x09,0x56,0xa0,0x99,0x90,0x8e,0x8c,0x8b,0x8d,0x8e,0x8e, + 0x91,0x91,0x8e,0x8d,0x8d,0x8d,0x8d,0x90,0x90,0x8e,0x8d,0x8d,0x93,0x91,0x8d, + 0x8e,0x90,0x91,0x8e,0x8a,0x8c,0x91,0x98,0x8a,0x6c,0x3d,0x19,0x05,0x03,0x08, + 0x06,0x03,0x03,0x03,0x04,0x03,0x03,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x00, + 0x00,0x00,0x00,0x00,0x01,0x05,0x05,0x02,0x00,0x00,0x05,0x05,0x01,0x02,0x03, + 0x02,0x02,0x03,0x04,0x03,0x00,0x07,0x20,0x51,0x7f,0x9c,0x9f,0x8f,0x86,0x85, + 0x8c,0x8e,0x8d,0x8e,0x8e,0x8b,0x8b,0x8c,0x8c,0x8b,0x89,0x8b,0x8d,0x8d,0x8b, + 0x8a,0x8a,0x8a,0x8d,0x8b,0x86,0x83,0x82,0x7e,0x7b,0x78,0x7a,0x7a,0x74,0x70, + 0x70,0x71,0x72,0x6b,0x78,0x91,0x79,0x4c,0x12,0x05,0x24,0x48,0x5c,0x3f,0x3a, + 0x48,0x31,0x17,0x0a,0x00,0x00,0x01,0x05,0x05,0x03,0x02,0x05,0x06,0x01,0x00, + 0x02,0x0e,0x1e,0x2f,0x20,0x0e,0x3f,0x5a,0x44,0x45,0x4e,0x49,0x54,0x74,0x5e, + 0x3d,0x4c,0x70,0xa3,0xa0,0x86,0x7f,0x71,0x5d,0x47,0x32,0x21,0x1a,0xc8,0x00, + 0x00,0x01,0x03,0x05,0x04,0x03,0x01,0x00,0x02,0x01,0x00,0x00,0x01,0x02,0x03, + 0x02,0x00,0x01,0x04,0x05,0x04,0x01,0x01,0x02,0x00,0x01,0x07,0x05,0x00,0x00, + 0x00,0x04,0x04,0x02,0x00,0x00,0x02,0x02,0x00,0x01,0x02,0x00,0x01,0x02,0x01, + 0x00,0x00,0x05,0x0a,0x0a,0x04,0x00,0x13,0x2c,0x30,0x23,0x0a,0x15,0x21,0x10, + 0x0d,0x19,0x26,0x32,0x3c,0x3d,0x34,0x26,0x21,0x36,0x42,0x45,0x49,0x4b,0x49, + 0x4b,0x4d,0x4e,0x4b,0x45,0x44,0x48,0x51,0x54,0x4e,0x4e,0x51,0x4e,0x4b,0x4a, + 0x53,0x5c,0x4f,0x38,0x1c,0x32,0x58,0x56,0x53,0x57,0x43,0x25,0x0d,0x11,0x30, + 0x22,0x0a,0x0c,0x23,0x4b,0x48,0x36,0x2a,0x23,0x22,0x2b,0x3a,0x58,0x4c,0x1b, + 0x0d,0x14,0x33,0x4a,0x56,0x4c,0x40,0x3f,0x2f,0x1b,0x48,0x6b,0x5c,0x51,0x4c, + 0x55,0x5a,0x57,0x52,0x4f,0x57,0x4e,0x25,0x32,0x51,0x2f,0x1a,0x28,0x24,0x1b, + 0x22,0x3d,0x6e,0x57,0x2b,0x3a,0x4e,0x5d,0x5a,0x50,0x42,0x41,0x4f,0x51,0x4f, + 0x4c,0x41,0x2d,0x3a,0x45,0x28,0x34,0x65,0x5c,0x45,0x42,0x32,0x1b,0x39,0x55, + 0x46,0x29,0x0e,0x3e,0x69,0x5c,0x4d,0x44,0x56,0x64,0x5a,0x5f,0x6d,0x73,0x66, + 0x3d,0x50,0x7b,0x6b,0x5b,0x60,0x68,0x6a,0x53,0x46,0x50,0x65,0x79,0x74,0x6d, + 0x6d,0x70,0x73,0x6d,0x6d,0x78,0x77,0x71,0x72,0x74,0x78,0x74,0x6f,0x77,0x79, + 0x75,0x73,0x74,0x7d,0x7d,0x75,0x75,0x78,0x79,0x7b,0x7d,0x7a,0x78,0x7d,0x7d, + 0x77,0x74,0x6d,0x5d,0x57,0x5d,0x6b,0x7b,0x87,0x88,0x7f,0x69,0x4c,0x24,0x4b, + 0x8d,0x69,0x50,0x68,0x7b,0x82,0x65,0x5e,0x80,0x8c,0x86,0x69,0x4b,0x32,0x54, + 0x83,0x78,0x73,0x7e,0x7d,0x77,0x71,0x66,0x58,0x64,0x75,0x7a,0x7b,0x7b,0x79, + 0x7f,0x9f,0x86,0x3b,0x13,0x01,0x07,0x08,0x06,0x22,0x36,0x25,0x13,0x04,0x03, + 0x1d,0x69,0x77,0x5b,0x78,0x95,0x9b,0x81,0x51,0x16,0x14,0x71,0x8f,0x86,0x85, + 0x85,0x85,0x86,0x89,0x86,0x85,0x89,0x89,0x88,0x8d,0x8d,0x86,0x86,0x8b,0x98, + 0x71,0x0f,0x00,0x03,0x02,0x00,0x01,0x4c,0x98,0x93,0x8b,0x89,0x86,0x86,0x8d, + 0x8d,0x8a,0x8c,0x8d,0x8a,0x89,0x8a,0x88,0x88,0x8a,0x8a,0x88,0x89,0x8b,0x8d, + 0x8d,0x8a,0x89,0x88,0x87,0x8a,0x8f,0x8e,0x85,0x72,0x52,0x2b,0x12,0x03,0x00, + 0x05,0x0d,0x06,0x00,0x02,0x04,0x06,0x02,0x00,0x01,0x01,0x01,0x01,0x01,0x01, + 0x01,0x00,0x00,0x00,0x00,0x00,0x01,0x03,0x04,0x04,0x02,0x02,0x07,0x06,0x00, + 0x02,0x04,0x05,0x07,0x09,0x06,0x02,0x00,0x1d,0x56,0x8a,0x9f,0x7c,0x6b,0x69, + 0x71,0x78,0x7b,0x7d,0x7f,0x81,0x81,0x7f,0x7f,0x82,0x81,0x81,0x80,0x82,0x85, + 0x84,0x84,0x86,0x84,0x82,0x8a,0x8b,0x85,0x83,0x83,0x82,0x82,0x84,0x85,0x84, + 0x82,0x7f,0x79,0x82,0x89,0x80,0x87,0x99,0x7e,0x4e,0x15,0x00,0x01,0x02,0x02, + 0x00,0x00,0x00,0x00,0x00,0x03,0x07,0x0a,0x09,0x09,0x0c,0x0a,0x06,0x07,0x08, + 0x02,0x03,0x07,0x04,0x01,0x00,0x00,0x03,0x07,0x09,0x04,0x04,0x07,0x0a,0x24, + 0x59,0x48,0x28,0x4e,0x7f,0xac,0x85,0x41,0x2c,0x19,0x03,0x00,0x00,0x07,0x07, + 0xc8,0x01,0x01,0x01,0x02,0x02,0x01,0x00,0x01,0x02,0x03,0x03,0x03,0x02,0x01, + 0x00,0x00,0x00,0x03,0x03,0x00,0x00,0x03,0x07,0x06,0x03,0x00,0x00,0x01,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x03,0x01,0x00,0x00,0x01,0x00,0x00, + 0x03,0x01,0x01,0x03,0x03,0x03,0x06,0x04,0x00,0x06,0x0e,0x10,0x0c,0x05,0x08, + 0x0b,0x03,0x04,0x0c,0x0e,0x0f,0x15,0x17,0x15,0x0e,0x0b,0x15,0x1d,0x24,0x29, + 0x2d,0x2e,0x30,0x32,0x33,0x30,0x27,0x25,0x2a,0x3a,0x41,0x33,0x33,0x38,0x2d, + 0x25,0x2a,0x32,0x36,0x29,0x1a,0x11,0x21,0x3c,0x42,0x4d,0x62,0x50,0x2f,0x0f, + 0x06,0x13,0x0e,0x04,0x08,0x13,0x24,0x23,0x20,0x2b,0x26,0x13,0x22,0x37,0x40, + 0x2f,0x0a,0x0c,0x1c,0x2c,0x2d,0x24,0x37,0x48,0x43,0x37,0x2c,0x3f,0x53,0x5c, + 0x5c,0x59,0x61,0x5c,0x3d,0x3c,0x4a,0x42,0x3a,0x37,0x46,0x53,0x2b,0x11,0x1c, + 0x17,0x12,0x2a,0x42,0x53,0x3e,0x27,0x50,0x59,0x31,0x41,0x60,0x53,0x45,0x3d, + 0x4c,0x5c,0x57,0x3d,0x18,0x33,0x52,0x2c,0x2b,0x52,0x53,0x48,0x48,0x37,0x1e, + 0x20,0x2c,0x3e,0x3d,0x2f,0x3e,0x4a,0x3f,0x3c,0x43,0x56,0x5e,0x48,0x55,0x74, + 0x69,0x55,0x40,0x50,0x6e,0x5e,0x53,0x62,0x67,0x62,0x40,0x35,0x50,0x5a,0x5d, + 0x69,0x6e,0x6b,0x6f,0x74,0x70,0x6c,0x69,0x69,0x69,0x6d,0x6f,0x70,0x72,0x70, + 0x66,0x65,0x6d,0x73,0x76,0x74,0x70,0x6d,0x6e,0x71,0x76,0x74,0x6e,0x6e,0x70, + 0x76,0x76,0x72,0x74,0x6e,0x58,0x48,0x45,0x62,0x7b,0x7b,0x74,0x6a,0x63,0x51, + 0x2b,0x45,0x7b,0x73,0x66,0x67,0x6d,0x73,0x65,0x65,0x7e,0x7d,0x6d,0x59,0x42, + 0x2b,0x4b,0x7a,0x7f,0x7b,0x76,0x7d,0x80,0x65,0x4c,0x3d,0x55,0x70,0x62,0x60, + 0x6b,0x6f,0x78,0x97,0x88,0x4d,0x20,0x03,0x07,0x12,0x25,0x58,0x6e,0x35,0x0f, + 0x02,0x02,0x1f,0x66,0x7e,0x71,0x76,0x82,0x99,0x7f,0x44,0x12,0x18,0x70,0x8d, + 0x83,0x83,0x82,0x82,0x81,0x80,0x83,0x82,0x7c,0x7d,0x81,0x86,0x85,0x7f,0x85, + 0x8e,0x98,0x70,0x12,0x00,0x02,0x03,0x00,0x00,0x46,0x92,0x8e,0x87,0x85,0x84, + 0x84,0x83,0x84,0x84,0x7d,0x7a,0x86,0x8a,0x84,0x83,0x83,0x87,0x86,0x84,0x88, + 0x8a,0x85,0x83,0x84,0x84,0x84,0x82,0x89,0x90,0x87,0x6b,0x36,0x36,0x50,0x45, + 0x2f,0x12,0x06,0x04,0x03,0x04,0x06,0x04,0x03,0x05,0x05,0x01,0x00,0x01,0x01, + 0x01,0x01,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x01,0x00,0x00,0x07, + 0x07,0x02,0x03,0x05,0x03,0x01,0x00,0x00,0x03,0x21,0x4a,0x73,0x74,0x6b,0x62, + 0x5c,0x58,0x5a,0x5e,0x61,0x64,0x65,0x69,0x69,0x69,0x6b,0x6d,0x6e,0x70,0x71, + 0x74,0x77,0x76,0x78,0x7d,0x7e,0x7d,0x82,0x86,0x84,0x82,0x82,0x86,0x86,0x81, + 0x7e,0x7d,0x7e,0x81,0x84,0x86,0x85,0x75,0x7a,0x8b,0x57,0x1d,0x08,0x02,0x05, + 0x00,0x00,0x03,0x03,0x00,0x00,0x00,0x08,0x0b,0x09,0x07,0x05,0x08,0x06,0x02, + 0x03,0x04,0x02,0x03,0x05,0x03,0x01,0x00,0x03,0x09,0x02,0x00,0x03,0x04,0x04, + 0x01,0x0c,0x28,0x23,0x16,0x25,0x37,0x46,0x32,0x13,0x0a,0x03,0x00,0x00,0x02, + 0x00,0x00,0xc8,0x02,0x02,0x01,0x00,0x00,0x00,0x00,0x01,0x03,0x03,0x04,0x04, + 0x04,0x03,0x01,0x00,0x02,0x06,0x04,0x00,0x00,0x02,0x08,0x08,0x04,0x03,0x02, + 0x00,0x01,0x03,0x02,0x01,0x01,0x01,0x03,0x03,0x04,0x04,0x03,0x00,0x02,0x03, + 0x02,0x03,0x04,0x01,0x02,0x05,0x03,0x00,0x03,0x06,0x03,0x00,0x00,0x00,0x00, + 0x03,0x03,0x01,0x00,0x02,0x07,0x03,0x00,0x00,0x00,0x01,0x03,0x03,0x01,0x04, + 0x0a,0x0e,0x13,0x15,0x18,0x19,0x19,0x15,0x0f,0x0d,0x0f,0x1f,0x25,0x19,0x19, + 0x1d,0x11,0x0a,0x10,0x14,0x15,0x0c,0x07,0x0b,0x13,0x1d,0x26,0x37,0x51,0x45, + 0x28,0x0c,0x00,0x03,0x02,0x02,0x06,0x08,0x09,0x09,0x0e,0x20,0x1e,0x0a,0x15, + 0x24,0x20,0x12,0x00,0x0d,0x1d,0x1e,0x13,0x03,0x28,0x47,0x3d,0x36,0x36,0x39, + 0x40,0x4a,0x52,0x59,0x65,0x5d,0x2f,0x2c,0x43,0x3d,0x3a,0x40,0x50,0x59,0x2f, + 0x14,0x1a,0x13,0x0e,0x2f,0x41,0x35,0x26,0x23,0x56,0x58,0x19,0x30,0x60,0x5e, + 0x4e,0x37,0x4c,0x64,0x53,0x36,0x16,0x31,0x50,0x3a,0x2d,0x32,0x43,0x52,0x50, + 0x41,0x29,0x1a,0x1a,0x31,0x41,0x48,0x3a,0x2f,0x3b,0x41,0x44,0x53,0x5a,0x48, + 0x57,0x75,0x5d,0x45,0x47,0x53,0x5f,0x57,0x53,0x61,0x5e,0x52,0x3a,0x38,0x58, + 0x57,0x48,0x58,0x66,0x6c,0x70,0x70,0x6a,0x65,0x62,0x63,0x66,0x6c,0x6a,0x61, + 0x69,0x70,0x62,0x5b,0x5e,0x69,0x72,0x6c,0x69,0x6c,0x6e,0x70,0x76,0x71,0x64, + 0x65,0x6b,0x6d,0x6f,0x6e,0x6d,0x67,0x57,0x43,0x36,0x5a,0x74,0x63,0x5a,0x57, + 0x5f,0x5a,0x36,0x46,0x6e,0x71,0x69,0x5e,0x62,0x6b,0x65,0x69,0x7d,0x76,0x61, + 0x4e,0x3a,0x25,0x41,0x6c,0x7f,0x7f,0x6d,0x6d,0x6b,0x4a,0x32,0x2b,0x49,0x66, + 0x52,0x50,0x67,0x6a,0x70,0x8e,0x87,0x5b,0x28,0x04,0x08,0x16,0x2f,0x66,0x7c, + 0x35,0x0b,0x01,0x03,0x1c,0x57,0x75,0x7b,0x73,0x76,0x96,0x7b,0x3c,0x10,0x19, + 0x71,0x8c,0x81,0x81,0x80,0x7f,0x7c,0x7b,0x7f,0x7f,0x7d,0x7f,0x82,0x7f,0x7b, + 0x78,0x82,0x8d,0x95,0x6d,0x12,0x00,0x01,0x03,0x00,0x00,0x42,0x8d,0x8b,0x84, + 0x80,0x81,0x82,0x7e,0x7f,0x82,0x70,0x68,0x83,0x8a,0x7e,0x7d,0x80,0x82,0x82, + 0x7f,0x83,0x86,0x7f,0x7d,0x7f,0x7f,0x7f,0x7e,0x83,0x89,0x82,0x69,0x36,0x3d, + 0x5e,0x5b,0x44,0x18,0x03,0x00,0x01,0x04,0x07,0x03,0x00,0x05,0x07,0x01,0x00, + 0x01,0x01,0x01,0x01,0x01,0x00,0x00,0x00,0x01,0x01,0x01,0x00,0x00,0x01,0x03, + 0x05,0x04,0x03,0x02,0x02,0x03,0x02,0x06,0x0e,0x19,0x2f,0x54,0x71,0x7f,0x69, + 0x56,0x5f,0x61,0x5c,0x5b,0x5b,0x5d,0x5e,0x61,0x62,0x62,0x62,0x62,0x64,0x63, + 0x65,0x68,0x69,0x69,0x69,0x6c,0x71,0x74,0x76,0x78,0x7b,0x7c,0x7b,0x78,0x7d, + 0x7e,0x7a,0x7a,0x7c,0x83,0x87,0x86,0x74,0x5e,0x50,0x53,0x61,0x2f,0x00,0x01, + 0x07,0x08,0x04,0x03,0x09,0x0a,0x07,0x03,0x03,0x0a,0x0a,0x07,0x04,0x03,0x04, + 0x03,0x00,0x02,0x04,0x03,0x03,0x04,0x05,0x04,0x02,0x07,0x0d,0x05,0x01,0x06, + 0x07,0x07,0x03,0x03,0x08,0x0b,0x0b,0x07,0x04,0x02,0x01,0x00,0x00,0x00,0x03, + 0x05,0x06,0x03,0x01,0xc8,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x03,0x03,0x02, + 0x01,0x01,0x00,0x01,0x03,0x02,0x01,0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x02, + 0x03,0x03,0x00,0x01,0x05,0x03,0x01,0x01,0x04,0x07,0x05,0x03,0x02,0x02,0x03, + 0x01,0x02,0x06,0x03,0x00,0x01,0x03,0x03,0x02,0x01,0x00,0x02,0x07,0x06,0x02, + 0x01,0x00,0x00,0x04,0x07,0x03,0x01,0x05,0x07,0x07,0x03,0x01,0x01,0x05,0x07, + 0x03,0x02,0x03,0x03,0x05,0x07,0x09,0x08,0x04,0x03,0x05,0x04,0x02,0x04,0x06, + 0x07,0x06,0x04,0x04,0x05,0x06,0x04,0x03,0x03,0x05,0x07,0x06,0x04,0x07,0x0f, + 0x1d,0x19,0x0c,0x04,0x01,0x03,0x02,0x02,0x07,0x08,0x04,0x03,0x03,0x07,0x0a, + 0x08,0x06,0x04,0x03,0x03,0x04,0x0c,0x12,0x0a,0x07,0x0b,0x23,0x33,0x28,0x27, + 0x2f,0x38,0x37,0x23,0x2a,0x44,0x5b,0x5a,0x31,0x2c,0x41,0x51,0x50,0x33,0x44, + 0x62,0x3d,0x21,0x24,0x1b,0x14,0x2d,0x35,0x1e,0x16,0x1d,0x41,0x48,0x25,0x2e, + 0x48,0x5c,0x5a,0x42,0x53,0x63,0x3f,0x2c,0x32,0x37,0x3e,0x4c,0x39,0x0c,0x30, + 0x5e,0x5f,0x51,0x3a,0x32,0x2b,0x17,0x24,0x46,0x33,0x2b,0x5a,0x5d,0x41,0x4f, + 0x5e,0x63,0x6a,0x6f,0x50,0x3d,0x53,0x57,0x53,0x57,0x5a,0x5b,0x4d,0x3d,0x47, + 0x57,0x66,0x5a,0x44,0x45,0x55,0x70,0x71,0x65,0x55,0x54,0x66,0x6c,0x6d,0x73, + 0x67,0x4b,0x57,0x6d,0x70,0x61,0x44,0x52,0x69,0x68,0x6a,0x71,0x75,0x78,0x7b, + 0x73,0x64,0x63,0x66,0x65,0x69,0x6d,0x5f,0x54,0x58,0x4b,0x38,0x55,0x64,0x43, + 0x3c,0x49,0x5e,0x61,0x41,0x4d,0x6d,0x5e,0x4d,0x4a,0x5b,0x71,0x66,0x66,0x7d, + 0x7b,0x67,0x49,0x2e,0x1b,0x32,0x5a,0x77,0x7b,0x62,0x48,0x30,0x20,0x1a,0x20, + 0x3e,0x59,0x4c,0x54,0x72,0x6d,0x67,0x84,0x84,0x64,0x2d,0x01,0x03,0x05,0x0a, + 0x33,0x49,0x1d,0x04,0x02,0x03,0x11,0x32,0x53,0x6f,0x70,0x74,0x91,0x77,0x3c, + 0x0e,0x16,0x72,0x8d,0x80,0x7f,0x7d,0x7a,0x7b,0x7d,0x78,0x7c,0x8d,0x92,0x8d, + 0x7b,0x71,0x74,0x7b,0x85,0x8d,0x68,0x12,0x00,0x03,0x04,0x01,0x00,0x3f,0x84, + 0x88,0x82,0x7b,0x7b,0x7f,0x7c,0x7f,0x82,0x69,0x5c,0x7f,0x87,0x75,0x78,0x7c, + 0x7b,0x78,0x74,0x7a,0x7e,0x7c,0x7b,0x7b,0x7b,0x7b,0x7b,0x79,0x78,0x80,0x87, + 0x89,0x69,0x3c,0x3c,0x31,0x0a,0x00,0x02,0x00,0x00,0x03,0x02,0x00,0x00,0x01, + 0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x02,0x02,0x03, + 0x07,0x12,0x17,0x03,0x00,0x00,0x00,0x00,0x03,0x19,0x3d,0x69,0x8a,0x91,0x8b, + 0x7d,0x7b,0x7a,0x79,0x78,0x77,0x78,0x78,0x74,0x74,0x74,0x74,0x71,0x6d,0x6b, + 0x69,0x65,0x63,0x65,0x64,0x61,0x61,0x62,0x63,0x68,0x6c,0x6a,0x69,0x6b,0x68, + 0x64,0x65,0x69,0x71,0x7b,0x86,0x96,0x95,0x7c,0x46,0x15,0x0f,0x12,0x19,0x0c, + 0x00,0x05,0x06,0x02,0x00,0x00,0x03,0x05,0x06,0x07,0x06,0x03,0x02,0x03,0x04, + 0x04,0x04,0x03,0x02,0x05,0x07,0x06,0x04,0x03,0x06,0x07,0x04,0x06,0x08,0x07, + 0x04,0x00,0x02,0x06,0x09,0x08,0x03,0x05,0x0a,0x03,0x00,0x02,0x08,0x0d,0x07, + 0x03,0x04,0x02,0x01,0x09,0x0a,0xc8,0x00,0x00,0x01,0x01,0x00,0x01,0x02,0x03, + 0x03,0x01,0x00,0x00,0x00,0x01,0x02,0x01,0x01,0x01,0x01,0x02,0x01,0x00,0x00, + 0x00,0x00,0x02,0x03,0x01,0x02,0x03,0x02,0x00,0x02,0x03,0x04,0x03,0x02,0x02, + 0x02,0x02,0x02,0x02,0x03,0x03,0x02,0x02,0x02,0x01,0x01,0x02,0x03,0x03,0x05, + 0x04,0x03,0x01,0x01,0x02,0x03,0x05,0x03,0x03,0x02,0x05,0x07,0x03,0x01,0x00, + 0x03,0x06,0x04,0x03,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x00,0x00,0x01,0x02, + 0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x03,0x01,0x00,0x00,0x02,0x04,0x02,0x00, + 0x00,0x01,0x06,0x04,0x01,0x07,0x10,0x19,0x0e,0x00,0x03,0x05,0x03,0x01,0x00, + 0x00,0x02,0x05,0x02,0x00,0x00,0x00,0x03,0x07,0x07,0x03,0x04,0x0c,0x14,0x19, + 0x19,0x1a,0x1e,0x29,0x2b,0x19,0x19,0x2b,0x48,0x4f,0x2d,0x28,0x37,0x55,0x57, + 0x28,0x2c,0x48,0x3a,0x2a,0x25,0x1f,0x1b,0x28,0x2a,0x1a,0x15,0x1b,0x32,0x3d, + 0x34,0x31,0x36,0x4d,0x56,0x4c,0x4f,0x50,0x32,0x31,0x4c,0x49,0x41,0x43,0x2f, + 0x0a,0x27,0x4d,0x50,0x4f,0x48,0x39,0x25,0x0b,0x0f,0x28,0x1d,0x19,0x40,0x3f, + 0x26,0x38,0x4f,0x5b,0x65,0x67,0x51,0x43,0x4f,0x52,0x50,0x57,0x5c,0x5e,0x50, + 0x3f,0x47,0x4e,0x4c,0x4d,0x4f,0x48,0x52,0x70,0x6d,0x59,0x4d,0x53,0x6c,0x76, + 0x75,0x67,0x57,0x49,0x50,0x5e,0x6a,0x5e,0x3d,0x4c,0x67,0x77,0x79,0x70,0x6f, + 0x6d,0x69,0x67,0x65,0x5e,0x5a,0x64,0x6a,0x6b,0x60,0x55,0x53,0x45,0x36,0x50, + 0x5c,0x3a,0x2f,0x3a,0x50,0x57,0x3d,0x45,0x5a,0x50,0x45,0x3e,0x57,0x79,0x69, + 0x62,0x75,0x74,0x64,0x41,0x24,0x15,0x27,0x46,0x57,0x55,0x3f,0x2b,0x1c,0x15, + 0x15,0x1c,0x30,0x45,0x4c,0x54,0x60,0x63,0x6c,0x89,0x8d,0x73,0x34,0x00,0x00, + 0x00,0x01,0x2d,0x45,0x19,0x04,0x04,0x03,0x0a,0x1e,0x3d,0x5f,0x63,0x6a,0x8a, + 0x6d,0x2c,0x09,0x19,0x6e,0x86,0x77,0x74,0x74,0x76,0x75,0x75,0x7b,0x7b,0x70, + 0x70,0x74,0x7d,0x7b,0x6d,0x70,0x7b,0x88,0x65,0x10,0x00,0x06,0x04,0x00,0x00, + 0x3a,0x7b,0x86,0x81,0x73,0x73,0x77,0x78,0x79,0x78,0x62,0x58,0x77,0x7e,0x70, + 0x7b,0x86,0x80,0x7b,0x76,0x73,0x73,0x76,0x78,0x78,0x75,0x74,0x78,0x78,0x75, + 0x78,0x78,0x72,0x53,0x29,0x1f,0x1c,0x1a,0x10,0x03,0x01,0x02,0x04,0x03,0x00, + 0x00,0x01,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x02,0x02, + 0x03,0x02,0x05,0x3a,0x63,0x49,0x33,0x28,0x2c,0x37,0x43,0x56,0x6e,0x86,0x94, + 0x8f,0x85,0x78,0x7b,0x80,0x80,0x7e,0x7b,0x7c,0x7d,0x7b,0x79,0x79,0x76,0x72, + 0x6e,0x6b,0x68,0x64,0x63,0x67,0x65,0x62,0x62,0x62,0x5d,0x5c,0x5c,0x5b,0x5a, + 0x59,0x5e,0x65,0x62,0x65,0x72,0x70,0x68,0x63,0x5b,0x4d,0x24,0x00,0x00,0x00, + 0x00,0x00,0x03,0x06,0x05,0x01,0x00,0x01,0x02,0x02,0x03,0x04,0x03,0x03,0x02, + 0x02,0x02,0x03,0x03,0x02,0x01,0x03,0x04,0x03,0x03,0x04,0x03,0x03,0x03,0x03, + 0x03,0x05,0x04,0x01,0x02,0x04,0x07,0x05,0x00,0x03,0x07,0x01,0x00,0x02,0x07, + 0x0a,0x05,0x03,0x03,0x01,0x02,0x08,0x09,0xc8,0x00,0x00,0x02,0x03,0x02,0x02, + 0x02,0x03,0x02,0x01,0x01,0x01,0x02,0x02,0x01,0x00,0x01,0x03,0x03,0x02,0x00, + 0x00,0x02,0x01,0x00,0x00,0x02,0x03,0x03,0x01,0x00,0x00,0x02,0x01,0x00,0x00, + 0x00,0x03,0x02,0x00,0x03,0x03,0x00,0x02,0x06,0x03,0x00,0x00,0x00,0x02,0x07, + 0x06,0x00,0x00,0x02,0x00,0x02,0x05,0x02,0x00,0x04,0x03,0x00,0x00,0x02,0x01, + 0x01,0x00,0x00,0x01,0x04,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x06,0x00, + 0x02,0x07,0x04,0x00,0x00,0x03,0x07,0x02,0x00,0x03,0x03,0x01,0x00,0x00,0x02, + 0x02,0x02,0x01,0x01,0x00,0x00,0x01,0x0e,0x1f,0x2f,0x1b,0x00,0x00,0x02,0x03, + 0x03,0x01,0x00,0x01,0x03,0x02,0x02,0x03,0x03,0x02,0x00,0x00,0x02,0x06,0x0a, + 0x04,0x03,0x0e,0x0f,0x0b,0x15,0x1d,0x19,0x14,0x14,0x2d,0x39,0x23,0x1e,0x28, + 0x48,0x4c,0x1b,0x12,0x21,0x29,0x29,0x1f,0x1d,0x1d,0x1e,0x1d,0x1b,0x18,0x19, + 0x23,0x2f,0x39,0x2f,0x25,0x36,0x45,0x4c,0x41,0x32,0x28,0x34,0x56,0x53,0x42, + 0x2b,0x1b,0x15,0x20,0x2c,0x32,0x3d,0x48,0x30,0x14,0x07,0x03,0x05,0x03,0x06, + 0x12,0x0f,0x06,0x1c,0x33,0x40,0x4c,0x55,0x4e,0x45,0x3e,0x41,0x48,0x4c,0x50, + 0x58,0x50,0x41,0x3a,0x2f,0x23,0x37,0x55,0x50,0x53,0x69,0x5e,0x46,0x44,0x4e, + 0x62,0x70,0x6e,0x4c,0x3d,0x48,0x46,0x45,0x52,0x4e,0x38,0x46,0x61,0x7b,0x7b, + 0x61,0x57,0x52,0x48,0x4d,0x5c,0x4d,0x44,0x5a,0x65,0x65,0x66,0x5f,0x48,0x38, + 0x34,0x48,0x52,0x3b,0x2f,0x2d,0x3a,0x3f,0x30,0x33,0x40,0x43,0x41,0x3a,0x53, + 0x74,0x60,0x55,0x62,0x62,0x54,0x33,0x1a,0x12,0x1f,0x31,0x2f,0x27,0x18,0x15, + 0x19,0x1c,0x1b,0x18,0x21,0x31,0x45,0x4c,0x45,0x57,0x6f,0x82,0x88,0x7c,0x3d, + 0x03,0x01,0x03,0x0d,0x41,0x5a,0x20,0x05,0x06,0x02,0x05,0x17,0x2f,0x49,0x4f, + 0x5c,0x82,0x60,0x17,0x03,0x1d,0x69,0x7c,0x6e,0x6d,0x6f,0x72,0x6e,0x6b,0x81, + 0x78,0x41,0x36,0x4b,0x7b,0x8a,0x6a,0x69,0x74,0x84,0x63,0x0e,0x00,0x08,0x03, + 0x00,0x00,0x35,0x70,0x82,0x7f,0x6c,0x6b,0x70,0x75,0x73,0x69,0x5d,0x5a,0x70, + 0x76,0x70,0x7c,0x85,0x7b,0x78,0x7c,0x71,0x6a,0x70,0x75,0x77,0x72,0x70,0x74, + 0x78,0x78,0x6f,0x5a,0x36,0x28,0x26,0x10,0x12,0x3b,0x2b,0x03,0x02,0x04,0x05, + 0x03,0x00,0x02,0x03,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x02, + 0x02,0x02,0x02,0x00,0x01,0x57,0xa6,0x96,0x7a,0x5e,0x66,0x7a,0x88,0x8f,0x8e, + 0x82,0x77,0x72,0x70,0x70,0x73,0x78,0x7b,0x78,0x72,0x74,0x77,0x76,0x75,0x74, + 0x70,0x6d,0x69,0x67,0x65,0x62,0x64,0x69,0x69,0x65,0x67,0x65,0x5c,0x57,0x54, + 0x56,0x55,0x50,0x5b,0x69,0x64,0x64,0x6b,0x57,0x38,0x1b,0x10,0x16,0x0e,0x03, + 0x04,0x03,0x00,0x02,0x05,0x05,0x03,0x02,0x03,0x03,0x03,0x01,0x00,0x00,0x00, + 0x04,0x04,0x01,0x00,0x00,0x01,0x01,0x00,0x00,0x00,0x00,0x01,0x04,0x01,0x00, + 0x01,0x02,0x01,0x03,0x03,0x03,0x03,0x03,0x01,0x01,0x02,0x03,0x04,0x02,0x01, + 0x03,0x03,0x01,0x01,0x01,0x00,0x02,0x03,0x04,0x03,0xc8,0x00,0x00,0x01,0x01, + 0x01,0x01,0x01,0x01,0x01,0x00,0x00,0x00,0x01,0x01,0x00,0x00,0x00,0x01,0x02, + 0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x02,0x02,0x01,0x01,0x01,0x01,0x01, + 0x00,0x00,0x00,0x01,0x01,0x00,0x01,0x02,0x00,0x01,0x03,0x01,0x00,0x00,0x00, + 0x01,0x03,0x02,0x00,0x00,0x01,0x00,0x01,0x02,0x01,0x00,0x03,0x03,0x01,0x01, + 0x01,0x00,0x00,0x01,0x01,0x01,0x02,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0x03, + 0x03,0x00,0x01,0x03,0x02,0x00,0x00,0x01,0x03,0x01,0x00,0x02,0x02,0x01,0x00, + 0x00,0x01,0x01,0x01,0x01,0x01,0x00,0x01,0x03,0x09,0x11,0x18,0x0e,0x00,0x00, + 0x01,0x01,0x01,0x01,0x01,0x00,0x01,0x01,0x01,0x02,0x02,0x01,0x00,0x00,0x01, + 0x03,0x03,0x02,0x01,0x05,0x06,0x03,0x07,0x0a,0x0a,0x0a,0x08,0x10,0x14,0x0e, + 0x0c,0x0f,0x1a,0x1b,0x0a,0x07,0x0a,0x0e,0x0f,0x0c,0x0c,0x0c,0x0b,0x0a,0x0a, + 0x0a,0x0a,0x0d,0x12,0x16,0x12,0x0e,0x20,0x2d,0x31,0x25,0x16,0x0f,0x19,0x34, + 0x2f,0x1d,0x0e,0x07,0x0a,0x0c,0x0e,0x10,0x15,0x19,0x12,0x08,0x04,0x02,0x02, + 0x03,0x03,0x06,0x05,0x03,0x0b,0x13,0x17,0x1c,0x20,0x20,0x1f,0x1c,0x1c,0x1d, + 0x1d,0x1e,0x27,0x24,0x1a,0x15,0x10,0x0b,0x19,0x31,0x3f,0x4a,0x50,0x3d,0x24, + 0x21,0x24,0x29,0x2c,0x2b,0x1e,0x19,0x1d,0x1c,0x1a,0x1e,0x1d,0x19,0x28,0x3a, + 0x43,0x3c,0x26,0x1d,0x1b,0x1a,0x1e,0x24,0x1e,0x1a,0x21,0x35,0x53,0x6e,0x6c, + 0x30,0x25,0x3d,0x36,0x31,0x3c,0x3c,0x34,0x27,0x1b,0x14,0x20,0x34,0x2c,0x2c, + 0x42,0x46,0x3e,0x32,0x2e,0x38,0x36,0x2d,0x19,0x0f,0x14,0x19,0x1e,0x19,0x14, + 0x0d,0x0a,0x0e,0x21,0x22,0x10,0x17,0x24,0x20,0x2a,0x42,0x54,0x58,0x3b,0x42, + 0x66,0x45,0x17,0x02,0x0a,0x2e,0x67,0x78,0x24,0x00,0x03,0x00,0x06,0x20,0x26, + 0x20,0x2e,0x4b,0x80,0x5d,0x0a,0x00,0x19,0x69,0x7f,0x74,0x7e,0x80,0x72,0x69, + 0x66,0x7a,0x69,0x24,0x0f,0x24,0x6b,0x90,0x7d,0x7d,0x81,0x84,0x5f,0x0e,0x00, + 0x04,0x07,0x03,0x00,0x30,0x68,0x77,0x75,0x6a,0x6d,0x75,0x7c,0x76,0x65,0x5b, + 0x5f,0x7a,0x86,0x82,0x67,0x4c,0x3d,0x55,0x84,0x82,0x75,0x72,0x75,0x7b,0x7b, + 0x76,0x6e,0x70,0x78,0x74,0x5e,0x2f,0x2e,0x45,0x36,0x3a,0x62,0x3f,0x02,0x00, + 0x03,0x03,0x03,0x02,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x00,0x00,0x00,0x01, + 0x01,0x02,0x03,0x03,0x01,0x00,0x02,0x2c,0x5f,0x86,0x8f,0x80,0x7c,0x79,0x71, + 0x70,0x75,0x6f,0x68,0x66,0x65,0x64,0x6a,0x6f,0x6d,0x6a,0x68,0x6c,0x70,0x6e, + 0x6d,0x6a,0x69,0x68,0x69,0x67,0x63,0x64,0x65,0x66,0x63,0x5f,0x62,0x62,0x60, + 0x65,0x6f,0x78,0x77,0x6c,0x5f,0x54,0x5a,0x50,0x36,0x23,0x14,0x07,0x03,0x07, + 0x05,0x03,0x03,0x03,0x01,0x03,0x03,0x03,0x02,0x00,0x01,0x01,0x01,0x01,0x00, + 0x00,0x00,0x02,0x02,0x01,0x00,0x00,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x02, + 0x01,0x01,0x01,0x01,0x01,0x01,0x02,0x03,0x03,0x02,0x01,0x01,0x02,0x02,0x03, + 0x02,0x02,0x03,0x02,0x01,0x01,0x01,0x00,0x01,0x02,0x02,0x01,0xc8,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x01, + 0x01,0x01,0x01,0x01,0x01,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x02, + 0x02,0x01,0x01,0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01, + 0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01, + 0x01,0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x02,0x02,0x03,0x04,0x05,0x05,0x03, + 0x01,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x00,0x00,0x00,0x01,0x01,0x01,0x01, + 0x01,0x01,0x01,0x00,0x01,0x02,0x01,0x01,0x01,0x00,0x00,0x02,0x03,0x03,0x00, + 0x00,0x00,0x01,0x01,0x00,0x00,0x02,0x02,0x00,0x00,0x00,0x01,0x01,0x01,0x00, + 0x00,0x00,0x00,0x01,0x00,0x00,0x01,0x00,0x03,0x0f,0x16,0x16,0x0e,0x05,0x00, + 0x07,0x16,0x0f,0x03,0x00,0x00,0x02,0x01,0x00,0x00,0x00,0x00,0x00,0x02,0x03, + 0x03,0x03,0x03,0x04,0x03,0x03,0x05,0x03,0x01,0x00,0x00,0x00,0x03,0x05,0x05, + 0x03,0x02,0x00,0x00,0x06,0x05,0x00,0x01,0x02,0x02,0x07,0x12,0x26,0x32,0x2e, + 0x1e,0x0b,0x09,0x07,0x03,0x01,0x00,0x03,0x04,0x03,0x03,0x02,0x01,0x01,0x04, + 0x0f,0x19,0x15,0x0d,0x02,0x00,0x00,0x01,0x02,0x01,0x03,0x03,0x00,0x12,0x35, + 0x55,0x56,0x19,0x13,0x31,0x21,0x19,0x34,0x39,0x2c,0x16,0x06,0x05,0x16,0x2d, + 0x22,0x20,0x37,0x2d,0x15,0x0e,0x10,0x17,0x16,0x10,0x07,0x07,0x12,0x12,0x0f, + 0x0b,0x09,0x08,0x05,0x07,0x1b,0x1e,0x0b,0x0f,0x15,0x07,0x15,0x3d,0x47,0x39, + 0x0b,0x14,0x4d,0x45,0x28,0x06,0x0d,0x39,0x6a,0x73,0x20,0x00,0x02,0x00,0x08, + 0x25,0x23,0x0e,0x21,0x44,0x74,0x52,0x04,0x00,0x1c,0x71,0x82,0x6d,0x73,0x71, + 0x5e,0x5a,0x5f,0x71,0x5d,0x13,0x00,0x0b,0x4a,0x72,0x72,0x73,0x71,0x73,0x52, + 0x0d,0x00,0x02,0x07,0x04,0x00,0x2c,0x62,0x74,0x77,0x6d,0x6c,0x6f,0x78,0x72, + 0x62,0x5a,0x5d,0x74,0x78,0x69,0x42,0x20,0x11,0x2f,0x67,0x6f,0x6a,0x66,0x65, + 0x65,0x63,0x5d,0x4f,0x57,0x6a,0x78,0x67,0x2b,0x25,0x3f,0x46,0x53,0x6f,0x44, + 0x00,0x00,0x03,0x01,0x02,0x03,0x01,0x00,0x01,0x01,0x01,0x01,0x01,0x00,0x00, + 0x00,0x00,0x01,0x02,0x02,0x03,0x02,0x03,0x06,0x0c,0x20,0x53,0x74,0x7e,0x7b, + 0x71,0x63,0x5e,0x61,0x5f,0x5e,0x61,0x5e,0x5a,0x5f,0x62,0x5f,0x5e,0x5e,0x62, + 0x65,0x65,0x64,0x62,0x5f,0x5f,0x62,0x62,0x61,0x63,0x66,0x67,0x64,0x61,0x64, + 0x66,0x68,0x6b,0x70,0x77,0x74,0x65,0x4a,0x33,0x3c,0x32,0x0f,0x03,0x02,0x02, + 0x02,0x02,0x03,0x03,0x03,0x02,0x03,0x03,0x02,0x02,0x01,0x00,0x00,0x00,0x01, + 0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00, + 0x01,0x01,0x02,0x02,0x01,0x01,0x01,0x01,0x01,0x02,0x02,0x02,0x02,0x02,0x02, + 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x01,0x01,0x01,0x00,0x00,0xc8, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01, + 0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x00,0x00,0x00,0x01,0x01,0x01, + 0x01,0x01,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x01, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01, + 0x01,0x01,0x01,0x01,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01, + 0x01,0x01,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01, + 0x01,0x01,0x01,0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x00,0x00,0x00,0x01,0x02, + 0x03,0x03,0x01,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x00,0x00,0x00,0x01,0x01, + 0x01,0x01,0x01,0x01,0x01,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, + 0x01,0x01,0x01,0x01,0x01,0x02,0x02,0x01,0x02,0x02,0x01,0x01,0x01,0x02,0x02, + 0x01,0x01,0x01,0x00,0x00,0x01,0x01,0x02,0x03,0x05,0x07,0x05,0x04,0x03,0x03, + 0x01,0x00,0x03,0x07,0x03,0x00,0x07,0x09,0x03,0x03,0x02,0x02,0x01,0x01,0x02, + 0x02,0x02,0x02,0x03,0x03,0x03,0x03,0x03,0x04,0x03,0x02,0x01,0x00,0x01,0x02, + 0x03,0x02,0x00,0x00,0x01,0x03,0x03,0x02,0x01,0x07,0x0a,0x07,0x03,0x02,0x07, + 0x09,0x06,0x04,0x04,0x03,0x01,0x00,0x01,0x02,0x03,0x03,0x04,0x04,0x04,0x05, + 0x03,0x00,0x03,0x06,0x03,0x02,0x01,0x03,0x06,0x05,0x03,0x02,0x05,0x08,0x07, + 0x07,0x0a,0x15,0x19,0x07,0x03,0x0a,0x0c,0x12,0x20,0x1e,0x11,0x0a,0x07,0x0a, + 0x18,0x28,0x28,0x21,0x12,0x09,0x04,0x03,0x04,0x09,0x07,0x03,0x02,0x03,0x09, + 0x08,0x05,0x03,0x03,0x06,0x04,0x03,0x07,0x0b,0x0d,0x08,0x03,0x03,0x15,0x32, + 0x2b,0x15,0x03,0x10,0x36,0x3d,0x2f,0x0b,0x08,0x25,0x40,0x43,0x12,0x00,0x03, + 0x02,0x0a,0x24,0x26,0x1c,0x2f,0x47,0x5a,0x3b,0x06,0x01,0x27,0x80,0x83,0x54, + 0x42,0x37,0x32,0x3f,0x54,0x68,0x55,0x12,0x00,0x05,0x19,0x2e,0x3e,0x3f,0x3a, + 0x49,0x3a,0x08,0x00,0x03,0x04,0x01,0x00,0x2a,0x61,0x7e,0x83,0x74,0x63,0x58, + 0x61,0x63,0x5d,0x55,0x51,0x57,0x41,0x19,0x11,0x10,0x07,0x0d,0x1e,0x31,0x41, + 0x49,0x40,0x2b,0x24,0x1d,0x15,0x28,0x4c,0x74,0x6e,0x22,0x03,0x08,0x2f,0x51, + 0x5b,0x35,0x00,0x02,0x07,0x03,0x01,0x01,0x00,0x00,0x01,0x01,0x01,0x01,0x01, + 0x00,0x00,0x00,0x00,0x00,0x01,0x02,0x02,0x03,0x07,0x0b,0x0b,0x0a,0x0e,0x28, + 0x53,0x65,0x6d,0x6f,0x69,0x5e,0x5a,0x5a,0x60,0x5e,0x57,0x52,0x51,0x53,0x55, + 0x56,0x55,0x56,0x5b,0x5d,0x5b,0x56,0x53,0x55,0x57,0x5a,0x5f,0x65,0x6c,0x6d, + 0x6b,0x6e,0x71,0x71,0x5f,0x49,0x45,0x3d,0x2b,0x18,0x09,0x0a,0x0a,0x07,0x03, + 0x03,0x04,0x05,0x05,0x04,0x03,0x02,0x01,0x00,0x01,0x01,0x02,0x02,0x01,0x01, + 0x01,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x01,0x01,0x01,0x01,0x00,0x00, + 0x01,0x02,0x02,0x02,0x03,0x03,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, + 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x01,0x01,0x01,0x01,0x00,0x00, + 0x00,0xc8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x00,0x00,0x00,0x00, + 0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01, + 0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x01,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x01, + 0x01,0x01,0x01,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x01,0x01,0x01,0x01,0x01,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x00,0x00,0x00, + 0x00,0x00,0x01,0x01,0x01,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x00,0x00,0x00, + 0x01,0x01,0x01,0x01,0x01,0x00,0x01,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x01, + 0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01, + 0x02,0x01,0x01,0x00,0x00,0x00,0x00,0x01,0x02,0x03,0x03,0x04,0x04,0x01,0x00, + 0x00,0x00,0x00,0x03,0x04,0x03,0x00,0x00,0x07,0x08,0x04,0x03,0x03,0x02,0x01, + 0x01,0x02,0x02,0x01,0x02,0x02,0x03,0x03,0x02,0x02,0x03,0x03,0x02,0x01,0x01, + 0x01,0x03,0x03,0x03,0x01,0x01,0x03,0x04,0x01,0x00,0x00,0x05,0x08,0x06,0x03, + 0x00,0x02,0x03,0x00,0x01,0x03,0x02,0x01,0x01,0x01,0x02,0x03,0x03,0x03,0x03, + 0x03,0x03,0x03,0x00,0x00,0x00,0x00,0x00,0x01,0x05,0x07,0x04,0x02,0x00,0x03, + 0x07,0x07,0x03,0x00,0x00,0x02,0x04,0x03,0x00,0x03,0x0a,0x0e,0x0a,0x04,0x05, + 0x06,0x06,0x0c,0x15,0x16,0x11,0x03,0x00,0x00,0x05,0x07,0x03,0x01,0x00,0x02, + 0x04,0x05,0x03,0x01,0x01,0x03,0x06,0x05,0x03,0x01,0x03,0x08,0x05,0x01,0x02, + 0x0a,0x19,0x12,0x07,0x03,0x0a,0x17,0x1e,0x1c,0x07,0x05,0x14,0x1d,0x1d,0x09, + 0x01,0x03,0x02,0x06,0x16,0x19,0x13,0x22,0x31,0x37,0x23,0x03,0x04,0x1c,0x49, + 0x48,0x2c,0x1c,0x14,0x15,0x1e,0x2b,0x3c,0x33,0x0c,0x01,0x05,0x06,0x0c,0x19, + 0x19,0x16,0x26,0x23,0x08,0x01,0x02,0x03,0x01,0x01,0x1d,0x3d,0x4f,0x50,0x43, + 0x36,0x2f,0x33,0x36,0x35,0x31,0x2d,0x2c,0x1e,0x08,0x0d,0x12,0x0a,0x06,0x07, + 0x0f,0x1d,0x2c,0x26,0x13,0x0e,0x0b,0x0b,0x15,0x28,0x40,0x3e,0x12,0x00,0x00, + 0x1a,0x2f,0x32,0x1e,0x03,0x04,0x06,0x01,0x01,0x02,0x00,0x00,0x00,0x01,0x01, + 0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x02,0x02,0x03,0x07,0x10,0x14, + 0x07,0x0e,0x28,0x35,0x3d,0x41,0x4f,0x61,0x57,0x4c,0x50,0x52,0x54,0x5a,0x5e, + 0x5c,0x59,0x56,0x58,0x58,0x53,0x55,0x5a,0x58,0x57,0x57,0x5a,0x5e,0x53,0x50, + 0x5a,0x57,0x4e,0x4b,0x49,0x48,0x36,0x20,0x1d,0x19,0x10,0x07,0x00,0x00,0x00, + 0x04,0x04,0x03,0x05,0x06,0x05,0x04,0x03,0x01,0x00,0x00,0x00,0x01,0x01,0x02, + 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x01,0x01,0x01,0x01, + 0x01,0x01,0x01,0x02,0x02,0x03,0x03,0x03,0x03,0x02,0x02,0x02,0x02,0x02,0x02, + 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x01,0x00,0x01,0x00, + 0x00,0x00,0x00,0xc8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,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,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x00, + 0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x00, + 0x00,0x00,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x01, + 0x01,0x01,0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x02, + 0x02,0x02,0x02,0x02,0x01,0x00,0x00,0x00,0x00,0x01,0x02,0x03,0x03,0x03,0x01, + 0x01,0x02,0x04,0x03,0x01,0x06,0x07,0x04,0x02,0x01,0x03,0x04,0x03,0x03,0x03, + 0x01,0x01,0x01,0x02,0x02,0x01,0x01,0x02,0x03,0x03,0x00,0x00,0x01,0x01,0x01, + 0x01,0x02,0x03,0x04,0x05,0x05,0x04,0x03,0x05,0x04,0x00,0x00,0x00,0x02,0x03, + 0x03,0x03,0x03,0x07,0x09,0x08,0x07,0x05,0x04,0x04,0x03,0x03,0x03,0x03,0x03, + 0x03,0x02,0x02,0x01,0x01,0x02,0x01,0x00,0x00,0x00,0x03,0x05,0x06,0x03,0x01, + 0x00,0x02,0x04,0x04,0x04,0x05,0x02,0x01,0x07,0x07,0x01,0x03,0x03,0x00,0x00, + 0x01,0x04,0x04,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x03,0x0b,0x0d,0x03,0x01, + 0x02,0x05,0x06,0x03,0x02,0x01,0x02,0x03,0x05,0x07,0x06,0x01,0x00,0x02,0x04, + 0x06,0x03,0x01,0x00,0x01,0x03,0x06,0x04,0x00,0x00,0x01,0x01,0x03,0x07,0x05, + 0x03,0x03,0x04,0x04,0x01,0x00,0x07,0x07,0x04,0x0b,0x13,0x16,0x0e,0x01,0x06, + 0x09,0x04,0x05,0x07,0x03,0x01,0x04,0x03,0x02,0x0b,0x0e,0x05,0x05,0x07,0x03, + 0x01,0x02,0x01,0x02,0x0b,0x0e,0x08,0x03,0x00,0x02,0x03,0x04,0x0b,0x12,0x12, + 0x0e,0x08,0x07,0x07,0x07,0x07,0x08,0x08,0x07,0x06,0x0a,0x12,0x18,0x19,0x10, + 0x0a,0x07,0x02,0x03,0x14,0x15,0x0b,0x0c,0x0f,0x15,0x11,0x07,0x04,0x03,0x04, + 0x07,0x09,0x07,0x07,0x08,0x07,0x05,0x04,0x03,0x00,0x01,0x03,0x01,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x00,0x00,0x00, + 0x15,0x24,0x1a,0x10,0x09,0x06,0x07,0x07,0x27,0x57,0x4b,0x36,0x35,0x3c,0x49, + 0x5b,0x65,0x5e,0x57,0x50,0x56,0x56,0x45,0x48,0x54,0x59,0x59,0x56,0x57,0x57, + 0x3f,0x32,0x3c,0x33,0x23,0x19,0x15,0x12,0x0a,0x01,0x02,0x03,0x06,0x07,0x07, + 0x03,0x03,0x05,0x06,0x05,0x06,0x06,0x05,0x04,0x03,0x01,0x00,0x00,0x00,0x00, + 0x01,0x01,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x01,0x01,0x01,0x01,0x01, + 0x01,0x01,0x01,0x01,0x01,0x02,0x02,0x03,0x03,0x03,0x03,0x03,0x02,0x02,0x02, + 0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0xc8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,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,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01, + 0x01,0x01,0x01,0x01,0x01,0x02,0x02,0x02,0x01,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01, + 0x01,0x01,0x01,0x01,0x01,0x01,0x02,0x02,0x02,0x02,0x02,0x01,0x01,0x01,0x02, + 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x01,0x01,0x01,0x01,0x01,0x02,0x03,0x04, + 0x03,0x00,0x01,0x02,0x03,0x02,0x00,0x04,0x06,0x02,0x01,0x01,0x00,0x01,0x03, + 0x03,0x02,0x01,0x01,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x00,0x00,0x01, + 0x01,0x01,0x01,0x01,0x02,0x03,0x04,0x04,0x03,0x03,0x03,0x02,0x01,0x02,0x03, + 0x03,0x03,0x01,0x01,0x03,0x05,0x04,0x03,0x03,0x05,0x04,0x04,0x03,0x04,0x04, + 0x04,0x03,0x03,0x02,0x01,0x01,0x02,0x02,0x02,0x03,0x03,0x04,0x03,0x03,0x02, + 0x01,0x01,0x02,0x03,0x04,0x01,0x00,0x03,0x03,0x03,0x05,0x04,0x03,0x02,0x01, + 0x01,0x03,0x04,0x04,0x03,0x04,0x03,0x01,0x00,0x00,0x04,0x03,0x00,0x04,0x06, + 0x02,0x02,0x03,0x05,0x04,0x00,0x00,0x02,0x02,0x02,0x01,0x03,0x04,0x03,0x00, + 0x00,0x02,0x06,0x07,0x04,0x00,0x02,0x06,0x04,0x03,0x00,0x00,0x00,0x03,0x04, + 0x03,0x01,0x01,0x03,0x05,0x05,0x03,0x01,0x01,0x01,0x00,0x03,0x07,0x08,0x07, + 0x03,0x03,0x03,0x02,0x02,0x03,0x02,0x02,0x03,0x05,0x05,0x04,0x03,0x00,0x03, + 0x07,0x07,0x06,0x01,0x03,0x05,0x04,0x03,0x02,0x01,0x01,0x02,0x03,0x03,0x03, + 0x03,0x04,0x04,0x04,0x03,0x04,0x08,0x06,0x00,0x03,0x06,0x03,0x05,0x09,0x09, + 0x08,0x07,0x06,0x04,0x03,0x06,0x0c,0x0c,0x09,0x0a,0x0d,0x11,0x0e,0x06,0x01, + 0x00,0x06,0x08,0x07,0x02,0x00,0x02,0x02,0x01,0x01,0x01,0x01,0x00,0x00,0x03, + 0x03,0x01,0x00,0x00,0x00,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x03, + 0x03,0x01,0x09,0x12,0x16,0x15,0x0e,0x06,0x01,0x00,0x0c,0x1d,0x1a,0x12,0x0e, + 0x15,0x21,0x2b,0x2e,0x29,0x27,0x26,0x2a,0x29,0x1e,0x24,0x34,0x3e,0x41,0x3a, + 0x30,0x26,0x19,0x13,0x18,0x12,0x08,0x07,0x07,0x03,0x05,0x08,0x03,0x01,0x03, + 0x03,0x04,0x04,0x03,0x01,0x03,0x04,0x03,0x03,0x03,0x03,0x03,0x01,0x00,0x00, + 0x00,0x00,0x01,0x01,0x02,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x02,0x02,0x02,0x02,0x02,0x02,0x01, + 0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc8,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x01,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,0x01,0x01,0x01,0x01,0x01,0x01,0x02,0x02,0x01,0x01,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01, + 0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x02,0x02,0x02,0x02,0x01,0x01,0x01, + 0x01,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x01,0x01,0x01,0x01,0x01,0x02, + 0x03,0x03,0x03,0x02,0x02,0x02,0x02,0x00,0x00,0x03,0x03,0x00,0x00,0x01,0x00, + 0x01,0x02,0x02,0x02,0x01,0x01,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x00, + 0x00,0x01,0x01,0x01,0x01,0x01,0x01,0x03,0x03,0x03,0x02,0x01,0x01,0x01,0x01, + 0x03,0x05,0x03,0x01,0x00,0x00,0x03,0x03,0x01,0x00,0x01,0x03,0x03,0x03,0x03, + 0x03,0x03,0x03,0x03,0x02,0x01,0x01,0x02,0x02,0x02,0x02,0x03,0x04,0x04,0x03, + 0x01,0x00,0x00,0x02,0x03,0x03,0x03,0x02,0x01,0x00,0x03,0x04,0x03,0x02,0x02, + 0x00,0x00,0x03,0x05,0x05,0x03,0x02,0x05,0x04,0x02,0x02,0x03,0x06,0x04,0x00, + 0x00,0x00,0x00,0x02,0x03,0x04,0x03,0x01,0x01,0x03,0x03,0x01,0x00,0x01,0x03, + 0x03,0x03,0x02,0x02,0x03,0x07,0x06,0x02,0x03,0x06,0x03,0x02,0x03,0x02,0x02, + 0x03,0x03,0x01,0x01,0x02,0x03,0x03,0x03,0x03,0x03,0x00,0x00,0x00,0x00,0x01, + 0x03,0x04,0x05,0x03,0x02,0x04,0x04,0x03,0x04,0x05,0x04,0x06,0x07,0x03,0x00, + 0x00,0x02,0x06,0x08,0x07,0x03,0x05,0x09,0x03,0x00,0x00,0x00,0x01,0x01,0x03, + 0x04,0x02,0x00,0x00,0x03,0x05,0x05,0x06,0x09,0x07,0x00,0x03,0x07,0x04,0x03, + 0x03,0x01,0x00,0x03,0x03,0x02,0x05,0x08,0x08,0x07,0x06,0x06,0x07,0x09,0x08, + 0x06,0x03,0x03,0x06,0x07,0x05,0x01,0x00,0x01,0x01,0x01,0x01,0x02,0x02,0x01, + 0x00,0x03,0x04,0x01,0x00,0x00,0x01,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00, + 0x01,0x04,0x04,0x02,0x02,0x05,0x0e,0x11,0x0e,0x07,0x01,0x02,0x01,0x00,0x00, + 0x00,0x00,0x01,0x07,0x08,0x07,0x07,0x07,0x08,0x0b,0x0b,0x06,0x0b,0x18,0x20, + 0x24,0x1e,0x12,0x06,0x02,0x02,0x03,0x01,0x00,0x02,0x03,0x00,0x05,0x0b,0x06, + 0x01,0x01,0x01,0x02,0x04,0x04,0x00,0x02,0x03,0x02,0x01,0x02,0x03,0x03,0x02, + 0x01,0x00,0x00,0x00,0x00,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x01, + 0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01, + 0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc8,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x01, + 0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x00,0x00,0x01,0x01,0x01,0x01,0x01, + 0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x00,0x00,0x01,0x01,0x01,0x01,0x00,0x00, + 0x00,0x01,0x01,0x02,0x03,0x05,0x03,0x02,0x00,0x00,0x00,0x03,0x03,0x00,0x00, + 0x03,0x04,0x03,0x01,0x01,0x01,0x01,0x01,0x02,0x03,0x03,0x02,0x02,0x01,0x01, + 0x01,0x00,0x00,0x01,0x01,0x00,0x00,0x00,0x00,0x01,0x01,0x00,0x00,0x00,0x02, + 0x02,0x00,0x01,0x03,0x02,0x01,0x00,0x00,0x01,0x01,0x02,0x03,0x03,0x01,0x00, + 0x00,0x01,0x01,0x01,0x01,0x01,0x00,0x00,0x00,0x01,0x01,0x02,0x01,0x00,0x00, + 0x00,0x01,0x01,0x00,0x00,0x02,0x03,0x03,0x03,0x08,0x07,0x00,0x00,0x01,0x03, + 0x02,0x00,0x00,0x00,0x03,0x02,0x00,0x00,0x00,0x01,0x00,0x00,0x04,0x07,0x03, + 0x03,0x04,0x01,0x00,0x00,0x01,0x02,0x03,0x05,0x05,0x04,0x03,0x03,0x03,0x03, + 0x03,0x03,0x02,0x05,0x0a,0x06,0x00,0x01,0x03,0x03,0x02,0x00,0x00,0x01,0x01, + 0x00,0x00,0x00,0x00,0x00,0x02,0x03,0x00,0x00,0x00,0x02,0x03,0x01,0x01,0x03, + 0x00,0x00,0x03,0x05,0x05,0x03,0x02,0x01,0x02,0x03,0x06,0x05,0x01,0x00,0x00, + 0x03,0x03,0x03,0x03,0x04,0x03,0x01,0x01,0x05,0x09,0x04,0x02,0x03,0x02,0x02, + 0x00,0x02,0x07,0x05,0x03,0x00,0x00,0x02,0x03,0x03,0x01,0x00,0x02,0x03,0x04, + 0x02,0x01,0x01,0x05,0x07,0x06,0x03,0x00,0x03,0x05,0x05,0x03,0x01,0x00,0x00, + 0x00,0x00,0x00,0x03,0x03,0x03,0x03,0x04,0x03,0x01,0x00,0x03,0x06,0x06,0x04, + 0x01,0x03,0x04,0x02,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x01,0x00,0x00, + 0x00,0x00,0x00,0x02,0x02,0x00,0x03,0x05,0x02,0x02,0x03,0x01,0x00,0x03,0x06, + 0x06,0x03,0x03,0x08,0x08,0x03,0x01,0x02,0x07,0x06,0x01,0x05,0x07,0x06,0x06, + 0x07,0x07,0x07,0x0a,0x07,0x02,0x02,0x03,0x03,0x03,0x05,0x06,0x04,0x02,0x03, + 0x03,0x02,0x00,0x00,0x00,0x01,0x03,0x03,0x03,0x04,0x05,0x02,0x00,0x02,0x02, + 0x02,0x01,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,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc8,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x01,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,0x01,0x01,0x01, + 0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x00,0x00,0x00,0x01,0x00, + 0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00, + 0x00,0x00,0x00,0x00,0x01,0x01,0x02,0x03,0x02,0x01,0x00,0x00,0x01,0x02,0x02, + 0x00,0x01,0x02,0x03,0x02,0x01,0x00,0x00,0x00,0x01,0x02,0x02,0x03,0x02,0x01, + 0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x02,0x02,0x02,0x02, + 0x02,0x03,0x02,0x00,0x00,0x02,0x02,0x01,0x01,0x01,0x01,0x00,0x00,0x02,0x03, + 0x02,0x01,0x01,0x01,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x02,0x03,0x02, + 0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x02,0x02,0x01,0x02,0x05,0x04,0x00,0x00, + 0x00,0x02,0x03,0x02,0x01,0x00,0x01,0x01,0x01,0x02,0x01,0x00,0x00,0x02,0x03, + 0x03,0x01,0x01,0x03,0x01,0x01,0x01,0x01,0x01,0x02,0x03,0x03,0x03,0x02,0x01, + 0x02,0x03,0x02,0x01,0x01,0x03,0x07,0x05,0x02,0x01,0x02,0x02,0x01,0x00,0x02, + 0x03,0x02,0x01,0x00,0x00,0x00,0x01,0x02,0x03,0x02,0x01,0x00,0x02,0x03,0x01, + 0x01,0x02,0x02,0x02,0x03,0x03,0x04,0x03,0x02,0x03,0x03,0x03,0x03,0x03,0x01, + 0x00,0x01,0x03,0x04,0x03,0x03,0x01,0x01,0x02,0x03,0x03,0x04,0x03,0x02,0x02, + 0x02,0x02,0x00,0x00,0x03,0x05,0x06,0x03,0x02,0x03,0x02,0x01,0x01,0x01,0x03, + 0x04,0x04,0x02,0x00,0x01,0x03,0x05,0x05,0x03,0x00,0x03,0x04,0x02,0x02,0x02, + 0x01,0x00,0x00,0x01,0x04,0x04,0x03,0x02,0x01,0x01,0x04,0x05,0x00,0x02,0x05, + 0x03,0x02,0x00,0x03,0x04,0x01,0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x01,0x01, + 0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x00,0x02,0x03,0x01,0x00,0x01,0x02,0x03, + 0x03,0x03,0x03,0x03,0x04,0x06,0x04,0x01,0x00,0x01,0x05,0x04,0x00,0x02,0x04, + 0x06,0x05,0x02,0x00,0x00,0x01,0x02,0x03,0x03,0x03,0x04,0x04,0x03,0x02,0x03, + 0x06,0x03,0x00,0x02,0x03,0x01,0x01,0x01,0x02,0x02,0x02,0x02,0x02,0x01,0x01, + 0x02,0x02,0x01,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,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc8,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x01,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01, + 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,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01, + 0x01,0x01,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x02,0x02, + 0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x02,0x03,0x03, + 0x03,0x03,0x03,0x03,0x01,0x00,0x00,0x01,0x02,0x02,0x03,0x03,0x02,0x00,0x00, + 0x00,0x01,0x03,0x02,0x02,0x02,0x02,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x02, + 0x03,0x03,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x02,0x03,0x04,0x03,0x01,0x00,0x01,0x04,0x03,0x02,0x00,0x02, + 0x05,0x02,0x00,0x00,0x00,0x00,0x02,0x03,0x03,0x02,0x01,0x00,0x00,0x01,0x00, + 0x00,0x00,0x01,0x02,0x01,0x00,0x00,0x00,0x00,0x02,0x05,0x03,0x02,0x00,0x00, + 0x01,0x03,0x04,0x03,0x03,0x02,0x01,0x02,0x03,0x02,0x01,0x03,0x03,0x03,0x02, + 0x02,0x01,0x00,0x00,0x03,0x05,0x02,0x01,0x03,0x01,0x01,0x03,0x03,0x02,0x00, + 0x00,0x01,0x03,0x04,0x04,0x04,0x03,0x02,0x00,0x02,0x04,0x04,0x03,0x00,0x01, + 0x01,0x00,0x02,0x03,0x00,0x00,0x00,0x04,0x07,0x05,0x04,0x04,0x02,0x00,0x03, + 0x03,0x02,0x03,0x05,0x02,0x01,0x02,0x00,0x00,0x03,0x03,0x01,0x03,0x03,0x00, + 0x01,0x05,0x04,0x03,0x02,0x04,0x08,0x06,0x03,0x03,0x01,0x00,0x06,0x08,0x02, + 0x00,0x02,0x00,0x00,0x00,0x02,0x03,0x01,0x00,0x00,0x00,0x01,0x01,0x01,0x01, + 0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x02,0x04,0x04,0x03, + 0x04,0x05,0x01,0x00,0x00,0x03,0x04,0x00,0x00,0x03,0x03,0x03,0x04,0x04,0x03, + 0x02,0x03,0x07,0x06,0x03,0x03,0x03,0x00,0x02,0x07,0x04,0x03,0x07,0x04,0x00, + 0x00,0x01,0x08,0x06,0x00,0x03,0x05,0x03,0x03,0x01,0x00,0x00,0x00,0x00,0x00, + 0x00,0x01,0x02,0x02,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,0x00,0x00,0x00,0x01,0x01,0x00,0x00,0x00,0x00,0x00, + 0xc8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01, + 0x02,0x02,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, + 0x01,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x03,0x04,0x01,0x00,0x00, + 0x01,0x03,0x02,0x01,0x00,0x00,0x00,0x03,0x03,0x00,0x00,0x00,0x00,0x00,0x00, + 0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x01,0x01, + 0x00,0x00,0x01,0x01,0x01,0x02,0x03,0x03,0x02,0x01,0x00,0x00,0x02,0x03,0x03, + 0x03,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01, + 0x02,0x02,0x00,0x01,0x03,0x03,0x02,0x01,0x00,0x01,0x02,0x03,0x03,0x01,0x00, + 0x02,0x02,0x00,0x00,0x00,0x00,0x01,0x02,0x01,0x02,0x03,0x03,0x02,0x01,0x01, + 0x02,0x03,0x03,0x00,0x00,0x02,0x04,0x06,0x03,0x00,0x00,0x02,0x04,0x01,0x00, + 0x00,0x00,0x00,0x01,0x01,0x01,0x00,0x00,0x02,0x03,0x01,0x02,0x03,0x01,0x00, + 0x00,0x01,0x03,0x01,0x02,0x05,0x03,0x00,0x02,0x03,0x02,0x00,0x00,0x01,0x01, + 0x01,0x00,0x00,0x01,0x01,0x01,0x02,0x03,0x00,0x00,0x00,0x01,0x01,0x00,0x03, + 0x06,0x03,0x00,0x01,0x02,0x03,0x03,0x03,0x03,0x03,0x05,0x03,0x02,0x03,0x01, + 0x00,0x03,0x04,0x00,0x01,0x04,0x03,0x02,0x00,0x03,0x05,0x02,0x01,0x03,0x03, + 0x03,0x02,0x01,0x00,0x00,0x01,0x02,0x02,0x03,0x03,0x03,0x03,0x03,0x03,0x03, + 0x02,0x03,0x03,0x04,0x04,0x03,0x00,0x00,0x02,0x03,0x03,0x03,0x03,0x03,0x04, + 0x03,0x00,0x01,0x03,0x03,0x03,0x04,0x03,0x00,0x01,0x01,0x00,0x00,0x01,0x01, + 0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x00,0x00,0x02,0x03, + 0x04,0x03,0x02,0x02,0x03,0x03,0x02,0x02,0x03,0x07,0x07,0x03,0x02,0x00,0x02, + 0x03,0x03,0x02,0x00,0x01,0x03,0x03,0x02,0x01,0x03,0x03,0x03,0x00,0x00,0x03, + 0x06,0x07,0x03,0x00,0x02,0x02,0x01,0x02,0x02,0x03,0x01,0x00,0x02,0x03,0x02, + 0x03,0x05,0x03,0x01,0x01,0x01,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,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0xc8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01, + 0x01,0x01,0x02,0x02,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,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x02,0x03,0x05,0x02, + 0x00,0x03,0x03,0x02,0x02,0x01,0x00,0x00,0x01,0x03,0x03,0x01,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x01, + 0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x03,0x03,0x03,0x01,0x00,0x00,0x02, + 0x03,0x03,0x03,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x01,0x02,0x02,0x00,0x02,0x03,0x03,0x01,0x00,0x00,0x01,0x02,0x03,0x03, + 0x01,0x00,0x03,0x03,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x01,0x03,0x03,0x00, + 0x00,0x00,0x02,0x03,0x02,0x00,0x00,0x03,0x06,0x06,0x03,0x00,0x00,0x02,0x04, + 0x03,0x00,0x00,0x00,0x01,0x02,0x02,0x01,0x00,0x00,0x02,0x03,0x02,0x02,0x01, + 0x00,0x00,0x00,0x01,0x03,0x01,0x01,0x04,0x03,0x01,0x02,0x02,0x00,0x01,0x01, + 0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x02,0x01,0x00,0x01,0x00,0x00,0x01,0x01, + 0x00,0x02,0x07,0x03,0x00,0x01,0x02,0x03,0x02,0x01,0x01,0x03,0x06,0x03,0x02, + 0x03,0x02,0x02,0x04,0x04,0x00,0x02,0x04,0x03,0x03,0x01,0x02,0x03,0x00,0x00, + 0x02,0x03,0x04,0x01,0x00,0x00,0x00,0x00,0x01,0x03,0x04,0x04,0x03,0x03,0x03, + 0x03,0x02,0x01,0x04,0x04,0x03,0x03,0x02,0x00,0x00,0x00,0x02,0x03,0x03,0x03, + 0x04,0x03,0x01,0x01,0x02,0x03,0x03,0x03,0x04,0x03,0x00,0x01,0x01,0x00,0x00, + 0x01,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x02,0x01,0x01, + 0x01,0x03,0x03,0x02,0x00,0x00,0x03,0x04,0x03,0x01,0x02,0x07,0x07,0x03,0x00, + 0x00,0x00,0x02,0x03,0x01,0x00,0x00,0x02,0x03,0x01,0x00,0x03,0x03,0x00,0x00, + 0x01,0x00,0x04,0x09,0x04,0x00,0x00,0x00,0x02,0x01,0x00,0x02,0x01,0x00,0x02, + 0x03,0x03,0x04,0x05,0x02,0x00,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x01,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, + 0x00,0x00,0x00,0x00,0xc8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,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,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x01, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x02,0x02, + 0x02,0x00,0x02,0x06,0x04,0x00,0x01,0x01,0x02,0x03,0x03,0x01,0x01,0x02,0x01, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x00,0x00,0x00,0x00, + 0x00,0x01,0x01,0x01,0x00,0x00,0x01,0x01,0x02,0x00,0x00,0x03,0x03,0x01,0x03, + 0x03,0x04,0x03,0x00,0x00,0x00,0x00,0x00,0x02,0x01,0x01,0x00,0x00,0x01,0x01, + 0x01,0x00,0x00,0x00,0x01,0x02,0x04,0x03,0x03,0x00,0x00,0x00,0x02,0x03,0x03, + 0x02,0x00,0x01,0x01,0x00,0x01,0x03,0x03,0x02,0x00,0x00,0x02,0x02,0x01,0x00, + 0x01,0x03,0x01,0x00,0x00,0x01,0x02,0x00,0x00,0x02,0x02,0x00,0x02,0x03,0x02, + 0x01,0x02,0x03,0x03,0x03,0x02,0x02,0x01,0x01,0x01,0x01,0x02,0x01,0x01,0x01, + 0x00,0x00,0x02,0x02,0x00,0x00,0x02,0x04,0x03,0x00,0x01,0x03,0x00,0x00,0x00, + 0x03,0x05,0x02,0x01,0x02,0x01,0x01,0x00,0x00,0x01,0x00,0x00,0x03,0x03,0x00, + 0x02,0x03,0x01,0x01,0x02,0x00,0x00,0x00,0x03,0x06,0x03,0x00,0x00,0x00,0x02, + 0x03,0x03,0x02,0x04,0x07,0x03,0x00,0x01,0x03,0x03,0x02,0x00,0x00,0x01,0x03, + 0x03,0x01,0x00,0x00,0x00,0x00,0x02,0x03,0x03,0x03,0x00,0x02,0x05,0x03,0x00, + 0x01,0x02,0x03,0x02,0x02,0x03,0x03,0x02,0x01,0x01,0x01,0x02,0x03,0x03,0x03, + 0x01,0x01,0x02,0x00,0x00,0x03,0x02,0x00,0x00,0x00,0x00,0x02,0x05,0x02,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02, + 0x05,0x02,0x00,0x01,0x02,0x00,0x00,0x01,0x02,0x02,0x00,0x02,0x03,0x02,0x01, + 0x00,0x01,0x02,0x00,0x02,0x04,0x02,0x00,0x04,0x04,0x03,0x03,0x03,0x01,0x00, + 0x01,0x05,0x07,0x01,0x00,0x00,0x02,0x02,0x00,0x01,0x02,0x01,0x01,0x01,0x02, + 0x02,0x01,0x01,0x03,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x02, + 0x02,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x01,0x01,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,0xc8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,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,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01, + 0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01, + 0x01,0x01,0x00,0x00,0x01,0x04,0x03,0x00,0x00,0x01,0x01,0x02,0x02,0x00,0x00, + 0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00, + 0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x02,0x02,0x01,0x00,0x02,0x02, + 0x01,0x02,0x03,0x03,0x02,0x00,0x00,0x00,0x00,0x01,0x02,0x01,0x01,0x01,0x01, + 0x01,0x01,0x01,0x01,0x00,0x00,0x01,0x02,0x03,0x03,0x01,0x00,0x00,0x00,0x01, + 0x02,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x03,0x03,0x01,0x00,0x00,0x02,0x02, + 0x01,0x00,0x00,0x02,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x01,0x00,0x00,0x01, + 0x02,0x01,0x01,0x00,0x02,0x03,0x02,0x02,0x01,0x01,0x00,0x01,0x01,0x01,0x00, + 0x00,0x01,0x00,0x00,0x02,0x02,0x00,0x01,0x02,0x03,0x03,0x00,0x01,0x03,0x00, + 0x00,0x00,0x03,0x04,0x02,0x01,0x01,0x01,0x01,0x00,0x01,0x01,0x00,0x01,0x03, + 0x02,0x01,0x01,0x02,0x01,0x00,0x00,0x00,0x00,0x00,0x02,0x03,0x02,0x00,0x00, + 0x00,0x01,0x03,0x03,0x02,0x03,0x04,0x01,0x00,0x03,0x03,0x03,0x02,0x01,0x00, + 0x02,0x03,0x03,0x02,0x00,0x00,0x00,0x01,0x02,0x03,0x03,0x03,0x01,0x01,0x03, + 0x01,0x00,0x00,0x01,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x03,0x03, + 0x03,0x03,0x01,0x01,0x01,0x00,0x01,0x02,0x01,0x00,0x00,0x00,0x00,0x01,0x03, + 0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x02,0x03,0x02,0x00,0x01,0x01,0x00,0x01,0x02,0x02,0x02,0x01,0x02,0x03, + 0x01,0x00,0x00,0x01,0x02,0x01,0x02,0x03,0x02,0x01,0x04,0x03,0x03,0x03,0x03, + 0x01,0x00,0x01,0x03,0x04,0x01,0x00,0x00,0x01,0x02,0x01,0x02,0x02,0x01,0x01, + 0x01,0x01,0x01,0x00,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x01,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x01,0x01,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,0xc8,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x02,0x02,0x02,0x02,0x02,0x01,0x01, + 0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01, + 0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x01, + 0x01,0x01,0x01,0x01,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,0x01,0x01,0x02,0x02,0x02,0x02,0x02,0x02,0x02, + 0x02,0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x00,0x00,0x00,0x01,0x01,0x01,0x01, + 0x01,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01, + 0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x00,0x00,0x00,0x01,0x03,0x03,0x03,0x02, + 0x02,0x02,0x02,0x02,0x02,0x02,0x01,0x00,0x00,0x02,0x02,0x02,0x02,0x02,0x01, + 0x01,0x00,0x00,0x01,0x01,0x01,0x00,0x00,0x01,0x01,0x01,0x02,0x02,0x02,0x02, + 0x02,0x02,0x02,0x02,0x02,0x02,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x02,0x02,0x02,0x02,0x03, + 0x02,0x02,0x02,0x02,0x01,0x01,0x01,0x01,0x01,0x02,0x02,0x02,0x03,0x03,0x02, + 0x02,0x02,0x01,0x01,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x02,0x02,0x02, + 0x01,0x01,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,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc8,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x02,0x01,0x01,0x01, + 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,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x02,0x01,0x01,0x01, + 0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x01, + 0x00,0x01,0x01,0x01,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01, + 0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x03,0x02, + 0x02,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x00,0x00,0x00,0x02,0x02,0x02,0x02, + 0x02,0x01,0x01,0x00,0x00,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x01,0x01, + 0x01,0x00,0x01,0x01,0x01,0x01,0x01,0x01,0x01,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,0x01,0x01,0x01,0x01, + 0x01,0x02,0x02,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x02, + 0x01,0x01,0x01,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01, + 0x01,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,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc8,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01, + 0x01,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,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01, + 0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x01,0x01,0x01, + 0x01,0x01,0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x01,0x00,0x00,0x00,0x01,0x01, + 0x01,0x01,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01, + 0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x01,0x02, + 0x02,0x02,0x02,0x01,0x00,0x00,0x01,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x01,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,0x01,0x01, + 0x01,0x01,0x01,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01, + 0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01, + 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,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc8, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x01, + 0x02,0x02,0x01,0x01,0x00,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01, + 0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01, + 0x01,0x01,0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00, + 0x01,0x02,0x02,0x02,0x01,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x01,0x01,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,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x01,0x01, + 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,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0xc8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x01,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,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,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,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01, + 0x01,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,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x00,0x00, + 0x01,0x01,0x01,0x02,0x01,0x01,0x00,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01, + 0x01,0x01,0x01,0x01,0x01,0x02,0x01,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00, + 0x00,0x01,0x01,0x01,0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x00,0x00, + 0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,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,0x01, + 0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x02,0x02,0x02,0x02, + 0x02,0x01,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,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0xc8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x01,0x01,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,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x01, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01, + 0x01,0x01,0x01,0x01,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,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01, + 0x01,0x01,0x01,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01, + 0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01, + 0x01,0x01,0x01,0x01,0x01,0x01,0x02,0x02,0x02,0x02,0x02,0x01,0x01,0x00,0x00, + 0x00,0x00,0x00,0x01,0x01,0x01,0x00,0x00,0x01,0x02,0x02,0x02,0x02,0x01,0x01, + 0x01,0x01,0x01,0x01,0x00,0x00,0x01,0x01,0x01,0x00,0x00,0x00,0x01,0x01,0x01, + 0x01,0x00,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01, + 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, + 0x01,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x01, + 0x01,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x02,0x02,0x02, + 0x02,0x02,0x02,0x02,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,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0xc8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01, + 0x01,0x01,0x01,0x01,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,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01, + 0x01,0x01,0x02,0x01,0x01,0x00,0x00,0x00,0x01,0x01,0x02,0x01,0x00,0x00,0x00, + 0x00,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x02,0x03,0x03,0x03,0x02,0x01, + 0x01,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x02,0x03,0x03,0x02,0x02, + 0x01,0x01,0x01,0x01,0x01,0x01,0x00,0x00,0x01,0x01,0x01,0x00,0x00,0x00,0x01, + 0x01,0x01,0x01,0x00,0x01,0x02,0x01,0x01,0x01,0x01,0x01,0x01,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,0x00,0x01, + 0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01, + 0x01,0x01,0x01,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x02, + 0x02,0x02,0x02,0x01,0x01,0x01,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,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc8,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01, + 0x01,0x01,0x01,0x01,0x01,0x01,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,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x01,0x02,0x02,0x01,0x01,0x00,0x00,0x00,0x00,0x01,0x02,0x01,0x00, + 0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x02,0x03,0x03,0x03, + 0x02,0x02,0x01,0x01,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x02,0x03,0x03, + 0x02,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x00,0x00,0x01,0x01,0x01,0x00,0x00, + 0x00,0x01,0x01,0x01,0x01,0x00,0x01,0x02,0x01,0x01,0x01,0x01,0x01,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,0x00, + 0x00,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x01,0x01, + 0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01, + 0x01,0x02,0x02,0x01,0x01,0x01,0x01,0x01,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,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc8,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x01,0x01,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,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x01,0x02,0x02,0x01,0x01,0x00,0x00,0x00,0x00,0x01,0x02, + 0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x02,0x03, + 0x03,0x02,0x02,0x02,0x01,0x01,0x01,0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x01, + 0x02,0x02,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x02,0x02,0x01, + 0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x00,0x01,0x01,0x01,0x01,0x01,0x01,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, + 0x00,0x01,0x01,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,0x01,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,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc8,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x01,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,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x01,0x01, + 0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00, + 0x00,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00, + 0x01,0x02,0x02,0x01,0x02,0x01,0x01,0x01,0x00,0x00,0x00,0x01,0x01,0x01,0x01, + 0x01,0x01,0x01,0x01,0x00,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x01,0x02,0x02, + 0x02,0x01,0x01,0x00,0x00,0x01,0x01,0x01,0x01,0x00,0x01,0x01,0x01,0x01,0x01, + 0x01,0x01,0x01,0x00,0x01,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,0x01,0x01,0x01,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,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc8,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x01, + 0x01,0x01,0x01,0x01,0x01,0x01,0x01,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,0x01,0x01,0x01,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x01,0x01, + 0x01,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x00,0x00,0x02, + 0x02,0x02,0x02,0x02,0x01,0x01,0x00,0x00,0x01,0x01,0x01,0x00,0x00,0x01,0x01, + 0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,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,0x01,0x01,0x01,0x01,0x01,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,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0xc8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x00,0x00,0x00,0x00,0x00, + 0x01,0x01,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, + 0x01,0x01,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x01,0x01,0x02,0x02,0x01,0x01, + 0x01,0x02,0x02,0x02,0x02,0x02,0x01,0x01,0x00,0x00,0x01,0x01,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,0x00,0x00, + 0x00,0x01,0x01,0x01,0x01,0x02,0x02,0x01,0x01,0x01,0x01,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x01,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,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0xc8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x01,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,0x01,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01, + 0x01,0x01,0x01,0x02,0x02,0x02,0x02,0x02,0x01,0x01,0x00,0x01,0x01,0x01,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, + 0x00,0x00,0x00,0x01,0x01,0x01,0x02,0x02,0x02,0x01,0x01,0x01,0x01,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x01,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,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0xc8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,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, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01, + 0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01, + 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,0x01,0x01,0x01,0x01,0x01,0x01,0x01, + 0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01, + 0x01,0x01,0x01,0x01,0x01,0x01,0x01,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,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0xc8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x01,0x01, + 0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01, + 0x01,0x01,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,0x01,0x01,0x01,0x01,0x00, + 0x00,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01, + 0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,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,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc8,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,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,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,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, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc8,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,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,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x01,0x01,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,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc8,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x02,0x00,0x00,0x01, + 0x00,0x00,0x00,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x01,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,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,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,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc8, + 0x01,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,0x01,0x03,0x03,0x01, + 0x01,0x01,0x00,0x00,0x01,0x02,0x01,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00, + 0x01,0x01,0x00,0x00,0x00,0x01,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,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8, + 0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8, + 0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8, + 0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8, + 0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8, + 0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8, + 0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8, + 0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8, + 0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8, + 0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8, + 0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8, + 0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8, + 0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8, + 0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8, + 0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8, + 0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8, + 0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8, + 0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8, + 0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8, + 0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8, + 0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8, + 0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8, + 0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8, + 0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8, + 0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8, + 0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8, + 0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8, + 0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8, + 0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8, + 0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8, + 0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8, + 0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8, + 0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8, + 0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8, + 0xc8,0xc8,0xc8,0xc8 +}; + diff --git a/vendor/x11iraf/ximtool/logo/NOTES b/vendor/x11iraf/ximtool/logo/NOTES new file mode 100644 index 00000000..59dcbaef --- /dev/null +++ b/vendor/x11iraf/ximtool/logo/NOTES @@ -0,0 +1,17 @@ + +To make a new logo: + + 1) Create the logo image by some means. Size should be no larger + than 512x512 + 2) Convert the image to FITS, scale it so pixel values are 0-200 + 3) Export to a raw 'logo.bin' file using the IRAF command: + + cl> export logo.fits[*,-*] logo.bin raw outtype='b1' header- + + We flip the image in Y due to the difference in location of the + origin. + 4) Convert the binary logo.bin file to the header: + + % mkhdr logo.bin > ../logo.h + + 5) Recompile the XImtool sources. diff --git a/vendor/x11iraf/ximtool/logo/logo.bin.gz b/vendor/x11iraf/ximtool/logo/logo.bin.gz new file mode 100644 index 00000000..ded144e2 Binary files /dev/null and b/vendor/x11iraf/ximtool/logo/logo.bin.gz differ diff --git a/vendor/x11iraf/ximtool/logo/logo.fits b/vendor/x11iraf/ximtool/logo/logo.fits new file mode 100644 index 00000000..0ff7df28 Binary files /dev/null and b/vendor/x11iraf/ximtool/logo/logo.fits differ diff --git a/vendor/x11iraf/ximtool/logo/logo.fits.gz b/vendor/x11iraf/ximtool/logo/logo.fits.gz new file mode 100644 index 00000000..1837dcdb Binary files /dev/null and b/vendor/x11iraf/ximtool/logo/logo.fits.gz differ diff --git a/vendor/x11iraf/ximtool/logo/mkhdr.c b/vendor/x11iraf/ximtool/logo/mkhdr.c new file mode 100644 index 00000000..240a774b --- /dev/null +++ b/vendor/x11iraf/ximtool/logo/mkhdr.c @@ -0,0 +1,31 @@ +#include +#include +#include + +#define NBYTES 262144 /* 512 x 512 bytes */ + +unsigned char buf[NBYTES]; + +main (int argc, char **argv) +{ + int i, fd, sz; + + fd = open (argv[1], O_RDONLY, 0644); + sz = read (fd, buf, NBYTES); + close (fd); + + printf ("#define LOGO_XDIM\t\t512\n"); + printf ("#define LOGO_YDIM\t\t512\n"); + printf ("#define LOGO_NCOLORS\t\t200\n"); + printf ("#define LOGO_NBYTES\t\t262144\n"); + printf ("\n"); + printf ("unsigned char logo_data[] = {"); + for (i=0; i < NBYTES; i++) { + if ((i % 15) == 0) + printf ("\n "); + printf ("0x%02x%s", (unsigned char)buf[i],(i==(NBYTES-1) ? "\n" : ",")); + } + printf ("};\n\n"); +} + + diff --git a/vendor/x11iraf/ximtool/luts/README b/vendor/x11iraf/ximtool/luts/README new file mode 100644 index 00000000..27a95ac6 --- /dev/null +++ b/vendor/x11iraf/ximtool/luts/README @@ -0,0 +1,37 @@ +This directory contains a collection of lookup tables compiled from various +sources. The origin of most of these was Klaus Banse of the MIDAS project. +The ultimate source of many of the tables is unknown. + +To have the colortables in this directory loaded automatically by Ximtool +install them in the directory + + /usr/local/lib/imtoolcmap/ + +Or, to load colortables from a custom directory set the cmapDir1 or cmapDir2 +ximtool resource to the pathname of the directory containing the tables. + +The format of a user lookup table is very simple: each row defines one +colortable entry, and consists of three columns defining the red, green, +and blue values scaled to the range 0.0 (off) to 1.0 (full intensity). + + R G B + R G B + (etc.) + +Blank lines and comment lines (# ...) are ignored. + +Usually 256 rows are provided, but the number may actually be anything +in the range 1 to 256. Ximtool will interpolate the table as necessary +to compute the colortable values used in Ximtool. Ximtool uses only +201 colors to render pixel data, so it is usually necessary to interpolate +the table when it is loaded. + +Tables are loaded into Ximtool by setting one of the user colormap directory +resources. When Ximtool starts up it will read all the files in the +colormap directory, disregarding any files that are unreadable or that do +not appear to be colortables. The name of the colortable as it will appear +in the Ximtool control panel is the root name of the file, e.g., if the +file is "rainbow.lut" the colortable name will be "rainbow". Lower case +names are suggested to avoid name collisions with the builtin colortables. +If the same colortable file appears in multiple user colortable directories, +the first one will be used. diff --git a/vendor/x11iraf/ximtool/luts/alex.lut b/vendor/x11iraf/ximtool/luts/alex.lut new file mode 100644 index 00000000..c5a25a96 --- /dev/null +++ b/vendor/x11iraf/ximtool/luts/alex.lut @@ -0,0 +1,256 @@ +1.00000 1.00000 0.00000 +1.00000 1.00000 0.00000 +1.00000 1.00000 0.00000 +1.00000 1.00000 0.00000 +0.99608 1.00000 0.00000 +0.98039 1.00000 0.00000 +0.96078 0.97647 0.00000 +0.94510 0.93725 0.00000 +0.92549 0.89804 0.00000 +0.90980 0.85882 0.00000 +0.89412 0.81961 0.00000 +0.87451 0.78039 0.00000 +0.85882 0.74118 0.00000 +0.83922 0.70196 0.00000 +0.82353 0.66275 0.00000 +0.80392 0.62353 0.00000 +0.78824 0.58431 0.00000 +0.76863 0.54510 0.00000 +0.75686 0.50980 0.00000 +0.74118 0.46667 0.00000 +0.72549 0.43137 0.00000 +0.70980 0.39216 0.00000 +0.69412 0.35294 0.00000 +0.68235 0.31765 0.00000 +0.66275 0.27451 0.00000 +0.65098 0.23922 0.00000 +0.63529 0.20000 0.00000 +0.62745 0.16863 0.00000 +0.61569 0.12941 0.00000 +0.60784 0.09804 0.00000 +0.61961 0.08235 0.00000 +0.62745 0.06275 0.00000 +0.63922 0.04706 0.00000 +1.00000 1.00000 1.00000 +1.00000 1.00000 1.00000 +1.00000 1.00000 1.00000 +1.00000 1.00000 1.00000 +1.00000 1.00000 1.00000 +1.00000 1.00000 1.00000 +1.00000 1.00000 1.00000 +1.00000 1.00000 1.00000 +1.00000 1.00000 1.00000 +1.00000 1.00000 1.00000 +1.00000 1.00000 1.00000 +1.00000 1.00000 1.00000 +1.00000 1.00000 1.00000 +1.00000 1.00000 1.00000 +1.00000 1.00000 1.00000 +0.80000 0.00784 0.00784 +0.80784 0.02745 0.02745 +0.81961 0.05098 0.05098 +0.82745 0.08235 0.08235 +0.83922 0.11373 0.11373 +0.84706 0.14902 0.14902 +0.85882 0.19216 0.19216 +0.86667 0.23137 0.23137 +0.87843 0.27843 0.27843 +0.88627 0.32549 0.32549 +0.89804 0.37647 0.37647 +0.90980 0.43137 0.43137 +0.91765 0.48627 0.48627 +0.92941 0.54118 0.54118 +0.93725 0.60000 0.60000 +0.94902 0.66275 0.66275 +0.95686 0.72549 0.72549 +0.96863 0.79216 0.79216 +0.97647 0.85882 0.85882 +0.98824 0.92941 0.92941 +1.00000 1.00000 1.00000 +0.00000 0.00000 0.16471 +0.02745 0.00000 0.18431 +0.05882 0.00000 0.20000 +0.08627 0.00000 0.21961 +0.11373 0.00000 0.23922 +0.14510 0.00000 0.25882 +0.17647 0.00000 0.27843 +0.20392 0.00000 0.29804 +0.23137 0.00000 0.31765 +0.26275 0.00000 0.33725 +0.29412 0.00000 0.35686 +0.32157 0.00000 0.37647 +0.35294 0.00000 0.39608 +0.38039 0.00000 0.41569 +0.41176 0.00000 0.43529 +0.43922 0.00000 0.45490 +0.47059 0.00000 0.47451 +0.49804 0.00000 0.49412 +0.52941 0.00000 0.51373 +0.55686 0.00000 0.53725 +0.58824 0.00000 0.55686 +0.55686 0.00000 0.57647 +0.52941 0.00000 0.59608 +0.49804 0.00000 0.61569 +0.47059 0.00000 0.63922 +0.43922 0.00000 0.65882 +0.41176 0.00000 0.67843 +0.38039 0.00000 0.70196 +0.35294 0.00000 0.72157 +0.32157 0.00000 0.74118 +0.29412 0.00000 0.76471 +0.26275 0.00000 0.78431 +0.23137 0.00000 0.80392 +0.20392 0.00000 0.82745 +0.17647 0.00000 0.84706 +0.14510 0.00000 0.87059 +0.11373 0.00000 0.89020 +0.08627 0.00000 0.91373 +0.05882 0.00000 0.93333 +0.02745 0.00000 0.95686 +0.00000 0.00000 0.97647 +0.00000 0.00000 1.00000 +0.00000 0.02353 0.97647 +0.00000 0.04706 0.95686 +0.00000 0.06275 0.93333 +1.00000 0.00000 0.00000 +1.00000 0.00000 0.00000 +1.00000 0.00000 0.00000 +1.00000 0.00000 0.00000 +1.00000 0.00000 0.00000 +1.00000 0.00000 0.00000 +1.00000 0.00000 0.00000 +1.00000 0.00000 0.00000 +1.00000 0.00000 0.00000 +0.00000 0.21176 0.72157 +0.00000 0.22353 0.70196 +0.00000 0.23529 0.67843 +0.00000 0.25098 0.65882 +0.00000 0.26275 0.63922 +0.00000 0.27451 0.61569 +0.00000 0.28627 0.59608 +0.00000 0.29804 0.57647 +0.00000 0.30980 0.55686 +0.00000 0.32157 0.53725 +0.00000 0.33333 0.51373 +0.00000 0.34510 0.49412 +0.00000 0.35686 0.47451 +0.00000 0.36863 0.45490 +0.00000 0.38039 0.43529 +0.00000 0.39216 0.41569 +0.00000 0.40392 0.39608 +0.00000 0.41176 0.37647 +0.00000 0.42353 0.35686 +0.00000 0.43529 0.33725 +0.00000 0.44706 0.31765 +0.00000 0.45882 0.29804 +0.00000 0.46667 0.27843 +0.00000 0.47843 0.25882 +0.00000 0.49020 0.23922 +0.00000 0.49804 0.21961 +0.00000 0.50980 0.20000 +0.00000 0.52157 0.18431 +0.00000 0.52941 0.16471 +0.00000 0.54118 0.14510 +0.00000 0.55294 0.12941 +0.00000 0.56078 0.10980 +0.00000 0.57255 0.09412 +0.00000 0.58431 0.07451 +0.00000 0.59216 0.05882 +0.00000 0.60392 0.04314 +0.00000 0.61176 0.02745 +0.00000 0.62353 0.01176 +0.00000 0.63137 0.00000 +0.00000 0.64314 0.00000 +0.00000 0.65098 0.00000 +0.00000 0.66275 0.00000 +0.00000 0.67059 0.00000 +0.00000 0.68235 0.00000 +0.00000 0.69020 0.00000 +0.00000 0.70196 0.00000 +0.00000 0.70980 0.00000 +0.00000 0.72157 0.00000 +0.00000 0.72941 0.00000 +0.00000 0.74118 0.00000 +0.00000 0.74902 0.00000 +0.00000 0.76078 0.00000 +0.00000 0.76863 0.00000 +0.00000 0.77647 0.00000 +0.00000 0.78824 0.00000 +0.00000 0.79608 0.00000 +0.00000 0.80784 0.00000 +0.00000 0.81569 0.00000 +0.00000 0.82353 0.00000 +0.00000 0.83529 0.00000 +0.00000 0.84314 0.00000 +0.00000 0.85490 0.00000 +0.00000 0.86275 0.00000 +0.00000 0.87059 0.00000 +0.00000 0.88235 0.00000 +0.00000 0.89020 0.00000 +0.00000 0.89804 0.00000 +0.00000 0.90980 0.00000 +0.00000 0.91765 0.00000 +0.00000 0.92549 0.00000 +0.00000 0.93725 0.00000 +0.00000 0.94510 0.00000 +0.00000 0.95294 0.00000 +0.00000 0.96078 0.00000 +0.00000 0.97255 0.00000 +0.00000 0.98039 0.00000 +0.00000 0.98824 0.00000 +0.00000 1.00000 0.00000 +0.00000 0.98824 0.00000 +0.00000 0.98039 0.00000 +0.00000 0.97255 0.00000 +0.00000 0.96078 0.00000 +0.00000 0.95294 0.00000 +0.00000 0.94510 0.00000 +0.00000 0.93725 0.00000 +0.00000 0.92549 0.00000 +0.00000 0.91765 0.00000 +0.00000 0.90980 0.00000 +0.00000 0.89804 0.00000 +0.00000 0.89020 0.00000 +0.00000 0.88235 0.00000 +0.00000 0.87059 0.00000 +0.00000 0.86275 0.00000 +0.00000 0.85490 0.00000 +0.00000 0.84314 0.00000 +0.00000 0.83529 0.00000 +0.00000 0.82353 0.00000 +0.00000 0.81569 0.00000 +0.00000 0.80784 0.00000 +0.00000 0.79608 0.00000 +0.00000 0.78824 0.00000 +0.00000 0.77647 0.00000 +0.00784 0.76863 0.00000 +0.03529 0.77647 0.00000 +0.06667 0.78824 0.00000 +0.09804 0.80000 0.00000 +0.12941 0.81176 0.00000 +0.16471 0.82745 0.00000 +0.20000 0.84314 0.00000 +0.23529 0.85882 0.00000 +0.26667 0.87059 0.00000 +0.30588 0.89020 0.00000 +0.34118 0.90196 0.00000 +0.37647 0.92157 0.00000 +0.41176 0.93333 0.00000 +0.44706 0.95294 0.00000 +0.48627 0.96863 0.00000 +0.52157 0.98824 0.00000 +0.56078 1.00000 0.00000 +0.59608 1.00000 0.00000 +0.63529 1.00000 0.00000 +0.67059 1.00000 0.00000 +0.70980 1.00000 0.00000 +0.74902 1.00000 0.00000 +0.78431 1.00000 0.00000 +0.82353 1.00000 0.00000 +0.85882 1.00000 0.00000 +0.89804 1.00000 0.00000 +0.93333 1.00000 0.00000 +0.97647 1.00000 0.00000 +1.00000 1.00000 0.00000 +1.00000 1.00000 0.00000 +1.00000 1.00000 0.00000 diff --git a/vendor/x11iraf/ximtool/luts/backgr.lut b/vendor/x11iraf/ximtool/luts/backgr.lut new file mode 100644 index 00000000..515ce439 --- /dev/null +++ b/vendor/x11iraf/ximtool/luts/backgr.lut @@ -0,0 +1,256 @@ +0.00000 0.00000 0.00000 +0.01587 0.01587 0.01587 +0.03174 0.03174 0.03174 +0.04761 0.04761 0.04761 +0.06348 0.06348 0.06348 +0.07935 0.07935 0.07935 +0.09522 0.09522 0.09522 +0.11109 0.11109 0.11109 +0.12696 0.12696 0.12696 +0.14283 0.14283 0.14283 +0.15870 0.15870 0.15870 +0.17457 0.17457 0.17457 +0.19044 0.19044 0.19044 +0.20631 0.20631 0.20631 +0.22218 0.22218 0.22218 +0.23805 0.23805 0.23805 +0.25392 0.25392 0.25392 +0.26979 0.26979 0.26979 +0.28566 0.28566 0.28566 +0.30153 0.30153 0.30153 +0.31740 0.31740 0.31740 +0.33327 0.33327 0.33327 +0.34914 0.34914 0.34914 +0.36501 0.36501 0.36501 +0.38088 0.38088 0.38088 +0.39675 0.39675 0.39675 +0.41262 0.41262 0.41262 +0.42849 0.42849 0.42849 +0.44436 0.44436 0.44436 +0.46023 0.46023 0.46023 +0.47610 0.47610 0.47610 +0.49197 0.49197 0.49197 +0.50784 0.50784 0.50784 +0.52371 0.52371 0.52371 +0.53958 0.53958 0.53958 +0.55545 0.55545 0.55545 +0.57132 0.57132 0.57132 +0.58719 0.58719 0.58719 +0.60306 0.60306 0.60306 +0.61893 0.61893 0.61893 +0.63480 0.63480 0.63480 +0.65067 0.65067 0.65067 +0.66654 0.66654 0.66654 +0.68241 0.68241 0.68241 +0.69828 0.69828 0.69828 +0.71415 0.71415 0.71415 +0.73002 0.73002 0.73002 +0.74589 0.74589 0.74589 +0.76176 0.76176 0.76176 +0.77763 0.77763 0.77763 +0.79350 0.79350 0.79350 +0.80937 0.80937 0.80937 +0.82524 0.82524 0.82524 +0.84111 0.84111 0.84111 +0.85698 0.85698 0.85698 +0.87285 0.87285 0.87285 +0.88872 0.88872 0.88872 +0.90459 0.90459 0.90459 +0.92046 0.92046 0.92046 +0.93633 0.93633 0.93633 +0.95220 0.95220 0.95220 +0.96807 0.96807 0.96807 +0.98394 0.98394 0.98394 +0.99981 0.99981 0.99981 +0.00000 0.00000 0.99981 +0.00000 0.01587 0.98394 +0.00000 0.03174 0.96807 +0.00000 0.04761 0.95220 +0.00000 0.06348 0.93633 +0.00000 0.07935 0.92046 +0.00000 0.09522 0.90459 +0.00000 0.11109 0.88872 +0.00000 0.12696 0.87285 +0.00000 0.14283 0.85698 +0.00000 0.15870 0.84111 +0.00000 0.17457 0.82524 +0.00000 0.19044 0.80937 +0.00000 0.20631 0.79350 +0.00000 0.22218 0.77763 +0.00000 0.23805 0.76176 +0.00000 0.25392 0.74589 +0.00000 0.26979 0.73002 +0.00000 0.28566 0.71415 +0.00000 0.30153 0.69828 +0.00000 0.31740 0.68241 +0.00000 0.33327 0.66654 +0.00000 0.34914 0.65067 +0.00000 0.36501 0.63480 +0.00000 0.38088 0.61893 +0.00000 0.39675 0.60306 +0.00000 0.41262 0.58719 +0.00000 0.42849 0.57132 +0.00000 0.44436 0.55545 +0.00000 0.46023 0.53958 +0.00000 0.47610 0.52371 +0.00000 0.49197 0.50784 +0.00000 0.50784 0.49197 +0.00000 0.52371 0.47610 +0.00000 0.53958 0.46023 +0.00000 0.55545 0.44436 +0.00000 0.57132 0.42849 +0.00000 0.58719 0.41262 +0.00000 0.60306 0.39675 +0.00000 0.61893 0.38088 +0.00000 0.63480 0.36501 +0.00000 0.65067 0.34914 +0.00000 0.66654 0.33327 +0.00000 0.68241 0.31740 +0.00000 0.69828 0.30153 +0.00000 0.71415 0.28566 +0.00000 0.73002 0.26979 +0.00000 0.74589 0.25392 +0.00000 0.76176 0.23805 +0.00000 0.77763 0.22218 +0.00000 0.79350 0.20631 +0.00000 0.80937 0.19044 +0.00000 0.82524 0.17457 +0.00000 0.84111 0.15870 +0.00000 0.85698 0.14283 +0.00000 0.87285 0.12696 +0.00000 0.88872 0.11109 +0.00000 0.90459 0.09522 +0.00000 0.92046 0.07935 +0.00000 0.93633 0.06348 +0.00000 0.95220 0.04761 +0.00000 0.96807 0.03174 +0.00000 0.98394 0.01587 +0.00000 0.99981 0.00000 +0.00000 1.00000 0.00000 +0.01587 1.00000 0.00000 +0.03174 1.00000 0.00000 +0.04761 1.00000 0.00000 +0.06348 1.00000 0.00000 +0.07935 1.00000 0.00000 +0.09522 1.00000 0.00000 +0.11109 1.00000 0.00000 +0.12696 1.00000 0.00000 +0.14283 1.00000 0.00000 +0.15870 1.00000 0.00000 +0.17457 1.00000 0.00000 +0.19044 1.00000 0.00000 +0.20631 1.00000 0.00000 +0.22218 1.00000 0.00000 +0.23805 1.00000 0.00000 +0.25392 1.00000 0.00000 +0.26979 1.00000 0.00000 +0.28566 1.00000 0.00000 +0.30153 1.00000 0.00000 +0.31740 1.00000 0.00000 +0.33327 1.00000 0.00000 +0.34914 1.00000 0.00000 +0.36501 1.00000 0.00000 +0.38088 1.00000 0.00000 +0.39675 1.00000 0.00000 +0.41262 1.00000 0.00000 +0.42849 1.00000 0.00000 +0.44436 1.00000 0.00000 +0.46023 1.00000 0.00000 +0.47610 1.00000 0.00000 +0.49197 1.00000 0.00000 +0.50784 1.00000 0.00000 +0.52371 1.00000 0.00000 +0.53958 1.00000 0.00000 +0.55545 1.00000 0.00000 +0.57132 1.00000 0.00000 +0.58719 1.00000 0.00000 +0.60306 1.00000 0.00000 +0.61893 1.00000 0.00000 +0.63480 1.00000 0.00000 +0.65067 1.00000 0.00000 +0.66654 1.00000 0.00000 +0.68241 1.00000 0.00000 +0.69828 1.00000 0.00000 +0.71415 1.00000 0.00000 +0.73002 1.00000 0.00000 +0.74589 1.00000 0.00000 +0.76176 1.00000 0.00000 +0.77763 1.00000 0.00000 +0.79350 1.00000 0.00000 +0.80937 1.00000 0.00000 +0.82524 1.00000 0.00000 +0.84111 1.00000 0.00000 +0.85698 1.00000 0.00000 +0.87285 1.00000 0.00000 +0.88872 1.00000 0.00000 +0.90459 1.00000 0.00000 +0.92046 1.00000 0.00000 +0.93633 1.00000 0.00000 +0.95220 1.00000 0.00000 +0.96807 1.00000 0.00000 +0.98394 1.00000 0.00000 +0.99981 1.00000 0.00000 +1.00000 0.99981 0.00000 +1.00000 0.98394 0.00000 +1.00000 0.96807 0.00000 +1.00000 0.95220 0.00000 +1.00000 0.93633 0.00000 +1.00000 0.92046 0.00000 +1.00000 0.90459 0.00000 +1.00000 0.88872 0.00000 +1.00000 0.87285 0.00000 +1.00000 0.85698 0.00000 +1.00000 0.84111 0.00000 +1.00000 0.82524 0.00000 +1.00000 0.80937 0.00000 +1.00000 0.79350 0.00000 +1.00000 0.77763 0.00000 +1.00000 0.76176 0.00000 +1.00000 0.74589 0.00000 +1.00000 0.73002 0.00000 +1.00000 0.71415 0.00000 +1.00000 0.69828 0.00000 +1.00000 0.68241 0.00000 +1.00000 0.66654 0.00000 +1.00000 0.65067 0.00000 +1.00000 0.63480 0.00000 +1.00000 0.61893 0.00000 +1.00000 0.60306 0.00000 +1.00000 0.58719 0.00000 +1.00000 0.57132 0.00000 +1.00000 0.55545 0.00000 +1.00000 0.53958 0.00000 +1.00000 0.52371 0.00000 +1.00000 0.50784 0.00000 +1.00000 0.49197 0.00000 +1.00000 0.47610 0.00000 +1.00000 0.46023 0.00000 +1.00000 0.44436 0.00000 +1.00000 0.42849 0.00000 +1.00000 0.41262 0.00000 +1.00000 0.39675 0.00000 +1.00000 0.38088 0.00000 +1.00000 0.36501 0.00000 +1.00000 0.34914 0.00000 +1.00000 0.33327 0.00000 +1.00000 0.31740 0.00000 +1.00000 0.30153 0.00000 +1.00000 0.28566 0.00000 +1.00000 0.26979 0.00000 +1.00000 0.25392 0.00000 +1.00000 0.23805 0.00000 +1.00000 0.22218 0.00000 +1.00000 0.20631 0.00000 +1.00000 0.19044 0.00000 +1.00000 0.17457 0.00000 +1.00000 0.15870 0.00000 +1.00000 0.14283 0.00000 +1.00000 0.12696 0.00000 +1.00000 0.11109 0.00000 +1.00000 0.09522 0.00000 +1.00000 0.07935 0.00000 +1.00000 0.06348 0.00000 +1.00000 0.04761 0.00000 +1.00000 0.03174 0.00000 +1.00000 0.01587 0.00000 +1.00000 0.00000 0.00000 diff --git a/vendor/x11iraf/ximtool/luts/blulut.lut b/vendor/x11iraf/ximtool/luts/blulut.lut new file mode 100644 index 00000000..1bdc621c --- /dev/null +++ b/vendor/x11iraf/ximtool/luts/blulut.lut @@ -0,0 +1,256 @@ +0.00000 0.00000 0.00000 +0.00000 0.00000 0.00392 +0.00000 0.00000 0.00784 +0.00000 0.00000 0.01176 +0.00000 0.00000 0.01569 +0.00000 0.00000 0.01961 +0.00000 0.00000 0.02353 +0.00000 0.00000 0.02745 +0.00000 0.00000 0.03137 +0.00000 0.00000 0.03529 +0.00000 0.00000 0.03922 +0.00000 0.00000 0.04314 +0.00000 0.00000 0.04706 +0.00001 0.00001 0.05098 +0.00001 0.00001 0.05490 +0.00001 0.00001 0.05882 +0.00002 0.00002 0.06275 +0.00002 0.00002 0.06667 +0.00002 0.00002 0.07059 +0.00003 0.00003 0.07451 +0.00004 0.00004 0.07843 +0.00005 0.00005 0.08235 +0.00006 0.00006 0.08627 +0.00007 0.00007 0.09020 +0.00008 0.00008 0.09412 +0.00009 0.00009 0.09804 +0.00011 0.00011 0.10196 +0.00013 0.00013 0.10588 +0.00015 0.00015 0.10980 +0.00017 0.00017 0.11373 +0.00019 0.00019 0.11765 +0.00022 0.00022 0.12157 +0.00025 0.00025 0.12549 +0.00028 0.00028 0.12941 +0.00032 0.00032 0.13333 +0.00035 0.00035 0.13725 +0.00040 0.00040 0.14118 +0.00044 0.00044 0.14510 +0.00049 0.00049 0.14902 +0.00055 0.00055 0.15294 +0.00061 0.00061 0.15686 +0.00067 0.00067 0.16078 +0.00074 0.00074 0.16471 +0.00081 0.00081 0.16863 +0.00089 0.00089 0.17255 +0.00097 0.00097 0.17647 +0.00106 0.00106 0.18039 +0.00115 0.00115 0.18431 +0.00126 0.00126 0.18824 +0.00136 0.00136 0.19216 +0.00148 0.00148 0.19608 +0.00160 0.00160 0.20000 +0.00173 0.00173 0.20392 +0.00187 0.00187 0.20784 +0.00201 0.00201 0.21176 +0.00216 0.00216 0.21569 +0.00233 0.00233 0.21961 +0.00250 0.00250 0.22353 +0.00268 0.00268 0.22745 +0.00287 0.00287 0.23137 +0.00307 0.00307 0.23529 +0.00327 0.00327 0.23922 +0.00349 0.00349 0.24314 +0.00373 0.00373 0.24706 +0.00397 0.00397 0.25098 +0.00422 0.00422 0.25490 +0.00449 0.00449 0.25882 +0.00477 0.00477 0.26275 +0.00506 0.00506 0.26667 +0.00536 0.00536 0.27059 +0.00568 0.00568 0.27451 +0.00601 0.00601 0.27843 +0.00636 0.00636 0.28235 +0.00672 0.00672 0.28627 +0.00709 0.00709 0.29020 +0.00748 0.00748 0.29412 +0.00789 0.00789 0.29804 +0.00831 0.00831 0.30196 +0.00875 0.00875 0.30588 +0.00921 0.00921 0.30980 +0.00969 0.00969 0.31373 +0.01018 0.01018 0.31765 +0.01069 0.01069 0.32157 +0.01122 0.01122 0.32549 +0.01177 0.01177 0.32941 +0.01235 0.01235 0.33333 +0.01294 0.01294 0.33725 +0.01355 0.01355 0.34118 +0.01418 0.01418 0.34510 +0.01484 0.01484 0.34902 +0.01552 0.01552 0.35294 +0.01622 0.01622 0.35686 +0.01694 0.01694 0.36078 +0.01769 0.01769 0.36471 +0.01847 0.01847 0.36863 +0.01926 0.01926 0.37255 +0.02009 0.02009 0.37647 +0.02094 0.02094 0.38039 +0.02181 0.02181 0.38431 +0.02272 0.02272 0.38824 +0.02365 0.02365 0.39216 +0.02461 0.02461 0.39608 +0.02560 0.02560 0.40000 +0.02662 0.02662 0.40392 +0.02767 0.02767 0.40784 +0.02875 0.02875 0.41176 +0.02986 0.02986 0.41569 +0.03100 0.03100 0.41961 +0.03218 0.03218 0.42353 +0.03338 0.03338 0.42745 +0.03463 0.03463 0.43137 +0.03590 0.03590 0.43529 +0.03721 0.03721 0.43922 +0.03856 0.03856 0.44314 +0.03994 0.03994 0.44706 +0.04136 0.04136 0.45098 +0.04282 0.04282 0.45490 +0.04432 0.04432 0.45882 +0.04585 0.04585 0.46275 +0.04743 0.04743 0.46667 +0.04904 0.04904 0.47059 +0.05070 0.05070 0.47451 +0.05239 0.05239 0.47843 +0.05413 0.05413 0.48235 +0.05591 0.05591 0.48627 +0.05774 0.05774 0.49020 +0.05961 0.05961 0.49412 +0.06153 0.06153 0.49804 +0.06349 0.06349 0.50196 +0.06549 0.06549 0.50588 +0.06755 0.06755 0.50980 +0.06965 0.06965 0.51373 +0.07180 0.07180 0.51765 +0.07400 0.07400 0.52157 +0.07625 0.07625 0.52549 +0.07856 0.07856 0.52941 +0.08091 0.08091 0.53333 +0.08331 0.08331 0.53725 +0.08577 0.08577 0.54118 +0.08829 0.08829 0.54510 +0.09086 0.09086 0.54902 +0.09348 0.09348 0.55294 +0.09616 0.09616 0.55686 +0.09890 0.09890 0.56078 +0.10169 0.10169 0.56471 +0.10455 0.10455 0.56863 +0.10746 0.10746 0.57255 +0.11044 0.11044 0.57647 +0.11347 0.11347 0.58039 +0.11657 0.11657 0.58431 +0.11973 0.11973 0.58824 +0.12296 0.12296 0.59216 +0.12624 0.12624 0.59608 +0.12960 0.12960 0.60000 +0.13302 0.13302 0.60392 +0.13651 0.13651 0.60784 +0.14007 0.14007 0.61176 +0.14369 0.14369 0.61569 +0.14739 0.14739 0.61961 +0.15116 0.15116 0.62353 +0.15500 0.15500 0.62745 +0.15891 0.15891 0.63137 +0.16289 0.16289 0.63529 +0.16695 0.16695 0.63922 +0.17109 0.17109 0.64314 +0.17530 0.17530 0.64706 +0.17959 0.17959 0.65098 +0.18395 0.18395 0.65490 +0.18840 0.18840 0.65882 +0.19292 0.19292 0.66275 +0.19753 0.19753 0.66667 +0.20222 0.20222 0.67059 +0.20699 0.20699 0.67451 +0.21185 0.21185 0.67843 +0.21679 0.21679 0.68235 +0.22182 0.22182 0.68627 +0.22693 0.22693 0.69020 +0.23213 0.23213 0.69412 +0.23742 0.23742 0.69804 +0.24280 0.24280 0.70196 +0.24827 0.24827 0.70588 +0.25384 0.25384 0.70980 +0.25949 0.25949 0.71373 +0.26524 0.26524 0.71765 +0.27109 0.27109 0.72157 +0.27703 0.27703 0.72549 +0.28307 0.28307 0.72941 +0.28920 0.28920 0.73333 +0.29544 0.29544 0.73725 +0.30178 0.30178 0.74118 +0.30821 0.30821 0.74510 +0.31476 0.31476 0.74902 +0.32140 0.32140 0.75294 +0.32815 0.32815 0.75686 +0.33500 0.33500 0.76078 +0.34196 0.34196 0.76471 +0.34903 0.34903 0.76863 +0.35621 0.35621 0.77255 +0.36350 0.36350 0.77647 +0.37090 0.37090 0.78039 +0.37841 0.37841 0.78431 +0.38603 0.38603 0.78824 +0.39377 0.39377 0.79216 +0.40163 0.40163 0.79608 +0.40960 0.40960 0.80000 +0.41769 0.41769 0.80392 +0.42590 0.42590 0.80784 +0.43423 0.43423 0.81176 +0.44268 0.44268 0.81569 +0.45126 0.45126 0.81961 +0.45996 0.45996 0.82353 +0.46878 0.46878 0.82745 +0.47773 0.47773 0.83137 +0.48681 0.48681 0.83529 +0.49601 0.49601 0.83922 +0.50535 0.50535 0.84314 +0.51482 0.51482 0.84706 +0.52442 0.52442 0.85098 +0.53415 0.53415 0.85490 +0.54402 0.54402 0.85882 +0.55403 0.55403 0.86275 +0.56417 0.56417 0.86667 +0.57445 0.57445 0.87059 +0.58487 0.58487 0.87451 +0.59543 0.59543 0.87843 +0.60613 0.60613 0.88235 +0.61698 0.61698 0.88627 +0.62798 0.62798 0.89020 +0.63911 0.63911 0.89412 +0.65040 0.65040 0.89804 +0.66184 0.66184 0.90196 +0.67342 0.67342 0.90588 +0.68516 0.68516 0.90980 +0.69705 0.69705 0.91373 +0.70909 0.70909 0.91765 +0.72129 0.72129 0.92157 +0.73365 0.73365 0.92549 +0.74616 0.74616 0.92941 +0.75883 0.75883 0.93333 +0.77167 0.77167 0.93725 +0.78466 0.78466 0.94118 +0.79782 0.79782 0.94510 +0.81115 0.81115 0.94902 +0.82464 0.82464 0.95294 +0.83830 0.83830 0.95686 +0.85213 0.85213 0.96078 +0.86612 0.86612 0.96471 +0.88029 0.88029 0.96863 +0.89464 0.89464 0.97255 +0.90915 0.90915 0.97647 +0.92385 0.92385 0.98039 +0.93872 0.93872 0.98431 +0.95377 0.95377 0.98824 +0.96899 0.96899 0.99216 +0.98441 0.98441 0.99608 +1.00000 1.00000 1.00000 diff --git a/vendor/x11iraf/ximtool/luts/flag.lut b/vendor/x11iraf/ximtool/luts/flag.lut new file mode 100644 index 00000000..16c010a8 --- /dev/null +++ b/vendor/x11iraf/ximtool/luts/flag.lut @@ -0,0 +1,256 @@ +0.00000 0.00000 0.00000 +0.00000 0.49020 0.98039 +0.98039 0.98039 0.98039 +0.00000 0.49020 0.98039 +0.98039 0.98039 0.98039 +0.00000 0.49020 0.98039 +0.98039 0.98039 0.98039 +0.00000 0.49020 0.98039 +0.98039 0.98039 0.98039 +0.00000 0.49020 0.98039 +0.98039 0.98039 0.98039 +0.00000 0.49020 0.98039 +0.98039 0.98039 0.98039 +0.00000 0.49020 0.98039 +0.98039 0.98039 0.98039 +0.00000 0.49020 0.98039 +0.98039 0.98039 0.98039 +0.00000 0.49020 0.98039 +0.98039 0.98039 0.98039 +0.00000 0.49020 0.98039 +0.98039 0.98039 0.98039 +0.00000 0.49020 0.98039 +0.98039 0.98039 0.98039 +0.00000 0.49020 0.98039 +0.98039 0.98039 0.98039 +0.00000 0.49020 0.98039 +0.98039 0.98039 0.98039 +0.00000 0.49020 0.98039 +0.98039 0.98039 0.98039 +0.00000 0.49020 0.98039 +0.98039 0.98039 0.98039 +0.00000 0.49020 0.98039 +0.98039 0.98039 0.98039 +0.00000 0.49020 0.98039 +0.98039 0.98039 0.98039 +0.00000 0.49020 0.98039 +0.98039 0.98039 0.98039 +0.00000 0.49020 0.98039 +0.98039 0.98039 0.98039 +0.00000 0.49020 0.98039 +0.98039 0.98039 0.98039 +0.00000 0.49020 0.98039 +0.98039 0.98039 0.98039 +0.00000 0.49020 0.98039 +0.98039 0.98039 0.98039 +0.00000 0.49020 0.98039 +0.98039 0.98039 0.98039 +0.00000 0.49020 0.98039 +0.98039 0.98039 0.98039 +0.00000 0.49020 0.98039 +0.98039 0.98039 0.98039 +0.00000 0.49020 0.98039 +0.98039 0.98039 0.98039 +0.00000 0.49020 0.98039 +0.98039 0.98039 0.98039 +0.00000 0.49020 0.98039 +0.98039 0.98039 0.98039 +0.00000 0.49020 0.98039 +0.98039 0.98039 0.98039 +0.00000 0.49020 0.98039 +0.98039 0.98039 0.98039 +0.00000 0.49020 0.98039 +0.98039 0.98039 0.98039 +0.00000 0.49020 0.98039 +0.98039 0.98039 0.98039 +0.00000 0.49020 0.98039 +0.98039 0.98039 0.98039 +0.00000 0.49020 0.98039 +0.98039 0.98039 0.98039 +0.00000 0.49020 0.98039 +0.98039 0.98039 0.98039 +0.00000 0.49020 0.98039 +0.98039 0.98039 0.98039 +0.00000 0.49020 0.98039 +0.98039 0.98039 0.98039 +0.00000 0.49020 0.98039 +0.98039 0.98039 0.98039 +0.00000 0.49020 0.98039 +0.98039 0.98039 0.98039 +0.00000 0.49020 0.98039 +0.98039 0.98039 0.98039 +0.00000 0.49020 0.98039 +0.98039 0.98039 0.98039 +0.00000 0.49020 0.98039 +0.98039 0.98039 0.98039 +0.00000 0.49020 0.98039 +0.98039 0.98039 0.98039 +0.00000 0.49020 0.98039 +0.98039 0.98039 0.98039 +0.00000 0.49020 0.98039 +0.98039 0.98039 0.98039 +0.00000 0.49020 0.98039 +0.98039 0.98039 0.98039 +0.00000 0.49020 0.98039 +0.98039 0.98039 0.98039 +0.00000 0.49020 0.98039 +0.98039 0.98039 0.98039 +0.00000 0.49020 0.98039 +0.98039 0.98039 0.98039 +0.00000 0.49020 0.98039 +0.98039 0.98039 0.98039 +0.00000 0.49020 0.98039 +0.98039 0.98039 0.98039 +0.00000 0.49020 0.98039 +0.98039 0.98039 0.98039 +0.00000 0.49020 0.98039 +0.98039 0.98039 0.98039 +0.00000 0.49020 0.98039 +0.98039 0.98039 0.98039 +0.00000 0.49020 0.98039 +0.98039 0.98039 0.98039 +0.00000 0.49020 0.98039 +0.98039 0.98039 0.98039 +0.00000 0.49020 0.98039 +0.98039 0.98039 0.98039 +0.00000 0.49020 0.98039 +0.98039 0.98039 0.98039 +0.00000 0.49020 0.98039 +0.98039 0.98039 0.98039 +0.00000 0.49020 0.98039 +0.98039 0.98039 0.98039 +0.00000 0.49020 0.98039 +0.98039 0.98039 0.98039 +0.00000 0.49020 0.98039 +0.98039 0.98039 0.98039 +0.00000 0.49020 0.98039 +0.98039 0.98039 0.98039 +0.00000 0.49020 0.98039 +0.98039 0.98039 0.98039 +0.00000 0.49020 0.98039 +0.98039 0.98039 0.98039 +0.00000 0.49020 0.98039 +0.98039 0.98039 0.98039 +0.00000 0.49020 0.98039 +0.98039 0.98039 0.98039 +0.00000 0.49020 0.98039 +0.98039 0.98039 0.98039 +0.00000 0.49020 0.98039 +0.98039 0.98039 0.98039 +0.00000 0.49020 0.98039 +0.98039 0.98039 0.98039 +0.00000 0.49020 0.98039 +0.98039 0.98039 0.98039 +0.00000 0.49020 0.98039 +0.98039 0.98039 0.98039 +0.00000 0.49020 0.98039 +0.98039 0.98039 0.98039 +0.00000 0.49020 0.98039 +0.98039 0.98039 0.98039 +0.00000 0.49020 0.98039 +0.98039 0.98039 0.98039 +0.00000 0.49020 0.98039 +0.98039 0.98039 0.98039 +0.00000 0.49020 0.98039 +0.98039 0.98039 0.98039 +0.00000 0.49020 0.98039 +0.98039 0.98039 0.98039 +0.00000 0.49020 0.98039 +0.98039 0.98039 0.98039 +0.00000 0.49020 0.98039 +0.98039 0.98039 0.98039 +0.00000 0.49020 0.98039 +0.98039 0.98039 0.98039 +0.00000 0.49020 0.98039 +0.98039 0.98039 0.98039 +0.00000 0.49020 0.98039 +0.98039 0.98039 0.98039 +0.00000 0.49020 0.98039 +0.98039 0.98039 0.98039 +0.00000 0.49020 0.98039 +0.98039 0.98039 0.98039 +0.00000 0.49020 0.98039 +0.98039 0.98039 0.98039 +0.00000 0.49020 0.98039 +0.98039 0.98039 0.98039 +0.00000 0.49020 0.98039 +0.98039 0.98039 0.98039 +0.00000 0.49020 0.98039 +0.98039 0.98039 0.98039 +0.00000 0.49020 0.98039 +0.98039 0.98039 0.98039 +0.00000 0.49020 0.98039 +0.98039 0.98039 0.98039 +0.00000 0.49020 0.98039 +0.98039 0.98039 0.98039 +0.00000 0.49020 0.98039 +0.98039 0.98039 0.98039 +0.00000 0.49020 0.98039 +0.98039 0.98039 0.98039 +0.00000 0.49020 0.98039 +0.98039 0.98039 0.98039 +0.00000 0.49020 0.98039 +0.98039 0.98039 0.98039 +0.00000 0.49020 0.98039 +0.98039 0.98039 0.98039 +0.00000 0.49020 0.98039 +0.98039 0.98039 0.98039 +0.00000 0.49020 0.98039 +0.98039 0.98039 0.98039 +0.00000 0.49020 0.98039 +0.98039 0.98039 0.98039 +0.00000 0.49020 0.98039 +0.98039 0.98039 0.98039 +0.00000 0.49020 0.98039 +0.98039 0.98039 0.98039 +0.00000 0.49020 0.98039 +0.98039 0.98039 0.98039 +0.00000 0.49020 0.98039 +0.98039 0.98039 0.98039 +0.00000 0.49020 0.98039 +0.98039 0.98039 0.98039 +0.00000 0.49020 0.98039 +0.98039 0.98039 0.98039 +0.00000 0.49020 0.98039 +0.98039 0.98039 0.98039 +0.00000 0.49020 0.98039 +0.98039 0.98039 0.98039 +0.00000 0.49020 0.98039 +0.98039 0.98039 0.98039 +0.00000 0.49020 0.98039 +0.98039 0.98039 0.98039 +0.00000 0.49020 0.98039 +0.98039 0.98039 0.98039 +0.00000 0.49020 0.98039 +0.98039 0.98039 0.98039 +0.00000 0.49020 0.98039 +0.98039 0.98039 0.98039 +0.00000 0.49020 0.98039 +0.98039 0.98039 0.98039 +0.00000 0.49020 0.98039 +0.98039 0.98039 0.98039 +0.00000 0.49020 0.98039 +0.98039 0.98039 0.98039 +0.00000 0.49020 0.98039 +0.98039 0.98039 0.98039 +0.00000 0.49020 0.98039 +0.98039 0.98039 0.98039 +0.00000 0.49020 0.98039 +0.98039 0.98039 0.98039 +0.00000 0.49020 0.98039 +0.98039 0.98039 0.98039 +0.00000 0.49020 0.98039 +0.98039 0.98039 0.98039 +0.00000 0.49020 0.98039 +0.98039 0.98039 0.98039 +0.00000 0.49020 0.98039 +0.98039 0.98039 0.98039 +0.00000 0.49020 0.98039 +0.98039 0.98039 0.98039 +0.00000 0.49020 0.98039 +0.98039 0.98039 0.98039 +0.00000 0.49020 0.98039 +0.98039 0.98039 0.98039 +0.00000 0.49020 0.98039 +0.98039 0.98039 0.98039 +0.00000 0.49020 0.98039 diff --git a/vendor/x11iraf/ximtool/luts/idl11.lut b/vendor/x11iraf/ximtool/luts/idl11.lut new file mode 100644 index 00000000..e6708ae0 --- /dev/null +++ b/vendor/x11iraf/ximtool/luts/idl11.lut @@ -0,0 +1,256 @@ +0.00000 0.00000 0.00000 +0.00000 0.00392 0.00392 +0.00000 0.00784 0.00784 +0.00000 0.01176 0.01176 +0.00000 0.01569 0.01569 +0.00000 0.03137 0.03137 +0.00000 0.04706 0.04706 +0.00000 0.06275 0.06275 +0.00000 0.08235 0.08235 +0.00000 0.09804 0.09804 +0.00000 0.11373 0.11373 +0.00000 0.12941 0.12941 +0.00000 0.14902 0.14902 +0.00000 0.16471 0.16471 +0.00000 0.18039 0.18039 +0.00000 0.19608 0.19608 +0.00000 0.21569 0.21569 +0.00000 0.23137 0.23137 +0.00000 0.24706 0.24706 +0.00000 0.26275 0.26275 +0.00000 0.28235 0.28235 +0.00000 0.29804 0.29804 +0.00000 0.31373 0.31373 +0.00000 0.32941 0.32941 +0.00000 0.34902 0.34902 +0.00000 0.36471 0.36471 +0.00000 0.38039 0.38039 +0.00000 0.39608 0.39608 +0.00000 0.41569 0.41569 +0.00000 0.43137 0.43137 +0.00000 0.44706 0.44706 +0.00000 0.46275 0.46275 +0.00000 0.48235 0.48235 +0.00000 0.49804 0.49804 +0.00000 0.51373 0.51373 +0.00000 0.52941 0.52941 +0.00000 0.54902 0.54902 +0.00000 0.56471 0.56471 +0.00000 0.58039 0.58039 +0.00000 0.59608 0.59608 +0.00000 0.61569 0.61569 +0.00000 0.63137 0.63137 +0.00000 0.64706 0.64706 +0.00000 0.66275 0.66275 +0.00000 0.68235 0.68235 +0.00000 0.69804 0.69804 +0.00000 0.71373 0.71373 +0.00000 0.72941 0.72941 +0.00000 0.74902 0.74902 +0.00000 0.76471 0.76471 +0.00000 0.78039 0.78039 +0.00000 0.79608 0.79608 +0.00000 0.81569 0.81569 +0.00000 0.83137 0.83137 +0.00000 0.84706 0.84706 +0.00000 0.86275 0.86275 +0.00000 0.88235 0.88235 +0.00000 0.89804 0.89804 +0.00000 0.91373 0.91373 +0.00000 0.92941 0.92941 +0.00000 0.94902 0.94902 +0.00000 0.96471 0.96471 +0.00000 0.98039 0.98039 +0.00000 1.00000 1.00000 +0.00000 1.00000 1.00000 +0.00000 0.98431 1.00000 +0.00000 0.96863 1.00000 +0.00000 0.95294 1.00000 +0.00000 0.93725 1.00000 +0.00000 0.92157 1.00000 +0.00000 0.90588 1.00000 +0.00000 0.89020 1.00000 +0.00000 0.87451 1.00000 +0.00000 0.85882 1.00000 +0.00000 0.84314 1.00000 +0.00000 0.82745 1.00000 +0.00000 0.81176 1.00000 +0.00000 0.79608 1.00000 +0.00000 0.78039 1.00000 +0.00000 0.76471 1.00000 +0.00000 0.74902 1.00000 +0.00000 0.73333 1.00000 +0.00000 0.71765 1.00000 +0.00000 0.70196 1.00000 +0.00000 0.68627 1.00000 +0.00000 0.66667 1.00000 +0.00000 0.65098 1.00000 +0.00000 0.63529 1.00000 +0.00000 0.61961 1.00000 +0.00000 0.60392 1.00000 +0.00000 0.58824 1.00000 +0.00000 0.57255 1.00000 +0.00000 0.55686 1.00000 +0.00000 0.54118 1.00000 +0.00000 0.52549 1.00000 +0.00000 0.50980 1.00000 +0.00000 0.49412 1.00000 +0.00000 0.47843 1.00000 +0.00000 0.46275 1.00000 +0.00000 0.44706 1.00000 +0.00000 0.43137 1.00000 +0.00000 0.41569 1.00000 +0.00000 0.40000 1.00000 +0.00000 0.38431 1.00000 +0.00000 0.36863 1.00000 +0.00000 0.35294 1.00000 +0.00000 0.33333 1.00000 +0.00000 0.31765 1.00000 +0.00000 0.30196 1.00000 +0.00000 0.28627 1.00000 +0.00000 0.27059 1.00000 +0.00000 0.25490 1.00000 +0.00000 0.23922 1.00000 +0.00000 0.22353 1.00000 +0.00000 0.20784 1.00000 +0.00000 0.19216 1.00000 +0.00000 0.17647 1.00000 +0.00000 0.16078 1.00000 +0.00000 0.14510 1.00000 +0.00000 0.12941 1.00000 +0.00000 0.11373 1.00000 +0.00000 0.09804 1.00000 +0.00000 0.08235 1.00000 +0.00000 0.06667 1.00000 +0.00000 0.05098 1.00000 +0.00000 0.03529 1.00000 +0.00000 0.01961 1.00000 +0.00000 0.00000 1.00000 +0.00000 0.00000 1.00000 +0.01569 0.00000 1.00000 +0.03137 0.00000 1.00000 +0.04706 0.00000 1.00000 +0.06275 0.00000 1.00000 +0.07843 0.00000 1.00000 +0.09412 0.00000 1.00000 +0.10980 0.00000 1.00000 +0.12549 0.00000 1.00000 +0.14118 0.00000 1.00000 +0.15686 0.00000 1.00000 +0.17255 0.00000 1.00000 +0.18824 0.00000 1.00000 +0.20392 0.00000 1.00000 +0.21961 0.00000 1.00000 +0.23529 0.00000 1.00000 +0.25098 0.00000 1.00000 +0.26667 0.00000 1.00000 +0.28235 0.00000 1.00000 +0.29804 0.00000 1.00000 +0.31373 0.00000 1.00000 +0.33333 0.00000 1.00000 +0.34902 0.00000 1.00000 +0.36471 0.00000 1.00000 +0.38039 0.00000 1.00000 +0.39608 0.00000 1.00000 +0.41176 0.00000 1.00000 +0.42745 0.00000 1.00000 +0.44314 0.00000 1.00000 +0.45882 0.00000 1.00000 +0.47451 0.00000 1.00000 +0.49020 0.00000 1.00000 +0.50588 0.00000 1.00000 +0.52157 0.00000 1.00000 +0.53725 0.00000 1.00000 +0.55294 0.00000 1.00000 +0.56863 0.00000 1.00000 +0.58431 0.00000 1.00000 +0.60000 0.00000 1.00000 +0.61569 0.00000 1.00000 +0.63137 0.00000 1.00000 +0.64706 0.00000 1.00000 +0.66667 0.00000 1.00000 +0.68235 0.00000 1.00000 +0.69804 0.00000 1.00000 +0.71373 0.00000 1.00000 +0.72941 0.00000 1.00000 +0.74510 0.00000 1.00000 +0.76078 0.00000 1.00000 +0.77647 0.00000 1.00000 +0.79216 0.00000 1.00000 +0.80784 0.00000 1.00000 +0.82353 0.00000 1.00000 +0.83922 0.00000 1.00000 +0.85490 0.00000 1.00000 +0.87059 0.00000 1.00000 +0.88627 0.00000 1.00000 +0.90196 0.00000 1.00000 +0.91765 0.00000 1.00000 +0.93333 0.00000 1.00000 +0.94902 0.00000 1.00000 +0.96471 0.00000 1.00000 +0.98039 0.00000 1.00000 +1.00000 0.00000 1.00000 +1.00000 0.00000 1.00000 +1.00000 0.00000 0.98431 +1.00000 0.00000 0.96863 +1.00000 0.00000 0.95294 +1.00000 0.00000 0.93725 +1.00000 0.00000 0.92157 +1.00000 0.00000 0.90588 +1.00000 0.00000 0.89020 +1.00000 0.00000 0.87451 +1.00000 0.00000 0.85490 +1.00000 0.00000 0.83922 +1.00000 0.00000 0.82353 +1.00000 0.00000 0.80784 +1.00000 0.00000 0.79216 +1.00000 0.00000 0.77647 +1.00000 0.00000 0.76078 +1.00000 0.00000 0.74510 +1.00000 0.00000 0.72941 +1.00000 0.00000 0.70980 +1.00000 0.00000 0.69412 +1.00000 0.00000 0.67843 +1.00000 0.00000 0.66275 +1.00000 0.00000 0.64706 +1.00000 0.00000 0.63137 +1.00000 0.00000 0.61569 +1.00000 0.00000 0.60000 +1.00000 0.00000 0.58431 +1.00000 0.00000 0.56471 +1.00000 0.00000 0.54902 +1.00000 0.00000 0.53333 +1.00000 0.00000 0.51765 +1.00000 0.00000 0.50196 +1.00000 0.00000 0.48627 +1.00000 0.00000 0.47059 +1.00000 0.00000 0.45490 +1.00000 0.00000 0.43922 +1.00000 0.00000 0.41961 +1.00000 0.00000 0.40392 +1.00000 0.00000 0.38824 +1.00000 0.00000 0.37255 +1.00000 0.00000 0.35686 +1.00000 0.00000 0.34118 +1.00000 0.00000 0.32549 +1.00000 0.00000 0.30980 +1.00000 0.00000 0.29412 +1.00000 0.00000 0.27451 +1.00000 0.00000 0.25882 +1.00000 0.00000 0.24314 +1.00000 0.00000 0.22745 +1.00000 0.00000 0.21176 +1.00000 0.00000 0.19608 +1.00000 0.00000 0.18039 +1.00000 0.00000 0.16471 +1.00000 0.00000 0.14902 +1.00000 0.00000 0.12941 +1.00000 0.00000 0.11373 +1.00000 0.00000 0.09804 +1.00000 0.00000 0.08235 +1.00000 0.00000 0.06667 +1.00000 0.00000 0.05098 +1.00000 0.00000 0.03529 +1.00000 0.00000 0.01961 +1.00000 0.00000 0.00000 +1.00000 0.00000 0.00000 diff --git a/vendor/x11iraf/ximtool/luts/idl12.lut b/vendor/x11iraf/ximtool/luts/idl12.lut new file mode 100644 index 00000000..78dc76b7 --- /dev/null +++ b/vendor/x11iraf/ximtool/luts/idl12.lut @@ -0,0 +1,256 @@ +0.00000 0.00000 0.00000 +0.00000 0.32941 0.00000 +0.00000 0.32941 0.00000 +0.00000 0.32941 0.00000 +0.00000 0.32941 0.00000 +0.00000 0.32941 0.00000 +0.00000 0.32941 0.00000 +0.00000 0.32941 0.00000 +0.00000 0.32941 0.00000 +0.00000 0.32941 0.00000 +0.00000 0.32941 0.00000 +0.00000 0.32941 0.00000 +0.00000 0.32941 0.00000 +0.00000 0.32941 0.00000 +0.00000 0.32941 0.00000 +0.00000 0.32941 0.00000 +0.00000 0.65882 0.00000 +0.00000 0.65882 0.00000 +0.00000 0.65882 0.00000 +0.00000 0.65882 0.00000 +0.00000 0.65882 0.00000 +0.00000 0.65882 0.00000 +0.00000 0.65882 0.00000 +0.00000 0.65882 0.00000 +0.00000 0.65882 0.00000 +0.00000 0.65882 0.00000 +0.00000 0.65882 0.00000 +0.00000 0.65882 0.00000 +0.00000 0.65882 0.00000 +0.00000 0.65882 0.00000 +0.00000 0.65882 0.00000 +0.00000 0.65882 0.00000 +0.00000 1.00000 0.00000 +0.00000 1.00000 0.00000 +0.00000 1.00000 0.00000 +0.00000 1.00000 0.00000 +0.00000 1.00000 0.00000 +0.00000 1.00000 0.00000 +0.00000 1.00000 0.00000 +0.00000 1.00000 0.00000 +0.00000 1.00000 0.00000 +0.00000 1.00000 0.00000 +0.00000 1.00000 0.00000 +0.00000 1.00000 0.00000 +0.00000 1.00000 0.00000 +0.00000 1.00000 0.00000 +0.00000 1.00000 0.00000 +0.00000 1.00000 0.00000 +0.00000 1.00000 0.32941 +0.00000 1.00000 0.32941 +0.00000 1.00000 0.32941 +0.00000 1.00000 0.32941 +0.00000 1.00000 0.32941 +0.00000 1.00000 0.32941 +0.00000 1.00000 0.32941 +0.00000 1.00000 0.32941 +0.00000 1.00000 0.32941 +0.00000 1.00000 0.32941 +0.00000 1.00000 0.32941 +0.00000 1.00000 0.32941 +0.00000 1.00000 0.32941 +0.00000 1.00000 0.32941 +0.00000 1.00000 0.32941 +0.00000 1.00000 0.32941 +0.00000 1.00000 0.65882 +0.00000 1.00000 0.65882 +0.00000 1.00000 0.65882 +0.00000 1.00000 0.65882 +0.00000 1.00000 0.65882 +0.00000 1.00000 0.65882 +0.00000 1.00000 0.65882 +0.00000 1.00000 0.65882 +0.00000 1.00000 0.65882 +0.00000 1.00000 0.65882 +0.00000 1.00000 0.65882 +0.00000 1.00000 0.65882 +0.00000 1.00000 0.65882 +0.00000 1.00000 0.65882 +0.00000 1.00000 0.65882 +0.00000 1.00000 0.65882 +0.00000 1.00000 1.00000 +0.00000 1.00000 1.00000 +0.00000 1.00000 1.00000 +0.00000 1.00000 1.00000 +0.00000 1.00000 1.00000 +0.00000 1.00000 1.00000 +0.00000 1.00000 1.00000 +0.00000 1.00000 1.00000 +0.00000 1.00000 1.00000 +0.00000 1.00000 1.00000 +0.00000 1.00000 1.00000 +0.00000 1.00000 1.00000 +0.00000 1.00000 1.00000 +0.00000 1.00000 1.00000 +0.00000 1.00000 1.00000 +0.00000 1.00000 1.00000 +0.00000 0.00000 1.00000 +0.00000 0.00000 1.00000 +0.00000 0.00000 1.00000 +0.00000 0.00000 1.00000 +0.00000 0.00000 1.00000 +0.00000 0.00000 1.00000 +0.00000 0.00000 1.00000 +0.00000 0.00000 1.00000 +0.00000 0.00000 1.00000 +0.00000 0.00000 1.00000 +0.00000 0.00000 1.00000 +0.00000 0.00000 1.00000 +0.00000 0.00000 1.00000 +0.00000 0.00000 1.00000 +0.00000 0.00000 1.00000 +0.00000 0.00000 1.00000 +0.50196 0.00000 1.00000 +0.50196 0.00000 1.00000 +0.50196 0.00000 1.00000 +0.50196 0.00000 1.00000 +0.50196 0.00000 1.00000 +0.50196 0.00000 1.00000 +0.50196 0.00000 1.00000 +0.50196 0.00000 1.00000 +0.50196 0.00000 1.00000 +0.50196 0.00000 1.00000 +0.50196 0.00000 1.00000 +0.50196 0.00000 1.00000 +0.50196 0.00000 1.00000 +0.50196 0.00000 1.00000 +0.50196 0.00000 1.00000 +0.50196 0.00000 1.00000 +1.00000 0.00000 0.86275 +1.00000 0.00000 0.86275 +1.00000 0.00000 0.86275 +1.00000 0.00000 0.86275 +1.00000 0.00000 0.86275 +1.00000 0.00000 0.86275 +1.00000 0.00000 0.86275 +1.00000 0.00000 0.86275 +1.00000 0.00000 0.86275 +1.00000 0.00000 0.86275 +1.00000 0.00000 0.86275 +1.00000 0.00000 0.86275 +1.00000 0.00000 0.86275 +1.00000 0.00000 0.86275 +1.00000 0.00000 0.86275 +1.00000 0.00000 0.86275 +1.00000 0.00000 0.70588 +1.00000 0.00000 0.70588 +1.00000 0.00000 0.70588 +1.00000 0.00000 0.70588 +1.00000 0.00000 0.70588 +1.00000 0.00000 0.70588 +1.00000 0.00000 0.70588 +1.00000 0.00000 0.70588 +1.00000 0.00000 0.70588 +1.00000 0.00000 0.70588 +1.00000 0.00000 0.70588 +1.00000 0.00000 0.70588 +1.00000 0.00000 0.70588 +1.00000 0.00000 0.70588 +1.00000 0.00000 0.70588 +1.00000 0.00000 0.70588 +1.00000 0.00000 0.50196 +1.00000 0.00000 0.50196 +1.00000 0.00000 0.50196 +1.00000 0.00000 0.50196 +1.00000 0.00000 0.50196 +1.00000 0.00000 0.50196 +1.00000 0.00000 0.50196 +1.00000 0.00000 0.50196 +1.00000 0.00000 0.50196 +1.00000 0.00000 0.50196 +1.00000 0.00000 0.50196 +1.00000 0.00000 0.50196 +1.00000 0.00000 0.50196 +1.00000 0.00000 0.50196 +1.00000 0.00000 0.50196 +1.00000 0.00000 0.50196 +1.00000 0.00000 0.25098 +1.00000 0.00000 0.25098 +1.00000 0.00000 0.25098 +1.00000 0.00000 0.25098 +1.00000 0.00000 0.25098 +1.00000 0.00000 0.25098 +1.00000 0.00000 0.25098 +1.00000 0.00000 0.25098 +1.00000 0.00000 0.25098 +1.00000 0.00000 0.25098 +1.00000 0.00000 0.25098 +1.00000 0.00000 0.25098 +1.00000 0.00000 0.25098 +1.00000 0.00000 0.25098 +1.00000 0.00000 0.25098 +1.00000 0.00000 0.25098 +1.00000 0.00000 0.00000 +1.00000 0.00000 0.00000 +1.00000 0.00000 0.00000 +1.00000 0.00000 0.00000 +1.00000 0.00000 0.00000 +1.00000 0.00000 0.00000 +1.00000 0.00000 0.00000 +1.00000 0.00000 0.00000 +1.00000 0.00000 0.00000 +1.00000 0.00000 0.00000 +1.00000 0.00000 0.00000 +1.00000 0.00000 0.00000 +1.00000 0.00000 0.00000 +1.00000 0.00000 0.00000 +1.00000 0.00000 0.00000 +1.00000 0.00000 0.00000 +0.86275 0.74510 0.74510 +0.86275 0.74510 0.74510 +0.86275 0.74510 0.74510 +0.86275 0.74510 0.74510 +0.86275 0.74510 0.74510 +0.86667 0.74510 0.74510 +0.86667 0.74510 0.74510 +0.86667 0.74510 0.74510 +0.86667 0.74510 0.74510 +0.86667 0.74510 0.74510 +0.87059 0.74510 0.74510 +0.87059 0.74510 0.74510 +0.87059 0.74510 0.74510 +0.87059 0.74510 0.74510 +0.87059 0.74510 0.74510 +0.87451 0.74510 0.74510 +0.86275 0.86275 0.86275 +0.86275 0.86275 0.86275 +0.86275 0.86275 0.86275 +0.86275 0.86275 0.86275 +0.86275 0.86275 0.86275 +0.86275 0.86275 0.86275 +0.86275 0.86275 0.86275 +0.86275 0.86275 0.86275 +0.86275 0.86275 0.86275 +0.86275 0.86275 0.86275 +0.86275 0.86275 0.86275 +0.86275 0.86275 0.86275 +0.86275 0.86275 0.86275 +0.86275 0.86275 0.86275 +0.86275 0.86275 0.86275 +0.86275 0.86275 0.86275 +1.00000 1.00000 1.00000 +1.00000 1.00000 1.00000 +1.00000 1.00000 1.00000 +1.00000 1.00000 1.00000 +1.00000 1.00000 1.00000 +1.00000 1.00000 1.00000 +1.00000 1.00000 1.00000 +1.00000 1.00000 1.00000 +1.00000 1.00000 1.00000 +1.00000 1.00000 1.00000 +1.00000 1.00000 1.00000 +1.00000 1.00000 1.00000 +1.00000 1.00000 1.00000 +1.00000 1.00000 1.00000 +1.00000 1.00000 1.00000 +1.00000 1.00000 1.00000 diff --git a/vendor/x11iraf/ximtool/luts/idl14.lut b/vendor/x11iraf/ximtool/luts/idl14.lut new file mode 100644 index 00000000..b253b2fc --- /dev/null +++ b/vendor/x11iraf/ximtool/luts/idl14.lut @@ -0,0 +1,256 @@ +0.00000 0.00000 0.00000 +0.00000 0.16471 0.00000 +0.00000 0.33333 0.00000 +0.00000 0.49804 0.00000 +0.00000 0.66667 0.00000 +0.00000 0.83137 0.00000 +0.00000 1.00000 0.00000 +0.00000 0.96471 0.00000 +0.00000 0.92549 0.00000 +0.00000 0.88627 0.00000 +0.00000 0.84706 0.00000 +0.00000 0.80784 0.00000 +0.00000 0.77255 0.00000 +0.00000 0.73333 0.00000 +0.00000 0.69412 0.00000 +0.00000 0.65490 0.00000 +0.00000 0.61569 0.00000 +0.00000 0.58039 0.00000 +0.00000 0.54118 0.00000 +0.00000 0.50196 0.00000 +0.00000 0.46275 0.00000 +0.00000 0.42353 0.00000 +0.00000 0.38824 0.00000 +0.00000 0.34902 0.00000 +0.00000 0.30980 0.00000 +0.00000 0.27059 0.00000 +0.00000 0.23137 0.00000 +0.00000 0.19608 0.00000 +0.00000 0.15686 0.00000 +0.00000 0.11765 0.00000 +0.00000 0.07843 0.00000 +0.00000 0.03922 0.00000 +0.00000 0.00000 0.00000 +0.00000 0.00000 0.03137 +0.00000 0.00000 0.06275 +0.00000 0.00000 0.09412 +0.00000 0.00000 0.12549 +0.00000 0.00000 0.16078 +0.00000 0.00000 0.19216 +0.00000 0.00000 0.22353 +0.00000 0.00000 0.25490 +0.00000 0.00000 0.29020 +0.00000 0.00000 0.32157 +0.00000 0.00000 0.35294 +0.00000 0.00000 0.38431 +0.00000 0.00000 0.41569 +0.00000 0.00000 0.45098 +0.00000 0.00000 0.48235 +0.00000 0.00000 0.51373 +0.00000 0.00000 0.54510 +0.00000 0.00000 0.58039 +0.00000 0.00000 0.61176 +0.00000 0.00000 0.64314 +0.00000 0.00000 0.67451 +0.00000 0.00000 0.70588 +0.00000 0.00000 0.74118 +0.00000 0.00000 0.77255 +0.00000 0.00000 0.80392 +0.00000 0.00000 0.83529 +0.00000 0.00000 0.87059 +0.00000 0.00000 0.90196 +0.00000 0.00000 0.93333 +0.00000 0.00000 0.96471 +0.00000 0.00000 1.00000 +0.00000 0.00000 0.00000 +0.02745 0.00000 0.01961 +0.05882 0.00000 0.03922 +0.09020 0.00000 0.05882 +0.12157 0.00000 0.08235 +0.15294 0.00000 0.10196 +0.18431 0.00000 0.12157 +0.21569 0.00000 0.14510 +0.24706 0.00000 0.16471 +0.27451 0.00000 0.18431 +0.30588 0.00000 0.20784 +0.33725 0.00000 0.22745 +0.36863 0.00000 0.24706 +0.40000 0.00000 0.27059 +0.43137 0.00000 0.29020 +0.46275 0.00000 0.30980 +0.49412 0.00000 0.33333 +0.52549 0.00000 0.34902 +0.55686 0.00000 0.36863 +0.59216 0.00000 0.38431 +0.62353 0.00000 0.40392 +0.65882 0.00000 0.42353 +0.69020 0.00000 0.43922 +0.72157 0.00000 0.45882 +0.75686 0.00000 0.47451 +0.78824 0.00000 0.49412 +0.82353 0.00000 0.51373 +0.85490 0.00000 0.52941 +0.88627 0.00000 0.54902 +0.92157 0.00000 0.56471 +0.95294 0.00000 0.58431 +0.98824 0.00000 0.60392 +0.00000 0.00000 0.00000 +0.00392 0.00000 0.00000 +0.00784 0.00000 0.00000 +0.01176 0.00000 0.00000 +0.01569 0.00000 0.00000 +0.01961 0.00000 0.00000 +0.02353 0.00000 0.00000 +0.02745 0.00000 0.00000 +0.03137 0.00000 0.00000 +0.03529 0.00000 0.00000 +0.03922 0.00000 0.00000 +0.04314 0.00000 0.00000 +0.04706 0.00000 0.00000 +0.05490 0.00000 0.00000 +0.06275 0.00000 0.00000 +0.07059 0.00000 0.00000 +0.07843 0.00000 0.00000 +0.09020 0.00000 0.00000 +0.09804 0.00000 0.00000 +0.10588 0.00000 0.00000 +0.11373 0.00000 0.00000 +0.12549 0.00000 0.00000 +0.13333 0.00000 0.00000 +0.14118 0.00000 0.00000 +0.14902 0.00000 0.00000 +0.16078 0.00000 0.00000 +0.17255 0.00000 0.00000 +0.18431 0.00000 0.00000 +0.19608 0.00000 0.00000 +0.20784 0.00000 0.00000 +0.21961 0.00000 0.00000 +0.23137 0.00000 0.00000 +0.24706 0.00000 0.00000 +0.25882 0.00000 0.00000 +0.27059 0.00000 0.00000 +0.28235 0.00000 0.00000 +0.29412 0.00000 0.00000 +0.30588 0.00000 0.00000 +0.32157 0.00000 0.00392 +0.33333 0.00000 0.00392 +0.34902 0.00000 0.00392 +0.36471 0.00000 0.00392 +0.38039 0.00000 0.00392 +0.39608 0.00000 0.00392 +0.41176 0.00000 0.00392 +0.42353 0.00000 0.00392 +0.43922 0.00000 0.00392 +0.45490 0.00000 0.00392 +0.47059 0.00000 0.00392 +0.48627 0.00000 0.00392 +0.50196 0.00392 0.00392 +0.51373 0.00392 0.00392 +0.52941 0.00392 0.00392 +0.54510 0.00392 0.00392 +0.56078 0.00392 0.00392 +0.57647 0.00392 0.00392 +0.59216 0.00392 0.00392 +0.60784 0.00392 0.00392 +0.62353 0.00392 0.00392 +0.63922 0.00392 0.00392 +0.65490 0.00392 0.00392 +0.67059 0.00392 0.00392 +0.68627 0.00392 0.00392 +0.69804 0.00392 0.00392 +0.70980 0.00392 0.00392 +0.72549 0.00392 0.00392 +0.73725 0.00392 0.00392 +0.75294 0.00392 0.00392 +0.76471 0.00392 0.00392 +0.77647 0.00392 0.00392 +0.79216 0.00392 0.00392 +0.80392 0.00392 0.00392 +0.81961 0.00392 0.00392 +0.83137 0.00392 0.00392 +0.84706 0.00392 0.00784 +0.85490 0.00392 0.00784 +0.86275 0.00392 0.00784 +0.87451 0.00392 0.00784 +0.88235 0.00392 0.00784 +0.89020 0.00392 0.00784 +0.90196 0.00392 0.00784 +0.90980 0.00392 0.00784 +0.91765 0.00392 0.00784 +0.92941 0.00392 0.00784 +0.93725 0.00392 0.00784 +0.94510 0.00392 0.00784 +0.95686 0.00784 0.00784 +0.95686 0.00784 0.00784 +0.96078 0.00784 0.00784 +0.96471 0.00784 0.00784 +0.96863 0.00784 0.00784 +0.96863 0.00784 0.00784 +0.97255 0.00784 0.00784 +0.97647 0.00784 0.00784 +0.98039 0.00784 0.00784 +0.98039 0.00784 0.00784 +0.98431 0.00784 0.00784 +0.98824 0.00784 0.00784 +0.99216 0.00784 0.00784 +0.99608 0.00392 0.00784 +0.99608 0.00392 0.00784 +0.99608 0.01176 0.00784 +0.99608 0.01961 0.00784 +0.99608 0.03137 0.00784 +0.99608 0.03922 0.00784 +0.99608 0.04706 0.00784 +0.99608 0.05882 0.00784 +0.99608 0.06667 0.00784 +0.99608 0.07451 0.00784 +0.99608 0.08627 0.00784 +0.99608 0.09412 0.00784 +0.99608 0.10196 0.00784 +0.99608 0.11373 0.00784 +0.99608 0.12157 0.00784 +0.99608 0.12941 0.00784 +0.99608 0.14118 0.00784 +0.99608 0.14118 0.00784 +0.99608 0.14902 0.01176 +0.99608 0.15686 0.01569 +0.99608 0.16471 0.01961 +1.00000 0.17647 0.02745 +1.00000 0.18824 0.03529 +1.00000 0.20000 0.04706 +1.00000 0.21176 0.05490 +1.00000 0.22745 0.06667 +1.00000 0.23922 0.07843 +1.00000 0.25098 0.09020 +1.00000 0.26275 0.10588 +1.00000 0.27451 0.11765 +1.00000 0.28627 0.13333 +1.00000 0.30196 0.15294 +1.00000 0.32157 0.17255 +1.00000 0.34118 0.19216 +1.00000 0.36078 0.21569 +1.00000 0.37647 0.23529 +1.00000 0.39216 0.25490 +1.00000 0.40784 0.27843 +1.00000 0.42353 0.29804 +1.00000 0.44314 0.32157 +1.00000 0.46667 0.34902 +1.00000 0.49020 0.38039 +1.00000 0.51373 0.40784 +1.00000 0.54118 0.43922 +1.00000 0.56471 0.47059 +1.00000 0.59216 0.50196 +1.00000 0.61569 0.53333 +1.00000 0.64314 0.56863 +1.00000 0.67059 0.60000 +1.00000 0.69804 0.63529 +1.00000 0.72549 0.67059 +1.00000 0.75686 0.70588 +1.00000 0.78431 0.74118 +1.00000 0.81569 0.77647 +1.00000 0.84314 0.81176 +1.00000 0.87451 0.85098 +1.00000 0.89804 0.87843 +1.00000 0.92157 0.90980 +1.00000 0.94902 0.93725 +1.00000 0.97255 0.96863 +1.00000 1.00000 1.00000 diff --git a/vendor/x11iraf/ximtool/luts/idl15.lut b/vendor/x11iraf/ximtool/luts/idl15.lut new file mode 100644 index 00000000..7fbbdc5e --- /dev/null +++ b/vendor/x11iraf/ximtool/luts/idl15.lut @@ -0,0 +1,256 @@ +0.00000 0.00000 0.00000 +0.07059 0.00392 0.00392 +0.14118 0.00784 0.01176 +0.21176 0.01176 0.01961 +0.28235 0.01569 0.02745 +0.35294 0.01961 0.03529 +0.42353 0.02353 0.04314 +0.49804 0.02745 0.05098 +0.56863 0.03137 0.05882 +0.63922 0.03529 0.06667 +0.70980 0.03922 0.07451 +0.78039 0.04314 0.08235 +0.85098 0.04706 0.09020 +0.92157 0.05098 0.09804 +0.99608 0.05490 0.10588 +0.97647 0.05882 0.11373 +0.95686 0.06275 0.12157 +0.93725 0.06667 0.12941 +0.91765 0.07059 0.13725 +0.89804 0.07451 0.14510 +0.87451 0.07843 0.15294 +0.85490 0.08235 0.16078 +0.83529 0.08627 0.16863 +0.81569 0.09020 0.17647 +0.79608 0.09412 0.18431 +0.77255 0.09804 0.19216 +0.75294 0.10196 0.20000 +0.73333 0.10588 0.20784 +0.71373 0.10980 0.21569 +0.69412 0.11373 0.22353 +0.67451 0.11765 0.23137 +0.65098 0.12157 0.23922 +0.63137 0.12549 0.24706 +0.61176 0.12941 0.25490 +0.59216 0.13333 0.26275 +0.57255 0.13725 0.27059 +0.54902 0.14118 0.27843 +0.52941 0.14510 0.28627 +0.50980 0.14902 0.29412 +0.49020 0.15294 0.30196 +0.47059 0.15686 0.30980 +0.45098 0.16078 0.31765 +0.42745 0.16471 0.32549 +0.40784 0.16863 0.33333 +0.38824 0.17255 0.34118 +0.36863 0.17647 0.34902 +0.34902 0.18039 0.35686 +0.32549 0.18431 0.36471 +0.30588 0.18824 0.37255 +0.28627 0.19216 0.38039 +0.26667 0.19608 0.38824 +0.24706 0.20000 0.39608 +0.22745 0.20392 0.40392 +0.20392 0.20784 0.41176 +0.18431 0.21176 0.41961 +0.16471 0.21569 0.42745 +0.14510 0.21961 0.43529 +0.12549 0.22353 0.44314 +0.10196 0.22745 0.45098 +0.08235 0.23137 0.45882 +0.06275 0.23529 0.46667 +0.04314 0.23922 0.47451 +0.02353 0.24314 0.48235 +0.00000 0.24706 0.49020 +0.25098 0.25098 0.49804 +0.25490 0.25490 0.50588 +0.25882 0.25882 0.51373 +0.26275 0.26275 0.52157 +0.26667 0.26667 0.52941 +0.27059 0.27059 0.53725 +0.27451 0.27451 0.54510 +0.27843 0.27843 0.55294 +0.28235 0.28235 0.56078 +0.28627 0.28627 0.56863 +0.29020 0.29020 0.57647 +0.29412 0.29412 0.58431 +0.29804 0.29804 0.59216 +0.30196 0.30196 0.60000 +0.30588 0.30588 0.60784 +0.30980 0.30980 0.61569 +0.31373 0.31373 0.62353 +0.31765 0.31765 0.63137 +0.32157 0.32157 0.63922 +0.32549 0.32549 0.64706 +0.32941 0.32941 0.65490 +0.33333 0.33333 0.66275 +0.33725 0.33725 0.67059 +0.34118 0.34118 0.67843 +0.34510 0.34510 0.68627 +0.34902 0.34902 0.69412 +0.35294 0.35294 0.70196 +0.35686 0.35686 0.70980 +0.36078 0.36078 0.71765 +0.36471 0.36471 0.72549 +0.36863 0.36863 0.73333 +0.37255 0.37255 0.74118 +0.37647 0.37647 0.74902 +0.38039 0.38039 0.75686 +0.38431 0.38431 0.76471 +0.38824 0.38824 0.77255 +0.39216 0.39216 0.78039 +0.39608 0.39608 0.78824 +0.40000 0.40000 0.79608 +0.40392 0.40392 0.80392 +0.40784 0.40784 0.81176 +0.41176 0.41176 0.81961 +0.41569 0.41569 0.82745 +0.41961 0.41961 0.83529 +0.42353 0.42353 0.84314 +0.42745 0.42745 0.85098 +0.43137 0.43137 0.85882 +0.43529 0.43529 0.86667 +0.43922 0.43922 0.87451 +0.44314 0.44314 0.88235 +0.44706 0.44706 0.89020 +0.45098 0.45098 0.89804 +0.45490 0.45490 0.90588 +0.45882 0.45882 0.91373 +0.46275 0.46275 0.92157 +0.46667 0.46667 0.92941 +0.47059 0.47059 0.93725 +0.47451 0.47451 0.94510 +0.47843 0.47843 0.95294 +0.48235 0.48235 0.96078 +0.48627 0.48627 0.96863 +0.49020 0.49020 0.97647 +0.49412 0.49412 0.98431 +0.49804 0.49804 0.99216 +0.50196 0.50196 1.00000 +0.50588 0.50588 0.98431 +0.50980 0.50980 0.96863 +0.51373 0.51373 0.95294 +0.51765 0.51765 0.93333 +0.52157 0.52157 0.91765 +0.52549 0.52549 0.90196 +0.52941 0.52941 0.88627 +0.53333 0.53333 0.86667 +0.53725 0.53725 0.85098 +0.54118 0.54118 0.83529 +0.54510 0.54510 0.81961 +0.54902 0.54902 0.80000 +0.55294 0.55294 0.78431 +0.55686 0.55686 0.76863 +0.56078 0.56078 0.75294 +0.56471 0.56471 0.73333 +0.56863 0.56863 0.71765 +0.57255 0.57255 0.70196 +0.57647 0.57647 0.68627 +0.58039 0.58039 0.66667 +0.58431 0.58431 0.65098 +0.58824 0.58824 0.63529 +0.59216 0.59216 0.61961 +0.59608 0.59608 0.60000 +0.60000 0.60000 0.58431 +0.60392 0.60392 0.56863 +0.60784 0.60784 0.55294 +0.61176 0.61176 0.53333 +0.61569 0.61569 0.51765 +0.61961 0.61961 0.50196 +0.62353 0.62353 0.48627 +0.62745 0.62745 0.46667 +0.63137 0.63137 0.45098 +0.63529 0.63529 0.43529 +0.63922 0.63922 0.41961 +0.64314 0.64314 0.40000 +0.64706 0.64706 0.38431 +0.65098 0.65098 0.36863 +0.65490 0.65490 0.35294 +0.65882 0.65882 0.33333 +0.66275 0.66275 0.31765 +0.66667 0.66667 0.30196 +0.67059 0.67059 0.28627 +0.67451 0.67451 0.26667 +0.67843 0.67843 0.25098 +0.68235 0.68235 0.23529 +0.68627 0.68627 0.21961 +0.69020 0.69020 0.20000 +0.69412 0.69412 0.18431 +0.69804 0.69804 0.16863 +0.70196 0.70196 0.15294 +0.70588 0.70588 0.13333 +0.70980 0.70980 0.11765 +0.71373 0.71373 0.10196 +0.71765 0.71765 0.08627 +0.72157 0.72157 0.06667 +0.72549 0.72549 0.05098 +0.72941 0.72941 0.03529 +0.73333 0.73333 0.01961 +0.73725 0.73725 0.00000 +0.74118 0.74118 0.01176 +0.74510 0.74510 0.02745 +0.74902 0.74902 0.04314 +0.75294 0.75294 0.05882 +0.75686 0.75686 0.07451 +0.76078 0.76078 0.08627 +0.76471 0.76471 0.10196 +0.76863 0.76863 0.11765 +0.77255 0.77255 0.13333 +0.77647 0.77647 0.14902 +0.78039 0.78039 0.16078 +0.78431 0.78431 0.17647 +0.78824 0.78824 0.19216 +0.79216 0.79216 0.20784 +0.79608 0.79608 0.22353 +0.80000 0.80000 0.23529 +0.80392 0.80392 0.25098 +0.80784 0.80784 0.26667 +0.81176 0.81176 0.28235 +0.81569 0.81569 0.29804 +0.81961 0.81961 0.30980 +0.82353 0.82353 0.32549 +0.82745 0.82745 0.34118 +0.83137 0.83137 0.35686 +0.83529 0.83529 0.37255 +0.83922 0.83922 0.38431 +0.84314 0.84314 0.40000 +0.84706 0.84706 0.41569 +0.85098 0.85098 0.43137 +0.85490 0.85490 0.44706 +0.85882 0.85882 0.45882 +0.86275 0.86275 0.47451 +0.86667 0.86667 0.49020 +0.87059 0.87059 0.50588 +0.87451 0.87451 0.52157 +0.87843 0.87843 0.53725 +0.88235 0.88235 0.54902 +0.88627 0.88627 0.56471 +0.89020 0.89020 0.58039 +0.89412 0.89412 0.59608 +0.89804 0.89804 0.61176 +0.90196 0.90196 0.62353 +0.90588 0.90588 0.63922 +0.90980 0.90980 0.65490 +0.91373 0.91373 0.67059 +0.91765 0.91765 0.68627 +0.92157 0.92157 0.69804 +0.92549 0.92549 0.71373 +0.92941 0.92941 0.72941 +0.93333 0.93333 0.74510 +0.93725 0.93725 0.76078 +0.94118 0.94118 0.77255 +0.94510 0.94510 0.78824 +0.94902 0.94902 0.80392 +0.95294 0.95294 0.81961 +0.95686 0.95686 0.83529 +0.96078 0.96078 0.84706 +0.96471 0.96471 0.86275 +0.96863 0.96863 0.87843 +0.97255 0.97255 0.89412 +0.97647 0.97647 0.90980 +0.98039 0.98039 0.92157 +0.98431 0.98431 0.93725 +0.98824 0.98824 0.95294 +0.99216 0.99216 0.96863 +0.99608 0.99608 0.98431 +1.00000 1.00000 1.00000 diff --git a/vendor/x11iraf/ximtool/luts/idl2.lut b/vendor/x11iraf/ximtool/luts/idl2.lut new file mode 100644 index 00000000..beb24271 --- /dev/null +++ b/vendor/x11iraf/ximtool/luts/idl2.lut @@ -0,0 +1,256 @@ +0.00000 0.00000 0.00000 +0.00000 0.14118 0.00000 +0.00000 0.28235 0.00000 +0.00000 0.29412 0.00000 +0.00000 0.30980 0.00000 +0.00000 0.32157 0.00000 +0.00000 0.33725 0.00000 +0.00000 0.35294 0.00000 +0.00000 0.36471 0.00000 +0.00000 0.38039 0.00000 +0.00000 0.39216 0.00000 +0.00000 0.40784 0.00000 +0.00000 0.42353 0.00000 +0.00000 0.45882 0.00000 +0.00000 0.49412 0.00000 +0.00000 0.52941 0.00000 +0.00000 0.56471 0.00000 +0.00000 0.60000 0.00000 +0.00000 0.63529 0.00000 +0.00000 0.67059 0.00000 +0.00000 0.70588 0.00000 +0.00000 0.74118 0.00000 +0.00000 0.77647 0.00000 +0.00000 0.81176 0.00000 +0.00000 0.84706 0.00000 +0.00000 0.88235 0.00000 +0.00000 0.91765 0.00000 +0.00000 0.95294 0.00000 +0.00000 0.98824 0.00000 +0.02353 0.97647 0.00000 +0.04706 0.96471 0.00000 +0.07059 0.95294 0.00000 +0.09412 0.94118 0.00000 +0.11765 0.91765 0.00000 +0.14118 0.89412 0.00000 +0.16471 0.87059 0.00000 +0.18824 0.84706 0.00000 +0.21176 0.82353 0.00000 +0.23529 0.80000 0.00000 +0.25882 0.77647 0.00000 +0.28235 0.75294 0.00000 +0.30588 0.72941 0.00000 +0.32941 0.70588 0.00000 +0.35294 0.68235 0.00000 +0.37647 0.65882 0.00000 +0.40000 0.63529 0.00000 +0.42353 0.61176 0.00000 +0.44706 0.58824 0.00000 +0.47059 0.56471 0.00000 +0.49412 0.54118 0.00000 +0.51765 0.51765 0.00000 +0.54118 0.49412 0.00000 +0.56471 0.47059 0.00000 +0.58824 0.44706 0.00000 +0.61176 0.42353 0.00000 +0.63529 0.40000 0.00000 +0.65882 0.37647 0.00000 +0.68235 0.35294 0.00000 +0.70588 0.32941 0.00000 +0.72941 0.30588 0.00000 +0.75294 0.28235 0.00000 +0.77647 0.25882 0.00000 +0.80000 0.23529 0.00000 +0.82353 0.21176 0.00000 +0.84706 0.18824 0.00000 +0.87059 0.16471 0.00000 +0.89412 0.14118 0.00000 +0.91765 0.11765 0.00000 +0.94118 0.09412 0.00000 +0.95294 0.07059 0.00000 +0.96471 0.04706 0.00000 +0.97647 0.02353 0.00000 +0.98824 0.00000 0.00000 +0.98824 0.00000 0.00000 +0.98824 0.00000 0.00000 +0.98824 0.00000 0.00000 +0.98824 0.00000 0.00392 +0.98431 0.00000 0.01176 +0.98039 0.00000 0.01961 +0.97647 0.00000 0.02745 +0.97255 0.00000 0.03529 +0.97255 0.00000 0.03922 +0.97255 0.00000 0.04706 +0.97255 0.00000 0.05490 +0.97255 0.00000 0.06275 +0.96863 0.00000 0.07059 +0.96471 0.00000 0.07843 +0.96078 0.00000 0.08627 +0.95686 0.00000 0.09804 +0.95294 0.00000 0.10588 +0.94902 0.00000 0.11373 +0.94510 0.00000 0.12157 +0.94118 0.00000 0.13333 +0.94118 0.00000 0.13725 +0.93725 0.00000 0.14510 +0.93333 0.00000 0.15294 +0.92941 0.00000 0.16078 +0.92549 0.00000 0.16863 +0.92549 0.00000 0.17647 +0.92549 0.00000 0.18431 +0.92549 0.00000 0.19608 +0.92157 0.00000 0.20392 +0.91765 0.00000 0.21176 +0.91373 0.00000 0.21961 +0.90980 0.00000 0.23137 +0.90588 0.00000 0.23922 +0.90196 0.00000 0.24706 +0.89804 0.00000 0.25490 +0.89412 0.00000 0.26275 +0.89412 0.00000 0.26667 +0.89412 0.00000 0.27451 +0.89412 0.00000 0.28235 +0.89412 0.00000 0.29020 +0.89020 0.00000 0.29804 +0.88627 0.00000 0.30588 +0.88235 0.00000 0.31373 +0.87843 0.00000 0.32549 +0.87451 0.00000 0.33333 +0.87059 0.00000 0.34118 +0.86667 0.00000 0.34902 +0.86275 0.00392 0.36078 +0.85882 0.00392 0.36863 +0.85490 0.00392 0.37647 +0.85098 0.00392 0.38431 +0.84706 0.00000 0.39608 +0.84706 0.00000 0.40000 +0.84706 0.00000 0.40784 +0.84706 0.00000 0.41569 +0.84706 0.00000 0.42353 +0.84314 0.00000 0.43137 +0.83922 0.00000 0.43922 +0.83529 0.00000 0.44706 +0.83137 0.00000 0.45490 +0.82745 0.00000 0.46275 +0.82353 0.00000 0.47059 +0.81961 0.00000 0.47843 +0.81569 0.00000 0.49020 +0.81176 0.00000 0.49804 +0.80784 0.00000 0.50588 +0.80392 0.00000 0.51373 +0.80000 0.00000 0.52549 +0.80000 0.00000 0.52941 +0.80000 0.00000 0.53725 +0.80000 0.00000 0.54510 +0.80000 0.00000 0.55294 +0.79608 0.00000 0.56078 +0.79216 0.00000 0.56863 +0.78824 0.00000 0.57647 +0.78431 0.00000 0.58824 +0.78039 0.00000 0.59608 +0.77647 0.00000 0.60392 +0.77255 0.00000 0.61176 +0.76863 0.00000 0.62353 +0.76863 0.00000 0.62745 +0.76863 0.00000 0.63529 +0.76863 0.00000 0.63922 +0.76863 0.00000 0.64706 +0.76471 0.00000 0.65490 +0.76078 0.00000 0.66275 +0.75686 0.00000 0.67059 +0.75294 0.00000 0.68235 +0.74902 0.00000 0.69020 +0.74510 0.00000 0.69804 +0.74118 0.00000 0.70588 +0.73725 0.00000 0.71765 +0.73333 0.00000 0.72549 +0.72941 0.00000 0.73333 +0.72549 0.00000 0.74118 +0.72157 0.00000 0.75294 +0.72157 0.00000 0.75686 +0.72157 0.00000 0.76471 +0.72157 0.00000 0.77255 +0.72157 0.00000 0.78039 +0.71765 0.00000 0.78824 +0.71373 0.00000 0.79608 +0.70980 0.00000 0.80392 +0.70588 0.00000 0.81569 +0.70196 0.00000 0.82353 +0.69804 0.00000 0.83137 +0.69412 0.00000 0.83922 +0.69020 0.00000 0.84706 +0.69020 0.00000 0.85098 +0.69020 0.00000 0.85882 +0.69020 0.00000 0.86667 +0.69020 0.00000 0.87451 +0.68627 0.00000 0.88235 +0.68235 0.00000 0.89020 +0.67843 0.00000 0.89804 +0.67451 0.00000 0.90980 +0.67059 0.00000 0.91765 +0.66667 0.00000 0.92549 +0.66275 0.00000 0.93333 +0.65882 0.00000 0.94510 +0.65490 0.00000 0.95294 +0.65098 0.00000 0.96078 +0.64706 0.00000 0.96863 +0.64314 0.00000 0.98039 +0.64314 0.00000 0.98431 +0.64314 0.00000 0.98824 +0.64314 0.00000 0.99216 +0.64314 0.00000 1.00000 +0.63922 0.00000 1.00000 +0.63529 0.00000 1.00000 +0.63137 0.00000 1.00000 +0.62745 0.00000 1.00000 +0.62353 0.00000 1.00000 +0.61961 0.00000 1.00000 +0.61569 0.00000 1.00000 +0.61176 0.00000 1.00000 +0.60784 0.00000 1.00000 +0.60392 0.00000 1.00000 +0.60000 0.00000 1.00000 +0.59608 0.00000 1.00000 +0.59608 0.00000 1.00000 +0.59608 0.00000 1.00000 +0.59608 0.00000 1.00000 +0.59608 0.00000 1.00000 +0.59216 0.00000 1.00000 +0.58824 0.00000 1.00000 +0.58431 0.00000 1.00000 +0.58039 0.00000 1.00000 +0.59216 0.03137 1.00000 +0.60392 0.06275 1.00000 +0.61569 0.09412 1.00000 +0.62745 0.12549 1.00000 +0.63922 0.15686 1.00000 +0.65098 0.18824 1.00000 +0.66275 0.21961 1.00000 +0.67451 0.25098 1.00000 +0.69020 0.28235 1.00000 +0.70588 0.31373 1.00000 +0.72157 0.34510 1.00000 +0.73725 0.37647 1.00000 +0.74902 0.40784 1.00000 +0.76078 0.43922 1.00000 +0.77255 0.47059 1.00000 +0.78431 0.50196 1.00000 +0.79608 0.52941 1.00000 +0.80784 0.55686 1.00000 +0.81961 0.58431 1.00000 +0.83137 0.61176 1.00000 +0.84314 0.64314 1.00000 +0.85490 0.67451 1.00000 +0.86667 0.70588 1.00000 +0.87843 0.73725 1.00000 +0.89412 0.76863 1.00000 +0.90980 0.80000 1.00000 +0.92549 0.83137 1.00000 +0.94118 0.86275 1.00000 +0.95294 0.89412 1.00000 +0.96471 0.92549 1.00000 +0.97647 0.95686 1.00000 +0.98824 0.98824 1.00000 +0.99216 0.99216 1.00000 +0.99608 0.99608 1.00000 +1.00000 1.00000 1.00000 diff --git a/vendor/x11iraf/ximtool/luts/idl4.lut b/vendor/x11iraf/ximtool/luts/idl4.lut new file mode 100644 index 00000000..fad325f4 --- /dev/null +++ b/vendor/x11iraf/ximtool/luts/idl4.lut @@ -0,0 +1,256 @@ +0.00000 0.00000 0.00000 +0.00000 0.00000 0.00784 +0.00000 0.00000 0.01569 +0.00000 0.00000 0.02353 +0.00000 0.00000 0.03137 +0.00000 0.00000 0.03922 +0.00000 0.00000 0.04706 +0.00000 0.00000 0.05490 +0.00000 0.00000 0.06275 +0.00000 0.00000 0.07059 +0.00000 0.00000 0.07843 +0.00000 0.00000 0.08627 +0.00000 0.00000 0.09804 +0.00000 0.00000 0.10588 +0.00000 0.00000 0.11373 +0.00000 0.00000 0.12157 +0.00000 0.00000 0.12941 +0.00000 0.00000 0.13725 +0.00000 0.00000 0.14510 +0.00000 0.00000 0.15294 +0.00000 0.00000 0.16078 +0.00000 0.00000 0.16863 +0.00000 0.00000 0.17647 +0.00000 0.00000 0.18431 +0.00000 0.00000 0.19608 +0.00000 0.00000 0.20392 +0.00000 0.00000 0.21176 +0.00000 0.00000 0.21961 +0.00000 0.00000 0.22745 +0.00000 0.00000 0.23529 +0.00000 0.00000 0.24314 +0.00000 0.00000 0.25098 +0.00000 0.00000 0.25882 +0.00000 0.01176 0.26667 +0.00000 0.02353 0.27451 +0.00000 0.03529 0.28235 +0.00000 0.04706 0.29412 +0.00000 0.05882 0.30196 +0.00000 0.07059 0.30980 +0.00000 0.08235 0.31765 +0.00000 0.09804 0.32549 +0.00000 0.10980 0.33333 +0.00000 0.12157 0.34118 +0.00000 0.13333 0.34902 +0.00000 0.14510 0.35686 +0.00000 0.15686 0.36471 +0.00000 0.16863 0.37255 +0.00000 0.18039 0.38039 +0.00000 0.19608 0.39216 +0.00000 0.20784 0.39216 +0.00000 0.21961 0.39216 +0.00000 0.23137 0.39216 +0.00000 0.24314 0.39216 +0.00000 0.25490 0.39216 +0.00000 0.26667 0.39216 +0.00000 0.27843 0.39216 +0.00000 0.29412 0.39216 +0.00000 0.30588 0.39216 +0.00000 0.31765 0.39216 +0.00000 0.32941 0.39216 +0.00000 0.34118 0.39216 +0.00000 0.35294 0.39216 +0.00000 0.36471 0.39216 +0.00000 0.37647 0.39216 +0.00000 0.39216 0.39216 +0.00000 0.40392 0.39216 +0.00000 0.41569 0.39216 +0.00000 0.42745 0.39216 +0.00000 0.43922 0.39216 +0.00000 0.45098 0.39216 +0.00000 0.46275 0.39216 +0.00000 0.47451 0.39216 +0.00000 0.49020 0.39216 +0.00000 0.50196 0.39216 +0.00000 0.51373 0.39216 +0.00000 0.52549 0.39216 +0.00000 0.53725 0.39216 +0.00000 0.54902 0.39216 +0.00000 0.56078 0.39216 +0.00000 0.57255 0.39216 +0.00000 0.58824 0.39216 +0.00000 0.58824 0.37647 +0.00000 0.58824 0.36471 +0.00000 0.58824 0.35294 +0.00000 0.58824 0.34118 +0.00000 0.58824 0.32941 +0.00000 0.58824 0.31765 +0.00000 0.58824 0.30588 +0.00000 0.58824 0.29412 +0.00000 0.58824 0.27843 +0.00000 0.58824 0.26667 +0.00000 0.58824 0.25490 +0.00000 0.58824 0.24314 +0.00000 0.58824 0.23137 +0.00000 0.58824 0.21961 +0.00000 0.58824 0.20784 +0.00000 0.58824 0.19608 +0.00000 0.58431 0.18039 +0.00000 0.58039 0.16863 +0.00000 0.58039 0.15686 +0.00000 0.57647 0.14510 +0.00000 0.57255 0.13333 +0.00000 0.57255 0.12157 +0.00000 0.56863 0.10980 +0.00000 0.56863 0.09804 +0.00000 0.56471 0.08235 +0.00000 0.56078 0.07059 +0.00000 0.56078 0.05882 +0.00000 0.55686 0.04706 +0.00000 0.55294 0.03529 +0.00000 0.55294 0.02353 +0.00000 0.54902 0.01176 +0.00000 0.54902 0.00000 +0.02745 0.53725 0.00000 +0.05882 0.52941 0.00000 +0.08627 0.51765 0.00000 +0.11765 0.50980 0.00000 +0.14510 0.49804 0.00000 +0.17647 0.49020 0.00000 +0.20392 0.47843 0.00000 +0.23529 0.47059 0.00000 +0.26275 0.45882 0.00000 +0.29412 0.45098 0.00000 +0.32157 0.43922 0.00000 +0.35294 0.43137 0.00000 +0.38039 0.41961 0.00000 +0.41176 0.41176 0.00000 +0.43922 0.40000 0.00000 +0.47059 0.39216 0.00000 +0.49020 0.36471 0.00000 +0.50980 0.34118 0.00000 +0.52941 0.31765 0.00000 +0.54902 0.29412 0.00000 +0.56863 0.26667 0.00000 +0.58824 0.24314 0.00000 +0.60784 0.21961 0.00000 +0.62745 0.19608 0.00000 +0.64706 0.16863 0.00000 +0.66667 0.14510 0.00000 +0.68627 0.12157 0.00000 +0.70588 0.09804 0.00000 +0.72549 0.07059 0.00000 +0.74510 0.04706 0.00000 +0.76471 0.02353 0.00000 +0.78431 0.00000 0.00000 +0.78431 0.00784 0.00000 +0.78824 0.01569 0.00000 +0.78824 0.02353 0.00000 +0.79216 0.03529 0.00000 +0.79216 0.04314 0.00000 +0.79608 0.05098 0.00000 +0.79608 0.06275 0.00000 +0.80000 0.07059 0.00000 +0.80000 0.07843 0.00000 +0.80392 0.09020 0.00000 +0.80392 0.09804 0.00000 +0.80784 0.10588 0.00000 +0.80784 0.11373 0.00000 +0.81176 0.12549 0.00000 +0.81176 0.13333 0.00000 +0.81569 0.14118 0.00000 +0.81569 0.15294 0.00000 +0.81961 0.16078 0.00000 +0.81961 0.16863 0.00000 +0.82353 0.18039 0.00000 +0.82353 0.18824 0.00000 +0.82745 0.19608 0.00000 +0.82745 0.20784 0.00000 +0.83137 0.21569 0.00000 +0.83137 0.22353 0.00000 +0.83529 0.23137 0.00000 +0.83529 0.24314 0.00000 +0.83922 0.25098 0.00000 +0.83922 0.25882 0.00000 +0.84314 0.27059 0.00000 +0.84314 0.27843 0.00000 +0.84706 0.28627 0.00000 +0.84706 0.29804 0.00000 +0.85098 0.30588 0.00000 +0.85098 0.31373 0.00000 +0.85490 0.32549 0.00000 +0.85490 0.33333 0.00000 +0.85882 0.34118 0.00000 +0.85882 0.34902 0.00000 +0.86275 0.36078 0.00000 +0.86275 0.36863 0.00000 +0.86667 0.37647 0.00000 +0.86667 0.38824 0.00000 +0.87059 0.39608 0.00000 +0.87059 0.40392 0.00000 +0.87451 0.41569 0.00000 +0.87451 0.42353 0.00000 +0.87843 0.43137 0.00000 +0.87843 0.44314 0.00000 +0.88235 0.45098 0.00000 +0.88235 0.45882 0.00000 +0.88627 0.46667 0.00000 +0.88627 0.47843 0.00000 +0.89020 0.48627 0.00000 +0.89020 0.49412 0.00000 +0.89412 0.50588 0.00000 +0.89412 0.51373 0.00000 +0.89804 0.52157 0.00000 +0.89804 0.53333 0.00000 +0.90196 0.54118 0.00000 +0.90196 0.54902 0.00000 +0.90588 0.55686 0.00000 +0.90588 0.56863 0.00000 +0.90980 0.57647 0.00000 +0.90980 0.58431 0.00000 +0.91373 0.59608 0.00000 +0.91373 0.60392 0.00000 +0.91765 0.61176 0.00000 +0.91765 0.62353 0.00000 +0.92157 0.63137 0.00000 +0.92157 0.63922 0.00000 +0.92549 0.65098 0.00000 +0.92549 0.65882 0.00000 +0.92941 0.66667 0.00000 +0.92941 0.67451 0.00000 +0.93333 0.68627 0.00000 +0.93333 0.69412 0.00000 +0.93725 0.70196 0.00000 +0.93725 0.71373 0.00000 +0.94118 0.72157 0.00000 +0.94118 0.72941 0.00000 +0.94510 0.74118 0.00000 +0.94510 0.74902 0.00000 +0.94902 0.75686 0.00000 +0.94902 0.76863 0.00000 +0.95294 0.77647 0.00000 +0.95294 0.78431 0.00000 +0.95686 0.79216 0.00000 +0.95686 0.80392 0.00000 +0.96078 0.81176 0.00000 +0.96078 0.81961 0.00000 +0.96471 0.83137 0.00000 +0.96471 0.83922 0.00000 +0.96863 0.84706 0.00000 +0.96863 0.85882 0.00000 +0.97255 0.86667 0.00000 +0.97255 0.87451 0.00000 +0.97647 0.88627 0.00000 +0.97647 0.89412 0.00000 +0.98039 0.90196 0.00000 +0.98039 0.90980 0.00000 +0.98431 0.92157 0.00000 +0.98431 0.92941 0.00000 +0.98824 0.93725 0.00000 +0.98824 0.94902 0.00000 +0.99216 0.95686 0.00000 +0.99216 0.96471 0.00000 +0.99608 0.97647 0.00000 +0.99608 0.98431 0.00000 +1.00000 0.99216 0.00000 +1.00000 1.00000 0.00000 diff --git a/vendor/x11iraf/ximtool/luts/idl5.lut b/vendor/x11iraf/ximtool/luts/idl5.lut new file mode 100644 index 00000000..a557730b --- /dev/null +++ b/vendor/x11iraf/ximtool/luts/idl5.lut @@ -0,0 +1,256 @@ +0.00000 0.00000 0.00000 +0.00000 0.00000 0.01961 +0.00000 0.00000 0.03922 +0.00000 0.00000 0.05882 +0.00000 0.00000 0.07843 +0.00000 0.00000 0.10196 +0.00000 0.00000 0.12157 +0.00000 0.00000 0.14118 +0.00000 0.00000 0.16078 +0.00000 0.00000 0.18039 +0.00000 0.00000 0.20392 +0.00000 0.00000 0.22353 +0.00000 0.00000 0.24314 +0.00000 0.00000 0.26275 +0.00000 0.00000 0.28235 +0.00000 0.00000 0.30588 +0.00000 0.00000 0.32549 +0.00000 0.00000 0.34510 +0.00000 0.00000 0.36471 +0.00000 0.00000 0.38431 +0.00000 0.00000 0.40784 +0.00000 0.00000 0.42745 +0.00000 0.00000 0.44706 +0.00000 0.00000 0.46667 +0.00000 0.00000 0.48627 +0.00000 0.00000 0.50980 +0.00000 0.00000 0.52941 +0.00000 0.00000 0.54902 +0.00000 0.00000 0.56863 +0.00000 0.00000 0.58824 +0.00000 0.00000 0.61176 +0.00000 0.00000 0.63137 +0.00000 0.00000 0.65098 +0.00000 0.00000 0.67059 +0.00000 0.00000 0.69020 +0.00000 0.00000 0.71373 +0.00000 0.00000 0.73333 +0.00000 0.00000 0.75294 +0.00000 0.00000 0.77255 +0.00000 0.00000 0.79216 +0.00000 0.00000 0.81569 +0.00000 0.00000 0.83529 +0.00000 0.00000 0.85490 +0.00000 0.00000 0.87451 +0.00000 0.00000 0.89412 +0.00000 0.00000 0.91765 +0.00000 0.00000 0.93725 +0.00000 0.00000 0.95686 +0.01569 0.00000 0.97647 +0.03529 0.00000 1.00000 +0.05490 0.00000 0.98039 +0.07451 0.00000 0.96078 +0.09020 0.00000 0.93725 +0.10980 0.00000 0.91765 +0.12941 0.00000 0.89412 +0.14902 0.00000 0.87451 +0.16471 0.00000 0.85490 +0.18431 0.00000 0.83137 +0.20392 0.00000 0.81176 +0.22353 0.00000 0.78824 +0.23922 0.00000 0.76863 +0.25882 0.00000 0.74510 +0.27843 0.00000 0.72549 +0.29804 0.00000 0.70588 +0.31765 0.00000 0.68235 +0.31765 0.00000 0.66275 +0.31765 0.00000 0.63922 +0.31765 0.00000 0.61961 +0.31765 0.00000 0.59608 +0.31765 0.00000 0.57647 +0.31765 0.00000 0.55686 +0.31765 0.00000 0.53333 +0.31373 0.00000 0.51373 +0.31373 0.00000 0.49020 +0.31373 0.00000 0.47059 +0.31373 0.00000 0.44706 +0.31373 0.00000 0.42745 +0.31373 0.00000 0.40784 +0.31373 0.00000 0.38431 +0.30980 0.00000 0.36471 +0.32941 0.00000 0.34118 +0.34902 0.00000 0.32157 +0.36863 0.00000 0.29804 +0.38824 0.00000 0.27843 +0.40784 0.00000 0.25882 +0.42745 0.00000 0.23529 +0.44706 0.00000 0.21569 +0.46667 0.00000 0.19216 +0.48627 0.00000 0.17255 +0.50588 0.00000 0.14902 +0.52549 0.00000 0.12941 +0.54510 0.00000 0.10980 +0.56471 0.00000 0.08627 +0.58431 0.00000 0.06667 +0.60392 0.00000 0.04314 +0.62353 0.00000 0.02353 +0.64314 0.00000 0.00000 +0.66275 0.00000 0.00000 +0.68235 0.00000 0.00000 +0.70588 0.00000 0.00000 +0.72549 0.00000 0.00000 +0.74510 0.00000 0.00000 +0.76863 0.00000 0.00000 +0.78824 0.00000 0.00000 +0.80784 0.00000 0.00000 +0.83137 0.00000 0.00000 +0.85098 0.00000 0.00000 +0.87059 0.00000 0.00000 +0.89412 0.00000 0.00000 +0.91373 0.00000 0.00000 +1.00000 0.00000 0.00000 +1.00000 0.00000 0.00000 +1.00000 0.00000 0.00000 +1.00000 0.00000 0.00000 +1.00000 0.01961 0.00000 +1.00000 0.03922 0.00000 +1.00000 0.06275 0.00000 +1.00000 0.08235 0.00000 +1.00000 0.10588 0.00000 +1.00000 0.12549 0.00000 +1.00000 0.14510 0.00000 +1.00000 0.16863 0.00000 +1.00000 0.18824 0.00000 +1.00000 0.21176 0.00000 +1.00000 0.23137 0.00000 +1.00000 0.25098 0.00000 +1.00000 0.27451 0.00000 +1.00000 0.29412 0.00000 +1.00000 0.31765 0.00000 +1.00000 0.33333 0.01569 +1.00000 0.35294 0.03529 +1.00000 0.37255 0.05490 +1.00000 0.39216 0.07451 +1.00000 0.41176 0.09412 +1.00000 0.42745 0.10980 +1.00000 0.44706 0.12941 +1.00000 0.46667 0.14902 +1.00000 0.48627 0.16863 +1.00000 0.50588 0.18824 +1.00000 0.52549 0.20784 +1.00000 0.54118 0.22353 +1.00000 0.56078 0.24314 +1.00000 0.58039 0.26275 +1.00000 0.60000 0.28235 +1.00000 0.61961 0.30196 +1.00000 0.63922 0.32157 +1.00000 0.63922 0.30196 +1.00000 0.63922 0.27843 +1.00000 0.63922 0.25490 +1.00000 0.63922 0.23137 +1.00000 0.63922 0.20784 +1.00000 0.63922 0.18431 +1.00000 0.63922 0.16078 +1.00000 0.63922 0.14118 +1.00000 0.63922 0.11765 +1.00000 0.63922 0.09412 +1.00000 0.63922 0.07059 +1.00000 0.63922 0.04706 +1.00000 0.63922 0.02353 +1.00000 0.63922 0.00000 +1.00000 0.63922 0.00000 +1.00000 0.63922 0.00000 +1.00000 0.63922 0.00000 +0.97255 0.63922 0.00000 +0.94118 0.63922 0.00000 +0.90980 0.63922 0.00000 +0.88235 0.63922 0.00000 +0.85098 0.63922 0.00000 +0.81961 0.63922 0.00000 +0.79216 0.63922 0.00000 +0.76078 0.63922 0.00000 +0.72941 0.63922 0.00000 +0.70196 0.63922 0.00000 +0.67059 0.63922 0.00000 +0.63922 0.63922 0.00000 +0.65882 0.63922 0.00000 +0.67843 0.63922 0.00000 +0.69804 0.66275 0.01176 +0.71765 0.68627 0.02353 +0.73725 0.70980 0.03529 +0.75686 0.73333 0.04706 +0.77647 0.75686 0.06275 +0.79608 0.78039 0.07451 +0.81961 0.80392 0.08627 +0.83922 0.83137 0.09804 +0.85882 0.85490 0.11373 +0.87843 0.87843 0.12549 +0.89804 0.90196 0.13725 +0.91765 0.92549 0.14902 +0.93725 0.94902 0.16078 +0.95686 0.97255 0.17647 +0.97647 1.00000 0.18824 +1.00000 1.00000 0.20000 +1.00000 1.00000 0.21176 +1.00000 1.00000 0.22745 +1.00000 1.00000 0.23922 +1.00000 1.00000 0.25098 +1.00000 1.00000 0.26275 +1.00000 1.00000 0.27843 +1.00000 1.00000 0.29020 +1.00000 1.00000 0.30196 +1.00000 1.00000 0.31373 +1.00000 1.00000 0.32549 +1.00000 1.00000 0.34118 +1.00000 1.00000 0.35294 +1.00000 1.00000 0.36471 +1.00000 1.00000 0.37647 +1.00000 1.00000 0.39216 +1.00000 1.00000 0.40392 +1.00000 1.00000 0.41569 +1.00000 1.00000 0.42745 +1.00000 1.00000 0.43922 +1.00000 1.00000 0.45490 +1.00000 1.00000 0.46667 +1.00000 1.00000 0.47843 +1.00000 1.00000 0.49020 +1.00000 1.00000 0.50588 +1.00000 1.00000 0.51765 +1.00000 1.00000 0.52941 +1.00000 1.00000 0.54118 +1.00000 1.00000 0.55686 +1.00000 1.00000 0.56863 +1.00000 1.00000 0.58039 +1.00000 1.00000 0.59216 +1.00000 1.00000 0.60392 +1.00000 1.00000 0.61961 +1.00000 1.00000 0.63137 +1.00000 1.00000 0.64314 +1.00000 1.00000 0.65490 +1.00000 1.00000 0.67059 +1.00000 1.00000 0.68235 +1.00000 1.00000 0.69412 +1.00000 1.00000 0.70588 +1.00000 1.00000 0.71765 +1.00000 1.00000 0.73333 +1.00000 1.00000 0.74510 +1.00000 1.00000 0.75686 +1.00000 1.00000 0.76863 +1.00000 1.00000 0.78431 +1.00000 1.00000 0.79608 +1.00000 1.00000 0.80784 +1.00000 1.00000 0.81961 +1.00000 1.00000 0.83529 +1.00000 1.00000 0.84706 +1.00000 1.00000 0.85882 +1.00000 1.00000 0.87059 +1.00000 1.00000 0.88235 +1.00000 1.00000 0.89804 +1.00000 1.00000 0.90980 +1.00000 1.00000 0.92157 +1.00000 1.00000 0.93333 +1.00000 1.00000 0.94902 +1.00000 1.00000 0.96078 +1.00000 1.00000 0.97255 +1.00000 1.00000 0.98431 +1.00000 1.00000 1.00000 diff --git a/vendor/x11iraf/ximtool/luts/idl6.lut b/vendor/x11iraf/ximtool/luts/idl6.lut new file mode 100644 index 00000000..c511860d --- /dev/null +++ b/vendor/x11iraf/ximtool/luts/idl6.lut @@ -0,0 +1,256 @@ +0.00000 0.00000 0.00000 +0.01176 0.00000 0.00000 +0.02745 0.00000 0.00000 +0.04314 0.00000 0.00000 +0.05882 0.00000 0.00000 +0.07451 0.00000 0.00000 +0.08627 0.00000 0.00000 +0.10196 0.00000 0.00000 +0.11765 0.00000 0.00000 +0.13333 0.00000 0.00000 +0.14902 0.00000 0.00000 +0.16078 0.00000 0.00000 +0.17647 0.00000 0.00000 +0.19216 0.00000 0.00000 +0.20784 0.00000 0.00000 +0.22353 0.00000 0.00000 +0.23529 0.00000 0.00000 +0.25098 0.00000 0.00000 +0.26667 0.00000 0.00000 +0.28235 0.00000 0.00000 +0.29804 0.00000 0.00000 +0.30980 0.00000 0.00000 +0.32549 0.00000 0.00000 +0.34118 0.00000 0.00000 +0.35686 0.00000 0.00000 +0.37255 0.00000 0.00000 +0.38431 0.00000 0.00000 +0.40000 0.00000 0.00000 +0.41569 0.00000 0.00000 +0.43137 0.00000 0.00000 +0.44706 0.00000 0.00000 +0.45882 0.00000 0.00000 +0.47451 0.00000 0.00000 +0.49020 0.00000 0.00000 +0.50588 0.00000 0.00000 +0.52157 0.00000 0.00000 +0.53725 0.00000 0.00000 +0.54902 0.00000 0.00000 +0.56471 0.00000 0.00000 +0.58039 0.00000 0.00000 +0.59608 0.00000 0.00000 +0.61176 0.00000 0.00000 +0.62353 0.00000 0.00000 +0.63922 0.00000 0.00000 +0.65490 0.00000 0.00000 +0.67059 0.00000 0.00000 +0.68627 0.00000 0.00000 +0.69804 0.00000 0.00000 +0.71373 0.00000 0.00000 +0.72941 0.00000 0.00000 +0.74510 0.00000 0.00000 +0.76078 0.00000 0.00000 +0.77255 0.00000 0.00000 +0.78824 0.00000 0.00000 +0.80392 0.00000 0.00000 +0.81961 0.00000 0.00000 +0.83529 0.00000 0.00000 +0.84706 0.00000 0.00000 +0.86275 0.00000 0.00000 +0.87843 0.00000 0.00000 +0.89412 0.00000 0.00000 +0.90980 0.00000 0.00000 +0.92157 0.00000 0.00000 +0.93725 0.00000 0.00000 +0.95294 0.00000 0.00000 +0.96863 0.01176 0.00000 +0.98431 0.02745 0.00000 +1.00000 0.04314 0.00000 +0.98431 0.05882 0.00000 +0.96863 0.07451 0.00000 +0.95294 0.09020 0.00000 +0.93725 0.10588 0.00000 +0.92157 0.12157 0.00000 +0.90196 0.13725 0.00000 +0.88627 0.15294 0.00000 +0.87059 0.16863 0.00000 +0.85490 0.18431 0.00000 +0.83922 0.20000 0.00000 +0.82353 0.21569 0.00000 +0.80392 0.23137 0.00000 +0.78824 0.24706 0.00000 +0.77255 0.26275 0.00000 +0.75686 0.27843 0.00000 +0.74118 0.29412 0.00000 +0.72157 0.30980 0.00000 +0.70588 0.32549 0.00000 +0.69020 0.34118 0.00000 +0.67451 0.35686 0.00000 +0.65882 0.37255 0.00000 +0.64314 0.38824 0.00000 +0.62353 0.40392 0.00000 +0.60784 0.41961 0.00000 +0.59216 0.43529 0.00000 +0.57647 0.45098 0.00000 +0.56078 0.46667 0.00000 +0.54118 0.48235 0.00000 +0.52549 0.49804 0.00000 +0.50980 0.51373 0.00000 +0.49412 0.52941 0.00000 +0.47843 0.54510 0.00000 +0.46275 0.56078 0.00000 +0.44314 0.57647 0.00000 +0.42745 0.59216 0.00000 +0.41176 0.60784 0.00000 +0.39608 0.62353 0.00000 +0.38039 0.63922 0.00000 +0.36078 0.65490 0.00000 +0.34510 0.67059 0.00000 +0.32941 0.68627 0.00000 +0.31373 0.70196 0.00000 +0.29804 0.71765 0.00000 +0.28235 0.73333 0.00000 +0.26275 0.74902 0.00000 +0.24706 0.76471 0.00000 +0.23137 0.78039 0.00000 +0.21569 0.79608 0.00000 +0.20000 0.81176 0.00000 +0.18039 0.82745 0.00000 +0.16471 0.84314 0.00000 +0.14902 0.85882 0.00000 +0.13333 0.87451 0.00000 +0.11765 0.89020 0.00000 +0.10196 0.90588 0.00000 +0.08235 0.92157 0.00000 +0.06667 0.93725 0.00000 +0.05098 0.95294 0.00000 +0.03529 0.96863 0.00000 +0.01961 0.98431 0.01176 +0.00000 1.00000 0.02745 +0.00000 0.98431 0.04314 +0.00000 0.96863 0.05882 +0.00000 0.95294 0.07451 +0.00000 0.93725 0.09020 +0.00000 0.92157 0.10588 +0.00000 0.90588 0.11765 +0.00000 0.89020 0.13333 +0.00000 0.87451 0.14902 +0.00000 0.85882 0.16471 +0.00000 0.84314 0.18039 +0.00000 0.82745 0.19608 +0.00000 0.81176 0.21176 +0.00000 0.79608 0.22353 +0.00000 0.78039 0.23922 +0.00000 0.76471 0.25490 +0.00000 0.74902 0.27059 +0.00000 0.73333 0.28627 +0.00000 0.71765 0.30196 +0.00000 0.70196 0.31765 +0.00000 0.68627 0.33333 +0.00000 0.66667 0.34510 +0.00000 0.65098 0.36078 +0.00000 0.63529 0.37647 +0.00000 0.61961 0.39216 +0.00000 0.60392 0.40784 +0.00000 0.58824 0.42353 +0.00000 0.57255 0.43922 +0.00000 0.55686 0.45098 +0.00000 0.54118 0.46667 +0.00000 0.52549 0.48235 +0.00000 0.50980 0.49804 +0.00000 0.49412 0.51373 +0.00000 0.47843 0.52941 +0.00000 0.46275 0.54510 +0.00000 0.44706 0.55686 +0.00000 0.43137 0.57255 +0.00000 0.41569 0.58824 +0.00000 0.40000 0.60392 +0.00000 0.38431 0.61961 +0.00000 0.36863 0.63529 +0.00000 0.35294 0.65098 +0.00000 0.33333 0.66667 +0.00000 0.31765 0.67843 +0.00000 0.30196 0.69412 +0.00000 0.28627 0.70980 +0.00000 0.27059 0.72549 +0.00000 0.25490 0.74118 +0.00000 0.23922 0.75686 +0.00000 0.22353 0.77255 +0.00000 0.20784 0.78431 +0.00000 0.19216 0.80000 +0.00000 0.17647 0.81569 +0.00000 0.16078 0.83137 +0.00000 0.14510 0.84706 +0.00000 0.12941 0.86275 +0.00000 0.11373 0.87843 +0.00000 0.09804 0.89020 +0.00000 0.08235 0.90588 +0.00000 0.06667 0.92157 +0.00000 0.05098 0.93725 +0.00000 0.03529 0.95294 +0.00000 0.01961 0.96863 +0.00000 0.00000 0.98431 +0.00000 0.00000 1.00000 +0.00000 0.00000 0.98431 +0.00000 0.00000 0.96863 +0.00000 0.00000 0.95294 +0.00000 0.00000 0.93725 +0.00000 0.00000 0.92157 +0.00000 0.00000 0.90588 +0.00000 0.00000 0.89020 +0.00000 0.00000 0.87451 +0.00000 0.00000 0.85882 +0.00000 0.00000 0.84314 +0.00000 0.00000 0.82745 +0.00000 0.00000 0.81176 +0.00000 0.00000 0.79608 +0.00000 0.00000 0.78039 +0.00000 0.00000 0.76471 +0.00000 0.00000 0.74902 +0.00000 0.00000 0.73333 +0.00000 0.00000 0.71765 +0.00000 0.00000 0.70196 +0.00000 0.00000 0.68627 +0.00000 0.00000 0.66667 +0.00000 0.00000 0.65098 +0.00000 0.00000 0.63529 +0.00000 0.00000 0.61961 +0.00000 0.00000 0.60392 +0.00000 0.00000 0.58824 +0.00000 0.00000 0.57255 +0.00000 0.00000 0.55686 +0.00000 0.00000 0.54118 +0.00000 0.00000 0.52549 +0.00000 0.00000 0.50980 +0.00000 0.00000 0.49412 +0.00000 0.00000 0.47843 +0.00000 0.00000 0.46275 +0.00000 0.00000 0.44706 +0.00000 0.00000 0.43137 +0.00000 0.00000 0.41569 +0.00000 0.00000 0.40000 +0.00000 0.00000 0.38431 +0.00000 0.00000 0.36863 +0.00000 0.00000 0.35294 +0.00000 0.00000 0.33333 +0.00000 0.00000 0.31765 +0.00000 0.00000 0.30196 +0.00000 0.00000 0.28627 +0.00000 0.00000 0.27059 +0.00000 0.00000 0.25490 +0.00000 0.00000 0.23922 +0.00000 0.00000 0.22353 +0.00000 0.00000 0.20784 +0.00000 0.00000 0.19216 +0.00000 0.00000 0.17647 +0.00000 0.00000 0.16078 +0.00000 0.00000 0.14510 +0.00000 0.00000 0.12941 +0.00000 0.00000 0.11373 +0.00000 0.00000 0.09804 +0.00000 0.00000 0.08235 +0.00000 0.00000 0.06667 +0.00000 0.00000 0.05098 +0.00000 0.00000 0.03529 +0.00000 0.00000 0.01961 +0.00000 0.00000 0.00000 diff --git a/vendor/x11iraf/ximtool/luts/ikon.lut b/vendor/x11iraf/ximtool/luts/ikon.lut new file mode 100644 index 00000000..c930305d --- /dev/null +++ b/vendor/x11iraf/ximtool/luts/ikon.lut @@ -0,0 +1,256 @@ +0.00000 0.00000 0.00000 +0.00000 0.14118 0.00000 +0.00000 0.28235 0.00000 +0.00000 0.42353 0.00000 +0.00000 0.56471 0.00000 +0.00000 0.70588 0.00000 +0.00000 0.84706 0.00000 +0.00000 0.98824 0.00000 +0.00000 0.00000 0.14118 +0.00000 0.14118 0.14118 +0.00000 0.28235 0.14118 +0.00000 0.42353 0.14118 +0.00000 0.56471 0.14118 +0.00000 0.70588 0.14118 +0.00000 0.84706 0.14118 +0.00000 0.98824 0.14118 +0.00000 0.00000 0.28235 +0.00000 0.14118 0.28235 +0.00000 0.28235 0.28235 +0.00000 0.42353 0.28235 +0.00000 0.56471 0.28235 +0.00000 0.70588 0.28235 +0.00000 0.84706 0.28235 +0.00000 0.98824 0.28235 +0.00000 0.00000 0.42353 +0.00000 0.14118 0.42353 +0.00000 0.28235 0.42353 +0.00000 0.42353 0.42353 +0.00000 0.56471 0.42353 +0.00000 0.70588 0.42353 +0.00000 0.84706 0.42353 +0.00000 0.98824 0.42353 +0.00000 0.00000 0.56471 +0.00000 0.14118 0.56471 +0.00000 0.28235 0.56471 +0.00000 0.42353 0.56471 +0.00000 0.56471 0.56471 +0.00000 0.70588 0.56471 +0.00000 0.84706 0.56471 +0.00000 0.98824 0.56471 +0.00000 0.00000 0.70588 +0.00000 0.14118 0.70588 +0.00000 0.28235 0.70588 +0.00000 0.42353 0.70588 +0.00000 0.56471 0.70588 +0.00000 0.70588 0.70588 +0.00000 0.84706 0.70588 +0.00000 0.98824 0.70588 +0.00000 0.00000 0.84706 +0.00000 0.14118 0.84706 +0.00000 0.28235 0.84706 +0.00000 0.42353 0.84706 +0.00000 0.56471 0.84706 +0.00000 0.70588 0.84706 +0.00000 0.84706 0.84706 +0.00000 0.98824 0.84706 +0.00000 0.00000 0.98824 +0.00000 0.14118 0.98824 +0.00000 0.28235 0.98824 +0.00000 0.42353 0.98824 +0.00000 0.56471 0.98824 +0.00000 0.70588 0.98824 +0.00000 0.84706 0.98824 +0.00000 0.98824 0.98824 +0.00000 0.00000 0.00000 +0.32941 0.14118 0.00000 +0.32941 0.28235 0.00000 +0.32941 0.42353 0.00000 +0.32941 0.56471 0.00000 +0.32941 0.70588 0.00000 +0.32941 0.84706 0.00000 +0.32941 0.98824 0.00000 +0.32941 0.00000 0.14118 +0.32941 0.14118 0.14118 +0.32941 0.28235 0.14118 +0.32941 0.42353 0.14118 +0.32941 0.56471 0.14118 +0.32941 0.70588 0.14118 +0.32941 0.84706 0.14118 +0.32941 0.98824 0.14118 +0.32941 0.00000 0.28235 +0.32941 0.14118 0.28235 +0.32941 0.28235 0.28235 +0.32941 0.42353 0.28235 +0.32941 0.56471 0.28235 +0.32941 0.70588 0.28235 +0.32941 0.84706 0.28235 +0.32941 0.98824 0.28235 +0.32941 0.00000 0.42353 +0.32941 0.14118 0.42353 +0.32941 0.28235 0.42353 +0.32941 0.42353 0.42353 +0.32941 0.56471 0.42353 +0.32941 0.70588 0.42353 +0.32941 0.84706 0.42353 +0.32941 0.98824 0.42353 +0.32941 0.00000 0.56471 +0.32941 0.14118 0.56471 +0.32941 0.28235 0.56471 +0.32941 0.42353 0.56471 +0.32941 0.56471 0.56471 +0.32941 0.70588 0.56471 +0.32941 0.84706 0.56471 +0.32941 0.98824 0.56471 +0.32941 0.00000 0.70588 +0.32941 0.14118 0.70588 +0.32941 0.28235 0.70588 +0.32941 0.42353 0.70588 +0.32941 0.56471 0.70588 +0.32941 0.70588 0.70588 +0.32941 0.84706 0.70588 +0.32941 0.98824 0.70588 +0.32941 0.00000 0.84706 +0.32941 0.14118 0.84706 +0.32941 0.28235 0.84706 +0.32941 0.42353 0.84706 +0.32941 0.56471 0.84706 +0.32941 0.70588 0.84706 +0.32941 0.84706 0.84706 +0.32941 0.98824 0.84706 +0.32941 0.00000 0.98824 +0.32941 0.14118 0.98824 +0.32941 0.28235 0.98824 +0.32941 0.42353 0.98824 +0.32941 0.56471 0.98824 +0.32941 0.70588 0.98824 +0.32941 0.84706 0.98824 +0.32941 0.98824 0.98824 +0.32941 0.00000 0.00000 +0.65882 0.14118 0.00000 +0.65882 0.28235 0.00000 +0.65882 0.42353 0.00000 +0.65882 0.56471 0.00000 +0.65882 0.70588 0.00000 +0.65882 0.84706 0.00000 +0.65882 0.98824 0.00000 +0.65882 0.00000 0.14118 +0.65882 0.14118 0.14118 +0.65882 0.28235 0.14118 +0.65882 0.42353 0.14118 +0.65882 0.56471 0.14118 +0.65882 0.70588 0.14118 +0.65882 0.84706 0.14118 +0.65882 0.98824 0.14118 +0.65882 0.00000 0.28235 +0.65882 0.14118 0.28235 +0.65882 0.28235 0.28235 +0.65882 0.42353 0.28235 +0.65882 0.56471 0.28235 +0.65882 0.70588 0.28235 +0.65882 0.84706 0.28235 +0.65882 0.98824 0.28235 +0.65882 0.00000 0.42353 +0.65882 0.14118 0.42353 +0.65882 0.28235 0.42353 +0.65882 0.42353 0.42353 +0.65882 0.56471 0.42353 +0.65882 0.70588 0.42353 +0.65882 0.84706 0.42353 +0.65882 0.98824 0.42353 +0.65882 0.00000 0.56471 +0.65882 0.14118 0.56471 +0.65882 0.28235 0.56471 +0.65882 0.42353 0.56471 +0.65882 0.56471 0.56471 +0.65882 0.70588 0.56471 +0.65882 0.84706 0.56471 +0.65882 0.98824 0.56471 +0.65882 0.00000 0.70588 +0.65882 0.14118 0.70588 +0.65882 0.28235 0.70588 +0.65882 0.42353 0.70588 +0.65882 0.56471 0.70588 +0.65882 0.70588 0.70588 +0.65882 0.84706 0.70588 +0.65882 0.98824 0.70588 +0.65882 0.00000 0.84706 +0.65882 0.14118 0.84706 +0.65882 0.28235 0.84706 +0.65882 0.42353 0.84706 +0.65882 0.56471 0.84706 +0.65882 0.70588 0.84706 +0.65882 0.84706 0.84706 +0.65882 0.98824 0.84706 +0.65882 0.00000 0.98824 +0.65882 0.14118 0.98824 +0.65882 0.28235 0.98824 +0.65882 0.42353 0.98824 +0.65882 0.56471 0.98824 +0.65882 0.70588 0.98824 +0.65882 0.84706 0.98824 +0.65882 0.98824 0.98824 +0.65882 0.00000 0.00000 +0.98824 0.14118 0.00000 +0.98824 0.28235 0.00000 +0.98824 0.42353 0.00000 +0.98824 0.56471 0.00000 +0.98824 0.70588 0.00000 +0.98824 0.84706 0.00000 +0.98824 0.98824 0.00000 +0.98824 0.00000 0.14118 +0.98824 0.14118 0.14118 +0.98824 0.28235 0.14118 +0.98824 0.42353 0.14118 +0.98824 0.56471 0.14118 +0.98824 0.70588 0.14118 +0.98824 0.84706 0.14118 +0.98824 0.98824 0.14118 +0.98824 0.00000 0.28235 +0.98824 0.14118 0.28235 +0.98824 0.28235 0.28235 +0.98824 0.42353 0.28235 +0.98824 0.56471 0.28235 +0.98824 0.70588 0.28235 +0.98824 0.84706 0.28235 +0.98824 0.98824 0.28235 +0.98824 0.00000 0.42353 +0.98824 0.14118 0.42353 +0.98824 0.28235 0.42353 +0.98824 0.42353 0.42353 +0.98824 0.56471 0.42353 +0.98824 0.70588 0.42353 +0.98824 0.84706 0.42353 +0.98824 0.98824 0.42353 +0.98824 0.00000 0.56471 +0.98824 0.14118 0.56471 +0.98824 0.28235 0.56471 +0.98824 0.42353 0.56471 +0.98824 0.56471 0.56471 +0.98824 0.70588 0.56471 +0.98824 0.84706 0.56471 +0.98824 0.98824 0.56471 +0.98824 0.00000 0.70588 +0.98824 0.14118 0.70588 +0.98824 0.28235 0.70588 +0.98824 0.42353 0.70588 +0.98824 0.56471 0.70588 +0.98824 0.70588 0.70588 +0.98824 0.84706 0.70588 +0.98824 0.98824 0.70588 +0.98824 0.00000 0.84706 +0.98824 0.14118 0.84706 +0.98824 0.28235 0.84706 +0.98824 0.42353 0.84706 +0.98824 0.56471 0.84706 +0.98824 0.70588 0.84706 +0.98824 0.84706 0.84706 +0.98824 0.98824 0.84706 +0.98824 0.00000 0.98824 +0.98824 0.14118 0.98824 +0.98824 0.28235 0.98824 +0.98824 0.42353 0.98824 +0.98824 0.56471 0.98824 +0.98824 0.70588 0.98824 +0.98824 0.84706 0.98824 +0.98824 0.98824 0.98824 diff --git a/vendor/x11iraf/ximtool/luts/isophot.lut b/vendor/x11iraf/ximtool/luts/isophot.lut new file mode 100644 index 00000000..70df9c7b --- /dev/null +++ b/vendor/x11iraf/ximtool/luts/isophot.lut @@ -0,0 +1,256 @@ +0.00000 0.00000 0.00000 +0.00000 0.00000 0.00000 +0.00000 0.00000 0.00000 +0.00000 0.00000 0.00000 +0.00000 0.00000 0.00000 +0.00000 0.00000 0.03922 +0.00000 0.00000 0.07843 +0.00000 0.00000 0.11765 +0.00000 0.00000 0.15686 +0.00000 0.00000 0.19608 +0.00000 0.00000 0.23529 +0.00000 0.00000 0.27843 +0.00000 0.00000 0.31765 +0.00000 0.00000 0.35686 +0.00000 0.00000 0.39608 +0.00000 0.00000 0.43529 +0.00000 0.00000 0.47451 +0.00000 0.00000 0.51765 +0.00000 0.00000 0.55686 +0.00000 0.00000 0.59608 +0.00000 0.00000 0.63529 +0.00000 0.00000 0.67451 +0.00000 0.00000 0.71765 +1.00000 1.00000 1.00000 +1.00000 1.00000 1.00000 +1.00000 1.00000 1.00000 +0.00000 0.00000 0.87843 +0.00000 0.00000 0.91765 +0.00000 0.00000 0.95686 +0.00000 0.00000 1.00000 +0.00000 0.03137 1.00000 +0.00000 0.06275 1.00000 +0.00000 0.09412 1.00000 +0.00000 0.12549 1.00000 +0.00000 0.15686 1.00000 +0.00000 0.18824 1.00000 +0.00000 0.21961 1.00000 +0.00000 0.25490 1.00000 +0.00000 0.28627 1.00000 +0.00000 0.31765 1.00000 +0.00000 0.34902 1.00000 +0.00000 0.38039 1.00000 +0.00000 0.41176 1.00000 +0.00000 0.44314 1.00000 +0.00000 0.47843 1.00000 +0.00000 0.49804 1.00000 +0.00000 0.51765 1.00000 +0.00000 0.53725 1.00000 +1.00000 1.00000 1.00000 +1.00000 1.00000 1.00000 +1.00000 1.00000 1.00000 +0.00000 0.61961 1.00000 +0.00000 0.63922 1.00000 +0.00000 0.65882 1.00000 +0.00000 0.67843 1.00000 +0.00000 0.70196 1.00000 +0.00000 0.72157 1.00000 +0.00000 0.74118 1.00000 +0.00000 0.76078 1.00000 +0.00000 0.78431 1.00000 +0.00000 0.79608 1.00000 +0.00000 0.81176 1.00000 +0.00000 0.82353 1.00000 +0.00000 0.83922 1.00000 +0.00000 0.85490 1.00000 +0.00000 0.86667 1.00000 +0.00000 0.88235 1.00000 +0.00000 0.89412 1.00000 +0.00000 0.90980 1.00000 +0.00000 0.92549 1.00000 +0.00000 0.93725 1.00000 +0.00000 0.95294 1.00000 +0.00000 0.96863 1.00000 +1.00000 1.00000 1.00000 +1.00000 1.00000 1.00000 +1.00000 1.00000 1.00000 +0.00000 1.00000 0.96078 +0.00000 1.00000 0.94118 +0.00000 1.00000 0.92157 +0.00000 1.00000 0.90196 +0.00000 1.00000 0.88235 +0.00000 1.00000 0.86275 +0.00000 1.00000 0.84314 +0.00000 1.00000 0.82353 +0.00000 1.00000 0.80392 +0.00000 1.00000 0.78431 +0.00000 1.00000 0.76471 +0.00000 1.00000 0.74510 +0.00000 1.00000 0.72549 +0.00000 1.00000 0.70588 +0.00000 1.00000 0.65490 +0.00000 1.00000 0.60784 +0.00000 1.00000 0.56078 +0.00000 1.00000 0.51373 +0.00000 1.00000 0.46667 +0.00000 1.00000 0.41961 +0.00000 1.00000 0.37255 +0.00000 1.00000 0.32549 +1.00000 1.00000 1.00000 +1.00000 1.00000 1.00000 +1.00000 1.00000 1.00000 +0.00000 1.00000 0.13725 +0.00000 1.00000 0.09020 +0.00000 1.00000 0.04314 +0.00000 1.00000 0.00000 +0.04706 1.00000 0.00000 +0.09412 1.00000 0.00000 +0.14118 1.00000 0.00000 +0.18824 1.00000 0.00000 +0.23529 1.00000 0.00000 +0.28235 1.00000 0.00000 +0.32941 1.00000 0.00000 +0.37647 1.00000 0.00000 +0.42353 1.00000 0.00000 +0.47059 1.00000 0.00000 +0.51765 1.00000 0.00000 +0.56471 1.00000 0.00000 +0.61176 1.00000 0.00000 +0.65882 1.00000 0.00000 +0.70588 1.00000 0.00000 +0.72549 1.00000 0.00000 +0.74510 1.00000 0.00000 +0.76471 1.00000 0.00000 +1.00000 1.00000 1.00000 +1.00000 1.00000 1.00000 +1.00000 1.00000 1.00000 +0.84314 1.00000 0.00000 +0.86275 1.00000 0.00000 +0.88235 1.00000 0.00000 +0.90196 1.00000 0.00000 +0.92157 1.00000 0.00000 +0.94118 1.00000 0.00000 +0.96078 1.00000 0.00000 +0.98039 1.00000 0.00000 +1.00000 1.00000 0.00000 +0.99608 0.98039 0.00000 +0.99608 0.96078 0.00000 +0.99608 0.94118 0.00000 +0.99608 0.92549 0.00000 +0.99216 0.90588 0.00000 +0.99216 0.88627 0.00000 +0.99216 0.87059 0.00000 +0.99216 0.85098 0.00000 +0.98824 0.83137 0.00000 +0.98824 0.81569 0.00000 +0.98824 0.79608 0.00000 +0.98824 0.77647 0.00000 +0.98824 0.76078 0.00000 +1.00000 1.00000 1.00000 +1.00000 1.00000 1.00000 +1.00000 1.00000 1.00000 +0.98824 0.69020 0.00000 +0.98824 0.67059 0.00000 +0.98824 0.65490 0.00000 +0.98824 0.63922 0.00000 +0.98824 0.61961 0.00000 +0.99216 0.60392 0.00000 +0.99216 0.58824 0.00000 +0.99216 0.56863 0.00000 +0.99216 0.55294 0.00000 +0.99608 0.53725 0.00000 +0.99608 0.51765 0.00000 +0.99608 0.50196 0.00000 +0.99608 0.48627 0.00000 +1.00000 0.47059 0.00000 +1.00000 0.43529 0.00000 +1.00000 0.40392 0.00000 +1.00000 0.37255 0.00000 +1.00000 0.34118 0.00000 +1.00000 0.30980 0.00000 +1.00000 0.27843 0.00000 +1.00000 0.24706 0.00000 +1.00000 0.21569 0.00000 +1.00000 1.00000 1.00000 +1.00000 1.00000 1.00000 +1.00000 1.00000 1.00000 +1.00000 0.09020 0.00000 +1.00000 0.05882 0.00000 +1.00000 0.02745 0.00000 +1.00000 0.00000 0.00000 +1.00000 0.00000 0.00000 +1.00000 0.00000 0.00000 +1.00000 0.00000 0.00000 +1.00000 0.00000 0.00000 +1.00000 0.00000 0.00000 +1.00000 0.00000 0.00000 +1.00000 0.00000 0.00000 +1.00000 0.00000 0.00000 +1.00000 0.00000 0.00000 +1.00000 0.00000 0.00000 +1.00000 0.00000 0.00000 +1.00000 0.00000 0.00000 +1.00000 0.00000 0.00000 +1.00000 0.00000 0.00000 +1.00000 0.00000 0.00000 +1.00000 0.00000 0.04706 +1.00000 0.00000 0.09412 +1.00000 0.00000 0.14118 +1.00000 1.00000 1.00000 +1.00000 1.00000 1.00000 +1.00000 1.00000 1.00000 +1.00000 0.00000 0.32941 +1.00000 0.00000 0.37647 +1.00000 0.00000 0.42353 +1.00000 0.00000 0.47059 +1.00000 0.00000 0.51765 +1.00000 0.00000 0.56471 +1.00000 0.00000 0.61176 +1.00000 0.00000 0.65882 +1.00000 0.00000 0.70588 +1.00000 0.00000 0.72549 +1.00000 0.00000 0.74902 +1.00000 0.00000 0.77255 +1.00000 0.00000 0.79608 +1.00000 0.00000 0.81569 +1.00000 0.00000 0.83922 +1.00000 0.00000 0.86275 +1.00000 0.00000 0.88627 +1.00000 0.00000 0.90588 +1.00000 0.00000 0.92941 +1.00000 0.00000 0.95294 +1.00000 0.00000 0.97647 +1.00000 0.00000 1.00000 +1.00000 1.00000 1.00000 +1.00000 1.00000 1.00000 +1.00000 1.00000 1.00000 +1.00000 0.14118 1.00000 +1.00000 0.17647 1.00000 +1.00000 0.21176 1.00000 +1.00000 0.25098 1.00000 +1.00000 0.28627 1.00000 +1.00000 0.32157 1.00000 +1.00000 0.36078 1.00000 +1.00000 0.39608 1.00000 +1.00000 0.43137 1.00000 +1.00000 0.47059 1.00000 +1.00000 0.48627 1.00000 +1.00000 0.50588 1.00000 +1.00000 0.52157 1.00000 +1.00000 0.54118 1.00000 +1.00000 0.56078 1.00000 +1.00000 0.57647 1.00000 +1.00000 0.59608 1.00000 +1.00000 0.61176 1.00000 +1.00000 0.63137 1.00000 +1.00000 0.65098 1.00000 +1.00000 0.66667 1.00000 +1.00000 0.68627 1.00000 +1.00000 0.70588 1.00000 +1.00000 0.74510 1.00000 +1.00000 0.78824 1.00000 +1.00000 0.83137 1.00000 +1.00000 0.87059 1.00000 +1.00000 0.91373 1.00000 +1.00000 0.95686 1.00000 +1.00000 1.00000 1.00000 diff --git a/vendor/x11iraf/ximtool/luts/light.lut b/vendor/x11iraf/ximtool/luts/light.lut new file mode 100644 index 00000000..a58c7120 --- /dev/null +++ b/vendor/x11iraf/ximtool/luts/light.lut @@ -0,0 +1,256 @@ +0.00000 0.00392 0.00000 +0.00000 0.00784 0.01961 +0.00000 0.01176 0.05490 +0.00000 0.01569 0.08627 +0.00000 0.01961 0.10980 +0.00000 0.02353 0.13725 +0.00000 0.02745 0.15686 +0.00000 0.03137 0.18039 +0.00000 0.03529 0.20000 +0.00000 0.03922 0.21569 +0.00000 0.04314 0.23529 +0.00000 0.04706 0.25098 +0.00000 0.05098 0.26275 +0.00000 0.05490 0.28235 +0.00000 0.05882 0.29412 +0.00000 0.06275 0.30588 +0.00000 0.06667 0.31765 +0.00000 0.07059 0.33333 +0.00000 0.07451 0.34118 +0.00000 0.07843 0.35294 +0.00000 0.08235 0.36078 +0.00000 0.08627 0.37255 +0.00000 0.09020 0.38431 +0.00000 0.09412 0.39216 +0.00392 0.09804 0.40000 +0.00784 0.10196 0.41176 +0.01176 0.10588 0.41961 +0.01569 0.10980 0.43137 +0.01569 0.11373 0.43529 +0.01961 0.11765 0.44314 +0.02353 0.12157 0.45098 +0.02745 0.12549 0.45882 +0.02745 0.12941 0.46667 +0.03137 0.13333 0.47059 +0.03529 0.13725 0.48235 +0.04314 0.14118 0.48627 +0.04706 0.14510 0.49412 +0.05098 0.14902 0.50196 +0.05882 0.15294 0.50588 +0.06667 0.15686 0.50980 +0.07451 0.16078 0.51765 +0.08235 0.16471 0.52157 +0.09020 0.16863 0.53333 +0.09804 0.17255 0.53725 +0.10588 0.17647 0.54118 +0.11765 0.18039 0.54902 +0.12941 0.18431 0.55294 +0.14118 0.18824 0.55686 +0.15294 0.19216 0.56078 +0.16471 0.19608 0.56471 +0.18039 0.20000 0.57255 +0.18824 0.20392 0.58039 +0.20000 0.20784 0.58431 +0.21569 0.21176 0.58824 +0.23137 0.21569 0.59216 +0.24706 0.21961 0.59608 +0.26275 0.22353 0.60000 +0.27843 0.22745 0.60392 +0.29412 0.23137 0.60784 +0.30980 0.23529 0.61176 +0.32941 0.23922 0.61569 +0.34902 0.24314 0.61961 +0.36863 0.24706 0.62745 +0.38431 0.25098 0.63137 +0.40392 0.25490 0.63529 +0.41569 0.25882 0.63922 +0.43529 0.26275 0.64314 +0.45490 0.26667 0.64706 +0.47059 0.27059 0.65098 +0.48627 0.27451 0.65490 +0.50196 0.27843 0.65490 +0.51765 0.28235 0.65882 +0.52941 0.28627 0.66275 +0.54902 0.29020 0.66667 +0.56471 0.29412 0.67059 +0.58039 0.29804 0.67843 +0.59216 0.30196 0.67843 +0.60392 0.30588 0.68235 +0.61961 0.30980 0.68627 +0.63137 0.31373 0.69020 +0.63922 0.31765 0.69020 +0.65098 0.32157 0.69412 +0.65882 0.32549 0.69804 +0.67059 0.32941 0.70196 +0.67843 0.33333 0.70196 +0.69020 0.33725 0.70588 +0.69804 0.34118 0.70980 +0.70588 0.34510 0.71373 +0.71373 0.34902 0.71373 +0.72157 0.35294 0.71765 +0.72941 0.35686 0.72157 +0.73725 0.36078 0.72157 +0.74510 0.36471 0.72941 +0.75294 0.36863 0.73333 +0.76078 0.37255 0.73333 +0.76863 0.37647 0.73725 +0.77647 0.38039 0.74118 +0.78039 0.38431 0.74118 +0.78824 0.38824 0.74510 +0.79608 0.39216 0.74510 +0.80392 0.39608 0.74902 +0.80784 0.40000 0.75294 +0.81176 0.40392 0.75294 +0.81961 0.40784 0.75686 +0.82353 0.41176 0.76078 +0.82745 0.41569 0.76078 +0.83529 0.41961 0.76471 +0.83922 0.42353 0.76471 +0.84314 0.42745 0.76863 +0.84706 0.43137 0.76863 +0.85098 0.43529 0.77255 +0.85490 0.43922 0.78039 +0.85882 0.44314 0.78039 +0.86275 0.44706 0.78431 +0.86667 0.45098 0.78431 +0.87059 0.45490 0.78824 +0.87451 0.45882 0.78824 +0.87843 0.46275 0.79216 +0.88235 0.46667 0.79216 +0.88627 0.47059 0.79608 +0.89020 0.47451 0.79608 +0.89412 0.47843 0.80000 +0.89804 0.48235 0.80000 +0.89804 0.48627 0.80392 +0.90196 0.49020 0.80392 +0.90588 0.49412 0.80784 +0.90980 0.49804 0.80784 +0.91373 0.50196 0.81176 +0.91373 0.50588 0.81176 +0.91765 0.50980 0.81569 +0.92157 0.51373 0.81569 +0.92157 0.51765 0.81961 +0.92549 0.52157 0.81961 +0.92941 0.52549 0.82745 +0.92941 0.52941 0.82745 +0.93333 0.53333 0.83137 +0.93725 0.53725 0.83137 +0.93725 0.54118 0.83529 +0.93725 0.54510 0.83529 +0.94118 0.54902 0.83922 +0.94118 0.55294 0.83922 +0.94510 0.55686 0.83922 +0.94510 0.56078 0.84314 +0.94902 0.56471 0.84314 +0.94902 0.56863 0.84706 +0.95294 0.57255 0.84706 +0.95294 0.57647 0.85098 +0.95294 0.58039 0.85098 +0.95686 0.58431 0.85490 +0.95686 0.58824 0.85490 +0.96078 0.59216 0.85490 +0.96078 0.59608 0.85882 +0.96078 0.60000 0.85882 +0.96471 0.60392 0.86275 +0.96471 0.60784 0.86275 +0.96471 0.61176 0.86275 +0.96863 0.61569 0.86667 +0.96863 0.61961 0.86667 +0.97255 0.62353 0.87059 +0.97255 0.62745 0.87059 +0.97255 0.63137 0.87059 +0.97647 0.63529 0.87843 +0.97647 0.63922 0.87843 +0.98039 0.64314 0.88235 +0.98039 0.64706 0.88235 +0.98039 0.65098 0.88235 +0.98431 0.65490 0.88627 +0.98431 0.65882 0.88627 +0.98431 0.66275 0.89020 +0.98824 0.66667 0.89020 +0.98824 0.67059 0.89020 +0.98824 0.67451 0.89412 +0.99216 0.67843 0.89412 +0.99216 0.68235 0.89412 +0.99216 0.68627 0.89804 +0.99216 0.69020 0.89804 +0.99216 0.69412 0.89804 +0.99608 0.69804 0.90196 +0.99608 0.70196 0.90196 +0.99608 0.70588 0.90588 +0.99608 0.70980 0.90588 +0.99608 0.71373 0.90588 +0.99608 0.71765 0.90980 +0.99608 0.72157 0.90980 +0.99608 0.72549 0.90980 +0.99608 0.72941 0.91373 +0.99608 0.73333 0.91373 +0.99608 0.73725 0.91373 +0.99608 0.74118 0.91765 +0.99608 0.74510 0.91765 +0.99608 0.74902 0.91765 +0.99608 0.75294 0.92157 +0.99608 0.75686 0.92157 +0.99608 0.76078 0.92157 +0.99608 0.76471 0.92941 +0.99608 0.76863 0.92941 +0.99608 0.77255 0.92941 +0.99608 0.77647 0.93333 +0.99608 0.78039 0.93333 +0.99608 0.78431 0.93333 +0.99608 0.78824 0.93725 +1.00000 0.79216 0.93725 +1.00000 0.79608 0.93725 +1.00000 0.80000 0.94118 +1.00000 0.80392 0.94118 +1.00000 0.80784 0.94118 +1.00000 0.81176 0.94118 +1.00000 0.81569 0.94510 +1.00000 0.81961 0.94510 +1.00000 0.82353 0.94510 +1.00000 0.82745 0.94902 +1.00000 0.83137 0.94902 +1.00000 0.83529 0.94902 +1.00000 0.83922 0.95294 +1.00000 0.84314 0.95294 +1.00000 0.84706 0.95294 +1.00000 0.85098 0.95686 +1.00000 0.85490 0.95686 +1.00000 0.85882 0.95686 +1.00000 0.86275 0.95686 +1.00000 0.86667 0.96078 +1.00000 0.87059 0.96078 +1.00000 0.87451 0.96078 +1.00000 0.87843 0.96471 +1.00000 0.88235 0.96471 +1.00000 0.88627 0.96471 +1.00000 0.89020 0.96471 +1.00000 0.89412 0.96863 +1.00000 0.89804 0.96863 +1.00000 0.90196 0.96863 +1.00000 0.90588 0.97255 +1.00000 0.90980 0.97255 +1.00000 0.91373 0.97255 +1.00000 0.91765 0.97255 +1.00000 0.92157 0.98039 +1.00000 0.92549 0.98039 +1.00000 0.92941 0.98039 +1.00000 0.93333 0.98039 +1.00000 0.93725 0.98431 +1.00000 0.94118 0.98431 +1.00000 0.94510 0.98431 +1.00000 0.94902 0.98824 +1.00000 0.95294 0.98824 +1.00000 0.95686 0.98824 +1.00000 0.96078 0.98824 +1.00000 0.96471 0.99216 +1.00000 0.96863 0.99216 +1.00000 0.97255 0.99216 +1.00000 0.97647 0.99216 +1.00000 0.98039 0.99608 +1.00000 0.98431 0.99608 +1.00000 0.98824 0.99608 +1.00000 0.99216 0.99608 +1.00000 0.99608 1.00000 +1.00000 1.00000 1.00000 +1.00000 0.00000 1.00000 diff --git a/vendor/x11iraf/ximtool/luts/lnspiral.lut b/vendor/x11iraf/ximtool/luts/lnspiral.lut new file mode 100644 index 00000000..bc6ec646 --- /dev/null +++ b/vendor/x11iraf/ximtool/luts/lnspiral.lut @@ -0,0 +1,256 @@ +0.00000 0.00000 0.00000 +0.00000 0.00000 0.00000 +0.00000 0.00000 0.00000 +0.00000 0.00000 0.00000 +0.00000 0.00000 0.00000 +0.00000 0.00000 0.00000 +0.00000 0.00000 0.00000 +0.00000 0.00000 0.00000 +0.00000 0.00000 0.00000 +0.00000 0.00000 0.00000 +0.00000 0.00000 0.13725 +0.00000 0.00000 0.70588 +0.00000 0.00000 0.70588 +0.00000 0.00000 0.70588 +0.00000 0.00000 0.70588 +0.00000 0.00000 0.70588 +0.00000 0.00000 0.70588 +0.00000 0.00000 0.70588 +0.00000 0.00000 0.70588 +0.00000 0.00000 0.70588 +0.00000 0.00000 0.80392 +0.00000 0.00000 0.86275 +0.00000 0.00000 0.86275 +0.00000 0.00000 0.86275 +0.00000 0.00000 0.86275 +0.00000 0.00000 0.86275 +0.00000 0.00000 0.86275 +0.00000 0.00000 0.86275 +0.00000 0.00000 0.86275 +0.00000 0.00000 0.86275 +0.47059 0.00000 0.86275 +0.47059 0.00000 0.86275 +0.47059 0.00000 0.86275 +0.47059 0.00000 0.86275 +0.47059 0.00000 0.86275 +0.47059 0.00000 0.86275 +0.47059 0.00000 0.86275 +0.47059 0.00000 0.86275 +0.47059 0.00000 0.86275 +0.53333 0.00000 0.87451 +0.70588 0.00000 0.90196 +0.70588 0.00000 0.90196 +0.70588 0.00000 0.90196 +0.70588 0.00000 0.90196 +0.70588 0.00000 0.90196 +0.70588 0.00000 0.90196 +0.70588 0.00000 0.90196 +0.70588 0.00000 0.90196 +0.70588 0.00000 0.90196 +0.91373 0.00000 0.97255 +1.00000 0.00000 1.00000 +1.00000 0.00000 1.00000 +1.00000 0.00000 1.00000 +1.00000 0.00000 1.00000 +1.00000 0.00000 1.00000 +1.00000 0.00000 1.00000 +1.00000 0.00000 1.00000 +1.00000 0.00000 1.00000 +1.00000 0.00000 1.00000 +1.00000 0.00000 0.70588 +1.00000 0.00000 0.70588 +1.00000 0.00000 0.70588 +1.00000 0.00000 0.70588 +1.00000 0.00000 0.70588 +1.00000 0.00000 0.70588 +1.00000 0.00000 0.70588 +1.00000 0.00000 0.70588 +1.00000 0.00000 0.70588 +1.00000 0.00000 0.46667 +1.00000 0.00000 0.00000 +1.00000 0.00000 0.00000 +1.00000 0.00000 0.00000 +1.00000 0.00000 0.00000 +1.00000 0.00000 0.00000 +1.00000 0.00000 0.00000 +1.00000 0.00000 0.00000 +1.00000 0.00000 0.00000 +1.00000 0.00000 0.00000 +1.00000 0.36863 0.00000 +1.00000 0.47059 0.00000 +1.00000 0.47059 0.00000 +1.00000 0.47059 0.00000 +1.00000 0.47059 0.00000 +1.00000 0.47059 0.00000 +1.00000 0.47059 0.00000 +1.00000 0.47059 0.00000 +1.00000 0.47059 0.00000 +1.00000 0.47059 0.00000 +0.98824 0.72549 0.00000 +0.98824 0.72549 0.00000 +0.98824 0.72549 0.00000 +0.98824 0.72549 0.00000 +0.98824 0.72549 0.00000 +0.98824 0.72549 0.00000 +0.98824 0.72549 0.00000 +0.98824 0.72549 0.00000 +0.98824 0.72549 0.00000 +0.98824 0.77647 0.00000 +0.98431 0.85098 0.00000 +0.98431 0.85098 0.00000 +0.98431 0.85098 0.00000 +0.98431 0.85098 0.00000 +0.98431 0.85098 0.00000 +0.98431 0.85098 0.00000 +0.98431 0.85098 0.00000 +0.98431 0.85098 0.00000 +0.98431 0.85098 0.00000 +0.99608 0.97647 0.00000 +1.00000 1.00000 0.00000 +1.00000 1.00000 0.00000 +1.00000 1.00000 0.00000 +1.00000 1.00000 0.00000 +1.00000 1.00000 0.00000 +1.00000 1.00000 0.00000 +1.00000 1.00000 0.00000 +1.00000 1.00000 0.00000 +0.98431 1.00000 0.00000 +0.70588 1.00000 0.00000 +0.70588 1.00000 0.00000 +0.70588 1.00000 0.00000 +0.70588 1.00000 0.00000 +0.70588 1.00000 0.00000 +0.70588 1.00000 0.00000 +0.70588 1.00000 0.00000 +0.70588 1.00000 0.00000 +0.70588 1.00000 0.00000 +0.36078 1.00000 0.00000 +0.00000 1.00000 0.00000 +0.00000 1.00000 0.00000 +0.00000 1.00000 0.00000 +0.00000 1.00000 0.00000 +0.00000 1.00000 0.00000 +0.00000 1.00000 0.00000 +0.00000 1.00000 0.00000 +0.00000 1.00000 0.00000 +0.00000 1.00000 0.65490 +0.00000 1.00000 0.70588 +0.00000 1.00000 0.70588 +0.00000 1.00000 0.70588 +0.00000 1.00000 0.70588 +0.00000 1.00000 0.70588 +0.00000 1.00000 0.70588 +0.00000 1.00000 0.70588 +0.00000 1.00000 0.70588 +0.00000 1.00000 0.74118 +0.00000 1.00000 1.00000 +0.00000 1.00000 1.00000 +0.00000 1.00000 1.00000 +0.00000 1.00000 1.00000 +0.00000 1.00000 1.00000 +0.00000 1.00000 1.00000 +0.00000 1.00000 1.00000 +0.00000 1.00000 1.00000 +0.00000 1.00000 1.00000 +0.26275 0.87843 1.00000 +0.47059 0.78431 1.00000 +0.47059 0.78431 1.00000 +0.47059 0.78431 1.00000 +0.47059 0.78431 1.00000 +0.47059 0.78431 1.00000 +0.47059 0.78431 1.00000 +0.47059 0.78431 1.00000 +0.47059 0.78431 1.00000 +0.47059 0.78431 1.00000 +0.62745 0.62745 1.00000 +0.62745 0.62745 1.00000 +0.62745 0.62745 1.00000 +0.62745 0.62745 1.00000 +0.62745 0.62745 1.00000 +0.62745 0.62745 1.00000 +0.62745 0.62745 1.00000 +0.62745 0.62745 1.00000 +0.62745 0.62745 1.00000 +0.65882 0.59608 1.00000 +0.78431 0.47059 1.00000 +0.78431 0.47059 1.00000 +0.78431 0.47059 1.00000 +0.78431 0.47059 1.00000 +0.78431 0.47059 1.00000 +0.78431 0.47059 1.00000 +0.78431 0.47059 1.00000 +0.78431 0.47059 1.00000 +0.78431 0.47059 1.00000 +0.92157 0.61961 1.00000 +1.00000 0.70588 1.00000 +1.00000 0.70588 1.00000 +1.00000 0.70588 1.00000 +1.00000 0.70588 1.00000 +1.00000 0.70588 1.00000 +1.00000 0.70588 1.00000 +1.00000 0.70588 1.00000 +1.00000 0.70588 1.00000 +1.00000 0.70588 1.00000 +1.00000 0.86275 1.00000 +1.00000 0.86275 1.00000 +1.00000 0.86275 1.00000 +1.00000 0.86275 1.00000 +1.00000 0.86275 1.00000 +1.00000 0.86275 1.00000 +1.00000 0.86275 1.00000 +1.00000 0.86275 1.00000 +1.00000 0.86275 1.00000 +1.00000 0.89804 1.00000 +1.00000 1.00000 1.00000 +1.00000 1.00000 1.00000 +1.00000 1.00000 1.00000 +1.00000 1.00000 1.00000 +1.00000 0.86275 1.00000 +1.00000 0.86275 1.00000 +1.00000 0.76863 1.00000 +1.00000 0.70588 1.00000 +1.00000 0.70588 1.00000 +0.78431 0.47059 1.00000 +0.78431 0.47059 1.00000 +0.62745 0.62745 1.00000 +0.62745 0.62745 1.00000 +0.47059 0.78431 1.00000 +0.47059 0.78431 1.00000 +0.47059 0.78431 1.00000 +0.00000 1.00000 1.00000 +0.00000 1.00000 1.00000 +0.00000 1.00000 0.70588 +0.00000 1.00000 0.70588 +0.00000 1.00000 0.00000 +0.00000 1.00000 0.00000 +0.00000 1.00000 0.00000 +0.70588 1.00000 0.00000 +0.70588 1.00000 0.00000 +1.00000 1.00000 0.00000 +1.00000 1.00000 0.00000 +0.98431 0.85098 0.00000 +0.98431 0.85098 0.00000 +0.98431 0.81176 0.00000 +0.98824 0.72549 0.00000 +0.98824 0.72549 0.00000 +1.00000 0.47059 0.00000 +1.00000 0.47059 0.00000 +1.00000 0.00000 0.00000 +1.00000 0.00000 0.00000 +1.00000 0.00000 0.51765 +1.00000 0.00000 0.70588 +1.00000 0.00000 0.70588 +1.00000 0.00000 1.00000 +1.00000 0.00000 1.00000 +0.70588 0.00000 0.90196 +0.70588 0.00000 0.90196 +0.47059 0.00000 0.86275 +0.47059 0.00000 0.86275 +0.47059 0.00000 0.86275 +0.00000 0.00000 0.86275 +0.00000 0.00000 0.86275 +0.00000 0.00000 0.70588 +0.00000 0.00000 0.70588 +0.00000 0.00000 0.00000 +0.00000 0.00000 0.00000 +0.00000 0.00000 0.00000 diff --git a/vendor/x11iraf/ximtool/luts/manycol.lut b/vendor/x11iraf/ximtool/luts/manycol.lut new file mode 100644 index 00000000..dbedc784 --- /dev/null +++ b/vendor/x11iraf/ximtool/luts/manycol.lut @@ -0,0 +1,256 @@ +0.34902 0.34902 0.34902 +0.34902 0.34902 0.34902 +0.34902 0.34902 0.34902 +0.34902 0.34902 0.34902 +0.34902 0.34902 0.34902 +0.34902 0.34902 0.34902 +0.34902 0.34902 0.34902 +0.34902 0.34902 0.34902 +0.34902 0.34902 0.34902 +0.34902 0.34902 0.34902 +0.44706 0.78431 0.92549 +0.44706 0.78431 0.92549 +0.44706 0.78431 0.92549 +0.44706 0.78431 0.92549 +0.44706 0.78431 0.92549 +0.44706 0.78431 0.92549 +0.44706 0.78431 0.92549 +0.44706 0.78431 0.92549 +0.44706 0.78431 0.92549 +0.00000 0.00000 1.00000 +0.00000 0.00000 1.00000 +0.00000 0.00000 1.00000 +0.00000 0.00000 1.00000 +0.00000 0.00000 1.00000 +0.00000 0.00000 1.00000 +0.00000 0.00000 1.00000 +0.00000 0.00000 1.00000 +0.00000 0.00000 1.00000 +0.00000 0.69020 0.00000 +0.00000 0.69020 0.00000 +0.00000 0.69020 0.00000 +0.00000 0.69020 0.00000 +0.00000 0.69020 0.00000 +0.00000 0.69020 0.00000 +0.00000 0.69020 0.00000 +0.00000 0.69020 0.00000 +1.00000 0.00000 0.00000 +1.00000 0.00000 0.00000 +1.00000 0.00000 0.00000 +1.00000 0.00000 0.00000 +1.00000 0.00000 0.00000 +1.00000 0.00000 0.00000 +1.00000 0.00000 0.00000 +1.00000 0.00000 0.00000 +1.00000 0.00000 0.00000 +1.00000 0.69020 0.00000 +1.00000 0.69020 0.00000 +1.00000 0.69020 0.00000 +1.00000 0.69020 0.00000 +1.00000 0.69020 0.00000 +1.00000 0.69020 0.00000 +1.00000 0.69020 0.00000 +1.00000 0.69020 0.00000 +1.00000 0.69020 0.00000 +1.00000 1.00000 0.00000 +1.00000 1.00000 0.00000 +1.00000 1.00000 0.00000 +1.00000 1.00000 0.00000 +1.00000 1.00000 0.00000 +1.00000 1.00000 0.00000 +1.00000 1.00000 0.00000 +1.00000 1.00000 0.00000 +1.00000 1.00000 0.00000 +0.00000 0.88235 0.00000 +0.00000 0.88235 0.00000 +0.00000 0.88235 0.00000 +0.00000 0.88235 0.00000 +0.00000 0.88235 0.00000 +0.00000 0.88235 0.00000 +0.00000 0.88235 0.00000 +0.00000 0.88235 0.00000 +0.00000 0.88235 0.00000 +0.72549 0.00000 0.72549 +0.72549 0.00000 0.72549 +0.72549 0.00000 0.72549 +0.72549 0.00000 0.72549 +0.72549 0.00000 0.72549 +0.72549 0.00000 0.72549 +0.72549 0.00000 0.72549 +0.72549 0.00000 0.72549 +0.72549 0.00000 0.72549 +1.00000 1.00000 1.00000 +1.00000 1.00000 1.00000 +1.00000 1.00000 1.00000 +1.00000 1.00000 1.00000 +1.00000 1.00000 1.00000 +1.00000 1.00000 1.00000 +1.00000 1.00000 1.00000 +1.00000 1.00000 1.00000 +1.00000 1.00000 1.00000 +1.00000 1.00000 1.00000 +0.34902 0.34902 0.34902 +0.34902 0.34902 0.34902 +0.34902 0.34902 0.34902 +0.34902 0.34902 0.34902 +0.34902 0.34902 0.34902 +0.34902 0.34902 0.34902 +0.34902 0.34902 0.34902 +0.34902 0.34902 0.34902 +0.34902 0.34902 0.34902 +0.34902 0.34902 0.34902 +0.44706 0.78431 0.92549 +0.44706 0.78431 0.92549 +0.44706 0.78431 0.92549 +0.44706 0.78431 0.92549 +0.44706 0.78431 0.92549 +0.44706 0.78431 0.92549 +0.44706 0.78431 0.92549 +0.44706 0.78431 0.92549 +0.44706 0.78431 0.92549 +0.00000 0.00000 1.00000 +0.00000 0.00000 1.00000 +0.00000 0.00000 1.00000 +0.00000 0.00000 1.00000 +0.00000 0.00000 1.00000 +0.00000 0.00000 1.00000 +0.00000 0.00000 1.00000 +0.00000 0.00000 1.00000 +0.00000 0.00000 1.00000 +0.00000 0.69020 0.00000 +0.00000 0.69020 0.00000 +0.00000 0.69020 0.00000 +0.00000 0.69020 0.00000 +0.00000 0.69020 0.00000 +0.00000 0.69020 0.00000 +0.00000 0.69020 0.00000 +0.00000 0.69020 0.00000 +0.00000 0.69020 0.00000 +1.00000 0.00000 0.00000 +1.00000 0.00000 0.00000 +1.00000 0.00000 0.00000 +1.00000 0.00000 0.00000 +1.00000 0.00000 0.00000 +1.00000 0.00000 0.00000 +1.00000 0.00000 0.00000 +1.00000 0.00000 0.00000 +1.00000 0.00000 0.00000 +1.00000 0.69020 0.00000 +1.00000 0.69020 0.00000 +1.00000 0.69020 0.00000 +1.00000 0.69020 0.00000 +1.00000 0.69020 0.00000 +1.00000 0.69020 0.00000 +1.00000 0.69020 0.00000 +1.00000 0.69020 0.00000 +1.00000 1.00000 0.00000 +1.00000 1.00000 0.00000 +1.00000 1.00000 0.00000 +1.00000 1.00000 0.00000 +1.00000 1.00000 0.00000 +1.00000 1.00000 0.00000 +1.00000 1.00000 0.00000 +1.00000 1.00000 0.00000 +1.00000 1.00000 0.00000 +0.00000 0.88235 0.00000 +0.00000 0.88235 0.00000 +0.00000 0.88235 0.00000 +0.00000 0.88235 0.00000 +0.00000 0.88235 0.00000 +0.00000 0.88235 0.00000 +0.00000 0.88235 0.00000 +0.00000 0.88235 0.00000 +0.00000 0.88235 0.00000 +0.72549 0.00000 0.72549 +0.72549 0.00000 0.72549 +0.72549 0.00000 0.72549 +0.72549 0.00000 0.72549 +0.72549 0.00000 0.72549 +0.72549 0.00000 0.72549 +0.72549 0.00000 0.72549 +0.72549 0.00000 0.72549 +0.72549 0.00000 0.72549 +1.00000 1.00000 1.00000 +1.00000 1.00000 1.00000 +1.00000 1.00000 1.00000 +1.00000 1.00000 1.00000 +1.00000 1.00000 1.00000 +1.00000 1.00000 1.00000 +1.00000 1.00000 1.00000 +1.00000 1.00000 1.00000 +1.00000 1.00000 1.00000 +1.00000 1.00000 1.00000 +0.34902 0.34902 0.34902 +0.34902 0.34902 0.34902 +0.34902 0.34902 0.34902 +0.34902 0.34902 0.34902 +0.34902 0.34902 0.34902 +0.34902 0.34902 0.34902 +0.34902 0.34902 0.34902 +0.34902 0.34902 0.34902 +0.34902 0.34902 0.34902 +0.34902 0.34902 0.34902 +0.44706 0.78431 0.92549 +0.44706 0.78431 0.92549 +0.44706 0.78431 0.92549 +0.44706 0.78431 0.92549 +0.44706 0.78431 0.92549 +0.44706 0.78431 0.92549 +0.44706 0.78431 0.92549 +0.44706 0.78431 0.92549 +0.44706 0.78431 0.92549 +0.00000 0.00000 1.00000 +0.00000 0.00000 1.00000 +0.00000 0.00000 1.00000 +0.00000 0.00000 1.00000 +0.00000 0.00000 1.00000 +0.00000 0.00000 1.00000 +0.00000 0.00000 1.00000 +0.00000 0.00000 1.00000 +0.00000 0.00000 1.00000 +0.00000 0.69020 0.00000 +0.00000 0.69020 0.00000 +0.00000 0.69020 0.00000 +0.00000 0.69020 0.00000 +0.00000 0.69020 0.00000 +0.00000 0.69020 0.00000 +0.00000 0.69020 0.00000 +0.00000 0.69020 0.00000 +0.00000 0.69020 0.00000 +1.00000 0.00000 0.00000 +1.00000 0.00000 0.00000 +1.00000 0.00000 0.00000 +1.00000 0.00000 0.00000 +1.00000 0.00000 0.00000 +1.00000 0.00000 0.00000 +1.00000 0.00000 0.00000 +1.00000 0.00000 0.00000 +1.00000 0.00000 0.00000 +1.00000 0.69020 0.00000 +1.00000 0.69020 0.00000 +1.00000 0.69020 0.00000 +1.00000 0.69020 0.00000 +1.00000 0.69020 0.00000 +1.00000 0.69020 0.00000 +1.00000 0.69020 0.00000 +1.00000 0.69020 0.00000 +1.00000 0.69020 0.00000 +1.00000 1.00000 0.00000 +1.00000 1.00000 0.00000 +1.00000 1.00000 0.00000 +1.00000 1.00000 0.00000 +1.00000 1.00000 0.00000 +1.00000 1.00000 0.00000 +1.00000 1.00000 0.00000 +1.00000 1.00000 0.00000 +0.00000 0.88235 0.00000 +0.00000 0.88235 0.00000 +0.00000 0.88235 0.00000 +0.00000 0.88235 0.00000 +0.00000 0.88235 0.00000 +0.00000 0.88235 0.00000 +0.00000 0.88235 0.00000 +0.00000 0.88235 0.00000 +0.00000 0.88235 0.00000 +0.72549 0.00000 0.72549 +0.72549 0.00000 0.72549 diff --git a/vendor/x11iraf/ximtool/luts/mousse.lut b/vendor/x11iraf/ximtool/luts/mousse.lut new file mode 100644 index 00000000..468af5bc --- /dev/null +++ b/vendor/x11iraf/ximtool/luts/mousse.lut @@ -0,0 +1,256 @@ +0.00000 0.00000 0.00000 +0.00000 0.00000 0.00000 +0.00000 0.00000 0.00000 +0.00000 0.00000 0.00000 +0.00000 0.00000 0.00000 +0.00000 0.00000 0.00000 +0.00000 0.00000 0.00000 +0.00000 0.00000 0.00000 +0.00000 0.00000 0.06667 +0.00000 0.00000 0.06667 +0.00000 0.00000 0.06667 +0.00000 0.00000 0.06667 +0.00000 0.00000 0.06667 +0.00000 0.00000 0.06667 +0.00000 0.00000 0.06667 +0.00000 0.00000 0.06667 +0.00000 0.00000 0.13333 +0.00000 0.00000 0.13333 +0.00000 0.00000 0.13333 +0.00000 0.00000 0.13333 +0.00000 0.00000 0.13333 +0.00000 0.00000 0.13333 +0.00000 0.00000 0.13333 +0.00000 0.00000 0.13333 +0.00000 0.00000 0.20000 +0.00000 0.00000 0.20000 +0.00000 0.00000 0.20000 +0.00000 0.00000 0.20000 +0.00000 0.00000 0.20000 +0.00000 0.00000 0.20000 +0.00000 0.00000 0.20000 +0.00000 0.00000 0.20000 +0.00000 0.00000 0.26667 +0.00000 0.00000 0.26667 +0.00000 0.00000 0.26667 +0.00000 0.00000 0.26667 +0.00000 0.00000 0.26667 +0.00000 0.00000 0.26667 +0.00000 0.00000 0.26667 +0.00000 0.00000 0.26667 +0.00000 0.00000 0.33333 +0.00000 0.00000 0.33333 +0.00000 0.00000 0.33333 +0.00000 0.00000 0.33333 +0.00000 0.00000 0.33333 +0.00000 0.00000 0.33333 +0.00000 0.00000 0.33333 +0.00000 0.00000 0.33333 +0.00000 0.00000 0.40000 +0.00000 0.00000 0.40000 +0.00000 0.00000 0.40000 +0.00000 0.00000 0.40000 +0.00000 0.00000 0.40000 +0.00000 0.00000 0.40000 +0.00000 0.00000 0.40000 +0.00000 0.00000 0.40000 +0.00000 0.00000 0.46667 +0.00000 0.00000 0.46667 +0.00000 0.00000 0.46667 +0.00000 0.00000 0.46667 +0.00000 0.00000 0.46667 +0.00000 0.00000 0.46667 +0.00000 0.00000 0.46667 +0.00000 0.00000 0.46667 +0.00000 0.00000 0.53333 +0.00000 0.00000 0.53333 +0.00000 0.00000 0.53333 +0.00000 0.00000 0.53333 +0.00000 0.00000 0.53333 +0.00000 0.00000 0.53333 +0.00000 0.00000 0.53333 +0.00000 0.00000 0.53333 +0.06667 0.00000 0.53333 +0.06667 0.00000 0.53333 +0.06667 0.00000 0.53333 +0.06667 0.00000 0.53333 +0.06667 0.00000 0.53333 +0.06667 0.00000 0.53333 +0.06667 0.00000 0.53333 +0.06667 0.00000 0.53333 +0.13333 0.00000 0.53333 +0.13333 0.00000 0.53333 +0.13333 0.00000 0.53333 +0.13333 0.00000 0.53333 +0.13333 0.00000 0.53333 +0.13333 0.00000 0.53333 +0.13333 0.00000 0.53333 +0.13333 0.00000 0.53333 +0.20000 0.00000 0.53333 +0.20000 0.00000 0.53333 +0.20000 0.00000 0.53333 +0.20000 0.00000 0.53333 +0.20000 0.00000 0.53333 +0.20000 0.00000 0.53333 +0.20000 0.00000 0.53333 +0.20000 0.00000 0.53333 +0.26667 0.00000 0.53333 +0.26667 0.00000 0.53333 +0.26667 0.00000 0.53333 +0.26667 0.00000 0.53333 +0.26667 0.00000 0.53333 +0.26667 0.00000 0.53333 +0.26667 0.00000 0.53333 +0.26667 0.00000 0.53333 +0.33333 0.00000 0.53333 +0.33333 0.00000 0.53333 +0.33333 0.00000 0.53333 +0.33333 0.00000 0.53333 +0.33333 0.00000 0.53333 +0.33333 0.00000 0.53333 +0.33333 0.00000 0.53333 +0.33333 0.00000 0.53333 +0.40000 0.00000 0.53333 +0.40000 0.00000 0.53333 +0.40000 0.00000 0.53333 +0.40000 0.00000 0.53333 +0.40000 0.00000 0.53333 +0.40000 0.00000 0.53333 +0.40000 0.00000 0.53333 +0.40000 0.00000 0.53333 +0.46667 0.00000 0.53333 +0.46667 0.00000 0.53333 +0.46667 0.00000 0.53333 +0.46667 0.00000 0.53333 +0.46667 0.00000 0.53333 +0.46667 0.00000 0.53333 +0.46667 0.00000 0.53333 +0.46667 0.00000 0.53333 +0.53333 0.00000 0.53333 +0.53333 0.00000 0.53333 +0.53333 0.00000 0.53333 +0.53333 0.00000 0.53333 +0.53333 0.00000 0.46667 +0.53333 0.00000 0.46667 +0.53333 0.00000 0.46667 +0.53333 0.00000 0.46667 +0.60000 0.00000 0.40000 +0.60000 0.00000 0.40000 +0.60000 0.00000 0.40000 +0.60000 0.00000 0.40000 +0.60000 0.00000 0.33333 +0.60000 0.00000 0.33333 +0.60000 0.00000 0.33333 +0.60000 0.00000 0.33333 +0.66667 0.00000 0.26667 +0.66667 0.00000 0.26667 +0.66667 0.00000 0.26667 +0.66667 0.00000 0.26667 +0.66667 0.00000 0.20000 +0.66667 0.00000 0.20000 +0.66667 0.00000 0.20000 +0.66667 0.00000 0.20000 +0.73333 0.00000 0.13333 +0.73333 0.00000 0.13333 +0.73333 0.00000 0.13333 +0.73333 0.00000 0.13333 +0.73333 0.00000 0.06667 +0.73333 0.00000 0.06667 +0.73333 0.00000 0.06667 +0.73333 0.00000 0.06667 +0.80000 0.00000 0.00000 +0.80000 0.00000 0.00000 +0.80000 0.00000 0.00000 +0.80000 0.00000 0.00000 +0.80000 0.00000 0.00000 +0.80000 0.00000 0.00000 +0.80000 0.00000 0.00000 +0.80000 0.00000 0.00000 +0.86667 0.00000 0.00000 +0.86667 0.00000 0.00000 +0.86667 0.00000 0.00000 +0.86667 0.00000 0.00000 +0.86667 0.00000 0.00000 +0.86667 0.00000 0.00000 +0.86667 0.00000 0.00000 +0.86667 0.00000 0.00000 +0.93333 0.00000 0.00000 +0.93333 0.00000 0.00000 +0.93333 0.00000 0.00000 +0.93333 0.00000 0.00000 +0.93333 0.00000 0.00000 +0.93333 0.00000 0.00000 +0.93333 0.00000 0.00000 +0.93333 0.00000 0.00000 +1.00000 0.00000 0.00000 +1.00000 0.00000 0.00000 +1.00000 0.00000 0.00000 +1.00000 0.00000 0.00000 +1.00000 0.00000 0.00000 +1.00000 0.00000 0.00000 +1.00000 0.00000 0.00000 +1.00000 0.00000 0.00000 +1.00000 0.00000 0.00000 +1.00000 0.00000 0.00000 +1.00000 0.00000 0.00000 +1.00000 0.00000 0.00000 +1.00000 0.00000 0.00000 +1.00000 0.00000 0.00000 +1.00000 0.06667 0.00000 +1.00000 0.06667 0.00000 +1.00000 0.13333 0.00000 +1.00000 0.13333 0.00000 +1.00000 0.20000 0.00000 +1.00000 0.20000 0.00000 +1.00000 0.26667 0.00000 +1.00000 0.26667 0.00000 +1.00000 0.33333 0.00000 +1.00000 0.33333 0.00000 +1.00000 0.40000 0.00000 +1.00000 0.40000 0.00000 +1.00000 0.46667 0.00000 +1.00000 0.46667 0.00000 +1.00000 0.53333 0.00000 +1.00000 0.53333 0.00000 +1.00000 0.60000 0.00000 +1.00000 0.60000 0.00000 +1.00000 0.66667 0.00000 +1.00000 0.66667 0.00000 +1.00000 0.73333 0.00000 +1.00000 0.73333 0.00000 +1.00000 0.80000 0.00000 +1.00000 0.80000 0.00000 +1.00000 0.86667 0.00000 +1.00000 0.86667 0.00000 +1.00000 0.93333 0.00000 +1.00000 0.93333 0.00000 +1.00000 1.00000 0.00000 +1.00000 1.00000 0.00000 +1.00000 1.00000 0.00000 +1.00000 1.00000 0.00000 +1.00000 1.00000 0.06667 +1.00000 1.00000 0.06667 +1.00000 1.00000 0.13333 +1.00000 1.00000 0.13333 +1.00000 1.00000 0.20000 +1.00000 1.00000 0.20000 +1.00000 1.00000 0.26667 +1.00000 1.00000 0.26667 +1.00000 1.00000 0.33333 +1.00000 1.00000 0.33333 +1.00000 1.00000 0.40000 +1.00000 1.00000 0.40000 +1.00000 1.00000 0.46667 +1.00000 1.00000 0.46667 +1.00000 1.00000 0.53333 +1.00000 1.00000 0.53333 +1.00000 1.00000 0.60000 +1.00000 1.00000 0.60000 +1.00000 1.00000 0.66667 +1.00000 1.00000 0.66667 +1.00000 1.00000 0.73333 +1.00000 1.00000 0.73333 +1.00000 1.00000 0.80000 +1.00000 1.00000 0.80000 +1.00000 1.00000 0.86667 +1.00000 1.00000 1.00000 diff --git a/vendor/x11iraf/ximtool/luts/pastel.lut b/vendor/x11iraf/ximtool/luts/pastel.lut new file mode 100644 index 00000000..c45fcdea --- /dev/null +++ b/vendor/x11iraf/ximtool/luts/pastel.lut @@ -0,0 +1,256 @@ +0.00000 0.00000 0.00000 +0.00000 0.00000 1.00000 +0.01961 0.00000 0.98039 +0.05490 0.00000 0.94510 +0.08627 0.00392 0.91373 +0.10980 0.00392 0.89020 +0.13725 0.00392 0.86275 +0.15686 0.00392 0.84314 +0.18039 0.00392 0.81961 +0.20000 0.00784 0.80000 +0.21569 0.00784 0.78431 +0.23529 0.00784 0.76471 +0.25098 0.00784 0.74902 +0.26275 0.01176 0.73725 +0.28235 0.01176 0.71765 +0.29412 0.01176 0.70588 +0.30588 0.01176 0.69412 +0.31765 0.01176 0.68235 +0.33333 0.01569 0.66667 +0.34118 0.01569 0.65882 +0.35294 0.01569 0.64706 +0.36078 0.01569 0.63922 +0.37255 0.01961 0.62745 +0.38431 0.01961 0.61569 +0.39216 0.01961 0.60784 +0.40000 0.01961 0.60000 +0.41176 0.02353 0.58824 +0.41961 0.02353 0.58039 +0.43137 0.02353 0.56863 +0.43529 0.02745 0.56471 +0.44314 0.02745 0.55686 +0.45098 0.02745 0.54902 +0.45882 0.02745 0.54118 +0.46667 0.03137 0.53333 +0.47059 0.03137 0.52941 +0.48235 0.03137 0.51765 +0.48627 0.03529 0.51373 +0.49412 0.03529 0.50588 +0.50196 0.03529 0.49804 +0.50588 0.03529 0.49412 +0.50980 0.04314 0.49020 +0.51765 0.04314 0.48235 +0.52157 0.04314 0.47843 +0.53333 0.04706 0.46667 +0.53725 0.04706 0.46275 +0.54118 0.04706 0.45882 +0.54902 0.05098 0.45098 +0.55294 0.05098 0.44706 +0.55686 0.05098 0.44314 +0.56078 0.05490 0.43922 +0.56471 0.05490 0.43529 +0.57255 0.05490 0.42745 +0.58039 0.05882 0.41961 +0.58431 0.05882 0.41569 +0.58824 0.05882 0.41176 +0.59216 0.06275 0.40784 +0.59608 0.06275 0.40392 +0.60000 0.06275 0.40000 +0.60392 0.06667 0.39608 +0.60784 0.06667 0.39216 +0.61176 0.06667 0.38824 +0.61569 0.07059 0.38431 +0.61961 0.07059 0.38039 +0.62745 0.07451 0.37255 +0.63137 0.07451 0.36863 +0.63529 0.07451 0.36471 +0.63922 0.07843 0.36078 +0.64314 0.07843 0.35686 +0.64706 0.08235 0.35294 +0.65098 0.08235 0.34902 +0.65490 0.08235 0.34510 +0.65490 0.08627 0.34510 +0.65882 0.08627 0.34118 +0.66275 0.09020 0.33725 +0.66667 0.09020 0.33333 +0.67059 0.09020 0.32941 +0.67843 0.09412 0.32157 +0.67843 0.09412 0.32157 +0.68235 0.09804 0.31765 +0.68627 0.09804 0.31373 +0.69020 0.10196 0.30980 +0.69020 0.10196 0.30980 +0.69412 0.10588 0.30588 +0.69804 0.10588 0.30196 +0.70196 0.10980 0.29804 +0.70196 0.10980 0.29804 +0.70588 0.10980 0.29412 +0.70980 0.11765 0.29020 +0.71373 0.11765 0.28627 +0.71373 0.12157 0.28627 +0.71765 0.12157 0.28235 +0.72157 0.12549 0.27843 +0.72157 0.12549 0.27843 +0.72941 0.12941 0.27059 +0.73333 0.12941 0.26667 +0.73333 0.13333 0.26667 +0.73725 0.13725 0.26275 +0.74118 0.13725 0.25882 +0.74118 0.14118 0.25882 +0.74510 0.14118 0.25490 +0.74510 0.14510 0.25490 +0.74902 0.14510 0.25098 +0.75294 0.14902 0.24706 +0.75294 0.14902 0.24706 +0.75686 0.15294 0.24314 +0.76078 0.15686 0.23922 +0.76078 0.15686 0.23922 +0.76471 0.16078 0.23529 +0.76471 0.16078 0.23529 +0.76863 0.16471 0.23137 +0.76863 0.16863 0.23137 +0.77255 0.16863 0.22745 +0.78039 0.17255 0.21961 +0.78039 0.17255 0.21961 +0.78431 0.17647 0.21569 +0.78431 0.18039 0.21569 +0.78824 0.18039 0.21176 +0.78824 0.18431 0.21176 +0.79216 0.18824 0.20784 +0.79216 0.18824 0.20784 +0.79608 0.19608 0.20392 +0.79608 0.20000 0.20392 +0.80000 0.20000 0.20000 +0.80000 0.20392 0.20000 +0.80392 0.20784 0.19608 +0.80392 0.20784 0.19608 +0.80784 0.21176 0.19216 +0.80784 0.21569 0.19216 +0.81176 0.21961 0.18824 +0.81176 0.21961 0.18824 +0.81569 0.22353 0.18431 +0.81569 0.22745 0.18431 +0.81961 0.23137 0.18039 +0.81961 0.23137 0.18039 +0.82745 0.23529 0.17255 +0.82745 0.23922 0.17255 +0.83137 0.24314 0.16863 +0.83137 0.24314 0.16863 +0.83529 0.24706 0.16471 +0.83529 0.25098 0.16471 +0.83922 0.25490 0.16078 +0.83922 0.25882 0.16078 +0.83922 0.26275 0.16078 +0.84314 0.26275 0.15686 +0.84314 0.27059 0.15686 +0.84706 0.27451 0.15294 +0.84706 0.27843 0.15294 +0.85098 0.28235 0.14902 +0.85098 0.28627 0.14902 +0.85490 0.29020 0.14510 +0.85490 0.29412 0.14510 +0.85490 0.29804 0.14510 +0.85882 0.29804 0.14118 +0.85882 0.30196 0.14118 +0.86275 0.30588 0.13725 +0.86275 0.30980 0.13725 +0.86275 0.31373 0.13725 +0.86667 0.31765 0.13333 +0.86667 0.32157 0.13333 +0.87059 0.32549 0.12941 +0.87059 0.33333 0.12941 +0.87059 0.33725 0.12941 +0.87843 0.34118 0.12157 +0.87843 0.34510 0.12157 +0.88235 0.34902 0.11765 +0.88235 0.35294 0.11765 +0.88235 0.35686 0.11765 +0.88627 0.36078 0.11373 +0.88627 0.36471 0.11373 +0.89020 0.37255 0.10980 +0.89020 0.37647 0.10980 +0.89020 0.38039 0.10980 +0.89412 0.38431 0.10588 +0.89412 0.38824 0.10588 +0.89412 0.39216 0.10588 +0.89804 0.40000 0.10196 +0.89804 0.40392 0.10196 +0.89804 0.40784 0.10196 +0.90196 0.41176 0.09804 +0.90196 0.41961 0.09804 +0.90588 0.42353 0.09412 +0.90588 0.42745 0.09412 +0.90588 0.43529 0.09412 +0.90980 0.43922 0.09020 +0.90980 0.44314 0.09020 +0.90980 0.45098 0.09020 +0.91373 0.45490 0.08627 +0.91373 0.45882 0.08627 +0.91373 0.46667 0.08627 +0.91765 0.47059 0.08235 +0.91765 0.47843 0.08235 +0.91765 0.48235 0.08235 +0.92157 0.49020 0.07843 +0.92157 0.49412 0.07843 +0.92157 0.50196 0.07843 +0.92941 0.50588 0.07059 +0.92941 0.51373 0.07059 +0.92941 0.51765 0.07059 +0.93333 0.52549 0.06667 +0.93333 0.52941 0.06667 +0.93333 0.53725 0.06667 +0.93725 0.54118 0.06275 +0.93725 0.54902 0.06275 +0.93725 0.55686 0.06275 +0.94118 0.56078 0.05882 +0.94118 0.56863 0.05882 +0.94118 0.57647 0.05882 +0.94118 0.58039 0.05882 +0.94510 0.58824 0.05490 +0.94510 0.59608 0.05490 +0.94510 0.60000 0.05490 +0.94902 0.60784 0.05098 +0.94902 0.61569 0.05098 +0.94902 0.62353 0.05098 +0.95294 0.63137 0.04706 +0.95294 0.63529 0.04706 +0.95294 0.64314 0.04706 +0.95686 0.65098 0.04314 +0.95686 0.65882 0.04314 +0.95686 0.66667 0.04314 +0.95686 0.67451 0.04314 +0.96078 0.68235 0.03922 +0.96078 0.69020 0.03922 +0.96078 0.69804 0.03922 +0.96471 0.70588 0.03529 +0.96471 0.71373 0.03529 +0.96471 0.72157 0.03529 +0.96471 0.72941 0.03529 +0.96863 0.73725 0.03137 +0.96863 0.74510 0.03137 +0.96863 0.75294 0.03137 +0.97255 0.76078 0.02745 +0.97255 0.77255 0.02745 +0.97255 0.78039 0.02745 +0.97255 0.78824 0.02745 +0.98039 0.79608 0.01961 +0.98039 0.80392 0.01961 +0.98039 0.81569 0.01961 +0.98039 0.82353 0.01961 +0.98431 0.83137 0.01569 +0.98431 0.84314 0.01569 +0.98431 0.85098 0.01569 +0.98824 0.86275 0.01176 +0.98824 0.87059 0.01176 +0.98824 0.87843 0.01176 +0.98824 0.89020 0.01176 +0.99216 0.89804 0.00784 +0.99216 0.90980 0.00784 +0.99216 0.91765 0.00784 +0.99216 0.92941 0.00784 +0.99608 0.94118 0.00392 +0.99608 0.94902 0.00392 +0.99608 0.96078 0.00392 +0.99608 0.97255 0.00392 +1.00000 0.98039 0.00000 +1.00000 0.99216 0.00000 diff --git a/vendor/x11iraf/ximtool/luts/pseudo1.lut b/vendor/x11iraf/ximtool/luts/pseudo1.lut new file mode 100644 index 00000000..bea23581 --- /dev/null +++ b/vendor/x11iraf/ximtool/luts/pseudo1.lut @@ -0,0 +1,256 @@ +0.00000 0.00000 1.00000 +0.00000 0.00000 0.99216 +0.00000 0.00000 0.98824 +0.00392 0.00000 0.98431 +0.00392 0.00000 0.98039 +0.00784 0.00000 0.97647 +0.00784 0.00000 0.96863 +0.01176 0.00000 0.96471 +0.01569 0.00000 0.96078 +0.01569 0.00000 0.95686 +0.01961 0.00000 0.95294 +0.01961 0.00000 0.94510 +0.02353 0.00784 0.94118 +0.02745 0.01569 0.93725 +0.02745 0.02745 0.93333 +0.03137 0.03922 0.92941 +0.03529 0.05098 0.92157 +0.03529 0.06667 0.91765 +0.03922 0.08235 0.91373 +0.04314 0.09804 0.90980 +0.04706 0.11765 0.90588 +0.04706 0.09804 0.90196 +0.05098 0.08235 0.89412 +0.05490 0.06667 0.89020 +0.05490 0.05098 0.88627 +0.05882 0.03922 0.88235 +0.06275 0.02745 0.87843 +0.06667 0.01569 0.87059 +0.07059 0.00784 0.86667 +0.07059 0.00000 0.86275 +0.07451 0.00000 0.85882 +0.07843 0.00392 0.85490 +0.08235 0.01176 0.85098 +0.08235 0.02353 0.84314 +0.08627 0.03922 0.83922 +0.09020 0.05490 0.83529 +0.09412 0.07059 0.83137 +0.09804 0.09020 0.82745 +0.09804 0.10980 0.82353 +0.10196 0.13333 0.81569 +0.10588 0.15686 0.81176 +0.10980 0.13333 0.80784 +0.11373 0.10980 0.80392 +0.11765 0.09020 0.80000 +0.11765 0.07059 0.79608 +0.12157 0.05490 0.79216 +0.12549 0.03922 0.78431 +0.12941 0.02353 0.78039 +0.13333 0.01176 0.77647 +0.13725 0.00392 0.77255 +0.14118 0.00000 0.76863 +0.14118 0.00392 0.76471 +0.14510 0.01569 0.75686 +0.14902 0.03137 0.75294 +0.15294 0.04706 0.74902 +0.15686 0.06667 0.74510 +0.16078 0.09020 0.74118 +0.16471 0.11373 0.73725 +0.16863 0.13725 0.73333 +0.17255 0.16471 0.72549 +0.17255 0.19608 0.72157 +0.17647 0.16471 0.71765 +0.18039 0.13725 0.71373 +0.18431 0.11373 0.70980 +0.18824 0.09020 0.70588 +0.19216 0.06667 0.70196 +0.19608 0.04706 0.69804 +0.20000 0.03137 0.69020 +0.20392 0.01569 0.68627 +0.20784 0.00392 0.68235 +0.21176 0.00000 0.67843 +0.21176 0.00784 0.67451 +0.21569 0.02353 0.67059 +0.21961 0.04314 0.66667 +0.22353 0.06667 0.66275 +0.22745 0.09412 0.65490 +0.23137 0.12549 0.65098 +0.23529 0.15686 0.64706 +0.23922 0.19608 0.64314 +0.24314 0.23137 0.63922 +0.24706 0.27451 0.63529 +0.25098 0.23137 0.63137 +0.25490 0.19608 0.62745 +0.25882 0.15686 0.61961 +0.26275 0.12549 0.61569 +0.26667 0.09412 0.61176 +0.27059 0.06667 0.60784 +0.27451 0.04314 0.60392 +0.27843 0.02353 0.60000 +0.28235 0.00784 0.59608 +0.28627 0.00000 0.59216 +0.29020 0.00784 0.58824 +0.29412 0.03137 0.58431 +0.29804 0.05490 0.57647 +0.29804 0.08627 0.57255 +0.30196 0.12157 0.56863 +0.30588 0.16078 0.56471 +0.30980 0.20392 0.56078 +0.31373 0.25098 0.55686 +0.31765 0.29804 0.55294 +0.32157 0.35294 0.54902 +0.32549 0.29804 0.54510 +0.32941 0.25098 0.54118 +0.33333 0.20392 0.53725 +0.33725 0.16078 0.52941 +0.34118 0.12157 0.52549 +0.34510 0.08627 0.52157 +0.34902 0.05490 0.51765 +0.35294 0.03137 0.51373 +0.35686 0.00784 0.50980 +0.36078 0.00000 0.50588 +0.36471 0.01176 0.50196 +0.37255 0.03529 0.49804 +0.37647 0.07059 0.49412 +0.38039 0.10588 0.49020 +0.38431 0.14902 0.48627 +0.38824 0.20000 0.48235 +0.39216 0.25098 0.47843 +0.39608 0.30588 0.47059 +0.40000 0.36471 0.46667 +0.40392 0.43137 0.46275 +0.40784 0.36471 0.45882 +0.41176 0.30588 0.45490 +0.41569 0.25098 0.45098 +0.41961 0.20000 0.44706 +0.42353 0.14902 0.44314 +0.42745 0.10588 0.43922 +0.43137 0.07059 0.43529 +0.43529 0.03529 0.43137 +0.43922 0.01176 0.42745 +0.44314 0.00000 0.42353 +0.44706 0.01569 0.41961 +0.45098 0.04314 0.41569 +0.45490 0.08235 0.41176 +0.45882 0.12549 0.40784 +0.46275 0.17647 0.40392 +0.46667 0.23529 0.40000 +0.47059 0.29804 0.39608 +0.47843 0.36471 0.39216 +0.48235 0.43137 0.38824 +0.48627 0.50980 0.38431 +0.49020 0.43137 0.38039 +0.49412 0.36471 0.37647 +0.49804 0.29804 0.37255 +0.50196 0.23529 0.36471 +0.50588 0.17647 0.36078 +0.50980 0.12549 0.35686 +0.51373 0.08235 0.35294 +0.51765 0.04314 0.34902 +0.52157 0.01569 0.34510 +0.52549 0.00000 0.34118 +0.52941 0.01569 0.33725 +0.53725 0.05098 0.33333 +0.54118 0.09412 0.32941 +0.54510 0.14510 0.32549 +0.54902 0.20784 0.32157 +0.55294 0.27059 0.31765 +0.55686 0.34118 0.31373 +0.56078 0.41961 0.30980 +0.56471 0.50196 0.30588 +0.56863 0.58824 0.30196 +0.57255 0.50196 0.29804 +0.57647 0.41961 0.29804 +0.58431 0.34118 0.29412 +0.58824 0.27059 0.29020 +0.59216 0.20784 0.28627 +0.59608 0.14510 0.28235 +0.60000 0.09412 0.27843 +0.60392 0.05098 0.27451 +0.60784 0.01569 0.27059 +0.61176 0.00000 0.26667 +0.61569 0.01961 0.26275 +0.61961 0.05882 0.25882 +0.62745 0.10588 0.25490 +0.63137 0.16863 0.25098 +0.63529 0.23529 0.24706 +0.63922 0.30980 0.24314 +0.64314 0.38824 0.23922 +0.64706 0.47451 0.23529 +0.65098 0.56863 0.23137 +0.65490 0.66667 0.22745 +0.66275 0.56863 0.22353 +0.66667 0.47451 0.21961 +0.67059 0.38824 0.21569 +0.67451 0.30980 0.21176 +0.67843 0.23529 0.21176 +0.68235 0.16863 0.20784 +0.68627 0.10588 0.20392 +0.69020 0.05882 0.20000 +0.69804 0.01961 0.19608 +0.70196 0.00000 0.19216 +0.70588 0.02353 0.18824 +0.70980 0.06275 0.18431 +0.71373 0.12157 0.18039 +0.71765 0.18824 0.17647 +0.72157 0.26275 0.17255 +0.72549 0.34510 0.17255 +0.73333 0.43529 0.16863 +0.73725 0.52941 0.16471 +0.74118 0.63529 0.16078 +0.74510 0.74510 0.15686 +0.74902 0.63529 0.15294 +0.75294 0.52941 0.14902 +0.75686 0.43529 0.14510 +0.76471 0.34510 0.14118 +0.76863 0.26275 0.14118 +0.77255 0.18824 0.13725 +0.77647 0.12157 0.13333 +0.78039 0.06275 0.12941 +0.78431 0.02353 0.12549 +0.79216 0.00000 0.12157 +0.79608 0.02353 0.11765 +0.80000 0.07059 0.11765 +0.80392 0.13333 0.11373 +0.80784 0.20784 0.10980 +0.81176 0.29020 0.10588 +0.81569 0.38039 0.10196 +0.82353 0.47843 0.09804 +0.82745 0.58824 0.09804 +0.83137 0.70196 0.09412 +0.83529 0.82353 0.09020 +0.83922 0.70196 0.08627 +0.84314 0.58824 0.08235 +0.85098 0.47843 0.08235 +0.85490 0.38039 0.07843 +0.85882 0.29020 0.07451 +0.86275 0.20784 0.07059 +0.86667 0.13333 0.07059 +0.87059 0.07059 0.06667 +0.87843 0.02353 0.06275 +0.88235 0.00000 0.05882 +0.88627 0.02745 0.05490 +0.89020 0.07843 0.05490 +0.89412 0.14510 0.05098 +0.90196 0.22745 0.04706 +0.90588 0.31765 0.04706 +0.90980 0.41569 0.04314 +0.91373 0.52549 0.03922 +0.91765 0.64314 0.03529 +0.92157 0.76863 0.03529 +0.92941 0.90196 0.03137 +0.93333 0.76863 0.02745 +0.93725 0.64314 0.02745 +0.94118 0.52549 0.02353 +0.94510 0.41569 0.01961 +0.95294 0.31765 0.01961 +0.95686 0.25882 0.01569 +0.96078 0.23137 0.01569 +0.96471 0.23922 0.01176 +0.96863 0.27843 0.00784 +0.97647 0.35294 0.00784 +0.98039 0.46275 0.00392 +0.98431 0.58431 0.00392 +0.98824 0.71373 0.00000 +0.99216 0.85098 0.00000 +1.00000 1.00000 0.00000 diff --git a/vendor/x11iraf/ximtool/luts/pseudo2.lut b/vendor/x11iraf/ximtool/luts/pseudo2.lut new file mode 100644 index 00000000..7bb4d78f --- /dev/null +++ b/vendor/x11iraf/ximtool/luts/pseudo2.lut @@ -0,0 +1,256 @@ +0.30980 0.29020 0.22353 +0.32157 0.30196 0.23922 +0.33333 0.31765 0.25490 +0.34510 0.32941 0.27059 +0.35686 0.34510 0.29020 +0.36863 0.36078 0.30588 +0.38039 0.37647 0.32549 +0.39216 0.38824 0.34510 +0.40392 0.40392 0.36471 +0.41569 0.41961 0.38431 +0.42745 0.43529 0.40392 +0.43922 0.45098 0.42353 +0.45098 0.46667 0.44314 +0.46275 0.48235 0.46667 +0.47451 0.49804 0.48627 +0.49020 0.51765 0.50980 +0.50196 0.53333 0.53333 +0.51373 0.54902 0.55686 +0.52549 0.56863 0.58039 +0.54118 0.58431 0.60392 +0.55294 0.60000 0.62745 +0.56863 0.61961 0.65098 +0.58039 0.63529 0.67843 +0.59216 0.65490 0.70196 +0.60784 0.67059 0.72941 +0.61961 0.69020 0.75686 +0.63529 0.70980 0.78431 +0.64706 0.72549 0.75686 +0.66275 0.74510 0.72941 +0.67843 0.76471 0.70588 +0.69020 0.78431 0.68235 +0.70588 0.80392 0.65882 +0.71765 0.82353 0.64314 +0.73333 0.80392 0.62353 +0.74902 0.78824 0.60392 +0.76471 0.77255 0.58824 +0.77647 0.75686 0.57255 +0.79216 0.74118 0.55686 +0.80784 0.73333 0.54118 +0.82353 0.71765 0.52941 +0.83922 0.70588 0.51373 +0.85490 0.69804 0.50588 +0.87059 0.68235 0.49412 +0.85490 0.67451 0.48627 +0.83922 0.66667 0.47843 +0.82745 0.65882 0.47059 +0.81569 0.65098 0.46275 +0.80392 0.63922 0.45882 +0.79216 0.63529 0.45490 +0.78431 0.62745 0.45098 +0.77255 0.61961 0.44706 +0.76078 0.61176 0.44706 +0.74902 0.60784 0.44706 +0.74510 0.60392 0.44706 +0.73333 0.60000 0.44706 +0.72941 0.59608 0.45098 +0.71765 0.59216 0.45490 +0.70980 0.58824 0.45882 +0.70588 0.58824 0.46275 +0.69412 0.58431 0.47059 +0.69020 0.58039 0.47843 +0.68235 0.58039 0.48627 +0.67843 0.58039 0.49412 +0.67451 0.57647 0.50588 +0.66667 0.58039 0.51373 +0.66275 0.57647 0.52941 +0.65490 0.58039 0.54118 +0.65098 0.58039 0.55686 +0.64706 0.58039 0.57255 +0.64314 0.58431 0.58824 +0.63529 0.58824 0.60392 +0.63529 0.58824 0.62353 +0.63137 0.59216 0.64314 +0.62745 0.59608 0.65882 +0.62745 0.60000 0.68235 +0.62353 0.60392 0.70588 +0.62353 0.60784 0.72941 +0.61961 0.61176 0.75686 +0.61961 0.61961 0.78431 +0.61569 0.62745 0.75686 +0.61569 0.63529 0.72941 +0.61176 0.63922 0.70588 +0.61176 0.65098 0.68235 +0.61176 0.65882 0.65882 +0.61176 0.66667 0.64314 +0.61176 0.67451 0.62353 +0.61176 0.68235 0.60392 +0.61176 0.69804 0.58824 +0.61176 0.70588 0.57255 +0.61569 0.71765 0.55686 +0.61569 0.73333 0.54118 +0.61961 0.74118 0.52941 +0.61961 0.75686 0.51373 +0.62353 0.77255 0.50588 +0.62353 0.78824 0.49412 +0.62745 0.80392 0.48627 +0.62745 0.82353 0.47843 +0.63137 0.80392 0.47059 +0.63529 0.78824 0.46275 +0.63529 0.77255 0.45882 +0.64314 0.75686 0.45490 +0.64706 0.74118 0.45098 +0.65098 0.73333 0.44706 +0.65490 0.71765 0.44706 +0.66275 0.70588 0.44706 +0.66667 0.69804 0.44706 +0.67451 0.68235 0.44706 +0.67843 0.67451 0.45098 +0.68235 0.66667 0.45490 +0.69020 0.65882 0.45882 +0.69412 0.65098 0.46275 +0.70588 0.63922 0.47059 +0.70980 0.63529 0.47843 +0.71765 0.62745 0.48627 +0.72941 0.61961 0.49412 +0.73333 0.61176 0.50588 +0.74510 0.60784 0.51373 +0.74902 0.60392 0.52941 +0.76078 0.60000 0.54118 +0.77647 0.59608 0.55686 +0.79216 0.59216 0.57255 +0.80392 0.58824 0.58824 +0.81961 0.58824 0.60392 +0.83922 0.58431 0.62353 +0.85490 0.58039 0.64314 +0.87451 0.58039 0.65882 +0.89804 0.58039 0.68235 +0.92157 0.57647 0.70588 +0.91373 0.58039 0.72941 +0.90588 0.57647 0.75686 +0.89804 0.58039 0.78431 +0.89412 0.58039 0.75686 +0.88627 0.58039 0.72941 +0.88235 0.58431 0.70588 +0.87843 0.58824 0.68235 +0.87451 0.58824 0.65882 +0.87059 0.59216 0.64314 +0.86275 0.59608 0.62353 +0.86275 0.60000 0.60392 +0.85882 0.60392 0.58824 +0.85882 0.60784 0.57255 +0.85490 0.61176 0.55686 +0.85098 0.61961 0.54118 +0.85490 0.62745 0.52941 +0.85098 0.63529 0.51373 +0.85098 0.63922 0.50588 +0.85098 0.65490 0.49412 +0.85098 0.67059 0.48627 +0.85490 0.68235 0.47843 +0.85098 0.69804 0.47059 +0.85490 0.71373 0.46275 +0.85098 0.74118 0.45882 +0.85490 0.75686 0.45490 +0.85882 0.78039 0.45098 +0.86275 0.80392 0.44706 +0.86275 0.82353 0.44706 +0.86667 0.85098 0.44706 +0.87059 0.87843 0.44706 +0.87451 0.90980 0.44706 +0.87843 0.93725 0.45098 +0.88235 0.97255 0.45490 +0.88627 0.96471 0.45882 +0.89020 0.96078 0.46275 +0.89804 0.95686 0.47059 +0.90196 0.95294 0.47843 +0.90588 0.94902 0.48627 +0.91373 0.94902 0.49412 +0.91765 0.94510 0.50588 +0.92549 0.94118 0.51373 +0.92941 0.94510 0.52941 +0.94118 0.94118 0.54118 +0.94902 0.94510 0.55686 +0.95294 0.94510 0.57255 +0.96078 0.94510 0.58824 +0.97255 0.94902 0.60392 +0.98039 0.94902 0.62745 +0.98824 0.95294 0.65098 +0.99608 0.95686 0.67451 +1.00000 0.95686 0.70588 +1.00000 0.96078 0.73333 +1.00000 0.96863 0.76863 +1.00000 0.97255 0.80392 +1.00000 0.98039 0.84314 +1.00000 0.98431 0.82353 +0.98824 0.99216 0.80784 +0.96078 0.99608 0.79608 +0.93333 1.00000 0.78431 +0.90980 1.00000 0.77255 +0.88235 1.00000 0.76471 +0.85882 1.00000 0.75686 +0.83137 1.00000 0.74902 +0.80784 1.00000 0.74118 +0.78039 1.00000 0.73725 +0.75686 1.00000 0.73333 +0.73333 1.00000 0.72941 +0.70588 1.00000 0.72941 +0.69020 1.00000 0.72941 +0.66667 0.97255 0.72941 +0.64314 0.93725 0.73333 +0.62353 0.90196 0.73725 +0.60392 0.86667 0.74118 +0.58431 0.83137 0.74510 +0.56078 0.79608 0.75294 +0.54510 0.76078 0.75686 +0.52941 0.73333 0.76863 +0.51373 0.69804 0.77647 +0.50196 0.67059 0.78824 +0.48627 0.63922 0.80392 +0.47059 0.61176 0.81569 +0.45490 0.58039 0.83137 +0.44314 0.55294 0.84706 +0.43529 0.52941 0.86667 +0.42353 0.50588 0.88235 +0.41569 0.47843 0.90196 +0.41176 0.45490 0.92549 +0.40392 0.43529 0.87843 +0.40000 0.41569 0.83922 +0.39216 0.39216 0.79608 +0.38824 0.37647 0.75686 +0.38431 0.35686 0.72157 +0.38039 0.34118 0.67843 +0.38039 0.32941 0.65098 +0.37255 0.31765 0.61569 +0.37255 0.30588 0.58431 +0.37255 0.29804 0.55686 +0.37255 0.29412 0.52549 +0.37647 0.28627 0.50196 +0.37647 0.28235 0.47843 +0.38039 0.28235 0.45882 +0.38431 0.27843 0.43922 +0.38824 0.27843 0.41961 +0.39608 0.27843 0.40784 +0.40000 0.28235 0.40000 +0.40784 0.28627 0.38824 +0.41569 0.29020 0.38431 +0.42353 0.29804 0.38039 +0.43529 0.30588 0.37647 +0.44706 0.31765 0.37647 +0.45882 0.32549 0.38039 +0.47059 0.34118 0.38431 +0.48235 0.35294 0.39216 +0.50196 0.37255 0.40000 +0.51765 0.39216 0.40784 +0.53725 0.41176 0.42353 +0.55686 0.43922 0.43529 +0.57647 0.46667 0.45098 +0.60000 0.49804 0.47451 +0.62745 0.52941 0.49804 +0.65490 0.56078 0.52549 +0.68235 0.59216 0.54902 +0.70980 0.62745 0.58431 +0.74118 0.66275 0.61569 +0.77255 0.70196 0.65098 +0.80392 0.74118 0.69020 +0.83529 0.78039 0.73333 +0.87059 0.82353 0.78431 diff --git a/vendor/x11iraf/ximtool/luts/rainbow.lut b/vendor/x11iraf/ximtool/luts/rainbow.lut new file mode 100644 index 00000000..37e1977a --- /dev/null +++ b/vendor/x11iraf/ximtool/luts/rainbow.lut @@ -0,0 +1,256 @@ +0.00000 0.00000 0.16471 +0.02745 0.00000 0.18431 +0.05882 0.00000 0.20000 +0.08627 0.00000 0.21961 +0.11373 0.00000 0.23922 +0.14510 0.00000 0.25882 +0.17647 0.00000 0.27843 +0.20392 0.00000 0.29804 +0.23137 0.00000 0.31765 +0.26275 0.00000 0.33725 +0.29412 0.00000 0.35686 +0.32157 0.00000 0.37647 +0.35294 0.00000 0.39608 +0.38039 0.00000 0.41569 +0.41176 0.00000 0.43529 +0.43922 0.00000 0.45490 +0.47059 0.00000 0.47451 +0.49804 0.00000 0.49412 +0.52941 0.00000 0.51373 +0.55686 0.00000 0.53725 +0.58824 0.00000 0.55686 +0.55686 0.00000 0.57647 +0.52941 0.00000 0.59608 +0.49804 0.00000 0.61569 +0.47059 0.00000 0.63922 +0.43922 0.00000 0.65882 +0.41176 0.00000 0.67843 +0.38039 0.00000 0.70196 +0.35294 0.00000 0.72157 +0.32157 0.00000 0.74118 +0.29412 0.00000 0.76471 +0.26275 0.00000 0.78431 +0.23137 0.00000 0.80392 +0.20392 0.00000 0.82745 +0.17647 0.00000 0.84706 +0.14510 0.00000 0.87059 +0.11373 0.00000 0.89020 +0.08627 0.00000 0.91373 +0.05882 0.00000 0.93333 +0.02745 0.00000 0.95686 +0.00000 0.00000 0.97647 +0.00000 0.00000 1.00000 +0.00000 0.02353 0.97647 +0.00000 0.04706 0.95686 +0.00000 0.06275 0.93333 +0.00000 0.08235 0.91373 +0.00000 0.09804 0.89020 +0.00000 0.11373 0.87059 +0.00000 0.12941 0.84706 +0.00000 0.14118 0.82745 +0.00000 0.15686 0.80392 +0.00000 0.16863 0.78431 +0.00000 0.18431 0.76471 +0.00000 0.19608 0.74118 +0.00000 0.21176 0.72157 +0.00000 0.22353 0.70196 +0.00000 0.23529 0.67843 +0.00000 0.25098 0.65882 +0.00000 0.26275 0.63922 +0.00000 0.27451 0.61569 +0.00000 0.28627 0.59608 +0.00000 0.29804 0.57647 +0.00000 0.30980 0.55686 +0.00000 0.32157 0.53725 +0.00000 0.33333 0.51373 +0.00000 0.34510 0.49412 +0.00000 0.35686 0.47451 +0.00000 0.36863 0.45490 +0.00000 0.38039 0.43529 +0.00000 0.39216 0.41569 +0.00000 0.40392 0.39608 +0.00000 0.41176 0.37647 +0.00000 0.42353 0.35686 +0.00000 0.43529 0.33725 +0.00000 0.44706 0.31765 +0.00000 0.45882 0.29804 +0.00000 0.46667 0.27843 +0.00000 0.47843 0.25882 +0.00000 0.49020 0.23922 +0.00000 0.49804 0.21961 +0.00000 0.50980 0.20000 +0.00000 0.52157 0.18431 +0.00000 0.52941 0.16471 +0.00000 0.54118 0.14510 +0.00000 0.55294 0.12941 +0.00000 0.56078 0.10980 +0.00000 0.57255 0.09412 +0.00000 0.58431 0.07451 +0.00000 0.59216 0.05882 +0.00000 0.60392 0.04314 +0.00000 0.61176 0.02745 +0.00000 0.62353 0.01176 +0.00000 0.63137 0.00000 +0.00000 0.64314 0.00000 +0.00000 0.65098 0.00000 +0.00000 0.66275 0.00000 +0.00000 0.67059 0.00000 +0.00000 0.68235 0.00000 +0.00000 0.69020 0.00000 +0.00000 0.70196 0.00000 +0.00000 0.70980 0.00000 +0.00000 0.72157 0.00000 +0.00000 0.72941 0.00000 +0.00000 0.74118 0.00000 +0.00000 0.74902 0.00000 +0.00000 0.76078 0.00000 +0.00000 0.76863 0.00000 +0.00000 0.77647 0.00000 +0.00000 0.78824 0.00000 +0.00000 0.79608 0.00000 +0.00000 0.80784 0.00000 +0.00000 0.81569 0.00000 +0.00000 0.82353 0.00000 +0.00000 0.83529 0.00000 +0.00000 0.84314 0.00000 +0.00000 0.85490 0.00000 +0.00000 0.86275 0.00000 +0.00000 0.87059 0.00000 +0.00000 0.88235 0.00000 +0.00000 0.89020 0.00000 +0.00000 0.89804 0.00000 +0.00000 0.90980 0.00000 +0.00000 0.91765 0.00000 +0.00000 0.92549 0.00000 +0.00000 0.93725 0.00000 +0.00000 0.94510 0.00000 +0.00000 0.95294 0.00000 +0.00000 0.96078 0.00000 +0.00000 0.97255 0.00000 +0.00000 0.98039 0.00000 +0.00000 0.98824 0.00000 +0.00000 1.00000 0.00000 +0.00000 0.98824 0.00000 +0.00000 0.98039 0.00000 +0.00000 0.97255 0.00000 +0.00000 0.96078 0.00000 +0.00000 0.95294 0.00000 +0.00000 0.94510 0.00000 +0.00000 0.93725 0.00000 +0.00000 0.92549 0.00000 +0.00000 0.91765 0.00000 +0.00000 0.90980 0.00000 +0.00000 0.89804 0.00000 +0.00000 0.89020 0.00000 +0.00000 0.88235 0.00000 +0.00000 0.87059 0.00000 +0.00000 0.86275 0.00000 +0.00000 0.85490 0.00000 +0.00000 0.84314 0.00000 +0.00000 0.83529 0.00000 +0.00000 0.82353 0.00000 +0.00000 0.81569 0.00000 +0.00000 0.80784 0.00000 +0.00000 0.79608 0.00000 +0.00000 0.78824 0.00000 +0.00000 0.77647 0.00000 +0.00784 0.76863 0.00000 +0.03529 0.77647 0.00000 +0.06667 0.78824 0.00000 +0.09804 0.80000 0.00000 +0.12941 0.81176 0.00000 +0.16471 0.82745 0.00000 +0.20000 0.84314 0.00000 +0.23529 0.85882 0.00000 +0.26667 0.87059 0.00000 +0.30588 0.89020 0.00000 +0.34118 0.90196 0.00000 +0.37647 0.92157 0.00000 +0.41176 0.93333 0.00000 +0.44706 0.95294 0.00000 +0.48627 0.96863 0.00000 +0.52157 0.98824 0.00000 +0.56078 1.00000 0.00000 +0.59608 1.00000 0.00000 +0.63529 1.00000 0.00000 +0.67059 1.00000 0.00000 +0.70980 1.00000 0.00000 +0.74902 1.00000 0.00000 +0.78431 1.00000 0.00000 +0.82353 1.00000 0.00000 +0.85882 1.00000 0.00000 +0.89804 1.00000 0.00000 +0.93333 1.00000 0.00000 +0.97647 1.00000 0.00000 +1.00000 1.00000 0.00000 +1.00000 1.00000 0.00000 +1.00000 1.00000 0.00000 +1.00000 1.00000 0.00000 +1.00000 1.00000 0.00000 +1.00000 1.00000 0.00000 +1.00000 1.00000 0.00000 +0.99608 1.00000 0.00000 +0.98039 1.00000 0.00000 +0.96078 0.97647 0.00000 +0.94510 0.93725 0.00000 +0.92549 0.89804 0.00000 +0.90980 0.85882 0.00000 +0.89412 0.81961 0.00000 +0.87451 0.78039 0.00000 +0.85882 0.74118 0.00000 +0.83922 0.70196 0.00000 +0.82353 0.66275 0.00000 +0.80392 0.62353 0.00000 +0.78824 0.58431 0.00000 +0.76863 0.54510 0.00000 +0.75686 0.50980 0.00000 +0.74118 0.46667 0.00000 +0.72549 0.43137 0.00000 +0.70980 0.39216 0.00000 +0.69412 0.35294 0.00000 +0.68235 0.31765 0.00000 +0.66275 0.27451 0.00000 +0.65098 0.23922 0.00000 +0.63529 0.20000 0.00000 +0.62745 0.16863 0.00000 +0.61569 0.12941 0.00000 +0.60784 0.09804 0.00000 +0.61961 0.08235 0.00000 +0.62745 0.06275 0.00000 +0.63922 0.04706 0.00000 +0.64706 0.02353 0.00000 +0.65882 0.00000 0.00000 +0.66667 0.00000 0.00000 +0.67843 0.00000 0.00000 +0.68627 0.00000 0.00000 +0.69804 0.00000 0.00000 +0.70980 0.00000 0.00000 +0.71765 0.00000 0.00000 +0.72941 0.00000 0.00000 +0.73725 0.00000 0.00000 +0.74902 0.00000 0.00000 +0.75686 0.00000 0.00000 +0.76863 0.00000 0.00000 +0.77647 0.00000 0.00000 +0.78824 0.00000 0.00000 +0.80000 0.00784 0.00784 +0.80784 0.02745 0.02745 +0.81961 0.05098 0.05098 +0.82745 0.08235 0.08235 +0.83922 0.11373 0.11373 +0.84706 0.14902 0.14902 +0.85882 0.19216 0.19216 +0.86667 0.23137 0.23137 +0.87843 0.27843 0.27843 +0.88627 0.32549 0.32549 +0.89804 0.37647 0.37647 +0.90980 0.43137 0.43137 +0.91765 0.48627 0.48627 +0.92941 0.54118 0.54118 +0.93725 0.60000 0.60000 +0.94902 0.66275 0.66275 +0.95686 0.72549 0.72549 +0.96863 0.79216 0.79216 +0.97647 0.85882 0.85882 +0.98824 0.92941 0.92941 +1.00000 1.00000 1.00000 diff --git a/vendor/x11iraf/ximtool/luts/rainbow1.lut b/vendor/x11iraf/ximtool/luts/rainbow1.lut new file mode 100644 index 00000000..8871dc2f --- /dev/null +++ b/vendor/x11iraf/ximtool/luts/rainbow1.lut @@ -0,0 +1,256 @@ +0.00000 0.00000 0.16471 +0.02745 0.00000 0.18431 +0.05882 0.00000 0.20000 +0.08627 0.00000 0.21961 +0.11373 0.00000 0.23922 +0.14510 0.00000 0.25882 +0.17647 0.00000 0.27843 +0.20392 0.00000 0.29804 +0.23137 0.00000 0.31765 +0.26275 0.00000 0.33725 +0.29412 0.00000 0.35686 +0.32157 0.00000 0.37647 +0.35294 0.00000 0.39608 +0.38039 0.00000 0.41569 +0.41176 0.00000 0.43529 +0.43922 0.00000 0.45490 +0.47059 0.00000 0.47451 +0.49804 0.00000 0.49412 +0.52941 0.00000 0.51373 +0.55686 0.00000 0.53725 +0.58824 0.00000 0.55686 +0.55686 0.00000 0.57647 +0.52941 0.00000 0.59608 +0.49804 0.00000 0.61569 +0.47059 0.00000 0.63922 +0.43922 0.00000 0.65882 +0.41176 0.00000 0.67843 +0.38039 0.00000 0.70196 +0.35294 0.00000 0.72157 +0.32157 0.00000 0.74118 +0.29412 0.00000 0.76471 +0.26275 0.00000 0.78431 +0.23137 0.00000 0.80392 +0.20392 0.00000 0.82745 +0.17647 0.00000 0.84706 +0.14510 0.00000 0.87059 +0.11373 0.00000 0.89020 +0.08627 0.00000 0.91373 +0.05882 0.00000 0.93333 +0.02745 0.00000 0.95686 +0.00000 0.00000 0.97647 +0.00000 0.00000 1.00000 +0.00000 0.00000 0.97647 +0.00000 0.00784 0.95686 +0.00000 0.01569 0.93333 +0.00000 0.02353 0.91373 +0.00000 0.03137 0.89020 +0.00000 0.03922 0.87059 +0.00000 0.05098 0.85098 +0.00000 0.06275 0.83137 +0.00000 0.07843 0.81176 +0.00000 0.09804 0.79216 +0.00000 0.11765 0.77255 +0.00000 0.13725 0.75294 +0.00000 0.15686 0.73333 +0.00000 0.17647 0.71373 +0.00000 0.19608 0.69412 +0.00000 0.21569 0.67451 +0.00000 0.23529 0.65882 +0.00000 0.25490 0.64314 +0.00000 0.27059 0.62745 +0.00000 0.28627 0.61176 +0.00000 0.30196 0.59608 +0.00000 0.32157 0.58039 +0.00000 0.33333 0.56471 +0.00000 0.34510 0.54902 +0.00000 0.35686 0.53333 +0.00000 0.36863 0.51765 +0.00000 0.38039 0.50196 +0.00000 0.39216 0.48627 +0.00000 0.40392 0.47059 +0.00000 0.41176 0.45882 +0.00000 0.42353 0.44706 +0.00000 0.43529 0.43529 +0.00000 0.44706 0.42353 +0.00000 0.45882 0.41176 +0.00000 0.46667 0.40000 +0.00000 0.47843 0.38824 +0.00000 0.49020 0.37647 +0.00000 0.49804 0.36471 +0.00000 0.50980 0.35294 +0.00000 0.52157 0.34118 +0.00000 0.52941 0.32941 +0.00000 0.54118 0.31765 +0.00000 0.55294 0.30588 +0.00000 0.56078 0.29412 +0.00000 0.57255 0.28235 +0.00000 0.58431 0.27059 +0.00000 0.59216 0.25882 +0.00000 0.60392 0.24706 +0.00000 0.61176 0.23529 +0.00000 0.62353 0.22353 +0.00000 0.63137 0.21176 +0.00000 0.64314 0.20000 +0.00000 0.65098 0.18824 +0.00000 0.66275 0.17647 +0.00000 0.67059 0.16471 +0.00000 0.68235 0.15294 +0.00000 0.69020 0.14118 +0.00000 0.70196 0.12941 +0.00000 0.70980 0.11765 +0.00000 0.72157 0.10196 +0.00000 0.72941 0.08627 +0.00000 0.74118 0.07059 +0.00000 0.74902 0.05490 +0.00000 0.76078 0.03922 +0.00000 0.76863 0.02353 +0.00000 0.77647 0.00000 +0.00000 0.78824 0.00000 +0.00000 0.79608 0.00000 +0.00000 0.80784 0.00000 +0.00000 0.81569 0.00000 +0.00000 0.82353 0.00000 +0.00000 0.83529 0.00000 +0.00000 0.84314 0.00000 +0.00000 0.85490 0.00000 +0.00000 0.86275 0.00000 +0.00000 0.87059 0.00000 +0.00000 0.88235 0.00000 +0.00000 0.89020 0.00000 +0.00000 0.89804 0.00000 +0.00000 0.90980 0.00000 +0.00000 0.91765 0.00000 +0.00000 0.92549 0.00000 +0.00000 0.93725 0.00000 +0.00000 0.94510 0.00000 +0.00000 0.95294 0.00000 +0.00000 0.96078 0.00000 +0.00000 0.97255 0.00000 +0.00000 0.98039 0.00000 +0.00000 0.98824 0.00000 +0.00784 1.00000 0.00000 +0.01569 0.98824 0.00000 +0.02353 0.98039 0.00000 +0.03137 0.97255 0.00000 +0.04314 0.96078 0.00000 +0.05490 0.95294 0.00000 +0.06667 0.94510 0.00000 +0.07843 0.93725 0.00000 +0.09020 0.92549 0.00000 +0.10196 0.91765 0.00000 +0.11373 0.90980 0.00000 +0.12549 0.89804 0.00000 +0.13725 0.89020 0.00000 +0.14902 0.88235 0.00000 +0.16471 0.87059 0.00000 +0.20000 0.86275 0.00000 +0.23529 0.85490 0.00000 +0.26667 0.84314 0.00000 +0.30588 0.83529 0.00000 +0.34118 0.82353 0.00000 +0.37647 0.81569 0.00000 +0.41176 0.80784 0.00000 +0.44706 0.79608 0.00000 +0.48627 0.78824 0.00000 +0.52157 0.77647 0.00000 +0.56078 0.76863 0.00000 +0.59608 0.77647 0.00000 +0.63529 0.78824 0.00000 +0.67059 0.80000 0.00000 +0.70980 0.81176 0.00000 +0.74902 0.82745 0.00000 +0.78431 0.84314 0.00000 +0.82353 0.85882 0.00000 +0.85882 0.87059 0.00000 +0.89804 0.89020 0.00000 +0.93333 0.90196 0.00000 +0.97647 0.92157 0.00000 +1.00000 0.93333 0.00000 +1.00000 0.95294 0.00000 +1.00000 0.96863 0.00000 +1.00000 0.98824 0.00000 +1.00000 1.00000 0.00000 +1.00000 1.00000 0.00000 +1.00000 1.00000 0.00000 +0.99608 1.00000 0.00000 +1.00000 1.00000 0.00000 +1.00000 1.00000 0.00000 +1.00000 1.00000 0.00000 +1.00000 1.00000 0.00000 +1.00000 1.00000 0.00000 +1.00000 1.00000 0.00000 +1.00000 1.00000 0.00000 +1.00000 1.00000 0.00000 +1.00000 1.00000 0.00000 +1.00000 1.00000 0.00000 +1.00000 1.00000 0.00000 +1.00000 1.00000 0.00000 +1.00000 1.00000 0.00000 +1.00000 1.00000 0.00000 +1.00000 1.00000 0.00000 +1.00000 1.00000 0.00000 +1.00000 1.00000 0.00000 +1.00000 0.97647 0.00000 +1.00000 0.93725 0.00000 +1.00000 0.89804 0.00000 +1.00000 0.85882 0.00000 +1.00000 0.81961 0.00000 +1.00000 0.78039 0.00000 +1.00000 0.74118 0.00000 +1.00000 0.70196 0.00000 +1.00000 0.66275 0.00000 +1.00000 0.62353 0.00000 +1.00000 0.58431 0.00000 +1.00000 0.54510 0.00000 +1.00000 0.50980 0.00000 +1.00000 0.46667 0.00000 +1.00000 0.43137 0.00000 +1.00000 0.39216 0.00000 +1.00000 0.35294 0.00000 +1.00000 0.31765 0.00000 +1.00000 0.27451 0.00000 +1.00000 0.23922 0.00000 +1.00000 0.20000 0.00000 +1.00000 0.16863 0.00000 +1.00000 0.12941 0.00000 +1.00000 0.09804 0.00000 +1.00000 0.08235 0.00000 +1.00000 0.06275 0.00000 +1.00000 0.04706 0.00000 +1.00000 0.02353 0.00000 +1.00000 0.00000 0.00000 +0.99216 0.00000 0.00000 +0.98431 0.00000 0.00000 +0.97647 0.00000 0.00000 +0.96863 0.00000 0.00000 +0.96078 0.00000 0.00000 +0.95294 0.00000 0.00000 +0.94510 0.00000 0.00000 +0.93725 0.00000 0.00000 +0.92941 0.00000 0.00000 +0.92157 0.00000 0.00000 +0.91373 0.00000 0.00000 +0.90588 0.00000 0.00000 +0.89804 0.00000 0.00000 +0.89020 0.00000 0.00000 +0.88235 0.00000 0.00000 +0.87451 0.00000 0.00000 +0.86667 0.00000 0.00000 +0.85882 0.00000 0.00000 +0.85098 0.00000 0.00000 +0.84314 0.00000 0.00000 +0.83529 0.00000 0.00000 +0.82745 0.00000 0.00000 +0.81961 0.00000 0.00000 +0.81176 0.00000 0.00000 +0.80392 0.00000 0.00000 +0.79608 0.00000 0.00000 +0.78824 0.00000 0.00000 +0.78039 0.00000 0.00000 +0.77255 0.00000 0.00000 +0.76471 0.00000 0.00000 +0.75686 0.00000 0.00000 +0.74902 0.00000 0.00000 +0.74118 0.00000 0.00000 +0.73333 0.00000 0.00000 diff --git a/vendor/x11iraf/ximtool/luts/rainbow2.lut b/vendor/x11iraf/ximtool/luts/rainbow2.lut new file mode 100644 index 00000000..594a70cb --- /dev/null +++ b/vendor/x11iraf/ximtool/luts/rainbow2.lut @@ -0,0 +1,256 @@ +0.00000 0.00000 0.00000 +0.03137 0.00000 0.03137 +0.06275 0.00000 0.06275 +0.09412 0.00000 0.09412 +0.12549 0.00000 0.12549 +0.15686 0.00000 0.15686 +0.18824 0.00000 0.18824 +0.21961 0.00000 0.21961 +0.25098 0.00000 0.25098 +0.28235 0.00000 0.28235 +0.31373 0.00000 0.31373 +0.34510 0.00000 0.34510 +0.37647 0.00000 0.37647 +0.40784 0.00000 0.40784 +0.43922 0.00000 0.43922 +0.47059 0.00000 0.47059 +0.50196 0.00000 0.50196 +0.53333 0.00000 0.53333 +0.56471 0.00000 0.56471 +0.59608 0.00000 0.59608 +0.62745 0.00000 0.62745 +0.65882 0.00000 0.65882 +0.69020 0.00000 0.69020 +0.72157 0.00000 0.72157 +0.75294 0.00000 0.75294 +0.78431 0.00000 0.78431 +0.81569 0.00000 0.81569 +0.84706 0.00000 0.84706 +0.87843 0.00000 0.87843 +0.90980 0.00000 0.90980 +0.94118 0.00000 0.94118 +0.97255 0.00000 0.97255 +1.00000 0.00000 1.00000 +0.96863 0.00000 1.00000 +0.93725 0.00000 1.00000 +0.90588 0.00000 1.00000 +0.87451 0.00000 1.00000 +0.84314 0.00000 1.00000 +0.81176 0.00000 1.00000 +0.78039 0.00000 1.00000 +0.74902 0.00000 1.00000 +0.71765 0.00000 1.00000 +0.68627 0.00000 1.00000 +0.65490 0.00000 1.00000 +0.62353 0.00000 1.00000 +0.59216 0.00000 1.00000 +0.56078 0.00000 1.00000 +0.52941 0.00000 1.00000 +0.49804 0.00000 1.00000 +0.46667 0.00000 1.00000 +0.43529 0.00000 1.00000 +0.40392 0.00000 1.00000 +0.37255 0.00000 1.00000 +0.34118 0.00000 1.00000 +0.30980 0.00000 1.00000 +0.27843 0.00000 1.00000 +0.24706 0.00000 1.00000 +0.21569 0.00000 1.00000 +0.18431 0.00000 1.00000 +0.15294 0.00000 1.00000 +0.12157 0.00000 1.00000 +0.09020 0.00000 1.00000 +0.05882 0.00000 1.00000 +0.02745 0.00000 1.00000 +0.00000 0.00000 1.00000 +0.00000 0.03137 1.00000 +0.00000 0.06275 1.00000 +0.00000 0.09412 1.00000 +0.00000 0.12549 1.00000 +0.00000 0.15686 1.00000 +0.00000 0.18824 1.00000 +0.00000 0.21961 1.00000 +0.00000 0.25098 1.00000 +0.00000 0.28235 1.00000 +0.00000 0.31373 1.00000 +0.00000 0.34510 1.00000 +0.00000 0.37647 1.00000 +0.00000 0.40784 1.00000 +0.00000 0.43922 1.00000 +0.00000 0.47059 1.00000 +0.00000 0.50196 1.00000 +0.00000 0.53333 1.00000 +0.00000 0.56471 1.00000 +0.00000 0.59608 1.00000 +0.00000 0.62745 1.00000 +0.00000 0.65882 1.00000 +0.00000 0.69020 1.00000 +0.00000 0.72157 1.00000 +0.00000 0.75294 1.00000 +0.00000 0.78431 1.00000 +0.00000 0.81569 1.00000 +0.00000 0.84706 1.00000 +0.00000 0.87843 1.00000 +0.00000 0.90980 1.00000 +0.00000 0.94118 1.00000 +0.00000 0.97255 1.00000 +0.00000 1.00000 1.00000 +0.00000 1.00000 0.96863 +0.00000 1.00000 0.93725 +0.00000 1.00000 0.90588 +0.00000 1.00000 0.87451 +0.00000 1.00000 0.84314 +0.00000 1.00000 0.81176 +0.00000 1.00000 0.78039 +0.00000 1.00000 0.74902 +0.00000 1.00000 0.71765 +0.00000 1.00000 0.68627 +0.00000 1.00000 0.65490 +0.00000 1.00000 0.62353 +0.00000 1.00000 0.59216 +0.00000 1.00000 0.56078 +0.00000 1.00000 0.52941 +0.00000 1.00000 0.49804 +0.00000 1.00000 0.46667 +0.00000 1.00000 0.43529 +0.00000 1.00000 0.40392 +0.00000 1.00000 0.37255 +0.00000 1.00000 0.34118 +0.00000 1.00000 0.30980 +0.00000 1.00000 0.27843 +0.00000 1.00000 0.24706 +0.00000 1.00000 0.21569 +0.00000 1.00000 0.18431 +0.00000 1.00000 0.15294 +0.00000 1.00000 0.12157 +0.00000 1.00000 0.09020 +0.00000 1.00000 0.05882 +0.00000 1.00000 0.02745 +0.00000 1.00000 0.00000 +0.03137 1.00000 0.00000 +0.06275 1.00000 0.00000 +0.09412 1.00000 0.00000 +0.12549 1.00000 0.00000 +0.15686 1.00000 0.00000 +0.18824 1.00000 0.00000 +0.21961 1.00000 0.00000 +0.25098 1.00000 0.00000 +0.28235 1.00000 0.00000 +0.31373 1.00000 0.00000 +0.34510 1.00000 0.00000 +0.37647 1.00000 0.00000 +0.40784 1.00000 0.00000 +0.43922 1.00000 0.00000 +0.47059 1.00000 0.00000 +0.50196 1.00000 0.00000 +0.53333 1.00000 0.00000 +0.56471 1.00000 0.00000 +0.59608 1.00000 0.00000 +0.62745 1.00000 0.00000 +0.65882 1.00000 0.00000 +0.69020 1.00000 0.00000 +0.72157 1.00000 0.00000 +0.75294 1.00000 0.00000 +0.78431 1.00000 0.00000 +0.81569 1.00000 0.00000 +0.84706 1.00000 0.00000 +0.87843 1.00000 0.00000 +0.90980 1.00000 0.00000 +0.94118 1.00000 0.00000 +0.97255 1.00000 0.00000 +1.00000 1.00000 0.00000 +1.00000 0.98431 0.00000 +1.00000 0.96863 0.00000 +1.00000 0.95294 0.00000 +1.00000 0.93725 0.00000 +1.00000 0.92157 0.00000 +1.00000 0.90588 0.00000 +1.00000 0.89020 0.00000 +1.00000 0.87451 0.00000 +1.00000 0.85882 0.00000 +1.00000 0.84314 0.00000 +1.00000 0.82745 0.00000 +1.00000 0.81176 0.00000 +1.00000 0.79608 0.00000 +1.00000 0.78039 0.00000 +1.00000 0.76471 0.00000 +1.00000 0.74902 0.00000 +1.00000 0.73333 0.00000 +1.00000 0.71765 0.00000 +1.00000 0.70196 0.00000 +1.00000 0.68627 0.00000 +1.00000 0.67059 0.00000 +1.00000 0.65490 0.00000 +1.00000 0.63922 0.00000 +1.00000 0.62353 0.00000 +1.00000 0.60784 0.00000 +1.00000 0.59216 0.00000 +1.00000 0.57647 0.00000 +1.00000 0.56078 0.00000 +1.00000 0.54510 0.00000 +1.00000 0.52941 0.00000 +1.00000 0.51373 0.00000 +1.00000 0.49804 0.00000 +1.00000 0.48235 0.00000 +1.00000 0.46667 0.00000 +1.00000 0.45098 0.00000 +1.00000 0.43529 0.00000 +1.00000 0.41961 0.00000 +1.00000 0.40392 0.00000 +1.00000 0.38824 0.00000 +1.00000 0.37255 0.00000 +1.00000 0.35686 0.00000 +1.00000 0.34118 0.00000 +1.00000 0.32549 0.00000 +1.00000 0.30980 0.00000 +1.00000 0.29412 0.00000 +1.00000 0.27843 0.00000 +1.00000 0.26275 0.00000 +1.00000 0.24706 0.00000 +1.00000 0.23137 0.00000 +1.00000 0.21569 0.00000 +1.00000 0.20000 0.00000 +1.00000 0.18431 0.00000 +1.00000 0.16863 0.00000 +1.00000 0.15294 0.00000 +1.00000 0.13725 0.00000 +1.00000 0.12157 0.00000 +1.00000 0.10588 0.00000 +1.00000 0.09020 0.00000 +1.00000 0.07451 0.00000 +1.00000 0.05882 0.00000 +1.00000 0.04314 0.00000 +1.00000 0.02745 0.00000 +1.00000 0.01176 0.00000 +1.00000 0.00000 0.00000 +1.00000 0.03137 0.03137 +1.00000 0.06275 0.06275 +1.00000 0.09412 0.09412 +1.00000 0.12549 0.12549 +1.00000 0.15686 0.15686 +1.00000 0.18824 0.18824 +1.00000 0.21961 0.21961 +1.00000 0.25098 0.25098 +1.00000 0.28235 0.28235 +1.00000 0.31373 0.31373 +1.00000 0.34510 0.34510 +1.00000 0.37647 0.37647 +1.00000 0.40784 0.40784 +1.00000 0.43922 0.43922 +1.00000 0.47059 0.47059 +1.00000 0.50196 0.50196 +1.00000 0.53333 0.53333 +1.00000 0.56471 0.56471 +1.00000 0.59608 0.59608 +1.00000 0.62745 0.62745 +1.00000 0.65882 0.65882 +1.00000 0.69020 0.69020 +1.00000 0.72157 0.72157 +1.00000 0.75294 0.75294 +1.00000 0.78431 0.78431 +1.00000 0.81569 0.81569 +1.00000 0.84706 0.84706 +1.00000 0.87843 0.87843 +1.00000 0.90980 0.90980 +1.00000 0.94118 0.94118 +1.00000 0.97255 0.97255 diff --git a/vendor/x11iraf/ximtool/luts/rainbow3.lut b/vendor/x11iraf/ximtool/luts/rainbow3.lut new file mode 100644 index 00000000..f9769859 --- /dev/null +++ b/vendor/x11iraf/ximtool/luts/rainbow3.lut @@ -0,0 +1,256 @@ +0.00000 0.00000 0.00000 +0.00000 0.00000 0.00000 +0.00000 0.00000 0.00000 +0.00000 0.00000 0.00000 +0.00000 0.00000 0.00000 +0.00000 0.00000 0.03922 +0.00000 0.00000 0.07843 +0.00000 0.00000 0.11765 +0.00000 0.00000 0.15686 +0.00000 0.00000 0.20000 +0.00000 0.00000 0.23922 +0.00000 0.00000 0.27843 +0.00000 0.00000 0.31765 +0.00000 0.00000 0.35686 +0.00000 0.00000 0.40000 +0.00000 0.00000 0.43922 +0.00000 0.00000 0.47843 +0.00000 0.00000 0.51765 +0.00000 0.00000 0.55686 +0.00000 0.00000 0.60000 +0.00000 0.00000 0.63922 +0.00000 0.00000 0.67843 +0.00000 0.00000 0.71765 +0.00000 0.00000 0.75686 +0.00000 0.00000 0.80000 +0.00000 0.00000 0.83922 +0.00000 0.00000 0.87843 +0.00000 0.00000 0.91765 +0.00000 0.00000 0.95686 +0.00000 0.00000 1.00000 +0.00000 0.03137 1.00000 +0.00000 0.06275 1.00000 +0.00000 0.09412 1.00000 +0.00000 0.12549 1.00000 +0.00000 0.15686 1.00000 +0.00000 0.18824 1.00000 +0.00000 0.21961 1.00000 +0.00000 0.25490 1.00000 +0.00000 0.28627 1.00000 +0.00000 0.31765 1.00000 +0.00000 0.34902 1.00000 +0.00000 0.38039 1.00000 +0.00000 0.41176 1.00000 +0.00000 0.44314 1.00000 +0.00000 0.47843 1.00000 +0.00000 0.49804 1.00000 +0.00000 0.51765 1.00000 +0.00000 0.53725 1.00000 +0.00000 0.55686 1.00000 +0.00000 0.58039 1.00000 +0.00000 0.60000 1.00000 +0.00000 0.61961 1.00000 +0.00000 0.63922 1.00000 +0.00000 0.65882 1.00000 +0.00000 0.68235 1.00000 +0.00000 0.70196 1.00000 +0.00000 0.72157 1.00000 +0.00000 0.74118 1.00000 +0.00000 0.76078 1.00000 +0.00000 0.78431 1.00000 +0.00000 0.79608 1.00000 +0.00000 0.81176 1.00000 +0.00000 0.82745 1.00000 +0.00000 0.83922 1.00000 +0.00000 0.85490 1.00000 +0.00000 0.87059 1.00000 +0.00000 0.88235 1.00000 +0.00000 0.89804 1.00000 +0.00000 0.91373 1.00000 +0.00000 0.92549 1.00000 +0.00000 0.94118 1.00000 +0.00000 0.95686 1.00000 +0.00000 0.96863 1.00000 +0.00000 0.98431 1.00000 +0.00000 1.00000 1.00000 +0.00000 1.00000 0.98039 +0.00000 1.00000 0.96078 +0.00000 1.00000 0.94118 +0.00000 1.00000 0.92157 +0.00000 1.00000 0.90196 +0.00000 1.00000 0.88235 +0.00000 1.00000 0.86275 +0.00000 1.00000 0.84314 +0.00000 1.00000 0.82353 +0.00000 1.00000 0.80392 +0.00000 1.00000 0.78431 +0.00000 1.00000 0.76471 +0.00000 1.00000 0.74510 +0.00000 1.00000 0.72549 +0.00000 1.00000 0.70588 +0.00000 1.00000 0.65882 +0.00000 1.00000 0.61176 +0.00000 1.00000 0.56471 +0.00000 1.00000 0.51765 +0.00000 1.00000 0.47059 +0.00000 1.00000 0.42353 +0.00000 1.00000 0.37647 +0.00000 1.00000 0.32549 +0.00000 1.00000 0.27843 +0.00000 1.00000 0.23137 +0.00000 1.00000 0.18431 +0.00000 1.00000 0.13725 +0.00000 1.00000 0.09020 +0.00000 1.00000 0.04314 +0.00000 1.00000 0.00000 +0.04706 1.00000 0.00000 +0.09412 1.00000 0.00000 +0.14118 1.00000 0.00000 +0.18824 1.00000 0.00000 +0.23529 1.00000 0.00000 +0.28235 1.00000 0.00000 +0.32941 1.00000 0.00000 +0.37647 1.00000 0.00000 +0.42353 1.00000 0.00000 +0.47059 1.00000 0.00000 +0.51765 1.00000 0.00000 +0.56471 1.00000 0.00000 +0.61176 1.00000 0.00000 +0.65882 1.00000 0.00000 +0.70588 1.00000 0.00000 +0.72549 1.00000 0.00000 +0.74510 1.00000 0.00000 +0.76471 1.00000 0.00000 +0.78431 1.00000 0.00000 +0.80392 1.00000 0.00000 +0.82353 1.00000 0.00000 +0.84314 1.00000 0.00000 +0.86275 1.00000 0.00000 +0.88235 1.00000 0.00000 +0.90196 1.00000 0.00000 +0.92157 1.00000 0.00000 +0.94118 1.00000 0.00000 +0.96078 1.00000 0.00000 +0.98039 1.00000 0.00000 +1.00000 1.00000 0.00000 +0.99608 0.98039 0.00000 +0.99608 0.96078 0.00000 +0.99608 0.94510 0.00000 +0.99608 0.92549 0.00000 +0.99608 0.90588 0.00000 +0.99216 0.89020 0.00000 +0.99216 0.87059 0.00000 +0.99216 0.85098 0.00000 +0.99216 0.83529 0.00000 +0.99216 0.81569 0.00000 +0.98824 0.79608 0.00000 +0.98824 0.78039 0.00000 +0.98824 0.76078 0.00000 +0.98824 0.74118 0.00000 +0.98824 0.72549 0.00000 +0.98824 0.70588 0.00000 +0.98824 0.69020 0.00000 +0.98824 0.67451 0.00000 +0.98824 0.65490 0.00000 +0.99216 0.63922 0.00000 +0.99216 0.62353 0.00000 +0.99216 0.60392 0.00000 +0.99216 0.58824 0.00000 +0.99216 0.57255 0.00000 +0.99608 0.55294 0.00000 +0.99608 0.53725 0.00000 +0.99608 0.52157 0.00000 +0.99608 0.50196 0.00000 +0.99608 0.48627 0.00000 +1.00000 0.47059 0.00000 +1.00000 0.43922 0.00000 +1.00000 0.40784 0.00000 +1.00000 0.37647 0.00000 +1.00000 0.34510 0.00000 +1.00000 0.31373 0.00000 +1.00000 0.28235 0.00000 +1.00000 0.25098 0.00000 +1.00000 0.21569 0.00000 +1.00000 0.18431 0.00000 +1.00000 0.15294 0.00000 +1.00000 0.12157 0.00000 +1.00000 0.09020 0.00000 +1.00000 0.05882 0.00000 +1.00000 0.02745 0.00000 +1.00000 0.00000 0.00000 +1.00000 0.00000 0.00000 +1.00000 0.00000 0.00000 +1.00000 0.00000 0.00000 +1.00000 0.00000 0.00000 +1.00000 0.00000 0.00000 +1.00000 0.00000 0.00000 +1.00000 0.00000 0.00000 +1.00000 0.00000 0.00000 +1.00000 0.00000 0.00000 +1.00000 0.00000 0.00000 +1.00000 0.00000 0.00000 +1.00000 0.00000 0.00000 +1.00000 0.00000 0.00000 +1.00000 0.00000 0.00000 +1.00000 0.00000 0.00000 +1.00000 0.00000 0.04706 +1.00000 0.00000 0.09412 +1.00000 0.00000 0.14118 +1.00000 0.00000 0.18824 +1.00000 0.00000 0.23529 +1.00000 0.00000 0.28235 +1.00000 0.00000 0.32941 +1.00000 0.00000 0.37647 +1.00000 0.00000 0.42353 +1.00000 0.00000 0.47059 +1.00000 0.00000 0.51765 +1.00000 0.00000 0.56471 +1.00000 0.00000 0.61176 +1.00000 0.00000 0.65882 +1.00000 0.00000 0.70588 +1.00000 0.00000 0.72549 +1.00000 0.00000 0.74902 +1.00000 0.00000 0.77255 +1.00000 0.00000 0.79608 +1.00000 0.00000 0.81569 +1.00000 0.00000 0.83922 +1.00000 0.00000 0.86275 +1.00000 0.00000 0.88627 +1.00000 0.00000 0.90588 +1.00000 0.00000 0.92941 +1.00000 0.00000 0.95294 +1.00000 0.00000 0.97647 +1.00000 0.00000 1.00000 +1.00000 0.03529 1.00000 +1.00000 0.07059 1.00000 +1.00000 0.10588 1.00000 +1.00000 0.14118 1.00000 +1.00000 0.18039 1.00000 +1.00000 0.21569 1.00000 +1.00000 0.25098 1.00000 +1.00000 0.28627 1.00000 +1.00000 0.32549 1.00000 +1.00000 0.36078 1.00000 +1.00000 0.39608 1.00000 +1.00000 0.43137 1.00000 +1.00000 0.47059 1.00000 +1.00000 0.48627 1.00000 +1.00000 0.50588 1.00000 +1.00000 0.52157 1.00000 +1.00000 0.54118 1.00000 +1.00000 0.56078 1.00000 +1.00000 0.57647 1.00000 +1.00000 0.59608 1.00000 +1.00000 0.61176 1.00000 +1.00000 0.63137 1.00000 +1.00000 0.65098 1.00000 +1.00000 0.66667 1.00000 +1.00000 0.68627 1.00000 +1.00000 0.70588 1.00000 +1.00000 0.74510 1.00000 +1.00000 0.78824 1.00000 +1.00000 0.83137 1.00000 +1.00000 0.87059 1.00000 +1.00000 0.91373 1.00000 +1.00000 0.95686 1.00000 +1.00000 1.00000 1.00000 diff --git a/vendor/x11iraf/ximtool/luts/rainbow4.lut b/vendor/x11iraf/ximtool/luts/rainbow4.lut new file mode 100644 index 00000000..233da89d --- /dev/null +++ b/vendor/x11iraf/ximtool/luts/rainbow4.lut @@ -0,0 +1,256 @@ +0.00000 0.00000 0.01176 +0.00000 0.00000 0.02745 +0.00000 0.00000 0.04314 +0.00000 0.00000 0.05882 +0.00000 0.00000 0.07451 +0.00000 0.00000 0.09020 +0.00000 0.00000 0.10588 +0.00000 0.00000 0.12157 +0.00000 0.00000 0.13725 +0.00000 0.00000 0.15294 +0.00000 0.00000 0.16863 +0.00000 0.00000 0.18431 +0.00000 0.00000 0.20000 +0.00000 0.00000 0.21176 +0.00000 0.00000 0.22745 +0.00000 0.00000 0.24314 +0.00000 0.00000 0.25882 +0.00000 0.00000 0.27451 +0.00000 0.00000 0.29020 +0.00000 0.00000 0.30588 +0.00000 0.00000 0.32157 +0.00000 0.00000 0.33725 +0.00000 0.00000 0.35294 +0.00000 0.00000 0.36863 +0.00000 0.00000 0.38431 +0.00000 0.00000 0.40000 +0.00000 0.00000 0.41176 +0.00000 0.00000 0.42745 +0.00000 0.00000 0.44314 +0.00000 0.00000 0.45882 +0.00000 0.00000 0.47451 +0.00000 0.00000 0.49020 +0.00000 0.00000 0.50588 +0.00000 0.00000 0.52157 +0.00000 0.00000 0.53725 +0.00000 0.00000 0.55294 +0.00000 0.00000 0.56863 +0.00000 0.00000 0.58431 +0.00000 0.00000 0.60000 +0.00000 0.00000 0.61176 +0.00000 0.00000 0.62745 +0.00000 0.00000 0.64314 +0.00000 0.00000 0.65882 +0.00000 0.00000 0.67451 +0.00000 0.00000 0.69020 +0.00000 0.00000 0.70588 +0.00000 0.00000 0.72157 +0.00000 0.00000 0.73725 +0.00000 0.00000 0.75294 +0.00000 0.00000 0.76863 +0.00000 0.00000 0.78431 +0.00000 0.00000 0.80000 +0.00000 0.00000 0.81176 +0.00000 0.00000 0.82745 +0.00000 0.00000 0.84314 +0.00000 0.00000 0.85882 +0.00000 0.00000 0.87451 +0.00000 0.00000 0.89020 +0.00000 0.00000 0.90588 +0.00000 0.00000 0.92157 +0.00000 0.00000 0.93725 +0.00000 0.00000 0.95294 +0.00000 0.00000 0.96863 +0.00000 0.00000 0.98431 +0.00000 0.00000 1.00000 +0.00000 0.03529 1.00000 +0.00000 0.07059 1.00000 +0.00000 0.10980 1.00000 +0.00000 0.14510 1.00000 +0.00000 0.18039 1.00000 +0.00000 0.21961 1.00000 +0.00000 0.25490 1.00000 +0.00000 0.29412 1.00000 +0.00000 0.32941 1.00000 +0.00000 0.36471 1.00000 +0.00000 0.40392 1.00000 +0.00000 0.43922 1.00000 +0.00000 0.47843 1.00000 +0.00000 0.50196 1.00000 +0.00000 0.52549 1.00000 +0.00000 0.54902 1.00000 +0.00000 0.57255 1.00000 +0.00000 0.59608 1.00000 +0.00000 0.61961 1.00000 +0.00000 0.64314 1.00000 +0.00000 0.66667 1.00000 +0.00000 0.69020 1.00000 +0.00000 0.71373 1.00000 +0.00000 0.73725 1.00000 +0.00000 0.76078 1.00000 +0.00000 0.78431 1.00000 +0.00000 0.80000 1.00000 +0.00000 0.81569 1.00000 +0.00000 0.83137 1.00000 +0.00000 0.84706 1.00000 +0.00000 0.86667 1.00000 +0.00000 0.88235 1.00000 +0.00000 0.89804 1.00000 +0.00000 0.91373 1.00000 +0.00000 0.93333 1.00000 +0.00000 0.94902 1.00000 +0.00000 0.96471 1.00000 +0.00000 0.98039 1.00000 +0.00000 1.00000 1.00000 +0.00000 1.00000 0.97647 +0.00000 1.00000 0.95294 +0.00000 1.00000 0.92941 +0.00000 1.00000 0.90588 +0.00000 1.00000 0.88627 +0.00000 1.00000 0.86275 +0.00000 1.00000 0.83922 +0.00000 1.00000 0.81569 +0.00000 1.00000 0.79608 +0.00000 1.00000 0.77255 +0.00000 1.00000 0.74902 +0.00000 1.00000 0.72549 +0.00000 1.00000 0.70588 +0.00000 1.00000 0.65098 +0.00000 1.00000 0.59608 +0.00000 1.00000 0.54118 +0.00000 1.00000 0.48627 +0.00000 1.00000 0.43137 +0.00000 1.00000 0.37647 +0.00000 1.00000 0.32549 +0.00000 1.00000 0.27059 +0.00000 1.00000 0.21569 +0.00000 1.00000 0.16078 +0.00000 1.00000 0.10588 +0.00000 1.00000 0.05098 +0.00000 1.00000 0.00000 +0.05098 1.00000 0.00000 +0.10588 1.00000 0.00000 +0.16078 1.00000 0.00000 +0.21569 1.00000 0.00000 +0.27059 1.00000 0.00000 +0.32549 1.00000 0.00000 +0.37647 1.00000 0.00000 +0.43137 1.00000 0.00000 +0.48627 1.00000 0.00000 +0.54118 1.00000 0.00000 +0.59608 1.00000 0.00000 +0.65098 1.00000 0.00000 +0.70588 1.00000 0.00000 +0.72549 1.00000 0.00000 +0.74902 1.00000 0.00000 +0.77255 1.00000 0.00000 +0.79608 1.00000 0.00000 +0.81569 1.00000 0.00000 +0.83922 1.00000 0.00000 +0.86275 1.00000 0.00000 +0.88627 1.00000 0.00000 +0.90588 1.00000 0.00000 +0.92941 1.00000 0.00000 +0.95294 1.00000 0.00000 +0.97647 1.00000 0.00000 +1.00000 1.00000 0.00000 +0.99608 0.97647 0.00000 +0.99608 0.95686 0.00000 +0.99608 0.93333 0.00000 +0.99608 0.91373 0.00000 +0.99216 0.89412 0.00000 +0.99216 0.87059 0.00000 +0.99216 0.85098 0.00000 +0.99216 0.82745 0.00000 +0.98824 0.80784 0.00000 +0.98824 0.78824 0.00000 +0.98824 0.76471 0.00000 +0.98824 0.74510 0.00000 +0.98824 0.72549 0.00000 +0.98824 0.70588 0.00000 +0.98824 0.68627 0.00000 +0.98824 0.66667 0.00000 +0.98824 0.64706 0.00000 +0.99216 0.62745 0.00000 +0.99216 0.60784 0.00000 +0.99216 0.58824 0.00000 +0.99216 0.56863 0.00000 +0.99608 0.54902 0.00000 +0.99608 0.52941 0.00000 +0.99608 0.50980 0.00000 +0.99608 0.49020 0.00000 +1.00000 0.47059 0.00000 +1.00000 0.43137 0.00000 +1.00000 0.39608 0.00000 +1.00000 0.36078 0.00000 +1.00000 0.32549 0.00000 +1.00000 0.28627 0.00000 +1.00000 0.25098 0.00000 +1.00000 0.21569 0.00000 +1.00000 0.18039 0.00000 +1.00000 0.14118 0.00000 +1.00000 0.10588 0.00000 +1.00000 0.07059 0.00000 +1.00000 0.03529 0.00000 +1.00000 0.00000 0.00000 +1.00000 0.00000 0.00000 +1.00000 0.00000 0.00000 +1.00000 0.00000 0.05098 +1.00000 0.00000 0.10588 +1.00000 0.00000 0.16078 +1.00000 0.00000 0.21569 +1.00000 0.00000 0.27059 +1.00000 0.00000 0.32549 +1.00000 0.00000 0.37647 +1.00000 0.00000 0.43137 +1.00000 0.00000 0.48627 +1.00000 0.00000 0.54118 +1.00000 0.00000 0.59608 +1.00000 0.00000 0.65098 +1.00000 0.00000 0.70588 +1.00000 0.00000 0.72549 +1.00000 0.00000 0.74902 +1.00000 0.00000 0.77255 +1.00000 0.00000 0.79608 +1.00000 0.00000 0.81569 +1.00000 0.00000 0.83922 +1.00000 0.00000 0.86275 +1.00000 0.00000 0.88627 +1.00000 0.00000 0.90588 +1.00000 0.00000 0.92941 +1.00000 0.00000 0.95294 +1.00000 0.00000 0.97647 +1.00000 0.00000 1.00000 +1.00000 0.03529 1.00000 +1.00000 0.07059 1.00000 +1.00000 0.10588 1.00000 +1.00000 0.14118 1.00000 +1.00000 0.18039 1.00000 +1.00000 0.21569 1.00000 +1.00000 0.25098 1.00000 +1.00000 0.28627 1.00000 +1.00000 0.32549 1.00000 +1.00000 0.36078 1.00000 +1.00000 0.39608 1.00000 +1.00000 0.43137 1.00000 +1.00000 0.47059 1.00000 +1.00000 0.48627 1.00000 +1.00000 0.50588 1.00000 +1.00000 0.52157 1.00000 +1.00000 0.54118 1.00000 +1.00000 0.56078 1.00000 +1.00000 0.57647 1.00000 +1.00000 0.59608 1.00000 +1.00000 0.61176 1.00000 +1.00000 0.63137 1.00000 +1.00000 0.65098 1.00000 +1.00000 0.66667 1.00000 +1.00000 0.68627 1.00000 +1.00000 0.70588 1.00000 +1.00000 0.74510 1.00000 +1.00000 0.78824 1.00000 +1.00000 0.83137 1.00000 +1.00000 0.87059 1.00000 +1.00000 0.91373 1.00000 +1.00000 0.95686 1.00000 +1.00000 1.00000 1.00000 diff --git a/vendor/x11iraf/ximtool/luts/random.lut b/vendor/x11iraf/ximtool/luts/random.lut new file mode 100644 index 00000000..1b09399d --- /dev/null +++ b/vendor/x11iraf/ximtool/luts/random.lut @@ -0,0 +1,256 @@ +0.00000 0.00000 0.00000 +0.00000 0.00000 0.00000 +0.00000 0.00000 0.00000 +0.00000 0.00000 0.70588 +0.00000 0.00000 0.70588 +0.00000 0.00000 0.86275 +0.00000 0.00000 0.86275 +0.47059 0.00000 0.86275 +0.47059 0.00000 0.86275 +0.47059 0.00000 0.86275 +0.70588 0.00000 0.90196 +0.70588 0.00000 0.90196 +1.00000 0.00000 1.00000 +1.00000 0.00000 1.00000 +1.00000 0.00000 0.70588 +1.00000 0.00000 0.70588 +1.00000 0.00000 0.51765 +1.00000 0.00000 0.00000 +1.00000 0.00000 0.00000 +1.00000 0.47059 0.00000 +1.00000 0.47059 0.00000 +0.98824 0.72549 0.00000 +0.98824 0.72549 0.00000 +0.98431 0.81176 0.00000 +0.98431 0.85098 0.00000 +0.98431 0.85098 0.00000 +1.00000 1.00000 0.00000 +1.00000 1.00000 0.00000 +0.70588 1.00000 0.00000 +0.70588 1.00000 0.00000 +0.00000 1.00000 0.00000 +0.00000 1.00000 0.00000 +0.00000 1.00000 0.00000 +0.00000 1.00000 0.70588 +0.00000 1.00000 0.70588 +0.00000 1.00000 1.00000 +0.00000 1.00000 1.00000 +0.47059 0.78431 1.00000 +0.47059 0.78431 1.00000 +0.47059 0.78431 1.00000 +0.62745 0.62745 1.00000 +0.62745 0.62745 1.00000 +0.78431 0.47059 1.00000 +0.78431 0.47059 1.00000 +1.00000 0.70588 1.00000 +1.00000 0.70588 1.00000 +1.00000 0.76863 1.00000 +1.00000 0.86275 1.00000 +1.00000 0.86275 1.00000 +1.00000 1.00000 1.00000 +1.00000 1.00000 1.00000 +1.00000 1.00000 1.00000 +1.00000 1.00000 1.00000 +1.00000 0.89804 1.00000 +1.00000 0.86275 1.00000 +1.00000 0.86275 1.00000 +1.00000 0.86275 1.00000 +1.00000 0.86275 1.00000 +1.00000 0.86275 1.00000 +1.00000 0.86275 1.00000 +1.00000 0.86275 1.00000 +1.00000 0.86275 1.00000 +1.00000 0.86275 1.00000 +1.00000 0.70588 1.00000 +1.00000 0.70588 1.00000 +1.00000 0.70588 1.00000 +1.00000 0.70588 1.00000 +1.00000 0.70588 1.00000 +1.00000 0.70588 1.00000 +1.00000 0.70588 1.00000 +1.00000 0.70588 1.00000 +1.00000 0.70588 1.00000 +0.92157 0.61961 1.00000 +0.78431 0.47059 1.00000 +0.78431 0.47059 1.00000 +0.78431 0.47059 1.00000 +0.78431 0.47059 1.00000 +0.78431 0.47059 1.00000 +0.78431 0.47059 1.00000 +0.78431 0.47059 1.00000 +0.78431 0.47059 1.00000 +0.78431 0.47059 1.00000 +0.65882 0.59608 1.00000 +0.62745 0.62745 1.00000 +0.62745 0.62745 1.00000 +0.62745 0.62745 1.00000 +0.62745 0.62745 1.00000 +0.62745 0.62745 1.00000 +0.62745 0.62745 1.00000 +0.62745 0.62745 1.00000 +0.62745 0.62745 1.00000 +0.62745 0.62745 1.00000 +0.47059 0.78431 1.00000 +0.47059 0.78431 1.00000 +0.47059 0.78431 1.00000 +0.47059 0.78431 1.00000 +0.47059 0.78431 1.00000 +0.47059 0.78431 1.00000 +0.47059 0.78431 1.00000 +0.47059 0.78431 1.00000 +0.47059 0.78431 1.00000 +0.26275 0.87843 1.00000 +0.00000 1.00000 1.00000 +0.00000 1.00000 1.00000 +0.00000 1.00000 1.00000 +0.00000 1.00000 1.00000 +0.00000 1.00000 1.00000 +0.00000 1.00000 1.00000 +0.00000 1.00000 1.00000 +0.00000 1.00000 1.00000 +0.00000 1.00000 1.00000 +0.00000 1.00000 0.74118 +0.00000 1.00000 0.70588 +0.00000 1.00000 0.70588 +0.00000 1.00000 0.70588 +0.00000 1.00000 0.70588 +0.00000 1.00000 0.70588 +0.00000 1.00000 0.70588 +0.00000 1.00000 0.70588 +0.00000 1.00000 0.70588 +0.00000 1.00000 0.65490 +0.00000 1.00000 0.00000 +0.00000 1.00000 0.00000 +0.00000 1.00000 0.00000 +0.00000 1.00000 0.00000 +0.00000 1.00000 0.00000 +0.00000 1.00000 0.00000 +0.00000 1.00000 0.00000 +0.00000 1.00000 0.00000 +0.00000 1.00000 0.00000 +0.36078 1.00000 0.00000 +0.70588 1.00000 0.00000 +0.70588 1.00000 0.00000 +0.70588 1.00000 0.00000 +0.70588 1.00000 0.00000 +0.70588 1.00000 0.00000 +0.70588 1.00000 0.00000 +0.70588 1.00000 0.00000 +0.70588 1.00000 0.00000 +0.70588 1.00000 0.00000 +0.98431 1.00000 0.00000 +1.00000 1.00000 0.00000 +1.00000 1.00000 0.00000 +1.00000 1.00000 0.00000 +1.00000 1.00000 0.00000 +1.00000 1.00000 0.00000 +1.00000 1.00000 0.00000 +1.00000 1.00000 0.00000 +1.00000 1.00000 0.00000 +0.99608 0.97647 0.00000 +0.98431 0.85098 0.00000 +0.98431 0.85098 0.00000 +0.98431 0.85098 0.00000 +0.98431 0.85098 0.00000 +0.98431 0.85098 0.00000 +0.98431 0.85098 0.00000 +0.98431 0.85098 0.00000 +0.98431 0.85098 0.00000 +0.98431 0.85098 0.00000 +0.98824 0.77647 0.00000 +0.98824 0.72549 0.00000 +0.98824 0.72549 0.00000 +0.98824 0.72549 0.00000 +0.98824 0.72549 0.00000 +0.98824 0.72549 0.00000 +0.98824 0.72549 0.00000 +0.98824 0.72549 0.00000 +0.98824 0.72549 0.00000 +0.98824 0.72549 0.00000 +1.00000 0.47059 0.00000 +1.00000 0.47059 0.00000 +1.00000 0.47059 0.00000 +1.00000 0.47059 0.00000 +1.00000 0.47059 0.00000 +1.00000 0.47059 0.00000 +1.00000 0.47059 0.00000 +1.00000 0.47059 0.00000 +1.00000 0.47059 0.00000 +1.00000 0.36863 0.00000 +1.00000 0.00000 0.00000 +1.00000 0.00000 0.00000 +1.00000 0.00000 0.00000 +1.00000 0.00000 0.00000 +1.00000 0.00000 0.00000 +1.00000 0.00000 0.00000 +1.00000 0.00000 0.00000 +1.00000 0.00000 0.00000 +1.00000 0.00000 0.00000 +1.00000 0.00000 0.46667 +1.00000 0.00000 0.70588 +1.00000 0.00000 0.70588 +1.00000 0.00000 0.70588 +1.00000 0.00000 0.70588 +1.00000 0.00000 0.70588 +1.00000 0.00000 0.70588 +1.00000 0.00000 0.70588 +1.00000 0.00000 0.70588 +1.00000 0.00000 0.70588 +1.00000 0.00000 1.00000 +1.00000 0.00000 1.00000 +1.00000 0.00000 1.00000 +1.00000 0.00000 1.00000 +1.00000 0.00000 1.00000 +1.00000 0.00000 1.00000 +1.00000 0.00000 1.00000 +1.00000 0.00000 1.00000 +1.00000 0.00000 1.00000 +0.91373 0.00000 0.97255 +0.70588 0.00000 0.90196 +0.70588 0.00000 0.90196 +0.70588 0.00000 0.90196 +0.70588 0.00000 0.90196 +0.70588 0.00000 0.90196 +0.70588 0.00000 0.90196 +0.70588 0.00000 0.90196 +0.70588 0.00000 0.90196 +0.70588 0.00000 0.90196 +0.53333 0.00000 0.87451 +0.47059 0.00000 0.86275 +0.47059 0.00000 0.86275 +0.47059 0.00000 0.86275 +0.47059 0.00000 0.86275 +0.47059 0.00000 0.86275 +0.47059 0.00000 0.86275 +0.47059 0.00000 0.86275 +0.47059 0.00000 0.86275 +0.47059 0.00000 0.86275 +0.00000 0.00000 0.86275 +0.00000 0.00000 0.86275 +0.00000 0.00000 0.86275 +0.00000 0.00000 0.86275 +0.00000 0.00000 0.86275 +0.00000 0.00000 0.86275 +0.00000 0.00000 0.86275 +0.00000 0.00000 0.86275 +0.00000 0.00000 0.86275 +0.00000 0.00000 0.80392 +0.00000 0.00000 0.70588 +0.00000 0.00000 0.70588 +0.00000 0.00000 0.70588 +0.00000 0.00000 0.70588 +0.00000 0.00000 0.70588 +0.00000 0.00000 0.70588 +0.00000 0.00000 0.70588 +0.00000 0.00000 0.70588 +0.00000 0.00000 0.70588 +0.00000 0.00000 0.13725 +0.00000 0.00000 0.00000 +0.00000 0.00000 0.00000 +0.00000 0.00000 0.00000 +0.00000 0.00000 0.00000 +0.00000 0.00000 0.00000 +0.00000 0.00000 0.00000 +0.00000 0.00000 0.00000 +0.00000 0.00000 0.00000 +0.00000 0.00000 0.00000 diff --git a/vendor/x11iraf/ximtool/luts/random1.lut b/vendor/x11iraf/ximtool/luts/random1.lut new file mode 100644 index 00000000..98dafa52 --- /dev/null +++ b/vendor/x11iraf/ximtool/luts/random1.lut @@ -0,0 +1,256 @@ +0.00000 0.00000 0.16471 +0.00000 0.00000 0.16471 +0.00000 0.00000 0.16471 +0.00000 0.00000 0.16471 +0.00000 0.00000 0.16471 +0.00000 0.00000 0.16471 +0.00000 0.00000 0.16471 +0.00000 0.00000 0.16471 +0.23137 0.00000 0.31765 +0.23137 0.00000 0.31765 +0.23137 0.00000 0.31765 +0.23137 0.00000 0.31765 +0.23137 0.00000 0.31765 +0.23137 0.00000 0.31765 +0.23137 0.00000 0.31765 +0.23137 0.00000 0.31765 +0.47059 0.00000 0.47451 +0.47059 0.00000 0.47451 +0.47059 0.00000 0.47451 +0.47059 0.00000 0.47451 +0.47059 0.00000 0.47451 +0.47059 0.00000 0.47451 +0.47059 0.00000 0.47451 +0.47059 0.00000 0.47451 +0.47059 0.00000 0.63922 +0.47059 0.00000 0.63922 +0.47059 0.00000 0.63922 +0.47059 0.00000 0.63922 +0.47059 0.00000 0.63922 +0.47059 0.00000 0.63922 +0.47059 0.00000 0.63922 +0.47059 0.00000 0.63922 +0.23137 0.00000 0.80392 +0.23137 0.00000 0.80392 +0.23137 0.00000 0.80392 +0.23137 0.00000 0.80392 +0.23137 0.00000 0.80392 +0.23137 0.00000 0.80392 +0.23137 0.00000 0.80392 +0.23137 0.00000 0.80392 +0.00000 0.00000 0.97647 +0.00000 0.00000 0.97647 +0.00000 0.00000 0.97647 +0.00000 0.00000 0.97647 +0.00000 0.00000 0.97647 +0.00000 0.00000 0.97647 +0.00000 0.00000 0.97647 +0.00000 0.00000 0.97647 +0.00000 0.05098 0.85098 +0.00000 0.05098 0.85098 +0.00000 0.05098 0.85098 +0.00000 0.05098 0.85098 +0.00000 0.05098 0.85098 +0.00000 0.05098 0.85098 +0.00000 0.05098 0.85098 +0.00000 0.05098 0.85098 +0.00000 0.19608 0.69412 +0.00000 0.19608 0.69412 +0.00000 0.19608 0.69412 +0.00000 0.19608 0.69412 +0.00000 0.19608 0.69412 +0.00000 0.19608 0.69412 +0.00000 0.19608 0.69412 +0.00000 0.19608 0.69412 +0.00000 0.33333 0.56471 +0.00000 0.33333 0.56471 +0.00000 0.33333 0.56471 +0.00000 0.33333 0.56471 +0.00000 0.33333 0.56471 +0.00000 0.33333 0.56471 +0.00000 0.33333 0.56471 +0.00000 0.33333 0.56471 +0.00000 0.42353 0.44706 +0.00000 0.42353 0.44706 +0.00000 0.42353 0.44706 +0.00000 0.42353 0.44706 +0.00000 0.42353 0.44706 +0.00000 0.42353 0.44706 +0.00000 0.42353 0.44706 +0.00000 0.42353 0.44706 +0.00000 0.50980 0.35294 +0.00000 0.50980 0.35294 +0.00000 0.50980 0.35294 +0.00000 0.50980 0.35294 +0.00000 0.50980 0.35294 +0.00000 0.50980 0.35294 +0.00000 0.50980 0.35294 +0.00000 0.50980 0.35294 +0.00000 0.59216 0.25882 +0.00000 0.59216 0.25882 +0.00000 0.59216 0.25882 +0.00000 0.59216 0.25882 +0.00000 0.59216 0.25882 +0.00000 0.59216 0.25882 +0.00000 0.59216 0.25882 +0.00000 0.59216 0.25882 +0.00000 0.67059 0.16471 +0.00000 0.67059 0.16471 +0.00000 0.67059 0.16471 +0.00000 0.67059 0.16471 +0.00000 0.67059 0.16471 +0.00000 0.67059 0.16471 +0.00000 0.67059 0.16471 +0.00000 0.67059 0.16471 +0.00000 0.74902 0.05490 +0.00000 0.74902 0.05490 +0.00000 0.74902 0.05490 +0.00000 0.74902 0.05490 +0.00000 0.74902 0.05490 +0.00000 0.74902 0.05490 +0.00000 0.74902 0.05490 +0.00000 0.74902 0.05490 +0.00000 0.82353 0.00000 +0.00000 0.82353 0.00000 +0.00000 0.82353 0.00000 +0.00000 0.82353 0.00000 +0.00000 0.82353 0.00000 +0.00000 0.82353 0.00000 +0.00000 0.82353 0.00000 +0.00000 0.82353 0.00000 +0.00000 0.89804 0.00000 +0.00000 0.89804 0.00000 +0.00000 0.89804 0.00000 +0.00000 0.89804 0.00000 +0.00000 0.89804 0.00000 +0.00000 0.89804 0.00000 +0.00000 0.89804 0.00000 +0.00000 0.89804 0.00000 +0.00000 0.97255 0.00000 +0.00000 0.97255 0.00000 +0.00000 0.97255 0.00000 +0.00000 0.97255 0.00000 +0.00000 0.97255 0.00000 +0.00000 0.97255 0.00000 +0.00000 0.97255 0.00000 +0.00000 0.97255 0.00000 +0.05490 0.95294 0.00000 +0.05490 0.95294 0.00000 +0.05490 0.95294 0.00000 +0.05490 0.95294 0.00000 +0.05490 0.95294 0.00000 +0.05490 0.95294 0.00000 +0.05490 0.95294 0.00000 +0.05490 0.95294 0.00000 +0.14902 0.88235 0.00000 +0.14902 0.88235 0.00000 +0.14902 0.88235 0.00000 +0.14902 0.88235 0.00000 +0.14902 0.88235 0.00000 +0.14902 0.88235 0.00000 +0.14902 0.88235 0.00000 +0.14902 0.88235 0.00000 +0.41176 0.80784 0.00000 +0.41176 0.80784 0.00000 +0.41176 0.80784 0.00000 +0.41176 0.80784 0.00000 +0.41176 0.80784 0.00000 +0.41176 0.80784 0.00000 +0.41176 0.80784 0.00000 +0.41176 0.80784 0.00000 +0.70980 0.81176 0.00000 +0.70980 0.81176 0.00000 +0.70980 0.81176 0.00000 +0.70980 0.81176 0.00000 +0.70980 0.81176 0.00000 +0.70980 0.81176 0.00000 +0.70980 0.81176 0.00000 +0.70980 0.81176 0.00000 +1.00000 0.93333 0.00000 +1.00000 0.93333 0.00000 +1.00000 0.93333 0.00000 +1.00000 0.93333 0.00000 +1.00000 0.93333 0.00000 +1.00000 0.93333 0.00000 +1.00000 0.93333 0.00000 +1.00000 0.93333 0.00000 +1.00000 1.00000 0.00000 +1.00000 1.00000 0.00000 +1.00000 1.00000 0.00000 +1.00000 1.00000 0.00000 +1.00000 1.00000 0.00000 +1.00000 1.00000 0.00000 +1.00000 1.00000 0.00000 +1.00000 1.00000 0.00000 +1.00000 1.00000 0.00000 +1.00000 1.00000 0.00000 +1.00000 1.00000 0.00000 +1.00000 1.00000 0.00000 +1.00000 1.00000 0.00000 +1.00000 1.00000 0.00000 +1.00000 1.00000 0.00000 +1.00000 1.00000 0.00000 +1.00000 1.00000 0.00000 +1.00000 1.00000 0.00000 +1.00000 1.00000 0.00000 +1.00000 1.00000 0.00000 +1.00000 1.00000 0.00000 +1.00000 1.00000 0.00000 +1.00000 1.00000 0.00000 +1.00000 1.00000 0.00000 +1.00000 0.70196 0.00000 +1.00000 0.70196 0.00000 +1.00000 0.70196 0.00000 +1.00000 0.70196 0.00000 +1.00000 0.70196 0.00000 +1.00000 0.70196 0.00000 +1.00000 0.70196 0.00000 +1.00000 0.70196 0.00000 +1.00000 0.39216 0.00000 +1.00000 0.39216 0.00000 +1.00000 0.39216 0.00000 +1.00000 0.39216 0.00000 +1.00000 0.39216 0.00000 +1.00000 0.39216 0.00000 +1.00000 0.39216 0.00000 +1.00000 0.39216 0.00000 +1.00000 0.09804 0.00000 +1.00000 0.09804 0.00000 +1.00000 0.09804 0.00000 +1.00000 0.09804 0.00000 +1.00000 0.09804 0.00000 +1.00000 0.09804 0.00000 +1.00000 0.09804 0.00000 +1.00000 0.09804 0.00000 +0.97647 0.00000 0.00000 +0.97647 0.00000 0.00000 +0.97647 0.00000 0.00000 +0.97647 0.00000 0.00000 +0.97647 0.00000 0.00000 +0.97647 0.00000 0.00000 +0.97647 0.00000 0.00000 +0.97647 0.00000 0.00000 +0.91373 0.00000 0.00000 +0.91373 0.00000 0.00000 +0.91373 0.00000 0.00000 +0.91373 0.00000 0.00000 +0.91373 0.00000 0.00000 +0.91373 0.00000 0.00000 +0.91373 0.00000 0.00000 +0.91373 0.00000 0.00000 +0.85098 0.00000 0.00000 +0.85098 0.00000 0.00000 +0.85098 0.00000 0.00000 +0.85098 0.00000 0.00000 +0.85098 0.00000 0.00000 +0.85098 0.00000 0.00000 +0.85098 0.00000 0.00000 +0.85098 0.00000 0.00000 +0.78824 0.00000 0.00000 +0.78824 0.00000 0.00000 +0.78824 0.00000 0.00000 +0.78824 0.00000 0.00000 +0.78824 0.00000 0.00000 +0.78824 0.00000 0.00000 +0.78824 0.00000 0.00000 +0.78824 0.00000 0.00000 diff --git a/vendor/x11iraf/ximtool/luts/random2.lut b/vendor/x11iraf/ximtool/luts/random2.lut new file mode 100644 index 00000000..6c0acc81 --- /dev/null +++ b/vendor/x11iraf/ximtool/luts/random2.lut @@ -0,0 +1,256 @@ +0.00000 0.00000 0.00000 +0.00000 0.00000 0.00000 +0.00000 0.00000 0.00000 +0.00000 0.00000 0.00000 +0.00000 0.00000 0.00000 +0.00000 0.00000 0.00000 +0.00000 0.00000 0.00000 +0.00000 0.00000 0.00000 +0.00000 0.00000 0.00000 +0.00000 0.00000 0.00000 +0.00392 0.47059 0.00392 +0.00392 0.47059 0.00392 +0.00392 0.47059 0.00392 +0.00392 0.47059 0.00392 +0.00392 0.47059 0.00392 +0.00392 0.47059 0.00392 +0.00392 0.47059 0.00392 +0.00392 0.47059 0.00392 +0.00392 0.47059 0.00392 +0.00392 0.47059 0.00392 +0.00392 0.62745 0.00392 +0.00392 0.62745 0.00392 +0.00392 0.62745 0.00392 +0.00392 0.62745 0.00392 +0.00392 0.62745 0.00392 +0.00392 0.62745 0.00392 +0.00392 0.62745 0.00392 +0.00392 0.62745 0.00392 +0.00392 0.62745 0.00392 +0.00392 0.62745 0.00392 +0.00392 0.78431 0.00392 +0.00392 0.78431 0.00392 +0.00392 0.78431 0.00392 +0.00392 0.78431 0.00392 +0.00392 0.78431 0.00392 +0.00392 0.78431 0.00392 +0.00392 0.78431 0.00392 +0.00392 0.78431 0.00392 +0.00392 0.78431 0.00392 +0.00392 0.78431 0.00392 +0.00392 1.00000 0.00392 +0.00392 1.00000 0.00392 +0.00392 1.00000 0.00392 +0.00392 1.00000 0.00392 +0.00392 1.00000 0.00392 +0.00392 1.00000 0.00392 +0.00392 1.00000 0.00392 +0.00392 1.00000 0.00392 +0.00392 1.00000 0.00392 +0.00392 1.00000 0.00392 +0.00392 0.86275 0.47059 +0.00392 0.86275 0.47059 +0.00392 0.86275 0.47059 +0.00392 0.86275 0.47059 +0.00392 0.86275 0.47059 +0.00392 0.86275 0.47059 +0.00392 0.86275 0.47059 +0.00392 0.86275 0.47059 +0.00392 0.86275 0.47059 +0.00392 0.86275 0.47059 +0.00000 0.78431 0.62745 +0.00000 0.78431 0.62745 +0.00000 0.78431 0.62745 +0.00000 0.78431 0.62745 +0.00000 0.78431 0.62745 +0.00000 0.78431 0.62745 +0.00000 0.78431 0.62745 +0.00000 0.78431 0.62745 +0.00000 0.78431 0.62745 +0.00000 0.78431 0.62745 +0.00000 0.70588 0.78431 +0.00000 0.70588 0.78431 +0.00000 0.70588 0.78431 +0.00000 0.70588 0.78431 +0.00000 0.70588 0.78431 +0.00000 0.70588 0.78431 +0.00000 0.70588 0.78431 +0.00000 0.70588 0.78431 +0.00000 0.70588 0.78431 +0.00000 0.70588 0.78431 +0.00000 0.62745 1.00000 +0.00000 0.62745 1.00000 +0.00000 0.62745 1.00000 +0.00000 0.62745 1.00000 +0.00000 0.62745 1.00000 +0.00000 0.62745 1.00000 +0.00000 0.62745 1.00000 +0.00000 0.62745 1.00000 +0.00000 0.62745 1.00000 +0.00000 0.62745 1.00000 +0.23529 0.47059 1.00000 +0.23529 0.47059 1.00000 +0.23529 0.47059 1.00000 +0.23529 0.47059 1.00000 +0.23529 0.47059 1.00000 +0.23529 0.47059 1.00000 +0.23529 0.47059 1.00000 +0.23529 0.47059 1.00000 +0.23529 0.47059 1.00000 +0.23529 0.47059 1.00000 +0.23529 0.00392 1.00000 +0.23529 0.00392 1.00000 +0.23529 0.00392 1.00000 +0.23529 0.00392 1.00000 +0.23529 0.00392 1.00000 +0.23529 0.00392 1.00000 +0.23529 0.00392 1.00000 +0.23529 0.00392 1.00000 +0.23529 0.00392 1.00000 +0.23529 0.00392 1.00000 +0.47059 0.00392 0.78431 +0.47059 0.00392 0.78431 +0.47059 0.00392 0.78431 +0.47059 0.00392 0.78431 +0.47059 0.00392 0.78431 +0.47059 0.00392 0.78431 +0.47059 0.00392 0.78431 +0.47059 0.00392 0.78431 +0.47059 0.00392 0.78431 +0.47059 0.00392 0.78431 +0.62745 0.00392 0.62745 +0.62745 0.00392 0.62745 +0.62745 0.00392 0.62745 +0.62745 0.00392 0.62745 +0.62745 0.00392 0.62745 +0.62745 0.00392 0.62745 +0.62745 0.00392 0.62745 +0.62745 0.00392 0.62745 +0.62745 0.00392 0.62745 +0.62745 0.00392 0.62745 +0.78431 0.00392 0.47059 +0.78431 0.00392 0.47059 +0.78431 0.00392 0.47059 +0.78431 0.00392 0.47059 +0.78431 0.00392 0.47059 +0.78431 0.00392 0.47059 +0.78431 0.00392 0.47059 +0.78431 0.00392 0.47059 +0.78431 0.00392 0.47059 +0.78431 0.00392 0.47059 +0.90196 0.11765 0.23529 +0.90196 0.11765 0.23529 +0.90196 0.11765 0.23529 +0.90196 0.11765 0.23529 +0.90196 0.11765 0.23529 +0.90196 0.11765 0.23529 +0.90196 0.11765 0.23529 +0.90196 0.11765 0.23529 +0.90196 0.11765 0.23529 +0.90196 0.11765 0.23529 +1.00000 0.23529 0.00000 +1.00000 0.23529 0.00000 +1.00000 0.23529 0.00000 +1.00000 0.23529 0.00000 +1.00000 0.23529 0.00000 +1.00000 0.23529 0.00000 +1.00000 0.23529 0.00000 +1.00000 0.23529 0.00000 +1.00000 0.23529 0.00000 +1.00000 0.23529 0.00000 +1.00000 0.47059 0.00000 +1.00000 0.47059 0.00000 +1.00000 0.47059 0.00000 +1.00000 0.47059 0.00000 +1.00000 0.47059 0.00000 +1.00000 0.47059 0.00000 +1.00000 0.47059 0.00000 +1.00000 0.47059 0.00000 +1.00000 0.47059 0.00000 +1.00000 0.47059 0.00000 +0.99216 0.59608 0.00000 +0.99216 0.59608 0.00000 +0.99216 0.59608 0.00000 +0.99216 0.59608 0.00000 +0.99216 0.59608 0.00000 +0.99216 0.59608 0.00000 +0.99216 0.59608 0.00000 +0.99216 0.59608 0.00000 +0.99216 0.59608 0.00000 +0.99216 0.59608 0.00000 +0.98824 0.72549 0.00000 +0.98824 0.72549 0.00000 +0.98824 0.72549 0.00000 +0.98824 0.72549 0.00000 +0.98824 0.72549 0.00000 +0.98824 0.72549 0.00000 +0.98824 0.72549 0.00000 +0.98824 0.72549 0.00000 +0.98824 0.72549 0.00000 +0.98824 0.72549 0.00000 +0.98431 0.85098 0.00000 +0.98431 0.85098 0.00000 +0.98431 0.85098 0.00000 +0.98431 0.85098 0.00000 +0.98431 0.85098 0.00000 +0.98431 0.85098 0.00000 +0.98431 0.85098 0.00000 +0.98431 0.85098 0.00000 +0.98431 0.85098 0.00000 +0.98431 0.85098 0.00000 +0.98039 0.90196 0.00000 +0.98039 0.90196 0.00000 +0.98039 0.90196 0.00000 +0.98039 0.90196 0.00000 +0.98039 0.90196 0.00000 +0.98039 0.90196 0.00000 +0.98039 0.90196 0.00000 +0.98039 0.90196 0.00000 +0.98039 0.90196 0.00000 +0.98039 0.90196 0.00000 +0.98039 0.98039 0.47059 +0.98039 0.98039 0.47059 +0.98039 0.98039 0.47059 +0.98039 0.98039 0.47059 +0.98039 0.98039 0.47059 +0.98039 0.98039 0.47059 +0.98039 0.98039 0.47059 +0.98039 0.98039 0.47059 +0.98039 0.98039 0.47059 +0.98039 0.98039 0.47059 +1.00000 1.00000 1.00000 +1.00000 1.00000 1.00000 +1.00000 1.00000 1.00000 +1.00000 1.00000 1.00000 +1.00000 1.00000 1.00000 +1.00000 1.00000 1.00000 +1.00000 1.00000 1.00000 +1.00000 1.00000 1.00000 +1.00000 1.00000 1.00000 +1.00000 1.00000 1.00000 +1.00000 1.00000 1.00000 +1.00000 1.00000 1.00000 +1.00000 1.00000 1.00000 +1.00000 1.00000 1.00000 +1.00000 1.00000 1.00000 +1.00000 1.00000 1.00000 +1.00000 1.00000 1.00000 +1.00000 1.00000 1.00000 +1.00000 1.00000 1.00000 +1.00000 1.00000 1.00000 +1.00000 1.00000 1.00000 +1.00000 1.00000 1.00000 +1.00000 1.00000 1.00000 +1.00000 1.00000 1.00000 +1.00000 1.00000 1.00000 +1.00000 1.00000 1.00000 +1.00000 1.00000 1.00000 +1.00000 1.00000 1.00000 +1.00000 1.00000 1.00000 +1.00000 1.00000 1.00000 +1.00000 1.00000 1.00000 +1.00000 1.00000 1.00000 +1.00000 1.00000 1.00000 +1.00000 1.00000 1.00000 +1.00000 1.00000 1.00000 +1.00000 1.00000 1.00000 diff --git a/vendor/x11iraf/ximtool/luts/random3.lut b/vendor/x11iraf/ximtool/luts/random3.lut new file mode 100644 index 00000000..60f216ea --- /dev/null +++ b/vendor/x11iraf/ximtool/luts/random3.lut @@ -0,0 +1,256 @@ +0.00000 0.00000 0.00000 +0.00000 0.00000 0.00000 +0.00000 0.00000 0.00000 +0.00000 0.00000 0.00000 +0.00000 0.00000 0.00000 +0.00000 0.00000 0.00000 +0.00000 0.00000 0.00000 +0.00000 0.00000 0.00000 +0.00000 0.00000 0.00000 +0.00000 0.00000 0.00000 +0.00000 0.00000 0.00000 +0.00000 0.00000 0.00000 +0.00000 0.00000 0.00000 +0.00000 0.00000 0.47059 +0.00000 0.00000 0.47059 +0.00000 0.00000 0.47059 +0.00000 0.00000 0.47059 +0.00000 0.00000 0.47059 +0.00000 0.00000 0.47059 +0.00000 0.00000 0.47059 +0.00000 0.00000 0.47059 +0.00000 0.00000 0.47059 +0.00000 0.00000 0.47059 +0.00000 0.00000 0.47059 +0.00000 0.00000 0.47059 +0.00000 0.00000 0.47059 +0.00000 0.00000 0.70588 +0.00000 0.00000 0.70588 +0.00000 0.00000 0.70588 +0.00000 0.00000 0.70588 +0.00000 0.00000 0.70588 +0.00000 0.00000 0.70588 +0.00000 0.00000 0.70588 +0.00000 0.00000 0.70588 +0.00000 0.00000 0.70588 +0.00000 0.00000 0.70588 +0.00000 0.00000 0.70588 +0.00000 0.00000 0.70588 +0.00000 0.00000 0.70588 +0.00000 0.00000 0.86275 +0.00000 0.00000 0.86275 +0.00000 0.00000 0.86275 +0.00000 0.00000 0.86275 +0.00000 0.00000 0.86275 +0.00000 0.00000 0.86275 +0.00000 0.00000 0.86275 +0.00000 0.00000 0.86275 +0.00000 0.00000 0.86275 +0.00000 0.00000 0.86275 +0.00000 0.00000 0.86275 +0.00000 0.00000 0.86275 +0.00000 0.00000 0.86275 +0.00000 0.00000 1.00000 +0.00000 0.00000 1.00000 +0.00000 0.00000 1.00000 +0.00000 0.00000 1.00000 +0.00000 0.00000 1.00000 +0.00000 0.00000 1.00000 +0.00000 0.00000 1.00000 +0.00000 0.00000 1.00000 +0.00000 0.00000 1.00000 +0.00000 0.00000 1.00000 +0.00000 0.00000 1.00000 +0.00000 0.00000 1.00000 +0.00000 0.00000 1.00000 +0.00000 0.47059 1.00000 +0.00000 0.47059 1.00000 +0.00000 0.47059 1.00000 +0.00000 0.47059 1.00000 +0.00000 0.47059 1.00000 +0.00000 0.47059 1.00000 +0.00000 0.47059 1.00000 +0.00000 0.47059 1.00000 +0.00000 0.47059 1.00000 +0.00000 0.47059 1.00000 +0.00000 0.47059 1.00000 +0.00000 0.47059 1.00000 +0.00000 0.47059 1.00000 +0.00000 0.78431 1.00000 +0.00000 0.78431 1.00000 +0.00000 0.78431 1.00000 +0.00000 0.78431 1.00000 +0.00000 0.78431 1.00000 +0.00000 0.78431 1.00000 +0.00000 0.78431 1.00000 +0.00000 0.78431 1.00000 +0.00000 0.78431 1.00000 +0.00000 0.78431 1.00000 +0.00000 0.78431 1.00000 +0.00000 0.78431 1.00000 +0.00000 0.78431 1.00000 +0.00000 1.00000 1.00000 +0.00000 1.00000 1.00000 +0.00000 1.00000 1.00000 +0.00000 1.00000 1.00000 +0.00000 1.00000 1.00000 +0.00000 1.00000 1.00000 +0.00000 1.00000 1.00000 +0.00000 1.00000 1.00000 +0.00000 1.00000 1.00000 +0.00000 1.00000 1.00000 +0.00000 1.00000 1.00000 +0.00000 1.00000 1.00000 +0.00000 1.00000 1.00000 +0.00000 1.00000 0.70588 +0.00000 1.00000 0.70588 +0.00000 1.00000 0.70588 +0.00000 1.00000 0.70588 +0.00000 1.00000 0.70588 +0.00000 1.00000 0.70588 +0.00000 1.00000 0.70588 +0.00000 1.00000 0.70588 +0.00000 1.00000 0.70588 +0.00000 1.00000 0.70588 +0.00000 1.00000 0.70588 +0.00000 1.00000 0.70588 +0.00000 1.00000 0.70588 +0.00000 1.00000 0.00000 +0.00000 1.00000 0.00000 +0.00000 1.00000 0.00000 +0.00000 1.00000 0.00000 +0.00000 1.00000 0.00000 +0.00000 1.00000 0.00000 +0.00000 1.00000 0.00000 +0.00000 1.00000 0.00000 +0.00000 1.00000 0.00000 +0.00000 1.00000 0.00000 +0.00000 1.00000 0.00000 +0.00000 1.00000 0.00000 +0.00000 1.00000 0.00000 +0.70588 1.00000 0.00000 +0.70588 1.00000 0.00000 +0.70588 1.00000 0.00000 +0.70588 1.00000 0.00000 +0.70588 1.00000 0.00000 +0.70588 1.00000 0.00000 +0.70588 1.00000 0.00000 +0.70588 1.00000 0.00000 +0.70588 1.00000 0.00000 +0.70588 1.00000 0.00000 +0.70588 1.00000 0.00000 +0.70588 1.00000 0.00000 +0.70588 1.00000 0.00000 +1.00000 1.00000 0.00000 +1.00000 1.00000 0.00000 +1.00000 1.00000 0.00000 +1.00000 1.00000 0.00000 +1.00000 1.00000 0.00000 +1.00000 1.00000 0.00000 +1.00000 1.00000 0.00000 +1.00000 1.00000 0.00000 +1.00000 1.00000 0.00000 +1.00000 1.00000 0.00000 +1.00000 1.00000 0.00000 +1.00000 1.00000 0.00000 +1.00000 1.00000 0.00000 +0.98824 0.72549 0.00000 +0.98824 0.72549 0.00000 +0.98824 0.72549 0.00000 +0.98824 0.72549 0.00000 +0.98824 0.72549 0.00000 +0.98824 0.72549 0.00000 +0.98824 0.72549 0.00000 +0.98824 0.72549 0.00000 +0.98824 0.72549 0.00000 +0.98824 0.72549 0.00000 +0.98824 0.72549 0.00000 +0.98824 0.72549 0.00000 +0.98824 0.72549 0.00000 +1.00000 0.47059 0.00000 +1.00000 0.47059 0.00000 +1.00000 0.47059 0.00000 +1.00000 0.47059 0.00000 +1.00000 0.47059 0.00000 +1.00000 0.47059 0.00000 +1.00000 0.47059 0.00000 +1.00000 0.47059 0.00000 +1.00000 0.47059 0.00000 +1.00000 0.47059 0.00000 +1.00000 0.47059 0.00000 +1.00000 0.47059 0.00000 +1.00000 0.47059 0.00000 +1.00000 0.00000 0.00000 +1.00000 0.00000 0.00000 +1.00000 0.00000 0.00000 +1.00000 0.00000 0.00000 +1.00000 0.00000 0.00000 +1.00000 0.00000 0.00000 +1.00000 0.00000 0.00000 +1.00000 0.00000 0.00000 +1.00000 0.00000 0.00000 +1.00000 0.00000 0.00000 +1.00000 0.00000 0.00000 +1.00000 0.00000 0.00000 +1.00000 0.00000 0.00000 +1.00000 0.00000 0.70588 +1.00000 0.00000 0.70588 +1.00000 0.00000 0.70588 +1.00000 0.00000 0.70588 +1.00000 0.00000 0.70588 +1.00000 0.00000 0.70588 +1.00000 0.00000 0.70588 +1.00000 0.00000 0.70588 +1.00000 0.00000 0.70588 +1.00000 0.00000 0.70588 +1.00000 0.00000 0.70588 +1.00000 0.00000 0.70588 +1.00000 0.00000 0.70588 +1.00000 0.00000 1.00000 +1.00000 0.00000 1.00000 +1.00000 0.00000 1.00000 +1.00000 0.00000 1.00000 +1.00000 0.00000 1.00000 +1.00000 0.00000 1.00000 +1.00000 0.00000 1.00000 +1.00000 0.00000 1.00000 +1.00000 0.00000 1.00000 +1.00000 0.00000 1.00000 +1.00000 0.00000 1.00000 +1.00000 0.00000 1.00000 +1.00000 0.00000 1.00000 +1.00000 0.47059 1.00000 +1.00000 0.47059 1.00000 +1.00000 0.47059 1.00000 +1.00000 0.47059 1.00000 +1.00000 0.47059 1.00000 +1.00000 0.47059 1.00000 +1.00000 0.47059 1.00000 +1.00000 0.47059 1.00000 +1.00000 0.47059 1.00000 +1.00000 0.47059 1.00000 +1.00000 0.47059 1.00000 +1.00000 0.47059 1.00000 +1.00000 0.47059 1.00000 +1.00000 0.70588 1.00000 +1.00000 0.70588 1.00000 +1.00000 0.70588 1.00000 +1.00000 0.70588 1.00000 +1.00000 0.70588 1.00000 +1.00000 0.70588 1.00000 +1.00000 0.70588 1.00000 +1.00000 0.70588 1.00000 +1.00000 0.70588 1.00000 +1.00000 0.70588 1.00000 +1.00000 0.70588 1.00000 +1.00000 0.70588 1.00000 +1.00000 0.70588 1.00000 +1.00000 1.00000 1.00000 +1.00000 1.00000 1.00000 +1.00000 1.00000 1.00000 +1.00000 1.00000 1.00000 +1.00000 1.00000 1.00000 +1.00000 1.00000 1.00000 +1.00000 1.00000 1.00000 +1.00000 1.00000 1.00000 +1.00000 1.00000 1.00000 diff --git a/vendor/x11iraf/ximtool/luts/random4.lut b/vendor/x11iraf/ximtool/luts/random4.lut new file mode 100644 index 00000000..6865308b --- /dev/null +++ b/vendor/x11iraf/ximtool/luts/random4.lut @@ -0,0 +1,256 @@ +0.00000 0.00000 0.00000 +0.00000 0.00000 0.00000 +0.00000 0.00000 0.00000 +0.00000 0.00000 0.00000 +0.00000 0.00000 0.00000 +0.00000 0.00000 0.00000 +0.00000 0.00000 0.00000 +0.00000 0.00000 0.00000 +0.00000 0.00000 0.00000 +0.00000 0.00000 0.00000 +0.00000 0.00000 0.00000 +0.00000 0.00000 0.00000 +0.00000 0.00000 0.70588 +0.00000 0.00000 0.70588 +0.00000 0.00000 0.70588 +0.00000 0.00000 0.70588 +0.00000 0.00000 0.70588 +0.00000 0.00000 0.70588 +0.00000 0.00000 0.70588 +0.00000 0.00000 0.70588 +0.00000 0.00000 0.70588 +0.00000 0.00000 0.70588 +0.00000 0.00000 0.70588 +0.00000 0.00000 0.70588 +0.00000 0.00000 0.86275 +0.00000 0.00000 0.86275 +0.00000 0.00000 0.86275 +0.00000 0.00000 0.86275 +0.00000 0.00000 0.86275 +0.00000 0.00000 0.86275 +0.00000 0.00000 0.86275 +0.00000 0.00000 0.86275 +0.00000 0.00000 0.86275 +0.00000 0.00000 0.86275 +0.00000 0.00000 0.86275 +0.00000 0.00000 0.86275 +0.47059 0.00000 0.86275 +0.47059 0.00000 0.86275 +0.47059 0.00000 0.86275 +0.47059 0.00000 0.86275 +0.47059 0.00000 0.86275 +0.47059 0.00000 0.86275 +0.47059 0.00000 0.86275 +0.47059 0.00000 0.86275 +0.47059 0.00000 0.86275 +0.47059 0.00000 0.86275 +0.47059 0.00000 0.86275 +0.47059 0.00000 0.86275 +0.70588 0.00000 0.90196 +0.70588 0.00000 0.90196 +0.70588 0.00000 0.90196 +0.70588 0.00000 0.90196 +0.70588 0.00000 0.90196 +0.70588 0.00000 0.90196 +0.70588 0.00000 0.90196 +0.70588 0.00000 0.90196 +0.70588 0.00000 0.90196 +0.70588 0.00000 0.90196 +0.70588 0.00000 0.90196 +0.70588 0.00000 0.90196 +1.00000 0.00000 1.00000 +1.00000 0.00000 1.00000 +1.00000 0.00000 1.00000 +1.00000 0.00000 1.00000 +1.00000 0.00000 1.00000 +1.00000 0.00000 1.00000 +1.00000 0.00000 1.00000 +1.00000 0.00000 1.00000 +1.00000 0.00000 1.00000 +1.00000 0.00000 1.00000 +1.00000 0.00000 1.00000 +1.00000 0.00000 1.00000 +1.00000 0.00000 0.70588 +1.00000 0.00000 0.70588 +1.00000 0.00000 0.70588 +1.00000 0.00000 0.70588 +1.00000 0.00000 0.70588 +1.00000 0.00000 0.70588 +1.00000 0.00000 0.70588 +1.00000 0.00000 0.70588 +1.00000 0.00000 0.70588 +1.00000 0.00000 0.70588 +1.00000 0.00000 0.70588 +1.00000 0.00000 0.70588 +1.00000 0.00000 0.00000 +1.00000 0.00000 0.00000 +1.00000 0.00000 0.00000 +1.00000 0.00000 0.00000 +1.00000 0.00000 0.00000 +1.00000 0.00000 0.00000 +1.00000 0.00000 0.00000 +1.00000 0.00000 0.00000 +1.00000 0.00000 0.00000 +1.00000 0.00000 0.00000 +1.00000 0.00000 0.00000 +1.00000 0.00000 0.00000 +1.00000 0.47059 0.00000 +1.00000 0.47059 0.00000 +1.00000 0.47059 0.00000 +1.00000 0.47059 0.00000 +1.00000 0.47059 0.00000 +1.00000 0.47059 0.00000 +1.00000 0.47059 0.00000 +1.00000 0.47059 0.00000 +1.00000 0.47059 0.00000 +1.00000 0.47059 0.00000 +1.00000 0.47059 0.00000 +1.00000 0.47059 0.00000 +0.98824 0.72549 0.00000 +0.98824 0.72549 0.00000 +0.98824 0.72549 0.00000 +0.98824 0.72549 0.00000 +0.98824 0.72549 0.00000 +0.98824 0.72549 0.00000 +0.98824 0.72549 0.00000 +0.98824 0.72549 0.00000 +0.98824 0.72549 0.00000 +0.98824 0.72549 0.00000 +0.98824 0.72549 0.00000 +0.98824 0.72549 0.00000 +0.98431 0.85098 0.00000 +0.98431 0.85098 0.00000 +0.98431 0.85098 0.00000 +0.98431 0.85098 0.00000 +0.98431 0.85098 0.00000 +0.98431 0.85098 0.00000 +0.98431 0.85098 0.00000 +0.98431 0.85098 0.00000 +0.98431 0.85098 0.00000 +0.98431 0.85098 0.00000 +0.98431 0.85098 0.00000 +0.98431 0.85098 0.00000 +1.00000 1.00000 0.00000 +1.00000 1.00000 0.00000 +1.00000 1.00000 0.00000 +1.00000 1.00000 0.00000 +1.00000 1.00000 0.00000 +1.00000 1.00000 0.00000 +1.00000 1.00000 0.00000 +1.00000 1.00000 0.00000 +1.00000 1.00000 0.00000 +1.00000 1.00000 0.00000 +1.00000 1.00000 0.00000 +1.00000 1.00000 0.00000 +0.70588 1.00000 0.00000 +0.70588 1.00000 0.00000 +0.70588 1.00000 0.00000 +0.70588 1.00000 0.00000 +0.70588 1.00000 0.00000 +0.70588 1.00000 0.00000 +0.70588 1.00000 0.00000 +0.70588 1.00000 0.00000 +0.70588 1.00000 0.00000 +0.70588 1.00000 0.00000 +0.70588 1.00000 0.00000 +0.70588 1.00000 0.00000 +0.00000 1.00000 0.00000 +0.00000 1.00000 0.00000 +0.00000 1.00000 0.00000 +0.00000 1.00000 0.00000 +0.00000 1.00000 0.00000 +0.00000 1.00000 0.00000 +0.00000 1.00000 0.00000 +0.00000 1.00000 0.00000 +0.00000 1.00000 0.00000 +0.00000 1.00000 0.00000 +0.00000 1.00000 0.00000 +0.00000 1.00000 0.00000 +0.00000 1.00000 0.70588 +0.00000 1.00000 0.70588 +0.00000 1.00000 0.70588 +0.00000 1.00000 0.70588 +0.00000 1.00000 0.70588 +0.00000 1.00000 0.70588 +0.00000 1.00000 0.70588 +0.00000 1.00000 0.70588 +0.00000 1.00000 0.70588 +0.00000 1.00000 0.70588 +0.00000 1.00000 0.70588 +0.00000 1.00000 0.70588 +0.00000 1.00000 1.00000 +0.00000 1.00000 1.00000 +0.00000 1.00000 1.00000 +0.00000 1.00000 1.00000 +0.00000 1.00000 1.00000 +0.00000 1.00000 1.00000 +0.00000 1.00000 1.00000 +0.00000 1.00000 1.00000 +0.00000 1.00000 1.00000 +0.00000 1.00000 1.00000 +0.00000 1.00000 1.00000 +0.00000 1.00000 1.00000 +0.47059 0.78431 1.00000 +0.47059 0.78431 1.00000 +0.47059 0.78431 1.00000 +0.47059 0.78431 1.00000 +0.47059 0.78431 1.00000 +0.47059 0.78431 1.00000 +0.47059 0.78431 1.00000 +0.47059 0.78431 1.00000 +0.47059 0.78431 1.00000 +0.47059 0.78431 1.00000 +0.47059 0.78431 1.00000 +0.47059 0.78431 1.00000 +0.62745 0.62745 1.00000 +0.62745 0.62745 1.00000 +0.62745 0.62745 1.00000 +0.62745 0.62745 1.00000 +0.62745 0.62745 1.00000 +0.62745 0.62745 1.00000 +0.62745 0.62745 1.00000 +0.62745 0.62745 1.00000 +0.62745 0.62745 1.00000 +0.62745 0.62745 1.00000 +0.62745 0.62745 1.00000 +0.62745 0.62745 1.00000 +0.78431 0.47059 1.00000 +0.78431 0.47059 1.00000 +0.78431 0.47059 1.00000 +0.78431 0.47059 1.00000 +0.78431 0.47059 1.00000 +0.78431 0.47059 1.00000 +0.78431 0.47059 1.00000 +0.78431 0.47059 1.00000 +0.78431 0.47059 1.00000 +0.78431 0.47059 1.00000 +0.78431 0.47059 1.00000 +0.78431 0.47059 1.00000 +1.00000 0.70588 1.00000 +1.00000 0.70588 1.00000 +1.00000 0.70588 1.00000 +1.00000 0.70588 1.00000 +1.00000 0.70588 1.00000 +1.00000 0.70588 1.00000 +1.00000 0.70588 1.00000 +1.00000 0.70588 1.00000 +1.00000 0.70588 1.00000 +1.00000 0.70588 1.00000 +1.00000 0.70588 1.00000 +1.00000 0.70588 1.00000 +1.00000 0.86275 1.00000 +1.00000 0.86275 1.00000 +1.00000 0.86275 1.00000 +1.00000 0.86275 1.00000 +1.00000 0.86275 1.00000 +1.00000 0.86275 1.00000 +1.00000 0.86275 1.00000 +1.00000 0.86275 1.00000 +1.00000 0.86275 1.00000 +1.00000 0.86275 1.00000 +1.00000 0.86275 1.00000 +1.00000 0.86275 1.00000 +1.00000 1.00000 1.00000 +1.00000 1.00000 1.00000 +1.00000 1.00000 1.00000 +1.00000 1.00000 1.00000 diff --git a/vendor/x11iraf/ximtool/luts/real.lut b/vendor/x11iraf/ximtool/luts/real.lut new file mode 100644 index 00000000..4eb841ea --- /dev/null +++ b/vendor/x11iraf/ximtool/luts/real.lut @@ -0,0 +1,256 @@ +0.00784 0.00392 0.00000 +0.01569 0.00784 0.00000 +0.02353 0.01176 0.00000 +0.03137 0.01569 0.00000 +0.03922 0.01961 0.00000 +0.04706 0.02353 0.00000 +0.05490 0.02745 0.00000 +0.06275 0.03137 0.00000 +0.07059 0.03529 0.00000 +0.07843 0.03922 0.00000 +0.08627 0.04314 0.00000 +0.09412 0.04706 0.00000 +0.10196 0.05098 0.00000 +0.10980 0.05490 0.00000 +0.11765 0.05882 0.00000 +0.12549 0.06275 0.00000 +0.13333 0.06667 0.00000 +0.14118 0.07059 0.00000 +0.14902 0.07451 0.00000 +0.15686 0.07843 0.00000 +0.16471 0.08235 0.00000 +0.17255 0.08627 0.00000 +0.18039 0.09020 0.00000 +0.18824 0.09412 0.00000 +0.19608 0.09804 0.00000 +0.20392 0.10196 0.00000 +0.21176 0.10588 0.00000 +0.21961 0.10980 0.00000 +0.22745 0.11373 0.00000 +0.23529 0.11765 0.00000 +0.24314 0.12157 0.00000 +0.25098 0.12549 0.00000 +0.25882 0.12941 0.00000 +0.26667 0.13333 0.00000 +0.27451 0.13725 0.00000 +0.28235 0.14118 0.00000 +0.29020 0.14510 0.00000 +0.29804 0.14902 0.00000 +0.30588 0.15294 0.00000 +0.31373 0.15686 0.00000 +0.32157 0.16078 0.00000 +0.32941 0.16471 0.00000 +0.33725 0.16863 0.00000 +0.34510 0.17255 0.00000 +0.35294 0.17647 0.00000 +0.36078 0.18039 0.00000 +0.36863 0.18431 0.00000 +0.37647 0.18824 0.00000 +0.38431 0.19216 0.00000 +0.39216 0.19608 0.00000 +0.40000 0.20000 0.00000 +0.40784 0.20392 0.00000 +0.41569 0.20784 0.00000 +0.42353 0.21176 0.00000 +0.43137 0.21569 0.00000 +0.43922 0.21961 0.00000 +0.44706 0.22353 0.00000 +0.45490 0.22745 0.00000 +0.46275 0.23137 0.00000 +0.47059 0.23529 0.00000 +0.47843 0.23922 0.00000 +0.48627 0.24314 0.00000 +0.49412 0.24706 0.00000 +0.50196 0.25098 0.00000 +0.50980 0.25490 0.00000 +0.51765 0.25882 0.00000 +0.52549 0.26275 0.00000 +0.53333 0.26667 0.00000 +0.54118 0.27059 0.00000 +0.54902 0.27451 0.00000 +0.55686 0.27843 0.00000 +0.56471 0.28235 0.00000 +0.57255 0.28627 0.00000 +0.58039 0.29020 0.00000 +0.58824 0.29412 0.00000 +0.59608 0.29804 0.00000 +0.60392 0.30196 0.00000 +0.61176 0.30588 0.00000 +0.61961 0.30980 0.00000 +0.62745 0.31373 0.00000 +0.63529 0.31765 0.00000 +0.64314 0.32157 0.00000 +0.65098 0.32549 0.00000 +0.65882 0.32941 0.00000 +0.66667 0.33333 0.00000 +0.67451 0.33725 0.00000 +0.68235 0.34118 0.00000 +0.69020 0.34510 0.00000 +0.69804 0.34902 0.00000 +0.70588 0.35294 0.00000 +0.71373 0.35686 0.00000 +0.72157 0.36078 0.00000 +0.72941 0.36471 0.00000 +0.73725 0.36863 0.00000 +0.74510 0.37255 0.00000 +0.75294 0.37647 0.00000 +0.76078 0.38039 0.00000 +0.76863 0.38431 0.00000 +0.77647 0.38824 0.00000 +0.78431 0.39216 0.00000 +0.79216 0.39608 0.00000 +0.80000 0.40000 0.00000 +0.80784 0.40392 0.00000 +0.81569 0.40784 0.00000 +0.82353 0.41176 0.00000 +0.83137 0.41569 0.00000 +0.83922 0.41961 0.00000 +0.84706 0.42353 0.00000 +0.85490 0.42745 0.00000 +0.86275 0.43137 0.00000 +0.87059 0.43529 0.00000 +0.87843 0.43922 0.00000 +0.88627 0.44314 0.00000 +0.89412 0.44706 0.00000 +0.90196 0.45098 0.00000 +0.90980 0.45490 0.00000 +0.91765 0.45882 0.00000 +0.92549 0.46275 0.00000 +0.93333 0.46667 0.00000 +0.94118 0.47059 0.00000 +0.94902 0.47451 0.00000 +0.95686 0.47843 0.00000 +0.96471 0.48235 0.00000 +0.97255 0.48627 0.00000 +0.98039 0.49020 0.00000 +0.98824 0.49412 0.00000 +0.99608 0.49804 0.00000 +1.00000 0.50196 0.00000 +1.00000 0.50588 0.00784 +1.00000 0.50980 0.01569 +1.00000 0.51373 0.02353 +1.00000 0.51765 0.03137 +1.00000 0.52157 0.03922 +1.00000 0.52549 0.04706 +1.00000 0.52941 0.05490 +1.00000 0.53333 0.06275 +1.00000 0.53725 0.07059 +1.00000 0.54118 0.07843 +1.00000 0.54510 0.08627 +1.00000 0.54902 0.09412 +1.00000 0.55294 0.10196 +1.00000 0.55686 0.10980 +1.00000 0.56078 0.11765 +1.00000 0.56471 0.12549 +1.00000 0.56863 0.13333 +1.00000 0.57255 0.14118 +1.00000 0.57647 0.14902 +1.00000 0.58039 0.15686 +1.00000 0.58431 0.16471 +1.00000 0.58824 0.17255 +1.00000 0.59216 0.18039 +1.00000 0.59608 0.18824 +1.00000 0.60000 0.19608 +1.00000 0.60392 0.20392 +1.00000 0.60784 0.21176 +1.00000 0.61176 0.21961 +1.00000 0.61569 0.22745 +1.00000 0.61961 0.23529 +1.00000 0.62353 0.24314 +1.00000 0.62745 0.25098 +1.00000 0.63137 0.25882 +1.00000 0.63529 0.26667 +1.00000 0.63922 0.27451 +1.00000 0.64314 0.28235 +1.00000 0.64706 0.29020 +1.00000 0.65098 0.29804 +1.00000 0.65490 0.30588 +1.00000 0.65882 0.31373 +1.00000 0.66275 0.32157 +1.00000 0.66667 0.32941 +1.00000 0.67059 0.33725 +1.00000 0.67451 0.34510 +1.00000 0.67843 0.35294 +1.00000 0.68235 0.36078 +1.00000 0.68627 0.36863 +1.00000 0.69020 0.37647 +1.00000 0.69412 0.38431 +1.00000 0.69804 0.39216 +1.00000 0.70196 0.40000 +1.00000 0.70588 0.40784 +1.00000 0.70980 0.41569 +1.00000 0.71373 0.42353 +1.00000 0.71765 0.43137 +1.00000 0.72157 0.43922 +1.00000 0.72549 0.44706 +1.00000 0.72941 0.45490 +1.00000 0.73333 0.46275 +1.00000 0.73725 0.47059 +1.00000 0.74118 0.47843 +1.00000 0.74510 0.48627 +1.00000 0.74902 0.49412 +1.00000 0.75294 0.50196 +1.00000 0.75686 0.50980 +1.00000 0.76078 0.51765 +1.00000 0.76471 0.52549 +1.00000 0.76863 0.53333 +1.00000 0.77255 0.54118 +1.00000 0.77647 0.54902 +1.00000 0.78039 0.55686 +1.00000 0.78431 0.56471 +1.00000 0.78824 0.57255 +1.00000 0.79216 0.58039 +1.00000 0.79608 0.58824 +1.00000 0.80000 0.59608 +1.00000 0.80392 0.60392 +1.00000 0.80784 0.61176 +1.00000 0.81176 0.61961 +1.00000 0.81569 0.62745 +1.00000 0.81961 0.63529 +1.00000 0.82353 0.64314 +1.00000 0.82745 0.65098 +1.00000 0.83137 0.65882 +1.00000 0.83529 0.66667 +1.00000 0.83922 0.67451 +1.00000 0.84314 0.68235 +1.00000 0.84706 0.69020 +1.00000 0.85098 0.69804 +1.00000 0.85490 0.70588 +1.00000 0.85882 0.71373 +1.00000 0.86275 0.72157 +1.00000 0.86667 0.72941 +1.00000 0.87059 0.73725 +1.00000 0.87451 0.74510 +1.00000 0.87843 0.75294 +1.00000 0.88235 0.76078 +1.00000 0.88627 0.76863 +1.00000 0.89020 0.77647 +1.00000 0.89412 0.78431 +1.00000 0.89804 0.79216 +1.00000 0.90196 0.80000 +1.00000 0.90588 0.80784 +1.00000 0.90980 0.81569 +1.00000 0.91373 0.82353 +1.00000 0.91765 0.83137 +1.00000 0.92157 0.83922 +1.00000 0.92549 0.84706 +1.00000 0.92941 0.85490 +1.00000 0.93333 0.86275 +1.00000 0.93725 0.87059 +1.00000 0.94118 0.87843 +1.00000 0.94510 0.88627 +1.00000 0.94902 0.89412 +1.00000 0.95294 0.90196 +1.00000 0.95686 0.90980 +1.00000 0.96078 0.91765 +1.00000 0.96471 0.92549 +1.00000 0.96863 0.93333 +1.00000 0.97255 0.94118 +1.00000 0.97647 0.94902 +1.00000 0.98039 0.95686 +1.00000 0.98431 0.96471 +1.00000 0.98824 0.97255 +1.00000 0.99216 0.98039 +1.00000 0.99608 0.98824 +1.00000 1.00000 0.99608 +1.00000 1.00000 1.00000 diff --git a/vendor/x11iraf/ximtool/luts/smooth.lut b/vendor/x11iraf/ximtool/luts/smooth.lut new file mode 100644 index 00000000..b8f5973a --- /dev/null +++ b/vendor/x11iraf/ximtool/luts/smooth.lut @@ -0,0 +1,256 @@ +0.00000 0.00000 1.00000 +0.01569 0.00000 0.98431 +0.03529 0.00000 0.96471 +0.05098 0.00000 0.94902 +0.06667 0.00000 0.93333 +0.08627 0.00000 0.91373 +0.10196 0.00000 0.89804 +0.11765 0.00000 0.88235 +0.13725 0.00000 0.86275 +0.15294 0.00000 0.84706 +0.16863 0.00000 0.83137 +0.18824 0.00000 0.81176 +0.20392 0.00000 0.79608 +0.21961 0.00000 0.78039 +0.23922 0.00000 0.76078 +0.25490 0.00000 0.74510 +0.27059 0.00000 0.72941 +0.28627 0.00000 0.71373 +0.30588 0.00000 0.69412 +0.32157 0.00000 0.67843 +0.33725 0.00000 0.66275 +0.35686 0.00000 0.64314 +0.37255 0.00000 0.62745 +0.38824 0.00000 0.61176 +0.40784 0.00000 0.59216 +0.42353 0.00000 0.57647 +0.43922 0.00000 0.56078 +0.45882 0.00000 0.54118 +0.47451 0.00000 0.52549 +0.49020 0.00000 0.50980 +0.50980 0.00000 0.49020 +0.52549 0.00000 0.47451 +0.54118 0.00000 0.45882 +0.56078 0.00000 0.43922 +0.57647 0.00000 0.42353 +0.59216 0.00000 0.40784 +0.61176 0.00000 0.38824 +0.62745 0.00000 0.37255 +0.64314 0.00000 0.35686 +0.66275 0.00000 0.33725 +0.67843 0.00000 0.32157 +0.69412 0.00000 0.30588 +0.71373 0.00000 0.28627 +0.72941 0.00000 0.27059 +0.74510 0.00000 0.25490 +0.76078 0.00000 0.23922 +0.78039 0.00000 0.21961 +0.79608 0.00000 0.20392 +0.81176 0.00000 0.18824 +0.83137 0.00000 0.16863 +0.84706 0.00000 0.15294 +0.86275 0.00000 0.13725 +0.88235 0.00000 0.11765 +0.89804 0.00000 0.10196 +0.91373 0.00000 0.08627 +0.93333 0.00000 0.06667 +0.94902 0.00000 0.05098 +0.96471 0.00000 0.03529 +0.98431 0.00000 0.01569 +1.00000 0.00000 0.00000 +1.00000 0.00000 0.00000 +1.00000 0.01176 0.00000 +1.00000 0.01961 0.00000 +1.00000 0.03137 0.00000 +1.00000 0.03922 0.00000 +1.00000 0.05098 0.00000 +1.00000 0.05882 0.00000 +1.00000 0.07059 0.00000 +1.00000 0.08235 0.00000 +1.00000 0.09020 0.00000 +1.00000 0.10196 0.00000 +1.00000 0.10980 0.00000 +1.00000 0.12157 0.00000 +1.00000 0.12941 0.00000 +1.00000 0.14118 0.00000 +0.99608 0.15294 0.00000 +0.99608 0.16078 0.00000 +0.99608 0.17255 0.00000 +0.99608 0.18039 0.00000 +0.99608 0.19216 0.00000 +0.99608 0.20392 0.00000 +0.99608 0.21176 0.00000 +0.99608 0.22353 0.00000 +0.99608 0.23137 0.00000 +0.99608 0.24314 0.00000 +0.99608 0.25098 0.00000 +0.99608 0.26275 0.00000 +0.99608 0.27451 0.00000 +0.99608 0.28235 0.00000 +0.99608 0.29412 0.00000 +0.99608 0.30196 0.00000 +0.99608 0.31373 0.00000 +0.99608 0.32157 0.00000 +0.99608 0.33333 0.00000 +0.99608 0.34510 0.00000 +0.99608 0.35294 0.00000 +0.99608 0.36471 0.00000 +0.99608 0.37255 0.00000 +0.99608 0.38431 0.00000 +0.99608 0.39216 0.00000 +0.99608 0.40392 0.00000 +0.99608 0.41569 0.00000 +0.99608 0.42353 0.00000 +0.99608 0.43529 0.00000 +0.99608 0.44314 0.00000 +0.99216 0.45490 0.00000 +0.99216 0.46667 0.00000 +0.99216 0.47451 0.00000 +0.99216 0.48627 0.00000 +0.99216 0.49412 0.00000 +0.99216 0.50588 0.00000 +0.99216 0.51373 0.00000 +0.99216 0.52549 0.00000 +0.99216 0.53725 0.00000 +0.99216 0.54510 0.00000 +0.99216 0.55686 0.00000 +0.99216 0.56471 0.00000 +0.99216 0.57647 0.00000 +0.99216 0.58431 0.00000 +0.99216 0.59608 0.00000 +0.99216 0.60000 0.00000 +0.99216 0.60784 0.00000 +0.99216 0.61176 0.00000 +0.99216 0.61569 0.00000 +0.99216 0.61961 0.00000 +0.99216 0.62745 0.00000 +0.99216 0.63137 0.00000 +0.99216 0.63529 0.00000 +0.99216 0.64314 0.00000 +0.98824 0.64706 0.00000 +0.98824 0.65098 0.00000 +0.98824 0.65882 0.00000 +0.98824 0.66275 0.00000 +0.98824 0.66667 0.00000 +0.98824 0.67451 0.00000 +0.98824 0.67843 0.00000 +0.98824 0.68235 0.00000 +0.98824 0.68627 0.00000 +0.98824 0.69412 0.00000 +0.98824 0.69804 0.00000 +0.98824 0.70196 0.00000 +0.98824 0.70980 0.00000 +0.98824 0.71373 0.00000 +0.98824 0.71765 0.00000 +0.98824 0.72549 0.00000 +0.98824 0.72941 0.00000 +0.98824 0.73333 0.00000 +0.98824 0.73725 0.00000 +0.98824 0.74510 0.00000 +0.98824 0.74902 0.00000 +0.98431 0.75294 0.00000 +0.98431 0.76078 0.00000 +0.98431 0.76471 0.00000 +0.98431 0.76863 0.00000 +0.98431 0.77255 0.00000 +0.98431 0.78039 0.00000 +0.98431 0.78431 0.00000 +0.98431 0.78824 0.00000 +0.98431 0.79608 0.00000 +0.98431 0.80000 0.00000 +0.98431 0.80392 0.00000 +0.98431 0.81176 0.00000 +0.98431 0.81569 0.00000 +0.98431 0.81961 0.00000 +0.98431 0.82745 0.00000 +0.98431 0.83137 0.00000 +0.98431 0.83529 0.00000 +0.98431 0.83922 0.00000 +0.98431 0.84706 0.00000 +0.98431 0.85098 0.00000 +0.98039 0.85490 0.00000 +0.98039 0.86275 0.00000 +0.98039 0.86667 0.00000 +0.98039 0.87059 0.00000 +0.98039 0.87843 0.00000 +0.98039 0.88235 0.00000 +0.98039 0.88627 0.00000 +0.98039 0.89020 0.00000 +0.98039 0.89804 0.00000 +0.98039 0.90196 0.00000 +0.98039 0.90196 0.00000 +0.96471 0.88627 0.00000 +0.94902 0.87059 0.00000 +0.92941 0.85490 0.00000 +0.91373 0.83922 0.00000 +0.89804 0.82745 0.00000 +0.88235 0.81176 0.00000 +0.86275 0.79608 0.00000 +0.84706 0.78039 0.00000 +0.83137 0.76471 0.00000 +0.81569 0.74902 0.00000 +0.79608 0.73333 0.00000 +0.78039 0.71765 0.00000 +0.76471 0.70196 0.00000 +0.74902 0.68627 0.00000 +0.72941 0.67451 0.00000 +0.71373 0.65882 0.00000 +0.69804 0.64314 0.00000 +0.68235 0.62745 0.00000 +0.66275 0.61176 0.00000 +0.64706 0.59608 0.00000 +0.63137 0.58039 0.00000 +0.61569 0.56471 0.00000 +0.60000 0.54902 0.00000 +0.58039 0.53333 0.00000 +0.56471 0.52157 0.00000 +0.54902 0.50588 0.00000 +0.53333 0.49020 0.00000 +0.51373 0.47451 0.00000 +0.49804 0.45882 0.00000 +0.48235 0.44314 0.00000 +0.46667 0.42745 0.00000 +0.44706 0.41176 0.00000 +0.43137 0.39608 0.00000 +0.41569 0.38039 0.00000 +0.40000 0.36863 0.00000 +0.38039 0.35294 0.00000 +0.36471 0.33725 0.00000 +0.34902 0.32157 0.00000 +0.33333 0.30588 0.00000 +0.31765 0.29020 0.00000 +0.29804 0.27451 0.00000 +0.28235 0.25882 0.00000 +0.26667 0.24314 0.00000 +0.25098 0.22745 0.00000 +0.23137 0.21569 0.00000 +0.21569 0.20000 0.00000 +0.20000 0.18431 0.00000 +0.18431 0.16863 0.00000 +0.16471 0.15294 0.00000 +0.14902 0.13725 0.00000 +0.13333 0.12157 0.00000 +0.11765 0.10588 0.00000 +0.09804 0.09020 0.00000 +0.08235 0.07451 0.00000 +0.06667 0.06275 0.00000 +0.05098 0.04706 0.00000 +0.03137 0.03137 0.00000 +0.01569 0.01569 0.00000 +0.00000 0.00000 0.00000 +0.00000 0.00000 0.00000 +0.00000 0.00000 0.00000 +0.00000 0.00000 0.00000 +0.00000 0.00000 0.00000 +0.00000 0.00000 0.00000 +0.00000 0.00000 0.00000 +0.00000 0.00000 0.00000 +0.00000 0.00000 0.00000 +0.00000 0.00000 0.00000 +0.00000 0.00000 0.00000 +0.00000 0.00000 0.00000 +0.00000 0.00000 0.00000 +0.00000 0.00000 0.00000 +0.00000 0.00000 0.00000 +0.00000 0.00000 0.00000 +0.00000 0.00000 0.00000 diff --git a/vendor/x11iraf/ximtool/luts/staircase.lut b/vendor/x11iraf/ximtool/luts/staircase.lut new file mode 100644 index 00000000..dd67419c --- /dev/null +++ b/vendor/x11iraf/ximtool/luts/staircase.lut @@ -0,0 +1,256 @@ +0.00392 0.00392 0.31373 +0.00784 0.00784 0.31373 +0.01176 0.01176 0.31373 +0.01569 0.01569 0.31373 +0.01961 0.01961 0.31373 +0.02353 0.02353 0.31373 +0.02745 0.02745 0.31373 +0.03137 0.03137 0.31373 +0.03529 0.03529 0.31373 +0.03922 0.03922 0.31373 +0.04314 0.04314 0.31373 +0.04706 0.04706 0.31373 +0.05098 0.05098 0.31373 +0.05490 0.05490 0.31373 +0.05882 0.05882 0.31373 +0.06275 0.06275 0.31373 +0.06667 0.06667 0.47059 +0.07059 0.07059 0.47059 +0.07451 0.07451 0.47059 +0.07843 0.07843 0.47059 +0.08235 0.08235 0.47059 +0.08627 0.08627 0.47059 +0.09020 0.09020 0.47059 +0.09412 0.09412 0.47059 +0.09804 0.09804 0.47059 +0.10196 0.10196 0.47059 +0.10588 0.10588 0.47059 +0.10980 0.10980 0.47059 +0.11373 0.11373 0.47059 +0.11765 0.11765 0.47059 +0.12157 0.12157 0.47059 +0.12549 0.12549 0.47059 +0.12941 0.12941 0.62745 +0.13333 0.13333 0.62745 +0.13725 0.13725 0.62745 +0.14118 0.14118 0.62745 +0.14510 0.14510 0.62745 +0.14902 0.14902 0.62745 +0.15294 0.15294 0.62745 +0.15686 0.15686 0.62745 +0.16078 0.16078 0.62745 +0.16471 0.16471 0.62745 +0.16863 0.16863 0.62745 +0.17255 0.17255 0.62745 +0.17647 0.17647 0.62745 +0.18039 0.18039 0.62745 +0.18431 0.18431 0.62745 +0.18824 0.18824 0.62745 +0.19216 0.19216 0.78431 +0.19608 0.19608 0.78431 +0.20000 0.20000 0.78431 +0.20392 0.20392 0.78431 +0.20784 0.20784 0.78431 +0.21176 0.21176 0.78431 +0.21569 0.21569 0.78431 +0.21961 0.21961 0.78431 +0.22353 0.22353 0.78431 +0.22745 0.22745 0.78431 +0.23137 0.23137 0.78431 +0.23529 0.23529 0.78431 +0.23922 0.23922 0.78431 +0.24314 0.24314 0.78431 +0.24706 0.24706 0.78431 +0.25098 0.25098 0.78431 +0.25490 0.25490 0.94118 +0.25882 0.25882 0.94118 +0.26275 0.26275 0.94118 +0.26667 0.26667 0.94118 +0.27059 0.27059 0.94118 +0.27451 0.27451 0.94118 +0.27843 0.27843 0.94118 +0.28235 0.28235 0.94118 +0.28627 0.28627 0.94118 +0.29020 0.29020 0.94118 +0.29412 0.29412 0.94118 +0.29804 0.29804 0.94118 +0.30196 0.30196 0.94118 +0.30588 0.30588 0.94118 +0.30980 0.30980 0.94118 +0.31373 0.31373 0.94118 +0.31765 0.31765 0.95294 +0.32157 0.32157 0.96471 +0.32549 0.32549 0.97647 +0.32941 0.32941 0.98824 +0.33333 0.33333 1.00000 +0.00392 0.31373 0.00392 +0.00784 0.31373 0.00784 +0.01176 0.31373 0.01176 +0.01569 0.31373 0.01569 +0.01961 0.31373 0.01961 +0.02353 0.31373 0.02353 +0.02745 0.31373 0.02745 +0.03137 0.31373 0.03137 +0.03529 0.31373 0.03529 +0.03922 0.31373 0.03922 +0.04314 0.31373 0.04314 +0.04706 0.31373 0.04706 +0.05098 0.31373 0.05098 +0.05490 0.31373 0.05490 +0.05882 0.31373 0.05882 +0.06275 0.31373 0.06275 +0.06667 0.47059 0.06667 +0.07059 0.47059 0.07059 +0.07451 0.47059 0.07451 +0.07843 0.47059 0.07843 +0.08235 0.47059 0.08235 +0.08627 0.47059 0.08627 +0.09020 0.47059 0.09020 +0.09412 0.47059 0.09412 +0.09804 0.47059 0.09804 +0.10196 0.47059 0.10196 +0.10588 0.47059 0.10588 +0.10980 0.47059 0.10980 +0.11373 0.47059 0.11373 +0.11765 0.47059 0.11765 +0.12157 0.47059 0.12157 +0.12549 0.47059 0.12549 +0.12941 0.62745 0.12941 +0.13333 0.62745 0.13333 +0.13725 0.62745 0.13725 +0.14118 0.62745 0.14118 +0.14510 0.62745 0.14510 +0.14902 0.62745 0.14902 +0.15294 0.62745 0.15294 +0.15686 0.62745 0.15686 +0.16078 0.62745 0.16078 +0.16471 0.62745 0.16471 +0.16863 0.62745 0.16863 +0.17255 0.62745 0.17255 +0.17647 0.62745 0.17647 +0.18039 0.62745 0.18039 +0.18431 0.62745 0.18431 +0.18824 0.62745 0.18824 +0.19216 0.78431 0.19216 +0.19608 0.78431 0.19608 +0.20000 0.78431 0.20000 +0.20392 0.78431 0.20392 +0.20784 0.78431 0.20784 +0.21176 0.78431 0.21176 +0.21569 0.78431 0.21569 +0.21961 0.78431 0.21961 +0.22353 0.78431 0.22353 +0.22745 0.78431 0.22745 +0.23137 0.78431 0.23137 +0.23529 0.78431 0.23529 +0.23922 0.78431 0.23922 +0.24314 0.78431 0.24314 +0.24706 0.78431 0.24706 +0.25098 0.78431 0.25098 +0.25490 0.94118 0.25490 +0.25882 0.94118 0.25882 +0.26275 0.94118 0.26275 +0.26667 0.94118 0.26667 +0.27059 0.94118 0.27059 +0.27451 0.94118 0.27451 +0.27843 0.94118 0.27843 +0.28235 0.94118 0.28235 +0.28627 0.94118 0.28627 +0.29020 0.94118 0.29020 +0.29412 0.94118 0.29412 +0.29804 0.94118 0.29804 +0.30196 0.94118 0.30196 +0.30588 0.94118 0.30588 +0.30980 0.94118 0.30980 +0.31373 0.94118 0.31373 +0.31765 0.95294 0.31765 +0.32157 0.96471 0.32157 +0.32549 0.97647 0.32549 +0.32941 0.98824 0.32941 +0.33333 1.00000 0.33333 +0.31373 0.00392 0.00392 +0.31373 0.00784 0.00784 +0.31373 0.01176 0.01176 +0.31373 0.01569 0.01569 +0.31373 0.01961 0.01961 +0.31373 0.02353 0.02353 +0.31373 0.02745 0.02745 +0.31373 0.03137 0.03137 +0.31373 0.03529 0.03529 +0.31373 0.03922 0.03922 +0.31373 0.04314 0.04314 +0.31373 0.04706 0.04706 +0.31373 0.05098 0.05098 +0.31373 0.05490 0.05490 +0.31373 0.05882 0.05882 +0.31373 0.06275 0.06275 +0.47059 0.06667 0.06667 +0.47059 0.07059 0.07059 +0.47059 0.07451 0.07451 +0.47059 0.07843 0.07843 +0.47059 0.08235 0.08235 +0.47059 0.08627 0.08627 +0.47059 0.09020 0.09020 +0.47059 0.09412 0.09412 +0.47059 0.09804 0.09804 +0.47059 0.10196 0.10196 +0.47059 0.10588 0.10588 +0.47059 0.10980 0.10980 +0.47059 0.11373 0.11373 +0.47059 0.11765 0.11765 +0.47059 0.12157 0.12157 +0.47059 0.12549 0.12549 +0.62745 0.12941 0.12941 +0.62745 0.13333 0.13333 +0.62745 0.13725 0.13725 +0.62745 0.14118 0.14118 +0.62745 0.14510 0.14510 +0.62745 0.14902 0.14902 +0.62745 0.15294 0.15294 +0.62745 0.15686 0.15686 +0.62745 0.16078 0.16078 +0.62745 0.16471 0.16471 +0.62745 0.16863 0.16863 +0.62745 0.17255 0.17255 +0.62745 0.17647 0.17647 +0.62745 0.18039 0.18039 +0.62745 0.18431 0.18431 +0.62745 0.18824 0.18824 +0.78431 0.19216 0.19216 +0.78431 0.19608 0.19608 +0.78431 0.20000 0.20000 +0.78431 0.20392 0.20392 +0.78431 0.20784 0.20784 +0.78431 0.21176 0.21176 +0.78431 0.21569 0.21569 +0.78431 0.21961 0.21961 +0.78431 0.22353 0.22353 +0.78431 0.22745 0.22745 +0.78431 0.23137 0.23137 +0.78431 0.23529 0.23529 +0.78431 0.23922 0.23922 +0.78431 0.24314 0.24314 +0.78431 0.24706 0.24706 +0.78431 0.25098 0.25098 +0.94118 0.25490 0.25490 +0.94118 0.25882 0.25882 +0.94118 0.26275 0.26275 +0.94118 0.26667 0.26667 +0.94118 0.27059 0.27059 +0.94118 0.27451 0.27451 +0.94118 0.27843 0.27843 +0.94118 0.28235 0.28235 +0.94118 0.28627 0.28627 +0.94118 0.29020 0.29020 +0.94118 0.29412 0.29412 +0.94118 0.29804 0.29804 +0.94118 0.30196 0.30196 +0.94118 0.30588 0.30588 +0.94118 0.30980 0.30980 +0.94118 0.31373 0.31373 +0.94902 0.39216 0.39216 +0.96078 0.52941 0.52941 +0.97255 0.66667 0.66667 +0.98431 0.80392 0.80392 +0.99216 0.80000 0.80000 +1.00000 1.00000 1.00000 diff --git a/vendor/x11iraf/ximtool/luts/stairs8.lut b/vendor/x11iraf/ximtool/luts/stairs8.lut new file mode 100644 index 00000000..8fab692a --- /dev/null +++ b/vendor/x11iraf/ximtool/luts/stairs8.lut @@ -0,0 +1,256 @@ +0.76471 0.00000 1.00000 +0.76471 0.00000 1.00000 +0.76471 0.00000 1.00000 +0.76471 0.00000 1.00000 +0.76471 0.00000 1.00000 +0.76471 0.00000 1.00000 +0.76471 0.00000 1.00000 +0.76471 0.00000 1.00000 +0.76471 0.00000 1.00000 +0.76471 0.00000 1.00000 +0.76471 0.00000 1.00000 +0.76471 0.00000 1.00000 +0.76471 0.00000 1.00000 +0.76471 0.00000 1.00000 +0.76471 0.00000 1.00000 +0.76471 0.00000 1.00000 +0.76471 0.00000 1.00000 +0.76471 0.00000 1.00000 +0.76471 0.00000 1.00000 +0.76471 0.00000 1.00000 +0.76471 0.00000 1.00000 +0.76471 0.00000 1.00000 +0.76471 0.00000 1.00000 +0.76471 0.00000 1.00000 +0.76471 0.00000 1.00000 +0.76471 0.00000 1.00000 +0.76471 0.00000 1.00000 +0.76471 0.00000 1.00000 +0.76471 0.00000 1.00000 +0.76471 0.00000 1.00000 +0.76471 0.00000 1.00000 +0.76471 0.00000 1.00000 +1.00000 0.00000 1.00000 +1.00000 0.00000 1.00000 +1.00000 0.00000 1.00000 +1.00000 0.00000 1.00000 +1.00000 0.00000 1.00000 +1.00000 0.00000 1.00000 +1.00000 0.00000 1.00000 +1.00000 0.00000 1.00000 +1.00000 0.00000 1.00000 +1.00000 0.00000 1.00000 +1.00000 0.00000 1.00000 +1.00000 0.00000 1.00000 +1.00000 0.00000 1.00000 +1.00000 0.00000 1.00000 +1.00000 0.00000 1.00000 +1.00000 0.00000 1.00000 +1.00000 0.00000 1.00000 +1.00000 0.00000 1.00000 +1.00000 0.00000 1.00000 +1.00000 0.00000 1.00000 +1.00000 0.00000 1.00000 +1.00000 0.00000 1.00000 +1.00000 0.00000 1.00000 +1.00000 0.00000 1.00000 +1.00000 0.00000 1.00000 +1.00000 0.00000 1.00000 +1.00000 0.00000 1.00000 +1.00000 0.00000 1.00000 +1.00000 0.00000 1.00000 +1.00000 0.00000 1.00000 +1.00000 0.00000 1.00000 +1.00000 0.00000 1.00000 +0.00000 0.00000 1.00000 +0.00000 0.00000 1.00000 +0.00000 0.00000 1.00000 +0.00000 0.00000 1.00000 +0.00000 0.00000 1.00000 +0.00000 0.00000 1.00000 +0.00000 0.00000 1.00000 +0.00000 0.00000 1.00000 +0.00000 0.00000 1.00000 +0.00000 0.00000 1.00000 +0.00000 0.00000 1.00000 +0.00000 0.00000 1.00000 +0.00000 0.00000 1.00000 +0.00000 0.00000 1.00000 +0.00000 0.00000 1.00000 +0.00000 0.00000 1.00000 +0.00000 0.00000 1.00000 +0.00000 0.00000 1.00000 +0.00000 0.00000 1.00000 +0.00000 0.00000 1.00000 +0.00000 0.00000 1.00000 +0.00000 0.00000 1.00000 +0.00000 0.00000 1.00000 +0.00000 0.00000 1.00000 +0.00000 0.00000 1.00000 +0.00000 0.00000 1.00000 +0.00000 0.00000 1.00000 +0.00000 0.00000 1.00000 +0.00000 0.00000 1.00000 +0.00000 0.00000 1.00000 +0.00000 0.00000 1.00000 +0.00000 0.00000 1.00000 +0.00000 1.00000 0.00000 +0.00000 1.00000 0.00000 +0.00000 1.00000 0.00000 +0.00000 1.00000 0.00000 +0.00000 1.00000 0.00000 +0.00000 1.00000 0.00000 +0.00000 1.00000 0.00000 +0.00000 1.00000 0.00000 +0.00000 1.00000 0.00000 +0.00000 1.00000 0.00000 +0.00000 1.00000 0.00000 +0.00000 1.00000 0.00000 +0.00000 1.00000 0.00000 +0.00000 1.00000 0.00000 +0.00000 1.00000 0.00000 +0.00000 1.00000 0.00000 +0.00000 1.00000 0.00000 +0.00000 1.00000 0.00000 +0.00000 1.00000 0.00000 +0.00000 1.00000 0.00000 +0.00000 1.00000 0.00000 +0.00000 1.00000 0.00000 +0.00000 1.00000 0.00000 +0.00000 1.00000 0.00000 +0.00000 1.00000 0.00000 +0.00000 1.00000 0.00000 +0.00000 1.00000 0.00000 +0.00000 1.00000 0.00000 +0.00000 1.00000 0.00000 +0.00000 1.00000 0.00000 +0.00000 1.00000 0.00000 +0.00000 1.00000 0.00000 +1.00000 1.00000 0.00000 +1.00000 1.00000 0.00000 +1.00000 1.00000 0.00000 +1.00000 1.00000 0.00000 +1.00000 1.00000 0.00000 +1.00000 1.00000 0.00000 +1.00000 1.00000 0.00000 +1.00000 1.00000 0.00000 +1.00000 1.00000 0.00000 +1.00000 1.00000 0.00000 +1.00000 1.00000 0.00000 +1.00000 1.00000 0.00000 +1.00000 1.00000 0.00000 +1.00000 1.00000 0.00000 +1.00000 1.00000 0.00000 +1.00000 1.00000 0.00000 +1.00000 1.00000 0.00000 +1.00000 1.00000 0.00000 +1.00000 1.00000 0.00000 +1.00000 1.00000 0.00000 +1.00000 1.00000 0.00000 +1.00000 1.00000 0.00000 +1.00000 1.00000 0.00000 +1.00000 1.00000 0.00000 +1.00000 1.00000 0.00000 +1.00000 1.00000 0.00000 +1.00000 1.00000 0.00000 +1.00000 1.00000 0.00000 +1.00000 1.00000 0.00000 +1.00000 1.00000 0.00000 +1.00000 1.00000 0.00000 +1.00000 1.00000 0.00000 +1.00000 0.49804 0.00000 +1.00000 0.49804 0.00000 +1.00000 0.49804 0.00000 +1.00000 0.49804 0.00000 +1.00000 0.49804 0.00000 +1.00000 0.49804 0.00000 +1.00000 0.49804 0.00000 +1.00000 0.49804 0.00000 +1.00000 0.49804 0.00000 +1.00000 0.49804 0.00000 +1.00000 0.49804 0.00000 +1.00000 0.49804 0.00000 +1.00000 0.49804 0.00000 +1.00000 0.49804 0.00000 +1.00000 0.49804 0.00000 +1.00000 0.49804 0.00000 +1.00000 0.49804 0.00000 +1.00000 0.49804 0.00000 +1.00000 0.49804 0.00000 +1.00000 0.49804 0.00000 +1.00000 0.49804 0.00000 +1.00000 0.49804 0.00000 +1.00000 0.49804 0.00000 +1.00000 0.49804 0.00000 +1.00000 0.49804 0.00000 +1.00000 0.49804 0.00000 +1.00000 0.49804 0.00000 +1.00000 0.49804 0.00000 +1.00000 0.49804 0.00000 +1.00000 0.49804 0.00000 +1.00000 0.49804 0.00000 +1.00000 0.49804 0.00000 +1.00000 0.00000 0.00000 +1.00000 0.00000 0.00000 +1.00000 0.00000 0.00000 +1.00000 0.00000 0.00000 +1.00000 0.00000 0.00000 +1.00000 0.00000 0.00000 +1.00000 0.00000 0.00000 +1.00000 0.00000 0.00000 +1.00000 0.00000 0.00000 +1.00000 0.00000 0.00000 +1.00000 0.00000 0.00000 +1.00000 0.00000 0.00000 +1.00000 0.00000 0.00000 +1.00000 0.00000 0.00000 +1.00000 0.00000 0.00000 +1.00000 0.00000 0.00000 +1.00000 0.00000 0.00000 +1.00000 0.00000 0.00000 +1.00000 0.00000 0.00000 +1.00000 0.00000 0.00000 +1.00000 0.00000 0.00000 +1.00000 0.00000 0.00000 +1.00000 0.00000 0.00000 +1.00000 0.00000 0.00000 +1.00000 0.00000 0.00000 +1.00000 0.00000 0.00000 +1.00000 0.00000 0.00000 +1.00000 0.00000 0.00000 +1.00000 0.00000 0.00000 +1.00000 0.00000 0.00000 +1.00000 0.00000 0.00000 +1.00000 0.00000 0.00000 +1.00000 1.00000 1.00000 +1.00000 1.00000 1.00000 +1.00000 1.00000 1.00000 +1.00000 1.00000 1.00000 +1.00000 1.00000 1.00000 +1.00000 1.00000 1.00000 +1.00000 1.00000 1.00000 +1.00000 1.00000 1.00000 +1.00000 1.00000 1.00000 +1.00000 1.00000 1.00000 +1.00000 1.00000 1.00000 +1.00000 1.00000 1.00000 +1.00000 1.00000 1.00000 +1.00000 1.00000 1.00000 +1.00000 1.00000 1.00000 +1.00000 1.00000 1.00000 +1.00000 1.00000 1.00000 +1.00000 1.00000 1.00000 +1.00000 1.00000 1.00000 +1.00000 1.00000 1.00000 +1.00000 1.00000 1.00000 +1.00000 1.00000 1.00000 +1.00000 1.00000 1.00000 +1.00000 1.00000 1.00000 +1.00000 1.00000 1.00000 +1.00000 1.00000 1.00000 +1.00000 1.00000 1.00000 +1.00000 1.00000 1.00000 +1.00000 1.00000 1.00000 +1.00000 1.00000 1.00000 +1.00000 1.00000 1.00000 +1.00000 1.00000 1.00000 diff --git a/vendor/x11iraf/ximtool/luts/stairs9.lut b/vendor/x11iraf/ximtool/luts/stairs9.lut new file mode 100644 index 00000000..cb1f6385 --- /dev/null +++ b/vendor/x11iraf/ximtool/luts/stairs9.lut @@ -0,0 +1,256 @@ +0.00000 0.00000 0.00000 +0.19608 0.19608 0.19608 +0.19608 0.19608 0.19608 +0.19608 0.19608 0.19608 +0.19608 0.19608 0.19608 +0.19608 0.19608 0.19608 +0.19608 0.19608 0.19608 +0.19608 0.19608 0.19608 +0.19608 0.19608 0.19608 +0.19608 0.19608 0.19608 +0.19608 0.19608 0.19608 +0.19608 0.19608 0.19608 +0.19608 0.19608 0.19608 +0.19608 0.19608 0.19608 +0.19608 0.19608 0.19608 +0.19608 0.19608 0.19608 +0.19608 0.19608 0.19608 +0.19608 0.19608 0.19608 +0.19608 0.19608 0.19608 +0.19608 0.19608 0.19608 +0.19608 0.19608 0.19608 +0.19608 0.19608 0.19608 +0.19608 0.19608 0.19608 +0.19608 0.19608 0.19608 +0.19608 0.19608 0.19608 +0.19608 0.19608 0.19608 +0.19608 0.19608 0.19608 +0.19608 0.19608 0.19608 +0.19608 0.19608 0.19608 +0.19608 0.19608 0.19608 +0.19608 0.19608 0.19608 +0.19608 0.19608 0.19608 +0.60784 0.00000 0.47451 +0.60784 0.00000 0.47451 +0.60784 0.00000 0.47451 +0.60784 0.00000 0.47451 +0.60784 0.00000 0.47451 +0.60784 0.00000 0.47451 +0.60784 0.00000 0.47451 +0.60784 0.00000 0.47451 +0.60784 0.00000 0.47451 +0.60784 0.00000 0.47451 +0.60784 0.00000 0.47451 +0.60784 0.00000 0.47451 +0.60784 0.00000 0.47451 +0.60784 0.00000 0.47451 +0.60784 0.00000 0.47451 +0.60784 0.00000 0.47451 +0.60784 0.00000 0.47451 +0.60784 0.00000 0.47451 +0.60784 0.00000 0.47451 +0.60784 0.00000 0.47451 +0.60784 0.00000 0.47451 +0.60784 0.00000 0.47451 +0.60784 0.00000 0.47451 +0.60784 0.00000 0.47451 +0.60784 0.00000 0.47451 +0.60784 0.00000 0.47451 +0.60784 0.00000 0.47451 +0.60784 0.00000 0.47451 +0.78431 0.00000 0.00000 +0.78431 0.00000 0.00000 +0.78431 0.00000 0.00000 +0.78431 0.00000 0.00000 +0.78431 0.00000 0.00000 +0.78431 0.00000 0.00000 +0.78431 0.00000 0.00000 +0.78431 0.00000 0.00000 +0.78431 0.00000 0.00000 +0.78431 0.00000 0.00000 +0.78431 0.00000 0.00000 +0.78431 0.00000 0.00000 +0.78431 0.00000 0.00000 +0.78431 0.00000 0.00000 +0.78431 0.00000 0.00000 +0.78431 0.00000 0.00000 +0.78431 0.00000 0.00000 +0.78431 0.00000 0.00000 +0.78431 0.00000 0.00000 +0.78431 0.00000 0.00000 +0.78431 0.00000 0.00000 +0.78431 0.00000 0.00000 +0.78431 0.00000 0.00000 +0.78431 0.00000 0.00000 +0.78431 0.00000 0.00000 +0.78431 0.00000 0.00000 +0.78431 0.00000 0.00000 +0.78431 0.00000 0.00000 +0.92549 0.65490 0.37255 +0.92549 0.65490 0.37255 +0.92549 0.65490 0.37255 +0.92549 0.65490 0.37255 +0.92549 0.65490 0.37255 +0.92549 0.65490 0.37255 +0.92549 0.65490 0.37255 +0.92549 0.65490 0.37255 +0.92549 0.65490 0.37255 +0.92549 0.65490 0.37255 +0.92549 0.65490 0.37255 +0.92549 0.65490 0.37255 +0.92549 0.65490 0.37255 +0.92549 0.65490 0.37255 +0.92549 0.65490 0.37255 +0.92549 0.65490 0.37255 +0.92549 0.65490 0.37255 +0.92549 0.65490 0.37255 +0.92549 0.65490 0.37255 +0.92549 0.65490 0.37255 +0.92549 0.65490 0.37255 +0.92549 0.65490 0.37255 +0.92549 0.65490 0.37255 +0.92549 0.65490 0.37255 +0.92549 0.65490 0.37255 +0.92549 0.65490 0.37255 +0.92549 0.65490 0.37255 +0.92549 0.65490 0.37255 +0.00000 0.56863 0.00000 +0.00000 0.56863 0.00000 +0.00000 0.56863 0.00000 +0.00000 0.56863 0.00000 +0.00000 0.56863 0.00000 +0.00000 0.56863 0.00000 +0.00000 0.56863 0.00000 +0.00000 0.56863 0.00000 +0.00000 0.56863 0.00000 +0.00000 0.56863 0.00000 +0.00000 0.56863 0.00000 +0.00000 0.56863 0.00000 +0.00000 0.56863 0.00000 +0.00000 0.56863 0.00000 +0.00000 0.56863 0.00000 +0.00000 0.56863 0.00000 +0.00000 0.56863 0.00000 +0.00000 0.56863 0.00000 +0.00000 0.56863 0.00000 +0.00000 0.56863 0.00000 +0.00000 0.56863 0.00000 +0.00000 0.56863 0.00000 +0.00000 0.56863 0.00000 +0.00000 0.56863 0.00000 +0.00000 0.56863 0.00000 +0.00000 0.56863 0.00000 +0.00000 0.56863 0.00000 +0.00000 0.56863 0.00000 +0.00000 0.96471 0.00000 +0.00000 0.96471 0.00000 +0.00000 0.96471 0.00000 +0.00000 0.96471 0.00000 +0.00000 0.96471 0.00000 +0.00000 0.96471 0.00000 +0.00000 0.96471 0.00000 +0.00000 0.96471 0.00000 +0.00000 0.96471 0.00000 +0.00000 0.96471 0.00000 +0.00000 0.96471 0.00000 +0.00000 0.96471 0.00000 +0.00000 0.96471 0.00000 +0.00000 0.96471 0.00000 +0.00000 0.96471 0.00000 +0.00000 0.96471 0.00000 +0.00000 0.96471 0.00000 +0.00000 0.96471 0.00000 +0.00000 0.96471 0.00000 +0.00000 0.96471 0.00000 +0.00000 0.96471 0.00000 +0.00000 0.96471 0.00000 +0.00000 0.96471 0.00000 +0.00000 0.96471 0.00000 +0.00000 0.96471 0.00000 +0.00000 0.96471 0.00000 +0.00000 0.96471 0.00000 +0.00000 0.96471 0.00000 +0.00000 1.00000 1.00000 +0.00000 1.00000 1.00000 +0.00000 1.00000 1.00000 +0.00000 1.00000 1.00000 +0.00000 1.00000 1.00000 +0.00000 1.00000 1.00000 +0.00000 1.00000 1.00000 +0.00000 1.00000 1.00000 +0.00000 1.00000 1.00000 +0.00000 1.00000 1.00000 +0.00000 1.00000 1.00000 +0.00000 1.00000 1.00000 +0.00000 1.00000 1.00000 +0.00000 1.00000 1.00000 +0.00000 1.00000 1.00000 +0.00000 1.00000 1.00000 +0.00000 1.00000 1.00000 +0.00000 1.00000 1.00000 +0.00000 1.00000 1.00000 +0.00000 1.00000 1.00000 +0.00000 1.00000 1.00000 +0.00000 1.00000 1.00000 +0.00000 1.00000 1.00000 +0.00000 1.00000 1.00000 +0.00000 1.00000 1.00000 +0.00000 1.00000 1.00000 +0.00000 1.00000 1.00000 +0.00000 1.00000 1.00000 +0.00000 0.69412 1.00000 +0.00000 0.69412 1.00000 +0.00000 0.69412 1.00000 +0.00000 0.69412 1.00000 +0.00000 0.69412 1.00000 +0.00000 0.69412 1.00000 +0.00000 0.69412 1.00000 +0.00000 0.69412 1.00000 +0.00000 0.69412 1.00000 +0.00000 0.69412 1.00000 +0.00000 0.69412 1.00000 +0.00000 0.69412 1.00000 +0.00000 0.69412 1.00000 +0.00000 0.69412 1.00000 +0.00000 0.69412 1.00000 +0.00000 0.69412 1.00000 +0.00000 0.69412 1.00000 +0.00000 0.69412 1.00000 +0.00000 0.69412 1.00000 +0.00000 0.69412 1.00000 +0.00000 0.69412 1.00000 +0.00000 0.69412 1.00000 +0.00000 0.69412 1.00000 +0.00000 0.69412 1.00000 +0.00000 0.69412 1.00000 +0.00000 0.69412 1.00000 +0.00000 0.69412 1.00000 +0.00000 0.69412 1.00000 +0.00000 0.00000 1.00000 +0.00000 0.00000 1.00000 +0.00000 0.00000 1.00000 +0.00000 0.00000 1.00000 +0.00000 0.00000 1.00000 +0.00000 0.00000 1.00000 +0.00000 0.00000 1.00000 +0.00000 0.00000 1.00000 +0.00000 0.00000 1.00000 +0.00000 0.00000 1.00000 +0.00000 0.00000 1.00000 +0.00000 0.00000 1.00000 +0.00000 0.00000 1.00000 +0.00000 0.00000 1.00000 +0.00000 0.00000 1.00000 +0.00000 0.00000 1.00000 +0.00000 0.00000 1.00000 +0.00000 0.00000 1.00000 +0.00000 0.00000 1.00000 +0.00000 0.00000 1.00000 +0.00000 0.00000 1.00000 +0.00000 0.00000 1.00000 +0.00000 0.00000 1.00000 +0.00000 0.00000 1.00000 +0.00000 0.00000 1.00000 +0.00000 0.00000 1.00000 +0.00000 0.00000 1.00000 +0.00000 0.00000 1.00000 diff --git a/vendor/x11iraf/ximtool/luts/standard.lut b/vendor/x11iraf/ximtool/luts/standard.lut new file mode 100644 index 00000000..477e4bc8 --- /dev/null +++ b/vendor/x11iraf/ximtool/luts/standard.lut @@ -0,0 +1,256 @@ +0.00392 0.00392 0.33333 +0.00784 0.00784 0.34118 +0.01176 0.01176 0.34902 +0.01569 0.01569 0.35686 +0.01961 0.01961 0.36471 +0.02353 0.02353 0.37255 +0.02745 0.02745 0.38039 +0.03137 0.03137 0.38824 +0.03529 0.03529 0.39608 +0.03922 0.03922 0.40392 +0.04314 0.04314 0.41176 +0.04706 0.04706 0.41961 +0.05098 0.05098 0.42745 +0.05490 0.05490 0.43529 +0.05882 0.05882 0.44314 +0.06275 0.06275 0.45098 +0.06667 0.06667 0.45882 +0.07059 0.07059 0.46667 +0.07451 0.07451 0.47451 +0.07843 0.07843 0.48235 +0.08235 0.08235 0.49020 +0.08627 0.08627 0.49804 +0.09020 0.09020 0.50588 +0.09412 0.09412 0.51373 +0.09804 0.09804 0.52157 +0.10196 0.10196 0.52941 +0.10588 0.10588 0.53725 +0.10980 0.10980 0.54510 +0.11373 0.11373 0.55294 +0.11765 0.11765 0.56078 +0.12157 0.12157 0.56863 +0.12549 0.12549 0.57647 +0.12941 0.12941 0.58431 +0.13333 0.13333 0.59210 +0.13725 0.13725 0.60000 +0.14118 0.14118 0.60784 +0.14510 0.14510 0.61569 +0.14902 0.14902 0.62353 +0.15294 0.15294 0.63137 +0.15686 0.15686 0.63922 +0.16078 0.16078 0.64706 +0.16471 0.16471 0.65490 +0.16863 0.16863 0.66275 +0.17255 0.17255 0.67059 +0.17647 0.17647 0.67843 +0.18039 0.18039 0.68627 +0.18431 0.18431 0.69412 +0.18824 0.18824 0.70196 +0.19216 0.19216 0.70980 +0.19608 0.19608 0.71765 +0.20000 0.20000 0.72549 +0.20392 0.20392 0.73333 +0.20784 0.20784 0.74118 +0.21176 0.21176 0.74902 +0.21569 0.21569 0.75686 +0.21961 0.21961 0.76471 +0.22353 0.22353 0.77255 +0.22745 0.22745 0.78039 +0.23137 0.23137 0.78824 +0.23529 0.23529 0.79608 +0.23922 0.23922 0.80392 +0.24314 0.24314 0.81176 +0.24706 0.24706 0.81961 +0.25098 0.25098 0.82745 +0.25490 0.25490 0.83529 +0.25882 0.25882 0.84314 +0.26275 0.26275 0.85098 +0.26667 0.26667 0.85882 +0.27059 0.27059 0.86667 +0.27451 0.27451 0.87451 +0.27843 0.27843 0.88235 +0.28235 0.28235 0.89020 +0.28627 0.28627 0.89804 +0.29020 0.29020 0.90588 +0.29412 0.29412 0.91373 +0.29804 0.29804 0.92157 +0.30196 0.30196 0.92941 +0.30588 0.30588 0.93725 +0.30980 0.30980 0.94510 +0.31373 0.31373 0.95294 +0.31765 0.31765 0.96078 +0.32157 0.32157 0.96863 +0.32549 0.32549 0.97647 +0.32941 0.32941 0.98431 +0.33333 0.33333 0.99216 +0.00392 0.33333 0.00392 +0.00784 0.34118 0.00784 +0.01176 0.34902 0.01176 +0.01569 0.35686 0.01569 +0.01961 0.36471 0.01961 +0.02353 0.37255 0.02353 +0.02745 0.38039 0.02745 +0.03137 0.38824 0.03137 +0.03529 0.39608 0.03529 +0.03922 0.40392 0.03922 +0.04314 0.41176 0.04314 +0.04706 0.41961 0.04706 +0.05098 0.42745 0.05098 +0.05490 0.43529 0.05490 +0.05882 0.44314 0.05882 +0.06275 0.45098 0.06275 +0.06667 0.45882 0.06667 +0.07059 0.46667 0.07059 +0.07451 0.47451 0.07451 +0.07843 0.48235 0.07843 +0.08235 0.49020 0.08235 +0.08627 0.49804 0.08627 +0.09020 0.50588 0.09020 +0.09412 0.51373 0.09412 +0.09804 0.52157 0.09804 +0.10196 0.52941 0.10196 +0.10588 0.53725 0.10588 +0.10980 0.54510 0.10980 +0.11373 0.55294 0.11373 +0.11765 0.56078 0.11765 +0.12157 0.56863 0.12157 +0.12549 0.57647 0.12549 +0.12941 0.58431 0.12941 +0.13333 0.59210 0.13333 +0.13725 0.60000 0.13725 +0.14118 0.60784 0.14118 +0.14510 0.61569 0.14510 +0.14902 0.62353 0.14902 +0.15294 0.63137 0.15294 +0.15686 0.63922 0.15686 +0.16078 0.64706 0.16078 +0.16471 0.65490 0.16471 +0.16863 0.66275 0.16863 +0.17255 0.67059 0.17255 +0.17647 0.67843 0.17647 +0.18039 0.68627 0.18039 +0.18431 0.69412 0.18431 +0.18824 0.70196 0.18824 +0.19216 0.70980 0.19216 +0.19608 0.71765 0.19608 +0.20000 0.72549 0.20000 +0.20392 0.73333 0.20392 +0.20784 0.74118 0.20784 +0.21176 0.74902 0.21176 +0.21569 0.75686 0.21569 +0.21961 0.76471 0.21961 +0.22353 0.77255 0.22353 +0.22745 0.78039 0.22745 +0.23137 0.78824 0.23137 +0.23529 0.79608 0.23529 +0.23922 0.80392 0.23922 +0.24314 0.81176 0.24314 +0.24706 0.81961 0.24706 +0.25098 0.82745 0.25098 +0.25490 0.83529 0.25490 +0.25882 0.84314 0.25882 +0.26275 0.85098 0.26275 +0.26667 0.85882 0.26667 +0.27059 0.86667 0.27059 +0.27451 0.87451 0.27451 +0.27843 0.88235 0.27843 +0.28235 0.89020 0.28235 +0.28627 0.89804 0.28627 +0.29020 0.90588 0.29020 +0.29412 0.91373 0.29412 +0.29804 0.92157 0.29804 +0.30196 0.92941 0.30196 +0.30588 0.93725 0.30588 +0.30980 0.94510 0.30980 +0.31373 0.95294 0.31373 +0.31765 0.96078 0.31765 +0.32157 0.96863 0.32157 +0.32549 0.97647 0.32549 +0.32941 0.98431 0.32941 +0.33333 0.99216 0.33333 +0.33333 0.00392 0.00392 +0.34118 0.00784 0.00784 +0.34902 0.01176 0.01176 +0.35686 0.01569 0.01569 +0.36471 0.01961 0.01961 +0.37255 0.02353 0.02353 +0.38039 0.02745 0.02745 +0.38824 0.03137 0.03137 +0.39608 0.03529 0.03529 +0.40392 0.03922 0.03922 +0.41176 0.04314 0.04314 +0.41961 0.04706 0.04706 +0.42745 0.05098 0.05098 +0.43529 0.05490 0.05490 +0.44314 0.05882 0.05882 +0.45098 0.06275 0.06275 +0.45882 0.06667 0.06667 +0.46667 0.07059 0.07059 +0.47451 0.07451 0.07451 +0.48235 0.07843 0.07843 +0.49020 0.08235 0.08235 +0.49804 0.08627 0.08627 +0.50588 0.09020 0.09020 +0.51373 0.09412 0.09412 +0.52157 0.09804 0.09804 +0.52941 0.10196 0.10196 +0.53725 0.10588 0.10588 +0.54510 0.10980 0.10980 +0.55294 0.11373 0.11373 +0.56078 0.11765 0.11765 +0.56863 0.12157 0.12157 +0.57647 0.12549 0.12549 +0.58431 0.12941 0.12941 +0.59210 0.13333 0.13333 +0.60000 0.13725 0.13725 +0.60784 0.14118 0.14118 +0.61569 0.14510 0.14510 +0.62353 0.14902 0.14902 +0.63137 0.15294 0.15294 +0.63922 0.15686 0.15686 +0.64706 0.16078 0.16078 +0.65490 0.16471 0.16471 +0.66275 0.16863 0.16863 +0.67059 0.17255 0.17255 +0.67843 0.17647 0.17647 +0.68627 0.18039 0.18039 +0.69412 0.18431 0.18431 +0.70196 0.18824 0.18824 +0.70980 0.19216 0.19216 +0.71765 0.19608 0.19608 +0.72549 0.20000 0.20000 +0.73333 0.20392 0.20392 +0.74118 0.20784 0.20784 +0.74902 0.21176 0.21176 +0.75686 0.21569 0.21569 +0.76471 0.21961 0.21961 +0.77255 0.22353 0.22353 +0.78039 0.22745 0.22745 +0.78824 0.23137 0.23137 +0.79608 0.23529 0.23529 +0.80392 0.23922 0.23922 +0.81176 0.24314 0.24314 +0.81961 0.24706 0.24706 +0.82745 0.25098 0.25098 +0.83529 0.25490 0.25490 +0.84314 0.25882 0.25882 +0.85098 0.26275 0.26275 +0.85882 0.26667 0.26667 +0.86667 0.27059 0.27059 +0.87451 0.27451 0.27451 +0.88235 0.27843 0.27843 +0.89020 0.28235 0.28235 +0.89804 0.28627 0.28627 +0.90588 0.29020 0.29020 +0.91373 0.29412 0.29412 +0.92157 0.29804 0.29804 +0.92941 0.30196 0.30196 +0.93725 0.30588 0.30588 +0.94510 0.30980 0.30980 +0.95294 0.31373 0.31373 +0.96078 0.31765 0.31765 +0.96863 0.32157 0.32157 +0.97647 0.32549 0.32549 +0.98431 0.32941 0.32941 +0.99216 0.33333 0.33333 +1.00000 0.33725 0.33725 diff --git a/vendor/x11iraf/ximtool/print.c b/vendor/x11iraf/ximtool/print.c new file mode 100644 index 00000000..63822aa4 --- /dev/null +++ b/vendor/x11iraf/ximtool/print.c @@ -0,0 +1,387 @@ +#include +#include +#include +#include +#include +#include +#include +#include + +#include "ximtool.h" + + +/* +** PRINT.C -- Printer interface. +** +** xim_print (xim, x0,y0, nx,ny) +** +** ximp_rename (xim, old, new) # print alert action +** ximp_cancel (xim, fname) # print alert action +** +** xim_initPrinterOps (xim) +** xim_initPrinterList (xim) +** xim_getPrinterInfo (xim, printer) +** +** xim_print prints the indicated region of the display frame (raster 0). +** If nx or ny is zero the full display frame is printed. The output device +** or file and all print options are maintained in the printer context within +** the XIM descriptor. The xim_initPrinter routines should be called at +** startup to initialize the print options and load the list of local printers. +*/ + +void xim_initPrinterOps(); +int xim_getPrinterInfo(); + +static void printstat(); +static void xim_initPrinterList(); + + +/* XIM_PRINT -- Print the indicated region of the current display frame to +** the printer device or to a file. +*/ + +xim_print (xim, x0,y0, nx,ny) +register XimDataPtr xim; +int x0,y0, nx,ny; /* region of source raster */ +{ + register PSImagePtr psim = xim->psim; + register PrintCfgPtr pcp = xim->pcp; + register FrameBufPtr fb = xim->df_p; + register ColorMapPtr cm = &colormaps[fb->colormap-1]; + unsigned char r[256], g[256], b[256]; + unsigned char *pixels = NULL; + static char tmpfile[SZ_FNAME]; + static char fname[SZ_FNAME]; + static char text[SZ_LINE]; + int w, h, ncolors; + FILE *fp; + char *mktemp(); + + + bzero (text, SZ_LINE); + bzero (fname, SZ_FNAME); + bzero (tmpfile, SZ_FNAME); + + + /* Get the display pixels and colormap. The routine allocates a + * pointer to the pixels we'll need to free when we're done. + */ + printstat (xim, "Get image data..."); + pixels = xim_readDisplay (xim, x0,y0,nx,ny, &w,&h, r,g,b, &ncolors); + if (!pixels) + return (-1); + + /* Set up some of the EPS options and load the colormap. */ + if (psim->label && (psim->page.flags & EPS_DOTITLE)) + eps_setLabel (psim, fb->ctran.imtitle); + eps_setCmap (psim, r, g, b, ncolors); + eps_setTransform (psim, fb->ctran.z1, fb->ctran.z2, fb->ctran.zt, + fb->offset, fb->scale, cm->name); + + + /* Now call the main routine to output the EPS file. + */ + if (pcp->diskfile) { + + /* Print to a file. If we are not clobbering an existing file + * and we can open the output file write to it directly and be + * done with it. If there is any problem we we to a temporary + * file and issue an alert with actions to be taken if the user + * decides to proceed or cancel the operation. + */ + if (strchr (pcp->printFile, (int)'%')) + sprintf (fname, pcp->printFile, pcp->seqno++); + else + strcpy (fname, pcp->printFile); + + if (access (fname, F_OK) < 0) { + if (fp = fopen (fname, "w")) { + struct stat fs; + + printstat (xim, "Generating postscript output..."); + eps_print (psim, fp, pixels, w, h, 8, 0); + fclose (fp); + + stat (fname, &fs); + sprintf (text, "Wrote %d bytes to '%s'", + (int)fs.st_size, fname); + printstat (xim, text); + + } else { + sprintf (text, "Could not open file %s", fname); + xim_alert (xim, text, NULL, NULL); + } + + } else { + /* Named file already exists. Write a temporary file and + * post an alert to ask the user if they want to overwrite + * the existing file. + */ + char ok_action[SZ_LINE]; + char cancel_action[SZ_LINE]; + char tmpfile[SZ_FNAME]; + char *ip, *op, *last; + + + bzero (tmpfile, SZ_FNAME); + bzero (ok_action, SZ_LINE); + bzero (cancel_action, SZ_LINE); + + /* Write to a temporary file in the same directory as fname. + */ + for (ip=fname, op=tmpfile, last=tmpfile; *op = *ip++; op++) { + if (*op == '/') + last = op + 1; + } + *last = '\0'; + strcat (tmpfile, "ximpXXXXXX"); + if (mktemp(tmpfile) == (char *)NULL) + return (-1); + + if (!(fp = fopen (tmpfile, "w"))) { + sprintf (text, "Cannot open temporary file:\n%s", tmpfile); + xim_alert (xim, text, NULL, NULL); + return (-1); + } + printstat (xim, "Generating postscript output..."); + eps_print (psim, fp, pixels, w, h, 8, 0); + fclose (fp); + + for (ip=fname; *ip!='\0' ; ip++) ; + for ( ; *ip != '/' && ip > fname; ip--) ; + sprintf (text, "%s\n%s\n%s", + "File already exists:", (ip == fname ? fname : ++ip), + "Overwrite this file?"); + + sprintf (ok_action, "print rename %s %s", tmpfile, fname); + sprintf (cancel_action, "print cancel %s", tmpfile); + + xim_alert (xim, text, ok_action, cancel_action); + } + + } else { + /* Print to a printer device. */ + strcpy (tmpfile, "/tmp/ximpXXXXXX"); + if (mktemp(tmpfile) == (char *)NULL) + return (-1); + + if (!(fp = fopen (tmpfile, "w"))) + return (-1); + printstat (xim, "Generating postscript output..."); + eps_print (psim, fp, pixels, w, h, 8, 0); + fclose (fp); + + printstat (xim, "Printing file..."); + sprintf (text, "cat %s | %s", tmpfile, pcp->printCmd); + system (text); /* dispose to printer */ + unlink (tmpfile); /* delete tmp file */ + + printstat (xim, "Done."); + } + + /* Clean up and return. */ + free ((char *) pixels); + return (0); +} + +pbob () { int i = 0; } + + +/* The following implement the ok and cancel actions posted by the alert in +** xim_print above. +*/ + +void +ximp_rename (xim, old, new) +register XimDataPtr xim; +char *old, *new; +{ + char text[SZ_LINE]; + struct stat fs; + + bzero (text, SZ_LINE); + unlink (new); + + if (rename(old,new) != 0 || stat(new,&fs) != 0) { + sprintf (text, "Could not write file %s", new); + printstat (xim, text); + } else { + sprintf (text, "Wrote %d bytes to %s", fs.st_size, new); + printstat (xim, text); + } +} + +void +ximp_cancel (xim, fname) +register XimDataPtr xim; +char *fname; +{ + printstat (xim, "Print cancelled."); + unlink (fname); +} + + +/* XIM_INITPRINTEROPS -- Initialize the printer operations. +*/ +void +xim_initPrinterOps (xim) +register XimDataPtr xim; +{ + register PrintCfgPtr pcp; + char buf[SZ_LINE]; + PSImagePtr eps_init(); + + + /* Open a pointer to the EPS structure. */ + xim->psim = eps_init(); + + /* Read the printer configuration file. */ + xim_initPrinterList (xim); + + /* Initialize options. */ + xim_message (xim, "printOptions", "papersize letter"); + xim_message (xim, "printOptions", "orientation portrait"); + xim_message (xim, "printOptions", "colortype gray"); + xim_message (xim, "printOptions", "autoscale True"); + xim_message (xim, "printOptions", "annotate True"); + xim_message (xim, "printOptions", "dotitle True"); + xim_message (xim, "printOptions", "docolorbar True"); + xim_message (xim, "printOptions", "doborders True"); + + /* Allocate the printer configuration struct. */ + xim->pcp = pcp = (PrintCfgPtr) malloc (sizeof (PrintCfg)); + + pcp->seqno = 0; + pcp->printno = 0; + pcp->diskfile = 0; + strcpy (pcp->printFile, "frame%d.eps"); + + bzero (buf, SZ_LINE); + sprintf (buf, "printerName %s", printer_list[0].printerName); + xim_message (xim, "printOptions", buf); + + strcpy (pcp->printCmd, printer_list[0].printCmd); + sprintf (buf, "printCmd %s", pcp->printCmd); + xim_message (xim, "printOptions", buf); +} + + +/* XIM_INITPRINTERLIST -- Read the printer configuration file and initialize +** the structure with the list of printers and commands. Send the printer +** list to the GUI, maintain the command list internally. +*/ + +static void +xim_initPrinterList (xim) +register XimDataPtr xim; +{ + register int i; + register FILE *fp; + char buf[SZ_LINE], plist[MAX_PRINTERS*20]; + char *ip, *pn, *pc, *pl; + + + bzero (buf, SZ_LINE); + bzero (plist, MAX_PRINTERS*20); + + if (access (xim->printConfig, R_OK) == 0) { + if (!(fp = fopen (xim->printConfig, "r"))) + return; + + /* Scan the printer configuration file. + */ + while (fgets (buf, SZ_LINE, fp) != NULL) { + /* Skip comment lines and blank lines. */ + for (ip=buf; *ip == ' ' || *ip == '\t'; ip++) + ; + if (*ip == '\n' || *ip == '#') + continue; + + /* Now scan up to the tab for the list entry, i.e the printer + * name we'll use in the GUI. + */ + pn = printer_list[nprinters].printerName; + while (*ip != '\t') + *pn++ = *ip++; + *pn++ = '\0'; + ip++; + + while (!isalnum(*ip)) + ip++; + + /* Everything up to a comment char or the newline is the + * command to be used to dispose the EPS. + */ + pc = printer_list[nprinters].printCmd; + while (*ip != '#' && *ip != '\n') + *pc++ = *ip++; + *pc++ = '\0'; + + nprinters++; + bzero (buf, SZ_LINE); + } + fclose (fp); + + /* Erase the remaining entries in the default printer list */ + for (i=nprinters; i < MAX_PRINTERS; i++) { + strcpy (printer_list[i].printerName, " "); + printer_list[i].printCmd[0] = '\0'; + } + } else { + while (printer_list[nprinters].printerName[0] != '\0' && + nprinters < MAX_PRINTERS) + nprinters++; + } + + + /* Now build up a list of the printers, either from the config + * file or the fallback, and send it to the GUI. + */ + for (i=0, pl=plist; i < nprinters; i++) { + *pl++ = '"'; + for (ip = printer_list[i].printerName; *pl = *ip++; pl++) + ; + *pl++ = '"'; + *pl++ = '\n'; + } + *pl++ = '\0'; + + xim_message (xim, "printerList", plist); +} + + +/* XIM_GETPRINTERINFO -- For a given printer name search the printer list +** array and update the GUI with the selected printer name and command. +*/ + +int +xim_getPrinterInfo (xim, printer) +register XimDataPtr xim; +char *printer; +{ + register int i; + register PrintCfgPtr pcp = xim->pcp; + + /* Scan down the printer list until we find the requested device. */ + for (i=0; strcmp(printer_list[i].printerName, printer) != 0; i++) + if (i >= MAX_PRINTERS) + return (pcp->printno); + + return (pcp->printno = i); +} + + +/* PRINTSTAT -- Internal routine for print status messages. +*/ + +static void +printstat (xim, message) +register XimDataPtr xim; +char *message; +{ + char text[SZ_LINE]; + + bzero (text, SZ_LINE); + sprintf (text, "status {%s}", message); + xim_message (xim, "printOptions", text); +} diff --git a/vendor/x11iraf/ximtool/quant.c b/vendor/x11iraf/ximtool/quant.c new file mode 100644 index 00000000..34514a50 --- /dev/null +++ b/vendor/x11iraf/ximtool/quant.c @@ -0,0 +1,797 @@ +#include + +/* QUANT.C -- Quantize the colors in a pixmap down to a specified number. +** This code is largely stolen from PBMPlus by Jef Poskanzer. +** +** ORIGINAL COPYRIGHT NOTICE: +** +** Copyright (C) 1989, 1991 by Jef Poskanzer. +** +** Permission to use, copy, modify, and distribute this software and its +** documentation for any purpose and without fee is hereby granted, provided +** that the above copyright notice appear in all copies and that both that +** copyright notice and this permission notice appear in supporting +** documentation. This software is provided "as is" without express or +** implied warranty. +*/ + +#undef max +#define max(a,b) ((a) > (b) ? (a) : (b)) +#undef min +#define min(a,b) ((a) < (b) ? (a) : (b)) +#undef abs +#define abs(a) ((a) >= 0 ? (a) : -(a)) +#undef odd +#define odd(n) ((n) & 1) + +#ifdef HPUX +#define random() rand() +#define srandom(x) srand(x) +#endif + +typedef unsigned char byte; +typedef unsigned char pixval; + +#define PPM_MAXMAXVAL 255 +typedef struct { pixval r, g, b; } pixel; + +#define PPM_GETR(p) ((p).r) +#define PPM_GETG(p) ((p).g) +#define PPM_GETB(p) ((p).b) + +#define PPM_ASSIGN(p,red,grn,blu) \ + { (p).r = (red); (p).g = (grn); (p).b = (blu); } + +#define PPM_EQUAL(p,q) ( (p).r == (q).r && (p).g == (q).g && (p).b == (q).b ) + +/* Color scaling macro -- to make writing ppmtowhatever easier. */ +#define PPM_DEPTH(newp,p,oldmaxval,newmaxval) \ + PPM_ASSIGN( (newp), \ + (int) PPM_GETR(p) * (newmaxval) / (oldmaxval), \ + (int) PPM_GETG(p) * (newmaxval) / (oldmaxval), \ + (int) PPM_GETB(p) * (newmaxval) / (oldmaxval) ) + +/* Luminance macro, using only integer ops. Returns an int (*256) JHB */ +#define PPM_LUMIN(p) \ + ( 77 * PPM_GETR(p) + 150 * PPM_GETG(p) + 29 * PPM_GETB(p) ) + + +/* Color histogram stuff. */ +typedef struct colorhist_item *colorhist_vector; +struct colorhist_item { + pixel color; + int value; +}; + +typedef struct colorhist_list_item *colorhist_list; +struct colorhist_list_item { + struct colorhist_item ch; + colorhist_list next; +}; + + +/* Color hash table stuff. */ + +typedef colorhist_list *colorhash_table; + +#define MAXCOLORS 32767 +#define FS_SCALE 1024 +#define HASH_SIZE 20023 + +#define LARGE_LUM +#define REP_AVERAGE_PIXELS + +#define hashPixel(p) ((((int) PPM_GETR(p) * 33023 + \ + (int) PPM_GETG(p) * 30013 + \ + (int) PPM_GETB(p) * 27011) & 0x7fffffff) \ + % HASH_SIZE) + + +typedef struct box *box_vector; +struct box { + int ind; + int colors; + int sum; +}; + +static colorhist_vector medianCut (), colorHashToColorHist (); +static colorhist_vector computeColorHist (); +static colorhash_table computeColorHash (), colorHistToColorHash (); +static colorhash_table allocColorHash (); +static int redCompare(), greenCompare(), blueCompare(); +static int lookupColor (), addToColorHash (), sumCompare(); +static void freeColorHash (), addToColorHist(),freeColorHist(); + + + +/* PPMQUANT -- Quantize an image with a given colormap to a new number of + * colors, modifies the image in place. Floyd-Steinberg dithering isn't + * current enabled because of speed but can be turned on later. Modified + * from the original code in the PBMplus package by Jef Poskanzer. + */ + +int +ppmquant (image, r, g, b, nx, ny, ncolors, newcolors) +byte *image; /* image pixels (i.e. cmap indices) */ +byte *r, *g, *b; /* colormap */ +int nx, ny; /* image dimensions */ +int ncolors; /* current number of colors */ +int newcolors; /* requested number of colors */ +{ + register pixel *pP; + register long sr, sg, sb, err; + register int i, col, limitcol, index = 0; + byte *pix = image; + pixel **pixels; + pixval maxval = 255, newmaxval; + int rows, cols, row; + int colors; + int floyd = 0, usehash; + colorhist_vector chv, colormap; + colorhash_table cht; + long *thisrerr, *thisgerr, *thisberr; + long *nextrerr, *nextgerr, *nextberr, *temperr; + int fs_direction; + + /* Reformat into 2-dimensional array of pixel structures */ + rows = ny; + cols = nx; + pixels = (pixel **) malloc (rows * sizeof(pixel *)); + if (!pixels) + return; + + for (row=0; rowr = (pixval) r[*pix]; + pP->g = (pixval) g[*pix]; + pP->b = (pixval) b[*pix]; + pix++; + } + } + + + /* Step 2: attempt to make a histogram of the colors, unclustered. + ** If at first we don't succeed, lower maxval to increase color + ** coherence and try again. This will eventually terminate, with + ** maxval at worst 15, since 32^3 is approximately MAXCOLORS. + */ + for (; ;) { + chv = computeColorHist(pixels, cols, rows, MAXCOLORS, &colors) ; + if (chv != (colorhist_vector) 0) + break; + newmaxval = maxval / 2; + for (row = 0; row < rows; ++row) + for (col = 0, pP = pixels[row]; col < cols; ++col, ++pP) + PPM_DEPTH (*pP, *pP, maxval, newmaxval) ; + maxval = newmaxval; + } + + /* Step 3: apply median-cut to histogram, making the new colormap. + */ + colormap = medianCut (chv, colors, rows * cols, maxval, newcolors) ; + freeColorHist (chv) ; + + /* Step 4: map the colors in the image to their closest match in the + ** new colormap, and write 'em out. + */ + cht = allocColorHash (); + usehash = 1; + pix = image; + if (floyd) { + /* Initialize Floyd-Steinberg error vectors. */ + thisrerr = (long *) calloc (cols + 2, sizeof(long) ); + nextrerr = (long *) calloc (cols + 2, sizeof(long) ); + thisgerr = (long *) calloc (cols + 2, sizeof(long) ); + nextgerr = (long *) calloc (cols + 2, sizeof(long) ); + thisberr = (long *) calloc (cols + 2, sizeof(long) ); + nextberr = (long *) calloc (cols + 2, sizeof(long) ); + srandom ((int) (time (0) ^ getpid ()) ) ; + for (col = 0; col < cols + 2; ++col) { + thisrerr[col] = random () % (FS_SCALE * 2) - FS_SCALE; + thisgerr[col] = random () % (FS_SCALE * 2) - FS_SCALE; + thisberr[col] = random () % (FS_SCALE * 2) - FS_SCALE; + /* (random errors in [-1 .. 1]) */ + } + fs_direction = 1; + } + for (row = 0; row < rows; ++row) { + if (floyd) + for (col = 0; col < cols + 2; ++col) + nextrerr[col] = nextgerr[col] = nextberr[col] = 0; + if ( (!floyd) || fs_direction) { + col = 0; + limitcol = cols; + pP = pixels[row]; + } else { + col = cols - 1; + limitcol = -1; + pP = &(pixels[row][col]); + } + do { + if (floyd) { + /* Use Floyd-Steinberg errors to adjust actual color. */ + sr = PPM_GETR(*pP) + thisrerr[col + 1] / FS_SCALE; + sg = PPM_GETG(*pP) + thisgerr[col + 1] / FS_SCALE; + sb = PPM_GETB(*pP) + thisberr[col + 1] / FS_SCALE; + if (sr < 0) + sr = 0; + else if (sr > maxval) + sr = maxval; + if (sg < 0) + sg = 0; + else if (sg > maxval) + sg = maxval; + if (sb < 0) + sb = 0; + else if (sb > maxval) + sb = maxval; + PPM_ASSIGN (*pP, sr, sg, sb) ; + } + + /* Check hash table to see if we have already matched this + * color. + */ + index = lookupColor (cht, pP) ; + if (index == -1) { /* No; search colormap for closest match. */ + register int i, r1, g1, b1, r2, g2, b2; + register long dist, newdist; + r1 = PPM_GETR (*pP) ; + g1 = PPM_GETG (*pP) ; + b1 = PPM_GETB (*pP) ; + dist = 2000000000; + for (i = 0; i < newcolors; ++i) { + r2 = PPM_GETR (colormap[i].color) ; + g2 = PPM_GETG (colormap[i].color) ; + b2 = PPM_GETB (colormap[i].color) ; + newdist = (r1 - r2) * (r1 - r2) + + (g1 - g2) * (g1 - g2) + + (b1 - b2) * (b1 - b2) ; + if (newdist < dist) { + index = i; + dist = newdist; + } + } + if (usehash) { + if (addToColorHash (cht, pP, index) < 0) { + usehash = 0; + } + } + } + + if (floyd) { + /* Propagate Floyd-Steinberg error terms. */ + if (fs_direction) { + err = (sr - (long) PPM_GETR (colormap[index].color)) * FS_SCALE; + thisrerr[col + 2] += (err * 7) / 16; + nextrerr[col ] += (err * 3) / 16; + nextrerr[col + 1] += (err * 5) / 16; + nextrerr[col + 2] += (err ) / 16; + err = (sg - (long) PPM_GETG (colormap[index].color)) * FS_SCALE; + thisgerr[col + 2] += (err * 7) / 16; + nextgerr[col ] += (err * 3) / 16; + nextgerr[col + 1] += (err * 5) / 16; + nextgerr[col + 2] += (err ) / 16; + err = (sb - (long) PPM_GETB (colormap[index].color)) * FS_SCALE; + thisberr[col + 2] += (err * 7) / 16; + nextberr[col ] += (err * 3) / 16; + nextberr[col + 1] += (err * 5) / 16; + nextberr[col + 2] += (err ) / 16; + } else { + + err = (sr - (long) PPM_GETR (colormap[index].color)) * FS_SCALE; + thisrerr[col ] += (err * 7) / 16; + nextrerr[col + 2] += (err * 3) / 16; + nextrerr[col + 1] += (err * 5) / 16; + nextrerr[col ] += (err ) / 16; + err = (sg - (long) PPM_GETG (colormap[index].color)) * FS_SCALE; + thisgerr[col ] += (err * 7) / 16; + nextgerr[col + 2] += (err * 3) / 16; + nextgerr[col + 1] += (err * 5) / 16; + nextgerr[col ] += (err ) / 16; + err = (sb - (long) PPM_GETB (colormap[index].color)) * FS_SCALE; + thisberr[col ] += (err * 7) / 16; + nextberr[col + 2] += (err * 3) / 16; + nextberr[col + 1] += (err * 5) / 16; + nextberr[col ] += (err ) / 16; + } + } + + *pP = colormap[index].color; + *pix++ = index; /* save the new image index */ + + if ( (!floyd) || fs_direction) { + ++col; + ++pP; + } else { + --col; + --pP; + } + } while (col != limitcol) ; + + if (floyd) { + temperr = thisrerr; + thisrerr = nextrerr; + nextrerr = temperr; + temperr = thisgerr; + thisgerr = nextgerr; + nextgerr = temperr; + temperr = thisberr; + thisberr = nextberr; + nextberr = temperr; + fs_direction = !fs_direction; + } + + } + + /* Rescale and load the new colormap. */ + for (i=0; i= 2) + break; + if (bi == boxes) + break; /* ran out of colors! */ + indx = bv[bi].ind; + clrs = bv[bi].colors; + sm = bv[bi].sum; + + /* + ** Go through the box finding the minimum and maximum of each + ** component - the boundaries of the box. + */ + minr = maxr = PPM_GETR (chv[indx].color) ; + ming = maxg = PPM_GETG (chv[indx].color) ; + minb = maxb = PPM_GETB (chv[indx].color) ; + for (i = 1; i < clrs; ++i) { + v = PPM_GETR (chv[indx + i].color) ; + if (v < minr) + minr = v; + if (v > maxr) + maxr = v; + v = PPM_GETG (chv[indx + i].color) ; + if (v < ming) + ming = v; + if (v > maxg) + maxg = v; + v = PPM_GETB (chv[indx + i].color) ; + if (v < minb) + minb = v; + if (v > maxb) + maxb = v; + } + + /* + ** Find the largest dimension, and sort by that component. I have + ** included two methods for determining the "largest" dimension; + ** first by simply comparing the range in RGB space, and second + ** by transforming into luminosities before the comparison. You + ** can switch which method is used by switching the commenting on + ** the LARGE_ defines at the beginning of this source file. + */ + { + /* LARGE_LUM version */ + + pixel p; + float rl, gl, bl; + + PPM_ASSIGN(p, maxr - minr, 0, 0); + rl = PPM_LUMIN(p); + PPM_ASSIGN(p, 0, maxg - ming, 0); + gl = PPM_LUMIN(p); + PPM_ASSIGN(p, 0, 0, maxb - minb); + bl = PPM_LUMIN(p); + + if (rl >= gl && rl >= bl) + qsort( + (char *)&(chv[indx]),clrs,sizeof(struct colorhist_item), + redCompare) ; + else if (gl >= bl) + qsort( + (char *)&(chv[indx]),clrs,sizeof(struct colorhist_item), + greenCompare) ; + else + qsort( + (char *)&(chv[indx]),clrs,sizeof(struct colorhist_item), + blueCompare) ; + } + + /* + ** Now find the median based on the counts, so that about half the + ** pixels (not colors, pixels) are in each subdivision. + */ + lowersum = chv[indx].value; + halfsum = sm / 2; + for (i = 1; i < clrs - 1; ++i) { + if (lowersum >= halfsum) + break; + lowersum += chv[indx + i].value; + } + + /* + ** Split the box, and sort to bring the biggest boxes to the top. + */ + bv[bi].colors = i; + bv[bi].sum = lowersum; + bv[boxes].ind = indx + i; + bv[boxes].colors = clrs - i; + bv[boxes].sum = sm - lowersum; + ++boxes; + qsort ((char *) bv, boxes, sizeof(struct box) , sumCompare) ; + } + + /* + ** Ok, we've got enough boxes. Now choose a representative color for + ** each box. There are a number of possible ways to make this choice. + ** One would be to choose the center of the box; this ignores any + ** structure within the boxes. Another method would be to average all + ** the colors in the box - this is the method specified in Heckbert's + ** paper. A third method is to average all the pixels in the box. You + ** can switch which method is used by switching the commenting on the + ** REP_ defines at the beginning of this source file. + */ + for (bi = 0; bi < boxes; ++bi) { + /* REP_AVERAGE_PIXELS version */ + + register int indx = bv[bi].ind; + register int clrs = bv[bi].colors; + register long r = 0, g = 0, b = 0, sum = 0; + + for (i = 0; i < clrs; ++i) { + r += PPM_GETR (chv[indx + i].color) * chv[indx + i].value; + g += PPM_GETG (chv[indx + i].color) * chv[indx + i].value; + b += PPM_GETB (chv[indx + i].color) * chv[indx + i].value; + sum += chv[indx + i].value; + } + r = r / sum; + if (r > maxval) + r = maxval; /* avoid math errors */ + g = g / sum; + if (g > maxval) + g = maxval; + b = b / sum; + if (b > maxval) + b = maxval; + PPM_ASSIGN (colormap[bi].color, r, g, b) ; + } + + /* All done. */ + return colormap; +} + + +static int +redCompare (ch1, ch2) +colorhist_vector ch1, ch2; +{ + return (int) PPM_GETR (ch1->color) - (int) PPM_GETR (ch2->color) ; +} + + +static int +greenCompare (ch1, ch2) +colorhist_vector ch1, ch2; +{ + return (int) PPM_GETG (ch1->color) - (int) PPM_GETG (ch2->color) ; +} + + +static int +blueCompare (ch1, ch2) +colorhist_vector ch1, ch2; +{ + return (int) PPM_GETB (ch1->color) - (int) PPM_GETB (ch2->color) ; +} + + +static int +sumCompare (b1, b2) +box_vector b1, b2; +{ + return b2->sum - b1->sum; +} + + +static colorhist_vector +computeColorHist (pixels, cols, rows, maxcolors, colorsP) +pixel**pixels; +int cols, rows, maxcolors; +int*colorsP; +{ + colorhash_table cht; + colorhist_vector chv; + + cht = computeColorHash (pixels, cols, rows, maxcolors, colorsP) ; + if (cht == (colorhash_table) 0) + return (colorhist_vector) 0; + chv = colorHashToColorHist (cht, maxcolors) ; + freeColorHash (cht) ; + return chv; +} + + +static void +addToColorHist (chv, colorsP, maxcolors, colorP, value, position) +colorhist_vector chv; +pixel*colorP; +int*colorsP; +int maxcolors, value, position; +{ + int i, j; + + /* Search colorhist for the color. */ + for (i = 0; i < *colorsP; ++i) + if (PPM_EQUAL (chv[i].color, *colorP) ) { + /* Found it - move to new slot. */ + if (position > i) { + for (j = i; j < position; ++j) + chv[j] = chv[j + 1]; + } else if (position < i) { + for (j = i; j > position; --j) + chv[j] = chv[j - 1]; + } + chv[position].color = *colorP; + chv[position].value = value; + return; + } + if (*colorsP < maxcolors) { + /* Didn't find it, but there's room to add it; so do so. */ + for (i = *colorsP; i > position; --i) + chv[i] = chv[i - 1]; + chv[position].color = *colorP; + chv[position].value = value; + ++(*colorsP); + } +} + + +static colorhash_table +computeColorHash (pixels, cols, rows, maxcolors, colorsP) +pixel**pixels; +int cols, rows, maxcolors; +int*colorsP; +{ + colorhash_table cht; + register pixel*pP; + colorhist_list chl; + int col, row, hash; + + cht = allocColorHash (); + *colorsP = 0; + + /* Go through the entire image, building a hash table of colors. */ + for (row = 0; row < rows; ++row) + for (col = 0, pP = pixels[row]; col < cols; ++col, ++pP) { + hash = hashPixel (*pP) ; + for (chl=cht[hash]; chl != (colorhist_list) 0; chl=chl->next) + if (PPM_EQUAL (chl->ch.color, *pP) ) + break; + if (chl != (colorhist_list) 0) + ++(chl->ch.value); + else + { + if (++(*colorsP) > maxcolors) { + freeColorHash (cht) ; + return (colorhash_table) 0; + } + chl = (colorhist_list) + malloc (sizeof(struct colorhist_list_item)); + if (chl == 0) + perror ("out of memory computing hash table") ; + chl->ch.color = *pP; + chl->ch.value = 1; + chl->next = cht[hash]; + cht[hash] = chl; + } + } + + return cht; +} + + +static colorhash_table +allocColorHash () +{ + colorhash_table cht; + int i; + + cht = (colorhash_table) malloc (HASH_SIZE * sizeof(colorhist_list)) ; + if (cht == 0) + perror ("out of memory allocating hash table") ; + + for (i = 0; i < HASH_SIZE; ++i) + cht[i] = (colorhist_list) 0; + + return cht; +} + + +static int +addToColorHash (cht, colorP, value) +colorhash_table cht; +pixel*colorP; +int value; +{ + register int hash; + register colorhist_list chl; + + chl = (colorhist_list) malloc (sizeof(struct colorhist_list_item) ) ; + if (chl == 0) + return - 1; + hash = hashPixel (*colorP) ; + chl->ch.color = *colorP; + chl->ch.value = value; + chl->next = cht[hash]; + cht[hash] = chl; + return 0; +} + + +static colorhist_vector +colorHashToColorHist (cht, maxcolors) +colorhash_table cht; +int maxcolors; +{ + colorhist_vector chv; + colorhist_list chl; + int i, j; + + /* Now collate the hash table into a simple colorhist array. */ + chv = (colorhist_vector) malloc (maxcolors * sizeof(struct colorhist_item) ) ; + /* (Leave room for expansion by caller.) */ + if (chv == (colorhist_vector) 0) + perror ("out of memory generating histogram") ; + + /* Loop through the hash table. */ + j = 0; + for (i = 0; i < HASH_SIZE; ++i) + for (chl = cht[i]; chl != (colorhist_list) 0; chl = chl->next) { + /* Add the new entry. */ + chv[j] = chl->ch; + ++j; + } + + /* All done. */ + return chv; +} + + +static colorhash_table +colorHistToColorHash (chv, colors) +colorhist_vector chv; +int colors; +{ + colorhash_table cht; + int i, hash; + pixel color; + colorhist_list chl; + + cht = allocColorHash (); + + for (i = 0; i < colors; ++i) { + color = chv[i].color; + hash = hashPixel (color) ; + for (chl = cht[hash]; chl != (colorhist_list) 0; chl = chl->next) +/* + if (PPM_EQUAL (chl->ch.color, color) ) + pm_error( + "same color found twice - %d %d %d", PPM_GETR(color), + PPM_GETG(color), PPM_GETB(color)) ; +*/ + chl = (colorhist_list) malloc (sizeof(struct colorhist_list_item) ) ; + if (chl == (colorhist_list) 0) + perror ("out of memory") ; + chl->ch.color = color; + chl->ch.value = i; + chl->next = cht[hash]; + cht[hash] = chl; + } + + return cht; +} + + +static int +lookupColor (cht, colorP) +colorhash_table cht; +pixel*colorP; +{ + int hash; + colorhist_list chl; + + hash = hashPixel (*colorP) ; + for (chl = cht[hash]; chl != (colorhist_list) 0; chl = chl->next) + if (PPM_EQUAL (chl->ch.color, *colorP) ) + return chl->ch.value; + + return - 1; +} + + +static void +freeColorHist (chv) +colorhist_vector chv; +{ + free ((char *) chv) ; +} + + +static void +freeColorHash (cht) +colorhash_table cht; +{ + int i; + colorhist_list chl, chlnext; + + for (i = 0; i < HASH_SIZE; ++i) + for (chl = cht[i]; chl != (colorhist_list) 0; chl = chlnext) { + chlnext = chl->next; + free ((char *) chl) ; + } + free ((char *) cht) ; +} diff --git a/vendor/x11iraf/ximtool/rasio.c b/vendor/x11iraf/ximtool/rasio.c new file mode 100644 index 00000000..64400250 --- /dev/null +++ b/vendor/x11iraf/ximtool/rasio.c @@ -0,0 +1,660 @@ +#include +#include +#include + +/* + * RASIO.C -- Routines to load and save Sun rasterfiles. + * + * ival = isSunRas (fname) + * loadSunRas (fname, pixels, pixtype, w,h, r,g,b, ncolors, colorstyle) + * writeSunRas (fp, pixels, pixtype, w,h, r,g,b, ncolors, colorstyle) + * getSunRasHdr (fname) + * + * isSunRas returns nonzero if the named file is a Sun rasterfile. + * loadSunRas reads a Sun rasterfile and returns the decoded pixel array and + * 8 bit colormap if any. The caller is responsible for freeing the pixels + * buffer. writeSunRas performs the converse operation, writing the given + * pixel array and colormap to the output Sun rasterfile. + */ + +#define DEBUG 0 + +/* MONO returns total intensity of r,g,b components */ +#define MONO(rd,gn,bl) (((rd)*11 + (gn)*16 + (bl)*5) >> 5) /*.33R+ .5G+ .17B*/ + +/* + * Info on sun rasterfiles taken from rasterfile(5) man page. + * ------------------------------------------------------------ + */ + +#define RAS_MAGIC 0x59a66a95 + +struct rasterfile { + long ras_magic; + long ras_width; + long ras_height; + long ras_depth; + long ras_length; + long ras_type; + long ras_maptype; + long ras_maplength; +}; + +static char errstr[128]; + +#define RT_OLD 0 /* Raw pixrect image in 68000 byte order */ +#define RT_STANDARD 1 /* Raw pixrect image in 68000 byte order */ +#define RT_BYTE_ENCODED 2 /* Run-length compression of bytes */ +#define RT_FORMAT_RGB 3 /* XRGB or RGB instead of XBGR or BGR */ + +#define RMT_RAW 2 +#define RMT_NONE 0 +#define RMT_EQUAL_RGB 1 + +#define RAS_RLE 0x80 + + +#ifdef __STDC__ +static char *sunRasError(char *, char *); +static int rle_read(unsigned char *, int, int, FILE *, int); +static void SunRas1to8(unsigned char *, unsigned char *, int); +static void SunRas8to1(unsigned char *, unsigned char *, int, int); +static int read_sun_long(long *, FILE *); +static int write_sun_long(long, FILE *); +static void fixBGR(unsigned char *, int, int); +#else +static char *sunRasError(); +static int rle_read(); +static void SunRas1to8(); +static void SunRas8to1(); +static int read_sun_long(), write_sun_long(); +static void fixBGR(); +#endif + + +/* + * Public routines. + * ---------------- + */ + + +/* LoadSunRas -- Load the Sun rasterfile. The Sun rasterfile is input in + * the file fname and the decoded pixel array and colormap are output in + * the output variables PIXELS and R/G/B. The caller is responsible for + * freeing PIXELS when it is no longer needed. The RGB arrays should be + * contain space for at least 256 elements. + */ +char * +loadSunRas (fname, pixels, pixtype, o_w,o_h, r,g,b, ncolors, colorstyle) +char *fname; /* input filename */ +unsigned char **pixels; /* output pixels */ +int *pixtype; /* 8-bit or 24-bit */ +int *o_w, *o_h; /* dimensions */ +unsigned char *r, *g, *b; /* colormap */ +int *ncolors; /* number of colors */ +int colorstyle; /* return color (0) or grayscale (1) */ +{ + register FILE *fp; + register int i, j; + int linesize, lsize, csize, isize, w, h, d, nc, ct; + unsigned char *image, *line, p; + struct rasterfile sunhdr; + + /* Read in the Sun Rasterfile picture. */ + fp = fopen (fname, "r"); + if (!fp) + return (sunRasError(fname, "unable to open file")); + + read_sun_long (&sunhdr.ras_magic, fp); + read_sun_long (&sunhdr.ras_width, fp); + read_sun_long (&sunhdr.ras_height, fp); + read_sun_long (&sunhdr.ras_depth, fp); + read_sun_long (&sunhdr.ras_length, fp); + read_sun_long (&sunhdr.ras_type, fp); + read_sun_long (&sunhdr.ras_maptype, fp); + read_sun_long (&sunhdr.ras_maplength, fp); + + if (sunhdr.ras_magic != RAS_MAGIC) { + fclose (fp); + return (sunRasError(fname, "not a Sun rasterfile")); + } + + /* Make sure that the input picture can be dealt with. */ + if (sunhdr.ras_depth != 1 && + sunhdr.ras_depth != 8 && + sunhdr.ras_depth != 24 && + sunhdr.ras_depth != 32) { + + fprintf (stderr, "Sun rasterfile image has depth %d\n", + sunhdr.ras_depth); + fprintf (stderr, "Depths supported are 1, 8, 24, and 32\n"); + fclose (fp); + return (sunRasError(fname, "Unsupported rasterfile depth")); + } + + if (sunhdr.ras_type != RT_OLD && + sunhdr.ras_type != RT_STANDARD && + sunhdr.ras_type != RT_BYTE_ENCODED && + sunhdr.ras_type != RT_FORMAT_RGB) { + + fprintf (stderr, "Sun rasterfile of unsupported type %d\n", + sunhdr.ras_type); + fclose (fp); + return (sunRasError(fname, "Unsupported rasterfile type")); + } + + if (sunhdr.ras_maptype != RMT_RAW && + sunhdr.ras_maptype != RMT_NONE && + sunhdr.ras_maptype != RMT_EQUAL_RGB) { + + fprintf (stderr, "Sun rasterfile colormap of unsupported type %d\n", + sunhdr.ras_maptype); + fclose (fp); + return (sunRasError(fname, "Unsupported rasterfile colormap")); + } + + w = sunhdr.ras_width; + h = sunhdr.ras_height; + d = sunhdr.ras_depth; + isize = sunhdr.ras_length ? sunhdr.ras_length : (w * h * d) / 8; + csize = (sunhdr.ras_maptype == RMT_NONE) ? 0 : sunhdr.ras_maplength; + + /* Compute length of the output image. */ + lsize = w * h; + if (d == 24 || d == 32) + lsize = lsize * 3; + + linesize = w * d; + if (linesize % 16) + linesize += (16 - (linesize % 16)); + linesize /= 8; + + if (DEBUG) { + fprintf (stderr, "LoadSunRas() - loading a %dx%d pic, %d planes\n", + w, h, d); + fprintf (stderr, + "type %d, maptype %d, isize %d, csize %d, lsize %d, linesize %d\n", + sunhdr.ras_type, sunhdr.ras_maptype, + isize, csize, lsize, linesize); + fprintf (stderr, "colorstyle=%d nc=%d\n", colorstyle, + sunhdr.ras_maplength/3); + } + + /* Read in the colormap, if any. */ + if (sunhdr.ras_maptype == RMT_EQUAL_RGB && csize) { + nc = sunhdr.ras_maplength / 3; + ct = 8; + fread (r, 1, nc, fp); + fread (g, 1, nc, fp); + fread (b, 1, nc, fp); + } else if (sunhdr.ras_maptype == RMT_RAW && csize) { + /* We don't know how to handle raw colormap, ignore. */ + fseek (fp, (long) csize, 1); + nc = ct = 0; + } else { + /* No colormap, make one up. */ + if (sunhdr.ras_depth == 1) { + r[0] = g[0] = b[0] = 0; + r[1] = g[1] = b[1] = 255; + nc = 2; + ct = 1; + } else if (sunhdr.ras_depth == 8) { + for (i=0, nc=256; i < nc; i++) + r[i] = g[i] = b[i] = i; + ct = 8; + } + } + + /* Allocate memory for picture and read it in. Note we may slightly + * overallocate here (if image is padded) + */ + image = (unsigned char *) malloc (lsize); + line = (unsigned char *) malloc (linesize); + if (!image || !line) { + fclose (fp); + return (sunRasError (fname, "out of memory")); + } + + for (i=0; i < h; i++) { + if (sunhdr.ras_type == RT_BYTE_ENCODED) { + if (rle_read (line, 1, linesize, fp, (i == 0)) != linesize) + break; + } else { + if (fread (line, 1, linesize, fp) != linesize) { + free ((char *)image); + free ((char *)line); + fclose (fp); + return (sunRasError (fname, "file read error")); + } + } + + switch (d) { + case 1: + SunRas1to8 (image + w * i, line, w); + break; + case 8: + if (colorstyle) { + for (j=0; j < w; j++) { + p = line[j]; + image[w*i + j] = MONO(r[p],g[p],b[p]); + } + } else + bcopy(line, image + w * i, w); + break; + case 24: + bcopy(line, image + w * i * 3, w * 3); + break; + case 32: + { + int k; + unsigned char *ip, *op; + + ip = line; + op = (unsigned char *) (image + w * i * 3); + for (k = 0; k < w; k++) { + *ip++; /* skip 'alpha' */ + *op++ = *ip++; /* red */ + *op++ = *ip++; /* green */ + *op++ = *ip++; /* blue */ + } + } + } + } + free ((char *)line); + + if (d == 24 || d == 32) { + if (sunhdr.ras_type != RT_FORMAT_RGB) + fixBGR(image, w, h); + *pixtype = 24; + } else + *pixtype = 8; + + *pixels = (unsigned char *) image; + *o_w = w; + *o_h = h; + + /* If we requested grayscale reset the colormap. */ + if (colorstyle) + for (i=0, nc=256; i < nc; i++) + r[i] = g[i] = b[i] = i; + *ncolors = nc; + + fclose (fp); + return (NULL); +} + + +/* WriteSunRas -- Write a pixel array and colormap to a file in Sun rasterfile + * format. Writes a sun rasterfile to the already open stream. Writes either + * 24-bit, 8-bit or 1-bit. Currently will not write RLE files. If PIC24 and + * F_GREYSCALE, writes an 8-bit grayscale image. + */ +int +writeSunRas (fp, pixels, pixtype, w,h, r,g,b, ncolors, colorstyle) +FILE *fp; +unsigned char *pixels; +int pixtype, w, h; +unsigned char *r, *g, *b; +int ncolors, colorstyle; +{ + unsigned char *line, *graypic, graymap[256], *sp, *dp; + int linesize, i, color, d, y, flipbw; + struct rasterfile sunhdr; + + /* Biggest problem w/ RLE file: should we compute image size first + * (nicer) or go back and write it in when we are done (kludgy)? + */ + graypic = NULL; + + /* Special case: if PIC24 and writing GREYSCALE, write 8-bit file. + */ + if (pixtype == 24 && colorstyle == 1) { + graypic = (unsigned char *) malloc (w * h); + for (i=0, sp=pixels, dp=graypic; i < w * h; i++, sp += 3, dp++) { + *dp = MONO(sp[0], sp[1], sp[2]); + } + + for (i = 0; i < 256; i++) + graymap[i] = i; + r = g = b = graymap; + ncolors = 256; + pixtype = 8; + pixels = graypic; + } + + if (pixtype == 24) { + d = 24; + linesize = w * 3; + } else if (colorstyle != 0) { + d = 8; + linesize = w; + } else { + d = 1; + linesize = w; + if (linesize % 8) + linesize += (8 - linesize % 8); + linesize /= 8; + } + + if (linesize % 2) + linesize++; + line = (unsigned char *) malloc (linesize); + if (!line) { + if (graypic) + free ((char *) graypic); + return (1); + } + + if (DEBUG) + fprintf (stderr, + "WriteSunRas: d %d, linesize %d ncolors %d\n", + d, linesize, ncolors); + + /* Set flipbw if color#0 is black. */ + if (d == 1) + flipbw = (MONO(r[0], g[0], b[0]) < MONO(r[1], g[1], b[1])); + + /* Set up the header. + */ + sunhdr.ras_magic = RAS_MAGIC; + sunhdr.ras_width = w; + sunhdr.ras_height = h; + sunhdr.ras_depth = d; + sunhdr.ras_length = linesize * h; + sunhdr.ras_type = RT_STANDARD; + sunhdr.ras_maptype = (d == 1 || d == 24) ? RMT_NONE : RMT_EQUAL_RGB; + sunhdr.ras_maplength = (d == 1 || d == 24) ? 0 : 3 * ncolors; + + write_sun_long (sunhdr.ras_magic, fp); + write_sun_long (sunhdr.ras_width, fp); + write_sun_long (sunhdr.ras_height, fp); + write_sun_long (sunhdr.ras_depth, fp); + write_sun_long (sunhdr.ras_length, fp); + write_sun_long (sunhdr.ras_type, fp); + write_sun_long (sunhdr.ras_maptype, fp); + write_sun_long (sunhdr.ras_maplength, fp); + + /* Write the colormap. + */ + if (d == 8) { + if (colorstyle == 1) { + /* grayscale */ + for (color = 0; color < 3; color++) + for (i = 0; i < ncolors; i++) + putc (MONO(r[i], g[i], b[i]), fp); + } else { + fwrite ((char *)r, sizeof(char), ncolors, fp); + fwrite ((char *)g, sizeof(char), ncolors, fp); + fwrite ((char *)b, sizeof(char), ncolors, fp); + } + } + + /* Write the image. + */ + line[linesize-1] = 0; + for (y = 0; y < h; y++) { + if (d == 24) { + unsigned char *lptr, *pix; + + pix = pixels + y * w * 3; + for (i=0, lptr=line; i < w; i++, pix += 3) { + *lptr++ = pix[2]; /* write data out in BGR order */ + *lptr++ = pix[1]; + *lptr++ = pix[0]; + } + } else if (d == 8) { + bcopy (pixels + y * w, line, w); + } else { + /* d == 1 */ + SunRas8to1 (line, pixels + y * w, w, flipbw); + } + + if (fwrite ((char *)line, sizeof(char), linesize, fp) != linesize) { + if (graypic) + free ((char *)graypic); + free ((char *)line); + return (2); + } + } + + free ((char *)line); + if (graypic) + free ((char *)graypic); + return (0); +} + + +/* IsSunRas -- Test a file to see if it is a Sun rasterfile. + */ +isSunRas (fname) +char *fname; /* input filename */ +{ + register FILE *fp; + struct rasterfile sunhdr; + int value = 0; + + if (fp = fopen (fname, "r")) { + read_sun_long (&sunhdr.ras_magic, fp); + value = (sunhdr.ras_magic == RAS_MAGIC); + fclose (fp); + } + + return (value); +} + + +/* getSunRasHdr -- Get some set of header information for the GUI. + */ + +char * +getSunRasHdr (fname) +char *fname; +{ + FILE *fp; + char *line; + struct rasterfile hdr; + + /* Open the image. */ + fp = fopen (fname, "r"); + if (!fp) + return NULL; + + /* Read the image header. */ + read_sun_long (&hdr.ras_magic, fp); + read_sun_long (&hdr.ras_width, fp); + read_sun_long (&hdr.ras_height, fp); + read_sun_long (&hdr.ras_depth, fp); + read_sun_long (&hdr.ras_length, fp); + read_sun_long (&hdr.ras_type, fp); + read_sun_long (&hdr.ras_maptype, fp); + read_sun_long (&hdr.ras_maplength, fp); + + /* Format the description. */ + line = (char *) malloc (80); + sprintf (line, "%-16.16s %3d %5dx%-5d %s %s", + fname, hdr.ras_depth, hdr.ras_width, hdr.ras_height, + "Sun Rasterfile", + ((((hdr.ras_type == RT_OLD) ? "(OLD)" : + (hdr.ras_type == RT_STANDARD) ? "(Standard)" : + (hdr.ras_type == RT_BYTE_ENCODED) ? "(Byte-Encoded)" : + (hdr.ras_type == RT_FORMAT_RGB) ? "(RGB)" : " "))) ); + + fclose (fp); + return (line); +} + + +/* + * Internal routines. + * ------------------- + */ + +static int +rle_read (ptr, size, nitems, fp, init) +register unsigned char *ptr; +int size, nitems, init; +FILE *fp; +{ + static int count, ch; + int readbytes, c, read; + + if (init) + count = ch = 0; + + readbytes = size * nitems; + for (read = 0; read < readbytes; read++) { + if (count) { + *ptr++ = (unsigned char) ch; + count--; + } else { + c = getc (fp); + if (c == EOF) + break; + + if (c == RAS_RLE) { /* 0x80 */ + count = getc(fp); + if (count == EOF) + break; + + if (count < 0) + count &= 0xff; + if (count == 0) + *ptr++ = (unsigned char) c; + else { + if ((ch = getc(fp)) == EOF) + break; + *ptr++ = (unsigned char) ch; + } + } else + *ptr++ = (unsigned char) c; + } + } + + return (read / size); +} + + +static char * +sunRasError (fname, st) +char *fname, *st; +{ + sprintf (errstr, "%s: %s\n", fname, st); + return (errstr); +} + + +static void +SunRas1to8 (dest, src, len) +unsigned char *dest, *src; +int len; +{ + register int i, b; + int c = 0; + + for (i = 0, b = -1; i < len; i++) { + if (b < 0) { + b = 7; + c = ~(*src++); + } + *dest++ = (unsigned char)((c >> (b--)) & 1); + } +} + + +static void +SunRas8to1 (dest, src, len, flip) +unsigned char *dest, *src; +int len, flip; +{ + int i, b; + int c; + + for (c = b = i = 0; i < len; i++) { + c <<= 1; + c |= (*src++ ? 1 : 0); + if (b++ == 7) { + if (flip) + c = ~c; + *dest++ = (unsigned char) (c & 0xff); + b = c = 0; + } + } + if (b) { + if (flip) + c = ~c; + *dest = (unsigned char) ((c << (8 - b)) & 0xff); + } +} + + +/* Reads a 4-byte int in Sun byteorder. + * Returns 0 for success, EOF for failure. + */ +static int +read_sun_long (l, fp) +long *l; +FILE *fp; +{ + int c0, c1, c2, c3; + + c0 = fgetc(fp); + c1 = fgetc(fp); + c2 = fgetc(fp); + c3 = fgetc(fp); + + *l = (((unsigned long) c0 & 0xff) << 24) | + (((unsigned long) c1 & 0xff) << 16) | + (((unsigned long) c2 & 0xff) << 8) | + (((unsigned long) c3 & 0xff)); + + if (ferror(fp)) + return EOF; + + return (0); +} + + +/* Write a long word in sun byte-order. + * Returns 0 for success, EOF for failure. + */ +static int +write_sun_long (l, fp) +long l; +FILE *fp; +{ + char c; + + c = ((l >> 24) & 0xff); + if (putc (c, fp) == EOF) + return (EOF); + c = ((l >> 16) & 0xff); + if (putc (c, fp) == EOF) + return (EOF); + c = ((l >> 8) & 0xff); + if (putc (c, fp) == EOF) + return (EOF); + c = (l & 0xff); + if (putc (c, fp) == EOF) + return (EOF); + return (0); +} + + +/* kr3 - fix up BGR order SUN 24-bit rasters to be RGB order + */ +static void +fixBGR (img, w, h) +unsigned char *img; +int w, h; +{ + int i, npixels; + unsigned char tmp; + + npixels = w * h; + for (i = 0; i < npixels; i++) { + tmp = img[0]; /* swap red and blue channels */ + img[0] = img[2]; + img[2] = tmp; + img += 3; /* bump to next pixel */ + } +} diff --git a/vendor/x11iraf/ximtool/raster.c b/vendor/x11iraf/ximtool/raster.c new file mode 100644 index 00000000..51652241 --- /dev/null +++ b/vendor/x11iraf/ximtool/raster.c @@ -0,0 +1,2995 @@ +#include +#include +#include + +#include +#include +#include +#include +#include "ximtool.h" +#include "iis.h" + +/* Slackware/RedHat4.2 compatibility hack. */ +#if defined(linux) && defined(isalnum) +#undef isalnum +#define isalnum(c) (isalpha(c)||isdigit(c)) +#endif + + +#define DBG_RASTER 0 + + +/* + * RASTER.C -- Raster pixel (frame buffer) routines. These are the routines + * which create and manipulate the frame buffers and the graphics pipeline + * to the screen. + * + * xim_initialize (xim, config, nframes, hardreset) + * xim_reset (xim, w) + * xim_resize (xim, w) + * xim_refresh (xim) + * + * xim_setFrame (xim, frame) + * xim_setReferenceFrame (chan, frame) + * xim_setDisplayFrame (xim, frame) + * xim_initFrame (xim, frame, nframes, config, memModel) + * xim_delFrame (xim, frame) + * xim_matchFrames (xim, frames, reference_frame) + * xim_registerFrames (xim, frames, reference_frame) + * xim_fitFrame (xim) + * xim_tileFrames (xim, frame_list) + * + * xim_cursorMode (xim, state) + * + * xim_setMapping (xim, fb, frame, mapping, src, dst, fill_mode) + * xim_setZoom (xim, fb, frame, mapping, src, dst, + * xcen,ycen, xmag,ymag, xoff,yoff, absolute) + * xim_setFlip (xim, fb, flip_x, flip_y) + * xim_setColormap (name, dirs, red, green, blue, ncolors) + * xim_setRop (xim, fb, rop) + * rop = xim_getAntialias (xim, s) + * + * xim_getScreen (xim, frame, sx, sy, width, height, depth) + * bool = xim_onScreen (xim, frame) + * + * xim_setCursorPos (xim, sx, sy) + * xim_getCursorPos (xim, sx, sy, raster, frame) + * + * pixels = xim_readDisplay (xim, x0,y0,nx,ny, w,h, r,g,b, ncolors) + * stat = xim_writeDisplay (xim, frame, mapname, pixels, w,h, r,g,b, ncolors) + * + * xim_message (xim, object, message) + * xim_msgi (xim, object, intval) + * xim_alert (xim, text, ok_action, cancel_action) + */ + +/* Define some builtin colormaps. */ +static Lut aips0 = { +#include "data/aips0.lut" +}; +static Lut blue = { +#include "data/blue.lut" +}; +static Lut color = { +#include "data/color.lut" +}; +static Lut green = { +#include "data/green.lut" +}; +static Lut halley = { +#include "data/halley.lut" +}; +static Lut heat = { +#include "data/heat.lut" +}; +static Lut rainbow = { +#include "data/rainbow.lut" +}; +static Lut red = { +#include "data/red.lut" +}; +static Lut staircase = { +#include "data/staircase.lut" +}; +static Lut standard = { +#include "data/standard.lut" +}; + +static void get_fbconfig(); +static void set_colorbar(); +static int get_dirfile(); +static void load_testpattern(); +static void set_nframes(); +static void xim_frameRegion(); +static void xim_colortables(); +extern char *getenv(); +double strtod(); + +#define TOL 0.0001 + + +/* XIM_INITIALIZE -- Initialize the imaging subsystem. Read the config file + * and create the frame buffers, mappings, and colormaps. + */ +void +xim_initialize (xim, config, nframes, hardreset) +register XimDataPtr xim; +int config; +int nframes; +int hardreset; +{ + register Widget gt = xim->gt; + register FrameBufPtr fb; + register int i; + + unsigned short m_red[MAX_COLORS]; + unsigned short m_green[MAX_COLORS]; + unsigned short m_blue[MAX_COLORS]; + char *fname, *ip, *op, sbuf[8192]; + String maps[MAX_COLORMAPS], dirs[4]; + int max_cmaps, first, ngray, rgb_len, nfiles, n; + static int nbuiltin_cmaps = 0; + int display_frame = 1; + char cmapname[SZ_NAME]; + char buf[SZ_LINE]; + FbConfigPtr cf; + ColorMapPtr cm; + struct dir *dp; + int startup; + DIR *dir; + + /* The gterm widget handle should already have been set by the + * GUI during startup. + */ + if (!gt) { + fprintf (stderr, "xim_initialize: no gterm-image widget!!\n"); + exit (1); + } + + /* Inform the GUI that the frame buffers are being initialized. + * The initialize parameter is set to "startup" during program + * startup, "restart" at the start of an initialization during + * execution, and "done" when initialization is completed. + */ + startup = (xim->nframes == 0); + xim_message (xim, "initialize", startup ? "startup" : "restart"); + + if (hardreset || startup || config != xim->fb_configno) { + xim_msgi (xim, "frame", 0); + xim_message (xim, "frameTitle", ""); + set_nframes (xim, 0); + cm = &colormaps[DEF_COLORMAP-1]; + strcpy (cmapname, cm->name); + hardreset = 1; + + /* Get frame buffer configurations. */ + get_fbconfig (xim); + + /* Remove any existing border highlight marker. */ + if (xim->gm_border) { + GmDestroy (xim->gm_border); + xim->gm_border = NULL; + } + + /* Initialize the frame buffers. */ + if (DBG_RASTER) + fprintf (stderr, "xim_initialize: Raster init.....\n"); + GtRasterInit (gt); + if (DBG_RASTER) + fprintf (stderr, "xim_initialize: Raster init.....DONE\n"); + for (i=1; i <= MAX_FRAMES; i++) + xim->frames[i].frameno = 0; + + cf = &xim->fb_config[config-1]; + nframes = (nframes <= 0) ? cf->nframes : nframes; + + if (startup) { + /* Set initial tile frames list to be all frames if starting + * up in tile frames mode. + */ + if (xim->tileFrames && nframes > 1) { + xim->tileFramesList = 0; + xim->nTileFrames = 0; + for (i=0; i < nframes; i++) { + xim->tileFramesList |= (1 << i); + xim->nTileFrames++; + } + } + } else { + xim->display_frame = 0; + xim->df_p = NULL; + for (i=0; i < XtNumber(xim->chan); i++) { + IoChanPtr chan = &xim->chan[i]; + if (chan->type) + xim_setReferenceFrame (chan, 1); + } + if (xim->cursor_chan) + xim->cursor_chan = &xim->chan[0]; + } + + xim->rop = xim->antialias ? + xim_getAntialias (xim, xim->antialiasType) : 0x00; + xim->fb_configno = config = max(1, min(MAX_FBCONFIG, config)); + if (DBG_RASTER) + fprintf (stderr, + "xim_initialize: ........................SETNFRAME\n"); + set_nframes (xim, nframes); + if (DBG_RASTER) + fprintf (stderr, + "xim_initialize: ........................SETNFRAME DONE\n"); + + /* Initialize the tile framing options. */ + xim->tileByRows = 1; + xim->tileTopDown = 1; + xim->tileLabels = 0; + + /* Set the new frame size. */ + sprintf (buf, "%d %d %d", cf->width, cf->height, 8); + xim_message (xim, "frameSize", buf); + + /* Create the frames. */ + for (i=1; i <= nframes; i++) { + if (DBG_RASTER) + fprintf (stderr, + "xim_initialize: ...............INITFRAME %d\n",i); + xim_initFrame (xim, i, nframes, cf, xim->memModel); + if (DBG_RASTER) + fprintf (stderr, + "xim_initialize: ...............INITFRAME %d DONE\n",i); + } + + /* Reinitialize the tile framing. */ + if (xim->tileFrames) { + xim->tileFramesList = 0; + xim->nTileFrames = 0; + for (i=0; i < nframes; i++) { + xim->tileFramesList |= (1 << i); + xim->nTileFrames++; + } + } + + xim->width = cf->width; + xim->height = cf->height; + GtSetLogRes (gt, cf->width, cf->height); + + } else { + /* Soft reset. */ + display_frame = xim->display_frame; + fb = &xim->frames[display_frame-1]; + cm = &colormaps[fb->colormap-1]; + strcpy (cmapname, cm->name); + + for (i=0; i < ncolormaps; i++) { + cm = &colormaps[i]; + GtFreeColormap (gt, cm->mapno); + } + } + + if (DBG_RASTER) + fprintf (stderr, + "xim_initialize: ........................CMAP SETUP\n"); + /* Set up the colormap to emulate the IIS/imtool colormap. Set + * xim->ncolors to the length of the grayscale region of the colormap + * returned by iiscolormap so that our other colormaps will have the + * same size. + */ + if (DBG_RASTER) + fprintf (stderr, + "xim_initialize: xim->ncolors = %d\n", xim->ncolors); + xim_iiscolormap (gt, m_red,m_green,m_blue, &first, &ngray, &rgb_len); + if (DBG_RASTER) + fprintf (stderr, + "xim_initialize: writeColormap: first=%d ngray=%d len=%d\n", + first, ngray, rgb_len); + GtWriteColormap (gt, 0, first, rgb_len, m_red, m_green, m_blue); + if ((xim->ncolors = ngray) < 0) { + fprintf (stderr, "ERROR: No colormap cells available.\n"); + exit (1); + } + + + /* Initialize the color tables. + */ + max_cmaps = nbuiltin_cmaps ? nbuiltin_cmaps : MAX_COLORMAPS; + if (DBG_RASTER) + fprintf (stderr, + "xim_initialize: init colortables: xim->ncolors = %d\n", + xim->ncolors); + for (ncolormaps=0; ncolormaps < max_cmaps; ncolormaps++) { + cm = &colormaps[ncolormaps]; + if (!cm->name[0]) + break; + cm->mapno = GtNextColormap (gt); + xim_setColormap (cm->name, NULL, m_red, m_green, m_blue, + xim->ncolors); + GtWriteColormap (gt, cm->mapno, first, xim->ncolors, + m_red, m_green, m_blue); + } + if (DBG_RASTER) + fprintf (stderr, "xim_initialize: init colortables: DONE\n"); + + /* The first time this is called count the number of builtin cmaps. */ + if (nbuiltin_cmaps == 0) + nbuiltin_cmaps = ncolormaps; + + /* Get the names of the two user defined colormaps, if any. */ + nfiles = 0; + maps[nfiles++] = xim->userCMap1; + maps[nfiles++] = xim->userCMap2; + + /* If any user colormap directories are specified get the names + * of the colormap files in these directories. + */ + dirs[0] = "./"; + dirs[1] = xim->userCMapDir1; + dirs[2] = xim->userCMapDir2; + dirs[3] = NULL; + + for (i=1, op=sbuf; dirs[i]; i++) { + if (strcmp (dirs[i], "none") != 0) { + if (dir = opendir (dirs[i])) { + while ((n = get_dirfile (dir, op, SZ_FNAME)) > 0) { + maps[nfiles++] = op; + op += n + 1; + if (nfiles >= MAX_COLORMAPS) + break; + } + closedir (dir); + } + } + } + + /* Add all the user specified colormaps to the colormap table. + */ + for (i=0; i < nfiles && ncolormaps < MAX_COLORMAPS; i++) { + fname = maps[i]; + if (strcmp (fname, "none") != 0) { + if (xim_setColormap (fname, dirs, + m_red, m_green, m_blue, xim->ncolors) == OK) { + + cm = &colormaps[ncolormaps++]; + cm->mapno = GtNextColormap (gt); + + /* Use root portion of filename as the colormap name. */ + for (ip=fname; *ip; ip++) + if (*ip == '/') + fname = ip + 1; + for (ip=fname, op=cm->name; *ip && *ip != '.'; ip++) { + *op++ = *ip; + if (op - cm->name >= SZ_CMAPNAME) + break; + } + *op = '\0'; + + GtWriteColormap (gt, cm->mapno, first, xim->ncolors, + m_red, m_green, m_blue); + } + } + } + + /* Pass the list of colortables on to the user interface. */ + xim_colortables (xim); + + /* Set initial display frame. */ + xim_setDisplayFrame (xim, display_frame); + + /* Force the initial default colormap to be loaded. */ + fb = &xim->frames[display_frame-1]; + for (i=0; i < ncolormaps; i++) { + cm = &colormaps[i]; + if (strcmp (cm->name, cmapname) == 0) + break; + } + if (i >= ncolormaps) + cm = &colormaps[DEF_COLORMAP-1]; + + GtLoadColormap (gt, cm->mapno, fb->offset, fb->scale); + xim_enhancement (xim, fb); + + /* Set options. */ +/* xim_message (xim, "cmfocus", xim->cm_focus ? "True" : "False");*/ + xim_message (xim, "autoscale", xim->autoscale ? "True" : "False"); + xim_message (xim, "antialias", xim->antialias ? "True" : "False"); + xim_message (xim, "tileFrames", xim->tileFrames ? "True" : "False"); + + xim_message (xim, "initialize", "done"); + + if (DBG_RASTER) + fprintf (stderr, + "xim_initialize: ................................RETURNING\n"); +} + + +/* XIM_RESET -- Called when the active gterm widget is set or changed. + */ +void +xim_reset (xim, w) +XimDataPtr xim; +Widget w; +{ + unsigned short iomap[MAX_COLORS]; + int iomap_len; + + if (!w) + return; + + /* The following assumes that the GUI does a setGterm first for the + * colorbar and second for the main image window. The first thing we + * do is set the iomap so that all ximtool color and pixel i/o will + * see the emulated IIS color model. + */ + if (xim->cb == NULL) { + xim->cb = w; + xim_iisiomap (w, iomap, &iomap_len); + GtPostResizeProc (w, set_colorbar, xim); + GtWriteIomap (w, iomap, 0, iomap_len); + } else { + xim->gt = w; + xim_iisiomap (w, iomap, &iomap_len); + GtPostResizeProc (w, xim_resize, xim); + GtWriteIomap (w, iomap, 0, iomap_len); + } +} + + +/* XIM_RESIZE -- Called when the active gterm widget is resized. We need to + * resize the zoom raster and modify the zoom mapping for each frame to + * reflect the new window size. + */ +void +xim_resize (xim, w) +XimDataPtr xim; +Widget w; +{ + register FrameBufPtr fb; + int junk, sx, sy, width, height, depth; + int i, active, frame, mapping, zoomtype; + float xscale, yscale, scale; + char buf[SZ_LINE]; + + + /* This case is true during startup. */ + if (xim->nframes <= 0) + return; + + /* Get new screen size. In tile frame mode select the first frame + * in the list for the size, which may not always be frame 1. + */ + if (xim->tileFrames && !(xim->tileFramesList & 1)) { + if (xim->nframes == 0) + return; + for (i=1; i <= xim->nframes; i++) + if (xim->tileFramesList & (1 << (i-1))) { + xim_getScreen (xim, i, &sx, &sy, &width, &height, &depth); + break; + } + } else + xim_getScreen (xim, 1, &sx, &sy, &width, &height, &depth); + + /* Compute the new scale factor required to scale the source to the + * destination at magnification 1.0. + */ + if (xim->autoscale) { + xscale = (float)width / (float)xim->width; + yscale = (float)height / (float)xim->height; + scale = min (xscale, yscale); + } else { + xscale = 1.0; + yscale = 1.0; + scale = 1.0; + } + + /* Adjust the mapping for each frame. */ + for (frame=1; frame <= xim->nframes; frame++) { + fb = &xim->frames[frame-1]; + mapping = fb->zoommap; + + /* For rapid frame blink, split screen, etc. the zoom raster + * must be the same size as the screen so we must resize this + * raster when the display window is resized. The CreateRaster + * call will delete the old raster and all its mappings and + * create a new one. We must then restore the mappings, and + * if this is an active display frame, refresh the mapping. + */ + active = xim_onScreen (xim, frame); + + if (fb->zoomras) { + GtQueryRaster (w, fb->zoomras, &zoomtype, &junk, &junk, &junk); + GtCreateRaster (w, fb->zoomras, zoomtype, width, height, depth); + xim_setMapping (xim, NULL, frame, fb->dispmap, + fb->zoomras, 0, M_FILL); + if (!active) { + GtDisableMapping (w, fb->dispmap, 0); + xim_setMapping (xim, NULL, frame, fb->zoommap, + fb->raster, fb->zoomras, M_FILL); + GtDisableMapping (w, fb->zoommap, 0); + } + } else { + if (active) { + GtEnableMapping (w, fb->dispmap, 0); + GtSetDisplayRaster (w, xim->display_frame); + } else + GtDisableMapping (w, fb->dispmap, 0); + } + + /* Set the new mapping. */ + fb->xscale = fb->yscale = scale; + xim_setZoom (xim, fb, frame, mapping, fb->raster, fb->zoomras, + fb->xcen, fb->ycen, fb->xmag, fb->ymag, + fb->xoff, fb->yoff, False); + } + + /* Refresh the screen for any active mappings. Any mappings + * defined on any visible frame should be refreshed, since a + * redraw clears the display window. + */ + for (frame=1; frame <= xim->nframes; frame++) { + if (xim_onScreen (xim, frame)) { + int junk, width, height, depth; + fb = &xim->frames[frame-1]; + GtQueryRaster (w, fb->raster, &junk, &width, &height, &depth); + GtRefreshPixels (w, fb->raster, GtPixel, 0, 0, width, height); + } + } + + /* Highlight the current frame. */ + xim_highlightFrame (xim, xim->display_frame); + + sprintf (buf, "%d %d %d %d", sx, sy, width, height); + xim_message (xim, "resize", buf); +} + + +/* XIM_REFRESH -- Refresh the current display frame. + */ +void +xim_refresh (xim) +XimDataPtr xim; +{ + register FrameBufPtr fb = xim->df_p; + int junk, width, height, depth; + + GtQueryRaster (xim->gt, fb->raster, &junk, &width, &height, &depth); + GtRefreshPixels (xim->gt, fb->raster, GtPixel, 0, 0, width, height); +} + + +/* XIM_CLOSE -- Free any raster specific resources. + */ +void +xim_close (xim) +register XimDataPtr xim; +{ +} + + +/* XIM_SETFRAME -- Configure a frame to be both the display and reference + * frame. + */ +void +xim_setFrame (xim, frame) +register XimDataPtr xim; +int frame; +{ + xim_setDisplayFrame (xim, frame); +} + + +/* XIM_SETREFERENCEFRAME -- Set the frame used for frame buffer i/o. + */ +void +xim_setReferenceFrame (chan, frame) +register IoChanPtr chan; +int frame; +{ + register XimDataPtr xim = (XimDataPtr) chan->xim; + register FrameBufPtr fb; + int frameno; + + /* Ignore request if channel not active. */ + if (!chan->type) + return; + + frameno = max(1, min(MAX_FRAMES, frame)); + fb = &xim->frames[frameno-1]; + + /* Ignore request if not a valid frame. */ + if (fb->frameno > 0) { + chan->reference_frame = frameno; + chan->rf_p = fb; + } +} + + +/* XIM_SETDISPLAYFRAME -- Set the frame which is displayed. + */ +void +xim_setDisplayFrame (xim, frame) +register XimDataPtr xim; +int frame; +{ + register FrameBufPtr fb; + register Widget gt = xim->gt; + FrameBufPtr old_fb = xim->df_p; + int frameno, old_frameno; + char buf[256]; + + old_frameno = old_fb ? old_fb->frameno : 0; + frameno = max(1, min(MAX_FRAMES, frame)); + fb = &xim->frames[frameno-1]; + + /* Ignore request if not a valid frame. */ + if (fb->frameno > 0 && (!old_fb || frameno != old_frameno)) { + /* Special case: if tile frame mode is in effect and we are + * displaying a frame not in the tile list, clear the screen + * before displaying the frame. Likewise, if displaying an + * untiled frame while in tile frame mode and then reverting + * to display of a tiled frame, clear the screen and display + * all the tiled frames. + */ + if (xim->tileFrames && old_fb) { + int tile_old = (xim->tileFramesList & (1 << old_frameno-1)); + int tile_new = (xim->tileFramesList & (1 << frameno-1)); + + if (tile_old && !tile_new) + GtClearScreen (gt); + else if (!tile_old && tile_new) { + GtClearScreen (gt); +/* xim_resize (xim, gt);*/ + } + } + + /* Map the new frame. */ + xim->df_p = fb; + xim->display_frame = frameno; + GtEnableMapping (gt, fb->dispmap, 0); + + /* Unmap the old frame. */ + if (old_fb && !xim_onScreen (xim, old_frameno)) { + FrameBufPtr old_fb = &xim->frames[old_frameno-1]; + GtDisableMapping (gt, old_fb->dispmap, 0); + } + + /* Display the new frame. */ + if (GtActiveMapping (gt, fb->zoommap)) { + GtRefreshMapping (gt, fb->dispmap); + } else { + GtEnableMapping (gt, fb->zoommap, 0); + GtRefreshMapping (gt, fb->zoommap); + } + GtSetDisplayRaster (gt, frameno); + + + /* Highlight the new frame if in tileFrames mode. */ + xim_highlightFrame (xim, frameno); + + /* Load the colormap only if it differs from what we already + * have. This avoids the waste of repeatedly reloading the + * colormap when blinking frames that have matched colormaps. + */ + if (!old_fb || fb->colormap != old_fb->colormap || + abs (fb->offset - old_fb->offset) > 0.001 || + abs (fb->scale - old_fb->scale) > 0.001) { + + GtSetColormapFocus (-1); /* force full update */ + GtLoadColormap (gt, fb->colormap, fb->offset, fb->scale); + GtSetColormapFocus (xim->cm_focus); + } + + xim_msgi (xim, "frame", frameno); + xim_message (xim, "frameTitle", fb->ctran.imtitle); + xim_message (xim, "xflip", fb->xflip ? "true" : "false"); + xim_message (xim, "yflip", fb->yflip ? "true" : "false"); + xim_frameRegion (xim, fb); + + sprintf (buf, "%g %g %g %g %g %g %g %g", + fb->xmag, fb->ymag, fb->xcen, fb->ycen, + fb->xscale, fb->yscale, fb->xoff, fb->yoff); + xim_message (xim, "frameView", buf); + } +} + + +/* XIM_INITFRAME -- Initialize a frame buffer. + */ +void +xim_initFrame (xim, frame, nframes, config, memModel) +register XimDataPtr xim; +int frame, nframes; +FbConfigPtr config; +char *memModel; +{ + register FrameBufPtr fb = &xim->frames[frame-1]; + register Widget gt = xim->gt; + int sx, sy, width, height, depth; + char buf[SZ_LINE]; + + if (frame < 1 || frame > MAX_FRAMES) + return; + + xim_delFrame (xim, frame); + memset ((void *)fb, 0, sizeof(FrameBuf)); + + /* Create the frame buffer. */ + fb->frameno = frame; + fb->raster = GtNextRaster (gt); + + if (DBG_RASTER) { + fprintf (stderr, + "xim_initFrame: Creating CLIENT raster for frame=%d raster=%d (%dx%dx%d)\n", + frame, fb->raster, + config->width, config->height, DEF_FRAME_DEPTH); + fprintf (stderr, + "xim_initFrame: Creating memModel=%s frame=%d raster=%d (%d x %d)\n", + memModel, frame, fb->raster, config->width, config->height); + } + + if (GtCreateRaster (gt, fb->raster, GtClient, + config->width, config->height, DEF_FRAME_DEPTH) < 0) { + + fprintf (stderr, "cannot create %dx%d frame buffer #%d\n", + config->width, config->height, frame); + return; + } + + /* Get region of screen to be written into. */ + xim_getScreen (xim, frame, &sx, &sy, &width, &height, &depth); + + if (DBG_RASTER) + fprintf (stderr, + "xim_initFrame: [%d of %d] screen size -- %d x %d x %d\n", + frame, nframes, width, height, depth); + + /* Set up the graphics pipeline to the screen. The "memory model" + * determines memory is used, trading off memory usage against speed + * for operations like zoom/pan and blink. + */ + + if (strcmp (memModel, "fast") == 0) { + /* Use both client and server memory to achieve the best + * possible performance. The frame buffer raster (type ximage) + * is mapped to a server pixmap with the zoom/pan mapping, and + * the server pixmap is mapped to the screen with the one-to-one + * frame display mapping. + */ +fast: fb->zoomras = GtNextRaster (gt); + if (GtCreateRaster (gt, + fb->zoomras, GtServer, width, height, depth) < 0) + goto nice; + + xim_setMapping (xim, fb, frame, fb->zoommap = GtNextMapping(gt), + fb->raster, fb->zoomras, xim->autoscale ? M_ASPECT : M_UNITARY); + xim_setMapping (xim, fb, frame, fb->dispmap = GtNextMapping(gt), + fb->zoomras, 0, M_FILL); + + } else if (strcmp (memModel, "beNiceToServer") == 0) { + /* Minimize use of X server memory, but keep zoom raster to speed + * up blinks. Everything is the same as with the "fast" memory + * model except that the zoom raster is an ximage rather than + * server pixmap raster. + */ +nice: fb->zoomras = GtNextRaster (gt); + if (DBG_RASTER) + fprintf (stderr, + "xim_initFrame: creating 'nice' model (0x%x)\n", + fb->zoomras); + if (GtCreateRaster (gt, + fb->zoomras, GtClient, width, height, depth) < 0) + goto small; + + xim_setMapping (xim, fb, frame, fb->zoommap = GtNextMapping(gt), + fb->raster, fb->zoomras, xim->autoscale ? M_ASPECT : M_UNITARY); + xim_setMapping (xim, fb, frame, fb->dispmap = GtNextMapping(gt), + fb->zoomras, 0, M_FILL); + + } else if (strcmp (memModel, "small") == 0) { + /* Minimize both client and server memory as far as possible. + * Only the frame buffer raster is used, the zoom/pan mapping + * maps directly to the screen and is also used as the screen + * mapping. + * + * FIXME: On TrueColor visuals we can have an issue here where + * the display pixmap is 24-bits and various things (e.g. pixel + * readback) are expecting 8-bits. + */ +small: fb->zoomras = 0; + if (DBG_RASTER) + fprintf (stderr, + "xim_initFrame: creating 'small' model (0x%x)\n", + fb->zoomras); + + xim_setMapping (xim, fb, frame, fb->zoommap = GtNextMapping(gt), + fb->raster, fb->zoomras, xim->autoscale ? M_ASPECT : M_UNITARY); + fb->dispmap = fb->zoommap; + + } else { + fprintf (stderr, + "unrecognized memModel `%s', default to `fast'\n", memModel); + goto fast; + } + + /* Set up the default colormap. */ + fb->colormap = DEF_COLORMAP; + fb->offset = 0.5; + fb->scale = (xim->invert ? -1.0 : 1.0); + xim_enhancement (xim, fb); + + /* Disable frame display initially if not mapped to screen. */ + if (xim_onScreen (xim, frame)) { + GtEnableMapping (gt, fb->dispmap, 0); + GtSetDisplayRaster (gt, frame); + } else + GtDisableMapping (gt, fb->dispmap, 0); + + set_nframes (xim, max (xim->nframes, frame)); +} + + +/* XIM_DELFRAME -- Delete a frame. + */ +void +xim_delFrame (xim, frame) +register XimDataPtr xim; +int frame; +{ + register FrameBufPtr fb = &xim->frames[frame-1]; + register Widget gt = xim->gt; + + if (frame < 1 || frame > MAX_FRAMES) + return; + if (fb->frameno <= 0) + return; + + GtFreeMapping (gt, fb->dispmap); + if (fb->zoommap != fb->dispmap) + GtFreeMapping (gt, fb->zoommap); + if (fb->zoomras) + GtDestroyRaster (gt, fb->zoomras); + if (fb->raster) + GtDestroyRaster (gt, fb->raster); + + fb->frameno = 0; + if (xim->nframes == frame) + set_nframes (xim, frame - 1); +} + + +/* XIM_ERASEFRAME -- Erase a frame. + */ +void +xim_eraseFrame (xim, frame) +register XimDataPtr xim; +int frame; +{ + FrameBufPtr fb = &xim->frames[frame-1]; + Widget gt = xim->gt; + int Z = 0; + + GtSetPixels (gt, fb->raster, GtPixel, Z,Z,Z,Z, CMS_BACKGROUND, 0); +} + + +/* XIM_FITFRAME -- Attempt to resize the display window to be the same + * size as the frame buffer. + */ +void +xim_fitFrame (xim) +register XimDataPtr xim; +{ + register Widget gt = xim->gt; + + GtCreateRaster (gt, 0, GtServer, xim->width, xim->height, 8); +} + + +/* XIM_TILEFRAMES -- Set or clear tile frame mode. + */ +void +xim_tileFrames (xim, frame_list) +register XimDataPtr xim; +int frame_list; +{ + register int i; + register Widget w = xim->gt; + register FrameBufPtr fb; + char buf[SZ_LINE]; + int mapping; + + + /* Get list of frames to be tiled. */ + xim->tileFramesList = frame_list; + for (i=0, xim->nTileFrames = 0; i < xim->nframes; i++) + if (frame_list & (1 << i)) + xim->nTileFrames++; + + /* Remove any existing border highlight marker. */ + if (xim->gm_border) { + GmDestroy (xim->gm_border); + xim->gm_border = NULL; + } + + xim->tileFrames = (frame_list != 0); + GtClearScreen (w); + initialize_shadow_pixmap (w, 0); + xim_resize (xim, w); + + /* Entering tile frame mode. + */ + if (xim->tileFrames) { + + /* Ensure that the display frame is set to one of the + * tiled frames. + */ + if (!(xim->tileFramesList & (1 << xim->display_frame-1))) { + for (i=1; i <= xim->nframes; i++) + if (xim->tileFramesList & (1 << (i-1))) { + xim->df_p = NULL; + xim->display_frame = 0; + xim_setFrame (xim, i); + break; + } + } + + + /* Change the stacking order of the frame mappings if + * necessary so that any frames not in the tile list are + * displayed above the tiled frames. If this is not + * done the untiled frames may be obscured by the tiled + * frames. + */ + for (i=0, mapping=0; i < xim->nframes; i++) + if (xim->tileFramesList & (1 << i)) { + fb = &xim->frames[i]; + if (!mapping) + mapping = fb->dispmap; + else if (GtCompareMappings (w, mapping, fb->dispmap) < 0) + mapping = fb->dispmap; + } + for (i=0; i < xim->nframes; i++) + if (!(xim->tileFramesList & (1 << i))) { + fb = &xim->frames[i]; + GtRaiseMapping (w, fb->dispmap, mapping); + } + } + + /* Highlight the current frame. */ + xim_highlightFrame (xim, xim->display_frame); + + sprintf (buf, "%s", xim->tileFrames ? "True" : "False"); + xim_message (xim, "tileFrames", buf); +} + + +/* XIM_HIGHLIGHTFRAME -- If in tile frames mode, highlight the current frame + * by coloring the border of the frame. + */ +xim_highlightFrame (xim, frame) +register XimDataPtr xim; +int frame; +{ + /* If we are tiling frames highlight the new display frame. */ + if (xim->gm_border) { + GmDestroy (xim->gm_border); + xim->gm_border = NULL; + } + + if (xim->tileFrames && xim->highlightFrames) { + int sx, sy, width, height, depth; + int interactive, erase; + XtPointer gm; + Arg args[20]; + int nargs = 0; + + xim_getScreen (xim, frame, &sx, &sy, &width, &height, &depth); + if (sx > 0 && sy > 0) { + gm = (XtPointer) GmCreate (xim->gt, Gm_Box, + interactive=False); + + XtSetArg (args[nargs], GmX, sx + (width-1)/2); nargs++; + XtSetArg (args[nargs], GmY, sy + (height-1)/2); nargs++; + XtSetArg (args[nargs], GmWidth, (width-1)/2+1); nargs++; + XtSetArg (args[nargs], GmHeight, (height-1)/2+1); nargs++; + XtSetArg (args[nargs], GmLineWidth, xim->tileBorder); nargs++; + XtSetArg (args[nargs], GmSensitive, False); nargs++; + XtSetArg (args[nargs], GmVisible, True); nargs++; + XtSetArg (args[nargs], GmActivated, True); nargs++; + + GmLower (gm, NULL); + GmSetAttribute (gm, GmLineColor, xim->borderColor, XtRString); + GmSetAttributes (gm, args, nargs, XtRInt); + + xim->gm_border = gm; + } + xim_labelTiles (xim); + } +} + + +/* XIM_LABELTILES -- Label the tile with the frame number. + */ +xim_labelTiles (xim) +register XimDataPtr xim; +{ + FrameBufPtr fb; + MappingPtr mp; + Widget gt = xim->gt; + XtPointer gm; + Arg args[10]; + char text[256], tw[16]; + register int i, j, len; + int sx, sy, width, height, depth, nargs=0; + + static XtPointer labels[MAX_FRAMES]; + static int label_init = 1; + + if (!(xim->tileFrames && xim->tileLabels > 0)) + return; + + /* Initialize the label markers. */ + if (label_init) { + /* First time through make sure we're all NULL. */ + for (i=0; i < MAX_FRAMES; i++) + labels[i] = (XtPointer) NULL; + label_init = 0; + } else { + /* Free up the existing labels. */ + for (i=0; labels[i] && i < MAX_FRAMES; i++) { + GmDestroy (labels[i]); + labels[i] = (XtPointer) NULL; + } + } + + + for (i=0; i < xim->nframes; i++) { + if (xim->tileFramesList & (1 << i)) { + xim_getScreen (xim, i+1, &sx, &sy, &width, &height, &depth); + fb = &xim->frames[i]; + switch (xim->tileLabels) { + case 1: /* frame number */ + sprintf (text, " %d ", i+1); + break; + case 2: /* image name */ + if (fb->nmaps == 0) { + strcpy (text, " Blank "); + } else { + mp = &fb->mapping[0]; + len = strlen (mp->ref); + for (j=len-1; mp->ref[j] != '/' && j > 0; j--) ; + sprintf (text, " %s ", &mp->ref[++j]); + } + break; + case 3: /* image title */ + if (fb->nmaps == 0) { + strcpy (text, " Blank "); + } else { + len = strlen (fb->ctran.imtitle); + for (j=0; fb->ctran.imtitle[j] != ' ' && j < len; j++) ; + j += 3; + sprintf (text, " %s ", &fb->ctran.imtitle[j]); + } + break; + } + + + /* Now draw the label as a text marker on the tile. We use + * markers since they can be placed as needed in the frame + * and provide a background which lets them be read despite + * whatever image scaling is in place. + */ + gm = (XtPointer) GmCreate (xim->gt, Gm_Text, False); + + nargs = 0; /* initialize */ + len = strlen (text); + sprintf (tw, "%dch", len); + + XtSetArg (args[nargs], GmX, sx + 10); nargs++; + XtSetArg (args[nargs], GmY, sy + height - 20); nargs++; + XtSetArg (args[nargs], GmLineWidth, 0); nargs++; + XtSetArg (args[nargs], GmSensitive, True); nargs++; + XtSetArg (args[nargs], GmVisible, True); nargs++; + XtSetArg (args[nargs], GmActivated, True); nargs++; + XtSetArg (args[nargs], GmImageText, True); nargs++; + + GmSetAttribute (gm, GmWidth, tw, XtRString); + GmSetAttribute (gm, GmHeight, "1ch", XtRString); + GmSetAttribute (gm, GmTextBgColor, "black", XtRString); + GmSetAttribute (gm, GmTextColor, "yellow", XtRString); + GmSetAttribute (gm, GmText, text, XtRString); + GmSetAttributes (gm, args, nargs, XtRInt); + GmMarkpos (gm); + GmRedraw (gm, GXcopy, True); + + labels[i] = gm; /* save the marker ptr */ + } + } +} + + +/* XIM_MATCHFRAMES -- Make the color enhancement of the listed frames match + * that of the indicated frame. + */ +void +xim_matchFrames (xim, frames, reference_frame) +XimDataPtr xim; +int *frames; +int reference_frame; +{ + register FrameBufPtr fr, fb = &xim->frames[reference_frame-1]; + register int *ip, i; + Widget gt = xim->gt; + char buf[256]; + int bits; + + /* If frames is NULL match all frames. Set one bit in BITS for + * each frame to be modified. This ensures that each frame is + * only modified once, even if the same frame is listed more than + * once. + */ + if (frames) { + for (ip=frames, bits=0; *ip; ip++) + bits |= (1 << (*ip - 1)); + } else { + for (i=1, bits=0; i <= xim->nframes; i++) + bits |= (1 << (i - 1)); + } + + for (i=0; i < xim->nframes; i++) { + fr = &xim->frames[i]; + if (fr != fb && (bits & (1 << (fr->frameno - 1)))) { + fr->colormap = fb->colormap; + fr->offset = fb->offset; + fr->scale = fb->scale; + xim_enhancement (xim, fr); + } + } +} + + +/* XIM_REGISTERFRAMES -- Register the listed frames with the given reference + * frame, i.e. set the field center and scale of each frame to match the + * reference frame. + */ +void +xim_registerFrames (xim, frames, reference_frame, offsets) +XimDataPtr xim; +int *frames; +int reference_frame; +int offsets; +{ + register int *ip, i; + register FrameBufPtr fr, fb = &xim->frames[reference_frame-1]; + int src, st, sx, sy, snx, sny; + int dst, dt, dx, dy, dnx, dny; + Widget gt = xim->gt; + int bits, rop; + + /* If frames is NULL register all frames. Set one bit in BITS for + * each frame to be modified. This ensures that each frame is + * only modified once, even if the same frame is listed more than + * once. + */ + if (frames) { + for (ip=frames, bits=0; *ip; ip++) + bits |= (1 << (*ip - 1)); + } else { + for (i=1, bits=0; i <= xim->nframes; i++) + bits |= (1 << (i - 1)); + } + + GtGetMapping (gt, fb->zoommap, + &rop, &src,&st,&sx,&sy,&snx,&sny, &dst,&dt,&dx,&dy,&dnx,&dny); + + for (i=0; i < xim->nframes; i++) { + fr = &xim->frames[i]; + +/* if (fr != fb && (bits & (1 << (fr->frameno - 1)))) {*/ + if ((bits & (1 << (fr->frameno - 1)))) { + fr->xcen = fb->xcen; fr->ycen = fb->ycen; + fr->xmag = fb->xmag; fr->ymag = fb->ymag; + fr->xflip = fb->xflip; fr->yflip = fb->yflip; + + if (!xim_onScreen (xim, fb->frameno)) + GtDisableMapping (gt, fr->zoommap, 0); + + if (offsets) { + /* fb is the current display buffer, fr is some other + * frame in the list. To do the offsets we must + * first subtract the offset of the current display + * and then add the offset peculiar to the frame. + */ + + int nsx, nsy; + + nsx = (int)(sx - fb->xoff + fr->xoff); + nsy = (int)(sy - fb->yoff + fr->yoff); + + GtSetMapping (gt, fr->zoommap, xim->rop, + fr->raster, st,nsx,nsy, snx,sny, + fr->zoomras,dt,dx,dy,dnx,dny); + GtRefreshMapping (gt, fr->zoommap); + + } else { + GtSetMapping (gt, fr->zoommap, xim->rop, + fr->raster, st,sx,sy, snx,sny, + fr->zoomras,dt,dx,dy,dnx,dny); + } + } + } + + /* A normal registration zeroes the offsets for each frame. */ + if (!offsets) { + for (i=0; i < xim->nframes; i++) { + fr = &xim->frames[i]; + fr->xoff = fr->yoff = 0; + } + } + xim_labelTiles (xim); +} + + +/* XIM_CURSORMODE -- Enter or leave cursor mode. The remote client issues + * a cursor read request via the datastream, then blocks until a cursor + * value is returned. The GUI is responsible for signalling to the user + * that the application is waiting for cursor input, and for returning the + * cursor value when the cursor read finishes. + */ +void +xim_cursorMode (xim, state) +register XimDataPtr xim; +int state; +{ + /* The GUI is responsible for implementing cursor reads. */ + xim_message (xim, "cursorMode", state ? "on" : "off"); +} + + +/* XIM_SETMAPPING -- Set up a mapping between two rasters. + */ +void +xim_setMapping (xim, fb, frame, mapping, src, dst, fill_mode) +register FrameBufPtr fb; +register XimDataPtr xim; +int frame; +int mapping; +int src, dst; +int fill_mode; +{ + register Widget gt = xim->gt; + int src_type, src_width, src_height, src_depth; + int dst_type, dst_width, dst_height, dst_depth, dst_x, dst_y; + float xscale, yscale, scale; + int dx, dy, dnx, dny; + int sx, sy, snx, sny; + + /* Get dimensions of source and destination rasters. */ + if (GtQueryRaster (gt, src, + &src_type, &src_width, &src_height, &src_depth) == 0) + return; + + /* Get region of destination to be written into. */ + if (dst == 0) { + xim_getScreen (xim, frame, + &dst_x, &dst_y, &dst_width, &dst_height, &dst_depth); + } else { + if (GtQueryRaster (gt, dst, + &dst_type, &dst_width, &dst_height, &dst_depth) == 0) + return; + dst_x = dst_y = 0; + } + + xscale = (float)dst_width / (float)src_width; + yscale = (float)dst_height / (float)src_height; + + switch (fill_mode) { + case M_UNITARY: + /* Set up a unitary (one-to-one) mapping, i.e. one pixel in the + * source is mapped to one pixel in the destination. The mapped + * region is the center of both rasters. + */ + xscale = yscale = 1.0; + /* fall through */ + + case M_ASPECT: + /* Scale the source to fit the destination, preserving the + * aspect ratio and displaying all source pixels. + */ + scale = min (xscale, yscale); + if (abs(scale - (int)(scale+0.5)) < TOL) + scale = (int)(scale+0.5); + + dnx = src_width * scale; + if (dnx > dst_width) { + /* Clip source rect. */ + dnx = dst_width; + snx = dnx; + sx = max (0, (src_width + 1) / 2 - snx / 2); + dx = 0; + } else { + /* Clip destination rect. */ + snx = src_width; + sx = 0; + dx = max (0, (dst_width + 1) / 2 - dnx / 2); + } + + dny = src_height * scale; + if (dny > dst_height) { + /* Clip source rect. */ + dny = dst_height; + sny = dny; + sy = max (0, (src_height + 1) / 2 - sny / 2); + dy = 0; + } else { + /* Clip destination rect. */ + sny = src_height; + sy = 0; + dy = max (0, (dst_height + 1) / 2 - dny / 2); + } + + GtSetMapping (gt, mapping, xim->rop, + src, GtPixel, sx, sy, snx, sny, + dst, GtPixel, dst_x + dx, dst_y + dy, dnx, dny); + break; + + case M_FILL: + /* Scale the source to fill the destination window. + */ + GtSetMapping (gt, mapping, xim->rop, + src, GtPixel, 0, 0, src_width, src_height, + dst, GtPixel, dst_x, dst_y, dst_width, dst_height); + break; + } + + if (fb && mapping == fb->zoommap) { + fb->xmag = 1.0; + fb->ymag = 1.0; + fb->xscale = xscale; + fb->yscale = yscale; + fb->xcen = (src_width + 1) / 2.0; + fb->ycen = (src_height + 1) / 2.0; + fb->xflip = fb->yflip = 0; + } +} + + +/* XIM_SETZOOM -- Modify a mapping between two rasters given the specified + * view center and zoom factors. + */ +void +xim_setZoom (xim, fb, frame, mapping, src, dst, xcen,ycen,xmag,ymag, xoff,yoff, absolute) +register XimDataPtr xim; +register FrameBufPtr fb; +int frame; +int mapping; +int src, dst; +float xcen, ycen; /* center of source raster region to be mapped */ +float xmag, ymag; /* magnification in each axis */ +float xoff, yoff; /* offset in each axis */ +Boolean absolute; /* ignore xscale/yscale */ +{ + register Widget gt = xim->gt; + int src_type, src_width, src_height, src_depth; + int dst_type, dst_width, dst_height, dst_depth, dst_x, dst_y; + int sx1, sx2, sy1, sy2, snx, sny; + int dx1, dx2, dy1, dy2, dnx, dny; + int fx1, fx2, fy1, fy2, shift; + int src_recenter_allowed = 1; + int dst_recenter_allowed = 1; + int xreplicate, yreplicate; + int scale, max_x, max_y, bias; + float xscale, yscale; + char buf[256]; + + + /* Get dimensions of source and destination rasters. */ + if (GtQueryRaster (gt, src, + &src_type, &src_width, &src_height, &src_depth) == 0) + return; + + /* Get region of destination to be written into. */ + if (dst == 0) { + xim_getScreen (xim, frame, + &dst_x, &dst_y, &dst_width, &dst_height, &dst_depth); + } else { + if (GtQueryRaster (gt, dst, + &dst_type, &dst_width, &dst_height, &dst_depth) == 0) + return; + dst_x = dst_y = 0; + } + + /* Use old center if none given. */ + if (xcen <= 0) + xcen = fb->xcen; + if (ycen <= 0) + ycen = fb->ycen; + + /* Get scaling ratios. */ + if (absolute) { + xscale = xmag; + yscale = ymag; + } else { + xscale = xmag * fb->xscale; + yscale = ymag * fb->yscale; + } + + /* Avoid roundoff if integer scaling. */ + if (xreplicate = (abs(xscale - (int)(xscale+0.5)) < TOL)) + xscale = (int)(xscale+0.5); + if (yreplicate = (abs(yscale - (int)(yscale+0.5)) < TOL)) + yscale = (int)(yscale+0.5); + + /* Sanity check, return if we're getting too small. */ + if (xscale < TOL || yscale < TOL) + return; + + + /* Map the destination rect back into the source with the given + * zoom factor and center, clipping the source rect at the source + * raster boundary. + */ +src_recenter: + max_x = src_width - 1; + max_y = src_height - 1; + + snx = (int) (dst_width / xscale) + 1; + sny = (int) (dst_height / yscale) + 1; + + sx1 = (int) (xcen - snx / 2.0 + 0.5 + xoff); /*********/ + sx2 = (int) (xcen + snx / 2.0 + 0.5); + sy1 = (int) (ycen - sny / 2.0 + 0.5 + yoff); /*********/ + sy2 = (int) (ycen + sny / 2.0 + 0.5); + + /* Fiddle the source rect slightly if necessary to achieve the + * requested snx,sny. This corrects for any pixel selection errors + * introduced in the float to integer truncation. This is a small + * effect but it can be apparent at high pixel magnifications. + */ + sx2 -= ((sx2 - sx1 + 1) - snx); + sy2 -= ((sy2 - sy1 + 1) - sny); + + if (src_recenter_allowed) { + /* Adjust the center of the source rect to make it fit on the + * source raster, but only if only one edge extends beyond the + * raster boundary. If both edges are out of bounds we just + * clip below. + * + * MJF 9/29 - The changes to fx2/fy2 below are to fix an off-by-one + * error in the center pixel computed by an integer zoom. For + * example, display a 256sq image, invert the cmap and zoom by + * two, the center is different than a straight centering op done + * by the pan function. The effect is that hardcopy has an extra + * border on two sides. + */ + fx1 = (sx1 < 0) ? -sx1 : 0; + fx2 = (sx2 > max_x) ? (max_x - sx2 + 1) : 0; + if (fx1 && !fx2 || !fx1 && fx2) + xcen += (fx1 + fx2); + + fy1 = (sy1 < 0) ? -sy1 : 0; + fy2 = (sy2 > max_y) ? (max_y - sy2 + 1) : 0; + if (fy1 && !fy2 || !fy1 && fy2) + ycen += (fy1 + fy2); + + src_recenter_allowed = 0; + goto src_recenter; + } + + /* Clip the source rect to the raster boundary. */ + sx1 = max(0, min(max_x, sx1)); + sx2 = max(0, min(max_x, sx2)); + sy1 = max(0, min(max_y, sy1)); + sy2 = max(0, min(max_y, sy2)); + + snx = sx2 - sx1 + 1; + sny = sy2 - sy1 + 1; + + + /* Map the zoomed, possibly centered, and clipped source rect back + * to the destination. + */ + max_x = dst_width - 1; + max_y = dst_height - 1; + + dx1 = (int) ((sx1-0.5 - xcen) * xscale + dst_width / 2.0 + 0.5); + dx2 = (int) ((sx2+0.5 - xcen) * xscale + dst_width / 2.0 + 0.5); + dy1 = (int) ((sy1-0.5 - ycen) * yscale + dst_height / 2.0 + 0.5); + dy2 = (int) ((sy2+0.5 - ycen) * yscale + dst_height / 2.0 + 0.5); + + if (dst_recenter_allowed) { + /* If the unclipped destination rect extends out of bounds on + * one side or the other (but not both), shift it slightly to + * try to recenter it on the destination raster. This tends + * to cancel out rounding errors occurring in the calculation + * of the destination rect. + */ + fx1 = (dx1 < 0) ? -dx1 : 0; + fx2 = (dx2 > max_x) ? (max_x - dx2) : 0; + if (fx1 && !fx2 || !fx1 && fx2) { + shift = (fx1 + fx2); + dx1 += shift; + dx2 += shift; + } + + fy1 = (dy1 < 0) ? -dy1 : 0; + fy2 = (dy2 > max_y) ? (max_y - dy2) : 0; + if (fy1 && !fy2 || !fy1 && fy2) { + shift = (fy1 + fy2); + dy1 += shift; + dy2 += shift; + } + + /* If the destination rect does not fill the destination raster, + * center it in the raster. + */ + if ((dx2 - dx1 + 1) < dst_width) { + shift = (dx1 + (max_x - dx2)) / 2 - dx1; + dx1 += shift; + dx2 += shift; + } + + if ((dy2 - dy1 + 1) < dst_height) { + shift = (dy1 + (max_y - dy2)) / 2 - dy1; + dy1 += shift; + dy2 += shift; + } + } + + /* Clip to the edge of the destination raster. */ + dx1 = max(0, min(max_x, dx1)); + dx2 = max(0, min(max_x, dx2)); + dy1 = max(0, min(max_y, dy1)); + dy2 = max(0, min(max_y, dy2)); + + dnx = dx2 - dx1 + 1; + dny = dy2 - dy1 + 1; + + /* Attempt to integerize things if integer scaling is selected. This + * can leave a blank pixel or two at the edge depending upon the + * window size and scaling. + */ + scale = (int)xscale; + if (xreplicate && dnx != snx * scale) { + if (snx < src_width) { + snx = max(1, min(src_width, dnx / scale)); + dnx = max(1, min(dst_width, snx * scale)); + } else if (dnx < dst_width) { + dnx = max(1, min(dst_width, snx * scale)); + snx = max(1, min(src_width, dnx / scale)); + } + if ((bias = ((dx2 - dx1 + 1) - dnx) / 2) > 0) { + dx1 += bias; + dx2 += bias; + } + } + scale = (int)yscale; + if (yreplicate && dny != sny * scale) { + if (sny < src_height) { + sny = max(1, min(src_height, dny / scale)); + dny = max(1, min(dst_height, sny * scale)); + } else if (dny < dst_height) { + dny = max(1, min(dst_height, sny * scale)); + sny = max(1, min(src_height, dny / scale)); + } + if ((bias = ((dy2 - dy1 + 1) - dny) / 2) > 0) { + dy1 += bias; + dy2 += bias; + } + } + + + + /* Set the mapping. */ + initialize_shadow_pixmap (gt, dst); + GtSetMapping (gt, mapping, xim->rop, + src, GtPixel, sx1, sy1, snx, sny, + dst, GtPixel, dst_x + dx1, dst_y + dy1, + fb->xflip ? -dnx : dnx, + fb->yflip ? -dny : dny); + + /* Update the frame buffer zoom/pan/flip parameters. */ + fb->xcen = xcen; fb->ycen = ycen; + fb->xoff = xoff; fb->yoff = yoff; + + if (absolute) { + fb->xmag = xmag / fb->xscale; + fb->ymag = ymag / fb->yscale; + } else { + fb->xmag = xmag; + fb->ymag = ymag; + } + + xim_frameRegion (xim, fb); + sprintf (buf, "%g %g %g %g %g %g %g %g", + fb->xmag, fb->ymag, fb->xcen, fb->ycen, + fb->xscale, fb->yscale, fb->xoff, fb->yoff); + xim_message (xim, "frameView", buf); +} + + +/* XIM_GETSCREEN -- Determine the region of the display window to which + * the given frame is mapped. + */ +xim_getScreen (xim, frame, sx, sy, width, height, depth) +register XimDataPtr xim; +int frame; +int *sx, *sy; +int *width, *height, *depth; +{ + register int i; + int border = xim->tileBorder; + int rtype, scr_width, scr_height; + int twidth, theight, tileno, frameno; + int tilex, tiley; + int nrows = xim->tileRows, ncols = xim->tileCols; + + if (GtQueryRaster (xim->gt, 0, + &rtype, &scr_width, &scr_height, depth) == 0) + return; + + /* Use the entire display window if we are not tiling frames, if + * there aren't enough frames to tile, or if the given frame is + * not in the list of tile frames. + */ + if (!xim->tileFrames || xim->nframes <= 1 || + !(xim->tileFramesList & (1 << frame-1))) { + *sx = *sy = 0; + *width = scr_width; + *height = scr_height; + return; + } + + /* Get index of frame in tile Frames list. */ + for (i=1, frameno=0; i <= xim->nframes; i++) { + if (xim->tileFramesList & (1 << (i-1))) { + frameno++; + if (frame == i) + break; + } + } + + /* Now compute the size of each tile. */ + tileno = frameno - 1; + twidth = (scr_width - (ncols * 2 * border)) / ncols; + theight = (scr_height - (nrows * 2 * border)) / nrows; + + /* Get the "coordinates" of the tile in the mosaic. */ + if (xim->tileByRows) { + tilex = tileno % ncols; + tiley = tileno / ncols; + } else { + tilex = tileno / nrows; + tiley = tileno % nrows; + } + if (!xim->tileTopDown) + tiley = (nrows - tiley - 1); + + /* Finally, get the placement of the tile on the screen. */ + *sx = tilex * twidth + ((tilex*2+1) * border); + *sy = tiley * theight + ((tiley*2+1) * border); + + *width = twidth; + *height = theight; +} + + +/* XIM_ONSCREEN -- Test whether the given frame is visible onscreen. + */ +xim_onScreen (xim, frame) +register XimDataPtr xim; +int frame; +{ + if (xim->tileFrames) + return ((xim->tileFramesList & (1 << (frame-1))) != 0); + else + return (frame == xim->display_frame); +} + + +/* XIM_SETFLIP -- Modify a mapping to flip the frame in X and/or Y. + */ +void +xim_setFlip (xim, fb, flip_x, flip_y) +register XimDataPtr xim; +register FrameBufPtr fb; +int flip_x, flip_y; +{ + register Widget gt = xim->gt; + int src, st, sx, sy, snx, sny; + int dst, dt, dx, dy, dnx, dny; + int rop; + + if (!flip_x && !flip_y) + return; + + if (flip_x) + fb->xflip = !fb->xflip; + if (flip_y) + fb->yflip = !fb->yflip; + + GtGetMapping (gt, fb->zoommap, + &rop, &src,&st,&sx,&sy,&snx,&sny, &dst,&dt,&dx,&dy,&dnx,&dny); + + dnx = abs (dnx); + dnx = fb->xflip ? -dnx : dnx; + dny = abs (dny); + dny = fb->yflip ? -dny : dny; + + GtSetMapping (gt, fb->zoommap, + rop, src,st,sx,sy,snx,sny, dst,dt,dx,dy,dnx,dny); + + xim_message (xim, "xflip", fb->xflip ? "true" : "false"); + xim_message (xim, "yflip", fb->yflip ? "true" : "false"); +} + + +/* XIM_SETROP -- Modify the rasterop portion of a mapping. + */ +void +xim_setRop (xim, fb, rop) +register XimDataPtr xim; +register FrameBufPtr fb; +int rop; +{ + register Widget gt = xim->gt; + int src, st, sx, sy, snx, sny; + int dst, dt, dx, dy, dnx, dny; + int oldrop; + + GtGetMapping (gt, fb->zoommap, + &oldrop, &src,&st,&sx,&sy,&snx,&sny, &dst,&dt,&dx,&dy,&dnx,&dny); + + GtSetMapping (gt, fb->zoommap, + rop, src,st,sx,sy,snx,sny, dst,dt,dx,dy,dnx,dny); +} + + +/* XIM_SETCURSORPOS -- Set the cursor position. + */ +void +xim_setCursorPos (xim, sx, sy) +register XimDataPtr xim; +float sx, sy; /* raster coordinates */ +{ + GtSetRaster (xim->gt, xim->df_p->frameno); + GtSetCursorPos (xim->gt, (int)sx, (int)sy); + GtSetRaster (xim->gt, 0); +} + + +/* XIM_GETCURSORPOS -- Get the cursor position. This is done to a fractional + * pixel precision if the image is zoomed. + */ +void +xim_getCursorPos (xim, sx, sy, raster, frame) +register XimDataPtr xim; +float *sx, *sy; +int *raster, *frame; +{ + register FrameBufPtr fb; + DPoint pv1, pv2; + int rx, ry, rmap; + int src, x, y, i; + + GtGetCursorPos (xim->gt, &x, &y); + src = GtSelectRaster (xim->gt, 0, GtPixel, x,y, GtNDC, &rx, &ry, &rmap); + + pv1.x = rx; pv1.y = ry; + GtNDCToPixel (xim->gt, src, &pv1, &pv2, 1); + *sx = pv2.x; + *sy = pv2.y; + + if (raster) + *raster = src; + + if (frame) { + *frame = xim->display_frame; + for (i=1; i < xim->nframes; i++) { + fb = &xim->frames[i-1]; + if (fb->raster == src || fb->zoomras == src) { + *frame = fb->frameno; + break; + } + } + } +} + + +/* XIM_READDISPLAY -- Read a region of the current display frame and return + * the pixels and corresponding RGB colormap. We allocate a pointer to the + * pixels that needs to be freed later on. Note this routine returns an + * 8 bit RGB colormap. + */ +unsigned char * +xim_readDisplay (xim, x0,y0,nx,ny, w,h, r,g,b, ncolors) +register XimDataPtr xim; +int x0,y0,nx,ny; /* region to extract (input) */ +int *w, *h; /* size of output region (output). */ +unsigned char *r, *g, *b; /* colortable (output) */ +int *ncolors; /* size of colortable (output) */ +{ + register Widget gt = xim->gt; + register int i, j; + + int raster, x1, y1, nc; + int first, nelem, maxelem; + char buf[SZ_LINE], *tmpfile; + unsigned short *rs, *gs, *bs; + int junk, width, height, depth; + unsigned short *cmap=NULL, *iomap=NULL; + unsigned char *pixels=NULL; + static int debug = 0; + + /* The display is raster zero. */ + raster = 0; + + /* Get the size of the raster we're going to extract. If nx or ny + * is zero use the entire raster, else use the indicated region. + * If a region is given clip it to the raster boundary. + */ + if (GtQueryRaster (gt, raster, &junk, &width, &height, &depth) == 0) + goto error; + + + if (nx <= 0 || ny <= 0) { + x0 = y0 = 0; + nx = width; + ny = height; + } else { + x1 = min (width-1, x0 + nx - 1); + y1 = min (height-1, y0 + ny - 1); + x0 = max (0, x0); + y0 = max (0, y0); + nx = x1 - x0 + 1; + ny = y1 - y0 + 1; + } + + /* Get a pixel buffer and read the pixels. */ + if (nx*ny <= 0 || !(pixels = (unsigned char *) malloc (nx * ny))) + goto error; + if (GtReadPixels (gt, raster, pixels, 8, x0, y0, nx, ny) < 0) + goto error; + + + /* Get Gterm widget colormap. */ + if (!(cmap = (ushort *) malloc (3 * MAX_COLORS * sizeof(ushort)))) + goto error; + + rs = cmap; + gs = rs + MAX_COLORS; + bs = gs + MAX_COLORS; + + if (depth == 8) { + nc = GtReadColormap (gt, raster, 0, MAX_COLORS, rs,gs,bs); + if (nc <= 0) + goto error; + + + /* Get the RGB color associated with each pixel. To determine + ** this we must consider both the Gterm widget colormap and iomap. + ** The iomap maps client pixels to Gterm widget pixels, and the + ** colormap maps Gterm widget pixels to RGB values. GtReadPixels + ** returns client pixels, so to get the RGB value associated with + ** each client pixel we must run the client pixel through the iomap + ** to get the Gterm widget pixel, and then use this to look up the + ** RGB value in the widget's colormap. When reading the display + ** (raster=0) we get the colormap corresponding to the image as + ** currently windowed, hence the output image will be rendered as + ** in the current display. Note: the Gterm widget maps are 16 bits, + ** while we return an 8 bit RGB colormap to our caller. + */ + /* Get iomap. */ + if (!(iomap = (ushort *) malloc (MAX_COLORS * sizeof(ushort)))) + goto error; + GtReadIomap (gt, iomap, 0, MAX_COLORS); + + if (debug) { + register short pmin = MAX_COLORS, pmax = 0, i, j; + fprintf (stderr, "iomap\n"); + for (i=0; i < MAX_COLORS; ) { + for (j=0; j < 8 && i < MAX_COLORS; j++) { + pmin = (iomap[i] < pmin ? iomap[i] : pmin); + pmax = (iomap[i] > pmax ? iomap[i] : pmax); + fprintf (stderr, "%3d(%3d) ", i, iomap[i++]); + } + fprintf (stderr, "\n"); + + } + fprintf (stderr, "iomap min = %d max = %d\n", pmin, pmax); + fprintf (stderr, "Gterm Colormap\n"); + for (i=0; i < MAX_COLORS; ) { + for (j=1; j < 4 && i < MAX_COLORS; j++) + fprintf (stderr, " %3d(%3d,%3d,%3d)",i, + (rs[i]>>8),(gs[i]>>8),(bs[i++]>>8)); + fprintf (stderr, "\n"); + } + fflush (stderr); + } + + /* Output the colormap. */ + for (i=0; i < nc; i++) { + j = iomap[i]; + r[i] = (rs[j] >> 8); + g[i] = (gs[j] >> 8); + b[i] = (bs[j] >> 8); + } + for (i=nc; i < MAX_COLORS; i++) { + j = iomap[i]; + r[i] = (rs[j] >> 8); + g[i] = (gs[j] >> 8); + b[i] = (bs[j] >> 8); + } + + } else { + unsigned long lut[MAX_COLORS]; + int start = 10; /* static colors offset */ + + GtReadLUT (gt, lut, 0, MAX_COLORS); + + nc = 216; + for (i=0; i < nc; i++) { + r[i] = (lut[i] >> 16) & 0xff; + g[i] = (lut[i] >> 8) & 0xff; + b[i] = (lut[i] ) & 0xff; + } + } + + *w = nx; + *h = ny; + *ncolors = nc; /* includes static colors */ + + if (debug) { + fprintf (stderr, + "xim_readDisplay: w=%d h=%d d=%d\n", width, height, depth); + for (i=0; i < nc; i++) + fprintf (stderr, "xim_readDisplay[%3d]: %3d %3d %3d\n", + i, r[i], g[i], b[i]); + } + + free ((char *) cmap); + free ((char *) iomap); + + return (pixels); + +error: + if (cmap) + free ((char *) cmap); + if (iomap) + free ((char *) iomap); + if (pixels) + free ((char *) pixels); + return (NULL); +} + + +/* XIM_WRITEDISPLAY -- Load the current display frame from the pixel array + * and RGB colormap passed in the input arguments. The data is assumed to + * be 8 bit pseudocolor. + */ +int +xim_writeDisplay (xim, frame, mapname, pixels, w,h, r,g,b, ncolors) +register XimDataPtr xim; +int frame; /* display frame to be written */ +char *mapname; /* colormap name to be written */ +unsigned char *pixels; +int w, h; +unsigned char *r, *g, *b; +int ncolors; +{ + register int i, j; + register FrameBufPtr fb; + register Widget gt = xim->gt; + unsigned short rs[MAX_COLORS], gs[MAX_COLORS], bs[MAX_COLORS]; + unsigned short iomap[MAX_COLORS], sv_iomap[MAX_COLORS]; + unsigned short invmap[MAX_COLORS]; + int want, npix, nx, ny, sx0, sy0, dx0, dy0; + int sx, sy, width, height, depth; + float xzoom, yzoom, zoom; + int debug=0, autoscale=xim->autoscale; + unsigned char *gtpix; + ColorMapPtr cm; + + + if (DBG_RASTER) + fprintf (stderr, "raster writeDisplay: ......................."); + + /* If frame=0 use the current display frame. */ + if (frame < 1) frame = xim->display_frame; + + /* Create additional frames if needed. */ + if (frame > xim->nframes) { + for (i=1; i <= frame; i++) { + fb = &xim->frames[i-1]; + if (fb->frameno != i) { + xim_initFrame (xim, i, frame, + &xim->fb_config[xim->fb_configno-1], xim->memModel); + + /* If we're in tile mode, add the frame to the tile list + * and if needed resize the tile frames. + */ + if (xim->tileFrames) { + xim->tileFramesList |= (1 << (i-1)); + xim->nTileFrames++; + xim_tileFrames (xim, xim->tileFramesList); + } + } + } + } + + + /* Erase the existing frame before disabling the mapping, otherwise + * we get a white background when the new image is loaded. + */ + xim_eraseFrame (xim, frame); + + fb = &xim->frames[frame-1]; + GtDisableMapping (gt, fb->dispmap, 0); + + /* Substitute a one-to-one iomap so that we don't confuse colors for + * a non-continuous tone (grayscale) image. + */ + GtReadIomap (gt, sv_iomap, 0, MAX_COLORS); + for (i=0; i < MAX_COLORS; i++) + iomap[i] = FIRST_COLOR + min (xim->ncolors, i); + GtWriteIomap (gt, iomap, 0, MAX_COLORS); + + /* If debug mode is enabled compute and print the minimum and maximum + * pixel values and a histogram or count of the number of pixels at + * each value. + */ + if (debug) { + int count[MAX_COLORS]; + int v, lo, hi; + + memset ((void *)count, 0, sizeof(count)); + for (i=0, lo=MAX_COLORS, hi=0; i < w*h; i++) { + v = pixels[i]; + count[v]++; + if (v < lo) + lo = v; + else if (v > hi) + hi = v; + } + fprintf (stderr, "%s: w=%d h=%d min=%d max=%d\n", + mapname, w, h, lo, hi); + + for (i=0, j=0; i < MAX_COLORS; i++) + if (count[i]) { + fprintf (stderr, " %3d(%4d)", i, min(9999,count[i])); + if (++j >= 7) { + fprintf (stderr, "\n"); + j = 0; + } + } + if (j) + fprintf (stderr, "\n"); + + fprintf (stderr, "zeros: "); + for (i=0; i < MAX_COLORS; i++) + if (!count[i]) + fprintf (stderr, " %d", i); + fprintf (stderr, "\n"); + } + + /* Invert the iomap. We want to map standard pixels 0-N to the range + * FC-FC+N in Gterm color space (FC is shorthand for FIRST_COLOR). + * GtWritePixels will process pixels through the ximtool iomap so we + * need to compute invmap, which tells us the input value needed to + * get the desired value of out the iomap. + GtReadIomap (gt, iomap, 0, MAX_COLORS); + memset ((void *)invmap, 0, sizeof(invmap)); + for (i=0; i < MAX_COLORS; i++) + invmap[iomap[i]] = i; + if (!(gtpix = (unsigned char *) malloc (npix = w * h))) + return (-1); + for (i=0; i < npix; i++) { + want = FIRST_COLOR + pixels[i]; + gtpix[i] = invmap[want]; + } + free ((char *) gtpix); + */ + + /* If the image is too large to fit in the existing frame clip it + * to fit (we need to add an auto-resize option here later). + */ + if (w > xim->width) { + nx = xim->width; + sx0 = (w - nx) / 2; + dx0 = 0; + } else { + nx = w; + sx0 = 0; + dx0 = (xim->width - w) / 2; + } + + if (h > xim->height) { + ny = xim->height; + sy0 = (h - ny) / 2; + dy0 = 0; + } else { + ny = h; + sy0 = 0; + dy0 = (xim->height - h) / 2; + } + + /* Load the frame. The GtWritePixels call loads to the raster + * associated with the frame, not the frame number directly. + */ + if (nx <= xim->width && ny <= xim->height) { + GtWritePixels (gt, fb->raster, pixels, 8, dx0, dy0, nx, ny); + } else { + unsigned char *ip = pixels + sy0 * w + sx0; + for (i=0; i < ny; i++, ip += w) + GtWritePixels (gt, fb->raster, ip, 8, dx0, dy0+i, nx, 1); + } + + /* Get screen size. */ + xim_getScreen (xim, 1, &sx, &sy, &width, &height, &depth); + + /* Compute the new scale factor required to scale the source to the + * destination at magnification 1.0. + */ + if (autoscale) { + xzoom = (float)width / (float)nx; + yzoom = (float)height / (float)ny; + zoom = min (xzoom, yzoom); + } else { + xzoom = 1.0; + yzoom = 1.0; + zoom = 1.0; + } + + /* Set the new mapping. */ + fb->xmag = fb->ymag = zoom; + fb->xcen = xim->width / 2; + fb->ycen = xim->height / 2; + + /* Zoom it to fill the display window. */ + xim_setZoom (xim, fb, frame, fb->zoommap, fb->raster, fb->zoomras, + fb->xcen, fb->ycen, fb->xmag, fb->ymag, + fb->xoff, fb->yoff, True); + + /* Check if the named colortable is already defined. If not, add + * another one. If ncolors=0 omit the colortable handling, e.g. + * when loading a raster that doesn't have a colormap. + */ + if (ncolors > 0) { + for (i=0, cm=NULL; i < ncolormaps; i++) + if (strcmp (colormaps[i].name, mapname) == 0) { + cm = &colormaps[i]; + break; + } + if (!cm) { + if (ncolormaps >= MAX_COLORMAPS - 1) + cm = &colormaps[ncolormaps]; + else { + cm = &colormaps[ncolormaps++]; + cm->mapno = GtNextColormap (gt); + } + strcpy (cm->name, mapname); + ncolormaps = min (MAX_COLORMAPS-1, ncolormaps); + + /* Pass the list of colortables on to the user interface. */ + xim_colortables (xim); + } + + for (i=0; i < ncolors; i++) { + rs[i] = (r[i] << 8); + gs[i] = (g[i] << 8); + bs[i] = (b[i] << 8); + } + + if (DBG_RASTER) + fprintf (stderr,"raster writeDisplay: writing colormap......."); + GtWriteColormap (gt, cm->mapno, + FIRST_COLOR, min(ncolors,xim->ncolors), rs, gs, bs); + if (DBG_RASTER) + fprintf (stderr, + "raster writeDisplay: writing colormap.......DONE"); + + fb->offset = 0.5; + fb->scale = (xim->invert ? -1.0 : 1.0); + fb->colormap = cm->mapno; + } else + cm = &colormaps[fb->colormap-1]; + + /* Display the frame. */ + GtEnableMapping (gt, fb->dispmap, 1); + GtSetDisplayRaster (gt, xim->display_frame); + xim_setDisplayFrame (xim, frame); + + GtSetColormapFocus (-1); /* force full update */ + GtLoadColormap (gt, cm->mapno, fb->offset, fb->scale); + GtSetColormapFocus (xim->cm_focus); + xim_enhancement (xim, fb); + + GtWriteIomap (gt, sv_iomap, 0, MAX_COLORS); + + if (DBG_RASTER) + fprintf (stderr, "raster writeDisplay: ......................DONE"); + return (0); +} + + +/* XIM_MESSAGE -- Send a message to the user interface. + */ +void +xim_message (xim, object, message) +register XimDataPtr xim; +char *object; +char *message; +{ + char msgbuf[SZ_MSGBUF]; + + sprintf (msgbuf, "setValue {%s}", message); + ObmDeliverMsg (xim->obm, object, msgbuf); +} + + +/* XIM_MSGI -- Like xim_message, but the message is an integer value. + */ +void +xim_msgi (xim, object, value) +register XimDataPtr xim; +char *object; +int value; +{ + char msgbuf[SZ_LINE]; + sprintf (msgbuf, "setValue {%d}", value); + ObmDeliverMsg (xim->obm, object, msgbuf); +} + + +/* XIM_ALERT -- Issue an alert to the server. The message text input will + * be displayed and either the ok (proceed) or cancel action will be taken, + * causing the action text input to be sent back to the client to be + * executed as a command. This is used to alert the server (i.e. user) of + * unusual circumstances and determine whether or not the server wants to + * proceed. An alert with no actions is a warning. + */ +void +xim_alert (xim, text, ok_action, cancel_action) +register XimDataPtr xim; +char *text; /* message text */ +char *ok_action; /* command sent back to client for "ok" */ +char *cancel_action; /* command sent back to client for "cancel" */ +{ + char msgbuf[SZ_LINE]; + sprintf (msgbuf, "setValue {{%s} {%s} {%s}}", text, + ok_action ? ok_action : "", cancel_action ? cancel_action : ""); + ObmDeliverMsg (xim->obm, "alert", msgbuf); +} + + +/* + * Internal Routines. + * ------------------- + */ + +/* XIM_FRAMEREGION -- Called when the value of the frameRegion UI parameter + * needs to be updated. + */ +static void +xim_frameRegion (xim, fb) +register XimDataPtr xim; +register FrameBufPtr fb; +{ + int rop, src, dst; + int st, sx, sy, snx, sny; + int dt, dx, dy, dnx, dny; + char buf[SZ_LINE]; + + if (GtGetMapping (xim->gt, fb->zoommap, &rop, + &src, &st, &sx, &sy, &snx, &sny, + &dst, &dt, &dx, &dy, &dnx, &dny) == -1) + return; + + /* args: frame x y width height */ + sprintf (buf, "%d %d %d %d %d", fb->frameno, sx, sy, snx, sny); + xim_message (xim, "frameRegion", buf); +} + + +/* XIM_COLORTABLES -- Called when the "colortables" UI parameter needs to be + * updated, i.e., when some change to the list of colormaps has occurred. + */ +static void +xim_colortables (xim) +XimDataPtr xim; +{ + register char *ip, *op; + char buf[MAX_COLORMAPS*40]; + int i; + + for (i=0, op=buf; i < ncolormaps; i++) { + *op++ = '"'; + for (ip = colormaps[i].name; *op = *ip++; op++) + ; + *op++ = '"'; + *op++ = '\n'; + } + *op++ = '\0'; + + xim_message (xim, "colortables", buf); +} + + +/* XIM_ENHANCEMENT -- Called when the "enhancement" UI parameter needs to + * be updated for a frame. + */ +xim_enhancement (xim, fb) +register XimDataPtr xim; +register FrameBufPtr fb; +{ + char buf[SZ_LINE]; + + sprintf (buf, "%d \"%s\" %0.3f %0.3f", fb->frameno, + colormaps[fb->colormap-1].name, fb->offset, fb->scale); + xim_message (xim, "enhancement", buf); + + + /* Force an update of the colorbar. On TrueColor visuals this + ** is required since the colormap doesn't automatically update + ** the display. + */ + set_colorbar (xim, xim->cb); +} + + +/* GET_FBCONFIG -- Read the XIMTOOL startup file to get the set of possible + * frame buffer sizes. + * + * File format: configno nframes width height [extra fields] + * e.g., 1 2 512 512 + * 2 2 800 800 + * 3 1 1024 1024 # comment + */ +static void +get_fbconfig (xim) +register XimDataPtr xim; +{ + register char *ip; + register FILE *fp = NULL; + int config, nframes, width, height, i; + char lbuf[SZ_LINE+1], *fname; + static char *fb_paths[] = { + "/usr/local/lib/imtoolrc", + "/opt/local/lib/imtoolrc", + "/iraf/iraf/dev/imtoolrc", + "/local/lib/imtoolrc", + "/usr/iraf/dev/imtoolrc", + "/usr/local/iraf/dev/imtoolrc", + NULL}; + + /* Initialize the config table. */ + xim->fb_configno = 1; + for (i=0; i < MAX_FBCONFIG; i++) { + xim->fb_config[i].nframes = 1; + xim->fb_config[i].width = DEF_FRAME_WIDTH; + xim->fb_config[i].height = DEF_FRAME_HEIGHT; + } + + /* Now add in some defaults for commonly used sizes based on the + * standard IRAF imtoolrc file, we'll avoid any instrument specific + * configurations. + */ + xim->fb_config[0].width = xim->fb_config[0].height = 512; + xim->fb_config[1].width = xim->fb_config[1].height = 800; + xim->fb_config[2].width = xim->fb_config[2].height = 1024; + xim->fb_config[3].width = xim->fb_config[3].height = 1600; + xim->fb_config[4].width = xim->fb_config[4].height = 2048; + xim->fb_config[5].width = xim->fb_config[5].height = 4096; + + /* Attempt to open the config file. */ + if ((fname=getenv(FBCONFIG_ENV1)) || (fname=getenv(FBCONFIG_ENV2))) + fp = fopen (fname, "r"); + if (!fp && (fname = getenv ("HOME"))) { + sprintf (lbuf, "%s/%s", fname, FBCONFIG_1); + fp = fopen (fname = lbuf, "r"); + if (fp) { + xim->imtoolrc = (char *) XtCalloc (SZ_LINE, sizeof(char)); + strncpy (xim->imtoolrc, fname, strlen(fname)); + } + } + if (!fp) + fp = fopen (fname = xim->imtoolrc, "r"); + for (i=0; !fp && fb_paths[i]; i++) { + if ((fp = fopen (fname = fb_paths[i], "r"))) { + xim->imtoolrc = XtCalloc(strlen(fb_paths[i]+1),sizeof(char)); + strncpy (xim->imtoolrc, fb_paths[i],strlen(fb_paths[i])); + break; + } + } + if (!fp) { + fprintf (stderr, + "Warning: No frame buffer configuration file found.\n"); + return; + } + + + /* Scan the frame buffer configuration file. + */ + while (fgets (lbuf, SZ_LINE, fp) != NULL) { + /* Skip comment lines and blank lines. */ + for (ip=lbuf; *ip == ' ' || *ip == '\t'; ip++) + ; + if (*ip == '\n' || *ip == '#') + continue; + if (!isdigit (*ip)) + continue; + switch (sscanf (ip, "%d%d%d%d", &config,&nframes,&width,&height)) { + case 4: + break; /* normal case */ + case 3: + height = width; /* default to square format */ + break; + default: + fprintf (stderr, "ximtool: bad config `%s'\n", ip); + continue; + } + + nframes = max (1, nframes); + width = max (1, width); + height = max (1, height); + + /* Since the frame buffer is stored in a memory pixrect + * (effectively), the line length should be an integral number + * of 16 bit words. + */ + if (width & 1) { + fprintf (stderr, "imtool warning: fb config %d [%d-%dx%d] - ", + config, nframes, width, height); + fprintf (stderr, "frame width should be even, reset to %d\n", + --width); + } + + config = max(1, min(MAX_FBCONFIG, config)) - 1; + xim->fb_config[config].nframes = nframes; + xim->fb_config[config].width = width; + xim->fb_config[config].height = height; + } + + if (fp) fclose (fp); +} + + +/* XIM_GETANTIALIAS -- Convert a antialias algorithm expressed as a string + * into a Gterm rasterop code. + */ +xim_getAntialias (xim, s) +XimDataPtr xim; +char *s; +{ + register char *ip, *op; + char word[SZ_NAME]; + int rop = 0; + + for (ip=s; *ip && isspace(*ip); ip++) + ; + + while (*ip) { + for (op=word; *ip && isalnum(*ip); ip++) + *op++ = isupper(*ip) ? tolower(*ip) : *ip; + *op++ = '\0'; + + if (strcmp (word, "nearest") == 0) + rop |= MF_NEAREST; + else if (strcmp (word, "bilinear") == 0) + rop |= MF_BILINEAR; + else if (strcmp (word, "area") == 0) + rop |= MF_AREA; + else if (strcmp (word, "blkavg") == 0) + rop |= MF_BLKAVG; + else if (strcmp (word, "boxcar") == 0) + rop |= MF_BOXCAR; + else if (strcmp (word, "lowpass") == 0) + rop |= MF_LOWPASS; + else if (strcmp (word, "gaussian") == 0) + rop |= MF_GAUSSIAN; + + while (*ip && !isalnum(*ip)) + ip++; + } + + return (rop); +} + + +/* XIM_SETCOLORMAP -- Set up the RGB lookup tables used to map the windowed + * monochrome output of a frame buffer into the hardware colormap. + */ +xim_setColormap (function, dirs, m_red, m_green, m_blue, nelem) +char *function; /* type of colormap */ +String *dirs; +unsigned short *m_red; +unsigned short *m_green; +unsigned short *m_blue; +int nelem; +{ + register int i, j; + register char *ip, *op; + static int seed = 0; + int v, vsat, step; + int knot[7]; + float frac; + + + if (DBG_RASTER) + fprintf (stderr, + "xim_setColormap: name='%s' nelem=%d\n", function, nelem); + + vsat = MAX_COLORS - 1; + step = MAX_COLORS / 6; + for (i=0; i < 7; i++) + knot[i] = i * step; + knot[6] = vsat; + + if (dirs) { + /* Load the colormap from a file. */ + char fname[SZ_FNAME]; + char lbuf[SZ_LINE]; + TripletPtr p; + Lut user; + FILE *fp; + + /* Get full file pathname. If the same file is found in multiple + * directories the first version found is used. + */ + strcpy (fname, function); + for (i=0; function[0] != '/' && dirs[i]; i++) { + for (ip=dirs[i], op=fname; *ip; ) + *op++ = *ip++; + if (op > fname && *(op-1) != '/') + *op++ = '/'; + for (ip=function; *ip; ) + *op++ = *ip++; + *op = '\0'; + if (access (fname, 0) == 0) + break; + } + + /* Try to open the file. */ + if ((fp = fopen (fname, "r")) == NULL) { + fprintf (stderr, "cannot open %s\n", fname); + return (ERR); + } + + /* Scan the file. The user colormap may have any number of + * RGB pairs up to a maximum of MAX_COLORS (256). + */ + user.lutlen = 0; + while (fgets (lbuf, SZ_LINE, fp)) { + char *np, *next; + float v[3]; + + /* Ignore blank lines and comment lines. */ + for (ip=lbuf; isspace(*ip); ip++) + ; + if (*ip == '\0' || *ip == '#') + continue; + if (user.lutlen+1 >= MAX_COLORS) + break; + + /* Get an RGB entry. */ + p = &user.hue[user.lutlen++]; + for (i=0, np=ip; i < 3; i++, np=next) { + v[i] = strtod (np, &next); + if (next == np) { + fclose (fp); + return (ERR); + } + } + + p->red = v[0]; + p->green = v[1]; + p->blue = v[2]; + } + + fclose (fp); + if (user.lutlen <= 0) + return (ERR); + + /* Scale the user colormap to fit the NELEMS colors required + * for the output colormap. nelem and lutlen must be the same + * to disable scaling and preserve the exact colortable values. + */ + for (i=0; i < nelem; i++) { + float x, w1, w2; + float r, g, b; + + x = (float)i / (float)(nelem - 1) * (user.lutlen - 1); + j = max(0, min(user.lutlen-1, (int)x)); + w1 = 1.0 - (x - j); + w2 = 1.0 - w1; + + r = user.hue[j].red; + g = user.hue[j].green; + b = user.hue[j].blue; + + if (w2 > 0.0001 && j+1 < user.lutlen) { + r = r * w1 + user.hue[j+1].red * w2; + g = g * w1 + user.hue[j+1].green * w2; + b = b * w1 + user.hue[j+1].blue * w2; + } + + m_red[i] = r * vsat; + m_green[i] = g * vsat; + m_blue[i] = b * vsat; + } + + } else if (strncmp (function, "Grayscale", 9) == 0) { + for (i=0; i < nelem; i++) + m_red[i] = m_green[i] = m_blue[i] = + (float)i / (float)(nelem - 1) * vsat; + + } else if (strncmp (function, "HSV", 3) == 0) { + /* HSV: hue varies uniformly from 270 to 360 and back to 270. + * Value varies from zero to one using a cube root relation + * which causes the value to approach 1.0 rapidly away from zero. + * Saturation is zero near the endpoints, causing the curve + * to range from black to white at the endpoints, but ranges + * to 1.0 at the halfway point, causing nearly saturated colors + * in the middle of the range. + */ + for (i=0; i < nelem; i++) { + float h, s, v, r, g, b; + double pow(), sin(); + + frac = 1.0 - ((float)i / (float)(nelem - 1)); + h = frac * 360.0 + 270.0; + s = abs (sin (frac * 3.1416)); + v = pow ((1.0 - frac), (1.0 / 3.0)); + + hsv_to_rgb (h, s, v, &r, &g, &b); + m_red[i] = r * vsat; + m_green[i] = g * vsat; + m_blue[i] = b * vsat; + } + + } else if (strncmp (function, "Heat", 4) == 0) { + for (i=0; i < nelem; i++) { + frac = (float)i / (float)(nelem - 1); + j = frac * (heat.lutlen - 1); + m_red[i] = heat.hue[j].red * vsat; + m_green[i] = heat.hue[j].green * vsat; + m_blue[i] = heat.hue[j].blue * vsat; + } + + } else if (strncmp (function, "Ramp", 4) == 0) { + for (i=0; i < nelem; i++) { + frac = (float)i / (float)(nelem - 1); + j = frac * (heat.lutlen - 1); + m_red[i] = heat.hue[j].red * (frac * (vsat * 2)); + m_green[i] = heat.hue[j].green * (frac * (vsat * 2)); + m_blue[i] = heat.hue[j].blue * (frac * (vsat * 2)); + } + + } else if (strncmp (function, "AIPS0", 5) == 0) { + for (i=0; i < nelem; i++) { + frac = (float)i / (float)(nelem - 1); + j = frac * (heat.lutlen - 1); + m_red[i] = aips0.hue[j].red * vsat; + m_green[i] = aips0.hue[j].green * vsat; + m_blue[i] = aips0.hue[j].blue * vsat; + } + + } else if (strncmp (function, "Color", 5) == 0) { + for (i=0; i < nelem; i++) { + frac = (float)i / (float)(nelem - 1); + j = frac * (heat.lutlen - 1); + m_red[i] = color.hue[j].red * vsat; + m_green[i] = color.hue[j].green * vsat; + m_blue[i] = color.hue[j].blue * vsat; + } + + } else if (strncmp (function, "Staircase", 9) == 0) { + for (i=0; i < nelem; i++) { + frac = (float)i / (float)(nelem - 1); + j = frac * (heat.lutlen - 1); + m_red[i] = staircase.hue[j].red * vsat; + m_green[i] = staircase.hue[j].green * vsat; + m_blue[i] = staircase.hue[j].blue * vsat; + } + + } else if (strncmp (function, "Standard", 8) == 0) { + for (i=0; i < nelem; i++) { + frac = (float)i / (float)(nelem - 1); + j = frac * (heat.lutlen - 1); + m_red[i] = standard.hue[j].red * vsat; + m_green[i] = standard.hue[j].green * vsat; + m_blue[i] = standard.hue[j].blue * vsat; + } + + } else if (strncmp (function, "Red", 3) == 0) { + for (i=0; i < nelem; i++) { + frac = (float)i / (float)(nelem - 1); + j = frac * (heat.lutlen - 1); + m_red[i] = red.hue[j].red * vsat; + m_green[i] = red.hue[j].green * vsat; + m_blue[i] = red.hue[j].blue * vsat; + } + + } else if (strncmp (function, "Green", 5) == 0) { + for (i=0; i < nelem; i++) { + frac = (float)i / (float)(nelem - 1); + j = frac * (heat.lutlen - 1); + m_red[i] = green.hue[j].red * vsat; + m_green[i] = green.hue[j].green * vsat; + m_blue[i] = green.hue[j].blue * vsat; + } + + } else if (strncmp (function, "Blue", 4) == 0) { + for (i=0; i < nelem; i++) { + frac = (float)i / (float)(nelem - 1); + j = frac * (heat.lutlen - 1); + m_red[i] = blue.hue[j].red * vsat; + m_green[i] = blue.hue[j].green * vsat; + m_blue[i] = blue.hue[j].blue * vsat; + } + + } else if (strncmp (function, "Halley", 6) == 0) { + for (i=0; i < nelem; i++) { + frac = (float)i / (float)(nelem - 1); + j = frac * (heat.lutlen - 1); + m_red[i] = halley.hue[j].red * vsat; + m_green[i] = halley.hue[j].green * vsat; + m_blue[i] = halley.hue[j].blue * vsat; + } + + } else if (strncmp (function, "Rainbow1", 8) == 0) { + for (i=0; i < nelem; i++) + m_red[i] = m_green[i] = m_blue[i] = 0; + + for (i=knot[0]; i <= knot[1]; i++) + m_blue[i] = vsat * (i - knot[0]) / step; + for (i=knot[1]; i <= knot[2]; i++) + m_blue[i] = vsat; + for (i=knot[2]; i <= knot[3]; i++) + m_blue[i] = vsat * (knot[3] - i) / step; + + for (i=knot[1]; i <= knot[2]; i++) + m_green[i] = vsat * (i - knot[1]) / step; + for (i=knot[2]; i <= knot[4]; i++) + m_green[i] = vsat; + for (i=knot[4]; i <= knot[5]; i++) + m_green[i] = vsat * (knot[5] - i) / step; + + for (i=knot[3]; i <= knot[4]; i++) + m_red[i] = vsat * (i - knot[3]) / step; + for (i=knot[4]; i <= knot[6]; i++) + m_red[i] = vsat; + + for (i=knot[5]; i <= knot[6]; i++) { + if ((v = vsat * (i - knot[5]) / step) > vsat) + v = vsat; + m_green[i] = m_blue[i] = v; + } + + } else if (strncmp (function, "Rainbow2", 8) == 0) { + for (i=0; i < nelem; i++) { + frac = (float)i / (float)(nelem - 1); + j = frac * (heat.lutlen - 1); + m_red[i] = rainbow.hue[j].red * vsat; + m_green[i] = rainbow.hue[j].green * vsat; + m_blue[i] = rainbow.hue[j].blue * vsat; + } + + } else if (strncmp (function, "Random16", 8) == 0) { + int red, green, blue; + + if (!seed) + seed = time(0); + srand (seed++); + + for (i=0; i < nelem; ) { + red = ((rand() >> 4) % vsat); + green = ((rand() >> 4) % vsat); + blue = ((rand() >> 4) % vsat); + + for (j=0; i < nelem && j < nelem/16; j++, i++) { + m_red[i] = red; + m_green[i] = green; + m_blue[i] = blue; + } + } + + } else if (strncmp (function, "Random8", 7) == 0) { + int red, green, blue; + + if (!seed) + seed = time(0); + srand (seed++); + + for (i=0; i < nelem; ) { + red = ((rand() >> 4) % vsat); + green = ((rand() >> 4) % vsat); + blue = ((rand() >> 4) % vsat); + + for (j=0; i < nelem && j < nelem/8; j++, i++) { + m_red[i] = red; + m_green[i] = green; + m_blue[i] = blue; + } + } + + } else if (strncmp (function, "Random", 6) == 0) { + if (!seed) + seed = time(0); + srand (seed++); + for (i=0; i < nelem; i++) { + m_red[i] = ((rand() >> 4) % vsat); + m_green[i] = ((rand() >> 4) % vsat); + m_blue[i] = ((rand() >> 4) % vsat); + } + } + + /* Scale colormap values to 16 bits. */ + for (i=0; i < nelem; i++) { + m_red[i] <<= 8; + m_green[i] <<= 8; + m_blue[i] <<= 8; + } + + return (OK); +} + + +hsv_to_rgb (h, s, v, r, g, b) +float h, s, v; +float *r, *g, *b; +{ + register int i; + float f, p, q, t; + + while (h >= 360.0) + h -= 360.0; + + h /= 60.0; + i = (int) h; + f = h - i; + p = v * (1 - s); + q = v * (1 - s*f); + t = v * (1 - s * (1.0 - f)); + + switch (i) { + case 0: + *r = v; *g = t; *b = p; + break; + case 1: + *r = q; *g = v; *b = p; + break; + case 2: + *r = p; *g = v; *b = t; + break; + case 3: + *r = p; *g = q; *b = v; + break; + case 4: + *r = t; *g = p; *b = v; + break; + case 5: + *r = v; *g = p; *b = q; + break; + } +} + + +/* GET_DIRFILE -- Get the next file name from an open directory file. + */ +static int +get_dirfile (dir, outstr, maxch) +DIR *dir; +char *outstr; +int maxch; +{ + register int n; + register struct dirent *dp; + register char *ip, *op; + int status; + + for (dp = readdir(dir); dp != NULL; dp = readdir(dir)) + if (dp->d_ino != 0) { + n = strlen (dp->d_name); + status = n; + for (ip=dp->d_name, op=outstr; --n >= 0; ) + *op++ = *ip++; + *op = EOS; + return (status); + } + + return (EOF); +} + + +/* LOAD_TESTPATTERN -- Load a test pattern into the given frame. + */ +static void +load_testpattern (xim, frame, type) +XimDataPtr xim; +int frame; +int type; /* not used */ +{ + register FrameBufPtr fb = &xim->frames[frame]; + register int i, j, ncolors; + int rtype, width, height, depth; + unsigned char *data; + + if (GtQueryRaster (xim->gt, fb->raster, + &rtype, &width, &height, &depth) == 0) + return; + + data = (unsigned char *) XtMalloc (width); + if (data == (unsigned char *)NULL) + return; + + ncolors = xim->ncolors; + for (j=0; j < height; j++) { + for (i=0; i < width; i++) + data[i] = (((i + j) * 10) % ncolors); + GtWritePixels (xim->gt, fb->raster, data, 8, 0, j, width, 1); + } + + XtFree ((char *)data); +} + + +/* SET_COLORBAR -- Write the colorbar pixels. + */ +static void +set_colorbar (xim, w) +XimDataPtr xim; +Widget w; +{ + register int i; + static int initialized = 0; + int first, ngray, rgb_len, rtype, width, height, depth; + unsigned short m_red[MAX_COLORS]; + unsigned short m_green[MAX_COLORS]; + unsigned short m_blue[MAX_COLORS]; + unsigned char *data; + + + if (!w) + return; + + if (DBG_RASTER) + fprintf (stderr, "SETTING COLORBAR PIXELS...... init = %d\n", + initialized); + + if (GtQueryRaster (w, 0, &rtype, &width, &height, &depth) == 0) + return; + + data = (unsigned char *) XtMalloc (width * height); + for (i=0; i < width; i++) + data[i] = ((float)i / (float)(width - 1) * (xim->ncolors - 1)); + + for (i=1; i < height; i++) + memmove (data + i * width, data, width); + + if (!initialized) { + xim_iiscolormap (w, m_red,m_green,m_blue, &first, &ngray, &rgb_len); + GtWriteColormap (w, 0, first, rgb_len, m_red, m_green, m_blue); + + xim_setColormap ("Grayscale", NULL, m_red, m_green, m_blue, ngray); + GtWriteColormap (w, 0, first, ngray, m_red, m_green, m_blue); + + xim->ncolors = ngray; + initialized++; + } + + GtWritePixels (w, 0, data, 8, 0, 0, width, height); + XtFree ((char *)data); + + if (DBG_RASTER) + fprintf (stderr, "SETTING COLORBAR PIXELS...... DONE\n"); +} + + +/* SET_NFRAMES -- Called when the number of frame buffers changes. + */ +static void +set_nframes (xim, nframes) +XimDataPtr xim; +int nframes; +{ + xim->nframes = nframes; + xim_msgi (xim, "nframes", nframes); +} diff --git a/vendor/x11iraf/ximtool/save.c b/vendor/x11iraf/ximtool/save.c new file mode 100644 index 00000000..51d5b7c4 --- /dev/null +++ b/vendor/x11iraf/ximtool/save.c @@ -0,0 +1,377 @@ +#include +#include +#include +#include +#include +#include + +#include "ximtool.h" + +/* + * SAVE.C -- Routines for saving image rasters to disk files. + * + * xim_initSave (xim) + * xim_saveClose (xim) + * + * status = xim_saveFile (xim, fname, format, x0,y0, nx,ny) + * + * xims_rename (xim, old, new) # save alert action + * xims_cancel (xim, fname) # save alert action + * + * xim_saveFile saves the current display frame to the named file using + * the format specified. If nx or ny is zero the entire frame is saved, + * otherwise the indicated region is saved. + */ + +static int xims_write(); +static void savestat(), savetext(); + + +/* XIM_INITSAVE -- Initialize the file save structure. + */ +void +xim_initSave (xim) +register XimDataPtr xim; +{ + register fileSavePtr fsp; + extern char *getcwd(), *getenv(); + char buf[SZ_LINE]; + + if (!(xim->fsp = fsp = (fileSavePtr) calloc (1, sizeof (fileSave)))) + return; + + fsp->seqno = 0; + fsp->format = XIM_RAS; + fsp->colorType = XIM_PSEUDOCOLOR; + strcpy (fsp->fname, "frame%d.ras"); + + /* Now update the GUI. */ + sprintf (buf, "format ras"); + xim_message (xim, "saveOptions", buf); + sprintf (buf, "color pseudocolor"); + xim_message (xim, "saveOptions", buf); + sprintf (buf, "fname frame%%d.ras"); + xim_message (xim, "saveOptions", buf); +} + + +/* XIM_SAVECLOSE -- Close the save structure. + */ +void +xim_saveClose (xim) +register XimDataPtr xim; +{ + register fileSavePtr fsp = xim->fsp; + + if (fsp) + free ((char *) fsp); +} + + +/* XIM_SAVEFILE - Save the current display frame to a disk file. If nx or + * ny is zero the entire frame is saved, otherwise the given region is saved. + */ +int +xim_saveFile (xim, template, fileformat, x0,y0, nx,ny) +register XimDataPtr xim; +char *template; /* file name or printf format */ +int fileformat; /* output raster file format/type */ +int x0, y0, nx, ny; /* region of display to be saved */ +{ + register int i, j; + register fileSavePtr fsp = xim->fsp; + int w, h, ncols; + char text[SZ_LINE], fname[SZ_FNAME]; + unsigned char r[256], g[256], b[256]; + unsigned char *pixels = NULL; + int status = -1; + static int debug=0; + extern int errno; + FILE *fp; + char *mktemp(); + + /* Generate output file name. */ + sprintf (fname, template, fsp->seqno++); + + /* Get the display pixels and colormap. The routine allocates a + * pointer to the pixels we'll need to free when we're done. + */ + pixels = xim_readDisplay (xim, x0,y0,nx,ny, &w,&h, r,g,b, &ncols); + if (!pixels) + goto done; + + if (debug) { + register int cpix, val; + fprintf (stderr, "saveFile: %s -> %dx%d at %d colors\n", + fname, w, h, ncols); + cpix = (w/2+(h/2)*w); + val = pixels[cpix]; + fprintf (stderr, "Center pixel %d: val=%d (%d,%d,%d)\n",cpix, + val,r[val],g[val],b[val]); + fprintf (stderr, "User Colormap\n"); + for (i=0; i < 256; ) { + for (j=1; j < 4 && i < 256; j++) + fprintf (stderr, " %3d(%3d,%3d,%3d)",i,r[i],g[i],b[i++]); + fprintf (stderr, "\n"); + } + } + + fsp->w = w; + fsp->h = h; + fsp->d = 8; + + if (access (fname, F_OK) < 0) { + if (fp = fopen (fname, "w")) { + struct stat fs; + + xims_write (xim, fp, fileformat, pixels, w,h,8, r,g,b, 256); + fclose (fp); + stat (fname, &fs); + + savetext (xim, fsp->seqno, fname, fileformat, (int)fs.st_size, + w, h, 8); + sprintf (text, "Wrote %d bytes to %s", (int)fs.st_size, fname); + savestat (xim, text); + + } else { + sprintf (text, "Error %d\nCannot open file %s", errno, fname); + xim_alert (xim, text, NULL, NULL); + fsp->seqno--; + } + + } else { + /* Named file already exists. Write a temporary file and + * post an alert to ask the user if they want to overwrite + * the existing file. + */ + char ok_action[SZ_LINE]; + char cancel_action[SZ_LINE]; + char tmpfile[SZ_FNAME]; + char *ip, *op, *last; + + /* Write to a temporary file in the same directory as fname. */ + for (ip=fname, op=tmpfile, last=tmpfile; *op = *ip++; op++) + if (*op == '/') + last = op + 1; + *last = '\0'; + strcat (tmpfile, "ximsXXXXXX"); + if (mktemp(tmpfile) == (char *)NULL) + goto done; + + if (!(fp = fopen (tmpfile, "w"))) { + sprintf (text, "Cannot open temporary file:\n%s", tmpfile); + xim_alert (xim, text, NULL, NULL); + goto done; + } + xims_write (xim, fp, fileformat, pixels, w,h,8, r,g,b, 256); + fclose (fp); + + sprintf (text, "%s\n%s\n%s", + "The following file already exists:", fname, + "Do you want to overwrite this file?"); + + sprintf (ok_action, "save rename %s %s", tmpfile, fname); + sprintf (cancel_action, "save cancel %s", tmpfile); + + xim_alert (xim, text, ok_action, cancel_action); + } + + status = 0; +done: + if (pixels) + free ((char *) pixels); + return (status); +} + + +/* XIMS_WRITE -- Write a file in the indicated format. + */ +static int +xims_write (xim, fp, fileformat, pixels, w,h,d, r,g,b, ncolors) +register XimDataPtr xim; +FILE *fp; +int fileformat; +unsigned char *pixels; +int w, h, d; +unsigned char *r, *g, *b; +int ncolors; +{ + register fileSavePtr fsp = xim->fsp; + register PSImagePtr psim = xim->psim; + register FrameBufPtr fb = xim->df_p; + register ColorMapPtr cm = &colormaps[fb->colormap-1]; + register int sv_annotate = psim->annotate; + register int sv_colorClass = psim->colorClass; + int gray=0, status=0; + + + switch (fileformat) { + case XIM_RAS: + /* Write Sun Rasterfile. We don't support 24-bit yet but can + * add it later. + */ + savestat (xim, "Generating Sun rasterfile..."); + if (xim->fsp->colorType == XIM_GRAYSCALE) + status = writeSunRas (fp, pixels, 8, w,h, r,g,b, ncolors, 1); + else + status = writeSunRas (fp, pixels, 8, w,h, r,g,b, ncolors, 2); + + break; + + case XIM_FITS: + /* Write a simple FITS file. + */ + savestat (xim, "Generating FITS file..."); + status = writeFITS (fp, pixels, w, h, r, g, b, ncolors); + break; + + case XIM_GIF: + /* Write a GIF file. + */ + savestat (xim, "Generating GIF file..."); + gray = (xim->fsp->colorType == XIM_GRAYSCALE); + status = writeGIF (fp, pixels, w, h, r, g, b, ncolors, gray); + break; + + case XIM_TIFF: + /* Write a TIFF file. + */ + savestat (xim, "Generating TIFF file..."); + gray = (xim->fsp->colorType == XIM_GRAYSCALE); + status = writeTIFF (fp, pixels, w, h, ncolors, gray, r, g, b); + break; + + case XIM_EPS: + /* Write an EPS file. + */ + savestat (xim, "Generating postscript output..."); + + /* Temporarily reset the values. */ + psim->annotate = 0; + psim->colorClass = xim->fsp->colorType; + + /* Set up some of the EPS options print to the file. */ + eps_setCmap (psim, r, g, b, ncolors); + eps_setTransform (psim, fb->ctran.z1, fb->ctran.z2, fb->ctran.zt, + fb->offset, fb->scale, cm->name); + eps_print (psim, fp, pixels, w, h, 8, 0); + + /* Restore the saved values. */ + psim->annotate = sv_annotate; + psim->colorClass = sv_colorClass; + break; + + case XIM_JPEG: + case XIM_X11: + case XIM_RAW: + default: + /* We don't know what this is so give up and notify the GUI. */ + savestat (xim, "Save file format not implemented."); + status = -1; + break; + } + + return (status); +} + + +/* The following implement the ok and cancel actions posted by the alert in + * xim_save above. + */ +void +xims_rename (xim, old, new) +register XimDataPtr xim; +char *old, *new; +{ + register fileSavePtr fsp = xim->fsp; + char text[SZ_LINE]; + struct stat fs; + + unlink (new); + if (rename(old,new) != 0 || stat(new,&fs) != 0) { + sprintf (text, "Could not write file %s", new); + savestat (xim, text); + } else { + stat (new, &fs); + savetext (xim, fsp->seqno, new, fsp->format, (int)fs.st_size, + fsp->w, fsp->h, fsp->d); + sprintf (text, "Wrote %d bytes to %s", (int)fs.st_size, new); + savestat (xim, text); + } +} + +void +xims_cancel (xim, fname) +register XimDataPtr xim; +char *fname; +{ + savestat (xim, "Save cancelled."); + unlink (fname); +} + + +/* SAVESTAT -- Internal routine for save status messages. + */ +static void +savestat (xim, message) +register XimDataPtr xim; +char *message; +{ + char text[SZ_LINE]; + sprintf (text, "status {%s}", message); + xim_message (xim, "saveOptions", text); +} + + +/* SAVETEXT -- Write something useful the text box in the save panel. + */ +static void +savetext (xim, seqno, fullname, fileformat, filesize, w,h,d) +register XimDataPtr xim; +int seqno; +char *fullname; +int fileformat; +int filesize; +int w, h, d; +{ + register char *ip; + char *fmt, *fname, text[SZ_LINE]; + + for (ip=fname=fullname; *ip; ip++) + if (*ip == '/') + fname = ip + 1; + + switch (fileformat) { + case XIM_RAS: + fmt = "Sun rasterfile"; + break; + case XIM_GIF: + fmt = "GIF file"; + break; + case XIM_TIFF: + fmt = "TIFF file"; + break; + case XIM_JPEG: + fmt = "JPEG file"; + break; + case XIM_X11: + fmt = "X11 window dump"; + break; + case XIM_FITS: + fmt = "FITS file"; + break; + case XIM_RAW: + fmt = "Raw bytes"; + break; + case XIM_EPS: + fmt = "EPS file"; + break; + default: + fmt = "unknown format"; + break; + } + + sprintf (text, "text {-- Frame %d --\n%s\n%s\n%d bytes\n%dx%dx%d}", + seqno-1, fname, fmt, filesize, w, h, d); + xim_message (xim, "saveOptions", text); +} diff --git a/vendor/x11iraf/ximtool/tiffio.c b/vendor/x11iraf/ximtool/tiffio.c new file mode 100644 index 00000000..1f258338 --- /dev/null +++ b/vendor/x11iraf/ximtool/tiffio.c @@ -0,0 +1,197 @@ +/* + * TIFFIO.C -- Routines to save a simple TIFF 6.0 format file. Loading is + * not supported due to the complexity of the format. + * + * writeTIFF (fa, data, w, h, ncolors, gray, r, g, b) + */ + +#include +#ifdef ULTRIX +#include +#endif +#include + + +/* TIFF Tag description + */ +typedef struct { + short tag; + short type; + int count; + int offset; +} TiffTag; + +typedef struct { + unsigned short red[256]; + unsigned short green[256]; + unsigned short blue[256]; +} Colors; + +static char *h_order = "MM\0*"; +static char *l_order = "II*\0"; + +/* Tag Definitions */ +#define IMAGEWIDTH 256 +#define IMAGELENGTH 257 +#define BITSPERSAMPLE 258 +#define COMPRESSION 259 +#define PHOTOMETRIC 262 +#define STRIPOFFSETS 273 +#define ROWSPERSTRIP 278 +#define STRIPBYTECOUNT 279 +#define XRESOLUTION 282 +#define YRESOLUTION 283 +#define RESOLUTIONUNIT 296 +#define COLORMAP 320 + +#define MAXCOLORS 256 + +/* MONO returns total intensity of r,g,b components */ +#define MONO(rd,gn,bl) (((rd)*11 + (gn)*16 + (bl)*5) >> 5) /*.33R+ .5G+ .17B*/ + + + +/* writeTIFF -- Write a TIFF 6.0 image. +*/ + +writeTIFF (fa, data, w, h, ncolors, gray, r, g, b) +FILE *fa; /* output file descriptor */ +unsigned char *data; /* pixel data */ +int w, h; /* image dimensions */ +int ncolors; /* number of colors */ +int gray; /* grayscale? */ +unsigned char *r, *g, *b; /* colormap */ +{ + int i,size,offset; + short dirs = 12; + TiffTag *tt; + unsigned char *dta, r1, b1, g1; + unsigned short *rr, *gg, *bb; + int bitspersample=8, compression=1, photo=3, resolution=2; + int width = w, height = h; + + tt = (TiffTag *) calloc (dirs, sizeof(TiffTag)); + size = w * h; + dta = (unsigned char *) calloc (size+(size%4), sizeof(unsigned char)); + rr = (unsigned short *) calloc (MAXCOLORS, sizeof(unsigned short)); + gg = (unsigned short *) calloc (MAXCOLORS, sizeof(unsigned short)); + bb = (unsigned short *) calloc (MAXCOLORS, sizeof(unsigned short)); + memcpy(dta, data, size * sizeof(unsigned char)); + + if (is_swapped()) { + fwrite (l_order, 4, 1, fa); + } else { + fwrite (h_order, 4, 1, fa); + width = w << 16; + height = h << 16; + bitspersample <<= 16; + compression <<= 16; + photo <<= 16; + resolution <<= 16; + } + + offset = 8; + fwrite (&offset, 4, 1, fa); + fwrite (&dirs, 2, 1, fa); /* number of IFD's */ + + /* Create TIFF IFD's. + */ + create_TIFFtag (tt+0, IMAGEWIDTH, 3, 1, (width)); + create_TIFFtag (tt+1, IMAGELENGTH, 3, 1, (height)); + create_TIFFtag (tt+2, BITSPERSAMPLE, 3, 1, (bitspersample)); + create_TIFFtag (tt+3, COMPRESSION, 3, 1, (compression)); + create_TIFFtag (tt+4, PHOTOMETRIC, 3, 1, (photo)); + create_TIFFtag (tt+5, STRIPOFFSETS, 4, 1, 10+(dirs*12)+4); + create_TIFFtag (tt+6, ROWSPERSTRIP, 3, 1, (width)); + create_TIFFtag (tt+7, STRIPBYTECOUNT, 4, 1, size); + create_TIFFtag (tt+8, XRESOLUTION, 5, 1, + (tt+5)->offset+(2*768)+(size+(size%4))); + create_TIFFtag (tt+9, YRESOLUTION, 5, 1, + (tt+5)->offset+(2*768)+(size+(size%4))+8); + create_TIFFtag (tt+10, RESOLUTIONUNIT, 3, 1, (resolution)); + create_TIFFtag (tt+11, COLORMAP, 3, 768, + (tt+5)->offset+(size+(size%4))); + + /* Write header info and tags. + */ + for (i = 0 ; i < dirs ; i++) { + fwrite ((tt+i), 12, 1, fa); + } + + /* Write a 4-byte NULL -- this tells the TIFF reader that there + * are no more IFD's. + */ + i = 0; + fwrite (&i, 4, 1, fa); + + /* Write data. + */ + fwrite (dta, size+(size%4), 1, fa); + + /* Create unsigned short colormap. + */ + for (i = 0 ; i < ncolors ; i++) { + if (gray) { + r1 = (unsigned char) MONO (*(r+i),*(g+i),*(b+i)); + g1 = (unsigned char) MONO (*(r+i),*(g+i),*(b+i)); + b1 = (unsigned char) MONO (*(r+i),*(g+i),*(b+i)); + *(r+i) = r1; + *(g+i) = g1; + *(b+i) = b1; + } + *(rr+i) = (unsigned short) *(r+i) | ((unsigned short) *(r+i) << 8); + *(gg+i) = (unsigned short) *(g+i) | ((unsigned short) *(g+i) << 8); + *(bb+i) = (unsigned short) *(b+i) | ((unsigned short) *(b+i) << 8); + } + + /* Fill in the rest of the colortable with 0xffff's. + */ + for (i = ncolors ; i < MAXCOLORS ; i++) { + *(rr+i) = (unsigned short) 0xffff; + *(gg+i) = (unsigned short) 0xffff; + *(bb+i) = (unsigned short) 0xffff; + } + + /* Write out colormap. + */ + fwrite (rr, MAXCOLORS*sizeof(unsigned short), 1, fa); + fwrite (gg, MAXCOLORS*sizeof(unsigned short), 1, fa); + fwrite (bb, MAXCOLORS*sizeof(unsigned short), 1, fa); + + /* Write the XResolution. + */ + i = 1; + fwrite (&i, sizeof(int), 1, fa); + fwrite (&i, sizeof(int), 1, fa); + + /* Write the YResolution. + */ + i = 1; + fwrite (&i, sizeof(int), 1, fa); + fwrite (&i, sizeof(int), 1, fa); + + /* Free memory. + */ + free (tt); + free (dta); + free (rr); + free (gg); + free (bb); +} + + +/* create_TIFFtag - Create a TIFF IFD (Image File Directory). +*/ + +create_TIFFtag (tag, desig, type, count, offset) +TiffTag *tag; /* tag to create */ +short desig; /* tag definition */ +short type; /* scalar type of data items */ +int count; /* no. of items in tag data */ +int offset; /* byte offset to data items */ +{ + tag->tag = desig; + tag->type = type; + tag->count = count; + tag->offset = offset; +} diff --git a/vendor/x11iraf/ximtool/util.c b/vendor/x11iraf/ximtool/util.c new file mode 100644 index 00000000..2ac6331b --- /dev/null +++ b/vendor/x11iraf/ximtool/util.c @@ -0,0 +1,251 @@ +/* + * UTIL.C -- Utility routines for the package. + * + * bswap2 (a, b, nbytes) + * bswap4 (a, aoff, b, boff, nbytes) + * bswap8 (a, aoff, b, boff, nbytes) + * flip (buffer, nx, ny) + * is_swapped () + * min_max (a, npts, bitpix, min, max) + * strpak (in, out, len) + * + * + */ + + +#include +#ifdef ULTRIX +#include +#endif +#include + +#ifndef AIXV3 +#ifndef OSF1 +typedef unsigned char uchar; +#endif +#endif + + + +/* BSWAP2 - Move bytes from array "a" to array "b", swapping successive + * pairs of bytes. The two arrays may be the same but may not be offset + * and overlapping. + */ +bswap2 (a, b, nbytes) +char *a, *b; /* input array */ +int nbytes; /* number of bytes to swap */ +{ + register char *ip=a, *op=b, *otop; + register unsigned temp; + + /* Swap successive pairs of bytes. + */ + for (otop = op + (nbytes & ~1); op < otop; ) { + temp = *ip++; + *op++ = *ip++; + *op++ = temp; + } + + /* If there is an odd byte left, move it to the output array. + */ + if (nbytes & 1) + *op = *ip; +} + + +/* BSWAP4 - Move bytes from array "a" to array "b", swapping the four bytes + * in each successive 4 byte group, i.e., 12345678 becomes 43218765. + * The input and output arrays may be the same but may not partially overlap. + */ +bswap4 (a, aoff, b, boff, nbytes) +char *a; /* input array */ +int aoff; /* first byte in input array */ +char *b; /* output array */ +int boff; /* first byte in output array */ +int nbytes; /* number of bytes to swap */ +{ + register char *ip, *op, *tp; + register int n; + static char temp[4]; + + tp = temp; + ip = (char *)a + aoff - 1; + op = (char *)b + boff - 1; + + /* Swap successive four byte groups. + */ + for (n = nbytes >> 2; --n >= 0; ) { + *tp++ = *ip++; + *tp++ = *ip++; + *tp++ = *ip++; + *tp++ = *ip++; + *op++ = *--tp; + *op++ = *--tp; + *op++ = *--tp; + *op++ = *--tp; + } + + /* If there are any odd bytes left, move them to the output array. + * Do not bother to swap as it is unclear how to swap a partial + * group, and really incorrect if the data is not modulus 4. + */ + for (n = nbytes & 03; --n >= 0; ) + *op++ = *ip++; +} + + +/* BSWAP8 - Move bytes from array "a" to array "b", swapping the eight bytes + * in each successive 8 byte group, i.e., 12345678 becomes 87654321. + * The input and output arrays may be the same but may not partially overlap. + */ +bswap8 (a, aoff, b, boff, nbytes) +char *a; /* input array */ +int aoff; /* first byte in input array */ +char *b; /* output array */ +int boff; /* first byte in output array */ +int nbytes; /* number of bytes to swap */ +{ + register char *ip, *op, *tp; + register int n; + static char temp[8]; + + tp = temp; + ip = (char *)a + aoff - 1; + op = (char *)b + boff - 1; + + /* Swap successive eight byte groups. + */ + for (n = nbytes >> 3; --n >= 0; ) { + *tp++ = *ip++; + *tp++ = *ip++; + *tp++ = *ip++; + *tp++ = *ip++; + *tp++ = *ip++; + *tp++ = *ip++; + *tp++ = *ip++; + *tp++ = *ip++; + *op++ = *--tp; + *op++ = *--tp; + *op++ = *--tp; + *op++ = *--tp; + *op++ = *--tp; + *op++ = *--tp; + *op++ = *--tp; + *op++ = *--tp; + } + + /* If there are any odd bytes left, move them to the output array. + * Do not bother to swap as it is unclear how to swap a partial + * group, and really incorrect if the data is not modulus 8. + */ + for (n = nbytes & 03; --n >= 0; ) + *op++ = *ip++; +} + + +/* IS_SWAPPED -- See if this is a byte-swapped (relative to Sun) machine. + */ + +is_swapped () +{ + union { + char ch[4]; + int i; + } u; + + u.i = 1; + return ((int) u.ch[0]); +} + + +/* MIN_MAX -- Get the min and max values of an array. + */ + +min_max (a, npts, bitpix, min, max) +char *a; +int npts; +int bitpix; +float *min, *max; +{ + register int i; + + *min = 32768.0, *max = -32768.0; + + if (bitpix == 8) { + char *buf = (char *)a; + for (i=0; i < npts; i++) { + if (buf[i] < *min) *min = buf[i]; + if (buf[i] > *max) *max = buf[i]; + } + } else if (bitpix == 16) { + short *buf = (short *)a; + for (i=0; i < npts; i++) { + if (buf[i] < *min) *min = buf[i]; + if (buf[i] > *max) *max = buf[i]; + } + } else if (bitpix == 32) { + int *buf = (int *)a; + for (i=0; i < npts; i++) { + if (buf[i] < *min) *min = buf[i]; + if (buf[i] > *max) *max = buf[i]; + } + } else if (bitpix == -32) { + float *buf = (float *)a; + for (i=0; i < npts; i++) { + if (buf[i] < *min) *min = buf[i]; + if (buf[i] > *max) *max = buf[i]; + } + } else if (bitpix == -64) { + double *buf = (double *)a; + for (i=0; i < npts; i++) { + if (buf[i] < *min) *min = buf[i]; + if (buf[i] > *max) *max = buf[i]; + } + } +} + + +/* STRPAK -- Convert ASCII string from SPP char per short to C char per byte + */ + +strpak (in, out, len) +char *in, *out; +int len; +{ + int i, j; + + /* adaptive byte selection (whichever byte order) chars alternate + * with \0 + */ + if ( in[0] == '\0' ) + j = 1; + else + j = 0; + for ( i = 0; i < len; i++, j += 2 ) + out[i] = in[j]; + out[i] = '\0'; +} + + +/* FLIP -- Reverse order of lines in image. We do this as a separate step + * rather than when reading so the sampling grid for zscale is the same as + * for DISPLAY, even though the pixels are stored "flipped" in the pixfile. + */ +flip (buffer, nx, ny) +uchar *buffer; +int nx, ny; +{ + int i; + register int j, v; + register uchar *buff1, *buff2; + + for (i = 0; i < ny / 2; i++) { + buff1 = &buffer[i*nx]; + buff2 = &buffer[(ny-1-i)*nx]; + for (j = 0; j < nx; j++) { + v = *buff1; + *(buff1++) = *buff2; + *(buff2++) = v; + } + } +} diff --git a/vendor/x11iraf/ximtool/ximclient.c b/vendor/x11iraf/ximtool/ximclient.c new file mode 100644 index 00000000..2d67f25d --- /dev/null +++ b/vendor/x11iraf/ximtool/ximclient.c @@ -0,0 +1,2576 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "ximtool.h" + +/* + * XIMCLIENT.C -- The Ximtool "client" object. This code implements an OBM + * client and responds to messages sent to the client object by the GUI code + * executing under the object manager. + * + * xim_clientOpen (xim) + * xim_clientClose (xim) + * xim_clientExecute (xim, objname, key, cmd) + * + * The clientExecute callback is called by the GUI code in the object manager + * to execute ximtool client commands. + * + * Client commands: + * + * setFrame frameno + * frameno = getFrame [raster] + * raster = getRaster [frameno] + * frame = getSource [raster [sx sy snx sny]] + * nextFrame + * prevFrame + * matchFrames [frames [reference_frame]] + * registerFrames [frames [reference_frame]] + * offfsetRegister [frames [reference_frame]] + * fitFrame + * clearFrame [frame] + * + * setOption option value [args] + * setColormap colormap + * setOffset xoff yoff + * windowColormap offset scale + * windowRGB color offset scale save_flag + * zoom [mag | xmag ymag [ xcen ycen ]] + * zoomAbs [mag | xmag ymag [ xcen ycen ]] + * center = centroid xcen ycen size [type] + * pix = getPixels x0 y0 nx ny [format] + * pan xcen ycen + * flip axis [axis ...] + * + * setPrintOption option value [args] + * print [x0 y0 nx ny] + * setSaveOption option value [args] + * save [x0 y0 nx ny] + * setLoadOption option value [args] + * load + * help + * info option + * + * wcsstr = encodewcs sx sy sz + * retCursorVal sx sy [frame [wcs [key [strval]]]] + * + * ism_start task + * ism_stop task + * ism_cmd task [args] + * + * initialize + * Reset + * Quit + */ + + +/* Client callback struct. */ +typedef struct { + XimDataPtr xim; + Tcl_Interp *tcl; + Tcl_Interp *server; +} XimClient, *XimClientPtr; + + + +static int initialize(), Reset(), Quit(); +static int setColormap(), updateColormap(), windowColormap(); +static int zoom(), pan(), getSource(); +static int setFrame(), getFrame(), getRaster(), nextFrame(), prevFrame(); +static int fitFrame(), matchFrames(), registerFrames(), retCursorVal(); +static int encodewcs(), flip(), clearFrame(), setOption(), setOffset(); +static int setPrintOption(), setSaveOption(), setLoadOption(); +static int print(), save(), load(), help(), windowRGB(); +static int centroid(), getPixels(); +static int ism_start(), ism_stop(), ism_cmd(); + +extern int ism_evaluate(), info(); +extern IsmModule ismNameToPtr(); +extern double atof(); + + +/* xim_clientOpen -- Initialize the ximtool client code. + */ +void +xim_clientOpen (xim) +XimDataPtr xim; +{ + register XimClientPtr xc; + register Tcl_Interp *tcl; + + xc = (XimClientPtr) XtCalloc (1, sizeof(XimClient)); + xim->clientPrivate = (int *)xc; + + xc->xim = xim; + xc->tcl = tcl = Tcl_CreateInterp(); + ObmAddCallback (xim->obm, OBMCB_clientOutput|OBMCB_preserve, + xim_clientExecute, (XtPointer)xc); + + Tcl_CreateCommand (tcl, + "Quit", Quit, (ClientData)xc, NULL); + Tcl_CreateCommand (tcl, + "Reset", Reset, (ClientData)xc, NULL); + Tcl_CreateCommand (tcl, + "initialize", initialize, (ClientData)xc, NULL); + Tcl_CreateCommand (tcl, + "setFrame", setFrame, (ClientData)xc, NULL); + Tcl_CreateCommand (tcl, + "getFrame", getFrame, (ClientData)xc, NULL); + Tcl_CreateCommand (tcl, + "getRaster", getRaster, (ClientData)xc, NULL); + Tcl_CreateCommand (tcl, + "getSource", getSource, (ClientData)xc, NULL); + Tcl_CreateCommand (tcl, + "nextFrame", nextFrame, (ClientData)xc, NULL); + Tcl_CreateCommand (tcl, + "prevFrame", prevFrame, (ClientData)xc, NULL); + Tcl_CreateCommand (tcl, + "fitFrame", fitFrame, (ClientData)xc, NULL); + Tcl_CreateCommand (tcl, + "matchFrames", matchFrames, (ClientData)xc, NULL); + Tcl_CreateCommand (tcl, + "registerFrames", registerFrames, (ClientData)xc, NULL); + Tcl_CreateCommand (tcl, + "offsetRegister", registerFrames, (ClientData)xc, NULL); + Tcl_CreateCommand (tcl, + "clearFrame", clearFrame, (ClientData)xc, NULL); + Tcl_CreateCommand (tcl, + "setOption", setOption, (ClientData)xc, NULL); + Tcl_CreateCommand (tcl, + "setColormap", setColormap, (ClientData)xc, NULL); + Tcl_CreateCommand (tcl, + "setOffset", setOffset, (ClientData)xc, NULL); + Tcl_CreateCommand (tcl, + "windowColormap", windowColormap, (ClientData)xc, NULL); + Tcl_CreateCommand (tcl, + "updateColormap", updateColormap, (ClientData)xc, NULL); + Tcl_CreateCommand (tcl, + "zoom", zoom, (ClientData)xc, NULL); + Tcl_CreateCommand (tcl, + "zoomAbs", zoom, (ClientData)xc, NULL); + Tcl_CreateCommand (tcl, + "centroid", centroid, (ClientData)xc, NULL); + Tcl_CreateCommand (tcl, + "getPixels", getPixels, (ClientData)xc, NULL); + Tcl_CreateCommand (tcl, + "pan", pan, (ClientData)xc, NULL); + Tcl_CreateCommand (tcl, + "flip", flip, (ClientData)xc, NULL); + Tcl_CreateCommand (tcl, + "retCursorVal", retCursorVal, (ClientData)xc, NULL); + Tcl_CreateCommand (tcl, + "encodewcs", encodewcs, (ClientData)xc, NULL); + + Tcl_CreateCommand (tcl, + "setPrintOption", setPrintOption, (ClientData)xc, NULL); + Tcl_CreateCommand (tcl, + "print", print, (ClientData)xc, NULL); + Tcl_CreateCommand (tcl, + "setSaveOption", setSaveOption, (ClientData)xc, NULL); + Tcl_CreateCommand (tcl, + "save", save, (ClientData)xc, NULL); + Tcl_CreateCommand (tcl, + "setLoadOption", setLoadOption, (ClientData)xc, NULL); + Tcl_CreateCommand (tcl, + "load", load, (ClientData)xc, NULL); + Tcl_CreateCommand (tcl, + "help", help, (ClientData)xc, NULL); + Tcl_CreateCommand (tcl, + "info", info, (ClientData)xc, NULL); + Tcl_CreateCommand (tcl, + "windowRGB", windowRGB, (ClientData)xc, NULL); + + /* ISM module callbacks. */ + Tcl_CreateCommand (tcl, + "ism_start", ism_start, (ClientData)xc, NULL); + Tcl_CreateCommand (tcl, + "ism_stop", ism_stop, (ClientData)xc, NULL); + Tcl_CreateCommand (tcl, + "ism_cmd", ism_cmd, (ClientData)xc, NULL); +} + + +/* xim_clientClose -- Shutdown the ximtool client code. + */ +void +xim_clientClose (xim) +XimDataPtr xim; +{ + register XimClientPtr xc = (XimClientPtr) xim->clientPrivate; + Tcl_DeleteInterp (xc->tcl); +} + + +/* xim_clientExecute -- Called by the GUI code to send a message to the + * "client", which from the object manager's point of view is ximtool itself. + */ +xim_clientExecute (xc, tcl, objname, key, command) +register XimClientPtr xc; +Tcl_Interp *tcl; /* caller's Tcl */ +char *objname; /* object name */ +int key; /* notused */ +char *command; +{ + register XimDataPtr xim = xc->xim; + + xc->server = tcl; + if (strcmp (objname, "client") == 0) + Tcl_Eval (xc->tcl, command); + else + ism_evaluate (xim, objname, command); + + return (0); +} + + +/* + * XIMTOOL CLIENT commands. + * ---------------------------- + */ + +/* Quit -- Exit ximtool. + * + * Usage: Quit + */ +static int +Quit (xc, tcl, argc, argv) +register XimClientPtr xc; +Tcl_Interp *tcl; +int argc; +char **argv; +{ + register XimDataPtr xim = xc->xim; + xim_shutdown (xim); +} + + +/* Reset -- Reset ximtool. + * + * Usage: Reset + * + * Reset does a full power-on reset of ximtool. + */ +static int +Reset (xc, tcl, argc, argv) +register XimClientPtr xc; +Tcl_Interp *tcl; +int argc; +char **argv; +{ + register XimDataPtr xim = xc->xim; + xim_initialize (xim, xim->fb_configno, xim->nframes, 1); +} + + +/* initialize -- Reinitialize ximtool. + * + * Usage: initialize + * + * Initialize does a partial reinitialization of ximtool, preserving the + * current frame buffers and view. + */ +static int +initialize (xc, tcl, argc, argv) +register XimClientPtr xc; +Tcl_Interp *tcl; +int argc; +char **argv; +{ + register XimDataPtr xim = xc->xim; + xim_initialize (xim, xim->fb_configno, xim->nframes, 0); +} + + +/* setFrame -- Set the frame to be displayed. + * + * Usage: setFrame + */ +static int +setFrame (xc, tcl, argc, argv) +register XimClientPtr xc; +Tcl_Interp *tcl; +int argc; +char **argv; +{ + if (argc == 2) + xim_setFrame (xc->xim, atoi(argv[1])); + return (TCL_OK); +} + + +/* getFrame -- Get the frame number. + * + * Usage: frameno = getFrame [raster] + * + * This routine has two forms. When called with no argument getFrame returns + * the current display frame. When called with a raster number getFrame + * returns the frame number with which the raster is associated. + */ +static int +getFrame (xc, tcl, argc, argv) +XimClientPtr xc; +Tcl_Interp *tcl; +int argc; +char **argv; +{ + register XimDataPtr xim = xc->xim; + register FrameBufPtr fb; + char frameno[SZ_NAME]; + register int i; + int raster; + + if (argc == 1) + sprintf (frameno, "%d", xc->xim->display_frame); + else { + raster = atoi (argv[1]); + strcpy (frameno, "0"); + + for (i=1; i <= xim->nframes; i++) { + fb = &xim->frames[i-1]; + if (fb->raster == raster || fb->zoomras == raster) { + sprintf (frameno, "%d", fb->frameno); + break; + } + } + } + + Tcl_SetResult (xc->server, frameno, TCL_VOLATILE); + return (TCL_OK); +} + + +/* getRaster -- Get the image raster number of the given frame. + * + * Usage: raster = getRaster [frameno] + * + * This routine has two forms. When called with no argument getRaster returns + * the raster number of the current display frame. When called with a frame + * number getRaster returns the raster number of the given frame. + */ +static int +getRaster (xc, tcl, argc, argv) +XimClientPtr xc; +Tcl_Interp *tcl; +int argc; +char **argv; +{ + register XimDataPtr xim = xc->xim; + register FrameBufPtr fb; + char buf[SZ_NAME]; + register int i; + int frameno; + + if (argc == 1) + sprintf (buf, "%d", xim->df_p->raster); + else { + frameno = atoi (argv[1]); + strcpy (buf, "0"); + + for (i=1; i < xim->nframes; i++) { + fb = &xim->frames[i-1]; + if (fb->frameno == frameno) { + sprintf (buf, "%d", fb->raster); + break; + } + } + } + + Tcl_SetResult (xc->server, buf, TCL_VOLATILE); + return (TCL_OK); +} + + +/* getSource -- Get the source of the currently displayed image. + * + * Usage: frame = getSource [raster [sx sy snx sny]] + * + * getSource returns the frame number of the currently displayed frame as + * the function value, and the raster number and source rect within that + * raster are returned as function arguments. + */ +static int +getSource (xc, tcl, argc, argv) +XimClientPtr xc; +Tcl_Interp *tcl; +int argc; +char **argv; +{ + register int i; + register XimDataPtr xim = xc->xim; + register FrameBufPtr fb = xim->df_p; + int src, st, sx, sy, snx, sny; + int dst, dt, dx, dy, dnx, dny; + char buf[SZ_NAME]; + int frameno, rop; + + GtGetMapping (xim->gt, fb->zoommap, &rop, + &src,&st,&sx,&sy,&snx,&sny, &dst,&dt,&dx,&dy,&dnx,&dny); + + if (argc > 1) { + sprintf (buf, "%d", fb->raster); + Tcl_SetVar (xc->server, argv[1], buf, 0); + } + if (argc > 2) { + sprintf (buf, "%d", sx); + Tcl_SetVar (xc->server, argv[2], buf, 0); + sprintf (buf, "%d", sy); + Tcl_SetVar (xc->server, argv[3], buf, 0); + sprintf (buf, "%d", snx); + Tcl_SetVar (xc->server, argv[4], buf, 0); + sprintf (buf, "%d", sny); + Tcl_SetVar (xc->server, argv[5], buf, 0); + } + + sprintf (buf, "%d", fb->frameno); + Tcl_SetResult (xc->server, buf, TCL_VOLATILE); + + return (TCL_OK); +} + + +/* nextFrame -- Display the next frame in sequence. + * + * Usage: nextFrame + */ +static int +nextFrame (xc, tcl, argc, argv) +register XimClientPtr xc; +Tcl_Interp *tcl; +int argc; +char **argv; +{ + register XimDataPtr xim = xc->xim; + int frame; + + if (xim->display_frame < xim->nframes) + frame = xim->display_frame + 1; + else + frame = 1; + + xim_setFrame (xc->xim, frame); + return (TCL_OK); +} + + +/* prevFrame -- Display the previous frame in sequence. + * + * Usage: prevFrame + */ +static int +prevFrame (xc, tcl, argc, argv) +register XimClientPtr xc; +Tcl_Interp *tcl; +int argc; +char **argv; +{ + register XimDataPtr xim = xc->xim; + int frame; + + if (xim->display_frame > 1) + frame = xim->display_frame - 1; + else + frame = xim->nframes; + + xim_setFrame (xc->xim, frame); + return (TCL_OK); +} + + +/* matchFrames -- Set the enhancement of the listed frames to match that of + * the given reference frame. If no reference frame is given the current + * display frame is used. If no frames are listed all frames are matched + * to the current display frame. + * + * Usage: matchFrames [frames [reference_frame]] + */ +static int +matchFrames (xc, tcl, argc, argv) +register XimClientPtr xc; +Tcl_Interp *tcl; +int argc; +char **argv; +{ + register XimDataPtr xim = xc->xim; + int *frames, frame_list[32], reference_frame; + int nitems, i; + char **items; + + /* Get reference frame. */ + if (argc > 2) + reference_frame = atoi (argv[2]); + else + reference_frame = xim->display_frame; + + /* Get frame list. */ + if (argc > 1) { + if (Tcl_SplitList (tcl, argv[1], &nitems, &items) != TCL_OK) + goto nolist; + for (i=0, frames=frame_list; i < nitems; i++) + frames[i] = atoi (items[i]); + frames[i] = (int) NULL; + XtFree ((char *)items); + } else +nolist: frames = NULL; + + xim_matchFrames (xc->xim, frames, reference_frame); + return (TCL_OK); +} + + +/* registerFrames -- Register the listed frames with the given reference + * frame. If no reference frame is given the current display frame is used. + * If no frames are listed all frames are registered with the current + * display frame. + * + * Usage: registerFrames [frames [reference_frame]] + * offsetRegister [frames [reference_frame]] + */ +static int +registerFrames (xc, tcl, argc, argv) +register XimClientPtr xc; +Tcl_Interp *tcl; +int argc; +char **argv; +{ + register XimDataPtr xim = xc->xim; + int *frames, frame_list[32], reference_frame; + int nitems, i, offsets; + char **items; + + /* Get reference frame. */ + if (argc > 2) + reference_frame = atoi (argv[2]); + else + reference_frame = xim->display_frame; + + /* Get frame list. */ + if (argc > 1) { + if (Tcl_SplitList (tcl, argv[1], &nitems, &items) != TCL_OK) + goto nolist; + for (i=0, frames=frame_list; i < nitems; i++) + frames[i] = atoi (items[i]); + frames[i] = (int) NULL; + XtFree ((char *)items); + } else +nolist: frames = NULL; + + offsets = (strcmp (argv[0], "offsetRegister") == 0); + xim_registerFrames (xc->xim, frames, reference_frame, offsets); + return (TCL_OK); +} + + +/* setOffset -- Set the offset for the current display frame buffer. + * + * Usage: setOffset xoff yoff + */ +static int +setOffset (xc, tcl, argc, argv) +register XimClientPtr xc; +Tcl_Interp *tcl; +int argc; +char **argv; +{ + register XimDataPtr xim = xc->xim; + register FrameBufPtr fb = xim->df_p; + float xcen, ycen; + float xmag, ymag; + float xoff, yoff; + Boolean absolute = False; + int frame = xim->display_frame - 1; + + + if (argc < 3) + return (TCL_ERROR); + + xcen = fb->xcen; + ycen = fb->ycen; + xmag = fb->xmag; + ymag = fb->ymag; + + /* Get offset values for the frame. */ + xoff = atof (argv[1]); + yoff = atof (argv[2]); + + /* Set frame offset. */ + xim_setZoom (xim, fb, fb->frameno, fb->zoommap, + fb->raster, fb->zoomras, xcen, ycen, xmag, ymag, xoff, yoff, + absolute); + + /* Now set he frame values independent of the display frame. */ + fb = &xim->frames[frame]; + fb->xoff = xoff; + fb->yoff = yoff; + + return (TCL_OK); +} + + + +/* clearFrame -- Clear the given frame, or the current frame in no frame + * number is given. + * + * Usage: clearFrame [frame] + */ +static int +clearFrame (xc, tcl, argc, argv) +register XimClientPtr xc; +Tcl_Interp *tcl; +int argc; +char **argv; +{ + register XimDataPtr xim = xc->xim; + int frame; + + if (argc > 1) + frame = atoi (argv[1]); + else + frame = xim->display_frame; + + xim_eraseFrame (xc->xim, frame); + return (TCL_OK); +} + + +/* fitFrame -- Attempt to make the display window the same size as the frame + * buffer. + * + * Usage: fitFrame + */ +static int +fitFrame (xc, tcl, argc, argv) +register XimClientPtr xc; +Tcl_Interp *tcl; +int argc; +char **argv; +{ + register XimDataPtr xim = xc->xim; + + xim_fitFrame (xc->xim); + return (TCL_OK); +} + + +/* setOption -- Set an ximtool client option. + * + * Usage: setOption option value [args] + * + * Options: + * autoscale true|false + * antialias true|false [type] + * tileFrames true|false [frames] + * tileByRow true|false + * tileTopDown true|false + * tileGeom type|geom [frames] + * cmfocus size + */ +char *h_orient[] = { + "1x1","2x1","3x1","2x2", "3x2","3x2","4x2","4x2", "3x3","5x2","4x3","4x3" +}; +char *v_orient[] = { + "1x1","1x2","1x3","2x2", "2x3","2x3","2x4","2x4", "3x3","2x5","3x4","3x4" +}; + +static int +setOption (xc, tcl, argc, argv) +register XimClientPtr xc; +Tcl_Interp *tcl; +int argc; +char **argv; +{ + register XimDataPtr xim = xc->xim; + register FrameBufPtr fb = xim->df_p; + char *option, *strval, **items; + char buf[SZ_LINE]; + int ch, value, nx, ny, nitems, i, frame_list=0; + + + if (argc < 3) + return (TCL_ERROR); + else { + option = argv[1]; + strval = argv[2]; + + if (strcmp (option, "tileGeom") != 0) { + ch = strval[0]; + if (isdigit (ch)) + value = atoi (strval); + else if (ch == 'T' || ch == 't') + value = 1; + else if (ch == 'F' || ch == 'f') + value = 0; + } + } + + if (strcmp (option, "autoscale") == 0) { + if (xim->autoscale != value) { + xim->autoscale = value; + xim_resize (xim, xim->gt); + sprintf (buf, "%s", value ? "True" : "False"); + xim_message (xim, "autoscale", buf); + } + } else if (strcmp (option, "antialias") == 0) { + if (xim->antialias != value) { + xim->antialias = value; + if (value) { + if (argc > 3) + xim->rop = xim_getAntialias (xim, argv[3]); + else + xim->rop = xim_getAntialias (xim, xim->antialiasType); + } else + xim->rop = 0; + xim_setRop (xim, fb, xim->rop); + sprintf (buf, "%s", value ? "True" : "False"); + xim_message (xim, "antialias", buf); + } + + } else if (strcmp (option, "cmfocus") == 0) { + if (xim->cm_focus != value) { + int box_size = value; + xim->cm_focus = box_size; + GtSetColormapFocus (box_size); + } + + } else if (strcmp (option, "tileFrames") == 0) { + if (xim->tileFrames != value) { + /* Get list of frames to be tiled. */ + if (argc > 3) { + if (Tcl_SplitList (tcl, argv[3], &nitems, &items) != TCL_OK) + goto nolist1; + for (i=0; i < nitems; i++) + frame_list |= (1 << (atoi(items[i]) - 1)); + XtFree ((char *)items); + } else { +nolist1: for (i=0; i < xim->nframes; i++) + frame_list |= (1 << i); + nitems = xim->nframes; + } + + /* Set or clear tile frame mode. */ + xim_tileFrames (xim, value ? frame_list : 0); + } + + } else if (strcmp (option, "tileByRows") == 0) { + xim->tileByRows = value; + xim_tileFrames (xim, xim->tileFramesList); + + } else if (strcmp (option, "tileTopDown") == 0) { + xim->tileTopDown = value; + xim_tileFrames (xim, xim->tileFramesList); + + } else if (strcmp (option, "tileLabels") == 0) { + xim->tileLabels = value; + xim_tileFrames (xim, xim->tileFramesList); + + } else if (strcmp (option, "tileGeom") == 0) { + /* Get list of frames to be tiled. */ + if (argc > 3) { + if (Tcl_SplitList (tcl, argv[3], &nitems, &items) != TCL_OK) + goto nolist2; + for (i=0; i < nitems; i++) + frame_list |= (1 << (atoi(items[i]) - 1)); + XtFree ((char *)items); + } else { +nolist2: for (i=0; i < xim->nframes; i++) + frame_list |= (1 << i); + nitems = xim->nframes; + } + nitems = max (nitems, 1); + + + /* Get the option or tile geometry. */ + if (strcmp (strval, "Best") == 0) { + if (xim->width < xim->height) + goto horient; + else + goto vorient; + } else if (strcmp (strval, "Square") == 0) { + for (i=0; (i*i) < nitems; i++) + ; + nx = ny = i; + } else if (strcmp (strval, "Horizontal") == 0) { +horient: if (nitems >= 13) + nx = ny = 4; + else + sscanf (h_orient[nitems-1], "%dx%d", &nx, &ny); + } else if (strcmp (strval, "Vertical") == 0) { +vorient: if (nitems >= 13) + nx = ny = 4; + else + sscanf (v_orient[nitems-1], "%dx%d", &nx, &ny); + } else if (strcmp (strval, "Row") == 0) { + nx = nitems; + ny = 1; + } else if (strcmp (strval, "Column") == 0) { + nx = 1; + ny = nitems; + } else { + sscanf (strval, "%dx%d", &nx, &ny); + } + + /* Set or clear tile frame mode. */ + xim->tileRows = ny; + xim->tileCols = nx; + xim->tileFramesList = frame_list; + sprintf (buf, "%d %d", nx, ny); + xim_message (xim, "tileOptions", buf); + + xim_tileFrames (xim, xim->tileFramesList); + } + + return (TCL_OK); +} + + +/* setColormap -- Set the colormap for the current display frame. + * + * Usage: setColormap + * + * The colormap may be specified either by number or by name. + */ +static int +setColormap (xc, tcl, argc, argv) +register XimClientPtr xc; +Tcl_Interp *tcl; +int argc; +char **argv; +{ + register XimDataPtr xim = xc->xim; + register FrameBufPtr fb = xim->df_p; + unsigned short m_red[MAX_COLORS]; + unsigned short m_green[MAX_COLORS]; + unsigned short m_blue[MAX_COLORS]; + char buf[SZ_LINE]; + ColorMapPtr cm; + int i; + + + if (argc == 2) { + if (isdigit (*argv[1])) + i = atoi(argv[1]); + else { + for (i=1; i <= ncolormaps; i++) + if (strcmp (colormaps[i-1].name, argv[1]) == 0) + break; + } + + if (i >= 1 && i <= ncolormaps) { + cm = &colormaps[i-1]; + if (strncmp (cm->name, "Random", 6) == 0) { + xim_setColormap (cm->name, NULL, + m_red, m_green, m_blue, xim->ncolors); + GtWriteColormap (xim->gt, cm->mapno, + first_color, xim->ncolors, m_red, m_green, m_blue); + } + + fb->colormap = i; + GtSetColormapFocus (-1); /* force full update */ + GtLoadColormap (xim->gt, cm->mapno, fb->offset, fb->scale); + GtSetColormapFocus (xim->cm_focus); + xim_enhancement (xim, fb); + } + } + + return (TCL_OK); +} + + +/* windowColormap -- Set the colormap for the current display frame. + * + * Usage: windowColormap + */ +static int +windowColormap (xc, tcl, argc, argv) +register XimClientPtr xc; +Tcl_Interp *tcl; +int argc; +char **argv; +{ + register XimDataPtr xim = xc->xim; + register FrameBufPtr fb = xim->df_p; + register ColorMapPtr cm; + char buf[SZ_LINE]; + + if (argc > 1) { + cm = &colormaps[fb->colormap-1]; + fb->offset = atof(argv[1]); + fb->scale = (argc > 2) ? (float)atof(argv[2]) : fb->scale; + GtLoadColormap (xim->gt, cm->mapno, fb->offset, fb->scale); + xim_enhancement (xim, fb); + } + + return (TCL_OK); +} + + +/* updateColormap -- Update the colormap for the entire display frame. + * + * Usage: updateColormap + */ +static int +updateColormap (xc, tcl, argc, argv) +register XimClientPtr xc; +Tcl_Interp *tcl; +int argc; +char **argv; +{ + register XimDataPtr xim = xc->xim; + register FrameBufPtr fb = xim->df_p; + register ColorMapPtr cm; + char buf[SZ_LINE]; + + if (argc > 1) { + cm = &colormaps[fb->colormap-1]; + fb->offset = atof(argv[1]); + fb->scale = (argc > 2) ? (float)atof(argv[2]) : fb->scale; + GtSetColormapFocus (-1); /* force full update */ + GtLoadColormap (xim->gt, cm->mapno, fb->offset, fb->scale); + GtSetColormapFocus (xim->cm_focus); + xim_enhancement (xim, fb); + } + + return (TCL_OK); +} + + +/* zoom -- Set the zoom factors for the current frame to the given values. + * A zoom factor > 1 enlarges the image, < 1 shrinks the image, 1.0 maps + * one source pixel to one destination pixel. + * + * Usage: zoom 1 argument + * zoom 2 arguments + * zoom 4 arguments + * + * When called as "zoom" the magnification is relative to the fixed scaling, + * if any, used to scale the frame to fit the display window at mag=1.0. + * When called as zoomAbs" the magnification given is the actual scale factor + * used to map raster pixels to display pixels. + */ +static int +zoom (xc, tcl, argc, argv) +register XimClientPtr xc; +Tcl_Interp *tcl; +int argc; +char **argv; +{ + register XimDataPtr xim = xc->xim; + register FrameBufPtr fb = xim->df_p; + float xmag, ymag; + float xcen, ycen; + float xoff, yoff; + Boolean absolute; + + xmag = fb->xmag; + ymag = fb->ymag; + xcen = fb->xcen; + ycen = fb->ycen; + xoff = fb->xoff; + yoff = fb->yoff; + + switch (argc) { + case 7: + xoff = atof (argv[5]); + yoff = atof (argv[6]); + /* fall through */ + case 5: + xcen = atof (argv[3]); + ycen = atof (argv[4]); + /* fall through */ + case 3: + xmag = atof (argv[1]); + ymag = atof (argv[2]); + break; + case 2: + xmag = ymag = atof (argv[1]); + break; + } + + absolute = (strcmp (argv[0], "zoomAbs") == 0); + xim_setZoom (xim, fb, fb->frameno, fb->zoommap, + fb->raster, fb->zoomras, xcen, ycen, xmag, ymag, xoff, yoff, + absolute); + + return (TCL_OK); +} + + +/* pan -- Pan the current frame, i.e., change the view center. + * + * Usage: pan + */ +static int +pan (xc, tcl, argc, argv) +register XimClientPtr xc; +Tcl_Interp *tcl; +int argc; +char **argv; +{ + register XimDataPtr xim = xc->xim; + register FrameBufPtr fb = xim->df_p; + Boolean absolute = False; + float xmag, ymag; + float xcen, ycen; + float xoff, yoff; + double atof(); + + xmag = fb->xmag; + ymag = fb->ymag; + xoff = fb->xoff; + yoff = fb->yoff; + + if (argc == 3) { + xcen = atof (argv[1]); + ycen = atof (argv[2]); + + xim_setZoom (xim, fb, fb->frameno, fb->zoommap, + fb->raster, fb->zoomras, xcen, ycen, xmag, ymag, xoff, yoff, + absolute); + } + + return (TCL_OK); +} + + +/* centroid -- Center the cursor on the feature given an initial position + * and box size. Return a correction to the center. + * + * Usage: centroid [ ] + */ +static int +centroid (xc, tcl, argc, argv) +register XimClientPtr xc; +Tcl_Interp *tcl; +int argc; +char **argv; +{ + register XimDataPtr xim = xc->xim; + register FrameBufPtr fb = xim->df_p; + register CtranPtr ct = (CtranPtr) &fb->ctran; + unsigned char junk[MAX_COLORS]; + unsigned char *pix = NULL; + float *data=NULL, *xm=NULL, *ym=NULL; + float xsum, ysum, xsumx, ysumx; + float cx, cy, lo, hi, px, xcen, ycen, size; + float xmin=999999.0, xmax=-999999.0; + int w, h, ncolors, i, j; + int dist=0, mind=99999, maxd=99999, imin=0, imax=0; + int x0, y0, nx, npix, min_max=-1; + char buf[SZ_LINE]; + double atof(); + + + if (argc < 4) + return (TCL_ERROR); + + xcen = atof (argv[1]); + ycen = atof (argv[2]); + size = atof (argv[3]); + if (argc == 5) + min_max = strcmp (argv[4],"max"); + + x0 = xcen - size; + y0 = ycen - size; + nx = size * 2 + 1; + npix = nx * nx; + + /* Read the display raster. */ + pix = xim_readDisplay (xim, x0,y0,nx,nx, &w,&h, junk,junk,junk, + &ncolors); + + /* Scale the data to the WCS pixel values for centroiding. */ + data = (float *) XtMalloc (npix * sizeof(float)); + for (i=0; i < npix; i++) { + if (pix[i] == 0) { + data[i] = 0.0; + } else { + if (ct->zt == W_LINEAR) { + data[i] = ((pix[i]-1) * (ct->z2 - ct->z1) / 199) + ct->z1; + data[i] = max (ct->z1, min (ct->z2, data[i])); + } else + data[i] = (float) pix[i]; + } + cx = (nx / 2) - (i % nx); + cy = (nx / 2) - (i / nx); + dist = (int) (sqrt (cx*cx + cy*cy) + 0.5); + + if (data[i] > xmax) + xmax = data[i], maxd = dist, imax = i; + else if (data[i] == xmax && dist < maxd) + maxd = dist, imax = i; + + if (data[i] < xmin) + xmin = data[i], mind = dist, imin = i; + else if (data[i] == xmin && dist < mind) + mind = dist, imin = i; + } + XtFree ((char *)pix); + + if (min_max >= 0) { + if (min_max == 0) { + if (data[npix/2] == xmax) + sprintf (buf, "0 0"); + else + sprintf (buf, "%g %g", (imax%nx)-size, (imax/nx)-size); + } else { + if (data[npix/2] == xmin) + sprintf (buf, "0 0"); + else + sprintf (buf, "%g %g", (imin%nx)-size, (imin/nx)-size); + } + + /* Return the correction to the position. */ + Tcl_SetResult (xc->server, buf, TCL_VOLATILE); + return (TCL_OK); + } + + + /* Find the low threshold for the subraster (i.e. the mean). */ + lo = hi = xsum = data[0]; + for (i=1; i < npix ; i++) { + xsum += data[i]; + lo = (data[i] < lo ? data[i] : lo); + hi = (data[i] > hi ? data[i] : hi); + } + + /* Check for a raster with all the same pixels, in which case + * just return a zero offset. + */ + if (lo == hi) { + sprintf (buf, "0 0"); + Tcl_SetResult (xc->server, buf, TCL_VOLATILE); + return (TCL_OK); + + } else + lo = xsum / (float)npix; + + /* Accumulate the x and y marginals. */ + xm = (float *) XtMalloc (nx * sizeof(float)); + ym = (float *) XtMalloc (nx * sizeof(float)); + for (i=0; i < nx; i++) { + xsum = xm[i] = 0.0, ysum = ym[i] = 0.0; + for (j=0; j < nx; j++) { + px = data[(j*nx)+i]; /* column sum */ + if (lo <= px) + xsum += px - lo; + + px = data[(i*nx)+j]; /* row sum */ + if (lo <= px) + ysum += px - lo; + } + xm[i] = xsum; + ym[i] = ysum; + } + XtFree ((char *)data); + + /* Now calculate the centroids as the first moment. If all the + * marginals are zero (i.e. all pixels the same) then return a + * zero correction. + */ + xsum = xsumx = 0.0, ysum = ysumx = 0.0; + px = (float) nx; + for (i=0; i < nx; i++) { + xsum += (xm[i] / px); + xsumx += (xm[i] / px) * i; + + ysum += (ym[i] / px); + ysumx += (ym[i] / px) * i; + } + cx = (xsum == 0.0) ? size : xsumx / xsum; + cy = (ysum == 0.0) ? size : ysumx / ysum; + + XtFree ((char *)xm); /* clean up */ + XtFree ((char *)ym); + + /* Return the correction to the position. */ + sprintf (buf, "%d %d", nint(cx-size), nint(cy-size)); + Tcl_SetResult (xc->server, buf, TCL_VOLATILE); + + return (TCL_OK); +} + + +/* getPixels -- Get an array of pixels around the given center position. + * + * Usage: getPixels [format [scale]] + */ + +#define PF_NONE 0 /* don't format the output pixels */ +#define PF_PIXTAB 1 /* format for pixel table */ +#define PF_HCUT 2 /* format for horizontal cut-plot */ +#define PF_VCUT 3 /* format for vertical cut-plot */ + +static int +getPixels (xc, tcl, argc, argv) +register XimClientPtr xc; +Tcl_Interp *tcl; +int argc; +char **argv; +{ + register XimDataPtr xim = xc->xim; + register FrameBufPtr fb = xim->df_p; + register CtranPtr ct = (CtranPtr) &fb->ctran; + register int i, j, k, l; + unsigned char *pix = NULL; + char *buf = NULL, ch, val[32]; + float *data = NULL; + float z1 = ct->z1, z2 = ct->z2; + float scale=1.0, yscale = 128.0 / (z2 - z1); + int x0, y0, nx, ny, format=0, npix, sample=1, raster=0; + double atof(); + + + if (argc < 5) + return (TCL_ERROR); + + x0 = atof (argv[1]); + y0 = atof (argv[2]); + nx = atof (argv[3]); + ny = atof (argv[4]); + if (argc >= 6) { + if (isdigit ((ch = *argv[5]))) + format = atoi (argv[5]); + else if (ch == 'T' || ch == 't') + format = 1; + else + format = 0; + } + if (argc >= 7) + sample = (isdigit(*argv[6]) ? atoi (argv[6]) : 1); + if (argc == 8) + scale = atof (argv[7]); + + npix = nx * ny; + + + /* Read the display raster. */ + pix = (unsigned char *) XtMalloc (npix); + if (GtReadPixels (xim->gt, raster, pix, 8, x0, y0, nx, ny) < 0) + return (TCL_ERROR); + + /* Scale the data to the WCS pixel values for display. We don't + * get here if an ISM is running that provides access to the real + * pixel values. + */ + data = (float *) XtCalloc (npix, sizeof(float)); + for (i=0; i < npix; i+=sample) { + if (pix[i] == 0) { + data[i] = 0.0; + } else { + if (ct->zt == W_LINEAR) { + data[i] = ((pix[i]-1) * (z2 - z1) / 199) + z1; + data[i] = max (z1, min (z2, data[i])); + } else + data[i] = (float) pix[i]; + } + if (format > 1) { data[i] = (z2 - data[i]) * yscale; } + } + XtFree ((char *)pix); + + /* Get a text buffer large enough to hold the encoded data. */ + if (!(buf = (char *) XtMalloc ((npix + 4) * 30))) { + XtFree ((char *)data); + return (TCL_ERROR); + } + + /* Encode the data as {ddd} {ddd} {ddd}...{ddd}. The first four + * elements are the zscale values and the array min/max. + */ + strcpy (buf, ""); + sprintf (val, "{%10.1f} ", z1); strcat (buf, val); + sprintf (val, "{%10.1f} ", z2); strcat (buf, val); + + if (format == PF_PIXTAB) { + for (i=0; i < npix; i++) { + sprintf (val, "{%10.1f%c} ", data[i], + (data[i] <= z1 ? '-' : (data[i] >= z2 ? '+' : ' ')) ); + strcat (buf, val); + } + } else if (format == PF_HCUT) { + for (i=0; i < npix; i+=sample) { + sprintf (val, "{%g %g} ", i * scale, data[i]); + strcat (buf, val); + } + } else if (format == PF_VCUT) { + for (i=0; i < npix; i+=sample) { + sprintf (val, "{%g %g} ", data[i], i * scale); + strcat (buf, val); + } + } else { + for (i=0; i < npix; i++) { + sprintf (val, "{%f} ", data[i]); + strcat (buf, val); + } + } + + Tcl_SetResult (xc->server, buf, TCL_VOLATILE); + XtFree ((char *)data); + XtFree ((char *)buf); + + return (TCL_OK); +} + + +/* flip -- Flip the current display frame in the indicated axis or axes. + * + * Usage: flip [axis [axis ...]] + */ +static int +flip (xc, tcl, argc, argv) +register XimClientPtr xc; +Tcl_Interp *tcl; +int argc; +char **argv; +{ + register XimDataPtr xim = xc->xim; + register FrameBufPtr fb = xim->df_p; + int flip_x = 0, flip_y = 0; + int ch, i; + + for (i=1; i < argc; i++) { + ch = argv[i][0]; + if (ch == 'x' || ch == 'X') + flip_x = !flip_x; + else if (ch == 'y' || ch == 'Y') + flip_y = !flip_y; + } + + xim_setFlip (xim, fb, flip_x, flip_y); + return (TCL_OK); +} + + +/* retCursorVal -- Return a cursor value to the ximtool client process. This + * should be executed by the GUI to terminate a cursor read. + * + * Usage: retCursorVal sx sy [frame [wcs [key [strval]]]] + */ +static int +retCursorVal (xc, tcl, argc, argv) +register XimClientPtr xc; +Tcl_Interp *tcl; +int argc; +char **argv; +{ + register XimDataPtr xim = xc->xim; + int frame, wcs, key; + float sx, sy; + char *s, *strval; + + if (argc < 3) + return (TCL_ERROR); + + sx = atof (argv[1]); + sy = atof (argv[2]); + frame = (argc > 3) ? atoi (argv[3]) : xim->display_frame; + wcs = (argc > 4) ? atoi (argv[4]) : 1; + + if (argc > 5) { + s = argv[5]; + if (s[0] == '^') + key = s[1] - 'A' + 1; + else + key = s[0]; + } else + key = 0; + + strval = (argc > 6) ? argv[6] : ""; + + xim_retCursorVal (xim, sx, sy, frame, wcs, key, strval); + + return (TCL_OK); +} + + +/* encodewcs -- Convert raw screen coordinates x,y,z (z=pixel value) to + * world coordinates using the WCS passed to ximtool by the client application + * when the frame was loaded. The encoded description of the current position + * and pixel value is returned to the GUI as a string value. + * + * Usage: string = encodewcs sx sy sz + */ +static int +encodewcs (xc, tcl, argc, argv) +register XimClientPtr xc; +Tcl_Interp *tcl; +int argc; +char **argv; +{ + char buf[SZ_LINE]; + float sx, sy; + int sz; + + if (argc < 3) + return (TCL_ERROR); + + sx = atof (argv[1]); + sy = atof (argv[2]); + sz = (argc > 3) ? atoi (argv[3]) : 0; + + xim_encodewcs (xc->xim, sx, sy, sz, buf); + Tcl_SetResult (xc->server, buf, TCL_VOLATILE); + + return (TCL_OK); +} + + +/* setPrintOption -- Set an ximtool client hardcopy option. + * + * Usage: setPrintOption option value [args] + * + * Options: + * autoscale true|false + * autorotate true|false + * maxaspect true|false + * annotate true|false + * compress true|false + * + * orientation portrait|landscape + * papersize letter|legal|A4|B5 + * imscale value + * + * colortype gray|pseudo|rgb + * printername strval + * devicetype printer|file + * + * printcmd command + * printfile filename + * + * dotitle true|false + * doborders true|false + * docolorbars true|false + * title string + * + * corners llx lly urx ury + */ +static int +setPrintOption (xc, tcl, argc, argv) +register XimClientPtr xc; +Tcl_Interp *tcl; +int argc; +char **argv; +{ + register XimDataPtr xim = xc->xim; + register FrameBufPtr fb = xim->df_p; + register PSImagePtr psim = xim->psim; + register PrintCfgPtr pcp = xim->pcp; + register PrinterPtr prp; + register int i; + int llx, lly, urx, ury; + char *option, strval[SZ_LINE]; + char buf[SZ_LINE]; + int pnum, ch, value, psflags = psim->page.flags; + + if (argc < 3) + return (TCL_ERROR); + else { + option = argv[1]; + strcpy (strval, argv[2]); + for (i=3; i < argc; i++) { + strcat (strval, " "); + strcat (strval, argv[i]); + } + + ch = strval[0]; + if (isdigit (ch)) + value = atoi (strval); + else if (ch == 'T' || ch == 't') + value = 1; + else if (ch == 'F' || ch == 'f') + value = 0; + } + + if (strcmp (option, "autoscale") == 0) { /* AUTOSCALE */ + psflags = value ? psflags | EPS_AUTOSCALE : + psflags & ~EPS_AUTOSCALE ; + psim->page.flags = psflags; + sprintf (buf, "%s %s", option, value ? "True" : "False"); + xim_message (xim, "printOptions", buf); + + } else if (strcmp (option, "autorotate") == 0) { /* AUTOROTATE */ + psflags = value ? psflags | EPS_AUTOROTATE : + psflags & ~EPS_AUTOROTATE ; + psim->page.flags = psflags; + sprintf (buf, "%s %s", option, value ? "True" : "False"); + xim_message (xim, "printOptions", buf); + + } else if (strcmp (option, "maxaspect") == 0) { /* MAXASPECT */ + psflags = value ? psflags | EPS_MAXASPECT : + psflags & ~EPS_MAXASPECT ; + psim->page.flags = psflags; + sprintf (buf, "%s %s", option, value ? "True" : "False"); + xim_message (xim, "printOptions", buf); + + } else if (strcmp (option, "dotitle") == 0) { /* TITLE */ + psflags = value ? psflags | EPS_DOTITLE : + psflags & ~EPS_DOTITLE ; + psim->page.flags = psflags; + sprintf (buf, "%s %s", option, value ? "True" : "False"); + xim_message (xim, "printOptions", buf); + + } else if (strcmp (option, "doborders") == 0) { /* BORDERS */ + psflags = value ? psflags | EPS_DOBORDERS : + psflags & ~EPS_DOBORDERS ; + psim->page.flags = psflags; + sprintf (buf, "%s %s", option, value ? "True" : "False"); + xim_message (xim, "printOptions", buf); + + } else if (strcmp (option, "docolorbar") == 0) { /* COLORBAR */ + psflags = value ? psflags | EPS_DOCOLORBAR : + psflags & ~EPS_DOCOLORBAR ; + psim->page.flags = psflags; + sprintf (buf, "%s %s", option, value ? "True" : "False"); + xim_message (xim, "printOptions", buf); + + } else if (strcmp (option, "title") == 0) { /* TITLE STR */ + if (strcmp ("imtitle", strval) != 0) { + strcpy (psim->label, strval); + sprintf (buf, "title %s", strval); + xim_message (xim, "printOptions", buf); + } + + } else if (strcmp (option, "annotate") == 0) { /* ANNOTATE */ + if (value) { + if (!psim->label) + psim->label = (char *) calloc (SZ_LINE, sizeof (char)); + sprintf (psim->label, "[Frame %d] %s", + fb->frameno, fb->ctran.imtitle); + psim->annotate = 1; + } else { + if (psim->label) { + XtFree ((char *)psim->label); + psim->label = NULL; + } + psim->annotate = 0; + } + sprintf (buf, "%s %s", option, value ? "True" : "False"); + xim_message (xim, "printOptions", buf); + + } else if (strcmp (option, "compress") == 0) { /* COMPRESS */ + if (value) + psim->compression = RLECompression; + else + psim->compression = NoCompression; + sprintf (buf, "%s %s", option, value ? "True" : "False"); + xim_message (xim, "printOptions", buf); + + } else if (strcmp (option, "orientation") == 0) { /* ORIENTATION */ + if (ch == 'P' || ch == 'p') + psim->page.orientation = EPS_PORTRAIT; + else if (ch == 'L' || ch == 'l') + psim->page.orientation = EPS_LANDSCAPE; + sprintf (buf, "%s %s", option, strval); + xim_message (xim, "printOptions", buf); + + } else if (strcmp (option, "papersize") == 0) { /* PAPER SIZE */ + if (strval[2] == 'T' || strval[2] == 't') + psim->page.page_type = EPS_LETTER; + else if (strval[2] == 'G' || strval[2] == 'g') + psim->page.page_type = EPS_LEGAL; + else if (strval[0] == 'A' || strval[0] == 'a') + psim->page.page_type = EPS_A4; + else if (strval[0] == 'B' || strval[0] == 'b') + psim->page.page_type = EPS_B5; + sprintf (buf, "%s %s", option, strval); + xim_message (xim, "printOptions", buf); + + } else if (strcmp (option, "imscale") == 0) { /* IMAGE SCALE */ + if (value >= 10) { + if ((int)(psim->page.scale*100.0) != value) + psim->page.scale = (float) value / 100.0; + sprintf (buf, "%s %d", option, value); + xim_message (xim, "printOptions", buf); + } + + } else if (strcmp (option, "colortype") == 0) { /* COLORTYPE */ + if (ch == 'G' || ch == 'g') + psim->colorClass = EPS_GRAYSCALE; + else if (ch == 'P' || ch == 'p') + psim->colorClass = EPS_PSEUDOCOLOR; + else if (ch == 'R' || ch == 'r') + psim->colorClass = EPS_TRUECOLOR; + sprintf (buf, "%s %s", option, strval); + xim_message (xim, "printOptions", buf); + + } else if (strcmp (option, "devicetype") == 0) { /* DEVICETYPE */ + + if (strval[0] == 'p' || strval[0] == 'P') { + pcp->diskfile = 0; + sprintf (buf, "deviceType Printer"); + xim_message (xim, "printOptions", buf); + sprintf (buf, "printCmd %s", pcp->printCmd); + xim_message (xim, "printOptions", buf); + sprintf (buf, "printerName %d", pcp->printno); + xim_message (xim, "printOptions", buf); + + } else if (strval[0] == 'f' || strval[0] == 'F') { + pcp->diskfile = 1; + sprintf (buf, "deviceType File"); + xim_message (xim, "printOptions", buf); + sprintf (buf, "printFile %s", pcp->printFile); + xim_message (xim, "printOptions", buf); + } + + } else if (strcmp (option, "printername") == 0) { /* PRINTER NAME */ + /* Set to printer mode if called in file mode. */ + if (pcp->diskfile) { + pcp->diskfile = 0; + sprintf (buf, "deviceType Printer"); + xim_message (xim, "printOptions", buf); + } + pnum = xim_getPrinterInfo (xim, strval); + sprintf (buf, "printerName %s", strval); + xim_message (xim, "printOptions", buf); + strcpy (pcp->printCmd, printer_list[pnum].printCmd); + sprintf (buf, "printCmd %s", pcp->printCmd); + xim_message (xim, "printOptions", buf); + + } else if (strcmp (option, "printcmd") == 0) { /* PRINT COMMAND */ + strcpy (pcp->printCmd, strval); + sprintf (buf, "printCmd %s", strval); + xim_message (xim, "printOptions", buf); + + } else if (strcmp (option, "printfile") == 0) { /* PRINT FILENAME */ + strcpy (pcp->printFile, strval); + sprintf (buf, "printFile %s", strval); + xim_message (xim, "printOptions", buf); + + } else if (strcmp (option, "corners") == 0) { /* IMAGE CORNERS */ + /* Set the corners of the image being printed. */ + sscanf (strval, "%d %d %d %d", &llx, &lly, &urx, &ury); + eps_setCorners (psim, llx, lly, urx, ury); + } + + /* Reload the page parameters in case anything's changed. */ + eps_setPage (psim, psim->page.orientation, psim->page.page_type, + (int)(psim->page.scale*100), psim->page.flags); + + return (TCL_OK); +} + + +/* setSaveOption -- Set an ximtool client disk file option. + * + * Usage: setSaveOption option value [args] + * + * Options: + * + * format fmt + * color gray|pseudo|rgb + * fname strval + */ +static int +setSaveOption (xc, tcl, argc, argv) +register XimClientPtr xc; +Tcl_Interp *tcl; +int argc; +char **argv; +{ + register XimDataPtr xim = xc->xim; + register FrameBufPtr fb = xim->df_p; + register fileSavePtr fsp = xim->fsp; + register int i; + char *option, strval[SZ_LINE]; + char buf[SZ_LINE]; + int ch, value; + + if (argc < 3) + return (TCL_ERROR); + else { + option = argv[1]; + strcpy (strval, argv[2]); + for (i=3; i < argc; i++) { + strcat (strval, " "); + strcat (strval, argv[i]); + } + + + ch = strval[0]; + if (isdigit (ch)) + value = atoi (strval); + else if (ch == 'T' || ch == 't') + value = 1; + else if (ch == 'F' || ch == 'f') + value = 0; + } + + if (strcmp (option, "format") == 0) { /* FORMAT */ + switch (strval[0]) { + case 'r': + if (strval[2] == 's') { + fsp->format = XIM_RAS; + strcpy (fsp->fname, "frame%d.ras"); + } else if (strval[2] == 'w') { + fsp->format = XIM_RAW; + strcpy (fsp->fname, "frame%d.raw"); + } + break; + case 'g': + fsp->format = XIM_GIF; + strcpy (fsp->fname, "frame%d.gif"); + break; + case 'j': + fsp->format = XIM_JPEG; + strcpy (fsp->fname, "frame%d.jpg"); + break; + case 't': + fsp->format = XIM_TIFF; + strcpy (fsp->fname, "frame%d.tiff"); + break; + case 'f': + fsp->format = XIM_FITS; + strcpy (fsp->fname, "frame%d.fits"); + break; + case 'e': + fsp->format = XIM_EPS; + strcpy (fsp->fname, "frame%d.eps"); + break; + case 'x': + fsp->format = XIM_X11; + strcpy (fsp->fname, "frame%d.xwd"); + break; + } + sprintf (buf, "%s %s", option, strval); + xim_message (xim, "saveOptions", buf); + sprintf (buf, "fname %s", fsp->fname); + xim_message (xim, "saveOptions", buf); + + } else if (strcmp (option, "color") == 0) { /* COLOR */ + if (ch == 'G' || ch == 'g') + fsp->colorType = XIM_GRAYSCALE; + else if (ch == 'P' || ch == 'p') + fsp->colorType = XIM_PSEUDOCOLOR; + else if (ch == 'R' || ch == 'r') + fsp->colorType = XIM_RGB; + sprintf (buf, "%s %s", option, strval); + xim_message (xim, "saveOptions", buf); + + } else if (strcmp (option, "fname") == 0) { /* FILENAME */ + strcpy (fsp->fname, strval); + sprintf (buf, "%s %s", option, strval); + xim_message (xim, "saveOptions", buf); + } + + return (TCL_OK); +} + + +/* setLoadOption -- Set an ximtool client disk file option. + * + * Usage: setLoadOption option value [args] + * + * Options: + * up + * root + * home + * rescan + * headers + * pattern patstr + * gray 0|1 + * zscale 0|1 + * zrange 0|1 + * z1 value + * z2 value + * nsample value + * + */ +static int +setLoadOption (xc, tcl, argc, argv) +register XimClientPtr xc; +Tcl_Interp *tcl; +int argc; +char **argv; +{ + register int i; + register XimDataPtr xim = xc->xim; + register fileLoadPtr flp = xim->flp; + char *ip, *op, *option, *strval; + char buf[SZ_LINE]; + + if (argc < 2) + return (TCL_ERROR); + else { + option = argv[1]; + strval = (argc == 3 ? argv[2] : "" ); + } + + if (strcmp (option, "up") == 0) { /* UP */ + if (strcmp("/", flp->curdir) != 0) { + for (i=strlen(flp->curdir); i > 1; i--) { + if (flp->curdir[i] == '/') + break; + } + flp->curdir[i] = '\0'; + sprintf (buf, "curdir %s", flp->curdir); + xim_message (xim, "loadOptions", buf); + xim_dirRescan (xim); + } + + } else if (strcmp (option, "root") == 0) { /* ROOT */ + strcpy (flp->curdir, "/"); + sprintf (buf, "curdir %s", flp->curdir); + xim_message (xim, "loadOptions", buf); + xim_dirRescan (xim); + + } else if (strcmp (option, "home") == 0) { /* HOME */ + strcpy (flp->curdir, flp->homedir); + sprintf (buf, "curdir %s", flp->curdir); + xim_message (xim, "loadOptions", buf); + xim_dirRescan (xim); + + } else if (strcmp (option, "pattern") == 0) { /* PATTERN */ + if (strcmp(strval, flp->pattern) != 0) { + strcpy (flp->pattern, strval); + sprintf (buf, "pattern %s", flp->pattern); + xim_message (xim, "loadOptions", buf); + xim_dirRescan (xim); + } + + } else if (strcmp (option, "rescan") == 0) { /* RESCAN */ + xim_dirRescan (xim); + + } else if (strcmp (option, "headers") == 0) { /* HEADERS */ + xim_scanHeaders (xim); + + } else if (strcmp (option, "gray") == 0) { /* GRAY */ + flp->gray = (strval[0] == '0' ? 0 : 1); + sprintf (buf, "gray %s", strval[0] == '0' ? "off" : "on"); + xim_message (xim, "loadOptions", buf); + + } else if (strcmp (option, "zscale") == 0) { /* ZSCALE */ + flp->zscale = (strval[0] == '0' ? 0 : 1); + sprintf (buf, "zscale %s", strval[0] == '0' ? "off" : "on"); + xim_message (xim, "loadOptions", buf); + + } else if (strcmp (option, "zrange") == 0) { /* ZRANGE */ + flp->zrange = (strval[0] == '0' ? 0 : 1); + sprintf (buf, "zrange %s", strval[0] == '0' ? "off" : "on"); + xim_message (xim, "loadOptions", buf); + + } else if (strcmp (option, "z1") == 0) { /* Z1 */ + sscanf (argv[2], "%g", &(flp->z1)); + sprintf (buf, "z1 %s", argv[2]); + xim_message (xim, "loadOptions", buf); + + } else if (strcmp (option, "z2") == 0) { /* Z2 */ + sscanf (argv[2], "%g", &(flp->z2)); + sprintf (buf, "z2 %s", argv[2]); + xim_message (xim, "loadOptions", buf); + + } else if (strcmp (option, "nsample") == 0) { /* NSAMPLE */ + sscanf (argv[2], "%d", &(flp->nsample)); + sprintf (buf, "nsample %s", argv[2]); + xim_message (xim, "loadOptions", buf); + } + + return (TCL_OK); +} + + +/* Print -- Print the current display frame to a printer or to a file (EPS). + * + * Usage: print [x0 y0 nx ny] + * + * print rename old new + * print cancel fname + * + * If a subregion is given the indicated region is printed, otherwise the + * full display frame is printed. + * + * The forms "print rename" and "print cancel" are actions for print alerts. + */ +static int +print (xc, tcl, argc, argv) +register XimClientPtr xc; +Tcl_Interp *tcl; +int argc; +char **argv; +{ + register XimDataPtr xim = xc->xim; + int x0, y0, nx, ny; + + /* Handle the special cases first. */ + if (argc == 4 && strcmp (argv[1], "rename") == 0) { + ximp_rename (xim, argv[2], argv[3]); + return (TCL_OK); + } else if (argc == 3 && strcmp (argv[1], "cancel") == 0) { + ximp_cancel (xim, argv[2]); + return (TCL_OK); + } + + /* Normal case of a print. */ + if (argc == 5) { + x0 = atoi (argv[1]); + y0 = atoi (argv[2]); + nx = atoi (argv[3]); + ny = atoi (argv[4]); + } else + x0 = y0 = nx = ny = 0; + + if (xim_print (xim, x0,y0, nx,ny) < 0) + return (TCL_ERROR); + else + return (TCL_OK); +} + + +/* Save -- Save the current display frame to a disk file. + * + * Usage: save [x0 y0 nx ny] + * + * save rename old new + * save cancel fname + * + * If a subregion is given the indicated region is saved, otherwise the + * full display frame is saved. + * + * The forms "save rename" and "save cancel" are actions for save alerts. + */ +static int +save (xc, tcl, argc, argv) +register XimClientPtr xc; +Tcl_Interp *tcl; +int argc; +char **argv; +{ + register XimDataPtr xim = xc->xim; + register fileSavePtr fsp = xim->fsp; + int x0, y0, nx, ny; + + /* Handle the special cases first. */ + if (argc == 4 && strcmp (argv[1], "rename") == 0) { + xims_rename (xim, argv[2], argv[3]); + return (TCL_OK); + } else if (argc == 3 && strcmp (argv[1], "cancel") == 0) { + xims_cancel (xim, argv[2]); + return (TCL_OK); + } + + if (argc == 5) { + x0 = atoi (argv[1]); + y0 = atoi (argv[2]); + nx = atoi (argv[3]); + ny = atoi (argv[4]); + } else + x0 = y0 = nx = ny = 0; + + /* Pass off to the file save routines. */ + if (xim_saveFile (xim, fsp->fname, fsp->format, x0,y0, nx,ny) < 0) + return (TCL_ERROR); + else + return (TCL_OK); +} + + +/* Load -- Load a frame from a disk file. + * + * Usage: load filename [frame] + * + * Options: frame display frame to be loaded + */ +static int +load (xc, tcl, argc, argv) +register XimClientPtr xc; +Tcl_Interp *tcl; +int argc; +char **argv; +{ + register int i; + register XimDataPtr xim = xc->xim; + register fileLoadPtr flp = xim->flp; + char *ip, *op, *fname; + char *flist, buf[SZ_LINE]; + struct stat file_info; + int frame; + + if (argc < 2) + return (TCL_ERROR); + + fname = argv[1]; + frame = (argc >= 3) ? atoi(argv[2]) : xim->display_frame; + + /* If given a directory change the directory browser current reference + * directory and get a listing. + */ + if (fname[strlen(fname)-1] == '/') { + fname[strlen(fname)-1] = '\0'; + if (fname[0] == '/') { + sprintf (flp->curdir, "%s", fname); + } else { + strcat (flp->curdir, "/"); + strcat (flp->curdir, fname); + } + sprintf (buf, "curdir %s", flp->curdir); + xim_message (xim, "loadOptions", buf); + + xim_dirRescan (xim); + + } else { + /* Otherwise it may be some kind of image to be loaded, but first + * check to see if it's not some other directory first. + */ + (void) stat (fname, &file_info); + if (S_ISDIR(file_info.st_mode)) { + sprintf (flp->curdir, "%s", fname); + sprintf (buf, "curdir %s", flp->curdir); + xim_message (xim, "loadOptions", buf); + xim_dirRescan (xim); + return (TCL_OK); + } + + /* It's not a directory, so try loading the file. */ + if (xim_loadFile (xim, fname, frame) != 0) + return (TCL_ERROR); + } + + return (TCL_OK); +} + + +/* Help -- Send the default help text (HTML) to the GUI. + * + * Usage: help + */ + +/* The builtin default help text. */ +static char *help_text[] = { + "setValue {", +# include "ximtool.html.h" + "}", + NULL +}; + +static int +help (xc, tcl, argc, argv) +register XimClientPtr xc; +Tcl_Interp *tcl; +int argc; +char **argv; +{ + register XimDataPtr xim = xc->xim; + register char *ip, *op, *helptxt; + register int i; + + helptxt = (char *) XtMalloc (1024000); + for (i=0, op=helptxt; ip = help_text[i]; i++) { + while (*ip) + *op++ = *ip++; + *op++ = '\n'; + } + *op++ = '\0'; + + ObmDeliverMsg (xim->obm, "help", helptxt); + XtFree ((char *)helptxt); + + return (TCL_OK); +} + + +/* Info -- Send various kinds of information to the GUI. The 'args' option + * allows us to pass in information from the GUI that cannot be easily + * obtained otherwise, e.g. private information inthe Gterm widget such as + * the basePixel resource. + * + * Usage: info option [ args ... ] + */ + +info (xc, tcl, argc, argv) +register XimClientPtr xc; +Tcl_Interp *tcl; +int argc; +char **argv; +{ + register XimDataPtr xim = xc->xim; + char line[SZ_LINE], path[80], *option, *message; + + if (argc < 2) + return (TCL_ERROR); + else + option = argv[1]; + + message = (char *) XtCalloc (8182, sizeof(char)); + + if (strcmp (option, "server") == 0) { + info_server (xim, argc, argv, message); + + } else if (strcmp (option, "wcs") == 0) { + info_wcs (xim, message); + + } else if (strcmp (option, "clients") == 0) { + info_clients (xim, message); + + } else if (strcmp (option, "imtoolrc") == 0) { + info_imtoolrc (xim, message); + + } else { + XtFree ((char *)message); + return (TCL_ERROR); + } + + strcat (message, "\n\0"); + + if (*message) + xim_message (xim, "info", message); + XtFree ((char *)message); + + return (TCL_OK); +} + + +/* INFO_SERVER -- Helper routine to report server state information. + */ +info_server (xim, argc, argv, text) +register XimDataPtr xim; +int argc; +char **argv; +char *text; +{ + extern char *ximtool_version[]; + extern int ncolormaps, first_color; + char cmapname[80], line[SZ_LINE]; + ColorMapPtr cm; + + sprintf (text, "\t%s\n\n", ximtool_version[0]); + + sprintf (line, "%20s: %s\n", "Base Pixel", + (argc >= 3 ? argv[2] :"")); + strcat (text, line); + sprintf (line, "%20s: %s\n", "Max Colors", + (argc >= 4 ? argv[3] :"")); + strcat (text, line); + sprintf (line, "%20s: %s\n", "Memory Model", xim->memModel); + strcat (text, line); + sprintf (line, "%20s: %s\n", "Antialias Type", xim->antialiasType); + strcat (text, line); + strcat (text, "\n"); + + cm = &colormaps[DEF_COLORMAP-1]; + strcpy (cmapname, cm->name); + sprintf (line, "%20s: %s\n", "Current Colormap", cmapname); + strcat (text, line); + sprintf (line, "%20s: %d\n", "Colormaps Available", ncolormaps); + strcat (text, line); + sprintf (line, "%20s: %s\n", "User Cmap 1", xim->userCMap1); + strcat (text, line); + sprintf (line, "%20s: %s\n", "User Cmap 2", xim->userCMap1); + strcat (text, line); + sprintf (line, "%20s: %s\n", "Cmap Dir 1", xim->userCMapDir1); + strcat (text, line); + sprintf (line, "%20s: %s\n", "Cmap Dir 2", xim->userCMapDir2); + strcat (text, line); + strcat (text, "\n"); + sprintf (line, "%20s: %s\n", "Printer Config", xim->printConfig); + strcat (text, line); + sprintf (line, "%20s: %s\n", "Printer File", xim->pcp->printFile); + strcat (text, line); + sprintf (line, "%20s: %s\n", "Printer Cmd", xim->pcp->printCmd); + strcat (text, line); +} + + +/* INFO_CLIENTS -- Helper routine to report client (display or ISM) state. + */ +info_clients (xim, text) +register XimDataPtr xim; +char *text; +{ + register IsmModule ism; + register int i; + char line[SZ_LINE], path[80]; + extern ismModule ism_modules[]; + extern int ism_nmodules; + + strcpy (text, "\t\tClient Communications Channels\n\n"); + + strcat (text, " Display Client Connections\t "); + strcat (text, "ISM Client Connections\n"); + strcat (text, " --------------------------\t "); + strcat (text, "----------------------\n"); + + if (xim->port) + sprintf (line, " inet: %d\t\t\t ", xim->port); + else + sprintf (line, " inet: Disabled\t\t"); + strcat (text, line); + + sprintf (path, xim->ism_addr, getuid()); + sprintf (line, "unix: %s\n", path); + strcat (text, line); + + if (strcmp(xim->unixaddr, "none") != 0) { + sprintf (path, xim->unixaddr, getuid()); + sprintf (line, " unix: %s\n", path); + } else + sprintf (line, " unix: Disabled\n"); + strcat (text, line); + + if (strcmp(xim->input_fifo,"") != 0 && + strcmp(xim->input_fifo,"none") != 0) + sprintf (line, " fifo: %s\n\t %s\n\n", + xim->input_fifo, xim->output_fifo); + else + sprintf (line, " fifo: Disabled\n\n"); + strcat (text, line); + + strcat (text, "\n"); + strcat (text, "\t\t Available ISM Components\n\n"); + strcat (text, " Name Channel Command\n"); + strcat (text, " ---- ------- -------\n"); + for (i=0; i < ism_nmodules; i++) { + ism = &ism_modules[i]; + sprintf (line, " %-9.9s %-15.15s '%s'\n", + ism->name, + (ism->connected ? ism->chan->path : "Disabled"), + ism->command); + strcat (text, line); + } +} + + +/* INFO_WCS -- Helper routine to report WCS and mapping information for + * each frame in the display. + */ +info_wcs (xim, text) +register XimDataPtr xim; +char *text; +{ + register FrameBufPtr fr = xim->df_p; + register CtranPtr ct = &fr->ctran; + register int i; + MappingPtr mp = (MappingPtr) NULL; + char line[SZ_LINE]; + + /* Write the current frame WCS. */ + sprintf (line, + "\t\tFrame %d WCS & Mappings\n\t\t------------------------\n\n", + fr->frameno); + strcat (text, line); + + strcat (text, "Frame WCS:\n"); + sprintf (line, " a = %9.3f\t b = %9.3f %s\n", + ct->a, ct->b, "# Scale factors"); + strcat (text, line); + + sprintf (line, " c = %9.3f\t d = %9.3f %s\n", + ct->c, ct->d, "# Cross factors"); + strcat (text, line); + + sprintf (line, " tx = %9.3f\tty = %9.3f %s\n", + ct->tx, ct->ty, "# Translation"); + strcat (text, line); + sprintf (line, " z1 = %9.3f\tz2 = %9.3f %s\n", + ct->z1, ct->z2, "# z-scale range"); + strcat (text, line); + + sprintf (line, " zt = %9s\t%30s\n", + (ct->zt == W_UNITARY ? "unitary" : + (ct->zt == W_LINEAR ? "linear" : + (ct->zt == W_LOG ? "log" : "unknown"))), + "# z-scale type\n"); + strcat (text, line); + + + fr = (FrameBufPtr) NULL; + for (i=0; i < xim->nframes; i++) { + fr = &xim->frames[i]; + if (xim->display_frame == fr->frameno) + break; + } + + if (!fr) { + strcat (text, " \n \n"); + return; + } + + for (i=0; i < fr->nmaps; i++) { + mp = &(fr->mapping[i]); + ct = &(mp->ctran); + + sprintf (line, "\nMapping %d: \n", mp->id); + strcat (text, line); + + sprintf (line, " a = %7.3f b = %7.3f\n", ct->a, ct->b); + strcat (text, line); + sprintf (line, " c = %7.3f d = %7.3f\n", ct->c, ct->d); + strcat (text, line); + sprintf (line, " tx = %7.3f ty = %7.3f\n", ct->tx, ct->ty); + strcat (text, line); + sprintf (line, " z1 = %7.3f z2 = %7.3f\tzt: %s\n", + ct->z1, ct->z2, + (ct->zt == W_UNITARY ? "unitary" : + (ct->zt == W_LINEAR ? "linear" : + (ct->zt == W_LOG ? "log" : "unknown"))) ); + strcat (text, line); + + sprintf (line, " region %d: %s\n", mp->regid, mp->region); + strcat (text, line); + sprintf (line, " src: x=%9f y=%9f nx=%d ny=%d\n", + mp->sx, mp->sy, mp->snx, mp->sny); + strcat (text, line); + sprintf (line, " dest: x=%9d y=%9d nx=%d ny=%d\n", + mp->dx, mp->dy, mp->dnx, mp->dny); + + strcat (text, line); + sprintf (line, " ref: %s\n", mp->ref); + strcat (text, line); + } + strcat (text, " \n \n"); +} + + +/* INFO_IMTOOLRC -- Helper routine to report the frame buffer configuration + * table. + */ +info_imtoolrc (xim, text) +register XimDataPtr xim; +char *text; +{ + register int last_fb_used = MAX_FBCONFIG; + register int i, w, h, nf, fb_config = xim->fb_configno; + char line[SZ_LINE]; + + strcpy (text, " Frame Buffer Configuration Table\n"); + strcat (text, " --------------------------------\n\n"); + + sprintf (line, " Imtoolrc File: %s\n", xim->imtoolrc); + strcat (text, line); + strcat (text, "\n Config NFrames\tWidth\tHeight\n"); + strcat (text, " ------ -------\t-----\t------\n"); + + /* Find the index of the last FB defined. */ + for (i=MAX_FBCONFIG; i > 1; i--) + if (xim->fb_config[i-1].width != DEF_FRAME_WIDTH || + xim->fb_config[i-1].height != DEF_FRAME_HEIGHT) { + last_fb_used = i; + break; + } + + /* Print out the frame buffer configurations. */ + for (i=1; i <= last_fb_used; i++) { + w = xim->fb_config[i-1].width; + h = xim->fb_config[i-1].height; + nf = xim->fb_config[i-1].nframes; + if (i > 1 && (w == DEF_FRAME_WIDTH && h == DEF_FRAME_HEIGHT)) { + sprintf (line, " %4d\t\t 0\t n/a\t n/a\n", i); + } else { + sprintf (line, " %4d\t\t%2d\t%5d\t%5d\t %s\n", + i, nf, w, h, ((i==fb_config) ? "<--- current" : " ")); + } + strcat (text, line); + } + strcat (text, " \n \n"); +} + + +/* windowRGB -- Window an individual component of an RGB colormap. We start + * with the currently defined cmap and scale it's component by the given + * offset and slope. A 'save' flag is set when the button is released meaning + * the user is done with that component and the loaded colormap is updated, + * otherwise continue changing that color from the previous call allowing us + * to window the color progressively. The GUI's 'initialize' option should + * restore the original colormap. [This is still test code.] + * + * Usage: windowRGB + * + * Options: color color to manipulate (1=Red,2=Green,3=Blue) + * offset offset of transformation + * scale slope of transformation + * save save to loaded colormap when complete? + */ + +static int +windowRGB (xc, tcl, argc, argv) +register XimClientPtr xc; +Tcl_Interp *tcl; +int argc; +char **argv; +{ + register XimDataPtr xim = xc->xim; + register FrameBufPtr fb = xim->df_p; + register ColorMapPtr cm; + int color, first, nelem, maxelem, save = 0; + unsigned short r[MAX_COLORS]; + unsigned short g[MAX_COLORS]; + unsigned short b[MAX_COLORS]; + char buf[SZ_LINE]; + + + if (argc > 1) { + cm = &colormaps[fb->colormap-1]; + color = atoi(argv[1]); + fb->offset = atof(argv[2]); + fb->scale = (argc > 2) ? (float)atof(argv[3]) : fb->scale; + save = atoi(argv[4]); + + /* Query and read the current colormap. */ + GtQueryColormap (xim->gt, cm->mapno, &first, &nelem, &maxelem); + GtReadColormap (xim->gt, cm->mapno, first, nelem, r,g,b); + + /* compute the scaled colormap, scaling only the color we're + * interested in. + */ + switch (color) { + case 1: + cmapScale (r, nelem, first, fb->offset, fb->scale); + break; + case 2: + cmapScale (g, nelem, first, fb->offset, fb->scale); + break; + case 3: + cmapScale (b, nelem, first, fb->offset, fb->scale); + break; + } + + /* Lastly, write it back to the widget. */ + GtWriteColormap (xim->gt, 0, first, nelem, r, g, b); + if (save) + GtWriteColormap (xim->gt, cm->mapno, first, nelem, r, g, b); + } + + return (TCL_OK); +} + + +/* cmapScale -- Given a single-color cmap scale it with the given offset and + * slope, the scaling is done in place. + */ + +cmapScale (map, ncells, first, offset, slope) +unsigned short map[MAX_COLORS]; +int ncells, first; +float offset, slope; +{ + register int i, c1, c2; + register float x, y, z, frac; + unsigned short val, out[MAX_COLORS]; + + for (i=0; i < ncells; i++) { + x = (float)i / (float)(ncells - 1); + y = (x - offset) * slope + 0.5; + + if (y <= 0.0) { + val = map[first]; + } else if (y >= 1.0) { + val = map[ncells-1]; + } else { + z = y * (ncells - 1); + c1 = (int)z; + c2 = min (ncells-1, c1 + 1); + frac = z - c1; + val = map[c1] * (1.0 - frac) + map[c2] * frac; + } + + out[i] = val; + } + + for (i=0; i < MAX_COLORS; i++) + map[i] = out[i]; +} + + + +/* ISM_START -- Start the ISM task. The named task must be listed in + * the array of ISM modules. + * + * Usage: ism_start task + */ +static int +ism_start (xc, tcl, argc, argv) +register XimClientPtr xc; +Tcl_Interp *tcl; +int argc; +char **argv; +{ + register IsmModule ism; + + if (argc < 2) + return (TCL_ERROR); + + /* Lookup the command for the task and start it. + */ + if ((ism = ismNameToPtr (argv[1]))) { + system (ism->command); + return (TCL_OK); + } + + /* Task not found, return an error. */ + return (TCL_ERROR); +} + + +/* ISM_STOP -- Stop the ISM task. The named task is told to shut itself + * down by executing the registered shutdown callback. We return OK if + * the shutdown can be executed, an ERR is returned if the named task is + * not currently running. + * + * Usage: ism_stop task + */ +static int +ism_stop (xc, tcl, argc, argv) +register XimClientPtr xc; +Tcl_Interp *tcl; +int argc; +char **argv; +{ + register XimDataPtr xim = xc->xim; + register IsmModule ism; + + if (argc < 2) + return (TCL_ERROR); + + /* Lookup the command for the task and stop it. */ + if ((ism = ismNameToPtr (argv[1]))) { + (*ism->shutdownCB) (xim, ism); + ism->connected = 0; + return (TCL_OK); + } + + /* Task not found, return an error. */ + return (TCL_ERROR); +} + + +/* ISM_CMD -- Send a command to the named ISM command callback. Return + * values are sent as messages to the GUI 'ism_msg' parameter object, we + * simply pass the argv to the appropriate function. + * + * Usage: ism_cmd task + */ +static int +ism_cmd (xc, tcl, argc, argv) +register XimClientPtr xc; +Tcl_Interp *tcl; +int argc; +char **argv; +{ + register XimDataPtr xim = xc->xim; + register IsmModule ism; + char **cmd_argv; + int cmd_argc; + + if (argc < 2) + return (TCL_ERROR); + + /* Lookup the command callback for the task and run it. */ + if ((ism = ismNameToPtr (argv[1]))) { + + /* Get local copy of argc and argv containing only the commands + * for the ISM callback. + */ + if ((cmd_argc = (argc - 2) > 0)) { + cmd_argv = (char **) XtMalloc (cmd_argc * sizeof(char *)); + memmove (cmd_argv, &argv[2], cmd_argc * sizeof(char *)); + } + + /* Process the command. */ + (*ism->commandCB) (xim, ism, cmd_argc, cmd_argv); + return (TCL_OK); + } + + /* Task not found, return an error. */ + return (TCL_ERROR); +} diff --git a/vendor/x11iraf/ximtool/ximprint.cfg b/vendor/x11iraf/ximtool/ximprint.cfg new file mode 100644 index 00000000..e552f2cd --- /dev/null +++ b/vendor/x11iraf/ximtool/ximprint.cfg @@ -0,0 +1,30 @@ +default lpr +clp lpr -Pclp +clp2 lpr -Pclp2 +clp2t lpr -Pclp2t +lw1 lpr -Plw1 +lw2 lpr -Plw2 +lw2 lpr -Plw3 +lw4 lpr -Plw4 +lw5 lpr -Plw5 +lw6 lpr -Plw6 +lw7 lpr -Plw7 +lw8 lpr -Plw8 +lw9 lpr -Plw9 +lw10 lpr -Plw10 +lw11 lpr -Plw11 +lw12 lpr -Plw12 +lw13 lpr -Plw13 +lw14 lpr -Plw14 +lw15 lpr -Plw15 +lw16 lpr -Plw16 +lw18 lpr -Plw18 +lw19 lpr -Plw19 +lw20 lpr -Plw20 +lw21 lpr -Plw21 +lw22 lpr -Plw22 +lw23 lpr -Plw23 +lw24 lpr -Plw24 +lw25 lpr -Plw25 +lw26 lpr -Plw26 +lw27 lpr -Plw27 diff --git a/vendor/x11iraf/ximtool/ximtool-alt.csh b/vendor/x11iraf/ximtool/ximtool-alt.csh new file mode 100755 index 00000000..631723ef --- /dev/null +++ b/vendor/x11iraf/ximtool/ximtool-alt.csh @@ -0,0 +1,98 @@ +#!/bin/csh -f +# +# XIMTOOL-ALT -- Script wrapper to start XImtool using the alternate GUI. +# The GUI file is contained is this script which is created when the system +# is built, it may be used to run any alternate GUI by simply replacing the +# Tcl script making up the GUI at the end of this script or by using the +# "-gui" command line flag. The only configurable item is the path to the +# XImtool binary to be used, by default the one found in the user's path will +# be used. +# Arguments specific to this GUI include: +# +# -showToolBar show toolbar on startup +# -showPanelBar show panelbar on startup +# +#---------------------------------------------------------------------------- + +# Configurable parameters +set XIMTOOL = ximtool # Path to default ximtool binary + + +#------------------------------------------------------------------ +#--------------- Do not modify below this line -------------------- +#------------------------------------------------------------------ +unset noclobber +onintr cleanup + +set SKIP = 99 # offset to GUI file + +# Dump the GUI from this script file. +tail +$SKIP $0 > /tmp/_gui.$$ + +# Check for no arguments. +set q = '"' +set cmd = "-gui /tmp/_gui.$$ -title $q XImtool V1.3 - Alternative GUI $q" + +# Process the script arguments, quoting args when necessary. +if ($#argv > 0) then + while ("$1" != "") + if ("$1" == "-xrm") then + if ("$2" != "") then + shift + else + echo "missing argument to '-xrm ' switch" + exit 1 + endif + set cmd = "$cmd -xrm $q$1$q" + else if ("$1" == "-help") then + $XIMTOOL -help + exit 0 + else if ("$1" == "-defgui") then + tail +$SKIP $0 + exit 0 + else if ("$1" == "-showToolBar") then + if ("$2" != "") then + shift + else + echo "missing argument to '-showToolBar ' switch" + exit 1 + endif + set cmd = "$cmd -xrm $q XImtool.showToolBar:$1$q" + else if ("$1" == "-showPanelBar") then + if ("$2" != "") then + shift + else + echo "missing argument to '-showPanelBar ' switch" + exit 1 + endif + set cmd = "$cmd -xrm $q XImtool.showPanelBar:$1$q" + else + set cmd = "$cmd $1" + endif + + if ("$2" == "") then + break + else + shift + endif + end +endif + +# Run the command. +echo "$XIMTOOL $cmd ; /bin/rm -f /tmp/_gui*.$$" > /tmp/_gui.cmds.$$ +sh /tmp/_gui.cmds.$$ +exit 0 + +cleanup: + /bin/rm -f /tmp/_gui*.$$ + exit 0 + +#-------------------------------------------------------------------------- +#-------------------------- XIMTOOL-ALT.GUI ------------------------------- +#------ ------ +#------ To change the GUI run by this script just delete everything ------ +#------ below here and replace with the new GUI Tcl script. ------ +#------ ------ +#-------------------------------------------------------------------------- +#-------------------------------------------------------------------------- + diff --git a/vendor/x11iraf/ximtool/ximtool-alt.gui b/vendor/x11iraf/ximtool/ximtool-alt.gui new file mode 120000 index 00000000..ef8416c6 --- /dev/null +++ b/vendor/x11iraf/ximtool/ximtool-alt.gui @@ -0,0 +1 @@ +ximtool.gui \ No newline at end of file diff --git a/vendor/x11iraf/ximtool/ximtool-old.csh b/vendor/x11iraf/ximtool/ximtool-old.csh new file mode 100755 index 00000000..37e859aa --- /dev/null +++ b/vendor/x11iraf/ximtool/ximtool-old.csh @@ -0,0 +1,78 @@ +#!/bin/csh -f +# +# XIMTOOL-OLD -- Script wrapper to start XImtool using the original GUI. +# The GUI file is contained is this script which is created when the system +# is built, it may be used to run any alternate GUI by simply replacing the +# Tcl script making up the GUI at the end of this script or by using the +# "-gui" command line flag. The only configurable item is the path to the +# XImtool binary to be used, by default the one found in the user's path will +# be used. +# +#---------------------------------------------------------------------------- + +# Configurable parameters +set XIMTOOL = ximtool # Path to default ximtool binary + + +#------------------------------------------------------------------ +#--------------- Do not modify below this line -------------------- +#------------------------------------------------------------------ +unset noclobber +onintr cleanup + +set SKIP = 79 # offset to GUI file + +# Dump the GUI from this script file. +tail +$SKIP $0 > /tmp/_gui.$$ + +# Check for no arguments. +set q = '"' +set cmd = "-gui /tmp/_gui.$$ -title $q XImtool V1.4 - Original GUI $q" + +# Process the script arguments, quoting args when necessary. +if ($#argv > 0) then + while ("$1" != "") + if ("$1" == "-xrm") then + if ("$2" != "") then + shift + else + echo "missing argument to '-xrm ' switch" + exit 1 + endif + set cmd = "$cmd -xrm $q$1$q" + else if ("$1" == "-help") then + $XIMTOOL -help + exit 0 + else if ("$1" == "-defgui") then + tail +$SKIP $0 + exit 0 + else + set cmd = "$cmd $1" + endif + + if ("$2" == "") then + break + else + shift + endif + end +endif + +# Run the command. +echo "$XIMTOOL $cmd ; /bin/rm -f /tmp/_gui*.$$" > /tmp/_gui.cmds.$$ +sh /tmp/_gui.cmds.$$ +exit 0 + +cleanup: + /bin/rm -f /tmp/_gui*.$$ + exit 0 + +#-------------------------------------------------------------------------- +#-------------------------- XIMTOOL-OLD.GUI ------------------------------- +#------ ------ +#------ To change the GUI run by this script just delete everything ------ +#------ below here and replace with the new GUI Tcl script. ------ +#------ ------ +#-------------------------------------------------------------------------- +#-------------------------------------------------------------------------- + diff --git a/vendor/x11iraf/ximtool/ximtool-old.gui b/vendor/x11iraf/ximtool/ximtool-old.gui new file mode 100644 index 00000000..9ffde34a --- /dev/null +++ b/vendor/x11iraf/ximtool/ximtool-old.gui @@ -0,0 +1,10873 @@ +#!/usr/local/bin/obmsh +# +# XIMTOOL.GUI -- Default GUI for the Ximtool image display server. +# +# Version 2.0 -- BETA VERSION + + +set Version "NOAO/IRAF XImtool Version 2.0BETA" + + +reset-server + +set Objects(ximtool) { \ + toplevel Layout display \ +\ + display Group menuGroup\ + menuGroup Layout menubar\ + menubar MenuButton fileButton \ + menubar MenuButton viewButton \ + menubar MenuButton optionsButton \ + menubar Label imageTitle \ + menubar Toggle controlButton \ + menubar Toggle xflipButton \ + menubar Toggle yflipButton \ + menubar Command prevButton \ + menubar MenuButton frameButton \ + menubar Command nextButton \ + menubar Toggle helpButton \ +\ + display Frame imageFrame\ + imageFrame Gterm imagewin\ + display Frame cbarFrame\ + cbarFrame Gterm colorbar\ + display Toggle hcut\ + display Toggle vcut\ + display Frame hcutFrame\ + hcutFrame Gterm hcutPlot\ + display Frame vcutFrame\ + vcutFrame Gterm vcutPlot\ + display Slider2d focusSlider\ +\ + display Group plotOpts\ + plotOpts Layout poptsLayout\ + poptsLayout TextToggle plotSpeed\ + poptsLayout TextToggle plotAccurate\ + poptsLayout TextToggle plotImgPix\ + poptsLayout Frame optLine\ + poptsLayout TextToggle curJump\ + poptsLayout TextToggle curSmooth\ + poptsLayout TextToggle curTrack\ +} + + +set Objects(panelShell) { \ + toplevel TopLevelShell panelShell\ + panelShell Layout panel\ +\ + panel Frame panelMenuFrame\ + panelMenuFrame Layout panelMenuBar\ + panelMenuBar Command panelHelp\ + panelMenuBar Command panelClose\ +\ + panel Frame tabFrame\ + tabFrame Tabs panelTabs\ + panelTabs Frame display_panel\ + panelTabs Frame print_panel\ + panelTabs Frame load_panel\ + panelTabs Frame save_panel\ + panelTabs Frame info_panel\ + panelTabs Frame tile_panel\ + panelTabs Frame wcs_panel\ +\ +\ + display_panel Layout controlPanel\ + controlPanel Group viewBox\ + controlPanel Group enhancementBox\ + controlPanel Group blinkBox\ + controlPanel Group optionsBox\ + controlPanel Frame controlBox\ +\ + viewBox Layout view\ + view Group frameSelect\ + frameSelect Layout frameBox\ + frameBox Box frlistBox\ + frlistBox Viewport framePort\ + framePort Layout frameList\ + frameList TextToggle frame1\ + frameList TextToggle frame2\ + frameList TextToggle frame3\ + frameList TextToggle frame4\ + frameList TextToggle frame5\ + frameList TextToggle frame6\ + frameList TextToggle frame7\ + frameList TextToggle frame8\ + frameList TextToggle frame9\ + frameList TextToggle frame10\ + frameList TextToggle frame11\ + frameList TextToggle frame12\ + frameList TextToggle frame13\ + frameList TextToggle frame14\ + frameList TextToggle frame15\ + frameList TextToggle frame16\ + frameBox Command prevFrame\ + frameBox Command nextFrame\ + view Frame frameDataBox\ + frameDataBox TextBox frameData\ + view Group zoomBox\ + zoomBox Layout zoom\ + zoom TextButton toggleZoom\ + zoom TextButton zoomIn\ + zoom Command x1\ + zoom Command z2\ + zoom Command z3\ + zoom Command z4\ + zoom Command z5\ + zoom Command z8\ + zoom TextButton zoomOut\ + zoom TextButton centerFrame\ + zoom Command d2\ + zoom Command d3\ + zoom Command d4\ + zoom Command d5\ + zoom Command d8\ + view Layout viewButtons\ + viewButtons Command aspect\ + viewButtons Command flipX\ + viewButtons Command flipY\ + viewButtons Command flipXY\ + viewButtons Command clearFrame\ + viewButtons Command fitFrame\ +\ + enhancementBox Layout enhance\ + enhance Frame colorlistFrame\ + colorlistFrame Viewport colorlistView\ + colorlistView MultiList colorlist\ + enhance Frame colordataFrame\ + colordataFrame TextBox colordata\ + enhance Label contrastLabel\ + enhance Slider2d contrastSlider\ + enhance Label brightnessLabel\ + enhance Slider2d brightnessSlider\ + enhance Command invertButton\ + enhance Command optimizeButton\ +\ + blinkBox Layout blink\ + blink Label blinkFramesLabel\ + blink Command blinkFrame1\ + blink Command blinkFrame2\ + blink Command blinkFrame3\ + blink Command blinkFrame4\ + blink Toggle blinkPanel\ + blink Command blinkReset\ + blink Label blinkRateLabel\ + blink Frame BRframe\ + BRframe Layout BRlayout\ + BRlayout Arrow BRdecrease\ + BRlayout TextBox BRtext\ + BRlayout Arrow BRincrease\ + blink Command registerButton\ + blink Command matchButton\ + blink TextToggle blinkButton\ + blink TextToggle autoregButton\ +\ + optionsBox TextToggle pannerButton\ + optionsBox TextToggle magnifierButton\ + optionsBox TextToggle coordsBoxButton\ + optionsBox TextToggle autoscaleButton\ + optionsBox TextToggle antialiasButton\ + optionsBox TextToggle tileFramesButton\ + optionsBox TextToggle warningsButton\ + optionsBox TextToggle peakupButton\ +\ + controlBox Layout control\ + control Command initializeButton\ + control Command normalizeButton\ +\ +\ + print_panel Layout printLayout\ +\ + printLayout Group printCmdGroup\ + printLayout Group optGroup\ + printLayout Group cmdGroup\ +\ + printCmdGroup Layout printCmdLayout\ + printCmdLayout Layout labelLayout\ + labelLayout Label toLabel\ + labelLayout Label printerLabel\ + printCmdLayout Layout inputLayout\ + inputLayout TextToggle toPrinter\ + inputLayout TextToggle toFile\ + inputLayout Frame printcmdFrame\ + printcmdFrame AsciiText printcmd\ +\ + optGroup Layout optLayout\ + optLayout Group epsPageGroup\ + optLayout Group optionsGroup\ + optLayout Group printColorGroup\ + optLayout Group printerGroup\ + optLayout Group annOptsGroup\ +\ + epsPageGroup Layout epsPage\ + epsPage Label epsOrientLabel\ + epsPage TextToggle epsPortButton\ + epsPage TextToggle epsLandButton\ + epsPage TextToggle epsSquareButton\ + epsPage Label epsSizeLabel\ + epsPage TextToggle epsLetterButton\ + epsPage TextToggle epsLegalButton\ + epsPage TextToggle epsA4Button\ + epsPage TextToggle epsB5Button\ + epsPage Label epsScaleLabel\ + epsPage Frame ScaleFrame\ + ScaleFrame Layout ScaleLayout\ + ScaleLayout Arrow SCdecrease\ + ScaleLayout TextBox SCtext\ + ScaleLayout Arrow SCincrease\ +\ + optionsGroup Layout options\ + options TextToggle epsscaleButton\ + options TextToggle autorotateButton\ + options TextToggle aspectButton\ + options TextToggle compressButton\ +\ + annOptsGroup Layout annOpts\ + annOpts TextToggle annotateButton\ + annOpts TextToggle colorbarButton\ + annOpts TextToggle titleButton\ + annOpts TextToggle bordersButton\ + annOpts Label titleLabel\ + annOpts Frame titleFrame\ + titleFrame AsciiText titleString\ +\ + printColorGroup Layout printColor\ + printColor TextToggle prGrayButton\ + printColor TextToggle prPseudoButton\ + printColor TextToggle prRGBButton\ +\ + printerGroup Layout printers\ + printers Frame printlistFrame\ + printlistFrame Viewport printlistView\ + printlistView MultiList printlist\ +\ + cmdGroup Layout cmdLayout\ + cmdLayout Command okayPrint\ + cmdLayout Label printStatus\ +\ +\ + load_panel Layout filesLayout\ + filesLayout Group imlistGroup\ + imlistGroup Layout imlistLayout\ + imlistLayout Command rootButton\ + imlistLayout Command homeButton\ + imlistLayout Command upButton\ + imlistLayout Command rescanButton\ + imlistLayout Label dirLabel\ + imlistLayout Label fnameLabel\ + imlistLayout Frame filnamFrame\ + filnamFrame AsciiText fnameText\ + imlistLayout Label imtemplateLabel\ + imlistLayout Frame imtemplateFrame\ + imtemplateFrame AsciiText imtemplateText\ + imlistLayout Label imlistLabel\ + imlistLayout Frame imlistFrame\ + imlistFrame Viewport imlistView\ + imlistView MultiList imageList\ +\ + filesLayout Group imoptsGroup\ + imoptsGroup Layout imoptsLayout\ + imoptsLayout TextToggle grayscale\ + imoptsLayout TextToggle autoload\ + imoptsLayout TextToggle browseHdrs\ + imoptsLayout TextToggle zscale\ + imoptsLayout TextToggle zrange\ + imoptsLayout Label z1Label\ + imoptsLayout Frame z1Frame\ + z1Frame AsciiText z1Value\ + imoptsLayout Label z2Label\ + imoptsLayout Frame z2Frame\ + z2Frame AsciiText z2Value\ + imoptsLayout Label nsampLabel\ + imoptsLayout Frame nsampFrame\ + nsampFrame AsciiText nsampValue\ + imoptsLayout Label frameLabel\ + imoptsLayout MenuButton frameFrame\ +\ + filesLayout Group loadCmdGroup\ + loadCmdGroup Layout loadCmdLayout\ + loadCmdLayout Command filesLoadButton\ + loadCmdLayout Label filesStatus\ +\ +\ + save_panel Layout saveLayout\ + saveLayout Group saveNameGroup\ + saveNameGroup Layout saveNameLayout\ + saveNameLayout Label saveLabel\ + saveNameLayout Frame fnameFrame\ + fnameFrame AsciiText saveFile\ +\ + saveLayout Group saveOptGroup\ + saveOptGroup Layout saveOptLayout\ + saveOptLayout Group fmtGroup\ + saveOptLayout Group saveColorGroup\ + saveOptLayout Frame saveDataBox\ + saveDataBox TextBox saveData\ +\ + fmtGroup Layout formats\ + formats TextToggle rasButton\ + formats TextToggle gifButton\ + formats TextToggle jpegButton\ + formats TextToggle tiffButton\ + formats TextToggle fitsButton\ + formats TextToggle epsButton\ + formats TextToggle x11Button\ + formats TextToggle rawButton\ +\ + saveColorGroup Layout saveColor\ + saveColor TextToggle svGrayButton\ + saveColor TextToggle svPseudoButton\ + saveColor TextToggle svRGBButton\ +\ + saveLayout Group saveCmdGroup\ + saveCmdGroup Layout saveCmdLayout\ + saveCmdLayout Command okaySave\ + saveCmdLayout Label saveStatus\ +\ +\ + info_panel Layout infoLayout\ + infoLayout Group infoBox\ + infoBox Layout infoBoxL\ + infoBoxL Frame infoFrame\ + infoFrame AsciiText infoText\ + infoBoxL TextToggle infoOptFr\ + infoBoxL TextToggle infoOptWCS\ + infoBoxL TextToggle infoOptSvr\ + infoBoxL TextToggle infoOptClients\ + infoBoxL TextToggle infoOptIsm\ + infoBoxL TextToggle infoOptFB\ +\ +\ + wcs_panel Layout wcsLayout\ + wcsLayout Group wcsGroup\ + wcsGroup Layout wcsBox\ +\ + wcsBox Frame wcsFrame\ + wcsFrame Layout wcsText\ + wcsText AsciiText wtName\ + wcsText AsciiText wtTitle\ + wcsText AsciiText wtFBCfg\ + wcsText AsciiText wtIPixval\ + wcsText AsciiText wtSPixval\ + wcsText AsciiText wtBPixval\ + wcsText AsciiText wtWcs1\ + wcsText AsciiText wtWcs2\ + wcsText AsciiText wtWcs3\ + wcsText AsciiText wtWcs4\ +\ + wcsBox TextToggle ismToggle\ + wcsBox TextToggle pixelTable\ + wcsBox TextToggle imageHeader\ + wcsBox TextToggle compass\ + wcsBox TextToggle wcsOptions\ +\ +\ + wcsLayout Group wcsOptGroup\ + wcsOptGroup Layout wcsOptLayout\ +\ + wcsOptLayout Group wcsCoords\ + wcsCoords Layout wcLayout\ + wcLayout Label wcTitle\ + wcLayout Frame wcLine\ + wcLayout Label wlWcs1\ + wcLayout Label wlWcs2\ + wcLayout Label wlWcs3\ + wcLayout Label wlWcs4\ + wcLayout MenuButton sysWcs1\ + wcLayout MenuButton sysWcs2\ + wcLayout MenuButton sysWcs3\ + wcLayout MenuButton sysWcs4\ + wcLayout MenuButton fmtWcs1\ + wcLayout MenuButton fmtWcs2\ + wcLayout MenuButton fmtWcs3\ + wcLayout MenuButton fmtWcs4\ + wcLayout TextToggle wpWcs1\ + wcLayout TextToggle wpWcs2\ + wcLayout TextToggle wpWcs3\ + wcLayout TextToggle wpWcs4\ + wcLayout TextToggle wiWcs1\ + wcLayout TextToggle wiWcs2\ + wcLayout TextToggle wiWcs3\ + wcLayout TextToggle wiWcs4\ +\ + wcsOptLayout Group wcsOpts\ + wcsOpts Layout woLayout\ + woLayout TextToggle woptLabels\ + woLayout TextToggle woptTitles\ + woLayout TextToggle woptFBinfo\ + woLayout TextToggle woptBPM\ +\ + wcsOptLayout Group wcsIsmGroup\ + wcsIsmGroup Layout wcsIsmLayout\ + wcsIsmLayout Label wcsIsmLabel\ + wcsIsmLayout Frame wcsIsmFrame\ + wcsIsmFrame AsciiText wcsIsmCmd\ + wcsIsmLayout Command wcsIsmInit\ +\ +\ + tile_panel Frame tileOpts\ + tileOpts Layout toptLayout\ + toptLayout Group tFramesG\ + toptLayout Group tileMode\ + tileMode TextToggle tileDisabled\ + tileMode TextToggle tileManual\ + tileMode TextToggle tileBest\ + tileMode TextToggle tileSquare\ + tileMode TextToggle tileHorizontal\ + tileMode TextToggle tileVertical\ + tileMode TextToggle tileRow\ + tileMode TextToggle tileCol\ + toptLayout Group userOrientG\ + toptLayout Group fillStyle\ + fillStyle TextToggle byCols\ + fillStyle TextToggle bottomUp\ + toptLayout Group tileLabel\ + tileLabel TextToggle labelImname\ + tileLabel TextToggle labelTitles\ + tileLabel TextToggle labelFrames\ + toptLayout Frame geomFrame\ + geomFrame Label tileGeometry\ +\ + userOrientG Layout userOrientL\ + userOrientL Label nrowLab\ + userOrientL Frame nrFrame\ + nrFrame Layout nrLayout\ + nrLayout Arrow nrdecrease\ + nrLayout Label nrtext\ + nrLayout Arrow nrincrease\ + userOrientL Label ncolLab\ + userOrientL Frame ncFrame\ + ncFrame Layout ncLayout\ + ncLayout Arrow ncdecrease\ + ncLayout Label nctext\ + ncLayout Arrow ncincrease\ +\ + tFramesG Layout tFrames\ + tFrames Command tAll\ + tFrames Command tNone\ + tFrames Toggle tFrame1\ + tFrames Toggle tFrame2\ + tFrames Toggle tFrame3\ + tFrames Toggle tFrame4\ + tFrames Toggle tFrame5\ + tFrames Toggle tFrame6\ + tFrames Toggle tFrame7\ + tFrames Toggle tFrame8\ + tFrames Toggle tFrame9\ + tFrames Toggle tFrame10\ + tFrames Toggle tFrame11\ + tFrames Toggle tFrame12\ + tFrames Toggle tFrame13\ + tFrames Toggle tFrame14\ + tFrames Toggle tFrame15\ + tFrames Toggle tFrame16\ +} + + +set Objects(parameters) { \ + toplevel Parameter ximtool\ + ximtool Parameter alert\ + ximtool Parameter initialize\ + ximtool Parameter resize\ + ximtool Parameter frame\ + ximtool Parameter nframes\ + ximtool Parameter frameSize\ + ximtool Parameter frameRegion\ + ximtool Parameter frameView\ + ximtool Parameter frameTitle\ + ximtool Parameter frameFit\ + ximtool Parameter enhancement\ + ximtool Parameter colortables\ + ximtool Parameter cmfocus\ + ximtool Parameter autoscale\ + ximtool Parameter antialias\ + ximtool Parameter tileFrames\ + ximtool Parameter cursorMode\ + ximtool Parameter xflip\ + ximtool Parameter yflip\ + ximtool Parameter printerList\ + ximtool Parameter printOptions\ + ximtool Parameter loadOptions\ + ximtool Parameter saveOptions\ + ximtool Parameter tileOptions\ + ximtool Parameter filelist\ + ximtool Parameter help\ + ximtool Parameter info\ + ximtool Parameter ism_msg\ +} + + +set Objects(help_panel) { \ + toplevel TopLevelShell help_panel\ + help_panel Layout helpLayout\ + helpLayout Group helpMenuGroup\ + helpMenuGroup Layout helpMenubar\ + helpLayout Layout helpInfoLayout\ +\ + helpMenubar Command helpClose\ +\ + helpLayout Command helpBack\ + helpLayout Command helpForward\ + helpLayout Command helpHome\ + helpLayout Frame hfFrame\ + hfFrame AsciiText hfEntry\ + helpLayout Command hfFind\ + helpLayout Command hfClear\ + helpLayout Frame helpTextFrame\ + helpTextFrame HTML helpText\ +\ + helpInfoLayout Label helpIRAFLogo\ + helpInfoLayout Label helpInfo1\ + helpInfoLayout Label helpInfo2\ + helpInfoLayout Label helpInfo3\ + helpInfoLayout Label helpNOAOLogo\ +} + + +set Objects(blink_panel) { \ + toplevel TopLevelShell blink_panel\ + blink_panel Layout bpLayout\ +\ + bpLayout Frame brMenuFrame\ + brMenuFrame Layout brMenuBar\ + brMenuBar Command brClose\ +\ + bpLayout Frame brFrame\ + brFrame Layout brLayout\ +\ + brLayout Group brFramesG\ + brFramesG Layout brFrames\ + brFrames MenuButton brFrame1\ + brFrames MenuButton brFrame2\ + brFrames MenuButton brFrame3\ + brFrames MenuButton brFrame4\ + brFrames MenuButton brFrame5\ + brFrames MenuButton brFrame6\ + brFrames MenuButton brFrame7\ + brFrames MenuButton brFrame8\ + brFrames MenuButton brFrame9\ + brFrames MenuButton brFrame10\ + brFrames MenuButton brFrame11\ + brFrames MenuButton brFrame12\ + brFrames MenuButton brFrame13\ + brFrames MenuButton brFrame14\ + brFrames MenuButton brFrame15\ + brFrames MenuButton brFrame16\ +\ + brLayout Group brCmdG\ + brCmdG Layout brCmd\ + brCmd Command brReset\ + brCmd Label brRateLabel\ + brCmd Frame brBRframe\ + brBRframe Layout brBRlayout\ + brBRlayout Arrow brBRdecrease\ + brBRlayout TextBox brBRtext\ + brBRlayout Arrow brBRincrease\ + brCmd Command brRegButton\ + brCmd Command brMatchButton\ + brCmd TextToggle brBlinkButton\ + brCmd TextToggle brAregButton\ +} + + +set Objects(hdr_panel) { \ + toplevel TopLevelShell hdr_panel\ + hdr_panel Layout hdrLayout\ +\ + hdrLayout Frame hdrMenuFrame\ + hdrMenuFrame Layout hdrMenuBar\ + hdrMenuBar Command hdrClose\ +\ + hdrLayout Group hdrObjGroup\ + hdrObjGroup Layout hdrObjLayout\ + hdrObjLayout Label hdrObjLabel\ + hdrObjLayout MenuButton hdrObjMenu\ +\ + hdrLayout Frame hdrTabFrame\ + hdrTabFrame Tabs hdrTabs\ + hdrTabs Group hdrHdrGroup\ + hdrTabs Group hdrWcsGroup\ +\ + hdrHdrGroup Layout hdrHdrLayout\ + hdrHdrLayout Frame hFindFrame\ + hFindFrame AsciiText hFindEntry\ + hdrHdrLayout Command hdrFilter\ + hdrHdrLayout Command hdrFind\ + hdrHdrLayout Command hdrClear\ + hdrHdrLayout HTML hdrText\ +\ + hdrWcsGroup Layout hdrWcsLayout\ + hdrWcsLayout Group hdrInfoGroup\ + hdrInfoGroup Frame hdrIGFrame\ + hdrIGFrame AsciiText hdrIGText\ + hdrWcsLayout Group hdrKeywGroup\ + hdrKeywGroup Frame hdrKGFrame\ + hdrKGFrame AsciiText hdrKGText\ +} + + +set Objects(pixel_table) { \ + toplevel TopLevelShell pixel_panel\ +\ + pixel_panel Layout pixel_table\ + pixel_table Frame pixtabMenuFrame\ + pixtabMenuFrame Layout pixtabMenuBar\ + pixtabMenuBar MenuButton pixtabSize\ + pixtabMenuBar Command pixtabHelp\ + pixtabMenuBar Command pixtabClose\ +\ + pixel_table Frame pixtabFrame\ + pixtabFrame Porthole ptPort\ + ptPort Layout ptLayout\ + ptLayout Frame ptColFrame\ + ptColFrame MultiList ptColLabs\ + ptLayout Frame ptRowFrame\ + ptRowFrame MultiList ptRowLabs\ + ptLayout Frame ptFrame\ + ptFrame MultiList pixtab\ +\ + ptLayout Label meanLabel\ + ptLayout Frame meanFrame\ + meanFrame Label meanValue\ +\ + ptLayout Label sigLabel\ + ptLayout Frame sigFrame\ + sigFrame Label sigValue\ +} + + +set Objects(tcl_panel) { \ + toplevel TopLevelShell tcl_panel\ + tcl_panel Layout tclLayout\ + tclLayout Group tclCmdGroup\ + tclCmdGroup Layout tclCmd\ + tclCmd Command tclClear\ + tclCmd Command tclExecute\ + tclCmd Command tclDismiss\ + tclLayout Frame tclFrame\ + tclFrame AsciiText tclEntry\ +} + + +set Objects(warning) { \ + toplevel TransientShell warning\ + warning Layout warn\ + warn Frame warnFrame\ + warnFrame Layout WFlayout\ + WFlayout Icon warnIcon\ + WFlayout TextBox warnText\ + warn Command warnOk\ + warn Command warnCancel\ +} + + +set Resources(global) { \ + + !--------------------------------------------------------- + ! Define some global widget resources for the main panels. + !--------------------------------------------------------- + *shadowWidth: 1 + *background: #c4c4c4 +! *foreground: black + *Arrow.width: 16 + *Arrow.height: 25 + *Text*height: 21 + *Command.height: 21 + *Command.highlightThickness: 1 + *MenuButton.height: 21 + *MenuButton.highlightThickness: 1 + *Label.borderWidth: 0 + *Label.shadowWidth: 0 + *TextButton.shadowWidth: 0 + *TextButton.highlightThickness: 1 + *TextToggle*borderWidth: 0 + *TextToggle.highlightThickness: 0 + *Toggle.highlightThickness: 1 + *Group.shrinkToFit: True + + *Arrow.foreground: gray + *Arrow.background: #adadad + *Text*background: #adadad + *AsciiText*background: #adadad + *TextBox.background: #adadad + *MultiList*background: #adadad + *Slider2d.thumbColor: #c4c4c4 + + + !------------------------------------------------------------- + ! Define resources to take advantage of the 3D scrollbar look. + !------------------------------------------------------------- + *Scrollbar*background: #c4c4c4 + *Scrollbar*shadowWidth: 1 + *Scrollbar*width: 15 + *Scrollbar*height: 15 + *Scrollbar*cursorName: top_left_arrow + *Scrollbar*pushThumb: true + + *HTML.Scrollbar.shadowWidth: 1 + *HTML*Scrollbar*width: 15 + *HTML*Scrollbar*height: 15 + + + !---------------------------------------- + ! Menu resources giving a shadow effect. + !---------------------------------------- + *SmeBSB.leftMargin: 10 + *SmeBSB.rightMargin: 5 + *SmeBSB.shadowWidth: 2 + *SmeBSB.foreground: #e5e5e5 + *SmeBSB.background: SteelBlue + *SimpleMenu.background: #c4c4c4 + *SimpleMenu.borderWidth: 2 + *SimpleMenu.borderColor: black + *SimpleMenu.line1.foreground: #9c9c9c + *SimpleMenu.line2.foreground: #e8e8e8 + *SimpleMenu.line3.foreground: #9c9c9c + *SimpleMenu.line4.foreground: #e8e8e8 + *SimpleMenu.line5.foreground: #9c9c9c + *SimpleMenu.line6.foreground: #e8e8e8 + *SimpleMenu.line7.foreground: #9c9c9c + *SimpleMenu.line8.foreground: #e8e8e8 + *SimpleMenu.line9.foreground: #9c9c9c + *SimpleMenu.line10.foreground: #e8e8e8 + *SimpleMenu.line11.foreground: #9c9c9c + *SimpleMenu.line12.foreground: #e8e8e8 + *SimpleMenu.line13.foreground: #9c9c9c + *SimpleMenu.line14.foreground: #e8e8e8 + *SimpleMenu.line15.foreground: #9c9c9c + *SimpleMenu.line16.foreground: #e8e8e8 + *SimpleMenu.line17.foreground: #9c9c9c + *SimpleMenu.line18.foreground: #e8e8e8 + *SimpleMenu.line19.foreground: #9c9c9c + *SimpleMenu.line20.foreground: #e8e8e8 + *SimpleMenu.line21.foreground: #9c9c9c + *SimpleMenu.line22.foreground: #e8e8e8 + *SimpleMenu.line23.foreground: #9c9c9c + *SimpleMenu.line24.foreground: #e8e8e8 + *SimpleMenu.line25.foreground: #9c9c9c + *SimpleMenu.line26.foreground: #e8e8e8 + *SimpleMenu.line27.foreground: #9c9c9c + *SimpleMenu.line28.foreground: #e8e8e8 + *SimpleMenu.line29.foreground: #9c9c9c + *SimpleMenu.line30.foreground: #e8e8e8 + *SimpleMenu.line31.foreground: #9c9c9c + *SimpleMenu.line32.foreground: #e8e8e8 + *SimpleMenu.line33.foreground: #9c9c9c + *SimpleMenu.line34.foreground: #e8e8e8 + *SimpleMenu.line35.foreground: #9c9c9c + *SimpleMenu.line36.foreground: #e8e8e8 + *SimpleMenu.line37.foreground: #9c9c9c + *SimpleMenu.line38.foreground: #e8e8e8 + *SimpleMenu.line39.foreground: #9c9c9c + *SimpleMenu.line40.foreground: #e8e8e8 + + + !--------------------------------------------- + ! Fixups for 24-bit displays + !--------------------------------------------- + *hFindEntry.background: #adadad + *hdrIGText.background: #adadad + *hdrKGText.background: #adadad + *hfEntry.background: #adadad + *printcmd.background: #adadad + *titleString.background: #adadad + *fnameText.background: #adadad + *imtemplateText.background: #adadad + *z1Value.background: #adadad + *z2Value.background: #adadad + *nsampValue.background: #adadad + *saveFile.background: #adadad + *infoText.background: #adadad + *wtName.background: #adadad + *wtTitle.background: #adadad + *wtFBCfg.background: #adadad + *wtIPixval.background: #adadad + *wtSPixval.background: #adadad + *wtBPixval.background: #adadad + *wtWcs1.background: #adadad + *wtWcs2.background: #adadad + *wtWcs3.background: #adadad + *wtWcs4.background: #adadad + *wcsIsmCmd.background: #adadad + *tclEntry.background: #adadad + + *hFindEntry.foreground: #000000 + *hdrIGText.foreground: #000000 + *hdrKGText.foreground: #000000 + *hfEntry.foreground: #000000 + *printcmd.foreground: #000000 + *titleString.foreground: #000000 + *fnameText.foreground: #000000 + *imtemplateText.foreground: #000000 + *z1Value.foreground: #000000 + *z2Value.foreground: #000000 + *nsampValue.foreground: #000000 + *saveFile.foreground: #000000 + *infoText.foreground: #000000 + *wtName.foreground: #000000 + *wtTitle.foreground: #000000 + *wtFBCfg.foreground: #000000 + *wtIPixval.foreground: #000000 + *wtSPixval.foreground: #000000 + *wtBPixval.foreground: #000000 + *wtWcs1.foreground: #000000 + *wtWcs2.foreground: #000000 + *wtWcs3.foreground: #000000 + *wtWcs4.foreground: #000000 + *wcsIsmCmd.foreground: #000000 + *tclEntry.foreground: #000000 +} + + + + + + +set Resources(ximtool) { \ + + ! Main image window resources. + ! ------------------------------- + *allowShellResize: True + *beNiceToColormap: False + *menuLabel.foreground: Gold + *markerMenu.foreground: Black + *markerMenu.background: SteelBlue + *markerMenu*SimpleMenu.foreground: Black + *markerMenu*SimpleMenu.background: SteelBlue + *rulerMenu.foreground: Black + *rulerMenu.background: SteelBlue + *rulerMenu*SimpleMenu.foreground: Black + *rulerMenu*SimpleMenu.background: SteelBlue + *rulerMenu.SmeBSB.leftMargin: 16 + *magzoomMenu.foreground: Black + *magzoomMenu.background: SteelBlue + *magzoomMenu*SimpleMenu.foreground: Black + *magzoomMenu*SimpleMenu.background: SteelBlue + *markerColor.SmeBSB.leftMargin: 64 + *markerColor.SmeBSB.rightMargin: 0 + *markerColor.menuLabel.leftMargin: 5 + *markerColor.menuLabel.rightMargin: 5 + *rulerColor.SmeBSB.leftMargin: 64 + *rulerColor.SmeBSB.rightMargin: 0 + *rulerColor.menuLabel.leftMargin: 5 + *rulerColor.menuLabel.rightMargin: 5 + + *ximtool.title: XIMTOOL_VERSION + + *display.borderWidth: 0 + *display.layout: horizontal { \ + -0 \ + vertical { \ + menuGroup < +inf -inf * > \ + -2 \ + vertical { \ + horizontal { \ + imageFrame < +inf -inf * +inf -inf > \ + vcutFrame < * +inf -inf > \ + } \ + horizontal { \ + hcutFrame < +inf -inf * > 1 \ + vertical { 4 plotOpts -4 } \ + } \ + horizontal { \ + cbarFrame < +inf -inf * > \ + focusSlider 2 hcut 2 vcut 15 \ + } \ + } \ + } \ + -0 \ + } + *hcut.label: H + *hcut.font: *lucida-bold-r*10* + *vcut.label: V + *vcut.font: *lucida-bold-r*10* + *focusSlider.location: 0 0 100 15 + + *hcutFrame.frameType: sunken + *hcutFrame.frameWidth: 1 + *hcutFrame.innerOffset: 0 + *hcutFrame.outerOffset: 0 + *hcutPlot.color0: #c4c4c4 + *hcutPlot.color1: black + *hcutPlot.color0: darkslategray + *hcutPlot.color1: #eeeee0 + *hcutPlot.crosshairCursorColor: red + *hcutPlot.width: 512 + *hcutPlot.height: 6 + *hcutPlot.borderWidth: 0 + *hcutPlot.alphaFont1: 6x10 + *hcutPlot.alphaFont2: 6x10 + *hcutPlot.alphaFont3: 6x10 + *hcutPlot.alphaFont4: 6x10 + *hcutPlot.alphaFont5: 6x10 + *hcutPlot.alphaFont6: 6x10 + *hcutPlot.alphaFont7: 6x10 + *hcutPlot.alphaFont8: 6x10 + *hcutPlot.translations: \ + !Ctrl 1: call(cpZoom,1,1,fixed) \n\ + !Ctrl 2: call(cpZoom,2,2,fixed) \n\ + !Ctrl 3: call(cpZoom,3,3,fixed) \n\ + !Ctrl 4: call(cpZoom,4,4,fixed) \n\ + !Ctrl 5: call(cpZoom,5,5,fixed) \n\ + !Ctrl 6: call(cpZoom,6,6,fixed) \n\ + !Ctrl 7: call(cpZoom,7,7,fixed) \n\ + !Ctrl 8: call(cpZoom,8,8,fixed) \n\ + !Ctrl 9: call(cpZoom,9,9,fixed) \n\ + !Ctrl b: call(prevFrame,$name) \n\ + !Ctrl f: call(nextFrame,$name) \n\ + !Ctrl i: call(cpInvert) \n\ + !Ctrl m: call(toggleMagnifier) \n\ + !Ctrl n: call(normalize) \n\ + !Ctrl p: call(togglePanner) \n\ + !Ctrl Alt q: call(Quit) \n\ + !Ctrl r: call(cpRegisterFrames) \n\ + !Ctrl s: call(cpMatchFrames) \n\ + !Ctrl u: call(cpZoom,1,1,fixed) \n\ + Ctrl +: call(cpZoom,2.0,2.0,relative) \n\ + Ctrl -: call(cpZoom,0.5,0.5,relative) \n\ + Ctrl \<: call(cpSetBlinkRate,BRdecrease) \n\ + Ctrl \>: call(cpSetBlinkRate,BRincrease) \n\ + !Alt b: call(toggleBlink) \n\ + !Alt c: call(controlPanel) \n\ + !Alt h: call(Help) \n\ + !Alt i: call(infoPanel) \n\ + !Ctrl Alt f: call(fitFrame) \n\ + !Alt l: call(loadPanel) \n\ + !Alt p: call(printPanel) \n\ + !Alt s: call(savePanel) \n\ + !Alt t: call(tclPanel) \n\ + !: call(makeMarker,$name,$x,$y) m_create() \n\ + : enter-window() \n\ + : leave-window() \n\ + : graphics-input() \n\ + !Alt : call(curtrack_msg,$x,$y) \n\ + : track-cursor() call(hcutWCSUpdate,$x,$y) + + + *vcutFrame.frameType: sunken + *vcutFrame.frameWidth: 1 + *vcutFrame.innerOffset: 0 + *vcutFrame.outerOffset: 0 + *vcutPlot.color0: #c4c4c4 + *vcutPlot.color1: black + *vcutPlot.color0: darkslategray + *vcutPlot.color1: #eeeee0 + *vcutPlot.crosshairCursorColor: red + *vcutPlot.width: 6 + *vcutPlot.height: 512 + *vcutPlot.borderWidth: 0 + *vcutPlot.alphaFont1: 6x10 + *vcutPlot.alphaFont2: 6x10 + *vcutPlot.alphaFont3: 6x10 + *vcutPlot.alphaFont4: 6x10 + *vcutPlot.alphaFont5: 6x10 + *vcutPlot.alphaFont6: 6x10 + *vcutPlot.alphaFont7: 6x10 + *vcutPlot.alphaFont8: 6x10 + *vcutPlot.translations: \ + !Ctrl 1: call(cpZoom,1,1,fixed) \n\ + !Ctrl 2: call(cpZoom,2,2,fixed) \n\ + !Ctrl 3: call(cpZoom,3,3,fixed) \n\ + !Ctrl 4: call(cpZoom,4,4,fixed) \n\ + !Ctrl 5: call(cpZoom,5,5,fixed) \n\ + !Ctrl 6: call(cpZoom,6,6,fixed) \n\ + !Ctrl 7: call(cpZoom,7,7,fixed) \n\ + !Ctrl 8: call(cpZoom,8,8,fixed) \n\ + !Ctrl 9: call(cpZoom,9,9,fixed) \n\ + !Ctrl b: call(prevFrame,$name) \n\ + !Ctrl f: call(nextFrame,$name) \n\ + !Ctrl i: call(cpInvert) \n\ + !Ctrl m: call(toggleMagnifier) \n\ + !Ctrl n: call(normalize) \n\ + !Ctrl p: call(togglePanner) \n\ + !Ctrl Alt q: call(Quit) \n\ + !Ctrl r: call(cpRegisterFrames) \n\ + !Ctrl s: call(cpMatchFrames) \n\ + !Ctrl u: call(cpZoom,1,1,fixed) \n\ + Ctrl +: call(cpZoom,2.0,2.0,relative) \n\ + Ctrl -: call(cpZoom,0.5,0.5,relative) \n\ + Ctrl \<: call(cpSetBlinkRate,BRdecrease) \n\ + Ctrl \>: call(cpSetBlinkRate,BRincrease) \n\ + !Alt b: call(toggleBlink) \n\ + !Alt c: call(controlPanel) \n\ + !Alt h: call(Help) \n\ + !Alt i: call(infoPanel) \n\ + !Ctrl Alt f: call(fitFrame) \n\ + !Alt l: call(loadPanel) \n\ + !Alt p: call(printPanel) \n\ + !Alt s: call(savePanel) \n\ + !Alt t: call(tclPanel) \n\ + !: call(makeMarker,$name,$x,$y) m_create() \n\ + : enter-window() \n\ + : leave-window() \n\ + : graphics-input() \n\ + !Alt : call(curtrack_msg,$x,$y) \n\ + : track-cursor() call(vcutWCSUpdate,$x,$y) + + + *plotOpts.label: Options + !*plotOpts*location: 0 0 105 18 + *plotOpts*location: 0 0 1 18 + *plotOpts.shrinkToFit: True + *plotOpts.outerOffset: 5 + *plotOpts.innerOffset: 3 + *plotOpts.frameWidth: 2 + *plotOpts*TextToggle.offIcon: square0s + *plotOpts*TextToggle.onIcon: square1s + *plotOpts*TextToggle.highlightColor: yellow + *plotOpts*TextToggle.outerOffset: 0 + *plotOpts*TextToggle.frameWidth: 0 + *plotOpts*TextToggle.selectionStyle: multi + *plotOpts*TextToggle.leftMargin: 3 + *plotOpts*TextToggle.alignment: left + + *poptsLayout.borderWidth: 0 + *poptsLayout.layout: vertical { \ + -1 \ + plotSpeed plotAccurate plotImgPix \ + 2 < -2 > \ + horizontal { -4 optLine < +inf -inf * > -4 } \ + 2 < -2 > \ + curJump curSmooth curTrack \ + -1 \ + } + *plotSpeed.label: Better Speed + *plotSpeed.on: True + *plotAccurate.label: Better Accuracy + *plotAccurate.on: False + *plotImgPix.label: Image Pixels + *plotImgPix.on: False + *plotImgPix.sensitive: False + *optLine.height: 2 + *optLine.width: 120 + *optLine.outerOffset: 0 + *optLine.innerOffset: 0 + *optLine.frameWidth: 2 + *optLine.frameType: chiseled + *curJump.label: Jump Cursor + *curJump.on: True + *curSmooth.label: Smooth Cursor + *curSmooth.on: False + *curTrack.label: Graphics Cursors + *curTrack.on: True + + + *menuGroup.label: + *menuGroup.height: 40 + *menuGroup.width: 518 + *menuGroup.frameType: raised + *menuGroup.frameWidth: 2 + *menubar.layout: horizontal { \ + 1 < -1 > \ + fileButton 1 < -1 > viewButton 1 < -1 > optionsButton \ + 1 < -1 > \ + imageTitle < +inff -inff * > \ + 1 < -1 > \ + controlButton 1 < -1 > \ + 1 < -1 > \ + xflipButton 1 < -1 > yflipButton \ + 1 < -1 > \ + prevButton 1 < -1 > frameButton 1 < -1 > nextButton \ + 1 < -1 > \ + helpButton \ + 1 < -1 > \ + } + + *menubar*SimpleMenu.borderColor: Black + *menubar*SimpleMenu.borderWidth: 1 + *menubar*SimpleMenu.foreground: white + *menubar*SimpleMenu.background: SteelBlue + *SmeBSB.vertSpace: 10 + + *SimpleMenu*font: -adobe-times-bold-r-normal-*-12-*-*-*-*-*-iso8859-1 + *fileButton.font: -adobe-times-bold-i-normal-*-12-*-*-*-*-*-iso8859-1 + *optionsButton.font: -adobe-times-bold-i-normal-*-12-*-*-*-*-*-iso8859-1 + *viewButton.font: -adobe-times-bold-i-normal-*-12-*-*-*-*-*-iso8859-1 + + *menubar.width: 518 + *menubar*borderWidth: 0 + *menubar*Command.label: x + *menubar*Command.internalWidth: 0 + *menubar*Command.borderWidth: 0 + *menubar*Toggle.label: x + *menubar*Toggle.internalWidth: 0 + *menubar*Toggle.borderWidth: 0 + + *fileButton.label: File + *fileButton.menuName: fileMenu + *viewButton.label: View + *viewButton.menuName: viewMenu + *optionsButton.label: Options + *optionsButton.menuName: optionsMenu + *imageTitle*font: *times-bold-r*12* + *imageTitle.width: 40 + *imageTitle.height: 20 + *frameButton.menuName: frameMenu + *frameButton.label: 1 + *frameButton.width: 20 + + *Gterm.cmapName: image + *Gterm.basePixel: 64 + *imageFrame.frameType: sunken + *imageFrame.frameWidth: 1 + *imageFrame.outerOffset: 0 + *imageFrame.innerOffset: 0 + *imageFrame.width: 518 + *imageFrame.height: 518 + *cbarFrame.frameType: sunken + *cbarFrame.frameWidth: 1 + *cbarFrame.outerOffset: 0 + *cbarFrame.innerOffset: 0 + *cbarFrame.width: 518 + *imagewin.warpCursor: true + *imagewin.raiseWindow: true + *imagewin.deiconifyWindow: true + *imagewin.ginmodeCursor: circle + *imagewin.ginmodeBlinkInterval: 500 + *imagewin.resizable: true + *imagewin.copyOnResize: false + *imagewin.width: 512 + *imagewin.height: 512 + *imagewin.maxMappings: 64 + *imagewin.borderWidth: 0 + + *imagewin.translations: \ + NoneLeft: call(move_cursor,-1,0) \n\ + NoneDown: call(move_cursor,0,1) \n\ + NoneUp: call(move_cursor,0,-1) \n\ + NoneRight: call(move_cursor,1,0) \n\ + !Shift Left: call(move_cursor,-10,0) \n\ + !Shift Down: call(move_cursor,0,10) \n\ + !Shift Up: call(move_cursor,0,-10) \n\ + !Shift Right: call(move_cursor,10,0) \n\ + !Ctrl h: call(move_cursor,-1,0) \n\ + !Ctrl j: call(move_cursor,0,1) \n\ + !Ctrl k: call(move_cursor,0,-1) \n\ + !Ctrl l: call(move_cursor,1,0) \n\ + !Ctrl Shift h: call(move_cursor,-10,0) \n\ + !Ctrl Shift j: call(move_cursor,0,10) \n\ + !Ctrl Shift k: call(move_cursor,0,-10) \n\ + !Ctrl Shift l: call(move_cursor,10,0) \n\ + !Alt 1: call(cpSetFrame,frame1) \n\ + !Alt 2: call(cpSetFrame,frame2) \n\ + !Alt 3: call(cpSetFrame,frame3) \n\ + !Alt 4: call(cpSetFrame,frame4) \n\ + !Ctrl 1: call(cpZoom,1,1,fixed) \n\ + !Ctrl 2: call(cpZoom,2,2,fixed) \n\ + !Ctrl 3: call(cpZoom,3,3,fixed) \n\ + !Ctrl 4: call(cpZoom,4,4,fixed) \n\ + !Ctrl 5: call(cpZoom,5,5,fixed) \n\ + !Ctrl 6: call(cpZoom,6,6,fixed) \n\ + !Ctrl 7: call(cpZoom,7,7,fixed) \n\ + !Ctrl 8: call(cpZoom,8,8,fixed) \n\ + !Ctrl 9: call(cpZoom,9,9,fixed) \n\ + !Ctrl Left: call(moveFrame,-1,0) \n\ + !Ctrl Down: call(moveFrame,0,1) \n\ + !Ctrl Up: call(moveFrame,0,-1) \n\ + !Ctrl Right: call(moveFrame,1,0) \n\ + !Ctrl Alt Left: call(moveFrame,-0.5,0) \n\ + !Ctrl Alt Down: call(moveFrame,0,0.5) \n\ + !Ctrl Alt Up: call(moveFrame,0,-0.5) \n\ + !Ctrl Alt Right: call(moveFrame,0.5,0) \n\ + !Ctrl a: call(toggleAutoReg) \n\ + !Ctrl b: call(prevFrame,$name) \n\ + !Ctrl c: call(cpZoomAction,centerFrame) \n\ + !Ctrl f: call(nextFrame,$name) \n\ + !Ctrl i: call(cpInvert) \n\ + !Ctrl m: call(toggleMagnifier) \n\ + !Ctrl n: call(normalize) \n\ + !Ctrl o: call(offset,$x,$y) \n\ + !Ctrl p: call(togglePanner) \n\ + !Ctrl Alt q: call(Quit) \n\ + !Ctrl r: call(cpRegisterFrames) \n\ + !Ctrl s: call(cpMatchFrames) \n\ + !Ctrl t: call(tileFramesToggle) \n\ + !Ctrl u: call(cpZoom,1,1,fixed) \n\ + !Ctrl x: call(cpFrameAction,flipX) \n\ + !Ctrl y: call(cpFrameAction,flipY) \n\ + !Ctrl Alt =: call(Print) \n\ + Ctrl +: call(cpZoom,2.0,2.0,relative) \n\ + Ctrl -: call(cpZoom,0.5,0.5,relative) \n\ + Ctrl \<: call(cpSetBlinkRate,BRdecrease) \n\ + Ctrl \>: call(cpSetBlinkRate,BRincrease) \n\ + Ctrl \[: call(setCtrBoxSize,$x,$y,-1) \n\ + Ctrl \]: call(setCtrBoxSize,$x,$y,1) \n\ + !Ctrl 0: call(centroid,$x,$y,peak) \n\ + !Ctrl Alt 0: call(centroid,$x,$y,min) \n\ + !Alt b: call(toggleBlink) \n\ + !Alt c: call(controlPanel) \n\ + !Ctrl Alt f: call(fitFrame) \n\ + !Alt h: call(Help) \n\ + !Alt i: call(infoPanel) \n\ + !Alt l: call(loadPanel) \n\ + !Alt p: call(printPanel) \n\ + !Alt s: call(savePanel) \n\ + !Alt t: call(tclPanel) \n\ + !: call(makeMarker,$name,$x,$y) m_create() \n\ + !Shift : crosshair(on) \n\ + !Shift : crosshair(on) \n\ + !Shift: crosshair(off) \n\ + !: crosshair(off) \n\ + !: call(zoom,$x,$y) \n\ + !: call(windowColormap,$x,$y) \n\ + !: call(updateColormap,$x,$y) \n\ + !: call(windowColormap,$x,$y) \n\ + !Ctrl : call(makeRuler,$name,$x,$y) \n\ + !Ctrl : track-cursor() call(wcsUpdate,$x,$y) call(magnifierMapImage,$x,$y) call(resizeRuler,$x,$y,0) \n\ + !Ctrl : call(deleteRuler,$x,$y) \n\ + : enter-window() \n\ + : leave-window() \n\ + : graphics-input() \n\ + !Alt : call(curtrack_msg,$x,$y) \n\ + : track-cursor() call(wcsUpdate,$x,$y) call(magnifierMapImage,$x,$y) + + +! The following translations can be used to enable windowing of the +! individual RGB components of the colormap. It's not very useful but +! included here for those that may wish to use it. +!-------------------------------------------------------------------------- +! !Ctrl : call(windowRGB,1,$x,$y,0) \n\ +! !Ctrl : call(windowRGB,1,$x,$y,0) \n\ +! !Ctrl : call(windowRGB,1,$x,$y,1) \n\ +! !Ctrl : call(windowRGB,2,$x,$y,0) \n\ +! !Ctrl : call(windowRGB,2,$x,$y,0) \n\ +! !Ctrl : call(windowRGB,2,$x,$y,1) \n\ +! !Ctrl : call(windowRGB,3,$x,$y,0) \n\ +! !Ctrl : call(windowRGB,3,$x,$y,0) \n\ +! !Ctrl : call(windowRGB,3,$x,$y,1) \n\ + + *colorbar.borderWidth: 0 + *colorbar.maxRasters: 1 + *colorbar.maxMappings: 1 + *colorbar.width: 50 + *colorbar.height: 17 +} + + +set Resources(panelShell) { \ + + !================================ + ! Main Integrated Control Panel + !================================ + *panelShell.title: XImtool Control Panel + *panelShell.geometry: 480x630 + *panelShell.maxWidth: 480 + *panelShell.minWidth: 480 + *panelTabs.internalHeight: 3 + *panelTabs.internalWidth: 10 + + *Text*font: -*-helvetica-medium-r-normal-*-12-*-iso8859-1 + *TextBox*font: -*-helvetica-medium-r-normal-*-12-*-iso8859-1 + *List.font: -*-helvetica-medium-r-normal-*-12-*-iso8859-1 + *MultiList.font: -*-helvetica-medium-r-normal-*-12-*-iso8859-1 + *TextButton.font: -*-helvetica-medium-r-normal-*-12-*-iso8859-1 + *TextToggle.font: -*-helvetica-medium-r-normal-*-12-*-iso8859-1 + + *display_panel.tabLabel: Display + *display_panel.innerOffset: 5 + *print_panel.tabLabel: Print + *print_panel.innerOffset: 5 + *load_panel.tabLabel: Load + *load_panel.innerOffset: 5 + *save_panel.tabLabel: Save + *save_panel.innerOffset: 5 + *info_panel.tabLabel: Info + *info_panel.innerOffset: 5 + *tile_panel.tabLabel: Tile + *tile_panel.innerOffset: 5 + *wcs_panel.tabLabel: Coords + *wcs_panel.innerOffset: 5 + + *panelMenuBar*borderWidth: 0 + *panelMenuBar*Command.internalHeight: 4 + *panelMenuBar*Command.internalWidth: 15 + *panelMenuBar.layout: vertical { \ + 5 < -5 > \ + horizontal { \ + 10 < +inf -10> \ + panelHelp \ + 3 < -3 > \ + panelClose \ + 7 < -7 > \ + } \ + 5 < -5 > \ + } + + *panelHelp.label: Help + *panelClose.label: Dismiss + + + *tabFrame.outerOffset: 3 + *tabFrame.innerOffset: 0 + *tabFrame.frameWidth: 0 + *tabFrame.frameType: chiseled + *panelMenuFrame.outerOffset: 0 + *panelMenuFrame.innerOffset: 1 + *panelMenuFrame.frameType: raised + *panelMenuFrame.frameWidth: 2 + *panel.layout: vertical { \ + panelMenuFrame < +inf -inf * > \ + 3 \ + horizontal { tabFrame < +inf -inf * +inf -inf> } \ + } +} + + +set Resources(display_panel) { \ + + !================================ + ! Main Display Control Panel. + !================================ + *controlPanel*internalWidth: 0 + *controlPanel*borderWidth: 0 + + *TextBox.font: 7x13bold + *TextToggle.font: -adobe-times-medium-r-normal-*-12-*-*-*-*-*-iso8859-1 + *Command.font: -adobe-times-bold-i-normal-*-12-*-*-*-*-*-iso8859-1 + *Toggle.font: -adobe-times-medium-r-normal-*-12-*-*-*-*-*-iso8859-1 + *Label.font: -*-helvetica-medium-r-normal-*-12-*-iso8859-1 + *MultiList.font: -adobe-times-medium-r-normal-*-12-*-*-*-*-*-iso8859-1 + *toggleZoom.font: -*-helvetica-medium-r-normal-*-12-*-iso8859-1 + *centerFrame.font: -*-helvetica-medium-r-normal-*-12-*-iso8859-1 + *zoom*Command.font: 7x13bold + + *blinkFrame1.font: -adobe-times-medium-r-normal-*-12-*-iso8859-1 + *blinkFrame2.font: -adobe-times-medium-r-normal-*-12-*-iso8859-1 + *blinkFrame3.font: -adobe-times-medium-r-normal-*-12-*-iso8859-1 + *blinkFrame4.font: -adobe-times-medium-r-normal-*-12-*-iso8859-1 + *matchButton.font: -adobe-times-medium-r-normal-*-12-*-iso8859-1 + *registerButton.font: -adobe-times-medium-r-normal-*-12-*-iso8859-1 + *blinkButton.font: -adobe-times-medium-r-normal-*-12-*-iso8859-1 + *autoregButton.font: -adobe-times-medium-r-normal-*-12-*-iso8859-1 + + *controlPanel.layout: vertical { \ + 5 < -5 > \ + horizontal { \ + -1 \ + viewBox < +inf -inf * > \ + -1 \ + } \ + 5 < -5 > \ + horizontal { \ + -1 \ + enhancementBox < +inf -inf * +inf -inf > \ + -5 \ + vertical { \ + -1 \ + blinkBox < * +inf - inf > \ + 1 \ + optionsBox < * +inff -inff > \ + -1 \ + } \ + -1 \ + } \ + -5 \ + controlBox < +inf * > \ + -5 \ + } + + ! VIEW + ! ------------------ + *viewBox.label: View + *viewBox.location: 0 0 410 0 + *viewBox.shrinkToFit: True + *viewBox.outerOffset: 7 + + *view.layout: vertical { \ + 5 < +inf -5 > \ + horizontal { \ + -1 \ + frameSelect \ + vertical { \ + 3 < -3 > \ + frameDataBox < +inff -100% * +inff -100% > \ + 3 < -3 > \ + } \ + zoomBox \ + -1 \ + } \ + 1 < +inf > \ + viewButtons < +inf -inf * +inf -inf > \ + 5 < +inf -5 > \ + } + + *frameDataBox.frameType: sunken + *frameDataBox.frameWidth: 1 + *frameData.width: 150 + *frameData.height: 50 + + *frameSelect.location: 0 0 72 0 + *frameSelect.shrinkToFit: True + *frameSelect.outerOffset: 7 + *frameSelect.innerOffset: 2 + *frameSelect.frameWidth: 2 + *frameSelect*offIcon: diamond0s + *frameSelect*onIcon: diamond1s + *frameSelect*highlightColor: blue + *frameSelect.label: Frame + + *frameBox.layout: vertical { \ + 3 \ + horizontal { -2 frlistBox < * +inff -inff > } \ + 3 < +inf -3 > \ + horizontal { prevFrame < +inf -inf * > 4 nextFrame < +inf -inf * > } \ + } + *framePort.allowVert: True + *framePort.allowHoriz: False + *framePort.useRight: True + *framePort.height: 80 + + *frameBox*alignment: left + *frameBox*frameWidth: 0 + *frameBox*frame1.label: 1\ \ + *frameBox*frame2.label: 2\ \ + *frameBox*frame3.label: 3\ \ + *frameBox*frame4.label: 4\ \ + + *frameBox*frame5.label: 5\ \ + *frameBox*frame6.label: 6\ \ + *frameBox*frame7.label: 7\ \ + *frameBox*frame8.label: 8\ \ + *frameBox*frame9.label: 9\ \ + *frameBox*frame10.label: 10\ + *frameBox*frame11.label: 11\ + *frameBox*frame12.label: 12\ + *frameBox*frame13.label: 13\ + *frameBox*frame14.label: 14\ + *frameBox*frame15.label: 15\ + *frameBox*frame16.label: 16\ + *frameBox*Command.width: 24 + *frameBox*prevFrame.label: xxx + *frameBox*nextFrame.label: xxx + + *frameList*location: 0 0 50 20 + *frameList.layout: vertical { \ + frame1 < +inf * >\ + frame2 < +inf * >\ + frame3 < +inf * >\ + frame4 < +inf * >\ + frame5 < +inf * >\ + frame6 < +inf * >\ + frame7 < +inf * >\ + frame8 < +inf * >\ + frame9 < +inf * >\ + frame10 < +inf * >\ + frame11 < +inf * >\ + frame12 < +inf * >\ + frame13 < +inf * >\ + frame14 < +inf * >\ + frame15 < +inf * >\ + frame16 < +inf * >\ + } + + + *zoomBox.label: Zoom: + *zoomBox.location: 0 0 160 127 + *zoomBox.outerOffset: 7 + *zoomBox.shrinkToFit: True + *zoomBox*TextButton.frameWidth: 1 + *zoomBox*TextButton.outerOffset: 0 + + *controlPanel*zoom*internalWidth: 4 + *zoom.layout: vertical { \ + space = ((50% of width zoom) - (50% of width z5)) \ + 1 < +inf > \ + horizontal { \ + vertical { toggleZoom < +inf * +inf > 1 } \ + 1 \ + vertical { 1 < +inf > z5 1 < +inf > z3 0 < +inf > } \ + 1 \ + vertical { zoomIn < +inf * +inf > 1 } \ + } \ + 1 \ + horizontal { \ + 1 < +inf > \ + d8 1 d4 1 d2 1 x1 1 z2 1 z4 1 z8 \ + 1 < +inf > \ + } \ + 1 \ + horizontal { \ + vertical { 1 zoomOut < +inf * +inf > } \ + 1 \ + vertical { 0 < +inf > d3 1 < +inf > d5 1 < +inf > } \ + 1 \ + vertical { 1 centerFrame < +inf * +inf > } \ + } \ + 1 < +inf > \ + } + + *toggleZoom.label: Toggle\nZoom + *toggleZoom.outerOffset: 2 + *toggleZoom.width: 30 + *toggleZoom.height: 25 + + *zoomIn.label: Zoom\nIn + *zoomIn.outerOffset: 2 + *zoomIn.width: 30 + *zoomIn.height: 25 + + *x1.label: 1 + *z2.label: 2 + *z3.label: 3 + *z4.label: 4 + *z5.label: 5 + *z8.label: 8 + + *controlPanel*zoomIn.foreground: royalBlue3 + *controlPanel*z4.foreground: royalBlue3 + *controlPanel*z5.foreground: royalBlue3 + *controlPanel*z8.foreground: royalBlue3 + *controlPanel*z2.foreground: royalBlue3 + *controlPanel*z3.foreground: royalBlue3 + + *zoomOut.label: Zoom\nOut + *zoomOut.outerOffset: 2 + *zoomOut.width: 30 + *zoomOut.height: 25 + + *centerFrame.label: Center + *centerFrame.outerOffset: 2 + *centerFrame.width: 30 + *centerFrame.height: 25 + + *d2.label: 2 + *d3.label: 3 + *d4.label: 4 + *d5.label: 5 + *d8.label: 8 + + *controlPanel*zoomOut.foreground: mediumVioletRed + *controlPanel*d2.foreground: mediumVioletRed + *controlPanel*d3.foreground: mediumVioletRed + *controlPanel*d4.foreground: mediumVioletRed + *controlPanel*d5.foreground: mediumVioletRed + *controlPanel*d8.foreground: mediumVioletRed + + *viewButtons.location: 0 0 100 80 + *viewButtons.layout: horizontal { \ + 2 < -2 > \ + aspect < +inf * > 2 \ + flipX < +inf * > 2 \ + flipY < +inf * > 2 \ + flipXY < +inf * > 2 \ + clearFrame < +inf * > 2 \ + fitFrame < +inf * > \ + 2 < -2 > \ + } + *nextFrame.label: Next Frame + *prevFrame.label: Previous Frame + *fitFrame.label: Fit Frame + *aspect.label: Aspect + *clearFrame.label: Clear Frame + *flipX.label: Flip X + *flipY.label: Flip Y + *flipXY.label: Flip XY + + + ! ENHANCEMENT + ! ------------------ + *enhancementBox.label: Enhancement + *enhancementBox.location: 0 0 110 0 + *enhancementBox.shrinkToFit: True + *enhancementBox.outerOffset: 7 + + *enhance*Viewport.allowVert: True + *enhance*Viewport.allowHoriz: False + *enhance*Viewport.useRight: False + *enhance*Viewport.resizeable: True + *enhance*Scrollbar.width: 17 + *enhance*Scrollbar.minimumThumb: 10 + *enhance.layout: vertical { \ + 3 < -3 > \ + horizontal { \ + 2 < -2 > \ + colorlistFrame < +inf -inf * +inff -inff > \ + 2 < -2 > \ + } \ + 2 \ + horizontal { \ + 2 < -2 > \ + colordataFrame < +inf -inf * +inf -inf > \ + 2 < -2 > \ + } \ + 5 < -5 > \ + horizontal { \ + 2 < -2 > \ + vertical { -1 contrastLabel 3 < -3 > brightnessLabel -1 } \ + 3 < -3 > \ + vertical { \ + -1 \ + contrastSlider < +inf -inf * > \ + 3 < -3 > \ + brightnessSlider < +inf -inf * > \ + -1 \ + } \ + 2 < -2 > \ + } \ + 5 < -5 > \ + horizontal { \ + 3 < -3 > \ + invertButton < +inf -inf * > \ + 5 < -5 > \ + optimizeButton < +inf -inf * > \ + 3 < -3 > \ + } \ + 3 < -3 > \ + } + + *enhance*frameType: sunken + *enhance*frameWidth: 1 + *enhance*BorderWidth: 0 + *enhance*Label.ShadowWidth: 0 + + *colorlist.width: 100 + *colorlist.height: 98 + *colordata.width: 100 + *colordata.height: 45 + *enhance*colordata.frameWidth: 0 + *contrastLabel.label: x + *contrastSlider.location: 0 0 100 17 + *brightnessLabel.label: x + *brightnessSlider.location: 0 0 100 17 + *invertButton.label: Invert + *optimizeButton.label: Optimize + + + ! --------------------- + ! BLINK/REGISTER + ! --------------------- + *blinkBox.label: Blink/Register + *blinkBox.location: 0 0 235 0 + *blinkBox.shrinkToFit: True + *blinkBox.outerOffset: 7 + *blinkBox*TextToggle.frameWidth: 1 + + *blink.layout: vertical { \ + space = (width blinkFramesLabel - width blinkRateLabel) \ + 3 < -3 > \ + horizontal { \ + 0 \ + blinkFramesLabel \ + 3 < +inf > \ + blinkFrame1 < -50% * > \ + blinkFrame2 < -50% * > \ + blinkFrame3 < -50% * > \ + blinkFrame4 < -50% * > \ + 4 < +inf > \ + blinkPanel < -50% * > \ + blinkReset \ + 2 \ + } \ + 5 < -5 > \ + horizontal { \ + $space \ + blinkRateLabel \ + 2 \ + BRframe < +inf * > \ + } \ + 5 < +inf -100% > \ + horizontal { \ + vertical { \ + 2 matchButton < +inf * > 4 < -4 > registerButton < +inf * > \ + } \ + 5 < -5 > \ + vertical { \ + 1 blinkButton < +inf * > 4 < -4 > autoregButton < +inf * > \ + } \ + } \ + } + + *BRlayout.layout: horizontal { \ + BRdecrease \ + BRtext < +inf -100% * > \ + BRincrease \ + } + + *blink.Label.borderWidth: 0 + *blink.Label.shadowWidth: 0 + *controlPanel*blink*internalWidth: 4 + *blink.TextToggle.location: 0 0 102 23 + *blink.TextToggle.frameWidth: 1 + *blink*TextToggle.highlightColor: yellow + *blink*TextToggle.offIcon: square0s + *blink*TextToggle.onIcon: square1s + *blink*TextToggle.outerOffset: 1 + *blink*Command.height: 27 + *blink*Arrow.width: 16 + *blink*Arrow.height: 25 + + + *blinkFramesLabel.label: Frames List: + *blinkFrame1.label: 1 + *blinkFrame2.label: 2 + *blinkFrame3.label: 3 + *blinkFrame4.label: 4 + *blinkPanel.label: x + *blinkPanel.width: 20 + *blinkReset.label: Reset + + *blinkRateLabel.label: Blink Rate: + *BRframe.frameType: sunken + *BRframe.frameWidth: 1 + *BRtext.width: 40 + *BRtext.height: 23 + *BRdecrease.direction: left + *BRincrease.direction: right + *registerButton.label: Register + *matchButton.label: Match LUTs + *blinkButton.label: Blink + *autoregButton.label: Auto-Register + + ! OPTIONS + ! --------------------- + *optionsBox.label: Options + *optionsBox.location: 0 0 220 0 + *optionsBox.shrinkToFit: False + *optionsBox.outerOffset: 7 + *optionsBox*offIcon: square0s + *optionsBox*onIcon: square1s + *optionsBox*selectionStyle: multi + *optionsBox*highlightColor: yellow + *optionsBox.TextToggle.location: 0 0 102 20 + *optionsBox.TextToggle.frameWidth: 0 + *optionsBox.TextToggle.highlightThickness: 0 + *optionsBox*alignment: left + + *pannerButton.label: Panner + *coordsBoxButton.label: Coords Box + *autoscaleButton.label: Autoscale + *antialiasButton.label: Antialias + *tileFramesButton.label: Tile Frames + *magnifierButton.label: Magnifier + *warningsButton.label: Warnings + *peakupButton.label: Centroid Peaks + *peakupButton.on: True + + ! CONTROL + ! ---------------------- + *controlBox.frameType: chiseled + *controlBox.frameWidth: 2 + *controlBox.outerOffset: 7 + *controlBox.innerOffset: 5 + *controlBox.height: 30 + + *control.layout: horizontal { \ + 1 \ + initializeButton < +inf * > \ + 5 < -5 > \ + normalizeButton < +inf * > \ + 80 < +inf -100% > \ + } + + *initializeButton.label: Initialize + *normalizeButton.label: Normalize +} + + +set Resources(print_panel) { \ + + !===================================== + ! Print Setup Panel resources. ! + !===================================== + *print_panel*TextToggle.alignment: left + *print_panel*Arrow.width: 16 + *print_panel*Arrow.height: 20 + *print_panel*TextToggle.frameWidth: 0 + *print_panel*TextToggle.height: 20 + *print_panel*Label.borderWidth: 0 + *print_panel*Label.shadowWidth: 0 + *print_panel*TextButton.width: 40 + *print_panel*TextButton.height: 25 + + *printLayout.borderWidth: 0 + *printLayout.layout: vertical { \ + -1 \ + printCmdGroup < +inf * > \ + -1 \ + optGroup < +inf -inf * +inf -inf > \ + -3 \ + cmdGroup < +inf * > \ + -1\ + } + + + ! Print Group resources. + !---------------------------------- + *printCmdGroup.borderWidth: 0 + *printCmdGroup.outerOffset: 5 + *printCmdGroup.label: + *printCmdGroup.location: 0 0 400 80 + *printCmdGroup*offIcon: diamond0s + *printCmdGroup*onIcon: diamond1s + *printCmdGroup*highlightColor: cyan + *printCmdGroup*Frame.frameType: sunken + *printCmdGroup*Frame.frameWidth: 1 + *printCmdGroup*Frame.width: 300 + *printCmdGroup*Label.justify: right + *printCmdGroup*Text*editType: edit + *printCmdGroup*Text*height: 22 + *printCmdGroup*TextToggle.width: 70 + *printCmdGroup*shadowWidth: 0 + *printCmdGroup*borderWidth: 0 + *printCmdLayout.borderWidth: 0 + *printCmdLayout.layout: horizontal { \ + labelLayout 5 inputLayout < +inf -inf * > \ + } + *labelLayout.borderWidth: 0 + *labelLayout.layout: vertical { 5 toLabel 7 printerLabel } + *printerLabel.label: Print Command: + *toLabel.label: Print To: + *toPrinter.label: Printer + *toPrinter.on: True + *toFile.label: File + + *inputLayout.borderWidth: 0 + *inputLayout.layout: horizontal { \ + 3 \ + vertical { \ + 5 \ + horizontal { 5 toPrinter 5 toFile 5 < +inf -inf > } \ + 5 \ + printcmdFrame < +inf -inf * > \ + 5 \ + } \ + 3 \ + } + *printcmd*string: lpr + *printcmd*height: 22 + *printcmd*Text*editType: edit + + + ! Main options groups layout resources. + !--------------------------------------- + *optGroup.frameWidth: 2 + *optGroup.frameType: chiseled + *optGroup.label: + *optGroup.location: 0 0 400 330 + *optGroup.outerOffset: 5 + *optGroup.innerOffset: 2 + *optLayout*borderWidth: 0 + *optLayout.layout: vertical { \ + -1 \ + horizontal { \ + vertical { \ + 5 \ + epsPageGroup < +inf -inf * > \ + optionsGroup < +inf -inf * +inf -inf > \ + -1 \ + } \ + vertical { \ + 5 \ + printColorGroup < +inf -inf * > \ + printerGroup < +inf -inf * > \ + -1 \ + } \ + -1 \ + } \ + 5 \ + horizontal { annOptsGroup < +inf * +inf > -1 } \ + -1 \ + } + + + ! Postscript Options group resources. + ! ----------------------------------- + *epsPageGroup.label: Postscript Options + *epsPageGroup.outerOffset: 7 + *epsPageGroup.innerOffset: 5 + *epsPageGroup.location: 0 0 250 150 + *epsPageGroup*offIcon: diamond0s + *epsPageGroup*onIcon: diamond1s + *epsPageGroup*highlightColor: cyan + *epsPage*Label.justify: left + *epsPage.layout: vertical { \ + -1 \ + epsOrientLabel 4 < -4 > \ + horizontal { 25 epsPortButton epsLandButton epsSquareButton -1 } \ + 4 \ + epsSizeLabel -1 \ + horizontal { \ + 25 epsLetterButton epsLegalButton epsA4Button epsB5Button -1 \ + } \ + 10 \ + horizontal { 5 epsScaleLabel 4 ScaleFrame < +inf -inf * > } \ + -1 \ + } + + + ! Page Layout resources. + ! ------------------------------- + *epsOrientLabel.label: Orientation: + *epsPortButton.label: Portrait + *epsPortButton.width: 65 + *epsLandButton.label: Landscape + *epsLandButton.width: 85 + *epsSquareButton.label: Square + *epsSquareButton.width: 70 + *epsSquareButton.sensitive: False + + *epsSizeLabel.label: Paper Size: + *epsLetterButton.label: Letter + *epsLetterButton.width: 60 + *epsLegalButton.label: Legal + *epsLegalButton.width: 60 + *epsA4Button.label: A4 + *epsA4Button.width: 50 + *epsB5Button.label: B5 + *epsB5Button.width: 50 + + ! Image scale box resources. + ! ------------------------------- + *epsScaleLabel.label: Output Image Scale: + *epsScaleLabel.justify: right + *ScaleFrame.frameType: sunken + *ScaleFrame.frameWidth: 1 + *ScaleFrame*shadowWidth: 0 + *ScaleLayout.location: 0 0 100 35 + *ScaleLayout.label: + *ScaleLayout.layout: horizontal { \ + SCdecrease SCtext < +inf -100% * > SCincrease \ + } + *SCdecrease.direction: left + *SCtext.width: 75 + *SCtext.height: 22 + *SCtext.label: 100 % + *SCincrease.direction: right + + + ! Miscellaneous print options box resources. + ! ------------------------------------ + *optionsGroup.outerOffset: 7 + *optionsGroup.innerOffset: 5 + *optionsGroup*onIcon: square1s + *optionsGroup*offIcon: square0s + *optionsGroup.label: Processing Options + *optionsGroup*TextToggle.width: 125 + *optionsGroup*TextToggle.highlightColor: yellow + *options.location: 0 0 250 60 + *options.frameWidth: 2 + *options.layout: horizontal { \ + 5 \ + vertical { -1 epsscaleButton 2 autorotateButton -1 } \ + 3 \ + vertical { -1 aspectButton 2 compressButton -1 } \ + -1 \ + } + *epsscaleButton.label: Auto Scale + *autorotateButton.label: Auto Rotate + *aspectButton.label: Max Aspect + *compressButton.label: RLE Compress + *compressButton.sensitive: False + + + ! Annotation options box resources. + ! ------------------------------------ + *annOptsGroup.outerOffset: 7 + *annOptsGroup.innerOffset: 5 + *annOptsGroup*onIcon: square1s + *annOptsGroup*offIcon: square0s + *annOptsGroup.label: Annotation Options + *annOptsGroup*TextToggle.width: 90 + *annOptsGroup*TextToggle.highlightColor: yellow + *annOptsGroup*Frame.frameType: sunken + *annOptsGroup*Frame.frameWidth: 1 + *annOptsGroup*Frame.width: 300 + *annOptsGroup*Text*editType: edit + *annOpts.frameWidth: 2 + *annOpts.location: 0 0 400 70 + *annOpts.layout: vertical { \ + 2 \ + horizontal { \ + 5 annotateButton 2 titleButton 2 bordersButton 2 colorbarButton 5 \ + } \ + 3 \ + horizontal { -1 titleLabel 2 titleFrame < +inf -inf * > -1 } \ + -1 \ + } + *annotateButton.label: \ Annotate + *titleButton.label: \ Title + *bordersButton.label: \ Borders + *colorbarButton.label: \ Colorbar + *titleLabel.label: Title String + *titleString*string: imtitle + *titleString*height: 23 + *titleString*Text*editType: edit + + + ! Output color box resources. + ! ------------------------------ + *printColorGroup.location: 0 0 150 90 + *printColorGroup.outerOffset: 7 + *printColorGroup.frameWidth: 2 + *printColorGroup*offIcon: diamond0s + *printColorGroup*onIcon: diamond1s + *printColorGroup*highlightColor: cyan + *printColorGroup.innerOffset: 5 + *printColorGroup.label: Output Color + *printColorGroup*TextToggle.width: 110 + *printColor.frameWidth: 2 + *printColor.location: 0 0 250 75 + *printColor.layout: horizontal { \ + 1 \ + vertical { -1 prGrayButton 2 prPseudoButton 2 prRGBButton -1 } \ + -1 \ + } + *prGrayButton.label: Grayscale + *prPseudoButton.label: PseudoColor + *prRGBButton.label: RGB + + ! Printer Selection. + ! -------------------------- + *printerGroup.label: Printers + *printerGroup.location: 0 0 110 130 + *printerGroup.shrinkToFit: True + *printerGroup.outerOffset: 7 + + *printers*Viewport.allowVert: True + *printers*Viewport.allowHoriz: False + *printers*Viewport.useRight: True + *printers*Viewport.resizeable: True + *printers*Scrollbar.width: 17 + *printers*Scrollbar.minimumThumb: 10 + *printers.layout: vertical { \ + 3 < -3 > \ + horizontal { \ + 2 < -2 > \ + printlistFrame < +inf -inf * +inff -inff > \ + 2 < -2 > \ + } \ + 3 < -3 > \ + } + + *printers*frameType: sunken + *printers*frameWidth: 1 + *printers*BorderWidth: 0 + *printers*Label.ShadowWidth: 0 + + *printlist.width: 100 + *printlist.height: 78 + + + ! Panel command resources. + ! ------------------------------ + *cmdGroup.frameType: chiseled + *cmdGroup.frameWidth: 2 + *cmdGroup.outerOffset: 5 + *cmdGroup.innerOffset: 5 + *cmdGroup.label: + *cmdGroup.location: 0 0 150 50 + *cmdLayout.borderWidth: 0 + *cmdLayout*Command.internalWidth: 12 + *cmdLayout.layout: horizontal { \ + 2 \ + okayPrint 1 < +inf > printStatus < +inf -inf * +inf -inf > \ + 2 \ + } + *cmdGroup*TextButton*location: 0 0 80 0 + *okayPrint.label: Print +} + + +set Resources(info_panel) { \ + + !-------------------- + ! Information Panel + !-------------------- + *infoLayout*borderWidth: 0 + *infoLayout*Frame.frameType: sunken + *infoLayout*Frame.frameWidth: 1 + *infoLayout*Command.internalWidth: 12 + *infoLayout*Text*editType: read + *infoLayout*Text*scrollVertical: whenNeeded + *infoLayout*Text*scrollHorizontal: whenNeeded + *infoLayout*Text*displayCaret: False + *infoLayout*Scrollbar.background: #c4c4c4 + *infoLayout*Scrollbar.width: 17 + *infoLayout*Scrollbar.height: 17 + + *infoText.height: 240 + *infoText*font: 6x13 + *infoLayout.layout: vertical { \ + infoBox < +inf -inf * > \ + } + + *infoBox.label: + *infoBox.outerOffset: 0 + *infoBox.innerOffset: 3 + *infoBoxL*TextToggle.frameType: raised + *infoBoxL*TextToggle.frameWidth: 1 + *infoBoxL*TextToggle*outerOffset: 0 + *infoBoxL*TextToggle*innerOffset: 1 + *infoBoxL*TextToggle.location: 0 0 100 25 + *infoBoxL*TextToggle*onIcon: square1s + *infoBoxL*TextToggle*offIcon: square0s + *infoBoxL*TextToggle*highlightColor: cyan + *infoBoxL.layout: vertical { \ + infoFrame < +inf -inf * +inf -inf > 1 \ + 4 \ + horizontal { \ + infoOptFr < +inf -inf * > 1 \ + infoOptSvr < +inf -inf * > 1 \ + infoOptClients < +inf -inf * > 1 \ + infoOptWCS < +inf -inf * > 1 \ + infoOptIsm < +inf -inf * > 1 \ + infoOptFB < +inf -inf * > \ + }\ + 2 \ + } + *infoOptFr.label: Frame + *infoOptFr.on: True + *infoOptSvr.label: Server + *infoOptWCS.label: WCS + *infoOptIsm.label: ISM + *infoOptClients.label: Clients + *infoOptFB.label: Imtoolrc +} + + + +set Resources(load_panel) { \ + + !------------------------------- + ! File Load Control Panel. + !------------------------------- + *filesLayout*borderWidth: 0 + *filesLayout*Group.shrinkToFit: True + *filesLayout*Group.frameType: chiseled + *filesLayout*Frame*frameType: sunken + *filesLayout*Frame*frameWidth: 1 + *filesLayout*TextToggle.frameWidth: 0 + *filesLayout*TextToggle.height: 28 + *filesLayout*TextToggle.alignment: left + *filesLayout*TextToggle.ledtMargin: 3 + *filesLayout*SimpleMenu.borderWidth: 1 + *filesLayout*SimpleMenu.borderColor: black + *filesLayout*SimpleMenu.foreground: White + *filesLayout*SimpleMenu.background: SteelBlue + *filesLayout*Label.borderWidth: 0 + *filesLayout*Label.shadowWidth: 0 + *filesLayout.layout: vertical { \ + imlistGroup < +inf -inf * > \ + 3 \ + horizontal { -5 imoptsGroup < +inf -inf * > -5 } \ + -1 \ + loadCmdGroup < +inf -inf * > \ + } + + *imlistGroup.label: + *imlistGroup.frameWidth: 2 + *imlistGroup.outerOffset: 2 + *imlistLayout*Label.shadowWidth: 0 + *imlistLayout*Label.justify: left + *imlistLayout*Command.width: 90 + *imlistLayout*Command.height: 23 + *imlistLayout*Command.shadowWidth: 1 + *imlistLayout*Viewport.allowVert: True + *imlistLayout*Viewport.allowHoriz True + *imlistLayout*Viewport.useRight: True + *imlistLayout*Viewport.useBottom: True + *imlistLayout*Viewport.resizeable: True + *imlistLayout*Scrollbar.height: 17 + *imlistLayout*Scrollbar.width: 17 + *imlistLayout.layout: vertical { \ + 3 \ + horizontal { \ + 3 \ + rootButton < +inf -inf * > 1 \ + homeButton < +inf -inf * > 1 \ + upButton < +inf -inf * > 1 \ + rescanButton < +inf -inf * > \ + 3 \ + imtemplateLabel 3 imtemplateFrame < +inf -inf * > \ + 3 \ + } \ + 5 \ + horizontal { 1 imlistLabel < +inf -inf * > 1 } \ + imlistFrame < +inf -inf * +inf -inf > \ + 3 \ + dirLabel < +inf -inf * > \ + 3 \ + horizontal { 5 fnameLabel 5 filnamFrame < +inf -inf * > } \ + 3 \ + } + *imtemplateLabel.label: Filter: + *imtemplateText*editType: edit + *imtemplateText*height: 23 + *imtemplateText*font: 7x13 + !*imageList.width: 100 + *imageList*height: 140 + *imageList.shadeSurplus: False + *imageList.defaultColumns: 3 + *imageList.font: 7x13 + *imlistView.resizeable: True + *imlistLabel.height: 0 + *imlistLabel.label: xxx + *imlistLabel.justify: left + *imlistLabel.font: *lucida-bold-r*10* + *upButton.label: Up + *rootButton.label: Root + *homeButton.label: Home + *rescanButton.label: Rescan + *dirLabel.label: \ \ Directory: + *dirLabel.alignment: left + *fnameLabel.label: Load File: + *fnameText*editType: edit + *fnameText.height: 22 + + *imoptsGroup.label: Options + *imoptsGroup.frameWidth: 2 + *imoptsGroup.outerOffset: 7 + *imoptsGroup*offIcon: square0s + *imoptsGroup*onIcon: square1s + *imoptsGroup*highlightColor: yellow + *imoptsLayout*Label.shadowWidth: 0 + *imoptsLayout*Label.justify: left + *imoptsLayout.layout: vertical { \ + 3 \ + horizontal { \ + 3 \ + autoload 6 grayscale \ + 3 < +inf > \ + browseHdrs \ + 3 < +inf > \ + frameLabel 2 frameFrame \ + 3 \ + } \ + 6 \ + horizontal { \ + 3 \ + zscale 6 zrange \ + 3 \ + z1Label z1Frame < +inf * > 2 \ + z2Label z2Frame < +inf * > 2 \ + nsampLabel nsampFrame < +inf * > \ + 3 \ + } \ + 3 \ + } + *grayscale.label: Auto Grayscale + *grayscale.location: 0 0 100 22 + *autoload.label: Auto Load + *autoload.location: 0 0 80 22 + *autoload.on: True + *browseHdrs.label: List Image Headers + *browseHdrs.location: 0 0 120 22 + *browseHdrs.on: False + *zscale.label: Zscale + *zscale.location: 0 0 60 22 + *zrange.label: Zrange + *zrange.location: 0 0 60 22 + *z1Label.label: z1 + *z1Value*width: 60 + *z1Value*height: 22 + *z1Value*editType: edit + *z2Label.label: z2 + *z2Value*width: 60 + *z2Value*height: 22 + *z2Value*editType: edit + *nsampLabel.label: Nsample + *nsampValue*width: 60 + *nsampValue*height: 22 + *nsampValue*editType: edit + *frameLabel.label: Frame:\ + *frameFrame.width: 50 + *frameFrame.resize: False + *frameFrame.label: Current + *frameFrame.font: 6x13 + *frameFrame.menuName: loadFrames + + + *loadCmdGroup.label: + *loadCmdGroup*frameWidth: 2 + *loadCmdGroup*outerOffset: 5 + *loadCmdGroup.outerOffset: 2 + *loadCmdGroup*innerOffset: 5 + *loadCmdGroup.frameType: sunken + *loadCmdGroup.label: + *loadCmdGroup.location: 0 0 400 45 + *loadCmdLayout*Command.internalWidth: 12 + *loadCmdLayout.layout: horizontal { \ + 2 \ + filesLoadButton \ + 1 < +inf > \ + filesStatus \ + 2 \ + } + *filesLoadButton.label: Load + *filesStatus.label: +} + + + +set Resources(save_panel) { \ + + !===================================== + ! Save Setup Panel resources. ! + !===================================== + *save_panel*TextToggle.alignment: left + *save_panel*TextToggle.frameWidth: 0 + *save_panel*TextToggle.height: 20 + *save_panel*Label.borderWidth: 0 + *save_panel*Label.shadowWidth: 0 + *save_panel*TextButton.width: 80 + + *saveLayout.borderWidth: 0 + *saveLayout.layout: vertical { \ + saveNameGroup < +inf * > \ + saveOptGroup < +inf -inf * > -3 \ + saveCmdGroup < +inf * > \ + } + + ! Save Name Group resources. + !---------------------------------- + *saveNameGroup.borderWidth: 0 + *saveNameGroup.outerOffset: 5 + *saveNameGroup.label: + *saveNameGroup.location: 0 0 400 50 + *saveNameGroup*offIcon: diamond0s + *saveNameGroup*onIcon: diamond1s + *saveNameGroup*highlightColor: cyan + *saveNameGroup*Frame.frameType: sunken + *saveNameGroup*Frame.frameWidth: 1 + *saveNameGroup*Label.justify: right + *saveNameGroup*Text*editType: edit + *saveNameGroup*shadowWidth: 0 + *saveNameGroup*borderWidth: 0 + *saveNameLayout.borderWidth: 0 + *saveNameLayout.layout: vertical { \ + 2 \ + horizontal { 5 saveLabel 5 fnameFrame < +inf -inf * > 5 } \ + 2 \ + } + *saveLabel.label: File Name: + *saveFile.height: 22 + + ! Main options groups layout resources. + !--------------------------------------- + *saveOptGroup.frameWidth: 2 + *saveOptGroup.frameType: chiseled + *saveOptGroup.label: + *saveOptGroup.location: 0 0 400 140 + *saveOptGroup.outerOffset: 5 + *saveOptGroup.innerOffset: 0 + *saveOptLayout*borderWidth: 0 + *saveOptLayout.layout: horizontal { \ + -1 \ + vertical { 5 < -5 > fmtGroup < +inf * +inf > -1 } \ + -1 \ + vertical { \ + 10 < -10 > \ + saveDataBox < +inff -inff * +inff -inff > \ + 5 < -5 > \ + } \ + -1 \ + vertical { 5 < -5 > saveColorGroup < +inf * +inf > -1 } \ + -1 \ + } + + ! Output color box resources. + ! ------------------------------ + *saveColorGroup.location: 0 0 140 120 + *saveColorGroup.outerOffset: 7 + *saveColorGroup.frameWidth: 2 + *saveColorGroup*offIcon: diamond0s + *saveColorGroup*onIcon: diamond1s + *saveColorGroup*highlightColor: cyan + *saveColorGroup.innerOffset: 5 + *saveColorGroup.label: Output Color + *saveColorGroup*TextToggle.width: 110 + *saveColor.frameWidth: 2 + *saveColor.layout: horizontal { \ + 3 \ + vertical { 5 svGrayButton 2 svPseudoButton 2 svRGBButton -1 } \ + -1 \ + } + *svGrayButton.label: Grayscale + *svPseudoButton.label: PseudoColor + *svRGBButton.label: RGB + + *saveDataBox.frameType: sunken + *saveDataBox.frameWidth: 1 + + + ! Output format box resources. + ! ----------------------------------- + *fmtGroup.location: 0 0 140 120 + *fmtGroup.outerOffset: 7 + *fmtGroup.frameWidth: 2 + *fmtGroup*offIcon: diamond0s + *fmtGroup*onIcon: diamond1s + *fmtGroup*TextToggle.width: 55 + *fmtGroup*highlightColor: cyan + *fmtGroup.label: File Format + *formats.layout: horizontal { \ + 3 \ + vertical { 5 fitsButton 2 gifButton 2 tiffButton 2 rawButton 1 } \ + 2 < -2 > \ + vertical { 5 epsButton 2 rasButton 2 x11Button 2 jpegButton 1 } \ + -1 \ + } + *rasButton.label: RAS + *gifButton.label: GIF + *jpegButton.label: JPEG + *tiffButton.label: TIFF + *fitsButton.label: FITS + *x11Button.label: X11 + *epsButton.label: EPS + *rawButton.label: Raw + + ! Change the sensitivity once these formats are implemented. ! + !------------------------------------------------------------- + *jpegButton.sensitive: False + *x11Button.sensitive: False + *rawButton.sensitive: False + + + ! Panel command resources. + ! ------------------------------ + *saveCmdLayout.borderWidth: 0 + *saveCmdGroup.frameType: chiseled + *saveCmdGroup.frameWidth: 2 + *saveCmdGroup.outerOffset: 5 + *saveCmdGroup.innerOffset: 5 + *saveCmdGroup.label: + *saveCmdGroup.location: 0 0 400 50 + *saveCmdLayout*Command.internalWidth: 12 + *saveCmdLayout.layout: horizontal { \ + 2 \ + okaySave 1 < +inf -1 > saveStatus < +inf -inf * > \ + 2 \ + } + *okaySave.label: Save +} + + +set Resources(tile_panel) { \ + + *tileOpts.frameType: chiseled + *tileOpts.frameWidth: 2 + *tileOpts.outerOffset: 5 + *tileOpts.innerOffset: 7 + *tileOpts*shrinkToFit: True + *tileOpts*borderWidth: 0 + + *toptLayout.layout: vertical { \ + horizontal { -6 tFramesG < +inf -inf * > -6 } \ + horizontal { \ + -1 \ + horizontal { -6 tileMode < * +inf -inf > -6 } \ + vertical { \ + horizontal { -3 userOrientG < +inf -inf * > -3 } \ + horizontal { -3 fillStyle < +inf -inf * > -3 } \ + horizontal { -3 tileLabel < +inf -inf * > -3 } \ + -7 \ + horizontal { -3 geomFrame < +inf -inf * > -3 } \ + } \ + -1 \ + } \ + -4 \ + } + *tileMode.label: Tile Mode + *tileMode.outerOffset: 7 + *tileMode.innerOffset: 5 + *tileMode*location: 0 0 150 20 + *tileMode*TextToggle.outerOffset: 2 + *tileMode*TextToggle.innerOffset: 1 + *tileMode*TextToggle.frameWidth: 0 + *tileMode*TextToggle.leftMargin: 10 + *tileMode*TextToggle.rightMargin: 20 + *tileMode*TextToggle.onIcon: diamond1s + *tileMode*TextToggle.offIcon: diamond0s + *tileMode*TextToggle.highlightColor: yellow + + *tileDisabled.label: Disabled + *tileManual.label: Manual + *tileBest.label: Best + *tileSquare.label: Square + *tileHorizontal.label: Horizontal + *tileVertical.label: Vertical + *tileRow.label: One Row + *tileCol.label: One Column + + *fillStyle.label: Fill Style + *fillStyle.location: 0 0 160 30 + *fillStyle.outerOffset: 7 + *fillStyle.innerOffset: 5 + *fillStyle.rows: 1 + *fillStyle*selectionStyle: multi + *fillStyle*outerOffset: 0 + *fillStyle*innerOffset: 1 + *fillStyle*leftMargin: 7 + *fillStyle*onIcon: square1s + *fillStyle*offIcon: square0s + *fillStyle*highlightColor: yellow + *fillStyle.TextToggle.frameWidth: 0 + *fillStyle.TextToggle.location: 0 0 85 23 + *byCols.label: Fill by Columns + *bottomUp.label: Fill from Bottom + + *tileLabel.label: Tile Labels + *tileLabel.location: 0 0 175 30 + *tileLabel.outerOffset: 7 + *tileLabel.innerOffset: 5 + *tileLabel.rows: 1 + *tileLabel*selection: -1 + *tileLabel*outerOffset: 0 + *tileLabel*innerOffset: 1 + *tileLabel*leftMargin: 7 + *tileLabel*onIcon: square1s + *tileLabel*offIcon: square0s + *tileLabel*highlightColor: yellow + *tileLabel.TextToggle.frameWidth: 0 + *tileLabel.TextToggle.location: 0 0 85 23 + *labelFrames.label: Frameno + *labelImname.label: Img Name + *labelTitles.label: Img Title + + *geomFrame.frameWidth: 0 + *geomFrame.frameType: sunken + *geomFrame.outerOffset: 7 + *geomFrame.innerOffset: 4 + *tileGeometry.width: 220 + *tileGeometry.height; 37 + *tileGeometry.background: #c4c4c4 + *tileGeometry.font: 7x13bold + *tileGeometry.label: Tile Geometry: 1 x 2 + + *userOrientG.label: Manual Configuration + *userOrientG.height: 90 + *userOrientG.width: 220 + *userOrientG.outerOffset: 7 + *userOrientG.innerOffset: 5 + *userOrientG.shrinkToFit: True + *userOrientG*Frame.frameWidth: 1 + *userOrientG*Frame.frameType: sunken + *userOrientG*Text.height: 21 + *userOrientG*Text*editType: edit + *userOrientL.borderWidth: 0 + *userOrientL.layout: vertical { \ + 1 \ + horizontal { 18 nrowLab < +50% -inf * > nrFrame < +inf -inf * > 5 } \ + 1 \ + horizontal { ncolLab < +50% -inf * > ncFrame < +inf -inf * > 5 } \ + } + *nrowLab.justify: right + *ncolLab.justify: right + + *nrLayout.layout: horizontal {nrdecrease nrtext < +inf -inf * > nrincrease} + *nrdecrease.direction: left + *nrincrease.direction: right + *nrowLab.label: Tile Rows: + *nrtext.background: #adadad + *nrtext.justify: center + *nrtext.font: 7x13bold + *nrtext.label: 1 + + *ncLayout.layout: horizontal {ncdecrease nctext < +inf -inf * > ncincrease} + *ncdecrease.direction: left + *ncincrease.direction: right + *ncolLab.label: Tile Columns: + *nctext.background: #adadad + *nctext.justify: center + *nctext.font: 7x13bold + *nctext.label: 2 + + *tFramesG.label: Tile Frames + *tFramesG.outerOffset: 7 + *tFramesG.innerOffset: 7 + *tFrames.borderWidth: 0 + *tFrames*Toggle.height: 17 + *tFrames.layout: horizontal { \ + tAll \ + 2 \ + tFrame1 tFrame2 tFrame3 tFrame4 tFrame5 \ + tFrame6 tFrame7 tFrame8 tFrame9 tFrame10 \ + tFrame11 tFrame12 tFrame13 tFrame14 tFrame15 tFrame16 \ + 2 \ + tNone \ + } + *tAll.label: All\ + *tNone.label: None +} + + +set Resources(wcs_panel) { \ + + !-------------------- + ! WCS Readout Panel + !-------------------- + *wcsGroup*TextToggle.offIcon: square0s + *wcsGroup*TextToggle.onIcon: square1s + + !*wcsLayout*TextToggle.location: 0 0 160 23 + *wcsLayout*TextToggle.height: 23 + *wcsLayout*TextToggle.outerOffset: 0 + *wcsLayout*Layout.borderWidth: 0 + *wcsLayout.borderWidth: 0 + *wcsLayout.layout: vertical { \ + 0 < +0 -0 > \ + wcsGroup < +inf -inf * > \ + 5 \ + horizontal { -1 wcsOptGroup < +inf -inf * > -1 } \ + -2 \ + } + + *wcsOptGroup.label: + *wcsOptGroup.outerOffset: 0 + *wcsOptGroup.innerOffset: 5 + *wcsOptGroup.frameType: chiseled + *wcsOptGroup.frameWidth: 0 + *wcsOptLayout.layout: vertical { \ + horizontal { -9 wcsCoords < +inf -inf * > -9 } \ + -3 \ + horizontal { -5 wcsOpts < +inf -inf * > -5 } \ + horizontal { -5 wcsIsmGroup < +inf -inf * > -5 } \ + 1 \ + } + + *wcsOpts.label: + *wcsOpts.width: 265 + *wcsOpts.height: 40 + *wcsOpts.outerOffset: 3 + *wcsOpts.innerOffset: 3 + *woLayout*TextToggle.frameWidth: 0 + *woLayout*TextToggle.onIcon: square1s + *woLayout*TextToggle.offIcon: square0s + *woLayout*TextToggle.highlightColor: cyan + *woLayout*TextToggle.alignment: left + *woLayout*TextToggle.leftMargin: 5 + *woLayout.layout: horizontal { \ + 3 \ + woptLabels < +inf -inf * > 2 \ + woptTitles < +inf -inf * > 2 \ + woptFBinfo < +inf -inf * > 2 \ + woptBPM < +inf -inf * > \ + 3 \ + } + *woptLabels.label: WCS Labels + *woptLabels.on: True + *woptTitles.label: Image Titles + *woptTitles.on: True + *woptFBinfo.label: Frame Buffer Info + *woptFBinfo.on: True + *woptBPM.label: BPM Data + *woptBPM.on: False + *woptLabels.location: 0 0 150 21 + *woptTitles.location: 0 0 150 21 + *woptFBinfo.location: 0 0 175 21 + *woptBPM.location: 0 0 120 21 + + + *wcsCoords.label: Readout Values + *wcsCoords.width: 265 + *wcsCoords.height: 135 + *wcsCoords.outerOffset: 7 + *wcsCoords.innerOffset: 3 + *wcLayout*TextToggle.offIcon: diamond0s + *wcLayout*TextToggle.onIcon: diamond1s + *wcLayout*TextToggle.highlightColor: yellow2 + *wcLayout*TextToggle.shrinkToFit: True + *wcLayout*TextToggle.frameWidth: 0 + *wcLayout*TextToggle.label: + *wcLayout*TextToggle.on: True + *wcLayout*Label.justify: right + *wcLayout*Label.font: 7x13bold + *wcLayout*SimpleMenu.borderColor: black + *wcLayout*SimpleMenu.borderWidth: 1 + *wcLayout*SimpleMenu.foreground: White + *wcLayout*SimpleMenu.background: SteelBlue + *wcLayout*MenuButton.shadowWidth: 1 + *wcLayout*MenuButton.resize: False + *wcLayout.layout: vertical {\ + 1 \ + horizontal { 20 < -20 > wcTitle < +inf -inf * > 20 < -20 > }\ + 1 \ + horizontal { 5 wcLine < +inf -inf * > 5 } \ + 5 \ + horizontal { \ + 10 \ + vertical { 2 wlWcs1 2 wlWcs2 2 wlWcs3 2 wlWcs4 2 } 5 \ + vertical { 1 sysWcs1 1 sysWcs2 1 sysWcs3 1 sysWcs4 1 } 5 \ + vertical { 1 fmtWcs1 1 fmtWcs2 1 fmtWcs3 1 fmtWcs4 1 } 20 \ + vertical { 1 wpWcs1 3 wpWcs2 3 wpWcs3 3 wpWcs4 3 } 20 \ + vertical { 1 wiWcs1 3 wiWcs2 3 wiWcs3 3 wiWcs4 3 } 15 \ + } \ + 3 \ + } + *wcTitle.label: Type\ \ \ \ \ \ \ \ \ \ Format\ \ \ \ \ \ Panel\ ImgWin + + *wcLine.height: 2 + *wcLine.frameWidth: 2 + *wcLine.frameType: ledged + + *wlWcs1.label: First WCS + *wlWcs2.label: Second WCS + *wlWcs3.label: Third WCS + *wlWcs4.label: Fourth WCS + *sysWcs1.label: \ Image Display\ + *sysWcs1.menuName: sysMenu1 + *sysWcs2.label: None + *sysWcs2.menuName: sysMenu2 + *sysWcs3.label: None + *sysWcs3.menuName: sysMenu3 + *sysWcs4.label: None + *sysWcs4.menuName: sysMenu4 + *fmtWcs1.label: \ Sexigesimal\ + *fmtWcs1.menuName: fmtMenu1 + *fmtWcs2.label: None + *fmtWcs2.menuName: fmtMenu2 + *fmtWcs3.label: None + *fmtWcs3.menuName: fmtMenu3 + *fmtWcs4.label: None + *fmtWcs4.menuName: fmtMenu4 + + *editMenu fmtWcsMenu$i fmtWcs$i $items + + *wcsIsmGroup.label: + *wcsIsmGroup.width: 395 + *wcsIsmGroup.height: 50 + *wcsIsmGroup.outerOffset: 3 + *wcsIsmGroup.innerOffset: 5 + *wcsIsmGroup*borderWidth: 0 + *wcsIsmLayout.layout: horizontal { \ + wcsIsmLabel 1 wcsIsmFrame < +inf -inf * > 3 wcsIsmInit 1 \ + } + *wcsIsmLabel.label: ISM Command + *wcsIsmFrame.frameType: sunken + *wcsIsmFrame.frameWidth: 1 + *wcsIsmFrame.outerOffset: 1 + *wcsIsmFrame*height: 23 + *wcsIsmCmd*editType: edit + *wcsIsmCmd.displayCaret: True + *wcsIsmInit.label: Initialize + *wcsIsmInit.internalWidth: 7 + + *wcsBox*borderWidth: 0 + *wcsBox*TextToggle.frameType: raised + *wcsBox*TextToggle.frameWidth: 1 + *wcsBox*TextToggle.leftMargin: 2 + *wcsBox*borderWidth: 0 + *wcsBox.layout: vertical { \ + wcsFrame < +inf -inf * > \ + 2 \ + horizontal { \ + 2 \ + ismToggle < +inf -inf * > 2 \ + pixelTable < +inf -inf * > 2 \ + imageHeader < +inf -inf * > 2 \ + compass < +inf -inf * > 2 \ + wcsOptions < +inf -inf * > \ + 2 \ + } \ + } + *ismToggle.label: ISM Mod + *ismToggle.label: WCS/Pix + *pixelTable.label: Pix Table + *imageHeader.label: Header + *imageHeader.sensitive: False + *compass.label: Compass + *wcsOptions.label: Options + + *wcsGroup.label: + *wcsGroup.outerOffset: 0 + *wcsGroup.innerOffset: 5 + *wcsGroup.frameType: chiseled + *wcsGroup.frameWidth: 2 + *wcsGroup*Text*width: 260 + *wcsGroup*Text*height: 17 + *wcsGroup*Text*font: 7x13 + *wcsGroup*Text*displayCaret: False + *wcsGroup*Text*editType: read + *wcsGroup*Text*background: black + *wcsGroup*Text*foreground: yellow2 + *wcsGroup*TextToggle.highlightColor: cyan + *wcsFrame.frameType: sunken + *wcsFrame.frameWidth: 1 + *wcsText*background: yellow4 + *wcsText.layout: vertical { \ + wtName < +inf -inf * > -3 \ + wtTitle < +inf -inf * > -3 \ + wtFBCfg < +inf -inf * > \ + 1 < -1 > \ + wtWcs1 < +inf -inf * > -3 \ + wtWcs2 < +inf -inf * > -3 \ + wtWcs3 < +inf -inf * > -3 \ + wtWcs4 < +inf -inf * > \ + 1 < -1 > \ + horizontal { \ + wtIPixval < +inf -inf * +inf > 1 \ + wtSPixval < +inf -inf * +inf > 1 \ + wtBPixval < +inf -inf * +inf > \ + } \ + } +} + + +set Resources(blink_panel) { \ + + *blink_panel.geometry: 425x200 + *blink_panel.title: Blink/Register Frames + + *brMenuBar*Command.internalHeight: 4 + *brMenuBar*Command.internalWidth: 12 + *brMenuBar*Command.height: 27 + *brMenuBar*borderWidth: 0 + + *brMenuBar*Label.font: 7x13bold + *brLayout*Command.font: -*-helvetica-medium-r-normal-*-12-*-iso8859-1 + *brRegButton.font: -*-helvetica-medium-r-normal-*-12-*-iso8859-1 + *brReset.font: -*-helvetica-medium-r-normal-*-12-*-iso8859-1 + *brMatchButton.font: -*-helvetica-medium-r-normal-*-12-*-iso8859-1 + *brBlinkButton.font: -*-helvetica-medium-r-normal-*-12-*-iso8859-1 + *brAregButton.font: -*-helvetica-medium-r-normal-*-12-*-iso8859-1 + + + *brMenuBar.layout: vertical { \ + 5 < -5 > \ + horizontal { 10 < +inf -10> brClose 5 } \ + 5 < -5 > \ + } + *brClose.label: Dismiss + + *brMenuFrame.frameType: raised + *brMenuFrame.frameWidth: 2 + *bpLayout.layout: vertical { \ + brMenuFrame < +inf -inf * > \ + 1 < -1 > \ + brFrame < +inf -inf * +inf -inf > \ + } + + *brFrame.frameType: chiseled + *brFrame.frameWidth: 2 + *brFrame.outerOffset: 4 + *brFrame.innerOffset: 4 + + *brLayout.borderWidth: 0 + *brLayout.layout: vertical { \ + 3 < -3 > \ + horizontal { -3 brFramesG < +inf -inf * > -3 } \ + -5 \ + horizontal { -3 brCmdG < +inf -inf * +inf -inf > -3 } \ + -5 \ + } + + *brCmdG.label: + *brCmdG.outerOffset: 7 + *brCmdG.innerOffset: 7 + *brCmdG*borderWidth: 0 + *brCmd.layout: horizontal { \ + 2 \ + vertical { \ + 2 \ + horizontal { \ + 2 \ + brRateLabel \ + 2 \ + brBRframe < +inf -inf * >\ + 4 \ + brReset \ + 2 \ + } \ + 8 < -8 > \ + horizontal { \ + 4 \ + brMatchButton < +inf -inf * > \ + 5 < -5 > \ + brRegButton < +inf -inf * > \ + 2 \ + } \ + 1 < +inf > \ + } \ + 10 \ + vertical { \ + 2 \ + brBlinkButton < +inf * > \ + 10 < -10 > \ + brAregButton < +inf * > \ + 1 < +inf > \ + } \ + 2 \ + } + + *brFramesG.label: Frames List + *brFramesG.outerOffset: 7 + *brFramesG.innerOffset: 7 + *brFramesG*SimpleMenu.borderColor: black + *brFramesG*SimpleMenu.borderWidth: 1 + *brFramesG*SimpleMenu.foreground: White + *brFramesG*SimpleMenu.background: SteelBlue + + *brFrames.borderWidth: 0 + *brFrames.layout: horizontal { \ + 5 < +inf > \ + brFrame1 < +inf * > 1 \ + brFrame2 < +inf * > 1 \ + brFrame3 < +inf * > 1 \ + brFrame4 < +inf * > 1 \ + brFrame5 < +inf * > 1 \ + brFrame6 < +inf * > 1 \ + brFrame7 < +inf * > 1 \ + brFrame8 < +inf * > 1 \ + brFrame9 < +inf * > 1 \ + brFrame10 < +inf * > 1 \ + brFrame11 < +inf * > 1 \ + brFrame12 < +inf * > 1 \ + brFrame13 < +inf * > 1 \ + brFrame14 < +inf * > 1 \ + brFrame15 < +inf * > 1 \ + brFrame16 < +inf * > \ + 5 < +inf > \ + } + + *brBRlayout.layout: horizontal { \ + brBRdecrease \ + brBRtext < +inf -100% * > \ + brBRincrease \ + } + + *blink_panel*TextToggle.location: 0 0 110 23 + *blink_panel*TextToggle.frameWidth: 1 + *blink_panel*TextToggle.highlightColor: yellow + *blink_panel*TextToggle.offIcon: square0s + *blink_panel*TextToggle.onIcon: square1s + *blink_panel*TextToggle.outerOffset: 0 + *blink_panel*TextToggle.innerOffset: 2 + *blink_panel*Command.height: 23 + *blink_panel*Arrow.width: 16 + *blink_panel*Arrow.height: 20 + + + *brFramesLabel.label: Frames: + *brFrame1.menuName: frame1Menu + *brFrame2.menuName: frame2Menu + *brFrame3.menuName: frame3Menu + *brFrame4.menuName: frame4Menu + *brFrame5.menuName: frame5Menu + *brFrame6.menuName: frame6Menu + *brFrame7.menuName: frame7Menu + *brFrame8.menuName: frame8Menu + *brFrame9.menuName: frame9Menu + *brFrame10.menuName: frame10Menu + *brFrame11.menuName: frame11Menu + *brFrame12.menuName: frame12Menu + *brFrame13.menuName: frame13Menu + *brFrame14.menuName: frame14Menu + *brFrame15.menuName: frame15Menu + *brFrame16.menuName: frame16Menu + *brReset.label: Reset + + *brRateLabel.label: Rate: + *brBRframe.frameType: sunken + *brBRframe.frameWidth: 1 + *brBRtext.width: 40 + *brBRtext.height: 23 + *brBRdecrease.direction: left + *brBRincrease.direction: right + *brRegButton.label: Register + *brMatchButton.label: Match LUTs + *brBlinkButton.label: Blink + *brAregButton.label: Auto-Register +} + + +set Resources(hdr_panel) { \ + + *hdr_panel.geometry: 550x600 + *hdr_panel.title: Image Header + + *hdr_panel*SimpleMenu.borderColor: black + *hdr_panel*SimpleMenu.borderWidth: 1 + *hdr_panel*SimpleMenu.foreground: White + *hdr_panel*SimpleMenu.background: SteelBlue + + *hdrMenuFrame.frameType: raised + *hdrMenuFrame.frameWidth: 2 + *hdrLayout.layout: vertical { \ + hdrMenuFrame < +inf -inf * > \ + hdrObjGroup < +inf -inf * > \ + hdrTabFrame < +inf -inf * +inf -inf> \ + } + + *hdrMenuBar*borderWidth: 0 + *hdrMenuBar*Command.internalHeight: 5 + *hdrMenuBar*Command.internalWidth: 12 + *hdrMenuBar.layout: vertical { \ + 5 < -5 > \ + horizontal { 10 < +inf -10> hdrClose 7 } \ + 5 < -5 > \ + } + *hdrClose.label: Dismiss + + *hdrObjGroup.label: + *hdrObjGroup.outerOffset: 7 + *hdrObjGroup.innerOffset: 4 + *hdrObjLayout.borderWidth: 0 + *hdrObjLayout.layout: vertical { \ + horizontal { hdrObjLabel 2 hdrObjMenu < +inf -inf * > 2 } \ + } + *hdrObjLabel.label: Image Name: + *hdrObjMenu.label: + *hdrObjMenu.justify: left + *hdrObjMenu.font: 7x13 + *hdrObjMenu.menuName: objMenu + *hdrObjMenu.internalWidth: 5 + *hdrObjMenu.internalHeight: 1 + *hdrObjMenu.shadowWidth: 1 + + *hdrHdrGroup.tabLabel: Image Header + *hdrHdrGroup.label: + *hdrHdrGroup.outerOffset: 7 + *hdrHdrGroup.innerOffset: 5 + *hdrHdrLayout.borderWidth: 0 + *hdrHdrLayout.layout: vertical { \ + horizontal { \ + hdrFilter 2 hFindFrame < +inf -inf * > 2 hdrFind 1 hdrClear \ + } \ + 5 \ + hdrText < +inf -inf * +inf -inf > \ + } + *hFindEntry*editType: edit + *hFindEntry*font: 7x13 + *hFindEntry*displayCaret: True + *hFindEntry*width: 150 + *hFindFrame.frameWidth: 1 + *hFindFrame*borderWidth: 0 + *hFindFrame.frameType: sunken + *hFindFrame.width: 150 + *hFindFrame.height: 23 + *hdrFilter.label: Keyword Filter + *hdrFind.label: Search + *hdrClear.label: Clear + + ! Resources if the header text widget is AsciiText +! *hdrText*scrollVertical: Always +! *hdrText*scrollHorizontal: Always +! *hdrText*editType: edit +! *hdrText*font: 7x13 +! *hdrText*background: #c4c4c4 +! *hdrText*displayCaret: False +! *hdrText*bottomMargin: 10 +! *hdrText*Scrollbar.width: 15 +! *hdrText*Scrollbar.height: 15 + + ! Resources if the header text widget is HTML + *hdrText.width: 600 + *hdrText.height: 500 + *hdrText.anchorUnderlines: 1 + *hdrText.visitedAnchorUnderlines: 1 + *hdrText.verticalScrollOnRight: True + *hdrText.plainFont: 7x13 + *hdrText.marginWidth: 5 + *hdrText.marginHeight: 5 + + + *hdrWcsGroup.tabLabel: Image WCS Info + *hdrWcsGroup.label: + *hdrWcsGroup.outerOffset: 5 + *hdrWcsGroup.innerOffset: 5 + *hdrWcsGroup*Text*scrollVertical: whenNeeded + *hdrWcsGroup*Text*scrollHorizontal: whenNeeded + *hdrWcsGroup*Text*editType: edit + *hdrWcsGroup*Text*displayCaret: False + *hdrWcsGroup*Text*borderWidth: 0 + *hdrWcsGroup*Text*editType: edit + *hdrWcsGroup*Text*font: 7x13 + *hdrWcsGroup*Text*Scrollbar.width: 15 + *hdrWcsGroup*Text*Scrollbar.height: 15 + *hdrWcsLayout.borderWidth: 0 + *hdrWcsLayout.layout: vertical { \ + 2 < -2 > \ + hdrInfoGroup < +inf -inf * > \ + 2 < -2 > \ + hdrKeywGroup < +inf -inf * +inf -inf > \ + -4 \ + } + *hdrInfoGroup.label: Basic WCS Information + *hdrInfoGroup.outerOffset: 7 + *hdrInfoGroup.innerOffset: 0 + *hdrIGFrame.frameType: sunken + *hdrIGFrame.frameWidth: 1 + *hdrIGText.height: 130 +! *hdrIGText*background: black +! *hdrIGText*foreground: yellow2 + *hdrIGText*background: #adadad + *hdrIGText*foreground: black + *hdrWcsGroup*hdrIGText*scrollVertical: never + *hdrWcsGroup*hdrIGText*scrollHorizontal: never + *hdrWcsGroup*hdrIGText*font: 7x13 + *hdrKeywGroup.label: WCS Header Keywords + *hdrKeywGroup.outerOffset: 7 + *hdrKeywGroup.innerOffset: 5 + *hdrKGFrame.frameType: sunken + *hdrKGFrame.frameWidth: 1 + *hdrKGText*background: #c4c4c4 + *hdrKGText*bottomMargin: 10 + + *hdrIGText*background: #c4c4c4 + *hdrIGFrame.frameWidth: 0 +} + + +set Resources(pixel_table) { \ + + *pixel_panel.title: Image Pixel Table + *pixel_panel*SimpleMenu.borderWidth: 1 + *pixel_panel*SimpleMenu.borderColor: black + *pixel_panel*SimpleMenu.foreground: White + *pixel_panel*SimpleMenu.background: SteelBlue + + *pixtabMenuBar*borderWidth: 0 + *pixtabMenuBar*Command.internalHeight: 4 + *pixtabMenuBar*Command.internalWidth: 12 + *pixtabMenuBar.layout: vertical { \ + 5 \ + horizontal { \ + 5 \ + pixtabSize 10 < +inf -10> pixtabHelp 5 pixtabClose \ + 7 \ + } \ + 5 \ + } + *pixtabSize.label: Size + *pixtabSize.menuName: pixtabMenu + *pixtabHelp.label: Help + *pixtabHelp.sensitive: False + *pixtabClose.label: Dismiss + + *pixtabMenuFrame.frameType: raised + *pixtabMenuFrame.frameWidth: 2 + *pixel_table.layout: vertical { \ + 1 \ + pixtabMenuFrame < +inf -inf * > \ + 1 \ + pixtabFrame < +inf -inf * +inf -inf > \ + 1 \ + } + + + *pixtabFrame.frameType: raised + *pixtabFrame.frameWidth: 0 + *pixtabFrame*borderWidth: 0 + *pixtabFrame*font: 6x10 + *pixtabFrame*MultiList.font: -*-helvetica-medium-r-normal-*-10-* + *pixtabFrame*Label.font: -*-helvetica-medium-r-normal-*-10-* + *pixtabFrame*TextToggle.font: -*-helvetica-medium-r-normal-*-10-* + + *pixtabFrame*MultiList.forceColumns: True + *pixtabFrame*MultiList.defaultColumns: 5 + *pixtabFrame*MultiList.shadeSurplus: False + *pixtabFrame*MultiList.borderWidth: 0 + *pixtabFrame*MultiList.rowHeight: 25 + *pixtabFrame*MultiList.rowSpacing: 7 + *pixtabFrame*MultiList.internalWidth: 7 + *pixtabFrame*MultiList.internalHeight: 4 + *pixtabFrame*MultiList.width: 410 + *pixtabFrame*MultiList.height: 160 + *pixtabFrame*MultiList.columnWidth: 50 + *pixtabFrame*MultiList.columnSpacing: 2 + *pixtabFrame*MultiList.maxSelectable: 1 + *pixtabFrame*MultiList.highlightForeground: red + *pixtabFrame*MultiList.highlightBackground: #c4c4c4 + *pixtabFrame*MultiList.background: #c4c4c4 + *pixtabFrame*TextToggle.background: #c4c4c4 + + *pixtabFrame*Label.width: 00 + !*pixtabFrame*Label.resize: False + + *meanFrame.frameWidth: 2 + *meanFrame.frameType: chiseled + *meanFrame.outerOffset: 0 + *meanFrame.width: 120 + *meanLabel.label: Mean: + *meanValue.label: + *meanValue.resize: False + + *sigFrame.frameWidth: 2 + *sigFrame.frameType: chiseled + *sigFrame.outerOffset: 0 + *sigFrame.width: 120 + *sigLabel.label: Stdev: + *sigValue.label: + *sigValue.resize: False + + *ptColFrame.frameWidth: 0 + *ptColFrame.outerOffset: 0 + *ptRowFrame.frameWidth: 0 + *ptRowFrame.outerOffset: 0 + + *pixtabFrame*ptColLabs.width: 410 + *pixtabFrame*ptColLabs.height: 23 + *pixtabFrame*ptColLabs.defaultColumns: 5 + *pixtabFrame*ptColLabs.forceColumns: True + *pixtabFrame*ptColLabs.columnWidth: 50 + *pixtabFrame*ptColLabs.columnSpacing: 2 + *pixtabFrame*ptRowLabs.width: 60 + *pixtabFrame*ptRowLabs.height: 110 + *pixtabFrame*ptRowLabs.defaultColumns: 1 + *pixtabFrame*ptRowLabs.forceColumns: True + *pixtabFrame*ptRowLabs.verticalList: True + *pixtabFrame*ptRowLabs.columnWidth: 50 + *pixtabFrame*ptRowLabs.columnSpacing: 2 + *pixtabFrame*pixtab.verticalList: True + + *ptFrame.outerOffset: 0 + *ptFrame.innerOffset: 0 + *ptFrame.borderWidth: 0 + *ptFrame.frameWidth: 1 + *ptFrame.frameType: sunken + *ptLayout.layout: vertical { \ + 3 \ + horizontal { 65 ptColFrame < +inf -inf * > 5 } \ + 1 \ + horizontal { \ + vertical { ptRowFrame< * +inf -inf > 5 } \ + 1 \ + vertical { ptFrame } \ + 5 \ + } \ + 1 \ + horizontal { \ + 2 < +inf > \ + meanLabel meanFrame < +inf -inf * > 2 \ + sigLabel sigFrame < +inf -inf * > \ + 10 \ + } \ + } +} + + +set Resources(help_panel) { \ + + !---------------------- + ! Help panel resources. + !---------------------- + *help_panel.title: XImtool Help Summary + *help_panel.width: 500 + *help_panel.height: 550 + *helpLayout*borderWidth: 0 + *helpLayout*Command.internalHeight: 4 + *helpLayout*Command.internalWidth: 12 + *helpLayout*HTML*shadowWidth: 1 + *helpLayout*helpText*Scrollbar.shadowWidth: 1 + + *helpMenuGroup.label: + *helpMenuGroup.height: 45 + *helpMenuGroup.outerOffset: 0 + *helpMenuGroup.innerOffset: 0 + *helpMenuGroup.frameType: raised + *helpMenubar.layout: vertical { \ + 5 < -5 > \ + horizontal { 20 < +inf -20 > helpClose 7 } \ + 5 < -5 > \ + } + *helpBack.label: Back + *helpBack.sensitive: False + *helpForward.label: Forward + *helpForward.sensitive: False + *helpHome.label: Home + *helpClose.label: Dismiss + + + *hfEntry*editType: edit + *hfEntry*font: 7x13 + *hfEntry*displayCaret: True + *hfFrame.frameWidth: 1 + *hfFrame.frameType: sunken + *hfFrame.width: 250 + *hfFind.label: Search + *hfFind.shadowWidth: 1 + *hfClear.label: Clear + *hfClear.shadowWidth: 1 + + *helpLayout.layout: vertical { \ + -1 \ + horizontal { helpMenuGroup < +inf -inf * > } \ + 5 \ + horizontal { \ + 5 \ + helpBack 2 helpForward 2 helpHome \ + 20 < +inf -20 > \ + hfFrame < +inf -inf * > 3 hfFind 1 hfClear \ + 5 \ + } \ + 5 \ + horizontal { helpTextFrame < +inf -inf * +inf -inf > } \ + horizontal { helpInfoLayout < +inf -inf * > } \ + -1 \ + } + *helpTextFrame.frameWidth: 1 + *helpTextFrame.frameType: sunken + *helpText.width: 600 + *helpText.height: 500 + *helpText.anchorUnderlines: 1 + *helpText.visitedAnchorUnderlines: 1 + *helpText.verticalScrollOnRight: true + *helpText*Scrollbar.shadowWidth: 1 + *helpText.plainFont: -adobe-courier-medium-r-normal-*-12-*-*-*-*-*-*-* + *helpText.plainboldFont: -adobe-courier-bold-r-normal-*-12-*-*-*-*-*-*-* + *helpText.plainitalicFont: -adobe-courier-medium-o-normal-*-12-*-*-*-*-*-*-* +! *helpText.boldFont: 6x12bold + + + ! Contact info at the bottom of the panel. + *helpInfoLayout*Label.justify: center + *helpInfoLayout*Label.internalHeight: 0 + *helpInfoLayout.layout: horizontal { \ + 5 \ + vertical { 5 helpIRAFLogo 5 } \ + 1 < +inf > \ + vertical { \ + 5 \ + helpInfo1 < +inf -inf * +inf -inf > \ + helpInfo2 < +inf -inf * +inf -inf > \ + helpInfo3 < +inf -inf * +inf -inf > \ + 5 \ + } \ + 1 < +inf > \ + vertical { 5 helpNOAOLogo 5 } \ + 5 \ + } + *helpInfo1.label: XIMTOOL_VERSION + *helpInfo2.label: For help or questions: http://iraf.net + *helpInfo3.label: \ + NOAO is operated by AURA under cooperative agreement with the NSF + + *helpInfoLayout*helpInfo1.font: -*-helvetica-medium-r-normal-*-12-*-*-* + *helpInfoLayout*helpInfo2.font: -*-helvetica-medium-r-normal-*-12-*-*-* + *helpInfoLayout*helpInfo3.font: -*-helvetica-medium-r-normal-*-10-*-*-* + + *helpInfoLayout.helpIRAFLogo.internalWidth: 0 + *helpInfoLayout.helpIRAFLogo.internalHeight: 0 + *helpInfoLayout.helpIRAFLogo.foreground: SteelBlue + *helpInfoLayout.helpIRAFLogo.background: white + *helpInfoLayout.helpNOAOLogo.internalWidth: 0 + *helpInfoLayout.helpNOAOLogo.internalHeight: 0 + *helpInfoLayout.helpNOAOLogo.foreground: SteelBlue + *helpInfoLayout.helpNOAOLogo.background: white +} + +set Resources(tcl_panel) { \ + + !-------------------------------- + ! Define a debug Tcl shell. + !-------------------------------- + *tcl_panel.width: 550 + *tcl_panel.height: 180 + *tcl_panel.title: Debug TCL Command Entry + *tclLayout*borderWidth: 0 + *tclLayout*Frame.frameType: sunken + *tclLayout*Frame.frameWidth: 2 + *tclLayout.layout: vertical { \ + 0 < +0 -0 > \ + tclCmdGroup < +inf -inf * > \ + tclFrame < +inf -inf * +inf -inf> \ + 0 < +0 -0 > \ + } + *tclEntry*foreground: black + *tclEntry*editType: edit + *tclEntry*type: string + *tclEntry*font: 7x13 + *tclEntry*scrollVertical: Always + *tclEntry*scrollHorizontal: whenNeeded + + *tclCmdGroup.label: + *tclCmdGroup.outerOffset: 0 + *tclCmdGroup.innerOffset: 0 + *tclCmd.layout: vertical { \ + 5 \ + horizontal { \ + 5 \ + tclClear 3 \ + tclExecute \ + 10 < +inf -10> \ + tclDismiss \ + 5 \ + } \ + 5 \ + } + *tclClear.label: Clear + *tclExecute.label: Execute + *tclDismiss.label: Dismiss +} + + +set Resources(warning) { \ + + ! --------------------- + ! WARNING dialog. + ! --------------------- + *warning.geometry: +400+300 + *warning*borderWidth: 0 + *warning*TextBox.frameWidth: 0 + + *warn.layout: vertical { \ + 5 < -5 > \ + horizontal { 5 warnFrame < +inf * +inf > 5 } \ + 5 < -5 > \ + horizontal { \ + 10 \ + warnOk < +inf * > \ + 5 < +inf -5 > \ + warnCancel < +inf * > \ + 10 \ + } \ + 5 < -5 > \ + } + *warnOk.label: Okay + *warnCancel.label: Cancel + + *WFlayout.layout: horizontal { \ + 5 < -5 > \ + vertical { 5 < +inf -5 > warnIcon 5 < +inf -5 > } \ + 5 < -5 > \ + warnText < +inf -inf * +inf -inf > \ + 5 < -5 > \ + } + + *warnLabel.label: Warning + *warnLabel.width: 300 + *warnLabel.height: 20 + *warnFrame.frameType: sunken + *warnFrame.frameWidth: 2 + *warnIcon.location: 0 0 40 40 + *warnIcon.image: WARNING + *warnText.label: generic warning text + *warnText.width: 270 + *warnText.height: 60 + *warnText.background: #c4c4c4 +} + + + + +set Resources(gui) { \ + + ! GUI resources. + ! ------------------------------ + *autoscale: True + *zoomfactors: 1 2 4 8 + *displayCoords: True + *displayPanner: True + *displayMagnifier: False + *blinkRate: 1.0 + *pannerArea: 150*150 + *pannerGeom: -5+5 + *magnifierArea: 100*100 + *magnifierGeom: +5+5 + *wcsboxGeom: -5-5 + *maxContrast: 5.0 + *showToolBar: False + *showPanelBar: False + *warnings: True + *centerBoxSize: 5 + *peakCentroid: True +} + + + + + +################################################################################ +# GUI Bootstrap Procedures +################################################################################ + +# Initialize the widget tree. +proc InitWidgetTree args \ +{ + global Objects Resources Version + + + # Add a new objects description for each of the panels found so we can + # create them by name later rather that with the defaults. + + set guiResources "" + foreach obj [array names Objects] { + set guiResources \ + [ format "%s\n\n*%s_objects:%s\n" \ + $guiResources $obj $Objects($obj) ] + } + + # Now append all the Resource strings, changing any version strings as + # needed. + + foreach res [array names Resources] { + regsub -all XIMTOOL_VERSION $Resources($res) $Version ver + set guiResources [ format "%s\n\n%s\n\n" $guiResources $ver ] + } + + # Define all of the GUI objects and resources. + appInitialize ximtool XImtool $guiResources +} + + +# Realize a window module, i.e. create it's objects. +proc Realize { module args } \ +{ + global Objects + + # Create any widgets for the module. We only do this once and set a + # flag to indicate the objects have been created so we don't do it on + # subsequent realizations. + if { [info exists Objects($module)] } { + createObjects [format "%s_objects" $module] + reset-server + } +} + + +# Bootstrap up the GUI. +InitWidgetTree +Realize ximtool +Realize parameters +Realize panelShell +Realize tcl_panel +Realize pixel_table +Realize hdr_panel +Realize blink_panel +Realize help_panel +Realize xpan_panel +Realize xmag_panel +Realize warning + +reset-server + +# Set the gterm widget focus. +send colorbar setGterm ; send colorbar activate +send imagewin setGterm ; send imagewin activate + +# Crank it up. +activate + + + + +############################################################################## +# Utility Procedures. +############################################################################## + +# Utility procedure to test True/False strings in resources. +proc true {v} {expr {$v == "true" || $v == "True" || $v == "TRUE"}} + +# Utility functions. +proc min {a b} { expr {($a < $b) ? $a : $b} } +proc max {a b} { expr {($a > $b) ? $a : $b} } + +# Global variables. +set version "NOAO/IRAF XImtool Version 2.0BETA" + +set winWidth [send imagewin get width ] ;# display window width +set winHeight [send imagewin get height] ;# display window height +set appWidth [send display get width ] ;# application window width +set appHeight [send display get height] ;# application window height +set marker none ;# selected marker +set markno 0 ;# used to name new markers +set ruler none ;# selected ruler +set ruleno 0 ;# used to name new rulers +set blinkFrames "1 2" ;# list of blink frames +set auto_reg 0 + +set panel_up 0 ;# control panel mapped +set help_up 0 ;# help panel mapped +set ism_enable 0 ;# ISM is running +set ism_capable 1 ;# Client is ISM capable +set frameCache(0) "" ;# ISM frame cache + +set ctype "equatorial" ;# default coord type +set eqtype "fk5" ;# default equatorial type + +# Global constants. +set MAX_FRAMES 16 ;# max frame buffers + +# TCL constants +set tcl_precision 8 + + + +# Window resize callbacks. +proc winResize {w width height} { + global winWidth winHeight + + if {$width <= 1 || $height <= 1} \ + return + + set winWidth $width + set winHeight $height +} ; send imagewin addCallback winResize resize + +proc appResize {w width height} \ +{ + global doHcut doVcut cutXPos cutYPos + global appWidth appHeight + + set appWidth $width + set appHeight $height + + catch { + if {$doHcut} { + send hcutPlot clearScreen + hcutInit + send hcutAxes1 redraw ; send hcutAxes2 redraw + cutPlots $cutXPos $cutYPos + } + if {$doVcut} { + send vcutPlot clearScreen + vcutInit + send vcutAxes1 redraw ; send vcutAxes2 redraw + cutPlots $cutXPos $cutYPos + } + } +} ; #send imagewin addCallback appResize resize + + + +# Additional global variables, taking default values from resources. +getResources { + { zoomfactors } + { displayCoords } + { displayPanner } + { displayMagnifier } + { blinkRate } + { pannerArea } + { pannerGeom } + { magnifierArea } + { magnifierGeom } + { wcsboxGeom } + { maxContrast } + { showToolBar } + { showPanelBar } + { warnings } + { centerBoxSize } + { peakCentroid } + { highlight } +} + +set warnings [true $warnings] +set defaultBlinkRate $blinkRate + +# Client state variables (UI parameter objects). Certain of these parameters +# we mirror in Tcl variables here, updating the values with a callback when +# the parameter value changes. Others require special callbacks. + +set frame 1 ;# current display frame +set nframes 0 ;# number of frame buffers +set frames {1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16} ;# list of image frames +set frameWidth 0 ;# frame buffer width, pixels +set frameHeight 0 ;# frame buffer height, pixels +set frameDepth 8 ;# frame buffer pixel size, bits +set cursorMode 0 ;# true when cursor read pending + +foreach i $frames { + set frameZoomX($i) 0 ;# X zoom factor + set frameZoomY($i) 0 ;# Y zoom factor + set frameCenterX($i) 0 ;# X center of field + set frameCenterY($i) 0 ;# Y center of field + set frameScaleX($i) 0 ;# X scale factor + set frameScaleY($i) 0 ;# Y scale factor + set frameOffsetX($i) 0 ;# X register offset + set frameOffsetY($i) 0 ;# Y register offset + set enhancement($i) none ;# colortable enhancement +} + + +#trace variable frameOffsetX w debug_pvar ;# Debug stuff +#trace variable frameOffsetY w debug_pvar +#trace variable frameZoomX w debug_pvar +#trace variable frameZoomY w debug_pvar +#trace variable frameScaleX w debug_pvar +#trace variable frameScaleY w debug_pvar + +proc debug_pvar { name element op } \ +{ + if {$element != ""} { + set name ${name}($element) + } + upvar $name x + puts "Variable $name set to $x" +} + + + + +################################################################################ +# Cut-plot handling routines. +################################################################################ + +set doHcut 0 +set doVcut 0 +set hstate 0 +set vstate 0 +set plotSpeed 1 ; send plotSpeed set on True +set curJump 1 ; send curJump set on True +set curTrack 1 ; send curTrack set on True + +set cutXPos [expr "$winWidth / 2"] +set cutYPos [expr "$winHeight / 2"] +set cutXScale 1.0 +set cutYScale 1.0 + + + +# Change the cursor to the crosshair when in the plot +proc cutCursor { widget event args } \ +{ + global doHcut doVcut curTrack + + if {! $curTrack} \ + return + + if { $event == "enterNotify" } { + send $widget setCursorType ginMode + + # Disable the update of the graph we're in while in the plot window. + if {$widget == "hcutPlot"} { set doHcut 0 } else { set doVcut 0 } + } elseif { $event == "leaveNotify" } { + send $widget setCursorType idle + + # Enable the update of the graph we're leaving. + if {$widget == "hcutPlot"} { set doHcut 1 } else { set doVcut 1 } + } + cutPlotRefresh +} +foreach w {hcutPlot vcutPlot} { + send $w addEventHandler cutCursor enterWindowMask + send $w addEventHandler cutCursor leaveWindowMask +} + +proc cutPlotRefresh args \ +{ + global doHcut doVcut cutXPos cutYPos + + if {$doHcut} { + send hcutPlot clearScreen + hcutInit + send hcutAxes1 redraw ; send hcutAxes2 redraw + cutPlots $cutXPos $cutYPos + } + if {$doVcut} { + send vcutPlot clearScreen + vcutInit + send vcutAxes1 redraw ; send vcutAxes2 redraw + cutPlots $cutXPos $cutYPos + } +} ; send imagewin addEventHandler cutPlotRefresh enterWindowMask + +proc cutPlotRedraw args \ +{ + global doHcut doVcut cutXPos cutYPos + + if {$doHcut} { + send hcutAxes1 redraw ; send hcutAxes2 redraw + cutPlots $cutXPos $cutYPos + } + if {$doVcut} { + send vcutAxes1 redraw ; send vcutAxes2 redraw + cutPlots $cutXPos $cutYPos + } +} + + +# Disable the options when we first start up. +#send plotOpts "set height 1 ; set width 1 ; unmap" +foreach w {plotOpts hcutFrame vcutFrame} { send $w unmap } + + +# Cut-Plot options callback. +proc doPlotOpts { widget type state args } \ +{ + global plotSpeed curJump curTrack doHcut doVcut + global cutXPos cutYPos + + if {$state} { set not 0 } else { set not 1 } + + switch $widget { + plotSpeed { if {$state} { + send plotAccurate set on 0 ; send plotImgPix set on 0 + } else { + send plotSpeed set on True ; + } + set plotSpeed $not + } + plotAccurate { if {$state} { + send plotImgPix set on 0 ; send plotSpeed set on 0 + } else { + send plotSpeed set on True ; + } + set plotSpeed $not + } + plotImgPix { if {$state} { + send plotAccurate set on 0 ; send plotSpeed set on 0 + } else { + send plotSpeed set on True ; + } + set plotSpeed $not + } + curJump { send curSmooth set on $not ; set curJump $state } + curSmooth { send curJump set on $not ; set curJump $not } + curTrack { set curTrack $state } + } + + # Redraw the plots right away. + if {$widget == "plotSpeed" || $widget == "plotAccurate"} { + cutPlots $cutXPos $cutYPos + } +} +foreach w { plotSpeed plotAccurate plotImgPix curJump curSmooth curTrack } { + send $w addCallback doPlotOpts +} + + +# Toggle the display of the horizontal or vertical cut plot windows. + +proc cutPlotToggle { widget type state args } \ +{ + global doHcut doVcut cutXPos cutYPos hstate vstate + set debug 0 + + set hstate [send hcut get state] + set vstate [send vcut get state] + set w [send display get width] + set h [send display get height] + + if {$debug} { print " " ; print [format "display: %d x %d\n" $w $h] } + + if {$widget == "hcut"} { + set hfw [expr [send hcutFrame get width] - 4] + set hpw [send hcutPlot get width] + if {$state} { + # Enable the plot and resize the main window + if {$vstate} { + send plotOpts set width 134 + } + send hcutFrame "set width $hpw ; set height 132; map" + send hcutPlot "set width $hfw ; set height 128" + send display "set height [ expr ($h + 132) ]; set width $w" + drawHcutAxes 1 + setHcutCursor 1 + if {$vstate} { + send plotOpts "set height 134 ; map" + vcutInit + } + hcutInit ;# Initialize the plot. + } else { + # Disable the plot and resize the main window + setHcutCursor 0 + drawHcutAxes 0 + send hcutPlot clearScreen + send plotOpts "unmap; set height 4" + send hcutFrame "unmap; set width $hfw; set height 4" + send plotOpts "set width 4" + send display "set height [ expr ($h - 128) ] ; set width $w" + if {$vstate} { + vcutInit + } + } + set doHcut $state + } else { + set vfh [expr [send vcutFrame get height] - 4] + set vph [send vcutPlot get height] + if {$state} { + # Enable the plot and resize the main window + if {$hstate} { + send plotOpts set height 134 + } + send vcutFrame "set height $vph ; set width 132 ; map" + send vcutPlot "set height $vfh ; set width 128" + send display "set height $h; set width [ expr ($w + 132) ]" + drawVcutAxes 1 + setVcutCursor 1 + if {$hstate} { + send plotOpts "set height 134 ; set width 134; map" + hcutInit + } + vcutInit ;# Initialize the plot. + } else { + # Disable the plot and resize the main window + setVcutCursor 0 + drawVcutAxes 0 + send vcutPlot clearScreen + send plotOpts "unmap; set width 4" + send vcutFrame "unmap; set height $vfh; set width 4" + send plotOpts "set height 4" + send display "set width [ expr ($w - 128) ] ; set height $h" + if {$hstate} { + hcutInit + } + } + set doVcut $state + } + + if {$debug} { + print [format " hFrame: %d x %d\n" \ + [send hcutFrame get width] [send hcutFrame get height] ] + print [format " hPlot: %d x %d\n" \ + [send hcutPlot get width] [send hcutPlot get height] ] + print [format " vFrame: %d x %d\n" \ + [send vcutFrame get width] [send vcutFrame get height] ] + print [format " vPlot: %d x %d\n" \ + [send vcutPlot get width] [send vcutPlot get height] ] + print [format "state: %d %d\n" $hstate $vstate] + print [format "display: %d x %d\n" $w $h] + } + + cutPlots $cutXPos $cutYPos +} ; foreach w { hcut vcut } { send $w addCallback cutPlotToggle } + + +# Draw the cut plots. +proc cutPlots { xpos ypos args } \ +{ + global doHcut doVcut cutXPos cutYPos hstate vstate + + catch { + if {$doHcut} { + drawHcutIndicator $xpos + if {$hstate} { plotHcut $xpos $ypos } + } + if {$doVcut} { + drawVcutIndicator $xpos + if {$vstate} { plotVcut $xpos $ypos } + } + } + + set cutXPos $xpos ; set cutYPos $ypos +} + + +################################################################################ +# Horizontal Cut-Plot Routines +################################################################################ + +set hcutVec {} + +# Initiailize the horizontal cut-plot +proc hcutInit args \ +{ + global logz cutXScale winWidth cutXPos cutYPos + + # Just get some dummy pixels, we only want the z1/z2 values so we can + # initialize the labels. + set xp [expr [send imagewin get width] / 2 ] + set yp [expr [send imagewin get height] / 2 ] + set pix [send client getPixels $xp $yp 2 2 ] + set z1 [lindex $pix 0] + set z2 [lindex $pix 1] + + send hcutPlot getPhysRes xr yr + send hcutPlot setLogRes $xr $yr + + set logx [send imagewin get width] + set logz [expr ($z2 - $z1)] + set cutXScale [expr ($xr * 1.0) / ($logx * 1.0)] + + # Initialize the labels. + send vcutPlot "setColorIndex 6" + drawHcutLabels $z1 $z2 +} + +# Draw the horizontal cut-plot. +proc plotHcut { xpos ypos } \ +{ + global doHcut cutXScale + global hcutVec cutXPos plotSpeed + + + if { ($xpos == 0 && $ypos == 0) || ! $doHcut } \ + return + + # Do the horizontal cut plot. + set width [send imagewin get width] + if {$plotSpeed} { + set pix [send client getPixels 0 $ypos $width 1 2 5 $cutXScale] + } else { + set pix [send client getPixels 0 $ypos $width 1 2 1 $cutXScale] + } + set z1 [lindex $pix 0] + set z2 [lindex $pix 1] + set vec [lrange $pix 2 end] + + # Erase the last plot rather than clear the screen and redraw + # the new vector. + send hcutPlot setColorIndex background + send hcutPlot drawPolyline $hcutVec + send hcutPlot setColorIndex foreground + send hcutPlot drawPolyline $vec + set hcutVec $vec ;# save for later erasure + + # Mark the cursor position. + drawHcutIndicator $xpos + + # Minimize the screen refreshes to speed things up. + if { [expr "$ypos % 3"] == 0} { + catch { + drawHcutLabels $z1 $z2 ;# redraw the labels + } + send hcutAxes1 redraw ;# redraw the axes markers + send hcutAxes2 redraw + } +} + + +# Create markers to indicate axes on the horizontal cut-plot. +proc drawHcutAxes { state } \ +{ + if {$state} { + send hcutPlot createMarker hcutAxes1 \ + type box \ + createMode noninteractive \ + lineColor gray60 \ + lineStyle 0 \ + x 1 \ + y 60 \ + height 30 \ + width 4096 \ + activated True \ + visible True \ + sensitive False + send hcutPlot createMarker hcutAxes2 \ + type box \ + createMode noninteractive \ + lineColor gray60 \ + lineStyle 0 \ + x 1 \ + y 1 \ + height 60 \ + width 4096 \ + activated True \ + visible True \ + sensitive False + } else { + send hcutAxes1 destroy ; send hcutAxes2 destroy + } +} + +# Create a marker to be used as the cursor indicator. +proc setHcutCursor { state } \ +{ + if {$state} { + set pts { {252 10} {260 10} {256 1} } + + send hcutPlot createMarker hcutCursor \ + type polygon \ + createMode noninteractive \ + lineColor black \ + fill True \ + fillColor yellow \ + x 256 \ + y 12 \ + width 8 \ + height 10 \ + knotSize 0 \ + activated True \ + visible False \ + sensitive False + send hcutCursor setVertices $pts + send hcutCursor set visible True + + } else { + send hcutCursor destroy + } +} + +# Label the axes on the horizontal cut plot. +proc drawHcutLabels { z1 z2 } \ +{ + set mid [expr "($z2-$z1)/2.0+$z1"] + set low [expr "($mid-$z1)/2.0+$z1"] + set high [expr "($z2-$mid)/2.0+$mid"] + + send hcutPlot "setColorIndex 6 ; \ + drawAlphaText 2 10 [format "%.1f" $z2] ; \ + drawAlphaText 2 34 [format "%.1f" $high] ; \ + drawAlphaText 2 64 [format "%.1f" $mid] ; \ + drawAlphaText 2 94 [format "%.1f" $low] ; \ + drawAlphaText 2 120 [format "%.1f" $z1]" +} + +# Draw the cursor position indicator on the horizontal cut plot. +proc drawHcutIndicator { xpos } \ +{ + global cutXScale cutXPos + + send hcutCursor move [expr ($xpos * $cutXScale)] 12 + set cutXPos $xpos +} + +# Track the cursor while in the cut-graph window. +proc hcutWCSUpdate { x y args } \ +{ + global cutYPos curTrack + if {$curTrack} { + wcsUpdate $x $cutYPos + } + drawHcutIndicator $x +} + + + + +################################################################################ +# Vertical Cut-Plot Routines +################################################################################ + +set vcutVec {} + +# Initiailize the vertical cut-plot +proc vcutInit args \ +{ + global cutYScale winWidth cutXPos cutYPos + + # Just get some dummy pixels, we only want the z1/z2 values so we can + # initialize the labels. + set xp [expr [send imagewin get width] / 2 ] + set yp [expr [send imagewin get height] / 2 ] + set pix [send client getPixels $xp $yp 2 2 ] + set z1 [lindex $pix 0] + set z2 [lindex $pix 1] + + send vcutPlot getPhysRes xr yr + send vcutPlot setLogRes $xr $yr + + set logy [send imagewin get height] + set logz [expr ($z2 - $z1)] + set cutYScale [expr ($yr * 1.0) / ($logy * 1.0)] + + # Initialize the labels. + send vcutPlot "setColorIndex 6; reset" + drawVcutLabels $z1 $z2 +} + +# Draw the horizontal cut-plot. +proc plotVcut { xpos ypos } \ +{ + global doVcut cutYScale + global vcutVec cutXPos cutYPos plotSpeed + + + if { ($xpos == 0 && $ypos == 0) || ! $doVcut } \ + return + + # Do the vertical cut plot. + set height [send imagewin get height] + if {$plotSpeed} { + set pix [send client getPixels $xpos 0 1 $height 3 5 $cutYScale] + } else { + set pix [send client getPixels $xpos 0 1 $height 3 1 $cutYScale] + } + set z1 [lindex $pix 0] + set z2 [lindex $pix 1] + set vec [lrange $pix 2 end] + + # Draw the vector. + send vcutPlot setColorIndex background + send vcutPlot drawPolyline $vcutVec + send vcutPlot setColorIndex foreground + send vcutPlot drawPolyline $vec + set vcutVec $vec ;# save for later erasure + + # Mark the cursor position. + drawVcutIndicator $ypos + + # Minimize the screen refreshes to speed things up. + if { [expr "$xpos % 3"] == 0} { + catch { + drawVcutLabels $z1 $z2 ;# redraw the labels + } + send vcutAxes1 redraw ;# redraw the axes markers + send vcutAxes2 redraw + } +} + +# Erase the last plot rather than clear the screen and redraw it all. The +# erase is done by redrawing the last vector in the the background color. +proc eraseOldVcut args \ +{ + global cutYPos vcutVec + + send vcutPlot setColorIndex background + send vcutPlot drawPolyline $vcutVec + send vcutPlot setColorIndex foreground +} + +# Draw the horizontal cut-plot. +# Create markers to indicate axes on the vertical cut-plot. +proc drawVcutAxes { state } \ +{ + if {$state} { + send vcutPlot createMarker vcutAxes1 \ + type box \ + createMode noninteractive \ + lineColor gray60 \ + lineStyle 0 \ + x 60 \ + y 1 \ + height 4096 \ + width 30 \ + activated True \ + visible True \ + sensitive False + send vcutPlot createMarker vcutAxes2 \ + type box \ + createMode noninteractive \ + lineColor gray60 \ + lineStyle 0 \ + x 1 \ + y 1 \ + width 60 \ + height 4096 \ + activated True \ + visible True \ + sensitive False + } else { + send vcutAxes1 destroy ; send vcutAxes2 destroy + } +} + +# Create a marker to be used as the cursor indicator. +proc setVcutCursor { state } \ +{ + if {$state} { + set pts { {10 252} {10 260} {1 256} } + + send vcutPlot createMarker vcutCursor \ + type polygon \ + createMode noninteractive \ + lineColor black \ + fill True \ + fillColor yellow \ + x 12 \ + y 256 \ + width 10 \ + height 8 \ + knotSize 0 \ + activated True \ + visible False \ + sensitive False + send vcutCursor setVertices $pts + send vcutCursor set visible True + + } else { + send vcutCursor destroy + } +} + +# Label the axes on the vertical cut plot. +proc drawVcutLabels { z1 z2 } \ +{ + set mid [expr "($z2-$z1)/2.0+$z1"] + set low [expr "($mid-$z1)/2.0+$z1"] + set high [expr "($z2-$mid)/2.0+$mid"] + + # Initialize the label strings and positions. + set labels {} + foreach i [list $z2 $high $mid $low $z1] { + lappend labels [ format "%.1f" $i ] + } + set xposns { 2 28 58 88 112 } + + send vcutPlot "setColorIndex 6" + + # Draw each label vertically down the position since we can't rotate + # the text. + set xp 0 + foreach lab $labels { + set chars [split $lab {} ] + set yp 12 + set xpos [lindex $xposns $xp] + foreach ch $chars { + if {$ch == "."} { incr yp -4 } + send vcutPlot drawAlphaText $xpos $yp $ch + incr yp 10 + } + incr xp + } +} + + +# Draw the cursor position indicator on the horizontal cut plot. +proc drawVcutIndicator { ypos } \ +{ + global cutYScale cutYPos + + send vcutCursor move 12 [expr ($ypos * $cutYScale)] + set cutYPos $ypos +} + + +# Track the cursor while in the cut-graph window. +proc vcutWCSUpdate { x y args } \ +{ + global cutXPos curTrack + if {$curTrack} { + wcsUpdate $cutXPos $y + } + drawVcutIndicator $y +} + + + +################################################################################ +# UTILITY ROUTINES +################################################################################ + + +# TICSTEP -- Utility routine to compute nice ticmark steps in plots. +# [ NOT CURRENTLY USED. ] + +proc ticstep { range nsteps } \ +{ + set t2 0.301029996 + set t5 0.698970004 + set df [ expr "$range / double($nsteps + 1)" ] + if {$df > 0.0} { + set p1 [ expr "log10(double($df))" ] + } else { + set p1 [ expr "log10(double(-$df))" ] + } + set p2 [ expr "int($p1)" ] + set p3 [ expr "$p1 - $p2" ] + + if { $p3 < 0.0 } { + set p3 [ expr "$p2 + 1.0" ] + set p2 [ expr "$p2 - 1.0" ] + } + + if { $p3 < 1.0e-10 } { + set ticstep [ expr "pow(double(10.0),double($p2))" ] + } elseif { $p3 > 0. && $p3 <= $t2 } { + set ticstep [ expr "pow(double(10.0),double($p2 + $t2))" ] + } elseif { $p3 > $t2 && $p3 <= $t5 } { + set ticstep [ expr "pow(double(10.0),double($p2 + $t5))" ] + } elseif { $p3 > $t5 && $p3 <= 1.0 } { + set ticstep [ expr "pow(double(10.0),double($p2 + 1.))" ] + } else { + set ticstep $df + } + + set logtic [ expr "int(log10($ticstep)) - 1" ] + set scale [ expr "pow(double(10.0),double($logtic))" ] + set ticstep [ expr "int( ($ticstep / $scale) * $scale)" ] + + if {$ticstep < 0.1} { set ticstep 0.10 } + + return $ticstep +} + + + +# Cursor positioning routines +#---------------------------- + +proc move_cursor { xstep ystep args } \ +{ + set raster 0 + send imagewin getCursorPos rx ry + send imagewin setCursorPos [expr $rx + $xstep] [expr $ry + $ystep] $raster +} + + +# Called when the number of frames changes. +proc setNFrames {param old new} \ +{ + global frameMenuDescription nframes frames + + set nframes $new + if {$old != $new} { + foreach i {prevButton nextButton} { + send $i set sensitive [expr "$nframes > 1"] + } + + if {$nframes > 0} { + + # Creates the Frames menu on the main image window. + set items { } + for {set i 1} {$i <= $nframes} {incr i} { + set l [format "%2d" $i] + lappend items "$l f.exec \{send client setFrame $i\} sensitive \{[expr \"$nframes >= $i\"]\}" + } + editMenu frameMenu frameButton $items + + # Create the menu for the blink frames list. + set items { } + for {set i 0} {$i <= $nframes} {incr i} { + set j [expr ($i + 1)] + if {$i == 0} { + set s "\"none\" f.exec \{send brFrameBTN set label \" \"\}" + lappend items $s + } else { + set l [format "%2d" $i] + lappend items "$l f.exec \{send brFrameBTN set label $l\} sensitive \{[expr \"$nframes >= $i\"]\}" + } + } + for {set i 1} {$i <= $nframes} {incr i} { + send brFrame$i setSensitive True + send tFrame$i setSensitive True + regsub -all BTN $items $i nmenu + editMenu frame${i}Menu brFrame$i $nmenu + } + + } else { + editMenu frameMenu frameButton $frameMenuDescription + + for {set i 1} {$i <= $nframes} {incr i} { + send brFrame$i setSensitive True + send tFrame$i setSensitive True + editMenu frame${i}Menu brFrame$i $frameMenuDescription + } + } + } + + for {set i 1} {$i <= 16} {incr i} { + if {$i <= $nframes} { + send frame$i map + } else { + send frame$i unmap + } + } + + if {$nframes > 2} { + setAllTileFrames + } +}; send nframes addCallback setNFrames + + +# Set the default main window frame menu. +set frameMenuDescription { + {" 1" f.exec "send client setFrame 1" sensitive {[expr "$nframes >= 1"]} } + {" 2" f.exec "send client setFrame 2" sensitive {[expr "$nframes >= 2"]} } + {" 3" f.exec "send client setFrame 3" sensitive {[expr "$nframes >= 3"]} } + {" 4" f.exec "send client setFrame 4" sensitive {[expr "$nframes >= 4"]} } +}; createMenu frameMenu frameButton $frameMenuDescription + + + + +# Initialize the frame lists panels (blink panel and tile tab). +for {set i 1} {$i <= 16} {incr i} { + send brFrame$i set label [format "%2d" $i] + send tFrame$i set label [format "%2d" $i] + if {$i <= 4} { + send brFrame$i setSensitive True + send tFrame$i "setSensitive True ; set state 1" + } else { + send brFrame$i setSensitive False + send tFrame$i "setSensitive False ; set state 0" + } + createMenu frame${i}Menu brFrame$i $frameMenuDescription +} + + +# Called when the frame being displayed changes. +proc frameChanged {param old new} \ +{ + global frame + + set frame $new + send frameButton set label [format "%2d" $frame] + + # The first time we request frame 5 or higher reset + # the extra frame buttons on the control panel to make + # them visible. + if {$new >= 5} { + send frlistBox set width 49 + } + wcsFmtFBConfig + drawCompass +}; send frame addCallback frameChanged + + +# Called when the frame buffer configuration changes. +proc setFrameSize {param old new} \ +{ + global frameWidth frameHeight frameDepth + set frameWidth [lindex $new 0] + set frameHeight [lindex $new 1] + set frameDepth [lindex $new 2] + + wcsFmtFBConfig +}; send frameSize addCallback setFrameSize + +# Called when the current frame is zoomed or panned. +proc setFrameView {param old new} \ +{ + global frameZoomX frameZoomY frameCenterX frameCenterY + global frameScaleX frameScaleY frameOffsetX frameOffsetY + global frame auto_reg blinkFrames + + # Update the position. + set frameZoomX($frame) [lindex $new 0] + set frameZoomY($frame) [lindex $new 1] + set frameCenterX($frame) [lindex $new 2] + set frameCenterY($frame) [lindex $new 3] + set frameScaleX($frame) [lindex $new 4] + set frameScaleY($frame) [lindex $new 5] + set frameOffsetX($frame) [lindex $new 6] + set frameOffsetY($frame) [lindex $new 7] + + # If auto-registering is enabled, do it now, but only when we're updating + # the current display frame, and only if that frame is in the framelist. + + if {$auto_reg == 1 && $frame == [send frameButton get label]} { + if {[string first $frame $blinkFrames] != -1} { + send client offsetRegister \{$blinkFrames\} + } + + foreach f $blinkFrames { + if {$f != $frame} { + set frameZoomX($f) $frameZoomX($frame) + set frameZoomY($f) $frameZoomY($frame) + set frameCenterX($f) $frameCenterX($frame) + set frameCenterY($f) $frameCenterY($frame) + set frameScaleX($f) $frameScaleX($frame) + set frameScaleY($f) $frameScaleY($frame) + } + } + } + deleteAllRulers + +}; send frameView addCallback setFrameView + + +# Called when the color enhancement for a frame changes. +proc setEnhancement {param old new} \ +{ + global enhancement + set enhancement([lindex $new 0]) [lrange $new 1 end] +}; send enhancement addCallback setEnhancement + +# Called when the frame title changes (e.g. frame change or new frame loaded). +proc setTitle {param old new} \ +{ + set lab [string trimright $new] + send imageTitle set label $lab + + set image [lindex [ split $lab '-'] 0 ] + wcsFmtImname $image + + set title [lindex [ split $lab '-'] 1 ] + wcsFmtImtitle $title + deleteAllRulers +}; send frameTitle addCallback setTitle + +# Called when the image is flipped in an axis. +proc setFlip {param old new} \ +{ + if {$param == "xflip"} { + send xflipButton set state [true $new] + } else { + send yflipButton set state [true $new] + } + deleteAllRulers +}; foreach i {xflip yflip} { send $i addCallback setFlip } + + +# Various general callbacks. + +proc Quit args \ +{ + global ism_enable + + if {$ism_enable} { + catch { send wcspix quit } + } + send client Quit +} +proc nextFrame args { send client nextFrame } +proc prevFrame args { send client prevFrame } +proc setColormap { mapno } { send client setColormap $mapno } +proc xflip args { send client flip x ; flipRegister } +proc yflip args { send client flip y ; flipRegister } +proc xyflip args { send client flip x y ; flipRegister } +proc flipRegister args \ +{ + global auto_reg frame blinkFrames + + if {$auto_reg == 1 && $frame == [send frameButton get label]} { + if {[string first $frame $blinkFrames] != -1} { + send client offsetRegister \{$blinkFrames\} + } + } +} + + + +# Initialize bitmaps. +createBitmap xflip 16 16 { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x08, 0x18, 0x18, + 0x1c, 0x38, 0xfe, 0x7f, 0xfe, 0x7f, 0x1c, 0x38, 0x18, 0x18, 0x10, 0x08, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00} + +createBitmap yflip 16 16 { + 0x00, 0x00, 0x80, 0x01, 0xc0, 0x03, 0xe0, 0x07, 0xf0, 0x0f, 0x80, 0x01, + 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0xf0, 0x0f, + 0xe0, 0x07, 0xc0, 0x03, 0x80, 0x01, 0x00, 0x00} + +createBitmap qmark 16 16 { + 0x00, 0x00, 0x00, 0x00, 0xf0, 0x07, 0xf8, 0x0f, 0x18, 0x0c, 0x18, 0x0c, + 0x18, 0x0e, 0x00, 0x07, 0x80, 0x03, 0x80, 0x01, 0x80, 0x01, 0x00, 0x00, + 0x80, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x00} + +createBitmap larrow 16 16 { + 0x00, 0x00, 0x00, 0x03, 0x80, 0x03, 0xc0, 0x03, 0xe0, 0x1e, 0x70, 0x1e, + 0x38, 0x18, 0x1c, 0x18, 0x1c, 0x18, 0x38, 0x18, 0x70, 0x1e, 0xe0, 0x1e, + 0xc0, 0x03, 0x80, 0x03, 0x00, 0x03, 0x00, 0x00} + +createBitmap rarrow 16 16 { + 0x00, 0x00, 0xc0, 0x00, 0xc0, 0x01, 0xc0, 0x03, 0x78, 0x07, 0x78, 0x0e, + 0x18, 0x1c, 0x18, 0x38, 0x18, 0x38, 0x18, 0x1c, 0x78, 0x0e, 0x78, 0x07, + 0xc0, 0x03, 0xc0, 0x01, 0xc0, 0x00, 0x00, 0x00} + +createBitmap panel 16 16 { + 0x00, 0x00, 0xf8, 0x1f, 0xf8, 0x1f, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, + 0x98, 0x19, 0x98, 0x19, 0x98, 0x19, 0x98, 0x19, 0x98, 0x19, 0x18, 0x18, + 0x18, 0x18, 0x18, 0x18, 0xf8, 0x1f, 0xf8, 0x1f} + +createBitmap brightness 15 15 { + 0x00, 0x00, 0x80, 0x00, 0x84, 0x10, 0xe8, 0x0b, 0x10, 0x04, 0x08, 0x08, + 0x08, 0x08, 0x0e, 0x38, 0x08, 0x08, 0x08, 0x08, 0x10, 0x04, 0xe8, 0x0b, + 0x84, 0x10, 0x80, 0x00, 0x00, 0x00} + +createBitmap contrast 15 15 { + 0x00, 0x00, 0x00, 0x00, 0xc0, 0x01, 0x30, 0x07, 0x08, 0x0f, 0x08, 0x0f, + 0x04, 0x1f, 0x04, 0x1f, 0x04, 0x1f, 0x08, 0x0f, 0x08, 0x0f, 0x30, 0x07, + 0xc0, 0x01, 0x00, 0x00, 0x00, 0x00} + +createBitmap bar 10 10 { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0x00, 0x42, 0x00, 0x7e, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00} + +createBitmap dot 16 16 { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x01, + 0xe0, 0x03, 0xf0, 0x07, 0xf0, 0x07, 0xf0, 0x07, 0xe0, 0x03, 0xc0, 0x01, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00} + +createBitmap null 16 16 { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00} + +createBitmap solid 64 24 { + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 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, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00} + +catch { send controlButton "set bitmap panel; addCallback panel" } +catch { send helpButton "set bitmap qmark; addCallback Help" } +send xflipButton "set bitmap xflip; addCallback xflip" +send yflipButton "set bitmap yflip; addCallback yflip" +send prevButton "set bitmap larrow; addCallback prevFrame" +send nextButton "set bitmap rarrow; addCallback nextFrame" +send blinkPanel "set bitmap panel" + + + +# WINDOW the current frame. +set old_cm_x 0 +set old_cm_y 0 + +proc windowColormap {x y} \ +{ + global winWidth winHeight maxContrast old_cm_x old_cm_y + + # For efficiency we won't compute the sqrt of the distance but instead + # just compare the square. Use a threshold of 6 pixels so when we + # narrow in on the ROI we refine the colormap more precisely. + + set diff [expr (($old_cm_x - $x) * ($old_cm_x - $x)) + \ + (($old_cm_y - $y) * ($old_cm_y - $y))] + + # Keep the old position. + set old_cm_x $x + set old_cm_y $y + if {$diff > 36} { + return + } + + send client windowColormap \ + [expr "double($x) / $winWidth"] \ + [expr "(double($y) - $winHeight / 2.0) / $winHeight * \ + $maxContrast * 2.0"] +} + +proc updateColormap {x y} \ +{ + global winWidth winHeight maxContrast old_cm_x old_cm_y + + set old_cm_x $x + set old_cm_y $y + send client updateColormap \ + [expr "double($x) / $winWidth"] \ + [expr "(double($y) - $winHeight / 2.0) / $winHeight * \ + $maxContrast * 2.0"] +} + + + +# WINDOW the current frame, but only one color at a time. +proc windowRGB {color x y save_flag} \ +{ + global winWidth winHeight maxContrast + + send client windowRGB $color \ + [expr "double($x) / $winWidth"] \ + [expr "(double($y) - $winHeight / 2.0) / $winHeight * \ + $maxContrast * 2.0"] $save_flag +} + + +# ZOOM and PAN. +set xcen 0 +set ycen 0 +foreach i $frames {set zoomindex($i) 0} +set nzoomfactors 0 +foreach i $zoomfactors { + set zoomfactor($nzoomfactors) $i + incr nzoomfactors +} + +# Zoom or pan image at given center. +proc zoom {x y} \ +{ + global xcen ycen frame + global zoomindex zoomfactor + global nzoomfactors + + set rx $x; set ry $y + set raster 0 + + # Convert raw screen coordinates to frame buffer raster coordinates. + send imagewin unmapPixel $x $y raster rx ry + + # Select a pixel. + set rx [expr "int ($rx)"] + set ry [expr "int ($ry)"] + + # If the pointer did not move (much) zoom the image, otherwise + # pan it. + + send imagewin setCursorType busy + if {sqrt(pow($x-$xcen, 2) + pow($y-$ycen, 2)) < 4} { + set zoomindex($frame) [expr [incr zoomindex($frame)] % $nzoomfactors] + set mag $zoomfactor($zoomindex($frame)) + send client zoom $mag $mag $rx $ry + } else { + send client pan $rx $ry + set xcen $x + set ycen $y + } + + # Move the pointer so that it tracks the object feature the user + # selected. + + send imagewin setCursorPos $rx $ry $raster + send imagewin getCursorPos xcen ycen + send imagewin setCursorType idle +} + + +# Zoom using a marker to indicate the region to be displayed. +proc zoomMarker {marker aspect} \ +{ + global xcen ycen frame + global winWidth winHeight + global zoomindex nzoomfactors + global auto_reg frame frameOffsetX frameOffsetY + + # getRegion returns: "rectangle raster x y width height rotangle". + set region [send $marker getRegion unmap] + + set raster [lindex $region 1] + set xcen [expr "int([lindex $region 2]) + 0.5"] + set ycen [expr "int([lindex $region 3]) + 0.5"] + set snx [expr "[lindex $region 4] * 2"] + set sny [expr "[lindex $region 5] * 2"] + + # Compute the magnification ratio. + set xmag [expr "$winWidth / $snx"] + set ymag [expr "$winHeight / $sny"] + if {$aspect == "equal"} { + set mag [expr "($xmag < $ymag) ? $xmag : $ymag"] + set xmag $mag; set ymag $mag + } + + # Zoom the image. + send client zoomAbs \ + $xmag $ymag $xcen $ycen \ + $frameOffsetX($frame) $frameOffsetY($frame) + + # The following causes a button2 to redisplay the full image. + send imagewin setCursorPos $xcen $ycen $raster + send imagewin getCursorPos xcen ycen + set zoomindex($frame) [expr "$nzoomfactors - 1"] +} + +# Pan the display frame one width/height in a given direction. +proc moveFrame { xs ys args } \ +{ + global winWidth winHeight frame + global frameWidth frameHeight + global frameZoomX frameZoomY frameCenterX frameCenterY + global frameOffsetX frameOffsetY + + # Get the step size for the new position. + set xstep_size [ expr "$xs * $winWidth / $frameZoomX($frame)" ] + set ystep_size [ expr "$ys * $winHeight / $frameZoomY($frame)" ] + + # Set the boundaries so we only move up to the edges. + set xl [ expr "($winWidth / $frameZoomX($frame)) / 2 + 1" ] + set yl [ expr "($winHeight / $frameZoomY($frame)) / 2 + 1" ] + set xu [ expr "$frameWidth - $xl" ] + set yu [ expr "$frameHeight - $yl" ] + + # Set the new center position. + set nxc [ expr "$frameCenterX($frame) + $xstep_size" ] + set nyc [ expr "$frameCenterY($frame) + $ystep_size" ] + if {$nxc < $xl} { set nxc $xl } + if {$nxc > $xu} { set nxc $xu } + if {$nyc < $yl} { set nyc $yl } + if {$nyc > $yu} { set nyc $yu } + + # Finally, send the command to move the frame. + send client zoomAbs \ + $frameZoomX($frame) $frameZoomY($frame) $nxc $nyc \ + $frameOffsetX($frame) $frameOffsetY($frame) +} + +proc resetView {param old new} { + global zoomindex xcen ycen frames + global frameWidth frameHeight + + if {$new == "done"} { + foreach i $frames { + send client setFrame $i + set xcen [expr $frameWidth / 2] + set ycen [expr $frameHeight / 2] + send client zoom 1 1 $xcen $ycen + set zoomindex($i) 0 + send client setColormap Grayscale + normalize + } + send client setFrame 1 + } +}; #send initialize addCallback resetView + + +# CURSOR READ stuff. +proc setCursorMode {param old new} \ +{ + global cursorMode + + if {$new == "on"} { + send imagewin "activate; setCursorType ginMode" + set cursorMode 1 + } elseif {$new == "off"} { + send imagewin "setCursorType idle; deactivate" + set cursorMode 0 + } +} + +proc keyInput {widget event sx sy data} \ +{ + global cursorMode frame + + if {!$cursorMode || $event != "keyPress"} \ + return + if {[lindex $data 0] == "??"} \ + return + + # Convert raw screen coordinates to raster pixel coordinates. + send imagewin unmapPixel $sx $sy raster rx ry + + # Return the cursor value and exit cursor mode. + send client retCursorVal $rx $ry $frame 1 [lindex $data 0] +} + +proc resetCursorMode args { + global cursorMode frame + if {$cursorMode} { + send imagewin getCursorPos x y + send client retCursorVal $x $y $frame 1 ^D + } +}; send initialize addCallback resetCursorMode + +send cursorMode addCallback setCursorMode +send imagewin addCallback keyInput input + + +# MARKER stuff. The active marker is determined by the global variable +# "marker", which is the marker the pointer is in, or which the pointer +# was most recently in. + +# Translations when pointer is inside marker. +set markerTranslations { \ +!Shift : m_rotateResize() + : m_moveResize() + !Shift : m_raise() m_markpos() + : m_raise() m_markposAdd() + : m_redraw() m_destroyNull() + : m_lower() + : popup(markerMenu) + : popdown(markerMenu) + !Ctrl b: call(prevFrame,$name) + !Ctrl f: call(nextFrame,$name) + !Ctrl h: call(move_cursor,-1,0) + !Ctrl j: call(move_cursor,0,1) + !Ctrl k: call(move_cursor,0,-1) + !Ctrl l: call(move_cursor,1,0) + !Ctrl n: call(normalize) + !Ctrl c: call(cpZoomAction,centerFrame) + !Ctrl i: call(cpInvert) + !Ctrl m: call(cpMatchFrames) + !Ctrl r: call(cpRegisterFrames) + !Ctrl p: call(togglePanner) + !Alt 1: call(cpSetFrame,frame1) + !Alt 2: call(cpSetFrame,frame2) + !Alt 3: call(cpSetFrame,frame3) + !Alt 4: call(cpSetFrame,frame4) + !Ctrl 1: call(cpZoom,1,1,fixed) + !Ctrl 2: call(cpZoom,2,2,fixed) + !Ctrl 3: call(cpZoom,3,3,fixed) + !Ctrl 4: call(cpZoom,4,4,fixed) + !Ctrl 5: call(cpZoom,5,5,fixed) + !Ctrl 6: call(cpZoom,6,6,fixed) + !Ctrl 7: call(cpZoom,7,7,fixed) + !Ctrl 8: call(cpZoom,8,8,fixed) + !Ctrl 9: call(cpZoom,9,9,fixed) + BackSpace: m_deleteDestroy() + Delete: m_deleteDestroy() + : m_input() + : track-cursor() call(wcsUpdate,$x,$y) call(magnifierMapImage,$x,$y) +} + +# Popup menu in effect when inside marker. +createMenu markerMenu imagewin { + { Marker f.title } + { f.dblline } + { Zoom f.exec { + zoomMarker $marker equal + send $marker destroy + } } + { Fill f.exec { + zoomMarker $marker fill + send $marker destroy + } } + { Print f.exec { + send $marker getRect interior x0 y0 nx ny + setPrintCorners $x0 [expr $y0 + $ny -1] \ + [expr $x0 + $nx -1] $y0 + send client print $x0 $y0 $nx $ny + } } + { Save f.exec { + send imagewin setCursorType busy + send $marker getRect interior x0 y0 nx ny + send client save $x0 $y0 $nx $ny + send imagewin setCursorType idle + } } + { Info f.exec { + send infoText append \ + [format "%s\n" [send $marker getRegion unmap]] + } } + { Unrotate f.exec { + send $marker setAttribute rotangle 0 + } } + { f.dblline } + { Color f.menu markerColor } + { Type f.menu markerType } + { f.dblline } + { Destroy f.exec { + send $marker destroy + } } +} + +createMenu markerType markerMenu { + { Type f.title } + { f.dblline } + { Rectangle f.exec "m_setType $marker rectangle" } + { Box f.exec "m_setType $marker box" } + { Circle f.exec "m_setType $marker circle" } + { Ellipse f.exec "m_setType $marker ellipse" } + { Polygon f.exec "m_setType $marker polygon" } +} + +createMenu markerColor markerMenu { + { Color f.title } + { f.dblline } + { "" f.exec "m_setColor $marker black" + bitmap solid foreground black } + { "" f.exec "m_setColor $marker white" + bitmap solid foreground white } + { "" f.exec "m_setColor $marker red" + bitmap solid foreground red } + { "" f.exec "m_setColor $marker green" + bitmap solid foreground green } + { "" f.exec "m_setColor $marker blue" + bitmap solid foreground blue } + { "" f.exec "m_setColor $marker magenta" + bitmap solid foreground magenta } + { "" f.exec "m_setColor $marker cyan" + bitmap solid foreground cyan } + { "" f.exec "m_setColor $marker yellow" + bitmap solid foreground yellow } +} + +proc m_setType {marker type} { + send $marker "markpos; set type $type; redraw" +} +proc m_setColor {marker color} { + send $marker "markpos; + set lineColor $color; set highlightColor $color; redraw" +} + +# Callback executed when a marker gets or loses the focus. +proc selectMarker {active_marker event event_data} \ +{ + global marker + switch $event { + focusIn { set marker $active_marker } + focusOut { } + } +} + +# Create marker action. Makes a new marker. +proc makeMarker {parent x y} \ +{ + global markerTranslations markno + set marker marker$markno; incr markno + + send $parent createMarker $marker \ + type rectangle \ + createMode interactive \ + translations $markerTranslations \ + x $x \ + y $y + + send $marker addCallback selectMarker focusIn focusOut +} + + + +# WCSBOX -- Real time coordinate display. + +set track_enable 0 +set last_x 0 +set last_y 0 + +proc wcsUpdate {x y} \ +{ + global track_enable frame pixtab_up tabTop + global frameWidth frameHeight redraw_compass + global ism_enable wcsLabels last_x last_y + global ct_warn plotSpeed doHcut doVcut + + + # If the cursor was frozen release it now. + if {$ct_warn} { + curtrack_destroy + } + + # Convert screen coords to raster pixel. + send imagewin unmapPixel $x $y raster rx ry rz + + # Set the current frame to the frame the pointer is within. + if {$frame && $raster} { + set track_frame [send client getFrame $raster] + if {$frame != $track_frame} { + send client setFrame $track_frame + } + } + + # Update coords box. + if {$raster} { + set text [send client encodewcs $rx $ry $rz] + scan $text "%g %g %g" nx ny nz + } else { + set text [format " %7.2f %7.2f %9.1f " $rx $ry $rz] + set nx $rx ; set ny $ry ; set nz $rz + } + + # Update the coords panel and pixel table. + wcsFmtSValue $nz + if {$pixtab_up} { + updatePixelTable $x $y $nx $ny + } + + # If the ISM is running update the coords box with all the selected + # options, otherwise just write the one-line frame wcs coords. + if {$ism_enable} { + updateCoordsBox + + } else { + # Update the on-screen marker. + if {$track_enable} { + send wcsbox "set text \{$text\}; redraw noerase" + } + + # Update the control panel readout (always done). + if {$wcsLabels} { + set ln [format " X: %12s Y: %12s WCS: Display" $nx $ny] + } else { + set ln [format " %12s %12s Display" $nx $ny] + } + send wtWcs1 set string $ln + + if {$redraw_compass} \ + drawCompass + } + + + # Update the cut-plots if enabled. If we're set for speed the don't + # track the really large cursor motions, wait till the differences are + # small indicating a finer motion. + if {$doHcut || $doVcut} { + set dist [ expr "sqrt(pow(($last_x - $x),2) + pow(($last_y - $y),2))" ] + if {($plotSpeed && $dist < 30) || ! $plotSpeed} { + cutPlots $x $y + } + } + + # Save the position so we can track differences with last position. + set last_x $x + set last_y $y +} + + +proc setTrack {state} \ +{ + global ism_enable track_enable wcsboxGeom + global winWidth winHeight up_todo + + if {$state} { + if {$track_enable} \ + return + + send imagewin createMarker wcsbox { + type text + createMode noninteractive + width 27ch + height 1ch + lineWidth 0 + imageText true + textBgColor black + textColor yellow + visible false + } + + set box_width [send wcsbox get width] + set box_height [send wcsbox get height] + set defGeom [format "%sx%s-5-5" $box_width $box_height] + send imagewin parseGeometry $wcsboxGeom $defGeom x y width height + + send wcsbox setAttributes \ + x $x \ + y $y \ + activated true \ + visible true \ + sensitive true + + send wcsbox { + addCallback wcsboxDestroyCallback destroy + addCallback wcsboxMoved moveResize + } + + send imagewin addCallback wcsboxWindowResize resize + set track_enable 1 + send imagewin getCursorPos x y + wcsUpdate $x $y + magnifierMapImage $x $y + + # Turn on the option toggles on the control panel. + foreach n {1 2 3 4} { + if {[send sysWcs$n get label] != "None"} { + send wiWcs$n set on True + } + } + if {$ism_enable} { + resizeCoordsBox $up_todo + } + + } elseif {$track_enable} { + set track_enable 0 + send wcsbox destroy + + # Turn off the option toggles on the control panel. + foreach w {wiWcs1 wiWcs2 wiWcs3 wiWcs4} { send $w set on False } + resizeCoordsBox 0 + } + updateCoordsBox +} + +proc wcsboxDestroyCallback args \ +{ + global track_enable + send imagewin deleteCallback wcsboxWindowResize + set track_enable 0 +} + +# If the window is resized make the wcsbox track the corner. +proc wcsboxWindowResize args \ +{ + global track_enable + global wcsboxGeom + + if {$track_enable} { + # Get new location. + set box_width [send wcsbox get width] + set box_height [send wcsbox get height] + set defGeom [format "%sx%s-5-5" $box_width $box_height] + send imagewin parseGeometry $wcsboxGeom $defGeom x y width height + + # Move the marker. + send wcsbox "\ + deleteCallback wcsboxMoved; \ + markpos; setAttributes x $x y $y; redraw; \ + addCallback wcsboxMoved moveResize" + set wcsboxGeom [send imagewin getGeometry $x $y $width $height] + } +} + +proc wcsboxMoved {marker event position} \ +{ + global wcsboxGeom + send wcsbox getRect boundary x y width height + set wcsboxGeom [send imagewin getGeometry $x $y $width $height] +} + +proc resetWcsbox {param old new} \ +{ + global track_enable wcsboxGeom displayCoords + if {$new == "done"} { + setTrack [true $displayCoords] + } elseif {$track_enable} { + setTrack 0 + if {$new == "restart"} { + set wcsboxGeom -5-5 + } + } +}; send initialize addCallback resetWcsbox + + + +#--------------------- +# FRAME BLINK. +#--------------------- +set blinkId 0 +set blinkIndex 0 + +proc toggleBlink args \ +{ + global blinkId blinkRate blinkIndex + global optionsMenuDescription + + if {$blinkId} { + deleteTimedCallback $blinkId + set blinkId 0 + } else { + set blinkId [postTimedCallback blink [expr int($blinkRate * 1000)]] + } + + set blinkIndex 0 + editMenu optionsMenu viewButton $optionsMenuDescription +} + +proc blink args \ +{ + global blinkId blinkRate blinkFrames blinkIndex + + send client setFrame [lindex $blinkFrames $blinkIndex] + incr blinkIndex + if {$blinkIndex >= [llength $blinkFrames]} { + set blinkIndex 0 + } + + set blinkId [postTimedCallback blink [expr int($blinkRate * 1000)]] +} + +proc resetBlink args \ +{ + global blinkId + if {$blinkId} \ + toggleBlink +}; send initialize addCallback resetBlink + + + +# Normalize -- Reset the view parameters for the current frame. +proc normalize args \ +{ + global zoomindex zoomfactor + global frameWidth frameHeight + global xcen ycen frame + + #set zoomindex($frame) 0 + #set xcen [expr $frameWidth / 2] + #set ycen [expr $frameHeight / 2] + #send client zoom 1 1 $xcen $ycen + send client updateColormap 0.5 1.0 +} + + +# Popdown menus. +createMenu fileMenu fileButton { + { "Info" f.exec { panelTabToggle info_panel } } + { "Load" f.exec { + panelTabToggle load_panel + set panel_up 1 + } } + { "Save" f.exec { Save } } + { "Save As..." f.exec { panelTabToggle save_panel } } + { "Print" f.exec { + send imagewin setCursorType busy + Print + send imagewin setCursorType idle + } } + { "Print Setup" f.exec { panelTabToggle print_panel } } + { f.dblline } + { "Reset" f.exec { + # Do a hard reset. + send client Reset + #resetView initialize done done + } } + { "Debug Panel" f.exec { tclPanel 1 } } + { "Quit" f.exec { Quit } } +} + +createMenu viewMenu viewButton { + { "Next frame" f.exec nextFrame } + { "Prev frame" f.exec prevFrame } + { f.dblline } + { "Colormap" f.menu cmapMenu } + { "Flip" f.menu flipMenu } + { f.dblline } + { "Equal aspect" f.exec { + set xmag $frameZoomX($frame) + set ymag $frameZoomY($frame) + set zoom [expr ($xmag + $ymag) / 2.0] + cpZoom $zoom $zoom fixed + } } + { "Integer zoom" f.exec { + set xmag [expr round ($frameZoomX($frame))] + set ymag [expr round ($frameZoomY($frame))] + cpZoom $xmag $ymag fixed + } } + { "Toggle zoom" f.exec toggleZoom } + { "Unzoom" f.exec { + set zoomindex($frame) 0 + set mag $zoomfactor($zoomindex($frame)) + send client zoom $mag $mag $xcen $ycen + } } +} + +createMenu cmapMenu viewMenu { + { "Normalize" f.exec normalize } + { "Invert" f.exec cpInvert } + { "Optimize" f.exec cpOptimize sensitive false } + { f.dblline } + { "Grayscale" f.exec "send client setColormap Grayscale" } + { "Color" f.exec "send client setColormap Color" } + { "Heat" f.exec "send client setColormap Heat" } + { "HSV" f.exec "send client setColormap HSV" } + { "AIPS0" f.exec "send client setColormap AIPS0" } + { "Halley" f.exec "send client setColormap Halley" } + { "Ramp" f.exec "send client setColormap Ramp" } + { "Standard" f.exec "send client setColormap Standard" } + { "Staircase" f.exec "send client setColormap Staircase" } + { "Rainbow1" f.exec "send client setColormap Rainbow1" } + { "Rainbow2" f.exec "send client setColormap Rainbow2" } + { "Random8" f.exec "send client setColormap Random8" } +} + +createMenu flipMenu viewMenu { + { "Flip X" f.exec xflip } + { "Flip Y" f.exec yflip } + { "Flip XY" f.exec xyflip } +} + +set optionsMenuDescription { + { "Autoscale" f.exec { + set value [send autoscaleButton get on] + send autoscaleButton set on [expr !$value] + cpSetAutoscale + } } + { "Antialias" f.exec { + set value [send antialiasButton get on] + send antialiasButton set on [expr !$value] + cpSetAntialias + } } + { "Panner" f.exec { setPanner [expr !$panner_enable] } } + { "Magnifier" f.exec { setMagnifier [expr !$magnifier_enable] }} + { "Coords box" f.exec { setTrack [expr !$track_enable] } } + { "Tile frames" f.exec { + set value [send tileFramesButton get on] + send tileFramesButton set on [expr !$value] + cpSetTileFrames + } } + { "Clear frame" f.exec clearFrame } + { "Fit frame" f.exec fitFrame } + { "Match LUTs" f.exec cpMatchFrames } + { "Auto-Register" f.exec cpAutoRegister } + { "Register" f.exec cpRegisterFrames } + { {$blinkId ? "Stop blink" : "Blink frames"} + f.exec toggleBlink } + { f.dblline } + { "Control Panel" f.exec { panelTabToggle display_panel } } + { "Print Panel" f.exec { panelTabToggle print_panel } } + { "Load Panel" f.exec { panelTabToggle load_panel } } + { "Save Panel" f.exec { panelTabToggle save_panel } } +}; createMenu optionsMenu optionsButton $optionsMenuDescription + + + +#------------------------------- +# Frozen Cursor Warning Message +#------------------------------- + +set ct_warn 0 + +proc curtrack_msg { x y args } \ +{ + global ct_warn last_x last_y winHeight winWidth + + + if {! $ct_warn == 0} { + return + } + + send imagewin createMarker curtrack_warn { + type text + createMode noninteractive + width 25ch + height 21 + lineWidth 0 + imageText true + textBgColor red + textColor yellow + visible true + sensitive true + activated true + x 5 + y 5 + } + + send curtrack_warn "set text \{ CURSOR READOUT FROZEN \}" + set ypos [ expr ($winHeight - 25) ] + send curtrack_warn "markpos; setAttributes x 5 y $ypos; redraw" + send curtrack_warn "redraw noerase" + set ct_warn 1 + + # Mark the position of the cursor. + send imagewin createMarker x_curpos \ + type box \ + createMode noninteractive \ + lineColor red \ + x 1 \ + y $last_y \ + width $winWidth \ + height 1 \ + activated True \ + visible True \ + sensitive False + + send imagewin createMarker y_curpos \ + type box \ + createMode noninteractive \ + lineColor red \ + x $last_x \ + y 1 \ + width 1 \ + height $winHeight \ + activated True \ + visible True \ + sensitive False + + # Raise the coordinate marker so we can see where we are. + send wcsbox raise +} + + +proc curtrack_destroy args \ +{ + global ct_warn + + if {$ct_warn} { + send curtrack_warn destroy + send x_curpos destroy + send y_curpos destroy + set ct_warn 0 + } +} + + +################################################################################ +# CURSOR CENTEROID AND AUTO-REGISTER FUNCTIONS. +################################################################################ + +# Set the centroiding box size. +set ctid 0 +set cid 0 + +proc cbxDestroy args \ +{ + global centerBoxSize cid ctid + catch { + if {$ctid != 0} { + send cbm$cid destroy + deleteTimedCallback $ctid + set ctid 0 + } + } +} + +proc setCtrBoxSize { x y delta args } \ +{ + global centerBoxSize cid ctid + global cpXscale cpYscale + + incr centerBoxSize $delta + if {$centerBoxSize <= 1} { set centerBoxSize 1 } + + # Kill off any old markers before drawing the new one. + catch { + if {$ctid != 0} { + send cbm$cid destroy + deleteTimedCallback $ctid + set ctid 0 + } + } + + # create a transient marker indicating the centering box and post a + # callback to delete it in about a second. + incr cid + send imagewin createMarker cbm$cid \ + type box \ + createMode noninteractive \ + lineColor red \ + x $x \ + y $y \ + width [expr $cpXscale * $centerBoxSize] \ + height [expr $cpXscale * $centerBoxSize] \ + activated True \ + visible True \ + sensitive False + + set ctid [ postTimedCallback cbxDestroy 500] +} + + +# Box size is half-width of the marker size. Value is the slider value. +set focusBoxSize $winWidth +set focusValue 100.0 +set fid 0 +set ftid 0 +set moving 0 + +proc setFocusBoxSize { sz args } \ +{ + global focusBoxSize fid ftid focusValue moving + global winWidth winHeight + + + if { $moving == 0 } { + return done + } + + if { $winWidth < $winHeight } { + set max [expr $winWidth / 2 - 64] + } else { + set max [expr $winHeight / 2 - 64] + } + set focusBoxSize [expr 64 + ($sz * $max) - 1] + #send client setOption cmfocus [expr ($focusBoxSize / 2)] + send client setOption cmfocus $focusBoxSize + + # Destroy any existing markers. + catch { + if {$ftid != 0} { + send fm$fid destroy + set ftid 0 + } + } + + # create a transient marker indicating the centering box and post a + # callback to delete it in about a second. + incr fid + send imagewin createMarker fm$fid \ + type box \ + createMode noninteractive \ + lineColor green \ + lineWidth 4 \ + x [expr $winWidth / 2] \ + y [expr $winHeight / 2] \ + width $focusBoxSize \ + height $focusBoxSize \ + activated True \ + visible True \ + sensitive False + + set ftid [ postTimedCallback fbxDestroy 500] + set moving 0 +} + +proc fbxDestroy args \ +{ + global fid ftid moving + catch { + if {$ftid != 0} { + send fm$fid destroy + set ftid 0 + } + } +} + +proc setFocusSize { widget cbtype x y } \ +{ + global focusValue ftid moving + + # Only update once we've stopped the movement. + if { $x == $focusValue && $moving == 1 } { + set ftid [ postWorkProc setFocusBoxSize $x ] + } else { + set moving 1 + } + set focusValue $x +} ; send focusSlider addCallback setFocusSize scroll + + +# Compute a centroid offset for the current position to peak-up on the +# feature. + +proc centroid { x y type args } \ +{ + global centerBoxSize + global cpXscale cpYscale + + # Convert to image coords. + set sz [expr "int ($centerBoxSize * $cpXscale)"] + + # Get the centroid position. + if {$type != "min"} { + if {[send peakupButton get on]} { + set center [ send client centroid $x $y $sz ] + } else { + set center [ send client centroid $x $y $sz max ] + } + } else { + set center [ send client centroid $x $y $sz min ] + } + + # Now reposition the cursor. + set xoff [lindex $center 0 ] + set yoff [lindex $center 1 ] + move_cursor $xoff $yoff +} + + +# Set the auto-register center offset position +proc offset { x y args } \ +{ + global frame blinkFrames auto_reg + global frameCenterX frameCenterY + global frameOffsetX frameOffsetY + + # No-op of auto-register isn't on. + if { $auto_reg == 0 } { + Wexec client "Auto-Register is not enabled!" + return + } + + # If we're not in the blink frames list ignore the request. + if { [string first $frame $blinkFrames] == -1 } { + Wexec client "Frame not in current\nregister list." + return + } + + set rx $x; set ry $y + set raster 0 + + # Convert raw screen coordinates to frame buffer raster coordinates. + send imagewin unmapPixel $x $y raster rx ry + + # Select a pixel. + set xoff [expr "int ($rx) - $frameCenterX($frame)" ] + set yoff [expr "int ($ry) - $frameCenterY($frame)" ] + + set frameOffsetX($frame) $xoff + set frameOffsetY($frame) $yoff + + # Adjust the display. + send client setOffset $xoff $yoff +} + + + +################################################################################ +# MAIN CONTROL PANEL +################################################################################ + + +# Global control panel buttons. +# ------------------------------- +proc cpInitialize args \ +{ + send imagewin setCursorType busy + send client initialize + send imagewin setCursorType idle +} +send initializeButton addCallback cpInitialize +send normalizeButton addCallback normalize + +# Temporarily deactivate some buttons. +send optimizeButton setSensitive false + +#----------------------------------------------------------------------------- + +foreach i $frames {set saveView($i) "1 1"} + +send prevFrame set bitmap larrow +send nextFrame set bitmap rarrow +send contrastLabel set bitmap contrast +send brightnessLabel set bitmap brightness +send contrastSlider resizeThumb 0.1 1.0 +send brightnessSlider resizeThumb 0.1 1.0 +send focusSlider "resizeThumb 0.1 1.0 ; moveThumb 1.0" + + +# panel -- Toggle control panel display. +proc panel args \ +{ + global panel_up + if {$panel_up} { + send panelShell unmap + set panel_up 0 + } else { + send panelShell map + set panel_up 1 + } +} + +proc pbTracePanel {name element op} \ +{ + catch { + upvar $name panel_up + send controlButton set state $panel_up + } +} ; trace variable panel_up w pbTracePanel + + +# resetPanel -- Calling during startup or in an initialize, to reset things. +proc resetPanel {param old new} \ +{ + global frame nframes frames + global displayPanner displayMagnifier displayCoords + global blinkFrames warnings peakCentroid + + switch $new { + startup { + } + restart { foreach i $frames { + send frame$frame set on 0 + } + + # Initialize to hide the extra frames. + send frlistBox set width 30 + } + done { if {$frame} { + send frame$frame set on 1 + } + + cpResetBlink + set button 1 + foreach i {1 2 3 4} { + send blinkFrame$button set label $i + incr button + } + for {set i 1} {$i <= 16} {incr i} { + send brFrame$i set label $i + } + + cpResetEnhance + send pannerButton set on [true $displayPanner] + send magnifierButton set on [true $displayMagnifier] + send coordsBoxButton set on [true $displayCoords] + send warningsButton set on $warnings + send peakupButton set on [true $peakCentroid] + } + } +}; send initialize addCallback resetPanel + + + +# Control Panel Tabs widget procedures. +#---------------------------------------- + +set cpTabs { display_panel print_panel load_panel save_panel \ + info_panel wcs_panel tile_panel} +set tabTop "display_panel" + + +# Resize the control panel depending on the Tab selected. +proc cpResizeCB { widget event a b c d e args } \ +{ + global tabTop fileList + + # Handle only the first exposure event generated. + if { $a == 0 && $b == 0 && $c == 0 && $d == 0 && $e == 0 } { + set tabTop $widget + + switch $widget { + display_panel { send panel set height 595 } + print_panel { send panel set height 545 } + load_panel { send panel set height 485 + if { [send browseHdrs get on] } { + send imageList setList $fileList resize + } else { + send client setLoadOption rescan + } + } + save_panel { send panel set height 325 } + info_panel { send panel set height 380 } + tile_panel { send panel set height 405 } + wcs_panel { setCoordPanelHeight } + } + } +} ; foreach w $cpTabs { send $w addEventHandler cpResizeCB exposureMask } + + +proc panelDismiss args \ +{ + global panel_up + send panelShell unmap + set panel_up 0 +} ; send panelClose addCallback panelDismiss + + +proc panelTabToggle { panel args } \ +{ + global tabTop panel_up TabToWidget + + if {$tabTop == $panel && $panel_up} { + send panelShell unmap + send $TabToWidget($panel) set state 0 + set panel_up 0 + + } else { + # Special cases for each panel. + if {$panel == "load_panel"} { + send client setLoadOption rescan + } + + send panelTabs setTop $panel + set tabTop $panel + + # Now fire it up if it's not already open. + if {$panel_up == 0} { + send panelShell map + set panel_up 1 + } + + } +} + +proc displayPanel args { panelTabToggle display_panel } +proc infoPanel args { panelTabToggle info_panel } +proc loadPanel args { panelTabToggle load_panel } +proc savePanel args { panelTabToggle save_panel } +proc printPanel args { panelTabToggle print_panel } +proc tilePanel args { panelTabToggle tile_panel } +proc wcsPanel args { panelTabToggle wcs_panel } + + + + +# Frame selection. +# ------------------------------- +proc cpSetFrame {widget args} \ +{ + send $widget set on 0 + send client setFrame [send $widget get label] +} + +proc cpFrameChanged {param old new} \ +{ + global frameCache + + if {$old > 0} { + send frame$old set on 0 + } + if {$new > 0} { + send frame$new set on 1 + } + + # The first time we request frame 5 or higher reset + # the extra frame buttons on the control panel to make + # them visible. + if {$new >= 5} { + send frlistBox set width 49 + } + + # Update the header panel object list. + catch { + # Only update when the header panel is open. + if {[info exists frameCache($new)] && [send imageHeader get on]} { + setHdrObjMenu $new + getHeader [lindex $frameCache($new) 0] [lindex $frameCache($new) 1] + } + } +} + +send prevFrame addCallback prevFrame +send nextFrame addCallback nextFrame +send frame addCallback cpFrameChanged +for {set i 1} {$i <= 16} {incr i} {send frame$i addCallback cpSetFrame} + +# Initialize to hide the extra frames. +send frlistBox set width 30 + +proc blinkPanelCB { widget type state args } \ +{ + if {$state} { + send blink_panel map + } else { + send blink_panel unmap + } +} ; send blinkPanel addCallback blinkPanelCB + +proc blinkPanelClose args \ +{ + send blink_panel unmap + send blinkPanel set state 0 +} ; send brClose addCallback blinkPanelClose + + + +# Frame buttons. +proc cpFrameAction {widget args} \ +{ + global frameZoomX frameZoomY frame + switch $widget { + aspect { set xmag $frameZoomX($frame) + set ymag $frameZoomY($frame) + set zoom [expr round (($xmag + $ymag) / 2.0)] + cpZoom $zoom $zoom fixed + } + flipX { send client flip x } + flipY { send client flip y } + flipXY { send client flip x y } + clearFrame { clearFrame } + fitFrame { fitFrame } + } +} +foreach widget {aspect flipX flipY flipXY clearFrame fitFrame} { + send $widget addCallback cpFrameAction +} + +# clearFrame -- Clear the current display frame. +proc clearFrame args \ +{ + global warnings + if {$warnings} { + Wexec client \ + "Clearing the frame will destroy\n\ + all data in the frame" \ + clearFrame + } else { + send client clearFrame + } +} + +# fitFrame -- Resize the display window to fit the frame buffer. +proc fitFrame args \ +{ + global frameWidth frameHeight winWidth winHeight + set dw [expr [send display get width] - $winWidth] + set dh [expr [send display get height] - $winHeight] + send display "resize [expr $frameWidth + $dw] [expr $frameHeight + $dh]" +} + +proc initFitFrame { param old new } \ +{ + if { [lindex $new 0] == "resize"} { + fitFrame + } + pannerMapImage init +}; send frameFit addCallback initFitFrame + + + +# Zoom and pan buttons. +# ------------------------------- +proc cpZoomAction {widget args} \ +{ + global frameWidth frameHeight + + switch $widget { + x1 { cpZoom 1 1 fixed } + z2 { cpZoom 2 2 fixed } + z3 { cpZoom 3 3 fixed } + z4 { cpZoom 4 4 fixed } + z5 { cpZoom 5 5 fixed } + z8 { cpZoom 8 8 fixed } + + d2 { cpZoom [expr 1.0/2] [expr 1.0/2] fixed } + d3 { cpZoom [expr 1.0/3] [expr 1.0/3] fixed } + d4 { cpZoom [expr 1.0/4] [expr 1.0/4] fixed } + d5 { cpZoom [expr 1.0/5] [expr 1.0/5] fixed } + d8 { cpZoom [expr 1.0/8] [expr 1.0/8] fixed } + + zoomIn { cpZoom 2.0 2.0 relative } + zoomOut { cpZoom 0.5 0.5 relative } + + centerFrame { send client pan \ + [expr $frameWidth/2.0] \ + [expr $frameHeight/2.0] + } + toggleZoom { toggleZoom } + } +} + +proc cpZoom {zoom_x zoom_y mode} \ +{ + global frameZoomX frameZoomY zoomindex frame + global frameOffsetX frameOffsetY frameCenterX frameCenterY + + if {$mode == "fixed"} { + #send client zoom $zoom_x $zoom_y + send client zoomAbs $zoom_x $zoom_y \ + $frameCenterX($frame) $frameCenterY($frame) \ + $frameOffsetX($frame) $frameOffsetY($frame) + } else { + #send client zoom \ + # [expr $frameZoomX($frame) * $zoom_x] \ + # [expr $frameZoomY($frame) * $zoom_y] + send client zoomAbs \ + [expr $frameZoomX($frame) * $zoom_x] \ + [expr $frameZoomY($frame) * $zoom_y] \ + $frameCenterX($frame) $frameCenterY($frame) \ + $frameOffsetX($frame) $frameOffsetY($frame) + } + + set zoomindex($frame) 0 +} + +proc toggleZoom args \ +{ + global frameZoomX frameZoomY frameCenterX frameCenterY + global frameWidth frameHeight saveView frame + + if {$frameZoomX($frame) != 1 && $frameZoomY($frame) != 1} { + set saveView($frame) \ + "$frameZoomX($frame) $frameZoomY($frame) \ + $frameCenterX($frame) $frameCenterY($frame)" + send client zoom 1 1 \ + [expr $frameWidth/2.0] \ + [expr $frameHeight/2.0] + } else { + send client zoom $saveView($frame) + } +} + +foreach widget { toggleZoom centerFrame zoomIn zoomOut \ + x1 z2 z3 z4 z5 z8 d2 d3 d4 d5 d8 } { + send $widget addCallback cpZoomAction +} + +# Frame data display. +# ------------------------------- +set cpFrame 0 +set cpXcen 0 +set cpYcen 0 +set cpXmag 0 +set cpYmag 0 +set cpXscale 0 +set cpYscale 0 +set cpXoff 0 +set cpYoff 0 + +proc cpDisplayFrameData {name old new} \ +{ + global cpFrame cpXcen cpYcen cpXoff cpYoff + global cpXmag cpYmag cpXscale cpYscale + + set update 0 + switch $name { + frame { if {$new != $cpFrame} { + set cpFrame $new + set update 1 + } + } + frameView { # Parse the frameView input. + set xmag [lindex $new 0]; set ymag [lindex $new 1] + set xcen [lindex $new 2]; set ycen [lindex $new 3] + set xnorm [lindex $new 4]; set ynorm [lindex $new 5] + set xoff [lindex $new 6]; set yoff [lindex $new 7] + + # We need client coords and the overall scale factors. + set text [send client encodewcs $xcen $ycen] + set xcen [lindex $text 0] + set ycen [lindex $text 1] + set xscale [expr $xmag * $xnorm] + set yscale [expr $ymag * $ynorm] + + if {$xcen != $cpXcen || $ycen != $cpYcen || + $xmag != $cpXmag || $ymag != $cpYmag || + $xoff != $cpXoff || $yoff != $cpYoff || + $xscale != $cpXscale || $yscale != $cpYscale} { + + set cpXcen $xcen; set cpXscale $xscale + set cpYcen $ycen; set cpYscale $yscale + set cpXmag $xmag; set cpXoff $xoff; + set cpYmag $ymag; set cpYoff $yoff; + set update 1 + } + } + } + + if {$update} { + set header [format "-- Frame %d --" $cpFrame] + set center [format "X center: %0.1f\nY center: %0.1f" $cpXcen $cpYcen] + if {int($cpXmag) >= 10} { + set zoom1 [format " X zoom: %0.1f" $cpXmag] + set zoom2 [format " Y zoom: %0.1f" $cpYmag] + } else { + set zoom1 [format "X zoom: %0.1f" $cpXmag] + set zoom2 [format "Y zoom: %0.1f" $cpYmag] + } + if {int($cpXscale) >= 10} { + set scale1 [format "X scale: %0.1f" $cpXscale] + set scale2 [format "Y scale: %0.1f" $cpYscale] + } else { + set scale1 [format "X scale: %0.2f" $cpXscale] + set scale2 [format "Y scale: %0.2f" $cpYscale] + } + set offset [format " Offset: (%0.1f,%0.1f)" $cpXoff $cpYoff] + + send frameData set label [format "%s\n%s\n%s\n%s\n%s\n%s\n%s" \ + $header $center $scale1 $scale2 $zoom1 $zoom2 $offset \ + ] + } +}; foreach p {frame frameView} {send $p addCallback cpDisplayFrameData} + + +# Frame enhancement. +# ------------------------------- +set cpEnhanceDisable 0 +set cpEnhanceId 0 +set cpEnhanceMode none +set cpEnhanceVal 0 +set cpListItem none + +# Windowing the colormap is slow when the mouse is not in the image window, +# so it is necessary to execute the windowColormap in a work procedure. +# This allows any number of slider motion events to be processed for each +# windowColormap, preventing slider events from queueing up. + +proc cpResetEnhance args \ +{ + global cpListItem cpEnhanceId + set cpListItem none + set cpEnhanceId 0 +} + +proc cpSetEnhancement {widget cbtype x y} \ +{ + global cpEnhanceMode cpEnhanceVal cpEnhanceId cpEnhanceDisable + set cpEnhanceMode $widget + set cpEnhanceVal $x + if {!$cpEnhanceId && !$cpEnhanceDisable} { + set cpEnhanceId [postWorkProc cpEnhanceProc] + } +} +proc cpEnhanceProc args \ +{ + global cpEnhanceMode cpEnhanceVal cpEnhanceId + global enhancement frame maxContrast + set val $cpEnhanceVal + + if {$cpEnhanceMode == "contrastSlider"} { + set contrast [lindex $enhancement($frame) 2] + send client windowColormap [lindex $enhancement($frame) 1] \ + [expr (($contrast < 0) ? -$val : $val) * $maxContrast] + } else { + send client windowColormap $val + } + + set cpEnhanceId 0 + return done +} + +proc cpInvert args \ +{ + global enhancement frame + set contrast [lindex $enhancement($frame) 2] + send client updateColormap [lindex $enhancement($frame) 1] \ + [expr -1.0 * $contrast] +} + +proc cpDisplayEnhancement {param old new} \ +{ + global cpEnhanceId maxContrast cpEnhanceDisable + global cpListItem enhancement frame + + if {!$frame} \ + return + set enhance $enhancement($frame) + if {[llength $enhance] < 3} \ + return + + set colortable [lindex $enhance 0] + set offset [lindex $enhance 1] + set scale [lindex $enhance 2] + + send colordata set label [format "-- %s --\nCon %0.2f Brt %0.2f" \ + $colortable $scale $offset] + + if {$colortable != $cpListItem} { + send colorlist highlight $colortable + set cpListItem $colortable + } + + if {!$cpEnhanceId && !$cpEnhanceDisable} { + set cpEnhanceDisable 1 + send contrastSlider moveThumb [expr abs($scale) / $maxContrast] + send brightnessSlider moveThumb $offset + set cpEnhanceDisable 0 + } +} + +foreach i {enhancement frame} { + send $i addCallback cpDisplayEnhancement +} +send contrastSlider addCallback cpSetEnhancement scroll +send brightnessSlider addCallback cpSetEnhancement scroll +send invertButton addCallback cpInvert + + +# Colortable display and selection. +# ------------------------------- +set colorTables {} + +proc cpSetColorList {param old new} \ +{ + set colorTables $new + send colorlist setList $new resize +}; send colortables addCallback cpSetColorList + +proc colorlistResize args \ +{ + global colorTables + send colorlist setList $colorTables resize +}; send colorlist addEventHandler colorlistResize ResizeRedirectMask + +proc cpSelectColor {widget cbtype selections indices} \ +{ + global colortable + foreach selection $selections { + send client setColormap $selection + } +}; send colorlist addCallback cpSelectColor + + +# Frame blink. +# ------------------------------- +send BRtext set label $blinkRate +send brBRtext set label $blinkRate + +proc cpSetBlinkRate {w args} \ +{ + global blinkRate + if {$w == "BRincrease" || $w == "brBRincrease"} { + if {$blinkRate < 0.01} { + set blinkRate 0.125 + } else { + set blinkRate [expr $blinkRate * 2.0] + } + } else { + set blinkRate [expr $blinkRate / 2.0] + if {$blinkRate < 0.01} { + set blinkRate 0 + } + } + send BRtext set label $blinkRate + send brBRtext set label $blinkRate +} +foreach w {BRincrease BRdecrease brBRincrease brBRdecrease} { + send $w addCallback cpSetBlinkRate +} + +proc cpSetBlinkFrame {widget args} \ +{ + global blinkFrames frames nframes + + set frame [send $widget get label] + if {$frame == " "} { + set frame 1 + } else { + incr frame + if {$frame > $nframes} { + set frame " " + } + } + send $widget set label $frame + + set blinkFrames {} + foreach i {1 2 3 4} { + set frame [send blinkFrame$i get label] + if {$frame != " "} { + lappend blinkFrames $frame + } + } +}; foreach i {1 2 3 4} {send blinkFrame$i addCallback cpSetBlinkFrame} + +proc cpBlink {widget args} \ +{ + global blinkRate blinkId + + if {$blinkRate < 0.01} { + send blinkButton set on False + send brBlinkButton set on False + blink + } elseif {($blinkId != 0) != [send $widget get on]} { + toggleBlink + } +} ; foreach w {blinkButton brBlinkButton} {send $w addCallback cpBlink} + + +proc cpAutoRegister {widget type state args} \ +{ + global auto_reg frame frames blinkFrames + global frameZoomX frameZoomY frameOffsetX frameOffsetY + + set auto_reg $state + if {$auto_reg == 1} { + send autoregButton set on True + send brAregButton set on True + } else { + send autoregButton set on False + send brAregButton set on False + } + + # Register the frames to zero the offsets. + send client registerFrames \{$blinkFrames\} + foreach f $frames { + set frameOffsetX($f) 0 + set frameOffsetY($f) 0 + } +} ; foreach w {autoregButton brAregButton} {send $w addCallback cpAutoRegister} + + +proc toggleAutoReg args \ +{ + global auto_reg + if {$auto_reg} { + cpAutoRegister autoregButton dummy 0 + set auto_reg 0 + } else { + cpAutoRegister autoregButton dummy 1 + set auto_reg 1 + } +} + +proc resetAutoReg args \ +{ + global auto_reg + if {$auto_reg} \ + toggleAutoReg +}; send initialize addCallback resetAutoReg + + +proc cpResetBlink args \ +{ + global blinkRate blinkFrames blinkIndex frames + global defaultBlinkRate + + foreach i {1 2 3 4} { + send blinkFrame$i set label " " + } + for {set i 1} {$i <= 16} {incr i} { + send brFrame$i set label $i + } + set blinkRate $defaultBlinkRate + send BRtext set label $blinkRate + send brBRtext set label $blinkRate + set blinkIndex 0 +} +send blinkReset addCallback cpResetBlink +send brReset addCallback cpResetBlink + +proc cpTraceBlink {name element op} \ +{ + upvar $name blinkId + send blinkButton set on [expr $blinkId != 0] + send brBlinkButton set on [expr $blinkId != 0] +}; trace variable blinkId w cpTraceBlink + +proc cpSetBlinkFrames {param old new} \ +{ + global blinkFrames frames + + set blinkFrames {} + foreach i $frames { + if {$i <= $new} { + lappend blinkFrames $i + } + } + cpResetBlink + set button 1 + for {set i 1} {$i <= $new} {incr i} { + if {$i <= 4} { + send blinkFrame$button set label $i + } + send brFrame$button set label $i + incr button + } +}; send nframes addCallback cpSetBlinkFrames + +proc cpRegisterFrames args \ +{ + global frames blinkFrames + global frameOffsetX frameOffsetY + + foreach f $frames { + set frameOffsetX($f) 0 + set frameOffsetY($f) 0 + } + send client registerFrames \{$blinkFrames\} +} +send registerButton addCallback cpRegisterFrames +send brRegButton addCallback cpRegisterFrames + +proc cpMatchFrames args \ +{ + global blinkFrames + send client matchFrames \{$blinkFrames\} +} +send matchButton addCallback cpMatchFrames +send brMatchButton addCallback cpMatchFrames + + +# Options buttons. +# ------------------------------- +proc cpSetPanner {widget args} \ +{ + setPanner [send $widget get on] +}; send pannerButton addCallback cpSetPanner + +proc cpTracePanner {name element op} \ +{ + upvar $name panner_enable + send pannerButton set on $panner_enable +}; trace variable panner_enable w cpTracePanner + +proc cpSetMagnifier {widget args} \ +{ + setMagnifier [send $widget get on] +}; send magnifierButton addCallback cpSetMagnifier + +proc cpTraceMagnifier {name element op} \ +{ + upvar $name magnifier_enable + send magnifierButton set on $magnifier_enable +}; trace variable magnifier_enable w cpTraceMagnifier + +proc cpSetCoordsBox {widget args} \ +{ + setTrack [send $widget get on] +}; send coordsBoxButton addCallback cpSetCoordsBox + +proc cpTraceCoordsBox {name element op} \ +{ + upvar $name track_enable + send coordsBoxButton set on $track_enable +}; trace variable track_enable w cpTraceCoordsBox + +proc cpSetWarnings args \ +{ + global warnings + set warnings [send warningsButton get on] +}; send warningsButton addCallback cpSetWarnings + +proc cpSetAutoscale args \ +{ + set value [send autoscaleButton get on] + send client setOption autoscale [expr {$value ? "True" : "False"}] +}; send autoscaleButton addCallback cpSetAutoscale + +proc cpTrackAutoscale {param old new} \ +{ + send autoscaleButton set on [true $new] +}; send autoscale addCallback cpTrackAutoscale + +proc cpSetAntialias args \ +{ + set value [send antialiasButton get on] + send client setOption antialias [expr {$value ? "True" : "False"}] +}; send antialiasButton addCallback cpSetAntialias + +proc cpTrackAntialias {param old new} \ +{ + send antialiasButton set on [true $new] +}; send antialias addCallback cpTrackAntialias + +proc cpSetTileFrames { widget type state args } \ +{ + global tile_frames tileOpt + + set value [send tileFramesButton get on] + if {$value} { + selectTileOrientation junk junk [tileSelToLabel $tileOpt] + } else { + selectTileOrientation junk junk Disabled + } + send client setOption tileFrames \ + [expr {$value ? "True" : "False"}] \{ $tile_frames \} +} ; send tileFramesButton addCallback cpSetTileFrames + +proc cpTrackTileFrames {param old new} \ +{ + send tileFramesButton set on [true $new] +}; send tileFrames addCallback cpTrackTileFrames + +proc tileFramesToggle args \ +{ + set value [send tileFramesButton get on] + send tileFramesButton set on [expr !$value] + cpSetTileFrames +} + + +################################################################################ +# MAGNIFIER. A subraster around the cursor in the main image window is +# displayed at a high resolution in a marker (known as the magnifier window) +# within the main image window. +################################################################################ + +set magnifier_x 0 +set magnifier_y 0 +set magnifier_width 0 +set magnifier_height 0 +set mrm_width 0 +set mrm_height 0 + +set magnifier_enable 0 +set magnifier_mag_enable 0 +set magnifier_mapping 0 + +createMenu magzoomMenu imagewin { + { "Zoom Factors" f.title } + { f.dblline } + { "Zoom 1" f.exec "setMagnifierZoom 1" } + { "Zoom 2" f.exec "setMagnifierZoom 2" } + { "Zoom 4" f.exec "setMagnifierZoom 4" } + { "Zoom 8" f.exec "setMagnifierZoom 8" } + { "Zoom 16" f.exec "setMagnifierZoom 16" } +} + +# Magnifier window translations. +set magnifierWinTranslations { \ + !Shift : m_rotateResize() + : m_moveResize() + !Shift : m_raise() m_markpos() + : m_raise() m_markposAdd() + : m_redraw() m_destroyNull() + : m_lower() + : popup(magzoomMenu) + : popdown(magzoomMenu) + !Ctrl m: call(toggleMagnifier) + !Ctrl p: call(togglePanner) + BackSpace: m_deleteDestroy() + Delete: m_deleteDestroy() + : graphics-input() + : track-cursor() call(wcsUpdate,$x,$y) +} + + +# setMagnifier -- Turn the magnifier on or off. + +set magAlreadyOn 0 + +proc setDynamicMagnifier {state} \ +{ + global magAlreadyOn magnifier_enable + + if {$state} { + set magAlreadyOn $magnifier_enable + } + if {$magAlreadyOn} { + return + } else { + setMagnifier $state + } +} + +proc toggleMagnifier args \ +{ + global magnifier_enable + if {$magnifier_enable} { + setMagnifier 0 + } else { + setMagnifier 1 + } +} + + +proc setMagnifier {state} \ +{ + global winWidth winHeight frameWidth frameHeight + global frame magnifier_mapping magnifierWinTranslations magnifierArea + global magnifier_enable magnifier_height + global magnifierGeom magnifier_x magnifier_y magnifier_width + + if {$state} { + if {$magnifier_enable} \ + return + + # Determine where to place the magnifier. + set scale [expr sqrt(double($magnifierArea) / (512 * 512))] + set scaled_width [expr int(512 * $scale) / 2 * 2 + 1] + set scaled_height [expr int(512 * $scale) / 2 * 2 + 1] + set defGeom [format "%sx%s-5+5" $scaled_width $scaled_height] + send imagewin parseGeometry $magnifierGeom $defGeom x y width height + + # Create the main magnifier window (marker). + send imagewin createMarker magnifierWin \ + type rectangle \ + createMode noninteractive \ + width [expr $width / 2] \ + height [expr $height / 2] \ + x [expr $x + $width / 2] \ + y [expr $y + $height / 2] \ + lineColor 8 \ + highlightColor 8 \ + translations $magnifierWinTranslations \ + visible true \ + sensitive true \ + activated true + + # Update the magnifier window position variables so that it comes up + # in the same place the next time. + + send magnifierWin getRect boundary \ + magnifier_x magnifier_y magnifier_width magnifier_height + set magnifierGeom [send imagewin getGeometry \ + $magnifier_x $magnifier_y $magnifier_width $magnifier_height] + + # Register callbacks. + send imagewin addCallback magnifierImagewinResized resize + send resize addCallback magnifierImagewinResized + send magnifierWin addCallback magnifierMovedMapImage moveResize + + send magnifierWin { + addCallback magnifierMoved moveResize; + addCallback magnifierDestroy destroy; + addCallback magnifierWinConstraint constraint; + } + + # Map display frame to magnifier window. + set magnifier_enable 1 + set magnifier_mapping [send imagewin nextMapping] + send imagewin refreshMapping $magnifier_mapping + + # create cross-hair + send imagewin createMarker magPointer \ + type rectangle \ + createMode noninteractive \ + width 3 \ + height 3 \ + lineWidth 3 \ + lineColor green \ + highlightcolor green \ + activated true \ + visible true + + # set its position and size + setMagPointerPosition + magnifierMapImage [expr $winWidth / 2] [expr $winHeight / 2] + + } elseif {$magnifier_enable} { + magnifierDestroy + } +} + + +# magnifierDestroy -- Delete the magnifier. + +proc magnifierDestroy args \ +{ + global magnifier_enable + global magnifier_mapping + + if {$magnifier_enable} { + set magnifier_enable 0 + + send imagewin freeMapping $magnifier_mapping + send imagewin deleteCallback magnifierImagewinResized + send resize deleteCallback magnifierImagewinResized + send frame deleteCallback magnifierMapImage + + if [send server queryObject magnifierWin] { + send magnifierWin destroy + } + if [send server queryObject magPointer] { + send magPointer destroy + } + } +} + + +# magnifierMoved -- Called when the user moves the magnifier window. We need to +# move the region marker to the new window location and record the new location +# so that the window will come up in the same place if closed and reopened. + +proc magnifierMoved {marker event position} \ +{ + global winWidth winHeight magnifierGeom frame + global magnifier_x magnifier_y magnifier_width magnifier_height + + # Move the region marker to the new location. + send client getSource raster sx sy snx sny + + # Update the magnifier window position variables so that it comes up + # in the same place the next time. + + send magnifierWin getRect boundary \ + magnifier_x magnifier_y magnifier_width magnifier_height + set magnifierGeom [send imagewin getGeometry \ + $magnifier_x $magnifier_y $magnifier_width $magnifier_height] +} + + +# magnifierWinConstraint -- Called when the magnifier window is moved, resized, +# or rotated. Constrain the magnifier window to remain within the image window; +# rotation is not permitted. + +proc magnifierWinConstraint {marker event attributes} \ +{ + global winWidth winHeight + global magnifier_width magnifier_height + + set width $magnifier_width + set height $magnifier_height + set constraints [list {}] + + # Check the width and height first as we need these below. + foreach i $attributes { + set new [lindex $i 2] + switch [lindex $i 0] { + width { set ww [expr $winWidth / 2] + if {$new > $ww} { + lappend constraints "width $ww" + set width $ww + } else { + set width $new + } + } + height { set wh [expr $winHeight / 2] + if {$new > $wh} { + lappend constraints "height $wh" + set height $wh + } else { + set height $new + } + } + rotangle { lappend constraints "rotangle 0" + } + } + } + + # Constrain X and Y. + foreach i $attributes { + set new [lindex $i 2] + switch [lindex $i 0] { + x { set pw [expr $width / 2] + if {$new < $pw} { + lappend constraints "x $pw" + } elseif {$new > $winWidth - $pw} { + lappend constraints "x [expr $winWidth - $pw]" + } + } + y { set ph [expr $height / 2] + if {$new < $ph} { + lappend constraints "y $ph" + } elseif {$new > $winHeight - $ph} { + lappend constraints "y [expr $winHeight - $ph]" + } + } + } + } + + return $constraints +} + + +# magnifierRegionConstraint -- Called when the region marker in the magnifier +# window is moved, resized, or rotated. + +proc magnifierRegionConstraint {marker event attributes} \ +{ + global winWidth winHeight + + set constraints [list {}] + send magnifierWin getRect interior p_x p_y p_width p_height + + # Since the magnifier region marker is a box marker x,y and width,height + # will not both change in the same call, so we can process them all + # independently. + + foreach i $attributes { + set new [lindex $i 2] + + switch [lindex $i 0] { + x { set left [expr $p_x + $rwidth + 1] + set right [expr $p_x + $p_width - $rwidth - 1] + if {$new < $left} { + lappend constraints "x $left" + } elseif {$new > $right} { + lappend constraints "x $right" + } + } + y { set top [expr $p_y + $rheight + 1] + set bottom [expr $p_y + $p_height - $rheight - 1] + if {$new < $top} { + lappend constraints "y $top" + } elseif {$new > $bottom} { + lappend constraints "y $bottom" + } + } + width { set ww [expr $winWidth / 2] + if {$new > $ww / 2} { + lappend constraints "width $ww" + } + } + height { set wh [expr $winHeight / 2] + if {$new > $wh / 2} { + lappend constraints "height $wh" + } + } + rotangle { lappend constraints "rotangle 0" + } + } + } + + return $constraints +} + + +# magnifierImagewinResized -- If the display window is resized make the +# magnifier track the corner. + +proc magnifierImagewinResized args \ +{ + global magnifier_enable magnifier_mapping magnifier_height + global magnifierGeom magnifier_x magnifier_y magnifier_width + + if {$magnifier_enable} { + set old_x $magnifier_x; set old_width $magnifier_width + set old_y $magnifier_y; set old_height $magnifier_height + + # Get new location of magnifier window. + set defGeom [format "%sx%s+5+5" $magnifier_width $magnifier_height] + send imagewin parseGeometry $magnifierGeom $defGeom x y width height + + # Reposition the marker. + send magnifierWin "\ + markpos; \ + setAttributes \ + x [expr $x + $width / 2] \ + y [expr $y + $height / 2] \ + width [expr $width / 2] \ + height [expr $height / 2]; \ + redraw" + + # Update the magnifier window position variables so that it comes up + # in the same place the next time. + send magnifierWin getRect boundary \ + magnifier_x magnifier_y magnifier_width magnifier_height + set magnifierGeom [send imagewin getGeometry \ + $magnifier_x $magnifier_y $magnifier_width $magnifier_height] + + # Make sure the magnifier window is on top. + send imagewin raiseMapping $magnifier_mapping + + # Refresh the magnifier window if it did not move. + if {$magnifier_x == $old_x && $magnifier_y == $old_y && + $magnifier_width == $old_width && $magnifier_height == $old_height} { + send imagewin refreshMapping $magnifier_mapping + } + } +} + + +# resetMagnifier -- Reinitialize the magnifier. + +proc resetMagnifier {param old new} \ +{ + global magnifierGeom displayMagnifier + + if {$new == "done"} { + setMagnifier [true $displayMagnifier] + } else { + setMagnifier 0 + if {$new != "startup"} { + set magnifierGeom +5+5 + } + } +}; send initialize addCallback resetMagnifier + + +set last_mag_x [expr $winWidth / 2] +set last_mag_y [expr $winHeight / 2] + +# magnifierMovedMapImage -- Front end to magnifierMapImage, called when +# magnifier window is moved or resized. + +proc magnifierMovedMapImage args \ +{ + global last_mag_x last_mag_y + + magnifierMapImage $last_mag_x $last_mag_y + setMagPointerPosition +} + +# The following code was borrowed from the SAOtng GUI by Eric Mandel of SAO +#-------------------------------------------------------------------------- + +# globals for magnifier +set mag_w 0 +set mag_h 0 + +# +# setMagnifierZoom -- set the zoom factor for the magnifier +# +proc setMagnifierZoom { zoom } \ +{ + global mag_w mag_h + + send magnifierWin getRect boundary \ + magnifier_x magnifier_y magnifier_width magnifier_height + set mag_w [expr int( ( $magnifier_width + $zoom - 1 ) / $zoom) ] + set mag_h [expr int( ( $magnifier_height + $zoom - 1 ) / $zoom) ] + + #set mw [expr int (($magnifier_width - 1) / ($mag_w * 2))] + #if { $mw < 4 } { set mw 4 } + #set mh [expr int (($magnifier_height - 1) / ($mag_h * 2))] + #if { $mh < 4 } { set mh 4 } + #send magPointer "setAttributes width $mw height $mh; redraw" +} + +# magnifierMapImage -- Map the of the current display frame centered on the +# pointer into the magnifier window. Called when the frame changes, the +# pointer moves in the main image window, or (via magnifierMovedMapImage) +# the magnifier window is moved or resized. + +set magnifierROP 0 + +proc magnifierMapImage {x y} \ +{ + global magnifier_enable frame + global last_mag_x last_mag_y + global magnifier_mapping + global winWidth winHeight + global mag_w mag_h + global magnifierROP + + if {!$magnifier_enable || $frame == 0} \ + return + +# if {abs($last_mag_x-$x) != 1 && abs($last_mag_y-$y) != 1} { +# # For efficiency we won't compute the sqrt of the distance but instead +# # just compare the square. Use a threshold of 6 pixels so when we +# # narrow in on the ROI the magnifier is still (mostly) correct. +# set diff [expr (($last_mag_x-$x) * ($last_mag_x-$x)) + \ +# (($last_mag_y-$y) * ($last_mag_y-$y))] +# if {$diff > 36} { +# set last_mag_x $x +# set last_mag_y $y +# return +# } +# } + + set last_mag_x $x + set last_mag_y $y + + send magnifierWin getRect interior dx dy dnx dny + if [send imagewin activeMapping $magnifier_mapping] { + send imagewin raiseMapping $magnifier_mapping + } + + # initialize the magnifier zoom factor, if necessary + if { !$mag_w || !$mag_h } { + setMagnifierZoom 4 + } + + set sx [expr $x - $mag_w / 2 ] + set sy [expr $y - $mag_h / 2 ] + + # Constrain the source rectangle within the main image window + # (not overlapping an edge or the magnifier window). + + if {$sx > [expr $dx - $mag_w] && $sx < [expr $dx + $dnx] && + $sy > [expr $dy - $mag_h] && $sy < [expr $dy + $dny] } { + + # The source rectangle would overlap the magnifier window; fix that. + + set dist(l) [expr $sx - ($dx - $mag_w)] + set dist(b) [expr $dy + $dny - $sy] + set dist(r) [expr $dx + $dnx - $sx] + set dist(t) [expr $sy - ($dy - $mag_h)] + + # Put the distances in order. + + foreach j [array names dist] { + set alreadyset($j) 0 + } + + for {set i 0} {$i < 4} {incr i} { + set candidate "" + foreach j [array names dist] { + if {!$alreadyset($j)} { + if {$candidate == ""} { + set candidate $j + set minsofar $dist($j) + } elseif {$dist($j) < $minsofar} { + set candidate $j + set minsofar $dist($j) + } + } + } + set order($i) $candidate + set alreadyset($candidate) 1 + } + + # Try the sides in order, using the first one where there's room. + + for {set i 0} {$i < 4} {incr i} { + if {$order($i) == "l"} { + if {$dx >= $mag_w} { + set sx [expr $dx - $mag_w] + break + } + } elseif {$order($i) == "b"} { + if {$winHeight >= $dy + $dny + $mag_h} { + set sy [expr $dy + $dny] + break + } + } elseif {$order($i) == "r"} { + if {$winWidth >= $dx + $dnx + $mag_w} { + set sx [expr $dx + $dnx] + break + } + } elseif {$order($i) == "t"} { + if {$dy >= $mag_h} { + set sy [expr $dy - $mag_h] + break + } + } + } + } + + # Make sure we don't go beyond an edge of the main window. + + if {$sx < 0} { + set sx 0 + } else { + set sxmax [expr $winWidth - $mag_w] + if {$sx > $sxmax} { + set sx $sxmax + } + } + + if {$sy < 0} { + set sy 0 + } else { + set symax [expr $winHeight - $mag_h] + if {$sy > $symax} { + set sy $symax + } + } + + # Map 32 x 32 centered on pointer in main window. + set err [catch {send imagewin setMapping $magnifier_mapping $magnifierROP \ + 0 pixel $sx $sy $mag_w $mag_h \ + 0 pixel $dx $dy $dnx $dny}] + if { $err != 0 } { + Print "There was a problem setting up the magnifier ... recovering" + } +} + + +# set the position of the magnifier marker in the center of the mag window +proc setMagPointerPosition args \ +{ + global magnifier_enable + + if { !$magnifier_enable } \ + return + + send magnifierWin "getAttributes x x y y" + set xpos [expr $x + 1] + set ypos [expr $y + 1] + + send magPointer "setAttributes x $xpos y $ypos visible true; redraw" +} + + + +################################################################################ +# PANNER. The full frame mapped into the main image window is displayed at a +# reduced resolution in a marker (known as the panner window) within the main +# image window. The currently displayed region of the frame is indicated +# using a small marker within the panner window. This small marker may be +# moved or resized to pan or zoom the image in the main display window. +################################################################################ + +set panner_x 0 +set panner_y 0 +set panner_width 0 +set panner_height 0 +set prm_width 0 +set prm_height 0 + +set panner_enable 0 +set panner_pan_enable 0 +set panner_mag_enable 0 +set panner_region_enable 0 +set panner_mapping 0 + +# Panner window translations. +set pannerWinTranslations { \ + !Shift : m_rotateResize() + : m_moveResize() + !Shift : m_raise() m_markpos() + : m_raise() m_markposAdd() + : m_redraw() m_destroyNull() + : m_lower() + : call(pannerPanXY,$x,$y) + !Ctrl b: call(prevFrame,$name) + !Ctrl f: call(nextFrame,$name) + !Ctrl h: call(move_cursor,-1,0) + !Ctrl j: call(move_cursor,0,1) + !Ctrl k: call(move_cursor,0,-1) + !Ctrl l: call(move_cursor,1,0) + !Ctrl n: call(normalize) + !Ctrl c: call(cpZoomAction,centerFrame) + !Ctrl i: call(cpInvert) + !Ctrl m: call(toggleMagnifier) + !Ctrl p: call(togglePanner) + !Ctrl r: call(cpRegisterFrames) + !Ctrl s: call(cpMatchFrames) + !Alt 1: call(cpSetFrame,frame1) + !Alt 2: call(cpSetFrame,frame2) + !Alt 3: call(cpSetFrame,frame3) + !Alt 4: call(cpSetFrame,frame4) + !Ctrl 1: call(cpZoom,1,1,fixed) + !Ctrl 2: call(cpZoom,2,2,fixed) + !Ctrl 3: call(cpZoom,3,3,fixed) + !Ctrl 4: call(cpZoom,4,4,fixed) + !Ctrl 5: call(cpZoom,5,5,fixed) + !Ctrl 6: call(cpZoom,6,6,fixed) + !Ctrl 7: call(cpZoom,7,7,fixed) + !Ctrl 8: call(cpZoom,8,8,fixed) + !Ctrl 9: call(cpZoom,9,9,fixed) + BackSpace: m_deleteDestroy() + Delete: m_deleteDestroy() + : graphics-input() + : track-cursor() call(wcsUpdate,$x,$y) +} + + +# setPanner -- Turn the panner on or off. + +proc togglePanner args \ +{ + global panner_enable + + if {$panner_enable} { + setPanner 0 + } else { + setPanner 1 + } +} + + +proc setPanner {state} \ +{ + global winWidth winHeight frameWidth frameHeight + global frame panner_mapping pannerWinTranslations pannerArea + global panner_enable panner_region_enable panner_pan_enable + global pannerGeom panner_x panner_y panner_width panner_height + global last_compass + + if {$state} { + if {$panner_enable} \ + return + + # Determine where to place the panner. + set scale \ + [expr sqrt(double($pannerArea) / ($frameWidth * $frameHeight))] + set scaled_width [expr int($frameWidth * $scale) / 2 * 2 + 1] + set scaled_height [expr int($frameHeight * $scale) / 2 * 2 + 1] + set defGeom [format "%sx%s-5+5" $scaled_width $scaled_height] + send imagewin parseGeometry $pannerGeom $defGeom x y width height + + # Create the main panner window (marker). + send imagewin createMarker pannerWin \ + type rectangle \ + createMode noninteractive \ + width [expr $width / 2] \ + height [expr $height / 2] \ + x [expr $x + $width / 2] \ + y [expr $y + $height / 2] \ + lineColor 8 \ + highlightColor 8 \ + translations $pannerWinTranslations \ + visible true \ + sensitive true \ + autoRedraw true \ + activated true + + # Update the panner window position variables so that it comes up + # in the same place the next time. + + send pannerWin getRect boundary \ + panner_x panner_y panner_width panner_height + set pannerGeom [send imagewin getGeometry \ + $panner_x $panner_y $panner_width $panner_height] + + # Register callbacks. + send frame addCallback pannerMapImage + send frameRegion addCallback pannerSetRegion + send imagewin addCallback pannerImagewinResized resize + send resize addCallback pannerImagewinResized + + send pannerWin { + addCallback pannerMapImage moveResize; + addCallback pannerMoved moveResize; + addCallback pannerDestroy destroy; + addCallback pannerWinConstraint constraint; + } + + # Map display frame to panner window. + set panner_enable 1 + set panner_region_enable 1 + set panner_mapping [send imagewin nextMapping] + pannerMapImage init; send imagewin refreshMapping $panner_mapping + + # Redraw the compass if necessary. + send compass "setSensitive True ; set on $last_compass" + if { $last_compass } \ + drawCompass + + # Draw a marker in the panner window outlining displayed region. + send imagewin createMarker pannerRegionMarker \ + type box \ + createMode noninteractive \ + translations $pannerWinTranslations \ + lineColor green \ + highlightColor green \ + sensitive true + + # Fire up the panner region marker. + send client getSource raster sx sy snx sny + pannerSetRegion dummy dummy [concat $frame $sx $sy $snx $sny] + send pannerRegionMarker "\ + addCallback pannerPanImage moveResize; \ + addCallback pannerDestroy destroy; \ + addCallback pannerRegionConstraint constraint; \ + setAttributes visible true activated true; \ + redraw" + set panner_pan_enable 1 + + } elseif {$panner_enable} { + pannerDestroy + } +} + + +# pannerDestroy -- Delete the panner. + +proc pannerDestroy args \ +{ + global panner_enable panner_region_enable panner_pan_enable + global panner_mapping + + if {$panner_enable} { + set panner_enable 0 + set panner_pan_enable 0 + set panner_region_enable 0 + + send imagewin freeMapping $panner_mapping + send imagewin deleteCallback pannerImagewinResized + send resize deleteCallback pannerImagewinResized + send frame deleteCallback pannerMapImage + send frameRegion deleteCallback pannerSetRegion + + if [send server queryObject pannerRegionMarker] { + send pannerRegionMarker destroy + } + if [send server queryObject pannerWin] { + send pannerWin destroy + } + + # Disable the compass. + send compass "setSensitive False ; set on False" + } +} + + +# pannerMapImage -- Map the current display frame into the panner window. +# Called when the frame changes or the panner window is moved or resized. +# The panner window displays a small dezoomed version of the full frame. + +proc pannerMapImage args \ +{ + global panner_enable frame + global panner_mapping + + if {!$panner_enable || $frame == 0} \ + return + + set raster [send client getRaster] + send pannerWin getRect interior dx dy dnx dny + send imagewin queryRaster $raster width height + + if [send imagewin activeMapping $panner_mapping] { + send imagewin raiseMapping $panner_mapping + } + send imagewin setMapping $panner_mapping 0 \ + $raster pixel 0 0 $width $height \ + 0 pixel $dx $dy $dnx $dny +} + + +# pannerSetRegion -- Adjust the pannerWin region marker to outline the +# region displayed in the main display window. This is called in response +# to a frameRegion event when the main display mapping changes, e.g. when +# the frame changes or the user zooms or pans the main window. The region +# marker is moved and resized to reflect the new view. + +proc pannerSetRegion {param old new} \ +{ + global panner_enable panner_region_marker + global panner_region_enable panner_pan_enable + global frame frameWidth frameHeight prm_width prm_height + + if {!$panner_enable || !$panner_region_enable || $frame == 0} \ + return + + # new: frame sx sy snx sny + set src_frame [lindex $new 0] + set sx [lindex $new 1]; set snx [lindex $new 3] + set sy [lindex $new 2]; set sny [lindex $new 4] + + if {$src_frame != $frame} \ + return + + send pannerWin getRect interior px py pnx pny + + set x [expr ($sx + $snx/2.0) / $frameWidth * $pnx + $px] + set y [expr ($sy + $sny/2.0) / $frameHeight * $pny + $py] + set width [expr ($snx/2.0) / $frameWidth * $pnx + 1] + set height [expr ($sny/2.0) / $frameHeight * $pny + 1] + + set pan_save $panner_pan_enable; set panner_pan_enable 0 + set panner_region_enable 0 + + send pannerRegionMarker "\ + markpos; \ + setAttributes x $x y $y width $width height $height; \ + redraw; raise" + send pannerRegionMarker getAttributes width prm_width height prm_height + + set panner_region_enable 1 + set panner_pan_enable $pan_save +} + + +# pannerPanImage -- Pan or zoom the image in the main image window. This is +# called when the user moves the region marker within the panner window. + +proc pannerPanImage {marker event position} \ +{ + global panner_pan_enable + global winWidth winHeight + global prm_width prm_height + global frame auto_reg frameOffsetX frameOffsetY + + if {!$panner_pan_enable} \ + return + + # position: x y width height. + set new_width [lindex $position 2] + set new_height [lindex $position 3] + + # region: type raster x y width height. + set region [send pannerRegionMarker getRegion unmap] + set x [expr [lindex $region 2] + 1]; set width [lindex $region 4] + set y [expr [lindex $region 3] + 1]; set height [lindex $region 5] + + set panner_pan_enable 0 + if {$new_width == $prm_width && $new_height == $prm_height} { + send client pan $x $y + } else { + set xscale [expr ($winWidth / 2.0) / $width] + set yscale [expr ($winHeight / 2.0) / $height] + if {$auto_reg == 1} { + send client zoomAbs $xscale $yscale $x $y \ + $frameOffsetX($frame) $frameOffsetY($frame) + } else { + send client zoom $xscale $yscale $x $y + } + } + set panner_pan_enable 1 +} + + +# pannerPanXY -- Pan to the point X,Y in the panner window coordinate +# system. Called when the user clicks MB2 in the panner window. + +proc pannerPanXY {x y} \ +{ + send imagewin unmapPixel $x $y raster rx ry + send client pan $rx $ry +} + + +# pannerMoved -- Called when the user moves the panner window. We need to +# move the region marker to the new window location and record the new location +# so that the window will come up in the same place if closed and reopened. + +proc pannerMoved {marker event position} \ +{ + global winWidth winHeight + global frame panner_pan_enable pannerGeom + global panner_x panner_y panner_width panner_height + + # Move the region marker to the new location. + set pan_save $panner_pan_enable; set panner_pan_enable 0 + send client getSource raster sx sy snx sny + pannerSetRegion dummy dummy [concat $frame $sx $sy $snx $sny] + set panner_pan_enable $pan_save + + # Update the panner window position variables so that it comes up + # in the same place the next time. + + send pannerWin getRect boundary \ + panner_x panner_y panner_width panner_height + set pannerGeom [send imagewin getGeometry \ + $panner_x $panner_y $panner_width $panner_height] + + drawCompass + + send pannerRegionMarker raise +} + + +# pannerWinConstraint -- Called when the panner window is moved, resized, or +# rotated. Constrain the panner window to remain within the image window; +# rotation is not permitted. + +proc pannerWinConstraint {marker event attributes} \ +{ + global winWidth winHeight + global panner_width panner_height + + set width $panner_width + set height $panner_height + set constraints [list {}] + + # Check the width and height first as we need these below. + foreach i $attributes { + set new [lindex $i 2] + switch [lindex $i 0] { + width { set ww [expr $winWidth / 2] + if {$new > $ww} { + lappend constraints "width $ww" + set width $ww + } else { + set width $new + } + } + height { set wh [expr $winHeight / 2] + if {$new > $wh} { + lappend constraints "height $wh" + set height $wh + } else { + set height $new + } + } + rotangle { lappend constraints "rotangle 0" + } + } + } + + # Constrain X and Y. + foreach i $attributes { + set new [lindex $i 2] + switch [lindex $i 0] { + x { set pw [expr $width / 2] + if {$new < $pw} { + lappend constraints "x $pw" + } elseif {$new > $winWidth - $pw} { + lappend constraints "x [expr $winWidth - $pw]" + } + } + y { set ph [expr $height / 2] + if {$new < $ph} { + lappend constraints "y $ph" + } elseif {$new > $winHeight - $ph} { + lappend constraints "y [expr $winHeight - $ph]" + } + } + } + } + + return $constraints +} + + +# pannerRegionConstraint -- Called when the region marker in the panner +# window is moved, resized, or rotated. + +proc pannerRegionConstraint {marker event attributes} \ +{ + global winWidth winHeight + global frame + + set constraints [list {}] + send pannerWin getRect interior p_x p_y p_width p_height + send pannerRegionMarker getAttributes width rwidth height rheight + + # Since the panner region marker is a box marker x,y and width,height + # will not both change in the same call, so we can process them all + # independently. + + foreach i $attributes { + set new [lindex $i 2] + + switch [lindex $i 0] { + x { set left [expr $p_x + $rwidth + 1] + set right [expr $p_x + $p_width - $rwidth - 1] + if {$new < $left} { + lappend constraints "x $left" + } elseif {$new > $right} { + lappend constraints "x $right" + } + } + y { set top [expr $p_y + $rheight + 1] + set bottom [expr $p_y + $p_height - $rheight - 1] + if {$new < $top} { + lappend constraints "y $top" + } elseif {$new > $bottom} { + lappend constraints "y $bottom" + } + } + width { set ww [expr $winWidth / 2] + if {$new > $ww / 2} { + lappend constraints "width $ww" + } + } + height { set wh [expr $winHeight / 2] + if {$new > $wh / 2} { + lappend constraints "height $wh" + } + } + rotangle { lappend constraints "rotangle 0" + } + } + } + drawCompass + + return $constraints +} + + +# pannerImagewinResized -- If the display window is resized make the panner +# track the corner. + +proc pannerImagewinResized args \ +{ + global panner_enable panner_mapping + global pannerGeom panner_x panner_y panner_width panner_height + global frame + + if {$panner_enable} { + set old_x $panner_x; set old_width $panner_width + set old_y $panner_y; set old_height $panner_height + + eraseCompass + + # Get new location of panner window. + set defGeom [format "%sx%s-5+5" $panner_width $panner_height] + send imagewin parseGeometry $pannerGeom $defGeom x y width height + + # Reposition the marker. + send pannerWin "\ + markpos; \ + setAttributes \ + x [expr $x + $width / 2] \ + y [expr $y + $height / 2] \ + width [expr $width / 2] \ + height [expr $height / 2]; \ + redraw" + + # Update the panner window position variables so that it comes up + # in the same place the next time. + send pannerWin getRect boundary \ + panner_x panner_y panner_width panner_height + set pannerGeom [send imagewin getGeometry \ + $panner_x $panner_y $panner_width $panner_height] + + # Make sure the panner window is on top. + send imagewin raiseMapping $panner_mapping + + # Refresh the panner window if it did not move. + if {$panner_x == $old_x && $panner_y == $old_y && + $panner_width == $old_width && $panner_height == $old_height} { + send imagewin refreshMapping $panner_mapping + } + + drawCompass + } +} + + +# resetPanner -- Reinitialize the panner. + +proc resetPanner {param old new} \ +{ + global pannerGeom displayPanner + if {$new == "done"} { + setPanner [true $displayPanner] + } else { + setPanner 0 + if {$new != "startup"} { + set pannerGeom -5+5 + } + } +}; send initialize addCallback resetPanner + + + +################################################################################ +# Print Panel Functions. +################################################################################ + +# Global variables needed for the print setup panel + +set printColor prGrayButton +set orientation epsPortButton +set page_size epsLetterButton +set imageScale 100 + +set epsWidgets { epsPageGroup epsOrientLabel epsSizeLabel + epsPortButton epsLandButton epsLetterButton epsLegalButton epsA4Button + ScaleFrame SCdecrease SCtext SCincrease +} + + +proc psetup_init args \ +{ + global printColor orientation page_size imageScale #format + + set_printer toPrinter callback 1 + send SCtext set label [ format "%d %%" $imageScale ] + send $printColor set on true + send $orientation set on true + send $page_size set on true +} + + +proc doPrintOptions { param old new } \ +{ + global imageScale page_size orientation imageScale printColor + global warnings + + send printStatus set label {} + set val [join [lrange $new 1 end] " "] + + # print [format "doPrintOptions %s = %s" [lindex $new 0] $val] + switch [lindex $new 0] { + autoscale { if { $val == "True" } { + send epsscaleButton set on true + } elseif { $val == "False" } { + send epsscaleButton set on false + } + } + autorotate { if { $val == "True" } { + send autorotateButton set on true + } elseif { $val == "False" } { + send autorotateButton set on false + } + } + maxaspect { if { $val == "True" } { + send aspectButton set on true + } elseif { $val == "False" } { + send aspectButton set on false + } + } + annotate { if { $val == "True" } { + send annotateButton set on true + send titleButton setSensitive true + send colorbarButton setSensitive true + send bordersButton setSensitive true + send titleLabel setSensitive true + send titleString setSensitive true + } elseif { $val == "False" } { + send annotateButton set on false + send titleButton setSensitive false + send colorbarButton setSensitive false + send bordersButton setSensitive false + send titleLabel setSensitive false + send titleString setSensitive false + } + } + compress { if { $val == "True" } { + send compressButton set on true + } elseif { $val == "False" } { + send compressButton set on false + } + } + orientation { send $orientation set on false + if { $val == "portrait" } { + send epsPortButton set on true + set orientation epsPortButton + } elseif { $val == "landscape" } { + send epsPortButton set on false + set orientation epsLandButton + } + } + papersize { send $page_size set on false + if { $val == "letter" } { + send epsLetterButton set on true + set page_size epsLetterButton + } elseif { $val == "legal" } { + send epsLegalButton set on true + set page_size epsLegalButton + } elseif { $val == "A4" } { + send epsA4Button set on true + set page_size epsA4Button + } elseif { $val == "B5" } { + send epsB5Button set on true + set page_size epsB5Button + } + } + imscale { set imageScale $val + send SCtext set label [ format "%d %%" $imageScale ] + } + colortype { send $printColor set on false + if { $val == "gray" } { + send prGrayButton set on true + set printColor prGrayButton + } elseif { $val == "pseudo" } { + send prPseudoButton set on true + set printColor prPseudoButton + } elseif { $val == "rgb" } { + send prRGBButton set on true + set printColor prRGBButton + } + } + printerName { if [send toPrinter get on] { + send printlist highlight $val + } + } + printCmd { if [send toPrinter get on] { + send printcmd set string $val + } + } + printFile { if [send toFile get on] { + send printcmd set string $val + } + } + deviceType { if { $val == "Printer" } { + send printerLabel set label "Print Command:" + send toPrinter set on true + send toFile set on false + } elseif { $val == "File" } { + send printerLabel set label "File Name:" + send toPrinter set on false + send toFile set on true + send printlist unhighlight + } + } + dotitle { if { $val == "True" } { + send titleButton set on true + } elseif { $val == "False" } { + send titleButton set on false + } + } + doborders { if { $val == "True" } { + send bordersButton set on true + } elseif { $val == "False" } { + send bordersButton set on false + } + } + docolorbar { if { $val == "True" } { + send colorbarButton set on true + } elseif { $val == "False" } { + send colorbarButton set on false + } + } + title { send titleString set string $val + } + + status { send printStatus set label $val + send server synchronize + } + warning { if {$warnings} { Wexec server $val } + } + } +}; send printOptions addCallback doPrintOptions + + +# Print options procedures. +# ------------------------------- + +set prOptsWidgets { + toPrinter toFile + prGrayButton prPseudoButton prRGBButton + epsLandButton epsPortButton + epsLetterButton epsLegalButton epsA4Button epsB5Button + SCincrease SCdecrease +} +set prSimpleOptions { + epsscaleButton autorotateButton aspectButton annotateButton compressButton + titleButton bordersButton colorbarButton +} + +proc prPrintCommand { widget cbtype args } \ +{ + if [send toFile get on] { + send client setPrintOption printfile $args + send printStatus set label [format "output file set to %s" $args] + } else { + send client setPrintOption printcmd $args + send printStatus set label [format "print command set to %s" $args] + } +}; send printcmd addCallback prPrintCommand + +proc prTitleString { widget cbtype args } \ +{ + send client setPrintOption title $args +}; send titleString addCallback prTitleString + +proc prOptionToggle { widget cbtype args } \ +{ + global imageScale + + # Handle the image scale widgets first. + switch $widget { + SCincrease { set scale [expr $imageScale + 5] + send client setPrintOption imscale $scale + return + } + SCdecrease { set scale [ expr $imageScale - 5 ] + send client setPrintOption imscale $scale + return + } + } + + # If it's not one of those it must be one of the radio toggles. + set val [ send $widget get on ] + #print [ format "prOptionToggle %s = %s" $widget $val ] + if { $val == 1 } { + switch $widget { + toPrinter { send client setPrintOption devicetype printer } + toFile { send client setPrintOption devicetype file } + + epsLandButton { send client setPrintOption orientation landscape } + epsPortButton { send client setPrintOption orientation portrait } + + epsLetterButton { send client setPrintOption papersize letter } + epsLegalButton { send client setPrintOption papersize legal } + epsA4Button { send client setPrintOption papersize A4 } + epsB5Button { send client setPrintOption papersize B5 } + + prGrayButton { send client setPrintOption colortype gray } + prPseudoButton { send client setPrintOption colortype pseudo } + prRGBButton { send client setPrintOption colortype rgb } + } + } else { + send $widget set on true + } + +} ; foreach w $prOptsWidgets { send $w addCallback prOptionToggle } + +proc prSimpleOptionToggle { widget args } \ +{ + set val [ send $widget get on ] + #print [ format "prSimpleOptionToggle %s = %s" $widget $val ] + + switch $widget { + epsscaleButton { send client setPrintOption autoscale $val } + autorotateButton { send client setPrintOption autorotate $val } + aspectButton { send client setPrintOption maxaspect $val } + annotateButton { send client setPrintOption annotate $val } + compressButton { send client setPrintOption compress $val } + + titleButton { send client setPrintOption dotitle $val } + bordersButton { send client setPrintOption doborders $val } + colorbarButton { send client setPrintOption docolorbar $val } + } +} ; foreach w $prSimpleOptions { send $w addCallback prSimpleOptionToggle } + + + +# Printer display and selection. +# ------------------------------- +set lprList {} + +proc psSetPrintList {param old new} \ +{ + global lprList + set lprList $new + send printlist setList $new resize + send printlist highlight 0 +}; send printerList addCallback psSetPrintList + +proc lprResize args \ +{ + global lprList + send printlist setList $lprList resize + send printlist highlight 0 +}; send printlist addEventHandler lprResize ResizeRedirectMask + +proc psSelectPrint {widget cbtype selections indices} \ +{ + global printerlist + foreach selection $selections { + send client setPrintOption printername $selection + } +}; send printlist addCallback psSelectPrint + + +proc Print args \ +{ + global winWidth winHeight + send imagewin setCursorType busy + + # Get the print command or file template if not previous reset. + set val [ send printcmd get string ] + if [send toFile get on] { + send client setPrintOption printfile $val + } else { + send client setPrintOption printcmd $val + } + set val [ send titleString get string ] + send client setPrintOption title $val + setPrintCorners 0 [expr $winWidth - 1] [expr $winHeight - 1] 0 + + send client print + send imagewin setCursorType idle +} ; send okayPrint addCallback Print + + + +# setPrintCorners -- Tell the client the WCS of the image being printed. + +proc setPrintCorners { lx ly ux uy args } \ +{ + global winWidth winHeight + + # Convert raw corner screen coordinates to frame buffer raster coords. + send imagewin unmapPixel $lx $ly raster llx lly + set llx [expr "int ($llx)"] + set lly [expr "int ($lly)"] + set str [send client encodewcs $llx $lly] + scan $str "%g %g %g" llx_r lly_r z + set llx_i [expr "int ($llx_r)"] + set lly_i [expr "int ($lly_r)"] + + send imagewin unmapPixel $ux $uy raster urx ury + set urx [expr "int ($urx)"] + set ury [expr "int ($ury)"] + set str [send client encodewcs $urx $ury] + scan $str "%g %g %g" urx_r ury_r z + set urx_i [expr "int ($urx_r)"] + set ury_i [expr "int ($ury_r)"] + + send client setPrintOption corners $llx_i $lly_i $urx_i $ury_i +} + + + +################################################################################ +# INFO box. +################################################################################ + +set infoMode infoOptFr + + +# Current Frame information. +proc infoFrameUpdate args \ +{ + global version frame nframes + global frameWidth frameHeight frameDepth + global enhancement + global cpXcen cpYcen cpXoff cpYoff + global cpXmag cpYmag cpXscale cpYscale + + if { [send infoOptWCS get on] } { + send client info wcs + return + } elseif {! [send infoOptFr get on]} \ + return + + + if {$frame == 0} { + send infoText set string "initializing display..." + } else { + set line1 $version + set line2 [format "Image:\t\t%s" [send imageTitle get label]] + set line3 [format "Frame %d of %d:\t%d x %d" \ + $frame $nframes $frameWidth $frameHeight] + set cmap [lindex $enhancement($frame) 0] + set brt [lindex $enhancement($frame) 1] + set con [lindex $enhancement($frame) 2] + set line4 [format "Colormap:\t%s" $cmap] + set line5 [format "Enhancement:\tBrt=%s Cont=%s" $brt $con] + + set cntr [format "X: %0.1f\n\t\tY: %0.1f" $cpXcen $cpYcen] + set line6 [format "Center:\t\t%s" $cntr] + + set line7 [format "Zoom:\t\tX: %0.2f\n\t\tY: %0.2f" $cpXmag $cpYmag] + set line8 [format "Scale:\t\tX: %0.2f\n\t\tY: %0.2f" $cpXscale $cpYscale] + set line9 [format "Offset:\t\tX: %0.2f\n\t\tY: %0.2f" $cpXoff $cpYoff] + + send infoText set string [ + format "%s\n\n%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s\n\n" \ + $line1 $line2 $line3 $line4 $line5 $line6 $line7 $line8 $line9 + ] + } +} +set params {frame frameView nframes frameSize frameTitle enhancement} +foreach p $params { send $p addCallback infoFrameUpdate } + + +# Server Program State information. +proc infoOptToggle { widget type state args } \ +{ + global infoMode ismInfoText + + if {$state} { set not False } else { set not True } + + send $infoMode set on $not + set infoMode $widget + + switch $widget { + infoOptFr { infoFrameUpdate } + infoOptSvr { set bp [send imagewin get basePixel] + set mc [send imagewin get maxColors] + send client info server $bp $mc + } + infoOptIsm { send infoText set string $ismInfoText } + infoOptClients { send client info clients } + infoOptWCS { send client info wcs } + infoOptFB { send client info imtoolrc } + } +} +set iopts {infoOptFr infoOptSvr infoOptIsm infoOptClients infoOptWCS infoOptFB } +foreach w $iopts { send $w addCallback infoOptToggle } + + +proc infoSetText { param old new } \ +{ + send infoText set string $new +} ; send info addCallback infoSetText + + + +################################################################################ +# Image and objects list display and section +################################################################################ + +proc filesTextHighlight { widget event args } \ +{ + if { $event == "enterNotify" } { + send $widget set displayCaret True + } elseif { $event == "leaveNotify" } { + send $widget set displayCaret False + } +} +foreach w {imtemplateText fnameText z1Value z2Value} { + send $w addEventHandler filesTextHighlight enterWindowMask + send $w addEventHandler filesTextHighlight leaveWindowMask +} + +send rootButton addCallback "send client setLoadOption root" +send homeButton addCallback "send client setLoadOption home" +send upButton addCallback "send client setLoadOption up" +send rescanButton addCallback "send client setLoadOption rescan" + +set label \ + [format "%-35.35s %6s %12s %12s"\ + " Image" "Bitpix" " Size" " Title"] +send imlistLabel set label $label +send imlistLabel "set height 0 ; unmap" + + +# Create the Frames menu on the load panel window. +set loadItems { "Current f.exec \{send frameFrame set label Current\}"} +for {set i 1} {$i <= $MAX_FRAMES} {incr i} { + lappend loadItems "\"\ \ $i\ \ \" f.exec \{send frameFrame set label $i\}" +}; createMenu loadFrames frameFrame $loadItems + + + + + +# Filename pattern callback. +proc setPattern { widget mode pattern args } \ +{ + send client setLoadOption pattern $pattern +} ; send imtemplateText addCallback setPattern + + +# Load options parameter callback. +proc doLoadOptions { param old new } \ +{ + global warnings panel_up + + set val [ join [lrange $new 1 end] " " ] + + switch [lindex $new 0] { + pattern { send imtemplateText set string [format "%s" $val ] } + curdir { send dirLabel set label [format " Directory: %s" $val ] } + newfile { send fnameText set string $val } + status { send filesStatus set label $val + if { ! $panel_up } { send imageTitle set label $val } + send server synchronize + } + warning { if {$warnings} { Wexec server $val } } + gray { send grayscale set on $val } + zscale { send zscale set on $val + if {$val} { + send zrange setSensitive False + } else { + send zrange setSensitive True + } + } + zrange { send zrange set on $val + if {$val} { + foreach w {z1Label z1Value z2Label z2Value} { + send $w setSensitive False + } + } else { + foreach w {z1Label z1Value z2Label z2Value} { + send $w setSensitive True + } + } + } + z1 { send z1Value set string [format "%s" $val ] } + z2 { send z2Value set string [format "%s" $val ] } + nsample { send nsampValue set string [format "%s" $val ] } + } +} ; send loadOptions addCallback doLoadOptions + +# Option utility routines. +proc toggleGraymap args \ +{ + send client setLoadOption gray [ send grayscale get on ] +} ; send grayscale addCallback toggleGraymap + +proc toggleHeaders args \ +{ + if { [send browseHdrs get on] } { + send client setLoadOption headers + send rootButton setSensitive False + send homeButton setSensitive False + send upButton setSensitive False + send rescanButton setSensitive False + send imlistLabel "set height 10 ; map" + } else { + send client setLoadOption rescan + send rootButton setSensitive True + send homeButton setSensitive True + send upButton setSensitive True + send rescanButton setSensitive True + send imlistLabel "set height 0 ; unmap" + } +} ; send browseHdrs addCallback toggleHeaders + +proc toggleZscale args \ +{ + send client setLoadOption zscale [send zscale get on] +} ; send zscale addCallback toggleZscale + +proc toggleZrange args \ +{ + send client setLoadOption zrange [send zrange get on] +} ; send zrange addCallback toggleZrange + +proc setZ1 { widget mode pattern args } \ +{ + send client setLoadOption z1 $pattern +} ; send z1Value addCallback setZ1 + +proc setZ2 { widget mode pattern args } \ +{ + send client setLoadOption z2 $pattern +} ; send z2Value addCallback setZ2 + +proc setNsamp { widget mode pattern args } \ +{ + send client setLoadOption nsample $pattern +} ; send nsampValue addCallback setNsamp + +proc fileLoad { widget mode fname args } \ +{ + loadImage $fname +} ; send fnameText addCallback fileLoad + + + +# Image list selection routines. + +set fileList {} + +proc setFileList { param old new } \ +{ + global fileList + set fileList $new + + # Get the max length of the strings so we can set + # the list columns appropriately. + set max 0 + foreach n $new { + set len [string length $n] + if {$len > $max} { set max $len } + } + + # Optimize the number of columns for the file list. + if {$max > 35} { + send imageList set defaultColumns 1 + } elseif {$max > 21} { + send imageList set defaultColumns 2 + } elseif {$max > 12} { + send imageList set defaultColumns 3 + } elseif {$max > 5} { + send imageList set defaultColumns 4 + } else { + send imageList set defaultColumns 5 + } + + send imageList setList $new resize +}; send filelist addCallback setFileList + +proc flResize args \ +{ + global fileList + send imageList setList $fileList resize +}; send imageList addEventHandler flResize ResizeRedirectMask + +proc flSelectPrint { widget cbtype selections args } \ +{ + if {! [send autoload get on]} \ + return + + foreach selection $selections { + if { [send zrange get on] } { + loadImage [lindex $selection 0] + } else { + loadImage $selection + } + } +}; send imageList addCallback flSelectPrint + + +# Load the named image in the display. +proc loadImage { name } \ +{ + global frame + + set fr [send frameFrame get label] + + if { $fr == "Current" } { set fr $frame } + + if { [fileSetOptions] >= 0 } { + send imagewin setCursorType busy + send client load $name $fr + send imagewin setCursorType idle + send fnameText set string $name + } +} + +# Load button callback. +proc fileLoadB args \ +{ + set fname [send fnameText get string] + if {$fname == ""} { + Wexec client "No image name specified" + } else { + loadImage $fname + } +} ; send filesLoadButton addCallback fileLoadB + + +# Send and selected options to the client before loading the image. +proc fileSetOptions args \ +{ + if { ![send zscale get on] && ![send zrange get on] } { + set z1 [send z1Value get string] + set z2 [send z2Value get string] + + if {$z1 == $z2} { + Wexec client "z1/z2 values are not set properly" + return -1 + } else { + send client setLoadOption z1 $z1 + send client setLoadOption z2 $z2 + } + } + + return 0 +} + + +################################################################################ +# Save panel functions. +################################################################################ + +# Global variables needed for the save setup panel + +set format rasButton +set saveColor svPseudoButton + +set fileFmtButtons { + rasButton gifButton jpegButton tiffButton + fitsButton x11Button epsButton rawButton +} + + +# Format group procedures. +#--------------------------------- + +# Select a format. + +proc set_format { widget func state args } \ +{ + global format saveColor + + send $format set on false + if {$widget == $format} { + send $widget set on true + } else { + switch $widget { + rasButton { send client setSaveOption format ras } + gifButton { send client setSaveOption format gif } + jpegButton { send client setSaveOption format jpeg } + tiffButton { send client setSaveOption format tiff } + fitsButton { send client setSaveOption format fits } + x11Button { send client setSaveOption format x11 } + epsButton { send client setSaveOption format eps } + rawButton { send client setSaveOption format raw } + } + } +} ; foreach fmt $fileFmtButtons { send $fmt addCallback set_format } + +proc setSaveFile { widget cbtype args } \ +{ + send client setSaveOption fname $args + send saveStatus set label [format "output file set to %s" $args] +}; send saveFile addCallback setSaveFile + + +proc doSaveOptions { param old new } \ +{ + global format saveColor + global warnings + + send saveStatus set label {} + set val [join [lrange $new 1 end] " "] + + #print [format "doSaveOptions %s = %s" [lindex $new 0] $val] + switch [lindex $new 0] { + format { + # Now (de)sensitize the color options depending on the format, + # force the color choice when needed. + send $format set on false + switch [lindex $val 0] { + ras { #send svRGBButton setSensitive false + send svPseudoButton setSensitive true + set format rasButton + } + gif { send svRGBButton setSensitive false + send svPseudoButton setSensitive true + if {$saveColor == "svRGBButton"} { + send $saveColor set on false + send svPseudoButton set on true + set saveColor svPseudoButton + } + set format gifButton + } + jpeg { send svRGBButton setSensitive true + send svPseudoButton setSensitive true + set format jpegButton + } + tiff { send svRGBButton setSensitive false + send svPseudoButton setSensitive true + set format tiffButton + } + fits { send svRGBButton setSensitive false + send svPseudoButton setSensitive false + send $saveColor set on false + send svGrayButton set on true + set saveColor svGrayButton + set format fitsButton + } + x11 { send svRGBButton setSensitive true + send svPseudoButton setSensitive true + set format x11Button + } + eps { send svRGBButton setSensitive true + send svPseudoButton setSensitive true + set format epsButton + } + raw { send svRGBButton setSensitive true + send svPseudoButton setSensitive true + set format rawButton + } + } + send $format set on true + } + color { send $saveColor set on false + switch [lindex $val 0] { + grayscale { send svGrayButton set on true + set saveColor svGrayButton + } + pseudocolor { send svPseudoButton set on true + set saveColor svPseudoButton + } + rgb { send svRGBButton set on true + set saveColor svRGBButton + } + } + } + fname { send saveFile set string $val + } + status { send saveStatus set label $val + send server synchronize + } + text { send saveData set label $val + } + warning { if {$warnings} { Wexec server $val } + } + } +} ; send saveOptions addCallback doSaveOptions + + +# Color group procedures. +#--------------------------------- +send svGrayButton addCallback "send client setSaveOption color grayscale" +send svPseudoButton addCallback "send client setSaveOption color pseudocolor" +send svRGBButton addCallback "send client setSaveOption color rgb" + + +proc Save args \ +{ + global panel_up + + send imagewin setCursorType busy + + # Get the print command or file template if not previous reset. + set val [ send saveFile get string ] + send client setSaveOption fname $val + send saveStatus set label [format "output file set to %s" $args] + + send client save + send imagewin setCursorType idle +} ; send okaySave addCallback Save + + + +################################################################################ +# TILE GEOMETRY +################################################################################ + +set tileSel 2 +set tileOpt 0 +set tileNcols 2 +set tileNrows 1 +set tile_frames {} + +proc selectTileOrientation { widget type select args } \ +{ + global tileSel tileOpt + + set w { nrowLab ncolLab nrdecrease nrincrease ncdecrease ncincrease } + if {$select == "Manual"} { + foreach p $w { send $p setSensitive True } + } elseif {$select != "none"} { + foreach p $w { send $p setSensitive False } + } + + set w { byCols bottomUp labelFrames labelImname labelTitles } + if {$select == "Disabled"} { + foreach p $w { send $p setSensitive False } + } else { + foreach p $w { send $p setSensitive True } + } + + switch $select { + Disabled { set tileSel 0 } + Manual { set tileSel 1 + set nx [send nctext get label] + set ny [send nrtext get label] + set select [format "%dx%d" $nx $ny] + } + Best { set tileSel 2 } + Square { set tileSel 3 } + Horizontal { set tileSel 4 } + Vertical { set tileSel 5 } + "One Row" { set tileSel 6 } + "One Column" { set tileSel 7 } + none { send tileMode set selection $tileSel ; return } + } + + # Reset the button in case we're called directly from elsewhere. + send tileMode set selection $tileSel + + # Send the option to the client. + if {$tileSel > 0} { + setTileFrames + send client setOption tileFrames "True" + set tileOpt $tileSel + } else { + send client setOption tileFrames "False" + } + +} ; send tileMode addCallback selectTileOrientation + +proc tileSelToLabel { selection args } \ +{ + switch $selection { + 0 { return "Disabled" } + 1 { return "Manual" } + 2 { return "Best" } + 3 { return "Square" } + 4 { return "Horizontal" } + 5 { return "Vertical" } + 6 { return "One Row" } + 7 { return "One Column" } + } + return "Best" +} + +# Callback for the fill style options. +proc selectFillStyle { widget type state args } \ +{ + if {$state} { set not False } else { set not True } + + switch $widget { + byCols { send client setOption tileByRows $not } + bottomUp { send client setOption tileTopDown $not } + } +} ; foreach w {byCols bottomUp} { send $w addCallback selectFillStyle } + +# Callback for the tile labelling options. +proc selectTileLabels { widget type state args } \ +{ + if {$state} { + switch $widget { + labelFrames { send client setOption tileLabels 1 } + labelImname { send client setOption tileLabels 2 } + labelTitles { send client setOption tileLabels 3 } + } + } else { + send client setOption tileLabels 0 + } + send $widget set on $state +} +foreach w {labelFrames labelImname labelTitles} { + send $w addCallback selectTileLabels +} + +# Callback for the Tile Frame selection toggles. +proc setTileFrames args \ +{ + global tile_frames tileSel tileNcols tileNrows + + # No-op if tiling isn't enabled. + if {$tileSel == 0} \ + return + + # Get the new tile frames list. + set tile_frames {} + for {set i 1} {$i <= 16} {incr i} { + if {[send tFrame$i get state]} { + lappend tile_frames $i + } + } + + # Reset the geometry. + set geom [format "%dx%d" $tileNcols $tileNrows] + switch $tileSel { + 1 { send client setOption tileGeom $geom \{ $tile_frames \} } + 2 { send client setOption tileGeom Best \{ $tile_frames \} } + 3 { send client setOption tileGeom Square \{ $tile_frames \} } + 4 { send client setOption tileGeom Horizontal \{ $tile_frames \} } + 5 { send client setOption tileGeom Vertical \{ $tile_frames \} } + 6 { send client setOption tileGeom Row \{ $tile_frames \} } + 7 { send client setOption tileGeom Column \{ $tile_frames \} } + } +}; for {set i 1} {$i <= 16} {incr i} {send tFrame$i addCallback setTileFrames} + +proc setAllTileFrames args \ +{ + global tileNcols tileNrows + for {set i 1} {$i <= 16} {incr i} { + if {[send tFrame$i get sensitive]} { + send tFrame$i set state True + } + } + setTileFrames +} ; send tAll addCallback setAllTileFrames + +proc setNoTileFrames args \ +{ + global tileNcols tileNrows + for {set i 1} {$i <= 16} {incr i} { + if {[send tFrame$i get sensitive]} { + send tFrame$i set state False + } + } + setTileFrames +} ; send tNone addCallback setNoTileFrames + +proc tileOptions { param old new } \ +{ + global tileNcols tileNrows + + set tileNcols [lindex $new 0] + set tileNrows [lindex $new 1] + + # Set the geometry. + send nctext set label $tileNcols + send nrtext set label $tileNrows + send tileGeometry set label [format \ + "Tile Geometry: %-2dx%2d" $tileNcols $tileNrows] + +} ; send tileOptions addCallback tileOptions + + +proc tileSetRows { widget args } \ +{ + global nframes tile_frames + + set nx [send nctext get label] + set ny [send nrtext get label] + + if {$widget == "nrdecrease" && [expr ($ny-1)] > 0} { + incr ny -1 + } elseif {$widget == "nrincrease" && [expr ($ny+1)] <= $nframes} { + incr ny 1 + } else { + return + } + set geom [format "%dx%d" $nx $ny] + send client setOption tileGeom $geom $tile_frames +} ; foreach w { nrdecrease nrincrease } { send $w addCallback tileSetRows } + +proc tileSetCols { widget args } \ +{ + global nframes tile_frames + + set nx [send nctext get label] + set ny [send nrtext get label] + + if {$widget == "ncdecrease" && [expr ($nx-1)] > 0} { + incr nx -1 + } elseif {$widget == "ncincrease" && [expr ($nx+1)] <= $nframes} { + incr nx 1 + } else { + return + } + set geom [format "%dx%d" $nx $ny] + send client setOption tileGeom $geom $tile_frames +} ; foreach w { ncdecrease ncincrease } { send $w addCallback tileSetCols } + + +# Initialize the frame tiling. +setAllTileFrames +selectTileOrientation junk junk Disabled +selectFillStyle byRows junk True +selectFillStyle topDown junk True +selectTileLabels labelImname junk False + +################################################################################ +# Coords Panel Callbacks. +################################################################################ + +# In case we need to change the values.... +#global wcsPHeight wcsPTxtHeight wcsPGrHeight wcsPOptHeight +#set wcsPHeight 267 +#set wcsPTxtHeight 132 +#set wcsPGrHeight 175 +#set wcsPOptHeight 233 +#setCoordPanelHeight + +set wcsPHeight 267 ;# full panel no options +set wcsPTxtHeight 132 ;# size of text area box +set wcsPGrHeight 175 ;# size of text area group +set wcsPOptHeight 233 ;# extra height for opts boxes + +# Set the WCS readout panel sensitivity depending on whether the ISM +# is currently enabled. +proc setCoordPanelSensitivity args \ +{ + set widgets { + wpWcs2 wpWcs3 wpWcs4 + wiWcs2 wiWcs3 wiWcs4 + wlWcs2 wlWcs3 wlWcs4 + sysWcs2 sysWcs3 sysWcs4 + fmtWcs2 fmtWcs3 fmtWcs4 + } + + send sysWcs1 set label "Display" + send fmtWcs1 set label "Default" + + for {set i 2} {$i <= 4} {incr i} { + send sysWcs$i set label "None" ; send fmtWcs$i set label "Default" + send wpWcs$i set on False ; send wiWcs$i set on False + send wtWcs$i set height 4 + } + + if {[send ismToggle get on]} { + send sysWcs2 set label "World" ; send fmtWcs2 set label "Default" + send wpWcs2 set on True ; send wiWcs2 set on True + send wtWcs2 set height 17 + + foreach w $widgets { send $w setSensitive True } + } else { + foreach w $widgets { send $w setSensitive False } + } +} + + +# Set the Coords Panel height depending on the option settings. +proc setCoordPanelHeight args \ +{ + global wcsPHeight wcsPOptHeight wcsPTxtHeight wcsPGrHeight + global tabTop + + if {$tabTop != "wcs_panel"} \ + return + + # Get the height of the text area + set panel_h $wcsPHeight + set shrinkage 0 + foreach w { wpWcs1 wpWcs2 wpWcs3 wpWcs4 woptFBinfo } { + if {[send $w get on] == 0} { + incr shrinkage 13 + } + } + if {[send woptTitles get on] == 0} { + incr shrinkage 26 + } + + set ph [expr ($wcsPHeight - $shrinkage)] + if {[send wcsOptions get on] == 1} { + incr ph $wcsPOptHeight + } + + send wcsGroup set height [ expr ($wcsPGrHeight - $shrinkage) ] + send wcsFrame set height [ expr ($wcsPTxtHeight - $shrinkage) ] + send panel set height $ph +} + +# Toggle the options display for the panel. +proc wcsOptToggle { widget type state args } \ +{ + global wcsPOptHeight + set h [ send panel get height ] + if {$state == 1} { + send panel set height [ expr ($h + $wcsPOptHeight) ] + } else { + send panel set height [ expr ($h - $wcsPOptHeight) ] + } +} ; send wcsOptions addCallback wcsOptToggle + +# Handle the panel display toggles. +proc wcsCoordsCB { widget type state args } \ +{ + + set hght [ expr (($state == 1) ? 17 : 4)] + switch $widget { + wpWcs1 { send wtWcs1 set height $hght } + wpWcs2 { send wtWcs2 set height $hght } + wpWcs3 { send wtWcs3 set height $hght } + wpWcs4 { send wtWcs4 set height $hght } + woptFBinfo { send wtFBCfg set height $hght } + woptTitles { send wtName set height $hght ; send wtTitle set height $hght } + } + setCoordPanelHeight +} +set wcValues { wpWcs1 wpWcs2 wpWcs3 wpWcs4 woptFBinfo woptTitles } +foreach w $wcValues { send $w addCallback wcsCoordsCB } + + +# Handle WCS label string options. +set wcsLabels 1 +proc wcsLabelsCB { widget type state args } \ +{ + global up_todo wcsLabels + set wcsLabels $state + #resizeCoordsBox 0 + resizeCoordsBox $up_todo + updateCoordsBox +} ; send woptLabels addCallback wcsLabelsCB + + +# Toggle the BPM tracking state. +proc wcsBPMCB { widget type state args } \ +{ + global ism_enable + if ($ism_enable) { catch { send wcspix set bpm $state } } +} ; send woptBPM addCallback wcsBPMCB + + +# Procedures to format lines in the wcsText box. +proc wcsFmtImname { name } \ +{ + send wtName set string [format " Name: %s" [string trimleft $name]] +} + +proc wcsFmtImtitle { title } \ +{ + send wtTitle set string [format " Title: %s" [string trimleft $title]] +} + +proc wcsFmtFBConfig args \ +{ + global frameWidth frameHeight frame nframes + set buf [ format "%5d x %-5d" $frameWidth $frameHeight ] + set line [ format "Frame Buf: %-13s Frame: %d of %d" \ + [string trimleft $buf] $frame $nframes ] + send wtFBCfg set string $line +} + +proc wcsFmtIValue { value } \ +{ + global coord + set line [ format " Pixel: %.11s" $value ] + send wtIPixval set string $line + if {[info exists coord(ival)]} { + set coord(ival) $value + updateCoordsBox + } +} + +proc wcsFmtSValue { value } \ +{ + global coord + set line [ format " Scaled: %.8s" $value ] + send wtSPixval set string $line + set coord(sval) [format "%s" $value] +} + +proc wcsFmtBValue { value } \ +{ + global coord + + if { [send woptBPM get on] } { + set line [ format " BPM: %s" $value ] + set color [expr { ($value == 0) ? "black" : "red" } ] + set msg [format "set string \{%s\}; set background %s" $line $color ] + set coord(bval) [format "%s" $value] + } else { + set line [ format " BPM: (off)" ] + set msg [format "set string \{%s\}" $line] + } + send wtBPixval $msg +} + +proc wcsFmtWcs { num wcsname x y xunit yunit args } \ +{ + global coord coordLab wcsLabels + + if {$wcsLabels} { + set line [ format "%4s: %12s %4s: %12s WCS: %s" \ + $xunit $x $yunit $y [string trimleft $wcsname] ] + } else { + set line [ format "%4s %12s %4s %12s %s" \ + " " $x " " $y [string trimleft $wcsname] ] + } + send wtWcs$num set string $line + + if {[info exists coord(wcs$num)]} { + if {$num == 1} { + set coord(wcs1) [ format "\{%s\} \{%s\} \{%s\}" $x $y $coord(sval) ] + } elseif {$num == 2} { + set coord(wcs2) [ format "\{%s\} \{%s\} \{%s\}" $x $y $coord(ival) ] + } else { + set coord(wcs$num) [ format "\{%s\} \{%s\} \{%s\}" $x $y $wcsname ] + } + + set coordLab(wcs$num) [ format "\{%s\} \{%s\} \{%s\}" \ + $xunit $yunit [string trimleft $wcsname ] ] + updateCoordsBox + } +} + + + +# Handle the wcsbox readout. +#------------------------------ +set up_todo 2 +set up_done 0 +set coord(ival) 0. +set coord(sval) 0. +set coord(bval) 0 +set coord(wcs1) { 0. 0. 0. } +set coord(wcs2) { 0. 0. 0. } +set coord(wcs3) { 0. 0. 0. } +set coord(wcs4) { 0. 0. 0. } + +proc wcsCoordB { widget type state args } \ +{ + global coord up_todo + + switch $widget { + wiWcs1 { set line wcs1 ;set coord($line) { 0. 0. "" } } + wiWcs2 { set line wcs2 ;set coord($line) { 0. 0. "" } } + wiWcs3 { set line wcs3 ;set coord($line) { 0. 0. "" } } + wiWcs4 { set line wcs4 ;set coord($line) { 0. 0. "" } } + } + + if {$state} { + incr up_todo + } else { + unset coord($line) + incr up_todo -1 + } + + resizeCoordsBox $up_todo + updateCoordsBox +} +set wiValues { wiWcs1 wiWcs2 wiWcs3 wiWcs4 } +foreach w $wiValues { send $w addCallback wcsCoordB } + + +# Resize the coords box depending on the panel options. +proc resizeCoordsBox { nlines } \ +{ + global track_enable wcsLabels winWidth winHeight wcsboxGeom + + if {! $track_enable} \ + return + + send wcsbox getAttributes width cur_w height cur_h + set defGeom [format "%sx%s-5-5" $cur_w $cur_h] + send imagewin parseGeometry $wcsboxGeom $defGeom x y width height + + set ew [expr (($wcsLabels == 1) ? 125 : 65)] + + # Reset to the default geometry + if {$nlines == 0} { + set x [expr ($x + $ew)] + set y [expr ($y + $height - 17 + 1)] + set new_w 166 + set new_h 17 + + } else { + if {$width > 166} { ;# not using default wcsbox + set new_w $width + } else { + set new_w [expr ($width + $ew)] + set x [expr ($x - $ew)] + if {$wcsLabels == 0} { + incr x 60 + } + } + set new_h [ expr ($nlines * 17) ] + set y [expr ($y + $height - $new_h + 1)] + } + + # Bounds checking. + if {$x < 5} { + set x 5 + } elseif {$x > [expr ($winWidth - $new_w - 5)]} { + set x [expr ($winWidth - $new_w - 5)] + } + if {$y < 5} { + set y 5 + } elseif {$y > [expr ($winHeight - $new_h - 5)]} { + set y [expr ($winHeight - $new_h - 5)] + } + + # Finally redraw the marker. + send wcsbox "\ + setAttributes \ + width $new_w \ + height $new_h \ + x $x \ + y $y; \ + redraw" + + set wcsboxGeom [send imagewin getGeometry $x $y $new_w $new_h] + send client encodewcs [expr ($winWidth / 2)] [expr ($winHeight / 2)] + updateCoordsBox +} + + +# Shortcuts for known WCS labels. +set labels(display) "TV" +set labels(logical) "Log" +set labels(physical) "Phys" +set labels(equatorial) "Eq" +set labels(ecliptic) "Ecl" +set labels(galactic) "Gal" +set labels(supergalactic) "SGal" +set labels(amplifier) "Amp" +set labels(ccd) "CCD" +set labels(detector) "Det" + + +# Format the coords box marker with the selected output options. +proc updateCoordsBox args \ +{ + global ism_enable coord coordLab wcsLabels + global up_done up_todo labels track_enable + global coord + + if {! $ism_enable} \ + return + + incr up_done + + set text "" + foreach l {wcs1 wcs2 wcs3 wcs4} { + if {[info exists coord($l)]} { + set x [lindex $coord($l) 0] + set y [lindex $coord($l) 1] + set z [string tolower [string trimleft [lindex $coord($l) 2] ] ] + if {[info exists labels($z)]} { + set z $labels($z) + } + + if {$wcsLabels && [info exists coordLab($l)]} { + set lx [lindex $coordLab($l) 0] + set ly [lindex $coordLab($l) 1] + append text [format " %4s %12.12s %4s %12.12s %9.9s \n" \ + $lx $x $ly $y $z ] + } else { + append text [format " %12.12s %12.12s %9.9s \n" $x $y $z ] + } + } + } + + # Now send the string. + if {$track_enable} { + set color [expr { ($coord(bval) == 0) ? "black" : "red" } ] + set txt [format "set text \{%s\}; set textBgColor %s; redraw noerase" \ + $text $color ] + send wcsbox $txt + } + + if {$up_done >= $up_todo} { + set up_done 0 ;# reset counter + } +} + + +# Create the WCS format menus. +#------------------------------------ +proc setWcsFmt { format line } \ +{ + catch { send wcspix set format $format $line } +} + +for {set i 1} {$i <= 4} {incr i} { + set items {} + lappend items "\"Default\" f.exec \{setWcsFmt default $i\}" + lappend items "\"Sexigesimal\" f.exec \{setWcsFmt hms $i\}" + lappend items "\"Degrees\" f.exec \{setWcsFmt deg $i\}" + lappend items "\"Radians\" f.exec \{setWcsFmt rad $i\}" + editMenu fmtMenu$i fmtWcs$i $items +} + + +# Create the default WCS type menus. +#------------------------------------ + +set defaultWcsMenu { + { "None" f.exec {setWcsSys none WCS_LINE } } + { "Display" f.exec {setWcsSys display WCS_LINE } } + { "World" f.exec {setWcsSys world WCS_LINE } } + { "Logical" f.exec {setWcsSys logical WCS_LINE } } + { "Physical" f.exec {setWcsSys physical WCS_LINE } } + { f.dblline } +} + +proc setWcsSys { sys line } \ +{ + if {[string tolower $sys] == "none"} { + wcsCoordB wiWcs$line junk 0 + send sysWcs$line set label "None"; send fmtWcs$line set label "Default" + send wpWcs$line set on False ; send wiWcs$line set on False + send wtWcs$line set height 4 + setCoordPanelHeight + + } else { + catch { send wcspix set wcs $sys $line } + } +} + +proc resetDefaultWcsMenu args \ +{ + global defaultWcsMenu + + for {set i 1} {$i <= 4} {incr i} { + regsub -all WCS_LINE $defaultWcsMenu $i menu_def + editMenu sysMenu$i sysWcs$i $menu_def + } +} ; resetDefaultWcsMenu + + +# Initialize the coordinates panel. +#------------------------------------ + +proc initCoordsPanel args \ +{ + #send wcLine set height 2 ;# kludge for label widget + + # Initialize the display strings in the coords box. + wcsFmtImname "" + wcsFmtImtitle "" + wcsFmtFBConfig + wcsFmtIValue "0." ; wcsFmtSValue "0." ; wcsFmtBValue "0" + wcsFmtWcs 1 "" "" "" " X" " Y" + wcsFmtWcs 2 "" "" "" " X" " Y" + wcsFmtWcs 3 "" "" "" " X" " Y" + wcsFmtWcs 4 "" "" "" " X" " Y" + + send fmtWcs1 set label Default + send wpWcs1 set on True ;send wiWcs1 set on True + send wpWcs2 set on True ;send wiWcs2 set on True + send wpWcs3 set on False ;send wiWcs3 set on False ;send wtWcs3 set height 4 + send wpWcs4 set on False ;send wiWcs4 set on False ;send wtWcs4 set height 4 + + # Set the Coords Panel height. + set wcsPTxtHeight [send wcsText get height] + setCoordPanelHeight + + # Set the WCS readout panel sensitivity. + setCoordPanelSensitivity + +} ; initCoordsPanel + + + + +################################################################################ +# Compass indicator procedures. +################################################################################ + +set compassColor 207 ;# normally this is yellow +set last_compass [send compass get on] ;# save compass state + +proc drawCompass args \ +{ + global ism_enable frame frameCache compassColor Compass Orient + global panner_x panner_y panner_width panner_height cur_objid + global redraw_compass last_compass + + + if {! [send compass get on]} \ + return + + eraseCompass ;# erase the old compass + + if {! [info exists frameCache($frame)] } { + set id -1 + } elseif {$cur_objid != [lindex $frameCache($frame) 1]} { + set id [lindex $frameCache($frame) 1] + } else { + set id $cur_objid + } + + if { [info exists Compass($id)] } { + set angle [lindex $Compass($id) 0] + set north_x [lindex $Compass($id) 1] + set north_y [lindex $Compass($id) 2] + set east_x [lindex $Compass($id) 3] + set east_y [lindex $Compass($id) 4] + set transpose [lindex $Compass($id) 5] + set xlab [lindex $Compass($id) 6] + set ylab [lindex $Compass($id) 7] + } else { + set north_x 0.0 ; set north_y 1.0 + set east_x 1.0 ; set east_y 0.0 + set xlab X ; set ylab Y + set angle 0.0 ; set transpose 0 + set Compass($id) { 0.0 1.0 0.0 1.0 0.0 0 X Y } + } + set xflip 1 + set yflip 1 + + # Adjust the compass for the display orientation (e.g. image sections + # used to flip an image during display). + if { [info exists Orient($id)] } { + set xflip [expr $xflip * [lindex $Orient($id) 1] ] + set yflip [expr $yflip * [lindex $Orient($id) 2] ] + } + + # Get the panner center position. + set pcx [expr ($panner_x + $panner_width / 2)] + set pcy [expr ($panner_y + $panner_height / 2)] + + # Setup for the overlay. + send imagewin getLogRes sv_xl sv_yl + send imagewin getPhysRes sv_xp sv_yp + send imagewin setLogRes $sv_xp $sv_yp + send imagewin setLineWidth 2 + + set xflip [ expr ($xflip * ([send xflipButton get state] ? -1 : 1))] + set yflip [ expr ($yflip * ([send yflipButton get state] ? -1 : 1))] + + # Normalized compass points. The first row are the axes, second is + # the pointer head, and last are the X/Y label coords. Assumes a + # zero rotation with North up and East left, or standard X/Y orientation. + set cpoints { + {-1 0} {0 0} {0 -1} + {-0.07 -0.85} {0 -1} {0.07 -0.85} {-0.07 -0.85} + {-1.2 0} {0 -1.2} + } + + + # Get rotation and scale factors. + set angle [expr "atan2($north_y,$north_x)"] + set coso [expr "cos (-$angle)"] + set sino [expr "sin (-$angle)"] + set scale [expr ([min $panner_width $panner_height] * 0.3)] + + # Initialize the drawing points. + set pts {} + + set cpoints { } + lappend cpoints [list $east_x $east_y ] + lappend cpoints [list 0 0] + lappend cpoints [list $north_x $north_y] + foreach p $cpoints { + # Get the scaled position. + set sx [expr ($scale * [lindex $p [expr "($transpose > 0) ? 1 : 0"]])] + set sy [expr ($scale * [lindex $p [expr "($transpose > 0) ? 0 : 1"]])] + + # Translate to the scaled position. + set rx [expr int($pcx + $sx + 0.5)] + set ry [expr int($pcy - $sy + 0.5)] + + # Now handle the axis flip. + set rx [expr (($xflip < 0) ? ($pcx + ($pcx - $rx)) : $rx)] + set ry [expr (($yflip < 0) ? ($pcy + ($pcy - $ry)) : $ry)] + lappend pts $rx $ry + } + + + set rpoints { } + set hpoints { {0.0 0.0} {-0.1 -0.07} {-0.1 0.07} {0.0 0.0} } + foreach p $hpoints { + # Break out the position. + set sx [lindex $p [expr "($transpose > 0) ? 1 : 0"]] + set sy [lindex $p [expr "($transpose > 0) ? 0 : 1"]] + + # Do the rotation of the head at the origin. + set rx [expr ($north_x + ($sx * $coso + $sy * $sino))] + set ry [expr ($north_y - ($sx * $sino + $sy * $coso))] + + lappend rpoints [list $rx $ry] + } + foreach p $rpoints { + # Get the scaled position. + set sx [expr ($scale * [lindex $p [expr "($transpose > 0) ? 1 : 0"]])] + set sy [expr ($scale * [lindex $p [expr "($transpose > 0) ? 0 : 1"]])] + + # Translate to the scaled position. + set rx [expr int($pcx + $sx + 0.5)] + set ry [expr int($pcy - $sy + 0.5)] + + # Now handle the axis flip. + set rx [expr (($xflip < 0) ? ($pcx + ($pcx - $rx)) : $rx)] + set ry [expr (($yflip < 0) ? ($pcy + ($pcy - $ry)) : $ry)] + lappend pts $rx $ry + } + + set lpoints { } + lappend lpoints [list [expr "$east_x-0.2"] $east_y ] + lappend lpoints [list $north_x [expr "$north_y+0.2"] ] + foreach p $lpoints { + # Get the scaled position. + set sx [expr ($scale * [lindex $p [expr "($transpose > 0) ? 1 : 0"]])] + set sy [expr ($scale * [lindex $p [expr "($transpose > 0) ? 0 : 1"]])] + + # Translate to the scaled position. + set rx [expr int($pcx + $sx + 0.5)] + set ry [expr int($pcy - $sy - 0.5)] + + # Now handle the axis flip. + set rx [expr (($xflip < 0) ? ($pcx + ($pcx - $rx)) : $rx)] + set ry [expr (($yflip < 0) ? ($pcy + ($pcy - $ry)) : $ry)] + lappend pts $rx $ry + } + + + # Draw the compass axes. + set compassPts [lrange $pts 0 5] + send imagewin setColorIndex $compassColor + send imagewin drawPolyline $compassPts + + + # Draw the compass pointer. + set head [lrange $pts 6 13] + send imagewin setFillType solid + send imagewin drawPolygon $head + + # Draw the labels. + send imagewin drawAlphaText [lindex $pts 14] [lindex $pts 15] $xlab + send imagewin drawAlphaText [lindex $pts 16] [lindex $pts 17] $ylab + + send imagewin setLogRes $sv_xl $sv_yl + + set redraw_compass 0 + +} ; foreach w {xflip yflip} { send $w addCallback drawCompass } + + +# This is a kludge to redraw the compass after it is erased when displaying +# a new image. Once the user moves the mouse back into the main window we'll +# do the redraw. +send imagewin addEventHandler drawCompass enterWindowMask + + + +proc createCompassMarker { pts args } \ +{ + set cm_points { } + lappend cm_points [lrange $pts 0 1] + lappend cm_points [lrange $pts 2 3] + lappend cm_points [lrange $pts 4 5] + + print [list $cm_points] + +} + + +proc eraseCompass args \ +{ + global panner_mapping + send imagewin refreshMapping $panner_mapping +} + +proc toggleCompass { widget type state args } \ +{ + global last_compass + + if {$state} { + drawCompass + set last_compass True + } else { + eraseCompass + set last_compass False + } +} ; send compass addCallback toggleCompass + + + + +################################################################################ +# RULER MARKERS +################################################################################ + +set rulerX 0 ;# ruler start in screen coords +set rulerY 0 +set rulerPts { {0 0} {0 0} {0 0} } ;# ruler vertices +set rulerList { } ;# ruler list + +set rulerSticky { } ;# list of sticky rulers +set isSticky "Sticky" ;# menu label + +set rulerWCS 0 ;# use WCS coords +set rulerXWCS 0 ;# ruler start in WCS units +set rulerYWCS 0 +set rulerXWCS2 0 ;# ruler end in WCS units +set rulerYWCS2 0 +set rulerFmt pixel ;# ruler label format + + +# Translations when pointer is inside marker. +set rulerTranslations { \ + !Ctrl b: call(prevFrame,$name) + !Ctrl b: call(prevFrame,$name) + !Ctrl f: call(nextFrame,$name) + !Ctrl h: call(move_cursor,-1,0) + !Ctrl j: call(move_cursor,0,1) + !Ctrl k: call(move_cursor,0,-1) + !Ctrl l: call(move_cursor,1,0) + !Ctrl n: call(normalize) + !Ctrl c: call(cpZoomAction,centerFrame) + !Ctrl i: call(cpInvert) + !Ctrl m: call(cpMatchFrames) + !Ctrl r: call(cpRegisterFrames) + !Ctrl p: call(togglePanner) + !Alt 1: call(cpSetFrame,frame1) + !Alt 2: call(cpSetFrame,frame2) + !Alt 3: call(cpSetFrame,frame3) + !Alt 4: call(cpSetFrame,frame4) + !Ctrl 1: call(cpZoom,1,1,fixed) + !Ctrl 2: call(cpZoom,2,2,fixed) + !Ctrl 3: call(cpZoom,3,3,fixed) + !Ctrl 4: call(cpZoom,4,4,fixed) + !Ctrl 5: call(cpZoom,5,5,fixed) + !Ctrl 6: call(cpZoom,6,6,fixed) + !Ctrl 7: call(cpZoom,7,7,fixed) + !Ctrl 8: call(cpZoom,8,8,fixed) + !Ctrl 9: call(cpZoom,9,9,fixed) + BackSpace: call(deleteNamedRuler,NAME,$x,$y) + Delete: call(deleteNamedRuler,NAME,$x,$y) + : m_input() + : call(setRulerMenu) popup(rulerMenu) + : popdown(rulerMenu) +!Ctrl : track-cursor() call(wcsUpdate,$x,$y) call(resizeRuler,$x,$y,0) + !Ctrl : call(deleteRuler,$x,$y) + : track-cursor() call(wcsUpdate,$x,$y) call(magnifierMapImage,$x,$y) +} + + + +# Popup menu in effect when inside marker. +set rulerMenuDescription { + { "Ruler" f.title } + { f.dblline } + { "$isSticky" f.exec { + toggleSticky $ruler + } } + { f.line } + { "Units" f.menu rulerUnits } + { "Color" f.menu rulerColor } + { f.line } + { "Draw into Frame" f.exec { + writeRuler $ruler + } sensitive False } + { f.line } + { "Destroy" f.exec { + scan $ruler "ruler%d" num + deleteNamedRuler $num x y + } } +} ; createMenu rulerMenu imagewin $rulerMenuDescription + +set rulerUnitsDescription { + { Units f.title } + { f.dblline } + { "Pixels" f.exec { setUnits $ruler pixel } } + { "Arc Seconds" f.exec { setUnits $ruler arcsec + } sensitive { ($rulerWCS > 0) ? "True" : "False"} } + { "Arc Minutes" f.exec { setUnits $ruler arcmin + } sensitive { ($rulerWCS > 0) ? "True" : "False"} } + { "Degrees" f.exec { setUnits $ruler degrees + } sensitive { ($rulerWCS > 0) ? "True" : "False"} } +} ; createMenu rulerUnits rulerMenu $rulerUnitsDescription + +set rulerColorDescription { + { Color f.title } + { f.dblline } + { "" f.exec "r_setColor $ruler black yellow" + bitmap solid foreground black } + { "" f.exec "r_setColor $ruler white black" + bitmap solid foreground white } + { "" f.exec "r_setColor $ruler red yellow" + bitmap solid foreground red } + { "" f.exec "r_setColor $ruler green black" + bitmap solid foreground green } + { "" f.exec "r_setColor $ruler blue white" + bitmap solid foreground blue } + { "" f.exec "r_setColor $ruler magenta black" + bitmap solid foreground magenta } + { "" f.exec "r_setColor $ruler cyan black" + bitmap solid foreground cyan } + { "" f.exec "r_setColor $ruler yellow black" + bitmap solid foreground yellow } +} ; createMenu rulerColor rulerMenu $rulerColorDescription + + +proc makeRuler {parent x y} \ +{ + global rulerTranslations ruleno rulerWCS rulerXWCS rulerYWCS + global rulerPts rulerX rulerY rulerList + global isSticky rulerMenuDescription rulerUnitsDescription + global coord coordLab + + + incr ruleno ; set ruler ruler$ruleno + + # Substitute so the marker translation will delete the marker + # by it's number rather than the default parent widget name. + regsub -all NAME $rulerTranslations $ruleno translations + + # Create the polygon for the marker. + send $parent createMarker $ruler \ + type polygon\ + createMode noninteractive\ + translations $translations\ + lineColor yellow\ + fill False\ + highlightWidth 1\ + highlightColor yellow\ + knotSize 0\ + activated True\ + visible False\ + sensitive True\ + x $x\ + y $y + + # Define a callback so we can identify the ruler. + send $ruler addCallback selectRuler focusIn focusOut + + # Create the text markers for the labels. + send $parent set markerTextFont 6x9 + makeLabelMarker $parent rulerXlab$ruleno 5ch 1ch + makeLabelMarker $parent rulerYlab$ruleno 5ch 1ch + makeLabelMarker $parent rulerHlab$ruleno 8ch 1ch + send $parent set markerTextFont 6x13 + + set rulerX $x ;# save the reference point + set rulerY $y + + set ref [ list $x $y ] ;# initialize the polygon + set rx [ list [expr "$x +1"] $y ] + set ry [ list $x [expr "$y +1"] ] + set rulerPts [list $ref $rx $ry ] + + send $ruler setVertices $rulerPts ;# set attributes + send $ruler set visible True" + send $ruler setAttribute autoRedraw True + + # See whether we have a WCS to use. + set rulerWCS 0 + set rulerXWCS 0 + set rulerYWCS 0 + for {set num 1} {$num <= 4 && $rulerWCS == 0} {incr num} { + if { [info exists coordLab(wcs$num)] } { + set xl [string tolower [lindex $coordLab(wcs$num) 0]] + set yl [string tolower [lindex $coordLab(wcs$num) 1]] + set fmt [string tolower [send fmtWcs$num get label] ] + if {$xl==" ra" || $xl=="elon" || $xl=="glon" || $xl=="slon"} { + set rulerWCS $num + set rulerXWCS [wcs2log [lindex $coord(wcs$num) 0] $xl $fmt] + set rulerYWCS [wcs2log [lindex $coord(wcs$num) 1] $yl $fmt] + } + } + } + + # Edit the menus. + set isSticky "Sticky" + editMenu rulerMenu imagewin $rulerMenuDescription + editMenu rulerUnits imagewin $rulerUnitsDescription + + + lappend rulerList $ruleno +} + +proc wcs2log { val label fmt} \ +{ + set newval $val + if {$fmt == "sexigesimal" || $fmt == "default"} { + scan $val "%d:%d:%f" h m s + set newval [expr "double($h) + double($m) / 60.0 + double($s) / 3600.0"] + if {$label == " ra"} { + set newval [expr "double($newval * 15.0)"] + } + } + return [expr "double($newval)" ] +} + + +proc resizeRuler {x y redraw} \ +{ + global rulerPts rulerX rulerY ruleno coord coordLab + global rulerWCS rulerXWCS rulerYWCS rulerFmt + global rulerXWCS2 rulerYWCS2 + + + # Track the mouse. + set ref [ list $rulerX $rulerY ] + set rx [ list $x $rulerY ] + set ry [ list $x $y ] + set rulerPts [list $ref $rx $ry ] + + # Compute the distances. + if {$rulerWCS > 0} { + set num $rulerWCS + set xl [string tolower [lindex $coordLab(wcs$num) 0]] + set yl [string tolower [lindex $coordLab(wcs$num) 1]] + set fmt [string tolower [send fmtWcs$num get label] ] + + # Save the cursor coords in WCS so we can convert labels. + if {$redraw} { + set nx $rulerXWCS2 + set ny $rulerYWCS2 + } else { + set nx [wcs2log [lindex $coord(wcs$num) 0] $xl $fmt] + set ny [wcs2log [lindex $coord(wcs$num) 1] $yl $fmt] + set rulerXWCS2 $nx + set rulerYWCS2 $ny + } + } + + if {$rulerFmt == "pixel"} { + set xdist [ expr "abs($x - $rulerX)" ] + set ydist [ expr "abs($y - $rulerY)" ] + set hdist [ expr "sqrt($xdist * $xdist + $ydist * $ydist)" ] + } else { + set xdist [ expr "abs($nx - $rulerXWCS)" ] + set ydist [ expr "abs($ny - $rulerYWCS)" ] + set hdist [ expr "sqrt($xdist * $xdist + $ydist * $ydist)" ] + } + + # Redraw the polygon. + send ruler$ruleno setVertices $rulerPts + + # Label the distances. + setXRulerLabel $x $y $xdist + setYRulerLabel $x $y $ydist + setHRulerLabel $x $y $hdist +} + +# Create a label marker for the ruler. +proc makeLabelMarker { parent name width height } \ +{ + send $parent createMarker $name \ + type text \ + createMode noninteractive \ + width $width \ + height $height \ + lineWidth 0 \ + imageText true \ + textBgColor yellow \ + textColor black \ + activated true \ + visible false +} + +proc setXRulerLabel { cx cy dist } \ +{ + global rulerX rulerY ruleno winWidth winHeight + global cpXscale rulerFmt + + send rulerXlab$ruleno set visible False + + if {[expr "abs($cx - $rulerX)"] > 30} { + switch $rulerFmt { + pixel { set text [format "%.1f" [expr "$dist / $cpXscale"] ] } + arcsec { set text [format "%.2f\"" [expr "$dist * 3600.0"] ] } + arcmin { set text [format "%.2f\'" [expr "$dist * 60.0"] ] } + degrees { set text [format "%.2fd" "$dist" ] } + } + set len [expr [string length $text] + 1] + send rulerXlab$ruleno "set width ${len}ch" + + # Compute the placement of the label marker. + if {$cy > $rulerY} { + set yp [expr "$rulerY - 14"] + } else { + set yp [expr "$rulerY + 2"] + } + if {$cx > $rulerX} { + set xp [expr "$rulerX + abs($cx - $rulerX)/2 - 10"] + } else { + set xp [expr "$rulerX - abs($cx - $rulerX)/2 - 10"] + } + + # Bounds checking. + if {$xp < 0} { set xp 1 } + if {$yp < 0} { set yp 1 } + if {$xp > $winWidth} { set xp [expr "$winWidth - 20" } + if {$yp > $winHeight} { set yp [expr "$winHeight - 20" } + + send rulerXlab$ruleno "setAttributes x $xp y $yp" + send rulerXlab$ruleno "set text \{$text\}; redraw erase" + + send rulerXlab$ruleno set visible True + } +} + +proc setYRulerLabel { cx cy dist } \ +{ + global rulerX rulerY ruleno winWidth winHeight + global cpYscale rulerFmt + + send rulerYlab$ruleno set visible False + + if {[expr "abs($cy - $rulerY)"] > 20} { + switch $rulerFmt { + pixel { set text [format "%.1f" [expr "$dist / $cpYscale"] ] } + arcsec { set text [format "%.2f\"" [expr "$dist * 3600.0"] ] } + arcmin { set text [format "%.2f\'" [expr "$dist * 60.0"] ] } + degrees { set text [format "%.2fd" "$dist" ] } + } + set len [expr [string length $text] + 1] + send rulerYlab$ruleno "set width ${len}ch" + + # Compute the placement of the label marker. + if {$cx > $rulerX} { + set xp [expr "$cx + 2"] + } else { + set xp [expr "$cx - $len * 6 - 5"] + } + if {$cy > $rulerY} { + set yp [expr "$rulerY + abs($cy - $rulerY)/2"] + } else { + set yp [expr "$rulerY - abs($cy - $rulerY)/2"] + } + + # Bounds checking. + if {$xp < 0} { set xp 1 } + if {$yp < 0} { set yp 1 } + if {$xp > $winWidth} { set xp [expr "$winWidth - 20" } + if {$yp > $winHeight} { set yp [expr "$winHeight - 20" } + + send rulerYlab$ruleno "setAttributes x $xp y $yp" + send rulerYlab$ruleno "set text \{$text\}; redraw erase" + send rulerYlab$ruleno set visible True + } +} + +proc setHRulerLabel { cx cy dist } \ +{ + global rulerX rulerY ruleno winWidth winHeight + global cpYscale cpXscale rulerFmt + + send rulerHlab$ruleno set visible False + + set xdist [ expr "abs($cx - $rulerX)" ] + set ydist [ expr "abs($cy - $rulerY)" ] + set hdist [ expr "sqrt($xdist * $xdist + $ydist * $ydist)" ] + + if {$hdist > 30} { + switch $rulerFmt { + pixel { set text [format "%.1f" [expr "$dist / $cpXscale"] ] } + arcsec { set text [format "%.2f\"" [expr "$dist * 3600.0"] ] } + arcmin { set text [format "%.2f\'" [expr "$dist * 60.0"] ] } + degrees { set text [format "%.2fd" "$dist" ] } + } + set len [expr [string length $text] + 1] + send rulerHlab$ruleno "set width ${len}ch" + + # Compute the placement of the label marker. + if {$cx > $rulerX} { + set xp [expr "$rulerX + abs($cx - $rulerX)/2 - $len * 6"] + } else { + set xp [expr "$rulerX - abs($cx - $rulerX)/2 - $len * 3"] + } + if {$cy > $rulerY} { + set yp [expr "$rulerY + abs($cy - $rulerY)/2"] + } else { + set yp [expr "$rulerY - abs($cy - $rulerY)/2"] + } + + # Bounds checking. + if {$xp < 0} { set xp 1 } + if {$yp < 0} { set yp 1 } + if {$xp > $winWidth} { set xp [expr "$winWidth - 20" } + if {$yp > $winHeight} { set yp [expr "$winHeight - 20" } + + send rulerHlab$ruleno "setAttributes x $xp y $yp" + send rulerHlab$ruleno "set text \{$text\}; redraw erase" + send rulerHlab$ruleno set visible True + } else { + send rulerHlab$ruleno set visible False + } +} + + +# Callback executed when a marker gets or loses the focus. +proc selectRuler {active_ruler event event_data} \ +{ + global ruler + switch $event { + focusIn { set ruler $active_ruler } + focusOut { } + } +} + +# Reset the ruler format type. +proc setUnits { ruler units } \ +{ + global rulerFmt rulerX rulerY + + send $ruler getVertices pts + set rulerX [lindex [lindex [lindex $pts 0] 0] 0] + set rulerY [lindex [lindex [lindex $pts 0] 0] 1] + set cx [lindex [lindex [lindex $pts 0] 1] 0] ; incr cx -1 + set cy [lindex [lindex [lindex $pts 0] 2] 1] ; incr cy -1 + + set rulerFmt $units + resizeRuler $cx $cy 1 +} + +# Menu option toggle callbacks. +proc toggleSticky { ruler } \ +{ + global isSticky rulerSticky rulerMenuDescription + + set index [ lsearch $rulerSticky $ruler] + if { $index >= 0 } { + # Remove it from the list. + set rulerSticky [lreplace $rulerSticky $index $index] + set isSticky "Sticky" + } else { + # Add it to the list. + lappend rulerSticky $ruler + set isSticky "UnSticky" + } + editMenu rulerMenu imagewin $rulerMenuDescription +} + +proc setRulerMenu args \ +{ + global ruler isSticky rulerSticky rulerMenuDescription + + if { [lsearch $rulerSticky $ruler] >= 0 } { + set isSticky "UnSticky" + } else { + set isSticky "Sticky" + } + editMenu rulerMenu imagewin $rulerMenuDescription +} + + +# Draw the ruler to the frame buffer as a graphic. +proc writeRuler { ruler } \ +{ +} + +# Change the color of the ruler. +proc r_setColor {ruler bgcolor fgcolor} { + + # Recolor the polygon. + send $ruler \ + "markpos; set lineColor $bgcolor; set highlightColor $bgcolor; redraw" + + # Recolor the labels. + scan $ruler "ruler%d" num + send rulerXlab$num \ + "markpos; set textBgColor $bgcolor; set textColor $fgcolor; redraw" + send rulerYlab$num \ + "markpos; set textBgColor $bgcolor; set textColor $fgcolor; redraw" + send rulerHlab$num \ + "markpos; set textBgColor $bgcolor; set textColor $fgcolor; redraw" +} + + +# Delete the current ruler, called when we have a Btn1Up on the current ruler. +proc deleteRuler {x y} { global ruleno ; deleteNamedRuler $ruleno $x $y } + +# Delete all rulers on the screen, usually called when the view changes. +# We preserve the rulers marked as 'sticky'. +proc deleteAllRulers args \ +{ + global rulerList rulerSticky + + foreach r $rulerList { + # Delete the ruler if it's not in the sticky list. + if { [lsearch $rulerSticky ruler$r] == -1 } { + deleteNamedRuler $r x y + } + } +} + +# Delete a particular ruler, usually called from the translation table on +# the marker itself. +proc deleteNamedRuler {name x y} \ +{ + global rulerList + + catch { + send ruler$name destroy + send rulerXlab$name destroy + send rulerYlab$name destroy + send rulerHlab$name destroy + } + + # Remove the ruler from the list. + set index [lsearch $rulerList $name] + set rulerList [lreplace $rulerList $index $index] +} + + + + + +############################################### +# Define procedure for the help panel +############################################### + +# Help Panel Bitmaps +#------------------- +createBitmap iraf_logo 45 45 { +0xff, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f, 0xff, 0xff, 0xff, 0xff, +0xff, 0x3f, 0xfc, 0xff, 0xff, 0xff, 0xff, 0x3f, 0xfc, 0xff, 0xff, 0xff, +0xff, 0x3f, 0xf8, 0xff, 0xff, 0xff, 0xff, 0x3f, 0xf0, 0xff, 0xff, 0xff, +0xff, 0x3f, 0xf0, 0xff, 0xff, 0xff, 0xff, 0x3f, 0xe0, 0xff, 0xff, 0xff, +0xff, 0x3f, 0xc0, 0xff, 0xff, 0xff, 0xff, 0x3f, 0xc0, 0xff, 0xff, 0xff, +0xff, 0x3f, 0x80, 0xff, 0xff, 0xff, 0xff, 0x3f, 0x80, 0xfc, 0xff, 0xff, +0xff, 0x3f, 0x84, 0xf8, 0xff, 0xff, 0xff, 0x1f, 0x84, 0xf4, 0xff, 0xff, +0xff, 0x1b, 0x04, 0x09, 0x00, 0xfc, 0xff, 0x11, 0x04, 0x11, 0xf8, 0xff, +0x7f, 0x10, 0x04, 0x21, 0xc0, 0xff, 0x1f, 0x10, 0x04, 0x41, 0xf0, 0xff, +0x00, 0x18, 0x04, 0x01, 0xe0, 0xff, 0x00, 0x18, 0x00, 0x81, 0xc0, 0xff, +0x00, 0x08, 0x00, 0x01, 0xe0, 0xff, 0x07, 0x08, 0x00, 0x01, 0xf1, 0xff, +0x1f, 0x08, 0x80, 0x21, 0xf0, 0xff, 0xff, 0x08, 0xc0, 0x41, 0xf4, 0xff, +0xff, 0x08, 0xc0, 0x41, 0xf8, 0xff, 0xff, 0x09, 0xc0, 0xc1, 0xf0, 0xff, +0xff, 0x0b, 0x80, 0xc1, 0xf1, 0xff, 0xff, 0x07, 0x80, 0x81, 0xe1, 0xff, +0xff, 0x07, 0x80, 0x01, 0xc1, 0xff, 0xff, 0x07, 0x00, 0x01, 0xc0, 0xff, +0xff, 0x07, 0xc2, 0x05, 0x81, 0xff, 0xff, 0x07, 0xf2, 0x07, 0x81, 0xff, +0xff, 0x07, 0xf2, 0x17, 0x03, 0xff, 0xff, 0x03, 0xfa, 0x7f, 0x02, 0xfe, +0xff, 0x03, 0xfe, 0xff, 0x02, 0xfe, 0xff, 0x03, 0xfe, 0xff, 0x03, 0xfc, +0xff, 0x03, 0xff, 0xff, 0x07, 0xfc, 0xff, 0x83, 0xff, 0xff, 0x0f, 0xf8, +0xff, 0xc1, 0xff, 0xff, 0x3f, 0xf0, 0xff, 0xe1, 0xff, 0xff, 0x7f, 0xf8, +0xff, 0xf1, 0xff, 0xff, 0xff, 0xf0, 0xff, 0xf8, 0xff, 0xff, 0xff, 0xe0, +0xff, 0xf8, 0xff, 0xff, 0xff, 0xe3, 0xff, 0xfc, 0xff, 0xff, 0xff, 0xe7, +0xff, 0xfc, 0xff, 0xff, 0xff, 0xef}; send helpIRAFLogo "set bitmap iraf_logo" + +createBitmap noao_logo 45 45 { +0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, +0xff, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0x03, 0xfe, 0xff, 0xff, +0xff, 0xff, 0x01, 0xfc, 0xff, 0xff, 0xff, 0xff, 0x00, 0xf8, 0xff, 0xff, +0xff, 0xff, 0x00, 0xf8, 0xff, 0xff, 0xff, 0xff, 0x00, 0xf8, 0xff, 0xff, +0xff, 0x7f, 0x00, 0xf0, 0xff, 0xff, 0xff, 0xff, 0x00, 0xf8, 0xff, 0xff, +0xff, 0xff, 0x00, 0xf8, 0xff, 0xff, 0xff, 0xff, 0x00, 0xf8, 0xff, 0xff, +0xff, 0xff, 0x01, 0xfc, 0xff, 0xff, 0xff, 0xff, 0x03, 0xfe, 0xff, 0xff, +0xff, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, +0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xff, 0xff, 0xff, +0xff, 0xff, 0x8f, 0xff, 0xff, 0xff, 0xff, 0xff, 0x8f, 0xff, 0xff, 0xff, +0xff, 0xff, 0x07, 0xff, 0xff, 0xff, 0xff, 0xff, 0x07, 0xff, 0xff, 0xff, +0xff, 0xff, 0x03, 0xfe, 0xff, 0xff, 0xff, 0xff, 0x03, 0xfe, 0xff, 0xff, +0xff, 0xff, 0x01, 0xfc, 0xff, 0xff, 0xff, 0xff, 0x01, 0xfc, 0xff, 0xff, +0xff, 0xff, 0x00, 0xf8, 0xff, 0xff, 0xff, 0x7f, 0x00, 0xf0, 0xff, 0xff, +0xff, 0x7f, 0x00, 0xf0, 0xff, 0xff, 0xff, 0x3f, 0x00, 0xe0, 0xff, 0xff, +0xff, 0x3f, 0x00, 0xe0, 0xff, 0xff, 0xff, 0x1f, 0x00, 0xc0, 0xff, 0xff, +0xff, 0x1f, 0x00, 0xc0, 0xff, 0xff, 0xff, 0x0f, 0x00, 0x80, 0xff, 0xff, +0xff, 0x0f, 0x00, 0x80, 0xff, 0xff, 0xff, 0x07, 0x00, 0x00, 0xff, 0xff, +0xff, 0x03, 0x00, 0x00, 0xfe, 0xff, 0xff, 0x03, 0x00, 0x00, 0xfe, 0xff, +0xff, 0x01, 0x00, 0x00, 0xfc, 0xff, 0xff, 0x01, 0x00, 0x00, 0xfc, 0xff, +0xff, 0x00, 0x00, 0x00, 0xf8, 0xff, 0xff, 0x00, 0x00, 0x00, 0xf8, 0xff, +0x7f, 0x00, 0x00, 0x00, 0xf0, 0xff, 0x7f, 0x00, 0x00, 0x00, 0xf0, 0xff, +0x3f, 0x00, 0x00, 0x00, 0xe0, 0xff}; send helpNOAOLogo "set bitmap noao_logo" + +send helpInfo1 set label $version + +# Stuff for keeping track of visited anchors. +set links { 0 } +set linkIndex 0 +set visited(0) empty + +proc Help args \ +{ + global help_up + if {$help_up == 0} { + send client help + } else { + send help_panel unmap + set help_up 0 + } +} + +proc helpPanel args \ +{ + global help_up + if {$help_up} { + send help_panel unmap + set help_up 0 + } else { + send help_panel map + set help_up 1 + } +} + +proc panelHelp args \ +{ + Help +} ; send panelHelp addCallback panelHelp + +proc helpQuit args \ +{ + global help_up + send help_panel unmap + set help_up 0 +}; send helpClose addCallback helpQuit + +proc getHelpText { param old new } \ +{ + send helpText setText $new + helpPanel +}; send help addCallback getHelpText + +proc anchorSelected {widget cbtype event text href args} \ +{ + global visited links linkIndex + set anchID [send helpText anchorToId $href] + set visited($href) 1 + if {$linkIndex == 0} { + send helpBack setSensitive True + if {[lindex $links 1] != $anchID} { + set links { 0 } + send helpForward setSensitive False + } + } + if {$linkIndex > 0 && [lindex $links [expr $linkIndex + 1]] != $anchID} { + set links [lrange $links 0 $linkIndex] + } + if {[lindex $links [expr $linkIndex + 1]] != $anchID} { + lappend links $anchID + incr linkIndex + } else { + send helpForward setSensitive False + incr linkIndex + } + if {$linkIndex == [expr [llength $links] - 1]} { + send helpForward setSensitive False + } + send helpText gotoId $anchID + send helpText retestAnchors +}; send helpText addCallback anchorSelected anchor + +proc testAnchor {widget cbtype href} \ +{ + global visited + return [info exists visited($href)] +}; send helpText addCallback testAnchor testAnchor + + +# Callbacks to position forwards and backwards in link list. +proc hlpForward args \ +{ + global links linkIndex + incr linkIndex + if {$linkIndex <= [llength $links]} { + set anchID [lindex $links $linkIndex] + send helpText gotoId $anchID + send helpText retestAnchors + if {$linkIndex == [expr [llength $links] - 1]} { + send helpForward setSensitive False + send helpBack setSensitive True + } else { + send helpBack setSensitive True + } + } else { + incr linkIndex -1 + } +}; send helpForward addCallback hlpForward + +proc hlpBack args \ +{ + global links linkIndex + incr linkIndex -1 + if {$linkIndex >= 0} { + set anchID [lindex $links $linkIndex] + send helpText gotoId $anchID + send helpText retestAnchors + if {$linkIndex == 0} { send helpBack setSensitive False } + if {$linkIndex >= 0} { send helpForward setSensitive True } + } else { + incr linkIndex 1 + } +}; send helpBack addCallback hlpBack + +proc hlpHome args \ +{ + global links linkIndex + set links { 0 } + set linkIndex 0 + send helpText gotoId 0 + send helpForward setSensitive False + send helpBack setSensitive False +}; send helpHome addCallback hlpHome + + +proc helpFind args \ +{ + set phrase [send hfEntry get string] + + if { $phrase != "" } { + if {[send helpText searchText $phrase start end forward caseless] > 0} { + set elid [lindex [lindex $start 0] 0] + set id [max 1 [expr $elid - 10] ] + send helpText gotoId $id + send helpText setSelection $start $end + } else { + send warnText set label "Search string not found." + send warning map + } + } else { + send warnText set label "Warning: No search phrase entered." + send warning map + } +} ; foreach w { hfEntry hfFind } { send $w addCallback helpFind } + +send hfClear addCallback { send hfEntry set string "" } + + +################################################################################ +# Header Display Callbacks. +################################################################################ + +set hdrImage "" +set hdrImageId "" +set hdrKeywords "*" + + +proc fitsHdrClose args \ +{ + global hdr_up + + send hdr_panel unmap + send imageHeader set on False + set hdr_up 0 +} ; send hdrClose addCallback fitsHdrClose + +proc ptFitsHeader {widget type state args} \ +{ + global hdr_up + + set hdr_up $state + if {$hdr_up == 1} { + send imageHeader set on True + send hdr_panel map + } else { + send imageHeader set on False + send hdr_panel unmap + } +}; send imageHeader addCallback ptFitsHeader + +proc getHeader { name id } \ +{ + global hdrImage hdrImageId hdrKeywords + + set hdrImage $name + set hdrImageId $id + send hdrObjMenu set label $name + send hdrText setText "" + send hdrIGText set string "" + send hdrKGText set string "" + + catch { send wcspix objinfo $hdrImageId $hdrKeywords } +} + +proc hdrKeywFilter args \ +{ + global hdrImageId hdrKeywords + + set str [ send hFindEntry get string ] + if {$str != ""} { + set hdrKeywords $str + send hdrText setText "" + catch { send wcspix objinfo $hdrImageId $hdrKeywords } + } +} ; send hdrFilter addCallback hdrKeywFilter + + +# Set the image menu in the header panel. +proc setHdrObjMenu { frame args } \ +{ + global frameCache ism_enable + + if {! $ism_enable} \ + return + + # Create the menu of images for the header panel. + set items { } + foreach i [list $frameCache($frame)] { + set l [lindex $i 0] + set lid [lindex $i 1] + regsub -all {[\[]} $l "\\\[" l2 + catch { + lappend items [format "%s f.exec \{getHeader %s %d\}" $l $l2 $lid] + } + } + editMenu objMenu hdrObjMenu $items +} + + +# Search box for the header. +proc hdrFind args \ +{ + set phrase [send hFindEntry get string] + + if { $phrase != "" } { + if {[send hdrText searchText $phrase start end forward caseless] > 0} { + set elid [lindex [lindex $start 0] 0] + set id [max 1 [expr $elid - 10] ] + send hdrText gotoId $id + send hdrText setSelection $start $end + } else { + send warnText set label "Search string not found." + send warning map + } + } else { + send warnText set label "Warning: No search phrase entered." + send warning map + } +} ; foreach w { hFindEntry hdrFind } { send $w addCallback hdrFind } + +send hdrClear addCallback { send hFindEntry set string "" } + + +################################################################################ +# Pixel Table Callbacks. +################################################################################ + +set psize 5 +set pixtab_up 0 +set hdr_up 0 + +createMenu pixtabMenu pixtabSize { + { "3x3" f.exec { pixtabSetSize 3 } } + { "5x5" f.exec { pixtabSetSize 5 } } + { "7x7" f.exec { pixtabSetSize 7 } } + { "9x9" f.exec { pixtabSetSize 9 } } +} + + +proc updatePixelTable { cx cy wx wy args } \ +{ + global psize pixtab_up ism_enable + + if {! $pixtab_up} \ + return + if {$ism_enable} \ + return + + set delta [expr int($psize / 2) ] + set x1 [expr ($wx - $delta) ] + set x2 [expr ($wx + $delta) ] + set y1 [expr ($wy - $delta) ] + set y2 [expr ($wy + $delta) ] + set c [ expr int($psize / 2) ] + + + # Update the table labels. + set x $x1 ; set xl {} + set y $y2 ; set yl {} + for {set i 0} {$i < $psize} {incr i} { + lappend xl [format " %10.1f " $x] ; set x [ expr ($x + 1.) ] + lappend yl [format " %10.1f " $y] ; set y [ expr ($y - 1.) ] + } + send ptColLabs setList $xl ; send ptColLabs highlight $c + send ptRowLabs setList $yl ; send ptRowLabs highlight $c + + # Update the pixel table itself. + #set pix [ send client getPixels $cx $cy $psize True ] + + set x0 [ expr int($cx - $psize / 2. + 0.5)] + set y0 [ expr int($cy - $psize / 2. + 0.5)] + set pix [ send client getPixels $x0 $y0 $psize $psize ] + send pixtab setList [ lrange $pix 4 end ] + set c [ expr int(($psize * $psize) / 2) ] + send pixtab highlight $c + + # Update the pixtab stats. + set sum 0.0 + set sum2 0.0 + set npix [ expr ($psize * $psize) ] + set nend [ expr ($psize * $psize) + 4 ] + for {set i 4} {$i < $nend} {incr i} { + set val [lindex $pix $i] + catch { + set sum [ expr ($sum + $val) ] + set sum2 [ expr ($sum2 + $val * $val) ] + } + } + + set mean [ expr ($sum / ($npix * 1.0)) ] + set var [ expr (($sum2 - $sum * $mean) / ($npix - 1)) ] + if {$var <= 0.0} { + set stdev 0.0 + } else { + set stdev [ expr sqrt ($var) ] + } + send meanValue set label [ format "%10.2f" $mean ] + send sigValue set label [ format "%10.4f" $stdev ] +} + + +proc pixtabClose args \ +{ + global pixtab_up + + send pixel_panel unmap + send pixelTable set on False + set pixtab_up 0 + catch { send wcspix set psize 0 } +} ; send pixtabClose addCallback pixtabClose + + +proc pixtabSetSize { size args } \ +{ + global psize ism_enable + + set c [ expr int(($psize * $psize) / 2) ] + send pixtab highlight $c + + # Now reset the window size. + switch $size { + 3 { send pixel_panel "resize 265 175" + send pixtab "set width 180 ; set height 60" + } + 5 { send pixel_panel "resize 375 215" + send pixtab "set width 290 ; set height 105" + } + 7 { send pixel_panel "resize 495 265" + send pixtab "set width 410 ; set height 150" + } + 9 { send pixel_panel "resize 610 310" + send pixtab "set width 525 ; set height 195" + } + } + + send pixtab set defaultColumns $size + send ptColLabs set defaultColumns $size + set psize $size + + # Notify the ISM we've changed size. + if ($ism_enable) { + catch { send wcspix set psize $psize } + } + + send imagewin getCursorPos xc yc + updatePixelTable $xc $yc $xc $yc + +} ; pixtabSetSize $psize + + +proc ptPixelTable {widget type state args} \ +{ + global pixtab_up psize + + set pixtab_up $state + if {$pixtab_up == 1} { + send pixelTable set on True + send pixel_panel map + catch { send wcspix set psize $psize } + } else { + send pixelTable set on False + send pixel_panel unmap + catch { send wcspix set psize 0 } + } +}; send pixelTable addCallback ptPixelTable + + +################################################################################ +# Warning dialog. This pops up a dialog box with the given warning message, +# and executes the given command if the user pushes OK. +# +# Usage: Wexec object message [ok_action [cancel_action]] +# +# The message text is displayed in a popup and the user hits the ok or +# cancel button to close the popup. If an action has been posted for the +# button selected then it is sent to the named object. Only one alert can +# be in effect at a time; posting another alert before the first has +# completed causes the new alert to override the first. +################################################################################ + +set W_object "" +set W_ok_cmd "" +set W_cancel_cmd "" + +proc Wexec {object msg args} \ +{ + global W_object W_ok_cmd W_cancel_cmd + set W_object $object + set W_ok_cmd [lindex $args 0] + set W_cancel_cmd [lindex $args 1] + send warnText set label $msg + send warning map +} + +proc Wbutton {widget args} \ +{ + global W_object W_ok_cmd W_cancel_cmd + switch $widget { + warnOk { if [llength $W_ok_cmd] { send $W_object $W_ok_cmd } + } + warnCancel { if [llength $W_cancel_cmd] { send $W_object $W_cancel_cmd } + } + } + send warning unmap +} +send warnOk addCallback Wbutton +send warnCancel addCallback Wbutton + +# The parameter "alert" is used to forward alerts from the client. +proc setAlert {param old new} \ +{ + Wexec client [lindex $new 0] [lindex $new 1] +}; send alert addCallback setAlert + + + +################################################ +# Define some TCL debug procedures. +################################################ + +set tcl_up 0 + +proc tclCommandClear {widget args} { send tclEntry set string "" } +proc tclCommandExecute {widget args} { send server [send tclEntry {get string}] +} +proc tclCommand {widget mode command args} { send server $command } +proc tclClose {widget args} { tclPanel } +proc tclOpen args \ +{ + global tcl_up + send tcl_panel map + set tcl_up 1 +} + +proc tclPanel args \ +{ + global tcl_up + if {$tcl_up} { + send tcl_panel unmap + set tcl_up 0 + } else { + send tcl_panel map + set tcl_up 1 + } +} + +send tclClear addCallback tclCommandClear +send tclExecute addCallback tclCommandExecute +send tclEntry addCallback tclCommand +send tclDismiss addCallback tclClose + + + +################################################ +# ISM Module support routines. +################################################ + + +# Turn the ISM on or off. +proc ismToggle { widget type state args } \ +{ + global ism_enable ism_capable psize + + set ism_enable $state + + # Set the coord-panel header option availability. + if {$ism_enable == 1 && $ism_capable} { + send imageHeader setSensitive True + send woptBPM setSensitive True + catch { send client ism_start wcspix } + } else { + send imageHeader setSensitive False + send woptBPM set on False + send woptBPM setSensitive False + catch { send client ism_stop wcspix } + send hdr_panel unmap + } + setCoordPanelSensitivity + +} ; send ismToggle addCallback ismToggle + + + +# Handle messages from ISM clients and pass them on to the appropiate +# callback. + +proc ism_msg { param old new } \ +{ + global ism_enable + + set cmd [lindex $new 0] ;# command name + set ism [lindex $new 1] ;# determine ISM name + set argv [lrange $new 2 end] ;# get args + set argc [llength $argv] + + switch $cmd { + source { source [lindex $new 1] } + alert { Wexec client [lindex $new 1] } + deliver { ${ism}_msg $argc $argv } + info { ism_info $ism } + } +} ; send ism_msg addCallback ism_msg + + + +# Log a client message to the info panel +set ismInfoText " " + +proc ism_info { text } \ +{ + global infoMode ismInfoText + + set ismInfoText [format "%s\n%s" $ismInfoText $text] + if {$infoMode == "infoOptIsm"} { + send infoText set string $ismInfoText + } +} + +# Initialize the text. +proc ismInitInfoText args \ +{ + global ismInfoText + + set ismInfoText "" + ism_info "\t ISM Client Message Logs" + ism_info "\t -----------------------" + ism_info " " +} ; ismInitInfoText + + + +################################################ +# WPIX module support routines. +################################################ + +set cur_objid 0 +set cur_regid 0 +set redraw_compass 0 +#set Compass(0) { 0.0 1 1 0 X Y } +set Compass(0) { 0.0 0.0 1.0 -1.0 0.0 0 X Y } +set Orient(0) { 1 1 1 } + +set wcspix_debug 0 + +proc wcspix_msg { argc argv } \ +{ + global wcspix_debug + + set arg [string trimleft [ string trimright [lindex $argv 0] ] ] + set cmd [lindex $arg 0] + + if {$wcspix_debug} { print "wcspix_msg: $cmd" } + + + switch $cmd { + startup { wcspix_startup } + shutdown { wcspix_shutdown } + disable { wcspix_disable } + capable { wcspix_capable } + + cache { wcspix_cache [lrange $arg 1 end] } + uncache { wcspix_uncache [lrange $arg 1 end] } + wcstran { wcspix_wcstran [lrange $arg 1 end] } + wcslist { wcspix_wcslist [lrange $arg 1 end] } + + imghdr { send hdrText \ + setText [format "
%s\n%s
" \ + [string trimright [send hdrText getText simple] "\n"]\ + [lindex $arg 1] ] + } + wcshdr { send hdrKGText append [lindex $arg 1] } + + wcsinfo { send hdrIGText append [lindex $arg 1] + send hdrText gotoId 0 + send hdrKGText set insertPosition 0 + } + + compass { wcspix_compass [lrange $arg 1 end] ; drawCompass } + orient { wcspix_orient [lrange $arg 1 end] } + wcstype { wcspix_wcstype [lindex $arg 1] [lindex $arg 2] } + wcsfmt { set num [lindex $arg 2] + send fmtWcs$num set label [lindex $arg 1] } + + wcspix_cmd { send wcsIsmCmd set string [lindex $arg 1] } + + pixtab { set tab [lindex [lindex $arg 1] 0] + set col [lindex [lindex $arg 1] 1] + set row [lindex [lindex $arg 1] 2] + set stat [lindex [lindex $arg 1] 3] + wcspix_pixtab $tab $col $row $stat + } + } +} + + +# Startup and initialize the wcspix module with the GUI state. +proc wcspix_startup args \ +{ + global ism_enable frame + global up_todo psize pixtab_up frameCache + + set ism_enable 1 + send ismToggle set on True + send imageHeader setSensitive True + send woptBPM setSensitive True + setCoordPanelSensitivity + ismInitInfoText + + if {$up_todo < 3} { + resizeCoordsBox $up_todo + } + updateCoordsBox + drawCompass + + # Initialize the frame cache. + foreach c [array names frameCache] { + if {$c != "0"} { unset frameCache($c) } + } + + catch { + if {$pixtab_up} { send wcspix set psize $psize } + for {set i 1} {$i <= 4} {incr i} { + send wcspix set wcs [send sysWcs$i get label] $i + send wcspix set format [send fmtWcs$i get label] $i + } + } + + if { [send infoOptClients get on] } { + send client info clients + } +} + +# Shutdown the WPIX module. +proc wcspix_shutdown args \ +{ + global ism_enable frame + + set ism_enable 0 + send ismToggle set on False + send imageHeader setSensitive False + send woptBPM set on False + send woptBPM setSensitive False + setCoordPanelSensitivity + setCoordPanelHeight + + wcsFmtIValue "N/A" + wcsFmtBValue "0" + + resizeCoordsBox 0 + drawCompass + + if { [send infoOptClients get on] } { + send client info clients + } +} + + +# Disable the WPIX module. We are only called when a display client has +# indicated it doesn't use the new mapping facilities and having the WPIX +# ISM visible will only confuse the user. + +proc wcspix_disable args \ +{ + global ism_enable ism_capable rulerWCS + + if {$ism_enable} { + send wcspix quit + } + set ism_capable 0 + set rulerWCS 0 + wcspix_shutdown + send ismToggle setSensitive False +} + + +# Client connected is capable of using the ISM, but don't necessarily turn +# it on at this point. + +proc wcspix_capable args \ +{ + global ism_capable + + set ism_capable 1 + wcsFmtIValue "0" + wcsFmtBValue "0" + send ismToggle setSensitive True +} + + +# Cache an image in the GUI. +proc wcspix_cache { argv } \ +{ + global frameCache redraw_compass cur_objid + + set name [lindex $argv 0] + set frame [lindex $argv 1] + set id [lindex $argv 2] + + # Store the image name and id in a local cache. + lappend frameCache($frame) $name $id + send hdrObjMenu set label $name + + # Automatically get the header. + regsub -all {[\[]} $name "\\\[" image + catch { getHeader $image $id } + + setHdrObjMenu $frame + + set cur_objid $id + set redraw_compass 1 +} + +# Uncache an image in the GUI. +proc wcspix_uncache { argv } \ +{ + global frameCache Compass + + set id [lindex $argv 0] + foreach c [array names frameCache] { + set i1 0 + set i2 1 + set new { } + while { $i2 < [llength $frameCache($c)] } { + if {[lindex $frameCache($c) $i2] != $id} { + lappend new [lindex $frameCache($c) $i1] + lappend new [lindex $frameCache($c) $i2] + } + incr i1 2 + incr i2 2 + } + set frameCache($c) $new + } + if [info exists Compass($id)] { + unset Compass($id) + } +} + +# Format the results of the WCSTRAN method. +proc wcspix_wcstran { argv } \ +{ + global frameCache cur_objid cur_regid redraw_compass + + set objid [ lindex [lindex $argv 0] 1] + set regid [ lindex [lindex $argv 1] 1] + set pixval [ lindex [lindex $argv 2] 1] + set bpmval [ lindex [lindex $argv 3] 1] + + wcsFmtIValue $pixval + wcsFmtBValue $bpmval + + set args [lrange $argv 4 end] + set nargs [llength $args] + for {set i 0} {$i < 4} {incr i} { + set coord [lindex $args $i] + set wcsname [lindex $coord 1] + set xval [lindex $coord 2] + set yval [lindex $coord 3] + set xunits [lindex $coord 4] + set yunits [lindex $coord 5] + wcsFmtWcs [expr ($i + 1)] $wcsname $xval $yval $xunits $yunits + } + + set cur_objid $objid + set cur_regid $regid + + if {$redraw_compass} \ + drawCompass +} + +# Save the object compass information. +proc wcspix_compass { argv } \ +{ + global Compass + + set objid [lindex $argv 0] + set angle [lindex $argv 1] + + #set xflip [lindex $argv 2] + #set yflip [lindex $argv 3] + #set transpose [lindex $argv 4] + #set xlab [lindex $argv 5] + #set ylab [lindex $argv 6] + + set north_x [lindex $argv 2] + set north_y [lindex $argv 3] + set east_x [lindex $argv 4] + set east_y [lindex $argv 5] + set transpose [lindex $argv 6] + set xlab [lindex $argv 7] + set ylab [lindex $argv 8] + + #lappend Compass($objid) $angle $xflip $yflip $transpose $xlab $ylab + #set Compass($objid) [list $angle $xflip $yflip $transpose $xlab $ylab] + set Compass($objid) [list $angle $north_x $north_y $east_x $east_y \ + $transpose $xlab $ylab] + drawCompass +} + +# Save the image display orientation information. +proc wcspix_orient { argv } \ +{ + global Orient + + set objid [lindex $argv 0] + set frame [lindex $argv 1] + set xflip [lindex $argv 2] + set yflip [lindex $argv 3] + + set Orient($objid) [list $frame $xflip $yflip] +} + + +# Handle the list of WCSs available for the current image. +proc wcspix_wcslist { argv } \ +{ + set wcslist [lindex $argv 0] + + for {set i 1} {$i <= 4} {incr i} { + set items {} + foreach nam $wcslist { + if {[string tolower $nam] == "line"} { + lappend items "f.dblline" + } else { + lappend items "\"$nam\" f.exec \{setWcsSys $nam $i\}" + } + } + editMenu sysMenu$i sysWcs$i $items + } +} + +# Set the type of the WCS. +proc wcspix_wcstype { label num } \ +{ + global up_todo + + send sysWcs$num set label $label + if {[string tolower $label] == "none"} { + send wpWcs$num "set on False ; setSensitive False" + send wiWcs$num "set on False ; setSensitive False" + send fmtWcs$num setSensitive False + set hght 4 + } else { + send wpWcs$num "set on True ; setSensitive True" + send wiWcs$num setSensitive True + send fmtWcs$num setSensitive True + set hght 17 + } + send wtWcs$num set height $hght + setCoordPanelHeight + + #resizeCoordsBox $up_todo + updateCoordsBox +} + +# Display the pixel table. +proc wcspix_pixtab { tab col row stat } \ +{ + global psize + + # Update the pixel table. + send pixtab setList [lindex $tab 1] + send pixtab highlight [expr int(($psize * $psize) / 2)] + + # Update the table labels. + set c [ expr int($psize / 2) ] + send ptColLabs setList $col ; send ptColLabs highlight $c + send ptRowLabs setList $row ; send ptRowLabs highlight $c + + # Update the pixtab stats. + send meanValue set label [ format "%10.2f" [lindex $stat 0] ] + send sigValue set label [ format "%10.4f" [lindex $stat 1] ] +} + + diff --git a/vendor/x11iraf/ximtool/ximtool.c b/vendor/x11iraf/ximtool/ximtool.c new file mode 100644 index 00000000..abb84d9e --- /dev/null +++ b/vendor/x11iraf/ximtool/ximtool.c @@ -0,0 +1,640 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#define XIMTOOL_MAIN +#include "ximtool.h" + +/* The X11IRAF version. */ +char *ximtool_version[] = { +# include "../version.h" + NULL +}; + + +/* + * XIMTOOL -- X11 based image display server and standalone image display + * client. This program is based on the IRAF prototype widget server (object + * manager library or OBM) and the gterm-image widget. + */ + +/* Compatibility hacks. */ +#ifdef AUX +void *memmove(a,b,n) void *a; const void *b; size_t n; { bcopy(b,a,n); } +#else +#if defined(sun) && !defined(SVR4) +void *memmove(a,b,n) void *a; void *b; size_t n; { bcopy(b,a,n); } +#endif +#endif + +/* Data. */ +XtAppContext app_context; +static char server[] = "server"; + +/* The builtin default GUI. */ +char *defgui_text[] = { +# include "ximtool.gui.h" + NULL +}; + + +#ifdef AUX +#define SIGFUNC sigfunc_t +#else +typedef void (*SIGFUNC)(); +#endif + +void xim_onsig(); + + +/* MAIN -- XImtool main program. This is the only ximtool routine containing + * window system specific code. + */ +main (argc, argv) +int argc; +char *argv[]; +{ + register XimDataPtr xim = &ximtool_data; + register int i; + register IsmModule ism; + + Screen *screen; + Visual *visual; + Widget toplevel; + XtPointer obm; + char **sv_argv, *init_file = NULL, *str; + int sv_argc, ncolors, base; + int depth, tile = 0; + + extern IsmModule ismNameToPtr(); + int xerror(), xioerror(); + + + /* Process the command line arguments. Scan the arglist first to see + * if we're requesting help or a printout of the default GUI, if so + * print these out and exit. + */ + if (argc > 1) { + if (strcmp (argv[1], "-help") == 0) { + Usage (); + exit (1); + + } else if (strcmp (argv[1], "-version") == 0) { + printf ("Version: %s\n", ximtool_version[0]); + exit (1); + + } else if (strcmp (argv[1], "-defgui") == 0) { + register int i; + for (i=0; defgui_text[i]; i++) + printf ("%s\n", defgui_text[i]); + exit (0); + } + } + + + /* Loop over the command line options and preprocess the ones that + * are widget/GUI resources we want to make available more easily. + * To do this we'll tweak the argument list so it appears to be a + * "-xrm" resource setting, this means the X initialization code + * below will do all the real work. + */ + for (i=1; i < argc; i++) { + + if (strcmp (argv[i], "-cmapName") == 0) { + str = argv[++i]; + strcpy (argv[i-1], "-xrm\0"); + argv[i] = (char *) malloc (256); + sprintf (argv[i], "XImtool*cmapName:%s\0", str); + + } else if (strcmp (argv[i], "-maxColors") == 0) { + ncolors = atoi (argv[++i]); + ncolors = max (32, min (201, ncolors)); + strcpy (argv[i-1], "-xrm\0"); + argv[i] = (char *) malloc (256); + sprintf (argv[i], "XImtool*maxColors:%d\0", ncolors); + + } else if (strcmp (argv[i], "-basePixel") == 0) { + base = atoi (argv[++i]); + strcpy (argv[i-1], "-xrm\0"); + argv[i] = (char *) malloc (256); + sprintf (argv[i], "XImtool*basePixel:%d", base); + + } else if (strcmp (argv[i], "-cmapInitialize") == 0) { + str = argv[++i]; + strcpy (argv[i-1], "-xrm\0"); + argv[i] = (char *) malloc (256); + sprintf (argv[i], "XImtool*cmapInitialize:%s", str); + + } else if (strcmp (argv[i], "-displayPanner") == 0) { + str = argv[++i]; + strcpy (argv[i-1], "-xrm\0"); + argv[i] = (char *) malloc (256); + sprintf (argv[i], "XImtool*displayPanner:%s", str); + + } else if (strcmp (argv[i], "-displayMagnifier") == 0) { + str = argv[++i]; + strcpy (argv[i-1], "-xrm\0"); + argv[i] = (char *) malloc (256); + sprintf (argv[i], "XImtool*displayMagnifier:%s", str); + + } else if (strcmp (argv[i], "-displayCoords") == 0) { + str = argv[++i]; + strcpy (argv[i-1], "-xrm\0"); + argv[i] = (char *) malloc (256); + sprintf (argv[i], "XImtool*displayCoords:%s", str); + + } else if (strcmp (argv[i], "-printConfig") == 0) { + str = argv[++i]; + strcpy (argv[i-1], "-xrm\0"); + argv[i] = (char *) malloc (256); + sprintf (argv[i], "XImtool*printConfig:%s", str); + } + } + + /* Get local copy of argc and argv. */ + if ((sv_argc = argc) > 0) { + sv_argv = (char **) XtMalloc (argc * sizeof(char *)); + memmove (sv_argv, argv, argc * sizeof(char *)); + } else + sv_argv = argv; + + /* Initialize applications context. We don't use the top level + * shell created here, but we need to deal with it in order to + * get the application resources. The object manager opens its own + * connection to the display server and manages a separate window + * hierarchy with its own top level shell. + */ + xim->toplevel = toplevel = XtAppInitialize (&app_context, "XImtool", + (XrmOptionDescList) NULL, 0, &sv_argc, sv_argv, + (String *) NULL, (ArgList) NULL, 0); + + /* Free saved arglist. */ + free ((char *)sv_argv); + + /* Get application resources. */ + XtVaGetApplicationResources (xim->toplevel, xim, + resources, XtNumber(resources), + /* Add any resource overrides here */ + NULL); + + /* Check to see if we have the correct visual to proceed, if not + * shut down more gracefully and informatively than the BadMatch + * error from X that awaits us. + */ + +#ifdef PSEUDOCOLOR_ONLY + screen = XtScreen (toplevel); + visual = DefaultVisualOfScreen(screen); + depth = DefaultDepthOfScreen(screen); + if (depth != 8 || visual->class != PseudoColor) + xim_badVisual (depth, visual->class); +#endif + + + + /* Initialize the object manager. */ + xim->obm = obm = (XtPointer) ObmOpen (app_context, argc, argv); + ObmAddCallback (obm, OBMCB_setGterm|OBMCB_preserve, xim_reset, + (XtPointer)xim); + + + /* Loop over the command line options. The default xim structure + * should be defined at this point so the command options can be + * used to override them. + */ + for (i=1; i < argc; i++) { + + /* Anything without a '-' is a file name to load at startup. + * Only use the first name defined. + */ + if (argv[i][0] != '-') { /* File name */ + if (!init_file) { + init_file = argv[i]; + if (access (init_file, F_OK) < 0) { + fprintf (stderr, "%s: File does not exist: '%s'\n", + argv[0], init_file); + exit (1); + } else if (access (init_file, R_OK) < 0) { + fprintf (stderr, + "%s: File doesn't have read permission: '%s'\n", + argv[0], init_file); + exit (1); + } + } + + } else if (strcmp (argv[i], "-gui") == 0) { + xim->gui = argv[++i]; + + } else if (strcmp (argv[i], "-cmap1") == 0) { + xim->userCMap1 = argv[++i]; + + } else if (strcmp (argv[i], "-cmap2") == 0) { + xim->userCMap2 = argv[++i]; + + } else if (strcmp (argv[i], "-cmapDir1") == 0) { + xim->userCMapDir1 = argv[++i]; + + } else if (strcmp (argv[i], "-cmapDir2") == 0) { + xim->userCMapDir2 = argv[++i]; + + } else if (strcmp (argv[i], "-imtoolrc") == 0) { + xim->imtoolrc = argv[++i]; + + } else if (strcmp (argv[i], "-memModel") == 0) { + xim->memModel = argv[++i]; + + } else if (strcmp (argv[i], "-config") == 0) { + xim->def_config = atoi (argv[++i]); + + } else if (strcmp (argv[i], "-nframes") == 0) { + i++; + xim->def_nframes = min (MAX_FRAMES, atoi (argv[i])); + + } else if (strcmp (argv[i], "-tile") == 0) { + tile = ++xim->tileFrames; + + } else if (strcmp (argv[i], "-invert") == 0) { + xim->invert++; + + } else if (strcmp (argv[i], "-fifo") == 0) { + if (strcmp ("none", argv[i+1]) == 0) { + xim->input_fifo = "none"; + } else { + xim->input_fifo = malloc (strlen(argv[++i])+2); + xim->output_fifo = malloc (strlen(argv[i])+2); + sprintf (xim->input_fifo, "%si", argv[i]); + sprintf (xim->output_fifo, "%so", argv[i]); + } + + } else if (strcmp (argv[i], "-port") == 0) { + xim->port = atoi (argv[++i]); + + } else if (strcmp (argv[i], "-nports") == 0) { + xim->nports = atoi (argv[++i]); + + } else if (strcmp (argv[i], "-unix") == 0) { + xim->unixaddr = argv[++i]; + + } else if (strcmp (argv[i], "-fifo_only") == 0) { + xim->unixaddr = "none"; + xim->port = 0; + + } else if (strcmp (argv[i], "-inet_only") == 0 || + strcmp (argv[i], "-port_only") == 0 ) { + xim->input_fifo = ""; + xim->unixaddr = "none"; + + } else if (strcmp (argv[i], "-unix_only") == 0) { + xim->input_fifo = ""; + xim->port = 0; + + } else if (strcmp (argv[i], "-ismdev") == 0) { + if (strcmp ("none", xim->ism_addr) ) + xim->ism_addr = argv[++i]; + else + i++; + + + /* Skip any standard X toolkit flags, they're handled above. + */ + } else if (strcmp (argv[i], "-bg") == 0) { + i++; + } else if (strcmp (argv[i], "-fg") == 0) { + i++; + } else if (strcmp (argv[i], "-iconic") == 0) { + ; + } else if (strcmp (argv[i], "-display") == 0) { + i++; + } else if (strcmp (argv[i], "-geometry") == 0) { + i++; + } else if (strcmp (argv[i], "-title") == 0) { + i++; + } else if (strcmp (argv[i], "-xrm") == 0) { + i++; + + } else { + fprintf (stderr, "Unrecognized flag '%s'\n", argv[i]); + Usage(); + exit (1); + } + } + + + /* Initialize the ximtool/obm client code. */ + xim_clientOpen (xim); + + /* Load the Ximtool GUI. If the GUI name is "default" the builtin + * default GUI is used. This is stored as an array of text lines, + * which we must append newlines to and concatenate together to + * form the GUI message. + */ + if (strcmp (xim->gui, "default") == 0 || + (ObmDeliverMsgFromFile (obm, server, xim->gui) != 0)) { + + register char *ip, *op; + char *message; + int i; + + message = (char *) malloc (409600); + for (i=0, op=message; ip = defgui_text[i]; i++) { + while (*ip) + *op++ = *ip++; + *op++ = '\n'; + } + *op++ = '\0'; + + ObmDeliverMsg (obm, server, message); + free ((char *)message); + + } + + /* Activate the GUI. */ + ObmActivate (obm); + + /* Initialize the frame buffers and graphics pipeline. */ + xim->tileFrames = tile; + xim_initialize (xim, xim->def_config, xim->def_nframes, 1); + + /* Listen for a client connection. */ + xim_iisOpen (xim); + xim_ismOpen (xim); + + /* Display a pretty logo. */ + xim_displayLogo (xim); + + /* Initialize the hardcopy option and printer configuration. */ + xim_initPrinterOps (xim); + + /* Open the file Load/Save structures. */ + xim_initLoad (xim); + xim_initSave (xim); + + /* Load a file at startup if it was defined. */ + if ( init_file != NULL ) + xim_loadFile (xim, init_file, 1); + + /* Lookup the ISM command for the WCSPIX task and start it. + */ + if ((ism = ismNameToPtr ("wcspix"))) { + system (ism->command); + ism_message (ism, "wcspix", "initialize"); + } + + XSetErrorHandler(xerror); + XSetIOErrorHandler(xioerror); + + +/* signal (SIGINT, (SIGFUNC)xim_onsig);*/ + + /* EXECUTE */ + XtAppMainLoop (app_context); + + xim_shutdown (xim); +} + + +/* XIM_SHUTDOWN -- Terminate ximtool. + */ +xim_shutdown (xim) +register XimDataPtr xim; +{ + eps_close (xim->psim); + xim_loadClose (xim); + xim_saveClose (xim); + xim_clientClose (xim); + xim_iisClose (xim); + xim_ismClose (xim); + xim_close (xim); + ObmClose (xim->obm); + exit (0); +} + + +/* XIM_ADDINPUT -- Register a procedure to be called when there is input + * to be processed on the given input source. The ximtool code doesn't + * talk to X directly so we need to provide this interface routine. + */ +XtPointer +xim_addInput (xim, input, proc, client_data) +register XimDataPtr xim; +int input; +void (*proc)(); +XtPointer client_data; +{ + return ((XtPointer) XtAppAddInput (app_context, input, + (XtPointer)XtInputReadMask, *proc, client_data)); +} + + +/* XIM_REMOVEINPUT -- Remove a callback previously posted with xim_addInput. + */ +void +xim_removeInput (xim, id) +register XimDataPtr xim; +XtPointer id; +{ + XtRemoveInput ((XtInputId)id); +} + + +/* USAGE -- Print a list of command-line options. + */ +Usage () +{ + fprintf (stderr, "Usage:\n\n"); + printoption (" ximtool"); + printoption ("[-basePixel ]"); /* base cmap pixel */ + printoption ("[-cmap1 ]"); /* User cmap 1 */ + printoption ("[-cmap2 ]"); /* User cmap 2 */ + printoption ("[-cmapDir1 ]"); /* User cmapDir 1 */ + printoption ("[-cmapDir2 ]"); /* User cmapDir 2 */ + printoption ("[-cmapInitialize ]"); /* initialize colormap */ + printoption ("[-cmapName ]"); /* colormap name */ + printoption ("[-config ]"); /* initial config */ + printoption ("[-defgui]"); /* Print default GUI */ + printoption ("[-displayPanner ]"); /* display panner box */ + printoption ("[-displayMagnifier ]"); /* display magnifier box */ + printoption ("[-displayCoords ]"); /* display wcs coords box */ + printoption ("[-fifo ]"); /* fifo pipe */ + printoption ("[-fifo_only]"); /* use fifo only */ + printoption ("[-gui ]"); /* GUI file */ + printoption ("[-help]"); /* Print help */ + printoption ("[-imtoolrc ]"); /* fbconfig file */ + printoption ("[-inet_only | -port_only]"); /* use inet only */ + printoption ("[-invert]"); /* invert colormap */ + printoption ("[-ismdev ]"); /* ISM device template */ + printoption ("[-maxColors ]"); /* # of colors */ + printoption ("[-memModel ]"); /* memory model */ + printoption ("[-nframes ]"); /* # of frames */ + printoption ("[-port ]"); /* inet port */ + printoption ("[-printConfig ]"); /* printer config file */ + printoption ("[-tile]"); /* tile frames */ + printoption ("[-unix ]"); /* unix socket */ + printoption ("[-unix_only]"); /* use unix only */ + printoption ("[]"); /* file to load */ + fprintf (stderr,"\n"); +} + + +/* PRINTOPTION -- Pretty-print an option string. + */ +static int cpos = 0; +printoption(st) +char *st; +{ + if (strlen(st) + cpos > 78) { + fprintf (stderr,"\n\t"); + cpos = 8; + } + fprintf (stderr,"%s ",st); + cpos = cpos + strlen(st) + 1; +} + + +/* xim_badVisual -- A bad X visual has been detected for the screen which + * will cause us to crash with a BadMatch error. Instead, abort with a + * more informative message so the user can correct the visual. + */ +xim_badVisual (depth, class) +int depth; +int class; +{ + fprintf (stderr, + "\nERROR: Detected incorrect X visual: depth=%d class=", depth); + switch (class) { + case StaticGray: fprintf (stderr, "StaticGray\n") ; break; + case GrayScale: fprintf (stderr, "GrayScale\n") ; break; + case StaticColor: fprintf (stderr, "StaticColor\n") ; break; + case PseudoColor: fprintf (stderr, "PseudoColor\n") ; break; + case TrueColor: fprintf (stderr, "TrueColor\n") ; break; + case DirectColor: fprintf (stderr, "DirectColor\n") ; break; + default: fprintf (stderr, "DirectColor\n") ; break; + } + + fprintf (stderr, "\n"); + fprintf (stderr, + "XImtool currently requires an 8-bit PseudoColor visual in order\n"); + fprintf (stderr, + "to operate properly. Unfortunately the only workaround for this\n"); + fprintf (stderr, + "at present is to start an 8-bit server using commands such as\n\n"); + fprintf (stderr, + " %% startx -- -bpp 8\t\t\t\t\t # XFree86 V3.x\n"); + fprintf (stderr, + " %% startx -- -depth 8\t\t\t\t # XFree86 V4.x\n"); + fprintf (stderr, + " %% Xsun :0 -dev /dev/fb defclass PseudoColor defdepth 8 # Sun\n"); + fprintf (stderr, + " %% Xdec -vclass0 PseudoColor\t\t\t\t # Digital Unix\n"); + fprintf (stderr, + "\nThe actual commands used will vary depending on the platform,\n"); + fprintf (stderr, + "window manager/desktop used, and in some cases video hardware.\n"); + fprintf (stderr, + "See the Xserver(1) and xinit(1) man page for details. Users should\n"); + fprintf (stderr, + "also contact IRAF site support (iraf@noao.edu) with any questions\n"); + fprintf (stderr, + "or problems.\n\n"); + + exit (1); +} + + + +#define ERROR_XERROR 83 /* xerror: XError event */ +#define ERROR_XIOERROR 84 /* xioerror: X I/O error */ + +/* XERROR -- Handle an XLIB server error. A standard X error message is + * printed and then the program either dumps core, exits, or ignores the error, + * depending upon the value of the environment variable XGXERROR, if defined. +*/ +/*ARGSUSED*/ +xerror (display, event) +Display *display; +register XErrorEvent *event; +{ + static char *envvar = "XGXERROR"; + static int nerrs = 0; + extern char *getenv(); + char fname[128]; + char *action; + int pid; + + fprintf (stderr, "ximtool: warning, error event received:\n"); + (void) XmuPrintDefaultErrorMessage (display, event, stderr); + if (nerrs++ > 50) + exit (ERROR_XERROR); + + if (action = getenv (envvar)) { + if (strcmp (action, "dumpcore") == 0) { + if ((pid = fork()) >= 0) { + if (pid) { + fprintf (stderr, "dumping core... "); + fflush (stderr); + sprintf (fname, "core.%d", pid); + wait(NULL); rename ("core", fname); + fprintf (stderr, "core file core.%d written\n", pid); + fflush (stderr); + } else + kill (getpid(), 6); + } else + fprintf (stderr, "fork failed, no core dump produced\n"); + } else if (strcmp (action, "exit") == 0) { + fprintf (stderr, "program terminated\n"); + exit (ERROR_XERROR); + } else + fprintf (stderr, "%s: unknown action %s\n", envvar, action); + } + fflush (stderr); + + return (0); +} + + +/*ARGSUSED*/ +xioerror(dpy) +Display *dpy; +{ + char *SysErrorMsg(); + + (void) fprintf (stderr, + "ximtool: fatal IO error %d (%s) or KillClient on X server \"%s\"\r\n", + errno, SysErrorMsg (errno), + DisplayString (dpy)); + + exit (ERROR_XIOERROR); +} + +void xt_error(message) + String message; +{ + (void) fprintf (stderr, "ximtool Xt error: %s\n", message); + exit (1); +} + + +char *SysErrorMsg (n) + int n; +{ + return((n >= 0) ? (char *)strerror(n) : "unknown error"); +} + + +/* XIM_ONSIG -- Catch interrupt and shutdown gracefully. + */ +void +xim_onsig (sig, code, scp) +int sig; /* signal which was trapped */ +int *code; /* not used */ +int *scp; /* not used */ +{ + xim_shutdown (&ximtool_data); +} + diff --git a/vendor/x11iraf/ximtool/ximtool.gui b/vendor/x11iraf/ximtool/ximtool.gui new file mode 100644 index 00000000..d9780811 --- /dev/null +++ b/vendor/x11iraf/ximtool/ximtool.gui @@ -0,0 +1,11567 @@ +#!/usr/local/bin/obmsh +# +# XIMTOOL-ALT.GUI -- Default GUI for the Ximtool-alt image display server. +# +# Version 2.0 -- BETA VERSION + +set Version "NOAO/IRAF XImtool Version 2.0BETA" + +reset-server + +set Objects(ximtool) { \ + toplevel Layout display\ +\ + display Group menuGroup\ + menuGroup Layout menubar\ + menubar MenuButton fileButton\ + menubar MenuButton viewButton\ + menubar MenuButton optionsButton\ + menubar Label imageTitle\ + menubar Toggle mXflipButton\ + menubar Toggle mYflipButton\ + menubar Command mPrevButton\ + menubar MenuButton mFrameButton\ + menubar Command mNextButton\ + menubar Toggle toolButton\ + menubar Toggle panelButton\ +\ + display Layout toolbar\ + toolbar Command tbZoomIn\ + toolbar Command tbZoom0\ + toolbar Command tbZoomOut\ + toolbar Command tbInvert\ + toolbar Command tbNormalize\ + toolbar Command tbMatchLUT\ + toolbar Toggle tbAutoReg\ + toolbar Command tbRegister\ + toolbar Command tbCenter\ + toolbar Command tbBlinkDec\ + toolbar Toggle tbBlink\ + toolbar Command tbBlinkInc\ + toolbar Toggle xflipButton\ + toolbar Toggle yflipButton\ + toolbar Toggle tbTile\ + toolbar Toggle tbCompass\ + toolbar Command prevButton\ + toolbar MenuButton frameButton\ + toolbar Command nextButton\ +\ + display Frame imageFrame\ + imageFrame Gterm imagewin\ + display Frame cbarFrame\ + cbarFrame Gterm colorbar\ + display Toggle hcut\ + display Toggle vcut\ + display Frame hcutFrame\ + hcutFrame Gterm hcutPlot\ + display Frame vcutFrame\ + vcutFrame Gterm vcutPlot\ + display Slider2d focusSlider\ +\ + display Group plotOpts\ + plotOpts Layout poptsLayout\ + poptsLayout TextToggle plotSpeed\ + poptsLayout TextToggle plotAccurate\ + poptsLayout TextToggle plotImgPix\ + poptsLayout Frame optLine\ + poptsLayout TextToggle curJump\ + poptsLayout TextToggle curSmooth\ + poptsLayout TextToggle curTrack\ +\ + display Layout panelbar\ + panelbar Toggle pbDisplayP\ + panelbar Toggle pbLoadP\ + panelbar Toggle pbSaveP\ + panelbar Toggle pbPrintP\ + panelbar Toggle pbInfoP\ + panelbar Toggle pbTileP\ + panelbar Toggle pbCoordP\ + panelbar Toggle pbPanM\ + panelbar Toggle pbMagM\ + panelbar Toggle pbWcsM\ + panelbar Toggle pbIsm\ + panelbar Toggle helpButton\ + panelbar Command pbQuit\ +} + + +set Objects(panelShell) { \ + toplevel TopLevelShell panelShell\ + panelShell Layout panel\ +\ + panel Frame panelMenuFrame\ + panelMenuFrame Layout panelMenuBar\ + panelMenuBar Command panelHelp\ + panelMenuBar Command panelClose\ +\ + panel Frame tabFrame\ + tabFrame Tabs panelTabs\ + panelTabs Frame display_panel\ + panelTabs Frame print_panel\ + panelTabs Frame load_panel\ + panelTabs Frame save_panel\ + panelTabs Frame info_panel\ + panelTabs Frame tile_panel\ + panelTabs Frame wcs_panel\ +\ +\ + display_panel Layout controlPanel\ + controlPanel Group viewBox\ + controlPanel Group enhancementBox\ + controlPanel Group blinkBox\ + controlPanel Group optionsBox\ + controlPanel Frame controlBox\ +\ + viewBox Layout view\ + view Group frameSelect\ + frameSelect Layout frameBox\ + frameBox Box frlistBox\ + frlistBox Viewport framePort\ + framePort Layout frameList\ + frameList TextToggle frame1\ + frameList TextToggle frame2\ + frameList TextToggle frame3\ + frameList TextToggle frame4\ + frameList TextToggle frame5\ + frameList TextToggle frame6\ + frameList TextToggle frame7\ + frameList TextToggle frame8\ + frameList TextToggle frame9\ + frameList TextToggle frame10\ + frameList TextToggle frame11\ + frameList TextToggle frame12\ + frameList TextToggle frame13\ + frameList TextToggle frame14\ + frameList TextToggle frame15\ + frameList TextToggle frame16\ + frameBox Command prevFrame\ + frameBox Command nextFrame\ + view Frame frameDataBox\ + frameDataBox TextBox frameData\ + view Group zoomBox\ + zoomBox Layout zoom\ + zoom TextButton toggleZoom\ + zoom TextButton zoomIn\ + zoom Command x1\ + zoom Command z2\ + zoom Command z3\ + zoom Command z4\ + zoom Command z5\ + zoom Command z8\ + zoom TextButton zoomOut\ + zoom TextButton centerFrame\ + zoom Command d2\ + zoom Command d3\ + zoom Command d4\ + zoom Command d5\ + zoom Command d8\ + view Layout viewButtons\ + viewButtons Command aspect\ + viewButtons Command flipX\ + viewButtons Command flipY\ + viewButtons Command flipXY\ + viewButtons Command clearFrame\ + viewButtons Command fitFrame\ +\ + enhancementBox Layout enhance\ + enhance Frame colorlistFrame\ + colorlistFrame Viewport colorlistView\ + colorlistView MultiList colorlist\ + enhance Frame colordataFrame\ + colordataFrame TextBox colordata\ + enhance Label contrastLabel\ + enhance Slider2d contrastSlider\ + enhance Label brightnessLabel\ + enhance Slider2d brightnessSlider\ + enhance Command invertButton\ + enhance Command optimizeButton\ +\ + blinkBox Layout blink\ + blink Label blinkFramesLabel\ + blink Command blinkFrame1\ + blink Command blinkFrame2\ + blink Command blinkFrame3\ + blink Command blinkFrame4\ + blink Toggle blinkPanel\ + blink Command blinkReset\ + blink Label blinkRateLabel\ + blink Frame BRframe\ + BRframe Layout BRlayout\ + BRlayout Arrow BRdecrease\ + BRlayout TextBox BRtext\ + BRlayout Arrow BRincrease\ + blink Command registerButton\ + blink Command matchButton\ + blink TextToggle blinkButton\ + blink TextToggle autoregButton\ +\ + optionsBox TextToggle pannerButton\ + optionsBox TextToggle magnifierButton\ + optionsBox TextToggle coordsBoxButton\ + optionsBox TextToggle autoscaleButton\ + optionsBox TextToggle antialiasButton\ + optionsBox TextToggle tileFramesButton\ + optionsBox TextToggle warningsButton\ + optionsBox TextToggle peakupButton\ +\ + controlBox Layout control\ + control Command initializeButton\ + control Command normalizeButton\ +\ +\ + print_panel Layout printLayout\ +\ + printLayout Group printCmdGroup\ + printLayout Group optGroup\ + printLayout Group cmdGroup\ +\ + printCmdGroup Layout printCmdLayout\ + printCmdLayout Layout labelLayout\ + labelLayout Label toLabel\ + labelLayout Label printerLabel\ + printCmdLayout Layout inputLayout\ + inputLayout TextToggle toPrinter\ + inputLayout TextToggle toFile\ + inputLayout Frame printcmdFrame\ + printcmdFrame AsciiText printcmd\ +\ + optGroup Layout optLayout\ + optLayout Group epsPageGroup\ + optLayout Group optionsGroup\ + optLayout Group printColorGroup\ + optLayout Group printerGroup\ + optLayout Group annOptsGroup\ +\ + epsPageGroup Layout epsPage\ + epsPage Label epsOrientLabel\ + epsPage TextToggle epsPortButton\ + epsPage TextToggle epsLandButton\ + epsPage TextToggle epsSquareButton\ + epsPage Label epsSizeLabel\ + epsPage TextToggle epsLetterButton\ + epsPage TextToggle epsLegalButton\ + epsPage TextToggle epsA4Button\ + epsPage TextToggle epsB5Button\ + epsPage Label epsScaleLabel\ + epsPage Frame ScaleFrame\ + ScaleFrame Layout ScaleLayout\ + ScaleLayout Arrow SCdecrease\ + ScaleLayout TextBox SCtext\ + ScaleLayout Arrow SCincrease\ +\ + optionsGroup Layout options\ + options TextToggle epsscaleButton\ + options TextToggle autorotateButton\ + options TextToggle aspectButton\ + options TextToggle compressButton\ +\ + annOptsGroup Layout annOpts\ + annOpts TextToggle annotateButton\ + annOpts TextToggle colorbarButton\ + annOpts TextToggle titleButton\ + annOpts TextToggle bordersButton\ + annOpts Label titleLabel\ + annOpts Frame titleFrame\ + titleFrame AsciiText titleString\ +\ + printColorGroup Layout printColor\ + printColor TextToggle prGrayButton\ + printColor TextToggle prPseudoButton\ + printColor TextToggle prRGBButton\ +\ + printerGroup Layout printers\ + printers Frame printlistFrame\ + printlistFrame Viewport printlistView\ + printlistView MultiList printlist\ +\ + cmdGroup Layout cmdLayout\ + cmdLayout Command okayPrint\ + cmdLayout Label printStatus\ +\ +\ + load_panel Layout filesLayout\ + filesLayout Group imlistGroup\ + imlistGroup Layout imlistLayout\ + imlistLayout Command rootButton\ + imlistLayout Command homeButton\ + imlistLayout Command upButton\ + imlistLayout Command rescanButton\ + imlistLayout Label dirLabel\ + imlistLayout Label fnameLabel\ + imlistLayout Frame filnamFrame\ + filnamFrame AsciiText fnameText\ + imlistLayout Label imtemplateLabel\ + imlistLayout Frame imtemplateFrame\ + imtemplateFrame AsciiText imtemplateText\ + imlistLayout Label imlistLabel\ + imlistLayout Frame imlistFrame\ + imlistFrame Viewport imlistView\ + imlistView MultiList imageList\ +\ + filesLayout Group imoptsGroup\ + imoptsGroup Layout imoptsLayout\ + imoptsLayout TextToggle grayscale\ + imoptsLayout TextToggle autoload\ + imoptsLayout TextToggle browseHdrs\ + imoptsLayout TextToggle zscale\ + imoptsLayout TextToggle zrange\ + imoptsLayout Label z1Label\ + imoptsLayout Frame z1Frame\ + z1Frame AsciiText z1Value\ + imoptsLayout Label z2Label\ + imoptsLayout Frame z2Frame\ + z2Frame AsciiText z2Value\ + imoptsLayout Label nsampLabel\ + imoptsLayout Frame nsampFrame\ + nsampFrame AsciiText nsampValue\ + imoptsLayout Label frameLabel\ + imoptsLayout MenuButton frameFrame\ +\ + filesLayout Group loadCmdGroup\ + loadCmdGroup Layout loadCmdLayout\ + loadCmdLayout Command filesLoadButton\ + loadCmdLayout Label filesStatus\ +\ +\ + save_panel Layout saveLayout\ + saveLayout Group saveNameGroup\ + saveNameGroup Layout saveNameLayout\ + saveNameLayout Label saveLabel\ + saveNameLayout Frame fnameFrame\ + fnameFrame AsciiText saveFile\ +\ + saveLayout Group saveOptGroup\ + saveOptGroup Layout saveOptLayout\ + saveOptLayout Group fmtGroup\ + saveOptLayout Group saveColorGroup\ + saveOptLayout Frame saveDataBox\ + saveDataBox TextBox saveData\ +\ + fmtGroup Layout formats\ + formats TextToggle rasButton\ + formats TextToggle gifButton\ + formats TextToggle jpegButton\ + formats TextToggle tiffButton\ + formats TextToggle fitsButton\ + formats TextToggle epsButton\ + formats TextToggle x11Button\ + formats TextToggle rawButton\ +\ + saveColorGroup Layout saveColor\ + saveColor TextToggle svGrayButton\ + saveColor TextToggle svPseudoButton\ + saveColor TextToggle svRGBButton\ +\ + saveLayout Group saveCmdGroup\ + saveCmdGroup Layout saveCmdLayout\ + saveCmdLayout Command okaySave\ + saveCmdLayout Label saveStatus\ +\ +\ + info_panel Layout infoLayout\ + infoLayout Group infoBox\ + infoBox Layout infoBoxL\ + infoBoxL Frame infoFrame\ + infoFrame AsciiText infoText\ + infoBoxL TextToggle infoOptFr\ + infoBoxL TextToggle infoOptWCS\ + infoBoxL TextToggle infoOptSvr\ + infoBoxL TextToggle infoOptClients\ + infoBoxL TextToggle infoOptIsm\ + infoBoxL TextToggle infoOptFB\ +\ +\ + wcs_panel Layout wcsLayout\ + wcsLayout Group wcsGroup\ + wcsGroup Layout wcsBox\ +\ + wcsBox Frame wcsFrame\ + wcsFrame Layout wcsText\ + wcsText AsciiText wtName\ + wcsText AsciiText wtTitle\ + wcsText AsciiText wtFBCfg\ + wcsText AsciiText wtIPixval\ + wcsText AsciiText wtSPixval\ + wcsText AsciiText wtBPixval\ + wcsText AsciiText wtWcs1\ + wcsText AsciiText wtWcs2\ + wcsText AsciiText wtWcs3\ + wcsText AsciiText wtWcs4\ +\ + wcsBox TextToggle ismToggle\ + wcsBox TextToggle pixelTable\ + wcsBox TextToggle imageHeader\ + wcsBox TextToggle compass\ + wcsBox TextToggle wcsOptions\ +\ +\ + wcsLayout Group wcsOptGroup\ + wcsOptGroup Layout wcsOptLayout\ +\ + wcsOptLayout Group wcsCoords\ + wcsCoords Layout wcLayout\ + wcLayout Label wcTitle\ + wcLayout Frame wcLine\ + wcLayout Label wlWcs1\ + wcLayout Label wlWcs2\ + wcLayout Label wlWcs3\ + wcLayout Label wlWcs4\ + wcLayout MenuButton sysWcs1\ + wcLayout MenuButton sysWcs2\ + wcLayout MenuButton sysWcs3\ + wcLayout MenuButton sysWcs4\ + wcLayout MenuButton fmtWcs1\ + wcLayout MenuButton fmtWcs2\ + wcLayout MenuButton fmtWcs3\ + wcLayout MenuButton fmtWcs4\ + wcLayout TextToggle wpWcs1\ + wcLayout TextToggle wpWcs2\ + wcLayout TextToggle wpWcs3\ + wcLayout TextToggle wpWcs4\ + wcLayout TextToggle wiWcs1\ + wcLayout TextToggle wiWcs2\ + wcLayout TextToggle wiWcs3\ + wcLayout TextToggle wiWcs4\ +\ + wcsOptLayout Group wcsOpts\ + wcsOpts Layout woLayout\ + woLayout TextToggle woptLabels\ + woLayout TextToggle woptTitles\ + woLayout TextToggle woptFBinfo\ + woLayout TextToggle woptBPM\ +\ + wcsOptLayout Group wcsIsmGroup\ + wcsIsmGroup Layout wcsIsmLayout\ + wcsIsmLayout Label wcsIsmLabel\ + wcsIsmLayout Frame wcsIsmFrame\ + wcsIsmFrame AsciiText wcsIsmCmd\ + wcsIsmLayout Command wcsIsmInit\ +\ +\ + tile_panel Frame tileOpts\ + tileOpts Layout toptLayout\ + toptLayout Group tFramesG\ + toptLayout Group tileMode\ + tileMode TextToggle tileDisabled\ + tileMode TextToggle tileManual\ + tileMode TextToggle tileBest\ + tileMode TextToggle tileSquare\ + tileMode TextToggle tileHorizontal\ + tileMode TextToggle tileVertical\ + tileMode TextToggle tileRow\ + tileMode TextToggle tileCol\ + toptLayout Group userOrientG\ + toptLayout Group fillStyle\ + fillStyle TextToggle byCols\ + fillStyle TextToggle bottomUp\ + toptLayout Group tileLabel\ + tileLabel TextToggle labelImname\ + tileLabel TextToggle labelTitles\ + tileLabel TextToggle labelFrames\ + toptLayout Frame geomFrame\ + geomFrame Label tileGeometry\ +\ + userOrientG Layout userOrientL\ + userOrientL Label nrowLab\ + userOrientL Frame nrFrame\ + nrFrame Layout nrLayout\ + nrLayout Arrow nrdecrease\ + nrLayout Label nrtext\ + nrLayout Arrow nrincrease\ + userOrientL Label ncolLab\ + userOrientL Frame ncFrame\ + ncFrame Layout ncLayout\ + ncLayout Arrow ncdecrease\ + ncLayout Label nctext\ + ncLayout Arrow ncincrease\ +\ + tFramesG Layout tFrames\ + tFrames Command tAll\ + tFrames Command tNone\ + tFrames Toggle tFrame1\ + tFrames Toggle tFrame2\ + tFrames Toggle tFrame3\ + tFrames Toggle tFrame4\ + tFrames Toggle tFrame5\ + tFrames Toggle tFrame6\ + tFrames Toggle tFrame7\ + tFrames Toggle tFrame8\ + tFrames Toggle tFrame9\ + tFrames Toggle tFrame10\ + tFrames Toggle tFrame11\ + tFrames Toggle tFrame12\ + tFrames Toggle tFrame13\ + tFrames Toggle tFrame14\ + tFrames Toggle tFrame15\ + tFrames Toggle tFrame16\ +} + + +set Objects(parameters) { \ + toplevel Parameter ximtool\ + ximtool Parameter alert\ + ximtool Parameter initialize\ + ximtool Parameter resize\ + ximtool Parameter frame\ + ximtool Parameter nframes\ + ximtool Parameter frameSize\ + ximtool Parameter frameRegion\ + ximtool Parameter frameView\ + ximtool Parameter frameTitle\ + ximtool Parameter frameFit\ + ximtool Parameter enhancement\ + ximtool Parameter colortables\ + ximtool Parameter cmfocus\ + ximtool Parameter autoscale\ + ximtool Parameter antialias\ + ximtool Parameter tileFrames\ + ximtool Parameter cursorMode\ + ximtool Parameter xflip\ + ximtool Parameter yflip\ + ximtool Parameter printerList\ + ximtool Parameter printOptions\ + ximtool Parameter loadOptions\ + ximtool Parameter saveOptions\ + ximtool Parameter tileOptions\ + ximtool Parameter filelist\ + ximtool Parameter help\ + ximtool Parameter info\ + ximtool Parameter ism_msg\ +} + + +set Objects(help_panel) { \ + toplevel TopLevelShell help_panel\ + help_panel Layout helpLayout\ + helpLayout Group helpMenuGroup\ + helpMenuGroup Layout helpMenubar\ + helpLayout Layout helpInfoLayout\ +\ + helpMenubar Command helpClose\ +\ + helpLayout Command helpBack\ + helpLayout Command helpForward\ + helpLayout Command helpHome\ + helpLayout Frame hfFrame\ + hfFrame AsciiText hfEntry\ + helpLayout Command hfFind\ + helpLayout Command hfClear\ + helpLayout Frame helpTextFrame\ + helpTextFrame HTML helpText\ +\ + helpInfoLayout Label helpIRAFLogo\ + helpInfoLayout Label helpInfo1\ + helpInfoLayout Label helpInfo2\ + helpInfoLayout Label helpInfo3\ + helpInfoLayout Label helpNOAOLogo\ +} + + +set Objects(blink_panel) { \ + toplevel TopLevelShell blink_panel\ + blink_panel Layout bpLayout\ +\ + bpLayout Frame brMenuFrame\ + brMenuFrame Layout brMenuBar\ + brMenuBar Command brClose\ +\ + bpLayout Frame brFrame\ + brFrame Layout brLayout\ +\ + brLayout Group brFramesG\ + brFramesG Layout brFrames\ + brFrames MenuButton brFrame1\ + brFrames MenuButton brFrame2\ + brFrames MenuButton brFrame3\ + brFrames MenuButton brFrame4\ + brFrames MenuButton brFrame5\ + brFrames MenuButton brFrame6\ + brFrames MenuButton brFrame7\ + brFrames MenuButton brFrame8\ + brFrames MenuButton brFrame9\ + brFrames MenuButton brFrame10\ + brFrames MenuButton brFrame11\ + brFrames MenuButton brFrame12\ + brFrames MenuButton brFrame13\ + brFrames MenuButton brFrame14\ + brFrames MenuButton brFrame15\ + brFrames MenuButton brFrame16\ +\ + brLayout Group brCmdG\ + brCmdG Layout brCmd\ + brCmd Command brReset\ + brCmd Label brRateLabel\ + brCmd Frame brBRframe\ + brBRframe Layout brBRlayout\ + brBRlayout Arrow brBRdecrease\ + brBRlayout TextBox brBRtext\ + brBRlayout Arrow brBRincrease\ + brCmd Command brRegButton\ + brCmd Command brMatchButton\ + brCmd TextToggle brBlinkButton\ + brCmd TextToggle brAregButton\ +} + + +set Objects(hdr_panel) { \ + toplevel TopLevelShell hdr_panel\ + hdr_panel Layout hdrLayout\ +\ + hdrLayout Frame hdrMenuFrame\ + hdrMenuFrame Layout hdrMenuBar\ + hdrMenuBar Command hdrClose\ +\ + hdrLayout Group hdrObjGroup\ + hdrObjGroup Layout hdrObjLayout\ + hdrObjLayout Label hdrObjLabel\ + hdrObjLayout MenuButton hdrObjMenu\ +\ + hdrLayout Frame hdrTabFrame\ + hdrTabFrame Tabs hdrTabs\ + hdrTabs Group hdrHdrGroup\ + hdrTabs Group hdrWcsGroup\ +\ + hdrHdrGroup Layout hdrHdrLayout\ + hdrHdrLayout Frame hFindFrame\ + hFindFrame AsciiText hFindEntry\ + hdrHdrLayout Command hdrFilter\ + hdrHdrLayout Command hdrFind\ + hdrHdrLayout Command hdrClear\ + hdrHdrLayout HTML hdrText\ +\ + hdrWcsGroup Layout hdrWcsLayout\ + hdrWcsLayout Group hdrInfoGroup\ + hdrInfoGroup Frame hdrIGFrame\ + hdrIGFrame AsciiText hdrIGText\ + hdrWcsLayout Group hdrKeywGroup\ + hdrKeywGroup Frame hdrKGFrame\ + hdrKGFrame AsciiText hdrKGText\ +} + + +set Objects(pixel_table) { \ + toplevel TopLevelShell pixel_panel\ +\ + pixel_panel Layout pixel_table\ + pixel_table Frame pixtabMenuFrame\ + pixtabMenuFrame Layout pixtabMenuBar\ + pixtabMenuBar MenuButton pixtabSize\ + pixtabMenuBar Command pixtabHelp\ + pixtabMenuBar Command pixtabClose\ +\ + pixel_table Frame pixtabFrame\ + pixtabFrame Porthole ptPort\ + ptPort Layout ptLayout\ + ptLayout Frame ptColFrame\ + ptColFrame MultiList ptColLabs\ + ptLayout Frame ptRowFrame\ + ptRowFrame MultiList ptRowLabs\ + ptLayout Frame ptFrame\ + ptFrame MultiList pixtab\ +\ + ptLayout Label meanLabel\ + ptLayout Frame meanFrame\ + meanFrame Label meanValue\ +\ + ptLayout Label sigLabel\ + ptLayout Frame sigFrame\ + sigFrame Label sigValue\ +} + + +set Objects(tcl_panel) { \ + toplevel TopLevelShell tcl_panel\ + tcl_panel Layout tclLayout\ + tclLayout Group tclCmdGroup\ + tclCmdGroup Layout tclCmd\ + tclCmd Command tclClear\ + tclCmd Command tclExecute\ + tclCmd Command tclDismiss\ + tclLayout Frame tclFrame\ + tclFrame AsciiText tclEntry\ +} + + +set Objects(warning) { \ + toplevel TransientShell warning\ + warning Layout warn\ + warn Frame warnFrame\ + warnFrame Layout WFlayout\ + WFlayout Icon warnIcon\ + WFlayout TextBox warnText\ + warn Command warnOk\ + warn Command warnCancel\ +} + + +set Resources(global) { \ + + !--------------------------------------------------------- + ! Define some global widget resources for the main panels. + !--------------------------------------------------------- + *shadowWidth: 1 + *background: #c4c4c4 +! *foreground: black + *Arrow.width: 16 + *Arrow.height: 25 + *Text*height: 21 + *Command.height: 21 + *Command.highlightThickness: 1 + *MenuButton.height: 21 + *MenuButton.highlightThickness: 1 + *Label.borderWidth: 0 + *Label.shadowWidth: 0 + *TextButton.shadowWidth: 0 + *TextButton.highlightThickness: 1 + *TextToggle*borderWidth: 0 + *TextToggle.highlightThickness: 0 + *Toggle.highlightThickness: 1 + *Group.shrinkToFit: True + + *Arrow.foreground: gray + *Arrow.background: #adadad + *Text*background: #adadad + *AsciiText*background: #adadad + *TextBox.background: #adadad + *MultiList*background: #adadad + *Slider2d.thumbColor: #c4c4c4 + + + !------------------------------------------------------------- + ! Define resources to take advantage of the 3D scrollbar look. + !------------------------------------------------------------- + *Scrollbar*background: #c4c4c4 + *Scrollbar*shadowWidth: 1 + *Scrollbar*width: 15 + *Scrollbar*height: 15 + *Scrollbar*cursorName: top_left_arrow + *Scrollbar*pushThumb: true + + *HTML.Scrollbar.shadowWidth: 1 + *HTML*Scrollbar*width: 15 + *HTML*Scrollbar*height: 15 + + + !---------------------------------------- + ! Menu resources giving a shadow effect. + !---------------------------------------- + *SmeBSB.leftMargin: 10 + *SmeBSB.rightMargin: 5 + *SmeBSB.shadowWidth: 2 + *SmeBSB.foreground: #e5e5e5 + *SmeBSB.background: SteelBlue + *SimpleMenu.background: #c4c4c4 + *SimpleMenu.borderWidth: 2 + *SimpleMenu.borderColor: black + *SimpleMenu.line1.foreground: #9c9c9c + *SimpleMenu.line2.foreground: #e8e8e8 + *SimpleMenu.line3.foreground: #9c9c9c + *SimpleMenu.line4.foreground: #e8e8e8 + *SimpleMenu.line5.foreground: #9c9c9c + *SimpleMenu.line6.foreground: #e8e8e8 + *SimpleMenu.line7.foreground: #9c9c9c + *SimpleMenu.line8.foreground: #e8e8e8 + *SimpleMenu.line9.foreground: #9c9c9c + *SimpleMenu.line10.foreground: #e8e8e8 + *SimpleMenu.line11.foreground: #9c9c9c + *SimpleMenu.line12.foreground: #e8e8e8 + *SimpleMenu.line13.foreground: #9c9c9c + *SimpleMenu.line14.foreground: #e8e8e8 + *SimpleMenu.line15.foreground: #9c9c9c + *SimpleMenu.line16.foreground: #e8e8e8 + *SimpleMenu.line17.foreground: #9c9c9c + *SimpleMenu.line18.foreground: #e8e8e8 + *SimpleMenu.line19.foreground: #9c9c9c + *SimpleMenu.line20.foreground: #e8e8e8 + *SimpleMenu.line21.foreground: #9c9c9c + *SimpleMenu.line22.foreground: #e8e8e8 + *SimpleMenu.line23.foreground: #9c9c9c + *SimpleMenu.line24.foreground: #e8e8e8 + *SimpleMenu.line25.foreground: #9c9c9c + *SimpleMenu.line26.foreground: #e8e8e8 + *SimpleMenu.line27.foreground: #9c9c9c + *SimpleMenu.line28.foreground: #e8e8e8 + *SimpleMenu.line29.foreground: #9c9c9c + *SimpleMenu.line30.foreground: #e8e8e8 + *SimpleMenu.line31.foreground: #9c9c9c + *SimpleMenu.line32.foreground: #e8e8e8 + *SimpleMenu.line33.foreground: #9c9c9c + *SimpleMenu.line34.foreground: #e8e8e8 + *SimpleMenu.line35.foreground: #9c9c9c + *SimpleMenu.line36.foreground: #e8e8e8 + *SimpleMenu.line37.foreground: #9c9c9c + *SimpleMenu.line38.foreground: #e8e8e8 + *SimpleMenu.line39.foreground: #9c9c9c + *SimpleMenu.line40.foreground: #e8e8e8 + + + !--------------------------------------------- + ! Fixups for 24-bit displays + !--------------------------------------------- + *hFindEntry.background: #adadad + *hdrIGText.background: #adadad + *hdrKGText.background: #adadad + *hfEntry.background: #adadad + *printcmd.background: #adadad + *titleString.background: #adadad + *fnameText.background: #adadad + *imtemplateText.background: #adadad + *z1Value.background: #adadad + *z2Value.background: #adadad + *nsampValue.background: #adadad + *saveFile.background: #adadad + *infoText.background: #adadad + *wtName.background: #adadad + *wtTitle.background: #adadad + *wtFBCfg.background: #adadad + *wtIPixval.background: #adadad + *wtSPixval.background: #adadad + *wtBPixval.background: #adadad + *wtWcs1.background: #adadad + *wtWcs2.background: #adadad + *wtWcs3.background: #adadad + *wtWcs4.background: #adadad + *wcsIsmCmd.background: #adadad + *tclEntry.background: #adadad + + *hFindEntry.foreground: #000000 + *hdrIGText.foreground: #000000 + *hdrKGText.foreground: #000000 + *hfEntry.foreground: #000000 + *printcmd.foreground: #000000 + *titleString.foreground: #000000 + *fnameText.foreground: #000000 + *imtemplateText.foreground: #000000 + *z1Value.foreground: #000000 + *z2Value.foreground: #000000 + *nsampValue.foreground: #000000 + *saveFile.foreground: #000000 + *infoText.foreground: #000000 + *wtName.foreground: #000000 + *wtTitle.foreground: #000000 + *wtFBCfg.foreground: #000000 + *wtIPixval.foreground: #000000 + *wtSPixval.foreground: #000000 + *wtBPixval.foreground: #000000 + *wtWcs1.foreground: #000000 + *wtWcs2.foreground: #000000 + *wtWcs3.foreground: #000000 + *wtWcs4.foreground: #000000 + *wcsIsmCmd.foreground: #000000 + *tclEntry.foreground: #000000 +} + + + + + +set Resources(ximtool) { \ + + ! Main image window resources. + ! ------------------------------- + *allowShellResize: True + *beNiceToColormap: False + *menuLabel.foreground: Gold + *markerMenu.foreground: White + *rulerMenu.foreground: White + *display.imagewin.markerMenu.foreground: White + *display.imagewin.rulerMenu.foreground: White + *markerMenu.background: SteelBlue + *markerMenu*SimpleMenu.foreground: White + *markerMenu*SimpleMenu.background: SteelBlue + *rulerMenu.background: SteelBlue + *rulerMenu*SimpleMenu.foreground: White + *rulerMenu*SimpleMenu.background: SteelBlue + *rulerColor.SmeBSB.leftMargin: 16 + *magzoomMenu.foreground: White + *magzoomMenu.background: SteelBlue + *magzoomMenu*SimpleMenu.foreground: White + *magzoomMenu*SimpleMenu.background: SteelBlue + *markerColor.SmeBSB.leftMargin: 64 + *markerColor.SmeBSB.rightMargin: 0 + *markerColor.menuLabel.leftMargin: 5 + *markerColor.menuLabel.rightMargin: 5 + *rulerColor.SmeBSB.leftMargin: 64 + *rulerColor.SmeBSB.rightMargin: 0 + *rulerColor.menuLabel.leftMargin: 5 + *rulerColor.menuLabel.rightMargin: 5 + + *ximtool.title: XIMTOOL_VERSION + + *display.borderWidth: 2 + *display.layout: horizontal { \ + -0 \ + vertical { \ + menuGroup < +inf -inf * > \ + horizontal { 1 toolbar < +inf -inf * > 1 } \ + 1 < -1 > \ + horizontal { 1 panelbar < +inf -inf * > 1 } \ + 1 < -1 > \ + vertical { \ + horizontal { \ + imageFrame < +inf -inf * +inf -inf > \ + -2 \ + vcutFrame < * +inf -inf > \ + } \ + -3 \ + horizontal { \ + hcutFrame < +inf -inf * > 1 \ + vertical { 4 horizontal { -4 plotOpts} -4 } \ + } \ + -3 \ + horizontal { \ + cbarFrame < +inf -inf * > \ + focusSlider 2 hcut 2 vcut 15 \ + } \ + } \ + } \ + -0 \ + } + *hcut.label: H + *hcut.font: *lucida-bold-r*10* + *vcut.label: V + *vcut.font: *lucida-bold-r*10* + *focusSlider.location: 0 0 100 15 + + *hcutFrame.frameType: sunken + *hcutFrame.frameWidth: 1 + *hcutFrame.innerOffset: 1 + *hcutFrame.outerOffset: 1 + //*hcutPlot.color0: #c4c4c4 + //*hcutPlot.color1: #000000 + *hcutPlot.color0: #000000 + *hcutPlot.color1: #ffffff + *hcutPlot.crosshairCursorColor: red + *hcutPlot.width: 512 + *hcutPlot.height: 6 + *hcutPlot.borderWidth: 0 + *hcutPlot.alphaFont1: 6x10 + *hcutPlot.alphaFont2: 6x10 + *hcutPlot.alphaFont3: 6x10 + *hcutPlot.alphaFont4: 6x10 + *hcutPlot.alphaFont5: 6x10 + *hcutPlot.alphaFont6: 6x10 + *hcutPlot.alphaFont7: 6x10 + *hcutPlot.alphaFont8: 6x10 + *hcutPlot.translations: \ + !Ctrl 1: call(cpZoom,1,1,fixed) \n\ + !Ctrl 2: call(cpZoom,2,2,fixed) \n\ + !Ctrl 3: call(cpZoom,3,3,fixed) \n\ + !Ctrl 4: call(cpZoom,4,4,fixed) \n\ + !Ctrl 5: call(cpZoom,5,5,fixed) \n\ + !Ctrl 6: call(cpZoom,6,6,fixed) \n\ + !Ctrl 7: call(cpZoom,7,7,fixed) \n\ + !Ctrl 8: call(cpZoom,8,8,fixed) \n\ + !Ctrl 9: call(cpZoom,9,9,fixed) \n\ + !Ctrl b: call(prevFrame,$name) \n\ + !Ctrl f: call(nextFrame,$name) \n\ + !Ctrl i: call(cpInvert) \n\ + !Ctrl m: call(toggleMagnifier) \n\ + !Ctrl n: call(normalize) \n\ + !Ctrl p: call(togglePanner) \n\ + !Ctrl Alt q: call(Quit) \n\ + !Ctrl r: call(cpRegisterFrames) \n\ + !Ctrl s: call(cpMatchFrames) \n\ + !Ctrl u: call(cpZoom,1,1,fixed) \n\ + Ctrl +: call(cpZoom,2.0,2.0,relative) \n\ + Ctrl -: call(cpZoom,0.5,0.5,relative) \n\ + Ctrl \<: call(cpSetBlinkRate,BRdecrease) \n\ + Ctrl \>: call(cpSetBlinkRate,BRincrease) \n\ + !Alt b: call(toggleBlink) \n\ + !Alt c: call(displayPanel) \n\ + !Alt h: call(Help) \n\ + !Alt i: call(infoPanel) \n\ + !Ctrl Alt f: call(fitFrame) \n\ + !Alt l: call(loadPanel) \n\ + !Alt p: call(printPanel) \n\ + !Alt s: call(savePanel) \n\ + !Alt t: call(tclPanel) \n\ + !: call(makeMarker,$name,$x,$y) m_create() \n\ + : enter-window() \n\ + : leave-window() \n\ + : graphics-input() \n\ + !Alt : call(curtrack_msg,$x,$y) \n\ + : track-cursor() call(hcutWCSUpdate,$x,$y) + + + *vcutFrame.frameType: sunken + *vcutFrame.frameWidth: 1 + *vcutFrame.innerOffset: 0 + *vcutFrame.outerOffset: 0 + //*vcutPlot.color0: #c4c4c4 + //*vcutPlot.color1: black + *vcutPlot.color0: #000000 + *vcutPlot.color1: #ffffff + *vcutPlot.crosshairCursorColor: red + *vcutPlot.width: 6 + *vcutPlot.height: 512 + *vcutPlot.borderWidth: 0 + *vcutPlot.alphaFont1: 6x10 + *vcutPlot.alphaFont2: 6x10 + *vcutPlot.alphaFont3: 6x10 + *vcutPlot.alphaFont4: 6x10 + *vcutPlot.alphaFont5: 6x10 + *vcutPlot.alphaFont6: 6x10 + *vcutPlot.alphaFont7: 6x10 + *vcutPlot.alphaFont8: 6x10 + *vcutPlot.translations: \ + !Ctrl 1: call(cpZoom,1,1,fixed) \n\ + !Ctrl 2: call(cpZoom,2,2,fixed) \n\ + !Ctrl 3: call(cpZoom,3,3,fixed) \n\ + !Ctrl 4: call(cpZoom,4,4,fixed) \n\ + !Ctrl 5: call(cpZoom,5,5,fixed) \n\ + !Ctrl 6: call(cpZoom,6,6,fixed) \n\ + !Ctrl 7: call(cpZoom,7,7,fixed) \n\ + !Ctrl 8: call(cpZoom,8,8,fixed) \n\ + !Ctrl 9: call(cpZoom,9,9,fixed) \n\ + !Ctrl b: call(prevFrame,$name) \n\ + !Ctrl f: call(nextFrame,$name) \n\ + !Ctrl i: call(cpInvert) \n\ + !Ctrl m: call(toggleMagnifier) \n\ + !Ctrl n: call(normalize) \n\ + !Ctrl p: call(togglePanner) \n\ + !Ctrl Alt q: call(Quit) \n\ + !Ctrl r: call(cpRegisterFrames) \n\ + !Ctrl s: call(cpMatchFrames) \n\ + !Ctrl u: call(cpZoom,1,1,fixed) \n\ + Ctrl +: call(cpZoom,2.0,2.0,relative) \n\ + Ctrl -: call(cpZoom,0.5,0.5,relative) \n\ + Ctrl \<: call(cpSetBlinkRate,BRdecrease) \n\ + Ctrl \>: call(cpSetBlinkRate,BRincrease) \n\ + !Alt b: call(toggleBlink) \n\ + !Alt c: call(displayPanel) \n\ + !Alt h: call(Help) \n\ + !Alt i: call(infoPanel) \n\ + !Ctrl Alt f: call(fitFrame) \n\ + !Alt l: call(loadPanel) \n\ + !Alt p: call(printPanel) \n\ + !Alt s: call(savePanel) \n\ + !Alt t: call(tclPanel) \n\ + !: call(makeMarker,$name,$x,$y) m_create() \n\ + : enter-window() \n\ + : leave-window() \n\ + : graphics-input() \n\ + !Alt : call(curtrack_msg,$x,$y) \n\ + : track-cursor() call(vcutWCSUpdate,$x,$y) + + + *plotOpts.label: Options + !*plotOpts*location: 0 0 105 18 + *plotOpts*location: 0 0 1 18 + *plotOpts.shrinkToFit: True + *plotOpts.outerOffset: 5 + *plotOpts.innerOffset: 3 + *plotOpts.frameWidth: 2 + *plotOpts*TextToggle.offIcon: square0s + *plotOpts*TextToggle.onIcon: square1s + *plotOpts*TextToggle.highlightColor: yellow + *plotOpts*TextToggle.outerOffset: 0 + *plotOpts*TextToggle.frameWidth: 0 + *plotOpts*TextToggle.selectionStyle: multi + *plotOpts*TextToggle.leftMargin: 3 + *plotOpts*TextToggle.alignment: left + + *poptsLayout.borderWidth: 0 + *poptsLayout.layout: vertical { \ + -1 \ + plotSpeed plotAccurate plotImgPix \ + 2 < -2 > \ + horizontal { -4 optLine < +inf -inf * > -4 } \ + 2 < -2 > \ + curJump curSmooth curTrack \ + -1 \ + } + *plotSpeed.label: Better Speed + *plotSpeed.on: True + *plotAccurate.label: Better Accuracy + *plotAccurate.on: False + *plotImgPix.label: Image Pixels + *plotImgPix.on: False + *plotImgPix.sensitive: False + *optLine.height: 2 + *optLine.width: 120 + *optLine.outerOffset: 0 + *optLine.innerOffset: 0 + *optLine.frameWidth: 2 + *optLine.frameType: chiseled + *curJump.label: Jump Cursor + *curJump.on: True + *curSmooth.label: Smooth Cursor + *curSmooth.on: False + *curTrack.label: Graphics Cursors + *curTrack.on: True + + + *menuGroup.label: + *menuGroup.height: 38 + *menuGroup.width: 512 + *menuGroup.frameType: raised + *menuGroup.frameWidth: 2 + *menubar.layout: horizontal { \ + 2 < -2 > \ + fileButton 1 < -1 > viewButton 1 < -1 > optionsButton \ + 1 < -1 > \ + imageTitle < +inff -inff * > \ + 1 < -1 > \ + mXflipButton 1 < -1 > mYflipButton \ + 1 < -1 > \ + mPrevButton 1 < -1 > mFrameButton 1 < -1 > mNextButton \ + 1 < -1 > \ + toolButton 1 < -1 > panelButton \ + 2 < -2 > \ + } + + *menubar*SimpleMenu.foreground: Black + *menubar*SimpleMenu.borderWidth: 1 + *menubar*SimpleMenu.foreground: White + *menubar*SimpleMenu.background: SteelBlue + *SmeBSB.vertSpace: 10 + + *menubar.width: 512 + *menubar*borderWidth: 0 + *menubar*Command.internalWidth: 0 + *menubar*Command.borderWidth: 0 + *menubar*Toggle.label: x + *menubar*Toggle.internalWidth: 0 + *menubar*Toggle.borderWidth: 0 + + *toolbar.layout: horizontal { \ + tbZoomIn < +inf -inf * > 1 < -1 > \ + tbZoom0 < +inf -inf * > 1 < -1 > \ + tbZoomOut < +inf -inf * > 1 < -1 > \ + tbInvert < +inf -inf * > 1 < -1 > \ + tbNormalize < +inf -inf * > 1 < -1 > \ + tbMatchLUT < +inf -inf * > 1 < -1 > \ + tbAutoReg < +inf -inf * > 1 < -1 > \ + tbRegister < +inf -inf * > 1 < -1 > \ + tbCenter < +inf -inf * > 1 < -1 > \ + tbBlinkDec < +inf -inf * > 1 < -1 > \ + tbBlink < +inf -inf * > 1 < -1 > \ + tbBlinkInc < +inf -inf * > 1 < -1 > \ + xflipButton < +inf -inf * > 1 < -1 > \ + yflipButton < +inf -inf * > 1 < -1 > \ + tbCompass < +inf -inf * > 1 < -1 > \ + tbTile < +inf -inf * > 1 < -1 > \ + prevButton < +inf -inf * > 1 < -1 > \ + frameButton < +inf -inf * > 1 < -1 > \ + nextButton < +inf -inf * > 1 < -1 > \ + } + *toolbar.width: 512 + *toolbar.height: 25 + *toolbar*borderWidth: 0 + *toolbar*Command.internalWidth: 3 + *toolbar*Command.borderWidth: 0 + *toolbar*Toggle.internalWidth: 2 + *toolbar*Toggle.borderWidth: 0 + + *panelbar.layout: horizontal { \ + pbDisplayP < +inf -inf * > 1 < -1 > \ + pbPrintP < +inf -inf * > 1 < -1 > \ + pbLoadP < +inf -inf * > 1 < -1 > \ + pbSaveP < +inf -inf * > 1 < -1 > \ + pbInfoP < +inf -inf * > 1 < -1 > \ + pbTileP < +inf -inf * > 1 < -1 > \ + pbCoordP < +inf -inf * > 1 < -1 > \ + pbPanM < +inf -inf * > 1 < -1 > \ + pbMagM < +inf -inf * > 1 < -1 > \ + pbWcsM < +inf -inf * > 1 < -1 > \ + pbIsm < +inf -inf * > 1 < -1 > \ + helpButton < +inf -inf * > 1 < -1 > \ + pbQuit < +inf -inf * > 1 < -1 > \ + } + *panelbar*SimpleMenu.borderColor: Black + *panelbar*SimpleMenu.borderWidth: 1 + *SmeBSB.vertSpace: 10 + + *panelbar.width: 12 + *panelbar.height: 25 + *panelbar*borderWidth: 0 + *panelbar*Label.internalWidth: 4 + *panelbar*Label.borderWidth: 0 + *panelbar*Command.internalWidth: 4 + *panelbar*Command.borderWidth: 0 + *panelbar*Toggle.internalWidth: 3 + *panelbar*Toggle.borderWidth: 0 + + *pbLoadP.label: Load + *pbDisplayP.label: Display + *pbSaveP.label: Save + *pbPrintP.label: Print + *pbInfoP.label: Info + *pbTileP.label: Tile + *pbCoordP.label: Coords + *pbPanM.label: Pan + *pbPanM.state: 1 + *pbMagM.label: Mag + *pbMagM.state: 0 + *pbWcsM.label: WCS + *pbWcsM.state: 1 + *pbIsm.label: ISM + *pbIsm.state: 0 + *helpButton.label: + + *fileButton.label: File + *fileButton.menuName: fileMenu + *viewButton.label: View + *viewButton.menuName: viewMenu + *optionsButton.label: Options + *optionsButton.menuName: optionsMenu + *toolButton.label: + *toolButton.state: 0 + *panelButton.label: + *panelButton.state: 0 + *imageTitle*font: *times-bold-r*12* + *imageTitle.width: 40 + *imageTitle.height: 20 + *frameButton.menuName: frameMenu + *frameButton.label: 1 + *frameButton.width: 20 + *mFrameButton.menuName: mFrameMenu + *mFrameButton.label: 1 + *mFrameButton.width: 20 + *pbQuit.label: Quit + *tbZoom0.label: Mag + *tbBlink.label: Blink + *tbBlink.internalWidth: 3 + *tbCenter.label: Cntr + *tbAutoReg.label: AReg + *tbRegister.label: Reg + *tbInvert.label: Inv + *tbNormalize.label: Norm + *tbMatchLUT.label: Match + + *SimpleMenu*font: -adobe-times-bold-r-normal-*-12-*-*-*-*-*-iso8859-1 + *fileButton.font: -adobe-times-bold-i-normal-*-12-*-*-*-*-*-iso8859-1 + *optionsButton.font: -adobe-times-bold-i-normal-*-12-*-*-*-*-*-iso8859-1 + *viewButton.font: -adobe-times-bold-i-normal-*-12-*-*-*-*-*-iso8859-1 + *panelbar*font: -adobe-times-bold-i-normal-*-12-*-*-*-*-*-iso8859-1 + *toolbar*font: -adobe-times-bold-i-normal-*-12-*-*-*-*-*-iso8859-1 + + *Gterm.cmapName: image + *Gterm.basePixel: 64 + *imageFrame.frameType: sunken + *imageFrame.frameWidth: 1 + *imageFrame.outerOffset: 0 + *imageFrame.innerOffset: 0 + *imageFrame.width: 512 + *imageFrame.height: 512 + *cbarFrame.frameType: sunken + *cbarFrame.frameWidth: 1 + *cbarFrame.outerOffset: 0 + *cbarFrame.innerOffset: 0 + *cbarFrame.width: 512 + *imagewin.warpCursor: true + *imagewin.raiseWindow: true + *imagewin.deiconifyWindow: true + *imagewin.idleCursor: crosshair + *imagewin.ginmodeCursor: circle + *imagewin.ginmodeBlinkInterval: 500 + *imagewin.resizable: true + *imagewin.copyOnResize: false + *imagewin.width: 512 + *imagewin.height: 512 + *imagewin.maxMappings: 64 + *imagewin.borderWidth: 0 + + *imagewin.translations: \ + NoneLeft: call(move_cursor,-1,0) \n\ + NoneDown: call(move_cursor,0,1) \n\ + NoneUp: call(move_cursor,0,-1) \n\ + NoneRight: call(move_cursor,1,0) \n\ + !Shift Left: call(move_cursor,-10,0) \n\ + !Shift Down: call(move_cursor,0,10) \n\ + !Shift Up: call(move_cursor,0,-10) \n\ + !Shift Right: call(move_cursor,10,0) \n\ + !Ctrl h: call(move_cursor,-1,0) \n\ + !Ctrl j: call(move_cursor,0,1) \n\ + !Ctrl k: call(move_cursor,0,-1) \n\ + !Ctrl l: call(move_cursor,1,0) \n\ + !Ctrl Shift h: call(move_cursor,-10,0) \n\ + !Ctrl Shift j: call(move_cursor,0,10) \n\ + !Ctrl Shift k: call(move_cursor,0,-10) \n\ + !Ctrl Shift l: call(move_cursor,10,0) \n\ + !Ctrl Left: call(moveFrame,-1,0) \n\ + !Ctrl Down: call(moveFrame,0,1) \n\ + !Ctrl Up: call(moveFrame,0,-1) \n\ + !Ctrl Right: call(moveFrame,1,0) \n\ + !Ctrl Alt Left: call(moveFrame,-0.5,0) \n\ + !Ctrl Alt Down: call(moveFrame,0,0.5) \n\ + !Ctrl Alt Up: call(moveFrame,0,-0.5) \n\ + !Ctrl Alt Right: call(moveFrame,0.5,0) \n\ + !Alt 1: call(cpSetFrame,frame1) \n\ + !Alt 2: call(cpSetFrame,frame2) \n\ + !Alt 3: call(cpSetFrame,frame3) \n\ + !Alt 4: call(cpSetFrame,frame4) \n\ + !Ctrl 1: call(cpZoom,1,1,fixed) \n\ + !Ctrl 2: call(cpZoom,2,2,fixed) \n\ + !Ctrl 3: call(cpZoom,3,3,fixed) \n\ + !Ctrl 4: call(cpZoom,4,4,fixed) \n\ + !Ctrl 5: call(cpZoom,5,5,fixed) \n\ + !Ctrl 6: call(cpZoom,6,6,fixed) \n\ + !Ctrl 7: call(cpZoom,7,7,fixed) \n\ + !Ctrl 8: call(cpZoom,8,8,fixed) \n\ + !Ctrl 9: call(cpZoom,9,9,fixed) \n\ + !Ctrl a: call(tbToggleAutoReg) \n\ + !Ctrl b: call(prevFrame,$name) \n\ + !Ctrl c: call(cpZoomAction,centerFrame) \n\ + !Ctrl f: call(nextFrame,$name) \n\ + !Ctrl i: call(cpInvert) \n\ + !Ctrl m: call(toggleMagnifier) \n\ + !Ctrl n: call(normalize) \n\ + !Ctrl o: call(offset,$x,$y) \n\ + !Ctrl p: call(togglePanner) \n\ + !Ctrl Alt q: call(Quit) \n\ + !Ctrl r: call(cpRegisterFrames) \n\ + !Ctrl s: call(cpMatchFrames) \n\ + !Ctrl t: call(tbTileFramesToggle) \n\ + !Ctrl u: call(cpZoom,1,1,fixed) \n\ + !Ctrl x: call(cpFrameAction,flipX) \n\ + !Ctrl y: call(cpFrameAction,flipY) \n\ + Ctrl +: call(cpZoom,2.0,2.0,relative) \n\ + Ctrl -: call(cpZoom,0.5,0.5,relative) \n\ + !Ctrl Alt =: call(Print) \n\ + Ctrl \<: call(cpSetBlinkRate,BRdecrease) \n\ + Ctrl \>: call(cpSetBlinkRate,BRincrease) \n\ + Ctrl \[: call(setCtrBoxSize,$x,$y,-1) \n\ + Ctrl \]: call(setCtrBoxSize,$x,$y,1) \n\ + !Ctrl 0: call(centroid,$x,$y,peak) \n\ + !Ctrl Alt 0: call(centroid,$x,$y,min) \n\ + !Alt b: call(toggleBlink) \n\ + !Alt c: call(displayPanel) \n\ + !Ctrl Shift c: call(displayPanel) \n\ + !Ctrl Alt f: call(fitFrame) \n\ + !Alt h: call(Help) \n\ + !Alt i: call(infoPanel) \n\ + !Alt l: call(loadPanel) \n\ + !Alt p: call(printPanel) \n\ + !Alt s: call(savePanel) \n\ + !Alt t: call(tclPanel) \n\ + !Ctrl Shift t: call(tclPanel) \n\ + !Shift: call(setDynamicMagnifier,1) \n\ + !Shift: call(setDynamicMagnifier,0) \n\ + !: call(makeMarker,$name,$x,$y) m_create() \n\ + !Shift : crosshair(on) \n\ + !Shift : crosshair(on) \n\ + !Shift : crosshair(off) \n\ + !: crosshair(off) \n\ + !: call(zoom,$x,$y) \n\ + !: call(windowColormap,$x,$y) \n\ + !: call(updateColormap,$x,$y) \n\ + !: call(windowColormap,$x,$y) \n\ + !Ctrl : call(makeRuler,$name,$x,$y) \n\ + !Ctrl : track-cursor() call(wcsUpdate,$x,$y) call(magnifierMapImage,$x,$y) call(resizeRuler,$x,$y,0) \n\ + !Ctrl : call(deleteRuler,$x,$y) \n\ + : enter-window() \n\ + : leave-window() \n\ + : graphics-input() \n\ + !Alt : call(curtrack_msg,$x,$y) \n\ + : track-cursor() call(wcsUpdate,$x,$y) call(magnifierMapImage,$x,$y) + +! The following translations can be used to enable windowing of the +! individual RGB components of the colormap. It's not very useful but +! included here for those that may wish to use it. +!-------------------------------------------------------------------------- +! !Ctrl : call(windowRGB,1,$x,$y,0) \n\ +! !Ctrl : call(windowRGB,1,$x,$y,0) \n\ +! !Ctrl : call(windowRGB,1,$x,$y,1) \n\ +! !Ctrl : call(windowRGB,2,$x,$y,0) \n\ +! !Ctrl : call(windowRGB,2,$x,$y,0) \n\ +! !Ctrl : call(windowRGB,2,$x,$y,1) \n\ +! !Ctrl : call(windowRGB,3,$x,$y,0) \n\ +! !Ctrl : call(windowRGB,3,$x,$y,0) \n\ +! !Ctrl : call(windowRGB,3,$x,$y,1) \n\ + + + *colorbar.maxRasters: 1 + *colorbar.maxMappings: 1 + *colorbar.height: 17 + *colorbar.width: 50 + *colorbar.borderWidth: 0 +} + + +set Resources(panelShell) { \ + + !================================ + ! Main Integrated Control Panel + !================================ + *panelShell.title: XImtool Control Panel + *panelShell.geometry: 480x630 + *panelShell.maxWidth: 480 + *panelShell.minWidth: 480 + *panelTabs.internalHeight: 3 + *panelTabs.internalWidth: 10 + + *Text*font: -*-helvetica-medium-r-normal-*-12-*-iso8859-1 + *TextBox*font: -*-helvetica-medium-r-normal-*-12-*-iso8859-1 + *List.font: -*-helvetica-medium-r-normal-*-12-*-iso8859-1 + *MultiList.font: -*-helvetica-medium-r-normal-*-12-*-iso8859-1 + *TextButton.font: -*-helvetica-medium-r-normal-*-12-*-iso8859-1 + *TextToggle.font: -*-helvetica-medium-r-normal-*-12-*-iso8859-1 + + *display_panel.tabLabel: Display + *display_panel.innerOffset: 5 + *print_panel.tabLabel: Print + *print_panel.innerOffset: 5 + *load_panel.tabLabel: Load + *load_panel.innerOffset: 5 + *save_panel.tabLabel: Save + *save_panel.innerOffset: 5 + *info_panel.tabLabel: Info + *info_panel.innerOffset: 5 + *tile_panel.tabLabel: Tile + *tile_panel.innerOffset: 5 + *wcs_panel.tabLabel: Coords + *wcs_panel.innerOffset: 5 + + *panelMenuBar*borderWidth: 0 + *panelMenuBar*Command.internalHeight: 4 + *panelMenuBar*Command.internalWidth: 15 + *panelMenuBar.layout: vertical { \ + 5 < -5 > \ + horizontal { \ + 10 < +inf -10> \ + panelHelp \ + 3 < -3 > \ + panelClose \ + 7 < -7 > \ + } \ + 5 < -5 > \ + } + + *panelHelp.label: Help + *panelClose.label: Dismiss + + + *tabFrame.outerOffset: 3 + *tabFrame.innerOffset: 0 + *tabFrame.frameWidth: 0 + *tabFrame.frameType: chiseled + *panelMenuFrame.outerOffset: 0 + *panelMenuFrame.innerOffset: 1 + *panelMenuFrame.frameType: raised + *panelMenuFrame.frameWidth: 2 + *panel.layout: vertical { \ + panelMenuFrame < +inf -inf * > \ + 3 \ + horizontal { tabFrame < +inf -inf * +inf -inf> } \ + } +} + + +set Resources(display_panel) { \ + + !================================ + ! Main Display Control Panel. + !================================ + *controlPanel*internalWidth: 0 + *controlPanel*borderWidth: 0 + + *TextBox.font: 7x13bold + *TextToggle.font: -adobe-times-medium-r-normal-*-12-*-*-*-*-*-iso8859-1 + *Command.font: -adobe-times-bold-i-normal-*-12-*-*-*-*-*-iso8859-1 + *Toggle.font: -adobe-times-medium-r-normal-*-12-*-*-*-*-*-iso8859-1 + *Label.font: -*-helvetica-medium-r-normal-*-12-*-iso8859-1 + *MultiList.font: -adobe-times-medium-r-normal-*-12-*-*-*-*-*-iso8859-1 + *toggleZoom.font: -*-helvetica-medium-r-normal-*-12-*-iso8859-1 + *centerFrame.font: -*-helvetica-medium-r-normal-*-12-*-iso8859-1 + *zoom*Command.font: 7x13bold + + *blinkFrame1.font: -adobe-times-medium-r-normal-*-12-*-iso8859-1 + *blinkFrame2.font: -adobe-times-medium-r-normal-*-12-*-iso8859-1 + *blinkFrame3.font: -adobe-times-medium-r-normal-*-12-*-iso8859-1 + *blinkFrame4.font: -adobe-times-medium-r-normal-*-12-*-iso8859-1 + *matchButton.font: -adobe-times-medium-r-normal-*-12-*-iso8859-1 + *registerButton.font: -adobe-times-medium-r-normal-*-12-*-iso8859-1 + *blinkButton.font: -adobe-times-medium-r-normal-*-12-*-iso8859-1 + *autoregButton.font: -adobe-times-medium-r-normal-*-12-*-iso8859-1 + + *controlPanel.layout: vertical { \ + 5 < -5 > \ + horizontal { \ + -1 \ + viewBox < +inf -inf * > \ + -1 \ + } \ + 5 < -5 > \ + horizontal { \ + -1 \ + enhancementBox < +inf -inf * +inf -inf > \ + -5 \ + vertical { \ + -1 \ + blinkBox < * +inf - inf > \ + 1 \ + optionsBox < * +inff -inff > \ + -1 \ + } \ + -1 \ + } \ + -5 \ + controlBox < +inf * > \ + -5 \ + } + + ! VIEW + ! ------------------ + *viewBox.label: View + *viewBox.location: 0 0 410 0 + *viewBox.shrinkToFit: True + *viewBox.outerOffset: 7 + + *view.layout: vertical { \ + 5 < +inf -5 > \ + horizontal { \ + -1 \ + frameSelect \ + vertical { \ + 3 < -3 > \ + frameDataBox < +inff -100% * +inff -100% > \ + 3 < -3 > \ + } \ + zoomBox \ + -1 \ + } \ + 1 < +inf > \ + viewButtons < +inf -inf * +inf -inf > \ + 5 < +inf -5 > \ + } + + *frameDataBox.frameType: sunken + *frameDataBox.frameWidth: 1 + *frameData.width: 150 + *frameData.height: 50 + + *frameSelect.location: 0 0 72 0 + *frameSelect.shrinkToFit: True + *frameSelect.outerOffset: 7 + *frameSelect.innerOffset: 2 + *frameSelect.frameWidth: 2 + *frameSelect*offIcon: diamond0s + *frameSelect*onIcon: diamond1s + *frameSelect*highlightColor: blue + *frameSelect.label: Frame + + *frameBox.layout: vertical { \ + 3 \ + horizontal { -2 frlistBox < * +inff -inff > } \ + 3 < +inf -3 > \ + horizontal { prevFrame < +inf -inf * > 4 nextFrame < +inf -inf * > } \ + } + *framePort.allowVert: True + *framePort.allowHoriz: False + *framePort.useRight: True + *framePort.height: 80 + + *frameBox*alignment: left + *frameBox*frameWidth: 0 + *frameBox*frame1.label: 1\ \ + *frameBox*frame2.label: 2\ \ + *frameBox*frame3.label: 3\ \ + *frameBox*frame4.label: 4\ \ + + *frameBox*frame5.label: 5\ \ + *frameBox*frame6.label: 6\ \ + *frameBox*frame7.label: 7\ \ + *frameBox*frame8.label: 8\ \ + *frameBox*frame9.label: 9\ \ + *frameBox*frame10.label: 10\ + *frameBox*frame11.label: 11\ + *frameBox*frame12.label: 12\ + *frameBox*frame13.label: 13\ + *frameBox*frame14.label: 14\ + *frameBox*frame15.label: 15\ + *frameBox*frame16.label: 16\ + *frameBox*Command.width: 24 + *frameBox*prevFrame.label: xxx + *frameBox*nextFrame.label: xxx + + *frameList*location: 0 0 50 20 + *frameList.layout: vertical { \ + frame1 < +inf * >\ + frame2 < +inf * >\ + frame3 < +inf * >\ + frame4 < +inf * >\ + frame5 < +inf * >\ + frame6 < +inf * >\ + frame7 < +inf * >\ + frame8 < +inf * >\ + frame9 < +inf * >\ + frame10 < +inf * >\ + frame11 < +inf * >\ + frame12 < +inf * >\ + frame13 < +inf * >\ + frame14 < +inf * >\ + frame15 < +inf * >\ + frame16 < +inf * >\ + } + + + *zoomBox.label: Zoom: + *zoomBox.location: 0 0 160 127 + *zoomBox.outerOffset: 7 + *zoomBox.shrinkToFit: True + *zoomBox*TextButton.frameWidth: 1 + *zoomBox*TextButton.outerOffset: 0 + + *controlPanel*zoom*internalWidth: 4 + *zoom.layout: vertical { \ + space = ((50% of width zoom) - (50% of width z5)) \ + 1 < +inf > \ + horizontal { \ + vertical { toggleZoom < +inf * +inf > 1 } \ + 1 \ + vertical { 1 < +inf > z5 1 < +inf > z3 0 < +inf > } \ + 1 \ + vertical { zoomIn < +inf * +inf > 1 } \ + } \ + 1 \ + horizontal { \ + 1 < +inf > \ + d8 1 d4 1 d2 1 x1 1 z2 1 z4 1 z8 \ + 1 < +inf > \ + } \ + 1 \ + horizontal { \ + vertical { 1 zoomOut < +inf * +inf > } \ + 1 \ + vertical { 0 < +inf > d3 1 < +inf > d5 1 < +inf > } \ + 1 \ + vertical { 1 centerFrame < +inf * +inf > } \ + } \ + 1 < +inf > \ + } + + *toggleZoom.label: Toggle\nZoom + *toggleZoom.outerOffset: 2 + *toggleZoom.width: 30 + *toggleZoom.height: 25 + + *zoomIn.label: Zoom\nIn + *zoomIn.outerOffset: 2 + *zoomIn.width: 30 + *zoomIn.height: 25 + + *x1.label: 1 + *z2.label: 2 + *z3.label: 3 + *z4.label: 4 + *z5.label: 5 + *z8.label: 8 + + *controlPanel*zoomIn.foreground: royalBlue3 + *controlPanel*z4.foreground: royalBlue3 + *controlPanel*z5.foreground: royalBlue3 + *controlPanel*z8.foreground: royalBlue3 + *controlPanel*z2.foreground: royalBlue3 + *controlPanel*z3.foreground: royalBlue3 + + *zoomOut.label: Zoom\nOut + *zoomOut.outerOffset: 2 + *zoomOut.width: 30 + *zoomOut.height: 25 + + *centerFrame.label: Center + *centerFrame.outerOffset: 2 + *centerFrame.width: 30 + *centerFrame.height: 25 + + *d2.label: 2 + *d3.label: 3 + *d4.label: 4 + *d5.label: 5 + *d8.label: 8 + + *controlPanel*zoomOut.foreground: mediumVioletRed + *controlPanel*d2.foreground: mediumVioletRed + *controlPanel*d3.foreground: mediumVioletRed + *controlPanel*d4.foreground: mediumVioletRed + *controlPanel*d5.foreground: mediumVioletRed + *controlPanel*d8.foreground: mediumVioletRed + + *viewButtons.location: 0 0 100 80 + *viewButtons.layout: horizontal { \ + 2 < -2 > \ + aspect < +inf * > 2 \ + flipX < +inf * > 2 \ + flipY < +inf * > 2 \ + flipXY < +inf * > 2 \ + clearFrame < +inf * > 2 \ + fitFrame < +inf * > \ + 2 < -2 > \ + } + *nextFrame.label: Next Frame + *prevFrame.label: Previous Frame + *fitFrame.label: Fit Frame + *aspect.label: Aspect + *clearFrame.label: Clear Frame + *flipX.label: Flip X + *flipY.label: Flip Y + *flipXY.label: Flip XY + + + ! ENHANCEMENT + ! ------------------ + *enhancementBox.label: Enhancement + *enhancementBox.location: 0 0 110 0 + *enhancementBox.shrinkToFit: True + *enhancementBox.outerOffset: 7 + + *enhance*Viewport.allowVert: True + *enhance*Viewport.allowHoriz: False + *enhance*Viewport.useRight: False + *enhance*Viewport.resizeable: True + *enhance*Scrollbar.width: 17 + *enhance*Scrollbar.minimumThumb: 10 + *enhance.layout: vertical { \ + 3 < -3 > \ + horizontal { \ + 2 < -2 > \ + colorlistFrame < +inf -inf * +inff -inff > \ + 2 < -2 > \ + } \ + 2 \ + horizontal { \ + 2 < -2 > \ + colordataFrame < +inf -inf * +inf -inf > \ + 2 < -2 > \ + } \ + 5 < -5 > \ + horizontal { \ + 2 < -2 > \ + vertical { -1 contrastLabel 3 < -3 > brightnessLabel -1 } \ + 3 < -3 > \ + vertical { \ + -1 \ + contrastSlider < +inf -inf * > \ + 3 < -3 > \ + brightnessSlider < +inf -inf * > \ + -1 \ + } \ + 2 < -2 > \ + } \ + 5 < -5 > \ + horizontal { \ + 3 < -3 > \ + invertButton < +inf -inf * > \ + 5 < -5 > \ + optimizeButton < +inf -inf * > \ + 3 < -3 > \ + } \ + 3 < -3 > \ + } + + *enhance*frameType: sunken + *enhance*frameWidth: 1 + *enhance*BorderWidth: 0 + *enhance*Label.ShadowWidth: 0 + + *colorlist.width: 100 + *colorlist.height: 98 + *colordata.width: 100 + *colordata.height: 45 + *enhance*colordata.frameWidth: 0 + *contrastLabel.label: x + *contrastSlider.location: 0 0 100 17 + *brightnessLabel.label: x + *brightnessSlider.location: 0 0 100 17 + *invertButton.label: Invert + *optimizeButton.label: Optimize + + + ! --------------------- + ! BLINK/REGISTER + ! --------------------- + *blinkBox.label: Blink/Register + *blinkBox.location: 0 0 235 0 + *blinkBox.shrinkToFit: True + *blinkBox.outerOffset: 7 + *blinkBox*TextToggle.frameWidth: 1 + + *blink.layout: vertical { \ + space = (width blinkFramesLabel - width blinkRateLabel) \ + 3 < -3 > \ + horizontal { \ + 0 \ + blinkFramesLabel \ + 3 < +inf > \ + blinkFrame1 < -50% * > \ + blinkFrame2 < -50% * > \ + blinkFrame3 < -50% * > \ + blinkFrame4 < -50% * > \ + 4 < +inf > \ + blinkPanel < -50% * > \ + blinkReset \ + 2 \ + } \ + 5 < -5 > \ + horizontal { \ + $space \ + blinkRateLabel \ + 2 \ + BRframe < +inf * > \ + } \ + 5 < +inf -100% > \ + horizontal { \ + vertical { \ + 2 matchButton < +inf * > 4 < -4 > registerButton < +inf * > \ + } \ + 5 < -5 > \ + vertical { \ + 1 blinkButton < +inf * > 4 < -4 > autoregButton < +inf * > \ + } \ + } \ + } + + *BRlayout.layout: horizontal { \ + BRdecrease \ + BRtext < +inf -100% * > \ + BRincrease \ + } + + *blink.Label.borderWidth: 0 + *blink.Label.shadowWidth: 0 + *controlPanel*blink*internalWidth: 4 + *blink.TextToggle.location: 0 0 102 23 + *blink.TextToggle.frameWidth: 1 + *blink*TextToggle.highlightColor: yellow + *blink*TextToggle.offIcon: square0s + *blink*TextToggle.onIcon: square1s + *blink*TextToggle.outerOffset: 1 + *blink*Command.height: 27 + *blink*Arrow.width: 16 + *blink*Arrow.height: 25 + + + *blinkFramesLabel.label: Frames List: + *blinkFrame1.label: 1 + *blinkFrame2.label: 2 + *blinkFrame3.label: 3 + *blinkFrame4.label: 4 + *blinkPanel.label: x + *blinkPanel.width: 20 + *blinkReset.label: Reset + + *blinkRateLabel.label: Blink Rate: + *BRframe.frameType: sunken + *BRframe.frameWidth: 1 + *BRtext.width: 40 + *BRtext.height: 23 + *BRdecrease.direction: left + *BRincrease.direction: right + *registerButton.label: Register + *matchButton.label: Match LUTs + *blinkButton.label: Blink + *autoregButton.label: Auto-Register + + ! OPTIONS + ! --------------------- + *optionsBox.label: Options + *optionsBox.location: 0 0 220 0 + *optionsBox.shrinkToFit: False + *optionsBox.outerOffset: 7 + *optionsBox*offIcon: square0s + *optionsBox*onIcon: square1s + *optionsBox*selectionStyle: multi + *optionsBox*highlightColor: yellow + *optionsBox.TextToggle.location: 0 0 102 20 + *optionsBox.TextToggle.frameWidth: 0 + *optionsBox.TextToggle.highlightThickness: 0 + *optionsBox*alignment: left + + *pannerButton.label: Panner + *coordsBoxButton.label: Coords Box + *autoscaleButton.label: Autoscale + *antialiasButton.label: Antialias + *tileFramesButton.label: Tile Frames + *magnifierButton.label: Magnifier + *warningsButton.label: Warnings + *peakupButton.label: Centroid Peaks + *peakupButton.on: True + + ! CONTROL + ! ---------------------- + *controlBox.frameType: chiseled + *controlBox.frameWidth: 2 + *controlBox.outerOffset: 7 + *controlBox.innerOffset: 5 + *controlBox.height: 30 + + *control.layout: horizontal { \ + 1 \ + initializeButton < +inf * > \ + 5 < -5 > \ + normalizeButton < +inf * > \ + 80 < +inf -100% > \ + } + + *initializeButton.label: Initialize + *normalizeButton.label: Normalize +} + + +set Resources(print_panel) { \ + + !===================================== + ! Print Setup Panel resources. ! + !===================================== + *print_panel*TextToggle.alignment: left + *print_panel*Arrow.width: 16 + *print_panel*Arrow.height: 20 + *print_panel*TextToggle.frameWidth: 0 + *print_panel*TextToggle.height: 20 + *print_panel*Label.borderWidth: 0 + *print_panel*Label.shadowWidth: 0 + *print_panel*TextButton.width: 40 + *print_panel*TextButton.height: 25 + + *printLayout.borderWidth: 0 + *printLayout.layout: vertical { \ + -1 \ + printCmdGroup < +inf * > \ + -1 \ + optGroup < +inf -inf * +inf -inf > \ + -3 \ + cmdGroup < +inf * > \ + -1\ + } + + + ! Print Group resources. + !---------------------------------- + *printCmdGroup.borderWidth: 0 + *printCmdGroup.outerOffset: 5 + *printCmdGroup.label: + *printCmdGroup.location: 0 0 400 80 + *printCmdGroup*offIcon: diamond0s + *printCmdGroup*onIcon: diamond1s + *printCmdGroup*highlightColor: cyan + *printCmdGroup*Frame.frameType: sunken + *printCmdGroup*Frame.frameWidth: 1 + *printCmdGroup*Frame.width: 300 + *printCmdGroup*Label.justify: right + *printCmdGroup*Text*editType: edit + *printCmdGroup*Text*height: 22 + *printCmdGroup*TextToggle.width: 70 + *printCmdGroup*shadowWidth: 0 + *printCmdGroup*borderWidth: 0 + *printCmdLayout.borderWidth: 0 + *printCmdLayout.layout: horizontal { \ + labelLayout 5 inputLayout < +inf -inf * > \ + } + *labelLayout.borderWidth: 0 + *labelLayout.layout: vertical { 5 toLabel 7 printerLabel } + *printerLabel.label: Print Command: + *toLabel.label: Print To: + *toPrinter.label: Printer + *toPrinter.on: True + *toFile.label: File + + *inputLayout.borderWidth: 0 + *inputLayout.layout: horizontal { \ + 3 \ + vertical { \ + 5 \ + horizontal { 5 toPrinter 5 toFile 5 < +inf -inf > } \ + 5 \ + printcmdFrame < +inf -inf * > \ + 5 \ + } \ + 3 \ + } + *printcmd*string: lpr + *printcmd*height: 22 + *printcmd*Text*editType: edit + + + ! Main options groups layout resources. + !--------------------------------------- + *optGroup.frameWidth: 2 + *optGroup.frameType: chiseled + *optGroup.label: + *optGroup.location: 0 0 400 330 + *optGroup.outerOffset: 5 + *optGroup.innerOffset: 2 + *optLayout*borderWidth: 0 + *optLayout.layout: vertical { \ + -1 \ + horizontal { \ + vertical { \ + 5 \ + epsPageGroup < +inf -inf * > \ + optionsGroup < +inf -inf * +inf -inf > \ + -1 \ + } \ + vertical { \ + 5 \ + printColorGroup < +inf -inf * > \ + printerGroup < +inf -inf * > \ + -1 \ + } \ + -1 \ + } \ + 5 \ + horizontal { annOptsGroup < +inf * +inf > -1 } \ + -1 \ + } + + + ! Postscript Options group resources. + ! ----------------------------------- + *epsPageGroup.label: Postscript Options + *epsPageGroup.outerOffset: 7 + *epsPageGroup.innerOffset: 5 + *epsPageGroup.location: 0 0 250 150 + *epsPageGroup*offIcon: diamond0s + *epsPageGroup*onIcon: diamond1s + *epsPageGroup*highlightColor: cyan + *epsPage*Label.justify: left + *epsPage.layout: vertical { \ + -1 \ + epsOrientLabel 4 < -4 > \ + horizontal { 25 epsPortButton epsLandButton epsSquareButton -1 } \ + 4 \ + epsSizeLabel -1 \ + horizontal { \ + 25 epsLetterButton epsLegalButton epsA4Button epsB5Button -1 \ + } \ + 10 \ + horizontal { 5 epsScaleLabel 4 ScaleFrame < +inf -inf * > } \ + -1 \ + } + + + ! Page Layout resources. + ! ------------------------------- + *epsOrientLabel.label: Orientation: + *epsPortButton.label: Portrait + *epsPortButton.width: 65 + *epsLandButton.label: Landscape + *epsLandButton.width: 85 + *epsSquareButton.label: Square + *epsSquareButton.width: 70 + *epsSquareButton.sensitive: False + + *epsSizeLabel.label: Paper Size: + *epsLetterButton.label: Letter + *epsLetterButton.width: 60 + *epsLegalButton.label: Legal + *epsLegalButton.width: 60 + *epsA4Button.label: A4 + *epsA4Button.width: 50 + *epsB5Button.label: B5 + *epsB5Button.width: 50 + + ! Image scale box resources. + ! ------------------------------- + *epsScaleLabel.label: Output Image Scale: + *epsScaleLabel.justify: right + *ScaleFrame.frameType: sunken + *ScaleFrame.frameWidth: 1 + *ScaleFrame*shadowWidth: 0 + *ScaleLayout.location: 0 0 100 35 + *ScaleLayout.label: + *ScaleLayout.layout: horizontal { \ + SCdecrease SCtext < +inf -100% * > SCincrease \ + } + *SCdecrease.direction: left + *SCtext.width: 75 + *SCtext.height: 22 + *SCtext.label: 100 % + *SCincrease.direction: right + + + ! Miscellaneous print options box resources. + ! ------------------------------------ + *optionsGroup.outerOffset: 7 + *optionsGroup.innerOffset: 5 + *optionsGroup*onIcon: square1s + *optionsGroup*offIcon: square0s + *optionsGroup.label: Processing Options + *optionsGroup*TextToggle.width: 125 + *optionsGroup*TextToggle.highlightColor: yellow + *options.location: 0 0 250 60 + *options.frameWidth: 2 + *options.layout: horizontal { \ + 5 \ + vertical { -1 epsscaleButton 2 autorotateButton -1 } \ + 3 \ + vertical { -1 aspectButton 2 compressButton -1 } \ + -1 \ + } + *epsscaleButton.label: Auto Scale + *autorotateButton.label: Auto Rotate + *aspectButton.label: Max Aspect + *compressButton.label: RLE Compress + *compressButton.sensitive: False + + + ! Annotation options box resources. + ! ------------------------------------ + *annOptsGroup.outerOffset: 7 + *annOptsGroup.innerOffset: 5 + *annOptsGroup*onIcon: square1s + *annOptsGroup*offIcon: square0s + *annOptsGroup.label: Annotation Options + *annOptsGroup*TextToggle.width: 90 + *annOptsGroup*TextToggle.highlightColor: yellow + *annOptsGroup*Frame.frameType: sunken + *annOptsGroup*Frame.frameWidth: 1 + *annOptsGroup*Frame.width: 300 + *annOptsGroup*Text*editType: edit + *annOpts.frameWidth: 2 + *annOpts.location: 0 0 400 70 + *annOpts.layout: vertical { \ + 2 \ + horizontal { \ + 5 annotateButton 2 titleButton 2 bordersButton 2 colorbarButton 5 \ + } \ + 3 \ + horizontal { -1 titleLabel 2 titleFrame < +inf -inf * > -1 } \ + -1 \ + } + *annotateButton.label: \ Annotate + *titleButton.label: \ Title + *bordersButton.label: \ Borders + *colorbarButton.label: \ Colorbar + *titleLabel.label: Title String + *titleString*string: imtitle + *titleString*height: 23 + *titleString*Text*editType: edit + + + ! Output color box resources. + ! ------------------------------ + *printColorGroup.location: 0 0 150 90 + *printColorGroup.outerOffset: 7 + *printColorGroup.frameWidth: 2 + *printColorGroup*offIcon: diamond0s + *printColorGroup*onIcon: diamond1s + *printColorGroup*highlightColor: cyan + *printColorGroup.innerOffset: 5 + *printColorGroup.label: Output Color + *printColorGroup*TextToggle.width: 110 + *printColor.frameWidth: 2 + *printColor.location: 0 0 250 75 + *printColor.layout: horizontal { \ + 1 \ + vertical { -1 prGrayButton 2 prPseudoButton 2 prRGBButton -1 } \ + -1 \ + } + *prGrayButton.label: Grayscale + *prPseudoButton.label: PseudoColor + *prRGBButton.label: RGB + + ! Printer Selection. + ! -------------------------- + *printerGroup.label: Printers + *printerGroup.location: 0 0 110 130 + *printerGroup.shrinkToFit: True + *printerGroup.outerOffset: 7 + + *printers*Viewport.allowVert: True + *printers*Viewport.allowHoriz: False + *printers*Viewport.useRight: True + *printers*Viewport.resizeable: True + *printers*Scrollbar.width: 17 + *printers*Scrollbar.minimumThumb: 10 + *printers.layout: vertical { \ + 3 < -3 > \ + horizontal { \ + 2 < -2 > \ + printlistFrame < +inf -inf * +inff -inff > \ + 2 < -2 > \ + } \ + 3 < -3 > \ + } + + *printers*frameType: sunken + *printers*frameWidth: 1 + *printers*BorderWidth: 0 + *printers*Label.ShadowWidth: 0 + + *printlist.width: 100 + *printlist.height: 78 + + + ! Panel command resources. + ! ------------------------------ + *cmdGroup.frameType: chiseled + *cmdGroup.frameWidth: 2 + *cmdGroup.outerOffset: 5 + *cmdGroup.innerOffset: 5 + *cmdGroup.label: + *cmdGroup.location: 0 0 150 50 + *cmdLayout.borderWidth: 0 + *cmdLayout*Command.internalWidth: 12 + *cmdLayout.layout: horizontal { \ + 2 \ + okayPrint 1 < +inf > printStatus < +inf -inf * +inf -inf > \ + 2 \ + } + *cmdGroup*TextButton*location: 0 0 80 0 + *okayPrint.label: Print +} + + +set Resources(info_panel) { \ + + !-------------------- + ! Information Panel + !-------------------- + *infoLayout*borderWidth: 0 + *infoLayout*Frame.frameType: sunken + *infoLayout*Frame.frameWidth: 1 + *infoLayout*Command.internalWidth: 12 + *infoLayout*Text*editType: read + *infoLayout*Text*scrollVertical: whenNeeded + *infoLayout*Text*scrollHorizontal: whenNeeded + *infoLayout*Text*displayCaret: False + *infoLayout*Scrollbar.background: #c4c4c4 + *infoLayout*Scrollbar.width: 17 + *infoLayout*Scrollbar.height: 17 + + *infoText.height: 240 + *infoText*font: 6x13 + *infoLayout.layout: vertical { \ + infoBox < +inf -inf * > \ + } + + *infoBox.label: + *infoBox.outerOffset: 0 + *infoBox.innerOffset: 3 + *infoBoxL*TextToggle.frameType: raised + *infoBoxL*TextToggle.frameWidth: 1 + *infoBoxL*TextToggle*outerOffset: 0 + *infoBoxL*TextToggle*innerOffset: 1 + *infoBoxL*TextToggle.location: 0 0 100 25 + *infoBoxL*TextToggle*onIcon: square1s + *infoBoxL*TextToggle*offIcon: square0s + *infoBoxL*TextToggle*highlightColor: cyan + *infoBoxL.layout: vertical { \ + infoFrame < +inf -inf * +inf -inf > 1 \ + 4 \ + horizontal { \ + infoOptFr < +inf -inf * > 1 \ + infoOptSvr < +inf -inf * > 1 \ + infoOptClients < +inf -inf * > 1 \ + infoOptWCS < +inf -inf * > 1 \ + infoOptIsm < +inf -inf * > 1 \ + infoOptFB < +inf -inf * > \ + }\ + 2 \ + } + *infoOptFr.label: Frame + *infoOptFr.on: True + *infoOptSvr.label: Server + *infoOptWCS.label: WCS + *infoOptIsm.label: ISM + *infoOptClients.label: Clients + *infoOptFB.label: Imtoolrc +} + + + +set Resources(load_panel) { \ + + !------------------------------- + ! File Load Control Panel. + !------------------------------- + *filesLayout*borderWidth: 0 + *filesLayout*Group.shrinkToFit: True + *filesLayout*Group.frameType: chiseled + *filesLayout*Frame*frameType: sunken + *filesLayout*Frame*frameWidth: 1 + *filesLayout*TextToggle.frameWidth: 0 + *filesLayout*TextToggle.height: 28 + *filesLayout*TextToggle.alignment: left + *filesLayout*TextToggle.ledtMargin: 3 + *filesLayout*SimpleMenu.borderWidth: 1 + *filesLayout*SimpleMenu.borderColor: black + *filesLayout*SimpleMenu.foreground: White + *filesLayout*SimpleMenu.background: SteelBlue + *filesLayout*Label.borderWidth: 0 + *filesLayout*Label.shadowWidth: 0 + *filesLayout.layout: vertical { \ + imlistGroup < +inf -inf * > \ + 3 \ + horizontal { -5 imoptsGroup < +inf -inf * > -5 } \ + -1 \ + loadCmdGroup < +inf -inf * > \ + } + + *imlistGroup.label: + *imlistGroup.frameWidth: 2 + *imlistGroup.outerOffset: 2 + *imlistLayout*Label.shadowWidth: 0 + *imlistLayout*Label.justify: left + *imlistLayout*Command.width: 90 + *imlistLayout*Command.height: 23 + *imlistLayout*Command.shadowWidth: 1 + *imlistLayout*Viewport.allowVert: True + *imlistLayout*Viewport.allowHoriz True + *imlistLayout*Viewport.useRight: True + *imlistLayout*Viewport.useBottom: True + *imlistLayout*Viewport.resizeable: True + *imlistLayout*Scrollbar.height: 17 + *imlistLayout*Scrollbar.width: 17 + *imlistLayout.layout: vertical { \ + 3 \ + horizontal { \ + 3 \ + rootButton < +inf -inf * > 1 \ + homeButton < +inf -inf * > 1 \ + upButton < +inf -inf * > 1 \ + rescanButton < +inf -inf * > \ + 3 \ + imtemplateLabel 3 imtemplateFrame < +inf -inf * > \ + 3 \ + } \ + 5 \ + horizontal { 1 imlistLabel < +inf -inf * > 1 } \ + imlistFrame < +inf -inf * +inf -inf > \ + 3 \ + dirLabel < +inf -inf * > \ + 3 \ + horizontal { 5 fnameLabel 5 filnamFrame < +inf -inf * > } \ + 3 \ + } + *imtemplateLabel.label: Filter: + *imtemplateText*editType: edit + *imtemplateText*height: 23 + *imtemplateText*font: 7x13 + !*imageList.width: 100 + *imageList*height: 140 + *imageList.shadeSurplus: False + *imageList.defaultColumns: 3 + *imageList.font: 7x13 + *imlistView.resizeable: True + *imlistLabel.height: 0 + *imlistLabel.label: xxx + *imlistLabel.justify: left + *imlistLabel.font: *lucida-bold-r*10* + *upButton.label: Up + *rootButton.label: Root + *homeButton.label: Home + *rescanButton.label: Rescan + *dirLabel.label: \ \ Directory: + *dirLabel.alignment: left + *fnameLabel.label: Load File: + *fnameText*editType: edit + *fnameText.height: 22 + + *imoptsGroup.label: Options + *imoptsGroup.frameWidth: 2 + *imoptsGroup.outerOffset: 7 + *imoptsGroup*offIcon: square0s + *imoptsGroup*onIcon: square1s + *imoptsGroup*highlightColor: yellow + *imoptsLayout*Label.shadowWidth: 0 + *imoptsLayout*Label.justify: left + *imoptsLayout.layout: vertical { \ + 3 \ + horizontal { \ + 3 \ + autoload 6 grayscale \ + 3 < +inf > \ + browseHdrs \ + 3 < +inf > \ + frameLabel 2 frameFrame \ + 3 \ + } \ + 6 \ + horizontal { \ + 3 \ + zscale 6 zrange \ + 3 \ + z1Label z1Frame < +inf * > 2 \ + z2Label z2Frame < +inf * > 2 \ + nsampLabel nsampFrame < +inf * > \ + 3 \ + } \ + 3 \ + } + *grayscale.label: Auto Grayscale + *grayscale.location: 0 0 100 22 + *autoload.label: Auto Load + *autoload.location: 0 0 80 22 + *autoload.on: True + *browseHdrs.label: List Image Headers + *browseHdrs.location: 0 0 120 22 + *browseHdrs.on: False + *zscale.label: Zscale + *zscale.location: 0 0 60 22 + *zrange.label: Zrange + *zrange.location: 0 0 60 22 + *z1Label.label: z1 + *z1Value*width: 60 + *z1Value*height: 22 + *z1Value*editType: edit + *z2Label.label: z2 + *z2Value*width: 60 + *z2Value*height: 22 + *z2Value*editType: edit + *nsampLabel.label: Nsample + *nsampValue*width: 60 + *nsampValue*height: 22 + *nsampValue*editType: edit + *frameLabel.label: Frame:\ + *frameFrame.width: 50 + *frameFrame.resize: False + *frameFrame.label: Current + *frameFrame.font: 6x13 + *frameFrame.menuName: loadFrames + + + *loadCmdGroup.label: + *loadCmdGroup*frameWidth: 2 + *loadCmdGroup*outerOffset: 5 + *loadCmdGroup.outerOffset: 2 + *loadCmdGroup*innerOffset: 5 + *loadCmdGroup.frameType: sunken + *loadCmdGroup.label: + *loadCmdGroup.location: 0 0 400 45 + *loadCmdLayout*Command.internalWidth: 12 + *loadCmdLayout.layout: horizontal { \ + 2 \ + filesLoadButton \ + 1 < +inf > \ + filesStatus \ + 2 \ + } + *filesLoadButton.label: Load + *filesStatus.label: +} + + + +set Resources(save_panel) { \ + + !===================================== + ! Save Setup Panel resources. ! + !===================================== + *save_panel*TextToggle.alignment: left + *save_panel*TextToggle.frameWidth: 0 + *save_panel*TextToggle.height: 20 + *save_panel*Label.borderWidth: 0 + *save_panel*Label.shadowWidth: 0 + *save_panel*TextButton.width: 80 + + *saveLayout.borderWidth: 0 + *saveLayout.layout: vertical { \ + saveNameGroup < +inf * > \ + saveOptGroup < +inf -inf * > -3 \ + saveCmdGroup < +inf * > \ + } + + ! Save Name Group resources. + !---------------------------------- + *saveNameGroup.borderWidth: 0 + *saveNameGroup.outerOffset: 5 + *saveNameGroup.label: + *saveNameGroup.location: 0 0 400 50 + *saveNameGroup*offIcon: diamond0s + *saveNameGroup*onIcon: diamond1s + *saveNameGroup*highlightColor: cyan + *saveNameGroup*Frame.frameType: sunken + *saveNameGroup*Frame.frameWidth: 1 + *saveNameGroup*Label.justify: right + *saveNameGroup*Text*editType: edit + *saveNameGroup*shadowWidth: 0 + *saveNameGroup*borderWidth: 0 + *saveNameLayout.borderWidth: 0 + *saveNameLayout.layout: vertical { \ + 2 \ + horizontal { 5 saveLabel 5 fnameFrame < +inf -inf * > 5 } \ + 2 \ + } + *saveLabel.label: File Name: + *saveFile.height: 22 + + ! Main options groups layout resources. + !--------------------------------------- + *saveOptGroup.frameWidth: 2 + *saveOptGroup.frameType: chiseled + *saveOptGroup.label: + *saveOptGroup.location: 0 0 400 140 + *saveOptGroup.outerOffset: 5 + *saveOptGroup.innerOffset: 0 + *saveOptLayout*borderWidth: 0 + *saveOptLayout.layout: horizontal { \ + -1 \ + vertical { 5 < -5 > fmtGroup < +inf * +inf > -1 } \ + -1 \ + vertical { \ + 10 < -10 > \ + saveDataBox < +inff -inff * +inff -inff > \ + 5 < -5 > \ + } \ + -1 \ + vertical { 5 < -5 > saveColorGroup < +inf * +inf > -1 } \ + -1 \ + } + + ! Output color box resources. + ! ------------------------------ + *saveColorGroup.location: 0 0 140 120 + *saveColorGroup.outerOffset: 7 + *saveColorGroup.frameWidth: 2 + *saveColorGroup*offIcon: diamond0s + *saveColorGroup*onIcon: diamond1s + *saveColorGroup*highlightColor: cyan + *saveColorGroup.innerOffset: 5 + *saveColorGroup.label: Output Color + *saveColorGroup*TextToggle.width: 110 + *saveColor.frameWidth: 2 + *saveColor.layout: horizontal { \ + 3 \ + vertical { 5 svGrayButton 2 svPseudoButton 2 svRGBButton -1 } \ + -1 \ + } + *svGrayButton.label: Grayscale + *svPseudoButton.label: PseudoColor + *svRGBButton.label: RGB + + *saveDataBox.frameType: sunken + *saveDataBox.frameWidth: 1 + + + ! Output format box resources. + ! ----------------------------------- + *fmtGroup.location: 0 0 140 120 + *fmtGroup.outerOffset: 7 + *fmtGroup.frameWidth: 2 + *fmtGroup*offIcon: diamond0s + *fmtGroup*onIcon: diamond1s + *fmtGroup*TextToggle.width: 55 + *fmtGroup*highlightColor: cyan + *fmtGroup.label: File Format + *formats.layout: horizontal { \ + 3 \ + vertical { 5 fitsButton 2 gifButton 2 tiffButton 2 rawButton 1 } \ + 2 < -2 > \ + vertical { 5 epsButton 2 rasButton 2 x11Button 2 jpegButton 1 } \ + -1 \ + } + *rasButton.label: RAS + *gifButton.label: GIF + *jpegButton.label: JPEG + *tiffButton.label: TIFF + *fitsButton.label: FITS + *x11Button.label: X11 + *epsButton.label: EPS + *rawButton.label: Raw + + ! Change the sensitivity once these formats are implemented. ! + !------------------------------------------------------------- + *jpegButton.sensitive: False + *x11Button.sensitive: False + *rawButton.sensitive: False + + + ! Panel command resources. + ! ------------------------------ + *saveCmdLayout.borderWidth: 0 + *saveCmdGroup.frameType: chiseled + *saveCmdGroup.frameWidth: 2 + *saveCmdGroup.outerOffset: 5 + *saveCmdGroup.innerOffset: 5 + *saveCmdGroup.label: + *saveCmdGroup.location: 0 0 400 50 + *saveCmdLayout*Command.internalWidth: 12 + *saveCmdLayout.layout: horizontal { \ + 2 \ + okaySave 1 < +inf -1 > saveStatus < +inf -inf * > \ + 2 \ + } + *okaySave.label: Save +} + + +set Resources(tile_panel) { \ + + *tileOpts.frameType: chiseled + *tileOpts.frameWidth: 2 + *tileOpts.outerOffset: 5 + *tileOpts.innerOffset: 7 + *tileOpts*shrinkToFit: True + *tileOpts*borderWidth: 0 + + *toptLayout.layout: vertical { \ + horizontal { -6 tFramesG < +inf -inf * > -6 } \ + horizontal { \ + -1 \ + horizontal { -6 tileMode < * +inf -inf > -6 } \ + vertical { \ + horizontal { -3 userOrientG < +inf -inf * > -3 } \ + horizontal { -3 fillStyle < +inf -inf * > -3 } \ + horizontal { -3 tileLabel < +inf -inf * > -3 } \ + -7 \ + horizontal { -3 geomFrame < +inf -inf * > -3 } \ + } \ + -1 \ + } \ + -4 \ + } + *tileMode.label: Tile Mode + *tileMode.outerOffset: 7 + *tileMode.innerOffset: 5 + *tileMode*location: 0 0 150 20 + *tileMode*TextToggle.outerOffset: 2 + *tileMode*TextToggle.innerOffset: 1 + *tileMode*TextToggle.frameWidth: 0 + *tileMode*TextToggle.leftMargin: 10 + *tileMode*TextToggle.rightMargin: 20 + *tileMode*TextToggle.onIcon: diamond1s + *tileMode*TextToggle.offIcon: diamond0s + *tileMode*TextToggle.highlightColor: yellow + + *tileDisabled.label: Disabled + *tileManual.label: Manual + *tileBest.label: Best + *tileSquare.label: Square + *tileHorizontal.label: Horizontal + *tileVertical.label: Vertical + *tileRow.label: One Row + *tileCol.label: One Column + + *fillStyle.label: Fill Style + *fillStyle.location: 0 0 160 30 + *fillStyle.outerOffset: 7 + *fillStyle.innerOffset: 5 + *fillStyle.rows: 1 + *fillStyle*selectionStyle: multi + *fillStyle*outerOffset: 0 + *fillStyle*innerOffset: 1 + *fillStyle*leftMargin: 7 + *fillStyle*onIcon: square1s + *fillStyle*offIcon: square0s + *fillStyle*highlightColor: yellow + *fillStyle.TextToggle.frameWidth: 0 + *fillStyle.TextToggle.location: 0 0 85 23 + *byCols.label: Fill by Columns + *bottomUp.label: Fill from Bottom + + *tileLabel.label: Tile Labels + *tileLabel.location: 0 0 175 30 + *tileLabel.outerOffset: 7 + *tileLabel.innerOffset: 5 + *tileLabel.rows: 1 + *tileLabel*selection: -1 + *tileLabel*outerOffset: 0 + *tileLabel*innerOffset: 1 + *tileLabel*leftMargin: 7 + *tileLabel*onIcon: square1s + *tileLabel*offIcon: square0s + *tileLabel*highlightColor: yellow + *tileLabel.TextToggle.frameWidth: 0 + *tileLabel.TextToggle.location: 0 0 85 23 + *labelFrames.label: Frameno + *labelImname.label: Img Name + *labelTitles.label: Img Title + + *geomFrame.frameWidth: 0 + *geomFrame.frameType: sunken + *geomFrame.outerOffset: 7 + *geomFrame.innerOffset: 4 + *tileGeometry.width: 220 + *tileGeometry.height; 37 + *tileGeometry.background: #c4c4c4 + *tileGeometry.font: 7x13bold + *tileGeometry.label: Tile Geometry: 1 x 2 + + *userOrientG.label: Manual Configuration + *userOrientG.height: 90 + *userOrientG.width: 220 + *userOrientG.outerOffset: 7 + *userOrientG.innerOffset: 5 + *userOrientG.shrinkToFit: True + *userOrientG*Frame.frameWidth: 1 + *userOrientG*Frame.frameType: sunken + *userOrientG*Text.height: 21 + *userOrientG*Text*editType: edit + *userOrientL.borderWidth: 0 + *userOrientL.layout: vertical { \ + 1 \ + horizontal { 18 nrowLab < +50% -inf * > nrFrame < +inf -inf * > 5 } \ + 1 \ + horizontal { ncolLab < +50% -inf * > ncFrame < +inf -inf * > 5 } \ + } + *nrowLab.justify: right + *ncolLab.justify: right + + *nrLayout.layout: horizontal {nrdecrease nrtext < +inf -inf * > nrincrease} + *nrdecrease.direction: left + *nrincrease.direction: right + *nrowLab.label: Tile Rows: + *nrtext.background: #adadad + *nrtext.justify: center + *nrtext.font: 7x13bold + *nrtext.label: 1 + + *ncLayout.layout: horizontal {ncdecrease nctext < +inf -inf * > ncincrease} + *ncdecrease.direction: left + *ncincrease.direction: right + *ncolLab.label: Tile Columns: + *nctext.background: #adadad + *nctext.justify: center + *nctext.font: 7x13bold + *nctext.label: 2 + + *tFramesG.label: Tile Frames + *tFramesG.outerOffset: 7 + *tFramesG.innerOffset: 7 + *tFrames.borderWidth: 0 + *tFrames*Toggle.height: 17 + *tFrames.layout: horizontal { \ + tAll \ + 2 \ + tFrame1 tFrame2 tFrame3 tFrame4 tFrame5 \ + tFrame6 tFrame7 tFrame8 tFrame9 tFrame10 \ + tFrame11 tFrame12 tFrame13 tFrame14 tFrame15 tFrame16 \ + 2 \ + tNone \ + } + *tAll.label: All\ + *tNone.label: None +} + + +set Resources(wcs_panel) { \ + + !-------------------- + ! WCS Readout Panel + !-------------------- + *wcsGroup*TextToggle.offIcon: square0s + *wcsGroup*TextToggle.onIcon: square1s + + !*wcsLayout*TextToggle.location: 0 0 160 23 + *wcsLayout*TextToggle.height: 23 + *wcsLayout*TextToggle.outerOffset: 0 + *wcsLayout*Layout.borderWidth: 0 + *wcsLayout.borderWidth: 0 + *wcsLayout.layout: vertical { \ + 0 < +0 -0 > \ + wcsGroup < +inf -inf * > \ + 5 \ + horizontal { -1 wcsOptGroup < +inf -inf * > -1 } \ + -2 \ + } + + *wcsOptGroup.label: + *wcsOptGroup.outerOffset: 0 + *wcsOptGroup.innerOffset: 5 + *wcsOptGroup.frameType: chiseled + *wcsOptGroup.frameWidth: 0 + *wcsOptLayout.layout: vertical { \ + horizontal { -9 wcsCoords < +inf -inf * > -9 } \ + -3 \ + horizontal { -5 wcsOpts < +inf -inf * > -5 } \ + horizontal { -5 wcsIsmGroup < +inf -inf * > -5 } \ + 1 \ + } + + *wcsOpts.label: + *wcsOpts.width: 265 + *wcsOpts.height: 40 + *wcsOpts.outerOffset: 3 + *wcsOpts.innerOffset: 3 + *woLayout*TextToggle.frameWidth: 0 + *woLayout*TextToggle.onIcon: square1s + *woLayout*TextToggle.offIcon: square0s + *woLayout*TextToggle.highlightColor: cyan + *woLayout*TextToggle.alignment: left + *woLayout*TextToggle.leftMargin: 5 + *woLayout.layout: horizontal { \ + 3 \ + woptLabels < +inf -inf * > 2 \ + woptTitles < +inf -inf * > 2 \ + woptFBinfo < +inf -inf * > 2 \ + woptBPM < +inf -inf * > \ + 3 \ + } + *woptLabels.label: WCS Labels + *woptLabels.on: True + *woptTitles.label: Image Titles + *woptTitles.on: True + *woptFBinfo.label: Frame Buffer Info + *woptFBinfo.on: True + *woptBPM.label: BPM Data + *woptBPM.on: False + *woptLabels.location: 0 0 150 21 + *woptTitles.location: 0 0 150 21 + *woptFBinfo.location: 0 0 175 21 + *woptBPM.location: 0 0 120 21 + + + *wcsCoords.label: Readout Values + *wcsCoords.width: 265 + *wcsCoords.height: 135 + *wcsCoords.outerOffset: 7 + *wcsCoords.innerOffset: 3 + *wcLayout*TextToggle.offIcon: diamond0s + *wcLayout*TextToggle.onIcon: diamond1s + *wcLayout*TextToggle.highlightColor: yellow2 + *wcLayout*TextToggle.shrinkToFit: True + *wcLayout*TextToggle.frameWidth: 0 + *wcLayout*TextToggle.label: + *wcLayout*TextToggle.on: True + *wcLayout*Label.justify: right + *wcLayout*Label.font: 7x13bold + *wcLayout*SimpleMenu.borderColor: black + *wcLayout*SimpleMenu.borderWidth: 1 + *wcLayout*SimpleMenu.foreground: White + *wcLayout*SimpleMenu.background: SteelBlue + *wcLayout*MenuButton.shadowWidth: 1 + *wcLayout*MenuButton.resize: False + *wcLayout.layout: vertical {\ + 1 \ + horizontal { 20 < -20 > wcTitle < +inf -inf * > 20 < -20 > }\ + 1 \ + horizontal { 5 wcLine < +inf -inf * > 5 } \ + 5 \ + horizontal { \ + 10 \ + vertical { 2 wlWcs1 2 wlWcs2 2 wlWcs3 2 wlWcs4 2 } 5 \ + vertical { 1 sysWcs1 1 sysWcs2 1 sysWcs3 1 sysWcs4 1 } 5 \ + vertical { 1 fmtWcs1 1 fmtWcs2 1 fmtWcs3 1 fmtWcs4 1 } 20 \ + vertical { 1 wpWcs1 3 wpWcs2 3 wpWcs3 3 wpWcs4 3 } 20 \ + vertical { 1 wiWcs1 3 wiWcs2 3 wiWcs3 3 wiWcs4 3 } 15 \ + } \ + 3 \ + } + *wcTitle.label: Type\ \ \ \ \ \ \ \ \ \ Format\ \ \ \ \ \ Panel\ ImgWin + + *wcLine.height: 2 + *wcLine.frameWidth: 2 + *wcLine.frameType: ledged + + *wlWcs1.label: First WCS + *wlWcs2.label: Second WCS + *wlWcs3.label: Third WCS + *wlWcs4.label: Fourth WCS + *sysWcs1.label: \ Image Display\ + *sysWcs1.menuName: sysMenu1 + *sysWcs2.label: None + *sysWcs2.menuName: sysMenu2 + *sysWcs3.label: None + *sysWcs3.menuName: sysMenu3 + *sysWcs4.label: None + *sysWcs4.menuName: sysMenu4 + *fmtWcs1.label: \ Sexigesimal\ + *fmtWcs1.menuName: fmtMenu1 + *fmtWcs2.label: None + *fmtWcs2.menuName: fmtMenu2 + *fmtWcs3.label: None + *fmtWcs3.menuName: fmtMenu3 + *fmtWcs4.label: None + *fmtWcs4.menuName: fmtMenu4 + + *editMenu fmtWcsMenu$i fmtWcs$i $items + + *wcsIsmGroup.label: + *wcsIsmGroup.width: 395 + *wcsIsmGroup.height: 50 + *wcsIsmGroup.outerOffset: 3 + *wcsIsmGroup.innerOffset: 5 + *wcsIsmGroup*borderWidth: 0 + *wcsIsmLayout.layout: horizontal { \ + wcsIsmLabel 1 wcsIsmFrame < +inf -inf * > 3 wcsIsmInit 1 \ + } + *wcsIsmLabel.label: ISM Command + *wcsIsmFrame.frameType: sunken + *wcsIsmFrame.frameWidth: 1 + *wcsIsmFrame.outerOffset: 1 + *wcsIsmFrame*height: 23 + *wcsIsmCmd*editType: edit + *wcsIsmCmd.displayCaret: True + *wcsIsmInit.label: Initialize + *wcsIsmInit.internalWidth: 7 + + *wcsBox*borderWidth: 0 + *wcsBox*TextToggle.frameType: raised + *wcsBox*TextToggle.frameWidth: 1 + *wcsBox*TextToggle.leftMargin: 2 + *wcsBox*borderWidth: 0 + *wcsBox.layout: vertical { \ + wcsFrame < +inf -inf * > \ + 2 \ + horizontal { \ + 2 \ + ismToggle < +inf -inf * > 2 \ + pixelTable < +inf -inf * > 2 \ + imageHeader < +inf -inf * > 2 \ + compass < +inf -inf * > 2 \ + wcsOptions < +inf -inf * > \ + 2 \ + } \ + } + *ismToggle.label: ISM Mod + *ismToggle.label: WCS/Pix + *pixelTable.label: Pix Table + *imageHeader.label: Header + *imageHeader.sensitive: False + *compass.label: Compass + *wcsOptions.label: Options + + *wcsGroup.label: + *wcsGroup.outerOffset: 0 + *wcsGroup.innerOffset: 5 + *wcsGroup.frameType: chiseled + *wcsGroup.frameWidth: 2 + *wcsGroup*Text*width: 260 + *wcsGroup*Text*height: 17 + *wcsGroup*Text*font: 7x13 + *wcsGroup*Text*displayCaret: False + *wcsGroup*Text*editType: read + *wcsGroup*Text*background: black + *wcsGroup*Text*foreground: yellow2 + *wcsGroup*TextToggle.highlightColor: cyan + *wcsFrame.frameType: sunken + *wcsFrame.frameWidth: 1 + *wcsText*background: yellow4 + *wcsText.layout: vertical { \ + wtName < +inf -inf * > -3 \ + wtTitle < +inf -inf * > -3 \ + wtFBCfg < +inf -inf * > \ + 1 < -1 > \ + wtWcs1 < +inf -inf * > -3 \ + wtWcs2 < +inf -inf * > -3 \ + wtWcs3 < +inf -inf * > -3 \ + wtWcs4 < +inf -inf * > \ + 1 < -1 > \ + horizontal { \ + wtIPixval < +inf -inf * +inf > 1 \ + wtSPixval < +inf -inf * +inf > 1 \ + wtBPixval < +inf -inf * +inf > \ + } \ + } +} + + +set Resources(blink_panel) { \ + + *blink_panel.geometry: 425x200 + *blink_panel.title: Blink/Register Frames + + *brMenuBar*Command.internalHeight: 4 + *brMenuBar*Command.internalWidth: 12 + *brMenuBar*Command.height: 27 + *brMenuBar*borderWidth: 0 + + *brMenuBar*Label.font: 7x13bold + *brLayout*Command.font: -*-helvetica-medium-r-normal-*-12-*-iso8859-1 + *brRegButton.font: -*-helvetica-medium-r-normal-*-12-*-iso8859-1 + *brReset.font: -*-helvetica-medium-r-normal-*-12-*-iso8859-1 + *brMatchButton.font: -*-helvetica-medium-r-normal-*-12-*-iso8859-1 + *brBlinkButton.font: -*-helvetica-medium-r-normal-*-12-*-iso8859-1 + *brAregButton.font: -*-helvetica-medium-r-normal-*-12-*-iso8859-1 + + + *brMenuBar.layout: vertical { \ + 5 < -5 > \ + horizontal { 10 < +inf -10> brClose 5 } \ + 5 < -5 > \ + } + *brClose.label: Dismiss + + *brMenuFrame.frameType: raised + *brMenuFrame.frameWidth: 2 + *bpLayout.layout: vertical { \ + brMenuFrame < +inf -inf * > \ + 1 < -1 > \ + brFrame < +inf -inf * +inf -inf > \ + } + + *brFrame.frameType: chiseled + *brFrame.frameWidth: 2 + *brFrame.outerOffset: 4 + *brFrame.innerOffset: 4 + + *brLayout.borderWidth: 0 + *brLayout.layout: vertical { \ + 3 < -3 > \ + horizontal { -3 brFramesG < +inf -inf * > -3 } \ + -5 \ + horizontal { -3 brCmdG < +inf -inf * +inf -inf > -3 } \ + -5 \ + } + + *brCmdG.label: + *brCmdG.outerOffset: 7 + *brCmdG.innerOffset: 7 + *brCmdG*borderWidth: 0 + *brCmd.layout: horizontal { \ + 2 \ + vertical { \ + 2 \ + horizontal { \ + 2 \ + brRateLabel \ + 2 \ + brBRframe < +inf -inf * >\ + 4 \ + brReset \ + 2 \ + } \ + 8 < -8 > \ + horizontal { \ + 4 \ + brMatchButton < +inf -inf * > \ + 5 < -5 > \ + brRegButton < +inf -inf * > \ + 2 \ + } \ + 1 < +inf > \ + } \ + 10 \ + vertical { \ + 2 \ + brBlinkButton < +inf * > \ + 10 < -10 > \ + brAregButton < +inf * > \ + 1 < +inf > \ + } \ + 2 \ + } + + *brFramesG.label: Frames List + *brFramesG.outerOffset: 7 + *brFramesG.innerOffset: 7 + *brFramesG*SimpleMenu.borderColor: black + *brFramesG*SimpleMenu.borderWidth: 1 + *brFramesG*SimpleMenu.foreground: White + *brFramesG*SimpleMenu.background: SteelBlue + + *brFrames.borderWidth: 0 + *brFrames.layout: horizontal { \ + 5 < +inf > \ + brFrame1 < +inf * > 1 \ + brFrame2 < +inf * > 1 \ + brFrame3 < +inf * > 1 \ + brFrame4 < +inf * > 1 \ + brFrame5 < +inf * > 1 \ + brFrame6 < +inf * > 1 \ + brFrame7 < +inf * > 1 \ + brFrame8 < +inf * > 1 \ + brFrame9 < +inf * > 1 \ + brFrame10 < +inf * > 1 \ + brFrame11 < +inf * > 1 \ + brFrame12 < +inf * > 1 \ + brFrame13 < +inf * > 1 \ + brFrame14 < +inf * > 1 \ + brFrame15 < +inf * > 1 \ + brFrame16 < +inf * > \ + 5 < +inf > \ + } + + *brBRlayout.layout: horizontal { \ + brBRdecrease \ + brBRtext < +inf -100% * > \ + brBRincrease \ + } + + *blink_panel*TextToggle.location: 0 0 110 23 + *blink_panel*TextToggle.frameWidth: 1 + *blink_panel*TextToggle.highlightColor: yellow + *blink_panel*TextToggle.offIcon: square0s + *blink_panel*TextToggle.onIcon: square1s + *blink_panel*TextToggle.outerOffset: 0 + *blink_panel*TextToggle.innerOffset: 2 + *blink_panel*Command.height: 23 + *blink_panel*Arrow.width: 16 + *blink_panel*Arrow.height: 20 + + + *brFramesLabel.label: Frames: + *brFrame1.menuName: frame1Menu + *brFrame2.menuName: frame2Menu + *brFrame3.menuName: frame3Menu + *brFrame4.menuName: frame4Menu + *brFrame5.menuName: frame5Menu + *brFrame6.menuName: frame6Menu + *brFrame7.menuName: frame7Menu + *brFrame8.menuName: frame8Menu + *brFrame9.menuName: frame9Menu + *brFrame10.menuName: frame10Menu + *brFrame11.menuName: frame11Menu + *brFrame12.menuName: frame12Menu + *brFrame13.menuName: frame13Menu + *brFrame14.menuName: frame14Menu + *brFrame15.menuName: frame15Menu + *brFrame16.menuName: frame16Menu + *brReset.label: Reset + + *brRateLabel.label: Rate: + *brBRframe.frameType: sunken + *brBRframe.frameWidth: 1 + *brBRtext.width: 40 + *brBRtext.height: 23 + *brBRdecrease.direction: left + *brBRincrease.direction: right + *brRegButton.label: Register + *brMatchButton.label: Match LUTs + *brBlinkButton.label: Blink + *brAregButton.label: Auto-Register +} + + +set Resources(hdr_panel) { \ + + *hdr_panel.geometry: 550x600 + *hdr_panel.title: Image Header + + *hdr_panel*SimpleMenu.borderColor: black + *hdr_panel*SimpleMenu.borderWidth: 1 + *hdr_panel*SimpleMenu.foreground: White + *hdr_panel*SimpleMenu.background: SteelBlue + + *hdrMenuFrame.frameType: raised + *hdrMenuFrame.frameWidth: 2 + *hdrLayout.layout: vertical { \ + hdrMenuFrame < +inf -inf * > \ + hdrObjGroup < +inf -inf * > \ + hdrTabFrame < +inf -inf * +inf -inf> \ + } + + *hdrMenuBar*borderWidth: 0 + *hdrMenuBar*Command.internalHeight: 5 + *hdrMenuBar*Command.internalWidth: 12 + *hdrMenuBar.layout: vertical { \ + 5 < -5 > \ + horizontal { 10 < +inf -10> hdrClose 7 } \ + 5 < -5 > \ + } + *hdrClose.label: Dismiss + + *hdrObjGroup.label: + *hdrObjGroup.outerOffset: 7 + *hdrObjGroup.innerOffset: 4 + *hdrObjLayout.borderWidth: 0 + *hdrObjLayout.layout: vertical { \ + horizontal { hdrObjLabel 2 hdrObjMenu < +inf -inf * > 2 } \ + } + *hdrObjLabel.label: Image Name: + *hdrObjMenu.label: + *hdrObjMenu.justify: left + *hdrObjMenu.font: 7x13 + *hdrObjMenu.menuName: objMenu + *hdrObjMenu.internalWidth: 5 + *hdrObjMenu.internalHeight: 1 + *hdrObjMenu.shadowWidth: 1 + + *hdrHdrGroup.tabLabel: Image Header + *hdrHdrGroup.label: + *hdrHdrGroup.outerOffset: 7 + *hdrHdrGroup.innerOffset: 5 + *hdrHdrLayout.borderWidth: 0 + *hdrHdrLayout.layout: vertical { \ + horizontal { \ + hdrFilter 2 hFindFrame < +inf -inf * > 2 hdrFind 1 hdrClear \ + } \ + 5 \ + hdrText < +inf -inf * +inf -inf > \ + } + *hFindEntry*editType: edit + *hFindEntry*font: 7x13 + *hFindEntry*displayCaret: True + *hFindEntry*width: 150 + *hFindFrame.frameWidth: 1 + *hFindFrame*borderWidth: 0 + *hFindFrame.frameType: sunken + *hFindFrame.width: 150 + *hFindFrame.height: 23 + *hdrFilter.label: Keyword Filter + *hdrFind.label: Search + *hdrClear.label: Clear + + ! Resources if the header text widget is AsciiText +! *hdrText*scrollVertical: Always +! *hdrText*scrollHorizontal: Always +! *hdrText*editType: edit +! *hdrText*font: 7x13 +! *hdrText*background: #c4c4c4 +! *hdrText*displayCaret: False +! *hdrText*bottomMargin: 10 +! *hdrText*Scrollbar.width: 15 +! *hdrText*Scrollbar.height: 15 + + ! Resources if the header text widget is HTML + *hdrText.width: 600 + *hdrText.height: 500 + *hdrText.anchorUnderlines: 1 + *hdrText.visitedAnchorUnderlines: 1 + *hdrText.verticalScrollOnRight: True + *hdrText.plainFont: 7x13 + *hdrText.marginWidth: 5 + *hdrText.marginHeight: 5 + + + *hdrWcsGroup.tabLabel: Image WCS Info + *hdrWcsGroup.label: + *hdrWcsGroup.outerOffset: 5 + *hdrWcsGroup.innerOffset: 5 + *hdrWcsGroup*Text*scrollVertical: whenNeeded + *hdrWcsGroup*Text*scrollHorizontal: whenNeeded + *hdrWcsGroup*Text*editType: edit + *hdrWcsGroup*Text*displayCaret: False + *hdrWcsGroup*Text*borderWidth: 0 + *hdrWcsGroup*Text*editType: edit + *hdrWcsGroup*Text*font: 7x13 + *hdrWcsGroup*Text*Scrollbar.width: 15 + *hdrWcsGroup*Text*Scrollbar.height: 15 + *hdrWcsLayout.borderWidth: 0 + *hdrWcsLayout.layout: vertical { \ + 2 < -2 > \ + hdrInfoGroup < +inf -inf * > \ + 2 < -2 > \ + hdrKeywGroup < +inf -inf * +inf -inf > \ + -4 \ + } + *hdrInfoGroup.label: Basic WCS Information + *hdrInfoGroup.outerOffset: 7 + *hdrInfoGroup.innerOffset: 0 + *hdrIGFrame.frameType: sunken + *hdrIGFrame.frameWidth: 1 + *hdrIGText.height: 130 +! *hdrIGText*background: black +! *hdrIGText*foreground: yellow2 + *hdrIGText*background: #adadad + *hdrIGText*foreground: black + *hdrWcsGroup*hdrIGText*scrollVertical: never + *hdrWcsGroup*hdrIGText*scrollHorizontal: never + *hdrWcsGroup*hdrIGText*font: 7x13 + *hdrKeywGroup.label: WCS Header Keywords + *hdrKeywGroup.outerOffset: 7 + *hdrKeywGroup.innerOffset: 5 + *hdrKGFrame.frameType: sunken + *hdrKGFrame.frameWidth: 1 + *hdrKGText*background: #c4c4c4 + *hdrKGText*bottomMargin: 10 + + *hdrIGText*background: #c4c4c4 + *hdrIGFrame.frameWidth: 0 +} + + +set Resources(pixel_table) { \ + + *pixel_panel.title: Image Pixel Table + *pixel_panel*SimpleMenu.borderWidth: 1 + *pixel_panel*SimpleMenu.borderColor: black + *pixel_panel*SimpleMenu.foreground: White + *pixel_panel*SimpleMenu.background: SteelBlue + + *pixtabMenuBar*borderWidth: 0 + *pixtabMenuBar*Command.internalHeight: 4 + *pixtabMenuBar*Command.internalWidth: 12 + *pixtabMenuBar.layout: vertical { \ + 5 \ + horizontal { \ + 5 \ + pixtabSize 10 < +inf -10> pixtabHelp 5 pixtabClose \ + 7 \ + } \ + 5 \ + } + *pixtabSize.label: Size + *pixtabSize.menuName: pixtabMenu + *pixtabHelp.label: Help + *pixtabHelp.sensitive: False + *pixtabClose.label: Dismiss + + *pixtabMenuFrame.frameType: raised + *pixtabMenuFrame.frameWidth: 2 + *pixel_table.layout: vertical { \ + 1 \ + pixtabMenuFrame < +inf -inf * > \ + 1 \ + pixtabFrame < +inf -inf * +inf -inf > \ + 1 \ + } + + + *pixtabFrame.frameType: raised + *pixtabFrame.frameWidth: 0 + *pixtabFrame*borderWidth: 0 + *pixtabFrame*font: 6x10 + *pixtabFrame*MultiList.font: -*-helvetica-medium-r-normal-*-10-* + *pixtabFrame*Label.font: -*-helvetica-medium-r-normal-*-10-* + *pixtabFrame*TextToggle.font: -*-helvetica-medium-r-normal-*-10-* + + *pixtabFrame*MultiList.forceColumns: True + *pixtabFrame*MultiList.defaultColumns: 5 + *pixtabFrame*MultiList.shadeSurplus: False + *pixtabFrame*MultiList.borderWidth: 0 + *pixtabFrame*MultiList.rowHeight: 25 + *pixtabFrame*MultiList.rowSpacing: 7 + *pixtabFrame*MultiList.internalWidth: 7 + *pixtabFrame*MultiList.internalHeight: 4 + *pixtabFrame*MultiList.width: 410 + *pixtabFrame*MultiList.height: 160 + *pixtabFrame*MultiList.columnWidth: 50 + *pixtabFrame*MultiList.columnSpacing: 2 + *pixtabFrame*MultiList.maxSelectable: 1 + *pixtabFrame*MultiList.highlightForeground: red + *pixtabFrame*MultiList.highlightBackground: #c4c4c4 + *pixtabFrame*MultiList.background: #c4c4c4 + *pixtabFrame*TextToggle.background: #c4c4c4 + + *pixtabFrame*Label.width: 00 + !*pixtabFrame*Label.resize: False + + *meanFrame.frameWidth: 2 + *meanFrame.frameType: chiseled + *meanFrame.outerOffset: 0 + *meanFrame.width: 120 + *meanLabel.label: Mean: + *meanValue.label: + *meanValue.resize: False + + *sigFrame.frameWidth: 2 + *sigFrame.frameType: chiseled + *sigFrame.outerOffset: 0 + *sigFrame.width: 120 + *sigLabel.label: Stdev: + *sigValue.label: + *sigValue.resize: False + + *ptColFrame.frameWidth: 0 + *ptColFrame.outerOffset: 0 + *ptRowFrame.frameWidth: 0 + *ptRowFrame.outerOffset: 0 + + *pixtabFrame*ptColLabs.width: 410 + *pixtabFrame*ptColLabs.height: 23 + *pixtabFrame*ptColLabs.defaultColumns: 5 + *pixtabFrame*ptColLabs.forceColumns: True + *pixtabFrame*ptColLabs.columnWidth: 50 + *pixtabFrame*ptColLabs.columnSpacing: 2 + *pixtabFrame*ptRowLabs.width: 60 + *pixtabFrame*ptRowLabs.height: 110 + *pixtabFrame*ptRowLabs.defaultColumns: 1 + *pixtabFrame*ptRowLabs.forceColumns: True + *pixtabFrame*ptRowLabs.verticalList: True + *pixtabFrame*ptRowLabs.columnWidth: 50 + *pixtabFrame*ptRowLabs.columnSpacing: 2 + *pixtabFrame*pixtab.verticalList: True + + *ptFrame.outerOffset: 0 + *ptFrame.innerOffset: 0 + *ptFrame.borderWidth: 0 + *ptFrame.frameWidth: 1 + *ptFrame.frameType: sunken + *ptLayout.layout: vertical { \ + 3 \ + horizontal { 65 ptColFrame < +inf -inf * > 5 } \ + 1 \ + horizontal { \ + vertical { ptRowFrame< * +inf -inf > 5 } \ + 1 \ + vertical { ptFrame } \ + 5 \ + } \ + 1 \ + horizontal { \ + 2 < +inf > \ + meanLabel meanFrame < +inf -inf * > 2 \ + sigLabel sigFrame < +inf -inf * > \ + 10 \ + } \ + } +} + + +set Resources(help_panel) { \ + + !---------------------- + ! Help panel resources. + !---------------------- + *help_panel.title: XImtool Help Summary + *help_panel.width: 500 + *help_panel.height: 550 + *helpLayout*borderWidth: 0 + *helpLayout*Command.internalHeight: 4 + *helpLayout*Command.internalWidth: 12 + *helpLayout*HTML*shadowWidth: 1 + *helpLayout*helpText*Scrollbar.shadowWidth: 1 + + *helpMenuGroup.label: + *helpMenuGroup.height: 45 + *helpMenuGroup.outerOffset: 0 + *helpMenuGroup.innerOffset: 0 + *helpMenuGroup.frameType: raised + *helpMenubar.layout: vertical { \ + 5 < -5 > \ + horizontal { 20 < +inf -20 > helpClose 7 } \ + 5 < -5 > \ + } + *helpBack.label: Back + *helpBack.sensitive: False + *helpForward.label: Forward + *helpForward.sensitive: False + *helpHome.label: Home + *helpClose.label: Dismiss + + + *hfEntry*editType: edit + *hfEntry*font: 7x13 + *hfEntry*displayCaret: True + *hfFrame.frameWidth: 1 + *hfFrame.frameType: sunken + *hfFrame.width: 250 + *hfFind.label: Search + *hfFind.shadowWidth: 1 + *hfClear.label: Clear + *hfClear.shadowWidth: 1 + + *helpLayout.layout: vertical { \ + -1 \ + horizontal { helpMenuGroup < +inf -inf * > } \ + 5 \ + horizontal { \ + 5 \ + helpBack 2 helpForward 2 helpHome \ + 20 < +inf -20 > \ + hfFrame < +inf -inf * > 3 hfFind 1 hfClear \ + 5 \ + } \ + 5 \ + horizontal { helpTextFrame < +inf -inf * +inf -inf > } \ + horizontal { helpInfoLayout < +inf -inf * > } \ + -1 \ + } + *helpTextFrame.frameWidth: 1 + *helpTextFrame.frameType: sunken + *helpText.width: 600 + *helpText.height: 500 + *helpText.anchorUnderlines: 1 + *helpText.visitedAnchorUnderlines: 1 + *helpText.verticalScrollOnRight: true + *helpText*Scrollbar.shadowWidth: 1 + *helpText.plainFont: -adobe-courier-medium-r-normal-*-12-*-*-*-*-*-*-* + *helpText.plainboldFont: -adobe-courier-bold-r-normal-*-12-*-*-*-*-*-*-* + *helpText.plainitalicFont: -adobe-courier-medium-o-normal-*-12-*-*-*-*-*-*-* +! *helpText.boldFont: 6x12bold + + + ! Contact info at the bottom of the panel. + *helpInfoLayout*Label.justify: center + *helpInfoLayout*Label.internalHeight: 0 + *helpInfoLayout.layout: horizontal { \ + 5 \ + vertical { 5 helpIRAFLogo 5 } \ + 1 < +inf > \ + vertical { \ + 5 \ + helpInfo1 < +inf -inf * +inf -inf > \ + helpInfo2 < +inf -inf * +inf -inf > \ + helpInfo3 < +inf -inf * +inf -inf > \ + 5 \ + } \ + 1 < +inf > \ + vertical { 5 helpNOAOLogo 5 } \ + 5 \ + } + *helpInfo1.label: XIMTOOL_VERSION + *helpInfo2.label: For help or questions: http://iraf.net + *helpInfo3.label: \ + NOAO is operated by AURA under cooperative agreement with the NSF + + *helpInfoLayout*helpInfo1.font: -*-helvetica-medium-r-normal-*-12-*-*-* + *helpInfoLayout*helpInfo2.font: -*-helvetica-medium-r-normal-*-12-*-*-* + *helpInfoLayout*helpInfo3.font: -*-helvetica-medium-r-normal-*-10-*-*-* + + *helpInfoLayout.helpIRAFLogo.internalWidth: 0 + *helpInfoLayout.helpIRAFLogo.internalHeight: 0 + *helpInfoLayout.helpIRAFLogo.foreground: SteelBlue + *helpInfoLayout.helpIRAFLogo.background: white + *helpInfoLayout.helpNOAOLogo.internalWidth: 0 + *helpInfoLayout.helpNOAOLogo.internalHeight: 0 + *helpInfoLayout.helpNOAOLogo.foreground: SteelBlue + *helpInfoLayout.helpNOAOLogo.background: white +} + +set Resources(tcl_panel) { \ + + !-------------------------------- + ! Define a debug Tcl shell. + !-------------------------------- + *tcl_panel.width: 550 + *tcl_panel.height: 180 + *tcl_panel.title: Debug TCL Command Entry + *tclLayout*borderWidth: 0 + *tclLayout*Frame.frameType: sunken + *tclLayout*Frame.frameWidth: 2 + *tclLayout.layout: vertical { \ + 0 < +0 -0 > \ + tclCmdGroup < +inf -inf * > \ + tclFrame < +inf -inf * +inf -inf> \ + 0 < +0 -0 > \ + } + *tclEntry*foreground: black + *tclEntry*editType: edit + *tclEntry*type: string + *tclEntry*font: 7x13 + *tclEntry*scrollVertical: Always + *tclEntry*scrollHorizontal: whenNeeded + + *tclCmdGroup.label: + *tclCmdGroup.outerOffset: 0 + *tclCmdGroup.innerOffset: 0 + *tclCmd.layout: vertical { \ + 5 \ + horizontal { \ + 5 \ + tclClear 3 \ + tclExecute \ + 10 < +inf -10> \ + tclDismiss \ + 5 \ + } \ + 5 \ + } + *tclClear.label: Clear + *tclExecute.label: Execute + *tclDismiss.label: Dismiss +} + + +set Resources(warning) { \ + + ! --------------------- + ! WARNING dialog. + ! --------------------- + *warning.geometry: +400+300 + *warning*borderWidth: 0 + *warning*TextBox.frameWidth: 0 + + *warn.layout: vertical { \ + 5 < -5 > \ + horizontal { 5 warnFrame < +inf * +inf > 5 } \ + 5 < -5 > \ + horizontal { \ + 10 \ + warnOk < +inf * > \ + 5 < +inf -5 > \ + warnCancel < +inf * > \ + 10 \ + } \ + 5 < -5 > \ + } + *warnOk.label: Okay + *warnCancel.label: Cancel + + *WFlayout.layout: horizontal { \ + 5 < -5 > \ + vertical { 5 < +inf -5 > warnIcon 5 < +inf -5 > } \ + 5 < -5 > \ + warnText < +inf -inf * +inf -inf > \ + 5 < -5 > \ + } + + *warnLabel.label: Warning + *warnLabel.width: 300 + *warnLabel.height: 20 + *warnFrame.frameType: sunken + *warnFrame.frameWidth: 2 + *warnIcon.location: 0 0 40 40 + *warnIcon.image: WARNING + *warnText.label: generic warning text + *warnText.width: 270 + *warnText.height: 60 + *warnText.background: #c4c4c4 +} + + + + +set Resources(gui) { \ + + ! GUI resources. + ! ------------------------------ + *autoscale: True + *zoomfactors: 1 2 4 8 + *displayCoords: True + *displayPanner: True + *displayMagnifier: False + *blinkRate: 1.0 + *pannerArea: 150*150 + *pannerGeom: -5+5 + *magnifierArea: 100*100 + *magnifierGeom: +5+5 + *wcsboxGeom: -5-5 + *maxContrast: 5.0 + *showToolBar: False + *showPanelBar: False + *warnings: True + *centerBoxSize: 5 + *peakCentroid: True +} + + + + + +################################################################################ +# GUI Bootstrap Procedures +################################################################################ + +# Initialize the widget tree. +proc InitWidgetTree args \ +{ + global Objects Resources Version + + + # Add a new objects description for each of the panels found so we can + # create them by name later rather that with the defaults. + + set guiResources "" + foreach obj [array names Objects] { + set guiResources \ + [ format "%s\n\n*%s_objects:%s\n" \ + $guiResources $obj $Objects($obj) ] + } + + # Now append all the Resource strings, changing any version strings as + # needed. + + foreach res [array names Resources] { + regsub -all XIMTOOL_VERSION $Resources($res) $Version ver + set guiResources [ format "%s\n\n%s\n\n" $guiResources $ver ] + } + + # Define all of the GUI objects and resources. + appInitialize ximtool XImtool $guiResources +} + + +# Realize a window module, i.e. create it's objects. +proc Realize { module args } \ +{ + global Objects + + # Create any widgets for the module. We only do this once and set a + # flag to indicate the objects have been created so we don't do it on + # subsequent realizations. + if { [info exists Objects($module)] } { + createObjects [format "%s_objects" $module] + reset-server + } +} + + +# Bootstrap up the GUI. +InitWidgetTree +Realize ximtool +Realize parameters +Realize panelShell +Realize tcl_panel +Realize pixel_table +Realize hdr_panel +Realize blink_panel +Realize help_panel +Realize xpan_panel +Realize xmag_panel +Realize warning + +reset-server + +# Set the gterm widget focus. +send colorbar setGterm ; send colorbar activate +send imagewin setGterm ; send imagewin activate + +# Crank it up. +activate + + + + +############################################################################## +# Utility Procedures. +############################################################################## + +# Utility procedure to test True/False strings in resources. +proc true {v} {expr {$v == "true" || $v == "True" || $v == "TRUE"}} + +# Utility functions. +proc min {a b} { expr {($a < $b) ? $a : $b} } +proc max {a b} { expr {($a > $b) ? $a : $b} } + +# Global variables. +set version "NOAO/IRAF XImtool Version 2.0BETA" + +set winWidth [send imagewin get width ] ;# display window width +set winHeight [send imagewin get height] ;# display window height +set appWidth [send display get width ] ;# application window width +set appHeight [send display get height] ;# application window height +set marker none ;# selected marker +set markno 0 ;# used to name new markers +set ruler none ;# selected ruler +set ruleno 0 ;# used to name new rulers +set blinkFrames "1 2" ;# list of blink frames +set auto_reg 0 + +set panel_up 0 ;# control panel mapped +set help_up 0 ;# help panel mapped +set ism_enable 0 ;# ISM is running +set ism_capable 1 ;# Client is ISM capable +set frameCache(0) "" ;# ISM frame cache + +set ctype "equatorial" ;# default coord type +set eqtype "fk5" ;# default equatorial type + +# Global constants. +set MAX_FRAMES 16 ;# max frame buffers + +# TCL constants +set tcl_precision 8 + + + +# Window resize callbacks. +proc winResize {w width height} { + global winWidth winHeight + + if {$width <= 1 || $height <= 1} \ + return + + set winWidth $width + set winHeight $height +} ; send imagewin addCallback winResize resize + +proc appResize {w width height} \ +{ + global doHcut doVcut cutXPos cutYPos + global appWidth appHeight + + set appWidth $width + set appHeight $height + + catch { + if {$doHcut} { + send hcutPlot clearScreen + hcutInit + send hcutAxes1 redraw ; send hcutAxes2 redraw + cutPlots $cutXPos $cutYPos + } + if {$doVcut} { + send vcutPlot clearScreen + vcutInit + send vcutAxes1 redraw ; send vcutAxes2 redraw + cutPlots $cutXPos $cutYPos + } + } +} ; #send imagewin addCallback appResize resize + + + +# Additional global variables, taking default values from resources. +getResources { + { zoomfactors } + { displayCoords } + { displayPanner } + { displayMagnifier } + { blinkRate } + { pannerArea } + { pannerGeom } + { magnifierArea } + { magnifierGeom } + { wcsboxGeom } + { maxContrast } + { showToolBar } + { showPanelBar } + { warnings } + { centerBoxSize } + { peakCentroid } + { highlight } +} + +set warnings [true $warnings] +set defaultBlinkRate $blinkRate + +# Client state variables (UI parameter objects). Certain of these parameters +# we mirror in Tcl variables here, updating the values with a callback when +# the parameter value changes. Others require special callbacks. + +set frame 1 ;# current display frame +set nframes 0 ;# number of frame buffers +set frames {1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16} ;# list of image frames +set frameWidth 0 ;# frame buffer width, pixels +set frameHeight 0 ;# frame buffer height, pixels +set frameDepth 8 ;# frame buffer pixel size, bits +set cursorMode 0 ;# true when cursor read pending + +foreach i $frames { + set frameZoomX($i) 0 ;# X zoom factor + set frameZoomY($i) 0 ;# Y zoom factor + set frameCenterX($i) 0 ;# X center of field + set frameCenterY($i) 0 ;# Y center of field + set frameScaleX($i) 0 ;# X scale factor + set frameScaleY($i) 0 ;# Y scale factor + set frameOffsetX($i) 0 ;# X register offset + set frameOffsetY($i) 0 ;# Y register offset + set enhancement($i) none ;# colortable enhancement +} + + +#trace variable frameOffsetX w debug_pvar ;# Debug stuff +#trace variable frameOffsetY w debug_pvar +#trace variable frameZoomX w debug_pvar +#trace variable frameZoomY w debug_pvar +#trace variable frameScaleX w debug_pvar +#trace variable frameScaleY w debug_pvar + +proc debug_pvar { name element op } \ +{ + if {$element != ""} { + set name ${name}($element) + } + upvar $name x + puts "Variable $name set to $x" +} + + + + +################################################################################ +# Cut-plot handling routines. +################################################################################ + +set doHcut 0 +set doVcut 0 +set hstate 0 +set vstate 0 +set plotSpeed 1 ; send plotSpeed set on True +set curJump 1 ; send curJump set on True +set curTrack 1 ; send curTrack set on True + +set cutXPos [expr "$winWidth / 2"] +set cutYPos [expr "$winHeight / 2"] +set cutXScale 1.0 +set cutYScale 1.0 + + + +# Change the cursor to the crosshair when in the plot +proc cutCursor { widget event args } \ +{ + global doHcut doVcut curTrack + + if {! $curTrack} \ + return + + if { $event == "enterNotify" } { + send $widget setCursorType ginMode + + # Disable the update of the graph we're in while in the plot window. + if {$widget == "hcutPlot"} { set doHcut 0 } else { set doVcut 0 } + } elseif { $event == "leaveNotify" } { + send $widget setCursorType idle + + # Enable the update of the graph we're leaving. + if {$widget == "hcutPlot"} { set doHcut 1 } else { set doVcut 1 } + } + cutPlotRefresh +} +foreach w {hcutPlot vcutPlot} { + send $w addEventHandler cutCursor enterWindowMask + send $w addEventHandler cutCursor leaveWindowMask +} + +proc cutPlotRefresh args \ +{ + global doHcut doVcut cutXPos cutYPos + + if {$doHcut} { + send hcutPlot clearScreen + hcutInit + send hcutAxes1 redraw ; send hcutAxes2 redraw + cutPlots $cutXPos $cutYPos + } + if {$doVcut} { + send vcutPlot clearScreen + vcutInit + send vcutAxes1 redraw ; send vcutAxes2 redraw + cutPlots $cutXPos $cutYPos + } +} ; send imagewin addEventHandler cutPlotRefresh enterWindowMask + +proc cutPlotRedraw args \ +{ + global doHcut doVcut cutXPos cutYPos + + if {$doHcut} { + send hcutAxes1 redraw ; send hcutAxes2 redraw + cutPlots $cutXPos $cutYPos + } + if {$doVcut} { + send vcutAxes1 redraw ; send vcutAxes2 redraw + cutPlots $cutXPos $cutYPos + } +} + + +# Disable the options when we first start up. +#send plotOpts "set height 1 ; set width 1 ; unmap" +foreach w {plotOpts hcutFrame vcutFrame} { send $w unmap } + + +# Cut-Plot options callback. +proc doPlotOpts { widget type state args } \ +{ + global plotSpeed curJump curTrack doHcut doVcut + global cutXPos cutYPos + + if {$state} { set not 0 } else { set not 1 } + + switch $widget { + plotSpeed { if {$state} { + send plotAccurate set on 0 ; send plotImgPix set on 0 + } else { + send plotSpeed set on True ; + } + set plotSpeed $not + } + plotAccurate { if {$state} { + send plotImgPix set on 0 ; send plotSpeed set on 0 + } else { + send plotSpeed set on True ; + } + set plotSpeed $not + } + plotImgPix { if {$state} { + send plotAccurate set on 0 ; send plotSpeed set on 0 + } else { + send plotSpeed set on True ; + } + set plotSpeed $not + } + curJump { send curSmooth set on $not ; set curJump $state } + curSmooth { send curJump set on $not ; set curJump $not } + curTrack { set curTrack $state } + } + + # Redraw the plots right away. + if {$widget == "plotSpeed" || $widget == "plotAccurate"} { + cutPlots $cutXPos $cutYPos + } +} +foreach w { plotSpeed plotAccurate plotImgPix curJump curSmooth curTrack } { + send $w addCallback doPlotOpts +} + + +# Toggle the display of the horizontal or vertical cut plot windows. + +proc cutPlotToggle { widget type state args } \ +{ + global doHcut doVcut cutXPos cutYPos hstate vstate + set debug 0 + + set hstate [send hcut get state] + set vstate [send vcut get state] + set w [send display get width] + set h [send display get height] + + if {$debug} { print " " ; print [format "display: %d x %d\n" $w $h] } + + if {$widget == "hcut"} { + set hfw [expr [send hcutFrame get width] - 4] + set hpw [send hcutPlot get width] + if {$state} { + # Enable the plot and resize the main window + if {$vstate} { + send plotOpts set width 134 + } + send hcutFrame "set width $hpw ; set height 132; map" + send hcutPlot "set width $hfw ; set height 128" + send display "set height [ expr ($h + 132) ]; set width $w" + drawHcutAxes 1 + setHcutCursor 1 + if {$vstate} { + send plotOpts "set height 134 ; map" + vcutInit + } + hcutInit ;# Initialize the plot. + } else { + # Disable the plot and resize the main window + setHcutCursor 0 + drawHcutAxes 0 + send hcutPlot clearScreen + send plotOpts "unmap; set height 4" + send hcutFrame "unmap; set width $hfw; set height 4" + send plotOpts "set width 4" + send display "set height [ expr ($h - 128) ] ; set width $w" + if {$vstate} { + vcutInit + } + } + set doHcut $state + } else { + set vfh [expr [send vcutFrame get height] - 4] + set vph [send vcutPlot get height] + if {$state} { + # Enable the plot and resize the main window + if {$hstate} { + send plotOpts set height 134 + } + send vcutFrame "set height $vph ; set width 132 ; map" + send vcutPlot "set height $vfh ; set width 128" + send display "set height $h; set width [ expr ($w + 132) ]" + drawVcutAxes 1 + setVcutCursor 1 + if {$hstate} { + send plotOpts "set height 134 ; set width 134; map" + hcutInit + } + vcutInit ;# Initialize the plot. + } else { + # Disable the plot and resize the main window + setVcutCursor 0 + drawVcutAxes 0 + send vcutPlot clearScreen + send plotOpts "unmap; set width 4" + send vcutFrame "unmap; set height $vfh; set width 4" + send plotOpts "set height 4" + send display "set width [ expr ($w - 128) ] ; set height $h" + if {$hstate} { + hcutInit + } + } + set doVcut $state + } + + if {$debug} { + print [format " hFrame: %d x %d\n" \ + [send hcutFrame get width] [send hcutFrame get height] ] + print [format " hPlot: %d x %d\n" \ + [send hcutPlot get width] [send hcutPlot get height] ] + print [format " vFrame: %d x %d\n" \ + [send vcutFrame get width] [send vcutFrame get height] ] + print [format " vPlot: %d x %d\n" \ + [send vcutPlot get width] [send vcutPlot get height] ] + print [format "state: %d %d\n" $hstate $vstate] + print [format "display: %d x %d\n" $w $h] + } + + cutPlots $cutXPos $cutYPos +} ; foreach w { hcut vcut } { send $w addCallback cutPlotToggle } + + +# Draw the cut plots. +proc cutPlots { xpos ypos args } \ +{ + global doHcut doVcut cutXPos cutYPos hstate vstate + + catch { + if {$doHcut} { + drawHcutIndicator $xpos + if {$hstate} { plotHcut $xpos $ypos } + } + if {$doVcut} { + drawVcutIndicator $xpos + if {$vstate} { plotVcut $xpos $ypos } + } + } + + set cutXPos $xpos ; set cutYPos $ypos +} + + +################################################################################ +# Horizontal Cut-Plot Routines +################################################################################ + +set hcutVec {} + +# Initiailize the horizontal cut-plot +proc hcutInit args \ +{ + global logz cutXScale winWidth cutXPos cutYPos + + # Just get some dummy pixels, we only want the z1/z2 values so we can + # initialize the labels. + set xp [expr [send imagewin get width] / 2 ] + set yp [expr [send imagewin get height] / 2 ] + set pix [send client getPixels $xp $yp 2 2 ] + set z1 [lindex $pix 0] + set z2 [lindex $pix 1] + + send hcutPlot getPhysRes xr yr + send hcutPlot setLogRes $xr $yr + + set logx [send imagewin get width] + set logz [expr ($z2 - $z1)] + set cutXScale [expr ($xr * 1.0) / ($logx * 1.0)] + + # Initialize the labels. + send vcutPlot "setColorIndex 6" + drawHcutLabels $z1 $z2 +} + +# Draw the horizontal cut-plot. +proc plotHcut { xpos ypos } \ +{ + global doHcut cutXScale + global hcutVec cutXPos plotSpeed + + + if { ($xpos == 0 && $ypos == 0) || ! $doHcut } \ + return + + # Do the horizontal cut plot. + set width [send imagewin get width] + if {$plotSpeed} { + set pix [send client getPixels 0 $ypos $width 1 2 5 $cutXScale] + } else { + set pix [send client getPixels 0 $ypos $width 1 2 1 $cutXScale] + } + set z1 [lindex $pix 0] + set z2 [lindex $pix 1] + set vec [lrange $pix 2 end] + + # Erase the last plot rather than clear the screen and redraw + # the new vector. + send hcutPlot setColorIndex background + send hcutPlot drawPolyline $hcutVec + send hcutPlot setColorIndex foreground + send hcutPlot drawPolyline $vec + set hcutVec $vec ;# save for later erasure + + # Mark the cursor position. + drawHcutIndicator $xpos + + # Minimize the screen refreshes to speed things up. + if { [expr "$ypos % 3"] == 0} { + catch { + drawHcutLabels $z1 $z2 ;# redraw the labels + } + send hcutAxes1 redraw ;# redraw the axes markers + send hcutAxes2 redraw + } +} + + +# Create markers to indicate axes on the horizontal cut-plot. +proc drawHcutAxes { state } \ +{ + if {$state} { + send hcutPlot createMarker hcutAxes1 \ + type box \ + createMode noninteractive \ + lineColor gray60 \ + lineStyle 0 \ + x 1 \ + y 60 \ + height 30 \ + width 4096 \ + activated True \ + visible True \ + sensitive False + send hcutPlot createMarker hcutAxes2 \ + type box \ + createMode noninteractive \ + lineColor gray60 \ + lineStyle 0 \ + x 1 \ + y 1 \ + height 60 \ + width 4096 \ + activated True \ + visible True \ + sensitive False + } else { + send hcutAxes1 destroy ; send hcutAxes2 destroy + } +} + +# Create a marker to be used as the cursor indicator. +proc setHcutCursor { state } \ +{ + if {$state} { + set pts { {252 10} {260 10} {256 1} } + + send hcutPlot createMarker hcutCursor \ + type polygon \ + createMode noninteractive \ + lineColor black \ + fill True \ + fillColor yellow \ + x 256 \ + y 12 \ + width 8 \ + height 10 \ + knotSize 0 \ + activated True \ + visible False \ + sensitive False + send hcutCursor setVertices $pts + send hcutCursor set visible True + + } else { + send hcutCursor destroy + } +} + +# Label the axes on the horizontal cut plot. +proc drawHcutLabels { z1 z2 } \ +{ + set mid [expr "($z2-$z1)/2.0+$z1"] + set low [expr "($mid-$z1)/2.0+$z1"] + set high [expr "($z2-$mid)/2.0+$mid"] + + send hcutPlot "setColorIndex 6 ; \ + drawAlphaText 2 10 [format "%.1f" $z2] ; \ + drawAlphaText 2 34 [format "%.1f" $high] ; \ + drawAlphaText 2 64 [format "%.1f" $mid] ; \ + drawAlphaText 2 94 [format "%.1f" $low] ; \ + drawAlphaText 2 120 [format "%.1f" $z1]" +} + +# Draw the cursor position indicator on the horizontal cut plot. +proc drawHcutIndicator { xpos } \ +{ + global cutXScale cutXPos + + send hcutCursor move [expr ($xpos * $cutXScale)] 12 + set cutXPos $xpos +} + +# Track the cursor while in the cut-graph window. +proc hcutWCSUpdate { x y args } \ +{ + global cutYPos curTrack + if {$curTrack} { + wcsUpdate $x $cutYPos + } + drawHcutIndicator $x +} + + + + +################################################################################ +# Vertical Cut-Plot Routines +################################################################################ + +set vcutVec {} + +# Initiailize the vertical cut-plot +proc vcutInit args \ +{ + global cutYScale winWidth cutXPos cutYPos + + # Just get some dummy pixels, we only want the z1/z2 values so we can + # initialize the labels. + set xp [expr [send imagewin get width] / 2 ] + set yp [expr [send imagewin get height] / 2 ] + set pix [send client getPixels $xp $yp 2 2 ] + set z1 [lindex $pix 0] + set z2 [lindex $pix 1] + + send vcutPlot getPhysRes xr yr + send vcutPlot setLogRes $xr $yr + + set logy [send imagewin get height] + set logz [expr ($z2 - $z1)] + set cutYScale [expr ($yr * 1.0) / ($logy * 1.0)] + + # Initialize the labels. + send vcutPlot "setColorIndex 6; reset" + drawVcutLabels $z1 $z2 +} + +# Draw the horizontal cut-plot. +proc plotVcut { xpos ypos } \ +{ + global doVcut cutYScale + global vcutVec cutXPos cutYPos plotSpeed + + + if { ($xpos == 0 && $ypos == 0) || ! $doVcut } \ + return + + # Do the vertical cut plot. + set height [send imagewin get height] + if {$plotSpeed} { + set pix [send client getPixels $xpos 0 1 $height 3 5 $cutYScale] + } else { + set pix [send client getPixels $xpos 0 1 $height 3 1 $cutYScale] + } + set z1 [lindex $pix 0] + set z2 [lindex $pix 1] + set vec [lrange $pix 2 end] + + # Draw the vector. + send vcutPlot setColorIndex background + send vcutPlot drawPolyline $vcutVec + send vcutPlot setColorIndex foreground + send vcutPlot drawPolyline $vec + set vcutVec $vec ;# save for later erasure + + # Mark the cursor position. + drawVcutIndicator $ypos + + # Minimize the screen refreshes to speed things up. + if { [expr "$xpos % 3"] == 0} { + catch { + drawVcutLabels $z1 $z2 ;# redraw the labels + } + send vcutAxes1 redraw ;# redraw the axes markers + send vcutAxes2 redraw + } +} + +# Erase the last plot rather than clear the screen and redraw it all. The +# erase is done by redrawing the last vector in the the background color. +proc eraseOldVcut args \ +{ + global cutYPos vcutVec + + send vcutPlot setColorIndex background + send vcutPlot drawPolyline $vcutVec + send vcutPlot setColorIndex foreground +} + +# Draw the horizontal cut-plot. +# Create markers to indicate axes on the vertical cut-plot. +proc drawVcutAxes { state } \ +{ + if {$state} { + send vcutPlot createMarker vcutAxes1 \ + type box \ + createMode noninteractive \ + lineColor gray60 \ + lineStyle 0 \ + x 60 \ + y 1 \ + height 4096 \ + width 30 \ + activated True \ + visible True \ + sensitive False + send vcutPlot createMarker vcutAxes2 \ + type box \ + createMode noninteractive \ + lineColor gray60 \ + lineStyle 0 \ + x 1 \ + y 1 \ + width 60 \ + height 4096 \ + activated True \ + visible True \ + sensitive False + } else { + send vcutAxes1 destroy ; send vcutAxes2 destroy + } +} + +# Create a marker to be used as the cursor indicator. +proc setVcutCursor { state } \ +{ + if {$state} { + set pts { {10 252} {10 260} {1 256} } + + send vcutPlot createMarker vcutCursor \ + type polygon \ + createMode noninteractive \ + lineColor black \ + fill True \ + fillColor yellow \ + x 12 \ + y 256 \ + width 10 \ + height 8 \ + knotSize 0 \ + activated True \ + visible False \ + sensitive False + send vcutCursor setVertices $pts + send vcutCursor set visible True + + } else { + send vcutCursor destroy + } +} + +# Label the axes on the vertical cut plot. +proc drawVcutLabels { z1 z2 } \ +{ + set mid [expr "($z2-$z1)/2.0+$z1"] + set low [expr "($mid-$z1)/2.0+$z1"] + set high [expr "($z2-$mid)/2.0+$mid"] + + # Initialize the label strings and positions. + set labels {} + foreach i [list $z2 $high $mid $low $z1] { + lappend labels [ format "%.1f" $i ] + } + set xposns { 2 28 58 88 112 } + + send vcutPlot "setColorIndex 6" + + # Draw each label vertically down the position since we can't rotate + # the text. + set xp 0 + foreach lab $labels { + set chars [split $lab {} ] + set yp 12 + set xpos [lindex $xposns $xp] + foreach ch $chars { + if {$ch == "."} { incr yp -4 } + send vcutPlot drawAlphaText $xpos $yp $ch + incr yp 10 + } + incr xp + } +} + + +# Draw the cursor position indicator on the horizontal cut plot. +proc drawVcutIndicator { ypos } \ +{ + global cutYScale cutYPos + + send vcutCursor move 12 [expr ($ypos * $cutYScale)] + set cutYPos $ypos +} + + +# Track the cursor while in the cut-graph window. +proc vcutWCSUpdate { x y args } \ +{ + global cutXPos curTrack + if {$curTrack} { + wcsUpdate $cutXPos $y + } + drawVcutIndicator $y +} + + + +################################################################################ +# UTILITY ROUTINES +################################################################################ + + +# TICSTEP -- Utility routine to compute nice ticmark steps in plots. +# [ NOT CURRENTLY USED. ] + +proc ticstep { range nsteps } \ +{ + set t2 0.301029996 + set t5 0.698970004 + set df [ expr "$range / double($nsteps + 1)" ] + if {$df > 0.0} { + set p1 [ expr "log10(double($df))" ] + } else { + set p1 [ expr "log10(double(-$df))" ] + } + set p2 [ expr "int($p1)" ] + set p3 [ expr "$p1 - $p2" ] + + if { $p3 < 0.0 } { + set p3 [ expr "$p2 + 1.0" ] + set p2 [ expr "$p2 - 1.0" ] + } + + if { $p3 < 1.0e-10 } { + set ticstep [ expr "pow(double(10.0),double($p2))" ] + } elseif { $p3 > 0. && $p3 <= $t2 } { + set ticstep [ expr "pow(double(10.0),double($p2 + $t2))" ] + } elseif { $p3 > $t2 && $p3 <= $t5 } { + set ticstep [ expr "pow(double(10.0),double($p2 + $t5))" ] + } elseif { $p3 > $t5 && $p3 <= 1.0 } { + set ticstep [ expr "pow(double(10.0),double($p2 + 1.))" ] + } else { + set ticstep $df + } + + set logtic [ expr "int(log10($ticstep)) - 1" ] + set scale [ expr "pow(double(10.0),double($logtic))" ] + set ticstep [ expr "int( ($ticstep / $scale) * $scale)" ] + + if {$ticstep < 0.1} { set ticstep 0.10 } + + return $ticstep +} + + + +# Cursor positioning routines +#---------------------------- + +proc move_cursor { xstep ystep args } \ +{ + set raster 0 + send imagewin getCursorPos rx ry + send imagewin setCursorPos [expr $rx + $xstep] [expr $ry + $ystep] $raster +} + + +# Called when the number of frames changes. +proc setNFrames {param old new} \ +{ + global frameMenuDescription nframes frames + + set nframes $new + if {$old != $new} { + foreach i {prevButton nextButton} { + send $i set sensitive [expr "$nframes > 1"] + } + + if {$nframes > 0} { + + # Creates the Frames menu on the main image window. + set items { } + for {set i 1} {$i <= $nframes} {incr i} { + set l [format "%2d" $i] + lappend items "$l f.exec \{send client setFrame $i\} sensitive \{[expr \"$nframes >= $i\"]\}" + } + editMenu frameMenu frameButton $items + + # Create the menu for the blink frames list. + set items { } + for {set i 0} {$i <= $nframes} {incr i} { + set j [expr ($i + 1)] + if {$i == 0} { + set s "\"none\" f.exec \{send brFrameBTN set label \" \"\}" + lappend items $s + } else { + set l [format "%2d" $i] + lappend items "$l f.exec \{send brFrameBTN set label $l\} sensitive \{[expr \"$nframes >= $i\"]\}" + } + } + for {set i 1} {$i <= $nframes} {incr i} { + send brFrame$i setSensitive True + send tFrame$i setSensitive True + regsub -all BTN $items $i nmenu + editMenu frame${i}Menu brFrame$i $nmenu + } + + } else { + editMenu frameMenu frameButton $frameMenuDescription + + for {set i 1} {$i <= $nframes} {incr i} { + send brFrame$i setSensitive True + send tFrame$i setSensitive True + editMenu frame${i}Menu brFrame$i $frameMenuDescription + } + } + } + + for {set i 1} {$i <= 16} {incr i} { + if {$i <= $nframes} { + send frame$i map + } else { + send frame$i unmap + } + } + + if {$nframes > 2} { + setAllTileFrames + } +}; send nframes addCallback setNFrames + + +# Set the default main window frame menu. +set frameMenuDescription { + {" 1" f.exec "send client setFrame 1" sensitive {[expr "$nframes >= 1"]} } + {" 2" f.exec "send client setFrame 2" sensitive {[expr "$nframes >= 2"]} } + {" 3" f.exec "send client setFrame 3" sensitive {[expr "$nframes >= 3"]} } + {" 4" f.exec "send client setFrame 4" sensitive {[expr "$nframes >= 4"]} } +}; createMenu frameMenu frameButton $frameMenuDescription + + + + +# Initialize the frame lists panels (blink panel and tile tab). +for {set i 1} {$i <= 16} {incr i} { + send brFrame$i set label [format "%2d" $i] + send tFrame$i set label [format "%2d" $i] + if {$i <= 4} { + send brFrame$i setSensitive True + send tFrame$i "setSensitive True ; set state 1" + } else { + send brFrame$i setSensitive False + send tFrame$i "setSensitive False ; set state 0" + } + createMenu frame${i}Menu brFrame$i $frameMenuDescription +} + + +# Called when the frame being displayed changes. +proc frameChanged {param old new} \ +{ + global frame + + set frame $new + send frameButton set label [format "%2d" $frame] + + # The first time we request frame 5 or higher reset + # the extra frame buttons on the control panel to make + # them visible. + if {$new >= 5} { + send frlistBox set width 49 + } + wcsFmtFBConfig + drawCompass +}; send frame addCallback frameChanged + + +# Called when the frame buffer configuration changes. +proc setFrameSize {param old new} \ +{ + global frameWidth frameHeight frameDepth + set frameWidth [lindex $new 0] + set frameHeight [lindex $new 1] + set frameDepth [lindex $new 2] + + wcsFmtFBConfig +}; send frameSize addCallback setFrameSize + +# Called when the current frame is zoomed or panned. +proc setFrameView {param old new} \ +{ + global frameZoomX frameZoomY frameCenterX frameCenterY + global frameScaleX frameScaleY frameOffsetX frameOffsetY + global frame auto_reg blinkFrames + + # Update the position. + set frameZoomX($frame) [lindex $new 0] + set frameZoomY($frame) [lindex $new 1] + set frameCenterX($frame) [lindex $new 2] + set frameCenterY($frame) [lindex $new 3] + set frameScaleX($frame) [lindex $new 4] + set frameScaleY($frame) [lindex $new 5] + set frameOffsetX($frame) [lindex $new 6] + set frameOffsetY($frame) [lindex $new 7] + + # If auto-registering is enabled, do it now, but only when we're updating + # the current display frame, and only if that frame is in the framelist. + + if {$auto_reg == 1 && $frame == [send frameButton get label]} { + if {[string first $frame $blinkFrames] != -1} { + send client offsetRegister \{$blinkFrames\} + } + + foreach f $blinkFrames { + if {$f != $frame} { + set frameZoomX($f) $frameZoomX($frame) + set frameZoomY($f) $frameZoomY($frame) + set frameCenterX($f) $frameCenterX($frame) + set frameCenterY($f) $frameCenterY($frame) + set frameScaleX($f) $frameScaleX($frame) + set frameScaleY($f) $frameScaleY($frame) + } + } + } + deleteAllRulers + +}; send frameView addCallback setFrameView + + +# Called when the color enhancement for a frame changes. +proc setEnhancement {param old new} \ +{ + global enhancement + set enhancement([lindex $new 0]) [lrange $new 1 end] +}; send enhancement addCallback setEnhancement + +# Called when the frame title changes (e.g. frame change or new frame loaded). +proc setTitle {param old new} \ +{ + set lab [string trimright $new] + send imageTitle set label $lab + + set image [lindex [ split $lab '-'] 0 ] + wcsFmtImname $image + + set title [lindex [ split $lab '-'] 1 ] + wcsFmtImtitle $title + deleteAllRulers +}; send frameTitle addCallback setTitle + +# Called when the image is flipped in an axis. +proc setFlip {param old new} \ +{ + if {$param == "xflip"} { + send xflipButton set state [true $new] + } else { + send yflipButton set state [true $new] + } + deleteAllRulers +}; foreach i {xflip yflip} { send $i addCallback setFlip } + + +# Various general callbacks. + +proc Quit args \ +{ + global ism_enable + + if {$ism_enable} { + catch { send wcspix quit } + } + send client Quit +} +proc nextFrame args { send client nextFrame } +proc prevFrame args { send client prevFrame } +proc setColormap { mapno } { send client setColormap $mapno } +proc xflip args { send client flip x ; flipRegister } +proc yflip args { send client flip y ; flipRegister } +proc xyflip args { send client flip x y ; flipRegister } +proc flipRegister args \ +{ + global auto_reg frame blinkFrames + + if {$auto_reg == 1 && $frame == [send frameButton get label]} { + if {[string first $frame $blinkFrames] != -1} { + send client offsetRegister \{$blinkFrames\} + } + } +} + + + +# Initialize bitmaps. +createBitmap xflip 16 16 { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x08, 0x18, 0x18, + 0x1c, 0x38, 0xfe, 0x7f, 0xfe, 0x7f, 0x1c, 0x38, 0x18, 0x18, 0x10, 0x08, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00} + +createBitmap yflip 16 16 { + 0x00, 0x00, 0x80, 0x01, 0xc0, 0x03, 0xe0, 0x07, 0xf0, 0x0f, 0x80, 0x01, + 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0xf0, 0x0f, + 0xe0, 0x07, 0xc0, 0x03, 0x80, 0x01, 0x00, 0x00} + +createBitmap qmark 16 16 { + 0x00, 0x00, 0x00, 0x00, 0xf0, 0x07, 0xf8, 0x0f, 0x18, 0x0c, 0x18, 0x0c, + 0x18, 0x0e, 0x00, 0x07, 0x80, 0x03, 0x80, 0x01, 0x80, 0x01, 0x00, 0x00, + 0x80, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x00} + +createBitmap larrow 16 16 { + 0x00, 0x00, 0x00, 0x03, 0x80, 0x03, 0xc0, 0x03, 0xe0, 0x1e, 0x70, 0x1e, + 0x38, 0x18, 0x1c, 0x18, 0x1c, 0x18, 0x38, 0x18, 0x70, 0x1e, 0xe0, 0x1e, + 0xc0, 0x03, 0x80, 0x03, 0x00, 0x03, 0x00, 0x00} + +createBitmap rarrow 16 16 { + 0x00, 0x00, 0xc0, 0x00, 0xc0, 0x01, 0xc0, 0x03, 0x78, 0x07, 0x78, 0x0e, + 0x18, 0x1c, 0x18, 0x38, 0x18, 0x38, 0x18, 0x1c, 0x78, 0x0e, 0x78, 0x07, + 0xc0, 0x03, 0xc0, 0x01, 0xc0, 0x00, 0x00, 0x00} + +createBitmap panel 16 16 { + 0x00, 0x00, 0xf8, 0x1f, 0xf8, 0x1f, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, + 0x98, 0x19, 0x98, 0x19, 0x98, 0x19, 0x98, 0x19, 0x98, 0x19, 0x18, 0x18, + 0x18, 0x18, 0x18, 0x18, 0xf8, 0x1f, 0xf8, 0x1f} + +createBitmap brightness 15 15 { + 0x00, 0x00, 0x80, 0x00, 0x84, 0x10, 0xe8, 0x0b, 0x10, 0x04, 0x08, 0x08, + 0x08, 0x08, 0x0e, 0x38, 0x08, 0x08, 0x08, 0x08, 0x10, 0x04, 0xe8, 0x0b, + 0x84, 0x10, 0x80, 0x00, 0x00, 0x00} + +createBitmap contrast 15 15 { + 0x00, 0x00, 0x00, 0x00, 0xc0, 0x01, 0x30, 0x07, 0x08, 0x0f, 0x08, 0x0f, + 0x04, 0x1f, 0x04, 0x1f, 0x04, 0x1f, 0x08, 0x0f, 0x08, 0x0f, 0x30, 0x07, + 0xc0, 0x01, 0x00, 0x00, 0x00, 0x00} + +createBitmap bar 10 10 { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0x00, 0x42, 0x00, 0x7e, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00} + +createBitmap dot 16 16 { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x01, + 0xe0, 0x03, 0xf0, 0x07, 0xf0, 0x07, 0xf0, 0x07, 0xe0, 0x03, 0xc0, 0x01, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00} + +createBitmap null 16 16 { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00} + +createBitmap solid 64 24 { + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 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, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00} + +catch { send controlButton "set bitmap panel; addCallback panel" } +catch { send helpButton "set bitmap qmark; addCallback Help" } +send xflipButton "set bitmap xflip; addCallback xflip" +send yflipButton "set bitmap yflip; addCallback yflip" +send prevButton "set bitmap larrow; addCallback prevFrame" +send nextButton "set bitmap rarrow; addCallback nextFrame" +send blinkPanel "set bitmap panel" + + + +# WINDOW the current frame. +set old_cm_x 0 +set old_cm_y 0 + +proc windowColormap {x y} \ +{ + global winWidth winHeight maxContrast old_cm_x old_cm_y + + # For efficiency we won't compute the sqrt of the distance but instead + # just compare the square. Use a threshold of 6 pixels so when we + # narrow in on the ROI we refine the colormap more precisely. + + set diff [expr (($old_cm_x - $x) * ($old_cm_x - $x)) + \ + (($old_cm_y - $y) * ($old_cm_y - $y))] + + # Keep the old position. + set old_cm_x $x + set old_cm_y $y + if {$diff > 36} { + return + } + + send client windowColormap \ + [expr "double($x) / $winWidth"] \ + [expr "(double($y) - $winHeight / 2.0) / $winHeight * \ + $maxContrast * 2.0"] +} + +proc updateColormap {x y} \ +{ + global winWidth winHeight maxContrast old_cm_x old_cm_y + + set old_cm_x $x + set old_cm_y $y + send client updateColormap \ + [expr "double($x) / $winWidth"] \ + [expr "(double($y) - $winHeight / 2.0) / $winHeight * \ + $maxContrast * 2.0"] +} + + + +# WINDOW the current frame, but only one color at a time. +proc windowRGB {color x y save_flag} \ +{ + global winWidth winHeight maxContrast + + send client windowRGB $color \ + [expr "double($x) / $winWidth"] \ + [expr "(double($y) - $winHeight / 2.0) / $winHeight * \ + $maxContrast * 2.0"] $save_flag +} + + +# ZOOM and PAN. +set xcen 0 +set ycen 0 +foreach i $frames {set zoomindex($i) 0} +set nzoomfactors 0 +foreach i $zoomfactors { + set zoomfactor($nzoomfactors) $i + incr nzoomfactors +} + +# Zoom or pan image at given center. +proc zoom {x y} \ +{ + global xcen ycen frame + global zoomindex zoomfactor + global nzoomfactors + + set rx $x; set ry $y + set raster 0 + + # Convert raw screen coordinates to frame buffer raster coordinates. + send imagewin unmapPixel $x $y raster rx ry + + # Select a pixel. + set rx [expr "int ($rx)"] + set ry [expr "int ($ry)"] + + # If the pointer did not move (much) zoom the image, otherwise + # pan it. + + send imagewin setCursorType busy + if {sqrt(pow($x-$xcen, 2) + pow($y-$ycen, 2)) < 4} { + set zoomindex($frame) [expr [incr zoomindex($frame)] % $nzoomfactors] + set mag $zoomfactor($zoomindex($frame)) + send client zoom $mag $mag $rx $ry + } else { + send client pan $rx $ry + set xcen $x + set ycen $y + } + + # Move the pointer so that it tracks the object feature the user + # selected. + + send imagewin setCursorPos $rx $ry $raster + send imagewin getCursorPos xcen ycen + send imagewin setCursorType idle +} + + +# Zoom using a marker to indicate the region to be displayed. +proc zoomMarker {marker aspect} \ +{ + global xcen ycen frame + global winWidth winHeight + global zoomindex nzoomfactors + global auto_reg frame frameOffsetX frameOffsetY + + # getRegion returns: "rectangle raster x y width height rotangle". + set region [send $marker getRegion unmap] + + set raster [lindex $region 1] + set xcen [expr "int([lindex $region 2]) + 0.5"] + set ycen [expr "int([lindex $region 3]) + 0.5"] + set snx [expr "[lindex $region 4] * 2"] + set sny [expr "[lindex $region 5] * 2"] + + # Compute the magnification ratio. + set xmag [expr "$winWidth / $snx"] + set ymag [expr "$winHeight / $sny"] + if {$aspect == "equal"} { + set mag [expr "($xmag < $ymag) ? $xmag : $ymag"] + set xmag $mag; set ymag $mag + } + + # Zoom the image. + send client zoomAbs \ + $xmag $ymag $xcen $ycen \ + $frameOffsetX($frame) $frameOffsetY($frame) + + # The following causes a button2 to redisplay the full image. + send imagewin setCursorPos $xcen $ycen $raster + send imagewin getCursorPos xcen ycen + set zoomindex($frame) [expr "$nzoomfactors - 1"] +} + +# Pan the display frame one width/height in a given direction. +proc moveFrame { xs ys args } \ +{ + global winWidth winHeight frame + global frameWidth frameHeight + global frameZoomX frameZoomY frameCenterX frameCenterY + global frameOffsetX frameOffsetY + + # Get the step size for the new position. + set xstep_size [ expr "$xs * $winWidth / $frameZoomX($frame)" ] + set ystep_size [ expr "$ys * $winHeight / $frameZoomY($frame)" ] + + # Set the boundaries so we only move up to the edges. + set xl [ expr "($winWidth / $frameZoomX($frame)) / 2 + 1" ] + set yl [ expr "($winHeight / $frameZoomY($frame)) / 2 + 1" ] + set xu [ expr "$frameWidth - $xl" ] + set yu [ expr "$frameHeight - $yl" ] + + # Set the new center position. + set nxc [ expr "$frameCenterX($frame) + $xstep_size" ] + set nyc [ expr "$frameCenterY($frame) + $ystep_size" ] + if {$nxc < $xl} { set nxc $xl } + if {$nxc > $xu} { set nxc $xu } + if {$nyc < $yl} { set nyc $yl } + if {$nyc > $yu} { set nyc $yu } + + # Finally, send the command to move the frame. + send client zoomAbs \ + $frameZoomX($frame) $frameZoomY($frame) $nxc $nyc \ + $frameOffsetX($frame) $frameOffsetY($frame) +} + +proc resetView {param old new} { + global zoomindex xcen ycen frames + global frameWidth frameHeight + + if {$new == "done"} { + foreach i $frames { + send client setFrame $i + set xcen [expr $frameWidth / 2] + set ycen [expr $frameHeight / 2] + send client zoom 1 1 $xcen $ycen + set zoomindex($i) 0 + send client setColormap Grayscale + normalize + } + send client setFrame 1 + } +}; #send initialize addCallback resetView + + +# CURSOR READ stuff. +proc setCursorMode {param old new} \ +{ + global cursorMode + + if {$new == "on"} { + send imagewin "activate; setCursorType ginMode" + set cursorMode 1 + } elseif {$new == "off"} { + send imagewin "setCursorType idle; deactivate" + set cursorMode 0 + } +} + +proc keyInput {widget event sx sy data} \ +{ + global cursorMode frame + + if {!$cursorMode || $event != "keyPress"} \ + return + if {[lindex $data 0] == "??"} \ + return + + # Convert raw screen coordinates to raster pixel coordinates. + send imagewin unmapPixel $sx $sy raster rx ry + + # Return the cursor value and exit cursor mode. + send client retCursorVal $rx $ry $frame 1 [lindex $data 0] +} + +proc resetCursorMode args { + global cursorMode frame + if {$cursorMode} { + send imagewin getCursorPos x y + send client retCursorVal $x $y $frame 1 ^D + } +}; send initialize addCallback resetCursorMode + +send cursorMode addCallback setCursorMode +send imagewin addCallback keyInput input + + +# MARKER stuff. The active marker is determined by the global variable +# "marker", which is the marker the pointer is in, or which the pointer +# was most recently in. + +# Translations when pointer is inside marker. +set markerTranslations { \ +!Shift : m_rotateResize() + : m_moveResize() + !Shift : m_raise() m_markpos() + : m_raise() m_markposAdd() + : m_redraw() m_destroyNull() + : m_lower() + : popup(markerMenu) + : popdown(markerMenu) + !Ctrl b: call(prevFrame,$name) + !Ctrl f: call(nextFrame,$name) + !Ctrl h: call(move_cursor,-1,0) + !Ctrl j: call(move_cursor,0,1) + !Ctrl k: call(move_cursor,0,-1) + !Ctrl l: call(move_cursor,1,0) + !Ctrl n: call(normalize) + !Ctrl c: call(cpZoomAction,centerFrame) + !Ctrl i: call(cpInvert) + !Ctrl m: call(cpMatchFrames) + !Ctrl r: call(cpRegisterFrames) + !Ctrl p: call(togglePanner) + !Alt 1: call(cpSetFrame,frame1) + !Alt 2: call(cpSetFrame,frame2) + !Alt 3: call(cpSetFrame,frame3) + !Alt 4: call(cpSetFrame,frame4) + !Ctrl 1: call(cpZoom,1,1,fixed) + !Ctrl 2: call(cpZoom,2,2,fixed) + !Ctrl 3: call(cpZoom,3,3,fixed) + !Ctrl 4: call(cpZoom,4,4,fixed) + !Ctrl 5: call(cpZoom,5,5,fixed) + !Ctrl 6: call(cpZoom,6,6,fixed) + !Ctrl 7: call(cpZoom,7,7,fixed) + !Ctrl 8: call(cpZoom,8,8,fixed) + !Ctrl 9: call(cpZoom,9,9,fixed) + BackSpace: m_deleteDestroy() + Delete: m_deleteDestroy() + : m_input() + : track-cursor() call(wcsUpdate,$x,$y) call(magnifierMapImage,$x,$y) +} + +# Popup menu in effect when inside marker. +createMenu markerMenu imagewin { + { Marker f.title } + { f.dblline } + { Zoom f.exec { + zoomMarker $marker equal + send $marker destroy + } } + { Fill f.exec { + zoomMarker $marker fill + send $marker destroy + } } + { Print f.exec { + send $marker getRect interior x0 y0 nx ny + setPrintCorners $x0 [expr $y0 + $ny -1] \ + [expr $x0 + $nx -1] $y0 + send client print $x0 $y0 $nx $ny + } } + { Save f.exec { + send imagewin setCursorType busy + send $marker getRect interior x0 y0 nx ny + send client save $x0 $y0 $nx $ny + send imagewin setCursorType idle + } } + { Info f.exec { + send infoText append \ + [format "%s\n" [send $marker getRegion unmap]] + } } + { Unrotate f.exec { + send $marker setAttribute rotangle 0 + } } + { f.dblline } + { Color f.menu markerColor } + { Type f.menu markerType } + { f.dblline } + { Destroy f.exec { + send $marker destroy + } } +} + +createMenu markerType markerMenu { + { Type f.title } + { f.dblline } + { Rectangle f.exec "m_setType $marker rectangle" } + { Box f.exec "m_setType $marker box" } + { Circle f.exec "m_setType $marker circle" } + { Ellipse f.exec "m_setType $marker ellipse" } + { Polygon f.exec "m_setType $marker polygon" } +} + +createMenu markerColor markerMenu { + { Color f.title } + { f.dblline } + { "" f.exec "m_setColor $marker black" + bitmap solid foreground black } + { "" f.exec "m_setColor $marker white" + bitmap solid foreground white } + { "" f.exec "m_setColor $marker red" + bitmap solid foreground red } + { "" f.exec "m_setColor $marker green" + bitmap solid foreground green } + { "" f.exec "m_setColor $marker blue" + bitmap solid foreground blue } + { "" f.exec "m_setColor $marker magenta" + bitmap solid foreground magenta } + { "" f.exec "m_setColor $marker cyan" + bitmap solid foreground cyan } + { "" f.exec "m_setColor $marker yellow" + bitmap solid foreground yellow } +} + +proc m_setType {marker type} { + send $marker "markpos; set type $type; redraw" +} +proc m_setColor {marker color} { + send $marker "markpos; + set lineColor $color; set highlightColor $color; redraw" +} + +# Callback executed when a marker gets or loses the focus. +proc selectMarker {active_marker event event_data} \ +{ + global marker + switch $event { + focusIn { set marker $active_marker } + focusOut { } + } +} + +# Create marker action. Makes a new marker. +proc makeMarker {parent x y} \ +{ + global markerTranslations markno + set marker marker$markno; incr markno + + send $parent createMarker $marker \ + type rectangle \ + createMode interactive \ + translations $markerTranslations \ + x $x \ + y $y + + send $marker addCallback selectMarker focusIn focusOut +} + + + +# WCSBOX -- Real time coordinate display. + +set track_enable 0 +set last_x 0 +set last_y 0 + +proc wcsUpdate {x y} \ +{ + global track_enable frame pixtab_up tabTop + global frameWidth frameHeight redraw_compass + global ism_enable wcsLabels last_x last_y + global ct_warn plotSpeed doHcut doVcut + + + # If the cursor was frozen release it now. + if {$ct_warn} { + curtrack_destroy + } + + # Convert screen coords to raster pixel. + send imagewin unmapPixel $x $y raster rx ry rz + + # Set the current frame to the frame the pointer is within. + if {$frame && $raster} { + set track_frame [send client getFrame $raster] + if {$frame != $track_frame} { + send client setFrame $track_frame + } + } + + # Update coords box. + if {$raster} { + set text [send client encodewcs $rx $ry $rz] + scan $text "%g %g %g" nx ny nz + } else { + set text [format " %7.2f %7.2f %9.1f " $rx $ry $rz] + set nx $rx ; set ny $ry ; set nz $rz + } + + # Update the coords panel and pixel table. + wcsFmtSValue $nz + if {$pixtab_up} { + updatePixelTable $x $y $nx $ny + } + + # If the ISM is running update the coords box with all the selected + # options, otherwise just write the one-line frame wcs coords. + if {$ism_enable} { + updateCoordsBox + + } else { + # Update the on-screen marker. + if {$track_enable} { + send wcsbox "set text \{$text\}; redraw noerase" + } + + # Update the control panel readout (always done). + if {$wcsLabels} { + set ln [format " X: %12s Y: %12s WCS: Display" $nx $ny] + } else { + set ln [format " %12s %12s Display" $nx $ny] + } + send wtWcs1 set string $ln + + if {$redraw_compass} \ + drawCompass + } + + + # Update the cut-plots if enabled. If we're set for speed the don't + # track the really large cursor motions, wait till the differences are + # small indicating a finer motion. + if {$doHcut || $doVcut} { + set dist [ expr "sqrt(pow(($last_x - $x),2) + pow(($last_y - $y),2))" ] + if {($plotSpeed && $dist < 30) || ! $plotSpeed} { + cutPlots $x $y + } + } + + # Save the position so we can track differences with last position. + set last_x $x + set last_y $y +} + + +proc setTrack {state} \ +{ + global ism_enable track_enable wcsboxGeom + global winWidth winHeight up_todo + + if {$state} { + if {$track_enable} \ + return + + send imagewin createMarker wcsbox { + type text + createMode noninteractive + width 27ch + height 1ch + lineWidth 0 + imageText true + textBgColor black + textColor yellow + visible false + } + + set box_width [send wcsbox get width] + set box_height [send wcsbox get height] + set defGeom [format "%sx%s-5-5" $box_width $box_height] + send imagewin parseGeometry $wcsboxGeom $defGeom x y width height + + send wcsbox setAttributes \ + x $x \ + y $y \ + activated true \ + visible true \ + sensitive true + + send wcsbox { + addCallback wcsboxDestroyCallback destroy + addCallback wcsboxMoved moveResize + } + + send imagewin addCallback wcsboxWindowResize resize + set track_enable 1 + send imagewin getCursorPos x y + wcsUpdate $x $y + magnifierMapImage $x $y + + # Turn on the option toggles on the control panel. + foreach n {1 2 3 4} { + if {[send sysWcs$n get label] != "None"} { + send wiWcs$n set on True + } + } + if {$ism_enable} { + resizeCoordsBox $up_todo + } + + } elseif {$track_enable} { + set track_enable 0 + send wcsbox destroy + + # Turn off the option toggles on the control panel. + foreach w {wiWcs1 wiWcs2 wiWcs3 wiWcs4} { send $w set on False } + resizeCoordsBox 0 + } + updateCoordsBox +} + +proc wcsboxDestroyCallback args \ +{ + global track_enable + send imagewin deleteCallback wcsboxWindowResize + set track_enable 0 +} + +# If the window is resized make the wcsbox track the corner. +proc wcsboxWindowResize args \ +{ + global track_enable + global wcsboxGeom + + if {$track_enable} { + # Get new location. + set box_width [send wcsbox get width] + set box_height [send wcsbox get height] + set defGeom [format "%sx%s-5-5" $box_width $box_height] + send imagewin parseGeometry $wcsboxGeom $defGeom x y width height + + # Move the marker. + send wcsbox "\ + deleteCallback wcsboxMoved; \ + markpos; setAttributes x $x y $y; redraw; \ + addCallback wcsboxMoved moveResize" + set wcsboxGeom [send imagewin getGeometry $x $y $width $height] + } +} + +proc wcsboxMoved {marker event position} \ +{ + global wcsboxGeom + send wcsbox getRect boundary x y width height + set wcsboxGeom [send imagewin getGeometry $x $y $width $height] +} + +proc resetWcsbox {param old new} \ +{ + global track_enable wcsboxGeom displayCoords + if {$new == "done"} { + setTrack [true $displayCoords] + } elseif {$track_enable} { + setTrack 0 + if {$new == "restart"} { + set wcsboxGeom -5-5 + } + } +}; send initialize addCallback resetWcsbox + + + +#--------------------- +# FRAME BLINK. +#--------------------- +set blinkId 0 +set blinkIndex 0 + +proc toggleBlink args \ +{ + global blinkId blinkRate blinkIndex + global optionsMenuDescription + + if {$blinkId} { + deleteTimedCallback $blinkId + set blinkId 0 + } else { + set blinkId [postTimedCallback blink [expr int($blinkRate * 1000)]] + } + + set blinkIndex 0 + editMenu optionsMenu viewButton $optionsMenuDescription +} + +proc blink args \ +{ + global blinkId blinkRate blinkFrames blinkIndex + + send client setFrame [lindex $blinkFrames $blinkIndex] + incr blinkIndex + if {$blinkIndex >= [llength $blinkFrames]} { + set blinkIndex 0 + } + + set blinkId [postTimedCallback blink [expr int($blinkRate * 1000)]] +} + +proc resetBlink args \ +{ + global blinkId + if {$blinkId} \ + toggleBlink +}; send initialize addCallback resetBlink + + + +# Normalize -- Reset the view parameters for the current frame. +proc normalize args \ +{ + global zoomindex zoomfactor + global frameWidth frameHeight + global xcen ycen frame + + #set zoomindex($frame) 0 + #set xcen [expr $frameWidth / 2] + #set ycen [expr $frameHeight / 2] + #send client zoom 1 1 $xcen $ycen + send client updateColormap 0.5 1.0 +} + + +# Popdown menus. +createMenu fileMenu fileButton { + { "Info" f.exec { panelTabToggle info_panel } } + { "Load" f.exec { + panelTabToggle load_panel + set panel_up 1 + } } + { "Save" f.exec { Save } } + { "Save As..." f.exec { panelTabToggle save_panel } } + { "Print" f.exec { + send imagewin setCursorType busy + Print + send imagewin setCursorType idle + } } + { "Print Setup" f.exec { panelTabToggle print_panel } } + { f.dblline } + { "Reset" f.exec { + # Do a hard reset. + send client Reset + #resetView initialize done done + } } + { "Debug Panel" f.exec { tclPanel 1 } } + { "Quit" f.exec { Quit } } +} + +createMenu viewMenu viewButton { + { "Next frame" f.exec nextFrame } + { "Prev frame" f.exec prevFrame } + { f.dblline } + { "Colormap" f.menu cmapMenu } + { "Flip" f.menu flipMenu } + { f.dblline } + { "Equal aspect" f.exec { + set xmag $frameZoomX($frame) + set ymag $frameZoomY($frame) + set zoom [expr ($xmag + $ymag) / 2.0] + cpZoom $zoom $zoom fixed + } } + { "Integer zoom" f.exec { + set xmag [expr round ($frameZoomX($frame))] + set ymag [expr round ($frameZoomY($frame))] + cpZoom $xmag $ymag fixed + } } + { "Toggle zoom" f.exec toggleZoom } + { "Unzoom" f.exec { + set zoomindex($frame) 0 + set mag $zoomfactor($zoomindex($frame)) + send client zoom $mag $mag $xcen $ycen + } } +} + +createMenu cmapMenu viewMenu { + { "Normalize" f.exec normalize } + { "Invert" f.exec cpInvert } + { "Optimize" f.exec cpOptimize sensitive false } + { f.dblline } + { "Grayscale" f.exec "send client setColormap Grayscale" } + { "Color" f.exec "send client setColormap Color" } + { "Heat" f.exec "send client setColormap Heat" } + { "HSV" f.exec "send client setColormap HSV" } + { "AIPS0" f.exec "send client setColormap AIPS0" } + { "Halley" f.exec "send client setColormap Halley" } + { "Ramp" f.exec "send client setColormap Ramp" } + { "Standard" f.exec "send client setColormap Standard" } + { "Staircase" f.exec "send client setColormap Staircase" } + { "Rainbow1" f.exec "send client setColormap Rainbow1" } + { "Rainbow2" f.exec "send client setColormap Rainbow2" } + { "Random8" f.exec "send client setColormap Random8" } +} + +createMenu flipMenu viewMenu { + { "Flip X" f.exec xflip } + { "Flip Y" f.exec yflip } + { "Flip XY" f.exec xyflip } +} + +set optionsMenuDescription { + { "Autoscale" f.exec { + set value [send autoscaleButton get on] + send autoscaleButton set on [expr !$value] + cpSetAutoscale + } } + { "Antialias" f.exec { + set value [send antialiasButton get on] + send antialiasButton set on [expr !$value] + cpSetAntialias + } } + { "Panner" f.exec { setPanner [expr !$panner_enable] } } + { "Magnifier" f.exec { setMagnifier [expr !$magnifier_enable] }} + { "Coords box" f.exec { setTrack [expr !$track_enable] } } + { "Tile frames" f.exec { + set value [send tileFramesButton get on] + send tileFramesButton set on [expr !$value] + cpSetTileFrames + } } + { "Clear frame" f.exec clearFrame } + { "Fit frame" f.exec fitFrame } + { "Match LUTs" f.exec cpMatchFrames } + { "Auto-Register" f.exec cpAutoRegister } + { "Register" f.exec cpRegisterFrames } + { {$blinkId ? "Stop blink" : "Blink frames"} + f.exec toggleBlink } + { f.dblline } + { "Control Panel" f.exec { panelTabToggle display_panel } } + { "Print Panel" f.exec { panelTabToggle print_panel } } + { "Load Panel" f.exec { panelTabToggle load_panel } } + { "Save Panel" f.exec { panelTabToggle save_panel } } +}; createMenu optionsMenu optionsButton $optionsMenuDescription + + + +#------------------------------- +# Frozen Cursor Warning Message +#------------------------------- + +set ct_warn 0 + +proc curtrack_msg { x y args } \ +{ + global ct_warn last_x last_y winHeight winWidth + + + if {! $ct_warn == 0} { + return + } + + send imagewin createMarker curtrack_warn { + type text + createMode noninteractive + width 25ch + height 21 + lineWidth 0 + imageText true + textBgColor red + textColor yellow + visible true + sensitive true + activated true + x 5 + y 5 + } + + send curtrack_warn "set text \{ CURSOR READOUT FROZEN \}" + set ypos [ expr ($winHeight - 25) ] + send curtrack_warn "markpos; setAttributes x 5 y $ypos; redraw" + send curtrack_warn "redraw noerase" + set ct_warn 1 + + # Mark the position of the cursor. + send imagewin createMarker x_curpos \ + type box \ + createMode noninteractive \ + lineColor red \ + x 1 \ + y $last_y \ + width $winWidth \ + height 1 \ + activated True \ + visible True \ + sensitive False + + send imagewin createMarker y_curpos \ + type box \ + createMode noninteractive \ + lineColor red \ + x $last_x \ + y 1 \ + width 1 \ + height $winHeight \ + activated True \ + visible True \ + sensitive False + + # Raise the coordinate marker so we can see where we are. + send wcsbox raise +} + + +proc curtrack_destroy args \ +{ + global ct_warn + + if {$ct_warn} { + send curtrack_warn destroy + send x_curpos destroy + send y_curpos destroy + set ct_warn 0 + } +} + + +################################################################################ +# CURSOR CENTEROID AND AUTO-REGISTER FUNCTIONS. +################################################################################ + +# Set the centroiding box size. +set ctid 0 +set cid 0 + +proc cbxDestroy args \ +{ + global centerBoxSize cid ctid + catch { + if {$ctid != 0} { + send cbm$cid destroy + deleteTimedCallback $ctid + set ctid 0 + } + } +} + +proc setCtrBoxSize { x y delta args } \ +{ + global centerBoxSize cid ctid + global cpXscale cpYscale + + incr centerBoxSize $delta + if {$centerBoxSize <= 1} { set centerBoxSize 1 } + + # Kill off any old markers before drawing the new one. + catch { + if {$ctid != 0} { + send cbm$cid destroy + deleteTimedCallback $ctid + set ctid 0 + } + } + + # create a transient marker indicating the centering box and post a + # callback to delete it in about a second. + incr cid + send imagewin createMarker cbm$cid \ + type box \ + createMode noninteractive \ + lineColor red \ + x $x \ + y $y \ + width [expr $cpXscale * $centerBoxSize] \ + height [expr $cpXscale * $centerBoxSize] \ + activated True \ + visible True \ + sensitive False + + set ctid [ postTimedCallback cbxDestroy 500] +} + + +# Box size is half-width of the marker size. Value is the slider value. +set focusBoxSize $winWidth +set focusValue 100.0 +set fid 0 +set ftid 0 +set moving 0 + +proc setFocusBoxSize { sz args } \ +{ + global focusBoxSize fid ftid focusValue moving + global winWidth winHeight + + + if { $moving == 0 } { + return done + } + + if { $winWidth < $winHeight } { + set max [expr $winWidth / 2 - 64] + } else { + set max [expr $winHeight / 2 - 64] + } + set focusBoxSize [expr 64 + ($sz * $max) - 1] + #send client setOption cmfocus [expr ($focusBoxSize / 2)] + send client setOption cmfocus $focusBoxSize + + # Destroy any existing markers. + catch { + if {$ftid != 0} { + send fm$fid destroy + set ftid 0 + } + } + + # create a transient marker indicating the centering box and post a + # callback to delete it in about a second. + incr fid + send imagewin createMarker fm$fid \ + type box \ + createMode noninteractive \ + lineColor green \ + lineWidth 4 \ + x [expr $winWidth / 2] \ + y [expr $winHeight / 2] \ + width $focusBoxSize \ + height $focusBoxSize \ + activated True \ + visible True \ + sensitive False + + set ftid [ postTimedCallback fbxDestroy 500] + set moving 0 +} + +proc fbxDestroy args \ +{ + global fid ftid moving + catch { + if {$ftid != 0} { + send fm$fid destroy + set ftid 0 + } + } +} + +proc setFocusSize { widget cbtype x y } \ +{ + global focusValue ftid moving + + # Only update once we've stopped the movement. + if { $x == $focusValue && $moving == 1 } { + set ftid [ postWorkProc setFocusBoxSize $x ] + } else { + set moving 1 + } + set focusValue $x +} ; send focusSlider addCallback setFocusSize scroll + + +# Compute a centroid offset for the current position to peak-up on the +# feature. + +proc centroid { x y type args } \ +{ + global centerBoxSize + global cpXscale cpYscale + + # Convert to image coords. + set sz [expr "int ($centerBoxSize * $cpXscale)"] + + # Get the centroid position. + if {$type != "min"} { + if {[send peakupButton get on]} { + set center [ send client centroid $x $y $sz ] + } else { + set center [ send client centroid $x $y $sz max ] + } + } else { + set center [ send client centroid $x $y $sz min ] + } + + # Now reposition the cursor. + set xoff [lindex $center 0 ] + set yoff [lindex $center 1 ] + move_cursor $xoff $yoff +} + + +# Set the auto-register center offset position +proc offset { x y args } \ +{ + global frame blinkFrames auto_reg + global frameCenterX frameCenterY + global frameOffsetX frameOffsetY + + # No-op of auto-register isn't on. + if { $auto_reg == 0 } { + Wexec client "Auto-Register is not enabled!" + return + } + + # If we're not in the blink frames list ignore the request. + if { [string first $frame $blinkFrames] == -1 } { + Wexec client "Frame not in current\nregister list." + return + } + + set rx $x; set ry $y + set raster 0 + + # Convert raw screen coordinates to frame buffer raster coordinates. + send imagewin unmapPixel $x $y raster rx ry + + # Select a pixel. + set xoff [expr "int ($rx) - $frameCenterX($frame)" ] + set yoff [expr "int ($ry) - $frameCenterY($frame)" ] + + set frameOffsetX($frame) $xoff + set frameOffsetY($frame) $yoff + + # Adjust the display. + send client setOffset $xoff $yoff +} + + + +################################################################################ +# MAIN CONTROL PANEL +################################################################################ + + +# Global control panel buttons. +# ------------------------------- +proc cpInitialize args \ +{ + send imagewin setCursorType busy + send client initialize + send imagewin setCursorType idle +} +send initializeButton addCallback cpInitialize +send normalizeButton addCallback normalize + +# Temporarily deactivate some buttons. +send optimizeButton setSensitive false + +#----------------------------------------------------------------------------- + +foreach i $frames {set saveView($i) "1 1"} + +send prevFrame set bitmap larrow +send nextFrame set bitmap rarrow +send contrastLabel set bitmap contrast +send brightnessLabel set bitmap brightness +send contrastSlider resizeThumb 0.1 1.0 +send brightnessSlider resizeThumb 0.1 1.0 +send focusSlider "resizeThumb 0.1 1.0 ; moveThumb 1.0" + + +# panel -- Toggle control panel display. +proc panel args \ +{ + global panel_up + if {$panel_up} { + send panelShell unmap + set panel_up 0 + } else { + send panelShell map + set panel_up 1 + } +} + +proc pbTracePanel {name element op} \ +{ + catch { + upvar $name panel_up + send controlButton set state $panel_up + } +} ; trace variable panel_up w pbTracePanel + + +# resetPanel -- Calling during startup or in an initialize, to reset things. +proc resetPanel {param old new} \ +{ + global frame nframes frames + global displayPanner displayMagnifier displayCoords + global blinkFrames warnings peakCentroid + + switch $new { + startup { + } + restart { foreach i $frames { + send frame$frame set on 0 + } + + # Initialize to hide the extra frames. + send frlistBox set width 30 + } + done { if {$frame} { + send frame$frame set on 1 + } + + cpResetBlink + set button 1 + foreach i {1 2 3 4} { + send blinkFrame$button set label $i + incr button + } + for {set i 1} {$i <= 16} {incr i} { + send brFrame$i set label $i + } + + cpResetEnhance + send pannerButton set on [true $displayPanner] + send magnifierButton set on [true $displayMagnifier] + send coordsBoxButton set on [true $displayCoords] + send warningsButton set on $warnings + send peakupButton set on [true $peakCentroid] + } + } +}; send initialize addCallback resetPanel + + + +# Control Panel Tabs widget procedures. +#---------------------------------------- + +set cpTabs { display_panel print_panel load_panel save_panel \ + info_panel wcs_panel tile_panel} +set tabTop "display_panel" + + +# Resize the control panel depending on the Tab selected. +proc cpResizeCB { widget event a b c d e args } \ +{ + global tabTop fileList + + # Handle only the first exposure event generated. + if { $a == 0 && $b == 0 && $c == 0 && $d == 0 && $e == 0 } { + set tabTop $widget + + switch $widget { + display_panel { send panel set height 595 } + print_panel { send panel set height 545 } + load_panel { send panel set height 485 + if { [send browseHdrs get on] } { + send imageList setList $fileList resize + } else { + send client setLoadOption rescan + } + } + save_panel { send panel set height 325 } + info_panel { send panel set height 380 } + tile_panel { send panel set height 405 } + wcs_panel { setCoordPanelHeight } + } + } +} ; foreach w $cpTabs { send $w addEventHandler cpResizeCB exposureMask } + + +proc panelDismiss args \ +{ + global panel_up + send panelShell unmap + set panel_up 0 +} ; send panelClose addCallback panelDismiss + + +proc panelTabToggle { panel args } \ +{ + global tabTop panel_up TabToWidget + + if {$tabTop == $panel && $panel_up} { + send panelShell unmap + send $TabToWidget($panel) set state 0 + set panel_up 0 + + } else { + # Special cases for each panel. + if {$panel == "load_panel"} { + send client setLoadOption rescan + } + + send panelTabs setTop $panel + set tabTop $panel + + # Now fire it up if it's not already open. + if {$panel_up == 0} { + send panelShell map + set panel_up 1 + } + + } +} + +proc displayPanel args { panelTabToggle display_panel } +proc infoPanel args { panelTabToggle info_panel } +proc loadPanel args { panelTabToggle load_panel } +proc savePanel args { panelTabToggle save_panel } +proc printPanel args { panelTabToggle print_panel } +proc tilePanel args { panelTabToggle tile_panel } +proc wcsPanel args { panelTabToggle wcs_panel } + + + + +# Frame selection. +# ------------------------------- +proc cpSetFrame {widget args} \ +{ + send $widget set on 0 + send client setFrame [send $widget get label] +} + +proc cpFrameChanged {param old new} \ +{ + global frameCache + + if {$old > 0} { + send frame$old set on 0 + } + if {$new > 0} { + send frame$new set on 1 + } + + # The first time we request frame 5 or higher reset + # the extra frame buttons on the control panel to make + # them visible. + if {$new >= 5} { + send frlistBox set width 49 + } + + # Update the header panel object list. + catch { + # Only update when the header panel is open. + if {[info exists frameCache($new)] && [send imageHeader get on]} { + setHdrObjMenu $new + getHeader [lindex $frameCache($new) 0] [lindex $frameCache($new) 1] + } + } +} + +send prevFrame addCallback prevFrame +send nextFrame addCallback nextFrame +send frame addCallback cpFrameChanged +for {set i 1} {$i <= 16} {incr i} {send frame$i addCallback cpSetFrame} + +# Initialize to hide the extra frames. +send frlistBox set width 30 + +proc blinkPanelCB { widget type state args } \ +{ + if {$state} { + send blink_panel map + } else { + send blink_panel unmap + } +} ; send blinkPanel addCallback blinkPanelCB + +proc blinkPanelClose args \ +{ + send blink_panel unmap + send blinkPanel set state 0 +} ; send brClose addCallback blinkPanelClose + + + +# Frame buttons. +proc cpFrameAction {widget args} \ +{ + global frameZoomX frameZoomY frame + switch $widget { + aspect { set xmag $frameZoomX($frame) + set ymag $frameZoomY($frame) + set zoom [expr round (($xmag + $ymag) / 2.0)] + cpZoom $zoom $zoom fixed + } + flipX { send client flip x } + flipY { send client flip y } + flipXY { send client flip x y } + clearFrame { clearFrame } + fitFrame { fitFrame } + } +} +foreach widget {aspect flipX flipY flipXY clearFrame fitFrame} { + send $widget addCallback cpFrameAction +} + +# clearFrame -- Clear the current display frame. +proc clearFrame args \ +{ + global warnings + if {$warnings} { + Wexec client \ + "Clearing the frame will destroy\n\ + all data in the frame" \ + clearFrame + } else { + send client clearFrame + } +} + +# fitFrame -- Resize the display window to fit the frame buffer. +proc fitFrame args \ +{ + global frameWidth frameHeight winWidth winHeight + set dw [expr [send display get width] - $winWidth] + set dh [expr [send display get height] - $winHeight] + send display "resize [expr $frameWidth + $dw] [expr $frameHeight + $dh]" +} + +proc initFitFrame { param old new } \ +{ + if { [lindex $new 0] == "resize"} { + fitFrame + } + pannerMapImage init +}; send frameFit addCallback initFitFrame + + + +# Zoom and pan buttons. +# ------------------------------- +proc cpZoomAction {widget args} \ +{ + global frameWidth frameHeight + + switch $widget { + x1 { cpZoom 1 1 fixed } + z2 { cpZoom 2 2 fixed } + z3 { cpZoom 3 3 fixed } + z4 { cpZoom 4 4 fixed } + z5 { cpZoom 5 5 fixed } + z8 { cpZoom 8 8 fixed } + + d2 { cpZoom [expr 1.0/2] [expr 1.0/2] fixed } + d3 { cpZoom [expr 1.0/3] [expr 1.0/3] fixed } + d4 { cpZoom [expr 1.0/4] [expr 1.0/4] fixed } + d5 { cpZoom [expr 1.0/5] [expr 1.0/5] fixed } + d8 { cpZoom [expr 1.0/8] [expr 1.0/8] fixed } + + zoomIn { cpZoom 2.0 2.0 relative } + zoomOut { cpZoom 0.5 0.5 relative } + + centerFrame { send client pan \ + [expr $frameWidth/2.0] \ + [expr $frameHeight/2.0] + } + toggleZoom { toggleZoom } + } +} + +proc cpZoom {zoom_x zoom_y mode} \ +{ + global frameZoomX frameZoomY zoomindex frame + global frameOffsetX frameOffsetY frameCenterX frameCenterY + + if {$mode == "fixed"} { + #send client zoom $zoom_x $zoom_y + send client zoomAbs $zoom_x $zoom_y \ + $frameCenterX($frame) $frameCenterY($frame) \ + $frameOffsetX($frame) $frameOffsetY($frame) + } else { + #send client zoom \ + # [expr $frameZoomX($frame) * $zoom_x] \ + # [expr $frameZoomY($frame) * $zoom_y] + send client zoomAbs \ + [expr $frameZoomX($frame) * $zoom_x] \ + [expr $frameZoomY($frame) * $zoom_y] \ + $frameCenterX($frame) $frameCenterY($frame) \ + $frameOffsetX($frame) $frameOffsetY($frame) + } + + set zoomindex($frame) 0 +} + +proc toggleZoom args \ +{ + global frameZoomX frameZoomY frameCenterX frameCenterY + global frameWidth frameHeight saveView frame + + if {$frameZoomX($frame) != 1 && $frameZoomY($frame) != 1} { + set saveView($frame) \ + "$frameZoomX($frame) $frameZoomY($frame) \ + $frameCenterX($frame) $frameCenterY($frame)" + send client zoom 1 1 \ + [expr $frameWidth/2.0] \ + [expr $frameHeight/2.0] + } else { + send client zoom $saveView($frame) + } +} + +foreach widget { toggleZoom centerFrame zoomIn zoomOut \ + x1 z2 z3 z4 z5 z8 d2 d3 d4 d5 d8 } { + send $widget addCallback cpZoomAction +} + +# Frame data display. +# ------------------------------- +set cpFrame 0 +set cpXcen 0 +set cpYcen 0 +set cpXmag 0 +set cpYmag 0 +set cpXscale 0 +set cpYscale 0 +set cpXoff 0 +set cpYoff 0 + +proc cpDisplayFrameData {name old new} \ +{ + global cpFrame cpXcen cpYcen cpXoff cpYoff + global cpXmag cpYmag cpXscale cpYscale + + set update 0 + switch $name { + frame { if {$new != $cpFrame} { + set cpFrame $new + set update 1 + } + } + frameView { # Parse the frameView input. + set xmag [lindex $new 0]; set ymag [lindex $new 1] + set xcen [lindex $new 2]; set ycen [lindex $new 3] + set xnorm [lindex $new 4]; set ynorm [lindex $new 5] + set xoff [lindex $new 6]; set yoff [lindex $new 7] + + # We need client coords and the overall scale factors. + set text [send client encodewcs $xcen $ycen] + set xcen [lindex $text 0] + set ycen [lindex $text 1] + set xscale [expr $xmag * $xnorm] + set yscale [expr $ymag * $ynorm] + + if {$xcen != $cpXcen || $ycen != $cpYcen || + $xmag != $cpXmag || $ymag != $cpYmag || + $xoff != $cpXoff || $yoff != $cpYoff || + $xscale != $cpXscale || $yscale != $cpYscale} { + + set cpXcen $xcen; set cpXscale $xscale + set cpYcen $ycen; set cpYscale $yscale + set cpXmag $xmag; set cpXoff $xoff; + set cpYmag $ymag; set cpYoff $yoff; + set update 1 + } + } + } + + if {$update} { + set header [format "-- Frame %d --" $cpFrame] + set center [format "X center: %0.1f\nY center: %0.1f" $cpXcen $cpYcen] + if {int($cpXmag) >= 10} { + set zoom1 [format " X zoom: %0.1f" $cpXmag] + set zoom2 [format " Y zoom: %0.1f" $cpYmag] + } else { + set zoom1 [format "X zoom: %0.1f" $cpXmag] + set zoom2 [format "Y zoom: %0.1f" $cpYmag] + } + if {int($cpXscale) >= 10} { + set scale1 [format "X scale: %0.1f" $cpXscale] + set scale2 [format "Y scale: %0.1f" $cpYscale] + } else { + set scale1 [format "X scale: %0.2f" $cpXscale] + set scale2 [format "Y scale: %0.2f" $cpYscale] + } + set offset [format " Offset: (%0.1f,%0.1f)" $cpXoff $cpYoff] + + send frameData set label [format "%s\n%s\n%s\n%s\n%s\n%s\n%s" \ + $header $center $scale1 $scale2 $zoom1 $zoom2 $offset \ + ] + } +}; foreach p {frame frameView} {send $p addCallback cpDisplayFrameData} + + +# Frame enhancement. +# ------------------------------- +set cpEnhanceDisable 0 +set cpEnhanceId 0 +set cpEnhanceMode none +set cpEnhanceVal 0 +set cpListItem none + +# Windowing the colormap is slow when the mouse is not in the image window, +# so it is necessary to execute the windowColormap in a work procedure. +# This allows any number of slider motion events to be processed for each +# windowColormap, preventing slider events from queueing up. + +proc cpResetEnhance args \ +{ + global cpListItem cpEnhanceId + set cpListItem none + set cpEnhanceId 0 +} + +proc cpSetEnhancement {widget cbtype x y} \ +{ + global cpEnhanceMode cpEnhanceVal cpEnhanceId cpEnhanceDisable + set cpEnhanceMode $widget + set cpEnhanceVal $x + if {!$cpEnhanceId && !$cpEnhanceDisable} { + set cpEnhanceId [postWorkProc cpEnhanceProc] + } +} +proc cpEnhanceProc args \ +{ + global cpEnhanceMode cpEnhanceVal cpEnhanceId + global enhancement frame maxContrast + set val $cpEnhanceVal + + if {$cpEnhanceMode == "contrastSlider"} { + set contrast [lindex $enhancement($frame) 2] + send client windowColormap [lindex $enhancement($frame) 1] \ + [expr (($contrast < 0) ? -$val : $val) * $maxContrast] + } else { + send client windowColormap $val + } + + set cpEnhanceId 0 + return done +} + +proc cpInvert args \ +{ + global enhancement frame + set contrast [lindex $enhancement($frame) 2] + send client updateColormap [lindex $enhancement($frame) 1] \ + [expr -1.0 * $contrast] +} + +proc cpDisplayEnhancement {param old new} \ +{ + global cpEnhanceId maxContrast cpEnhanceDisable + global cpListItem enhancement frame + + if {!$frame} \ + return + set enhance $enhancement($frame) + if {[llength $enhance] < 3} \ + return + + set colortable [lindex $enhance 0] + set offset [lindex $enhance 1] + set scale [lindex $enhance 2] + + send colordata set label [format "-- %s --\nCon %0.2f Brt %0.2f" \ + $colortable $scale $offset] + + if {$colortable != $cpListItem} { + send colorlist highlight $colortable + set cpListItem $colortable + } + + if {!$cpEnhanceId && !$cpEnhanceDisable} { + set cpEnhanceDisable 1 + send contrastSlider moveThumb [expr abs($scale) / $maxContrast] + send brightnessSlider moveThumb $offset + set cpEnhanceDisable 0 + } +} + +foreach i {enhancement frame} { + send $i addCallback cpDisplayEnhancement +} +send contrastSlider addCallback cpSetEnhancement scroll +send brightnessSlider addCallback cpSetEnhancement scroll +send invertButton addCallback cpInvert + + +# Colortable display and selection. +# ------------------------------- +set colorTables {} + +proc cpSetColorList {param old new} \ +{ + set colorTables $new + send colorlist setList $new resize +}; send colortables addCallback cpSetColorList + +proc colorlistResize args \ +{ + global colorTables + send colorlist setList $colorTables resize +}; send colorlist addEventHandler colorlistResize ResizeRedirectMask + +proc cpSelectColor {widget cbtype selections indices} \ +{ + global colortable + foreach selection $selections { + send client setColormap $selection + } +}; send colorlist addCallback cpSelectColor + + +# Frame blink. +# ------------------------------- +send BRtext set label $blinkRate +send brBRtext set label $blinkRate + +proc cpSetBlinkRate {w args} \ +{ + global blinkRate + if {$w == "BRincrease" || $w == "brBRincrease"} { + if {$blinkRate < 0.01} { + set blinkRate 0.125 + } else { + set blinkRate [expr $blinkRate * 2.0] + } + } else { + set blinkRate [expr $blinkRate / 2.0] + if {$blinkRate < 0.01} { + set blinkRate 0 + } + } + send BRtext set label $blinkRate + send brBRtext set label $blinkRate +} +foreach w {BRincrease BRdecrease brBRincrease brBRdecrease} { + send $w addCallback cpSetBlinkRate +} + +proc cpSetBlinkFrame {widget args} \ +{ + global blinkFrames frames nframes + + set frame [send $widget get label] + if {$frame == " "} { + set frame 1 + } else { + incr frame + if {$frame > $nframes} { + set frame " " + } + } + send $widget set label $frame + + set blinkFrames {} + foreach i {1 2 3 4} { + set frame [send blinkFrame$i get label] + if {$frame != " "} { + lappend blinkFrames $frame + } + } +}; foreach i {1 2 3 4} {send blinkFrame$i addCallback cpSetBlinkFrame} + +proc cpBlink {widget args} \ +{ + global blinkRate blinkId + + if {$blinkRate < 0.01} { + send blinkButton set on False + send brBlinkButton set on False + blink + } elseif {($blinkId != 0) != [send $widget get on]} { + toggleBlink + } +} ; foreach w {blinkButton brBlinkButton} {send $w addCallback cpBlink} + + +proc cpAutoRegister {widget type state args} \ +{ + global auto_reg frame frames blinkFrames + global frameZoomX frameZoomY frameOffsetX frameOffsetY + + set auto_reg $state + if {$auto_reg == 1} { + send autoregButton set on True + send brAregButton set on True + } else { + send autoregButton set on False + send brAregButton set on False + } + + # Register the frames to zero the offsets. + send client registerFrames \{$blinkFrames\} + foreach f $frames { + set frameOffsetX($f) 0 + set frameOffsetY($f) 0 + } +} ; foreach w {autoregButton brAregButton} {send $w addCallback cpAutoRegister} + + +proc toggleAutoReg args \ +{ + global auto_reg + if {$auto_reg} { + cpAutoRegister autoregButton dummy 0 + set auto_reg 0 + } else { + cpAutoRegister autoregButton dummy 1 + set auto_reg 1 + } +} + +proc resetAutoReg args \ +{ + global auto_reg + if {$auto_reg} \ + toggleAutoReg +}; send initialize addCallback resetAutoReg + + +proc cpResetBlink args \ +{ + global blinkRate blinkFrames blinkIndex frames + global defaultBlinkRate + + foreach i {1 2 3 4} { + send blinkFrame$i set label " " + } + for {set i 1} {$i <= 16} {incr i} { + send brFrame$i set label $i + } + set blinkRate $defaultBlinkRate + send BRtext set label $blinkRate + send brBRtext set label $blinkRate + set blinkIndex 0 +} +send blinkReset addCallback cpResetBlink +send brReset addCallback cpResetBlink + +proc cpTraceBlink {name element op} \ +{ + upvar $name blinkId + send blinkButton set on [expr $blinkId != 0] + send brBlinkButton set on [expr $blinkId != 0] +}; trace variable blinkId w cpTraceBlink + +proc cpSetBlinkFrames {param old new} \ +{ + global blinkFrames frames + + set blinkFrames {} + foreach i $frames { + if {$i <= $new} { + lappend blinkFrames $i + } + } + cpResetBlink + set button 1 + for {set i 1} {$i <= $new} {incr i} { + if {$i <= 4} { + send blinkFrame$button set label $i + } + send brFrame$button set label $i + incr button + } +}; send nframes addCallback cpSetBlinkFrames + +proc cpRegisterFrames args \ +{ + global frames blinkFrames + global frameOffsetX frameOffsetY + + foreach f $frames { + set frameOffsetX($f) 0 + set frameOffsetY($f) 0 + } + send client registerFrames \{$blinkFrames\} +} +send registerButton addCallback cpRegisterFrames +send brRegButton addCallback cpRegisterFrames + +proc cpMatchFrames args \ +{ + global blinkFrames + send client matchFrames \{$blinkFrames\} +} +send matchButton addCallback cpMatchFrames +send brMatchButton addCallback cpMatchFrames + + +# Options buttons. +# ------------------------------- +proc cpSetPanner {widget args} \ +{ + setPanner [send $widget get on] +}; send pannerButton addCallback cpSetPanner + +proc cpTracePanner {name element op} \ +{ + upvar $name panner_enable + send pannerButton set on $panner_enable +}; trace variable panner_enable w cpTracePanner + +proc cpSetMagnifier {widget args} \ +{ + setMagnifier [send $widget get on] +}; send magnifierButton addCallback cpSetMagnifier + +proc cpTraceMagnifier {name element op} \ +{ + upvar $name magnifier_enable + send magnifierButton set on $magnifier_enable +}; trace variable magnifier_enable w cpTraceMagnifier + +proc cpSetCoordsBox {widget args} \ +{ + setTrack [send $widget get on] +}; send coordsBoxButton addCallback cpSetCoordsBox + +proc cpTraceCoordsBox {name element op} \ +{ + upvar $name track_enable + send coordsBoxButton set on $track_enable +}; trace variable track_enable w cpTraceCoordsBox + +proc cpSetWarnings args \ +{ + global warnings + set warnings [send warningsButton get on] +}; send warningsButton addCallback cpSetWarnings + +proc cpSetAutoscale args \ +{ + set value [send autoscaleButton get on] + send client setOption autoscale [expr {$value ? "True" : "False"}] +}; send autoscaleButton addCallback cpSetAutoscale + +proc cpTrackAutoscale {param old new} \ +{ + send autoscaleButton set on [true $new] +}; send autoscale addCallback cpTrackAutoscale + +proc cpSetAntialias args \ +{ + set value [send antialiasButton get on] + send client setOption antialias [expr {$value ? "True" : "False"}] +}; send antialiasButton addCallback cpSetAntialias + +proc cpTrackAntialias {param old new} \ +{ + send antialiasButton set on [true $new] +}; send antialias addCallback cpTrackAntialias + +proc cpSetTileFrames { widget type state args } \ +{ + global tile_frames tileOpt + + set value [send tileFramesButton get on] + if {$value} { + selectTileOrientation junk junk [tileSelToLabel $tileOpt] + } else { + selectTileOrientation junk junk Disabled + } + send client setOption tileFrames \ + [expr {$value ? "True" : "False"}] \{ $tile_frames \} +} ; send tileFramesButton addCallback cpSetTileFrames + +proc cpTrackTileFrames {param old new} \ +{ + send tileFramesButton set on [true $new] +}; send tileFrames addCallback cpTrackTileFrames + +proc tileFramesToggle args \ +{ + set value [send tileFramesButton get on] + send tileFramesButton set on [expr !$value] + cpSetTileFrames +} + + +################################################################################ +# MAGNIFIER. A subraster around the cursor in the main image window is +# displayed at a high resolution in a marker (known as the magnifier window) +# within the main image window. +################################################################################ + +set magnifier_x 0 +set magnifier_y 0 +set magnifier_width 0 +set magnifier_height 0 +set mrm_width 0 +set mrm_height 0 + +set magnifier_enable 0 +set magnifier_mag_enable 0 +set magnifier_mapping 0 + +createMenu magzoomMenu imagewin { + { "Zoom Factors" f.title } + { f.dblline } + { "Zoom 1" f.exec "setMagnifierZoom 1" } + { "Zoom 2" f.exec "setMagnifierZoom 2" } + { "Zoom 4" f.exec "setMagnifierZoom 4" } + { "Zoom 8" f.exec "setMagnifierZoom 8" } + { "Zoom 16" f.exec "setMagnifierZoom 16" } +} + +# Magnifier window translations. +set magnifierWinTranslations { \ + !Shift : m_rotateResize() + : m_moveResize() + !Shift : m_raise() m_markpos() + : m_raise() m_markposAdd() + : m_redraw() m_destroyNull() + : m_lower() + : popup(magzoomMenu) + : popdown(magzoomMenu) + !Ctrl m: call(toggleMagnifier) + !Ctrl p: call(togglePanner) + BackSpace: m_deleteDestroy() + Delete: m_deleteDestroy() + : graphics-input() + : track-cursor() call(wcsUpdate,$x,$y) +} + + +# setMagnifier -- Turn the magnifier on or off. + +set magAlreadyOn 0 + +proc setDynamicMagnifier {state} \ +{ + global magAlreadyOn magnifier_enable + + if {$state} { + set magAlreadyOn $magnifier_enable + } + if {$magAlreadyOn} { + return + } else { + setMagnifier $state + } +} + +proc toggleMagnifier args \ +{ + global magnifier_enable + if {$magnifier_enable} { + setMagnifier 0 + } else { + setMagnifier 1 + } +} + + +proc setMagnifier {state} \ +{ + global winWidth winHeight frameWidth frameHeight + global frame magnifier_mapping magnifierWinTranslations magnifierArea + global magnifier_enable magnifier_height + global magnifierGeom magnifier_x magnifier_y magnifier_width + + if {$state} { + if {$magnifier_enable} \ + return + + # Determine where to place the magnifier. + set scale [expr sqrt(double($magnifierArea) / (512 * 512))] + set scaled_width [expr int(512 * $scale) / 2 * 2 + 1] + set scaled_height [expr int(512 * $scale) / 2 * 2 + 1] + set defGeom [format "%sx%s-5+5" $scaled_width $scaled_height] + send imagewin parseGeometry $magnifierGeom $defGeom x y width height + + # Create the main magnifier window (marker). + send imagewin createMarker magnifierWin \ + type rectangle \ + createMode noninteractive \ + width [expr $width / 2] \ + height [expr $height / 2] \ + x [expr $x + $width / 2] \ + y [expr $y + $height / 2] \ + lineColor 8 \ + highlightColor 8 \ + translations $magnifierWinTranslations \ + visible true \ + sensitive true \ + activated true + + # Update the magnifier window position variables so that it comes up + # in the same place the next time. + + send magnifierWin getRect boundary \ + magnifier_x magnifier_y magnifier_width magnifier_height + set magnifierGeom [send imagewin getGeometry \ + $magnifier_x $magnifier_y $magnifier_width $magnifier_height] + + # Register callbacks. + send imagewin addCallback magnifierImagewinResized resize + send resize addCallback magnifierImagewinResized + send magnifierWin addCallback magnifierMovedMapImage moveResize + + send magnifierWin { + addCallback magnifierMoved moveResize; + addCallback magnifierDestroy destroy; + addCallback magnifierWinConstraint constraint; + } + + # Map display frame to magnifier window. + set magnifier_enable 1 + set magnifier_mapping [send imagewin nextMapping] + send imagewin refreshMapping $magnifier_mapping + + # create cross-hair + send imagewin createMarker magPointer \ + type rectangle \ + createMode noninteractive \ + width 3 \ + height 3 \ + lineWidth 3 \ + lineColor green \ + highlightcolor green \ + activated true \ + visible true + + # set its position and size + setMagPointerPosition + magnifierMapImage [expr $winWidth / 2] [expr $winHeight / 2] + + } elseif {$magnifier_enable} { + magnifierDestroy + } +} + + +# magnifierDestroy -- Delete the magnifier. + +proc magnifierDestroy args \ +{ + global magnifier_enable + global magnifier_mapping + + if {$magnifier_enable} { + set magnifier_enable 0 + + send imagewin freeMapping $magnifier_mapping + send imagewin deleteCallback magnifierImagewinResized + send resize deleteCallback magnifierImagewinResized + send frame deleteCallback magnifierMapImage + + if [send server queryObject magnifierWin] { + send magnifierWin destroy + } + if [send server queryObject magPointer] { + send magPointer destroy + } + } +} + + +# magnifierMoved -- Called when the user moves the magnifier window. We need to +# move the region marker to the new window location and record the new location +# so that the window will come up in the same place if closed and reopened. + +proc magnifierMoved {marker event position} \ +{ + global winWidth winHeight magnifierGeom frame + global magnifier_x magnifier_y magnifier_width magnifier_height + + # Move the region marker to the new location. + send client getSource raster sx sy snx sny + + # Update the magnifier window position variables so that it comes up + # in the same place the next time. + + send magnifierWin getRect boundary \ + magnifier_x magnifier_y magnifier_width magnifier_height + set magnifierGeom [send imagewin getGeometry \ + $magnifier_x $magnifier_y $magnifier_width $magnifier_height] +} + + +# magnifierWinConstraint -- Called when the magnifier window is moved, resized, +# or rotated. Constrain the magnifier window to remain within the image window; +# rotation is not permitted. + +proc magnifierWinConstraint {marker event attributes} \ +{ + global winWidth winHeight + global magnifier_width magnifier_height + + set width $magnifier_width + set height $magnifier_height + set constraints [list {}] + + # Check the width and height first as we need these below. + foreach i $attributes { + set new [lindex $i 2] + switch [lindex $i 0] { + width { set ww [expr $winWidth / 2] + if {$new > $ww} { + lappend constraints "width $ww" + set width $ww + } else { + set width $new + } + } + height { set wh [expr $winHeight / 2] + if {$new > $wh} { + lappend constraints "height $wh" + set height $wh + } else { + set height $new + } + } + rotangle { lappend constraints "rotangle 0" + } + } + } + + # Constrain X and Y. + foreach i $attributes { + set new [lindex $i 2] + switch [lindex $i 0] { + x { set pw [expr $width / 2] + if {$new < $pw} { + lappend constraints "x $pw" + } elseif {$new > $winWidth - $pw} { + lappend constraints "x [expr $winWidth - $pw]" + } + } + y { set ph [expr $height / 2] + if {$new < $ph} { + lappend constraints "y $ph" + } elseif {$new > $winHeight - $ph} { + lappend constraints "y [expr $winHeight - $ph]" + } + } + } + } + + return $constraints +} + + +# magnifierRegionConstraint -- Called when the region marker in the magnifier +# window is moved, resized, or rotated. + +proc magnifierRegionConstraint {marker event attributes} \ +{ + global winWidth winHeight + + set constraints [list {}] + send magnifierWin getRect interior p_x p_y p_width p_height + + # Since the magnifier region marker is a box marker x,y and width,height + # will not both change in the same call, so we can process them all + # independently. + + foreach i $attributes { + set new [lindex $i 2] + + switch [lindex $i 0] { + x { set left [expr $p_x + $rwidth + 1] + set right [expr $p_x + $p_width - $rwidth - 1] + if {$new < $left} { + lappend constraints "x $left" + } elseif {$new > $right} { + lappend constraints "x $right" + } + } + y { set top [expr $p_y + $rheight + 1] + set bottom [expr $p_y + $p_height - $rheight - 1] + if {$new < $top} { + lappend constraints "y $top" + } elseif {$new > $bottom} { + lappend constraints "y $bottom" + } + } + width { set ww [expr $winWidth / 2] + if {$new > $ww / 2} { + lappend constraints "width $ww" + } + } + height { set wh [expr $winHeight / 2] + if {$new > $wh / 2} { + lappend constraints "height $wh" + } + } + rotangle { lappend constraints "rotangle 0" + } + } + } + + return $constraints +} + + +# magnifierImagewinResized -- If the display window is resized make the +# magnifier track the corner. + +proc magnifierImagewinResized args \ +{ + global magnifier_enable magnifier_mapping magnifier_height + global magnifierGeom magnifier_x magnifier_y magnifier_width + + if {$magnifier_enable} { + set old_x $magnifier_x; set old_width $magnifier_width + set old_y $magnifier_y; set old_height $magnifier_height + + # Get new location of magnifier window. + set defGeom [format "%sx%s+5+5" $magnifier_width $magnifier_height] + send imagewin parseGeometry $magnifierGeom $defGeom x y width height + + # Reposition the marker. + send magnifierWin "\ + markpos; \ + setAttributes \ + x [expr $x + $width / 2] \ + y [expr $y + $height / 2] \ + width [expr $width / 2] \ + height [expr $height / 2]; \ + redraw" + + # Update the magnifier window position variables so that it comes up + # in the same place the next time. + send magnifierWin getRect boundary \ + magnifier_x magnifier_y magnifier_width magnifier_height + set magnifierGeom [send imagewin getGeometry \ + $magnifier_x $magnifier_y $magnifier_width $magnifier_height] + + # Make sure the magnifier window is on top. + send imagewin raiseMapping $magnifier_mapping + + # Refresh the magnifier window if it did not move. + if {$magnifier_x == $old_x && $magnifier_y == $old_y && + $magnifier_width == $old_width && $magnifier_height == $old_height} { + send imagewin refreshMapping $magnifier_mapping + } + } +} + + +# resetMagnifier -- Reinitialize the magnifier. + +proc resetMagnifier {param old new} \ +{ + global magnifierGeom displayMagnifier + + if {$new == "done"} { + setMagnifier [true $displayMagnifier] + } else { + setMagnifier 0 + if {$new != "startup"} { + set magnifierGeom +5+5 + } + } +}; send initialize addCallback resetMagnifier + + +set last_mag_x [expr $winWidth / 2] +set last_mag_y [expr $winHeight / 2] + +# magnifierMovedMapImage -- Front end to magnifierMapImage, called when +# magnifier window is moved or resized. + +proc magnifierMovedMapImage args \ +{ + global last_mag_x last_mag_y + + magnifierMapImage $last_mag_x $last_mag_y + setMagPointerPosition +} + +# The following code was borrowed from the SAOtng GUI by Eric Mandel of SAO +#-------------------------------------------------------------------------- + +# globals for magnifier +set mag_w 0 +set mag_h 0 + +# +# setMagnifierZoom -- set the zoom factor for the magnifier +# +proc setMagnifierZoom { zoom } \ +{ + global mag_w mag_h + + send magnifierWin getRect boundary \ + magnifier_x magnifier_y magnifier_width magnifier_height + set mag_w [expr int( ( $magnifier_width + $zoom - 1 ) / $zoom) ] + set mag_h [expr int( ( $magnifier_height + $zoom - 1 ) / $zoom) ] + + #set mw [expr int (($magnifier_width - 1) / ($mag_w * 2))] + #if { $mw < 4 } { set mw 4 } + #set mh [expr int (($magnifier_height - 1) / ($mag_h * 2))] + #if { $mh < 4 } { set mh 4 } + #send magPointer "setAttributes width $mw height $mh; redraw" +} + +# magnifierMapImage -- Map the of the current display frame centered on the +# pointer into the magnifier window. Called when the frame changes, the +# pointer moves in the main image window, or (via magnifierMovedMapImage) +# the magnifier window is moved or resized. + +set magnifierROP 0 + +proc magnifierMapImage {x y} \ +{ + global magnifier_enable frame + global last_mag_x last_mag_y + global magnifier_mapping + global winWidth winHeight + global mag_w mag_h + global magnifierROP + + if {!$magnifier_enable || $frame == 0} \ + return + +# if {abs($last_mag_x-$x) != 1 && abs($last_mag_y-$y) != 1} { +# # For efficiency we won't compute the sqrt of the distance but instead +# # just compare the square. Use a threshold of 6 pixels so when we +# # narrow in on the ROI the magnifier is still (mostly) correct. +# set diff [expr (($last_mag_x-$x) * ($last_mag_x-$x)) + \ +# (($last_mag_y-$y) * ($last_mag_y-$y))] +# if {$diff > 36} { +# set last_mag_x $x +# set last_mag_y $y +# return +# } +# } + + set last_mag_x $x + set last_mag_y $y + + send magnifierWin getRect interior dx dy dnx dny + if [send imagewin activeMapping $magnifier_mapping] { + send imagewin raiseMapping $magnifier_mapping + } + + # initialize the magnifier zoom factor, if necessary + if { !$mag_w || !$mag_h } { + setMagnifierZoom 4 + } + + set sx [expr $x - $mag_w / 2 ] + set sy [expr $y - $mag_h / 2 ] + + # Constrain the source rectangle within the main image window + # (not overlapping an edge or the magnifier window). + + if {$sx > [expr $dx - $mag_w] && $sx < [expr $dx + $dnx] && + $sy > [expr $dy - $mag_h] && $sy < [expr $dy + $dny] } { + + # The source rectangle would overlap the magnifier window; fix that. + + set dist(l) [expr $sx - ($dx - $mag_w)] + set dist(b) [expr $dy + $dny - $sy] + set dist(r) [expr $dx + $dnx - $sx] + set dist(t) [expr $sy - ($dy - $mag_h)] + + # Put the distances in order. + + foreach j [array names dist] { + set alreadyset($j) 0 + } + + for {set i 0} {$i < 4} {incr i} { + set candidate "" + foreach j [array names dist] { + if {!$alreadyset($j)} { + if {$candidate == ""} { + set candidate $j + set minsofar $dist($j) + } elseif {$dist($j) < $minsofar} { + set candidate $j + set minsofar $dist($j) + } + } + } + set order($i) $candidate + set alreadyset($candidate) 1 + } + + # Try the sides in order, using the first one where there's room. + + for {set i 0} {$i < 4} {incr i} { + if {$order($i) == "l"} { + if {$dx >= $mag_w} { + set sx [expr $dx - $mag_w] + break + } + } elseif {$order($i) == "b"} { + if {$winHeight >= $dy + $dny + $mag_h} { + set sy [expr $dy + $dny] + break + } + } elseif {$order($i) == "r"} { + if {$winWidth >= $dx + $dnx + $mag_w} { + set sx [expr $dx + $dnx] + break + } + } elseif {$order($i) == "t"} { + if {$dy >= $mag_h} { + set sy [expr $dy - $mag_h] + break + } + } + } + } + + # Make sure we don't go beyond an edge of the main window. + + if {$sx < 0} { + set sx 0 + } else { + set sxmax [expr $winWidth - $mag_w] + if {$sx > $sxmax} { + set sx $sxmax + } + } + + if {$sy < 0} { + set sy 0 + } else { + set symax [expr $winHeight - $mag_h] + if {$sy > $symax} { + set sy $symax + } + } + + # Map 32 x 32 centered on pointer in main window. + set err [catch {send imagewin setMapping $magnifier_mapping $magnifierROP \ + 0 pixel $sx $sy $mag_w $mag_h \ + 0 pixel $dx $dy $dnx $dny}] + if { $err != 0 } { + Print "There was a problem setting up the magnifier ... recovering" + } +} + + +# set the position of the magnifier marker in the center of the mag window +proc setMagPointerPosition args \ +{ + global magnifier_enable + + if { !$magnifier_enable } \ + return + + send magnifierWin "getAttributes x x y y" + set xpos [expr $x + 1] + set ypos [expr $y + 1] + + send magPointer "setAttributes x $xpos y $ypos visible true; redraw" +} + + + +################################################################################ +# PANNER. The full frame mapped into the main image window is displayed at a +# reduced resolution in a marker (known as the panner window) within the main +# image window. The currently displayed region of the frame is indicated +# using a small marker within the panner window. This small marker may be +# moved or resized to pan or zoom the image in the main display window. +################################################################################ + +set panner_x 0 +set panner_y 0 +set panner_width 0 +set panner_height 0 +set prm_width 0 +set prm_height 0 + +set panner_enable 0 +set panner_pan_enable 0 +set panner_mag_enable 0 +set panner_region_enable 0 +set panner_mapping 0 + +# Panner window translations. +set pannerWinTranslations { \ + !Shift : m_rotateResize() + : m_moveResize() + !Shift : m_raise() m_markpos() + : m_raise() m_markposAdd() + : m_redraw() m_destroyNull() + : m_lower() + : call(pannerPanXY,$x,$y) + !Ctrl b: call(prevFrame,$name) + !Ctrl f: call(nextFrame,$name) + !Ctrl h: call(move_cursor,-1,0) + !Ctrl j: call(move_cursor,0,1) + !Ctrl k: call(move_cursor,0,-1) + !Ctrl l: call(move_cursor,1,0) + !Ctrl n: call(normalize) + !Ctrl c: call(cpZoomAction,centerFrame) + !Ctrl i: call(cpInvert) + !Ctrl m: call(toggleMagnifier) + !Ctrl p: call(togglePanner) + !Ctrl r: call(cpRegisterFrames) + !Ctrl s: call(cpMatchFrames) + !Alt 1: call(cpSetFrame,frame1) + !Alt 2: call(cpSetFrame,frame2) + !Alt 3: call(cpSetFrame,frame3) + !Alt 4: call(cpSetFrame,frame4) + !Ctrl 1: call(cpZoom,1,1,fixed) + !Ctrl 2: call(cpZoom,2,2,fixed) + !Ctrl 3: call(cpZoom,3,3,fixed) + !Ctrl 4: call(cpZoom,4,4,fixed) + !Ctrl 5: call(cpZoom,5,5,fixed) + !Ctrl 6: call(cpZoom,6,6,fixed) + !Ctrl 7: call(cpZoom,7,7,fixed) + !Ctrl 8: call(cpZoom,8,8,fixed) + !Ctrl 9: call(cpZoom,9,9,fixed) + BackSpace: m_deleteDestroy() + Delete: m_deleteDestroy() + : graphics-input() + : track-cursor() call(wcsUpdate,$x,$y) +} + + +# setPanner -- Turn the panner on or off. + +proc togglePanner args \ +{ + global panner_enable + + if {$panner_enable} { + setPanner 0 + } else { + setPanner 1 + } +} + + +proc setPanner {state} \ +{ + global winWidth winHeight frameWidth frameHeight + global frame panner_mapping pannerWinTranslations pannerArea + global panner_enable panner_region_enable panner_pan_enable + global pannerGeom panner_x panner_y panner_width panner_height + global last_compass + + if {$state} { + if {$panner_enable} \ + return + + # Determine where to place the panner. + set scale \ + [expr sqrt(double($pannerArea) / ($frameWidth * $frameHeight))] + set scaled_width [expr int($frameWidth * $scale) / 2 * 2 + 1] + set scaled_height [expr int($frameHeight * $scale) / 2 * 2 + 1] + set defGeom [format "%sx%s-5+5" $scaled_width $scaled_height] + send imagewin parseGeometry $pannerGeom $defGeom x y width height + + # Create the main panner window (marker). + send imagewin createMarker pannerWin \ + type rectangle \ + createMode noninteractive \ + width [expr $width / 2] \ + height [expr $height / 2] \ + x [expr $x + $width / 2] \ + y [expr $y + $height / 2] \ + lineColor 8 \ + highlightColor 8 \ + translations $pannerWinTranslations \ + visible true \ + sensitive true \ + autoRedraw true \ + activated true + + # Update the panner window position variables so that it comes up + # in the same place the next time. + + send pannerWin getRect boundary \ + panner_x panner_y panner_width panner_height + set pannerGeom [send imagewin getGeometry \ + $panner_x $panner_y $panner_width $panner_height] + + # Register callbacks. + send frame addCallback pannerMapImage + send frameRegion addCallback pannerSetRegion + send imagewin addCallback pannerImagewinResized resize + send resize addCallback pannerImagewinResized + + send pannerWin { + addCallback pannerMapImage moveResize; + addCallback pannerMoved moveResize; + addCallback pannerDestroy destroy; + addCallback pannerWinConstraint constraint; + } + + # Map display frame to panner window. + set panner_enable 1 + set panner_region_enable 1 + set panner_mapping [send imagewin nextMapping] + pannerMapImage init; send imagewin refreshMapping $panner_mapping + + # Redraw the compass if necessary. + send compass "setSensitive True ; set on $last_compass" + if { $last_compass } \ + drawCompass + + # Draw a marker in the panner window outlining displayed region. + send imagewin createMarker pannerRegionMarker \ + type box \ + createMode noninteractive \ + translations $pannerWinTranslations \ + lineColor green \ + highlightColor green \ + sensitive true + + # Fire up the panner region marker. + send client getSource raster sx sy snx sny + pannerSetRegion dummy dummy [concat $frame $sx $sy $snx $sny] + send pannerRegionMarker "\ + addCallback pannerPanImage moveResize; \ + addCallback pannerDestroy destroy; \ + addCallback pannerRegionConstraint constraint; \ + setAttributes visible true activated true; \ + redraw" + set panner_pan_enable 1 + + } elseif {$panner_enable} { + pannerDestroy + } +} + + +# pannerDestroy -- Delete the panner. + +proc pannerDestroy args \ +{ + global panner_enable panner_region_enable panner_pan_enable + global panner_mapping + + if {$panner_enable} { + set panner_enable 0 + set panner_pan_enable 0 + set panner_region_enable 0 + + send imagewin freeMapping $panner_mapping + send imagewin deleteCallback pannerImagewinResized + send resize deleteCallback pannerImagewinResized + send frame deleteCallback pannerMapImage + send frameRegion deleteCallback pannerSetRegion + + if [send server queryObject pannerRegionMarker] { + send pannerRegionMarker destroy + } + if [send server queryObject pannerWin] { + send pannerWin destroy + } + + # Disable the compass. + send compass "setSensitive False ; set on False" + } +} + + +# pannerMapImage -- Map the current display frame into the panner window. +# Called when the frame changes or the panner window is moved or resized. +# The panner window displays a small dezoomed version of the full frame. + +proc pannerMapImage args \ +{ + global panner_enable frame + global panner_mapping + + if {!$panner_enable || $frame == 0} \ + return + + set raster [send client getRaster] + send pannerWin getRect interior dx dy dnx dny + send imagewin queryRaster $raster width height + + if [send imagewin activeMapping $panner_mapping] { + send imagewin raiseMapping $panner_mapping + } + send imagewin setMapping $panner_mapping 0 \ + $raster pixel 0 0 $width $height \ + 0 pixel $dx $dy $dnx $dny +} + + +# pannerSetRegion -- Adjust the pannerWin region marker to outline the +# region displayed in the main display window. This is called in response +# to a frameRegion event when the main display mapping changes, e.g. when +# the frame changes or the user zooms or pans the main window. The region +# marker is moved and resized to reflect the new view. + +proc pannerSetRegion {param old new} \ +{ + global panner_enable panner_region_marker + global panner_region_enable panner_pan_enable + global frame frameWidth frameHeight prm_width prm_height + + if {!$panner_enable || !$panner_region_enable || $frame == 0} \ + return + + # new: frame sx sy snx sny + set src_frame [lindex $new 0] + set sx [lindex $new 1]; set snx [lindex $new 3] + set sy [lindex $new 2]; set sny [lindex $new 4] + + if {$src_frame != $frame} \ + return + + send pannerWin getRect interior px py pnx pny + + set x [expr ($sx + $snx/2.0) / $frameWidth * $pnx + $px] + set y [expr ($sy + $sny/2.0) / $frameHeight * $pny + $py] + set width [expr ($snx/2.0) / $frameWidth * $pnx + 1] + set height [expr ($sny/2.0) / $frameHeight * $pny + 1] + + set pan_save $panner_pan_enable; set panner_pan_enable 0 + set panner_region_enable 0 + + send pannerRegionMarker "\ + markpos; \ + setAttributes x $x y $y width $width height $height; \ + redraw; raise" + send pannerRegionMarker getAttributes width prm_width height prm_height + + set panner_region_enable 1 + set panner_pan_enable $pan_save +} + + +# pannerPanImage -- Pan or zoom the image in the main image window. This is +# called when the user moves the region marker within the panner window. + +proc pannerPanImage {marker event position} \ +{ + global panner_pan_enable + global winWidth winHeight + global prm_width prm_height + global frame auto_reg frameOffsetX frameOffsetY + + if {!$panner_pan_enable} \ + return + + # position: x y width height. + set new_width [lindex $position 2] + set new_height [lindex $position 3] + + # region: type raster x y width height. + set region [send pannerRegionMarker getRegion unmap] + set x [expr [lindex $region 2] + 1]; set width [lindex $region 4] + set y [expr [lindex $region 3] + 1]; set height [lindex $region 5] + + set panner_pan_enable 0 + if {$new_width == $prm_width && $new_height == $prm_height} { + send client pan $x $y + } else { + set xscale [expr ($winWidth / 2.0) / $width] + set yscale [expr ($winHeight / 2.0) / $height] + if {$auto_reg == 1} { + send client zoomAbs $xscale $yscale $x $y \ + $frameOffsetX($frame) $frameOffsetY($frame) + } else { + send client zoom $xscale $yscale $x $y + } + } + set panner_pan_enable 1 +} + + +# pannerPanXY -- Pan to the point X,Y in the panner window coordinate +# system. Called when the user clicks MB2 in the panner window. + +proc pannerPanXY {x y} \ +{ + send imagewin unmapPixel $x $y raster rx ry + send client pan $rx $ry +} + + +# pannerMoved -- Called when the user moves the panner window. We need to +# move the region marker to the new window location and record the new location +# so that the window will come up in the same place if closed and reopened. + +proc pannerMoved {marker event position} \ +{ + global winWidth winHeight + global frame panner_pan_enable pannerGeom + global panner_x panner_y panner_width panner_height + + # Move the region marker to the new location. + set pan_save $panner_pan_enable; set panner_pan_enable 0 + send client getSource raster sx sy snx sny + pannerSetRegion dummy dummy [concat $frame $sx $sy $snx $sny] + set panner_pan_enable $pan_save + + # Update the panner window position variables so that it comes up + # in the same place the next time. + + send pannerWin getRect boundary \ + panner_x panner_y panner_width panner_height + set pannerGeom [send imagewin getGeometry \ + $panner_x $panner_y $panner_width $panner_height] + + drawCompass + + send pannerRegionMarker raise +} + + +# pannerWinConstraint -- Called when the panner window is moved, resized, or +# rotated. Constrain the panner window to remain within the image window; +# rotation is not permitted. + +proc pannerWinConstraint {marker event attributes} \ +{ + global winWidth winHeight + global panner_width panner_height + + set width $panner_width + set height $panner_height + set constraints [list {}] + + # Check the width and height first as we need these below. + foreach i $attributes { + set new [lindex $i 2] + switch [lindex $i 0] { + width { set ww [expr $winWidth / 2] + if {$new > $ww} { + lappend constraints "width $ww" + set width $ww + } else { + set width $new + } + } + height { set wh [expr $winHeight / 2] + if {$new > $wh} { + lappend constraints "height $wh" + set height $wh + } else { + set height $new + } + } + rotangle { lappend constraints "rotangle 0" + } + } + } + + # Constrain X and Y. + foreach i $attributes { + set new [lindex $i 2] + switch [lindex $i 0] { + x { set pw [expr $width / 2] + if {$new < $pw} { + lappend constraints "x $pw" + } elseif {$new > $winWidth - $pw} { + lappend constraints "x [expr $winWidth - $pw]" + } + } + y { set ph [expr $height / 2] + if {$new < $ph} { + lappend constraints "y $ph" + } elseif {$new > $winHeight - $ph} { + lappend constraints "y [expr $winHeight - $ph]" + } + } + } + } + + return $constraints +} + + +# pannerRegionConstraint -- Called when the region marker in the panner +# window is moved, resized, or rotated. + +proc pannerRegionConstraint {marker event attributes} \ +{ + global winWidth winHeight + global frame + + set constraints [list {}] + send pannerWin getRect interior p_x p_y p_width p_height + send pannerRegionMarker getAttributes width rwidth height rheight + + # Since the panner region marker is a box marker x,y and width,height + # will not both change in the same call, so we can process them all + # independently. + + foreach i $attributes { + set new [lindex $i 2] + + switch [lindex $i 0] { + x { set left [expr $p_x + $rwidth + 1] + set right [expr $p_x + $p_width - $rwidth - 1] + if {$new < $left} { + lappend constraints "x $left" + } elseif {$new > $right} { + lappend constraints "x $right" + } + } + y { set top [expr $p_y + $rheight + 1] + set bottom [expr $p_y + $p_height - $rheight - 1] + if {$new < $top} { + lappend constraints "y $top" + } elseif {$new > $bottom} { + lappend constraints "y $bottom" + } + } + width { set ww [expr $winWidth / 2] + if {$new > $ww / 2} { + lappend constraints "width $ww" + } + } + height { set wh [expr $winHeight / 2] + if {$new > $wh / 2} { + lappend constraints "height $wh" + } + } + rotangle { lappend constraints "rotangle 0" + } + } + } + drawCompass + + return $constraints +} + + +# pannerImagewinResized -- If the display window is resized make the panner +# track the corner. + +proc pannerImagewinResized args \ +{ + global panner_enable panner_mapping + global pannerGeom panner_x panner_y panner_width panner_height + global frame + + if {$panner_enable} { + set old_x $panner_x; set old_width $panner_width + set old_y $panner_y; set old_height $panner_height + + eraseCompass + + # Get new location of panner window. + set defGeom [format "%sx%s-5+5" $panner_width $panner_height] + send imagewin parseGeometry $pannerGeom $defGeom x y width height + + # Reposition the marker. + send pannerWin "\ + markpos; \ + setAttributes \ + x [expr $x + $width / 2] \ + y [expr $y + $height / 2] \ + width [expr $width / 2] \ + height [expr $height / 2]; \ + redraw" + + # Update the panner window position variables so that it comes up + # in the same place the next time. + send pannerWin getRect boundary \ + panner_x panner_y panner_width panner_height + set pannerGeom [send imagewin getGeometry \ + $panner_x $panner_y $panner_width $panner_height] + + # Make sure the panner window is on top. + send imagewin raiseMapping $panner_mapping + + # Refresh the panner window if it did not move. + if {$panner_x == $old_x && $panner_y == $old_y && + $panner_width == $old_width && $panner_height == $old_height} { + send imagewin refreshMapping $panner_mapping + } + + drawCompass + } +} + + +# resetPanner -- Reinitialize the panner. + +proc resetPanner {param old new} \ +{ + global pannerGeom displayPanner + if {$new == "done"} { + setPanner [true $displayPanner] + } else { + setPanner 0 + if {$new != "startup"} { + set pannerGeom -5+5 + } + } +}; send initialize addCallback resetPanner + + + +################################################################################ +# Print Panel Functions. +################################################################################ + +# Global variables needed for the print setup panel + +set printColor prGrayButton +set orientation epsPortButton +set page_size epsLetterButton +set imageScale 100 + +set epsWidgets { epsPageGroup epsOrientLabel epsSizeLabel + epsPortButton epsLandButton epsLetterButton epsLegalButton epsA4Button + ScaleFrame SCdecrease SCtext SCincrease +} + + +proc psetup_init args \ +{ + global printColor orientation page_size imageScale #format + + set_printer toPrinter callback 1 + send SCtext set label [ format "%d %%" $imageScale ] + send $printColor set on true + send $orientation set on true + send $page_size set on true +} + + +proc doPrintOptions { param old new } \ +{ + global imageScale page_size orientation imageScale printColor + global warnings + + send printStatus set label {} + set val [join [lrange $new 1 end] " "] + + # print [format "doPrintOptions %s = %s" [lindex $new 0] $val] + switch [lindex $new 0] { + autoscale { if { $val == "True" } { + send epsscaleButton set on true + } elseif { $val == "False" } { + send epsscaleButton set on false + } + } + autorotate { if { $val == "True" } { + send autorotateButton set on true + } elseif { $val == "False" } { + send autorotateButton set on false + } + } + maxaspect { if { $val == "True" } { + send aspectButton set on true + } elseif { $val == "False" } { + send aspectButton set on false + } + } + annotate { if { $val == "True" } { + send annotateButton set on true + send titleButton setSensitive true + send colorbarButton setSensitive true + send bordersButton setSensitive true + send titleLabel setSensitive true + send titleString setSensitive true + } elseif { $val == "False" } { + send annotateButton set on false + send titleButton setSensitive false + send colorbarButton setSensitive false + send bordersButton setSensitive false + send titleLabel setSensitive false + send titleString setSensitive false + } + } + compress { if { $val == "True" } { + send compressButton set on true + } elseif { $val == "False" } { + send compressButton set on false + } + } + orientation { send $orientation set on false + if { $val == "portrait" } { + send epsPortButton set on true + set orientation epsPortButton + } elseif { $val == "landscape" } { + send epsPortButton set on false + set orientation epsLandButton + } + } + papersize { send $page_size set on false + if { $val == "letter" } { + send epsLetterButton set on true + set page_size epsLetterButton + } elseif { $val == "legal" } { + send epsLegalButton set on true + set page_size epsLegalButton + } elseif { $val == "A4" } { + send epsA4Button set on true + set page_size epsA4Button + } elseif { $val == "B5" } { + send epsB5Button set on true + set page_size epsB5Button + } + } + imscale { set imageScale $val + send SCtext set label [ format "%d %%" $imageScale ] + } + colortype { send $printColor set on false + if { $val == "gray" } { + send prGrayButton set on true + set printColor prGrayButton + } elseif { $val == "pseudo" } { + send prPseudoButton set on true + set printColor prPseudoButton + } elseif { $val == "rgb" } { + send prRGBButton set on true + set printColor prRGBButton + } + } + printerName { if [send toPrinter get on] { + send printlist highlight $val + } + } + printCmd { if [send toPrinter get on] { + send printcmd set string $val + } + } + printFile { if [send toFile get on] { + send printcmd set string $val + } + } + deviceType { if { $val == "Printer" } { + send printerLabel set label "Print Command:" + send toPrinter set on true + send toFile set on false + } elseif { $val == "File" } { + send printerLabel set label "File Name:" + send toPrinter set on false + send toFile set on true + send printlist unhighlight + } + } + dotitle { if { $val == "True" } { + send titleButton set on true + } elseif { $val == "False" } { + send titleButton set on false + } + } + doborders { if { $val == "True" } { + send bordersButton set on true + } elseif { $val == "False" } { + send bordersButton set on false + } + } + docolorbar { if { $val == "True" } { + send colorbarButton set on true + } elseif { $val == "False" } { + send colorbarButton set on false + } + } + title { send titleString set string $val + } + + status { send printStatus set label $val + send server synchronize + } + warning { if {$warnings} { Wexec server $val } + } + } +}; send printOptions addCallback doPrintOptions + + +# Print options procedures. +# ------------------------------- + +set prOptsWidgets { + toPrinter toFile + prGrayButton prPseudoButton prRGBButton + epsLandButton epsPortButton + epsLetterButton epsLegalButton epsA4Button epsB5Button + SCincrease SCdecrease +} +set prSimpleOptions { + epsscaleButton autorotateButton aspectButton annotateButton compressButton + titleButton bordersButton colorbarButton +} + +proc prPrintCommand { widget cbtype args } \ +{ + if [send toFile get on] { + send client setPrintOption printfile $args + send printStatus set label [format "output file set to %s" $args] + } else { + send client setPrintOption printcmd $args + send printStatus set label [format "print command set to %s" $args] + } +}; send printcmd addCallback prPrintCommand + +proc prTitleString { widget cbtype args } \ +{ + send client setPrintOption title $args +}; send titleString addCallback prTitleString + +proc prOptionToggle { widget cbtype args } \ +{ + global imageScale + + # Handle the image scale widgets first. + switch $widget { + SCincrease { set scale [expr $imageScale + 5] + send client setPrintOption imscale $scale + return + } + SCdecrease { set scale [ expr $imageScale - 5 ] + send client setPrintOption imscale $scale + return + } + } + + # If it's not one of those it must be one of the radio toggles. + set val [ send $widget get on ] + #print [ format "prOptionToggle %s = %s" $widget $val ] + if { $val == 1 } { + switch $widget { + toPrinter { send client setPrintOption devicetype printer } + toFile { send client setPrintOption devicetype file } + + epsLandButton { send client setPrintOption orientation landscape } + epsPortButton { send client setPrintOption orientation portrait } + + epsLetterButton { send client setPrintOption papersize letter } + epsLegalButton { send client setPrintOption papersize legal } + epsA4Button { send client setPrintOption papersize A4 } + epsB5Button { send client setPrintOption papersize B5 } + + prGrayButton { send client setPrintOption colortype gray } + prPseudoButton { send client setPrintOption colortype pseudo } + prRGBButton { send client setPrintOption colortype rgb } + } + } else { + send $widget set on true + } + +} ; foreach w $prOptsWidgets { send $w addCallback prOptionToggle } + +proc prSimpleOptionToggle { widget args } \ +{ + set val [ send $widget get on ] + #print [ format "prSimpleOptionToggle %s = %s" $widget $val ] + + switch $widget { + epsscaleButton { send client setPrintOption autoscale $val } + autorotateButton { send client setPrintOption autorotate $val } + aspectButton { send client setPrintOption maxaspect $val } + annotateButton { send client setPrintOption annotate $val } + compressButton { send client setPrintOption compress $val } + + titleButton { send client setPrintOption dotitle $val } + bordersButton { send client setPrintOption doborders $val } + colorbarButton { send client setPrintOption docolorbar $val } + } +} ; foreach w $prSimpleOptions { send $w addCallback prSimpleOptionToggle } + + + +# Printer display and selection. +# ------------------------------- +set lprList {} + +proc psSetPrintList {param old new} \ +{ + global lprList + set lprList $new + send printlist setList $new resize + send printlist highlight 0 +}; send printerList addCallback psSetPrintList + +proc lprResize args \ +{ + global lprList + send printlist setList $lprList resize + send printlist highlight 0 +}; send printlist addEventHandler lprResize ResizeRedirectMask + +proc psSelectPrint {widget cbtype selections indices} \ +{ + global printerlist + foreach selection $selections { + send client setPrintOption printername $selection + } +}; send printlist addCallback psSelectPrint + + +proc Print args \ +{ + global winWidth winHeight + send imagewin setCursorType busy + + # Get the print command or file template if not previous reset. + set val [ send printcmd get string ] + if [send toFile get on] { + send client setPrintOption printfile $val + } else { + send client setPrintOption printcmd $val + } + set val [ send titleString get string ] + send client setPrintOption title $val + setPrintCorners 0 [expr $winWidth - 1] [expr $winHeight - 1] 0 + + send client print + send imagewin setCursorType idle +} ; send okayPrint addCallback Print + + + +# setPrintCorners -- Tell the client the WCS of the image being printed. + +proc setPrintCorners { lx ly ux uy args } \ +{ + global winWidth winHeight + + # Convert raw corner screen coordinates to frame buffer raster coords. + send imagewin unmapPixel $lx $ly raster llx lly + set llx [expr "int ($llx)"] + set lly [expr "int ($lly)"] + set str [send client encodewcs $llx $lly] + scan $str "%g %g %g" llx_r lly_r z + set llx_i [expr "int ($llx_r)"] + set lly_i [expr "int ($lly_r)"] + + send imagewin unmapPixel $ux $uy raster urx ury + set urx [expr "int ($urx)"] + set ury [expr "int ($ury)"] + set str [send client encodewcs $urx $ury] + scan $str "%g %g %g" urx_r ury_r z + set urx_i [expr "int ($urx_r)"] + set ury_i [expr "int ($ury_r)"] + + send client setPrintOption corners $llx_i $lly_i $urx_i $ury_i +} + + + +################################################################################ +# INFO box. +################################################################################ + +set infoMode infoOptFr + + +# Current Frame information. +proc infoFrameUpdate args \ +{ + global version frame nframes + global frameWidth frameHeight frameDepth + global enhancement + global cpXcen cpYcen cpXoff cpYoff + global cpXmag cpYmag cpXscale cpYscale + + if { [send infoOptWCS get on] } { + send client info wcs + return + } elseif {! [send infoOptFr get on]} \ + return + + + if {$frame == 0} { + send infoText set string "initializing display..." + } else { + set line1 $version + set line2 [format "Image:\t\t%s" [send imageTitle get label]] + set line3 [format "Frame %d of %d:\t%d x %d" \ + $frame $nframes $frameWidth $frameHeight] + set cmap [lindex $enhancement($frame) 0] + set brt [lindex $enhancement($frame) 1] + set con [lindex $enhancement($frame) 2] + set line4 [format "Colormap:\t%s" $cmap] + set line5 [format "Enhancement:\tBrt=%s Cont=%s" $brt $con] + + set cntr [format "X: %0.1f\n\t\tY: %0.1f" $cpXcen $cpYcen] + set line6 [format "Center:\t\t%s" $cntr] + + set line7 [format "Zoom:\t\tX: %0.2f\n\t\tY: %0.2f" $cpXmag $cpYmag] + set line8 [format "Scale:\t\tX: %0.2f\n\t\tY: %0.2f" $cpXscale $cpYscale] + set line9 [format "Offset:\t\tX: %0.2f\n\t\tY: %0.2f" $cpXoff $cpYoff] + + send infoText set string [ + format "%s\n\n%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s\n\n" \ + $line1 $line2 $line3 $line4 $line5 $line6 $line7 $line8 $line9 + ] + } +} +set params {frame frameView nframes frameSize frameTitle enhancement} +foreach p $params { send $p addCallback infoFrameUpdate } + + +# Server Program State information. +proc infoOptToggle { widget type state args } \ +{ + global infoMode ismInfoText + + if {$state} { set not False } else { set not True } + + send $infoMode set on $not + set infoMode $widget + + switch $widget { + infoOptFr { infoFrameUpdate } + infoOptSvr { set bp [send imagewin get basePixel] + set mc [send imagewin get maxColors] + send client info server $bp $mc + } + infoOptIsm { send infoText set string $ismInfoText } + infoOptClients { send client info clients } + infoOptWCS { send client info wcs } + infoOptFB { send client info imtoolrc } + } +} +set iopts {infoOptFr infoOptSvr infoOptIsm infoOptClients infoOptWCS infoOptFB } +foreach w $iopts { send $w addCallback infoOptToggle } + + +proc infoSetText { param old new } \ +{ + send infoText set string $new +} ; send info addCallback infoSetText + + + +################################################################################ +# Image and objects list display and section +################################################################################ + +proc filesTextHighlight { widget event args } \ +{ + if { $event == "enterNotify" } { + send $widget set displayCaret True + } elseif { $event == "leaveNotify" } { + send $widget set displayCaret False + } +} +foreach w {imtemplateText fnameText z1Value z2Value} { + send $w addEventHandler filesTextHighlight enterWindowMask + send $w addEventHandler filesTextHighlight leaveWindowMask +} + +send rootButton addCallback "send client setLoadOption root" +send homeButton addCallback "send client setLoadOption home" +send upButton addCallback "send client setLoadOption up" +send rescanButton addCallback "send client setLoadOption rescan" + +set label \ + [format "%-35.35s %6s %12s %12s"\ + " Image" "Bitpix" " Size" " Title"] +send imlistLabel set label $label +send imlistLabel "set height 0 ; unmap" + + +# Create the Frames menu on the load panel window. +set loadItems { "Current f.exec \{send frameFrame set label Current\}"} +for {set i 1} {$i <= $MAX_FRAMES} {incr i} { + lappend loadItems "\"\ \ $i\ \ \" f.exec \{send frameFrame set label $i\}" +}; createMenu loadFrames frameFrame $loadItems + + + + + +# Filename pattern callback. +proc setPattern { widget mode pattern args } \ +{ + send client setLoadOption pattern $pattern +} ; send imtemplateText addCallback setPattern + + +# Load options parameter callback. +proc doLoadOptions { param old new } \ +{ + global warnings panel_up + + set val [ join [lrange $new 1 end] " " ] + + switch [lindex $new 0] { + pattern { send imtemplateText set string [format "%s" $val ] } + curdir { send dirLabel set label [format " Directory: %s" $val ] } + newfile { send fnameText set string $val } + status { send filesStatus set label $val + if { ! $panel_up } { send imageTitle set label $val } + send server synchronize + } + warning { if {$warnings} { Wexec server $val } } + gray { send grayscale set on $val } + zscale { send zscale set on $val + if {$val} { + send zrange setSensitive False + } else { + send zrange setSensitive True + } + } + zrange { send zrange set on $val + if {$val} { + foreach w {z1Label z1Value z2Label z2Value} { + send $w setSensitive False + } + } else { + foreach w {z1Label z1Value z2Label z2Value} { + send $w setSensitive True + } + } + } + z1 { send z1Value set string [format "%s" $val ] } + z2 { send z2Value set string [format "%s" $val ] } + nsample { send nsampValue set string [format "%s" $val ] } + } +} ; send loadOptions addCallback doLoadOptions + +# Option utility routines. +proc toggleGraymap args \ +{ + send client setLoadOption gray [ send grayscale get on ] +} ; send grayscale addCallback toggleGraymap + +proc toggleHeaders args \ +{ + if { [send browseHdrs get on] } { + send client setLoadOption headers + send rootButton setSensitive False + send homeButton setSensitive False + send upButton setSensitive False + send rescanButton setSensitive False + send imlistLabel "set height 10 ; map" + } else { + send client setLoadOption rescan + send rootButton setSensitive True + send homeButton setSensitive True + send upButton setSensitive True + send rescanButton setSensitive True + send imlistLabel "set height 0 ; unmap" + } +} ; send browseHdrs addCallback toggleHeaders + +proc toggleZscale args \ +{ + send client setLoadOption zscale [send zscale get on] +} ; send zscale addCallback toggleZscale + +proc toggleZrange args \ +{ + send client setLoadOption zrange [send zrange get on] +} ; send zrange addCallback toggleZrange + +proc setZ1 { widget mode pattern args } \ +{ + send client setLoadOption z1 $pattern +} ; send z1Value addCallback setZ1 + +proc setZ2 { widget mode pattern args } \ +{ + send client setLoadOption z2 $pattern +} ; send z2Value addCallback setZ2 + +proc setNsamp { widget mode pattern args } \ +{ + send client setLoadOption nsample $pattern +} ; send nsampValue addCallback setNsamp + +proc fileLoad { widget mode fname args } \ +{ + loadImage $fname +} ; send fnameText addCallback fileLoad + + + +# Image list selection routines. + +set fileList {} + +proc setFileList { param old new } \ +{ + global fileList + set fileList $new + + # Get the max length of the strings so we can set + # the list columns appropriately. + set max 0 + foreach n $new { + set len [string length $n] + if {$len > $max} { set max $len } + } + + # Optimize the number of columns for the file list. + if {$max > 35} { + send imageList set defaultColumns 1 + } elseif {$max > 21} { + send imageList set defaultColumns 2 + } elseif {$max > 12} { + send imageList set defaultColumns 3 + } elseif {$max > 5} { + send imageList set defaultColumns 4 + } else { + send imageList set defaultColumns 5 + } + + send imageList setList $new resize +}; send filelist addCallback setFileList + +proc flResize args \ +{ + global fileList + send imageList setList $fileList resize +}; send imageList addEventHandler flResize ResizeRedirectMask + +proc flSelectPrint { widget cbtype selections args } \ +{ + if {! [send autoload get on]} \ + return + + foreach selection $selections { + if { [send zrange get on] } { + loadImage [lindex $selection 0] + } else { + loadImage $selection + } + } +}; send imageList addCallback flSelectPrint + + +# Load the named image in the display. +proc loadImage { name } \ +{ + global frame + + set fr [send frameFrame get label] + + if { $fr == "Current" } { set fr $frame } + + if { [fileSetOptions] >= 0 } { + send imagewin setCursorType busy + send client load $name $fr + send imagewin setCursorType idle + send fnameText set string $name + } +} + +# Load button callback. +proc fileLoadB args \ +{ + set fname [send fnameText get string] + if {$fname == ""} { + Wexec client "No image name specified" + } else { + loadImage $fname + } +} ; send filesLoadButton addCallback fileLoadB + + +# Send and selected options to the client before loading the image. +proc fileSetOptions args \ +{ + if { ![send zscale get on] && ![send zrange get on] } { + set z1 [send z1Value get string] + set z2 [send z2Value get string] + + if {$z1 == $z2} { + Wexec client "z1/z2 values are not set properly" + return -1 + } else { + send client setLoadOption z1 $z1 + send client setLoadOption z2 $z2 + } + } + + return 0 +} + + +################################################################################ +# Save panel functions. +################################################################################ + +# Global variables needed for the save setup panel + +set format rasButton +set saveColor svPseudoButton + +set fileFmtButtons { + rasButton gifButton jpegButton tiffButton + fitsButton x11Button epsButton rawButton +} + + +# Format group procedures. +#--------------------------------- + +# Select a format. + +proc set_format { widget func state args } \ +{ + global format saveColor + + send $format set on false + if {$widget == $format} { + send $widget set on true + } else { + switch $widget { + rasButton { send client setSaveOption format ras } + gifButton { send client setSaveOption format gif } + jpegButton { send client setSaveOption format jpeg } + tiffButton { send client setSaveOption format tiff } + fitsButton { send client setSaveOption format fits } + x11Button { send client setSaveOption format x11 } + epsButton { send client setSaveOption format eps } + rawButton { send client setSaveOption format raw } + } + } +} ; foreach fmt $fileFmtButtons { send $fmt addCallback set_format } + +proc setSaveFile { widget cbtype args } \ +{ + send client setSaveOption fname $args + send saveStatus set label [format "output file set to %s" $args] +}; send saveFile addCallback setSaveFile + + +proc doSaveOptions { param old new } \ +{ + global format saveColor + global warnings + + send saveStatus set label {} + set val [join [lrange $new 1 end] " "] + + #print [format "doSaveOptions %s = %s" [lindex $new 0] $val] + switch [lindex $new 0] { + format { + # Now (de)sensitize the color options depending on the format, + # force the color choice when needed. + send $format set on false + switch [lindex $val 0] { + ras { #send svRGBButton setSensitive false + send svPseudoButton setSensitive true + set format rasButton + } + gif { send svRGBButton setSensitive false + send svPseudoButton setSensitive true + if {$saveColor == "svRGBButton"} { + send $saveColor set on false + send svPseudoButton set on true + set saveColor svPseudoButton + } + set format gifButton + } + jpeg { send svRGBButton setSensitive true + send svPseudoButton setSensitive true + set format jpegButton + } + tiff { send svRGBButton setSensitive false + send svPseudoButton setSensitive true + set format tiffButton + } + fits { send svRGBButton setSensitive false + send svPseudoButton setSensitive false + send $saveColor set on false + send svGrayButton set on true + set saveColor svGrayButton + set format fitsButton + } + x11 { send svRGBButton setSensitive true + send svPseudoButton setSensitive true + set format x11Button + } + eps { send svRGBButton setSensitive true + send svPseudoButton setSensitive true + set format epsButton + } + raw { send svRGBButton setSensitive true + send svPseudoButton setSensitive true + set format rawButton + } + } + send $format set on true + } + color { send $saveColor set on false + switch [lindex $val 0] { + grayscale { send svGrayButton set on true + set saveColor svGrayButton + } + pseudocolor { send svPseudoButton set on true + set saveColor svPseudoButton + } + rgb { send svRGBButton set on true + set saveColor svRGBButton + } + } + } + fname { send saveFile set string $val + } + status { send saveStatus set label $val + send server synchronize + } + text { send saveData set label $val + } + warning { if {$warnings} { Wexec server $val } + } + } +} ; send saveOptions addCallback doSaveOptions + + +# Color group procedures. +#--------------------------------- +send svGrayButton addCallback "send client setSaveOption color grayscale" +send svPseudoButton addCallback "send client setSaveOption color pseudocolor" +send svRGBButton addCallback "send client setSaveOption color rgb" + + +proc Save args \ +{ + global panel_up + + send imagewin setCursorType busy + + # Get the print command or file template if not previous reset. + set val [ send saveFile get string ] + send client setSaveOption fname $val + send saveStatus set label [format "output file set to %s" $args] + + send client save + send imagewin setCursorType idle +} ; send okaySave addCallback Save + + + +################################################################################ +# TILE GEOMETRY +################################################################################ + +set tileSel 2 +set tileOpt 0 +set tileNcols 2 +set tileNrows 1 +set tile_frames {} + +proc selectTileOrientation { widget type select args } \ +{ + global tileSel tileOpt + + set w { nrowLab ncolLab nrdecrease nrincrease ncdecrease ncincrease } + if {$select == "Manual"} { + foreach p $w { send $p setSensitive True } + } elseif {$select != "none"} { + foreach p $w { send $p setSensitive False } + } + + set w { byCols bottomUp labelFrames labelImname labelTitles } + if {$select == "Disabled"} { + foreach p $w { send $p setSensitive False } + } else { + foreach p $w { send $p setSensitive True } + } + + switch $select { + Disabled { set tileSel 0 } + Manual { set tileSel 1 + set nx [send nctext get label] + set ny [send nrtext get label] + set select [format "%dx%d" $nx $ny] + } + Best { set tileSel 2 } + Square { set tileSel 3 } + Horizontal { set tileSel 4 } + Vertical { set tileSel 5 } + "One Row" { set tileSel 6 } + "One Column" { set tileSel 7 } + none { send tileMode set selection $tileSel ; return } + } + + # Reset the button in case we're called directly from elsewhere. + send tileMode set selection $tileSel + + # Send the option to the client. + if {$tileSel > 0} { + setTileFrames + send client setOption tileFrames "True" + set tileOpt $tileSel + } else { + send client setOption tileFrames "False" + } + +} ; send tileMode addCallback selectTileOrientation + +proc tileSelToLabel { selection args } \ +{ + switch $selection { + 0 { return "Disabled" } + 1 { return "Manual" } + 2 { return "Best" } + 3 { return "Square" } + 4 { return "Horizontal" } + 5 { return "Vertical" } + 6 { return "One Row" } + 7 { return "One Column" } + } + return "Best" +} + +# Callback for the fill style options. +proc selectFillStyle { widget type state args } \ +{ + if {$state} { set not False } else { set not True } + + switch $widget { + byCols { send client setOption tileByRows $not } + bottomUp { send client setOption tileTopDown $not } + } +} ; foreach w {byCols bottomUp} { send $w addCallback selectFillStyle } + +# Callback for the tile labelling options. +proc selectTileLabels { widget type state args } \ +{ + if {$state} { + switch $widget { + labelFrames { send client setOption tileLabels 1 } + labelImname { send client setOption tileLabels 2 } + labelTitles { send client setOption tileLabels 3 } + } + } else { + send client setOption tileLabels 0 + } + send $widget set on $state +} +foreach w {labelFrames labelImname labelTitles} { + send $w addCallback selectTileLabels +} + +# Callback for the Tile Frame selection toggles. +proc setTileFrames args \ +{ + global tile_frames tileSel tileNcols tileNrows + + # No-op if tiling isn't enabled. + if {$tileSel == 0} \ + return + + # Get the new tile frames list. + set tile_frames {} + for {set i 1} {$i <= 16} {incr i} { + if {[send tFrame$i get state]} { + lappend tile_frames $i + } + } + + # Reset the geometry. + set geom [format "%dx%d" $tileNcols $tileNrows] + switch $tileSel { + 1 { send client setOption tileGeom $geom \{ $tile_frames \} } + 2 { send client setOption tileGeom Best \{ $tile_frames \} } + 3 { send client setOption tileGeom Square \{ $tile_frames \} } + 4 { send client setOption tileGeom Horizontal \{ $tile_frames \} } + 5 { send client setOption tileGeom Vertical \{ $tile_frames \} } + 6 { send client setOption tileGeom Row \{ $tile_frames \} } + 7 { send client setOption tileGeom Column \{ $tile_frames \} } + } +}; for {set i 1} {$i <= 16} {incr i} {send tFrame$i addCallback setTileFrames} + +proc setAllTileFrames args \ +{ + global tileNcols tileNrows + for {set i 1} {$i <= 16} {incr i} { + if {[send tFrame$i get sensitive]} { + send tFrame$i set state True + } + } + setTileFrames +} ; send tAll addCallback setAllTileFrames + +proc setNoTileFrames args \ +{ + global tileNcols tileNrows + for {set i 1} {$i <= 16} {incr i} { + if {[send tFrame$i get sensitive]} { + send tFrame$i set state False + } + } + setTileFrames +} ; send tNone addCallback setNoTileFrames + +proc tileOptions { param old new } \ +{ + global tileNcols tileNrows + + set tileNcols [lindex $new 0] + set tileNrows [lindex $new 1] + + # Set the geometry. + send nctext set label $tileNcols + send nrtext set label $tileNrows + send tileGeometry set label [format \ + "Tile Geometry: %-2dx%2d" $tileNcols $tileNrows] + +} ; send tileOptions addCallback tileOptions + + +proc tileSetRows { widget args } \ +{ + global nframes tile_frames + + set nx [send nctext get label] + set ny [send nrtext get label] + + if {$widget == "nrdecrease" && [expr ($ny-1)] > 0} { + incr ny -1 + } elseif {$widget == "nrincrease" && [expr ($ny+1)] <= $nframes} { + incr ny 1 + } else { + return + } + set geom [format "%dx%d" $nx $ny] + send client setOption tileGeom $geom $tile_frames +} ; foreach w { nrdecrease nrincrease } { send $w addCallback tileSetRows } + +proc tileSetCols { widget args } \ +{ + global nframes tile_frames + + set nx [send nctext get label] + set ny [send nrtext get label] + + if {$widget == "ncdecrease" && [expr ($nx-1)] > 0} { + incr nx -1 + } elseif {$widget == "ncincrease" && [expr ($nx+1)] <= $nframes} { + incr nx 1 + } else { + return + } + set geom [format "%dx%d" $nx $ny] + send client setOption tileGeom $geom $tile_frames +} ; foreach w { ncdecrease ncincrease } { send $w addCallback tileSetCols } + + +# Initialize the frame tiling. +setAllTileFrames +selectTileOrientation junk junk Disabled +selectFillStyle byRows junk True +selectFillStyle topDown junk True +selectTileLabels labelImname junk False + +################################################################################ +# Coords Panel Callbacks. +################################################################################ + +# In case we need to change the values.... +#global wcsPHeight wcsPTxtHeight wcsPGrHeight wcsPOptHeight +#set wcsPHeight 267 +#set wcsPTxtHeight 132 +#set wcsPGrHeight 175 +#set wcsPOptHeight 233 +#setCoordPanelHeight + +set wcsPHeight 267 ;# full panel no options +set wcsPTxtHeight 132 ;# size of text area box +set wcsPGrHeight 175 ;# size of text area group +set wcsPOptHeight 233 ;# extra height for opts boxes + +# Set the WCS readout panel sensitivity depending on whether the ISM +# is currently enabled. +proc setCoordPanelSensitivity args \ +{ + set widgets { + wpWcs2 wpWcs3 wpWcs4 + wiWcs2 wiWcs3 wiWcs4 + wlWcs2 wlWcs3 wlWcs4 + sysWcs2 sysWcs3 sysWcs4 + fmtWcs2 fmtWcs3 fmtWcs4 + } + + send sysWcs1 set label "Display" + send fmtWcs1 set label "Default" + + for {set i 2} {$i <= 4} {incr i} { + send sysWcs$i set label "None" ; send fmtWcs$i set label "Default" + send wpWcs$i set on False ; send wiWcs$i set on False + send wtWcs$i set height 4 + } + + if {[send ismToggle get on]} { + send sysWcs2 set label "World" ; send fmtWcs2 set label "Default" + send wpWcs2 set on True ; send wiWcs2 set on True + send wtWcs2 set height 17 + + foreach w $widgets { send $w setSensitive True } + } else { + foreach w $widgets { send $w setSensitive False } + } +} + + +# Set the Coords Panel height depending on the option settings. +proc setCoordPanelHeight args \ +{ + global wcsPHeight wcsPOptHeight wcsPTxtHeight wcsPGrHeight + global tabTop + + if {$tabTop != "wcs_panel"} \ + return + + # Get the height of the text area + set panel_h $wcsPHeight + set shrinkage 0 + foreach w { wpWcs1 wpWcs2 wpWcs3 wpWcs4 woptFBinfo } { + if {[send $w get on] == 0} { + incr shrinkage 13 + } + } + if {[send woptTitles get on] == 0} { + incr shrinkage 26 + } + + set ph [expr ($wcsPHeight - $shrinkage)] + if {[send wcsOptions get on] == 1} { + incr ph $wcsPOptHeight + } + + send wcsGroup set height [ expr ($wcsPGrHeight - $shrinkage) ] + send wcsFrame set height [ expr ($wcsPTxtHeight - $shrinkage) ] + send panel set height $ph +} + +# Toggle the options display for the panel. +proc wcsOptToggle { widget type state args } \ +{ + global wcsPOptHeight + set h [ send panel get height ] + if {$state == 1} { + send panel set height [ expr ($h + $wcsPOptHeight) ] + } else { + send panel set height [ expr ($h - $wcsPOptHeight) ] + } +} ; send wcsOptions addCallback wcsOptToggle + +# Handle the panel display toggles. +proc wcsCoordsCB { widget type state args } \ +{ + + set hght [ expr (($state == 1) ? 17 : 4)] + switch $widget { + wpWcs1 { send wtWcs1 set height $hght } + wpWcs2 { send wtWcs2 set height $hght } + wpWcs3 { send wtWcs3 set height $hght } + wpWcs4 { send wtWcs4 set height $hght } + woptFBinfo { send wtFBCfg set height $hght } + woptTitles { send wtName set height $hght ; send wtTitle set height $hght } + } + setCoordPanelHeight +} +set wcValues { wpWcs1 wpWcs2 wpWcs3 wpWcs4 woptFBinfo woptTitles } +foreach w $wcValues { send $w addCallback wcsCoordsCB } + + +# Handle WCS label string options. +set wcsLabels 1 +proc wcsLabelsCB { widget type state args } \ +{ + global up_todo wcsLabels + set wcsLabels $state + #resizeCoordsBox 0 + resizeCoordsBox $up_todo + updateCoordsBox +} ; send woptLabels addCallback wcsLabelsCB + + +# Toggle the BPM tracking state. +proc wcsBPMCB { widget type state args } \ +{ + global ism_enable + if ($ism_enable) { catch { send wcspix set bpm $state } } +} ; send woptBPM addCallback wcsBPMCB + + +# Procedures to format lines in the wcsText box. +proc wcsFmtImname { name } \ +{ + send wtName set string [format " Name: %s" [string trimleft $name]] +} + +proc wcsFmtImtitle { title } \ +{ + send wtTitle set string [format " Title: %s" [string trimleft $title]] +} + +proc wcsFmtFBConfig args \ +{ + global frameWidth frameHeight frame nframes + set buf [ format "%5d x %-5d" $frameWidth $frameHeight ] + set line [ format "Frame Buf: %-13s Frame: %d of %d" \ + [string trimleft $buf] $frame $nframes ] + send wtFBCfg set string $line +} + +proc wcsFmtIValue { value } \ +{ + global coord + set line [ format " Pixel: %.11s" $value ] + send wtIPixval set string $line + if {[info exists coord(ival)]} { + set coord(ival) $value + updateCoordsBox + } +} + +proc wcsFmtSValue { value } \ +{ + global coord + set line [ format " Scaled: %.8s" $value ] + send wtSPixval set string $line + set coord(sval) [format "%s" $value] +} + +proc wcsFmtBValue { value } \ +{ + global coord + + if { [send woptBPM get on] } { + set line [ format " BPM: %s" $value ] + set color [expr { ($value == 0) ? "black" : "red" } ] + set msg [format "set string \{%s\}; set background %s" $line $color ] + set coord(bval) [format "%s" $value] + } else { + set line [ format " BPM: (off)" ] + set msg [format "set string \{%s\}" $line] + } + send wtBPixval $msg +} + +proc wcsFmtWcs { num wcsname x y xunit yunit args } \ +{ + global coord coordLab wcsLabels + + if {$wcsLabels} { + set line [ format "%4s: %12s %4s: %12s WCS: %s" \ + $xunit $x $yunit $y [string trimleft $wcsname] ] + } else { + set line [ format "%4s %12s %4s %12s %s" \ + " " $x " " $y [string trimleft $wcsname] ] + } + send wtWcs$num set string $line + + if {[info exists coord(wcs$num)]} { + if {$num == 1} { + set coord(wcs1) [ format "\{%s\} \{%s\} \{%s\}" $x $y $coord(sval) ] + } elseif {$num == 2} { + set coord(wcs2) [ format "\{%s\} \{%s\} \{%s\}" $x $y $coord(ival) ] + } else { + set coord(wcs$num) [ format "\{%s\} \{%s\} \{%s\}" $x $y $wcsname ] + } + + set coordLab(wcs$num) [ format "\{%s\} \{%s\} \{%s\}" \ + $xunit $yunit [string trimleft $wcsname ] ] + updateCoordsBox + } +} + + + +# Handle the wcsbox readout. +#------------------------------ +set up_todo 2 +set up_done 0 +set coord(ival) 0. +set coord(sval) 0. +set coord(bval) 0 +set coord(wcs1) { 0. 0. 0. } +set coord(wcs2) { 0. 0. 0. } +set coord(wcs3) { 0. 0. 0. } +set coord(wcs4) { 0. 0. 0. } + +proc wcsCoordB { widget type state args } \ +{ + global coord up_todo + + switch $widget { + wiWcs1 { set line wcs1 ;set coord($line) { 0. 0. "" } } + wiWcs2 { set line wcs2 ;set coord($line) { 0. 0. "" } } + wiWcs3 { set line wcs3 ;set coord($line) { 0. 0. "" } } + wiWcs4 { set line wcs4 ;set coord($line) { 0. 0. "" } } + } + + if {$state} { + incr up_todo + } else { + unset coord($line) + incr up_todo -1 + } + + resizeCoordsBox $up_todo + updateCoordsBox +} +set wiValues { wiWcs1 wiWcs2 wiWcs3 wiWcs4 } +foreach w $wiValues { send $w addCallback wcsCoordB } + + +# Resize the coords box depending on the panel options. +proc resizeCoordsBox { nlines } \ +{ + global track_enable wcsLabels winWidth winHeight wcsboxGeom + + if {! $track_enable} \ + return + + send wcsbox getAttributes width cur_w height cur_h + set defGeom [format "%sx%s-5-5" $cur_w $cur_h] + send imagewin parseGeometry $wcsboxGeom $defGeom x y width height + + set ew [expr (($wcsLabels == 1) ? 125 : 65)] + + # Reset to the default geometry + if {$nlines == 0} { + set x [expr ($x + $ew)] + set y [expr ($y + $height - 17 + 1)] + set new_w 166 + set new_h 17 + + } else { + if {$width > 166} { ;# not using default wcsbox + set new_w $width + } else { + set new_w [expr ($width + $ew)] + set x [expr ($x - $ew)] + if {$wcsLabels == 0} { + incr x 60 + } + } + set new_h [ expr ($nlines * 17) ] + set y [expr ($y + $height - $new_h + 1)] + } + + # Bounds checking. + if {$x < 5} { + set x 5 + } elseif {$x > [expr ($winWidth - $new_w - 5)]} { + set x [expr ($winWidth - $new_w - 5)] + } + if {$y < 5} { + set y 5 + } elseif {$y > [expr ($winHeight - $new_h - 5)]} { + set y [expr ($winHeight - $new_h - 5)] + } + + # Finally redraw the marker. + send wcsbox "\ + setAttributes \ + width $new_w \ + height $new_h \ + x $x \ + y $y; \ + redraw" + + set wcsboxGeom [send imagewin getGeometry $x $y $new_w $new_h] + send client encodewcs [expr ($winWidth / 2)] [expr ($winHeight / 2)] + updateCoordsBox +} + + +# Shortcuts for known WCS labels. +set labels(display) "TV" +set labels(logical) "Log" +set labels(physical) "Phys" +set labels(equatorial) "Eq" +set labels(ecliptic) "Ecl" +set labels(galactic) "Gal" +set labels(supergalactic) "SGal" +set labels(amplifier) "Amp" +set labels(ccd) "CCD" +set labels(detector) "Det" + + +# Format the coords box marker with the selected output options. +proc updateCoordsBox args \ +{ + global ism_enable coord coordLab wcsLabels + global up_done up_todo labels track_enable + global coord + + if {! $ism_enable} \ + return + + incr up_done + + set text "" + foreach l {wcs1 wcs2 wcs3 wcs4} { + if {[info exists coord($l)]} { + set x [lindex $coord($l) 0] + set y [lindex $coord($l) 1] + set z [string tolower [string trimleft [lindex $coord($l) 2] ] ] + if {[info exists labels($z)]} { + set z $labels($z) + } + + if {$wcsLabels && [info exists coordLab($l)]} { + set lx [lindex $coordLab($l) 0] + set ly [lindex $coordLab($l) 1] + append text [format " %4s %12.12s %4s %12.12s %9.9s \n" \ + $lx $x $ly $y $z ] + } else { + append text [format " %12.12s %12.12s %9.9s \n" $x $y $z ] + } + } + } + + # Now send the string. + if {$track_enable} { + set color [expr { ($coord(bval) == 0) ? "black" : "red" } ] + set txt [format "set text \{%s\}; set textBgColor %s; redraw noerase" \ + $text $color ] + send wcsbox $txt + } + + if {$up_done >= $up_todo} { + set up_done 0 ;# reset counter + } +} + + +# Create the WCS format menus. +#------------------------------------ +proc setWcsFmt { format line } \ +{ + catch { send wcspix set format $format $line } +} + +for {set i 1} {$i <= 4} {incr i} { + set items {} + lappend items "\"Default\" f.exec \{setWcsFmt default $i\}" + lappend items "\"Sexigesimal\" f.exec \{setWcsFmt hms $i\}" + lappend items "\"Degrees\" f.exec \{setWcsFmt deg $i\}" + lappend items "\"Radians\" f.exec \{setWcsFmt rad $i\}" + editMenu fmtMenu$i fmtWcs$i $items +} + + +# Create the default WCS type menus. +#------------------------------------ + +set defaultWcsMenu { + { "None" f.exec {setWcsSys none WCS_LINE } } + { "Display" f.exec {setWcsSys display WCS_LINE } } + { "World" f.exec {setWcsSys world WCS_LINE } } + { "Logical" f.exec {setWcsSys logical WCS_LINE } } + { "Physical" f.exec {setWcsSys physical WCS_LINE } } + { f.dblline } +} + +proc setWcsSys { sys line } \ +{ + if {[string tolower $sys] == "none"} { + wcsCoordB wiWcs$line junk 0 + send sysWcs$line set label "None"; send fmtWcs$line set label "Default" + send wpWcs$line set on False ; send wiWcs$line set on False + send wtWcs$line set height 4 + setCoordPanelHeight + + } else { + catch { send wcspix set wcs $sys $line } + } +} + +proc resetDefaultWcsMenu args \ +{ + global defaultWcsMenu + + for {set i 1} {$i <= 4} {incr i} { + regsub -all WCS_LINE $defaultWcsMenu $i menu_def + editMenu sysMenu$i sysWcs$i $menu_def + } +} ; resetDefaultWcsMenu + + +# Initialize the coordinates panel. +#------------------------------------ + +proc initCoordsPanel args \ +{ + #send wcLine set height 2 ;# kludge for label widget + + # Initialize the display strings in the coords box. + wcsFmtImname "" + wcsFmtImtitle "" + wcsFmtFBConfig + wcsFmtIValue "0." ; wcsFmtSValue "0." ; wcsFmtBValue "0" + wcsFmtWcs 1 "" "" "" " X" " Y" + wcsFmtWcs 2 "" "" "" " X" " Y" + wcsFmtWcs 3 "" "" "" " X" " Y" + wcsFmtWcs 4 "" "" "" " X" " Y" + + send fmtWcs1 set label Default + send wpWcs1 set on True ;send wiWcs1 set on True + send wpWcs2 set on True ;send wiWcs2 set on True + send wpWcs3 set on False ;send wiWcs3 set on False ;send wtWcs3 set height 4 + send wpWcs4 set on False ;send wiWcs4 set on False ;send wtWcs4 set height 4 + + # Set the Coords Panel height. + set wcsPTxtHeight [send wcsText get height] + setCoordPanelHeight + + # Set the WCS readout panel sensitivity. + setCoordPanelSensitivity + +} ; initCoordsPanel + + + + +################################################################################ +# Compass indicator procedures. +################################################################################ + +set compassColor 207 ;# normally this is yellow +set last_compass [send compass get on] ;# save compass state + +proc drawCompass args \ +{ + global ism_enable frame frameCache compassColor Compass Orient + global panner_x panner_y panner_width panner_height cur_objid + global redraw_compass last_compass + + + if {! [send compass get on]} \ + return + + eraseCompass ;# erase the old compass + + if {! [info exists frameCache($frame)] } { + set id -1 + } elseif {$cur_objid != [lindex $frameCache($frame) 1]} { + set id [lindex $frameCache($frame) 1] + } else { + set id $cur_objid + } + + if { [info exists Compass($id)] } { + set angle [lindex $Compass($id) 0] + set north_x [lindex $Compass($id) 1] + set north_y [lindex $Compass($id) 2] + set east_x [lindex $Compass($id) 3] + set east_y [lindex $Compass($id) 4] + set transpose [lindex $Compass($id) 5] + set xlab [lindex $Compass($id) 6] + set ylab [lindex $Compass($id) 7] + } else { + set north_x 0.0 ; set north_y 1.0 + set east_x 1.0 ; set east_y 0.0 + set xlab X ; set ylab Y + set angle 0.0 ; set transpose 0 + set Compass($id) { 0.0 1.0 0.0 1.0 0.0 0 X Y } + } + set xflip 1 + set yflip 1 + + # Adjust the compass for the display orientation (e.g. image sections + # used to flip an image during display). + if { [info exists Orient($id)] } { + set xflip [expr $xflip * [lindex $Orient($id) 1] ] + set yflip [expr $yflip * [lindex $Orient($id) 2] ] + } + + # Get the panner center position. + set pcx [expr ($panner_x + $panner_width / 2)] + set pcy [expr ($panner_y + $panner_height / 2)] + + # Setup for the overlay. + send imagewin getLogRes sv_xl sv_yl + send imagewin getPhysRes sv_xp sv_yp + send imagewin setLogRes $sv_xp $sv_yp + send imagewin setLineWidth 2 + + set xflip [ expr ($xflip * ([send xflipButton get state] ? -1 : 1))] + set yflip [ expr ($yflip * ([send yflipButton get state] ? -1 : 1))] + + # Normalized compass points. The first row are the axes, second is + # the pointer head, and last are the X/Y label coords. Assumes a + # zero rotation with North up and East left, or standard X/Y orientation. + set cpoints { + {-1 0} {0 0} {0 -1} + {-0.07 -0.85} {0 -1} {0.07 -0.85} {-0.07 -0.85} + {-1.2 0} {0 -1.2} + } + + + # Get rotation and scale factors. + set angle [expr "atan2($north_y,$north_x)"] + set coso [expr "cos (-$angle)"] + set sino [expr "sin (-$angle)"] + set scale [expr ([min $panner_width $panner_height] * 0.3)] + + # Initialize the drawing points. + set pts {} + + set cpoints { } + lappend cpoints [list $east_x $east_y ] + lappend cpoints [list 0 0] + lappend cpoints [list $north_x $north_y] + foreach p $cpoints { + # Get the scaled position. + set sx [expr ($scale * [lindex $p [expr "($transpose > 0) ? 1 : 0"]])] + set sy [expr ($scale * [lindex $p [expr "($transpose > 0) ? 0 : 1"]])] + + # Translate to the scaled position. + set rx [expr int($pcx + $sx + 0.5)] + set ry [expr int($pcy - $sy + 0.5)] + + # Now handle the axis flip. + set rx [expr (($xflip < 0) ? ($pcx + ($pcx - $rx)) : $rx)] + set ry [expr (($yflip < 0) ? ($pcy + ($pcy - $ry)) : $ry)] + lappend pts $rx $ry + } + + + set rpoints { } + set hpoints { {0.0 0.0} {-0.1 -0.07} {-0.1 0.07} {0.0 0.0} } + foreach p $hpoints { + # Break out the position. + set sx [lindex $p [expr "($transpose > 0) ? 1 : 0"]] + set sy [lindex $p [expr "($transpose > 0) ? 0 : 1"]] + + # Do the rotation of the head at the origin. + set rx [expr ($north_x + ($sx * $coso + $sy * $sino))] + set ry [expr ($north_y - ($sx * $sino + $sy * $coso))] + + lappend rpoints [list $rx $ry] + } + foreach p $rpoints { + # Get the scaled position. + set sx [expr ($scale * [lindex $p [expr "($transpose > 0) ? 1 : 0"]])] + set sy [expr ($scale * [lindex $p [expr "($transpose > 0) ? 0 : 1"]])] + + # Translate to the scaled position. + set rx [expr int($pcx + $sx + 0.5)] + set ry [expr int($pcy - $sy + 0.5)] + + # Now handle the axis flip. + set rx [expr (($xflip < 0) ? ($pcx + ($pcx - $rx)) : $rx)] + set ry [expr (($yflip < 0) ? ($pcy + ($pcy - $ry)) : $ry)] + lappend pts $rx $ry + } + + set lpoints { } + lappend lpoints [list [expr "$east_x-0.2"] $east_y ] + lappend lpoints [list $north_x [expr "$north_y+0.2"] ] + foreach p $lpoints { + # Get the scaled position. + set sx [expr ($scale * [lindex $p [expr "($transpose > 0) ? 1 : 0"]])] + set sy [expr ($scale * [lindex $p [expr "($transpose > 0) ? 0 : 1"]])] + + # Translate to the scaled position. + set rx [expr int($pcx + $sx + 0.5)] + set ry [expr int($pcy - $sy - 0.5)] + + # Now handle the axis flip. + set rx [expr (($xflip < 0) ? ($pcx + ($pcx - $rx)) : $rx)] + set ry [expr (($yflip < 0) ? ($pcy + ($pcy - $ry)) : $ry)] + lappend pts $rx $ry + } + + + # Draw the compass axes. + set compassPts [lrange $pts 0 5] + send imagewin setColorIndex $compassColor + send imagewin drawPolyline $compassPts + + + # Draw the compass pointer. + set head [lrange $pts 6 13] + send imagewin setFillType solid + send imagewin drawPolygon $head + + # Draw the labels. + send imagewin drawAlphaText [lindex $pts 14] [lindex $pts 15] $xlab + send imagewin drawAlphaText [lindex $pts 16] [lindex $pts 17] $ylab + + send imagewin setLogRes $sv_xl $sv_yl + + set redraw_compass 0 + +} ; foreach w {xflip yflip} { send $w addCallback drawCompass } + + +# This is a kludge to redraw the compass after it is erased when displaying +# a new image. Once the user moves the mouse back into the main window we'll +# do the redraw. +send imagewin addEventHandler drawCompass enterWindowMask + + + +proc createCompassMarker { pts args } \ +{ + set cm_points { } + lappend cm_points [lrange $pts 0 1] + lappend cm_points [lrange $pts 2 3] + lappend cm_points [lrange $pts 4 5] + + print [list $cm_points] + +} + + +proc eraseCompass args \ +{ + global panner_mapping + send imagewin refreshMapping $panner_mapping +} + +proc toggleCompass { widget type state args } \ +{ + global last_compass + + if {$state} { + drawCompass + set last_compass True + } else { + eraseCompass + set last_compass False + } +} ; send compass addCallback toggleCompass + + + + +################################################################################ +# RULER MARKERS +################################################################################ + +set rulerX 0 ;# ruler start in screen coords +set rulerY 0 +set rulerPts { {0 0} {0 0} {0 0} } ;# ruler vertices +set rulerList { } ;# ruler list + +set rulerSticky { } ;# list of sticky rulers +set isSticky "Sticky" ;# menu label + +set rulerWCS 0 ;# use WCS coords +set rulerXWCS 0 ;# ruler start in WCS units +set rulerYWCS 0 +set rulerXWCS2 0 ;# ruler end in WCS units +set rulerYWCS2 0 +set rulerFmt pixel ;# ruler label format + + +# Translations when pointer is inside marker. +set rulerTranslations { \ + !Ctrl b: call(prevFrame,$name) + !Ctrl b: call(prevFrame,$name) + !Ctrl f: call(nextFrame,$name) + !Ctrl h: call(move_cursor,-1,0) + !Ctrl j: call(move_cursor,0,1) + !Ctrl k: call(move_cursor,0,-1) + !Ctrl l: call(move_cursor,1,0) + !Ctrl n: call(normalize) + !Ctrl c: call(cpZoomAction,centerFrame) + !Ctrl i: call(cpInvert) + !Ctrl m: call(cpMatchFrames) + !Ctrl r: call(cpRegisterFrames) + !Ctrl p: call(togglePanner) + !Alt 1: call(cpSetFrame,frame1) + !Alt 2: call(cpSetFrame,frame2) + !Alt 3: call(cpSetFrame,frame3) + !Alt 4: call(cpSetFrame,frame4) + !Ctrl 1: call(cpZoom,1,1,fixed) + !Ctrl 2: call(cpZoom,2,2,fixed) + !Ctrl 3: call(cpZoom,3,3,fixed) + !Ctrl 4: call(cpZoom,4,4,fixed) + !Ctrl 5: call(cpZoom,5,5,fixed) + !Ctrl 6: call(cpZoom,6,6,fixed) + !Ctrl 7: call(cpZoom,7,7,fixed) + !Ctrl 8: call(cpZoom,8,8,fixed) + !Ctrl 9: call(cpZoom,9,9,fixed) + BackSpace: call(deleteNamedRuler,NAME,$x,$y) + Delete: call(deleteNamedRuler,NAME,$x,$y) + : m_input() + : call(setRulerMenu) popup(rulerMenu) + : popdown(rulerMenu) +!Ctrl : track-cursor() call(wcsUpdate,$x,$y) call(resizeRuler,$x,$y,0) + !Ctrl : call(deleteRuler,$x,$y) + : track-cursor() call(wcsUpdate,$x,$y) call(magnifierMapImage,$x,$y) +} + + + +# Popup menu in effect when inside marker. +set rulerMenuDescription { + { "Ruler" f.title } + { f.dblline } + { "$isSticky" f.exec { + toggleSticky $ruler + } } + { f.line } + { "Units" f.menu rulerUnits } + { "Color" f.menu rulerColor } + { f.line } + { "Draw into Frame" f.exec { + writeRuler $ruler + } sensitive False } + { f.line } + { "Destroy" f.exec { + scan $ruler "ruler%d" num + deleteNamedRuler $num x y + } } +} ; createMenu rulerMenu imagewin $rulerMenuDescription + +set rulerUnitsDescription { + { Units f.title } + { f.dblline } + { "Pixels" f.exec { setUnits $ruler pixel } } + { "Arc Seconds" f.exec { setUnits $ruler arcsec + } sensitive { ($rulerWCS > 0) ? "True" : "False"} } + { "Arc Minutes" f.exec { setUnits $ruler arcmin + } sensitive { ($rulerWCS > 0) ? "True" : "False"} } + { "Degrees" f.exec { setUnits $ruler degrees + } sensitive { ($rulerWCS > 0) ? "True" : "False"} } +} ; createMenu rulerUnits rulerMenu $rulerUnitsDescription + +set rulerColorDescription { + { Color f.title } + { f.dblline } + { "" f.exec "r_setColor $ruler black yellow" + bitmap solid foreground black } + { "" f.exec "r_setColor $ruler white black" + bitmap solid foreground white } + { "" f.exec "r_setColor $ruler red yellow" + bitmap solid foreground red } + { "" f.exec "r_setColor $ruler green black" + bitmap solid foreground green } + { "" f.exec "r_setColor $ruler blue white" + bitmap solid foreground blue } + { "" f.exec "r_setColor $ruler magenta black" + bitmap solid foreground magenta } + { "" f.exec "r_setColor $ruler cyan black" + bitmap solid foreground cyan } + { "" f.exec "r_setColor $ruler yellow black" + bitmap solid foreground yellow } +} ; createMenu rulerColor rulerMenu $rulerColorDescription + + +proc makeRuler {parent x y} \ +{ + global rulerTranslations ruleno rulerWCS rulerXWCS rulerYWCS + global rulerPts rulerX rulerY rulerList + global isSticky rulerMenuDescription rulerUnitsDescription + global coord coordLab + + + incr ruleno ; set ruler ruler$ruleno + + # Substitute so the marker translation will delete the marker + # by it's number rather than the default parent widget name. + regsub -all NAME $rulerTranslations $ruleno translations + + # Create the polygon for the marker. + send $parent createMarker $ruler \ + type polygon\ + createMode noninteractive\ + translations $translations\ + lineColor yellow\ + fill False\ + highlightWidth 1\ + highlightColor yellow\ + knotSize 0\ + activated True\ + visible False\ + sensitive True\ + x $x\ + y $y + + # Define a callback so we can identify the ruler. + send $ruler addCallback selectRuler focusIn focusOut + + # Create the text markers for the labels. + send $parent set markerTextFont 6x9 + makeLabelMarker $parent rulerXlab$ruleno 5ch 1ch + makeLabelMarker $parent rulerYlab$ruleno 5ch 1ch + makeLabelMarker $parent rulerHlab$ruleno 8ch 1ch + send $parent set markerTextFont 6x13 + + set rulerX $x ;# save the reference point + set rulerY $y + + set ref [ list $x $y ] ;# initialize the polygon + set rx [ list [expr "$x +1"] $y ] + set ry [ list $x [expr "$y +1"] ] + set rulerPts [list $ref $rx $ry ] + + send $ruler setVertices $rulerPts ;# set attributes + send $ruler set visible True" + send $ruler setAttribute autoRedraw True + + # See whether we have a WCS to use. + set rulerWCS 0 + set rulerXWCS 0 + set rulerYWCS 0 + for {set num 1} {$num <= 4 && $rulerWCS == 0} {incr num} { + if { [info exists coordLab(wcs$num)] } { + set xl [string tolower [lindex $coordLab(wcs$num) 0]] + set yl [string tolower [lindex $coordLab(wcs$num) 1]] + set fmt [string tolower [send fmtWcs$num get label] ] + if {$xl==" ra" || $xl=="elon" || $xl=="glon" || $xl=="slon"} { + set rulerWCS $num + set rulerXWCS [wcs2log [lindex $coord(wcs$num) 0] $xl $fmt] + set rulerYWCS [wcs2log [lindex $coord(wcs$num) 1] $yl $fmt] + } + } + } + + # Edit the menus. + set isSticky "Sticky" + editMenu rulerMenu imagewin $rulerMenuDescription + editMenu rulerUnits imagewin $rulerUnitsDescription + + + lappend rulerList $ruleno +} + +proc wcs2log { val label fmt} \ +{ + set newval $val + if {$fmt == "sexigesimal" || $fmt == "default"} { + scan $val "%d:%d:%f" h m s + set newval [expr "double($h) + double($m) / 60.0 + double($s) / 3600.0"] + if {$label == " ra"} { + set newval [expr "double($newval * 15.0)"] + } + } + return [expr "double($newval)" ] +} + + +proc resizeRuler {x y redraw} \ +{ + global rulerPts rulerX rulerY ruleno coord coordLab + global rulerWCS rulerXWCS rulerYWCS rulerFmt + global rulerXWCS2 rulerYWCS2 + + + # Track the mouse. + set ref [ list $rulerX $rulerY ] + set rx [ list $x $rulerY ] + set ry [ list $x $y ] + set rulerPts [list $ref $rx $ry ] + + # Compute the distances. + if {$rulerWCS > 0} { + set num $rulerWCS + set xl [string tolower [lindex $coordLab(wcs$num) 0]] + set yl [string tolower [lindex $coordLab(wcs$num) 1]] + set fmt [string tolower [send fmtWcs$num get label] ] + + # Save the cursor coords in WCS so we can convert labels. + if {$redraw} { + set nx $rulerXWCS2 + set ny $rulerYWCS2 + } else { + set nx [wcs2log [lindex $coord(wcs$num) 0] $xl $fmt] + set ny [wcs2log [lindex $coord(wcs$num) 1] $yl $fmt] + set rulerXWCS2 $nx + set rulerYWCS2 $ny + } + } + + if {$rulerFmt == "pixel"} { + set xdist [ expr "abs($x - $rulerX)" ] + set ydist [ expr "abs($y - $rulerY)" ] + set hdist [ expr "sqrt($xdist * $xdist + $ydist * $ydist)" ] + } else { + set xdist [ expr "abs($nx - $rulerXWCS)" ] + set ydist [ expr "abs($ny - $rulerYWCS)" ] + set hdist [ expr "sqrt($xdist * $xdist + $ydist * $ydist)" ] + } + + # Redraw the polygon. + send ruler$ruleno setVertices $rulerPts + + # Label the distances. + setXRulerLabel $x $y $xdist + setYRulerLabel $x $y $ydist + setHRulerLabel $x $y $hdist +} + +# Create a label marker for the ruler. +proc makeLabelMarker { parent name width height } \ +{ + send $parent createMarker $name \ + type text \ + createMode noninteractive \ + width $width \ + height $height \ + lineWidth 0 \ + imageText true \ + textBgColor yellow \ + textColor black \ + activated true \ + visible false +} + +proc setXRulerLabel { cx cy dist } \ +{ + global rulerX rulerY ruleno winWidth winHeight + global cpXscale rulerFmt + + send rulerXlab$ruleno set visible False + + if {[expr "abs($cx - $rulerX)"] > 30} { + switch $rulerFmt { + pixel { set text [format "%.1f" [expr "$dist / $cpXscale"] ] } + arcsec { set text [format "%.2f\"" [expr "$dist * 3600.0"] ] } + arcmin { set text [format "%.2f\'" [expr "$dist * 60.0"] ] } + degrees { set text [format "%.2fd" "$dist" ] } + } + set len [expr [string length $text] + 1] + send rulerXlab$ruleno "set width ${len}ch" + + # Compute the placement of the label marker. + if {$cy > $rulerY} { + set yp [expr "$rulerY - 14"] + } else { + set yp [expr "$rulerY + 2"] + } + if {$cx > $rulerX} { + set xp [expr "$rulerX + abs($cx - $rulerX)/2 - 10"] + } else { + set xp [expr "$rulerX - abs($cx - $rulerX)/2 - 10"] + } + + # Bounds checking. + if {$xp < 0} { set xp 1 } + if {$yp < 0} { set yp 1 } + if {$xp > $winWidth} { set xp [expr "$winWidth - 20" } + if {$yp > $winHeight} { set yp [expr "$winHeight - 20" } + + send rulerXlab$ruleno "setAttributes x $xp y $yp" + send rulerXlab$ruleno "set text \{$text\}; redraw erase" + + send rulerXlab$ruleno set visible True + } +} + +proc setYRulerLabel { cx cy dist } \ +{ + global rulerX rulerY ruleno winWidth winHeight + global cpYscale rulerFmt + + send rulerYlab$ruleno set visible False + + if {[expr "abs($cy - $rulerY)"] > 20} { + switch $rulerFmt { + pixel { set text [format "%.1f" [expr "$dist / $cpYscale"] ] } + arcsec { set text [format "%.2f\"" [expr "$dist * 3600.0"] ] } + arcmin { set text [format "%.2f\'" [expr "$dist * 60.0"] ] } + degrees { set text [format "%.2fd" "$dist" ] } + } + set len [expr [string length $text] + 1] + send rulerYlab$ruleno "set width ${len}ch" + + # Compute the placement of the label marker. + if {$cx > $rulerX} { + set xp [expr "$cx + 2"] + } else { + set xp [expr "$cx - $len * 6 - 5"] + } + if {$cy > $rulerY} { + set yp [expr "$rulerY + abs($cy - $rulerY)/2"] + } else { + set yp [expr "$rulerY - abs($cy - $rulerY)/2"] + } + + # Bounds checking. + if {$xp < 0} { set xp 1 } + if {$yp < 0} { set yp 1 } + if {$xp > $winWidth} { set xp [expr "$winWidth - 20" } + if {$yp > $winHeight} { set yp [expr "$winHeight - 20" } + + send rulerYlab$ruleno "setAttributes x $xp y $yp" + send rulerYlab$ruleno "set text \{$text\}; redraw erase" + send rulerYlab$ruleno set visible True + } +} + +proc setHRulerLabel { cx cy dist } \ +{ + global rulerX rulerY ruleno winWidth winHeight + global cpYscale cpXscale rulerFmt + + send rulerHlab$ruleno set visible False + + set xdist [ expr "abs($cx - $rulerX)" ] + set ydist [ expr "abs($cy - $rulerY)" ] + set hdist [ expr "sqrt($xdist * $xdist + $ydist * $ydist)" ] + + if {$hdist > 30} { + switch $rulerFmt { + pixel { set text [format "%.1f" [expr "$dist / $cpXscale"] ] } + arcsec { set text [format "%.2f\"" [expr "$dist * 3600.0"] ] } + arcmin { set text [format "%.2f\'" [expr "$dist * 60.0"] ] } + degrees { set text [format "%.2fd" "$dist" ] } + } + set len [expr [string length $text] + 1] + send rulerHlab$ruleno "set width ${len}ch" + + # Compute the placement of the label marker. + if {$cx > $rulerX} { + set xp [expr "$rulerX + abs($cx - $rulerX)/2 - $len * 6"] + } else { + set xp [expr "$rulerX - abs($cx - $rulerX)/2 - $len * 3"] + } + if {$cy > $rulerY} { + set yp [expr "$rulerY + abs($cy - $rulerY)/2"] + } else { + set yp [expr "$rulerY - abs($cy - $rulerY)/2"] + } + + # Bounds checking. + if {$xp < 0} { set xp 1 } + if {$yp < 0} { set yp 1 } + if {$xp > $winWidth} { set xp [expr "$winWidth - 20" } + if {$yp > $winHeight} { set yp [expr "$winHeight - 20" } + + send rulerHlab$ruleno "setAttributes x $xp y $yp" + send rulerHlab$ruleno "set text \{$text\}; redraw erase" + send rulerHlab$ruleno set visible True + } else { + send rulerHlab$ruleno set visible False + } +} + + +# Callback executed when a marker gets or loses the focus. +proc selectRuler {active_ruler event event_data} \ +{ + global ruler + switch $event { + focusIn { set ruler $active_ruler } + focusOut { } + } +} + +# Reset the ruler format type. +proc setUnits { ruler units } \ +{ + global rulerFmt rulerX rulerY + + send $ruler getVertices pts + set rulerX [lindex [lindex [lindex $pts 0] 0] 0] + set rulerY [lindex [lindex [lindex $pts 0] 0] 1] + set cx [lindex [lindex [lindex $pts 0] 1] 0] ; incr cx -1 + set cy [lindex [lindex [lindex $pts 0] 2] 1] ; incr cy -1 + + set rulerFmt $units + resizeRuler $cx $cy 1 +} + +# Menu option toggle callbacks. +proc toggleSticky { ruler } \ +{ + global isSticky rulerSticky rulerMenuDescription + + set index [ lsearch $rulerSticky $ruler] + if { $index >= 0 } { + # Remove it from the list. + set rulerSticky [lreplace $rulerSticky $index $index] + set isSticky "Sticky" + } else { + # Add it to the list. + lappend rulerSticky $ruler + set isSticky "UnSticky" + } + editMenu rulerMenu imagewin $rulerMenuDescription +} + +proc setRulerMenu args \ +{ + global ruler isSticky rulerSticky rulerMenuDescription + + if { [lsearch $rulerSticky $ruler] >= 0 } { + set isSticky "UnSticky" + } else { + set isSticky "Sticky" + } + editMenu rulerMenu imagewin $rulerMenuDescription +} + + +# Draw the ruler to the frame buffer as a graphic. +proc writeRuler { ruler } \ +{ +} + +# Change the color of the ruler. +proc r_setColor {ruler bgcolor fgcolor} { + + # Recolor the polygon. + send $ruler \ + "markpos; set lineColor $bgcolor; set highlightColor $bgcolor; redraw" + + # Recolor the labels. + scan $ruler "ruler%d" num + send rulerXlab$num \ + "markpos; set textBgColor $bgcolor; set textColor $fgcolor; redraw" + send rulerYlab$num \ + "markpos; set textBgColor $bgcolor; set textColor $fgcolor; redraw" + send rulerHlab$num \ + "markpos; set textBgColor $bgcolor; set textColor $fgcolor; redraw" +} + + +# Delete the current ruler, called when we have a Btn1Up on the current ruler. +proc deleteRuler {x y} { global ruleno ; deleteNamedRuler $ruleno $x $y } + +# Delete all rulers on the screen, usually called when the view changes. +# We preserve the rulers marked as 'sticky'. +proc deleteAllRulers args \ +{ + global rulerList rulerSticky + + foreach r $rulerList { + # Delete the ruler if it's not in the sticky list. + if { [lsearch $rulerSticky ruler$r] == -1 } { + deleteNamedRuler $r x y + } + } +} + +# Delete a particular ruler, usually called from the translation table on +# the marker itself. +proc deleteNamedRuler {name x y} \ +{ + global rulerList + + catch { + send ruler$name destroy + send rulerXlab$name destroy + send rulerYlab$name destroy + send rulerHlab$name destroy + } + + # Remove the ruler from the list. + set index [lsearch $rulerList $name] + set rulerList [lreplace $rulerList $index $index] +} + + + + + +############################################### +# Define procedure for the help panel +############################################### + +# Help Panel Bitmaps +#------------------- +createBitmap iraf_logo 45 45 { +0xff, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f, 0xff, 0xff, 0xff, 0xff, +0xff, 0x3f, 0xfc, 0xff, 0xff, 0xff, 0xff, 0x3f, 0xfc, 0xff, 0xff, 0xff, +0xff, 0x3f, 0xf8, 0xff, 0xff, 0xff, 0xff, 0x3f, 0xf0, 0xff, 0xff, 0xff, +0xff, 0x3f, 0xf0, 0xff, 0xff, 0xff, 0xff, 0x3f, 0xe0, 0xff, 0xff, 0xff, +0xff, 0x3f, 0xc0, 0xff, 0xff, 0xff, 0xff, 0x3f, 0xc0, 0xff, 0xff, 0xff, +0xff, 0x3f, 0x80, 0xff, 0xff, 0xff, 0xff, 0x3f, 0x80, 0xfc, 0xff, 0xff, +0xff, 0x3f, 0x84, 0xf8, 0xff, 0xff, 0xff, 0x1f, 0x84, 0xf4, 0xff, 0xff, +0xff, 0x1b, 0x04, 0x09, 0x00, 0xfc, 0xff, 0x11, 0x04, 0x11, 0xf8, 0xff, +0x7f, 0x10, 0x04, 0x21, 0xc0, 0xff, 0x1f, 0x10, 0x04, 0x41, 0xf0, 0xff, +0x00, 0x18, 0x04, 0x01, 0xe0, 0xff, 0x00, 0x18, 0x00, 0x81, 0xc0, 0xff, +0x00, 0x08, 0x00, 0x01, 0xe0, 0xff, 0x07, 0x08, 0x00, 0x01, 0xf1, 0xff, +0x1f, 0x08, 0x80, 0x21, 0xf0, 0xff, 0xff, 0x08, 0xc0, 0x41, 0xf4, 0xff, +0xff, 0x08, 0xc0, 0x41, 0xf8, 0xff, 0xff, 0x09, 0xc0, 0xc1, 0xf0, 0xff, +0xff, 0x0b, 0x80, 0xc1, 0xf1, 0xff, 0xff, 0x07, 0x80, 0x81, 0xe1, 0xff, +0xff, 0x07, 0x80, 0x01, 0xc1, 0xff, 0xff, 0x07, 0x00, 0x01, 0xc0, 0xff, +0xff, 0x07, 0xc2, 0x05, 0x81, 0xff, 0xff, 0x07, 0xf2, 0x07, 0x81, 0xff, +0xff, 0x07, 0xf2, 0x17, 0x03, 0xff, 0xff, 0x03, 0xfa, 0x7f, 0x02, 0xfe, +0xff, 0x03, 0xfe, 0xff, 0x02, 0xfe, 0xff, 0x03, 0xfe, 0xff, 0x03, 0xfc, +0xff, 0x03, 0xff, 0xff, 0x07, 0xfc, 0xff, 0x83, 0xff, 0xff, 0x0f, 0xf8, +0xff, 0xc1, 0xff, 0xff, 0x3f, 0xf0, 0xff, 0xe1, 0xff, 0xff, 0x7f, 0xf8, +0xff, 0xf1, 0xff, 0xff, 0xff, 0xf0, 0xff, 0xf8, 0xff, 0xff, 0xff, 0xe0, +0xff, 0xf8, 0xff, 0xff, 0xff, 0xe3, 0xff, 0xfc, 0xff, 0xff, 0xff, 0xe7, +0xff, 0xfc, 0xff, 0xff, 0xff, 0xef}; send helpIRAFLogo "set bitmap iraf_logo" + +createBitmap noao_logo 45 45 { +0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, +0xff, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0x03, 0xfe, 0xff, 0xff, +0xff, 0xff, 0x01, 0xfc, 0xff, 0xff, 0xff, 0xff, 0x00, 0xf8, 0xff, 0xff, +0xff, 0xff, 0x00, 0xf8, 0xff, 0xff, 0xff, 0xff, 0x00, 0xf8, 0xff, 0xff, +0xff, 0x7f, 0x00, 0xf0, 0xff, 0xff, 0xff, 0xff, 0x00, 0xf8, 0xff, 0xff, +0xff, 0xff, 0x00, 0xf8, 0xff, 0xff, 0xff, 0xff, 0x00, 0xf8, 0xff, 0xff, +0xff, 0xff, 0x01, 0xfc, 0xff, 0xff, 0xff, 0xff, 0x03, 0xfe, 0xff, 0xff, +0xff, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, +0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xff, 0xff, 0xff, +0xff, 0xff, 0x8f, 0xff, 0xff, 0xff, 0xff, 0xff, 0x8f, 0xff, 0xff, 0xff, +0xff, 0xff, 0x07, 0xff, 0xff, 0xff, 0xff, 0xff, 0x07, 0xff, 0xff, 0xff, +0xff, 0xff, 0x03, 0xfe, 0xff, 0xff, 0xff, 0xff, 0x03, 0xfe, 0xff, 0xff, +0xff, 0xff, 0x01, 0xfc, 0xff, 0xff, 0xff, 0xff, 0x01, 0xfc, 0xff, 0xff, +0xff, 0xff, 0x00, 0xf8, 0xff, 0xff, 0xff, 0x7f, 0x00, 0xf0, 0xff, 0xff, +0xff, 0x7f, 0x00, 0xf0, 0xff, 0xff, 0xff, 0x3f, 0x00, 0xe0, 0xff, 0xff, +0xff, 0x3f, 0x00, 0xe0, 0xff, 0xff, 0xff, 0x1f, 0x00, 0xc0, 0xff, 0xff, +0xff, 0x1f, 0x00, 0xc0, 0xff, 0xff, 0xff, 0x0f, 0x00, 0x80, 0xff, 0xff, +0xff, 0x0f, 0x00, 0x80, 0xff, 0xff, 0xff, 0x07, 0x00, 0x00, 0xff, 0xff, +0xff, 0x03, 0x00, 0x00, 0xfe, 0xff, 0xff, 0x03, 0x00, 0x00, 0xfe, 0xff, +0xff, 0x01, 0x00, 0x00, 0xfc, 0xff, 0xff, 0x01, 0x00, 0x00, 0xfc, 0xff, +0xff, 0x00, 0x00, 0x00, 0xf8, 0xff, 0xff, 0x00, 0x00, 0x00, 0xf8, 0xff, +0x7f, 0x00, 0x00, 0x00, 0xf0, 0xff, 0x7f, 0x00, 0x00, 0x00, 0xf0, 0xff, +0x3f, 0x00, 0x00, 0x00, 0xe0, 0xff}; send helpNOAOLogo "set bitmap noao_logo" + +send helpInfo1 set label $version + +# Stuff for keeping track of visited anchors. +set links { 0 } +set linkIndex 0 +set visited(0) empty + +proc Help args \ +{ + global help_up + if {$help_up == 0} { + send client help + } else { + send help_panel unmap + set help_up 0 + } +} + +proc helpPanel args \ +{ + global help_up + if {$help_up} { + send help_panel unmap + set help_up 0 + } else { + send help_panel map + set help_up 1 + } +} + +proc panelHelp args \ +{ + Help +} ; send panelHelp addCallback panelHelp + +proc helpQuit args \ +{ + global help_up + send help_panel unmap + set help_up 0 +}; send helpClose addCallback helpQuit + +proc getHelpText { param old new } \ +{ + send helpText setText $new + helpPanel +}; send help addCallback getHelpText + +proc anchorSelected {widget cbtype event text href args} \ +{ + global visited links linkIndex + set anchID [send helpText anchorToId $href] + set visited($href) 1 + if {$linkIndex == 0} { + send helpBack setSensitive True + if {[lindex $links 1] != $anchID} { + set links { 0 } + send helpForward setSensitive False + } + } + if {$linkIndex > 0 && [lindex $links [expr $linkIndex + 1]] != $anchID} { + set links [lrange $links 0 $linkIndex] + } + if {[lindex $links [expr $linkIndex + 1]] != $anchID} { + lappend links $anchID + incr linkIndex + } else { + send helpForward setSensitive False + incr linkIndex + } + if {$linkIndex == [expr [llength $links] - 1]} { + send helpForward setSensitive False + } + send helpText gotoId $anchID + send helpText retestAnchors +}; send helpText addCallback anchorSelected anchor + +proc testAnchor {widget cbtype href} \ +{ + global visited + return [info exists visited($href)] +}; send helpText addCallback testAnchor testAnchor + + +# Callbacks to position forwards and backwards in link list. +proc hlpForward args \ +{ + global links linkIndex + incr linkIndex + if {$linkIndex <= [llength $links]} { + set anchID [lindex $links $linkIndex] + send helpText gotoId $anchID + send helpText retestAnchors + if {$linkIndex == [expr [llength $links] - 1]} { + send helpForward setSensitive False + send helpBack setSensitive True + } else { + send helpBack setSensitive True + } + } else { + incr linkIndex -1 + } +}; send helpForward addCallback hlpForward + +proc hlpBack args \ +{ + global links linkIndex + incr linkIndex -1 + if {$linkIndex >= 0} { + set anchID [lindex $links $linkIndex] + send helpText gotoId $anchID + send helpText retestAnchors + if {$linkIndex == 0} { send helpBack setSensitive False } + if {$linkIndex >= 0} { send helpForward setSensitive True } + } else { + incr linkIndex 1 + } +}; send helpBack addCallback hlpBack + +proc hlpHome args \ +{ + global links linkIndex + set links { 0 } + set linkIndex 0 + send helpText gotoId 0 + send helpForward setSensitive False + send helpBack setSensitive False +}; send helpHome addCallback hlpHome + + +proc helpFind args \ +{ + set phrase [send hfEntry get string] + + if { $phrase != "" } { + if {[send helpText searchText $phrase start end forward caseless] > 0} { + set elid [lindex [lindex $start 0] 0] + set id [max 1 [expr $elid - 10] ] + send helpText gotoId $id + send helpText setSelection $start $end + } else { + send warnText set label "Search string not found." + send warning map + } + } else { + send warnText set label "Warning: No search phrase entered." + send warning map + } +} ; foreach w { hfEntry hfFind } { send $w addCallback helpFind } + +send hfClear addCallback { send hfEntry set string "" } + + +################################################################################ +# Header Display Callbacks. +################################################################################ + +set hdrImage "" +set hdrImageId "" +set hdrKeywords "*" + + +proc fitsHdrClose args \ +{ + global hdr_up + + send hdr_panel unmap + send imageHeader set on False + set hdr_up 0 +} ; send hdrClose addCallback fitsHdrClose + +proc ptFitsHeader {widget type state args} \ +{ + global hdr_up + + set hdr_up $state + if {$hdr_up == 1} { + send imageHeader set on True + send hdr_panel map + } else { + send imageHeader set on False + send hdr_panel unmap + } +}; send imageHeader addCallback ptFitsHeader + +proc getHeader { name id } \ +{ + global hdrImage hdrImageId hdrKeywords + + set hdrImage $name + set hdrImageId $id + send hdrObjMenu set label $name + send hdrText setText "" + send hdrIGText set string "" + send hdrKGText set string "" + + catch { send wcspix objinfo $hdrImageId $hdrKeywords } +} + +proc hdrKeywFilter args \ +{ + global hdrImageId hdrKeywords + + set str [ send hFindEntry get string ] + if {$str != ""} { + set hdrKeywords $str + send hdrText setText "" + catch { send wcspix objinfo $hdrImageId $hdrKeywords } + } +} ; send hdrFilter addCallback hdrKeywFilter + + +# Set the image menu in the header panel. +proc setHdrObjMenu { frame args } \ +{ + global frameCache ism_enable + + if {! $ism_enable} \ + return + + # Create the menu of images for the header panel. + set items { } + foreach i [list $frameCache($frame)] { + set l [lindex $i 0] + set lid [lindex $i 1] + regsub -all {[\[]} $l "\\\[" l2 + catch { + lappend items [format "%s f.exec \{getHeader %s %d\}" $l $l2 $lid] + } + } + editMenu objMenu hdrObjMenu $items +} + + +# Search box for the header. +proc hdrFind args \ +{ + set phrase [send hFindEntry get string] + + if { $phrase != "" } { + if {[send hdrText searchText $phrase start end forward caseless] > 0} { + set elid [lindex [lindex $start 0] 0] + set id [max 1 [expr $elid - 10] ] + send hdrText gotoId $id + send hdrText setSelection $start $end + } else { + send warnText set label "Search string not found." + send warning map + } + } else { + send warnText set label "Warning: No search phrase entered." + send warning map + } +} ; foreach w { hFindEntry hdrFind } { send $w addCallback hdrFind } + +send hdrClear addCallback { send hFindEntry set string "" } + + +################################################################################ +# Pixel Table Callbacks. +################################################################################ + +set psize 5 +set pixtab_up 0 +set hdr_up 0 + +createMenu pixtabMenu pixtabSize { + { "3x3" f.exec { pixtabSetSize 3 } } + { "5x5" f.exec { pixtabSetSize 5 } } + { "7x7" f.exec { pixtabSetSize 7 } } + { "9x9" f.exec { pixtabSetSize 9 } } +} + + +proc updatePixelTable { cx cy wx wy args } \ +{ + global psize pixtab_up ism_enable + + if {! $pixtab_up} \ + return + if {$ism_enable} \ + return + + set delta [expr int($psize / 2) ] + set x1 [expr ($wx - $delta) ] + set x2 [expr ($wx + $delta) ] + set y1 [expr ($wy - $delta) ] + set y2 [expr ($wy + $delta) ] + set c [ expr int($psize / 2) ] + + + # Update the table labels. + set x $x1 ; set xl {} + set y $y2 ; set yl {} + for {set i 0} {$i < $psize} {incr i} { + lappend xl [format " %10.1f " $x] ; set x [ expr ($x + 1.) ] + lappend yl [format " %10.1f " $y] ; set y [ expr ($y - 1.) ] + } + send ptColLabs setList $xl ; send ptColLabs highlight $c + send ptRowLabs setList $yl ; send ptRowLabs highlight $c + + # Update the pixel table itself. + #set pix [ send client getPixels $cx $cy $psize True ] + + set x0 [ expr int($cx - $psize / 2. + 0.5)] + set y0 [ expr int($cy - $psize / 2. + 0.5)] + set pix [ send client getPixels $x0 $y0 $psize $psize ] + send pixtab setList [ lrange $pix 4 end ] + set c [ expr int(($psize * $psize) / 2) ] + send pixtab highlight $c + + # Update the pixtab stats. + set sum 0.0 + set sum2 0.0 + set npix [ expr ($psize * $psize) ] + set nend [ expr ($psize * $psize) + 4 ] + for {set i 4} {$i < $nend} {incr i} { + set val [lindex $pix $i] + catch { + set sum [ expr ($sum + $val) ] + set sum2 [ expr ($sum2 + $val * $val) ] + } + } + + set mean [ expr ($sum / ($npix * 1.0)) ] + set var [ expr (($sum2 - $sum * $mean) / ($npix - 1)) ] + if {$var <= 0.0} { + set stdev 0.0 + } else { + set stdev [ expr sqrt ($var) ] + } + send meanValue set label [ format "%10.2f" $mean ] + send sigValue set label [ format "%10.4f" $stdev ] +} + + +proc pixtabClose args \ +{ + global pixtab_up + + send pixel_panel unmap + send pixelTable set on False + set pixtab_up 0 + catch { send wcspix set psize 0 } +} ; send pixtabClose addCallback pixtabClose + + +proc pixtabSetSize { size args } \ +{ + global psize ism_enable + + set c [ expr int(($psize * $psize) / 2) ] + send pixtab highlight $c + + # Now reset the window size. + switch $size { + 3 { send pixel_panel "resize 265 175" + send pixtab "set width 180 ; set height 60" + } + 5 { send pixel_panel "resize 375 215" + send pixtab "set width 290 ; set height 105" + } + 7 { send pixel_panel "resize 495 265" + send pixtab "set width 410 ; set height 150" + } + 9 { send pixel_panel "resize 610 310" + send pixtab "set width 525 ; set height 195" + } + } + + send pixtab set defaultColumns $size + send ptColLabs set defaultColumns $size + set psize $size + + # Notify the ISM we've changed size. + if ($ism_enable) { + catch { send wcspix set psize $psize } + } + + send imagewin getCursorPos xc yc + updatePixelTable $xc $yc $xc $yc + +} ; pixtabSetSize $psize + + +proc ptPixelTable {widget type state args} \ +{ + global pixtab_up psize + + set pixtab_up $state + if {$pixtab_up == 1} { + send pixelTable set on True + send pixel_panel map + catch { send wcspix set psize $psize } + } else { + send pixelTable set on False + send pixel_panel unmap + catch { send wcspix set psize 0 } + } +}; send pixelTable addCallback ptPixelTable + + +################################################################################ +# Warning dialog. This pops up a dialog box with the given warning message, +# and executes the given command if the user pushes OK. +# +# Usage: Wexec object message [ok_action [cancel_action]] +# +# The message text is displayed in a popup and the user hits the ok or +# cancel button to close the popup. If an action has been posted for the +# button selected then it is sent to the named object. Only one alert can +# be in effect at a time; posting another alert before the first has +# completed causes the new alert to override the first. +################################################################################ + +set W_object "" +set W_ok_cmd "" +set W_cancel_cmd "" + +proc Wexec {object msg args} \ +{ + global W_object W_ok_cmd W_cancel_cmd + set W_object $object + set W_ok_cmd [lindex $args 0] + set W_cancel_cmd [lindex $args 1] + send warnText set label $msg + send warning map +} + +proc Wbutton {widget args} \ +{ + global W_object W_ok_cmd W_cancel_cmd + switch $widget { + warnOk { if [llength $W_ok_cmd] { send $W_object $W_ok_cmd } + } + warnCancel { if [llength $W_cancel_cmd] { send $W_object $W_cancel_cmd } + } + } + send warning unmap +} +send warnOk addCallback Wbutton +send warnCancel addCallback Wbutton + +# The parameter "alert" is used to forward alerts from the client. +proc setAlert {param old new} \ +{ + Wexec client [lindex $new 0] [lindex $new 1] +}; send alert addCallback setAlert + + + +################################################ +# Define some TCL debug procedures. +################################################ + +set tcl_up 0 + +proc tclCommandClear {widget args} { send tclEntry set string "" } +proc tclCommandExecute {widget args} { send server [send tclEntry {get string}] +} +proc tclCommand {widget mode command args} { send server $command } +proc tclClose {widget args} { tclPanel } +proc tclOpen args \ +{ + global tcl_up + send tcl_panel map + set tcl_up 1 +} + +proc tclPanel args \ +{ + global tcl_up + if {$tcl_up} { + send tcl_panel unmap + set tcl_up 0 + } else { + send tcl_panel map + set tcl_up 1 + } +} + +send tclClear addCallback tclCommandClear +send tclExecute addCallback tclCommandExecute +send tclEntry addCallback tclCommand +send tclDismiss addCallback tclClose + + + +################################################ +# ISM Module support routines. +################################################ + + +# Turn the ISM on or off. +proc ismToggle { widget type state args } \ +{ + global ism_enable ism_capable psize + + set ism_enable $state + + # Set the coord-panel header option availability. + if {$ism_enable == 1 && $ism_capable} { + send imageHeader setSensitive True + send woptBPM setSensitive True + catch { send client ism_start wcspix } + } else { + send imageHeader setSensitive False + send woptBPM set on False + send woptBPM setSensitive False + catch { send client ism_stop wcspix } + send hdr_panel unmap + } + setCoordPanelSensitivity + +} ; send ismToggle addCallback ismToggle + + + +# Handle messages from ISM clients and pass them on to the appropiate +# callback. + +proc ism_msg { param old new } \ +{ + global ism_enable + + set cmd [lindex $new 0] ;# command name + set ism [lindex $new 1] ;# determine ISM name + set argv [lrange $new 2 end] ;# get args + set argc [llength $argv] + + switch $cmd { + source { source [lindex $new 1] } + alert { Wexec client [lindex $new 1] } + deliver { ${ism}_msg $argc $argv } + info { ism_info $ism } + } +} ; send ism_msg addCallback ism_msg + + + +# Log a client message to the info panel +set ismInfoText " " + +proc ism_info { text } \ +{ + global infoMode ismInfoText + + set ismInfoText [format "%s\n%s" $ismInfoText $text] + if {$infoMode == "infoOptIsm"} { + send infoText set string $ismInfoText + } +} + +# Initialize the text. +proc ismInitInfoText args \ +{ + global ismInfoText + + set ismInfoText "" + ism_info "\t ISM Client Message Logs" + ism_info "\t -----------------------" + ism_info " " +} ; ismInitInfoText + + + +################################################ +# WPIX module support routines. +################################################ + +set cur_objid 0 +set cur_regid 0 +set redraw_compass 0 +#set Compass(0) { 0.0 1 1 0 X Y } +set Compass(0) { 0.0 0.0 1.0 -1.0 0.0 0 X Y } +set Orient(0) { 1 1 1 } + +set wcspix_debug 0 + +proc wcspix_msg { argc argv } \ +{ + global wcspix_debug + + set arg [string trimleft [ string trimright [lindex $argv 0] ] ] + set cmd [lindex $arg 0] + + if {$wcspix_debug} { print "wcspix_msg: $cmd" } + + + switch $cmd { + startup { wcspix_startup } + shutdown { wcspix_shutdown } + disable { wcspix_disable } + capable { wcspix_capable } + + cache { wcspix_cache [lrange $arg 1 end] } + uncache { wcspix_uncache [lrange $arg 1 end] } + wcstran { wcspix_wcstran [lrange $arg 1 end] } + wcslist { wcspix_wcslist [lrange $arg 1 end] } + + imghdr { send hdrText \ + setText [format "
%s\n%s
" \ + [string trimright [send hdrText getText simple] "\n"]\ + [lindex $arg 1] ] + } + wcshdr { send hdrKGText append [lindex $arg 1] } + + wcsinfo { send hdrIGText append [lindex $arg 1] + send hdrText gotoId 0 + send hdrKGText set insertPosition 0 + } + + compass { wcspix_compass [lrange $arg 1 end] ; drawCompass } + orient { wcspix_orient [lrange $arg 1 end] } + wcstype { wcspix_wcstype [lindex $arg 1] [lindex $arg 2] } + wcsfmt { set num [lindex $arg 2] + send fmtWcs$num set label [lindex $arg 1] } + + wcspix_cmd { send wcsIsmCmd set string [lindex $arg 1] } + + pixtab { set tab [lindex [lindex $arg 1] 0] + set col [lindex [lindex $arg 1] 1] + set row [lindex [lindex $arg 1] 2] + set stat [lindex [lindex $arg 1] 3] + wcspix_pixtab $tab $col $row $stat + } + } +} + + +# Startup and initialize the wcspix module with the GUI state. +proc wcspix_startup args \ +{ + global ism_enable frame + global up_todo psize pixtab_up frameCache + + set ism_enable 1 + send ismToggle set on True + send imageHeader setSensitive True + send woptBPM setSensitive True + setCoordPanelSensitivity + ismInitInfoText + + if {$up_todo < 3} { + resizeCoordsBox $up_todo + } + updateCoordsBox + drawCompass + + # Initialize the frame cache. + foreach c [array names frameCache] { + if {$c != "0"} { unset frameCache($c) } + } + + catch { + if {$pixtab_up} { send wcspix set psize $psize } + for {set i 1} {$i <= 4} {incr i} { + send wcspix set wcs [send sysWcs$i get label] $i + send wcspix set format [send fmtWcs$i get label] $i + } + } + + if { [send infoOptClients get on] } { + send client info clients + } +} + +# Shutdown the WPIX module. +proc wcspix_shutdown args \ +{ + global ism_enable frame + + set ism_enable 0 + send ismToggle set on False + send imageHeader setSensitive False + send woptBPM set on False + send woptBPM setSensitive False + setCoordPanelSensitivity + setCoordPanelHeight + + wcsFmtIValue "N/A" + wcsFmtBValue "0" + + resizeCoordsBox 0 + drawCompass + + if { [send infoOptClients get on] } { + send client info clients + } +} + + +# Disable the WPIX module. We are only called when a display client has +# indicated it doesn't use the new mapping facilities and having the WPIX +# ISM visible will only confuse the user. + +proc wcspix_disable args \ +{ + global ism_enable ism_capable rulerWCS + + if {$ism_enable} { + send wcspix quit + } + set ism_capable 0 + set rulerWCS 0 + wcspix_shutdown + send ismToggle setSensitive False +} + + +# Client connected is capable of using the ISM, but don't necessarily turn +# it on at this point. + +proc wcspix_capable args \ +{ + global ism_capable + + set ism_capable 1 + wcsFmtIValue "0" + wcsFmtBValue "0" + send ismToggle setSensitive True +} + + +# Cache an image in the GUI. +proc wcspix_cache { argv } \ +{ + global frameCache redraw_compass cur_objid + + set name [lindex $argv 0] + set frame [lindex $argv 1] + set id [lindex $argv 2] + + # Store the image name and id in a local cache. + lappend frameCache($frame) $name $id + send hdrObjMenu set label $name + + # Automatically get the header. + regsub -all {[\[]} $name "\\\[" image + catch { getHeader $image $id } + + setHdrObjMenu $frame + + set cur_objid $id + set redraw_compass 1 +} + +# Uncache an image in the GUI. +proc wcspix_uncache { argv } \ +{ + global frameCache Compass + + set id [lindex $argv 0] + foreach c [array names frameCache] { + set i1 0 + set i2 1 + set new { } + while { $i2 < [llength $frameCache($c)] } { + if {[lindex $frameCache($c) $i2] != $id} { + lappend new [lindex $frameCache($c) $i1] + lappend new [lindex $frameCache($c) $i2] + } + incr i1 2 + incr i2 2 + } + set frameCache($c) $new + } + if [info exists Compass($id)] { + unset Compass($id) + } +} + +# Format the results of the WCSTRAN method. +proc wcspix_wcstran { argv } \ +{ + global frameCache cur_objid cur_regid redraw_compass + + set objid [ lindex [lindex $argv 0] 1] + set regid [ lindex [lindex $argv 1] 1] + set pixval [ lindex [lindex $argv 2] 1] + set bpmval [ lindex [lindex $argv 3] 1] + + wcsFmtIValue $pixval + wcsFmtBValue $bpmval + + set args [lrange $argv 4 end] + set nargs [llength $args] + for {set i 0} {$i < 4} {incr i} { + set coord [lindex $args $i] + set wcsname [lindex $coord 1] + set xval [lindex $coord 2] + set yval [lindex $coord 3] + set xunits [lindex $coord 4] + set yunits [lindex $coord 5] + wcsFmtWcs [expr ($i + 1)] $wcsname $xval $yval $xunits $yunits + } + + set cur_objid $objid + set cur_regid $regid + + if {$redraw_compass} \ + drawCompass +} + +# Save the object compass information. +proc wcspix_compass { argv } \ +{ + global Compass + + set objid [lindex $argv 0] + set angle [lindex $argv 1] + + #set xflip [lindex $argv 2] + #set yflip [lindex $argv 3] + #set transpose [lindex $argv 4] + #set xlab [lindex $argv 5] + #set ylab [lindex $argv 6] + + set north_x [lindex $argv 2] + set north_y [lindex $argv 3] + set east_x [lindex $argv 4] + set east_y [lindex $argv 5] + set transpose [lindex $argv 6] + set xlab [lindex $argv 7] + set ylab [lindex $argv 8] + + #lappend Compass($objid) $angle $xflip $yflip $transpose $xlab $ylab + #set Compass($objid) [list $angle $xflip $yflip $transpose $xlab $ylab] + set Compass($objid) [list $angle $north_x $north_y $east_x $east_y \ + $transpose $xlab $ylab] + drawCompass +} + +# Save the image display orientation information. +proc wcspix_orient { argv } \ +{ + global Orient + + set objid [lindex $argv 0] + set frame [lindex $argv 1] + set xflip [lindex $argv 2] + set yflip [lindex $argv 3] + + set Orient($objid) [list $frame $xflip $yflip] +} + + +# Handle the list of WCSs available for the current image. +proc wcspix_wcslist { argv } \ +{ + set wcslist [lindex $argv 0] + + for {set i 1} {$i <= 4} {incr i} { + set items {} + foreach nam $wcslist { + if {[string tolower $nam] == "line"} { + lappend items "f.dblline" + } else { + lappend items "\"$nam\" f.exec \{setWcsSys $nam $i\}" + } + } + editMenu sysMenu$i sysWcs$i $items + } +} + +# Set the type of the WCS. +proc wcspix_wcstype { label num } \ +{ + global up_todo + + send sysWcs$num set label $label + if {[string tolower $label] == "none"} { + send wpWcs$num "set on False ; setSensitive False" + send wiWcs$num "set on False ; setSensitive False" + send fmtWcs$num setSensitive False + set hght 4 + } else { + send wpWcs$num "set on True ; setSensitive True" + send wiWcs$num setSensitive True + send fmtWcs$num setSensitive True + set hght 17 + } + send wtWcs$num set height $hght + setCoordPanelHeight + + #resizeCoordsBox $up_todo + updateCoordsBox +} + +# Display the pixel table. +proc wcspix_pixtab { tab col row stat } \ +{ + global psize + + # Update the pixel table. + send pixtab setList [lindex $tab 1] + send pixtab highlight [expr int(($psize * $psize) / 2)] + + # Update the table labels. + set c [ expr int($psize / 2) ] + send ptColLabs setList $col ; send ptColLabs highlight $c + send ptRowLabs setList $row ; send ptRowLabs highlight $c + + # Update the pixtab stats. + send meanValue set label [ format "%10.2f" [lindex $stat 0] ] + send sigValue set label [ format "%10.4f" [lindex $stat 1] ] +} + + + + +################################################################################ +# +# XIMTOOL-ALT -- Procedures and declarations for the ALT GUI. +# +################################################################################ + +# Creat the bitmaps needed for the alternate optional bars. + +createBitmap tools 16 16 { + 0xff, 0xff, 0xff, 0xff, 0x03, 0xc0, 0xf3, 0xcf, 0xf3, 0xcf, 0xf3, 0xcf, + 0x83, 0xc1, 0x83, 0xc1, 0x83, 0xc1, 0x83, 0xc1, 0x83, 0xc1, 0x83, 0xc1, + 0x83, 0xc1, 0x03, 0xc0, 0xff, 0xff, 0xff, 0xff}; + +createBitmap control 16 16 { + 0xff, 0xff, 0xff, 0xff, 0x03, 0xc0, 0xe3, 0xc7, 0xe3, 0xcf, 0x33, 0xcc, + 0x33, 0xc0, 0x1b, 0xc0, 0x1b, 0xc0, 0x1b, 0xc0, 0x33, 0xcc, 0xf3, 0xcf, + 0xe3, 0xc7, 0x03, 0xc0, 0xff, 0xff, 0xff, 0xff}; + +createBitmap tile 16 16 { + 0xff, 0xff, 0xff, 0xff, 0x83, 0xc1, 0x83, 0xc1, 0x83, 0xc1, 0x83, 0xc1, + 0x83, 0xc1, 0xff, 0xff, 0xff, 0xff, 0x83, 0xc1, 0x83, 0xc1, 0x83, 0xc1, + 0x83, 0xc1, 0x83, 0xc1, 0xff, 0xff, 0xff, 0xff}; + +createBitmap compass 16 16 { + 0x00, 0x00, 0x00, 0x02, 0x00, 0x07, 0x80, 0x0f, 0xc0, 0x1f, 0x00, 0x07, + 0x00, 0x07, 0x00, 0x07, 0x00, 0x07, 0x00, 0x07, 0x00, 0x07, 0xfc, 0x07, + 0xfc, 0x07, 0xfc, 0x07, 0x00, 0x00, 0x00, 0x00} + +createBitmap plus 11 11 { + 0x00, 0x00, 0x70, 0x00, 0x70, 0x00, 0x70, 0x00, 0xfe, 0x03, 0xfe, 0x03, + 0xfe, 0x03, 0x70, 0x00, 0x70, 0x00, 0x70, 0x00, 0x00, 0x00}; + +createBitmap minus 11 11 { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x03, 0xfe, 0x03, + 0xfe, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; + +createBitmap disk 16 16 { + 0xfe,0x1f,0x11,0x25,0x11,0x45,0x11,0x44,0xf1,0x47,0x01,0x40,0x01,0x40,0xf9, + 0x4f,0x05,0x50,0x05,0x50,0x05,0x50,0x05,0x50,0x05,0x50,0x05,0x50,0xff,0x7f, + 0x00,0x00}; + +createBitmap printer 32 16 { + 0x00, 0xfe, 0x07, 0x00, 0x00, 0x02, 0x0a, 0x00, 0x00, 0x02, 0x12, 0x00, + 0x00, 0x02, 0x22, 0x00, 0x00, 0x02, 0x3e, 0x00, 0x00, 0x02, 0x20, 0x00, + 0x00, 0x02, 0x20, 0x00, 0xe0, 0x03, 0xe0, 0x03, 0x10, 0x03, 0xe0, 0x06, + 0x08, 0xff, 0x7f, 0x09, 0x04, 0x00, 0x00, 0x10, 0xfc, 0xff, 0xff, 0x1f, + 0x04, 0x00, 0x00, 0x10, 0xfc, 0xff, 0xff, 0x1f, 0x08, 0x00, 0x00, 0x08, + 0xf8, 0xff, 0xff, 0x0f}; + + +send tbBlinkDec "set bitmap larrow" ;# Assign the bitmaps to the buttons. +send tbBlinkInc "set bitmap rarrow" +send tbZoomIn "set bitmap plus" +send tbZoomOut "set bitmap minus" +send tbTile "set bitmap tile" +send tbCompass "set bitmap compass; addCallback toggleCompass" +#send helpButton "set bitmap qmark; addCallback Help" +send mXflipButton "set bitmap xflip; addCallback xflip" +send mYflipButton "set bitmap yflip; addCallback yflip" +send mNextButton "set bitmap rarrow; addCallback nextFrame" +send mPrevButton "set bitmap larrow; addCallback prevFrame" + + +# toolBox -- Toggle the toolbox and panelbar display. + +set toolbox_up [ true $showToolBar ] +set panelbar_up [ true $showPanelBar ] + +proc toolBoxToggle args \ +{ + global toolbox_up + + set w [send display get width] ; set h [send display get height] + set iw [send imagewin get width] ; set ih [send imagewin get height] + + if {$toolbox_up} { + send toolbar set height 0 + send toolButton set state 0 + send imagewin "set width $iw; set height $ih" + set nh [expr $h - 25] + send display "set width $w; set height $nh" + set toolbox_up 0 + send mXflipButton map + send mYflipButton map + send mPrevButton map + send mFrameButton map + send mNextButton map + } else { + send toolbar set height 25 + send toolButton set state 1 + send imagewin "set width $iw; set height $ih" + set nh [expr $h + 25] + send display "set width $w ; set height $nh" + set toolbox_up 1 + send mXflipButton unmap + send mYflipButton unmap + send mPrevButton unmap + send mFrameButton unmap + send mNextButton unmap + } +} + +proc panelBarToggle args \ +{ + global panelbar_up + + set w [send display get width] ; set h [send display get height] + set iw [send imagewin get width] ; set ih [send imagewin get height] + + if {$panelbar_up} { + send panelbar set height 0 + send panelButton set state 0 + send imagewin "set width $iw; set height $ih" + set nh [expr $h - 25] + send display "set width $w ; set height $nh" + set panelbar_up 0 + } else { + send panelbar set height 25 + send panelButton set state 1 + send imagewin "set width $iw; set height $ih" + set nh [expr $h + 25] + send display "set width $w ; set height $nh" + set panelbar_up 1 + } +} + + + +# Initialize the bars to be displayed if the resource was set. + +send toolButton "set bitmap tools; addCallback toolBoxToggle" +if { ! [ true $showToolBar ] } { + send display set height [expr [send display get height] - 25] + send toolbar set height 0 + send toolButton set state 0 +} else { + send toolButton set state 1 + send mXflipButton unmap + send mYflipButton unmap + send mPrevButton unmap + send mFrameButton unmap + send mNextButton unmap +} + +send panelButton "deleteCallback panel" +send panelButton "set bitmap control; addCallback panelBarToggle" + +if { ! [ true $showPanelBar ] } { + send display set height [expr [send display get height] - 25] + send panelbar set height 0 + send panelButton set state 0 +} else { + send panelButton set state 1 +} + + +############################################## +# Panelbar callbacks. +############################################## + +send pbQuit addCallback Quit +send helpClose addCallback "send helpButton set state 0" + + +# Control Panel. +#------------------------------------------------------ +proc pbToggleControl {name element op} \ +{ + upvar $name panel_up + send pbDisplayP set state [expr !($panel_up)] +} ; #trace variable panel_up w pbToggleControl + +proc pbResetPanel {param old new} \ +{ + global displayPanner displayMagnifier displayCoords + switch $new { + done { send pbPanM set state [true $displayPanner] + send pbMagM set state [true $displayMagnifier] + send pbWcsM set state [true $displayCoords] + } + } +} ; send initialize addCallback pbResetPanel + +set WidgetToTab(pbDisplayP) display_panel +set WidgetToTab(pbInfoP) info_panel +set WidgetToTab(pbLoadP) load_panel +set WidgetToTab(pbPrintP) print_panel +set WidgetToTab(pbSaveP) save_panel +set WidgetToTab(pbTileP) tile_panel +set WidgetToTab(pbCoordP) wcs_panel + +set TabToWidget(display_panel) pbDisplayP +set TabToWidget(print_panel) pbPrintP +set TabToWidget(load_panel) pbLoadP +set TabToWidget(save_panel) pbSaveP +set TabToWidget(info_panel) pbInfoP +set TabToWidget(tile_panel) pbTileP +set TabToWidget(wcs_panel) pbCoordP + +set pbTabTop "pbDisplayP" + +proc pbPanelDismiss args \ +{ + global tabTop TabToWidget WidgetToTab + set panel $TabToWidget($tabTop) + send $panel set state 0 +} ; send panelClose addCallback pbPanelDismiss + +proc pbResizeCB {widget event a b c d e args} \ +{ + global pbTabTop TabToWidget WidgetToTab + if { $a == 0 && $b == 0 && $c == 0 && $d == 0 && $e == 0 } { + send $pbTabTop set state 0 + set new $TabToWidget($widget) + send $new set state 1 + set pbTabTop $new + } +} ; foreach w $cpTabs {send $w addEventHandler pbResizeCB exposureMask} + +proc pbPanelTabs { widget type state args } \ +{ + global pbTabTop tabTop panel_up + global TabToWidget WidgetToTab + + set panel $WidgetToTab($widget) + if {$tabTop == $panel && $panel_up} { + send panelShell unmap + send $widget set state 0 + set panel_up 0 + return + } + + send $TabToWidget($tabTop) set state 0 + set tabTop $panel + set pbTabTop $TabToWidget($panel) + send panelTabs setTop $panel + + # Now fire it up if it's not already open. + if {$panel_up == 0} { + send $widget set state 1 + send panelShell map + set panel_up 1 + } +} +foreach w { pbDisplayP pbInfoP pbLoadP pbPrintP pbSaveP pbTileP pbCoordP } { + send $w addCallback pbPanelTabs +} + + + +# Load Panel. (Really need to clean this up.) +#------------------------------------------------------ +proc pbDoLoadOptions { param old new } \ +{ + set val [ join [lrange $new 1 end] " " ] + switch [lindex $new 0] { + newfile { send fnameText set string $val } + } +} ; send loadOptions addCallback pbDoLoadOptions + +proc pbFileLoad { widget mode fname args } \ +{ + set fpath [format "%s/%s" \ + [string range [send dirLabel get label] 12 end] $fname ] + send imagewin setCursorType idle +} ; send fnameText addCallback pbFileLoad + +proc pbflSelectPrint {widget cbtype selections args} \ +{ + foreach selection $selections { + ; + } +}; #send imageList addCallback pbflSelectPrint + +proc pbFileLoadB args \ +{ + set fname [send fnameText get string] + if {$fname != ""} { + set fpath [format "%s/%s" \ + [string range [send dirLabel get label] 12 end] $fname ] + } +} ; send filesLoadButton addCallback pbFileLoadB + + +# Panner Marker. +#------------------------------------------------------ +proc pbTracePanner {name element op} \ +{ + global last_compass + + catch { + upvar $name panner_enable + send pbPanM set state $panner_enable + + if { $panner_enable } { + send tbCompass "setSensitive True ; set state $last_compass" + drawCompass + } else { + send tbCompass "setSensitive False ; set state False" + eraseCompass + } + } +} ; trace variable panner_enable w pbTracePanner + +proc pannerPanel args \ +{ + global panner_enable displayPanner + + setPanner [expr !$panner_enable] + send pannerButton set on [expr $panner_enable] +}; send pbPanM addCallback pannerPanel + + +# Magnifier Marker. +#------------------------------------------------------ +proc pbTraceMagnifier {name element op} \ +{ + upvar $name magnifier_enable + send pbMagM set state $magnifier_enable +} ; trace variable magnifier_enable w pbTraceMagnifier + +proc magnifierPanel args \ +{ + global magnifier_enable displayMagnifier + setMagnifier [expr !$magnifier_enable] + send magnifierButton set on [expr $magnifier_enable] +}; send pbMagM addCallback magnifierPanel + + +# CoordsBox Marker. +#------------------------------------------------------ +proc pbTraceCoordsBox {name element op} \ +{ + upvar $name track_enable + send pbWcsM set state $track_enable +} ; trace variable track_enable w pbTraceCoordsBox + +proc wcsPanel args \ +{ + global track_enable + setTrack [expr !$track_enable] +}; send pbWcsM addCallback wcsPanel + + + +# WPIX ISM Callbacks. +#------------------------------------------------------ + +proc altIsmToggle { widget type state args } \ +{ + ismToggle pbIsm junk $state +} ; send pbIsm addCallback altIsmToggle + +proc pbTraceIsm {name element op} \ +{ + upvar $name ism_enable + send pbIsm set state $ism_enable +} ; trace variable ism_enable w pbTraceIsm + + +proc altIsmMsgCB { param old new } \ +{ + set cmd [lindex $new 0] ;# command name + set ism [lindex $new 1] ;# determine ISM name + set argv [lrange $new 2 end] ;# get args + set argc [llength $argv] + + switch $cmd { + deliver { ${ism}_alt_msg $argc $argv } + } +} ; send ism_msg addCallback altIsmMsgCB + + +proc wcspix_alt_msg { argc argv } \ +{ + set arg [string trimleft [ string trimright [lindex $argv 0] ] ] + set cmd [lindex $arg 0] + switch $cmd { + startup { } + shutdown { } + disable { send pbIsm "set state False ; setSensitive False" } + capable { send pbIsm "setSensitive True" } + } +} + + + +############################################## +# Toolbar callbacks. +############################################## + +send tbNormalize addCallback normalize +send tbInvert addCallback cpInvert +send tbRegister addCallback cpRegisterFrames +send tbMatchLUT addCallback cpMatchFrames + + +# Frame Selection. +#------------------ +createMenu mFrameMenu mFrameButton $frameMenuDescription + +proc altFrameChanged {param old new} \ +{ + send mFrameButton set label $new +} ; send frame addCallback altFrameChanged + + +# Image Flipping. +#------------------------------------------------------ +proc tbSetFlip {param old new} \ +{ + if {$param == "xflip"} { + send mXflipButton set state [true $new] + } else { + send mYflipButton set state [true $new] + } +}; foreach i {xflip yflip} { send $i addCallback tbSetFlip } + + +# Zoom/Pan buttons. +#------------------------------------------------------ +proc tbZoomAction { widget args } \ +{ + global frameWidth frameHeight + + switch $widget { + tbZoom0 { cpZoom 1 1 fixed } + tbZoomIn { cpZoom 2.0 2.0 relative } + tbZoomOut { cpZoom 0.5 0.5 relative } + tbCenter { send client pan [expr $frameWidth/2.0] [expr $frameHeight/2.0] } + } +} +foreach widget { tbCenter tbZoomIn tbZoom0 tbZoomOut } { + send $widget addCallback tbZoomAction +} + + +# Frame Blink. +#------------------------------------------------------ +proc tbSetBlinkRate {w args} \ +{ + if {$w == "tbBlinkInc"} { + cpSetBlinkRate BRincrease + } else { + cpSetBlinkRate BRdeccrease + } +} +foreach w {tbBlinkDec tbBlinkInc} { send $w addCallback tbSetBlinkRate } + +proc tbBlink { widget args } \ +{ + global blinkRate blinkId + + if {$blinkRate < 0.01} { + send tbBlink set state 0 + } else { + if {$widget != "tbBlink"} { + if {($blinkId != 0) != [send $widget get on]} { + toggleBlink + } + } else { + if {($blinkId != 0) != [send $widget get state]} { + toggleBlink + } + } + } +} ; send tbBlink addCallback tbBlink + +proc tbTraceBlink {name element op} \ +{ + upvar $name blinkId + send tbBlink set state [expr $blinkId != 0] +} ; trace variable blinkId w tbTraceBlink + + +# Auto-register. +#------------------------------------------------------ +proc tbAutoRegister { widget type state args } \ +{ + send tbAutoReg set state $state +} +foreach w {autoregButton brAregButton tbAutoReg} { + send $w addCallback cpAutoRegister +} + +proc tbToggleAutoReg args \ +{ + global auto_reg + if {$auto_reg} { + cpAutoRegister autoregButton dummy 0 + set auto_reg 0 + send tbAutoReg set state 0 + } else { + cpAutoRegister autoregButton dummy 1 + set auto_reg 1 + send tbAutoReg set state 1 + } +} + + +# Frame Tiles. +#------------------------------------------------------ +proc tbSetTileFrames args \ +{ + global tileOpt + + # Send the option to the client. + if {[send tbTile get state ]} { + if {$tileOpt == 0} { + # If mode is disabled, turn on the tile selection. + selectTileOrientation junk junk Best + } else { + # Otherwise, turn on in current mode. + selectTileOrientation junk junk [tileSelToLabel $tileOpt] + } + } else { + selectTileOrientation junk junk Disabled + } +}; send tbTile addCallback tbSetTileFrames + +proc tbTrackTileFrames {param old new} \ +{ + send tileFramesButton set on [true $new] + send tbTile set state $new +}; send tileFrames addCallback tbTrackTileFrames + +proc tbTileFramesToggle args \ +{ + set value [send tileFramesButton get on] + if {$value} { set not 0 } else { set not 1 } + + send tileFramesButton set on $not + send tbTile set state $not + cpSetTileFrames tbTile junk $not +} + + +# Compass Indicator. +#------------------------------------------------------ +proc tbToggleCompass { widget type state args } \ +{ + global frame + + if {$state} { + send compass set on True + send tbCompass set state 1 + drawCompass + } else { + send compass set on False + send tbCompass set state 0 + eraseCompass + } +} ; foreach w {compass tbCompass} { send $w addCallback tbToggleCompass } + + diff --git a/vendor/x11iraf/ximtool/ximtool.gui.h b/vendor/x11iraf/ximtool/ximtool.gui.h new file mode 100644 index 00000000..dcda45e8 --- /dev/null +++ b/vendor/x11iraf/ximtool/ximtool.gui.h @@ -0,0 +1,11567 @@ +"#!/usr/local/bin/obmsh", +"#", +"# XIMTOOL-ALT.GUI -- Default GUI for the Ximtool-alt image display server.", +"#", +"# Version 2.0 -- BETA VERSION", +"", +"set Version \"NOAO/IRAF XImtool Version 2.0BETA\"", +"", +"reset-server", +"", +"set Objects(ximtool) { \\", +" toplevel Layout display\\", +"\\", +" display Group menuGroup\\", +" menuGroup Layout menubar\\", +" menubar MenuButton fileButton\\", +" menubar MenuButton viewButton\\", +" menubar MenuButton optionsButton\\", +" menubar Label imageTitle\\", +" menubar Toggle mXflipButton\\", +" menubar Toggle mYflipButton\\", +" menubar Command mPrevButton\\", +" menubar MenuButton mFrameButton\\", +" menubar Command mNextButton\\", +" menubar Toggle toolButton\\", +" menubar Toggle panelButton\\", +"\\", +" display Layout toolbar\\", +" toolbar Command tbZoomIn\\", +" toolbar Command tbZoom0\\", +" toolbar Command tbZoomOut\\", +" toolbar Command tbInvert\\", +" toolbar Command tbNormalize\\", +" toolbar Command tbMatchLUT\\", +" toolbar Toggle tbAutoReg\\", +" toolbar Command tbRegister\\", +" toolbar Command tbCenter\\", +" toolbar Command tbBlinkDec\\", +" toolbar Toggle tbBlink\\", +" toolbar Command tbBlinkInc\\", +" toolbar Toggle xflipButton\\", +" toolbar Toggle yflipButton\\", +" toolbar Toggle tbTile\\", +" toolbar Toggle tbCompass\\", +" toolbar Command prevButton\\", +" toolbar MenuButton frameButton\\", +" toolbar Command nextButton\\", +"\\", +" display Frame imageFrame\\", +" imageFrame Gterm imagewin\\", +" display Frame cbarFrame\\", +" cbarFrame Gterm colorbar\\", +" display Toggle hcut\\", +" display Toggle vcut\\", +" display Frame hcutFrame\\", +" hcutFrame Gterm hcutPlot\\", +" display Frame vcutFrame\\", +" vcutFrame Gterm vcutPlot\\", +" display Slider2d focusSlider\\", +"\\", +" display Group plotOpts\\", +" plotOpts Layout poptsLayout\\", +" poptsLayout TextToggle plotSpeed\\", +" poptsLayout TextToggle plotAccurate\\", +" poptsLayout TextToggle plotImgPix\\", +" poptsLayout Frame optLine\\", +" poptsLayout TextToggle curJump\\", +" poptsLayout TextToggle curSmooth\\", +" poptsLayout TextToggle curTrack\\", +"\\", +" display Layout panelbar\\", +" panelbar Toggle pbDisplayP\\", +" panelbar Toggle pbLoadP\\", +" panelbar Toggle pbSaveP\\", +" panelbar Toggle pbPrintP\\", +" panelbar Toggle pbInfoP\\", +" panelbar Toggle pbTileP\\", +" panelbar Toggle pbCoordP\\", +" panelbar Toggle pbPanM\\", +" panelbar Toggle pbMagM\\", +" panelbar Toggle pbWcsM\\", +" panelbar Toggle pbIsm\\", +" panelbar Toggle helpButton\\", +" panelbar Command pbQuit\\", +"}", +"", +"", +"set Objects(panelShell) { \\", +" toplevel TopLevelShell panelShell\\", +" panelShell Layout panel\\", +"\\", +" panel Frame panelMenuFrame\\", +" panelMenuFrame Layout panelMenuBar\\", +" panelMenuBar Command panelHelp\\", +" panelMenuBar Command panelClose\\", +"\\", +" panel Frame tabFrame\\", +" tabFrame Tabs panelTabs\\", +" panelTabs Frame display_panel\\", +" panelTabs Frame print_panel\\", +" panelTabs Frame load_panel\\", +" panelTabs Frame save_panel\\", +" panelTabs Frame info_panel\\", +" panelTabs Frame tile_panel\\", +" panelTabs Frame wcs_panel\\", +"\\", +"\\", +" display_panel Layout controlPanel\\", +" controlPanel Group viewBox\\", +" controlPanel Group enhancementBox\\", +" controlPanel Group blinkBox\\", +" controlPanel Group optionsBox\\", +" controlPanel Frame controlBox\\", +"\\", +" viewBox Layout view\\", +" view Group frameSelect\\", +" frameSelect Layout frameBox\\", +" frameBox Box frlistBox\\", +" frlistBox Viewport framePort\\", +" framePort Layout frameList\\", +" frameList TextToggle frame1\\", +" frameList TextToggle frame2\\", +" frameList TextToggle frame3\\", +" frameList TextToggle frame4\\", +" frameList TextToggle frame5\\", +" frameList TextToggle frame6\\", +" frameList TextToggle frame7\\", +" frameList TextToggle frame8\\", +" frameList TextToggle frame9\\", +" frameList TextToggle frame10\\", +" frameList TextToggle frame11\\", +" frameList TextToggle frame12\\", +" frameList TextToggle frame13\\", +" frameList TextToggle frame14\\", +" frameList TextToggle frame15\\", +" frameList TextToggle frame16\\", +" frameBox Command prevFrame\\", +" frameBox Command nextFrame\\", +" view Frame frameDataBox\\", +" frameDataBox TextBox frameData\\", +" view Group zoomBox\\", +" zoomBox Layout zoom\\", +" zoom TextButton toggleZoom\\", +" zoom TextButton zoomIn\\", +" zoom Command x1\\", +" zoom Command z2\\", +" zoom Command z3\\", +" zoom Command z4\\", +" zoom Command z5\\", +" zoom Command z8\\", +" zoom TextButton zoomOut\\", +" zoom TextButton centerFrame\\", +" zoom Command d2\\", +" zoom Command d3\\", +" zoom Command d4\\", +" zoom Command d5\\", +" zoom Command d8\\", +" view Layout viewButtons\\", +" viewButtons Command aspect\\", +" viewButtons Command flipX\\", +" viewButtons Command flipY\\", +" viewButtons Command flipXY\\", +" viewButtons Command clearFrame\\", +" viewButtons Command fitFrame\\", +"\\", +" enhancementBox Layout enhance\\", +" enhance Frame colorlistFrame\\", +" colorlistFrame Viewport colorlistView\\", +" colorlistView MultiList colorlist\\", +" enhance Frame colordataFrame\\", +" colordataFrame TextBox colordata\\", +" enhance Label contrastLabel\\", +" enhance Slider2d contrastSlider\\", +" enhance Label brightnessLabel\\", +" enhance Slider2d brightnessSlider\\", +" enhance Command invertButton\\", +" enhance Command optimizeButton\\", +"\\", +" blinkBox Layout blink\\", +" blink Label blinkFramesLabel\\", +" blink Command blinkFrame1\\", +" blink Command blinkFrame2\\", +" blink Command blinkFrame3\\", +" blink Command blinkFrame4\\", +" blink Toggle blinkPanel\\", +" blink Command blinkReset\\", +" blink Label blinkRateLabel\\", +" blink Frame BRframe\\", +" BRframe Layout BRlayout\\", +" BRlayout Arrow BRdecrease\\", +" BRlayout TextBox BRtext\\", +" BRlayout Arrow BRincrease\\", +" blink Command registerButton\\", +" blink Command matchButton\\", +" blink TextToggle blinkButton\\", +" blink TextToggle autoregButton\\", +"\\", +" optionsBox TextToggle pannerButton\\", +" optionsBox TextToggle magnifierButton\\", +" optionsBox TextToggle coordsBoxButton\\", +" optionsBox TextToggle autoscaleButton\\", +" optionsBox TextToggle antialiasButton\\", +" optionsBox TextToggle tileFramesButton\\", +" optionsBox TextToggle warningsButton\\", +" optionsBox TextToggle peakupButton\\", +"\\", +" controlBox Layout control\\", +" control Command initializeButton\\", +" control Command normalizeButton\\", +"\\", +"\\", +" print_panel Layout printLayout\\", +"\\", +" printLayout Group printCmdGroup\\", +" printLayout Group optGroup\\", +" printLayout Group cmdGroup\\", +"\\", +" printCmdGroup Layout printCmdLayout\\", +" printCmdLayout Layout labelLayout\\", +" labelLayout Label toLabel\\", +" labelLayout Label printerLabel\\", +" printCmdLayout Layout inputLayout\\", +" inputLayout TextToggle toPrinter\\", +" inputLayout TextToggle toFile\\", +" inputLayout Frame printcmdFrame\\", +" printcmdFrame AsciiText printcmd\\", +"\\", +" optGroup Layout optLayout\\", +" optLayout Group epsPageGroup\\", +" optLayout Group optionsGroup\\", +" optLayout Group printColorGroup\\", +" optLayout Group printerGroup\\", +" optLayout Group annOptsGroup\\", +"\\", +" epsPageGroup Layout epsPage\\", +" epsPage Label epsOrientLabel\\", +" epsPage TextToggle epsPortButton\\", +" epsPage TextToggle epsLandButton\\", +" epsPage TextToggle epsSquareButton\\", +" epsPage Label epsSizeLabel\\", +" epsPage TextToggle epsLetterButton\\", +" epsPage TextToggle epsLegalButton\\", +" epsPage TextToggle epsA4Button\\", +" epsPage TextToggle epsB5Button\\", +" epsPage Label epsScaleLabel\\", +" epsPage Frame ScaleFrame\\", +" ScaleFrame Layout ScaleLayout\\", +" ScaleLayout Arrow SCdecrease\\", +" ScaleLayout TextBox SCtext\\", +" ScaleLayout Arrow SCincrease\\", +"\\", +" optionsGroup Layout options\\", +" options TextToggle epsscaleButton\\", +" options TextToggle autorotateButton\\", +" options TextToggle aspectButton\\", +" options TextToggle compressButton\\", +"\\", +" annOptsGroup Layout annOpts\\", +" annOpts TextToggle annotateButton\\", +" annOpts TextToggle colorbarButton\\", +" annOpts TextToggle titleButton\\", +" annOpts TextToggle bordersButton\\", +" annOpts Label titleLabel\\", +" annOpts Frame titleFrame\\", +" titleFrame AsciiText titleString\\", +"\\", +" printColorGroup Layout printColor\\", +" printColor TextToggle prGrayButton\\", +" printColor TextToggle prPseudoButton\\", +" printColor TextToggle prRGBButton\\", +"\\", +" printerGroup Layout printers\\", +" printers Frame printlistFrame\\", +" printlistFrame Viewport printlistView\\", +" printlistView MultiList printlist\\", +"\\", +" cmdGroup Layout cmdLayout\\", +" cmdLayout Command okayPrint\\", +" cmdLayout Label printStatus\\", +"\\", +"\\", +" load_panel Layout filesLayout\\", +" filesLayout Group imlistGroup\\", +" imlistGroup Layout imlistLayout\\", +" imlistLayout Command rootButton\\", +" imlistLayout Command homeButton\\", +" imlistLayout Command upButton\\", +" imlistLayout Command rescanButton\\", +" imlistLayout Label dirLabel\\", +" imlistLayout Label fnameLabel\\", +" imlistLayout Frame filnamFrame\\", +" filnamFrame AsciiText fnameText\\", +" imlistLayout Label imtemplateLabel\\", +" imlistLayout Frame imtemplateFrame\\", +" imtemplateFrame AsciiText imtemplateText\\", +" imlistLayout Label imlistLabel\\", +" imlistLayout Frame imlistFrame\\", +" imlistFrame Viewport imlistView\\", +" imlistView MultiList imageList\\", +"\\", +" filesLayout Group imoptsGroup\\", +" imoptsGroup Layout imoptsLayout\\", +" imoptsLayout TextToggle grayscale\\", +" imoptsLayout TextToggle autoload\\", +" imoptsLayout TextToggle browseHdrs\\", +" imoptsLayout TextToggle zscale\\", +" imoptsLayout TextToggle zrange\\", +" imoptsLayout Label z1Label\\", +" imoptsLayout Frame z1Frame\\", +" z1Frame AsciiText z1Value\\", +" imoptsLayout Label z2Label\\", +" imoptsLayout Frame z2Frame\\", +" z2Frame AsciiText z2Value\\", +" imoptsLayout Label nsampLabel\\", +" imoptsLayout Frame nsampFrame\\", +" nsampFrame AsciiText nsampValue\\", +" imoptsLayout Label frameLabel\\", +" imoptsLayout MenuButton frameFrame\\", +"\\", +" filesLayout Group loadCmdGroup\\", +" loadCmdGroup Layout loadCmdLayout\\", +" loadCmdLayout Command filesLoadButton\\", +" loadCmdLayout Label filesStatus\\", +"\\", +"\\", +" save_panel Layout saveLayout\\", +" saveLayout Group saveNameGroup\\", +" saveNameGroup Layout saveNameLayout\\", +" saveNameLayout Label saveLabel\\", +" saveNameLayout Frame fnameFrame\\", +" fnameFrame AsciiText saveFile\\", +"\\", +" saveLayout Group saveOptGroup\\", +" saveOptGroup Layout saveOptLayout\\", +" saveOptLayout Group fmtGroup\\", +" saveOptLayout Group saveColorGroup\\", +" saveOptLayout Frame saveDataBox\\", +" saveDataBox TextBox saveData\\", +"\\", +" fmtGroup Layout formats\\", +" formats TextToggle rasButton\\", +" formats TextToggle gifButton\\", +" formats TextToggle jpegButton\\", +" formats TextToggle tiffButton\\", +" formats TextToggle fitsButton\\", +" formats TextToggle epsButton\\", +" formats TextToggle x11Button\\", +" formats TextToggle rawButton\\", +"\\", +" saveColorGroup Layout saveColor\\", +" saveColor TextToggle svGrayButton\\", +" saveColor TextToggle svPseudoButton\\", +" saveColor TextToggle svRGBButton\\", +"\\", +" saveLayout Group saveCmdGroup\\", +" saveCmdGroup Layout saveCmdLayout\\", +" saveCmdLayout Command okaySave\\", +" saveCmdLayout Label saveStatus\\", +"\\", +"\\", +" info_panel Layout infoLayout\\", +" infoLayout Group infoBox\\", +" infoBox Layout infoBoxL\\", +" infoBoxL Frame infoFrame\\", +" infoFrame AsciiText infoText\\", +" infoBoxL TextToggle infoOptFr\\", +" infoBoxL TextToggle infoOptWCS\\", +" infoBoxL TextToggle infoOptSvr\\", +" infoBoxL TextToggle infoOptClients\\", +" infoBoxL TextToggle infoOptIsm\\", +" infoBoxL TextToggle infoOptFB\\", +"\\", +"\\", +" wcs_panel Layout wcsLayout\\", +" wcsLayout Group wcsGroup\\", +" wcsGroup Layout wcsBox\\", +"\\", +" wcsBox Frame wcsFrame\\", +" wcsFrame Layout wcsText\\", +" wcsText AsciiText wtName\\", +" wcsText AsciiText wtTitle\\", +" wcsText AsciiText wtFBCfg\\", +" wcsText AsciiText wtIPixval\\", +" wcsText AsciiText wtSPixval\\", +" wcsText AsciiText wtBPixval\\", +" wcsText AsciiText wtWcs1\\", +" wcsText AsciiText wtWcs2\\", +" wcsText AsciiText wtWcs3\\", +" wcsText AsciiText wtWcs4\\", +"\\", +" wcsBox TextToggle ismToggle\\", +" wcsBox TextToggle pixelTable\\", +" wcsBox TextToggle imageHeader\\", +" wcsBox TextToggle compass\\", +" wcsBox TextToggle wcsOptions\\", +"\\", +"\\", +" wcsLayout Group wcsOptGroup\\", +" wcsOptGroup Layout wcsOptLayout\\", +"\\", +" wcsOptLayout Group wcsCoords\\", +" wcsCoords Layout wcLayout\\", +" wcLayout Label wcTitle\\", +" wcLayout Frame wcLine\\", +" wcLayout Label wlWcs1\\", +" wcLayout Label wlWcs2\\", +" wcLayout Label wlWcs3\\", +" wcLayout Label wlWcs4\\", +" wcLayout MenuButton sysWcs1\\", +" wcLayout MenuButton sysWcs2\\", +" wcLayout MenuButton sysWcs3\\", +" wcLayout MenuButton sysWcs4\\", +" wcLayout MenuButton fmtWcs1\\", +" wcLayout MenuButton fmtWcs2\\", +" wcLayout MenuButton fmtWcs3\\", +" wcLayout MenuButton fmtWcs4\\", +" wcLayout TextToggle wpWcs1\\", +" wcLayout TextToggle wpWcs2\\", +" wcLayout TextToggle wpWcs3\\", +" wcLayout TextToggle wpWcs4\\", +" wcLayout TextToggle wiWcs1\\", +" wcLayout TextToggle wiWcs2\\", +" wcLayout TextToggle wiWcs3\\", +" wcLayout TextToggle wiWcs4\\", +"\\", +" wcsOptLayout Group wcsOpts\\", +" wcsOpts Layout woLayout\\", +" woLayout TextToggle woptLabels\\", +" woLayout TextToggle woptTitles\\", +" woLayout TextToggle woptFBinfo\\", +" woLayout TextToggle woptBPM\\", +"\\", +" wcsOptLayout Group wcsIsmGroup\\", +" wcsIsmGroup Layout wcsIsmLayout\\", +" wcsIsmLayout Label wcsIsmLabel\\", +" wcsIsmLayout Frame wcsIsmFrame\\", +" wcsIsmFrame AsciiText wcsIsmCmd\\", +" wcsIsmLayout Command wcsIsmInit\\", +"\\", +"\\", +" tile_panel Frame tileOpts\\", +" tileOpts Layout toptLayout\\", +" toptLayout Group tFramesG\\", +" toptLayout Group tileMode\\", +" tileMode TextToggle tileDisabled\\", +" tileMode TextToggle tileManual\\", +" tileMode TextToggle tileBest\\", +" tileMode TextToggle tileSquare\\", +" tileMode TextToggle tileHorizontal\\", +" tileMode TextToggle tileVertical\\", +" tileMode TextToggle tileRow\\", +" tileMode TextToggle tileCol\\", +" toptLayout Group userOrientG\\", +" toptLayout Group fillStyle\\", +" fillStyle TextToggle byCols\\", +" fillStyle TextToggle bottomUp\\", +" toptLayout Group tileLabel\\", +" tileLabel TextToggle labelImname\\", +" tileLabel TextToggle labelTitles\\", +" tileLabel TextToggle labelFrames\\", +" toptLayout Frame geomFrame\\", +" geomFrame Label tileGeometry\\", +"\\", +" userOrientG Layout userOrientL\\", +" userOrientL Label nrowLab\\", +" userOrientL Frame nrFrame\\", +" nrFrame Layout nrLayout\\", +" nrLayout Arrow nrdecrease\\", +" nrLayout Label nrtext\\", +" nrLayout Arrow nrincrease\\", +" userOrientL Label ncolLab\\", +" userOrientL Frame ncFrame\\", +" ncFrame Layout ncLayout\\", +" ncLayout Arrow ncdecrease\\", +" ncLayout Label nctext\\", +" ncLayout Arrow ncincrease\\", +"\\", +" tFramesG Layout tFrames\\", +" tFrames Command tAll\\", +" tFrames Command tNone\\", +" tFrames Toggle tFrame1\\", +" tFrames Toggle tFrame2\\", +" tFrames Toggle tFrame3\\", +" tFrames Toggle tFrame4\\", +" tFrames Toggle tFrame5\\", +" tFrames Toggle tFrame6\\", +" tFrames Toggle tFrame7\\", +" tFrames Toggle tFrame8\\", +" tFrames Toggle tFrame9\\", +" tFrames Toggle tFrame10\\", +" tFrames Toggle tFrame11\\", +" tFrames Toggle tFrame12\\", +" tFrames Toggle tFrame13\\", +" tFrames Toggle tFrame14\\", +" tFrames Toggle tFrame15\\", +" tFrames Toggle tFrame16\\", +"}", +"", +"", +"set Objects(parameters) { \\", +" toplevel Parameter ximtool\\", +" ximtool Parameter alert\\", +" ximtool Parameter initialize\\", +" ximtool Parameter resize\\", +" ximtool Parameter frame\\", +" ximtool Parameter nframes\\", +" ximtool Parameter frameSize\\", +" ximtool Parameter frameRegion\\", +" ximtool Parameter frameView\\", +" ximtool Parameter frameTitle\\", +" ximtool Parameter frameFit\\", +" ximtool Parameter enhancement\\", +" ximtool Parameter colortables\\", +" ximtool Parameter cmfocus\\", +" ximtool Parameter autoscale\\", +" ximtool Parameter antialias\\", +" ximtool Parameter tileFrames\\", +" ximtool Parameter cursorMode\\", +" ximtool Parameter xflip\\", +" ximtool Parameter yflip\\", +" ximtool Parameter printerList\\", +" ximtool Parameter printOptions\\", +" ximtool Parameter loadOptions\\", +" ximtool Parameter saveOptions\\", +" ximtool Parameter tileOptions\\", +" ximtool Parameter filelist\\", +" ximtool Parameter help\\", +" ximtool Parameter info\\", +" ximtool Parameter ism_msg\\", +"}", +"", +"", +"set Objects(help_panel) { \\", +" toplevel TopLevelShell help_panel\\", +" help_panel Layout helpLayout\\", +" helpLayout Group helpMenuGroup\\", +" helpMenuGroup Layout helpMenubar\\", +" helpLayout Layout helpInfoLayout\\", +"\\", +" helpMenubar Command helpClose\\", +"\\", +" helpLayout Command helpBack\\", +" helpLayout Command helpForward\\", +" helpLayout Command helpHome\\", +" helpLayout Frame hfFrame\\", +" hfFrame AsciiText hfEntry\\", +" helpLayout Command hfFind\\", +" helpLayout Command hfClear\\", +" helpLayout Frame helpTextFrame\\", +" helpTextFrame HTML helpText\\", +"\\", +" helpInfoLayout Label helpIRAFLogo\\", +" helpInfoLayout Label helpInfo1\\", +" helpInfoLayout Label helpInfo2\\", +" helpInfoLayout Label helpInfo3\\", +" helpInfoLayout Label helpNOAOLogo\\", +"}", +"", +"", +"set Objects(blink_panel) { \\", +" toplevel TopLevelShell blink_panel\\", +" blink_panel Layout bpLayout\\", +"\\", +" bpLayout Frame brMenuFrame\\", +" brMenuFrame Layout brMenuBar\\", +" brMenuBar Command brClose\\", +"\\", +" bpLayout Frame brFrame\\", +" brFrame Layout brLayout\\", +"\\", +" brLayout Group brFramesG\\", +" brFramesG Layout brFrames\\", +" brFrames MenuButton brFrame1\\", +" brFrames MenuButton brFrame2\\", +" brFrames MenuButton brFrame3\\", +" brFrames MenuButton brFrame4\\", +" brFrames MenuButton brFrame5\\", +" brFrames MenuButton brFrame6\\", +" brFrames MenuButton brFrame7\\", +" brFrames MenuButton brFrame8\\", +" brFrames MenuButton brFrame9\\", +" brFrames MenuButton brFrame10\\", +" brFrames MenuButton brFrame11\\", +" brFrames MenuButton brFrame12\\", +" brFrames MenuButton brFrame13\\", +" brFrames MenuButton brFrame14\\", +" brFrames MenuButton brFrame15\\", +" brFrames MenuButton brFrame16\\", +"\\", +" brLayout Group brCmdG\\", +" brCmdG Layout brCmd\\", +" brCmd Command brReset\\", +" brCmd Label brRateLabel\\", +" brCmd Frame brBRframe\\", +" brBRframe Layout brBRlayout\\", +" brBRlayout Arrow brBRdecrease\\", +" brBRlayout TextBox brBRtext\\", +" brBRlayout Arrow brBRincrease\\", +" brCmd Command brRegButton\\", +" brCmd Command brMatchButton\\", +" brCmd TextToggle brBlinkButton\\", +" brCmd TextToggle brAregButton\\", +"}", +"", +"", +"set Objects(hdr_panel) { \\", +" toplevel TopLevelShell hdr_panel\\", +" hdr_panel Layout hdrLayout\\", +"\\", +" hdrLayout Frame hdrMenuFrame\\", +" hdrMenuFrame Layout hdrMenuBar\\", +" hdrMenuBar Command hdrClose\\", +"\\", +" hdrLayout Group hdrObjGroup\\", +" hdrObjGroup Layout hdrObjLayout\\", +" hdrObjLayout Label hdrObjLabel\\", +" hdrObjLayout MenuButton hdrObjMenu\\", +"\\", +" hdrLayout Frame hdrTabFrame\\", +" hdrTabFrame Tabs hdrTabs\\", +" hdrTabs Group hdrHdrGroup\\", +" hdrTabs Group hdrWcsGroup\\", +"\\", +" hdrHdrGroup Layout hdrHdrLayout\\", +" hdrHdrLayout Frame hFindFrame\\", +" hFindFrame AsciiText hFindEntry\\", +" hdrHdrLayout Command hdrFilter\\", +" hdrHdrLayout Command hdrFind\\", +" hdrHdrLayout Command hdrClear\\", +" hdrHdrLayout HTML hdrText\\", +"\\", +" hdrWcsGroup Layout hdrWcsLayout\\", +" hdrWcsLayout Group hdrInfoGroup\\", +" hdrInfoGroup Frame hdrIGFrame\\", +" hdrIGFrame AsciiText hdrIGText\\", +" hdrWcsLayout Group hdrKeywGroup\\", +" hdrKeywGroup Frame hdrKGFrame\\", +" hdrKGFrame AsciiText hdrKGText\\", +"}", +"", +"", +"set Objects(pixel_table) { \\", +" toplevel TopLevelShell pixel_panel\\", +"\\", +" pixel_panel Layout pixel_table\\", +" pixel_table Frame pixtabMenuFrame\\", +" pixtabMenuFrame Layout pixtabMenuBar\\", +" pixtabMenuBar MenuButton pixtabSize\\", +" pixtabMenuBar Command pixtabHelp\\", +" pixtabMenuBar Command pixtabClose\\", +"\\", +" pixel_table Frame pixtabFrame\\", +" pixtabFrame Porthole ptPort\\", +" ptPort Layout ptLayout\\", +" ptLayout Frame ptColFrame\\", +" ptColFrame MultiList ptColLabs\\", +" ptLayout Frame ptRowFrame\\", +" ptRowFrame MultiList ptRowLabs\\", +" ptLayout Frame ptFrame\\", +" ptFrame MultiList pixtab\\", +"\\", +" ptLayout Label meanLabel\\", +" ptLayout Frame meanFrame\\", +" meanFrame Label meanValue\\", +"\\", +" ptLayout Label sigLabel\\", +" ptLayout Frame sigFrame\\", +" sigFrame Label sigValue\\", +"}", +"", +"", +"set Objects(tcl_panel) { \\", +" toplevel TopLevelShell tcl_panel\\", +" tcl_panel Layout tclLayout\\", +" tclLayout Group tclCmdGroup\\", +" tclCmdGroup Layout tclCmd\\", +" tclCmd Command tclClear\\", +" tclCmd Command tclExecute\\", +" tclCmd Command tclDismiss\\", +" tclLayout Frame tclFrame\\", +" tclFrame AsciiText tclEntry\\", +"}", +"", +"", +"set Objects(warning) { \\", +" toplevel TransientShell warning\\", +" warning Layout warn\\", +" warn Frame warnFrame\\", +" warnFrame Layout WFlayout\\", +" WFlayout Icon warnIcon\\", +" WFlayout TextBox warnText\\", +" warn Command warnOk\\", +" warn Command warnCancel\\", +"}", +"", +"", +"set Resources(global) { \\", +"", +" !---------------------------------------------------------", +" ! Define some global widget resources for the main panels.", +" !---------------------------------------------------------", +" *shadowWidth: 1", +" *background: #c4c4c4", +"! *foreground: black", +" *Arrow.width: 16", +" *Arrow.height: 25", +" *Text*height: 21", +" *Command.height: 21", +" *Command.highlightThickness: 1", +" *MenuButton.height: 21", +" *MenuButton.highlightThickness: 1", +" *Label.borderWidth: 0", +" *Label.shadowWidth: 0", +" *TextButton.shadowWidth: 0", +" *TextButton.highlightThickness: 1", +" *TextToggle*borderWidth: 0", +" *TextToggle.highlightThickness: 0", +" *Toggle.highlightThickness: 1", +" *Group.shrinkToFit: True", +"", +" *Arrow.foreground: gray", +" *Arrow.background: #adadad", +" *Text*background: #adadad", +" *AsciiText*background: #adadad", +" *TextBox.background: #adadad", +" *MultiList*background: #adadad", +" *Slider2d.thumbColor: #c4c4c4", +"", +"", +" !-------------------------------------------------------------", +" ! Define resources to take advantage of the 3D scrollbar look.", +" !-------------------------------------------------------------", +" *Scrollbar*background: #c4c4c4", +" *Scrollbar*shadowWidth: 1", +" *Scrollbar*width: 15", +" *Scrollbar*height: 15", +" *Scrollbar*cursorName: top_left_arrow", +" *Scrollbar*pushThumb: true", +"", +" *HTML.Scrollbar.shadowWidth: 1", +" *HTML*Scrollbar*width: 15", +" *HTML*Scrollbar*height: 15", +"", +"", +" !----------------------------------------", +" ! Menu resources giving a shadow effect.", +" !----------------------------------------", +" *SmeBSB.leftMargin: 10", +" *SmeBSB.rightMargin: 5", +" *SmeBSB.shadowWidth: 2", +" *SmeBSB.foreground: #e5e5e5", +" *SmeBSB.background: SteelBlue", +" *SimpleMenu.background: #c4c4c4", +" *SimpleMenu.borderWidth: 2", +" *SimpleMenu.borderColor: black", +" *SimpleMenu.line1.foreground: #9c9c9c", +" *SimpleMenu.line2.foreground: #e8e8e8", +" *SimpleMenu.line3.foreground: #9c9c9c", +" *SimpleMenu.line4.foreground: #e8e8e8", +" *SimpleMenu.line5.foreground: #9c9c9c", +" *SimpleMenu.line6.foreground: #e8e8e8", +" *SimpleMenu.line7.foreground: #9c9c9c", +" *SimpleMenu.line8.foreground: #e8e8e8", +" *SimpleMenu.line9.foreground: #9c9c9c", +" *SimpleMenu.line10.foreground: #e8e8e8", +" *SimpleMenu.line11.foreground: #9c9c9c", +" *SimpleMenu.line12.foreground: #e8e8e8", +" *SimpleMenu.line13.foreground: #9c9c9c", +" *SimpleMenu.line14.foreground: #e8e8e8", +" *SimpleMenu.line15.foreground: #9c9c9c", +" *SimpleMenu.line16.foreground: #e8e8e8", +" *SimpleMenu.line17.foreground: #9c9c9c", +" *SimpleMenu.line18.foreground: #e8e8e8", +" *SimpleMenu.line19.foreground: #9c9c9c", +" *SimpleMenu.line20.foreground: #e8e8e8", +" *SimpleMenu.line21.foreground: #9c9c9c", +" *SimpleMenu.line22.foreground: #e8e8e8", +" *SimpleMenu.line23.foreground: #9c9c9c", +" *SimpleMenu.line24.foreground: #e8e8e8", +" *SimpleMenu.line25.foreground: #9c9c9c", +" *SimpleMenu.line26.foreground: #e8e8e8", +" *SimpleMenu.line27.foreground: #9c9c9c", +" *SimpleMenu.line28.foreground: #e8e8e8", +" *SimpleMenu.line29.foreground: #9c9c9c", +" *SimpleMenu.line30.foreground: #e8e8e8", +" *SimpleMenu.line31.foreground: #9c9c9c", +" *SimpleMenu.line32.foreground: #e8e8e8", +" *SimpleMenu.line33.foreground: #9c9c9c", +" *SimpleMenu.line34.foreground: #e8e8e8", +" *SimpleMenu.line35.foreground: #9c9c9c", +" *SimpleMenu.line36.foreground: #e8e8e8", +" *SimpleMenu.line37.foreground: #9c9c9c", +" *SimpleMenu.line38.foreground: #e8e8e8", +" *SimpleMenu.line39.foreground: #9c9c9c", +" *SimpleMenu.line40.foreground: #e8e8e8", +"", +"", +" !---------------------------------------------", +" ! Fixups for 24-bit displays", +" !---------------------------------------------", +" *hFindEntry.background: #adadad", +" *hdrIGText.background: #adadad", +" *hdrKGText.background: #adadad", +" *hfEntry.background: #adadad", +" *printcmd.background: #adadad", +" *titleString.background: #adadad", +" *fnameText.background: #adadad", +" *imtemplateText.background: #adadad", +" *z1Value.background: #adadad", +" *z2Value.background: #adadad", +" *nsampValue.background: #adadad", +" *saveFile.background: #adadad", +" *infoText.background: #adadad", +" *wtName.background: #adadad", +" *wtTitle.background: #adadad", +" *wtFBCfg.background: #adadad", +" *wtIPixval.background: #adadad", +" *wtSPixval.background: #adadad", +" *wtBPixval.background: #adadad", +" *wtWcs1.background: #adadad", +" *wtWcs2.background: #adadad", +" *wtWcs3.background: #adadad", +" *wtWcs4.background: #adadad", +" *wcsIsmCmd.background: #adadad", +" *tclEntry.background: #adadad", +"", +" *hFindEntry.foreground: #000000", +" *hdrIGText.foreground: #000000", +" *hdrKGText.foreground: #000000", +" *hfEntry.foreground: #000000", +" *printcmd.foreground: #000000", +" *titleString.foreground: #000000", +" *fnameText.foreground: #000000", +" *imtemplateText.foreground: #000000", +" *z1Value.foreground: #000000", +" *z2Value.foreground: #000000", +" *nsampValue.foreground: #000000", +" *saveFile.foreground: #000000", +" *infoText.foreground: #000000", +" *wtName.foreground: #000000", +" *wtTitle.foreground: #000000", +" *wtFBCfg.foreground: #000000", +" *wtIPixval.foreground: #000000", +" *wtSPixval.foreground: #000000", +" *wtBPixval.foreground: #000000", +" *wtWcs1.foreground: #000000", +" *wtWcs2.foreground: #000000", +" *wtWcs3.foreground: #000000", +" *wtWcs4.foreground: #000000", +" *wcsIsmCmd.foreground: #000000", +" *tclEntry.foreground: #000000", +"}", +" ", +" ", +" ", +" ", +"", +"set Resources(ximtool) { \\", +"", +" ! Main image window resources.", +" ! -------------------------------", +" *allowShellResize: True", +" *beNiceToColormap: False", +" *menuLabel.foreground: Gold", +" *markerMenu.foreground: White", +" *rulerMenu.foreground: White", +" *display.imagewin.markerMenu.foreground: White", +" *display.imagewin.rulerMenu.foreground: White", +" *markerMenu.background: SteelBlue", +" *markerMenu*SimpleMenu.foreground: White", +" *markerMenu*SimpleMenu.background: SteelBlue", +" *rulerMenu.background: SteelBlue", +" *rulerMenu*SimpleMenu.foreground: White", +" *rulerMenu*SimpleMenu.background: SteelBlue", +" *rulerColor.SmeBSB.leftMargin: 16", +" *magzoomMenu.foreground: White", +" *magzoomMenu.background: SteelBlue", +" *magzoomMenu*SimpleMenu.foreground: White", +" *magzoomMenu*SimpleMenu.background: SteelBlue", +" *markerColor.SmeBSB.leftMargin: 64", +" *markerColor.SmeBSB.rightMargin: 0", +" *markerColor.menuLabel.leftMargin: 5", +" *markerColor.menuLabel.rightMargin: 5", +" *rulerColor.SmeBSB.leftMargin: 64", +" *rulerColor.SmeBSB.rightMargin: 0", +" *rulerColor.menuLabel.leftMargin: 5", +" *rulerColor.menuLabel.rightMargin: 5", +"", +" *ximtool.title: XIMTOOL_VERSION", +"", +" *display.borderWidth: 2", +" *display.layout: horizontal { \\", +" -0 \\", +" vertical { \\", +" menuGroup < +inf -inf * > \\", +" horizontal { 1 toolbar < +inf -inf * > 1 } \\", +" 1 < -1 > \\", +" horizontal { 1 panelbar < +inf -inf * > 1 } \\", +" 1 < -1 > \\", +" vertical { \\", +" horizontal { \\", +" imageFrame < +inf -inf * +inf -inf > \\", +" -2 \\", +" vcutFrame < * +inf -inf > \\", +" } \\", +" -3 \\", +" horizontal { \\", +" hcutFrame < +inf -inf * > 1 \\", +" vertical { 4 horizontal { -4 plotOpts} -4 } \\", +" } \\", +" -3 \\", +" horizontal { \\", +" cbarFrame < +inf -inf * > \\", +" focusSlider 2 hcut 2 vcut 15 \\", +" } \\", +" } \\", +" } \\", +" -0 \\", +" }", +" *hcut.label: H", +" *hcut.font: *lucida-bold-r*10*", +" *vcut.label: V", +" *vcut.font: *lucida-bold-r*10*", +" *focusSlider.location: 0 0 100 15", +"", +" *hcutFrame.frameType: sunken", +" *hcutFrame.frameWidth: 1", +" *hcutFrame.innerOffset: 1", +" *hcutFrame.outerOffset: 1", +" //*hcutPlot.color0: #c4c4c4", +" //*hcutPlot.color1: #000000", +" *hcutPlot.color0: #000000", +" *hcutPlot.color1: #ffffff", +" *hcutPlot.crosshairCursorColor: red", +" *hcutPlot.width: 512", +" *hcutPlot.height: 6", +" *hcutPlot.borderWidth: 0", +" *hcutPlot.alphaFont1: 6x10", +" *hcutPlot.alphaFont2: 6x10", +" *hcutPlot.alphaFont3: 6x10", +" *hcutPlot.alphaFont4: 6x10", +" *hcutPlot.alphaFont5: 6x10", +" *hcutPlot.alphaFont6: 6x10", +" *hcutPlot.alphaFont7: 6x10", +" *hcutPlot.alphaFont8: 6x10", +" *hcutPlot.translations: \\", +" !Ctrl 1: call(cpZoom,1,1,fixed) \\n\\", +" !Ctrl 2: call(cpZoom,2,2,fixed) \\n\\", +" !Ctrl 3: call(cpZoom,3,3,fixed) \\n\\", +" !Ctrl 4: call(cpZoom,4,4,fixed) \\n\\", +" !Ctrl 5: call(cpZoom,5,5,fixed) \\n\\", +" !Ctrl 6: call(cpZoom,6,6,fixed) \\n\\", +" !Ctrl 7: call(cpZoom,7,7,fixed) \\n\\", +" !Ctrl 8: call(cpZoom,8,8,fixed) \\n\\", +" !Ctrl 9: call(cpZoom,9,9,fixed) \\n\\", +" !Ctrl b: call(prevFrame,$name) \\n\\", +" !Ctrl f: call(nextFrame,$name) \\n\\", +" !Ctrl i: call(cpInvert) \\n\\", +" !Ctrl m: call(toggleMagnifier) \\n\\", +" !Ctrl n: call(normalize) \\n\\", +" !Ctrl p: call(togglePanner) \\n\\", +" !Ctrl Alt q: call(Quit) \\n\\", +" !Ctrl r: call(cpRegisterFrames) \\n\\", +" !Ctrl s: call(cpMatchFrames) \\n\\", +" !Ctrl u: call(cpZoom,1,1,fixed) \\n\\", +" Ctrl +: call(cpZoom,2.0,2.0,relative) \\n\\", +" Ctrl -: call(cpZoom,0.5,0.5,relative) \\n\\", +" Ctrl \\<: call(cpSetBlinkRate,BRdecrease) \\n\\", +" Ctrl \\>: call(cpSetBlinkRate,BRincrease) \\n\\", +" !Alt b: call(toggleBlink) \\n\\", +" !Alt c: call(displayPanel) \\n\\", +" !Alt h: call(Help) \\n\\", +" !Alt i: call(infoPanel) \\n\\", +" !Ctrl Alt f: call(fitFrame) \\n\\", +" !Alt l: call(loadPanel) \\n\\", +" !Alt p: call(printPanel) \\n\\", +" !Alt s: call(savePanel) \\n\\", +" !Alt t: call(tclPanel) \\n\\", +" !: call(makeMarker,$name,$x,$y) m_create() \\n\\", +" : enter-window() \\n\\", +" : leave-window() \\n\\", +" : graphics-input() \\n\\", +" !Alt : call(curtrack_msg,$x,$y) \\n\\", +" : track-cursor() call(hcutWCSUpdate,$x,$y)", +"", +"", +" *vcutFrame.frameType: sunken", +" *vcutFrame.frameWidth: 1", +" *vcutFrame.innerOffset: 0", +" *vcutFrame.outerOffset: 0", +" //*vcutPlot.color0: #c4c4c4", +" //*vcutPlot.color1: black", +" *vcutPlot.color0: #000000", +" *vcutPlot.color1: #ffffff", +" *vcutPlot.crosshairCursorColor: red", +" *vcutPlot.width: 6", +" *vcutPlot.height: 512", +" *vcutPlot.borderWidth: 0", +" *vcutPlot.alphaFont1: 6x10", +" *vcutPlot.alphaFont2: 6x10", +" *vcutPlot.alphaFont3: 6x10", +" *vcutPlot.alphaFont4: 6x10", +" *vcutPlot.alphaFont5: 6x10", +" *vcutPlot.alphaFont6: 6x10", +" *vcutPlot.alphaFont7: 6x10", +" *vcutPlot.alphaFont8: 6x10", +" *vcutPlot.translations: \\", +" !Ctrl 1: call(cpZoom,1,1,fixed) \\n\\", +" !Ctrl 2: call(cpZoom,2,2,fixed) \\n\\", +" !Ctrl 3: call(cpZoom,3,3,fixed) \\n\\", +" !Ctrl 4: call(cpZoom,4,4,fixed) \\n\\", +" !Ctrl 5: call(cpZoom,5,5,fixed) \\n\\", +" !Ctrl 6: call(cpZoom,6,6,fixed) \\n\\", +" !Ctrl 7: call(cpZoom,7,7,fixed) \\n\\", +" !Ctrl 8: call(cpZoom,8,8,fixed) \\n\\", +" !Ctrl 9: call(cpZoom,9,9,fixed) \\n\\", +" !Ctrl b: call(prevFrame,$name) \\n\\", +" !Ctrl f: call(nextFrame,$name) \\n\\", +" !Ctrl i: call(cpInvert) \\n\\", +" !Ctrl m: call(toggleMagnifier) \\n\\", +" !Ctrl n: call(normalize) \\n\\", +" !Ctrl p: call(togglePanner) \\n\\", +" !Ctrl Alt q: call(Quit) \\n\\", +" !Ctrl r: call(cpRegisterFrames) \\n\\", +" !Ctrl s: call(cpMatchFrames) \\n\\", +" !Ctrl u: call(cpZoom,1,1,fixed) \\n\\", +" Ctrl +: call(cpZoom,2.0,2.0,relative) \\n\\", +" Ctrl -: call(cpZoom,0.5,0.5,relative) \\n\\", +" Ctrl \\<: call(cpSetBlinkRate,BRdecrease) \\n\\", +" Ctrl \\>: call(cpSetBlinkRate,BRincrease) \\n\\", +" !Alt b: call(toggleBlink) \\n\\", +" !Alt c: call(displayPanel) \\n\\", +" !Alt h: call(Help) \\n\\", +" !Alt i: call(infoPanel) \\n\\", +" !Ctrl Alt f: call(fitFrame) \\n\\", +" !Alt l: call(loadPanel) \\n\\", +" !Alt p: call(printPanel) \\n\\", +" !Alt s: call(savePanel) \\n\\", +" !Alt t: call(tclPanel) \\n\\", +" !: call(makeMarker,$name,$x,$y) m_create() \\n\\", +" : enter-window() \\n\\", +" : leave-window() \\n\\", +" : graphics-input() \\n\\", +" !Alt : call(curtrack_msg,$x,$y) \\n\\", +" : track-cursor() call(vcutWCSUpdate,$x,$y)", +"", +"", +" *plotOpts.label: Options", +" !*plotOpts*location: 0 0 105 18", +" *plotOpts*location: 0 0 1 18", +" *plotOpts.shrinkToFit: True", +" *plotOpts.outerOffset: 5", +" *plotOpts.innerOffset: 3", +" *plotOpts.frameWidth: 2", +" *plotOpts*TextToggle.offIcon: square0s", +" *plotOpts*TextToggle.onIcon: square1s", +" *plotOpts*TextToggle.highlightColor: yellow", +" *plotOpts*TextToggle.outerOffset: 0", +" *plotOpts*TextToggle.frameWidth: 0", +" *plotOpts*TextToggle.selectionStyle: multi", +" *plotOpts*TextToggle.leftMargin: 3", +" *plotOpts*TextToggle.alignment: left", +"", +" *poptsLayout.borderWidth: 0", +" *poptsLayout.layout: vertical { \\", +" -1 \\", +" plotSpeed plotAccurate plotImgPix \\", +" 2 < -2 > \\", +" horizontal { -4 optLine < +inf -inf * > -4 } \\", +" 2 < -2 > \\", +" curJump curSmooth curTrack \\", +" -1 \\", +" }", +" *plotSpeed.label: Better Speed", +" *plotSpeed.on: True", +" *plotAccurate.label: Better Accuracy", +" *plotAccurate.on: False", +" *plotImgPix.label: Image Pixels", +" *plotImgPix.on: False", +" *plotImgPix.sensitive: False", +" *optLine.height: 2", +" *optLine.width: 120", +" *optLine.outerOffset: 0", +" *optLine.innerOffset: 0", +" *optLine.frameWidth: 2", +" *optLine.frameType: chiseled", +" *curJump.label: Jump Cursor", +" *curJump.on: True", +" *curSmooth.label: Smooth Cursor", +" *curSmooth.on: False", +" *curTrack.label: Graphics Cursors", +" *curTrack.on: True", +"", +"", +" *menuGroup.label: ", +" *menuGroup.height: 38", +" *menuGroup.width: 512", +" *menuGroup.frameType: raised", +" *menuGroup.frameWidth: 2", +" *menubar.layout: horizontal { \\", +" 2 < -2 > \\", +" fileButton 1 < -1 > viewButton 1 < -1 > optionsButton \\", +" 1 < -1 > \\", +" imageTitle < +inff -inff * > \\", +" 1 < -1 > \\", +" mXflipButton 1 < -1 > mYflipButton \\", +" 1 < -1 > \\", +" mPrevButton 1 < -1 > mFrameButton 1 < -1 > mNextButton \\", +" 1 < -1 > \\", +" toolButton 1 < -1 > panelButton \\", +" 2 < -2 > \\", +" }", +"", +" *menubar*SimpleMenu.foreground: Black", +" *menubar*SimpleMenu.borderWidth: 1", +" *menubar*SimpleMenu.foreground: White", +" *menubar*SimpleMenu.background: SteelBlue", +" *SmeBSB.vertSpace: 10", +"", +" *menubar.width: 512", +" *menubar*borderWidth: 0", +" *menubar*Command.internalWidth: 0", +" *menubar*Command.borderWidth: 0", +" *menubar*Toggle.label: x", +" *menubar*Toggle.internalWidth: 0", +" *menubar*Toggle.borderWidth: 0", +"", +" *toolbar.layout: horizontal { \\", +" tbZoomIn < +inf -inf * > 1 < -1 > \\", +" tbZoom0 < +inf -inf * > 1 < -1 > \\", +" tbZoomOut < +inf -inf * > 1 < -1 > \\", +" tbInvert < +inf -inf * > 1 < -1 > \\", +" tbNormalize < +inf -inf * > 1 < -1 > \\", +" tbMatchLUT < +inf -inf * > 1 < -1 > \\", +" tbAutoReg < +inf -inf * > 1 < -1 > \\", +" tbRegister < +inf -inf * > 1 < -1 > \\", +" tbCenter < +inf -inf * > 1 < -1 > \\", +" tbBlinkDec < +inf -inf * > 1 < -1 > \\", +" tbBlink < +inf -inf * > 1 < -1 > \\", +" tbBlinkInc < +inf -inf * > 1 < -1 > \\", +" xflipButton < +inf -inf * > 1 < -1 > \\", +" yflipButton < +inf -inf * > 1 < -1 > \\", +" tbCompass < +inf -inf * > 1 < -1 > \\", +" tbTile < +inf -inf * > 1 < -1 > \\", +" prevButton < +inf -inf * > 1 < -1 > \\", +" frameButton < +inf -inf * > 1 < -1 > \\", +" nextButton < +inf -inf * > 1 < -1 > \\", +" }", +" *toolbar.width: 512", +" *toolbar.height: 25", +" *toolbar*borderWidth: 0", +" *toolbar*Command.internalWidth: 3", +" *toolbar*Command.borderWidth: 0", +" *toolbar*Toggle.internalWidth: 2", +" *toolbar*Toggle.borderWidth: 0", +"", +" *panelbar.layout: horizontal { \\", +" pbDisplayP < +inf -inf * > 1 < -1 > \\", +" pbPrintP < +inf -inf * > 1 < -1 > \\", +" pbLoadP < +inf -inf * > 1 < -1 > \\", +" pbSaveP < +inf -inf * > 1 < -1 > \\", +" pbInfoP < +inf -inf * > 1 < -1 > \\", +" pbTileP < +inf -inf * > 1 < -1 > \\", +" pbCoordP < +inf -inf * > 1 < -1 > \\", +" pbPanM < +inf -inf * > 1 < -1 > \\", +" pbMagM < +inf -inf * > 1 < -1 > \\", +" pbWcsM < +inf -inf * > 1 < -1 > \\", +" pbIsm < +inf -inf * > 1 < -1 > \\", +" helpButton < +inf -inf * > 1 < -1 > \\", +" pbQuit < +inf -inf * > 1 < -1 > \\", +" }", +" *panelbar*SimpleMenu.borderColor: Black", +" *panelbar*SimpleMenu.borderWidth: 1", +" *SmeBSB.vertSpace: 10", +"", +" *panelbar.width: 12", +" *panelbar.height: 25", +" *panelbar*borderWidth: 0", +" *panelbar*Label.internalWidth: 4", +" *panelbar*Label.borderWidth: 0", +" *panelbar*Command.internalWidth: 4", +" *panelbar*Command.borderWidth: 0", +" *panelbar*Toggle.internalWidth: 3", +" *panelbar*Toggle.borderWidth: 0", +"", +" *pbLoadP.label: Load", +" *pbDisplayP.label: Display", +" *pbSaveP.label: Save", +" *pbPrintP.label: Print", +" *pbInfoP.label: Info", +" *pbTileP.label: Tile", +" *pbCoordP.label: Coords", +" *pbPanM.label: Pan", +" *pbPanM.state: 1", +" *pbMagM.label: Mag", +" *pbMagM.state: 0", +" *pbWcsM.label: WCS", +" *pbWcsM.state: 1", +" *pbIsm.label: ISM", +" *pbIsm.state: 0", +" *helpButton.label: ", +"", +" *fileButton.label: File", +" *fileButton.menuName: fileMenu", +" *viewButton.label: View", +" *viewButton.menuName: viewMenu", +" *optionsButton.label: Options", +" *optionsButton.menuName: optionsMenu", +" *toolButton.label: ", +" *toolButton.state: 0", +" *panelButton.label: ", +" *panelButton.state: 0", +" *imageTitle*font: *times-bold-r*12*", +" *imageTitle.width: 40", +" *imageTitle.height: 20", +" *frameButton.menuName: frameMenu", +" *frameButton.label: 1", +" *frameButton.width: 20", +" *mFrameButton.menuName: mFrameMenu", +" *mFrameButton.label: 1", +" *mFrameButton.width: 20", +" *pbQuit.label: Quit", +" *tbZoom0.label: Mag", +" *tbBlink.label: Blink", +" *tbBlink.internalWidth: 3", +" *tbCenter.label: Cntr", +" *tbAutoReg.label: AReg", +" *tbRegister.label: Reg", +" *tbInvert.label: Inv", +" *tbNormalize.label: Norm", +" *tbMatchLUT.label: Match", +"", +" *SimpleMenu*font: -adobe-times-bold-r-normal-*-12-*-*-*-*-*-iso8859-1", +" *fileButton.font: -adobe-times-bold-i-normal-*-12-*-*-*-*-*-iso8859-1", +" *optionsButton.font: -adobe-times-bold-i-normal-*-12-*-*-*-*-*-iso8859-1", +" *viewButton.font: -adobe-times-bold-i-normal-*-12-*-*-*-*-*-iso8859-1", +" *panelbar*font: -adobe-times-bold-i-normal-*-12-*-*-*-*-*-iso8859-1", +" *toolbar*font: -adobe-times-bold-i-normal-*-12-*-*-*-*-*-iso8859-1", +"", +" *Gterm.cmapName: image", +" *Gterm.basePixel: 64", +" *imageFrame.frameType: sunken", +" *imageFrame.frameWidth: 1", +" *imageFrame.outerOffset: 0", +" *imageFrame.innerOffset: 0", +" *imageFrame.width: 512", +" *imageFrame.height: 512", +" *cbarFrame.frameType: sunken", +" *cbarFrame.frameWidth: 1", +" *cbarFrame.outerOffset: 0", +" *cbarFrame.innerOffset: 0", +" *cbarFrame.width: 512", +" *imagewin.warpCursor: true", +" *imagewin.raiseWindow: true", +" *imagewin.deiconifyWindow: true", +" *imagewin.idleCursor: crosshair", +" *imagewin.ginmodeCursor: circle", +" *imagewin.ginmodeBlinkInterval: 500", +" *imagewin.resizable: true", +" *imagewin.copyOnResize: false", +" *imagewin.width: 512", +" *imagewin.height: 512", +" *imagewin.maxMappings: 64", +" *imagewin.borderWidth: 0", +"", +" *imagewin.translations: \\", +" NoneLeft: call(move_cursor,-1,0) \\n\\", +" NoneDown: call(move_cursor,0,1) \\n\\", +" NoneUp: call(move_cursor,0,-1) \\n\\", +" NoneRight: call(move_cursor,1,0) \\n\\", +" !Shift Left: call(move_cursor,-10,0) \\n\\", +" !Shift Down: call(move_cursor,0,10) \\n\\", +" !Shift Up: call(move_cursor,0,-10) \\n\\", +" !Shift Right: call(move_cursor,10,0) \\n\\", +" !Ctrl h: call(move_cursor,-1,0) \\n\\", +" !Ctrl j: call(move_cursor,0,1) \\n\\", +" !Ctrl k: call(move_cursor,0,-1) \\n\\", +" !Ctrl l: call(move_cursor,1,0) \\n\\", +" !Ctrl Shift h: call(move_cursor,-10,0) \\n\\", +" !Ctrl Shift j: call(move_cursor,0,10) \\n\\", +" !Ctrl Shift k: call(move_cursor,0,-10) \\n\\", +" !Ctrl Shift l: call(move_cursor,10,0) \\n\\", +" !Ctrl Left: call(moveFrame,-1,0) \\n\\", +" !Ctrl Down: call(moveFrame,0,1) \\n\\", +" !Ctrl Up: call(moveFrame,0,-1) \\n\\", +" !Ctrl Right: call(moveFrame,1,0) \\n\\", +" !Ctrl Alt Left: call(moveFrame,-0.5,0) \\n\\", +" !Ctrl Alt Down: call(moveFrame,0,0.5) \\n\\", +" !Ctrl Alt Up: call(moveFrame,0,-0.5) \\n\\", +" !Ctrl Alt Right: call(moveFrame,0.5,0) \\n\\", +" !Alt 1: call(cpSetFrame,frame1) \\n\\", +" !Alt 2: call(cpSetFrame,frame2) \\n\\", +" !Alt 3: call(cpSetFrame,frame3) \\n\\", +" !Alt 4: call(cpSetFrame,frame4) \\n\\", +" !Ctrl 1: call(cpZoom,1,1,fixed) \\n\\", +" !Ctrl 2: call(cpZoom,2,2,fixed) \\n\\", +" !Ctrl 3: call(cpZoom,3,3,fixed) \\n\\", +" !Ctrl 4: call(cpZoom,4,4,fixed) \\n\\", +" !Ctrl 5: call(cpZoom,5,5,fixed) \\n\\", +" !Ctrl 6: call(cpZoom,6,6,fixed) \\n\\", +" !Ctrl 7: call(cpZoom,7,7,fixed) \\n\\", +" !Ctrl 8: call(cpZoom,8,8,fixed) \\n\\", +" !Ctrl 9: call(cpZoom,9,9,fixed) \\n\\", +" !Ctrl a: call(tbToggleAutoReg) \\n\\", +" !Ctrl b: call(prevFrame,$name) \\n\\", +" !Ctrl c: call(cpZoomAction,centerFrame) \\n\\", +" !Ctrl f: call(nextFrame,$name) \\n\\", +" !Ctrl i: call(cpInvert) \\n\\", +" !Ctrl m: call(toggleMagnifier) \\n\\", +" !Ctrl n: call(normalize) \\n\\", +" !Ctrl o: call(offset,$x,$y) \\n\\", +" !Ctrl p: call(togglePanner) \\n\\", +" !Ctrl Alt q: call(Quit) \\n\\", +" !Ctrl r: call(cpRegisterFrames) \\n\\", +" !Ctrl s: call(cpMatchFrames) \\n\\", +" !Ctrl t: call(tbTileFramesToggle) \\n\\", +" !Ctrl u: call(cpZoom,1,1,fixed) \\n\\", +" !Ctrl x: call(cpFrameAction,flipX) \\n\\", +" !Ctrl y: call(cpFrameAction,flipY) \\n\\", +" Ctrl +: call(cpZoom,2.0,2.0,relative) \\n\\", +" Ctrl -: call(cpZoom,0.5,0.5,relative) \\n\\", +" !Ctrl Alt =: call(Print) \\n\\", +" Ctrl \\<: call(cpSetBlinkRate,BRdecrease) \\n\\", +" Ctrl \\>: call(cpSetBlinkRate,BRincrease) \\n\\", +" Ctrl \\[: call(setCtrBoxSize,$x,$y,-1) \\n\\", +" Ctrl \\]: call(setCtrBoxSize,$x,$y,1) \\n\\", +" !Ctrl 0: call(centroid,$x,$y,peak) \\n\\", +" !Ctrl Alt 0: call(centroid,$x,$y,min) \\n\\", +" !Alt b: call(toggleBlink) \\n\\", +" !Alt c: call(displayPanel) \\n\\", +" !Ctrl Shift c: call(displayPanel) \\n\\", +" !Ctrl Alt f: call(fitFrame) \\n\\", +" !Alt h: call(Help) \\n\\", +" !Alt i: call(infoPanel) \\n\\", +" !Alt l: call(loadPanel) \\n\\", +" !Alt p: call(printPanel) \\n\\", +" !Alt s: call(savePanel) \\n\\", +" !Alt t: call(tclPanel) \\n\\", +" !Ctrl Shift t: call(tclPanel) \\n\\", +" !Shift: call(setDynamicMagnifier,1) \\n\\", +" !Shift: call(setDynamicMagnifier,0) \\n\\", +" !: call(makeMarker,$name,$x,$y) m_create() \\n\\", +" !Shift : crosshair(on) \\n\\", +" !Shift : crosshair(on) \\n\\", +" !Shift : crosshair(off) \\n\\", +" !: crosshair(off) \\n\\", +" !: call(zoom,$x,$y) \\n\\", +" !: call(windowColormap,$x,$y) \\n\\", +" !: call(updateColormap,$x,$y) \\n\\", +" !: call(windowColormap,$x,$y) \\n\\", +" !Ctrl : call(makeRuler,$name,$x,$y) \\n\\", +" !Ctrl : track-cursor() call(wcsUpdate,$x,$y) call(magnifierMapImage,$x,$y) call(resizeRuler,$x,$y,0) \\n\\", +" !Ctrl : call(deleteRuler,$x,$y) \\n\\", +" : enter-window() \\n\\", +" : leave-window() \\n\\", +" : graphics-input() \\n\\", +" !Alt : call(curtrack_msg,$x,$y) \\n\\", +" : track-cursor() call(wcsUpdate,$x,$y) call(magnifierMapImage,$x,$y)", +"", +"! The following translations can be used to enable windowing of the", +"! individual RGB components of the colormap. It's not very useful but", +"! included here for those that may wish to use it.", +"!--------------------------------------------------------------------------", +"! !Ctrl : call(windowRGB,1,$x,$y,0) \\n\\", +"! !Ctrl : call(windowRGB,1,$x,$y,0) \\n\\", +"! !Ctrl : call(windowRGB,1,$x,$y,1) \\n\\", +"! !Ctrl : call(windowRGB,2,$x,$y,0) \\n\\", +"! !Ctrl : call(windowRGB,2,$x,$y,0) \\n\\", +"! !Ctrl : call(windowRGB,2,$x,$y,1) \\n\\", +"! !Ctrl : call(windowRGB,3,$x,$y,0) \\n\\", +"! !Ctrl : call(windowRGB,3,$x,$y,0) \\n\\", +"! !Ctrl : call(windowRGB,3,$x,$y,1) \\n\\", +"", +"", +" *colorbar.maxRasters: 1", +" *colorbar.maxMappings: 1", +" *colorbar.height: 17", +" *colorbar.width: 50", +" *colorbar.borderWidth: 0", +"}", +"", +"", +"set Resources(panelShell) { \\", +"", +" !================================", +" ! Main Integrated Control Panel", +" !================================", +" *panelShell.title: XImtool Control Panel", +" *panelShell.geometry: 480x630", +" *panelShell.maxWidth: 480", +" *panelShell.minWidth: 480", +" *panelTabs.internalHeight: 3", +" *panelTabs.internalWidth: 10", +"", +" *Text*font: -*-helvetica-medium-r-normal-*-12-*-iso8859-1", +" *TextBox*font: -*-helvetica-medium-r-normal-*-12-*-iso8859-1", +" *List.font: -*-helvetica-medium-r-normal-*-12-*-iso8859-1", +" *MultiList.font: -*-helvetica-medium-r-normal-*-12-*-iso8859-1", +" *TextButton.font: -*-helvetica-medium-r-normal-*-12-*-iso8859-1", +" *TextToggle.font: -*-helvetica-medium-r-normal-*-12-*-iso8859-1", +"", +" *display_panel.tabLabel: Display", +" *display_panel.innerOffset: 5", +" *print_panel.tabLabel: Print", +" *print_panel.innerOffset: 5", +" *load_panel.tabLabel: Load", +" *load_panel.innerOffset: 5", +" *save_panel.tabLabel: Save", +" *save_panel.innerOffset: 5", +" *info_panel.tabLabel: Info", +" *info_panel.innerOffset: 5", +" *tile_panel.tabLabel: Tile", +" *tile_panel.innerOffset: 5", +" *wcs_panel.tabLabel: Coords", +" *wcs_panel.innerOffset: 5", +"", +" *panelMenuBar*borderWidth: 0", +" *panelMenuBar*Command.internalHeight: 4", +" *panelMenuBar*Command.internalWidth: 15", +" *panelMenuBar.layout: vertical { \\", +" 5 < -5 > \\", +" horizontal { \\", +" 10 < +inf -10> \\", +" panelHelp \\", +" 3 < -3 > \\", +" panelClose \\", +" 7 < -7 > \\", +" } \\", +" 5 < -5 > \\", +" }", +"", +" *panelHelp.label: Help", +" *panelClose.label: Dismiss", +"", +"", +" *tabFrame.outerOffset: 3", +" *tabFrame.innerOffset: 0", +" *tabFrame.frameWidth: 0", +" *tabFrame.frameType: chiseled", +" *panelMenuFrame.outerOffset: 0", +" *panelMenuFrame.innerOffset: 1", +" *panelMenuFrame.frameType: raised", +" *panelMenuFrame.frameWidth: 2", +" *panel.layout: vertical { \\", +" panelMenuFrame < +inf -inf * > \\", +" 3 \\", +" horizontal { tabFrame < +inf -inf * +inf -inf> } \\", +" }", +"} ", +"", +"", +"set Resources(display_panel) { \\", +"", +" !================================", +" ! Main Display Control Panel.", +" !================================", +" *controlPanel*internalWidth: 0", +" *controlPanel*borderWidth: 0", +"", +" *TextBox.font: 7x13bold", +" *TextToggle.font: -adobe-times-medium-r-normal-*-12-*-*-*-*-*-iso8859-1", +" *Command.font: -adobe-times-bold-i-normal-*-12-*-*-*-*-*-iso8859-1", +" *Toggle.font: -adobe-times-medium-r-normal-*-12-*-*-*-*-*-iso8859-1", +" *Label.font: -*-helvetica-medium-r-normal-*-12-*-iso8859-1", +" *MultiList.font: -adobe-times-medium-r-normal-*-12-*-*-*-*-*-iso8859-1", +" *toggleZoom.font: -*-helvetica-medium-r-normal-*-12-*-iso8859-1", +" *centerFrame.font: -*-helvetica-medium-r-normal-*-12-*-iso8859-1", +" *zoom*Command.font: 7x13bold", +"", +" *blinkFrame1.font: -adobe-times-medium-r-normal-*-12-*-iso8859-1", +" *blinkFrame2.font: -adobe-times-medium-r-normal-*-12-*-iso8859-1", +" *blinkFrame3.font: -adobe-times-medium-r-normal-*-12-*-iso8859-1", +" *blinkFrame4.font: -adobe-times-medium-r-normal-*-12-*-iso8859-1", +" *matchButton.font: -adobe-times-medium-r-normal-*-12-*-iso8859-1", +" *registerButton.font: -adobe-times-medium-r-normal-*-12-*-iso8859-1", +" *blinkButton.font: -adobe-times-medium-r-normal-*-12-*-iso8859-1", +" *autoregButton.font: -adobe-times-medium-r-normal-*-12-*-iso8859-1", +"", +" *controlPanel.layout: vertical { \\", +" 5 < -5 > \\", +" horizontal { \\", +" -1 \\", +" viewBox < +inf -inf * > \\", +" -1 \\", +" } \\", +" 5 < -5 > \\", +" horizontal { \\", +" -1 \\", +" enhancementBox < +inf -inf * +inf -inf > \\", +" -5 \\", +" vertical { \\", +" -1 \\", +" blinkBox < * +inf - inf > \\", +" 1 \\", +" optionsBox < * +inff -inff > \\", +" -1 \\", +" } \\", +" -1 \\", +" } \\", +" -5 \\", +" controlBox < +inf * > \\", +" -5 \\", +" }", +"", +" ! VIEW", +" ! ------------------", +" *viewBox.label: View", +" *viewBox.location: 0 0 410 0", +" *viewBox.shrinkToFit: True", +" *viewBox.outerOffset: 7", +"", +" *view.layout: vertical { \\", +" 5 < +inf -5 > \\", +" horizontal { \\", +" -1 \\", +" frameSelect \\", +" vertical { \\", +" 3 < -3 > \\", +" frameDataBox < +inff -100% * +inff -100% > \\", +" 3 < -3 > \\", +" } \\", +" zoomBox \\", +" -1 \\", +" } \\", +" 1 < +inf > \\", +" viewButtons < +inf -inf * +inf -inf > \\", +" 5 < +inf -5 > \\", +" }", +"", +" *frameDataBox.frameType: sunken", +" *frameDataBox.frameWidth: 1", +" *frameData.width: 150", +" *frameData.height: 50", +"", +" *frameSelect.location: 0 0 72 0", +" *frameSelect.shrinkToFit: True", +" *frameSelect.outerOffset: 7", +" *frameSelect.innerOffset: 2", +" *frameSelect.frameWidth: 2", +" *frameSelect*offIcon: diamond0s", +" *frameSelect*onIcon: diamond1s", +" *frameSelect*highlightColor: blue", +" *frameSelect.label: Frame", +"", +" *frameBox.layout: vertical { \\", +" 3 \\", +" horizontal { -2 frlistBox < * +inff -inff > } \\", +" 3 < +inf -3 > \\", +" horizontal { prevFrame < +inf -inf * > 4 nextFrame < +inf -inf * > } \\", +" }", +" *framePort.allowVert: True", +" *framePort.allowHoriz: False", +" *framePort.useRight: True", +" *framePort.height: 80", +"", +" *frameBox*alignment: left", +" *frameBox*frameWidth: 0", +" *frameBox*frame1.label: 1\\ \\ ", +" *frameBox*frame2.label: 2\\ \\ ", +" *frameBox*frame3.label: 3\\ \\ ", +" *frameBox*frame4.label: 4\\ \\ ", +"", +" *frameBox*frame5.label: 5\\ \\ ", +" *frameBox*frame6.label: 6\\ \\ ", +" *frameBox*frame7.label: 7\\ \\ ", +" *frameBox*frame8.label: 8\\ \\ ", +" *frameBox*frame9.label: 9\\ \\ ", +" *frameBox*frame10.label: 10\\ ", +" *frameBox*frame11.label: 11\\ ", +" *frameBox*frame12.label: 12\\ ", +" *frameBox*frame13.label: 13\\ ", +" *frameBox*frame14.label: 14\\ ", +" *frameBox*frame15.label: 15\\ ", +" *frameBox*frame16.label: 16\\ ", +" *frameBox*Command.width: 24", +" *frameBox*prevFrame.label: xxx", +" *frameBox*nextFrame.label: xxx", +"", +" *frameList*location: 0 0 50 20", +" *frameList.layout: vertical { \\", +" frame1 < +inf * >\\", +" frame2 < +inf * >\\", +" frame3 < +inf * >\\", +" frame4 < +inf * >\\", +" frame5 < +inf * >\\", +" frame6 < +inf * >\\", +" frame7 < +inf * >\\", +" frame8 < +inf * >\\", +" frame9 < +inf * >\\", +" frame10 < +inf * >\\", +" frame11 < +inf * >\\", +" frame12 < +inf * >\\", +" frame13 < +inf * >\\", +" frame14 < +inf * >\\", +" frame15 < +inf * >\\", +" frame16 < +inf * >\\", +" }", +"", +"", +" *zoomBox.label: Zoom:", +" *zoomBox.location: 0 0 160 127", +" *zoomBox.outerOffset: 7", +" *zoomBox.shrinkToFit: True", +" *zoomBox*TextButton.frameWidth: 1", +" *zoomBox*TextButton.outerOffset: 0", +"", +" *controlPanel*zoom*internalWidth: 4", +" *zoom.layout: vertical { \\", +" space = ((50% of width zoom) - (50% of width z5)) \\", +" 1 < +inf > \\", +" horizontal { \\", +" vertical { toggleZoom < +inf * +inf > 1 } \\", +" 1 \\", +" vertical { 1 < +inf > z5 1 < +inf > z3 0 < +inf > } \\", +" 1 \\", +" vertical { zoomIn < +inf * +inf > 1 } \\", +" } \\", +" 1 \\", +" horizontal { \\", +" 1 < +inf > \\", +" d8 1 d4 1 d2 1 x1 1 z2 1 z4 1 z8 \\", +" 1 < +inf > \\", +" } \\", +" 1 \\", +" horizontal { \\", +" vertical { 1 zoomOut < +inf * +inf > } \\", +" 1 \\", +" vertical { 0 < +inf > d3 1 < +inf > d5 1 < +inf > } \\", +" 1 \\", +" vertical { 1 centerFrame < +inf * +inf > } \\", +" } \\", +" 1 < +inf > \\", +" }", +"", +" *toggleZoom.label: Toggle\\nZoom", +" *toggleZoom.outerOffset: 2", +" *toggleZoom.width: 30", +" *toggleZoom.height: 25", +"", +" *zoomIn.label: Zoom\\nIn", +" *zoomIn.outerOffset: 2", +" *zoomIn.width: 30", +" *zoomIn.height: 25", +"", +" *x1.label: 1", +" *z2.label: 2", +" *z3.label: 3", +" *z4.label: 4", +" *z5.label: 5", +" *z8.label: 8", +"", +" *controlPanel*zoomIn.foreground: royalBlue3", +" *controlPanel*z4.foreground: royalBlue3", +" *controlPanel*z5.foreground: royalBlue3", +" *controlPanel*z8.foreground: royalBlue3", +" *controlPanel*z2.foreground: royalBlue3", +" *controlPanel*z3.foreground: royalBlue3", +"", +" *zoomOut.label: Zoom\\nOut", +" *zoomOut.outerOffset: 2", +" *zoomOut.width: 30", +" *zoomOut.height: 25", +"", +" *centerFrame.label: Center", +" *centerFrame.outerOffset: 2", +" *centerFrame.width: 30", +" *centerFrame.height: 25", +"", +" *d2.label: 2", +" *d3.label: 3", +" *d4.label: 4", +" *d5.label: 5", +" *d8.label: 8", +"", +" *controlPanel*zoomOut.foreground: mediumVioletRed", +" *controlPanel*d2.foreground: mediumVioletRed", +" *controlPanel*d3.foreground: mediumVioletRed", +" *controlPanel*d4.foreground: mediumVioletRed", +" *controlPanel*d5.foreground: mediumVioletRed", +" *controlPanel*d8.foreground: mediumVioletRed", +"", +" *viewButtons.location: 0 0 100 80", +" *viewButtons.layout: horizontal { \\", +" 2 < -2 > \\", +" aspect < +inf * > 2 \\", +" flipX < +inf * > 2 \\", +" flipY < +inf * > 2 \\", +" flipXY < +inf * > 2 \\", +" clearFrame < +inf * > 2 \\", +" fitFrame < +inf * > \\", +" 2 < -2 > \\", +" }", +" *nextFrame.label: Next Frame", +" *prevFrame.label: Previous Frame", +" *fitFrame.label: Fit Frame", +" *aspect.label: Aspect", +" *clearFrame.label: Clear Frame", +" *flipX.label: Flip X", +" *flipY.label: Flip Y", +" *flipXY.label: Flip XY", +"", +"", +" ! ENHANCEMENT", +" ! ------------------", +" *enhancementBox.label: Enhancement", +" *enhancementBox.location: 0 0 110 0", +" *enhancementBox.shrinkToFit: True", +" *enhancementBox.outerOffset: 7", +"", +" *enhance*Viewport.allowVert: True", +" *enhance*Viewport.allowHoriz: False", +" *enhance*Viewport.useRight: False", +" *enhance*Viewport.resizeable: True", +" *enhance*Scrollbar.width: 17", +" *enhance*Scrollbar.minimumThumb: 10", +" *enhance.layout: vertical { \\", +" 3 < -3 > \\", +" horizontal { \\", +" 2 < -2 > \\", +" colorlistFrame < +inf -inf * +inff -inff > \\", +" 2 < -2 > \\", +" } \\", +" 2 \\", +" horizontal { \\", +" 2 < -2 > \\", +" colordataFrame < +inf -inf * +inf -inf > \\", +" 2 < -2 > \\", +" } \\", +" 5 < -5 > \\", +" horizontal { \\", +" 2 < -2 > \\", +" vertical { -1 contrastLabel 3 < -3 > brightnessLabel -1 } \\", +" 3 < -3 > \\", +" vertical { \\", +" -1 \\", +" contrastSlider < +inf -inf * > \\", +" 3 < -3 > \\", +" brightnessSlider < +inf -inf * > \\", +" -1 \\", +" } \\", +" 2 < -2 > \\", +" } \\", +" 5 < -5 > \\", +" horizontal { \\", +" 3 < -3 > \\", +" invertButton < +inf -inf * > \\", +" 5 < -5 > \\", +" optimizeButton < +inf -inf * > \\", +" 3 < -3 > \\", +" } \\", +" 3 < -3 > \\", +" }", +"", +" *enhance*frameType: sunken", +" *enhance*frameWidth: 1", +" *enhance*BorderWidth: 0", +" *enhance*Label.ShadowWidth: 0", +"", +" *colorlist.width: 100", +" *colorlist.height: 98", +" *colordata.width: 100", +" *colordata.height: 45", +" *enhance*colordata.frameWidth: 0", +" *contrastLabel.label: x", +" *contrastSlider.location: 0 0 100 17", +" *brightnessLabel.label: x", +" *brightnessSlider.location: 0 0 100 17", +" *invertButton.label: Invert", +" *optimizeButton.label: Optimize", +"", +"", +" ! ---------------------", +" ! BLINK/REGISTER", +" ! ---------------------", +" *blinkBox.label: Blink/Register", +" *blinkBox.location: 0 0 235 0", +" *blinkBox.shrinkToFit: True", +" *blinkBox.outerOffset: 7", +" *blinkBox*TextToggle.frameWidth: 1", +"", +" *blink.layout: vertical { \\", +" space = (width blinkFramesLabel - width blinkRateLabel) \\", +" 3 < -3 > \\", +" horizontal { \\", +" 0 \\", +" blinkFramesLabel \\", +" 3 < +inf > \\", +" blinkFrame1 < -50% * > \\", +" blinkFrame2 < -50% * > \\", +" blinkFrame3 < -50% * > \\", +" blinkFrame4 < -50% * > \\", +" 4 < +inf > \\", +" blinkPanel < -50% * > \\", +" blinkReset \\", +" 2 \\", +" } \\", +" 5 < -5 > \\", +" horizontal { \\", +" $space \\", +" blinkRateLabel \\", +" 2 \\", +" BRframe < +inf * > \\", +" } \\", +" 5 < +inf -100% > \\", +" horizontal { \\", +" vertical { \\", +" 2 matchButton < +inf * > 4 < -4 > registerButton < +inf * > \\", +" } \\", +" 5 < -5 > \\", +" vertical { \\", +" 1 blinkButton < +inf * > 4 < -4 > autoregButton < +inf * > \\", +" } \\", +" } \\", +" }", +"", +" *BRlayout.layout: horizontal { \\", +" BRdecrease \\", +" BRtext < +inf -100% * > \\", +" BRincrease \\", +" }", +"", +" *blink.Label.borderWidth: 0", +" *blink.Label.shadowWidth: 0", +" *controlPanel*blink*internalWidth: 4", +" *blink.TextToggle.location: 0 0 102 23", +" *blink.TextToggle.frameWidth: 1", +" *blink*TextToggle.highlightColor: yellow", +" *blink*TextToggle.offIcon: square0s", +" *blink*TextToggle.onIcon: square1s", +" *blink*TextToggle.outerOffset: 1", +" *blink*Command.height: 27", +" *blink*Arrow.width: 16", +" *blink*Arrow.height: 25", +"", +"", +" *blinkFramesLabel.label: Frames List:", +" *blinkFrame1.label: 1", +" *blinkFrame2.label: 2", +" *blinkFrame3.label: 3", +" *blinkFrame4.label: 4", +" *blinkPanel.label: x", +" *blinkPanel.width: 20", +" *blinkReset.label: Reset", +"", +" *blinkRateLabel.label: Blink Rate:", +" *BRframe.frameType: sunken", +" *BRframe.frameWidth: 1", +" *BRtext.width: 40", +" *BRtext.height: 23", +" *BRdecrease.direction: left", +" *BRincrease.direction: right", +" *registerButton.label: Register", +" *matchButton.label: Match LUTs", +" *blinkButton.label: Blink", +" *autoregButton.label: Auto-Register", +"", +" ! OPTIONS", +" ! ---------------------", +" *optionsBox.label: Options", +" *optionsBox.location: 0 0 220 0", +" *optionsBox.shrinkToFit: False", +" *optionsBox.outerOffset: 7", +" *optionsBox*offIcon: square0s", +" *optionsBox*onIcon: square1s", +" *optionsBox*selectionStyle: multi", +" *optionsBox*highlightColor: yellow", +" *optionsBox.TextToggle.location: 0 0 102 20", +" *optionsBox.TextToggle.frameWidth: 0", +" *optionsBox.TextToggle.highlightThickness: 0", +" *optionsBox*alignment: left", +"", +" *pannerButton.label: Panner", +" *coordsBoxButton.label: Coords Box", +" *autoscaleButton.label: Autoscale", +" *antialiasButton.label: Antialias", +" *tileFramesButton.label: Tile Frames", +" *magnifierButton.label: Magnifier", +" *warningsButton.label: Warnings", +" *peakupButton.label: Centroid Peaks", +" *peakupButton.on: True", +"", +" ! CONTROL", +" ! ----------------------", +" *controlBox.frameType: chiseled", +" *controlBox.frameWidth: 2", +" *controlBox.outerOffset: 7", +" *controlBox.innerOffset: 5", +" *controlBox.height: 30", +"", +" *control.layout: horizontal { \\", +" 1 \\", +" initializeButton < +inf * > \\", +" 5 < -5 > \\", +" normalizeButton < +inf * > \\", +" 80 < +inf -100% > \\", +" }", +"", +" *initializeButton.label: Initialize", +" *normalizeButton.label: Normalize", +"}", +"", +"", +"set Resources(print_panel) { \\", +"", +" !=====================================", +" ! Print Setup Panel resources. !", +" !=====================================", +" *print_panel*TextToggle.alignment: left", +" *print_panel*Arrow.width: 16", +" *print_panel*Arrow.height: 20", +" *print_panel*TextToggle.frameWidth: 0", +" *print_panel*TextToggle.height: 20", +" *print_panel*Label.borderWidth: 0", +" *print_panel*Label.shadowWidth: 0", +" *print_panel*TextButton.width: 40", +" *print_panel*TextButton.height: 25", +"", +" *printLayout.borderWidth: 0", +" *printLayout.layout: vertical { \\", +" -1 \\", +" printCmdGroup < +inf * > \\", +" -1 \\", +" optGroup < +inf -inf * +inf -inf > \\", +" -3 \\", +" cmdGroup < +inf * > \\", +" -1\\", +" }", +"", +"", +" ! Print Group resources.", +" !----------------------------------", +" *printCmdGroup.borderWidth: 0", +" *printCmdGroup.outerOffset: 5", +" *printCmdGroup.label: ", +" *printCmdGroup.location: 0 0 400 80", +" *printCmdGroup*offIcon: diamond0s", +" *printCmdGroup*onIcon: diamond1s", +" *printCmdGroup*highlightColor: cyan", +" *printCmdGroup*Frame.frameType: sunken", +" *printCmdGroup*Frame.frameWidth: 1", +" *printCmdGroup*Frame.width: 300", +" *printCmdGroup*Label.justify: right", +" *printCmdGroup*Text*editType: edit", +" *printCmdGroup*Text*height: 22", +" *printCmdGroup*TextToggle.width: 70", +" *printCmdGroup*shadowWidth: 0", +" *printCmdGroup*borderWidth: 0", +" *printCmdLayout.borderWidth: 0", +" *printCmdLayout.layout: horizontal { \\", +" labelLayout 5 inputLayout < +inf -inf * > \\", +" }", +" *labelLayout.borderWidth: 0", +" *labelLayout.layout: vertical { 5 toLabel 7 printerLabel }", +" *printerLabel.label: Print Command:", +" *toLabel.label: Print To:", +" *toPrinter.label: Printer", +" *toPrinter.on: True", +" *toFile.label: File", +"", +" *inputLayout.borderWidth: 0", +" *inputLayout.layout: horizontal { \\", +" 3 \\", +" vertical { \\", +" 5 \\", +" horizontal { 5 toPrinter 5 toFile 5 < +inf -inf > } \\", +" 5 \\", +" printcmdFrame < +inf -inf * > \\", +" 5 \\", +" } \\", +" 3 \\", +" }", +" *printcmd*string: lpr", +" *printcmd*height: 22", +" *printcmd*Text*editType: edit", +"", +"", +" ! Main options groups layout resources.", +" !---------------------------------------", +" *optGroup.frameWidth: 2", +" *optGroup.frameType: chiseled", +" *optGroup.label: ", +" *optGroup.location: 0 0 400 330", +" *optGroup.outerOffset: 5", +" *optGroup.innerOffset: 2", +" *optLayout*borderWidth: 0", +" *optLayout.layout: vertical { \\", +" -1 \\", +" horizontal { \\", +" vertical { \\", +" 5 \\", +" epsPageGroup < +inf -inf * > \\", +" optionsGroup < +inf -inf * +inf -inf > \\", +" -1 \\", +" } \\", +" vertical { \\", +" 5 \\", +" printColorGroup < +inf -inf * > \\", +" printerGroup < +inf -inf * > \\", +" -1 \\", +" } \\", +" -1 \\", +" } \\", +" 5 \\", +" horizontal { annOptsGroup < +inf * +inf > -1 } \\", +" -1 \\", +" }", +"", +"", +" ! Postscript Options group resources.", +" ! -----------------------------------", +" *epsPageGroup.label: Postscript Options", +" *epsPageGroup.outerOffset: 7", +" *epsPageGroup.innerOffset: 5", +" *epsPageGroup.location: 0 0 250 150", +" *epsPageGroup*offIcon: diamond0s", +" *epsPageGroup*onIcon: diamond1s", +" *epsPageGroup*highlightColor: cyan", +" *epsPage*Label.justify: left", +" *epsPage.layout: vertical { \\", +" -1 \\", +" epsOrientLabel 4 < -4 > \\", +" horizontal { 25 epsPortButton epsLandButton epsSquareButton -1 } \\", +" 4 \\", +" epsSizeLabel -1 \\", +" horizontal { \\", +" 25 epsLetterButton epsLegalButton epsA4Button epsB5Button -1 \\", +" } \\", +" 10 \\", +" horizontal { 5 epsScaleLabel 4 ScaleFrame < +inf -inf * > } \\", +" -1 \\", +" }", +"", +"", +" ! Page Layout resources.", +" ! -------------------------------", +" *epsOrientLabel.label: Orientation:", +" *epsPortButton.label: Portrait", +" *epsPortButton.width: 65", +" *epsLandButton.label: Landscape", +" *epsLandButton.width: 85", +" *epsSquareButton.label: Square", +" *epsSquareButton.width: 70", +" *epsSquareButton.sensitive: False", +"", +" *epsSizeLabel.label: Paper Size:", +" *epsLetterButton.label: Letter", +" *epsLetterButton.width: 60", +" *epsLegalButton.label: Legal", +" *epsLegalButton.width: 60", +" *epsA4Button.label: A4", +" *epsA4Button.width: 50", +" *epsB5Button.label: B5", +" *epsB5Button.width: 50", +"", +" ! Image scale box resources.", +" ! -------------------------------", +" *epsScaleLabel.label: Output Image Scale:", +" *epsScaleLabel.justify: right", +" *ScaleFrame.frameType: sunken", +" *ScaleFrame.frameWidth: 1", +" *ScaleFrame*shadowWidth: 0", +" *ScaleLayout.location: 0 0 100 35", +" *ScaleLayout.label: ", +" *ScaleLayout.layout: horizontal { \\", +" SCdecrease SCtext < +inf -100% * > SCincrease \\", +" }", +" *SCdecrease.direction: left", +" *SCtext.width: 75", +" *SCtext.height: 22", +" *SCtext.label: 100 %", +" *SCincrease.direction: right", +"", +"", +" ! Miscellaneous print options box resources.", +" ! ------------------------------------", +" *optionsGroup.outerOffset: 7", +" *optionsGroup.innerOffset: 5", +" *optionsGroup*onIcon: square1s", +" *optionsGroup*offIcon: square0s", +" *optionsGroup.label: Processing Options", +" *optionsGroup*TextToggle.width: 125", +" *optionsGroup*TextToggle.highlightColor: yellow", +" *options.location: 0 0 250 60", +" *options.frameWidth: 2", +" *options.layout: horizontal { \\", +" 5 \\", +" vertical { -1 epsscaleButton 2 autorotateButton -1 } \\", +" 3 \\", +" vertical { -1 aspectButton 2 compressButton -1 } \\", +" -1 \\", +" }", +" *epsscaleButton.label: Auto Scale", +" *autorotateButton.label: Auto Rotate", +" *aspectButton.label: Max Aspect", +" *compressButton.label: RLE Compress", +" *compressButton.sensitive: False", +"", +"", +" ! Annotation options box resources.", +" ! ------------------------------------", +" *annOptsGroup.outerOffset: 7", +" *annOptsGroup.innerOffset: 5", +" *annOptsGroup*onIcon: square1s", +" *annOptsGroup*offIcon: square0s", +" *annOptsGroup.label: Annotation Options", +" *annOptsGroup*TextToggle.width: 90", +" *annOptsGroup*TextToggle.highlightColor: yellow", +" *annOptsGroup*Frame.frameType: sunken", +" *annOptsGroup*Frame.frameWidth: 1", +" *annOptsGroup*Frame.width: 300", +" *annOptsGroup*Text*editType: edit", +" *annOpts.frameWidth: 2", +" *annOpts.location: 0 0 400 70", +" *annOpts.layout: vertical { \\", +" 2 \\", +" horizontal { \\", +" 5 annotateButton 2 titleButton 2 bordersButton 2 colorbarButton 5 \\", +" } \\", +" 3 \\", +" horizontal { -1 titleLabel 2 titleFrame < +inf -inf * > -1 } \\", +" -1 \\", +" }", +" *annotateButton.label: \\ Annotate", +" *titleButton.label: \\ Title", +" *bordersButton.label: \\ Borders", +" *colorbarButton.label: \\ Colorbar", +" *titleLabel.label: Title String", +" *titleString*string: imtitle", +" *titleString*height: 23", +" *titleString*Text*editType: edit", +"", +"", +" ! Output color box resources.", +" ! ------------------------------", +" *printColorGroup.location: 0 0 150 90", +" *printColorGroup.outerOffset: 7", +" *printColorGroup.frameWidth: 2", +" *printColorGroup*offIcon: diamond0s", +" *printColorGroup*onIcon: diamond1s", +" *printColorGroup*highlightColor: cyan", +" *printColorGroup.innerOffset: 5", +" *printColorGroup.label: Output Color", +" *printColorGroup*TextToggle.width: 110", +" *printColor.frameWidth: 2", +" *printColor.location: 0 0 250 75", +" *printColor.layout: horizontal { \\", +" 1 \\", +" vertical { -1 prGrayButton 2 prPseudoButton 2 prRGBButton -1 } \\", +" -1 \\", +" }", +" *prGrayButton.label: Grayscale", +" *prPseudoButton.label: PseudoColor", +" *prRGBButton.label: RGB", +"", +" ! Printer Selection.", +" ! --------------------------", +" *printerGroup.label: Printers", +" *printerGroup.location: 0 0 110 130", +" *printerGroup.shrinkToFit: True", +" *printerGroup.outerOffset: 7", +"", +" *printers*Viewport.allowVert: True", +" *printers*Viewport.allowHoriz: False", +" *printers*Viewport.useRight: True", +" *printers*Viewport.resizeable: True", +" *printers*Scrollbar.width: 17", +" *printers*Scrollbar.minimumThumb: 10", +" *printers.layout: vertical { \\", +" 3 < -3 > \\", +" horizontal { \\", +" 2 < -2 > \\", +" printlistFrame < +inf -inf * +inff -inff > \\", +" 2 < -2 > \\", +" } \\", +" 3 < -3 > \\", +" }", +"", +" *printers*frameType: sunken", +" *printers*frameWidth: 1", +" *printers*BorderWidth: 0", +" *printers*Label.ShadowWidth: 0", +"", +" *printlist.width: 100", +" *printlist.height: 78", +"", +"", +" ! Panel command resources.", +" ! ------------------------------", +" *cmdGroup.frameType: chiseled", +" *cmdGroup.frameWidth: 2", +" *cmdGroup.outerOffset: 5", +" *cmdGroup.innerOffset: 5", +" *cmdGroup.label:", +" *cmdGroup.location: 0 0 150 50", +" *cmdLayout.borderWidth: 0", +" *cmdLayout*Command.internalWidth: 12", +" *cmdLayout.layout: horizontal { \\", +" 2 \\", +" okayPrint 1 < +inf > printStatus < +inf -inf * +inf -inf > \\", +" 2 \\", +" }", +" *cmdGroup*TextButton*location: 0 0 80 0", +" *okayPrint.label: Print", +"}", +"", +"", +"set Resources(info_panel) { \\", +"", +" !--------------------", +" ! Information Panel", +" !--------------------", +" *infoLayout*borderWidth: 0", +" *infoLayout*Frame.frameType: sunken", +" *infoLayout*Frame.frameWidth: 1", +" *infoLayout*Command.internalWidth: 12", +" *infoLayout*Text*editType: read", +" *infoLayout*Text*scrollVertical: whenNeeded", +" *infoLayout*Text*scrollHorizontal: whenNeeded", +" *infoLayout*Text*displayCaret: False", +" *infoLayout*Scrollbar.background: #c4c4c4", +" *infoLayout*Scrollbar.width: 17", +" *infoLayout*Scrollbar.height: 17", +"", +" *infoText.height: 240", +" *infoText*font: 6x13", +" *infoLayout.layout: vertical { \\", +" infoBox < +inf -inf * > \\", +" }", +"", +" *infoBox.label:", +" *infoBox.outerOffset: 0", +" *infoBox.innerOffset: 3", +" *infoBoxL*TextToggle.frameType: raised", +" *infoBoxL*TextToggle.frameWidth: 1", +" *infoBoxL*TextToggle*outerOffset: 0", +" *infoBoxL*TextToggle*innerOffset: 1", +" *infoBoxL*TextToggle.location: 0 0 100 25", +" *infoBoxL*TextToggle*onIcon: square1s", +" *infoBoxL*TextToggle*offIcon: square0s", +" *infoBoxL*TextToggle*highlightColor: cyan", +" *infoBoxL.layout: vertical { \\", +" infoFrame < +inf -inf * +inf -inf > 1 \\", +" 4 \\", +" horizontal { \\", +" infoOptFr < +inf -inf * > 1 \\", +" infoOptSvr < +inf -inf * > 1 \\", +" infoOptClients < +inf -inf * > 1 \\", +" infoOptWCS < +inf -inf * > 1 \\", +" infoOptIsm < +inf -inf * > 1 \\", +" infoOptFB < +inf -inf * > \\", +" }\\", +" 2 \\", +" }", +" *infoOptFr.label: Frame", +" *infoOptFr.on: True", +" *infoOptSvr.label: Server", +" *infoOptWCS.label: WCS", +" *infoOptIsm.label: ISM", +" *infoOptClients.label: Clients", +" *infoOptFB.label: Imtoolrc", +"}", +"", +"", +"", +"set Resources(load_panel) { \\", +"", +" !-------------------------------", +" ! File Load Control Panel.", +" !-------------------------------", +" *filesLayout*borderWidth: 0", +" *filesLayout*Group.shrinkToFit: True", +" *filesLayout*Group.frameType: chiseled", +" *filesLayout*Frame*frameType: sunken", +" *filesLayout*Frame*frameWidth: 1", +" *filesLayout*TextToggle.frameWidth: 0", +" *filesLayout*TextToggle.height: 28", +" *filesLayout*TextToggle.alignment: left", +" *filesLayout*TextToggle.ledtMargin: 3", +" *filesLayout*SimpleMenu.borderWidth: 1", +" *filesLayout*SimpleMenu.borderColor: black", +" *filesLayout*SimpleMenu.foreground: White", +" *filesLayout*SimpleMenu.background: SteelBlue", +" *filesLayout*Label.borderWidth: 0", +" *filesLayout*Label.shadowWidth: 0", +" *filesLayout.layout: vertical { \\", +" imlistGroup < +inf -inf * > \\", +" 3 \\", +" horizontal { -5 imoptsGroup < +inf -inf * > -5 } \\", +" -1 \\", +" loadCmdGroup < +inf -inf * > \\", +" }", +"", +" *imlistGroup.label:", +" *imlistGroup.frameWidth: 2", +" *imlistGroup.outerOffset: 2", +" *imlistLayout*Label.shadowWidth: 0", +" *imlistLayout*Label.justify: left", +" *imlistLayout*Command.width: 90", +" *imlistLayout*Command.height: 23", +" *imlistLayout*Command.shadowWidth: 1", +" *imlistLayout*Viewport.allowVert: True", +" *imlistLayout*Viewport.allowHoriz True", +" *imlistLayout*Viewport.useRight: True", +" *imlistLayout*Viewport.useBottom: True", +" *imlistLayout*Viewport.resizeable: True", +" *imlistLayout*Scrollbar.height: 17", +" *imlistLayout*Scrollbar.width: 17", +" *imlistLayout.layout: vertical { \\", +" 3 \\", +" horizontal { \\", +" 3 \\", +" rootButton < +inf -inf * > 1 \\", +" homeButton < +inf -inf * > 1 \\", +" upButton < +inf -inf * > 1 \\", +" rescanButton < +inf -inf * > \\", +" 3 \\", +" imtemplateLabel 3 imtemplateFrame < +inf -inf * > \\", +" 3 \\", +" } \\", +" 5 \\", +" horizontal { 1 imlistLabel < +inf -inf * > 1 } \\", +" imlistFrame < +inf -inf * +inf -inf > \\", +" 3 \\", +" dirLabel < +inf -inf * > \\", +" 3 \\", +" horizontal { 5 fnameLabel 5 filnamFrame < +inf -inf * > } \\", +" 3 \\", +" }", +" *imtemplateLabel.label: Filter:", +" *imtemplateText*editType: edit", +" *imtemplateText*height: 23", +" *imtemplateText*font: 7x13", +" !*imageList.width: 100", +" *imageList*height: 140", +" *imageList.shadeSurplus: False", +" *imageList.defaultColumns: 3", +" *imageList.font: 7x13", +" *imlistView.resizeable: True", +" *imlistLabel.height: 0", +" *imlistLabel.label: xxx", +" *imlistLabel.justify: left", +" *imlistLabel.font: *lucida-bold-r*10*", +" *upButton.label: Up", +" *rootButton.label: Root", +" *homeButton.label: Home", +" *rescanButton.label: Rescan", +" *dirLabel.label: \\ \\ Directory:", +" *dirLabel.alignment: left", +" *fnameLabel.label: Load File:", +" *fnameText*editType: edit", +" *fnameText.height: 22", +"", +" *imoptsGroup.label: Options", +" *imoptsGroup.frameWidth: 2", +" *imoptsGroup.outerOffset: 7", +" *imoptsGroup*offIcon: square0s", +" *imoptsGroup*onIcon: square1s", +" *imoptsGroup*highlightColor: yellow", +" *imoptsLayout*Label.shadowWidth: 0", +" *imoptsLayout*Label.justify: left", +" *imoptsLayout.layout: vertical { \\", +" 3 \\", +" horizontal { \\", +" 3 \\", +" autoload 6 grayscale \\", +" 3 < +inf > \\", +" browseHdrs \\", +" 3 < +inf > \\", +" frameLabel 2 frameFrame \\", +" 3 \\", +" } \\", +" 6 \\", +" horizontal { \\", +" 3 \\", +" zscale 6 zrange \\", +" 3 \\", +" z1Label z1Frame < +inf * > 2 \\", +" z2Label z2Frame < +inf * > 2 \\", +" nsampLabel nsampFrame < +inf * > \\", +" 3 \\", +" } \\", +" 3 \\", +" }", +" *grayscale.label: Auto Grayscale", +" *grayscale.location: 0 0 100 22", +" *autoload.label: Auto Load", +" *autoload.location: 0 0 80 22", +" *autoload.on: True", +" *browseHdrs.label: List Image Headers", +" *browseHdrs.location: 0 0 120 22", +" *browseHdrs.on: False", +" *zscale.label: Zscale", +" *zscale.location: 0 0 60 22", +" *zrange.label: Zrange", +" *zrange.location: 0 0 60 22", +" *z1Label.label: z1", +" *z1Value*width: 60", +" *z1Value*height: 22", +" *z1Value*editType: edit", +" *z2Label.label: z2", +" *z2Value*width: 60", +" *z2Value*height: 22", +" *z2Value*editType: edit", +" *nsampLabel.label: Nsample", +" *nsampValue*width: 60", +" *nsampValue*height: 22", +" *nsampValue*editType: edit", +" *frameLabel.label: Frame:\\ ", +" *frameFrame.width: 50", +" *frameFrame.resize: False", +" *frameFrame.label: Current", +" *frameFrame.font: 6x13", +" *frameFrame.menuName: loadFrames", +"", +"", +" *loadCmdGroup.label:", +" *loadCmdGroup*frameWidth: 2", +" *loadCmdGroup*outerOffset: 5", +" *loadCmdGroup.outerOffset: 2", +" *loadCmdGroup*innerOffset: 5", +" *loadCmdGroup.frameType: sunken", +" *loadCmdGroup.label:", +" *loadCmdGroup.location: 0 0 400 45", +" *loadCmdLayout*Command.internalWidth: 12", +" *loadCmdLayout.layout: horizontal { \\", +" 2 \\", +" filesLoadButton \\", +" 1 < +inf > \\", +" filesStatus \\", +" 2 \\", +" }", +" *filesLoadButton.label: Load", +" *filesStatus.label:", +"}", +"", +"", +"", +"set Resources(save_panel) { \\", +"", +" !=====================================", +" ! Save Setup Panel resources. !", +" !=====================================", +" *save_panel*TextToggle.alignment: left", +" *save_panel*TextToggle.frameWidth: 0", +" *save_panel*TextToggle.height: 20", +" *save_panel*Label.borderWidth: 0", +" *save_panel*Label.shadowWidth: 0", +" *save_panel*TextButton.width: 80", +"", +" *saveLayout.borderWidth: 0", +" *saveLayout.layout: vertical { \\", +" saveNameGroup < +inf * > \\", +" saveOptGroup < +inf -inf * > -3 \\", +" saveCmdGroup < +inf * > \\", +" }", +"", +" ! Save Name Group resources.", +" !----------------------------------", +" *saveNameGroup.borderWidth: 0", +" *saveNameGroup.outerOffset: 5", +" *saveNameGroup.label:", +" *saveNameGroup.location: 0 0 400 50", +" *saveNameGroup*offIcon: diamond0s", +" *saveNameGroup*onIcon: diamond1s", +" *saveNameGroup*highlightColor: cyan", +" *saveNameGroup*Frame.frameType: sunken", +" *saveNameGroup*Frame.frameWidth: 1", +" *saveNameGroup*Label.justify: right", +" *saveNameGroup*Text*editType: edit", +" *saveNameGroup*shadowWidth: 0", +" *saveNameGroup*borderWidth: 0", +" *saveNameLayout.borderWidth: 0", +" *saveNameLayout.layout: vertical { \\", +" 2 \\", +" horizontal { 5 saveLabel 5 fnameFrame < +inf -inf * > 5 } \\", +" 2 \\", +" }", +" *saveLabel.label: File Name:", +" *saveFile.height: 22", +"", +" ! Main options groups layout resources.", +" !---------------------------------------", +" *saveOptGroup.frameWidth: 2", +" *saveOptGroup.frameType: chiseled", +" *saveOptGroup.label:", +" *saveOptGroup.location: 0 0 400 140", +" *saveOptGroup.outerOffset: 5", +" *saveOptGroup.innerOffset: 0", +" *saveOptLayout*borderWidth: 0", +" *saveOptLayout.layout: horizontal { \\", +" -1 \\", +" vertical { 5 < -5 > fmtGroup < +inf * +inf > -1 } \\", +" -1 \\", +" vertical { \\", +" 10 < -10 > \\", +" saveDataBox < +inff -inff * +inff -inff > \\", +" 5 < -5 > \\", +" } \\", +" -1 \\", +" vertical { 5 < -5 > saveColorGroup < +inf * +inf > -1 } \\", +" -1 \\", +" }", +"", +" ! Output color box resources.", +" ! ------------------------------", +" *saveColorGroup.location: 0 0 140 120", +" *saveColorGroup.outerOffset: 7", +" *saveColorGroup.frameWidth: 2", +" *saveColorGroup*offIcon: diamond0s", +" *saveColorGroup*onIcon: diamond1s", +" *saveColorGroup*highlightColor: cyan", +" *saveColorGroup.innerOffset: 5", +" *saveColorGroup.label: Output Color", +" *saveColorGroup*TextToggle.width: 110", +" *saveColor.frameWidth: 2", +" *saveColor.layout: horizontal { \\", +" 3 \\", +" vertical { 5 svGrayButton 2 svPseudoButton 2 svRGBButton -1 } \\", +" -1 \\", +" }", +" *svGrayButton.label: Grayscale", +" *svPseudoButton.label: PseudoColor", +" *svRGBButton.label: RGB", +"", +" *saveDataBox.frameType: sunken", +" *saveDataBox.frameWidth: 1", +"", +"", +" ! Output format box resources.", +" ! -----------------------------------", +" *fmtGroup.location: 0 0 140 120", +" *fmtGroup.outerOffset: 7", +" *fmtGroup.frameWidth: 2", +" *fmtGroup*offIcon: diamond0s", +" *fmtGroup*onIcon: diamond1s", +" *fmtGroup*TextToggle.width: 55", +" *fmtGroup*highlightColor: cyan", +" *fmtGroup.label: File Format", +" *formats.layout: horizontal { \\", +" 3 \\", +" vertical { 5 fitsButton 2 gifButton 2 tiffButton 2 rawButton 1 } \\", +" 2 < -2 > \\", +" vertical { 5 epsButton 2 rasButton 2 x11Button 2 jpegButton 1 } \\", +" -1 \\", +" }", +" *rasButton.label: RAS", +" *gifButton.label: GIF", +" *jpegButton.label: JPEG", +" *tiffButton.label: TIFF", +" *fitsButton.label: FITS", +" *x11Button.label: X11", +" *epsButton.label: EPS", +" *rawButton.label: Raw", +"", +" ! Change the sensitivity once these formats are implemented. !", +" !-------------------------------------------------------------", +" *jpegButton.sensitive: False", +" *x11Button.sensitive: False", +" *rawButton.sensitive: False", +"", +"", +" ! Panel command resources.", +" ! ------------------------------", +" *saveCmdLayout.borderWidth: 0", +" *saveCmdGroup.frameType: chiseled", +" *saveCmdGroup.frameWidth: 2", +" *saveCmdGroup.outerOffset: 5", +" *saveCmdGroup.innerOffset: 5", +" *saveCmdGroup.label:", +" *saveCmdGroup.location: 0 0 400 50", +" *saveCmdLayout*Command.internalWidth: 12", +" *saveCmdLayout.layout: horizontal { \\", +" 2 \\", +" okaySave 1 < +inf -1 > saveStatus < +inf -inf * > \\", +" 2 \\", +" }", +" *okaySave.label: Save", +"}", +"", +"", +"set Resources(tile_panel) { \\", +"", +" *tileOpts.frameType: chiseled", +" *tileOpts.frameWidth: 2", +" *tileOpts.outerOffset: 5", +" *tileOpts.innerOffset: 7", +" *tileOpts*shrinkToFit: True", +" *tileOpts*borderWidth: 0", +"", +" *toptLayout.layout: vertical { \\", +" horizontal { -6 tFramesG < +inf -inf * > -6 } \\", +" horizontal { \\", +" -1 \\", +" horizontal { -6 tileMode < * +inf -inf > -6 } \\", +" vertical { \\", +" horizontal { -3 userOrientG < +inf -inf * > -3 } \\", +" horizontal { -3 fillStyle < +inf -inf * > -3 } \\", +" horizontal { -3 tileLabel < +inf -inf * > -3 } \\", +" -7 \\", +" horizontal { -3 geomFrame < +inf -inf * > -3 } \\", +" } \\", +" -1 \\", +" } \\", +" -4 \\", +" }", +" *tileMode.label: Tile Mode", +" *tileMode.outerOffset: 7", +" *tileMode.innerOffset: 5", +" *tileMode*location: 0 0 150 20", +" *tileMode*TextToggle.outerOffset: 2", +" *tileMode*TextToggle.innerOffset: 1", +" *tileMode*TextToggle.frameWidth: 0", +" *tileMode*TextToggle.leftMargin: 10", +" *tileMode*TextToggle.rightMargin: 20", +" *tileMode*TextToggle.onIcon: diamond1s", +" *tileMode*TextToggle.offIcon: diamond0s", +" *tileMode*TextToggle.highlightColor: yellow", +"", +" *tileDisabled.label: Disabled", +" *tileManual.label: Manual", +" *tileBest.label: Best", +" *tileSquare.label: Square", +" *tileHorizontal.label: Horizontal", +" *tileVertical.label: Vertical", +" *tileRow.label: One Row", +" *tileCol.label: One Column", +"", +" *fillStyle.label: Fill Style", +" *fillStyle.location: 0 0 160 30", +" *fillStyle.outerOffset: 7", +" *fillStyle.innerOffset: 5", +" *fillStyle.rows: 1", +" *fillStyle*selectionStyle: multi", +" *fillStyle*outerOffset: 0", +" *fillStyle*innerOffset: 1", +" *fillStyle*leftMargin: 7", +" *fillStyle*onIcon: square1s", +" *fillStyle*offIcon: square0s", +" *fillStyle*highlightColor: yellow", +" *fillStyle.TextToggle.frameWidth: 0", +" *fillStyle.TextToggle.location: 0 0 85 23", +" *byCols.label: Fill by Columns", +" *bottomUp.label: Fill from Bottom", +"", +" *tileLabel.label: Tile Labels", +" *tileLabel.location: 0 0 175 30", +" *tileLabel.outerOffset: 7", +" *tileLabel.innerOffset: 5", +" *tileLabel.rows: 1", +" *tileLabel*selection: -1", +" *tileLabel*outerOffset: 0", +" *tileLabel*innerOffset: 1", +" *tileLabel*leftMargin: 7", +" *tileLabel*onIcon: square1s", +" *tileLabel*offIcon: square0s", +" *tileLabel*highlightColor: yellow", +" *tileLabel.TextToggle.frameWidth: 0", +" *tileLabel.TextToggle.location: 0 0 85 23", +" *labelFrames.label: Frameno", +" *labelImname.label: Img Name", +" *labelTitles.label: Img Title", +"", +" *geomFrame.frameWidth: 0", +" *geomFrame.frameType: sunken", +" *geomFrame.outerOffset: 7", +" *geomFrame.innerOffset: 4", +" *tileGeometry.width: 220", +" *tileGeometry.height; 37", +" *tileGeometry.background: #c4c4c4", +" *tileGeometry.font: 7x13bold", +" *tileGeometry.label: Tile Geometry: 1 x 2", +"", +" *userOrientG.label: Manual Configuration", +" *userOrientG.height: 90", +" *userOrientG.width: 220", +" *userOrientG.outerOffset: 7", +" *userOrientG.innerOffset: 5", +" *userOrientG.shrinkToFit: True", +" *userOrientG*Frame.frameWidth: 1", +" *userOrientG*Frame.frameType: sunken", +" *userOrientG*Text.height: 21", +" *userOrientG*Text*editType: edit", +" *userOrientL.borderWidth: 0", +" *userOrientL.layout: vertical { \\", +" 1 \\", +" horizontal { 18 nrowLab < +50% -inf * > nrFrame < +inf -inf * > 5 } \\", +" 1 \\", +" horizontal { ncolLab < +50% -inf * > ncFrame < +inf -inf * > 5 } \\", +" }", +" *nrowLab.justify: right", +" *ncolLab.justify: right", +"", +" *nrLayout.layout: horizontal {nrdecrease nrtext < +inf -inf * > nrincrease}", +" *nrdecrease.direction: left", +" *nrincrease.direction: right", +" *nrowLab.label: Tile Rows:", +" *nrtext.background: #adadad", +" *nrtext.justify: center", +" *nrtext.font: 7x13bold", +" *nrtext.label: 1", +"", +" *ncLayout.layout: horizontal {ncdecrease nctext < +inf -inf * > ncincrease}", +" *ncdecrease.direction: left", +" *ncincrease.direction: right", +" *ncolLab.label: Tile Columns:", +" *nctext.background: #adadad", +" *nctext.justify: center", +" *nctext.font: 7x13bold", +" *nctext.label: 2", +"", +" *tFramesG.label: Tile Frames", +" *tFramesG.outerOffset: 7", +" *tFramesG.innerOffset: 7", +" *tFrames.borderWidth: 0", +" *tFrames*Toggle.height: 17", +" *tFrames.layout: horizontal { \\", +" tAll \\", +" 2 \\", +" tFrame1 tFrame2 tFrame3 tFrame4 tFrame5 \\", +" tFrame6 tFrame7 tFrame8 tFrame9 tFrame10 \\", +" tFrame11 tFrame12 tFrame13 tFrame14 tFrame15 tFrame16 \\", +" 2 \\", +" tNone \\", +" }", +" *tAll.label: All\\ ", +" *tNone.label: None", +"}", +"", +"", +"set Resources(wcs_panel) { \\", +"", +" !--------------------", +" ! WCS Readout Panel", +" !--------------------", +" *wcsGroup*TextToggle.offIcon: square0s", +" *wcsGroup*TextToggle.onIcon: square1s", +"", +" !*wcsLayout*TextToggle.location: 0 0 160 23", +" *wcsLayout*TextToggle.height: 23", +" *wcsLayout*TextToggle.outerOffset: 0", +" *wcsLayout*Layout.borderWidth: 0", +" *wcsLayout.borderWidth: 0", +" *wcsLayout.layout: vertical { \\", +" 0 < +0 -0 > \\", +" wcsGroup < +inf -inf * > \\", +" 5 \\", +" horizontal { -1 wcsOptGroup < +inf -inf * > -1 } \\", +" -2 \\", +" }", +"", +" *wcsOptGroup.label:", +" *wcsOptGroup.outerOffset: 0", +" *wcsOptGroup.innerOffset: 5", +" *wcsOptGroup.frameType: chiseled", +" *wcsOptGroup.frameWidth: 0", +" *wcsOptLayout.layout: vertical { \\", +" horizontal { -9 wcsCoords < +inf -inf * > -9 } \\", +" -3 \\", +" horizontal { -5 wcsOpts < +inf -inf * > -5 } \\", +" horizontal { -5 wcsIsmGroup < +inf -inf * > -5 } \\", +" 1 \\", +" }", +"", +" *wcsOpts.label:", +" *wcsOpts.width: 265", +" *wcsOpts.height: 40", +" *wcsOpts.outerOffset: 3", +" *wcsOpts.innerOffset: 3", +" *woLayout*TextToggle.frameWidth: 0", +" *woLayout*TextToggle.onIcon: square1s", +" *woLayout*TextToggle.offIcon: square0s", +" *woLayout*TextToggle.highlightColor: cyan", +" *woLayout*TextToggle.alignment: left", +" *woLayout*TextToggle.leftMargin: 5", +" *woLayout.layout: horizontal { \\", +" 3 \\", +" woptLabels < +inf -inf * > 2 \\", +" woptTitles < +inf -inf * > 2 \\", +" woptFBinfo < +inf -inf * > 2 \\", +" woptBPM < +inf -inf * > \\", +" 3 \\", +" }", +" *woptLabels.label: WCS Labels", +" *woptLabels.on: True", +" *woptTitles.label: Image Titles", +" *woptTitles.on: True", +" *woptFBinfo.label: Frame Buffer Info", +" *woptFBinfo.on: True", +" *woptBPM.label: BPM Data", +" *woptBPM.on: False", +" *woptLabels.location: 0 0 150 21", +" *woptTitles.location: 0 0 150 21", +" *woptFBinfo.location: 0 0 175 21", +" *woptBPM.location: 0 0 120 21", +"", +"", +" *wcsCoords.label: Readout Values", +" *wcsCoords.width: 265", +" *wcsCoords.height: 135", +" *wcsCoords.outerOffset: 7", +" *wcsCoords.innerOffset: 3", +" *wcLayout*TextToggle.offIcon: diamond0s", +" *wcLayout*TextToggle.onIcon: diamond1s", +" *wcLayout*TextToggle.highlightColor: yellow2", +" *wcLayout*TextToggle.shrinkToFit: True", +" *wcLayout*TextToggle.frameWidth: 0", +" *wcLayout*TextToggle.label:", +" *wcLayout*TextToggle.on: True", +" *wcLayout*Label.justify: right", +" *wcLayout*Label.font: 7x13bold", +" *wcLayout*SimpleMenu.borderColor: black", +" *wcLayout*SimpleMenu.borderWidth: 1", +" *wcLayout*SimpleMenu.foreground: White", +" *wcLayout*SimpleMenu.background: SteelBlue", +" *wcLayout*MenuButton.shadowWidth: 1", +" *wcLayout*MenuButton.resize: False", +" *wcLayout.layout: vertical {\\", +" 1 \\", +" horizontal { 20 < -20 > wcTitle < +inf -inf * > 20 < -20 > }\\", +" 1 \\", +" horizontal { 5 wcLine < +inf -inf * > 5 } \\", +" 5 \\", +" horizontal { \\", +" 10 \\", +" vertical { 2 wlWcs1 2 wlWcs2 2 wlWcs3 2 wlWcs4 2 } 5 \\", +" vertical { 1 sysWcs1 1 sysWcs2 1 sysWcs3 1 sysWcs4 1 } 5 \\", +" vertical { 1 fmtWcs1 1 fmtWcs2 1 fmtWcs3 1 fmtWcs4 1 } 20 \\", +" vertical { 1 wpWcs1 3 wpWcs2 3 wpWcs3 3 wpWcs4 3 } 20 \\", +" vertical { 1 wiWcs1 3 wiWcs2 3 wiWcs3 3 wiWcs4 3 } 15 \\", +" } \\", +" 3 \\", +" }", +" *wcTitle.label: Type\\ \\ \\ \\ \\ \\ \\ \\ \\ \\ Format\\ \\ \\ \\ \\ \\ Panel\\ ImgWin", +"", +" *wcLine.height: 2", +" *wcLine.frameWidth: 2", +" *wcLine.frameType: ledged", +"", +" *wlWcs1.label: First WCS", +" *wlWcs2.label: Second WCS", +" *wlWcs3.label: Third WCS", +" *wlWcs4.label: Fourth WCS", +" *sysWcs1.label: \\ Image Display\\ ", +" *sysWcs1.menuName: sysMenu1", +" *sysWcs2.label: None", +" *sysWcs2.menuName: sysMenu2", +" *sysWcs3.label: None", +" *sysWcs3.menuName: sysMenu3", +" *sysWcs4.label: None", +" *sysWcs4.menuName: sysMenu4", +" *fmtWcs1.label: \\ Sexigesimal\\ ", +" *fmtWcs1.menuName: fmtMenu1", +" *fmtWcs2.label: None", +" *fmtWcs2.menuName: fmtMenu2", +" *fmtWcs3.label: None", +" *fmtWcs3.menuName: fmtMenu3", +" *fmtWcs4.label: None", +" *fmtWcs4.menuName: fmtMenu4", +"", +" *editMenu fmtWcsMenu$i fmtWcs$i $items", +"", +" *wcsIsmGroup.label:", +" *wcsIsmGroup.width: 395", +" *wcsIsmGroup.height: 50", +" *wcsIsmGroup.outerOffset: 3", +" *wcsIsmGroup.innerOffset: 5", +" *wcsIsmGroup*borderWidth: 0", +" *wcsIsmLayout.layout: horizontal { \\", +" wcsIsmLabel 1 wcsIsmFrame < +inf -inf * > 3 wcsIsmInit 1 \\", +" }", +" *wcsIsmLabel.label: ISM Command", +" *wcsIsmFrame.frameType: sunken", +" *wcsIsmFrame.frameWidth: 1", +" *wcsIsmFrame.outerOffset: 1", +" *wcsIsmFrame*height: 23", +" *wcsIsmCmd*editType: edit", +" *wcsIsmCmd.displayCaret: True", +" *wcsIsmInit.label: Initialize", +" *wcsIsmInit.internalWidth: 7", +"", +" *wcsBox*borderWidth: 0", +" *wcsBox*TextToggle.frameType: raised", +" *wcsBox*TextToggle.frameWidth: 1", +" *wcsBox*TextToggle.leftMargin: 2", +" *wcsBox*borderWidth: 0", +" *wcsBox.layout: vertical { \\", +" wcsFrame < +inf -inf * > \\", +" 2 \\", +" horizontal { \\", +" 2 \\", +" ismToggle < +inf -inf * > 2 \\", +" pixelTable < +inf -inf * > 2 \\", +" imageHeader < +inf -inf * > 2 \\", +" compass < +inf -inf * > 2 \\", +" wcsOptions < +inf -inf * > \\", +" 2 \\", +" } \\", +" }", +" *ismToggle.label: ISM Mod", +" *ismToggle.label: WCS/Pix", +" *pixelTable.label: Pix Table", +" *imageHeader.label: Header", +" *imageHeader.sensitive: False", +" *compass.label: Compass", +" *wcsOptions.label: Options", +"", +" *wcsGroup.label:", +" *wcsGroup.outerOffset: 0", +" *wcsGroup.innerOffset: 5", +" *wcsGroup.frameType: chiseled", +" *wcsGroup.frameWidth: 2", +" *wcsGroup*Text*width: 260", +" *wcsGroup*Text*height: 17", +" *wcsGroup*Text*font: 7x13", +" *wcsGroup*Text*displayCaret: False", +" *wcsGroup*Text*editType: read", +" *wcsGroup*Text*background: black", +" *wcsGroup*Text*foreground: yellow2", +" *wcsGroup*TextToggle.highlightColor: cyan", +" *wcsFrame.frameType: sunken", +" *wcsFrame.frameWidth: 1", +" *wcsText*background: yellow4", +" *wcsText.layout: vertical { \\", +" wtName < +inf -inf * > -3 \\", +" wtTitle < +inf -inf * > -3 \\", +" wtFBCfg < +inf -inf * > \\", +" 1 < -1 > \\", +" wtWcs1 < +inf -inf * > -3 \\", +" wtWcs2 < +inf -inf * > -3 \\", +" wtWcs3 < +inf -inf * > -3 \\", +" wtWcs4 < +inf -inf * > \\", +" 1 < -1 > \\", +" horizontal { \\", +" wtIPixval < +inf -inf * +inf > 1 \\", +" wtSPixval < +inf -inf * +inf > 1 \\", +" wtBPixval < +inf -inf * +inf > \\", +" } \\", +" }", +"}", +"", +"", +"set Resources(blink_panel) { \\", +"", +" *blink_panel.geometry: 425x200", +" *blink_panel.title: Blink/Register Frames", +"", +" *brMenuBar*Command.internalHeight: 4", +" *brMenuBar*Command.internalWidth: 12", +" *brMenuBar*Command.height: 27", +" *brMenuBar*borderWidth: 0", +"", +" *brMenuBar*Label.font: 7x13bold", +" *brLayout*Command.font: -*-helvetica-medium-r-normal-*-12-*-iso8859-1", +" *brRegButton.font: -*-helvetica-medium-r-normal-*-12-*-iso8859-1", +" *brReset.font: -*-helvetica-medium-r-normal-*-12-*-iso8859-1", +" *brMatchButton.font: -*-helvetica-medium-r-normal-*-12-*-iso8859-1", +" *brBlinkButton.font: -*-helvetica-medium-r-normal-*-12-*-iso8859-1", +" *brAregButton.font: -*-helvetica-medium-r-normal-*-12-*-iso8859-1", +"", +"", +" *brMenuBar.layout: vertical { \\", +" 5 < -5 > \\", +" horizontal { 10 < +inf -10> brClose 5 } \\", +" 5 < -5 > \\", +" }", +" *brClose.label: Dismiss", +"", +" *brMenuFrame.frameType: raised", +" *brMenuFrame.frameWidth: 2", +" *bpLayout.layout: vertical { \\", +" brMenuFrame < +inf -inf * > \\", +" 1 < -1 > \\", +" brFrame < +inf -inf * +inf -inf > \\", +" }", +"", +" *brFrame.frameType: chiseled", +" *brFrame.frameWidth: 2", +" *brFrame.outerOffset: 4", +" *brFrame.innerOffset: 4", +"", +" *brLayout.borderWidth: 0", +" *brLayout.layout: vertical { \\", +" 3 < -3 > \\", +" horizontal { -3 brFramesG < +inf -inf * > -3 } \\", +" -5 \\", +" horizontal { -3 brCmdG < +inf -inf * +inf -inf > -3 } \\", +" -5 \\", +" }", +"", +" *brCmdG.label:", +" *brCmdG.outerOffset: 7", +" *brCmdG.innerOffset: 7", +" *brCmdG*borderWidth: 0", +" *brCmd.layout: horizontal { \\", +" 2 \\", +" vertical { \\", +" 2 \\", +" horizontal { \\", +" 2 \\", +" brRateLabel \\", +" 2 \\", +" brBRframe < +inf -inf * >\\", +" 4 \\", +" brReset \\", +" 2 \\", +" } \\", +" 8 < -8 > \\", +" horizontal { \\", +" 4 \\", +" brMatchButton < +inf -inf * > \\", +" 5 < -5 > \\", +" brRegButton < +inf -inf * > \\", +" 2 \\", +" } \\", +" 1 < +inf > \\", +" } \\", +" 10 \\", +" vertical { \\", +" 2 \\", +" brBlinkButton < +inf * > \\", +" 10 < -10 > \\", +" brAregButton < +inf * > \\", +" 1 < +inf > \\", +" } \\", +" 2 \\", +" }", +"", +" *brFramesG.label: Frames List", +" *brFramesG.outerOffset: 7", +" *brFramesG.innerOffset: 7", +" *brFramesG*SimpleMenu.borderColor: black", +" *brFramesG*SimpleMenu.borderWidth: 1", +" *brFramesG*SimpleMenu.foreground: White", +" *brFramesG*SimpleMenu.background: SteelBlue", +"", +" *brFrames.borderWidth: 0", +" *brFrames.layout: horizontal { \\", +" 5 < +inf > \\", +" brFrame1 < +inf * > 1 \\", +" brFrame2 < +inf * > 1 \\", +" brFrame3 < +inf * > 1 \\", +" brFrame4 < +inf * > 1 \\", +" brFrame5 < +inf * > 1 \\", +" brFrame6 < +inf * > 1 \\", +" brFrame7 < +inf * > 1 \\", +" brFrame8 < +inf * > 1 \\", +" brFrame9 < +inf * > 1 \\", +" brFrame10 < +inf * > 1 \\", +" brFrame11 < +inf * > 1 \\", +" brFrame12 < +inf * > 1 \\", +" brFrame13 < +inf * > 1 \\", +" brFrame14 < +inf * > 1 \\", +" brFrame15 < +inf * > 1 \\", +" brFrame16 < +inf * > \\", +" 5 < +inf > \\", +" }", +"", +" *brBRlayout.layout: horizontal { \\", +" brBRdecrease \\", +" brBRtext < +inf -100% * > \\", +" brBRincrease \\", +" }", +"", +" *blink_panel*TextToggle.location: 0 0 110 23", +" *blink_panel*TextToggle.frameWidth: 1", +" *blink_panel*TextToggle.highlightColor: yellow", +" *blink_panel*TextToggle.offIcon: square0s", +" *blink_panel*TextToggle.onIcon: square1s", +" *blink_panel*TextToggle.outerOffset: 0", +" *blink_panel*TextToggle.innerOffset: 2", +" *blink_panel*Command.height: 23", +" *blink_panel*Arrow.width: 16", +" *blink_panel*Arrow.height: 20", +"", +"", +" *brFramesLabel.label: Frames:", +" *brFrame1.menuName: frame1Menu", +" *brFrame2.menuName: frame2Menu", +" *brFrame3.menuName: frame3Menu", +" *brFrame4.menuName: frame4Menu", +" *brFrame5.menuName: frame5Menu", +" *brFrame6.menuName: frame6Menu", +" *brFrame7.menuName: frame7Menu", +" *brFrame8.menuName: frame8Menu", +" *brFrame9.menuName: frame9Menu", +" *brFrame10.menuName: frame10Menu", +" *brFrame11.menuName: frame11Menu", +" *brFrame12.menuName: frame12Menu", +" *brFrame13.menuName: frame13Menu", +" *brFrame14.menuName: frame14Menu", +" *brFrame15.menuName: frame15Menu", +" *brFrame16.menuName: frame16Menu", +" *brReset.label: Reset", +"", +" *brRateLabel.label: Rate:", +" *brBRframe.frameType: sunken", +" *brBRframe.frameWidth: 1", +" *brBRtext.width: 40", +" *brBRtext.height: 23", +" *brBRdecrease.direction: left", +" *brBRincrease.direction: right", +" *brRegButton.label: Register", +" *brMatchButton.label: Match LUTs", +" *brBlinkButton.label: Blink", +" *brAregButton.label: Auto-Register", +"}", +"", +"", +"set Resources(hdr_panel) { \\", +"", +" *hdr_panel.geometry: 550x600", +" *hdr_panel.title: Image Header", +"", +" *hdr_panel*SimpleMenu.borderColor: black", +" *hdr_panel*SimpleMenu.borderWidth: 1", +" *hdr_panel*SimpleMenu.foreground: White", +" *hdr_panel*SimpleMenu.background: SteelBlue", +"", +" *hdrMenuFrame.frameType: raised", +" *hdrMenuFrame.frameWidth: 2", +" *hdrLayout.layout: vertical { \\", +" hdrMenuFrame < +inf -inf * > \\", +" hdrObjGroup < +inf -inf * > \\", +" hdrTabFrame < +inf -inf * +inf -inf> \\", +" }", +"", +" *hdrMenuBar*borderWidth: 0", +" *hdrMenuBar*Command.internalHeight: 5", +" *hdrMenuBar*Command.internalWidth: 12", +" *hdrMenuBar.layout: vertical { \\", +" 5 < -5 > \\", +" horizontal { 10 < +inf -10> hdrClose 7 } \\", +" 5 < -5 > \\", +" }", +" *hdrClose.label: Dismiss", +"", +" *hdrObjGroup.label:", +" *hdrObjGroup.outerOffset: 7", +" *hdrObjGroup.innerOffset: 4", +" *hdrObjLayout.borderWidth: 0", +" *hdrObjLayout.layout: vertical { \\", +" horizontal { hdrObjLabel 2 hdrObjMenu < +inf -inf * > 2 } \\", +" }", +" *hdrObjLabel.label: Image Name:", +" *hdrObjMenu.label:", +" *hdrObjMenu.justify: left", +" *hdrObjMenu.font: 7x13", +" *hdrObjMenu.menuName: objMenu", +" *hdrObjMenu.internalWidth: 5", +" *hdrObjMenu.internalHeight: 1", +" *hdrObjMenu.shadowWidth: 1", +"", +" *hdrHdrGroup.tabLabel: Image Header", +" *hdrHdrGroup.label:", +" *hdrHdrGroup.outerOffset: 7", +" *hdrHdrGroup.innerOffset: 5", +" *hdrHdrLayout.borderWidth: 0", +" *hdrHdrLayout.layout: vertical { \\", +" horizontal { \\", +" hdrFilter 2 hFindFrame < +inf -inf * > 2 hdrFind 1 hdrClear \\", +" } \\", +" 5 \\", +" hdrText < +inf -inf * +inf -inf > \\", +" }", +" *hFindEntry*editType: edit", +" *hFindEntry*font: 7x13", +" *hFindEntry*displayCaret: True", +" *hFindEntry*width: 150", +" *hFindFrame.frameWidth: 1", +" *hFindFrame*borderWidth: 0", +" *hFindFrame.frameType: sunken", +" *hFindFrame.width: 150", +" *hFindFrame.height: 23", +" *hdrFilter.label: Keyword Filter", +" *hdrFind.label: Search", +" *hdrClear.label: Clear", +"", +" ! Resources if the header text widget is AsciiText", +"! *hdrText*scrollVertical: Always", +"! *hdrText*scrollHorizontal: Always", +"! *hdrText*editType: edit", +"! *hdrText*font: 7x13", +"! *hdrText*background: #c4c4c4", +"! *hdrText*displayCaret: False", +"! *hdrText*bottomMargin: 10", +"! *hdrText*Scrollbar.width: 15", +"! *hdrText*Scrollbar.height: 15", +"", +" ! Resources if the header text widget is HTML", +" *hdrText.width: 600", +" *hdrText.height: 500", +" *hdrText.anchorUnderlines: 1", +" *hdrText.visitedAnchorUnderlines: 1", +" *hdrText.verticalScrollOnRight: True", +" *hdrText.plainFont: 7x13", +" *hdrText.marginWidth: 5", +" *hdrText.marginHeight: 5", +"", +"", +" *hdrWcsGroup.tabLabel: Image WCS Info", +" *hdrWcsGroup.label:", +" *hdrWcsGroup.outerOffset: 5", +" *hdrWcsGroup.innerOffset: 5", +" *hdrWcsGroup*Text*scrollVertical: whenNeeded", +" *hdrWcsGroup*Text*scrollHorizontal: whenNeeded", +" *hdrWcsGroup*Text*editType: edit", +" *hdrWcsGroup*Text*displayCaret: False", +" *hdrWcsGroup*Text*borderWidth: 0", +" *hdrWcsGroup*Text*editType: edit", +" *hdrWcsGroup*Text*font: 7x13", +" *hdrWcsGroup*Text*Scrollbar.width: 15", +" *hdrWcsGroup*Text*Scrollbar.height: 15", +" *hdrWcsLayout.borderWidth: 0", +" *hdrWcsLayout.layout: vertical { \\", +" 2 < -2 > \\", +" hdrInfoGroup < +inf -inf * > \\", +" 2 < -2 > \\", +" hdrKeywGroup < +inf -inf * +inf -inf > \\", +" -4 \\", +" }", +" *hdrInfoGroup.label: Basic WCS Information", +" *hdrInfoGroup.outerOffset: 7", +" *hdrInfoGroup.innerOffset: 0", +" *hdrIGFrame.frameType: sunken", +" *hdrIGFrame.frameWidth: 1", +" *hdrIGText.height: 130", +"! *hdrIGText*background: black", +"! *hdrIGText*foreground: yellow2", +" *hdrIGText*background: #adadad", +" *hdrIGText*foreground: black", +" *hdrWcsGroup*hdrIGText*scrollVertical: never", +" *hdrWcsGroup*hdrIGText*scrollHorizontal: never", +" *hdrWcsGroup*hdrIGText*font: 7x13", +" *hdrKeywGroup.label: WCS Header Keywords", +" *hdrKeywGroup.outerOffset: 7", +" *hdrKeywGroup.innerOffset: 5", +" *hdrKGFrame.frameType: sunken", +" *hdrKGFrame.frameWidth: 1", +" *hdrKGText*background: #c4c4c4", +" *hdrKGText*bottomMargin: 10", +"", +" *hdrIGText*background: #c4c4c4", +" *hdrIGFrame.frameWidth: 0", +"}", +"", +"", +"set Resources(pixel_table) { \\", +"", +" *pixel_panel.title: Image Pixel Table", +" *pixel_panel*SimpleMenu.borderWidth: 1", +" *pixel_panel*SimpleMenu.borderColor: black", +" *pixel_panel*SimpleMenu.foreground: White", +" *pixel_panel*SimpleMenu.background: SteelBlue", +"", +" *pixtabMenuBar*borderWidth: 0", +" *pixtabMenuBar*Command.internalHeight: 4", +" *pixtabMenuBar*Command.internalWidth: 12", +" *pixtabMenuBar.layout: vertical { \\", +" 5 \\", +" horizontal { \\", +" 5 \\", +" pixtabSize 10 < +inf -10> pixtabHelp 5 pixtabClose \\", +" 7 \\", +" } \\", +" 5 \\", +" }", +" *pixtabSize.label: Size", +" *pixtabSize.menuName: pixtabMenu", +" *pixtabHelp.label: Help", +" *pixtabHelp.sensitive: False", +" *pixtabClose.label: Dismiss", +"", +" *pixtabMenuFrame.frameType: raised", +" *pixtabMenuFrame.frameWidth: 2", +" *pixel_table.layout: vertical { \\", +" 1 \\", +" pixtabMenuFrame < +inf -inf * > \\", +" 1 \\", +" pixtabFrame < +inf -inf * +inf -inf > \\", +" 1 \\", +" }", +" ", +"", +" *pixtabFrame.frameType: raised", +" *pixtabFrame.frameWidth: 0", +" *pixtabFrame*borderWidth: 0", +" *pixtabFrame*font: 6x10", +" *pixtabFrame*MultiList.font: -*-helvetica-medium-r-normal-*-10-*", +" *pixtabFrame*Label.font: -*-helvetica-medium-r-normal-*-10-*", +" *pixtabFrame*TextToggle.font: -*-helvetica-medium-r-normal-*-10-*", +"", +" *pixtabFrame*MultiList.forceColumns: True", +" *pixtabFrame*MultiList.defaultColumns: 5", +" *pixtabFrame*MultiList.shadeSurplus: False", +" *pixtabFrame*MultiList.borderWidth: 0", +" *pixtabFrame*MultiList.rowHeight: 25", +" *pixtabFrame*MultiList.rowSpacing: 7", +" *pixtabFrame*MultiList.internalWidth: 7", +" *pixtabFrame*MultiList.internalHeight: 4", +" *pixtabFrame*MultiList.width: 410", +" *pixtabFrame*MultiList.height: 160", +" *pixtabFrame*MultiList.columnWidth: 50", +" *pixtabFrame*MultiList.columnSpacing: 2", +" *pixtabFrame*MultiList.maxSelectable: 1", +" *pixtabFrame*MultiList.highlightForeground: red", +" *pixtabFrame*MultiList.highlightBackground: #c4c4c4", +" *pixtabFrame*MultiList.background: #c4c4c4", +" *pixtabFrame*TextToggle.background: #c4c4c4", +"", +" *pixtabFrame*Label.width: 00", +" !*pixtabFrame*Label.resize: False", +"", +" *meanFrame.frameWidth: 2", +" *meanFrame.frameType: chiseled", +" *meanFrame.outerOffset: 0", +" *meanFrame.width: 120", +" *meanLabel.label: Mean:", +" *meanValue.label:", +" *meanValue.resize: False", +"", +" *sigFrame.frameWidth: 2", +" *sigFrame.frameType: chiseled", +" *sigFrame.outerOffset: 0", +" *sigFrame.width: 120", +" *sigLabel.label: Stdev:", +" *sigValue.label:", +" *sigValue.resize: False", +"", +" *ptColFrame.frameWidth: 0", +" *ptColFrame.outerOffset: 0", +" *ptRowFrame.frameWidth: 0", +" *ptRowFrame.outerOffset: 0", +"", +" *pixtabFrame*ptColLabs.width: 410", +" *pixtabFrame*ptColLabs.height: 23", +" *pixtabFrame*ptColLabs.defaultColumns: 5", +" *pixtabFrame*ptColLabs.forceColumns: True", +" *pixtabFrame*ptColLabs.columnWidth: 50", +" *pixtabFrame*ptColLabs.columnSpacing: 2", +" *pixtabFrame*ptRowLabs.width: 60", +" *pixtabFrame*ptRowLabs.height: 110", +" *pixtabFrame*ptRowLabs.defaultColumns: 1", +" *pixtabFrame*ptRowLabs.forceColumns: True", +" *pixtabFrame*ptRowLabs.verticalList: True", +" *pixtabFrame*ptRowLabs.columnWidth: 50", +" *pixtabFrame*ptRowLabs.columnSpacing: 2", +" *pixtabFrame*pixtab.verticalList: True", +"", +" *ptFrame.outerOffset: 0", +" *ptFrame.innerOffset: 0", +" *ptFrame.borderWidth: 0", +" *ptFrame.frameWidth: 1", +" *ptFrame.frameType: sunken", +" *ptLayout.layout: vertical { \\", +" 3 \\", +" horizontal { 65 ptColFrame < +inf -inf * > 5 } \\", +" 1 \\", +" horizontal { \\", +" vertical { ptRowFrame< * +inf -inf > 5 } \\", +" 1 \\", +" vertical { ptFrame } \\", +" 5 \\", +" } \\", +" 1 \\", +" horizontal { \\", +" 2 < +inf > \\", +" meanLabel meanFrame < +inf -inf * > 2 \\", +" sigLabel sigFrame < +inf -inf * > \\", +" 10 \\", +" } \\", +" }", +"}", +"", +"", +"set Resources(help_panel) { \\", +"", +" !----------------------", +" ! Help panel resources.", +" !----------------------", +" *help_panel.title: XImtool Help Summary", +" *help_panel.width: 500", +" *help_panel.height: 550", +" *helpLayout*borderWidth: 0", +" *helpLayout*Command.internalHeight: 4", +" *helpLayout*Command.internalWidth: 12", +" *helpLayout*HTML*shadowWidth: 1", +" *helpLayout*helpText*Scrollbar.shadowWidth: 1", +"", +" *helpMenuGroup.label: ", +" *helpMenuGroup.height: 45", +" *helpMenuGroup.outerOffset: 0", +" *helpMenuGroup.innerOffset: 0", +" *helpMenuGroup.frameType: raised", +" *helpMenubar.layout: vertical { \\", +" 5 < -5 > \\", +" horizontal { 20 < +inf -20 > helpClose 7 } \\", +" 5 < -5 > \\", +" }", +" *helpBack.label: Back", +" *helpBack.sensitive: False", +" *helpForward.label: Forward", +" *helpForward.sensitive: False", +" *helpHome.label: Home", +" *helpClose.label: Dismiss", +"", +"", +" *hfEntry*editType: edit", +" *hfEntry*font: 7x13", +" *hfEntry*displayCaret: True", +" *hfFrame.frameWidth: 1", +" *hfFrame.frameType: sunken", +" *hfFrame.width: 250", +" *hfFind.label: Search", +" *hfFind.shadowWidth: 1", +" *hfClear.label: Clear", +" *hfClear.shadowWidth: 1", +"", +" *helpLayout.layout: vertical { \\", +" -1 \\", +" horizontal { helpMenuGroup < +inf -inf * > } \\", +" 5 \\", +" horizontal { \\", +" 5 \\", +" helpBack 2 helpForward 2 helpHome \\", +" 20 < +inf -20 > \\", +" hfFrame < +inf -inf * > 3 hfFind 1 hfClear \\", +" 5 \\", +" } \\", +" 5 \\", +" horizontal { helpTextFrame < +inf -inf * +inf -inf > } \\", +" horizontal { helpInfoLayout < +inf -inf * > } \\", +" -1 \\", +" }", +" *helpTextFrame.frameWidth: 1", +" *helpTextFrame.frameType: sunken", +" *helpText.width: 600", +" *helpText.height: 500", +" *helpText.anchorUnderlines: 1", +" *helpText.visitedAnchorUnderlines: 1", +" *helpText.verticalScrollOnRight: true", +" *helpText*Scrollbar.shadowWidth: 1", +" *helpText.plainFont: -adobe-courier-medium-r-normal-*-12-*-*-*-*-*-*-*", +" *helpText.plainboldFont: -adobe-courier-bold-r-normal-*-12-*-*-*-*-*-*-*", +" *helpText.plainitalicFont: -adobe-courier-medium-o-normal-*-12-*-*-*-*-*-*-*", +"! *helpText.boldFont: 6x12bold", +"", +"", +" ! Contact info at the bottom of the panel.", +" *helpInfoLayout*Label.justify: center", +" *helpInfoLayout*Label.internalHeight: 0", +" *helpInfoLayout.layout: horizontal { \\", +" 5 \\", +" vertical { 5 helpIRAFLogo 5 } \\", +" 1 < +inf > \\", +" vertical { \\", +" 5 \\", +" helpInfo1 < +inf -inf * +inf -inf > \\", +" helpInfo2 < +inf -inf * +inf -inf > \\", +" helpInfo3 < +inf -inf * +inf -inf > \\", +" 5 \\", +" } \\", +" 1 < +inf > \\", +" vertical { 5 helpNOAOLogo 5 } \\", +" 5 \\", +" }", +" *helpInfo1.label: XIMTOOL_VERSION", +" *helpInfo2.label: For help or questions: http://iraf.net", +" *helpInfo3.label: \\", +" NOAO is operated by AURA under cooperative agreement with the NSF", +"", +" *helpInfoLayout*helpInfo1.font: -*-helvetica-medium-r-normal-*-12-*-*-*", +" *helpInfoLayout*helpInfo2.font: -*-helvetica-medium-r-normal-*-12-*-*-*", +" *helpInfoLayout*helpInfo3.font: -*-helvetica-medium-r-normal-*-10-*-*-*", +"", +" *helpInfoLayout.helpIRAFLogo.internalWidth: 0", +" *helpInfoLayout.helpIRAFLogo.internalHeight: 0", +" *helpInfoLayout.helpIRAFLogo.foreground: SteelBlue", +" *helpInfoLayout.helpIRAFLogo.background: white", +" *helpInfoLayout.helpNOAOLogo.internalWidth: 0", +" *helpInfoLayout.helpNOAOLogo.internalHeight: 0", +" *helpInfoLayout.helpNOAOLogo.foreground: SteelBlue", +" *helpInfoLayout.helpNOAOLogo.background: white", +"}", +"", +"set Resources(tcl_panel) { \\", +"", +" !--------------------------------", +" ! Define a debug Tcl shell.", +" !--------------------------------", +" *tcl_panel.width: 550", +" *tcl_panel.height: 180", +" *tcl_panel.title: Debug TCL Command Entry", +" *tclLayout*borderWidth: 0", +" *tclLayout*Frame.frameType: sunken", +" *tclLayout*Frame.frameWidth: 2", +" *tclLayout.layout: vertical { \\", +" 0 < +0 -0 > \\", +" tclCmdGroup < +inf -inf * > \\", +" tclFrame < +inf -inf * +inf -inf> \\", +" 0 < +0 -0 > \\", +" }", +" *tclEntry*foreground: black", +" *tclEntry*editType: edit", +" *tclEntry*type: string", +" *tclEntry*font: 7x13", +" *tclEntry*scrollVertical: Always", +" *tclEntry*scrollHorizontal: whenNeeded", +"", +" *tclCmdGroup.label: ", +" *tclCmdGroup.outerOffset: 0", +" *tclCmdGroup.innerOffset: 0", +" *tclCmd.layout: vertical { \\", +" 5 \\", +" horizontal { \\", +" 5 \\", +" tclClear 3 \\", +" tclExecute \\", +" 10 < +inf -10> \\", +" tclDismiss \\", +" 5 \\", +" } \\", +" 5 \\", +" }", +" *tclClear.label: Clear", +" *tclExecute.label: Execute", +" *tclDismiss.label: Dismiss", +"}", +"", +"", +"set Resources(warning) { \\", +"", +" ! ---------------------", +" ! WARNING dialog.", +" ! ---------------------", +" *warning.geometry: +400+300", +" *warning*borderWidth: 0", +" *warning*TextBox.frameWidth: 0", +"", +" *warn.layout: vertical { \\", +" 5 < -5 > \\", +" horizontal { 5 warnFrame < +inf * +inf > 5 } \\", +" 5 < -5 > \\", +" horizontal { \\", +" 10 \\", +" warnOk < +inf * > \\", +" 5 < +inf -5 > \\", +" warnCancel < +inf * > \\", +" 10 \\", +" } \\", +" 5 < -5 > \\", +" }", +" *warnOk.label: Okay", +" *warnCancel.label: Cancel", +"", +" *WFlayout.layout: horizontal { \\", +" 5 < -5 > \\", +" vertical { 5 < +inf -5 > warnIcon 5 < +inf -5 > } \\", +" 5 < -5 > \\", +" warnText < +inf -inf * +inf -inf > \\", +" 5 < -5 > \\", +" }", +"", +" *warnLabel.label: Warning", +" *warnLabel.width: 300", +" *warnLabel.height: 20", +" *warnFrame.frameType: sunken", +" *warnFrame.frameWidth: 2", +" *warnIcon.location: 0 0 40 40", +" *warnIcon.image: WARNING", +" *warnText.label: generic warning text", +" *warnText.width: 270", +" *warnText.height: 60", +" *warnText.background: #c4c4c4", +"}", +"", +"", +"", +"", +"set Resources(gui) { \\", +"", +" ! GUI resources.", +" ! ------------------------------", +" *autoscale: True", +" *zoomfactors: 1 2 4 8", +" *displayCoords: True", +" *displayPanner: True", +" *displayMagnifier: False", +" *blinkRate: 1.0", +" *pannerArea: 150*150", +" *pannerGeom: -5+5", +" *magnifierArea: 100*100", +" *magnifierGeom: +5+5", +" *wcsboxGeom: -5-5", +" *maxContrast: 5.0", +" *showToolBar: False", +" *showPanelBar: False", +" *warnings: True", +" *centerBoxSize: 5", +" *peakCentroid: True", +"}", +"", +"", +"", +"", +"", +"################################################################################", +"# GUI Bootstrap Procedures", +"################################################################################", +"", +"# Initialize the widget tree.", +"proc InitWidgetTree args \\", +"{", +" global Objects Resources Version", +"", +"", +" # Add a new objects description for each of the panels found so we can", +" # create them by name later rather that with the defaults.", +"", +" set guiResources \"\"", +" foreach obj [array names Objects] {", +" set guiResources \\", +" [ format \"%s\\n\\n*%s_objects:%s\\n\" \\", +" $guiResources $obj $Objects($obj) ]", +" }", +"", +" # Now append all the Resource strings, changing any version strings as", +" # needed.", +"", +" foreach res [array names Resources] {", +" regsub -all XIMTOOL_VERSION $Resources($res) $Version ver", +" set guiResources [ format \"%s\\n\\n%s\\n\\n\" $guiResources $ver ]", +" }", +"", +" # Define all of the GUI objects and resources.", +" appInitialize ximtool XImtool $guiResources", +"}", +"", +"", +"# Realize a window module, i.e. create it's objects.", +"proc Realize { module args } \\", +"{", +" global Objects", +"", +" # Create any widgets for the module. We only do this once and set a", +" # flag to indicate the objects have been created so we don't do it on", +" # subsequent realizations.", +" if { [info exists Objects($module)] } {", +" createObjects [format \"%s_objects\" $module]", +" reset-server", +" }", +"}", +"", +"", +"# Bootstrap up the GUI.", +"InitWidgetTree", +"Realize ximtool", +"Realize parameters", +"Realize panelShell", +"Realize tcl_panel", +"Realize pixel_table", +"Realize hdr_panel", +"Realize blink_panel", +"Realize help_panel", +"Realize xpan_panel", +"Realize xmag_panel", +"Realize warning", +"", +"reset-server", +"", +"# Set the gterm widget focus.", +"send colorbar setGterm ; send colorbar activate", +"send imagewin setGterm ; send imagewin activate", +"", +"# Crank it up.", +"activate", +"", +"", +"", +"", +"##############################################################################", +"# Utility Procedures.", +"##############################################################################", +"", +"# Utility procedure to test True/False strings in resources.", +"proc true {v} {expr {$v == \"true\" || $v == \"True\" || $v == \"TRUE\"}}", +"", +"# Utility functions.", +"proc min {a b} { expr {($a < $b) ? $a : $b} }", +"proc max {a b} { expr {($a > $b) ? $a : $b} }", +"", +"# Global variables.", +"set version \"NOAO/IRAF XImtool Version 2.0BETA\"", +"", +"set winWidth [send imagewin get width ] ;# display window width", +"set winHeight [send imagewin get height] ;# display window height", +"set appWidth [send display get width ] ;# application window width", +"set appHeight [send display get height] ;# application window height", +"set marker none ;# selected marker", +"set markno 0 ;# used to name new markers", +"set ruler none ;# selected ruler", +"set ruleno 0 ;# used to name new rulers", +"set blinkFrames \"1 2\" ;# list of blink frames", +"set auto_reg 0", +"", +"set panel_up 0 ;# control panel mapped", +"set help_up 0 ;# help panel mapped", +"set ism_enable 0 ;# ISM is running", +"set ism_capable 1 ;# Client is ISM capable", +"set frameCache(0) \"\" ;# ISM frame cache", +"", +"set ctype \"equatorial\" ;# default coord type", +"set eqtype \"fk5\" ;# default equatorial type", +"", +"# Global constants.", +"set MAX_FRAMES 16 ;# max frame buffers", +"", +"# TCL constants", +"set tcl_precision 8", +"", +"", +"", +"# Window resize callbacks.", +"proc winResize {w width height} { ", +" global winWidth winHeight", +"", +" if {$width <= 1 || $height <= 1} \\", +" return", +"", +" set winWidth $width", +" set winHeight $height ", +"} ; send imagewin addCallback winResize resize", +"", +"proc appResize {w width height} \\", +"{", +" global doHcut doVcut cutXPos cutYPos", +" global appWidth appHeight", +"", +" set appWidth $width", +" set appHeight $height ", +"", +" catch {", +" if {$doHcut} { ", +" send hcutPlot clearScreen", +" hcutInit", +" send hcutAxes1 redraw ; send hcutAxes2 redraw", +" cutPlots $cutXPos $cutYPos ", +" }", +" if {$doVcut} { ", +" send vcutPlot clearScreen", +" vcutInit", +" send vcutAxes1 redraw ; send vcutAxes2 redraw", +" cutPlots $cutXPos $cutYPos ", +" }", +" }", +"} ; #send imagewin addCallback appResize resize", +"", +"", +"", +"# Additional global variables, taking default values from resources.", +"getResources {", +" { zoomfactors }", +" { displayCoords }", +" { displayPanner }", +" { displayMagnifier }", +" { blinkRate }", +" { pannerArea }", +" { pannerGeom }", +" { magnifierArea }", +" { magnifierGeom }", +" { wcsboxGeom }", +" { maxContrast }", +" { showToolBar }", +" { showPanelBar }", +" { warnings }", +" { centerBoxSize }", +" { peakCentroid }", +" { highlight }", +"}", +"", +"set warnings [true $warnings]", +"set defaultBlinkRate $blinkRate", +"", +"# Client state variables (UI parameter objects). Certain of these parameters", +"# we mirror in Tcl variables here, updating the values with a callback when", +"# the parameter value changes. Others require special callbacks.", +"", +"set frame 1 ;# current display frame", +"set nframes 0 ;# number of frame buffers", +"set frames {1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16} ;# list of image frames", +"set frameWidth 0 ;# frame buffer width, pixels", +"set frameHeight 0 ;# frame buffer height, pixels", +"set frameDepth 8 ;# frame buffer pixel size, bits", +"set cursorMode 0 ;# true when cursor read pending", +"", +"foreach i $frames {", +" set frameZoomX($i) 0 ;# X zoom factor", +" set frameZoomY($i) 0 ;# Y zoom factor", +" set frameCenterX($i) 0 ;# X center of field", +" set frameCenterY($i) 0 ;# Y center of field", +" set frameScaleX($i) 0 ;# X scale factor", +" set frameScaleY($i) 0 ;# Y scale factor", +" set frameOffsetX($i) 0 ;# X register offset", +" set frameOffsetY($i) 0 ;# Y register offset", +" set enhancement($i) none ;# colortable enhancement", +"}", +"", +"", +"#trace variable frameOffsetX w debug_pvar ;# Debug stuff", +"#trace variable frameOffsetY w debug_pvar", +"#trace variable frameZoomX w debug_pvar", +"#trace variable frameZoomY w debug_pvar", +"#trace variable frameScaleX w debug_pvar", +"#trace variable frameScaleY w debug_pvar", +"", +"proc debug_pvar { name element op } \\", +"{", +" if {$element != \"\"} {", +" set name ${name}($element)", +" }", +" upvar $name x", +" puts \"Variable $name set to $x\"", +"}", +"", +"", +"", +"", +"################################################################################", +"# Cut-plot handling routines.", +"################################################################################", +"", +"set doHcut 0", +"set doVcut 0", +"set hstate 0", +"set vstate 0", +"set plotSpeed 1 ; send plotSpeed set on True", +"set curJump 1 ; send curJump set on True", +"set curTrack 1 ; send curTrack set on True", +"", +"set cutXPos [expr \"$winWidth / 2\"]", +"set cutYPos [expr \"$winHeight / 2\"]", +"set cutXScale 1.0", +"set cutYScale 1.0", +"", +"", +"", +"# Change the cursor to the crosshair when in the plot", +"proc cutCursor { widget event args } \\", +"{", +" global doHcut doVcut curTrack", +"", +" if {! $curTrack} \\", +" return", +"", +" if { $event == \"enterNotify\" } {", +" send $widget setCursorType ginMode", +"", +" # Disable the update of the graph we're in while in the plot window.", +" if {$widget == \"hcutPlot\"} { set doHcut 0 } else { set doVcut 0 }", +" } elseif { $event == \"leaveNotify\" } {", +" send $widget setCursorType idle", +"", +" # Enable the update of the graph we're leaving.", +" if {$widget == \"hcutPlot\"} { set doHcut 1 } else { set doVcut 1 }", +" }", +" cutPlotRefresh", +"}", +"foreach w {hcutPlot vcutPlot} {", +" send $w addEventHandler cutCursor enterWindowMask", +" send $w addEventHandler cutCursor leaveWindowMask", +"}", +"", +"proc cutPlotRefresh args \\", +"{", +" global doHcut doVcut cutXPos cutYPos", +"", +" if {$doHcut} {", +" send hcutPlot clearScreen", +" hcutInit", +" send hcutAxes1 redraw ; send hcutAxes2 redraw", +" cutPlots $cutXPos $cutYPos", +" }", +" if {$doVcut} {", +" send vcutPlot clearScreen", +" vcutInit", +" send vcutAxes1 redraw ; send vcutAxes2 redraw", +" cutPlots $cutXPos $cutYPos", +" }", +"} ; send imagewin addEventHandler cutPlotRefresh enterWindowMask", +"", +"proc cutPlotRedraw args \\", +"{", +" global doHcut doVcut cutXPos cutYPos", +"", +" if {$doHcut} {", +" send hcutAxes1 redraw ; send hcutAxes2 redraw", +" cutPlots $cutXPos $cutYPos", +" }", +" if {$doVcut} {", +" send vcutAxes1 redraw ; send vcutAxes2 redraw", +" cutPlots $cutXPos $cutYPos", +" }", +"}", +"", +"", +"# Disable the options when we first start up.", +"#send plotOpts \"set height 1 ; set width 1 ; unmap\"", +"foreach w {plotOpts hcutFrame vcutFrame} { send $w unmap }", +"", +"", +"# Cut-Plot options callback.", +"proc doPlotOpts { widget type state args } \\", +"{", +" global plotSpeed curJump curTrack doHcut doVcut", +" global cutXPos cutYPos", +"", +" if {$state} { set not 0 } else { set not 1 }", +"", +" switch $widget {", +" plotSpeed { if {$state} {", +" send plotAccurate set on 0 ; send plotImgPix set on 0", +" } else {", +" send plotSpeed set on True ; ", +" }", +" set plotSpeed $not", +" }", +" plotAccurate { if {$state} {", +" send plotImgPix set on 0 ; send plotSpeed set on 0", +" } else {", +" send plotSpeed set on True ; ", +" }", +" set plotSpeed $not", +" }", +" plotImgPix { if {$state} {", +" send plotAccurate set on 0 ; send plotSpeed set on 0", +" } else {", +" send plotSpeed set on True ; ", +" }", +" set plotSpeed $not", +" }", +" curJump { send curSmooth set on $not ; set curJump $state }", +" curSmooth { send curJump set on $not ; set curJump $not }", +" curTrack { set curTrack $state }", +" }", +"", +" # Redraw the plots right away.", +" if {$widget == \"plotSpeed\" || $widget == \"plotAccurate\"} { ", +" cutPlots $cutXPos $cutYPos", +" }", +"}", +"foreach w { plotSpeed plotAccurate plotImgPix curJump curSmooth curTrack } {", +" send $w addCallback doPlotOpts ", +"}", +"", +"", +"# Toggle the display of the horizontal or vertical cut plot windows.", +"", +"proc cutPlotToggle { widget type state args } \\", +"{", +" global doHcut doVcut cutXPos cutYPos hstate vstate", +" set debug 0", +"", +" set hstate [send hcut get state]", +" set vstate [send vcut get state]", +" set w [send display get width]", +" set h [send display get height]", +"", +" if {$debug} { print \" \" ; print [format \"display: %d x %d\\n\" $w $h] }", +"", +" if {$widget == \"hcut\"} {", +" set hfw [expr [send hcutFrame get width] - 4]", +" set hpw [send hcutPlot get width]", +" if {$state} {", +" # Enable the plot and resize the main window", +" if {$vstate} { ", +" send plotOpts set width 134 ", +" }", +" send hcutFrame \"set width $hpw ; set height 132; map\"", +" send hcutPlot \"set width $hfw ; set height 128\"", +" send display \"set height [ expr ($h + 132) ]; set width $w\"", +" drawHcutAxes 1", +" setHcutCursor 1", +" if {$vstate} { ", +" send plotOpts \"set height 134 ; map\"", +" vcutInit", +" }", +" hcutInit ;# Initialize the plot.", +" } else {", +" # Disable the plot and resize the main window", +" setHcutCursor 0", +" drawHcutAxes 0", +" send hcutPlot clearScreen", +" send plotOpts \"unmap; set height 4\"", +" send hcutFrame \"unmap; set width $hfw; set height 4\"", +" send plotOpts \"set width 4\"", +" send display \"set height [ expr ($h - 128) ] ; set width $w\"", +" if {$vstate} { ", +" vcutInit", +" }", +" }", +" set doHcut $state", +" } else {", +" set vfh [expr [send vcutFrame get height] - 4]", +" set vph [send vcutPlot get height]", +" if {$state} {", +" # Enable the plot and resize the main window", +" if {$hstate} { ", +" send plotOpts set height 134", +" }", +" send vcutFrame \"set height $vph ; set width 132 ; map\"", +" send vcutPlot \"set height $vfh ; set width 128\"", +" send display \"set height $h; set width [ expr ($w + 132) ]\"", +" drawVcutAxes 1", +" setVcutCursor 1", +" if {$hstate} { ", +" send plotOpts \"set height 134 ; set width 134; map\"", +" hcutInit", +" }", +" vcutInit ;# Initialize the plot.", +" } else {", +" # Disable the plot and resize the main window", +" setVcutCursor 0", +" drawVcutAxes 0", +" send vcutPlot clearScreen", +" send plotOpts \"unmap; set width 4\"", +" send vcutFrame \"unmap; set height $vfh; set width 4\"", +" send plotOpts \"set height 4\"", +" send display \"set width [ expr ($w - 128) ] ; set height $h\"", +" if {$hstate} { ", +" hcutInit", +" }", +" }", +" set doVcut $state", +" }", +" ", +" if {$debug} {", +" print [format \" hFrame: %d x %d\\n\" \\", +" [send hcutFrame get width] [send hcutFrame get height] ]", +" print [format \" hPlot: %d x %d\\n\" \\", +" [send hcutPlot get width] [send hcutPlot get height] ]", +" print [format \" vFrame: %d x %d\\n\" \\", +" [send vcutFrame get width] [send vcutFrame get height] ]", +" print [format \" vPlot: %d x %d\\n\" \\", +" [send vcutPlot get width] [send vcutPlot get height] ]", +" print [format \"state: %d %d\\n\" $hstate $vstate]", +" print [format \"display: %d x %d\\n\" $w $h]", +" }", +"", +" cutPlots $cutXPos $cutYPos", +"} ; foreach w { hcut vcut } { send $w addCallback cutPlotToggle }", +"", +"", +"# Draw the cut plots.", +"proc cutPlots { xpos ypos args } \\", +"{", +" global doHcut doVcut cutXPos cutYPos hstate vstate", +"", +" catch {", +" if {$doHcut} {", +" drawHcutIndicator $xpos", +" if {$hstate} { plotHcut $xpos $ypos }", +" }", +" if {$doVcut} {", +" drawVcutIndicator $xpos", +" if {$vstate} { plotVcut $xpos $ypos }", +" }", +" }", +"", +" set cutXPos $xpos ; set cutYPos $ypos", +"}", +"", +"", +"################################################################################", +"# Horizontal Cut-Plot Routines", +"################################################################################", +"", +"set hcutVec {}", +"", +"# Initiailize the horizontal cut-plot", +"proc hcutInit args \\", +"{", +" global logz cutXScale winWidth cutXPos cutYPos", +"", +" # Just get some dummy pixels, we only want the z1/z2 values so we can ", +" # initialize the labels.", +" set xp [expr [send imagewin get width] / 2 ]", +" set yp [expr [send imagewin get height] / 2 ]", +" set pix [send client getPixels $xp $yp 2 2 ]", +" set z1 [lindex $pix 0]", +" set z2 [lindex $pix 1]", +"", +" send hcutPlot getPhysRes xr yr", +" send hcutPlot setLogRes $xr $yr", +"", +" set logx [send imagewin get width]", +" set logz [expr ($z2 - $z1)]", +" set cutXScale [expr ($xr * 1.0) / ($logx * 1.0)]", +"", +" # Initialize the labels.", +" send vcutPlot \"setColorIndex 6\"", +" drawHcutLabels $z1 $z2", +"}", +"", +"# Draw the horizontal cut-plot.", +"proc plotHcut { xpos ypos } \\", +"{", +" global doHcut cutXScale", +" global hcutVec cutXPos plotSpeed", +"", +"", +" if { ($xpos == 0 && $ypos == 0) || ! $doHcut } \\", +" return", +"", +" # Do the horizontal cut plot.", +" set width [send imagewin get width]", +" if {$plotSpeed} {", +" set pix [send client getPixels 0 $ypos $width 1 2 5 $cutXScale]", +" } else {", +" set pix [send client getPixels 0 $ypos $width 1 2 1 $cutXScale]", +" }", +" set z1 [lindex $pix 0]", +" set z2 [lindex $pix 1]", +" set vec [lrange $pix 2 end]", +"", +" # Erase the last plot rather than clear the screen and redraw ", +" # the new vector.", +" send hcutPlot setColorIndex background", +" send hcutPlot drawPolyline $hcutVec", +" send hcutPlot setColorIndex foreground", +" send hcutPlot drawPolyline $vec", +" set hcutVec $vec ;# save for later erasure", +"", +" # Mark the cursor position.", +" drawHcutIndicator $xpos", +"", +" # Minimize the screen refreshes to speed things up.", +" if { [expr \"$ypos % 3\"] == 0} {", +" catch {", +" drawHcutLabels $z1 $z2 ;# redraw the labels", +" }", +" send hcutAxes1 redraw ;# redraw the axes markers", +" send hcutAxes2 redraw", +" }", +"}", +"", +"", +"# Create markers to indicate axes on the horizontal cut-plot.", +"proc drawHcutAxes { state } \\", +"{", +" if {$state} {", +" send hcutPlot createMarker hcutAxes1 \\", +" type box \\", +" createMode noninteractive \\", +" lineColor gray60 \\", +" lineStyle 0 \\", +" x 1 \\", +" y 60 \\", +" height 30 \\", +" width 4096 \\", +" activated True \\", +" visible True \\", +" sensitive False", +" send hcutPlot createMarker hcutAxes2 \\", +" type box \\", +" createMode noninteractive \\", +" lineColor gray60 \\", +" lineStyle 0 \\", +" x 1 \\", +" y 1 \\", +" height 60 \\", +" width 4096 \\", +" activated True \\", +" visible True \\", +" sensitive False", +" } else {", +" send hcutAxes1 destroy ; send hcutAxes2 destroy", +" }", +"}", +"", +"# Create a marker to be used as the cursor indicator.", +"proc setHcutCursor { state } \\", +"{", +" if {$state} {", +" set pts { {252 10} {260 10} {256 1} }", +"", +" send hcutPlot createMarker hcutCursor \\", +" type polygon \\", +" createMode noninteractive \\", +" lineColor black \\", +" fill True \\", +" fillColor yellow \\", +" x 256 \\", +" y 12 \\", +" width 8 \\", +" height 10 \\", +" knotSize 0 \\", +" activated True \\", +" visible False \\", +" sensitive False", +" send hcutCursor setVertices $pts", +" send hcutCursor set visible True", +"", +" } else {", +" send hcutCursor destroy", +" }", +"}", +"", +"# Label the axes on the horizontal cut plot.", +"proc drawHcutLabels { z1 z2 } \\", +"{", +" set mid [expr \"($z2-$z1)/2.0+$z1\"]", +" set low [expr \"($mid-$z1)/2.0+$z1\"]", +" set high [expr \"($z2-$mid)/2.0+$mid\"]", +"", +" send hcutPlot \"setColorIndex 6 ; \\", +" drawAlphaText 2 10 [format \"%.1f\" $z2] ; \\", +" drawAlphaText 2 34 [format \"%.1f\" $high] ; \\", +" drawAlphaText 2 64 [format \"%.1f\" $mid] ; \\", +" drawAlphaText 2 94 [format \"%.1f\" $low] ; \\", +" drawAlphaText 2 120 [format \"%.1f\" $z1]\"", +"}", +"", +"# Draw the cursor position indicator on the horizontal cut plot.", +"proc drawHcutIndicator { xpos } \\", +"{", +" global cutXScale cutXPos", +"", +" send hcutCursor move [expr ($xpos * $cutXScale)] 12", +" set cutXPos $xpos", +"}", +"", +"# Track the cursor while in the cut-graph window.", +"proc hcutWCSUpdate { x y args } \\", +"{", +" global cutYPos curTrack", +" if {$curTrack} { ", +" wcsUpdate $x $cutYPos ", +" }", +" drawHcutIndicator $x", +"}", +"", +"", +"", +"", +"################################################################################", +"# Vertical Cut-Plot Routines", +"################################################################################", +"", +"set vcutVec {}", +"", +"# Initiailize the vertical cut-plot", +"proc vcutInit args \\", +"{", +" global cutYScale winWidth cutXPos cutYPos", +"", +" # Just get some dummy pixels, we only want the z1/z2 values so we can ", +" # initialize the labels.", +" set xp [expr [send imagewin get width] / 2 ]", +" set yp [expr [send imagewin get height] / 2 ]", +" set pix [send client getPixels $xp $yp 2 2 ]", +" set z1 [lindex $pix 0]", +" set z2 [lindex $pix 1]", +"", +" send vcutPlot getPhysRes xr yr", +" send vcutPlot setLogRes $xr $yr", +"", +" set logy [send imagewin get height]", +" set logz [expr ($z2 - $z1)]", +" set cutYScale [expr ($yr * 1.0) / ($logy * 1.0)]", +"", +" # Initialize the labels.", +" send vcutPlot \"setColorIndex 6; reset\"", +" drawVcutLabels $z1 $z2", +"}", +"", +"# Draw the horizontal cut-plot.", +"proc plotVcut { xpos ypos } \\", +"{", +" global doVcut cutYScale", +" global vcutVec cutXPos cutYPos plotSpeed", +"", +"", +" if { ($xpos == 0 && $ypos == 0) || ! $doVcut } \\", +" return", +"", +" # Do the vertical cut plot.", +" set height [send imagewin get height]", +" if {$plotSpeed} {", +" set pix [send client getPixels $xpos 0 1 $height 3 5 $cutYScale]", +" } else {", +" set pix [send client getPixels $xpos 0 1 $height 3 1 $cutYScale]", +" }", +" set z1 [lindex $pix 0]", +" set z2 [lindex $pix 1]", +" set vec [lrange $pix 2 end]", +"", +" # Draw the vector.", +" send vcutPlot setColorIndex background", +" send vcutPlot drawPolyline $vcutVec", +" send vcutPlot setColorIndex foreground", +" send vcutPlot drawPolyline $vec", +" set vcutVec $vec ;# save for later erasure", +"", +" # Mark the cursor position.", +" drawVcutIndicator $ypos", +"", +" # Minimize the screen refreshes to speed things up.", +" if { [expr \"$xpos % 3\"] == 0} {", +" catch {", +" drawVcutLabels $z1 $z2 ;# redraw the labels", +" }", +" send vcutAxes1 redraw ;# redraw the axes markers", +" send vcutAxes2 redraw", +" }", +"}", +"", +"# Erase the last plot rather than clear the screen and redraw it all. The", +"# erase is done by redrawing the last vector in the the background color.", +"proc eraseOldVcut args \\", +"{", +" global cutYPos vcutVec", +"", +" send vcutPlot setColorIndex background", +" send vcutPlot drawPolyline $vcutVec", +" send vcutPlot setColorIndex foreground", +"}", +"", +"# Draw the horizontal cut-plot.", +"# Create markers to indicate axes on the vertical cut-plot.", +"proc drawVcutAxes { state } \\", +"{", +" if {$state} {", +" send vcutPlot createMarker vcutAxes1 \\", +" type box \\", +" createMode noninteractive \\", +" lineColor gray60 \\", +" lineStyle 0 \\", +" x 60 \\", +" y 1 \\", +" height 4096 \\", +" width 30 \\", +" activated True \\", +" visible True \\", +" sensitive False", +" send vcutPlot createMarker vcutAxes2 \\", +" type box \\", +" createMode noninteractive \\", +" lineColor gray60 \\", +" lineStyle 0 \\", +" x 1 \\", +" y 1 \\", +" width 60 \\", +" height 4096 \\", +" activated True \\", +" visible True \\", +" sensitive False", +" } else {", +" send vcutAxes1 destroy ; send vcutAxes2 destroy", +" }", +"}", +"", +"# Create a marker to be used as the cursor indicator.", +"proc setVcutCursor { state } \\", +"{", +" if {$state} {", +" set pts { {10 252} {10 260} {1 256} }", +"", +" send vcutPlot createMarker vcutCursor \\", +" type polygon \\", +" createMode noninteractive \\", +" lineColor black \\", +" fill True \\", +" fillColor yellow \\", +" x 12 \\", +" y 256 \\", +" width 10 \\", +" height 8 \\", +" knotSize 0 \\", +" activated True \\", +" visible False \\", +" sensitive False", +" send vcutCursor setVertices $pts", +" send vcutCursor set visible True", +"", +" } else {", +" send vcutCursor destroy", +" }", +"}", +"", +"# Label the axes on the vertical cut plot.", +"proc drawVcutLabels { z1 z2 } \\", +"{", +" set mid [expr \"($z2-$z1)/2.0+$z1\"]", +" set low [expr \"($mid-$z1)/2.0+$z1\"]", +" set high [expr \"($z2-$mid)/2.0+$mid\"]", +"", +" # Initialize the label strings and positions.", +" set labels {}", +" foreach i [list $z2 $high $mid $low $z1] {", +" lappend labels [ format \"%.1f\" $i ]", +" }", +" set xposns { 2 28 58 88 112 }", +"", +" send vcutPlot \"setColorIndex 6\"", +"", +" # Draw each label vertically down the position since we can't rotate", +" # the text.", +" set xp 0", +" foreach lab $labels {", +" set chars [split $lab {} ]", +" set yp 12", +" set xpos [lindex $xposns $xp]", +" foreach ch $chars {", +" if {$ch == \".\"} { incr yp -4 }", +" send vcutPlot drawAlphaText $xpos $yp $ch", +" incr yp 10", +" }", +" incr xp", +" }", +"}", +"", +"", +"# Draw the cursor position indicator on the horizontal cut plot.", +"proc drawVcutIndicator { ypos } \\", +"{", +" global cutYScale cutYPos", +"", +" send vcutCursor move 12 [expr ($ypos * $cutYScale)]", +" set cutYPos $ypos", +"}", +"", +"", +"# Track the cursor while in the cut-graph window.", +"proc vcutWCSUpdate { x y args } \\", +"{", +" global cutXPos curTrack", +" if {$curTrack} { ", +" wcsUpdate $cutXPos $y ", +" }", +" drawVcutIndicator $y", +"}", +"", +"", +"", +"################################################################################", +"# UTILITY ROUTINES", +"################################################################################", +"", +"", +"# TICSTEP -- Utility routine to compute nice ticmark steps in plots.", +"# [ NOT CURRENTLY USED. ]", +"", +"proc ticstep { range nsteps } \\", +"{", +" set t2 0.301029996", +" set t5 0.698970004", +" set df [ expr \"$range / double($nsteps + 1)\" ]", +" if {$df > 0.0} {", +" set p1 [ expr \"log10(double($df))\" ]", +" } else {", +" set p1 [ expr \"log10(double(-$df))\" ]", +" }", +" set p2 [ expr \"int($p1)\" ]", +" set p3 [ expr \"$p1 - $p2\" ]", +"", +" if { $p3 < 0.0 } {", +" set p3 [ expr \"$p2 + 1.0\" ]", +" set p2 [ expr \"$p2 - 1.0\" ]", +" }", +"", +" if { $p3 < 1.0e-10 } {", +" set ticstep [ expr \"pow(double(10.0),double($p2))\" ]", +" } elseif { $p3 > 0. && $p3 <= $t2 } {", +" set ticstep [ expr \"pow(double(10.0),double($p2 + $t2))\" ]", +" } elseif { $p3 > $t2 && $p3 <= $t5 } {", +" set ticstep [ expr \"pow(double(10.0),double($p2 + $t5))\" ]", +" } elseif { $p3 > $t5 && $p3 <= 1.0 } {", +" set ticstep [ expr \"pow(double(10.0),double($p2 + 1.))\" ]", +" } else {", +" set ticstep $df", +" }", +"", +" set logtic [ expr \"int(log10($ticstep)) - 1\" ]", +" set scale [ expr \"pow(double(10.0),double($logtic))\" ]", +" set ticstep [ expr \"int( ($ticstep / $scale) * $scale)\" ]", +"", +" if {$ticstep < 0.1} { set ticstep 0.10 }", +"", +" return $ticstep", +"}", +"", +"", +"", +"# Cursor positioning routines", +"#----------------------------", +"", +"proc move_cursor { xstep ystep args } \\", +"{", +" set raster 0", +" send imagewin getCursorPos rx ry", +" send imagewin setCursorPos [expr $rx + $xstep] [expr $ry + $ystep] $raster", +"}", +"", +"", +"# Called when the number of frames changes.", +"proc setNFrames {param old new} \\", +"{", +" global frameMenuDescription nframes frames", +"", +" set nframes $new", +" if {$old != $new} {", +" foreach i {prevButton nextButton} {", +" send $i set sensitive [expr \"$nframes > 1\"]", +" }", +"", +" if {$nframes > 0} {", +"", +" # Creates the Frames menu on the main image window.", +" set items { }", +" for {set i 1} {$i <= $nframes} {incr i} {", +" set l [format \"%2d\" $i]", +" lappend items \"$l f.exec \\{send client setFrame $i\\} sensitive \\{[expr \\\"$nframes >= $i\\\"]\\}\"", +" }", +" editMenu frameMenu frameButton $items", +"", +" # Create the menu for the blink frames list.", +" set items { }", +" for {set i 0} {$i <= $nframes} {incr i} {", +" set j [expr ($i + 1)]", +" if {$i == 0} {", +" set s \"\\\"none\\\" f.exec \\{send brFrameBTN set label \\\" \\\"\\}\"", +" lappend items $s", +" } else {", +" set l [format \"%2d\" $i]", +" lappend items \"$l f.exec \\{send brFrameBTN set label $l\\} sensitive \\{[expr \\\"$nframes >= $i\\\"]\\}\"", +" }", +" }", +" for {set i 1} {$i <= $nframes} {incr i} {", +" send brFrame$i setSensitive True", +" send tFrame$i setSensitive True", +" regsub -all BTN $items $i nmenu", +" editMenu frame${i}Menu brFrame$i $nmenu", +" }", +"", +" } else {", +" editMenu frameMenu frameButton $frameMenuDescription", +"", +" for {set i 1} {$i <= $nframes} {incr i} {", +" send brFrame$i setSensitive True", +" send tFrame$i setSensitive True", +" editMenu frame${i}Menu brFrame$i $frameMenuDescription", +" }", +" }", +" }", +"", +" for {set i 1} {$i <= 16} {incr i} {", +" if {$i <= $nframes} {", +" send frame$i map", +" } else {", +" send frame$i unmap", +" }", +" }", +"", +" if {$nframes > 2} {", +" setAllTileFrames", +" }", +"}; send nframes addCallback setNFrames", +"", +"", +"# Set the default main window frame menu.", +"set frameMenuDescription {", +" {\" 1\" f.exec \"send client setFrame 1\" sensitive {[expr \"$nframes >= 1\"]} }", +" {\" 2\" f.exec \"send client setFrame 2\" sensitive {[expr \"$nframes >= 2\"]} }", +" {\" 3\" f.exec \"send client setFrame 3\" sensitive {[expr \"$nframes >= 3\"]} }", +" {\" 4\" f.exec \"send client setFrame 4\" sensitive {[expr \"$nframes >= 4\"]} }", +"}; createMenu frameMenu frameButton $frameMenuDescription", +"", +"", +"", +"", +"# Initialize the frame lists panels (blink panel and tile tab).", +"for {set i 1} {$i <= 16} {incr i} {", +" send brFrame$i set label [format \"%2d\" $i]", +" send tFrame$i set label [format \"%2d\" $i]", +" if {$i <= 4} {", +" send brFrame$i setSensitive True", +" send tFrame$i \"setSensitive True ; set state 1\"", +" } else {", +" send brFrame$i setSensitive False", +" send tFrame$i \"setSensitive False ; set state 0\"", +" }", +" createMenu frame${i}Menu brFrame$i $frameMenuDescription", +"}", +"", +"", +"# Called when the frame being displayed changes.", +"proc frameChanged {param old new} \\", +"{", +" global frame", +"", +" set frame $new", +" send frameButton set label [format \"%2d\" $frame]", +"", +" # The first time we request frame 5 or higher reset ", +" # the extra frame buttons on the control panel to make", +" # them visible.", +" if {$new >= 5} {", +" send frlistBox set width 49", +" }", +" wcsFmtFBConfig", +" drawCompass", +"}; send frame addCallback frameChanged", +"", +"", +"# Called when the frame buffer configuration changes.", +"proc setFrameSize {param old new} \\", +"{", +" global frameWidth frameHeight frameDepth", +" set frameWidth [lindex $new 0]", +" set frameHeight [lindex $new 1]", +" set frameDepth [lindex $new 2]", +"", +" wcsFmtFBConfig", +"}; send frameSize addCallback setFrameSize", +"", +"# Called when the current frame is zoomed or panned.", +"proc setFrameView {param old new} \\", +"{", +" global frameZoomX frameZoomY frameCenterX frameCenterY", +" global frameScaleX frameScaleY frameOffsetX frameOffsetY", +" global frame auto_reg blinkFrames", +"", +" # Update the position.", +" set frameZoomX($frame) [lindex $new 0]", +" set frameZoomY($frame) [lindex $new 1]", +" set frameCenterX($frame) [lindex $new 2]", +" set frameCenterY($frame) [lindex $new 3]", +" set frameScaleX($frame) [lindex $new 4]", +" set frameScaleY($frame) [lindex $new 5]", +" set frameOffsetX($frame) [lindex $new 6]", +" set frameOffsetY($frame) [lindex $new 7]", +"", +" # If auto-registering is enabled, do it now, but only when we're updating", +" # the current display frame, and only if that frame is in the framelist.", +"", +" if {$auto_reg == 1 && $frame == [send frameButton get label]} {", +" if {[string first $frame $blinkFrames] != -1} {", +" send client offsetRegister \\{$blinkFrames\\}", +" }", +"", +" foreach f $blinkFrames {", +" if {$f != $frame} {", +" set frameZoomX($f) $frameZoomX($frame)", +" set frameZoomY($f) $frameZoomY($frame)", +" set frameCenterX($f) $frameCenterX($frame)", +" set frameCenterY($f) $frameCenterY($frame)", +" set frameScaleX($f) $frameScaleX($frame)", +" set frameScaleY($f) $frameScaleY($frame)", +" }", +" }", +" }", +" deleteAllRulers", +"", +"}; send frameView addCallback setFrameView", +"", +"", +"# Called when the color enhancement for a frame changes.", +"proc setEnhancement {param old new} \\", +"{", +" global enhancement", +" set enhancement([lindex $new 0]) [lrange $new 1 end]", +"}; send enhancement addCallback setEnhancement", +"", +"# Called when the frame title changes (e.g. frame change or new frame loaded).", +"proc setTitle {param old new} \\", +"{", +" set lab [string trimright $new]", +" send imageTitle set label $lab", +"", +" set image [lindex [ split $lab '-'] 0 ]", +" wcsFmtImname $image", +"", +" set title [lindex [ split $lab '-'] 1 ]", +" wcsFmtImtitle $title", +" deleteAllRulers", +"}; send frameTitle addCallback setTitle", +"", +"# Called when the image is flipped in an axis.", +"proc setFlip {param old new} \\", +"{", +" if {$param == \"xflip\"} { ", +" send xflipButton set state [true $new]", +" } else {", +" send yflipButton set state [true $new]", +" }", +" deleteAllRulers", +"}; foreach i {xflip yflip} { send $i addCallback setFlip }", +"", +"", +"# Various general callbacks.", +"", +"proc Quit args \\", +"{", +" global ism_enable", +"", +" if {$ism_enable} {", +" catch { send wcspix quit }", +" }", +" send client Quit ", +"}", +"proc nextFrame args { send client nextFrame }", +"proc prevFrame args { send client prevFrame }", +"proc setColormap { mapno } { send client setColormap $mapno }", +"proc xflip args { send client flip x ; flipRegister }", +"proc yflip args { send client flip y ; flipRegister }", +"proc xyflip args { send client flip x y ; flipRegister }", +"proc flipRegister args \\", +"{", +" global auto_reg frame blinkFrames", +"", +" if {$auto_reg == 1 && $frame == [send frameButton get label]} {", +" if {[string first $frame $blinkFrames] != -1} {", +" send client offsetRegister \\{$blinkFrames\\}", +" }", +" }", +"}", +"", +"", +"", +"# Initialize bitmaps.", +"createBitmap xflip 16 16 {", +" 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x08, 0x18, 0x18,", +" 0x1c, 0x38, 0xfe, 0x7f, 0xfe, 0x7f, 0x1c, 0x38, 0x18, 0x18, 0x10, 0x08,", +" 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}", +"", +"createBitmap yflip 16 16 {", +" 0x00, 0x00, 0x80, 0x01, 0xc0, 0x03, 0xe0, 0x07, 0xf0, 0x0f, 0x80, 0x01,", +" 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0xf0, 0x0f,", +" 0xe0, 0x07, 0xc0, 0x03, 0x80, 0x01, 0x00, 0x00}", +"", +"createBitmap qmark 16 16 {", +" 0x00, 0x00, 0x00, 0x00, 0xf0, 0x07, 0xf8, 0x0f, 0x18, 0x0c, 0x18, 0x0c,", +" 0x18, 0x0e, 0x00, 0x07, 0x80, 0x03, 0x80, 0x01, 0x80, 0x01, 0x00, 0x00,", +" 0x80, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x00}", +"", +"createBitmap larrow 16 16 {", +" 0x00, 0x00, 0x00, 0x03, 0x80, 0x03, 0xc0, 0x03, 0xe0, 0x1e, 0x70, 0x1e,", +" 0x38, 0x18, 0x1c, 0x18, 0x1c, 0x18, 0x38, 0x18, 0x70, 0x1e, 0xe0, 0x1e,", +" 0xc0, 0x03, 0x80, 0x03, 0x00, 0x03, 0x00, 0x00}", +"", +"createBitmap rarrow 16 16 {", +" 0x00, 0x00, 0xc0, 0x00, 0xc0, 0x01, 0xc0, 0x03, 0x78, 0x07, 0x78, 0x0e,", +" 0x18, 0x1c, 0x18, 0x38, 0x18, 0x38, 0x18, 0x1c, 0x78, 0x0e, 0x78, 0x07,", +" 0xc0, 0x03, 0xc0, 0x01, 0xc0, 0x00, 0x00, 0x00}", +"", +"createBitmap panel 16 16 {", +" 0x00, 0x00, 0xf8, 0x1f, 0xf8, 0x1f, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,", +" 0x98, 0x19, 0x98, 0x19, 0x98, 0x19, 0x98, 0x19, 0x98, 0x19, 0x18, 0x18,", +" 0x18, 0x18, 0x18, 0x18, 0xf8, 0x1f, 0xf8, 0x1f}", +"", +"createBitmap brightness 15 15 {", +" 0x00, 0x00, 0x80, 0x00, 0x84, 0x10, 0xe8, 0x0b, 0x10, 0x04, 0x08, 0x08,", +" 0x08, 0x08, 0x0e, 0x38, 0x08, 0x08, 0x08, 0x08, 0x10, 0x04, 0xe8, 0x0b,", +" 0x84, 0x10, 0x80, 0x00, 0x00, 0x00}", +"", +"createBitmap contrast 15 15 {", +" 0x00, 0x00, 0x00, 0x00, 0xc0, 0x01, 0x30, 0x07, 0x08, 0x0f, 0x08, 0x0f,", +" 0x04, 0x1f, 0x04, 0x1f, 0x04, 0x1f, 0x08, 0x0f, 0x08, 0x0f, 0x30, 0x07,", +" 0xc0, 0x01, 0x00, 0x00, 0x00, 0x00}", +"", +"createBitmap bar 10 10 {", +" 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0x00, 0x42, 0x00, 0x7e, 0x00,", +" 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}", +"", +"createBitmap dot 16 16 {", +" 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x01,", +" 0xe0, 0x03, 0xf0, 0x07, 0xf0, 0x07, 0xf0, 0x07, 0xe0, 0x03, 0xc0, 0x01,", +" 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}", +"", +"createBitmap null 16 16 {", +" 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,", +" 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,", +" 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}", +"", +"createBitmap solid 64 24 {", +" 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,", +" 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,", +" 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,", +" 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,", +" 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,", +" 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,", +" 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,", +" 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,", +" 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,", +" 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,", +" 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, 0x00,", +" 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}", +"", +"catch { send controlButton \"set bitmap panel; addCallback panel\" }", +"catch { send helpButton \"set bitmap qmark; addCallback Help\" }", +"send xflipButton \"set bitmap xflip; addCallback xflip\"", +"send yflipButton \"set bitmap yflip; addCallback yflip\"", +"send prevButton \"set bitmap larrow; addCallback prevFrame\"", +"send nextButton \"set bitmap rarrow; addCallback nextFrame\"", +"send blinkPanel \"set bitmap panel\"", +"", +"", +"", +"# WINDOW the current frame.", +"set old_cm_x 0", +"set old_cm_y 0", +"", +"proc windowColormap {x y} \\", +"{", +" global winWidth winHeight maxContrast old_cm_x old_cm_y", +"", +" # For efficiency we won't compute the sqrt of the distance but instead", +" # just compare the square. Use a threshold of 6 pixels so when we", +" # narrow in on the ROI we refine the colormap more precisely.", +"", +" set diff [expr (($old_cm_x - $x) * ($old_cm_x - $x)) + \\", +" (($old_cm_y - $y) * ($old_cm_y - $y))]", +"", +" # Keep the old position.", +" set old_cm_x $x", +" set old_cm_y $y", +" if {$diff > 36} {", +" return", +" }", +"", +" send client windowColormap \\", +" [expr \"double($x) / $winWidth\"] \\", +" [expr \"(double($y) - $winHeight / 2.0) / $winHeight * \\", +" $maxContrast * 2.0\"]", +"}", +"", +"proc updateColormap {x y} \\", +"{", +" global winWidth winHeight maxContrast old_cm_x old_cm_y", +"", +" set old_cm_x $x", +" set old_cm_y $y", +" send client updateColormap \\", +" [expr \"double($x) / $winWidth\"] \\", +" [expr \"(double($y) - $winHeight / 2.0) / $winHeight * \\", +" $maxContrast * 2.0\"]", +"}", +"", +"", +"", +"# WINDOW the current frame, but only one color at a time.", +"proc windowRGB {color x y save_flag} \\", +"{", +" global winWidth winHeight maxContrast", +"", +" send client windowRGB $color \\", +" [expr \"double($x) / $winWidth\"] \\", +" [expr \"(double($y) - $winHeight / 2.0) / $winHeight * \\", +" $maxContrast * 2.0\"] $save_flag", +"}", +"", +"", +"# ZOOM and PAN.", +"set xcen 0", +"set ycen 0", +"foreach i $frames {set zoomindex($i) 0}", +"set nzoomfactors 0", +"foreach i $zoomfactors {", +" set zoomfactor($nzoomfactors) $i", +" incr nzoomfactors", +"}", +"", +"# Zoom or pan image at given center.", +"proc zoom {x y} \\", +"{", +" global xcen ycen frame", +" global zoomindex zoomfactor", +" global nzoomfactors", +"", +" set rx $x; set ry $y", +" set raster 0", +"", +" # Convert raw screen coordinates to frame buffer raster coordinates.", +" send imagewin unmapPixel $x $y raster rx ry", +"", +" # Select a pixel.", +" set rx [expr \"int ($rx)\"]", +" set ry [expr \"int ($ry)\"]", +"", +" # If the pointer did not move (much) zoom the image, otherwise", +" # pan it.", +"", +" send imagewin setCursorType busy", +" if {sqrt(pow($x-$xcen, 2) + pow($y-$ycen, 2)) < 4} {", +" set zoomindex($frame) [expr [incr zoomindex($frame)] % $nzoomfactors]", +" set mag $zoomfactor($zoomindex($frame))", +" send client zoom $mag $mag $rx $ry", +" } else {", +" send client pan $rx $ry", +" set xcen $x", +" set ycen $y", +" }", +"", +" # Move the pointer so that it tracks the object feature the user", +" # selected.", +"", +" send imagewin setCursorPos $rx $ry $raster", +" send imagewin getCursorPos xcen ycen", +" send imagewin setCursorType idle", +"}", +"", +"", +"# Zoom using a marker to indicate the region to be displayed.", +"proc zoomMarker {marker aspect} \\", +"{", +" global xcen ycen frame", +" global winWidth winHeight", +" global zoomindex nzoomfactors", +" global auto_reg frame frameOffsetX frameOffsetY", +"", +" # getRegion returns: \"rectangle raster x y width height rotangle\".", +" set region [send $marker getRegion unmap]", +"", +" set raster [lindex $region 1]", +" set xcen [expr \"int([lindex $region 2]) + 0.5\"]", +" set ycen [expr \"int([lindex $region 3]) + 0.5\"]", +" set snx [expr \"[lindex $region 4] * 2\"]", +" set sny [expr \"[lindex $region 5] * 2\"]", +"", +" # Compute the magnification ratio.", +" set xmag [expr \"$winWidth / $snx\"]", +" set ymag [expr \"$winHeight / $sny\"]", +" if {$aspect == \"equal\"} {", +" set mag [expr \"($xmag < $ymag) ? $xmag : $ymag\"]", +" set xmag $mag; set ymag $mag", +" }", +"", +" # Zoom the image.", +" send client zoomAbs \\", +" $xmag $ymag $xcen $ycen \\", +" $frameOffsetX($frame) $frameOffsetY($frame)", +"", +" # The following causes a button2 to redisplay the full image.", +" send imagewin setCursorPos $xcen $ycen $raster", +" send imagewin getCursorPos xcen ycen", +" set zoomindex($frame) [expr \"$nzoomfactors - 1\"]", +"}", +"", +"# Pan the display frame one width/height in a given direction.", +"proc moveFrame { xs ys args } \\", +"{", +" global winWidth winHeight frame", +" global frameWidth frameHeight", +" global frameZoomX frameZoomY frameCenterX frameCenterY", +" global frameOffsetX frameOffsetY", +"", +" # Get the step size for the new position.", +" set xstep_size [ expr \"$xs * $winWidth / $frameZoomX($frame)\" ]", +" set ystep_size [ expr \"$ys * $winHeight / $frameZoomY($frame)\" ]", +"", +" # Set the boundaries so we only move up to the edges.", +" set xl [ expr \"($winWidth / $frameZoomX($frame)) / 2 + 1\" ]", +" set yl [ expr \"($winHeight / $frameZoomY($frame)) / 2 + 1\" ]", +" set xu [ expr \"$frameWidth - $xl\" ]", +" set yu [ expr \"$frameHeight - $yl\" ]", +"", +" # Set the new center position.", +" set nxc [ expr \"$frameCenterX($frame) + $xstep_size\" ]", +" set nyc [ expr \"$frameCenterY($frame) + $ystep_size\" ]", +" if {$nxc < $xl} { set nxc $xl }", +" if {$nxc > $xu} { set nxc $xu }", +" if {$nyc < $yl} { set nyc $yl }", +" if {$nyc > $yu} { set nyc $yu }", +"", +" # Finally, send the command to move the frame.", +" send client zoomAbs \\", +" $frameZoomX($frame) $frameZoomY($frame) $nxc $nyc \\", +" $frameOffsetX($frame) $frameOffsetY($frame)", +"}", +"", +"proc resetView {param old new} {", +" global zoomindex xcen ycen frames", +" global frameWidth frameHeight", +"", +" if {$new == \"done\"} {", +" foreach i $frames {", +" send client setFrame $i", +" set xcen [expr $frameWidth / 2]", +" set ycen [expr $frameHeight / 2]", +" send client zoom 1 1 $xcen $ycen", +" set zoomindex($i) 0", +" send client setColormap Grayscale", +" normalize", +" }", +" send client setFrame 1", +" }", +"}; #send initialize addCallback resetView", +"", +"", +"# CURSOR READ stuff.", +"proc setCursorMode {param old new} \\", +"{", +" global cursorMode", +"", +" if {$new == \"on\"} {", +" send imagewin \"activate; setCursorType ginMode\"", +" set cursorMode 1", +" } elseif {$new == \"off\"} {", +" send imagewin \"setCursorType idle; deactivate\"", +" set cursorMode 0", +" }", +"}", +"", +"proc keyInput {widget event sx sy data} \\", +"{", +" global cursorMode frame", +"", +" if {!$cursorMode || $event != \"keyPress\"} \\", +" return", +" if {[lindex $data 0] == \"??\"} \\", +" return", +"", +" # Convert raw screen coordinates to raster pixel coordinates.", +" send imagewin unmapPixel $sx $sy raster rx ry", +"", +" # Return the cursor value and exit cursor mode.", +" send client retCursorVal $rx $ry $frame 1 [lindex $data 0]", +"}", +"", +"proc resetCursorMode args {", +" global cursorMode frame", +" if {$cursorMode} {", +" send imagewin getCursorPos x y", +" send client retCursorVal $x $y $frame 1 ^D", +" }", +"}; send initialize addCallback resetCursorMode", +"", +"send cursorMode addCallback setCursorMode", +"send imagewin addCallback keyInput input", +"", +"", +"# MARKER stuff. The active marker is determined by the global variable", +"# \"marker\", which is the marker the pointer is in, or which the pointer", +"# was most recently in.", +"", +"# Translations when pointer is inside marker.", +"set markerTranslations { \\", +"!Shift : m_rotateResize()", +" : m_moveResize()", +" !Shift : m_raise() m_markpos()", +" : m_raise() m_markposAdd()", +" : m_redraw() m_destroyNull()", +" : m_lower()", +" : popup(markerMenu)", +" : popdown(markerMenu)", +" !Ctrl b: call(prevFrame,$name)", +" !Ctrl f: call(nextFrame,$name)", +" !Ctrl h: call(move_cursor,-1,0)", +" !Ctrl j: call(move_cursor,0,1)", +" !Ctrl k: call(move_cursor,0,-1)", +" !Ctrl l: call(move_cursor,1,0)", +" !Ctrl n: call(normalize)", +" !Ctrl c: call(cpZoomAction,centerFrame)", +" !Ctrl i: call(cpInvert)", +" !Ctrl m: call(cpMatchFrames)", +" !Ctrl r: call(cpRegisterFrames)", +" !Ctrl p: call(togglePanner)", +" !Alt 1: call(cpSetFrame,frame1)", +" !Alt 2: call(cpSetFrame,frame2)", +" !Alt 3: call(cpSetFrame,frame3)", +" !Alt 4: call(cpSetFrame,frame4)", +" !Ctrl 1: call(cpZoom,1,1,fixed)", +" !Ctrl 2: call(cpZoom,2,2,fixed)", +" !Ctrl 3: call(cpZoom,3,3,fixed)", +" !Ctrl 4: call(cpZoom,4,4,fixed)", +" !Ctrl 5: call(cpZoom,5,5,fixed)", +" !Ctrl 6: call(cpZoom,6,6,fixed)", +" !Ctrl 7: call(cpZoom,7,7,fixed)", +" !Ctrl 8: call(cpZoom,8,8,fixed)", +" !Ctrl 9: call(cpZoom,9,9,fixed)", +" BackSpace: m_deleteDestroy()", +" Delete: m_deleteDestroy()", +" : m_input()", +" : track-cursor() call(wcsUpdate,$x,$y) call(magnifierMapImage,$x,$y)", +"}", +"", +"# Popup menu in effect when inside marker.", +"createMenu markerMenu imagewin {", +" { Marker f.title }", +" { f.dblline }", +" { Zoom f.exec {", +" zoomMarker $marker equal", +" send $marker destroy", +" } }", +" { Fill f.exec {", +" zoomMarker $marker fill", +" send $marker destroy", +" } }", +" { Print f.exec {", +" send $marker getRect interior x0 y0 nx ny", +" setPrintCorners $x0 [expr $y0 + $ny -1] \\", +" [expr $x0 + $nx -1] $y0", +" send client print $x0 $y0 $nx $ny", +" } }", +" { Save f.exec {", +" send imagewin setCursorType busy", +" send $marker getRect interior x0 y0 nx ny", +" send client save $x0 $y0 $nx $ny", +" send imagewin setCursorType idle", +" } }", +" { Info f.exec {", +" send infoText append \\", +" [format \"%s\\n\" [send $marker getRegion unmap]]", +" } }", +" { Unrotate f.exec {", +" send $marker setAttribute rotangle 0", +" } }", +" { f.dblline }", +" { Color f.menu markerColor }", +" { Type f.menu markerType }", +" { f.dblline }", +" { Destroy f.exec {", +" send $marker destroy", +" } }", +"}", +"", +"createMenu markerType markerMenu {", +" { Type f.title }", +" { f.dblline }", +" { Rectangle f.exec \"m_setType $marker rectangle\" }", +" { Box f.exec \"m_setType $marker box\" }", +" { Circle f.exec \"m_setType $marker circle\" }", +" { Ellipse f.exec \"m_setType $marker ellipse\" }", +" { Polygon f.exec \"m_setType $marker polygon\" }", +"}", +"", +"createMenu markerColor markerMenu {", +" { Color f.title }", +" { f.dblline }", +" { \"\" f.exec \"m_setColor $marker black\"", +" bitmap solid foreground black }", +" { \"\" f.exec \"m_setColor $marker white\" ", +" bitmap solid foreground white }", +" { \"\" f.exec \"m_setColor $marker red\" ", +" bitmap solid foreground red }", +" { \"\" f.exec \"m_setColor $marker green\" ", +" bitmap solid foreground green }", +" { \"\" f.exec \"m_setColor $marker blue\" ", +" bitmap solid foreground blue }", +" { \"\" f.exec \"m_setColor $marker magenta\" ", +" bitmap solid foreground magenta }", +" { \"\" f.exec \"m_setColor $marker cyan\" ", +" bitmap solid foreground cyan }", +" { \"\" f.exec \"m_setColor $marker yellow\" ", +" bitmap solid foreground yellow }", +"}", +"", +"proc m_setType {marker type} {", +" send $marker \"markpos; set type $type; redraw\"", +"}", +"proc m_setColor {marker color} {", +" send $marker \"markpos;", +" set lineColor $color; set highlightColor $color; redraw\"", +"}", +"", +"# Callback executed when a marker gets or loses the focus.", +"proc selectMarker {active_marker event event_data} \\", +"{", +" global marker", +" switch $event {", +" focusIn { set marker $active_marker }", +" focusOut { }", +" }", +"}", +"", +"# Create marker action. Makes a new marker.", +"proc makeMarker {parent x y} \\", +"{", +" global markerTranslations markno", +" set marker marker$markno; incr markno", +"", +" send $parent createMarker $marker \\", +" type rectangle \\", +" createMode interactive \\", +" translations $markerTranslations \\", +" x $x \\", +" y $y", +"", +" send $marker addCallback selectMarker focusIn focusOut", +"}", +"", +"", +" ", +"# WCSBOX -- Real time coordinate display.", +"", +"set track_enable 0", +"set last_x 0", +"set last_y 0", +"", +"proc wcsUpdate {x y} \\", +"{", +" global track_enable frame pixtab_up tabTop", +" global frameWidth frameHeight redraw_compass", +" global ism_enable wcsLabels last_x last_y", +" global ct_warn plotSpeed doHcut doVcut", +"", +"", +" # If the cursor was frozen release it now.", +" if {$ct_warn} {", +" curtrack_destroy", +" }", +"", +" # Convert screen coords to raster pixel.", +" send imagewin unmapPixel $x $y raster rx ry rz", +"", +" # Set the current frame to the frame the pointer is within.", +" if {$frame && $raster} {", +" set track_frame [send client getFrame $raster]", +" if {$frame != $track_frame} {", +" send client setFrame $track_frame", +" }", +" }", +"", +" # Update coords box.", +" if {$raster} {", +" set text [send client encodewcs $rx $ry $rz]", +" scan $text \"%g %g %g\" nx ny nz", +" } else {", +" set text [format \" %7.2f %7.2f %9.1f \" $rx $ry $rz]", +" set nx $rx ; set ny $ry ; set nz $rz", +" }", +" ", +" # Update the coords panel and pixel table.", +" wcsFmtSValue $nz", +" if {$pixtab_up} {", +" updatePixelTable $x $y $nx $ny", +" }", +"", +" # If the ISM is running update the coords box with all the selected", +" # options, otherwise just write the one-line frame wcs coords.", +" if {$ism_enable} {", +" updateCoordsBox", +"", +" } else {", +" # Update the on-screen marker.", +" if {$track_enable} {", +" send wcsbox \"set text \\{$text\\}; redraw noerase\"", +" }", +"", +" # Update the control panel readout (always done).", +" if {$wcsLabels} {", +" set ln [format \" X: %12s Y: %12s WCS: Display\" $nx $ny]", +" } else {", +" set ln [format \" %12s %12s Display\" $nx $ny]", +" }", +" send wtWcs1 set string $ln", +"", +" if {$redraw_compass} \\", +" drawCompass", +" }", +"", +"", +" # Update the cut-plots if enabled. If we're set for speed the don't ", +" # track the really large cursor motions, wait till the differences are", +" # small indicating a finer motion. ", +" if {$doHcut || $doVcut} {", +" set dist [ expr \"sqrt(pow(($last_x - $x),2) + pow(($last_y - $y),2))\" ]", +" if {($plotSpeed && $dist < 30) || ! $plotSpeed} {", +" cutPlots $x $y", +" }", +" }", +"", +" # Save the position so we can track differences with last position.", +" set last_x $x", +" set last_y $y", +"}", +"", +"", +"proc setTrack {state} \\", +"{", +" global ism_enable track_enable wcsboxGeom", +" global winWidth winHeight up_todo", +"", +" if {$state} {", +" if {$track_enable} \\", +" return", +"", +" send imagewin createMarker wcsbox {", +" type text", +" createMode noninteractive", +" width 27ch", +" height 1ch", +" lineWidth 0", +" imageText true", +" textBgColor black", +" textColor yellow", +" visible false", +" }", +"", +" set box_width [send wcsbox get width]", +" set box_height [send wcsbox get height]", +" set defGeom [format \"%sx%s-5-5\" $box_width $box_height]", +" send imagewin parseGeometry $wcsboxGeom $defGeom x y width height", +"", +" send wcsbox setAttributes \\", +" x $x \\", +" y $y \\", +" activated true \\", +" visible true \\", +" sensitive true", +"", +" send wcsbox {", +" addCallback wcsboxDestroyCallback destroy", +" addCallback wcsboxMoved moveResize", +" }", +"", +" send imagewin addCallback wcsboxWindowResize resize", +" set track_enable 1", +" send imagewin getCursorPos x y", +" wcsUpdate $x $y", +" magnifierMapImage $x $y", +"", +" # Turn on the option toggles on the control panel.", +" foreach n {1 2 3 4} { ", +" if {[send sysWcs$n get label] != \"None\"} {", +" send wiWcs$n set on True", +" }", +" }", +" if {$ism_enable} {", +" resizeCoordsBox $up_todo", +" }", +"", +" } elseif {$track_enable} {", +" set track_enable 0", +" send wcsbox destroy", +"", +" # Turn off the option toggles on the control panel.", +" foreach w {wiWcs1 wiWcs2 wiWcs3 wiWcs4} { send $w set on False }", +" resizeCoordsBox 0", +" }", +" updateCoordsBox", +"}", +"", +"proc wcsboxDestroyCallback args \\", +"{", +" global track_enable", +" send imagewin deleteCallback wcsboxWindowResize", +" set track_enable 0", +"}", +"", +"# If the window is resized make the wcsbox track the corner.", +"proc wcsboxWindowResize args \\", +"{", +" global track_enable", +" global wcsboxGeom", +"", +" if {$track_enable} {", +" # Get new location.", +" set box_width [send wcsbox get width]", +" set box_height [send wcsbox get height]", +" set defGeom [format \"%sx%s-5-5\" $box_width $box_height]", +" send imagewin parseGeometry $wcsboxGeom $defGeom x y width height", +"", +" # Move the marker.", +" send wcsbox \"\\", +" deleteCallback wcsboxMoved; \\", +" markpos; setAttributes x $x y $y; redraw; \\", +" addCallback wcsboxMoved moveResize\"", +" set wcsboxGeom [send imagewin getGeometry $x $y $width $height]", +" }", +"}", +"", +"proc wcsboxMoved {marker event position} \\", +"{", +" global wcsboxGeom", +" send wcsbox getRect boundary x y width height", +" set wcsboxGeom [send imagewin getGeometry $x $y $width $height]", +"}", +"", +"proc resetWcsbox {param old new} \\", +"{", +" global track_enable wcsboxGeom displayCoords", +" if {$new == \"done\"} {", +" setTrack [true $displayCoords]", +" } elseif {$track_enable} {", +" setTrack 0", +" if {$new == \"restart\"} {", +" set wcsboxGeom -5-5", +" }", +" }", +"}; send initialize addCallback resetWcsbox", +"", +"", +"", +"#---------------------", +"# FRAME BLINK.", +"#---------------------", +"set blinkId 0", +"set blinkIndex 0", +"", +"proc toggleBlink args \\", +"{", +" global blinkId blinkRate blinkIndex", +" global optionsMenuDescription", +"", +" if {$blinkId} {", +" deleteTimedCallback $blinkId", +" set blinkId 0", +" } else {", +" set blinkId [postTimedCallback blink [expr int($blinkRate * 1000)]]", +" }", +"", +" set blinkIndex 0", +" editMenu optionsMenu viewButton $optionsMenuDescription", +"}", +"", +"proc blink args \\", +"{", +" global blinkId blinkRate blinkFrames blinkIndex", +"", +" send client setFrame [lindex $blinkFrames $blinkIndex]", +" incr blinkIndex", +" if {$blinkIndex >= [llength $blinkFrames]} {", +" set blinkIndex 0", +" }", +"", +" set blinkId [postTimedCallback blink [expr int($blinkRate * 1000)]]", +"}", +"", +"proc resetBlink args \\", +"{", +" global blinkId", +" if {$blinkId} \\", +" toggleBlink", +"}; send initialize addCallback resetBlink", +"", +"", +"", +"# Normalize -- Reset the view parameters for the current frame.", +"proc normalize args \\", +"{", +" global zoomindex zoomfactor", +" global frameWidth frameHeight", +" global xcen ycen frame", +"", +" #set zoomindex($frame) 0", +" #set xcen [expr $frameWidth / 2]", +" #set ycen [expr $frameHeight / 2]", +" #send client zoom 1 1 $xcen $ycen", +" send client updateColormap 0.5 1.0", +"}", +"", +"", +"# Popdown menus.", +"createMenu fileMenu fileButton {", +" { \"Info\" f.exec { panelTabToggle info_panel } }", +" { \"Load\" f.exec {", +" panelTabToggle load_panel", +" set panel_up 1", +" } }", +" { \"Save\" f.exec { Save } }", +" { \"Save As...\" f.exec { panelTabToggle save_panel } }", +" { \"Print\" f.exec { ", +" send imagewin setCursorType busy", +" Print", +" send imagewin setCursorType idle", +" } }", +" { \"Print Setup\" f.exec { panelTabToggle print_panel } }", +" { f.dblline }", +" { \"Reset\" f.exec {", +" # Do a hard reset.", +" send client Reset", +" #resetView initialize done done", +" } }", +" { \"Debug Panel\" f.exec { tclPanel 1 } }", +" { \"Quit\" f.exec { Quit } }", +"}", +"", +"createMenu viewMenu viewButton {", +" { \"Next frame\" f.exec nextFrame }", +" { \"Prev frame\" f.exec prevFrame }", +" { f.dblline }", +" { \"Colormap\" f.menu cmapMenu }", +" { \"Flip\" f.menu flipMenu }", +" { f.dblline }", +" { \"Equal aspect\" f.exec {", +" set xmag $frameZoomX($frame)", +" set ymag $frameZoomY($frame)", +" set zoom [expr ($xmag + $ymag) / 2.0]", +" cpZoom $zoom $zoom fixed", +" } }", +" { \"Integer zoom\" f.exec {", +" set xmag [expr round ($frameZoomX($frame))]", +" set ymag [expr round ($frameZoomY($frame))]", +" cpZoom $xmag $ymag fixed", +" } }", +" { \"Toggle zoom\" f.exec toggleZoom }", +" { \"Unzoom\" f.exec {", +" set zoomindex($frame) 0", +" set mag $zoomfactor($zoomindex($frame))", +" send client zoom $mag $mag $xcen $ycen", +" } }", +"}", +"", +"createMenu cmapMenu viewMenu {", +" { \"Normalize\" f.exec normalize }", +" { \"Invert\" f.exec cpInvert }", +" { \"Optimize\" f.exec cpOptimize sensitive false }", +" { f.dblline }", +" { \"Grayscale\" f.exec \"send client setColormap Grayscale\" }", +" { \"Color\" f.exec \"send client setColormap Color\" }", +" { \"Heat\" f.exec \"send client setColormap Heat\" }", +" { \"HSV\" f.exec \"send client setColormap HSV\" }", +" { \"AIPS0\" f.exec \"send client setColormap AIPS0\" }", +" { \"Halley\" f.exec \"send client setColormap Halley\" }", +" { \"Ramp\" f.exec \"send client setColormap Ramp\" }", +" { \"Standard\" f.exec \"send client setColormap Standard\" }", +" { \"Staircase\" f.exec \"send client setColormap Staircase\" }", +" { \"Rainbow1\" f.exec \"send client setColormap Rainbow1\" }", +" { \"Rainbow2\" f.exec \"send client setColormap Rainbow2\" }", +" { \"Random8\" f.exec \"send client setColormap Random8\" }", +"}", +"", +"createMenu flipMenu viewMenu {", +" { \"Flip X\" f.exec xflip }", +" { \"Flip Y\" f.exec yflip }", +" { \"Flip XY\" f.exec xyflip }", +"}", +"", +"set optionsMenuDescription {", +" { \"Autoscale\" f.exec {", +" set value [send autoscaleButton get on]", +" send autoscaleButton set on [expr !$value]", +" cpSetAutoscale", +" } }", +" { \"Antialias\" f.exec {", +" set value [send antialiasButton get on]", +" send antialiasButton set on [expr !$value]", +" cpSetAntialias", +" } }", +" { \"Panner\" f.exec { setPanner [expr !$panner_enable] } }", +" { \"Magnifier\" f.exec { setMagnifier [expr !$magnifier_enable] }}", +" { \"Coords box\" f.exec { setTrack [expr !$track_enable] } }", +" { \"Tile frames\" f.exec {", +" set value [send tileFramesButton get on]", +" send tileFramesButton set on [expr !$value]", +" cpSetTileFrames", +" } }", +" { \"Clear frame\" f.exec clearFrame }", +" { \"Fit frame\" f.exec fitFrame }", +" { \"Match LUTs\" f.exec cpMatchFrames }", +" { \"Auto-Register\" f.exec cpAutoRegister }", +" { \"Register\" f.exec cpRegisterFrames }", +" { {$blinkId ? \"Stop blink\" : \"Blink frames\"}", +" f.exec toggleBlink }", +" { f.dblline }", +" { \"Control Panel\" f.exec { panelTabToggle display_panel } }", +" { \"Print Panel\" f.exec { panelTabToggle print_panel } }", +" { \"Load Panel\" f.exec { panelTabToggle load_panel } }", +" { \"Save Panel\" f.exec { panelTabToggle save_panel } }", +"}; createMenu optionsMenu optionsButton $optionsMenuDescription", +"", +"", +"", +"#-------------------------------", +"# Frozen Cursor Warning Message", +"#-------------------------------", +"", +"set ct_warn 0", +"", +"proc curtrack_msg { x y args } \\", +"{", +" global ct_warn last_x last_y winHeight winWidth", +"", +"", +" if {! $ct_warn == 0} {", +" return", +" }", +" ", +" send imagewin createMarker curtrack_warn {", +" type text", +" createMode noninteractive", +" width 25ch", +" height 21", +" lineWidth 0", +" imageText true", +" textBgColor red", +" textColor yellow", +" visible true", +" sensitive true", +" activated true", +" x 5", +" y 5", +" }", +"", +" send curtrack_warn \"set text \\{ CURSOR READOUT FROZEN \\}\"", +" set ypos [ expr ($winHeight - 25) ]", +" send curtrack_warn \"markpos; setAttributes x 5 y $ypos; redraw\"", +" send curtrack_warn \"redraw noerase\"", +" set ct_warn 1", +"", +" # Mark the position of the cursor.", +" send imagewin createMarker x_curpos \\", +" type box \\", +" createMode noninteractive \\", +" lineColor red \\", +" x 1 \\", +" y $last_y \\", +" width $winWidth \\", +" height 1 \\", +" activated True \\", +" visible True \\", +" sensitive False", +"", +" send imagewin createMarker y_curpos \\", +" type box \\", +" createMode noninteractive \\", +" lineColor red \\", +" x $last_x \\", +" y 1 \\", +" width 1 \\", +" height $winHeight \\", +" activated True \\", +" visible True \\", +" sensitive False", +"", +" # Raise the coordinate marker so we can see where we are.", +" send wcsbox raise", +"}", +"", +"", +"proc curtrack_destroy args \\", +"{", +" global ct_warn", +"", +" if {$ct_warn} {", +" send curtrack_warn destroy", +" send x_curpos destroy", +" send y_curpos destroy", +" set ct_warn 0", +" }", +"}", +"", +"", +"################################################################################", +"# CURSOR CENTEROID AND AUTO-REGISTER FUNCTIONS.", +"################################################################################", +"", +"# Set the centroiding box size.", +"set ctid 0", +"set cid 0", +"", +"proc cbxDestroy args \\", +"{", +" global centerBoxSize cid ctid", +" catch { ", +" if {$ctid != 0} {", +" send cbm$cid destroy ", +" deleteTimedCallback $ctid", +" set ctid 0", +" }", +" }", +"}", +"", +"proc setCtrBoxSize { x y delta args } \\", +"{", +" global centerBoxSize cid ctid", +" global cpXscale cpYscale", +"", +" incr centerBoxSize $delta", +" if {$centerBoxSize <= 1} { set centerBoxSize 1 }", +"", +" # Kill off any old markers before drawing the new one.", +" catch { ", +" if {$ctid != 0} {", +" send cbm$cid destroy ", +" deleteTimedCallback $ctid", +" set ctid 0", +" }", +" }", +"", +" # create a transient marker indicating the centering box and post a", +" # callback to delete it in about a second.", +" incr cid", +" send imagewin createMarker cbm$cid \\", +" type box \\", +" createMode noninteractive \\", +" lineColor red \\", +" x $x \\", +" y $y \\", +" width [expr $cpXscale * $centerBoxSize] \\", +" height [expr $cpXscale * $centerBoxSize] \\", +" activated True \\", +" visible True \\", +" sensitive False", +"", +" set ctid [ postTimedCallback cbxDestroy 500]", +"}", +"", +"", +"# Box size is half-width of the marker size. Value is the slider value.", +"set focusBoxSize $winWidth ", +"set focusValue 100.0", +"set fid 0", +"set ftid 0", +"set moving 0", +"", +"proc setFocusBoxSize { sz args } \\", +"{", +" global focusBoxSize fid ftid focusValue moving", +" global winWidth winHeight", +"", +"", +" if { $moving == 0 } {", +" return done", +" }", +"", +" if { $winWidth < $winHeight } {", +" set max [expr $winWidth / 2 - 64]", +" } else {", +" set max [expr $winHeight / 2 - 64]", +" }", +" set focusBoxSize [expr 64 + ($sz * $max) - 1]", +" #send client setOption cmfocus [expr ($focusBoxSize / 2)]", +" send client setOption cmfocus $focusBoxSize", +"", +" # Destroy any existing markers.", +" catch { ", +" if {$ftid != 0} {", +" send fm$fid destroy ", +" set ftid 0", +" }", +" }", +"", +" # create a transient marker indicating the centering box and post a", +" # callback to delete it in about a second.", +" incr fid", +" send imagewin createMarker fm$fid \\", +" type box \\", +" createMode noninteractive \\", +" lineColor green \\", +" lineWidth 4 \\", +" x [expr $winWidth / 2] \\", +" y [expr $winHeight / 2] \\", +" width $focusBoxSize \\", +" height $focusBoxSize \\", +" activated True \\", +" visible True \\", +" sensitive False", +"", +" set ftid [ postTimedCallback fbxDestroy 500]", +" set moving 0", +"}", +"", +"proc fbxDestroy args \\", +"{", +" global fid ftid moving", +" catch { ", +" if {$ftid != 0} {", +" send fm$fid destroy ", +" set ftid 0", +" }", +" }", +"}", +"", +"proc setFocusSize { widget cbtype x y } \\", +"{", +" global focusValue ftid moving", +"", +" # Only update once we've stopped the movement.", +" if { $x == $focusValue && $moving == 1 } {", +" set ftid [ postWorkProc setFocusBoxSize $x ]", +" } else {", +" set moving 1", +" }", +" set focusValue $x", +"} ; send focusSlider addCallback setFocusSize scroll", +"", +"", +"# Compute a centroid offset for the current position to peak-up on the", +"# feature.", +"", +"proc centroid { x y type args } \\", +"{", +" global centerBoxSize", +" global cpXscale cpYscale", +"", +" # Convert to image coords.", +" set sz [expr \"int ($centerBoxSize * $cpXscale)\"]", +"", +" # Get the centroid position.", +" if {$type != \"min\"} {", +" if {[send peakupButton get on]} {", +" set center [ send client centroid $x $y $sz ]", +" } else {", +" set center [ send client centroid $x $y $sz max ]", +" }", +" } else {", +" set center [ send client centroid $x $y $sz min ]", +" }", +"", +" # Now reposition the cursor.", +" set xoff [lindex $center 0 ]", +" set yoff [lindex $center 1 ]", +" move_cursor $xoff $yoff", +"}", +"", +"", +"# Set the auto-register center offset position", +"proc offset { x y args } \\", +"{", +" global frame blinkFrames auto_reg", +" global frameCenterX frameCenterY", +" global frameOffsetX frameOffsetY", +"", +" # No-op of auto-register isn't on.", +" if { $auto_reg == 0 } {", +" Wexec client \"Auto-Register is not enabled!\"", +" return", +" }", +"", +" # If we're not in the blink frames list ignore the request.", +" if { [string first $frame $blinkFrames] == -1 } {", +" Wexec client \"Frame not in current\\nregister list.\"", +" return", +" }", +"", +" set rx $x; set ry $y", +" set raster 0", +"", +" # Convert raw screen coordinates to frame buffer raster coordinates.", +" send imagewin unmapPixel $x $y raster rx ry", +"", +" # Select a pixel.", +" set xoff [expr \"int ($rx) - $frameCenterX($frame)\" ]", +" set yoff [expr \"int ($ry) - $frameCenterY($frame)\" ]", +"", +" set frameOffsetX($frame) $xoff", +" set frameOffsetY($frame) $yoff", +"", +" # Adjust the display.", +" send client setOffset $xoff $yoff", +"}", +"", +"", +"", +"################################################################################", +"# MAIN CONTROL PANEL", +"################################################################################", +"", +"", +"# Global control panel buttons.", +"# -------------------------------", +"proc cpInitialize args \\", +"{", +" send imagewin setCursorType busy", +" send client initialize", +" send imagewin setCursorType idle", +"}", +"send initializeButton addCallback cpInitialize", +"send normalizeButton addCallback normalize", +"", +"# Temporarily deactivate some buttons.", +"send optimizeButton setSensitive false", +"", +"#-----------------------------------------------------------------------------", +"", +"foreach i $frames {set saveView($i) \"1 1\"}", +"", +"send prevFrame set bitmap larrow", +"send nextFrame set bitmap rarrow", +"send contrastLabel set bitmap contrast", +"send brightnessLabel set bitmap brightness", +"send contrastSlider resizeThumb 0.1 1.0", +"send brightnessSlider resizeThumb 0.1 1.0", +"send focusSlider \"resizeThumb 0.1 1.0 ; moveThumb 1.0\"", +"", +"", +"# panel -- Toggle control panel display.", +"proc panel args \\", +"{", +" global panel_up", +" if {$panel_up} {", +" send panelShell unmap", +" set panel_up 0", +" } else {", +" send panelShell map", +" set panel_up 1", +" }", +"}", +"", +"proc pbTracePanel {name element op} \\", +"{", +" catch {", +" upvar $name panel_up", +" send controlButton set state $panel_up", +" }", +"} ; trace variable panel_up w pbTracePanel", +"", +"", +"# resetPanel -- Calling during startup or in an initialize, to reset things.", +"proc resetPanel {param old new} \\", +"{", +" global frame nframes frames", +" global displayPanner displayMagnifier displayCoords", +" global blinkFrames warnings peakCentroid", +"", +" switch $new {", +" startup {", +" }", +" restart { foreach i $frames {", +" send frame$frame set on 0", +" }", +"", +" # Initialize to hide the extra frames.", +" send frlistBox set width 30", +" }", +" done { if {$frame} {", +" send frame$frame set on 1", +" }", +"", +" cpResetBlink", +" set button 1", +" foreach i {1 2 3 4} {", +" send blinkFrame$button set label $i", +" incr button", +" }", +" for {set i 1} {$i <= 16} {incr i} {", +" send brFrame$i set label $i", +" }", +"", +" cpResetEnhance", +" send pannerButton set on [true $displayPanner]", +" send magnifierButton set on [true $displayMagnifier]", +" send coordsBoxButton set on [true $displayCoords]", +" send warningsButton set on $warnings", +" send peakupButton set on [true $peakCentroid]", +" }", +" }", +"}; send initialize addCallback resetPanel", +"", +"", +"", +"# Control Panel Tabs widget procedures.", +"#----------------------------------------", +"", +"set cpTabs { display_panel print_panel load_panel save_panel \\", +" info_panel wcs_panel tile_panel}", +"set tabTop \"display_panel\"", +"", +"", +"# Resize the control panel depending on the Tab selected.", +"proc cpResizeCB { widget event a b c d e args } \\", +"{", +" global tabTop fileList", +"", +" # Handle only the first exposure event generated.", +" if { $a == 0 && $b == 0 && $c == 0 && $d == 0 && $e == 0 } {", +" set tabTop $widget", +"", +" switch $widget {", +" display_panel { send panel set height 595 }", +" print_panel { send panel set height 545 }", +" load_panel { send panel set height 485 ", +" if { [send browseHdrs get on] } {", +" send imageList setList $fileList resize", +" } else {", +" send client setLoadOption rescan", +" }", +" }", +" save_panel { send panel set height 325 }", +" info_panel { send panel set height 380 }", +" tile_panel { send panel set height 405 }", +" wcs_panel { setCoordPanelHeight }", +" }", +" }", +"} ; foreach w $cpTabs { send $w addEventHandler cpResizeCB exposureMask }", +"", +"", +"proc panelDismiss args \\", +"{", +" global panel_up", +" send panelShell unmap", +" set panel_up 0", +"} ; send panelClose addCallback panelDismiss", +"", +"", +"proc panelTabToggle { panel args } \\", +"{", +" global tabTop panel_up TabToWidget", +"", +" if {$tabTop == $panel && $panel_up} {", +" send panelShell unmap", +" send $TabToWidget($panel) set state 0", +" set panel_up 0", +"", +" } else {", +" # Special cases for each panel.", +" if {$panel == \"load_panel\"} {", +" send client setLoadOption rescan", +" }", +"", +" send panelTabs setTop $panel", +" set tabTop $panel", +"", +" # Now fire it up if it's not already open.", +" if {$panel_up == 0} {", +" send panelShell map", +" set panel_up 1", +" }", +"", +" }", +"}", +"", +"proc displayPanel args { panelTabToggle display_panel }", +"proc infoPanel args { panelTabToggle info_panel }", +"proc loadPanel args { panelTabToggle load_panel }", +"proc savePanel args { panelTabToggle save_panel }", +"proc printPanel args { panelTabToggle print_panel }", +"proc tilePanel args { panelTabToggle tile_panel }", +"proc wcsPanel args { panelTabToggle wcs_panel }", +"", +"", +"", +"", +"# Frame selection.", +"# -------------------------------", +"proc cpSetFrame {widget args} \\", +"{", +" send $widget set on 0", +" send client setFrame [send $widget get label]", +"}", +"", +"proc cpFrameChanged {param old new} \\", +"{", +" global frameCache", +"", +" if {$old > 0} {", +" send frame$old set on 0", +" }", +" if {$new > 0} {", +" send frame$new set on 1", +" }", +"", +" # The first time we request frame 5 or higher reset ", +" # the extra frame buttons on the control panel to make", +" # them visible.", +" if {$new >= 5} {", +" send frlistBox set width 49", +" }", +"", +" # Update the header panel object list.", +" catch {", +" # Only update when the header panel is open.", +" if {[info exists frameCache($new)] && [send imageHeader get on]} {", +" setHdrObjMenu $new", +" getHeader [lindex $frameCache($new) 0] [lindex $frameCache($new) 1]", +" }", +" }", +"}", +"", +"send prevFrame addCallback prevFrame", +"send nextFrame addCallback nextFrame", +"send frame addCallback cpFrameChanged", +"for {set i 1} {$i <= 16} {incr i} {send frame$i addCallback cpSetFrame}", +"", +"# Initialize to hide the extra frames.", +"send frlistBox set width 30", +"", +"proc blinkPanelCB { widget type state args } \\", +"{", +" if {$state} {", +" send blink_panel map", +" } else {", +" send blink_panel unmap", +" }", +"} ; send blinkPanel addCallback blinkPanelCB", +"", +"proc blinkPanelClose args \\", +"{", +" send blink_panel unmap", +" send blinkPanel set state 0", +"} ; send brClose addCallback blinkPanelClose", +"", +"", +"", +"# Frame buttons.", +"proc cpFrameAction {widget args} \\", +"{", +" global frameZoomX frameZoomY frame", +" switch $widget {", +" aspect { set xmag $frameZoomX($frame)", +" set ymag $frameZoomY($frame)", +" set zoom [expr round (($xmag + $ymag) / 2.0)]", +" cpZoom $zoom $zoom fixed", +" }", +" flipX { send client flip x }", +" flipY { send client flip y }", +" flipXY { send client flip x y }", +" clearFrame { clearFrame }", +" fitFrame { fitFrame }", +" }", +"}", +"foreach widget {aspect flipX flipY flipXY clearFrame fitFrame} {", +" send $widget addCallback cpFrameAction", +"}", +"", +"# clearFrame -- Clear the current display frame.", +"proc clearFrame args \\", +"{", +" global warnings", +" if {$warnings} {", +" Wexec client \\", +" \"Clearing the frame will destroy\\n\\", +" all data in the frame\" \\", +" clearFrame", +" } else {", +" send client clearFrame", +" }", +"}", +"", +"# fitFrame -- Resize the display window to fit the frame buffer.", +"proc fitFrame args \\", +"{", +" global frameWidth frameHeight winWidth winHeight", +" set dw [expr [send display get width] - $winWidth]", +" set dh [expr [send display get height] - $winHeight]", +" send display \"resize [expr $frameWidth + $dw] [expr $frameHeight + $dh]\"", +"}", +"", +"proc initFitFrame { param old new } \\", +"{", +" if { [lindex $new 0] == \"resize\"} {", +" fitFrame", +" }", +" pannerMapImage init", +"}; send frameFit addCallback initFitFrame", +"", +"", +"", +"# Zoom and pan buttons.", +"# -------------------------------", +"proc cpZoomAction {widget args} \\", +"{", +" global frameWidth frameHeight", +"", +" switch $widget {", +" x1 { cpZoom 1 1 fixed }", +" z2 { cpZoom 2 2 fixed }", +" z3 { cpZoom 3 3 fixed }", +" z4 { cpZoom 4 4 fixed }", +" z5 { cpZoom 5 5 fixed }", +" z8 { cpZoom 8 8 fixed }", +"", +" d2 { cpZoom [expr 1.0/2] [expr 1.0/2] fixed }", +" d3 { cpZoom [expr 1.0/3] [expr 1.0/3] fixed }", +" d4 { cpZoom [expr 1.0/4] [expr 1.0/4] fixed }", +" d5 { cpZoom [expr 1.0/5] [expr 1.0/5] fixed }", +" d8 { cpZoom [expr 1.0/8] [expr 1.0/8] fixed }", +"", +" zoomIn { cpZoom 2.0 2.0 relative }", +" zoomOut { cpZoom 0.5 0.5 relative }", +"", +" centerFrame { send client pan \\", +" [expr $frameWidth/2.0] \\", +" [expr $frameHeight/2.0]", +" }", +" toggleZoom { toggleZoom }", +" }", +"}", +"", +"proc cpZoom {zoom_x zoom_y mode} \\", +"{", +" global frameZoomX frameZoomY zoomindex frame", +" global frameOffsetX frameOffsetY frameCenterX frameCenterY", +"", +" if {$mode == \"fixed\"} {", +" #send client zoom $zoom_x $zoom_y", +" send client zoomAbs $zoom_x $zoom_y \\", +" $frameCenterX($frame) $frameCenterY($frame) \\", +" $frameOffsetX($frame) $frameOffsetY($frame)", +" } else {", +" #send client zoom \\", +" # [expr $frameZoomX($frame) * $zoom_x] \\", +" # [expr $frameZoomY($frame) * $zoom_y]", +" send client zoomAbs \\", +" [expr $frameZoomX($frame) * $zoom_x] \\", +" [expr $frameZoomY($frame) * $zoom_y] \\", +" $frameCenterX($frame) $frameCenterY($frame) \\", +" $frameOffsetX($frame) $frameOffsetY($frame)", +" }", +"", +" set zoomindex($frame) 0", +"}", +"", +"proc toggleZoom args \\", +"{", +" global frameZoomX frameZoomY frameCenterX frameCenterY", +" global frameWidth frameHeight saveView frame", +"", +" if {$frameZoomX($frame) != 1 && $frameZoomY($frame) != 1} {", +" set saveView($frame) \\", +" \"$frameZoomX($frame) $frameZoomY($frame) \\", +" $frameCenterX($frame) $frameCenterY($frame)\"", +" send client zoom 1 1 \\", +" [expr $frameWidth/2.0] \\", +" [expr $frameHeight/2.0]", +" } else {", +" send client zoom $saveView($frame)", +" }", +"}", +"", +"foreach widget { toggleZoom centerFrame zoomIn zoomOut \\", +" x1 z2 z3 z4 z5 z8 d2 d3 d4 d5 d8 } {", +" send $widget addCallback cpZoomAction", +"}", +"", +"# Frame data display.", +"# -------------------------------", +"set cpFrame 0", +"set cpXcen 0", +"set cpYcen 0", +"set cpXmag 0", +"set cpYmag 0", +"set cpXscale 0", +"set cpYscale 0", +"set cpXoff 0", +"set cpYoff 0", +"", +"proc cpDisplayFrameData {name old new} \\", +"{", +" global cpFrame cpXcen cpYcen cpXoff cpYoff", +" global cpXmag cpYmag cpXscale cpYscale", +"", +" set update 0", +" switch $name {", +" frame { if {$new != $cpFrame} {", +" set cpFrame $new", +" set update 1", +" }", +" }", +" frameView { # Parse the frameView input.", +" set xmag [lindex $new 0]; set ymag [lindex $new 1]", +" set xcen [lindex $new 2]; set ycen [lindex $new 3]", +" set xnorm [lindex $new 4]; set ynorm [lindex $new 5]", +" set xoff [lindex $new 6]; set yoff [lindex $new 7]", +"", +" # We need client coords and the overall scale factors.", +" set text [send client encodewcs $xcen $ycen]", +" set xcen [lindex $text 0]", +" set ycen [lindex $text 1]", +" set xscale [expr $xmag * $xnorm]", +" set yscale [expr $ymag * $ynorm]", +"", +" if {$xcen != $cpXcen || $ycen != $cpYcen ||", +" $xmag != $cpXmag || $ymag != $cpYmag ||", +" $xoff != $cpXoff || $yoff != $cpYoff ||", +" $xscale != $cpXscale || $yscale != $cpYscale} {", +"", +" set cpXcen $xcen; set cpXscale $xscale", +" set cpYcen $ycen; set cpYscale $yscale", +" set cpXmag $xmag; set cpXoff $xoff; ", +" set cpYmag $ymag; set cpYoff $yoff;", +" set update 1", +" }", +" }", +" }", +"", +" if {$update} {", +" set header [format \"-- Frame %d --\" $cpFrame]", +" set center [format \"X center: %0.1f\\nY center: %0.1f\" $cpXcen $cpYcen]", +" if {int($cpXmag) >= 10} {", +" set zoom1 [format \" X zoom: %0.1f\" $cpXmag]", +" set zoom2 [format \" Y zoom: %0.1f\" $cpYmag]", +" } else {", +" set zoom1 [format \"X zoom: %0.1f\" $cpXmag]", +" set zoom2 [format \"Y zoom: %0.1f\" $cpYmag]", +" }", +" if {int($cpXscale) >= 10} {", +" set scale1 [format \"X scale: %0.1f\" $cpXscale]", +" set scale2 [format \"Y scale: %0.1f\" $cpYscale]", +" } else {", +" set scale1 [format \"X scale: %0.2f\" $cpXscale]", +" set scale2 [format \"Y scale: %0.2f\" $cpYscale]", +" }", +" set offset [format \" Offset: (%0.1f,%0.1f)\" $cpXoff $cpYoff]", +"", +" send frameData set label [format \"%s\\n%s\\n%s\\n%s\\n%s\\n%s\\n%s\" \\", +" $header $center $scale1 $scale2 $zoom1 $zoom2 $offset \\", +" ]", +" }", +"}; foreach p {frame frameView} {send $p addCallback cpDisplayFrameData}", +"", +"", +"# Frame enhancement.", +"# -------------------------------", +"set cpEnhanceDisable 0", +"set cpEnhanceId 0", +"set cpEnhanceMode none", +"set cpEnhanceVal 0", +"set cpListItem none", +"", +"# Windowing the colormap is slow when the mouse is not in the image window,", +"# so it is necessary to execute the windowColormap in a work procedure.", +"# This allows any number of slider motion events to be processed for each", +"# windowColormap, preventing slider events from queueing up.", +"", +"proc cpResetEnhance args \\", +"{", +" global cpListItem cpEnhanceId", +" set cpListItem none", +" set cpEnhanceId 0", +"}", +"", +"proc cpSetEnhancement {widget cbtype x y} \\", +"{", +" global cpEnhanceMode cpEnhanceVal cpEnhanceId cpEnhanceDisable", +" set cpEnhanceMode $widget", +" set cpEnhanceVal $x", +" if {!$cpEnhanceId && !$cpEnhanceDisable} {", +" set cpEnhanceId [postWorkProc cpEnhanceProc]", +" }", +"}", +"proc cpEnhanceProc args \\", +"{", +" global cpEnhanceMode cpEnhanceVal cpEnhanceId", +" global enhancement frame maxContrast", +" set val $cpEnhanceVal", +"", +" if {$cpEnhanceMode == \"contrastSlider\"} {", +" set contrast [lindex $enhancement($frame) 2]", +" send client windowColormap [lindex $enhancement($frame) 1] \\", +" [expr (($contrast < 0) ? -$val : $val) * $maxContrast] ", +" } else {", +" send client windowColormap $val", +" }", +"", +" set cpEnhanceId 0", +" return done", +"}", +"", +"proc cpInvert args \\", +"{", +" global enhancement frame", +" set contrast [lindex $enhancement($frame) 2]", +" send client updateColormap [lindex $enhancement($frame) 1] \\", +" [expr -1.0 * $contrast]", +"}", +"", +"proc cpDisplayEnhancement {param old new} \\", +"{", +" global cpEnhanceId maxContrast cpEnhanceDisable", +" global cpListItem enhancement frame", +"", +" if {!$frame} \\", +" return", +" set enhance $enhancement($frame)", +" if {[llength $enhance] < 3} \\", +" return", +"", +" set colortable [lindex $enhance 0]", +" set offset [lindex $enhance 1]", +" set scale [lindex $enhance 2]", +"", +" send colordata set label [format \"-- %s --\\nCon %0.2f Brt %0.2f\" \\", +" $colortable $scale $offset]", +"", +" if {$colortable != $cpListItem} {", +" send colorlist highlight $colortable", +" set cpListItem $colortable", +" }", +"", +" if {!$cpEnhanceId && !$cpEnhanceDisable} {", +" set cpEnhanceDisable 1", +" send contrastSlider moveThumb [expr abs($scale) / $maxContrast]", +" send brightnessSlider moveThumb $offset", +" set cpEnhanceDisable 0", +" }", +"}", +"", +"foreach i {enhancement frame} {", +" send $i addCallback cpDisplayEnhancement", +"}", +"send contrastSlider addCallback cpSetEnhancement scroll", +"send brightnessSlider addCallback cpSetEnhancement scroll", +"send invertButton addCallback cpInvert", +"", +"", +"# Colortable display and selection.", +"# -------------------------------", +"set colorTables {}", +"", +"proc cpSetColorList {param old new} \\", +"{", +" set colorTables $new", +" send colorlist setList $new resize", +"}; send colortables addCallback cpSetColorList", +"", +"proc colorlistResize args \\", +"{", +" global colorTables", +" send colorlist setList $colorTables resize", +"}; send colorlist addEventHandler colorlistResize ResizeRedirectMask", +"", +"proc cpSelectColor {widget cbtype selections indices} \\", +"{", +" global colortable", +" foreach selection $selections {", +" send client setColormap $selection", +" }", +"}; send colorlist addCallback cpSelectColor", +" ", +"", +"# Frame blink.", +"# -------------------------------", +"send BRtext set label $blinkRate", +"send brBRtext set label $blinkRate", +"", +"proc cpSetBlinkRate {w args} \\", +"{", +" global blinkRate", +" if {$w == \"BRincrease\" || $w == \"brBRincrease\"} {", +" if {$blinkRate < 0.01} {", +" set blinkRate 0.125", +" } else {", +" set blinkRate [expr $blinkRate * 2.0]", +" }", +" } else {", +" set blinkRate [expr $blinkRate / 2.0]", +" if {$blinkRate < 0.01} {", +" set blinkRate 0", +" }", +" }", +" send BRtext set label $blinkRate", +" send brBRtext set label $blinkRate", +"}", +"foreach w {BRincrease BRdecrease brBRincrease brBRdecrease} {", +" send $w addCallback cpSetBlinkRate", +"}", +"", +"proc cpSetBlinkFrame {widget args} \\", +"{", +" global blinkFrames frames nframes", +"", +" set frame [send $widget get label]", +" if {$frame == \" \"} {", +" set frame 1", +" } else {", +" incr frame", +" if {$frame > $nframes} {", +" set frame \" \"", +" }", +" }", +" send $widget set label $frame", +"", +" set blinkFrames {}", +" foreach i {1 2 3 4} {", +" set frame [send blinkFrame$i get label]", +" if {$frame != \" \"} {", +" lappend blinkFrames $frame", +" }", +" }", +"}; foreach i {1 2 3 4} {send blinkFrame$i addCallback cpSetBlinkFrame}", +"", +"proc cpBlink {widget args} \\", +"{", +" global blinkRate blinkId", +"", +" if {$blinkRate < 0.01} {", +" send blinkButton set on False", +" send brBlinkButton set on False", +" blink", +" } elseif {($blinkId != 0) != [send $widget get on]} {", +" toggleBlink", +" }", +"} ; foreach w {blinkButton brBlinkButton} {send $w addCallback cpBlink}", +"", +"", +"proc cpAutoRegister {widget type state args} \\", +"{", +" global auto_reg frame frames blinkFrames", +" global frameZoomX frameZoomY frameOffsetX frameOffsetY", +"", +" set auto_reg $state", +" if {$auto_reg == 1} {", +" send autoregButton set on True", +" send brAregButton set on True", +" } else {", +" send autoregButton set on False", +" send brAregButton set on False", +" }", +"", +" # Register the frames to zero the offsets.", +" send client registerFrames \\{$blinkFrames\\}", +" foreach f $frames {", +" set frameOffsetX($f) 0", +" set frameOffsetY($f) 0", +" }", +"} ; foreach w {autoregButton brAregButton} {send $w addCallback cpAutoRegister}", +"", +"", +"proc toggleAutoReg args \\", +"{", +" global auto_reg", +" if {$auto_reg} {", +" cpAutoRegister autoregButton dummy 0 ", +" set auto_reg 0", +" } else {", +" cpAutoRegister autoregButton dummy 1 ", +" set auto_reg 1", +" }", +"}", +"", +"proc resetAutoReg args \\", +"{", +" global auto_reg", +" if {$auto_reg} \\", +" toggleAutoReg", +"}; send initialize addCallback resetAutoReg", +"", +"", +"proc cpResetBlink args \\", +"{", +" global blinkRate blinkFrames blinkIndex frames", +" global defaultBlinkRate", +"", +" foreach i {1 2 3 4} {", +" send blinkFrame$i set label \" \"", +" }", +" for {set i 1} {$i <= 16} {incr i} {", +" send brFrame$i set label $i", +" }", +" set blinkRate $defaultBlinkRate", +" send BRtext set label $blinkRate", +" send brBRtext set label $blinkRate", +" set blinkIndex 0", +"} ", +"send blinkReset addCallback cpResetBlink", +"send brReset addCallback cpResetBlink", +"", +"proc cpTraceBlink {name element op} \\", +"{", +" upvar $name blinkId", +" send blinkButton set on [expr $blinkId != 0]", +" send brBlinkButton set on [expr $blinkId != 0]", +"}; trace variable blinkId w cpTraceBlink", +"", +"proc cpSetBlinkFrames {param old new} \\", +"{", +" global blinkFrames frames", +"", +" set blinkFrames {}", +" foreach i $frames {", +" if {$i <= $new} {", +" lappend blinkFrames $i", +" }", +" }", +" cpResetBlink", +" set button 1", +" for {set i 1} {$i <= $new} {incr i} {", +" if {$i <= 4} {", +" send blinkFrame$button set label $i", +" }", +" send brFrame$button set label $i", +" incr button", +" }", +"}; send nframes addCallback cpSetBlinkFrames", +"", +"proc cpRegisterFrames args \\", +"{", +" global frames blinkFrames", +" global frameOffsetX frameOffsetY", +"", +" foreach f $frames {", +" set frameOffsetX($f) 0", +" set frameOffsetY($f) 0", +" }", +" send client registerFrames \\{$blinkFrames\\}", +"}", +"send registerButton addCallback cpRegisterFrames", +"send brRegButton addCallback cpRegisterFrames", +"", +"proc cpMatchFrames args \\", +"{", +" global blinkFrames", +" send client matchFrames \\{$blinkFrames\\}", +"}", +"send matchButton addCallback cpMatchFrames", +"send brMatchButton addCallback cpMatchFrames", +"", +"", +"# Options buttons.", +"# -------------------------------", +"proc cpSetPanner {widget args} \\", +"{", +" setPanner [send $widget get on]", +"}; send pannerButton addCallback cpSetPanner", +"", +"proc cpTracePanner {name element op} \\", +"{", +" upvar $name panner_enable", +" send pannerButton set on $panner_enable", +"}; trace variable panner_enable w cpTracePanner", +"", +"proc cpSetMagnifier {widget args} \\", +"{", +" setMagnifier [send $widget get on]", +"}; send magnifierButton addCallback cpSetMagnifier", +"", +"proc cpTraceMagnifier {name element op} \\", +"{", +" upvar $name magnifier_enable", +" send magnifierButton set on $magnifier_enable", +"}; trace variable magnifier_enable w cpTraceMagnifier", +"", +"proc cpSetCoordsBox {widget args} \\", +"{", +" setTrack [send $widget get on]", +"}; send coordsBoxButton addCallback cpSetCoordsBox", +"", +"proc cpTraceCoordsBox {name element op} \\", +"{", +" upvar $name track_enable", +" send coordsBoxButton set on $track_enable", +"}; trace variable track_enable w cpTraceCoordsBox", +"", +"proc cpSetWarnings args \\", +"{", +" global warnings", +" set warnings [send warningsButton get on]", +"}; send warningsButton addCallback cpSetWarnings", +"", +"proc cpSetAutoscale args \\", +"{", +" set value [send autoscaleButton get on]", +" send client setOption autoscale [expr {$value ? \"True\" : \"False\"}]", +"}; send autoscaleButton addCallback cpSetAutoscale", +"", +"proc cpTrackAutoscale {param old new} \\", +"{", +" send autoscaleButton set on [true $new]", +"}; send autoscale addCallback cpTrackAutoscale", +"", +"proc cpSetAntialias args \\", +"{", +" set value [send antialiasButton get on]", +" send client setOption antialias [expr {$value ? \"True\" : \"False\"}]", +"}; send antialiasButton addCallback cpSetAntialias", +"", +"proc cpTrackAntialias {param old new} \\", +"{", +" send antialiasButton set on [true $new]", +"}; send antialias addCallback cpTrackAntialias", +"", +"proc cpSetTileFrames { widget type state args } \\", +"{", +" global tile_frames tileOpt", +"", +" set value [send tileFramesButton get on]", +" if {$value} {", +" selectTileOrientation junk junk [tileSelToLabel $tileOpt]", +" } else {", +" selectTileOrientation junk junk Disabled", +" }", +" send client setOption tileFrames \\", +" [expr {$value ? \"True\" : \"False\"}] \\{ $tile_frames \\}", +"} ; send tileFramesButton addCallback cpSetTileFrames", +"", +"proc cpTrackTileFrames {param old new} \\", +"{", +" send tileFramesButton set on [true $new]", +"}; send tileFrames addCallback cpTrackTileFrames", +"", +"proc tileFramesToggle args \\", +"{", +" set value [send tileFramesButton get on]", +" send tileFramesButton set on [expr !$value]", +" cpSetTileFrames", +"}", +"", +"", +"################################################################################", +"# MAGNIFIER. A subraster around the cursor in the main image window is", +"# displayed at a high resolution in a marker (known as the magnifier window)", +"# within the main image window.", +"################################################################################", +"", +"set magnifier_x 0", +"set magnifier_y 0", +"set magnifier_width 0", +"set magnifier_height 0", +"set mrm_width 0", +"set mrm_height 0", +"", +"set magnifier_enable 0", +"set magnifier_mag_enable 0", +"set magnifier_mapping 0", +"", +"createMenu magzoomMenu imagewin {", +" { \"Zoom Factors\" f.title }", +" { f.dblline }", +" { \"Zoom 1\" f.exec \"setMagnifierZoom 1\" }", +" { \"Zoom 2\" f.exec \"setMagnifierZoom 2\" }", +" { \"Zoom 4\" f.exec \"setMagnifierZoom 4\" }", +" { \"Zoom 8\" f.exec \"setMagnifierZoom 8\" }", +" { \"Zoom 16\" f.exec \"setMagnifierZoom 16\" }", +"} ", +"", +"# Magnifier window translations.", +"set magnifierWinTranslations { \\", +" !Shift : m_rotateResize()", +" : m_moveResize()", +" !Shift : m_raise() m_markpos()", +" : m_raise() m_markposAdd()", +" : m_redraw() m_destroyNull()", +" : m_lower()", +" : popup(magzoomMenu)", +" : popdown(magzoomMenu)", +" !Ctrl m: call(toggleMagnifier)", +" !Ctrl p: call(togglePanner)", +" BackSpace: m_deleteDestroy()", +" Delete: m_deleteDestroy()", +" : graphics-input()", +" : track-cursor() call(wcsUpdate,$x,$y)", +"}", +"", +"", +"# setMagnifier -- Turn the magnifier on or off.", +"", +"set magAlreadyOn 0", +"", +"proc setDynamicMagnifier {state} \\", +"{", +" global magAlreadyOn magnifier_enable", +"", +" if {$state} {", +" set magAlreadyOn $magnifier_enable", +" }", +" if {$magAlreadyOn} {", +" return", +" } else {", +" setMagnifier $state", +" }", +"}", +"", +"proc toggleMagnifier args \\", +"{", +" global magnifier_enable", +" if {$magnifier_enable} {", +" setMagnifier 0", +" } else {", +" setMagnifier 1", +" }", +"}", +"", +"", +"proc setMagnifier {state} \\", +"{", +" global winWidth winHeight frameWidth frameHeight", +" global frame magnifier_mapping magnifierWinTranslations magnifierArea", +" global magnifier_enable magnifier_height", +" global magnifierGeom magnifier_x magnifier_y magnifier_width", +"", +" if {$state} {", +" if {$magnifier_enable} \\", +" return", +"", +" # Determine where to place the magnifier.", +" set scale [expr sqrt(double($magnifierArea) / (512 * 512))]", +" set scaled_width [expr int(512 * $scale) / 2 * 2 + 1]", +" set scaled_height [expr int(512 * $scale) / 2 * 2 + 1]", +" set defGeom [format \"%sx%s-5+5\" $scaled_width $scaled_height]", +" send imagewin parseGeometry $magnifierGeom $defGeom x y width height", +"", +" # Create the main magnifier window (marker).", +" send imagewin createMarker magnifierWin \\", +" type rectangle \\", +" createMode noninteractive \\", +" width [expr $width / 2] \\", +" height [expr $height / 2] \\", +" x [expr $x + $width / 2] \\", +" y [expr $y + $height / 2] \\", +" lineColor 8 \\", +" highlightColor 8 \\", +" translations $magnifierWinTranslations \\", +" visible true \\", +" sensitive true \\", +" activated true", +"", +" # Update the magnifier window position variables so that it comes up", +" # in the same place the next time.", +"", +" send magnifierWin getRect boundary \\", +" magnifier_x magnifier_y magnifier_width magnifier_height", +" set magnifierGeom [send imagewin getGeometry \\", +" $magnifier_x $magnifier_y $magnifier_width $magnifier_height]", +"", +" # Register callbacks.", +" send imagewin addCallback magnifierImagewinResized resize", +" send resize addCallback magnifierImagewinResized", +" send magnifierWin addCallback magnifierMovedMapImage moveResize", +"", +" send magnifierWin {", +" addCallback magnifierMoved moveResize;", +" addCallback magnifierDestroy destroy;", +" addCallback magnifierWinConstraint constraint;", +" }", +"", +" # Map display frame to magnifier window.", +" set magnifier_enable 1", +" set magnifier_mapping [send imagewin nextMapping]", +" send imagewin refreshMapping $magnifier_mapping", +"", +" # create cross-hair", +" send imagewin createMarker magPointer \\", +" type rectangle \\", +" createMode noninteractive \\", +" width 3 \\", +" height 3 \\", +" lineWidth 3 \\", +" lineColor green \\", +" highlightcolor green \\", +" activated true \\", +" visible true", +"", +" # set its position and size", +" setMagPointerPosition ", +" magnifierMapImage [expr $winWidth / 2] [expr $winHeight / 2]", +"", +" } elseif {$magnifier_enable} {", +" magnifierDestroy", +" }", +"}", +"", +"", +"# magnifierDestroy -- Delete the magnifier.", +"", +"proc magnifierDestroy args \\", +"{", +" global magnifier_enable ", +" global magnifier_mapping", +"", +" if {$magnifier_enable} {", +" set magnifier_enable 0", +"", +" send imagewin freeMapping $magnifier_mapping", +" send imagewin deleteCallback magnifierImagewinResized", +" send resize deleteCallback magnifierImagewinResized", +" send frame deleteCallback magnifierMapImage", +"", +" if [send server queryObject magnifierWin] {", +" send magnifierWin destroy", +" }", +" if [send server queryObject magPointer] {", +" send magPointer destroy", +" } ", +" }", +"}", +"", +"", +"# magnifierMoved -- Called when the user moves the magnifier window. We need to", +"# move the region marker to the new window location and record the new location", +"# so that the window will come up in the same place if closed and reopened.", +"", +"proc magnifierMoved {marker event position} \\", +"{", +" global winWidth winHeight magnifierGeom frame ", +" global magnifier_x magnifier_y magnifier_width magnifier_height", +"", +" # Move the region marker to the new location.", +" send client getSource raster sx sy snx sny", +"", +" # Update the magnifier window position variables so that it comes up", +" # in the same place the next time.", +"", +" send magnifierWin getRect boundary \\", +" magnifier_x magnifier_y magnifier_width magnifier_height", +" set magnifierGeom [send imagewin getGeometry \\", +" $magnifier_x $magnifier_y $magnifier_width $magnifier_height]", +"}", +"", +"", +"# magnifierWinConstraint -- Called when the magnifier window is moved, resized,", +"# or rotated. Constrain the magnifier window to remain within the image window;", +"# rotation is not permitted.", +"", +"proc magnifierWinConstraint {marker event attributes} \\", +"{", +" global winWidth winHeight", +" global magnifier_width magnifier_height", +"", +" set width $magnifier_width", +" set height $magnifier_height", +" set constraints [list {}]", +"", +" # Check the width and height first as we need these below.", +" foreach i $attributes {", +" set new [lindex $i 2]", +" switch [lindex $i 0] {", +" width { set ww [expr $winWidth / 2]", +" if {$new > $ww} {", +" lappend constraints \"width $ww\"", +" set width $ww", +" } else {", +" set width $new", +" }", +" }", +" height { set wh [expr $winHeight / 2]", +" if {$new > $wh} {", +" lappend constraints \"height $wh\"", +" set height $wh", +" } else {", +" set height $new", +" }", +" }", +" rotangle { lappend constraints \"rotangle 0\"", +" }", +" }", +" }", +"", +" # Constrain X and Y.", +" foreach i $attributes {", +" set new [lindex $i 2]", +" switch [lindex $i 0] {", +" x { set pw [expr $width / 2]", +" if {$new < $pw} {", +" lappend constraints \"x $pw\"", +" } elseif {$new > $winWidth - $pw} {", +" lappend constraints \"x [expr $winWidth - $pw]\"", +" }", +" }", +" y { set ph [expr $height / 2]", +" if {$new < $ph} {", +" lappend constraints \"y $ph\"", +" } elseif {$new > $winHeight - $ph} {", +" lappend constraints \"y [expr $winHeight - $ph]\"", +" }", +" }", +" }", +" }", +"", +" return $constraints", +"}", +"", +"", +"# magnifierRegionConstraint -- Called when the region marker in the magnifier", +"# window is moved, resized, or rotated.", +"", +"proc magnifierRegionConstraint {marker event attributes} \\", +"{", +" global winWidth winHeight", +"", +" set constraints [list {}]", +" send magnifierWin getRect interior p_x p_y p_width p_height", +"", +" # Since the magnifier region marker is a box marker x,y and width,height", +" # will not both change in the same call, so we can process them all", +" # independently.", +"", +" foreach i $attributes {", +" set new [lindex $i 2]", +"", +" switch [lindex $i 0] {", +" x { set left [expr $p_x + $rwidth + 1]", +" set right [expr $p_x + $p_width - $rwidth - 1]", +" if {$new < $left} {", +" lappend constraints \"x $left\"", +" } elseif {$new > $right} {", +" lappend constraints \"x $right\"", +" }", +" }", +" y { set top [expr $p_y + $rheight + 1]", +" set bottom [expr $p_y + $p_height - $rheight - 1]", +" if {$new < $top} {", +" lappend constraints \"y $top\"", +" } elseif {$new > $bottom} {", +" lappend constraints \"y $bottom\"", +" }", +" }", +" width { set ww [expr $winWidth / 2]", +" if {$new > $ww / 2} {", +" lappend constraints \"width $ww\"", +" }", +" }", +" height { set wh [expr $winHeight / 2]", +" if {$new > $wh / 2} {", +" lappend constraints \"height $wh\"", +" }", +" }", +" rotangle { lappend constraints \"rotangle 0\"", +" }", +" }", +" }", +"", +" return $constraints", +"}", +"", +"", +"# magnifierImagewinResized -- If the display window is resized make the", +"# magnifier track the corner.", +"", +"proc magnifierImagewinResized args \\", +"{", +" global magnifier_enable magnifier_mapping magnifier_height", +" global magnifierGeom magnifier_x magnifier_y magnifier_width", +"", +" if {$magnifier_enable} {", +" set old_x $magnifier_x; set old_width $magnifier_width", +" set old_y $magnifier_y; set old_height $magnifier_height", +"", +" # Get new location of magnifier window.", +" set defGeom [format \"%sx%s+5+5\" $magnifier_width $magnifier_height]", +" send imagewin parseGeometry $magnifierGeom $defGeom x y width height", +"", +" # Reposition the marker.", +" send magnifierWin \"\\", +" markpos; \\", +" setAttributes \\", +" x [expr $x + $width / 2] \\", +" y [expr $y + $height / 2] \\", +" width [expr $width / 2] \\", +" height [expr $height / 2]; \\", +" redraw\"", +"", +" # Update the magnifier window position variables so that it comes up", +" # in the same place the next time.", +" send magnifierWin getRect boundary \\", +" magnifier_x magnifier_y magnifier_width magnifier_height", +" set magnifierGeom [send imagewin getGeometry \\", +" $magnifier_x $magnifier_y $magnifier_width $magnifier_height]", +"", +" # Make sure the magnifier window is on top.", +" send imagewin raiseMapping $magnifier_mapping", +"", +" # Refresh the magnifier window if it did not move.", +" if {$magnifier_x == $old_x && $magnifier_y == $old_y &&", +" $magnifier_width == $old_width && $magnifier_height == $old_height} {", +" send imagewin refreshMapping $magnifier_mapping", +" }", +" }", +"}", +"", +"", +"# resetMagnifier -- Reinitialize the magnifier.", +"", +"proc resetMagnifier {param old new} \\", +"{", +" global magnifierGeom displayMagnifier", +"", +" if {$new == \"done\"} {", +" setMagnifier [true $displayMagnifier]", +" } else {", +" setMagnifier 0", +" if {$new != \"startup\"} {", +" set magnifierGeom +5+5", +" }", +" }", +"}; send initialize addCallback resetMagnifier", +"", +"", +"set last_mag_x [expr $winWidth / 2]", +"set last_mag_y [expr $winHeight / 2]", +"", +"# magnifierMovedMapImage -- Front end to magnifierMapImage, called when ", +"# magnifier window is moved or resized.", +"", +"proc magnifierMovedMapImage args \\", +"{", +" global last_mag_x last_mag_y", +"", +" magnifierMapImage $last_mag_x $last_mag_y", +" setMagPointerPosition", +"}", +"", +"# The following code was borrowed from the SAOtng GUI by Eric Mandel of SAO", +"#--------------------------------------------------------------------------", +"", +"# globals for magnifier", +"set mag_w 0", +"set mag_h 0", +"", +"#", +"# setMagnifierZoom -- set the zoom factor for the magnifier", +"#", +"proc setMagnifierZoom { zoom } \\", +"{", +" global mag_w mag_h", +"", +" send magnifierWin getRect boundary \\", +" magnifier_x magnifier_y magnifier_width magnifier_height", +" set mag_w [expr int( ( $magnifier_width + $zoom - 1 ) / $zoom) ]", +" set mag_h [expr int( ( $magnifier_height + $zoom - 1 ) / $zoom) ]", +"", +" #set mw [expr int (($magnifier_width - 1) / ($mag_w * 2))]", +" #if { $mw < 4 } { set mw 4 }", +" #set mh [expr int (($magnifier_height - 1) / ($mag_h * 2))]", +" #if { $mh < 4 } { set mh 4 }", +" #send magPointer \"setAttributes width $mw height $mh; redraw\"", +"}", +"", +"# magnifierMapImage -- Map the of the current display frame centered on the", +"# pointer into the magnifier window. Called when the frame changes, the", +"# pointer moves in the main image window, or (via magnifierMovedMapImage)", +"# the magnifier window is moved or resized.", +"", +"set magnifierROP 0", +"", +"proc magnifierMapImage {x y} \\", +"{", +" global magnifier_enable frame", +" global last_mag_x last_mag_y", +" global magnifier_mapping", +" global winWidth winHeight", +" global mag_w mag_h", +" global magnifierROP", +"", +" if {!$magnifier_enable || $frame == 0} \\", +" return", +"", +"# if {abs($last_mag_x-$x) != 1 && abs($last_mag_y-$y) != 1} {", +"# # For efficiency we won't compute the sqrt of the distance but instead", +"# # just compare the square. Use a threshold of 6 pixels so when we", +"# # narrow in on the ROI the magnifier is still (mostly) correct.", +"# set diff [expr (($last_mag_x-$x) * ($last_mag_x-$x)) + \\", +"# (($last_mag_y-$y) * ($last_mag_y-$y))]", +"# if {$diff > 36} {", +"# set last_mag_x $x", +"# set last_mag_y $y", +"# return", +"# }", +"# }", +"", +" set last_mag_x $x", +" set last_mag_y $y", +"", +" send magnifierWin getRect interior dx dy dnx dny", +" if [send imagewin activeMapping $magnifier_mapping] {", +" send imagewin raiseMapping $magnifier_mapping", +" }", +"", +" # initialize the magnifier zoom factor, if necessary", +" if { !$mag_w || !$mag_h } {", +" setMagnifierZoom 4", +" }", +"", +" set sx [expr $x - $mag_w / 2 ]", +" set sy [expr $y - $mag_h / 2 ]", +"", +" # Constrain the source rectangle within the main image window ", +" # (not overlapping an edge or the magnifier window).", +"", +" if {$sx > [expr $dx - $mag_w] && $sx < [expr $dx + $dnx] && ", +" $sy > [expr $dy - $mag_h] && $sy < [expr $dy + $dny] } {", +"", +" # The source rectangle would overlap the magnifier window; fix that.", +"", +" set dist(l) [expr $sx - ($dx - $mag_w)]", +" set dist(b) [expr $dy + $dny - $sy]", +" set dist(r) [expr $dx + $dnx - $sx]", +" set dist(t) [expr $sy - ($dy - $mag_h)]", +"", +" # Put the distances in order.", +"", +" foreach j [array names dist] {", +" set alreadyset($j) 0", +" }", +"", +" for {set i 0} {$i < 4} {incr i} {", +" set candidate \"\"", +" foreach j [array names dist] {", +" if {!$alreadyset($j)} {", +" if {$candidate == \"\"} {", +" set candidate $j", +" set minsofar $dist($j)", +" } elseif {$dist($j) < $minsofar} {", +" set candidate $j", +" set minsofar $dist($j)", +" }", +" }", +" }", +" set order($i) $candidate", +" set alreadyset($candidate) 1", +" }", +"", +" # Try the sides in order, using the first one where there's room.", +"", +" for {set i 0} {$i < 4} {incr i} {", +" if {$order($i) == \"l\"} {", +" if {$dx >= $mag_w} {", +" set sx [expr $dx - $mag_w]", +" break", +" }", +" } elseif {$order($i) == \"b\"} {", +" if {$winHeight >= $dy + $dny + $mag_h} {", +" set sy [expr $dy + $dny]", +" break", +" }", +" } elseif {$order($i) == \"r\"} {", +" if {$winWidth >= $dx + $dnx + $mag_w} {", +" set sx [expr $dx + $dnx]", +" break", +" }", +" } elseif {$order($i) == \"t\"} {", +" if {$dy >= $mag_h} {", +" set sy [expr $dy - $mag_h]", +" break", +" }", +" }", +" }", +" }", +"", +" # Make sure we don't go beyond an edge of the main window.", +"", +" if {$sx < 0} {", +" set sx 0", +" } else {", +" set sxmax [expr $winWidth - $mag_w]", +" if {$sx > $sxmax} {", +" set sx $sxmax", +" }", +" }", +"", +" if {$sy < 0} {", +" set sy 0", +" } else {", +" set symax [expr $winHeight - $mag_h]", +" if {$sy > $symax} {", +" set sy $symax", +" }", +" }", +"", +" # Map 32 x 32 centered on pointer in main window.", +" set err [catch {send imagewin setMapping $magnifier_mapping $magnifierROP \\", +" 0 pixel $sx $sy $mag_w $mag_h \\", +" 0 pixel $dx $dy $dnx $dny}]", +" if { $err != 0 } {", +" Print \"There was a problem setting up the magnifier ... recovering\"", +" }", +"}", +"", +"", +"# set the position of the magnifier marker in the center of the mag window", +"proc setMagPointerPosition args \\", +"{", +" global magnifier_enable", +"", +" if { !$magnifier_enable } \\", +" return", +"", +" send magnifierWin \"getAttributes x x y y\"", +" set xpos [expr $x + 1]", +" set ypos [expr $y + 1]", +"", +" send magPointer \"setAttributes x $xpos y $ypos visible true; redraw\"", +"}", +"", +"", +"", +"################################################################################", +"# PANNER. The full frame mapped into the main image window is displayed at a", +"# reduced resolution in a marker (known as the panner window) within the main", +"# image window. The currently displayed region of the frame is indicated", +"# using a small marker within the panner window. This small marker may be", +"# moved or resized to pan or zoom the image in the main display window.", +"################################################################################", +"", +"set panner_x 0", +"set panner_y 0", +"set panner_width 0", +"set panner_height 0", +"set prm_width 0", +"set prm_height 0", +"", +"set panner_enable 0", +"set panner_pan_enable 0", +"set panner_mag_enable 0", +"set panner_region_enable 0", +"set panner_mapping 0", +"", +"# Panner window translations.", +"set pannerWinTranslations { \\", +" !Shift : m_rotateResize()", +" : m_moveResize()", +" !Shift : m_raise() m_markpos()", +" : m_raise() m_markposAdd()", +" : m_redraw() m_destroyNull()", +" : m_lower()", +" : call(pannerPanXY,$x,$y)", +" !Ctrl b: call(prevFrame,$name)", +" !Ctrl f: call(nextFrame,$name)", +" !Ctrl h: call(move_cursor,-1,0)", +" !Ctrl j: call(move_cursor,0,1)", +" !Ctrl k: call(move_cursor,0,-1)", +" !Ctrl l: call(move_cursor,1,0)", +" !Ctrl n: call(normalize)", +" !Ctrl c: call(cpZoomAction,centerFrame)", +" !Ctrl i: call(cpInvert)", +" !Ctrl m: call(toggleMagnifier)", +" !Ctrl p: call(togglePanner)", +" !Ctrl r: call(cpRegisterFrames)", +" !Ctrl s: call(cpMatchFrames)", +" !Alt 1: call(cpSetFrame,frame1)", +" !Alt 2: call(cpSetFrame,frame2)", +" !Alt 3: call(cpSetFrame,frame3)", +" !Alt 4: call(cpSetFrame,frame4)", +" !Ctrl 1: call(cpZoom,1,1,fixed)", +" !Ctrl 2: call(cpZoom,2,2,fixed)", +" !Ctrl 3: call(cpZoom,3,3,fixed)", +" !Ctrl 4: call(cpZoom,4,4,fixed)", +" !Ctrl 5: call(cpZoom,5,5,fixed)", +" !Ctrl 6: call(cpZoom,6,6,fixed)", +" !Ctrl 7: call(cpZoom,7,7,fixed)", +" !Ctrl 8: call(cpZoom,8,8,fixed)", +" !Ctrl 9: call(cpZoom,9,9,fixed)", +" BackSpace: m_deleteDestroy()", +" Delete: m_deleteDestroy()", +" : graphics-input()", +" : track-cursor() call(wcsUpdate,$x,$y)", +"}", +"", +"", +"# setPanner -- Turn the panner on or off.", +"", +"proc togglePanner args \\", +"{", +" global panner_enable", +"", +" if {$panner_enable} {", +" setPanner 0", +" } else {", +" setPanner 1", +" }", +"}", +"", +"", +"proc setPanner {state} \\", +"{", +" global winWidth winHeight frameWidth frameHeight", +" global frame panner_mapping pannerWinTranslations pannerArea", +" global panner_enable panner_region_enable panner_pan_enable", +" global pannerGeom panner_x panner_y panner_width panner_height", +" global last_compass", +"", +" if {$state} {", +" if {$panner_enable} \\", +" return", +"", +" # Determine where to place the panner.", +" set scale \\", +" [expr sqrt(double($pannerArea) / ($frameWidth * $frameHeight))]", +" set scaled_width [expr int($frameWidth * $scale) / 2 * 2 + 1]", +" set scaled_height [expr int($frameHeight * $scale) / 2 * 2 + 1]", +" set defGeom [format \"%sx%s-5+5\" $scaled_width $scaled_height]", +" send imagewin parseGeometry $pannerGeom $defGeom x y width height", +"", +" # Create the main panner window (marker).", +" send imagewin createMarker pannerWin \\", +" type rectangle \\", +" createMode noninteractive \\", +" width [expr $width / 2] \\", +" height [expr $height / 2] \\", +" x [expr $x + $width / 2] \\", +" y [expr $y + $height / 2] \\", +" lineColor 8 \\", +" highlightColor 8 \\", +" translations $pannerWinTranslations \\", +" visible true \\", +" sensitive true \\", +" autoRedraw true \\", +" activated true", +"", +" # Update the panner window position variables so that it comes up", +" # in the same place the next time.", +"", +" send pannerWin getRect boundary \\", +" panner_x panner_y panner_width panner_height", +" set pannerGeom [send imagewin getGeometry \\", +" $panner_x $panner_y $panner_width $panner_height]", +"", +" # Register callbacks.", +" send frame addCallback pannerMapImage", +" send frameRegion addCallback pannerSetRegion", +" send imagewin addCallback pannerImagewinResized resize", +" send resize addCallback pannerImagewinResized", +"", +" send pannerWin {", +" addCallback pannerMapImage moveResize;", +" addCallback pannerMoved moveResize;", +" addCallback pannerDestroy destroy;", +" addCallback pannerWinConstraint constraint;", +" }", +"", +" # Map display frame to panner window.", +" set panner_enable 1", +" set panner_region_enable 1", +" set panner_mapping [send imagewin nextMapping]", +" pannerMapImage init; send imagewin refreshMapping $panner_mapping", +"", +" # Redraw the compass if necessary.", +" send compass \"setSensitive True ; set on $last_compass\"", +" if { $last_compass } \\", +" drawCompass", +"", +" # Draw a marker in the panner window outlining displayed region.", +" send imagewin createMarker pannerRegionMarker \\", +" type box \\", +" createMode noninteractive \\", +" translations $pannerWinTranslations \\", +" lineColor green \\", +" highlightColor green \\", +" sensitive true", +"", +" # Fire up the panner region marker.", +" send client getSource raster sx sy snx sny", +" pannerSetRegion dummy dummy [concat $frame $sx $sy $snx $sny]", +" send pannerRegionMarker \"\\", +" addCallback pannerPanImage moveResize; \\", +" addCallback pannerDestroy destroy; \\", +" addCallback pannerRegionConstraint constraint; \\", +" setAttributes visible true activated true; \\", +" redraw\"", +" set panner_pan_enable 1", +"", +" } elseif {$panner_enable} {", +" pannerDestroy", +" }", +"}", +"", +"", +"# pannerDestroy -- Delete the panner.", +"", +"proc pannerDestroy args \\", +"{", +" global panner_enable panner_region_enable panner_pan_enable", +" global panner_mapping", +"", +" if {$panner_enable} {", +" set panner_enable 0", +" set panner_pan_enable 0", +" set panner_region_enable 0", +"", +" send imagewin freeMapping $panner_mapping", +" send imagewin deleteCallback pannerImagewinResized", +" send resize deleteCallback pannerImagewinResized", +" send frame deleteCallback pannerMapImage", +" send frameRegion deleteCallback pannerSetRegion", +"", +" if [send server queryObject pannerRegionMarker] {", +" send pannerRegionMarker destroy", +" }", +" if [send server queryObject pannerWin] {", +" send pannerWin destroy", +" }", +"", +" # Disable the compass.", +" send compass \"setSensitive False ; set on False\"", +" }", +"}", +"", +"", +"# pannerMapImage -- Map the current display frame into the panner window.", +"# Called when the frame changes or the panner window is moved or resized.", +"# The panner window displays a small dezoomed version of the full frame.", +"", +"proc pannerMapImage args \\", +"{", +" global panner_enable frame", +" global panner_mapping", +"", +" if {!$panner_enable || $frame == 0} \\", +" return", +"", +" set raster [send client getRaster]", +" send pannerWin getRect interior dx dy dnx dny", +" send imagewin queryRaster $raster width height", +"", +" if [send imagewin activeMapping $panner_mapping] {", +" send imagewin raiseMapping $panner_mapping", +" }", +" send imagewin setMapping $panner_mapping 0 \\", +" $raster pixel 0 0 $width $height \\", +" 0 pixel $dx $dy $dnx $dny", +"}", +"", +"", +"# pannerSetRegion -- Adjust the pannerWin region marker to outline the", +"# region displayed in the main display window. This is called in response", +"# to a frameRegion event when the main display mapping changes, e.g. when", +"# the frame changes or the user zooms or pans the main window. The region", +"# marker is moved and resized to reflect the new view.", +"", +"proc pannerSetRegion {param old new} \\", +"{", +" global panner_enable panner_region_marker", +" global panner_region_enable panner_pan_enable", +" global frame frameWidth frameHeight prm_width prm_height", +"", +" if {!$panner_enable || !$panner_region_enable || $frame == 0} \\", +" return", +"", +" # new: frame sx sy snx sny", +" set src_frame [lindex $new 0]", +" set sx [lindex $new 1]; set snx [lindex $new 3]", +" set sy [lindex $new 2]; set sny [lindex $new 4]", +"", +" if {$src_frame != $frame} \\", +" return", +"", +" send pannerWin getRect interior px py pnx pny", +"", +" set x [expr ($sx + $snx/2.0) / $frameWidth * $pnx + $px]", +" set y [expr ($sy + $sny/2.0) / $frameHeight * $pny + $py]", +" set width [expr ($snx/2.0) / $frameWidth * $pnx + 1]", +" set height [expr ($sny/2.0) / $frameHeight * $pny + 1]", +"", +" set pan_save $panner_pan_enable; set panner_pan_enable 0", +" set panner_region_enable 0", +"", +" send pannerRegionMarker \"\\", +" markpos; \\", +" setAttributes x $x y $y width $width height $height; \\", +" redraw; raise\"", +" send pannerRegionMarker getAttributes width prm_width height prm_height", +"", +" set panner_region_enable 1", +" set panner_pan_enable $pan_save", +"}", +"", +"", +"# pannerPanImage -- Pan or zoom the image in the main image window. This is", +"# called when the user moves the region marker within the panner window.", +"", +"proc pannerPanImage {marker event position} \\", +"{", +" global panner_pan_enable", +" global winWidth winHeight", +" global prm_width prm_height", +" global frame auto_reg frameOffsetX frameOffsetY", +"", +" if {!$panner_pan_enable} \\", +" return", +"", +" # position: x y width height.", +" set new_width [lindex $position 2]", +" set new_height [lindex $position 3]", +"", +" # region: type raster x y width height.", +" set region [send pannerRegionMarker getRegion unmap]", +" set x [expr [lindex $region 2] + 1]; set width [lindex $region 4]", +" set y [expr [lindex $region 3] + 1]; set height [lindex $region 5]", +"", +" set panner_pan_enable 0", +" if {$new_width == $prm_width && $new_height == $prm_height} {", +" send client pan $x $y", +" } else {", +" set xscale [expr ($winWidth / 2.0) / $width]", +" set yscale [expr ($winHeight / 2.0) / $height]", +" if {$auto_reg == 1} {", +" send client zoomAbs $xscale $yscale $x $y \\", +" $frameOffsetX($frame) $frameOffsetY($frame)", +" } else {", +" send client zoom $xscale $yscale $x $y", +" }", +" }", +" set panner_pan_enable 1", +"}", +"", +"", +"# pannerPanXY -- Pan to the point X,Y in the panner window coordinate", +"# system. Called when the user clicks MB2 in the panner window.", +"", +"proc pannerPanXY {x y} \\", +"{", +" send imagewin unmapPixel $x $y raster rx ry", +" send client pan $rx $ry", +"}", +"", +"", +"# pannerMoved -- Called when the user moves the panner window. We need to", +"# move the region marker to the new window location and record the new location", +"# so that the window will come up in the same place if closed and reopened.", +"", +"proc pannerMoved {marker event position} \\", +"{", +" global winWidth winHeight", +" global frame panner_pan_enable pannerGeom", +" global panner_x panner_y panner_width panner_height", +"", +" # Move the region marker to the new location.", +" set pan_save $panner_pan_enable; set panner_pan_enable 0", +" send client getSource raster sx sy snx sny", +" pannerSetRegion dummy dummy [concat $frame $sx $sy $snx $sny]", +" set panner_pan_enable $pan_save", +"", +" # Update the panner window position variables so that it comes up", +" # in the same place the next time.", +"", +" send pannerWin getRect boundary \\", +" panner_x panner_y panner_width panner_height", +" set pannerGeom [send imagewin getGeometry \\", +" $panner_x $panner_y $panner_width $panner_height]", +"", +" drawCompass", +"", +" send pannerRegionMarker raise", +"}", +"", +"", +"# pannerWinConstraint -- Called when the panner window is moved, resized, or", +"# rotated. Constrain the panner window to remain within the image window;", +"# rotation is not permitted.", +"", +"proc pannerWinConstraint {marker event attributes} \\", +"{", +" global winWidth winHeight", +" global panner_width panner_height", +"", +" set width $panner_width", +" set height $panner_height", +" set constraints [list {}]", +"", +" # Check the width and height first as we need these below.", +" foreach i $attributes {", +" set new [lindex $i 2]", +" switch [lindex $i 0] {", +" width { set ww [expr $winWidth / 2]", +" if {$new > $ww} {", +" lappend constraints \"width $ww\"", +" set width $ww", +" } else {", +" set width $new", +" }", +" }", +" height { set wh [expr $winHeight / 2]", +" if {$new > $wh} {", +" lappend constraints \"height $wh\"", +" set height $wh", +" } else {", +" set height $new", +" }", +" }", +" rotangle { lappend constraints \"rotangle 0\"", +" }", +" }", +" }", +"", +" # Constrain X and Y.", +" foreach i $attributes {", +" set new [lindex $i 2]", +" switch [lindex $i 0] {", +" x { set pw [expr $width / 2]", +" if {$new < $pw} {", +" lappend constraints \"x $pw\"", +" } elseif {$new > $winWidth - $pw} {", +" lappend constraints \"x [expr $winWidth - $pw]\"", +" }", +" }", +" y { set ph [expr $height / 2]", +" if {$new < $ph} {", +" lappend constraints \"y $ph\"", +" } elseif {$new > $winHeight - $ph} {", +" lappend constraints \"y [expr $winHeight - $ph]\"", +" }", +" }", +" }", +" }", +"", +" return $constraints", +"}", +"", +"", +"# pannerRegionConstraint -- Called when the region marker in the panner", +"# window is moved, resized, or rotated.", +"", +"proc pannerRegionConstraint {marker event attributes} \\", +"{", +" global winWidth winHeight", +" global frame", +"", +" set constraints [list {}]", +" send pannerWin getRect interior p_x p_y p_width p_height", +" send pannerRegionMarker getAttributes width rwidth height rheight", +"", +" # Since the panner region marker is a box marker x,y and width,height", +" # will not both change in the same call, so we can process them all", +" # independently.", +"", +" foreach i $attributes {", +" set new [lindex $i 2]", +"", +" switch [lindex $i 0] {", +" x { set left [expr $p_x + $rwidth + 1]", +" set right [expr $p_x + $p_width - $rwidth - 1]", +" if {$new < $left} {", +" lappend constraints \"x $left\"", +" } elseif {$new > $right} {", +" lappend constraints \"x $right\"", +" }", +" }", +" y { set top [expr $p_y + $rheight + 1]", +" set bottom [expr $p_y + $p_height - $rheight - 1]", +" if {$new < $top} {", +" lappend constraints \"y $top\"", +" } elseif {$new > $bottom} {", +" lappend constraints \"y $bottom\"", +" }", +" }", +" width { set ww [expr $winWidth / 2]", +" if {$new > $ww / 2} {", +" lappend constraints \"width $ww\"", +" }", +" }", +" height { set wh [expr $winHeight / 2]", +" if {$new > $wh / 2} {", +" lappend constraints \"height $wh\"", +" }", +" }", +" rotangle { lappend constraints \"rotangle 0\"", +" }", +" }", +" }", +" drawCompass", +"", +" return $constraints", +"}", +"", +"", +"# pannerImagewinResized -- If the display window is resized make the panner", +"# track the corner.", +"", +"proc pannerImagewinResized args \\", +"{", +" global panner_enable panner_mapping ", +" global pannerGeom panner_x panner_y panner_width panner_height", +" global frame", +"", +" if {$panner_enable} {", +" set old_x $panner_x; set old_width $panner_width", +" set old_y $panner_y; set old_height $panner_height", +"", +" eraseCompass", +"", +" # Get new location of panner window.", +" set defGeom [format \"%sx%s-5+5\" $panner_width $panner_height]", +" send imagewin parseGeometry $pannerGeom $defGeom x y width height", +"", +" # Reposition the marker.", +" send pannerWin \"\\", +" markpos; \\", +" setAttributes \\", +" x [expr $x + $width / 2] \\", +" y [expr $y + $height / 2] \\", +" width [expr $width / 2] \\", +" height [expr $height / 2]; \\", +" redraw\"", +"", +" # Update the panner window position variables so that it comes up", +" # in the same place the next time.", +" send pannerWin getRect boundary \\", +" panner_x panner_y panner_width panner_height", +" set pannerGeom [send imagewin getGeometry \\", +" $panner_x $panner_y $panner_width $panner_height]", +"", +" # Make sure the panner window is on top.", +" send imagewin raiseMapping $panner_mapping", +"", +" # Refresh the panner window if it did not move.", +" if {$panner_x == $old_x && $panner_y == $old_y &&", +" $panner_width == $old_width && $panner_height == $old_height} {", +" send imagewin refreshMapping $panner_mapping", +" }", +"", +" drawCompass", +" }", +"}", +"", +"", +"# resetPanner -- Reinitialize the panner.", +"", +"proc resetPanner {param old new} \\", +"{", +" global pannerGeom displayPanner", +" if {$new == \"done\"} {", +" setPanner [true $displayPanner]", +" } else {", +" setPanner 0", +" if {$new != \"startup\"} {", +" set pannerGeom -5+5", +" }", +" }", +"}; send initialize addCallback resetPanner", +"", +"", +"", +"################################################################################", +"# Print Panel Functions.", +"################################################################################", +"", +"# Global variables needed for the print setup panel", +"", +"set printColor prGrayButton", +"set orientation epsPortButton", +"set page_size epsLetterButton", +"set imageScale 100", +"", +"set epsWidgets { epsPageGroup epsOrientLabel epsSizeLabel ", +" epsPortButton epsLandButton epsLetterButton epsLegalButton epsA4Button", +" ScaleFrame SCdecrease SCtext SCincrease ", +"}", +"", +"", +"proc psetup_init args \\", +"{", +" global printColor orientation page_size imageScale #format", +"", +" set_printer toPrinter callback 1", +" send SCtext set label [ format \"%d %%\" $imageScale ]", +" send $printColor set on true", +" send $orientation set on true", +" send $page_size set on true", +"}", +"", +"", +"proc doPrintOptions { param old new } \\", +"{", +" global imageScale page_size orientation imageScale printColor", +" global warnings", +"", +" send printStatus set label {}", +" set val [join [lrange $new 1 end] \" \"]", +"", +" # print [format \"doPrintOptions %s = %s\" [lindex $new 0] $val]", +" switch [lindex $new 0] {", +" autoscale { if { $val == \"True\" } {", +" send epsscaleButton set on true", +" } elseif { $val == \"False\" } {", +" send epsscaleButton set on false", +" }", +" }", +" autorotate { if { $val == \"True\" } {", +" send autorotateButton set on true", +" } elseif { $val == \"False\" } {", +" send autorotateButton set on false", +" }", +" }", +" maxaspect { if { $val == \"True\" } {", +" send aspectButton set on true", +" } elseif { $val == \"False\" } {", +" send aspectButton set on false", +" }", +" }", +" annotate { if { $val == \"True\" } {", +" send annotateButton set on true", +" send titleButton setSensitive true", +" send colorbarButton setSensitive true", +" send bordersButton setSensitive true", +" send titleLabel setSensitive true", +" send titleString setSensitive true", +" } elseif { $val == \"False\" } {", +" send annotateButton set on false", +" send titleButton setSensitive false", +" send colorbarButton setSensitive false", +" send bordersButton setSensitive false", +" send titleLabel setSensitive false", +" send titleString setSensitive false", +" }", +" }", +" compress { if { $val == \"True\" } {", +" send compressButton set on true", +" } elseif { $val == \"False\" } {", +" send compressButton set on false", +" }", +" }", +" orientation { send $orientation set on false", +" if { $val == \"portrait\" } {", +" send epsPortButton set on true", +" set orientation epsPortButton", +" } elseif { $val == \"landscape\" } {", +" send epsPortButton set on false", +" set orientation epsLandButton", +" }", +" }", +" papersize { send $page_size set on false", +" if { $val == \"letter\" } {", +" send epsLetterButton set on true", +" set page_size epsLetterButton", +" } elseif { $val == \"legal\" } {", +" send epsLegalButton set on true", +" set page_size epsLegalButton", +" } elseif { $val == \"A4\" } {", +" send epsA4Button set on true", +" set page_size epsA4Button", +" } elseif { $val == \"B5\" } {", +" send epsB5Button set on true", +" set page_size epsB5Button", +" }", +" }", +" imscale { set imageScale $val", +" send SCtext set label [ format \"%d %%\" $imageScale ]", +" }", +" colortype { send $printColor set on false", +" if { $val == \"gray\" } {", +" send prGrayButton set on true", +" set printColor prGrayButton", +" } elseif { $val == \"pseudo\" } {", +" send prPseudoButton set on true", +" set printColor prPseudoButton", +" } elseif { $val == \"rgb\" } {", +" send prRGBButton set on true", +" set printColor prRGBButton", +" }", +" }", +" printerName { if [send toPrinter get on] {", +" send printlist highlight $val", +" }", +" }", +" printCmd { if [send toPrinter get on] {", +" send printcmd set string $val", +" }", +" }", +" printFile { if [send toFile get on] {", +" send printcmd set string $val", +" }", +" }", +" deviceType { if { $val == \"Printer\" } {", +" send printerLabel set label \"Print Command:\"", +" send toPrinter set on true", +" send toFile set on false", +" } elseif { $val == \"File\" } {", +" send printerLabel set label \"File Name:\"", +" send toPrinter set on false", +" send toFile set on true", +" send printlist unhighlight", +" }", +" }", +" dotitle { if { $val == \"True\" } {", +" send titleButton set on true", +" } elseif { $val == \"False\" } {", +" send titleButton set on false", +" }", +" }", +" doborders { if { $val == \"True\" } {", +" send bordersButton set on true", +" } elseif { $val == \"False\" } {", +" send bordersButton set on false", +" }", +" }", +" docolorbar { if { $val == \"True\" } {", +" send colorbarButton set on true", +" } elseif { $val == \"False\" } {", +" send colorbarButton set on false", +" }", +" }", +" title { send titleString set string $val", +" }", +"", +" status { send printStatus set label $val", +" send server synchronize", +" }", +" warning { if {$warnings} { Wexec server $val }", +" }", +" }", +"}; send printOptions addCallback doPrintOptions", +"", +"", +"# Print options procedures.", +"# -------------------------------", +"", +"set prOptsWidgets { ", +" toPrinter toFile", +" prGrayButton prPseudoButton prRGBButton", +" epsLandButton epsPortButton", +" epsLetterButton epsLegalButton epsA4Button epsB5Button", +" SCincrease SCdecrease", +"}", +"set prSimpleOptions { ", +" epsscaleButton autorotateButton aspectButton annotateButton compressButton ", +" titleButton bordersButton colorbarButton", +"}", +"", +"proc prPrintCommand { widget cbtype args } \\", +"{", +" if [send toFile get on] {", +" send client setPrintOption printfile $args", +" send printStatus set label [format \"output file set to %s\" $args]", +" } else {", +" send client setPrintOption printcmd $args", +" send printStatus set label [format \"print command set to %s\" $args]", +" }", +"}; send printcmd addCallback prPrintCommand", +"", +"proc prTitleString { widget cbtype args } \\", +"{", +" send client setPrintOption title $args", +"}; send titleString addCallback prTitleString", +"", +"proc prOptionToggle { widget cbtype args } \\", +"{", +" global imageScale", +"", +" # Handle the image scale widgets first.", +" switch $widget {", +" SCincrease { set scale [expr $imageScale + 5] ", +" send client setPrintOption imscale $scale", +" return", +" }", +" SCdecrease { set scale [ expr $imageScale - 5 ]", +" send client setPrintOption imscale $scale", +" return", +" }", +" }", +"", +" # If it's not one of those it must be one of the radio toggles.", +" set val [ send $widget get on ]", +" #print [ format \"prOptionToggle %s = %s\" $widget $val ]", +" if { $val == 1 } {", +" switch $widget {", +" toPrinter { send client setPrintOption devicetype printer }", +" toFile { send client setPrintOption devicetype file }", +"", +" epsLandButton { send client setPrintOption orientation landscape }", +" epsPortButton { send client setPrintOption orientation portrait }", +"", +" epsLetterButton { send client setPrintOption papersize letter }", +" epsLegalButton { send client setPrintOption papersize legal }", +" epsA4Button { send client setPrintOption papersize A4 }", +" epsB5Button { send client setPrintOption papersize B5 }", +"", +" prGrayButton { send client setPrintOption colortype gray }", +" prPseudoButton { send client setPrintOption colortype pseudo }", +" prRGBButton { send client setPrintOption colortype rgb }", +" }", +" } else {", +" send $widget set on true", +" }", +"", +"} ; foreach w $prOptsWidgets { send $w addCallback prOptionToggle }", +"", +"proc prSimpleOptionToggle { widget args } \\", +"{", +" set val [ send $widget get on ]", +" #print [ format \"prSimpleOptionToggle %s = %s\" $widget $val ]", +"", +" switch $widget {", +" epsscaleButton { send client setPrintOption autoscale $val }", +" autorotateButton { send client setPrintOption autorotate $val }", +" aspectButton { send client setPrintOption maxaspect $val }", +" annotateButton { send client setPrintOption annotate $val }", +" compressButton { send client setPrintOption compress $val }", +"", +" titleButton { send client setPrintOption dotitle $val }", +" bordersButton { send client setPrintOption doborders $val }", +" colorbarButton { send client setPrintOption docolorbar $val }", +" }", +"} ; foreach w $prSimpleOptions { send $w addCallback prSimpleOptionToggle }", +"", +"", +"", +"# Printer display and selection.", +"# -------------------------------", +"set lprList {}", +"", +"proc psSetPrintList {param old new} \\", +"{", +" global lprList", +" set lprList $new", +" send printlist setList $new resize", +" send printlist highlight 0", +"}; send printerList addCallback psSetPrintList", +"", +"proc lprResize args \\", +"{", +" global lprList", +" send printlist setList $lprList resize", +" send printlist highlight 0", +"}; send printlist addEventHandler lprResize ResizeRedirectMask", +"", +"proc psSelectPrint {widget cbtype selections indices} \\", +"{", +" global printerlist", +" foreach selection $selections {", +" send client setPrintOption printername $selection", +" }", +"}; send printlist addCallback psSelectPrint", +"", +"", +"proc Print args \\", +"{", +" global winWidth winHeight", +" send imagewin setCursorType busy", +"", +" # Get the print command or file template if not previous reset.", +" set val [ send printcmd get string ]", +" if [send toFile get on] {", +" send client setPrintOption printfile $val", +" } else {", +" send client setPrintOption printcmd $val", +" }", +" set val [ send titleString get string ]", +" send client setPrintOption title $val", +" setPrintCorners 0 [expr $winWidth - 1] [expr $winHeight - 1] 0", +"", +" send client print", +" send imagewin setCursorType idle", +"} ; send okayPrint addCallback Print", +"", +"", +"", +"# setPrintCorners -- Tell the client the WCS of the image being printed.", +"", +"proc setPrintCorners { lx ly ux uy args } \\", +"{", +" global winWidth winHeight", +"", +" # Convert raw corner screen coordinates to frame buffer raster coords.", +" send imagewin unmapPixel $lx $ly raster llx lly", +" set llx [expr \"int ($llx)\"]", +" set lly [expr \"int ($lly)\"]", +" set str [send client encodewcs $llx $lly]", +" scan $str \"%g %g %g\" llx_r lly_r z", +" set llx_i [expr \"int ($llx_r)\"]", +" set lly_i [expr \"int ($lly_r)\"]", +"", +" send imagewin unmapPixel $ux $uy raster urx ury", +" set urx [expr \"int ($urx)\"]", +" set ury [expr \"int ($ury)\"]", +" set str [send client encodewcs $urx $ury]", +" scan $str \"%g %g %g\" urx_r ury_r z", +" set urx_i [expr \"int ($urx_r)\"]", +" set ury_i [expr \"int ($ury_r)\"]", +"", +" send client setPrintOption corners $llx_i $lly_i $urx_i $ury_i", +"}", +"", +"", +"", +"################################################################################", +"# INFO box.", +"################################################################################", +"", +"set infoMode infoOptFr", +"", +"", +"# Current Frame information.", +"proc infoFrameUpdate args \\", +"{", +" global version frame nframes", +" global frameWidth frameHeight frameDepth", +" global enhancement", +" global cpXcen cpYcen cpXoff cpYoff", +" global cpXmag cpYmag cpXscale cpYscale", +"", +" if { [send infoOptWCS get on] } {", +" send client info wcs", +" return", +" } elseif {! [send infoOptFr get on]} \\", +" return", +"", +"", +" if {$frame == 0} {", +" send infoText set string \"initializing display...\"", +" } else {", +" set line1 $version", +" set line2 [format \"Image:\\t\\t%s\" [send imageTitle get label]]", +" set line3 [format \"Frame %d of %d:\\t%d x %d\" \\", +" $frame $nframes $frameWidth $frameHeight]", +" set cmap [lindex $enhancement($frame) 0]", +" set brt [lindex $enhancement($frame) 1]", +" set con [lindex $enhancement($frame) 2]", +" set line4 [format \"Colormap:\\t%s\" $cmap]", +" set line5 [format \"Enhancement:\\tBrt=%s Cont=%s\" $brt $con]", +"", +" set cntr [format \"X: %0.1f\\n\\t\\tY: %0.1f\" $cpXcen $cpYcen]", +" set line6 [format \"Center:\\t\\t%s\" $cntr]", +"", +" set line7 [format \"Zoom:\\t\\tX: %0.2f\\n\\t\\tY: %0.2f\" $cpXmag $cpYmag]", +" set line8 [format \"Scale:\\t\\tX: %0.2f\\n\\t\\tY: %0.2f\" $cpXscale $cpYscale]", +" set line9 [format \"Offset:\\t\\tX: %0.2f\\n\\t\\tY: %0.2f\" $cpXoff $cpYoff]", +"", +" send infoText set string [", +" format \"%s\\n\\n%s\\n%s\\n%s\\n%s\\n%s\\n%s\\n%s\\n%s\\n\\n\" \\", +" $line1 $line2 $line3 $line4 $line5 $line6 $line7 $line8 $line9", +" ]", +" }", +"}", +"set params {frame frameView nframes frameSize frameTitle enhancement}", +"foreach p $params { send $p addCallback infoFrameUpdate }", +"", +"", +"# Server Program State information.", +"proc infoOptToggle { widget type state args } \\", +"{", +" global infoMode ismInfoText", +"", +" if {$state} { set not False } else { set not True }", +"", +" send $infoMode set on $not", +" set infoMode $widget", +"", +" switch $widget {", +" infoOptFr { infoFrameUpdate }", +" infoOptSvr { set bp [send imagewin get basePixel] ", +" set mc [send imagewin get maxColors]", +" send client info server $bp $mc", +" }", +" infoOptIsm { send infoText set string $ismInfoText }", +" infoOptClients { send client info clients }", +" infoOptWCS { send client info wcs }", +" infoOptFB { send client info imtoolrc }", +" }", +"}", +"set iopts {infoOptFr infoOptSvr infoOptIsm infoOptClients infoOptWCS infoOptFB }", +"foreach w $iopts { send $w addCallback infoOptToggle }", +"", +"", +"proc infoSetText { param old new } \\", +"{", +" send infoText set string $new", +"} ; send info addCallback infoSetText", +"", +"", +"", +"################################################################################", +"# Image and objects list display and section", +"################################################################################", +"", +"proc filesTextHighlight { widget event args } \\", +"{", +" if { $event == \"enterNotify\" } {", +" send $widget set displayCaret True", +" } elseif { $event == \"leaveNotify\" } {", +" send $widget set displayCaret False", +" }", +"}", +"foreach w {imtemplateText fnameText z1Value z2Value} {", +" send $w addEventHandler filesTextHighlight enterWindowMask", +" send $w addEventHandler filesTextHighlight leaveWindowMask", +"}", +"", +"send rootButton addCallback \"send client setLoadOption root\"", +"send homeButton addCallback \"send client setLoadOption home\"", +"send upButton addCallback \"send client setLoadOption up\"", +"send rescanButton addCallback \"send client setLoadOption rescan\"", +"", +"set label \\", +" [format \"%-35.35s %6s %12s %12s\"\\", +" \" Image\" \"Bitpix\" \" Size\" \" Title\"]", +"send imlistLabel set label $label", +"send imlistLabel \"set height 0 ; unmap\"", +"", +"", +"# Create the Frames menu on the load panel window.", +"set loadItems { \"Current f.exec \\{send frameFrame set label Current\\}\"}", +"for {set i 1} {$i <= $MAX_FRAMES} {incr i} {", +" lappend loadItems \"\\\"\\ \\ $i\\ \\ \\\" f.exec \\{send frameFrame set label $i\\}\"", +"}; createMenu loadFrames frameFrame $loadItems", +"", +"", +"", +"", +"", +"# Filename pattern callback.", +"proc setPattern { widget mode pattern args } \\", +"{", +" send client setLoadOption pattern $pattern", +"} ; send imtemplateText addCallback setPattern", +"", +"", +"# Load options parameter callback.", +"proc doLoadOptions { param old new } \\", +"{", +" global warnings panel_up", +"", +" set val [ join [lrange $new 1 end] \" \" ]", +"", +" switch [lindex $new 0] {", +" pattern { send imtemplateText set string [format \"%s\" $val ] }", +" curdir { send dirLabel set label [format \" Directory: %s\" $val ] }", +" newfile { send fnameText set string $val }", +" status { send filesStatus set label $val", +" if { ! $panel_up } { send imageTitle set label $val }", +" send server synchronize", +" }", +" warning { if {$warnings} { Wexec server $val } }", +" gray { send grayscale set on $val }", +" zscale { send zscale set on $val", +" if {$val} {", +" send zrange setSensitive False", +" } else {", +" send zrange setSensitive True", +" }", +" }", +" zrange { send zrange set on $val", +" if {$val} {", +" foreach w {z1Label z1Value z2Label z2Value} {", +" send $w setSensitive False", +" }", +" } else {", +" foreach w {z1Label z1Value z2Label z2Value} {", +" send $w setSensitive True", +" }", +" }", +" }", +" z1 { send z1Value set string [format \"%s\" $val ] }", +" z2 { send z2Value set string [format \"%s\" $val ] }", +" nsample { send nsampValue set string [format \"%s\" $val ] }", +" }", +"} ; send loadOptions addCallback doLoadOptions", +"", +"# Option utility routines.", +"proc toggleGraymap args \\", +"{", +" send client setLoadOption gray [ send grayscale get on ]", +"} ; send grayscale addCallback toggleGraymap", +"", +"proc toggleHeaders args \\", +"{", +" if { [send browseHdrs get on] } {", +" send client setLoadOption headers ", +" send rootButton setSensitive False", +" send homeButton setSensitive False", +" send upButton setSensitive False", +" send rescanButton setSensitive False", +" send imlistLabel \"set height 10 ; map\"", +" } else {", +" send client setLoadOption rescan ", +" send rootButton setSensitive True", +" send homeButton setSensitive True", +" send upButton setSensitive True", +" send rescanButton setSensitive True", +" send imlistLabel \"set height 0 ; unmap\"", +" }", +"} ; send browseHdrs addCallback toggleHeaders", +"", +"proc toggleZscale args \\", +"{", +" send client setLoadOption zscale [send zscale get on]", +"} ; send zscale addCallback toggleZscale", +"", +"proc toggleZrange args \\", +"{", +" send client setLoadOption zrange [send zrange get on]", +"} ; send zrange addCallback toggleZrange", +"", +"proc setZ1 { widget mode pattern args } \\", +"{", +" send client setLoadOption z1 $pattern", +"} ; send z1Value addCallback setZ1", +"", +"proc setZ2 { widget mode pattern args } \\", +"{", +" send client setLoadOption z2 $pattern", +"} ; send z2Value addCallback setZ2", +"", +"proc setNsamp { widget mode pattern args } \\", +"{", +" send client setLoadOption nsample $pattern", +"} ; send nsampValue addCallback setNsamp", +"", +"proc fileLoad { widget mode fname args } \\", +"{", +" loadImage $fname", +"} ; send fnameText addCallback fileLoad", +"", +"", +"", +"# Image list selection routines.", +"", +"set fileList {}", +"", +"proc setFileList { param old new } \\", +"{", +" global fileList", +" set fileList $new", +"", +" # Get the max length of the strings so we can set", +" # the list columns appropriately.", +" set max 0", +" foreach n $new {", +" set len [string length $n]", +" if {$len > $max} { set max $len }", +" }", +"", +" # Optimize the number of columns for the file list.", +" if {$max > 35} { ", +" send imageList set defaultColumns 1", +" } elseif {$max > 21} { ", +" send imageList set defaultColumns 2", +" } elseif {$max > 12} { ", +" send imageList set defaultColumns 3", +" } elseif {$max > 5} { ", +" send imageList set defaultColumns 4", +" } else { ", +" send imageList set defaultColumns 5", +" }", +"", +" send imageList setList $new resize", +"}; send filelist addCallback setFileList", +"", +"proc flResize args \\", +"{", +" global fileList", +" send imageList setList $fileList resize", +"}; send imageList addEventHandler flResize ResizeRedirectMask", +"", +"proc flSelectPrint { widget cbtype selections args } \\", +"{", +" if {! [send autoload get on]} \\", +" return", +"", +" foreach selection $selections { ", +" if { [send zrange get on] } {", +" loadImage [lindex $selection 0]", +" } else {", +" loadImage $selection", +" }", +" }", +"}; send imageList addCallback flSelectPrint", +"", +"", +"# Load the named image in the display.", +"proc loadImage { name } \\", +"{", +" global frame", +"", +" set fr [send frameFrame get label]", +"", +" if { $fr == \"Current\" } { set fr $frame }", +"", +" if { [fileSetOptions] >= 0 } {", +" send imagewin setCursorType busy", +" send client load $name $fr", +" send imagewin setCursorType idle", +" send fnameText set string $name", +" }", +"}", +"", +"# Load button callback.", +"proc fileLoadB args \\", +"{", +" set fname [send fnameText get string]", +" if {$fname == \"\"} {", +" Wexec client \"No image name specified\"", +" } else {", +" loadImage $fname", +" }", +"} ; send filesLoadButton addCallback fileLoadB", +"", +"", +"# Send and selected options to the client before loading the image.", +"proc fileSetOptions args \\", +"{", +" if { ![send zscale get on] && ![send zrange get on] } {", +" set z1 [send z1Value get string]", +" set z2 [send z2Value get string]", +"", +" if {$z1 == $z2} {", +" Wexec client \"z1/z2 values are not set properly\"", +" return -1", +" } else {", +" send client setLoadOption z1 $z1", +" send client setLoadOption z2 $z2", +" }", +" }", +"", +" return 0", +"}", +"", +"", +"################################################################################", +"# Save panel functions.", +"################################################################################", +"", +"# Global variables needed for the save setup panel", +"", +"set format rasButton", +"set saveColor svPseudoButton", +"", +"set fileFmtButtons {", +" rasButton gifButton jpegButton tiffButton ", +" fitsButton x11Button epsButton rawButton ", +"}", +"", +"", +"# Format group procedures.", +"#---------------------------------", +"", +"# Select a format.", +"", +"proc set_format { widget func state args } \\", +"{", +" global format saveColor", +"", +" send $format set on false", +" if {$widget == $format} {", +" send $widget set on true", +" } else {", +" switch $widget { ", +" rasButton { send client setSaveOption format ras } ", +" gifButton { send client setSaveOption format gif }", +" jpegButton { send client setSaveOption format jpeg }", +" tiffButton { send client setSaveOption format tiff }", +" fitsButton { send client setSaveOption format fits }", +" x11Button { send client setSaveOption format x11 }", +" epsButton { send client setSaveOption format eps }", +" rawButton { send client setSaveOption format raw }", +" }", +" }", +"} ; foreach fmt $fileFmtButtons { send $fmt addCallback set_format }", +"", +"proc setSaveFile { widget cbtype args } \\", +"{", +" send client setSaveOption fname $args", +" send saveStatus set label [format \"output file set to %s\" $args]", +"}; send saveFile addCallback setSaveFile", +"", +"", +"proc doSaveOptions { param old new } \\", +"{", +" global format saveColor", +" global warnings", +"", +" send saveStatus set label {}", +" set val [join [lrange $new 1 end] \" \"]", +"", +" #print [format \"doSaveOptions %s = %s\" [lindex $new 0] $val]", +" switch [lindex $new 0] {", +" format { ", +" # Now (de)sensitize the color options depending on the format,", +" # force the color choice when needed.", +" send $format set on false", +" switch [lindex $val 0] {", +" ras { #send svRGBButton setSensitive false", +" send svPseudoButton setSensitive true", +" set format rasButton", +" }", +" gif { send svRGBButton setSensitive false", +" send svPseudoButton setSensitive true", +" if {$saveColor == \"svRGBButton\"} {", +" send $saveColor set on false", +" send svPseudoButton set on true", +" set saveColor svPseudoButton", +" }", +" set format gifButton", +" }", +" jpeg { send svRGBButton setSensitive true", +" send svPseudoButton setSensitive true", +" set format jpegButton", +" }", +" tiff { send svRGBButton setSensitive false", +" send svPseudoButton setSensitive true", +" set format tiffButton", +" }", +" fits { send svRGBButton setSensitive false", +" send svPseudoButton setSensitive false", +" send $saveColor set on false", +" send svGrayButton set on true", +" set saveColor svGrayButton", +" set format fitsButton", +" }", +" x11 { send svRGBButton setSensitive true", +" send svPseudoButton setSensitive true", +" set format x11Button", +" }", +" eps { send svRGBButton setSensitive true", +" send svPseudoButton setSensitive true", +" set format epsButton", +" }", +" raw { send svRGBButton setSensitive true", +" send svPseudoButton setSensitive true", +" set format rawButton", +" }", +" }", +" send $format set on true", +" }", +" color { send $saveColor set on false", +" switch [lindex $val 0] {", +" grayscale { send svGrayButton set on true", +" set saveColor svGrayButton", +" }", +" pseudocolor { send svPseudoButton set on true", +" set saveColor svPseudoButton", +" }", +" rgb { send svRGBButton set on true", +" set saveColor svRGBButton", +" }", +" }", +" }", +" fname { send saveFile set string $val", +" }", +" status { send saveStatus set label $val", +" send server synchronize", +" }", +" text { send saveData set label $val", +" }", +" warning { if {$warnings} { Wexec server $val }", +" }", +" }", +"} ; send saveOptions addCallback doSaveOptions", +"", +"", +"# Color group procedures.", +"#---------------------------------", +"send svGrayButton addCallback \"send client setSaveOption color grayscale\"", +"send svPseudoButton addCallback \"send client setSaveOption color pseudocolor\"", +"send svRGBButton addCallback \"send client setSaveOption color rgb\"", +"", +"", +"proc Save args \\", +"{", +" global panel_up", +"", +" send imagewin setCursorType busy", +"", +" # Get the print command or file template if not previous reset.", +" set val [ send saveFile get string ]", +" send client setSaveOption fname $val", +" send saveStatus set label [format \"output file set to %s\" $args]", +"", +" send client save", +" send imagewin setCursorType idle", +"} ; send okaySave addCallback Save", +"", +"", +"", +"################################################################################", +"# TILE GEOMETRY", +"################################################################################", +"", +"set tileSel 2", +"set tileOpt 0", +"set tileNcols 2", +"set tileNrows 1", +"set tile_frames {}", +"", +"proc selectTileOrientation { widget type select args } \\", +"{", +" global tileSel tileOpt", +"", +" set w { nrowLab ncolLab nrdecrease nrincrease ncdecrease ncincrease }", +" if {$select == \"Manual\"} {", +" foreach p $w { send $p setSensitive True }", +" } elseif {$select != \"none\"} {", +" foreach p $w { send $p setSensitive False }", +" }", +"", +" set w { byCols bottomUp labelFrames labelImname labelTitles }", +" if {$select == \"Disabled\"} {", +" foreach p $w { send $p setSensitive False }", +" } else {", +" foreach p $w { send $p setSensitive True }", +" }", +"", +" switch $select {", +" Disabled { set tileSel 0 }", +" Manual { set tileSel 1", +" set nx [send nctext get label]", +" set ny [send nrtext get label]", +" set select [format \"%dx%d\" $nx $ny]", +" }", +" Best { set tileSel 2 }", +" Square { set tileSel 3 }", +" Horizontal { set tileSel 4 }", +" Vertical { set tileSel 5 }", +" \"One Row\" { set tileSel 6 }", +" \"One Column\" { set tileSel 7 }", +" none { send tileMode set selection $tileSel ; return }", +" }", +"", +" # Reset the button in case we're called directly from elsewhere.", +" send tileMode set selection $tileSel", +"", +" # Send the option to the client.", +" if {$tileSel > 0} {", +" setTileFrames", +" send client setOption tileFrames \"True\"", +" set tileOpt $tileSel", +" } else {", +" send client setOption tileFrames \"False\"", +" }", +"", +"} ; send tileMode addCallback selectTileOrientation", +"", +"proc tileSelToLabel { selection args } \\", +"{", +" switch $selection {", +" 0 { return \"Disabled\" }", +" 1 { return \"Manual\" }", +" 2 { return \"Best\" }", +" 3 { return \"Square\" }", +" 4 { return \"Horizontal\" }", +" 5 { return \"Vertical\" }", +" 6 { return \"One Row\" }", +" 7 { return \"One Column\" }", +" }", +" return \"Best\"", +"}", +"", +"# Callback for the fill style options.", +"proc selectFillStyle { widget type state args } \\", +"{", +" if {$state} { set not False } else { set not True }", +"", +" switch $widget {", +" byCols { send client setOption tileByRows $not }", +" bottomUp { send client setOption tileTopDown $not }", +" }", +"} ; foreach w {byCols bottomUp} { send $w addCallback selectFillStyle }", +"", +"# Callback for the tile labelling options.", +"proc selectTileLabels { widget type state args } \\", +"{", +" if {$state} { ", +" switch $widget {", +" labelFrames { send client setOption tileLabels 1 }", +" labelImname { send client setOption tileLabels 2 }", +" labelTitles { send client setOption tileLabels 3 }", +" }", +" } else {", +" send client setOption tileLabels 0", +" }", +" send $widget set on $state", +"}", +"foreach w {labelFrames labelImname labelTitles} {", +" send $w addCallback selectTileLabels", +"}", +"", +"# Callback for the Tile Frame selection toggles.", +"proc setTileFrames args \\", +"{", +" global tile_frames tileSel tileNcols tileNrows", +"", +" # No-op if tiling isn't enabled.", +" if {$tileSel == 0} \\", +" return", +"", +" # Get the new tile frames list.", +" set tile_frames {}", +" for {set i 1} {$i <= 16} {incr i} {", +" if {[send tFrame$i get state]} {", +" lappend tile_frames $i", +" }", +" }", +"", +" # Reset the geometry.", +" set geom [format \"%dx%d\" $tileNcols $tileNrows]", +" switch $tileSel {", +" 1 { send client setOption tileGeom $geom \\{ $tile_frames \\} }", +" 2 { send client setOption tileGeom Best \\{ $tile_frames \\} }", +" 3 { send client setOption tileGeom Square \\{ $tile_frames \\} }", +" 4 { send client setOption tileGeom Horizontal \\{ $tile_frames \\} }", +" 5 { send client setOption tileGeom Vertical \\{ $tile_frames \\} }", +" 6 { send client setOption tileGeom Row \\{ $tile_frames \\} }", +" 7 { send client setOption tileGeom Column \\{ $tile_frames \\} }", +" }", +"}; for {set i 1} {$i <= 16} {incr i} {send tFrame$i addCallback setTileFrames}", +"", +"proc setAllTileFrames args \\", +"{", +" global tileNcols tileNrows", +" for {set i 1} {$i <= 16} {incr i} {", +" if {[send tFrame$i get sensitive]} {", +" send tFrame$i set state True", +" }", +" }", +" setTileFrames", +"} ; send tAll addCallback setAllTileFrames", +"", +"proc setNoTileFrames args \\", +"{", +" global tileNcols tileNrows", +" for {set i 1} {$i <= 16} {incr i} {", +" if {[send tFrame$i get sensitive]} {", +" send tFrame$i set state False", +" }", +" }", +" setTileFrames", +"} ; send tNone addCallback setNoTileFrames", +"", +"proc tileOptions { param old new } \\", +"{", +" global tileNcols tileNrows", +"", +" set tileNcols [lindex $new 0]", +" set tileNrows [lindex $new 1]", +"", +" # Set the geometry.", +" send nctext set label $tileNcols", +" send nrtext set label $tileNrows", +" send tileGeometry set label [format \\", +" \"Tile Geometry: %-2dx%2d\" $tileNcols $tileNrows]", +"", +"} ; send tileOptions addCallback tileOptions", +"", +"", +"proc tileSetRows { widget args } \\", +"{", +" global nframes tile_frames", +"", +" set nx [send nctext get label]", +" set ny [send nrtext get label]", +"", +" if {$widget == \"nrdecrease\" && [expr ($ny-1)] > 0} {", +" incr ny -1", +" } elseif {$widget == \"nrincrease\" && [expr ($ny+1)] <= $nframes} {", +" incr ny 1", +" } else {", +" return", +" }", +" set geom [format \"%dx%d\" $nx $ny]", +" send client setOption tileGeom $geom $tile_frames", +"} ; foreach w { nrdecrease nrincrease } { send $w addCallback tileSetRows }", +"", +"proc tileSetCols { widget args } \\", +"{", +" global nframes tile_frames", +"", +" set nx [send nctext get label]", +" set ny [send nrtext get label]", +"", +" if {$widget == \"ncdecrease\" && [expr ($nx-1)] > 0} {", +" incr nx -1", +" } elseif {$widget == \"ncincrease\" && [expr ($nx+1)] <= $nframes} {", +" incr nx 1", +" } else {", +" return", +" }", +" set geom [format \"%dx%d\" $nx $ny]", +" send client setOption tileGeom $geom $tile_frames", +"} ; foreach w { ncdecrease ncincrease } { send $w addCallback tileSetCols }", +"", +"", +"# Initialize the frame tiling.", +"setAllTileFrames", +"selectTileOrientation junk junk Disabled", +"selectFillStyle byRows junk True", +"selectFillStyle topDown junk True", +"selectTileLabels labelImname junk False", +"", +"################################################################################", +"# Coords Panel Callbacks.", +"################################################################################", +"", +"# In case we need to change the values....", +"#global wcsPHeight wcsPTxtHeight wcsPGrHeight wcsPOptHeight", +"#set wcsPHeight 267", +"#set wcsPTxtHeight 132", +"#set wcsPGrHeight 175", +"#set wcsPOptHeight 233", +"#setCoordPanelHeight", +"", +"set wcsPHeight 267 ;# full panel no options", +"set wcsPTxtHeight 132 ;# size of text area box", +"set wcsPGrHeight 175 ;# size of text area group", +"set wcsPOptHeight 233 ;# extra height for opts boxes", +"", +"# Set the WCS readout panel sensitivity depending on whether the ISM", +"# is currently enabled.", +"proc setCoordPanelSensitivity args \\", +"{", +" set widgets { ", +" wpWcs2 wpWcs3 wpWcs4 ", +" wiWcs2 wiWcs3 wiWcs4 ", +" wlWcs2 wlWcs3 wlWcs4", +" sysWcs2 sysWcs3 sysWcs4 ", +" fmtWcs2 fmtWcs3 fmtWcs4", +" }", +"", +" send sysWcs1 set label \"Display\"", +" send fmtWcs1 set label \"Default\"", +"", +" for {set i 2} {$i <= 4} {incr i} {", +" send sysWcs$i set label \"None\" ; send fmtWcs$i set label \"Default\"", +" send wpWcs$i set on False ; send wiWcs$i set on False", +" send wtWcs$i set height 4", +" }", +"", +" if {[send ismToggle get on]} {", +" send sysWcs2 set label \"World\" ; send fmtWcs2 set label \"Default\"", +" send wpWcs2 set on True ; send wiWcs2 set on True", +" send wtWcs2 set height 17", +"", +" foreach w $widgets { send $w setSensitive True }", +" } else {", +" foreach w $widgets { send $w setSensitive False }", +" }", +"}", +"", +"", +"# Set the Coords Panel height depending on the option settings.", +"proc setCoordPanelHeight args \\", +"{", +" global wcsPHeight wcsPOptHeight wcsPTxtHeight wcsPGrHeight", +" global tabTop", +"", +" if {$tabTop != \"wcs_panel\"} \\", +" return", +"", +" # Get the height of the text area", +" set panel_h $wcsPHeight", +" set shrinkage 0", +" foreach w { wpWcs1 wpWcs2 wpWcs3 wpWcs4 woptFBinfo } {", +" if {[send $w get on] == 0} {", +" incr shrinkage 13", +" }", +" }", +" if {[send woptTitles get on] == 0} {", +" incr shrinkage 26", +" }", +"", +" set ph [expr ($wcsPHeight - $shrinkage)]", +" if {[send wcsOptions get on] == 1} {", +" incr ph $wcsPOptHeight", +" }", +"", +" send wcsGroup set height [ expr ($wcsPGrHeight - $shrinkage) ]", +" send wcsFrame set height [ expr ($wcsPTxtHeight - $shrinkage) ]", +" send panel set height $ph", +"}", +"", +"# Toggle the options display for the panel.", +"proc wcsOptToggle { widget type state args } \\", +"{", +" global wcsPOptHeight", +" set h [ send panel get height ] ", +" if {$state == 1} {", +" send panel set height [ expr ($h + $wcsPOptHeight) ]", +" } else { ", +" send panel set height [ expr ($h - $wcsPOptHeight) ]", +" }", +"} ; send wcsOptions addCallback wcsOptToggle", +"", +"# Handle the panel display toggles.", +"proc wcsCoordsCB { widget type state args } \\", +"{", +"", +" set hght [ expr (($state == 1) ? 17 : 4)]", +" switch $widget {", +" wpWcs1 { send wtWcs1 set height $hght }", +" wpWcs2 { send wtWcs2 set height $hght }", +" wpWcs3 { send wtWcs3 set height $hght }", +" wpWcs4 { send wtWcs4 set height $hght }", +" woptFBinfo { send wtFBCfg set height $hght }", +" woptTitles { send wtName set height $hght ; send wtTitle set height $hght }", +" }", +" setCoordPanelHeight ", +"}", +"set wcValues { wpWcs1 wpWcs2 wpWcs3 wpWcs4 woptFBinfo woptTitles }", +"foreach w $wcValues { send $w addCallback wcsCoordsCB }", +"", +"", +"# Handle WCS label string options.", +"set wcsLabels 1", +"proc wcsLabelsCB { widget type state args } \\", +"{", +" global up_todo wcsLabels", +" set wcsLabels $state", +" #resizeCoordsBox 0", +" resizeCoordsBox $up_todo", +" updateCoordsBox", +"} ; send woptLabels addCallback wcsLabelsCB", +"", +"", +"# Toggle the BPM tracking state.", +"proc wcsBPMCB { widget type state args } \\", +"{", +" global ism_enable", +" if ($ism_enable) { catch { send wcspix set bpm $state } }", +"} ; send woptBPM addCallback wcsBPMCB", +"", +"", +"# Procedures to format lines in the wcsText box.", +"proc wcsFmtImname { name } \\", +"{", +" send wtName set string [format \" Name: %s\" [string trimleft $name]]", +"}", +"", +"proc wcsFmtImtitle { title } \\", +"{", +" send wtTitle set string [format \" Title: %s\" [string trimleft $title]]", +"}", +"", +"proc wcsFmtFBConfig args \\", +"{", +" global frameWidth frameHeight frame nframes", +" set buf [ format \"%5d x %-5d\" $frameWidth $frameHeight ]", +" set line [ format \"Frame Buf: %-13s Frame: %d of %d\" \\", +" [string trimleft $buf] $frame $nframes ]", +" send wtFBCfg set string $line", +"}", +"", +"proc wcsFmtIValue { value } \\", +"{", +" global coord", +" set line [ format \" Pixel: %.11s\" $value ]", +" send wtIPixval set string $line", +" if {[info exists coord(ival)]} {", +" set coord(ival) $value", +" updateCoordsBox", +" }", +"}", +"", +"proc wcsFmtSValue { value } \\", +"{", +" global coord", +" set line [ format \" Scaled: %.8s\" $value ]", +" send wtSPixval set string $line", +" set coord(sval) [format \"%s\" $value]", +"}", +"", +"proc wcsFmtBValue { value } \\", +"{", +" global coord", +"", +" if { [send woptBPM get on] } {", +" set line [ format \" BPM: %s\" $value ]", +" set color [expr { ($value == 0) ? \"black\" : \"red\" } ]", +" set msg [format \"set string \\{%s\\}; set background %s\" $line $color ]", +" set coord(bval) [format \"%s\" $value]", +" } else {", +" set line [ format \" BPM: (off)\" ]", +" set msg [format \"set string \\{%s\\}\" $line]", +" }", +" send wtBPixval $msg", +"}", +"", +"proc wcsFmtWcs { num wcsname x y xunit yunit args } \\", +"{ ", +" global coord coordLab wcsLabels", +"", +" if {$wcsLabels} {", +" set line [ format \"%4s: %12s %4s: %12s WCS: %s\" \\", +" $xunit $x $yunit $y [string trimleft $wcsname] ]", +" } else {", +" set line [ format \"%4s %12s %4s %12s %s\" \\", +" \" \" $x \" \" $y [string trimleft $wcsname] ]", +" }", +" send wtWcs$num set string $line", +"", +" if {[info exists coord(wcs$num)]} {", +" if {$num == 1} {", +" set coord(wcs1) [ format \"\\{%s\\} \\{%s\\} \\{%s\\}\" $x $y $coord(sval) ]", +" } elseif {$num == 2} {", +" set coord(wcs2) [ format \"\\{%s\\} \\{%s\\} \\{%s\\}\" $x $y $coord(ival) ]", +" } else {", +" set coord(wcs$num) [ format \"\\{%s\\} \\{%s\\} \\{%s\\}\" $x $y $wcsname ]", +" }", +"", +" set coordLab(wcs$num) [ format \"\\{%s\\} \\{%s\\} \\{%s\\}\" \\", +" $xunit $yunit [string trimleft $wcsname ] ]", +" updateCoordsBox", +" }", +"}", +"", +"", +"", +"# Handle the wcsbox readout.", +"#------------------------------", +"set up_todo 2", +"set up_done 0", +"set coord(ival) 0.", +"set coord(sval) 0.", +"set coord(bval) 0", +"set coord(wcs1) { 0. 0. 0. }", +"set coord(wcs2) { 0. 0. 0. }", +"set coord(wcs3) { 0. 0. 0. }", +"set coord(wcs4) { 0. 0. 0. }", +"", +"proc wcsCoordB { widget type state args } \\", +"{", +" global coord up_todo", +"", +" switch $widget {", +" wiWcs1 { set line wcs1 ;set coord($line) { 0. 0. \"\" } }", +" wiWcs2 { set line wcs2 ;set coord($line) { 0. 0. \"\" } }", +" wiWcs3 { set line wcs3 ;set coord($line) { 0. 0. \"\" } }", +" wiWcs4 { set line wcs4 ;set coord($line) { 0. 0. \"\" } }", +" }", +"", +" if {$state} {", +" incr up_todo", +" } else {", +" unset coord($line)", +" incr up_todo -1", +" }", +"", +" resizeCoordsBox $up_todo", +" updateCoordsBox", +"}", +"set wiValues { wiWcs1 wiWcs2 wiWcs3 wiWcs4 }", +"foreach w $wiValues { send $w addCallback wcsCoordB }", +"", +"", +"# Resize the coords box depending on the panel options.", +"proc resizeCoordsBox { nlines } \\", +"{", +" global track_enable wcsLabels winWidth winHeight wcsboxGeom ", +"", +" if {! $track_enable} \\", +" return", +"", +" send wcsbox getAttributes width cur_w height cur_h ", +" set defGeom [format \"%sx%s-5-5\" $cur_w $cur_h]", +" send imagewin parseGeometry $wcsboxGeom $defGeom x y width height", +"", +" set ew [expr (($wcsLabels == 1) ? 125 : 65)]", +"", +" # Reset to the default geometry", +" if {$nlines == 0} {", +" set x [expr ($x + $ew)]", +" set y [expr ($y + $height - 17 + 1)]", +" set new_w 166", +" set new_h 17", +"", +" } else {", +" if {$width > 166} { ;# not using default wcsbox", +" set new_w $width", +" } else {", +" set new_w [expr ($width + $ew)]", +" set x [expr ($x - $ew)]", +" if {$wcsLabels == 0} {", +" incr x 60", +" }", +" }", +" set new_h [ expr ($nlines * 17) ]", +" set y [expr ($y + $height - $new_h + 1)]", +" }", +"", +" # Bounds checking.", +" if {$x < 5} {", +" set x 5", +" } elseif {$x > [expr ($winWidth - $new_w - 5)]} {", +" set x [expr ($winWidth - $new_w - 5)]", +" }", +" if {$y < 5} {", +" set y 5", +" } elseif {$y > [expr ($winHeight - $new_h - 5)]} {", +" set y [expr ($winHeight - $new_h - 5)]", +" }", +"", +" # Finally redraw the marker.", +" send wcsbox \"\\", +" setAttributes \\", +" width $new_w \\", +" height $new_h \\", +" x $x \\", +" y $y; \\", +" redraw\"", +"", +" set wcsboxGeom [send imagewin getGeometry $x $y $new_w $new_h]", +" send client encodewcs [expr ($winWidth / 2)] [expr ($winHeight / 2)]", +" updateCoordsBox", +"}", +"", +"", +"# Shortcuts for known WCS labels.", +"set labels(display) \"TV\"", +"set labels(logical) \"Log\"", +"set labels(physical) \"Phys\"", +"set labels(equatorial) \"Eq\"", +"set labels(ecliptic) \"Ecl\"", +"set labels(galactic) \"Gal\"", +"set labels(supergalactic) \"SGal\"", +"set labels(amplifier) \"Amp\"", +"set labels(ccd) \"CCD\"", +"set labels(detector) \"Det\"", +"", +"", +"# Format the coords box marker with the selected output options.", +"proc updateCoordsBox args \\", +"{", +" global ism_enable coord coordLab wcsLabels", +" global up_done up_todo labels track_enable", +" global coord", +"", +" if {! $ism_enable} \\", +" return", +"", +" incr up_done", +"", +" set text \"\"", +" foreach l {wcs1 wcs2 wcs3 wcs4} {", +" if {[info exists coord($l)]} {", +" set x [lindex $coord($l) 0]", +" set y [lindex $coord($l) 1]", +" set z [string tolower [string trimleft [lindex $coord($l) 2] ] ]", +" if {[info exists labels($z)]} {", +" set z $labels($z)", +" }", +"", +" if {$wcsLabels && [info exists coordLab($l)]} {", +" set lx [lindex $coordLab($l) 0]", +" set ly [lindex $coordLab($l) 1]", +" append text [format \" %4s %12.12s %4s %12.12s %9.9s \\n\" \\", +" $lx $x $ly $y $z ]", +" } else {", +" append text [format \" %12.12s %12.12s %9.9s \\n\" $x $y $z ]", +" }", +" }", +" }", +"", +" # Now send the string.", +" if {$track_enable} {", +" set color [expr { ($coord(bval) == 0) ? \"black\" : \"red\" } ]", +" set txt [format \"set text \\{%s\\}; set textBgColor %s; redraw noerase\" \\", +" $text $color ]", +" send wcsbox $txt", +" }", +"", +" if {$up_done >= $up_todo} {", +" set up_done 0 ;# reset counter", +" }", +"}", +"", +"", +"# Create the WCS format menus.", +"#------------------------------------", +"proc setWcsFmt { format line } \\", +"{", +" catch { send wcspix set format $format $line }", +"}", +"", +"for {set i 1} {$i <= 4} {incr i} {", +" set items {}", +" lappend items \"\\\"Default\\\" f.exec \\{setWcsFmt default $i\\}\"", +" lappend items \"\\\"Sexigesimal\\\" f.exec \\{setWcsFmt hms $i\\}\"", +" lappend items \"\\\"Degrees\\\" f.exec \\{setWcsFmt deg $i\\}\"", +" lappend items \"\\\"Radians\\\" f.exec \\{setWcsFmt rad $i\\}\"", +" editMenu fmtMenu$i fmtWcs$i $items", +"}", +"", +"", +"# Create the default WCS type menus.", +"#------------------------------------", +"", +"set defaultWcsMenu {", +" { \"None\" f.exec {setWcsSys none WCS_LINE } }", +" { \"Display\" f.exec {setWcsSys display WCS_LINE } }", +" { \"World\" f.exec {setWcsSys world WCS_LINE } }", +" { \"Logical\" f.exec {setWcsSys logical WCS_LINE } }", +" { \"Physical\" f.exec {setWcsSys physical WCS_LINE } }", +" { f.dblline }", +"}", +"", +"proc setWcsSys { sys line } \\", +"{", +" if {[string tolower $sys] == \"none\"} {", +" wcsCoordB wiWcs$line junk 0", +" send sysWcs$line set label \"None\"; send fmtWcs$line set label \"Default\"", +" send wpWcs$line set on False ; send wiWcs$line set on False", +" send wtWcs$line set height 4", +" setCoordPanelHeight", +"", +" } else {", +" catch { send wcspix set wcs $sys $line }", +" }", +"}", +"", +"proc resetDefaultWcsMenu args \\", +"{", +" global defaultWcsMenu", +"", +" for {set i 1} {$i <= 4} {incr i} {", +" regsub -all WCS_LINE $defaultWcsMenu $i menu_def", +" editMenu sysMenu$i sysWcs$i $menu_def", +" }", +"} ; resetDefaultWcsMenu", +"", +"", +"# Initialize the coordinates panel.", +"#------------------------------------", +"", +"proc initCoordsPanel args \\", +"{", +" #send wcLine set height 2 ;# kludge for label widget", +"", +" # Initialize the display strings in the coords box.", +" wcsFmtImname \"\"", +" wcsFmtImtitle \"\"", +" wcsFmtFBConfig", +" wcsFmtIValue \"0.\" ; wcsFmtSValue \"0.\" ; wcsFmtBValue \"0\"", +" wcsFmtWcs 1 \"\" \"\" \"\" \" X\" \" Y\"", +" wcsFmtWcs 2 \"\" \"\" \"\" \" X\" \" Y\"", +" wcsFmtWcs 3 \"\" \"\" \"\" \" X\" \" Y\"", +" wcsFmtWcs 4 \"\" \"\" \"\" \" X\" \" Y\"", +"", +" send fmtWcs1 set label Default", +" send wpWcs1 set on True ;send wiWcs1 set on True", +" send wpWcs2 set on True ;send wiWcs2 set on True", +" send wpWcs3 set on False ;send wiWcs3 set on False ;send wtWcs3 set height 4", +" send wpWcs4 set on False ;send wiWcs4 set on False ;send wtWcs4 set height 4", +"", +" # Set the Coords Panel height.", +" set wcsPTxtHeight [send wcsText get height]", +" setCoordPanelHeight", +"", +" # Set the WCS readout panel sensitivity.", +" setCoordPanelSensitivity", +"", +"} ; initCoordsPanel", +"", +"", +"", +"", +"################################################################################", +"# Compass indicator procedures.", +"################################################################################", +"", +"set compassColor 207 ;# normally this is yellow", +"set last_compass [send compass get on] ;# save compass state", +"", +"proc drawCompass args \\", +"{", +" global ism_enable frame frameCache compassColor Compass Orient", +" global panner_x panner_y panner_width panner_height cur_objid", +" global redraw_compass last_compass", +"", +" ", +" if {! [send compass get on]} \\", +" return", +"", +" eraseCompass ;# erase the old compass", +"", +" if {! [info exists frameCache($frame)] } {", +" set id -1", +" } elseif {$cur_objid != [lindex $frameCache($frame) 1]} {", +" set id [lindex $frameCache($frame) 1]", +" } else {", +" set id $cur_objid", +" }", +"", +" if { [info exists Compass($id)] } {", +" set angle [lindex $Compass($id) 0]", +" set north_x [lindex $Compass($id) 1]", +" set north_y [lindex $Compass($id) 2]", +" set east_x [lindex $Compass($id) 3]", +" set east_y [lindex $Compass($id) 4]", +" set transpose [lindex $Compass($id) 5]", +" set xlab [lindex $Compass($id) 6]", +" set ylab [lindex $Compass($id) 7]", +" } else {", +" set north_x 0.0 ; set north_y 1.0", +" set east_x 1.0 ; set east_y 0.0", +" set xlab X ; set ylab Y", +" set angle 0.0 ; set transpose 0", +" set Compass($id) { 0.0 1.0 0.0 1.0 0.0 0 X Y }", +" }", +" set xflip 1", +" set yflip 1", +"", +" # Adjust the compass for the display orientation (e.g. image sections", +" # used to flip an image during display).", +" if { [info exists Orient($id)] } {", +" set xflip [expr $xflip * [lindex $Orient($id) 1] ]", +" set yflip [expr $yflip * [lindex $Orient($id) 2] ]", +" }", +"", +" # Get the panner center position.", +" set pcx [expr ($panner_x + $panner_width / 2)]", +" set pcy [expr ($panner_y + $panner_height / 2)]", +"", +" # Setup for the overlay.", +" send imagewin getLogRes sv_xl sv_yl", +" send imagewin getPhysRes sv_xp sv_yp", +" send imagewin setLogRes $sv_xp $sv_yp", +" send imagewin setLineWidth 2", +"", +" set xflip [ expr ($xflip * ([send xflipButton get state] ? -1 : 1))]", +" set yflip [ expr ($yflip * ([send yflipButton get state] ? -1 : 1))]", +"", +" # Normalized compass points. The first row are the axes, second is", +" # the pointer head, and last are the X/Y label coords. Assumes a", +" # zero rotation with North up and East left, or standard X/Y orientation.", +" set cpoints {", +" {-1 0} {0 0} {0 -1}", +" {-0.07 -0.85} {0 -1} {0.07 -0.85} {-0.07 -0.85}", +" {-1.2 0} {0 -1.2}", +" }", +"", +"", +" # Get rotation and scale factors.", +" set angle [expr \"atan2($north_y,$north_x)\"]", +" set coso [expr \"cos (-$angle)\"]", +" set sino [expr \"sin (-$angle)\"]", +" set scale [expr ([min $panner_width $panner_height] * 0.3)]", +"", +" # Initialize the drawing points.", +" set pts {}", +"", +" set cpoints { }", +" lappend cpoints [list $east_x $east_y ]", +" lappend cpoints [list 0 0]", +" lappend cpoints [list $north_x $north_y]", +" foreach p $cpoints {", +" # Get the scaled position.", +" set sx [expr ($scale * [lindex $p [expr \"($transpose > 0) ? 1 : 0\"]])]", +" set sy [expr ($scale * [lindex $p [expr \"($transpose > 0) ? 0 : 1\"]])]", +"", +" # Translate to the scaled position.", +" set rx [expr int($pcx + $sx + 0.5)]", +" set ry [expr int($pcy - $sy + 0.5)]", +"", +" # Now handle the axis flip.", +" set rx [expr (($xflip < 0) ? ($pcx + ($pcx - $rx)) : $rx)]", +" set ry [expr (($yflip < 0) ? ($pcy + ($pcy - $ry)) : $ry)]", +" lappend pts $rx $ry", +" }", +"", +"", +" set rpoints { }", +" set hpoints { {0.0 0.0} {-0.1 -0.07} {-0.1 0.07} {0.0 0.0} }", +" foreach p $hpoints {", +" # Break out the position.", +" set sx [lindex $p [expr \"($transpose > 0) ? 1 : 0\"]]", +" set sy [lindex $p [expr \"($transpose > 0) ? 0 : 1\"]]", +"", +" # Do the rotation of the head at the origin.", +" set rx [expr ($north_x + ($sx * $coso + $sy * $sino))]", +" set ry [expr ($north_y - ($sx * $sino + $sy * $coso))]", +"", +" lappend rpoints [list $rx $ry]", +" }", +" foreach p $rpoints {", +" # Get the scaled position.", +" set sx [expr ($scale * [lindex $p [expr \"($transpose > 0) ? 1 : 0\"]])]", +" set sy [expr ($scale * [lindex $p [expr \"($transpose > 0) ? 0 : 1\"]])]", +"", +" # Translate to the scaled position.", +" set rx [expr int($pcx + $sx + 0.5)]", +" set ry [expr int($pcy - $sy + 0.5)]", +"", +" # Now handle the axis flip.", +" set rx [expr (($xflip < 0) ? ($pcx + ($pcx - $rx)) : $rx)]", +" set ry [expr (($yflip < 0) ? ($pcy + ($pcy - $ry)) : $ry)]", +" lappend pts $rx $ry", +" }", +"", +" set lpoints { }", +" lappend lpoints [list [expr \"$east_x-0.2\"] $east_y ]", +" lappend lpoints [list $north_x [expr \"$north_y+0.2\"] ]", +" foreach p $lpoints {", +" # Get the scaled position.", +" set sx [expr ($scale * [lindex $p [expr \"($transpose > 0) ? 1 : 0\"]])]", +" set sy [expr ($scale * [lindex $p [expr \"($transpose > 0) ? 0 : 1\"]])]", +"", +" # Translate to the scaled position.", +" set rx [expr int($pcx + $sx + 0.5)]", +" set ry [expr int($pcy - $sy - 0.5)]", +"", +" # Now handle the axis flip.", +" set rx [expr (($xflip < 0) ? ($pcx + ($pcx - $rx)) : $rx)]", +" set ry [expr (($yflip < 0) ? ($pcy + ($pcy - $ry)) : $ry)]", +" lappend pts $rx $ry", +" }", +"", +"", +" # Draw the compass axes.", +" set compassPts [lrange $pts 0 5]", +" send imagewin setColorIndex $compassColor", +" send imagewin drawPolyline $compassPts", +"", +" ", +" # Draw the compass pointer.", +" set head [lrange $pts 6 13]", +" send imagewin setFillType solid", +" send imagewin drawPolygon $head", +"", +" # Draw the labels.", +" send imagewin drawAlphaText [lindex $pts 14] [lindex $pts 15] $xlab", +" send imagewin drawAlphaText [lindex $pts 16] [lindex $pts 17] $ylab", +"", +" send imagewin setLogRes $sv_xl $sv_yl", +"", +" set redraw_compass 0", +"", +"} ; foreach w {xflip yflip} { send $w addCallback drawCompass }", +"", +"", +"# This is a kludge to redraw the compass after it is erased when displaying", +"# a new image. Once the user moves the mouse back into the main window we'll", +"# do the redraw.", +"send imagewin addEventHandler drawCompass enterWindowMask", +"", +"", +"", +"proc createCompassMarker { pts args } \\", +"{", +" set cm_points { }", +" lappend cm_points [lrange $pts 0 1]", +" lappend cm_points [lrange $pts 2 3]", +" lappend cm_points [lrange $pts 4 5]", +"", +" print [list $cm_points]", +"", +"}", +"", +"", +"proc eraseCompass args \\", +"{", +" global panner_mapping", +" send imagewin refreshMapping $panner_mapping", +"}", +"", +"proc toggleCompass { widget type state args } \\", +"{", +" global last_compass", +"", +" if {$state} {", +" drawCompass", +" set last_compass True", +" } else {", +" eraseCompass", +" set last_compass False", +" }", +"} ; send compass addCallback toggleCompass", +"", +"", +"", +" ", +"################################################################################", +"# RULER MARKERS", +"################################################################################", +"", +"set rulerX 0 ;# ruler start in screen coords", +"set rulerY 0", +"set rulerPts { {0 0} {0 0} {0 0} } ;# ruler vertices", +"set rulerList { } ;# ruler list", +"", +"set rulerSticky { } ;# list of sticky rulers", +"set isSticky \"Sticky\" ;# menu label", +"", +"set rulerWCS 0 ;# use WCS coords", +"set rulerXWCS 0 ;# ruler start in WCS units", +"set rulerYWCS 0", +"set rulerXWCS2 0 ;# ruler end in WCS units", +"set rulerYWCS2 0", +"set rulerFmt pixel ;# ruler label format", +"", +"", +"# Translations when pointer is inside marker.", +"set rulerTranslations { \\", +" !Ctrl b: call(prevFrame,$name)", +" !Ctrl b: call(prevFrame,$name)", +" !Ctrl f: call(nextFrame,$name)", +" !Ctrl h: call(move_cursor,-1,0)", +" !Ctrl j: call(move_cursor,0,1)", +" !Ctrl k: call(move_cursor,0,-1)", +" !Ctrl l: call(move_cursor,1,0)", +" !Ctrl n: call(normalize)", +" !Ctrl c: call(cpZoomAction,centerFrame)", +" !Ctrl i: call(cpInvert)", +" !Ctrl m: call(cpMatchFrames)", +" !Ctrl r: call(cpRegisterFrames)", +" !Ctrl p: call(togglePanner)", +" !Alt 1: call(cpSetFrame,frame1)", +" !Alt 2: call(cpSetFrame,frame2)", +" !Alt 3: call(cpSetFrame,frame3)", +" !Alt 4: call(cpSetFrame,frame4)", +" !Ctrl 1: call(cpZoom,1,1,fixed)", +" !Ctrl 2: call(cpZoom,2,2,fixed)", +" !Ctrl 3: call(cpZoom,3,3,fixed)", +" !Ctrl 4: call(cpZoom,4,4,fixed)", +" !Ctrl 5: call(cpZoom,5,5,fixed)", +" !Ctrl 6: call(cpZoom,6,6,fixed)", +" !Ctrl 7: call(cpZoom,7,7,fixed)", +" !Ctrl 8: call(cpZoom,8,8,fixed)", +" !Ctrl 9: call(cpZoom,9,9,fixed)", +" BackSpace: call(deleteNamedRuler,NAME,$x,$y)", +" Delete: call(deleteNamedRuler,NAME,$x,$y)", +" : m_input()", +" : call(setRulerMenu) popup(rulerMenu)", +" : popdown(rulerMenu)", +"!Ctrl : track-cursor() call(wcsUpdate,$x,$y) call(resizeRuler,$x,$y,0)", +" !Ctrl : call(deleteRuler,$x,$y)", +" : track-cursor() call(wcsUpdate,$x,$y) call(magnifierMapImage,$x,$y)", +"}", +"", +"", +"", +"# Popup menu in effect when inside marker.", +"set rulerMenuDescription {", +" { \"Ruler\" f.title }", +" { f.dblline }", +" { \"$isSticky\" f.exec { ", +" toggleSticky $ruler", +" } }", +" { f.line }", +" { \"Units\" f.menu rulerUnits }", +" { \"Color\" f.menu rulerColor }", +" { f.line }", +" { \"Draw into Frame\" f.exec { ", +" writeRuler $ruler", +" } sensitive False }", +" { f.line }", +" { \"Destroy\" f.exec { ", +" scan $ruler \"ruler%d\" num", +" deleteNamedRuler $num x y", +" } }", +"} ; createMenu rulerMenu imagewin $rulerMenuDescription", +"", +"set rulerUnitsDescription {", +" { Units f.title }", +" { f.dblline }", +" { \"Pixels\" f.exec { setUnits $ruler pixel } }", +" { \"Arc Seconds\" f.exec { setUnits $ruler arcsec ", +" } sensitive { ($rulerWCS > 0) ? \"True\" : \"False\"} }", +" { \"Arc Minutes\" f.exec { setUnits $ruler arcmin ", +" } sensitive { ($rulerWCS > 0) ? \"True\" : \"False\"} }", +" { \"Degrees\" f.exec { setUnits $ruler degrees ", +" } sensitive { ($rulerWCS > 0) ? \"True\" : \"False\"} }", +"} ; createMenu rulerUnits rulerMenu $rulerUnitsDescription", +"", +"set rulerColorDescription {", +" { Color f.title }", +" { f.dblline }", +" { \"\" f.exec \"r_setColor $ruler black yellow\"", +" bitmap solid foreground black }", +" { \"\" f.exec \"r_setColor $ruler white black\" ", +" bitmap solid foreground white }", +" { \"\" f.exec \"r_setColor $ruler red yellow\" ", +" bitmap solid foreground red }", +" { \"\" f.exec \"r_setColor $ruler green black\" ", +" bitmap solid foreground green }", +" { \"\" f.exec \"r_setColor $ruler blue white\" ", +" bitmap solid foreground blue }", +" { \"\" f.exec \"r_setColor $ruler magenta black\" ", +" bitmap solid foreground magenta }", +" { \"\" f.exec \"r_setColor $ruler cyan black\" ", +" bitmap solid foreground cyan }", +" { \"\" f.exec \"r_setColor $ruler yellow black\" ", +" bitmap solid foreground yellow }", +"} ; createMenu rulerColor rulerMenu $rulerColorDescription", +"", +"", +"proc makeRuler {parent x y} \\", +"{", +" global rulerTranslations ruleno rulerWCS rulerXWCS rulerYWCS", +" global rulerPts rulerX rulerY rulerList", +" global isSticky rulerMenuDescription rulerUnitsDescription", +" global coord coordLab", +"", +"", +" incr ruleno ; set ruler ruler$ruleno", +"", +" # Substitute so the marker translation will delete the marker", +" # by it's number rather than the default parent widget name.", +" regsub -all NAME $rulerTranslations $ruleno translations", +"", +" # Create the polygon for the marker.", +" send $parent createMarker $ruler \\", +" type polygon\\", +" createMode noninteractive\\", +" translations $translations\\", +" lineColor yellow\\", +" fill False\\", +" highlightWidth 1\\", +" highlightColor yellow\\", +" knotSize 0\\", +" activated True\\", +" visible False\\", +" sensitive True\\", +" x $x\\", +" y $y", +"", +" # Define a callback so we can identify the ruler.", +" send $ruler addCallback selectRuler focusIn focusOut", +"", +" # Create the text markers for the labels.", +" send $parent set markerTextFont 6x9", +" makeLabelMarker $parent rulerXlab$ruleno 5ch 1ch", +" makeLabelMarker $parent rulerYlab$ruleno 5ch 1ch", +" makeLabelMarker $parent rulerHlab$ruleno 8ch 1ch", +" send $parent set markerTextFont 6x13", +"", +" set rulerX $x ;# save the reference point", +" set rulerY $y", +"", +" set ref [ list $x $y ] ;# initialize the polygon", +" set rx [ list [expr \"$x +1\"] $y ]", +" set ry [ list $x [expr \"$y +1\"] ]", +" set rulerPts [list $ref $rx $ry ]", +"", +" send $ruler setVertices $rulerPts ;# set attributes", +" send $ruler set visible True\"", +" send $ruler setAttribute autoRedraw True", +"", +" # See whether we have a WCS to use.", +" set rulerWCS 0", +" set rulerXWCS 0", +" set rulerYWCS 0", +" for {set num 1} {$num <= 4 && $rulerWCS == 0} {incr num} {", +" if { [info exists coordLab(wcs$num)] } {", +" set xl [string tolower [lindex $coordLab(wcs$num) 0]]", +" set yl [string tolower [lindex $coordLab(wcs$num) 1]]", +" set fmt [string tolower [send fmtWcs$num get label] ]", +" if {$xl==\" ra\" || $xl==\"elon\" || $xl==\"glon\" || $xl==\"slon\"} {", +" set rulerWCS $num", +" set rulerXWCS [wcs2log [lindex $coord(wcs$num) 0] $xl $fmt]", +" set rulerYWCS [wcs2log [lindex $coord(wcs$num) 1] $yl $fmt]", +" }", +" }", +" }", +"", +" # Edit the menus.", +" set isSticky \"Sticky\"", +" editMenu rulerMenu imagewin $rulerMenuDescription", +" editMenu rulerUnits imagewin $rulerUnitsDescription", +"", +"", +" lappend rulerList $ruleno", +"}", +"", +"proc wcs2log { val label fmt} \\", +"{", +" set newval $val", +" if {$fmt == \"sexigesimal\" || $fmt == \"default\"} {", +" scan $val \"%d:%d:%f\" h m s", +" set newval [expr \"double($h) + double($m) / 60.0 + double($s) / 3600.0\"]", +" if {$label == \" ra\"} {", +" set newval [expr \"double($newval * 15.0)\"]", +" }", +" }", +" return [expr \"double($newval)\" ]", +"}", +"", +"", +"proc resizeRuler {x y redraw} \\", +"{", +" global rulerPts rulerX rulerY ruleno coord coordLab", +" global rulerWCS rulerXWCS rulerYWCS rulerFmt", +" global rulerXWCS2 rulerYWCS2", +"", +"", +" # Track the mouse.", +" set ref [ list $rulerX $rulerY ]", +" set rx [ list $x $rulerY ]", +" set ry [ list $x $y ]", +" set rulerPts [list $ref $rx $ry ]", +"", +" # Compute the distances.", +" if {$rulerWCS > 0} {", +" set num $rulerWCS", +" set xl [string tolower [lindex $coordLab(wcs$num) 0]]", +" set yl [string tolower [lindex $coordLab(wcs$num) 1]]", +" set fmt [string tolower [send fmtWcs$num get label] ]", +"", +" # Save the cursor coords in WCS so we can convert labels.", +" if {$redraw} {", +" set nx $rulerXWCS2", +" set ny $rulerYWCS2", +" } else {", +" set nx [wcs2log [lindex $coord(wcs$num) 0] $xl $fmt]", +" set ny [wcs2log [lindex $coord(wcs$num) 1] $yl $fmt]", +" set rulerXWCS2 $nx", +" set rulerYWCS2 $ny", +" }", +" }", +"", +" if {$rulerFmt == \"pixel\"} {", +" set xdist [ expr \"abs($x - $rulerX)\" ]", +" set ydist [ expr \"abs($y - $rulerY)\" ]", +" set hdist [ expr \"sqrt($xdist * $xdist + $ydist * $ydist)\" ]", +" } else {", +" set xdist [ expr \"abs($nx - $rulerXWCS)\" ]", +" set ydist [ expr \"abs($ny - $rulerYWCS)\" ]", +" set hdist [ expr \"sqrt($xdist * $xdist + $ydist * $ydist)\" ]", +" }", +"", +" # Redraw the polygon.", +" send ruler$ruleno setVertices $rulerPts", +"", +" # Label the distances.", +" setXRulerLabel $x $y $xdist", +" setYRulerLabel $x $y $ydist", +" setHRulerLabel $x $y $hdist", +"}", +"", +"# Create a label marker for the ruler.", +"proc makeLabelMarker { parent name width height } \\", +"{", +" send $parent createMarker $name \\", +" type text \\", +" createMode noninteractive \\", +" width $width \\", +" height $height \\", +" lineWidth 0 \\", +" imageText true \\", +" textBgColor yellow \\", +" textColor black \\", +" activated true \\", +" visible false", +"}", +"", +"proc setXRulerLabel { cx cy dist } \\", +"{", +" global rulerX rulerY ruleno winWidth winHeight", +" global cpXscale rulerFmt", +"", +" send rulerXlab$ruleno set visible False", +"", +" if {[expr \"abs($cx - $rulerX)\"] > 30} {", +" switch $rulerFmt {", +" pixel { set text [format \"%.1f\" [expr \"$dist / $cpXscale\"] ] }", +" arcsec { set text [format \"%.2f\\\"\" [expr \"$dist * 3600.0\"] ] }", +" arcmin { set text [format \"%.2f\\'\" [expr \"$dist * 60.0\"] ] }", +" degrees { set text [format \"%.2fd\" \"$dist\" ] }", +" }", +" set len [expr [string length $text] + 1]", +" send rulerXlab$ruleno \"set width ${len}ch\"", +"", +" # Compute the placement of the label marker.", +" if {$cy > $rulerY} {", +" set yp [expr \"$rulerY - 14\"]", +" } else {", +" set yp [expr \"$rulerY + 2\"]", +" }", +" if {$cx > $rulerX} {", +" set xp [expr \"$rulerX + abs($cx - $rulerX)/2 - 10\"]", +" } else {", +" set xp [expr \"$rulerX - abs($cx - $rulerX)/2 - 10\"]", +" }", +"", +" # Bounds checking.", +" if {$xp < 0} { set xp 1 }", +" if {$yp < 0} { set yp 1 }", +" if {$xp > $winWidth} { set xp [expr \"$winWidth - 20\" }", +" if {$yp > $winHeight} { set yp [expr \"$winHeight - 20\" }", +"", +" send rulerXlab$ruleno \"setAttributes x $xp y $yp\"", +" send rulerXlab$ruleno \"set text \\{$text\\}; redraw erase\"", +"", +" send rulerXlab$ruleno set visible True", +" }", +"}", +"", +"proc setYRulerLabel { cx cy dist } \\", +"{", +" global rulerX rulerY ruleno winWidth winHeight", +" global cpYscale rulerFmt", +"", +" send rulerYlab$ruleno set visible False", +"", +" if {[expr \"abs($cy - $rulerY)\"] > 20} {", +" switch $rulerFmt {", +" pixel { set text [format \"%.1f\" [expr \"$dist / $cpYscale\"] ] }", +" arcsec { set text [format \"%.2f\\\"\" [expr \"$dist * 3600.0\"] ] }", +" arcmin { set text [format \"%.2f\\'\" [expr \"$dist * 60.0\"] ] }", +" degrees { set text [format \"%.2fd\" \"$dist\" ] }", +" }", +" set len [expr [string length $text] + 1]", +" send rulerYlab$ruleno \"set width ${len}ch\"", +"", +" # Compute the placement of the label marker.", +" if {$cx > $rulerX} {", +" set xp [expr \"$cx + 2\"]", +" } else {", +" set xp [expr \"$cx - $len * 6 - 5\"]", +" }", +" if {$cy > $rulerY} {", +" set yp [expr \"$rulerY + abs($cy - $rulerY)/2\"]", +" } else {", +" set yp [expr \"$rulerY - abs($cy - $rulerY)/2\"]", +" }", +"", +" # Bounds checking.", +" if {$xp < 0} { set xp 1 }", +" if {$yp < 0} { set yp 1 }", +" if {$xp > $winWidth} { set xp [expr \"$winWidth - 20\" }", +" if {$yp > $winHeight} { set yp [expr \"$winHeight - 20\" }", +"", +" send rulerYlab$ruleno \"setAttributes x $xp y $yp\"", +" send rulerYlab$ruleno \"set text \\{$text\\}; redraw erase\"", +" send rulerYlab$ruleno set visible True", +" } ", +"}", +"", +"proc setHRulerLabel { cx cy dist } \\", +"{", +" global rulerX rulerY ruleno winWidth winHeight", +" global cpYscale cpXscale rulerFmt", +"", +" send rulerHlab$ruleno set visible False", +"", +" set xdist [ expr \"abs($cx - $rulerX)\" ]", +" set ydist [ expr \"abs($cy - $rulerY)\" ]", +" set hdist [ expr \"sqrt($xdist * $xdist + $ydist * $ydist)\" ]", +"", +" if {$hdist > 30} {", +" switch $rulerFmt {", +" pixel { set text [format \"%.1f\" [expr \"$dist / $cpXscale\"] ] }", +" arcsec { set text [format \"%.2f\\\"\" [expr \"$dist * 3600.0\"] ] }", +" arcmin { set text [format \"%.2f\\'\" [expr \"$dist * 60.0\"] ] }", +" degrees { set text [format \"%.2fd\" \"$dist\" ] }", +" }", +" set len [expr [string length $text] + 1]", +" send rulerHlab$ruleno \"set width ${len}ch\"", +"", +" # Compute the placement of the label marker.", +" if {$cx > $rulerX} {", +" set xp [expr \"$rulerX + abs($cx - $rulerX)/2 - $len * 6\"]", +" } else {", +" set xp [expr \"$rulerX - abs($cx - $rulerX)/2 - $len * 3\"]", +" }", +" if {$cy > $rulerY} {", +" set yp [expr \"$rulerY + abs($cy - $rulerY)/2\"]", +" } else {", +" set yp [expr \"$rulerY - abs($cy - $rulerY)/2\"]", +" }", +"", +" # Bounds checking.", +" if {$xp < 0} { set xp 1 }", +" if {$yp < 0} { set yp 1 }", +" if {$xp > $winWidth} { set xp [expr \"$winWidth - 20\" }", +" if {$yp > $winHeight} { set yp [expr \"$winHeight - 20\" }", +"", +" send rulerHlab$ruleno \"setAttributes x $xp y $yp\"", +" send rulerHlab$ruleno \"set text \\{$text\\}; redraw erase\"", +" send rulerHlab$ruleno set visible True", +" } else {", +" send rulerHlab$ruleno set visible False", +" }", +"}", +"", +"", +"# Callback executed when a marker gets or loses the focus.", +"proc selectRuler {active_ruler event event_data} \\", +"{", +" global ruler", +" switch $event {", +" focusIn { set ruler $active_ruler }", +" focusOut { }", +" }", +"}", +"", +"# Reset the ruler format type.", +"proc setUnits { ruler units } \\", +"{", +" global rulerFmt rulerX rulerY", +"", +" send $ruler getVertices pts", +" set rulerX [lindex [lindex [lindex $pts 0] 0] 0]", +" set rulerY [lindex [lindex [lindex $pts 0] 0] 1]", +" set cx [lindex [lindex [lindex $pts 0] 1] 0] ; incr cx -1", +" set cy [lindex [lindex [lindex $pts 0] 2] 1] ; incr cy -1", +"", +" set rulerFmt $units", +" resizeRuler $cx $cy 1", +"}", +"", +"# Menu option toggle callbacks.", +"proc toggleSticky { ruler } \\", +"{", +" global isSticky rulerSticky rulerMenuDescription", +"", +" set index [ lsearch $rulerSticky $ruler]", +" if { $index >= 0 } {", +" # Remove it from the list.", +" set rulerSticky [lreplace $rulerSticky $index $index]", +" set isSticky \"Sticky\"", +" } else {", +" # Add it to the list.", +" lappend rulerSticky $ruler ", +" set isSticky \"UnSticky\"", +" }", +" editMenu rulerMenu imagewin $rulerMenuDescription", +"}", +"", +"proc setRulerMenu args \\", +"{", +" global ruler isSticky rulerSticky rulerMenuDescription", +"", +" if { [lsearch $rulerSticky $ruler] >= 0 } {", +" set isSticky \"UnSticky\"", +" } else {", +" set isSticky \"Sticky\"", +" }", +" editMenu rulerMenu imagewin $rulerMenuDescription", +"}", +"", +"", +"# Draw the ruler to the frame buffer as a graphic.", +"proc writeRuler { ruler } \\", +"{", +"}", +"", +"# Change the color of the ruler.", +"proc r_setColor {ruler bgcolor fgcolor} {", +" ", +" # Recolor the polygon.", +" send $ruler \\", +" \"markpos; set lineColor $bgcolor; set highlightColor $bgcolor; redraw\"", +"", +" # Recolor the labels.", +" scan $ruler \"ruler%d\" num", +" send rulerXlab$num \\", +" \"markpos; set textBgColor $bgcolor; set textColor $fgcolor; redraw\"", +" send rulerYlab$num \\", +" \"markpos; set textBgColor $bgcolor; set textColor $fgcolor; redraw\"", +" send rulerHlab$num \\", +" \"markpos; set textBgColor $bgcolor; set textColor $fgcolor; redraw\"", +"}", +"", +"", +"# Delete the current ruler, called when we have a Btn1Up on the current ruler.", +"proc deleteRuler {x y} { global ruleno ; deleteNamedRuler $ruleno $x $y }", +"", +"# Delete all rulers on the screen, usually called when the view changes.", +"# We preserve the rulers marked as 'sticky'.", +"proc deleteAllRulers args \\", +"{", +" global rulerList rulerSticky", +"", +" foreach r $rulerList { ", +" # Delete the ruler if it's not in the sticky list.", +" if { [lsearch $rulerSticky ruler$r] == -1 } {", +" deleteNamedRuler $r x y ", +" }", +" }", +"}", +"", +"# Delete a particular ruler, usually called from the translation table on", +"# the marker itself.", +"proc deleteNamedRuler {name x y} \\", +"{", +" global rulerList", +"", +" catch {", +" send ruler$name destroy", +" send rulerXlab$name destroy", +" send rulerYlab$name destroy", +" send rulerHlab$name destroy", +" }", +"", +" # Remove the ruler from the list.", +" set index [lsearch $rulerList $name]", +" set rulerList [lreplace $rulerList $index $index]", +"}", +"", +"", +"", +"", +"", +"###############################################", +"# Define procedure for the help panel", +"###############################################", +"", +"# Help Panel Bitmaps", +"#-------------------", +"createBitmap iraf_logo 45 45 {", +"0xff, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f, 0xff, 0xff, 0xff, 0xff,", +"0xff, 0x3f, 0xfc, 0xff, 0xff, 0xff, 0xff, 0x3f, 0xfc, 0xff, 0xff, 0xff,", +"0xff, 0x3f, 0xf8, 0xff, 0xff, 0xff, 0xff, 0x3f, 0xf0, 0xff, 0xff, 0xff,", +"0xff, 0x3f, 0xf0, 0xff, 0xff, 0xff, 0xff, 0x3f, 0xe0, 0xff, 0xff, 0xff,", +"0xff, 0x3f, 0xc0, 0xff, 0xff, 0xff, 0xff, 0x3f, 0xc0, 0xff, 0xff, 0xff,", +"0xff, 0x3f, 0x80, 0xff, 0xff, 0xff, 0xff, 0x3f, 0x80, 0xfc, 0xff, 0xff,", +"0xff, 0x3f, 0x84, 0xf8, 0xff, 0xff, 0xff, 0x1f, 0x84, 0xf4, 0xff, 0xff,", +"0xff, 0x1b, 0x04, 0x09, 0x00, 0xfc, 0xff, 0x11, 0x04, 0x11, 0xf8, 0xff,", +"0x7f, 0x10, 0x04, 0x21, 0xc0, 0xff, 0x1f, 0x10, 0x04, 0x41, 0xf0, 0xff,", +"0x00, 0x18, 0x04, 0x01, 0xe0, 0xff, 0x00, 0x18, 0x00, 0x81, 0xc0, 0xff,", +"0x00, 0x08, 0x00, 0x01, 0xe0, 0xff, 0x07, 0x08, 0x00, 0x01, 0xf1, 0xff,", +"0x1f, 0x08, 0x80, 0x21, 0xf0, 0xff, 0xff, 0x08, 0xc0, 0x41, 0xf4, 0xff,", +"0xff, 0x08, 0xc0, 0x41, 0xf8, 0xff, 0xff, 0x09, 0xc0, 0xc1, 0xf0, 0xff,", +"0xff, 0x0b, 0x80, 0xc1, 0xf1, 0xff, 0xff, 0x07, 0x80, 0x81, 0xe1, 0xff,", +"0xff, 0x07, 0x80, 0x01, 0xc1, 0xff, 0xff, 0x07, 0x00, 0x01, 0xc0, 0xff,", +"0xff, 0x07, 0xc2, 0x05, 0x81, 0xff, 0xff, 0x07, 0xf2, 0x07, 0x81, 0xff,", +"0xff, 0x07, 0xf2, 0x17, 0x03, 0xff, 0xff, 0x03, 0xfa, 0x7f, 0x02, 0xfe,", +"0xff, 0x03, 0xfe, 0xff, 0x02, 0xfe, 0xff, 0x03, 0xfe, 0xff, 0x03, 0xfc,", +"0xff, 0x03, 0xff, 0xff, 0x07, 0xfc, 0xff, 0x83, 0xff, 0xff, 0x0f, 0xf8,", +"0xff, 0xc1, 0xff, 0xff, 0x3f, 0xf0, 0xff, 0xe1, 0xff, 0xff, 0x7f, 0xf8,", +"0xff, 0xf1, 0xff, 0xff, 0xff, 0xf0, 0xff, 0xf8, 0xff, 0xff, 0xff, 0xe0,", +"0xff, 0xf8, 0xff, 0xff, 0xff, 0xe3, 0xff, 0xfc, 0xff, 0xff, 0xff, 0xe7,", +"0xff, 0xfc, 0xff, 0xff, 0xff, 0xef}; send helpIRAFLogo \"set bitmap iraf_logo\"", +" ", +"createBitmap noao_logo 45 45 {", +"0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,", +"0xff, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0x03, 0xfe, 0xff, 0xff,", +"0xff, 0xff, 0x01, 0xfc, 0xff, 0xff, 0xff, 0xff, 0x00, 0xf8, 0xff, 0xff,", +"0xff, 0xff, 0x00, 0xf8, 0xff, 0xff, 0xff, 0xff, 0x00, 0xf8, 0xff, 0xff,", +"0xff, 0x7f, 0x00, 0xf0, 0xff, 0xff, 0xff, 0xff, 0x00, 0xf8, 0xff, 0xff,", +"0xff, 0xff, 0x00, 0xf8, 0xff, 0xff, 0xff, 0xff, 0x00, 0xf8, 0xff, 0xff,", +"0xff, 0xff, 0x01, 0xfc, 0xff, 0xff, 0xff, 0xff, 0x03, 0xfe, 0xff, 0xff,", +"0xff, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,", +"0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xff, 0xff, 0xff,", +"0xff, 0xff, 0x8f, 0xff, 0xff, 0xff, 0xff, 0xff, 0x8f, 0xff, 0xff, 0xff,", +"0xff, 0xff, 0x07, 0xff, 0xff, 0xff, 0xff, 0xff, 0x07, 0xff, 0xff, 0xff,", +"0xff, 0xff, 0x03, 0xfe, 0xff, 0xff, 0xff, 0xff, 0x03, 0xfe, 0xff, 0xff,", +"0xff, 0xff, 0x01, 0xfc, 0xff, 0xff, 0xff, 0xff, 0x01, 0xfc, 0xff, 0xff,", +"0xff, 0xff, 0x00, 0xf8, 0xff, 0xff, 0xff, 0x7f, 0x00, 0xf0, 0xff, 0xff,", +"0xff, 0x7f, 0x00, 0xf0, 0xff, 0xff, 0xff, 0x3f, 0x00, 0xe0, 0xff, 0xff,", +"0xff, 0x3f, 0x00, 0xe0, 0xff, 0xff, 0xff, 0x1f, 0x00, 0xc0, 0xff, 0xff,", +"0xff, 0x1f, 0x00, 0xc0, 0xff, 0xff, 0xff, 0x0f, 0x00, 0x80, 0xff, 0xff,", +"0xff, 0x0f, 0x00, 0x80, 0xff, 0xff, 0xff, 0x07, 0x00, 0x00, 0xff, 0xff,", +"0xff, 0x03, 0x00, 0x00, 0xfe, 0xff, 0xff, 0x03, 0x00, 0x00, 0xfe, 0xff,", +"0xff, 0x01, 0x00, 0x00, 0xfc, 0xff, 0xff, 0x01, 0x00, 0x00, 0xfc, 0xff,", +"0xff, 0x00, 0x00, 0x00, 0xf8, 0xff, 0xff, 0x00, 0x00, 0x00, 0xf8, 0xff,", +"0x7f, 0x00, 0x00, 0x00, 0xf0, 0xff, 0x7f, 0x00, 0x00, 0x00, 0xf0, 0xff,", +"0x3f, 0x00, 0x00, 0x00, 0xe0, 0xff}; send helpNOAOLogo \"set bitmap noao_logo\"", +" ", +"send helpInfo1 set label $version", +"", +"# Stuff for keeping track of visited anchors.", +"set links { 0 }", +"set linkIndex 0", +"set visited(0) empty", +"", +"proc Help args \\", +"{", +" global help_up", +" if {$help_up == 0} {", +" send client help", +" } else {", +" send help_panel unmap", +" set help_up 0", +" } ", +"}", +"", +"proc helpPanel args \\", +"{", +" global help_up", +" if {$help_up} {", +" send help_panel unmap", +" set help_up 0", +" } else {", +" send help_panel map", +" set help_up 1", +" }", +"}", +"", +"proc panelHelp args \\", +"{", +" Help", +"} ; send panelHelp addCallback panelHelp", +"", +"proc helpQuit args \\", +"{", +" global help_up", +" send help_panel unmap", +" set help_up 0", +"}; send helpClose addCallback helpQuit", +"", +"proc getHelpText { param old new } \\", +"{", +" send helpText setText $new", +" helpPanel", +"}; send help addCallback getHelpText", +"", +"proc anchorSelected {widget cbtype event text href args} \\", +"{", +" global visited links linkIndex", +" set anchID [send helpText anchorToId $href]", +" set visited($href) 1", +" if {$linkIndex == 0} {", +" send helpBack setSensitive True", +" if {[lindex $links 1] != $anchID} {", +" set links { 0 }", +" send helpForward setSensitive False", +" }", +" }", +" if {$linkIndex > 0 && [lindex $links [expr $linkIndex + 1]] != $anchID} {", +" set links [lrange $links 0 $linkIndex]", +" }", +" if {[lindex $links [expr $linkIndex + 1]] != $anchID} {", +" lappend links $anchID", +" incr linkIndex", +" } else {", +" send helpForward setSensitive False", +" incr linkIndex", +" }", +" if {$linkIndex == [expr [llength $links] - 1]} {", +" send helpForward setSensitive False", +" }", +" send helpText gotoId $anchID", +" send helpText retestAnchors", +"}; send helpText addCallback anchorSelected anchor ", +"", +"proc testAnchor {widget cbtype href} \\", +"{", +" global visited", +" return [info exists visited($href)]", +"}; send helpText addCallback testAnchor testAnchor", +"", +"", +"# Callbacks to position forwards and backwards in link list.", +"proc hlpForward args \\", +"{", +" global links linkIndex", +" incr linkIndex", +" if {$linkIndex <= [llength $links]} {", +" set anchID [lindex $links $linkIndex]", +" send helpText gotoId $anchID", +" send helpText retestAnchors", +" if {$linkIndex == [expr [llength $links] - 1]} {", +" send helpForward setSensitive False", +" send helpBack setSensitive True", +" } else {", +" send helpBack setSensitive True", +" }", +" } else {", +" incr linkIndex -1", +" }", +"}; send helpForward addCallback hlpForward", +" ", +"proc hlpBack args \\", +"{", +" global links linkIndex", +" incr linkIndex -1", +" if {$linkIndex >= 0} {", +" set anchID [lindex $links $linkIndex]", +" send helpText gotoId $anchID", +" send helpText retestAnchors", +" if {$linkIndex == 0} { send helpBack setSensitive False }", +" if {$linkIndex >= 0} { send helpForward setSensitive True }", +" } else {", +" incr linkIndex 1", +" }", +"}; send helpBack addCallback hlpBack", +"", +"proc hlpHome args \\", +"{", +" global links linkIndex", +" set links { 0 }", +" set linkIndex 0", +" send helpText gotoId 0", +" send helpForward setSensitive False", +" send helpBack setSensitive False", +"}; send helpHome addCallback hlpHome", +"", +"", +"proc helpFind args \\", +"{", +" set phrase [send hfEntry get string]", +"", +" if { $phrase != \"\" } {", +" if {[send helpText searchText $phrase start end forward caseless] > 0} {", +" set elid [lindex [lindex $start 0] 0]", +" set id [max 1 [expr $elid - 10] ]", +" send helpText gotoId $id", +" send helpText setSelection $start $end", +" } else {", +" send warnText set label \"Search string not found.\"", +" send warning map", +" }", +" } else {", +" send warnText set label \"Warning: No search phrase entered.\"", +" send warning map", +" }", +"} ; foreach w { hfEntry hfFind } { send $w addCallback helpFind }", +"", +"send hfClear addCallback { send hfEntry set string \"\" }", +"", +"", +"################################################################################", +"# Header Display Callbacks.", +"################################################################################", +"", +"set hdrImage \"\"", +"set hdrImageId \"\"", +"set hdrKeywords \"*\"", +"", +"", +"proc fitsHdrClose args \\", +"{", +" global hdr_up", +"", +" send hdr_panel unmap", +" send imageHeader set on False", +" set hdr_up 0", +"} ; send hdrClose addCallback fitsHdrClose", +"", +"proc ptFitsHeader {widget type state args} \\", +"{", +" global hdr_up", +"", +" set hdr_up $state", +" if {$hdr_up == 1} {", +" send imageHeader set on True", +" send hdr_panel map", +" } else {", +" send imageHeader set on False", +" send hdr_panel unmap", +" }", +"}; send imageHeader addCallback ptFitsHeader", +"", +"proc getHeader { name id } \\", +"{", +" global hdrImage hdrImageId hdrKeywords", +"", +" set hdrImage $name", +" set hdrImageId $id", +" send hdrObjMenu set label $name", +" send hdrText setText \"\"", +" send hdrIGText set string \"\"", +" send hdrKGText set string \"\"", +"", +" catch { send wcspix objinfo $hdrImageId $hdrKeywords }", +"}", +"", +"proc hdrKeywFilter args \\", +"{", +" global hdrImageId hdrKeywords", +"", +" set str [ send hFindEntry get string ]", +" if {$str != \"\"} {", +" set hdrKeywords $str", +" send hdrText setText \"\"", +" catch { send wcspix objinfo $hdrImageId $hdrKeywords }", +" }", +"} ; send hdrFilter addCallback hdrKeywFilter", +"", +"", +"# Set the image menu in the header panel.", +"proc setHdrObjMenu { frame args } \\", +"{", +" global frameCache ism_enable", +"", +" if {! $ism_enable} \\", +" return", +"", +" # Create the menu of images for the header panel.", +" set items { }", +" foreach i [list $frameCache($frame)] {", +" set l [lindex $i 0]", +" set lid [lindex $i 1]", +" regsub -all {[\\[]} $l \"\\\\\\[\" l2", +" catch {", +" lappend items [format \"%s f.exec \\{getHeader %s %d\\}\" $l $l2 $lid]", +" }", +" }", +" editMenu objMenu hdrObjMenu $items", +"}", +"", +"", +"# Search box for the header.", +"proc hdrFind args \\", +"{", +" set phrase [send hFindEntry get string]", +"", +" if { $phrase != \"\" } {", +" if {[send hdrText searchText $phrase start end forward caseless] > 0} {", +" set elid [lindex [lindex $start 0] 0]", +" set id [max 1 [expr $elid - 10] ]", +" send hdrText gotoId $id", +" send hdrText setSelection $start $end", +" } else {", +" send warnText set label \"Search string not found.\"", +" send warning map", +" }", +" } else {", +" send warnText set label \"Warning: No search phrase entered.\"", +" send warning map", +" }", +"} ; foreach w { hFindEntry hdrFind } { send $w addCallback hdrFind }", +"", +"send hdrClear addCallback { send hFindEntry set string \"\" }", +"", +"", +"################################################################################", +"# Pixel Table Callbacks.", +"################################################################################", +"", +"set psize 5", +"set pixtab_up 0", +"set hdr_up 0", +"", +"createMenu pixtabMenu pixtabSize {", +" { \"3x3\" f.exec { pixtabSetSize 3 } }", +" { \"5x5\" f.exec { pixtabSetSize 5 } }", +" { \"7x7\" f.exec { pixtabSetSize 7 } }", +" { \"9x9\" f.exec { pixtabSetSize 9 } }", +"}", +"", +"", +"proc updatePixelTable { cx cy wx wy args } \\", +"{", +" global psize pixtab_up ism_enable", +"", +" if {! $pixtab_up} \\", +" return", +" if {$ism_enable} \\", +" return", +"", +" set delta [expr int($psize / 2) ]", +" set x1 [expr ($wx - $delta) ]", +" set x2 [expr ($wx + $delta) ]", +" set y1 [expr ($wy - $delta) ]", +" set y2 [expr ($wy + $delta) ]", +" set c [ expr int($psize / 2) ]", +"", +"", +" # Update the table labels.", +" set x $x1 ; set xl {}", +" set y $y2 ; set yl {}", +" for {set i 0} {$i < $psize} {incr i} {", +" lappend xl [format \" %10.1f \" $x] ; set x [ expr ($x + 1.) ]", +" lappend yl [format \" %10.1f \" $y] ; set y [ expr ($y - 1.) ]", +" }", +" send ptColLabs setList $xl ; send ptColLabs highlight $c", +" send ptRowLabs setList $yl ; send ptRowLabs highlight $c", +"", +" # Update the pixel table itself.", +" #set pix [ send client getPixels $cx $cy $psize True ]", +"", +" set x0 [ expr int($cx - $psize / 2. + 0.5)]", +" set y0 [ expr int($cy - $psize / 2. + 0.5)]", +" set pix [ send client getPixels $x0 $y0 $psize $psize ]", +" send pixtab setList [ lrange $pix 4 end ]", +" set c [ expr int(($psize * $psize) / 2) ]", +" send pixtab highlight $c", +"", +" # Update the pixtab stats.", +" set sum 0.0", +" set sum2 0.0", +" set npix [ expr ($psize * $psize) ]", +" set nend [ expr ($psize * $psize) + 4 ]", +" for {set i 4} {$i < $nend} {incr i} {", +" set val [lindex $pix $i]", +" catch {", +" set sum [ expr ($sum + $val) ]", +" set sum2 [ expr ($sum2 + $val * $val) ]", +" }", +" }", +"", +" set mean [ expr ($sum / ($npix * 1.0)) ]", +" set var [ expr (($sum2 - $sum * $mean) / ($npix - 1)) ]", +" if {$var <= 0.0} {", +" set stdev 0.0", +" } else {", +" set stdev [ expr sqrt ($var) ]", +" }", +" send meanValue set label [ format \"%10.2f\" $mean ]", +" send sigValue set label [ format \"%10.4f\" $stdev ]", +"}", +"", +"", +"proc pixtabClose args \\", +"{", +" global pixtab_up", +"", +" send pixel_panel unmap", +" send pixelTable set on False", +" set pixtab_up 0", +" catch { send wcspix set psize 0 }", +"} ; send pixtabClose addCallback pixtabClose", +"", +"", +"proc pixtabSetSize { size args } \\", +"{", +" global psize ism_enable", +"", +" set c [ expr int(($psize * $psize) / 2) ]", +" send pixtab highlight $c", +"", +" # Now reset the window size.", +" switch $size {", +" 3 { send pixel_panel \"resize 265 175\"", +" send pixtab \"set width 180 ; set height 60\"", +" }", +" 5 { send pixel_panel \"resize 375 215\"", +" send pixtab \"set width 290 ; set height 105\"", +" }", +" 7 { send pixel_panel \"resize 495 265\"", +" send pixtab \"set width 410 ; set height 150\"", +" }", +" 9 { send pixel_panel \"resize 610 310\"", +" send pixtab \"set width 525 ; set height 195\"", +" }", +" }", +"", +" send pixtab set defaultColumns $size", +" send ptColLabs set defaultColumns $size", +" set psize $size", +"", +" # Notify the ISM we've changed size.", +" if ($ism_enable) {", +" catch { send wcspix set psize $psize }", +" }", +"", +" send imagewin getCursorPos xc yc", +" updatePixelTable $xc $yc $xc $yc", +"", +"} ; pixtabSetSize $psize", +"", +"", +"proc ptPixelTable {widget type state args} \\", +"{", +" global pixtab_up psize", +"", +" set pixtab_up $state", +" if {$pixtab_up == 1} {", +" send pixelTable set on True", +" send pixel_panel map", +" catch { send wcspix set psize $psize }", +" } else {", +" send pixelTable set on False", +" send pixel_panel unmap", +" catch { send wcspix set psize 0 }", +" }", +"}; send pixelTable addCallback ptPixelTable", +"", +"", +"################################################################################", +"# Warning dialog. This pops up a dialog box with the given warning message,", +"# and executes the given command if the user pushes OK.", +"#", +"# Usage: Wexec object message [ok_action [cancel_action]]", +"#", +"# The message text is displayed in a popup and the user hits the ok or", +"# cancel button to close the popup. If an action has been posted for the", +"# button selected then it is sent to the named object. Only one alert can", +"# be in effect at a time; posting another alert before the first has", +"# completed causes the new alert to override the first.", +"################################################################################", +"", +"set W_object \"\"", +"set W_ok_cmd \"\"", +"set W_cancel_cmd \"\"", +"", +"proc Wexec {object msg args} \\", +"{", +" global W_object W_ok_cmd W_cancel_cmd", +" set W_object $object", +" set W_ok_cmd [lindex $args 0]", +" set W_cancel_cmd [lindex $args 1]", +" send warnText set label $msg", +" send warning map", +"}", +"", +"proc Wbutton {widget args} \\", +"{", +" global W_object W_ok_cmd W_cancel_cmd", +" switch $widget {", +" warnOk { if [llength $W_ok_cmd] { send $W_object $W_ok_cmd }", +" }", +" warnCancel { if [llength $W_cancel_cmd] { send $W_object $W_cancel_cmd }", +" }", +" }", +" send warning unmap", +"}", +"send warnOk addCallback Wbutton", +"send warnCancel addCallback Wbutton", +"", +"# The parameter \"alert\" is used to forward alerts from the client.", +"proc setAlert {param old new} \\", +"{", +" Wexec client [lindex $new 0] [lindex $new 1]", +"}; send alert addCallback setAlert", +"", +"", +"", +"################################################", +"# Define some TCL debug procedures.", +"################################################", +"", +"set tcl_up 0", +"", +"proc tclCommandClear {widget args} { send tclEntry set string \"\" }", +"proc tclCommandExecute {widget args} { send server [send tclEntry {get string}]", +"}", +"proc tclCommand {widget mode command args} { send server $command }", +"proc tclClose {widget args} { tclPanel }", +"proc tclOpen args \\", +"{ ", +" global tcl_up", +" send tcl_panel map ", +" set tcl_up 1", +"}", +"", +"proc tclPanel args \\", +"{", +" global tcl_up", +" if {$tcl_up} {", +" send tcl_panel unmap", +" set tcl_up 0", +" } else {", +" send tcl_panel map", +" set tcl_up 1", +" }", +"}", +"", +"send tclClear addCallback tclCommandClear", +"send tclExecute addCallback tclCommandExecute", +"send tclEntry addCallback tclCommand", +"send tclDismiss addCallback tclClose", +"", +"", +"", +"################################################", +"# ISM Module support routines.", +"################################################", +"", +"", +"# Turn the ISM on or off.", +"proc ismToggle { widget type state args } \\", +"{", +" global ism_enable ism_capable psize", +"", +" set ism_enable $state", +"", +" # Set the coord-panel header option availability.", +" if {$ism_enable == 1 && $ism_capable} {", +" send imageHeader setSensitive True", +" send woptBPM setSensitive True", +" catch { send client ism_start wcspix }", +" } else {", +" send imageHeader setSensitive False", +" send woptBPM set on False", +" send woptBPM setSensitive False", +" catch { send client ism_stop wcspix }", +" send hdr_panel unmap", +" }", +" setCoordPanelSensitivity", +"", +"} ; send ismToggle addCallback ismToggle", +"", +"", +"", +"# Handle messages from ISM clients and pass them on to the appropiate", +"# callback.", +"", +"proc ism_msg { param old new } \\", +"{", +" global ism_enable ", +"", +" set cmd [lindex $new 0] ;# command name", +" set ism [lindex $new 1] ;# determine ISM name", +" set argv [lrange $new 2 end] ;# get args", +" set argc [llength $argv]", +"", +" switch $cmd {", +" source { source [lindex $new 1] }", +" alert { Wexec client [lindex $new 1] }", +" deliver { ${ism}_msg $argc $argv }", +" info { ism_info $ism }", +" }", +"} ; send ism_msg addCallback ism_msg", +"", +"", +"", +"# Log a client message to the info panel", +"set ismInfoText \" \" ", +"", +"proc ism_info { text } \\", +"{", +" global infoMode ismInfoText", +"", +" set ismInfoText [format \"%s\\n%s\" $ismInfoText $text]", +" if {$infoMode == \"infoOptIsm\"} {", +" send infoText set string $ismInfoText", +" }", +"}", +"", +"# Initialize the text.", +"proc ismInitInfoText args \\", +"{", +" global ismInfoText", +"", +" set ismInfoText \"\"", +" ism_info \"\\t ISM Client Message Logs\"", +" ism_info \"\\t -----------------------\"", +" ism_info \" \"", +"} ; ismInitInfoText", +"", +"", +"", +"################################################", +"# WPIX module support routines.", +"################################################", +"", +"set cur_objid 0", +"set cur_regid 0", +"set redraw_compass 0", +"#set Compass(0) { 0.0 1 1 0 X Y }", +"set Compass(0) { 0.0 0.0 1.0 -1.0 0.0 0 X Y }", +"set Orient(0) { 1 1 1 }", +"", +"set wcspix_debug 0", +"", +"proc wcspix_msg { argc argv } \\", +"{", +" global wcspix_debug", +"", +" set arg [string trimleft [ string trimright [lindex $argv 0] ] ]", +" set cmd [lindex $arg 0]", +"", +" if {$wcspix_debug} { print \"wcspix_msg: $cmd\" }", +"", +"", +" switch $cmd {", +" startup { wcspix_startup }", +" shutdown { wcspix_shutdown }", +" disable { wcspix_disable }", +" capable { wcspix_capable }", +"", +" cache { wcspix_cache [lrange $arg 1 end] }", +" uncache { wcspix_uncache [lrange $arg 1 end] }", +" wcstran { wcspix_wcstran [lrange $arg 1 end] }", +" wcslist { wcspix_wcslist [lrange $arg 1 end] }", +"", +" imghdr { send hdrText \\", +" setText [format \"
%s\\n%s
\" \\", +" [string trimright [send hdrText getText simple] \"\\n\"]\\", +" [lindex $arg 1] ]", +" }", +" wcshdr { send hdrKGText append [lindex $arg 1] }", +"", +" wcsinfo { send hdrIGText append [lindex $arg 1] ", +" send hdrText gotoId 0", +" send hdrKGText set insertPosition 0", +" }", +"", +" compass { wcspix_compass [lrange $arg 1 end] ; drawCompass }", +" orient { wcspix_orient [lrange $arg 1 end] }", +" wcstype { wcspix_wcstype [lindex $arg 1] [lindex $arg 2] }", +" wcsfmt { set num [lindex $arg 2]", +" send fmtWcs$num set label [lindex $arg 1] }", +"", +" wcspix_cmd { send wcsIsmCmd set string [lindex $arg 1] }", +"", +" pixtab { set tab [lindex [lindex $arg 1] 0]", +" set col [lindex [lindex $arg 1] 1]", +" set row [lindex [lindex $arg 1] 2]", +" set stat [lindex [lindex $arg 1] 3]", +" wcspix_pixtab $tab $col $row $stat", +" }", +" }", +"}", +"", +"", +"# Startup and initialize the wcspix module with the GUI state.", +"proc wcspix_startup args \\", +"{", +" global ism_enable frame", +" global up_todo psize pixtab_up frameCache", +"", +" set ism_enable 1", +" send ismToggle set on True", +" send imageHeader setSensitive True", +" send woptBPM setSensitive True", +" setCoordPanelSensitivity", +" ismInitInfoText", +"", +" if {$up_todo < 3} {", +" resizeCoordsBox $up_todo", +" }", +" updateCoordsBox", +" drawCompass", +"", +" # Initialize the frame cache.", +" foreach c [array names frameCache] {", +" if {$c != \"0\"} { unset frameCache($c) }", +" }", +"", +" catch { ", +" if {$pixtab_up} { send wcspix set psize $psize }", +" for {set i 1} {$i <= 4} {incr i} {", +" send wcspix set wcs [send sysWcs$i get label] $i", +" send wcspix set format [send fmtWcs$i get label] $i", +" }", +" }", +"", +" if { [send infoOptClients get on] } {", +" send client info clients", +" }", +"}", +"", +"# Shutdown the WPIX module.", +"proc wcspix_shutdown args \\", +"{", +" global ism_enable frame", +"", +" set ism_enable 0", +" send ismToggle set on False", +" send imageHeader setSensitive False", +" send woptBPM set on False", +" send woptBPM setSensitive False", +" setCoordPanelSensitivity", +" setCoordPanelHeight", +"", +" wcsFmtIValue \"N/A\"", +" wcsFmtBValue \"0\"", +"", +" resizeCoordsBox 0", +" drawCompass", +"", +" if { [send infoOptClients get on] } {", +" send client info clients", +" }", +"}", +"", +"", +"# Disable the WPIX module. We are only called when a display client has", +"# indicated it doesn't use the new mapping facilities and having the WPIX", +"# ISM visible will only confuse the user.", +"", +"proc wcspix_disable args \\", +"{", +" global ism_enable ism_capable rulerWCS", +"", +" if {$ism_enable} {", +" send wcspix quit", +" }", +" set ism_capable 0", +" set rulerWCS 0", +" wcspix_shutdown", +" send ismToggle setSensitive False", +"}", +"", +"", +"# Client connected is capable of using the ISM, but don't necessarily turn", +"# it on at this point.", +"", +"proc wcspix_capable args \\", +"{", +" global ism_capable", +"", +" set ism_capable 1", +" wcsFmtIValue \"0\"", +" wcsFmtBValue \"0\"", +" send ismToggle setSensitive True", +"}", +"", +"", +"# Cache an image in the GUI.", +"proc wcspix_cache { argv } \\", +"{", +" global frameCache redraw_compass cur_objid", +"", +" set name [lindex $argv 0]", +" set frame [lindex $argv 1]", +" set id [lindex $argv 2]", +"", +" # Store the image name and id in a local cache.", +" lappend frameCache($frame) $name $id", +" send hdrObjMenu set label $name", +"", +" # Automatically get the header.", +" regsub -all {[\\[]} $name \"\\\\\\[\" image", +" catch { getHeader $image $id }", +"", +" setHdrObjMenu $frame", +"", +" set cur_objid $id", +" set redraw_compass 1", +"}", +"", +"# Uncache an image in the GUI.", +"proc wcspix_uncache { argv } \\", +"{", +" global frameCache Compass", +"", +" set id [lindex $argv 0]", +" foreach c [array names frameCache] {", +" set i1 0", +" set i2 1", +" set new { }", +" while { $i2 < [llength $frameCache($c)] } {", +" if {[lindex $frameCache($c) $i2] != $id} { ", +" lappend new [lindex $frameCache($c) $i1]", +" lappend new [lindex $frameCache($c) $i2]", +" }", +" incr i1 2", +" incr i2 2", +" }", +" set frameCache($c) $new", +" }", +" if [info exists Compass($id)] {", +" unset Compass($id)", +" }", +"}", +"", +"# Format the results of the WCSTRAN method.", +"proc wcspix_wcstran { argv } \\", +"{", +" global frameCache cur_objid cur_regid redraw_compass", +"", +" set objid [ lindex [lindex $argv 0] 1]", +" set regid [ lindex [lindex $argv 1] 1]", +" set pixval [ lindex [lindex $argv 2] 1]", +" set bpmval [ lindex [lindex $argv 3] 1]", +"", +" wcsFmtIValue $pixval", +" wcsFmtBValue $bpmval", +"", +" set args [lrange $argv 4 end]", +" set nargs [llength $args]", +" for {set i 0} {$i < 4} {incr i} {", +" set coord [lindex $args $i]", +" set wcsname [lindex $coord 1]", +" set xval [lindex $coord 2]", +" set yval [lindex $coord 3]", +" set xunits [lindex $coord 4]", +" set yunits [lindex $coord 5]", +" wcsFmtWcs [expr ($i + 1)] $wcsname $xval $yval $xunits $yunits", +" }", +"", +" set cur_objid $objid", +" set cur_regid $regid", +"", +" if {$redraw_compass} \\", +" drawCompass", +"}", +"", +"# Save the object compass information.", +"proc wcspix_compass { argv } \\", +"{", +" global Compass", +"", +" set objid [lindex $argv 0]", +" set angle [lindex $argv 1]", +"", +" #set xflip [lindex $argv 2]", +" #set yflip [lindex $argv 3]", +" #set transpose [lindex $argv 4]", +" #set xlab [lindex $argv 5]", +" #set ylab [lindex $argv 6]", +"", +" set north_x [lindex $argv 2]", +" set north_y [lindex $argv 3]", +" set east_x [lindex $argv 4]", +" set east_y [lindex $argv 5]", +" set transpose [lindex $argv 6]", +" set xlab [lindex $argv 7]", +" set ylab [lindex $argv 8]", +"", +" #lappend Compass($objid) $angle $xflip $yflip $transpose $xlab $ylab", +" #set Compass($objid) [list $angle $xflip $yflip $transpose $xlab $ylab]", +" set Compass($objid) [list $angle $north_x $north_y $east_x $east_y \\", +" $transpose $xlab $ylab]", +" drawCompass", +"}", +"", +"# Save the image display orientation information.", +"proc wcspix_orient { argv } \\", +"{", +" global Orient", +"", +" set objid [lindex $argv 0]", +" set frame [lindex $argv 1]", +" set xflip [lindex $argv 2]", +" set yflip [lindex $argv 3]", +"", +" set Orient($objid) [list $frame $xflip $yflip]", +"}", +"", +"", +"# Handle the list of WCSs available for the current image.", +"proc wcspix_wcslist { argv } \\", +"{", +" set wcslist [lindex $argv 0]", +"", +" for {set i 1} {$i <= 4} {incr i} {", +" set items {}", +" foreach nam $wcslist {", +" if {[string tolower $nam] == \"line\"} {", +" lappend items \"f.dblline\"", +" } else {", +" lappend items \"\\\"$nam\\\" f.exec \\{setWcsSys $nam $i\\}\"", +" }", +" }", +" editMenu sysMenu$i sysWcs$i $items", +" }", +"}", +"", +"# Set the type of the WCS.", +"proc wcspix_wcstype { label num } \\", +"{", +" global up_todo", +"", +" send sysWcs$num set label $label", +" if {[string tolower $label] == \"none\"} {", +" send wpWcs$num \"set on False ; setSensitive False\"", +" send wiWcs$num \"set on False ; setSensitive False\"", +" send fmtWcs$num setSensitive False", +" set hght 4", +" } else {", +" send wpWcs$num \"set on True ; setSensitive True\"", +" send wiWcs$num setSensitive True", +" send fmtWcs$num setSensitive True", +" set hght 17", +" }", +" send wtWcs$num set height $hght", +" setCoordPanelHeight", +"", +" #resizeCoordsBox $up_todo", +" updateCoordsBox", +"}", +"", +"# Display the pixel table.", +"proc wcspix_pixtab { tab col row stat } \\", +"{", +" global psize", +"", +" # Update the pixel table.", +" send pixtab setList [lindex $tab 1]", +" send pixtab highlight [expr int(($psize * $psize) / 2)]", +"", +" # Update the table labels.", +" set c [ expr int($psize / 2) ]", +" send ptColLabs setList $col ; send ptColLabs highlight $c", +" send ptRowLabs setList $row ; send ptRowLabs highlight $c", +"", +" # Update the pixtab stats.", +" send meanValue set label [ format \"%10.2f\" [lindex $stat 0] ]", +" send sigValue set label [ format \"%10.4f\" [lindex $stat 1] ]", +"}", +"", +"", +"", +"", +"################################################################################", +"#", +"# XIMTOOL-ALT -- Procedures and declarations for the ALT GUI.", +"#", +"################################################################################", +"", +"# Creat the bitmaps needed for the alternate optional bars.", +"", +"createBitmap tools 16 16 {", +" 0xff, 0xff, 0xff, 0xff, 0x03, 0xc0, 0xf3, 0xcf, 0xf3, 0xcf, 0xf3, 0xcf,", +" 0x83, 0xc1, 0x83, 0xc1, 0x83, 0xc1, 0x83, 0xc1, 0x83, 0xc1, 0x83, 0xc1,", +" 0x83, 0xc1, 0x03, 0xc0, 0xff, 0xff, 0xff, 0xff};", +"", +"createBitmap control 16 16 {", +" 0xff, 0xff, 0xff, 0xff, 0x03, 0xc0, 0xe3, 0xc7, 0xe3, 0xcf, 0x33, 0xcc,", +" 0x33, 0xc0, 0x1b, 0xc0, 0x1b, 0xc0, 0x1b, 0xc0, 0x33, 0xcc, 0xf3, 0xcf,", +" 0xe3, 0xc7, 0x03, 0xc0, 0xff, 0xff, 0xff, 0xff};", +"", +"createBitmap tile 16 16 {", +" 0xff, 0xff, 0xff, 0xff, 0x83, 0xc1, 0x83, 0xc1, 0x83, 0xc1, 0x83, 0xc1,", +" 0x83, 0xc1, 0xff, 0xff, 0xff, 0xff, 0x83, 0xc1, 0x83, 0xc1, 0x83, 0xc1,", +" 0x83, 0xc1, 0x83, 0xc1, 0xff, 0xff, 0xff, 0xff};", +"", +"createBitmap compass 16 16 {", +" 0x00, 0x00, 0x00, 0x02, 0x00, 0x07, 0x80, 0x0f, 0xc0, 0x1f, 0x00, 0x07,", +" 0x00, 0x07, 0x00, 0x07, 0x00, 0x07, 0x00, 0x07, 0x00, 0x07, 0xfc, 0x07,", +" 0xfc, 0x07, 0xfc, 0x07, 0x00, 0x00, 0x00, 0x00}", +"", +"createBitmap plus 11 11 {", +" 0x00, 0x00, 0x70, 0x00, 0x70, 0x00, 0x70, 0x00, 0xfe, 0x03, 0xfe, 0x03,", +" 0xfe, 0x03, 0x70, 0x00, 0x70, 0x00, 0x70, 0x00, 0x00, 0x00};", +"", +"createBitmap minus 11 11 {", +" 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x03, 0xfe, 0x03,", +" 0xfe, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};", +"", +"createBitmap disk 16 16 {", +" 0xfe,0x1f,0x11,0x25,0x11,0x45,0x11,0x44,0xf1,0x47,0x01,0x40,0x01,0x40,0xf9,", +" 0x4f,0x05,0x50,0x05,0x50,0x05,0x50,0x05,0x50,0x05,0x50,0x05,0x50,0xff,0x7f,", +" 0x00,0x00};", +"", +"createBitmap printer 32 16 {", +" 0x00, 0xfe, 0x07, 0x00, 0x00, 0x02, 0x0a, 0x00, 0x00, 0x02, 0x12, 0x00,", +" 0x00, 0x02, 0x22, 0x00, 0x00, 0x02, 0x3e, 0x00, 0x00, 0x02, 0x20, 0x00,", +" 0x00, 0x02, 0x20, 0x00, 0xe0, 0x03, 0xe0, 0x03, 0x10, 0x03, 0xe0, 0x06,", +" 0x08, 0xff, 0x7f, 0x09, 0x04, 0x00, 0x00, 0x10, 0xfc, 0xff, 0xff, 0x1f,", +" 0x04, 0x00, 0x00, 0x10, 0xfc, 0xff, 0xff, 0x1f, 0x08, 0x00, 0x00, 0x08,", +" 0xf8, 0xff, 0xff, 0x0f};", +"", +"", +"send tbBlinkDec \"set bitmap larrow\" ;# Assign the bitmaps to the buttons.", +"send tbBlinkInc \"set bitmap rarrow\"", +"send tbZoomIn \"set bitmap plus\"", +"send tbZoomOut \"set bitmap minus\"", +"send tbTile \"set bitmap tile\"", +"send tbCompass \"set bitmap compass; addCallback toggleCompass\"", +"#send helpButton \"set bitmap qmark; addCallback Help\"", +"send mXflipButton \"set bitmap xflip; addCallback xflip\"", +"send mYflipButton \"set bitmap yflip; addCallback yflip\"", +"send mNextButton \"set bitmap rarrow; addCallback nextFrame\"", +"send mPrevButton \"set bitmap larrow; addCallback prevFrame\"", +"", +"", +"# toolBox -- Toggle the toolbox and panelbar display.", +"", +"set toolbox_up [ true $showToolBar ]", +"set panelbar_up [ true $showPanelBar ]", +"", +"proc toolBoxToggle args \\", +"{", +" global toolbox_up ", +"", +" set w [send display get width] ; set h [send display get height]", +" set iw [send imagewin get width] ; set ih [send imagewin get height]", +"", +" if {$toolbox_up} {", +" send toolbar set height 0", +" send toolButton set state 0", +" send imagewin \"set width $iw; set height $ih\"", +" set nh [expr $h - 25]", +" send display \"set width $w; set height $nh\"", +" set toolbox_up 0", +" send mXflipButton map", +" send mYflipButton map", +" send mPrevButton map", +" send mFrameButton map", +" send mNextButton map", +" } else {", +" send toolbar set height 25", +" send toolButton set state 1", +" send imagewin \"set width $iw; set height $ih\"", +" set nh [expr $h + 25]", +" send display \"set width $w ; set height $nh\"", +" set toolbox_up 1", +" send mXflipButton unmap", +" send mYflipButton unmap", +" send mPrevButton unmap", +" send mFrameButton unmap", +" send mNextButton unmap", +" }", +"}", +"", +"proc panelBarToggle args \\", +"{", +" global panelbar_up", +"", +" set w [send display get width] ; set h [send display get height]", +" set iw [send imagewin get width] ; set ih [send imagewin get height]", +"", +" if {$panelbar_up} {", +" send panelbar set height 0", +" send panelButton set state 0", +" send imagewin \"set width $iw; set height $ih\"", +" set nh [expr $h - 25]", +" send display \"set width $w ; set height $nh\"", +" set panelbar_up 0", +" } else {", +" send panelbar set height 25", +" send panelButton set state 1", +" send imagewin \"set width $iw; set height $ih\"", +" set nh [expr $h + 25]", +" send display \"set width $w ; set height $nh\"", +" set panelbar_up 1", +" }", +"}", +"", +"", +"", +"# Initialize the bars to be displayed if the resource was set.", +"", +"send toolButton \"set bitmap tools; addCallback toolBoxToggle\"", +"if { ! [ true $showToolBar ] } {", +" send display set height [expr [send display get height] - 25]", +" send toolbar set height 0", +" send toolButton set state 0", +"} else {", +" send toolButton set state 1", +" send mXflipButton unmap", +" send mYflipButton unmap", +" send mPrevButton unmap", +" send mFrameButton unmap", +" send mNextButton unmap", +"}", +"", +"send panelButton \"deleteCallback panel\"", +"send panelButton \"set bitmap control; addCallback panelBarToggle\"", +"", +"if { ! [ true $showPanelBar ] } {", +" send display set height [expr [send display get height] - 25]", +" send panelbar set height 0", +" send panelButton set state 0", +"} else {", +" send panelButton set state 1", +"}", +"", +"", +"##############################################", +"# Panelbar callbacks.", +"##############################################", +"", +"send pbQuit addCallback Quit", +"send helpClose addCallback \"send helpButton set state 0\"", +"", +"", +"# Control Panel.", +"#------------------------------------------------------", +"proc pbToggleControl {name element op} \\", +"{", +" upvar $name panel_up", +" send pbDisplayP set state [expr !($panel_up)]", +"} ; #trace variable panel_up w pbToggleControl", +"", +"proc pbResetPanel {param old new} \\", +"{", +" global displayPanner displayMagnifier displayCoords", +" switch $new {", +" done { send pbPanM set state [true $displayPanner]", +" send pbMagM set state [true $displayMagnifier]", +" send pbWcsM set state [true $displayCoords]", +" }", +" }", +"} ; send initialize addCallback pbResetPanel", +"", +"set WidgetToTab(pbDisplayP) display_panel", +"set WidgetToTab(pbInfoP) info_panel", +"set WidgetToTab(pbLoadP) load_panel", +"set WidgetToTab(pbPrintP) print_panel", +"set WidgetToTab(pbSaveP) save_panel", +"set WidgetToTab(pbTileP) tile_panel", +"set WidgetToTab(pbCoordP) wcs_panel", +"", +"set TabToWidget(display_panel) pbDisplayP", +"set TabToWidget(print_panel) pbPrintP", +"set TabToWidget(load_panel) pbLoadP", +"set TabToWidget(save_panel) pbSaveP", +"set TabToWidget(info_panel) pbInfoP", +"set TabToWidget(tile_panel) pbTileP", +"set TabToWidget(wcs_panel) pbCoordP", +"", +"set pbTabTop \"pbDisplayP\"", +"", +"proc pbPanelDismiss args \\", +"{", +" global tabTop TabToWidget WidgetToTab", +" set panel $TabToWidget($tabTop)", +" send $panel set state 0", +"} ; send panelClose addCallback pbPanelDismiss", +"", +"proc pbResizeCB {widget event a b c d e args} \\", +"{", +" global pbTabTop TabToWidget WidgetToTab", +" if { $a == 0 && $b == 0 && $c == 0 && $d == 0 && $e == 0 } {", +" send $pbTabTop set state 0", +" set new $TabToWidget($widget)", +" send $new set state 1", +" set pbTabTop $new", +" }", +"} ; foreach w $cpTabs {send $w addEventHandler pbResizeCB exposureMask}", +"", +"proc pbPanelTabs { widget type state args } \\", +"{", +" global pbTabTop tabTop panel_up", +" global TabToWidget WidgetToTab", +"", +" set panel $WidgetToTab($widget)", +" if {$tabTop == $panel && $panel_up} {", +" send panelShell unmap", +" send $widget set state 0", +" set panel_up 0", +" return", +" }", +"", +" send $TabToWidget($tabTop) set state 0", +" set tabTop $panel", +" set pbTabTop $TabToWidget($panel)", +" send panelTabs setTop $panel", +"", +" # Now fire it up if it's not already open.", +" if {$panel_up == 0} {", +" send $widget set state 1", +" send panelShell map", +" set panel_up 1", +" }", +"}", +"foreach w { pbDisplayP pbInfoP pbLoadP pbPrintP pbSaveP pbTileP pbCoordP } {", +" send $w addCallback pbPanelTabs", +"}", +"", +"", +"", +"# Load Panel. (Really need to clean this up.)", +"#------------------------------------------------------", +"proc pbDoLoadOptions { param old new } \\", +"{", +" set val [ join [lrange $new 1 end] \" \" ]", +" switch [lindex $new 0] {", +" newfile { send fnameText set string $val }", +" }", +"} ; send loadOptions addCallback pbDoLoadOptions", +"", +"proc pbFileLoad { widget mode fname args } \\", +"{", +" set fpath [format \"%s/%s\" \\", +" [string range [send dirLabel get label] 12 end] $fname ]", +" send imagewin setCursorType idle", +"} ; send fnameText addCallback pbFileLoad", +"", +"proc pbflSelectPrint {widget cbtype selections args} \\", +"{", +" foreach selection $selections {", +" ;", +" }", +"}; #send imageList addCallback pbflSelectPrint", +"", +"proc pbFileLoadB args \\", +"{", +" set fname [send fnameText get string]", +" if {$fname != \"\"} {", +" set fpath [format \"%s/%s\" \\", +" [string range [send dirLabel get label] 12 end] $fname ]", +" }", +"} ; send filesLoadButton addCallback pbFileLoadB", +"", +"", +"# Panner Marker.", +"#------------------------------------------------------", +"proc pbTracePanner {name element op} \\", +"{", +" global last_compass", +"", +" catch {", +" upvar $name panner_enable", +" send pbPanM set state $panner_enable", +"", +" if { $panner_enable } {", +" send tbCompass \"setSensitive True ; set state $last_compass\"", +" drawCompass", +" } else {", +" send tbCompass \"setSensitive False ; set state False\"", +" eraseCompass", +" }", +" }", +"} ; trace variable panner_enable w pbTracePanner", +"", +"proc pannerPanel args \\", +"{", +" global panner_enable displayPanner", +"", +" setPanner [expr !$panner_enable]", +" send pannerButton set on [expr $panner_enable]", +"}; send pbPanM addCallback pannerPanel", +"", +"", +"# Magnifier Marker.", +"#------------------------------------------------------", +"proc pbTraceMagnifier {name element op} \\", +"{", +" upvar $name magnifier_enable", +" send pbMagM set state $magnifier_enable", +"} ; trace variable magnifier_enable w pbTraceMagnifier", +"", +"proc magnifierPanel args \\", +"{", +" global magnifier_enable displayMagnifier", +" setMagnifier [expr !$magnifier_enable]", +" send magnifierButton set on [expr $magnifier_enable]", +"}; send pbMagM addCallback magnifierPanel", +"", +"", +"# CoordsBox Marker.", +"#------------------------------------------------------", +"proc pbTraceCoordsBox {name element op} \\", +"{", +" upvar $name track_enable", +" send pbWcsM set state $track_enable", +"} ; trace variable track_enable w pbTraceCoordsBox", +"", +"proc wcsPanel args \\", +"{", +" global track_enable", +" setTrack [expr !$track_enable]", +"}; send pbWcsM addCallback wcsPanel", +"", +"", +"", +"# WPIX ISM Callbacks.", +"#------------------------------------------------------", +"", +"proc altIsmToggle { widget type state args } \\", +"{", +" ismToggle pbIsm junk $state", +"} ; send pbIsm addCallback altIsmToggle", +"", +"proc pbTraceIsm {name element op} \\", +"{", +" upvar $name ism_enable", +" send pbIsm set state $ism_enable", +"} ; trace variable ism_enable w pbTraceIsm", +"", +"", +"proc altIsmMsgCB { param old new } \\", +"{", +" set cmd [lindex $new 0] ;# command name", +" set ism [lindex $new 1] ;# determine ISM name", +" set argv [lrange $new 2 end] ;# get args", +" set argc [llength $argv]", +"", +" switch $cmd {", +" deliver { ${ism}_alt_msg $argc $argv }", +" }", +"} ; send ism_msg addCallback altIsmMsgCB", +"", +"", +"proc wcspix_alt_msg { argc argv } \\", +"{", +" set arg [string trimleft [ string trimright [lindex $argv 0] ] ]", +" set cmd [lindex $arg 0]", +" switch $cmd {", +" startup { }", +" shutdown { }", +" disable { send pbIsm \"set state False ; setSensitive False\" }", +" capable { send pbIsm \"setSensitive True\" }", +" }", +"}", +"", +"", +"", +"##############################################", +"# Toolbar callbacks.", +"##############################################", +"", +"send tbNormalize addCallback normalize", +"send tbInvert addCallback cpInvert", +"send tbRegister addCallback cpRegisterFrames", +"send tbMatchLUT addCallback cpMatchFrames", +"", +"", +"# Frame Selection.", +"#------------------", +"createMenu mFrameMenu mFrameButton $frameMenuDescription", +"", +"proc altFrameChanged {param old new} \\", +"{", +" send mFrameButton set label $new", +"} ; send frame addCallback altFrameChanged", +"", +"", +"# Image Flipping.", +"#------------------------------------------------------", +"proc tbSetFlip {param old new} \\", +"{", +" if {$param == \"xflip\"} {", +" send mXflipButton set state [true $new]", +" } else {", +" send mYflipButton set state [true $new]", +" }", +"}; foreach i {xflip yflip} { send $i addCallback tbSetFlip }", +"", +"", +"# Zoom/Pan buttons.", +"#------------------------------------------------------", +"proc tbZoomAction { widget args } \\", +"{", +" global frameWidth frameHeight", +"", +" switch $widget {", +" tbZoom0 { cpZoom 1 1 fixed }", +" tbZoomIn { cpZoom 2.0 2.0 relative }", +" tbZoomOut { cpZoom 0.5 0.5 relative }", +" tbCenter { send client pan [expr $frameWidth/2.0] [expr $frameHeight/2.0] }", +" }", +"}", +"foreach widget { tbCenter tbZoomIn tbZoom0 tbZoomOut } {", +" send $widget addCallback tbZoomAction", +"}", +"", +"", +"# Frame Blink.", +"#------------------------------------------------------", +"proc tbSetBlinkRate {w args} \\", +"{", +" if {$w == \"tbBlinkInc\"} {", +" cpSetBlinkRate BRincrease", +" } else {", +" cpSetBlinkRate BRdeccrease", +" }", +"}", +"foreach w {tbBlinkDec tbBlinkInc} { send $w addCallback tbSetBlinkRate }", +"", +"proc tbBlink { widget args } \\", +"{", +" global blinkRate blinkId", +"", +" if {$blinkRate < 0.01} {", +" send tbBlink set state 0", +" } else {", +" if {$widget != \"tbBlink\"} {", +" if {($blinkId != 0) != [send $widget get on]} {", +" toggleBlink", +" }", +" } else {", +" if {($blinkId != 0) != [send $widget get state]} {", +" toggleBlink", +" }", +" }", +" }", +"} ; send tbBlink addCallback tbBlink", +"", +"proc tbTraceBlink {name element op} \\", +"{", +" upvar $name blinkId", +" send tbBlink set state [expr $blinkId != 0]", +"} ; trace variable blinkId w tbTraceBlink", +"", +"", +"# Auto-register.", +"#------------------------------------------------------", +"proc tbAutoRegister { widget type state args } \\", +"{", +" send tbAutoReg set state $state", +"}", +"foreach w {autoregButton brAregButton tbAutoReg} {", +" send $w addCallback cpAutoRegister", +"}", +"", +"proc tbToggleAutoReg args \\", +"{", +" global auto_reg", +" if {$auto_reg} {", +" cpAutoRegister autoregButton dummy 0", +" set auto_reg 0", +" send tbAutoReg set state 0", +" } else {", +" cpAutoRegister autoregButton dummy 1", +" set auto_reg 1", +" send tbAutoReg set state 1", +" }", +"}", +"", +"", +"# Frame Tiles.", +"#------------------------------------------------------", +"proc tbSetTileFrames args \\", +"{", +" global tileOpt", +"", +" # Send the option to the client.", +" if {[send tbTile get state ]} {", +" if {$tileOpt == 0} {", +" # If mode is disabled, turn on the tile selection.", +" selectTileOrientation junk junk Best", +" } else {", +" # Otherwise, turn on in current mode.", +" selectTileOrientation junk junk [tileSelToLabel $tileOpt]", +" }", +" } else {", +" selectTileOrientation junk junk Disabled", +" }", +"}; send tbTile addCallback tbSetTileFrames", +"", +"proc tbTrackTileFrames {param old new} \\", +"{", +" send tileFramesButton set on [true $new]", +" send tbTile set state $new", +"}; send tileFrames addCallback tbTrackTileFrames", +"", +"proc tbTileFramesToggle args \\", +"{", +" set value [send tileFramesButton get on]", +" if {$value} { set not 0 } else { set not 1 }", +"", +" send tileFramesButton set on $not", +" send tbTile set state $not", +" cpSetTileFrames tbTile junk $not", +"}", +"", +"", +"# Compass Indicator.", +"#------------------------------------------------------", +"proc tbToggleCompass { widget type state args } \\", +"{", +" global frame", +"", +" if {$state} {", +" send compass set on True", +" send tbCompass set state 1", +" drawCompass", +" } else {", +" send compass set on False", +" send tbCompass set state 0", +" eraseCompass", +" }", +"} ; foreach w {compass tbCompass} { send $w addCallback tbToggleCompass }", +"", +"", diff --git a/vendor/x11iraf/ximtool/ximtool.h b/vendor/x11iraf/ximtool/ximtool.h new file mode 100644 index 00000000..4d55f0ed --- /dev/null +++ b/vendor/x11iraf/ximtool/ximtool.h @@ -0,0 +1,733 @@ +/* + * XIMTOOL.H -- Global definitions for XImtool. + */ + +#include "eps.h" + +/* Default values, size limiting values. + */ +#define MAX_FBCONFIG 128 /* max possible frame buf sizes */ +#define MAX_FRAMES 16 /* max number of frames */ +#define MAX_MAPPINGS 100 /* max number of mappings/frame */ +#define MAX_CLIENTS 32 /* max display server clients */ +#define MAX_ISM 8 /* max ISM module clients */ +#define MAX_COLORMAPS 256 /* max number of colormaps */ +#define MAX_COLORS 256 /* max size colormap */ +#define MAX_PRINTERS 128 /* max number of printers */ +#define FIRST_COLOR 10 /* first allocatable color */ +#define DEF_NCOLORS 201 /* default number of colors */ +#define DEF_COLORMAP 1 /* default colormap */ +#define DEF_NFRAMES 1 /* save memory; only one frame */ +#define DEF_FRAME_WIDTH 512 /* 512 square frame */ +#define DEF_FRAME_HEIGHT 512 /* 512 square frame */ +#define DEF_FRAME_DEPTH 8 /* 8 bits deep */ +#define DEF_WIN_WIDTH 512 /* default size window */ +#define DEF_WIN_HEIGHT 512 /* default size window */ +#define DEF_TILE_BORDER 3 /* border width for tileFrames */ +#define DEF_BORDER_COLOR "9" /* border highlight color */ +#define SZ_CMAPNAME 32 /* colormap name buffer */ +#define SZ_NAME 80 /* object name buffer */ +#define SZ_LABEL 256 /* main frame label string */ +#define SZ_IMTITLE 128 /* image title string */ +#define SZ_WCTEXT 80 /* WCS box text */ +#define SZ_OLD_WCSBUF 320 /* old WCS text buffer size */ +#define SZ_WCSBUF 1024 /* WCS text buffer size */ +#define SZ_MSGBUF 8192 /* message buffer size */ +#define SZ_COLORBAR 11 /* height of colorbar in pixels */ +#define SZ_FIFOBUF 4000 /* transfer size for FIFO i/o */ + +#define SZ_FNAME 256 +#define SZ_LINE 256 +#define ERR (-1) +#define OK 0 +#define EOS '\0' + +#define M_UNITARY 0 /* xim_setmapping */ +#define M_ASPECT 1 +#define M_FILL 2 + +/* Magic numbers. */ +#define DEF_PORT 5137 /* default tcp/ip socket */ +#define DEF_NPORTS 1 /* no. of inet ports to open */ +#define I_DEVNAME "/dev/imt1o" /* pseudo device names */ +#define O_DEVNAME "/dev/imt1i" /* our IN is client's OUT */ +#define DEF_UNIXADDR "/tmp/.IMT%d" /* default unix socket */ +#define DEF_ANTIALIASTYPE "boxcar" /* default antialiasing */ +#define FBCONFIG_1 ".imtoolrc" +#define FBCONFIG_2 "/usr/local/lib/imtoolrc" +#define CMAPCONFIG "/usr/local/lib/imtoolcmap" +#define FBCONFIG_ENV1 "imtoolrc" +#define FBCONFIG_ENV2 "IMTOOLRC" +#define PRINTCONFIG "/usr/local/lib/ximprint.cfg" + +#define DEF_ISM_ADDR "/tmp/.ISM%d" /* default ISM unix socket */ +#define DEF_ISM_TEMPLATE "/tmp/.ISM%d_%d" /* ISM client socket template */ +#define DEF_ISM_TASK "wcspix" +#define DEF_ISM_CMD "/usr/local/bin/ism_wcspix.e wcspix &" +#define DEF_ISM_CMD "ism_wcspix.e wcspix &" +#define SZ_ISMBUF 4096 + +/* WCS definitions. */ +#define W_UNITARY 0 +#define W_LINEAR 1 +#define W_LOG 2 +#define W_USER 3 +#define W_DEFFORMAT " %7.2f %7.2f %7.1f%c" + +/* Rotation matrix defining world coordinate system (WCS) of a frame. */ +typedef struct { + int valid; /* has WCS been set? */ + float a, b; /* x, y scale factors */ + float c, d; /* x, y cross factors */ + float tx, ty; /* x, y translation */ + float z1, z2; /* greyscale range */ + int zt; /* greyscale mapping */ + char format[32]; /* wcs output format */ + char imtitle[SZ_IMTITLE+1]; /* image title from WCS */ +} Ctran, *CtranPtr; + +/* Coordinate mappings on each frame buffer. */ +typedef struct { + int id; /* object id */ + Ctran ctran; /* world coordinate system */ + char ref[SZ_FNAME+1]; /* image reference from WCS */ + int regid; /* region id */ + char region[SZ_FNAME+1]; /* region name from WCS */ + float sx, sy; /* source rect */ + int snx, sny; + int dx, dy; /* destination rect */ + int dnx, dny; +} Mapping, *MappingPtr; + +/* The frame buffers. */ +typedef struct { + int frameno; /* frame number */ + int raster; /* frame buffer raster */ + int zoomras; /* zoom/pan raster */ + int zoommap; /* zoom/pan mapping */ + int dispmap; /* mapping used for display */ + int colormap; /* greyscale transformation */ + float offset, scale; /* transfer function */ + float xscale, yscale; /* scaling at [xy]mag==1.0 */ + float xmag, ymag; /* zoom/dezoom factors */ + float xcen, ycen; /* center of zoomed region */ + float xoff, yoff; /* offset of zoomed region */ + int xflip, yflip; /* flip in X or Y? */ + char label[SZ_LABEL+1]; /* frame label string */ + Ctran ctran; /* world coordinate system */ + char wcsbuf[SZ_WCSBUF]; /* wcs info string */ + Mapping mapping[MAX_MAPPINGS]; /* coordinate mappings */ + int nmaps; /* number of defined mappings */ +} FrameBuf, *FrameBufPtr; + +/* Possible frame buffer sizes. */ +typedef struct { + int nframes; /* number of frames */ + int width; /* frame buffer width */ + int height; /* frame buffer height */ +} FbConfig, *FbConfigPtr; + + +/* Predefined colormaps. */ +typedef struct { + int mapno; /* widget colormap number */ + char name[SZ_CMAPNAME+1]; /* colormap name */ +} ColorMap, *ColorMapPtr; + +/* Predefined lookup tables. */ +typedef struct { + float red, green, blue; +} Triplet, *TripletPtr; + +typedef struct { + int lutlen; + Triplet hue[MAX_COLORS]; +} Lut, *LutPtr; + + +/* Client IIS I/O channel. */ +typedef struct { + XtPointer xim; /* backpointer to xim descriptor */ + XtPointer id; /* input callback id */ + int type; /* channel type */ + int datain; /* input channel */ + int dataout; /* output channel */ + int keepalive; /* used to keep input fifo ready */ + char path[SZ_FNAME+1]; /* for unix sockets */ + int reference_frame; /* reference (cmd i/o) frame */ + int version; /* flags capability of client */ + FrameBufPtr rf_p; /* reference frame descriptor */ +} IoChan, *IoChanPtr; + +#define IO_FIFO 1 +#define IO_INET 2 +#define IO_UNIX 3 + + +/* Client ISM I/O channel. */ +typedef struct { + XtPointer xim; /* backpointer to xim descriptor */ + XtPointer id; /* input callback id */ + int datain; /* input channel */ + int dataout; /* output channel */ + int connected; /* client connected? */ + char name[SZ_FNAME+1]; /* client name */ + char path[SZ_FNAME+1]; /* for unix sockets */ + char msgbuf[SZ_ISMBUF+1]; /* incomplete message buffer */ +} IsmIoChan, *IsmIoChanPtr; + + +/* Definitions for the supported ISM Modules. */ +typedef void (*IsmFunc)(); + +typedef struct { + char name[SZ_FNAME]; /* name of the module */ + char command[SZ_LINE]; /* cmd to execute for module */ + IsmFunc startupCB; /* connection callback func */ + IsmFunc shutdownCB; /* shutdown callback func */ + IsmFunc commandCB; /* client command callback func */ + int connected; /* client is connected */ + int ref_count; /* reference count */ + IsmIoChanPtr chan; /* i/o channel */ +} ismModule, *IsmModule; + + +/* Printer list. */ +typedef struct { + char printerName[SZ_FNAME+1]; /* printer name */ + char printCmd[SZ_FNAME+1]; /* printer dispose command */ +} Printer, *PrinterPtr; + + +/* Printer configuration struct. */ +typedef struct { + int printno; /* printer number */ + int seqno; /* sequence number */ + int diskfile; /* print to diskfile? */ + char printFile[SZ_FNAME+1]; /* disk filename template */ + char printCmd[SZ_FNAME+1]; /* dispose command */ +} PrintCfg, *PrintCfgPtr; + +/* File save definitions and structure. */ +typedef struct { + int seqno; /* sequence number */ + int format; /* save format */ + int colorType; /* save color type */ + int w, h, d; /* dimensions of last file saved */ + char fname[SZ_FNAME+1]; /* save filename */ +} fileSave, *fileSavePtr; + +#define XIM_GRAYSCALE 0 /* save color options */ +#define XIM_PSEUDOCOLOR 1 +#define XIM_RGB 2 + +#define XIM_RAS 0 /* save format options */ +#define XIM_GIF 1 +#define XIM_TIFF 2 +#define XIM_JPEG 3 +#define XIM_X11 4 +#define XIM_FITS 5 +#define XIM_RAW 6 +#define XIM_EPS 7 +#define XIM_OIF 8 + + +/* File load struct. */ +typedef struct { + int nfiles; /* number of files in directory */ + char **FileList; /* list of directory contents */ + char curdir[SZ_FNAME+1]; /* current directory */ + char homedir[SZ_FNAME+1]; /* home directory */ + char pattern[SZ_NAME+1]; /* file pattern to match */ + int gray; /* load as a grayscale image? */ + int zscale; /* zscale the image */ + int zrange; /* use full data range */ + float z1, z2; /* user-supplied zrange limits */ + int nsample; /* number of zscale sample pts */ +} fileLoad, *fileLoadPtr; + +/* + * Application resources and runtime descriptor. + * ---------------------------------------------- + */ +typedef struct { + /* Resources. */ + Boolean autoscale; /* is XY autoscaling enabled */ + Boolean antialias; /* apply antialiasing when dezooming */ + Boolean tileFrames; /* tile rather than overlay frames */ + Boolean highlightFrames; /* highlight tiled frames */ + Boolean invert; /* use inverted colormap */ + int def_config; /* default FB config */ + int def_nframes; /* default number of frames */ + int ncolors; /* number of image pixel colors */ + int tileBorder; /* image border when tiling frames */ + int cm_focus; /* colormap update screen size */ + String borderColor; /* border color for tileFrames */ + String gui; /* GUI file name */ + String imtoolrc; /* imtoolrc file name */ + String memModel; /* FB memory model */ + String userCMap1; /* user colormap file */ + String userCMap2; /* user colormap file */ + String userCMapDir1; /* user colormap directory */ + String userCMapDir2; /* user colormap directory */ + String antialiasType; /* type of antialiasing */ + String printConfig; /* printer configuration file */ + String input_fifo; /* client's output, e.g. /dev/imt1o */ + String output_fifo; /* client's input, e.g. /dev/imt1i */ + String unixaddr; /* format for unix socket path */ + String ism_addr; /* format for ISM unix socket path */ + String ism_task; /* image support module taskname */ + int port; /* port for INET socket */ + int nports; /* no. of INET ports to open */ + + /* Internal state. */ + XtPointer obm; /* object manager */ + IoChanPtr cursor_chan; /* cursor mode channel */ + IoChan chan[MAX_CLIENTS]; /* client i/o descriptors */ + IsmIoChan ism_chan; /* image support module channel */ + IsmIoChan ism_client[MAX_ISM]; /* ISM client i/o descriptors */ + Widget toplevel; /* dummy toplevel app shell */ + Widget gt; /* imagewin gterm-image widget */ + Widget cb; /* colorbar gterm-image widget */ + XtPointer gm_border; /* border marker for tileFrames */ + int tileFramesList; /* frames to be tiled (bitmask) */ + int nTileFrames; /* number of frames to be tiled */ + int tileRows; /* number of tile rows */ + int tileCols; /* number of tile cols */ + Boolean tileByRows; /* fill tiles by row vs cols */ + Boolean tileTopDown; /* fill tiles by top to bottom */ + Boolean tileLabels; /* label frame tiles */ + int rop; /* rasterop for mappings */ + int display_frame; /* currently displayed frame */ + FrameBufPtr df_p; /* display frame descriptor */ + FrameBuf frames[MAX_FRAMES]; /* array of frame descriptors */ + int fb_configno; /* current config number */ + int nframes; /* current number of frame bufs */ + int width, height; /* current width, height */ + FbConfig fb_config[MAX_FBCONFIG]; /* fb config table */ + int *clientPrivate; /* used by imtool client code */ + + PSImagePtr psim; /* EPS image struct pointer */ + PrintCfgPtr pcp; /* printer config pointer */ + fileLoadPtr flp; /* load disk file pointer */ + fileSavePtr fsp; /* save disk file pointer */ + +} XimData, *XimDataPtr; + + + +#ifdef XIMTOOL_MAIN +XimData ximtool_data; + +#define XtNdefConfig "defConfig" +#define XtCDefConfig "DefConfig" +#define XtNdefNFrames "defNFrames" +#define XtCDefNFrames "DefNFrames" +#define XtNncolors "ncolors" +#define XtCNcolors "Ncolors" +#define XtNtileBorderWidth "tileBorderWidth" +#define XtCTileBorderWidth "TileBorderWidth" +#define XtNtileBorderColor "tileBorderColor" +#define XtCTileBorderColor "TileBorderColor" +#define XtNautoscale "autoscale" +#define XtCAutoscale "Autoscale" +#define XtNantialias "antialias" +#define XtCAntialias "Antialias" +#define XtNantialiasType "antialiasType" +#define XtCAntialiasType "AntialiasType" +#define XtNinvert "invert" +#define XtCInvert "Invert" +#define XtNtileFrames "tileFrames" +#define XtCTileFrames "TileFrames" +#define XtNhighlightFrames "highlightFrames" +#define XtCHighlightFrames "HighlightFrames" +#define XtNgui "gui" +#define XtCGui "Gui" +#define XtNimtoolrc "imtoolrc" +#define XtCImtoolrc "Imtoolrc" +#define XtNmemModel "memModel" +#define XtCMemModel "MemModel" +#define XtNuserCMap1 "cmap1" +#define XtNuserCMap2 "cmap2" +#define XtNcmFocus "cmFocus" +#define XtCCmFocus "cmFocus" +#define XtCUserCMap "UserCMap" +#define XtNuserCMapDir1 "cmapDir1" +#define XtNuserCMapDir2 "cmapDir2" +#define XtCUserCMapDir "UserCMapDir" +#define XtNprintConfig "printConfig" +#define XtCprintConfig "printConfig" +#define XtNinput_fifo "input_fifo" +#define XtCInput_fifo "Input_fifo" +#define XtNoutput_fifo "output_fifo" +#define XtCOutput_fifo "Output_fifo" +#define XtNunixaddr "unixaddr" +#define XtCUnixaddr "Unixaddr" +#define XtNism_addr "ism_addr" +#define XtCIsm_addr "Ism_addr" +#define XtNport "port" +#define XtCPort "Port" +#define XtNnports "nports" +#define XtCNPorts "NPorts" +#define XtNism_task "ism_task" +#define XtCIsm_task "Ism_task" + +static XtResource resources[] = { + { + XtNdefConfig, + XtCDefConfig, + XtRInt, + sizeof(int), + XtOffsetOf(XimData, def_config), + XtRImmediate, + (caddr_t)1 + }, + { + XtNdefNFrames, + XtCDefNFrames, + XtRInt, + sizeof(int), + XtOffsetOf(XimData, def_nframes), + XtRImmediate, + (caddr_t)0 + }, + { + XtNncolors, + XtCNcolors, + XtRInt, + sizeof(int), + XtOffsetOf(XimData, ncolors), + XtRImmediate, + (caddr_t)DEF_NCOLORS + }, + { + XtNtileBorderWidth, + XtCTileBorderWidth, + XtRInt, + sizeof(int), + XtOffsetOf(XimData, tileBorder), + XtRImmediate, + (caddr_t)DEF_TILE_BORDER + }, + { + XtNtileBorderColor, + XtCTileBorderColor, + XtRString, + sizeof(String), + XtOffsetOf(XimData, borderColor), + XtRImmediate, + (caddr_t)DEF_BORDER_COLOR + }, + { + XtNautoscale, + XtCAutoscale, + XtRBoolean, + sizeof(Boolean), + XtOffsetOf(XimData, autoscale), + XtRImmediate, + (caddr_t)FALSE + }, + { + XtNantialias, + XtCAntialias, + XtRBoolean, + sizeof(Boolean), + XtOffsetOf(XimData, antialias), + XtRImmediate, + (caddr_t)FALSE + }, + { + XtNantialiasType, + XtCAntialiasType, + XtRString, + sizeof(String), + XtOffsetOf(XimData, antialiasType), + XtRImmediate, + (caddr_t)DEF_ANTIALIASTYPE + }, + { + XtNinvert, + XtCInvert, + XtRBoolean, + sizeof(Boolean), + XtOffsetOf(XimData, invert), + XtRImmediate, + (caddr_t)FALSE + }, + { + XtNtileFrames, + XtCTileFrames, + XtRBoolean, + sizeof(Boolean), + XtOffsetOf(XimData, tileFrames), + XtRImmediate, + (caddr_t)FALSE + }, + { + XtNhighlightFrames, + XtCHighlightFrames, + XtRBoolean, + sizeof(Boolean), + XtOffsetOf(XimData, highlightFrames), + XtRImmediate, + (caddr_t)TRUE + }, + { + XtNcmFocus, + XtCCmFocus, + XtRInt, + sizeof(int), + XtOffsetOf(XimData, cm_focus), + XtRImmediate, + (caddr_t)512 + }, + { + XtNgui, + XtCGui, + XtRString, + sizeof(String), + XtOffsetOf(XimData, gui), + XtRImmediate, + (caddr_t)"default" + }, + { + XtNimtoolrc, + XtCImtoolrc, + XtRString, + sizeof(String), + XtOffsetOf(XimData, imtoolrc), + XtRImmediate, + (caddr_t)FBCONFIG_2 + }, + { + XtNmemModel, + XtCMemModel, + XtRString, + sizeof(String), + XtOffsetOf(XimData, memModel), + XtRImmediate, + (caddr_t)"fast" + }, + { + XtNuserCMap1, + XtCUserCMap, + XtRString, + sizeof(String), + XtOffsetOf(XimData, userCMap1), + XtRImmediate, + (caddr_t)"none" + }, + { + XtNuserCMap2, + XtCUserCMap, + XtRString, + sizeof(String), + XtOffsetOf(XimData, userCMap2), + XtRImmediate, + (caddr_t)"none" + }, + { + XtNuserCMapDir1, + XtCUserCMapDir, + XtRString, + sizeof(String), + XtOffsetOf(XimData, userCMapDir1), + XtRImmediate, + (caddr_t)"none" + }, + { + XtNuserCMapDir2, + XtCUserCMapDir, + XtRString, + sizeof(String), + XtOffsetOf(XimData, userCMapDir2), + XtRImmediate, + (caddr_t)CMAPCONFIG + }, + { + XtNprintConfig, + XtCprintConfig, + XtRString, + sizeof(String), + XtOffsetOf(XimData, printConfig), + XtRImmediate, + (caddr_t)PRINTCONFIG + }, + { + XtNinput_fifo, + XtCInput_fifo, + XtRString, + sizeof(String), + XtOffsetOf(XimData, input_fifo), + XtRImmediate, + (caddr_t)O_DEVNAME + }, + { + XtNoutput_fifo, + XtCOutput_fifo, + XtRString, + sizeof(String), + XtOffsetOf(XimData, output_fifo), + XtRImmediate, + (caddr_t)I_DEVNAME + }, + { + XtNunixaddr, + XtCUnixaddr, + XtRString, + sizeof(String), + XtOffsetOf(XimData, unixaddr), + XtRImmediate, + (caddr_t)DEF_UNIXADDR + }, + { + XtNism_addr, + XtCIsm_addr, + XtRString, + sizeof(String), + XtOffsetOf(XimData, ism_addr), + XtRImmediate, + (caddr_t)DEF_ISM_ADDR + }, + { + XtNport, + XtCPort, + XtRInt, + sizeof(int), + XtOffsetOf(XimData, port), + XtRImmediate, + (caddr_t)DEF_PORT + }, + { + XtNnports, + XtCNPorts, + XtRInt, + sizeof(int), + XtOffsetOf(XimData, nports), + XtRImmediate, + (caddr_t)DEF_NPORTS + }, + { + XtNism_task, + XtCIsm_task, + XtRString, + sizeof(String), + XtOffsetOf(XimData, ism_task), + XtRImmediate, + (caddr_t)DEF_ISM_TASK + }, +}; + +int ncolormaps = 0; +int first_color = FIRST_COLOR; + +ColorMap colormaps[MAX_COLORMAPS] = { + { 0, "Grayscale" }, + { 0, "Color" }, + { 0, "Heat" }, + { 0, "HSV" }, + { 0, "AIPS0" }, + { 0, "Halley" }, + { 0, "Ramp" }, + { 0, "Standard" }, + { 0, "Staircase" }, + { 0, "Rainbow1" }, + { 0, "Rainbow2" }, + { 0, "Random" }, + { 0, "Random8" }, + { 0, "Random16" }, + { 0, "Red" }, + { 0, "Green" }, + { 0, "Blue" }, +}; + + +int nprinters = 0; +Printer printer_list[MAX_PRINTERS] = { + { "default", "lpr" }, /* should do more interesting examples */ + { "clp", "lpr -Pclp" }, + { "clp2", "lpr -Pclp2" }, + { "clp2t", "lpr -Pclp2t" }, + { "lw1", "lpr -Plw1" }, + { "lw2", "lpr -Plw2" }, + { "lw3", "lpr -Plw3" }, + { "lw4", "lpr -Plw4" }, + { "lw5", "lpr -Plw5" }, + { "lw6", "lpr -Plw6" }, + { "lw7", "lpr -Plw7" }, + { "lw8", "lpr -Plw8" }, + { "lw9", "lpr -Plw9" }, + { "lw10", "lpr -Plw10" }, + { "lw11", "lpr -Plw11" }, + { "lw12", "lpr -Plw12" }, + { "lw13", "lpr -Plw13" }, + { "lw14", "lpr -Plw14" }, + { "lw15", "lpr -Plw15" }, + { "lw16", "lpr -Plw16" }, + { "lw18", "lpr -Plw18" }, + { "lw19", "lpr -Plw19" }, + { "lw20", "lpr -Plw20" }, + { "lw21", "lpr -Plw21" }, + { "lw22", "lpr -Plw22" }, + { "lw23", "lpr -Plw23" }, + { "lw24", "lpr -Plw24" }, + { "lw25", "lpr -Plw25" }, + { "lw26", "lpr -Plw26" }, + { "lw27", "lpr -Plw27" }, + { "\0", "\0" }, +}; + + +#else + +extern XtResource resources[]; +extern XimData ximtool_data; +extern int ncolormaps; +extern int first_color; +extern ColorMap colormaps[]; +extern int nprinters; +extern Printer printer_list[]; + +#endif + +/* Functions. + */ +#ifndef abs +#define abs(a) (((a)<0)?(-(a)):(a)) +#endif +#ifndef min +#define min(a,b) ((a)<(b)?(a):(b)) +#endif +#ifndef max +#define max(a,b) ((a)<(b)?(b):(a)) +#endif +#ifndef nint +#define nint(a) ((a)<(0)?((int)(a-0.5)):((int)(a+0.5))) +#endif + +void xim_initialize(), xim_reset(), xim_resize(), xim_refresh(); +void xim_close(), xim_initFrame(), xim_setFrame(), xim_setRop(); +void xim_setReferenceFrame(), xim_setDisplayFrame(); +void xim_delFrame(), xim_setMapping(), xim_setZoom(); +void xim_setCursorPos(), xim_getCursorPos(), xim_setFlip(); +void xim_matchFrames(), xim_registerFrames(); +void xim_readCursor(), xim_frameChanged(); +void xim_message(), xim_msgi(), xim_alert(); +int xim_setColormap(); +int xim_getAntialias(); +char *xim_frameLabel(); + +int xim_writeDisplay(); +unsigned char *xim_readDisplay(); +void xim_initSave(), xim_closeSave(); +void ximp_rename(), ximp_cancel(); +void xims_rename(), xims_cancel(); +int xim_saveFile(); + +int xim_iisopen(); +void xim_iisclose(), xim_iisio(); +XtPointer xim_addInput(); +void xim_removeInput(); + +void xim_clientOpen(), xim_clientClose(); +int xim_clientExecute(); diff --git a/vendor/x11iraf/ximtool/ximtool.html b/vendor/x11iraf/ximtool/ximtool.html new file mode 100644 index 00000000..129f84fc --- /dev/null +++ b/vendor/x11iraf/ximtool/ximtool.html @@ -0,0 +1,1219 @@ + +XImtool On-Line Help Summary + +

Welcome to XImtool V2.0BETA

+ +XImtool is an image display server developed by the IRAF Project at the +National Optical Astronomy Observatories. To view images you need +client software (such as IRAF) to load images into the display, or it can +load images directly when run as a standalone task. +

+More detailed help is available on the following topics: +

+
Basic Usage:
+
+
+
Advanced Features:
+
+

+Please contact iraf@noao.edu with comments, bugs, or suggestions. +More detailed documentation is also available in the man page for this +task. +

+


+ +

Table of Contents:

+
+        Getting Started
+        GUI Overview
+        Mouse Operations
+        Keystroke Accelerators
+        Command-line Options
+        Client Connections
+	Frame Buffers
+            Support for 16 Frames
+        Markers
+            Panner Marker
+            Magnifier Marker
+            Coords Box Marker
+            Ruler Markers
+            General Markers
+                Menu Options
+        Real-Time WCS/Pixel Readout
+        Freezing Cursor Readout
+        Auto-Registration of Images
+        Image Cut Graphics
+        Peak-Up Cursor Centroid Positioning
+
+        Integrated Control Panel
+          Display Panel
+            View Controls
+            Enhancement Controls
+            Blink Controls
+            Options:
+              Panner
+              Magnifier
+              Coords Box
+              Autoscale
+              Antialias
+              Tile Frames
+              Warnings
+              Centroid Peaks
+	    Colormap Selection
+              Builtin Colormaps
+              User-defined Colormaps
+          Load Panel
+            Directory browsing
+            File Patterns
+            Direct File Load
+            Frame Selections
+          Save Panel
+            File Name
+            Format
+            Color
+          Print Panel
+            Postscript Options
+            Color Options
+            Processing Options
+            Printer selection
+          Info Panel
+          Tile Panel
+          Coords Panel
+
+        Tcl Interactie Shell
+
+

+


+

Getting Started

+As a display server, XImtool is started as a separate process from client +software such as IRAF. Once it is running it will accept +client connections simultaneously on fifo pipes, unix +domain sockets, or inet sockets. A display client like the IRAF DISPLAY +task makes a connection and sends the image across using an IIS protocol +(other/different protocols may be supported in the future). Once the image +is loaded in the display buffer it may be enhanced, +saved to a disk file in a number of different formats, or +printed as Encapsulated Postscript to a printer or disk file. +

+When run in standalone mode, images may be loaded on the +command line or by using the Load Panel. +This allows you to browse images and perform the same manipulations as if +they had been displayed by a client. +


+ +

GUI Overview

+

+The GUI consists of a large image display window and a number of smaller +pannels that control various specific functions such as image +Load, Save and Print +as well as a general purpose Control Panel. The main +window menubar has several menu buttons to the left: the Files menu +is used to load/save/print an image as well as quit the task. The View +menu let's you select the image orientation, zoom, colormap or frame. The +Options menu allows you to call up control panels, toggle markers +or blinking etc. Some of this functionality is duplicated elsewhere in +the GUI. The right side of the menubar contains command buttons to flip the +image as well as buttons for frame selection and the help button. +

+For more detailed information on the operation of the control panels please +see the on-line help (i.e. use the '?' button or Alt-h keystroke in the +main image window). + +

Mouse Operations

+Clicking and dragging MB1 (mouse button 1) in the main image +window creates a rectangular region marker, used +to select a region of the image. If you do this accidentally and don't +want the marker, put the pointer in the marker and type DELETE or +BACKSPACE to delete the marker. With the pointer in the marker, +MB3 will call up a marker menu listing some things + you can do with the marker, like zoom the outlined region. MB1 can be used +to drag or resize the marker. See below for more +information on markers. +

+Clicking on MB2 in the main image window pans (one click) or zooms (two +clicks) the image. Further clicks cycle through the builtin zoom factors. +Moving the pointer to a new location and clicking moves the feature under +the pointer to the center of the display window. Holding down the Shift +key while clicking MB2 will cause a full-screen crosshair cursor to appear +until the button is released, this can be useful for fine positioning of the +cursor. +

+MB3 is used to adjust the contrast and brightness of the displayed image. +The position of the pointer within the display window determines the +contrast and brightness values. Click once to set the values corresponding +to the pointer location, or click and drag to continuously adjust the display. +


+ +

Keystroke Accelerators

+ The following keystrokes are currently defined in the GUI: +
+                        Misc Functions                      
+    Ctrl-b 		Previous (back) frame
+    Ctrl-c 		Center frame
+    Ctrl-f 		Forward frame
+    Ctrl-i 		Invert colormap
+    Ctrl-m 		Toggle magnifier
+    Ctrl-n 		Normalize
+    Ctrl-p 		Toggle panner
+    Ctrl-r 		Register
+    Ctrl-s 		Match LUT scaling
+    Ctrl-t 		Tile frames toggle
+    Ctrl-u 		Unzoom (zoom=1)
+    Ctrl-x 		Flip X
+    Ctrl-y 		Flip Y
+    
+    Ctrl-= 		Print using current setup
+    Ctrl-< 		Decrease blink rate (blink faster)
+    Ctrl-> 		Increase blink rate (blink slower)
+    Ctrl-+ 		Zoom in
+    Ctrl-- 		Zoom out
+    
+    Alt-1 thru Alt-4    Set frame to be displayed
+    Ctrl-1 thru Ctrl9   Set integer zoom factor
+    
+    Ctrl-Alt-q 		Quit
+    Ctrl-Alt-f 		Fitframe
+    
+                        Panel Toggles                      
+    Alt-b 		Blink frames
+    Alt-c 		Control panel
+    Alt-h 		Help popup
+    Alt-i 		Info box popup
+    Alt-l 		Load file popup
+    Alt-p 		Print popup
+    Alt-s 		Save popup
+    Alt-t 		TclShell popup
+    
+                        Cursor Positioning                   
+    Ctrl-h / Ctrl-Left  Move cursor one pixel left
+    Ctrl-j / Ctrl-Down  Move cursor one pixel down
+    Ctrl-k / Ctrl-Up    Move cursor one pixel up
+    Ctrl-l / Ctrl-Right Move cursor one pixel right
+    
+    Shift-Ctrl-h 	Move cursor ten pixels left
+    Shift-Ctrl-Left     Move cursor ten pixels left
+    Shift-Ctrl-j 	Move cursor ten pixels down
+    Shift-Ctrl-Down     Move cursor ten pixels down
+    Shift-Ctrl-k        Move cursor ten pixels up
+    Shift-Ctrl-Up       Move cursor ten pixels up
+    Shift-Ctrl-l  	Move cursor ten pixels right
+    Shift-Ctrl-Right    Move cursor ten pixels right
+    
+                        Auto-Registration                    
+    Ctrl-a 		Toggle auto-registration
+    Ctrl-o 		Set frame offset
+    
+                        Frame Positioning                   
+    Ctrl-Left  		Shift one full frame left
+    Ctrl-Down  		Shift one full frame down
+    Ctrl-Up    		Shift one full frame up
+    Ctrl-Right 		Shift one full frame right
+    
+    Ctrl-Alt-Left  	Shift one half frame left
+    Ctrl-Alt-Down  	Shift one half frame down
+    Ctrl-Alt-Up    	Shift one half frame up
+    Ctrl-Alt-Right 	Shift one half frame right
+    
+                        Peak Up Centroiding                  
+    Ctrl-[ 		Decrease centroiding box size
+    Ctrl-] 		Increase centroiding box size
+    Ctrl-0 (zero) 	Centroid/find local maximum
+    Alt-Ctrl-0 (zero)   Find local minimum
+    
+                        Mouse Button Events                   
+    Shift-Btn1Down 	Turn on magnifier
+    Shift-Btn1Up 	Turn off magnifier
+    Shift-Btn2Down 	Turn on crosshair cursor
+    Shift-Btn2Up 	Turn off crosshair cursor
+    
+    Btn1Down 		Create a Marker
+    Btn1Motion 		Resize marker being created
+    Btn2Down 		Zoom/center on cursor position
+    Btn3Down/Motion     Brightness/contrast scale the image
+    
+    Ctrl-Btn1Down 	Create Ruler Marker
+    Ctrl-Btn1Motion     Resize Ruler Marker being created
+    Ctrl-Btn1Up 	Destroy Ruler Marker
+    
+    Alt-Motion 		Freeze cursor readout
+
+
+ +

Client Connections

+Ximtool allows clients to connect in any of the following ways: + +
+
fifo pipes
+
The traditional approach. The default, global /dev/imt1[io] pipes may + be used, or a private set of fifos.
+
tcp/ip socket
+
Clients connect via a tcp/ip socket. There is a default port, or + a custom port may be specified. This permits connecting to the + server over a remote network connection anywhere on the Internet.
+
unix domain socket
+
Like a tcp/ip socket, but limited to a single host system. Usually + faster than a tcp/ip socket, and comparable to a fifo. By default + each user gets their own unix domain socket, so this option allows + multiple users to run ximtools on the same host without having to + customize things.
+
+ +By default ximtool listens simultaneously for client connctions on all three +types of ports. Clients communicate with XImtool using the IIS protocol, +other protocols may be supported in the future. +
+ +

Frame Buffers

+XImtool starts up using default frame buffer size of 512x512 pixels, two +(of 16 possible) frames will be created. When loading disk images (i.e. +run in standalone mode) the frame buffer configuration file will be +searched for a defined frame buffer that is the same size or larger than +the current image, if no suitable buffer can be found a custom frame +buffer the same size as the image will be created in an unused portion of +the configuration table. When used as a display server the frame buffer +configuration number is passed in by the client and loaded explicitly even +if it means clipping the image. If a new frame buffer is a different size +than previously defined frames, all available frames will be initialized +and cleared prior to the display. The default frame buffer configuration +file is /usr/local/lib/imtoolrc, this can be overridden by defining a +IMTOOLRC environment variable naming the file to be used, by creating a +.imtoolrc file in your home directory, or a new file may be specified +using the -imtoolrc command line flag or imtoolrc application +resource. +

+The format of the frame buffer configuration file is +

+   configno nframes width height [extra fields]
+
+e.g.                   
+	1  2  512  512
+	2  2  800  800
+	3  1 1024 1024          # comment
+
+At most 128 frame buffer sizes may be defined, each configuration may +define up to 16 frames, configuration numbers need not be sequential. + +

Support for 16 Display Frames

+

+As part of the extensive GUI changes with the V1.3 release, support for +the full 16 frames allowed by the IIS protocol is now available. IRAF +V2.11.4 or later client tasks (and CDL library) are required to take +advantage of this frames. All changes are backwards compatible, older +versions of IRAF will continue to work but cannot access more than the +original four frames. The new DISPLAY task will automatically sense +whether the display server being used supports 16 frames or the original 4 +and adjust the 'frame' parameter maximum accordingly. The changes are +fully backwards compatible for other servers. +

+More frames are possible if needed but will require further changes to the +client IRAF code to be effective. Allowing creation of more than 16 +frames by the Load panel can be done independently but would also require +numerous code change to XImtool. Please contact site support if there is +a need for this, or for workaround suggestions depending on your +application. + + +

Command-line Options

+ The following command-line options are currently recognized: +
+  -basePixel <num>         Base colormap pixel number
+  -cmap1 <file>            User cmap 1 
+  -cmap2 <file>            User cmap 2 
+  -cmapDir1 <dir>          User cmapDir 1 
+  -cmapDir1 <dir>          User cmapDir 2 
+  -cmapInitialize <bool>   Initialize colormap at startup
+  -cmapName <name>         Private colormap name 
+  -config <num>            Initial config number
+  -defgui                  Print default GUI to stdout
+  -displayPanner <bool>    Display panner box
+  -displayCoords <bool>    Display wcs coords box
+  -fifo <pipe>             Fifo pipe to use
+  -fifo_only               Use fifo pipes only 
+  -gui <file>              GUI file to use 
+  -help                    Print command-line summary 
+  -imtoolrc <file>         Frame buffer configuration file 
+  -inet_only               Use inet sockets only 
+  -invert                  Invert colormap on startup?
+  -ismdev                  ISM socket template
+  -maxColors <num>         Number of colors 
+  -memModel <type>         Memory model (fast,small,beNiceToServer)
+  -nframes <num>           Number of frames at startup
+  -port <num>              Inet port to use
+  -printConfig <file>      Printer configuration file 
+  -port_only               Use inet sockets only 
+  -tile                    Tile frames on startup?
+  -unix <name>             Unix socket to use
+  -unix_only               Use unix sockets only 
+  <file>                   File to load on startup
+
+
+

Markers

+

Panner Marker

+

+The panner window always displays the full frame buffer. Try setting the +frame buffer configuration to a nonsquare frame buffer (e.g. imtcryo) and +then displaying a square image (e.g. dev$pix) and the panner will show you +exactly where the image has been loaded into the frame. +

+The panner window uses two markers, one for the window border and one to +mark the displayed region of the frame. Most of the usual marker keystrokes +mentioned below apply to these markers as well, e.g. +you can use MB1 to reposition on the panner window within the main image +display window, or to drag the region marker within the panner (pan the +image). Resizing the region marker zooms the image; this is a non-aspect +constrained zoom. The panner window itself can be resized by dragging a +corner with MB1. Typing delete or backspace anywhere in the panner window +deletes the panner. +

+A special case is MB2. Hitting MB2 anywhere in the panner window pans the +image to that point. This is analogous to typing MB2 in the main display +window to pan the image. +

+The panner marker can be disabled by defining the displayPanner +GUI resource, its size and location can be controlled using the +pannerArea and pannerGeom GUI resources respectively. + +

Magnifier Marker

+The magnifier marker can be used to zoom in on a small area around the cursor. +It will be updated as the cursor moves but only for small motions (either +mouse movement or with the cursor movement keystrokes) to minimize the +impact on the system. The zoom factor is expressed as some fraction of the +size of the magnifier marker itself. The default zoom is 4, i.e. the area +in the marker represents and area in the image that's one-fourth the size +of the marker. Other zoom factors may be selected using the popup menu +created by hitting MB1 in the marker. +

+By default the magnifier marker is not visible, to toggle it select the +Magnifier option from the Options menubar button. Alternatively, +for just a quick look holding down the Shift Key and MB2 Button will display +the marker until the button is released. +

+The magnifier marker can be disabled by defining the displayMagnifier +GUI resource, its size and location can be controlled using the +magnifierAreaand magnifierGeom GUI resources respectively. + +

Coords Box Marker

+

+Ximtool provides a limited notion of world coordinates, allowing frame +buffer pixel coordinates and pixel values to be converted to some arbitrary +client defined coordinate system. The coords box feature is used to display +these world coordinates as the pointer is moved about in the image window. +

+The quantities displayed in the coords box are X, Y, and Z: the X,Y world +coordinates of the pointer, and Z, the world equivalent of the pixel value +under the pointer. All coordinate systems are linear. The precision of a +displayed quantity is limited by the range of values of the associated raw +frame buffer value. For example, if the display window is 512x512 only 512 +coordinate values are possible in either axis (the positional precision can +be increased however by zooming the image). More seriously, at most about +200 pixel values can be displayed since this is the limit on the range of +pixel values loaded into the frame buffer. If a display pixel is saturated +a "+" will be displayed after the intensity value. +

+The coords box is a marker (text marker) and it can be moved and resized +with the pointer like any other marker. + +

Ruler Markers

+

+Holding down the Ctrl key and the Left-Mouse-Button while moving +the mouse will drag out a "ruler marker" measuring the distance from the +initial point to the current mouse position. Releasing the Ctrl key before +lifting the mouse button will leave the marker on the display, otherwise +it will be erased automatically once the mouse button is released. Any +number of ruler markers can be created in the frame. +

+Distances are measured by default in image logical pixels however +the Right-Mouse-Button can be used inside the marker to popup a menu of +options: + +

+
Sticky
+
By default rulers are destroyed whenever the display changes due + to a pan, zoom, flip, or frame change. This option will make the + ruler "sticky" so it will not be erased, subsequent use of the menu + to shows this option to be "UnSticky" to remove this feature.
+
Units
+
Sub-menu to select the units of the display. If the ISM is enabled + and a WCS is present in the image and selected as one of the readout + options, distances may also be read out in units of arcseconds, + arcminutes, or degrees instead of the default logical pixels. All + markers created after the unit change will readout in the new units + as their default.
+
Color
+
Select the color of the marker.
+
Draw into Frame
+
(Not Yet Implemented) Draw the marker as overlay graphics + in the frame. Doing so will retain the marker when printing a + hardcopy of the display.
+
Destroy
+
Destroy the marker.
+
+ +

+The marker can also be destroyed by hitting the Delete or Backspace key +while the cursor is in the marker. There is presently no way to move the +marker to a new position in the frame. + + +

General Markers

+Although ximtool doesn't do much with markers currently, they are a general +feature of the Gterm widget and are used more extensively in other programs +(e.g. the prototype IRAF science GUI applications). Ximtool uses markers +for the marker zoom feature discussed above, and also for the +panner and the coords box. All +markers share some of the same characteristics, so it is worthwhile learning +basic marker manipulation keystrokes. + +
    +
  • MB1 anywhere inside a marker may be used to drag the marker. +
  • MB1 near a marker corner or edge, depending on the type of marker, + resizes the marker. +
  • Shift-MB1 on the corner of most markers will rotate the marker. +
  • Markers stack, if you have several markers and you put one on top + of the other. The active marker is highlighted to tell you which of the + stacked markers is active. If the markers overlap, this will be marker + "on top" in the stacking order. +
  • MB2 in the body of a marker "lowers" the marker, i.e. moves it to + the bottom of the stacking order. +
  • Delete or backspace in a marker deletes it. +
  • Markers have their own translation resources and so the default + keystroke commands will not be recognized when the + cursor is in a marker. +
+ +For example, try placing the pointer anywhere in the coords box, then press +MB1 and hold it down, and drag the coords box marker somewhere else on the +screen. You can also resize the coords box by dragging a corner, or delete +it with the delete or backspace key. (The Initialize button will get +the original coords box back if you delete it). +

+

Marker Menu Options

+
    +
  • MB3 (mouse button 3) calls up the marker menu (by default). +
  • Zoom does an equal aspect zoom of the region outlined by the marker. + In this way you can mark a region of the image and zoom it up. +
  • Fill exactly zooms the area outlined by the marker, making it fill + the display window. Since the marker is not likely to be exactly square, + the aspect ratio of the resultant image will not be unitary. +
  • Print prints the region outlined by the marker to the printer or + file currently configured by the Print Panel. +
  • Save saves the region outlined by the marker to the file currently + configured by the Save Panel. +
  • Info prints a description of the marked region. The text is + printed in the Info Panel. +
  • Unrotate unrotates a rotated marker. +
  • Color is a menu of possible marker colors. +
  • Type is a menu of possible marker types. This is still a little + buggy and it isn't very useful, but you can use it to play with different + types of markers. +
  • Destroy destroys the marker. You can also hit the delete or + backspace key in a marker to destroy the marker. +
+ +
+

Real-Time WCS/Pixel Readout

+XImtool now has the ability to display the actual pixel value of an image +(as well as the scaled value previously shown) and the cursor position in +image WCS values (e.g. RA/DEC, GLAT/GLONG, etc). This is done using an +external task (the 'ism_wcspix.e' binary in the new distribution) to +access the image and pass the coordinate/pixel information to the GUI. +

+WCS readout is enabled by default but can be toggled or reset using the +WCS/Pix button on the Coords tab in the control panel or the ISM +toggle on the alt-gui menubar. When enabled, images currently in the +server or subsequently displayed will be passed to the external process +where they are cached for access. Cursor movements generate an event that +maps the current frame buffer position to a position in the cached image. +The ISM (ISM is Image Support Module) task then reads the image to +determine the pixel value (or a small table of values around the current +position), and computes one or more coordinates from the image position. +The ISM task also has access to the associated BPM images and can +optionally return bad pixel information during the cursor readout. +

+By default, the logical and world image coordinates are displayed to both +the Coords panel readout as well as the main display window wcsbox text +marker. Alternate coordinate systems (e.g. transformation of equatorial +to galactic coordinates or some other sky system, physical coords, +amplifier coords, etc) can be selected for display by hitting the +Options toggle on the Coords panel. Available coordinate systems are +chosen using the Type menu on the panel, the readout format +(sexigesimal, degrees, etc) using the Format menu, and the display to +the current panel or main image window using the remaining toggles for +each WCS. Up to four systems may be displayed at one time, the coordinate +panel and wcsbox marker will adjust size automatically depending on the +display. +

+By selecting the BPM Data toggle from the Coords.Options panel ximtool +is able to flag pixels in images with an associated bad pixel mask. This +bad pixel mask is currently assumed to be named in the image header "BPM" +keyword by convention. If the cursor passes over a bad pixel in the mask, +the Coords bpm display as well as the main window wcsbox will change to a +red background color. Only the Coords display will show the value, any +non-zero value will be flagged with the color change. +

+With the ISM enabled the Compass indicator will display a set of arrows +showing North-East if a WCS is available, otherwise just the current X-Y +axes are shown. The pixel table will display actual pixel values from the +image, with the ISM off the pixel table displays the scaled image values +from the frame buffer. + + +


+

Freezing Cursor Readout

+

+Holding down the Alt key will now freeze the cursor display readout +and draw crosshairs on the screen at the last position. This can be used +for example to position the cursor but then allow the cursor to be moved to +another window (to enter text, start a program, whatever) without losing +the position information displayed on the screen. + + + +


+

Auto-Registration of Images

+

+The auto-register feature allows you specify a registration of two or +more display frames with an offset. When enabled, this registration is +maintained for all frames in the list if any one of them is panned or +zoomed to a new location in the frame buffer. +

+For example, to use this feature do the following: + +

    +
  • Enable Auto-Register (either on the Control Panel or the toolbar on the + alt-gui) and pan/zoom to some star of interest. +
  • Use Mouse-Button-2 to center the star in the frame. +
  • Cycle through the frames and you may see a small shift of the star. For + each frame, position the cursor on the star and type Ctrl-o to + offset it to the center. Repeat as necessary. Small corrections will be + cumulatively added so you can use the Ctrl-0 (Ctrl-zero) peak-up + command to centroid each object in the frame before the Ctrl-o + offset. +
  • Pan around the image in one display frame, then switch frames and the new + frame should also be panned to the new image with the proper offset. +
  • A Ctrl-a command will toggle the feature, offsets are only allowed + when autoreg is enabled. +
+ +Hitting Register will zero the offsets, as will toggling the +auto-register function. What you should see is the object centered in the +frame and as you blink through it remains registered but the panner box +marker is moving around. Drag the panner around and all frames still +remain registered with the given offset. The control/info panels now +display what the offset is for each frame. +

+The register display list is shared with the blink list and can be set +using the Display control panel. By default all frames are included in +the list. For accessing more than four frames, use the box icon in the +Blink/Register box of the Display control panel to bring up a new window +with access to all 16 available frames. + + +


+

Image Cut Graphics

+

+XImtool now has the ability to display horizontal and vertical +cut-graphs of the display, these appear as "flip-out" panels that appear +on the bottom and right side of the main display window and are controlled +by the small H and V buttons in the lower right corner of +the window. When both panels are enabled the corner area of the display +also shows an options panel for the graphs. Current options are: + +

+
Better Speed
+
Draw the graphics so they update at the fastest possible rate. + This is done by subsampling pixels to produce a smoother graph + but without sacrificing too much accuracy.
+
Better Accuracy
+
Draw the graphics using all screen pixels to produce the most + accurate display. On fast modern machines this can be enabled with + no apparent loss of speed, however older machines may wish to use + this only occassionally to limit any lag in the cursor tracking.
+
Image Pixels
+
(Not Yet Implemented)
+
Jump Cursor
+
If enabled, large jumps of the cursor do not update the graphics + display, small movements around an object of interest will update + the display continuously.
+
Smooth Cursor
+
If enabled, all cursor movements cause the display to be updated. + This is another option that can be set safely on faster machines + but will cause a delay on slower ones.
+
Graphics Cursors
+
If enabled, the graphics cursors in either of the plots are active + and can be used to update the cursor readout on the main image window + and the complementary cut-graph. This can be used for example to + freeze the cursor in the main display using the Alt key (see above), + then moving to one of the graphics windows to perform cut graphs in + only one axis.
+
+ +Graphs are (currently) drawn using only the scaled display values +to avoid complications of accessing multiple images in a mosaic display. Both +plots are labeled using the frame z1/z2 values and contain cursor indicators +which update contuously. + + +
+

Peak-Up Cursor Centroid Positioning

+

+Several new keystroke commands are available to reposition the +cursor to a centroid or min/max pixel value within a bounding box of the +cursor position, allowing you to approximate the position with the mouse +and fine tune it quickly before typing the application keystroke command. +The initial box size is controlled with a centerBoxSize GUI resource +(defaults to 5 pixels) but can be adjusted interactively using the +Ctrl-[ and Ctrl-] commands to descrease/increase the box +size respectively. A marker will flash briefly to indicate the box size. +

+The Ctrl-0 (zero) key finds either a centroid or the local maximum +pixel value within this box region, Alt-Ctrl-0 (zero) will find the +local minimum value. In either case the cursor is reposition to the computed +value. The default peak-up action is to find the centroid position in the +box however this can be changed to find the max pixel by selection the +"Centroid Peaks" option from the main Display +control panel or by resetting the peakCentroid GUI resource +(defaults to True). +

+Centroiding is done using only the scaled screen pixel values and +only pixels above the mean value within the box are used. It works best +if the box size is set appropriately, the centroid position may appear to +drift if the box is too large and includes too many background pixels. + + +


+

Integrated Control Panel

+ +

Display Panel

+XImtool has a control panel which can be used to exercise most of the +capabilities the program has for image display. The control panel can be +accessed either via the Options menu from the main window menubar, or +by +pressing the leftmost button in the row of buttons at the upper right side +of the display in the standard GUI (in the alternate GUI the +Control Bar accessed by the rightmost button on the menubar +provides widgets for selecting the desired control panel). +

+The separate windows previously used for Control/Print/Load/Save/etc +have now been integrated into a single window with the appropriate control +panel selectable with a Tab widget. There are also new Tab panels for +setting the frame tile configuration (see below), more detailed information +on the server status, and selecting the WCS readout options (see below). + +

View Controls

+

+The Frame box will list only the frame buffers you currently have +defined. Currently, the only way to destroy a frame buffer is to change the +frame buffer configuration, new frame buffers (up to 4) will be created +automatically if requested by the client. +

+The text display window gives the field X,Y center, X,Y scale +factors, and the X,Y zoom factors. The scale factor and the zoom factor +will be the same unless autoscale is enabled. The scale is in units of +display pixels per frame buffer pixel, and is an absolute measure (it doesn't +matter whether or not autoscale is enabled). Zoom is +relative to the autoscale factor, which is 1.0 if autoscaling is disabled. +This information is also presented in the Info panel. +

+The numbers in the Zoom box are zoom factors. Blue numbers zoom, +red numbers dezoom. Zoom In and Zoom Out may be used to go to +larger or smaller zoom factors, e.g. "Ctrl-5" followed by "Zoom In" will get you +to zoom factor 10. Specific zoom factors may also be accessed directly as +Control keystrokes, e.g. Ctrl-5 will set zoom factor 5. +Center centers the field. Toggle Zoom toggles between the +current zoom/center values, and the unzoomed image. +

+Aspect recomputes the view so that the aspect ratio is 1.0. +Aspect also integerizes the zoom factor (use the version in the View menu +if you don't want integerization). +

+Fit Frame makes the display window the same size as the frame +buffer. Note that autoscale has much the same effect, +and allows you to resize the display window to any size you want, or view +images to large to fit on the screen. + +

Enhancement Controls

+ +

+At the top is a scrolled list of all the available +colormaps. Click on the one you want to load it. You can add your own +colormaps to this list. +

+The two sliders adjust the contrast (upper slider) and +brightness (lower slider) of the display. The Invert button +inverts the colormap (multiples the contrast by -1.0). Note that due to the +use of the private colormap the sliders are a bit sluggish when dragged to +window the display. If this is annoying, using MB3 in the display window is +faster. +

+The Normalize button (on the bottom of the control panel) will +normalize the enhancement, i.e. set the contrast and brightness to the default +one-to-one values (1.0, 0.5). This is the preferred setting for many of the +pseudocolor colortables and for private colormaps loaded from disk images. + +

Blink Controls

+

+Blink frames is the list of frames to be blinked. When blink mode is +in effect ximtool just cycles through these frames endlessly, pausing +"blink rate" seconds between each frame. The same frame can be entered in +the list more than once. To program an arbitrary list of blink frames, +hit the Reset button and click on each blink frame button until it is set +to the desired frame number. The main control panel allows only the +original four frames to be specified in the blink list, however access to +the full list of 16 frames now supported is gained using the box icon +button next the the Reset button to bring up a new control panel. +

+The Blink Rate can be adjusted as slow or as fast as you want using +the arrow buttons. If you set the blink rate small enough it will go to +zero, enabling single step mode (see below). +

+The Register button registers all the blink frames with the current +display frame. Frames not in the blink list are not affected. +

+The Match LUTs button sets the enhancement of all blink frames to +the same values as the display frame. Frames not in the blink list are not +affected. +

+The Blink button turns blink on and off. When the blink rate is set +to zero the Blink button will single step through the blink frames, one +frame per button press. +

+NOTE: You can blink no matter what ximtool options are in effect, +but many of these will slow blink down. To get the fastest blink you may +want to turn off the panner and coords box, and match the LUTs of all the +blink frames. All the ximtool controls are fully active during blink +mode, plus you can load frames etc. + + +

Options:

+
+
Panner
+
Toggles the display of the Panner marker.
+
Magnifier
+
Toggles the display of the magnifier marker.
+
Coords Box
+
Toggles the display of the WCS Coords Box marker.
+
Autoscale
+
If autoscale is enabled then at zoom=1, the frame buffer will + be automatically scaled to fit within the display window. With + autoscale disabled (the default), the image scale is more + predictable, but the image may be clipped by the display window, + or may not fill the display window.
+
Antialias
+
When dezooming an image, i.e., displaying a large image in a + smaller display window, antialiasing causes all the data to be used + to compute the displayed image. If antialiasing is disabled then + image is subsampled to compute the displayed image. Antialiasing + can prevent subsampling from omitting image features that don't + fall in the sample grid, but it is significantly slower than + dezooming via subsampling. The default is no antialising.
+
Tile Frames
+
The default display mode is to view one frame at a time. In tile + frames mode, 2 or 4 frames may be viewed simultaneously in the + display window. All the usual operations (zoom and pan, colortable + enhancement, cursor readback, etc.) still work for each frame even + when in tile frames mode.
+
Warnings
+
The warnings options toggles whether you see warning dialog boxes + in situations like overwriting an existing file, clearing the frame + buffer, etc.
+
Centroid Peaks
+
If enabled, the Ctrl-0 keystroke will reposition the cursor + to the computed centroid of the centroiding box, otherwise the cursor + is repositioned to the local maximum value within the box.
+
+ +

Colormap Selection

+By default XImtool will display images using either a grayscale colormap +if loaded by a client, or a private colormap when loading an image from +disk that contains a colormap. Each frame defines its own colormap so +you can define different colormaps or enhancements for each frame, they +will change automatically as you cycle through the frames. + +

Builtin Colormaps

+Once loaded, the colormap may either be changed using the builtin colormap +menu under the View menu button on the main window, or from the +Enhancement box on the control panel. Ximtool has about a dozen colormap +options builtin, other user-defined colormaps may +optionally be loaded. + +

User-defined Colormaps

+The cmap[12] and cmapDir[12] resources (or command line +arguments are used to tell ximtool which specific colormaps to make +available or where to look for colortables respectively. The colortables +are loaded when ximtool starts up, or when it is reinitialized (e.g. by +pressing the Initialize button in the control +panel). Ximtool will ignore any files in the colormap directory +which do not look like colortables. New colortables will also be added +for each images loaded from disk. +

+The format of a user lookup table is very simple: each row defines one +colortable entry, and consists of three columns defining the red, green, +and blue values scaled to the range 0.0 (off) to 1.0 (full intensity). +

+        R G B
+        R G B
+        (etc.)
+
+Blank lines and comment lines (# ...) are ignored. +

+Usually 256 rows are provided, but the number may actually be anything in +the range 1 to 256. Ximtool will interpolate the table as necessary to +compute the colortable values used in Ximtool. Ximtool uses at most 201 +colors to render pixel data, so it is usually necessary to interpolate the +table when it is loaded. +

+The name of the colortable as it will appear in the Ximtool control panel +is the root name of the file, e.g., if the file is "rainbow.lut" the +colortable name will be "rainbow". Lower case names are suggested to avoid +name collisions with the builtin colortables. Private colormaps for disk +images will be have the same name as the image loaded. If the same colortable +file appears in multiple user colortable directories, the first one will be +used. +

+The directory "luts" in the ximtool source directory contains a sample set +of colortable files. This can be installed as /usr/local/lib/imtoolcmap +when ximtool is installed. + +


+

Load Panel

+The Load Panel allows you load images from disk directly to the frame +buffer, this is analogous to loading an image on the command line except +that browsing is possible. At present recognized formats include IRAF OIF +format (i.e. .imh extension), simple FITS files, GIF, and Sun +rasterfiles. The task will automatically sense the format of the image +and load it appropriately. Images with private colormaps (such as GIF) +will be loaded using the private colormap (meaning that changing the +brightness/contrast enhancements will render an apparently random-colored +image), all others will be loaded with a grayscale colormap. +

+When loading new images the frame buffer configuration table will be +searched for a frame buffer that is the same size or larger than the new +image size, if no frame buffer can be found a custom buffer exactly the +size of the image will be created. This means that the image may not fill +the display window when loaded, or you may see a subsection of the image +in the main display window. Setting the +autoscale option on the main +Display panel will scale the entire image to fit the main display window, +the full frame buffer will always be visible in the Panner marker window. +

+Images with more colors than can be displayed will automatically be +quantized to the number of available colors before display. If the +Auto Grayscale button is enabled any image colormap will be +converted to grayscale and loaded as the standard grayscale colormap. +

+Formats which permit pixels larger than 8-bits/pixel will be sampled on +a grid to determine an optimal range in the data to be used to compute a +linear transformation to the number of display colors. This is the same +z-scale sampling and transformation used by the IRAF DISPLAY task +when computing the z1/z2 values and provides a much better initial +display than simple truncation to 8-bits. This scaling will be done +automatically using a grid of Nsample points if the Zscale +option is enabled. Otherwise, if the Zrange option is set the full +data range will be used to scale the image. Lastly, is neither Zscale +nor Zrange are enabled, the z1/z2 values may be set explicitly using +the options box. + +

Directory Browsing

+The load panel contains a list of files in the current directory that may +be selected for loading by selecting with left mouse button. If the file +is a directory the contents of the new directory will be loaded, if it's a +plain file an attempt will be made to load it as an image otherwise an +error popup will appear. Directories in the list are identified with a +trailing '/' character, you will always see any subdirectories listed even +if a filter is specified. +

+The Root button will reset the current directory to the system root +directory. The Home button will reset the current directory to the +user's login directory, the Up button moves up one directory level, and +Rescan reloads the file list by rescanning the directory. The current +working directory is given below the file selection window. +

+Selecting the List Image Headers option will change the display text +to list all images in the current directory which match the filename filter. +Directory browsing is disabled while this option is in effect. + +

File Patterns

+By default all files and directories will be listed. You may specify a +filter to select only those files with a given extension such as +"*.fits" using the Filter text box. Directories will +always be seen in the list and are identified with a trailing '/' +character. Any valid unix pattern matching string will be recognized, +multiple templates may be specified in a comma-delimited list such as +"*.imh,*.fits" to list both OIF and FITS images. + +

Direct File Load

+If you know exactly which file you wish to load, you may enter its +name in the Load File text box and either hit <cr> or the +Load button to load it. An absolute or relative path name may +be given, if a simple filename is specified it will be searched for in +the current working directory which is displayed in the Directory +label of the panel. + +

Frame Selections

+By default images will be loaded into the current frame, you may choose +a different frame using the Frame menu button to select from the +available frames. + + +
+

Save Panel

+The Save Panel lets you save the current contents of the main display window +to a disk file (including the Panner/Coords markers, any general graphics +markers, or overlay graphics displayed by the client program). Presently, +only the contents of the main display window may be saved, there is no +facility for saving the undisplayed contents of the entire frame buffer +other than to enable the autoscale feature. A limited +number of formats are currently available, others will be added in future +versions. + +
+
File Name
+
The File Name text box allows you to enter the file name of + the saved file. A "%d" anywhere in the name will be replaced by a + sequence number allowing multiple frames to be saved with unique + names.
+
Format
+
The Format box allows you to choose the format of the image + to be created. Not all formats are currently implemented. The EPS + format is similar to the \fIPrint\fR option however there is no + annotation.
+
Color
+
The Color box lets you choose the color type of the image + to be created. The options will change depending on the format, + e.g. FITS doesn't allow color so no color options will be allowed. + Formats which allow 24-bit images will be written using the current + colormap after converting to a 24-bit image, pseudocolor images will + be written with the current colormap.
+
+
+ +

Print Panel

+The Print Panel allows you dump the contents of the main display window as +Enacpsulated Postscript to either a named printer device or to a disk file. +The Print To selects the type of output, the Print Command +box will adjust accordingly, either as a Unix printer command or as a file +name. A "%d" anywhere in the name for disk output will be replaced by a +sequence number allowing multiple frames to be saved with unique names. +Selecting printers from the installed list will +automatically change the command to be used to generate the output. This +command does not necessarily need to be a printer command, the +printer configuration file lets you define any command +string to process the image. + +

Color Options

+The Color box lets you choose the color type of the image to be created. +PseudoColor or 24-bit postscript will be created using the current colormap. + +

Postscript Options

+
+
Orientation
+
Set the page orientation.
+
Paper Size
+
Select the paper size to be used.
+
Image Scale
+
Set the scale factor used to compute the final image size.
+
+ +

Processing Options

+
+
Auto Scale
+
The auto scale toggles whether or not the image is automatically + scaled to fit the page. If not enabled, the image scale will + be used to dtermine the output image size.
+
Auto Rotate
+
Auto rotate determines whether or not the image will be rotated to + fit on the page. When set, an image larger than the current + orientation will be rotated and possibly scaled to fit the page.
+
Max Aspect
+
Max Aspect takes images smaller than the page and automatically + increases the scale so the image fills the page in the current + orientation.
+
Annotate
+
The annotate option toggles whether or not the final file includes + annotation such as the image title, a colorbar, and axis labels.
+
+

Printer selection

+The printer selection list lets choose the printer to be used. The printer +configuration file is /usr/local/lib/ximprint.cfg by default or may be reset +using the printConfig resource. The format of the file is simply +
+	name < tab > command
+
+The name value is what appears in the selection list and may be more +than a single word, the command can be any command that accepts EPS +input from a pipe, the two fields must be separated by a tab character. +Normally the command will be +a simple 'lpr -Pfoo' or some such, but can also include converters or +previewers. At most 128 printer commands may be used. + +
+

Info Panel

+The Info panel was revised to provide a greater variety of status +information. The type of output is controlled by the toggle buttons on +the bottom of the frame, however all output is kept current as the program +runs. Current info options include: + +
+
Frame
+
Info about the current display frame.
+
Server
+
Info about various server options, e.g. colormaps, memory model, + antialias type, etc.
+
Clients
+
Show currently connected clients. Lists available connection + channels and active ISM clients.
+
WCS
+
List all WCS and mappings for the current frame.
+
ISM
+
Log of various ISM status messages.
+
Imtoolrc
+
Show current frame buffer configuration table.
+
+ + +
+

Tile Panel (NEW)

+With the additional frames, the default tiling scheme proved inadequate. +A new control panel Tile frame now allows you to select from a number of +tile configurations, the list of frames to be tiled, a fill style +(left-to-right or top-to-bottom), as well as optional labels for each of +the tiles (frame number, image title or image name). +

+Tile configuration will make use of all frames currently selected in the +Tile Frame group in the following manner: + +

+
Disabled
+
Do not tile the display.
+
Manual
+
Tile according to Manual Configuration settings.
+
Best
+
Optimize layout for frame buffer aspect.
+
Square
+
Always force a square layout (2x2, 3x3, etc).
+
Horizontal
+
Preferentially tile horizontally (6 frames ==> 3x2).
+
Vertical
+
Preferentially tile vertically (6 frames ==> 2x3).
+
One Row
+
Tile all in one row (Nx1).
+
One Column
+
Tile all in one column (1xN).
+
+ + +
+

Coords Panel (NEW)

+The Coords Panel is meant to provide a full-featured readout as well as +serve as a control panel for the various options. The display window +contains the image name/title and frame buffer info, and a selection of +coordinate and image pixel readouts. The intent is provide more infor- +mation than can fit comfortably on the main image window while still +taking up as little screen space as possible. To this end the Options +button is used to hide most of the feature controls when not in use +(see below). Other options on the main panel include: + +
+
WCS/Pix
+
Toggle the real-time WCS/pixel readout capability (i.e. the ISM + used to access the disk image). This must be enabled for certain + other options to work.
+ +
Pix Table
+
Open a panel showing an image pixel table. The panel shows an array + of pixels surrounding the cursor position, either the actual pixel + values if the ISM is enabled, or scaled display values otherwise. + The size of the table may be selected from the menubar.
+ +
Header
+
Display the current image header in a new panel. Both the entire + image header as well as WCS-specific parts of the header are + available under different tabs. This option is only active when + the ISM is enabled.
+ +
Compass
+
Draw an orientation compass on the display panner. If the ISM is + enabled and a WCS is present in the header, the compass will + indicate N/E according to the WCS, otherwise the X/Y axes of the + image are drawn.
+ +
Options
+
Pop-up/down the option control portion of the panel. When enabled, + the Coords Panel will change size to reveal the options which can be + changed (explained below).
+
+ +The Readout Values group controls the selection of WCS type, +location and format to be displayed. The Type menu always +provides a selection of the image Logical, Physical or World systems, +which may be identical depending on the image header. If a World system +is supplied in the image addition entries for transformations to other sky +systems, (e.g. FK5 to ICRS or galactic/ecliptic) will also be available. +The selection is dependent on whether the ISM is running as well as WCS +information present in the image. The Format menu allows the +use to select a sexigesimal display, conversion to degrees or radians, +or whichever format is most natural for the coordinate being display. +The two toggle to the right control whether this WCS is to be displayed +on the Panel (i.e. the Coords Panel window) or the ImgWin +(i.e. the text marker on the main image window). +

+Other options below this group control whether or not to display the WCS +labels, the image name/title, and frame buffer information in the main +Coords Panel display. The BPM Data option controls whether or not the +ISM will try to map any bad-pixel mask associated with the image. If +enabled, a bad-pixel mask specified by the image header BPM keyword +(currently fixed by convention but this may be selectable later) will be +mapped along with the image. Aside from wcs/pixel readouts at each cursor +position, any BPM data values found will also be displayed. A non-zero +value will cause the BPM field of the Coords Panel readout as well as the +main image window marker to switch to a red background color to flag the +value. +

+The last box allows the user to specify a different ISM task to be +executed or to reinitialize the current one. In most cases this won't +need to be changed, however a custom ISM could be started when using +special data formats. This command string can also be controlled by the +application ism_task resource. + + +


+

Tcl Interactive Shell

+ The TclShell is mostly used as a development or debugging +tool for the GUI. It allows the user to type commands directly to the +TCL interpreter letting you send messages to the object manager or execute +specific procedures in the TCL code that makes up the GUI. Most users will +never need this, but for an example of what it does, bring it up and type a +command such as +
+    send helpButton set background red
+
+Cool, huh. +
+ +

Acknowledgements

+ XImtool was developed by the IRAF Group at the National Optical +Astronomy Observatories in Tucson, AZ. For further information or to report +problems please contact iraf@noao.edu +
+This document was last updated 11/6/96. + + + diff --git a/vendor/x11iraf/ximtool/ximtool.html.h b/vendor/x11iraf/ximtool/ximtool.html.h new file mode 100644 index 00000000..539441cf --- /dev/null +++ b/vendor/x11iraf/ximtool/ximtool.html.h @@ -0,0 +1,1219 @@ +" ", +"XImtool On-Line Help Summary", +" ", +"

Welcome to XImtool V2.0BETA

", +"", +"XImtool is an image display server developed by the IRAF Project at the", +"National Optical Astronomy Observatories. To view images you need", +"client software (such as IRAF) to load images into the display, or it can", +"load images directly when run as a standalone task.", +"

", +"More detailed help is available on the following topics:", +"

", +"
Basic Usage:
", +"
", +"
", +"
Advanced Features:
", +"
", +"

", +"Please contact iraf@noao.edu with comments, bugs, or suggestions.", +"More detailed documentation is also available in the man page for this", +"task.", +"

", +"


", +"", +"

Table of Contents:

", +"
",
+"        Getting Started",
+"        GUI Overview",
+"        Mouse Operations",
+"        Keystroke Accelerators",
+"        Command-line Options",
+"        Client Connections",
+"	Frame Buffers",
+"            Support for 16 Frames",
+"        Markers",
+"            Panner Marker",
+"            Magnifier Marker",
+"            Coords Box Marker",
+"            Ruler Markers",
+"            General Markers",
+"                Menu Options",
+"        Real-Time WCS/Pixel Readout",
+"        Freezing Cursor Readout",
+"        Auto-Registration of Images",
+"        Image Cut Graphics",
+"        Peak-Up Cursor Centroid Positioning",
+"",
+"        Integrated Control Panel",
+"          Display Panel",
+"            View Controls",
+"            Enhancement Controls",
+"            Blink Controls",
+"            Options:",
+"              Panner",
+"              Magnifier",
+"              Coords Box",
+"              Autoscale",
+"              Antialias",
+"              Tile Frames",
+"              Warnings",
+"              Centroid Peaks",
+"	    Colormap Selection",
+"              Builtin Colormaps",
+"              User-defined Colormaps",
+"          Load Panel",
+"            Directory browsing",
+"            File Patterns",
+"            Direct File Load",
+"            Frame Selections",
+"          Save Panel",
+"            File Name",
+"            Format",
+"            Color",
+"          Print Panel",
+"            Postscript Options",
+"            Color Options",
+"            Processing Options",
+"            Printer selection",
+"          Info Panel",
+"          Tile Panel",
+"          Coords Panel",
+"",
+"        Tcl Interactie Shell",
+"
", +"

", +"


", +"

Getting Started

", +"As a display server, XImtool is started as a separate process from client", +"software such as IRAF. Once it is running it will accept ", +"client connections simultaneously on fifo pipes, unix", +"domain sockets, or inet sockets. A display client like the IRAF DISPLAY", +"task makes a connection and sends the image across using an IIS protocol", +"(other/different protocols may be supported in the future). Once the image", +"is loaded in the display buffer it may be enhanced,", +"saved to a disk file in a number of different formats, or ", +"printed as Encapsulated Postscript to a printer or disk file.", +"

", +"When run in standalone mode, images may be loaded on the ", +"command line or by using the Load Panel.", +"This allows you to browse images and perform the same manipulations as if", +"they had been displayed by a client.", +"


", +"", +"

GUI Overview

", +"

", +"The GUI consists of a large image display window and a number of smaller", +"pannels that control various specific functions such as image", +"Load, Save and Print", +"as well as a general purpose Control Panel. The main", +"window menubar has several menu buttons to the left: the Files menu", +"is used to load/save/print an image as well as quit the task. The View", +"menu let's you select the image orientation, zoom, colormap or frame. The", +"Options menu allows you to call up control panels, toggle markers", +"or blinking etc. Some of this functionality is duplicated elsewhere in", +"the GUI. The right side of the menubar contains command buttons to flip the", +"image as well as buttons for frame selection and the help button.", +"

", +"For more detailed information on the operation of the control panels please", +"see the on-line help (i.e. use the '?' button or Alt-h keystroke in the", +"main image window).", +"", +"

Mouse Operations

", +"Clicking and dragging MB1 (mouse button 1) in the main image", +"window creates a rectangular region marker, used", +"to select a region of the image. If you do this accidentally and don't", +"want the marker, put the pointer in the marker and type DELETE or", +"BACKSPACE to delete the marker. With the pointer in the marker,", +"MB3 will call up a marker menu listing some things", +" you can do with the marker, like zoom the outlined region. MB1 can be used", +"to drag or resize the marker. See below for more", +"information on markers.", +"

", +"Clicking on MB2 in the main image window pans (one click) or zooms (two ", +"clicks) the image. Further clicks cycle through the builtin zoom factors. ", +"Moving the pointer to a new location and clicking moves the feature under ", +"the pointer to the center of the display window. Holding down the Shift", +"key while clicking MB2 will cause a full-screen crosshair cursor to appear", +"until the button is released, this can be useful for fine positioning of the", +"cursor.", +"

", +"MB3 is used to adjust the contrast and brightness of the displayed image.", +"The position of the pointer within the display window determines the ", +"contrast and brightness values. Click once to set the values corresponding", +"to the pointer location, or click and drag to continuously adjust the display.", +"


", +"", +"

Keystroke Accelerators

", +" The following keystrokes are currently defined in the GUI:", +"
",
+"                        Misc Functions                      ",
+"    Ctrl-b 		Previous (back) frame",
+"    Ctrl-c 		Center frame",
+"    Ctrl-f 		Forward frame",
+"    Ctrl-i 		Invert colormap",
+"    Ctrl-m 		Toggle magnifier",
+"    Ctrl-n 		Normalize",
+"    Ctrl-p 		Toggle panner",
+"    Ctrl-r 		Register",
+"    Ctrl-s 		Match LUT scaling",
+"    Ctrl-t 		Tile frames toggle",
+"    Ctrl-u 		Unzoom (zoom=1)",
+"    Ctrl-x 		Flip X",
+"    Ctrl-y 		Flip Y",
+"    ",
+"    Ctrl-= 		Print using current setup",
+"    Ctrl-< 		Decrease blink rate (blink faster)",
+"    Ctrl-> 		Increase blink rate (blink slower)",
+"    Ctrl-+ 		Zoom in",
+"    Ctrl-- 		Zoom out",
+"    ",
+"    Alt-1 thru Alt-4    Set frame to be displayed",
+"    Ctrl-1 thru Ctrl9   Set integer zoom factor",
+"    ",
+"    Ctrl-Alt-q 		Quit",
+"    Ctrl-Alt-f 		Fitframe",
+"    ",
+"                        Panel Toggles                      ",
+"    Alt-b 		Blink frames",
+"    Alt-c 		Control panel",
+"    Alt-h 		Help popup",
+"    Alt-i 		Info box popup",
+"    Alt-l 		Load file popup",
+"    Alt-p 		Print popup",
+"    Alt-s 		Save popup",
+"    Alt-t 		TclShell popup",
+"    ",
+"                        Cursor Positioning                   ",
+"    Ctrl-h / Ctrl-Left  Move cursor one pixel left",
+"    Ctrl-j / Ctrl-Down  Move cursor one pixel down",
+"    Ctrl-k / Ctrl-Up    Move cursor one pixel up",
+"    Ctrl-l / Ctrl-Right Move cursor one pixel right",
+"    ",
+"    Shift-Ctrl-h 	Move cursor ten pixels left",
+"    Shift-Ctrl-Left     Move cursor ten pixels left",
+"    Shift-Ctrl-j 	Move cursor ten pixels down",
+"    Shift-Ctrl-Down     Move cursor ten pixels down",
+"    Shift-Ctrl-k        Move cursor ten pixels up",
+"    Shift-Ctrl-Up       Move cursor ten pixels up",
+"    Shift-Ctrl-l  	Move cursor ten pixels right",
+"    Shift-Ctrl-Right    Move cursor ten pixels right",
+"    ",
+"                        Auto-Registration                    ",
+"    Ctrl-a 		Toggle auto-registration",
+"    Ctrl-o 		Set frame offset",
+"    ",
+"                        Frame Positioning                   ",
+"    Ctrl-Left  		Shift one full frame left",
+"    Ctrl-Down  		Shift one full frame down",
+"    Ctrl-Up    		Shift one full frame up",
+"    Ctrl-Right 		Shift one full frame right",
+"    ",
+"    Ctrl-Alt-Left  	Shift one half frame left",
+"    Ctrl-Alt-Down  	Shift one half frame down",
+"    Ctrl-Alt-Up    	Shift one half frame up",
+"    Ctrl-Alt-Right 	Shift one half frame right",
+"    ",
+"                        Peak Up Centroiding                  ",
+"    Ctrl-[ 		Decrease centroiding box size",
+"    Ctrl-] 		Increase centroiding box size",
+"    Ctrl-0 (zero) 	Centroid/find local maximum",
+"    Alt-Ctrl-0 (zero)   Find local minimum",
+"    ",
+"                        Mouse Button Events                   ",
+"    Shift-Btn1Down 	Turn on magnifier",
+"    Shift-Btn1Up 	Turn off magnifier",
+"    Shift-Btn2Down 	Turn on crosshair cursor",
+"    Shift-Btn2Up 	Turn off crosshair cursor",
+"    ",
+"    Btn1Down 		Create a Marker",
+"    Btn1Motion 		Resize marker being created",
+"    Btn2Down 		Zoom/center on cursor position",
+"    Btn3Down/Motion     Brightness/contrast scale the image",
+"    ",
+"    Ctrl-Btn1Down 	Create Ruler Marker",
+"    Ctrl-Btn1Motion     Resize Ruler Marker being created",
+"    Ctrl-Btn1Up 	Destroy Ruler Marker",
+"    ",
+"    Alt-Motion 		Freeze cursor readout",
+"
", +"
", +"", +"

Client Connections

", +"Ximtool allows clients to connect in any of the following ways:", +"", +"
", +"
fifo pipes
", +"
The traditional approach. The default, global /dev/imt1[io] pipes may ", +" be used, or a private set of fifos.
", +"
tcp/ip socket
", +"
Clients connect via a tcp/ip socket. There is a default port, or", +" a custom port may be specified. This permits connecting to the", +" server over a remote network connection anywhere on the Internet.
", +"
unix domain socket
", +"
Like a tcp/ip socket, but limited to a single host system. Usually ", +" faster than a tcp/ip socket, and comparable to a fifo. By default", +" each user gets their own unix domain socket, so this option allows", +" multiple users to run ximtools on the same host without having to", +" customize things.
", +"
", +"", +"By default ximtool listens simultaneously for client connctions on all three", +"types of ports. Clients communicate with XImtool using the IIS protocol,", +"other protocols may be supported in the future.", +"
", +"", +"

Frame Buffers

", +"XImtool starts up using default frame buffer size of 512x512 pixels, two", +"(of 16 possible) frames will be created. When loading disk images (i.e.", +"run in standalone mode) the frame buffer configuration file will be", +"searched for a defined frame buffer that is the same size or larger than", +"the current image, if no suitable buffer can be found a custom frame", +"buffer the same size as the image will be created in an unused portion of", +"the configuration table. When used as a display server the frame buffer", +"configuration number is passed in by the client and loaded explicitly even", +"if it means clipping the image. If a new frame buffer is a different size", +"than previously defined frames, all available frames will be initialized", +"and cleared prior to the display. The default frame buffer configuration", +"file is /usr/local/lib/imtoolrc, this can be overridden by defining a", +"IMTOOLRC environment variable naming the file to be used, by creating a", +".imtoolrc file in your home directory, or a new file may be specified", +"using the -imtoolrc command line flag or imtoolrc application", +"resource.", +"

", +"The format of the frame buffer configuration file is", +"

",
+"   configno nframes width height [extra fields]",
+"",
+"e.g.                   ",
+"	1  2  512  512",
+"	2  2  800  800",
+"	3  1 1024 1024          # comment",
+"
", +"At most 128 frame buffer sizes may be defined, each configuration may", +"define up to 16 frames, configuration numbers need not be sequential.", +"", +"

Support for 16 Display Frames

", +"

", +"As part of the extensive GUI changes with the V1.3 release, support for", +"the full 16 frames allowed by the IIS protocol is now available. IRAF", +"V2.11.4 or later client tasks (and CDL library) are required to take", +"advantage of this frames. All changes are backwards compatible, older", +"versions of IRAF will continue to work but cannot access more than the", +"original four frames. The new DISPLAY task will automatically sense", +"whether the display server being used supports 16 frames or the original 4", +"and adjust the 'frame' parameter maximum accordingly. The changes are", +"fully backwards compatible for other servers.", +"

", +"More frames are possible if needed but will require further changes to the", +"client IRAF code to be effective. Allowing creation of more than 16", +"frames by the Load panel can be done independently but would also require", +"numerous code change to XImtool. Please contact site support if there is", +"a need for this, or for workaround suggestions depending on your", +"application.", +"", +"", +"

Command-line Options

", +" The following command-line options are currently recognized:", +"
",
+"  -basePixel <num>         Base colormap pixel number",
+"  -cmap1 <file>            User cmap 1 ",
+"  -cmap2 <file>            User cmap 2 ",
+"  -cmapDir1 <dir>          User cmapDir 1 ",
+"  -cmapDir1 <dir>          User cmapDir 2 ",
+"  -cmapInitialize <bool>   Initialize colormap at startup",
+"  -cmapName <name>         Private colormap name ",
+"  -config <num>            Initial config number",
+"  -defgui                  Print default GUI to stdout",
+"  -displayPanner <bool>    Display panner box",
+"  -displayCoords <bool>    Display wcs coords box",
+"  -fifo <pipe>             Fifo pipe to use",
+"  -fifo_only               Use fifo pipes only ",
+"  -gui <file>              GUI file to use ",
+"  -help                    Print command-line summary ",
+"  -imtoolrc <file>         Frame buffer configuration file ",
+"  -inet_only               Use inet sockets only ",
+"  -invert                  Invert colormap on startup?",
+"  -ismdev                  ISM socket template",
+"  -maxColors <num>         Number of colors ",
+"  -memModel <type>         Memory model (fast,small,beNiceToServer)",
+"  -nframes <num>           Number of frames at startup",
+"  -port <num>              Inet port to use",
+"  -printConfig <file>      Printer configuration file ",
+"  -port_only               Use inet sockets only ",
+"  -tile                    Tile frames on startup?",
+"  -unix <name>             Unix socket to use",
+"  -unix_only               Use unix sockets only ",
+"  <file>                   File to load on startup",
+"
", +"
", +"

Markers

", +"

Panner Marker

", +"

", +"The panner window always displays the full frame buffer. Try setting the", +"frame buffer configuration to a nonsquare frame buffer (e.g. imtcryo) and", +"then displaying a square image (e.g. dev$pix) and the panner will show you", +"exactly where the image has been loaded into the frame.", +"

", +"The panner window uses two markers, one for the window border and one to", +"mark the displayed region of the frame. Most of the usual marker keystrokes", +"mentioned below apply to these markers as well, e.g. ", +"you can use MB1 to reposition on the panner window within the main image ", +"display window, or to drag the region marker within the panner (pan the ", +"image). Resizing the region marker zooms the image; this is a non-aspect ", +"constrained zoom. The panner window itself can be resized by dragging a ", +"corner with MB1. Typing delete or backspace anywhere in the panner window ", +"deletes the panner.", +"

", +"A special case is MB2. Hitting MB2 anywhere in the panner window pans the", +"image to that point. This is analogous to typing MB2 in the main display", +"window to pan the image.", +"

", +"The panner marker can be disabled by defining the displayPanner", +"GUI resource, its size and location can be controlled using the", +"pannerArea and pannerGeom GUI resources respectively.", +"", +"

Magnifier Marker

", +"The magnifier marker can be used to zoom in on a small area around the cursor.", +"It will be updated as the cursor moves but only for small motions (either", +"mouse movement or with the cursor movement keystrokes) to minimize the", +"impact on the system. The zoom factor is expressed as some fraction of the", +"size of the magnifier marker itself. The default zoom is 4, i.e. the area", +"in the marker represents and area in the image that's one-fourth the size", +"of the marker. Other zoom factors may be selected using the popup menu ", +"created by hitting MB1 in the marker.", +"

", +"By default the magnifier marker is not visible, to toggle it select the", +"Magnifier option from the Options menubar button. Alternatively,", +"for just a quick look holding down the Shift Key and MB2 Button will display", +"the marker until the button is released.", +"

", +"The magnifier marker can be disabled by defining the displayMagnifier", +"GUI resource, its size and location can be controlled using the", +"magnifierAreaand magnifierGeom GUI resources respectively.", +"", +"

Coords Box Marker

", +"

", +"Ximtool provides a limited notion of world coordinates, allowing frame", +"buffer pixel coordinates and pixel values to be converted to some arbitrary", +"client defined coordinate system. The coords box feature is used to display", +"these world coordinates as the pointer is moved about in the image window.", +"

", +"The quantities displayed in the coords box are X, Y, and Z: the X,Y world", +"coordinates of the pointer, and Z, the world equivalent of the pixel value", +"under the pointer. All coordinate systems are linear. The precision of a", +"displayed quantity is limited by the range of values of the associated raw", +"frame buffer value. For example, if the display window is 512x512 only 512", +"coordinate values are possible in either axis (the positional precision can", +"be increased however by zooming the image). More seriously, at most about", +"200 pixel values can be displayed since this is the limit on the range of", +"pixel values loaded into the frame buffer. If a display pixel is saturated", +"a \"+\" will be displayed after the intensity value.", +"

", +"The coords box is a marker (text marker) and it can be moved and resized", +"with the pointer like any other marker.", +"", +"

Ruler Markers

", +"

", +"Holding down the Ctrl key and the Left-Mouse-Button while moving", +"the mouse will drag out a \"ruler marker\" measuring the distance from the", +"initial point to the current mouse position. Releasing the Ctrl key before", +"lifting the mouse button will leave the marker on the display, otherwise", +"it will be erased automatically once the mouse button is released. Any", +"number of ruler markers can be created in the frame.", +"

", +"Distances are measured by default in image logical pixels however", +"the Right-Mouse-Button can be used inside the marker to popup a menu of", +"options:", +"", +"

", +"
Sticky
", +"
By default rulers are destroyed whenever the display changes due", +" to a pan, zoom, flip, or frame change. This option will make the", +" ruler \"sticky\" so it will not be erased, subsequent use of the menu", +" to shows this option to be \"UnSticky\" to remove this feature.
", +"
Units
", +"
Sub-menu to select the units of the display. If the ISM is enabled", +" and a WCS is present in the image and selected as one of the readout", +" options, distances may also be read out in units of arcseconds,", +" arcminutes, or degrees instead of the default logical pixels. All", +" markers created after the unit change will readout in the new units", +" as their default.
", +"
Color
", +"
Select the color of the marker.
", +"
Draw into Frame
", +"
(Not Yet Implemented) Draw the marker as overlay graphics", +" in the frame. Doing so will retain the marker when printing a", +" hardcopy of the display.
", +"
Destroy
", +"
Destroy the marker.
", +"
", +"", +"

", +"The marker can also be destroyed by hitting the Delete or Backspace key", +"while the cursor is in the marker. There is presently no way to move the", +"marker to a new position in the frame.", +"", +"", +"

General Markers

", +"Although ximtool doesn't do much with markers currently, they are a general", +"feature of the Gterm widget and are used more extensively in other programs", +"(e.g. the prototype IRAF science GUI applications). Ximtool uses markers", +"for the marker zoom feature discussed above, and also for the ", +"panner and the coords box. All ", +"markers share some of the same characteristics, so it is worthwhile learning", +"basic marker manipulation keystrokes.", +"", +"
    ", +"
  • MB1 anywhere inside a marker may be used to drag the marker.", +"
  • MB1 near a marker corner or edge, depending on the type of marker,", +" resizes the marker.", +"
  • Shift-MB1 on the corner of most markers will rotate the marker.", +"
  • Markers stack, if you have several markers and you put one on top", +" of the other. The active marker is highlighted to tell you which of the ", +" stacked markers is active. If the markers overlap, this will be marker ", +" \"on top\" in the stacking order.", +"
  • MB2 in the body of a marker \"lowers\" the marker, i.e. moves it to", +" the bottom of the stacking order.", +"
  • Delete or backspace in a marker deletes it.", +"
  • Markers have their own translation resources and so the default", +" keystroke commands will not be recognized when the", +" cursor is in a marker.", +"
", +"", +"For example, try placing the pointer anywhere in the coords box, then press", +"MB1 and hold it down, and drag the coords box marker somewhere else on the", +"screen. You can also resize the coords box by dragging a corner, or delete", +"it with the delete or backspace key. (The Initialize button will get", +"the original coords box back if you delete it).", +"

", +"

Marker Menu Options

", +"
    ", +"
  • MB3 (mouse button 3) calls up the marker menu (by default).", +"
  • Zoom does an equal aspect zoom of the region outlined by the marker.", +" In this way you can mark a region of the image and zoom it up.", +"
  • Fill exactly zooms the area outlined by the marker, making it fill", +" the display window. Since the marker is not likely to be exactly square, ", +" the aspect ratio of the resultant image will not be unitary.", +"
  • Print prints the region outlined by the marker to the printer or", +" file currently configured by the Print Panel.", +"
  • Save saves the region outlined by the marker to the file currently", +" configured by the Save Panel.", +"
  • Info prints a description of the marked region. The text is ", +" printed in the Info Panel.", +"
  • Unrotate unrotates a rotated marker.", +"
  • Color is a menu of possible marker colors.", +"
  • Type is a menu of possible marker types. This is still a little", +" buggy and it isn't very useful, but you can use it to play with different ", +" types of markers.", +"
  • Destroy destroys the marker. You can also hit the delete or ", +" backspace key in a marker to destroy the marker.", +"
", +"", +"
", +"

Real-Time WCS/Pixel Readout

", +"XImtool now has the ability to display the actual pixel value of an image", +"(as well as the scaled value previously shown) and the cursor position in", +"image WCS values (e.g. RA/DEC, GLAT/GLONG, etc). This is done using an", +"external task (the 'ism_wcspix.e' binary in the new distribution) to", +"access the image and pass the coordinate/pixel information to the GUI.", +"

", +"WCS readout is enabled by default but can be toggled or reset using the", +"WCS/Pix button on the Coords tab in the control panel or the ISM", +"toggle on the alt-gui menubar. When enabled, images currently in the", +"server or subsequently displayed will be passed to the external process", +"where they are cached for access. Cursor movements generate an event that", +"maps the current frame buffer position to a position in the cached image.", +"The ISM (ISM is Image Support Module) task then reads the image to", +"determine the pixel value (or a small table of values around the current", +"position), and computes one or more coordinates from the image position.", +"The ISM task also has access to the associated BPM images and can", +"optionally return bad pixel information during the cursor readout.", +"

", +"By default, the logical and world image coordinates are displayed to both", +"the Coords panel readout as well as the main display window wcsbox text", +"marker. Alternate coordinate systems (e.g. transformation of equatorial", +"to galactic coordinates or some other sky system, physical coords,", +"amplifier coords, etc) can be selected for display by hitting the", +"Options toggle on the Coords panel. Available coordinate systems are", +"chosen using the Type menu on the panel, the readout format", +"(sexigesimal, degrees, etc) using the Format menu, and the display to", +"the current panel or main image window using the remaining toggles for", +"each WCS. Up to four systems may be displayed at one time, the coordinate", +"panel and wcsbox marker will adjust size automatically depending on the", +"display.", +"

", +"By selecting the BPM Data toggle from the Coords.Options panel ximtool", +"is able to flag pixels in images with an associated bad pixel mask. This", +"bad pixel mask is currently assumed to be named in the image header \"BPM\"", +"keyword by convention. If the cursor passes over a bad pixel in the mask,", +"the Coords bpm display as well as the main window wcsbox will change to a", +"red background color. Only the Coords display will show the value, any", +"non-zero value will be flagged with the color change.", +"

", +"With the ISM enabled the Compass indicator will display a set of arrows", +"showing North-East if a WCS is available, otherwise just the current X-Y", +"axes are shown. The pixel table will display actual pixel values from the", +"image, with the ISM off the pixel table displays the scaled image values", +"from the frame buffer.", +"", +"", +"


", +"

Freezing Cursor Readout

", +"

", +"Holding down the Alt key will now freeze the cursor display readout", +"and draw crosshairs on the screen at the last position. This can be used", +"for example to position the cursor but then allow the cursor to be moved to", +"another window (to enter text, start a program, whatever) without losing", +"the position information displayed on the screen.", +"", +"", +"", +"


", +"

Auto-Registration of Images

", +"

", +"The auto-register feature allows you specify a registration of two or", +"more display frames with an offset. When enabled, this registration is", +"maintained for all frames in the list if any one of them is panned or", +"zoomed to a new location in the frame buffer.", +"

", +"For example, to use this feature do the following:", +"", +"

    ", +"
  • Enable Auto-Register (either on the Control Panel or the toolbar on the", +" alt-gui) and pan/zoom to some star of interest.", +"
  • Use Mouse-Button-2 to center the star in the frame.", +"
  • Cycle through the frames and you may see a small shift of the star. For", +" each frame, position the cursor on the star and type Ctrl-o to", +" offset it to the center. Repeat as necessary. Small corrections will be", +" cumulatively added so you can use the Ctrl-0 (Ctrl-zero) peak-up", +" command to centroid each object in the frame before the Ctrl-o", +" offset.", +"
  • Pan around the image in one display frame, then switch frames and the new", +" frame should also be panned to the new image with the proper offset.", +"
  • A Ctrl-a command will toggle the feature, offsets are only allowed", +" when autoreg is enabled.", +"
", +"", +"Hitting Register will zero the offsets, as will toggling the", +"auto-register function. What you should see is the object centered in the", +"frame and as you blink through it remains registered but the panner box", +"marker is moving around. Drag the panner around and all frames still", +"remain registered with the given offset. The control/info panels now", +"display what the offset is for each frame.", +"

", +"The register display list is shared with the blink list and can be set", +"using the Display control panel. By default all frames are included in", +"the list. For accessing more than four frames, use the box icon in the", +"Blink/Register box of the Display control panel to bring up a new window", +"with access to all 16 available frames.", +"", +"", +"


", +"

Image Cut Graphics

", +"

", +"XImtool now has the ability to display horizontal and vertical", +"cut-graphs of the display, these appear as \"flip-out\" panels that appear", +"on the bottom and right side of the main display window and are controlled", +"by the small H and V buttons in the lower right corner of", +"the window. When both panels are enabled the corner area of the display", +"also shows an options panel for the graphs. Current options are:", +"", +"

", +"
Better Speed
", +"
Draw the graphics so they update at the fastest possible rate.", +" This is done by subsampling pixels to produce a smoother graph", +" but without sacrificing too much accuracy.
", +"
Better Accuracy
", +"
Draw the graphics using all screen pixels to produce the most", +" accurate display. On fast modern machines this can be enabled with", +" no apparent loss of speed, however older machines may wish to use", +" this only occassionally to limit any lag in the cursor tracking.
", +"
Image Pixels
", +"
(Not Yet Implemented)
", +"
Jump Cursor
", +"
If enabled, large jumps of the cursor do not update the graphics", +" display, small movements around an object of interest will update", +" the display continuously.
", +"
Smooth Cursor
", +"
If enabled, all cursor movements cause the display to be updated.", +" This is another option that can be set safely on faster machines", +" but will cause a delay on slower ones.
", +"
Graphics Cursors
", +"
If enabled, the graphics cursors in either of the plots are active", +" and can be used to update the cursor readout on the main image window", +" and the complementary cut-graph. This can be used for example to", +" freeze the cursor in the main display using the Alt key (see above),", +" then moving to one of the graphics windows to perform cut graphs in", +" only one axis.
", +"
", +"", +"Graphs are (currently) drawn using only the scaled display values ", +"to avoid complications of accessing multiple images in a mosaic display. Both", +"plots are labeled using the frame z1/z2 values and contain cursor indicators", +"which update contuously.", +"", +"", +"
", +"

Peak-Up Cursor Centroid Positioning

", +"

", +"Several new keystroke commands are available to reposition the", +"cursor to a centroid or min/max pixel value within a bounding box of the", +"cursor position, allowing you to approximate the position with the mouse", +"and fine tune it quickly before typing the application keystroke command.", +"The initial box size is controlled with a centerBoxSize GUI resource", +"(defaults to 5 pixels) but can be adjusted interactively using the", +"Ctrl-[ and Ctrl-] commands to descrease/increase the box", +"size respectively. A marker will flash briefly to indicate the box size.", +"

", +"The Ctrl-0 (zero) key finds either a centroid or the local maximum", +"pixel value within this box region, Alt-Ctrl-0 (zero) will find the", +"local minimum value. In either case the cursor is reposition to the computed", +"value. The default peak-up action is to find the centroid position in the", +"box however this can be changed to find the max pixel by selection the", +"\"Centroid Peaks\" option from the main Display", +"control panel or by resetting the peakCentroid GUI resource", +"(defaults to True). ", +"

", +"Centroiding is done using only the scaled screen pixel values and", +"only pixels above the mean value within the box are used. It works best", +"if the box size is set appropriately, the centroid position may appear to", +"drift if the box is too large and includes too many background pixels.", +"", +"", +"


", +"

Integrated Control Panel

", +"", +"

Display Panel

", +"XImtool has a control panel which can be used to exercise most of the", +"capabilities the program has for image display. The control panel can be", +"accessed either via the Options menu from the main window menubar, or", +"by", +"pressing the leftmost button in the row of buttons at the upper right side", +"of the display in the standard GUI (in the alternate GUI the ", +"Control Bar accessed by the rightmost button on the menubar", +"provides widgets for selecting the desired control panel).", +"

", +"The separate windows previously used for Control/Print/Load/Save/etc", +"have now been integrated into a single window with the appropriate control", +"panel selectable with a Tab widget. There are also new Tab panels for", +"setting the frame tile configuration (see below), more detailed information", +"on the server status, and selecting the WCS readout options (see below).", +"", +"

View Controls

", +"

", +"The Frame box will list only the frame buffers you currently have", +"defined. Currently, the only way to destroy a frame buffer is to change the", +"frame buffer configuration, new frame buffers (up to 4) will be created", +"automatically if requested by the client.", +"

", +"The text display window gives the field X,Y center, X,Y scale ", +"factors, and the X,Y zoom factors. The scale factor and the zoom factor ", +"will be the same unless autoscale is enabled. The scale is in units of ", +"display pixels per frame buffer pixel, and is an absolute measure (it doesn't", +"matter whether or not autoscale is enabled). Zoom is", +"relative to the autoscale factor, which is 1.0 if autoscaling is disabled. ", +"This information is also presented in the Info panel.", +"

", +"The numbers in the Zoom box are zoom factors. Blue numbers zoom,", +"red numbers dezoom. Zoom In and Zoom Out may be used to go to", +"larger or smaller zoom factors, e.g. \"Ctrl-5\" followed by \"Zoom In\" will get you", +"to zoom factor 10. Specific zoom factors may also be accessed directly as ", +"Control keystrokes, e.g. Ctrl-5 will set zoom factor 5.", +"Center centers the field. Toggle Zoom toggles between the ", +"current zoom/center values, and the unzoomed image.", +"

", +"Aspect recomputes the view so that the aspect ratio is 1.0. ", +"Aspect also integerizes the zoom factor (use the version in the View menu ", +"if you don't want integerization).", +"

", +"Fit Frame makes the display window the same size as the frame ", +"buffer. Note that autoscale has much the same effect,", +"and allows you to resize the display window to any size you want, or view ", +"images to large to fit on the screen.", +"", +"

Enhancement Controls

", +"", +"

", +"At the top is a scrolled list of all the available ", +"colormaps. Click on the one you want to load it. You can add your own", +"colormaps to this list.", +"

", +"The two sliders adjust the contrast (upper slider) and ", +"brightness (lower slider) of the display. The Invert button ", +"inverts the colormap (multiples the contrast by -1.0). Note that due to the", +"use of the private colormap the sliders are a bit sluggish when dragged to ", +"window the display. If this is annoying, using MB3 in the display window is", +"faster.", +"

", +"The Normalize button (on the bottom of the control panel) will ", +"normalize the enhancement, i.e. set the contrast and brightness to the default", +"one-to-one values (1.0, 0.5). This is the preferred setting for many of the", +"pseudocolor colortables and for private colormaps loaded from disk images.", +"", +"

Blink Controls

", +"

", +"Blink frames is the list of frames to be blinked. When blink mode is", +"in effect ximtool just cycles through these frames endlessly, pausing", +"\"blink rate\" seconds between each frame. The same frame can be entered in", +"the list more than once. To program an arbitrary list of blink frames,", +"hit the Reset button and click on each blink frame button until it is set", +"to the desired frame number. The main control panel allows only the", +"original four frames to be specified in the blink list, however access to", +"the full list of 16 frames now supported is gained using the box icon", +"button next the the Reset button to bring up a new control panel.", +"

", +"The Blink Rate can be adjusted as slow or as fast as you want using", +"the arrow buttons. If you set the blink rate small enough it will go to", +"zero, enabling single step mode (see below).", +"

", +"The Register button registers all the blink frames with the current", +"display frame. Frames not in the blink list are not affected.", +"

", +"The Match LUTs button sets the enhancement of all blink frames to", +"the same values as the display frame. Frames not in the blink list are not", +"affected.", +"

", +"The Blink button turns blink on and off. When the blink rate is set", +"to zero the Blink button will single step through the blink frames, one", +"frame per button press.", +"

", +"NOTE: You can blink no matter what ximtool options are in effect,", +"but many of these will slow blink down. To get the fastest blink you may", +"want to turn off the panner and coords box, and match the LUTs of all the", +"blink frames. All the ximtool controls are fully active during blink", +"mode, plus you can load frames etc.", +"", +"", +"

Options:

", +"
", +"
Panner
", +"
Toggles the display of the Panner marker.
", +"
Magnifier
", +"
Toggles the display of the magnifier marker.
", +"
Coords Box
", +"
Toggles the display of the WCS Coords Box marker.
", +"
Autoscale
", +"
If autoscale is enabled then at zoom=1, the frame buffer will", +" be automatically scaled to fit within the display window. With", +" autoscale disabled (the default), the image scale is more", +" predictable, but the image may be clipped by the display window,", +" or may not fill the display window.
", +"
Antialias
", +"
When dezooming an image, i.e., displaying a large image in a", +" smaller display window, antialiasing causes all the data to be used", +" to compute the displayed image. If antialiasing is disabled then", +" image is subsampled to compute the displayed image. Antialiasing", +" can prevent subsampling from omitting image features that don't", +" fall in the sample grid, but it is significantly slower than", +" dezooming via subsampling. The default is no antialising.
", +"
Tile Frames
", +"
The default display mode is to view one frame at a time. In tile", +" frames mode, 2 or 4 frames may be viewed simultaneously in the", +" display window. All the usual operations (zoom and pan, colortable", +" enhancement, cursor readback, etc.) still work for each frame even", +" when in tile frames mode.
", +"
Warnings
", +"
The warnings options toggles whether you see warning dialog boxes", +" in situations like overwriting an existing file, clearing the frame", +" buffer, etc.
", +"
Centroid Peaks
", +"
If enabled, the Ctrl-0 keystroke will reposition the cursor", +" to the computed centroid of the centroiding box, otherwise the cursor", +" is repositioned to the local maximum value within the box.
", +"
", +"", +"

Colormap Selection

", +"By default XImtool will display images using either a grayscale colormap", +"if loaded by a client, or a private colormap when loading an image from", +"disk that contains a colormap. Each frame defines its own colormap so", +"you can define different colormaps or enhancements for each frame, they", +"will change automatically as you cycle through the frames.", +"", +"

Builtin Colormaps

", +"Once loaded, the colormap may either be changed using the builtin colormap", +"menu under the View menu button on the main window, or from the", +"Enhancement box on the control panel. Ximtool has about a dozen colormap", +"options builtin, other user-defined colormaps may ", +"optionally be loaded.", +"", +"

User-defined Colormaps

", +"The cmap[12] and cmapDir[12] resources (or command line", +"arguments are used to tell ximtool which specific colormaps to make", +"available or where to look for colortables respectively. The colortables", +"are loaded when ximtool starts up, or when it is reinitialized (e.g. by", +"pressing the Initialize button in the control ", +"panel). Ximtool will ignore any files in the colormap directory", +"which do not look like colortables. New colortables will also be added", +"for each images loaded from disk.", +"

", +"The format of a user lookup table is very simple: each row defines one", +"colortable entry, and consists of three columns defining the red, green,", +"and blue values scaled to the range 0.0 (off) to 1.0 (full intensity).", +"

",
+"        R G B",
+"        R G B",
+"        (etc.)",
+"
", +"Blank lines and comment lines (# ...) are ignored.", +"

", +"Usually 256 rows are provided, but the number may actually be anything in", +"the range 1 to 256. Ximtool will interpolate the table as necessary to", +"compute the colortable values used in Ximtool. Ximtool uses at most 201", +"colors to render pixel data, so it is usually necessary to interpolate the", +"table when it is loaded.", +"

", +"The name of the colortable as it will appear in the Ximtool control panel", +"is the root name of the file, e.g., if the file is \"rainbow.lut\" the ", +"colortable name will be \"rainbow\". Lower case names are suggested to avoid", +"name collisions with the builtin colortables. Private colormaps for disk", +"images will be have the same name as the image loaded. If the same colortable", +"file appears in multiple user colortable directories, the first one will be", +"used.", +"

", +"The directory \"luts\" in the ximtool source directory contains a sample set", +"of colortable files. This can be installed as /usr/local/lib/imtoolcmap", +"when ximtool is installed.", +"", +"


", +"

Load Panel

", +"The Load Panel allows you load images from disk directly to the frame", +"buffer, this is analogous to loading an image on the command line except", +"that browsing is possible. At present recognized formats include IRAF OIF", +"format (i.e. .imh extension), simple FITS files, GIF, and Sun", +"rasterfiles. The task will automatically sense the format of the image", +"and load it appropriately. Images with private colormaps (such as GIF)", +"will be loaded using the private colormap (meaning that changing the", +"brightness/contrast enhancements will render an apparently random-colored", +"image), all others will be loaded with a grayscale colormap. ", +"

", +"When loading new images the frame buffer configuration table will be", +"searched for a frame buffer that is the same size or larger than the new", +"image size, if no frame buffer can be found a custom buffer exactly the", +"size of the image will be created. This means that the image may not fill", +"the display window when loaded, or you may see a subsection of the image", +"in the main display window. Setting the", +"autoscale option on the main", +"Display panel will scale the entire image to fit the main display window,", +"the full frame buffer will always be visible in the Panner marker window.", +"

", +"Images with more colors than can be displayed will automatically be", +"quantized to the number of available colors before display. If the", +"Auto Grayscale button is enabled any image colormap will be", +"converted to grayscale and loaded as the standard grayscale colormap.", +"

", +"Formats which permit pixels larger than 8-bits/pixel will be sampled on", +"a grid to determine an optimal range in the data to be used to compute a", +"linear transformation to the number of display colors. This is the same", +"z-scale sampling and transformation used by the IRAF DISPLAY task", +"when computing the z1/z2 values and provides a much better initial", +"display than simple truncation to 8-bits. This scaling will be done", +"automatically using a grid of Nsample points if the Zscale", +"option is enabled. Otherwise, if the Zrange option is set the full", +"data range will be used to scale the image. Lastly, is neither Zscale", +"nor Zrange are enabled, the z1/z2 values may be set explicitly using", +"the options box.", +"", +"

Directory Browsing

", +"The load panel contains a list of files in the current directory that may", +"be selected for loading by selecting with left mouse button. If the file", +"is a directory the contents of the new directory will be loaded, if it's a", +"plain file an attempt will be made to load it as an image otherwise an", +"error popup will appear. Directories in the list are identified with a", +"trailing '/' character, you will always see any subdirectories listed even", +"if a filter is specified.", +"

", +"The Root button will reset the current directory to the system root", +"directory. The Home button will reset the current directory to the", +"user's login directory, the Up button moves up one directory level, and", +"Rescan reloads the file list by rescanning the directory. The current", +"working directory is given below the file selection window.", +"

", +"Selecting the List Image Headers option will change the display text", +"to list all images in the current directory which match the filename filter.", +"Directory browsing is disabled while this option is in effect.", +"", +"

File Patterns

", +"By default all files and directories will be listed. You may specify a", +"filter to select only those files with a given extension such as", +"\"*.fits\" using the Filter text box. Directories will", +"always be seen in the list and are identified with a trailing '/'", +"character. Any valid unix pattern matching string will be recognized, ", +"multiple templates may be specified in a comma-delimited list such as", +"\"*.imh,*.fits\" to list both OIF and FITS images.", +"", +"

Direct File Load

", +"If you know exactly which file you wish to load, you may enter its", +"name in the Load File text box and either hit <cr> or the", +"Load button to load it. An absolute or relative path name may", +"be given, if a simple filename is specified it will be searched for in", +"the current working directory which is displayed in the Directory", +"label of the panel.", +"", +"

Frame Selections

", +"By default images will be loaded into the current frame, you may choose", +"a different frame using the Frame menu button to select from the", +"available frames.", +"", +"", +"
", +"

Save Panel

", +"The Save Panel lets you save the current contents of the main display window ", +"to a disk file (including the Panner/Coords markers, any general graphics", +"markers, or overlay graphics displayed by the client program). Presently,", +"only the contents of the main display window may be saved, there is no", +"facility for saving the undisplayed contents of the entire frame buffer ", +"other than to enable the autoscale feature. A limited", +"number of formats are currently available, others will be added in future", +"versions.", +"", +"
", +"
File Name
", +"
The File Name text box allows you to enter the file name of", +" the saved file. A \"%d\" anywhere in the name will be replaced by a", +" sequence number allowing multiple frames to be saved with unique", +" names.
", +"
Format
", +"
The Format box allows you to choose the format of the image", +" to be created. Not all formats are currently implemented. The EPS", +" format is similar to the \\fIPrint\\fR option however there is no", +" annotation.
", +"
Color
", +"
The Color box lets you choose the color type of the image", +" to be created. The options will change depending on the format,", +" e.g. FITS doesn't allow color so no color options will be allowed.", +" Formats which allow 24-bit images will be written using the current", +" colormap after converting to a 24-bit image, pseudocolor images will", +" be written with the current colormap.
", +"
", +"
", +"", +"

Print Panel

", +"The Print Panel allows you dump the contents of the main display window as", +"Enacpsulated Postscript to either a named printer device or to a disk file.", +"The Print To selects the type of output, the Print Command", +"box will adjust accordingly, either as a Unix printer command or as a file", +"name. A \"%d\" anywhere in the name for disk output will be replaced by a ", +"sequence number allowing multiple frames to be saved with unique names.", +"Selecting printers from the installed list will", +"automatically change the command to be used to generate the output. This", +"command does not necessarily need to be a printer command, the ", +"printer configuration file lets you define any command", +"string to process the image.", +"", +"

Color Options

", +"The Color box lets you choose the color type of the image to be created.", +"PseudoColor or 24-bit postscript will be created using the current colormap.", +"", +"

Postscript Options

", +"
", +"
Orientation
", +"
Set the page orientation.
", +"
Paper Size
", +"
Select the paper size to be used.
", +"
Image Scale
", +"
Set the scale factor used to compute the final image size.
", +"
", +"", +"

Processing Options

", +"
", +"
Auto Scale
", +"
The auto scale toggles whether or not the image is automatically", +" scaled to fit the page. If not enabled, the image scale will", +" be used to dtermine the output image size.
", +"
Auto Rotate
", +"
Auto rotate determines whether or not the image will be rotated to", +" fit on the page. When set, an image larger than the current", +" orientation will be rotated and possibly scaled to fit the page.
", +"
Max Aspect
", +"
Max Aspect takes images smaller than the page and automatically", +" increases the scale so the image fills the page in the current", +" orientation.
", +"
Annotate
", +"
The annotate option toggles whether or not the final file includes", +" annotation such as the image title, a colorbar, and axis labels.
", +"
", +"

Printer selection

", +"The printer selection list lets choose the printer to be used. The printer", +"configuration file is /usr/local/lib/ximprint.cfg by default or may be reset", +"using the printConfig resource. The format of the file is simply", +"
",
+"	name < tab > command",
+"
", +"The name value is what appears in the selection list and may be more", +"than a single word, the command can be any command that accepts EPS", +"input from a pipe, the two fields must be separated by a tab character. ", +"Normally the command will be", +"a simple 'lpr -Pfoo' or some such, but can also include converters or", +"previewers. At most 128 printer commands may be used.", +"", +"
", +"

Info Panel

", +"The Info panel was revised to provide a greater variety of status", +"information. The type of output is controlled by the toggle buttons on", +"the bottom of the frame, however all output is kept current as the program", +"runs. Current info options include:", +"", +"
", +"
Frame
", +"
Info about the current display frame.
", +"
Server
", +"
Info about various server options, e.g. colormaps, memory model,", +" antialias type, etc.
", +"
Clients
", +"
Show currently connected clients. Lists available connection", +" channels and active ISM clients.
", +"
WCS
", +"
List all WCS and mappings for the current frame.
", +"
ISM
", +"
Log of various ISM status messages.
", +"
Imtoolrc
", +"
Show current frame buffer configuration table.
", +"
", +"", +"", +"
", +"

Tile Panel (NEW)

", +"With the additional frames, the default tiling scheme proved inadequate.", +"A new control panel Tile frame now allows you to select from a number of", +"tile configurations, the list of frames to be tiled, a fill style", +"(left-to-right or top-to-bottom), as well as optional labels for each of", +"the tiles (frame number, image title or image name).", +"

", +"Tile configuration will make use of all frames currently selected in the", +"Tile Frame group in the following manner:", +"", +"

", +"
Disabled
", +"
Do not tile the display.
", +"
Manual
", +"
Tile according to Manual Configuration settings.
", +"
Best
", +"
Optimize layout for frame buffer aspect.
", +"
Square
", +"
Always force a square layout (2x2, 3x3, etc).
", +"
Horizontal
", +"
Preferentially tile horizontally (6 frames ==> 3x2).
", +"
Vertical
", +"
Preferentially tile vertically (6 frames ==> 2x3).
", +"
One Row
", +"
Tile all in one row (Nx1).
", +"
One Column
", +"
Tile all in one column (1xN).
", +"
", +"", +"", +"
", +"

Coords Panel (NEW)

", +"The Coords Panel is meant to provide a full-featured readout as well as", +"serve as a control panel for the various options. The display window", +"contains the image name/title and frame buffer info, and a selection of", +"coordinate and image pixel readouts. The intent is provide more infor-", +"mation than can fit comfortably on the main image window while still", +"taking up as little screen space as possible. To this end the Options", +"button is used to hide most of the feature controls when not in use", +"(see below). Other options on the main panel include:", +"", +"
", +"
WCS/Pix
", +"
Toggle the real-time WCS/pixel readout capability (i.e. the ISM", +" used to access the disk image). This must be enabled for certain", +" other options to work.
", +"", +"
Pix Table
", +"
Open a panel showing an image pixel table. The panel shows an array", +" of pixels surrounding the cursor position, either the actual pixel", +" values if the ISM is enabled, or scaled display values otherwise.", +" The size of the table may be selected from the menubar.
", +"", +"
Header
", +"
Display the current image header in a new panel. Both the entire", +" image header as well as WCS-specific parts of the header are", +" available under different tabs. This option is only active when", +" the ISM is enabled.
", +"", +"
Compass
", +"
Draw an orientation compass on the display panner. If the ISM is", +" enabled and a WCS is present in the header, the compass will", +" indicate N/E according to the WCS, otherwise the X/Y axes of the", +" image are drawn.
", +"", +"
Options
", +"
Pop-up/down the option control portion of the panel. When enabled,", +" the Coords Panel will change size to reveal the options which can be", +" changed (explained below).
", +"
", +"", +"The Readout Values group controls the selection of WCS type,", +"location and format to be displayed. The Type menu always", +"provides a selection of the image Logical, Physical or World systems,", +"which may be identical depending on the image header. If a World system", +"is supplied in the image addition entries for transformations to other sky", +"systems, (e.g. FK5 to ICRS or galactic/ecliptic) will also be available.", +"The selection is dependent on whether the ISM is running as well as WCS", +"information present in the image. The Format menu allows the", +"use to select a sexigesimal display, conversion to degrees or radians,", +"or whichever format is most natural for the coordinate being display.", +"The two toggle to the right control whether this WCS is to be displayed", +"on the Panel (i.e. the Coords Panel window) or the ImgWin", +"(i.e. the text marker on the main image window).", +"

", +"Other options below this group control whether or not to display the WCS", +"labels, the image name/title, and frame buffer information in the main", +"Coords Panel display. The BPM Data option controls whether or not the", +"ISM will try to map any bad-pixel mask associated with the image. If", +"enabled, a bad-pixel mask specified by the image header BPM keyword", +"(currently fixed by convention but this may be selectable later) will be", +"mapped along with the image. Aside from wcs/pixel readouts at each cursor", +"position, any BPM data values found will also be displayed. A non-zero", +"value will cause the BPM field of the Coords Panel readout as well as the", +"main image window marker to switch to a red background color to flag the", +"value.", +"

", +"The last box allows the user to specify a different ISM task to be", +"executed or to reinitialize the current one. In most cases this won't", +"need to be changed, however a custom ISM could be started when using", +"special data formats. This command string can also be controlled by the", +"application ism_task resource.", +"", +"", +"


", +"

Tcl Interactive Shell

", +" The TclShell is mostly used as a development or debugging", +"tool for the GUI. It allows the user to type commands directly to the", +"TCL interpreter letting you send messages to the object manager or execute", +"specific procedures in the TCL code that makes up the GUI. Most users will", +"never need this, but for an example of what it does, bring it up and type a", +"command such as", +"
",
+"    send helpButton set background red",
+"
", +"Cool, huh.", +"
", +"", +"

Acknowledgements

", +" XImtool was developed by the IRAF Group at the National Optical", +"Astronomy Observatories in Tucson, AZ. For further information or to report", +"problems please contact iraf@noao.edu", +"
", +"This document was last updated 11/6/96.", +"", +"", +"", diff --git a/vendor/x11iraf/ximtool/ximtool.man b/vendor/x11iraf/ximtool/ximtool.man new file mode 100644 index 00000000..2ca62eaf --- /dev/null +++ b/vendor/x11iraf/ximtool/ximtool.man @@ -0,0 +1,2338 @@ +.\" @(#)ximtool.1 1.1 12-Aug-2001 MJF +.TH XIMTOOL 1 "12 Aug 2001" "X11IRAF Project" +.SH NAME +ximtool \- interactive image display program for the X Window System +.sp 0.5 +.SH SYNOPSIS +.B "ximtool" [\-\fItoolkitoption\fP ...] [ \fIoptions\fP ...] [\fIimagename\fP] +.sp 0.5 +.SH OPTIONS +.TP 5 +.B "-basePixel \fIN\fP" +The base colormap cell used by the colormap. This essentially allows you +to reserve \fIbasePixel\fP colors in the global colormap for other applications. +The default is 64, if changed you'll need to also specify the +\fI-cmapInitialize\fP option or resource. +.TP 5 +.B "-cmap1 \fIfile\fP" +User colormap 1. This flag allows you to specify a colormap to be made +available at task startup. +.TP 5 +.B "-cmap2 \fIfile\fP" +User colormap 2. This flag allows you to specify a second colormap to be +made available at task startup. +.TP 5 +.B "-cmapDir1 \fIdir\fP" +User colormap directory 1. Specifies a directory to be searched for colormaps. +.TP 5 +.B "-cmapDir2 \fIdir\fP" +User colormap directory 2. Specifies a directory to be searched for colormaps. +By default this points to the system directory /usr/local/lib/imtoolcmap, +allowing a set of site default colormaps to be defined here. +.TP 5 +.B "-cmapInitialize \fIbool\fP" +Initialize the ximtool colormap at startup. When setting the \fIbasePixel\fP +option or resource this is required in order to force the Gterm widget to +update its global colormap resource in the X server. The default is +\fIfalse\fP. +.TP 5 +.B "-cmapName \fIname\fP" +Name used for private colormap. The default for all IRAF imaging +applications is \fIimage\fP. Gterm widget based imaging applications +which have the same value of cmapName will share the same colormap, +minimizing colormap flashing and allowing multiple applications to be +run at the same time. +.TP 5 +.B "-config \fIN\fP" +Initial frame buffer configuration number. The default value is 1, indicating +a 512x512 frame buffer with 2 frames. See below for information on the frame +buffers. +.TP 5 +.B "-defgui" +Print the default GUI to the stdout. The GUI is a Tcl program that may be +customized by the user and reloaded using the \fI-gui\fP option or +the \fIgui\fP resource parameter. +.TP 5 +.B "-displayPanner \fIbool\fP" +Display panner marker window at startup. If set, a panner window showing +the full frame buffer will appear in the upper-right side of the main display +window. +.TP 5 +.B "-displayCoords \fIbool\fP" +Display WCS coordinate marker window at startup. If set, a coordinate +readout text marker showing will appear in the lower-right side of the main +display window. +.TP 5 +.B "-fifo \fIpipe\fP" +Specifies the name of the fifo pipe to be used, the \fIi\fP +and \fIo\fP suffixes will be added automatically. The default pipe names +will be /dev/imt1i (input pipe) and /dev/imt1o (output pipe). +.TP 5 +.B "-fifo_only" +If set, only fifo pipes will be used for communication with a client program, +sockets will be disabled. +.TP 5 +.B "-gui \fIfile\fP" +Specifies the GUI file to be used. +.TP 5 +.B "-help" +Print a summary of command line options to the screen. +.TP 5 +.B "-imtoolrc \fIfile\fP" +Specifies the frame buffer configuration file to be used. See below for +information on frame buffers. +.TP 5 +.B "-inet_only" +If set, only inet sockets will be used for communication with a client program, +fifo pipes and unix sockets will be disabled. +.TP 5 +.B "-invert" +Start XImtool using inverted colormaps. When set, a "normalized" display +will always be the inverse of the selected colormap. +.TP 5 +.B "-ismdev \fIdev\fP" +Specifies the plug-in ISM connection socket. This should be a unix domain +socket of the form "\fI/tmp/.ISM%d\fP", where the \fI%d\fP will be replaced +by the user id. Once an ISM has connected this port is freed to accept +other connections. +.TP 5 +.B "-maxColors \fIN\fP" +Specify the max number of colors to be used for the display. +.TP 5 +.B "-memModel \fItype\fP" +Determines how ximtool uses memory in the ximtool client and the X server. +The options are \fIfast\fP, \fIbeNiceToServer\fP, and \fIsmall\fP. The +default is \fIfast\fP, which uses server pixmaps to make frame blink fast. +This is recommended unless server memory is very limited. Note that even in +fast mode, the server pixmap is only the size of the display window, so memory +usage is reasonable even if the frame buffer is very large. +.TP 5 +.B "-nframes \fIN\fP" +Specifies the number of frame buffers to configure at startup. By default +there will be 2 frames available, a maximum of 4 frames are allowed. +.TP 5 +.B "-port \fIN\fP" +Specifies the port number to use when connecting through an inet socket. +.TP 5 +.B "-port_only" +Same as \fI-inet_only\fP option. If set, only inet sockets will be used for +communication with a client program. +.TP 5 +.B "-printConfig \fIname\fP" +Specifies the printer configuration file to use. By default this will be +/usr/local/lib/ximprint.cfg. See below for more information on configuring +output devices. +.TP 5 +.B "-tile" +The default display mode is to view one frame at a time. In tile frames mode, +2 or 4 frames may be viewed simultaneously in the display window. All the +usual operations (zoom and pan, colortable enhancement, cursor readback, etc.) +still work for each frame even when in tile frames mode. +.TP 5 +.B "-unix \fIname\fP" +Specifies the unix domain socket name to use. A "%d" in the filename will +be replaced with the user id. +.TP 5 +.B "-unix_only" +If set, only unix domain sockets will be used for communication with a client +program, inet sockets and fifos will be disabled. + +.SH "APPLICATION RESOURCES" +XImtool is implemented as a client program which is responsible for loading +the frame buffers/colormaps, communicating with clients, etc, and a +user-modifiable GUI file written as a Tcl script which handles all the user +interface details. The \fIclient resources\fP described below will be common +to any user-defined GUI, the \fIgui resources\fP may change depending on how +extensively the GUI has been modified by the user. Each of these components +has its own set of resources, but to the user setting them is the same as +with any other application. + +\fIGterm\fP widget resources (i.e. those for the main image window or +colorbar) may be set as either client or GUI resources. See the +\fIxgterm(1)\fP man page for a complete description of \fIGterm\fP widget +resources. + +.SS "CLIENT RESOURCES" +The client resources generally define the initial state of the application +or set configuration parameters. +.RS +.TP 25 +.B "Resource Name" +\fBDefault Value\fP +.sp -0.5 +.TP 25 +defConfig +1 +.sp -0.5 +.TP 25 +defNFrames +0 +.sp -0.5 +.TP 25 +tileBorderWidth +3 +.sp -0.5 +.TP 25 +tileBorderColor +9 +.sp -0.5 +.TP 25 +autoscale +false +.sp -0.5 +.TP 25 +antialias +false +.sp -0.5 +.TP 25 +antialiasType +boxcar +.sp -0.5 +.TP 25 +tileFrames +false +.sp -0.5 +.TP 25 +highlightFrames +true +.sp -0.5 +.TP 25 +gui +default +.sp -0.5 +.TP 25 +imtoolrc +/usr/local/lib/imtoolrc +.sp -0.5 +.TP 25 +invert +false +.sp -0.5 +.TP 25 +memModel +fast +.sp -0.5 +.TP 25 +basePixel: +64 +.sp -0.5 +.TP 25 +maxColors: +216 +.sp -0.5 +.TP 25 +cmapInitialize: +false +.sp -0.5 +.TP 25 +cmap1 +none +.sp -0.5 +.TP 25 +cmap2 +none +.sp -0.5 +.TP 25 +cmapDir1 +none +.sp -0.5 +.TP 25 +cmapDir2 +/usr/local/lib/imtoolcmap +.sp -0.5 +.TP 25 +input_fifo +/dev/imt1i +.sp -0.5 +.TP 25 +output_fifo +/dev/imt1o +.sp -0.5 +.TP 25 +unixaddr +/tmp/.IMT%d +.sp -0.5 +.TP 25 +port +5137 +.sp -0.5 +.TP 25 +ism_addr +/tmp/.ISM%d +.sp -0.5 +.TP 25 +ism_task +"ism_wcspix.e wcspix &" +.RE + +Description of ximtool client resources: + +.TP 18 +.B "defConfig" +Default frame buffer configuration number on startup. See below for more +information on frame buffers. +.TP 18 +.B "defNFrames" +Default number of frames on startup. Set to zero to use the value from +the frame buffer configuration (\fIimtoolrc\fP) file. +.TP 18 +.B "tileBorderWidth" +.sp -0.5 +.TP 18 +.B "tileBorderColor" +Used by the tile frames option. Specifies how far +apart to space the frames in tile frames mode. +Color "9" refers to the Gterm widget resource color9, +which is assigned a color with its own resource. +.TP 18 +.B "autoscale" +Enable/disable the autoscale option. +.TP 18 +.B "antialias" +Enable/disable the antialias option. +.TP 18 +.B "antialiasType" +Type of antialiasing. Options include \fIboxcar\fP (default), \fIbilinear\fP, +\fInearest\fP, \fIarea\fP, \fIblkavg\fP, \fIlowpass\fP, and \fIgaussian\fP. +.TP 18 +.B "tileFrames" +Enable/disable the tile frames option. +.TP 18 +.B "highlightFrames" +Determines whether the current frame is highlighted when in tile frames mode. +.TP 18 +.B "gui" +The GUI to be executed. "default" refers to the default, builtin ximtool GUI. +You can replace this with your own GUI file if you are bold enough, and +completely change the look and functionality of the GUI if desired. +.TP 18 +.B "imtoolrc" +Where to find the imtoolrc file. This defines the +recognized frame buffer configurations. +.TP 18 +.B "invert" +Start Ximtool using an inverted colormap. When set, a "normalized" display +will always be the inverse of the selected colormap. +.TP 18 +.B "memModel" +Determines how ximtool uses memory in the ximtool client and the X server. +The options are \fIfast\fP, \fIbeNiceToServer\fP, and \fIsmall\fP. +The default is \fIfast\fP, which uses server pixmaps to make frame blink fast. +This is recommended unless server memory is very limited. Note that even in +fast mode, the server pixmap is only the size of the display window, so +memory usage is reasonable even if the frame buffer is very large. +.sp -0.5 +.TP 18 +.B "basePixel" +.sp -0.5 +.TP 18 +.B "maxColors" +These two resources determine the region of colormap space used to +render image pixels. +.TP 18 +.B "cmapInitialize" +Initialize the ximtool colormap at startup. This is a required resource to +clear a previous ximtool colormap allowing a new \fBbasePixel\fP and +\fBmaxColors\fP to take effect. +.TP 18 +.B "cmap1" +.sp -0.5 +.TP 18 +.B "cmap2" +User colormap files. The intent here is to allow individual colormaps to be +conveniently specified as a resource. +.TP 18 +.B "cmapDir1" +.sp -0.5 +.TP 18 +.B "cmapDir2" +User or system colormap directories. By default cmapDir2 points to the system +directory /usr/local/lib/imtoolcmap, allowing a set of site default colormaps +to be defined here. This leaves cmapDir1 available to a user colormap +directory. +.TP 18 +.B "input_fifo" +.sp -0.5 +.TP 18 +.B "output_fifo" +The input and output fifos for fifo i/o. "Input" and "output" are from the +client's point of view. Note that only one display server can use a +fifo-pair at one time. +.TP 18 +.B "unixaddr" +Template address for unix domain socket. The user must have write permission +on this directory, or the file must already exist. \fI%d\fP, if given, +is replaced by the user's UID. +.TP 18 +.B "port" +TCP/IP port for the server. Note that only one server can listen on a port +at one time, so if multiple ximtool servers are desired on the same +machine, they should be given different ports. +.TP 18 +.B "ism_addr" +Template address for ISM unix domain socket. The user must have write +permission on this directory, or the file must already exist. \fI%d\fP, +if given, is replaced by the user's UID. +.TP 18 +.B "ism_task" +Command string to execute for the real-time pixel and WCS readout ISM +(Image Support Module) task. + +.SS "GUI RESOURCES" + +In principle ximtool can have any number of different GUIs, each of which +defines its own set of resources. GUIs typically define a great many +resources, but most of these are not really intended for modification by +the user (although one can modify them if desired). + +The following are some of the more useful resources used by the default +ximtool GUI. The \fIimagewin\fR resources are Gterm widget resources. +.RS + +.TP -10 +.B Main Display Gterm Widget Resources +.TP 35 +.B " Resource Name" +\fBDefault Value\fP +.sp -0.5 +.TP 35 + *imagewin.cmapName: +image +.sp -0.5 +.TP 35 + *imagewin.basePixel: +64 +.sp -0.5 +.TP 35 + *imagewin.warpCursor: +True +.sp -0.5 +.TP 35 + *imagewin.raiseWindow: +True +.sp -0.5 +.TP 35 + *imagewin.deiconifyWindow: +True +.sp -0.5 +.TP 35 + *imagewin.ginmodeCursor: +circle +.sp -0.5 +.TP 35 + *imagewin.ginmodeBlinkInterval: +500 +.sp -0.5 +.TP 35 + *imagewin.color0 (background): +black +.sp -0.5 +.TP 35 + *imagewin.color1 (foreground): +white +.sp -0.5 +.TP 35 + *imagewin.color8 (panner highlight): +#7c8498 +.sp -0.5 +.TP 35 + *imagewin.color9 (tileFrame color): +SteelBlue +.sp -0.5 +.TP 35 + *imagewin.width: +512 +.sp -0.5 +.TP 35 + *imagewin.height: +512 + +.TP -10 +.B GUI Resources + +.TP 35 +.B " Resource Name" +\fBDefault Value\fP +.sp -0.5 +.TP 35 + *autoscale: +True +.sp -0.5 +.TP 35 + *zoomfactors: +1 2 4 8 +.sp -0.5 +.TP 35 + *displayCoords: +True +.sp -0.5 +.TP 35 + *displayPanner: +True +.sp -0.5 +.TP 35 + *displayMagnifier: +True +.sp -0.5 +.TP 35 + *blinkRate: +1.0 +.sp -0.5 +.TP 35 + *pannerArea: +150*150 +.sp -0.5 +.TP 35 + *pannerGeom: +-5+5 +.sp -0.5 +.TP 35 + *magnifierArea: +100*100 +.sp -0.5 +.TP 35 + *magnifierGeom: ++5+5 +.sp -0.5 +.TP 35 + *wcsboxGeom: +-5-5 +.sp -0.5 +.TP 35 + *maxContrast: +5.0 +.sp -0.5 +.TP 35 + *warnings: +True +.sp -0.5 +.TP 35 + *centerBoxSize: +5 +.sp -0.5 +.TP 35 + *peakCentroid: +True + +.TP -10 +.B Alternate GUI Resources +.TP 35 +.B " Resource Name" +\fBDefault Value\fP +.sp -0.5 +.TP 35 + *showToolBar: +False +.sp -0.5 +.TP 35 + *showPanelBar: +False +.RE + +Description of selected resources: + +.TP 22 +.B "*cmapName" +Name used for private colormap. The default for all IRAF imaging applications +is "image". Gterm widget based imaging applications which have the same value +of cmapName will share the same colormap, minimizing colormap flashing and +allowing multiple applications to be run at the same time. +.TP 22 +.B "*basePixel" +The base colormap cell used by the display colormap. +.TP 22 +.B "*imagewin.warpCursor" +Warp pointer into image window when initiating a cursor read. +.TP 22 +.B "*imagewin.raiseWindow" +Raise image window when initiating a cursor read. +.TP 22 +.B "*imagewin.deiconifyWindow" +Deiconify image window if necessary when initiating a cursor read. +.TP 22 +.B "*imagewin.ginmodeCursor" +Type of cursor when a cursor read is in progress. The default is a +circle. Any selection from the X cursor font can be used. A special +case is "full_crosshair" which is the full crosshair cursor of the +Gterm widget. +.TP 22 +.B "*imagewin.ginmodeBlinkInterval" +Determines whether the cursor blinks when a cursor read is in progress. +The value is given in milliseconds. +.TP 22 +.B "*imagewin.color0" +Background color. +.TP 22 +.B "*imagewin.color1" +Foreground color. +.TP 22 +.B "*imagewin.color8" +Color assigned the panner window. +.TP 22 +.B "*imagewin.color9" +Color used for the tileFrames highlight. +.TP 22 +.B "*imagewin.width" +Width of the main image window. +.TP 22 +.B "*imagewin.height" +Height of the main image window. +.TP 22 +.B "*pannerArea" +Area in pixels of the panner window. +.TP 22 +.B "*pannerGeom" +Where to place the panner window. +.TP 22 +.B "*wcsboxGeom" +Where to place the coords box. +.TP 22 +.B "*maxContrast" +Maximum contrast value. + + +.SH DESCRIPTION + +As a display server, XImtool is started as a separate process from client +software such as IRAF. Once it is running it will accept client connections +simultaneously on fifo pipes, unix domain sockets, or inet sockets. A +display client like the IRAF \fIDISPLAY\fP task makes a connection and sends +the image across using a modified IIS Model 70 protocol. Once the image is +loaded in the display buffer it may be enhanced, saved to a disk file in a +number of different formats, or printed as Encapsulated Postscript to a +printer or disk file. Up to sixteen frame buffers are allowed, these may be +displayed simultaneously in a tiled mode, or blinked frame-to-frame. +Each frame may have its own colormap or brightness/contrast enhancement. +Pan/Zoom and cursor readout are permitted using \fImarkers\fP, on-line help +is also available. + +When run in standalone mode, images (currently IRAF OIF, GIF, Sun Rasterfiles +or simple FITS (i.e. excluding MEF files) formats are permitted) may be +loaded on the command line or by using the Load Panel. This allows you to +browse images and perform the same manipulations as if they had been displayed +by a client. + +.SS "MOUSE OPERATIONS" + +Clicking and dragging MB1 (mouse button 1) in the main image window creates +a rectangular region marker, used to select a region of the image. If you do +this accidentally and don't want the marker, put the pointer in the marker +and type DELETE or BACKSPACE to delete the marker. With the pointer in the +marker, MB3 will call up a marker menu listing some things you can do with +the marker, like zoom the outlined region. MB1 can be used to drag or resize +the marker. See below for more information on markers. + +Clicking on MB2 in the main image window pans (one click) or zooms (two +clicks) the image. Further clicks cycle through the builtin zoom factors. +Moving the pointer to a new location and clicking moves the feature under +the pointer to the center of the display window. Holding down the Shift +key while clicking MB2 will cause a full-screen crosshair cursor to appear +until the button is released, this can be useful for fine positioning of the +cursor. + +MB3 is used to adjust the contrast and brightness of the displayed image. +The position of the pointer within the display window determines the +contrast and brightness values. Click once to set the values corresponding +to the pointer location, or click and drag to continuously adjust the +display. + +.SS "KEYSTROKE ACCELERATORS" + +The following keystrokes are currently defined in the GUI: + +.RS +-------------------- \fBMisc Functions\fP --------------------- +.sp -0.2 +.TP 20 +.B "Ctrl-b" +Previous (back) frame +.sp -0.5 +.TP 20 +.B "Ctrl-c" +Center frame +.sp -0.5 +.TP 20 +.B "Ctrl-f" +Forward frame +.sp -0.5 +.TP 20 +.B "Ctrl-i" +Invert colormap +.sp -0.5 +.TP 20 +.B "Ctrl-m" +Toggle magnifier +.sp -0.5 +.TP 20 +.B "Ctrl-n" +Normalize +.sp -0.5 +.TP 20 +.B "Ctrl-p" +Toggle panner +.sp -0.5 +.TP 20 +.B "Ctrl-r" +Register +.sp -0.5 +.TP 20 +.B "Ctrl-s" +Match LUT scaling +.sp -0.5 +.TP 20 +.B "Ctrl-t" +Tile frames toggle +.sp -0.5 +.TP 20 +.B "Ctrl-u" +Unzoom (zoom=1) +.sp -0.5 +.TP 20 +.B "Ctrl-x" +Flip X +.sp -0.5 +.TP 20 +.B "Ctrl-y" +Flip Y +.TP 20 +.B "Ctrl-=" +Print using current setup +.sp -0.5 +.TP 20 +.B "Ctrl-<" +Decrease blink rate (blink faster) +.sp -0.5 +.TP 20 +.B "Ctrl->" +Increase blink rate (blink slower) +.sp -0.5 +.TP 20 +.B "Ctrl-+" +Zoom in +.sp -0.5 +.TP 20 +.B "Ctrl--" +Zoom out +.TP 20 +.B "Alt-1 thru Alt-4" +Set frame to be displayed +.sp -0.5 +.TP 20 +.B "Ctrl-1 thru Ctrl9" +Set integer zoom factor +.TP 20 +.B "Ctrl-Alt-q" +Quit +.sp -0.5 +.TP 20 +.B "Ctrl-Alt-f" +Fitframe +.TP -12 +--------------------- \fBPanel Toggles\fP --------------------- +.sp -0.2 +.TP 20 +.B "Alt-b" +Blink frames +.sp -0.5 +.TP 20 +.B "Alt-c" +Control panel +.sp -0.5 +.TP 20 +.B "Alt-h" +Help popup +.sp -0.5 +.TP 20 +.B "Alt-i" +Info box popup +.sp -0.5 +.TP 20 +.B "Alt-l" +Load file popup +.sp -0.5 +.TP 20 +.B "Alt-p" +Print popup +.sp -0.5 +.TP 20 +.B "Alt-s" +Save popup +.sp -0.5 +.TP 20 +.B "Alt-t" +TclShell popup +.sp 0.5 +.TP -12 +------------------- \fBCursor Positioning\fP ------------------ +.sp -0.2 +.TP 28 +.B "Ctrl-h / Ctrl-Left" +Move cursor one pixel left +.sp -0.5 +.TP 28 +.B "Ctrl-j / Ctrl-Down" +Move cursor one pixel down +.sp -0.5 +.TP 28 +.B "Ctrl-k / Ctrl-Up" +Move cursor one pixel up +.sp -0.5 +.TP 28 +.B "Ctrl-l / Ctrl-Right" +Move cursor one pixel right +.TP 28 +.B "Shift-Ctrl-h / Shift-Ctrl-Left" +Move cursor ten pixels left +.sp -0.5 +.TP 28 +.B "Shift-Ctrl-j / Shift-Ctrl-Down" +Move cursor ten pixels down +.sp -0.5 +.TP 28 +.B "Shift-Ctrl-k / Shift-Ctrl-Up" +Move cursor ten pixels up +.sp -0.5 +.TP 28 +.B "Shift-Ctrl-l / Shift-Ctrl-Right" +Move cursor ten pixels right +.sp 0.5 +.TP -12 +------------------- \fBAuto-Registration\fP ------------------- +.sp -0.2 +.TP 20 +.B "Ctrl-a" +Toggle auto-registration +.sp -0.5 +.TP 20 +.B "Ctrl-o" +Set frame offset +.sp 0.5 +.TP -12 +-------------------- \fBFrame Positioning\fP ------------------ +.sp -0.2 +.TP 20 +.B "Ctrl-Left" +Shift one full frame left +.sp -0.5 +.TP 20 +.B "Ctrl-Down" +Shift one full frame down +.sp -0.5 +.TP 20 +.B "Ctrl-Up" +Shift one full frame up +.sp -0.5 +.TP 20 +.B "Ctrl-Right" +Shift one full frame right +.TP 20 +.B "Ctrl-Alt-Left" +Shift one half frame left +.sp -0.5 +.TP 20 +.B "Ctrl-Alt-Down" +Shift one half frame down +.sp -0.5 +.TP 20 +.B "Ctrl-Alt-Up" +Shift one half frame up +.sp -0.5 +.TP 20 +.B "Ctrl-Alt-Right" +Shift one half frame right +.sp 0.5 +.TP -12 +------------------- \fBPeak-Up Centroiding\fP ----------------- +.sp -0.2 +.TP 20 +.B "Ctrl-[" +Decrease centroiding box size +.sp -0.5 +.TP 20 +.B "Ctrl-]" +Increase centroiding box size +.sp -0.5 +.TP 20 +.B "Ctrl-0 (zero)" +Centroid/find local maximum +.sp -0.5 +.TP 20 +.B "Alt-Ctrl-0 (zero)" +Find local minimum +.sp 0.5 +.TP -12 +------------------ \fBMouse Button Events\fP ------------------ +.sp -0.2 +.TP 20 +.B "Shift-Btn1Down" +Turn on magnifier +.sp -0.5 +.TP 20 +.B "Shift-Btn1Up" +Turn off magnifier +.sp -0.5 +.TP 20 +.B "Shift-Btn2Down" +Turn on crosshair cursor +.sp -0.5 +.TP 20 +.B "Shift-Btn2Up" +Turn off crosshair cursor +.TP 20 +.B "Btn1Down" +Create a Marker +.sp -0.5 +.TP 20 +.B "Btn1Motion" +Resize marker being created +.sp -0.5 +.TP 20 +.B "Btn2Down" +Zoom/center on cursor position +.sp -0.5 +.TP 20 +.B "Btn3Down/Motion" +Brightness/contrast scale the image +.TP 20 +.B "Ctrl-Btn1Down" +Create Ruler Marker +.sp -0.5 +.TP 20 +.B "Ctrl-Btn1Motion" +Resize Ruler Marker being created +.sp -0.5 +.TP 20 +.B "Ctrl-Btn1Up" +Destroy Ruler Marker +.TP 20 +.B "Alt-Motion" +Freeze cursor readout +.RE + +.LP +\fBNOTE:\fP These keystrokes only work with the cursor in the main image +window, only a few of the commands are implemented to work within subwindows +or markers to avoid conflicts with translations for those objects. If a +command does not work, check the cursor location and try it again in the +main display window. + +.SH "FRAME BUFFER CONFIGURATIONS" + +XImtool starts up using default frame buffer size of 512x512 pixels, two +(of 16 possible) frames will be created. When loading disk images (i.e. +run in standalone mode) the frame buffer configuration file will be +searched for a defined frame buffer that is the same size or larger than +the current image, if no suitable buffer can be found a custom frame +buffer the same size as the image will be created in an unused portion of +the configuration table. When used as a display server the frame buffer +configuration number is passed in by the client and loaded explicitly even +if it means clipping the image. If a new frame buffer is a different size +than previously defined frames, all available frames will be initialized +and cleared prior to the display. The default frame buffer configuration +file is /usr/local/lib/imtoolrc, this can be overridden by defining a +IMTOOLRC environment variable naming the file to be used, by creating a +.imtoolrc file in your home directory, or a new file may be specified +using the \fI-imtoolrc\fR command line flag or \fIimtoolrc\fR application +resource. + +The format of the frame buffer configuration file is + + \fIconfigno nframes width height [extra fields]\fP + e.g. + 1 2 512 512 + 2 2 800 800 + 3 1 1024 1024 # comment + : : : : + +At most 128 frame buffer sizes may be defined, each configuration may define +up to 16 frames, configuration numbers need not be sequential. + +.LP +\fBNOTE:\fR When defining a new frame buffer for use with client software +such as IRAF the user must also remember to define those frame buffers in +the IRAF \fIdev$graphcap\fR file. + +.SS "SUPPORT FOR 16 DISPLAY FRAMES" + +As part of the extensive GUI changes with the V1.3 release, support for +the full 16 frames allowed by the IIS protocol is now available. IRAF +V2.11.4 or later client tasks (and CDL library) are required to take +advantage of this frames. All changes are backwards compatible, older +versions of IRAF will continue to work but cannot access more than the +original four frames. The new DISPLAY task will automatically sense +whether the display server being used supports 16 frames or the original 4 +and adjust the 'frame' parameter maximum accordingly. The changes are +fully backwards compatible for other servers. + +More frames are possible if needed but will require further changes to the +client IRAF code to be effective. Allowing creation of more than 16 +frames by the Load panel can be done independently but would also require +numerous code change to XImtool. Please contact site support if there is +a need for this, or for workaround suggestions depending on your +application. + +.SH "MARKERS" + +Although ximtool doesn't do much with markers currently, they are a general +feature of the \fIGterm\fP widget and are used more extensively in other +programs (e.g. the prototype IRAF science GUI applications). XImtool uses +markers for the marker zoom feature discussed above, and also for the panner +and the coords box. All markers share some of the same characteristics, so it +is worthwhile learning basic marker manipulation keystrokes. +.TP 3 +\fBo\fP +MB1 anywhere inside a marker may be used to drag the marker. +.TP 3 +\fBo\fP +MB1 near a marker corner or edge, depending on the type of marker, +resizes the marker. +.TP 3 +\fBo\fP +Shift-MB1 on the corner of most markers will rotate the marker. +.TP 3 +\fBo\fP +Markers stack, if you have several markers and you put one on top of +the other. The active marker is highlighted to tell you which of the +stacked markers is active. If the markers overlap, this will be marker +"on top" in the stacking order. +.TP 3 +\fBo\fP +MB2 in the body of a marker "lowers" the marker, i.e. moves it to the +bottom of the stacking order. +.TP 3 +\fBo\fP +Delete or backspace in a marker deletes it. +.TP 3 +\fBo\fP +Markers have their own translation resources and so the default +keystroke commands will not be recognized when the cursor is in a marker. + +For example, try placing the pointer anywhere in the coords box, then press +MB1 and hold it down, and drag the coords box marker somewhere else on the +screen. You can also resize the coords box by dragging a corner, or delete +it with the delete or backspace key. (The Initialize button will get the +original coords box back if you delete it, or you can reset the toggle in +the control panel). + +.SS "PANNER MARKER" + +The panner window always displays the full frame buffer. Try setting the +frame buffer configuration to a nonsquare frame buffer (e.g. imtcryo) and +then displaying a square image (e.g. dev$pix) and the panner will show you +exactly where the image has been loaded into the frame. + +The panner window uses two markers, one for the window border and one to +mark the displayed region of the frame. Most of the usual marker keystrokes +mentioned below apply to these markers as well, e.g. you can use MB1 to +reposition on the panner window within the main image display window, or to +drag the region marker within the panner (pan the image). Resizing the +region marker zooms the image; this is a non-aspect constrained zoom. The +panner window itself can be resized by dragging a corner with MB1. Typing +delete or backspace anywhere in the panner window deletes the panner. + +A special case is MB2. Hitting MB2 anywhere in the panner window pans the +image to that point. This is analogous to hitting MB2 in the main display +window to pan the image. + +The panner marker can be disabled by defining the \fIdisplayPanner\fP +GUI resource, its size and location can be controlled using the +\fIpannerArea\fP and \fIpannerGeom\fP GUI resources respectively. + +.SS "MAGNIFIER MARKER" + +The magnifier marker can be used to zoom in on a small area around the +cursor. +It will be updated as the cursor moves but only for small motions (either +mouse movement or with the cursor movement keystrokes) to minimize the +impact on the system. The zoom factor is expressed as some fraction of the +size of the magnifier marker itself. The default zoom is 4, i.e. the area +in the marker represents and area in the image that's one-fourth the size +of the marker. Other zoom factors may be selected using the popup menu +created by hitting MB1 in the marker. + +By default the magnifier marker is not visible, to toggle it select the +\fIMagnifier\fR option from the \fIOptions\fR menubar button. Alternatively, +for just a quick look holding down the Shift and MB2 buttons will display +the marker until the button is released. + +The magnifier marker can be disabled by defining the \fIdisplayMagnifier\fP +GUI resource, its size and location can be controlled using the +\fImagnifierArea\fP and \fImagnifierGeom\fP GUI resources respectively. + +.SS "COORDS BOX MARKER" + +XImtool provides a limited notion of world coordinates, allowing frame +buffer pixel coordinates and pixel values to be converted to some arbitrary +linear client-defined coordinate system. The coords box feature is used to +display these world coordinates as the pointer is moved about in the image +window. + +The quantities displayed in the coords box are X, Y, and Z: the X,Y world +coordinates of the pointer, and Z, the world equivalent of the pixel value +under the pointer. All coordinate systems are linear. The precision of a +displayed quantity is limited by the range of values of the associated raw +frame buffer value. For example, if the display window is 512x512 only 512 +coordinate values are possible in either axis (the positional precision can +be increased however by zooming the image). More seriously, at most about +200 pixel values can be displayed since this is the limit on the range of +pixel values loaded into the frame buffer. If a display pixel is saturated a +"+" will be displayed after the intensity value. + +The coords box is a text marker, it can be moved and resized +with the pointer like any other marker. The coords box marker can be +disabled by defining the \fIdisplayCoords\fP GUI resource, its location +can be controlled by the \fIwcsboxGeom\fP GUI resource. + +.SS "MARKER MENU OPTIONS" + +Except for the panner and WCS markers, MB3 (mouse button 3) calls up the +marker menu providing a limited set of functions common to all markers: +.TP 3 +\fBo +Zoom\fP does an equal aspect zoom of the region outlined by the marker. In +this way you can mark a region of the image and zoom it up. +.TP 3 +\fBo +Fill\fP exactly zooms the area outlined by the marker, making it fill the +display window. Since the marker is not likely to be exactly square, +the aspect ratio of the resultant image will not be unitary. +.TP 3 +\fBo +Print\fP prints the region outlined by the marker to the printer or file +currently configured by the Print Panel. +.TP 3 +\fBo +Save\fP saves the region outlined by the marker to the file currently +configured by the Save Panel. +.TP 3 +\fBo +Info\fP prints a description of the marked region. The text is printed in +the Info Panel. +.TP 3 +\fBo +Unrotate\fP unrotates a rotated marker. +.TP 3 +\fBo +Color\fP is a menu of possible marker colors. +.TP 3 +\fBo +Type\fP is a menu of possible marker types. This is still a little buggy +and it isn't very useful, but you can use it to play with different +types of markers. +.TP 3 +\fBo +Destroy\fP destroys the marker. You can also hit the delete or backspace +key in a marker to destroy the marker. + +.SS "RULER MARKERS" + +Holding down the Ctrl key and the Left-Mouse-Button while moving +the mouse will drag out a "ruler marker" measuring the distance from the +initial point to the current mouse position. Releasing the Ctrl key before +lifting the mouse button will leave the marker on the display, otherwise +it will be erased automatically once the mouse button is released. Any +number of ruler markers can be created in the frame. + +Distances are measured by default in image logical pixels however +the Right-Mouse-Button can be used inside the marker to popup a menu of +options: + +.TP 20 +.B Sticky +By default rulers are destroyed whenever the display +changes due to a pan, zoom, flip, or frame change. +This option will make the ruler "sticky" so it will +not be erased, subsequent use of the menu to shows +this option to be "UnSticky" to remove this feature. +.TP 20 +.B Units +Sub-menu to select the units of the display. If the +ISM is enabled and a WCS is present in the image and +selected as one of the readout options, distances may +also be read out in units of arcseconds, arcminutes, +or degrees instead of the default logical pixels. All +markers created after the unit change will readout in +the new units as their default. +.TP 20 +.B Color +Select the color of the marker. +.TP 20 +.B Draw into Frame +(\fINot Yet Implemented\fP) Draw the marker as overlay +graphics in the frame. Doing so will retain the +marker when printing a hardcopy of the display. +.TP 20 +.B Destroy +Destroy the marker. + +The marker can also be destroyed by hitting the Delete or Backspace key +while the cursor is in the marker. There is presently no way to move the +marker to a new position in the frame. + +.SH "REAL-TIME WCS/PIXEL-VALUE READOUT" + +XImtool now has the ability to display the actual pixel value of an image +(as well as the scaled value previously shown) and the cursor position in +image WCS values (e.g. RA/DEC, GLAT/GLONG, etc). This is done using an +external task (the 'ism_wcspix.e' binary in the new distribution) to +access the image and pass the coordinate/pixel information to the GUI. + +WCS readout is enabled by default but can be toggled or reset using the +\fIWCS/Pix\fP button on the Coords tab in the control panel or the \fIISM\fP +toggle on the alt-gui menubar. When enabled, images currently in the +server or subsequently displayed will be passed to the external process +where they are cached for access. Cursor movements generate an event that +maps the current frame buffer position to a position in the cached image. +The ISM (ISM is Image Support Module) task then reads the image to +determine the pixel value (or a small table of values around the current +position), and computes one or more coordinates from the image position. +The ISM task also has access to the associated BPM images and can +optionally return bad pixel information during the cursor readout. + +By default, the logical and world image coordinates are displayed to both +the Coords panel readout as well as the main display window wcsbox text +marker. Alternate coordinate systems (e.g. transformation of equatorial +to galactic coordinates or some other sky system, physical coords, +amplifier coords, etc) can be selected for display by hitting the +\fIOptions\fP toggle on the Coords panel. Available coordinate systems are +chosen using the \fIType\fP menu on the panel, the readout format +(sexigesimal, degrees, etc) using the \fIFormat\fP menu, and the display to +the current panel or main image window using the remaining toggles for +each WCS. Up to four systems may be displayed at one time, the coordinate +panel and wcsbox marker will adjust size automatically depending on the +display. + +By selecting the \fIBPM Data\fP toggle from the Coords.Options panel ximtool +is able to flag pixels in images with an associated bad pixel mask. This +bad pixel mask is currently assumed to be named in the image header "BPM" +keyword by convention. If the cursor passes over a bad pixel in the mask, +the Coords bpm display as well as the main window wcsbox will change to a +red background color. Only the Coords display will show the value, any +non-zero value will be flagged with the color change. + +With the ISM enabled the Compass indicator will display a set of arrows +showing North-East if a WCS is available, otherwise just the current X-Y +axes are shown. The pixel table will display actual pixel values from the +image, with the ISM off the pixel table displays the scaled image values +from the frame buffer. + +.SH "FREEZING CURSOR READOUT" + +Holding down the Alt key will now freeze the cursor display readout +and draw crosshairs on the screen at the last position. This can be used +for example to position the cursor but then allow the cursor to be moved to +another window (to enter text, start a program, whatever) without losing +the position information displayed on the screen. + +.SH "CUT-GRAPHS" + +XImtool now has the ability to display horizontal and vertical +cut-graphs of the display, these appear as "flip-out" panels that appear +on the bottom and right side of the main display window and are controlled +by the small "H" and "V" buttons in the lower right corner of the window. +When both panels are enabled the corner area of the display also shows an +options panel for the graphs. Current options are: + +.TP 20 +.B Better Speed +Draw the graphics so they update at the fastest possible rate. This is +done by subsampling pixels to produce a smoother graph but without sacrificing +too much accuracy. +.TP 20 +.B Better Accuracy +Draw the graphics using all screen pixels to produce the most accurate +display. On fast modern machines this can be enabled with no apparent +loss of speed, however older machines may wish to use this only +occassionally to limit any lag in the cursor tracking. +.TP 20 +.B Image Pixels +(\fINot Yet Implemented\fP) +.TP 20 +.B Jump Cursor +If enabled, large jumps of the cursor do not update the graphics display, +small movements around an object of interest will update the display +continuously. +.TP 20 +.B Smooth Cursor +If enabled, all cursor movements cause the display to be updated. This +is another option that can be set safely on faster machines but will +cause a delay on slower ones. +.TP 20 +.B Graphics Cursors +If enabled, the graphics cursors in either of the plots are active and +can be used to update the cursor readout on the main image window and the +complementary cut-graph. This can be used for example to freeze +the cursor in the main display using the Alt key (see above), then moving +to one of the graphics windows to perform cut graphs in only one axis. + +Graphs are (currently) drawn using only the scaled display values +to avoid complications of accessing multiple images in a mosaic display. Both +plots are labeled using the frame z1/z2 values and contain cursor indicators +which update contuously. + +.SH "PEAK-UP CURSOR CENTROID POSITIONING" + +Several new keystroke commands are available to reposition the +cursor to a centroid or min/max pixel value within a bounding box of the +cursor position, allowing you to approximate the position with the mouse +and fine tune it quickly before typing the application keystroke command. +The initial box size is controlled with a \fIcenterBoxSize\fP GUI resource +(defaults to 5 pixels) but can be adjusted interactively using the \fBCtrl-[\fP +and \fBCtrl-]\fP commands to descrease/increase the box size respectively. A +marker will flash briefly to indicate the box size. + +The \fBCtrl-0\fP (zero) key finds either a centroid or the local maximum +pixel value within this box region, \fBAlt-Ctrl-0\fP (zero) will find the local +minimum value. In either case the cursor is reposition to the computed +value. The default peak-up action is to find the centroid position in the +box however this can be changed to find the max pixel by selection the +"\fICentroid Peaks\fP" option from the main Display control panel or by +resetting the \fIpeakCentroid\fP GUI resource (defaults to True). + +Centroiding is done using only the scaled screen pixel values and +only pixels above the mean value within the box are used. It works best +if the box size is set appropriately, the centroid position may appear to +drift if the box is too large and includes too many background pixels. + +.SS "Command Summary" +.TP 20 +.B Ctrl-0 (zero) +Reposition to centroid/max-pixel +.sp -0.5 +.TP 20 +.B Alt-Ctrl-0 (zero) +Reposition to min-pixel +.sp -0.5 +.TP 20 +.B Ctrl-[ +Decrease centering box size (min of 5) +.sp -0.5 +.TP 20 +.B Ctrl-] +Increase centering box size + +.SS "Resource Summary" +.TP 20 +.B "peakCentroid = True" +Compute the box centroid position, a 'False' value force the max value +to be used +.sp -0.5 +.TP 20 +.B "centerBoxSize = 5" +Size of the centroid box, used as cursor position +/- this value + +.SH "AUTO-REGISTRATION OF IMAGES" + +The auto-register feature allows you specify a registration of +two or more display frames with an offset. When enabled, this registration +is maintained for all frames in the list if any one of them is panned or +zoomed to a new location in the frame buffer. + +For example, to use this feature do the following: +.RS +.TP 5 +.B 1) +Enable Auto-Register (either on the Control Panel or the toolbar on the +alt-gui) and pan/zoom to some star of interest. +.TP 5 +.B 2) +Use Mouse-Button-2 to center the star in the frame. +.TP 5 +.B 3) +Cycle through the frames and you may see a small shift of the star. For +each frame, position the cursor on the star and type \fBCtrl-o\fP to +offset it to the center. Repeat as necessary. Small corrections will be +cumulatively added so you can use the \fBCtrl-0\fP (Ctrl-zero) peak-up +command to centroid each object in the frame before the \fBCtrl-o\fP offset. +.TP 5 +.B 4) +Pan around the image in one display frame, then switch frames and the new +frame should also be panned to the new image with the proper offset. +.TP 5 +.B 5) +A \fBCtrl-a\fP command will toggle the feature, offsets are only allowed +when autoreg is enabled. +.RE +.LP +Hitting \fBRegister\fP will zero the offsets, as will toggling the +auto-register function. What you should see is the object centered in +the frame and as you blink through it remains registered but the panner +box marker is moving around. Drag the panner around and all frames +still remain registered with the given offset. The control/info panels +now display what the offset is for each frame. + +The register display list is shared with the blink list and can +be set using the Display control panel. By default all frames are included +in the list. For accessing more than four frames, use the box icon in +the Blink/Register box of the Display control panel to bring up a new window +with access to all 16 available frames. + +.SS "Command Summary" +.TP 20 +.B Ctrl-o +Set the registration offset from center +.sp -0.5 +.TP 20 +.B Ctrl-a +Toggle the Auto-Register feature + +.SH "CONTROL PANEL" + +XImtool has a control panel which can be used to exercise most of the +capabilities the program has for image display. The control panel can be +accessed either via the \fBOptions\fP menu from the main window menubar, or by +pressing the leftmost button in the row of buttons at the upper right side +of the display in the standard GUI (in the alternate GUI the \fIControl +Bar\fP accessed by the rightmost button on the menubar provides widgets +for selecting the desired control panel). + +The separate windows previously used for Control/Print/Load/Save/etc +have now been integrated into a single window with the appropriate control +panel selectable with a Tab widget. There are also new Tab panels for +setting the frame tile configuration (see below), more detailed information +on the server status, and selecting the WCS readout options (see below). + +.SS "VIEW CONTROLS" + +The \fBFrame box\fP will list only the frame buffers you currently have +defined. Currently, the only way to destroy a frame buffer is to change the +frame buffer configuration, new frame buffers (up to 16) will be created +automatically if requested by the client. The number of frame buffers +created at startup can be controlled using the \fI-nframes\fP command-line +switch or the \fIdefNFrames\fP resource. + +The \fBtext display\fP window gives the field X,Y center, X,Y scale +factors, the X,Y zoom factors, and the frame offset used in +Auto-Registration. The scale factor and the zoom factor will be the same +unless \fIautoscale\fP is enabled. The scale is in units of display pixels +per frame buffer pixel, and is an absolute measure (it doesn't matter +whether or not autoscale is enabled). Zoom is relative to the autoscale +factor, which is 1.0 if autoscaling is disabled. This information is also +presented in the Info panel. + +The numbers in the \fBZoom box\fP are zoom factors. Blue numbers zoom, red +numbers dezoom. \fIZoom In\fP and \fIZoom Out\fP may be used to go to +larger or smaller zoom factors, e.g. \fICtrl-5\fP followed by "Zoom In" +will get you to zoom factor 10. Specific zoom factors may also be +accessed directly as Control keystrokes, e.g. Ctrl-5 will set zoom factor +5. \fICenter\fP centers the field. \fIToggle Zoom\fP toggles between the +current zoom/center values, and the unzoomed image. + +\fIAspect\fP recomputes the view so that the aspect ratio is 1.0. Aspect +also integerizes the zoom factor (use the version in the View menu if you +don't want integerization). + +\fIFit Frame\fP makes the display window the same size as the frame +buffer. Note that autoscale has much the same effect, and allows you to +resize the display window to any size you want, or view images too large +to fit on the screen. + +.SS "ENHANCEMENT CONTROLS" + +At the top is a scrolled list of all the available colormaps. Click on the +one you want to load. You can add your own colormaps to this list by +defining the \fIcmap[12]\fP or \fIcmapDir[12]\fP command line flags or +application resources. + +The two sliders adjust the contrast (upper slider) and brightness (lower +slider) of the display. The \fIInvert\fP button inverts the colormap +(multiples the contrast by -1.0). Note that due to the use of the private +colormap the sliders are a bit sluggish when dragged to window the +display. If this is annoying, using MB3 in the display window is faster. + +The \fINormalize\fP button (on the bottom of the control panel) will +normalize the enhancement, i.e. set the contrast and brightness to the +default one-to-one values (1.0, 0.5). This is the preferred setting for +many of the pseudocolor colortables and for private colormaps loaded from +disk images. The \fIInitialize\fP button does a reset of the server. + +.SS "BLINK CONTROLS" + +\fIBlink frames\fP is the list of frames to be blinked. When blink mode is +in effect ximtool just cycles through these frames endlessly, pausing +"blink rate" seconds between each frame. The same frame can be entered in +the list more than once. To program an arbitrary list of blink frames, +hit the Reset button and click on each blink frame button until it is set +to the desired frame number. The main control panel allows only the +original four frames to be specified in the blink list, however access to +the full list of 16 frames now supported is gained using the box icon +button next the the \fIReset\fP button to bring up a new control panel. + +The \fIBlink Rate\fP can be adjusted as slow or as fast as you want using +the arrow buttons. If you set the blink rate small enough it will go to +zero, enabling single step mode (see below). + +The \fIRegister\fP button registers all the blink frames with the current +display frame. Frames not in the blink list are not affected. + +The \fIMatch LUTs\fP button sets the enhancement of all blink frames to +the same values as the display frame. Frames not in the blink list are not +affected. + +The \fIBlink\fP button turns blink on and off. When the blink rate is set +to zero the Blink button will single step through the blink frames, one +frame per button press. + +\fBNOTE:\fP You can blink no matter what ximtool options are in effect, +but many of these will slow blink down. To get the fastest blink you may +want to turn off the panner and coords box, and match the LUTs of all the +blink frames. All the ximtool controls are fully active during blink +mode, plus you can load frames etc. + +.SS "OPTIONS:" +.TP 5 +.B "Panner" +Toggles whether to display the Panner marker. +.TP 5 +.B "Magnifier" +Toggles whether to display the Magnifier marker. +.TP 5 +.B "Coords Box" +Toggles whether to display the coordinate box marker. +.TP 5 +.B "Autoscale" +If autoscale is enabled then at zoom=1, the frame buffer will be +automatically scaled to fit within the display window. With autoscale +disabled (the default), the image scale is more predictable, but the +image may be clipped by the display window, or may not fill the display +window. +.TP 5 +.B "Antialias" +When dezooming an image, i.e., displaying a large image in a smaller +display window, antialiasing causes all the data to be used to compute +the displayed image. If antialiasing is disabled then image is +subsampled to compute the displayed image. Antialiasing can prevent +subsampling from omitting image features that don't fall in the sample +grid, but it is significantly slower than dezooming via subsampling. +The default is no antialising. +.TP 5 +.B "Tile Frames" +The default display mode is to view one frame at a time. In tile frames +mode, 2 or 4 frames may be viewed simultaneously in the display window. +All the usual operations (zoom and pan, colortable enhancement, cursor +readback, etc.) still work for each frame even when in tile frames mode. +.TP 5 +.B "Warnings" +The warnings options toggles whether you see warning dialog boxes in +situations like overwriting an existing file, clearing the frame +buffer, etc. +.TP 5 +.B "Centroid Peaks" +If enabled, the \fBCtrl-0\fP keystroke will reposition the cursor to the +computed centroid of the centroiding box, otherwise the cursor is +repositioned to the local maximum value within the box. + +.SH "LOAD PANEL" + +The Load Panel allows you load images from disk directly to the frame +buffer, this is analogous to loading an image on the command line except +that browsing is possible. At present recognized formats include IRAF OIF +format (i.e. \fI.imh\fP extension), simple FITS files, GIF, and Sun +rasterfiles. The task will automatically sense the format of the image +and load it appropriately. Images with private colormaps (such as GIF) +will be loaded using the private colormap (meaning that changing the +brightness/contrast enhancements will render an apparently random-colored +image), all others will be loaded with a grayscale colormap. + +When loading new images the frame buffer configuration table will be +searched for a frame buffer that is the same size or larger than the new +image size, if no frame buffer can be found a custom buffer exactly the +size of the image will be created. This means that the image may not fill +the display window when loaded, or you may see a subsection of the image +in the main display window. Setting the \fIautoscale\fP option on the main +Display panel will scale the entire image to fit the main display window, +the full frame buffer will always be visible in the Panner marker window. + +Images with more colors than can be displayed will automatically be +quantized to the number of available colors before display. +If the \fIAuto Grayscale\fP button is enabled any image colormap will be +converted to grayscale and loaded as the standard grayscale colormap. + +Formats which permit pixels larger than 8-bits/pixel will be sampled on +a grid to determine an optimal range in the data to be used to compute a +linear transformation to the number of display colors. This is the same +z-scale sampling and transformation used by the IRAF \fIDISPLAY\fR task +when computing the \fIz1/z2\fP values and provides a much better initial +display than simple truncation to 8-bits. This scaling will be done +automatically using a grid of \fINsample\fP points if the \fIZscale\fP +option is enabled. Otherwise, if the \fIZrange\fP option is set the full +data range will be used to scale the image. Lastly, is neither \fIZscale\fP +nor \fIZrange\fR are enabled, the z1/z2 values may be set explicitly using +the options box. + +.TP 5 +.B "Directory Browsing" +The load panel contains a list of files in the current directory that may +be selected for loading by selecting with left mouse button. If the file +is a directory the contents of the new directory will be loaded, if it's a +plain file an attempt will be made to load it as an image otherwise an +error popup will appear. Directories in the list are identified with a +trailing '/' character, you will always see any subdirectories listed even +if a filter is specified. + +The \fIRoot\fP button will reset the current directory to the system root +directory. The \fIHome\fP button will reset the current directory to the +user's login directory, the \fIUp\fP button moves up one directory level, and +\fIRescan\fP reloads the file list by rescanning the directory. The current +working directory is given below the file selection window. + +Selecting the \fIList Image Headers\fP option will change the display text +to list all images in the current directory which match the filename filter. +Directory browsing is disabled while this option is in effect. +.TP 5 +.B "File Patterns" +By default all files and directories will be listed. You may specify a +filter to select only those files with a given extension such as +"*.fits" using the \fIFilter\fP text box. Directories will +always be seen in the list and are identified with a trailing '/' +character. Any valid unix pattern matching string will be recognized, +multiple templates may be specified in a comma-delimited list such as +"*.imh,*.fits" to list both OIF and FITS images. +.TP 5 +.B "Direct File Load" +If you know exactly which file you wish to load, you may enter its +name in the \fILoad File\fP text box and either hit or the Load button +to load it. An absolute or relative path name may be given, if a simple +filename is specified it will be searched for in the current working directory. +.TP 5 +.B "Frame Selections" +By default images will be loaded into the current frame, you may choose +a different frame using the Frame menu button to select from the +available frames. + +.SH "SAVE PANEL" + +The Save Panel lets you save the current contents of the main display window +to a disk file (including the Panner/Coords markers, or overlay graphics +displayed by the client program). Presently, only the contents of the main +display window may be saved, there is no facility for saving the undisplayed +contents of the entire frame buffer other than to enable the autoscale feature +or zoom out so the whole buffer is in the display window. A limited number +of formats are currently available, others will be added in future versions. +.TP 15 +.B "File Name" +The File Name text box allows you to enter the file name of the saved +file. A "%d" anywhere in the name will be replaced by a sequence number +allowing multiple frames to be saved with unique names. +.TP 15 +.B "Format" +The Format box allows you to choose the format of the image to be +created however not all formats are currently implemented. The EPS format +is similar to the \fIPrint\fR option however there is no annotation. +.TP 15 +.B "Color" +The Color box lets you choose the color type of the image to be +created. The options will change depending on the format, e.g. FITS +doesn't allow color so no color options will be enabled. Formats which +allow 24-bit images will be written using the current colormap after +converting to a 24-bit image, pseudocolor images will be written with +the current colormap. + +.SH "PRINT PANEL" + +The Print Panel allows you dump the contents of the main display window as +Encapsulated Postscript to either a named printer device or to a disk file. +The \fIPrint To\fP selects the type of output, the \fIPrint Command\fP box +will adjust accordingly, either as a Unix printer command or as a file name. +A "%d" anywhere in the name for disk output will be replaced by a sequence +number allowing multiple frames to be saved with unique names. Selecting +printers from the installed list will automatically change the command to be +used to generate the output. This command does not necessarily need to be a +printer command, the printer configuration file lets you define any command +string to process the image. + +.SS "COLOR OPTIONS" + +The Color box lets you choose the color type of the image to be created. +PseudoColor or 24-bit postscript will be created using the current colormap +and enhancements. + +.SS "POSTSCRIPT OPTIONS" + +.TP 15 +.B "Orientation" +Set the page orientation. +.sp 0.5 +.TP 15 +.B "Paper Size" +Select the paper size to be used. +.sp 0.5 +.TP 15 +.B "Image Scale" +Set the scale factor used to compute the final image size. No checking is +done to make sure the image will fit correctly on the page. + +.SS "PROCESSING OPTIONS" +.TP 5 +.B "Auto Scale" +Toggles whether or not the image is automatically scaled +to fit the page. If not enabled, the image scale will be used to +determine the output image size, otherwise the image will be scaled down +(if necessary) to fit on the page. +.TP 5 +.B "Auto Rotate" +Determines whether or not the image will be rotated to fit +on the page. When set, an image larger than the current orientation +will be rotated and possibly scaled to fit the page, otherwise the image +may be scaled so that it fits in the current orientation. +.TP 5 +.B "Max Aspect" +Automatically increases the scale so the image fills the page in the current +orientation. +.TP 5 +.B "Annotate" +The annotate option toggles whether or not the final file includes +annotation such as the image title, a colorbar, and axis labels. There is +currently no option for partial annotation. + +.SS "ANNOTATION OPTIONS" + +.TP 5 +.B "Annotate" +Selects whether Postscript image is to be annotated. +.B "Title" +Annotate with a title on the top of the image. +.B "Borders" +Annotate with borders surrounding the image giving image coordinates. +.B "Colorbar" +Annotate with colorbar at the bottom of the image +.B "Title String" +Title string to use when \fItitle\fR is selected. The special value +\fIimtitle\fR will force the title to be the currently displayed image title, +otherwise it will be this user-selected field. + +.SS "PRINTER SELECTION" + +The printer selection list lets choose the printer to be used. The printer +configuration file is /usr/local/lib/ximprint.cfg by default or may be reset +using the \fI-printConfig\fP command line switch or \fIprintConfig\fP +resource. The format of the file is simply + + \fIname\\tcommand\fP + +The \fIname\fP value is what appears in the selection list and may be more +than a single word, the \fIcommand\fP can be any command that accepts EPS +input from a pipe, the two fields must be separated by a tab character. +Normally the command +will be a simple \fIlpr -Pfoo\fP or some such, but can also include converters +or previewers. At most 128 printer commands may be used. + +.SH "INFO PANEL" + +The Info panel was revised to provide a greater variety of status +information. The type of output is controlled by the toggle buttons on +the bottom of the frame, however all output is kept current as the program +runs. Current info options include: +.RS +.TP 15 +.B Frame +Info about the current display frame. +.TP 15 +.B Server +Info about various server options, e.g. colormaps, memory model, +antialias type, etc. +.TP 15 +.B Clients +Show currently connected clients. Lists available connection channels +and active ISM clients. +.TP 15 +.B WCS +List all WCS and mappings for the current frame. +.TP 15 +.B ISM +Log of various ISM status messages. +.TP 15 +.B Imtoolrc +Show current frame buffer configuration table. +.RE + +.SH "TILE PANEL (NEW)" + +With the additional frames, the default tiling scheme proved inadequate. +A new control panel Tile frame now allows you to select from a number of +tile configurations, the list of frames to be tiled, a \fIfill style\fP +(left-to-right or top-to-bottom), as well as optional labels for each of +the tiles (frame number, image title or image name). + +Tile configuration will make use of all frames currently selected in the +\fITile Frame\fP group in the following manner: +.RS +.TP 15 +.B "Disabled" +Do not tile the display. +.TP 15 +.B "Manual" +Tile according to \fIManual Configuration\fP settings. +.TP 15 +.B "Best" +Optimize layout for frame buffer aspect. +.TP 15 +.B "Square" +Always force a square layout (2x2, 3x3, etc). +.TP 15 +.B "Horizontal" +Preferentially tile horizontally (6 frames ==> 3x2). +.TP 15 +.B "Vertical" +Preferentially tile vertically (6 frames ==> 2x3). +.TP 15 +.B "One Row" +Tile all in one row (Nx1). +.TP 15 +.B "One Column" +Tile all in one column (1xN). +.RE + +.SH "COORDS PANEL (NEW)" + +The Coords Panel is meant to provide a full-featured readout as well as +serve as a control panel for the various options. The display window +contains the image name/title and frame buffer info, and a selection of +coordinate and image pixel readouts. The intent is provide more infor- +mation than can fit comfortably on the main image window while still +taking up as little screen space as possible. To this end the "Options" +button is used to hide most of the feature controls when not in use (see +below). Other options on the main panel include: + +.RS +.TP 15 +.B WCS/Pix +Toggle the real-time WCS/pixel readout capability (i.e. the ISM used +to access the disk image). This must be enabled for certain other +options to work. +.TP 15 +.B "Pix Table" +Open a panel showing an image pixel table. The panel shows an array +of pixels surrounding the cursor position, either the actual pixel +values if the ISM is enabled, or scaled display values otherwise. The +size of the table may be selected from the menubar. +.TP 15 +.B Header +Display the current image header in a new panel. Both the entire image +header as well as WCS-specific parts of the header are available under +different tabs. This option is only active when the ISM is enabled. +.TP 15 +.B Compass +Draw an orientation compass on the display panner. If the ISM is enabled +and a WCS is present in the header, the compass will indicate N/E +according to the WCS, otherwise the X/Y axes of the image are drawn. +.TP 15 +.B Options +Pop-up/down the option control portion of the panel. When enabled, the +Coords Panel will change size to reveal the options which can be +changed (explained below). +.RE + +.LP +The "Readout Values" group controls the selection of WCS type, location +and format to be displayed. The "Type" menu always provides a selection +of the image Logical, Physical or World systems, which may be identical +depending on the image header. If a World system is supplied in the image +addition entries for transformations to other sky systems, (e.g. FK5 to +ICRS or galactic/ecliptic) will also be available. The selection is +dependent on whether the ISM is running as well as WCS information present +in the image. The "Format" menu allows the use to select a sexigesimal +display, conversion to degrees or radians, or whichever format is most +natural for the coordinate being display. The two toggle to the right +control whether this WCS is to be displayed on the Panel (i.e. the Coords +Panel window) or the ImgWin (i.e. the text marker on the main image +window). + +Other options below this group control whether or not to display the WCS +labels, the image name/title, and frame buffer information in the main +Coords Panel display. The "BPM Data" option controls whether or not the +ISM will try to map any bad-pixel mask associated with the image. If +enabled, a bad-pixel mask specified by the image header BPM keyword +(currently fixed by convention but this may be selectable later) will be +mapped along with the image. Aside from wcs/pixel readouts at each cursor +position, any BPM data values found will also be displayed. A non-zero +value will cause the BPM field of the Coords Panel readout as well as the +main image window marker to switch to a red background color to flag the +value. + +The last box allows the user to specify a different ISM task to be +executed or to reinitialize the current one. In most cases this won't +need to be changed, however a custom ISM could be started when using +special data formats. This command string can also be controlled by the +application "ism_task" resource. + +.SH "TCLSHELL" + +The \fITclShell\fP allows the user to type commands directly to the TCL +interpreter, letting you send messages to the object manager or execute +specific procedures in the TCL code that makes up the GUI. It is used as a +development or debugging tool for the GUI, but for an example of what it +does, bring it up and type a command such as + + \fIsend fileButton set background red\fP + + +.SH "COLORMAP SELECTION" + +By default XImtool will display images using either a grayscale colormap +(e.g. if loaded by a client), or a private colormap when loading an image +from disk that contains a colormap. Each frame defines its own colormap so +you can define different colormaps or enhancements for each frame, they +will change automatically as you cycle through the frames. + +.SS "BUILTIN COLORMAPS" + +Once loaded, the colormap may either be changed using the builtin colormap +menu under the View menu button on the main window, or from the +Enhancement box on the control panel. XImtool has about a dozen colormap +options builtin, other user-defined colormaps may optionally be loaded. +It is not presently possible to save colormaps for later use. + +.SS "USER-DEFINED COLORMAPS" + +The \fIcmap[12]\fP and \fIcmapDir[12]\fP resources (or command line +arguments) are used to tell which specific colormaps to make available or +where to look for colortables respectively. The colortables are loaded +when ximtool starts up, or when it is reinitialized (e.g. by pressing the +Initialize button in the control panel). XImtool will ignore any files in +the colormap directory which do not look like colortables. New +colortables will also be added automatically for each image loaded from +disk. + +The format of a user lookup table is very simple: each row defines one +colortable entry, and consists of three columns defining the red, green, and +blue values scaled to the range 0.0 (off) to 1.0 (full intensity). + + R G B + R G B + (etc.) + +Blank and comment lines (lines beginning with a '#') are ignored. + +Usually 256 rows are provided, but the number may actually be anything in +the range 1 to 256. XImtool will interpolate the table as necessary to +compute the colortable values used in XImtool. XImtool uses at most 201 +colors to render pixel data, so it is usually necessary to interpolate the +table when it is loaded. + +The name of the colortable as it will appear in the XImtool control panel +is the root name of the file, e.g., if the file is "rainbow.lut" the +colortable name will be "rainbow". Lower case names are suggested to avoid +name collisions with the builtin colortables. Private colormaps for disk +images will be have the same name as the image loaded. If the same +colortable file appears in multiple user colortable directories, the first +one found will be used. + +.SS "MINIMIZING COLORMAP CONFLICTS" + +The Gterm widget used by XImtool (i.e. the main display window) uses a +private global colormap for display, this allows it to have greater +control over color cell allocation but can occasionally also cause +"colormap flashing" as the mouse is moved in and out of the application. +The problem here is that in a system with only an 8-bit colormap (256 +colors) all applications must compete for colors, programs such as XV or +Netscape allocate colors from the default colormap leaving only a few free +cells for XImtool. Since XImtool defines a private global colormap it is +still able to allocate the needed cells rather than failing, but it's +allocating cells already used by other applications. As the mouse moves +out of the ximtool window those cells are once again defined in terms of +the default colormap, so the ximtool window is then using a different +colormap. It is this switching of the colormap context that causes the +flashing to occur, but there are a few things that can be done to help +minimize this. + +XImtool logically defines 200 colors which the client image display +program can use to render pixels. However, ximtool may or may not +actually allocate all of those colors. By default it currently allocates +only about 192 colors, to reserve 64 colors for the other windows on the +screen. You don't normally notice this as 1) usually the default screen +colormap has enough free cells to allow ximtool to match the colors, and +2) the extra unallocated cells correspond to the brightest pixels in the +rendered image, and these colors may not be used or usually only +correspond to a few small regions near the saturated cores of bright +objects. + +You can eliminate this problem by setting the \fIbasePixel\fP resource to +e.g. 48 instead of 64, which will let the gterm widget allocate all 200 +colors. However, this isn't recommended for normal use as it will +increase the likelihood of colormap flashing. If you change +\fIbasePixel\fP, either restart the X server or set the resource +\fIcmapInitialize\fP=\fITrue\fP to force the gterm widget to update its +global colormap resource in the X server. The colormap resource may also +be deleted by using the command +.sp 0.7 + \fIxprop -root -remove GT_image\fP +.sp 0.7 +These options may also be set on the command line when first starting up. + +In general one can set the Gterm widget resources \fIbasePixel\fP and +\fImaxColors\fP to specify the region of colormap space to be used for +image display. If you set \fImaxColors\fP to a small value, the 200 +logical colors defined by the widget will be mapped by the imtool color +model into whatever number of colors are actually available to the +widget. For example, in the default setup, 200 color values are really +being mapped into 192 color cells used for display, the remaining colors +are used for buttons, menus etc and are allocated from the default +colormap by the X toolkit when the application starts up. + +Even though the Gterm widget uses a private colormap, it is a private +\fIglobal\fP colormap meaning that all Gterm widgets share the same +colormap. An example of colormap sharing in ximtool is the main image +window and the colorbar window. These are two separate gterm widgets that +share the same colormap. They have to share the same colormap, as +otherwise when you windowed the main image window the colorbar window +would not accurately reflect the modified colormap. By default two +separate ximtools would also share the same colormap meaning contrast +enhancements in one window would affect the other. By resetting the +\fIcmapName\fP command line option or resource you can change the name of +the private colormap used causing separate ximtools to use different +colormaps, but note this also creates colormap flashing between the two +windows that cannot easily be avoided. By setting the \fIcmapName\fR to +"default" the widget will allocate colors from the default colormap, but +this is of little use at the moment. + +There are a number of other resources that can be used to modify the +behavior of the Gterm widget color management scheme, but these are the +most useful ones. For question and further information feel free to +contact \fIiraf@noao.edu\fP. + + +.SH "DISPLAY CLIENT CONNECTIONS" + +XImtool allows display clients to connect in any of the following ways: +.TP 5 +.B "fifo pipes" +The traditional approach. The default global /dev/imt1[io] +pipes may be used, or a private set of fifos can be specified using the +\fI-fifo\fP command line argument or \fI*fifo\fP resource. Values should +be specified as the root pathname to a pair of fifo pipes whose last +character is 'i' or 'o', these characters will be added automatically when +opening the pipes. For example, to use the default pipes the path would +be specified as simply "/dev/imt1". A value of "none" disables this connection. +.TP 5 +.B "tcp/ip sockets" +Clients connect via a tcp/ip socket. The default port is \fI5137\fP, or a +custom port may be specified using the \fI-port\fP command line switch or +a \fI*port\fP resource. This permits connecting to the server +over a remote network connection anywhere on the Internet. +A port number of 0 (zero) disables this connection. +.TP 5 +.B "unix domain sockets" +Like a tcp/ip socket, but limited to a single host system. Usually faster +than a tcp/ip socket, and comparable to a fifo. By default each user gets +their own unix domain socket, so this option allows multiple users to run +ximtools on the same host without having to customize things. The default +value is "/tmp/.IMT%d", other sockets may be defined using the \fI-unix\fP +command line switch or the \fI*unixaddr\fR resource. Legal values +should be specified as a filename to be used for the socket, up to two "%d" +fields are allowed and will be replaced by the userid. An empty string value +disables this connection. + +By default ximtool listens simultaneously for client connections on all three +types of ports. Clients may connect simultaneously by different +means allowing up to three different displays to be loading at the same +time into different frames. + + +.SS "COMMUNICATIONS PROTOCOL" + +The communications protocol used is a slightly modified version of +that used by the IIS Model 70; other more modern protocols will likely be +supported in the future. The IIS protocol is basically a command packet +stream with a header describing the operation to be performed (select +frame, load display, read cursor, etc), and an optional data packet +containing e.g. pixels. + +Beginning with XImtool V1.3 the protocol was modified even more to allow +extra text at the end of the WCS string to define image mappings and to +better support multiple world coordinate systems within a frame. For +backwards compatability none of the existing IIS protocols were +modified completely, however we take advantage of unused registers to flag +the new features in existing functions (like read/write WCS). The WCS mapping +changes required only that the unused 'x' register be set to indicate the new +behavior was desired, e.g. the wcs text containing the extra mapping data. + +We also added two new WCS calls that allow us to query the WCS version, +or query a WCS by a specific number corresponding to a mapping. The WCS +version query will return a string such as "version=10" which can be parsed +by the client to get a version number '10' (corresponding to version 1.0). + +Because of the added mapping text the WCS string length was increased +from 320 to 1024 bytes, the string length used internally depends on whether +the 'x' register has been set. + +Support for the full 16 frames allowed by the bit-flag 'z' register +in the IIS header packet required the masking values be changed at various +places in the code. This was more a limitation of the initial implementation +than a required change to the protocol. + +A complete summary of the XImtool IIS protocol implementation follows. + + +.SS "IIS PROTOCOL SUMMARY" + +All operations are initiated by sending a +header packet containing a \fIthing id\fR (tid) and \fIsubunit\fR selecting +the function to be performed, optionally followed by data up to 32Kb long. +The IIS header packet used is defined as +.nf + \f(CWstruct iism70 { + short tid; + short thingct; + short subunit; + short checksum; + short x, y, z; + short t; + };\fR +.fi + +The \fIthing count\fR field contains the negative number of bytes of data +that will be sent following the header packet. The IIS header checksum is +computed as +.nf +\f(CW + checksum = 0177777 - (tid + subunit + thingct + x + y + z + t); +\fR +.fi +The four IIS registers are set differently depending on the operation, a +summary of the header packets for each operation is summarized below. +.br + +.KS +.ce 1 +\fBIIS Header Packet Summary\fR +.TS +tab(:); +c c c c c c c c c. +:TID:Subunit:Tct:X:Y:Z:T:Data +.T& +l | l | l | c | c | c | l | l | l |. +:_:_:_:_:_:_:_:_ +Read Data:IIS_READ\fB|\fPPACKED:MEMORY:-NB:x:y:fr:-:NB +Write Data:IIS_WRITE\fB|\fPPACKED:MEMORY:-NB:x:y:fr:-:NB +Read Cursor:IIS_READ:IMCURSOR:-:-:-:-:-:- +Write Cursor:IIS_WRITE:IMCURSOR:-:x:y:wcs:-:- +Set Frame:IIS_WRITE:LUT\fB|\fPCOMMAND:-1:-:-:-:-:2 +Erase Frame:IIS_WRITE \fB|\fP fb:FEEDBACK:-:-:-:fr:-:- + +Old Write WCS:IIS_WRITE\fB|\fPPACKED:WCS:-N:-:-:fr:fb:320 +Old Read WCS:IIS_READ:WCS:-:-:-:fr:wcs:320 + +WCS Version?:IIS_READ:WCS:-:1:1:-:-:320 +WCS by Number?:IIS_READ:WCS:-:1:-:fr:wcs:1024 +New Write WCS:IIS_WRITE\fB|\fPPACKED:WCS:-N:1:-:fr:fb:1024 +New Read WCS:IIS_READ:WCS:-:1:-:fr:wcs:1024 +:_:_:_:_:_:_:_:_ +.TE +.KE + +.TS +l l l. +Where NB = number of bytes expected or written + x = x position of operation in frame buffer coords + y = y position of operation in frame buffer coords + fr = frame number (passed as bitflag (i.e. 1, 2 ,4 8, etc) + fb = frame buffer config number (zero indexed) + N = length of WCS string + wcs = WCS number (usually zero) + Data = the number of bytes of data to be read or written following the header packet. + + IIS_WRITE = 0400000 + IIS_READ = 0100000 + COMMAND = 0100000 + PACKED = 0040000 + IMC_SAMPLE = 0040000 + + MEMORY = 001 + LUT = 002 + FEEDBACK = 005 + IMCURSOR = 020 + WCS = 021 +.TE + +TID fields can be logically OR'd with the PACKED flag indicating the number +of data bytes is exactly \fIthingct\fR bytes long, otherwise \fIthingct\fR +must be specified as half the number of data bytes. In a cursor read, if +the IIS_READ flag is OR'd with IMC_SAMPLE the logical cursor position (i.e. +the last value read or set) is returned immediately, otherwise the server +will wait for a keystroke to be hit before returning a string containing the +(x,y) position, wcs of the read, and the keystroke. When setting the frame +you must send a short integer in the data containing the frame selected. + +.SH "ISM COMMUNICATIONS" + +The ISM (Image Support Module) can be any external task which +connects to XImtool over a socket. Communications are limited to simple +null-terminated text strings. In most cases these strings are just the +standard OBM messages sent to XImtool objects but can also include Tcl +callback code (either ISM-specific callbacks, procedures which can be +added to the callback list for existing XImtool objects, or even new GUI +code to create panels and new objects). + +.SS "ISM SOCKET CONNECTION" + +The ISM first requests a connection to XImtool on a dedicated +socket whose default value is "/tmp/.ISM%d", where the '%d' is replaced +by the userid allowing multiple users on a machine to have independent +sockets. The XImtool 'ism_addr' resource or "-ismdev" command-line option +can be used to change this address, a value of 'none' will disable ISM +communications. The socket may also be set with an ISMDEV environment +variable which will override the resource or command-line options. + +Once a connection request is received, XImtool replies with +a message telling the ISM to reconnect on a different socket, it then +frees the initial connection allowing multiple other ISMs to request +their own connection. The communications between XImtool and the ISM +are carried out entirely over this second negotiated socket. Once connected, +the ISM appears as just another named object which can receive OBM messages. + +.SS "COMMUNICATIONS PROTOCOL" + +Messages from the ISM are written to the connection socket and must +be preceeded by one of the following keywords: +.RS +.TP 15 +.B callback +Negotiate a connection on another socket +.TP 15 +.B ready +Client is ready to begin processing +.TP 15 +.B quit +Client is shutting down and disconnecting +.TP 15 +.B send +Send a message to another object +.RE +.sp 0.8 + +Where messages are of the form: +.RS +.TP 30 +.B connect <\fIname\fP> +Request a connection for the <\fIname\fP> ISM +.TP 30 +.B ready <\fIname\fP> +Reconnection request for the <\fIname\fP> ISM on negotiated socket, ISM is +ready to processing. +.TP 30 +.B send <\fIobj\fP> '{' <\fImsg\fP> '}' +Send <\fImsg\fP> to the named <\fIobj\fP>. The message may be any valid string that +will be understood by the recipient. The object may be any object in +the GUI or OBM (see below). +.TP 30 +.B quit +ISM is shutting down. The named is determined from the communications +channel, ISM is responsible for any cleanup of it's callbacks before +issuing the shutdown. +.RE + +All messages must be null-terminated. XImtool will buffer the text until +a complete message is received. Once an ISM client has delivered a QUIT +message no further messages will be sent the that ISM. + +In OBM terminology the ISM is a named Client class object, where the name +is set in the connection request. Messages sent to the ISM should use +this name, messages sent to "client" are still interpreted to mean the +XImtool client. + +The content of messages delivered to the ISM are totally free-form and may +contain any text the ISM is expected to understand. + +.SS "GUI OBJECTS" + +While the ISM can send a message to any object in the task, there +is a GUI Parameter object called 'ism_msg' designed especially to process +messages from the ISM. The callback in the GUI is expecting a message +beginning with one of the following keywords: +.RS +.TP 15 +.B source +Source message text as Tcl code +.TP 15 +.B alert +Message contains error text to be displayed in the GUI 'alert' box +.TP 15 +.B deliver +Message text should be passed to a callback routine specific to that ISM. +This processing callback may have been previously uploaded. The message text +may be any form the processing callback is expected to understand. +.TP 15 +.B info +Message text is status output intended for the XImtool 'info' panel +(connect/disconnect requests, etc) +.RE + +In all cases the message is expected to be of the form + + <\fIcmd\fP> <\fIism_name\fP> [ <\fIarg1\fP> <\fIarg2\fP> <...> ] + +where is one of the above keywords, is the name of the +ISM sending the message. The remainder of the message is passed as an 'argv' +list to the processing callback uploaded for the ISM. The ISM is responsible +for formatting these messages. + + +.SH ENVIRONMENT +.TP 30 +.B HOME +Specifies user login directory +.sp -0.5 +.TP 30 +.B DISPLAY +Specifies which display screen to use +.sp -0.5 +.TP 30 +.B "IMTOOLRC or imtoolrc" +Frame buffer configuration file +.sp -0.5 +.TP 30 +.B "ISMDEV" +ISM Connection socket + +.TP 30 +.B "DEBUG_IIS" +Debug IIS communications packets +.sp -0.5 +.TP 30 +.B "DEBUG_ISM" +Debug ISM communications packets +.sp -0.5 +.TP 30 +.B "DEBUG_MAPPINGS" +Debug WCS image mappings +.sp -0.5 + +.SH FILES +.TP 30 +.B "/usr/local/lib/imtoolrc" +Default frame buffer configuration file +.sp -0.5 +.TP 30 +.B "/usr/local/lib/ximprint.cfg" +Default printer configuration file +.sp -0.5 +.TP 30 +.B "/usr/local/lib/imtoolcmap" +Default colormap directory +.sp -0.5 +.TP 30 +.B "/dev/imt1i" +Default input display fifo +.sp -0.5 +.TP 30 +.B "/dev/imt1o" +Default output display fifo +.sp -0.5 +.TP 30 +.B "/tmp/.IMT%d" +Default unix display socket +.sp -0.5 +.TP 30 +.B "/tmp/.ISM%d" +Default unix ISM connection socket +.sp -0.5 + +.SH BUGS +Users should report bugs to \fIiraf@noao.edu\fR. + +.SH SEE ALSO +xgterm(1), xtapemon(1) + +.SH COPYRIGHT +Copyright(c) 1986 Association of Universities for Research in Astronomy Inc. diff --git a/vendor/x11iraf/ximtool/ximtool.ps b/vendor/x11iraf/ximtool/ximtool.ps new file mode 100644 index 00000000..336513cf --- /dev/null +++ b/vendor/x11iraf/ximtool/ximtool.ps @@ -0,0 +1,16410 @@ +%!PS-Adobe-1.0 +%%Creator: devps (Pipeline Associates, Inc.) +%%CreationDate: Sun Aug 12 22:32:59 2001 +%%Pages: (atend) +%%DocumentFonts: (atend) + +/X{exch}def +/r{rmoveto}def +/m{moveto}def +/l{lineto}def +/rl{rlineto}def +/lc{yc X xc X l st}def +/mc{yc X xc X m}def +/el{gs /a X def a div 1 X scale cp np a xc 2 div 0 360 arc st gr}def +/ar{cp 7 2 roll np xc 5 1 roll atan 3 1 roll atan X arc st}def +/sp{yc X xc X 6 2 roll yc X xc X 6 2 roll yc X xc X 6 2 roll ct}def +/st{stroke}def +/gs{gsave}def +/gr{grestore}def +/cp{currentpoint}def +/np{newpath}def +/ct{curveto}def +/m0{0 0 moveto}def +/BP{/devps-save save def m0}def +/EP{ +clear devps-save restore +showpage}def +/res 10.000000 def +/V{res neg div 792 add +currentpoint pop X +m}def +/H{res div +currentpoint X pop +moveto}def +/h{res div 0 r}def +/v{res neg div 0 X r}def +/xc{res div}def +/yc{res neg div 792 add}def +/S{X H show}def +/psize 10 def +/height 1 def +/slant 0 def +/FF{findfont X dup 12 div setlinewidth /psize X def + [psize 0 psize height mul slant sin slant cos div mul psize height mul 0 0] + makefont setfont}def +/shade{gs + /dy X def + /dx X def + np m + setgray + 0 dy rl + dx 0 rl + 0 dy neg rl + dx neg 0 rl + closepath + fill +gr}def +1 setlinecap +/R{/Times-Roman FF}def +/B{/Times-Bold FF}def +/I{/Times-Italic FF}def +/Y{/Symbol FF}def +/C{/Courier FF}def +%% Troff special characters not on Symbol font +%% Copyright (C) 1986 by Pipeline Associates, Inc. +%% Version 1.1 +/altRTD 20 dict def +altRTD begin +/s{setcachedevice}def +/C{1000 1000 scale}def +/m{moveto}def +/c{curveto}def +/S{stroke}def +/l{lineto}def +/a{arcto}def +/p{pop}def +/sl{setlinewidth}def +end +/F_Troff 17 dict def F_Troff begin +systemdict /currentpacking known +{/SavePacking currentpacking def true setpacking}if +/PaintType 0 def +/FontType 3 def +/StrokeWidth 0 def +/UniqueID 8277003 def +/FontMatrix [.001000 0 0 .001000 0 0] def +/FontBBox [-12 -105 942 855 ] def +/Encoding 256 array def +/CD 256 1 add dict def +/FontInfo 3 dict def FontInfo begin +/UnderlinePosition -133 def /UnderlineThickness 20 def end +/FontName (Troff) def +0 1 256 1 sub{Encoding exch /.notdef put}for +CD /.notdef{500 0 setcharwidth{}}put +Encoding (1) 0 get /br put +%% bold vertical rule used by tbl +CD /br{ +C +0 0 -.5 -.5 1 1 s +np +.05 sl +0 -.1 m +0 .9 l +{S} +}put +Encoding (2) 0 get /ul put +%% underline used by tbl +CD /ul{ +C +.5 0 -.5 -.5 1 1 s +np +.05 sl +0 -.1 m +.5 -.1 l +{S} +}put +Encoding (3) 0 get /ru put +%% baseline rule +CD /ru{ +C +.5 0 -.5 -.5 1 1 s +np +.05 sl +m0 +.5 0 l +{S} +}put +Encoding (4) 0 get /vr put +%% vertical rule +CD /vr{ +C +0 0 -.5 -.5 1 1 s +np +.05 sl +m0 +0 1 l +{S} +}put +Encoding (5) 0 get /sq put +%% square +CD /sq{ +C +.5 0 -.5 -.5 1 1 s +np +.05 sl +0 .25 m +0 .5 rl +.5 0 rl +0 -.5 rl +-.5 0 rl +closepath +{S} +}put +Encoding (6) 0 get /bx put +%% solid box +CD /bx{ +C +.5 0 -.5 -.5 1 1 s +np +0 .25 m +0 .5 rl +.5 0 rl +0 -.5 rl +-.5 0 rl +closepath +{fill} +}put +Encoding (7) 0 get /rn put +%% radical extender +CD /rn{ +C +.5 0 -.5 -.5 1 1 s +np +.03 sl +-.03 .9 m +.5 0 rl +{S} +}put +Encoding (8) 0 get /GR put +%% gray mask +CD /GR{ +C +.5 0 setcharwidth +.5 setgray +np +0 -.1 m +0 1 rl +.5 0 rl +0 -1 rl +-.5 0 rl +closepath +{fill} +}put +Encoding 97 /a put +CD /a{1000 0 0 66 942 421 s 430 415 +m 578 406 678 349 662 319 c 655 306 614 287 583 +296 c 570 300 466 340 438 332 c 365 309 335 213 +270 209 c 0 310 m 108 310 l 108 114 l 0 +114 l 0 310 l 42 161 m 42 134 l 66 134 l 66 +161 l 42 161 l 47 155 m 47 140 l 62 140 l 62 +155 l 47 155 l 110 133 m 226 113 300 66 410 +80 c 497 91 550 69 634 76 c 645 76 663 92 669 +107 c 677 125 673 141 668 160 c 725 334 m 758 +332 734 253 701 250 c 501 325 m 475 316 476 309 +473 302 c 465 282 482 263 499 257 c 552 236 615 +253 689 253 c 701 253 713 236 713 218 c 712 194 +702 168 678 161 c 671 159 663 160 655 160 c 591 +158 516 156 479 168 c 461 173 453 191 453 210 c 453 +224 456 235 466 244 c 476 253 490 252 503 255 c 459 +84 m 447 96 435 106 435 123 c 435 136 440 145 447 +155 c 453 163 462 168 469 173 c 110 293 m 173 +318 300 421 435 415 c 609 407 852 416 885 411 c 898 +409 924 411 930 380 c 942 316 828 339 742 334 c 731 +334 730 335 725 335 c 701 336 685 336 660 336 c{S}}put +Encoding 98 /b put +CD /b{1000 0 -12 66 930 421 s 500 +415 m 352 406 252 349 268 319 c 275 306 316 287 +347 296 c 360 300 464 340 492 332 c 565 309 595 +213 660 209 c 930 310 m 822 310 l 822 114 l 930 +114 l 930 310 l 888 161 m 888 134 l 864 134 +l 864 161 l 888 161 l 883 155 m 883 140 l 868 +140 l 868 155 l 883 155 l 820 133 m 704 113 +630 66 520 80 c 433 91 380 69 296 76 c 285 76 +267 92 261 107 c 253 125 257 141 262 160 c 205 +334 m 172 332 196 253 229 250 c 429 325 m 455 +316 454 309 457 302 c 465 282 448 263 431 257 c 378 +236 315 253 241 253 c 229 253 217 236 217 218 c 218 +194 228 168 252 161 c 259 159 267 160 275 160 c 339 +158 414 156 451 168 c 469 173 477 191 477 210 c 477 +224 474 235 464 244 c 454 253 440 252 427 255 c 471 +84 m 483 96 495 106 495 123 c 495 136 490 145 483 +155 c 477 163 468 168 461 173 c 820 293 m 757 +318 630 421 495 415 c 321 407 78 416 45 411 c 32 +409 6 411 0 380 c -12 316 102 339 188 334 c 199 +334 200 335 205 335 c 229 336 245 336 270 336 c{S}}put +Encoding 99 /c put +CD /c{1000 0 184 0 827 627 s 185 315 +m 186 488 332 627 505 625 c 682 623 827 467 815 +290 c 804 124 666 0 500 0 c 327 0 184 142 185 +315 c{S}}put +Encoding 100 /d put +CD /d{590 0 134 158 477 500 s 300 +160 m 208 162 134 238 135 330 c 136 423 212 500 +305 500 c 397 500 473 427 475 335 c 477 239 396 +158 300 160 c{fill}}put +Encoding 101 /e put % Bell Symbol +CD /e{1010 0 -100 -210 1010 1010 s 100 sl 0 setlinecap +420 300 450 0 360 arc +420 650 m 420 575 l S +newpath 120 125 m 720 125 l 75 sl S +420 125 m 420 25 l S +220 400 m 220 175 120 175 100 a p p p p +220 400 m 220 550 420 550 80 a p p p p +620 400 m 620 175 720 175 100 a p p p p +620 400 m 620 550 420 550 80 a p p p p +295 550 m 545 550 l{S}}put +/BuildChar{altRTD /BuildChar get exec}def end +altRTD begin /BuildChar{altRTD begin +/char exch def /fontdict exch def save +/charname fontdict /Encoding get char get def +fontdict /StrokeWidth get sl +fontdict /CD get dup charname known +{charname}{/.notdef}ifelse get newpath exec +fontdict /PaintType get 0 eq{exec}{p S}ifelse +restore end}def end +systemdict /currentpacking known{F_Troff /SavePacking get setpacking}if +/Troff F_Troff definefont pop +/Y1{/Troff FF}def +%%EndProlog +%%Page: 1 1 +BP +/slant 0 def +/height 1.000000 def +10 R +10 R +120 V +1260(#)S +7680 V +900(X11IRAF Project)S +2703(Last change: 12 Aug 2001)S +5530(1)S +7920 V +EP +%%Page: 1 2 +BP +/slant 0 def +/height 1.000000 def +10 R +10 R +480 V +900(XIMTOOL)S +1376(\()S +1425(1)S +1491(\))S +2787(USER COMMANDS )S +4956(XIMTOOL)S +5432(\()S +5481(1)S +5547(\))S +960 V +9 B +900(NAME)S +1080 V +10 R +1260(ximtool)S +1602(\261)S +1682(interactive)S +2133(image)S +2407(display)S +2726(program)S +3094(for)S +3240(the)S +3392(X)S +3494(Window)S +3868(System)S +1308 V +9 B +900(SYNOPSIS)S +1428 V +10 B +1260(ximtool)S +1612([\261)S +10 I +1695(toolkitoption)S +10 B +2237(...])S +2375([)S +10 I +2438(options)S +10 B +2763(...])S +1656 V +9 B +900(OPTIONS)S +1776 V +10 B +1260(-basePixel)S +10 I +1723(N)S +1896 V +10 R +1510(The)S +1709(base)S +1930(colormap)S +2351(cell)S +2539(used)S +2766(by)S +2910(the)S +3076(colormap.)S +3552(This)S +3774(essentially)S +4240(allows)S +4545(you)S +4739(to)S +4861(reserve)S +10 I +5192(basePixel)S +2016 V +10 R +1510(colors)S +1793(in)S +1910(the)S +2071(global)S +2360(colormap)S +2776(for)S +2931(other)S +3175(applications.)S +3752(The)S +3946(default)S +4262(is)S +4367(64,)S +4530(if)S +4629(changed)S +4999(you'll)S +5276(need)S +5502(to)S +2136 V +1510(also)S +1701(specify)S +2019(the)S +10 I +2171(-cmapInitialize)S +10 R +2806(option)S +3092(or)S +3205(resource.)S +2304 V +10 B +1260(-cmap1)S +10 I +1606(\256le)S +2424 V +10 R +1510(User)S +1728(colormap)S +2135(1.)S +2270(This)S +2478(\257ag)S +2658(allows)S +2949(you)S +3129(to)S +3237(specify)S +3555(a)S +3629(colormap)S +4036(to)S +4144(be)S +4268(made)S +4514(available)S +4904(at)S +5006(task)S +5197(startup.)S +2592 V +10 B +1260(-cmap2)S +10 I +1606(\256le)S +2712 V +10 R +1510(User)S +1734(colormap)S +2147(2.)S +2288(This)S +2502(\257ag)S +2688(allows)S +2985(you)S +3171(to)S +3285(specify)S +3609(a)S +3689(second)S +4002(colormap)S +4415(to)S +4529(be)S +4660(made)S +4913(available)S +5310(at)S +5419(task)S +2832 V +1510(startup.)S +3000 V +10 B +1260(-cmapDir1)S +10 I +1750(dir)S +3120 V +10 R +1510(User)S +1728(colormap)S +2135(directory)S +2525(1.)S +2660(Speci\256es)S +3051(a)S +3125(directory)S +3515(to)S +3623(be)S +3747(searched)S +4125(for)S +4271(colormaps.)S +3288 V +10 B +1260(-cmapDir2)S +10 I +1750(dir)S +3408 V +10 R +1510(User)S +1742(colormap)S +2164(directory)S +2569(2.)S +2719(Speci\256es)S +3125(a)S +3214(directory)S +3619(to)S +3742(be)S +3881(searched)S +4274(for)S +4435(colormaps.)S +4951(By)S +5113(default)S +5435(this)S +3528 V +1510(points)S +1790(to)S +1903(the)S +2060(system)S +2373(directory)S +2768(/usr/local/lib/imtoolcmap,)S +3840(allowing)S +4225(a)S +4304(set)S +4450(of)S +4568(site)S +4741(default)S +5052(colormaps)S +5502(to)S +3648 V +1510(be)S +1634(de\256ned)S +1958(here.)S +3816 V +10 B +1260(-cmapInitialize)S +10 I +1934(bool)S +3936 V +10 R +1510(Initialize)S +1908(the)S +2073(ximtool)S +2428(colormap)S +2848(at)S +2963(startup.)S +3333(When)S +3614(setting)S +3924(the)S +10 I +4089(basePixel)S +10 R +4520(option)S +4819(or)S +4945(resource)S +5325(this)S +5513(is)S +4056 V +1510(required)S +1876(in)S +1988(order)S +2232(to)S +2344(force)S +2582(the)S +2738(Gterm)S +3027(widget)S +3333(to)S +3445(update)S +3745(its)S +3874(global)S +4158(colormap)S +4569(resource)S +4940(in)S +5052(the)S +5207(X)S +5312(server.)S +4176 V +1510(The)S +1695(default)S +2002(is)S +10 I +2099(false)S +10 R +2288(.)S +4344 V +10 B +1260(-cmapName)S +10 I +1805(name)S +4464 V +10 R +1510(Name)S +1784(used)S +2003(for)S +2156(private)S +2470(colormap.)S +2939(The)S +3131(default)S +3445(for)S +3598(all)S +3735(IRAF)S +4000(imaging)S +4365(applications)S +4885(is)S +10 I +4989(image)S +10 R +5233(.)S +5325(Gterm)S +4584 V +1510(widget)S +1822(based)S +2089(imaging)S +2457(applications)S +2980(which)S +3264(have)S +3492(the)S +3654(same)S +3899(value)S +4155(of)S +4277(cmapName)S +4770(will)S +4965(share)S +5214(the)S +5375(same)S +4704 V +1510(colormap,)S +1950(minimizing)S +2450(colormap)S +2865(\257ashing)S +3220(and)S +3402(allowing)S +3790(multiple)S +4162(applications)S +4683(to)S +4799(be)S +4931(run)S +5103(at)S +5214(the)S +5375(same)S +4824 V +1510(time.)S +4992 V +10 B +1260(-con\256g)S +10 I +1579(N)S +5112 V +10 R +1510(Initial)S +1799(frame)S +2081(bu)S +2181 H + (f)show 10 -.5 mul h (f)show +10 R +2242(er)S +2369(con\256guration)S +2952(number.)S +3362(The)S +3567(default)S +3894(value)S +4160(is)S +4277(1,)S +4402(indicating)S +4852(a)S +4947(512x512)S +5348(frame)S +5232 V +1510(bu)S +1610 H + (f)show 10 -.5 mul h (f)show +10 R +1671(er)S +1778(with)S +1986(2)S +2066(frames.)S +2422(See)S +2596(below)S +2870(for)S +3016(information)S +3518(on)S +3648(the)S +3800(frame)S +4062(bu)S +4162 H + (f)show 10 -.5 mul h (f)show +10 R +4223(ers.)S +5400 V +10 B +1260(-defgui)S +5520 V +10 R +1510(Print)S +1737(the)S +1892(default)S +2202(GUI)S +2412(to)S +2523(the)S +2678(stdout.)S +3011(The)S +3199(GUI)S +3409(is)S +3509(a)S +3586(Tcl)S +3752(program)S +4123(that)S +4306(may)S +4511(be)S +4638(customized)S +5126(by)S +5259(the)S +5414(user)S +5640 V +1510(and)S +1684(reloaded)S +2057(using)S +2304(the)S +10 I +2456(-gui)S +10 R +2647(option)S +2933(or)S +3046(the)S +10 I +3198(gui)S +10 R +3356(resource)S +3723(parameter.)S +5808 V +10 B +1260(-displayPanner)S +10 I +1941(bool)S +5928 V +10 R +1510(Display)S +1859(panner)S +2168(marker)S +2488(window)S +2848(at)S +2958(startup.)S +3323(If)S +3427(set,)S +3601(a)S +3683(panner)S +3993(window)S +4354(showing)S +4732(the)S +4893(full)S +5071(frame)S +5342(bu)S +5442 H + (f)show 10 -.5 mul h (f)show +10 R +5503(er)S +6048 V +1510(will)S +1696(appear)S +1991(in)S +2099(the)S +2251(upper-right)S +2730(side)S +2921(of)S +3034(the)S +3186(main)S +3416(display)S +3735(window.)S +6216 V +10 B +1260(-displayCoords)S +10 I +1941(bool)S +6336 V +10 R +1510(Display)S +1855(WCS)S +2106(coordinate)S +2561(marker)S +2877(window)S +3233(at)S +3339(startup.)S +3700(If)S +3800(set,)S +3970(a)S +4048(coordinate)S +4503(readout)S +4836(text)S +5020(marker)S +5336(show-)S +6456 V +1510(ing)S +1668(will)S +1854(appear)S +2149(in)S +2257(the)S +2409(lower-right)S +2888(side)S +3079(of)S +3192(the)S +3344(main)S +3574(display)S +3893(window.)S +6624 V +10 B +1260(-\256fo)S +10 I +1462(pipe)S +6744 V +10 R +1510(Speci\256es)S +1901(the)S +2053(name)S +2299(of)S +2412(the)S +2564(\256fo)S +2733(pipe)S +2936(to)S +3045(be)S +3170(used,)S +3409(the)S +10 I +3562(i)S +10 R +3621(and)S +10 I +3796(o)S +10 R +3877(su)S +3966 H + (f)show 10 -.5 mul h (\256)show +10 R +4050(xes)S +4214(will)S +4401(be)S +4526(added)S +4795(automatically.)S +5425(The)S +6864 V +1510(default)S +1817(pipe)S +2019(names)S +2304(will)S +2490(be)S +2614(/dev/imt1i)S +3056(\(input)S +3325(pipe\))S +3560(and)S +3734(/dev/imt1o)S +4198(\(output)S +4517(pipe\).)S +7032 V +10 B +1260(-\256fo_only)S +7152 V +10 R +1510(If)S +1615(set,)S +1790(only)S +2007(\256fo)S +2185(pipes)S +2435(will)S +2630(be)S +2763(used)S +2985(for)S +3140(communication)S +3801(with)S +4018(a)S +4101(client)S +4363(program,)S +4766(sockets)S +5100(will)S +5296(be)S +5430(dis-)S +7272 V +1510(abled.)S +7752 V +900(X11IRAF Project)S +2703(Last change: 12 Aug 2001)S +5530(1)S +7920 V +EP +%%Page: 2 3 +BP +/slant 0 def +/height 1.000000 def +10 R +10 R +480 V +900(XIMTOOL)S +1376(\()S +1425(1)S +1491(\))S +2787(USER COMMANDS )S +4956(XIMTOOL)S +5432(\()S +5481(1)S +5547(\))S +960 V +10 B +1260(-gui)S +10 I +1457(\256le)S +1080 V +10 R +1510(Speci\256es)S +1901(the)S +2053(GUI)S +2260(\256le)S +2418(to)S +2526(be)S +2650(used.)S +1248 V +10 B +1260(-help)S +10 R +1510(Print)S +1735(a)S +1809(summary)S +2211(of)S +2324(command)S +2748(line)S +2928(options)S +3253(to)S +3361(the)S +3513(screen.)S +1416 V +10 B +1260(-imtoolrc)S +10 I +1683(\256le)S +1536 V +10 R +1510(Speci\256es)S +1923(the)S +2097(frame)S +2381(bu)S +2481 H + (f)show 10 -.5 mul h (f)show +10 R +2542(er)S +2671(con\256guration)S +3257(\256le)S +3438(to)S +3569(be)S +3716(used.)S +4007(See)S +4204(below)S +4501(for)S +4670(information)S +5195(on)S +5348(frame)S +1656 V +1510(bu)S +1610 H + (f)show 10 -.5 mul h (f)show +10 R +1671(ers.)S +1824 V +10 B +1260(-inet_only)S +1944 V +10 R +1510(If)S +1611(set,)S +1782(only)S +1995(inet)S +2180(sockets)S +2509(will)S +2700(be)S +2829(used)S +3047(for)S +3198(communication)S +3855(with)S +4068(a)S +4147(client)S +4404(program,)S +4802(\256fo)S +4976(pipes)S +5222(and)S +5402(unix)S +2064 V +1510(sockets)S +1834(will)S +2020(be)S +2144(disabled.)S +2232 V +10 B +1260(-invert)S +2352 V +10 R +1510(Start)S +1748(XImtool)S +2136(using)S +2402(inverted)S +2778(colormaps.)S +3298(When)S +3585(set,)S +3770(a)S +3863("normalized")S +4443(display)S +4781(will)S +4987(always)S +5314(be)S +5458(the)S +2472 V +1510(inverse)S +1828(of)S +1941(the)S +2093(selected)S +2444(colormap.)S +2640 V +10 B +1260(-ismdev)S +10 I +1623(dev)S +2760 V +10 R +1510(Speci\256es)S +1914(the)S +2079(plug-in)S +2411(ISM)S +2633(connection)S +3115(socket.)S +3469(This)S +3691(should)S +4002(be)S +4140(a)S +4228(unix)S +4450(domain)S +4794(socket)S +5093(of)S +5220(the)S +5386(form)S +2880 V +1510(")S +10 I +1551(/tmp/.ISM%d)S +10 R +2081(",)S +2189(where)S +2474(the)S +10 I +2638(%d)S +10 R +2813(will)S +3011(be)S +3147(replaced)S +3526(by)S +3667(the)S +3830(user)S +4037(id.)S +4211(Once)S +4462(an)S +4597(ISM)S +4816(has)S +4990(connected)S +5435(this)S +3000 V +1510(port)S +1701(is)S +1798(freed)S +2032(to)S +2140(accept)S +2424(other)S +2659(connections.)S +3168 V +10 B +1260(-maxColors)S +10 I +1789(N)S +3288 V +10 R +1510(Specify)S +1845(the)S +1997(max)S +2199(number)S +2534(of)S +2647(colors)S +2921(to)S +3029(be)S +3153(used)S +3366(for)S +3512(the)S +3664(display.)S +3456 V +10 B +1260(-memModel)S +10 I +1805(type)S +3576 V +10 R +1510(Determines)S +2003(how)S +2208(ximtool)S +2553(uses)S +2758(memory)S +3125(in)S +3237(the)S +3393(ximtool)S +3739(client)S +3995(and)S +4173(the)S +4329(X)S +4435(server.)S +4737(The)S +4926(options)S +5255(are)S +10 I +5410(fast)S +10 R +5555(,)S +3696 V +10 I +1510(beNiceToServer)S +10 R +2153(,)S +2220(and)S +10 I +2406(small)S +10 R +2623(.)S +2720(The)S +2917(default)S +3236(is)S +10 I +3345(fast)S +10 R +3490(,)S +3557(which)S +3843(uses)S +4057(server)S +4342(pixmaps)S +4723(to)S +4843(make)S +5101(frame)S +5374(blink)S +3816 V +1510(fast.)S +1742(This)S +1953(is)S +2053(recommended)S +2651(unless)S +2934(server)S +3210(memory)S +3576(is)S +3676(very)S +3886(limited.)S +4258(Note)S +4485(that)S +4668(even)S +4889(in)S +5000(fast)S +5177(mode,)S +5458(the)S +3936 V +1510(server)S +1792(pixmap)S +2131(is)S +2237(only)S +2454(the)S +2615(size)S +2808(of)S +2929(the)S +3089(display)S +3416(window,)S +3801(so)S +3928(memory)S +4299(usage)S +4564(is)S +4669(reasonable)S +5133(even)S +5359(if)S +5458(the)S +4056 V +1510(frame)S +1772(bu)S +1872 H + (f)show 10 -.5 mul h (f)show +10 R +1933(er)S +2040(is)S +2137(very)S +2344(large.)S +4224 V +10 B +1260(-nframes)S +10 I +1672(N)S +4344 V +10 R +1510(Speci\256es)S +1913(the)S +2077(number)S +2424(of)S +2549(frame)S +2823(bu)S +2923 H + (f)show 10 -.5 mul h (f)show +10 R +2984(ers)S +3142(to)S +3262(con\256gure)S +3681(at)S +3795(startup.)S +4164(By)S +4323(default)S +4642(there)S +4883(will)S +5081(be)S +5217(2)S +5309(frames)S +4464 V +1510(available,)S +1925(a)S +1999(maximum)S +2435(of)S +2548(4)S +2628(frames)S +2929(are)S +3080(allowed.)S +4632 V +10 B +1260(-port)S +10 I +1506(N)S +4752 V +10 R +1510(Speci\256es)S +1901(the)S +2053(port)S +2244(number)S +2579(to)S +2687(use)S +2850(when)S +3096(connecting)S +3564(through)S +3905(an)S +4029(inet)S +4209(socket.)S +4920 V +10 B +1260(-port_only)S +5040 V +10 R +1510(Same)S +1770(as)S +10 I +1891(-inet_only)S +10 R +2334(option.)S +2683(If)S +2787(set,)S +2961(only)S +3177(inet)S +3365(sockets)S +3697(will)S +3891(be)S +4023(used)S +4244(for)S +4398(communication)S +5058(with)S +5275(a)S +5358(client)S +5160 V +1510(program.)S +5328 V +10 B +1260(-printCon\256g)S +10 I +1824(name)S +5448 V +10 R +1510(Speci\256es)S +1916(the)S +2083(printer)S +2394(con\256guration)S +2973(\256le)S +3147(to)S +3271(use.)S +3505(By)S +3668(default)S +3991(this)S +4182(will)S +4384(be)S +4524(/usr/local/lib/ximprint.cfg.)S +5568 V +1510(See)S +1684(below)S +1958(for)S +2104(more)S +2339(information)S +2841(on)S +2971(con\256guring)S +3462(output)S +3748(devices.)S +5736 V +10 B +1260(-tile)S +10 R +1510(The)S +1695(default)S +2002(display)S +2321(mode)S +2573(is)S +2670(to)S +2778(view)S +3002(one)S +3177(frame)S +3440(at)S +3543(a)S +3618(time.)S +3852(In)S +3966(tile)S +4125(frames)S +4427(mode,)S +4705(2)S +4786(or)S +4900(4)S +4981(frames)S +5283(may)S +5486(be)S +5856 V +1510(viewed)S +1834(simultaneously)S +2476(in)S +2590(the)S +2748(display)S +3073(window.)S +3486(All)S +3650(the)S +3808(usual)S +4055(operations)S +4507(\(zoom)S +4798(and)S +4977(pan,)S +5181(colortable)S +5976 V +1510(enhancement,)S +2091(cursor)S +2370(readback,)S +2784(etc.\))S +3018(still)S +3199(work)S +3434(for)S +3580(each)S +3792(frame)S +4054(even)S +4272(when)S +4518(in)S +4626(tile)S +4784(frames)S +5085(mode.)S +6144 V +10 B +1260(-unix)S +10 I +1513(name)S +6264 V +10 R +1510(Speci\256es)S +1909(the)S +2069(unix)S +2285(domain)S +2623(socket)S +2916(name)S +3170(to)S +3286(use.)S +3512(A)S +3622("%d")S +3876(in)S +3993(the)S +4154(\256lename)S +4537(will)S +4732(be)S +4865(replaced)S +5241(with)S +5458(the)S +6384 V +1510(user)S +1706(id.)S +6552 V +10 B +1260(-unix_only)S +6672 V +10 R +1510(If)S +1607(set,)S +1774(only)S +1983(unix)S +2192(domain)S +2523(sockets)S +2848(will)S +3035(be)S +3160(used)S +3374(for)S +3521(communication)S +4174(with)S +4383(a)S +4458(client)S +4711(program,)S +5105(inet)S +5286(sockets)S +6792 V +1510(and)S +1684(\256fos)S +1892(will)S +2078(be)S +2202(disabled.)S +7080 V +9 B +900(APPLICATION)S +1557(RESOURCES)S +7200 V +10 R +1260(XImtool)S +1629(is)S +1726(implemented)S +2278(as)S +2391(a)S +2465(client)S +2717(program)S +3085(which)S +3359(is)S +3456(responsible)S +3941(for)S +4087(loading)S +4418(the)S +4571(frame)S +4834(bu)S +4934 H + (f)show 10 -.5 mul h (f)show +10 R +4995(ers/colormaps,)S +7680 V +900(X11IRAF Project)S +2703(Last change: 12 Aug 2001)S +5530(2)S +7920 V +EP +%%Page: 3 4 +BP +/slant 0 def +/height 1.000000 def +10 R +10 R +480 V +900(XIMTOOL)S +1376(\()S +1425(1)S +1491(\))S +2787(USER COMMANDS )S +4956(XIMTOOL)S +5432(\()S +5481(1)S +5547(\))S +960 V +1260(communicating)S +1917(with)S +2130(clients,)S +2451(etc,)S +2627(and)S +2806(a)S +2885(user-modi\256able)S +3547(GUI)S +3759(\256le)S +3922(written)S +4240(as)S +4358(a)S +4437(Tcl)S +4605(script)S +4862(which)S +5141(handles)S +5480(all)S +1080 V +1260(the)S +1412(user)S +1608(interface)S +1986(details.)S +2332(The)S +10 I +2517(client)S +2770(resources)S +10 R +3189(described)S +3602(below)S +3877(will)S +4064(be)S +4189(common)S +4570(to)S +4679(any)S +4854(user-de\256ned)S +5378(GUI,)S +1200 V +1260(the)S +10 I +1426(gui)S +1598(resources)S +10 R +2030(may)S +2246(change)S +2572(depending)S +3032(on)S +3176(how)S +3392(extensively)S +3890(the)S +4055(GUI)S +4275(has)S +4451(been)S +4682(modi\256ed)S +5081(by)S +5224(the)S +5389(user.)S +1320 V +1260(Each)S +1495(of)S +1615(these)S +1857(components)S +2377(has)S +2547(its)S +2679(own)S +2888(set)S +3036(of)S +3156(resources,)S +3594(but)S +3759(to)S +3874(the)S +4033(user)S +4236(setting)S +4540(them)S +4777(is)S +4881(the)S +5040(same)S +5282(as)S +5402(with)S +1440 V +1260(any)S +1434(other)S +1669(application.)S +1680 V +10 I +1260(Gterm)S +10 R +1548(widget)S +1853(resources)S +2262(\(i.e.)S +2450(those)S +2694(for)S +2844(the)S +3000(main)S +3234(image)S +3512(window)S +3868(or)S +3985(colorbar\))S +4384(may)S +4590(be)S +4718(set)S +4863(as)S +4980(either)S +5241(client)S +5497(or)S +1800 V +1260(GUI)S +1467(resources.)S +1928(See)S +2102(the)S +10 I +2254(xgterm\(1\))S +10 R +2677(man)S +2879(page)S +3097(for)S +3243(a)S +3317(complete)S +3713(description)S +4187(of)S +10 I +4300(Gterm)S +10 R +4585(widget)S +4887(resources.)S +2088 V +9 B +1080(CLIENT)S +1452(RESOURCES)S +2208 V +10 R +1260(The)S +1445(client)S +1697(resources)S +2103(generally)S +2504(de\256ne)S +2778(the)S +2930(initial)S +3194(state)S +3407(of)S +3520(the)S +3672(application)S +4146(or)S +4259(set)S +4400(con\256guration)S +4963(parameters.)S +2376 V +10 B +1620(Resource)S +2043(Name)S +2870(Default)S +3216(Value)S +2484 V +10 R +1620(defCon\256g)S +2870(1)S +2592 V +1620(defNFrames)S +2870(0)S +2700 V +1620(tileBorderWidth)S +2870(3)S +2808 V +1620(tileBorderColor)S +2870(9)S +2916 V +1620(autoscale)S +2870(false)S +3024 V +1620(antialias)S +2870(false)S +3132 V +1620(antialiasType)S +2870(boxcar)S +3240 V +1620(tileFrames)S +2870(false)S +3348 V +1620(highlightFrames)S +2870(true)S +3456 V +1620(gui)S +2870(default)S +3564 V +1620(imtoolrc)S +2870(/usr/local/lib/imtoolrc)S +3672 V +1620(invert)S +2870(false)S +3780 V +1620(memModel)S +2870(fast)S +3888 V +1620(basePixel:)S +2870(64)S +3996 V +1620(maxColors:)S +2870(216)S +4104 V +1620(cmapInitialize:)S +2870(false)S +4212 V +1620(cmap1)S +2870(none)S +4320 V +1620(cmap2)S +2870(none)S +4428 V +1620(cmapDir1)S +2870(none)S +4536 V +1620(cmapDir2)S +2870(/usr/local/lib/imtoolcmap)S +4644 V +1620(input_\256fo)S +2870(/dev/imt1i)S +4752 V +1620(output_\256fo)S +2870(/dev/imt1o)S +4860 V +1620(unixaddr)S +2870(/tmp/.IMT%d)S +4968 V +1620(port)S +2870(5137)S +5076 V +1620(ism_addr)S +2870(/tmp/.ISM%d)S +5184 V +1620(ism_task)S +2870("ism_wcspix.e)S +3488(wcspix)S +3801(&")S +5424 V +1260(Description)S +1756(of)S +1869(ximtool)S +2211(client)S +2463(resources:)S +5712 V +10 B +1260(defCon\256g)S +10 R +2160(Default)S +2499(frame)S +2772(bu)S +2872 H + (f)show 10 -.5 mul h (f)show +10 R +2933(er)S +3051(con\256guration)S +3625(number)S +3971(on)S +4112(startup.)S +4480(See)S +4665(below)S +4950(for)S +5107(more)S +5353(infor-)S +5832 V +2160(mation)S +2468(on)S +2598(frame)S +2860(bu)S +2960 H + (f)show 10 -.5 mul h (f)show +10 R +3021(ers.)S +6000 V +10 B +1260(defNFrames)S +10 R +2160(Default)S +2496(number)S +2838(of)S +2958(frames)S +3266(on)S +3403(startup.)S +3767(Set)S +3932(to)S +4047(zero)S +4255(to)S +4371(use)S +4542(the)S +4702(value)S +4956(from)S +5188(the)S +5348(frame)S +6120 V +2160(bu)S +2260 H + (f)show 10 -.5 mul h (f)show +10 R +2321(er)S +2428(con\256guration)S +2991(\()S +10 I +3024(imtoolrc)S +10 R +3363(\))S +3426(\256le.)S +6288 V +10 B +1260(tileBorderWidth)S +6396 V +1260(tileBorderColor)S +10 R +2160(Used)S +2401(by)S +2537(the)S +2695(tile)S +2859(frames)S +3166(option.)S +3513(Speci\256es)S +3910(how)S +4118(far)S +4264(apart)S +4499(to)S +4613(space)S +4870(the)S +5029(frames)S +5337(in)S +5452(tile)S +6516 V +2160(frames)S +2484(mode.)S +2814(Color)S +3095("9")S +3280(refers)S +3559(to)S +3690(the)S +3865(Gterm)S +4172(widget)S +4496(resource)S +4885(color9,)S +5217(which)S +5513(is)S +6636 V +2160(assigned)S +2534(a)S +2608(color)S +2843(with)S +3051(its)S +3176(own)S +3378(resource.)S +6804 V +10 B +1260(autoscale)S +10 R +2160(Enable/disable)S +2778(the)S +2930(autoscale)S +3331(option.)S +6972 V +10 B +1260(antialias)S +10 R +2160(Enable/disable)S +2778(the)S +2930(antialias)S +3293(option.)S +7140 V +10 B +1260(antialiasType)S +10 R +2160(Type)S +2419(of)S +2556(antialiasing.)S +3126(Options)S +3497(include)S +10 I +3846(boxcar)S +10 R +4178(\(default\),)S +10 I +4601(bilinear)S +10 R +4918(,)S +10 I +4998(nearest)S +10 R +5292(,)S +10 I +5372(area)S +10 R +5555(,)S +7260 V +10 I +2160(blkavg)S +10 R +2426(,)S +10 I +2481(lowpass)S +10 R +2804(,)S +2859(and)S +10 I +3033(gaussian)S +10 R +3389(.)S +7740 V +900(X11IRAF Project)S +2703(Last change: 12 Aug 2001)S +5530(3)S +7920 V +EP +%%Page: 4 5 +BP +/slant 0 def +/height 1.000000 def +10 R +10 R +480 V +900(XIMTOOL)S +1376(\()S +1425(1)S +1491(\))S +2787(USER COMMANDS )S +4956(XIMTOOL)S +5432(\()S +5481(1)S +5547(\))S +960 V +10 B +1260(tileFrames)S +10 R +2160(Enable/disable)S +2778(the)S +2930(tile)S +3088(frames)S +3389(option.)S +1128 V +10 B +1260(highlightFrames)S +10 R +2160(Determines)S +2650(whether)S +3001(the)S +3153(current)S +3465(frame)S +3727(is)S +3824(highlighted)S +4310(when)S +4556(in)S +4664(tile)S +4822(frames)S +5123(mode.)S +1296 V +10 B +1260(gui)S +10 R +2160(The)S +2349(GUI)S +2560(to)S +2672(be)S +2800(executed.)S +3243("default")S +3636(refers)S +3896(to)S +4008(the)S +4164(default,)S +4500(builtin)S +4796(ximtool)S +5142(GUI.)S +5408(You)S +1416 V +2160(can)S +2341(replace)S +2671(this)S +2859(with)S +3080(your)S +3306(own)S +3521(GUI)S +3741(\256le)S +3911(if)S +4014(you)S +4206(are)S +4369(bold)S +4589(enough,)S +4950(and)S +5136(completely)S +1536 V +2160(change)S +2472(the)S +2624(look)S +2832(and)S +3006(functionality)S +3547(of)S +3660(the)S +3812(GUI)S +4019(if)S +4110(desired.)S +1704 V +10 B +1260(imtoolrc)S +10 R +2160(Where)S +2496(to)S +2645(\256nd)S +2872(the)S +3065(imtoolrc)S +3475(\256le.)S +3730(This)S +3980(de\256nes)S +4335(the)S +4529(recognized)S +5038(frame)S +5342(bu)S +5442 H + (f)show 10 -.5 mul h (f)show +10 R +5503(er)S +1824 V +2160(con\256gurations.)S +1992 V +10 B +1260(invert)S +10 R +2160(Start)S +2388(Ximtool)S +2761(using)S +3017(an)S +3150(inverted)S +3516(colormap.)S +3987(When)S +4264(set,)S +4440(a)S +4524("normalized")S +5095(display)S +5424(will)S +2112 V +2160(always)S +2467(be)S +2591(the)S +2743(inverse)S +3061(of)S +3174(the)S +3326(selected)S +3677(colormap.)S +2280 V +10 B +1260(memModel)S +10 R +2160(Determines)S +2656(how)S +2864(ximtool)S +3212(uses)S +3420(memory)S +3789(in)S +3904(the)S +4063(ximtool)S +4412(client)S +4671(and)S +4852(the)S +5011(X)S +5120(server.)S +5425(The)S +2400 V +2160(options)S +2491(are)S +10 I +2648(fast)S +10 R +2793(,)S +10 I +2853(beNiceToServer)S +10 R +3496(,)S +3556(and)S +10 I +3735(small)S +10 R +3952(.)S +4042(The)S +4232(default)S +4544(is)S +10 I +4646(fast)S +10 R +4791(,)S +4851(which)S +5130(uses)S +5337(server)S +2520 V +2160(pixmaps)S +2536(to)S +2651(make)S +2904(frame)S +3173(blink)S +3416(fast.)S +3652(This)S +3867(is)S +3971(recommended)S +4573(unless)S +4861(server)S +5142(memory)S +5513(is)S +2640 V +2160(very)S +2369(limited.)S +2740(Note)S +2966(that)S +3148(even)S +3368(in)S +3478(fast)S +3654(mode,)S +3933(the)S +4087(server)S +4362(pixmap)S +4694(is)S +4793(only)S +5003(the)S +5157(size)S +5344(of)S +5458(the)S +2760 V +2160(display)S +2491(window,)S +2880(so)S +3012(memory)S +3388(usage)S +3658(is)S +3768(reasonable)S +4237(even)S +4468(if)S +4572(the)S +4737(frame)S +5012(bu)S +5112 H + (f)show 10 -.5 mul h (f)show +10 R +5173(er)S +5293(is)S +5403(very)S +2880 V +2160(large.)S +2988 V +10 B +1260(basePixel)S +3096 V +1260(maxColors)S +10 R +2160(These)S +2434(two)S +2620(resources)S +3032(determine)S +3467(the)S +3626(region)S +3918(of)S +4038(colormap)S +4452(space)S +4710(used)S +4930(to)S +5045(render)S +5336(image)S +3216 V +2160(pixels.)S +3384 V +10 B +1260(cmapInitialize)S +10 R +2160(Initialize)S +2545(the)S +2697(ximtool)S +3039(colormap)S +3446(at)S +3548(startup.)S +3905(This)S +4113(is)S +4210(a)S +4284(required)S +4646(resource)S +5013(to)S +5121(clear)S +5345(a)S +5420(pre-)S +3504 V +2160(vious)S +2407(ximtool)S +2749(colormap)S +3156(allowing)S +3536(a)S +3610(new)S +10 B +3806(basePixel)S +10 R +4236(and)S +10 B +4410(maxColors)S +10 R +4906(to)S +5014(take)S +5210(e)S +5254 H + (f)show 10 -.5 mul h (f)show +10 R +5315(ect.)S +3672 V +10 B +1260(cmap1)S +3780 V +1260(cmap2)S +10 R +2160(User)S +2389(colormap)S +2807(\256les.)S +3070(The)S +3266(intent)S +3535(here)S +3748(is)S +3857(to)S +3977(allow)S +4241(individual)S +4689(colormaps)S +5147(to)S +5267(be)S +5403(con-)S +3900 V +2160(veniently)S +2562(speci\256ed)S +2947(as)S +3060(a)S +3134(resource.)S +4068 V +10 B +1260(cmapDir1)S +4176 V +1260(cmapDir2)S +10 R +2160(User)S +2393(or)S +2521(system)S +2844(colormap)S +3266(directories.)S +3788(By)S +3951(default)S +4274(cmapDir2)S +4719(points)S +5010(to)S +5134(the)S +5302(system)S +4296 V +2160(directory)S +2564(/usr/local/lib/imtoolcmap,)S +3644(allowing)S +4037(a)S +4124(set)S +4278(of)S +4404(site)S +4586(default)S +4906(colormaps)S +5365(to)S +5486(be)S +4416 V +2160(de\256ned)S +2484(here.)S +2740(This)S +2948(leaves)S +3227(cmapDir1)S +3656(available)S +4046(to)S +4154(a)S +4228(user)S +4424(colormap)S +4831(directory.)S +4584 V +10 B +1260(input_\256fo)S +4692 V +1260(output_\256fo)S +10 R +2160(The)S +2354(input)S +2600(and)S +2784(output)S +3080(\256fos)S +3298(for)S +3454(\256fo)S +3633(i/o.)S +3834("Input")S +4167(and)S +4351("output")S +4729(are)S +4890(from)S +5124(the)S +5286(client's)S +4812 V +2160(point)S +2396(of)S +2509(view.)S +2788(Note)S +3012(that)S +3192(only)S +3400(one)S +3574(display)S +3893(server)S +4166(can)S +4334(use)S +4497(a)S +4571(\256fo-pair)S +4928(at)S +5030(one)S +5204(time.)S +4980 V +10 B +1260(unixaddr)S +10 R +2160(Template)S +2569(address)S +2900(for)S +3048(unix)S +3258(domain)S +3591(socket.)S +3934(The)S +4122(user)S +4321(must)S +4549(have)S +4770(write)S +5008(permission)S +5480(on)S +5100 V +2160(this)S +2338(directory,)S +2756(or)S +2872(the)S +3027(\256le)S +3188(must)S +3416(already)S +3742(exist.)S +10 I +4019(%d)S +10 R +4152(,)S +4210(if)S +4304(given,)S +4584(is)S +4684(replaced)S +5054(by)S +5187(the)S +5342(user's)S +5220 V +2160(UID.)S +5388 V +10 B +1260(port)S +10 R +2160(TCP/IP)S +2500(port)S +2700(for)S +2855(the)S +3017(server.)S +3355(Note)S +3589(that)S +3779(only)S +3997(one)S +4181(server)S +4464(can)S +4642(listen)S +4899(on)S +5039(a)S +5123(port)S +5324(at)S +5436(one)S +5508 V +2160(time,)S +2402(so)S +2530(if)S +2630(multiple)S +3003(ximtool)S +3354(servers)S +3675(are)S +3835(desired)S +4161(on)S +4299(the)S +4459(same)S +4702(machine,)S +5103(they)S +5313(should)S +5628 V +2160(be)S +2284(given)S +2536(di)S +2614 H + (f)show 10 -.5 mul h (f)show +10 R +2675(erent)S +2904(ports.)S +5796 V +10 B +1260(ism_addr)S +10 R +2160(Template)S +2576(address)S +2914(for)S +3070(ISM)S +3288(unix)S +3506(domain)S +3846(socket.)S +4166(The)S +4361(user)S +4567(must)S +4802(have)S +5030(write)S +5275(permis-)S +5916 V +2160(sion)S +2367(on)S +2507(this)S +2692(directory,)S +3116(or)S +3238(the)S +3399(\256le)S +3566(must)S +3800(already)S +4132(exist.)S +10 I +4415(%d)S +10 R +4548(,)S +4612(if)S +4712(given,)S +4998(is)S +5104(replaced)S +5480(by)S +6036 V +2160(the)S +2312(user's)S +2580(UID.)S +6204 V +10 B +1260(ism_task)S +10 R +2160(Command)S +2616(string)S +2883(to)S +3000(execute)S +3343(for)S +3498(the)S +3660(real-time)S +4060(pixel)S +4300(and)S +4484(WCS)S +4741(readout)S +5080(ISM)S +5298(\(Image)S +6324 V +2160(Support)S +2507(Module\))S +2881(task.)S +6612 V +9 B +1080(GUI)S +1277(RESOURCES)S +6732 V +10 R +1260(In)S +1394(principle)S +1800(ximtool)S +2163(can)S +2352(have)S +2592(any)S +2788(number)S +3145(of)S +3280(di)S +3358 H + (f)show 10 -.5 mul h (f)show +10 R +3419(erent)S +3670(GUIs,)S +3963(each)S +4197(of)S +4332(which)S +4628(de\256nes)S +4963(its)S +5110(own)S +5334(set)S +5497(of)S +6852 V +1260(resources.)S +1733(GUIs)S +1991(typically)S +2383(de\256ne)S +2669(a)S +2755(great)S +2996(many)S +3260(resources,)S +3703(but)S +3873(most)S +4110(of)S +4234(these)S +4480(are)S +4642(not)S +4811(really)S +5079(intended)S +5464(for)S +6972 V +1260(modi\256cation)S +1796(by)S +1926(the)S +2078(user)S +2274(\(although)S +2687(one)S +2861(can)S +3029(modify)S +3348(them)S +3578(if)S +3669(desired\).)S +7212 V +1260(The)S +1455(following)S +1884(are)S +2045(some)S +2296(of)S +2419(the)S +2581(more)S +2826(useful)S +3110(resources)S +3526(used)S +3749(by)S +3889(the)S +4051(default)S +4369(ximtool)S +4722(GUI.)S +4995(The)S +10 I +5191(imagewin)S +7692 V +10 R +900(X11IRAF Project)S +2703(Last change: 12 Aug 2001)S +5530(4)S +7920 V +EP +%%Page: 5 6 +BP +/slant 0 def +/height 1.000000 def +10 R +10 R +480 V +900(XIMTOOL)S +1376(\()S +1425(1)S +1491(\))S +2787(USER COMMANDS )S +4956(XIMTOOL)S +5432(\()S +5481(1)S +5547(\))S +960 V +1260(resources)S +1666(are)S +1817(Gterm)S +2102(widget)S +2404(resources.)S +1248 V +10 B +1620(Main)S +1878(Display)S +2231(Gterm)S +2543(Widget)S +2884(Resources)S +1416 V +1650(Resource)S +2073(Name)S +3370(Default)S +3716(Value)S +1524 V +10 Y +1650(*)S +10 R +1700(imagewin.cmapName:)S +3370(image)S +1632 V +10 Y +1650(*)S +10 R +1700(imagewin.basePixel:)S +3370(64)S +1740 V +10 Y +1650(*)S +10 R +1700(imagewin.warpCursor:)S +3370(True)S +1848 V +10 Y +1650(*)S +10 R +1700(imagewin.raiseWindow:)S +3370(True)S +1956 V +10 Y +1650(*)S +10 R +1700(imagewin.deiconifyWindow:)S +3370(True)S +2064 V +10 Y +1650(*)S +10 R +1700(imagewin.ginmodeCursor:)S +3370(circle)S +2172 V +10 Y +1650(*)S +10 R +1700(imagewin.ginmodeBlinkInterval:)S +3370(500)S +2280 V +10 Y +1650(*)S +10 R +1700(imagewin.color0)S +2404(\(background\):)S +3370(black)S +2388 V +10 Y +1650(*)S +10 R +1700(imagewin.color1)S +2404(\(foreground\):)S +3370(white)S +2496 V +10 Y +1650(*)S +10 R +1700(imagewin.color8)S +2404(\(panner)S +2738(highlight\):)S +3370(#7c8498)S +2604 V +10 Y +1650(*)S +10 R +1700(imagewin.color9)S +2404(\(tileFrame)S +2850(color\):)S +3370(SteelBlue)S +2712 V +10 Y +1650(*)S +10 R +1700(imagewin.width:)S +3370(512)S +2820 V +10 Y +1650(*)S +10 R +1700(imagewin.height:)S +3370(512)S +3108 V +10 B +1620(GUI)S +1839(Resources)S +3276 V +1650(Resource)S +2073(Name)S +3370(Default)S +3716(Value)S +3384 V +10 Y +1650(*)S +10 R +1700(autoscale:)S +3370(True)S +3492 V +10 Y +1650(*)S +10 R +1700(zoomfactors:)S +3370(1)S +3450(2)S +3530(4)S +3610(8)S +3600 V +10 Y +1650(*)S +10 R +1700(displayCoords:)S +3370(True)S +3708 V +10 Y +1650(*)S +10 R +1700(displayPanner:)S +3370(True)S +3816 V +10 Y +1650(*)S +10 R +1700(displayMagni\256er:)S +3370(True)S +3924 V +10 Y +1650(*)S +10 R +1700(blinkRate:)S +3370(1.0)S +4032 V +10 Y +1650(*)S +10 R +1700(pannerArea:)S +3370(150)S +10 Y +3520(*)S +10 R +3570(150)S +4140 V +10 Y +1650(*)S +10 R +1700(pannerGeom:)S +3370(-5+5)S +4248 V +10 Y +1650(*)S +10 R +1700(magni\256erArea:)S +3370(100)S +10 Y +3520(*)S +10 R +3570(100)S +4356 V +10 Y +1650(*)S +10 R +1700(magni\256erGeom:)S +3370(+5+5)S +4464 V +10 Y +1650(*)S +10 R +1700(wcsboxGeom:)S +3370(-5-5)S +4572 V +10 Y +1650(*)S +10 R +1700(maxContrast:)S +3370(5.0)S +4680 V +10 Y +1650(*)S +10 R +1700(warnings:)S +3370(True)S +4788 V +10 Y +1650(*)S +10 R +1700(centerBoxSize:)S +3370(5)S +4896 V +10 Y +1650(*)S +10 R +1700(peakCentroid:)S +3370(True)S +5184 V +10 B +1620(Alternate)S +2054(GUI)S +2273(Resources)S +5352 V +1650(Resource)S +2073(Name)S +3370(Default)S +3716(Value)S +5460 V +10 Y +1650(*)S +10 R +1700(showToolBar:)S +3370(False)S +5568 V +10 Y +1650(*)S +10 R +1700(showPanelBar:)S +3370(False)S +5808 V +1260(Description)S +1756(of)S +1869(selected)S +2220(resources:)S +6096 V +10 Y +1260(*)S +10 B +1310(cmapName)S +10 R +2360(Name)S +2638(used)S +2861(for)S +3018(private)S +3336(colormap.)S +3809(The)S +4005(default)S +4323(for)S +4480(all)S +4621(IRAF)S +4890(imaging)S +5259(applica-)S +6216 V +2360(tions)S +2601(is)S +2714("image".)S +3141(Gterm)S +3442(widget)S +3760(based)S +4033(imaging)S +4407(applications)S +4936(which)S +5225(have)S +5458(the)S +6336 V +2360(same)S +2597(value)S +2845(of)S +2961(cmapName)S +3448(will)S +3637(share)S +3880(the)S +4035(same)S +4273(colormap,)S +4708(minimizing)S +5203(colormap)S +6456 V +2360(\257ashing)S +2707(and)S +2881(allowing)S +3261(multiple)S +3625(applications)S +4138(to)S +4246(be)S +4370(run)S +4533(at)S +4635(the)S +4787(same)S +5022(time.)S +6624 V +10 Y +1260(*)S +10 B +1310(basePixel)S +10 R +2360(The)S +2545(base)S +2752(colormap)S +3159(cell)S +3333(used)S +3546(by)S +3676(the)S +3828(display)S +4147(colormap.)S +6792 V +10 Y +1260(*)S +10 B +1310(imagewin.warpCursor)S +10 R +2360(Warp)S +2611(pointer)S +2924(into)S +3110(image)S +3384(window)S +3736(when)S +3982(initiating)S +4374(a)S +4448(cursor)S +4727(read.)S +6960 V +10 Y +1260(*)S +10 B +1310(imagewin.raiseWindow)S +10 R +2360(Raise)S +2612(image)S +2886(window)S +3238(when)S +3484(initiating)S +3876(a)S +3950(cursor)S +4229(read.)S +7128 V +10 Y +1260(*)S +10 B +1310(imagewin.deiconifyWindow)S +7248 V +10 R +2360(Deiconify)S +2789(image)S +3063(window)S +3415(if)S +3506(necessary)S +3923(when)S +4169(initiating)S +4561(a)S +4635(cursor)S +4914(read.)S +7728 V +900(X11IRAF Project)S +2703(Last change: 12 Aug 2001)S +5530(5)S +7920 V +EP +%%Page: 6 7 +BP +/slant 0 def +/height 1.000000 def +10 R +10 R +480 V +900(XIMTOOL)S +1376(\()S +1425(1)S +1491(\))S +2787(USER COMMANDS )S +4956(XIMTOOL)S +5432(\()S +5481(1)S +5547(\))S +960 V +10 Y +1260(*)S +10 B +1310(imagewin.ginmodeCursor)S +1080 V +10 R +2360(Type)S +2596(of)S +2710(cursor)S +2990(when)S +3237(a)S +3312(cursor)S +3592(read)S +3795(is)S +3894(in)S +4004(progress.)S +4429(The)S +4616(default)S +4925(is)S +5024(a)S +5100(circle.)S +5408(Any)S +1200 V +2360(selection)S +2800(from)S +3079(the)S +3285(X)S +3441(cursor)S +3774(font)S +4019(can)S +4241(be)S +4419(used.)S +4741(A)S +4897(special)S +5258(case)S +5513(is)S +1320 V +2360("full_crosshair")S +3021(which)S +3295(is)S +3392(the)S +3544(full)S +3713(crosshair)S +4103(cursor)S +4382(of)S +4495(the)S +4647(Gterm)S +4932(widget.)S +1488 V +10 Y +1260(*)S +10 B +1310(imagewin.ginmodeBlinkInterval)S +1608 V +10 R +2360(Determines)S +2857(whether)S +3215(the)S +3374(cursor)S +3660(blinks)S +3942(when)S +4195(a)S +4277(cursor)S +4564(read)S +4773(is)S +4878(in)S +4994(progress.)S +5425(The)S +1728 V +2360(value)S +2606(is)S +2703(given)S +2955(in)S +3063(milliseconds.)S +1896 V +10 Y +1260(*)S +10 B +1310(imagewin.color0)S +10 R +2360(Background)S +2878(color.)S +2064 V +10 Y +1260(*)S +10 B +1310(imagewin.color1)S +10 R +2360(Foreground)S +2856(color.)S +2232 V +10 Y +1260(*)S +10 B +1310(imagewin.color8)S +10 R +2360(Color)S +2618(assigned)S +2992(the)S +3144(panner)S +3445(window.)S +2400 V +10 Y +1260(*)S +10 B +1310(imagewin.color9)S +10 R +2360(Color)S +2618(used)S +2831(for)S +2977(the)S +3129(tileFrames)S +3581(highlight.)S +2568 V +10 Y +1260(*)S +10 B +1310(imagewin.width)S +10 R +2360(Width)S +2640(of)S +2753(the)S +2905(main)S +3135(image)S +3409(window.)S +2736 V +10 Y +1260(*)S +10 B +1310(imagewin.height)S +10 R +2360(Height)S +2662(of)S +2775(the)S +2927(main)S +3157(image)S +3431(window.)S +2904 V +10 Y +1260(*)S +10 B +1310(pannerArea)S +10 R +2360(Area)S +2583(in)S +2691(pixels)S +2960(of)S +3073(the)S +3225(panner)S +3526(window.)S +3072 V +10 Y +1260(*)S +10 B +1310(pannerGeom)S +10 R +2360(Where)S +2655(to)S +2763(place)S +3003(the)S +3155(panner)S +3456(window.)S +3240 V +10 Y +1260(*)S +10 B +1310(wcsboxGeom)S +10 R +2360(Where)S +2655(to)S +2763(place)S +3003(the)S +3155(coords)S +3451(box.)S +3408 V +10 Y +1260(*)S +10 B +1310(maxContrast)S +10 R +2360(Maximum)S +2807(contrast)S +3153(value.)S +3816 V +9 B +900(DESCRIPTION)S +3936 V +10 R +1260(As)S +1401(a)S +1475(display)S +1794(server,)S +2092(XImtool)S +2461(is)S +2558(started)S +2854(as)S +2967(a)S +3041(separate)S +3397(process)S +3726(from)S +3950(client)S +4202(software)S +4575(such)S +4788(as)S +4901(IRAF.)S +5185(Once)S +5426(it)S +5513(is)S +4056 V +1260(running)S +1606(it)S +1697(will)S +1888(accept)S +2177(client)S +2434(connections)S +2946(simultaneously)S +3587(on)S +3721(\256fo)S +3894(pipes,)S +4164(unix)S +4376(domain)S +4710(sockets,)S +5063(or)S +5180(inet)S +5364(sock-)S +4176 V +1260(ets.)S +1427(A)S +1530(display)S +1850(client)S +2103(like)S +2285(the)S +2439(IRAF)S +10 I +2699(DISPLAY)S +10 R +3120(task)S +3313(makes)S +3600(a)S +3676(connection)S +4146(and)S +4322(sends)S +4576(the)S +4730(image)S +5006(across)S +5287(using)S +5536(a)S +4296 V +1260(modi\256ed)S +1660(IIS)S +1826(Model)S +2131(70)S +2274(protocol.)S +2705(Once)S +2958(the)S +3123(image)S +3410(is)S +3520(loaded)S +3829(in)S +3950(the)S +4115(display)S +4447(bu)S +4547 H + (f)show 10 -.5 mul h (f)show +10 R +4608(er)S +4728(it)S +4827(may)S +5042(be)S +5179(enhanced,)S +4416 V +1260(saved)S +1521(to)S +1633(a)S +1711(disk)S +1912(\256le)S +2074(in)S +2186(a)S +2264(number)S +2603(of)S +2720(di)S +2798 H + (f)show 10 -.5 mul h (f)show +10 R +2859(erent)S +3092(formats,)S +3456(or)S +3573(printed)S +3890(as)S +4007(Encapsulated)S +4574(Postscript)S +5004(to)S +5117(a)S +5196(printer)S +5497(or)S +4536 V +1260(disk)S +1475(\256le.)S +1706(Up)S +1876(to)S +2002(sixteen)S +2332(frame)S +2611(bu)S +2711 H + (f)show 10 -.5 mul h (f)show +10 R +2772(ers)S +2935(are)S +3103(allowed,)S +3491(these)S +3743(may)S +3962(be)S +4103(displayed)S +4533(simultaneously)S +5186(in)S +5311(a)S +5402(tiled)S +4656 V +1260(mode,)S +1537(or)S +1650(blinked)S +1980(frame-to-frame.)S +2673(Each)S +2902(frame)S +3164(may)S +3366(have)S +3584(its)S +3710(own)S +3913(colormap)S +4321(or)S +4435(brightness/contrast)S +5221(enhance-)S +4776 V +1260(ment.)S +1545(Pan/Zoom)S +1992(and)S +2166(cursor)S +2445(readout)S +2774(are)S +2925(permitted)S +3338(using)S +10 I +3585(markers)S +10 R +3912(,)S +3967(on-line)S +4280(help)S +4482(is)S +4579(also)S +4770(available.)S +5016 V +1260(When)S +1540(run)S +1715(in)S +1835(standalone)S +2304(mode,)S +2593(images)S +2918(\(currently)S +3353(IRAF)S +3623(OIF,)S +3851(GIF,)S +4079(Sun)S +4277(Raster\256les)S +4741(or)S +4866(simple)S +5176(FITS)S +5425(\(i.e.)S +5136 V +1260(excluding)S +1693(MEF)S +1938(\256les\))S +2177(formats)S +2521(are)S +2681(permitted\))S +3136(may)S +3347(be)S +3479(loaded)S +3783(on)S +3921(the)S +4081(command)S +4513(line)S +4701(or)S +4822(by)S +4960(using)S +5215(the)S +5375(Load)S +5256 V +1260(Panel.)S +1558(This)S +1787(allows)S +2099(you)S +2300(to)S +2430(browse)S +2770(images)S +3105(and)S +3301(perform)S +3674(the)S +3848(same)S +4105(manipulations)S +4724(as)S +4859(if)S +4972(they)S +5196(had)S +5392(been)S +5376 V +1260(displayed)S +1673(by)S +1803(a)S +1877(client.)S +5664 V +9 B +1080(MOUSE)S +1437(OPERATIONS)S +5784 V +10 R +1260(Clicking)S +1648(and)S +1835(dragging)S +2233(MB1)S +2482(\(mouse)S +2819(button)S +3118(1\))S +3244(in)S +3365(the)S +3530(main)S +3773(image)S +4060(window)S +4425(creates)S +4745(a)S +4833(rectangular)S +5325(region)S +5904 V +1260(marker,)S +1604(used)S +1824(to)S +1939(select)S +2203(a)S +2284(region)S +2576(of)S +2696(the)S +2855(image.)S +3161(If)S +3264(you)S +3451(do)S +3588(this)S +3770(accidentally)S +4289(and)S +4470(don't)S +4718(want)S +4949(the)S +5108(marker,)S +5452(put)S +6024 V +1260(the)S +1419(pointer)S +1739(in)S +1854(the)S +2013(marker)S +2332(and)S +2513(type)S +2722(DELETE)S +3137(or)S +3258(BACKSPACE)S +3886(to)S +4002(delete)S +4278(the)S +4438(marker.)S +4783(With)S +5021(the)S +5181(pointer)S +5502(in)S +6144 V +1260(the)S +1417(marker,)S +1759(MB3)S +2000(will)S +2191(call)S +2370(up)S +2505(a)S +2584(marker)S +2901(menu)S +3158(listing)S +3444(some)S +3690(things)S +3970(you)S +4155(can)S +4328(do)S +4463(with)S +4676(the)S +4833(marker,)S +5174(like)S +5358(zoom)S +6264 V +1260(the)S +1420(outlined)S +1786(region.)S +2104(MB1)S +2348(can)S +2524(be)S +2656(used)S +2877(to)S +2993(drag)S +3208(or)S +3329(resize)S +3599(the)S +3759(marker.)S +4104(See)S +4287(below)S +4570(for)S +4725(more)S +4969(information)S +5480(on)S +6384 V +1260(markers.)S +6624 V +1260(Clicking)S +1642(on)S +1779(MB2)S +2022(in)S +2137(the)S +2296(main)S +2533(image)S +2814(window)S +3173(pans)S +3394(\(one)S +3609(click\))S +3874(or)S +3995(zooms)S +4294(\(two)S +4515(clicks\))S +4819(the)S +4979(image.)S +5286(Further)S +6744 V +1260(clicks)S +1529(cycle)S +1775(through)S +2122(the)S +2280(builtin)S +2578(zoom)S +2836(factors.)S +3198(Moving)S +3551(the)S +3709(pointer)S +4028(to)S +4142(a)S +4222(new)S +4424(location)S +4782(and)S +4962(clicking)S +5319(moves)S +6864 V +1260(the)S +1423(feature)S +1741(under)S +2010(the)S +2174(pointer)S +2499(to)S +2619(the)S +2783(center)S +3068(of)S +3193(the)S +3357(display)S +3688(window.)S +4137(Holding)S +4507(down)S +4771(the)S +4935(Shift)S +5172(key)S +5358(while)S +6984 V +1260(clicking)S +1620(MB2)S +1864(will)S +2058(cause)S +2317(a)S +2399(full-screen)S +2863(crosshair)S +3261(cursor)S +3547(to)S +3662(appear)S +3964(until)S +4185(the)S +4344(button)S +4637(is)S +4741(released,)S +5129(this)S +5311(can)S +5486(be)S +7104 V +1260(useful)S +1534(for)S +1680(\256ne)S +1860(positioning)S +2341(of)S +2454(the)S +2606(cursor.)S +7680 V +900(X11IRAF Project)S +2703(Last change: 12 Aug 2001)S +5530(6)S +7920 V +EP +%%Page: 7 8 +BP +/slant 0 def +/height 1.000000 def +10 R +10 R +480 V +900(XIMTOOL)S +1376(\()S +1425(1)S +1491(\))S +2787(USER COMMANDS )S +4956(XIMTOOL)S +5432(\()S +5481(1)S +5547(\))S +960 V +1260(MB3)S +1507(is)S +1615(used)S +1839(to)S +1958(adjust)S +2238(the)S +2401(contrast)S +2758(and)S +2943(brightness)S +3395(of)S +3519(the)S +3682(displayed)S +4106(image.)S +4446(The)S +4643(position)S +5008(of)S +5133(the)S +5297(pointer)S +1080 V +1260(within)S +1560(the)S +1726(display)S +2059(window)S +2425(determines)S +2906(the)S +3071(contrast)S +3430(and)S +3617(brightness)S +4071(values.)S +4394(Click)S +4654(once)S +4885(to)S +5006(set)S +5160(the)S +5325(values)S +1200 V +1260(corresponding)S +1861(to)S +1969(the)S +2121(pointer)S +2434(location,)S +2811(or)S +2924(click)S +3148(and)S +3322(drag)S +3529(to)S +3637(continuously)S +4184(adjust)S +4453(the)S +4605(display.)S +1488 V +9 B +1080(KEYSTROKE)S +1677(ACCELERATORS)S +1608 V +10 R +1260(The)S +1445(following)S +1864(keystrokes)S +2321(are)S +2472(currently)S +2862(de\256ned)S +3186(in)S +3294(the)S +3446(GUI:)S +1848 V +1620(--------------------)S +10 B +2310(Misc)S +2545(Functions)S +10 R +2998(---------------------)S +1992 V +10 B +1620(Ctrl-b)S +10 R +2620(Previous)S +3000(\(back\))S +3284(frame)S +2100 V +10 B +1620(Ctrl-c)S +10 R +2620(Center)S +2916(frame)S +2208 V +10 B +1620(Ctrl-f)S +10 R +2620(Forward)S +2988(frame)S +2316 V +10 B +1620(Ctrl-i)S +10 R +2620(Invert)S +2888(colormap)S +2424 V +10 B +1620(Ctrl-m)S +10 R +2620(Toggle)S +2933(magni\256er)S +2532 V +10 B +1620(Ctrl-n)S +10 R +2620(Normalize)S +2640 V +10 B +1620(Ctrl-p)S +10 R +2620(Toggle)S +2933(panner)S +2748 V +10 B +1620(Ctrl-r)S +10 R +2620(Register)S +2856 V +10 B +1620(Ctrl-s)S +10 R +2620(Match)S +2905(LUT)S +3129(scaling)S +2964 V +10 B +1620(Ctrl-t)S +10 R +2620(Tile)S +2811(frames)S +3112(toggle)S +3072 V +10 B +1620(Ctrl-u)S +10 R +2620(Unzoom)S +2994(\(zoom=1\))S +3180 V +10 B +1620(Ctrl-x)S +10 R +2620(Flip)S +2812(X)S +3288 V +10 B +1620(Ctrl-y)S +10 R +2620(Flip)S +2812(Y)S +3456 V +10 B +1620(Ctrl-=)S +10 R +2620(Print)S +2845(using)S +3092(current)S +3404(setup)S +3564 V +10 B +1620(Ctrl-<)S +10 R +2620(Decrease)S +3014(blink)S +3250(rate)S +3429(\(blink)S +3698(faster\))S +3672 V +10 B +1620(Ctrl->)S +10 R +2620(Increase)S +2981(blink)S +3217(rate)S +3396(\(blink)S +3665(slower\))S +3780 V +10 B +1620(Ctrl-+)S +10 R +2620(Zoom)S +2889(in)S +3888 V +10 B +1620(Ctrl--)S +10 R +2620(Zoom)S +2889(out)S +4056 V +10 B +1620(Alt-1)S +1866(thru)S +2085(Alt-4)S +10 R +2620(Set)S +2778(frame)S +3040(to)S +3148(be)S +3272(displayed)S +4164 V +10 B +1620(Ctrl-1)S +1910(thru)S +2129(Ctrl9)S +10 R +2620(Set)S +2778(integer)S +3085(zoom)S +3337(factor)S +4332 V +10 B +1620(Ctrl-Alt-q)S +10 R +2620(Quit)S +4440 V +10 B +1620(Ctrl-Alt-f)S +10 R +2620(Fitframe)S +4608 V +1620(---------------------)S +10 B +2343(Panel)S +2612(Toggles)S +10 R +2970(---------------------)S +4752 V +10 B +1620(Alt-b)S +10 R +2620(Blink)S +2873(frames)S +4860 V +10 B +1620(Alt-c)S +10 R +2620(Control)S +2956(panel)S +4968 V +10 B +1620(Alt-h)S +10 R +2620(Help)S +2844(popup)S +5076 V +10 B +1620(Alt-i)S +10 R +2620(Info)S +2816(box)S +2996(popup)S +5184 V +10 B +1620(Alt-l)S +10 R +2620(Load)S +2855(\256le)S +3013(popup)S +5292 V +10 B +1620(Alt-p)S +10 R +2620(Print)S +2845(popup)S +5400 V +10 B +1620(Alt-s)S +10 R +2620(Save)S +2844(popup)S +5508 V +10 B +1620(Alt-t)S +10 R +2620(TclShell)S +2989(popup)S +5736 V +1620(-------------------)S +10 B +2277(Cursor)S +2612(Positioning)S +10 R +3121(------------------)S +5880 V +10 B +1620(Ctrl-h)S +1916(/)S +1974(Ctrl-Left)S +10 R +3020(Move)S +3283(cursor)S +3562(one)S +3736(pixel)S +3966(left)S +5988 V +10 B +1620(Ctrl-j)S +1893(/)S +1951(Ctrl-Down)S +10 R +3020(Move)S +3283(cursor)S +3562(one)S +3736(pixel)S +3966(down)S +6096 V +10 B +1620(Ctrl-k)S +1916(/)S +1974(Ctrl-Up)S +10 R +3020(Move)S +3283(cursor)S +3562(one)S +3736(pixel)S +3966(up)S +6204 V +10 B +1620(Ctrl-l)S +1888(/)S +1946(Ctrl-Right)S +10 R +3020(Move)S +3283(cursor)S +3562(one)S +3736(pixel)S +3966(right)S +6372 V +10 B +1620(Shift-Ctrl-h)S +2155(/)S +2213(Shift-Ctrl-Left)S +10 R +3020(Move)S +3283(cursor)S +3562(ten)S +3714(pixels)S +3983(left)S +6480 V +10 B +1620(Shift-Ctrl-j)S +2132(/)S +2190(Shift-Ctrl-Down)S +10 R +3020(Move)S +3283(cursor)S +3562(ten)S +3714(pixels)S +3983(down)S +6588 V +10 B +1620(Shift-Ctrl-k)S +2155(/)S +2213(Shift-Ctrl-Up)S +10 R +3020(Move)S +3283(cursor)S +3562(ten)S +3714(pixels)S +3983(up)S +6696 V +10 B +1620(Shift-Ctrl-l)S +2127(/)S +2185(Shift-Ctrl-Right)S +10 R +3020(Move)S +3283(cursor)S +3562(ten)S +3714(pixels)S +3983(right)S +6924 V +1620(-------------------)S +10 B +2277(Auto-Registration)S +10 R +3078(-------------------)S +7068 V +10 B +1620(Ctrl-a)S +10 R +2620(Toggle)S +2933(auto-registration)S +7176 V +10 B +1620(Ctrl-o)S +10 R +2620(Set)S +2778(frame)S +3040(o)S +3090 H + (f)show 10 -.5 mul h (f)show +10 R +3151(set)S +7680 V +900(X11IRAF Project)S +2703(Last change: 12 Aug 2001)S +5530(7)S +7920 V +EP +%%Page: 8 9 +BP +/slant 0 def +/height 1.000000 def +10 R +10 R +480 V +900(XIMTOOL)S +1376(\()S +1425(1)S +1491(\))S +2787(USER COMMANDS )S +4956(XIMTOOL)S +5432(\()S +5481(1)S +5547(\))S +960 V +1620(--------------------)S +10 B +2310(Frame)S +2622(Positioning)S +10 R +3131(------------------)S +1104 V +10 B +1620(Ctrl-Left)S +10 R +2620(Shift)S +2845(one)S +3019(full)S +3188(frame)S +3450(left)S +1212 V +10 B +1620(Ctrl-Down)S +10 R +2620(Shift)S +2845(one)S +3019(full)S +3188(frame)S +3450(down)S +1320 V +10 B +1620(Ctrl-Up)S +10 R +2620(Shift)S +2845(one)S +3019(full)S +3188(frame)S +3450(up)S +1428 V +10 B +1620(Ctrl-Right)S +10 R +2620(Shift)S +2845(one)S +3019(full)S +3188(frame)S +3450(right)S +1596 V +10 B +1620(Ctrl-Alt-Left)S +10 R +2620(Shift)S +2845(one)S +3019(half)S +3204(frame)S +3466(left)S +1704 V +10 B +1620(Ctrl-Alt-Down)S +10 R +2620(Shift)S +2845(one)S +3019(half)S +3204(frame)S +3466(down)S +1812 V +10 B +1620(Ctrl-Alt-Up)S +10 R +2620(Shift)S +2845(one)S +3019(half)S +3204(frame)S +3466(up)S +1920 V +10 B +1620(Ctrl-Alt-Right)S +10 R +2620(Shift)S +2845(one)S +3019(half)S +3204(frame)S +3466(right)S +2148 V +1620(-------------------)S +10 B +2277(Peak-Up)S +2679(Centroiding)S +10 R +3226(-----------------)S +2292 V +10 B +1620(Ctrl-[)S +10 R +2620(Decrease)S +3014(centroiding)S +3499(box)S +3679(size)S +2400 V +10 B +1620(Ctrl-])S +10 R +2620(Increase)S +2981(centroiding)S +3466(box)S +3646(size)S +2508 V +10 B +1620(Ctrl-0)S +1910(\(zero\))S +10 R +2620(Centroid/\256nd)S +3184(local)S +3408(maximum)S +2616 V +10 B +1620(Alt-Ctrl-0)S +2076(\(zero\))S +10 R +2620(Find)S +2834(local)S +3058(minimum)S +2844 V +1620(------------------)S +10 B +2244(Mouse)S +2557(Button)S +2882(Events)S +10 R +3201(------------------)S +2988 V +10 B +1620(Shift-Btn1Down)S +10 R +2620(Turn)S +2844(on)S +2974(magni\256er)S +3096 V +10 B +1620(Shift-Btn1Up)S +10 R +2620(Turn)S +2844(o)S +2894 H + (f)show 10 -.5 mul h (f)show +10 R +2985(magni\256er)S +3204 V +10 B +1620(Shift-Btn2Down)S +10 R +2620(Turn)S +2844(on)S +2974(crosshair)S +3364(cursor)S +3312 V +10 B +1620(Shift-Btn2Up)S +10 R +2620(Turn)S +2844(o)S +2894 H + (f)show 10 -.5 mul h (f)show +10 R +2985(crosshair)S +3375(cursor)S +3480 V +10 B +1620(Btn1Down)S +10 R +2620(Create)S +2910(a)S +2984(Marker)S +3588 V +10 B +1620(Btn1Motion)S +10 R +2620(Resize)S +2916(marker)S +3228(being)S +3480(created)S +3696 V +10 B +1620(Btn2Down)S +10 R +2620(Zoom/center)S +3160(on)S +3290(cursor)S +3569(position)S +3804 V +10 B +1620(Btn3Down/Motion)S +10 R +2620(Brightness/contrast)S +3422(scale)S +3651(the)S +3803(image)S +3972 V +10 B +1620(Ctrl-Btn1Down)S +10 R +2620(Create)S +2910(Ruler)S +3162(Marker)S +4080 V +10 B +1620(Ctrl-Btn1Motion)S +10 R +2620(Resize)S +2916(Ruler)S +3168(Marker)S +3491(being)S +3743(created)S +4188 V +10 B +1620(Ctrl-Btn1Up)S +10 R +2620(Destroy)S +2966(Ruler)S +3218(Marker)S +4356 V +10 B +1620(Alt-Motion)S +10 R +2620(Freeze)S +2915(cursor)S +3194(readout)S +4644 V +10 B +1260(NOTE:)S +10 R +1612(These)S +1885(keystrokes)S +2347(only)S +2560(work)S +2800(with)S +3013(the)S +3170(cursor)S +3454(in)S +3567(the)S +3724(main)S +3959(image)S +4238(window,)S +4620(only)S +4833(a)S +4913(few)S +5098(of)S +5217(the)S +5375(com-)S +4764 V +1260(mands)S +1563(are)S +1726(implemented)S +2290(to)S +2410(work)S +2657(within)S +2954(subwindows)S +3495(or)S +3619(markers)S +3981(to)S +4100(avoid)S +4363(con\257icts)S +4743(with)S +4962(translations)S +5464(for)S +4884 V +1260(those)S +1501(objects.)S +1869(If)S +1965(a)S +2039(command)S +2464(does)S +2678(not)S +2837(work,)S +3098(check)S +3361(the)S +3514(cursor)S +3794(location)S +4147(and)S +4322(try)S +4464(it)S +4551(again)S +4798(in)S +4907(the)S +5060(main)S +5291(display)S +5004 V +1260(window.)S +5292 V +9 B +900(FRAME)S +1257(BUFFER)S +1644(CONFIGURATIONS)S +5412 V +10 R +1260(XImtool)S +1634(starts)S +1880(up)S +2015(using)S +2267(default)S +2579(frame)S +2846(bu)S +2946 H + (f)show 10 -.5 mul h (f)show +10 R +3007(er)S +3120(size)S +3311(of)S +3430(512x512)S +3816(pixels,)S +4116(two)S +4302(\(of)S +4454(16)S +4590(possible\))S +4987(frames)S +5294(will)S +5486(be)S +5532 V +1260(created.)S +1608(When)S +1882(loading)S +2218(disk)S +2421(images)S +2740(\(i.e.)S +2961(run)S +3130(in)S +3244(standalone)S +3706(mode\))S +3996(the)S +4153(frame)S +4420(bu)S +4520 H + (f)show 10 -.5 mul h (f)show +10 R +4581(er)S +4693(con\256guration)S +5261(\256le)S +5424(will)S +5652 V +1260(be)S +1385(searched)S +1764(for)S +1911(a)S +1986(de\256ned)S +2311(frame)S +2574(bu)S +2674 H + (f)show 10 -.5 mul h (f)show +10 R +2735(er)S +2843(that)S +3024(is)S +3122(the)S +3275(same)S +3511(size)S +3697(or)S +3811(larger)S +4074(than)S +4277(the)S +4430(current)S +4743(image,)S +5044(if)S +5137(no)S +5269(suitable)S +5772 V +1260(bu)S +1360 H + (f)show 10 -.5 mul h (f)show +10 R +1421(er)S +1529(can)S +1698(be)S +1822(found)S +2085(a)S +2159(custom)S +2478(frame)S +2740(bu)S +2840 H + (f)show 10 -.5 mul h (f)show +10 R +2901(er)S +3008(the)S +3160(same)S +3395(size)S +3580(as)S +3693(the)S +3845(image)S +4119(will)S +4305(be)S +4429(created)S +4746(in)S +4854(an)S +4978(unused)S +5291(portion)S +5892 V +1260(of)S +1373(the)S +1525(con\256guration)S +2088(table.)S +2367(When)S +2635(used)S +2848(as)S +2962(a)S +3037(display)S +3357(server)S +3631(the)S +3784(frame)S +4047(bu)S +4147 H + (f)show 10 -.5 mul h (f)show +10 R +4208(er)S +4316(con\256guration)S +4880(number)S +5216(is)S +5314(passed)S +6012 V +1260(in)S +1381(by)S +1524(the)S +1689(client)S +1954(and)S +2140(loaded)S +2448(explicitly)S +2868(even)S +3098(if)S +3201(it)S +3299(means)S +3596(clipping)S +3966(the)S +4130(image.)S +4471(If)S +4579(a)S +4665(new)S +4873(frame)S +5147(bu)S +5247 H + (f)show 10 -.5 mul h (f)show +10 R +5308(er)S +5427(is)S +5536(a)S +6132 V +1260(di)S +1338 H + (f)show 10 -.5 mul h (f)show +10 R +1399(erent)S +1635(size)S +1827(than)S +2036(previously)S +2495(de\256ned)S +2826(frames,)S +3159(all)S +3296(available)S +3693(frames)S +4001(will)S +4194(be)S +4325(initialized)S +4763(and)S +4945(cleared)S +5270(prior)S +5502(to)S +6252 V +1260(the)S +1422(display.)S +1806(The)S +2001(default)S +2318(frame)S +2590(bu)S +2690 H + (f)show 10 -.5 mul h (f)show +10 R +2751(er)S +2868(con\256guration)S +3441(\256le)S +3609(is)S +3716(/usr/local/lib/imtoolrc,)S +4654(this)S +4838(can)S +5015(be)S +5148(overridden)S +6372 V +1260(by)S +1407(de\256ning)S +1782(a)S +1874(IMTOOLRC)S +2444(environment)S +2997(variable)S +3366(naming)S +3714(the)S +3884(\256le)S +4060(to)S +4186(be)S +4328(used,)S +4584(by)S +4732(creating)S +5101(a)S +5193(using)S +5458(the)S +6492 V +10 I +1260(-imtoolrc)S +10 R +1662(command)S +2086(line)S +2266(\257ag)S +2446(or)S +10 I +2559(imtoolrc)S +10 R +2928(application)S +3402(resource.)S +6732 V +1260(The)S +1445(format)S +1741(of)S +1854(the)S +2006(frame)S +2268(bu)S +2368 H + (f)show 10 -.5 mul h (f)show +10 R +2429(er)S +2536(con\256guration)S +3099(\256le)S +3257(is)S +6972 V +10 I +1410(con\256gno)S +1784(nframes)S +2136(width)S +2389(height)S +2669([extra)S +2943(\256elds])S +7092 V +10 R +1290(e.g.)S +7212 V +1560(1)S +1670(2)S +1780(512)S +1990(512)S +7692 V +900(X11IRAF Project)S +2703(Last change: 12 Aug 2001)S +5530(8)S +7920 V +EP +%%Page: 9 10 +BP +/slant 0 def +/height 1.000000 def +10 R +10 R +480 V +900(XIMTOOL)S +1376(\()S +1425(1)S +1491(\))S +2787(USER COMMANDS )S +4956(XIMTOOL)S +5432(\()S +5481(1)S +5547(\))S +960 V +1560(2)S +1670(2)S +1780(800)S +1990(800)S +1080 V +1560(3)S +1670(1)S +1750(1024)S +1980(1024)S +2480(#)S +2560(comment)S +1200 V +1560(:)S +1648(:)S +1766(:)S +1914(:)S +1440 V +1260(At)S +1417(most)S +1669(128)S +1876(frame)S +2165(bu)S +2265 H + (f)show 10 -.5 mul h (f)show +10 R +2326(er)S +2460(sizes)S +2711(may)S +2940(be)S +3092(de\256ned,)S +3469(each)S +3709(con\256guration)S +4300(may)S +4530(de\256ne)S +4832(up)S +4990(to)S +5126(16)S +5284(frames,)S +1560 V +1260(con\256guration)S +1823(numbers)S +2197(need)S +2415(not)S +2573(be)S +2697(sequential.)S +1848 V +10 B +1260(NOTE:)S +10 R +1640(When)S +1911(de\256ning)S +2272(a)S +2349(new)S +2548(frame)S +2813(bu)S +2913 H + (f)show 10 -.5 mul h (f)show +10 R +2974(er)S +3084(for)S +3233(use)S +3399(with)S +3610(client)S +3865(software)S +4241(such)S +4457(as)S +4573(IRAF)S +4834(the)S +4990(user)S +5190(must)S +5419(also)S +1968 V +1260(remember)S +1694(to)S +1802(de\256ne)S +2076(those)S +2317(frame)S +2579(bu)S +2679 H + (f)show 10 -.5 mul h (f)show +10 R +2740(ers)S +2886(in)S +2994(the)S +3146(IRAF)S +10 I +3404(dev$graphcap)S +10 R +4005(\256le.)S +2256 V +9 B +1080(SUPPORT)S +1527(FOR)S +1744(16)S +1861(DISPLAY)S +2283(FRAMES)S +2376 V +10 R +1260(As)S +1402(part)S +1588(of)S +1702(the)S +1855(extensive)S +2263(GUI)S +2471(changes)S +2823(with)S +3032(the)S +3185(V1.3)S +3413(release,)S +3745(support)S +4076(for)S +4223(the)S +4376(full)S +4546(16)S +4677(frames)S +4979(allowed)S +5326(by)S +5458(the)S +2496 V +1260(IIS)S +1418(protocol)S +1787(is)S +1890(now)S +2098(available.)S +2549(IRAF)S +2813(V2.11.4)S +3171(or)S +3290(later)S +3503(client)S +3761(tasks)S +3997(\(and)S +4209(CDL)S +4444(library\))S +4778(are)S +4934(required)S +5301(to)S +5414(take)S +2616 V +1260(advantage)S +1695(of)S +1809(this)S +1985(frames.)S +2342(All)S +2501(changes)S +2853(are)S +3005(backwards)S +3462(compatible,)S +3962(older)S +4198(versions)S +4563(of)S +4678(IRAF)S +4938(will)S +5126(continue)S +5502(to)S +2736 V +1260(work)S +1503(but)S +1669(cannot)S +1973(access)S +2265(more)S +2508(than)S +2718(the)S +2877(original)S +3225(four)S +3428(frames.)S +3791(The)S +3983(new)S +4186(DISPLAY)S +4645(task)S +4843(will)S +5036(automatically)S +2856 V +1260(sense)S +1513(whether)S +1872(the)S +2032(display)S +2359(server)S +2640(being)S +2900(used)S +3121(supports)S +3498(16)S +3636(frames)S +3945(or)S +4066(the)S +4226(original)S +4575(4)S +4663(and)S +4845(adjust)S +5122(the)S +5282('frame')S +2976 V +1260(parameter)S +1688(maximum)S +2124(accordingly.)S +2680(The)S +2865(changes)S +3216(are)S +3367(fully)S +3586(backwards)S +4042(compatible)S +4516(for)S +4662(other)S +4897(servers.)S +3216 V +1260(More)S +1527(frames)S +1849(are)S +2021(possible)S +2400(if)S +2512(needed)S +2845(but)S +3024(will)S +3231(require)S +3564(further)S +3886(changes)S +4258(to)S +4388(the)S +4562(client)S +4836(IRAF)S +5116(code)S +5356(to)S +5486(be)S +3336 V +1260(e)S +1304 H + (f)show 10 -.5 mul h (f)show +10 R +1365(ective.)S +1698(Allowing)S +2116(creation)S +2477(of)S +2600(more)S +2845(than)S +3056(16)S +3195(frames)S +3505(by)S +3644(the)S +3805(Load)S +4049(panel)S +4304(can)S +4481(be)S +4614(done)S +4847(independently)S +5452(but)S +3456 V +1260(would)S +1547(also)S +1745(require)S +2064(numerous)S +2495(code)S +2720(change)S +3039(to)S +3154(XImtool.)S +3585(Please)S +3877(contact)S +4202(site)S +4378(support)S +4715(if)S +4814(there)S +5051(is)S +5156(a)S +5238(need)S +5464(for)S +3576 V +1260(this,)S +1460(or)S +1573(for)S +1719(workaround)S +2231(suggestions)S +2728(depending)S +3174(on)S +3304(your)S +3517(application.)S +3864 V +9 B +900(MARKERS)S +3984 V +10 R +1260(Although)S +1668(ximtool)S +2010(doesn't)S +2334(do)S +2464(much)S +2717(with)S +2926(markers)S +3278(currently,)S +3694(they)S +3897(are)S +4049(a)S +4124(general)S +4448(feature)S +4755(of)S +4869(the)S +10 I +5022(Gterm)S +10 R +5308(widget)S +4104 V +1260(and)S +1450(are)S +1616(used)S +1844(more)S +2094(extensively)S +2594(in)S +2717(other)S +2967(programs)S +3389(\(e.g.)S +3611(the)S +3778(prototype)S +4206(IRAF)S +4479(science)S +4817(GUI)S +5039(applications\).)S +4224 V +1260(XImtool)S +1645(uses)S +1863(markers)S +2230(for)S +2392(the)S +2560(marker)S +2888(zoom)S +3156(feature)S +3478(discussed)S +3908(above,)S +4218(and)S +4409(also)S +4617(for)S +4780(the)S +4949(panner)S +5267(and)S +5458(the)S +4344 V +1260(coords)S +1559(box.)S +1767(All)S +1928(markers)S +2282(share)S +2525(some)S +2769(of)S +2885(the)S +3040(same)S +3278(characteristics,)S +3906(so)S +4028(it)S +4116(is)S +4215(worthwhile)S +4702(learning)S +5061(basic)S +5298(marker)S +4464 V +1260(manipulation)S +1818(keystrokes.)S +4632 V +10 B +1260(o)S +10 R +1410(MB1)S +1646(anywhere)S +2063(inside)S +2332(a)S +2406(marker)S +2718(may)S +2920(be)S +3044(used)S +3257(to)S +3365(drag)S +3572(the)S +3724(marker.)S +4800 V +10 B +1260(o)S +10 R +1410(MB1)S +1646(near)S +1847(a)S +1921(marker)S +2233(corner)S +2517(or)S +2630(edge,)S +2873(depending)S +3319(on)S +3449(the)S +3601(type)S +3803(of)S +3916(marker,)S +4253(resizes)S +4554(the)S +4706(marker.)S +4968 V +10 B +1260(o)S +10 R +1410(Shift-MB1)S +1874(on)S +2004(the)S +2156(corner)S +2440(of)S +2553(most)S +2778(markers)S +3129(will)S +3315(rotate)S +3572(the)S +3724(marker.)S +5136 V +10 B +1260(o)S +10 R +1410(Markers)S +1775(stack,)S +2038(if)S +2132(you)S +2315(have)S +2536(several)S +2851(markers)S +3205(and)S +3382(you)S +3565(put)S +3726(one)S +3903(on)S +4037(top)S +4199(of)S +4316(the)S +4472(other.)S +4736(The)S +4925(active)S +5197(marker)S +5513(is)S +5256 V +1410(highlighted)S +1909(to)S +2030(tell)S +2201(you)S +2394(which)S +2681(of)S +2807(the)S +2972(stacked)S +3314(markers)S +3678(is)S +3788(active.)S +4094(If)S +4203(the)S +4368(markers)S +4732(overlap,)S +5099(this)S +5287(will)S +5486(be)S +5376 V +1410(marker)S +1722("on)S +1893(top")S +2092(in)S +2200(the)S +2352(stacking)S +2715(order.)S +5544 V +10 B +1260(o)S +10 R +1410(MB2)S +1646(in)S +1754(the)S +1906(body)S +2136(of)S +2249(a)S +2323(marker)S +2635("lowers")S +3013(the)S +3165(marker,)S +3502(i.e.)S +3654(moves)S +3945(it)S +4031(to)S +4139(the)S +4291(bottom)S +4605(of)S +4718(the)S +4870(stacking)S +5233(order.)S +5712 V +10 B +1260(o)S +10 R +1410(Delete)S +1700(or)S +1813(backspace)S +2252(in)S +2360(a)S +2434(marker)S +2746(deletes)S +3053(it.)S +5880 V +10 B +1260(o)S +10 R +1410(Markers)S +1789(have)S +2024(their)S +2254(own)S +2473(translation)S +2942(resources)S +3365(and)S +3557(so)S +3694(the)S +3864(default)S +4189(keystroke)S +4625(commands)S +5106(will)S +5310(not)S +5486(be)S +6000 V +1410(recognized)S +1877(when)S +2123(the)S +2275(cursor)S +2554(is)S +2651(in)S +2759(a)S +2833(marker.)S +6240 V +1410(For)S +1585(example,)S +1984(try)S +2131(placing)S +2461(the)S +2619(pointer)S +2938(anywhere)S +3361(in)S +3476(the)S +3635(coords)S +3938(box,)S +4150(then)S +4359(press)S +4601(MB1)S +4844(and)S +5025(hold)S +5240(it)S +5333(down,)S +6360 V +1410(and)S +1587(drag)S +1797(the)S +1951(coords)S +2249(box)S +2431(marker)S +2745(somewhere)S +3231(else)S +3418(on)S +3550(the)S +3704(screen.)S +4015(You)S +4219(can)S +4389(also)S +4582(resize)S +4846(the)S +5000(coords)S +5298(box)S +5480(by)S +6480 V +1410(dragging)S +1796(a)S +1871(corner,)S +2181(or)S +2296(delete)S +2566(it)S +2654(with)S +2864(the)S +3018(delete)S +3288(or)S +3403(backspace)S +3844(key.)S +4045(\(The)S +4265(Initialize)S +4652(button)S +4940(will)S +5128(get)S +5282(the)S +5436(ori-)S +6600 V +1410(ginal)S +1640(coords)S +1936(box)S +2116(back)S +2334(if)S +2425(you)S +2605(delete)S +2873(it,)S +2984(or)S +3097(you)S +3277(can)S +3445(reset)S +3663(the)S +3815(toggle)S +4095(in)S +4203(the)S +4355(control)S +4668(panel\).)S +6888 V +9 B +1080(PANNER)S +1482(MARKER)S +7008 V +10 R +1260(The)S +1449(panner)S +1754(window)S +2110(always)S +2421(displays)S +2783(the)S +2939(full)S +3112(frame)S +3379(bu)S +3479 H + (f)show 10 -.5 mul h (f)show +10 R +3540(er.)S +3677(Try)S +3856(setting)S +4158(the)S +4315(frame)S +4582(bu)S +4682 H + (f)show 10 -.5 mul h (f)show +10 R +4743(er)S +4855(con\256guration)S +5423(to)S +5536(a)S +7128 V +1260(nonsquare)S +1708(frame)S +1978(bu)S +2078 H + (f)show 10 -.5 mul h (f)show +10 R +2139(er)S +2254(\(e.g.)S +2469(imtcryo\))S +2851(and)S +3033(then)S +3243(displaying)S +3698(a)S +3780(square)S +4078(image)S +4360(\(e.g.)S +4575(dev$pix\))S +4968(and)S +5150(the)S +5309(panner)S +7248 V +1260(will)S +1446(show)S +1687(you)S +1867(exactly)S +2185(where)S +2458(the)S +2610(image)S +2884(has)S +3047(been)S +3265(loaded)S +3561(into)S +3747(the)S +3899(frame.)S +7728 V +900(X11IRAF Project)S +2703(Last change: 12 Aug 2001)S +5530(9)S +7920 V +EP +%%Page: 10 11 +BP +/slant 0 def +/height 1.000000 def +10 R +10 R +480 V +900(XIMTOOL)S +1376(\()S +1425(1)S +1491(\))S +2787(USER COMMANDS )S +4956(XIMTOOL)S +5432(\()S +5481(1)S +5547(\))S +960 V +1260(The)S +1450(panner)S +1756(window)S +2113(uses)S +2321(two)S +2507(markers,)S +2889(one)S +3069(for)S +3221(the)S +3379(window)S +3737(border)S +4033(and)S +4213(one)S +4393(to)S +4507(mark)S +4748(the)S +4906(displayed)S +5325(region)S +1080 V +1260(of)S +1379(the)S +1537(frame.)S +1830(Most)S +2072(of)S +2191(the)S +2349(usual)S +2596(marker)S +2914(keystrokes)S +3377(mentioned)S +3835(below)S +4115(apply)S +4373(to)S +4487(these)S +4728(markers)S +5085(as)S +5204(well,)S +5436(e.g.)S +1200 V +1260(you)S +1443(can)S +1614(use)S +1780(MB1)S +2019(to)S +2130(reposition)S +2563(on)S +2696(the)S +2851(panner)S +3156(window)S +3512(within)S +3802(the)S +3958(main)S +4192(image)S +4470(display)S +4793(window,)S +5174(or)S +5291(to)S +5403(drag)S +1320 V +1260(the)S +1414(region)S +1701(marker)S +2015(within)S +2303(the)S +2457(panner)S +2760(\(pan)S +2969(the)S +3123(image\).)S +3456(Resizing)S +3837(the)S +3990(region)S +4276(marker)S +4589(zooms)S +4881(the)S +5034(image;)S +5337(this)S +5513(is)S +1440 V +1260(a)S +1336(non-aspect)S +1800(constrained)S +2292(zoom.)S +2571(The)S +2758(panner)S +3061(window)S +3415(itself)S +3647(can)S +3817(be)S +3943(resized)S +4257(by)S +4389(dragging)S +4776(a)S +4852(corner)S +5138(with)S +5349(MB1.)S +1560 V +1260(Typing)S +1579(delete)S +1847(or)S +1960(backspace)S +2399(anywhere)S +2816(in)S +2924(the)S +3076(panner)S +3377(window)S +3729(deletes)S +4036(the)S +4188(panner.)S +1800 V +1260(A)S +1362(special)S +1669(case)S +1870(is)S +1967(MB2.)S +2228(Hitting)S +2542(MB2)S +2778(anywhere)S +3195(in)S +3303(the)S +3455(panner)S +3757(window)S +4110(pans)S +4324(the)S +4477(image)S +4752(to)S +4861(that)S +5042(point.)S +5304(This)S +5513(is)S +1920 V +1260(analogous)S +1695(to)S +1803(hitting)S +2095(MB2)S +2331(in)S +2439(the)S +2591(main)S +2821(display)S +3140(window)S +3492(to)S +3600(pan)S +3774(the)S +3926(image.)S +2160 V +1260(The)S +1447(panner)S +1750(marker)S +2064(can)S +2234(be)S +2360(disabled)S +2725(by)S +2857(de\256ning)S +3218(the)S +10 I +3373(displayPanner)S +10 R +3989(GUI)S +4199(resource,)S +4594(its)S +4722(size)S +4910(and)S +5087(location)S +5442(can)S +2280 V +1260(be)S +1384(controlled)S +1819(using)S +2066(the)S +10 I +2218(pannerArea)S +10 R +2725(and)S +10 I +2899(pannerGeom)S +10 R +3450(GUI)S +3657(resources)S +4063(respectively.)S +2568 V +9 B +1080(MAGNIFIER)S +1642(MARKER)S +2688 V +10 R +1260(The)S +1445(magni\256er)S +1858(marker)S +2170(can)S +2338(be)S +2462(used)S +2676(to)S +2785(zoom)S +3038(in)S +3147(on)S +3278(a)S +3353(small)S +3601(area)S +3797(around)S +4105(the)S +4258(cursor.)S +4593(It)S +4685(will)S +4872(be)S +4997(updated)S +5344(as)S +5458(the)S +2808 V +1260(cursor)S +1552(moves)S +1856(but)S +2027(only)S +2248(for)S +2407(small)S +2666(motions)S +3031(\(either)S +3333(mouse)S +3636(movement)S +4100(or)S +4225(with)S +4445(the)S +4609(cursor)S +4900(movement)S +5364(keys-)S +2928 V +1260(trokes\))S +1570(to)S +1681(minimize)S +2092(the)S +2247(impact)S +2552(on)S +2685(the)S +2840(system.)S +3207(The)S +3396(zoom)S +3652(factor)S +3918(is)S +4019(expressed)S +4446(as)S +4563(some)S +4808(fraction)S +5152(of)S +5269(the)S +5425(size)S +3048 V +1260(of)S +1381(the)S +1541(magni\256er)S +1962(marker)S +2282(itself.)S +2575(The)S +2768(default)S +3083(zoom)S +3343(is)S +3448(4,)S +3561(i.e.)S +3721(the)S +3881(area)S +4084(in)S +4200(the)S +4359(marker)S +4678(represents)S +5119(and)S +5300(area)S +5502(in)S +3168 V +1260(the)S +1417(image)S +1696(that's)S +1953(one-fourth)S +2409(the)S +2566(size)S +2756(of)S +2874(the)S +3031(marker.)S +3403(Other)S +3665(zoom)S +3922(factors)S +4228(may)S +4435(be)S +4564(selected)S +4920(using)S +5172(the)S +5330(popup)S +3288 V +1260(menu)S +1512(created)S +1829(by)S +1959(hitting)S +2251(MB1)S +2487(in)S +2595(the)S +2747(marker.)S +3528 V +1260(By)S +1414(default)S +1728(the)S +1887(magni\256er)S +2307(marker)S +2626(is)S +2730(not)S +2895(visible,)S +3224(to)S +3339(toggle)S +3626(it)S +3720(select)S +3985(the)S +10 I +4145(Magni\256er)S +10 R +4577(option)S +4871(from)S +5103(the)S +10 I +5263(Options)S +3648 V +10 R +1260(menubar)S +1660(button.)S +2022(Alternatively,)S +2625(for)S +2792(just)S +2988(a)S +3083(quick)S +3356(look)S +3584(holding)S +3940(down)S +4212(the)S +4384(Shift)S +4629(and)S +4823(MB1)S +5079(buttons)S +5424(will)S +3768 V +1260(display)S +1579(the)S +1731(marker)S +2043(until)S +2257(the)S +2409(button)S +2695(is)S +2792(released.)S +4008 V +1260(The)S +1453(magni\256er)S +1874(marker)S +2194(can)S +2370(be)S +2502(disabled)S +2873(by)S +3011(de\256ning)S +3377(the)S +10 I +3537(displayMagni\256er)S +10 R +4258(GUI)S +4473(resource,)S +4873(its)S +5006(size)S +5199(and)S +5381(loca-)S +4128 V +1260(tion)S +1446(can)S +1614(be)S +1738(controlled)S +2173(using)S +2420(the)S +10 I +2572(magni\256erArea)S +10 R +3179(and)S +10 I +3353(magni\256erGeom)S +10 R +4004(GUI)S +4211(resources)S +4617(respectively.)S +4416 V +9 B +1080(COORDS)S +1492(BOX)S +1714(MARKER)S +4536 V +10 R +1260(XImtool)S +1629(provides)S +2003(a)S +2077(limited)S +2391(notion)S +2677(of)S +2790(world)S +3054(coordinates,)S +3570(allowing)S +3951(frame)S +4214(bu)S +4314 H + (f)show 10 -.5 mul h (f)show +10 R +4375(er)S +4483(pixel)S +4714(coordinates)S +5205(and)S +5380(pixel)S +4656 V +1260(values)S +1546(to)S +1655(be)S +1780(converted)S +2204(to)S +2312(some)S +2553(arbitrary)S +2926(linear)S +3183(client-de\256ned)S +3762(coordinate)S +4213(system.)S +4546(The)S +4731(coords)S +5027(box)S +5207(feature)S +5513(is)S +4776 V +1260(used)S +1473(to)S +1581(display)S +1900(these)S +2135(world)S +2398(coordinates)S +2888(as)S +3001(the)S +3153(pointer)S +3466(is)S +3563(moved)S +3865(about)S +4117(in)S +4225(the)S +4377(image)S +4651(window.)S +5016 V +1260(The)S +1445(quantities)S +1865(displayed)S +2279(in)S +2388(the)S +2541(coords)S +2838(box)S +3019(are)S +3171(X,)S +3299(Y,)S +3427(and)S +3602(Z:)S +3722(the)S +3875(X,Y)S +4075(world)S +4339(coordinates)S +4830(of)S +4944(the)S +5097(pointer,)S +5436(and)S +5136 V +1260(Z,)S +1379(the)S +1534(world)S +1800(equivalent)S +2249(of)S +2365(the)S +2520(pixel)S +2753(value)S +3002(under)S +3262(the)S +3417(pointer.)S +3758(All)S +3919(coordinate)S +4373(systems)S +4723(are)S +4877(linear.)S +5161(The)S +5348(preci-)S +5256 V +1260(sion)S +1466(of)S +1588(a)S +1671(displayed)S +2093(quantity)S +2460(is)S +2566(limited)S +2889(by)S +3028(the)S +3189(range)S +3449(of)S +3571(values)S +3865(of)S +3988(the)S +4150(associated)S +4600(raw)S +4789(frame)S +5061(bu)S +5161 H + (f)show 10 -.5 mul h (f)show +10 R +5222(er)S +5339(value.)S +5376 V +1260(For)S +1431(example,)S +1826(if)S +1919(the)S +2073(display)S +2394(window)S +2748(is)S +2846(512x512)S +3227(only)S +3436(512)S +3617(coordinate)S +4069(values)S +4355(are)S +4507(possible)S +4866(in)S +4975(either)S +5233(axis)S +5425(\(the)S +5496 V +1260(positional)S +1687(precision)S +2085(can)S +2256(be)S +2383(increased)S +2792(however)S +3168(by)S +3301(zooming)S +3684(the)S +3839(image\).)S +4174(More)S +4423(seriously,)S +4842(at)S +4947(most)S +5175(about)S +5430(200)S +5616 V +1260(pixel)S +1501(values)S +1797(can)S +1976(be)S +2111(displayed)S +2534(since)S +2779(this)S +2964(is)S +3071(the)S +3233(limit)S +3463(on)S +3603(the)S +3765(range)S +4026(of)S +4149(pixel)S +4389(values)S +4684(loaded)S +4990(into)S +5186(the)S +5348(frame)S +5736 V +1260(bu)S +1360 H + (f)show 10 -.5 mul h (f)show +10 R +1421(er.)S +1553(If)S +1649(a)S +1723(display)S +2042(pixel)S +2272(is)S +2369(saturated)S +2759(a)S +2833("+")S +3001(will)S +3187(be)S +3311(displayed)S +3724(after)S +3936(the)S +4088(intensity)S +4463(value.)S +5976 V +1260(The)S +1446(coords)S +1743(box)S +1924(is)S +2022(a)S +2097(text)S +2278(marker,)S +2616(it)S +2703(can)S +2872(be)S +2997(moved)S +3300(and)S +3475(resized)S +3788(with)S +3997(the)S +4150(pointer)S +4464(like)S +4645(any)S +4820(other)S +5056(marker.)S +5425(The)S +6096 V +1260(coords)S +1561(box)S +1746(marker)S +2063(can)S +2236(be)S +2365(disabled)S +2733(by)S +2868(de\256ning)S +3231(the)S +10 I +3388(displayCoords)S +10 R +4007(GUI)S +4219(resource,)S +4616(its)S +4746(location)S +5103(can)S +5275(be)S +5403(con-)S +6216 V +1260(trolled)S +1551(by)S +1681(the)S +10 I +1833(wcsboxGeom)S +10 R +2395(GUI)S +2602(resource.)S +6504 V +9 B +1080(MARKER)S +1517(MENU)S +1819(OPTIONS)S +6624 V +10 R +1260(Except)S +1575(for)S +1729(the)S +1889(panner)S +2198(and)S +2380(WCS)S +2635(markers,)S +3019(MB3)S +3263(\(mouse)S +3595(button)S +3889(3\))S +4010(calls)S +4231(up)S +4369(the)S +4529(marker)S +4849(menu)S +5109(providing)S +5536(a)S +6744 V +1260(limited)S +1574(set)S +1715(of)S +1828(functions)S +2230(common)S +2610(to)S +2718(all)S +2848(markers:)S +6912 V +10 B +1260(o)S +10 R +1410(Zoom)S +1686(does)S +1906(an)S +2037(equal)S +2291(aspect)S +2578(zoom)S +2838(of)S +2959(the)S +3119(region)S +3412(outlined)S +3778(by)S +3916(the)S +4076(marker.)S +4421(In)S +4542(this)S +4725(way)S +4929(you)S +5117(can)S +5293(mark)S +5536(a)S +7032 V +1410(region)S +1695(of)S +1808(the)S +1960(image)S +2234(and)S +2408(zoom)S +2660(it)S +2746(up.)S +7200 V +10 B +1260(o)S +10 R +1410(Fill)S +1597(exactly)S +1933(zooms)S +2242(the)S +2412(area)S +2625(outlined)S +3001(by)S +3149(the)S +3319(marker,)S +3674(making)S +4022(it)S +4126(\256ll)S +4286(the)S +4456(display)S +4793(window.)S +5188(Since)S +5458(the)S +7680 V +900(X11IRAF Project)S +2703(Last change: 12 Aug 2001)S +5480(10)S +7920 V +EP +%%Page: 11 12 +BP +/slant 0 def +/height 1.000000 def +10 R +10 R +480 V +900(XIMTOOL)S +1376(\()S +1425(1)S +1491(\))S +2787(USER COMMANDS )S +4956(XIMTOOL)S +5432(\()S +5481(1)S +5547(\))S +960 V +1410(marker)S +1722(is)S +1819(not)S +1977(likely)S +2235(to)S +2343(be)S +2467(exactly)S +2785(square,)S +3100(the)S +3252(aspect)S +3531(ratio)S +3744(of)S +3857(the)S +4009(resultant)S +4383(image)S +4657(will)S +4843(not)S +5001(be)S +5125(unitary.)S +1128 V +10 B +1260(o)S +10 R +1410(Print)S +1643(prints)S +1909(the)S +2069(region)S +2362(outlined)S +2728(by)S +2866(the)S +3027(marker)S +3348(to)S +3465(the)S +3626(printer)S +3931(or)S +4053(\256le)S +4220(currently)S +4619(con\256gured)S +5085(by)S +5224(the)S +5385(Print)S +1248 V +1410(Panel.)S +1416 V +10 B +1260(o)S +10 R +1410(Save)S +1634(saves)S +1880(the)S +2032(region)S +2317(outlined)S +2675(by)S +2805(the)S +2957(marker)S +3269(to)S +3377(the)S +3529(\256le)S +3687(currently)S +4077(con\256gured)S +4534(by)S +4664(the)S +4816(Save)S +5040(Panel.)S +1584 V +10 B +1260(o)S +10 R +1410(Info)S +1606(prints)S +1864(a)S +1938(description)S +2412(of)S +2525(the)S +2677(marked)S +3006(region.)S +3316(The)S +3501(text)S +3681(is)S +3778(printed)S +4091(in)S +4199(the)S +4351(Info)S +4547(Panel.)S +1752 V +10 B +1260(o)S +10 R +1410(Unrotate)S +1789(unrotates)S +2185(a)S +2259(rotated)S +2566(marker.)S +1920 V +10 B +1260(o)S +10 R +1410(Color)S +1668(is)S +1765(a)S +1839(menu)S +2091(of)S +2204(possible)S +2562(marker)S +2874(colors.)S +2088 V +10 B +1260(o)S +10 R +1410(Type)S +1651(is)S +1754(a)S +1834(menu)S +2092(of)S +2211(possible)S +2575(marker)S +2893(types.)S +3165(This)S +3379(is)S +3482(still)S +3669(a)S +3749(little)S +3969(buggy)S +4256(and)S +4437(it)S +4530(isn't)S +4745(very)S +4959(useful,)S +5265(but)S +5430(you)S +2208 V +1410(can)S +1578(use)S +1741(it)S +1827(to)S +1935(play)S +2137(with)S +2345(di)S +2423 H + (f)show 10 -.5 mul h (f)show +10 R +2484(erent)S +2713(types)S +2954(of)S +3067(markers.)S +2376 V +10 B +1260(o)S +10 R +1410(Destroy)S +1760(destroys)S +2127(the)S +2283(marker.)S +2624(You)S +2830(can)S +3002(also)S +3197(hit)S +3337(the)S +3493(delete)S +3766(or)S +3884(backspace)S +4328(key)S +4507(in)S +4620(a)S +4699(marker)S +5016(to)S +5129(destroy)S +5458(the)S +2496 V +1410(marker.)S +2784 V +9 B +1080(RULER)S +1422(MARKERS)S +2904 V +10 R +1260(Holding)S +1629(down)S +1892(the)S +2055(Ctrl)S +2252(key)S +2437(and)S +2622(the)S +2785(Left-Mouse-Button)S +3603(while)S +3866(moving)S +4213(the)S +4376(mouse)S +4678(will)S +4876(drag)S +5095(out)S +5265(a)S +5351("ruler)S +3024 V +1260(marker")S +1622(measuring)S +2077(the)S +2238(distance)S +2604(from)S +2837(the)S +2998(initial)S +3271(point)S +3516(to)S +3633(the)S +3794(current)S +4115(mouse)S +4415(position.)S +4832(Releasing)S +5264(the)S +5424(Ctrl)S +3144 V +1260(key)S +1450(before)S +1750(lifting)S +2041(the)S +2209(mouse)S +2516(button)S +2818(will)S +3020(leave)S +3276(the)S +3444(marker)S +3772(on)S +3918(the)S +4086(display,)S +4446(otherwise)S +4880(it)S +4982(will)S +5185(be)S +5326(erased)S +3264 V +1260(automatically)S +1849(once)S +2082(the)S +2249(mouse)S +2555(button)S +2856(is)S +2968(released.)S +3394(Any)S +3611(number)S +3961(of)S +4088(ruler)S +4320(markers)S +4685(can)S +4867(be)S +5005(created)S +5336(in)S +5458(the)S +3384 V +1260(frame.)S +3624 V +1260(Distances)S +1684(are)S +1841(measured)S +2259(by)S +2395(default)S +2708(in)S +2822(image)S +3102(logical)S +3410(pixels)S +3685(however)S +4064(the)S +4222(Right-Mouse-Button)S +5092(can)S +5266(be)S +5397(used)S +3744 V +1260(inside)S +1529(the)S +1681(marker)S +1993(to)S +2101(popup)S +2381(a)S +2455(menu)S +2707(of)S +2820(options:)S +4032 V +10 B +1260(Sticky)S +10 R +2260(By)S +2430(default)S +2760(rulers)S +3040(are)S +3214(destroyed)S +3655(whenever)S +4095(the)S +4270(display)S +4612(changes)S +4986(due)S +5183(to)S +5314(a)S +5411(pan,)S +4152 V +2260(zoom,)S +2545(\257ip,)S +2742(or)S +2863(frame)S +3133(change.)S +3508(This)S +3724(option)S +4017(will)S +4210(make)S +4463(the)S +4622(ruler)S +4847("sticky")S +5205(so)S +5331(it)S +5424(will)S +4272 V +2260(not)S +2420(be)S +2546(erased,)S +2857(subsequent)S +3333(use)S +3498(of)S +3613(the)S +3767(menu)S +4021(to)S +4132(shows)S +4415(this)S +4593(option)S +4882(to)S +4993(be)S +5120("UnSticky")S +4392 V +2260(to)S +2368(remove)S +2697(this)S +2872(feature.)S +4560 V +10 B +1260(Units)S +10 R +2260(Sub-menu)S +2703(to)S +2813(select)S +3072(the)S +3226(units)S +3453(of)S +3569(the)S +3724(display.)S +4101(If)S +4200(the)S +4355(ISM)S +4566(is)S +4666(enabled)S +5009(and)S +5186(a)S +5263(WCS)S +5513(is)S +4680 V +2260(present)S +2590(in)S +2709(the)S +2872(image)S +3157(and)S +3342(selected)S +3704(as)S +3828(one)S +4013(of)S +4137(the)S +4300(readout)S +4640(options,)S +5001(distances)S +5408(may)S +4800 V +2260(also)S +2467(be)S +2608(read)S +2826(out)S +3001(in)S +3126(units)S +3368(of)S +3498(arcseconds,)S +4007(arcminutes,)S +4517(or)S +4647(degrees)S +4998(instead)S +5328(of)S +5458(the)S +4920 V +2260(default)S +2579(logical)S +2893(pixels.)S +3199(All)S +3369(markers)S +3731(created)S +4059(after)S +4282(the)S +4445(unit)S +4642(change)S +4965(will)S +5162(readout)S +5502(in)S +5040 V +2260(the)S +2412(new)S +2608(units)S +2833(as)S +2946(their)S +3159(default.)S +5208 V +10 B +1260(Color)S +10 R +2260(Select)S +2534(the)S +2686(color)S +2921(of)S +3034(the)S +3186(marker.)S +5376 V +10 B +1260(Draw)S +1528(into)S +1725(Frame)S +10 R +2260(\()S +10 I +2293(Not)S +2495(Yet)S +2680(Implemented)S +10 R +3195(\))S +3315(Draw)S +3593(the)S +3773(marker)S +4113(as)S +4254(overlay)S +4611(graphics)S +5007(in)S +5143(the)S +5323(frame.)S +5496 V +2260(Doing)S +2540(so)S +2659(will)S +2845(retain)S +3102(the)S +3254(marker)S +3566(when)S +3812(printing)S +4159(a)S +4233(hardcopy)S +4634(of)S +4747(the)S +4899(display.)S +5664 V +10 B +1260(Destroy)S +10 R +2260(Destroy)S +2606(the)S +2758(marker.)S +5904 V +2260(The)S +2452(marker)S +2771(can)S +2946(also)S +3144(be)S +3275(destroyed)S +3700(by)S +3837(hitting)S +4136(the)S +4295(Delete)S +4592(or)S +4712(Backspace)S +5176(key)S +5358(while)S +6024 V +2260(the)S +2419(cursor)S +2705(is)S +2809(in)S +2924(the)S +3083(marker.)S +3457(There)S +3726(is)S +3830(presently)S +4233(no)S +4370(way)S +4573(to)S +4688(move)S +4946(the)S +5104(marker)S +5422(to)S +5536(a)S +6144 V +2260(new)S +2456(position)S +2809(in)S +2917(the)S +3069(frame.)S +6432 V +9 B +900(REAL-TIME)S +1447(WCS/PIXEL-VALUE)S +2324(READOUT)S +6552 V +10 R +1260(XImtool)S +1629(now)S +1831(has)S +1994(the)S +2146(ability)S +2433(to)S +2542(display)S +2862(the)S +3015(actual)S +3284(pixel)S +3515(value)S +3762(of)S +3876(an)S +4001(image)S +4276(\(as)S +4423(well)S +4626(as)S +4740(the)S +4893(scaled)S +5173(value)S +5420(pre-)S +6672 V +1260(viously)S +1590(shown\))S +1919(and)S +2098(the)S +2255(cursor)S +2538(position)S +2895(in)S +3007(image)S +3285(WCS)S +3536(values)S +3825(\(e.g.)S +4036(RA/DEC,)S +4462(GLAT/GLONG,)S +5164(etc\).)S +5402(This)S +6792 V +1260(is)S +1358(done)S +1583(using)S +1831(an)S +1956(external)S +2309(task)S +2502(\(the)S +2689('ism_wcspix.e')S +3334(binary)S +3621(in)S +3731(the)S +3885(new)S +4083(distribution\))S +4610(to)S +4720(access)S +5006(the)S +5160(image)S +5436(and)S +6912 V +1260(pass)S +1462(the)S +1614(coordinate/pixel)S +2293(information)S +2795(to)S +2903(the)S +3055(GUI.)S +7152 V +1260(WCS)S +1513(readout)S +1848(is)S +1951(enabled)S +2297(by)S +2433(default)S +2746(but)S +2910(can)S +3084(be)S +3214(toggled)S +3550(or)S +3669(reset)S +3893(using)S +4146(the)S +10 I +4304(WCS/Pix)S +10 R +4702(button)S +4995(on)S +5132(the)S +5291(Coords)S +7272 V +1260(tab)S +1414(in)S +1524(the)S +1678(control)S +1993(panel)S +2241(or)S +2356(the)S +10 I +2510(ISM)S +10 R +2708(toggle)S +2990(on)S +3122(the)S +3276(alt-gui)S +3569(menubar.)S +4005(When)S +4275(enabled,)S +4642(images)S +4957(currently)S +5349(in)S +5458(the)S +7752 V +900(X11IRAF Project)S +2703(Last change: 12 Aug 2001)S +5480(11)S +7920 V +EP +%%Page: 12 13 +BP +/slant 0 def +/height 1.000000 def +10 R +10 R +480 V +900(XIMTOOL)S +1376(\()S +1425(1)S +1491(\))S +2787(USER COMMANDS )S +4956(XIMTOOL)S +5432(\()S +5481(1)S +5547(\))S +960 V +1260(server)S +1537(or)S +1654(subsequently)S +2210(displayed)S +2627(will)S +2817(be)S +2945(passed)S +3245(to)S +3357(the)S +3513(external)S +3868(process)S +4201(where)S +4478(they)S +4684(are)S +4839(cached)S +5150(for)S +5301(access.)S +1080 V +1260(Cursor)S +1579(movements)S +2086(generate)S +2469(an)S +2609(event)S +2871(that)S +3067(maps)S +3324(the)S +3492(current)S +3820(frame)S +4098(bu)S +4198 H + (f)show 10 -.5 mul h (f)show +10 R +4259(er)S +4382(position)S +4751(to)S +4875(a)S +4965(position)S +5334(in)S +5458(the)S +1200 V +1260(cached)S +1566(image.)S +1895(The)S +2080(ISM)S +2288(\(ISM)S +2529(is)S +2626(Image)S +2905(Support)S +3252(Module\))S +3626(task)S +3817(then)S +4019(reads)S +4260(the)S +4413(image)S +4688(to)S +4797(determine)S +5227(the)S +5380(pixel)S +1320 V +1260(value)S +1507(\(or)S +1654(a)S +1729(small)S +1977(table)S +2202(of)S +2316(values)S +2602(around)S +2910(the)S +3063(current)S +3376(position\),)S +3787(and)S +3961(computes)S +4374(one)S +4548(or)S +4661(more)S +4896(coordinates)S +5386(from)S +1440 V +1260(the)S +1428(image)S +1718(position.)S +2142(The)S +2343(ISM)S +2567(task)S +2774(also)S +2981(has)S +3160(access)S +3460(to)S +3584(the)S +3752(associated)S +4209(BPM)S +4468(images)S +4798(and)S +4989(can)S +5174(optionally)S +1560 V +1260(return)S +1528(bad)S +1702(pixel)S +1932(information)S +2434(during)S +2725(the)S +2877(cursor)S +3156(readout.)S +1800 V +1260(By)S +1418(default,)S +1761(the)S +1924(logical)S +2237(and)S +2422(world)S +2696(image)S +2981(coordinates)S +3482(are)S +3644(displayed)S +4068(to)S +4187(both)S +4406(the)S +4569(Coords)S +4899(panel)S +5156(readout)S +5497(as)S +1920 V +1260(well)S +1468(as)S +1587(the)S +1745(main)S +1981(display)S +2306(window)S +2664(wcsbox)S +3005(text)S +3191(marker.)S +3564(Alternate)S +3971(coordinate)S +4428(systems)S +4780(\(e.g.)S +4992(transformation)S +2040 V +1260(of)S +1375(equatorial)S +1806(to)S +1916(galactic)S +2258(coordinates)S +2750(or)S +2865(some)S +3108(other)S +3345(sky)S +3516(system,)S +3852(physical)S +4218(coords,)S +4542(ampli\256er)S +4936(coords,)S +5260(etc\))S +5442(can)S +2160 V +1260(be)S +1391(selected)S +1748(for)S +1900(display)S +2225(by)S +2361(hitting)S +2659(the)S +10 I +2817(Options)S +10 R +3170(toggle)S +3456(on)S +3592(the)S +3750(Coords)S +4075(panel.)S +4382(Available)S +4806(coordinate)S +5263(systems)S +2280 V +1260(are)S +1422(chosen)S +1740(using)S +1999(the)S +10 I +2163(Type)S +10 R +2399(menu)S +2663(on)S +2805(the)S +2969(panel,)S +3252(the)S +3416(readout)S +3757(format)S +4065(\(sexigesimal,)S +4637(degrees,)S +5008(etc\))S +5199(using)S +5458(the)S +2400 V +10 I +1260(Format)S +10 R +1591(menu,)S +1869(and)S +2044(the)S +2197(display)S +2517(to)S +2626(the)S +2779(current)S +3092(panel)S +3339(or)S +3453(main)S +3684(image)S +3959(window)S +4311(using)S +4558(the)S +4710(remaining)S +5145(toggles)S +5464(for)S +2520 V +1260(each)S +1478(WCS.)S +1786(Up)S +1944(to)S +2058(four)S +2261(systems)S +2615(may)S +2824(be)S +2955(displayed)S +3375(at)S +3484(one)S +3665(time,)S +3905(the)S +4064(coordinate)S +4522(panel)S +4775(and)S +4956(wcsbox)S +5298(marker)S +2640 V +1260(will)S +1446(adjust)S +1715(size)S +1900(automatically)S +2474(depending)S +2920(on)S +3050(the)S +3202(display.)S +2880 V +1260(By)S +1408(selecting)S +1794(the)S +10 I +1947(BPM)S +2183(Data)S +10 R +2414(toggle)S +2695(from)S +2920(the)S +3073(Coords.Options)S +3735(panel)S +3983(ximtool)S +4327(is)S +4426(able)S +4624(to)S +4734(\257ag)S +4916(pixels)S +5187(in)S +5297(images)S +3000 V +1260(with)S +1474(an)S +1604(associated)S +2050(bad)S +2230(pixel)S +2466(mask.)S +2768(This)S +2982(bad)S +3162(pixel)S +3398(mask)S +3645(is)S +3748(currently)S +4144(assumed)S +4523(to)S +4636(be)S +4765(named)S +5066(in)S +5179(the)S +5336(image)S +3120 V +1260(header)S +1566("BPM")S +1901(keyword)S +2291(by)S +2432(convention.)S +2972(If)S +3080(the)S +3244(cursor)S +3535(passes)S +3832(over)S +4051(a)S +4137(bad)S +4323(pixel)S +4565(in)S +4685(the)S +4849(mask,)S +5127(the)S +5291(Coords)S +3240 V +1260(bpm)S +1487(display)S +1825(as)S +1957(well)S +2178(as)S +2310(the)S +2481(main)S +2730(window)S +3101(wcsbox)S +3455(will)S +3660(change)S +3990(to)S +4116(a)S +4208(red)S +4383(background)S +4902(color.)S +5210(Only)S +5458(the)S +3360 V +1260(Coords)S +1579(display)S +1898(will)S +2084(show)S +2325(the)S +2477(value,)S +2748(any)S +2922(non-zero)S +3306(value)S +3552(will)S +3738(be)S +3862(\257agged)S +4186(with)S +4394(the)S +4546(color)S +4781(change.)S +3600 V +1260(With)S +1490(the)S +1642(ISM)S +1850(enabled)S +2190(the)S +2342(Compass)S +2739(indicator)S +3124(will)S +3310(display)S +3629(a)S +3703(set)S +3844(of)S +3957(arrows)S +4259(showing)S +4629(North-East)S +5098(if)S +5190(a)S +5265(WCS)S +5513(is)S +3720 V +1260(available,)S +1678(otherwise)S +2099(just)S +2277(the)S +2432(current)S +2747(X-Y)S +2957(axes)S +3167(are)S +3321(shown.)S +3669(The)S +3856(pixel)S +4088(table)S +4314(will)S +4502(display)S +4823(actual)S +5093(pixel)S +5325(values)S +3840 V +1260(from)S +1484(the)S +1636(image,)S +1935(with)S +2143(the)S +2295(ISM)S +2503(o)S +2553 H + (f)show 10 -.5 mul h (f)show +10 R +2644(the)S +2796(pixel)S +3026(table)S +3250(displays)S +3608(the)S +3760(scaled)S +4039(image)S +4313(values)S +4598(from)S +4822(the)S +4974(frame)S +5236(bu)S +5336 H + (f)show 10 -.5 mul h (f)show +10 R +5397(er.)S +4128 V +9 B +900(FREEZING)S +1397(CURSOR)S +1804(READOUT)S +4248 V +10 R +1260(Holding)S +1618(down)S +1871(the)S +2024(Alt)S +2183(key)S +2358(will)S +2545(now)S +2748(freeze)S +3021(the)S +3174(cursor)S +3454(display)S +3774(readout)S +4104(and)S +4279(draw)S +4509(crosshairs)S +4939(on)S +5070(the)S +5223(screen)S +5508(at)S +4368 V +1260(the)S +1424(last)S +1605(position.)S +2025(This)S +2245(can)S +2425(be)S +2561(used)S +2786(for)S +2944(example)S +3324(to)S +3444(position)S +3809(the)S +3973(cursor)S +4264(but)S +4434(then)S +4648(allow)S +4912(the)S +5076(cursor)S +5367(to)S +5486(be)S +4488 V +1260(moved)S +1568(to)S +1682(another)S +2017(window)S +2375(\(to)S +2522(enter)S +2757(text,)S +2968(start)S +3176(a)S +3256(program,)S +3655(whatever\))S +4089(without)S +4431(losing)S +4712(the)S +4871(position)S +5231(informa-)S +4608 V +1260(tion)S +1446(displayed)S +1859(on)S +1989(the)S +2141(screen.)S +4896 V +9 B +900(CUT-GRAPHS)S +5016 V +10 R +1260(XImtool)S +1635(now)S +1843(has)S +2013(the)S +2172(ability)S +2465(to)S +2580(display)S +2906(horizontal)S +3348(and)S +3529(vertical)S +3865(cut-graphs)S +4323(of)S +4443(the)S +4602(display,)S +4953(these)S +5195(appear)S +5497(as)S +5136 V +1260("\257ip-out")S +1672(panels)S +1962(that)S +2147(appear)S +2447(on)S +2582(the)S +2739(bottom)S +3058(and)S +3237(right)S +3461(side)S +3656(of)S +3773(the)S +3929(main)S +4163(display)S +4486(window)S +4842(and)S +5020(are)S +5175(controlled)S +5256 V +1260(by)S +1390(the)S +1542(small)S +1789("H")S +1973(and)S +2147("V")S +2331(buttons)S +2656(in)S +2764(the)S +2916(lower)S +3174(right)S +3394(corner)S +3679(of)S +3793(the)S +3946(window.)S +4354(When)S +4623(both)S +4832(panels)S +5118(are)S +5270(enabled)S +5376 V +1260(the)S +1412(corner)S +1696(area)S +1891(of)S +2004(the)S +2156(display)S +2475(also)S +2666(shows)S +2946(an)S +3070(options)S +3395(panel)S +3641(for)S +3787(the)S +3939(graphs.)S +4290(Current)S +4625(options)S +4950(are:)S +5664 V +10 B +1260(Better)S +1555(Speed)S +10 R +2260(Draw)S +2523(the)S +2687(graphics)S +3067(so)S +3198(they)S +3412(update)S +3720(at)S +3834(the)S +3998(fastest)S +4295(possible)S +4665(rate.)S +4912(This)S +5133(is)S +5243(done)S +5480(by)S +5784 V +2260(subsampling)S +2797(pixels)S +3067(to)S +3176(produce)S +3527(a)S +3601(smoother)S +4003(graph)S +4260(but)S +4418(without)S +4754(sacri\256cing)S +5200(too)S +5358(much)S +5904 V +2260(accuracy.)S +6072 V +10 B +1260(Better)S +1555(Accuracy)S +10 R +2260(Draw)S +2520(the)S +2681(graphics)S +3058(using)S +3314(all)S +3453(screen)S +3746(pixels)S +4024(to)S +4141(produce)S +4501(the)S +4662(most)S +4896(accurate)S +5266(display.)S +6192 V +2260(On)S +2427(fast)S +2615(modern)S +2964(machines)S +3385(this)S +3574(can)S +3756(be)S +3894(enabled)S +4248(with)S +4470(no)S +4614(apparent)S +5001(loss)S +5201(of)S +5328(speed,)S +6312 V +2260(however)S +2635(older)S +2873(machines)S +3283(may)S +3488(wish)S +3710(to)S +3821(use)S +3987(this)S +4165(only)S +4376(occassionally)S +4947(to)S +5058(limit)S +5281(any)S +5458(lag)S +6432 V +2260(in)S +2368(the)S +2520(cursor)S +2799(tracking.)S +6600 V +10 B +1260(Image)S +1556(Pixels)S +10 R +2260(\()S +10 I +2293(Not)S +2468(Yet)S +2626(Implemented)S +10 R +3141(\))S +6768 V +10 B +1260(Jump)S +1535(Cursor)S +10 R +2260(If)S +2367(enabled,)S +2743(large)S +2983(jumps)S +3269(of)S +3393(the)S +3556(cursor)S +3846(do)S +3987(not)S +4156(update)S +4463(the)S +4627(graphics)S +5007(display,)S +5363(small)S +6888 V +2260(movements)S +2751(around)S +3058(an)S +3182(object)S +3456(of)S +3569(interest)S +3893(will)S +4079(update)S +4375(the)S +4527(display)S +4846(continuously.)S +7056 V +10 B +1260(Smooth)S +1618(Cursor)S +10 R +2260(If)S +2356(enabled,)S +2721(all)S +2851(cursor)S +3130(movements)S +3621(cause)S +3872(the)S +4024(display)S +4343(to)S +4451(be)S +4575(updated.)S +4976(This)S +5184(is)S +5281(another)S +7176 V +2260(option)S +2550(that)S +2734(can)S +2906(be)S +3034(set)S +3179(safely)S +3451(on)S +3585(faster)S +3840(machines)S +4251(but)S +4412(will)S +4601(cause)S +4855(a)S +4932(delay)S +5181(on)S +5314(slower)S +7296 V +2260(ones.)S +7776 V +900(X11IRAF Project)S +2703(Last change: 12 Aug 2001)S +5480(12)S +7920 V +EP +%%Page: 13 14 +BP +/slant 0 def +/height 1.000000 def +10 R +10 R +480 V +900(XIMTOOL)S +1376(\()S +1425(1)S +1491(\))S +2787(USER COMMANDS )S +4956(XIMTOOL)S +5432(\()S +5481(1)S +5547(\))S +960 V +10 B +1260(Graphics)S +1685(Cursors)S +10 R +2260(If)S +2362(enabled,)S +2733(the)S +2891(graphics)S +3265(cursors)S +3589(in)S +3703(either)S +3966(of)S +4086(the)S +4245(plots)S +4477(are)S +4635(active)S +4910(and)S +5091(can)S +5266(be)S +5397(used)S +1080 V +2260(to)S +2374(update)S +2676(the)S +2834(cursor)S +3119(readout)S +3454(on)S +3590(the)S +3748(main)S +3984(image)S +4264(window)S +4622(and)S +4802(the)S +4959(complementary)S +1200 V +2260(cut-graph.)S +2729(This)S +2939(can)S +3109(be)S +3235(used)S +3450(for)S +3598(example)S +3969(to)S +4080(freeze)S +4355(the)S +4510(cursor)S +4792(in)S +4903(the)S +5058(main)S +5291(display)S +1320 V +2260(using)S +2518(the)S +2681(Alt)S +2850(key)S +3035(\(see)S +3236(above\),)S +3573(then)S +3786(moving)S +4133(to)S +4252(one)S +4437(of)S +4561(the)S +4723(graphics)S +5101(windows)S +5502(to)S +1440 V +2260(perform)S +2611(cut)S +2763(graphs)S +3059(in)S +3167(only)S +3375(one)S +3549(axis.)S +1680 V +2260(Graphs)S +2583(are)S +2739(\(currently\))S +3200(drawn)S +3484(using)S +3736(only)S +3949(the)S +4106(scaled)S +4390(display)S +4714(values)S +5004(to)S +5117(avoid)S +5375(com-)S +1800 V +2260(plications)S +2706(of)S +2846(accessing)S +3285(multiple)S +3675(images)S +4014(in)S +4148(a)S +4248(mosaic)S +4587(display.)S +4957(Both)S +5208(plots)S +5459(are)S +1920 V +2260(labeled)S +2584(using)S +2837(the)S +2995(frame)S +3263(z1/z2)S +3515(values)S +3806(and)S +3986(contain)S +4316(cursor)S +4602(indicators)S +5033(which)S +5314(update)S +2040 V +2260(contuously.)S +2328 V +9 B +900(PEAK-UP)S +1327(CURSOR)S +1734(CENTROID)S +2246(POSITIONING)S +2448 V +10 R +1260(Several)S +1600(new)S +1807(keystroke)S +2236(commands)S +2710(are)S +2872(available)S +3273(to)S +3392(reposition)S +3833(the)S +3996(cursor)S +4286(to)S +4405(a)S +4490(centroid)S +4858(or)S +4982(min/max)S +5380(pixel)S +2568 V +1260(value)S +1515(within)S +1810(a)S +1893(bounding)S +2310(box)S +2499(of)S +2621(the)S +2782(cursor)S +3070(position,)S +3487(allowing)S +3876(you)S +4065(to)S +4182(approximate)S +4720(the)S +4881(position)S +5242(with)S +5458(the)S +2688 V +1260(mouse)S +1556(and)S +1735(\256ne)S +1920(tune)S +2127(it)S +2218(quickly)S +2553(before)S +2842(typing)S +3133(the)S +3290(application)S +3769(keystroke)S +4192(command.)S +4676(The)S +4866(initial)S +5136(box)S +5322(size)S +5513(is)S +2808 V +1260(controlled)S +1696(with)S +1905(a)S +10 I +1980(centerBoxSize)S +10 R +2576(GUI)S +2784(resource)S +3152(\(defaults)S +3531(to)S +3639(5)S +3719(pixels\))S +4021(but)S +4179(can)S +4347(be)S +4471(adjusted)S +4834(interactively)S +5363(using)S +2928 V +1260(the)S +10 B +1429(Ctrl-[)S +10 R +1719(and)S +10 B +1910(Ctrl-])S +10 R +2200(commands)S +2680(to)S +2805(descrease/increase)S +3587(the)S +3756(box)S +3953(size)S +4155(respectively.)S +4739(A)S +4858(marker)S +5187(will)S +5391(\257ash)S +3048 V +1260(brie\257y)S +1551(to)S +1659(indicate)S +2005(the)S +2157(box)S +2337(size.)S +3288 V +1260(The)S +10 B +1454(Ctrl-0)S +10 R +1754(\(zero\))S +2031(key)S +2215(\256nds)S +2450(either)S +2717(a)S +2801(centroid)S +3168(or)S +3291(the)S +3453(local)S +3687(maximum)S +4133(pixel)S +4373(value)S +4629(within)S +4925(this)S +5110(box)S +5300(region,)S +3408 V +10 B +1260(Alt-Ctrl-0)S +10 R +1724(\(zero\))S +1999(will)S +2193(\256nd)S +2387(the)S +2547(local)S +2779(minimum)S +3207(value.)S +3516(In)S +3637(either)S +3902(case)S +4111(the)S +4271(cursor)S +4558(is)S +4663(reposition)S +5101(to)S +5216(the)S +5375(com-)S +3528 V +1260(puted)S +1520(value.)S +1829(The)S +2022(default)S +2337(peak-up)S +2696(action)S +2978(is)S +3083(to)S +3199(\256nd)S +3393(the)S +3553(centroid)S +3918(position)S +4279(in)S +4395(the)S +4555(box)S +4743(however)S +5125(this)S +5309(can)S +5486(be)S +3648 V +1260(changed)S +1633(to)S +1751(\256nd)S +1947(the)S +2109(max)S +2321(pixel)S +2561(by)S +2701(selection)S +3096(the)S +3258(")S +10 I +3299(Centroid)S +3695(Peaks)S +10 R +3933(")S +4014(option)S +4310(from)S +4544(the)S +4706(main)S +4946(Display)S +5297(control)S +3768 V +1260(panel)S +1506(or)S +1619(by)S +1749(resetting)S +2123(the)S +10 I +2275(peakCentroid)S +10 R +2849(GUI)S +3056(resource)S +3423(\(defaults)S +3802(to)S +3910(True\).)S +4008 V +1260(Centroiding)S +1785(is)S +1899(done)S +2140(using)S +2404(only)S +2629(the)S +2798(scaled)S +3094(screen)S +3395(pixel)S +3642(values)S +3944(and)S +4135(only)S +4360(pixels)S +4646(above)S +4931(the)S +5100(mean)S +5364(value)S +4128 V +1260(within)S +1561(the)S +1728(box)S +1923(are)S +2089(used.)S +2372(It)S +2478(works)S +2767(best)S +2973(if)S +3078(the)S +3244(box)S +3438(size)S +3637(is)S +3748(set)S +3903(appropriately,)S +4504(the)S +4670(centroid)S +5041(position)S +5408(may)S +4248 V +1260(appear)S +1555(to)S +1663(drift)S +1865(if)S +1956(the)S +2108(box)S +2288(is)S +2385(too)S +2543(large)S +2772(and)S +2946(includes)S +3309(too)S +3467(many)S +3719(background)S +4220(pixels.)S +4536 V +9 B +1080(Command)S +1512(Summary)S +4656 V +10 B +1260(Ctrl-0)S +1550(\(zero\))S +10 R +2260(Reposition)S +2724(to)S +2832(centroid/max-pixel)S +4764 V +10 B +1260(Alt-Ctrl-0)S +1716(\(zero\))S +10 R +2260(Reposition)S +2724(to)S +2832(min-pixel)S +4872 V +10 B +1260(Ctrl-[)S +10 R +2260(Decrease)S +2654(centering)S +3055(box)S +3235(size)S +3420(\(min)S +3639(of)S +3752(5\))S +4980 V +10 B +1260(Ctrl-])S +10 R +2260(Increase)S +2621(centering)S +3022(box)S +3202(size)S +5268 V +9 B +1080(Resource)S +1462(Summary)S +5388 V +10 B +1260(peakCentroid)S +1879(=)S +1966(True)S +10 R +2260(Compute)S +2671(the)S +2837(box)S +3032(centroid)S +3404(position,)S +3797(a)S +3886('False')S +4208(value)S +4469(force)S +4718(the)S +4885(max)S +5102(value)S +5363(to)S +5486(be)S +5508 V +2260(used)S +5616 V +10 B +1260(centerBoxSize)S +1894(=)S +1981(5)S +10 R +2260(Size)S +2462(of)S +2575(the)S +2727(centroid)S +3084(box,)S +3289(used)S +3502(as)S +3615(cursor)S +3894(position)S +4247(+/-)S +4394(this)S +4569(value)S +5904 V +9 B +900(AUTO-REGISTRATION)S +1917(OF)S +2069(IMAGES)S +6024 V +10 R +1260(The)S +1451(auto-register)S +1991(feature)S +2303(allows)S +2600(you)S +2786(specify)S +3111(a)S +3192(registration)S +3684(of)S +3804(two)S +3991(or)S +4111(more)S +4353(display)S +4679(frames)S +4987(with)S +5202(an)S +5333(o)S +5383 H + (f)show 10 -.5 mul h (f)show +10 R +5444(set.)S +6144 V +1260(When)S +1538(enabled,)S +1913(this)S +2098(registration)S +2593(is)S +2700(maintained)S +3184(for)S +3340(all)S +3480(frames)S +3791(in)S +3909(the)S +4071(list)S +4234(if)S +4335(any)S +4519(one)S +4703(of)S +4825(them)S +5064(is)S +5170(panned)S +5497(or)S +6264 V +1260(zoomed)S +1606(to)S +1714(a)S +1788(new)S +1984(location)S +2336(in)S +2444(the)S +2596(frame)S +2858(bu)S +2958 H + (f)show 10 -.5 mul h (f)show +10 R +3019(er.)S +6504 V +1260(For)S +1429(example,)S +1822(to)S +1930(use)S +2093(this)S +2268(feature)S +2574(do)S +2704(the)S +2856(following:)S +6672 V +10 B +1620(1\))S +10 R +1870(Enable)S +2201(Auto-Register)S +2821(\(either)S +3135(on)S +3289(the)S +3465(Control)S +3825(Panel)S +4102(or)S +4240(the)S +4417(toolbar)S +4755(on)S +4910(the)S +5087(alt-gui\))S +5436(and)S +6792 V +1870(pan/zoom)S +2294(to)S +2402(some)S +2643(star)S +2817(of)S +2930(interest.)S +6960 V +10 B +1620(2\))S +10 R +1870(Use)S +2055(Mouse-Button-2)S +2746(to)S +2854(center)S +3127(the)S +3279(star)S +3453(in)S +3561(the)S +3713(frame.)S +7128 V +10 B +1620(3\))S +10 R +1870(Cycle)S +2134(through)S +2476(the)S +2629(frames)S +2931(and)S +3106(you)S +3287(may)S +3490(see)S +3648(a)S +3723(small)S +3971(shift)S +4180(of)S +4294(the)S +4447(star.)S +4677(For)S +4847(each)S +5061(frame,)S +5380(posi-)S +7248 V +1870(tion)S +2063(the)S +2222(cursor)S +2508(on)S +2644(the)S +2802(star)S +2982(and)S +3162(type)S +10 B +3370(Ctrl-o)S +10 R +3666(to)S +3780(o)S +3830 H + (f)show 10 -.5 mul h (f)show +10 R +3891(set)S +4038(it)S +4130(to)S +4244(the)S +4402(center.)S +4736(Repeat)S +5049(as)S +5168(necessary.)S +7728 V +900(X11IRAF Project)S +2703(Last change: 12 Aug 2001)S +5480(13)S +7920 V +EP +%%Page: 14 15 +BP +/slant 0 def +/height 1.000000 def +10 R +10 R +480 V +900(XIMTOOL)S +1376(\()S +1425(1)S +1491(\))S +2787(USER COMMANDS )S +4956(XIMTOOL)S +5432(\()S +5481(1)S +5547(\))S +960 V +1870(Small)S +2141(corrections)S +2621(will)S +2814(be)S +2945(cumulatively)S +3504(added)S +3779(so)S +3905(you)S +4092(can)S +4267(use)S +4437(the)S +10 B +4597(Ctrl-0)S +10 R +4895(\(Ctrl-zero\))S +5359(peak-)S +1080 V +1870(up)S +2000(command)S +2424(to)S +2532(centroid)S +2889(each)S +3101(object)S +3375(in)S +3483(the)S +3635(frame)S +3897(before)S +4181(the)S +10 B +4333(Ctrl-o)S +10 R +4623(o)S +4673 H + (f)show 10 -.5 mul h (f)show +10 R +4734(set.)S +1248 V +10 B +1620(4\))S +10 R +1870(Pan)S +2054(around)S +2365(the)S +2521(image)S +2799(in)S +2911(one)S +3089(display)S +3412(frame,)S +3703(then)S +3909(switch)S +4204(frames)S +4509(and)S +4688(the)S +4845(new)S +5046(frame)S +5313(should)S +1368 V +1870(also)S +2061(be)S +2185(panned)S +2503(to)S +2611(the)S +2763(new)S +2959(image)S +3233(with)S +3441(the)S +3593(proper)S +3883(o)S +3933 H + (f)show 10 -.5 mul h (f)show +10 R +3994(set.)S +1536 V +10 B +1620(5\))S +10 R +1870(A)S +10 B +1995(Ctrl-a)S +10 R +2308(command)S +2755(will)S +2964(toggle)S +3267(the)S +3443(feature,)S +3798(o)S +3848 H + (f)show 10 -.5 mul h (f)show +10 R +3909(sets)S +4113(are)S +4288(only)S +4520(allowed)S +4890(when)S +5160(autoreg)S +5513(is)S +1656 V +1870(enabled.)S +1824 V +1260(Hitting)S +10 B +1577(Register)S +10 R +1964(will)S +2153(zero)S +2357(the)S +2512(o)S +2562 H + (f)show 10 -.5 mul h (f)show +10 R +2623(sets,)S +2831(as)S +2947(will)S +3136(toggling)S +3503(the)S +3658(auto-register)S +4195(function.)S +4617(What)S +4867(you)S +5051(should)S +5352(see)S +5513(is)S +1944 V +1260(the)S +1414(object)S +1690(centered)S +2059(in)S +2169(the)S +2323(frame)S +2587(and)S +2763(as)S +2878(you)S +3060(blink)S +3298(through)S +3641(it)S +3729(remains)S +4077(registered)S +4502(but)S +4662(the)S +4815(panner)S +5117(box)S +5298(marker)S +2064 V +1260(is)S +1367(moving)S +1713(around.)S +2085(Drag)S +2324(the)S +2486(panner)S +2797(around)S +3114(and)S +3298(all)S +3438(frames)S +3749(still)S +3940(remain)S +4257(registered)S +4690(with)S +4908(the)S +5070(given)S +5333(o)S +5383 H + (f)show 10 -.5 mul h (f)show +10 R +5444(set.)S +2184 V +1260(The)S +1445(control/info)S +1947(panels)S +2232(now)S +2434(display)S +2753(what)S +2977(the)S +3129(o)S +3179 H + (f)show 10 -.5 mul h (f)show +10 R +3240(set)S +3381(is)S +3478(for)S +3624(each)S +3836(frame.)S +2424 V +1260(The)S +1451(register)S +1786(display)S +2111(list)S +2270(is)S +2373(shared)S +2669(with)S +2883(the)S +3041(blink)S +3283(list)S +3442(and)S +3622(can)S +3796(be)S +3926(set)S +4074(using)S +4328(the)S +4487(Display)S +4835(control)S +5155(panel.)S +5463(By)S +2544 V +1260(default)S +1574(all)S +1711(frames)S +2019(are)S +2177(included)S +2558(in)S +2673(the)S +2832(list.)S +3047(For)S +3222(accessing)S +3640(more)S +3881(than)S +4089(four)S +4291(frames,)S +4623(use)S +4792(the)S +4950(box)S +5136(icon)S +5344(in)S +5458(the)S +2664 V +1260(Blink/Register)S +1876(box)S +2058(of)S +2173(the)S +2327(Display)S +2670(control)S +2985(panel)S +3233(to)S +3343(bring)S +3586(up)S +3718(a)S +3794(new)S +3992(window)S +4346(with)S +4556(access)S +4843(to)S +4954(all)S +5087(16)S +5220(available)S +2784 V +1260(frames.)S +3072 V +9 B +1080(Command)S +1512(Summary)S +3192 V +10 B +1260(Ctrl-o)S +10 R +2260(Set)S +2418(the)S +2570(registration)S +3055(o)S +3105 H + (f)show 10 -.5 mul h (f)show +10 R +3166(set)S +3307(from)S +3531(center)S +3300 V +10 B +1260(Ctrl-a)S +10 R +2260(Toggle)S +2573(the)S +2725(Auto-Register)S +3321(feature)S +3588 V +9 B +900(CONTROL)S +1382(PANEL)S +3708 V +10 R +1260(XImtool)S +1636(has)S +1806(a)S +1887(control)S +2207(panel)S +2460(which)S +2741(can)S +2917(be)S +3049(used)S +3270(to)S +3386(exercise)S +3750(most)S +3983(of)S +4104(the)S +4264(capabilities)S +4757(the)S +4917(program)S +5293(has)S +5464(for)S +3828 V +1260(image)S +1544(display.)S +1928(The)S +2123(control)S +2445(panel)S +2700(can)S +2877(be)S +3010(accessed)S +3397(either)S +3663(via)S +3824(the)S +10 B +3985(Options)S +10 R +4364(menu)S +4625(from)S +4858(the)S +5019(main)S +5258(window)S +3948 V +1260(menubar,)S +1666(or)S +1781(by)S +1913(pressing)S +2278(the)S +2432(leftmost)S +2792(button)S +3080(in)S +3190(the)S +3344(row)S +3531(of)S +3646(buttons)S +3973(at)S +4078(the)S +4233(upper)S +4493(right)S +4715(side)S +4909(of)S +5025(the)S +5180(display)S +5502(in)S +4068 V +1260(the)S +1416(standard)S +1788(GUI)S +1999(\(in)S +2144(the)S +2299(alternate)S +2675(GUI)S +2885(the)S +10 I +3040(Control)S +3385(Bar)S +10 R +3568(accessed)S +3949(by)S +4082(the)S +4237(rightmost)S +4654(button)S +4943(on)S +5076(the)S +5231(menubar)S +4188 V +1260(provides)S +1634(widgets)S +1975(for)S +2121(selecting)S +2506(the)S +2658(desired)S +2976(control)S +3289(panel\).)S +4428 V +1260(The)S +1455(separate)S +1821(windows)S +2222(previously)S +2684(used)S +2907(for)S +3063(Control/Print/Load/Save/etc)S +4231(have)S +4459(now)S +4671(been)S +4899(integrated)S +5339(into)S +5536(a)S +4548 V +1260(single)S +1535(window)S +1893(with)S +2107(the)S +2265(appropriate)S +2755(control)S +3074(panel)S +3326(selectable)S +3755(with)S +3969(a)S +4049(Tab)S +4240(widget.)S +4603(There)S +4871(are)S +5028(also)S +5224(new)S +5425(Tab)S +4668 V +1260(panels)S +1547(for)S +1696(setting)S +1996(the)S +2151(frame)S +2416(tile)S +2577(con\256guration)S +3143(\(see)S +3336(below\),)S +3671(more)S +3909(detailed)S +4258(information)S +4763(on)S +4896(the)S +5051(server)S +5327(status,)S +4788 V +1260(and)S +1434(selecting)S +1819(the)S +1971(WCS)S +2218(readout)S +2547(options)S +2872(\(see)S +3062(below\).)S +5076 V +9 B +1080(VIEW)S +1357(CONTROLS)S +5196 V +10 R +1260(The)S +10 B +1452(Frame)S +1771(box)S +10 R +1964(will)S +2157(list)S +2317(only)S +2532(the)S +2692(frame)S +2962(bu)S +3062 H + (f)show 10 -.5 mul h (f)show +10 R +3123(ers)S +3277(you)S +3465(currently)S +3863(have)S +4089(de\256ned.)S +4476(Currently,)S +4922(the)S +5082(only)S +5298(way)S +5502(to)S +5316 V +1260(destroy)S +1591(a)S +1672(frame)S +1941(bu)S +2041 H + (f)show 10 -.5 mul h (f)show +10 R +2102(er)S +2216(is)S +2320(to)S +2435(change)S +2754(the)S +2913(frame)S +3182(bu)S +3282 H + (f)show 10 -.5 mul h (f)show +10 R +3343(er)S +3457(con\256guration,)S +4052(new)S +4255(frame)S +4524(bu)S +4624 H + (f)show 10 -.5 mul h (f)show +10 R +4685(ers)S +4838(\(up)S +5008(to)S +5123(16\))S +5293(will)S +5486(be)S +5436 V +1260(created)S +1586(automatically)S +2169(if)S +2269(requested)S +2690(by)S +2829(the)S +2990(client.)S +3306(The)S +3500(number)S +3845(of)S +3968(frame)S +4240(bu)S +4340 H + (f)show 10 -.5 mul h (f)show +10 R +4401(ers)S +4557(created)S +4884(at)S +4996(startup)S +5308(can)S +5486(be)S +5556 V +1260(controlled)S +1695(using)S +1942(the)S +10 I +2094(-nframes)S +10 R +2479(command-line)S +3086(switch)S +3377(or)S +3490(the)S +10 I +3642(defNFrames)S +10 R +4166(resource.)S +5796 V +1260(The)S +10 B +1455(text)S +1655(display)S +10 R +2002(window)S +2364(gives)S +2615(the)S +2777(\256eld)S +2995(X,Y)S +3204(center,)S +3513(X,Y)S +3723(scale)S +3963(factors,)S +4300(the)S +4463(X,Y)S +4673(zoom)S +4936(factors,)S +5273(and)S +5458(the)S +5916 V +1260(frame)S +1538(o)S +1588 H + (f)show 10 -.5 mul h (f)show +10 R +1649(set)S +1806(used)S +2035(in)S +2159(Auto-Registration.)S +2952(The)S +3152(scale)S +3396(factor)S +3673(and)S +3862(the)S +4029(zoom)S +4296(factor)S +4573(will)S +4774(be)S +4913(the)S +5080(same)S +5330(unless)S +6036 V +10 I +1260(autoscale)S +10 R +1685(is)S +1794(enabled.)S +2171(The)S +2368(scale)S +2610(is)S +2720(in)S +2841(units)S +3079(of)S +3205(display)S +3537(pixels)S +3819(per)S +3989(frame)S +4264(bu)S +4364 H + (f)show 10 -.5 mul h (f)show +10 R +4425(er)S +4545(pixel,)S +4813(and)S +5000(is)S +5110(an)S +5247(absolute)S +6156 V +1260(measure)S +1629(\(it)S +1755(doesn't)S +2086(matter)S +2377(whether)S +2734(or)S +2853(not)S +3017(autoscale)S +3424(is)S +3527(enabled\).)S +3931(Zoom)S +4206(is)S +4309(relative)S +4644(to)S +4758(the)S +4916(autoscale)S +5323(factor,)S +6276 V +1260(which)S +1534(is)S +1631(1.0)S +1786(if)S +1877(autoscaling)S +2362(is)S +2459(disabled.)S +2847(This)S +3055(information)S +3557(is)S +3654(also)S +3845(presented)S +4257(in)S +4365(the)S +4517(Info)S +4713(panel.)S +6516 V +1260(The)S +1446(numbers)S +1821(in)S +1930(the)S +10 B +2083(Zoom)S +2364(box)S +10 R +2551(are)S +2703(zoom)S +2956(factors.)S +3283(Blue)S +3503(numbers)S +3878(zoom,)S +4156(red)S +4314(numbers)S +4689(dezoom.)S +10 I +5061(Zoom)S +5321(In)S +10 R +5436(and)S +6636 V +10 I +1260(Zoom)S +1526(Out)S +10 R +1714(may)S +1924(be)S +2055(used)S +2275(to)S +2390(go)S +2527(to)S +2642(larger)S +2911(or)S +3031(smaller)S +3362(zoom)S +3621(factors,)S +3954(e.g.)S +10 I +4135(Ctrl-5)S +10 R +4417(followed)S +4809(by)S +4946("Zoom)S +5263(In")S +5424(will)S +6756 V +1260(get)S +1421(you)S +1610(to)S +1727(zoom)S +1988(factor)S +2259(10.)S +2453(Speci\256c)S +2814(zoom)S +3075(factors)S +3385(may)S +3596(also)S +3796(be)S +3929(accessed)S +4316(directly)S +4660(as)S +4782(Control)S +5128(keystrokes,)S +6876 V +1260(e.g.)S +1448(Ctrl-5)S +1731(will)S +1931(set)S +2086(zoom)S +2352(factor)S +2628(5.)S +10 I +2747(Center)S +10 R +3063(centers)S +3389(the)S +3555(\256eld.)S +10 I +3832(Toggle)S +4154(Zoom)S +10 R +4426(toggles)S +4758(between)S +5133(the)S +5298(current)S +6996 V +1260(zoom/center)S +1783(values,)S +2093(and)S +2267(the)S +2419(unzoomed)S +2865(image.)S +7236 V +10 I +1260(Aspect)S +10 R +1564(recomputes)S +2062(the)S +2222(view)S +2454(so)S +2581(that)S +2769(the)S +2929(aspect)S +3217(ratio)S +3439(is)S +3545(1.0.)S +3734(Aspect)S +4050(also)S +4250(integerizes)S +4721(the)S +4882(zoom)S +5143(factor)S +5414(\(use)S +7716 V +900(X11IRAF Project)S +2703(Last change: 12 Aug 2001)S +5480(14)S +7920 V +EP +%%Page: 15 16 +BP +/slant 0 def +/height 1.000000 def +10 R +10 R +480 V +900(XIMTOOL)S +1376(\()S +1425(1)S +1491(\))S +2787(USER COMMANDS )S +4956(XIMTOOL)S +5432(\()S +5481(1)S +5547(\))S +960 V +1260(the)S +1412(version)S +1736(in)S +1844(the)S +1996(View)S +2242(menu)S +2494(if)S +2585(you)S +2765(don't)S +3006(want)S +3230(integerization\).)S +1200 V +10 I +1260(Fit)S +1408(Frame)S +10 R +1706(makes)S +1993(the)S +2147(display)S +2468(window)S +2822(the)S +2976(same)S +3213(size)S +3400(as)S +3515(the)S +3669(frame)S +3933(bu)S +4033 H + (f)show 10 -.5 mul h (f)show +10 R +4094(er.)S +4228(Note)S +4454(that)S +4636(autoscale)S +5039(has)S +5204(much)S +5458(the)S +1320 V +1260(same)S +1499(e)S +1543 H + (f)show 10 -.5 mul h (f)show +10 R +1604(ect,)S +1779(and)S +1957(allows)S +2252(you)S +2436(to)S +2548(resize)S +2814(the)S +2970(display)S +3293(window)S +3649(to)S +3761(any)S +3938(size)S +4126(you)S +4309(want,)S +4561(or)S +4677(view)S +4904(images)S +5220(too)S +5381(large)S +1440 V +1260(to)S +1368(\256t)S +1482(on)S +1612(the)S +1764(screen.)S +1728 V +9 B +1080(ENHANCEMENT)S +1827(CONTROLS)S +1848 V +10 R +1260(At)S +1398(the)S +1558(top)S +1724(is)S +1829(a)S +1911(scrolled)S +2265(list)S +2426(of)S +2547(all)S +2685(the)S +2845(available)S +3243(colormaps.)S +3722(Click)S +3977(on)S +4115(the)S +4275(one)S +4457(you)S +4645(want)S +4878(to)S +4995(load.)S +5231(You)S +5442(can)S +1968 V +1260(add)S +1447(your)S +1673(own)S +1888(colormaps)S +2347(to)S +2468(this)S +2656(list)S +2822(by)S +2965(de\256ning)S +3336(the)S +10 I +3501(cmap[12])S +10 R +3938(or)S +10 I +4063(cmapDir[12])S +10 R +4638(command)S +5074(line)S +5266(\257ags)S +5497(or)S +2088 V +1260(application)S +1734(resources.)S +2328 V +1260(The)S +1451(two)S +1637(sliders)S +1934(adjust)S +2209(the)S +2367(contrast)S +2719(\(upper)S +3015(slider\))S +3306(and)S +3486(brightness)S +3933(\(lower)S +4229(slider\))S +4520(of)S +4640(the)S +4799(display.)S +5150(The)S +10 I +5342(Invert)S +2448 V +10 R +1260(button)S +1549(inverts)S +1854(the)S +2009(colormap)S +2419(\(multiples)S +2858(the)S +3013(contrast)S +3362(by)S +3495(-1.0\).)S +3744(Note)S +3971(that)S +4154(due)S +4331(to)S +4442(the)S +4597(use)S +4763(of)S +4879(the)S +5033(private)S +5342(color-)S +2568 V +1260(map)S +1464(the)S +1618(sliders)S +1911(are)S +2064(a)S +2140(bit)S +2278(sluggish)S +2644(when)S +2892(dragged)S +3245(to)S +3355(window)S +3709(the)S +3863(display.)S +4209(If)S +4307(this)S +4484(is)S +4583(annoying,)S +5013(using)S +5263(MB3)S +5502(in)S +2688 V +1260(the)S +1412(display)S +1731(window)S +2083(is)S +2180(faster.)S +2928 V +1260(The)S +10 I +1454(Normalize)S +10 R +1910(button)S +2205(\(on)S +2377(the)S +2538(bottom)S +2861(of)S +2983(the)S +3145(control)S +3468(panel\))S +3757(will)S +3953(normalize)S +4392(the)S +4554(enhancement,)S +5145(i.e.)S +5307(set)S +5458(the)S +3048 V +1260(contrast)S +1613(and)S +1794(brightness)S +2242(to)S +2357(the)S +2516(default)S +2830(one-to-one)S +3299(values)S +3590(\(1.0,)S +3809(0.5\).)S +4028(This)S +4242(is)S +4345(the)S +4503(preferred)S +4903(setting)S +5206(for)S +5358(many)S +3168 V +1260(of)S +1381(the)S +1541(pseudocolor)S +2067(colortables)S +2543(and)S +2725(for)S +2879(private)S +3194(colormaps)S +3648(loaded)S +3952(from)S +4184(disk)S +4389(images.)S +4735(The)S +10 I +4929(Initialize)S +10 R +5324(button)S +3288 V +1260(does)S +1473(a)S +1547(reset)S +1765(of)S +1878(the)S +2030(server.)S +3576 V +9 B +1080(BLINK)S +1397(CONTROLS)S +3696 V +10 I +1260(Blink)S +1503(frames)S +10 R +1807(is)S +1907(the)S +2062(list)S +2218(of)S +2334(frames)S +2638(to)S +2749(be)S +2876(blinked.)S +3234(When)S +3505(blink)S +3744(mode)S +3999(is)S +4099(in)S +4210(e)S +4254 H + (f)show 10 -.5 mul h (f)show +10 R +4315(ect)S +4464(ximtool)S +4809(just)S +4987(cycles)S +5269(through)S +3816 V +1260(these)S +1498(frames)S +1802(endlessly,)S +2232(pausing)S +2576("blink)S +2856(rate")S +3079(seconds)S +3428(between)S +3793(each)S +4008(frame.)S +4298(The)S +4486(same)S +4724(frame)S +4989(can)S +5160(be)S +5287(entered)S +3936 V +1260(in)S +1369(the)S +1523(list)S +1678(more)S +1915(than)S +2119(once.)S +2394(To)S +2537(program)S +2907(an)S +3033(arbitrary)S +3408(list)S +3563(of)S +3678(blink)S +3916(frames,)S +4244(hit)S +4382(the)S +4536(Reset)S +4790(button)S +5078(and)S +5254(click)S +5480(on)S +4056 V +1260(each)S +1479(blink)S +1722(frame)S +1991(button)S +2284(until)S +2505(it)S +2597(is)S +2700(set)S +2847(to)S +2961(the)S +3119(desired)S +3443(frame)S +3711(number.)S +4107(The)S +4298(main)S +4534(control)S +4853(panel)S +5105(allows)S +5402(only)S +4176 V +1260(the)S +1416(original)S +1761(four)S +1961(frames)S +2266(to)S +2378(be)S +2506(speci\256ed)S +2895(in)S +3007(the)S +3163(blink)S +3403(list,)S +3585(however)S +3962(access)S +4250(to)S +4362(the)S +4518(full)S +4691(list)S +4849(of)S +4967(16)S +5102(frames)S +5408(now)S +4296 V +1260(supported)S +1684(is)S +1781(gained)S +2077(using)S +2324(the)S +2476(box)S +2656(icon)S +2858(button)S +3144(next)S +3346(the)S +3498(the)S +10 I +3650(Reset)S +10 R +3896(button)S +4182(to)S +4290(bring)S +4531(up)S +4661(a)S +4735(new)S +4931(control)S +5244(panel.)S +4536 V +1260(The)S +10 I +1455(Blink)S +1706(Rate)S +10 R +1929(can)S +2107(be)S +2242(adjusted)S +2616(as)S +2740(slow)S +2970(or)S +3094(as)S +3218(fast)S +3403(as)S +3527(you)S +3718(want)S +3953(using)S +4211(the)S +4374(arrow)S +4647(buttons.)S +5008(If)S +5115(you)S +5306(set)S +5458(the)S +4656 V +1260(blink)S +1496(rate)S +1675(small)S +1922(enough)S +2246(it)S +2332(will)S +2518(go)S +2648(to)S +2756(zero,)S +2982(enabling)S +3356(single)S +3625(step)S +3816(mode)S +4068(\(see)S +4258(below\).)S +4896 V +1260(The)S +10 I +1449(Register)S +10 R +1816(button)S +2106(registers)S +2478(all)S +2612(the)S +2768(blink)S +3008(frames)S +3313(with)S +3525(the)S +3681(current)S +3997(display)S +4320(frame.)S +4612(Frames)S +4941(not)S +5104(in)S +5217(the)S +5374(blink)S +5016 V +1260(list)S +1413(are)S +1564(not)S +1722(a)S +1766 H + (f)show 10 -.5 mul h (f)show +10 R +1827(ected.)S +5256 V +1260(The)S +10 I +1446(Match)S +1732(LUTs)S +10 R +1986(button)S +2273(sets)S +2454(the)S +2607(enhancement)S +3164(of)S +3278(all)S +3409(blink)S +3646(frames)S +3948(to)S +4057(the)S +4210(same)S +4446(values)S +4733(as)S +4848(the)S +5002(display)S +5323(frame.)S +5376 V +1260(Frames)S +1584(not)S +1742(in)S +1850(the)S +2002(blink)S +2238(list)S +2391(are)S +2542(not)S +2700(a)S +2744 H + (f)show 10 -.5 mul h (f)show +10 R +2805(ected.)S +5616 V +1260(The)S +10 I +1453(Blink)S +10 R +1702(button)S +1996(turns)S +2234(blink)S +2478(on)S +2616(and)S +2799(o)S +2849 H + (f)show 10 -.5 mul h (f)show +10 R +2910(.)S +2974(When)S +3251(the)S +3412(blink)S +3657(rate)S +3845(is)S +3951(set)S +4101(to)S +4218(zero)S +4428(the)S +4589(Blink)S +4851(button)S +5146(will)S +5341(single)S +5736 V +1260(step)S +1451(through)S +1792(the)S +1944(blink)S +2180(frames,)S +2506(one)S +2680(frame)S +2942(per)S +3099(button)S +3385(press.)S +5976 V +10 B +1260(NOTE:)S +10 R +1615(You)S +1825(can)S +2001(blink)S +2245(no)S +2383(matter)S +2677(what)S +2910(ximtool)S +3261(options)S +3595(are)S +3755(in)S +3872(e)S +3916 H + (f)show 10 -.5 mul h (f)show +10 R +3977(ect,)S +4157(but)S +4324(many)S +4585(of)S +4707(these)S +4951(will)S +5146(slow)S +5374(blink)S +6096 V +1260(down.)S +1541(To)S +1686(get)S +1842(the)S +1998(fastest)S +2287(blink)S +2527(you)S +2711(may)S +2917(want)S +3145(to)S +3257(turn)S +3451(o)S +3501 H + (f)show 10 -.5 mul h (f)show +10 R +3595(the)S +3750(panner)S +4054(and)S +4231(coords)S +4530(box,)S +4738(and)S +4915(match)S +5192(the)S +5347(LUTs)S +6216 V +1260(of)S +1382(all)S +1521(the)S +1682(blink)S +1927(frames.)S +2292(All)S +2459(the)S +2620(ximtool)S +2971(controls)S +3332(are)S +3492(fully)S +3721(active)S +3999(during)S +4300(blink)S +4546(mode,)S +4833(plus)S +5040(you)S +5230(can)S +5408(load)S +6336 V +1260(frames)S +1561(etc.)S +6624 V +9 B +1080(OPTIONS:)S +6744 V +10 B +1260(Panner)S +6864 V +10 R +1510(Toggles)S +1862(whether)S +2213(to)S +2321(display)S +2640(the)S +2792(Panner)S +3099(marker.)S +7032 V +10 B +1260(Magni\256er)S +7152 V +10 R +1510(Toggles)S +1862(whether)S +2213(to)S +2321(display)S +2640(the)S +2792(Magni\256er)S +3216(marker.)S +7680 V +900(X11IRAF Project)S +2703(Last change: 12 Aug 2001)S +5480(15)S +7920 V +EP +%%Page: 16 17 +BP +/slant 0 def +/height 1.000000 def +10 R +10 R +480 V +900(XIMTOOL)S +1376(\()S +1425(1)S +1491(\))S +2787(USER COMMANDS )S +4956(XIMTOOL)S +5432(\()S +5481(1)S +5547(\))S +960 V +10 B +1260(Coords)S +1601(Box)S +1080 V +10 R +1510(Toggles)S +1862(whether)S +2213(to)S +2321(display)S +2640(the)S +2792(coordinate)S +3243(box)S +3423(marker.)S +1248 V +10 B +1260(Autoscale)S +1368 V +10 R +1510(If)S +1613(autoscale)S +2021(is)S +2126(enabled)S +2474(then)S +2684(at)S +2794(zoom=1,)S +3185(the)S +3345(frame)S +3615(bu)S +3715 H + (f)show 10 -.5 mul h (f)show +10 R +3776(er)S +3891(will)S +4085(be)S +4217(automatically)S +4799(scaled)S +5086(to)S +5202(\256t)S +5324(within)S +1488 V +1510(the)S +1667(display)S +1991(window.)S +2373(With)S +2608(autoscale)S +3014(disabled)S +3382(\(the)S +3572(default\),)S +3942(the)S +4099(image)S +4377(scale)S +4610(is)S +4711(more)S +4950(predictable,)S +5452(but)S +1608 V +1510(the)S +1662(image)S +1936(may)S +2138(be)S +2262(clipped)S +2586(by)S +2716(the)S +2868(display)S +3187(window,)S +3564(or)S +3677(may)S +3879(not)S +4037(\256ll)S +4179(the)S +4331(display)S +4650(window.)S +1776 V +10 B +1260(Antialias)S +1896 V +10 R +1510(When)S +1780(dezooming)S +2257(an)S +2384(image,)S +2686(i.e.,)S +2866(displaying)S +3316(a)S +3393(large)S +3625(image)S +3902(in)S +4013(a)S +4090(smaller)S +4417(display)S +4739(window,)S +5119(antialiasing)S +2016 V +1510(causes)S +1802(all)S +1933(the)S +2086(data)S +2283(to)S +2392(be)S +2517(used)S +2731(to)S +2840(compute)S +3215(the)S +3368(displayed)S +3782(image.)S +4082(If)S +4179(antialiasing)S +4671(is)S +4769(disabled)S +5133(then)S +5336(image)S +2136 V +1510(is)S +1607(subsampled)S +2109(to)S +2217(compute)S +2592(the)S +2745(displayed)S +3159(image.)S +3459(Antialiasing)S +3979(can)S +4148(prevent)S +4478(subsampling)S +5015(from)S +5240(omitting)S +2256 V +1510(image)S +1792(features)S +2145(that)S +2333(don't)S +2582(fall)S +2753(in)S +2869(the)S +3028(sample)S +3348(grid,)S +3571(but)S +3736(it)S +3829(is)S +3933(signi\256cantly)S +4465(slower)S +4768(than)S +4977(dezooming)S +5458(via)S +2376 V +1510(subsampling.)S +2101(The)S +2286(default)S +2593(is)S +2690(no)S +2820(antialising.)S +2544 V +10 B +1260(Tile)S +1457(Frames)S +2664 V +10 R +1510(The)S +1695(default)S +2002(display)S +2321(mode)S +2573(is)S +2670(to)S +2778(view)S +3002(one)S +3177(frame)S +3440(at)S +3543(a)S +3618(time.)S +3852(In)S +3966(tile)S +4125(frames)S +4427(mode,)S +4705(2)S +4786(or)S +4900(4)S +4981(frames)S +5283(may)S +5486(be)S +2784 V +1510(viewed)S +1834(simultaneously)S +2476(in)S +2590(the)S +2748(display)S +3073(window.)S +3486(All)S +3650(the)S +3808(usual)S +4055(operations)S +4507(\(zoom)S +4798(and)S +4977(pan,)S +5181(colortable)S +2904 V +1510(enhancement,)S +2091(cursor)S +2370(readback,)S +2784(etc.\))S +2988(still)S +3169(work)S +3404(for)S +3550(each)S +3762(frame)S +4024(even)S +4242(when)S +4488(in)S +4596(tile)S +4754(frames)S +5055(mode.)S +3072 V +10 B +1260(Warnings)S +3192 V +10 R +1510(The)S +1701(warnings)S +2103(options)S +2435(toggles)S +2761(whether)S +3119(you)S +3306(see)S +3470(warning)S +3834(dialog)S +4121(boxes)S +4391(in)S +4506(situations)S +4927(like)S +5114(overwriting)S +3312 V +1510(an)S +1634(existing)S +1981(\256le,)S +2164(clearing)S +2515(the)S +2667(frame)S +2929(bu)S +3029 H + (f)show 10 -.5 mul h (f)show +10 R +3090(er,)S +3222(etc.)S +3480 V +10 B +1260(Centroid)S +1673(Peaks)S +3600 V +10 R +1510(If)S +1608(enabled,)S +1975(the)S +10 B +2129(Ctrl-0)S +10 R +2421(keystroke)S +2841(will)S +3029(reposition)S +3461(the)S +3615(cursor)S +3896(to)S +4007(the)S +4162(computed)S +4589(centroid)S +4949(of)S +5065(the)S +5220(centroid-)S +3720 V +1510(ing)S +1668(box,)S +1873(otherwise)S +2291(the)S +2443(cursor)S +2722(is)S +2819(repositioned)S +3343(to)S +3451(the)S +3603(local)S +3827(maximum)S +4263(value)S +4509(within)S +4795(the)S +4947(box.)S +4008 V +9 B +900(LOAD)S +1187(PANEL)S +4128 V +10 R +1260(The)S +1448(Load)S +1687(Panel)S +1943(allows)S +2238(you)S +2422(load)S +2628(images)S +2945(from)S +3173(disk)S +3374(directly)S +3713(to)S +3825(the)S +3981(frame)S +4247(bu)S +4347 H + (f)show 10 -.5 mul h (f)show +10 R +4408(er,)S +4544(this)S +4723(is)S +4824(analogous)S +5263(to)S +5375(load-)S +4248 V +1260(ing)S +1439(an)S +1584(image)S +1879(on)S +2030(the)S +2203(command)S +2648(line)S +2848(except)S +3158(that)S +3358(browsing)S +3780(is)S +3897(possible.)S +4300(At)S +4450(present)S +4788(recognized)S +5275(formats)S +4368 V +1260(include)S +1587(IRAF)S +1848(OIF)S +2042(format)S +2341(\(i.e.)S +10 I +2529(.imh)S +10 R +2737(extension\),)S +3211(simple)S +3511(FITS)S +3750(\256les,)S +3975(GIF,)S +4195(and)S +4373(Sun)S +4563(raster\256les.)S +5040(The)S +5229(task)S +5424(will)S +4488 V +1260(automatically)S +1850(sense)S +2112(the)S +2280(format)S +2592(of)S +2721(the)S +2888(image)S +3177(and)S +3366(load)S +3583(it)S +3684(appropriately.)S +4286(Images)S +4619(with)S +4842(private)S +5164(colormaps)S +4608 V +1260(\(such)S +1515(as)S +1637(GIF\))S +1870(will)S +2065(be)S +2198(loaded)S +2503(using)S +2759(the)S +2920(private)S +3236(colormap)S +3652(\(meaning)S +4068(that)S +4257(changing)S +4663(the)S +4825(brightness/contrast)S +4728 V +1260(enhancements)S +1856(will)S +2043(render)S +2328(an)S +2453(apparently)S +2905(random-colored)S +3573(image\),)S +3906(all)S +4037(others)S +4312(will)S +4499(be)S +4624(loaded)S +4921(with)S +5130(a)S +5204(grayscale)S +4848 V +1260(colormap.)S +5088 V +1260(When)S +1531(loading)S +1864(new)S +2063(images)S +2379(the)S +2534(frame)S +2799(bu)S +2899 H + (f)show 10 -.5 mul h (f)show +10 R +2960(er)S +3070(con\256guration)S +3636(table)S +3863(will)S +4053(be)S +4181(searched)S +4563(for)S +4713(a)S +4791(frame)S +5057(bu)S +5157 H + (f)show 10 -.5 mul h (f)show +10 R +5218(er)S +5329(that)S +5513(is)S +5208 V +1260(the)S +1417(same)S +1657(size)S +1847(or)S +1965(larger)S +2231(than)S +2437(the)S +2593(new)S +2793(image)S +3071(size,)S +3285(if)S +3380(no)S +3514(frame)S +3780(bu)S +3880 H + (f)show 10 -.5 mul h (f)show +10 R +3941(er)S +4052(can)S +4224(be)S +4352(found)S +4619(a)S +4697(custom)S +5020(bu)S +5120 H + (f)show 10 -.5 mul h (f)show +10 R +5181(er)S +5292(exactly)S +5328 V +1260(the)S +1420(size)S +1613(of)S +1734(the)S +1894(image)S +2176(will)S +2370(be)S +2502(created.)S +2852(This)S +3068(means)S +3361(that)S +3549(the)S +3709(image)S +3991(may)S +4201(not)S +4367(\256ll)S +4517(the)S +4677(display)S +5004(window)S +5364(when)S +5448 V +1260(loaded,)S +1594(or)S +1720(you)S +1913(may)S +2128(see)S +2298(a)S +2385(subsection)S +2850(of)S +2976(the)S +3141(image)S +3428(in)S +3549(the)S +3714(main)S +3957(display)S +4288(window.)S +4707(Setting)S +5033(the)S +10 I +5197(autoscale)S +5568 V +10 R +1260(option)S +1559(on)S +1702(the)S +1867(main)S +2110(Display)S +2464(panel)S +2723(will)S +2923(scale)S +3166(the)S +3332(entire)S +3603(image)S +3891(to)S +4013(\256t)S +4141(the)S +4307(main)S +4551(display)S +4884(window,)S +5275(the)S +5441(full)S +5688 V +1260(frame)S +1522(bu)S +1622 H + (f)show 10 -.5 mul h (f)show +10 R +1683(er)S +1790(will)S +1976(always)S +2283(be)S +2407(visible)S +2704(in)S +2812(the)S +2964(Panner)S +3271(marker)S +3583(window.)S +5928 V +1260(Images)S +1578(with)S +1786(more)S +2021(colors)S +2295(than)S +2497(can)S +2665(be)S +2789(displayed)S +3202(will)S +3389(automatically)S +3964(be)S +4089(quantized)S +4508(to)S +4617(the)S +4770(number)S +5106(of)S +5220(available)S +6048 V +1260(colors)S +1540(before)S +1830(display.)S +2210(If)S +2312(the)S +10 I +2470(Auto)S +2695(Grayscale)S +10 R +3141(button)S +3433(is)S +3536(enabled)S +3882(any)S +4062(image)S +4342(colormap)S +4754(will)S +4945(be)S +5074(converted)S +5502(to)S +6168 V +1260(grayscale)S +1666(and)S +1840(loaded)S +2136(as)S +2249(the)S +2401(standard)S +2769(grayscale)S +3175(colormap.)S +6408 V +1260(Formats)S +1626(which)S +1909(permit)S +2209(pixels)S +2487(larger)S +2758(than)S +2969(8-bits/pixel)S +3464(will)S +3659(be)S +3792(sampled)S +4164(on)S +4303(a)S +4386(grid)S +4586(to)S +4703(determine)S +5141(an)S +5274(optimal)S +6528 V +1260(range)S +1519(in)S +1635(the)S +1795(data)S +1998(to)S +2113(be)S +2244(used)S +2464(to)S +2579(compute)S +2960(a)S +3041(linear)S +3305(transformation)S +3930(to)S +4045(the)S +4204(number)S +4546(of)S +4666(display)S +4992(colors.)S +5298(This)S +5513(is)S +6648 V +1260(the)S +1412(same)S +1647(z-scale)S +1954(sampling)S +2352(and)S +2527(transformation)S +3146(used)S +3360(by)S +3491(the)S +3644(IRAF)S +10 I +3903(DISPLAY)S +10 R +4323(task)S +4515(when)S +4762(computing)S +5221(the)S +10 I +5374(z1/z2)S +6768 V +10 R +1260(values)S +1556(and)S +1741(provides)S +2126(a)S +2211(much)S +2474(better)S +2741(initial)S +3015(display)S +3344(than)S +3556(simple)S +3863(truncation)S +4308(to)S +4426(8-bits.)S +4749(This)S +4967(scaling)S +5290(will)S +5486(be)S +6888 V +1260(done)S +1499(automatically)S +2088(using)S +2350(a)S +2439(grid)S +2646(of)S +10 I +2775(Nsample)S +10 R +3171(points)S +3462(if)S +3569(the)S +10 I +3737(Zscale)S +10 R +4044(option)S +4346(is)S +4459(enabled.)S +4870(Otherwise,)S +5351(if)S +5458(the)S +7008 V +10 I +1260(Zrange)S +10 R +1592(option)S +1891(is)S +2001(set)S +2155(the)S +2320(full)S +2502(data)S +2711(range)S +2974(will)S +3172(be)S +3308(used)S +3533(to)S +3653(scale)S +3894(the)S +4058(image.)S +4399(Lastly,)S +4716(is)S +4825(neither)S +10 I +5144(Zscale)S +10 R +5447(nor)S +7128 V +10 I +1260(Zrange)S +10 R +1579(are)S +1730(enabled,)S +2095(the)S +2247(z1/z2)S +2493(values)S +2778(may)S +2980(be)S +3104(set)S +3245(explicitly)S +3653(using)S +3900(the)S +4052(options)S +4377(box.)S +7680 V +900(X11IRAF Project)S +2703(Last change: 12 Aug 2001)S +5480(16)S +7920 V +EP +%%Page: 17 18 +BP +/slant 0 def +/height 1.000000 def +10 R +10 R +480 V +900(XIMTOOL)S +1376(\()S +1425(1)S +1491(\))S +2787(USER COMMANDS )S +4956(XIMTOOL)S +5432(\()S +5481(1)S +5547(\))S +960 V +10 B +1260(Directory)S +1699(Browsing)S +1080 V +10 R +1510(The)S +1702(load)S +1911(panel)S +2165(contains)S +2536(a)S +2618(list)S +2779(of)S +2900(\256les)S +3105(in)S +3221(the)S +3381(current)S +3701(directory)S +4099(that)S +4287(may)S +4497(be)S +4629(selected)S +4988(for)S +5142(loading)S +5480(by)S +1200 V +1510(selecting)S +1901(with)S +2115(left)S +2284(mouse)S +2581(button.)S +2898(If)S +3000(the)S +3158(\256le)S +3322(is)S +3425(a)S +3504(directory)S +3899(the)S +4056(contents)S +4424(of)S +4542(the)S +4699(new)S +4900(directory)S +5295(will)S +5486(be)S +1320 V +1510(loaded,)S +1836(if)S +1932(it's)S +2095(a)S +2174(plain)S +2409(\256le)S +2572(an)S +2701(attempt)S +3036(will)S +3227(be)S +3356(made)S +3607(to)S +3720(load)S +3927(it)S +4018(as)S +4137(an)S +4267(image)S +4547(otherwise)S +4971(an)S +5101(error)S +5330(popup)S +1440 V +1510(will)S +1706(appear.)S +2065(Directories)S +2547(in)S +2664(the)S +2825(list)S +2987(are)S +3147(identi\256ed)S +3564(with)S +3781(a)S +3864(trailing)S +4192('/')S +4325(character,)S +4753(you)S +4942(will)S +5137(always)S +5453(see)S +1560 V +1510(any)S +1684(subdirectories)S +2274(listed)S +2521(even)S +2739(if)S +2830(a)S +2904(\256lter)S +3123(is)S +3220(speci\256ed.)S +1800 V +1510(The)S +10 I +1698(Root)S +10 R +1920(button)S +2209(will)S +2398(reset)S +2619(the)S +2774(current)S +3089(directory)S +3482(to)S +3593(the)S +3748(system)S +4059(root)S +4254(directory.)S +4673(The)S +10 I +4862(Home)S +10 R +5134(button)S +5424(will)S +1920 V +1510(reset)S +1730(the)S +1884(current)S +2198(directory)S +2590(to)S +2700(the)S +2854(user's)S +3124(login)S +3362(directory,)S +3779(the)S +10 I +3932(Up)S +10 R +4085(button)S +4372(moves)S +4664(up)S +4795(one)S +4970(directory)S +5361(level,)S +2040 V +1510(and)S +10 I +1688(Rescan)S +10 R +2010(reloads)S +2332(the)S +2488(\256le)S +2650(list)S +2807(by)S +2942(rescanning)S +3409(the)S +3566(directory.)S +3986(The)S +4176(current)S +4493(working)S +4861(directory)S +5256(is)S +5358(given)S +2160 V +1510(below)S +1784(the)S +1936(\256le)S +2094(selection)S +2479(window.)S +2400 V +1510(Selecting)S +1912(the)S +10 I +2064(List)S +2245(Image)S +2524(Headers)S +10 R +2892(option)S +3178(will)S +3364(change)S +3676(the)S +3828(display)S +4147(text)S +4328(to)S +4437(list)S +4591(all)S +4722(images)S +5036(in)S +5145(the)S +5298(current)S +2520 V +1510(directory)S +1913(which)S +2200(match)S +2486(the)S +2650(\256lename)S +3036(\256lter.)S +3322(Directory)S +3746(browsing)S +4160(is)S +4269(disabled)S +4644(while)S +4908(this)S +5095(option)S +5393(is)S +5502(in)S +2640 V +1510(e)S +1554 H + (f)show 10 -.5 mul h (f)show +10 R +1615(ect.)S +2808 V +10 B +1260(File)S +1451(Patterns)S +2928 V +10 R +1510(By)S +1661(default)S +1972(all)S +2106(\256les)S +2307(and)S +2486(directories)S +2942(will)S +3133(be)S +3262(listed.)S +3539(You)S +3746(may)S +3953(specify)S +4276(a)S +4355(\256lter)S +4579(to)S +4692(select)S +4954(only)S +5167(those)S +5413(\256les)S +3048 V +1510(with)S +1721(a)S +1798(given)S +2053(extension)S +2469(such)S +2685(as)S +2801(")S +10 Y +2842(*)S +10 R +2892(.\256ts")S +3113(using)S +3362(the)S +10 I +3516(Filter)S +10 R +3776(text)S +3958(box.)S +4195(Directories)S +4670(will)S +4858(always)S +5167(be)S +5293(seen)S +5502(in)S +3168 V +1510(the)S +1662(list)S +1815(and)S +1989(are)S +2140(identi\256ed)S +2548(with)S +2756(a)S +2830(trailing)S +3149('/')S +3273(character.)S +3692(Any)S +3894(valid)S +4124(unix)S +4332(pattern)S +4639(matching)S +5041(string)S +5299(will)S +5486(be)S +3288 V +1510(recognized,)S +2006(multiple)S +2374(templates)S +2791(may)S +2997(be)S +3125(speci\256ed)S +3514(in)S +3626(a)S +3704(comma-delimited)S +4443(list)S +4600(such)S +4817(as)S +4933(")S +10 Y +4974(*)S +10 R +5024(.imh,)S +10 Y +5230(*)S +10 R +5280(.\256ts")S +5502(to)S +3408 V +1510(list)S +1663(both)S +1871(OIF)S +2062(and)S +2236(FITS)S +2472(images.)S +3576 V +10 B +1260(Direct)S +1555(File)S +1746(Load)S +3696 V +10 R +1510(If)S +1608(you)S +1791(know)S +2046(exactly)S +2367(which)S +2644(\256le)S +2805(you)S +2988(wish)S +3210(to)S +3321(load,)S +3551(you)S +3734(may)S +3939(enter)S +4171(its)S +4299(name)S +4548(in)S +4659(the)S +10 I +4814(Load)S +5053(File)S +10 R +5247(text)S +5430(box)S +3816 V +1510(and)S +1688(either)S +1949(hit)S +2089()S +2312(or)S +2429(the)S +2585(Load)S +2824(button)S +3114(to)S +3226(load)S +3432(it.)S +3577(An)S +3733(absolute)S +4099(or)S +4215(relative)S +4547(path)S +4752(name)S +5001(may)S +5206(be)S +5333(given,)S +3936 V +1510(if)S +1601(a)S +1675(simple)S +1972(\256lename)S +2346(is)S +2443(speci\256ed)S +2828(it)S +2914(will)S +3100(be)S +3224(searched)S +3602(for)S +3748(in)S +3856(the)S +4008(current)S +4320(working)S +4683(directory.)S +4104 V +10 B +1260(Frame)S +1572(Selections)S +4224 V +10 R +1510(By)S +1666(default)S +1982(images)S +2304(will)S +2499(be)S +2632(loaded)S +2937(into)S +3132(the)S +3293(current)S +3614(frame,)S +3910(you)S +4100(may)S +4312(choose)S +4629(a)S +4713(di)S +4791 H + (f)show 10 -.5 mul h (f)show +10 R +4852(erent)S +5091(frame)S +5363(using)S +4344 V +1510(the)S +1662(Frame)S +1947(menu)S +2199(button)S +2485(to)S +2593(select)S +2850(from)S +3074(the)S +3226(available)S +3616(frames.)S +4632 V +9 B +900(SAVE)S +1167(PANEL)S +4752 V +10 R +1260(The)S +1445(Save)S +1669(Panel)S +1921(lets)S +2090(you)S +2270(save)S +2477(the)S +2629(current)S +2941(contents)S +3304(of)S +3418(the)S +3571(main)S +3802(display)S +4122(window)S +4475(to)S +4584(a)S +4659(disk)S +4857(\256le)S +5016(\(including)S +5458(the)S +4872 V +1260(Panner/Coords)S +1886(markers,)S +2264(or)S +2379(overlay)S +2710(graphics)S +3079(displayed)S +3493(by)S +3624(the)S +3777(client)S +4030(program\).)S +4457(Presently,)S +4885(only)S +5094(the)S +5247(contents)S +4992 V +1260(of)S +1377(the)S +1533(main)S +1767(display)S +2090(window)S +2446(may)S +2652(be)S +2780(saved,)S +3066(there)S +3299(is)S +3400(no)S +3534(facility)S +3851(for)S +4001(saving)S +4297(the)S +4454(undisplayed)S +4972(contents)S +5340(of)S +5458(the)S +5112 V +1260(entire)S +1527(frame)S +1799(bu)S +1899 H + (f)show 10 -.5 mul h (f)show +10 R +1960(er)S +2077(other)S +2322(than)S +2534(to)S +2651(enable)S +2950(the)S +3111(autoscale)S +3521(feature)S +3836(or)S +3958(zoom)S +4219(out)S +4386(so)S +4514(the)S +4675(whole)S +4958(bu)S +5058 H + (f)show 10 -.5 mul h (f)show +10 R +5119(er)S +5235(is)S +5341(in)S +5458(the)S +5232 V +1260(display)S +1582(window.)S +1992(A)S +2097(limited)S +2414(number)S +2752(of)S +2868(formats)S +3206(are)S +3360(currently)S +3753(available,)S +4171(others)S +4448(will)S +4637(be)S +4764(added)S +5036(in)S +5148(future)S +5420(ver-)S +5352 V +1260(sions.)S +5520 V +10 B +1260(File)S +1451(Name)S +10 R +2010(The)S +2205(File)S +2401(Name)S +2680(text)S +2871(box)S +3062(allows)S +3364(you)S +3555(to)S +3674(enter)S +3914(the)S +4077(\256le)S +4246(name)S +4503(of)S +4627(the)S +4790(saved)S +5058(\256le.)S +5252(A)S +5365("%d")S +5640 V +2010(anywhere)S +2429(in)S +2539(the)S +2693(name)S +2941(will)S +3129(be)S +3255(replaced)S +3624(by)S +3756(a)S +3831(sequence)S +4227(number)S +4563(allowing)S +4944(multiple)S +5309(frames)S +5760 V +2010(to)S +2118(be)S +2242(saved)S +2499(with)S +2707(unique)S +3009(names.)S +5928 V +10 B +1260(Format)S +10 R +2010(The)S +2203(Format)S +2530(box)S +2718(allows)S +3017(you)S +3205(to)S +3321(choose)S +3636(the)S +3796(format)S +4100(of)S +4221(the)S +4381(image)S +4663(to)S +4779(be)S +4911(created)S +5237(however)S +6048 V +2010(not)S +2187(all)S +2336(formats)S +2690(are)S +2860(currently)S +3269(implemented.)S +3895(The)S +4099(EPS)S +4321(format)S +4636(is)S +4752(similar)S +5078(to)S +5204(the)S +10 I +5374(Print)S +6168 V +10 R +2010(option)S +2296(however)S +2669(there)S +2898(is)S +2995(no)S +3125(annotation.)S +6336 V +10 B +1260(Color)S +10 R +2010(The)S +2201(Color)S +2465(box)S +2651(lets)S +2827(you)S +3014(choose)S +3328(the)S +3487(color)S +3729(type)S +3938(of)S +4058(the)S +4217(image)S +4498(to)S +4613(be)S +4744(created.)S +5093(The)S +5285(options)S +6456 V +2010(will)S +2198(change)S +2512(depending)S +2960(on)S +3092(the)S +3246(format,)S +3569(e.g.)S +3745(FITS)S +3983(doesn't)S +4309(allow)S +4562(color)S +4798(so)S +4918(no)S +5049(color)S +5285(options)S +6576 V +2010(will)S +2203(be)S +2334(enabled.)S +2736(Formats)S +3101(which)S +3382(allow)S +3641(24-bit)S +3917(images)S +4237(will)S +4430(be)S +4562(written)S +4883(using)S +5138(the)S +5298(current)S +6696 V +2010(colormap)S +2427(after)S +2649(converting)S +3116(to)S +3234(a)S +3317(24-bit)S +3595(image,)S +3903(pseudocolor)S +4430(images)S +4752(will)S +4947(be)S +5080(written)S +5402(with)S +6816 V +2010(the)S +2162(current)S +2474(colormap.)S +7680 V +900(X11IRAF Project)S +2703(Last change: 12 Aug 2001)S +5480(17)S +7920 V +EP +%%Page: 18 19 +BP +/slant 0 def +/height 1.000000 def +10 R +10 R +480 V +900(XIMTOOL)S +1376(\()S +1425(1)S +1491(\))S +2787(USER COMMANDS )S +4956(XIMTOOL)S +5432(\()S +5481(1)S +5547(\))S +960 V +9 B +900(PRINT)S +1207(PANEL)S +1080 V +10 R +1260(The)S +1449(Print)S +1678(Panel)S +1934(allows)S +2229(you)S +2413(dump)S +2675(the)S +2831(contents)S +3198(of)S +3315(the)S +3471(main)S +3706(display)S +4030(window)S +4387(as)S +4505(Encapsulated)S +5072(Postscript)S +5502(to)S +1200 V +1260(either)S +1526(a)S +1608(named)S +1912(printer)S +2216(device)S +2514(or)S +2635(to)S +2751(a)S +2833(disk)S +3038(\256le.)S +3259(The)S +10 I +3452(Print)S +3696(To)S +10 R +3840(selects)S +4144(the)S +4304(type)S +4514(of)S +4635(output,)S +4954(the)S +10 I +5114(Print)S +5358(Com-)S +1320 V +1260(mand)S +10 R +1513(box)S +1694(will)S +1881(adjust)S +2151(accordingly,)S +2678(either)S +2936(as)S +3050(a)S +3125(Unix)S +3356(printer)S +3653(command)S +4078(or)S +4192(as)S +4306(a)S +4381(\256le)S +4540(name.)S +4842(A)S +4946("%d")S +5193(anywhere)S +1440 V +1260(in)S +1372(the)S +1528(name)S +1778(for)S +1928(disk)S +2129(output)S +2419(will)S +2609(be)S +2737(replaced)S +3108(by)S +3242(a)S +3320(sequence)S +3719(number)S +4058(allowing)S +4442(multiple)S +4810(frames)S +5115(to)S +5226(be)S +5353(saved)S +1560 V +1260(with)S +1469(unique)S +1772(names.)S +2083(Selecting)S +2486(printers)S +2822(from)S +3047(the)S +3200(installed)S +3570(list)S +3724(will)S +3911(automatically)S +4486(change)S +4799(the)S +4952(command)S +5377(to)S +5486(be)S +1680 V +1260(used)S +1474(to)S +1583(generate)S +1951(the)S +2104(output.)S +2416(This)S +2625(command)S +3049(does)S +3262(not)S +3420(necessarily)S +3893(need)S +4111(to)S +4219(be)S +4343(a)S +4417(printer)S +4713(command,)S +5162(the)S +5314(printer)S +1800 V +1260(con\256guration)S +1823(\256le)S +1981(lets)S +2150(you)S +2330(de\256ne)S +2604(any)S +2778(command)S +3202(string)S +3460(to)S +3568(process)S +3897(the)S +4049(image.)S +2088 V +9 B +1080(COLOR)S +1437(OPTIONS)S +2208 V +10 R +1260(The)S +1469(Color)S +1751(box)S +1955(lets)S +2148(you)S +2352(choose)S +2683(the)S +2859(color)S +3118(type)S +3344(of)S +3481(the)S +3657(image)S +3955(to)S +4087(be)S +4235(created.)S +4631(PseudoColor)S +5203(or)S +5341(24-bit)S +2328 V +1260(postscript)S +1679(will)S +1865(be)S +1989(created)S +2306(using)S +2553(the)S +2705(current)S +3017(colormap)S +3424(and)S +3598(enhancements.)S +2616 V +9 B +1080(POSTSCRIPT)S +1672(OPTIONS)S +2736 V +10 B +1260(Orientation)S +10 R +2010(Set)S +2168(the)S +2320(page)S +2538(orientation.)S +2964 V +10 B +1260(Paper)S +1545(Size)S +10 R +2010(Select)S +2284(the)S +2436(paper)S +2687(size)S +2872(to)S +2980(be)S +3104(used.)S +3192 V +10 B +1260(Image)S +1556(Scale)S +10 R +2010(Set)S +2168(the)S +2320(scale)S +2549(factor)S +2812(used)S +3026(to)S +3135(compute)S +3510(the)S +3663(\256nal)S +3872(image)S +4147(size.)S +4388(No)S +4541(checking)S +4932(is)S +5030(done)S +5255(to)S +5364(make)S +3312 V +2010(sure)S +2206(the)S +2358(image)S +2632(will)S +2818(\256t)S +2932(correctly)S +3316(on)S +3446(the)S +3598(page.)S +3600 V +9 B +1080(PROCESSING)S +1692(OPTIONS)S +3720 V +10 B +1260(Auto)S +1501(Scale)S +3840 V +10 R +1510(Toggles)S +1865(whether)S +2219(or)S +2335(not)S +2496(the)S +2651(image)S +2928(is)S +3028(automatically)S +3605(scaled)S +3887(to)S +3998(\256t)S +4116(the)S +4272(page.)S +4549(If)S +4649(not)S +4811(enabled,)S +5180(the)S +5336(image)S +3960 V +1510(scale)S +1744(will)S +1935(be)S +2064(used)S +2282(to)S +2395(determine)S +2829(the)S +2986(output)S +3277(image)S +3556(size,)S +3771(otherwise)S +4194(the)S +4351(image)S +4629(will)S +4819(be)S +4947(scaled)S +5230(down)S +5486(\(if)S +4080 V +1510(necessary\))S +1960(to)S +2068(\256t)S +2182(on)S +2312(the)S +2464(page.)S +4248 V +10 B +1260(Auto)S +1501(Rotate)S +4368 V +10 R +1510(Determines)S +2005(whether)S +2361(or)S +2479(not)S +2642(the)S +2800(image)S +3080(will)S +3272(be)S +3402(rotated)S +3715(to)S +3829(\256t)S +3949(on)S +4085(the)S +4243(page.)S +4492(When)S +4766(set,)S +4938(an)S +5068(image)S +5348(larger)S +4488 V +1510(than)S +1717(the)S +1874(current)S +2191(orientation)S +2659(will)S +2850(be)S +2979(rotated)S +3291(and)S +3470(possibly)S +3839(scaled)S +4123(to)S +4236(\256t)S +4355(the)S +4511(page,)S +4758(otherwise)S +5180(the)S +5336(image)S +4608 V +1510(may)S +1712(be)S +1836(scaled)S +2115(so)S +2234(that)S +2414(it)S +2500(\256ts)S +2653(in)S +2761(the)S +2913(current)S +3225(orientation.)S +4776 V +10 B +1260(Max)S +1484(Aspect)S +4896 V +10 R +1510(Automatically)S +2112(increases)S +2507(the)S +2659(scale)S +2888(so)S +3007(the)S +3159(image)S +3433(\256lls)S +3614(the)S +3766(page)S +3984(in)S +4092(the)S +4244(current)S +4556(orientation.)S +5064 V +10 B +1260(Annotate)S +5184 V +10 R +1510(The)S +1696(annotate)S +2065(option)S +2352(toggles)S +2672(whether)S +3024(or)S +3138(not)S +3297(the)S +3450(\256nal)S +3660(\256le)S +3820(includes)S +4185(annotation)S +4639(such)S +4854(as)S +4969(the)S +5123(image)S +5399(title,)S +5304 V +1510(a)S +1584(colorbar,)S +1971(and)S +2145(axis)S +2336(labels.)S +2654(There)S +2916(is)S +3013(currently)S +3403(no)S +3533(option)S +3819(for)S +3965(partial)S +4250(annotation.)S +5592 V +9 B +1080(ANNOTATION)S +1727(OPTIONS)S +5712 V +10 B +1260(Annotate)S +5832 V +10 R +1510(Selects)S +1831(whether)S +2190(Postscript)S +2623(image)S +2905(is)S +3010(to)S +3126(be)S +3258(annotated.)S +10 B +3739(Title)S +10 R +3977(Annotate)S +4381(with)S +4597(a)S +4679(title)S +4873(on)S +5011(the)S +5171(top)S +5337(of)S +5458(the)S +5952 V +1510(image.)S +10 B +1850(Borders)S +10 R +2235(Annotate)S +2642(with)S +2860(borders)S +3199(surrounding)S +3722(the)S +3884(image)S +4168(giving)S +4464(image)S +4748(coordinates.)S +10 B +5303(Color-)S +6072 V +1510(bar)S +10 R +1692(Annotate)S +2090(with)S +2300(colorbar)S +2664(at)S +2768(the)S +2922(bottom)S +3238(of)S +3353(the)S +3507(image)S +10 B +3783(Title)S +4015(String)S +10 R +4315(Title)S +4537(string)S +4798(to)S +4909(use)S +5075(when)S +10 I +5324(title)S +10 R +5513(is)S +6192 V +1510(selected.)S +1920(The)S +2108(special)S +2418(value)S +10 I +2667(imtitle)S +10 R +2956(will)S +3145(force)S +3382(the)S +3537(title)S +3726(to)S +3837(be)S +3964(the)S +4119(currently)S +4512(displayed)S +4928(image)S +5205(title,)S +5419(oth-)S +6312 V +1510(erwise)S +1800(it)S +1886(will)S +2072(be)S +2196(this)S +2371(user-selected)S +2921(\256eld.)S +6600 V +9 B +1080(PRINTER)S +1512(SELECTION)S +6720 V +10 R +1260(The)S +1487(printer)S +1825(selection)S +2252(list)S +2447(lets)S +2658(choose)S +3007(the)S +3201(printer)S +3540(to)S +3691(be)S +3858(used.)S +4139(The)S +4367(printer)S +4706(con\256guration)S +5312(\256le)S +5513(is)S +6840 V +1260(/usr/local/lib/ximprint.cfg)S +2342(by)S +2493(default)S +2821(or)S +2954(may)S +3176(be)S +3320(reset)S +3558(using)S +3825(the)S +10 I +3997(-printCon\256g)S +10 R +4542(command)S +4986(line)S +5186(switch)S +5497(or)S +6960 V +10 I +1260(printCon\256g)S +10 R +1752(resource.)S +2144(The)S +2329(format)S +2625(of)S +2738(the)S +2890(\256le)S +3048(is)S +3145(simply)S +7200 V +10 I +1950(name\\tcommand)S +7680 V +10 R +900(X11IRAF Project)S +2703(Last change: 12 Aug 2001)S +5480(18)S +7920 V +EP +%%Page: 19 20 +BP +/slant 0 def +/height 1.000000 def +10 R +10 R +480 V +900(XIMTOOL)S +1376(\()S +1425(1)S +1491(\))S +2787(USER COMMANDS )S +4956(XIMTOOL)S +5432(\()S +5481(1)S +5547(\))S +960 V +1260(The)S +10 I +1450(name)S +10 R +1701(value)S +1952(is)S +2054(what)S +2284(appears)S +2624(in)S +2738(the)S +2896(selection)S +3287(list)S +3446(and)S +3626(may)S +3834(be)S +3964(more)S +4205(than)S +4413(a)S +4493(single)S +4768(word,)S +5034(the)S +10 I +5192(command)S +1080 V +10 R +1260(can)S +1432(be)S +1560(any)S +1738(command)S +2166(that)S +2350(accepts)S +2677(EPS)S +2884(input)S +3124(from)S +3352(a)S +3429(pipe,)S +3659(the)S +3814(two)S +3997(\256elds)S +4247(must)S +4475(be)S +4602(separated)S +5011(by)S +5144(a)S +5221(tab)S +5376(char-)S +1200 V +1260(acter.)S +1538(Normally)S +1951(the)S +2103(command)S +2527(will)S +2713(be)S +2837(a)S +2912(simple)S +10 I +3210(lpr)S +3358(-Pfoo)S +10 R +3611(or)S +3725(some)S +3967(such,)S +4206(but)S +4365(can)S +4534(also)S +4726(include)S +5051(converters)S +5497(or)S +1320 V +1260(previewers.)S +1752(At)S +1882(most)S +2107(128)S +2287(printer)S +2583(commands)S +3046(may)S +3248(be)S +3372(used.)S +1608 V +9 B +900(INFO)S +1152(PANEL)S +1728 V +10 R +1260(The)S +1449(Info)S +1649(panel)S +1899(was)S +2088(revised)S +2410(to)S +2522(provide)S +2861(a)S +2939(greater)S +3249(variety)S +3560(of)S +3677(status)S +3939(information.)S +4500(The)S +4689(type)S +4895(of)S +5012(output)S +5302(is)S +5403(con-)S +1848 V +1260(trolled)S +1560(by)S +1699(the)S +1860(toggle)S +2149(buttons)S +2483(on)S +2622(the)S +2783(bottom)S +3106(of)S +3228(the)S +3389(frame,)S +3685(however)S +4066(all)S +4204(output)S +4498(is)S +4603(kept)S +4813(current)S +5133(as)S +5254(the)S +5414(pro-)S +1968 V +1260(gram)S +1495(runs.)S +1752(Current)S +2087(info)S +2278(options)S +2603(include:)S +2136 V +10 B +1620(Frame)S +10 R +2370(Info)S +2566(about)S +2818(the)S +2970(current)S +3282(display)S +3601(frame.)S +2304 V +10 B +1620(Server)S +10 R +2370(Info)S +2584(about)S +2854(various)S +3197(server)S +3489(options,)S +3858(e.g.)S +4051(colormaps,)S +4541(memory)S +4923(model,)S +5247(antialias)S +2424 V +2370(type,)S +2597(etc.)S +2592 V +10 B +1620(Clients)S +10 R +2370(Show)S +2650(currently)S +3062(connected)S +3518(clients.)S +3886(Lists)S +4133(available)S +4545(connection)S +5035(channels)S +5436(and)S +2712 V +2370(active)S +2638(ISM)S +2846(clients.)S +2880 V +10 B +1620(WCS)S +10 R +2370(List)S +2556(all)S +2686(WCS)S +2933(and)S +3107(mappings)S +3526(for)S +3672(the)S +3824(current)S +4136(frame.)S +3048 V +10 B +1620(ISM)S +10 R +2370(Log)S +2561(of)S +2674(various)S +2998(ISM)S +3206(status)S +3464(messages.)S +3216 V +10 B +1620(Imtoolrc)S +10 R +2370(Show)S +2628(current)S +2940(frame)S +3202(bu)S +3302 H + (f)show 10 -.5 mul h (f)show +10 R +3363(er)S +3470(con\256guration)S +4033(table.)S +3504 V +9 B +900(TILE)S +1142(PANEL)S +1474(\(NEW\))S +3624 V +10 R +1260(With)S +1493(the)S +1648(additional)S +2081(frames,)S +2410(the)S +2565(default)S +2875(tiling)S +3120(scheme)S +3452(proved)S +3762(inadequate.)S +4282(A)S +4387(new)S +4586(control)S +4903(panel)S +5153(Tile)S +5348(frame)S +3744 V +1260(now)S +1471(allows)S +1771(you)S +1960(to)S +2077(select)S +2343(from)S +2576(a)S +2659(number)S +3003(of)S +3125(tile)S +3292(con\256gurations,)S +3928(the)S +4089(list)S +4251(of)S +4373(frames)S +4682(to)S +4798(be)S +4930(tiled,)S +5171(a)S +10 I +5253(\256ll)S +5397(style)S +3864 V +10 R +1260(\(left-to-right)S +1794(or)S +1912(top-to-bottom\),)S +2561(as)S +2679(well)S +2886(as)S +3004(optional)S +3367(labels)S +3635(for)S +3786(each)S +4003(of)S +4121(the)S +4278(tiles)S +4480(\(frame)S +4780(number,)S +5145(image)S +5424(title)S +3984 V +1260(or)S +1373(image)S +1647(name\).)S +4224 V +1260(Tile)S +1452(con\256guration)S +2016(will)S +2204(make)S +2452(use)S +2617(of)S +2732(all)S +2864(frames)S +3167(currently)S +3559(selected)S +3912(in)S +4022(the)S +10 I +4176(Tile)S +4364(Frame)S +10 R +4662(group)S +4927(in)S +5037(the)S +5191(following)S +4344 V +1260(manner:)S +4512 V +10 B +1620(Disabled)S +10 R +2370(Do)S +2522(not)S +2680(tile)S +2838(the)S +2990(display.)S +4680 V +10 B +1620(Manual)S +10 R +2370(Tile)S +2561(according)S +2984(to)S +10 I +3092(Manual)S +3433(Con\256guration)S +10 R +4025(settings.)S +4848 V +10 B +1620(Best)S +10 R +2370(Optimize)S +2772(layout)S +3052(for)S +3198(frame)S +3460(bu)S +3560 H + (f)show 10 -.5 mul h (f)show +10 R +3621(er)S +3728(aspect.)S +5016 V +10 B +1620(Square)S +10 R +2370(Always)S +2705(force)S +2939(a)S +3013(square)S +3303(layout)S +3583(\(2x2,)S +3821(3x3,)S +4026(etc\).)S +5184 V +10 B +1620(Horizontal)S +10 R +2370(Preferentially)S +2943(tile)S +3101(horizontally)S +3614(\(6)S +3727(frames)S +4028(==>)S +4226(3x2\).)S +5352 V +10 B +1620(Vertical)S +10 R +2370(Preferentially)S +2943(tile)S +3101(vertically)S +3508(\(6)S +3621(frames)S +3922(==>)S +4120(2x3\).)S +5520 V +10 B +1620(One)S +1828(Row)S +10 R +2370(Tile)S +2561(all)S +2691(in)S +2799(one)S +2973(row)S +3158(\(Nx1\).)S +5688 V +10 B +1620(One)S +1828(Column)S +10 R +2370(Tile)S +2561(all)S +2691(in)S +2799(one)S +2973(column)S +3303(\(1xN\).)S +5976 V +9 B +900(COORDS)S +1312(PANEL)S +1644(\(NEW\))S +6096 V +10 R +1260(The)S +1452(Coords)S +1778(Panel)S +2037(is)S +2141(meant)S +2422(to)S +2537(provide)S +2879(a)S +2960(full-featured)S +3495(readout)S +3831(as)S +3951(well)S +4160(as)S +4280(serve)S +4527(as)S +4647(a)S +4729(control)S +5050(panel)S +5304(for)S +5458(the)S +6216 V +1260(various)S +1586(options.)S +1968(The)S +2155(display)S +2475(window)S +2828(contains)S +3192(the)S +3345(image)S +3620(name/title)S +4051(and)S +4226(frame)S +4489(bu)S +4589 H + (f)show 10 -.5 mul h (f)show +10 R +4650(er)S +4758(info,)S +4975(and)S +5150(a)S +5225(selection)S +6336 V +1260(of)S +1373(coordinate)S +1824(and)S +1998(image)S +2272(pixel)S +2502(readouts.)S +2925(The)S +3110(intent)S +3368(is)S +3466(provide)S +3802(more)S +4038(infor-)S +4296(mation)S +4605(than)S +4808(can)S +4977(\256t)S +5092(comfortably)S +6456 V +1260(on)S +1409(the)S +1580(main)S +1829(image)S +2122(window)S +2493(while)S +2764(still)S +2964(taking)S +3263(up)S +3412(as)S +3544(little)S +3777(screen)S +4080(space)S +4350(as)S +4482(possible.)S +4914(To)S +5073(this)S +5266(end)S +5458(the)S +6576 V +1260("Options")S +1692(button)S +1981(is)S +2081(used)S +2297(to)S +2408(hide)S +2613(most)S +2841(of)S +2957(the)S +3112(feature)S +3421(controls)S +3776(when)S +4025(not)S +4186(in)S +4297(use)S +4464(\(see)S +4658(below\).)S +5024(Other)S +5285(options)S +6696 V +1260(on)S +1390(the)S +1542(main)S +1772(panel)S +2018(include:)S +6984 V +10 B +1620(WCS/Pix)S +10 R +2370(Toggle)S +2683(the)S +2835(real-time)S +3225(WCS/pixel)S +3700(readout)S +4030(capability)S +4455(\(i.e.)S +4641(the)S +4794(ISM)S +5003(used)S +5217(to)S +5326(access)S +7104 V +2370(the)S +2522(disk)S +2719(image\).)S +3081(This)S +3289(must)S +3514(be)S +3638(enabled)S +3978(for)S +4124(certain)S +4425(other)S +4660(options)S +4985(to)S +5093(work.)S +7272 V +10 B +1620(Pix)S +1789(Table)S +10 R +2370(Open)S +2632(a)S +2722(panel)S +2984(showing)S +3369(an)S +3509(image)S +3800(pixel)S +4047(table.)S +4343(The)S +4545(panel)S +4808(shows)S +5105(an)S +5246(array)S +5497(of)S +7752 V +900(X11IRAF Project)S +2703(Last change: 12 Aug 2001)S +5480(19)S +7920 V +EP +%%Page: 20 21 +BP +/slant 0 def +/height 1.000000 def +10 R +10 R +480 V +900(XIMTOOL)S +1376(\()S +1425(1)S +1491(\))S +2787(USER COMMANDS )S +4956(XIMTOOL)S +5432(\()S +5481(1)S +5547(\))S +960 V +2370(pixels)S +2640(surrounding)S +3154(the)S +3307(cursor)S +3587(position,)S +3966(either)S +4224(the)S +4376(actual)S +4644(pixel)S +4874(values)S +5159(if)S +5250(the)S +5402(ISM)S +1080 V +2370(is)S +2476(enabled,)S +2850(or)S +2972(scaled)S +3260(display)S +3588(values)S +3882(otherwise.)S +4365(The)S +4560(size)S +4755(of)S +4878(the)S +5040(table)S +5274(may)S +5486(be)S +1200 V +2370(selected)S +2721(from)S +2945(the)S +3097(menubar.)S +1368 V +10 B +1620(Header)S +10 R +2370(Display)S +2734(the)S +2909(current)S +3244(image)S +3541(header)S +3859(in)S +3990(a)S +4087(new)S +4306(panel.)S +4630(Both)S +4879(the)S +5055(entire)S +5336(image)S +1488 V +2370(header)S +2697(as)S +2842(well)S +3076(as)S +3221(WCS-speci\256c)S +3838(parts)S +4094(of)S +4239(the)S +4423(header)S +4750(are)S +4932(available)S +5353(under)S +1608 V +2370(di)S +2448 H + (f)show 10 -.5 mul h (f)show +10 R +2509(erent)S +2738(tabs.)S +2984(This)S +3192(option)S +3478(is)S +3575(only)S +3783(active)S +4051(when)S +4297(the)S +4449(ISM)S +4657(is)S +4754(enabled.)S +1776 V +10 B +1620(Compass)S +10 R +2370(Draw)S +2621(an)S +2745(orientation)S +3208(compass)S +3582(on)S +3712(the)S +3864(display)S +4183(panner.)S +4539(If)S +4635(the)S +4788(ISM)S +4997(is)S +5095(enabled)S +5436(and)S +1896 V +2370(a)S +2456(WCS)S +2714(is)S +2822(present)S +3151(in)S +3270(the)S +3433(header,)S +3764(the)S +3927(compass)S +4312(will)S +4509(indicate)S +4866(N/E)S +5068(according)S +5502(to)S +2016 V +2370(the)S +2522(WCS,)S +2794(otherwise)S +3212(the)S +3364(X/Y)S +3566(axes)S +3773(of)S +3886(the)S +4038(image)S +4312(are)S +4463(drawn.)S +2184 V +10 B +1620(Options)S +10 R +2370(Pop-up/down)S +2967(the)S +3147(option)S +3461(control)S +3802(portion)S +4149(of)S +4290(the)S +4470(panel.)S +4769(When)S +5065(enabled,)S +5458(the)S +2304 V +2370(Coords)S +2706(Panel)S +2975(will)S +3178(change)S +3507(size)S +3709(to)S +3834(reveal)S +4124(the)S +4293(options)S +4634(which)S +4924(can)S +5108(be)S +5248(changed)S +2424 V +2370(\(explained)S +2821(below\).)S +2712 V +1260(The)S +1457("Readout)S +1873(Values")S +2233(group)S +2508(controls)S +2872(the)S +3036(selection)S +3433(of)S +3558(WCS)S +3817(type,)S +4056(location)S +4420(and)S +4606(format)S +4914(to)S +5035(be)S +5172(displayed.)S +2832 V +1260(The)S +1455("Type")S +1782(menu)S +2044(always)S +2361(provides)S +2745(a)S +2829(selection)S +3224(of)S +3347(the)S +3509(image)S +3792(Logical,)S +4161(Physical)S +4539(or)S +4661(World)S +4955(systems,)S +5336(which)S +2952 V +1260(may)S +1472(be)S +1606(identical)S +1990(depending)S +2446(on)S +2586(the)S +2748(image)S +3032(header.)S +3392(If)S +3498(a)S +3582(World)S +3878(system)S +4197(is)S +4305(supplied)S +4685(in)S +4804(the)S +4967(image)S +5252(addition)S +3072 V +1260(entries)S +1573(for)S +1736(transformations)S +2410(to)S +2535(other)S +2787(sky)S +2973(systems,)S +3362(\(e.g.)S +3616(FK5)S +3841(to)S +3966(ICRS)S +4236(or)S +4366(galactic/ecliptic\))S +5077(will)S +5279(also)S +5486(be)S +3192 V +1260(available.)S +1706(The)S +1892(selection)S +2278(is)S +2376(dependent)S +2817(on)S +2948(whether)S +3300(the)S +3453(ISM)S +3663(is)S +3762(running)S +4105(as)S +4220(well)S +4424(as)S +4539(WCS)S +4788(information)S +5292(present)S +3312 V +1260(in)S +1369(the)S +1522(image.)S +1852(The)S +2038("Format")S +2440(menu)S +2693(allows)S +2985(the)S +3138(use)S +3302(to)S +3410(select)S +3667(a)S +3741(sexigesimal)S +4243(display,)S +4587(conversion)S +5055(to)S +5163(degrees)S +5497(or)S +3432 V +1260(radians,)S +1604(or)S +1718(whichever)S +2164(format)S +2461(is)S +2559(most)S +2785(natural)S +3093(for)S +3240(the)S +3393(coordinate)S +3846(being)S +4100(display.)S +4476(The)S +4663(two)S +4845(toggle)S +5127(to)S +5237(the)S +5391(right)S +3552 V +1260(control)S +1577(whether)S +1932(this)S +2111(WCS)S +2362(is)S +2463(to)S +2575(be)S +2703(displayed)S +3120(on)S +3254(the)S +3410(Panel)S +3666(\(i.e.)S +3855(the)S +4011(Coords)S +4333(Panel)S +4588(window\))S +4976(or)S +5092(the)S +5247(ImgWin)S +3672 V +1260(\(i.e.)S +1475(the)S +1627(text)S +1807(marker)S +2119(on)S +2249(the)S +2401(main)S +2631(image)S +2905(window\).)S +3912 V +1260(Other)S +1524(options)S +1856(below)S +2138(this)S +2321(group)S +2592(control)S +2913(whether)S +3272(or)S +3393(not)S +3559(to)S +3675(display)S +4002(the)S +4162(WCS)S +4417(labels,)S +4713(the)S +4873(image)S +5155(name/title,)S +4032 V +1260(and)S +1459(frame)S +1746(bu)S +1846 H + (f)show 10 -.5 mul h (f)show +10 R +1907(er)S +2039(information)S +2566(in)S +2699(the)S +2876(main)S +3131(Coords)S +3475(Panel)S +3751(display.)S +4149(The)S +4358("BPM)S +4665(Data")S +4948(option)S +5258(controls)S +4152 V +1260(whether)S +1613(or)S +1728(not)S +1888(the)S +2042(ISM)S +2252(will)S +2440(try)S +2583(to)S +2693(map)S +2897(any)S +3073(bad-pixel)S +3482(mask)S +3725(associated)S +4167(with)S +4377(the)S +4531(image.)S +4862(If)S +4960(enabled,)S +5327(a)S +5403(bad-)S +4272 V +1260(pixel)S +1497(mask)S +1745(speci\256ed)S +2137(by)S +2274(the)S +2433(image)S +2714(header)S +3016(BPM)S +3265(keyword)S +3651(\(currently)S +4081(\256xed)S +4317(by)S +4453(convention)S +4933(but)S +5097(this)S +5278(may)S +5486(be)S +4392 V +1260(selectable)S +1698(later\))S +1953(will)S +2154(be)S +2293(mapped)S +2654(along)S +2921(with)S +3144(the)S +3311(image.)S +3655(Aside)S +3933(from)S +4172(wcs/pixel)S +4601(readouts)S +4985(at)S +5103(each)S +5331(cursor)S +4512 V +1260(position,)S +1643(any)S +1822(BPM)S +2069(data)S +2270(values)S +2559(found)S +2826(will)S +3016(also)S +3211(be)S +3339(displayed.)S +3811(A)S +3917(non-zero)S +4305(value)S +4555(will)S +4745(cause)S +5000(the)S +5156(BPM)S +5402(\256eld)S +4632 V +1260(of)S +1384(the)S +1547(Coords)S +1877(Panel)S +2140(readout)S +2480(as)S +2604(well)S +2817(as)S +2941(the)S +3104(main)S +3345(image)S +3630(window)S +3993(marker)S +4316(to)S +4435(switch)S +4737(to)S +4856(a)S +4941(red)S +5109(background)S +4752 V +1260(color)S +1495(to)S +1603(\257ag)S +1783(the)S +1935(value.)S +4992 V +1260(The)S +1453(last)S +1630(box)S +1818(allows)S +2117(the)S +2277(user)S +2481(to)S +2597(specify)S +2923(a)S +3005(di)S +3083 H + (f)show 10 -.5 mul h (f)show +10 R +3144(erent)S +3381(ISM)S +3597(task)S +3796(to)S +3912(be)S +4044(executed)S +4436(or)S +4557(to)S +4673(reinitialize)S +5138(the)S +5298(current)S +5112 V +1260(one.)S +1497(In)S +1618(most)S +1851(cases)S +2098(this)S +2280(won't)S +2550(need)S +2775(to)S +2890(be)S +3021(changed,)S +3415(however)S +3795(a)S +3876(custom)S +4202(ISM)S +4417(could)S +4676(be)S +4807(started)S +5110(when)S +5363(using)S +5232 V +1260(special)S +1567(data)S +1763(formats.)S +2153(This)S +2361(command)S +2785(string)S +3043(can)S +3211(also)S +3402(be)S +3526(controlled)S +3961(by)S +4091(the)S +4243(application)S +4717("ism_task")S +5185(resource.)S +5520 V +9 B +900(TCLSHELL)S +5640 V +10 R +1260(The)S +10 I +1446(TclShell)S +10 R +1805(allows)S +2097(the)S +2250(user)S +2447(to)S +2556(type)S +2759(commands)S +3224(directly)S +3561(to)S +3671(the)S +3825(TCL)S +4046(interpreter,)S +4518(letting)S +4806(you)S +4988(send)S +5203(messages)S +5760 V +1260(to)S +1369(the)S +1522(object)S +1797(manager)S +2171(or)S +2284(execute)S +2618(speci\256c)S +2953(procedures)S +3420(in)S +3528(the)S +3680(TCL)S +3899(code)S +4117(that)S +4297(makes)S +4582(up)S +4712(the)S +4864(GUI.)S +5096(It)S +5187(is)S +5284(used)S +5497(as)S +5880 V +1260(a)S +1338(development)S +1888(or)S +2005(debugging)S +2461(tool)S +2651(for)S +2801(the)S +2957(GUI,)S +3193(but)S +3355(for)S +3505(an)S +3633(example)S +4005(of)S +4122(what)S +4350(it)S +4440(does,)S +4682(bring)S +4927(it)S +5017(up)S +5151(and)S +5329(type)S +5536(a)S +6000 V +1260(command)S +1684(such)S +1897(as)S +6240 V +10 I +1980(send)S +2193(\256leButton)S +2612(set)S +2753(background)S +3260(red)S +6648 V +9 B +900(COLORMAP)S +1462(SELECTION)S +6768 V +10 R +1260(By)S +1410(default)S +1721(XImtool)S +2094(will)S +2284(display)S +2607(images)S +2924(using)S +3175(either)S +3436(a)S +3514(grayscale)S +3924(colormap)S +4335(\(e.g.)S +4576(if)S +4671(loaded)S +4971(by)S +5105(a)S +5183(client\),)S +5497(or)S +6888 V +1260(a)S +1346(private)S +1665(colormap)S +2084(when)S +2342(loading)S +2684(an)S +2820(image)S +3106(from)S +3342(disk)S +3551(that)S +3743(contains)S +4118(a)S +4204(colormap.)S +4648(Each)S +4888(frame)S +5161(de\256nes)S +5485(its)S +7008 V +1260(own)S +1470(colormap)S +1885(so)S +2013(you)S +2202(can)S +2379(de\256ne)S +2662(di)S +2740 H + (f)show 10 -.5 mul h (f)show +10 R +2801(erent)S +3039(colormaps)S +3494(or)S +3616(enhancements)S +4220(for)S +4375(each)S +4596(frame,)S +4892(they)S +5103(will)S +5298(change)S +7128 V +1260(automatically)S +1834(as)S +1947(you)S +2127(cycle)S +2367(through)S +2708(the)S +2860(frames.)S +7680 V +900(X11IRAF Project)S +2703(Last change: 12 Aug 2001)S +5480(20)S +7920 V +EP +%%Page: 21 22 +BP +/slant 0 def +/height 1.000000 def +10 R +10 R +480 V +900(XIMTOOL)S +1376(\()S +1425(1)S +1491(\))S +2787(USER COMMANDS )S +4956(XIMTOOL)S +5432(\()S +5481(1)S +5547(\))S +960 V +9 B +1080(BUILTIN)S +1487(COLORMAPS)S +1080 V +10 R +1260(Once)S +1501(loaded,)S +1823(the)S +1976(colormap)S +2384(may)S +2588(either)S +2847(be)S +2973(changed)S +3337(using)S +3586(the)S +3740(builtin)S +4034(colormap)S +4443(menu)S +4697(under)S +4956(the)S +5110(View)S +5358(menu)S +1200 V +1260(button)S +1559(on)S +1702(the)S +1867(main)S +2110(window,)S +2500(or)S +2625(from)S +2861(the)S +3025(Enhancement)S +3610(box)S +3802(on)S +3944(the)S +4108(control)S +4433(panel.)S +4716(XImtool)S +5097(has)S +5272(about)S +5536(a)S +1320 V +1260(dozen)S +1556(colormap)S +1991(options)S +2344(builtin,)S +2689(other)S +2952(user-de\256ned)S +3503(colormaps)S +3977(may)S +4208(optionally)S +4673(be)S +4826(loaded.)S +5206(It)S +5326(is)S +5452(not)S +1440 V +1260(presently)S +1656(possible)S +2014(to)S +2122(save)S +2329(colormaps)S +2775(for)S +2921(later)S +3128(use.)S +1728 V +9 B +1080(USER-DEFINED)S +1782(COLORMAPS)S +1848 V +10 R +1260(The)S +10 I +1454(cmap[12])S +10 R +1887(and)S +10 I +2070(cmapDir[12])S +10 R +2642(resources)S +3057(\(or)S +3212(command)S +3645(line)S +3834(arguments\))S +4322(are)S +4482(used)S +4705(to)S +4823(tell)S +4991(which)S +5275(speci\256c)S +1968 V +1260(colormaps)S +1719(to)S +1840(make)S +2099(available)S +2502(or)S +2628(where)S +2914(to)S +3035(look)S +3256(for)S +3415(colortables)S +3895(respectively.)S +4474(The)S +4671(colortables)S +5151(are)S +5314(loaded)S +2088 V +1260(when)S +1519(ximtool)S +1874(starts)S +2128(up,)S +2296(or)S +2422(when)S +2681(it)S +2780(is)S +2890(reinitialized)S +3410(\(e.g.)S +3630(by)S +3773(pressing)S +4149(the)S +4314(Initialize)S +4712(button)S +5011(in)S +5132(the)S +5297(control)S +2208 V +1260(panel\).)S +1598(XImtool)S +1971(will)S +2161(ignore)S +2450(any)S +2628(\256les)S +2829(in)S +2941(the)S +3097(colormap)S +3508(directory)S +3901(which)S +4178(do)S +4311(not)S +4472(look)S +4683(like)S +4866(colortables.)S +5392(New)S +2328 V +1260(colortables)S +1728(will)S +1914(also)S +2105(be)S +2229(added)S +2497(automatically)S +3071(for)S +3217(each)S +3429(image)S +3703(loaded)S +3999(from)S +4223(disk.)S +2568 V +1260(The)S +1451(format)S +1753(of)S +1872(a)S +1952(user)S +2154(lookup)S +2468(table)S +2698(is)S +2801(very)S +3015(simple:)S +3347(each)S +3566(row)S +3758(de\256nes)S +4078(one)S +4259(colortable)S +4695(entry,)S +4962(and)S +5143(consists)S +5497(of)S +2688 V +1260(three)S +1489(columns)S +1858(de\256ning)S +2216(the)S +2368(red,)S +2550(green,)S +2826(and)S +3000(blue)S +3202(values)S +3487(scaled)S +3766(to)S +3874(the)S +4026(range)S +4277(0.0)S +4432(\(o)S +4515 H + (f)show 10 -.5 mul h (f)show +10 R +4576(\))S +4639(to)S +4747(1.0)S +4902(\(full)S +5104(intensity\).)S +2928 V +1500(R)S +1597(G)S +1699(B)S +3048 V +1500(R)S +1597(G)S +1699(B)S +3168 V +1500(\(etc.\))S +3408 V +1260(Blank)S +1529(and)S +1703(comment)S +2105(lines)S +2324(\(lines)S +2576(beginning)S +3006(with)S +3214(a)S +3288('#'\))S +3467(are)S +3618(ignored.)S +3648 V +1260(Usually)S +1605(256)S +1789(rows)S +2017(are)S +2172(provided,)S +2586(but)S +2748(the)S +2904(number)S +3243(may)S +3449(actually)S +3799(be)S +3927(anything)S +4311(in)S +4423(the)S +4579(range)S +4834(1)S +4918(to)S +5031(256.)S +5241(XImtool)S +3768 V +1260(will)S +1451(interpolate)S +1912(the)S +2068(table)S +2296(as)S +2413(necessary)S +2834(to)S +2946(compute)S +3324(the)S +3480(colortable)S +3913(values)S +4202(used)S +4419(in)S +4531(XImtool.)S +4929(XImtool)S +5302(uses)S +5508(at)S +3888 V +1260(most)S +1485(201)S +1665(colors)S +1939(to)S +2047(render)S +2331(pixel)S +2561(data,)S +2782(so)S +2901(it)S +2987(is)S +3084(usually)S +3403(necessary)S +3820(to)S +3928(interpolate)S +4385(the)S +4537(table)S +4761(when)S +5007(it)S +5093(is)S +5190(loaded.)S +4128 V +1260(The)S +1446(name)S +1693(of)S +1807(the)S +1960(colortable)S +2390(as)S +2504(it)S +2591(will)S +2778(appear)S +3074(in)S +3183(the)S +3336(XImtool)S +3706(control)S +4020(panel)S +4267(is)S +4365(the)S +4518(root)S +4710(name)S +4957(of)S +5072(the)S +5226(\256le,)S +5411(e.g.,)S +4248 V +1260(if)S +1365(the)S +1531(\256le)S +1703(is)S +1814("rainbow.lut")S +2398(the)S +2564(colortable)S +3007(name)S +3267(will)S +3467(be)S +3605("rainbow".)S +4083(Lower)S +4387(case)S +4602(names)S +4901(are)S +5065(suggested)S +5502(to)S +4368 V +1260(avoid)S +1525(name)S +1784(collisions)S +2211(with)S +2432(the)S +2597(builtin)S +2902(colortables.)S +3408(Private)S +3734(colormaps)S +4193(for)S +4352(disk)S +4562(images)S +4888(will)S +5088(be)S +5226(have)S +5458(the)S +4488 V +1260(same)S +1497(name)S +1745(as)S +1860(the)S +2014(image)S +2290(loaded.)S +2613(If)S +2711(the)S +2865(same)S +3102(colortable)S +3533(\256le)S +3693(appears)S +4029(in)S +4139(multiple)S +4505(user)S +4703(colortable)S +5134(directories,)S +4608 V +1260(the)S +1412(\256rst)S +1598(one)S +1772(found)S +2035(will)S +2221(be)S +2345(used.)S +4896 V +9 B +1080(MINIMIZING)S +1677(COLORMAP)S +2239(CONFLICTS)S +5016 V +10 R +1260(The)S +1456(Gterm)S +1752(widget)S +2065(used)S +2289(by)S +2430(XImtool)S +2810(\(i.e.)S +3006(the)S +3169(main)S +3410(display)S +3740(window\))S +4136(uses)S +4349(a)S +4434(private)S +4753(global)S +5045(colormap)S +5464(for)S +5136 V +1260(display,)S +1615(this)S +1801(allows)S +2103(it)S +2200(to)S +2319(have)S +2548(greater)S +2865(control)S +3189(over)S +3407(color)S +3653(cell)S +3838(allocation)S +4273(but)S +4441(can)S +4619(occasionally)S +5158(also)S +5359(cause)S +5256 V +1260("colormap)S +1714(\257ashing")S +2108(as)S +2227(the)S +2385(mouse)S +2682(is)S +2785(moved)S +3093(in)S +3207(and)S +3387(out)S +3551(of)S +3670(the)S +3828(application.)S +4363(The)S +4554(problem)S +4923(here)S +5130(is)S +5234(that)S +5421(in)S +5536(a)S +5376 V +1260(system)S +1572(with)S +1784(only)S +1996(an)S +2124(8-bit)S +2347(colormap)S +2758(\(256)S +2975(colors\))S +3286(all)S +3420(applications)S +3937(must)S +4165(compete)S +4536(for)S +4685(colors,)S +4987(programs)S +5397(such)S +5496 V +1260(as)S +1380(XV)S +1561(or)S +1681(Netscape)S +2083(allocate)S +2430(colors)S +2711(from)S +2942(the)S +3102(default)S +3417(colormap)S +3832(leaving)S +4164(only)S +4380(a)S +4462(few)S +4649(free)S +4841(cells)S +5062(for)S +5216(XImtool.)S +5616 V +1260(Since)S +1513(XImtool)S +1883(de\256nes)S +2197(a)S +2271(private)S +2578(global)S +2858(colormap)S +3265(it)S +3351(is)S +3448(still)S +3629(able)S +3825(to)S +3933(allocate)S +4273(the)S +4425(needed)S +4737(cells)S +4950(rather)S +5212(than)S +5414(fail-)S +5736 V +1260(ing,)S +1449(but)S +1613(it's)S +1777(allocating)S +2207(cells)S +2426(already)S +2755(used)S +2974(by)S +3110(other)S +3351(applications.)S +3925(As)S +4072(the)S +4230(mouse)S +4527(moves)S +4824(out)S +4989(of)S +5109(the)S +5268(ximtool)S +5856 V +1260(window)S +1623(those)S +1875(cells)S +2099(are)S +2261(once)S +2490(again)S +2747(de\256ned)S +3082(in)S +3201(terms)S +3464(of)S +3587(the)S +3749(default)S +4066(colormap,)S +4508(so)S +4637(the)S +4799(ximtool)S +5151(window)S +5513(is)S +5976 V +1260(then)S +1470(using)S +1725(a)S +1807(di)S +1885 H + (f)show 10 -.5 mul h (f)show +10 R +1946(erent)S +2183(colormap.)S +2653(It)S +2752(is)S +2857(this)S +3040(switching)S +3467(of)S +3588(the)S +3748(colormap)S +4164(context)S +4497(that)S +4686(causes)S +4985(the)S +5146(\257ashing)S +5502(to)S +6096 V +1260(occur,)S +1536(but)S +1694(there)S +1923(are)S +2074(a)S +2148(few)S +2327(things)S +2602(that)S +2782(can)S +2950(be)S +3074(done)S +3298(to)S +3406(help)S +3608(minimize)S +4016(this.)S +6336 V +1260(XImtool)S +1640(logically)S +2031(de\256nes)S +2356(200)S +2548(colors)S +2834(which)S +3120(the)S +3284(client)S +3548(image)S +3834(display)S +4165(program)S +4545(can)S +4725(use)S +4900(to)S +5020(render)S +5316(pixels.)S +6456 V +1260(However,)S +1687(ximtool)S +2036(may)S +2245(or)S +2365(may)S +2574(not)S +2739(actually)S +3092(allocate)S +3439(all)S +3576(of)S +3695(those)S +3942(colors.)S +4277(By)S +4430(default)S +4743(it)S +4835(currently)S +5231(allocates)S +6576 V +1260(only)S +1479(about)S +1743(192)S +1935(colors,)S +2246(to)S +2366(reserve)S +2695(64)S +2837(colors)S +3123(for)S +3281(the)S +3445(other)S +3692(windows)S +4095(on)S +4237(the)S +4401(screen.)S +4752(You)S +4966(don't)S +5219(normally)S +6696 V +1260(notice)S +1539(this)S +1719(as)S +1837(1\))S +1955(usually)S +2279(the)S +2436(default)S +2748(screen)S +3037(colormap)S +3449(has)S +3617(enough)S +3946(free)S +4135(cells)S +4353(to)S +4466(allow)S +4722(ximtool)S +5068(to)S +5180(match)S +5458(the)S +6816 V +1260(colors,)S +1570(and)S +1755(2\))S +1879(the)S +2042(extra)S +2282(unallocated)S +2784(cells)S +3009(correspond)S +3494(to)S +3614(the)S +3778(brightest)S +4170(pixels)S +4451(in)S +4571(the)S +4735(rendered)S +5125(image,)S +5436(and)S +6936 V +1260(these)S +1496(colors)S +1771(may)S +1974(not)S +2132(be)S +2256(used)S +2469(or)S +2582(usually)S +2901(only)S +3109(correspond)S +3582(to)S +3690(a)S +3764(few)S +3943(small)S +4190(regions)S +4514(near)S +4715(the)S +4867(saturated)S +5257(cores)S +5497(of)S +7056 V +1260(bright)S +1529(objects.)S +7296 V +1260(You)S +1465(can)S +1636(eliminate)S +2041(this)S +2219(problem)S +2585(by)S +2718(setting)S +3018(the)S +10 I +3173(basePixel)S +10 R +3594(resource)S +3965(to)S +4077(e.g.)S +4285(48)S +4419(instead)S +4736(of)S +4853(64,)S +5012(which)S +5290(will)S +5480(let)S +7776 V +900(X11IRAF Project)S +2703(Last change: 12 Aug 2001)S +5480(21)S +7920 V +EP +%%Page: 22 23 +BP +/slant 0 def +/height 1.000000 def +10 R +10 R +480 V +900(XIMTOOL)S +1376(\()S +1425(1)S +1491(\))S +2787(USER COMMANDS )S +4956(XIMTOOL)S +5432(\()S +5481(1)S +5547(\))S +960 V +1260(the)S +1428(gterm)S +1707(widget)S +2025(allocate)S +2381(all)S +2527(200)S +2723(colors.)S +3068(However,)S +3504(this)S +3695(isn't)S +3918(recommended)S +4528(for)S +4689(normal)S +5017(use)S +5195(as)S +5323(it)S +5424(will)S +1080 V +1260(increase)S +1624(the)S +1784(likelihood)S +2228(of)S +2349(colormap)S +2764(\257ashing.)S +3174(If)S +3278(you)S +3466(change)S +10 I +3787(basePixel)S +10 R +4175(,)S +4239(either)S +4505(restart)S +4793(the)S +4954(X)S +5065(server)S +5347(or)S +5469(set)S +1200 V +1260(the)S +1418(resource)S +10 I +1791(cmapInitialize)S +10 R +2363(=)S +10 I +2419(True)S +10 R +2644(to)S +2758(force)S +2998(the)S +3156(gterm)S +3425(widget)S +3732(to)S +3845(update)S +4146(its)S +4276(global)S +4561(colormap)S +4973(resource)S +5345(in)S +5458(the)S +1320 V +1260(X)S +1362(server.)S +1690(The)S +1875(colormap)S +2282(resource)S +2649(may)S +2851(also)S +3042(be)S +3166(deleted)S +3484(by)S +3614(using)S +3861(the)S +4013(command)S +1524 V +10 I +1980(xprop)S +2243(-root)S +2473(-remove)S +2829(GT_image)S +1728 V +10 R +1260(These)S +1528(options)S +1853(may)S +2055(also)S +2246(be)S +2370(set)S +2511(on)S +2641(the)S +2793(command)S +3217(line)S +3397(when)S +3643(\256rst)S +3829(starting)S +4159(up.)S +1968 V +1260(In)S +1388(general)S +1726(one)S +1915(can)S +2098(set)S +2254(the)S +2421(Gterm)S +2721(widget)S +3039(resources)S +10 I +3461(basePixel)S +10 R +3895(and)S +10 I +4085(maxColors)S +10 R +4570(to)S +4694(specify)S +5028(the)S +5196(region)S +5497(of)S +2088 V +1260(colormap)S +1680(space)S +1944(to)S +2065(be)S +2202(used)S +2428(for)S +2587(image)S +2874(display.)S +3261(If)S +3370(you)S +3563(set)S +10 I +3717(maxColors)S +10 R +4199(to)S +4320(a)S +4407(small)S +4667(value,)S +4951(the)S +5116(200)S +5308(logical)S +2208 V +1260(colors)S +1541(de\256ned)S +1872(by)S +2009(the)S +2168(widget)S +2477(will)S +2670(be)S +2801(mapped)S +3154(by)S +3291(the)S +3450(imtool)S +3749(color)S +3991(model)S +4278(into)S +4471(whatever)S +4873(number)S +5215(of)S +5336(colors)S +2328 V +1260(are)S +1417(actually)S +1769(available)S +2165(to)S +2279(the)S +2437(widget.)S +2800(For)S +2974(example,)S +3372(in)S +3485(the)S +3642(default)S +3954(setup,)S +4225(200)S +4410(color)S +4650(values)S +4940(are)S +5096(really)S +5358(being)S +2448 V +1260(mapped)S +1606(into)S +1792(192)S +1972(color)S +2207(cells)S +2420(used)S +2633(for)S +2779(display,)S +3123(the)S +3275(remaining)S +3710(colors)S +3984(are)S +4135(used)S +4348(for)S +4494(buttons,)S +4845(menus)S +5137(etc)S +5284(and)S +5459(are)S +2568 V +1260(allocated)S +1650(from)S +1874(the)S +2026(default)S +2333(colormap)S +2740(by)S +2870(the)S +3022(X)S +3124(toolkit)S +3416(when)S +3662(the)S +3814(application)S +4288(starts)S +4529(up.)S +2808 V +1260(Even)S +1501(though)S +1815(the)S +1973(Gterm)S +2264(widget)S +2572(uses)S +2780(a)S +2860(private)S +3174(colormap,)S +3613(it)S +3706(is)S +3810(a)S +3891(private)S +10 I +4205(global)S +10 R +4498(colormap)S +4912(meaning)S +5293(that)S +5480(all)S +2928 V +1260(Gterm)S +1550(widgets)S +1896(share)S +2141(the)S +2298(same)S +2537(colormap.)S +3003(An)S +3159(example)S +3531(of)S +3648(colormap)S +4059(sharing)S +4387(in)S +4499(ximtool)S +4845(is)S +4946(the)S +5102(main)S +5336(image)S +3048 V +1260(window)S +1619(and)S +1800(the)S +1959(colorbar)S +2328(window.)S +2742(These)S +3017(are)S +3175(two)S +3362(separate)S +3725(gterm)S +3995(widgets)S +4343(that)S +4530(share)S +4777(the)S +4936(same)S +5178(colormap.)S +3168 V +1260(They)S +1506(have)S +1735(to)S +1854(share)S +2105(the)S +2268(same)S +2514(colormap,)S +2957(as)S +3080(otherwise)S +3508(when)S +3764(you)S +3954(windowed)S +4410(the)S +4572(main)S +4812(image)S +5096(window)S +5458(the)S +3288 V +1260(colorbar)S +1630(window)S +1990(would)S +2278(not)S +2444(accurately)S +2891(re\257ect)S +3178(the)S +3338(modi\256ed)S +3732(colormap.)S +4203(By)S +4359(default)S +4675(two)S +4864(separate)S +5229(ximtools)S +3408 V +1260(would)S +1556(also)S +1763(share)S +2019(the)S +2186(same)S +2436(colormap)S +2858(meaning)S +3247(contrast)S +3608(enhancements)S +4218(in)S +4341(one)S +4530(window)S +4897(would)S +5192(a)S +5236 H + (f)show 10 -.5 mul h (f)show +10 R +5297(ect)S +5458(the)S +3528 V +1260(other.)S +1563(By)S +1723(resetting)S +2110(the)S +10 I +2275(cmapName)S +10 R +2767(command)S +3204(line)S +3397(option)S +3696(or)S +3822(resource)S +4203(you)S +4397(can)S +4579(change)S +4905(the)S +5071(name)S +5331(of)S +5458(the)S +3648 V +1260(private)S +1582(colormap)S +2004(used)S +2232(causing)S +2582(separate)S +2953(ximtools)S +3349(to)S +3472(use)S +3650(di)S +3728 H + (f)show 10 -.5 mul h (f)show +10 R +3789(erent)S +4033(colormaps,)S +4519(but)S +4692(note)S +4909(this)S +5099(also)S +5304(creates)S +3768 V +1260(colormap)S +1671(\257ashing)S +2022(between)S +2388(the)S +2544(two)S +2728(windows)S +3123(that)S +3307(cannot)S +3607(easily)S +3874(be)S +4002(avoided.)S +4407(By)S +4559(setting)S +4861(the)S +10 I +5018(cmapName)S +10 R +5502(to)S +3888 V +1260("default")S +1649(the)S +1801(widget)S +2103(will)S +2289(allocate)S +2629(colors)S +2903(from)S +3127(the)S +3279(default)S +3586(colormap,)S +4018(but)S +4176(this)S +4351(is)S +4448(of)S +4561(little)S +4775(use)S +4938(at)S +5040(the)S +5192(moment.)S +4128 V +1260(There)S +1524(are)S +1677(a)S +1753(number)S +2090(of)S +2205(other)S +2442(resources)S +2850(that)S +3032(can)S +3202(be)S +3328(used)S +3543(to)S +3653(modify)S +3974(the)S +4129(behavior)S +4511(of)S +4627(the)S +4782(Gterm)S +5070(widget)S +5375(color)S +4248 V +1260(management)S +1801(scheme,)S +2156(but)S +2315(these)S +2551(are)S +2703(the)S +2856(most)S +3082(useful)S +3356(ones.)S +3624(For)S +3793(question)S +4162(and)S +4336(further)S +4637(information)S +5139(feel)S +5318(free)S +5502(to)S +4368 V +1260(contact)S +10 I +1578(iraf@noao.edu)S +10 R +2184(.)S +4776 V +9 B +900(DISPLAY)S +1322(CLIENT)S +1694(CONNECTIONS)S +4896 V +10 R +1260(XImtool)S +1629(allows)S +1920(display)S +2239(clients)S +2530(to)S +2638(connect)S +2978(in)S +3086(any)S +3260(of)S +3373(the)S +3525(following)S +3944(ways:)S +5064 V +10 B +1260(\256fo)S +1429(pipes)S +5184 V +10 R +1510(The)S +1706(traditional)S +2158(approach.)S +2589(The)S +2785(default)S +3103(global)S +3394(/dev/imt1[io])S +3963(pipes)S +4215(may)S +4428(be)S +4564(used,)S +4814(or)S +4939(a)S +5025(private)S +5344(set)S +5497(of)S +5304 V +1510(\256fos)S +1728(can)S +1906(be)S +2040(speci\256ed)S +2435(using)S +2692(the)S +10 I +2854(-\256fo)S +10 R +3055(command)S +3489(line)S +3678(argument)S +4094(or)S +10 Y +4216(*)S +10 I +4266(\256fo)S +10 R +4433(resource.)S +4864(Values)S +5180(should)S +5486(be)S +5424 V +1510(speci\256ed)S +1895(as)S +2008(the)S +2160(root)S +2351(pathname)S +2769(to)S +2877(a)S +2951(pair)S +3136(of)S +3250(\256fo)S +3420(pipes)S +3662(whose)S +3948(last)S +4118(character)S +4513(is)S +4611('i')S +4736(or)S +4850('o',)S +5052(these)S +5288(charac-)S +5544 V +1510(ters)S +1687(will)S +1876(be)S +2003(added)S +2274(automatically)S +2851(when)S +3100(opening)S +3455(the)S +3610(pipes.)S +3909(For)S +4081(example,)S +4477(to)S +4587(use)S +4752(the)S +4906(default)S +5215(pipes)S +5458(the)S +5664 V +1510(path)S +1712(would)S +1992(be)S +2116(speci\256ed)S +2501(as)S +2614(simply)S +2917("/dev/imt1".)S +3438(A)S +3540(value)S +3786(of)S +3899("none")S +4205(disables)S +4557(this)S +4732(connection.)S +5832 V +10 B +1260(tcp/ip)S +1535(sockets)S +5952 V +10 R +1510(Clients)S +1836(connect)S +2188(via)S +2352(a)S +2438(tcp/ip)S +2708(socket.)S +3030(The)S +3227(default)S +3546(port)S +3749(is)S +10 I +3858(5137)S +10 R +4058(,)S +4125(or)S +4250(a)S +4337(custom)S +4669(port)S +4873(may)S +5088(be)S +5225(speci\256ed)S +6072 V +1510(using)S +1758(the)S +10 I +1911(-port)S +10 R +2142(command)S +2567(line)S +2747(switch)S +3038(or)S +3151(a)S +10 Y +3225(*)S +10 I +3275(port)S +10 R +3472(resource.)S +3864(This)S +4072(permits)S +4402(connecting)S +4870(to)S +4978(the)S +5130(server)S +5403(over)S +6192 V +1510(a)S +1584(remote)S +1891(network)S +2248(connection)S +2716(anywhere)S +3133(on)S +3263(the)S +3415(Internet.)S +3780(A)S +3883(port)S +4075(number)S +4411(of)S +4525(0)S +4606(\(zero\))S +4874(disables)S +5227(this)S +5403(con-)S +6312 V +1510(nection.)S +6480 V +10 B +1260(unix)S +1480(domain)S +1833(sockets)S +6600 V +10 R +1510(Like)S +1733(a)S +1817(tcp/ip)S +2085(socket,)S +2405(but)S +2573(limited)S +2898(to)S +3017(a)S +3102(single)S +3382(host)S +3590(system.)S +3934(Usually)S +4286(faster)S +4548(than)S +4761(a)S +4846(tcp/ip)S +5115(socket,)S +5436(and)S +6720 V +1510(comparable)S +2008(to)S +2119(a)S +2196(\256fo.)S +2393(By)S +2543(default)S +2853(each)S +3068(user)S +3267(gets)S +3460(their)S +3675(own)S +3879(unix)S +4089(domain)S +4421(socket,)S +4733(so)S +4854(this)S +5031(option)S +5319(allows)S +6840 V +1510(multiple)S +1882(users)S +2125(to)S +2241(run)S +2413(ximtools)S +2803(on)S +2942(the)S +3103(same)S +3347(host)S +3553(without)S +3898(having)S +4209(to)S +4326(customize)S +4770(things.)S +5109(The)S +5303(default)S +6960 V +1510(value)S +1761(is)S +1863("/tmp/.IMT%d",)S +2558(other)S +2798(sockets)S +3126(may)S +3332(be)S +3460(de\256ned)S +3788(using)S +4039(the)S +10 I +4195(-unix)S +10 R +4434(command)S +4862(line)S +5046(switch)S +5341(or)S +5458(the)S +7080 V +10 Y +1510(*)S +10 I +1560(unixaddr)S +10 R +1953(resource.)S +2377(Legal)S +2636(values)S +2923(should)S +3222(be)S +3348(speci\256ed)S +3735(as)S +3850(a)S +3926(\256lename)S +4302(to)S +4412(be)S +4538(used)S +4753(for)S +4901(the)S +5056(socket,)S +5369(up)S +5502(to)S +7200 V +1510(two)S +1693("%d")S +1941(\256elds)S +2190(are)S +2343(allowed)S +2691(and)S +2867(will)S +3055(be)S +3181(replaced)S +3550(by)S +3682(the)S +3836(userid.)S +4137(An)S +4291(empty)S +4573(string)S +4833(value)S +5081(disables)S +5435(this)S +7680 V +900(X11IRAF Project)S +2703(Last change: 12 Aug 2001)S +5480(22)S +7920 V +EP +%%Page: 23 24 +BP +/slant 0 def +/height 1.000000 def +10 R +10 R +480 V +900(XIMTOOL)S +1376(\()S +1425(1)S +1491(\))S +2787(USER COMMANDS )S +4956(XIMTOOL)S +5432(\()S +5481(1)S +5547(\))S +960 V +1510(connection.)S +1200 V +1510(By)S +1657(default)S +1964(ximtool)S +2306(listens)S +2592(simultaneously)S +3228(for)S +3374(client)S +3626(connections)S +4133(on)S +4263(all)S +4394(three)S +4624(types)S +4866(of)S +4980(ports.)S +5296(Clients)S +1320 V +1510(may)S +1713(connect)S +2054(simultaneously)S +2691(by)S +2822(di)S +2900 H + (f)show 10 -.5 mul h (f)show +10 R +2961(erent)S +3190(means)S +3475(allowing)S +3855(up)S +3985(to)S +4093(three)S +4322(di)S +4400 H + (f)show 10 -.5 mul h (f)show +10 R +4461(erent)S +4690(displays)S +5048(to)S +5156(be)S +5280(loading)S +1440 V +1510(at)S +1612(the)S +1764(same)S +1999(time)S +2207(into)S +2393(di)S +2471 H + (f)show 10 -.5 mul h (f)show +10 R +2532(erent)S +2761(frames.)S +1848 V +9 B +1080(COMMUNICATIONS)S +1987(PROTOCOL)S +1968 V +10 R +1260(The)S +1448(communications)S +2142(protocol)S +2508(used)S +2724(is)S +2824(a)S +2901(slightly)S +3236(modi\256ed)S +3626(version)S +3954(of)S +4071(that)S +4255(used)S +4472(by)S +4606(the)S +4762(IIS)S +4918(Model)S +5213(70;)S +5375(other)S +2088 V +1260(more)S +1503(modern)S +1846(protocols)S +2256(will)S +2450(likely)S +2716(be)S +2848(supported)S +3280(in)S +3396(the)S +3556(future.)S +3887(The)S +4080(IIS)S +4239(protocol)S +4609(is)S +4713(basically)S +5105(a)S +5186(command)S +2208 V +1260(packet)S +1562(stream)S +1870(with)S +2090(a)S +2176(header)S +2483(describing)S +2941(the)S +3105(operation)S +3524(to)S +3644(be)S +3780(performed)S +4237(\(select)S +4539(frame,)S +4838(load)S +5052(display,)S +5409(read)S +2328 V +1260(cursor,)S +1564(etc\),)S +1768(and)S +1942(an)S +2066(optional)S +2424(data)S +2620(packet)S +2910(containing)S +3362(e.g.)S +3536(pixels.)S +2568 V +1260(Beginning)S +1712(with)S +1925(XImtool)S +2299(V1.3)S +2531(the)S +2688(protocol)S +3056(was)S +3246(modi\256ed)S +3637(even)S +3860(more)S +4100(to)S +4214(allow)S +4472(extra)S +4707(text)S +4893(at)S +5001(the)S +5159(end)S +5339(of)S +5458(the)S +2688 V +1260(WCS)S +1515(string)S +1781(to)S +1897(de\256ne)S +2179(image)S +2461(mappings)S +2888(and)S +3070(to)S +3186(better)S +3451(support)S +3789(multiple)S +4161(world)S +4431(coordinate)S +4889(systems)S +5243(within)S +5536(a)S +2808 V +1260(frame.)S +1612(For)S +1786(backwards)S +2247(compatability)S +2832(none)S +3061(of)S +3179(the)S +3336(existing)S +3688(IIS)S +3845(protocols)S +4252(were)S +4480(modi\256ed)S +4871(completely,)S +5375(how-)S +2928 V +1260(ever)S +1467(we)S +1619(take)S +1821(advantage)S +2261(of)S +2380(unused)S +2699(registers)S +3073(to)S +3187(\257ag)S +3373(the)S +3531(new)S +3733(features)S +4084(in)S +4198(existing)S +4551(functions)S +4958(\(like)S +5176(read/write)S +3048 V +1260(WCS\).)S +1572(The)S +1764(WCS)S +2018(mapping)S +2405(changes)S +2763(required)S +3132(only)S +3347(that)S +3534(the)S +3693(unused)S +4013('x')S +4166(register)S +4503(be)S +4635(set)S +4784(to)S +4900(indicate)S +5254(the)S +5414(new)S +3168 V +1260(behavior)S +1639(was)S +1824(desired,)S +2167(e.g.)S +2341(the)S +2493(wcs)S +2678(text)S +2858(containing)S +3310(the)S +3462(extra)S +3691(mapping)S +4071(data.)S +3408 V +1260(We)S +1444(also)S +1651(added)S +1935(two)S +2131(new)S +2343(WCS)S +2606(calls)S +2835(that)S +3031(allow)S +3299(us)S +3434(to)S +3558(query)S +3831(the)S +4000(WCS)S +4264(version,)S +4630(or)S +4760(query)S +5034(a)S +5125(WCS)S +5389(by)S +5536(a)S +3528 V +1260(speci\256c)S +1602(number)S +1944(corresponding)S +2552(to)S +2667(a)S +2748(mapping.)S +3190(The)S +3382(WCS)S +3636(version)S +3967(query)S +4231(will)S +4423(return)S +4697(a)S +4777(string)S +5041(such)S +5260(as)S +5379("ver-)S +3648 V +1260(sion=10")S +1654(which)S +1928(can)S +2096(be)S +2220(parsed)S +2510(by)S +2640(the)S +2792(client)S +3044(to)S +3152(get)S +3304(a)S +3378(version)S +3702(number)S +4037('10')S +4233(\(corresponding)S +4867(to)S +4975(version)S +5299(1.0\).)S +3888 V +1260(Because)S +1634(of)S +1759(the)S +1923(added)S +2203(mapping)S +2595(text)S +2787(the)S +2951(WCS)S +3210(string)S +3480(length)S +3772(was)S +3969(increased)S +4387(from)S +4623(320)S +4815(to)S +4936(1024)S +5179(bytes,)S +5458(the)S +4008 V +1260(string)S +1518(length)S +1798(used)S +2011(internally)S +2424(depends)S +2781(on)S +2911(whether)S +3262(the)S +3414('x')S +3560(register)S +3889(has)S +4052(been)S +4270(set.)S +4248 V +1260(Support)S +1616(for)S +1771(the)S +1933(full)S +2112(16)S +2252(frames)S +2563(allowed)S +2919(by)S +3059(the)S +3221(bit-\257ag)S +3550('z')S +3700(register)S +4039(in)S +4157(the)S +4319(IIS)S +4481(header)S +4786(packet)S +5086(required)S +5458(the)S +4368 V +1260(masking)S +1631(values)S +1918(be)S +2044(changed)S +2408(at)S +2512(various)S +2838(places)S +3119(in)S +3229(the)S +3383(code.)S +3658(This)S +3868(was)S +4055(more)S +4291(a)S +4366(limitation)S +4787(of)S +4901(the)S +5054(initial)S +5319(imple-)S +4488 V +1260(mentation)S +1690(than)S +1892(a)S +1966(required)S +2328(change)S +2640(to)S +2748(the)S +2900(protocol.)S +4728 V +1260(A)S +1362(complete)S +1758(summary)S +2160(of)S +2273(the)S +2425(XImtool)S +2794(IIS)S +2946(protocol)S +3309(implementation)S +3967(follows.)S +5136 V +9 B +1080(IIS)S +1227(PROTOCOL)S +1769(SUMMARY)S +5256 V +10 R +1260(All)S +1427(operations)S +1882(are)S +2042(initiated)S +2409(by)S +2548(sending)S +2898(a)S +2981(header)S +3285(packet)S +3584(containing)S +4046(a)S +10 I +4130(thing)S +4376(id)S +10 R +4494(\(tid\))S +4706(and)S +10 I +4890(subunit)S +10 R +5225(selecting)S +5376 V +1260(the)S +1413(function)S +1776(to)S +1884(be)S +2008(performed,)S +2478(optionally)S +2914(followed)S +3299(by)S +3429(data)S +3625(up)S +3755(to)S +3863(32Kb)S +4115(long.)S +4378(The)S +4563(IIS)S +4715(header)S +5010(packet)S +5300(used)S +5513(is)S +5496 V +1260(de\256ned)S +1584(as)S +5616 V +10 C +1980(struct)S +2460(iism70)S +2880({)S +5736 V +2340(short)S +2820(tid;)S +5856 V +2340(short)S +2820(thingct;)S +5976 V +2340(short)S +2820(subunit;)S +6096 V +2340(short)S +2820(checksum;)S +6216 V +2340(short)S +2820(x,)S +3000(y,)S +3180(z;)S +6336 V +2340(short)S +2820(t;)S +6456 V +1980(};)S +6696 V +10 R +1260(The)S +10 I +1447(thing)S +1685(count)S +10 R +1939(\256eld)S +2149(contains)S +2514(the)S +2668(negative)S +3038(number)S +3375(of)S +3490(bytes)S +3733(of)S +3848(data)S +4046(that)S +4228(will)S +4417(be)S +4544(sent)S +4738(following)S +5160(the)S +5315(header)S +6816 V +1260(packet.)S +1605(The)S +1790(IIS)S +1942(header)S +2237(checksum)S +2666(is)S +2763(computed)S +3187(as)S +7056 V +10 C +1500(checksum)S +2040(=)S +2160(0177777)S +2640(-)S +2760(\(tid)S +3060(+)S +3180(subunit)S +3660(+)S +3780(thingct)S +4260(+)S +4380(x)S +4500(+)S +4620(y)S +4740(+)S +4860(z)S +4980(+)S +5100(t\);)S +7296 V +10 R +1260(The)S +1447(four)S +1645(IIS)S +1799(registers)S +2169(are)S +2322(set)S +2465(di)S +2543 H + (f)show 10 -.5 mul h (f)show +10 R +2604(erently)S +2913(depending)S +3361(on)S +3493(the)S +3647(operation,)S +4081(a)S +4158(summary)S +4563(of)S +4679(the)S +4834(header)S +5132(packets)S +5464(for)S +7776 V +900(X11IRAF Project)S +2703(Last change: 12 Aug 2001)S +5480(23)S +7920 V +EP +%%Page: 24 25 +BP +/slant 0 def +/height 1.000000 def +10 R +10 R +480 V +900(XIMTOOL)S +1376(\()S +1425(1)S +1491(\))S +2787(USER COMMANDS )S +4956(XIMTOOL)S +5432(\()S +5481(1)S +5547(\))S +960 V +1260(each)S +1472(operation)S +1879(is)S +1976(summarized)S +2494(below.)S +1200 V +10 B +2795(IIS)S +2959(Header)S +3305(Packet)S +3623(Summary)S +1320 V +10 R +2530(TID)S +3436(Subunit)S +4136(Tct)S +4439(X)S +4661(Y)S +4930(Z)S +5235(T)S +5514(Data)S +1340 V +10 Y1 +2083(2)S +2123(2222222222222222222222222222222222222222222222222222222222222222222222222)S +1460 V +10 R +1260(Read)S +1495(Data)S +2158(IIS_READ)S +10 B +2602(|)S +10 R +2624(PACKED)S +3218(MEMORY)S +4117(-NB)S +4450(x)S +4672(y)S +4883(fr)S +5188(-)S +5493(NB)S +1580 V +1260(Write)S +1517(Data)S +2158(IIS_WRITE)S +10 B +2646(|)S +10 R +2668(PACKED)S +3218(MEMORY)S +4117(-NB)S +4450(x)S +4672(y)S +4883(fr)S +5188(-)S +5493(NB)S +1700 V +1260(Read)S +1495(Cursor)S +2158(IIS_READ)S +3218(IMCURSOR)S +4186(-)S +4458(-)S +4680(-)S +4883(-)S +5188(-)S +5493(-)S +1820 V +1260(Write)S +1517(Cursor)S +2158(IIS_WRITE)S +3218(IMCURSOR)S +4186(-)S +4450(x)S +4672(y)S +4883(wcs)S +5188(-)S +5493(-)S +1940 V +1260(Set)S +1418(Frame)S +2158(IIS_WRITE)S +3218(LUT)S +10 B +3412(|)S +10 R +3434(COMMAND)S +4161(-1)S +4458(-)S +4680(-)S +4883(-)S +5188(-)S +5493(2)S +2060 V +1260(Erase)S +1511(Frame)S +2158(IIS_WRITE)S +10 B +2676(|)S +10 R +2728(fb)S +3218(FEEDBACK)S +4186(-)S +4458(-)S +4680(-)S +4883(fr)S +5188(-)S +5493(-)S +2300 V +1260(Old)S +1440(Write)S +1697(WCS)S +2158(IIS_WRITE)S +10 B +2646(|)S +10 R +2668(PACKED)S +3218(WCS)S +4150(-N)S +4458(-)S +4680(-)S +4883(fr)S +5188(fb)S +5493(320)S +2420 V +1260(Old)S +1440(Read)S +1675(WCS)S +2158(IIS_READ)S +3218(WCS)S +4186(-)S +4458(-)S +4680(-)S +4883(fr)S +5188(wcs)S +5493(320)S +2660 V +1260(WCS)S +1507(Version?)S +2158(IIS_READ)S +3218(WCS)S +4186(-)S +4450(1)S +4672(1)S +4883(-)S +5188(-)S +5493(320)S +2780 V +1260(WCS)S +1507(by)S +1637(Number?)S +2158(IIS_READ)S +3218(WCS)S +4186(-)S +4450(1)S +4680(-)S +4883(fr)S +5188(wcs)S +5493(1024)S +2900 V +1260(New)S +1478(Write)S +1735(WCS)S +2158(IIS_WRITE)S +10 B +2646(|)S +10 R +2668(PACKED)S +3218(WCS)S +4150(-N)S +4450(1)S +4680(-)S +4883(fr)S +5188(fb)S +5493(1024)S +3020 V +1260(New)S +1478(Read)S +1713(WCS)S +2158(IIS_READ)S +3218(WCS)S +4186(-)S +4450(1)S +4680(-)S +4883(fr)S +5188(wcs)S +5493(1024)S +3040 V +10 Y1 +2083(2)S +2123(2222222222222222222222222222222222222222222222222222222222222222222222222)S +2083(1)S +2940 V +2083(1)S +2840 V +2083(1)S +2740 V +2083(1)S +2640 V +2083(1)S +2540 V +2083(1)S +2440 V +2083(1)S +2340 V +2083(1)S +2240 V +2083(1)S +2140 V +2083(1)S +2040 V +2083(1)S +1940 V +2083(1)S +1840 V +2083(1)S +1740 V +2083(1)S +1640 V +2083(1)S +1540 V +2083(1)S +1440 V +2083(1)S +3040 V +3143(1)S +2940 V +3143(1)S +2840 V +3143(1)S +2740 V +3143(1)S +2640 V +3143(1)S +2540 V +3143(1)S +2440 V +3143(1)S +2340 V +3143(1)S +2240 V +3143(1)S +2140 V +3143(1)S +2040 V +3143(1)S +1940 V +3143(1)S +1840 V +3143(1)S +1740 V +3143(1)S +1640 V +3143(1)S +1540 V +3143(1)S +1440 V +3143(1)S +3040 V +4042(1)S +2940 V +4042(1)S +2840 V +4042(1)S +2740 V +4042(1)S +2640 V +4042(1)S +2540 V +4042(1)S +2440 V +4042(1)S +2340 V +4042(1)S +2240 V +4042(1)S +2140 V +4042(1)S +2040 V +4042(1)S +1940 V +4042(1)S +1840 V +4042(1)S +1740 V +4042(1)S +1640 V +4042(1)S +1540 V +4042(1)S +1440 V +4042(1)S +3040 V +4364(1)S +2940 V +4364(1)S +2840 V +4364(1)S +2740 V +4364(1)S +2640 V +4364(1)S +2540 V +4364(1)S +2440 V +4364(1)S +2340 V +4364(1)S +2240 V +4364(1)S +2140 V +4364(1)S +2040 V +4364(1)S +1940 V +4364(1)S +1840 V +4364(1)S +1740 V +4364(1)S +1640 V +4364(1)S +1540 V +4364(1)S +1440 V +4364(1)S +3040 V +4586(1)S +2940 V +4586(1)S +2840 V +4586(1)S +2740 V +4586(1)S +2640 V +4586(1)S +2540 V +4586(1)S +2440 V +4586(1)S +2340 V +4586(1)S +2240 V +4586(1)S +2140 V +4586(1)S +2040 V +4586(1)S +1940 V +4586(1)S +1840 V +4586(1)S +1740 V +4586(1)S +1640 V +4586(1)S +1540 V +4586(1)S +1440 V +4586(1)S +3040 V +4808(1)S +2940 V +4808(1)S +2840 V +4808(1)S +2740 V +4808(1)S +2640 V +4808(1)S +2540 V +4808(1)S +2440 V +4808(1)S +2340 V +4808(1)S +2240 V +4808(1)S +2140 V +4808(1)S +2040 V +4808(1)S +1940 V +4808(1)S +1840 V +4808(1)S +1740 V +4808(1)S +1640 V +4808(1)S +1540 V +4808(1)S +1440 V +4808(1)S +3040 V +5113(1)S +2940 V +5113(1)S +2840 V +5113(1)S +2740 V +5113(1)S +2640 V +5113(1)S +2540 V +5113(1)S +2440 V +5113(1)S +2340 V +5113(1)S +2240 V +5113(1)S +2140 V +5113(1)S +2040 V +5113(1)S +1940 V +5113(1)S +1840 V +5113(1)S +1740 V +5113(1)S +1640 V +5113(1)S +1540 V +5113(1)S +1440 V +5113(1)S +3040 V +5418(1)S +2940 V +5418(1)S +2840 V +5418(1)S +2740 V +5418(1)S +2640 V +5418(1)S +2540 V +5418(1)S +2440 V +5418(1)S +2340 V +5418(1)S +2240 V +5418(1)S +2140 V +5418(1)S +2040 V +5418(1)S +1940 V +5418(1)S +1840 V +5418(1)S +1740 V +5418(1)S +1640 V +5418(1)S +1540 V +5418(1)S +1440 V +5418(1)S +3040 V +5773(1)S +2940 V +5773(1)S +2840 V +5773(1)S +2740 V +5773(1)S +2640 V +5773(1)S +2540 V +5773(1)S +2440 V +5773(1)S +2340 V +5773(1)S +2240 V +5773(1)S +2140 V +5773(1)S +2040 V +5773(1)S +1940 V +5773(1)S +1840 V +5773(1)S +1740 V +5773(1)S +1640 V +5773(1)S +1540 V +5773(1)S +1440 V +5773(1)S +3280 V +10 R +1260(Where)S +1675(NB)S +2459(=)S +2545(number)S +2880(of)S +2993(bytes)S +3234(expected)S +3618(or)S +3731(written)S +3400 V +1675(x)S +2459(=)S +2545(x)S +2625(position)S +2978(of)S +3091(operation)S +3498(in)S +3606(frame)S +3868(bu)S +3968 H + (f)show 10 -.5 mul h (f)show +10 R +4029(er)S +4136(coords)S +3520 V +1675(y)S +2459(=)S +2545(y)S +2625(position)S +2978(of)S +3091(operation)S +3498(in)S +3606(frame)S +3868(bu)S +3968 H + (f)show 10 -.5 mul h (f)show +10 R +4029(er)S +4136(coords)S +3640 V +1675(fr)S +2459(=)S +2545(frame)S +2807(number)S +3142(\(passed)S +3471(as)S +3584(bit\257ag)S +3870(\(i.e.)S +4055(1,)S +4160(2)S +4240(,4)S +4345(8,)S +4450(etc\))S +3760 V +1675(fb)S +2459(=)S +2545(frame)S +2807(bu)S +2907 H + (f)show 10 -.5 mul h (f)show +10 R +2968(er)S +3075(con\256g)S +3355(number)S +3690(\(zero)S +3924(indexed\))S +3880 V +1675(N)S +2459(=)S +2545(length)S +2825(of)S +2938(WCS)S +3185(string)S +4000 V +1675(wcs)S +2459(=)S +2545(WCS)S +2792(number)S +3127(\(usually)S +3479(zero\))S +4120 V +1675(Data)S +2459(=)S +2545(the)S +2697(number)S +3032(of)S +3145(bytes)S +3386(of)S +3499(data)S +3695(to)S +3803(be)S +3927(read)S +4128(or)S +4241(written)S +4554(following)S +4973(the)S +5125(header)S +5420(packet.)S +4360 V +1675(IIS_WRITE)S +2489(=)S +2575(0400000)S +4480 V +1675(IIS_READ)S +2489(=)S +2575(0100000)S +4600 V +1675(COMMAND)S +2489(=)S +2575(0100000)S +4720 V +1675(PACKED)S +2489(=)S +2575(0040000)S +4840 V +1675(IMC_SAMPLE)S +2489(=)S +2575(0040000)S +5080 V +1675(MEMORY)S +2489(=)S +2575(001)S +5200 V +1675(LUT)S +2489(=)S +2575(002)S +5320 V +1675(FEEDBACK)S +2489(=)S +2575(005)S +5440 V +1675(IMCURSOR)S +2489(=)S +2575(020)S +5560 V +1675(WCS)S +2489(=)S +2575(021)S +5800 V +1260(TID)S +1463(\256elds)S +1717(can)S +1892(be)S +2023(logically)S +2410(OR'd)S +2670(with)S +2886(the)S +3046(PACKED)S +3484(\257ag)S +3672(indicating)S +4110(the)S +4270(number)S +4613(of)S +4734(data)S +4938(bytes)S +5187(is)S +5292(exactly)S +5920 V +10 I +1260(thingct)S +10 R +1570(bytes)S +1813(long,)S +2048(otherwise)S +10 I +2468(thingct)S +10 R +2778(must)S +3005(be)S +3131(speci\256ed)S +3518(as)S +3632(half)S +3818(the)S +3971(number)S +4307(of)S +4421(data)S +4618(bytes.)S +4915(In)S +5029(a)S +5104(cursor)S +5384(read,)S +6040 V +1260(if)S +1353(the)S +1508(IIS_READ)S +1985(\257ag)S +2168(is)S +2268(OR'd)S +2523(with)S +2734(IMC_SAMPLE)S +3401(the)S +3556(logical)S +3861(cursor)S +4143(position)S +4499(\(i.e.)S +4717(the)S +4872(last)S +5044(value)S +5293(read)S +5497(or)S +6160 V +1260(set\))S +1445(is)S +1552(returned)S +1924(immediately,)S +2489(otherwise)S +2917(the)S +3079(server)S +3362(will)S +3558(wait)S +3770(for)S +3926(a)S +4010(keystroke)S +4438(to)S +4556(be)S +4690(hit)S +4836(before)S +5130(returning)S +5536(a)S +6280 V +1260(string)S +1519(containing)S +1972(the)S +2125(\(x,y\))S +2347(position,)S +2727(wcs)S +2914(of)S +3029(the)S +3183(read,)S +3411(and)S +3587(the)S +3741(keystroke.)S +4216(When)S +4486(setting)S +4785(the)S +4939(frame)S +5203(you)S +5385(must)S +6400 V +1260(send)S +1473(a)S +1547(short)S +1777(integer)S +2084(in)S +2192(the)S +2344(data)S +2540(containing)S +2992(the)S +3144(frame)S +3406(selected.)S +6688 V +9 B +900(ISM)S +1097(COMMUNICATIONS)S +6808 V +10 R +1260(The)S +1457(ISM)S +1677(\(Image)S +2001(Support)S +2360(Module\))S +2746(can)S +2926(be)S +3062(any)S +3248(external)S +3611(task)S +3814(which)S +4100(connects)S +4491(to)S +4611(XImtool)S +4993(over)S +5213(a)S +5300(socket.)S +6928 V +1260(Communications)S +1974(are)S +2125(limited)S +2439(to)S +2547(simple)S +2844(null-terminated)S +3490(text)S +3670(strings.)S +4022(In)S +4135(most)S +4360(cases)S +4600(these)S +4835(strings)S +5132(are)S +5283(just)S +5458(the)S +7048 V +1260(standard)S +1642(OBM)S +1914(messages)S +2335(sent)S +2540(to)S +2663(XImtool)S +3047(objects)S +3375(but)S +3548(can)S +3731(also)S +3937(include)S +4276(Tcl)S +4454(callback)S +4831(code)S +5064(\(either)S +5369(ISM-)S +7168 V +1260(speci\256c)S +1609(callbacks,)S +2049(procedures)S +2530(which)S +2818(can)S +3000(be)S +3137(added)S +3418(to)S +3539(the)S +3704(callback)S +4079(list)S +4245(for)S +4404(existing)S +4764(XImtool)S +5146(objects,)S +5497(or)S +7288 V +1260(even)S +1478(new)S +1674(GUI)S +1881(code)S +2099(to)S +2207(create)S +2474(panels)S +2759(and)S +2933(new)S +3129(objects\).)S +7768 V +900(X11IRAF Project)S +2703(Last change: 12 Aug 2001)S +5480(24)S +7920 V +EP +%%Page: 25 26 +BP +/slant 0 def +/height 1.000000 def +10 R +10 R +480 V +900(XIMTOOL)S +1376(\()S +1425(1)S +1491(\))S +2787(USER COMMANDS )S +4956(XIMTOOL)S +5432(\()S +5481(1)S +5547(\))S +960 V +9 B +1080(ISM)S +1277(SOCKET)S +1679(CONNECTION)S +1080 V +10 R +1260(The)S +1482(ISM)S +1727(\256rst)S +1950(requests)S +2344(a)S +2455(connection)S +2960(to)S +3105(XImtool)S +3511(on)S +3678(a)S +3789(dedicated)S +4238(socket)S +4561(whose)S +4884(default)S +5229(value)S +5513(is)S +1200 V +1260("/tmp/.ISM%d",)S +1953(where)S +2234(the)S +2393('%d')S +2629(is)S +2733(replaced)S +3107(by)S +3244(the)S +3403(userid)S +3684(allowing)S +4071(multiple)S +4442(users)S +4684(on)S +4821(a)S +4902(machine)S +5277(to)S +5392(have)S +1320 V +1260(independent)S +1778(sockets.)S +2157(The)S +2343(XImtool)S +2713('ism_addr')S +3182(resource)S +3550(or)S +3664("-ismdev")S +4099(command-line)S +4707(option)S +4994(can)S +5163(be)S +5288(used)S +5502(to)S +1440 V +1260(change)S +1585(this)S +1773(address,)S +2140(a)S +2227(value)S +2486(of)S +2612('none')S +2915(will)S +3114(disable)S +3440(ISM)S +3661(communications.)S +4420(The)S +4618(socket)S +4916(may)S +5130(also)S +5333(be)S +5469(set)S +1560 V +1260(with)S +1468(an)S +1592(ISMDEV)S +2005(environment)S +2540(variable)S +2891(which)S +3165(will)S +3351(override)S +3713(the)S +3865(resource)S +4232(or)S +4345(command-line)S +4952(options.)S +1800 V +1260(Once)S +1502(a)S +1578(connection)S +2048(request)S +2368(is)S +2467(received,)S +2891(XImtool)S +3262(replies)S +3560(with)S +3770(a)S +3846(message)S +4217(telling)S +4506(the)S +4661(ISM)S +4872(to)S +4983(reconnect)S +5403(on)S +5536(a)S +1920 V +1260(di)S +1338 H + (f)show 10 -.5 mul h (f)show +10 R +1399(erent)S +1629(socket,)S +1940(it)S +2027(then)S +2229(frees)S +2452(the)S +2604(initial)S +2868(connection)S +3336(allowing)S +3716(multiple)S +4080(other)S +4315(ISMs)S +4562(to)S +4670(request)S +4988(their)S +5201(own)S +5403(con-)S +2040 V +1260(nection.)S +1652(The)S +1850(communications)S +2554(between)S +2929(XImtool)S +3311(and)S +3499(the)S +3665(ISM)S +3887(are)S +4052(carried)S +4372(out)S +4544(entirely)S +4893(over)S +5114(this)S +5303(second)S +2160 V +1260(negotiated)S +1723(socket.)S +2079(Once)S +2335(connected,)S +2810(the)S +2978(ISM)S +3202(appears)S +3552(as)S +3681(just)S +3872(another)S +4217(named)S +4529(object)S +4819(which)S +5109(can)S +5293(receive)S +2280 V +1260(OBM)S +1518(messages.)S +2568 V +9 B +1080(COMMUNICATIONS)S +1987(PROTOCOL)S +2688 V +10 R +1260(Messages)S +1679(from)S +1904(the)S +2057(ISM)S +2266(are)S +2418(written)S +2732(to)S +2841(the)S +2994(connection)S +3463(socket)S +3749(and)S +3924(must)S +4150(be)S +4275(preceeded)S +4709(by)S +4841(one)S +5017(of)S +5132(the)S +5286(follow-)S +2808 V +1260(ing)S +1418(keywords:)S +2976 V +10 B +1620(callback)S +10 R +2370(Negotiate)S +2788(a)S +2862(connection)S +3330(on)S +3460(another)S +3789(socket)S +3144 V +10 B +1620(ready)S +10 R +2370(Client)S +2645(is)S +2742(ready)S +2993(to)S +3101(begin)S +3353(processing)S +3312 V +10 B +1620(quit)S +10 R +2370(Client)S +2645(is)S +2742(shutting)S +3095(down)S +3347(and)S +3521(disconnecting)S +3480 V +10 B +1620(send)S +10 R +2370(Send)S +2600(a)S +2674(message)S +3042(to)S +3150(another)S +3479(object)S +3816 V +1260(Where)S +1555(messages)S +1962(are)S +2113(of)S +2226(the)S +2378(form:)S +3984 V +10 B +1620(connect)S +1977(<)S +10 I +2034(name)S +10 B +2250(>)S +10 R +3120(Request)S +3472(a)S +3546(connection)S +4014(for)S +4160(the)S +4312(<)S +10 I +4368(name)S +10 R +4584(>)S +4670(ISM)S +4152 V +10 B +1620(ready)S +1894(<)S +10 I +1951(name)S +10 B +2167(>)S +10 R +3120(Reconnection)S +3720(request)S +4060(for)S +4228(the)S +4402(<)S +10 I +4458(name)S +10 R +4674(>)S +4782(ISM)S +5012(on)S +5164(negotiated)S +4272 V +3120(socket,)S +3430(ISM)S +3638(is)S +3735(ready)S +3986(to)S +4094(processing.)S +4440 V +10 B +1620(send)S +1845(<)S +10 I +1902(obj)S +10 B +2030(>)S +2117('{')S +2252(<)S +10 I +2309(msg)S +10 B +2470(>)S +2557('}')S +10 R +3120(Send)S +3352(<)S +10 I +3408(msg)S +10 R +3569(>)S +3657(to)S +3767(the)S +3921(named)S +4219(<)S +10 I +4275(obj)S +10 R +4403(>.)S +4546(The)S +4733(message)S +5104(may)S +5309(be)S +5436(any)S +4560 V +3120(valid)S +3366(string)S +3640(that)S +3835(will)S +4036(be)S +4175(understood)S +4664(by)S +4809(the)S +4976(recipient.)S +5425(The)S +4680 V +3120(object)S +3394(may)S +3596(be)S +3720(any)S +3894(object)S +4168(in)S +4276(the)S +4428(GUI)S +4635(or)S +4748(OBM)S +5006(\(see)S +5196(below\).)S +4848 V +10 B +1620(quit)S +10 R +3120(ISM)S +3341(is)S +3451(shutting)S +3817(down.)S +4107(The)S +4306(named)S +4616(is)S +4727(determined)S +5220(from)S +5458(the)S +4968 V +3120(communications)S +3865(channel,)S +4284(ISM)S +4546(is)S +4697(responsible)S +5236(for)S +5436(any)S +5088 V +3120(cleanup)S +3460(of)S +3573(it's)S +3731(callbacks)S +4132(before)S +4416(issuing)S +4730(the)S +4882(shutdown.)S +5328 V +1260(All)S +1420(messages)S +1829(must)S +2056(be)S +2182(null-terminated.)S +2885(XImtool)S +3256(will)S +3445(bu)S +3545 H + (f)show 10 -.5 mul h (f)show +10 R +3606(er)S +3716(the)S +3871(text)S +4054(until)S +4271(a)S +4348(complete)S +4747(message)S +5118(is)S +5218(received.)S +5448 V +1260(Once)S +1500(an)S +1624(ISM)S +1832(client)S +2084(has)S +2247(delivered)S +2648(a)S +2722(QUIT)S +2990(message)S +3358(no)S +3488(further)S +3789(messages)S +4196(will)S +4382(be)S +4506(sent)S +4697(the)S +4849(that)S +5029(ISM.)S +5688 V +1260(In)S +1384(OBM)S +1653(terminology)S +2183(the)S +2346(ISM)S +2565(is)S +2673(a)S +2758(named)S +3065(Client)S +3351(class)S +3586(object,)S +3896(where)S +4180(the)S +4343(name)S +4600(is)S +4708(set)S +4860(in)S +4979(the)S +5142(connection)S +5808 V +1260(request.)S +1637(Messages)S +2058(sent)S +2252(to)S +2363(the)S +2518(ISM)S +2729(should)S +3029(use)S +3195(this)S +3373(name,)S +3647(messages)S +4057(sent)S +4251(to)S +4362("client")S +4699(are)S +4853(still)S +5037(interpreted)S +5502(to)S +5928 V +1260(mean)S +1506(the)S +1658(XImtool)S +2027(client.)S +6168 V +1260(The)S +1450(content)S +1779(of)S +1897(messages)S +2309(delivered)S +2715(to)S +2828(the)S +2985(ISM)S +3198(are)S +3354(totally)S +3645(free-form)S +4061(and)S +4240(may)S +4447(contain)S +4776(any)S +4955(text)S +5141(the)S +5299(ISM)S +5513(is)S +6288 V +1260(expected)S +1644(to)S +1752(understand.)S +6576 V +9 B +1080(GUI)S +1277(OBJECTS)S +6696 V +10 R +1260(While)S +1548(the)S +1714(ISM)S +1936(can)S +2118(send)S +2345(a)S +2433(message)S +2815(to)S +2938(any)S +3127(object)S +3416(in)S +3539(the)S +3706(task,)S +3937(there)S +4181(is)S +4293(a)S +4382(GUI)S +4604(Parameter)S +5053(object)S +5342(called)S +6816 V +1260('ism_msg')S +1723(designed)S +2113(especially)S +2547(to)S +2660(process)S +2994(messages)S +3406(from)S +3634(the)S +3790(ISM.)S +4057(The)S +4246(callback)S +4612(in)S +4724(the)S +4880(GUI)S +5091(is)S +5192(expecting)S +6936 V +1260(a)S +1334(message)S +1702(beginning)S +2132(with)S +2340(one)S +2514(of)S +2627(the)S +2779(following)S +3198(keywords:)S +7104 V +10 B +1620(source)S +10 R +2370(Source)S +2677(message)S +3045(text)S +3225(as)S +3338(Tcl)S +3501(code)S +7272 V +10 B +1620(alert)S +10 R +2370(Message)S +2749(contains)S +3112(error)S +3335(text)S +3515(to)S +3623(be)S +3747(displayed)S +4160(in)S +4268(the)S +4420(GUI)S +4627('alert')S +4900(box)S +7752 V +900(X11IRAF Project)S +2703(Last change: 12 Aug 2001)S +5480(25)S +7920 V +EP +%%Page: 26 27 +BP +/slant 0 def +/height 1.000000 def +10 R +10 R +480 V +900(XIMTOOL)S +1376(\()S +1425(1)S +1491(\))S +2787(USER COMMANDS )S +4956(XIMTOOL)S +5432(\()S +5481(1)S +5547(\))S +960 V +10 B +1620(deliver)S +10 R +2370(Message)S +2750(text)S +2931(should)S +3229(be)S +3354(passed)S +3651(to)S +3760(a)S +3835(callback)S +4198(routine)S +4512(speci\256c)S +4848(to)S +4957(that)S +5138(ISM.)S +5402(This)S +1080 V +2370(processing)S +2844(callback)S +3223(may)S +3442(have)S +3676(been)S +3910(previously)S +4378(uploaded.)S +4845(The)S +5046(message)S +5430(text)S +1200 V +2370(may)S +2572(be)S +2696(any)S +2870(form)S +3094(the)S +3246(processing)S +3703(callback)S +4065(is)S +4162(expected)S +4546(to)S +4654(understand.)S +1368 V +10 B +1620(info)S +10 R +2370(Message)S +2798(text)S +3027(is)S +3173(status)S +3480(output)S +3816(intended)S +4240(for)S +4436(the)S +4638(XImtool)S +5057('info')S +5364(panel)S +1488 V +2370(\(connect/disconnect)S +3198(requests,)S +3580(etc\))S +1728 V +1260(In)S +1373(all)S +1503(cases)S +1743(the)S +1895(message)S +2263(is)S +2360(expected)S +2744(to)S +2852(be)S +2976(of)S +3089(the)S +3241(form)S +1968 V +1525(<)S +10 I +1581(cmd)S +10 R +1747(>)S +1833(<)S +10 I +1889(ism_name)S +10 R +2294(>)S +2380([)S +2443(<)S +10 I +2499(arg1)S +10 R +2688(>)S +2774(<)S +10 I +2830(arg2)S +10 R +3019(>)S +3105(<...>)S +3322(])S +2208 V +1260(where)S +1539()S +1859(is)S +1962(one)S +2142(of)S +2261(the)S +2419(above)S +2693(keywords,)S +3142()S +3701(is)S +3804(the)S +3963(name)S +4216(of)S +4336(the)S +4495(ISM)S +4710(sending)S +5058(the)S +5217(message.)S +2328 V +1260(The)S +1447(remainder)S +1883(of)S +1998(the)S +2152(message)S +2522(is)S +2621(passed)S +2919(as)S +3034(an)S +3160('argv')S +3435(list)S +3590(to)S +3700(the)S +3854(processing)S +4313(callback)S +4677(uploaded)S +5075(for)S +5223(the)S +5377(ISM.)S +2448 V +1260(The)S +1445(ISM)S +1653(is)S +1750(responsible)S +2235(for)S +2381(formatting)S +2833(these)S +3068(messages.)S +2856 V +9 B +900(ENVIRONMENT)S +2976 V +10 B +1260(HOME)S +10 R +2760(Speci\256es)S +3151(user)S +3347(login)S +3583(directory)S +3084 V +10 B +1260(DISPLAY)S +10 R +2760(Speci\256es)S +3151(which)S +3425(display)S +3744(screen)S +4028(to)S +4136(use)S +3192 V +10 B +1260(IMTOOLRC)S +1857(or)S +1981(imtoolrc)S +10 R +2760(Frame)S +3045(bu)S +3145 H + (f)show 10 -.5 mul h (f)show +10 R +3206(er)S +3313(con\256guration)S +3876(\256le)S +3300 V +10 B +1260(ISMDEV)S +10 R +2760(ISM)S +2968(Connection)S +3459(socket)S +3588 V +10 B +1260(DEBUG_IIS)S +10 R +2760(Debug)S +3056(IIS)S +3208(communications)S +3899(packets)S +3696 V +10 B +1260(DEBUG_ISM)S +10 R +2760(Debug)S +3056(ISM)S +3264(communications)S +3955(packets)S +3804 V +10 B +1260(DEBUG_MAPPINGS)S +10 R +2760(Debug)S +3056(WCS)S +3303(image)S +3577(mappings)S +4032 V +9 B +900(FILES)S +4152 V +10 B +1260(/usr/local/lib/imtoolrc)S +10 R +2760(Default)S +3089(frame)S +3351(bu)S +3451 H + (f)show 10 -.5 mul h (f)show +10 R +3512(er)S +3619(con\256guration)S +4182(\256le)S +4260 V +10 B +1260(/usr/local/lib/ximprint.cfg)S +10 R +2760(Default)S +3089(printer)S +3385(con\256guration)S +3948(\256le)S +4368 V +10 B +1260(/usr/local/lib/imtoolcmap)S +10 R +2760(Default)S +3089(colormap)S +3496(directory)S +4476 V +10 B +1260(/dev/imt1i)S +10 R +2760(Default)S +3089(input)S +3325(display)S +3644(\256fo)S +4584 V +10 B +1260(/dev/imt1o)S +10 R +2760(Default)S +3089(output)S +3375(display)S +3694(\256fo)S +4692 V +10 B +1260(/tmp/.IMT%d)S +10 R +2760(Default)S +3089(unix)S +3297(display)S +3616(socket)S +4800 V +10 B +1260(/tmp/.ISM%d)S +10 R +2760(Default)S +3089(unix)S +3297(ISM)S +3505(connection)S +3973(socket)S +5028 V +9 B +900(BUGS)S +5148 V +10 R +1260(Users)S +1517(should)S +1814(report)S +2082(bugs)S +2301(to)S +10 I +2409(iraf@noao.edu)S +10 R +3015(.)S +5436 V +9 B +900(SEE)S +1112(ALSO)S +5556 V +10 R +1260(xgterm\(1\),)S +1714(xtapemon\(1\))S +5844 V +9 B +900(COPYRIGHT)S +5964 V +10 R +1260(Copyright\(c\))S +1806(1986)S +2036(Association)S +2538(of)S +2651(Universities)S +3164(for)S +3310(Research)S +3705(in)S +3813(Astronomy)S +4293(Inc.)S +7680 V +900(X11IRAF Project)S +2703(Last change: 12 Aug 2001)S +5480(26)S +7920 V +EP +%%Trailer +%%DocumentFonts: Times-Roman Times-Bold Times-Italic Courier Symbol Troff +%%Pages: 27 + \ No newline at end of file diff --git a/vendor/x11iraf/ximtool/zscale.c b/vendor/x11iraf/ximtool/zscale.c new file mode 100644 index 00000000..b516a5ef --- /dev/null +++ b/vendor/x11iraf/ximtool/zscale.c @@ -0,0 +1,532 @@ +#include +#include + +/* + * ZSCALE -- Compute the optimal Z1, Z2 (range of greyscale values to be + * displayed) of an image. For efficiency a statistical subsample of an image + * is used. The pixel sample evenly subsamples the image in x and y. The + * entire image is used if the number of pixels in the image is smaller than + * the desired sample. + * + * The sample is accumulated in a buffer and sorted by greyscale value. + * The median value is the central value of the sorted array. The slope of a + * straight line fitted to the sorted sample is a measure of the standard + * deviation of the sample about the median value. Our algorithm is to sort + * the sample and perform an iterative fit of a straight line to the sample, + * using pixel rejection to omit gross deviants near the endpoints. The fitted + * straight line is the transfer function used to map image Z into display Z. + * If more than half the pixels are rejected the full range is used. The slope + * of the fitted line is divided by the user-supplied contrast factor and the + * final Z1 and Z2 are computed, taking the origin of the fitted line at the + * median value. + */ + +#define MIN_NPIXELS 5 /* smallest permissible sample */ +#define MAX_REJECT 0.5 /* max frac. of pixels to be rejected */ +#define GOOD_PIXEL 0 /* use pixel in fit */ +#define BAD_PIXEL 1 /* ignore pixel in all computations */ +#define REJECT_PIXEL 2 /* reject pixel after a bit */ +#define KREJ 2.5 /* k-sigma pixel rejection factor */ +#define MAX_ITERATIONS 5 /* maximum number of fitline iterations */ +#define INDEF 0 + +#define ZSC_DBG 0 + +#undef max +#define max(a,b) ((a) > (b) ? (a) : (b)) +#undef min +#define min(a,b) ((a) < (b) ? (a) : (b)) +#undef mod +#define mod(a,b) ((a) % (b)) +#undef nint +#define nint(a) ((int)(a + 0.5)) +#undef abs +#define abs(a) ((a) >= 0 ? (a) : -(a)) + + +static void flattenData(), subSample(); +static int sampleImage(), fitLine(), floatCompare(); +static int rejectPixels(), computeSigma(); + + + +/* ZSCALE -- Sample the image and compute optimal Z1 and Z2 values. + */ + +void +zscale (im, nx, ny, bitpix, z1, z2, contrast, opt_size, len_stdline) + +char *im; /* image data to be sampled */ +int nx, ny; /* image dimensions */ +int bitpix; /* bits per pixel */ +float *z1, *z2; /* output min and max greyscale values */ +float contrast; /* adj. to slope of transfer function */ +int opt_size; /* desired number of pixels in sample */ +int len_stdline; /* optimal number of pixels per line */ +{ + register int npix, minpix, ngoodpix, center_pixel, ngrow; + float zmin, zmax, median; + float zstart, zslope; + float *sample, *left; + + /* Subsample the image. */ + npix = sampleImage(im, bitpix, &sample, nx, ny, opt_size, len_stdline); + + /* Sort the sample, compute the minimum, maximum, and median pixel + * values. + */ + qsort (sample, npix, sizeof (float), floatCompare); + zmin = *sample; + zmax = *(sample+npix-1); + + /* The median value is the average of the two central values if there + * are an even number of pixels in the sample. + */ + center_pixel = max (1, (npix + 1) / 2); + left = &(sample[center_pixel - 1]); + if (mod (npix, 2) == 1 || center_pixel >= npix) + median = *left; + else + median = (*left + *(left+1)) / 2; + + /* Fit a line to the sorted sample vector. If more than half of the + * pixels in the sample are rejected give up and return the full range. + * If the user-supplied contrast factor is not 1.0 adjust the scale + * accordingly and compute Z1 and Z2, the y intercepts at indices 1 and + * npix. + */ + minpix = max (MIN_NPIXELS, (int) (npix * MAX_REJECT)); + ngrow = max (1, nint (npix * .01)); + ngoodpix = fitLine (sample, npix, &zstart, &zslope, + KREJ, ngrow, MAX_ITERATIONS); + + if (ngoodpix < minpix) { + *z1 = zmin; + *z2 = zmax; + } else { + if (contrast > 0) + zslope = zslope / contrast; + *z1 = max (zmin, median - (center_pixel - 1) * zslope); + *z2 = min (zmax, median + (npix - center_pixel) * zslope); + } + + if (ZSC_DBG) { + printf ("\tzmin=%g zmax=%g\tleft=%g median=%g\n", + zmin, zmax, *left, median); + printf ("\tminpix=%d ngrow=%d ngood=%d\n", minpix,ngrow,ngoodpix); + printf ("\tzstart=%g zslope=%g\n\tz1=%g z2=%g\n", + zstart, zslope, *z1, *z2); + } + + /* Clean up. */ + free ((float *)sample); +} + + +/* sampleImage -- Extract an evenly gridded subsample of the pixels from + * a two-dimensional image into a one-dimensional vector. + */ + +static int +sampleImage (im, bitpix, sample, nx, ny, optimal_size, len_stdline) + +char *im; /* image to be sampled */ +int bitpix; /* bits per pixel in image */ +float **sample; /* output vector containing the sample */ +int nx, ny; /* image dimensions */ +int optimal_size; /* desired number of pixels in sample */ +int len_stdline; /* optimal number of pixels per line */ +{ + register int i; + int ncols, nlines, col_step, line_step, maxpix, line; + int opt_npix_per_line, npix_per_line, npix = 0; + int opt_nlines_in_sample, min_nlines_in_sample, max_nlines_in_sample; + float *op, *row; + int *ipix; + float *fpix; + double *dpix; + short *spix; + char *bpix; + + + ncols = nx; + nlines = ny; + + /* Compute the number of pixels each line will contribute to the sample, + * and the subsampling step size for a line. The sampling grid must + * span the whole line on a uniform grid. + */ + opt_npix_per_line = max (1, min (ncols, len_stdline)); + col_step = max (2, (ncols + opt_npix_per_line-1) / opt_npix_per_line); + npix_per_line = max (1, (ncols + col_step-1) / col_step); + + /* Compute the number of lines to sample and the spacing between lines. + * We must ensure that the image is adequately sampled despite its + * size, hence there is a lower limit on the number of lines in the + * sample. We also want to minimize the number of lines accessed when + * accessing a large image, because each disk seek and read is ex- + * pensive. The number of lines extracted will be roughly the sample + * size divided by len_stdline, possibly more if the lines are very + * short. + */ + min_nlines_in_sample = max (1, optimal_size / len_stdline); + opt_nlines_in_sample = max(min_nlines_in_sample, min(nlines, + (optimal_size + npix_per_line-1) / npix_per_line)); + line_step = max (2, nlines / (opt_nlines_in_sample)); + max_nlines_in_sample = (nlines + line_step-1) / line_step; + + /* Allocate space for the output vector. Buffer must be freed by our + * caller. + */ + maxpix = npix_per_line * max_nlines_in_sample; + *sample = (float *) malloc (maxpix * sizeof (float)); + row = (float *) malloc (nx * sizeof (float)); + + /* Extract the vector. */ + op = *sample; + for (line = (line_step + 1)/2; line < nlines; line+=line_step) { + /* Load a row of float values from the image */ + switch (bitpix) { + case 8: + bpix = (char *) &im[(line-1) * nx * sizeof(char)]; + for (i=0; i < nx; i++) + row[i] = (float) bpix[i]; + break; + case 16: + spix = (short *) &im[(line-1) * nx * sizeof(short)]; + for (i=0; i < nx; i++) + row[i] = (float) spix[i]; + break; + case 32: + ipix = (int *) &im[(line-1) * nx * sizeof(int)]; + for (i=0; i < nx; i++) + row[i] = (float) ipix[i]; + break; + case -32: + fpix = (float *) &im[(line-1) * nx * sizeof(float)]; + for (i=0; i < nx; i++) + row[i] = (float) fpix[i]; + break; + case -64: + dpix = (double *) &im[(line-1) * nx * sizeof(double)]; + for (i=0; i < nx; i++) + row[i] = (float) dpix[i]; + break; + } + + subSample (row, op, npix_per_line, col_step); + op += npix_per_line; + npix += npix_per_line; + if (npix > maxpix) + break; + } + + free ((float *)row); + return (npix); +} + + +/* subSample -- Subsample an image line. Extract the first pixel and + * every "step"th pixel thereafter for a total of npix pixels. + */ + +static void +subSample (a, b, npix, step) +float *a; +float *b; +int npix, step; +{ + register int ip, i; + + if (step <= 1) + memmove (b, a, npix); + else { + ip = 0; + for (i=0; i < npix; i++) { + b[i] = a[ip]; + ip += step; + } + } +} + + +/* fitLine -- Fit a straight line to a data array of type real. This is + * an iterative fitting algorithm, wherein points further than ksigma from the + * current fit are excluded from the next fit. Convergence occurs when the + * next iteration does not decrease the number of pixels in the fit, or when + * there are no pixels left. The number of pixels left after pixel rejection + * is returned as the function value. + */ + +static int +fitLine (data, npix, zstart, zslope, krej, ngrow, maxiter) + +float *data; /* data to be fitted */ +int npix; /* number of pixels before rejection */ +float *zstart; /* Z-value of pixel data[1] (output) */ +float *zslope; /* dz/pixel (output) */ +float krej; /* k-sigma pixel rejection factor */ +int ngrow; /* number of pixels of growing */ +int maxiter; /* max iterations */ +{ + int i, ngoodpix, last_ngoodpix, minpix, niter; + double xscale, z0, dz, o_dz, x, z, mean, sigma, threshold; + double sumxsqr, sumxz, sumz, sumx, rowrat; + float *flat, *normx; + char *badpix; + + if (npix <= 0) + return (0); + else if (npix == 1) { + *zstart = data[1]; + *zslope = 0.0; + return (1); + } else + xscale = 2.0 / (npix - 1); + + /* Allocate a buffer for data minus fitted curve, another for the + * normalized X values, and another to flag rejected pixels. + */ + flat = (float *) malloc (npix * sizeof (float)); + normx = (float *) malloc (npix * sizeof (float)); + badpix = (char *) calloc (npix, sizeof(char)); + + /* Compute normalized X vector. The data X values [1:npix] are + * normalized to the range [-1:1]. This diagonalizes the lsq matrix + * and reduces its condition number. + */ + for (i=0; i 0) { + rowrat = sumx / sumxsqr; + z0 = (sumz - rowrat * sumxz) / (ngoodpix - rowrat * sumx); + dz = (sumxz - z0 * sumx) / sumxsqr; + } + + if (ngoodpix >= last_ngoodpix || ngoodpix < minpix) + break; + } + + if (ZSC_DBG) { printf ("\tz0=%g dz=%g rowrat=%g\n", z0, dz, rowrat); } + + /* Transform the line coefficients back to the X range [1:npix]. */ + *zstart = z0 - dz; + *zslope = dz * xscale; + if (abs(*zslope) < 0.01) + *zslope = o_dz * xscale; + + free ((float *)flat); + free ((float *)normx); + free ((char *)badpix); + return (ngoodpix); +} + + +/* flattenData -- Compute and subtract the fitted line from the data array, + * returned the flattened data in FLAT. + */ + +static void +flattenData (data, flat, x, npix, z0, dz) +float *data; /* raw data array */ +float *flat; /* flattened data (output) */ +float *x; /* x value of each pixel */ +int npix; /* number of pixels */ +double z0, dz; /* z-intercept, dz/dx of fitted line */ +{ + register int i; + + for (i=0; i < npix; i++) + flat[i] = data[i] - (x[i] * dz + z0); +} + + +/* computeSigma -- Compute the root mean square deviation from the + * mean of a flattened array. Ignore rejected pixels. + */ + +static int +computeSigma (a, badpix, npix, mean, sigma) + +float *a; /* flattened data array */ +char *badpix; /* bad pixel flags (!= 0 if bad pixel) */ +int npix; +double *mean, *sigma; /* (output) */ +{ + float pixval; + int i, ngoodpix = 0; + double sum = 0.0, sumsq = 0.0, temp; + + /* Accumulate sum and sum of squares. */ + for (i=0; i < npix; i++) { + if (badpix[i] == GOOD_PIXEL) { + pixval = a[i]; + ngoodpix = ngoodpix + 1; + sum = sum + pixval; + sumsq = sumsq + pixval * pixval; + } + } + + /* Compute mean and sigma. */ + switch (ngoodpix) { + case 0: + *mean = INDEF; + *sigma = INDEF; + break; + case 1: + *mean = sum; + *sigma = INDEF; + break; + default: + *mean = sum / (double) ngoodpix; + temp = sumsq / (double) (ngoodpix-1) - + (sum*sum) / (double) (ngoodpix*(ngoodpix - 1)); + if (temp < 0) /* possible with roundoff error */ + *sigma = 0.0; + else + *sigma = sqrt (temp); + } + + return (ngoodpix); +} + + +/* rejectPixels -- Detect and reject pixels more than "threshold" greyscale + * units from the fitted line. The residuals about the fitted line are given + * by the "flat" array, while the raw data is in "data". Each time a pixel + * is rejected subtract its contributions from the matrix sums and flag the + * pixel as rejected. When a pixel is rejected reject its neighbors out to + * a specified radius as well. This speeds up convergence considerably and + * produces a more stringent rejection criteria which takes advantage of the + * fact that bad pixels tend to be clumped. The number of pixels left in the + * fit is returned as the function value. + */ + +static int +rejectPixels (data, flat, normx, badpix, npix, + sumxsqr, sumxz, sumx, sumz, threshold, ngrow) + +float *data; /* raw data array */ +float *flat; /* flattened data array */ +float *normx; /* normalized x values of pixels */ +char *badpix; /* bad pixel flags (!= 0 if bad pixel) */ +int npix; +double *sumxsqr, *sumxz, /* matrix sums */ + *sumx, *sumz; +double threshold; /* threshold for pixel rejection */ +int ngrow; /* number of pixels of growing */ +{ + int ngoodpix, i, j; + double residual, lcut, hcut; + double x, z; + + ngoodpix = npix; + lcut = -threshold; + hcut = threshold; + + for (i=0; i < npix; i++) { + if (badpix[i] == BAD_PIXEL) + ngoodpix = ngoodpix - 1; + else { + residual = flat[i]; + if (residual < lcut || residual > hcut) { + /* Reject the pixel and its neighbors out to the growing + * radius. We must be careful how we do this to avoid + * directional effects. Do not turn off thresholding on + * pixels in the forward direction; mark them for rejection + * but do not reject until they have been thresholded. + * If this is not done growing will not be symmetric. + */ + for (j=max(0,i-ngrow); j < min(npix,i+ngrow); j++) { + if (badpix[j] != BAD_PIXEL) { + if (j <= i) { + x = (double) normx[j]; + z = (double) data[j]; + *sumxsqr = *sumxsqr - (x * x); + *sumxz = *sumxz - z * x; + *sumx = *sumx - x; + *sumz = *sumz - z; + badpix[j] = BAD_PIXEL; + ngoodpix = ngoodpix - 1; + } else + badpix[j] = REJECT_PIXEL; + } + } + } + } + } + + return (ngoodpix); +} + + +static int +floatCompare (i,j) +float *i, *j; +{ + /* return ((int) (*i - *j + 0.5)); */ + return ((*i <= *j) ? -1 : 1); +} -- cgit