# HG changeset patch # User pantxo # Date 1393934861 -3600 # Node ID 2deed6538c726b1dbd5e64b1f8ab779c047bd339 # Parent ce144b2ab46c2567fe34849521a86c14da1e9fd7 Make some graphics factory defaults conform to Matlab values (bug #41770). * graphics.in.h: add "diplayname" property to image objects. * graphics.in.h: correct factory values of 'textmargin', 'surfacefacelighting', 'surfacexdata', 'surfaceydata', 'surfacezdata', 'surfacealphadata', 'surfacecdata', 'patchvertices', 'patchspecularstrength', 'patchfaces', 'imagealphadata', 'imagealphadatamapping', 'imagecdata', 'axesview', 'axescameraupvector'. * graphics.cc: create new static functions default_surface_xdata (void), default_surface_ydata (void), default_surface_zdata (void), default_surface_cdata (void), default_patch_faces (void), default_patch_vertices (void), default_axes_view (void), default_image_cdata (void) * libinterp/corefcn/octave-default-image.h: New file diff -r ce144b2ab46c -r 2deed6538c72 libinterp/corefcn/graphics.cc --- a/libinterp/corefcn/graphics.cc Thu Apr 10 00:08:36 2014 +0200 +++ b/libinterp/corefcn/graphics.cc Tue Mar 04 13:07:41 2014 +0100 @@ -58,6 +58,7 @@ #include "toplev.h" #include "txt-eng-ft.h" #include "unwind-prot.h" +#include "octave-default-image.h" // forward declarations static octave_value xget (const graphics_handle& h, const caseless_str& name); @@ -255,6 +256,77 @@ } static Matrix +default_image_cdata (void) +{ + Matrix m (64, 64, 0.0); + int i = 0; + for (int col = 0; col < 64; col++) + for (int row = 0; row < 64; row++) + { + m(col,row) = static_cast (default_im_data[i]); + i++; + } + + return m; +} + +static Matrix +default_surface_xdata (void) +{ + Matrix m (3, 3, 0.0); + for (int col = 0; col < 3; col++) + for (int row = 0; row < 3; row++) + m(row,col) = col+1; + + return m; +} + +static Matrix +default_surface_ydata (void) +{ + Matrix m (3, 3, 0.0); + for (int row = 0; row < 3; row++) + for (int col = 0; col < 3; col++) + m(row,col) = row+1; + + return m; +} + +static Matrix +default_surface_zdata (void) +{ + Matrix m (3, 3, 0.0); + for (int row = 0; row < 3; row++) + m(row,row) = 1.0; + return m; +} + +static Matrix +default_surface_cdata (void) +{ + return default_surface_zdata (); +} + +static Matrix +default_patch_faces (void) +{ + Matrix m (1, 3, 1.0); + m(1) = 2.0; + m(2) = 3.0; + return m; +} + +static Matrix +default_patch_vertices (void) +{ + Matrix m (3, 2, 0); + m(1) = 1.0; + m(3) = 1.0; + m(4) = 1.0; + return m; +} + +static Matrix default_axes_position (void) { Matrix m (1, 4, 0.0); @@ -274,6 +346,14 @@ } static Matrix +default_axes_view (void) +{ + Matrix m (1, 2, 0.0); + m(1) = 90.0; + return m; +} + +static Matrix default_axes_tick (void) { Matrix m (1, 6, 0.0); @@ -1237,7 +1317,7 @@ // check dimensional size constraints until a match is found for (std::list::const_iterator it = size_constraints.begin (); - ! xok && it != size_constraints.end (); ++it) + ! xok && it != size_constraints.end ();++it) { dim_vector itdims = (*it); diff -r ce144b2ab46c -r 2deed6538c72 libinterp/corefcn/graphics.in.h --- a/libinterp/corefcn/graphics.in.h Thu Apr 10 00:08:36 2014 +0200 +++ b/libinterp/corefcn/graphics.in.h Tue Mar 04 13:07:41 2014 +0100 @@ -3731,7 +3731,7 @@ radio_property camerapositionmode , "{auto}|manual" array_property cameratarget m , Matrix (1, 3, 0.0) radio_property cameratargetmode , "{auto}|manual" - array_property cameraupvector m , Matrix () + array_property cameraupvector m , Matrix (1, 3, 0.0) radio_property cameraupvectormode , "{auto}|manual" double_property cameraviewangle m , 10.0 radio_property cameraviewanglemode , "{auto}|manual" @@ -3770,7 +3770,7 @@ handle_property title SOf , gh_manager::make_graphics_handle ("text", __myhandle__, false, false, false) // FIXME: uicontextmenu should be moved here. radio_property units SU , "{normalized}|inches|centimeters|points|pixels|characters" - array_property view u , Matrix () + array_property view u , default_axes_view () radio_property xaxislocation u , "{bottom}|top|zero" color_property xcolor , color_values (0, 0, 0) radio_property xdir u , "{normal}|reverse" @@ -4356,7 +4356,7 @@ radio_property interpreter u , "{tex}|none|latex" radio_property linestyle , "{-}|--|:|-.|none" double_property linewidth , 0.5 - double_property margin , 1 + double_property margin , 2 array_property position smu , Matrix (1, 3, 0.0) double_property rotation mu , 0 text_label_property string u , "" @@ -4499,10 +4499,11 @@ // Programming note: Keep property list sorted if new ones are added. BEGIN_PROPERTIES (image) - array_property alphadata u , Matrix () - radio_property alphadatamapping al , "none|direct|{scaled}" - array_property cdata u , Matrix () + array_property alphadata u , Matrix (1, 1, 1.0) + radio_property alphadatamapping al , "{none}|direct|scaled" + array_property cdata u , default_image_cdata () radio_property cdatamapping al , "scaled|{direct}" + string_property displayname , "" radio_property erasemode , "{normal}|none|xor|background" row_vector_property xdata u , Matrix () row_vector_property ydata u , Matrix () @@ -4668,7 +4669,7 @@ double_radio_property facealpha , double_radio_property (1.0, radio_values ("flat|interp")) color_property facecolor , color_property (color_values (0, 0, 0), radio_values ("none|flat|interp")) radio_property facelighting , "{none}|flat|gouraud|phong" - array_property faces , Matrix () + array_property faces , default_patch_faces () array_property facevertexalphadata , Matrix () array_property facevertexcdata , Matrix () // FIXME: interpreter is not a property of a Matlab patch. @@ -4683,9 +4684,9 @@ radio_property normalmode , "{auto}|manual" double_property specularcolorreflectance , 1.0 double_property specularexponent , 10.0 - double_property specularstrength , 0.6 + double_property specularstrength , 0.9 array_property vertexnormals , Matrix () - array_property vertices , Matrix () + array_property vertices , default_patch_vertices () array_property xdata u , Matrix () array_property ydata u , Matrix () array_property zdata u , Matrix () @@ -4786,11 +4787,11 @@ // Programming note: Keep property list sorted if new ones are added. BEGIN_PROPERTIES (surface) - array_property alphadata u , Matrix () + array_property alphadata u , Matrix (1, 1, 1.0) radio_property alphadatamapping l , "none|direct|{scaled}" double_property ambientstrength , 0.3 radio_property backfacelighting , "unlit|lit|{reverselit}" - array_property cdata u , Matrix () + array_property cdata u , default_surface_cdata () radio_property cdatamapping al , "{scaled}|direct" string_property cdatasource , "" double_property diffusestrength , 0.6 @@ -4817,11 +4818,11 @@ double_property specularexponent , 10 double_property specularstrength , 0.9 array_property vertexnormals u , Matrix () - array_property xdata u , Matrix () + array_property xdata u , default_surface_xdata () string_property xdatasource , "" - array_property ydata u , Matrix () + array_property ydata u , default_surface_ydata () string_property ydatasource , "" - array_property zdata u , Matrix () + array_property zdata u , default_surface_zdata () string_property zdatasource , "" // hidden properties for limit computation diff -r ce144b2ab46c -r 2deed6538c72 libinterp/corefcn/octave-default-image.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/libinterp/corefcn/octave-default-image.h Tue Mar 04 13:07:41 2014 +0100 @@ -0,0 +1,281 @@ +/* + +Copyright (C) 2014 Pantxo Diribarne + +This file is part of Octave. + +Octave is free software; you can redistribute it and/or modify it +under the terms of the GNU General Public License as published by the +Free Software Foundation; either version 3 of the License, or (at your +option) any later version. + +Octave is distributed in the hope that it will be useful, but WITHOUT +ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +for more details. + +You should have received a copy of the GNU General Public License +along with Octave; see the file COPYING. If not, see +. + +*/ + +static char default_im_data[] = { + 31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31, + 31,31,31,31,31,31,20,20,20,20,20,20,21,21,21,21, + 31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31, + 31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31, + 31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31, + 31,31,31,20,20,20,20,20,20,20,20,20,20,20,21,21, + 21,21,21,21,31,31,31,31,31,31,31,31,31,31,31,31, + 31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31, + 31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31, + 31,20,20,20,20,20,20,20,20,20,20,20,20,20,20,21, + 21,21,21,21,21,21,21,31,31,31,31,31,31,31,31,31, + 31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31, + 31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,20, + 20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20, + 21,21,21,21,21,21,21,21,21,31,31,31,31,31,31,31, + 31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31, + 31,31,31,31,31,31,31,31,31,31,31,31,31,31,20,20, + 20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20, + 20,21,21,21,21,21,21,21,21,21,21,31,31,31,31,31, + 31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31, + 31,31,31,31,31,31,31,31,31,31,31,31,20,20,20,20, + 20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20, + 20,20,21,21,21,21,21,21,21,21,21,21,31,31,31,31, + 31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31, + 31,31,31,31,31,31,31,31,31,31,31,20,20,20,20,20, + 20,20,20,20,20,20,20,20,20,20,20,20,31,31,31,31, + 31,31,31,31,31,31,21,21,21,21,21,21,21,21,31,31, + 31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31, + 31,31,31,31,31,31,31,31,31,31,31,20,20,20,20,20, + 20,20,20,20,20,20,20,20,20,31,31,31,31,31,31,31, + 31,31,31,31,31,31,31,31,31,21,21,21,21,21,21,31, + 31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31, + 31,31,31,31,31,31,31,31,31,31,20,20,20,20,20,20, + 20,20,20,20,20,20,20,31,31,31,31,31,31,31,31,31, + 31,31,31,31,31,31,31,31,31,31,31,21,21,21,21,21, + 31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31, + 31,31,31,31,31,31,31,31,31,20,20,20,20,20,20,20, + 20,20,20,20,20,20,31,31,31,31,31,31,31,31,31,31, + 31,31,31,31,31,31,31,31,31,31,31,31,31,21,21,21, + 21,21,31,31,31,31,31,31,31,31,31,31,31,31,31,31, + 31,31,31,31,31,31,31,31,20,20,20,20,20,20,20,20, + 20,20,20,20,20,31,31,31,31,31,31,31,31,31,31,31, + 31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,63, + 49,49,49,49,49,49,49,49,31,31,31,31,31,31,31,31, + 31,31,31,31,31,31,31,31,20,20,20,20,20,20,20,20, + 20,20,20,20,31,31,31,31,31,31,31,31,31,31,31,31, + 31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,49, + 48,48,48,48,48,48,48,49,31,31,31,31,31,31,31,31, + 31,31,31,31,31,31,31,20,20,20,20,20,20,20,20,20, + 20,20,20,31,31,31,31,31,31,31,31,31,31,31,31,31, + 31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,49, + 48,47,47,47,47,47,47,48,31,31,31,31,31,31,31,31, + 31,31,31,31,31,31,31,19,20,20,20,20,20,20,20,20, + 20,20,31,31,31,31,31,31,31,31,31,31,31,31,31,31, + 31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,49, + 48,47,47,47,47,47,47,48,31,31,31,31,31,31,31,31, + 31,31,31,31,31,31,31,20,19,20,20,20,20,20,20,20, + 20,20,31,31,31,31,31,31,31,31,31,31,31,31,31,31, + 31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,49, + 48,47,47,47,47,47,47,48,31,31,31,31,31,31,31,31, + 31,31,31,31,31,31,19,19,19,19,20,20,20,20,20,20, + 20,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31, + 31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,49, + 48,47,47,47,47,47,47,48,31,31,31,31,31,31,31,31, + 31,31,31,31,31,31,19,19,19,19,19,20,20,20,20,20, + 20,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31, + 31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,49, + 48,47,47,47,47,47,47,48,31,31,31,31,31,31,31,31, + 31,31,31,31,31,31,19,19,19,19,19,19,19,20,20,20, + 19,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31, + 31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,49, + 48,47,47,47,47,47,48,48,63,31,31,31,31,31,31,31, + 31,31,31,31,31,31,19,19,19,19,19,19,20,19,20,20, + 31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31, + 31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,49, + 49,48,48,48,48,48,48,48,21,31,31,31,31,31,31,31, + 31,31,31,31,31,19,19,19,19,19,19,19,19,19,19,20, + 31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31, + 31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31, + 31,31,31,31,31,31,31,21,21,21,31,31,31,31,31,31, + 31,31,31,31,31,20,20,20,20,20,20,20,20,20,20,20, + 31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31, + 31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31, + 31,31,31,31,31,31,31,31,21,21,31,31,31,31,31,31, + 31,31,49,49,49,49,49,49,49,49,49,49,49,49,49,49, + 49,49,49,31,31,31,31,31,31,31,31,31,31,31,31,31, + 31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31, + 31,31,31,31,31,31,31,31,31,21,21,31,31,31,31,31, + 31,49,48,48,48,48,48,48,48,48,48,48,48,48,48,48, + 48,48,48,49,31,31,31,31,31,31,31,31,31,31,31,31, + 31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31, + 31,31,31,31,31,31,31,31,31,21,21,21,31,31,31,31, + 49,48,47,47,47,47,47,47,47,47,47,47,47,47,47,47, + 47,47,47,48,49,31,31,31,31,31,31,31,31,31,31,31, + 31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31, + 31,31,31,31,31,31,31,31,31,31,21,21,31,31,31,31, + 49,48,47,47,47,47,47,47,47,47,47,47,47,47,47,47, + 47,47,47,48,49,31,31,31,31,31,31,31,31,31,31,31, + 31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31, + 31,31,31,31,31,31,31,31,31,31,21,21,31,31,31,31, + 49,48,47,47,47,47,47,47,47,47,47,47,47,47,47,47, + 47,47,47,48,49,31,31,31,31,31,31,31,31,31,31,31, + 31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31, + 31,31,31,31,31,31,31,31,31,31,31,21,21,31,31,31, + 49,48,47,47,47,47,47,47,47,47,47,47,47,47,47,47, + 47,47,47,48,49,31,31,31,31,31,31,31,31,31,31,31, + 31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31, + 31,31,31,31,31,31,31,31,31,31,31,21,21,31,31,31, + 49,48,47,47,47,47,47,47,47,47,47,47,47,47,47,47, + 47,47,47,48,49,31,31,31,31,31,31,31,31,31,31,31, + 31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31, + 31,31,31,31,31,31,31,31,31,31,31,21,21,21,31,31, + 49,48,47,47,47,47,47,47,47,47,47,47,47,47,47,47, + 47,47,47,48,49,31,31,31,31,31,31,31,31,31,31,31, + 31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31, + 31,31,31,31,31,31,31,31,31,31,31,31,21,21,31,31, + 49,48,47,47,47,47,47,47,47,47,47,47,47,47,47,47, + 47,47,47,48,49,31,31,31,31,31,31,31,31,31,31,31, + 31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31, + 31,31,31,31,31,31,31,31,31,31,31,31,21,21,31,31, + 49,48,47,47,47,47,47,47,47,47,47,47,47,47,47,47, + 47,47,47,48,49,31,31,31,31,31,31,31,31,31,31,31, + 31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31, + 31,31,31,31,31,31,31,31,31,31,31,31,21,21,21,31, + 49,48,47,47,47,47,47,47,47,47,47,47,47,47,47,47, + 47,47,47,48,49,31,31,31,31,31,31,31,31,31,31,31, + 31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31, + 31,31,31,31,31,31,31,31,31,31,31,31,31,21,21,31, + 49,48,47,47,47,47,47,47,47,47,47,47,47,47,47,47, + 47,47,47,48,49,31,31,31,31,31,31,31,31,31,31,31, + 31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31, + 31,31,31,31,31,31,31,31,31,31,31,31,31,21,21,31, + 49,48,47,47,47,47,47,47,47,47,47,47,47,47,47,47, + 47,47,47,48,49,31,31,31,31,31,31,31,31,31,31,31, + 31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31, + 31,31,31,31,31,31,31,31,31,31,31,31,31,20,21,31, + 49,48,47,47,47,47,47,47,47,47,47,47,47,47,47,47, + 47,47,47,48,49,31,31,31,31,31,31,31,31,31,31,31, + 31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31, + 31,31,31,31,31,31,31,31,31,31,31,31,31,21,21,21, + 49,48,47,47,47,47,47,47,47,47,47,47,47,47,47,47, + 47,47,47,48,49,31,31,31,31,31,31,31,31,31,31,31, + 31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31, + 31,31,31,31,31,31,31,31,31,31,31,31,31,20,21,21, + 49,48,47,47,47,47,47,47,47,47,47,47,47,47,47,47, + 47,47,47,48,49,31,31,31,31,31,31,31,31,31,31,31, + 31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31, + 31,31,31,31,31,31,31,31,31,31,31,31,31,20,20,21, + 49,48,47,47,47,47,47,47,47,47,47,47,47,47,47,47, + 47,47,47,48,49,31,31,31,31,31,31,31,31,31,31,31, + 31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31, + 31,31,31,31,31,31,31,31,31,31,31,31,31,20,20,20, + 49,48,47,47,47,47,47,47,47,47,47,47,47,47,47,47, + 47,47,47,48,49,31,31,31,31,31,31,31,31,31,31,31, + 31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31, + 31,31,31,31,31,31,31,31,31,31,31,31,31,20,20,20, + 31,49,48,47,47,47,47,47,47,47,47,47,47,47,47,47, + 47,47,48,49,31,31,31,31,31,31,31,31,31,31,31,31, + 31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31, + 31,31,31,31,31,31,31,31,31,31,31,31,31,20,20,20, + 31,49,49,48,48,48,48,48,48,48,48,48,48,48,48,48, + 48,48,49,63,31,31,31,31,31,31,31,31,31,31,31,31, + 31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31, + 31,31,31,31,31,31,31,31,31,31,31,31,31,20,20,20, + 31,31,31,49,49,49,49,49,49,47,63,63,63,63,63,63, + 63,63,20,19,19,31,31,31,31,31,31,31,31,31,31,31, + 31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31, + 31,31,31,31,31,31,31,31,31,31,31,31,20,20,20,20, + 31,31,31,31,31,31,31,31,31,31,19,19,19,19,19,19, + 19,19,19,19,19,31,31,31,31,31,31,31,31,31,31,31, + 31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31, + 31,31,31,31,31,31,31,31,31,31,31,31,20,20,20,20, + 31,31,31,31,31,31,31,31,31,31,31,19,19,19,19,19, + 19,19,19,19,19,19,31,31,31,31,31,31,31,31,31,31, + 31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31, + 31,31,31,31,31,31,31,31,31,31,31,31,20,20,20,20, + 31,31,31,31,31,31,31,31,31,31,31,19,19,19,19,19, + 19,19,19,19,19,19,19,31,31,31,31,31,31,31,31,31, + 31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31, + 31,31,31,31,31,31,31,31,31,31,31,31,20,20,20,20, + 31,31,31,31,31,31,31,31,31,31,31,31,19,19,19,19, + 19,19,19,19,19,19,19,19,31,31,31,31,31,31,31,31, + 31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31, + 31,31,31,31,31,31,31,31,31,31,31,20,20,20,20,20, + 31,31,31,31,31,31,31,31,31,31,31,31,31,19,19,19, + 19,19,19,19,19,19,19,19,19,31,31,31,31,31,31,31, + 31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31, + 31,31,31,31,31,49,49,49,49,49,47,63,63,63,21,31, + 31,31,31,31,31,31,31,31,31,31,31,31,31,19,19,19, + 19,19,19,19,19,19,19,19,19,19,31,31,31,31,31,31, + 31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31, + 31,31,31,49,49,48,48,48,48,48,48,48,48,48,48,31, + 31,31,31,31,31,31,31,31,31,31,31,31,31,31,19,19, + 19,19,19,19,19,19,19,19,19,19,19,31,31,31,31,31, + 31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31, + 31,31,31,49,48,47,47,47,47,47,47,47,47,47,48,49, + 31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,19, + 19,19,19,19,19,19,19,19,19,19,19,19,31,31,31,31, + 31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31, + 31,31,31,49,47,47,47,47,47,47,47,47,47,47,48,48, + 31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31, + 19,19,19,19,19,19,19,19,19,19,19,19,19,31,31,31, + 31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31, + 31,31,31,49,47,47,47,47,47,47,47,47,47,47,48,49, + 31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31, + 31,19,19,19,19,19,19,19,19,19,19,19,19,19,19,31, + 31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31, + 31,31,31,49,47,47,47,47,47,47,47,47,47,47,48,49, + 31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31, + 31,31,19,19,19,19,19,19,19,19,19,19,19,19,19,19, + 31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31, + 31,31,31,49,47,47,47,47,47,47,47,47,47,47,48,49, + 31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31, + 31,31,31,19,19,19,19,19,19,19,19,19,19,19,19,19, + 19,19,19,31,31,31,31,31,31,31,31,31,31,31,31,31, + 31,31,31,49,47,47,47,47,47,47,47,47,47,47,48,49, + 31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31, + 31,31,31,31,19,19,19,19,19,19,19,19,19,19,19,19, + 19,19,19,19,19,31,31,31,31,31,31,31,31,31,31,31, + 31,19,20,49,47,47,47,47,47,47,47,47,47,47,48,49, + 31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31, + 31,31,31,31,31,19,19,19,19,19,19,19,19,19,19,19, + 19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19, + 19,20,20,49,47,47,47,47,47,47,47,47,47,47,48,49, + 31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31, + 31,31,31,31,31,31,18,19,19,19,19,19,19,19,19,19, + 19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19, + 19,19,20,49,47,47,47,47,47,47,47,47,47,47,48,48, + 31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31, + 31,31,31,31,31,31,31,19,19,19,19,19,19,19,19,19, + 19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19, + 19,20,20,49,48,47,47,47,47,47,47,47,47,47,48,49, + 31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31, + 31,31,31,31,31,31,31,31,31,19,19,19,19,19,19,19, + 19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19, + 19,19,20,63,48,48,48,48,48,48,48,48,48,48,49,31, + 31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31, + 31,31,31,31,31,31,31,31,31,31,19,19,19,19,19,19, + 19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19, + 19,19,19,20,21,63,63,63,48,49,49,49,49,49,31,31, + 31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31, + 31,31,31,31,31,31,31,31,31,31,31,31,19,19,19,19, + 19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19, + 19,19,19,19,19,20,31,31,31,31,31,31,31,31,31,31, + 31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31, + 31,31,31,31,31,31,31,31,31,31,31,31,31,31,19,19, + 19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19, + 19,19,19,19,19,31,31,31,31,31,31,31,31,31,31,31, + 31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31, + 31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31, + 31,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19, + 19,19,31,31,31,31,31,31,31,31,31,31,31,31,31,31, + 31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31, + 31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31, + 31,31,31,31,31,19,19,19,19,19,19,19,19,19,19,31, + 31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31 +}; +