\ExplSyntaxOn
       \usepackage{tikz}


       \bool_set_false:N\l_pgfgo_goban_partial_bool
       \tl_set:Nn\l_pgfgo_goban_from_x_tl{1}
       \tl_set:Nn\l_pgfgo_goban_from_y_tl{1}
       \tl_set:Nn\l_pgfgo_goban_to_x_tl{9}
       \tl_set:Nn\l_pgfgo_goban_to_y_tl{9}


       %GRID
       \bool_set_true:N\l_pgfgo_goban_grid_bool
       \dim_new:N\l_pgfgo_goban_grid_line_width_dim
       \dim_new:N\l_pgfgo_goban_grid_x_sep_dim
       \dim_new:N\l_pgfgo_goban_grid_y_sep_dim



       %BORDER
       \bool_set_true:N\l_pgfgo_goban_border_bool
       \bool_set_true:N\l_pgfgo_goban_border_line_bool
       \bool_set_true:N\l_pgfgo_goban_border_fill_bool

       \dim_new:N\l_pgfgo_goban_border_sep_dim
       \dim_set:Nn\l_pgfgo_goban_border_sep_dim{\fp_to_dim:n{\l_pgfgo_players_stone_radius_dim * 1.5}}
       \dim_new:N\l_pgfgo_goban_border_line_width_dim
       \dim_new:N\l_pgfgo_goban_border_rounded_corners_dim
       \dim_new:N\l_pgfgo_goban_border_inner_rounded_corners_dim

       %LABEL
       \tl_set:Nn\l_pgfgo_goban_labels_color_tl{black}
       \dim_new:N\l_pgfgo_goban_labels_sep_dim
       \dim_set:Nn\l_pgfgo_goban_labels_sep_dim{0.5em}
       \bool_set_false:N\l_pgfgo_goban_labels_pos_north_bool
       \bool_set_false:N\l_pgfgo_goban_labels_pos_east_bool
       \bool_set_false:N\l_pgfgo_goban_labels_pos_south_bool
       \bool_set_false:N\l_pgfgo_goban_labels_pos_west_bool
       \tl_new:N \l_pgfgo_goban_label_font_tl


       %LAYERS
       \pgfdeclarelayer{pgfgo_layer_goban_border}
       \pgfdeclarelayer{pgfgo_layer_goban_grid}
       \pgfdeclarelayer{pgfgo_layer_goban_labels}
       \pgfdeclarelayer{pgfgo_layer_territory}
       \pgfdeclarelayer{pgfgo_layer_mark_shadow}
       \pgfdeclarelayer{pgfgo_layer_stone}
       \pgfdeclarelayer{pgfgo_layer_stone_mark}
       \pgfdeclarelayer{pgfgo_layer_mark}





       \keys_define:nn {pgfgo / goban}{
               new~remember                                    .code:n                 = {
                                                                                                                                                       \seq_gclear:N\l_pgfgo_goban_elements_stack_seq
                                                                                                                                                       \bool_set_true:N\l_pgfgo_goban_remember_new_bool
                                                                                                                                                       \bool_set_true:N\l_pgfgo_goban_remember_add_bool
                                                                                                                                                       \pgfgo_goban_remember_all:
                                                                                                                                               },

               remember                                .code:n                 = {
                                                                                                                                                       \bool_set_false:N\l_pgfgo_goban_remember_new_bool
                                                                                                                                                       \bool_set_true:N\l_pgfgo_goban_remember_add_bool
                                                                                                                                                       \pgfgo_goban_remember_all:
                                                                                                                                               },

               forget                                                          .code:n                 = {
                                                                                                                                                       \bool_set_false:N\l_pgfgo_goban_remember_new_bool
                                                                                                                                                       \bool_set_false:N\l_pgfgo_goban_remember_add_bool
                                                                                                                                                       \pgfgo_goban_remember_nothing:
                                                                                                                                               },

               resume                                          .code:n                 = {\bool_set_true:N\l_pgfgo_goban_resume_bool},

               grid                                                    .code:n                 = {\keys_set:nx{pgfgo / goban / grid}           {#1}},

               border                                          .code:n                 = {\keys_set:nx{pgfgo / goban / border} {#1}}, %DEPRECATED

               background                                              .code:n                 = {\keys_set:nx{pgfgo / goban / background} {#1}},

               label                                                   .code:n                 = {\keys_set:nx{pgfgo / goban / label} {#1}},

               partial                                         .code:n                 = {     \bool_set_true:N\l_pgfgo_goban_partial_bool
                                                                                                                                                       \keys_set:nx{pgfgo / goban / partial} {#1}},

               scale                                                   .tl_set:N               = \l_pgfgo_goban_scale_tl,
               scale                                                   .initial:n      = {1},

               size                                                    .code:n                 = {\pgfgo_parse_goban_size:n{#1}},

               use~i                                   .bool_set:N = \l_pgfgo_use_i_bool,

               use~i                                   .default:n      = {true},

               unknown                                         .code:n                 = {\pgfgo_parse_goban_size:V\l_keys_key_str},%INTERNTA PARSEAR EL SIZE
               }



       \keys_define:nn {pgfgo / goban / grid}{
               false                                                   .bool_set:N     = \l_pgfgo_goban_grid_bool,
               false                                                   .default:n      = {false},

               line                                                    .code:n                 = {\keys_set:nn {pgfgo / goban / grid / line} {#1}},

               x~sep                                                   .dim_set:N      = \l_pgfgo_goban_grid_x_sep_dim,

               y~sep                                                   .dim_set:N      = \l_pgfgo_goban_grid_y_sep_dim,

               sep                                                             .code:n                 = {\keys_set:nn{pgfgo / goban / grid}{x~sep = #1, y~sep = #1}},
               sep                                                             .initial:n      = {1.25em},
       }

       \keys_define:nn {pgfgo / goban / grid / line} {
               color                           .tl_set:N               = \l_pgfgo_goban_grid_color_tl,
               color                           .initial:n      = {black},

               opacity                 .tl_set:N = \l_pgfgo_goban_grid_opacity_tl,
               opacity                 .initial:n      = {1},

               width                           .dim_set:N      = \l_pgfgo_goban_grid_line_width_dim,
               width                           .initial:n      = {0.55pt}
       }




       \keys_define:nn {pgfgo / goban / background}{
               false                                                                           .bool_set:N = \l_pgfgo_goban_border_bool,
               false                                                                           .default:n = {false},

               sep                                                                                     .dim_set:N      = \l_pgfgo_goban_border_sep_dim,
               sep                                                                                     .initial:n      = {0.825em},

               line                                                                            .code:n         = {\keys_set:nn {pgfgo / goban / background / line} {#1}},

               fill                                                                            .code:n         = {\keys_set:nn {pgfgo / goban / background / fill} {#1}},

               rounded~corners                                 .code:n         = {\keys_set:nn {pgfgo / goban / background / rounded~corners} {#1}},

               drop~shadow                             .code:n =       {\keys_set:nn {pgfgo / goban / background / drop~shadow} {#1}},
               drop~shadow                             .default:n = {true}
       }


       \keys_define:nn {pgfgo / goban / background / rounded~corners } {
               inner                           .dim_set:N = \l_pgfgo_goban_border_inner_rounded_corners_dim,
               inner                           .initial:n = {0pt},
               outer                           .dim_set:N = \l_pgfgo_goban_border_rounded_corners_dim,
               outer                           .initial:n = {0pt},
               unknown                 .code:n          = {
                       \dim_set:Nn\l_pgfgo_goban_border_rounded_corners_dim                    {\l_keys_key_str} \dim_set:Nn\l_pgfgo_goban_border_inner_rounded_corners_dim  {\l_keys_key_str}
                       },
       }



       \bool_new:N \l_pgfgo_goban_background_drop_shadow_bool
       \fp_new:N \l_pgfgo_goban_background_drop_shadow_angle_fp
       \dim_new:N \l_pgfgo_goban_background_drop_shadow_offset_dim
       \fp_new:N \l_pgfgo_goban_background_drop_shadow_opacity_fp
       \tl_new:N \l_pgfgo_goban_background_drop_shadow_color_tl



       \keys_define:nn {pgfgo / goban / background / drop~shadow} {
               true            .bool_set:N = \l_pgfgo_goban_background_drop_shadow_bool,
               true            .default:n = {true},

               false           .bool_set:N = \l_pgfgo_goban_background_drop_shadow_bool,
               false           .default:n = {false},

               angle           .fp_set:N = \l_pgfgo_goban_background_drop_shadow_angle_fp,
               angle           .initial:n = {-45},

               offset  .dim_set:N = \l_pgfgo_goban_background_drop_shadow_offset_dim,
               offset  .initial:n = {1.5pt},

               opacity .fp_set:N = \l_pgfgo_goban_background_drop_shadow_opacity_fp,
               opacity .initial:n = {0.5},

               color   .tl_set:N = \l_pgfgo_goban_background_drop_shadow_color_tl,
               color           .initial:n = {black},
       }



%
%\keys_define:nn {pgfgo / goban / background / custom}{
%       source .tl_set:N  = ,
%
%       scale   .pf_set:N = ,
%       x~scale         .pf_set:N = ,
%       y~scale         .pf_set:N = ,
%       x~shift         .pf_set:N = ,
%       y~shift         .pf_set:N = ,
%}


\keys_define:nn {pgfgo / goban / background / line}{
       color                           .tl_set:N = \l_pgfgo_goban_border_color_tl,
       color                           .initial:n      = {black},

       opacity                 .tl_set:N = \l_pgfgo_goban_border_opacity_tl,
       opacity                 .initial:n      = {1},

       width                           .dim_set:N = \l_pgfgo_goban_border_line_width_dim,
       width                           .initial:n = {0.75pt},

       false                           .code:n = {\bool_set_false:N\l_pgfgo_goban_border_line_bool},
       true                            .code:n = {\bool_set_true:N\l_pgfgo_goban_border_line_bool},
}





\keys_define:nn {pgfgo / goban / background / fill}{
       color                           .tl_set:N               = \l_pgfgo_goban_border_fill_color_tl,
       color                           .initial:n      = {white},

       opacity                 .tl_set:N       = \l_pgfgo_goban_border_fill_opacity_tl,
       opacity                 .initial:n      = {1},

       false                           .code:n = {\bool_set_false:N\l_pgfgo_goban_border_fill_bool},
       true                            .code:n = {\bool_set_true:N\l_pgfgo_goban_border_fill_bool},
}





       \keys_define:nn {pgfgo / goban / label} {
               false                           .code:n                 = {     \bool_set_false:N\l_pgfgo_goban_labels_pos_north_bool
                                                                                                                               \bool_set_false:N\l_pgfgo_goban_labels_pos_east_bool
                                                                                                                               \bool_set_false:N\l_pgfgo_goban_labels_pos_south_bool
                                                                                                                               \bool_set_false:N\l_pgfgo_goban_labels_pos_west_bool
                                                                                                                       },

               text~color      .tl_set:N       = \l_pgfgo_goban_labels_color_tl,

               sep                                     .dim_set:N      = \l_pgfgo_goban_labels_sep_dim,

               font                            .tl_set:N       = \l_pgfgo_goban_label_font_tl,


               at                                      .code:n                 = {\keys_set:nx{pgfgo / goban / label / at} {#1}}
       }



       \keys_define:nn {pgfgo / goban / label / at} {
               all                                     .code:n = {
                       \bool_set_true:N\l_pgfgo_goban_labels_pos_north_bool
                       \bool_set_true:N\l_pgfgo_goban_labels_pos_east_bool
                       \bool_set_true:N\l_pgfgo_goban_labels_pos_south_bool
                       \bool_set_true:N\l_pgfgo_goban_labels_pos_west_bool
                                                                                                       },

               none                                    .code:n = {
                       \bool_set_false:N\l_pgfgo_goban_labels_pos_north_bool
                       \bool_set_false:N\l_pgfgo_goban_labels_pos_east_bool
                       \bool_set_false:N\l_pgfgo_goban_labels_pos_south_bool
                       \bool_set_false:N\l_pgfgo_goban_labels_pos_west_bool
               },

               north                           .bool_set:N = \l_pgfgo_goban_labels_pos_north_bool,
               north                           .default:n = {true},

               east                            .bool_set:N = \l_pgfgo_goban_labels_pos_east_bool,
               east                            .default:n = {true},

               south                           .bool_set:N = \l_pgfgo_goban_labels_pos_south_bool,
               south                           .default:n = {true},

               west                            .bool_set:N = \l_pgfgo_goban_labels_pos_west_bool,
               west                            .default:n = {true},

               above                           .bool_set:N = \l_pgfgo_goban_labels_pos_north_bool,
               above                           .default:n = {true},

               right                           .bool_set:N = \l_pgfgo_goban_labels_pos_east_bool,
               right                           .default:n = {true},

               below                           .bool_set:N = \l_pgfgo_goban_labels_pos_south_bool,
               below                           .default:n = {true},

               left                            .bool_set:N = \l_pgfgo_goban_labels_pos_west_bool,
               left                            .default:n = {true},
       }


       \int_new:N\l_pgfgo_goban_tmp_from_x_int
       \int_new:N\l_pgfgo_goban_tmp_from_y_int
       \int_new:N\l_pgfgo_goban_tmp_to_x_int
       \int_new:N\l_pgfgo_goban_tmp_to_y_int


       \keys_define:nn {pgfgo / goban / partial}{
               from                            .code:n         = {
                       \pgfgo_parse_goban_partial_from:n{#1}

                       \pgfgo_parse_coordinate:x {\l_temp_a_tl}
                       \int_set:Nn\l_pgfgo_goban_tmp_from_x_int        {\l_pgfgo_parsed_x_coordinate_tl}
                       \int_set:Nn\l_pgfgo_goban_tmp_from_y_int        {\l_pgfgo_parsed_y_coordinate_tl}


                       \pgfgo_parse_coordinate:x {\l_temp_b_tl}
                       \int_set:Nn\l_pgfgo_goban_tmp_to_x_int          {\l_pgfgo_parsed_x_coordinate_tl}
                       \int_set:Nn\l_pgfgo_goban_tmp_to_y_int          {\l_pgfgo_parsed_y_coordinate_tl}
               },
               false                                                   .bool_set:N = \l_pgfgo_goban_partial_bool,
               false                                                   .default:n = {false}
       }





%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%----------------------------------------goban-----------------------------------------------%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%


       \int_new:N \l_pgfgo_goban_to_x_int
       \int_new:N \l_pgfgo_goban_to_y_int
       \int_new:N \l_pgfgo_goban_from_x_int
       \int_new:N \l_pgfgo_goban_from_y_int

       \cs_generate_variant:Nn \int_compare_p:nNn {fNn}

       \cs_generate_variant:Nn \__pgfgo_goban:nnn {nVV}
       \int_new:N\l_pgfgo_goban_labels_current_x_int
       \int_new:N\l_pgfgo_goban_labels_current_y_int


       \cs_new:Npn\__pgfgo_goban:nnn #1#2#3 {
               \group_begin:
               \pgfsetlayers{
                       pgfgo_layer_goban_border,
                       pgfgo_layer_goban_grid,
                       pgfgo_layer_goban_labels,
                       pgfgo_layer_territory,
                       pgfgo_layer_mark_shadow,
                       pgfgo_layer_stone,
                       pgfgo_layer_stone_mark,
                       pgfgo_layer_mark,
                       main
               }

               %---------------------------------------------------

               \bool_if:NTF\l_pgfgo_goban_partial_bool{
                       \int_set:Nn\l_pgfgo_goban_from_x_int    {\int_min:nn{\l_pgfgo_goban_tmp_from_x_int}{\l_pgfgo_goban_tmp_to_x_int}}
                       \int_set:Nn\l_pgfgo_goban_from_y_int    {\int_min:nn{\l_pgfgo_goban_tmp_from_y_int}{\l_pgfgo_goban_tmp_to_y_int}}
                       \int_set:Nn\l_pgfgo_goban_to_x_int              {\int_max:nn{\l_pgfgo_goban_tmp_from_x_int}{\l_pgfgo_goban_tmp_to_x_int}}
                       \int_set:Nn\l_pgfgo_goban_to_y_int              {\int_max:nn{\l_pgfgo_goban_tmp_from_y_int}{\l_pgfgo_goban_tmp_to_y_int}}

               }{
                       \int_set:Nn\l_pgfgo_goban_from_x_int    {1}
                       \int_set:Nn\l_pgfgo_goban_from_y_int    {1}
                       \int_set:Nn\l_pgfgo_goban_to_x_int              {#2}
                       \int_set:Nn\l_pgfgo_goban_to_y_int              {#3}
               }

               %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
               %-----------------TIKZ PICTURE---------------------%
               %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

               \tikzpicture
               \pgfsetxvec{\pgfpoint{ \l_pgfgo_goban_grid_x_sep_dim}{0}}
               \pgfsetyvec{\pgfpoint{0}{ \l_pgfgo_goban_grid_y_sep_dim}}
               \pgftransformscale{\l_pgfgo_goban_scale_tl}

               %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
               %----------------BORDER AND FILL-------------------%
               %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

               \pgfonlayer{pgfgo_layer_goban_border}
               \bool_if:NT\l_pgfgo_goban_border_bool{
                       \pgfscope
                               \pgfsetlinewidth{\l_pgfgo_goban_border_line_width_dim}
                               \pgfsetstrokecolor{\l_pgfgo_goban_border_color_tl}
                               \pgfsetstrokeopacity{\l_pgfgo_goban_border_opacity_tl}
                               \pgfsetfillcolor{\l_pgfgo_goban_border_fill_color_tl}
                               \pgfsetfillopacity{\l_pgfgo_goban_border_fill_opacity_tl}

%                               \pgfsetcornersarced{\pgfpoint{\l_pgfgo_goban_border_rounded_corners_dim}{\l_pgfgo_goban_border_rounded_corners_dim}}

                               %--------DROP SHADOW

                               \bool_if:NT \l_pgfgo_goban_background_drop_shadow_bool {
                                       \pgfscope
                                               \pgftransformshift{
                                                       \pgfpointpolar
                                                               {\fp_to_decimal:N\l_pgfgo_goban_background_drop_shadow_angle_fp}
                                                               {\l_pgfgo_goban_background_drop_shadow_offset_dim}}





                                               \pgfpathmoveto{
                                                       \pgfpointadd{
                                                               \pgfpointxy{\l_pgfgo_goban_from_x_int}{\l_pgfgo_goban_from_y_int}}{
                                                               \pgfpoint{-\l_pgfgo_goban_border_sep_dim}{-\l_pgfgo_goban_border_sep_dim}}
                                               }



                                               \bool_if:nTF {\int_compare_p:nNn{\l_pgfgo_goban_to_x_int}={#2} &&
                                                       \int_compare_p:nNn{\l_pgfgo_goban_from_y_int}={1}}
                                               {\pgfsetcornersarced{\pgfpoint{\l_pgfgo_goban_border_rounded_corners_dim}{\l_pgfgo_goban_border_rounded_corners_dim}}}
                                               {\pgfsetcornersarced{\pgfpoint{\l_pgfgo_goban_border_inner_rounded_corners_dim}{\l_pgfgo_goban_border_inner_rounded_corners_dim}}}

                                               \pgfpathlineto{
                                                       \pgfpointadd{
                                                               \pgfpointxy{\l_pgfgo_goban_to_x_int}{\l_pgfgo_goban_from_y_int}}{
                                                               \pgfpoint{\l_pgfgo_goban_border_sep_dim}{-\l_pgfgo_goban_border_sep_dim}}
                                               }



                                               \bool_if:nTF {\int_compare_p:nNn{\l_pgfgo_goban_to_x_int}={#2} && \int_compare_p:nNn{\l_pgfgo_goban_to_y_int}={#3}}
                                               {\pgfsetcornersarced{\pgfpoint{\l_pgfgo_goban_border_rounded_corners_dim}{\l_pgfgo_goban_border_rounded_corners_dim}}}
                                               {\pgfsetcornersarced{\pgfpoint{\l_pgfgo_goban_border_inner_rounded_corners_dim}{\l_pgfgo_goban_border_inner_rounded_corners_dim}}}

                                               \pgfpathlineto{
                                                       \pgfpointadd{
                                                               \pgfpointxy{\l_pgfgo_goban_to_x_int}{\l_pgfgo_goban_to_y_int}}{
                                                               \pgfpoint{\l_pgfgo_goban_border_sep_dim}{\l_pgfgo_goban_border_sep_dim}}
                                               }



                                               \bool_if:nTF {\int_compare_p:nNn{\l_pgfgo_goban_from_x_int}={1} &&
                                                       \int_compare_p:nNn{\l_pgfgo_goban_to_y_int}={#3}}
                                               {\pgfsetcornersarced{\pgfpoint{\l_pgfgo_goban_border_rounded_corners_dim}{\l_pgfgo_goban_border_rounded_corners_dim}}}
                                               {\pgfsetcornersarced{\pgfpoint{\l_pgfgo_goban_border_inner_rounded_corners_dim}{\l_pgfgo_goban_border_inner_rounded_corners_dim}}}

                                               \pgfpathlineto{
                                                       \pgfpointadd{
                                                               \pgfpointxy{\l_pgfgo_goban_from_x_int}{\l_pgfgo_goban_to_y_int}}{
                                                               \pgfpoint{-\l_pgfgo_goban_border_sep_dim}{\l_pgfgo_goban_border_sep_dim}}
                                               }

                                               \bool_if:nTF {\int_compare_p:nNn{\l_pgfgo_goban_from_x_int}={1} &&
                                                       \int_compare_p:nNn{\l_pgfgo_goban_from_y_int}={1}}
                                               {\pgfsetcornersarced{\pgfpoint{\l_pgfgo_goban_border_rounded_corners_dim}{\l_pgfgo_goban_border_rounded_corners_dim}}}
                                               {\pgfsetcornersarced{\pgfpoint{\l_pgfgo_goban_border_inner_rounded_corners_dim}{\l_pgfgo_goban_border_inner_rounded_corners_dim}}}

                                               \pgfpathclose


                                               \pgfsetfillcolor{\l_pgfgo_goban_background_drop_shadow_color_tl}
                                               \pgfsetfillopacity{\fp_to_decimal:N\l_pgfgo_goban_background_drop_shadow_opacity_fp}
                                               \pgfusepath{fill}
                                       \endpgfscope
                               }




                               %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
                               %FONDO
                               %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

                               \pgfpathmoveto{
                                       \pgfpointadd{
                                               \pgfpointxy{\l_pgfgo_goban_from_x_int}{\l_pgfgo_goban_from_y_int}}{
                                               \pgfpoint{-\l_pgfgo_goban_border_sep_dim}{-\l_pgfgo_goban_border_sep_dim}}
                               }



                               \bool_if:nTF {\int_compare_p:nNn{\l_pgfgo_goban_to_x_int}={#2} && \int_compare_p:nNn{\l_pgfgo_goban_from_y_int}={1}}
                                       {\pgfsetcornersarced{\pgfpoint{\l_pgfgo_goban_border_rounded_corners_dim}{\l_pgfgo_goban_border_rounded_corners_dim}}}
                                       {\pgfsetcornersarced{\pgfpoint{\l_pgfgo_goban_border_inner_rounded_corners_dim}{\l_pgfgo_goban_border_inner_rounded_corners_dim}}}

                               \pgfpathlineto{
                                       \pgfpointadd{
                                               \pgfpointxy{\l_pgfgo_goban_to_x_int}{\l_pgfgo_goban_from_y_int}}{
                                               \pgfpoint{\l_pgfgo_goban_border_sep_dim}{-\l_pgfgo_goban_border_sep_dim}}
                               }



                               \bool_if:nTF {\int_compare_p:nNn{\l_pgfgo_goban_to_x_int}={#2} &&
                                                                                       \int_compare_p:nNn{\l_pgfgo_goban_to_y_int}={#3}}
                                       {\pgfsetcornersarced{\pgfpoint{\l_pgfgo_goban_border_rounded_corners_dim}{\l_pgfgo_goban_border_rounded_corners_dim}}}
                                       {\pgfsetcornersarced{\pgfpoint{\l_pgfgo_goban_border_inner_rounded_corners_dim}{\l_pgfgo_goban_border_inner_rounded_corners_dim}}}

                               \pgfpathlineto{
                                       \pgfpointadd{
                                               \pgfpointxy{\l_pgfgo_goban_to_x_int}{\l_pgfgo_goban_to_y_int}}{
                                               \pgfpoint{\l_pgfgo_goban_border_sep_dim}{\l_pgfgo_goban_border_sep_dim}}
                               }



                               \bool_if:nTF {\int_compare_p:nNn{\l_pgfgo_goban_from_x_int}={1} &&
                                                                                       \int_compare_p:nNn{\l_pgfgo_goban_to_y_int}={#3}}
                                       {\pgfsetcornersarced{\pgfpoint{\l_pgfgo_goban_border_rounded_corners_dim}{\l_pgfgo_goban_border_rounded_corners_dim}}}
                                       {\pgfsetcornersarced{\pgfpoint{\l_pgfgo_goban_border_inner_rounded_corners_dim}{\l_pgfgo_goban_border_inner_rounded_corners_dim}}}

                               \pgfpathlineto{
                                       \pgfpointadd{
                                               \pgfpointxy{\l_pgfgo_goban_from_x_int}{\l_pgfgo_goban_to_y_int}}{
                                               \pgfpoint{-\l_pgfgo_goban_border_sep_dim}{\l_pgfgo_goban_border_sep_dim}}
                               }

                               \bool_if:nTF {\int_compare_p:nNn{\l_pgfgo_goban_from_x_int}={1} &&
                                                                                       \int_compare_p:nNn{\l_pgfgo_goban_from_y_int}={1}}
                                       {\pgfsetcornersarced{\pgfpoint{\l_pgfgo_goban_border_rounded_corners_dim}{\l_pgfgo_goban_border_rounded_corners_dim}}}
                                       {\pgfsetcornersarced{\pgfpoint{\l_pgfgo_goban_border_inner_rounded_corners_dim}{\l_pgfgo_goban_border_inner_rounded_corners_dim}}}

                               \pgfpathclose

                               \pgfusepath{\bool_if:NT\l_pgfgo_goban_border_line_bool{stroke}, \bool_if:NT\l_pgfgo_goban_border_fill_bool{fill}}
                       \endpgfscope
               }
               \endpgfonlayer


               %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
               %----------------------GRID------------------------%
               %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%


               \pgfonlayer{pgfgo_layer_goban_grid}
               \pgfscope
               \bool_if:NT\l_pgfgo_goban_partial_bool{
                       \pgfpathrectanglecorners
                               {\pgfpointxy{\int_use:N\l_pgfgo_goban_from_x_int-0.5}{\int_use:N\l_pgfgo_goban_from_y_int-0.5}}
                               {\pgfpointxy{\int_use:N\l_pgfgo_goban_to_x_int+0.5}{\int_use:N\l_pgfgo_goban_to_y_int+0.5}}

                       \pgfusepath{clip}
               }

               \bool_if:NT\l_pgfgo_goban_grid_bool{
                       \pgfscope
                       \pgfsetstrokecolor{\l_pgfgo_goban_grid_color_tl}
                       \pgfsetstrokeopacity{\l_pgfgo_goban_grid_opacity_tl}
                       \pgfsetlinewidth{\l_pgfgo_goban_grid_line_width_dim}
                       \pgfsetroundcap

                       \pgfpathgrid[step = \pgfpointxy{1}{1}] {\pgfpointxy{1}{1}}{\pgfpointxy{#2}{#3}}

                       \pgfusepath{stroke}
                       \endpgfscope
               }
               \endpgfscope
               \endpgfonlayer

               %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
               %----------------------LABELS----------------------%
               %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

               \int_log:N\l_pgfgo_goban_from_x_int
               \int_log:N\l_pgfgo_goban_from_y_int
               \int_log:N\l_pgfgo_goban_to_x_int
               \int_log:N\l_pgfgo_goban_to_y_int


               \pgfonlayer{pgfgo_layer_goban_labels}
                       \pgfscope
                               \pgfsetcolor{\l_pgfgo_goban_labels_color_tl}

                               \bool_if:NT\l_pgfgo_goban_labels_pos_north_bool{
                                       \foreach \x in {\l_pgfgo_goban_from_x_int,...,\l_pgfgo_goban_to_x_int}{
                                               \int_set:Nx\l_pgfgo_goban_labels_current_x_int{\x}
                                               \bool_if:NF\l_pgfgo_use_i_bool{
                                                       \int_compare:nNnT{\l_pgfgo_goban_labels_current_x_int}>{8}{
                                                               \int_incr:N\l_pgfgo_goban_labels_current_x_int
                                               }}

                                               \pgftext[at = \pgfpointadd
                                                       {\pgfpointxy{\x}{\l_pgfgo_goban_to_y_int}}
                                                       {\pgfpoint{0}{\l_pgfgo_goban_labels_sep_dim + \l_pgfgo_players_stone_radius_dim + 0.5em}}
                                               ]       {{
                                                               \sffamily\int_to_Alph:n{\l_pgfgo_goban_labels_current_x_int}
                                                       }}}
                               }



                               \bool_if:NT\l_pgfgo_goban_labels_pos_east_bool{
                                       \int_step_variable:nnNn {\l_pgfgo_goban_from_y_int} {\l_pgfgo_goban_to_y_int}\variable
                                       {
                                               \pgftext[at = \pgfpointadd{
                                                       \pgfpointxy{\l_pgfgo_goban_to_x_int}{\variable}}{
                                                       \pgfpoint{\l_pgfgo_goban_labels_sep_dim+\l_pgfgo_players_stone_radius_dim+0.5em}{0}}
                                               ]       {{
                                                               \sffamily\variable
                                               }}
                                       }
                               }






                               \bool_if:NT\l_pgfgo_goban_labels_pos_south_bool{
                                       \foreach \x in {\l_pgfgo_goban_from_x_int,...,\l_pgfgo_goban_to_x_int}{
                                               \int_set:Nx\l_pgfgo_goban_labels_current_x_int{\x}
                                               \bool_if:NF\l_pgfgo_use_i_bool{
                                                       \int_compare:nNnT{\l_pgfgo_goban_labels_current_x_int}>{8}{
                                                               \int_incr:N\l_pgfgo_goban_labels_current_x_int
                                               }}

                                               \pgftext[at = \pgfpointadd{
                                                       \pgfpointxy{\x}{\l_pgfgo_goban_from_y_int}}{
                                                       \pgfpoint{0}{-\l_pgfgo_goban_labels_sep_dim-\l_pgfgo_players_stone_radius_dim-0.5em}}
                                               ]       {{
                                                               \sffamily\int_to_Alph:n{\l_pgfgo_goban_labels_current_x_int}
                                                       }}}
                               }




                               \bool_if:NT\l_pgfgo_goban_labels_pos_west_bool{
                                       \int_step_variable:nnNn {\l_pgfgo_goban_from_y_int} {\l_pgfgo_goban_to_y_int} \variable {
                                               \pgftext[at = \pgfpointadd{
                                                       \pgfpointxy{\l_pgfgo_goban_from_x_int}{\variable}}{
                                                       \pgfpoint{-\l_pgfgo_goban_labels_sep_dim-\l_pgfgo_players_stone_radius_dim-0.5em}{0}}
                                               ]       {{
                                                               \sffamily\variable
                                               }}
                                       }
                               }
                       \endpgfscope
               \endpgfonlayer



               %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
               %----------------------RESUME----------------------%
               %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

               \bool_if:NT\l_pgfgo_goban_resume_bool{
                       \seq_map_inline:Nn \l_pgfgo_goban_elements_stack_seq {##1}}
       }



       \cs_new:Npn\__end_pgfgo_goban: {
               \endtikzpicture
               \group_end:
               \int_set:Nn\l_pgfgo_move_from_int{1}
       }



%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%------------------------------------------LATEX------------------------------------------------%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%


       \NewDocumentEnvironment{goban}{O{}}{
               \keys_set:nn {pgfgo / goban} {#1}

               \__pgfgo_goban:nVV{}{\l_pgfgo_goban_to_x_int}{\l_pgfgo_goban_to_y_int}
               }{\__end_pgfgo_goban:}



\ExplSyntaxOff