summaryrefslogtreecommitdiff
path: root/legacy/evas/src/lib/engines
diff options
context:
space:
mode:
authorVincent Torri <vincent.torri@gmail.com>2012-11-04 11:51:42 +0000
committerVincent Torri <vincent.torri@gmail.com>2012-11-04 11:51:42 +0000
commitc15e9c6575c3b5f39ded167dda5259de3de96151 (patch)
tree5115d7ae3620af24c2bc094cd062575af7adeda9 /legacy/evas/src/lib/engines
parenta5ac6a987caec5a7f7596a25d0a065b9cc94c50c (diff)
merge: and now Evas
I've tested make -j 3 install and it works nicely I've tested expedite with software and opengl xlib, and it works. Not tested other engines, so please report any problems (engines or other) on the ML. TODO: examples and tests, I'll add them later ISSUE: Eina_Unicode size check. It indirectly depends on eina_config.h, which is created at the end of the configure script. So its size is always 0. I don't know how that size is used, so I can't do a lot, for now. SVN revision: 78895
Diffstat (limited to 'legacy/evas/src/lib/engines')
-rw-r--r--legacy/evas/src/lib/engines/common/evas_blend.h8
-rw-r--r--legacy/evas/src/lib/engines/common/evas_blend_main.c325
-rw-r--r--legacy/evas/src/lib/engines/common/evas_blend_private.h31
-rw-r--r--legacy/evas/src/lib/engines/common/evas_blit_main.c614
-rw-r--r--legacy/evas/src/lib/engines/common/evas_convert_color.c246
-rw-r--r--legacy/evas/src/lib/engines/common/evas_convert_color.h16
-rw-r--r--legacy/evas/src/lib/engines/common/evas_convert_colorspace.c186
-rw-r--r--legacy/evas/src/lib/engines/common/evas_convert_colorspace.h12
-rw-r--r--legacy/evas/src/lib/engines/common/evas_convert_gry_1.h9
-rw-r--r--legacy/evas/src/lib/engines/common/evas_convert_gry_8.c68
-rw-r--r--legacy/evas/src/lib/engines/common/evas_convert_gry_8.h12
-rw-r--r--legacy/evas/src/lib/engines/common/evas_convert_grypal_6.c21
-rw-r--r--legacy/evas/src/lib/engines/common/evas_convert_grypal_6.h6
-rw-r--r--legacy/evas/src/lib/engines/common/evas_convert_main.c478
-rw-r--r--legacy/evas/src/lib/engines/common/evas_convert_main.h9
-rw-r--r--legacy/evas/src/lib/engines/common/evas_convert_rgb_16.c1927
-rw-r--r--legacy/evas/src/lib/engines/common/evas_convert_rgb_16.h50
-rw-r--r--legacy/evas/src/lib/engines/common/evas_convert_rgb_24.c85
-rw-r--r--legacy/evas/src/lib/engines/common/evas_convert_rgb_24.h10
-rw-r--r--legacy/evas/src/lib/engines/common/evas_convert_rgb_32.c555
-rw-r--r--legacy/evas/src/lib/engines/common/evas_convert_rgb_32.h24
-rw-r--r--legacy/evas/src/lib/engines/common/evas_convert_rgb_8.c240
-rw-r--r--legacy/evas/src/lib/engines/common/evas_convert_rgb_8.h14
-rw-r--r--legacy/evas/src/lib/engines/common/evas_convert_yuv.c1215
-rw-r--r--legacy/evas/src/lib/engines/common/evas_convert_yuv.h9
-rw-r--r--legacy/evas/src/lib/engines/common/evas_cpu.c273
-rw-r--r--legacy/evas/src/lib/engines/common/evas_draw.h36
-rw-r--r--legacy/evas/src/lib/engines/common/evas_draw_main.c703
-rw-r--r--legacy/evas/src/lib/engines/common/evas_font.h78
-rw-r--r--legacy/evas/src/lib/engines/common/evas_font_default_walk.x145
-rw-r--r--legacy/evas/src/lib/engines/common/evas_font_draw.c430
-rw-r--r--legacy/evas/src/lib/engines/common/evas_font_load.c909
-rw-r--r--legacy/evas/src/lib/engines/common/evas_font_main.c722
-rw-r--r--legacy/evas/src/lib/engines/common/evas_font_ot.c344
-rw-r--r--legacy/evas/src/lib/engines/common/evas_font_ot.h45
-rw-r--r--legacy/evas/src/lib/engines/common/evas_font_private.h53
-rw-r--r--legacy/evas/src/lib/engines/common/evas_font_query.c802
-rw-r--r--legacy/evas/src/lib/engines/common/evas_image.h68
-rw-r--r--legacy/evas/src/lib/engines/common/evas_image_data.c149
-rw-r--r--legacy/evas/src/lib/engines/common/evas_image_load.c391
-rw-r--r--legacy/evas/src/lib/engines/common/evas_image_main.c929
-rw-r--r--legacy/evas/src/lib/engines/common/evas_image_private.h15
-rw-r--r--legacy/evas/src/lib/engines/common/evas_image_save.c49
-rw-r--r--legacy/evas/src/lib/engines/common/evas_image_scalecache.c837
-rw-r--r--legacy/evas/src/lib/engines/common/evas_line.h11
-rw-r--r--legacy/evas/src/lib/engines/common/evas_line_main.c1003
-rw-r--r--legacy/evas/src/lib/engines/common/evas_map_image.c764
-rw-r--r--legacy/evas/src/lib/engines/common/evas_map_image.h23
-rw-r--r--legacy/evas/src/lib/engines/common/evas_map_image_core.c226
-rw-r--r--legacy/evas/src/lib/engines/common/evas_map_image_internal.c180
-rw-r--r--legacy/evas/src/lib/engines/common/evas_map_image_loop.c116
-rw-r--r--legacy/evas/src/lib/engines/common/evas_op_add/op_add_color_.c25
-rw-r--r--legacy/evas/src/lib/engines/common/evas_op_add/op_add_color_i386.c33
-rw-r--r--legacy/evas/src/lib/engines/common/evas_op_add/op_add_mask_color_.c26
-rw-r--r--legacy/evas/src/lib/engines/common/evas_op_add/op_add_mask_color_i386.c33
-rw-r--r--legacy/evas/src/lib/engines/common/evas_op_add/op_add_pixel_.c25
-rw-r--r--legacy/evas/src/lib/engines/common/evas_op_add/op_add_pixel_color_.c25
-rw-r--r--legacy/evas/src/lib/engines/common/evas_op_add/op_add_pixel_color_i386.c29
-rw-r--r--legacy/evas/src/lib/engines/common/evas_op_add/op_add_pixel_i386.c33
-rw-r--r--legacy/evas/src/lib/engines/common/evas_op_add/op_add_pixel_mask_.c29
-rw-r--r--legacy/evas/src/lib/engines/common/evas_op_add/op_add_pixel_mask_i386.c33
-rw-r--r--legacy/evas/src/lib/engines/common/evas_op_add_main_.c529
-rw-r--r--legacy/evas/src/lib/engines/common/evas_op_blend/op_blend_color_.c101
-rw-r--r--legacy/evas/src/lib/engines/common/evas_op_blend/op_blend_color_i386.c138
-rw-r--r--legacy/evas/src/lib/engines/common/evas_op_blend/op_blend_color_neon.c223
-rw-r--r--legacy/evas/src/lib/engines/common/evas_op_blend/op_blend_color_sse3.c167
-rw-r--r--legacy/evas/src/lib/engines/common/evas_op_blend/op_blend_mask_color_.c177
-rw-r--r--legacy/evas/src/lib/engines/common/evas_op_blend/op_blend_mask_color_i386.c251
-rw-r--r--legacy/evas/src/lib/engines/common/evas_op_blend/op_blend_mask_color_neon.c562
-rw-r--r--legacy/evas/src/lib/engines/common/evas_op_blend/op_blend_mask_color_sse3.c321
-rw-r--r--legacy/evas/src/lib/engines/common/evas_op_blend/op_blend_master_sse3.c77
-rw-r--r--legacy/evas/src/lib/engines/common/evas_op_blend/op_blend_pixel_.c154
-rw-r--r--legacy/evas/src/lib/engines/common/evas_op_blend/op_blend_pixel_color_.c276
-rw-r--r--legacy/evas/src/lib/engines/common/evas_op_blend/op_blend_pixel_color_i386.c221
-rw-r--r--legacy/evas/src/lib/engines/common/evas_op_blend/op_blend_pixel_color_neon.c570
-rw-r--r--legacy/evas/src/lib/engines/common/evas_op_blend/op_blend_pixel_color_sse3.c543
-rw-r--r--legacy/evas/src/lib/engines/common/evas_op_blend/op_blend_pixel_i386.c217
-rw-r--r--legacy/evas/src/lib/engines/common/evas_op_blend/op_blend_pixel_mask_.c181
-rw-r--r--legacy/evas/src/lib/engines/common/evas_op_blend/op_blend_pixel_mask_i386.c157
-rw-r--r--legacy/evas/src/lib/engines/common/evas_op_blend/op_blend_pixel_mask_neon.c129
-rw-r--r--legacy/evas/src/lib/engines/common/evas_op_blend/op_blend_pixel_mask_sse3.c300
-rw-r--r--legacy/evas/src/lib/engines/common/evas_op_blend/op_blend_pixel_neon.c530
-rw-r--r--legacy/evas/src/lib/engines/common/evas_op_blend/op_blend_pixel_sse3.c315
-rw-r--r--legacy/evas/src/lib/engines/common/evas_op_blend_main_.c659
-rw-r--r--legacy/evas/src/lib/engines/common/evas_op_copy/op_copy_color_.c131
-rw-r--r--legacy/evas/src/lib/engines/common/evas_op_copy/op_copy_color_i386.c150
-rw-r--r--legacy/evas/src/lib/engines/common/evas_op_copy/op_copy_color_neon.c212
-rw-r--r--legacy/evas/src/lib/engines/common/evas_op_copy/op_copy_mask_color_.c162
-rw-r--r--legacy/evas/src/lib/engines/common/evas_op_copy/op_copy_mask_color_i386.c193
-rw-r--r--legacy/evas/src/lib/engines/common/evas_op_copy/op_copy_mask_color_neon.c170
-rw-r--r--legacy/evas/src/lib/engines/common/evas_op_copy/op_copy_pixel_.c109
-rw-r--r--legacy/evas/src/lib/engines/common/evas_op_copy/op_copy_pixel_color_.c228
-rw-r--r--legacy/evas/src/lib/engines/common/evas_op_copy/op_copy_pixel_color_i386.c255
-rw-r--r--legacy/evas/src/lib/engines/common/evas_op_copy/op_copy_pixel_color_neon.c238
-rw-r--r--legacy/evas/src/lib/engines/common/evas_op_copy/op_copy_pixel_i386.c131
-rw-r--r--legacy/evas/src/lib/engines/common/evas_op_copy/op_copy_pixel_mask_.c142
-rw-r--r--legacy/evas/src/lib/engines/common/evas_op_copy/op_copy_pixel_mask_i386.c176
-rw-r--r--legacy/evas/src/lib/engines/common/evas_op_copy/op_copy_pixel_mask_neon.c151
-rw-r--r--legacy/evas/src/lib/engines/common/evas_op_copy/op_copy_pixel_neon.c158
-rw-r--r--legacy/evas/src/lib/engines/common/evas_op_copy_main_.c663
-rw-r--r--legacy/evas/src/lib/engines/common/evas_op_mask/op_mask_color_.c46
-rw-r--r--legacy/evas/src/lib/engines/common/evas_op_mask/op_mask_color_i386.c58
-rw-r--r--legacy/evas/src/lib/engines/common/evas_op_mask/op_mask_mask_color_.c59
-rw-r--r--legacy/evas/src/lib/engines/common/evas_op_mask/op_mask_mask_color_i386.c13
-rw-r--r--legacy/evas/src/lib/engines/common/evas_op_mask/op_mask_pixel_.c44
-rw-r--r--legacy/evas/src/lib/engines/common/evas_op_mask/op_mask_pixel_color_.c96
-rw-r--r--legacy/evas/src/lib/engines/common/evas_op_mask/op_mask_pixel_color_i386.c13
-rw-r--r--legacy/evas/src/lib/engines/common/evas_op_mask/op_mask_pixel_i386.c58
-rw-r--r--legacy/evas/src/lib/engines/common/evas_op_mask/op_mask_pixel_mask_.c58
-rw-r--r--legacy/evas/src/lib/engines/common/evas_op_mask/op_mask_pixel_mask_i386.c13
-rw-r--r--legacy/evas/src/lib/engines/common/evas_op_mask_main_.c303
-rw-r--r--legacy/evas/src/lib/engines/common/evas_op_mul/op_mul_color_.c60
-rw-r--r--legacy/evas/src/lib/engines/common/evas_op_mul/op_mul_color_i386.c66
-rw-r--r--legacy/evas/src/lib/engines/common/evas_op_mul/op_mul_mask_color_.c68
-rw-r--r--legacy/evas/src/lib/engines/common/evas_op_mul/op_mul_mask_color_i386.c92
-rw-r--r--legacy/evas/src/lib/engines/common/evas_op_mul/op_mul_pixel_.c52
-rw-r--r--legacy/evas/src/lib/engines/common/evas_op_mul/op_mul_pixel_color_.c118
-rw-r--r--legacy/evas/src/lib/engines/common/evas_op_mul/op_mul_pixel_color_i386.c120
-rw-r--r--legacy/evas/src/lib/engines/common/evas_op_mul/op_mul_pixel_i386.c66
-rw-r--r--legacy/evas/src/lib/engines/common/evas_op_mul/op_mul_pixel_mask_.c114
-rw-r--r--legacy/evas/src/lib/engines/common/evas_op_mul/op_mul_pixel_mask_i386.c63
-rw-r--r--legacy/evas/src/lib/engines/common/evas_op_mul_main_.c302
-rw-r--r--legacy/evas/src/lib/engines/common/evas_op_sub/op_sub_color_.c25
-rw-r--r--legacy/evas/src/lib/engines/common/evas_op_sub/op_sub_color_i386.c33
-rw-r--r--legacy/evas/src/lib/engines/common/evas_op_sub/op_sub_mask_color_.c25
-rw-r--r--legacy/evas/src/lib/engines/common/evas_op_sub/op_sub_mask_color_i386.c33
-rw-r--r--legacy/evas/src/lib/engines/common/evas_op_sub/op_sub_pixel_.c25
-rw-r--r--legacy/evas/src/lib/engines/common/evas_op_sub/op_sub_pixel_color_.c25
-rw-r--r--legacy/evas/src/lib/engines/common/evas_op_sub/op_sub_pixel_color_i386.c29
-rw-r--r--legacy/evas/src/lib/engines/common/evas_op_sub/op_sub_pixel_i386.c33
-rw-r--r--legacy/evas/src/lib/engines/common/evas_op_sub/op_sub_pixel_mask_.c29
-rw-r--r--legacy/evas/src/lib/engines/common/evas_op_sub/op_sub_pixel_mask_i386.c33
-rw-r--r--legacy/evas/src/lib/engines/common/evas_op_sub_main_.c530
-rw-r--r--legacy/evas/src/lib/engines/common/evas_pipe.c895
-rw-r--r--legacy/evas/src/lib/engines/common/evas_pipe.h27
-rw-r--r--legacy/evas/src/lib/engines/common/evas_polygon.h13
-rw-r--r--legacy/evas/src/lib/engines/common/evas_polygon_main.c320
-rw-r--r--legacy/evas/src/lib/engines/common/evas_rectangle.h13
-rw-r--r--legacy/evas/src/lib/engines/common/evas_rectangle_main.c137
-rw-r--r--legacy/evas/src/lib/engines/common/evas_regionbuf.c357
-rw-r--r--legacy/evas/src/lib/engines/common/evas_scale_main.c33
-rw-r--r--legacy/evas/src/lib/engines/common/evas_scale_main.h18
-rw-r--r--legacy/evas/src/lib/engines/common/evas_scale_sample.c408
-rw-r--r--legacy/evas/src/lib/engines/common/evas_scale_smooth.c243
-rw-r--r--legacy/evas/src/lib/engines/common/evas_scale_smooth.h7
-rw-r--r--legacy/evas/src/lib/engines/common/evas_scale_smooth_scaler.c211
-rw-r--r--legacy/evas/src/lib/engines/common/evas_scale_smooth_scaler_down.c43
-rw-r--r--legacy/evas/src/lib/engines/common/evas_scale_smooth_scaler_downx.c234
-rw-r--r--legacy/evas/src/lib/engines/common/evas_scale_smooth_scaler_downx_downy.c363
-rw-r--r--legacy/evas/src/lib/engines/common/evas_scale_smooth_scaler_downy.c236
-rw-r--r--legacy/evas/src/lib/engines/common/evas_scale_smooth_scaler_noscale.c44
-rw-r--r--legacy/evas/src/lib/engines/common/evas_scale_smooth_scaler_up.c235
-rw-r--r--legacy/evas/src/lib/engines/common/evas_scale_span.c653
-rw-r--r--legacy/evas/src/lib/engines/common/evas_scale_span.h14
-rw-r--r--legacy/evas/src/lib/engines/common/evas_text_utils.c521
-rw-r--r--legacy/evas/src/lib/engines/common/evas_text_utils.h101
-rw-r--r--legacy/evas/src/lib/engines/common/evas_tiler.c1439
-rw-r--r--legacy/evas/src/lib/engines/common/language/evas_bidi_utils.c645
-rw-r--r--legacy/evas/src/lib/engines/common/language/evas_bidi_utils.h157
-rw-r--r--legacy/evas/src/lib/engines/common/language/evas_language_utils.c152
-rw-r--r--legacy/evas/src/lib/engines/common/language/evas_language_utils.h132
-rw-r--r--legacy/evas/src/lib/engines/common/language/evas_script_table.h3087
162 files changed, 0 insertions, 39269 deletions
diff --git a/legacy/evas/src/lib/engines/common/evas_blend.h b/legacy/evas/src/lib/engines/common/evas_blend.h
deleted file mode 100644
index 1a98f3f550..0000000000
--- a/legacy/evas/src/lib/engines/common/evas_blend.h
+++ /dev/null
@@ -1,8 +0,0 @@
1#ifndef _EVAS_BLEND_H
2#define _EVAS_BLEND_H
3
4
5EAPI void evas_common_blend_init (void);
6
7
8#endif /* _EVAS_BLEND_H */
diff --git a/legacy/evas/src/lib/engines/common/evas_blend_main.c b/legacy/evas/src/lib/engines/common/evas_blend_main.c
deleted file mode 100644
index dcc0f4c94e..0000000000
--- a/legacy/evas/src/lib/engines/common/evas_blend_main.c
+++ /dev/null
@@ -1,325 +0,0 @@
1#include "evas_common.h"
2#include "evas_blend_private.h"
3
4#ifdef BUILD_MMX
5#include "evas_mmx.h"
6#endif
7
8const DATA32 ALPHA_255 = 255;
9const DATA32 ALPHA_256 = 256;
10
11static void
12_composite_span_nothing(DATA32 *s __UNUSED__, DATA8 *m __UNUSED__, DATA32 c __UNUSED__, DATA32 *d __UNUSED__, int l __UNUSED__)
13{
14}
15
16static void
17_composite_pt_nothing(DATA32 s __UNUSED__, DATA8 m __UNUSED__, DATA32 c __UNUSED__, DATA32 *d __UNUSED__)
18{
19}
20
21static RGBA_Gfx_Compositor *
22evas_gfx_compositor_get(unsigned char op)
23{
24 RGBA_Gfx_Compositor *comp;
25
26 switch (op)
27 {
28 case _EVAS_RENDER_BLEND:
29 comp = evas_common_gfx_compositor_blend_get();
30 break;
31 case _EVAS_RENDER_BLEND_REL:
32 comp = evas_common_gfx_compositor_blend_rel_get();
33 break;
34 case _EVAS_RENDER_COPY:
35 comp = evas_common_gfx_compositor_copy_get();
36 break;
37 case _EVAS_RENDER_COPY_REL:
38 comp = evas_common_gfx_compositor_copy_rel_get();
39 break;
40/*
41 case _EVAS_RENDER_ADD:
42 comp = evas_common_gfx_compositor_add_get();
43 break;
44 case _EVAS_RENDER_ADD_REL:
45 comp = evas_common_gfx_compositor_add_rel_get();
46 break;
47 case _EVAS_RENDER_SUB:
48 comp = evas_common_gfx_compositor_sub_get();
49 break;
50 case _EVAS_RENDER_SUB_REL:
51 comp = evas_common_gfx_compositor_sub_rel_get();
52 break;
53*/
54 case _EVAS_RENDER_MASK:
55 comp = evas_common_gfx_compositor_mask_get();
56 break;
57 case _EVAS_RENDER_MUL:
58 comp = evas_common_gfx_compositor_mul_get();
59 break;
60 default:
61 comp = evas_common_gfx_compositor_blend_get();
62 break;
63 }
64 return comp;
65}
66
67EAPI void
68evas_common_blend_init(void)
69{
70 static int gfx_initialised = 0;
71 static int mmx = 0;
72 static int sse = 0;
73 static int sse2 = 0;
74 RGBA_Gfx_Compositor *comp;
75
76 if (gfx_initialised) return;
77 gfx_initialised = 1;
78
79 evas_common_cpu_can_do(&mmx, &sse, &sse2);
80
81 comp = evas_common_gfx_compositor_copy_get();
82 if (comp) comp->init();
83 comp = evas_common_gfx_compositor_copy_rel_get();
84 if (comp) comp->init();
85
86 comp = evas_common_gfx_compositor_blend_get();
87 if (comp) comp->init();
88 comp = evas_common_gfx_compositor_blend_rel_get();
89 if (comp) comp->init();
90
91/*
92 comp = evas_common_gfx_compositor_add_get();
93 if (comp) comp->init();
94 comp = evas_common_gfx_compositor_add_rel_get();
95 if (comp) comp->init();
96 comp = evas_common_gfx_compositor_sub_get();
97 if (comp) comp->init();
98 comp = evas_common_gfx_compositor_sub_rel_get();
99 if (comp) comp->init();
100*/
101 comp = evas_common_gfx_compositor_mask_get();
102 if (comp) comp->init();
103
104 comp = evas_common_gfx_compositor_mul_get();
105 if (comp) comp->init();
106}
107
108void
109evas_common_blend_shutdown(void)
110{
111 RGBA_Gfx_Compositor *comp;
112
113 comp = evas_common_gfx_compositor_copy_get();
114 if (comp) comp->shutdown();
115 comp = evas_common_gfx_compositor_copy_rel_get();
116 if (comp) comp->shutdown();
117
118 comp = evas_common_gfx_compositor_blend_get();
119 if (comp) comp->shutdown();
120 comp = evas_common_gfx_compositor_blend_rel_get();
121 if (comp) comp->shutdown();
122
123/*
124 comp = evas_common_gfx_compositor_add_get();
125 if (comp) comp->shutdown();
126 comp = evas_common_gfx_compositor_add_rel_get();
127 if (comp) comp->shutdown();
128 comp = evas_common_gfx_compositor_sub_get();
129 if (comp) comp->shutdown();
130 comp = evas_common_gfx_compositor_sub_rel_get();
131 if (comp) comp->shutdown();
132*/
133 comp = evas_common_gfx_compositor_mask_get();
134 if (comp) comp->shutdown();
135
136 comp = evas_common_gfx_compositor_mul_get();
137 if (comp) comp->shutdown();
138}
139
140
141RGBA_Gfx_Func
142evas_common_gfx_func_composite_pixel_span_get(RGBA_Image *src, RGBA_Image *dst, int pixels, int op)
143{
144 RGBA_Gfx_Compositor *comp;
145 RGBA_Gfx_Func func = NULL;
146
147 if (src && (!src->cache_entry.flags.alpha))
148 {
149 if (op == _EVAS_RENDER_BLEND)
150 op = _EVAS_RENDER_COPY;
151 if (op == _EVAS_RENDER_BLEND_REL)
152 op = _EVAS_RENDER_COPY_REL;
153 }
154 comp = evas_gfx_compositor_get(op);
155 if (comp)
156 func = comp->composite_pixel_span_get(src, dst, pixels);
157 if (func)
158 return func;
159 return _composite_span_nothing;
160}
161
162RGBA_Gfx_Func
163evas_common_gfx_func_composite_color_span_get(DATA32 col, RGBA_Image *dst, int pixels, int op)
164{
165 RGBA_Gfx_Compositor *comp;
166 RGBA_Gfx_Func func = NULL;
167
168 if ((col & 0xff000000) == 0xff000000)
169 {
170 if (op == _EVAS_RENDER_BLEND)
171 op = _EVAS_RENDER_COPY;
172 if (op == EVAS_RENDER_BLEND_REL)
173 op = _EVAS_RENDER_COPY_REL;
174 }
175
176 comp = evas_gfx_compositor_get(op);
177 if (comp)
178 func = comp->composite_color_span_get(col, dst, pixels);
179 if (func)
180 return func;
181 return _composite_span_nothing;
182}
183
184RGBA_Gfx_Func
185evas_common_gfx_func_composite_pixel_color_span_get(RGBA_Image *src, DATA32 col, RGBA_Image *dst, int pixels, int op)
186{
187 RGBA_Gfx_Compositor *comp;
188 RGBA_Gfx_Func func = NULL;
189
190 if ((src && (!src->cache_entry.flags.alpha)) && ((col & 0xff000000) == 0xff000000))
191 {
192 if (op == _EVAS_RENDER_BLEND)
193 op = _EVAS_RENDER_COPY;
194 if (op == _EVAS_RENDER_BLEND_REL)
195 op = _EVAS_RENDER_COPY_REL;
196 }
197
198 comp = evas_gfx_compositor_get(op);
199 if (comp)
200 func = comp->composite_pixel_color_span_get(src, col, dst, pixels);
201 if (func)
202 return func;
203 return _composite_span_nothing;
204}
205
206RGBA_Gfx_Func
207evas_common_gfx_func_composite_mask_color_span_get(DATA32 col, RGBA_Image *dst, int pixels, int op)
208{
209 RGBA_Gfx_Compositor *comp;
210 RGBA_Gfx_Func func = NULL;
211
212 comp = evas_gfx_compositor_get(op);
213 if (comp)
214 func = comp->composite_mask_color_span_get(col, dst, pixels);
215 if (func)
216 return func;
217 return _composite_span_nothing;
218}
219
220RGBA_Gfx_Func
221evas_common_gfx_func_composite_pixel_mask_span_get(RGBA_Image *src, RGBA_Image *dst, int pixels, int op)
222{
223 RGBA_Gfx_Compositor *comp;
224 RGBA_Gfx_Func func = NULL;
225
226 comp = evas_gfx_compositor_get(op);
227 if (comp)
228 func = comp->composite_pixel_mask_span_get(src, dst, pixels);
229 if (func)
230 return func;
231 return _composite_span_nothing;
232}
233
234RGBA_Gfx_Pt_Func
235evas_common_gfx_func_composite_pixel_pt_get(Image_Entry_Flags src_flags, RGBA_Image *dst, int op)
236{
237 RGBA_Gfx_Compositor *comp;
238 RGBA_Gfx_Pt_Func func = NULL;
239
240 if (!src_flags.alpha)
241 {
242 if (op == _EVAS_RENDER_BLEND)
243 op = _EVAS_RENDER_COPY;
244 if (op == _EVAS_RENDER_BLEND_REL)
245 op = _EVAS_RENDER_COPY_REL;
246 }
247 comp = evas_gfx_compositor_get(op);
248 if (comp)
249 func = comp->composite_pixel_pt_get(src_flags, dst);
250 if (func)
251 return func;
252 return _composite_pt_nothing;
253}
254
255RGBA_Gfx_Pt_Func
256evas_common_gfx_func_composite_color_pt_get(DATA32 col, RGBA_Image *dst, int op)
257{
258 RGBA_Gfx_Compositor *comp;
259 RGBA_Gfx_Pt_Func func = NULL;
260
261 if ((col & 0xff000000) == 0xff000000)
262 {
263 if (op == _EVAS_RENDER_BLEND)
264 op = _EVAS_RENDER_COPY;
265 if (op == EVAS_RENDER_BLEND_REL)
266 op = _EVAS_RENDER_COPY_REL;
267 }
268
269 comp = evas_gfx_compositor_get(op);
270 if (comp)
271 func = comp->composite_color_pt_get(col, dst);
272 if (func)
273 return func;
274 return _composite_pt_nothing;
275}
276
277RGBA_Gfx_Pt_Func
278evas_common_gfx_func_composite_pixel_color_pt_get(Image_Entry_Flags src_flags, DATA32 col, RGBA_Image *dst, int op)
279{
280 RGBA_Gfx_Compositor *comp;
281 RGBA_Gfx_Pt_Func func = NULL;
282
283 if ((!src_flags.alpha) && ((col & 0xff000000) == 0xff000000))
284 {
285 if (op == _EVAS_RENDER_BLEND)
286 op = _EVAS_RENDER_COPY;
287 if (op == _EVAS_RENDER_BLEND_REL)
288 op = _EVAS_RENDER_COPY_REL;
289 }
290
291 comp = evas_gfx_compositor_get(op);
292 if (comp)
293 func = comp->composite_pixel_color_pt_get(src_flags, col, dst);
294 if (func)
295 return func;
296 return _composite_pt_nothing;
297}
298
299RGBA_Gfx_Pt_Func
300evas_common_gfx_func_composite_mask_color_pt_get(DATA32 col, RGBA_Image *dst, int op)
301{
302 RGBA_Gfx_Compositor *comp;
303 RGBA_Gfx_Pt_Func func = NULL;
304
305 comp = evas_gfx_compositor_get(op);
306 if (comp)
307 func = comp->composite_mask_color_pt_get(col, dst);
308 if (func)
309 return func;
310 return _composite_pt_nothing;
311}
312
313RGBA_Gfx_Pt_Func
314evas_common_gfx_func_composite_pixel_mask_pt_get(Image_Entry_Flags src_flags, RGBA_Image *dst, int op)
315{
316 RGBA_Gfx_Compositor *comp;
317 RGBA_Gfx_Pt_Func func = NULL;
318
319 comp = evas_gfx_compositor_get(op);
320 if (comp)
321 func = comp->composite_pixel_mask_pt_get(src_flags, dst);
322 if (func)
323 return func;
324 return _composite_pt_nothing;
325}
diff --git a/legacy/evas/src/lib/engines/common/evas_blend_private.h b/legacy/evas/src/lib/engines/common/evas_blend_private.h
deleted file mode 100644
index 1d14951da1..0000000000
--- a/legacy/evas/src/lib/engines/common/evas_blend_private.h
+++ /dev/null
@@ -1,31 +0,0 @@
1#ifndef _EVAS_BLEND_PRIVATE_H
2#define _EVAS_BLEND_PRIVATE_H
3
4
5RGBA_Gfx_Compositor *evas_common_gfx_compositor_blend_get (void);
6RGBA_Gfx_Compositor *evas_common_gfx_compositor_blend_rel_get (void);
7RGBA_Gfx_Compositor *evas_common_gfx_compositor_copy_get (void);
8RGBA_Gfx_Compositor *evas_common_gfx_compositor_copy_rel_get (void);
9RGBA_Gfx_Compositor *evas_common_gfx_compositor_add_get (void);
10RGBA_Gfx_Compositor *evas_common_gfx_compositor_add_rel_get (void);
11/*
12RGBA_Gfx_Compositor *evas_common_gfx_compositor_sub_get(void);
13RGBA_Gfx_Compositor *evas_common_gfx_compositor_sub_rel_get(void);
14*/
15RGBA_Gfx_Compositor *evas_common_gfx_compositor_mask_get (void);
16RGBA_Gfx_Compositor *evas_common_gfx_compositor_mul_get (void);
17
18RGBA_Gfx_Func evas_common_gfx_func_composite_pixel_span_get (RGBA_Image *src, RGBA_Image *dst, int pixels, int op);
19RGBA_Gfx_Func evas_common_gfx_func_composite_color_span_get (DATA32 col, RGBA_Image *dst, int pixels, int op);
20RGBA_Gfx_Func evas_common_gfx_func_composite_pixel_color_span_get (RGBA_Image *src, DATA32 col, RGBA_Image *dst, int pixels, int op);
21RGBA_Gfx_Func evas_common_gfx_func_composite_mask_color_span_get (DATA32 col, RGBA_Image *dst, int pixels, int op);
22RGBA_Gfx_Func evas_common_gfx_func_composite_pixel_mask_span_get (RGBA_Image *src, RGBA_Image *dst, int pixels, int op);
23
24RGBA_Gfx_Pt_Func evas_common_gfx_func_composite_pixel_pt_get (Image_Entry_Flags src_flags, RGBA_Image *dst, int op);
25RGBA_Gfx_Pt_Func evas_common_gfx_func_composite_color_pt_get (DATA32 col, RGBA_Image *dst, int op);
26RGBA_Gfx_Pt_Func evas_common_gfx_func_composite_pixel_color_pt_get (Image_Entry_Flags src_flags, DATA32 col, RGBA_Image *dst, int op);
27RGBA_Gfx_Pt_Func evas_common_gfx_func_composite_mask_color_pt_get (DATA32 col, RGBA_Image *dst, int op);
28RGBA_Gfx_Pt_Func evas_common_gfx_func_composite_pixel_mask_pt_get (Image_Entry_Flags src_flags, RGBA_Image *dst, int op);
29
30
31#endif /* _EVAS_BLEND_PRIVATE_H */
diff --git a/legacy/evas/src/lib/engines/common/evas_blit_main.c b/legacy/evas/src/lib/engines/common/evas_blit_main.c
deleted file mode 100644
index bed6d01dc0..0000000000
--- a/legacy/evas/src/lib/engines/common/evas_blit_main.c
+++ /dev/null
@@ -1,614 +0,0 @@
1#include "evas_common.h"
2
3#ifdef BUILD_MMX
4#include "evas_mmx.h"
5#endif
6
7#define ALIGN_FIX
8
9static void evas_common_copy_pixels_c (DATA32 *src, DATA32 *dst, int len);
10static void evas_common_copy_pixels_mmx (DATA32 *src, DATA32 *dst, int len);
11static void evas_common_copy_pixels_mmx2 (DATA32 *src, DATA32 *dst, int len);
12static void evas_common_copy_pixels_sse/*NB*/ (DATA32 *src, DATA32 *dst, int len);
13
14#ifdef BUILD_NEON
15static void evas_common_copy_pixels_neon (DATA32 *src, DATA32 *dst, int len);
16static void evas_common_copy_pixels_rev_neon (DATA32 *src, DATA32 *dst, int len);
17#endif
18
19static void evas_common_copy_pixels_rev_c (DATA32 *src, DATA32 *dst, int len);
20static void evas_common_copy_pixels_rev_mmx (DATA32 *src, DATA32 *dst, int len);
21static void evas_common_copy_pixels_rev_sse/*NB*/ (DATA32 *src, DATA32 *dst, int len);
22
23static void evas_common_copy_rev_pixels_c (DATA32 *src, DATA32 *dst, int len);
24
25
26EAPI void
27evas_common_blit_init(void)
28{
29}
30
31EAPI void
32evas_common_blit_rectangle(const RGBA_Image *src, RGBA_Image *dst, int src_x, int src_y, int w, int h, int dst_x, int dst_y)
33{
34 int y;
35 Gfx_Func_Copy func;
36 DATA32 *src_ptr, *dst_ptr;
37
38 /* clip clip clip */
39 if (w <= 0) return;
40 if (src_x + w > (int)src->cache_entry.w) w = src->cache_entry.w - src_x;
41 if (w <= 0) return;
42 if (src_x < 0)
43 {
44 dst_x -= src_x;
45 w += src_x;
46 src_x = 0;
47 }
48 if (w <= 0) return;
49
50 if (h <= 0) return;
51 if (src_y + h > (int)src->cache_entry.h) h = src->cache_entry.h - src_y;
52 if (h <= 0) return;
53 if (src_y < 0)
54 {
55 dst_y -= src_y;
56 h += src_y;
57 src_y = 0;
58 }
59 if (h <= 0) return;
60
61 if (w <= 0) return;
62 if (dst_x + w > (int)dst->cache_entry.w) w = dst->cache_entry.w - dst_x;
63 if (w <= 0) return;
64 if (dst_x < 0)
65 {
66 src_x -= dst_x;
67 w += dst_x;
68 dst_x = 0;
69 }
70 if (w <= 0) return;
71
72 if (h <= 0) return;
73 if (dst_y + h > (int)dst->cache_entry.h) h = dst->cache_entry.h - dst_y;
74 if (h <= 0) return;
75 if (dst_y < 0)
76 {
77 src_y -= dst_y;
78 h += dst_y;
79 dst_y = 0;
80 }
81 if (h <= 0) return;
82
83 if (dst == src)
84 {
85 /* src after dst - go forward */
86 if (((src_y * src->cache_entry.w) + src_x) > ((dst_y * dst->cache_entry.w) + dst_x))
87 {
88 func = evas_common_draw_func_copy_get(w, 0);
89 for (y = 0; y < h; y++)
90 {
91 src_ptr = src->image.data + ((y + src_y) * src->cache_entry.w) + src_x;
92 dst_ptr = dst->image.data + ((y + dst_y) * dst->cache_entry.w) + dst_x;
93 func(src_ptr, dst_ptr, w);
94 }
95 }
96 /* reverse */
97 else
98 {
99 func = evas_common_draw_func_copy_get(w, 1);
100 for (y = h - 1; y >= 0; y--)
101 {
102 src_ptr = src->image.data + ((y + src_y) * src->cache_entry.w) + src_x;
103 dst_ptr = dst->image.data + ((y + dst_y) * dst->cache_entry.w) + dst_x;
104 func(src_ptr, dst_ptr, w);
105 }
106 }
107 }
108 else
109 {
110 func = evas_common_draw_func_copy_get(w, 0);
111 for (y = 0; y < h; y++)
112 {
113 src_ptr = src->image.data + ((y + src_y) * src->cache_entry.w) + src_x;
114 dst_ptr = dst->image.data + ((y + dst_y) * dst->cache_entry.w) + dst_x;
115 func(src_ptr, dst_ptr, w);
116 }
117 }
118}
119
120/****************************************************************************/
121
122static void
123evas_common_copy_rev_pixels_c(DATA32 *src, DATA32 *dst, int len)
124{
125 DATA32 *dst_end = dst + len;
126
127 src += len - 1;
128 while (dst < dst_end) *dst++ = *src--;
129}
130
131
132#ifdef BUILD_NEON
133static void
134evas_common_copy_pixels_rev_neon(DATA32 *src, DATA32 *dst, int len)
135{
136 uint32_t *tmp = (void *)37;
137#define AP "evas_common_copy_rev_pixels_neon_"
138 asm volatile (
139 ".fpu neon \n\t"
140 // Can we do 32 byte?
141 "andS %[tmp], %[d], $0x1f \n\t"
142 "beq "AP"quadstart \n\t"
143
144 // Can we do at least 16 byte?
145 "andS %[tmp], %[d], $0x4 \n\t"
146 "beq "AP"dualstart \n\t"
147
148 // Only once
149 AP"singleloop: \n\t"
150 "sub %[s], #4 \n\t"
151 "vld1.32 d0[0], [%[s]] \n\t"
152 "vst1.32 d0[0], [%[d]]! \n\t"
153
154 // Up to 3 times
155 AP"dualstart: \n\t"
156 "sub %[tmp], %[e], %[d] \n\t"
157 "cmp %[tmp], #31 \n\t"
158 "blt "AP"loopout \n\t"
159
160 "andS %[tmp], %[d], $0x1f \n\t"
161 "beq "AP"quadstart \n\t"
162
163 AP"dualloop: \n\t"
164 "sub %[s], #8 \n\t"
165 "vldm %[s], {d0} \n\t"
166 "vrev64.32 d1, d0 \n\t"
167 "vstm %[d]!, {d1} \n\t"
168
169 "andS %[tmp], %[d], $0x1f \n\t"
170 "bne "AP"dualloop \n\t"
171
172
173 AP"quadstart: \n\t"
174 "sub %[tmp], %[e], %[d] \n\t"
175 "cmp %[tmp], #32 \n\t"
176 "blt "AP"loopout \n\t"
177
178 "sub %[tmp],%[e],#32 \n\t"
179
180 AP "quadloop: \n\t"
181 "sub %[s], #32 \n\t"
182 "vldm %[s], {d0,d1,d2,d3} \n\t"
183
184 "vrev64.32 d7,d0 \n\t"
185 "vrev64.32 d6,d1 \n\t"
186 "vrev64.32 d5,d2 \n\t"
187 "vrev64.32 d4,d3 \n\t"
188
189 "vstm %[d]!, {d4,d5,d6,d7} \n\t"
190
191 "cmp %[tmp], %[d] \n\t"
192 "bhi "AP"quadloop \n\t"
193
194
195 AP "loopout: \n\t"
196 "cmp %[d], %[e] \n\t"
197 "beq "AP"done \n\t"
198 "sub %[tmp],%[e], %[d] \n\t"
199 "cmp %[tmp],$0x04 \n\t"
200 "beq "AP"singleloop2 \n\t"
201
202 AP "dualloop2: \n\t"
203 "sub %[tmp],%[e],$0x7 \n\t"
204 AP "dualloop2int: \n\t"
205 "sub %[s], #8 \n\t"
206 "vldm %[s], {d0} \n\t"
207 "vrev64.32 d1,d0 \n\t"
208 "vstm %[d]!, {d1} \n\t"
209
210 "cmp %[tmp], %[d] \n\t"
211 "bhi "AP"dualloop2int \n\t"
212
213 // Single ??
214 "cmp %[e], %[d] \n\t"
215 "beq "AP"done \n\t"
216
217 AP "singleloop2: \n\t"
218 "sub %[s], #4 \n\t"
219 "vld1.32 d0[0], [%[s]] \n\t"
220 "vst1.32 d0[0], [%[d]] \n\t"
221
222 AP "done:\n\t"
223
224 : // No output regs
225 // Input
226 : [s] "r" (src + len), [e] "r" (dst + len), [d] "r" (dst),[tmp] "r" (tmp)
227 // Clobbered
228 : "q0","q1","q2","q3","0","1","memory"
229 );
230#undef AP
231
232}
233#endif
234
235
236static void
237evas_common_copy_pixels_c(DATA32 *src, DATA32 *dst, int len)
238{
239 DATA32 *dst_end = dst + len;
240
241 while (dst < dst_end) *dst++ = *src++;
242}
243
244#ifdef BUILD_MMX
245static void
246evas_common_copy_pixels_mmx(DATA32 *src, DATA32 *dst, int len)
247{ // XXX cppcheck: [./src/lib/engines/common/evas_blit_main.c:248]: (error) Invalid number of character ({). Can't process file.
248 // so... wtf? what's wrong with this { ? or anytrhing surrounding it?
249 DATA32 *dst_end, *dst_end_pre;
250#ifdef ALIGN_FIX
251 intptr_t src_align;
252 intptr_t dst_align;
253
254 src_align = (intptr_t)src & 0x3f; /* 64 byte alignment */
255 dst_align = (intptr_t)dst & 0x3f; /* 64 byte alignment */
256
257 if ((src_align != dst_align) ||
258 ((src_align & 0x3) != 0))
259 {
260 evas_common_copy_pixels_c(src, dst, len);
261 return;
262 }
263
264 while ((src_align > 0) && (len > 0))
265 {
266 *dst++ = *src++;
267 len--;
268 src_align -= sizeof(DATA32);
269 }
270#endif /* ALIGN_FIX */
271
272 dst_end = dst + len;
273 dst_end_pre = dst + ((len / 16) * 16);
274
275 while (dst < dst_end_pre)
276 {
277 MOVE_16DWORDS_MMX(src, dst);
278 src += 16;
279 dst += 16;
280 }
281 while (dst < dst_end) *dst++ = *src++;
282}
283#endif
284
285#ifdef BUILD_MMX
286static void
287evas_common_copy_pixels_mmx2(DATA32 *src, DATA32 *dst, int len)
288{
289 DATA32 *dst_end, *dst_end_pre;
290#ifdef ALIGN_FIX
291 intptr_t src_align;
292 intptr_t dst_align;
293
294 src_align = (intptr_t)src & 0x3f; /* 64 byte alignment */
295 dst_align = (intptr_t)dst & 0x3f; /* 64 byte alignment */
296
297 if ((src_align != dst_align) ||
298 ((src_align & 0x3) != 0))
299 {
300 evas_common_copy_pixels_c(src, dst, len);
301 return;
302 }
303
304 while ((src_align > 0) && (len > 0))
305 {
306 *dst++ = *src++;
307 len--;
308 src_align -= sizeof(DATA32);
309 }
310#endif
311
312 dst_end = dst + len;
313 dst_end_pre = dst + ((len / 16) * 16);
314
315 while (dst < dst_end_pre)
316 {
317 MOVE_16DWORDS_MMX(src, dst);
318 src += 16;
319 dst += 16;
320 }
321 while (dst < dst_end) *dst++ = *src++;
322}
323#endif
324
325#ifdef BUILD_NEON
326static void
327evas_common_copy_pixels_neon(DATA32 *src, DATA32 *dst, int len){
328 uint32_t *e,*tmp = (void *)37;
329 e = dst + len;
330#define AP "evas_common_copy_pixels_neon_"
331 asm volatile (
332 ".fpu neon \n\t"
333 // Can we do 32 byte?
334 "andS %[tmp], %[d], $0x1f \n\t"
335 "beq "AP"quadstart \n\t"
336
337 // Can we do at least 16 byte?
338 "andS %[tmp], %[d], $0x4 \n\t"
339 "beq "AP"dualstart \n\t"
340
341 // Only once
342 AP"singleloop: \n\t"
343 "vld1.32 d0[0], [%[s]]! \n\t"
344 "vst1.32 d0[0], [%[d]]! \n\t"
345
346 // Up to 3 times
347 AP"dualstart: \n\t"
348 "sub %[tmp], %[e], %[d] \n\t"
349 "cmp %[tmp], #31 \n\t"
350 "blt "AP"loopout \n\t"
351
352 "andS %[tmp], %[d], $0x1f \n\t"
353 "beq "AP"quadstart \n\t"
354
355 AP"dualloop: \n\t"
356 "vldm %[s]!, {d0} \n\t"
357 "vstm %[d]!, {d0} \n\t"
358
359 "andS %[tmp], %[d], $0x1f \n\t"
360 "bne "AP"dualloop \n\t"
361
362
363 AP"quadstart: \n\t"
364 "sub %[tmp], %[e], %[d] \n\t"
365 "cmp %[tmp], #64 \n\t"
366 "blt "AP"loopout \n\t"
367
368 "sub %[tmp],%[e],#63 \n\t"
369
370 AP "quadloop: \n\t"
371 "vldm %[s]!, {d0,d1,d2,d3} \n\t"
372 "vldm %[s]!, {d4,d5,d6,d7} \n\t"
373 "vstm %[d]!, {d0,d1,d2,d3} \n\t"
374 "vstm %[d]!, {d4,d5,d6,d7} \n\t"
375
376 "cmp %[tmp], %[d] \n\t"
377 "bhi "AP"quadloop \n\t"
378
379
380 AP "loopout: \n\t"
381 "cmp %[d], %[e] \n\t"
382 "beq "AP"done \n\t"
383 "sub %[tmp],%[e], %[d] \n\t"
384 "cmp %[tmp],$0x04 \n\t"
385 "beq "AP"singleloop2 \n\t"
386
387 AP "dualloop2: \n\t"
388 "sub %[tmp],%[e],$0x7 \n\t"
389 AP "dualloop2int: \n\t"
390 "vldm %[s]!, {d0} \n\t"
391 "vstm %[d]!, {d0} \n\t"
392
393 "cmp %[tmp], %[d] \n\t"
394 "bhi "AP"dualloop2int \n\t"
395
396 // Single ??
397 "cmp %[e], %[d] \n\t"
398 "beq "AP"done \n\t"
399
400 AP "singleloop2: \n\t"
401 "vld1.32 d0[0], [%[s]] \n\t"
402 "vst1.32 d0[0], [%[d]] \n\t"
403
404 AP "done:\n\t"
405
406 : // No output regs
407 // Input
408 : [s] "r" (src), [e] "r" (e), [d] "r" (dst),[tmp] "r" (tmp)
409 // Clobbered
410 : "q0","q1","q2","q3","memory"
411 );
412#undef AP
413
414}
415#endif /* BUILD_NEON */
416
417#ifdef BUILD_MMX
418static void
419evas_common_copy_pixels_sse(DATA32 *src, DATA32 *dst, int len)
420{
421 DATA32 *src_ptr, *dst_ptr, *dst_end_ptr;
422
423 dst_end_ptr = dst + len;
424 dst_end_ptr -= 15;
425 src_ptr = src;
426 dst_ptr = dst;
427 while (dst_ptr < dst_end_ptr)
428 {
429 MOVE_16DWORDS_MMX2(src_ptr, dst_ptr);
430 src_ptr+=16;
431 dst_ptr+=16;
432 }
433 dst_end_ptr = dst + len;
434 while (dst_ptr < dst_end_ptr)
435 {
436 *dst_ptr = *src_ptr;
437 src_ptr++;
438 dst_ptr++;
439 }
440#if 0
441#ifdef ALIGN_FIX
442 int src_align;
443 int dst_align;
444
445 src_align = (int)src & 0x3f; /* 64 byte alignment */
446 dst_align = (int)dst & 0x3f; /* 64 byte alignment */
447
448 if ((src_align != dst_align) ||
449 ((src_align & 0x3) != 0))
450 {
451 evas_common_copy_pixels_c(src, dst, len);
452 return;
453 }
454
455 while ((src_align > 0) && (len > 0))
456 {
457 *dst = *src;
458 dst++;
459 src++;
460 len--;
461 src_align -= sizeof(DATA32);
462 }
463#endif /* ALIGN_FIX */
464
465 src_ptr = src;
466 dst_ptr = dst;
467 dst_end_ptr = dst + len;
468 dst_end_ptr_pre = dst + ((len / 16) * 16);
469
470 while (dst_ptr < dst_end_ptr_pre)
471 {
472 prefetch(&src_ptr[16]);
473 MOVE_16DWORDS_MMX(src_ptr, dst_ptr);
474 src_ptr+=16;
475 dst_ptr+=16;
476 }
477 while (dst_ptr < dst_end_ptr)
478 {
479 *dst_ptr = *src_ptr;
480 src_ptr++;
481 dst_ptr++;
482 }
483#endif
484}
485#endif
486
487/****************************************************************************/
488
489static void
490evas_common_copy_pixels_rev_c(DATA32 *src, DATA32 *dst, int len)
491{
492 DATA32 *dst_end;
493
494 src = src + len - 1;
495 dst_end = dst - 1;
496 dst = dst + len - 1;
497
498 while (dst > dst_end) *dst-- = *src--;
499}
500
501#ifdef BUILD_MMX
502static void
503evas_common_copy_pixels_rev_mmx(DATA32 *src, DATA32 *dst, int len)
504{
505 DATA32 *dst_end, *dst_end_pre;
506
507 if (len >= 16)
508 {
509 src = src + len - 16;
510 dst_end = dst;
511 dst_end_pre = dst + len - ((len / 16) * 16);
512 dst = dst + len - 16;
513
514 while (dst >= dst_end_pre)
515 {
516 MOVE_16DWORDS_MMX(src, dst);
517 src -= 16;
518 dst -= 16;
519 }
520 src += 15;
521 dst += 15;
522 while (dst >= dst_end)
523 *dst-- = *src--;
524 }
525 else
526 {
527 src = src + len - 1;
528 dst_end = dst - 1;
529 dst = dst + len - 1;
530 while (dst > dst_end)
531 *dst-- = *src--;
532 }
533}
534#endif
535
536#ifdef BUILD_MMX
537static void
538evas_common_copy_pixels_rev_sse(DATA32 *src, DATA32 *dst, int len)
539{
540 DATA32 *src_ptr, *dst_ptr, *dst_end_ptr, *dst_end_ptr_pre;
541
542 src_ptr = src + len - 16;
543 dst_ptr = dst + len - 16;
544 dst_end_ptr = dst;
545 dst_end_ptr_pre = dst + len - ((len / 16) * 16);
546
547 if (len >= 16)
548 {
549 while (dst_ptr >= dst_end_ptr_pre)
550 {
551 prefetch(&src_ptr[-16]);
552 MOVE_10DWORDS_MMX(src_ptr, dst_ptr);
553 src_ptr -= 16;
554 dst_ptr -= 16;
555 }
556 src_ptr += 15;
557 dst_ptr += 15;
558 while (dst_ptr >= dst_end_ptr)
559 {
560 *dst_ptr = *src_ptr;
561 src_ptr--;
562 dst_ptr--;
563 }
564 }
565 else
566 {
567 src_ptr = src + len - 1;
568 dst_ptr = dst + len - 1;
569 while (dst_ptr >= dst_end_ptr)
570 {
571 *dst_ptr = *src_ptr;
572 src_ptr--;
573 dst_ptr--;
574 }
575 }
576}
577#endif
578
579Gfx_Func_Copy
580evas_common_draw_func_copy_get(int pixels, int reverse)
581{
582 if (reverse == -1)
583 return evas_common_copy_rev_pixels_c;
584 if (reverse)
585 {
586#ifdef BUILD_MMX
587 if (evas_common_cpu_has_feature(CPU_FEATURE_SSE) && (pixels > 64 * 64))
588 return evas_common_copy_pixels_rev_sse;
589 else if (evas_common_cpu_has_feature(CPU_FEATURE_MMX))
590 return evas_common_copy_pixels_rev_mmx;
591#endif
592#ifdef BUILD_NEON
593 if (evas_common_cpu_has_feature(CPU_FEATURE_NEON))
594 return evas_common_copy_pixels_rev_neon;
595#endif
596 return evas_common_copy_pixels_rev_c;
597 }
598 else
599 {
600#ifdef BUILD_MMX
601 if (evas_common_cpu_has_feature(CPU_FEATURE_SSE) && (pixels > 64 * 64))
602 return evas_common_copy_pixels_sse;
603 else if (evas_common_cpu_has_feature(CPU_FEATURE_MMX2))
604 return evas_common_copy_pixels_mmx2;
605 else if (evas_common_cpu_has_feature(CPU_FEATURE_MMX))
606 return evas_common_copy_pixels_mmx;
607#endif
608#ifdef BUILD_NEON
609 if (evas_common_cpu_has_feature(CPU_FEATURE_NEON))
610 return evas_common_copy_pixels_neon;
611#endif
612 }
613 return evas_common_copy_pixels_c;
614}
diff --git a/legacy/evas/src/lib/engines/common/evas_convert_color.c b/legacy/evas/src/lib/engines/common/evas_convert_color.c
deleted file mode 100644
index 70a9e90418..0000000000
--- a/legacy/evas/src/lib/engines/common/evas_convert_color.c
+++ /dev/null
@@ -1,246 +0,0 @@
1#include "evas_common.h"
2#include "evas_convert_color.h"
3
4
5EAPI DATA32
6evas_common_convert_argb_premul(DATA32 *data, unsigned int len)
7{
8 DATA32 *de = data + len;
9 DATA32 nas = 0;
10
11 while (data < de)
12 {
13 DATA32 a = 1 + (*data >> 24);
14
15 *data = (*data & 0xff000000) +
16 (((((*data) >> 8) & 0xff) * a) & 0xff00) +
17 (((((*data) & 0x00ff00ff) * a) >> 8) & 0x00ff00ff);
18 data++;
19
20 if ((a == 1) || (a == 256))
21 nas++;
22 }
23
24 return nas;
25}
26
27EAPI void
28evas_common_convert_argb_unpremul(DATA32 *data, unsigned int len)
29{
30 DATA32 *de = data + len;
31
32 while (data < de)
33 {
34 DATA32 a = (*data >> 24);
35
36 if ((a > 0) && (a < 255))
37 *data = ARGB_JOIN(a,
38 (R_VAL(data) * 255) / a,
39 (G_VAL(data) * 255) / a,
40 (B_VAL(data) * 255) / a);
41 data++;
42 }
43
44}
45
46EAPI void
47evas_common_convert_color_argb_premul(int a, int *r, int *g, int *b)
48{
49 a++;
50 if (r) { *r = (a * *r) >> 8; }
51 if (g) { *g = (a * *g) >> 8; }
52 if (b) { *b = (a * *b) >> 8; }
53}
54
55EAPI void
56evas_common_convert_color_argb_unpremul(int a, int *r, int *g, int *b)
57{
58 if (!a) return;
59 if (r) { *r = (255 * *r) / a; }
60 if (g) { *g = (255 * *g) / a; }
61 if (b) { *b = (255 * *b) / a; }
62}
63
64EAPI void
65evas_common_convert_color_hsv_to_rgb(float h, float s, float v, int *r, int *g, int *b)
66{
67 int i;
68 float f;
69
70 v *= 255;
71 if (s == 0)
72 {
73 if (r) *r = v;
74 if (g) *g = v;
75 if (b) *b = v;
76 return;
77 }
78
79 h /= 60;
80 i = h;
81 f = h - i;
82
83 s *= v;
84 f *= s;
85 s = v - s;
86
87 switch (i)
88 {
89 case 1:
90 if (r) *r = v - f; if (g) *g = v; if (b) *b = s;
91 return;
92 case 2:
93 if (r) *r = s; if (g) *g = v; if (b) *b = s + f;
94 return;
95 case 3:
96 if (r) *r = s; if (g) *g = v - f; if (b) *b = v;
97 return;
98 case 4:
99 if (r) *r = s + f; if (g) *g = s; if (b) *b = v;
100 return;
101 case 5:
102 if (r) *r = v; if (g) *g = s; if (b) *b = v - f;
103 return;
104 default:
105 if (r) *r = v; if (g) *g = s + f; if (b) *b = s;
106 break;
107 }
108}
109
110EAPI void
111evas_common_convert_color_rgb_to_hsv(int r, int g, int b, float *h, float *s, float *v)
112{
113 int max, min, d = r - g;
114
115 //set min to MIN(g,r)
116 d = (d & (~(d >> 8)));
117 min = r - d;
118 //set max to MAX(g,r)
119 max = g + d;
120
121 //set min to MIN(b,min)
122 d = min - b;
123 min -= (d & (~(d >> 8)));
124
125 //set max to MAX(max,b)
126 d = b - max;
127 max += (d & (~(d >> 8)));
128
129 d = max - min;
130
131 if (v) *v = (max / 255.0);
132 if (!max || !d)
133 {
134 if (s) *s = 0;
135 if (h) *h = 0;
136 return;
137 }
138
139 if (s) *s = (d / (float)max);
140 if (r == max)
141 {
142 if (h)
143 {
144 *h = 60 * ((g - b) / (float)d);
145 if (*h < 0) *h += 360;
146 }
147 return;
148 }
149 if (g == max)
150 {
151 if (h)
152 {
153 *h = 120 + (60 * ((b - r) / (float)d));
154 if (*h < 0) *h += 360;
155 }
156 return;
157 }
158 if (h)
159 {
160 *h = 240 + (60 * ((r - g) / (float)d));
161 if (*h < 0) *h += 360;
162 }
163}
164
165EAPI void
166evas_common_convert_color_hsv_to_rgb_int(int h, int s, int v, int *r, int *g, int *b)
167{
168 int i, f;
169
170 if (!s)
171 {
172 *r = *g = *b = v;
173 return;
174 }
175
176 i = h / 255;
177 f = h - (i * 255);
178 s = (v * s) / 255;
179 f = (s * f) / 255;
180 s = v - s;
181
182 switch (i)
183 {
184 case 1:
185 *r = v - f; *g = v; *b = s;
186 return;
187 case 2:
188 *r = s; *g = v; *b = s + f;
189 return;
190 case 3:
191 *r = s; *g = v - f; *b = v;
192 return;
193 case 4:
194 *r = s + f; *g = s; *b = v;
195 return;
196 case 5:
197 *r = v; *g = s; *b = v - f;
198 return;
199 default:
200 *r = v; *g = s + f; *b = s;
201 break;
202 }
203}
204
205EAPI void
206evas_common_convert_color_rgb_to_hsv_int(int r, int g, int b, int *h, int *s, int *v)
207{
208 int min, max, d = r - g;
209
210 d = (d & (~(d >> 8)));
211 min = r - d;
212 max = g + d;
213
214 d = min - b;
215 min -= (d & (~(d >> 8)));
216
217 d = b - max;
218 max += (d & (~(d >> 8)));
219
220 d = max - min;
221
222 *v = max;
223 if (!max)
224 {
225 *s = *h = 0;
226 return;
227 }
228
229 *s = ((d * 255) / max);
230
231 if (r == max)
232 {
233 *h = (((g - b) * 255) / d);
234 if (*h < 0) *h += 1530;
235 return;
236 }
237 if (g == max)
238 {
239 *h = 510 + (((b - r) * 255) / d);
240 if (*h < 0) *h += 1530;
241 return;
242 }
243 *h = 1020 + (((r - g) * 255) / d);
244 if (*h < 0) *h += 1530;
245
246}
diff --git a/legacy/evas/src/lib/engines/common/evas_convert_color.h b/legacy/evas/src/lib/engines/common/evas_convert_color.h
deleted file mode 100644
index 0224879edd..0000000000
--- a/legacy/evas/src/lib/engines/common/evas_convert_color.h
+++ /dev/null
@@ -1,16 +0,0 @@
1#ifndef _EVAS_CONVERT_COLOR_H
2#define _EVAS_CONVERT_COLOR_H
3
4
5EAPI DATA32 evas_common_convert_argb_premul (DATA32 *src, unsigned int len);
6EAPI void evas_common_convert_argb_unpremul (DATA32 *src, unsigned int len);
7EAPI void evas_common_convert_color_argb_premul (int a, int *r, int *g, int *b);
8EAPI void evas_common_convert_color_argb_unpremul (int a, int *r, int *g, int *b);
9
10EAPI void evas_common_convert_color_hsv_to_rgb (float h, float s, float v, int *r, int *g, int *b);
11EAPI void evas_common_convert_color_rgb_to_hsv (int r, int g, int b, float *h, float *s, float *v);
12EAPI void evas_common_convert_color_hsv_to_rgb_int (int h, int s, int v, int *r, int *g, int *b);
13EAPI void evas_common_convert_color_rgb_to_hsv_int (int r, int g, int b, int *h, int *s, int *v);
14
15
16#endif /* _EVAS_CONVERT_COLOR_H */
diff --git a/legacy/evas/src/lib/engines/common/evas_convert_colorspace.c b/legacy/evas/src/lib/engines/common/evas_convert_colorspace.c
deleted file mode 100644
index 013c2e7896..0000000000
--- a/legacy/evas/src/lib/engines/common/evas_convert_colorspace.c
+++ /dev/null
@@ -1,186 +0,0 @@
1#include "evas_common.h"
2#include "evas_convert_colorspace.h"
3
4#define CONVERT_RGB_565_TO_RGB_888(s) \
5 (((((s) << 3) & 0xf8) | (((s) >> 2) & 0x7)) | \
6 ((((s) << 5) & 0xfc00) | (((s) >> 1) & 0x300)) | \
7 ((((s) << 8) & 0xf80000) | (((s) << 3) & 0x70000)))
8
9#define CONVERT_A5P_TO_A8(s) \
10 ((((s) << 3) & 0xf8) | (((s) >> 2) & 0x7))
11
12#define CONVERT_ARGB_8888_TO_A_8(s) ((s) >> 24)
13
14
15static inline void *
16evas_common_convert_argb8888_to_rgb565_a5p(void *data __UNUSED__, int w __UNUSED__, int h __UNUSED__, int stride __UNUSED__, Eina_Bool has_alpha __UNUSED__)
17{
18 return NULL;
19}
20
21static inline void *
22evas_common_convert_rgb565_a5p_to_argb8888(void *data, int w, int h, int stride, Eina_Bool has_alpha)
23{
24 DATA16 *src, *end;
25 DATA32 *ret, *dst;
26
27 src = data;
28 end = src + (stride * h);
29 ret = malloc(w * h * sizeof(DATA32));
30
31 dst = ret;
32 if (has_alpha)
33 {
34 DATA8 *alpha;
35
36 alpha = (DATA8 *)end;
37 for (; src < end; src++, alpha++, dst++)
38 *dst = (CONVERT_A5P_TO_A8(*alpha) << 24) |
39 CONVERT_RGB_565_TO_RGB_888(*src);
40 }
41 else
42 {
43 for (; src < end; src++, dst++)
44 *dst = CONVERT_RGB_565_TO_RGB_888(*src);
45 }
46 return ret;
47}
48
49static inline void *
50evas_common_convert_argb8888_to_a8(void *data, int w, int h, int stride, Eina_Bool has_alpha)
51{
52 uint32_t *src, *end;
53 uint8_t *ret, *dst;
54
55 src = data;
56 end = src + (stride * h);
57 ret = malloc(w * h);
58 if (!ret) return NULL;
59
60 if (!has_alpha)
61 {
62 return memset(ret, 0xff, w * h);
63 }
64
65 dst = ret;
66 for ( ; src < end ; src++, dst++)
67 *dst = CONVERT_ARGB_8888_TO_A_8(*src);
68 return ret;
69}
70
71
72
73EAPI void *
74evas_common_convert_argb8888_to(void *data, int w, int h, int stride, Eina_Bool has_alpha, Evas_Colorspace cspace)
75{
76 switch (cspace)
77 {
78 case EVAS_COLORSPACE_RGB565_A5P:
79 return evas_common_convert_argb8888_to_rgb565_a5p(data, w, h, stride, has_alpha);
80 default:
81 break;
82 }
83 return NULL;
84}
85
86EAPI void *
87evas_common_convert_rgb565_a5p_to(void *data, int w, int h, int stride, Eina_Bool has_alpha, Evas_Colorspace cspace)
88{
89 switch (cspace)
90 {
91 case EVAS_COLORSPACE_ARGB8888:
92 return evas_common_convert_rgb565_a5p_to_argb8888(data, w, h, stride, has_alpha);
93 default:
94 break;
95 }
96 return NULL;
97}
98
99EAPI void *
100evas_common_convert_yuv_422_601_to(void *data, int w, int h, Evas_Colorspace cspace)
101{
102 switch (cspace)
103 {
104 case EVAS_COLORSPACE_ARGB8888:
105 {
106 void *dst;
107
108 fprintf(stderr, "to argb888\n");
109
110 dst = malloc(sizeof (unsigned int) * w * h);
111 if (!dst) return NULL;
112
113 evas_common_convert_yuv_422_601_rgba(data, dst, w, h);
114 return dst;
115 }
116 default:
117 break;
118 }
119 return NULL;
120}
121
122EAPI void *
123evas_common_convert_yuv_422P_601_to(void *data, int w, int h, Evas_Colorspace cspace)
124{
125 switch (cspace)
126 {
127 case EVAS_COLORSPACE_ARGB8888:
128 {
129 void *dst;
130
131 dst = malloc(sizeof (unsigned int) * w * h);
132 if (!dst) return NULL;
133
134 evas_common_convert_yuv_420p_601_rgba(data, dst, w, h);
135 break;
136 }
137 default:
138 break;
139 }
140 return NULL;
141}
142
143EAPI void *
144evas_common_convert_yuv_420_601_to(void *data, int w, int h, Evas_Colorspace cspace)
145{
146 switch (cspace)
147 {
148 case EVAS_COLORSPACE_ARGB8888:
149 {
150 void *dst;
151
152 dst = malloc(sizeof (unsigned int) * w * h);
153 if (!dst) return NULL;
154
155 evas_common_convert_yuv_420_601_rgba(data, dst, w, h);
156 break;
157 }
158 default:
159 break;
160 }
161 return NULL;
162}
163
164EAPI void *
165evas_common_convert_yuv_420T_601_to(void *data, int w, int h, Evas_Colorspace cspace)
166{
167 switch (cspace)
168 {
169 case EVAS_COLORSPACE_ARGB8888:
170 {
171 void *dst;
172
173 dst = malloc(sizeof (unsigned int) * w * h);
174 if (!dst) return NULL;
175
176 evas_common_convert_yuv_420_601_rgba(data, dst, w, h);
177 break;
178 }
179 default:
180 break;
181 }
182 return NULL;
183}
184
185
186/* vim:set ts=8 sw=3 sts=3 expandtab cino=>5n-2f0^-2{2(0W1st0 :*/
diff --git a/legacy/evas/src/lib/engines/common/evas_convert_colorspace.h b/legacy/evas/src/lib/engines/common/evas_convert_colorspace.h
deleted file mode 100644
index f3bec7862e..0000000000
--- a/legacy/evas/src/lib/engines/common/evas_convert_colorspace.h
+++ /dev/null
@@ -1,12 +0,0 @@
1#ifndef _EVAS_CONVERT_COLORSPACE_H
2#define _EVAS_CONVERT_COLORSPACE_H
3
4
5EAPI void *evas_common_convert_argb8888_to (void *data, int w, int h, int stride, Eina_Bool has_alpha, Evas_Colorspace cspace);
6EAPI void *evas_common_convert_rgb565_a5p_to (void *data, int w, int h, int stride, Eina_Bool has_alpha, Evas_Colorspace cspace);
7EAPI void *evas_common_convert_yuv_422P_601_to(void *data, int w, int h, Evas_Colorspace cspace);
8EAPI void *evas_common_convert_yuv_422_601_to (void *data, int w, int h, Evas_Colorspace cspace);
9EAPI void *evas_common_convert_yuv_420_601_to (void *data, int w, int h, Evas_Colorspace cspace);
10EAPI void *evas_common_convert_yuv_420T_601_to(void *data, int w, int h, Evas_Colorspace cspace);
11
12#endif /* _EVAS_CONVERT_COLORSPACE_H */
diff --git a/legacy/evas/src/lib/engines/common/evas_convert_gry_1.h b/legacy/evas/src/lib/engines/common/evas_convert_gry_1.h
deleted file mode 100644
index 38d67763c0..0000000000
--- a/legacy/evas/src/lib/engines/common/evas_convert_gry_1.h
+++ /dev/null
@@ -1,9 +0,0 @@
1#ifndef _EVAS_CONVERT_GRY_1_H
2#define _EVAS_CONVERT_GRY_1_H
3
4
5void evas_common_convert_rgba_to_1bpp_gry_1_dith (DATA32 *src, DATA8 *dst, int src_jump, int dst_jump, int w, int h, int dith_x, int dith_y, DATA8 *pal);
6
7
8
9#endif /* _EVAS_CONVERT_GRY_1_H */
diff --git a/legacy/evas/src/lib/engines/common/evas_convert_gry_8.c b/legacy/evas/src/lib/engines/common/evas_convert_gry_8.c
deleted file mode 100644
index bf45fd7a41..0000000000
--- a/legacy/evas/src/lib/engines/common/evas_convert_gry_8.c
+++ /dev/null
@@ -1,68 +0,0 @@
1#include "evas_common.h"
2#include "evas_convert_gry_8.h"
3
4#ifdef USE_DITHER_44
5extern const DATA8 _evas_dither_44[4][4];
6#endif
7#ifdef USE_DITHER_128128
8extern const DATA8 _evas_dither_128128[128][128];
9#endif
10
11void evas_common_convert_rgba_to_8bpp_gry_256_dith (DATA32 *src, DATA8 *dst, int src_jump, int dst_jump, int w, int h, int dith_x __UNUSED__, int dith_y __UNUSED__, DATA8 *pal __UNUSED__)
12{
13 DATA32 *src_ptr;
14 DATA8 *dst_ptr;
15 int x, y;
16 DATA8 r, g, b;
17 DATA32 gry8;
18
19 dst_ptr = (DATA8 *)dst;
20
21 CONVERT_LOOP_START_ROT_0();
22
23 r = (R_VAL(src_ptr));
24 g = (G_VAL(src_ptr));
25 b = (B_VAL(src_ptr));
26
27 // Y = 0.299 * R + 0.587 * G + 0.114 * B;
28 gry8 = ((r * 19595) + (g * 38469) + (b * 7471)) >> 16;
29
30 *dst_ptr = gry8;
31
32 CONVERT_LOOP_END_ROT_0();
33}
34
35void evas_common_convert_rgba_to_8bpp_gry_64_dith (DATA32 *src __UNUSED__, DATA8 *dst __UNUSED__, int src_jump __UNUSED__, int dst_jump __UNUSED__, int w __UNUSED__, int h __UNUSED__, int dith_x __UNUSED__, int dith_y __UNUSED__, DATA8 *pal __UNUSED__){}
36
37void evas_common_convert_rgba_to_8bpp_gry_16_dith (DATA32 *src, DATA8 *dst, int src_jump, int dst_jump, int w, int h, int dith_x, int dith_y, DATA8 *pal __UNUSED__)
38{
39 DATA32 *src_ptr;
40 DATA8 *dst_ptr;
41 int x, y;
42 DATA8 r, g, b;
43 DATA32 gry8;
44 DATA8 dith;
45
46 dst_ptr = (DATA8 *)dst;
47
48 CONVERT_LOOP_START_ROT_0();
49
50 dith = DM_TABLE[(x + dith_x) & DM_MSK][(y + dith_y) & DM_MSK] >> DM_SHF(4);
51
52 r = (R_VAL(src_ptr));
53 g = (G_VAL(src_ptr));
54 b = (B_VAL(src_ptr));
55
56 // Y = 0.299 * R + 0.587 * G + 0.114 * B;
57 gry8 = ((r * 19595) + (g * 38469) + (b * 7471)) >> 16;
58
59 if (((gry8 - gry8 * 255 / 4) >= dith) && (gry8 < 0x07)) gry8++;
60
61 *dst_ptr = gry8;
62
63 CONVERT_LOOP_END_ROT_0();
64}
65
66void evas_common_convert_rgba_to_8bpp_gry_4_dith (DATA32 *src __UNUSED__, DATA8 *dst __UNUSED__, int src_jump __UNUSED__, int dst_jump __UNUSED__, int w __UNUSED__, int h __UNUSED__, int dith_x __UNUSED__, int dith_y __UNUSED__, DATA8 *pal __UNUSED__){}
67
68void evas_common_convert_rgba_to_8bpp_gry_1_dith (DATA32 *src __UNUSED__, DATA8 *dst __UNUSED__, int src_jump __UNUSED__, int dst_jump __UNUSED__, int w __UNUSED__, int h __UNUSED__, int dith_x __UNUSED__, int dith_y __UNUSED__, DATA8 *pal __UNUSED__){}
diff --git a/legacy/evas/src/lib/engines/common/evas_convert_gry_8.h b/legacy/evas/src/lib/engines/common/evas_convert_gry_8.h
deleted file mode 100644
index d70f59d634..0000000000
--- a/legacy/evas/src/lib/engines/common/evas_convert_gry_8.h
+++ /dev/null
@@ -1,12 +0,0 @@
1#ifndef _EVAS_CONVERT_GRY_8_H
2#define _EVAS_CONVERT_GRY_8_H
3
4
5void evas_common_convert_rgba_to_8bpp_gry_256_dith (DATA32 *src, DATA8 *dst, int src_jump, int dst_jump, int w, int h, int dith_x, int dith_y, DATA8 *pal);
6void evas_common_convert_rgba_to_8bpp_gry_64_dith (DATA32 *src, DATA8 *dst, int src_jump, int dst_jump, int w, int h, int dith_x, int dith_y, DATA8 *pal);
7void evas_common_convert_rgba_to_8bpp_gry_16_dith (DATA32 *src, DATA8 *dst, int src_jump, int dst_jump, int w, int h, int dith_x, int dith_y, DATA8 *pal);
8void evas_common_convert_rgba_to_8bpp_gry_4_dith (DATA32 *src, DATA8 *dst, int src_jump, int dst_jump, int w, int h, int dith_x, int dith_y, DATA8 *pal);
9void evas_common_convert_rgba_to_8bpp_gry_1_dith (DATA32 *src, DATA8 *dst, int src_jump, int dst_jump, int w, int h, int dith_x, int dith_y, DATA8 *pal);
10
11
12#endif /* _EVAS_CONVERT_GRY_8_H */
diff --git a/legacy/evas/src/lib/engines/common/evas_convert_grypal_6.c b/legacy/evas/src/lib/engines/common/evas_convert_grypal_6.c
deleted file mode 100644
index c2acef7d04..0000000000
--- a/legacy/evas/src/lib/engines/common/evas_convert_grypal_6.c
+++ /dev/null
@@ -1,21 +0,0 @@
1#include "evas_common.h"
2#include "evas_convert_grypal_6.h"
3
4void evas_common_convert_rgba_to_8bpp_pal_gray64(DATA32 *src, DATA8 *dst, int src_jump, int dst_jump, int w, int h, int dith_x __UNUSED__, int dith_y __UNUSED__, DATA8 *pal)
5{
6 DATA32 *src_ptr;
7 DATA8 *dst_ptr;
8 int x, y;
9 DATA8 Y;
10
11 dst_ptr = dst;
12 CONVERT_LOOP_START_ROT_0();
13
14 /* RGB -> YUV conversion */
15 Y = ((R_VAL(src_ptr) * 76) +
16 (G_VAL(src_ptr) * 151) +
17 (B_VAL(src_ptr) * 29)) >> 10;
18 *dst_ptr = pal[Y];
19
20 CONVERT_LOOP_END_ROT_0();
21}
diff --git a/legacy/evas/src/lib/engines/common/evas_convert_grypal_6.h b/legacy/evas/src/lib/engines/common/evas_convert_grypal_6.h
deleted file mode 100644
index 5f839c2bcc..0000000000
--- a/legacy/evas/src/lib/engines/common/evas_convert_grypal_6.h
+++ /dev/null
@@ -1,6 +0,0 @@
1#ifndef _EVAS_CONVERT_GRY_4_H
2#define _EVAS_CONVERT_GRY_4_H
3
4void evas_common_convert_rgba_to_8bpp_pal_gray64 (DATA32 *src, DATA8 *dst, int src_jump, int dst_jump, int w, int h, int dith_x, int dith_y, DATA8 *pal);
5
6#endif /* _EVAS_CONVERT_GRY_4_H */
diff --git a/legacy/evas/src/lib/engines/common/evas_convert_main.c b/legacy/evas/src/lib/engines/common/evas_convert_main.c
deleted file mode 100644
index 39e6d6c06a..0000000000
--- a/legacy/evas/src/lib/engines/common/evas_convert_main.c
+++ /dev/null
@@ -1,478 +0,0 @@
1#include "evas_common.h"
2#include "evas_convert_rgb_8.h"
3#include "evas_convert_rgb_16.h"
4#include "evas_convert_rgb_24.h"
5#include "evas_convert_rgb_32.h"
6#include "evas_convert_grypal_6.h"
7#include "evas_convert_gry_8.h"
8#include "evas_convert_yuv.h"
9
10#ifdef USE_DITHER_44
11const DATA8 _evas_dither_44[4][4] =
12{
13 { 0, 8, 2, 10},
14 {12, 4, 14, 6},
15 { 3, 11, 1, 9},
16 {15, 7, 13, 5}
17};
18#endif
19
20#ifdef USE_DITHER_128128
21const DATA8 _evas_dither_128128[128][128] =
22{
23 { 0, 41, 23, 5, 17, 39, 7, 15, 62, 23, 40, 51, 31, 47, 9, 32, 52, 27, 57, 25, 6, 61, 27, 52, 37, 7, 40, 63, 18, 36, 10, 42, 25, 62, 45, 34, 20, 42, 37, 14, 35, 29, 50, 10, 61, 2, 40, 8, 37, 12, 58, 22, 5, 41, 10, 39, 0, 60, 11, 46, 2, 55, 38, 17, 36, 59, 13, 54, 37, 56, 8, 29, 16, 13, 63, 22, 41, 55, 7, 20, 49, 14, 23, 55, 37, 23, 19, 36, 15, 49, 23, 63, 30, 14, 38, 27, 53, 13, 22, 41, 19, 31, 7, 19, 50, 30, 49, 16, 3, 32, 56, 40, 29, 34, 8, 48, 19, 45, 4, 51, 12, 46, 35, 49, 16, 42, 12, 62 },
24 { 30, 57, 36, 54, 47, 34, 52, 27, 43, 4, 28, 7, 17, 36, 62, 13, 44, 7, 18, 48, 33, 21, 44, 14, 30, 47, 12, 33, 5, 55, 31, 58, 13, 30, 4, 17, 52, 10, 60, 26, 46, 0, 39, 27, 42, 22, 47, 25, 60, 32, 9, 38, 48, 17, 59, 30, 49, 18, 34, 25, 51, 19, 5, 48, 21, 8, 28, 46, 1, 32, 41, 19, 54, 47, 37, 18, 28, 11, 44, 30, 39, 56, 2, 33, 8, 42, 61, 28, 58, 8, 46, 9, 41, 4, 58, 7, 21, 48, 59, 10, 52, 14, 42, 57, 12, 25, 7, 53, 42, 24, 11, 50, 17, 59, 42, 2, 36, 60, 32, 17, 63, 29, 21, 7, 59, 32, 24, 39 },
25 { 22, 8, 16, 32, 3, 25, 13, 57, 18, 45, 58, 39, 55, 20, 5, 42, 23, 34, 63, 1, 51, 10, 58, 4, 60, 23, 53, 27, 44, 21, 3, 48, 8, 50, 43, 54, 27, 32, 5, 55, 21, 58, 12, 53, 6, 36, 14, 50, 17, 29, 53, 15, 24, 52, 7, 36, 13, 42, 4, 53, 9, 35, 61, 26, 56, 32, 49, 15, 62, 23, 6, 60, 2, 31, 4, 48, 58, 38, 15, 61, 5, 25, 47, 28, 50, 15, 7, 40, 3, 32, 33, 52, 25, 50, 35, 42, 61, 3, 28, 36, 23, 63, 4, 33, 46, 62, 36, 23, 60, 6, 54, 28, 4, 37, 23, 55, 25, 8, 42, 54, 14, 6, 56, 38, 19, 52, 4, 46 },
26 { 48, 53, 43, 12, 45, 63, 30, 37, 9, 34, 21, 1, 25, 47, 29, 58, 3, 54, 15, 39, 29, 17, 38, 35, 20, 43, 1, 49, 15, 59, 29, 39, 22, 35, 16, 23, 1, 47, 39, 18, 8, 44, 25, 31, 57, 19, 63, 4, 45, 3, 42, 61, 1, 31, 45, 20, 57, 29, 62, 21, 32, 41, 14, 44, 3, 39, 5, 34, 10, 43, 51, 35, 23, 52, 40, 10, 21, 1, 53, 18, 51, 43, 12, 62, 18, 54, 26, 51, 20, 57, 14, 1, 62, 16, 11, 18, 32, 39, 17, 44, 1, 48, 26, 37, 18, 2, 51, 14, 28, 45, 35, 18, 57, 13, 47, 11, 51, 20, 2, 39, 31, 47, 25, 1, 50, 11, 60, 7 },
27 { 18, 28, 1, 56, 21, 10, 51, 2, 46, 54, 14, 61, 11, 50, 13, 38, 19, 31, 45, 9, 55, 24, 47, 5, 54, 9, 62, 11, 35, 8, 51, 14, 57, 6, 63, 40, 58, 14, 51, 28, 62, 34, 15, 48, 1, 41, 30, 35, 55, 21, 34, 11, 49, 37, 8, 52, 4, 23, 15, 43, 1, 58, 11, 23, 53, 16, 55, 26, 58, 18, 27, 12, 45, 14, 25, 63, 42, 33, 27, 35, 9, 31, 21, 38, 1, 44, 34, 12, 48, 38, 21, 44, 29, 47, 26, 53, 1, 46, 54, 8, 59, 29, 11, 55, 22, 41, 33, 20, 39, 1, 48, 9, 44, 32, 5, 62, 29, 44, 57, 23, 10, 58, 34, 43, 15, 37, 26, 33 },
28 { 51, 38, 59, 24, 35, 42, 19, 60, 5, 32, 41, 26, 43, 33, 7, 53, 48, 11, 59, 23, 42, 2, 61, 30, 16, 40, 32, 24, 56, 41, 19, 33, 37, 26, 47, 9, 31, 22, 2, 45, 9, 54, 4, 37, 21, 52, 11, 23, 7, 57, 16, 25, 55, 18, 63, 27, 46, 39, 56, 10, 50, 37, 29, 47, 19, 63, 24, 9, 46, 2, 39, 60, 9, 57, 30, 7, 49, 11, 59, 3, 45, 57, 5, 60, 29, 22, 5, 60, 30, 9, 59, 18, 40, 6, 57, 36, 30, 12, 24, 34, 15, 40, 52, 6, 49, 9, 58, 4, 63, 12, 26, 61, 22, 53, 38, 16, 35, 14, 28, 50, 42, 17, 5, 28, 62, 20, 54, 12 },
29 { 26, 6, 31, 15, 49, 6, 38, 27, 22, 49, 16, 56, 2, 62, 30, 21, 0, 36, 28, 6, 49, 32, 13, 52, 26, 50, 19, 46, 3, 26, 62, 0, 53, 12, 29, 3, 53, 41, 60, 24, 38, 13, 58, 16, 43, 9, 59, 39, 46, 28, 44, 40, 2, 33, 13, 41, 16, 6, 47, 31, 26, 17, 57, 6, 38, 0, 42, 36, 29, 52, 20, 31, 48, 0, 34, 56, 20, 36, 23, 54, 14, 41, 24, 37, 10, 55, 46, 25, 16, 45, 36, 4, 55, 23, 15, 8, 50, 62, 5, 56, 44, 20, 13, 28, 59, 31, 24, 47, 31, 52, 37, 17, 40, 0, 26, 49, 3, 60, 7, 33, 0, 61, 53, 40, 8, 45, 2, 41 },
30 { 16, 63, 43, 4, 61, 24, 56, 13, 53, 8, 36, 12, 24, 41, 16, 46, 60, 26, 52, 39, 14, 57, 21, 37, 0, 45, 7, 59, 38, 17, 43, 10, 45, 20, 61, 43, 19, 11, 33, 17, 50, 32, 23, 61, 28, 49, 26, 0, 18, 51, 5, 60, 22, 58, 29, 0, 59, 34, 19, 62, 3, 52, 7, 44, 30, 59, 13, 50, 15, 62, 7, 17, 38, 22, 44, 15, 40, 4, 47, 28, 33, 17, 49, 16, 51, 40, 10, 56, 0, 53, 13, 49, 28, 38, 60, 21, 43, 19, 37, 27, 3, 51, 34, 39, 0, 45, 15, 43, 10, 21, 3, 55, 8, 33, 59, 10, 41, 18, 52, 24, 46, 20, 30, 13, 58, 22, 36, 57 },
31 { 50, 34, 11, 47, 29, 17, 44, 0, 33, 63, 28, 46, 52, 5, 57, 10, 42, 18, 4, 63, 20, 8, 44, 10, 56, 34, 14, 29, 5, 54, 23, 59, 32, 49, 7, 34, 49, 27, 56, 0, 42, 7, 46, 3, 40, 6, 54, 32, 62, 13, 36, 10, 47, 8, 35, 49, 24, 51, 12, 40, 22, 35, 60, 12, 22, 51, 33, 4, 40, 25, 43, 55, 5, 54, 12, 61, 26, 51, 8, 62, 0, 53, 7, 63, 2, 32, 19, 34, 42, 24, 31, 63, 2, 10, 45, 33, 0, 48, 9, 61, 22, 47, 8, 62, 18, 56, 7, 54, 27, 57, 46, 30, 50, 19, 45, 30, 56, 36, 22, 47, 11, 38, 3, 51, 32, 48, 18, 9 },
32 { 0, 21, 40, 19, 52, 9, 37, 48, 20, 40, 3, 18, 27, 38, 35, 22, 31, 56, 13, 35, 46, 28, 60, 40, 27, 18, 61, 50, 41, 30, 7, 36, 2, 25, 16, 57, 5, 15, 47, 29, 55, 19, 30, 52, 15, 34, 20, 12, 43, 30, 20, 54, 25, 44, 53, 12, 38, 5, 55, 27, 48, 15, 33, 27, 45, 8, 19, 28, 56, 11, 33, 49, 18, 36, 29, 2, 45, 16, 39, 19, 31, 43, 27, 35, 20, 52, 26, 6, 61, 11, 41, 17, 29, 51, 20, 56, 25, 32, 41, 17, 53, 31, 25, 14, 42, 23, 35, 16, 38, 6, 34, 12, 15, 62, 6, 21, 13, 1, 63, 9, 55, 27, 43, 25, 14, 4, 31, 55 },
33 { 44, 29, 61, 2, 35, 58, 26, 15, 60, 10, 51, 59, 14, 55, 8, 50, 2, 44, 25, 51, 1, 33, 16, 4, 48, 36, 2, 21, 12, 57, 48, 13, 51, 55, 40, 28, 37, 62, 8, 39, 12, 63, 36, 10, 59, 24, 56, 47, 9, 50, 41, 1, 32, 17, 6, 21, 61, 30, 9, 43, 1, 54, 41, 2, 54, 37, 48, 61, 1, 46, 21, 3, 58, 24, 50, 32, 60, 10, 57, 25, 46, 12, 59, 4, 45, 13, 57, 47, 27, 39, 5, 58, 47, 14, 35, 4, 52, 13, 60, 6, 36, 10, 45, 55, 4, 50, 29, 2, 61, 50, 25, 58, 44, 24, 36, 42, 54, 28, 40, 32, 16, 56, 6, 62, 46, 39, 60, 23 },
34 { 7, 48, 14, 54, 23, 40, 4, 45, 30, 22, 42, 32, 1, 44, 20, 29, 58, 8, 37, 19, 41, 54, 24, 58, 9, 53, 25, 46, 34, 16, 23, 38, 27, 11, 18, 1, 52, 21, 35, 22, 48, 5, 25, 45, 18, 38, 2, 27, 35, 4, 57, 15, 62, 39, 57, 28, 42, 16, 36, 60, 24, 18, 10, 63, 20, 5, 16, 23, 37, 14, 59, 27, 41, 8, 13, 42, 21, 35, 6, 50, 3, 38, 15, 48, 30, 39, 17, 3, 49, 14, 53, 33, 24, 7, 61, 44, 11, 39, 23, 49, 19, 58, 1, 32, 36, 12, 60, 41, 20, 13, 41, 4, 39, 1, 48, 8, 18, 51, 14, 44, 5, 37, 21, 34, 1, 26, 10, 37 },
35 { 53, 36, 27, 9, 50, 12, 32, 55, 2, 57, 7, 17, 48, 34, 63, 15, 40, 26, 62, 11, 49, 6, 31, 39, 22, 42, 6, 63, 1, 39, 60, 4, 42, 61, 32, 45, 24, 44, 2, 60, 16, 41, 53, 1, 33, 61, 49, 17, 63, 23, 45, 26, 33, 3, 23, 46, 2, 50, 20, 4, 45, 34, 49, 30, 39, 58, 44, 31, 53, 34, 6, 52, 30, 47, 63, 1, 53, 22, 42, 31, 58, 23, 54, 22, 61, 8, 36, 59, 22, 35, 21, 1, 55, 40, 27, 16, 30, 54, 2, 29, 43, 16, 39, 63, 21, 46, 26, 10, 48, 32, 19, 53, 30, 56, 26, 60, 33, 4, 61, 23, 49, 59, 15, 53, 19, 58, 42, 16 },
36 { 20, 5, 59, 46, 25, 62, 7, 19, 43, 25, 37, 61, 11, 24, 4, 54, 12, 52, 3, 32, 17, 61, 12, 47, 15, 55, 18, 31, 53, 28, 9, 50, 21, 6, 55, 9, 58, 14, 54, 26, 33, 7, 31, 58, 13, 21, 8, 42, 29, 6, 37, 11, 48, 52, 14, 60, 11, 39, 56, 32, 14, 58, 7, 26, 17, 4, 42, 8, 11, 47, 19, 38, 10, 17, 26, 37, 9, 55, 28, 13, 18, 40, 6, 33, 1, 43, 25, 11, 51, 7, 62, 43, 18, 37, 3, 57, 45, 9, 38, 58, 5, 52, 27, 7, 17, 53, 5, 57, 37, 2, 63, 9, 22, 15, 11, 38, 25, 45, 35, 0, 28, 10, 41, 30, 50, 8, 31, 57 },
37 { 49, 33, 16, 38, 1, 42, 51, 34, 53, 14, 28, 49, 30, 56, 36, 23, 43, 20, 38, 56, 22, 45, 28, 0, 62, 35, 26, 44, 11, 19, 52, 35, 44, 15, 30, 38, 10, 31, 40, 4, 46, 50, 20, 40, 27, 44, 51, 14, 56, 53, 19, 59, 7, 29, 41, 19, 35, 25, 8, 52, 22, 44, 13, 53, 50, 32, 61, 24, 56, 25, 63, 0, 45, 57, 33, 59, 16, 46, 4, 62, 50, 11, 60, 37, 52, 19, 55, 29, 37, 46, 13, 26, 48, 10, 50, 34, 21, 63, 26, 13, 42, 33, 22, 55, 35, 28, 43, 15, 24, 51, 27, 34, 46, 49, 58, 3, 52, 9, 57, 19, 48, 55, 3, 35, 12, 45, 24, 3 },
38 { 41, 11, 56, 28, 18, 31, 22, 10, 37, 6, 47, 13, 3, 41, 9, 46, 0, 48, 29, 6, 34, 10, 55, 37, 20, 8, 49, 3, 41, 59, 14, 25, 0, 63, 19, 47, 27, 51, 17, 57, 23, 10, 61, 6, 54, 3, 38, 31, 0, 22, 34, 43, 20, 55, 31, 0, 49, 63, 29, 38, 3, 62, 28, 40, 0, 22, 14, 35, 2, 48, 15, 43, 23, 14, 3, 29, 49, 20, 39, 34, 0, 44, 29, 9, 15, 47, 5, 42, 0, 31, 58, 5, 31, 61, 23, 15, 0, 47, 19, 50, 24, 3, 59, 11, 44, 0, 31, 59, 6, 42, 17, 60, 0, 39, 20, 31, 43, 17, 29, 40, 12, 25, 60, 22, 52, 15, 63, 29 },
39 { 20, 52, 8, 44, 62, 4, 59, 49, 17, 63, 21, 39, 60, 18, 52, 27, 33, 59, 14, 51, 59, 43, 24, 5, 51, 30, 57, 17, 32, 5, 37, 56, 48, 34, 42, 3, 60, 5, 36, 13, 43, 37, 18, 34, 25, 12, 59, 24, 47, 36, 11, 50, 3, 38, 9, 58, 16, 5, 43, 18, 47, 10, 37, 18, 59, 46, 29, 52, 40, 12, 34, 28, 56, 36, 53, 7, 43, 8, 24, 52, 26, 17, 56, 43, 24, 32, 63, 20, 57, 16, 22, 52, 36, 8, 41, 56, 29, 32, 54, 7, 35, 57, 14, 48, 20, 62, 13, 39, 53, 29, 8, 45, 13, 29, 7, 61, 14, 54, 6, 63, 38, 32, 18, 43, 2, 39, 6, 47 },
40 { 0, 58, 23, 35, 13, 46, 12, 39, 0, 31, 55, 24, 5, 35, 15, 61, 17, 5, 39, 25, 18, 2, 50, 33, 41, 13, 39, 23, 62, 46, 29, 12, 22, 8, 56, 25, 20, 49, 32, 62, 0, 56, 11, 46, 63, 42, 9, 16, 55, 5, 60, 15, 62, 26, 45, 21, 36, 51, 13, 57, 31, 24, 55, 6, 35, 9, 57, 5, 20, 60, 7, 51, 5, 19, 40, 25, 61, 32, 56, 12, 36, 48, 21, 2, 58, 12, 39, 28, 9, 50, 40, 12, 44, 18, 25, 49, 6, 38, 11, 62, 18, 46, 30, 9, 40, 25, 49, 19, 10, 36, 55, 22, 33, 52, 41, 18, 37, 27, 49, 21, 2, 46, 7, 53, 33, 61, 27, 35 },
41 { 41, 31, 5, 39, 51, 26, 33, 57, 27, 41, 9, 44, 54, 29, 48, 7, 44, 36, 57, 10, 31, 63, 16, 45, 11, 60, 1, 47, 7, 20, 43, 3, 58, 36, 13, 52, 39, 7, 15, 28, 22, 48, 30, 21, 1, 29, 49, 44, 27, 17, 40, 30, 24, 42, 12, 53, 33, 7, 47, 20, 1, 42, 11, 49, 25, 43, 17, 32, 45, 27, 41, 21, 31, 62, 11, 49, 2, 15, 42, 5, 63, 7, 41, 27, 49, 6, 54, 23, 46, 34, 2, 28, 54, 3, 59, 12, 46, 17, 42, 28, 40, 1, 37, 51, 5, 55, 2, 34, 47, 16, 3, 62, 47, 5, 23, 56, 1, 44, 12, 34, 51, 16, 57, 11, 25, 17, 54, 13 },
42 { 60, 26, 55, 18, 3, 60, 20, 6, 52, 15, 50, 19, 32, 11, 23, 53, 26, 21, 1, 47, 42, 27, 8, 58, 21, 27, 53, 36, 26, 54, 31, 50, 17, 30, 45, 1, 29, 59, 44, 53, 41, 4, 35, 58, 51, 19, 32, 4, 52, 34, 48, 8, 51, 5, 56, 2, 25, 61, 27, 38, 54, 27, 62, 21, 51, 1, 39, 62, 10, 50, 1, 58, 13, 47, 38, 18, 35, 54, 22, 51, 30, 19, 59, 34, 14, 32, 44, 4, 60, 15, 52, 62, 20, 43, 30, 35, 21, 60, 4, 52, 12, 24, 61, 18, 30, 42, 23, 61, 25, 50, 27, 38, 11, 59, 12, 35, 50, 30, 59, 24, 8, 42, 28, 37, 48, 9, 44, 21 },
43 { 10, 47, 15, 50, 30, 43, 8, 45, 29, 2, 36, 59, 1, 58, 41, 3, 63, 31, 54, 20, 13, 55, 35, 38, 4, 44, 15, 9, 61, 2, 14, 38, 61, 10, 23, 54, 18, 12, 24, 2, 14, 55, 16, 8, 38, 14, 41, 60, 10, 23, 1, 58, 32, 17, 28, 37, 41, 15, 3, 60, 15, 33, 4, 36, 16, 59, 28, 14, 23, 55, 37, 18, 44, 28, 2, 57, 30, 10, 27, 46, 14, 38, 3, 53, 21, 61, 17, 35, 10, 41, 26, 7, 33, 9, 57, 1, 53, 37, 26, 20, 56, 48, 9, 33, 58, 16, 37, 7, 45, 1, 57, 15, 32, 26, 42, 23, 7, 20, 4, 54, 31, 62, 22, 1, 59, 30, 4, 51 },
44 { 36, 2, 38, 11, 24, 36, 54, 22, 62, 47, 25, 8, 28, 45, 16, 38, 12, 43, 9, 37, 49, 3, 23, 52, 18, 30, 50, 33, 19, 42, 49, 26, 6, 40, 47, 35, 63, 38, 50, 33, 60, 26, 36, 47, 24, 57, 6, 26, 39, 63, 19, 44, 14, 46, 61, 9, 50, 30, 45, 23, 10, 50, 44, 8, 31, 54, 6, 46, 36, 4, 30, 54, 8, 52, 22, 41, 4, 60, 40, 0, 58, 24, 45, 10, 37, 1, 48, 30, 56, 17, 38, 48, 24, 47, 19, 39, 14, 8, 45, 32, 2, 34, 27, 44, 4, 52, 11, 56, 31, 21, 40, 19, 44, 51, 2, 63, 46, 58, 36, 43, 14, 5, 50, 38, 14, 56, 40, 23 },
45 { 61, 46, 32, 63, 54, 1, 14, 34, 12, 40, 18, 49, 37, 10, 61, 30, 51, 24, 60, 7, 29, 40, 62, 11, 46, 58, 6, 56, 24, 10, 34, 52, 21, 59, 16, 3, 27, 5, 20, 46, 9, 40, 7, 62, 2, 30, 53, 15, 48, 10, 28, 35, 54, 6, 21, 34, 18, 55, 7, 40, 57, 19, 26, 60, 41, 13, 24, 51, 19, 61, 9, 25, 34, 15, 63, 11, 45, 17, 20, 47, 33, 8, 31, 62, 43, 26, 53, 7, 24, 59, 0, 13, 55, 4, 62, 27, 51, 31, 63, 15, 58, 7, 54, 14, 46, 22, 28, 43, 12, 63, 8, 54, 5, 17, 39, 33, 15, 10, 27, 17, 47, 34, 19, 45, 27, 12, 33, 17 },
46 { 5, 28, 21, 7, 17, 48, 42, 58, 23, 4, 63, 14, 55, 21, 34, 5, 19, 0, 45, 17, 52, 15, 25, 32, 0, 22, 40, 13, 45, 62, 18, 0, 43, 11, 33, 55, 30, 42, 57, 19, 51, 31, 22, 43, 18, 45, 34, 0, 43, 31, 56, 3, 23, 40, 59, 0, 44, 13, 48, 35, 2, 32, 46, 0, 21, 48, 35, 3, 40, 32, 43, 59, 0, 48, 33, 26, 53, 36, 55, 12, 51, 16, 55, 5, 18, 29, 11, 39, 51, 19, 45, 31, 42, 21, 35, 6, 22, 47, 10, 38, 23, 50, 20, 36, 0, 60, 38, 4, 50, 35, 48, 34, 24, 57, 9, 53, 28, 48, 61, 0, 56, 24, 53, 3, 63, 6, 42, 57 },
47 { 13, 53, 45, 40, 58, 27, 6, 16, 38, 51, 33, 30, 43, 2, 47, 56, 40, 50, 33, 57, 27, 5, 47, 42, 60, 36, 16, 54, 28, 4, 37, 57, 28, 51, 22, 8, 45, 14, 6, 39, 0, 54, 11, 59, 28, 12, 50, 21, 61, 13, 19, 38, 49, 11, 25, 37, 58, 29, 22, 63, 14, 56, 12, 53, 30, 63, 9, 57, 26, 12, 47, 16, 23, 39, 50, 6, 31, 2, 25, 6, 28, 41, 36, 22, 50, 57, 42, 3, 34, 8, 28, 61, 11, 50, 16, 54, 41, 0, 55, 43, 5, 29, 41, 63, 25, 16, 53, 18, 26, 10, 21, 0, 61, 30, 41, 22, 3, 38, 20, 39, 29, 8, 41, 16, 36, 52, 22, 19 },
48 { 55, 34, 0, 25, 10, 32, 56, 44, 28, 0, 57, 7, 26, 53, 23, 8, 13, 35, 22, 12, 36, 60, 20, 8, 14, 29, 48, 2, 41, 49, 23, 13, 39, 7, 48, 58, 25, 53, 34, 62, 28, 16, 48, 4, 37, 56, 27, 5, 36, 52, 46, 7, 62, 33, 52, 11, 17, 53, 5, 28, 41, 24, 38, 17, 5, 39, 20, 45, 15, 56, 5, 38, 60, 8, 14, 57, 21, 48, 62, 39, 59, 13, 1, 60, 9, 32, 16, 63, 44, 25, 52, 15, 36, 2, 60, 29, 12, 33, 25, 17, 59, 45, 13, 8, 49, 32, 6, 40, 59, 29, 45, 37, 13, 47, 6, 55, 30, 45, 9, 52, 13, 59, 25, 47, 32, 1, 49, 30 },
49 { 9, 39, 14, 61, 49, 37, 3, 20, 50, 13, 41, 19, 46, 17, 38, 59, 28, 62, 4, 44, 54, 1, 34, 51, 55, 7, 63, 32, 21, 8, 56, 31, 62, 19, 36, 1, 41, 17, 24, 12, 42, 35, 25, 52, 20, 8, 44, 59, 25, 2, 22, 42, 16, 29, 4, 46, 20, 36, 43, 9, 51, 8, 49, 26, 58, 33, 54, 1, 37, 29, 52, 20, 27, 45, 19, 35, 42, 16, 10, 32, 20, 49, 46, 27, 40, 4, 47, 22, 13, 55, 4, 47, 26, 44, 23, 40, 58, 19, 48, 13, 31, 2, 57, 34, 42, 19, 61, 32, 14, 55, 5, 51, 26, 19, 58, 16, 49, 14, 62, 5, 33, 44, 21, 7, 60, 26, 11, 41 },
50 { 62, 24, 47, 29, 8, 19, 53, 11, 60, 24, 32, 61, 4, 55, 31, 2, 49, 16, 39, 9, 31, 24, 43, 17, 26, 38, 11, 25, 58, 43, 12, 35, 3, 46, 15, 32, 63, 4, 49, 56, 2, 60, 10, 32, 63, 17, 39, 12, 55, 30, 57, 9, 48, 55, 39, 24, 60, 2, 58, 31, 19, 61, 34, 3, 42, 11, 22, 46, 7, 61, 10, 42, 3, 55, 32, 1, 58, 28, 44, 54, 4, 34, 23, 15, 56, 20, 37, 58, 6, 30, 38, 18, 63, 9, 32, 5, 51, 3, 62, 37, 52, 18, 39, 23, 3, 51, 9, 47, 1, 23, 43, 15, 60, 35, 11, 40, 1, 36, 31, 26, 57, 2, 37, 54, 18, 44, 58, 16 },
51 { 5, 51, 3, 33, 43, 62, 21, 42, 35, 9, 48, 15, 36, 10, 22, 42, 20, 46, 26, 56, 50, 12, 59, 3, 48, 19, 45, 53, 1, 27, 47, 17, 52, 24, 56, 11, 51, 21, 37, 30, 20, 46, 14, 41, 1, 47, 33, 7, 41, 17, 35, 27, 20, 1, 14, 54, 26, 33, 18, 47, 1, 44, 14, 59, 16, 52, 28, 18, 49, 31, 25, 34, 63, 13, 51, 24, 9, 50, 3, 23, 38, 63, 7, 52, 29, 46, 11, 33, 50, 22, 57, 36, 1, 57, 49, 17, 39, 28, 9, 35, 6, 27, 53, 15, 55, 30, 24, 58, 36, 41, 11, 52, 32, 3, 44, 25, 62, 23, 51, 15, 42, 22, 50, 10, 39, 4, 31, 35 },
52 { 46, 22, 57, 17, 12, 39, 26, 5, 31, 59, 1, 45, 27, 62, 52, 7, 58, 33, 6, 18, 39, 22, 33, 41, 57, 5, 35, 18, 40, 16, 60, 5, 29, 42, 7, 39, 27, 44, 9, 47, 8, 26, 54, 22, 51, 29, 24, 49, 15, 61, 4, 51, 31, 63, 43, 6, 50, 8, 39, 12, 53, 37, 23, 30, 40, 6, 62, 43, 14, 53, 2, 49, 7, 36, 17, 41, 61, 37, 18, 56, 11, 18, 44, 35, 2, 19, 61, 0, 41, 14, 8, 30, 43, 12, 24, 46, 14, 54, 42, 21, 44, 61, 10, 46, 37, 11, 44, 7, 18, 63, 20, 29, 7, 49, 28, 54, 8, 43, 4, 48, 18, 63, 12, 29, 48, 24, 59, 20 },
53 { 13, 36, 28, 54, 35, 2, 56, 46, 16, 49, 22, 40, 11, 34, 14, 43, 29, 12, 63, 48, 2, 61, 7, 15, 28, 30, 50, 9, 61, 33, 38, 23, 54, 13, 61, 33, 3, 59, 16, 35, 58, 40, 5, 38, 13, 57, 3, 58, 37, 21, 45, 12, 39, 7, 35, 30, 13, 56, 22, 62, 27, 6, 55, 10, 48, 21, 33, 2, 38, 23, 40, 20, 44, 29, 59, 4, 26, 12, 33, 47, 28, 53, 31, 13, 59, 41, 27, 49, 26, 54, 45, 16, 53, 21, 35, 7, 59, 26, 11, 56, 1, 24, 33, 4, 28, 62, 21, 49, 31, 2, 56, 39, 24, 58, 13, 17, 37, 21, 56, 10, 38, 0, 34, 55, 15, 43, 1, 52 },
54 { 42, 9, 50, 6, 25, 60, 14, 38, 10, 29, 53, 18, 57, 3, 25, 51, 0, 53, 25, 17, 29, 37, 52, 46, 0, 62, 14, 37, 4, 50, 10, 44, 0, 46, 20, 25, 50, 19, 55, 0, 23, 31, 62, 34, 11, 45, 19, 32, 0, 53, 10, 59, 23, 47, 18, 60, 42, 28, 37, 3, 50, 15, 35, 44, 0, 51, 27, 60, 9, 57, 16, 58, 11, 22, 46, 15, 53, 48, 7, 42, 0, 60, 5, 49, 24, 54, 9, 17, 39, 5, 34, 62, 3, 40, 60, 31, 0, 47, 29, 16, 49, 39, 59, 17, 50, 0, 40, 13, 53, 38, 16, 46, 0, 42, 34, 60, 2, 53, 29, 31, 58, 46, 27, 6, 61, 8, 37, 28 },
55 { 0, 63, 21, 40, 45, 18, 51, 23, 63, 34, 6, 43, 28, 38, 55, 19, 40, 35, 8, 41, 54, 10, 21, 32, 39, 23, 53, 26, 55, 28, 22, 63, 30, 34, 9, 48, 6, 38, 29, 43, 49, 6, 18, 52, 27, 61, 9, 43, 28, 42, 33, 26, 56, 3, 51, 23, 0, 48, 16, 45, 32, 25, 63, 20, 57, 17, 42, 12, 35, 47, 5, 31, 39, 56, 6, 30, 34, 21, 61, 25, 14, 40, 22, 38, 15, 6, 36, 56, 20, 60, 25, 12, 51, 27, 10, 56, 42, 20, 36, 63, 32, 6, 21, 41, 12, 34, 60, 26, 5, 48, 27, 10, 62, 19, 6, 47, 39, 14, 45, 7, 24, 17, 41, 32, 23, 51, 19, 56 },
56 { 45, 31, 15, 59, 4, 33, 7, 47, 0, 41, 13, 61, 4, 47, 9, 23, 60, 14, 57, 31, 4, 45, 59, 6, 58, 10, 44, 20, 8, 42, 15, 6, 55, 17, 58, 31, 53, 12, 61, 10, 15, 57, 43, 2, 23, 35, 48, 14, 54, 6, 18, 49, 15, 38, 11, 34, 62, 9, 21, 58, 11, 41, 4, 31, 38, 8, 29, 55, 19, 36, 27, 52, 0, 25, 50, 43, 1, 39, 8, 55, 35, 51, 10, 30, 45, 62, 29, 2, 46, 10, 32, 48, 18, 38, 5, 22, 33, 8, 51, 3, 14, 44, 54, 25, 57, 30, 18, 52, 33, 22, 59, 28, 36, 52, 32, 21, 26, 50, 5, 55, 35, 60, 14, 54, 4, 40, 16, 33 },
57 { 27, 3, 49, 10, 30, 40, 55, 27, 57, 24, 52, 21, 32, 17, 60, 30, 5, 44, 27, 49, 19, 34, 13, 24, 43, 36, 3, 49, 31, 59, 37, 48, 26, 41, 2, 41, 14, 36, 21, 32, 40, 26, 13, 49, 55, 5, 16, 40, 25, 60, 36, 1, 63, 29, 17, 44, 25, 40, 52, 5, 29, 47, 54, 13, 46, 24, 60, 4, 51, 22, 63, 14, 45, 18, 12, 62, 17, 57, 19, 42, 3, 26, 58, 48, 1, 21, 40, 52, 23, 37, 44, 1, 29, 58, 43, 50, 15, 61, 19, 45, 58, 28, 7, 48, 2, 46, 8, 42, 3, 55, 8, 50, 12, 4, 55, 10, 63, 33, 20, 40, 11, 3, 46, 20, 48, 26, 61, 11 },
58 { 44, 56, 24, 36, 53, 19, 12, 37, 16, 44, 7, 36, 49, 54, 11, 37, 48, 21, 15, 1, 62, 25, 47, 56, 16, 18, 51, 12, 40, 1, 24, 11, 52, 16, 23, 59, 28, 1, 45, 53, 4, 60, 37, 21, 39, 30, 63, 20, 52, 10, 30, 45, 8, 41, 54, 4, 57, 7, 34, 55, 36, 18, 23, 59, 2, 48, 11, 32, 44, 1, 41, 8, 33, 54, 38, 23, 30, 46, 6, 29, 62, 18, 32, 16, 55, 34, 14, 11, 61, 7, 55, 16, 53, 13, 23, 2, 55, 37, 26, 10, 33, 23, 36, 16, 38, 22, 56, 15, 24, 43, 35, 17, 44, 40, 25, 46, 16, 1, 57, 25, 49, 36, 28, 62, 9, 35, 7, 53 },
59 { 17, 38, 8, 61, 1, 50, 26, 62, 3, 31, 56, 15, 1, 26, 40, 2, 34, 51, 56, 36, 42, 9, 38, 2, 29, 60, 32, 57, 19, 62, 34, 47, 4, 57, 39, 7, 44, 63, 24, 18, 46, 28, 8, 54, 1, 34, 7, 46, 3, 37, 50, 23, 57, 21, 13, 46, 31, 20, 43, 15, 1, 61, 8, 33, 37, 17, 56, 26, 15, 49, 24, 59, 28, 3, 56, 9, 52, 32, 13, 49, 10, 43, 5, 45, 8, 25, 59, 42, 28, 33, 19, 40, 8, 63, 35, 47, 25, 4, 40, 52, 1, 60, 12, 53, 63, 9, 29, 60, 37, 19, 1, 62, 31, 20, 58, 12, 41, 30, 43, 9, 18, 52, 22, 1, 39, 30, 58, 21 },
60 { 13, 47, 29, 18, 43, 34, 5, 48, 20, 42, 10, 45, 30, 58, 20, 63, 24, 11, 6, 28, 54, 14, 22, 52, 41, 7, 26, 5, 45, 15, 53, 13, 35, 27, 18, 50, 12, 33, 5, 56, 10, 17, 45, 24, 59, 15, 50, 26, 56, 13, 19, 5, 32, 52, 27, 36, 2, 61, 12, 26, 49, 40, 27, 52, 13, 50, 6, 39, 61, 34, 10, 37, 48, 20, 41, 27, 2, 36, 59, 24, 54, 33, 63, 20, 38, 50, 3, 17, 52, 4, 58, 27, 45, 21, 32, 11, 48, 17, 57, 20, 46, 38, 25, 43, 4, 34, 51, 6, 13, 45, 57, 26, 6, 48, 2, 35, 53, 23, 61, 34, 59, 6, 42, 56, 13, 51, 2, 41 },
61 { 32, 5, 55, 23, 58, 14, 22, 52, 29, 15, 61, 25, 51, 8, 43, 13, 53, 41, 46, 20, 3, 33, 63, 11, 48, 21, 54, 38, 28, 3, 30, 43, 21, 62, 9, 31, 55, 22, 51, 29, 37, 62, 32, 12, 42, 29, 41, 9, 33, 44, 62, 28, 43, 1, 59, 19, 48, 30, 51, 39, 24, 4, 58, 19, 42, 29, 22, 43, 3, 18, 53, 5, 13, 50, 16, 60, 45, 21, 7, 40, 15, 0, 26, 53, 13, 31, 43, 24, 47, 31, 15, 49, 2, 41, 6, 59, 29, 42, 9, 30, 14, 7, 49, 18, 31, 47, 20, 39, 49, 32, 11, 41, 54, 15, 61, 18, 7, 38, 4, 13, 44, 28, 15, 32, 45, 19, 27, 49 },
62 { 63, 34, 11, 39, 2, 45, 37, 8, 59, 39, 33, 4, 36, 17, 48, 5, 29, 18, 32, 61, 39, 50, 5, 27, 35, 0, 46, 12, 22, 49, 60, 6, 54, 0, 38, 49, 2, 42, 15, 40, 0, 47, 20, 51, 3, 57, 18, 61, 22, 0, 39, 16, 55, 12, 35, 8, 41, 22, 6, 59, 16, 45, 10, 36, 0, 62, 9, 54, 30, 58, 21, 43, 63, 31, 7, 35, 12, 48, 58, 28, 47, 37, 41, 9, 57, 20, 61, 0, 36, 11, 57, 35, 23, 52, 37, 18, 0, 62, 22, 55, 35, 62, 27, 54, 0, 15, 61, 28, 2, 59, 22, 9, 37, 27, 33, 51, 29, 48, 19, 50, 25, 37, 10, 57, 5, 37, 60, 8 },
63 { 20, 25, 46, 52, 31, 60, 12, 55, 0, 19, 11, 46, 62, 35, 23, 38, 57, 0, 55, 10, 16, 30, 58, 44, 17, 59, 29, 63, 42, 8, 36, 20, 33, 46, 16, 61, 25, 35, 8, 54, 26, 7, 58, 22, 34, 6, 47, 14, 53, 31, 48, 9, 37, 25, 49, 63, 16, 55, 45, 14, 34, 63, 21, 53, 25, 33, 46, 16, 35, 7, 46, 29, 0, 39, 25, 55, 22, 34, 18, 4, 56, 11, 23, 51, 28, 6, 39, 14, 62, 44, 19, 8, 60, 12, 56, 28, 50, 34, 39, 5, 51, 3, 41, 12, 57, 35, 10, 53, 25, 17, 52, 30, 47, 0, 43, 14, 5, 57, 31, 55, 0, 63, 47, 23, 54, 24, 14, 43 },
64 { 0, 57, 16, 6, 26, 19, 35, 28, 49, 42, 54, 26, 21, 1, 59, 27, 9, 47, 26, 44, 50, 22, 13, 40, 8, 37, 10, 34, 17, 56, 25, 58, 13, 27, 44, 9, 20, 58, 31, 17, 60, 36, 10, 41, 53, 25, 36, 39, 4, 24, 58, 17, 60, 4, 22, 38, 10, 32, 0, 50, 31, 7, 28, 47, 12, 57, 5, 26, 52, 23, 14, 40, 57, 17, 47, 5, 53, 1, 44, 31, 19, 60, 46, 2, 35, 48, 30, 54, 22, 5, 51, 39, 25, 31, 4, 43, 14, 9, 45, 16, 24, 44, 19, 29, 40, 23, 44, 7, 38, 42, 4, 63, 12, 54, 23, 59, 22, 42, 8, 15, 40, 21, 8, 34, 3, 41, 30, 50 },
65 { 39, 10, 48, 33, 41, 54, 5, 47, 23, 13, 32, 7, 52, 44, 14, 39, 58, 18, 35, 6, 37, 2, 60, 24, 55, 19, 53, 2, 51, 32, 1, 41, 51, 4, 40, 29, 47, 3, 52, 44, 13, 49, 28, 16, 1, 62, 11, 27, 52, 35, 5, 42, 29, 47, 14, 56, 28, 53, 26, 38, 9, 56, 40, 3, 38, 15, 41, 60, 1, 37, 50, 25, 11, 28, 61, 19, 42, 62, 10, 52, 39, 6, 32, 14, 58, 17, 7, 26, 42, 34, 27, 10, 54, 40, 20, 63, 26, 53, 21, 61, 32, 7, 59, 48, 3, 56, 18, 31, 58, 14, 49, 21, 36, 16, 45, 9, 36, 24, 62, 45, 27, 31, 53, 17, 49, 12, 62, 18 },
66 { 28, 59, 21, 58, 2, 16, 38, 9, 62, 3, 56, 41, 10, 31, 50, 4, 32, 52, 12, 63, 23, 46, 33, 31, 4, 48, 25, 43, 14, 23, 47, 11, 22, 55, 14, 60, 23, 37, 11, 39, 23, 2, 45, 56, 31, 43, 19, 55, 16, 46, 21, 51, 11, 33, 44, 2, 41, 18, 5, 52, 23, 44, 17, 60, 27, 49, 11, 32, 44, 10, 54, 2, 56, 33, 8, 38, 13, 29, 36, 16, 24, 63, 27, 51, 21, 43, 56, 12, 49, 3, 59, 48, 1, 15, 46, 7, 36, 2, 47, 11, 50, 27, 37, 13, 33, 8, 51, 46, 1, 34, 28, 40, 3, 33, 60, 29, 47, 1, 35, 11, 59, 42, 2, 60, 26, 46, 6, 35 },
67 { 4, 43, 9, 29, 36, 63, 24, 44, 20, 50, 30, 17, 60, 22, 16, 43, 25, 3, 42, 19, 51, 15, 8, 54, 42, 15, 61, 5, 39, 57, 18, 61, 31, 48, 34, 2, 50, 19, 57, 5, 63, 33, 19, 38, 13, 27, 48, 7, 32, 61, 2, 26, 58, 6, 24, 50, 13, 61, 42, 20, 62, 2, 35, 20, 51, 4, 62, 18, 23, 58, 20, 31, 43, 15, 51, 45, 26, 50, 4, 55, 45, 3, 35, 9, 38, 1, 32, 61, 20, 45, 17, 33, 24, 57, 29, 51, 22, 58, 38, 30, 15, 1, 54, 21, 63, 43, 26, 12, 24, 56, 8, 60, 50, 19, 5, 52, 13, 54, 17, 50, 4, 16, 36, 12, 32, 56, 22, 54 },
68 { 51, 25, 40, 53, 12, 49, 15, 57, 34, 7, 38, 47, 2, 36, 55, 8, 61, 30, 56, 7, 28, 59, 48, 11, 27, 35, 21, 45, 28, 36, 9, 38, 6, 16, 24, 63, 10, 32, 28, 43, 21, 53, 5, 60, 8, 57, 3, 45, 11, 37, 15, 54, 40, 20, 62, 36, 27, 34, 11, 48, 30, 15, 54, 8, 30, 42, 22, 34, 48, 13, 35, 63, 4, 37, 22, 2, 59, 9, 41, 23, 13, 41, 49, 18, 59, 24, 40, 5, 37, 30, 9, 61, 44, 6, 37, 11, 33, 17, 5, 55, 41, 60, 23, 39, 17, 5, 30, 62, 41, 16, 46, 25, 11, 56, 39, 26, 20, 38, 29, 39, 22, 52, 44, 20, 48, 1, 38, 14 },
69 { 15, 33, 2, 18, 44, 6, 27, 0, 32, 61, 25, 12, 58, 28, 40, 20, 47, 13, 34, 43, 38, 1, 23, 62, 40, 0, 51, 10, 63, 3, 52, 26, 44, 30, 45, 6, 41, 54, 0, 51, 12, 30, 46, 24, 49, 22, 40, 33, 63, 23, 43, 30, 9, 47, 0, 17, 54, 7, 57, 3, 37, 47, 24, 46, 13, 55, 7, 52, 2, 42, 6, 26, 49, 18, 60, 34, 16, 57, 33, 20, 61, 30, 8, 54, 14, 46, 12, 53, 16, 55, 38, 13, 22, 53, 18, 59, 46, 27, 43, 19, 32, 10, 45, 6, 49, 36, 52, 2, 20, 55, 6, 39, 32, 15, 44, 3, 58, 10, 63, 6, 56, 30, 7, 58, 9, 40, 19, 63 },
70 { 10, 47, 61, 23, 55, 31, 52, 42, 17, 45, 4, 51, 27, 6, 15, 53, 0, 49, 26, 10, 56, 18, 36, 6, 20, 58, 32, 30, 13, 49, 19, 56, 0, 59, 12, 53, 27, 17, 38, 25, 48, 9, 15, 36, 14, 30, 59, 17, 0, 50, 8, 58, 18, 56, 31, 45, 21, 41, 29, 19, 60, 6, 32, 59, 0, 36, 29, 39, 19, 59, 46, 12, 55, 30, 10, 47, 24, 3, 28, 48, 0, 55, 44, 27, 33, 4, 63, 29, 49, 0, 26, 50, 34, 2, 42, 14, 0, 62, 9, 56, 3, 52, 28, 34, 58, 9, 20, 48, 37, 32, 22, 53, 0, 62, 27, 49, 34, 46, 21, 33, 41, 14, 25, 37, 53, 29, 31, 45 },
71 { 56, 28, 7, 37, 11, 36, 20, 9, 54, 14, 39, 19, 34, 63, 45, 37, 24, 17, 60, 31, 21, 45, 53, 29, 47, 15, 7, 55, 40, 23, 34, 14, 42, 20, 37, 35, 15, 59, 7, 62, 34, 40, 59, 1, 51, 42, 10, 28, 54, 21, 35, 5, 38, 13, 36, 4, 59, 12, 39, 53, 15, 43, 9, 21, 39, 62, 16, 56, 25, 9, 32, 38, 0, 41, 14, 51, 40, 53, 43, 11, 37, 17, 5, 22, 57, 39, 19, 7, 42, 21, 60, 10, 31, 63, 25, 52, 30, 49, 36, 25, 48, 17, 61, 14, 22, 42, 29, 13, 60, 11, 47, 18, 35, 41, 7, 23, 4, 16, 51, 11, 0, 48, 61, 3, 17, 50, 5, 24 },
72 { 0, 42, 21, 49, 60, 3, 57, 40, 29, 48, 23, 56, 42, 11, 22, 5, 59, 39, 4, 50, 3, 41, 12, 57, 25, 50, 44, 18, 4, 46, 7, 62, 33, 50, 4, 56, 21, 32, 43, 18, 3, 23, 55, 34, 20, 4, 53, 38, 12, 46, 29, 52, 25, 61, 23, 51, 26, 46, 1, 34, 25, 57, 28, 51, 26, 11, 50, 3, 44, 28, 53, 21, 57, 27, 62, 6, 31, 19, 8, 63, 26, 59, 36, 47, 15, 29, 50, 25, 35, 47, 18, 41, 4, 48, 8, 40, 12, 23, 6, 44, 13, 40, 1, 31, 55, 0, 61, 43, 4, 50, 26, 58, 9, 53, 24, 61, 42, 55, 31, 43, 57, 20, 34, 27, 43, 8, 59, 39 },
73 { 18, 51, 30, 13, 26, 16, 46, 22, 2, 59, 8, 30, 1, 48, 33, 51, 29, 9, 46, 16, 62, 14, 33, 2, 38, 9, 27, 60, 37, 26, 53, 17, 28, 10, 24, 46, 2, 49, 8, 57, 29, 45, 6, 26, 62, 44, 18, 25, 61, 3, 42, 14, 49, 10, 43, 6, 17, 32, 63, 10, 49, 4, 40, 14, 45, 33, 22, 37, 12, 61, 5, 17, 43, 7, 23, 37, 15, 58, 49, 13, 39, 21, 10, 52, 1, 62, 9, 56, 12, 2, 58, 28, 36, 16, 56, 28, 56, 35, 20, 63, 24, 37, 51, 8, 45, 25, 16, 33, 27, 38, 2, 44, 13, 30, 17, 36, 12, 26, 5, 18, 28, 47, 13, 60, 23, 45, 13, 33 },
74 { 55, 4, 62, 34, 52, 38, 7, 63, 32, 37, 13, 53, 25, 62, 18, 12, 55, 41, 27, 35, 24, 49, 31, 52, 17, 63, 34, 1, 56, 12, 41, 2, 48, 58, 39, 16, 61, 27, 41, 52, 13, 19, 50, 39, 11, 31, 57, 6, 32, 40, 20, 55, 1, 28, 33, 57, 48, 8, 37, 22, 44, 18, 53, 1, 61, 5, 54, 16, 47, 36, 50, 24, 55, 34, 48, 45, 1, 30, 33, 46, 2, 50, 32, 42, 25, 34, 43, 21, 38, 52, 23, 45, 14, 54, 21, 4, 44, 16, 53, 29, 10, 47, 19, 57, 12, 54, 39, 10, 51, 15, 63, 21, 57, 40, 51, 1, 48, 57, 37, 62, 2, 38, 9, 52, 1, 35, 58, 22 },
75 { 36, 46, 10, 42, 1, 27, 43, 15, 50, 21, 45, 16, 41, 3, 35, 44, 20, 1, 57, 11, 55, 7, 43, 8, 22, 42, 13, 46, 21, 39, 31, 60, 22, 5, 29, 44, 11, 35, 20, 4, 36, 58, 32, 15, 47, 2, 36, 48, 16, 60, 8, 35, 44, 63, 16, 2, 40, 26, 55, 14, 58, 35, 24, 31, 19, 42, 31, 58, 1, 29, 10, 40, 2, 19, 12, 54, 22, 61, 7, 24, 56, 5, 28, 16, 54, 3, 15, 58, 6, 30, 8, 62, 1, 43, 31, 47, 7, 59, 1, 38, 58, 4, 34, 27, 38, 5, 31, 59, 7, 46, 30, 3, 34, 6, 28, 59, 20, 8, 32, 15, 53, 24, 55, 31, 19, 49, 11, 26 },
76 { 2, 24, 16, 58, 19, 55, 5, 35, 10, 61, 4, 28, 57, 24, 58, 7, 31, 47, 22, 38, 19, 28, 61, 36, 54, 5, 59, 29, 6, 52, 15, 11, 43, 36, 8, 54, 52, 1, 62, 25, 47, 9, 1, 60, 28, 53, 24, 14, 46, 27, 51, 22, 12, 24, 38, 53, 20, 11, 51, 3, 29, 7, 48, 63, 8, 49, 9, 21, 52, 14, 63, 32, 46, 60, 35, 4, 41, 16, 52, 35, 18, 42, 59, 7, 36, 61, 45, 27, 33, 51, 19, 39, 34, 11, 61, 18, 33, 41, 28, 15, 54, 22, 42, 3, 49, 21, 47, 18, 36, 23, 55, 19, 48, 24, 45, 10, 33, 44, 50, 40, 7, 35, 15, 41, 63, 6, 40, 54 },
77 { 62, 41, 32, 8, 47, 28, 60, 24, 44, 30, 38, 49, 9, 33, 14, 40, 50, 14, 60, 2, 54, 40, 0, 20, 25, 39, 16, 49, 24, 35, 57, 47, 19, 61, 33, 18, 23, 37, 13, 55, 31, 43, 22, 41, 17, 8, 42, 58, 0, 37, 5, 56, 31, 54, 7, 30, 60, 33, 42, 17, 59, 39, 12, 27, 38, 17, 35, 41, 27, 45, 20, 7, 25, 15, 29, 58, 27, 47, 11, 40, 14, 54, 23, 46, 19, 31, 11, 40, 13, 49, 5, 58, 24, 51, 26, 6, 50, 20, 49, 9, 32, 46, 17, 60, 14, 63, 24, 1, 57, 41, 9, 43, 14, 62, 16, 52, 3, 27, 14, 22, 61, 45, 4, 28, 9, 47, 29, 17 },
78 { 5, 50, 12, 53, 38, 18, 11, 51, 0, 55, 17, 6, 47, 54, 19, 63, 5, 26, 34, 45, 13, 30, 47, 58, 10, 48, 32, 3, 62, 9, 26, 0, 25, 14, 50, 3, 47, 30, 42, 16, 6, 63, 12, 49, 33, 55, 21, 10, 34, 63, 18, 41, 3, 47, 19, 43, 0, 49, 8, 28, 46, 20, 52, 0, 56, 24, 60, 3, 59, 5, 39, 57, 48, 52, 9, 38, 3, 21, 26, 60, 0, 32, 12, 38, 4, 48, 53, 0, 60, 15, 29, 44, 18, 10, 38, 57, 13, 60, 2, 26, 62, 7, 50, 29, 35, 8, 40, 53, 28, 12, 60, 33, 38, 5, 37, 29, 60, 39, 56, 0, 30, 18, 50, 34, 59, 25, 14, 44 },
79 { 20, 31, 60, 22, 3, 49, 33, 25, 40, 13, 34, 59, 22, 36, 0, 28, 37, 56, 8, 18, 51, 16, 4, 45, 27, 12, 53, 42, 18, 44, 51, 31, 55, 40, 28, 58, 7, 60, 10, 51, 27, 37, 24, 56, 5, 26, 44, 29, 50, 23, 45, 11, 34, 15, 59, 27, 13, 23, 62, 37, 4, 57, 15, 32, 42, 6, 47, 11, 30, 43, 23, 13, 0, 36, 18, 44, 63, 51, 37, 29, 49, 20, 57, 27, 62, 9, 24, 35, 23, 53, 37, 3, 42, 55, 0, 36, 23, 39, 31, 43, 17, 37, 24, 11, 52, 43, 19, 32, 5, 50, 26, 0, 56, 21, 54, 11, 19, 6, 47, 25, 59, 42, 12, 54, 21, 3, 38, 57 },
80 { 48, 0, 35, 27, 44, 14, 59, 7, 57, 46, 26, 2, 42, 12, 52, 43, 10, 27, 53, 42, 32, 62, 37, 21, 34, 61, 7, 23, 36, 4, 38, 12, 41, 5, 17, 45, 22, 27, 39, 21, 59, 0, 45, 18, 39, 62, 3, 38, 14, 7, 54, 26, 61, 39, 9, 52, 45, 36, 18, 50, 10, 34, 44, 22, 50, 14, 36, 55, 17, 34, 53, 62, 33, 26, 56, 6, 31, 12, 6, 53, 9, 44, 2, 50, 20, 40, 55, 17, 47, 7, 26, 63, 22, 32, 48, 16, 46, 8, 52, 12, 57, 41, 0, 56, 25, 3, 61, 14, 45, 35, 18, 44, 12, 46, 23, 42, 32, 51, 35, 10, 17, 36, 23, 1, 45, 52, 32, 10 },
81 { 37, 15, 43, 8, 63, 39, 21, 31, 16, 37, 19, 62, 30, 46, 17, 60, 21, 48, 1, 23, 6, 25, 11, 56, 1, 40, 30, 58, 15, 54, 21, 59, 9, 63, 35, 56, 11, 51, 2, 46, 34, 14, 53, 7, 30, 11, 51, 19, 60, 40, 30, 1, 24, 50, 20, 32, 3, 56, 5, 25, 31, 13, 61, 2, 29, 60, 25, 20, 51, 2, 27, 8, 18, 42, 10, 45, 21, 34, 43, 17, 62, 29, 41, 14, 34, 6, 30, 43, 2, 57, 33, 13, 45, 12, 27, 62, 4, 55, 21, 35, 5, 27, 45, 33, 16, 47, 30, 54, 22, 10, 51, 27, 63, 7, 49, 1, 58, 22, 15, 43, 53, 7, 57, 39, 27, 12, 61, 24 },
82 { 56, 51, 26, 56, 19, 2, 41, 54, 5, 52, 9, 48, 6, 23, 39, 4, 32, 15, 63, 35, 59, 49, 43, 15, 52, 19, 50, 9, 46, 33, 1, 29, 48, 20, 32, 1, 38, 33, 19, 54, 9, 32, 24, 48, 58, 35, 16, 48, 4, 52, 13, 57, 33, 5, 45, 59, 15, 29, 41, 55, 47, 39, 23, 53, 9, 40, 4, 57, 10, 44, 48, 40, 50, 14, 61, 24, 55, 1, 59, 22, 33, 8, 51, 25, 58, 46, 11, 59, 20, 41, 17, 51, 6, 56, 35, 25, 42, 30, 15, 58, 48, 18, 61, 9, 58, 39, 13, 2, 37, 59, 40, 2, 31, 16, 34, 41, 8, 30, 62, 3, 29, 48, 33, 5, 63, 16, 41, 7 },
83 { 22, 4, 46, 11, 33, 51, 29, 10, 62, 24, 43, 27, 15, 58, 50, 25, 54, 44, 9, 38, 18, 3, 29, 57, 32, 5, 26, 43, 17, 61, 24, 52, 8, 42, 23, 53, 15, 61, 7, 28, 57, 43, 4, 40, 20, 2, 43, 25, 32, 35, 21, 43, 17, 48, 10, 22, 38, 54, 11, 21, 1, 58, 16, 30, 48, 18, 46, 32, 38, 13, 22, 4, 59, 35, 2, 51, 30, 39, 15, 47, 4, 56, 13, 37, 1, 28, 16, 52, 32, 9, 61, 29, 38, 19, 3, 52, 10, 48, 1, 32, 11, 40, 20, 36, 6, 22, 49, 29, 55, 6, 20, 56, 36, 52, 19, 60, 26, 46, 18, 54, 40, 13, 20, 46, 35, 19, 49, 29 },
84 { 61, 17, 34, 53, 23, 6, 48, 35, 20, 40, 1, 56, 36, 29, 11, 34, 7, 41, 14, 30, 55, 20, 46, 8, 24, 38, 63, 2, 37, 10, 45, 14, 34, 49, 6, 13, 44, 25, 49, 41, 21, 12, 61, 15, 54, 29, 63, 12, 56, 8, 49, 2, 62, 36, 28, 61, 0, 25, 41, 63, 35, 8, 44, 6, 37, 62, 7, 21, 63, 28, 55, 31, 16, 24, 41, 19, 9, 57, 27, 36, 18, 42, 31, 62, 22, 55, 38, 4, 27, 47, 1, 40, 14, 54, 43, 20, 60, 23, 38, 63, 25, 51, 2, 53, 26, 63, 10, 42, 17, 34, 47, 25, 13, 5, 44, 11, 55, 2, 38, 27, 6, 60, 52, 25, 9, 55, 1, 40 },
85 { 8, 30, 58, 3, 42, 61, 17, 38, 13, 59, 32, 10, 54, 3, 51, 20, 61, 26, 57, 2, 46, 33, 12, 60, 41, 13, 48, 29, 55, 20, 39, 27, 57, 18, 62, 29, 55, 2, 31, 16, 37, 50, 26, 36, 6, 46, 9, 41, 27, 57, 23, 39, 26, 6, 51, 12, 31, 46, 7, 16, 27, 52, 19, 56, 26, 12, 33, 53, 1, 41, 8, 57, 46, 7, 54, 32, 47, 5, 49, 11, 60, 23, 5, 48, 10, 43, 19, 63, 35, 24, 49, 21, 59, 5, 31, 37, 14, 44, 7, 42, 6, 30, 46, 13, 44, 32, 19, 50, 4, 58, 8, 30, 62, 38, 28, 53, 21, 36, 13, 50, 21, 33, 15, 2, 44, 31, 14, 47 },
86 { 37, 13, 39, 16, 28, 9, 57, 0, 25, 49, 21, 45, 18, 47, 12, 42, 0, 49, 22, 39, 16, 53, 25, 36, 0, 52, 22, 16, 6, 60, 4, 51, 0, 26, 37, 47, 10, 36, 63, 5, 57, 0, 18, 59, 23, 33, 51, 19, 0, 44, 15, 11, 54, 17, 42, 35, 53, 18, 58, 33, 49, 4, 34, 42, 0, 50, 43, 25, 16, 49, 34, 20, 37, 28, 12, 63, 16, 38, 25, 44, 0, 40, 52, 17, 35, 3, 50, 14, 8, 53, 11, 36, 25, 45, 9, 62, 0, 54, 28, 17, 50, 55, 15, 24, 57, 0, 53, 34, 23, 41, 15, 45, 0, 49, 16, 4, 48, 9, 63, 45, 0, 42, 58, 37, 61, 22, 54, 26 },
87 { 0, 50, 21, 47, 54, 36, 27, 45, 52, 4, 34, 15, 63, 29, 37, 59, 17, 31, 6, 61, 28, 5, 48, 18, 59, 27, 34, 56, 44, 31, 35, 12, 41, 59, 16, 3, 40, 20, 50, 22, 30, 40, 52, 10, 45, 3, 59, 22, 37, 61, 29, 46, 31, 58, 2, 22, 9, 43, 3, 39, 14, 61, 24, 54, 15, 29, 11, 60, 39, 17, 5, 61, 0, 44, 50, 3, 31, 14, 58, 21, 54, 28, 15, 45, 60, 26, 33, 58, 44, 22, 60, 2, 57, 34, 49, 27, 18, 34, 21, 59, 29, 4, 36, 41, 8, 39, 28, 11, 62, 26, 53, 20, 35, 24, 59, 32, 29, 39, 24, 31, 57, 23, 11, 28, 5, 36, 11, 59 },
88 { 44, 32, 63, 5, 20, 12, 41, 7, 30, 61, 42, 8, 39, 5, 33, 8, 24, 53, 45, 11, 37, 58, 7, 44, 10, 50, 3, 40, 8, 22, 53, 19, 46, 9, 33, 52, 24, 58, 8, 44, 13, 47, 8, 34, 38, 30, 14, 47, 7, 34, 4, 55, 9, 19, 40, 49, 56, 26, 60, 21, 30, 45, 10, 19, 40, 58, 23, 36, 3, 52, 45, 23, 54, 13, 22, 42, 53, 45, 7, 33, 10, 36, 57, 6, 29, 12, 41, 0, 30, 15, 41, 30, 17, 7, 16, 53, 40, 56, 2, 39, 12, 61, 10, 52, 31, 60, 16, 45, 1, 37, 7, 61, 40, 10, 43, 17, 58, 7, 54, 14, 4, 51, 39, 49, 18, 56, 42, 20 },
89 { 14, 6, 24, 36, 56, 49, 22, 60, 18, 14, 23, 51, 26, 57, 21, 52, 41, 14, 35, 50, 19, 31, 40, 23, 33, 14, 63, 17, 32, 47, 7, 62, 23, 30, 56, 11, 42, 27, 14, 60, 35, 19, 28, 61, 17, 55, 25, 39, 53, 17, 42, 21, 38, 63, 25, 5, 14, 36, 12, 50, 1, 37, 59, 32, 2, 51, 6, 56, 27, 32, 11, 30, 38, 26, 60, 8, 26, 19, 62, 39, 50, 2, 21, 39, 53, 23, 56, 19, 49, 39, 5, 46, 55, 23, 42, 4, 31, 11, 47, 26, 45, 22, 48, 18, 21, 5, 48, 25, 57, 14, 47, 30, 3, 56, 12, 50, 1, 42, 19, 47, 35, 17, 8, 30, 45, 25, 4, 51 },
90 { 28, 58, 43, 1, 31, 8, 33, 2, 44, 55, 32, 1, 60, 12, 46, 27, 4, 62, 23, 1, 56, 13, 62, 2, 54, 36, 25, 51, 1, 57, 26, 42, 3, 49, 17, 38, 1, 48, 31, 4, 54, 3, 50, 24, 1, 49, 5, 63, 13, 27, 52, 1, 48, 13, 45, 33, 52, 30, 46, 20, 55, 28, 6, 48, 24, 38, 20, 47, 14, 62, 48, 9, 58, 4, 36, 30, 56, 1, 34, 12, 18, 63, 25, 48, 4, 16, 37, 7, 62, 10, 52, 28, 13, 50, 36, 63, 24, 51, 15, 58, 8, 33, 1, 38, 56, 35, 42, 9, 33, 51, 22, 18, 48, 32, 27, 37, 23, 61, 33, 11, 59, 29, 62, 1, 53, 10, 60, 33 },
91 { 12, 39, 17, 52, 26, 46, 53, 38, 25, 11, 48, 36, 16, 43, 2, 35, 55, 17, 39, 29, 43, 9, 28, 45, 20, 5, 46, 12, 42, 28, 13, 52, 36, 6, 60, 22, 54, 17, 62, 39, 25, 42, 15, 55, 44, 20, 31, 10, 35, 57, 24, 32, 29, 6, 59, 18, 7, 62, 3, 41, 10, 44, 16, 54, 13, 62, 31, 9, 41, 1, 21, 43, 18, 47, 15, 40, 11, 49, 28, 55, 46, 30, 8, 43, 32, 61, 28, 47, 25, 34, 21, 61, 32, 1, 20, 9, 46, 6, 35, 19, 41, 54, 27, 63, 14, 3, 51, 20, 62, 2, 38, 55, 8, 21, 63, 6, 46, 9, 26, 51, 3, 24, 43, 34, 16, 41, 18, 48 },
92 { 62, 23, 55, 9, 15, 62, 19, 13, 58, 40, 6, 30, 54, 19, 50, 31, 10, 44, 6, 59, 21, 47, 51, 15, 60, 39, 30, 54, 21, 61, 19, 33, 14, 29, 43, 11, 34, 45, 7, 21, 10, 56, 36, 6, 38, 11, 58, 42, 2, 47, 11, 60, 50, 16, 41, 28, 38, 23, 47, 17, 35, 63, 22, 33, 42, 5, 45, 17, 53, 35, 25, 56, 33, 6, 51, 19, 60, 23, 43, 15, 5, 40, 58, 13, 51, 1, 45, 11, 54, 3, 43, 8, 37, 48, 59, 29, 39, 21, 61, 43, 3, 31, 10, 44, 24, 29, 60, 12, 28, 40, 11, 25, 43, 52, 14, 41, 16, 57, 44, 20, 40, 55, 12, 21, 57, 27, 35, 2 },
93 { 37, 6, 31, 42, 40, 4, 29, 50, 0, 20, 63, 28, 9, 58, 14, 24, 63, 26, 48, 16, 34, 4, 32, 38, 23, 11, 58, 4, 37, 9, 45, 5, 63, 48, 26, 57, 2, 28, 32, 51, 46, 29, 13, 62, 27, 46, 28, 18, 50, 15, 40, 4, 19, 34, 54, 0, 53, 9, 26, 58, 28, 5, 49, 0, 57, 27, 19, 60, 29, 8, 59, 12, 37, 63, 24, 46, 3, 37, 6, 52, 26, 32, 20, 36, 9, 22, 59, 18, 35, 51, 14, 57, 17, 24, 12, 44, 56, 0, 30, 13, 59, 20, 49, 17, 54, 43, 6, 34, 46, 17, 58, 36, 0, 34, 29, 54, 25, 2, 36, 15, 60, 6, 37, 46, 4, 50, 9, 45 },
94 { 19, 59, 48, 3, 24, 60, 44, 22, 34, 51, 15, 45, 41, 5, 33, 47, 0, 37, 12, 55, 25, 54, 8, 57, 0, 47, 18, 34, 49, 15, 55, 24, 40, 20, 8, 35, 53, 13, 41, 18, 0, 59, 22, 33, 4, 52, 8, 60, 24, 36, 31, 56, 45, 26, 10, 43, 15, 56, 36, 4, 51, 14, 39, 30, 12, 55, 36, 2, 39, 49, 4, 44, 17, 0, 32, 13, 53, 35, 59, 17, 62, 0, 55, 24, 52, 38, 31, 6, 42, 19, 29, 40, 4, 54, 33, 5, 16, 27, 52, 37, 23, 55, 7, 37, 0, 39, 23, 49, 4, 53, 31, 15, 59, 10, 50, 4, 60, 34, 48, 7, 31, 49, 27, 14, 62, 22, 53, 29 },
95 { 46, 21, 14, 51, 36, 17, 7, 57, 10, 32, 3, 37, 22, 60, 39, 18, 56, 20, 42, 3, 36, 10, 44, 26, 41, 29, 53, 27, 2, 39, 30, 52, 0, 59, 15, 48, 23, 61, 6, 58, 37, 12, 40, 49, 16, 39, 20, 44, 0, 62, 8, 21, 3, 59, 23, 32, 49, 31, 12, 44, 22, 59, 18, 50, 24, 7, 43, 52, 15, 23, 41, 26, 51, 28, 55, 39, 21, 27, 10, 42, 12, 45, 27, 47, 3, 15, 63, 26, 55, 0, 60, 26, 45, 18, 62, 38, 58, 49, 8, 47, 4, 33, 46, 29, 57, 13, 56, 16, 59, 21, 5, 47, 23, 39, 18, 44, 13, 22, 28, 53, 19, 0, 58, 32, 41, 7, 26, 13 },
96 { 0, 56, 34, 28, 11, 55, 31, 47, 26, 41, 56, 13, 53, 28, 11, 49, 7, 52, 32, 61, 50, 22, 63, 17, 13, 56, 7, 19, 43, 62, 10, 21, 37, 32, 43, 4, 38, 19, 44, 25, 31, 54, 5, 23, 61, 30, 53, 12, 35, 22, 43, 53, 37, 48, 7, 62, 20, 2, 61, 41, 8, 34, 47, 9, 63, 34, 28, 10, 55, 33, 14, 57, 7, 47, 9, 61, 4, 49, 31, 50, 21, 38, 8, 16, 57, 44, 33, 5, 49, 36, 12, 50, 7, 34, 10, 25, 2, 22, 36, 15, 26, 61, 18, 9, 22, 46, 32, 8, 27, 37, 44, 30, 55, 3, 62, 24, 38, 56, 5, 45, 38, 24, 43, 10, 19, 54, 39, 61 },
97 { 41, 30, 8, 63, 43, 23, 38, 3, 62, 19, 8, 49, 25, 1, 58, 30, 23, 40, 9, 28, 18, 40, 6, 38, 49, 22, 35, 59, 8, 27, 50, 5, 56, 17, 11, 50, 30, 9, 55, 2, 51, 19, 34, 47, 9, 41, 6, 26, 48, 57, 14, 28, 17, 12, 39, 13, 37, 46, 25, 19, 54, 27, 1, 37, 16, 45, 20, 60, 1, 48, 20, 38, 31, 22, 42, 15, 19, 44, 1, 61, 6, 34, 56, 40, 29, 10, 20, 46, 13, 22, 41, 23, 59, 42, 30, 51, 45, 13, 63, 53, 42, 12, 51, 38, 62, 2, 26, 41, 50, 1, 61, 10, 19, 42, 31, 8, 49, 32, 12, 63, 9, 52, 16, 56, 36, 2, 31, 16 },
98 { 52, 5, 47, 20, 1, 53, 12, 50, 16, 35, 43, 21, 33, 43, 16, 44, 3, 59, 14, 46, 1, 30, 60, 33, 2, 45, 12, 42, 31, 47, 14, 33, 46, 25, 55, 27, 60, 36, 16, 42, 14, 46, 26, 1, 55, 15, 63, 32, 2, 38, 5, 47, 33, 61, 30, 52, 4, 57, 6, 38, 11, 43, 61, 24, 52, 3, 31, 22, 42, 10, 62, 3, 59, 11, 35, 57, 33, 54, 24, 14, 29, 48, 18, 2, 60, 41, 53, 24, 32, 62, 3, 53, 15, 1, 55, 17, 32, 40, 6, 31, 1, 40, 28, 5, 35, 52, 19, 63, 13, 33, 17, 41, 52, 26, 15, 57, 1, 20, 42, 17, 35, 27, 48, 5, 25, 50, 44, 11 },
99 { 35, 25, 38, 57, 33, 17, 40, 6, 59, 27, 54, 5, 61, 10, 52, 26, 36, 19, 51, 35, 57, 48, 11, 20, 54, 25, 61, 16, 1, 58, 24, 61, 3, 39, 7, 47, 1, 22, 49, 28, 63, 10, 58, 32, 17, 36, 45, 19, 51, 29, 59, 10, 50, 1, 23, 42, 18, 29, 51, 21, 56, 32, 14, 5, 40, 58, 47, 13, 54, 35, 29, 45, 18, 52, 26, 2, 38, 8, 46, 36, 58, 11, 52, 35, 17, 28, 1, 58, 9, 39, 17, 28, 37, 48, 20, 9, 57, 24, 50, 19, 58, 16, 48, 25, 43, 11, 35, 6, 45, 24, 56, 4, 36, 7, 47, 35, 52, 28, 59, 30, 2, 61, 21, 33, 63, 12, 18, 59 },
100 { 3, 49, 15, 10, 27, 61, 25, 45, 30, 0, 14, 47, 31, 38, 17, 62, 7, 55, 27, 4, 15, 24, 42, 52, 10, 34, 5, 51, 36, 18, 41, 11, 35, 21, 62, 13, 33, 57, 8, 35, 5, 40, 21, 43, 52, 3, 24, 56, 11, 16, 33, 25, 41, 20, 55, 8, 60, 35, 15, 48, 2, 57, 30, 49, 18, 25, 6, 39, 17, 57, 7, 25, 43, 5, 49, 16, 62, 22, 55, 4, 25, 43, 23, 7, 50, 11, 37, 48, 14, 51, 33, 57, 7, 27, 39, 46, 4, 29, 11, 43, 34, 56, 7, 60, 20, 54, 30, 57, 22, 49, 9, 33, 54, 14, 63, 23, 6, 43, 10, 40, 50, 13, 44, 8, 38, 33, 46, 23 },
101 { 55, 39, 22, 50, 44, 4, 36, 9, 52, 23, 37, 59, 21, 2, 46, 13, 31, 41, 11, 45, 62, 29, 6, 37, 19, 48, 30, 23, 44, 7, 53, 28, 54, 16, 41, 29, 44, 18, 52, 24, 60, 15, 48, 7, 27, 59, 9, 34, 42, 54, 7, 63, 4, 46, 31, 27, 45, 0, 40, 26, 34, 17, 37, 10, 53, 29, 36, 50, 2, 27, 51, 11, 61, 37, 23, 41, 30, 7, 18, 50, 39, 14, 63, 32, 45, 61, 19, 30, 25, 44, 2, 47, 23, 63, 11, 34, 59, 37, 60, 3, 22, 14, 44, 30, 15, 0, 47, 15, 3, 38, 61, 20, 27, 45, 11, 39, 51, 16, 55, 3, 22, 54, 29, 58, 1, 57, 6, 29 },
102 { 9, 17, 60, 2, 34, 56, 20, 62, 39, 12, 49, 6, 29, 56, 34, 48, 0, 58, 22, 38, 18, 43, 56, 0, 63, 14, 55, 3, 59, 31, 15, 45, 0, 49, 6, 58, 3, 38, 12, 45, 0, 37, 29, 57, 13, 39, 30, 49, 0, 23, 44, 36, 16, 57, 13, 54, 11, 24, 63, 9, 53, 7, 62, 42, 0, 59, 15, 23, 63, 34, 40, 16, 32, 0, 53, 12, 48, 28, 59, 33, 0, 53, 9, 27, 3, 22, 54, 5, 56, 9, 61, 13, 42, 14, 52, 19, 0, 21, 47, 27, 53, 36, 3, 50, 39, 58, 25, 40, 53, 28, 12, 50, 0, 59, 32, 2, 21, 34, 26, 46, 37, 7, 18, 47, 24, 14, 53, 42 },
103 { 61, 32, 13, 54, 29, 7, 46, 13, 28, 57, 18, 41, 53, 15, 9, 39, 24, 49, 33, 3, 53, 9, 26, 32, 40, 28, 46, 39, 25, 9, 56, 21, 63, 37, 26, 22, 51, 27, 17, 56, 31, 53, 4, 43, 22, 46, 12, 18, 60, 40, 20, 26, 50, 21, 39, 5, 49, 33, 16, 44, 22, 46, 20, 32, 24, 45, 8, 43, 12, 46, 4, 48, 56, 20, 29, 58, 3, 40, 10, 42, 31, 21, 47, 41, 56, 38, 15, 42, 36, 27, 20, 33, 55, 3, 26, 44, 31, 54, 12, 35, 9, 63, 28, 10, 21, 32, 9, 60, 17, 8, 43, 29, 40, 16, 36, 48, 60, 7, 57, 14, 62, 31, 42, 15, 36, 40, 20, 26 },
104 { 0, 37, 47, 23, 41, 18, 32, 48, 1, 35, 8, 25, 4, 26, 63, 20, 54, 8, 16, 61, 35, 23, 51, 15, 58, 7, 12, 20, 50, 34, 42, 4, 38, 10, 32, 47, 8, 60, 41, 20, 9, 25, 50, 19, 62, 1, 37, 56, 28, 8, 53, 11, 3, 58, 34, 43, 19, 60, 38, 4, 58, 31, 3, 51, 11, 55, 38, 30, 21, 58, 19, 26, 9, 44, 36, 13, 46, 20, 62, 24, 13, 60, 5, 28, 12, 34, 7, 59, 0, 53, 45, 6, 38, 30, 50, 7, 62, 16, 41, 5, 46, 18, 55, 42, 51, 5, 45, 23, 34, 48, 19, 58, 5, 25, 54, 19, 13, 41, 28, 21, 0, 49, 10, 60, 4, 51, 9, 45 },
105 { 19, 28, 6, 58, 10, 51, 4, 22, 55, 42, 60, 45, 34, 51, 42, 5, 30, 45, 27, 40, 13, 47, 4, 49, 21, 38, 60, 29, 2, 57, 17, 27, 52, 19, 61, 14, 30, 34, 2, 44, 63, 33, 11, 35, 16, 51, 25, 6, 14, 47, 31, 61, 37, 29, 18, 8, 52, 2, 28, 54, 13, 41, 15, 62, 35, 18, 2, 60, 6, 33, 41, 61, 31, 6, 56, 17, 34, 50, 6, 52, 44, 35, 16, 51, 59, 24, 48, 18, 31, 40, 16, 49, 21, 60, 17, 39, 10, 49, 32, 57, 24, 39, 1, 25, 18, 62, 37, 12, 56, 1, 37, 11, 52, 44, 9, 30, 47, 4, 51, 40, 55, 25, 34, 27, 56, 30, 32, 54 },
106 { 63, 40, 49, 15, 43, 26, 63, 38, 16, 20, 30, 12, 57, 14, 19, 60, 36, 12, 59, 2, 57, 17, 42, 31, 1, 44, 16, 35, 47, 11, 32, 48, 13, 43, 1, 39, 51, 12, 57, 23, 6, 40, 53, 3, 55, 31, 39, 60, 35, 44, 5, 15, 45, 1, 62, 41, 26, 14, 47, 22, 36, 27, 50, 9, 26, 47, 52, 28, 54, 16, 1, 13, 51, 39, 23, 63, 1, 30, 15, 26, 2, 57, 19, 37, 1, 44, 21, 50, 13, 63, 8, 24, 56, 1, 35, 25, 58, 20, 2, 28, 14, 51, 33, 59, 13, 30, 4, 49, 31, 24, 63, 26, 33, 3, 58, 38, 62, 24, 32, 8, 17, 45, 5, 48, 18, 3, 43, 11 },
107 { 21, 4, 24, 34, 59, 1, 37, 11, 53, 5, 47, 2, 22, 40, 32, 1, 24, 50, 21, 29, 38, 25, 63, 8, 55, 24, 53, 6, 62, 23, 59, 3, 54, 20, 58, 24, 5, 46, 15, 38, 48, 14, 27, 42, 23, 7, 46, 10, 17, 58, 25, 52, 23, 32, 49, 12, 55, 30, 40, 7, 59, 1, 56, 21, 39, 4, 23, 15, 37, 46, 55, 42, 21, 4, 48, 8, 45, 54, 37, 55, 32, 8, 46, 10, 30, 54, 4, 41, 25, 29, 36, 48, 11, 43, 14, 47, 5, 43, 53, 36, 61, 10, 45, 6, 41, 54, 27, 43, 16, 55, 6, 46, 18, 42, 23, 15, 1, 45, 12, 60, 37, 22, 62, 12, 39, 59, 16, 52 },
108 { 47, 35, 56, 7, 19, 46, 31, 50, 33, 24, 61, 35, 50, 7, 53, 44, 55, 6, 46, 10, 52, 5, 21, 43, 36, 10, 18, 41, 26, 37, 8, 29, 40, 36, 9, 49, 34, 26, 61, 21, 7, 59, 18, 62, 29, 54, 20, 32, 51, 0, 40, 10, 55, 6, 20, 36, 9, 61, 5, 51, 44, 19, 33, 43, 13, 57, 40, 63, 8, 24, 29, 10, 60, 34, 27, 40, 25, 18, 10, 42, 21, 49, 26, 62, 38, 12, 33, 61, 5, 57, 2, 19, 54, 28, 62, 22, 38, 31, 16, 7, 22, 47, 29, 17, 35, 8, 20, 51, 2, 40, 22, 50, 13, 61, 28, 53, 35, 20, 56, 30, 2, 53, 14, 41, 23, 34, 8, 31 },
109 { 12, 2, 42, 29, 52, 13, 21, 8, 55, 14, 41, 17, 28, 58, 23, 11, 17, 36, 31, 62, 17, 34, 50, 14, 28, 61, 33, 52, 2, 51, 17, 45, 7, 25, 62, 30, 18, 55, 0, 42, 30, 35, 45, 1, 12, 48, 3, 63, 21, 36, 30, 48, 19, 59, 43, 27, 46, 17, 34, 25, 12, 29, 53, 6, 48, 31, 11, 34, 49, 3, 36, 50, 19, 47, 14, 61, 11, 36, 58, 4, 60, 14, 39, 22, 6, 52, 15, 35, 17, 46, 31, 42, 9, 34, 3, 52, 12, 60, 26, 56, 40, 2, 53, 23, 57, 38, 62, 14, 36, 59, 10, 31, 39, 6, 49, 9, 41, 26, 5, 48, 43, 27, 33, 58, 1, 50, 25, 57 },
110 { 61, 37, 15, 61, 3, 39, 58, 43, 26, 0, 44, 10, 47, 3, 37, 63, 28, 43, 13, 39, 3, 57, 30, 59, 0, 48, 5, 43, 13, 22, 60, 33, 55, 15, 42, 4, 52, 10, 45, 13, 54, 4, 24, 49, 37, 26, 41, 14, 42, 9, 61, 13, 38, 23, 3, 53, 0, 58, 21, 42, 63, 10, 17, 61, 25, 0, 58, 28, 17, 44, 57, 12, 27, 0, 55, 5, 52, 28, 23, 47, 29, 0, 43, 17, 58, 28, 47, 23, 55, 10, 58, 23, 51, 40, 18, 33, 45, 0, 49, 8, 32, 61, 19, 48, 0, 26, 7, 47, 29, 18, 44, 0, 56, 34, 20, 59, 15, 51, 37, 18, 10, 52, 7, 20, 46, 9, 38, 17 },
111 { 6, 27, 48, 23, 45, 29, 5, 18, 38, 62, 27, 56, 20, 32, 15, 9, 48, 0, 54, 22, 45, 20, 7, 41, 23, 39, 19, 27, 58, 31, 44, 0, 12, 50, 23, 56, 20, 39, 32, 59, 16, 52, 33, 9, 57, 22, 6, 58, 28, 50, 24, 2, 56, 35, 16, 45, 32, 38, 15, 54, 2, 38, 46, 22, 35, 45, 20, 5, 52, 25, 7, 35, 59, 32, 22, 43, 38, 3, 51, 16, 34, 53, 32, 50, 3, 40, 8, 43, 0, 39, 27, 4, 14, 61, 8, 55, 15, 41, 20, 44, 27, 13, 39, 11, 46, 42, 54, 33, 4, 52, 23, 61, 14, 25, 43, 2, 33, 11, 63, 29, 61, 17, 40, 55, 22, 62, 28, 44 },
112 { 20, 54, 8, 56, 35, 10, 63, 31, 52, 12, 48, 6, 59, 41, 52, 33, 19, 58, 25, 49, 11, 37, 47, 12, 54, 15, 56, 35, 7, 47, 16, 53, 28, 34, 5, 37, 28, 8, 48, 3, 28, 38, 18, 61, 16, 43, 53, 32, 4, 17, 47, 27, 44, 8, 63, 10, 25, 49, 6, 37, 24, 52, 32, 3, 50, 12, 41, 56, 38, 14, 62, 20, 40, 16, 53, 31, 18, 63, 41, 9, 59, 7, 13, 25, 57, 20, 63, 26, 53, 18, 48, 62, 30, 46, 21, 25, 58, 29, 36, 4, 55, 34, 6, 60, 31, 16, 21, 12, 58, 38, 9, 29, 47, 7, 52, 30, 57, 44, 22, 0, 35, 45, 3, 31, 14, 36, 0, 51 },
113 { 42, 14, 33, 24, 16, 49, 40, 2, 22, 33, 16, 36, 25, 1, 21, 61, 38, 8, 33, 4, 62, 26, 29, 60, 6, 46, 30, 11, 63, 4, 36, 40, 19, 57, 46, 11, 41, 63, 22, 25, 58, 10, 46, 2, 34, 27, 11, 38, 56, 34, 12, 53, 18, 33, 41, 51, 13, 28, 60, 20, 47, 14, 29, 59, 16, 62, 8, 22, 32, 47, 9, 49, 2, 44, 7, 12, 45, 6, 20, 27, 45, 24, 62, 42, 36, 11, 33, 15, 37, 7, 32, 10, 37, 1, 35, 50, 6, 11, 63, 24, 52, 15, 50, 24, 3, 37, 56, 27, 34, 22, 49, 16, 36, 62, 17, 39, 4, 15, 54, 24, 50, 8, 58, 26, 49, 54, 11, 30 },
114 { 4, 59, 41, 1, 53, 12, 25, 45, 59, 7, 51, 39, 54, 14, 46, 4, 27, 53, 16, 44, 18, 51, 1, 32, 25, 2, 50, 40, 20, 54, 24, 9, 62, 2, 27, 60, 1, 17, 36, 50, 6, 40, 30, 55, 41, 19, 49, 1, 21, 60, 40, 5, 62, 1, 22, 30, 57, 4, 43, 31, 1, 55, 40, 7, 27, 37, 30, 54, 1, 19, 42, 30, 56, 26, 62, 49, 24, 57, 37, 56, 2, 39, 16, 5, 30, 55, 3, 49, 60, 23, 56, 44, 17, 52, 13, 42, 28, 48, 18, 45, 9, 37, 21, 41, 58, 10, 48, 1, 63, 5, 41, 57, 2, 24, 12, 48, 27, 42, 32, 46, 13, 38, 19, 34, 5, 41, 25, 60 },
115 { 39, 28, 21, 46, 32, 57, 36, 9, 19, 42, 4, 29, 11, 43, 30, 49, 13, 42, 35, 56, 9, 39, 15, 52, 36, 61, 18, 26, 45, 14, 31, 48, 21, 43, 14, 33, 49, 54, 14, 44, 21, 62, 13, 23, 8, 62, 15, 51, 44, 7, 30, 37, 20, 42, 56, 7, 39, 18, 50, 11, 61, 9, 19, 43, 57, 2, 48, 11, 39, 60, 28, 4, 37, 17, 35, 1, 33, 11, 31, 14, 48, 19, 35, 51, 46, 21, 44, 29, 12, 41, 2, 22, 58, 26, 54, 4, 59, 38, 2, 33, 57, 1, 63, 13, 28, 51, 15, 40, 18, 45, 8, 30, 43, 37, 54, 19, 8, 59, 21, 6, 60, 29, 55, 10, 63, 15, 47, 17 },
116 { 3, 50, 10, 62, 18, 5, 27, 49, 60, 23, 55, 18, 62, 24, 56, 10, 59, 28, 2, 23, 34, 59, 43, 20, 10, 42, 8, 49, 1, 37, 57, 6, 51, 29, 53, 7, 23, 31, 5, 32, 51, 0, 35, 54, 45, 31, 5, 26, 36, 24, 55, 15, 48, 29, 14, 48, 26, 60, 21, 41, 36, 26, 50, 33, 14, 44, 17, 24, 52, 15, 46, 23, 54, 6, 47, 21, 60, 50, 4, 53, 29, 61, 8, 23, 1, 60, 19, 6, 53, 16, 47, 34, 6, 39, 16, 31, 12, 20, 53, 22, 30, 43, 25, 46, 35, 6, 44, 32, 53, 26, 55, 19, 11, 59, 5, 33, 51, 1, 35, 53, 25, 3, 42, 23, 44, 32, 7, 53 },
117 { 22, 44, 37, 6, 26, 51, 38, 0, 34, 13, 31, 46, 3, 37, 6, 19, 40, 21, 47, 63, 12, 5, 29, 55, 22, 58, 34, 28, 60, 22, 11, 41, 17, 38, 9, 44, 59, 39, 56, 19, 11, 47, 25, 15, 3, 39, 57, 17, 61, 11, 46, 3, 58, 9, 54, 35, 2, 34, 8, 45, 15, 56, 5, 23, 53, 33, 63, 35, 4, 59, 10, 51, 13, 61, 29, 41, 15, 25, 43, 19, 40, 10, 54, 33, 41, 12, 38, 51, 31, 26, 61, 9, 30, 45, 24, 62, 49, 40, 10, 61, 14, 49, 5, 17, 54, 20, 60, 23, 3, 13, 35, 50, 32, 23, 46, 27, 38, 63, 16, 12, 39, 48, 18, 51, 1, 27, 56, 35 },
118 { 63, 15, 30, 55, 43, 14, 57, 17, 53, 44, 7, 48, 26, 50, 32, 60, 0, 53, 14, 31, 50, 24, 46, 0, 38, 13, 4, 52, 16, 45, 30, 59, 0, 25, 55, 35, 16, 10, 26, 42, 58, 29, 60, 38, 50, 22, 28, 47, 0, 50, 28, 19, 33, 39, 11, 44, 16, 52, 24, 59, 3, 38, 27, 51, 0, 21, 7, 42, 26, 34, 21, 40, 33, 18, 39, 3, 54, 38, 8, 59, 0, 44, 27, 15, 58, 28, 57, 9, 43, 0, 36, 50, 20, 59, 8, 34, 0, 27, 47, 7, 36, 19, 56, 32, 0, 38, 11, 29, 62, 47, 6, 61, 0, 41, 14, 56, 10, 23, 45, 31, 57, 8, 36, 13, 58, 38, 11, 19 },
119 { 0, 34, 12, 47, 21, 2, 40, 30, 11, 25, 61, 20, 40, 15, 35, 22, 45, 36, 7, 41, 17, 57, 9, 48, 32, 62, 44, 24, 35, 3, 54, 13, 33, 63, 19, 4, 48, 22, 62, 2, 37, 8, 33, 6, 20, 52, 9, 32, 43, 13, 39, 63, 25, 4, 49, 23, 62, 32, 9, 30, 48, 18, 63, 12, 46, 29, 58, 13, 48, 8, 57, 31, 0, 51, 9, 58, 12, 22, 47, 29, 35, 22, 49, 5, 46, 4, 34, 20, 63, 24, 56, 11, 41, 3, 51, 19, 56, 35, 17, 58, 28, 42, 9, 45, 59, 26, 51, 42, 17, 36, 25, 15, 53, 21, 44, 3, 30, 55, 5, 50, 21, 28, 61, 32, 6, 49, 28, 46 },
120 { 58, 42, 60, 4, 31, 59, 22, 63, 35, 38, 9, 54, 1, 57, 8, 51, 16, 58, 27, 53, 3, 38, 30, 15, 27, 6, 19, 56, 10, 50, 21, 36, 47, 5, 43, 28, 51, 32, 13, 46, 18, 54, 16, 43, 63, 12, 36, 59, 22, 34, 5, 52, 17, 59, 27, 41, 0, 19, 55, 37, 13, 43, 6, 34, 41, 10, 36, 55, 19, 44, 3, 16, 58, 27, 49, 25, 32, 62, 17, 55, 13, 63, 18, 52, 25, 37, 17, 48, 13, 32, 5, 46, 28, 37, 14, 43, 25, 5, 51, 39, 3, 52, 33, 22, 8, 40, 12, 4, 57, 9, 46, 39, 28, 58, 13, 62, 17, 42, 19, 36, 0, 47, 16, 43, 24, 21, 54, 13 },
121 { 25, 9, 23, 50, 36, 8, 45, 14, 3, 51, 16, 28, 44, 12, 42, 29, 4, 26, 10, 47, 22, 61, 18, 54, 51, 39, 46, 13, 41, 26, 58, 7, 18, 39, 12, 57, 15, 1, 52, 27, 41, 23, 48, 1, 27, 45, 18, 2, 57, 26, 55, 8, 43, 31, 6, 58, 14, 51, 40, 5, 61, 31, 24, 54, 17, 60, 22, 1, 39, 30, 53, 45, 36, 13, 43, 5, 45, 2, 37, 6, 34, 42, 2, 39, 10, 62, 7, 54, 40, 18, 60, 15, 52, 21, 63, 8, 55, 46, 15, 30, 23, 13, 62, 16, 50, 24, 58, 31, 48, 21, 34, 2, 49, 7, 31, 37, 26, 48, 9, 61, 40, 11, 52, 2, 60, 40, 4, 37 },
122 { 52, 28, 39, 16, 54, 19, 29, 55, 42, 20, 58, 33, 24, 63, 18, 55, 39, 62, 43, 34, 12, 40, 6, 35, 2, 25, 8, 62, 34, 1, 31, 42, 61, 27, 53, 24, 40, 61, 34, 8, 59, 4, 30, 56, 40, 6, 53, 42, 10, 48, 16, 37, 12, 46, 21, 36, 47, 11, 28, 45, 22, 10, 57, 2, 49, 31, 14, 44, 61, 11, 25, 6, 23, 63, 18, 36, 28, 56, 20, 51, 11, 48, 27, 56, 32, 22, 45, 30, 2, 42, 27, 39, 1, 44, 23, 31, 38, 22, 11, 61, 43, 54, 4, 47, 35, 2, 44, 16, 28, 54, 12, 62, 18, 43, 10, 52, 1, 58, 33, 15, 29, 56, 20, 34, 9, 30, 48, 17 },
123 { 46, 2, 56, 11, 41, 1, 49, 6, 27, 47, 2, 48, 5, 32, 37, 3, 13, 19, 32, 1, 55, 28, 60, 17, 43, 59, 32, 20, 49, 16, 55, 23, 14, 46, 2, 36, 6, 30, 20, 49, 12, 47, 35, 14, 21, 60, 29, 14, 35, 24, 46, 1, 56, 29, 53, 8, 33, 23, 56, 1, 35, 46, 20, 39, 26, 4, 53, 28, 17, 38, 60, 34, 48, 9, 55, 15, 46, 7, 41, 31, 60, 24, 16, 36, 1, 59, 19, 52, 35, 6, 55, 11, 59, 33, 7, 57, 4, 29, 48, 1, 19, 26, 37, 30, 18, 63, 37, 6, 59, 1, 40, 24, 56, 33, 46, 22, 35, 7, 24, 53, 39, 5, 26, 45, 55, 18, 62, 7 },
124 { 20, 60, 29, 34, 20, 62, 33, 52, 10, 36, 13, 60, 41, 21, 50, 27, 56, 49, 8, 51, 21, 45, 11, 48, 8, 23, 53, 3, 29, 44, 5, 52, 9, 32, 50, 17, 43, 56, 3, 38, 24, 10, 62, 25, 51, 9, 33, 49, 61, 7, 30, 62, 22, 19, 2, 42, 63, 5, 49, 18, 60, 15, 52, 7, 43, 56, 23, 50, 5, 50, 2, 20, 41, 30, 1, 52, 22, 61, 14, 26, 3, 43, 53, 7, 47, 28, 11, 14, 23, 58, 33, 25, 47, 13, 50, 17, 40, 54, 34, 60, 41, 6, 59, 14, 50, 7, 25, 55, 20, 42, 51, 8, 27, 4, 16, 60, 28, 50, 44, 3, 22, 49, 63, 12, 33, 1, 43, 31 },
125 { 36, 5, 46, 8, 44, 24, 13, 39, 25, 57, 31, 18, 8, 52, 10, 45, 6, 30, 36, 24, 63, 4, 33, 26, 57, 40, 15, 56, 37, 12, 40, 25, 37, 58, 11, 63, 21, 45, 16, 60, 31, 53, 18, 33, 3, 45, 23, 0, 20, 54, 40, 15, 50, 38, 60, 16, 25, 42, 29, 38, 7, 41, 25, 62, 18, 33, 8, 35, 42, 16, 32, 56, 12, 39, 59, 19, 34, 9, 49, 38, 57, 12, 21, 50, 14, 40, 61, 44, 50, 9, 49, 19, 3, 29, 35, 62, 12, 24, 7, 18, 52, 32, 10, 46, 21, 41, 32, 11, 36, 29, 14, 34, 60, 38, 54, 11, 41, 14, 19, 57, 32, 16, 7, 41, 51, 25, 14, 57 },
126 { 53, 18, 26, 50, 15, 58, 4, 63, 17, 43, 7, 40, 61, 35, 15, 41, 23, 60, 16, 38, 14, 42, 19, 50, 0, 31, 10, 46, 27, 63, 18, 60, 0, 20, 29, 39, 8, 26, 37, 5, 42, 0, 44, 39, 57, 17, 58, 41, 28, 37, 4, 32, 9, 44, 12, 31, 54, 10, 59, 14, 27, 53, 12, 36, 0, 47, 13, 63, 21, 58, 10, 24, 50, 27, 4, 26, 44, 53, 31, 0, 18, 42, 29, 33, 57, 4, 32, 26, 0, 38, 16, 61, 41, 53, 20, 0, 42, 44, 49, 27, 10, 56, 39, 0, 57, 15, 53, 49, 3, 61, 22, 47, 17, 5, 49, 26, 2, 63, 39, 10, 47, 27, 37, 23, 4, 59, 38, 10 },
127 { 23, 39, 61, 3, 37, 28, 48, 31, 0, 34, 51, 23, 2, 26, 58, 0, 53, 11, 46, 1, 57, 29, 52, 14, 37, 61, 21, 35, 2, 49, 7, 34, 47, 55, 4, 33, 54, 13, 58, 52, 19, 50, 22, 7, 13, 29, 36, 11, 51, 17, 60, 25, 55, 4, 34, 51, 0, 35, 20, 48, 32, 3, 51, 30, 59, 28, 40, 3, 46, 29, 54, 43, 7, 62, 47, 11, 39, 4, 23, 46, 55, 8, 63, 5, 25, 37, 18, 46, 21, 56, 31, 5, 36, 8, 45, 58, 26, 15, 2, 36, 47, 21, 29, 44, 25, 34, 3, 27, 43, 10, 52, 0, 45, 30, 24, 36, 43, 18, 34, 59, 0, 52, 61, 15, 44, 19, 30, 49 },
128 { 0, 27, 12, 43, 54, 9, 22, 53, 21, 46, 15, 55, 29, 47, 20, 33, 39, 28, 59, 35, 9, 44, 5, 24, 47, 7, 52, 17, 56, 22, 30, 42, 14, 26, 45, 18, 49, 1, 24, 34, 11, 27, 55, 32, 61, 47, 2, 56, 6, 44, 13, 47, 36, 27, 58, 22, 16, 47, 40, 4, 57, 38, 21, 45, 16, 9, 56, 26, 11, 38, 0, 22, 36, 17, 33, 57, 16, 30, 62, 15, 35, 40, 20, 45, 59, 10, 54, 8, 63, 13, 52, 27, 22, 57, 28, 12, 32, 51, 55, 22, 63, 4, 16, 54, 12, 62, 45, 19, 58, 13, 32, 40, 20, 56, 7, 57, 9, 54, 6, 29, 42, 21, 8, 55, 35, 47, 6, 41 },
129 { 56, 33, 58, 32, 19, 35, 42, 6, 59, 11, 38, 5, 49, 12, 62, 7, 52, 17, 5, 25, 54, 20, 61, 31, 54, 27, 41, 11, 44, 5, 59, 12, 36, 51, 10, 61, 28, 41, 48, 9, 43, 63, 5, 40, 20, 8, 49, 26, 34, 21, 58, 1, 18, 45, 7, 39, 61, 26, 8, 50, 23, 10, 63, 5, 55, 37, 19, 49, 52, 15, 59, 47, 13, 54, 1, 25, 42, 58, 10, 48, 3, 27, 50, 1, 17, 48, 34, 41, 16, 40, 2, 45, 10, 39, 17, 61, 5, 38, 19, 9, 41, 31, 60, 38, 5, 23, 36, 8, 30, 55, 24, 63, 12, 48, 14, 51, 31, 20, 45, 25, 12, 50, 32, 2, 28, 11, 62, 14 },
130 { 44, 16, 7, 48, 1, 62, 16, 50, 27, 33, 61, 25, 17, 44, 31, 14, 22, 43, 32, 48, 18, 40, 8, 36, 3, 16, 33, 62, 23, 38, 25, 53, 2, 21, 41, 6, 22, 15, 59, 29, 16, 37, 26, 15, 52, 42, 23, 15, 54, 39, 10, 30, 53, 11, 49, 24, 2, 43, 55, 17, 34, 44, 15, 31, 24, 44, 2, 32, 7, 35, 25, 5, 40, 45, 29, 51, 6, 21, 37, 52, 24, 60, 13, 31, 53, 23, 2, 28, 49, 24, 31, 60, 20, 51, 1, 34, 48, 14, 59, 33, 50, 1, 18, 33, 48, 60, 17, 51, 39, 6, 38, 2, 35, 29, 40, 23, 1, 62, 15, 53, 37, 17, 46, 57, 40, 51, 24, 22 },
131 { 5, 37, 52, 24, 45, 13, 40, 3, 45, 9, 19, 42, 56, 4, 37, 46, 56, 2, 63, 11, 51, 1, 49, 13, 59, 45, 39, 1, 48, 15, 58, 9, 46, 31, 54, 35, 57, 38, 3, 46, 56, 4, 47, 57, 1, 30, 38, 63, 3, 46, 28, 63, 41, 14, 33, 62, 19, 32, 13, 28, 61, 1, 53, 42, 11, 60, 22, 62, 27, 42, 61, 31, 19, 8, 61, 12, 32, 55, 2, 18, 33, 12, 43, 36, 9, 62, 30, 55, 6, 58, 35, 7, 43, 29, 54, 23, 43, 30, 3, 25, 11, 45, 52, 28, 7, 14, 42, 1, 22, 50, 16, 53, 19, 59, 4, 46, 33, 41, 4, 35, 58, 5, 26, 13, 20, 2, 34, 54 },
132 { 30, 63, 21, 10, 26, 55, 29, 59, 23, 39, 53, 1, 36, 24, 59, 27, 10, 34, 23, 38, 30, 60, 22, 42, 28, 19, 9, 57, 30, 19, 43, 33, 13, 63, 3, 19, 11, 50, 31, 20, 14, 34, 10, 35, 17, 59, 7, 31, 19, 25, 50, 5, 20, 57, 29, 6, 52, 41, 4, 46, 20, 37, 26, 17, 49, 6, 39, 18, 53, 14, 3, 49, 57, 23, 34, 48, 14, 41, 28, 38, 56, 6, 58, 25, 39, 19, 43, 15, 37, 11, 47, 18, 53, 4, 37, 9, 62, 21, 53, 40, 57, 24, 13, 40, 56, 26, 47, 31, 59, 25, 45, 27, 10, 43, 21, 61, 13, 27, 48, 9, 23, 43, 31, 62, 38, 59, 9, 47 },
133 { 25, 4, 40, 60, 34, 6, 18, 36, 8, 57, 12, 30, 49, 14, 6, 54, 41, 16, 50, 6, 43, 15, 34, 4, 53, 24, 50, 35, 4, 51, 7, 55, 28, 24, 39, 44, 60, 7, 25, 62, 42, 53, 24, 61, 28, 45, 52, 12, 48, 37, 9, 35, 43, 3, 37, 48, 12, 58, 30, 52, 9, 59, 6, 57, 33, 29, 48, 4, 37, 45, 20, 34, 10, 39, 0, 60, 22, 45, 8, 63, 21, 42, 14, 49, 3, 56, 11, 46, 21, 61, 0, 42, 25, 13, 63, 17, 36, 8, 46, 16, 6, 35, 63, 0, 21, 37, 4, 57, 9, 34, 5, 61, 48, 32, 8, 37, 54, 17, 56, 30, 60, 0, 50, 16, 7, 29, 42, 17 },
134 { 32, 50, 15, 48, 2, 43, 52, 25, 47, 16, 32, 63, 21, 52, 40, 19, 0, 61, 29, 58, 20, 56, 26, 46, 12, 55, 6, 22, 62, 32, 17, 40, 0, 49, 34, 8, 27, 32, 48, 0, 21, 39, 5, 44, 12, 6, 22, 40, 0, 57, 16, 60, 23, 17, 54, 22, 36, 15, 24, 39, 19, 34, 47, 23, 0, 54, 13, 51, 24, 9, 55, 16, 52, 27, 44, 20, 4, 54, 26, 49, 0, 30, 46, 16, 29, 51, 34, 4, 52, 28, 33, 15, 57, 39, 26, 49, 0, 56, 27, 31, 48, 20, 43, 29, 53, 11, 46, 19, 41, 13, 55, 18, 0, 57, 26, 51, 2, 44, 6, 38, 14, 40, 22, 45, 36, 53, 3, 57 },
135 { 44, 12, 37, 28, 22, 57, 11, 38, 0, 51, 9, 41, 4, 29, 11, 47, 33, 45, 12, 26, 3, 36, 9, 63, 31, 16, 38, 44, 14, 47, 25, 61, 20, 58, 15, 47, 17, 57, 13, 36, 9, 51, 18, 29, 50, 36, 54, 20, 61, 27, 32, 13, 53, 44, 9, 27, 0, 63, 45, 2, 56, 10, 14, 43, 41, 28, 58, 11, 35, 60, 30, 41, 6, 63, 11, 51, 37, 32, 15, 10, 35, 53, 5, 61, 22, 7, 26, 59, 23, 9, 44, 48, 21, 3, 51, 32, 24, 41, 12, 61, 2, 55, 9, 15, 35, 58, 28, 15, 62, 30, 37, 23, 42, 29, 11, 17, 35, 24, 63, 20, 52, 28, 8, 55, 11, 23, 47, 19 },
136 { 0, 56, 8, 53, 14, 31, 61, 20, 55, 28, 62, 18, 35, 60, 25, 57, 7, 23, 39, 54, 47, 17, 43, 0, 40, 59, 29, 2, 56, 10, 37, 5, 43, 11, 29, 52, 1, 23, 54, 41, 59, 30, 55, 1, 62, 15, 33, 4, 43, 10, 47, 39, 1, 31, 40, 60, 49, 33, 7, 55, 26, 50, 31, 61, 8, 18, 21, 32, 44, 1, 25, 47, 18, 36, 30, 23, 59, 7, 40, 59, 27, 19, 38, 32, 44, 54, 40, 17, 38, 60, 27, 6, 35, 55, 10, 14, 44, 5, 50, 17, 38, 26, 42, 50, 18, 3, 44, 52, 2, 49, 7, 52, 15, 46, 62, 39, 55, 10, 31, 48, 3, 58, 33, 18, 61, 34, 13, 59 },
137 { 39, 27, 63, 20, 35, 41, 4, 45, 26, 5, 38, 13, 44, 2, 50, 17, 37, 52, 2, 13, 28, 58, 24, 51, 21, 8, 34, 48, 27, 42, 18, 51, 31, 56, 5, 36, 38, 44, 4, 17, 26, 11, 38, 23, 42, 8, 56, 39, 24, 51, 5, 56, 21, 59, 14, 6, 18, 42, 22, 35, 16, 37, 3, 25, 39, 46, 63, 5, 50, 17, 58, 8, 55, 3, 50, 12, 43, 17, 47, 2, 51, 9, 62, 12, 1, 35, 13, 50, 1, 37, 12, 51, 19, 29, 46, 59, 22, 58, 33, 45, 22, 60, 10, 32, 61, 39, 8, 33, 25, 36, 20, 60, 38, 4, 21, 5, 28, 45, 12, 18, 42, 11, 49, 1, 27, 40, 6, 30 },
138 { 24, 16, 42, 1, 50, 10, 48, 17, 33, 43, 24, 48, 21, 55, 31, 42, 10, 21, 63, 35, 49, 6, 33, 13, 41, 53, 10, 20, 60, 6, 53, 26, 12, 41, 22, 60, 14, 28, 63, 33, 49, 3, 45, 16, 48, 26, 14, 46, 18, 30, 35, 26, 8, 50, 29, 51, 25, 57, 12, 47, 53, 9, 62, 20, 54, 2, 36, 15, 40, 28, 33, 13, 38, 24, 46, 1, 29, 56, 33, 20, 44, 24, 41, 26, 57, 20, 63, 8, 30, 55, 5, 41, 62, 8, 34, 2, 37, 10, 19, 6, 37, 1, 53, 23, 5, 27, 58, 22, 43, 12, 50, 26, 9, 34, 54, 32, 49, 1, 59, 37, 22, 46, 25, 36, 51, 15, 54, 46 },
139 { 52, 7, 45, 33, 26, 58, 14, 60, 7, 54, 3, 58, 8, 34, 14, 5, 59, 30, 18, 44, 8, 22, 48, 62, 3, 26, 55, 38, 23, 16, 39, 1, 62, 24, 49, 9, 53, 19, 46, 7, 19, 60, 31, 58, 2, 34, 53, 7, 59, 2, 62, 42, 46, 19, 36, 11, 44, 4, 38, 28, 1, 43, 32, 51, 12, 29, 56, 22, 52, 2, 62, 49, 22, 60, 14, 35, 63, 5, 25, 57, 14, 53, 4, 46, 18, 31, 42, 22, 47, 20, 58, 31, 16, 43, 23, 54, 30, 42, 52, 57, 29, 49, 30, 13, 45, 48, 16, 55, 6, 63, 1, 44, 14, 58, 19, 47, 15, 24, 51, 34, 6, 55, 5, 63, 20, 41, 21, 9 },
140 { 30, 62, 18, 55, 5, 23, 39, 29, 49, 30, 15, 36, 28, 46, 60, 25, 39, 46, 4, 32, 61, 40, 15, 30, 36, 45, 14, 2, 49, 33, 57, 45, 18, 32, 3, 45, 30, 2, 35, 52, 40, 27, 13, 21, 38, 63, 20, 28, 37, 23, 16, 10, 13, 55, 2, 62, 21, 32, 60, 17, 58, 23, 5, 40, 16, 48, 7, 45, 10, 26, 43, 19, 6, 31, 52, 21, 39, 16, 48, 9, 37, 28, 36, 55, 7, 48, 3, 59, 15, 45, 25, 1, 53, 13, 47, 7, 62, 15, 4, 25, 12, 41, 18, 60, 38, 11, 34, 19, 39, 31, 29, 56, 23, 42, 3, 27, 60, 41, 8, 16, 61, 29, 43, 9, 32, 2, 60, 34 },
141 { 3, 38, 13, 37, 52, 44, 2, 19, 12, 42, 63, 19, 40, 1, 20, 50, 12, 55, 15, 56, 27, 1, 54, 11, 57, 18, 32, 63, 44, 4, 29, 13, 37, 61, 35, 16, 42, 57, 12, 22, 6, 55, 43, 10, 50, 5, 44, 11, 48, 52, 34, 58, 28, 41, 38, 30, 7, 52, 11, 49, 30, 14, 45, 27, 59, 34, 21, 38, 32, 58, 11, 36, 56, 42, 9, 41, 3, 54, 31, 42, 0, 60, 16, 11, 39, 24, 52, 33, 6, 36, 10, 40, 32, 60, 26, 20, 39, 28, 47, 34, 63, 8, 54, 3, 24, 56, 0, 51, 13, 47, 16, 40, 7, 35, 52, 11, 36, 4, 57, 30, 39, 13, 18, 50, 58, 28, 12, 48 },
142 { 57, 24, 49, 21, 10, 31, 61, 36, 56, 0, 22, 53, 11, 56, 32, 7, 36, 27, 41, 9, 46, 19, 34, 42, 25, 7, 50, 9, 28, 21, 54, 8, 50, 7, 27, 59, 10, 25, 48, 62, 37, 0, 33, 58, 25, 18, 32, 61, 0, 15, 45, 5, 50, 3, 23, 55, 47, 17, 40, 6, 60, 34, 53, 8, 41, 0, 61, 13, 54, 4, 46, 28, 0, 17, 48, 27, 58, 13, 23, 61, 33, 21, 50, 30, 62, 8, 14, 29, 56, 27, 61, 49, 17, 2, 44, 11, 51, 0, 59, 17, 40, 20, 32, 47, 36, 21, 42, 28, 60, 4, 54, 10, 59, 17, 30, 62, 21, 43, 26, 48, 0, 56, 36, 25, 8, 44, 39, 17 },
143 { 10, 42, 4, 59, 27, 47, 8, 23, 51, 32, 45, 6, 37, 26, 48, 43, 62, 0, 21, 53, 38, 12, 51, 5, 60, 47, 24, 37, 59, 15, 35, 47, 22, 55, 0, 50, 21, 40, 6, 29, 15, 52, 24, 8, 41, 55, 13, 29, 40, 56, 24, 31, 19, 33, 61, 15, 0, 35, 24, 42, 21, 2, 19, 57, 24, 15, 30, 50, 20, 25, 40, 16, 57, 34, 61, 8, 29, 45, 6, 49, 11, 47, 2, 44, 19, 57, 38, 50, 12, 42, 21, 4, 35, 52, 28, 56, 23, 36, 13, 45, 4, 52, 27, 14, 6, 62, 9, 45, 21, 37, 25, 46, 33, 49, 0, 44, 7, 53, 13, 19, 53, 31, 3, 47, 15, 56, 22, 51 },
144 { 35, 28, 53, 32, 1, 16, 54, 40, 9, 17, 25, 58, 14, 59, 3, 22, 16, 51, 31, 5, 23, 58, 28, 17, 35, 20, 0, 42, 11, 52, 3, 31, 41, 17, 43, 13, 32, 54, 18, 60, 32, 45, 17, 49, 2, 36, 51, 22, 7, 36, 9, 63, 48, 12, 46, 26, 43, 28, 63, 13, 48, 37, 51, 33, 5, 47, 55, 9, 42, 63, 7, 51, 24, 12, 37, 19, 55, 34, 18, 38, 15, 28, 54, 34, 5, 43, 22, 0, 48, 14, 54, 24, 58, 9, 38, 5, 32, 55, 21, 30, 49, 9, 59, 43, 30, 51, 35, 26, 7, 53, 2, 22, 14, 27, 57, 18, 38, 24, 33, 45, 10, 41, 20, 60, 37, 5, 32, 0 },
145 { 63, 19, 15, 40, 62, 35, 14, 28, 46, 61, 4, 49, 35, 10, 29, 54, 33, 8, 45, 62, 37, 1, 43, 55, 10, 52, 61, 30, 19, 40, 25, 62, 11, 38, 27, 58, 36, 3, 46, 8, 39, 4, 62, 28, 47, 20, 4, 54, 47, 27, 43, 1, 21, 38, 8, 58, 10, 54, 4, 56, 9, 26, 12, 39, 60, 27, 18, 37, 1, 31, 35, 5, 45, 50, 2, 43, 26, 1, 59, 23, 56, 40, 7, 26, 58, 17, 32, 63, 25, 39, 7, 31, 45, 19, 63, 15, 48, 8, 37, 61, 16, 34, 1, 56, 18, 3, 15, 58, 49, 32, 63, 41, 55, 5, 40, 22, 50, 6, 59, 2, 63, 23, 52, 11, 26, 61, 44, 23 },
146 { 11, 56, 46, 6, 22, 43, 58, 3, 34, 21, 38, 30, 18, 44, 52, 13, 41, 57, 17, 28, 14, 49, 25, 7, 33, 39, 26, 6, 56, 48, 1, 20, 56, 5, 46, 9, 19, 51, 30, 25, 56, 21, 35, 14, 57, 42, 16, 33, 10, 57, 17, 59, 41, 25, 53, 37, 20, 40, 30, 18, 31, 62, 44, 22, 3, 44, 11, 48, 23, 53, 18, 60, 29, 22, 62, 15, 53, 47, 10, 41, 3, 19, 52, 36, 13, 46, 10, 35, 3, 61, 41, 16, 1, 50, 26, 42, 18, 46, 2, 25, 54, 20, 39, 23, 47, 31, 41, 12, 38, 17, 8, 19, 31, 48, 12, 61, 9, 54, 29, 35, 15, 38, 6, 43, 34, 14, 7, 47 },
147 { 39, 2, 33, 26, 53, 8, 18, 50, 41, 12, 53, 1, 63, 24, 19, 39, 2, 24, 47, 10, 60, 38, 19, 63, 48, 4, 15, 45, 32, 14, 60, 36, 29, 53, 23, 63, 34, 12, 61, 1, 43, 11, 53, 30, 1, 26, 60, 45, 23, 39, 3, 29, 12, 50, 4, 16, 51, 3, 45, 36, 50, 1, 16, 54, 35, 14, 57, 30, 58, 9, 46, 14, 41, 10, 32, 38, 4, 30, 21, 51, 32, 63, 25, 1, 60, 27, 53, 18, 51, 22, 28, 55, 34, 12, 40, 3, 60, 29, 57, 41, 6, 44, 11, 53, 8, 61, 24, 57, 1, 28, 44, 59, 36, 3, 34, 25, 41, 31, 16, 44, 22, 47, 28, 58, 1, 49, 54, 29 },
148 { 58, 25, 50, 13, 38, 30, 60, 24, 6, 57, 27, 42, 9, 45, 6, 61, 30, 50, 4, 34, 29, 3, 46, 13, 22, 42, 58, 28, 9, 39, 23, 44, 7, 15, 44, 2, 40, 15, 47, 41, 23, 37, 7, 59, 38, 11, 34, 6, 62, 14, 52, 35, 55, 19, 32, 61, 33, 24, 57, 6, 22, 59, 29, 7, 49, 25, 40, 3, 17, 39, 27, 52, 0, 55, 16, 57, 24, 61, 36, 6, 29, 12, 48, 39, 20, 44, 6, 40, 33, 5, 48, 10, 57, 36, 22, 51, 33, 9, 24, 12, 62, 29, 50, 35, 14, 43, 5, 33, 47, 52, 13, 23, 10, 51, 56, 16, 46, 1, 49, 4, 61, 9, 52, 18, 31, 21, 36, 17 },
149 { 19, 42, 9, 48, 2, 44, 11, 37, 48, 20, 33, 16, 55, 35, 49, 15, 37, 20, 59, 16, 53, 22, 56, 31, 50, 11, 34, 54, 16, 51, 4, 49, 33, 53, 21, 28, 56, 24, 31, 9, 52, 16, 48, 24, 44, 13, 51, 20, 31, 49, 18, 6, 34, 2, 44, 14, 47, 8, 15, 43, 13, 41, 33, 52, 20, 61, 7, 51, 34, 62, 4, 20, 36, 33, 43, 8, 46, 13, 53, 17, 45, 42, 9, 31, 52, 11, 30, 56, 13, 59, 17, 44, 27, 6, 62, 11, 43, 17, 49, 38, 26, 2, 16, 27, 58, 21, 54, 18, 26, 5, 35, 61, 43, 27, 7, 39, 14, 58, 37, 55, 20, 33, 13, 40, 62, 10, 55, 5 },
150 { 51, 14, 61, 29, 59, 20, 55, 31, 0, 49, 11, 60, 3, 26, 22, 56, 0, 40, 12, 43, 41, 8, 36, 0, 17, 57, 24, 2, 46, 26, 61, 18, 0, 38, 12, 59, 6, 49, 3, 57, 19, 63, 5, 33, 18, 54, 28, 56, 0, 43, 26, 46, 63, 27, 56, 22, 27, 54, 38, 28, 63, 24, 10, 45, 0, 31, 42, 21, 12, 25, 44, 49, 59, 6, 26, 50, 3, 34, 27, 59, 0, 35, 62, 16, 4, 58, 47, 0, 43, 24, 37, 2, 54, 20, 46, 31, 0, 56, 34, 5, 55, 45, 60, 37, 0, 40, 10, 38, 63, 46, 15, 20, 0, 53, 21, 62, 30, 11, 24, 27, 40, 0, 57, 26, 3, 45, 27, 35 }
151};
152#endif /* USE_DITHER_128128 */
153
154EAPI void
155evas_common_convert_init(void)
156{
157}
158
159EAPI Gfx_Func_Convert
160evas_common_convert_func_get(DATA8 *dest, int w, int h __UNUSED__, int depth, DATA32 rmask, DATA32 gmask, DATA32 bmask, Convert_Pal_Mode pal_mode, int rotation)
161{
162 if ((rmask == 0) && (gmask == 0) && (bmask == 0))
163 {
164 if (depth == 8)
165 {
166 if (pal_mode == PAL_MODE_NONE)
167 return evas_common_convert_rgba_to_8bpp_gry_256_dith;
168 if (pal_mode == PAL_MODE_NONE)
169 return evas_common_convert_rgba_to_8bpp_gry_16_dith;
170 if (pal_mode == PAL_MODE_RGB332)
171 return evas_common_convert_rgba_to_8bpp_rgb_332_dith;
172 if (pal_mode == PAL_MODE_RGB666)
173 return evas_common_convert_rgba_to_8bpp_rgb_666_dith;
174 if (pal_mode == PAL_MODE_RGB232)
175 return evas_common_convert_rgba_to_8bpp_rgb_232_dith;
176 if (pal_mode == PAL_MODE_RGB222)
177 return evas_common_convert_rgba_to_8bpp_rgb_222_dith;
178 if (pal_mode == PAL_MODE_RGB221)
179 return evas_common_convert_rgba_to_8bpp_rgb_221_dith;
180 if (pal_mode == PAL_MODE_RGB121)
181 return evas_common_convert_rgba_to_8bpp_rgb_121_dith;
182 if (pal_mode == PAL_MODE_RGB111)
183 return evas_common_convert_rgba_to_8bpp_rgb_111_dith;
184 if (pal_mode == PAL_MODE_GRAY64)
185 return evas_common_convert_rgba_to_8bpp_pal_gray64;
186 }
187 }
188 else
189 {
190 if (depth == 16)
191 {
192 if ((rmask == 0x0000f800) && (gmask == 0x000007e0) && (bmask == 0x0000001f))
193 {
194 if (rotation == 0)
195 {
196 if ((!(w & 0x1)) && (!((intptr_t)dest & 0x3)))
197 return evas_common_convert_rgba2_to_16bpp_rgb_565_dith;
198 else
199 return evas_common_convert_rgba_to_16bpp_rgb_565_dith;
200 }
201 if (rotation == 180)
202 {
203 if ((!(w & 0x1)) && (!((intptr_t)dest & 0x3)))
204 return evas_common_convert_rgba2_to_16bpp_rgb_565_dith_rot_180;
205 else
206 return evas_common_convert_rgba_to_16bpp_rgb_565_dith_rot_180;
207 }
208 if (rotation == 270)
209 {
210 if ((!(w & 0x1)) && (!((intptr_t)dest & 0x3)))
211 return evas_common_convert_rgba2_to_16bpp_rgb_565_dith_rot_270;
212 else
213 return evas_common_convert_rgba_to_16bpp_rgb_565_dith_rot_270;
214 }
215 if (rotation == 90)
216 {
217 if ((!(w & 0x1)) && (!((intptr_t)dest & 0x3)))
218 return evas_common_convert_rgba2_to_16bpp_rgb_565_dith_rot_90;
219 else
220 return evas_common_convert_rgba_to_16bpp_rgb_565_dith_rot_90;
221 }
222 }
223 if ((rmask == 0x0000001f) && (gmask == 0x000007e0) && (bmask == 0x0000f800))
224 {
225 if (rotation == 0)
226 {
227 if ((!(w & 0x1)) && (!((intptr_t)dest & 0x3)))
228 return evas_common_convert_rgba2_to_16bpp_bgr_565_dith;
229 else
230 return evas_common_convert_rgba_to_16bpp_bgr_565_dith;
231 }
232 if (rotation == 180)
233 {
234 if ((!(w & 0x1)) && (!((intptr_t)dest & 0x3)))
235 return evas_common_convert_rgba2_to_16bpp_bgr_565_dith_rot_180;
236 else
237 return evas_common_convert_rgba_to_16bpp_bgr_565_dith_rot_180;
238 }
239 if (rotation == 270)
240 {
241 if ((!(w & 0x1)) && (!((intptr_t)dest & 0x3)))
242 return evas_common_convert_rgba2_to_16bpp_bgr_565_dith_rot_270;
243 else
244 return evas_common_convert_rgba_to_16bpp_bgr_565_dith_rot_270;
245 }
246 if (rotation == 90)
247 {
248 if ((!(w & 0x1)) && (!((intptr_t)dest & 0x3)))
249 return evas_common_convert_rgba2_to_16bpp_bgr_565_dith_rot_90;
250 else
251 return evas_common_convert_rgba_to_16bpp_bgr_565_dith_rot_90;
252 }
253 }
254 if ((rmask == 0x00007c00) && (gmask == 0x000003e0) && (bmask == 0x0000001f))
255 {
256 if (rotation == 0)
257 {
258 if ((!(w & 0x1)) && (!((intptr_t)dest & 0x3)))
259 return evas_common_convert_rgba2_to_16bpp_rgb_555_dith;
260 else
261 return evas_common_convert_rgba_to_16bpp_rgb_555_dith;
262 }
263 if (rotation == 180)
264 {
265 if ((!(w & 0x1)) && (!((intptr_t)dest & 0x3)))
266 return evas_common_convert_rgba2_to_16bpp_rgb_555_dith_rot_180;
267 else
268 return evas_common_convert_rgba_to_16bpp_rgb_555_dith_rot_180;
269 }
270 if (rotation == 270)
271 {
272 if ((!(w & 0x1)) && (!((intptr_t)dest & 0x3)))
273 return evas_common_convert_rgba2_to_16bpp_rgb_555_dith_rot_270;
274 else
275 return evas_common_convert_rgba_to_16bpp_rgb_555_dith_rot_270;
276 }
277 if (rotation == 90)
278 {
279 if ((!(w & 0x1)) && (!((intptr_t)dest & 0x3)))
280 return evas_common_convert_rgba2_to_16bpp_rgb_555_dith_rot_90;
281 else
282 return evas_common_convert_rgba_to_16bpp_rgb_555_dith_rot_90;
283 }
284 }
285 if ((rmask == 0x00000f00) && (gmask == 0x000000f0) && (bmask == 0x0000000f))
286 {
287 if (rotation == 0)
288 {
289 if ((!(w & 0x1)) && (!((intptr_t)dest & 0x3)))
290 return evas_common_convert_rgba2_to_16bpp_rgb_444_dith;
291 else
292 return evas_common_convert_rgba_to_16bpp_rgb_444_dith;
293 }
294 if (rotation == 180)
295 {
296 if ((!(w & 0x1)) && (!((intptr_t)dest & 0x3)))
297 return evas_common_convert_rgba2_to_16bpp_rgb_444_dith_rot_180;
298 else
299 return evas_common_convert_rgba_to_16bpp_rgb_444_dith_rot_180;
300 }
301 if (rotation == 270)
302 {
303 if ((!(w & 0x1)) && (!((intptr_t)dest & 0x3)))
304 return evas_common_convert_rgba2_to_16bpp_rgb_444_dith_rot_270;
305 else
306 return evas_common_convert_rgba_to_16bpp_rgb_444_dith_rot_270;
307 }
308 if (rotation == 90)
309 {
310 if ((!(w & 0x1)) && (!((intptr_t)dest & 0x3)))
311 return evas_common_convert_rgba2_to_16bpp_rgb_444_dith_rot_90;
312 else
313 return evas_common_convert_rgba_to_16bpp_rgb_444_dith_rot_90;
314 }
315 }
316 if ((rmask == 0x0000f000) && (gmask == 0x00000780) && (bmask == 0x0000001e))
317 {
318 if (rotation == 0)
319 {
320 if ((!(w & 0x1)) && (!((intptr_t)dest & 0x3)))
321 return evas_common_convert_rgba2_to_16bpp_rgb_454645_dith;
322 else
323 return evas_common_convert_rgba_to_16bpp_rgb_454645_dith;
324
325 }
326 if (rotation == 180)
327 {
328 if ((!(w & 0x1)) && (!((intptr_t)dest & 0x3)))
329 return evas_common_convert_rgba2_to_16bpp_rgb_454645_dith_rot_180;
330 else
331 return evas_common_convert_rgba_to_16bpp_rgb_454645_dith_rot_180;
332 }
333 if (rotation == 270)
334 {
335 if ((!(w & 0x1)) && (!((intptr_t)dest & 0x3)))
336 return evas_common_convert_rgba2_to_16bpp_rgb_454645_dith_rot_270;
337 else
338 return evas_common_convert_rgba_to_16bpp_rgb_454645_dith_rot_270;
339 }
340 if (rotation == 270)
341 {
342 if ((!(w & 0x1)) && (!((intptr_t)dest & 0x3)))
343 return evas_common_convert_rgba2_to_16bpp_rgb_454645_dith_rot_90;
344 else
345 return evas_common_convert_rgba_to_16bpp_rgb_454645_dith_rot_90;
346 }
347 }
348 if ((rmask == 0x0000f800) && (gmask == 0x000007e0) && (bmask == 0x0000001f))
349 {
350 if (rotation == 0)
351 {
352 if ((!(w & 0x1)) && (!((intptr_t)dest & 0x3)))
353 return evas_common_convert_rgba2_to_16bpp_rgb_454645_dith;
354 else
355 return evas_common_convert_rgba_to_16bpp_rgb_454645_dith;
356
357 }
358 if (rotation == 180)
359 {
360 if ((!(w & 0x1)) && (!((intptr_t)dest & 0x3)))
361 return evas_common_convert_rgba2_to_16bpp_rgb_454645_dith_rot_180;
362 else
363 return evas_common_convert_rgba_to_16bpp_rgb_454645_dith_rot_180;
364 }
365 if (rotation == 270)
366 {
367 if ((!(w & 0x1)) && (!((intptr_t)dest & 0x3)))
368 return evas_common_convert_rgba2_to_16bpp_rgb_454645_dith_rot_270;
369 else
370 return evas_common_convert_rgba_to_16bpp_rgb_454645_dith_rot_270;
371 }
372 if (rotation == 90)
373 {
374 if ((!(w & 0x1)) && (!((intptr_t)dest & 0x3)))
375 return evas_common_convert_rgba2_to_16bpp_rgb_454645_dith_rot_90;
376 else
377 return evas_common_convert_rgba_to_16bpp_rgb_454645_dith_rot_90;
378 }
379 }
380 }
381 if (depth == 32)
382 {
383 if ((rmask == 0x00ff0000) && (gmask == 0x0000ff00) && (bmask == 0x000000ff))
384 {
385 if (rotation == 0)
386 return evas_common_convert_rgba_to_32bpp_rgb_8888;
387 if (rotation == 180)
388 return evas_common_convert_rgba_to_32bpp_rgb_8888_rot_180;
389 if (rotation == 270)
390 return evas_common_convert_rgba_to_32bpp_rgb_8888_rot_270;
391 if (rotation == 90)
392 return evas_common_convert_rgba_to_32bpp_rgb_8888_rot_90;
393 }
394 if ((rmask == 0xff000000) && (gmask == 0x00ff0000) && (bmask == 0x0000ff00))
395 {
396 if (rotation == 0)
397 return evas_common_convert_rgba_to_32bpp_rgbx_8888;
398 if (rotation == 180)
399 return evas_common_convert_rgba_to_32bpp_rgbx_8888_rot_180;
400 if (rotation == 270)
401 return evas_common_convert_rgba_to_32bpp_rgbx_8888_rot_270;
402 if (rotation == 90)
403 return evas_common_convert_rgba_to_32bpp_rgbx_8888_rot_90;
404 }
405 if ((rmask == 0x000000ff) && (gmask == 0x0000ff00) && (bmask == 0x00ff0000))
406 {
407 if (rotation == 0)
408 return evas_common_convert_rgba_to_32bpp_bgr_8888;
409 if (rotation == 180)
410 return evas_common_convert_rgba_to_32bpp_bgr_8888_rot_180;
411 if (rotation == 270)
412 return evas_common_convert_rgba_to_32bpp_bgr_8888_rot_270;
413 if (rotation == 90)
414 return evas_common_convert_rgba_to_32bpp_bgr_8888_rot_90;
415 }
416 if ((rmask == 0x0000ff00) && (gmask == 0x00ff0000) && (bmask == 0xff000000))
417 {
418 if (rotation == 0)
419 return evas_common_convert_rgba_to_32bpp_bgrx_8888;
420 if (rotation == 180)
421 return evas_common_convert_rgba_to_32bpp_bgrx_8888_rot_180;
422 if (rotation == 270)
423 return evas_common_convert_rgba_to_32bpp_bgrx_8888_rot_270;
424 if (rotation == 90)
425 return evas_common_convert_rgba_to_32bpp_bgrx_8888_rot_90;
426 }
427 if ((rmask == 0x0003f000) && (gmask == 0x00000fc0) && (bmask == 0x0000003f))
428 {
429 if (rotation == 0)
430 return evas_common_convert_rgba_to_32bpp_rgb_666;
431// if (rotation == 180)
432// return evas_common_convert_rgba_to_32bpp_rgb_8888_rot_180;
433// if (rotation == 270)
434// return evas_common_convert_rgba_to_32bpp_rgb_8888_rot_270;
435// if (rotation == 90)
436// return evas_common_convert_rgba_to_32bpp_rgb_8888_rot_90;
437 }
438 }
439 if (depth == 24)
440 {
441 if ((rmask == 0x00ff0000) && (gmask == 0x0000ff00) && (bmask == 0x000000ff))
442 {
443 if (rotation == 0)
444 return evas_common_convert_rgba_to_24bpp_rgb_888;
445 }
446 if ((rmask == 0x0003f000) && (gmask == 0x00000fc0) && (bmask == 0x0000003f))
447 {
448 if (rotation == 0)
449 return evas_common_convert_rgba_to_24bpp_rgb_666;
450 }
451 if ((rmask == 0x000000ff) && (gmask == 0x0000ff00) && (bmask == 0x00ff0000))
452 {
453 if (rotation == 0)
454 return evas_common_convert_rgba_to_24bpp_bgr_888;
455 }
456 }
457 INF("depth = %i mode = %i", depth, pal_mode);
458 if (depth == 8)
459 {
460 if (pal_mode == PAL_MODE_RGB332)
461 return evas_common_convert_rgba_to_8bpp_rgb_332_dith;
462 if (pal_mode == PAL_MODE_RGB666)
463 return evas_common_convert_rgba_to_8bpp_rgb_666_dith;
464 if (pal_mode == PAL_MODE_RGB232)
465 return evas_common_convert_rgba_to_8bpp_rgb_232_dith;
466 if (pal_mode == PAL_MODE_RGB222)
467 return evas_common_convert_rgba_to_8bpp_rgb_222_dith;
468 if (pal_mode == PAL_MODE_RGB221)
469 return evas_common_convert_rgba_to_8bpp_rgb_221_dith;
470 if (pal_mode == PAL_MODE_RGB121)
471 return evas_common_convert_rgba_to_8bpp_rgb_121_dith;
472 if (pal_mode == PAL_MODE_RGB111)
473 return evas_common_convert_rgba_to_8bpp_rgb_111_dith;
474 }
475 }
476 /* no optimised converter for this... no generic one either. NULL */
477 return NULL;
478}
diff --git a/legacy/evas/src/lib/engines/common/evas_convert_main.h b/legacy/evas/src/lib/engines/common/evas_convert_main.h
deleted file mode 100644
index 51c2cc888f..0000000000
--- a/legacy/evas/src/lib/engines/common/evas_convert_main.h
+++ /dev/null
@@ -1,9 +0,0 @@
1#ifndef _EVAS_CONVERT_MAIN_H
2#define _EVAS_CONVERT_MAIN_H
3
4
5EAPI void evas_common_convert_init (void);
6EAPI Gfx_Func_Convert evas_common_convert_func_get (DATA8 *dest, int w, int h, int depth, DATA32 rmask, DATA32 gmask, DATA32 bmask, Convert_Pal_Mode pal_mode, int rotation);
7
8
9#endif /* _EVAS_CONVERT_MAIN_H */
diff --git a/legacy/evas/src/lib/engines/common/evas_convert_rgb_16.c b/legacy/evas/src/lib/engines/common/evas_convert_rgb_16.c
deleted file mode 100644
index d7a4f492f0..0000000000
--- a/legacy/evas/src/lib/engines/common/evas_convert_rgb_16.c
+++ /dev/null
@@ -1,1927 +0,0 @@
1#include "evas_common.h"
2#include "evas_convert_rgb_16.h"
3
4#ifndef BUILD_NO_DITHER_MASK
5#ifdef USE_DITHER_44
6extern const DATA8 _evas_dither_44[4][4];
7#endif
8#ifdef USE_DITHER_128128
9extern const DATA8 _evas_dither_128128[128][128];
10#endif
11#endif
12
13void
14evas_common_convert_rgba2_to_16bpp_rgb_565_dith (DATA32 *src, DATA8 *dst, int src_jump, int dst_jump, int w, int h, int dith_x, int dith_y, DATA8 *pal)
15{
16#ifndef BUILD_NO_DITHER_MASK
17 DATA16 *d = (DATA16 *)dst;
18 DATA32 r1, g1, b1;
19 DATA32 r2, g2, b2;
20 unsigned int dith, dith2;
21 int x, y;
22
23#ifdef BUILD_LINE_DITHER_MASK
24 for (y = 0; y < h; y++)
25 {
26 if ((y + dith_y) & 0x1)
27 {
28 for (x = 0; x < w; x+=2)
29 {
30 DATA32 p = *src++, q = *src++;
31 r1 = ((p & 0xff0000) + 0x030000) >> 19;
32 if (r1 > 0x1f) r1 = 0x1f;
33 g1 = ((p & 0xff00) + 0x000100) >> 10;
34 if (g1 > 0x3f) g1 = 0x3f;
35 b1 = ((p & 0xff) + 0x000003) >> 3;
36 if (b1 > 0x1f) b1 = 0x1f;
37 r2 = ((q & 0xff0000) + 0x030000) >> 19;
38 if (r2 > 0x1f) r2 = 0x1f;
39 g2 = ((q & 0xff00) + 0x000100) >> 10;
40 if (g2 > 0x3f) g2 = 0x3f;
41 b2 = ((q & 0xff) + 0x000003) >> 3;
42 if (b2 > 0x1f) b2 = 0x1f;
43#ifndef WORDS_BIGENDIAN
44 *((DATA32 *)d) = (r2 << 27) | (g2 << 21) | (b2 << 16) |
45 (r1 << 11) | (g1 << 5) | (b1);
46#else
47 *((DATA32 *)d) = (r1 << 27) | (g1 << 21) | (b1 << 16) |
48 (r2 << 11) | (g2 << 5) | (b2);
49#endif
50 d += 2;
51 }
52 }
53 else
54 {
55 x = w;
56 while (w > 0)
57 {
58 DATA32 p = *src++, q = *src++;
59
60#ifndef WORDS_BIGENDIAN
61 *((DATA32 *)d) =
62 (((q & 0xff0000) >> 19) << 27) | (((q & 0xff00) >> 10) << 21) | (((q & 0xff) >> 3) << 16) |
63 (((p & 0xff0000) >> 19) << 11) | (((p & 0xff00) >> 10) << 5) | ((p & 0xff) >> 3);
64#else
65 *((DATA32 *)d) =
66 (((p & 0xff0000) >> 19) << 27) | (((p & 0xff00) >> 10) << 21) | (((p & 0xff) >> 3) << 16) |
67 (((q & 0xff0000) >> 19) << 11) | (((q & 0xff00) >> 10) << 5) | ((q & 0xff) >> 3);
68#endif
69 d += 2; w -= 2;
70 }
71 w = x;
72 }
73 src += src_jump;
74 d += dst_jump;
75 }
76#else
77 for (y = 0; y < h; y++)
78 {
79 for (x = 0; x < w; x++)
80 {
81 DATA32 p = *src++, q = *src++;
82
83 dith = DM_TABLE[(x + dith_x) & DM_MSK][(y + dith_y) & DM_MSK];
84 dith2 = dith >> DM_SHF(6);
85 dith >>= DM_SHF(5);
86 r1 = (p & 0xff0000) >> 19;
87 g1 = (p & 0xff00) >> 10;
88 b1 = (p & 0xff) >> 3;
89 if ((r1 < 0x1f) && ((((p & 0xff0000) >> 16) - (r1 << 3)) >= dith )) r1++;
90 if ((g1 < 0x3f) && ((((p & 0xff00) >> 8) - (g1 << 2)) >= dith2)) g1++;
91 if ((b1 < 0x1f) && (((p & 0xff) - (b1 << 3)) >= dith )) b1++;
92
93 x++;
94 dith = DM_TABLE[(x + dith_x) & DM_MSK][(y + dith_y) & DM_MSK];
95 dith2 = dith >> DM_SHF(6);
96 dith >>= DM_SHF(5);
97 r2 = (q & 0xff0000) >> 19;
98 g2 = (q & 0xff00) >> 10;
99 b2 = (q & 0xff) >> 3;
100 if ((r2 < 0x1f) && ((((q & 0xff0000) >> 16) - (r2 << 3)) >= dith )) r2++;
101 if ((g2 < 0x3f) && ((((q & 0xff00) >> 8) - (g2 << 2)) >= dith2)) g2++;
102 if ((b2 < 0x1f) && (((q & 0xff) - (b2 << 3)) >= dith )) b2++;
103
104#ifndef WORDS_BIGENDIAN
105 *((DATA32 *)d) = (r2 << 27) | (g2 << 21) | (b2 << 16) |
106 (r1 << 11) | (g1 << 5) | (b1);
107#else
108 *((DATA32 *)d) = (r1 << 27) | (g1 << 21) | (b1 << 16) |
109 (r2 << 11) | (g2 << 5) | (b2);
110#endif
111 d += 2;
112 }
113 src += src_jump;
114 d += dst_jump;
115 }
116#endif
117 return;
118 (void)pal;
119#else
120 DATA16 *d = (DATA16 *)dst;
121 int w0 = w;
122
123 while (h--)
124 {
125 while (w > 0)
126 {
127 DATA32 p = *src++, q = *src++;
128
129#ifndef WORDS_BIGENDIAN
130 *((DATA32 *)d) =
131 (((q & 0xff0000) >> 19) << 27) | (((q & 0xff00) >> 10) << 21) | (((q & 0xff) >> 3) << 16) |
132 (((p & 0xff0000) >> 19) << 11) | (((p & 0xff00) >> 10) << 5) | ((p & 0xff) >> 3);
133#else
134 *((DATA32 *)d) =
135 (((p & 0xff0000) >> 19) << 27) | (((p & 0xff00) >> 10) << 21) | (((p & 0xff) >> 3) << 16) |
136 (((q & 0xff0000) >> 19) << 11) | (((q & 0xff00) >> 10) << 5) | ((q & 0xff) >> 3);
137#endif
138 d += 2; w -= 2;
139 }
140 w = w0;
141 src += src_jump;
142 d += dst_jump;
143 }
144 return;
145 (void)pal;
146#endif
147}
148
149void
150evas_common_convert_rgba_to_16bpp_rgb_565_dith (DATA32 *src, DATA8 *dst, int src_jump, int dst_jump, int w, int h, int dith_x, int dith_y, DATA8 *pal)
151{
152#ifndef BUILD_NO_DITHER_MASK
153 DATA16 *d = (DATA16 *)dst;
154 DATA32 r, g, b;
155 unsigned int dith, dith2;
156 int x, y;
157
158#ifdef BUILD_LINE_DITHER_MASK
159 for (y = 0; y < h; y++)
160 {
161 if ((y + dith_y) & 0x1)
162 {
163 for (x = 0; x < w; x++)
164 {
165 DATA32 p = *src++;
166
167 r = (p & 0xff0000) >> 19;
168 if (r > 0x1f) r = 0x1f;
169 g = (p & 0xff00) >> 10;
170 if (g > 0x3f) g = 0x3f;
171 b = (p & 0xff) >> 3;
172 if (b > 0x1f) b = 0x1f;
173 *d++ = (r << 11) | (g << 5) | b;
174 }
175 }
176 else
177 {
178 x = w;
179 while (w--)
180 {
181 *d++ = (((*src & 0xff0000) >> 19) << 11) | (((*src & 0xff00) >> 10) << 5) | ((*src & 0xff) >> 3);
182 src++;
183 }
184 w = x;
185 }
186 src += src_jump;
187 d += dst_jump;
188 }
189#else
190 for (y = 0; y < h; y++)
191 {
192 for (x = 0; x < w; x++)
193 {
194 DATA32 p = *src++;
195
196 dith = DM_TABLE[(x + dith_x) & DM_MSK][(y + dith_y) & DM_MSK];
197 dith2 = dith >> DM_SHF(6);
198 dith >>= DM_SHF(5);
199 r = (p & 0xff0000) >> 19;
200 g = (p & 0xff00) >> 10;
201 b = (p & 0xff) >> 3;
202 if ((r < 0x1f) && ((((p & 0xff0000) >> 16) - (r << 3)) >= dith )) r++;
203 if ((g < 0x3f) && ((((p & 0xff00) >> 8) - (g << 2)) >= dith2)) g++;
204 if ((b < 0x1f) && (((p & 0xff) - (b << 3)) >= dith )) b++;
205
206 *d++ = (r << 11) | (g << 5) | b;
207 }
208 src += src_jump;
209 d += dst_jump;
210 }
211#endif
212 return;
213 (void)pal;
214#else
215 DATA16 *d = (DATA16 *)dst;
216 int w0 = w;
217
218 while (h--)
219 {
220 while (w--)
221 {
222 *d++ = (((*src & 0xff0000) >> 19) << 11) | (((*src & 0xff00) >> 10) << 5) | ((*src & 0xff) >> 3);
223 src++;
224 }
225 w = w0;
226 src += src_jump;
227 d += dst_jump;
228 }
229 return;
230 (void)pal;
231#endif
232}
233
234void
235evas_common_convert_rgba2_to_16bpp_rgb_565_dith_rot_180 (DATA32 *src, DATA8 *dst, int src_jump, int dst_jump, int w, int h, int dith_x, int dith_y, DATA8 *pal)
236{
237 DATA32 *src_ptr;
238 DATA16 *dst_ptr;
239 int x, y;
240 DATA8 r1, g1, b1;
241 DATA8 r2, g2, b2;
242#ifndef BUILD_NO_DITHER_MASK
243 DATA8 dith, dith2;
244#endif
245
246 dst_ptr = (DATA16 *)dst;
247
248 CONVERT_LOOP2_START_ROT_180();
249
250 r1 = (R_VAL(src_ptr)) >> 3;
251 g1 = (G_VAL(src_ptr)) >> 2;
252 b1 = (B_VAL(src_ptr)) >> 3;
253
254#ifndef BUILD_NO_DITHER_MASK
255 dith = DM_TABLE[(x + dith_x) & DM_MSK][(y + dith_y) & DM_MSK] >> DM_SHF(5);
256 dith2 = DM_TABLE[(x + dith_x) & DM_MSK][(y + dith_y) & DM_MSK] >> DM_SHF(6);
257 if (((R_VAL(src_ptr) - (r1 << 3)) >= dith ) && (r1 < 0x1f)) r1++;
258 if (((G_VAL(src_ptr) - (g1 << 2)) >= dith2) && (g1 < 0x3f)) g1++;
259 if (((B_VAL(src_ptr) - (b1 << 3)) >= dith ) && (b1 < 0x1f)) b1++;
260#endif
261
262 CONVERT_LOOP2_INC_ROT_180();
263
264 r2 = (R_VAL(src_ptr)) >> 3;
265 g2 = (G_VAL(src_ptr)) >> 2;
266 b2 = (B_VAL(src_ptr)) >> 3;
267
268#ifndef BUILD_NO_DITHER_MASK
269 dith = DM_TABLE[(x + dith_x) & DM_MSK][(y + dith_y) & DM_MSK] >> DM_SHF(5);
270 dith2 = DM_TABLE[(x + dith_x) & DM_MSK][(y + dith_y) & DM_MSK] >> DM_SHF(6);
271 if (((R_VAL(src_ptr) - (r2 << 3)) >= dith ) && (r2 < 0x1f)) r2++;
272 if (((G_VAL(src_ptr) - (g2 << 2)) >= dith2) && (g2 < 0x3f)) g2++;
273 if (((B_VAL(src_ptr) - (b2 << 3)) >= dith ) && (b2 < 0x1f)) b2++;
274#endif
275
276#ifndef WORDS_BIGENDIAN
277 *((DATA32 *)dst_ptr) =
278 (r2 << 27) | (g2 << 21) | (b2 << 16) |
279 (r1 << 11) | (g1 << 5 ) | (b1 );
280#else
281 *((DATA32 *)dst_ptr) =
282 (r1 << 27) | (g1 << 21) | (b1 << 16) |
283 (r2 << 11) | (g2 << 5 ) | (b2 );
284#endif
285
286 CONVERT_LOOP2_END_ROT_180();
287 return;
288 (void)pal;
289}
290
291void
292evas_common_convert_rgba_to_16bpp_rgb_565_dith_rot_180 (DATA32 *src, DATA8 *dst, int src_jump, int dst_jump, int w, int h, int dith_x, int dith_y, DATA8 *pal)
293{
294 DATA32 *src_ptr;
295 DATA16 *dst_ptr;
296 int x, y;
297 DATA8 r, g, b;
298#ifndef BUILD_NO_DITHER_MASK
299 DATA8 dith, dith2;
300#endif
301
302 dst_ptr = (DATA16 *)dst;
303
304 CONVERT_LOOP_START_ROT_180();
305
306 r = (R_VAL(src_ptr)) >> 3;
307 g = (G_VAL(src_ptr)) >> 2;
308 b = (B_VAL(src_ptr)) >> 3;
309
310#ifndef BUILD_NO_DITHER_MASK
311 dith = DM_TABLE[(x + dith_x) & DM_MSK][(y + dith_y) & DM_MSK] >> DM_SHF(5);
312 dith2 = DM_TABLE[(x + dith_x) & DM_MSK][(y + dith_y) & DM_MSK] >> DM_SHF(6);
313 if (((R_VAL(src_ptr) - (r << 3)) >= dith ) && (r < 0x1f)) r++;
314 if (((G_VAL(src_ptr) - (g << 2)) >= dith2) && (g < 0x3f)) g++;
315 if (((B_VAL(src_ptr) - (b << 3)) >= dith ) && (b < 0x1f)) b++;
316#endif
317
318 *dst_ptr = (r << 11) | (g << 5) | (b);
319
320 CONVERT_LOOP_END_ROT_180();
321 return;
322 (void)pal;
323}
324
325void
326evas_common_convert_rgba2_to_16bpp_rgb_565_dith_rot_270 (DATA32 *src, DATA8 *dst, int src_jump, int dst_jump, int w, int h, int dith_x, int dith_y, DATA8 *pal)
327{
328 DATA32 *src_ptr;
329 DATA16 *dst_ptr;
330 int x, y;
331 DATA8 r1, g1, b1;
332 DATA8 r2, g2, b2;
333#ifndef BUILD_NO_DITHER_MASK
334 DATA8 dith, dith2;
335#endif
336
337 dst_ptr = (DATA16 *)dst;
338
339 CONVERT_LOOP2_START_ROT_270();
340
341 r1 = (R_VAL(src_ptr)) >> 3;
342 g1 = (G_VAL(src_ptr)) >> 2;
343 b1 = (B_VAL(src_ptr)) >> 3;
344
345#ifndef BUILD_NO_DITHER_MASK
346 dith = DM_TABLE[(x + dith_x) & DM_MSK][(y + dith_y) & DM_MSK] >> DM_SHF(5);
347 dith2 = DM_TABLE[(x + dith_x) & DM_MSK][(y + dith_y) & DM_MSK] >> DM_SHF(6);
348 if (((R_VAL(src_ptr) - (r1 << 3)) >= dith ) && (r1 < 0x1f)) r1++;
349 if (((G_VAL(src_ptr) - (g1 << 2)) >= dith2) && (g1 < 0x3f)) g1++;
350 if (((B_VAL(src_ptr) - (b1 << 3)) >= dith ) && (b1 < 0x1f)) b1++;
351#endif
352
353 CONVERT_LOOP2_INC_ROT_270();
354
355 r2 = (R_VAL(src_ptr)) >> 3;
356 g2 = (G_VAL(src_ptr)) >> 2;
357 b2 = (B_VAL(src_ptr)) >> 3;
358
359#ifndef BUILD_NO_DITHER_MASK
360 dith = DM_TABLE[(x + dith_x) & DM_MSK][(y + dith_y) & DM_MSK] >> DM_SHF(5);
361 dith2 = DM_TABLE[(x + dith_x) & DM_MSK][(y + dith_y) & DM_MSK] >> DM_SHF(6);
362 if (((R_VAL(src_ptr) - (r2 << 3)) >= dith ) && (r2 < 0x1f)) r2++;
363 if (((G_VAL(src_ptr) - (g2 << 2)) >= dith2) && (g2 < 0x3f)) g2++;
364 if (((B_VAL(src_ptr) - (b2 << 3)) >= dith ) && (b2 < 0x1f)) b2++;
365#endif
366
367#ifndef WORDS_BIGENDIAN
368 *((DATA32 *)dst_ptr) =
369 (r2 << 27) | (g2 << 21) | (b2 << 16) |
370 (r1 << 11) | (g1 << 5 ) | (b1 );
371#else
372 *((DATA32 *)dst_ptr) =
373 (r1 << 27) | (g1 << 21) | (b1 << 16) |
374 (r2 << 11) | (g2 << 5 ) | (b2 );
375#endif
376
377 CONVERT_LOOP2_END_ROT_270();
378 return;
379 (void)pal;
380}
381
382void
383evas_common_convert_rgba_to_16bpp_rgb_565_dith_rot_270 (DATA32 *src, DATA8 *dst, int src_jump, int dst_jump, int w, int h, int dith_x, int dith_y, DATA8 *pal)
384{
385 DATA32 *src_ptr;
386 DATA16 *dst_ptr;
387 int x, y;
388 DATA8 r, g, b;
389#ifndef BUILD_NO_DITHER_MASK
390 DATA8 dith, dith2;
391#endif
392
393 dst_ptr = (DATA16 *)dst;
394
395 CONVERT_LOOP_START_ROT_270();
396
397 r = (R_VAL(src_ptr)) >> 3;
398 g = (G_VAL(src_ptr)) >> 2;
399 b = (B_VAL(src_ptr)) >> 3;
400
401#ifndef BUILD_NO_DITHER_MASK
402 dith = DM_TABLE[(x + dith_x) & DM_MSK][(y + dith_y) & DM_MSK] >> DM_SHF(5);
403 dith2 = DM_TABLE[(x + dith_x) & DM_MSK][(y + dith_y) & DM_MSK] >> DM_SHF(6);
404 if (((R_VAL(src_ptr) - (r << 3)) >= dith ) && (r < 0x1f)) r++;
405 if (((G_VAL(src_ptr) - (g << 2)) >= dith2) && (g < 0x3f)) g++;
406 if (((B_VAL(src_ptr) - (b << 3)) >= dith ) && (b < 0x1f)) b++;
407#endif
408
409 *dst_ptr = (r << 11) | (g << 5) | (b);
410
411 CONVERT_LOOP_END_ROT_270();
412 return;
413 (void)pal;
414}
415
416void
417evas_common_convert_rgba2_to_16bpp_rgb_565_dith_rot_90 (DATA32 *src, DATA8 *dst, int src_jump, int dst_jump, int w, int h, int dith_x, int dith_y, DATA8 *pal)
418{
419 DATA32 *src_ptr;
420 DATA16 *dst_ptr;
421 int x, y;
422 DATA8 r1, g1, b1;
423 DATA8 r2, g2, b2;
424#ifndef BUILD_NO_DITHER_MASK
425 DATA8 dith, dith2;
426#endif
427
428 dst_ptr = (DATA16 *)dst;
429
430 CONVERT_LOOP2_START_ROT_90();
431
432 r1 = (R_VAL(src_ptr)) >> 3;
433 g1 = (G_VAL(src_ptr)) >> 2;
434 b1 = (B_VAL(src_ptr)) >> 3;
435
436#ifndef BUILD_NO_DITHER_MASK
437 dith = DM_TABLE[(x + dith_x) & DM_MSK][(y + dith_y) & DM_MSK] >> DM_SHF(5);
438 dith2 = DM_TABLE[(x + dith_x) & DM_MSK][(y + dith_y) & DM_MSK] >> DM_SHF(6);
439 if (((R_VAL(src_ptr) - (r1 << 3)) >= dith ) && (r1 < 0x1f)) r1++;
440 if (((G_VAL(src_ptr) - (g1 << 2)) >= dith2) && (g1 < 0x3f)) g1++;
441 if (((B_VAL(src_ptr) - (b1 << 3)) >= dith ) && (b1 < 0x1f)) b1++;
442#endif
443
444 CONVERT_LOOP2_INC_ROT_90();
445
446 r2 = (R_VAL(src_ptr)) >> 3;
447 g2 = (G_VAL(src_ptr)) >> 2;
448 b2 = (B_VAL(src_ptr)) >> 3;
449
450#ifndef BUILD_NO_DITHER_MASK
451 dith = DM_TABLE[(x + dith_x) & DM_MSK][(y + dith_y) & DM_MSK] >> DM_SHF(5);
452 dith2 = DM_TABLE[(x + dith_x) & DM_MSK][(y + dith_y) & DM_MSK] >> DM_SHF(6);
453 if (((R_VAL(src_ptr) - (r2 << 3)) >= dith ) && (r2 < 0x1f)) r2++;
454 if (((G_VAL(src_ptr) - (g2 << 2)) >= dith2) && (g2 < 0x3f)) g2++;
455 if (((B_VAL(src_ptr) - (b2 << 3)) >= dith ) && (b2 < 0x1f)) b2++;
456#endif
457
458#ifndef WORDS_BIGENDIAN
459 *((DATA32 *)dst_ptr) =
460 (r2 << 27) | (g2 << 21) | (b2 << 16) |
461 (r1 << 11) | (g1 << 5 ) | (b1 );
462#else
463 *((DATA32 *)dst_ptr) =
464 (r1 << 27) | (g1 << 21) | (b1 << 16) |
465 (r2 << 11) | (g2 << 5 ) | (b2 );
466#endif
467
468 CONVERT_LOOP2_END_ROT_90();
469 return;
470 (void)pal;
471}
472
473void
474evas_common_convert_rgba_to_16bpp_rgb_565_dith_rot_90 (DATA32 *src, DATA8 *dst, int src_jump, int dst_jump, int w, int h, int dith_x, int dith_y, DATA8 *pal)
475{
476 DATA32 *src_ptr;
477 DATA16 *dst_ptr;
478 int x, y;
479 DATA8 r, g, b;
480#ifndef BUILD_NO_DITHER_MASK
481 DATA8 dith, dith2;
482#endif
483
484 dst_ptr = (DATA16 *)dst;
485
486 CONVERT_LOOP_START_ROT_90();
487
488 r = (R_VAL(src_ptr)) >> 3;
489 g = (G_VAL(src_ptr)) >> 2;
490 b = (B_VAL(src_ptr)) >> 3;
491
492#ifndef BUILD_NO_DITHER_MASK
493 dith = DM_TABLE[(x + dith_x) & DM_MSK][(y + dith_y) & DM_MSK] >> DM_SHF(5);
494 dith2 = DM_TABLE[(x + dith_x) & DM_MSK][(y + dith_y) & DM_MSK] >> DM_SHF(6);
495 if (((R_VAL(src_ptr) - (r << 3)) >= dith ) && (r < 0x1f)) r++;
496 if (((G_VAL(src_ptr) - (g << 2)) >= dith2) && (g < 0x3f)) g++;
497 if (((B_VAL(src_ptr) - (b << 3)) >= dith ) && (b < 0x1f)) b++;
498#endif
499
500 *dst_ptr = (r << 11) | (g << 5) | (b);
501
502 CONVERT_LOOP_END_ROT_90();
503 return;
504 (void)pal;
505}
506
507void
508evas_common_convert_rgba2_to_16bpp_bgr_565_dith (DATA32 *src, DATA8 *dst, int src_jump, int dst_jump, int w, int h, int dith_x, int dith_y, DATA8 *pal)
509{
510 DATA32 *src_ptr;
511 DATA16 *dst_ptr;
512 int x, y;
513 DATA8 r1, g1, b1;
514 DATA8 r2, g2, b2;
515#ifndef BUILD_NO_DITHER_MASK
516 DATA8 dith, dith2;
517#endif
518
519 dst_ptr = (DATA16 *)dst;
520
521 CONVERT_LOOP2_START_ROT_0();
522
523 r1 = (R_VAL(src_ptr)) >> 3;
524 g1 = (G_VAL(src_ptr)) >> 2;
525 b1 = (B_VAL(src_ptr)) >> 3;
526
527#ifndef BUILD_NO_DITHER_MASK
528 dith = DM_TABLE[(x + dith_x) & DM_MSK][(y + dith_y) & DM_MSK] >> DM_SHF(5);
529 dith2 = DM_TABLE[(x + dith_x) & DM_MSK][(y + dith_y) & DM_MSK] >> DM_SHF(6);
530 if (((R_VAL(src_ptr) - (r1 << 3)) >= dith ) && (r1 < 0x1f)) r1++;
531 if (((G_VAL(src_ptr) - (g1 << 2)) >= dith2) && (g1 < 0x3f)) g1++;
532 if (((B_VAL(src_ptr) - (b1 << 3)) >= dith ) && (b1 < 0x1f)) b1++;
533#endif
534
535 CONVERT_LOOP2_INC_ROT_0();
536
537 r2 = (R_VAL(src_ptr)) >> 3;
538 g2 = (G_VAL(src_ptr)) >> 2;
539 b2 = (B_VAL(src_ptr)) >> 3;
540
541#ifndef BUILD_NO_DITHER_MASK
542 dith = DM_TABLE[(x + dith_x) & DM_MSK][(y + dith_y) & DM_MSK] >> DM_SHF(5);
543 dith2 = DM_TABLE[(x + dith_x) & DM_MSK][(y + dith_y) & DM_MSK] >> DM_SHF(6);
544 if (((R_VAL(src_ptr) - (r2 << 3)) >= dith ) && (r2 < 0x1f)) r2++;
545 if (((G_VAL(src_ptr) - (g2 << 2)) >= dith2) && (g2 < 0x3f)) g2++;
546 if (((B_VAL(src_ptr) - (b2 << 3)) >= dith ) && (b2 < 0x1f)) b2++;
547#endif
548
549#ifndef WORDS_BIGENDIAN
550 *((DATA32 *)dst_ptr) =
551 (b2 << 27) | (g2 << 21) | (r2 << 16) |
552 (b1 << 11) | (g1 << 5 ) | (r1 );
553#else
554 *((DATA32 *)dst_ptr) =
555 (b1 << 27) | (g1 << 21) | (r1 << 16) |
556 (b2 << 11) | (g2 << 5 ) | (r2 );
557#endif
558
559 CONVERT_LOOP2_END_ROT_0();
560 return;
561 (void)pal;
562}
563
564void
565evas_common_convert_rgba_to_16bpp_bgr_565_dith (DATA32 *src, DATA8 *dst, int src_jump, int dst_jump, int w, int h, int dith_x, int dith_y, DATA8 *pal)
566{
567 DATA32 *src_ptr;
568 DATA16 *dst_ptr;
569 int x, y;
570 DATA8 r, g, b;
571#ifndef BUILD_NO_DITHER_MASK
572 DATA8 dith, dith2;
573#endif
574
575 dst_ptr = (DATA16 *)dst;
576
577 CONVERT_LOOP_START_ROT_0();
578
579 r = (R_VAL(src_ptr)) >> 3;
580 g = (G_VAL(src_ptr)) >> 2;
581 b = (B_VAL(src_ptr)) >> 3;
582
583#ifndef BUILD_NO_DITHER_MASK
584 dith = DM_TABLE[(x + dith_x) & DM_MSK][(y + dith_y) & DM_MSK] >> DM_SHF(5);
585 dith2 = DM_TABLE[(x + dith_x) & DM_MSK][(y + dith_y) & DM_MSK] >> DM_SHF(6);
586 if (((R_VAL(src_ptr) - (r << 3)) >= dith ) && (r < 0x1f)) r++;
587 if (((G_VAL(src_ptr) - (g << 2)) >= dith2) && (g < 0x3f)) g++;
588 if (((B_VAL(src_ptr) - (b << 3)) >= dith ) && (b < 0x1f)) b++;
589#endif
590
591 *dst_ptr = (b << 11) | (g << 5) | (r);
592
593 CONVERT_LOOP_END_ROT_0();
594 return;
595 (void)pal;
596}
597
598void
599evas_common_convert_rgba2_to_16bpp_bgr_565_dith_rot_180 (DATA32 *src, DATA8 *dst, int src_jump, int dst_jump, int w, int h, int dith_x, int dith_y, DATA8 *pal)
600{
601 DATA32 *src_ptr;
602 DATA16 *dst_ptr;
603 int x, y;
604 DATA8 r1, g1, b1;
605 DATA8 r2, g2, b2;
606#ifndef BUILD_NO_DITHER_MASK
607 DATA8 dith, dith2;
608#endif
609
610 dst_ptr = (DATA16 *)dst;
611
612 CONVERT_LOOP2_START_ROT_180();
613
614 r1 = (R_VAL(src_ptr)) >> 3;
615 g1 = (G_VAL(src_ptr)) >> 2;
616 b1 = (B_VAL(src_ptr)) >> 3;
617
618#ifndef BUILD_NO_DITHER_MASK
619 dith = DM_TABLE[(x + dith_x) & DM_MSK][(y + dith_y) & DM_MSK] >> DM_SHF(5);
620 dith2 = DM_TABLE[(x + dith_x) & DM_MSK][(y + dith_y) & DM_MSK] >> DM_SHF(6);
621 if (((R_VAL(src_ptr) - (r1 << 3)) >= dith ) && (r1 < 0x1f)) r1++;
622 if (((G_VAL(src_ptr) - (g1 << 2)) >= dith2) && (g1 < 0x3f)) g1++;
623 if (((B_VAL(src_ptr) - (b1 << 3)) >= dith ) && (b1 < 0x1f)) b1++;
624#endif
625
626 CONVERT_LOOP2_INC_ROT_180();
627
628 r2 = (R_VAL(src_ptr)) >> 3;
629 g2 = (G_VAL(src_ptr)) >> 2;
630 b2 = (B_VAL(src_ptr)) >> 3;
631
632#ifndef BUILD_NO_DITHER_MASK
633 dith = DM_TABLE[(x + dith_x) & DM_MSK][(y + dith_y) & DM_MSK] >> DM_SHF(5);
634 dith2 = DM_TABLE[(x + dith_x) & DM_MSK][(y + dith_y) & DM_MSK] >> DM_SHF(6);
635 if (((R_VAL(src_ptr) - (r2 << 3)) >= dith ) && (r2 < 0x1f)) r2++;
636 if (((G_VAL(src_ptr) - (g2 << 2)) >= dith2) && (g2 < 0x3f)) g2++;
637 if (((B_VAL(src_ptr) - (b2 << 3)) >= dith ) && (b2 < 0x1f)) b2++;
638#endif
639
640#ifndef WORDS_BIGENDIAN
641 *((DATA32 *)dst_ptr) =
642 (b2 << 27) | (g2 << 21) | (r2 << 16) |
643 (b1 << 11) | (g1 << 5 ) | (r1 );
644#else
645 *((DATA32 *)dst_ptr) =
646 (b1 << 27) | (g1 << 21) | (r1 << 16) |
647 (b2 << 11) | (g2 << 5 ) | (r2 );
648#endif
649
650 CONVERT_LOOP2_END_ROT_180();
651 return;
652 (void)pal;
653}
654
655void
656evas_common_convert_rgba_to_16bpp_bgr_565_dith_rot_180 (DATA32 *src, DATA8 *dst, int src_jump, int dst_jump, int w, int h, int dith_x, int dith_y, DATA8 *pal)
657{
658 DATA32 *src_ptr;
659 DATA16 *dst_ptr;
660 int x, y;
661 DATA8 r, g, b;
662#ifndef BUILD_NO_DITHER_MASK
663 DATA8 dith, dith2;
664#endif
665
666 dst_ptr = (DATA16 *)dst;
667
668 ERR("evas_common_convert_rgba_to_16bpp_bgr_565_dith_rot_180");
669
670 CONVERT_LOOP_START_ROT_180();
671
672 r = (R_VAL(src_ptr)) >> 3;
673 g = (G_VAL(src_ptr)) >> 2;
674 b = (B_VAL(src_ptr)) >> 3;
675
676#ifndef BUILD_NO_DITHER_MASK
677 dith = DM_TABLE[(x + dith_x) & DM_MSK][(y + dith_y) & DM_MSK] >> DM_SHF(5);
678 dith2 = DM_TABLE[(x + dith_x) & DM_MSK][(y + dith_y) & DM_MSK] >> DM_SHF(6);
679 if (((R_VAL(src_ptr) - (r << 3)) >= dith ) && (r < 0x1f)) r++;
680 if (((G_VAL(src_ptr) - (g << 2)) >= dith2) && (g < 0x3f)) g++;
681 if (((B_VAL(src_ptr) - (b << 3)) >= dith ) && (b < 0x1f)) b++;
682#endif
683
684 *dst_ptr = (b << 11) | (g << 5) | (r);
685
686 CONVERT_LOOP_END_ROT_180();
687 return;
688 (void)pal;
689}
690
691void
692evas_common_convert_rgba2_to_16bpp_bgr_565_dith_rot_270 (DATA32 *src, DATA8 *dst, int src_jump, int dst_jump, int w, int h, int dith_x, int dith_y, DATA8 *pal)
693{
694 DATA32 *src_ptr;
695 DATA16 *dst_ptr;
696 int x, y;
697 DATA8 r1, g1, b1;
698 DATA8 r2, g2, b2;
699#ifndef BUILD_NO_DITHER_MASK
700 DATA8 dith, dith2;
701#endif
702
703 dst_ptr = (DATA16 *)dst;
704
705 CONVERT_LOOP2_START_ROT_270();
706
707 r1 = (R_VAL(src_ptr)) >> 3;
708 g1 = (G_VAL(src_ptr)) >> 2;
709 b1 = (B_VAL(src_ptr)) >> 3;
710
711#ifndef BUILD_NO_DITHER_MASK
712 dith = DM_TABLE[(x + dith_x) & DM_MSK][(y + dith_y) & DM_MSK] >> DM_SHF(5);
713 dith2 = DM_TABLE[(x + dith_x) & DM_MSK][(y + dith_y) & DM_MSK] >> DM_SHF(6);
714 if (((R_VAL(src_ptr) - (r1 << 3)) >= dith ) && (r1 < 0x1f)) r1++;
715 if (((G_VAL(src_ptr) - (g1 << 2)) >= dith2) && (g1 < 0x3f)) g1++;
716 if (((B_VAL(src_ptr) - (b1 << 3)) >= dith ) && (b1 < 0x1f)) b1++;
717#endif
718
719 CONVERT_LOOP2_INC_ROT_270();
720
721 r2 = (R_VAL(src_ptr)) >> 3;
722 g2 = (G_VAL(src_ptr)) >> 2;
723 b2 = (B_VAL(src_ptr)) >> 3;
724
725#ifndef BUILD_NO_DITHER_MASK
726 dith = DM_TABLE[(x + dith_x) & DM_MSK][(y + dith_y) & DM_MSK] >> DM_SHF(5);
727 dith2 = DM_TABLE[(x + dith_x) & DM_MSK][(y + dith_y) & DM_MSK] >> DM_SHF(6);
728 if (((R_VAL(src_ptr) - (r2 << 3)) >= dith ) && (r2 < 0x1f)) r2++;
729 if (((G_VAL(src_ptr) - (g2 << 2)) >= dith2) && (g2 < 0x3f)) g2++;
730 if (((B_VAL(src_ptr) - (b2 << 3)) >= dith ) && (b2 < 0x1f)) b2++;
731#endif
732
733#ifndef WORDS_BIGENDIAN
734 *((DATA32 *)dst_ptr) =
735 (b2 << 27) | (g2 << 21) | (r2 << 16) |
736 (b1 << 11) | (g1 << 5 ) | (r1 );
737#else
738 *((DATA32 *)dst_ptr) =
739 (b1 << 27) | (g1 << 21) | (r1 << 16) |
740 (b2 << 11) | (g2 << 5 ) | (r2 );
741#endif
742
743 CONVERT_LOOP2_END_ROT_270();
744 return;
745 (void)pal;
746}
747
748void
749evas_common_convert_rgba_to_16bpp_bgr_565_dith_rot_270 (DATA32 *src, DATA8 *dst, int src_jump, int dst_jump, int w, int h, int dith_x, int dith_y, DATA8 *pal)
750{
751 DATA32 *src_ptr;
752 DATA16 *dst_ptr;
753 int x, y;
754 DATA8 r, g, b;
755#ifndef BUILD_NO_DITHER_MASK
756 DATA8 dith, dith2;
757#endif
758
759 dst_ptr = (DATA16 *)dst;
760
761 CONVERT_LOOP_START_ROT_270();
762
763 r = (R_VAL(src_ptr)) >> 3;
764 g = (G_VAL(src_ptr)) >> 2;
765 b = (B_VAL(src_ptr)) >> 3;
766
767#ifndef BUILD_NO_DITHER_MASK
768 dith = DM_TABLE[(x + dith_x) & DM_MSK][(y + dith_y) & DM_MSK] >> DM_SHF(5);
769 dith2 = DM_TABLE[(x + dith_x) & DM_MSK][(y + dith_y) & DM_MSK] >> DM_SHF(6);
770 if (((R_VAL(src_ptr) - (r << 3)) >= dith ) && (r < 0x1f)) r++;
771 if (((G_VAL(src_ptr) - (g << 2)) >= dith2) && (g < 0x3f)) g++;
772 if (((B_VAL(src_ptr) - (b << 3)) >= dith ) && (b < 0x1f)) b++;
773#endif
774
775 *dst_ptr = (b << 11) | (g << 5) | (r);
776
777 CONVERT_LOOP_END_ROT_270();
778 return;
779 (void)pal;
780}
781
782void
783evas_common_convert_rgba2_to_16bpp_bgr_565_dith_rot_90 (DATA32 *src, DATA8 *dst, int src_jump, int dst_jump, int w, int h, int dith_x, int dith_y, DATA8 *pal)
784{
785 DATA32 *src_ptr;
786 DATA16 *dst_ptr;
787 int x, y;
788 DATA8 r1, g1, b1;
789 DATA8 r2, g2, b2;
790#ifndef BUILD_NO_DITHER_MASK
791 DATA8 dith, dith2;
792#endif
793
794 dst_ptr = (DATA16 *)dst;
795
796 CONVERT_LOOP2_START_ROT_90();
797
798 r1 = (R_VAL(src_ptr)) >> 3;
799 g1 = (G_VAL(src_ptr)) >> 2;
800 b1 = (B_VAL(src_ptr)) >> 3;
801
802#ifndef BUILD_NO_DITHER_MASK
803 dith = DM_TABLE[(x + dith_x) & DM_MSK][(y + dith_y) & DM_MSK] >> DM_SHF(5);
804 dith2 = DM_TABLE[(x + dith_x) & DM_MSK][(y + dith_y) & DM_MSK] >> DM_SHF(6);
805 if (((R_VAL(src_ptr) - (r1 << 3)) >= dith ) && (r1 < 0x1f)) r1++;
806 if (((G_VAL(src_ptr) - (g1 << 2)) >= dith2) && (g1 < 0x3f)) g1++;
807 if (((B_VAL(src_ptr) - (b1 << 3)) >= dith ) && (b1 < 0x1f)) b1++;
808#endif
809
810 CONVERT_LOOP2_INC_ROT_90();
811
812 r2 = (R_VAL(src_ptr)) >> 3;
813 g2 = (G_VAL(src_ptr)) >> 2;
814 b2 = (B_VAL(src_ptr)) >> 3;
815
816#ifndef BUILD_NO_DITHER_MASK
817 dith = DM_TABLE[(x + dith_x) & DM_MSK][(y + dith_y) & DM_MSK] >> DM_SHF(5);
818 dith2 = DM_TABLE[(x + dith_x) & DM_MSK][(y + dith_y) & DM_MSK] >> DM_SHF(6);
819 if (((R_VAL(src_ptr) - (r2 << 3)) >= dith ) && (r2 < 0x1f)) r2++;
820 if (((G_VAL(src_ptr) - (g2 << 2)) >= dith2) && (g2 < 0x3f)) g2++;
821 if (((B_VAL(src_ptr) - (b2 << 3)) >= dith ) && (b2 < 0x1f)) b2++;
822#endif
823
824#ifndef WORDS_BIGENDIAN
825 *((DATA32 *)dst_ptr) =
826 (b2 << 27) | (g2 << 21) | (r2 << 16) |
827 (b1 << 11) | (g1 << 5 ) | (r1 );
828#else
829 *((DATA32 *)dst_ptr) =
830 (b1 << 27) | (g1 << 21) | (r1 << 16) |
831 (b2 << 11) | (g2 << 5 ) | (r2 );
832#endif
833
834 CONVERT_LOOP2_END_ROT_90();
835 return;
836 (void)pal;
837}
838
839void
840evas_common_convert_rgba_to_16bpp_bgr_565_dith_rot_90 (DATA32 *src, DATA8 *dst, int src_jump, int dst_jump, int w, int h, int dith_x, int dith_y, DATA8 *pal)
841{
842 DATA32 *src_ptr;
843 DATA16 *dst_ptr;
844 int x, y;
845 DATA8 r, g, b;
846#ifndef BUILD_NO_DITHER_MASK
847 DATA8 dith, dith2;
848#endif
849
850 dst_ptr = (DATA16 *)dst;
851
852 CONVERT_LOOP_START_ROT_90();
853
854 r = (R_VAL(src_ptr)) >> 3;
855 g = (G_VAL(src_ptr)) >> 2;
856 b = (B_VAL(src_ptr)) >> 3;
857
858#ifndef BUILD_NO_DITHER_MASK
859 dith = DM_TABLE[(x + dith_x) & DM_MSK][(y + dith_y) & DM_MSK] >> DM_SHF(5);
860 dith2 = DM_TABLE[(x + dith_x) & DM_MSK][(y + dith_y) & DM_MSK] >> DM_SHF(6);
861 if (((R_VAL(src_ptr) - (r << 3)) >= dith ) && (r < 0x1f)) r++;
862 if (((G_VAL(src_ptr) - (g << 2)) >= dith2) && (g < 0x3f)) g++;
863 if (((B_VAL(src_ptr) - (b << 3)) >= dith ) && (b < 0x1f)) b++;
864#endif
865
866 *dst_ptr = (b << 11) | (g << 5) | (r);
867
868 CONVERT_LOOP_END_ROT_90();
869 return;
870 (void)pal;
871}
872
873void
874evas_common_convert_rgba2_to_16bpp_rgb_444_dith (DATA32 *src, DATA8 *dst, int src_jump, int dst_jump, int w, int h, int dith_x, int dith_y, DATA8 *pal)
875{
876 DATA32 *src_ptr;
877 DATA16 *dst_ptr;
878 int x, y;
879 DATA8 r1, g1, b1;
880 DATA8 r2, g2, b2;
881#ifndef BUILD_NO_DITHER_MASK
882 DATA8 dith;
883#endif
884
885 dst_ptr = (DATA16 *)dst;
886
887 CONVERT_LOOP2_START_ROT_0();
888
889 r1 = (R_VAL(src_ptr)) >> 4;
890 g1 = (G_VAL(src_ptr)) >> 4;
891 b1 = (B_VAL(src_ptr)) >> 4;
892
893#ifndef BUILD_NO_DITHER_MASK
894 dith = DM_TABLE[(x + dith_x) & DM_MSK][(y + dith_y) & DM_MSK] >> DM_SHF(4);
895 if (((R_VAL(src_ptr) - (r1 << 4)) >= dith ) && (r1 < 0x0f)) r1++;
896 if (((G_VAL(src_ptr) - (g1 << 4)) >= dith ) && (g1 < 0x0f)) g1++;
897 if (((B_VAL(src_ptr) - (b1 << 4)) >= dith ) && (b1 < 0x0f)) b1++;
898#endif
899
900 CONVERT_LOOP2_INC_ROT_0();
901
902 r2 = (R_VAL(src_ptr)) >> 4;
903 g2 = (G_VAL(src_ptr)) >> 4;
904 b2 = (B_VAL(src_ptr)) >> 4;
905
906#ifndef BUILD_NO_DITHER_MASK
907 dith = DM_TABLE[(x + dith_x) & DM_MSK][(y + dith_y) & DM_MSK] >> DM_SHF(4);
908 if (((R_VAL(src_ptr) - (r2 << 4)) >= dith ) && (r2 < 0x0f)) r2++;
909 if (((G_VAL(src_ptr) - (g2 << 4)) >= dith ) && (g2 < 0x0f)) g2++;
910 if (((B_VAL(src_ptr) - (b2 << 4)) >