]> O.S.I.I.S - jp/vkvg.git/commitdiff
surface paint ok
authorJean-Philippe Bruyère <jp_bruyere@hotmail.com>
Tue, 17 Sep 2019 11:42:40 +0000 (13:42 +0200)
committerJean-Philippe Bruyère <jp_bruyere@hotmail.com>
Tue, 17 Sep 2019 11:42:40 +0000 (13:42 +0200)
17 files changed:
include/vkvg.h
shaders/vkvg_main.vert
shaders/vkvg_main_lcd.frag
src/shaders.h
src/vkvg_context.c
src/vkvg_context_internal.c
src/vkvg_context_internal.h
src/vkvg_device.c
src/vkvg_device_internal.h
src/vkvg_fonts.c
src/vkvg_matrix.c
src/vkvg_matrix.h
src/vkvg_surface.c
tests/common/test.c
tests/img_surf.c
tests/painting.c
tests/rect_fill.c

index 4946f70b98b85b767c704a4ecad369dbdc515c60..bcdb00403de9660b393f28847ea43bbdee398be6 100644 (file)
@@ -346,6 +346,7 @@ void vkvg_matrix_multiply           (vkvg_matrix_t *result, const vkvg_matrix_t
 void vkvg_matrix_transform_distance (const vkvg_matrix_t *matrix, float *dx, float *dy);
 void vkvg_matrix_transform_point    (const vkvg_matrix_t *matrix, float *x, float *y);
 void vkvg_matrix_invert             (vkvg_matrix_t *matrix);
+bool vkvg_matrix_is_identity        (const vkvg_matrix_t *matrix);
 
 #ifdef __cplusplus
 }
index 61060ce7d084b1141a1d99cce711d4f3d2eed120..ee290aeb915bb561ad11ad939e2534a685f68ebe 100644 (file)
@@ -73,15 +73,10 @@ void main()
                        pc.matInv[0][0] * p0.x + pc.matInv[1][0] * p0.y + pc.matInv[2][0],
                        pc.matInv[0][1] * p0.x + pc.matInv[1][1] * p0.y + pc.matInv[2][1]
                );
+               uv -= pc.source.xy;
                outUV = vec3(uv.x / pc.source.z, uv.y / pc.source.w ,-1);
-               p0 = inPos + pc.source.xy;
        }else
                outUV = vec3(0,0,-1);
 
-       /*vec2 p = vec2(
-               pc.mat[0][0] * p0.x + pc.mat[1][0] * p0.y + pc.mat[2][0],
-               pc.mat[0][1] * p0.x + pc.mat[1][1] * p0.y + pc.mat[2][1]
-       );*/
-
        gl_Position = vec4(p0 * vec2(2) / pc.size - vec2(1), 0.0, 1.0);
 }
index e4469fa21b771a974976cf642f905ced3fe4fa3e..bbd441c53e6d384fbe0de3ee9b2f3b2cd6922de3 100644 (file)
 #extension GL_ARB_separate_shader_objects      : enable
 #extension GL_ARB_shading_language_420pack     : enable
 
-layout (set=0, binding = 0) uniform sampler2DArray fontMap;
-layout (set=0, binding = 1) uniform sampler2D          source;
-layout (set=0, binding = 2) uniform _uboGrad {
+//layout (set=0, binding = 0) uniform sampler2DArray fontMap;
+layout (set=0, binding = 0) uniform sampler2D          source;
+/*layout (set=0, binding = 2) uniform _uboGrad {
        vec4    cp[3];
        vec4    colors[16];
        vec4    stops[16];
        uint    count;
-}uboGrad;
+}uboGrad;*/
 
 layout (location = 0) in vec3  inFontUV;               //if it is a text drawing, inFontUV.z hold fontMap layer
 layout (location = 1) in vec4  inSrc;                  //source bounds or color depending on pattern type
@@ -58,7 +58,7 @@ void main()
                c = inSrc;
                break;
        case SURFACE:
-               if (inFontUV.z < 1.0){
+               if (inFontUV.z < -1.0){
                        //pattern is drawn with a full screen quad with no tex coord
                        //so we have to transform pixel
                        vec2 p = (gl_FragCoord.xy - textureSize(source,0));
@@ -71,7 +71,7 @@ void main()
                break;
        case LINEAR:
                //credit to Nikita Rokotyan for linear grad
-               float  alpha = atan( -uboGrad.cp[1].y + uboGrad.cp[0].y, uboGrad.cp[1].x - uboGrad.cp[0].x );
+               /*float  alpha = atan( -uboGrad.cp[1].y + uboGrad.cp[0].y, uboGrad.cp[1].x - uboGrad.cp[0].x );
                float  gradientStartPosRotatedX = uboGrad.cp[0].x*cos(alpha) - uboGrad.cp[0].y*sin(alpha);
                float  gradientEndPosRotatedX   = uboGrad.cp[1].x*cos(alpha) - uboGrad.cp[1].y*sin(alpha);
                float  d = gradientEndPosRotatedX - gradientStartPosRotatedX;
@@ -82,14 +82,14 @@ void main()
 
                c = mix(uboGrad.colors[0], uboGrad.colors[1], smoothstep( gradientStartPosRotatedX + uboGrad.stops[0].r*d, gradientStartPosRotatedX + uboGrad.stops[1].r*d, xLocRotated ) );
                for ( int i=1; i<uboGrad.count-1; ++i )
-                       c = mix(c, uboGrad.colors[i+1], smoothstep( gradientStartPosRotatedX + uboGrad.stops[i].r*d, gradientStartPosRotatedX + uboGrad.stops[i+1].r*d, xLocRotated ) );
+                       c = mix(c, uboGrad.colors[i+1], smoothstep( gradientStartPosRotatedX + uboGrad.stops[i].r*d, gradientStartPosRotatedX + uboGrad.stops[i+1].r*d, xLocRotated ) );*/
                break;
        case RADIAL:
                break;
        }
 
-       if (inFontUV.z >= 0.0)
-               c *= texture(fontMap, inFontUV);
+       /*if (inFontUV.z >= 0.0)
+               c *= texture(fontMap, inFontUV);*/
 
        outFragColor = c;
 }
index 3601c6ec21f2c3aa090ee5a15be31969923763e9..f95fd81b9a8b2314d2cc7175864ca0f0963d7899 100644 (file)
@@ -1154,10 +1154,10 @@ unsigned char vkvg_main_vert_spv[] = {
   0x09, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x5d, 0x00, 0x00, 0x00,
   0x07, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00,
   0x58, 0x00, 0x00, 0x00, 0x63, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
-  0x2b, 0x00, 0x04, 0x00, 0x58, 0x00, 0x00, 0x00, 0x7c, 0x00, 0x00, 0x00,
-  0x02, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x58, 0x00, 0x00, 0x00,
-  0x82, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00,
-  0x88, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00,
+  0x20, 0x00, 0x04, 0x00, 0x7a, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00,
+  0x0a, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x58, 0x00, 0x00, 0x00,
+  0x82, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00,
+  0x58, 0x00, 0x00, 0x00, 0x88, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00,
   0x2c, 0x00, 0x06, 0x00, 0x40, 0x00, 0x00, 0x00, 0x8e, 0x00, 0x00, 0x00,
   0x3a, 0x00, 0x00, 0x00, 0x3a, 0x00, 0x00, 0x00, 0x37, 0x00, 0x00, 0x00,
   0x2c, 0x00, 0x05, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x90, 0x00, 0x00, 0x00,
@@ -1287,35 +1287,35 @@ unsigned char vkvg_main_vert_spv[] = {
   0x75, 0x00, 0x00, 0x00, 0x77, 0x00, 0x00, 0x00, 0x50, 0x00, 0x05, 0x00,
   0x0b, 0x00, 0x00, 0x00, 0x79, 0x00, 0x00, 0x00, 0x6a, 0x00, 0x00, 0x00,
   0x78, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x57, 0x00, 0x00, 0x00,
-  0x79, 0x00, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x5d, 0x00, 0x00, 0x00,
-  0x7a, 0x00, 0x00, 0x00, 0x57, 0x00, 0x00, 0x00, 0x59, 0x00, 0x00, 0x00,
-  0x3d, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00, 0x7b, 0x00, 0x00, 0x00,
-  0x7a, 0x00, 0x00, 0x00, 0x41, 0x00, 0x06, 0x00, 0x5a, 0x00, 0x00, 0x00,
-  0x7d, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00,
-  0x7c, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00,
-  0x7e, 0x00, 0x00, 0x00, 0x7d, 0x00, 0x00, 0x00, 0x88, 0x00, 0x05, 0x00,
-  0x09, 0x00, 0x00, 0x00, 0x7f, 0x00, 0x00, 0x00, 0x7b, 0x00, 0x00, 0x00,
-  0x7e, 0x00, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x5d, 0x00, 0x00, 0x00,
-  0x80, 0x00, 0x00, 0x00, 0x57, 0x00, 0x00, 0x00, 0x63, 0x00, 0x00, 0x00,
-  0x3d, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00, 0x81, 0x00, 0x00, 0x00,
-  0x80, 0x00, 0x00, 0x00, 0x41, 0x00, 0x06, 0x00, 0x5a, 0x00, 0x00, 0x00,
-  0x83, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00,
-  0x82, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00,
-  0x84, 0x00, 0x00, 0x00, 0x83, 0x00, 0x00, 0x00, 0x88, 0x00, 0x05, 0x00,
-  0x09, 0x00, 0x00, 0x00, 0x85, 0x00, 0x00, 0x00, 0x81, 0x00, 0x00, 0x00,
-  0x84, 0x00, 0x00, 0x00, 0x50, 0x00, 0x06, 0x00, 0x40, 0x00, 0x00, 0x00,
-  0x86, 0x00, 0x00, 0x00, 0x7f, 0x00, 0x00, 0x00, 0x85, 0x00, 0x00, 0x00,
-  0x37, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x42, 0x00, 0x00, 0x00,
-  0x86, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0b, 0x00, 0x00, 0x00,
-  0x87, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00,
-  0x88, 0x00, 0x00, 0x00, 0x89, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00,
-  0x22, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0a, 0x00, 0x00, 0x00,
-  0x8a, 0x00, 0x00, 0x00, 0x89, 0x00, 0x00, 0x00, 0x4f, 0x00, 0x07, 0x00,
-  0x0b, 0x00, 0x00, 0x00, 0x8b, 0x00, 0x00, 0x00, 0x8a, 0x00, 0x00, 0x00,
-  0x8a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
-  0x81, 0x00, 0x05, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x8c, 0x00, 0x00, 0x00,
-  0x87, 0x00, 0x00, 0x00, 0x8b, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00,
-  0x4e, 0x00, 0x00, 0x00, 0x8c, 0x00, 0x00, 0x00, 0xf9, 0x00, 0x02, 0x00,
+  0x79, 0x00, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x7a, 0x00, 0x00, 0x00,
+  0x7b, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00,
+  0x3d, 0x00, 0x04, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x7c, 0x00, 0x00, 0x00,
+  0x7b, 0x00, 0x00, 0x00, 0x4f, 0x00, 0x07, 0x00, 0x0b, 0x00, 0x00, 0x00,
+  0x7d, 0x00, 0x00, 0x00, 0x7c, 0x00, 0x00, 0x00, 0x7c, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00,
+  0x0b, 0x00, 0x00, 0x00, 0x7e, 0x00, 0x00, 0x00, 0x57, 0x00, 0x00, 0x00,
+  0x83, 0x00, 0x05, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x7f, 0x00, 0x00, 0x00,
+  0x7e, 0x00, 0x00, 0x00, 0x7d, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00,
+  0x57, 0x00, 0x00, 0x00, 0x7f, 0x00, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00,
+  0x5d, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x57, 0x00, 0x00, 0x00,
+  0x59, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00,
+  0x81, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x41, 0x00, 0x06, 0x00,
+  0x5a, 0x00, 0x00, 0x00, 0x83, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00,
+  0x22, 0x00, 0x00, 0x00, 0x82, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00,
+  0x09, 0x00, 0x00, 0x00, 0x84, 0x00, 0x00, 0x00, 0x83, 0x00, 0x00, 0x00,
+  0x88, 0x00, 0x05, 0x00, 0x09, 0x00, 0x00, 0x00, 0x85, 0x00, 0x00, 0x00,
+  0x81, 0x00, 0x00, 0x00, 0x84, 0x00, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00,
+  0x5d, 0x00, 0x00, 0x00, 0x86, 0x00, 0x00, 0x00, 0x57, 0x00, 0x00, 0x00,
+  0x63, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00,
+  0x87, 0x00, 0x00, 0x00, 0x86, 0x00, 0x00, 0x00, 0x41, 0x00, 0x06, 0x00,
+  0x5a, 0x00, 0x00, 0x00, 0x89, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00,
+  0x22, 0x00, 0x00, 0x00, 0x88, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00,
+  0x09, 0x00, 0x00, 0x00, 0x8a, 0x00, 0x00, 0x00, 0x89, 0x00, 0x00, 0x00,
+  0x88, 0x00, 0x05, 0x00, 0x09, 0x00, 0x00, 0x00, 0x8b, 0x00, 0x00, 0x00,
+  0x87, 0x00, 0x00, 0x00, 0x8a, 0x00, 0x00, 0x00, 0x50, 0x00, 0x06, 0x00,
+  0x40, 0x00, 0x00, 0x00, 0x8c, 0x00, 0x00, 0x00, 0x85, 0x00, 0x00, 0x00,
+  0x8b, 0x00, 0x00, 0x00, 0x37, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00,
+  0x42, 0x00, 0x00, 0x00, 0x8c, 0x00, 0x00, 0x00, 0xf9, 0x00, 0x02, 0x00,
   0x56, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0x8d, 0x00, 0x00, 0x00,
   0x3e, 0x00, 0x03, 0x00, 0x42, 0x00, 0x00, 0x00, 0x8e, 0x00, 0x00, 0x00,
   0xf9, 0x00, 0x02, 0x00, 0x56, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00,
@@ -1342,7 +1342,7 @@ unsigned char vkvg_main_vert_spv[] = {
 unsigned int vkvg_main_vert_spv_len = 3980;
 unsigned char vkvg_main_lcd_frag_spv[] = {
   0x03, 0x02, 0x23, 0x07, 0x00, 0x00, 0x01, 0x00, 0x07, 0x00, 0x0d, 0x00,
-  0xfb, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x02, 0x00,
+  0x6d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x02, 0x00,
   0x01, 0x00, 0x00, 0x00, 0x11, 0x00, 0x02, 0x00, 0x32, 0x00, 0x00, 0x00,
   0x0b, 0x00, 0x06, 0x00, 0x01, 0x00, 0x00, 0x00, 0x47, 0x4c, 0x53, 0x4c,
   0x2e, 0x73, 0x74, 0x64, 0x2e, 0x34, 0x35, 0x30, 0x00, 0x00, 0x00, 0x00,
@@ -1350,7 +1350,7 @@ unsigned char vkvg_main_lcd_frag_spv[] = {
   0x0f, 0x00, 0x0b, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
   0x6d, 0x61, 0x69, 0x6e, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00,
   0x16, 0x00, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, 0x29, 0x00, 0x00, 0x00,
-  0x3a, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x00, 0x00, 0x10, 0x00, 0x03, 0x00,
+  0x3a, 0x00, 0x00, 0x00, 0x6a, 0x00, 0x00, 0x00, 0x10, 0x00, 0x03, 0x00,
   0x04, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x03, 0x00, 0x03, 0x00,
   0x02, 0x00, 0x00, 0x00, 0xc2, 0x01, 0x00, 0x00, 0x04, 0x00, 0x09, 0x00,
   0x47, 0x4c, 0x5f, 0x41, 0x52, 0x42, 0x5f, 0x73, 0x65, 0x70, 0x61, 0x72,
@@ -1378,471 +1378,187 @@ unsigned char vkvg_main_lcd_frag_spv[] = {
   0x2f, 0x00, 0x00, 0x00, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x00, 0x00,
   0x05, 0x00, 0x03, 0x00, 0x37, 0x00, 0x00, 0x00, 0x75, 0x76, 0x00, 0x00,
   0x05, 0x00, 0x04, 0x00, 0x3a, 0x00, 0x00, 0x00, 0x69, 0x6e, 0x4d, 0x61,
-  0x74, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x66, 0x00, 0x00, 0x00,
-  0x61, 0x6c, 0x70, 0x68, 0x61, 0x00, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00,
-  0x6c, 0x00, 0x00, 0x00, 0x5f, 0x75, 0x62, 0x6f, 0x47, 0x72, 0x61, 0x64,
-  0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x04, 0x00, 0x6c, 0x00, 0x00, 0x00,
-  0x00, 0x00, 0x00, 0x00, 0x63, 0x70, 0x00, 0x00, 0x06, 0x00, 0x05, 0x00,
-  0x6c, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x63, 0x6f, 0x6c, 0x6f,
-  0x72, 0x73, 0x00, 0x00, 0x06, 0x00, 0x05, 0x00, 0x6c, 0x00, 0x00, 0x00,
-  0x02, 0x00, 0x00, 0x00, 0x73, 0x74, 0x6f, 0x70, 0x73, 0x00, 0x00, 0x00,
-  0x06, 0x00, 0x05, 0x00, 0x6c, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00,
-  0x63, 0x6f, 0x75, 0x6e, 0x74, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00,
-  0x6e, 0x00, 0x00, 0x00, 0x75, 0x62, 0x6f, 0x47, 0x72, 0x61, 0x64, 0x00,
-  0x05, 0x00, 0x09, 0x00, 0x7c, 0x00, 0x00, 0x00, 0x67, 0x72, 0x61, 0x64,
-  0x69, 0x65, 0x6e, 0x74, 0x53, 0x74, 0x61, 0x72, 0x74, 0x50, 0x6f, 0x73,
-  0x52, 0x6f, 0x74, 0x61, 0x74, 0x65, 0x64, 0x58, 0x00, 0x00, 0x00, 0x00,
-  0x05, 0x00, 0x08, 0x00, 0x88, 0x00, 0x00, 0x00, 0x67, 0x72, 0x61, 0x64,
-  0x69, 0x65, 0x6e, 0x74, 0x45, 0x6e, 0x64, 0x50, 0x6f, 0x73, 0x52, 0x6f,
-  0x74, 0x61, 0x74, 0x65, 0x64, 0x58, 0x00, 0x00, 0x05, 0x00, 0x03, 0x00,
-  0x94, 0x00, 0x00, 0x00, 0x64, 0x00, 0x00, 0x00, 0x05, 0x00, 0x03, 0x00,
-  0x98, 0x00, 0x00, 0x00, 0x79, 0x00, 0x00, 0x00, 0x05, 0x00, 0x03, 0x00,
-  0x9b, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00,
-  0x9e, 0x00, 0x00, 0x00, 0x78, 0x4c, 0x6f, 0x63, 0x52, 0x6f, 0x74, 0x61,
-  0x74, 0x65, 0x64, 0x00, 0x05, 0x00, 0x03, 0x00, 0xbe, 0x00, 0x00, 0x00,
-  0x69, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0xf1, 0x00, 0x00, 0x00,
-  0x66, 0x6f, 0x6e, 0x74, 0x4d, 0x61, 0x70, 0x00, 0x05, 0x00, 0x06, 0x00,
-  0xf8, 0x00, 0x00, 0x00, 0x6f, 0x75, 0x74, 0x46, 0x72, 0x61, 0x67, 0x43,
-  0x6f, 0x6c, 0x6f, 0x72, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00,
-  0xfa, 0x00, 0x00, 0x00, 0x4e, 0x55, 0x4d, 0x5f, 0x53, 0x41, 0x4d, 0x50,
-  0x4c, 0x45, 0x53, 0x00, 0x47, 0x00, 0x03, 0x00, 0x0e, 0x00, 0x00, 0x00,
-  0x0e, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x0e, 0x00, 0x00, 0x00,
-  0x1e, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00,
-  0x16, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
-  0x47, 0x00, 0x04, 0x00, 0x1b, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00,
-  0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x29, 0x00, 0x00, 0x00,
-  0x0b, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00,
-  0x2f, 0x00, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-  0x47, 0x00, 0x04, 0x00, 0x2f, 0x00, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00,
-  0x01, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x3a, 0x00, 0x00, 0x00,
-  0x1e, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00,
-  0x68, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00,
-  0x47, 0x00, 0x04, 0x00, 0x6a, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00,
-  0x10, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x6b, 0x00, 0x00, 0x00,
-  0x06, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00,
-  0x6c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00,
-  0x00, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x6c, 0x00, 0x00, 0x00,
-  0x01, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00,
-  0x48, 0x00, 0x05, 0x00, 0x6c, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
-  0x23, 0x00, 0x00, 0x00, 0x30, 0x01, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00,
-  0x6c, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00,
-  0x30, 0x02, 0x00, 0x00, 0x47, 0x00, 0x03, 0x00, 0x6c, 0x00, 0x00, 0x00,
-  0x02, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x6e, 0x00, 0x00, 0x00,
+  0x74, 0x00, 0x00, 0x00, 0x05, 0x00, 0x06, 0x00, 0x6a, 0x00, 0x00, 0x00,
+  0x6f, 0x75, 0x74, 0x46, 0x72, 0x61, 0x67, 0x43, 0x6f, 0x6c, 0x6f, 0x72,
+  0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0x6c, 0x00, 0x00, 0x00,
+  0x4e, 0x55, 0x4d, 0x5f, 0x53, 0x41, 0x4d, 0x50, 0x4c, 0x45, 0x53, 0x00,
+  0x47, 0x00, 0x03, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00,
+  0x47, 0x00, 0x04, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00,
+  0x02, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x16, 0x00, 0x00, 0x00,
+  0x1e, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00,
+  0x1b, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x47, 0x00, 0x04, 0x00, 0x29, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00,
+  0x0f, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x2f, 0x00, 0x00, 0x00,
   0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00,
-  0x6e, 0x00, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
-  0x47, 0x00, 0x04, 0x00, 0xf1, 0x00, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00,
-  0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0xf1, 0x00, 0x00, 0x00,
-  0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00,
-  0xf8, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-  0x47, 0x00, 0x04, 0x00, 0xfa, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
-  0x00, 0x00, 0x00, 0x00, 0x13, 0x00, 0x02, 0x00, 0x02, 0x00, 0x00, 0x00,
-  0x21, 0x00, 0x03, 0x00, 0x03, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
-  0x16, 0x00, 0x03, 0x00, 0x06, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00,
-  0x17, 0x00, 0x04, 0x00, 0x07, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00,
-  0x04, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x08, 0x00, 0x00, 0x00,
-  0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00,
-  0x06, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-  0x2c, 0x00, 0x07, 0x00, 0x07, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00,
+  0x2f, 0x00, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x47, 0x00, 0x04, 0x00, 0x3a, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00,
+  0x03, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x6a, 0x00, 0x00, 0x00,
+  0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00,
+  0x6c, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x13, 0x00, 0x02, 0x00, 0x02, 0x00, 0x00, 0x00, 0x21, 0x00, 0x03, 0x00,
+  0x03, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x16, 0x00, 0x03, 0x00,
+  0x06, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x17, 0x00, 0x04, 0x00,
+  0x07, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
+  0x20, 0x00, 0x04, 0x00, 0x08, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00,
+  0x07, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00,
+  0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x07, 0x00,
+  0x07, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00,
   0x0a, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00,
-  0x0a, 0x00, 0x00, 0x00, 0x15, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00,
-  0x20, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00,
-  0x0d, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00,
-  0x3b, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00,
-  0x01, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x15, 0x00, 0x00, 0x00,
-  0x01, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00,
-  0x15, 0x00, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
-  0x17, 0x00, 0x04, 0x00, 0x19, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00,
-  0x03, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x1a, 0x00, 0x00, 0x00,
-  0x01, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00,
-  0x1a, 0x00, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
-  0x15, 0x00, 0x04, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00,
-  0x00, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x1c, 0x00, 0x00, 0x00,
-  0x1d, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00,
-  0x1e, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00,
-  0x2b, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00,
-  0x00, 0x00, 0x80, 0x3f, 0x14, 0x00, 0x02, 0x00, 0x22, 0x00, 0x00, 0x00,
-  0x17, 0x00, 0x04, 0x00, 0x26, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00,
-  0x02, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x27, 0x00, 0x00, 0x00,
-  0x07, 0x00, 0x00, 0x00, 0x26, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00,
-  0x15, 0x00, 0x00, 0x00, 0x29, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
-  0x19, 0x00, 0x09, 0x00, 0x2c, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00,
-  0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-  0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-  0x1b, 0x00, 0x03, 0x00, 0x2d, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x00,
-  0x20, 0x00, 0x04, 0x00, 0x2e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-  0x2d, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x2e, 0x00, 0x00, 0x00,
-  0x2f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00,
-  0x0c, 0x00, 0x00, 0x00, 0x31, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-  0x17, 0x00, 0x04, 0x00, 0x33, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00,
-  0x02, 0x00, 0x00, 0x00, 0x18, 0x00, 0x04, 0x00, 0x38, 0x00, 0x00, 0x00,
-  0x26, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00,
-  0x39, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00,
-  0x3b, 0x00, 0x04, 0x00, 0x39, 0x00, 0x00, 0x00, 0x3a, 0x00, 0x00, 0x00,
-  0x01, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x1c, 0x00, 0x00, 0x00,
-  0x3b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00,
-  0x3e, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00,
-  0x2b, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x42, 0x00, 0x00, 0x00,
-  0x01, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x1c, 0x00, 0x00, 0x00,
-  0x45, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00,
-  0x0c, 0x00, 0x00, 0x00, 0x4a, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
-  0x2b, 0x00, 0x04, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x67, 0x00, 0x00, 0x00,
-  0x03, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x04, 0x00, 0x68, 0x00, 0x00, 0x00,
-  0x07, 0x00, 0x00, 0x00, 0x67, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00,
-  0x1c, 0x00, 0x00, 0x00, 0x69, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00,
-  0x1c, 0x00, 0x04, 0x00, 0x6a, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00,
-  0x69, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x04, 0x00, 0x6b, 0x00, 0x00, 0x00,
-  0x07, 0x00, 0x00, 0x00, 0x69, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x06, 0x00,
-  0x6c, 0x00, 0x00, 0x00, 0x68, 0x00, 0x00, 0x00, 0x6a, 0x00, 0x00, 0x00,
-  0x6b, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00,
-  0x6d, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x6c, 0x00, 0x00, 0x00,
-  0x3b, 0x00, 0x04, 0x00, 0x6d, 0x00, 0x00, 0x00, 0x6e, 0x00, 0x00, 0x00,
-  0x02, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x6f, 0x00, 0x00, 0x00,
-  0x02, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00,
-  0xa8, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00,
-  0x20, 0x00, 0x04, 0x00, 0xbd, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00,
-  0x0c, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00,
-  0xc6, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00,
-  0xc7, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00,
-  0x19, 0x00, 0x09, 0x00, 0xee, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00,
-  0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
-  0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-  0x1b, 0x00, 0x03, 0x00, 0xef, 0x00, 0x00, 0x00, 0xee, 0x00, 0x00, 0x00,
-  0x20, 0x00, 0x04, 0x00, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-  0xef, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0xf0, 0x00, 0x00, 0x00,
-  0xf1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00,
-  0xf7, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00,
-  0x3b, 0x00, 0x04, 0x00, 0xf7, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x00, 0x00,
+  0x15, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00,
+  0x01, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00,
+  0x01, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00,
+  0x0d, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
+  0x20, 0x00, 0x04, 0x00, 0x15, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
+  0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x15, 0x00, 0x00, 0x00,
+  0x16, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x17, 0x00, 0x04, 0x00,
+  0x19, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00,
+  0x20, 0x00, 0x04, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
+  0x19, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x1a, 0x00, 0x00, 0x00,
+  0x1b, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x15, 0x00, 0x04, 0x00,
+  0x1c, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x2b, 0x00, 0x04, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00,
+  0x02, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x1e, 0x00, 0x00, 0x00,
+  0x01, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00,
+  0x06, 0x00, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xbf,
+  0x14, 0x00, 0x02, 0x00, 0x22, 0x00, 0x00, 0x00, 0x17, 0x00, 0x04, 0x00,
+  0x26, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
+  0x20, 0x00, 0x04, 0x00, 0x27, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00,
+  0x26, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x15, 0x00, 0x00, 0x00,
+  0x29, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x19, 0x00, 0x09, 0x00,
+  0x2c, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1b, 0x00, 0x03, 0x00,
+  0x2d, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00,
+  0x2e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2d, 0x00, 0x00, 0x00,
+  0x3b, 0x00, 0x04, 0x00, 0x2e, 0x00, 0x00, 0x00, 0x2f, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00,
+  0x31, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x17, 0x00, 0x04, 0x00,
+  0x33, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
+  0x18, 0x00, 0x04, 0x00, 0x38, 0x00, 0x00, 0x00, 0x26, 0x00, 0x00, 0x00,
+  0x03, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x39, 0x00, 0x00, 0x00,
+  0x01, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00,
+  0x39, 0x00, 0x00, 0x00, 0x3a, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
+  0x2b, 0x00, 0x04, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x3e, 0x00, 0x00, 0x00,
+  0x07, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00,
+  0x0c, 0x00, 0x00, 0x00, 0x42, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
+  0x2b, 0x00, 0x04, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x45, 0x00, 0x00, 0x00,
+  0x01, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00,
+  0x4a, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00,
+  0x69, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00,
+  0x3b, 0x00, 0x04, 0x00, 0x69, 0x00, 0x00, 0x00, 0x6a, 0x00, 0x00, 0x00,
   0x03, 0x00, 0x00, 0x00, 0x32, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00,
-  0xfa, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x36, 0x00, 0x05, 0x00,
+  0x6c, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x36, 0x00, 0x05, 0x00,
   0x02, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
   0x03, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0x05, 0x00, 0x00, 0x00,
   0x3b, 0x00, 0x04, 0x00, 0x08, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00,
   0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x27, 0x00, 0x00, 0x00,
   0x28, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00,
   0x27, 0x00, 0x00, 0x00, 0x37, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00,
-  0x3b, 0x00, 0x04, 0x00, 0x3e, 0x00, 0x00, 0x00, 0x66, 0x00, 0x00, 0x00,
-  0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x3e, 0x00, 0x00, 0x00,
-  0x7c, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00,
-  0x3e, 0x00, 0x00, 0x00, 0x88, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00,
-  0x3b, 0x00, 0x04, 0x00, 0x3e, 0x00, 0x00, 0x00, 0x94, 0x00, 0x00, 0x00,
-  0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x3e, 0x00, 0x00, 0x00,
-  0x98, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00,
-  0x3e, 0x00, 0x00, 0x00, 0x9b, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00,
-  0x3b, 0x00, 0x04, 0x00, 0x3e, 0x00, 0x00, 0x00, 0x9e, 0x00, 0x00, 0x00,
-  0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0xbd, 0x00, 0x00, 0x00,
-  0xbe, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00,
-  0x09, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00,
-  0x0c, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00,
-  0xf7, 0x00, 0x03, 0x00, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-  0xfb, 0x00, 0x0b, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00,
-  0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
-  0x11, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00,
-  0x03, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00,
-  0x10, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x07, 0x00, 0x00, 0x00,
-  0x17, 0x00, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00,
-  0x09, 0x00, 0x00, 0x00, 0x17, 0x00, 0x00, 0x00, 0xf9, 0x00, 0x02, 0x00,
-  0x14, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0x11, 0x00, 0x00, 0x00,
-  0x41, 0x00, 0x05, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00,
-  0x1b, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00,
-  0x06, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00,
-  0xb8, 0x00, 0x05, 0x00, 0x22, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00,
-  0x20, 0x00, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, 0xf7, 0x00, 0x03, 0x00,
-  0x25, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfa, 0x00, 0x04, 0x00,
-  0x23, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00,
-  0xf8, 0x00, 0x02, 0x00, 0x24, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00,
-  0x07, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00, 0x29, 0x00, 0x00, 0x00,
-  0x4f, 0x00, 0x07, 0x00, 0x26, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x00, 0x00,
-  0x2a, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-  0x01, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x2d, 0x00, 0x00, 0x00,
-  0x30, 0x00, 0x00, 0x00, 0x2f, 0x00, 0x00, 0x00, 0x64, 0x00, 0x04, 0x00,
-  0x2c, 0x00, 0x00, 0x00, 0x32, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00,
-  0x67, 0x00, 0x05, 0x00, 0x33, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00,
-  0x32, 0x00, 0x00, 0x00, 0x31, 0x00, 0x00, 0x00, 0x6f, 0x00, 0x04, 0x00,
-  0x26, 0x00, 0x00, 0x00, 0x35, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00,
-  0x83, 0x00, 0x05, 0x00, 0x26, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x00,
-  0x2b, 0x00, 0x00, 0x00, 0x35, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00,
-  0x28, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x00, 0x41, 0x00, 0x06, 0x00,
-  0x1e, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00, 0x3a, 0x00, 0x00, 0x00,
-  0x31, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00,
-  0x06, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00,
-  0x41, 0x00, 0x05, 0x00, 0x3e, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00,
+  0x3e, 0x00, 0x03, 0x00, 0x09, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00,
+  0x3d, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00,
+  0x0e, 0x00, 0x00, 0x00, 0xf7, 0x00, 0x03, 0x00, 0x14, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0xfb, 0x00, 0x0b, 0x00, 0x0f, 0x00, 0x00, 0x00,
+  0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00,
+  0x01, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
+  0x12, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00,
+  0xf8, 0x00, 0x02, 0x00, 0x10, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00,
+  0x07, 0x00, 0x00, 0x00, 0x17, 0x00, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00,
+  0x3e, 0x00, 0x03, 0x00, 0x09, 0x00, 0x00, 0x00, 0x17, 0x00, 0x00, 0x00,
+  0xf9, 0x00, 0x02, 0x00, 0x14, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00,
+  0x11, 0x00, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x1e, 0x00, 0x00, 0x00,
+  0x1f, 0x00, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00,
+  0x3d, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00,
+  0x1f, 0x00, 0x00, 0x00, 0xb8, 0x00, 0x05, 0x00, 0x22, 0x00, 0x00, 0x00,
+  0x23, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00,
+  0xf7, 0x00, 0x03, 0x00, 0x25, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0xfa, 0x00, 0x04, 0x00, 0x23, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00,
+  0x60, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0x24, 0x00, 0x00, 0x00,
+  0x3d, 0x00, 0x04, 0x00, 0x07, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00,
+  0x29, 0x00, 0x00, 0x00, 0x4f, 0x00, 0x07, 0x00, 0x26, 0x00, 0x00, 0x00,
+  0x2b, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00,
+  0x2d, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x2f, 0x00, 0x00, 0x00,
+  0x64, 0x00, 0x04, 0x00, 0x2c, 0x00, 0x00, 0x00, 0x32, 0x00, 0x00, 0x00,
+  0x30, 0x00, 0x00, 0x00, 0x67, 0x00, 0x05, 0x00, 0x33, 0x00, 0x00, 0x00,
+  0x34, 0x00, 0x00, 0x00, 0x32, 0x00, 0x00, 0x00, 0x31, 0x00, 0x00, 0x00,
+  0x6f, 0x00, 0x04, 0x00, 0x26, 0x00, 0x00, 0x00, 0x35, 0x00, 0x00, 0x00,
+  0x34, 0x00, 0x00, 0x00, 0x83, 0x00, 0x05, 0x00, 0x26, 0x00, 0x00, 0x00,
+  0x36, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x00, 0x00, 0x35, 0x00, 0x00, 0x00,
+  0x3e, 0x00, 0x03, 0x00, 0x28, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x00,
+  0x41, 0x00, 0x06, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00,
+  0x3a, 0x00, 0x00, 0x00, 0x31, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x00, 0x00,
+  0x3d, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x00, 0x00,
+  0x3c, 0x00, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x3e, 0x00, 0x00, 0x00,
+  0x3f, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x00, 0x00,
+  0x3d, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00,
+  0x3f, 0x00, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00,
+  0x41, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00,
+  0x41, 0x00, 0x06, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x43, 0x00, 0x00, 0x00,
+  0x3a, 0x00, 0x00, 0x00, 0x42, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x00, 0x00,
+  0x3d, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00, 0x44, 0x00, 0x00, 0x00,
+  0x43, 0x00, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x3e, 0x00, 0x00, 0x00,
+  0x46, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x45, 0x00, 0x00, 0x00,
+  0x3d, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00, 0x47, 0x00, 0x00, 0x00,
+  0x46, 0x00, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00,
+  0x48, 0x00, 0x00, 0x00, 0x44, 0x00, 0x00, 0x00, 0x47, 0x00, 0x00, 0x00,
+  0x81, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00, 0x49, 0x00, 0x00, 0x00,
+  0x41, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00, 0x41, 0x00, 0x06, 0x00,
+  0x1e, 0x00, 0x00, 0x00, 0x4b, 0x00, 0x00, 0x00, 0x3a, 0x00, 0x00, 0x00,
+  0x4a, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00,
+  0x06, 0x00, 0x00, 0x00, 0x4c, 0x00, 0x00, 0x00, 0x4b, 0x00, 0x00, 0x00,
+  0x81, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00,
+  0x49, 0x00, 0x00, 0x00, 0x4c, 0x00, 0x00, 0x00, 0x41, 0x00, 0x06, 0x00,
+  0x1e, 0x00, 0x00, 0x00, 0x4e, 0x00, 0x00, 0x00, 0x3a, 0x00, 0x00, 0x00,
+  0x31, 0x00, 0x00, 0x00, 0x45, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00,
+  0x06, 0x00, 0x00, 0x00, 0x4f, 0x00, 0x00, 0x00, 0x4e, 0x00, 0x00, 0x00,
+  0x41, 0x00, 0x05, 0x00, 0x3e, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00,
   0x28, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00,
-  0x06, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00,
-  0x85, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00, 0x41, 0x00, 0x00, 0x00,
-  0x3d, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x41, 0x00, 0x06, 0x00,
-  0x1e, 0x00, 0x00, 0x00, 0x43, 0x00, 0x00, 0x00, 0x3a, 0x00, 0x00, 0x00,
-  0x42, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00,
-  0x06, 0x00, 0x00, 0x00, 0x44, 0x00, 0x00, 0x00, 0x43, 0x00, 0x00, 0x00,
-  0x41, 0x00, 0x05, 0x00, 0x3e, 0x00, 0x00, 0x00, 0x46, 0x00, 0x00, 0x00,
+  0x06, 0x00, 0x00, 0x00, 0x51, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00,
+  0x85, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00, 0x52, 0x00, 0x00, 0x00,
+  0x4f, 0x00, 0x00, 0x00, 0x51, 0x00, 0x00, 0x00, 0x41, 0x00, 0x06, 0x00,
+  0x1e, 0x00, 0x00, 0x00, 0x53, 0x00, 0x00, 0x00, 0x3a, 0x00, 0x00, 0x00,
+  0x42, 0x00, 0x00, 0x00, 0x45, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00,
+  0x06, 0x00, 0x00, 0x00, 0x54, 0x00, 0x00, 0x00, 0x53, 0x00, 0x00, 0x00,
+  0x41, 0x00, 0x05, 0x00, 0x3e, 0x00, 0x00, 0x00, 0x55, 0x00, 0x00, 0x00,
   0x28, 0x00, 0x00, 0x00, 0x45, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00,
-  0x06, 0x00, 0x00, 0x00, 0x47, 0x00, 0x00, 0x00, 0x46, 0x00, 0x00, 0x00,
-  0x85, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00,
-  0x44, 0x00, 0x00, 0x00, 0x47, 0x00, 0x00, 0x00, 0x81, 0x00, 0x05, 0x00,
-  0x06, 0x00, 0x00, 0x00, 0x49, 0x00, 0x00, 0x00, 0x41, 0x00, 0x00, 0x00,
-  0x48, 0x00, 0x00, 0x00, 0x41, 0x00, 0x06, 0x00, 0x1e, 0x00, 0x00, 0x00,
-  0x4b, 0x00, 0x00, 0x00, 0x3a, 0x00, 0x00, 0x00, 0x4a, 0x00, 0x00, 0x00,
-  0x3b, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00,
-  0x4c, 0x00, 0x00, 0x00, 0x4b, 0x00, 0x00, 0x00, 0x81, 0x00, 0x05, 0x00,
-  0x06, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x49, 0x00, 0x00, 0x00,
-  0x4c, 0x00, 0x00, 0x00, 0x41, 0x00, 0x06, 0x00, 0x1e, 0x00, 0x00, 0x00,
-  0x4e, 0x00, 0x00, 0x00, 0x3a, 0x00, 0x00, 0x00, 0x31, 0x00, 0x00, 0x00,
-  0x45, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00,
-  0x4f, 0x00, 0x00, 0x00, 0x4e, 0x00, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00,
-  0x3e, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
-  0x3b, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00,
-  0x51, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00,
-  0x06, 0x00, 0x00, 0x00, 0x52, 0x00, 0x00, 0x00, 0x4f, 0x00, 0x00, 0x00,
-  0x51, 0x00, 0x00, 0x00, 0x41, 0x00, 0x06, 0x00, 0x1e, 0x00, 0x00, 0x00,
-  0x53, 0x00, 0x00, 0x00, 0x3a, 0x00, 0x00, 0x00, 0x42, 0x00, 0x00, 0x00,
-  0x45, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00,
-  0x54, 0x00, 0x00, 0x00, 0x53, 0x00, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00,
-  0x3e, 0x00, 0x00, 0x00, 0x55, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
+  0x06, 0x00, 0x00, 0x00, 0x56, 0x00, 0x00, 0x00, 0x55, 0x00, 0x00, 0x00,
+  0x85, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00, 0x57, 0x00, 0x00, 0x00,
+  0x54, 0x00, 0x00, 0x00, 0x56, 0x00, 0x00, 0x00, 0x81, 0x00, 0x05, 0x00,
+  0x06, 0x00, 0x00, 0x00, 0x58, 0x00, 0x00, 0x00, 0x52, 0x00, 0x00, 0x00,
+  0x57, 0x00, 0x00, 0x00, 0x41, 0x00, 0x06, 0x00, 0x1e, 0x00, 0x00, 0x00,
+  0x59, 0x00, 0x00, 0x00, 0x3a, 0x00, 0x00, 0x00, 0x4a, 0x00, 0x00, 0x00,
   0x45, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00,
-  0x56, 0x00, 0x00, 0x00, 0x55, 0x00, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00,
-  0x06, 0x00, 0x00, 0x00, 0x57, 0x00, 0x00, 0x00, 0x54, 0x00, 0x00, 0x00,
-  0x56, 0x00, 0x00, 0x00, 0x81, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00,
-  0x58, 0x00, 0x00, 0x00, 0x52, 0x00, 0x00, 0x00, 0x57, 0x00, 0x00, 0x00,
-  0x41, 0x00, 0x06, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x59, 0x00, 0x00, 0x00,
-  0x3a, 0x00, 0x00, 0x00, 0x4a, 0x00, 0x00, 0x00, 0x45, 0x00, 0x00, 0x00,
-  0x3d, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00, 0x5a, 0x00, 0x00, 0x00,
-  0x59, 0x00, 0x00, 0x00, 0x81, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00,
-  0x5b, 0x00, 0x00, 0x00, 0x58, 0x00, 0x00, 0x00, 0x5a, 0x00, 0x00, 0x00,
-  0x50, 0x00, 0x05, 0x00, 0x26, 0x00, 0x00, 0x00, 0x5c, 0x00, 0x00, 0x00,
-  0x4d, 0x00, 0x00, 0x00, 0x5b, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00,
-  0x37, 0x00, 0x00, 0x00, 0x5c, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00,
-  0x2d, 0x00, 0x00, 0x00, 0x5d, 0x00, 0x00, 0x00, 0x2f, 0x00, 0x00, 0x00,
-  0x3d, 0x00, 0x04, 0x00, 0x26, 0x00, 0x00, 0x00, 0x5e, 0x00, 0x00, 0x00,
-  0x37, 0x00, 0x00, 0x00, 0x57, 0x00, 0x05, 0x00, 0x07, 0x00, 0x00, 0x00,
-  0x5f, 0x00, 0x00, 0x00, 0x5d, 0x00, 0x00, 0x00, 0x5e, 0x00, 0x00, 0x00,
-  0x3e, 0x00, 0x03, 0x00, 0x09, 0x00, 0x00, 0x00, 0x5f, 0x00, 0x00, 0x00,
-  0xf9, 0x00, 0x02, 0x00, 0x25, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00,
-  0x60, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x2d, 0x00, 0x00, 0x00,
-  0x61, 0x00, 0x00, 0x00, 0x2f, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00,
-  0x19, 0x00, 0x00, 0x00, 0x62, 0x00, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00,
-  0x4f, 0x00, 0x07, 0x00, 0x26, 0x00, 0x00, 0x00, 0x63, 0x00, 0x00, 0x00,
-  0x62, 0x00, 0x00, 0x00, 0x62, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-  0x01, 0x00, 0x00, 0x00, 0x57, 0x00, 0x05, 0x00, 0x07, 0x00, 0x00, 0x00,
-  0x64, 0x00, 0x00, 0x00, 0x61, 0x00, 0x00, 0x00, 0x63, 0x00, 0x00, 0x00,
-  0x3e, 0x00, 0x03, 0x00, 0x09, 0x00, 0x00, 0x00, 0x64, 0x00, 0x00, 0x00,
-  0xf9, 0x00, 0x02, 0x00, 0x25, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00,
-  0x25, 0x00, 0x00, 0x00, 0xf9, 0x00, 0x02, 0x00, 0x14, 0x00, 0x00, 0x00,
-  0xf8, 0x00, 0x02, 0x00, 0x12, 0x00, 0x00, 0x00, 0x41, 0x00, 0x07, 0x00,
-  0x6f, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, 0x6e, 0x00, 0x00, 0x00,
-  0x31, 0x00, 0x00, 0x00, 0x42, 0x00, 0x00, 0x00, 0x45, 0x00, 0x00, 0x00,
-  0x3d, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00, 0x71, 0x00, 0x00, 0x00,
-  0x70, 0x00, 0x00, 0x00, 0x7f, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00,
-  0x72, 0x00, 0x00, 0x00, 0x71, 0x00, 0x00, 0x00, 0x41, 0x00, 0x07, 0x00,
-  0x6f, 0x00, 0x00, 0x00, 0x73, 0x00, 0x00, 0x00, 0x6e, 0x00, 0x00, 0x00,
-  0x31, 0x00, 0x00, 0x00, 0x31, 0x00, 0x00, 0x00, 0x45, 0x00, 0x00, 0x00,
-  0x3d, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00, 0x74, 0x00, 0x00, 0x00,
-  0x73, 0x00, 0x00, 0x00, 0x81, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00,
-  0x75, 0x00, 0x00, 0x00, 0x72, 0x00, 0x00, 0x00, 0x74, 0x00, 0x00, 0x00,
-  0x41, 0x00, 0x07, 0x00, 0x6f, 0x00, 0x00, 0x00, 0x76, 0x00, 0x00, 0x00,
-  0x6e, 0x00, 0x00, 0x00, 0x31, 0x00, 0x00, 0x00, 0x42, 0x00, 0x00, 0x00,
-  0x3b, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00,
-  0x77, 0x00, 0x00, 0x00, 0x76, 0x00, 0x00, 0x00, 0x41, 0x00, 0x07, 0x00,
-  0x6f, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x6e, 0x00, 0x00, 0x00,
-  0x31, 0x00, 0x00, 0x00, 0x31, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x00, 0x00,
-  0x3d, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00, 0x79, 0x00, 0x00, 0x00,
-  0x78, 0x00, 0x00, 0x00, 0x83, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00,
-  0x7a, 0x00, 0x00, 0x00, 0x77, 0x00, 0x00, 0x00, 0x79, 0x00, 0x00, 0x00,
-  0x0c, 0x00, 0x07, 0x00, 0x06, 0x00, 0x00, 0x00, 0x7b, 0x00, 0x00, 0x00,
-  0x01, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0x75, 0x00, 0x00, 0x00,
-  0x7a, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x66, 0x00, 0x00, 0x00,
-  0x7b, 0x00, 0x00, 0x00, 0x41, 0x00, 0x07, 0x00, 0x6f, 0x00, 0x00, 0x00,
-  0x7d, 0x00, 0x00, 0x00, 0x6e, 0x00, 0x00, 0x00, 0x31, 0x00, 0x00, 0x00,
-  0x31, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00,
-  0x06, 0x00, 0x00, 0x00, 0x7e, 0x00, 0x00, 0x00, 0x7d, 0x00, 0x00, 0x00,
-  0x3d, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00, 0x7f, 0x00, 0x00, 0x00,
-  0x66, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x06, 0x00, 0x06, 0x00, 0x00, 0x00,
-  0x80, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00,
-  0x7f, 0x00, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00,
-  0x81, 0x00, 0x00, 0x00, 0x7e, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00,
-  0x41, 0x00, 0x07, 0x00, 0x6f, 0x00, 0x00, 0x00, 0x82, 0x00, 0x00, 0x00,
-  0x6e, 0x00, 0x00, 0x00, 0x31, 0x00, 0x00, 0x00, 0x31, 0x00, 0x00, 0x00,
-  0x45, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00,
-  0x83, 0x00, 0x00, 0x00, 0x82, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00,
-  0x06, 0x00, 0x00, 0x00, 0x84, 0x00, 0x00, 0x00, 0x66, 0x00, 0x00, 0x00,
-  0x0c, 0x00, 0x06, 0x00, 0x06, 0x00, 0x00, 0x00, 0x85, 0x00, 0x00, 0x00,
-  0x01, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x84, 0x00, 0x00, 0x00,
-  0x85, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00, 0x86, 0x00, 0x00, 0x00,
-  0x83, 0x00, 0x00, 0x00, 0x85, 0x00, 0x00, 0x00, 0x83, 0x00, 0x05, 0x00,
-  0x06, 0x00, 0x00, 0x00, 0x87, 0x00, 0x00, 0x00, 0x81, 0x00, 0x00, 0x00,
-  0x86, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x7c, 0x00, 0x00, 0x00,
-  0x87, 0x00, 0x00, 0x00, 0x41, 0x00, 0x07, 0x00, 0x6f, 0x00, 0x00, 0x00,
-  0x89, 0x00, 0x00, 0x00, 0x6e, 0x00, 0x00, 0x00, 0x31, 0x00, 0x00, 0x00,
-  0x42, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00,
-  0x06, 0x00, 0x00, 0x00, 0x8a, 0x00, 0x00, 0x00, 0x89, 0x00, 0x00, 0x00,
-  0x3d, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00, 0x8b, 0x00, 0x00, 0x00,
-  0x66, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x06, 0x00, 0x06, 0x00, 0x00, 0x00,
-  0x8c, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00,
-  0x8b, 0x00, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00,
-  0x8d, 0x00, 0x00, 0x00, 0x8a, 0x00, 0x00, 0x00, 0x8c, 0x00, 0x00, 0x00,
-  0x41, 0x00, 0x07, 0x00, 0x6f, 0x00, 0x00, 0x00, 0x8e, 0x00, 0x00, 0x00,
-  0x6e, 0x00, 0x00, 0x00, 0x31, 0x00, 0x00, 0x00, 0x42, 0x00, 0x00, 0x00,
-  0x45, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00,
-  0x8f, 0x00, 0x00, 0x00, 0x8e, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00,
-  0x06, 0x00, 0x00, 0x00, 0x90, 0x00, 0x00, 0x00, 0x66, 0x00, 0x00, 0x00,
-  0x0c, 0x00, 0x06, 0x00, 0x06, 0x00, 0x00, 0x00, 0x91, 0x00, 0x00, 0x00,
-  0x01, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x90, 0x00, 0x00, 0x00,
-  0x85, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00, 0x92, 0x00, 0x00, 0x00,
-  0x8f, 0x00, 0x00, 0x00, 0x91, 0x00, 0x00, 0x00, 0x83, 0x00, 0x05, 0x00,
-  0x06, 0x00, 0x00, 0x00, 0x93, 0x00, 0x00, 0x00, 0x8d, 0x00, 0x00, 0x00,
-  0x92, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x88, 0x00, 0x00, 0x00,
-  0x93, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00,
-  0x95, 0x00, 0x00, 0x00, 0x88, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00,
-  0x06, 0x00, 0x00, 0x00, 0x96, 0x00, 0x00, 0x00, 0x7c, 0x00, 0x00, 0x00,
-  0x83, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00, 0x97, 0x00, 0x00, 0x00,
-  0x95, 0x00, 0x00, 0x00, 0x96, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00,
-  0x94, 0x00, 0x00, 0x00, 0x97, 0x00, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00,
-  0x1e, 0x00, 0x00, 0x00, 0x99, 0x00, 0x00, 0x00, 0x29, 0x00, 0x00, 0x00,
-  0x45, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00,
-  0x9a, 0x00, 0x00, 0x00, 0x99, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00,
-  0x98, 0x00, 0x00, 0x00, 0x9a, 0x00, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00,
-  0x1e, 0x00, 0x00, 0x00, 0x9c, 0x00, 0x00, 0x00, 0x29, 0x00, 0x00, 0x00,
-  0x3b, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00,
-  0x9d, 0x00, 0x00, 0x00, 0x9c, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00,
-  0x9b, 0x00, 0x00, 0x00, 0x9d, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00,
-  0x06, 0x00, 0x00, 0x00, 0x9f, 0x00, 0x00, 0x00, 0x9b, 0x00, 0x00, 0x00,
-  0x3d, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00, 0xa0, 0x00, 0x00, 0x00,
-  0x66, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x06, 0x00, 0x06, 0x00, 0x00, 0x00,
-  0xa1, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00,
-  0xa0, 0x00, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00,
-  0xa2, 0x00, 0x00, 0x00, 0x9f, 0x00, 0x00, 0x00, 0xa1, 0x00, 0x00, 0x00,
-  0x3d, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00, 0xa3, 0x00, 0x00, 0x00,
-  0x98, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00,
-  0xa4, 0x00, 0x00, 0x00, 0x66, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x06, 0x00,
-  0x06, 0x00, 0x00, 0x00, 0xa5, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
-  0x0d, 0x00, 0x00, 0x00, 0xa4, 0x00, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00,
-  0x06, 0x00, 0x00, 0x00, 0xa6, 0x00, 0x00, 0x00, 0xa3, 0x00, 0x00, 0x00,
-  0xa5, 0x00, 0x00, 0x00, 0x83, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00,
-  0xa7, 0x00, 0x00, 0x00, 0xa2, 0x00, 0x00, 0x00, 0xa6, 0x00, 0x00, 0x00,
-  0x3e, 0x00, 0x03, 0x00, 0x9e, 0x00, 0x00, 0x00, 0xa7, 0x00, 0x00, 0x00,
-  0x41, 0x00, 0x06, 0x00, 0xa8, 0x00, 0x00, 0x00, 0xa9, 0x00, 0x00, 0x00,
-  0x6e, 0x00, 0x00, 0x00, 0x42, 0x00, 0x00, 0x00, 0x31, 0x00, 0x00, 0x00,
-  0x3d, 0x00, 0x04, 0x00, 0x07, 0x00, 0x00, 0x00, 0xaa, 0x00, 0x00, 0x00,
-  0xa9, 0x00, 0x00, 0x00, 0x41, 0x00, 0x06, 0x00, 0xa8, 0x00, 0x00, 0x00,
-  0xab, 0x00, 0x00, 0x00, 0x6e, 0x00, 0x00, 0x00, 0x42, 0x00, 0x00, 0x00,
-  0x42, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x07, 0x00, 0x00, 0x00,
-  0xac, 0x00, 0x00, 0x00, 0xab, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00,
-  0x06, 0x00, 0x00, 0x00, 0xad, 0x00, 0x00, 0x00, 0x7c, 0x00, 0x00, 0x00,
-  0x41, 0x00, 0x07, 0x00, 0x6f, 0x00, 0x00, 0x00, 0xae, 0x00, 0x00, 0x00,
-  0x6e, 0x00, 0x00, 0x00, 0x4a, 0x00, 0x00, 0x00, 0x31, 0x00, 0x00, 0x00,
-  0x3b, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00,
-  0xaf, 0x00, 0x00, 0x00, 0xae, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00,
-  0x06, 0x00, 0x00, 0x00, 0xb0, 0x00, 0x00, 0x00, 0x94, 0x00, 0x00, 0x00,
-  0x85, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00, 0xb1, 0x00, 0x00, 0x00,
-  0xaf, 0x00, 0x00, 0x00, 0xb0, 0x00, 0x00, 0x00, 0x81, 0x00, 0x05, 0x00,
-  0x06, 0x00, 0x00, 0x00, 0xb2, 0x00, 0x00, 0x00, 0xad, 0x00, 0x00, 0x00,
-  0xb1, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00,
-  0xb3, 0x00, 0x00, 0x00, 0x7c, 0x00, 0x00, 0x00, 0x41, 0x00, 0x07, 0x00,
-  0x6f, 0x00, 0x00, 0x00, 0xb4, 0x00, 0x00, 0x00, 0x6e, 0x00, 0x00, 0x00,
-  0x4a, 0x00, 0x00, 0x00, 0x42, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x00, 0x00,
-  0x3d, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00, 0xb5, 0x00, 0x00, 0x00,
-  0xb4, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00,
-  0xb6, 0x00, 0x00, 0x00, 0x94, 0x00, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00,
-  0x06, 0x00, 0x00, 0x00, 0xb7, 0x00, 0x00, 0x00, 0xb5, 0x00, 0x00, 0x00,
-  0xb6, 0x00, 0x00, 0x00, 0x81, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00,
-  0xb8, 0x00, 0x00, 0x00, 0xb3, 0x00, 0x00, 0x00, 0xb7, 0x00, 0x00, 0x00,
-  0x3d, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00, 0xb9, 0x00, 0x00, 0x00,
-  0x9e, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x08, 0x00, 0x06, 0x00, 0x00, 0x00,
-  0xba, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x31, 0x00, 0x00, 0x00,
-  0xb2, 0x00, 0x00, 0x00, 0xb8, 0x00, 0x00, 0x00, 0xb9, 0x00, 0x00, 0x00,
-  0x50, 0x00, 0x07, 0x00, 0x07, 0x00, 0x00, 0x00, 0xbb, 0x00, 0x00, 0x00,
-  0xba, 0x00, 0x00, 0x00, 0xba, 0x00, 0x00, 0x00, 0xba, 0x00, 0x00, 0x00,
-  0xba, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x08, 0x00, 0x07, 0x00, 0x00, 0x00,
-  0xbc, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x2e, 0x00, 0x00, 0x00,
-  0xaa, 0x00, 0x00, 0x00, 0xac, 0x00, 0x00, 0x00, 0xbb, 0x00, 0x00, 0x00,
-  0x3e, 0x00, 0x03, 0x00, 0x09, 0x00, 0x00, 0x00, 0xbc, 0x00, 0x00, 0x00,
-  0x3e, 0x00, 0x03, 0x00, 0xbe, 0x00, 0x00, 0x00, 0x42, 0x00, 0x00, 0x00,
-  0xf9, 0x00, 0x02, 0x00, 0xbf, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00,
-  0xbf, 0x00, 0x00, 0x00, 0xf6, 0x00, 0x04, 0x00, 0xc1, 0x00, 0x00, 0x00,
-  0xc2, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf9, 0x00, 0x02, 0x00,
-  0xc3, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0xc3, 0x00, 0x00, 0x00,
-  0x3d, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, 0xc4, 0x00, 0x00, 0x00,
-  0xbe, 0x00, 0x00, 0x00, 0x7c, 0x00, 0x04, 0x00, 0x1c, 0x00, 0x00, 0x00,
-  0xc5, 0x00, 0x00, 0x00, 0xc4, 0x00, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00,
-  0xc7, 0x00, 0x00, 0x00, 0xc8, 0x00, 0x00, 0x00, 0x6e, 0x00, 0x00, 0x00,
-  0xc6, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x1c, 0x00, 0x00, 0x00,
-  0xc9, 0x00, 0x00, 0x00, 0xc8, 0x00, 0x00, 0x00, 0x82, 0x00, 0x05, 0x00,
-  0x1c, 0x00, 0x00, 0x00, 0xca, 0x00, 0x00, 0x00, 0xc9, 0x00, 0x00, 0x00,
-  0x45, 0x00, 0x00, 0x00, 0xb0, 0x00, 0x05, 0x00, 0x22, 0x00, 0x00, 0x00,
-  0xcb, 0x00, 0x00, 0x00, 0xc5, 0x00, 0x00, 0x00, 0xca, 0x00, 0x00, 0x00,
-  0xfa, 0x00, 0x04, 0x00, 0xcb, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00,
-  0xc1, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0xc0, 0x00, 0x00, 0x00,
-  0x3d, 0x00, 0x04, 0x00, 0x07, 0x00, 0x00, 0x00, 0xcc, 0x00, 0x00, 0x00,
-  0x09, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00,
-  0xcd, 0x00, 0x00, 0x00, 0xbe, 0x00, 0x00, 0x00, 0x80, 0x00, 0x05, 0x00,
-  0x0c, 0x00, 0x00, 0x00, 0xce, 0x00, 0x00, 0x00, 0xcd, 0x00, 0x00, 0x00,
-  0x42, 0x00, 0x00, 0x00, 0x41, 0x00, 0x06, 0x00, 0xa8, 0x00, 0x00, 0x00,
-  0xcf, 0x00, 0x00, 0x00, 0x6e, 0x00, 0x00, 0x00, 0x42, 0x00, 0x00, 0x00,
-  0xce, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x07, 0x00, 0x00, 0x00,
-  0xd0, 0x00, 0x00, 0x00, 0xcf, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00,
-  0x06, 0x00, 0x00, 0x00, 0xd1, 0x00, 0x00, 0x00, 0x7c, 0x00, 0x00, 0x00,
-  0x3d, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, 0xd2, 0x00, 0x00, 0x00,
-  0xbe, 0x00, 0x00, 0x00, 0x41, 0x00, 0x07, 0x00, 0x6f, 0x00, 0x00, 0x00,
-  0xd3, 0x00, 0x00, 0x00, 0x6e, 0x00, 0x00, 0x00, 0x4a, 0x00, 0x00, 0x00,
-  0xd2, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00,
-  0x06, 0x00, 0x00, 0x00, 0xd4, 0x00, 0x00, 0x00, 0xd3, 0x00, 0x00, 0x00,
-  0x3d, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00, 0xd5, 0x00, 0x00, 0x00,
-  0x94, 0x00, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00,
-  0xd6, 0x00, 0x00, 0x00, 0xd4, 0x00, 0x00, 0x00, 0xd5, 0x00, 0x00, 0x00,
-  0x81, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00, 0xd7, 0x00, 0x00, 0x00,
-  0xd1, 0x00, 0x00, 0x00, 0xd6, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00,
-  0x06, 0x00, 0x00, 0x00, 0xd8, 0x00, 0x00, 0x00, 0x7c, 0x00, 0x00, 0x00,
-  0x3d, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, 0xd9, 0x00, 0x00, 0x00,
-  0xbe, 0x00, 0x00, 0x00, 0x80, 0x00, 0x05, 0x00, 0x0c, 0x00, 0x00, 0x00,
-  0xda, 0x00, 0x00, 0x00, 0xd9, 0x00, 0x00, 0x00, 0x42, 0x00, 0x00, 0x00,
-  0x41, 0x00, 0x07, 0x00, 0x6f, 0x00, 0x00, 0x00, 0xdb, 0x00, 0x00, 0x00,
-  0x6e, 0x00, 0x00, 0x00, 0x4a, 0x00, 0x00, 0x00, 0xda, 0x00, 0x00, 0x00,
-  0x3b, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00,
-  0xdc, 0x00, 0x00, 0x00, 0xdb, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00,
-  0x06, 0x00, 0x00, 0x00, 0xdd, 0x00, 0x00, 0x00, 0x94, 0x00, 0x00, 0x00,
-  0x85, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00, 0xde, 0x00, 0x00, 0x00,
-  0xdc, 0x00, 0x00, 0x00, 0xdd, 0x00, 0x00, 0x00, 0x81, 0x00, 0x05, 0x00,
-  0x06, 0x00, 0x00, 0x00, 0xdf, 0x00, 0x00, 0x00, 0xd8, 0x00, 0x00, 0x00,
-  0xde, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00,
-  0xe0, 0x00, 0x00, 0x00, 0x9e, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x08, 0x00,
-  0x06, 0x00, 0x00, 0x00, 0xe1, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
-  0x31, 0x00, 0x00, 0x00, 0xd7, 0x00, 0x00, 0x00, 0xdf, 0x00, 0x00, 0x00,
-  0xe0, 0x00, 0x00, 0x00, 0x50, 0x00, 0x07, 0x00, 0x07, 0x00, 0x00, 0x00,
-  0xe2, 0x00, 0x00, 0x00, 0xe1, 0x00, 0x00, 0x00, 0xe1, 0x00, 0x00, 0x00,
-  0xe1, 0x00, 0x00, 0x00, 0xe1, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x08, 0x00,
-  0x07, 0x00, 0x00, 0x00, 0xe3, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
-  0x2e, 0x00, 0x00, 0x00, 0xcc, 0x00, 0x00, 0x00, 0xd0, 0x00, 0x00, 0x00,
-  0xe2, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x09, 0x00, 0x00, 0x00,
-  0xe3, 0x00, 0x00, 0x00, 0xf9, 0x00, 0x02, 0x00, 0xc2, 0x00, 0x00, 0x00,
-  0xf8, 0x00, 0x02, 0x00, 0xc2, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00,
-  0x0c, 0x00, 0x00, 0x00, 0xe4, 0x00, 0x00, 0x00, 0xbe, 0x00, 0x00, 0x00,
-  0x80, 0x00, 0x05, 0x00, 0x0c, 0x00, 0x00, 0x00, 0xe5, 0x00, 0x00, 0x00,
-  0xe4, 0x00, 0x00, 0x00, 0x42, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00,
-  0xbe, 0x00, 0x00, 0x00, 0xe5, 0x00, 0x00, 0x00, 0xf9, 0x00, 0x02, 0x00,
-  0xbf, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0xc1, 0x00, 0x00, 0x00,
+  0x5a, 0x00, 0x00, 0x00, 0x59, 0x00, 0x00, 0x00, 0x81, 0x00, 0x05, 0x00,
+  0x06, 0x00, 0x00, 0x00, 0x5b, 0x00, 0x00, 0x00, 0x58, 0x00, 0x00, 0x00,
+  0x5a, 0x00, 0x00, 0x00, 0x50, 0x00, 0x05, 0x00, 0x26, 0x00, 0x00, 0x00,
+  0x5c, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x5b, 0x00, 0x00, 0x00,
+  0x3e, 0x00, 0x03, 0x00, 0x37, 0x00, 0x00, 0x00, 0x5c, 0x00, 0x00, 0x00,
+  0x3d, 0x00, 0x04, 0x00, 0x2d, 0x00, 0x00, 0x00, 0x5d, 0x00, 0x00, 0x00,
+  0x2f, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x26, 0x00, 0x00, 0x00,
+  0x5e, 0x00, 0x00, 0x00, 0x37, 0x00, 0x00, 0x00, 0x57, 0x00, 0x05, 0x00,
+  0x07, 0x00, 0x00, 0x00, 0x5f, 0x00, 0x00, 0x00, 0x5d, 0x00, 0x00, 0x00,
+  0x5e, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x09, 0x00, 0x00, 0x00,
+  0x5f, 0x00, 0x00, 0x00, 0xf9, 0x00, 0x02, 0x00, 0x25, 0x00, 0x00, 0x00,
+  0xf8, 0x00, 0x02, 0x00, 0x60, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00,
+  0x2d, 0x00, 0x00, 0x00, 0x61, 0x00, 0x00, 0x00, 0x2f, 0x00, 0x00, 0x00,
+  0x3d, 0x00, 0x04, 0x00, 0x19, 0x00, 0x00, 0x00, 0x62, 0x00, 0x00, 0x00,
+  0x1b, 0x00, 0x00, 0x00, 0x4f, 0x00, 0x07, 0x00, 0x26, 0x00, 0x00, 0x00,
+  0x63, 0x00, 0x00, 0x00, 0x62, 0x00, 0x00, 0x00, 0x62, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x57, 0x00, 0x05, 0x00,
+  0x07, 0x00, 0x00, 0x00, 0x64, 0x00, 0x00, 0x00, 0x61, 0x00, 0x00, 0x00,
+  0x63, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x09, 0x00, 0x00, 0x00,
+  0x64, 0x00, 0x00, 0x00, 0xf9, 0x00, 0x02, 0x00, 0x25, 0x00, 0x00, 0x00,
+  0xf8, 0x00, 0x02, 0x00, 0x25, 0x00, 0x00, 0x00, 0xf9, 0x00, 0x02, 0x00,
+  0x14, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0x12, 0x00, 0x00, 0x00,
   0xf9, 0x00, 0x02, 0x00, 0x14, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00,
   0x13, 0x00, 0x00, 0x00, 0xf9, 0x00, 0x02, 0x00, 0x14, 0x00, 0x00, 0x00,
-  0xf8, 0x00, 0x02, 0x00, 0x14, 0x00, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00,
-  0x1e, 0x00, 0x00, 0x00, 0xe9, 0x00, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00,
-  0x1d, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00,
-  0xea, 0x00, 0x00, 0x00, 0xe9, 0x00, 0x00, 0x00, 0xbe, 0x00, 0x05, 0x00,
-  0x22, 0x00, 0x00, 0x00, 0xeb, 0x00, 0x00, 0x00, 0xea, 0x00, 0x00, 0x00,
-  0x0a, 0x00, 0x00, 0x00, 0xf7, 0x00, 0x03, 0x00, 0xed, 0x00, 0x00, 0x00,
-  0x00, 0x00, 0x00, 0x00, 0xfa, 0x00, 0x04, 0x00, 0xeb, 0x00, 0x00, 0x00,
-  0xec, 0x00, 0x00, 0x00, 0xed, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00,
-  0xec, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0xef, 0x00, 0x00, 0x00,
-  0xf2, 0x00, 0x00, 0x00, 0xf1, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00,
-  0x19, 0x00, 0x00, 0x00, 0xf3, 0x00, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00,
-  0x57, 0x00, 0x05, 0x00, 0x07, 0x00, 0x00, 0x00, 0xf4, 0x00, 0x00, 0x00,
-  0xf2, 0x00, 0x00, 0x00, 0xf3, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00,
-  0x07, 0x00, 0x00, 0x00, 0xf5, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00,
-  0x85, 0x00, 0x05, 0x00, 0x07, 0x00, 0x00, 0x00, 0xf6, 0x00, 0x00, 0x00,
-  0xf5, 0x00, 0x00, 0x00, 0xf4, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00,
-  0x09, 0x00, 0x00, 0x00, 0xf6, 0x00, 0x00, 0x00, 0xf9, 0x00, 0x02, 0x00,
-  0xed, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0xed, 0x00, 0x00, 0x00,
-  0x3d, 0x00, 0x04, 0x00, 0x07, 0x00, 0x00, 0x00, 0xf9, 0x00, 0x00, 0x00,
-  0x09, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0xf8, 0x00, 0x00, 0x00,
-  0xf9, 0x00, 0x00, 0x00, 0xfd, 0x00, 0x01, 0x00, 0x38, 0x00, 0x01, 0x00
+  0xf8, 0x00, 0x02, 0x00, 0x14, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00,
+  0x07, 0x00, 0x00, 0x00, 0x6b, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00,
+  0x3e, 0x00, 0x03, 0x00, 0x6a, 0x00, 0x00, 0x00, 0x6b, 0x00, 0x00, 0x00,
+  0xfd, 0x00, 0x01, 0x00, 0x38, 0x00, 0x01, 0x00
 };
-unsigned int vkvg_main_lcd_frag_spv_len = 6000;
+unsigned int vkvg_main_lcd_frag_spv_len = 2588;
 unsigned char wired_frag_spv[] = {
   0x03, 0x02, 0x23, 0x07, 0x00, 0x00, 0x01, 0x00, 0x07, 0x00, 0x0d, 0x00,
   0x2a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x02, 0x00,
index b031acc05038e83873b5dada782239ffb7d14d5e..152f1cbbcae96f3f9e61ad9a96c9f37afeb8c3f0 100644 (file)
@@ -132,8 +132,8 @@ VkvgContext vkvg_create(VkvgSurface surf)
     }else{
         _createDescriptorPool   (ctx);
         _init_descriptor_sets   (ctx);
-        _update_descriptor_set  (ctx, ctx->pSurf->dev->fontCache->texture, ctx->dsFont);
-        _update_descriptor_set  (ctx, surf->dev->emptyImg, ctx->dsSrc);
+        _update_descriptor_set  (ctx, ctx->pSurf->dev->fontCache->texture, ctx->dsSrc,0);
+        _update_descriptor_set  (ctx, surf->dev->emptyImg, ctx->dsSrc,1);
         _update_gradient_desc_set(ctx);
     }
     _clear_path             (ctx);
@@ -205,9 +205,7 @@ void vkvg_destroy (VkvgContext ctx)
     if (CmdPushDescriptorSet) {
 
     }else{
-        VkDescriptorSet dss[] = {ctx->dsFont, ctx->dsSrc, ctx->dsGrad};
-        vkFreeDescriptorSets    (dev, ctx->descriptorPool, 3, dss);
-
+        vkFreeDescriptorSets    (dev, ctx->descriptorPool, 1, &ctx->dsSrc);
         vkDestroyDescriptorPool (dev, ctx->descriptorPool,NULL);
     }
     vkvg_buffer_destroy (&ctx->uboGrad);
@@ -744,17 +742,20 @@ void vkvg_paint (VkvgContext ctx){
     _check_cmd_buff_state (ctx);
 
     if (ctx->pattern == NULL || ctx->pattern->type == VKVG_PATTERN_TYPE_SOLID){
+        //add full screen rect untransformed with current color, no need of push constant update -> no flush requested
         _vao_add_rectangle (ctx, 0, 0, ctx->bounds.extent.width, ctx->bounds.extent.height);
         return;
-    }else{
-        vec4 r = ctx->pushConsts.source;
-    //vkvg_matrix_transform_point (&ctx->pushConsts.matInv, &r.x, &r.y);
-        r.width = ctx->bounds.extent.width;
-        r.height = ctx->bounds.extent.height;
-        //vkvg_matrix_transform_point(&ctx->pushConsts.matInv, &r.width, &r.height);
-        _vao_add_rectangle (ctx, r.x, r.y, r.width, r.height);
-        /*vkvg_rectangle(ctx, r.x, r.y, r.width, r.height);
-        vkvg_fill(ctx);*/
+    }else if (ctx->pattern->extend == VKVG_EXTEND_NONE){
+        //add transformed rectangle with source bounds, uv will be computed in vs with matInv + source x,y
+        vkvg_rectangle(ctx, 0, 0, ctx->pushConsts.source.width, ctx->pushConsts.source.height);
+        vkvg_fill(ctx);
+    }else if (vkvg_matrix_is_identity(&ctx->pushConsts.mat)){
+        //if theres no transform, draw full screen quad
+        vkvg_rectangle(ctx, 0, 0, ctx->bounds.extent.width, ctx->bounds.extent.height);
+        vkvg_fill(ctx);
+    }else{//if current transformation is not identity, full screen quad has to be untransformed
+        //cur transform will be applied in fs for each pixel.
+        _vao_add_rectangle (ctx, 0, 0, ctx->bounds.extent.width, ctx->bounds.extent.height);
     }
 }
 inline void vkvg_set_source_rgb (VkvgContext ctx, float r, float g, float b) {
@@ -766,9 +767,9 @@ void vkvg_set_source_rgba (VkvgContext ctx, float r, float g, float b, float a)
     //_update_cur_pattern (ctx, vkvg_pattern_create_rgba (r,g,b,a));
 }
 void vkvg_set_source_surface(VkvgContext ctx, VkvgSurface surf, float x, float y){
+    ctx->pushConsts.source.x = x;
+    ctx->pushConsts.source.y = y;
     _update_cur_pattern (ctx, vkvg_pattern_create_for_surface(surf));
-    ctx->pushConsts.source = (vec4){x, y, surf->width, surf->height};
-    ctx->pushCstDirty = true;
 }
 void vkvg_set_source (VkvgContext ctx, VkvgPattern pat){
     _update_cur_pattern (ctx, pat);
@@ -1017,29 +1018,43 @@ void vkvg_restore (VkvgContext ctx){
 }
 
 void vkvg_translate (VkvgContext ctx, float dx, float dy){
+    //other pattern than solid use mat and matInv in shaders,
+    //so we have to flush undrawn vertices
+    if (ctx->pattern && ctx->pattern->type != VKVG_PATTERN_TYPE_SOLID)
+        _flush_cmd_buff(ctx);
     vkvg_matrix_translate (&ctx->pushConsts.mat, dx, dy);
     _set_mat_inv_and_vkCmdPush (ctx);
 }
 void vkvg_scale (VkvgContext ctx, float sx, float sy){
+    if (ctx->pattern && ctx->pattern->type != VKVG_PATTERN_TYPE_SOLID)
+        _flush_cmd_buff(ctx);
     vkvg_matrix_scale (&ctx->pushConsts.mat, sx, sy);
     _set_mat_inv_and_vkCmdPush (ctx);
 }
 void vkvg_rotate (VkvgContext ctx, float radians){
+    if (ctx->pattern && ctx->pattern->type != VKVG_PATTERN_TYPE_SOLID)
+        _flush_cmd_buff(ctx);
     vkvg_matrix_rotate (&ctx->pushConsts.mat, radians);
     _set_mat_inv_and_vkCmdPush (ctx);
 }
 void vkvg_transform (VkvgContext ctx, const vkvg_matrix_t* matrix) {
+    if (ctx->pattern && ctx->pattern->type != VKVG_PATTERN_TYPE_SOLID)
+        _flush_cmd_buff(ctx);
     vkvg_matrix_t res;
     vkvg_matrix_multiply (&res, &ctx->pushConsts.mat, matrix);
     ctx->pushConsts.mat = res;
     _set_mat_inv_and_vkCmdPush (ctx);
 }
 void vkvg_identity_matrix (VkvgContext ctx) {
+    if (ctx->pattern && ctx->pattern->type != VKVG_PATTERN_TYPE_SOLID)
+        _flush_cmd_buff(ctx);
     vkvg_matrix_t im = VKVG_IDENTITY_MATRIX;
     ctx->pushConsts.mat = im;
     _set_mat_inv_and_vkCmdPush (ctx);
 }
 void vkvg_set_matrix (VkvgContext ctx, const vkvg_matrix_t* matrix){
+    if (ctx->pattern && ctx->pattern->type != VKVG_PATTERN_TYPE_SOLID)
+        _flush_cmd_buff(ctx);
     ctx->pushConsts.mat = (*matrix);
     _set_mat_inv_and_vkCmdPush (ctx);
 }
index 77adad736eec4fff4f32fa8116508f9e9bd58cf3..f5360dffb5b7f7de31ee4640b245ea0baa5efaa9 100644 (file)
@@ -230,7 +230,7 @@ void _resize_vbo (VkvgContext ctx, size_t new_size) {
 }
 void _resize_ibo (VkvgContext ctx, size_t new_size) {
     _wait_flush_fence (ctx);//wait previous cmd if not completed
-    ctx->sizeIBO = ctx->sizeIndices;
+    ctx->sizeIBO = new_size;
     ctx->sizeIBO += ctx->sizeIBO % VKVG_IBO_SIZE;
     vkvg_buffer_destroy (&ctx->indices);
     vkvg_buffer_create (ctx->pSurf->dev,
@@ -466,11 +466,9 @@ void _record_draw_cmd (VkvgContext ctx){
     ctx->curVertOffset = ctx->vertCount;
 }
 void _flush_cmd_buff (VkvgContext ctx){
-    if (_undrawn_vertices(ctx)){
-        if (!ctx->cmdStarted)
-            _start_cmd_for_render_pass(ctx);
+    if (_undrawn_vertices(ctx))
         _record_draw_cmd (ctx);
-    }else if (!ctx->cmdStarted)
+    else if (!ctx->cmdStarted)
         return;
     _end_render_pass        (ctx);
     _flush_vertices_caches  (ctx);
@@ -509,7 +507,7 @@ void _init_push_descriptor_writes (VkvgContext ctx) {
     ctx->descSrcTex = vkh_image_get_descriptor (ctx->pSurf->dev->emptyImg, VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL);
     wds.sType = VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET;
     wds.dstSet = 0;
-    wds.dstBinding = 1;
+    wds.dstBinding = 0;
     wds.descriptorCount = 1;
     wds.descriptorType = VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER;
     wds.pImageInfo = &ctx->descSrcTex;
@@ -533,17 +531,17 @@ void _start_cmd_for_render_pass (VkvgContext ctx) {
         if (imgMs != NULL)
             vkh_image_set_layout(ctx->cmd, imgMs, VK_IMAGE_ASPECT_COLOR_BIT,
                                  VK_IMAGE_LAYOUT_UNDEFINED, VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL,
-                                 VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT, VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT);
+                                 VK_PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT, VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT);
 
         vkh_image_set_layout(ctx->cmd, ctx->pSurf->img, VK_IMAGE_ASPECT_COLOR_BIT,
                          VK_IMAGE_LAYOUT_UNDEFINED, VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL,
-                         VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT, VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT);
+                         VK_PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT, VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT);
     }
 
     if (ctx->source && ctx->source->layout != VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL)
         vkh_image_set_layout (ctx->cmd, ctx->source, VK_IMAGE_ASPECT_COLOR_BIT,
-                              VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL, VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL,
-                              VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT, VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT);
+                              VK_IMAGE_LAYOUT_UNDEFINED, VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL,
+                              VK_PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT, VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT);
 
     CmdBeginRenderPass (ctx->cmd, &ctx->renderPassBeginInfo, VK_SUBPASS_CONTENTS_INLINE);
     VkViewport viewport = {0,0,ctx->pSurf->width,ctx->pSurf->height,0,1};
@@ -552,11 +550,10 @@ void _start_cmd_for_render_pass (VkvgContext ctx) {
     CmdSetScissor(ctx->cmd, 0, 1, &ctx->bounds);
 
     if (CmdPushDescriptorSet) {
-        CmdPushDescriptorSet(ctx->cmd, VK_PIPELINE_BIND_POINT_GRAPHICS, ctx->pSurf->dev->pipelineLayout, 0, 3, ctx->wds);
+        CmdPushDescriptorSet(ctx->cmd, VK_PIPELINE_BIND_POINT_GRAPHICS, ctx->pSurf->dev->pipelineLayout, 0, 1, &ctx->wds[1]);
     }else{
-        VkDescriptorSet dss[] = {ctx->dsFont,ctx->dsSrc,ctx->dsGrad};
         CmdBindDescriptorSets(ctx->cmd, VK_PIPELINE_BIND_POINT_GRAPHICS, ctx->pSurf->dev->pipelineLayout,
-                              0, 3, dss, 0, NULL);
+                              0, 1, &ctx->dsSrc, 0, NULL);
     }
     VkDeviceSize offsets[1] = { 0 };
     CmdBindVertexBuffers(ctx->cmd, 0, 1, &ctx->vertices.buffer, offsets);
@@ -589,28 +586,38 @@ void _update_cur_pattern (VkvgContext ctx, VkvgPattern pat) {
     VkvgPattern lastPat = ctx->pattern;
     ctx->pattern = pat;
 
-    ctx->pushConsts.patternType = pat->type;
-    ctx->pushCstDirty = true;
-
     switch (pat->type)  {
     case VKVG_PATTERN_TYPE_SOLID:
         if (ctx->source)
             ctx->source = NULL;
-        if (lastPat && lastPat->type == VKVG_PATTERN_TYPE_SURFACE){
-            ctx->descSrcTex = vkh_image_get_descriptor (ctx->pSurf->dev->emptyImg, VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL);
-            if (ctx->cmdStarted){
-                CmdPushDescriptorSet(ctx->cmd, VK_PIPELINE_BIND_POINT_GRAPHICS, ctx->pSurf->dev->pipelineLayout, 0, 1, &ctx->wds[1]);
+        if (lastPat){
+            if (lastPat->type == VKVG_PATTERN_TYPE_SURFACE){
+                ctx->descSrcTex = vkh_image_get_descriptor (ctx->pSurf->dev->emptyImg, VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL);
+                _flush_cmd_buff(ctx);
             }
+            if (lastPat->type == pat->type)
+                break;
+            ctx->pushConsts.patternType = pat->type;
+            ctx->pushCstDirty = true;
         }
         break;
     case VKVG_PATTERN_TYPE_SURFACE:
     {
+        _flush_cmd_buff (ctx);
+
         VkvgSurface surf = (VkvgSurface)pat->data;
         ctx->source = surf->img;
+        ctx->pushConsts.source.width = surf->height;
+        ctx->pushConsts.source.height = surf->width;
+        ctx->pushConsts.patternType = pat->type;
+        ctx->pushCstDirty = true;
 
         if (CmdPushDescriptorSet != VK_NULL_HANDLE) {
-            ctx->descSrcTex = (VkDescriptorImageInfo){
-                    _get_sampler_for_pattern(ctx->pSurf->dev, pat), vkh_image_get_view(surf->img), VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL};
+            ctx->descSrcTex = (VkDescriptorImageInfo) {
+                    _get_sampler_for_pattern(ctx->pSurf->dev, pat),
+                    vkh_image_get_view (ctx->source),
+                    VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL};
+
             if (!ctx->cmdStarted)
                 _start_cmd_for_render_pass(ctx);
             else{
@@ -620,8 +627,6 @@ void _update_cur_pattern (VkvgContext ctx, VkvgPattern pat) {
                 CmdPushDescriptorSet(ctx->cmd, VK_PIPELINE_BIND_POINT_GRAPHICS, ctx->pSurf->dev->pipelineLayout, 0, 1, &ctx->wds[1]);
             }
         }
-        vec4 srcRect = {0,0,surf->width,surf->height};
-        ctx->pushConsts.source = srcRect;
         //flush ctx in two steps to add the src transitioning in the cmd buff
         /*if (ctx->cmdStarted){//transition of img without appropriate dependencies in subpass must be done outside renderpass.
             _record_draw_cmd (ctx);//ensure all vertices are flushed
@@ -665,7 +670,7 @@ void _update_cur_pattern (VkvgContext ctx, VkvgPattern pat) {
         _flush_cmd_buff (ctx);
 
         if (lastPat && lastPat->type == VKVG_PATTERN_TYPE_SURFACE)
-            _update_descriptor_set (ctx, ctx->pSurf->dev->emptyImg, ctx->dsSrc);
+            _update_descriptor_set (ctx, ctx->pSurf->dev->emptyImg, ctx->dsSrc,1);
 
         vec4 bounds = {ctx->pSurf->width, ctx->pSurf->height, 0, 0};//store img bounds in unused source field
         ctx->pushConsts.source = bounds;
@@ -687,13 +692,13 @@ void _update_cur_pattern (VkvgContext ctx, VkvgPattern pat) {
     if (lastPat)
         vkvg_pattern_destroy    (lastPat);
 }
-void _update_descriptor_set (VkvgContext ctx, VkhImage img, VkDescriptorSet ds){
+void _update_descriptor_set (VkvgContext ctx, VkhImage img, VkDescriptorSet ds, uint binding){
     _wait_flush_fence(ctx);//descriptorSet update invalidate cmd buffs
     VkDescriptorImageInfo descSrcTex = vkh_image_get_descriptor (img, VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL);
     VkWriteDescriptorSet writeDescriptorSet = {
             .sType = VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET,
             .dstSet = ds,
-            .dstBinding = 0,
+            .dstBinding = binding,
             .descriptorCount = 1,
             .descriptorType = VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER,
             .pImageInfo = &descSrcTex
@@ -704,8 +709,8 @@ void _update_gradient_desc_set (VkvgContext ctx){
     VkDescriptorBufferInfo dbi = {ctx->uboGrad.buffer, 0, VK_WHOLE_SIZE};
     VkWriteDescriptorSet writeDescriptorSet = {
             .sType = VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET,
-            .dstSet = ctx->dsGrad,
-            .dstBinding = 0,
+            .dstSet = ctx->dsSrc,
+            .dstBinding = 2,
             .descriptorCount = 1,
             .descriptorType = VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER,
             .pBufferInfo = &dbi
@@ -745,12 +750,8 @@ void _init_descriptor_sets (VkvgContext ctx){
     VkDescriptorSetAllocateInfo descriptorSetAllocateInfo = { .sType = VK_STRUCTURE_TYPE_DESCRIPTOR_SET_ALLOCATE_INFO,
                                                               .descriptorPool = ctx->descriptorPool,
                                                               .descriptorSetCount = 1,
-                                                              .pSetLayouts = &dev->dslFont };
-    VK_CHECK_RESULT(vkAllocateDescriptorSets(dev->vkDev, &descriptorSetAllocateInfo, &ctx->dsFont));
-    descriptorSetAllocateInfo.pSetLayouts = &dev->dslSrc;
+                                                              .pSetLayouts = &dev->dslSrc };
     VK_CHECK_RESULT(vkAllocateDescriptorSets(dev->vkDev, &descriptorSetAllocateInfo, &ctx->dsSrc));
-    descriptorSetAllocateInfo.pSetLayouts = &dev->dslGrad;
-    VK_CHECK_RESULT(vkAllocateDescriptorSets(dev->vkDev, &descriptorSetAllocateInfo, &ctx->dsGrad));
 }
 void add_line(vkvg_context* ctx, vec2 p1, vec2 p2, vec4 col){
     Vertex v = {{p1.x,p1.y},{0,0,-1}};
index e5148509f60a59b8356bf773f12b1f112ed58ca6..ea59d4e580e9ce22e83d3472efb0dfcd67bf1b00 100644 (file)
@@ -33,7 +33,7 @@
 #define VKVG_IBO_SIZE                          VKVG_VBO_SIZE * 6
 #define VKVG_PATHES_SIZE                       16
 #define VKVG_ARRAY_THRESHOLD           8
-#define VKVG_IBO_INDEX_TYPE         uint16_t
+#define VKVG_IBO_INDEX_TYPE         uint32_t
 #define CreateRgba(r, g, b, a) ((a << 24) | (r << 16) | (g << 8) | b)
 #define CreateRgbaf(r, g, b, a) (((int)(a * 255.0f) << 24) | ((int)(b * a * 255.0f) << 16) | ((int)(g * a * 255.0f) << 8) | (int)(r * a * 255.0f))
 typedef struct{
@@ -83,9 +83,9 @@ typedef struct _vkvg_context_t {
     bool                cmdStarted; //prevent flushing empty renderpass
     bool                pushCstDirty;//prevent pushing to gpu if not requested
     VkDescriptorPool   descriptorPool;//one pool per thread
-    VkDescriptorSet     dsFont;     //fonts glyphs texture atlas descriptor (local for thread safety)
+    //VkDescriptorSet     dsFont;     //fonts glyphs texture atlas descriptor (local for thread safety)
     VkDescriptorSet     dsSrc;      //source ds
-    VkDescriptorSet     dsGrad;     //gradient uniform buffer
+    //VkDescriptorSet     dsGrad;     //gradient uniform buffer
 
     VkRect2D            bounds;
 
@@ -226,7 +226,7 @@ void _start_cmd_for_render_pass (VkvgContext ctx);
 
 void _createDescriptorPool  (VkvgContext ctx);
 void _init_descriptor_sets  (VkvgContext ctx);
-void _update_descriptor_set (VkvgContext ctx, VkhImage img, VkDescriptorSet ds);
+void _update_descriptor_set (VkvgContext ctx, VkhImage img, VkDescriptorSet ds, uint binding);
 void _update_gradient_desc_set(VkvgContext ctx);
 void _free_ctx_save         (vkvg_context_save_t* sav);
 
index 560c1e6446be007c1fd65d41e65dd3872c0d2b4b..cae3183aa673631afafc489d46a2bd093f380433 100644 (file)
@@ -119,6 +119,7 @@ void vkvg_device_destroy (VkvgDevice dev)
 
     vkh_image_destroy               (dev->emptyImg);
 
+    _destroy_samplers               (dev);
     //vkDestroyDescriptorSetLayout    (dev->vkDev, dev->dslGrad,NULL);
     //vkDestroyDescriptorSetLayout    (dev->vkDev, dev->dslFont,NULL);
     vkDestroyDescriptorSetLayout    (dev->vkDev, dev->dslSrc, NULL);
index e4b77bfafbeafe9a8633977b70a7ce04dbd13f49..d88273f5693aa910956d272be00f73c68115056c 100644 (file)
@@ -82,9 +82,9 @@ typedef struct _vkvg_device_t{
 
     VkPipelineCache                    pipelineCache;          /**< speed up startup by caching configured pipelines on disk */
     VkPipelineLayout           pipelineLayout;         /**< layout common to all pipelines */
-    VkDescriptorSetLayout      dslFont;                /**< font cache descriptors layout */
+    //VkDescriptorSetLayout    dslFont;                /**< font cache descriptors layout */
     VkDescriptorSetLayout      dslSrc;                 /**< context source surface descriptors layout */
-    VkDescriptorSetLayout      dslGrad;                /**< context gradient descriptors layout */
+    //VkDescriptorSetLayout    dslGrad;                /**< context gradient descriptors layout */
 
     int                hdpi,                                   /**< only used for FreeType fonts and svg loading */
             vdpi;
@@ -113,4 +113,5 @@ VkSampler _get_sampler_for_pattern (VkvgDevice dev, VkvgPattern pat);
 void _wait_idle                 (VkvgDevice dev);
 void _wait_and_reset_device_fence (VkvgDevice dev);
 void _submit_cmd                (VkvgDevice dev, VkCommandBuffer* cmd, VkFence fence);
+void _destroy_samplers          (VkvgDevice dev);
 #endif
index 0fb50bb8d35ee2bc7e0bb001bf12df39cfc847e5..05ce7a56406a2e2faa7259aea5d024bc23a40843 100644 (file)
@@ -132,7 +132,7 @@ void _increase_font_tex_array (VkvgDevice dev){
 
     VkvgContext next = dev->lastCtx;
     while (next != NULL){
-        _update_descriptor_set (next, next->source, next->dsSrc);
+        _update_descriptor_set (next, next->source, next->dsSrc, 1);
         next = next->pPrev;
     }
 }
index c34c53c6b4e1d47868ad78e2def36c968e4ce499..aa3e46df5ceff99785f5e80edbb312a649ce35e2 100644 (file)
@@ -60,7 +60,9 @@
 
 #include "vkvg_matrix.h"
 
-#define ISFINITE(x) ((x) * (x) >= 0.) /* check for NaNs */
+#define ISFINITE(x) ((x) * (x) >= 0.f) /* check for NaNs */
+
+static const vkvg_matrix_t identity = VKVG_IDENTITY_MATRIX;
 
 //matrix computations mainly taken from http://cairographics.org
 static void _vkvg_matrix_scalar_multiply (vkvg_matrix_t *matrix, float scalar)
@@ -119,23 +121,23 @@ void vkvg_matrix_invert (vkvg_matrix_t *matrix)
     float det;
 
     /* Simple scaling|translation matrices are quite common... */
-    if (matrix->xy == 0. && matrix->yx == 0.) {
+    if (matrix->xy == 0.f&& matrix->yx == 0.f) {
         matrix->x0 = -matrix->x0;
         matrix->y0 = -matrix->y0;
 
-        if (matrix->xx != 1.) {
-            if (matrix->xx == 0.)
+        if (matrix->xx != 1.f) {
+            if (matrix->xx == 0.f)
             return;
 
-            matrix->xx = 1. / matrix->xx;
+            matrix->xx = 1.f / matrix->xx;
             matrix->x0 *= matrix->xx;
         }
 
-        if (matrix->yy != 1.) {
-            if (matrix->yy == 0.)
+        if (matrix->yy != 1.f) {
+            if (matrix->yy == 0.f)
             return;
 
-            matrix->yy = 1. / matrix->yy;
+            matrix->yy = 1.f / matrix->yy;
             matrix->y0 *= matrix->yy;
         }
 
@@ -148,7 +150,7 @@ void vkvg_matrix_invert (vkvg_matrix_t *matrix)
     if (! ISFINITE (det))
         return;
 
-    if (det == 0)
+    if (det == 0.f)
         return;
 
     _vkvg_matrix_compute_adjoint (matrix);
@@ -191,8 +193,8 @@ void vkvg_matrix_init_rotate (vkvg_matrix_t *matrix, float radians)
     float  s;
     float  c;
 
-    s = sin (radians);
-    c = cos (radians);
+    s = sinf (radians);
+    c = cosf (radians);
 
     vkvg_matrix_init (matrix,
                c, s,
@@ -255,3 +257,13 @@ void vkvg_matrix_transform_point (const vkvg_matrix_t *matrix, float *x, float *
     *x += matrix->x0;
     *y += matrix->y0;
 }
+
+bool vkvg_matrix_is_identity (const vkvg_matrix_t *matrix) {
+    return memcmp(matrix, &identity, sizeof (vkvg_matrix_t)) == 0;
+    /*return matrix->xx == 1.0f &&
+            matrix->yy == 1.0f &&
+            matrix->x0 == 0.0f &&
+            matrix->y0 == 0.0f &&
+            matrix->xy == 0.0f &&
+            matrix->yx == 0.0f;*/
+}
index 9c5c3518f829532639b704f7b308c9572e362069..a80a3d5e3cff19d1241ff0c52e5655545327bfba 100644 (file)
@@ -25,9 +25,7 @@
 #include <math.h>
 #include <stdint.h>
 #include <stdbool.h>
+#include <string.h>
 #include "vkvg.h"
 
-
-
-
 #endif
index 47d5db0cffb6a35955ca947d31426631ef98d3a6..3b88763a499326ff2d4bf575bd9161c2c746f833 100644 (file)
@@ -223,7 +223,8 @@ VkvgSurface vkvg_surface_create_from_bitmap (VkvgDevice dev, unsigned char* img,
     VkhImage tmpImg = vkh_image_create ((VkhDevice)surf->dev,surf->format,surf->width,surf->height,VK_IMAGE_TILING_LINEAR,
                                          VMA_MEMORY_USAGE_GPU_ONLY,
                                          VK_IMAGE_USAGE_SAMPLED_BIT|VK_IMAGE_USAGE_TRANSFER_DST_BIT);
-    vkh_image_create_view (tmpImg, VK_IMAGE_VIEW_TYPE_2D, VK_IMAGE_ASPECT_COLOR_BIT);
+    vkh_image_create_descriptor (tmpImg, VK_IMAGE_VIEW_TYPE_2D, VK_IMAGE_ASPECT_COLOR_BIT, VK_FILTER_NEAREST, VK_FILTER_NEAREST,
+                                VK_SAMPLER_MIPMAP_MODE_NEAREST,VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_BORDER);
     //staging buffer
     vkvg_buff buff = {0};
     vkvg_buffer_create(dev, VK_BUFFER_USAGE_TRANSFER_SRC_BIT, VMA_MEMORY_USAGE_CPU_TO_GPU, imgSize, &buff);
@@ -289,19 +290,16 @@ VkvgSurface vkvg_surface_create_from_bitmap (VkvgDevice dev, unsigned char* img,
 
     //_update_push_constants (ctx);
 
-    VkvgPattern pat = vkvg_pattern_create();
     if (CmdPushDescriptorSet != VK_NULL_HANDLE) {
         ctx->source = tmpImg;
-        ctx->descSrcTex = (VkDescriptorImageInfo){
-                _get_sampler_for_pattern(ctx->pSurf->dev,pat), vkh_image_get_view(tmpImg), VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL};
+        ctx->descSrcTex = vkh_image_get_descriptor (tmpImg, VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL);
     }else {
-        _update_descriptor_set (ctx, tmpImg, ctx->dsSrc);
+        _update_descriptor_set (ctx, tmpImg, ctx->dsSrc,1);
     }
     _check_cmd_buff_state  (ctx);
 
     vkvg_paint          (ctx);
     vkvg_destroy        (ctx);
-    vkvg_pattern_destroy(pat);
 
     vkh_image_destroy   (tmpImg);
 
@@ -441,10 +439,10 @@ void vkvg_surface_write_to_png (VkvgSurface surf, const char* path){
     vkh_cmd_begin (cmd, VK_COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT);
     vkh_image_set_layout (cmd, stagImg, VK_IMAGE_ASPECT_COLOR_BIT,
                           VK_IMAGE_LAYOUT_GENERAL, VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL,
-                          VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT, VK_PIPELINE_STAGE_TRANSFER_BIT);
+                          VK_PIPELINE_STAGE_ALL_COMMANDS_BIT, VK_PIPELINE_STAGE_TRANSFER_BIT);
     vkh_image_set_layout (cmd, surf->img, VK_IMAGE_ASPECT_COLOR_BIT,
                           VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL, VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL,
-                          VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT, VK_PIPELINE_STAGE_TRANSFER_BIT);
+                          VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT, VK_PIPELINE_STAGE_TRANSFER_BIT);
 
     VkImageBlit blit = {
         .srcSubresource = imgSubResLayers,
index 96b254da7a1bd92201127b82dbe37016038039ea..0a793ddf36813945f4d1d938aa0dc84cb6b8118f 100644 (file)
@@ -10,8 +10,8 @@ bool mouseDown = false;
 VkvgDevice device = NULL;
 VkvgSurface surf = NULL;
 
-uint test_size = 200;  // items drawn in one run, or complexity
-int iterations = 500;   // repeat test n times
+uint test_size = 100;  // items drawn in one run, or complexity
+int iterations = 200;   // repeat test n times
 
 static bool paused = false;
 static VkSampleCountFlags samples = VK_SAMPLE_COUNT_4_BIT;
@@ -162,7 +162,7 @@ void run_test_func (void(*testfunc)(void),uint width, uint height) {
             min_run_time = MIN(run_time, min_run_time);
         max_run_time = MAX(run_time, max_run_time);
         run_total += run_time;
-        i++;
+        //i++;
     }
 
     double avg_run_time = run_total / (double)iterations;
index bc890e3a81586982b659206bf846c467ba888225..1a59e0f4170f751c42a3524d739014c161919a38 100644 (file)
@@ -5,23 +5,29 @@ void test(){
     vkvg_set_fill_rule(ctx,VKVG_FILL_RULE_NON_ZERO);
     VkvgSurface imgSurf = vkvg_surface_create_from_image(device, "data/miroir.jpg");
 
-    //vkvg_rotate(ctx,0.5);
+    vkvg_translate(ctx,20,20);
+    vkvg_rotate(ctx,0.5);
 
-    //vkvg_set_source_rgba(ctx,1,0,0,1);
+    vkvg_set_source_rgba(ctx,1,0,0,1);
     //vkvg_rectangle(ctx,100,100,200,200);
     /*vkvg_rectangle(ctx,
                    0,
                    0,
                    500,
-                   500);*/
-    //vkvg_fill(ctx);
-    //vkvg_paint(ctx);
-
-    vkvg_set_source_surface(ctx, imgSurf, 0, 0);
-    //vkvg_rectangle(ctx,0,0,400,400);
-    //vkvg_fill(ctx);
+                   500);
+    vkvg_fill(ctx);*/
     vkvg_paint(ctx);
 
+    //vkvg_set_source_surface(ctx, imgSurf, 0,0);
+
+    VkvgPattern pat = vkvg_pattern_create_for_surface(imgSurf);
+    vkvg_pattern_set_extend(pat, VKVG_EXTEND_REPEAT);
+    vkvg_set_source(ctx, pat);
+    vkvg_rectangle(ctx,0,0,500,500);
+    vkvg_fill(ctx);
+    //vkvg_paint(ctx);
+
+    vkvg_pattern_destroy(pat);
     /*vkvg_set_operator(ctx, VKVG_OPERATOR_CLEAR);
     vkvg_paint(ctx);
     vkvg_set_operator(ctx, VKVG_OPERATOR_OVER);*/
@@ -45,13 +51,17 @@ void test(){
     //vkvg_scale(ctx,0.5,0.5);
     vkvg_set_source_rgb(ctx,0,0,1);
     vkvg_paint(ctx);
+*/
+    /*vkvg_rotate(ctx,0.5);
 
     vkvg_set_line_width(ctx,20.f);
-    vkvg_set_source_surface(ctx, imgSurf, 100, 100);
-    vkvg_rectangle(ctx,100,100,200,200);
-    vkvg_stroke(ctx);
+    vkvg_rectangle(ctx,200,200,200,200);
+    vkvg_stroke(ctx);*/
+
+
+
     //vkvg_paint(ctx);
-*/
+
     vkvg_surface_destroy(imgSurf);
 
     vkvg_destroy(ctx);
index 141cd756476d32cb3cbfcc13bd27201aa6aec3b1..25f7d3bd4ddfa5b4c0e2e8a7e5821e9df89da1ee 100644 (file)
@@ -15,16 +15,10 @@ void test(){
     //vkvg_set_source_rgba(ctx,0.1,0.1,0.3,1.0);
     //vkvg_paint (ctx);
 
-    for (int i=0; i<10; i++) {
+    /*for (int i=0; i<10; i++) {
         vkvg_translate(ctx,50,50);
 
         vkvg_save(ctx);
-/*
-        vkvg_rectangle(ctx,0,0,200,200);
-        vkvg_clip_preserve(ctx);
-        vkvg_set_operator(ctx,VKVG_OPERATOR_CLEAR);
-        vkvg_fill(ctx);
-        vkvg_set_operator(ctx,VKVG_OPERATOR_OVER);*/
 
         vkvg_set_source_rgba(ctx,0.0,0.0,0.0,0.3f);
         vkvg_move_to(ctx,0,0);
@@ -35,19 +29,20 @@ void test(){
         vkvg_paint (ctx);
 
         vkvg_restore(ctx);
-    }
+    }*/
 
     //VkvgPattern pat = vkvg_get_source (ctx);
-    /*VkvgPattern pat = vkvg_pattern_create_for_surface(surf2);
-    vkvg_pattern_set_extend (pat,VKVG_EXTEND_REFLECT);
-    vkvg_set_source(ctx,pat);*/
+    VkvgPattern pat = vkvg_pattern_create_for_surface(surf2);
+    //vkvg_pattern_set_extend (pat,VKVG_EXTEND_REFLECT);
+    vkvg_set_source(ctx,pat);
     //vkvg_set_source_rgba(ctx,0,1,0,1.0);
     //vkvg_rectangle(ctx,100,100,200,200);
     //vkvg_fill(ctx);
+    vkvg_paint (ctx);
 
     vkvg_destroy (ctx);
 
-    //vkvg_pattern_destroy (pat);
+    vkvg_pattern_destroy (pat);
 }
 
 int main(int argc, char *argv[]) {
@@ -60,14 +55,14 @@ int main(int argc, char *argv[]) {
 
     vkvg_set_source_rgba(ctx,1.0,0.,0.,0.2f);
     vkvg_paint (ctx);
-    vkvg_set_source_rgba(ctx,1.0,1.0,0.,0.5f);
+    /*vkvg_set_source_rgba(ctx,1.0,1.0,0.,0.5f);
     vkvg_move_to(ctx,10,10);
     vkvg_line_to(ctx,200,200);
     vkvg_set_line_width(ctx,10);
     vkvg_stroke(ctx);
     vkvg_set_source_rgba(ctx,1.0,1.0,1.0,0.6f);
     vkvg_rectangle(ctx,0,0,400,400);
-    vkvg_stroke(ctx);
+    vkvg_stroke(ctx);*/
 
     vkvg_destroy (ctx);
 
index 1cb347cf1d8efae5c8a403feeb38f4997be5cebd..d01ae66863af00380d082c74de775cf7d6fa1931 100644 (file)
@@ -1,13 +1,33 @@
 #include "test.h"
 
 void test(){
-    vkvg_surface_clear(surf);
+    //vkvg_surface_clear(surf);
 
-    VkvgContext ctx = vkvg_create(surf);
+    VkvgSurface surf2 = vkvg_surface_create (device,400,400);
+
+    VkvgContext ctx = vkvg_create (surf2);
+
+    vkvg_set_source_rgba(ctx,1.0,0.,0.,0.5f);
+    vkvg_paint (ctx);
+    vkvg_destroy(ctx);
+
+
+    //vkvg_surface_write_to_png(surf2, "/home/jp/test.png");
+
+    ctx = vkvg_create(surf);
+
+    /*vkvg_set_source_rgba(ctx,0,0,1,0.5);
+
+    */
+
+    vkvg_set_source_surface(ctx, surf2,0,0);
+    //vkvg_rectangle(ctx,10,10,300,300);
+    //vkvg_fill(ctx);
+    vkvg_paint(ctx);
 
     //vkvg_set_fill_rule(ctx, VKVG_FILL_RULE_EVEN_ODD);
 
-    vkvg_rotate(ctx,0.1f);
+    /*vkvg_rotate(ctx,0.1f);
 
     vkvg_set_source_rgba(ctx,0,0,1,0.5);
     vkvg_rectangle(ctx,100,100,200,200);
@@ -20,10 +40,12 @@ void test(){
 
     vkvg_set_source_rgba(ctx,0,1,0,0.5);
     vkvg_rectangle(ctx,500,500,200,200);
-    vkvg_fill(ctx);
+    vkvg_fill(ctx);*/
 
 
     vkvg_destroy(ctx);
+
+    vkvg_surface_destroy(surf2);
 }
 
 int main(int argc, char *argv[]) {