]> git.ipfire.org Git - thirdparty/kea.git/commitdiff
[#32,!23] dhcp6 now parses "config-control" element
authorThomas Markwalder <tmark@isc.org>
Mon, 1 Oct 2018 12:55:13 +0000 (08:55 -0400)
committerThomas Markwalder <tmark@isc.org>
Fri, 5 Oct 2018 13:17:50 +0000 (09:17 -0400)
13 files changed:
src/bin/dhcp6/dhcp6_lexer.cc
src/bin/dhcp6/dhcp6_lexer.ll
src/bin/dhcp6/dhcp6_parser.cc
src/bin/dhcp6/dhcp6_parser.h
src/bin/dhcp6/dhcp6_parser.yy
src/bin/dhcp6/json_config_parser.cc
src/bin/dhcp6/location.hh
src/bin/dhcp6/parser_context.cc
src/bin/dhcp6/parser_context.h
src/bin/dhcp6/position.hh
src/bin/dhcp6/stack.hh
src/bin/dhcp6/tests/config_parser_unittest.cc
src/bin/dhcp6/tests/get_config_unittest.cc

index d10c674841f39722b88a2921eb3553f4bcaad3b7..2248405a949dea2a365b12aeb5f70b75a5813347 100644 (file)
@@ -1,6 +1,6 @@
-#line 1 "dhcp6_lexer.cc"
+#line 2 "dhcp6_lexer.cc"
 
-#line 3 "dhcp6_lexer.cc"
+#line 4 "dhcp6_lexer.cc"
 
 #define  YY_INT_ALIGNED short int
 
@@ -691,8 +691,8 @@ static void yynoreturn yy_fatal_error ( const char* msg  );
 /* %% [3.0] code to copy yytext_ptr to yytext[] goes here, if %array \ */\
        (yy_c_buf_p) = yy_cp;
 /* %% [4.0] data tables for the DFA and the user's section 1 definitions go here */
-#define YY_NUM_RULES 175
-#define YY_END_OF_BUFFER 176
+#define YY_NUM_RULES 177
+#define YY_END_OF_BUFFER 178
 /* This struct is not used in this scanner,
    but its presence is necessary. */
 struct yy_trans_info
@@ -700,164 +700,167 @@ struct yy_trans_info
        flex_int32_t yy_verify;
        flex_int32_t yy_nxt;
        };
-static const flex_int16_t yy_accept[1420] =
+static const flex_int16_t yy_accept[1442] =
     {   0,
-      168,  168,    0,    0,    0,    0,    0,    0,    0,    0,
-      176,  174,   10,   11,  174,    1,  168,  165,  168,  168,
-      174,  167,  166,  174,  174,  174,  174,  174,  161,  162,
-      174,  174,  174,  163,  164,    5,    5,    5,  174,  174,
-      174,   10,   11,    0,    0,  157,    0,    0,    0,    0,
+      170,  170,    0,    0,    0,    0,    0,    0,    0,    0,
+      178,  176,   10,   11,  176,    1,  170,  167,  170,  170,
+      176,  169,  168,  176,  176,  176,  176,  176,  163,  164,
+      176,  176,  176,  165,  166,    5,    5,    5,  176,  176,
+      176,   10,   11,    0,    0,  159,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,    1,  168,
-      168,    0,  167,  168,    3,    2,    6,    0,  168,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,    1,  170,
+      170,    0,  169,  170,    3,    2,    6,    0,  170,    0,
         0,    0,    0,    0,    0,    4,    0,    0,    9,    0,
 
-      158,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,  160,    0,    0,    0,
+      160,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,  162,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    2,    0,    0,    0,
-        0,    0,    0,    0,    8,    0,    0,    0,    0,  136,
-        0,    0,  137,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    8,    0,    0,    0,    0,  138,
+        0,    0,  139,    0,    0,    0,    0,    0,    0,    0,
 
-        0,  159,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,  161,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,   92,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,   94,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,  173,  171,
-        0,  170,  169,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,  175,  173,
+        0,  172,  171,    0,    0,    0,    0,    0,    0,    0,
 
-      135,    0,    0,   29,    0,   28,    0,    0,   98,    0,
-        0,    0,    0,    0,    0,    0,   52,    0,    0,    0,
+      137,    0,    0,   29,    0,   28,    0,    0,  100,    0,
+        0,    0,    0,    0,    0,    0,    0,   54,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,   96,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,   98,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,  172,  169,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,  174,  171,    0,
 
-        0,    0,    0,    0,    0,    0,   30,    0,    0,   32,
-        0,    0,    0,    0,    0,   99,    0,    0,    0,    0,
-        0,   77,    0,    0,    0,    0,    0,    0,  120,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,   55,
+        0,    0,    0,    0,    0,    0,    0,   30,    0,    0,
+       32,    0,    0,    0,    0,    0,  101,    0,    0,    0,
+        0,    0,    0,   79,    0,    0,    0,    0,    0,    0,
+      122,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,   57,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-       76,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,   86,    0,   56,    0,    0,    0,    0,
+        0,    0,   78,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,   88,    0,   58,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
 
-        0,    0,    0,  115,  140,   48,    0,   53,    0,    0,
-        0,    0,    0,    0,  154,   38,    0,   35,    0,   34,
-        0,    0,    0,  128,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,  117,  142,   50,    0,   55,
+        0,    0,    0,    0,    0,    0,  156,   38,    0,   35,
+        0,   34,    0,    0,    0,  130,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,  107,    0,    0,    0,    0,    0,    0,    0,
-      139,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,   50,    0,    0,   33,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,   79,
+        0,    0,    0,    0,    0,  109,    0,    0,    0,    0,
+        0,    0,    0,  141,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,   52,
+        0,    0,   33,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,   81,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,  131,    0,    0,    0,    0,    0,
+
+        0,    0,    0,    0,    0,    0,    0,  126,    0,    0,
+        0,    0,    0,    0,    7,   36,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,  129,    0,    0,    0,    0,    0,    0,    0,    0,
-
-        0,    0,    0,    0,  124,    0,    0,    0,    0,    0,
-        0,    7,   36,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,  109,    0,
-        0,    0,    0,    0,    0,  106,    0,    0,    0,    0,
-        0,    0,    0,    0,   81,    0,    0,    0,    0,    0,
+        0,    0,  111,    0,    0,    0,    0,    0,    0,  108,
+        0,    0,    0,    0,    0,    0,    0,    0,   83,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,   89,    0,    0,
 
-        0,    0,    0,    0,    0,    0,  103,    0,    0,    0,
-        0,    0,   88,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,  123,    0,
+        0,   91,    0,    0,    0,    0,    0,    0,    0,    0,
+      105,    0,    0,    0,    0,    0,   90,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,  125,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,  133,  104,    0,    0,    0,    0,
-      108,   49,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,   57,    0,    0,    0,    0,    0,    0,    0,
+      135,  106,    0,    0,    0,    0,  110,   51,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,   59,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-       72,    0,    0,    0,    0,    0,    0,  155,    0,    0,
+        0,    0,    0,    0,    0,    0,   74,    0,    0,    0,
 
+        0,    0,    0,  157,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,   95,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,  122,    0,    0,    0,    0,    0,    0,
-       60,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,   54,   80,    0,
-        0,    0,  119,    0,    0,    0,   47,    0,    0,    0,
+       97,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,  124,    0,    0,    0,    0,    0,    0,   62,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,  111,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,   56,   82,    0,    0,    0,
+      121,    0,    0,    0,   49,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,  113,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,  153,    0,    0,    0,    0,
 
+        0,    0,    0,    0,    0,  155,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,   90,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,   92,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,   41,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,   16,
-        0,  134,   14,    0,    0,    0,    0,    0,    0,    0,
+        0,  136,   14,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,  127,  112,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,  125,  110,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,  121,  138,
-        0,   40,    0,  130,    0,    0,    0,    0,    0,    0,
 
-        0,    0,   20,    0,    0,    0,   74,    0,    0,    0,
-        0,  132,   51,    0,   82,    0,    0,    0,    0,    0,
+      123,  140,    0,   40,    0,  132,    0,    0,    0,    0,
+        0,    0,    0,    0,   20,    0,    0,    0,   76,    0,
+        0,    0,    0,  134,   53,    0,   84,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,   78,    0,    0,    0,    0,    0,    0,    0,
-        0,  127,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,  100,    0,
-        0,    0,    0,    0,   75,   97,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,   69,    0,    0,
-        0,    0,    0,    0,   17,   15,    0,  152,  151,    0,
-
-       64,    0,    0,    0,    0,    0,   31,    0,  114,    0,
-        0,    0,    0,    0,    0,  149,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,   91,    0,  118,
-       43,    0,   58,    0,    0,    0,    0,   19,    0,    0,
-        0,    0,    0,    0,   93,   70,    0,    0,  126,    0,
-        0,    0,    0,    0,  117,    0,    0,    0,    0,   87,
-        0,  156,    0,    0,    0,    0,    0,    0,    0,   85,
-        0,  141,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,   80,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,  129,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,  102,    0,    0,    0,    0,    0,   77,   99,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+
+        0,   71,    0,    0,    0,    0,    0,    0,   17,   15,
+        0,  154,  153,    0,   66,    0,    0,    0,    0,    0,
+       31,    0,  116,    0,    0,    0,    0,    0,    0,    0,
+        0,  151,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,   93,    0,  120,   43,    0,   60,    0,
+        0,    0,    0,   19,    0,    0,    0,    0,    0,    0,
+       95,   72,    0,    0,  128,    0,    0,    0,    0,    0,
+      119,    0,    0,    0,    0,   89,    0,  158,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,   87,    0,  143,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
 
-       42,    0,   63,    0,    0,    0,    0,  112,    0,   65,
-      150,    0,   12,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,   42,    0,
+       65,    0,    0,    0,    0,  114,   47,    0,    0,   67,
+      152,    0,   12,    0,    0,    0,    0,    0,    0,    0,
         0,    0,   45,    0,    0,   44,   18,    0,    0,    0,
-        0,  105,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,   68,    0,    0,   59,    0,
-       83,    0,    0,    0,    0,    0,  131,    0,    0,    0,
-       46,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,   62,    0,    0,   73,    0,   37,
-        0,    0,    0,    0,    0,   25,    0,    0,    0,    0,
-        0,    0,  147,    0,  116,    0,    0,    0,    0,    0,
-
-        0,    0,    0,    0,   94,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,   26,   39,    0,    0,    0,    0,
-        0,   13,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,  146,    0,    0,   22,
-       67,    0,    0,    0,    0,    0,    0,   21,    0,   84,
-        0,    0,  145,    0,    0,   66,    0,    0,   61,    0,
-       24,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,  107,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,   70,    0,    0,    0,   61,
+        0,   85,    0,    0,    0,    0,    0,  133,    0,    0,
+        0,   46,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,   64,    0,    0,   75,    0,
+
+       37,    0,   48,    0,    0,    0,    0,   25,    0,    0,
+        0,    0,    0,    0,  149,    0,  118,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,   96,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,   26,   39,    0,    0,
+        0,    0,    0,   13,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,  148,    0,
+        0,   22,   69,    0,    0,    0,    0,    0,    0,   21,
+        0,   86,    0,    0,  147,    0,    0,   68,    0,    0,
+       63,    0,   24,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,   23,    0,
-      101,  113,    0,    0,    0,    0,    0,    0,  143,  148,
 
-       71,    0,    0,    0,    0,  142,    0,    0,   27,    0,
-        0,    0,    0,    0,  102,    0,    0,  144,    0
+        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+       23,    0,  103,  115,    0,    0,    0,    0,    0,    0,
+      145,  150,   73,    0,    0,    0,    0,  144,    0,    0,
+       27,    0,    0,    0,    0,    0,  104,    0,    0,  146,
+        0
     } ;
 
 static const YY_CHAR yy_ec[256] =
@@ -904,347 +907,351 @@ static const YY_CHAR yy_meta[72] =
         3
     } ;
 
-static const flex_int16_t yy_base[1432] =
+static const flex_int16_t yy_base[1454] =
     {   0,
         0,   70,   19,   29,   41,   49,   52,   58,   87,   95,
-     1784, 1785,   32, 1780,  141,    0,  201, 1785,  206,   88,
-       11,  213, 1785, 1762,  114,   25,    2,    6, 1785, 1785,
-       73,   11,   17, 1785, 1785, 1785,  104, 1768, 1723,    0,
-     1760,  107, 1775,  217,  241, 1785,  185, 1719, 1725, 1745,
+     1805, 1806,   32, 1801,  141,    0,  201, 1806,  206,   88,
+       11,  213, 1806, 1783,  114,   25,    2,    6, 1806, 1806,
+       73,   11,   17, 1806, 1806, 1806,  104, 1789, 1744,    0,
+     1781,  107, 1796,  217,  241, 1806,  185, 1740, 1746, 1766,
        93,   58,  190,   91,  211,  200,   14,  267,  213,  175,
-      269,   64,  231, 1726,  187,   75, 1725,  274,  188,  290,
-      278,  297, 1708,  195,  302,  316,  316, 1727,    0,  355,
-      360,  372,  377,  380, 1785,    0, 1785,  267,  295,  296,
-      327,  283,  361,  368,  293, 1785, 1724, 1763, 1785,  359,
-
-     1785,  393,  341, 1711, 1721, 1760,  369,  220,  249, 1715,
-      364,  372,  373,  380,  385, 1758,    0,  444,  375, 1702,
-     1710,  364, 1706, 1695, 1696,  372, 1712, 1695, 1704,  399,
-      200,  371, 1698,  389, 1686, 1742,  416, 1689, 1740, 1682,
-     1705, 1702, 1702, 1696,  369, 1689, 1682, 1687, 1681,  409,
-     1692, 1685, 1676, 1675, 1689,  387, 1725, 1674,  414, 1686,
-     1689, 1673,  441, 1674,  416, 1686, 1683, 1684, 1682,  394,
-     1664, 1669, 1665, 1657, 1674, 1666,    0,  421,  385,  436,
-      437,  449,  454, 1665, 1785,    0,  461, 1656, 1659, 1785,
-      446,  464, 1785, 1711, 1666,  470, 1709,  472, 1708,  476,
-
-     1707, 1785,  520, 1706,  486, 1667, 1662, 1661, 1652,  291,
-     1701, 1695, 1661, 1640, 1648, 1654, 1642, 1656, 1652, 1653,
-     1653, 1648, 1640, 1642, 1626, 1630, 1643, 1643, 1635, 1625,
-     1628, 1642, 1785, 1628, 1636, 1639, 1620, 1619, 1669, 1618,
-     1628, 1666,  452, 1627, 1615, 1626, 1662,  484, 1666, 1603,
-     1618,    9, 1608, 1624, 1605, 1607, 1603, 1609, 1600, 1599,
-     1612, 1605, 1607, 1611, 1610, 1604,   80, 1611, 1606, 1598,
-     1588, 1603, 1598, 1602, 1583, 1599, 1585, 1591, 1598, 1586,
-      504, 1579, 1593, 1592, 1595, 1577, 1585,  491, 1785, 1785,
-      499, 1785, 1785, 1572,    0,  472, 1574,  507,  500, 1628,
-
-     1785, 1581,  493, 1785, 1626, 1785, 1620,  556, 1785,  488,
-     1562, 1572, 1622, 1579, 1578,  468, 1785, 1576, 1618, 1573,
-     1570, 1571,  303, 1575, 1613, 1563, 1558, 1555, 1551, 1553,
-     1602, 1561, 1550, 1599, 1547,  549, 1560, 1560, 1543, 1544,
-     1557, 1544, 1554, 1549, 1556, 1551, 1536,  477, 1545, 1548,
-     1543, 1539, 1587,  500,  524, 1785, 1581, 1533, 1532, 1525,
-     1527, 1531, 1520, 1527, 1532,  513, 1577, 1532,  510, 1529,
-     1533, 1531, 1520, 1520, 1532,  526, 1507, 1508, 1529,  536,
-     1511, 1508, 1522, 1521, 1507, 1519, 1518, 1517, 1516,  206,
-     1557, 1556, 1555, 1499,  580, 1512, 1785, 1785, 1511,    0,
-
-      527, 1499, 1550, 1549, 1507, 1547, 1785, 1495, 1545, 1785,
-      560,  606,  561, 1544, 1486, 1785, 1491, 1501, 1500, 1487,
-     1486, 1785, 1488, 1485, 1497, 1493, 1481, 1483, 1785, 1489,
-     1474, 1476, 1487, 1485, 1480,  587, 1487, 1469, 1518, 1785,
-     1467, 1483, 1515, 1519, 1477, 1471, 1473, 1474, 1476, 1508,
-     1461, 1456, 1455, 1457, 1450, 1465, 1443, 1450, 1455, 1503,
-     1785, 1450, 1446, 1500, 1453, 1447, 1454, 1439, 1449, 1452,
-     1441, 1440, 1435, 1785, 1490, 1785, 1434, 1433, 1426, 1443,
-     1480, 1427, 1432, 1441, 1435, 1429, 1438,  588, 1473, 1437,
-     1420, 1420, 1415, 1411, 1417, 1416, 1424, 1428, 1411, 1467,
-
-     1409, 1423, 1412, 1785, 1785, 1785, 1412, 1785, 1422, 1456,
-     1418,    0, 1459, 1409, 1785, 1785, 1406, 1785, 1412, 1785,
-      566,  574,  602, 1785, 1450, 1397, 1396, 1395, 1402, 1395,
-     1407, 1406, 1390, 1405, 1435, 1402, 1438, 1384, 1386, 1398,
-     1398, 1397, 1785, 1382, 1379, 1393, 1385, 1391, 1382, 1390,
-     1785, 1375, 1386, 1390, 1372, 1386,  504, 1368, 1362, 1367,
-     1364, 1379, 1380, 1377, 1418, 1375, 1785, 1361, 1363, 1785,
-     1371, 1408, 1407,  567, 1370, 1353, 1354, 1359, 1350, 1785,
-     1364, 1350,  627, 1342, 1363, 1360, 1352, 1395, 1349, 1356,
-     1392, 1785, 1340, 1338, 1352, 1336, 1350, 1353, 1385, 1384,
-
-     1383, 1330, 1381, 1380, 1785,  547, 1342, 1342, 1340, 1329,
-     1331, 1785, 1785, 1374, 1322, 1377,  574,  591,  563, 1336,
-     1375, 1369, 1368, 1367, 1321, 1311, 1364, 1326, 1316, 1361,
-     1324, 1306, 1314, 1316, 1320, 1355, 1359, 1316, 1315, 1316,
-     1309, 1298, 1311, 1314, 1309, 1304, 1309, 1306, 1305, 1301,
-     1307, 1302, 1343, 1342, 1286, 1282,  585, 1339, 1785, 1338,
-     1287, 1279, 1330, 1293, 1280, 1785, 1280, 1289, 1288, 1288,
-     1272, 1327, 1270, 1283, 1785, 1275, 1267, 1276, 1269, 1280,
-     1257, 1261, 1312, 1276, 1258, 1256, 1267, 1307, 1306, 1305,
-     1252, 1268,  300,  582, 1245, 1255,  555, 1785, 1305, 1251,
-
-     1261, 1261, 1250, 1254, 1261, 1298, 1785, 1292,  580, 1245,
-     1253, 1245, 1785, 1236, 1239, 1235, 1252, 1247, 1235, 1246,
-     1230, 1232, 1284, 1230, 1244, 1225, 1275,    4, 1785,   78,
-       79,  186,  322,  384,  638,  450,  466,  504,  526,  514,
-      590,  578,  573,  584, 1785, 1785,  600,  599,  604,  599,
-     1785, 1785,  613,  600,  598,  616,  603,  603,  652,  604,
-      660,  661, 1785,  608,  622,  622,  665,  615,  617,  611,
-      670,  625,  615,  616,  612,  622,  626,  637,  621,  639,
-      634,  636,  629,  631,  643,  633,  686,  645,  650,  627,
-     1785,  652,  642,  687,  636,  651,  651, 1785,  671,  679,
-
-      659,  649,  663,  656,  651,  652,  648,  657,  652,  703,
-      709,  658, 1785,  670,  655,  671,  661,  673,  667,  712,
-      680,  664,  665, 1785,  682,  685,  669,  671,  727,  672,
-     1785,  689,  692,  672,  691,  729,  689,  685,  680,  698,
-      697,  683,  698,  690,  686,  704,  689, 1785, 1785,  697,
-      742,  697, 1785,  705,  700,  751, 1785,  702,  707,  749,
-      703,  704,  716,  710,  714,  712,  710,  721,  764,  710,
-      766,  767,  713, 1785,  712,  720,  718,  723,  735,  719,
-      733,  734,  735,  751,  756,  730,  740,  726,  734,  739,
-      746,  787,  788,  737,  741, 1785,  736,  754,  751,  789,
-
-      740,  758,  759,  745,  753,  762,  742,  757,  764,  804,
-      805, 1785,  762,  809,  810,  763,  773,  775,  759,  760,
-      767,  776,  819,  768,  767,  784,  823,  775,  779,  777,
-      775,  828,  829,  781,  831,  827,  787, 1785,  792,  785,
-      776,  795,  789,  784,  794,  791,  796,  792,  804, 1785,
-      788, 1785, 1785,  789,  787,  806,  807,  804,  789,  811,
-      793,  798,  805,  838,  829,  801,  860,  805,  820,  812,
-      816, 1785, 1785,  826,  824,  810,  811,  869,  824,  829,
-      816,  827,  819,  825,  821,  839,  840,  841, 1785, 1785,
-      840, 1785,  842, 1785,  827,  828,  847,  838,  888,  843,
-
-      885,  851, 1785,  843,  835,  894, 1785,  895,  844,  851,
-      893, 1785, 1785,  853, 1785,  844,  844,  847,  861,  866,
-      849,  860,  907,  866,  867,  868,  906,  864,  913,  914,
-      863,  916,  917,  859,  919,  880,  864,  876,  866,  896,
-      925,  885, 1785,  927,  876,  872,  888,  893,  881,  933,
-      892, 1785,  894,  893,  895,  888,  897,  898,  895,  885,
-      888,  888,  945,  894,  947,  948,  893,  950, 1785,  888,
-      904,  897,  955,  910, 1785, 1785,  906,  916,  901,  917,
-      905,  964,  965,  911,  921,  968,  928, 1785,  920,  920,
-      922,  924,  975,  920, 1785, 1785,  922, 1785, 1785,  936,
-
-     1785,  930,  980,  931,  982,  964, 1785,  942, 1785,  929,
-      928,  931,  931,  932,  990, 1785,  935,  992,  947,  938,
-      953,  953,  956,  956,  953,  995,  959, 1785,  951, 1785,
-     1785,  961, 1785,  962,  963,  961, 1003, 1785,  954,  954,
-      960,  959,  971,  971, 1785, 1785, 1010,  959, 1785,  976,
-      961,  961,  963,  969, 1785, 1022,  975, 1024,  987, 1785,
-      984, 1785, 1003, 1023, 1029,  973, 1031, 1032,  987, 1785,
-     1034, 1785,  974, 1031,  996,  992, 1034,  984,  989,  987,
-     1044, 1002, 1046, 1047, 1010,  999,  993, 1009, 1052,  996,
-     1014,  999, 1014,  998, 1054, 1055, 1056, 1005, 1058, 1023,
-
-     1785, 1009, 1785, 1020, 1067, 1039, 1026, 1785, 1070, 1785,
-     1785, 1019, 1785, 1072, 1020, 1069, 1014, 1019, 1078, 1028,
-     1038, 1039, 1785, 1082, 1037, 1785, 1785, 1028, 1043, 1031,
-     1046, 1785, 1083, 1051, 1044, 1045, 1054, 1036, 1042, 1044,
-     1097, 1058, 1057, 1101, 1052, 1785, 1103, 1050, 1785, 1054,
-     1785, 1057, 1052, 1051, 1109, 1064, 1785, 1106, 1059, 1056,
-     1785, 1070, 1073, 1116, 1071, 1118, 1061, 1063, 1071, 1061,
-     1077, 1078, 1072, 1088, 1785, 1078, 1128, 1785, 1124, 1785,
-     1089, 1126, 1090, 1081, 1088, 1785, 1085, 1090, 1088, 1138,
-     1139, 1084, 1785, 1099, 1785, 1089, 1101, 1102, 1145, 1089,
-
-     1097, 1091, 1099, 1112, 1785, 1111, 1101, 1100, 1103, 1115,
-     1106, 1115, 1117, 1121, 1785, 1785, 1160, 1105, 1121, 1163,
-     1164, 1785, 1160, 1124, 1121, 1126, 1113, 1108, 1171, 1130,
-     1173, 1132, 1133, 1176, 1135, 1138, 1785, 1179, 1142, 1785,
-     1785, 1124, 1182, 1131, 1184, 1129, 1146, 1785, 1132, 1785,
-     1132, 1134, 1785, 1139, 1149, 1785, 1135, 1147, 1785, 1143,
-     1785, 1153, 1147, 1151, 1142, 1194, 1143, 1151, 1160, 1153,
-     1148, 1149, 1164, 1155, 1162, 1149, 1164, 1169, 1212, 1171,
-     1214, 1215, 1160, 1176, 1167, 1181, 1177, 1170, 1785, 1222,
-     1785, 1785, 1223, 1224, 1181, 1180, 1181, 1171, 1785, 1785,
-
-     1785, 1229, 1173, 1189, 1232, 1785, 1228, 1179, 1785, 1178,
-     1180, 1191, 1238, 1189, 1785, 1198, 1241, 1785, 1785, 1247,
-     1252, 1257, 1262, 1267, 1272, 1277, 1280, 1254, 1259, 1261,
-     1274
+      269,   64,  231, 1747,  187,   75, 1746,  274,  188,  290,
+      278,  297, 1729,  195,  302,  316,  316, 1748,    0,  355,
+      360,  372,  377,  380, 1806,    0, 1806,  267,  295,  296,
+      327,  283,  361,  368,  293, 1806, 1745, 1784, 1806,  359,
+
+     1806,  393,  341, 1732, 1742, 1781,  369,  220,  249, 1736,
+      364,  372,  373,  380,  385, 1779,    0,  444,  375, 1723,
+     1731,  364, 1727, 1716, 1717,  372, 1733, 1716, 1725,  399,
+      200,  371, 1719,  389, 1707, 1763,  416, 1710, 1761, 1703,
+     1726, 1723, 1723, 1717,  369, 1710, 1703, 1708, 1702,  409,
+     1713, 1706, 1697, 1696, 1710,  387, 1746, 1695,  414, 1707,
+     1710, 1694,  441, 1695,  416, 1707, 1704, 1705, 1703,  394,
+     1685, 1690, 1686, 1678, 1695, 1687,    0,  421,  385,  436,
+      437,  449,  454, 1686, 1806,    0,  461, 1677, 1680, 1806,
+      446,  464, 1806, 1732, 1687,  470, 1730,  472, 1729,  476,
+
+     1728, 1806,  520, 1727,  486, 1688, 1683, 1682, 1673,  460,
+     1722, 1716, 1682, 1661, 1669, 1675, 1663, 1677, 1673, 1674,
+     1674, 1669, 1661, 1663, 1647, 1651, 1664, 1664, 1656, 1646,
+     1649, 1663, 1806, 1649, 1657, 1660, 1641, 1640, 1690, 1639,
+     1649, 1687,  508, 1648, 1636, 1647, 1683,  489, 1687, 1624,
+     1639,    9, 1629, 1645, 1626, 1628, 1624, 1630, 1621, 1620,
+     1633, 1626, 1628, 1632, 1631, 1625,   80, 1632, 1627, 1619,
+     1609, 1624, 1619, 1623, 1604, 1620, 1606, 1612, 1619, 1607,
+      348, 1600, 1614, 1613, 1616, 1598, 1606,  490, 1806, 1806,
+      491, 1806, 1806, 1593,    0,  472, 1595,  532,  501, 1649,
+
+     1806, 1602,  489, 1806, 1647, 1806, 1641,  560, 1806,  485,
+     1583, 1593, 1643, 1600, 1595, 1598,  466, 1806, 1596, 1638,
+     1593, 1590, 1591,  303, 1595, 1633, 1583, 1578, 1575, 1571,
+     1573, 1622, 1581, 1570, 1619, 1567,  566, 1580, 1580, 1563,
+     1564, 1577, 1564, 1574, 1569, 1576, 1571, 1556,  452, 1565,
+     1568, 1563, 1559, 1607,  502,  496, 1806, 1601, 1553, 1552,
+     1545, 1547, 1551, 1540, 1547, 1552,  525, 1597, 1552,  300,
+     1549, 1553, 1551, 1540, 1540, 1552,  471, 1527, 1528, 1549,
+      506, 1531, 1528, 1542, 1541, 1527, 1539, 1538, 1537, 1536,
+      206, 1577, 1576, 1575, 1519,  549, 1532, 1806, 1806, 1531,
+
+        0,  518, 1519, 1570, 1569, 1527, 1567, 1806, 1515, 1565,
+     1806,  558,  615,  529, 1564, 1506, 1806, 1511, 1517, 1520,
+     1519, 1506, 1505, 1806, 1507, 1504, 1516, 1512, 1500, 1502,
+     1806, 1508, 1493, 1495, 1506, 1504, 1499,  583, 1506, 1488,
+     1537, 1806, 1486, 1502, 1534, 1538, 1496, 1490, 1492, 1493,
+     1495, 1527, 1480, 1475, 1474, 1476, 1469, 1484, 1462, 1469,
+     1474, 1522, 1806, 1469, 1465, 1519, 1472, 1466, 1473, 1458,
+     1468, 1471, 1460, 1459, 1454, 1806, 1509, 1806, 1453, 1452,
+     1445, 1462, 1499, 1446, 1451, 1460, 1454, 1448, 1457,  586,
+     1492, 1456, 1439, 1439, 1434, 1430, 1436, 1435, 1443, 1447,
+
+     1430, 1486, 1428, 1442, 1431, 1806, 1806, 1806, 1431, 1806,
+     1441, 1475, 1437,    0, 1478, 1428, 1806, 1806, 1425, 1806,
+     1431, 1806,  540,  560,  589, 1806, 1469, 1416, 1467, 1414,
+     1413, 1420, 1413, 1425, 1424, 1408, 1423, 1453, 1420, 1456,
+     1402, 1404, 1416, 1416, 1415, 1806, 1400, 1397, 1411, 1403,
+     1409, 1400, 1408, 1806, 1393, 1404, 1408, 1390, 1404,  532,
+     1386, 1380, 1385, 1382, 1397, 1398, 1395, 1436, 1393, 1806,
+     1379, 1381, 1806, 1389, 1426, 1425,  519, 1388, 1371, 1372,
+     1377, 1368, 1806, 1382, 1368,  605, 1360, 1381, 1378, 1370,
+     1413, 1367, 1374, 1410, 1806, 1358, 1356, 1370, 1354, 1368,
+
+     1371, 1403, 1402, 1401, 1348, 1399, 1398, 1806,  596, 1360,
+     1360, 1358, 1347, 1349, 1806, 1806, 1392, 1340, 1395,  561,
+      574,  551, 1354, 1393,  572, 1387, 1386, 1385, 1339, 1329,
+     1382, 1344, 1334, 1379, 1342, 1324, 1332, 1334, 1338, 1373,
+     1377, 1334, 1333, 1334, 1327, 1316, 1329, 1332, 1327, 1322,
+     1327, 1324, 1323, 1319, 1325, 1320, 1361, 1360, 1304, 1300,
+      577, 1357, 1806, 1356, 1305, 1297, 1348, 1311, 1298, 1806,
+     1298, 1307, 1306, 1306, 1290, 1345, 1288, 1301, 1806, 1293,
+     1285, 1294, 1287, 1298, 1275, 1279, 1330, 1294, 1276, 1274,
+     1285, 1325, 1324, 1323, 1270, 1286,  568,  574, 1263, 1273,
+
+      585, 1806, 1323, 1269, 1279, 1279, 1268, 1272, 1279, 1316,
+     1806, 1310,  609, 1263, 1271, 1263, 1806, 1259, 1272, 1252,
+     1255, 1251, 1268, 1263, 1251, 1262, 1246, 1248,    2,    0,
+       80,   64,  230,  312, 1806,  386,  416,  504,  556,  562,
+      638,  551,  563,  586,  597,  584,  641,  602,  588,  591,
+     1806, 1806,  608,  607,  612,  600, 1806, 1806,  614,  607,
+      605,  624,  609,  610,  659,  612,  668,  669, 1806,  616,
+      630,  630,  673,  623,  625,  619,  677,  632,  622,  623,
+      619,  629,  633,  644,  628,  646,  641,  643,  636,  638,
+      650,  640,  693,  652,  657,  634, 1806,  659,  649,  694,
+
+      643,  658,  658, 1806,  678,  686,  666,  656,  670,  658,
+      653,  665,  660,  661,  657,  666,  661,  712,  718,  667,
+     1806,  679,  664,  680,  670,  682,  676,  721,  689,  674,
+      675, 1806,  692,  695,  678,  680,  736,  681, 1806,  698,
+      701,  681,  700,  738,  698,  694,  689,  707,  706,  692,
+      707,  699,  695,  713,  698, 1806, 1806,  706,  751,  706,
+     1806,  714,  709,  760, 1806,  711,  716,  758,  712,  713,
+      725,  719,  723,  721,  719,  730,  773,  719,  775,  776,
+      722, 1806,  721,  729,  727,  732,  744,  728,  742,  743,
+      744,  760,  765,  739,  749,  735,  736,  756,  745,  750,
+
+      757,  798,  799,  748,  752, 1806,  747,  765,  762,  800,
+      751,  769,  770,  756,  764,  773,  753,  768,  775,  817,
+      818, 1806,  773,  820,  821,  774,  784,  786,  770,  771,
+      778,  787,  830,  779,  778,  795,  834,  786,  790,  788,
+      786,  839,  840,  792,  842,  838,  798, 1806,  803,  796,
+      787,  806,  800,  795,  805,  802,  807,  803,  815, 1806,
+      799, 1806, 1806,  800,  798,  817,  818,  815,  800,  822,
+      804,  809,  816,  849,  840,  812,  871,  816,  818,  835,
+      833,  825,  829, 1806, 1806,  839,  837,  823,  824,  882,
+      837,  842,  829,  840,  832,  838,  834,  852,  854,  855,
+
+     1806, 1806,  853, 1806,  855, 1806,  840,  842,  861,  851,
+      901,  856,  898,  864, 1806,  856,  848,  907, 1806,  908,
+      857,  864,  906, 1806, 1806,  866, 1806,  857,  857,  860,
+      874,  879,  862,  873,  920,  879,  880,  881,  919,  877,
+      926,  927,  876,  929,  930,  872,  932,  893,  877,  889,
+      879,  909,  938,  898, 1806,  940,  889,  904,  891,  887,
+      903,  908,  896,  948,  907, 1806,  909,  908,  910,  903,
+      912,  913,  910,  900,  903,  903,  960,  909,  962,  963,
+      908,  966, 1806,  904,  919,  912,  970,  925, 1806, 1806,
+      921,  931,  916,  934,  920,  979,  980,  926,  937,  984,
+
+      943, 1806,  935,  935,  937,  939,  990,  935, 1806, 1806,
+      937, 1806, 1806,  951, 1806,  945,  995,  946,  997,  979,
+     1806,  957, 1806,  944,  952,  946,  945,  948,  948,  949,
+     1007, 1806,  952, 1009,  964,  955,  970,  970,  973,  973,
+      970, 1012,  976, 1806,  968, 1806, 1806,  978, 1806,  980,
+      981,  978, 1020, 1806,  971,  971,  977,  976,  988,  988,
+     1806, 1806, 1027,  976, 1806,  993,  978,  978,  980,  986,
+     1806, 1039,  992, 1041, 1004, 1806, 1001, 1806, 1020, 1040,
+     1046, 1047, 1006,  992, 1050, 1051, 1006, 1806, 1053, 1806,
+      993, 1050, 1015, 1011, 1053, 1003, 1008, 1006, 1063, 1021,
+
+     1065, 1066, 1029, 1018, 1012, 1028, 1072, 1016, 1033, 1018,
+     1033, 1017, 1073, 1074, 1075, 1024, 1077, 1042, 1806, 1028,
+     1806, 1039, 1086, 1058, 1045, 1806, 1806, 1033, 1090, 1806,
+     1806, 1039, 1806, 1092, 1040, 1089, 1034, 1039, 1098, 1048,
+     1058, 1059, 1806, 1102, 1057, 1806, 1806, 1048, 1063, 1051,
+     1066, 1806, 1103, 1071, 1064, 1065, 1074, 1056, 1062, 1065,
+     1117, 1078, 1078, 1121, 1072, 1806, 1123, 1070, 1125, 1806,
+     1075, 1806, 1078, 1073, 1072, 1130, 1085, 1806, 1127, 1080,
+     1077, 1806, 1091, 1094, 1137, 1092, 1139, 1082, 1084, 1092,
+     1082, 1098, 1099, 1093, 1109, 1806, 1099, 1149, 1806, 1145,
+
+     1806, 1110, 1806, 1147, 1111, 1102, 1109, 1806, 1106, 1111,
+     1109, 1159, 1160, 1105, 1806, 1120, 1806, 1110, 1122, 1123,
+     1166, 1110, 1118, 1112, 1120, 1133, 1806, 1132, 1122, 1121,
+     1124, 1136, 1127, 1136, 1138, 1142, 1806, 1806, 1181, 1126,
+     1142, 1184, 1185, 1806, 1181, 1145, 1142, 1147, 1134, 1129,
+     1192, 1151, 1194, 1153, 1154, 1197, 1156, 1159, 1806, 1200,
+     1163, 1806, 1806, 1145, 1203, 1152, 1205, 1150, 1167, 1806,
+     1153, 1806, 1153, 1155, 1806, 1160, 1170, 1806, 1156, 1168,
+     1806, 1164, 1806, 1174, 1168, 1172, 1163, 1215, 1164, 1172,
+     1181, 1174, 1169, 1170, 1185, 1176, 1183, 1170, 1185, 1190,
+
+     1233, 1192, 1235, 1236, 1181, 1197, 1188, 1202, 1198, 1191,
+     1806, 1243, 1806, 1806, 1244, 1245, 1202, 1201, 1202, 1192,
+     1806, 1806, 1806, 1250, 1194, 1210, 1253, 1806, 1249, 1200,
+     1806, 1199, 1201, 1212, 1259, 1210, 1806, 1219, 1262, 1806,
+     1806, 1268, 1273, 1278, 1283, 1288, 1293, 1298, 1301, 1275,
+     1280, 1282, 1295
     } ;
 
-static const flex_int16_t yy_def[1432] =
+static const flex_int16_t yy_def[1454] =
     {   0,
-     1420, 1420, 1421, 1421, 1420, 1420, 1420, 1420, 1420, 1420,
-     1419, 1419, 1419, 1419, 1419, 1422, 1419, 1419, 1419, 1419,
-     1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419,
-     1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1423,
-     1419, 1419, 1419, 1424,   15, 1419,   45,   45,   45,   45,
-       45,   45,   45,   45,   45,   45,   45, 1425,   45,   45,
+     1442, 1442, 1443, 1443, 1442, 1442, 1442, 1442, 1442, 1442,
+     1441, 1441, 1441, 1441, 1441, 1444, 1441, 1441, 1441, 1441,
+     1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441,
+     1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1445,
+     1441, 1441, 1441, 1446,   15, 1441,   45,   45,   45,   45,
+       45,   45,   45,   45,   45,   45,   45, 1447,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,   45,   45,   45,   45, 1422, 1419,
-     1419, 1419, 1419, 1419, 1419, 1426, 1419, 1419, 1419, 1419,
-     1419, 1419, 1419, 1419, 1419, 1419, 1419, 1423, 1419, 1424,
+       45,   45,   45,   45,   45,   45,   45,   45, 1444, 1441,
+     1441, 1441, 1441, 1441, 1441, 1448, 1441, 1441, 1441, 1441,
+     1441, 1441, 1441, 1441, 1441, 1441, 1441, 1445, 1441, 1446,
 
-     1419, 1419,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,   45, 1427,   45, 1425,   45,   45,
+     1441, 1441,   45,   45,   45,   45,   45,   45,   45,   45,
+       45,   45,   45,   45,   45, 1449,   45, 1447,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,   45,   45, 1426, 1419, 1419, 1419,
-     1419, 1419, 1419, 1419, 1419, 1428,   45,   45,   45, 1419,
-       45,   45, 1419,   45,   45,   45,   45,   45,   45,   45,
+       45,   45,   45,   45,   45,   45, 1448, 1441, 1441, 1441,
+     1441, 1441, 1441, 1441, 1441, 1450,   45,   45,   45, 1441,
+       45,   45, 1441,   45,   45,   45,   45,   45,   45,   45,
 
-     1427, 1419, 1425,   45,   45,   45,   45,   45,   45,   45,
+     1449, 1441, 1447,   45,   45,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45, 1419,   45,   45,   45,   45,   45,   45,   45,
+       45,   45, 1441,   45,   45,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,   45,   45,   45, 1419, 1419, 1419,
-     1419, 1419, 1419, 1419, 1429,   45,   45,   45,   45,   45,
+       45,   45,   45,   45,   45,   45,   45, 1441, 1441, 1441,
+     1441, 1441, 1441, 1441, 1451,   45,   45,   45,   45,   45,
 
-     1419,   45,   45, 1419,   45, 1419,   45, 1425, 1419,   45,
-       45,   45,   45,   45,   45,   45, 1419,   45,   45,   45,
+     1441,   45,   45, 1441,   45, 1441,   45, 1447, 1441,   45,
+       45,   45,   45,   45,   45,   45,   45, 1441,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,   45, 1419,   45,   45,   45,   45,
+       45,   45,   45,   45,   45,   45, 1441,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,   45,   45, 1419, 1419, 1419, 1430,
+       45,   45,   45,   45,   45,   45,   45, 1441, 1441, 1441,
 
-       45,   45,   45,   45,   45,   45, 1419,   45,   45, 1419,
-       45, 1425,   45,   45,   45, 1419,   45,   45,   45,   45,
-       45, 1419,   45,   45,   45,   45,   45,   45, 1419,   45,
-       45,   45,   45,   45,   45,   45,   45,   45,   45, 1419,
-       45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
+     1452,   45,   45,   45,   45,   45,   45, 1441,   45,   45,
+     1441,   45, 1447,   45,   45,   45, 1441,   45,   45,   45,
+       45,   45,   45, 1441,   45,   45,   45,   45,   45,   45,
+     1441,   45,   45,   45,   45,   45,   45,   45,   45,   45,
+       45, 1441,   45,   45,   45,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-     1419,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45, 1419,   45, 1419,   45,   45,   45,   45,
+       45,   45, 1441,   45,   45,   45,   45,   45,   45,   45,
+       45,   45,   45,   45,   45, 1441,   45, 1441,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
 
-       45,   45,   45, 1419, 1419, 1419,   45, 1419,   45,   45,
-     1419, 1431,   45,   45, 1419, 1419,   45, 1419,   45, 1419,
-       45,   45,   45, 1419,   45,   45,   45,   45,   45,   45,
+       45,   45,   45,   45,   45, 1441, 1441, 1441,   45, 1441,
+       45,   45, 1441, 1453,   45,   45, 1441, 1441,   45, 1441,
+       45, 1441,   45,   45,   45, 1441,   45,   45,   45,   45,
+       45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
+       45,   45,   45,   45,   45, 1441,   45,   45,   45,   45,
+       45,   45,   45, 1441,   45,   45,   45,   45,   45,   45,
+       45,   45,   45,   45,   45,   45,   45,   45,   45, 1441,
+       45,   45, 1441,   45,   45,   45,   45,   45,   45,   45,
+       45,   45, 1441,   45,   45,   45,   45,   45,   45,   45,
+       45,   45,   45,   45, 1441,   45,   45,   45,   45,   45,
+
+       45,   45,   45,   45,   45,   45,   45, 1441,   45,   45,
+       45,   45,   45,   45, 1441, 1441,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45, 1419,   45,   45,   45,   45,   45,   45,   45,
-     1419,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,   45,   45, 1419,   45,   45, 1419,
-       45,   45,   45,   45,   45,   45,   45,   45,   45, 1419,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45, 1419,   45,   45,   45,   45,   45,   45,   45,   45,
-
-       45,   45,   45,   45, 1419,   45,   45,   45,   45,   45,
-       45, 1419, 1419,   45,   45,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
+       45,   45, 1441,   45,   45,   45,   45,   45,   45, 1441,
+       45,   45,   45,   45,   45,   45,   45,   45, 1441,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,   45,   45,   45,   45, 1419,   45,
-       45,   45,   45,   45,   45, 1419,   45,   45,   45,   45,
-       45,   45,   45,   45, 1419,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,   45,   45,   45, 1419,   45,   45,
 
-       45,   45,   45,   45,   45,   45, 1419,   45,   45,   45,
-       45,   45, 1419,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,   45,   45,   45,   45, 1419,   45,
+       45, 1441,   45,   45,   45,   45,   45,   45,   45,   45,
+     1441,   45,   45,   45,   45,   45, 1441,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45, 1419, 1419,   45,   45,   45,   45,
-     1419, 1419,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45, 1419,   45,   45,   45,   45,   45,   45,   45,
+       45,   45,   45,   45, 1441,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
+     1441, 1441,   45,   45,   45,   45, 1441, 1441,   45,   45,
+       45,   45,   45,   45,   45,   45,   45,   45, 1441,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-     1419,   45,   45,   45,   45,   45,   45, 1419,   45,   45,
+       45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
+       45,   45,   45,   45,   45,   45, 1441,   45,   45,   45,
 
+       45,   45,   45, 1441,   45,   45,   45,   45,   45,   45,
+       45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
+     1441,   45,   45,   45,   45,   45,   45,   45,   45,   45,
+       45, 1441,   45,   45,   45,   45,   45,   45, 1441,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45, 1419,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45, 1419,   45,   45,   45,   45,   45,   45,
-     1419,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,   45,   45,   45, 1419, 1419,   45,
-       45,   45, 1419,   45,   45,   45, 1419,   45,   45,   45,
+       45,   45,   45,   45,   45, 1441, 1441,   45,   45,   45,
+     1441,   45,   45,   45, 1441,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45, 1419,   45,   45,   45,   45,   45,   45,
+       45, 1441,   45,   45,   45,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,   45, 1419,   45,   45,   45,   45,
 
+       45,   45,   45,   45,   45, 1441,   45,   45,   45,   45,
+       45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
+       45, 1441,   45,   45,   45,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45, 1419,   45,   45,   45,   45,   45,   45,   45,   45,
+       45,   45,   45,   45,   45,   45,   45, 1441,   45,   45,
+       45,   45,   45,   45,   45,   45,   45,   45,   45, 1441,
+       45, 1441, 1441,   45,   45,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,   45,   45,   45, 1419,   45,   45,
-       45,   45,   45,   45,   45,   45,   45,   45,   45, 1419,
-       45, 1419, 1419,   45,   45,   45,   45,   45,   45,   45,
+       45,   45,   45, 1441, 1441,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45, 1419, 1419,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,   45,   45,   45,   45, 1419, 1419,
-       45, 1419,   45, 1419,   45,   45,   45,   45,   45,   45,
 
-       45,   45, 1419,   45,   45,   45, 1419,   45,   45,   45,
-       45, 1419, 1419,   45, 1419,   45,   45,   45,   45,   45,
+     1441, 1441,   45, 1441,   45, 1441,   45,   45,   45,   45,
+       45,   45,   45,   45, 1441,   45,   45,   45, 1441,   45,
+       45,   45,   45, 1441, 1441,   45, 1441,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45, 1419,   45,   45,   45,   45,   45,   45,   45,
-       45, 1419,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,   45,   45,   45,   45, 1419,   45,
-       45,   45,   45,   45, 1419, 1419,   45,   45,   45,   45,
-       45,   45,   45,   45,   45,   45,   45, 1419,   45,   45,
-       45,   45,   45,   45, 1419, 1419,   45, 1419, 1419,   45,
-
-     1419,   45,   45,   45,   45,   45, 1419,   45, 1419,   45,
-       45,   45,   45,   45,   45, 1419,   45,   45,   45,   45,
-       45,   45,   45,   45,   45,   45,   45, 1419,   45, 1419,
-     1419,   45, 1419,   45,   45,   45,   45, 1419,   45,   45,
-       45,   45,   45,   45, 1419, 1419,   45,   45, 1419,   45,
-       45,   45,   45,   45, 1419,   45,   45,   45,   45, 1419,
-       45, 1419,   45,   45,   45,   45,   45,   45,   45, 1419,
-       45, 1419,   45,   45,   45,   45,   45,   45,   45,   45,
+       45,   45,   45,   45, 1441,   45,   45,   45,   45,   45,
+       45,   45,   45,   45,   45, 1441,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
+       45,   45, 1441,   45,   45,   45,   45,   45, 1441, 1441,
+       45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
+
+       45, 1441,   45,   45,   45,   45,   45,   45, 1441, 1441,
+       45, 1441, 1441,   45, 1441,   45,   45,   45,   45,   45,
+     1441,   45, 1441,   45,   45,   45,   45,   45,   45,   45,
+       45, 1441,   45,   45,   45,   45,   45,   45,   45,   45,
+       45,   45,   45, 1441,   45, 1441, 1441,   45, 1441,   45,
+       45,   45,   45, 1441,   45,   45,   45,   45,   45,   45,
+     1441, 1441,   45,   45, 1441,   45,   45,   45,   45,   45,
+     1441,   45,   45,   45,   45, 1441,   45, 1441,   45,   45,
+       45,   45,   45,   45,   45,   45,   45, 1441,   45, 1441,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
 
-     1419,   45, 1419,   45,   45,   45,   45, 1419,   45, 1419,
-     1419,   45, 1419,   45,   45,   45,   45,   45,   45,   45,
-       45,   45, 1419,   45,   45, 1419, 1419,   45,   45,   45,
-       45, 1419,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,   45, 1419,   45,   45, 1419,   45,
-     1419,   45,   45,   45,   45,   45, 1419,   45,   45,   45,
-     1419,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45, 1419,   45,   45, 1419,   45, 1419,
-       45,   45,   45,   45,   45, 1419,   45,   45,   45,   45,
-       45,   45, 1419,   45, 1419,   45,   45,   45,   45,   45,
-
-       45,   45,   45,   45, 1419,   45,   45,   45,   45,   45,
-       45,   45,   45,   45, 1419, 1419,   45,   45,   45,   45,
-       45, 1419,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,   45,   45, 1419,   45,   45, 1419,
-     1419,   45,   45,   45,   45,   45,   45, 1419,   45, 1419,
-       45,   45, 1419,   45,   45, 1419,   45,   45, 1419,   45,
-     1419,   45,   45,   45,   45,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,   45,   45,   45,   45, 1419,   45,
-     1419, 1419,   45,   45,   45,   45,   45,   45, 1419, 1419,
+       45,   45,   45,   45,   45,   45,   45,   45, 1441,   45,
+     1441,   45,   45,   45,   45, 1441, 1441,   45,   45, 1441,
+     1441,   45, 1441,   45,   45,   45,   45,   45,   45,   45,
+       45,   45, 1441,   45,   45, 1441, 1441,   45,   45,   45,
+       45, 1441,   45,   45,   45,   45,   45,   45,   45,   45,
+       45,   45,   45,   45,   45, 1441,   45,   45,   45, 1441,
+       45, 1441,   45,   45,   45,   45,   45, 1441,   45,   45,
+       45, 1441,   45,   45,   45,   45,   45,   45,   45,   45,
+       45,   45,   45,   45,   45, 1441,   45,   45, 1441,   45,
+
+     1441,   45, 1441,   45,   45,   45,   45, 1441,   45,   45,
+       45,   45,   45,   45, 1441,   45, 1441,   45,   45,   45,
+       45,   45,   45,   45,   45,   45, 1441,   45,   45,   45,
+       45,   45,   45,   45,   45,   45, 1441, 1441,   45,   45,
+       45,   45,   45, 1441,   45,   45,   45,   45,   45,   45,
+       45,   45,   45,   45,   45,   45,   45,   45, 1441,   45,
+       45, 1441, 1441,   45,   45,   45,   45,   45,   45, 1441,
+       45, 1441,   45,   45, 1441,   45,   45, 1441,   45,   45,
+     1441,   45, 1441,   45,   45,   45,   45,   45,   45,   45,
+       45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
 
-     1419,   45,   45,   45,   45, 1419,   45,   45, 1419,   45,
-       45,   45,   45,   45, 1419,   45,   45, 1419,    0, 1419,
-     1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419,
-     1419
+       45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
+     1441,   45, 1441, 1441,   45,   45,   45,   45,   45,   45,
+     1441, 1441, 1441,   45,   45,   45,   45, 1441,   45,   45,
+     1441,   45,   45,   45,   45,   45, 1441,   45,   45, 1441,
+        0, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441,
+     1441, 1441, 1441
     } ;
 
-static const flex_int16_t yy_nxt[1857] =
+static const flex_int16_t yy_nxt[1878] =
     {   0,
-     1419,   13,   14,   13, 1419,   15,   16, 1419,   17,   18,
-       19,   20,   21,   22,   22,   22,   23,   24,   85,  359,
-       37,   14,   37,   86,   25,   26,   38, 1419, 1419,   27,
+     1441,   13,   14,   13, 1441,   15,   16,  821,   17,   18,
+       19,   20,   21,   22,   22,   22,   23,   24,   85,  360,
+       37,   14,   37,   86,   25,   26,   38, 1441, 1441,   27,
        37,   14,   37,   42,   28,   42,   38,   91,   92,   29,
       115,   30,   13,   14,   13,   90,   91,   25,   31,   92,
-       13,   14,   13,   13,   14,   13,   32,   40,  818,   13,
-       14,   13,   33,   40,  115,   91,   92,  360,   90,   34,
+       13,   14,   13,   13,   14,   13,   32,   40,  822,   13,
+       14,   13,   33,   40,  115,   91,   92,  361,   90,   34,
        35,   13,   14,   13,   94,   15,   16,   95,   17,   18,
        19,   20,   21,   22,   22,   22,   23,   24,   13,   14,
        13,  108,   39,   90,   25,   26,   13,   14,   13,   27,
 
        39,   84,   84,   84,   28,   42,   41,   42,   42,   29,
        42,   30,   82,  107,   41,  111,   93,   25,   31,  108,
-      130,  137,   88,  819,   88,  820,   32,   89,   89,   89,
-      131,  138,   33,  139,  375,   82,  107,  376,  111,   34,
+      130,  137,   88,  823,   88,  824,   32,   89,   89,   89,
+      131,  138,   33,  139,  376,   82,  107,  377,  111,   34,
        35,   44,   44,   44,   45,   45,   46,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
        45,   47,   45,   48,   49,   50,   51,   45,   52,   53,
@@ -1256,20 +1263,20 @@ static const flex_int16_t yy_nxt[1857] =
        45,   45,   80,  103,   81,   81,   81,   80,  109,   83,
        83,   83,  101,  114,   80,   82,   83,   83,   83,  121,
        82,  145,  122,  112,  123,  146,  124,   82,  162,  103,
-      821,  103,  163,  113,  134,  223,  114,  110,   82,  135,
-      192,  107,  136,   82,  193,  147,  112,  102,  224,  502,
-       82,   45,  503,   45,   45,   45,   45,  119,   45,   45,
+      825,  103,  163,  113,  134,  223,  114,  110,   82,  135,
+      192,  107,  136,   82,  193,  147,  112,  102,  224,  504,
+       82,   45,  505,   45,   45,   45,   45,  119,   45,   45,
        45,  113,  117,  120,  107,   45,   45,  192,   45,   45,
        89,   89,   89,  194,   45,  132,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
 
        45,   45,   45,   45,   45,   45,   45,   45,   89,   89,
-       89,   45,  125,  426,  111,   45,  126,  427,  180,  127,
+       89,   45,  125,  428,  111,   45,  126,  429,  180,  127,
       128,  141,  142,   45,  178,  143,  151,   45,  180,   45,
       118,  144,  129,  148,  152,  149,  153,  150,  112,  114,
-      156,  154,  155,  157,  158,  164,  180,  315,  113,  165,
-      178,  783,  166,  316,  159,  179,  183,  160,  784,  167,
-      168,  170,  114,  171,  101,  169,  822,  172,   84,   84,
+      156,  154,  155,  157,  158,  164,  180,  480,  113,  165,
+      178,  481,  166,  304,  159,  179,  183,  160,  391,  167,
+      168,  170,  114,  171,  101,  169,  826,  172,   84,   84,
        84,   80,  174,   81,   81,   81,  113,  175,  187,   82,
        88,  179,   88,  173,   82,   89,   89,   89,   80,  178,
        83,   83,   83,   84,   84,   84,  179,  191,  100,  102,
@@ -1277,173 +1284,175 @@ static const flex_int16_t yy_nxt[1857] =
       196,   82,   82,  197,   82,  100,  187,   82,  198,  200,
       208,  199,  187,  289,  242,  181,  214,  215,  225,  209,
       210,  233,  182,  191,   82,  197,  216,   82,  196,  204,
-      197,  823,  200,  100,  226,  243,  198,  100,  199,  289,
+      197,  827,  200,  100,  226,  243,  198,  100,  199,  289,
       205,  100,  220,  228,  221,  196,  229,  254,  255,  100,
       230,  264,  281,  100,  288,  100,  186,  203,  203,  203,
-      290,  222,  348,  234,  203,  203,  203,  203,  203,  203,
+      290,  222,  828,  234,  203,  203,  203,  203,  203,  203,
       288,  258,  274,  248,  259,  260,  275,  289,  290,  299,
       276,  296,  288,  290,  265,  266,  267,  203,  203,  203,
       203,  203,  203,  300,  303,  268,  305,  269,  291,  270,
 
-      271,  293,  272,  292,  296,  307,  296,  299,  303,  304,
-      401,  419,  826,  349,  390,  397,  350,  303,  474,  305,
-      300,  403,  404,  397,  406,  409,  401,  827,  420,  310,
-      405,  355,  307,  308,  308,  308,  455,  456,  397,  401,
-      308,  308,  308,  308,  308,  308,  398,  406,  462,  650,
-      651,  828,  698,  409,  440,  413,  409,  478,  463,  441,
-      513,  479,  699,  308,  308,  308,  308,  308,  308,  412,
-      412,  412,  666,  829,  475,  830,  412,  412,  412,  412,
-      412,  412,  486,  491,  464,  508,  487,  492,  513,  521,
-      509,  522,  543,  592,  513,  831,  617,  544,  593,  412,
-
-      412,  412,  412,  412,  412,  442,  618,  613,  708,  667,
-      443,  789,  619,  800,  710,  709,  521,  790,  522,   45,
-       45,   45,  523,  617,  711,  832,   45,   45,   45,   45,
-       45,   45,  675,  785,  618,  833,  708,  676,  709,  749,
-      786,  800,  750,  824,  834,  835,  836,  837,  825,   45,
-       45,   45,   45,   45,   45,  838,  839,  840,  841,  842,
-      844,  845,  846,  843,  847,  848,  849,  850,  851,  852,
-      853,  854,  855,  856,  677,  857,  858,  859,  860,  861,
-      862,  863,  864,  865,  866,  867,  868,  869,  870,  871,
-      873,  874,  875,  876,  877,  878,  879,  880,  881,  882,
-
-      883,  872,  884,  885,  886,  887,  888,  889,  890,  891,
-      892,  893,  894,  895,  896,  897,  898,  899,  900,  901,
-      902,  903,  904,  905,  906,  907,  885,  908,  909,  884,
-      910,  911,  912,  915,  916,  917,  918,  913,  919,  920,
-      921,  922,  923,  924,  925,  926,  927,  928,  929,  930,
-      932,  933,  934,  935,  936,  937,  938,  939,  940,  941,
-      931,  942,  943,  944,  945,  946,  947,  948,  949,  950,
-      951,  952,  953,  954,  955,  956,  957,  958,  959,  960,
-      961,  962,  963,  964,  966,  965,  967,  968,  914,  969,
-      970,  971,  972,  973,  974,  975,  976,  977,  978,  979,
-
-      980,  981,  982,  983,  984,  985,  986,  987,  988,  989,
-      990,  964,  965,  991,  992,  994,  996,  997,  998,  993,
-      999, 1000, 1001, 1002, 1003, 1004, 1005, 1006, 1007, 1008,
-     1009, 1010, 1011, 1012, 1013, 1014, 1015, 1016, 1017, 1018,
-     1019, 1020, 1021, 1022, 1023, 1024, 1025, 1026, 1027, 1028,
-     1029, 1030, 1031, 1032, 1033, 1034, 1035,  995, 1036, 1037,
-     1038, 1039, 1040, 1041, 1042, 1043, 1044, 1045, 1046, 1047,
-     1048, 1049, 1050, 1051, 1052, 1053, 1054, 1055, 1056, 1057,
-     1058, 1059, 1060, 1061, 1062, 1040, 1063, 1064, 1065, 1066,
-     1067, 1041, 1068, 1069, 1070, 1071, 1072, 1073, 1074, 1075,
-
-     1076, 1077, 1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085,
-     1086, 1087, 1088, 1089, 1090, 1091, 1092, 1094, 1095, 1096,
+      271,  293,  272,  292,  296,  307,  296,  299,  315,  421,
+      402,  457,  458,  303,  398,  398,  316,  303,  349,  305,
+      300,  410,  317,  402,  670,  407,  422,  488,  410,  310,
+      476,  489,  307,  308,  308,  308,  356,  398,  399,  402,
+      308,  308,  308,  308,  308,  308,  404,  405,  407,  410,
+      464,  515,  414,  493,  510,  406,  466,  494,  829,  511,
+      465,  671,  515,  308,  308,  308,  308,  308,  308,  350,
+      620,  442,  351,  413,  413,  413,  443,  654,  655,  515,
+      413,  413,  413,  413,  413,  413,  477,  523,  546,  524,
+      525,  595,  621,  547,  616,  712,  596,  620,  713,  622,
+
+      830,  702,  714,  413,  413,  413,  413,  413,  413,  831,
+      679,  703,  715,  834,  523,  680,  524,  718,  719,  789,
+      621,  713,  444,  712,  835,  791,  790,  445,   45,   45,
+       45,  755,  792,  836,  756,   45,   45,   45,   45,   45,
+       45,  795,  806,  832,  837,  838,  839,  796,  833,  840,
+      841,  842,  681,  843,  844,  845,  846,  847,   45,   45,
+       45,   45,   45,   45,  848,  849,  852,  850,  853,  854,
+      806,  851,  855,  856,  857,  858,  859,  860,  861,  862,
+      863,  864,  865,  866,  867,  868,  869,  870,  871,  872,
+      873,  874,  875,  876,  877,  878,  879,  881,  882,  883,
+
+      884,  885,  886,  887,  888,  889,  890,  891,  880,  892,
+      893,  894,  895,  896,  897,  898,  899,  900,  901,  902,
+      903,  904,  905,  906,  907,  908,  909,  910,  911,  912,
+      913,  914,  915,  893,  916,  917,  892,  918,  919,  920,
+      921,  922,  925,  926,  927,  928,  923,  929,  930,  931,
+      932,  933,  934,  935,  936,  937,  938,  939,  940,  942,
+      943,  944,  945,  946,  947,  948,  949,  950,  951,  941,
+      952,  953,  954,  955,  956,  957,  958,  959,  960,  961,
+      962,  963,  964,  965,  966,  967,  968,  969,  970,  971,
+      972,  973,  974,  976,  975,  977,  978,  924,  979,  980,
+
+      981,  982,  983,  984,  985,  986,  987,  988,  989,  990,
+      991,  992,  993,  994,  995,  996,  997,  998,  999, 1000,
+      974,  975, 1001, 1002, 1003, 1004, 1006, 1008, 1009, 1010,
+     1005, 1011, 1012, 1013, 1014, 1015, 1016, 1017, 1018, 1019,
+     1020, 1021, 1022, 1023, 1024, 1025, 1026, 1027, 1028, 1029,
+     1030, 1031, 1032, 1033, 1034, 1035, 1036, 1037, 1038, 1039,
+     1040, 1041, 1042, 1043, 1044, 1045, 1046, 1047, 1007, 1048,
+     1049, 1050, 1051, 1052, 1053, 1054, 1055, 1056, 1057, 1058,
+     1059, 1060, 1061, 1062, 1063, 1064, 1065, 1066, 1067, 1068,
+     1069, 1070, 1071, 1072, 1073, 1074, 1052, 1075, 1076, 1077,
+
+     1078, 1079, 1053, 1080, 1081, 1082, 1083, 1084, 1085, 1086,
+     1087, 1088, 1089, 1090, 1091, 1092, 1093, 1094, 1095, 1096,
      1097, 1098, 1099, 1100, 1101, 1102, 1103, 1104, 1105, 1106,
-     1107, 1108, 1109, 1111, 1112, 1113, 1114, 1115, 1116, 1117,
-     1118, 1119, 1120, 1121, 1122, 1123, 1124, 1125, 1126, 1127,
-     1128, 1129, 1130, 1131, 1132, 1133, 1134, 1106, 1135, 1137,
-     1138, 1139, 1140, 1141, 1142, 1143, 1136, 1093, 1144, 1145,
-     1146, 1147, 1148, 1149, 1110, 1150, 1151, 1152, 1153, 1154,
-     1155, 1156, 1157, 1158, 1159, 1160, 1161, 1162, 1163, 1164,
-     1165, 1166, 1167, 1168, 1169, 1170, 1171, 1172, 1173, 1174,
-
-     1175, 1176, 1177, 1178, 1179, 1180, 1181, 1182, 1183, 1184,
-     1185, 1163, 1186, 1187, 1188, 1189, 1190, 1191, 1192, 1193,
-     1194, 1195, 1196, 1197, 1198, 1199, 1200, 1201, 1202, 1203,
-     1204, 1205, 1206, 1207, 1208, 1209, 1210, 1211, 1212, 1213,
-     1214, 1215, 1216, 1217, 1218, 1219, 1220, 1221, 1222, 1223,
-     1225, 1226, 1227, 1228, 1229, 1230, 1231, 1232, 1233, 1206,
-     1234, 1235, 1236, 1237, 1238, 1239, 1240, 1241, 1242, 1243,
-     1244, 1245, 1246, 1247, 1248, 1249, 1250, 1251, 1253, 1254,
-     1255, 1256, 1252, 1257, 1258, 1259, 1260, 1261, 1262, 1263,
-     1264, 1265, 1266, 1267, 1268, 1269, 1270, 1271, 1272, 1273,
-
-     1274, 1247, 1275, 1276, 1277, 1224, 1278, 1279, 1280, 1281,
-     1282, 1283, 1284, 1285, 1286, 1287, 1288, 1289, 1290, 1291,
-     1292, 1293, 1294, 1295, 1296, 1297, 1298, 1299, 1300, 1301,
-     1302, 1303, 1304, 1305, 1306, 1307, 1308, 1309, 1310, 1311,
-     1312, 1313, 1314, 1315, 1316, 1317, 1318, 1319, 1320, 1321,
-     1322, 1323, 1324, 1325, 1326, 1327, 1328, 1329, 1330, 1331,
-     1332, 1333, 1334, 1335, 1336, 1337, 1338, 1339, 1340, 1341,
-     1342, 1343, 1344, 1345, 1346, 1347, 1348, 1349, 1350, 1351,
-     1352, 1353, 1354, 1355, 1356, 1357, 1358, 1359, 1360, 1361,
-     1362, 1363, 1364, 1365, 1366, 1367, 1368, 1369, 1370, 1371,
-
-     1372, 1373, 1374, 1375, 1376, 1377, 1378, 1379, 1380, 1381,
-     1382, 1383, 1384, 1385, 1386, 1387, 1388, 1389, 1390, 1391,
-     1392, 1393, 1394, 1395, 1396, 1397, 1398, 1399, 1400, 1401,
-     1402, 1403, 1404, 1405, 1406, 1407, 1408, 1409, 1410, 1411,
-     1412, 1413, 1414, 1415, 1416, 1417, 1418,   12,   12,   12,
-       12,   12,   36,   36,   36,   36,   36,   79,  295,   79,
-       79,   79,   98,  400,   98,  512,   98,  100,  100,  100,
-      100,  100,  116,  116,  116,  116,  116,  177,  100,  177,
-      177,  177,  201,  201,  201,  817,  816,  815,  814,  813,
-      812,  811,  810,  809,  808,  807,  806,  805,  804,  803,
-
-      802,  801,  799,  798,  797,  796,  795,  794,  793,  792,
-      791,  788,  787,  782,  781,  780,  779,  778,  777,  776,
-      775,  774,  773,  772,  771,  770,  769,  768,  767,  766,
-      765,  764,  763,  762,  761,  760,  759,  758,  757,  756,
-      755,  754,  753,  752,  751,  748,  747,  746,  745,  744,
-      743,  742,  741,  740,  739,  738,  737,  736,  735,  734,
-      733,  732,  731,  730,  729,  728,  727,  726,  725,  724,
-      723,  722,  721,  720,  719,  718,  717,  716,  715,  714,
-      713,  712,  707,  706,  705,  704,  703,  702,  701,  700,
-      697,  696,  695,  694,  693,  692,  691,  690,  689,  688,
-
-      687,  686,  685,  684,  683,  682,  681,  680,  679,  678,
-      674,  673,  672,  671,  670,  669,  668,  665,  664,  663,
-      662,  661,  660,  659,  658,  657,  656,  655,  654,  653,
-      652,  649,  648,  647,  646,  645,  644,  643,  642,  641,
-      640,  639,  638,  637,  636,  635,  634,  633,  632,  631,
-      630,  629,  628,  627,  626,  625,  624,  623,  622,  621,
-      620,  616,  615,  614,  613,  612,  611,  610,  609,  608,
-      607,  606,  605,  604,  603,  602,  601,  600,  599,  598,
-      597,  596,  595,  594,  591,  590,  589,  588,  587,  586,
-      585,  584,  583,  582,  581,  580,  579,  578,  577,  576,
-
-      575,  574,  573,  572,  571,  570,  569,  568,  567,  566,
-      565,  564,  563,  562,  561,  560,  559,  558,  557,  556,
-      555,  554,  553,  552,  551,  550,  549,  548,  547,  546,
-      545,  542,  541,  540,  539,  538,  537,  536,  535,  534,
-      533,  532,  531,  530,  529,  528,  527,  526,  525,  524,
-      520,  519,  518,  517,  516,  515,  514,  511,  510,  507,
-      506,  505,  504,  501,  500,  499,  498,  497,  496,  495,
-      494,  493,  490,  489,  488,  485,  484,  483,  482,  481,
-      480,  477,  476,  473,  472,  471,  470,  469,  468,  467,
-      466,  465,  461,  460,  459,  458,  457,  454,  453,  452,
-
-      451,  450,  449,  448,  447,  446,  445,  444,  439,  438,
-      437,  436,  435,  434,  433,  432,  431,  430,  429,  428,
-      425,  424,  423,  422,  421,  418,  417,  416,  415,  414,
-      411,  410,  408,  407,  402,  399,  396,  395,  394,  393,
-      392,  391,  389,  388,  387,  386,  385,  384,  383,  382,
-      381,  380,  379,  378,  377,  374,  373,  372,  371,  370,
-      369,  368,  367,  366,  365,  364,  363,  362,  361,  358,
-      357,  356,  354,  353,  352,  351,  347,  346,  345,  344,
-      343,  342,  341,  340,  339,  338,  337,  336,  335,  334,
-      333,  332,  331,  330,  329,  328,  327,  326,  325,  324,
-
-      323,  322,  321,  320,  319,  318,  317,  314,  313,  312,
-      311,  309,  202,  306,  304,  302,  301,  298,  297,  294,
-      287,  286,  285,  284,  283,  282,  280,  279,  278,  277,
-      273,  263,  262,  261,  257,  256,  253,  252,  251,  250,
-      249,  247,  246,  245,  244,  241,  240,  239,  238,  237,
-      236,  235,  232,  231,  227,  219,  218,  217,  213,  212,
-      211,  207,  206,  202,  195,  190,  189,  188,  185,  184,
-      176,  161,  140,  133,  106,  105,  104,   43,   99,   97,
-       96,   87,   43, 1419,   11, 1419, 1419, 1419, 1419, 1419,
-     1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419,
-
-     1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419,
-     1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419,
-     1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419,
-     1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419,
-     1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419,
-     1419, 1419, 1419, 1419, 1419, 1419
+     1108, 1109, 1110, 1111, 1112, 1113, 1114, 1115, 1116, 1117,
+     1118, 1119, 1120, 1121, 1122, 1123, 1125, 1126, 1127, 1128,
+     1129, 1130, 1131, 1132, 1133, 1134, 1135, 1136, 1137, 1138,
+     1139, 1140, 1141, 1142, 1143, 1144, 1145, 1146, 1147, 1148,
+     1120, 1149, 1150, 1151, 1153, 1154, 1155, 1156, 1157, 1158,
+     1107, 1152, 1159, 1160, 1161, 1162, 1163, 1124, 1164, 1165,
+     1166, 1167, 1168, 1169, 1170, 1171, 1172, 1173, 1174, 1175,
+
+     1176, 1177, 1178, 1179, 1180, 1181, 1182, 1183, 1184, 1185,
+     1186, 1187, 1188, 1189, 1190, 1191, 1192, 1193, 1194, 1195,
+     1196, 1197, 1198, 1199, 1200, 1201, 1179, 1202, 1203, 1204,
+     1205, 1206, 1207, 1208, 1209, 1210, 1211, 1212, 1213, 1214,
+     1215, 1216, 1217, 1218, 1219, 1220, 1221, 1222, 1223, 1224,
+     1225, 1226, 1227, 1228, 1229, 1230, 1231, 1232, 1233, 1234,
+     1235, 1236, 1237, 1238, 1239, 1240, 1241, 1242, 1243, 1245,
+     1246, 1247, 1248, 1249, 1250, 1251, 1224, 1252, 1253, 1254,
+     1255, 1256, 1257, 1258, 1259, 1260, 1261, 1262, 1263, 1264,
+     1265, 1266, 1267, 1268, 1269, 1270, 1271, 1272, 1274, 1275,
+
+     1276, 1277, 1273, 1278, 1279, 1280, 1281, 1282, 1283, 1284,
+     1285, 1286, 1287, 1288, 1289, 1290, 1291, 1292, 1293, 1294,
+     1267, 1295, 1296, 1297, 1244, 1298, 1299, 1300, 1301, 1302,
+     1303, 1304, 1305, 1306, 1307, 1308, 1309, 1310, 1311, 1312,
+     1313, 1314, 1315, 1316, 1317, 1318, 1319, 1320, 1321, 1322,
+     1323, 1324, 1325, 1326, 1327, 1328, 1329, 1330, 1331, 1332,
+     1333, 1334, 1335, 1336, 1337, 1338, 1339, 1340, 1341, 1342,
+     1343, 1344, 1345, 1346, 1347, 1348, 1349, 1350, 1351, 1352,
+     1353, 1354, 1355, 1356, 1357, 1358, 1359, 1360, 1361, 1362,
+     1363, 1364, 1365, 1366, 1367, 1368, 1369, 1370, 1371, 1372,
+
+     1373, 1374, 1375, 1376, 1377, 1378, 1379, 1380, 1381, 1382,
+     1383, 1384, 1385, 1386, 1387, 1388, 1389, 1390, 1391, 1392,
+     1393, 1394, 1395, 1396, 1397, 1398, 1399, 1400, 1401, 1402,
+     1403, 1404, 1405, 1406, 1407, 1408, 1409, 1410, 1411, 1412,
+     1413, 1414, 1415, 1416, 1417, 1418, 1419, 1420, 1421, 1422,
+     1423, 1424, 1425, 1426, 1427, 1428, 1429, 1430, 1431, 1432,
+     1433, 1434, 1435, 1436, 1437, 1438, 1439, 1440,   12,   12,
+       12,   12,   12,   36,   36,   36,   36,   36,   79,  295,
+       79,   79,   79,   98,  401,   98,  514,   98,  100,  100,
+      100,  100,  100,  116,  116,  116,  116,  116,  177,  100,
+
+      177,  177,  177,  201,  201,  201,  820,  819,  818,  817,
+      816,  815,  814,  813,  812,  811,  810,  809,  808,  807,
+      805,  804,  803,  802,  801,  800,  799,  798,  797,  794,
+      793,  788,  787,  786,  785,  784,  783,  782,  781,  780,
+      779,  778,  777,  776,  775,  774,  773,  772,  771,  770,
+      769,  768,  767,  766,  765,  764,  763,  762,  761,  760,
+      759,  758,  757,  754,  753,  752,  751,  750,  749,  748,
+      747,  746,  745,  744,  743,  742,  741,  740,  739,  738,
+      737,  736,  735,  734,  733,  732,  731,  730,  729,  728,
+      727,  726,  725,  724,  723,  722,  721,  720,  717,  716,
+
+      711,  710,  709,  708,  707,  706,  705,  704,  701,  700,
+      699,  698,  697,  696,  695,  694,  693,  692,  691,  690,
+      689,  688,  687,  686,  685,  684,  683,  682,  678,  677,
+      676,  675,  674,  673,  672,  669,  668,  667,  666,  665,
+      664,  663,  662,  661,  660,  659,  658,  657,  656,  653,
+      652,  651,  650,  649,  648,  647,  646,  645,  644,  643,
+      642,  641,  640,  639,  638,  637,  636,  635,  634,  633,
+      632,  631,  630,  629,  628,  627,  626,  625,  624,  623,
+      619,  618,  617,  616,  615,  614,  613,  612,  611,  610,
+      609,  608,  607,  606,  605,  604,  603,  602,  601,  600,
+
+      599,  598,  597,  594,  593,  592,  591,  590,  589,  588,
+      587,  586,  585,  584,  583,  582,  581,  580,  579,  578,
+      577,  576,  575,  574,  573,  572,  571,  570,  569,  568,
+      567,  566,  565,  564,  563,  562,  561,  560,  559,  558,
+      557,  556,  555,  554,  553,  552,  551,  550,  549,  548,
+      545,  544,  543,  542,  541,  540,  539,  538,  537,  536,
+      535,  534,  533,  532,  531,  530,  529,  528,  527,  526,
+      522,  521,  520,  519,  518,  517,  516,  513,  512,  509,
+      508,  507,  506,  503,  502,  501,  500,  499,  498,  497,
+      496,  495,  492,  491,  490,  487,  486,  485,  484,  483,
+
+      482,  479,  478,  475,  474,  473,  472,  471,  470,  469,
+      468,  467,  463,  462,  461,  460,  459,  456,  455,  454,
+      453,  452,  451,  450,  449,  448,  447,  446,  441,  440,
+      439,  438,  437,  436,  435,  434,  433,  432,  431,  430,
+      427,  426,  425,  424,  423,  420,  419,  418,  417,  416,
+      415,  412,  411,  409,  408,  403,  400,  397,  396,  395,
+      394,  393,  392,  390,  389,  388,  387,  386,  385,  384,
+      383,  382,  381,  380,  379,  378,  375,  374,  373,  372,
+      371,  370,  369,  368,  367,  366,  365,  364,  363,  362,
+      359,  358,  357,  355,  354,  353,  352,  348,  347,  346,
+
+      345,  344,  343,  342,  341,  340,  339,  338,  337,  336,
+      335,  334,  333,  332,  331,  330,  329,  328,  327,  326,
+      325,  324,  323,  322,  321,  320,  319,  318,  314,  313,
+      312,  311,  309,  202,  306,  304,  302,  301,  298,  297,
+      294,  287,  286,  285,  284,  283,  282,  280,  279,  278,
+      277,  273,  263,  262,  261,  257,  256,  253,  252,  251,
+      250,  249,  247,  246,  245,  244,  241,  240,  239,  238,
+      237,  236,  235,  232,  231,  227,  219,  218,  217,  213,
+      212,  211,  207,  206,  202,  195,  190,  189,  188,  185,
+      184,  176,  161,  140,  133,  106,  105,  104,   43,   99,
+
+       97,   96,   87,   43, 1441,   11, 1441, 1441, 1441, 1441,
+     1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441,
+     1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441,
+     1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441,
+     1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441,
+     1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441,
+     1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441,
+     1441, 1441, 1441, 1441, 1441, 1441, 1441
     } ;
 
-static const flex_int16_t yy_chk[1857] =
+static const flex_int16_t yy_chk[1878] =
     {   0,
-        0,    1,    1,    1,    0,    1,    1,    0,    1,    1,
+        0,    1,    1,    1,    0,    1,    1,  729,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,   21,  252,
         3,    3,    3,   21,    1,    1,    3,    0,    0,    1,
         4,    4,    4,   13,    1,   13,    4,   27,   28,    1,
        57,    1,    5,    5,    5,   26,   32,    1,    1,   33,
-        6,    6,    6,    7,    7,    7,    1,    7,  728,    8,
+        6,    6,    6,    7,    7,    7,    1,    7,  730,    8,
         8,    8,    1,    8,   57,   27,   28,  252,   26,    1,
         1,    2,    2,    2,   32,    2,    2,   33,    2,    2,
         2,    2,    2,    2,    2,    2,    2,    2,    9,    9,
@@ -1451,7 +1460,7 @@ static const flex_int16_t yy_chk[1857] =
 
         6,   20,   20,   20,    2,   37,    9,   37,   42,    2,
        42,    2,   20,   51,   10,   54,   31,    2,    2,   52,
-       62,   66,   25,  730,   25,  731,    2,   25,   25,   25,
+       62,   66,   25,  731,   25,  732,    2,   25,   25,   25,
        62,   66,    2,   66,  267,   20,   51,  267,   54,    2,
         2,   15,   15,   15,   15,   15,   15,   15,   15,   15,
        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
@@ -1464,20 +1473,20 @@ static const flex_int16_t yy_chk[1857] =
        15,   15,   17,   47,   17,   17,   17,   19,   53,   19,
        19,   19,   44,   56,   22,   17,   22,   22,   22,   60,
        19,   69,   60,   55,   60,   69,   60,   22,   74,   47,
-      732,   59,   74,   55,   65,  131,   56,   53,   17,   65,
-      108,   63,   65,   19,  109,   69,   55,   44,  131,  390,
-       22,   45,  390,   45,   45,   45,   45,   59,   45,   45,
+      733,   59,   74,   55,   65,  131,   56,   53,   17,   65,
+      108,   63,   65,   19,  109,   69,   55,   44,  131,  391,
+       22,   45,  391,   45,   45,   45,   45,   59,   45,   45,
        45,   55,   58,   59,   63,   45,   45,  108,   45,   58,
        88,   88,   88,  109,   45,   63,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
 
        45,   45,   45,   45,   45,   45,   45,   58,   89,   89,
-       89,   58,   61,  323,   70,   58,   61,  323,   92,   61,
+       89,   58,   61,  324,   70,   58,   61,  324,   92,   61,
        61,   68,   68,   58,   90,   68,   71,   58,   95,   58,
        58,   68,   61,   70,   71,   70,   71,   70,   76,   77,
-       72,   71,   71,   72,   72,   75,   92,  210,   76,   75,
-       90,  693,   75,  210,   72,   91,   95,   72,  693,   75,
-       75,   76,   77,   76,  100,   75,  733,   76,   80,   80,
+       72,   71,   71,   72,   72,   75,   92,  370,   76,   75,
+       90,  370,   75,  281,   72,   91,   95,   72,  281,   75,
+       75,   76,   77,   76,  100,   75,  734,   76,   80,   80,
        80,   81,   77,   81,   81,   81,   76,   77,  103,   80,
        82,   91,   82,   76,   81,   82,   82,   82,   83,   93,
        83,   83,   83,   84,   84,   84,   94,  107,  102,  100,
@@ -1485,163 +1494,165 @@ static const flex_int16_t yy_chk[1857] =
       111,   83,   80,  112,   84,  102,  103,   81,  113,  115,
       122,  114,  119,  179,  145,   93,  126,  126,  132,  122,
       122,  137,   94,  107,   83,  170,  126,   84,  111,  119,
-      112,  734,  115,  102,  132,  145,  113,  102,  114,  179,
+      112,  736,  115,  102,  132,  145,  113,  102,  114,  179,
       119,  102,  130,  134,  130,  150,  134,  156,  156,  102,
       134,  163,  170,  102,  178,  102,  102,  118,  118,  118,
-      180,  130,  243,  137,  118,  118,  118,  118,  118,  118,
+      180,  130,  737,  137,  118,  118,  118,  118,  118,  118,
       181,  159,  165,  150,  159,  159,  165,  182,  183,  191,
       165,  187,  178,  180,  163,  163,  163,  118,  118,  118,
       118,  118,  118,  192,  196,  163,  198,  163,  181,  163,
 
-      163,  183,  163,  182,  187,  200,  205,  191,  248,  281,
-      296,  316,  736,  243,  281,  288,  243,  196,  366,  198,
-      192,  298,  298,  291,  299,  303,  310,  737,  316,  205,
-      298,  248,  200,  203,  203,  203,  348,  348,  288,  296,
-      203,  203,  203,  203,  203,  203,  291,  299,  354,  557,
-      557,  738,  606,  303,  336,  310,  355,  369,  354,  336,
-      401,  369,  606,  203,  203,  203,  203,  203,  203,  308,
-      308,  308,  574,  739,  366,  740,  308,  308,  308,  308,
-      308,  308,  376,  380,  355,  395,  376,  380,  401,  411,
-      395,  411,  436,  488,  413,  741,  521,  436,  488,  308,
-
-      308,  308,  308,  308,  308,  336,  522,  523,  617,  574,
-      336,  697,  523,  709,  619,  618,  411,  697,  411,  412,
-      412,  412,  413,  521,  619,  742,  412,  412,  412,  412,
-      412,  412,  583,  694,  522,  743,  617,  583,  618,  657,
-      694,  709,  657,  735,  744,  747,  748,  749,  735,  412,
-      412,  412,  412,  412,  412,  750,  753,  754,  755,  756,
-      757,  758,  759,  756,  760,  761,  762,  764,  765,  766,
-      767,  768,  769,  770,  583,  771,  772,  773,  774,  775,
-      776,  777,  778,  779,  780,  781,  782,  783,  784,  785,
-      786,  787,  788,  789,  790,  792,  793,  794,  795,  796,
-
-      797,  785,  799,  800,  801,  802,  803,  804,  805,  806,
-      807,  808,  809,  810,  811,  812,  814,  815,  816,  817,
-      818,  819,  820,  821,  822,  823,  800,  825,  826,  799,
-      827,  828,  829,  830,  832,  833,  834,  829,  835,  836,
-      837,  838,  839,  840,  841,  842,  843,  844,  845,  846,
-      847,  850,  851,  852,  854,  855,  856,  858,  859,  860,
-      846,  861,  862,  863,  864,  865,  866,  867,  868,  869,
-      870,  871,  872,  873,  875,  876,  877,  878,  879,  880,
-      881,  882,  883,  884,  886,  885,  887,  888,  829,  889,
-      890,  891,  892,  893,  894,  895,  897,  898,  899,  900,
-
-      901,  902,  903,  904,  905,  906,  907,  908,  909,  910,
-      911,  884,  885,  913,  914,  915,  916,  917,  918,  914,
-      919,  920,  921,  922,  923,  924,  925,  926,  927,  928,
-      929,  930,  931,  932,  933,  934,  935,  936,  937,  939,
-      940,  941,  942,  943,  944,  945,  946,  947,  948,  949,
-      951,  954,  955,  956,  957,  958,  959,  915,  960,  961,
-      962,  963,  964,  965,  966,  967,  968,  969,  970,  971,
-      974,  975,  976,  977,  978,  979,  980,  981,  982,  983,
-      984,  985,  986,  987,  988,  964,  991,  993,  995,  996,
-      997,  965,  998,  999, 1000, 1001, 1002, 1004, 1005, 1006,
-
-     1008, 1009, 1010, 1011, 1014, 1016, 1017, 1018, 1019, 1020,
-     1021, 1022, 1023, 1024, 1025, 1026, 1027, 1028, 1029, 1030,
-     1031, 1032, 1033, 1034, 1035, 1036, 1037, 1038, 1039, 1040,
-     1041, 1042, 1044, 1045, 1046, 1047, 1048, 1049, 1050, 1051,
-     1053, 1054, 1055, 1056, 1057, 1058, 1059, 1060, 1061, 1062,
-     1063, 1064, 1065, 1066, 1067, 1068, 1070, 1040, 1071, 1072,
-     1073, 1074, 1077, 1078, 1079, 1080, 1071, 1027, 1081, 1082,
-     1083, 1084, 1085, 1086, 1044, 1087, 1089, 1090, 1091, 1092,
-     1093, 1094, 1097, 1100, 1102, 1103, 1104, 1105, 1106, 1108,
-     1110, 1111, 1112, 1113, 1114, 1115, 1117, 1118, 1119, 1120,
-
-     1121, 1122, 1123, 1124, 1125, 1126, 1127, 1129, 1132, 1134,
-     1135, 1106, 1136, 1137, 1139, 1140, 1141, 1142, 1143, 1144,
-     1147, 1148, 1150, 1151, 1152, 1153, 1154, 1156, 1157, 1158,
-     1159, 1161, 1163, 1164, 1165, 1166, 1167, 1168, 1169, 1171,
-     1173, 1174, 1175, 1176, 1177, 1178, 1179, 1180, 1180, 1181,
-     1182, 1183, 1184, 1185, 1186, 1187, 1188, 1189, 1190, 1163,
-     1191, 1192, 1193, 1194, 1195, 1196, 1197, 1198, 1199, 1200,
-     1202, 1204, 1205, 1206, 1207, 1209, 1212, 1214, 1215, 1216,
-     1217, 1218, 1214, 1219, 1220, 1221, 1222, 1224, 1225, 1228,
-     1229, 1230, 1231, 1233, 1234, 1235, 1236, 1237, 1238, 1239,
-
-     1240, 1206, 1241, 1242, 1243, 1181, 1244, 1245, 1247, 1248,
-     1250, 1252, 1253, 1254, 1255, 1256, 1258, 1259, 1260, 1262,
-     1263, 1264, 1265, 1266, 1267, 1268, 1269, 1270, 1271, 1272,
-     1273, 1274, 1276, 1277, 1279, 1281, 1282, 1283, 1284, 1285,
-     1287, 1288, 1289, 1290, 1291, 1292, 1294, 1296, 1297, 1298,
-     1299, 1300, 1301, 1302, 1303, 1304, 1306, 1307, 1308, 1309,
-     1310, 1311, 1312, 1313, 1314, 1317, 1318, 1319, 1320, 1321,
-     1323, 1324, 1325, 1326, 1327, 1328, 1329, 1330, 1331, 1332,
-     1333, 1334, 1335, 1336, 1338, 1339, 1342, 1343, 1344, 1345,
-     1346, 1347, 1349, 1351, 1352, 1354, 1355, 1357, 1358, 1360,
-
-     1362, 1363, 1364, 1365, 1366, 1367, 1368, 1369, 1370, 1371,
-     1372, 1373, 1374, 1375, 1376, 1377, 1378, 1379, 1380, 1381,
-     1382, 1383, 1384, 1385, 1386, 1387, 1388, 1390, 1393, 1394,
-     1395, 1396, 1397, 1398, 1402, 1403, 1404, 1405, 1407, 1408,
-     1410, 1411, 1412, 1413, 1414, 1416, 1417, 1420, 1420, 1420,
-     1420, 1420, 1421, 1421, 1421, 1421, 1421, 1422, 1428, 1422,
-     1422, 1422, 1423, 1429, 1423, 1430, 1423, 1424, 1424, 1424,
-     1424, 1424, 1425, 1425, 1425, 1425, 1425, 1426, 1431, 1426,
-     1426, 1426, 1427, 1427, 1427,  727,  726,  725,  724,  723,
-      722,  721,  720,  719,  718,  717,  716,  715,  714,  712,
-
-      711,  710,  708,  706,  705,  704,  703,  702,  701,  700,
-      699,  696,  695,  692,  691,  690,  689,  688,  687,  686,
-      685,  684,  683,  682,  681,  680,  679,  678,  677,  676,
-      674,  673,  672,  671,  670,  669,  668,  667,  665,  664,
-      663,  662,  661,  660,  658,  656,  655,  654,  653,  652,
-      651,  650,  649,  648,  647,  646,  645,  644,  643,  642,
-      641,  640,  639,  638,  637,  636,  635,  634,  633,  632,
-      631,  630,  629,  628,  627,  626,  625,  624,  623,  622,
-      621,  620,  616,  615,  614,  611,  610,  609,  608,  607,
-      604,  603,  602,  601,  600,  599,  598,  597,  596,  595,
-
-      594,  593,  591,  590,  589,  588,  587,  586,  585,  584,
-      582,  581,  579,  578,  577,  576,  575,  573,  572,  571,
-      569,  568,  566,  565,  564,  563,  562,  561,  560,  559,
-      558,  556,  555,  554,  553,  552,  550,  549,  548,  547,
-      546,  545,  544,  542,  541,  540,  539,  538,  537,  536,
-      535,  534,  533,  532,  531,  530,  529,  528,  527,  526,
-      525,  519,  517,  514,  513,  511,  510,  509,  507,  503,
-      502,  501,  500,  499,  498,  497,  496,  495,  494,  493,
-      492,  491,  490,  489,  487,  486,  485,  484,  483,  482,
-      481,  480,  479,  478,  477,  475,  473,  472,  471,  470,
-
-      469,  468,  467,  466,  465,  464,  463,  462,  460,  459,
-      458,  457,  456,  455,  454,  453,  452,  451,  450,  449,
-      448,  447,  446,  445,  444,  443,  442,  441,  439,  438,
-      437,  435,  434,  433,  432,  431,  430,  428,  427,  426,
-      425,  424,  423,  421,  420,  419,  418,  417,  415,  414,
-      409,  408,  406,  405,  404,  403,  402,  399,  396,  394,
-      393,  392,  391,  389,  388,  387,  386,  385,  384,  383,
-      382,  381,  379,  378,  377,  375,  374,  373,  372,  371,
-      370,  368,  367,  365,  364,  363,  362,  361,  360,  359,
-      358,  357,  353,  352,  351,  350,  349,  347,  346,  345,
-
-      344,  343,  342,  341,  340,  339,  338,  337,  335,  334,
-      333,  332,  331,  330,  329,  328,  327,  326,  325,  324,
-      322,  321,  320,  319,  318,  315,  314,  313,  312,  311,
-      307,  305,  302,  300,  297,  294,  287,  286,  285,  284,
-      283,  282,  280,  279,  278,  277,  276,  275,  274,  273,
-      272,  271,  270,  269,  268,  266,  265,  264,  263,  262,
-      261,  260,  259,  258,  257,  256,  255,  254,  253,  251,
-      250,  249,  247,  246,  245,  244,  242,  241,  240,  239,
-      238,  237,  236,  235,  234,  232,  231,  230,  229,  228,
-      227,  226,  225,  224,  223,  222,  221,  220,  219,  218,
-
-      217,  216,  215,  214,  213,  212,  211,  209,  208,  207,
-      206,  204,  201,  199,  197,  195,  194,  189,  188,  184,
-      176,  175,  174,  173,  172,  171,  169,  168,  167,  166,
-      164,  162,  161,  160,  158,  157,  155,  154,  153,  152,
-      151,  149,  148,  147,  146,  144,  143,  142,  141,  140,
-      139,  138,  136,  135,  133,  129,  128,  127,  125,  124,
-      123,  121,  120,  116,  110,  106,  105,  104,   98,   97,
-       78,   73,   67,   64,   50,   49,   48,   43,   41,   39,
-       38,   24,   14,   11, 1419, 1419, 1419, 1419, 1419, 1419,
-     1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419,
-
-     1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419,
-     1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419,
-     1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419,
-     1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419,
-     1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419,
-     1419, 1419, 1419, 1419, 1419, 1419
+      163,  183,  163,  182,  187,  200,  205,  191,  210,  317,
+      296,  349,  349,  248,  288,  291,  210,  196,  243,  198,
+      192,  303,  210,  310,  577,  299,  317,  377,  356,  205,
+      367,  377,  200,  203,  203,  203,  248,  288,  291,  296,
+      203,  203,  203,  203,  203,  203,  298,  298,  299,  303,
+      355,  402,  310,  381,  396,  298,  356,  381,  738,  396,
+      355,  577,  414,  203,  203,  203,  203,  203,  203,  243,
+      523,  337,  243,  308,  308,  308,  337,  560,  560,  402,
+      308,  308,  308,  308,  308,  308,  367,  412,  438,  412,
+      414,  490,  524,  438,  525,  620,  490,  523,  621,  525,
+
+      739,  609,  622,  308,  308,  308,  308,  308,  308,  740,
+      586,  609,  622,  742,  412,  586,  412,  625,  625,  697,
+      524,  621,  337,  620,  743,  698,  697,  337,  413,  413,
+      413,  661,  698,  744,  661,  413,  413,  413,  413,  413,
+      413,  701,  713,  741,  745,  746,  747,  701,  741,  748,
+      749,  750,  586,  753,  754,  755,  756,  759,  413,  413,
+      413,  413,  413,  413,  760,  761,  763,  762,  764,  765,
+      713,  762,  766,  767,  768,  770,  771,  772,  773,  774,
+      775,  776,  777,  778,  779,  780,  781,  782,  783,  784,
+      785,  786,  787,  788,  789,  790,  791,  792,  793,  794,
+
+      795,  796,  798,  799,  800,  801,  802,  803,  791,  805,
+      806,  807,  808,  809,  810,  811,  812,  813,  814,  815,
+      816,  817,  818,  819,  820,  822,  823,  824,  825,  826,
+      827,  828,  829,  806,  830,  831,  805,  833,  834,  835,
+      836,  837,  838,  840,  841,  842,  837,  843,  844,  845,
+      846,  847,  848,  849,  850,  851,  852,  853,  854,  855,
+      858,  859,  860,  862,  863,  864,  866,  867,  868,  854,
+      869,  870,  871,  872,  873,  874,  875,  876,  877,  878,
+      879,  880,  881,  883,  884,  885,  886,  887,  888,  889,
+      890,  891,  892,  894,  893,  895,  896,  837,  897,  898,
+
+      899,  900,  901,  902,  903,  904,  905,  907,  908,  909,
+      910,  911,  912,  913,  914,  915,  916,  917,  918,  919,
+      892,  893,  920,  921,  923,  924,  925,  926,  927,  928,
+      924,  929,  930,  931,  932,  933,  934,  935,  936,  937,
+      938,  939,  940,  941,  942,  943,  944,  945,  946,  947,
+      949,  950,  951,  952,  953,  954,  955,  956,  957,  958,
+      959,  961,  964,  965,  966,  967,  968,  969,  925,  970,
+      971,  972,  973,  974,  975,  976,  977,  978,  979,  980,
+      981,  982,  983,  986,  987,  988,  989,  990,  991,  992,
+      993,  994,  995,  996,  997,  998,  974,  999, 1000, 1003,
+
+     1005, 1007,  975, 1008, 1009, 1010, 1011, 1012, 1013, 1014,
+     1016, 1017, 1018, 1020, 1021, 1022, 1023, 1026, 1028, 1029,
+     1030, 1031, 1032, 1033, 1034, 1035, 1036, 1037, 1038, 1039,
+     1040, 1041, 1042, 1043, 1044, 1045, 1046, 1047, 1048, 1049,
+     1050, 1051, 1052, 1053, 1054, 1056, 1057, 1058, 1059, 1060,
+     1061, 1062, 1063, 1064, 1065, 1067, 1068, 1069, 1070, 1071,
+     1072, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081,
+     1052, 1082, 1084, 1085, 1086, 1087, 1088, 1091, 1092, 1093,
+     1039, 1085, 1094, 1095, 1096, 1097, 1098, 1056, 1099, 1100,
+     1101, 1103, 1104, 1105, 1106, 1107, 1108, 1111, 1114, 1116,
+
+     1117, 1118, 1119, 1120, 1122, 1124, 1125, 1126, 1127, 1128,
+     1129, 1130, 1131, 1133, 1134, 1135, 1136, 1137, 1138, 1139,
+     1140, 1141, 1142, 1143, 1145, 1148, 1120, 1150, 1151, 1152,
+     1153, 1155, 1156, 1157, 1158, 1159, 1160, 1163, 1164, 1166,
+     1167, 1168, 1169, 1170, 1172, 1173, 1174, 1175, 1177, 1179,
+     1180, 1181, 1182, 1183, 1184, 1185, 1186, 1187, 1189, 1191,
+     1192, 1193, 1194, 1195, 1196, 1197, 1198, 1198, 1199, 1200,
+     1201, 1202, 1203, 1204, 1205, 1206, 1179, 1207, 1208, 1209,
+     1210, 1211, 1212, 1213, 1214, 1215, 1216, 1217, 1218, 1220,
+     1222, 1223, 1224, 1225, 1228, 1229, 1232, 1234, 1235, 1236,
+
+     1237, 1238, 1234, 1239, 1240, 1241, 1242, 1244, 1245, 1248,
+     1249, 1250, 1251, 1253, 1254, 1255, 1256, 1257, 1258, 1259,
+     1224, 1260, 1261, 1262, 1199, 1263, 1264, 1265, 1267, 1268,
+     1269, 1271, 1273, 1274, 1275, 1276, 1277, 1279, 1280, 1281,
+     1283, 1284, 1285, 1286, 1287, 1288, 1289, 1290, 1291, 1292,
+     1293, 1294, 1295, 1297, 1298, 1300, 1302, 1304, 1305, 1306,
+     1307, 1309, 1310, 1311, 1312, 1313, 1314, 1316, 1318, 1319,
+     1320, 1321, 1322, 1323, 1324, 1325, 1326, 1328, 1329, 1330,
+     1331, 1332, 1333, 1334, 1335, 1336, 1339, 1340, 1341, 1342,
+     1343, 1345, 1346, 1347, 1348, 1349, 1350, 1351, 1352, 1353,
+
+     1354, 1355, 1356, 1357, 1358, 1360, 1361, 1364, 1365, 1366,
+     1367, 1368, 1369, 1371, 1373, 1374, 1376, 1377, 1379, 1380,
+     1382, 1384, 1385, 1386, 1387, 1388, 1389, 1390, 1391, 1392,
+     1393, 1394, 1395, 1396, 1397, 1398, 1399, 1400, 1401, 1402,
+     1403, 1404, 1405, 1406, 1407, 1408, 1409, 1410, 1412, 1415,
+     1416, 1417, 1418, 1419, 1420, 1424, 1425, 1426, 1427, 1429,
+     1430, 1432, 1433, 1434, 1435, 1436, 1438, 1439, 1442, 1442,
+     1442, 1442, 1442, 1443, 1443, 1443, 1443, 1443, 1444, 1450,
+     1444, 1444, 1444, 1445, 1451, 1445, 1452, 1445, 1446, 1446,
+     1446, 1446, 1446, 1447, 1447, 1447, 1447, 1447, 1448, 1453,
+
+     1448, 1448, 1448, 1449, 1449, 1449,  728,  727,  726,  725,
+      724,  723,  722,  721,  720,  719,  718,  716,  715,  714,
+      712,  710,  709,  708,  707,  706,  705,  704,  703,  700,
+      699,  696,  695,  694,  693,  692,  691,  690,  689,  688,
+      687,  686,  685,  684,  683,  682,  681,  680,  678,  677,
+      676,  675,  674,  673,  672,  671,  669,  668,  667,  666,
+      665,  664,  662,  660,  659,  658,  657,  656,  655,  654,
+      653,  652,  651,  650,  649,  648,  647,  646,  645,  644,
+      643,  642,  641,  640,  639,  638,  637,  636,  635,  634,
+      633,  632,  631,  630,  629,  628,  627,  626,  624,  623,
+
+      619,  618,  617,  614,  613,  612,  611,  610,  607,  606,
+      605,  604,  603,  602,  601,  600,  599,  598,  597,  596,
+      594,  593,  592,  591,  590,  589,  588,  587,  585,  584,
+      582,  581,  580,  579,  578,  576,  575,  574,  572,  571,
+      569,  568,  567,  566,  565,  564,  563,  562,  561,  559,
+      558,  557,  556,  555,  553,  552,  551,  550,  549,  548,
+      547,  545,  544,  543,  542,  541,  540,  539,  538,  537,
+      536,  535,  534,  533,  532,  531,  530,  529,  528,  527,
+      521,  519,  516,  515,  513,  512,  511,  509,  505,  504,
+      503,  502,  501,  500,  499,  498,  497,  496,  495,  494,
+
+      493,  492,  491,  489,  488,  487,  486,  485,  484,  483,
+      482,  481,  480,  479,  477,  475,  474,  473,  472,  471,
+      470,  469,  468,  467,  466,  465,  464,  462,  461,  460,
+      459,  458,  457,  456,  455,  454,  453,  452,  451,  450,
+      449,  448,  447,  446,  445,  444,  443,  441,  440,  439,
+      437,  436,  435,  434,  433,  432,  430,  429,  428,  427,
+      426,  425,  423,  422,  421,  420,  419,  418,  416,  415,
+      410,  409,  407,  406,  405,  404,  403,  400,  397,  395,
+      394,  393,  392,  390,  389,  388,  387,  386,  385,  384,
+      383,  382,  380,  379,  378,  376,  375,  374,  373,  372,
+
+      371,  369,  368,  366,  365,  364,  363,  362,  361,  360,
+      359,  358,  354,  353,  352,  351,  350,  348,  347,  346,
+      345,  344,  343,  342,  341,  340,  339,  338,  336,  335,
+      334,  333,  332,  331,  330,  329,  328,  327,  326,  325,
+      323,  322,  321,  320,  319,  316,  315,  314,  313,  312,
+      311,  307,  305,  302,  300,  297,  294,  287,  286,  285,
+      284,  283,  282,  280,  279,  278,  277,  276,  275,  274,
+      273,  272,  271,  270,  269,  268,  266,  265,  264,  263,
+      262,  261,  260,  259,  258,  257,  256,  255,  254,  253,
+      251,  250,  249,  247,  246,  245,  244,  242,  241,  240,
+
+      239,  238,  237,  236,  235,  234,  232,  231,  230,  229,
+      228,  227,  226,  225,  224,  223,  222,  221,  220,  219,
+      218,  217,  216,  215,  214,  213,  212,  211,  209,  208,
+      207,  206,  204,  201,  199,  197,  195,  194,  189,  188,
+      184,  176,  175,  174,  173,  172,  171,  169,  168,  167,
+      166,  164,  162,  161,  160,  158,  157,  155,  154,  153,
+      152,  151,  149,  148,  147,  146,  144,  143,  142,  141,
+      140,  139,  138,  136,  135,  133,  129,  128,  127,  125,
+      124,  123,  121,  120,  116,  110,  106,  105,  104,   98,
+       97,   78,   73,   67,   64,   50,   49,   48,   43,   41,
+
+       39,   38,   24,   14,   11, 1441, 1441, 1441, 1441, 1441,
+     1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441,
+     1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441,
+     1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441,
+     1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441,
+     1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441,
+     1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441,
+     1441, 1441, 1441, 1441, 1441, 1441, 1441
     } ;
 
 static yy_state_type yy_last_accepting_state;
@@ -1650,27 +1661,27 @@ static char *yy_last_accepting_cpos;
 extern int yy_flex_debug;
 int yy_flex_debug = 1;
 
-static const flex_int16_t yy_rule_linenum[175] =
+static const flex_int16_t yy_rule_linenum[177] =
     {   0,
       147,  149,  151,  156,  157,  162,  163,  164,  176,  179,
       184,  191,  200,  209,  218,  227,  236,  245,  254,  263,
       272,  281,  290,  299,  308,  317,  326,  335,  345,  355,
       365,  375,  385,  394,  404,  414,  424,  434,  443,  452,
-      461,  470,  479,  488,  497,  506,  515,  524,  536,  545,
-      554,  563,  572,  582,  592,  602,  612,  623,  633,  643,
-      653,  663,  673,  683,  693,  703,  713,  724,  735,  746,
-      757,  766,  776,  785,  794,  809,  824,  833,  842,  851,
-      860,  869,  878,  887,  896,  905,  914,  936,  958,  967,
-      977,  987,  996, 1006, 1016, 1025, 1034, 1043, 1052, 1062,
-
-     1071, 1080, 1089, 1098, 1107, 1116, 1125, 1134, 1143, 1153,
-     1162, 1171, 1181, 1193, 1206, 1215, 1224, 1234, 1244, 1253,
-     1264, 1274, 1283, 1293, 1303, 1312, 1321, 1330, 1339, 1349,
-     1358, 1368, 1377, 1386, 1395, 1404, 1413, 1422, 1431, 1440,
-     1449, 1458, 1467, 1476, 1485, 1494, 1503, 1512, 1521, 1530,
-     1539, 1548, 1557, 1566, 1575, 1584, 1594, 1693, 1698, 1703,
-     1708, 1709, 1710, 1711, 1712, 1713, 1715, 1733, 1746, 1751,
-     1755, 1757, 1759, 1761
+      461,  470,  479,  488,  497,  506,  515,  524,  534,  543,
+      556,  565,  574,  583,  592,  603,  614,  625,  636,  648,
+      659,  670,  681,  692,  703,  714,  725,  736,  747,  758,
+      769,  780,  791,  800,  810,  819,  828,  843,  859,  868,
+      877,  886,  895,  904,  913,  922,  931,  940,  949,  971,
+      993, 1002, 1012, 1022, 1031, 1041, 1051, 1060, 1069, 1078,
+
+     1087, 1097, 1106, 1115, 1124, 1133, 1142, 1151, 1160, 1169,
+     1178, 1188, 1197, 1206, 1216, 1228, 1241, 1250, 1259, 1269,
+     1279, 1288, 1299, 1309, 1318, 1328, 1338, 1347, 1356, 1365,
+     1374, 1384, 1393, 1403, 1412, 1421, 1430, 1439, 1448, 1457,
+     1466, 1475, 1484, 1493, 1502, 1511, 1520, 1529, 1538, 1547,
+     1556, 1565, 1574, 1583, 1592, 1601, 1610, 1619, 1629, 1728,
+     1733, 1738, 1743, 1744, 1745, 1746, 1747, 1748, 1750, 1768,
+     1781, 1786, 1790, 1792, 1794, 1796
     } ;
 
 /* The intent behind this definition is that it'll catch
@@ -1723,7 +1734,7 @@ using namespace isc::dhcp;
 
 /* To avoid the call to exit... oops! */
 #define YY_FATAL_ERROR(msg) isc::dhcp::Parser6Context::fatal(msg)
-#line 1726 "dhcp6_lexer.cc"
+#line 1738 "dhcp6_lexer.cc"
 /* noyywrap disables automatic rewinding for the next file to parse. Since we
    always parse only a single string, there's no need to do any wraps. And
    using yywrap requires linking with -lfl, which provides the default yywrap
@@ -1749,8 +1760,8 @@ using namespace isc::dhcp;
    by moving it ahead by yyleng bytes. yyleng specifies the length of the
    currently matched token. */
 #define YY_USER_ACTION  driver.loc_.columns(yyleng);
-#line 1752 "dhcp6_lexer.cc"
-#line 1753 "dhcp6_lexer.cc"
+#line 1764 "dhcp6_lexer.cc"
+#line 1765 "dhcp6_lexer.cc"
 
 #define INITIAL 0
 #define COMMENT 1
@@ -2080,7 +2091,7 @@ YY_DECL
     }
 
 
-#line 2083 "dhcp6_lexer.cc"
+#line 2095 "dhcp6_lexer.cc"
 
        while ( /*CONSTCOND*/1 )                /* loops until end-of-file is reached */
                {
@@ -2109,13 +2120,13 @@ yy_match:
                        while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
                                {
                                yy_current_state = (int) yy_def[yy_current_state];
-                               if ( yy_current_state >= 1420 )
+                               if ( yy_current_state >= 1442 )
                                        yy_c = yy_meta[yy_c];
                                }
                        yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c];
                        ++yy_cp;
                        }
-               while ( yy_current_state != 1419 );
+               while ( yy_current_state != 1441 );
                yy_cp = (yy_last_accepting_cpos);
                yy_current_state = (yy_last_accepting_state);
 
@@ -2134,13 +2145,13 @@ do_action:      /* This label is used only to access EOF actions. */
                        {
                        if ( yy_act == 0 )
                                fprintf( stderr, "--scanner backing up\n" );
-                       else if ( yy_act < 175 )
+                       else if ( yy_act < 177 )
                                fprintf( stderr, "--accepting rule at line %ld (\"%s\")\n",
                                         (long)yy_rule_linenum[yy_act], yytext );
-                       else if ( yy_act == 175 )
+                       else if ( yy_act == 177 )
                                fprintf( stderr, "--accepting default rule (\"%s\")\n",
                                         yytext );
-                       else if ( yy_act == 176 )
+                       else if ( yy_act == 178 )
                                fprintf( stderr, "--(end of buffer or a NUL)\n" );
                        else
                                fprintf( stderr, "--EOF (start condition %d)\n", YY_START );
@@ -2676,6 +2687,30 @@ YY_RULE_SETUP
 case 47:
 YY_RULE_SETUP
 #line 515 "dhcp6_lexer.ll"
+{
+    switch(driver.ctx_) {
+    case isc::dhcp::Parser6Context::DHCP6:
+        return isc::dhcp::Dhcp6Parser::make_CONFIG_CONTROL(driver.loc_);
+    default:
+        return isc::dhcp::Dhcp6Parser::make_STRING("config-control", driver.loc_);
+    }
+}
+       YY_BREAK
+case 48:
+YY_RULE_SETUP
+#line 524 "dhcp6_lexer.ll"
+{
+    switch(driver.ctx_) {
+    case isc::dhcp::Parser6Context::CONFIG_CONTROL:
+        return isc::dhcp::Dhcp6Parser::make_CONFIG_DATABASES(driver.loc_);
+    default:
+        return isc::dhcp::Dhcp6Parser::make_STRING("config-databases", driver.loc_);
+    }
+}
+       YY_BREAK
+case 49:
+YY_RULE_SETUP
+#line 534 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::HOSTS_DATABASE:
@@ -2685,24 +2720,25 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 48:
+case 50:
 YY_RULE_SETUP
-#line 524 "dhcp6_lexer.ll"
+#line 543 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::LEASE_DATABASE:
     case isc::dhcp::Parser6Context::HOSTS_DATABASE:
     case isc::dhcp::Parser6Context::OPTION_DEF:
     case isc::dhcp::Parser6Context::SERVER_ID:
+    case isc::dhcp::Parser6Context::CONFIG_DATABASE:
         return isc::dhcp::Dhcp6Parser::make_TYPE(driver.loc_);
     default:
         return isc::dhcp::Dhcp6Parser::make_STRING("type", driver.loc_);
     }
 }
        YY_BREAK
-case 49:
+case 51:
 YY_RULE_SETUP
-#line 536 "dhcp6_lexer.ll"
+#line 556 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DATABASE_TYPE:
@@ -2712,9 +2748,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 50:
+case 52:
 YY_RULE_SETUP
-#line 545 "dhcp6_lexer.ll"
+#line 565 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DATABASE_TYPE:
@@ -2724,9 +2760,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 51:
+case 53:
 YY_RULE_SETUP
-#line 554 "dhcp6_lexer.ll"
+#line 574 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DATABASE_TYPE:
@@ -2736,9 +2772,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 52:
+case 54:
 YY_RULE_SETUP
-#line 563 "dhcp6_lexer.ll"
+#line 583 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DATABASE_TYPE:
@@ -2748,192 +2784,206 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 53:
+case 55:
 YY_RULE_SETUP
-#line 572 "dhcp6_lexer.ll"
+#line 592 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::LEASE_DATABASE:
     case isc::dhcp::Parser6Context::HOSTS_DATABASE:
+    case isc::dhcp::Parser6Context::CONFIG_DATABASE:
         return isc::dhcp::Dhcp6Parser::make_USER(driver.loc_);
     default:
         return isc::dhcp::Dhcp6Parser::make_STRING("user", driver.loc_);
     }
 }
        YY_BREAK
-case 54:
+case 56:
 YY_RULE_SETUP
-#line 582 "dhcp6_lexer.ll"
+#line 603 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::LEASE_DATABASE:
     case isc::dhcp::Parser6Context::HOSTS_DATABASE:
+    case isc::dhcp::Parser6Context::CONFIG_DATABASE:
         return isc::dhcp::Dhcp6Parser::make_PASSWORD(driver.loc_);
     default:
         return isc::dhcp::Dhcp6Parser::make_STRING("password", driver.loc_);
     }
 }
        YY_BREAK
-case 55:
+case 57:
 YY_RULE_SETUP
-#line 592 "dhcp6_lexer.ll"
+#line 614 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::LEASE_DATABASE:
     case isc::dhcp::Parser6Context::HOSTS_DATABASE:
+    case isc::dhcp::Parser6Context::CONFIG_DATABASE:
         return isc::dhcp::Dhcp6Parser::make_HOST(driver.loc_);
     default:
         return isc::dhcp::Dhcp6Parser::make_STRING("host", driver.loc_);
     }
 }
        YY_BREAK
-case 56:
+case 58:
 YY_RULE_SETUP
-#line 602 "dhcp6_lexer.ll"
+#line 625 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::LEASE_DATABASE:
     case isc::dhcp::Parser6Context::HOSTS_DATABASE:
+    case isc::dhcp::Parser6Context::CONFIG_DATABASE:
         return isc::dhcp::Dhcp6Parser::make_PORT(driver.loc_);
     default:
         return isc::dhcp::Dhcp6Parser::make_STRING("port", driver.loc_);
     }
 }
        YY_BREAK
-case 57:
+case 59:
 YY_RULE_SETUP
-#line 612 "dhcp6_lexer.ll"
+#line 636 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::LEASE_DATABASE:
     case isc::dhcp::Parser6Context::HOSTS_DATABASE:
     case isc::dhcp::Parser6Context::SERVER_ID:
+    case isc::dhcp::Parser6Context::CONFIG_DATABASE:
         return isc::dhcp::Dhcp6Parser::make_PERSIST(driver.loc_);
     default:
         return isc::dhcp::Dhcp6Parser::make_STRING("persist", driver.loc_);
     }
 }
        YY_BREAK
-case 58:
+case 60:
 YY_RULE_SETUP
-#line 623 "dhcp6_lexer.ll"
+#line 648 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::LEASE_DATABASE:
     case isc::dhcp::Parser6Context::HOSTS_DATABASE:
+    case isc::dhcp::Parser6Context::CONFIG_DATABASE:
         return isc::dhcp::Dhcp6Parser::make_LFC_INTERVAL(driver.loc_);
     default:
         return isc::dhcp::Dhcp6Parser::make_STRING("lfc-interval", driver.loc_);
     }
 }
        YY_BREAK
-case 59:
+case 61:
 YY_RULE_SETUP
-#line 633 "dhcp6_lexer.ll"
+#line 659 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::LEASE_DATABASE:
     case isc::dhcp::Parser6Context::HOSTS_DATABASE:
+    case isc::dhcp::Parser6Context::CONFIG_DATABASE:
         return isc::dhcp::Dhcp6Parser::make_CONNECT_TIMEOUT(driver.loc_);
     default:
         return isc::dhcp::Dhcp6Parser::make_STRING("connect-timeout", driver.loc_);
     }
 }
        YY_BREAK
-case 60:
+case 62:
 YY_RULE_SETUP
-#line 643 "dhcp6_lexer.ll"
+#line 670 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::LEASE_DATABASE:
     case isc::dhcp::Parser6Context::HOSTS_DATABASE:
+    case isc::dhcp::Parser6Context::CONFIG_DATABASE:
         return isc::dhcp::Dhcp6Parser::make_KEYSPACE(driver.loc_);
     default:
         return isc::dhcp::Dhcp6Parser::make_STRING("keyspace", driver.loc_);
     }
 }
        YY_BREAK
-case 61:
+case 63:
 YY_RULE_SETUP
-#line 653 "dhcp6_lexer.ll"
+#line 681 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::LEASE_DATABASE:
     case isc::dhcp::Parser6Context::HOSTS_DATABASE:
+    case isc::dhcp::Parser6Context::CONFIG_DATABASE:
         return isc::dhcp::Dhcp6Parser::make_RECONNECT_WAIT_TIME(driver.loc_);
     default:
         return isc::dhcp::Dhcp6Parser::make_STRING("reconnect-wait-time", driver.loc_);
     }
 }
        YY_BREAK
-case 62:
+case 64:
 YY_RULE_SETUP
-#line 663 "dhcp6_lexer.ll"
+#line 692 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::LEASE_DATABASE:
     case isc::dhcp::Parser6Context::HOSTS_DATABASE:
+    case isc::dhcp::Parser6Context::CONFIG_DATABASE:
         return isc::dhcp::Dhcp6Parser::make_REQUEST_TIMEOUT(driver.loc_);
     default:
         return isc::dhcp::Dhcp6Parser::make_STRING("request-timeout", driver.loc_);
     }
 }
        YY_BREAK
-case 63:
+case 65:
 YY_RULE_SETUP
-#line 673 "dhcp6_lexer.ll"
+#line 703 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::LEASE_DATABASE:
     case isc::dhcp::Parser6Context::HOSTS_DATABASE:
+    case isc::dhcp::Parser6Context::CONFIG_DATABASE:
         return isc::dhcp::Dhcp6Parser::make_TCP_KEEPALIVE(driver.loc_);
     default:
         return isc::dhcp::Dhcp6Parser::make_STRING("tcp-keepalive", driver.loc_);
     }
 }
        YY_BREAK
-case 64:
+case 66:
 YY_RULE_SETUP
-#line 683 "dhcp6_lexer.ll"
+#line 714 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::LEASE_DATABASE:
     case isc::dhcp::Parser6Context::HOSTS_DATABASE:
+    case isc::dhcp::Parser6Context::CONFIG_DATABASE:
         return isc::dhcp::Dhcp6Parser::make_TCP_NODELAY(driver.loc_);
     default:
         return isc::dhcp::Dhcp6Parser::make_STRING("tcp-nodelay", driver.loc_);
     }
 }
        YY_BREAK
-case 65:
+case 67:
 YY_RULE_SETUP
-#line 693 "dhcp6_lexer.ll"
+#line 725 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::LEASE_DATABASE:
     case isc::dhcp::Parser6Context::HOSTS_DATABASE:
+    case isc::dhcp::Parser6Context::CONFIG_DATABASE:
         return isc::dhcp::Dhcp6Parser::make_CONTACT_POINTS(driver.loc_);
     default:
         return isc::dhcp::Dhcp6Parser::make_STRING("contact-points", driver.loc_);
     }
 }
        YY_BREAK
-case 66:
+case 68:
 YY_RULE_SETUP
-#line 703 "dhcp6_lexer.ll"
+#line 736 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::LEASE_DATABASE:
     case isc::dhcp::Parser6Context::HOSTS_DATABASE:
+    case isc::dhcp::Parser6Context::CONFIG_DATABASE:
         return isc::dhcp::Dhcp6Parser::make_MAX_RECONNECT_TRIES(driver.loc_);
     default:
         return isc::dhcp::Dhcp6Parser::make_STRING("max-reconnect-tries", driver.loc_);
     }
 }
        YY_BREAK
-case 67:
+case 69:
 YY_RULE_SETUP
-#line 713 "dhcp6_lexer.ll"
+#line 747 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DHCP6:
@@ -2945,9 +2995,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 68:
+case 70:
 YY_RULE_SETUP
-#line 724 "dhcp6_lexer.ll"
+#line 758 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DHCP6:
@@ -2959,9 +3009,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 69:
+case 71:
 YY_RULE_SETUP
-#line 735 "dhcp6_lexer.ll"
+#line 769 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DHCP6:
@@ -2973,9 +3023,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 70:
+case 72:
 YY_RULE_SETUP
-#line 746 "dhcp6_lexer.ll"
+#line 780 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DHCP6:
@@ -2987,9 +3037,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 71:
+case 73:
 YY_RULE_SETUP
-#line 757 "dhcp6_lexer.ll"
+#line 791 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DHCP6:
@@ -2999,9 +3049,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 72:
+case 74:
 YY_RULE_SETUP
-#line 766 "dhcp6_lexer.ll"
+#line 800 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DHCP6:
@@ -3012,9 +3062,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 73:
+case 75:
 YY_RULE_SETUP
-#line 776 "dhcp6_lexer.ll"
+#line 810 "dhcp6_lexer.ll"
 {
     switch (driver.ctx_) {
     case isc::dhcp::Parser6Context::DHCP6:
@@ -3024,9 +3074,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 74:
+case 76:
 YY_RULE_SETUP
-#line 785 "dhcp6_lexer.ll"
+#line 819 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DHCP6:
@@ -3036,9 +3086,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 75:
+case 77:
 YY_RULE_SETUP
-#line 794 "dhcp6_lexer.ll"
+#line 828 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DHCP6:
@@ -3054,9 +3104,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 76:
+case 78:
 YY_RULE_SETUP
-#line 809 "dhcp6_lexer.ll"
+#line 843 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::LEASE_DATABASE:
@@ -3066,15 +3116,16 @@ YY_RULE_SETUP
     case isc::dhcp::Parser6Context::CLIENT_CLASSES:
     case isc::dhcp::Parser6Context::LOGGERS:
     case isc::dhcp::Parser6Context::SHARED_NETWORK:
+    case isc::dhcp::Parser6Context::CONFIG_DATABASE:
         return isc::dhcp::Dhcp6Parser::make_NAME(driver.loc_);
     default:
         return isc::dhcp::Dhcp6Parser::make_STRING("name", driver.loc_);
     }
 }
        YY_BREAK
-case 77:
+case 79:
 YY_RULE_SETUP
-#line 824 "dhcp6_lexer.ll"
+#line 859 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::OPTION_DATA:
@@ -3084,9 +3135,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 78:
+case 80:
 YY_RULE_SETUP
-#line 833 "dhcp6_lexer.ll"
+#line 868 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::OPTION_DATA:
@@ -3096,9 +3147,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 79:
+case 81:
 YY_RULE_SETUP
-#line 842 "dhcp6_lexer.ll"
+#line 877 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::SUBNET6:
@@ -3108,9 +3159,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 80:
+case 82:
 YY_RULE_SETUP
-#line 851 "dhcp6_lexer.ll"
+#line 886 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::SUBNET6:
@@ -3120,9 +3171,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 81:
+case 83:
 YY_RULE_SETUP
-#line 860 "dhcp6_lexer.ll"
+#line 895 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::PD_POOLS:
@@ -3132,9 +3183,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 82:
+case 84:
 YY_RULE_SETUP
-#line 869 "dhcp6_lexer.ll"
+#line 904 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::PD_POOLS:
@@ -3144,9 +3195,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 83:
+case 85:
 YY_RULE_SETUP
-#line 878 "dhcp6_lexer.ll"
+#line 913 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::PD_POOLS:
@@ -3156,9 +3207,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 84:
+case 86:
 YY_RULE_SETUP
-#line 887 "dhcp6_lexer.ll"
+#line 922 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::PD_POOLS:
@@ -3168,9 +3219,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 85:
+case 87:
 YY_RULE_SETUP
-#line 896 "dhcp6_lexer.ll"
+#line 931 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::PD_POOLS:
@@ -3180,9 +3231,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 86:
+case 88:
 YY_RULE_SETUP
-#line 905 "dhcp6_lexer.ll"
+#line 940 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::POOLS:
@@ -3192,9 +3243,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 87:
+case 89:
 YY_RULE_SETUP
-#line 914 "dhcp6_lexer.ll"
+#line 949 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DHCP6:
@@ -3217,9 +3268,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 88:
+case 90:
 YY_RULE_SETUP
-#line 936 "dhcp6_lexer.ll"
+#line 971 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DHCP6:
@@ -3242,9 +3293,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 89:
+case 91:
 YY_RULE_SETUP
-#line 958 "dhcp6_lexer.ll"
+#line 993 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::SUBNET6:
@@ -3254,9 +3305,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 90:
+case 92:
 YY_RULE_SETUP
-#line 967 "dhcp6_lexer.ll"
+#line 1002 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::SUBNET6:
@@ -3267,9 +3318,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 91:
+case 93:
 YY_RULE_SETUP
-#line 977 "dhcp6_lexer.ll"
+#line 1012 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::SUBNET6:
@@ -3280,9 +3331,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 92:
+case 94:
 YY_RULE_SETUP
-#line 987 "dhcp6_lexer.ll"
+#line 1022 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::SUBNET6:
@@ -3292,9 +3343,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 93:
+case 95:
 YY_RULE_SETUP
-#line 996 "dhcp6_lexer.ll"
+#line 1031 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::SUBNET6:
@@ -3305,9 +3356,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 94:
+case 96:
 YY_RULE_SETUP
-#line 1006 "dhcp6_lexer.ll"
+#line 1041 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::SUBNET6:
@@ -3318,9 +3369,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 95:
+case 97:
 YY_RULE_SETUP
-#line 1016 "dhcp6_lexer.ll"
+#line 1051 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::RESERVATION_MODE:
@@ -3330,9 +3381,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 96:
+case 98:
 YY_RULE_SETUP
-#line 1025 "dhcp6_lexer.ll"
+#line 1060 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::RESERVATION_MODE:
@@ -3342,9 +3393,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 97:
+case 99:
 YY_RULE_SETUP
-#line 1034 "dhcp6_lexer.ll"
+#line 1069 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::RESERVATION_MODE:
@@ -3354,9 +3405,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 98:
+case 100:
 YY_RULE_SETUP
-#line 1043 "dhcp6_lexer.ll"
+#line 1078 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::RESERVATION_MODE:
@@ -3366,9 +3417,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 99:
+case 101:
 YY_RULE_SETUP
-#line 1052 "dhcp6_lexer.ll"
+#line 1087 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::OPTION_DEF:
@@ -3379,9 +3430,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 100:
+case 102:
 YY_RULE_SETUP
-#line 1062 "dhcp6_lexer.ll"
+#line 1097 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DHCP6:
@@ -3391,9 +3442,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 101:
+case 103:
 YY_RULE_SETUP
-#line 1071 "dhcp6_lexer.ll"
+#line 1106 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DHCP6:
@@ -3403,9 +3454,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 102:
+case 104:
 YY_RULE_SETUP
-#line 1080 "dhcp6_lexer.ll"
+#line 1115 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DHCP6:
@@ -3415,9 +3466,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 103:
+case 105:
 YY_RULE_SETUP
-#line 1089 "dhcp6_lexer.ll"
+#line 1124 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::CONFIG:
@@ -3427,9 +3478,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 104:
+case 106:
 YY_RULE_SETUP
-#line 1098 "dhcp6_lexer.ll"
+#line 1133 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::LOGGING:
@@ -3439,9 +3490,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 105:
+case 107:
 YY_RULE_SETUP
-#line 1107 "dhcp6_lexer.ll"
+#line 1142 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::LOGGERS:
@@ -3451,9 +3502,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 106:
+case 108:
 YY_RULE_SETUP
-#line 1116 "dhcp6_lexer.ll"
+#line 1151 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::OUTPUT_OPTIONS:
@@ -3463,9 +3514,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 107:
+case 109:
 YY_RULE_SETUP
-#line 1125 "dhcp6_lexer.ll"
+#line 1160 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::OUTPUT_OPTIONS:
@@ -3475,9 +3526,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 108:
+case 110:
 YY_RULE_SETUP
-#line 1134 "dhcp6_lexer.ll"
+#line 1169 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::OUTPUT_OPTIONS:
@@ -3487,9 +3538,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 109:
+case 111:
 YY_RULE_SETUP
-#line 1143 "dhcp6_lexer.ll"
+#line 1178 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::OUTPUT_OPTIONS:
@@ -3499,9 +3550,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 110:
+case 112:
 YY_RULE_SETUP
-#line 1153 "dhcp6_lexer.ll"
+#line 1188 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::LOGGERS:
@@ -3511,9 +3562,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 111:
+case 113:
 YY_RULE_SETUP
-#line 1162 "dhcp6_lexer.ll"
+#line 1197 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::LOGGERS:
@@ -3523,9 +3574,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 112:
+case 114:
 YY_RULE_SETUP
-#line 1171 "dhcp6_lexer.ll"
+#line 1206 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DHCP6:
@@ -3536,9 +3587,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 113:
+case 115:
 YY_RULE_SETUP
-#line 1181 "dhcp6_lexer.ll"
+#line 1216 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::SUBNET6:
@@ -3551,9 +3602,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 114:
+case 116:
 YY_RULE_SETUP
-#line 1193 "dhcp6_lexer.ll"
+#line 1228 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::SUBNET6:
@@ -3567,9 +3618,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 115:
+case 117:
 YY_RULE_SETUP
-#line 1206 "dhcp6_lexer.ll"
+#line 1241 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::CLIENT_CLASSES:
@@ -3579,9 +3630,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 116:
+case 118:
 YY_RULE_SETUP
-#line 1215 "dhcp6_lexer.ll"
+#line 1250 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::CLIENT_CLASSES:
@@ -3591,9 +3642,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 117:
+case 119:
 YY_RULE_SETUP
-#line 1224 "dhcp6_lexer.ll"
+#line 1259 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DHCP6:
@@ -3604,9 +3655,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 118:
+case 120:
 YY_RULE_SETUP
-#line 1234 "dhcp6_lexer.ll"
+#line 1269 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::RESERVATIONS:
@@ -3617,9 +3668,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 119:
+case 121:
 YY_RULE_SETUP
-#line 1244 "dhcp6_lexer.ll"
+#line 1279 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::RESERVATIONS:
@@ -3629,9 +3680,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 120:
+case 122:
 YY_RULE_SETUP
-#line 1253 "dhcp6_lexer.ll"
+#line 1288 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::MAC_SOURCES:
@@ -3643,9 +3694,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 121:
+case 123:
 YY_RULE_SETUP
-#line 1264 "dhcp6_lexer.ll"
+#line 1299 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::HOST_RESERVATION_IDENTIFIERS:
@@ -3656,9 +3707,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 122:
+case 124:
 YY_RULE_SETUP
-#line 1274 "dhcp6_lexer.ll"
+#line 1309 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::RESERVATIONS:
@@ -3668,9 +3719,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 123:
+case 125:
 YY_RULE_SETUP
-#line 1283 "dhcp6_lexer.ll"
+#line 1318 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::HOST_RESERVATION_IDENTIFIERS:
@@ -3681,9 +3732,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 124:
+case 126:
 YY_RULE_SETUP
-#line 1293 "dhcp6_lexer.ll"
+#line 1328 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::OPTION_DEF:
@@ -3694,9 +3745,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 125:
+case 127:
 YY_RULE_SETUP
-#line 1303 "dhcp6_lexer.ll"
+#line 1338 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::OPTION_DATA:
@@ -3706,9 +3757,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 126:
+case 128:
 YY_RULE_SETUP
-#line 1312 "dhcp6_lexer.ll"
+#line 1347 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::OPTION_DEF:
@@ -3718,9 +3769,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 127:
+case 129:
 YY_RULE_SETUP
-#line 1321 "dhcp6_lexer.ll"
+#line 1356 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::OPTION_DEF:
@@ -3730,9 +3781,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 128:
+case 130:
 YY_RULE_SETUP
-#line 1330 "dhcp6_lexer.ll"
+#line 1365 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::OPTION_DEF:
@@ -3742,9 +3793,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 129:
+case 131:
 YY_RULE_SETUP
-#line 1339 "dhcp6_lexer.ll"
+#line 1374 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::SUBNET6:
@@ -3755,9 +3806,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 130:
+case 132:
 YY_RULE_SETUP
-#line 1349 "dhcp6_lexer.ll"
+#line 1384 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::RELAY:
@@ -3767,9 +3818,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 131:
+case 133:
 YY_RULE_SETUP
-#line 1358 "dhcp6_lexer.ll"
+#line 1393 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DHCP6:
@@ -3779,9 +3830,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 132:
+case 134:
 YY_RULE_SETUP
-#line 1368 "dhcp6_lexer.ll"
+#line 1403 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::HOOKS_LIBRARIES:
@@ -3791,9 +3842,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 133:
+case 135:
 YY_RULE_SETUP
-#line 1377 "dhcp6_lexer.ll"
+#line 1412 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::HOOKS_LIBRARIES:
@@ -3803,9 +3854,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 134:
+case 136:
 YY_RULE_SETUP
-#line 1386 "dhcp6_lexer.ll"
+#line 1421 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DHCP6:
@@ -3815,9 +3866,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 135:
+case 137:
 YY_RULE_SETUP
-#line 1395 "dhcp6_lexer.ll"
+#line 1430 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DUID_TYPE:
@@ -3827,9 +3878,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 136:
+case 138:
 YY_RULE_SETUP
-#line 1404 "dhcp6_lexer.ll"
+#line 1439 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DUID_TYPE:
@@ -3839,9 +3890,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 137:
+case 139:
 YY_RULE_SETUP
-#line 1413 "dhcp6_lexer.ll"
+#line 1448 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DUID_TYPE:
@@ -3851,9 +3902,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 138:
+case 140:
 YY_RULE_SETUP
-#line 1422 "dhcp6_lexer.ll"
+#line 1457 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::SERVER_ID:
@@ -3863,9 +3914,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 139:
+case 141:
 YY_RULE_SETUP
-#line 1431 "dhcp6_lexer.ll"
+#line 1466 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::SERVER_ID:
@@ -3875,9 +3926,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 140:
+case 142:
 YY_RULE_SETUP
-#line 1440 "dhcp6_lexer.ll"
+#line 1475 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::SERVER_ID:
@@ -3887,9 +3938,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 141:
+case 143:
 YY_RULE_SETUP
-#line 1449 "dhcp6_lexer.ll"
+#line 1484 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::SERVER_ID:
@@ -3899,9 +3950,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 142:
+case 144:
 YY_RULE_SETUP
-#line 1458 "dhcp6_lexer.ll"
+#line 1493 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DHCP6:
@@ -3911,9 +3962,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 143:
+case 145:
 YY_RULE_SETUP
-#line 1467 "dhcp6_lexer.ll"
+#line 1502 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::EXPIRED_LEASES_PROCESSING:
@@ -3923,9 +3974,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 144:
+case 146:
 YY_RULE_SETUP
-#line 1476 "dhcp6_lexer.ll"
+#line 1511 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::EXPIRED_LEASES_PROCESSING:
@@ -3935,9 +3986,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 145:
+case 147:
 YY_RULE_SETUP
-#line 1485 "dhcp6_lexer.ll"
+#line 1520 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::EXPIRED_LEASES_PROCESSING:
@@ -3947,9 +3998,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 146:
+case 148:
 YY_RULE_SETUP
-#line 1494 "dhcp6_lexer.ll"
+#line 1529 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::EXPIRED_LEASES_PROCESSING:
@@ -3959,9 +4010,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 147:
+case 149:
 YY_RULE_SETUP
-#line 1503 "dhcp6_lexer.ll"
+#line 1538 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::EXPIRED_LEASES_PROCESSING:
@@ -3971,9 +4022,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 148:
+case 150:
 YY_RULE_SETUP
-#line 1512 "dhcp6_lexer.ll"
+#line 1547 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::EXPIRED_LEASES_PROCESSING:
@@ -3983,9 +4034,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 149:
+case 151:
 YY_RULE_SETUP
-#line 1521 "dhcp6_lexer.ll"
+#line 1556 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DHCP6:
@@ -3995,9 +4046,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 150:
+case 152:
 YY_RULE_SETUP
-#line 1530 "dhcp6_lexer.ll"
+#line 1565 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DHCP6:
@@ -4007,9 +4058,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 151:
+case 153:
 YY_RULE_SETUP
-#line 1539 "dhcp6_lexer.ll"
+#line 1574 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::CONTROL_SOCKET:
@@ -4019,9 +4070,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 152:
+case 154:
 YY_RULE_SETUP
-#line 1548 "dhcp6_lexer.ll"
+#line 1583 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::CONTROL_SOCKET:
@@ -4031,9 +4082,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 153:
+case 155:
 YY_RULE_SETUP
-#line 1557 "dhcp6_lexer.ll"
+#line 1592 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DHCP6:
@@ -4043,9 +4094,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 154:
+case 156:
 YY_RULE_SETUP
-#line 1566 "dhcp6_lexer.ll"
+#line 1601 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::CONFIG:
@@ -4055,9 +4106,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 155:
+case 157:
 YY_RULE_SETUP
-#line 1575 "dhcp6_lexer.ll"
+#line 1610 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::CONFIG:
@@ -4067,9 +4118,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 156:
+case 158:
 YY_RULE_SETUP
-#line 1584 "dhcp6_lexer.ll"
+#line 1619 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::CONFIG:
@@ -4079,9 +4130,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 157:
+case 159:
 YY_RULE_SETUP
-#line 1594 "dhcp6_lexer.ll"
+#line 1629 "dhcp6_lexer.ll"
 {
     /* A string has been matched. It contains the actual string and single quotes.
        We need to get those quotes out of the way and just use its content, e.g.
@@ -4181,65 +4232,65 @@ YY_RULE_SETUP
     return isc::dhcp::Dhcp6Parser::make_STRING(decoded, driver.loc_);
 }
        YY_BREAK
-case 158:
-/* rule 158 can match eol */
+case 160:
+/* rule 160 can match eol */
 YY_RULE_SETUP
-#line 1693 "dhcp6_lexer.ll"
+#line 1728 "dhcp6_lexer.ll"
 {
     /* Bad string with a forbidden control character inside */
     driver.error(driver.loc_, "Invalid control in " + std::string(yytext));
 }
        YY_BREAK
-case 159:
-/* rule 159 can match eol */
+case 161:
+/* rule 161 can match eol */
 YY_RULE_SETUP
-#line 1698 "dhcp6_lexer.ll"
+#line 1733 "dhcp6_lexer.ll"
 {
     /* Bad string with a bad escape inside */
     driver.error(driver.loc_, "Bad escape in " + std::string(yytext));
 }
        YY_BREAK
-case 160:
+case 162:
 YY_RULE_SETUP
-#line 1703 "dhcp6_lexer.ll"
+#line 1738 "dhcp6_lexer.ll"
 {
     /* Bad string with an open escape at the end */
     driver.error(driver.loc_, "Overflow escape in " + std::string(yytext));
 }
        YY_BREAK
-case 161:
+case 163:
 YY_RULE_SETUP
-#line 1708 "dhcp6_lexer.ll"
+#line 1743 "dhcp6_lexer.ll"
 { return isc::dhcp::Dhcp6Parser::make_LSQUARE_BRACKET(driver.loc_); }
        YY_BREAK
-case 162:
+case 164:
 YY_RULE_SETUP
-#line 1709 "dhcp6_lexer.ll"
+#line 1744 "dhcp6_lexer.ll"
 { return isc::dhcp::Dhcp6Parser::make_RSQUARE_BRACKET(driver.loc_); }
        YY_BREAK
-case 163:
+case 165:
 YY_RULE_SETUP
-#line 1710 "dhcp6_lexer.ll"
+#line 1745 "dhcp6_lexer.ll"
 { return isc::dhcp::Dhcp6Parser::make_LCURLY_BRACKET(driver.loc_); }
        YY_BREAK
-case 164:
+case 166:
 YY_RULE_SETUP
-#line 1711 "dhcp6_lexer.ll"
+#line 1746 "dhcp6_lexer.ll"
 { return isc::dhcp::Dhcp6Parser::make_RCURLY_BRACKET(driver.loc_); }
        YY_BREAK
-case 165:
+case 167:
 YY_RULE_SETUP
-#line 1712 "dhcp6_lexer.ll"
+#line 1747 "dhcp6_lexer.ll"
 { return isc::dhcp::Dhcp6Parser::make_COMMA(driver.loc_); }
        YY_BREAK
-case 166:
+case 168:
 YY_RULE_SETUP
-#line 1713 "dhcp6_lexer.ll"
+#line 1748 "dhcp6_lexer.ll"
 { return isc::dhcp::Dhcp6Parser::make_COLON(driver.loc_); }
        YY_BREAK
-case 167:
+case 169:
 YY_RULE_SETUP
-#line 1715 "dhcp6_lexer.ll"
+#line 1750 "dhcp6_lexer.ll"
 {
     /* An integer was found. */
     std::string tmp(yytext);
@@ -4258,9 +4309,9 @@ YY_RULE_SETUP
     return isc::dhcp::Dhcp6Parser::make_INTEGER(integer, driver.loc_);
 }
        YY_BREAK
-case 168:
+case 170:
 YY_RULE_SETUP
-#line 1733 "dhcp6_lexer.ll"
+#line 1768 "dhcp6_lexer.ll"
 {
     /* A floating point was found. */
     std::string tmp(yytext);
@@ -4274,43 +4325,43 @@ YY_RULE_SETUP
     return isc::dhcp::Dhcp6Parser::make_FLOAT(fp, driver.loc_);
 }
        YY_BREAK
-case 169:
+case 171:
 YY_RULE_SETUP
-#line 1746 "dhcp6_lexer.ll"
+#line 1781 "dhcp6_lexer.ll"
 {
     string tmp(yytext);
     return isc::dhcp::Dhcp6Parser::make_BOOLEAN(tmp == "true", driver.loc_);
 }
        YY_BREAK
-case 170:
+case 172:
 YY_RULE_SETUP
-#line 1751 "dhcp6_lexer.ll"
+#line 1786 "dhcp6_lexer.ll"
 {
    return isc::dhcp::Dhcp6Parser::make_NULL_TYPE(driver.loc_);
 }
        YY_BREAK
-case 171:
+case 173:
 YY_RULE_SETUP
-#line 1755 "dhcp6_lexer.ll"
+#line 1790 "dhcp6_lexer.ll"
 driver.error (driver.loc_, "JSON true reserved keyword is lower case only");
        YY_BREAK
-case 172:
+case 174:
 YY_RULE_SETUP
-#line 1757 "dhcp6_lexer.ll"
+#line 1792 "dhcp6_lexer.ll"
 driver.error (driver.loc_, "JSON false reserved keyword is lower case only");
        YY_BREAK
-case 173:
+case 175:
 YY_RULE_SETUP
-#line 1759 "dhcp6_lexer.ll"
+#line 1794 "dhcp6_lexer.ll"
 driver.error (driver.loc_, "JSON null reserved keyword is lower case only");
        YY_BREAK
-case 174:
+case 176:
 YY_RULE_SETUP
-#line 1761 "dhcp6_lexer.ll"
+#line 1796 "dhcp6_lexer.ll"
 driver.error (driver.loc_, "Invalid character: " + std::string(yytext));
        YY_BREAK
 case YY_STATE_EOF(INITIAL):
-#line 1763 "dhcp6_lexer.ll"
+#line 1798 "dhcp6_lexer.ll"
 {
     if (driver.states_.empty()) {
         return isc::dhcp::Dhcp6Parser::make_END(driver.loc_);
@@ -4334,12 +4385,12 @@ case YY_STATE_EOF(INITIAL):
     BEGIN(DIR_EXIT);
 }
        YY_BREAK
-case 175:
+case 177:
 YY_RULE_SETUP
-#line 1786 "dhcp6_lexer.ll"
+#line 1821 "dhcp6_lexer.ll"
 ECHO;
        YY_BREAK
-#line 4342 "dhcp6_lexer.cc"
+#line 4394 "dhcp6_lexer.cc"
 
        case YY_END_OF_BUFFER:
                {
@@ -4658,7 +4709,7 @@ static int yy_get_next_buffer (void)
                while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
                        {
                        yy_current_state = (int) yy_def[yy_current_state];
-                       if ( yy_current_state >= 1420 )
+                       if ( yy_current_state >= 1442 )
                                yy_c = yy_meta[yy_c];
                        }
                yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c];
@@ -4691,11 +4742,11 @@ static int yy_get_next_buffer (void)
        while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
                {
                yy_current_state = (int) yy_def[yy_current_state];
-               if ( yy_current_state >= 1420 )
+               if ( yy_current_state >= 1442 )
                        yy_c = yy_meta[yy_c];
                }
        yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c];
-       yy_is_jam = (yy_current_state == 1419);
+       yy_is_jam = (yy_current_state == 1441);
 
                return yy_is_jam ? 0 : yy_current_state;
 }
@@ -5444,7 +5495,7 @@ void yyfree (void * ptr )
 
 /* %ok-for-header */
 
-#line 1786 "dhcp6_lexer.ll"
+#line 1821 "dhcp6_lexer.ll"
 
 
 using namespace isc::dhcp;
index cfa04060aaeb89fecdb0c10a364be6968569db4b..a503f66853a053ea143449b1c8c08302d83e1cb6 100644 (file)
@@ -511,6 +511,25 @@ ControlCharacterFill            [^"\\]|\\{JSONEscapeSequence}
     }
 }
 
+\"config-control\" {
+    switch(driver.ctx_) {
+    case isc::dhcp::Parser6Context::DHCP6:
+        return isc::dhcp::Dhcp6Parser::make_CONFIG_CONTROL(driver.loc_);
+    default:
+        return isc::dhcp::Dhcp6Parser::make_STRING("config-control", driver.loc_);
+    }
+}
+
+\"config-databases\" {
+    switch(driver.ctx_) {
+    case isc::dhcp::Parser6Context::CONFIG_CONTROL:
+        return isc::dhcp::Dhcp6Parser::make_CONFIG_DATABASES(driver.loc_);
+    default:
+        return isc::dhcp::Dhcp6Parser::make_STRING("config-databases", driver.loc_);
+    }
+}
+
+
 \"readonly\" {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::HOSTS_DATABASE:
@@ -526,6 +545,7 @@ ControlCharacterFill            [^"\\]|\\{JSONEscapeSequence}
     case isc::dhcp::Parser6Context::HOSTS_DATABASE:
     case isc::dhcp::Parser6Context::OPTION_DEF:
     case isc::dhcp::Parser6Context::SERVER_ID:
+    case isc::dhcp::Parser6Context::CONFIG_DATABASE:
         return isc::dhcp::Dhcp6Parser::make_TYPE(driver.loc_);
     default:
         return isc::dhcp::Dhcp6Parser::make_STRING("type", driver.loc_);
@@ -572,6 +592,7 @@ ControlCharacterFill            [^"\\]|\\{JSONEscapeSequence}
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::LEASE_DATABASE:
     case isc::dhcp::Parser6Context::HOSTS_DATABASE:
+    case isc::dhcp::Parser6Context::CONFIG_DATABASE:
         return isc::dhcp::Dhcp6Parser::make_USER(driver.loc_);
     default:
         return isc::dhcp::Dhcp6Parser::make_STRING("user", driver.loc_);
@@ -582,6 +603,7 @@ ControlCharacterFill            [^"\\]|\\{JSONEscapeSequence}
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::LEASE_DATABASE:
     case isc::dhcp::Parser6Context::HOSTS_DATABASE:
+    case isc::dhcp::Parser6Context::CONFIG_DATABASE:
         return isc::dhcp::Dhcp6Parser::make_PASSWORD(driver.loc_);
     default:
         return isc::dhcp::Dhcp6Parser::make_STRING("password", driver.loc_);
@@ -592,6 +614,7 @@ ControlCharacterFill            [^"\\]|\\{JSONEscapeSequence}
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::LEASE_DATABASE:
     case isc::dhcp::Parser6Context::HOSTS_DATABASE:
+    case isc::dhcp::Parser6Context::CONFIG_DATABASE:
         return isc::dhcp::Dhcp6Parser::make_HOST(driver.loc_);
     default:
         return isc::dhcp::Dhcp6Parser::make_STRING("host", driver.loc_);
@@ -602,6 +625,7 @@ ControlCharacterFill            [^"\\]|\\{JSONEscapeSequence}
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::LEASE_DATABASE:
     case isc::dhcp::Parser6Context::HOSTS_DATABASE:
+    case isc::dhcp::Parser6Context::CONFIG_DATABASE:
         return isc::dhcp::Dhcp6Parser::make_PORT(driver.loc_);
     default:
         return isc::dhcp::Dhcp6Parser::make_STRING("port", driver.loc_);
@@ -613,6 +637,7 @@ ControlCharacterFill            [^"\\]|\\{JSONEscapeSequence}
     case isc::dhcp::Parser6Context::LEASE_DATABASE:
     case isc::dhcp::Parser6Context::HOSTS_DATABASE:
     case isc::dhcp::Parser6Context::SERVER_ID:
+    case isc::dhcp::Parser6Context::CONFIG_DATABASE:
         return isc::dhcp::Dhcp6Parser::make_PERSIST(driver.loc_);
     default:
         return isc::dhcp::Dhcp6Parser::make_STRING("persist", driver.loc_);
@@ -623,6 +648,7 @@ ControlCharacterFill            [^"\\]|\\{JSONEscapeSequence}
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::LEASE_DATABASE:
     case isc::dhcp::Parser6Context::HOSTS_DATABASE:
+    case isc::dhcp::Parser6Context::CONFIG_DATABASE:
         return isc::dhcp::Dhcp6Parser::make_LFC_INTERVAL(driver.loc_);
     default:
         return isc::dhcp::Dhcp6Parser::make_STRING("lfc-interval", driver.loc_);
@@ -633,6 +659,7 @@ ControlCharacterFill            [^"\\]|\\{JSONEscapeSequence}
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::LEASE_DATABASE:
     case isc::dhcp::Parser6Context::HOSTS_DATABASE:
+    case isc::dhcp::Parser6Context::CONFIG_DATABASE:
         return isc::dhcp::Dhcp6Parser::make_CONNECT_TIMEOUT(driver.loc_);
     default:
         return isc::dhcp::Dhcp6Parser::make_STRING("connect-timeout", driver.loc_);
@@ -643,6 +670,7 @@ ControlCharacterFill            [^"\\]|\\{JSONEscapeSequence}
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::LEASE_DATABASE:
     case isc::dhcp::Parser6Context::HOSTS_DATABASE:
+    case isc::dhcp::Parser6Context::CONFIG_DATABASE:
         return isc::dhcp::Dhcp6Parser::make_KEYSPACE(driver.loc_);
     default:
         return isc::dhcp::Dhcp6Parser::make_STRING("keyspace", driver.loc_);
@@ -653,6 +681,7 @@ ControlCharacterFill            [^"\\]|\\{JSONEscapeSequence}
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::LEASE_DATABASE:
     case isc::dhcp::Parser6Context::HOSTS_DATABASE:
+    case isc::dhcp::Parser6Context::CONFIG_DATABASE:
         return isc::dhcp::Dhcp6Parser::make_RECONNECT_WAIT_TIME(driver.loc_);
     default:
         return isc::dhcp::Dhcp6Parser::make_STRING("reconnect-wait-time", driver.loc_);
@@ -663,6 +692,7 @@ ControlCharacterFill            [^"\\]|\\{JSONEscapeSequence}
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::LEASE_DATABASE:
     case isc::dhcp::Parser6Context::HOSTS_DATABASE:
+    case isc::dhcp::Parser6Context::CONFIG_DATABASE:
         return isc::dhcp::Dhcp6Parser::make_REQUEST_TIMEOUT(driver.loc_);
     default:
         return isc::dhcp::Dhcp6Parser::make_STRING("request-timeout", driver.loc_);
@@ -673,6 +703,7 @@ ControlCharacterFill            [^"\\]|\\{JSONEscapeSequence}
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::LEASE_DATABASE:
     case isc::dhcp::Parser6Context::HOSTS_DATABASE:
+    case isc::dhcp::Parser6Context::CONFIG_DATABASE:
         return isc::dhcp::Dhcp6Parser::make_TCP_KEEPALIVE(driver.loc_);
     default:
         return isc::dhcp::Dhcp6Parser::make_STRING("tcp-keepalive", driver.loc_);
@@ -683,6 +714,7 @@ ControlCharacterFill            [^"\\]|\\{JSONEscapeSequence}
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::LEASE_DATABASE:
     case isc::dhcp::Parser6Context::HOSTS_DATABASE:
+    case isc::dhcp::Parser6Context::CONFIG_DATABASE:
         return isc::dhcp::Dhcp6Parser::make_TCP_NODELAY(driver.loc_);
     default:
         return isc::dhcp::Dhcp6Parser::make_STRING("tcp-nodelay", driver.loc_);
@@ -693,6 +725,7 @@ ControlCharacterFill            [^"\\]|\\{JSONEscapeSequence}
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::LEASE_DATABASE:
     case isc::dhcp::Parser6Context::HOSTS_DATABASE:
+    case isc::dhcp::Parser6Context::CONFIG_DATABASE:
         return isc::dhcp::Dhcp6Parser::make_CONTACT_POINTS(driver.loc_);
     default:
         return isc::dhcp::Dhcp6Parser::make_STRING("contact-points", driver.loc_);
@@ -703,6 +736,7 @@ ControlCharacterFill            [^"\\]|\\{JSONEscapeSequence}
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::LEASE_DATABASE:
     case isc::dhcp::Parser6Context::HOSTS_DATABASE:
+    case isc::dhcp::Parser6Context::CONFIG_DATABASE:
         return isc::dhcp::Dhcp6Parser::make_MAX_RECONNECT_TRIES(driver.loc_);
     default:
         return isc::dhcp::Dhcp6Parser::make_STRING("max-reconnect-tries", driver.loc_);
@@ -814,6 +848,7 @@ ControlCharacterFill            [^"\\]|\\{JSONEscapeSequence}
     case isc::dhcp::Parser6Context::CLIENT_CLASSES:
     case isc::dhcp::Parser6Context::LOGGERS:
     case isc::dhcp::Parser6Context::SHARED_NETWORK:
+    case isc::dhcp::Parser6Context::CONFIG_DATABASE:
         return isc::dhcp::Dhcp6Parser::make_NAME(driver.loc_);
     default:
         return isc::dhcp::Dhcp6Parser::make_STRING("name", driver.loc_);
index ec28d62654e3ae5b580aaaa9dba5510d26cdd2ce..12e17e0376ffbbb29b7b24f9662d13489202e4e1 100644 (file)
@@ -1,8 +1,8 @@
-// A Bison parser, made by GNU Bison 3.0.5.
+// A Bison parser, made by GNU Bison 3.0.4.
 
 // Skeleton implementation for Bison LALR(1) parsers in C++
 
-// Copyright (C) 2002-2015, 2018 Free Software Foundation, Inc.
+// Copyright (C) 2002-2015 Free Software Foundation, Inc.
 
 // This program is free software: you can redistribute it and/or modify
 // it under the terms of the GNU General Public License as published by
@@ -35,7 +35,7 @@
 
 // First part of user declarations.
 
-#line 39 "dhcp6_parser.cc" // lalr1.cc:406
+#line 39 "dhcp6_parser.cc" // lalr1.cc:404
 
 # ifndef YY_NULLPTR
 #  if defined __cplusplus && 201103L <= __cplusplus
 
 // User implementation prologue.
 
-#line 53 "dhcp6_parser.cc" // lalr1.cc:414
+#line 53 "dhcp6_parser.cc" // lalr1.cc:412
 // Unqualified %code blocks.
-#line 34 "dhcp6_parser.yy" // lalr1.cc:415
+#line 34 "dhcp6_parser.yy" // lalr1.cc:413
 
 #include <dhcp6/parser_context.h>
 
-#line 59 "dhcp6_parser.cc" // lalr1.cc:415
+#line 59 "dhcp6_parser.cc" // lalr1.cc:413
 
 
 #ifndef YY_
     {                                           \
       *yycdebug_ << Title << ' ';               \
       yy_print_ (*yycdebug_, Symbol);           \
-      *yycdebug_ << '\n';                       \
+      *yycdebug_ << std::endl;                  \
     }                                           \
   } while (false)
 
 #else // !PARSER6_DEBUG
 
 # define YYCDEBUG if (false) std::cerr
-# define YY_SYMBOL_PRINT(Title, Symbol)  YYUSE (Symbol)
-# define YY_REDUCE_PRINT(Rule)           static_cast<void> (0)
-# define YY_STACK_PRINT()                static_cast<void> (0)
+# define YY_SYMBOL_PRINT(Title, Symbol)  YYUSE(Symbol)
+# define YY_REDUCE_PRINT(Rule)           static_cast<void>(0)
+# define YY_STACK_PRINT()                static_cast<void>(0)
 
 #endif // !PARSER6_DEBUG
 
 #define YYERROR         goto yyerrorlab
 #define YYRECOVERING()  (!!yyerrstatus_)
 
-#line 14 "dhcp6_parser.yy" // lalr1.cc:481
+#line 14 "dhcp6_parser.yy" // lalr1.cc:479
 namespace isc { namespace dhcp {
-#line 145 "dhcp6_parser.cc" // lalr1.cc:481
+#line 145 "dhcp6_parser.cc" // lalr1.cc:479
 
   /* Return YYSTR after stripping away unnecessary quotes and
      backslashes, so that it's suitable for yyerror.  The heuristic is
@@ -202,20 +202,24 @@ namespace isc { namespace dhcp {
 
 
   // by_state.
+  inline
   Dhcp6Parser::by_state::by_state ()
     : state (empty_state)
   {}
 
+  inline
   Dhcp6Parser::by_state::by_state (const by_state& other)
     : state (other.state)
   {}
 
+  inline
   void
   Dhcp6Parser::by_state::clear ()
   {
     state = empty_state;
   }
 
+  inline
   void
   Dhcp6Parser::by_state::move (by_state& that)
   {
@@ -223,10 +227,12 @@ namespace isc { namespace dhcp {
     that.clear ();
   }
 
+  inline
   Dhcp6Parser::by_state::by_state (state_type s)
     : state (s)
   {}
 
+  inline
   Dhcp6Parser::symbol_number_type
   Dhcp6Parser::by_state::type_get () const
   {
@@ -236,74 +242,40 @@ namespace isc { namespace dhcp {
       return yystos_[state];
   }
 
+  inline
   Dhcp6Parser::stack_symbol_type::stack_symbol_type ()
   {}
 
-  Dhcp6Parser::stack_symbol_type::stack_symbol_type (const stack_symbol_type& that)
-    : super_type (that.state, that.location)
-  {
-    switch (that.type_get ())
-    {
-      case 185: // value
-      case 189: // map_value
-      case 239: // db_type
-      case 328: // hr_mode
-      case 464: // duid_type
-      case 497: // ncr_protocol_value
-      case 505: // replace_client_name_value
-        value.copy< ElementPtr > (that.value);
-        break;
-
-      case 168: // "boolean"
-        value.copy< bool > (that.value);
-        break;
-
-      case 167: // "floating point"
-        value.copy< double > (that.value);
-        break;
-
-      case 166: // "integer"
-        value.copy< int64_t > (that.value);
-        break;
-
-      case 165: // "constant string"
-        value.copy< std::string > (that.value);
-        break;
-
-      default:
-        break;
-    }
-
-  }
 
+  inline
   Dhcp6Parser::stack_symbol_type::stack_symbol_type (state_type s, symbol_type& that)
     : super_type (s, that.location)
   {
-    switch (that.type_get ())
-    {
-      case 185: // value
-      case 189: // map_value
-      case 239: // db_type
-      case 328: // hr_mode
-      case 464: // duid_type
-      case 497: // ncr_protocol_value
-      case 505: // replace_client_name_value
+      switch (that.type_get ())
+    {
+      case 189: // value
+      case 193: // map_value
+      case 243: // db_type
+      case 332: // hr_mode
+      case 468: // duid_type
+      case 501: // ncr_protocol_value
+      case 509: // replace_client_name_value
         value.move< ElementPtr > (that.value);
         break;
 
-      case 168: // "boolean"
+      case 171: // "boolean"
         value.move< bool > (that.value);
         break;
 
-      case 167: // "floating point"
+      case 170: // "floating point"
         value.move< double > (that.value);
         break;
 
-      case 166: // "integer"
+      case 169: // "integer"
         value.move< int64_t > (that.value);
         break;
 
-      case 165: // "constant string"
+      case 168: // "constant string"
         value.move< std::string > (that.value);
         break;
 
@@ -315,35 +287,36 @@ namespace isc { namespace dhcp {
     that.type = empty_symbol;
   }
 
+  inline
   Dhcp6Parser::stack_symbol_type&
   Dhcp6Parser::stack_symbol_type::operator= (const stack_symbol_type& that)
   {
     state = that.state;
-    switch (that.type_get ())
-    {
-      case 185: // value
-      case 189: // map_value
-      case 239: // db_type
-      case 328: // hr_mode
-      case 464: // duid_type
-      case 497: // ncr_protocol_value
-      case 505: // replace_client_name_value
+      switch (that.type_get ())
+    {
+      case 189: // value
+      case 193: // map_value
+      case 243: // db_type
+      case 332: // hr_mode
+      case 468: // duid_type
+      case 501: // ncr_protocol_value
+      case 509: // replace_client_name_value
         value.copy< ElementPtr > (that.value);
         break;
 
-      case 168: // "boolean"
+      case 171: // "boolean"
         value.copy< bool > (that.value);
         break;
 
-      case 167: // "floating point"
+      case 170: // "floating point"
         value.copy< double > (that.value);
         break;
 
-      case 166: // "integer"
+      case 169: // "integer"
         value.copy< int64_t > (that.value);
         break;
 
-      case 165: // "constant string"
+      case 168: // "constant string"
         value.copy< std::string > (that.value);
         break;
 
@@ -357,6 +330,7 @@ namespace isc { namespace dhcp {
 
 
   template <typename Base>
+  inline
   void
   Dhcp6Parser::yy_destroy_ (const char* yymsg, basic_symbol<Base>& yysym) const
   {
@@ -382,81 +356,81 @@ namespace isc { namespace dhcp {
         << yysym.location << ": ";
     switch (yytype)
     {
-            case 165: // "constant string"
+            case 168: // "constant string"
 
-#line 242 "dhcp6_parser.yy" // lalr1.cc:635
+#line 245 "dhcp6_parser.yy" // lalr1.cc:636
         { yyoutput << yysym.value.template as< std::string > (); }
-#line 390 "dhcp6_parser.cc" // lalr1.cc:635
+#line 364 "dhcp6_parser.cc" // lalr1.cc:636
         break;
 
-      case 166: // "integer"
+      case 169: // "integer"
 
-#line 242 "dhcp6_parser.yy" // lalr1.cc:635
+#line 245 "dhcp6_parser.yy" // lalr1.cc:636
         { yyoutput << yysym.value.template as< int64_t > (); }
-#line 397 "dhcp6_parser.cc" // lalr1.cc:635
+#line 371 "dhcp6_parser.cc" // lalr1.cc:636
         break;
 
-      case 167: // "floating point"
+      case 170: // "floating point"
 
-#line 242 "dhcp6_parser.yy" // lalr1.cc:635
+#line 245 "dhcp6_parser.yy" // lalr1.cc:636
         { yyoutput << yysym.value.template as< double > (); }
-#line 404 "dhcp6_parser.cc" // lalr1.cc:635
+#line 378 "dhcp6_parser.cc" // lalr1.cc:636
         break;
 
-      case 168: // "boolean"
+      case 171: // "boolean"
 
-#line 242 "dhcp6_parser.yy" // lalr1.cc:635
+#line 245 "dhcp6_parser.yy" // lalr1.cc:636
         { yyoutput << yysym.value.template as< bool > (); }
-#line 411 "dhcp6_parser.cc" // lalr1.cc:635
+#line 385 "dhcp6_parser.cc" // lalr1.cc:636
         break;
 
-      case 185: // value
+      case 189: // value
 
-#line 242 "dhcp6_parser.yy" // lalr1.cc:635
+#line 245 "dhcp6_parser.yy" // lalr1.cc:636
         { yyoutput << yysym.value.template as< ElementPtr > (); }
-#line 418 "dhcp6_parser.cc" // lalr1.cc:635
+#line 392 "dhcp6_parser.cc" // lalr1.cc:636
         break;
 
-      case 189: // map_value
+      case 193: // map_value
 
-#line 242 "dhcp6_parser.yy" // lalr1.cc:635
+#line 245 "dhcp6_parser.yy" // lalr1.cc:636
         { yyoutput << yysym.value.template as< ElementPtr > (); }
-#line 425 "dhcp6_parser.cc" // lalr1.cc:635
+#line 399 "dhcp6_parser.cc" // lalr1.cc:636
         break;
 
-      case 239: // db_type
+      case 243: // db_type
 
-#line 242 "dhcp6_parser.yy" // lalr1.cc:635
+#line 245 "dhcp6_parser.yy" // lalr1.cc:636
         { yyoutput << yysym.value.template as< ElementPtr > (); }
-#line 432 "dhcp6_parser.cc" // lalr1.cc:635
+#line 406 "dhcp6_parser.cc" // lalr1.cc:636
         break;
 
-      case 328: // hr_mode
+      case 332: // hr_mode
 
-#line 242 "dhcp6_parser.yy" // lalr1.cc:635
+#line 245 "dhcp6_parser.yy" // lalr1.cc:636
         { yyoutput << yysym.value.template as< ElementPtr > (); }
-#line 439 "dhcp6_parser.cc" // lalr1.cc:635
+#line 413 "dhcp6_parser.cc" // lalr1.cc:636
         break;
 
-      case 464: // duid_type
+      case 468: // duid_type
 
-#line 242 "dhcp6_parser.yy" // lalr1.cc:635
+#line 245 "dhcp6_parser.yy" // lalr1.cc:636
         { yyoutput << yysym.value.template as< ElementPtr > (); }
-#line 446 "dhcp6_parser.cc" // lalr1.cc:635
+#line 420 "dhcp6_parser.cc" // lalr1.cc:636
         break;
 
-      case 497: // ncr_protocol_value
+      case 501: // ncr_protocol_value
 
-#line 242 "dhcp6_parser.yy" // lalr1.cc:635
+#line 245 "dhcp6_parser.yy" // lalr1.cc:636
         { yyoutput << yysym.value.template as< ElementPtr > (); }
-#line 453 "dhcp6_parser.cc" // lalr1.cc:635
+#line 427 "dhcp6_parser.cc" // lalr1.cc:636
         break;
 
-      case 505: // replace_client_name_value
+      case 509: // replace_client_name_value
 
-#line 242 "dhcp6_parser.yy" // lalr1.cc:635
+#line 245 "dhcp6_parser.yy" // lalr1.cc:636
         { yyoutput << yysym.value.template as< ElementPtr > (); }
-#line 460 "dhcp6_parser.cc" // lalr1.cc:635
+#line 434 "dhcp6_parser.cc" // lalr1.cc:636
         break;
 
 
@@ -467,6 +441,7 @@ namespace isc { namespace dhcp {
   }
 #endif
 
+  inline
   void
   Dhcp6Parser::yypush_ (const char* m, state_type s, symbol_type& sym)
   {
@@ -474,6 +449,7 @@ namespace isc { namespace dhcp {
     yypush_ (m, t);
   }
 
+  inline
   void
   Dhcp6Parser::yypush_ (const char* m, stack_symbol_type& s)
   {
@@ -482,8 +458,9 @@ namespace isc { namespace dhcp {
     yystack_.push (s);
   }
 
+  inline
   void
-  Dhcp6Parser::yypop_ (unsigned n)
+  Dhcp6Parser::yypop_ (unsigned int n)
   {
     yystack_.pop (n);
   }
@@ -515,7 +492,7 @@ namespace isc { namespace dhcp {
   }
 #endif // PARSER6_DEBUG
 
-  Dhcp6Parser::state_type
+  inline Dhcp6Parser::state_type
   Dhcp6Parser::yy_lr_goto_state_ (state_type yystate, int yysym)
   {
     int yyr = yypgoto_[yysym - yyntokens_] + yystate;
@@ -525,13 +502,13 @@ namespace isc { namespace dhcp {
       return yydefgoto_[yysym - yyntokens_];
   }
 
-  bool
+  inline bool
   Dhcp6Parser::yy_pact_value_is_default_ (int yyvalue)
   {
     return yyvalue == yypact_ninf_;
   }
 
-  bool
+  inline bool
   Dhcp6Parser::yy_table_value_is_error_ (int yyvalue)
   {
     return yyvalue == yytable_ninf_;
@@ -562,7 +539,7 @@ namespace isc { namespace dhcp {
     // avoid gratuitous conflicts when merging into the master branch.
     try
       {
-    YYCDEBUG << "Starting parse\n";
+    YYCDEBUG << "Starting parse" << std::endl;
 
 
     /* Initialize the stack.  The initial state will be set in
@@ -574,7 +551,7 @@ namespace isc { namespace dhcp {
 
     // A new symbol was pushed on the stack.
   yynewstate:
-    YYCDEBUG << "Entering state " << yystack_[0].state << '\n';
+    YYCDEBUG << "Entering state " << yystack_[0].state << std::endl;
 
     // Accept?
     if (yystack_[0].state == yyfinal_)
@@ -647,35 +624,35 @@ namespace isc { namespace dhcp {
     yylen = yyr2_[yyn];
     {
       stack_symbol_type yylhs;
-      yylhs.state = yy_lr_goto_state_ (yystack_[yylen].state, yyr1_[yyn]);
+      yylhs.state = yy_lr_goto_state_(yystack_[yylen].state, yyr1_[yyn]);
       /* Variants are always initialized to an empty instance of the
          correct type. The default '$$ = $1' action is NOT applied
          when using variants.  */
-      switch (yyr1_[yyn])
-    {
-      case 185: // value
-      case 189: // map_value
-      case 239: // db_type
-      case 328: // hr_mode
-      case 464: // duid_type
-      case 497: // ncr_protocol_value
-      case 505: // replace_client_name_value
+        switch (yyr1_[yyn])
+    {
+      case 189: // value
+      case 193: // map_value
+      case 243: // db_type
+      case 332: // hr_mode
+      case 468: // duid_type
+      case 501: // ncr_protocol_value
+      case 509: // replace_client_name_value
         yylhs.value.build< ElementPtr > ();
         break;
 
-      case 168: // "boolean"
+      case 171: // "boolean"
         yylhs.value.build< bool > ();
         break;
 
-      case 167: // "floating point"
+      case 170: // "floating point"
         yylhs.value.build< double > ();
         break;
 
-      case 166: // "integer"
+      case 169: // "integer"
         yylhs.value.build< int64_t > ();
         break;
 
-      case 165: // "constant string"
+      case 168: // "constant string"
         yylhs.value.build< std::string > ();
         break;
 
@@ -684,11 +661,10 @@ namespace isc { namespace dhcp {
     }
 
 
-      // Default location.
+      // Compute the default @$.
       {
         slice<stack_symbol_type, stack_type> slice (yystack_, yylen);
         YYLLOC_DEFAULT (yylhs.location, slice, yylen);
-        yyerror_range[1].location = yylhs.location;
       }
 
       // Perform the reduction.
@@ -698,280 +674,286 @@ namespace isc { namespace dhcp {
           switch (yyn)
             {
   case 2:
-#line 251 "dhcp6_parser.yy" // lalr1.cc:856
+#line 254 "dhcp6_parser.yy" // lalr1.cc:859
     { ctx.ctx_ = ctx.NO_KEYWORD; }
-#line 704 "dhcp6_parser.cc" // lalr1.cc:856
+#line 680 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
   case 4:
-#line 252 "dhcp6_parser.yy" // lalr1.cc:856
+#line 255 "dhcp6_parser.yy" // lalr1.cc:859
     { ctx.ctx_ = ctx.CONFIG; }
-#line 710 "dhcp6_parser.cc" // lalr1.cc:856
+#line 686 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
   case 6:
-#line 253 "dhcp6_parser.yy" // lalr1.cc:856
+#line 256 "dhcp6_parser.yy" // lalr1.cc:859
     { ctx.ctx_ = ctx.DHCP6; }
-#line 716 "dhcp6_parser.cc" // lalr1.cc:856
+#line 692 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
   case 8:
-#line 254 "dhcp6_parser.yy" // lalr1.cc:856
+#line 257 "dhcp6_parser.yy" // lalr1.cc:859
     { ctx.ctx_ = ctx.INTERFACES_CONFIG; }
-#line 722 "dhcp6_parser.cc" // lalr1.cc:856
+#line 698 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
   case 10:
-#line 255 "dhcp6_parser.yy" // lalr1.cc:856
+#line 258 "dhcp6_parser.yy" // lalr1.cc:859
     { ctx.ctx_ = ctx.SUBNET6; }
-#line 728 "dhcp6_parser.cc" // lalr1.cc:856
+#line 704 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
   case 12:
-#line 256 "dhcp6_parser.yy" // lalr1.cc:856
+#line 259 "dhcp6_parser.yy" // lalr1.cc:859
     { ctx.ctx_ = ctx.POOLS; }
-#line 734 "dhcp6_parser.cc" // lalr1.cc:856
+#line 710 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
   case 14:
-#line 257 "dhcp6_parser.yy" // lalr1.cc:856
+#line 260 "dhcp6_parser.yy" // lalr1.cc:859
     { ctx.ctx_ = ctx.PD_POOLS; }
-#line 740 "dhcp6_parser.cc" // lalr1.cc:856
+#line 716 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
   case 16:
-#line 258 "dhcp6_parser.yy" // lalr1.cc:856
+#line 261 "dhcp6_parser.yy" // lalr1.cc:859
     { ctx.ctx_ = ctx.RESERVATIONS; }
-#line 746 "dhcp6_parser.cc" // lalr1.cc:856
+#line 722 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
   case 18:
-#line 259 "dhcp6_parser.yy" // lalr1.cc:856
+#line 262 "dhcp6_parser.yy" // lalr1.cc:859
     { ctx.ctx_ = ctx.DHCP6; }
-#line 752 "dhcp6_parser.cc" // lalr1.cc:856
+#line 728 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
   case 20:
-#line 260 "dhcp6_parser.yy" // lalr1.cc:856
+#line 263 "dhcp6_parser.yy" // lalr1.cc:859
     { ctx.ctx_ = ctx.OPTION_DEF; }
-#line 758 "dhcp6_parser.cc" // lalr1.cc:856
+#line 734 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
   case 22:
-#line 261 "dhcp6_parser.yy" // lalr1.cc:856
+#line 264 "dhcp6_parser.yy" // lalr1.cc:859
     { ctx.ctx_ = ctx.OPTION_DATA; }
-#line 764 "dhcp6_parser.cc" // lalr1.cc:856
+#line 740 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
   case 24:
-#line 262 "dhcp6_parser.yy" // lalr1.cc:856
+#line 265 "dhcp6_parser.yy" // lalr1.cc:859
     { ctx.ctx_ = ctx.HOOKS_LIBRARIES; }
-#line 770 "dhcp6_parser.cc" // lalr1.cc:856
+#line 746 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
   case 26:
-#line 263 "dhcp6_parser.yy" // lalr1.cc:856
+#line 266 "dhcp6_parser.yy" // lalr1.cc:859
     { ctx.ctx_ = ctx.DHCP_DDNS; }
-#line 776 "dhcp6_parser.cc" // lalr1.cc:856
+#line 752 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
   case 28:
-#line 264 "dhcp6_parser.yy" // lalr1.cc:856
+#line 267 "dhcp6_parser.yy" // lalr1.cc:859
     { ctx.ctx_ = ctx.LOGGING; }
-#line 782 "dhcp6_parser.cc" // lalr1.cc:856
+#line 758 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
   case 30:
-#line 272 "dhcp6_parser.yy" // lalr1.cc:856
+#line 268 "dhcp6_parser.yy" // lalr1.cc:859
+    { ctx.ctx_ = ctx.CONFIG_CONTROL; }
+#line 764 "dhcp6_parser.cc" // lalr1.cc:859
+    break;
+
+  case 32:
+#line 276 "dhcp6_parser.yy" // lalr1.cc:859
     { yylhs.value.as< ElementPtr > () = ElementPtr(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location))); }
-#line 788 "dhcp6_parser.cc" // lalr1.cc:856
+#line 770 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 31:
-#line 273 "dhcp6_parser.yy" // lalr1.cc:856
+  case 33:
+#line 277 "dhcp6_parser.yy" // lalr1.cc:859
     { yylhs.value.as< ElementPtr > () = ElementPtr(new DoubleElement(yystack_[0].value.as< double > (), ctx.loc2pos(yystack_[0].location))); }
-#line 794 "dhcp6_parser.cc" // lalr1.cc:856
+#line 776 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 32:
-#line 274 "dhcp6_parser.yy" // lalr1.cc:856
+  case 34:
+#line 278 "dhcp6_parser.yy" // lalr1.cc:859
     { yylhs.value.as< ElementPtr > () = ElementPtr(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location))); }
-#line 800 "dhcp6_parser.cc" // lalr1.cc:856
+#line 782 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 33:
-#line 275 "dhcp6_parser.yy" // lalr1.cc:856
+  case 35:
+#line 279 "dhcp6_parser.yy" // lalr1.cc:859
     { yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location))); }
-#line 806 "dhcp6_parser.cc" // lalr1.cc:856
+#line 788 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 34:
-#line 276 "dhcp6_parser.yy" // lalr1.cc:856
+  case 36:
+#line 280 "dhcp6_parser.yy" // lalr1.cc:859
     { yylhs.value.as< ElementPtr > () = ElementPtr(new NullElement(ctx.loc2pos(yystack_[0].location))); }
-#line 812 "dhcp6_parser.cc" // lalr1.cc:856
+#line 794 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 35:
-#line 277 "dhcp6_parser.yy" // lalr1.cc:856
+  case 37:
+#line 281 "dhcp6_parser.yy" // lalr1.cc:859
     { yylhs.value.as< ElementPtr > () = ctx.stack_.back(); ctx.stack_.pop_back(); }
-#line 818 "dhcp6_parser.cc" // lalr1.cc:856
+#line 800 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 36:
-#line 278 "dhcp6_parser.yy" // lalr1.cc:856
+  case 38:
+#line 282 "dhcp6_parser.yy" // lalr1.cc:859
     { yylhs.value.as< ElementPtr > () = ctx.stack_.back(); ctx.stack_.pop_back(); }
-#line 824 "dhcp6_parser.cc" // lalr1.cc:856
+#line 806 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 37:
-#line 281 "dhcp6_parser.yy" // lalr1.cc:856
+  case 39:
+#line 285 "dhcp6_parser.yy" // lalr1.cc:859
     {
     // Push back the JSON value on the stack
     ctx.stack_.push_back(yystack_[0].value.as< ElementPtr > ());
 }
-#line 833 "dhcp6_parser.cc" // lalr1.cc:856
+#line 815 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 38:
-#line 286 "dhcp6_parser.yy" // lalr1.cc:856
+  case 40:
+#line 290 "dhcp6_parser.yy" // lalr1.cc:859
     {
     // This code is executed when we're about to start parsing
     // the content of the map
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.push_back(m);
 }
-#line 844 "dhcp6_parser.cc" // lalr1.cc:856
+#line 826 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 39:
-#line 291 "dhcp6_parser.yy" // lalr1.cc:856
+  case 41:
+#line 295 "dhcp6_parser.yy" // lalr1.cc:859
     {
     // map parsing completed. If we ever want to do any wrap up
     // (maybe some sanity checking), this would be the best place
     // for it.
 }
-#line 854 "dhcp6_parser.cc" // lalr1.cc:856
+#line 836 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 40:
-#line 297 "dhcp6_parser.yy" // lalr1.cc:856
+  case 42:
+#line 301 "dhcp6_parser.yy" // lalr1.cc:859
     { yylhs.value.as< ElementPtr > () = ctx.stack_.back(); ctx.stack_.pop_back(); }
-#line 860 "dhcp6_parser.cc" // lalr1.cc:856
+#line 842 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 43:
-#line 304 "dhcp6_parser.yy" // lalr1.cc:856
+  case 45:
+#line 308 "dhcp6_parser.yy" // lalr1.cc:859
     {
                   // map containing a single entry
                   ctx.stack_.back()->set(yystack_[2].value.as< std::string > (), yystack_[0].value.as< ElementPtr > ());
                   }
-#line 869 "dhcp6_parser.cc" // lalr1.cc:856
+#line 851 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 44:
-#line 308 "dhcp6_parser.yy" // lalr1.cc:856
+  case 46:
+#line 312 "dhcp6_parser.yy" // lalr1.cc:859
     {
                   // map consisting of a shorter map followed by
                   // comma and string:value
                   ctx.stack_.back()->set(yystack_[2].value.as< std::string > (), yystack_[0].value.as< ElementPtr > ());
                   }
-#line 879 "dhcp6_parser.cc" // lalr1.cc:856
+#line 861 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 45:
-#line 315 "dhcp6_parser.yy" // lalr1.cc:856
+  case 47:
+#line 319 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.push_back(l);
 }
-#line 888 "dhcp6_parser.cc" // lalr1.cc:856
+#line 870 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 46:
-#line 318 "dhcp6_parser.yy" // lalr1.cc:856
+  case 48:
+#line 322 "dhcp6_parser.yy" // lalr1.cc:859
     {
     // list parsing complete. Put any sanity checking here
 }
-#line 896 "dhcp6_parser.cc" // lalr1.cc:856
+#line 878 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 49:
-#line 326 "dhcp6_parser.yy" // lalr1.cc:856
+  case 51:
+#line 330 "dhcp6_parser.yy" // lalr1.cc:859
     {
                   // List consisting of a single element.
                   ctx.stack_.back()->add(yystack_[0].value.as< ElementPtr > ());
                   }
-#line 905 "dhcp6_parser.cc" // lalr1.cc:856
+#line 887 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 50:
-#line 330 "dhcp6_parser.yy" // lalr1.cc:856
+  case 52:
+#line 334 "dhcp6_parser.yy" // lalr1.cc:859
     {
                   // List ending with , and a value.
                   ctx.stack_.back()->add(yystack_[0].value.as< ElementPtr > ());
                   }
-#line 914 "dhcp6_parser.cc" // lalr1.cc:856
+#line 896 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 51:
-#line 337 "dhcp6_parser.yy" // lalr1.cc:856
+  case 53:
+#line 341 "dhcp6_parser.yy" // lalr1.cc:859
     {
     // List parsing about to start
 }
-#line 922 "dhcp6_parser.cc" // lalr1.cc:856
+#line 904 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 52:
-#line 339 "dhcp6_parser.yy" // lalr1.cc:856
+  case 54:
+#line 343 "dhcp6_parser.yy" // lalr1.cc:859
     {
     // list parsing complete. Put any sanity checking here
     //ctx.stack_.pop_back();
 }
-#line 931 "dhcp6_parser.cc" // lalr1.cc:856
+#line 913 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 55:
-#line 348 "dhcp6_parser.yy" // lalr1.cc:856
+  case 57:
+#line 352 "dhcp6_parser.yy" // lalr1.cc:859
     {
                           ElementPtr s(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
                           ctx.stack_.back()->add(s);
                           }
-#line 940 "dhcp6_parser.cc" // lalr1.cc:856
+#line 922 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 56:
-#line 352 "dhcp6_parser.yy" // lalr1.cc:856
+  case 58:
+#line 356 "dhcp6_parser.yy" // lalr1.cc:859
     {
                           ElementPtr s(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
                           ctx.stack_.back()->add(s);
                           }
-#line 949 "dhcp6_parser.cc" // lalr1.cc:856
+#line 931 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 57:
-#line 363 "dhcp6_parser.yy" // lalr1.cc:856
+  case 59:
+#line 367 "dhcp6_parser.yy" // lalr1.cc:859
     {
     const std::string& where = ctx.contextName();
     const std::string& keyword = yystack_[1].value.as< std::string > ();
     error(yystack_[1].location,
           "got unexpected keyword \"" + keyword + "\" in " + where + " map.");
 }
-#line 960 "dhcp6_parser.cc" // lalr1.cc:856
+#line 942 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 58:
-#line 373 "dhcp6_parser.yy" // lalr1.cc:856
+  case 60:
+#line 377 "dhcp6_parser.yy" // lalr1.cc:859
     {
     // This code is executed when we're about to start parsing
     // the content of the map
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.push_back(m);
 }
-#line 971 "dhcp6_parser.cc" // lalr1.cc:856
+#line 953 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 59:
-#line 378 "dhcp6_parser.yy" // lalr1.cc:856
+  case 61:
+#line 382 "dhcp6_parser.yy" // lalr1.cc:859
     {
     // map parsing completed. If we ever want to do any wrap up
     // (maybe some sanity checking), this would be the best place
@@ -980,11 +962,11 @@ namespace isc { namespace dhcp {
     // Dhcp6 is required
     ctx.require("Dhcp6", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
 }
-#line 984 "dhcp6_parser.cc" // lalr1.cc:856
+#line 966 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 68:
-#line 401 "dhcp6_parser.yy" // lalr1.cc:856
+  case 70:
+#line 405 "dhcp6_parser.yy" // lalr1.cc:859
     {
     // This code is executed when we're about to start parsing
     // the content of the map
@@ -993,505 +975,505 @@ namespace isc { namespace dhcp {
     ctx.stack_.push_back(m);
     ctx.enter(ctx.DHCP6);
 }
-#line 997 "dhcp6_parser.cc" // lalr1.cc:856
+#line 979 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 69:
-#line 408 "dhcp6_parser.yy" // lalr1.cc:856
+  case 71:
+#line 412 "dhcp6_parser.yy" // lalr1.cc:859
     {
     // No global parameter is required
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 1007 "dhcp6_parser.cc" // lalr1.cc:856
+#line 989 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 70:
-#line 416 "dhcp6_parser.yy" // lalr1.cc:856
+  case 72:
+#line 420 "dhcp6_parser.yy" // lalr1.cc:859
     {
     // Parse the Dhcp6 map
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.push_back(m);
 }
-#line 1017 "dhcp6_parser.cc" // lalr1.cc:856
+#line 999 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 71:
-#line 420 "dhcp6_parser.yy" // lalr1.cc:856
+  case 73:
+#line 424 "dhcp6_parser.yy" // lalr1.cc:859
     {
     // No global parameter is required
     // parsing completed
 }
-#line 1026 "dhcp6_parser.cc" // lalr1.cc:856
+#line 1008 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 102:
-#line 461 "dhcp6_parser.yy" // lalr1.cc:856
+  case 105:
+#line 466 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr prf(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("preferred-lifetime", prf);
 }
-#line 1035 "dhcp6_parser.cc" // lalr1.cc:856
+#line 1017 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 103:
-#line 466 "dhcp6_parser.yy" // lalr1.cc:856
+  case 106:
+#line 471 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr prf(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("valid-lifetime", prf);
 }
-#line 1044 "dhcp6_parser.cc" // lalr1.cc:856
+#line 1026 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 104:
-#line 471 "dhcp6_parser.yy" // lalr1.cc:856
+  case 107:
+#line 476 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr prf(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("renew-timer", prf);
 }
-#line 1053 "dhcp6_parser.cc" // lalr1.cc:856
+#line 1035 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 105:
-#line 476 "dhcp6_parser.yy" // lalr1.cc:856
+  case 108:
+#line 481 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr prf(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("rebind-timer", prf);
 }
-#line 1062 "dhcp6_parser.cc" // lalr1.cc:856
+#line 1044 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 106:
-#line 481 "dhcp6_parser.yy" // lalr1.cc:856
+  case 109:
+#line 486 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr dpp(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("decline-probation-period", dpp);
 }
-#line 1071 "dhcp6_parser.cc" // lalr1.cc:856
+#line 1053 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 107:
-#line 486 "dhcp6_parser.yy" // lalr1.cc:856
+  case 110:
+#line 491 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr i(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("interfaces-config", i);
     ctx.stack_.push_back(i);
     ctx.enter(ctx.INTERFACES_CONFIG);
 }
-#line 1082 "dhcp6_parser.cc" // lalr1.cc:856
+#line 1064 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 108:
-#line 491 "dhcp6_parser.yy" // lalr1.cc:856
+  case 111:
+#line 496 "dhcp6_parser.yy" // lalr1.cc:859
     {
     // No interfaces config param is required
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 1092 "dhcp6_parser.cc" // lalr1.cc:856
+#line 1074 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 109:
-#line 497 "dhcp6_parser.yy" // lalr1.cc:856
+  case 112:
+#line 502 "dhcp6_parser.yy" // lalr1.cc:859
     {
     // Parse the interfaces-config map
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.push_back(m);
 }
-#line 1102 "dhcp6_parser.cc" // lalr1.cc:856
+#line 1084 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 110:
-#line 501 "dhcp6_parser.yy" // lalr1.cc:856
+  case 113:
+#line 506 "dhcp6_parser.yy" // lalr1.cc:859
     {
     // No interfaces config param is required
     // parsing completed
 }
-#line 1111 "dhcp6_parser.cc" // lalr1.cc:856
+#line 1093 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 118:
-#line 517 "dhcp6_parser.yy" // lalr1.cc:856
+  case 121:
+#line 522 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("interfaces", l);
     ctx.stack_.push_back(l);
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 1122 "dhcp6_parser.cc" // lalr1.cc:856
+#line 1104 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 119:
-#line 522 "dhcp6_parser.yy" // lalr1.cc:856
+  case 122:
+#line 527 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 1131 "dhcp6_parser.cc" // lalr1.cc:856
+#line 1113 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 120:
-#line 527 "dhcp6_parser.yy" // lalr1.cc:856
+  case 123:
+#line 532 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr b(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("re-detect", b);
 }
-#line 1140 "dhcp6_parser.cc" // lalr1.cc:856
+#line 1122 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 121:
-#line 533 "dhcp6_parser.yy" // lalr1.cc:856
+  case 124:
+#line 538 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr i(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("lease-database", i);
     ctx.stack_.push_back(i);
     ctx.enter(ctx.LEASE_DATABASE);
 }
-#line 1151 "dhcp6_parser.cc" // lalr1.cc:856
+#line 1133 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 122:
-#line 538 "dhcp6_parser.yy" // lalr1.cc:856
+  case 125:
+#line 543 "dhcp6_parser.yy" // lalr1.cc:859
     {
     // The type parameter is required
     ctx.require("type", ctx.loc2pos(yystack_[2].location), ctx.loc2pos(yystack_[0].location));
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 1162 "dhcp6_parser.cc" // lalr1.cc:856
+#line 1144 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 123:
-#line 545 "dhcp6_parser.yy" // lalr1.cc:856
+  case 126:
+#line 550 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr i(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("hosts-database", i);
     ctx.stack_.push_back(i);
     ctx.enter(ctx.HOSTS_DATABASE);
 }
-#line 1173 "dhcp6_parser.cc" // lalr1.cc:856
+#line 1155 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 124:
-#line 550 "dhcp6_parser.yy" // lalr1.cc:856
+  case 127:
+#line 555 "dhcp6_parser.yy" // lalr1.cc:859
     {
     // The type parameter is required
     ctx.require("type", ctx.loc2pos(yystack_[2].location), ctx.loc2pos(yystack_[0].location));
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 1184 "dhcp6_parser.cc" // lalr1.cc:856
+#line 1166 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 125:
-#line 557 "dhcp6_parser.yy" // lalr1.cc:856
+  case 128:
+#line 562 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("hosts-databases", l);
     ctx.stack_.push_back(l);
     ctx.enter(ctx.HOSTS_DATABASE);
 }
-#line 1195 "dhcp6_parser.cc" // lalr1.cc:856
+#line 1177 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 126:
-#line 562 "dhcp6_parser.yy" // lalr1.cc:856
+  case 129:
+#line 567 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 1204 "dhcp6_parser.cc" // lalr1.cc:856
+#line 1186 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 131:
-#line 575 "dhcp6_parser.yy" // lalr1.cc:856
+  case 134:
+#line 580 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(m);
     ctx.stack_.push_back(m);
 }
-#line 1214 "dhcp6_parser.cc" // lalr1.cc:856
+#line 1196 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 132:
-#line 579 "dhcp6_parser.yy" // lalr1.cc:856
+  case 135:
+#line 584 "dhcp6_parser.yy" // lalr1.cc:859
     {
     // The type parameter is required
     ctx.require("type", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
     ctx.stack_.pop_back();
 }
-#line 1224 "dhcp6_parser.cc" // lalr1.cc:856
+#line 1206 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 153:
-#line 609 "dhcp6_parser.yy" // lalr1.cc:856
+  case 156:
+#line 614 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.DATABASE_TYPE);
 }
-#line 1232 "dhcp6_parser.cc" // lalr1.cc:856
+#line 1214 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 154:
-#line 611 "dhcp6_parser.yy" // lalr1.cc:856
+  case 157:
+#line 616 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.back()->set("type", yystack_[0].value.as< ElementPtr > ());
     ctx.leave();
 }
-#line 1241 "dhcp6_parser.cc" // lalr1.cc:856
+#line 1223 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 155:
-#line 616 "dhcp6_parser.yy" // lalr1.cc:856
+  case 158:
+#line 621 "dhcp6_parser.yy" // lalr1.cc:859
     { yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("memfile", ctx.loc2pos(yystack_[0].location))); }
-#line 1247 "dhcp6_parser.cc" // lalr1.cc:856
+#line 1229 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 156:
-#line 617 "dhcp6_parser.yy" // lalr1.cc:856
+  case 159:
+#line 622 "dhcp6_parser.yy" // lalr1.cc:859
     { yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("mysql", ctx.loc2pos(yystack_[0].location))); }
-#line 1253 "dhcp6_parser.cc" // lalr1.cc:856
+#line 1235 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 157:
-#line 618 "dhcp6_parser.yy" // lalr1.cc:856
+  case 160:
+#line 623 "dhcp6_parser.yy" // lalr1.cc:859
     { yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("postgresql", ctx.loc2pos(yystack_[0].location))); }
-#line 1259 "dhcp6_parser.cc" // lalr1.cc:856
+#line 1241 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 158:
-#line 619 "dhcp6_parser.yy" // lalr1.cc:856
+  case 161:
+#line 624 "dhcp6_parser.yy" // lalr1.cc:859
     { yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("cql", ctx.loc2pos(yystack_[0].location))); }
-#line 1265 "dhcp6_parser.cc" // lalr1.cc:856
+#line 1247 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 159:
-#line 622 "dhcp6_parser.yy" // lalr1.cc:856
+  case 162:
+#line 627 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 1273 "dhcp6_parser.cc" // lalr1.cc:856
+#line 1255 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 160:
-#line 624 "dhcp6_parser.yy" // lalr1.cc:856
+  case 163:
+#line 629 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr user(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("user", user);
     ctx.leave();
 }
-#line 1283 "dhcp6_parser.cc" // lalr1.cc:856
+#line 1265 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 161:
-#line 630 "dhcp6_parser.yy" // lalr1.cc:856
+  case 164:
+#line 635 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 1291 "dhcp6_parser.cc" // lalr1.cc:856
+#line 1273 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 162:
-#line 632 "dhcp6_parser.yy" // lalr1.cc:856
+  case 165:
+#line 637 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr pwd(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("password", pwd);
     ctx.leave();
 }
-#line 1301 "dhcp6_parser.cc" // lalr1.cc:856
+#line 1283 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 163:
-#line 638 "dhcp6_parser.yy" // lalr1.cc:856
+  case 166:
+#line 643 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 1309 "dhcp6_parser.cc" // lalr1.cc:856
+#line 1291 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 164:
-#line 640 "dhcp6_parser.yy" // lalr1.cc:856
+  case 167:
+#line 645 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr h(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("host", h);
     ctx.leave();
 }
-#line 1319 "dhcp6_parser.cc" // lalr1.cc:856
+#line 1301 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 165:
-#line 646 "dhcp6_parser.yy" // lalr1.cc:856
+  case 168:
+#line 651 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr p(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("port", p);
 }
-#line 1328 "dhcp6_parser.cc" // lalr1.cc:856
+#line 1310 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 166:
-#line 651 "dhcp6_parser.yy" // lalr1.cc:856
+  case 169:
+#line 656 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 1336 "dhcp6_parser.cc" // lalr1.cc:856
+#line 1318 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 167:
-#line 653 "dhcp6_parser.yy" // lalr1.cc:856
+  case 170:
+#line 658 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr name(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("name", name);
     ctx.leave();
 }
-#line 1346 "dhcp6_parser.cc" // lalr1.cc:856
+#line 1328 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 168:
-#line 659 "dhcp6_parser.yy" // lalr1.cc:856
+  case 171:
+#line 664 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr n(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("persist", n);
 }
-#line 1355 "dhcp6_parser.cc" // lalr1.cc:856
+#line 1337 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 169:
-#line 664 "dhcp6_parser.yy" // lalr1.cc:856
+  case 172:
+#line 669 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr n(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("lfc-interval", n);
 }
-#line 1364 "dhcp6_parser.cc" // lalr1.cc:856
+#line 1346 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 170:
-#line 669 "dhcp6_parser.yy" // lalr1.cc:856
+  case 173:
+#line 674 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr n(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("readonly", n);
 }
-#line 1373 "dhcp6_parser.cc" // lalr1.cc:856
+#line 1355 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 171:
-#line 674 "dhcp6_parser.yy" // lalr1.cc:856
+  case 174:
+#line 679 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr n(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("connect-timeout", n);
 }
-#line 1382 "dhcp6_parser.cc" // lalr1.cc:856
+#line 1364 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 172:
-#line 679 "dhcp6_parser.yy" // lalr1.cc:856
+  case 175:
+#line 684 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr n(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("reconnect-wait-time", n);
 }
-#line 1391 "dhcp6_parser.cc" // lalr1.cc:856
+#line 1373 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 173:
-#line 684 "dhcp6_parser.yy" // lalr1.cc:856
+  case 176:
+#line 689 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr n(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("request-timeout", n);
 }
-#line 1400 "dhcp6_parser.cc" // lalr1.cc:856
+#line 1382 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 174:
-#line 689 "dhcp6_parser.yy" // lalr1.cc:856
+  case 177:
+#line 694 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr n(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("tcp-keepalive", n);
 }
-#line 1409 "dhcp6_parser.cc" // lalr1.cc:856
+#line 1391 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 175:
-#line 694 "dhcp6_parser.yy" // lalr1.cc:856
+  case 178:
+#line 699 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr n(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("tcp-nodelay", n);
 }
-#line 1418 "dhcp6_parser.cc" // lalr1.cc:856
+#line 1400 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 176:
-#line 699 "dhcp6_parser.yy" // lalr1.cc:856
+  case 179:
+#line 704 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 1426 "dhcp6_parser.cc" // lalr1.cc:856
+#line 1408 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 177:
-#line 701 "dhcp6_parser.yy" // lalr1.cc:856
+  case 180:
+#line 706 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr cp(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("contact-points", cp);
     ctx.leave();
 }
-#line 1436 "dhcp6_parser.cc" // lalr1.cc:856
+#line 1418 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 178:
-#line 707 "dhcp6_parser.yy" // lalr1.cc:856
+  case 181:
+#line 712 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr n(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("max-reconnect-tries", n);
 }
-#line 1445 "dhcp6_parser.cc" // lalr1.cc:856
+#line 1427 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 179:
-#line 712 "dhcp6_parser.yy" // lalr1.cc:856
+  case 182:
+#line 717 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 1453 "dhcp6_parser.cc" // lalr1.cc:856
+#line 1435 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 180:
-#line 714 "dhcp6_parser.yy" // lalr1.cc:856
+  case 183:
+#line 719 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr ks(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("keyspace", ks);
     ctx.leave();
 }
-#line 1463 "dhcp6_parser.cc" // lalr1.cc:856
+#line 1445 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 181:
-#line 720 "dhcp6_parser.yy" // lalr1.cc:856
+  case 184:
+#line 725 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("sanity-checks", m);
     ctx.stack_.push_back(m);
     ctx.enter(ctx.SANITY_CHECKS);
 }
-#line 1474 "dhcp6_parser.cc" // lalr1.cc:856
+#line 1456 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 182:
-#line 725 "dhcp6_parser.yy" // lalr1.cc:856
+  case 185:
+#line 730 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 1483 "dhcp6_parser.cc" // lalr1.cc:856
+#line 1465 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 186:
-#line 735 "dhcp6_parser.yy" // lalr1.cc:856
+  case 189:
+#line 740 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 1491 "dhcp6_parser.cc" // lalr1.cc:856
+#line 1473 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 187:
-#line 737 "dhcp6_parser.yy" // lalr1.cc:856
+  case 190:
+#line 742 "dhcp6_parser.yy" // lalr1.cc:859
     {
 
     if ( (string(yystack_[0].value.as< std::string > ()) == "none") ||
@@ -1507,307 +1489,307 @@ namespace isc { namespace dhcp {
               ", supported values are: none, warn, fix, fix-del, del");
     }
 }
-#line 1511 "dhcp6_parser.cc" // lalr1.cc:856
+#line 1493 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 188:
-#line 753 "dhcp6_parser.yy" // lalr1.cc:856
+  case 191:
+#line 758 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("mac-sources", l);
     ctx.stack_.push_back(l);
     ctx.enter(ctx.MAC_SOURCES);
 }
-#line 1522 "dhcp6_parser.cc" // lalr1.cc:856
+#line 1504 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 189:
-#line 758 "dhcp6_parser.yy" // lalr1.cc:856
+  case 192:
+#line 763 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 1531 "dhcp6_parser.cc" // lalr1.cc:856
+#line 1513 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 194:
-#line 771 "dhcp6_parser.yy" // lalr1.cc:856
+  case 197:
+#line 776 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr duid(new StringElement("duid", ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(duid);
 }
-#line 1540 "dhcp6_parser.cc" // lalr1.cc:856
+#line 1522 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 195:
-#line 776 "dhcp6_parser.yy" // lalr1.cc:856
+  case 198:
+#line 781 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr duid(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(duid);
 }
-#line 1549 "dhcp6_parser.cc" // lalr1.cc:856
+#line 1531 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 196:
-#line 781 "dhcp6_parser.yy" // lalr1.cc:856
+  case 199:
+#line 786 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("host-reservation-identifiers", l);
     ctx.stack_.push_back(l);
     ctx.enter(ctx.HOST_RESERVATION_IDENTIFIERS);
 }
-#line 1560 "dhcp6_parser.cc" // lalr1.cc:856
+#line 1542 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 197:
-#line 786 "dhcp6_parser.yy" // lalr1.cc:856
+  case 200:
+#line 791 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 1569 "dhcp6_parser.cc" // lalr1.cc:856
+#line 1551 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 203:
-#line 800 "dhcp6_parser.yy" // lalr1.cc:856
+  case 206:
+#line 805 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr hwaddr(new StringElement("hw-address", ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(hwaddr);
 }
-#line 1578 "dhcp6_parser.cc" // lalr1.cc:856
+#line 1560 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 204:
-#line 805 "dhcp6_parser.yy" // lalr1.cc:856
+  case 207:
+#line 810 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr flex_id(new StringElement("flex-id", ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(flex_id);
 }
-#line 1587 "dhcp6_parser.cc" // lalr1.cc:856
+#line 1569 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 205:
-#line 812 "dhcp6_parser.yy" // lalr1.cc:856
+  case 208:
+#line 817 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("relay-supplied-options", l);
     ctx.stack_.push_back(l);
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 1598 "dhcp6_parser.cc" // lalr1.cc:856
+#line 1580 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 206:
-#line 817 "dhcp6_parser.yy" // lalr1.cc:856
+  case 209:
+#line 822 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 1607 "dhcp6_parser.cc" // lalr1.cc:856
+#line 1589 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 207:
-#line 822 "dhcp6_parser.yy" // lalr1.cc:856
+  case 210:
+#line 827 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("hooks-libraries", l);
     ctx.stack_.push_back(l);
     ctx.enter(ctx.HOOKS_LIBRARIES);
 }
-#line 1618 "dhcp6_parser.cc" // lalr1.cc:856
+#line 1600 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 208:
-#line 827 "dhcp6_parser.yy" // lalr1.cc:856
+  case 211:
+#line 832 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 1627 "dhcp6_parser.cc" // lalr1.cc:856
+#line 1609 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 213:
-#line 840 "dhcp6_parser.yy" // lalr1.cc:856
+  case 216:
+#line 845 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(m);
     ctx.stack_.push_back(m);
 }
-#line 1637 "dhcp6_parser.cc" // lalr1.cc:856
+#line 1619 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 214:
-#line 844 "dhcp6_parser.yy" // lalr1.cc:856
+  case 217:
+#line 849 "dhcp6_parser.yy" // lalr1.cc:859
     {
     // The library hooks parameter is required
     ctx.require("library", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
     ctx.stack_.pop_back();
 }
-#line 1647 "dhcp6_parser.cc" // lalr1.cc:856
+#line 1629 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 215:
-#line 850 "dhcp6_parser.yy" // lalr1.cc:856
+  case 218:
+#line 855 "dhcp6_parser.yy" // lalr1.cc:859
     {
     // Parse the hooks-libraries list entry map
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.push_back(m);
 }
-#line 1657 "dhcp6_parser.cc" // lalr1.cc:856
+#line 1639 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 216:
-#line 854 "dhcp6_parser.yy" // lalr1.cc:856
+  case 219:
+#line 859 "dhcp6_parser.yy" // lalr1.cc:859
     {
     // The library hooks parameter is required
     ctx.require("library", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
     // parsing completed
 }
-#line 1667 "dhcp6_parser.cc" // lalr1.cc:856
+#line 1649 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 222:
-#line 869 "dhcp6_parser.yy" // lalr1.cc:856
+  case 225:
+#line 874 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 1675 "dhcp6_parser.cc" // lalr1.cc:856
+#line 1657 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 223:
-#line 871 "dhcp6_parser.yy" // lalr1.cc:856
+  case 226:
+#line 876 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr lib(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("library", lib);
     ctx.leave();
 }
-#line 1685 "dhcp6_parser.cc" // lalr1.cc:856
+#line 1667 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 224:
-#line 877 "dhcp6_parser.yy" // lalr1.cc:856
+  case 227:
+#line 882 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 1693 "dhcp6_parser.cc" // lalr1.cc:856
+#line 1675 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 225:
-#line 879 "dhcp6_parser.yy" // lalr1.cc:856
+  case 228:
+#line 884 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.back()->set("parameters", yystack_[0].value.as< ElementPtr > ());
     ctx.leave();
 }
-#line 1702 "dhcp6_parser.cc" // lalr1.cc:856
+#line 1684 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 226:
-#line 885 "dhcp6_parser.yy" // lalr1.cc:856
+  case 229:
+#line 890 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("expired-leases-processing", m);
     ctx.stack_.push_back(m);
     ctx.enter(ctx.EXPIRED_LEASES_PROCESSING);
 }
-#line 1713 "dhcp6_parser.cc" // lalr1.cc:856
+#line 1695 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 227:
-#line 890 "dhcp6_parser.yy" // lalr1.cc:856
+  case 230:
+#line 895 "dhcp6_parser.yy" // lalr1.cc:859
     {
     // No expired lease parameter is required
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 1723 "dhcp6_parser.cc" // lalr1.cc:856
+#line 1705 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 236:
-#line 908 "dhcp6_parser.yy" // lalr1.cc:856
+  case 239:
+#line 913 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr value(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("reclaim-timer-wait-time", value);
 }
-#line 1732 "dhcp6_parser.cc" // lalr1.cc:856
+#line 1714 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 237:
-#line 913 "dhcp6_parser.yy" // lalr1.cc:856
+  case 240:
+#line 918 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr value(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("flush-reclaimed-timer-wait-time", value);
 }
-#line 1741 "dhcp6_parser.cc" // lalr1.cc:856
+#line 1723 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 238:
-#line 918 "dhcp6_parser.yy" // lalr1.cc:856
+  case 241:
+#line 923 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr value(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("hold-reclaimed-time", value);
 }
-#line 1750 "dhcp6_parser.cc" // lalr1.cc:856
+#line 1732 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 239:
-#line 923 "dhcp6_parser.yy" // lalr1.cc:856
+  case 242:
+#line 928 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr value(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("max-reclaim-leases", value);
 }
-#line 1759 "dhcp6_parser.cc" // lalr1.cc:856
+#line 1741 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 240:
-#line 928 "dhcp6_parser.yy" // lalr1.cc:856
+  case 243:
+#line 933 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr value(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("max-reclaim-time", value);
 }
-#line 1768 "dhcp6_parser.cc" // lalr1.cc:856
+#line 1750 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 241:
-#line 933 "dhcp6_parser.yy" // lalr1.cc:856
+  case 244:
+#line 938 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr value(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("unwarned-reclaim-cycles", value);
 }
-#line 1777 "dhcp6_parser.cc" // lalr1.cc:856
+#line 1759 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 242:
-#line 941 "dhcp6_parser.yy" // lalr1.cc:856
+  case 245:
+#line 946 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("subnet6", l);
     ctx.stack_.push_back(l);
     ctx.enter(ctx.SUBNET6);
 }
-#line 1788 "dhcp6_parser.cc" // lalr1.cc:856
+#line 1770 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 243:
-#line 946 "dhcp6_parser.yy" // lalr1.cc:856
+  case 246:
+#line 951 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 1797 "dhcp6_parser.cc" // lalr1.cc:856
+#line 1779 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 248:
-#line 966 "dhcp6_parser.yy" // lalr1.cc:856
+  case 251:
+#line 971 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(m);
     ctx.stack_.push_back(m);
 }
-#line 1807 "dhcp6_parser.cc" // lalr1.cc:856
+#line 1789 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 249:
-#line 970 "dhcp6_parser.yy" // lalr1.cc:856
+  case 252:
+#line 975 "dhcp6_parser.yy" // lalr1.cc:859
     {
     // Once we reached this place, the subnet parsing is now complete.
     // If we want to, we can implement default values here.
@@ -1829,261 +1811,261 @@ namespace isc { namespace dhcp {
     ctx.require("subnet", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
     ctx.stack_.pop_back();
 }
-#line 1833 "dhcp6_parser.cc" // lalr1.cc:856
+#line 1815 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 250:
-#line 992 "dhcp6_parser.yy" // lalr1.cc:856
+  case 253:
+#line 997 "dhcp6_parser.yy" // lalr1.cc:859
     {
     // Parse the subnet6 list entry map
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.push_back(m);
 }
-#line 1843 "dhcp6_parser.cc" // lalr1.cc:856
+#line 1825 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 251:
-#line 996 "dhcp6_parser.yy" // lalr1.cc:856
+  case 254:
+#line 1001 "dhcp6_parser.yy" // lalr1.cc:859
     {
     // The subnet subnet6 parameter is required
     ctx.require("subnet", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
     // parsing completed
 }
-#line 1853 "dhcp6_parser.cc" // lalr1.cc:856
+#line 1835 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 274:
-#line 1030 "dhcp6_parser.yy" // lalr1.cc:856
+  case 277:
+#line 1035 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 1861 "dhcp6_parser.cc" // lalr1.cc:856
+#line 1843 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 275:
-#line 1032 "dhcp6_parser.yy" // lalr1.cc:856
+  case 278:
+#line 1037 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr subnet(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("subnet", subnet);
     ctx.leave();
 }
-#line 1871 "dhcp6_parser.cc" // lalr1.cc:856
+#line 1853 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 276:
-#line 1038 "dhcp6_parser.yy" // lalr1.cc:856
+  case 279:
+#line 1043 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 1879 "dhcp6_parser.cc" // lalr1.cc:856
+#line 1861 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 277:
-#line 1040 "dhcp6_parser.yy" // lalr1.cc:856
+  case 280:
+#line 1045 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr iface(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("interface", iface);
     ctx.leave();
 }
-#line 1889 "dhcp6_parser.cc" // lalr1.cc:856
+#line 1871 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 278:
-#line 1046 "dhcp6_parser.yy" // lalr1.cc:856
+  case 281:
+#line 1051 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 1897 "dhcp6_parser.cc" // lalr1.cc:856
+#line 1879 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 279:
-#line 1048 "dhcp6_parser.yy" // lalr1.cc:856
+  case 282:
+#line 1053 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr iface(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("interface-id", iface);
     ctx.leave();
 }
-#line 1907 "dhcp6_parser.cc" // lalr1.cc:856
+#line 1889 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 280:
-#line 1054 "dhcp6_parser.yy" // lalr1.cc:856
+  case 283:
+#line 1059 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 1915 "dhcp6_parser.cc" // lalr1.cc:856
+#line 1897 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 281:
-#line 1056 "dhcp6_parser.yy" // lalr1.cc:856
+  case 284:
+#line 1061 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr cls(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("client-class", cls);
     ctx.leave();
 }
-#line 1925 "dhcp6_parser.cc" // lalr1.cc:856
+#line 1907 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 282:
-#line 1062 "dhcp6_parser.yy" // lalr1.cc:856
+  case 285:
+#line 1067 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr c(new ListElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("require-client-classes", c);
     ctx.stack_.push_back(c);
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 1936 "dhcp6_parser.cc" // lalr1.cc:856
+#line 1918 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 283:
-#line 1067 "dhcp6_parser.yy" // lalr1.cc:856
+  case 286:
+#line 1072 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 1945 "dhcp6_parser.cc" // lalr1.cc:856
+#line 1927 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 284:
-#line 1072 "dhcp6_parser.yy" // lalr1.cc:856
+  case 287:
+#line 1077 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.RESERVATION_MODE);
 }
-#line 1953 "dhcp6_parser.cc" // lalr1.cc:856
+#line 1935 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 285:
-#line 1074 "dhcp6_parser.yy" // lalr1.cc:856
+  case 288:
+#line 1079 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.back()->set("reservation-mode", yystack_[0].value.as< ElementPtr > ());
     ctx.leave();
 }
-#line 1962 "dhcp6_parser.cc" // lalr1.cc:856
+#line 1944 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 286:
-#line 1079 "dhcp6_parser.yy" // lalr1.cc:856
+  case 289:
+#line 1084 "dhcp6_parser.yy" // lalr1.cc:859
     { yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("disabled", ctx.loc2pos(yystack_[0].location))); }
-#line 1968 "dhcp6_parser.cc" // lalr1.cc:856
+#line 1950 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 287:
-#line 1080 "dhcp6_parser.yy" // lalr1.cc:856
+  case 290:
+#line 1085 "dhcp6_parser.yy" // lalr1.cc:859
     { yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("out-of-pool", ctx.loc2pos(yystack_[0].location))); }
-#line 1974 "dhcp6_parser.cc" // lalr1.cc:856
+#line 1956 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 288:
-#line 1081 "dhcp6_parser.yy" // lalr1.cc:856
+  case 291:
+#line 1086 "dhcp6_parser.yy" // lalr1.cc:859
     { yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("all", ctx.loc2pos(yystack_[0].location))); }
-#line 1980 "dhcp6_parser.cc" // lalr1.cc:856
+#line 1962 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 289:
-#line 1084 "dhcp6_parser.yy" // lalr1.cc:856
+  case 292:
+#line 1089 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr id(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("id", id);
 }
-#line 1989 "dhcp6_parser.cc" // lalr1.cc:856
+#line 1971 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 290:
-#line 1089 "dhcp6_parser.yy" // lalr1.cc:856
+  case 293:
+#line 1094 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr rc(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("rapid-commit", rc);
 }
-#line 1998 "dhcp6_parser.cc" // lalr1.cc:856
+#line 1980 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 291:
-#line 1097 "dhcp6_parser.yy" // lalr1.cc:856
+  case 294:
+#line 1102 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("shared-networks", l);
     ctx.stack_.push_back(l);
     ctx.enter(ctx.SHARED_NETWORK);
 }
-#line 2009 "dhcp6_parser.cc" // lalr1.cc:856
+#line 1991 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 292:
-#line 1102 "dhcp6_parser.yy" // lalr1.cc:856
+  case 295:
+#line 1107 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 2018 "dhcp6_parser.cc" // lalr1.cc:856
+#line 2000 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 297:
-#line 1117 "dhcp6_parser.yy" // lalr1.cc:856
+  case 300:
+#line 1122 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(m);
     ctx.stack_.push_back(m);
 }
-#line 2028 "dhcp6_parser.cc" // lalr1.cc:856
+#line 2010 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 298:
-#line 1121 "dhcp6_parser.yy" // lalr1.cc:856
+  case 301:
+#line 1126 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
 }
-#line 2036 "dhcp6_parser.cc" // lalr1.cc:856
+#line 2018 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 318:
-#line 1152 "dhcp6_parser.yy" // lalr1.cc:856
+  case 321:
+#line 1157 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("option-def", l);
     ctx.stack_.push_back(l);
     ctx.enter(ctx.OPTION_DEF);
 }
-#line 2047 "dhcp6_parser.cc" // lalr1.cc:856
+#line 2029 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 319:
-#line 1157 "dhcp6_parser.yy" // lalr1.cc:856
+  case 322:
+#line 1162 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 2056 "dhcp6_parser.cc" // lalr1.cc:856
+#line 2038 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 320:
-#line 1165 "dhcp6_parser.yy" // lalr1.cc:856
+  case 323:
+#line 1170 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.push_back(m);
 }
-#line 2065 "dhcp6_parser.cc" // lalr1.cc:856
+#line 2047 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 321:
-#line 1168 "dhcp6_parser.yy" // lalr1.cc:856
+  case 324:
+#line 1173 "dhcp6_parser.yy" // lalr1.cc:859
     {
     // parsing completed
 }
-#line 2073 "dhcp6_parser.cc" // lalr1.cc:856
+#line 2055 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 326:
-#line 1184 "dhcp6_parser.yy" // lalr1.cc:856
+  case 329:
+#line 1189 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(m);
     ctx.stack_.push_back(m);
 }
-#line 2083 "dhcp6_parser.cc" // lalr1.cc:856
+#line 2065 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 327:
-#line 1188 "dhcp6_parser.yy" // lalr1.cc:856
+  case 330:
+#line 1193 "dhcp6_parser.yy" // lalr1.cc:859
     {
     // The name, code and type option def parameters are required.
     ctx.require("name", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
@@ -2091,21 +2073,21 @@ namespace isc { namespace dhcp {
     ctx.require("type", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
     ctx.stack_.pop_back();
 }
-#line 2095 "dhcp6_parser.cc" // lalr1.cc:856
+#line 2077 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 328:
-#line 1199 "dhcp6_parser.yy" // lalr1.cc:856
+  case 331:
+#line 1204 "dhcp6_parser.yy" // lalr1.cc:859
     {
     // Parse the option-def list entry map
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.push_back(m);
 }
-#line 2105 "dhcp6_parser.cc" // lalr1.cc:856
+#line 2087 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 329:
-#line 1203 "dhcp6_parser.yy" // lalr1.cc:856
+  case 332:
+#line 1208 "dhcp6_parser.yy" // lalr1.cc:859
     {
     // The name, code and type option def parameters are required.
     ctx.require("name", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
@@ -2113,280 +2095,280 @@ namespace isc { namespace dhcp {
     ctx.require("type", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
     // parsing completed
 }
-#line 2117 "dhcp6_parser.cc" // lalr1.cc:856
+#line 2099 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 345:
-#line 1235 "dhcp6_parser.yy" // lalr1.cc:856
+  case 348:
+#line 1240 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr code(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("code", code);
 }
-#line 2126 "dhcp6_parser.cc" // lalr1.cc:856
+#line 2108 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 347:
-#line 1242 "dhcp6_parser.yy" // lalr1.cc:856
+  case 350:
+#line 1247 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2134 "dhcp6_parser.cc" // lalr1.cc:856
+#line 2116 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 348:
-#line 1244 "dhcp6_parser.yy" // lalr1.cc:856
+  case 351:
+#line 1249 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr prf(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("type", prf);
     ctx.leave();
 }
-#line 2144 "dhcp6_parser.cc" // lalr1.cc:856
+#line 2126 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 349:
-#line 1250 "dhcp6_parser.yy" // lalr1.cc:856
+  case 352:
+#line 1255 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2152 "dhcp6_parser.cc" // lalr1.cc:856
+#line 2134 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 350:
-#line 1252 "dhcp6_parser.yy" // lalr1.cc:856
+  case 353:
+#line 1257 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr rtypes(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("record-types", rtypes);
     ctx.leave();
 }
-#line 2162 "dhcp6_parser.cc" // lalr1.cc:856
+#line 2144 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 351:
-#line 1258 "dhcp6_parser.yy" // lalr1.cc:856
+  case 354:
+#line 1263 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2170 "dhcp6_parser.cc" // lalr1.cc:856
+#line 2152 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 352:
-#line 1260 "dhcp6_parser.yy" // lalr1.cc:856
+  case 355:
+#line 1265 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr space(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("space", space);
     ctx.leave();
 }
-#line 2180 "dhcp6_parser.cc" // lalr1.cc:856
+#line 2162 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 354:
-#line 1268 "dhcp6_parser.yy" // lalr1.cc:856
+  case 357:
+#line 1273 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2188 "dhcp6_parser.cc" // lalr1.cc:856
+#line 2170 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 355:
-#line 1270 "dhcp6_parser.yy" // lalr1.cc:856
+  case 358:
+#line 1275 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr encap(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("encapsulate", encap);
     ctx.leave();
 }
-#line 2198 "dhcp6_parser.cc" // lalr1.cc:856
+#line 2180 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 356:
-#line 1276 "dhcp6_parser.yy" // lalr1.cc:856
+  case 359:
+#line 1281 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr array(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("array", array);
 }
-#line 2207 "dhcp6_parser.cc" // lalr1.cc:856
+#line 2189 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 357:
-#line 1285 "dhcp6_parser.yy" // lalr1.cc:856
+  case 360:
+#line 1290 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("option-data", l);
     ctx.stack_.push_back(l);
     ctx.enter(ctx.OPTION_DATA);
 }
-#line 2218 "dhcp6_parser.cc" // lalr1.cc:856
+#line 2200 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 358:
-#line 1290 "dhcp6_parser.yy" // lalr1.cc:856
+  case 361:
+#line 1295 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 2227 "dhcp6_parser.cc" // lalr1.cc:856
+#line 2209 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 363:
-#line 1309 "dhcp6_parser.yy" // lalr1.cc:856
+  case 366:
+#line 1314 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(m);
     ctx.stack_.push_back(m);
 }
-#line 2237 "dhcp6_parser.cc" // lalr1.cc:856
+#line 2219 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 364:
-#line 1313 "dhcp6_parser.yy" // lalr1.cc:856
+  case 367:
+#line 1318 "dhcp6_parser.yy" // lalr1.cc:859
     {
     /// @todo: the code or name parameters are required.
     ctx.stack_.pop_back();
 }
-#line 2246 "dhcp6_parser.cc" // lalr1.cc:856
+#line 2228 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 365:
-#line 1321 "dhcp6_parser.yy" // lalr1.cc:856
+  case 368:
+#line 1326 "dhcp6_parser.yy" // lalr1.cc:859
     {
     // Parse the option-data list entry map
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.push_back(m);
 }
-#line 2256 "dhcp6_parser.cc" // lalr1.cc:856
+#line 2238 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 366:
-#line 1325 "dhcp6_parser.yy" // lalr1.cc:856
+  case 369:
+#line 1330 "dhcp6_parser.yy" // lalr1.cc:859
     {
     /// @todo: the code or name parameters are required.
     // parsing completed
 }
-#line 2265 "dhcp6_parser.cc" // lalr1.cc:856
+#line 2247 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 381:
-#line 1358 "dhcp6_parser.yy" // lalr1.cc:856
+  case 384:
+#line 1363 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2273 "dhcp6_parser.cc" // lalr1.cc:856
+#line 2255 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 382:
-#line 1360 "dhcp6_parser.yy" // lalr1.cc:856
+  case 385:
+#line 1365 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr data(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("data", data);
     ctx.leave();
 }
-#line 2283 "dhcp6_parser.cc" // lalr1.cc:856
+#line 2265 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 385:
-#line 1370 "dhcp6_parser.yy" // lalr1.cc:856
+  case 388:
+#line 1375 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr space(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("csv-format", space);
 }
-#line 2292 "dhcp6_parser.cc" // lalr1.cc:856
+#line 2274 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 386:
-#line 1375 "dhcp6_parser.yy" // lalr1.cc:856
+  case 389:
+#line 1380 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr persist(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("always-send", persist);
 }
-#line 2301 "dhcp6_parser.cc" // lalr1.cc:856
+#line 2283 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 387:
-#line 1383 "dhcp6_parser.yy" // lalr1.cc:856
+  case 390:
+#line 1388 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("pools", l);
     ctx.stack_.push_back(l);
     ctx.enter(ctx.POOLS);
 }
-#line 2312 "dhcp6_parser.cc" // lalr1.cc:856
+#line 2294 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 388:
-#line 1388 "dhcp6_parser.yy" // lalr1.cc:856
+  case 391:
+#line 1393 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 2321 "dhcp6_parser.cc" // lalr1.cc:856
+#line 2303 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 393:
-#line 1403 "dhcp6_parser.yy" // lalr1.cc:856
+  case 396:
+#line 1408 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(m);
     ctx.stack_.push_back(m);
 }
-#line 2331 "dhcp6_parser.cc" // lalr1.cc:856
+#line 2313 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 394:
-#line 1407 "dhcp6_parser.yy" // lalr1.cc:856
+  case 397:
+#line 1412 "dhcp6_parser.yy" // lalr1.cc:859
     {
     // The pool parameter is required.
     ctx.require("pool", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
     ctx.stack_.pop_back();
 }
-#line 2341 "dhcp6_parser.cc" // lalr1.cc:856
+#line 2323 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 395:
-#line 1413 "dhcp6_parser.yy" // lalr1.cc:856
+  case 398:
+#line 1418 "dhcp6_parser.yy" // lalr1.cc:859
     {
     // Parse the pool list entry map
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.push_back(m);
 }
-#line 2351 "dhcp6_parser.cc" // lalr1.cc:856
+#line 2333 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 396:
-#line 1417 "dhcp6_parser.yy" // lalr1.cc:856
+  case 399:
+#line 1422 "dhcp6_parser.yy" // lalr1.cc:859
     {
     // The pool parameter is required.
     ctx.require("pool", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
 }
-#line 2360 "dhcp6_parser.cc" // lalr1.cc:856
+#line 2342 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 406:
-#line 1435 "dhcp6_parser.yy" // lalr1.cc:856
+  case 409:
+#line 1440 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2368 "dhcp6_parser.cc" // lalr1.cc:856
+#line 2350 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 407:
-#line 1437 "dhcp6_parser.yy" // lalr1.cc:856
+  case 410:
+#line 1442 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr pool(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("pool", pool);
     ctx.leave();
 }
-#line 2378 "dhcp6_parser.cc" // lalr1.cc:856
+#line 2360 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 408:
-#line 1443 "dhcp6_parser.yy" // lalr1.cc:856
+  case 411:
+#line 1448 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2386 "dhcp6_parser.cc" // lalr1.cc:856
+#line 2368 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 409:
-#line 1445 "dhcp6_parser.yy" // lalr1.cc:856
+  case 412:
+#line 1450 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr parent = ctx.stack_.back();
     ElementPtr user_context = yystack_[0].value.as< ElementPtr > ();
@@ -2409,19 +2391,19 @@ namespace isc { namespace dhcp {
     parent->set("user-context", user_context);
     ctx.leave();
 }
-#line 2413 "dhcp6_parser.cc" // lalr1.cc:856
+#line 2395 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 410:
-#line 1468 "dhcp6_parser.yy" // lalr1.cc:856
+  case 413:
+#line 1473 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2421 "dhcp6_parser.cc" // lalr1.cc:856
+#line 2403 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 411:
-#line 1470 "dhcp6_parser.yy" // lalr1.cc:856
+  case 414:
+#line 1475 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr parent = ctx.stack_.back();
     ElementPtr user_context(new MapElement(ctx.loc2pos(yystack_[3].location)));
@@ -2446,41 +2428,41 @@ namespace isc { namespace dhcp {
     parent->set("user-context", user_context);
     ctx.leave();
 }
-#line 2450 "dhcp6_parser.cc" // lalr1.cc:856
+#line 2432 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 412:
-#line 1498 "dhcp6_parser.yy" // lalr1.cc:856
+  case 415:
+#line 1503 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("pd-pools", l);
     ctx.stack_.push_back(l);
     ctx.enter(ctx.PD_POOLS);
 }
-#line 2461 "dhcp6_parser.cc" // lalr1.cc:856
+#line 2443 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 413:
-#line 1503 "dhcp6_parser.yy" // lalr1.cc:856
+  case 416:
+#line 1508 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 2470 "dhcp6_parser.cc" // lalr1.cc:856
+#line 2452 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 418:
-#line 1518 "dhcp6_parser.yy" // lalr1.cc:856
+  case 421:
+#line 1523 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(m);
     ctx.stack_.push_back(m);
 }
-#line 2480 "dhcp6_parser.cc" // lalr1.cc:856
+#line 2462 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 419:
-#line 1522 "dhcp6_parser.yy" // lalr1.cc:856
+  case 422:
+#line 1527 "dhcp6_parser.yy" // lalr1.cc:859
     {
     // The prefix, prefix len and delegated len parameters are required.
     ctx.require("prefix", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
@@ -2488,21 +2470,21 @@ namespace isc { namespace dhcp {
     ctx.require("delegated-len", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
     ctx.stack_.pop_back();
 }
-#line 2492 "dhcp6_parser.cc" // lalr1.cc:856
+#line 2474 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 420:
-#line 1530 "dhcp6_parser.yy" // lalr1.cc:856
+  case 423:
+#line 1535 "dhcp6_parser.yy" // lalr1.cc:859
     {
     // Parse the pd-pool list entry map
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.push_back(m);
 }
-#line 2502 "dhcp6_parser.cc" // lalr1.cc:856
+#line 2484 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 421:
-#line 1534 "dhcp6_parser.yy" // lalr1.cc:856
+  case 424:
+#line 1539 "dhcp6_parser.yy" // lalr1.cc:859
     {
     // The prefix, prefix len and delegated len parameters are required.
     ctx.require("prefix", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
@@ -2510,1091 +2492,1169 @@ namespace isc { namespace dhcp {
     ctx.require("delegated-len", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
     // parsing completed
 }
-#line 2514 "dhcp6_parser.cc" // lalr1.cc:856
+#line 2496 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 435:
-#line 1559 "dhcp6_parser.yy" // lalr1.cc:856
+  case 438:
+#line 1564 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2522 "dhcp6_parser.cc" // lalr1.cc:856
+#line 2504 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 436:
-#line 1561 "dhcp6_parser.yy" // lalr1.cc:856
+  case 439:
+#line 1566 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr prf(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("prefix", prf);
     ctx.leave();
 }
-#line 2532 "dhcp6_parser.cc" // lalr1.cc:856
+#line 2514 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 437:
-#line 1567 "dhcp6_parser.yy" // lalr1.cc:856
+  case 440:
+#line 1572 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr prf(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("prefix-len", prf);
 }
-#line 2541 "dhcp6_parser.cc" // lalr1.cc:856
+#line 2523 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 438:
-#line 1572 "dhcp6_parser.yy" // lalr1.cc:856
+  case 441:
+#line 1577 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2549 "dhcp6_parser.cc" // lalr1.cc:856
+#line 2531 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 439:
-#line 1574 "dhcp6_parser.yy" // lalr1.cc:856
+  case 442:
+#line 1579 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr prf(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("excluded-prefix", prf);
     ctx.leave();
 }
-#line 2559 "dhcp6_parser.cc" // lalr1.cc:856
+#line 2541 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 440:
-#line 1580 "dhcp6_parser.yy" // lalr1.cc:856
+  case 443:
+#line 1585 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr prf(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("excluded-prefix-len", prf);
 }
-#line 2568 "dhcp6_parser.cc" // lalr1.cc:856
+#line 2550 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 441:
-#line 1585 "dhcp6_parser.yy" // lalr1.cc:856
+  case 444:
+#line 1590 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr deleg(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("delegated-len", deleg);
 }
-#line 2577 "dhcp6_parser.cc" // lalr1.cc:856
+#line 2559 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 442:
-#line 1593 "dhcp6_parser.yy" // lalr1.cc:856
+  case 445:
+#line 1598 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("reservations", l);
     ctx.stack_.push_back(l);
     ctx.enter(ctx.RESERVATIONS);
 }
-#line 2588 "dhcp6_parser.cc" // lalr1.cc:856
+#line 2570 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 443:
-#line 1598 "dhcp6_parser.yy" // lalr1.cc:856
+  case 446:
+#line 1603 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 2597 "dhcp6_parser.cc" // lalr1.cc:856
+#line 2579 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 448:
-#line 1611 "dhcp6_parser.yy" // lalr1.cc:856
+  case 451:
+#line 1616 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(m);
     ctx.stack_.push_back(m);
 }
-#line 2607 "dhcp6_parser.cc" // lalr1.cc:856
+#line 2589 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 449:
-#line 1615 "dhcp6_parser.yy" // lalr1.cc:856
+  case 452:
+#line 1620 "dhcp6_parser.yy" // lalr1.cc:859
     {
     /// @todo: an identifier parameter is required.
     ctx.stack_.pop_back();
 }
-#line 2616 "dhcp6_parser.cc" // lalr1.cc:856
+#line 2598 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 450:
-#line 1620 "dhcp6_parser.yy" // lalr1.cc:856
+  case 453:
+#line 1625 "dhcp6_parser.yy" // lalr1.cc:859
     {
     // Parse the reservations list entry map
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.push_back(m);
 }
-#line 2626 "dhcp6_parser.cc" // lalr1.cc:856
+#line 2608 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 451:
-#line 1624 "dhcp6_parser.yy" // lalr1.cc:856
+  case 454:
+#line 1629 "dhcp6_parser.yy" // lalr1.cc:859
     {
     /// @todo: an identifier parameter is required.
     // parsing completed
 }
-#line 2635 "dhcp6_parser.cc" // lalr1.cc:856
+#line 2617 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 467:
-#line 1651 "dhcp6_parser.yy" // lalr1.cc:856
+  case 470:
+#line 1656 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("ip-addresses", l);
     ctx.stack_.push_back(l);
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2646 "dhcp6_parser.cc" // lalr1.cc:856
+#line 2628 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 468:
-#line 1656 "dhcp6_parser.yy" // lalr1.cc:856
+  case 471:
+#line 1661 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 2655 "dhcp6_parser.cc" // lalr1.cc:856
+#line 2637 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 469:
-#line 1661 "dhcp6_parser.yy" // lalr1.cc:856
+  case 472:
+#line 1666 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("prefixes", l);
     ctx.stack_.push_back(l);
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2666 "dhcp6_parser.cc" // lalr1.cc:856
+#line 2648 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 470:
-#line 1666 "dhcp6_parser.yy" // lalr1.cc:856
+  case 473:
+#line 1671 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 2675 "dhcp6_parser.cc" // lalr1.cc:856
+#line 2657 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 471:
-#line 1671 "dhcp6_parser.yy" // lalr1.cc:856
+  case 474:
+#line 1676 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2683 "dhcp6_parser.cc" // lalr1.cc:856
+#line 2665 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 472:
-#line 1673 "dhcp6_parser.yy" // lalr1.cc:856
+  case 475:
+#line 1678 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr d(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("duid", d);
     ctx.leave();
 }
-#line 2693 "dhcp6_parser.cc" // lalr1.cc:856
+#line 2675 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 473:
-#line 1679 "dhcp6_parser.yy" // lalr1.cc:856
+  case 476:
+#line 1684 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2701 "dhcp6_parser.cc" // lalr1.cc:856
+#line 2683 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 474:
-#line 1681 "dhcp6_parser.yy" // lalr1.cc:856
+  case 477:
+#line 1686 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr hw(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("hw-address", hw);
     ctx.leave();
 }
-#line 2711 "dhcp6_parser.cc" // lalr1.cc:856
+#line 2693 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 475:
-#line 1687 "dhcp6_parser.yy" // lalr1.cc:856
+  case 478:
+#line 1692 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2719 "dhcp6_parser.cc" // lalr1.cc:856
+#line 2701 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 476:
-#line 1689 "dhcp6_parser.yy" // lalr1.cc:856
+  case 479:
+#line 1694 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr host(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("hostname", host);
     ctx.leave();
 }
-#line 2729 "dhcp6_parser.cc" // lalr1.cc:856
+#line 2711 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 477:
-#line 1695 "dhcp6_parser.yy" // lalr1.cc:856
+  case 480:
+#line 1700 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2737 "dhcp6_parser.cc" // lalr1.cc:856
+#line 2719 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 478:
-#line 1697 "dhcp6_parser.yy" // lalr1.cc:856
+  case 481:
+#line 1702 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr hw(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("flex-id", hw);
     ctx.leave();
 }
-#line 2747 "dhcp6_parser.cc" // lalr1.cc:856
+#line 2729 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 479:
-#line 1703 "dhcp6_parser.yy" // lalr1.cc:856
+  case 482:
+#line 1708 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr c(new ListElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("client-classes", c);
     ctx.stack_.push_back(c);
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2758 "dhcp6_parser.cc" // lalr1.cc:856
+#line 2740 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 480:
-#line 1708 "dhcp6_parser.yy" // lalr1.cc:856
+  case 483:
+#line 1713 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 2767 "dhcp6_parser.cc" // lalr1.cc:856
+#line 2749 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 481:
-#line 1716 "dhcp6_parser.yy" // lalr1.cc:856
+  case 484:
+#line 1721 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("relay", m);
     ctx.stack_.push_back(m);
     ctx.enter(ctx.RELAY);
 }
-#line 2778 "dhcp6_parser.cc" // lalr1.cc:856
+#line 2760 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 482:
-#line 1721 "dhcp6_parser.yy" // lalr1.cc:856
+  case 485:
+#line 1726 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 2787 "dhcp6_parser.cc" // lalr1.cc:856
+#line 2769 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 485:
-#line 1730 "dhcp6_parser.yy" // lalr1.cc:856
+  case 488:
+#line 1735 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2795 "dhcp6_parser.cc" // lalr1.cc:856
+#line 2777 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 486:
-#line 1732 "dhcp6_parser.yy" // lalr1.cc:856
+  case 489:
+#line 1737 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr addr(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("ip-address", addr);
     ctx.leave();
 }
-#line 2805 "dhcp6_parser.cc" // lalr1.cc:856
+#line 2787 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 487:
-#line 1741 "dhcp6_parser.yy" // lalr1.cc:856
+  case 490:
+#line 1746 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("client-classes", l);
     ctx.stack_.push_back(l);
     ctx.enter(ctx.CLIENT_CLASSES);
 }
-#line 2816 "dhcp6_parser.cc" // lalr1.cc:856
+#line 2798 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 488:
-#line 1746 "dhcp6_parser.yy" // lalr1.cc:856
+  case 491:
+#line 1751 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 2825 "dhcp6_parser.cc" // lalr1.cc:856
+#line 2807 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 491:
-#line 1755 "dhcp6_parser.yy" // lalr1.cc:856
+  case 494:
+#line 1760 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(m);
     ctx.stack_.push_back(m);
 }
-#line 2835 "dhcp6_parser.cc" // lalr1.cc:856
+#line 2817 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 492:
-#line 1759 "dhcp6_parser.yy" // lalr1.cc:856
+  case 495:
+#line 1764 "dhcp6_parser.yy" // lalr1.cc:859
     {
     // The name client class parameter is required.
     ctx.require("name", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
     ctx.stack_.pop_back();
 }
-#line 2845 "dhcp6_parser.cc" // lalr1.cc:856
+#line 2827 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 505:
-#line 1784 "dhcp6_parser.yy" // lalr1.cc:856
+  case 508:
+#line 1789 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2853 "dhcp6_parser.cc" // lalr1.cc:856
+#line 2835 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 506:
-#line 1786 "dhcp6_parser.yy" // lalr1.cc:856
+  case 509:
+#line 1791 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr test(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("test", test);
     ctx.leave();
 }
-#line 2863 "dhcp6_parser.cc" // lalr1.cc:856
+#line 2845 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 507:
-#line 1792 "dhcp6_parser.yy" // lalr1.cc:856
+  case 510:
+#line 1797 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr b(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("only-if-required", b);
 }
-#line 2872 "dhcp6_parser.cc" // lalr1.cc:856
+#line 2854 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 508:
-#line 1800 "dhcp6_parser.yy" // lalr1.cc:856
+  case 511:
+#line 1805 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("server-id", m);
     ctx.stack_.push_back(m);
     ctx.enter(ctx.SERVER_ID);
 }
-#line 2883 "dhcp6_parser.cc" // lalr1.cc:856
+#line 2865 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 509:
-#line 1805 "dhcp6_parser.yy" // lalr1.cc:856
+  case 512:
+#line 1810 "dhcp6_parser.yy" // lalr1.cc:859
     {
     // The type parameter is required.
     ctx.require("type", ctx.loc2pos(yystack_[2].location), ctx.loc2pos(yystack_[0].location));
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 2894 "dhcp6_parser.cc" // lalr1.cc:856
+#line 2876 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 521:
-#line 1827 "dhcp6_parser.yy" // lalr1.cc:856
+  case 524:
+#line 1832 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.DUID_TYPE);
 }
-#line 2902 "dhcp6_parser.cc" // lalr1.cc:856
+#line 2884 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 522:
-#line 1829 "dhcp6_parser.yy" // lalr1.cc:856
+  case 525:
+#line 1834 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.back()->set("type", yystack_[0].value.as< ElementPtr > ());
     ctx.leave();
 }
-#line 2911 "dhcp6_parser.cc" // lalr1.cc:856
+#line 2893 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 523:
-#line 1834 "dhcp6_parser.yy" // lalr1.cc:856
+  case 526:
+#line 1839 "dhcp6_parser.yy" // lalr1.cc:859
     { yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("LLT", ctx.loc2pos(yystack_[0].location))); }
-#line 2917 "dhcp6_parser.cc" // lalr1.cc:856
+#line 2899 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 524:
-#line 1835 "dhcp6_parser.yy" // lalr1.cc:856
+  case 527:
+#line 1840 "dhcp6_parser.yy" // lalr1.cc:859
     { yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("EN", ctx.loc2pos(yystack_[0].location))); }
-#line 2923 "dhcp6_parser.cc" // lalr1.cc:856
+#line 2905 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 525:
-#line 1836 "dhcp6_parser.yy" // lalr1.cc:856
+  case 528:
+#line 1841 "dhcp6_parser.yy" // lalr1.cc:859
     { yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("LL", ctx.loc2pos(yystack_[0].location))); }
-#line 2929 "dhcp6_parser.cc" // lalr1.cc:856
+#line 2911 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 526:
-#line 1839 "dhcp6_parser.yy" // lalr1.cc:856
+  case 529:
+#line 1844 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr htype(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("htype", htype);
 }
-#line 2938 "dhcp6_parser.cc" // lalr1.cc:856
+#line 2920 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 527:
-#line 1844 "dhcp6_parser.yy" // lalr1.cc:856
+  case 530:
+#line 1849 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2946 "dhcp6_parser.cc" // lalr1.cc:856
+#line 2928 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 528:
-#line 1846 "dhcp6_parser.yy" // lalr1.cc:856
+  case 531:
+#line 1851 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr id(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("identifier", id);
     ctx.leave();
 }
-#line 2956 "dhcp6_parser.cc" // lalr1.cc:856
+#line 2938 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 529:
-#line 1852 "dhcp6_parser.yy" // lalr1.cc:856
+  case 532:
+#line 1857 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr time(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("time", time);
 }
-#line 2965 "dhcp6_parser.cc" // lalr1.cc:856
+#line 2947 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 530:
-#line 1857 "dhcp6_parser.yy" // lalr1.cc:856
+  case 533:
+#line 1862 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr time(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("enterprise-id", time);
 }
-#line 2974 "dhcp6_parser.cc" // lalr1.cc:856
+#line 2956 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 531:
-#line 1864 "dhcp6_parser.yy" // lalr1.cc:856
+  case 534:
+#line 1869 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr time(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("dhcp4o6-port", time);
 }
-#line 2983 "dhcp6_parser.cc" // lalr1.cc:856
+#line 2965 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 532:
-#line 1871 "dhcp6_parser.yy" // lalr1.cc:856
+  case 535:
+#line 1876 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("control-socket", m);
     ctx.stack_.push_back(m);
     ctx.enter(ctx.CONTROL_SOCKET);
 }
-#line 2994 "dhcp6_parser.cc" // lalr1.cc:856
+#line 2976 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 533:
-#line 1876 "dhcp6_parser.yy" // lalr1.cc:856
+  case 536:
+#line 1881 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 3003 "dhcp6_parser.cc" // lalr1.cc:856
+#line 2985 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 541:
-#line 1892 "dhcp6_parser.yy" // lalr1.cc:856
+  case 544:
+#line 1897 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 3011 "dhcp6_parser.cc" // lalr1.cc:856
+#line 2993 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 542:
-#line 1894 "dhcp6_parser.yy" // lalr1.cc:856
+  case 545:
+#line 1899 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr stype(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("socket-type", stype);
     ctx.leave();
 }
-#line 3021 "dhcp6_parser.cc" // lalr1.cc:856
+#line 3003 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 543:
-#line 1900 "dhcp6_parser.yy" // lalr1.cc:856
+  case 546:
+#line 1905 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 3029 "dhcp6_parser.cc" // lalr1.cc:856
+#line 3011 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 544:
-#line 1902 "dhcp6_parser.yy" // lalr1.cc:856
+  case 547:
+#line 1907 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr name(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("socket-name", name);
     ctx.leave();
 }
-#line 3039 "dhcp6_parser.cc" // lalr1.cc:856
+#line 3021 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 545:
-#line 1910 "dhcp6_parser.yy" // lalr1.cc:856
+  case 548:
+#line 1915 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("dhcp-ddns", m);
     ctx.stack_.push_back(m);
     ctx.enter(ctx.DHCP_DDNS);
 }
-#line 3050 "dhcp6_parser.cc" // lalr1.cc:856
+#line 3032 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 546:
-#line 1915 "dhcp6_parser.yy" // lalr1.cc:856
+  case 549:
+#line 1920 "dhcp6_parser.yy" // lalr1.cc:859
     {
     // The enable updates DHCP DDNS parameter is required.
     ctx.require("enable-updates", ctx.loc2pos(yystack_[2].location), ctx.loc2pos(yystack_[0].location));
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 3061 "dhcp6_parser.cc" // lalr1.cc:856
+#line 3043 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 547:
-#line 1922 "dhcp6_parser.yy" // lalr1.cc:856
+  case 550:
+#line 1927 "dhcp6_parser.yy" // lalr1.cc:859
     {
     // Parse the dhcp-ddns map
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.push_back(m);
 }
-#line 3071 "dhcp6_parser.cc" // lalr1.cc:856
+#line 3053 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 548:
-#line 1926 "dhcp6_parser.yy" // lalr1.cc:856
+  case 551:
+#line 1931 "dhcp6_parser.yy" // lalr1.cc:859
     {
     // The enable updates DHCP DDNS parameter is required.
     ctx.require("enable-updates", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
     // parsing completed
 }
-#line 3081 "dhcp6_parser.cc" // lalr1.cc:856
+#line 3063 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 570:
-#line 1957 "dhcp6_parser.yy" // lalr1.cc:856
+  case 573:
+#line 1962 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr b(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("enable-updates", b);
 }
-#line 3090 "dhcp6_parser.cc" // lalr1.cc:856
+#line 3072 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 571:
-#line 1962 "dhcp6_parser.yy" // lalr1.cc:856
+  case 574:
+#line 1967 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 3098 "dhcp6_parser.cc" // lalr1.cc:856
+#line 3080 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 572:
-#line 1964 "dhcp6_parser.yy" // lalr1.cc:856
+  case 575:
+#line 1969 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr s(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("qualifying-suffix", s);
     ctx.leave();
 }
-#line 3108 "dhcp6_parser.cc" // lalr1.cc:856
+#line 3090 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 573:
-#line 1970 "dhcp6_parser.yy" // lalr1.cc:856
+  case 576:
+#line 1975 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 3116 "dhcp6_parser.cc" // lalr1.cc:856
+#line 3098 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 574:
-#line 1972 "dhcp6_parser.yy" // lalr1.cc:856
+  case 577:
+#line 1977 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr s(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("server-ip", s);
     ctx.leave();
 }
-#line 3126 "dhcp6_parser.cc" // lalr1.cc:856
+#line 3108 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 575:
-#line 1978 "dhcp6_parser.yy" // lalr1.cc:856
+  case 578:
+#line 1983 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr i(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("server-port", i);
 }
-#line 3135 "dhcp6_parser.cc" // lalr1.cc:856
+#line 3117 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 576:
-#line 1983 "dhcp6_parser.yy" // lalr1.cc:856
+  case 579:
+#line 1988 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 3143 "dhcp6_parser.cc" // lalr1.cc:856
+#line 3125 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 577:
-#line 1985 "dhcp6_parser.yy" // lalr1.cc:856
+  case 580:
+#line 1990 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr s(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("sender-ip", s);
     ctx.leave();
 }
-#line 3153 "dhcp6_parser.cc" // lalr1.cc:856
+#line 3135 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 578:
-#line 1991 "dhcp6_parser.yy" // lalr1.cc:856
+  case 581:
+#line 1996 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr i(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("sender-port", i);
 }
-#line 3162 "dhcp6_parser.cc" // lalr1.cc:856
+#line 3144 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 579:
-#line 1996 "dhcp6_parser.yy" // lalr1.cc:856
+  case 582:
+#line 2001 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr i(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("max-queue-size", i);
 }
-#line 3171 "dhcp6_parser.cc" // lalr1.cc:856
+#line 3153 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 580:
-#line 2001 "dhcp6_parser.yy" // lalr1.cc:856
+  case 583:
+#line 2006 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NCR_PROTOCOL);
 }
-#line 3179 "dhcp6_parser.cc" // lalr1.cc:856
+#line 3161 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 581:
-#line 2003 "dhcp6_parser.yy" // lalr1.cc:856
+  case 584:
+#line 2008 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.back()->set("ncr-protocol", yystack_[0].value.as< ElementPtr > ());
     ctx.leave();
 }
-#line 3188 "dhcp6_parser.cc" // lalr1.cc:856
+#line 3170 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 582:
-#line 2009 "dhcp6_parser.yy" // lalr1.cc:856
+  case 585:
+#line 2014 "dhcp6_parser.yy" // lalr1.cc:859
     { yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("UDP", ctx.loc2pos(yystack_[0].location))); }
-#line 3194 "dhcp6_parser.cc" // lalr1.cc:856
+#line 3176 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 583:
-#line 2010 "dhcp6_parser.yy" // lalr1.cc:856
+  case 586:
+#line 2015 "dhcp6_parser.yy" // lalr1.cc:859
     { yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("TCP", ctx.loc2pos(yystack_[0].location))); }
-#line 3200 "dhcp6_parser.cc" // lalr1.cc:856
+#line 3182 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 584:
-#line 2013 "dhcp6_parser.yy" // lalr1.cc:856
+  case 587:
+#line 2018 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NCR_FORMAT);
 }
-#line 3208 "dhcp6_parser.cc" // lalr1.cc:856
+#line 3190 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 585:
-#line 2015 "dhcp6_parser.yy" // lalr1.cc:856
+  case 588:
+#line 2020 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr json(new StringElement("JSON", ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("ncr-format", json);
     ctx.leave();
 }
-#line 3218 "dhcp6_parser.cc" // lalr1.cc:856
+#line 3200 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 586:
-#line 2021 "dhcp6_parser.yy" // lalr1.cc:856
+  case 589:
+#line 2026 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr b(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("always-include-fqdn", b);
 }
-#line 3227 "dhcp6_parser.cc" // lalr1.cc:856
+#line 3209 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 587:
-#line 2026 "dhcp6_parser.yy" // lalr1.cc:856
+  case 590:
+#line 2031 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr b(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("override-no-update", b);
 }
-#line 3236 "dhcp6_parser.cc" // lalr1.cc:856
+#line 3218 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 588:
-#line 2031 "dhcp6_parser.yy" // lalr1.cc:856
+  case 591:
+#line 2036 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr b(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("override-client-update", b);
 }
-#line 3245 "dhcp6_parser.cc" // lalr1.cc:856
+#line 3227 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 589:
-#line 2036 "dhcp6_parser.yy" // lalr1.cc:856
+  case 592:
+#line 2041 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.REPLACE_CLIENT_NAME);
 }
-#line 3253 "dhcp6_parser.cc" // lalr1.cc:856
+#line 3235 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 590:
-#line 2038 "dhcp6_parser.yy" // lalr1.cc:856
+  case 593:
+#line 2043 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.back()->set("replace-client-name", yystack_[0].value.as< ElementPtr > ());
     ctx.leave();
 }
-#line 3262 "dhcp6_parser.cc" // lalr1.cc:856
+#line 3244 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 591:
-#line 2044 "dhcp6_parser.yy" // lalr1.cc:856
+  case 594:
+#line 2049 "dhcp6_parser.yy" // lalr1.cc:859
     {
       yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("when-present", ctx.loc2pos(yystack_[0].location)));
       }
-#line 3270 "dhcp6_parser.cc" // lalr1.cc:856
+#line 3252 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 592:
-#line 2047 "dhcp6_parser.yy" // lalr1.cc:856
+  case 595:
+#line 2052 "dhcp6_parser.yy" // lalr1.cc:859
     {
       yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("never", ctx.loc2pos(yystack_[0].location)));
       }
-#line 3278 "dhcp6_parser.cc" // lalr1.cc:856
+#line 3260 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 593:
-#line 2050 "dhcp6_parser.yy" // lalr1.cc:856
+  case 596:
+#line 2055 "dhcp6_parser.yy" // lalr1.cc:859
     {
       yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("always", ctx.loc2pos(yystack_[0].location)));
       }
-#line 3286 "dhcp6_parser.cc" // lalr1.cc:856
+#line 3268 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 594:
-#line 2053 "dhcp6_parser.yy" // lalr1.cc:856
+  case 597:
+#line 2058 "dhcp6_parser.yy" // lalr1.cc:859
     {
       yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("when-not-present", ctx.loc2pos(yystack_[0].location)));
       }
-#line 3294 "dhcp6_parser.cc" // lalr1.cc:856
+#line 3276 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 595:
-#line 2056 "dhcp6_parser.yy" // lalr1.cc:856
+  case 598:
+#line 2061 "dhcp6_parser.yy" // lalr1.cc:859
     {
       error(yystack_[0].location, "boolean values for the replace-client-name are "
                 "no longer supported");
       }
-#line 3303 "dhcp6_parser.cc" // lalr1.cc:856
+#line 3285 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 596:
-#line 2062 "dhcp6_parser.yy" // lalr1.cc:856
+  case 599:
+#line 2067 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 3311 "dhcp6_parser.cc" // lalr1.cc:856
+#line 3293 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 597:
-#line 2064 "dhcp6_parser.yy" // lalr1.cc:856
+  case 600:
+#line 2069 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr s(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("generated-prefix", s);
     ctx.leave();
 }
-#line 3321 "dhcp6_parser.cc" // lalr1.cc:856
+#line 3303 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 598:
-#line 2070 "dhcp6_parser.yy" // lalr1.cc:856
+  case 601:
+#line 2075 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 3329 "dhcp6_parser.cc" // lalr1.cc:856
+#line 3311 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 599:
-#line 2072 "dhcp6_parser.yy" // lalr1.cc:856
+  case 602:
+#line 2077 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr s(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("hostname-char-set", s);
     ctx.leave();
 }
-#line 3339 "dhcp6_parser.cc" // lalr1.cc:856
+#line 3321 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 600:
-#line 2078 "dhcp6_parser.yy" // lalr1.cc:856
+  case 603:
+#line 2083 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 3347 "dhcp6_parser.cc" // lalr1.cc:856
+#line 3329 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 601:
-#line 2080 "dhcp6_parser.yy" // lalr1.cc:856
+  case 604:
+#line 2085 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr s(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("hostname-char-replacement", s);
     ctx.leave();
 }
-#line 3357 "dhcp6_parser.cc" // lalr1.cc:856
+#line 3339 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 602:
-#line 2088 "dhcp6_parser.yy" // lalr1.cc:856
+  case 605:
+#line 2093 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 3365 "dhcp6_parser.cc" // lalr1.cc:856
+#line 3347 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 603:
-#line 2090 "dhcp6_parser.yy" // lalr1.cc:856
+  case 606:
+#line 2095 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.back()->set("Dhcp4", yystack_[0].value.as< ElementPtr > ());
     ctx.leave();
 }
-#line 3374 "dhcp6_parser.cc" // lalr1.cc:856
+#line 3356 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 604:
-#line 2095 "dhcp6_parser.yy" // lalr1.cc:856
+  case 607:
+#line 2100 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 3382 "dhcp6_parser.cc" // lalr1.cc:856
+#line 3364 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 605:
-#line 2097 "dhcp6_parser.yy" // lalr1.cc:856
+  case 608:
+#line 2102 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.back()->set("DhcpDdns", yystack_[0].value.as< ElementPtr > ());
     ctx.leave();
 }
-#line 3391 "dhcp6_parser.cc" // lalr1.cc:856
+#line 3373 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 606:
-#line 2102 "dhcp6_parser.yy" // lalr1.cc:856
+  case 609:
+#line 2107 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 3399 "dhcp6_parser.cc" // lalr1.cc:856
+#line 3381 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 607:
-#line 2104 "dhcp6_parser.yy" // lalr1.cc:856
+  case 610:
+#line 2109 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.back()->set("Control-agent", yystack_[0].value.as< ElementPtr > ());
     ctx.leave();
 }
-#line 3408 "dhcp6_parser.cc" // lalr1.cc:856
+#line 3390 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 608:
-#line 2115 "dhcp6_parser.yy" // lalr1.cc:856
+  case 611:
+#line 2116 "dhcp6_parser.yy" // lalr1.cc:859
+    {
+    ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
+    ctx.stack_.back()->add(m);
+    ctx.stack_.push_back(m);
+}
+#line 3400 "dhcp6_parser.cc" // lalr1.cc:859
+    break;
+
+  case 612:
+#line 2120 "dhcp6_parser.yy" // lalr1.cc:859
+    {
+    ctx.stack_.pop_back();
+}
+#line 3408 "dhcp6_parser.cc" // lalr1.cc:859
+    break;
+
+  case 613:
+#line 2125 "dhcp6_parser.yy" // lalr1.cc:859
+    {
+    ElementPtr i(new MapElement(ctx.loc2pos(yystack_[0].location)));
+    ctx.stack_.back()->set("config-control", i);
+    ctx.stack_.push_back(i);
+    ctx.enter(ctx.CONFIG_CONTROL);
+}
+#line 3419 "dhcp6_parser.cc" // lalr1.cc:859
+    break;
+
+  case 614:
+#line 2130 "dhcp6_parser.yy" // lalr1.cc:859
+    {
+    // No config control params are required
+    ctx.stack_.pop_back();
+    ctx.leave();
+}
+#line 3429 "dhcp6_parser.cc" // lalr1.cc:859
+    break;
+
+  case 615:
+#line 2136 "dhcp6_parser.yy" // lalr1.cc:859
+    {
+    // Parse the config-control map
+    ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
+    ctx.stack_.push_back(m);
+}
+#line 3439 "dhcp6_parser.cc" // lalr1.cc:859
+    break;
+
+  case 616:
+#line 2140 "dhcp6_parser.yy" // lalr1.cc:859
+    {
+    // No config_control params are required
+    // parsing completed
+}
+#line 3448 "dhcp6_parser.cc" // lalr1.cc:859
+    break;
+
+  case 621:
+#line 2155 "dhcp6_parser.yy" // lalr1.cc:859
+    {
+    ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
+    ctx.stack_.back()->set("config-databases", l);
+    ctx.stack_.push_back(l);
+    ctx.enter(ctx.CONFIG_DATABASE);
+}
+#line 3459 "dhcp6_parser.cc" // lalr1.cc:859
+    break;
+
+  case 622:
+#line 2160 "dhcp6_parser.yy" // lalr1.cc:859
+    {
+    ctx.stack_.pop_back();
+    ctx.leave();
+}
+#line 3468 "dhcp6_parser.cc" // lalr1.cc:859
+    break;
+
+  case 623:
+#line 2170 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("Logging", m);
     ctx.stack_.push_back(m);
     ctx.enter(ctx.LOGGING);
 }
-#line 3419 "dhcp6_parser.cc" // lalr1.cc:856
+#line 3479 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 609:
-#line 2120 "dhcp6_parser.yy" // lalr1.cc:856
+  case 624:
+#line 2175 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 3428 "dhcp6_parser.cc" // lalr1.cc:856
+#line 3488 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 610:
-#line 2125 "dhcp6_parser.yy" // lalr1.cc:856
+  case 625:
+#line 2180 "dhcp6_parser.yy" // lalr1.cc:859
     {
     // Parse the Logging map
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.push_back(m);
 }
-#line 3438 "dhcp6_parser.cc" // lalr1.cc:856
+#line 3498 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 611:
-#line 2129 "dhcp6_parser.yy" // lalr1.cc:856
+  case 626:
+#line 2184 "dhcp6_parser.yy" // lalr1.cc:859
     {
     // parsing completed
 }
-#line 3446 "dhcp6_parser.cc" // lalr1.cc:856
+#line 3506 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 615:
-#line 2145 "dhcp6_parser.yy" // lalr1.cc:856
+  case 630:
+#line 2200 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("loggers", l);
     ctx.stack_.push_back(l);
     ctx.enter(ctx.LOGGERS);
 }
-#line 3457 "dhcp6_parser.cc" // lalr1.cc:856
+#line 3517 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 616:
-#line 2150 "dhcp6_parser.yy" // lalr1.cc:856
+  case 631:
+#line 2205 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 3466 "dhcp6_parser.cc" // lalr1.cc:856
+#line 3526 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 619:
-#line 2162 "dhcp6_parser.yy" // lalr1.cc:856
+  case 634:
+#line 2217 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr l(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(l);
     ctx.stack_.push_back(l);
 }
-#line 3476 "dhcp6_parser.cc" // lalr1.cc:856
+#line 3536 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 620:
-#line 2166 "dhcp6_parser.yy" // lalr1.cc:856
+  case 635:
+#line 2221 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
 }
-#line 3484 "dhcp6_parser.cc" // lalr1.cc:856
+#line 3544 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 630:
-#line 2183 "dhcp6_parser.yy" // lalr1.cc:856
+  case 645:
+#line 2238 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr dl(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("debuglevel", dl);
 }
-#line 3493 "dhcp6_parser.cc" // lalr1.cc:856
+#line 3553 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 631:
-#line 2188 "dhcp6_parser.yy" // lalr1.cc:856
+  case 646:
+#line 2243 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 3501 "dhcp6_parser.cc" // lalr1.cc:856
+#line 3561 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 632:
-#line 2190 "dhcp6_parser.yy" // lalr1.cc:856
+  case 647:
+#line 2245 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr sev(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("severity", sev);
     ctx.leave();
 }
-#line 3511 "dhcp6_parser.cc" // lalr1.cc:856
+#line 3571 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 633:
-#line 2196 "dhcp6_parser.yy" // lalr1.cc:856
+  case 648:
+#line 2251 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("output_options", l);
     ctx.stack_.push_back(l);
     ctx.enter(ctx.OUTPUT_OPTIONS);
 }
-#line 3522 "dhcp6_parser.cc" // lalr1.cc:856
+#line 3582 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 634:
-#line 2201 "dhcp6_parser.yy" // lalr1.cc:856
+  case 649:
+#line 2256 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 3531 "dhcp6_parser.cc" // lalr1.cc:856
+#line 3591 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 637:
-#line 2210 "dhcp6_parser.yy" // lalr1.cc:856
+  case 652:
+#line 2265 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(m);
     ctx.stack_.push_back(m);
 }
-#line 3541 "dhcp6_parser.cc" // lalr1.cc:856
+#line 3601 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 638:
-#line 2214 "dhcp6_parser.yy" // lalr1.cc:856
+  case 653:
+#line 2269 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
 }
-#line 3549 "dhcp6_parser.cc" // lalr1.cc:856
+#line 3609 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 645:
-#line 2228 "dhcp6_parser.yy" // lalr1.cc:856
+  case 660:
+#line 2283 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 3557 "dhcp6_parser.cc" // lalr1.cc:856
+#line 3617 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 646:
-#line 2230 "dhcp6_parser.yy" // lalr1.cc:856
+  case 661:
+#line 2285 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr sev(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("output", sev);
     ctx.leave();
 }
-#line 3567 "dhcp6_parser.cc" // lalr1.cc:856
+#line 3627 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 647:
-#line 2236 "dhcp6_parser.yy" // lalr1.cc:856
+  case 662:
+#line 2291 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr flush(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("flush", flush);
 }
-#line 3576 "dhcp6_parser.cc" // lalr1.cc:856
+#line 3636 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 648:
-#line 2241 "dhcp6_parser.yy" // lalr1.cc:856
+  case 663:
+#line 2296 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr maxsize(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("maxsize", maxsize);
 }
-#line 3585 "dhcp6_parser.cc" // lalr1.cc:856
+#line 3645 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 649:
-#line 2246 "dhcp6_parser.yy" // lalr1.cc:856
+  case 664:
+#line 2301 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr maxver(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("maxver", maxver);
 }
-#line 3594 "dhcp6_parser.cc" // lalr1.cc:856
+#line 3654 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
 
-#line 3598 "dhcp6_parser.cc" // lalr1.cc:856
+#line 3658 "dhcp6_parser.cc" // lalr1.cc:859
             default:
               break;
             }
@@ -3656,6 +3716,7 @@ namespace isc { namespace dhcp {
        code.  */
     if (false)
       goto yyerrorlab;
+    yyerror_range[1].location = yystack_[yylen - 1].location;
     /* Do not reclaim the symbols of the rule whose action triggered
        this YYERROR.  */
     yypop_ (yylen);
@@ -3729,7 +3790,8 @@ namespace isc { namespace dhcp {
   }
     catch (...)
       {
-        YYCDEBUG << "Exception caught: cleaning lookahead and stack\n";
+        YYCDEBUG << "Exception caught: cleaning lookahead and stack"
+                 << std::endl;
         // Do not try to display the values of the reclaimed symbols,
         // as their printer might throw an exception.
         if (!yyla.empty ())
@@ -3747,7 +3809,7 @@ namespace isc { namespace dhcp {
   void
   Dhcp6Parser::error (const syntax_error& yyexc)
   {
-    error (yyexc.location, yyexc.what ());
+    error (yyexc.location, yyexc.what());
   }
 
   // Generate an error message.
@@ -3823,13 +3885,12 @@ namespace isc { namespace dhcp {
         case N:                               \
           yyformat = S;                       \
         break
-      default: // Avoid compiler warnings.
-        YYCASE_ (0, YY_("syntax error"));
-        YYCASE_ (1, YY_("syntax error, unexpected %s"));
-        YYCASE_ (2, YY_("syntax error, unexpected %s, expecting %s"));
-        YYCASE_ (3, YY_("syntax error, unexpected %s, expecting %s or %s"));
-        YYCASE_ (4, YY_("syntax error, unexpected %s, expecting %s or %s or %s"));
-        YYCASE_ (5, YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s"));
+        YYCASE_(0, YY_("syntax error"));
+        YYCASE_(1, YY_("syntax error, unexpected %s"));
+        YYCASE_(2, YY_("syntax error, unexpected %s, expecting %s"));
+        YYCASE_(3, YY_("syntax error, unexpected %s, expecting %s or %s"));
+        YYCASE_(4, YY_("syntax error, unexpected %s, expecting %s or %s or %s"));
+        YYCASE_(5, YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s"));
 #undef YYCASE_
       }
 
@@ -3848,705 +3909,724 @@ namespace isc { namespace dhcp {
   }
 
 
-  const short int Dhcp6Parser::yypact_ninf_ = -794;
+  const short int Dhcp6Parser::yypact_ninf_ = -816;
 
   const signed char Dhcp6Parser::yytable_ninf_ = -1;
 
   const short int
   Dhcp6Parser::yypact_[] =
   {
-     308,  -794,  -794,  -794,  -794,  -794,  -794,  -794,  -794,  -794,
-    -794,  -794,  -794,  -794,  -794,    51,    47,    46,    64,    68,
-      72,    86,   108,   152,   161,   211,   217,   233,   234,   249,
-    -794,  -794,  -794,  -794,  -794,  -794,  -794,  -794,  -794,  -794,
-    -794,  -794,  -794,  -794,  -794,  -794,  -794,  -794,  -794,  -794,
-    -794,  -794,  -794,  -794,  -794,  -794,  -794,  -794,  -794,  -794,
-    -794,  -794,  -794,  -794,  -794,  -794,  -794,  -794,    47,  -110,
-      39,    58,    45,   229,    94,    26,   355,   104,    77,    14,
-     -13,   357,   132,  -794,   274,   285,   302,   300,   307,  -794,
-    -794,  -794,  -794,  -794,   329,  -794,   115,  -794,  -794,  -794,
-    -794,  -794,  -794,  -794,  -794,  -794,  -794,   342,   345,   347,
-     349,   350,  -794,  -794,  -794,  -794,  -794,  -794,  -794,  -794,
-    -794,  -794,  -794,  -794,  -794,  -794,  -794,   352,  -794,  -794,
-    -794,   133,  -794,  -794,  -794,  -794,  -794,  -794,  -794,  -794,
-    -794,  -794,  -794,  -794,  -794,  -794,  -794,  -794,  -794,  -794,
-    -794,  -794,  -794,  -794,  -794,  -794,  -794,  -794,  -794,  -794,
-    -794,   353,  -794,   140,  -794,  -794,  -794,  -794,  -794,  -794,
-    -794,  -794,  -794,  -794,   361,   362,  -794,  -794,  -794,  -794,
-    -794,  -794,  -794,  -794,  -794,   147,  -794,  -794,  -794,  -794,
-    -794,  -794,  -794,  -794,  -794,  -794,  -794,  -794,  -794,  -794,
-    -794,  -794,  -794,  -794,  -794,  -794,  -794,   157,  -794,  -794,
-    -794,  -794,  -794,   365,  -794,   370,   375,  -794,  -794,  -794,
-    -794,  -794,  -794,   164,  -794,  -794,  -794,  -794,  -794,  -794,
-    -794,  -794,  -794,  -794,  -794,  -794,  -794,  -794,  -794,  -794,
-    -794,   351,   334,  -794,  -794,  -794,  -794,  -794,  -794,  -794,
-    -794,   373,  -794,  -794,   379,  -794,  -794,  -794,   381,  -794,
-    -794,   380,   358,  -794,  -794,  -794,  -794,  -794,  -794,  -794,
-    -794,  -794,  -794,  -794,  -794,  -794,   385,   388,  -794,  -794,
-    -794,  -794,   390,   418,  -794,  -794,  -794,  -794,  -794,  -794,
-    -794,  -794,  -794,  -794,  -794,  -794,   168,  -794,  -794,  -794,
-     419,  -794,  -794,   420,  -794,   421,   422,  -794,  -794,   423,
-     424,   427,  -794,  -794,  -794,  -794,  -794,  -794,  -794,   172,
-    -794,  -794,  -794,  -794,  -794,  -794,  -794,  -794,  -794,  -794,
-    -794,  -794,  -794,  -794,  -794,  -794,  -794,  -794,   178,  -794,
-    -794,  -794,    47,    47,  -794,   272,   434,   435,   442,   444,
-     445,  -794,    39,  -794,   447,   448,   449,   450,   256,   289,
-     290,   291,   321,   484,   485,   486,   487,   489,   492,   497,
-     498,   499,   500,   501,   502,   503,   504,   506,   346,   507,
-     509,    58,  -794,   510,   356,    45,  -794,   511,   515,   519,
-     521,   522,   368,   359,   527,   529,   531,   532,   229,  -794,
-     533,    94,  -794,   534,   377,   535,   378,   382,    26,  -794,
-     541,   542,   543,   545,   546,   547,   548,  -794,   355,  -794,
-     549,   550,   389,   552,   553,   554,   391,  -794,    77,   556,
-     393,   394,  -794,    14,   559,   560,    10,  -794,   397,   562,
-     563,   402,   565,   404,   405,   568,   569,   407,   408,   409,
-     574,   575,   576,   577,   357,  -794,   578,   132,  -794,  -794,
-    -794,   579,   580,   581,    47,    47,    47,  -794,   582,   583,
-     584,   587,  -794,  -794,  -794,  -794,  -794,   588,   589,   591,
-     590,   433,   594,   595,   596,   597,   598,   599,   601,   602,
-     603,   604,  -794,   605,   606,  -794,   609,  -794,  -794,   610,
-     611,   438,   443,   452,  -794,  -794,   331,   609,   453,   612,
-    -794,   455,  -794,   456,  -794,   457,  -794,  -794,  -794,   609,
-     609,   609,   458,   459,   460,   461,  -794,   462,   463,  -794,
-     464,   465,   466,  -794,  -794,   467,  -794,  -794,  -794,   468,
-      47,  -794,  -794,   469,   470,  -794,   471,  -794,  -794,    76,
-     454,  -794,  -794,  -794,   -22,   472,   473,   474,  -794,   635,
-    -794,    47,    58,   132,  -794,  -794,  -794,    45,   203,   203,
-     634,   636,   637,   638,  -794,  -794,  -794,   639,    -7,    47,
-      29,   564,   640,   641,   642,   224,   136,   138,   357,  -794,
-    -794,   643,   644,  -794,  -794,  -794,  -794,  -794,  -794,  -794,
-    -794,  -794,    18,  -794,  -794,  -794,  -794,  -794,  -794,  -794,
-    -794,  -794,  -794,  -794,  -794,  -794,  -794,  -794,  -794,  -794,
-    -794,  -794,  -794,  -794,  -794,  -794,  -794,  -794,  -794,  -794,
-    -794,  -794,  -794,  -794,  -794,  -794,  -794,   645,  -794,   189,
-     200,   213,  -794,  -794,  -794,  -794,   649,   650,   651,   652,
-     653,  -794,   654,   655,  -794,   656,   657,   658,  -794,   214,
-    -794,  -794,  -794,  -794,  -794,  -794,  -794,  -794,  -794,  -794,
-    -794,  -794,  -794,  -794,  -794,  -794,  -794,  -794,   246,  -794,
-     659,   660,  -794,  -794,   661,   663,  -794,  -794,   662,   666,
-    -794,  -794,   664,   668,  -794,  -794,   667,   669,  -794,  -794,
-    -794,   179,  -794,  -794,  -794,   670,  -794,  -794,  -794,   257,
-    -794,  -794,  -794,  -794,   247,  -794,  -794,  -794,   275,  -794,
-    -794,   671,   672,  -794,  -794,   673,   675,  -794,   676,   677,
-     678,   679,   680,   681,   250,  -794,  -794,  -794,  -794,  -794,
-    -794,  -794,  -794,  -794,   682,   683,   684,  -794,  -794,  -794,
-    -794,   267,  -794,  -794,  -794,  -794,  -794,  -794,  -794,  -794,
-    -794,  -794,  -794,   268,  -794,  -794,  -794,   271,   524,  -794,
-     685,   687,  -794,  -794,   686,   690,  -794,  -794,  -794,   688,
-    -794,  -794,   284,  -794,  -794,  -794,  -794,   691,   693,   694,
-     695,   508,   416,   528,   417,   536,   696,   537,   538,   697,
-     539,   540,   441,   203,  -794,  -794,   203,  -794,   634,   229,
-    -794,   636,    77,  -794,   637,    14,  -794,   638,   367,  -794,
-     639,    -7,  -794,  -794,    29,  -794,   703,   564,  -794,    82,
-     640,  -794,   355,  -794,   641,   -13,  -794,   642,   544,   551,
-     555,   557,   558,   561,   224,  -794,   704,   705,   566,   567,
-     570,   136,  -794,   707,   708,   138,  -794,  -794,  -794,   709,
-     710,    94,  -794,   643,    26,  -794,   644,   712,  -794,   121,
-     645,  -794,   395,   572,   573,   585,  -794,  -794,  -794,  -794,
-    -794,   615,  -794,  -794,   617,  -794,  -794,  -794,  -794,   281,
-    -794,   296,  -794,   706,  -794,   711,  -794,  -794,  -794,  -794,
-    -794,  -794,  -794,  -794,  -794,  -794,  -794,  -794,  -794,  -794,
-     297,  -794,  -794,  -794,  -794,  -794,  -794,  -794,  -794,   624,
-    -794,  -794,   714,  -794,  -794,  -794,  -794,  -794,   717,   719,
-    -794,  -794,  -794,  -794,  -794,   718,  -794,   299,  -794,  -794,
-    -794,  -794,  -794,  -794,  -794,  -794,   212,   627,  -794,  -794,
-    -794,  -794,   630,   631,  -794,  -794,   633,   311,  -794,   326,
-    -794,   647,  -794,   716,  -794,  -794,  -794,  -794,  -794,   327,
-    -794,  -794,  -794,  -794,  -794,  -794,  -794,  -794,  -794,  -794,
-    -794,  -794,  -794,  -794,  -794,  -794,  -794,  -794,  -794,   367,
-    -794,  -794,   724,   496,  -794,    82,  -794,  -794,  -794,  -794,
-    -794,  -794,  -794,  -794,  -794,  -794,  -794,  -794,  -794,   725,
-     648,   726,   121,  -794,  -794,   665,  -794,  -794,   729,  -794,
-     674,  -794,  -794,   728,  -794,  -794,   339,  -794,    48,   728,
-    -794,  -794,   727,   736,   737,   333,  -794,  -794,  -794,  -794,
-    -794,  -794,   740,   593,   689,   692,    48,  -794,   698,  -794,
-    -794,  -794,  -794,  -794
+     317,  -816,  -816,  -816,  -816,  -816,  -816,  -816,  -816,  -816,
+    -816,  -816,  -816,  -816,  -816,  -816,    59,    46,   118,   142,
+     156,   198,   216,   242,   256,   273,   299,   303,   313,   314,
+     318,   326,  -816,  -816,  -816,  -816,  -816,  -816,  -816,  -816,
+    -816,  -816,  -816,  -816,  -816,  -816,  -816,  -816,  -816,  -816,
+    -816,  -816,  -816,  -816,  -816,  -816,  -816,  -816,  -816,  -816,
+    -816,  -816,  -816,  -816,  -816,  -816,  -816,  -816,  -816,  -816,
+    -816,  -816,    46,   -89,    50,    45,    63,   204,   220,   194,
+      65,   166,    51,   265,   -23,   367,   -25,    42,  -816,   286,
+     305,   337,   336,   353,  -816,  -816,  -816,  -816,  -816,   360,
+    -816,    68,  -816,  -816,  -816,  -816,  -816,  -816,  -816,  -816,
+    -816,  -816,  -816,  -816,   363,   364,   366,   375,   381,  -816,
+    -816,  -816,  -816,  -816,  -816,  -816,  -816,  -816,  -816,  -816,
+    -816,  -816,  -816,  -816,   383,  -816,  -816,  -816,    72,  -816,
+    -816,  -816,  -816,  -816,  -816,  -816,  -816,  -816,  -816,  -816,
+    -816,  -816,  -816,  -816,  -816,  -816,  -816,  -816,  -816,  -816,
+    -816,  -816,  -816,  -816,  -816,  -816,  -816,  -816,  -816,   386,
+    -816,    91,  -816,  -816,  -816,  -816,  -816,  -816,  -816,  -816,
+    -816,  -816,   388,   390,  -816,  -816,  -816,  -816,  -816,  -816,
+    -816,  -816,  -816,   100,  -816,  -816,  -816,  -816,  -816,  -816,
+    -816,  -816,  -816,  -816,  -816,  -816,  -816,  -816,  -816,  -816,
+    -816,  -816,  -816,  -816,  -816,   104,  -816,  -816,  -816,  -816,
+    -816,   392,  -816,   395,   396,  -816,  -816,  -816,  -816,  -816,
+    -816,   110,  -816,  -816,  -816,  -816,  -816,  -816,  -816,  -816,
+    -816,  -816,  -816,  -816,  -816,  -816,  -816,  -816,  -816,   349,
+     377,  -816,  -816,  -816,  -816,  -816,  -816,  -816,  -816,   397,
+    -816,  -816,   399,  -816,  -816,  -816,   405,  -816,  -816,   402,
+     422,  -816,  -816,  -816,  -816,  -816,  -816,  -816,  -816,  -816,
+    -816,  -816,  -816,  -816,   434,   435,  -816,  -816,  -816,  -816,
+     437,   439,  -816,  -816,  -816,  -816,  -816,  -816,  -816,  -816,
+    -816,  -816,  -816,  -816,   111,  -816,  -816,  -816,   444,  -816,
+    -816,   446,  -816,   447,   448,  -816,  -816,   449,   450,   451,
+    -816,  -816,  -816,  -816,  -816,  -816,  -816,   179,  -816,  -816,
+    -816,  -816,  -816,  -816,  -816,  -816,  -816,  -816,  -816,  -816,
+    -816,  -816,  -816,  -816,  -816,  -816,   201,  -816,  -816,  -816,
+    -816,   221,  -816,  -816,  -816,    46,    46,  -816,   288,   453,
+     455,   456,   458,   459,  -816,    50,  -816,    42,   460,   461,
+     462,   463,   464,   330,   333,   339,   342,   343,   496,   497,
+     505,   509,   510,   511,   512,   516,   517,   518,   519,   520,
+     521,   522,   523,   359,   526,   527,    45,  -816,   528,   362,
+      63,  -816,   530,   535,   536,   538,   539,   378,   374,   542,
+     547,   548,   549,   204,  -816,   550,   220,  -816,   551,   387,
+     553,   389,   394,   194,  -816,   555,   560,   561,   562,   563,
+     564,   565,  -816,    65,  -816,   566,   567,   403,   569,   570,
+     571,   406,  -816,    51,   572,   407,   408,  -816,   265,   576,
+     578,    84,  -816,   412,   580,   581,   417,   583,   419,   420,
+     586,   587,   421,   423,   424,   589,   592,   593,   594,   367,
+    -816,   595,   -25,  -816,   596,    42,  -816,  -816,  -816,   597,
+     598,   599,    46,    46,    46,  -816,   222,   600,   601,   602,
+     603,   606,  -816,  -816,  -816,  -816,  -816,   607,   608,   609,
+     610,   452,   611,   613,   614,   616,   615,   618,   619,   620,
+     621,   622,  -816,   623,   624,  -816,   627,  -816,  -816,   628,
+     629,   467,   468,   469,  -816,  -816,   340,   627,   470,   632,
+    -816,   472,  -816,   473,  -816,   474,  -816,  -816,  -816,   627,
+     627,   627,   475,   476,   477,   478,  -816,   479,   480,  -816,
+     481,   482,   483,  -816,  -816,   484,  -816,  -816,  -816,   485,
+      46,  -816,  -816,   486,   487,  -816,   488,  -816,  -816,    64,
+     492,  -816,  -816,  -816,    57,   489,   490,   491,  -816,   655,
+    -816,   656,  -816,    46,    45,   -25,  -816,  -816,  -816,  -816,
+      42,    63,   141,   141,   657,   658,   659,   660,  -816,  -816,
+    -816,   661,   -17,    46,    52,   582,   662,   663,   664,    33,
+      74,    83,   367,  -816,  -816,   665,   666,  -816,  -816,  -816,
+    -816,  -816,  -816,  -816,  -816,  -816,   -30,  -816,  -816,  -816,
+    -816,  -816,  -816,  -816,  -816,  -816,  -816,  -816,  -816,  -816,
+    -816,  -816,  -816,  -816,  -816,  -816,  -816,  -816,  -816,  -816,
+    -816,  -816,  -816,  -816,  -816,  -816,  -816,  -816,  -816,  -816,
+    -816,   667,   657,  -816,   229,   231,   233,   244,  -816,  -816,
+    -816,  -816,   671,   672,   673,   674,   675,  -816,   676,   677,
+    -816,   678,   679,   680,  -816,   275,  -816,  -816,  -816,  -816,
+    -816,  -816,  -816,  -816,  -816,  -816,  -816,  -816,  -816,  -816,
+    -816,  -816,  -816,  -816,   279,  -816,   681,   612,  -816,  -816,
+     682,   683,  -816,  -816,   684,   686,  -816,  -816,   685,   689,
+    -816,  -816,   687,   691,  -816,  -816,  -816,   158,  -816,  -816,
+    -816,   690,  -816,  -816,  -816,   232,  -816,  -816,  -816,  -816,
+     285,  -816,  -816,  -816,   261,  -816,  -816,   692,   694,  -816,
+    -816,   693,   697,  -816,   698,   699,   700,   701,   702,   703,
+     291,  -816,  -816,  -816,  -816,  -816,  -816,  -816,  -816,  -816,
+     704,   705,   706,  -816,  -816,  -816,  -816,   292,  -816,  -816,
+    -816,  -816,  -816,  -816,  -816,  -816,  -816,  -816,  -816,   293,
+    -816,  -816,  -816,   295,   495,  -816,   695,   708,  -816,  -816,
+     707,   709,  -816,  -816,  -816,   710,  -816,  -816,   301,  -816,
+     711,  -816,  -816,  -816,  -816,   712,   715,   716,   717,   433,
+     432,   545,   514,   546,   718,   554,   556,   720,   557,   558,
+     524,   141,  -816,  -816,   141,  -816,   657,   204,  -816,   658,
+      51,  -816,   659,   265,  -816,   660,   376,  -816,   661,   -17,
+    -816,  -816,    52,  -816,   724,   582,  -816,   143,   662,  -816,
+      65,  -816,   663,   -23,  -816,   664,   568,   573,   574,   575,
+     577,   579,    33,  -816,   725,   726,   584,   585,   590,    74,
+    -816,   727,   728,    83,  -816,  -816,  -816,   729,   730,   220,
+    -816,   665,   194,  -816,   666,   732,  -816,   281,   667,  -816,
+    -816,   414,   588,   605,   617,  -816,  -816,  -816,  -816,  -816,
+     636,  -816,  -816,   638,  -816,  -816,  -816,  -816,   315,  -816,
+     316,  -816,   731,  -816,   733,  -816,  -816,  -816,  -816,  -816,
+    -816,  -816,  -816,  -816,  -816,  -816,  -816,  -816,  -816,   324,
+    -816,  -816,  -816,  -816,  -816,  -816,  -816,  -816,   645,  -816,
+    -816,   734,  -816,  -816,  -816,  -816,  -816,   737,   744,  -816,
+    -816,  -816,  -816,  -816,   741,  -816,   328,  -816,  -816,  -816,
+    -816,  -816,  -816,  -816,  -816,   322,   648,  -816,  -816,  -816,
+    -816,   651,   652,  -816,  -816,   654,   332,  -816,   344,  -816,
+     668,  -816,   736,  -816,  -816,  -816,  -816,  -816,   345,  -816,
+    -816,  -816,  -816,  -816,  -816,  -816,  -816,  -816,  -816,  -816,
+    -816,  -816,  -816,  -816,  -816,  -816,  -816,  -816,   376,  -816,
+    -816,   746,   591,  -816,   143,  -816,  -816,  -816,  -816,  -816,
+    -816,  -816,  -816,  -816,  -816,  -816,  -816,  -816,   747,   669,
+     748,   281,  -816,  -816,   688,  -816,  -816,   750,  -816,   696,
+    -816,  -816,   751,  -816,  -816,   331,  -816,   -52,   751,  -816,
+    -816,   757,   760,   761,   357,  -816,  -816,  -816,  -816,  -816,
+    -816,   764,   653,   713,   714,   -52,  -816,   719,  -816,  -816,
+    -816,  -816,  -816
   };
 
   const unsigned short int
   Dhcp6Parser::yydefact_[] =
   {
        0,     2,     4,     6,     8,    10,    12,    14,    16,    18,
-      20,    22,    24,    26,    28,     0,     0,     0,     0,     0,
+      20,    22,    24,    26,    28,    30,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       1,    45,    38,    34,    33,    30,    31,    32,    37,     3,
-      35,    36,    58,     5,    70,     7,   109,     9,   250,    11,
-     395,    13,   420,    15,   450,    17,   320,    19,   328,    21,
-     365,    23,   215,    25,   547,    27,   610,    29,    47,    41,
-       0,     0,     0,     0,     0,     0,   452,     0,   330,   367,
-       0,     0,     0,    49,     0,    48,     0,     0,    42,    68,
-     608,   602,   604,   606,     0,    67,     0,    60,    62,    64,
-      65,    66,    63,   107,   121,   123,   125,     0,     0,     0,
-       0,     0,   242,   318,   357,   408,   410,   291,   188,   205,
-     196,   181,   487,   442,   207,   226,   508,     0,   532,   545,
-     101,     0,    72,    74,    75,    76,    77,    78,    81,    82,
-      83,    84,    99,    85,    87,    86,    91,    92,    79,    80,
-      89,    90,    97,    98,   100,    88,    93,    94,    95,    96,
-     118,     0,   117,     0,   111,   113,   114,   115,   116,   387,
-     412,   274,   276,   278,     0,     0,   284,   282,   280,   481,
-     273,   254,   255,   256,   257,     0,   252,   261,   262,   263,
-     266,   267,   269,   264,   265,   258,   259,   271,   272,   260,
-     268,   270,   406,   405,   401,   402,   400,     0,   397,   399,
-     403,   404,   435,     0,   438,     0,     0,   434,   428,   429,
-     427,   432,   433,     0,   422,   424,   425,   430,   431,   426,
-     479,   467,   469,   471,   473,   475,   477,   466,   463,   464,
-     465,     0,   453,   454,   458,   459,   456,   460,   461,   462,
-     457,     0,   347,   166,     0,   351,   349,   354,     0,   343,
-     344,     0,   331,   332,   334,   346,   335,   336,   337,   353,
-     338,   339,   340,   341,   342,   381,     0,     0,   379,   380,
-     383,   384,     0,   368,   369,   371,   372,   373,   374,   375,
-     376,   377,   378,   222,   224,   219,     0,   217,   220,   221,
-       0,   571,   573,     0,   576,     0,     0,   580,   584,     0,
-       0,     0,   589,   596,   598,   600,   569,   567,   568,     0,
-     549,   551,   552,   553,   554,   555,   556,   557,   558,   559,
-     560,   561,   562,   563,   564,   565,   566,   615,     0,   612,
-     614,    46,     0,     0,    39,     0,     0,     0,     0,     0,
-       0,    57,     0,    59,     0,     0,     0,     0,     0,     0,
+       0,     0,     1,    47,    40,    36,    35,    32,    33,    34,
+      39,     3,    37,    38,    60,     5,    72,     7,   112,     9,
+     253,    11,   398,    13,   423,    15,   453,    17,   323,    19,
+     331,    21,   368,    23,   218,    25,   550,    27,   625,    29,
+     615,    31,    49,    43,     0,     0,     0,     0,     0,     0,
+     455,     0,   333,   370,     0,     0,     0,     0,    51,     0,
+      50,     0,     0,    44,    70,   623,   605,   607,   609,     0,
+      69,     0,    62,    64,    66,    67,    68,    65,   611,   613,
+     110,   124,   126,   128,     0,     0,     0,     0,     0,   245,
+     321,   360,   411,   413,   294,   191,   208,   199,   184,   490,
+     445,   210,   229,   511,     0,   535,   548,   104,     0,    74,
+      76,    77,    78,    79,    80,    83,    84,    85,    86,   101,
+      87,    89,    88,    93,    94,    81,    82,    91,    92,    99,
+     100,   102,    90,    95,    96,    97,    98,   103,   121,     0,
+     120,     0,   114,   116,   117,   118,   119,   390,   415,   277,
+     279,   281,     0,     0,   287,   285,   283,   484,   276,   257,
+     258,   259,   260,     0,   255,   264,   265,   266,   269,   270,
+     272,   267,   268,   261,   262,   274,   275,   263,   271,   273,
+     409,   408,   404,   405,   403,     0,   400,   402,   406,   407,
+     438,     0,   441,     0,     0,   437,   431,   432,   430,   435,
+     436,     0,   425,   427,   428,   433,   434,   429,   482,   470,
+     472,   474,   476,   478,   480,   469,   466,   467,   468,     0,
+     456,   457,   461,   462,   459,   463,   464,   465,   460,     0,
+     350,   169,     0,   354,   352,   357,     0,   346,   347,     0,
+     334,   335,   337,   349,   338,   339,   340,   356,   341,   342,
+     343,   344,   345,   384,     0,     0,   382,   383,   386,   387,
+       0,   371,   372,   374,   375,   376,   377,   378,   379,   380,
+     381,   225,   227,   222,     0,   220,   223,   224,     0,   574,
+     576,     0,   579,     0,     0,   583,   587,     0,     0,     0,
+     592,   599,   601,   603,   572,   570,   571,     0,   552,   554,
+     555,   556,   557,   558,   559,   560,   561,   562,   563,   564,
+     565,   566,   567,   568,   569,   630,     0,   627,   629,   621,
+     620,     0,   617,   619,    48,     0,     0,    41,     0,     0,
+       0,     0,     0,     0,    59,     0,    61,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,    71,     0,     0,     0,   110,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,   251,
-       0,     0,   396,     0,     0,     0,     0,     0,     0,   421,
-       0,     0,     0,     0,     0,     0,     0,   451,     0,   321,
-       0,     0,     0,     0,     0,     0,     0,   329,     0,     0,
-       0,     0,   366,     0,     0,     0,     0,   216,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,    73,     0,     0,
+       0,   113,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,   254,     0,     0,   399,     0,     0,
+       0,     0,     0,     0,   424,     0,     0,     0,     0,     0,
+       0,     0,   454,     0,   324,     0,     0,     0,     0,     0,
+       0,     0,   332,     0,     0,     0,     0,   369,     0,     0,
+       0,     0,   219,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,   548,     0,     0,   611,    50,
-      43,     0,     0,     0,     0,     0,     0,    61,     0,     0,
-       0,     0,   102,   103,   104,   105,   106,     0,     0,     0,
+     551,     0,     0,   626,     0,     0,   616,    52,    45,     0,
+       0,     0,     0,     0,     0,    63,     0,     0,     0,     0,
+       0,     0,   105,   106,   107,   108,   109,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   531,     0,     0,    73,     0,   120,   112,     0,
-       0,     0,     0,     0,   289,   290,     0,     0,     0,     0,
-     253,     0,   398,     0,   437,     0,   440,   441,   423,     0,
-       0,     0,     0,     0,     0,     0,   455,     0,     0,   345,
-       0,     0,     0,   356,   333,     0,   385,   386,   370,     0,
-       0,   218,   570,     0,     0,   575,     0,   578,   579,     0,
-       0,   586,   587,   588,     0,     0,     0,     0,   550,     0,
-     613,     0,     0,     0,   603,   605,   607,     0,     0,     0,
-     127,   244,   322,   359,    40,   409,   411,   293,     0,    47,
-       0,     0,     0,   444,   209,     0,     0,     0,     0,    51,
-     119,   389,   414,   275,   277,   279,   286,   287,   288,   285,
-     283,   281,     0,   407,   436,   439,   480,   468,   470,   472,
-     474,   476,   478,   348,   167,   352,   350,   355,   382,   223,
-     225,   572,   574,   577,   582,   583,   581,   585,   591,   592,
-     593,   594,   595,   590,   597,   599,   601,     0,    44,     0,
-       0,     0,   153,   159,   161,   163,     0,     0,     0,     0,
-       0,   176,     0,     0,   179,     0,     0,     0,   152,     0,
-     133,   135,   136,   137,   138,   139,   140,   141,   142,   143,
-     144,   147,   148,   149,   150,   145,   146,   151,     0,   131,
-       0,   128,   129,   248,     0,   245,   246,   326,     0,   323,
-     324,   363,     0,   360,   361,   297,     0,   294,   295,   194,
-     195,     0,   190,   192,   193,     0,   203,   204,   200,     0,
-     198,   201,   202,   186,     0,   183,   185,   491,     0,   489,
-     448,     0,   445,   446,   213,     0,   210,   211,     0,     0,
-       0,     0,     0,     0,     0,   228,   230,   231,   232,   233,
-     234,   235,   521,   527,     0,     0,     0,   520,   517,   518,
-     519,     0,   510,   512,   515,   513,   514,   516,   541,   543,
-     540,   538,   539,     0,   534,   536,   537,     0,    53,   393,
-       0,   390,   391,   418,     0,   415,   416,   485,   484,     0,
-     483,   619,     0,   617,    69,   609,   108,     0,     0,     0,
+       0,     0,   534,     0,     0,    75,     0,   123,   115,     0,
+       0,     0,     0,     0,   292,   293,     0,     0,     0,     0,
+     256,     0,   401,     0,   440,     0,   443,   444,   426,     0,
+       0,     0,     0,     0,     0,     0,   458,     0,     0,   348,
+       0,     0,     0,   359,   336,     0,   388,   389,   373,     0,
+       0,   221,   573,     0,     0,   578,     0,   581,   582,     0,
+       0,   589,   590,   591,     0,     0,     0,     0,   553,     0,
+     628,     0,   618,     0,     0,     0,   606,   608,   610,   612,
+       0,     0,     0,     0,   130,   247,   325,   362,    42,   412,
+     414,   296,     0,    49,     0,     0,     0,   447,   212,     0,
+       0,     0,     0,    53,   122,   392,   417,   278,   280,   282,
+     289,   290,   291,   288,   286,   284,     0,   410,   439,   442,
+     483,   471,   473,   475,   477,   479,   481,   351,   170,   355,
+     353,   358,   385,   226,   228,   575,   577,   580,   585,   586,
+     584,   588,   594,   595,   596,   597,   598,   593,   600,   602,
+     604,     0,   130,    46,     0,     0,     0,     0,   156,   162,
+     164,   166,     0,     0,     0,     0,     0,   179,     0,     0,
+     182,     0,     0,     0,   155,     0,   136,   138,   139,   140,
+     141,   142,   143,   144,   145,   146,   147,   150,   151,   152,
+     153,   148,   149,   154,     0,   134,     0,   131,   132,   251,
+       0,   248,   249,   329,     0,   326,   327,   366,     0,   363,
+     364,   300,     0,   297,   298,   197,   198,     0,   193,   195,
+     196,     0,   206,   207,   203,     0,   201,   204,   205,   189,
+       0,   186,   188,   494,     0,   492,   451,     0,   448,   449,
+     216,     0,   213,   214,     0,     0,     0,     0,     0,     0,
+       0,   231,   233,   234,   235,   236,   237,   238,   524,   530,
+       0,     0,     0,   523,   520,   521,   522,     0,   513,   515,
+     518,   516,   517,   519,   544,   546,   543,   541,   542,     0,
+     537,   539,   540,     0,    55,   396,     0,   393,   394,   421,
+       0,   418,   419,   488,   487,     0,   486,   634,     0,   632,
+       0,    71,   624,   614,   111,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   122,   124,     0,   126,     0,     0,
-     243,     0,   330,   319,     0,   367,   358,     0,     0,   292,
-       0,     0,   189,   206,     0,   197,     0,     0,   182,   493,
-       0,   488,   452,   443,     0,     0,   208,     0,     0,     0,
-       0,     0,     0,     0,     0,   227,     0,     0,     0,     0,
-       0,     0,   509,     0,     0,     0,   533,   546,    55,     0,
-      54,     0,   388,     0,     0,   413,     0,     0,   482,     0,
-       0,   616,     0,     0,     0,     0,   165,   168,   169,   170,
-     171,     0,   178,   172,     0,   173,   174,   175,   134,     0,
-     130,     0,   247,     0,   325,     0,   362,   317,   312,   314,
-     305,   306,   301,   302,   303,   304,   310,   311,   309,   313,
-       0,   299,   307,   315,   316,   308,   296,   191,   199,     0,
-     184,   505,     0,   503,   504,   500,   501,   502,     0,   494,
-     495,   497,   498,   499,   490,     0,   447,     0,   212,   236,
-     237,   238,   239,   240,   241,   229,     0,     0,   526,   529,
-     530,   511,     0,     0,   535,    52,     0,     0,   392,     0,
-     417,     0,   633,     0,   631,   629,   623,   627,   628,     0,
-     621,   625,   626,   624,   618,   155,   156,   157,   158,   154,
-     160,   162,   164,   177,   180,   132,   249,   327,   364,     0,
-     298,   187,     0,     0,   492,     0,   449,   214,   523,   524,
-     525,   522,   528,   542,   544,    56,   394,   419,   486,     0,
-       0,     0,     0,   620,   300,     0,   507,   496,     0,   630,
-       0,   622,   506,     0,   632,   637,     0,   635,     0,     0,
-     634,   645,     0,     0,     0,     0,   639,   641,   642,   643,
-     644,   636,     0,     0,     0,     0,     0,   638,     0,   647,
-     648,   649,   640,   646
+       0,     0,   125,   127,     0,   129,     0,     0,   246,     0,
+     333,   322,     0,   370,   361,     0,     0,   295,     0,     0,
+     192,   209,     0,   200,     0,     0,   185,   496,     0,   491,
+     455,   446,     0,     0,   211,     0,     0,     0,     0,     0,
+       0,     0,     0,   230,     0,     0,     0,     0,     0,     0,
+     512,     0,     0,     0,   536,   549,    57,     0,    56,     0,
+     391,     0,     0,   416,     0,     0,   485,     0,     0,   631,
+     622,     0,     0,     0,     0,   168,   171,   172,   173,   174,
+       0,   181,   175,     0,   176,   177,   178,   137,     0,   133,
+       0,   250,     0,   328,     0,   365,   320,   315,   317,   308,
+     309,   304,   305,   306,   307,   313,   314,   312,   316,     0,
+     302,   310,   318,   319,   311,   299,   194,   202,     0,   187,
+     508,     0,   506,   507,   503,   504,   505,     0,   497,   498,
+     500,   501,   502,   493,     0,   450,     0,   215,   239,   240,
+     241,   242,   243,   244,   232,     0,     0,   529,   532,   533,
+     514,     0,     0,   538,    54,     0,     0,   395,     0,   420,
+       0,   648,     0,   646,   644,   638,   642,   643,     0,   636,
+     640,   641,   639,   633,   158,   159,   160,   161,   157,   163,
+     165,   167,   180,   183,   135,   252,   330,   367,     0,   301,
+     190,     0,     0,   495,     0,   452,   217,   526,   527,   528,
+     525,   531,   545,   547,    58,   397,   422,   489,     0,     0,
+       0,     0,   635,   303,     0,   510,   499,     0,   645,     0,
+     637,   509,     0,   647,   652,     0,   650,     0,     0,   649,
+     660,     0,     0,     0,     0,   654,   656,   657,   658,   659,
+     651,     0,     0,     0,     0,     0,   653,     0,   662,   663,
+     664,   655,   661
   };
 
   const short int
   Dhcp6Parser::yypgoto_[] =
   {
-    -794,  -794,  -794,  -794,  -794,  -794,  -794,  -794,  -794,  -794,
-    -794,  -794,  -794,  -794,  -794,  -794,    34,  -794,   266,  -794,
-    -794,  -794,  -794,  -794,  -794,   170,  -794,  -429,  -794,  -794,
-    -794,   -70,  -794,  -794,  -794,   401,  -794,  -794,  -794,  -794,
-     185,   387,   -66,   -54,   -51,   -34,  -794,  -794,  -794,  -794,
-    -794,   235,   371,  -794,  -794,  -794,  -794,  -794,  -794,  -794,
-    -794,  -794,  -794,  -794,    -4,  -794,  -545,    -3,  -794,  -794,
-    -794,  -794,  -794,  -794,  -794,  -794,  -794,  -794,   -42,  -794,
-    -574,  -794,  -794,  -794,  -794,  -794,  -794,  -794,  -794,  -794,
-    -794,  -794,  -794,  -794,  -794,  -794,   -20,  -794,  -794,  -794,
-    -794,  -794,    -5,  -567,  -794,  -794,  -794,  -794,   -16,  -794,
-    -794,  -794,  -794,  -794,  -794,  -794,  -794,   -24,  -794,  -794,
-    -794,   -18,   383,  -794,  -794,  -794,  -794,  -794,  -794,  -794,
-     -19,  -794,  -794,  -794,  -794,  -794,  -794,  -793,  -794,  -794,
-    -794,     9,  -794,  -794,  -794,    13,   428,  -794,  -794,  -787,
-    -794,  -784,  -794,   -30,  -794,   -28,  -794,  -780,  -794,  -794,
-    -794,  -778,  -794,  -794,  -794,  -794,     8,  -794,  -794,  -160,
-     755,  -794,  -794,  -794,  -794,  -794,    21,  -794,  -794,  -794,
-      25,  -794,   410,  -794,   -38,  -794,  -794,  -794,  -794,  -794,
-     -36,  -794,  -794,  -794,  -794,  -794,    -8,  -794,  -794,  -794,
-      23,  -794,  -794,  -794,    27,  -794,   411,  -794,  -794,  -794,
-    -794,  -794,  -794,  -794,  -794,  -794,  -794,  -794,   -17,  -794,
-    -794,  -794,   -14,   440,  -794,  -794,   -58,  -794,   -46,  -794,
-    -794,  -794,  -794,  -794,   -23,  -794,  -794,  -794,   -15,   437,
-    -794,  -794,  -794,  -794,  -794,  -794,  -794,   -31,  -794,  -794,
-    -794,    16,  -794,  -794,  -794,    19,  -794,   430,   252,  -794,
-    -794,  -794,  -794,  -794,  -794,  -794,  -794,  -794,  -794,  -794,
-    -794,  -794,  -770,  -794,  -794,  -794,  -794,  -794,  -794,  -794,
-      22,  -794,  -794,  -794,  -138,  -794,  -794,  -794,  -794,  -794,
-    -794,  -794,    11,  -794,  -794,  -794,  -794,  -794,  -794,  -794,
-    -794,  -794,  -794,  -794,  -794,     4,  -794,  -794,  -794,  -794,
-    -794,  -794,  -794,  -794,   273,   406,  -794,  -794,  -794,  -794,
-    -794,  -794,  -794,  -794,  -794,  -794,  -794,  -794,  -794,  -794,
-    -794,  -794,  -794,  -794,  -794,  -794,  -794,  -794,  -794,  -794,
-    -794,  -794,  -794,  -794,  -794,  -794,  -794,  -794,  -794,  -794,
-    -794,  -794,  -794,   301,   412,  -794,  -794,  -794,    -2,  -794,
-    -794,  -147,  -794,  -794,  -794,  -794,  -794,  -794,  -163,  -794,
-    -794,  -179,  -794,  -794,  -794,  -794,  -794
+    -816,  -816,  -816,  -816,  -816,  -816,  -816,  -816,  -816,  -816,
+    -816,  -816,  -816,  -816,  -816,  -816,  -816,    21,  -816,   127,
+    -816,  -816,  -816,  -816,  -816,  -816,   131,  -816,  -458,  -816,
+    -816,  -816,   -74,  -816,  -816,  -816,   409,  -816,  -816,  -816,
+    -816,   186,   384,   -70,   -58,   -55,   -38,  -816,  -816,  -816,
+    -816,  -816,   180,   426,  -816,  -816,  -816,  -816,  -816,  -816,
+    -816,  -816,  -816,   115,  -816,   -44,  -816,  -569,    -3,  -816,
+    -816,  -816,  -816,  -816,  -816,  -816,  -816,  -816,  -816,   -46,
+    -816,  -598,  -816,  -816,  -816,  -816,  -816,  -816,  -816,  -816,
+    -816,  -816,  -816,  -816,  -816,  -816,  -816,   -24,  -816,  -816,
+    -816,  -816,  -816,    -9,  -591,  -816,  -816,  -816,  -816,   -20,
+    -816,  -816,  -816,  -816,  -816,  -816,  -816,  -816,   -28,  -816,
+    -816,  -816,   -22,   393,  -816,  -816,  -816,  -816,  -816,  -816,
+    -816,   -29,  -816,  -816,  -816,  -816,  -816,  -816,  -815,  -816,
+    -816,  -816,     7,  -816,  -816,  -816,    12,   440,  -816,  -816,
+    -812,  -816,  -806,  -816,   -34,  -816,   -32,  -816,  -798,  -816,
+    -816,  -816,  -797,  -816,  -816,  -816,  -816,     2,  -816,  -816,
+    -166,   773,  -816,  -816,  -816,  -816,  -816,    17,  -816,  -816,
+    -816,    22,  -816,   418,  -816,   -42,  -816,  -816,  -816,  -816,
+    -816,   -40,  -816,  -816,  -816,  -816,  -816,   -12,  -816,  -816,
+    -816,    18,  -816,  -816,  -816,    23,  -816,   425,  -816,  -816,
+    -816,  -816,  -816,  -816,  -816,  -816,  -816,  -816,  -816,   -26,
+    -816,  -816,  -816,   -21,   454,  -816,  -816,   -62,  -816,   -50,
+    -816,  -816,  -816,  -816,  -816,   -27,  -816,  -816,  -816,   -18,
+     465,  -816,  -816,  -816,  -816,  -816,  -816,  -816,   -35,  -816,
+    -816,  -816,     9,  -816,  -816,  -816,    15,  -816,   436,   246,
+    -816,  -816,  -816,  -816,  -816,  -816,  -816,  -816,  -816,  -816,
+    -816,  -816,  -816,  -796,  -816,  -816,  -816,  -816,  -816,  -816,
+    -816,    20,  -816,  -816,  -816,  -148,  -816,  -816,  -816,  -816,
+    -816,  -816,  -816,     0,  -816,  -816,  -816,  -816,  -816,  -816,
+    -816,  -816,  -816,  -816,  -816,  -816,    -2,  -816,  -816,  -816,
+    -816,  -816,  -816,  -816,  -816,   272,   416,  -816,  -816,  -816,
+    -816,  -816,  -816,  -816,  -816,  -816,  -816,  -816,  -816,  -816,
+    -816,  -816,  -816,  -816,  -816,  -816,  -816,  -816,  -816,  -816,
+    -816,  -816,  -816,  -816,  -816,  -816,  -816,  -816,  -816,  -816,
+    -816,  -816,  -816,  -816,  -816,  -342,   411,  -816,  -816,  -816,
+    -816,  -816,  -816,   304,   427,  -816,  -816,  -816,    -8,  -816,
+    -816,  -150,  -816,  -816,  -816,  -816,  -816,  -816,  -165,  -816,
+    -816,  -183,  -816,  -816,  -816,  -816,  -816
   };
 
   const short int
   Dhcp6Parser::yydefgoto_[] =
   {
-      -1,    15,    16,    17,    18,    19,    20,    21,    22,    23,
-      24,    25,    26,    27,    28,    29,    83,    39,    40,    69,
-     575,    87,    88,    41,    68,    84,    85,   590,   768,   859,
-     860,   658,    43,    70,    96,    97,    98,   346,    45,    71,
-     131,   132,   133,   134,   135,   136,   137,   138,   354,    47,
-      72,   163,   164,   165,   383,   166,   139,   355,   140,   356,
-     141,   357,   680,   681,   682,   806,   659,   660,   661,   787,
-     979,   662,   788,   663,   789,   664,   790,   665,   666,   421,
-     667,   668,   669,   670,   671,   672,   673,   674,   675,   796,
-     676,   677,   799,   142,   372,   714,   715,   716,   826,   143,
-     369,   701,   702,   703,   704,   144,   371,   709,   710,   711,
-     712,   145,   370,   146,   375,   725,   726,   727,   835,    63,
-      80,   296,   297,   298,   434,   299,   435,   147,   376,   734,
-     735,   736,   737,   738,   739,   740,   741,   148,   363,   684,
-     685,   686,   809,    49,    73,   185,   186,   187,   389,   188,
-     390,   189,   391,   190,   396,   191,   395,   192,   394,   599,
-     193,   194,   149,   368,   696,   697,   698,   818,   910,   911,
-     150,   364,    57,    77,   688,   689,   690,   812,    59,    78,
-     261,   262,   263,   264,   265,   266,   267,   420,   268,   424,
-     269,   423,   270,   271,   425,   272,   151,   365,   692,   693,
-     694,   815,    61,    79,   282,   283,   284,   285,   286,   429,
-     287,   288,   289,   290,   196,   387,   770,   771,   772,   861,
-      51,    74,   207,   208,   209,   400,   152,   366,   153,   367,
-     199,   388,   774,   775,   776,   864,    53,    75,   223,   224,
-     225,   403,   226,   227,   405,   228,   229,   154,   374,   721,
-     722,   723,   832,    55,    76,   241,   242,   243,   244,   411,
-     245,   412,   246,   413,   247,   414,   248,   415,   249,   416,
-     250,   410,   201,   397,   779,   780,   867,   155,   373,   718,
-     719,   829,   928,   929,   930,   931,   932,   992,   933,   156,
-     377,   751,   752,   753,   846,  1001,   754,   755,   847,   756,
-     757,   157,   158,   379,   763,   764,   765,   853,   766,   854,
-     159,   380,    65,    81,   319,   320,   321,   322,   439,   323,
-     440,   324,   325,   442,   326,   327,   328,   445,   626,   329,
-     446,   330,   331,   332,   333,   450,   633,   334,   451,   335,
-     452,   336,   453,    99,   348,   100,   349,   101,   350,   102,
-     347,    67,    82,   338,   339,   340,   456,   782,   783,   869,
-     969,   970,   971,   972,  1011,   973,  1009,  1026,  1027,  1028,
-    1035,  1036,  1037,  1042,  1038,  1039,  1040
+      -1,    16,    17,    18,    19,    20,    21,    22,    23,    24,
+      25,    26,    27,    28,    29,    30,    31,    88,    41,    42,
+      73,   599,    92,    93,    43,    72,    89,    90,   614,   794,
+     887,   888,   350,    45,    74,   101,   102,   103,   359,    47,
+      75,   138,   139,   140,   141,   142,   143,   144,   145,   369,
+      49,    76,   171,   172,   173,   398,   174,   146,   370,   147,
+     371,   148,   372,   706,   707,   708,   834,   685,   686,   687,
+     815,  1008,   688,   816,   689,   817,   690,   818,   691,   692,
+     436,   693,   694,   695,   696,   697,   698,   699,   700,   701,
+     824,   702,   703,   827,   149,   387,   740,   741,   742,   854,
+     150,   384,   727,   728,   729,   730,   151,   386,   735,   736,
+     737,   738,   152,   385,   153,   390,   751,   752,   753,   863,
+      65,    84,   304,   305,   306,   449,   307,   450,   154,   391,
+     760,   761,   762,   763,   764,   765,   766,   767,   155,   378,
+     710,   711,   712,   837,    51,    77,   193,   194,   195,   404,
+     196,   405,   197,   406,   198,   411,   199,   410,   200,   409,
+     623,   201,   202,   156,   383,   722,   723,   724,   846,   939,
+     940,   157,   379,    59,    81,   714,   715,   716,   840,    61,
+      82,   269,   270,   271,   272,   273,   274,   275,   435,   276,
+     439,   277,   438,   278,   279,   440,   280,   158,   380,   718,
+     719,   720,   843,    63,    83,   290,   291,   292,   293,   294,
+     444,   295,   296,   297,   298,   204,   402,   796,   797,   798,
+     889,    53,    78,   215,   216,   217,   415,   159,   381,   160,
+     382,   207,   403,   800,   801,   802,   892,    55,    79,   231,
+     232,   233,   418,   234,   235,   420,   236,   237,   161,   389,
+     747,   748,   749,   860,    57,    80,   249,   250,   251,   252,
+     426,   253,   427,   254,   428,   255,   429,   256,   430,   257,
+     431,   258,   425,   209,   412,   805,   806,   895,   162,   388,
+     744,   745,   857,   957,   958,   959,   960,   961,  1021,   962,
+     163,   392,   777,   778,   779,   874,  1030,   780,   781,   875,
+     782,   783,   164,   165,   394,   789,   790,   791,   881,   792,
+     882,   166,   395,    67,    85,   327,   328,   329,   330,   454,
+     331,   455,   332,   333,   457,   334,   335,   336,   460,   650,
+     337,   461,   338,   339,   340,   341,   465,   657,   342,   466,
+     343,   467,   344,   468,   104,   361,   105,   362,   106,   363,
+     167,   367,   368,    71,    87,   351,   352,   353,   474,   107,
+     360,    69,    86,   346,   347,   348,   471,   808,   809,   897,
+     998,   999,  1000,  1001,  1040,  1002,  1038,  1055,  1056,  1057,
+    1064,  1065,  1066,  1071,  1067,  1068,  1069
   };
 
   const unsigned short int
   Dhcp6Parser::yytable_[] =
   {
-      95,   130,   162,   180,   203,   217,   237,   181,   259,   278,
-     295,   316,   748,   708,   167,   197,   210,   221,   239,   182,
-     273,   291,   183,   317,   678,   903,   168,   198,   211,   222,
-     240,   904,   274,   292,   905,   318,   260,   279,   908,   184,
-     909,   280,   200,   281,   204,   218,   205,   219,   915,    89,
-      38,    30,    31,    42,    32,    86,    33,   160,   161,   253,
-     275,   254,   255,   276,   277,   195,   206,   220,   238,   103,
-     114,    44,   104,   105,   106,    46,   115,   116,   600,    48,
-     699,   293,   294,   212,   213,   214,   215,   216,   115,   116,
-     606,   607,   608,    50,   252,   107,   108,   109,   110,   111,
-     112,   113,   114,   231,   293,   294,   177,   115,   116,   178,
-     777,   628,   629,   630,   631,    52,   699,   706,   352,   707,
-     115,   116,   253,   353,   254,   255,   114,   253,   256,   257,
-     258,   117,   118,   119,   120,   121,   381,   122,   114,   115,
-     116,   382,   123,   385,   115,   116,   632,   113,   386,   202,
-     398,   124,    94,   742,   125,   399,   115,   116,   700,    54,
-     401,   126,   647,   921,   922,   402,   253,   408,    56,   127,
-     128,   436,   409,   129,   177,   454,   437,   178,    90,    94,
-     455,   457,   821,   115,   116,   822,   458,    91,    92,    93,
-    1031,    94,   381,  1032,  1033,  1034,   903,   784,   115,   116,
-     115,   116,   904,   457,    94,   905,   624,   625,   785,   908,
-      94,   909,    34,    35,    36,    37,   385,   803,    58,   915,
-     642,   786,   804,    94,    60,   643,   644,   645,   646,   647,
-     648,   649,   650,   651,   652,   653,   654,   655,   656,   657,
-      62,    64,    94,   743,   744,   745,   746,    94,   253,   803,
-     827,   758,   759,   844,   805,   828,    66,   708,   845,    94,
-     824,   889,   962,   825,   963,   964,   107,   108,   109,   110,
-     851,   855,   337,   114,   454,   852,   856,   748,   830,   857,
-     341,   831,    95,   169,   803,   170,    94,   870,   342,   985,
-     871,   115,   116,   171,   172,   173,   174,   175,   176,   398,
-     989,    94,   436,    94,   986,   990,   343,   997,   344,   177,
-     345,   130,   178,   123,   401,   162,   998,   999,  1000,  1006,
-     179,   728,   729,   730,   731,   732,   733,   167,   180,   408,
-    1012,   203,   181,   351,  1007,  1013,  1046,   418,   217,   168,
-     197,  1047,  1029,   210,   182,  1030,   358,   183,   237,   359,
-     221,   360,   198,   361,   362,   211,   378,   384,   259,   417,
-     239,   428,   222,   278,   184,   392,   393,   200,    94,   404,
-     273,   204,   240,   205,   406,   291,   459,   460,   218,   407,
-     219,   419,   274,   422,   316,   426,   260,   292,   427,   430,
-     195,   279,   431,   206,    94,   280,   317,   281,   432,   114,
-     220,   596,   597,   598,   107,   108,   109,   110,   318,   112,
-     238,   114,   253,   975,   976,   977,   978,   115,   116,   115,
-     116,   433,   472,   438,   441,   443,   444,   447,   448,   115,
-     116,   449,   172,   173,   230,   175,   176,   461,   462,   463,
-     231,   232,   233,   234,   235,   236,   464,   177,   465,   466,
-     178,   468,   469,   470,   471,   473,   474,   475,   179,     1,
-       2,     3,     4,     5,     6,     7,     8,     9,    10,    11,
-      12,    13,    14,   300,   301,   302,   303,   304,   305,   306,
-     307,   308,   309,   310,   311,   312,   313,   476,   477,   478,
-     479,   480,   130,   481,   314,   315,   482,   162,   564,   565,
-     566,   483,   484,   485,   486,   487,   488,   489,   490,   167,
-     491,   493,   492,   494,   496,   499,   747,   760,   316,   500,
-      94,   168,    94,   501,   497,   502,   503,   505,   749,   761,
-     317,   506,    94,   507,   504,   508,   509,   511,   513,   515,
-     750,   762,   318,   514,   516,   519,   520,   521,   517,   522,
-     523,   524,   525,   527,   528,   529,   530,   531,   532,   533,
-     535,   536,   537,   539,   540,   542,   543,   544,   545,   546,
-     547,   548,   549,   550,   620,   551,   552,   553,   554,   555,
-     556,   557,   559,   561,   877,   879,   627,   562,   563,   567,
-     568,   569,   570,   571,   572,   638,   573,    32,   576,   577,
-     578,   579,   580,   593,   582,   581,   583,   584,   594,   887,
-     585,   586,   587,   588,   589,   591,   592,   595,   601,   602,
-     603,   604,   605,   609,   610,   611,   612,   613,   614,   615,
-     616,   617,   618,   619,   621,   622,   623,   634,   635,   636,
-     637,   679,   713,   683,   687,   691,   695,   717,   720,   724,
-     769,   773,   781,   791,   792,   793,   794,   795,   797,   798,
-     800,   801,   802,   808,  1016,   807,   811,   810,   813,   814,
-     816,   817,   820,   819,   876,   834,   823,   833,   837,   836,
-     838,   839,   840,   841,   842,   843,   848,   849,   850,   858,
-     863,   862,   865,   866,   878,   872,   868,   873,   874,   875,
-     881,   884,   880,   882,   883,   885,   886,   919,   946,   947,
-     939,   952,   953,   956,   987,   955,   961,   940,   993,   988,
-    1010,   941,   995,   942,   943,   994,   996,   944,  1015,  1018,
-    1020,  1043,   948,   949,  1023,  1025,   950,   980,   981,   180,
-    1044,  1045,   259,   181,  1048,   278,   574,   639,   897,   705,
-     982,   197,   898,   467,   273,   182,   498,   291,   183,   923,
-     913,  1049,   237,   198,   899,   295,   274,   900,   495,   292,
-     260,   926,   914,   279,   239,   184,   902,   280,   200,   281,
-     983,   747,   984,   927,   901,   760,   240,   924,   906,   991,
-     907,   203,  1002,   749,   217,  1003,  1004,   761,  1005,   965,
-     888,   195,   641,   210,   890,   750,   221,   920,   918,   762,
-     912,   967,  1008,   938,  1019,   211,   917,   937,   222,   541,
-     892,   925,   891,   968,   238,   945,   510,   966,   916,  1014,
-    1022,   204,   251,   205,   218,   894,   219,   893,   534,  1024,
-     896,   512,   895,   960,   538,   518,   958,   957,   526,   959,
-     936,   935,   934,   206,   778,  1050,   220,  1017,  1051,   954,
-     558,   767,   951,  1053,   640,  1021,  1041,  1052,   974,   560,
+     100,   137,   170,   188,   211,   225,   245,   189,   267,   286,
+     303,   324,   774,   734,   175,   205,   218,   229,   247,   190,
+     281,   299,   191,   325,   704,   486,   176,   206,   219,   230,
+     248,   932,   282,   300,   933,   326,   268,   287,    40,   192,
+     934,   288,   208,   289,   212,   226,   213,   227,   937,   938,
+     944,    33,   108,    34,   349,    35,   109,   239,   110,    32,
+      94,   111,   112,   113,   803,   203,   214,   228,   246,   624,
+     260,   365,   725,   301,   302,   396,   366,   168,   169,    91,
+     397,   630,   631,   632,   114,   115,   116,   117,   118,   119,
+     120,   121,  1060,   768,   400,  1061,  1062,  1063,   261,   401,
+     262,   263,   673,   413,   264,   265,   266,   416,   414,   122,
+     123,   121,   417,   423,   451,   122,   123,   345,   424,   452,
+     124,   125,   126,   127,   128,    44,   129,   122,   123,   122,
+     123,   130,   754,   755,   756,   757,   758,   759,   122,   123,
+     131,   725,   732,   132,   733,    99,   238,   122,   123,    46,
+     133,   726,   239,   240,   241,   242,   243,   244,   134,   135,
+     668,   849,   136,    48,   850,   669,   670,   671,   672,   673,
+     674,   675,   676,   677,   678,   679,   680,   681,   682,   683,
+     301,   302,   469,   769,   770,   771,   772,   470,   261,   121,
+     261,    95,   652,   653,   654,   655,   648,   649,   784,   785,
+      96,    97,    98,   932,   472,    50,   933,   122,   123,   473,
+      99,   120,   934,    99,    36,    37,    38,    39,    99,    99,
+     937,   938,   944,    52,   475,   475,   950,   951,   656,   476,
+     589,    99,   396,    99,   472,   852,   475,   811,   853,   812,
+     121,   813,    99,   114,   115,   116,   117,   400,   666,    54,
+     121,    99,   814,   220,   221,   222,   223,   224,   122,   123,
+     177,   734,   178,    56,   858,   918,   121,   859,   122,   123,
+     179,   180,   181,   182,   183,   184,   185,   210,   831,   186,
+      58,   774,   831,   832,   122,   123,   185,   833,   855,   186,
+     130,   100,   354,   856,   872,   879,   883,   187,   469,   873,
+     880,   884,   185,   885,   898,   186,    60,   899,   355,    99,
+      62,    99,   261,   283,   262,   263,   284,   285,   831,   413,
+      64,    66,   137,  1014,  1015,    68,   170,  1018,   261,   122,
+     123,   451,  1019,    70,  1058,   416,  1026,  1059,   175,   188,
+    1035,   356,   211,   189,   357,   122,   123,   423,  1041,   225,
+     176,   205,  1036,  1042,   218,   190,   358,   432,   191,   245,
+    1075,   229,    99,   206,   364,  1076,   219,   373,   374,   267,
+     375,   247,    99,   230,   286,   192,   477,   478,   208,   376,
+     433,   281,   212,   248,   213,   377,   299,   393,    99,   226,
+     399,   227,   407,   282,   408,   324,   419,   268,   300,   421,
+     422,   203,   287,   437,   214,   434,   288,   325,   289,   441,
+     442,   228,   620,   621,   622,   114,   115,   116,   117,   326,
+     119,   246,   121,   261,   991,   443,   992,   993,  1027,  1028,
+    1029,   122,   123,    99,  1004,  1005,  1006,  1007,   445,   446,
+     122,   123,   448,   180,   181,   447,   183,   184,   453,    99,
+     456,   458,   459,   462,   463,   464,   479,   480,   185,   481,
+     482,   186,   483,   484,   487,   488,   489,   490,   491,   187,
+       1,     2,     3,     4,     5,     6,     7,     8,     9,    10,
+      11,    12,    13,    14,    15,   308,   309,   310,   311,   312,
+     313,   314,   315,   316,   317,   318,   319,   320,   321,   492,
+     497,   498,   493,   586,   587,   588,   322,   323,   494,   499,
+     137,   495,   496,   500,   501,   502,   503,   170,   684,   684,
+     504,   505,   506,   507,   508,   509,   510,   511,   512,   175,
+     513,   514,   516,   517,   519,    99,   773,   786,   324,   520,
+     521,   176,   522,   523,    99,   525,   526,   524,   775,   787,
+     325,   527,   528,   529,   531,   533,   534,   535,   536,   539,
+     776,   788,   326,   537,   540,   541,   542,   543,   544,   545,
+     547,   548,   549,   550,   551,   552,   555,   553,   556,   557,
+     559,   644,   560,   562,   563,   564,   565,   566,   567,   568,
+     569,   570,   571,   574,   572,   573,   575,   576,   577,   579,
+     581,   583,   905,   906,   663,   584,   585,   590,   591,   592,
+     593,   594,   595,   596,   597,   836,   601,    34,   602,   603,
+     600,   604,   605,   606,   607,   608,   651,   598,   609,   610,
+     611,   612,   613,   615,   616,   617,   618,   619,   625,   626,
+     627,   628,   629,   633,   634,   635,   636,   637,   638,   639,
+     640,   641,   642,   643,   645,   646,   647,   658,   659,   660,
+     661,   662,   739,   886,   705,   709,   713,   717,   721,   743,
+     746,   750,   795,   799,   807,   819,   820,   821,   822,   823,
+     825,   826,   828,   829,   830,   908,   839,   835,   838,   842,
+     841,   844,   845,   847,   848,   916,   851,   862,   861,   864,
+     865,   890,   866,   867,   868,   869,   870,   871,   876,   877,
+     878,   891,   894,   893,   907,   909,   901,   900,   896,   902,
+     903,   904,   910,   911,   913,   912,   914,   915,   948,   975,
+     976,   981,   982,   985,   731,   984,   990,   968,  1022,  1016,
+    1039,  1017,   969,   970,   971,  1023,   972,  1024,   973,  1025,
+    1044,  1047,  1049,   977,   978,  1052,  1009,   684,  1054,   979,
+     684,  1072,  1045,   188,  1073,  1074,   267,   189,  1077,   286,
+     664,   667,   926,  1010,   485,   205,   927,   810,   281,   190,
+     515,   299,   191,   952,   942,  1011,   245,   206,   928,   303,
+     282,   929,   919,   300,   268,   955,   943,   287,   247,   192,
+     931,   288,   208,   289,  1012,   773,  1013,   956,   930,   786,
+     248,   953,   935,  1020,   936,   211,  1031,   775,   225,  1032,
+    1033,   787,  1034,   994,  1078,   203,   518,   218,   917,   776,
+     229,   949,   947,   788,   941,   996,  1037,   967,  1048,   219,
+     946,   966,   230,   974,   561,   954,   921,   997,   246,   920,
+     945,   995,  1043,   530,   259,   212,  1051,   213,   226,   923,
+     227,   554,   922,   925,  1053,   987,   924,   989,   986,   546,
+     532,   965,   804,   558,   988,   964,  1046,   214,   963,   980,
+     228,   983,  1079,  1080,   793,   578,   582,  1082,   538,   665,
+    1003,  1050,  1081,  1070,     0,     0,     0,     0,     0,   580,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,   897,
-       0,     0,     0,   898,     0,   923,     0,     0,     0,     0,
-       0,   913,     0,     0,     0,   899,     0,   926,   900,     0,
-       0,     0,   965,   914,     0,     0,     0,   902,     0,   927,
-       0,     0,     0,   924,   967,   901,     0,     0,     0,   906,
-       0,   907,     0,     0,     0,     0,   968,     0,     0,     0,
-     966,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,   912,     0,     0,     0,     0,     0,   925
+       0,     0,     0,     0,   926,     0,     0,     0,   927,     0,
+     952,     0,     0,     0,     0,     0,   942,     0,     0,     0,
+     928,     0,   955,   929,     0,     0,     0,   994,   943,     0,
+       0,     0,   931,     0,   956,     0,     0,     0,   953,   996,
+     930,     0,     0,     0,   935,     0,   936,     0,     0,     0,
+       0,   997,     0,     0,     0,   995,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,   941,     0,     0,     0,
+       0,     0,   954
   };
 
   const short int
   Dhcp6Parser::yycheck_[] =
   {
-      70,    71,    72,    73,    74,    75,    76,    73,    78,    79,
-      80,    81,   586,   580,    72,    73,    74,    75,    76,    73,
-      78,    79,    73,    81,   569,   818,    72,    73,    74,    75,
-      76,   818,    78,    79,   818,    81,    78,    79,   818,    73,
-     818,    79,    73,    79,    74,    75,    74,    75,   818,    10,
-      16,     0,     5,     7,     7,   165,     9,    12,    13,    45,
-      46,    47,    48,    49,    50,    73,    74,    75,    76,    11,
-      44,     7,    14,    15,    16,     7,    62,    63,   507,     7,
-      87,    94,    95,    57,    58,    59,    60,    61,    62,    63,
-     519,   520,   521,     7,    17,    37,    38,    39,    40,    41,
-      42,    43,    44,    85,    94,    95,    80,    62,    63,    83,
-      92,   133,   134,   135,   136,     7,    87,    88,     3,    90,
-      62,    63,    45,     8,    47,    48,    44,    45,    51,    52,
-      53,    73,    74,    75,    76,    77,     3,    79,    44,    62,
-      63,     8,    84,     3,    62,    63,   168,    43,     8,    55,
-       3,    93,   165,    17,    96,     8,    62,    63,   165,     7,
-       3,   103,    26,    81,    82,     8,    45,     3,     7,   111,
-     112,     3,     8,   115,    80,     3,     8,    83,   139,   165,
-       8,     3,     3,    62,    63,     6,     8,   148,   149,   150,
-     142,   165,     3,   145,   146,   147,   989,     8,    62,    63,
-      62,    63,   989,     3,   165,   989,   130,   131,     8,   989,
-     165,   989,   165,   166,   167,   168,     3,     3,     7,   989,
-      17,     8,     8,   165,     7,    22,    23,    24,    25,    26,
-      27,    28,    29,    30,    31,    32,    33,    34,    35,    36,
-       7,     7,   165,   107,   108,   109,   110,   165,    45,     3,
-       3,   113,   114,     3,     8,     8,     7,   824,     8,   165,
-       3,   806,   141,     6,   143,   144,    37,    38,    39,    40,
-       3,     3,   140,    44,     3,     8,     8,   851,     3,     8,
-       6,     6,   352,    54,     3,    56,   165,     3,     3,     8,
-       6,    62,    63,    64,    65,    66,    67,    68,    69,     3,
-       3,   165,     3,   165,     8,     8,     4,     8,     8,    80,
-       3,   381,    83,    84,     3,   385,   104,   105,   106,     8,
-      91,    97,    98,    99,   100,   101,   102,   385,   398,     3,
-       3,   401,   398,     4,     8,     8,     3,     3,   408,   385,
-     398,     8,     3,   401,   398,     6,     4,   398,   418,     4,
-     408,     4,   398,     4,     4,   401,     4,     4,   428,     8,
-     418,     3,   408,   433,   398,     4,     4,   398,   165,     4,
-     428,   401,   418,   401,     4,   433,   342,   343,   408,     4,
-     408,     8,   428,     4,   454,     4,   428,   433,     8,     4,
-     398,   433,     4,   401,   165,   433,   454,   433,     8,    44,
-     408,    70,    71,    72,    37,    38,    39,    40,   454,    42,
-     418,    44,    45,    18,    19,    20,    21,    62,    63,    62,
-      63,     3,   166,     4,     4,     4,     4,     4,     4,    62,
-      63,     4,    65,    66,    79,    68,    69,   165,     4,     4,
-      85,    86,    87,    88,    89,    90,     4,    80,     4,     4,
-      83,     4,     4,     4,     4,   166,   166,   166,    91,   151,
-     152,   153,   154,   155,   156,   157,   158,   159,   160,   161,
-     162,   163,   164,   116,   117,   118,   119,   120,   121,   122,
-     123,   124,   125,   126,   127,   128,   129,   166,     4,     4,
-       4,     4,   562,     4,   137,   138,     4,   567,   464,   465,
-     466,     4,     4,     4,     4,     4,     4,     4,     4,   567,
-       4,     4,   166,     4,     4,     4,   586,   587,   588,     4,
-     165,   567,   165,     4,   168,     4,     4,   168,   586,   587,
-     588,     4,   165,     4,   166,     4,     4,     4,     4,     4,
-     586,   587,   588,   166,   166,     4,     4,     4,   166,     4,
-       4,     4,     4,     4,     4,   166,     4,     4,     4,   168,
-       4,   168,   168,     4,     4,   168,     4,     4,   166,     4,
-     166,   166,     4,     4,   540,   168,   168,   168,     4,     4,
-       4,     4,     4,     4,   168,   168,   132,     7,     7,     7,
-       7,     7,     5,     5,     5,   561,     5,     7,   165,     5,
-       5,     5,     5,   165,     5,     7,     5,     5,   165,   168,
-       7,     7,     7,     7,     5,     5,     5,   165,   165,     7,
-     165,   165,   165,   165,   165,   165,   165,   165,   165,   165,
-     165,   165,   165,   165,   165,   165,   165,   165,   165,   165,
-       5,     7,    78,     7,     7,     7,     7,     7,     7,     7,
-       7,     7,     7,     4,     4,     4,     4,     4,     4,     4,
-       4,     4,     4,     3,   168,     6,     3,     6,     6,     3,
-       6,     3,     3,     6,   166,     3,     6,     6,     3,     6,
-       4,     4,     4,     4,     4,     4,     4,     4,     4,   165,
-       3,     6,     6,     3,   166,     4,     8,     4,     4,     4,
-       4,     4,   166,   166,   166,   166,   166,     4,     4,     4,
-     166,     4,     4,     3,     8,     6,     4,   166,     4,     8,
-       4,   166,     3,   166,   166,     8,     8,   166,     4,     4,
-       4,     4,   166,   166,     5,     7,   166,   165,   165,   809,
-       4,     4,   812,   809,     4,   815,   480,   562,   818,   579,
-     165,   809,   818,   352,   812,   809,   385,   815,   809,   829,
-     818,   168,   832,   809,   818,   835,   812,   818,   381,   815,
-     812,   829,   818,   815,   832,   809,   818,   815,   809,   815,
-     165,   851,   165,   829,   818,   855,   832,   829,   818,   165,
-     818,   861,   165,   851,   864,   165,   165,   855,   165,   869,
-     803,   809,   567,   861,   808,   851,   864,   827,   824,   855,
-     818,   869,   165,   837,   166,   861,   821,   835,   864,   436,
-     811,   829,   809,   869,   832,   844,   398,   869,   820,   989,
-     165,   861,    77,   861,   864,   814,   864,   812,   428,   165,
-     817,   401,   815,   866,   433,   408,   863,   861,   418,   864,
-     834,   832,   830,   861,   602,   166,   864,   995,   166,   855,
-     454,   588,   851,   165,   563,  1012,  1029,  1046,   870,   457,
+      74,    75,    76,    77,    78,    79,    80,    77,    82,    83,
+      84,    85,   610,   604,    76,    77,    78,    79,    80,    77,
+      82,    83,    77,    85,   593,   367,    76,    77,    78,    79,
+      80,   846,    82,    83,   846,    85,    82,    83,    17,    77,
+     846,    83,    77,    83,    78,    79,    78,    79,   846,   846,
+     846,     5,     7,     7,    12,     9,    11,    87,    13,     0,
+      10,    16,    17,    18,    94,    77,    78,    79,    80,   527,
+      19,     3,    89,    96,    97,     3,     8,    14,    15,   168,
+       8,   539,   540,   541,    39,    40,    41,    42,    43,    44,
+      45,    46,   144,    19,     3,   147,   148,   149,    47,     8,
+      49,    50,    28,     3,    53,    54,    55,     3,     8,    64,
+      65,    46,     8,     3,     3,    64,    65,   142,     8,     8,
+      75,    76,    77,    78,    79,     7,    81,    64,    65,    64,
+      65,    86,    99,   100,   101,   102,   103,   104,    64,    65,
+      95,    89,    90,    98,    92,   168,    81,    64,    65,     7,
+     105,   168,    87,    88,    89,    90,    91,    92,   113,   114,
+      19,     3,   117,     7,     6,    24,    25,    26,    27,    28,
+      29,    30,    31,    32,    33,    34,    35,    36,    37,    38,
+      96,    97,     3,   109,   110,   111,   112,     8,    47,    46,
+      47,   141,   135,   136,   137,   138,   132,   133,   115,   116,
+     150,   151,   152,  1018,     3,     7,  1018,    64,    65,     8,
+     168,    45,  1018,   168,   168,   169,   170,   171,   168,   168,
+    1018,  1018,  1018,     7,     3,     3,    83,    84,   171,     8,
+       8,   168,     3,   168,     3,     3,     3,     8,     6,     8,
+      46,     8,   168,    39,    40,    41,    42,     3,   590,     7,
+      46,   168,     8,    59,    60,    61,    62,    63,    64,    65,
+      56,   852,    58,     7,     3,   834,    46,     6,    64,    65,
+      66,    67,    68,    69,    70,    71,    82,    57,     3,    85,
+       7,   879,     3,     8,    64,    65,    82,     8,     3,    85,
+      86,   365,     6,     8,     3,     3,     3,    93,     3,     8,
+       8,     8,    82,     8,     3,    85,     7,     6,     3,   168,
+       7,   168,    47,    48,    49,    50,    51,    52,     3,     3,
+       7,     7,   396,     8,     8,     7,   400,     3,    47,    64,
+      65,     3,     8,     7,     3,     3,     8,     6,   400,   413,
+       8,     4,   416,   413,     8,    64,    65,     3,     3,   423,
+     400,   413,     8,     8,   416,   413,     3,     8,   413,   433,
+       3,   423,   168,   413,     4,     8,   416,     4,     4,   443,
+       4,   433,   168,   423,   448,   413,   355,   356,   413,     4,
+       3,   443,   416,   433,   416,     4,   448,     4,   168,   423,
+       4,   423,     4,   443,     4,   469,     4,   443,   448,     4,
+       4,   413,   448,     4,   416,     8,   448,   469,   448,     4,
+       8,   423,    72,    73,    74,    39,    40,    41,    42,   469,
+      44,   433,    46,    47,   143,     3,   145,   146,   106,   107,
+     108,    64,    65,   168,    20,    21,    22,    23,     4,     4,
+      64,    65,     3,    67,    68,     8,    70,    71,     4,   168,
+       4,     4,     4,     4,     4,     4,   168,     4,    82,     4,
+       4,    85,     4,     4,     4,     4,     4,     4,     4,    93,
+     153,   154,   155,   156,   157,   158,   159,   160,   161,   162,
+     163,   164,   165,   166,   167,   118,   119,   120,   121,   122,
+     123,   124,   125,   126,   127,   128,   129,   130,   131,   169,
+       4,     4,   169,   482,   483,   484,   139,   140,   169,     4,
+     584,   169,   169,     4,     4,     4,     4,   591,   592,   593,
+       4,     4,     4,     4,     4,     4,     4,     4,   169,   591,
+       4,     4,     4,   171,     4,   168,   610,   611,   612,     4,
+       4,   591,     4,     4,   168,   171,     4,   169,   610,   611,
+     612,     4,     4,     4,     4,     4,   169,     4,   169,     4,
+     610,   611,   612,   169,     4,     4,     4,     4,     4,     4,
+       4,     4,   169,     4,     4,     4,     4,   171,   171,   171,
+       4,   560,     4,   171,     4,     4,   169,     4,   169,   169,
+       4,     4,   171,     4,   171,   171,     4,     4,     4,     4,
+       4,     4,   169,   171,   583,     7,     7,     7,     7,     7,
+       7,     5,     5,     5,     5,     3,     5,     7,     5,     5,
+     168,     5,     7,     5,     5,     5,   134,   500,     7,     7,
+       7,     7,     5,     5,     5,   168,   168,   168,   168,     7,
+     168,   168,   168,   168,   168,   168,   168,   168,   168,   168,
+     168,   168,   168,   168,   168,   168,   168,   168,   168,   168,
+       5,     5,    80,   168,     7,     7,     7,     7,     7,     7,
+       7,     7,     7,     7,     7,     4,     4,     4,     4,     4,
+       4,     4,     4,     4,     4,   171,     3,     6,     6,     3,
+       6,     6,     3,     6,     3,   171,     6,     3,     6,     6,
+       3,     6,     4,     4,     4,     4,     4,     4,     4,     4,
+       4,     3,     3,     6,   169,   169,     4,     6,     8,     4,
+       4,     4,     4,   169,     4,   169,   169,   169,     4,     4,
+       4,     4,     4,     3,   603,     6,     4,   169,     4,     8,
+       4,     8,   169,   169,   169,     8,   169,     3,   169,     8,
+       4,     4,     4,   169,   169,     5,   168,   831,     7,   169,
+     834,     4,   171,   837,     4,     4,   840,   837,     4,   843,
+     584,   591,   846,   168,   365,   837,   846,   662,   840,   837,
+     396,   843,   837,   857,   846,   168,   860,   837,   846,   863,
+     840,   846,   836,   843,   840,   857,   846,   843,   860,   837,
+     846,   843,   837,   843,   168,   879,   168,   857,   846,   883,
+     860,   857,   846,   168,   846,   889,   168,   879,   892,   168,
+     168,   883,   168,   897,   171,   837,   400,   889,   831,   879,
+     892,   855,   852,   883,   846,   897,   168,   865,   169,   889,
+     849,   863,   892,   872,   451,   857,   839,   897,   860,   837,
+     848,   897,  1018,   413,    81,   889,   168,   889,   892,   842,
+     892,   443,   840,   845,   168,   891,   843,   894,   889,   433,
+     416,   862,   626,   448,   892,   860,  1024,   889,   858,   879,
+     892,   883,   169,   169,   612,   469,   475,   168,   423,   585,
+     898,  1041,  1075,  1058,    -1,    -1,    -1,    -1,    -1,   472,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   989,
-      -1,    -1,    -1,   989,    -1,   995,    -1,    -1,    -1,    -1,
-      -1,   989,    -1,    -1,    -1,   989,    -1,   995,   989,    -1,
-      -1,    -1,  1012,   989,    -1,    -1,    -1,   989,    -1,   995,
-      -1,    -1,    -1,   995,  1012,   989,    -1,    -1,    -1,   989,
-      -1,   989,    -1,    -1,    -1,    -1,  1012,    -1,    -1,    -1,
-    1012,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,   989,    -1,    -1,    -1,    -1,    -1,   995
+      -1,    -1,    -1,    -1,  1018,    -1,    -1,    -1,  1018,    -1,
+    1024,    -1,    -1,    -1,    -1,    -1,  1018,    -1,    -1,    -1,
+    1018,    -1,  1024,  1018,    -1,    -1,    -1,  1041,  1018,    -1,
+      -1,    -1,  1018,    -1,  1024,    -1,    -1,    -1,  1024,  1041,
+    1018,    -1,    -1,    -1,  1018,    -1,  1018,    -1,    -1,    -1,
+      -1,  1041,    -1,    -1,    -1,  1041,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,  1018,    -1,    -1,    -1,
+      -1,    -1,  1024
   };
 
   const unsigned short int
   Dhcp6Parser::yystos_[] =
   {
-       0,   151,   152,   153,   154,   155,   156,   157,   158,   159,
-     160,   161,   162,   163,   164,   170,   171,   172,   173,   174,
-     175,   176,   177,   178,   179,   180,   181,   182,   183,   184,
-       0,     5,     7,     9,   165,   166,   167,   168,   185,   186,
-     187,   192,     7,   201,     7,   207,     7,   218,     7,   312,
-       7,   389,     7,   405,     7,   422,     7,   341,     7,   347,
-       7,   371,     7,   288,     7,   481,     7,   520,   193,   188,
-     202,   208,   219,   313,   390,   406,   423,   342,   348,   372,
-     289,   482,   521,   185,   194,   195,   165,   190,   191,    10,
-     139,   148,   149,   150,   165,   200,   203,   204,   205,   512,
-     514,   516,   518,    11,    14,    15,    16,    37,    38,    39,
-      40,    41,    42,    43,    44,    62,    63,    73,    74,    75,
-      76,    77,    79,    84,    93,    96,   103,   111,   112,   115,
-     200,   209,   210,   211,   212,   213,   214,   215,   216,   225,
-     227,   229,   262,   268,   274,   280,   282,   296,   306,   331,
-     339,   365,   395,   397,   416,   446,   458,   470,   471,   479,
-      12,    13,   200,   220,   221,   222,   224,   395,   397,    54,
-      56,    64,    65,    66,    67,    68,    69,    80,    83,    91,
-     200,   211,   212,   213,   214,   314,   315,   316,   318,   320,
-     322,   324,   326,   329,   330,   365,   383,   395,   397,   399,
-     416,   441,    55,   200,   322,   324,   365,   391,   392,   393,
-     395,   397,    57,    58,    59,    60,    61,   200,   322,   324,
-     365,   395,   397,   407,   408,   409,   411,   412,   414,   415,
-      79,    85,    86,    87,    88,    89,    90,   200,   365,   395,
-     397,   424,   425,   426,   427,   429,   431,   433,   435,   437,
-     439,   339,    17,    45,    47,    48,    51,    52,    53,   200,
-     247,   349,   350,   351,   352,   353,   354,   355,   357,   359,
-     361,   362,   364,   395,   397,    46,    49,    50,   200,   247,
-     353,   359,   373,   374,   375,   376,   377,   379,   380,   381,
-     382,   395,   397,    94,    95,   200,   290,   291,   292,   294,
-     116,   117,   118,   119,   120,   121,   122,   123,   124,   125,
-     126,   127,   128,   129,   137,   138,   200,   395,   397,   483,
-     484,   485,   486,   488,   490,   491,   493,   494,   495,   498,
-     500,   501,   502,   503,   506,   508,   510,   140,   522,   523,
-     524,     6,     3,     4,     8,     3,   206,   519,   513,   515,
-     517,     4,     3,     8,   217,   226,   228,   230,     4,     4,
-       4,     4,     4,   307,   340,   366,   396,   398,   332,   269,
-     281,   275,   263,   447,   417,   283,   297,   459,     4,   472,
-     480,     3,     8,   223,     4,     3,     8,   384,   400,   317,
-     319,   321,     4,     4,   327,   325,   323,   442,     3,     8,
-     394,     3,     8,   410,     4,   413,     4,     4,     3,     8,
-     440,   428,   430,   432,   434,   436,   438,     8,     3,     8,
-     356,   248,     4,   360,   358,   363,     4,     8,     3,   378,
-       4,     4,     8,     3,   293,   295,     3,     8,     4,   487,
-     489,     4,   492,     4,     4,   496,   499,     4,     4,     4,
-     504,   507,   509,   511,     3,     8,   525,     3,     8,   185,
-     185,   165,     4,     4,     4,     4,     4,   204,     4,     4,
-       4,     4,   166,   166,   166,   166,   166,     4,     4,     4,
+       0,   153,   154,   155,   156,   157,   158,   159,   160,   161,
+     162,   163,   164,   165,   166,   167,   173,   174,   175,   176,
+     177,   178,   179,   180,   181,   182,   183,   184,   185,   186,
+     187,   188,     0,     5,     7,     9,   168,   169,   170,   171,
+     189,   190,   191,   196,     7,   205,     7,   211,     7,   222,
+       7,   316,     7,   393,     7,   409,     7,   426,     7,   345,
+       7,   351,     7,   375,     7,   292,     7,   485,     7,   533,
+       7,   525,   197,   192,   206,   212,   223,   317,   394,   410,
+     427,   346,   352,   376,   293,   486,   534,   526,   189,   198,
+     199,   168,   194,   195,    10,   141,   150,   151,   152,   168,
+     204,   207,   208,   209,   516,   518,   520,   531,     7,    11,
+      13,    16,    17,    18,    39,    40,    41,    42,    43,    44,
+      45,    46,    64,    65,    75,    76,    77,    78,    79,    81,
+      86,    95,    98,   105,   113,   114,   117,   204,   213,   214,
+     215,   216,   217,   218,   219,   220,   229,   231,   233,   266,
+     272,   278,   284,   286,   300,   310,   335,   343,   369,   399,
+     401,   420,   450,   462,   474,   475,   483,   522,    14,    15,
+     204,   224,   225,   226,   228,   399,   401,    56,    58,    66,
+      67,    68,    69,    70,    71,    82,    85,    93,   204,   215,
+     216,   217,   218,   318,   319,   320,   322,   324,   326,   328,
+     330,   333,   334,   369,   387,   399,   401,   403,   420,   445,
+      57,   204,   326,   328,   369,   395,   396,   397,   399,   401,
+      59,    60,    61,    62,    63,   204,   326,   328,   369,   399,
+     401,   411,   412,   413,   415,   416,   418,   419,    81,    87,
+      88,    89,    90,    91,    92,   204,   369,   399,   401,   428,
+     429,   430,   431,   433,   435,   437,   439,   441,   443,   343,
+      19,    47,    49,    50,    53,    54,    55,   204,   251,   353,
+     354,   355,   356,   357,   358,   359,   361,   363,   365,   366,
+     368,   399,   401,    48,    51,    52,   204,   251,   357,   363,
+     377,   378,   379,   380,   381,   383,   384,   385,   386,   399,
+     401,    96,    97,   204,   294,   295,   296,   298,   118,   119,
+     120,   121,   122,   123,   124,   125,   126,   127,   128,   129,
+     130,   131,   139,   140,   204,   399,   401,   487,   488,   489,
+     490,   492,   494,   495,   497,   498,   499,   502,   504,   505,
+     506,   507,   510,   512,   514,   142,   535,   536,   537,    12,
+     204,   527,   528,   529,     6,     3,     4,     8,     3,   210,
+     532,   517,   519,   521,     4,     3,     8,   523,   524,   221,
+     230,   232,   234,     4,     4,     4,     4,     4,   311,   344,
+     370,   400,   402,   336,   273,   285,   279,   267,   451,   421,
+     287,   301,   463,     4,   476,   484,     3,     8,   227,     4,
+       3,     8,   388,   404,   321,   323,   325,     4,     4,   331,
+     329,   327,   446,     3,     8,   398,     3,     8,   414,     4,
+     417,     4,     4,     3,     8,   444,   432,   434,   436,   438,
+     440,   442,     8,     3,     8,   360,   252,     4,   364,   362,
+     367,     4,     8,     3,   382,     4,     4,     8,     3,   297,
+     299,     3,     8,     4,   491,   493,     4,   496,     4,     4,
+     500,   503,     4,     4,     4,   508,   511,   513,   515,     3,
+       8,   538,     3,     8,   530,     3,     8,   189,   189,   168,
+       4,     4,     4,     4,     4,   208,   527,     4,     4,     4,
+       4,     4,   169,   169,   169,   169,   169,     4,     4,     4,
        4,     4,     4,     4,     4,     4,     4,     4,     4,     4,
-       4,     4,   166,     4,     4,   210,     4,   168,   221,     4,
-       4,     4,     4,     4,   166,   168,     4,     4,     4,     4,
-     315,     4,   392,     4,   166,     4,   166,   166,   408,     4,
-       4,     4,     4,     4,     4,     4,   426,     4,     4,   166,
-       4,     4,     4,   168,   351,     4,   168,   168,   375,     4,
-       4,   291,   168,     4,     4,   166,     4,   166,   166,     4,
-       4,   168,   168,   168,     4,     4,     4,     4,   484,     4,
-     523,     4,     7,     7,   185,   185,   185,     7,     7,     7,
-       5,     5,     5,     5,   187,   189,   165,     5,     5,     5,
-       5,     7,     5,     5,     5,     7,     7,     7,     7,     5,
-     196,     5,     5,   165,   165,   165,    70,    71,    72,   328,
-     196,   165,     7,   165,   165,   165,   196,   196,   196,   165,
-     165,   165,   165,   165,   165,   165,   165,   165,   165,   165,
-     185,   165,   165,   165,   130,   131,   497,   132,   133,   134,
-     135,   136,   168,   505,   165,   165,   165,     5,   185,   209,
-     522,   220,    17,    22,    23,    24,    25,    26,    27,    28,
-      29,    30,    31,    32,    33,    34,    35,    36,   200,   235,
-     236,   237,   240,   242,   244,   246,   247,   249,   250,   251,
-     252,   253,   254,   255,   256,   257,   259,   260,   235,     7,
-     231,   232,   233,     7,   308,   309,   310,     7,   343,   344,
-     345,     7,   367,   368,   369,     7,   333,   334,   335,    87,
-     165,   270,   271,   272,   273,   194,    88,    90,   272,   276,
-     277,   278,   279,    78,   264,   265,   266,     7,   448,   449,
-       7,   418,   419,   420,     7,   284,   285,   286,    97,    98,
-      99,   100,   101,   102,   298,   299,   300,   301,   302,   303,
-     304,   305,    17,   107,   108,   109,   110,   200,   249,   395,
-     397,   460,   461,   462,   465,   466,   468,   469,   113,   114,
-     200,   395,   397,   473,   474,   475,   477,   483,   197,     7,
-     385,   386,   387,     7,   401,   402,   403,    92,   427,   443,
-     444,     7,   526,   527,     8,     8,     8,   238,   241,   243,
-     245,     4,     4,     4,     4,     4,   258,     4,     4,   261,
-       4,     4,     4,     3,     8,     8,   234,     6,     3,   311,
-       6,     3,   346,     6,     3,   370,     6,     3,   336,     6,
-       3,     3,     6,     6,     3,     6,   267,     3,     8,   450,
-       3,     6,   421,     6,     3,   287,     6,     3,     4,     4,
-       4,     4,     4,     4,     3,     8,   463,   467,     4,     4,
-       4,     3,     8,   476,   478,     3,     8,     8,   165,   198,
-     199,   388,     6,     3,   404,     6,     3,   445,     8,   528,
-       3,     6,     4,     4,     4,     4,   166,   168,   166,   168,
-     166,     4,   166,   166,     4,   166,   166,   168,   236,   235,
-     233,   314,   310,   349,   345,   373,   369,   200,   211,   212,
-     213,   214,   247,   306,   318,   320,   322,   324,   326,   330,
-     337,   338,   365,   395,   397,   441,   335,   271,   277,     4,
-     265,    81,    82,   200,   247,   365,   395,   397,   451,   452,
-     453,   454,   455,   457,   449,   424,   420,   290,   286,   166,
-     166,   166,   166,   166,   166,   299,     4,     4,   166,   166,
-     166,   461,     4,     4,   474,     6,     3,   391,   387,   407,
-     403,     4,   141,   143,   144,   200,   247,   395,   397,   529,
-     530,   531,   532,   534,   527,    18,    19,    20,    21,   239,
-     165,   165,   165,   165,   165,     8,     8,     8,     8,     3,
-       8,   165,   456,     4,     8,     3,     8,     8,   104,   105,
-     106,   464,   165,   165,   165,   165,     8,     8,   165,   535,
-       4,   533,     3,     8,   338,     4,   168,   453,     4,   166,
-       4,   530,   165,     5,   165,     7,   536,   537,   538,     3,
-       6,   142,   145,   146,   147,   539,   540,   541,   543,   544,
-     545,   537,   542,     4,     4,     4,     3,     8,     4,   168,
-     166,   166,   540,   165
+       4,     4,   169,     4,     4,   214,     4,   171,   225,     4,
+       4,     4,     4,     4,   169,   171,     4,     4,     4,     4,
+     319,     4,   396,     4,   169,     4,   169,   169,   412,     4,
+       4,     4,     4,     4,     4,     4,   430,     4,     4,   169,
+       4,     4,     4,   171,   355,     4,   171,   171,   379,     4,
+       4,   295,   171,     4,     4,   169,     4,   169,   169,     4,
+       4,   171,   171,   171,     4,     4,     4,     4,   488,     4,
+     536,     4,   528,     4,     7,     7,   189,   189,   189,     8,
+       7,     7,     7,     7,     5,     5,     5,     5,   191,   193,
+     168,     5,     5,     5,     5,     7,     5,     5,     5,     7,
+       7,     7,     7,     5,   200,     5,     5,   168,   168,   168,
+      72,    73,    74,   332,   200,   168,     7,   168,   168,   168,
+     200,   200,   200,   168,   168,   168,   168,   168,   168,   168,
+     168,   168,   168,   168,   189,   168,   168,   168,   132,   133,
+     501,   134,   135,   136,   137,   138,   171,   509,   168,   168,
+     168,     5,     5,   189,   213,   535,   527,   224,    19,    24,
+      25,    26,    27,    28,    29,    30,    31,    32,    33,    34,
+      35,    36,    37,    38,   204,   239,   240,   241,   244,   246,
+     248,   250,   251,   253,   254,   255,   256,   257,   258,   259,
+     260,   261,   263,   264,   239,     7,   235,   236,   237,     7,
+     312,   313,   314,     7,   347,   348,   349,     7,   371,   372,
+     373,     7,   337,   338,   339,    89,   168,   274,   275,   276,
+     277,   198,    90,    92,   276,   280,   281,   282,   283,    80,
+     268,   269,   270,     7,   452,   453,     7,   422,   423,   424,
+       7,   288,   289,   290,    99,   100,   101,   102,   103,   104,
+     302,   303,   304,   305,   306,   307,   308,   309,    19,   109,
+     110,   111,   112,   204,   253,   399,   401,   464,   465,   466,
+     469,   470,   472,   473,   115,   116,   204,   399,   401,   477,
+     478,   479,   481,   487,   201,     7,   389,   390,   391,     7,
+     405,   406,   407,    94,   431,   447,   448,     7,   539,   540,
+     235,     8,     8,     8,     8,   242,   245,   247,   249,     4,
+       4,     4,     4,     4,   262,     4,     4,   265,     4,     4,
+       4,     3,     8,     8,   238,     6,     3,   315,     6,     3,
+     350,     6,     3,   374,     6,     3,   340,     6,     3,     3,
+       6,     6,     3,     6,   271,     3,     8,   454,     3,     6,
+     425,     6,     3,   291,     6,     3,     4,     4,     4,     4,
+       4,     4,     3,     8,   467,   471,     4,     4,     4,     3,
+       8,   480,   482,     3,     8,     8,   168,   202,   203,   392,
+       6,     3,   408,     6,     3,   449,     8,   541,     3,     6,
+       6,     4,     4,     4,     4,   169,   171,   169,   171,   169,
+       4,   169,   169,     4,   169,   169,   171,   240,   239,   237,
+     318,   314,   353,   349,   377,   373,   204,   215,   216,   217,
+     218,   251,   310,   322,   324,   326,   328,   330,   334,   341,
+     342,   369,   399,   401,   445,   339,   275,   281,     4,   269,
+      83,    84,   204,   251,   369,   399,   401,   455,   456,   457,
+     458,   459,   461,   453,   428,   424,   294,   290,   169,   169,
+     169,   169,   169,   169,   303,     4,     4,   169,   169,   169,
+     465,     4,     4,   478,     6,     3,   395,   391,   411,   407,
+       4,   143,   145,   146,   204,   251,   399,   401,   542,   543,
+     544,   545,   547,   540,    20,    21,    22,    23,   243,   168,
+     168,   168,   168,   168,     8,     8,     8,     8,     3,     8,
+     168,   460,     4,     8,     3,     8,     8,   106,   107,   108,
+     468,   168,   168,   168,   168,     8,     8,   168,   548,     4,
+     546,     3,     8,   342,     4,   171,   457,     4,   169,     4,
+     543,   168,     5,   168,     7,   549,   550,   551,     3,     6,
+     144,   147,   148,   149,   552,   553,   554,   556,   557,   558,
+     550,   555,     4,     4,     4,     3,     8,     4,   171,   169,
+     169,   553,   168
   };
 
   const unsigned short int
   Dhcp6Parser::yyr1_[] =
   {
-       0,   169,   171,   170,   172,   170,   173,   170,   174,   170,
-     175,   170,   176,   170,   177,   170,   178,   170,   179,   170,
-     180,   170,   181,   170,   182,   170,   183,   170,   184,   170,
-     185,   185,   185,   185,   185,   185,   185,   186,   188,   187,
-     189,   190,   190,   191,   191,   193,   192,   194,   194,   195,
-     195,   197,   196,   198,   198,   199,   199,   200,   202,   201,
-     203,   203,   204,   204,   204,   204,   204,   204,   206,   205,
-     208,   207,   209,   209,   210,   210,   210,   210,   210,   210,
-     210,   210,   210,   210,   210,   210,   210,   210,   210,   210,
-     210,   210,   210,   210,   210,   210,   210,   210,   210,   210,
-     210,   210,   211,   212,   213,   214,   215,   217,   216,   219,
-     218,   220,   220,   221,   221,   221,   221,   221,   223,   222,
-     224,   226,   225,   228,   227,   230,   229,   231,   231,   232,
-     232,   234,   233,   235,   235,   236,   236,   236,   236,   236,
-     236,   236,   236,   236,   236,   236,   236,   236,   236,   236,
-     236,   236,   236,   238,   237,   239,   239,   239,   239,   241,
-     240,   243,   242,   245,   244,   246,   248,   247,   249,   250,
-     251,   252,   253,   254,   255,   256,   258,   257,   259,   261,
-     260,   263,   262,   264,   264,   265,   267,   266,   269,   268,
-     270,   270,   271,   271,   272,   273,   275,   274,   276,   276,
-     277,   277,   277,   278,   279,   281,   280,   283,   282,   284,
-     284,   285,   285,   287,   286,   289,   288,   290,   290,   290,
-     291,   291,   293,   292,   295,   294,   297,   296,   298,   298,
-     299,   299,   299,   299,   299,   299,   300,   301,   302,   303,
-     304,   305,   307,   306,   308,   308,   309,   309,   311,   310,
-     313,   312,   314,   314,   315,   315,   315,   315,   315,   315,
-     315,   315,   315,   315,   315,   315,   315,   315,   315,   315,
-     315,   315,   315,   315,   317,   316,   319,   318,   321,   320,
-     323,   322,   325,   324,   327,   326,   328,   328,   328,   329,
-     330,   332,   331,   333,   333,   334,   334,   336,   335,   337,
-     337,   338,   338,   338,   338,   338,   338,   338,   338,   338,
-     338,   338,   338,   338,   338,   338,   338,   338,   340,   339,
-     342,   341,   343,   343,   344,   344,   346,   345,   348,   347,
-     349,   349,   350,   350,   351,   351,   351,   351,   351,   351,
-     351,   351,   351,   351,   352,   353,   354,   356,   355,   358,
-     357,   360,   359,   361,   363,   362,   364,   366,   365,   367,
-     367,   368,   368,   370,   369,   372,   371,   373,   373,   374,
-     374,   375,   375,   375,   375,   375,   375,   375,   375,   375,
-     376,   378,   377,   379,   380,   381,   382,   384,   383,   385,
-     385,   386,   386,   388,   387,   390,   389,   391,   391,   392,
-     392,   392,   392,   392,   392,   392,   394,   393,   396,   395,
-     398,   397,   400,   399,   401,   401,   402,   402,   404,   403,
-     406,   405,   407,   407,   408,   408,   408,   408,   408,   408,
-     408,   408,   408,   408,   408,   410,   409,   411,   413,   412,
-     414,   415,   417,   416,   418,   418,   419,   419,   421,   420,
-     423,   422,   424,   424,   425,   425,   426,   426,   426,   426,
-     426,   426,   426,   426,   426,   426,   426,   428,   427,   430,
-     429,   432,   431,   434,   433,   436,   435,   438,   437,   440,
-     439,   442,   441,   443,   443,   445,   444,   447,   446,   448,
-     448,   450,   449,   451,   451,   452,   452,   453,   453,   453,
-     453,   453,   453,   453,   454,   456,   455,   457,   459,   458,
-     460,   460,   461,   461,   461,   461,   461,   461,   461,   461,
-     461,   463,   462,   464,   464,   464,   465,   467,   466,   468,
-     469,   470,   472,   471,   473,   473,   474,   474,   474,   474,
-     474,   476,   475,   478,   477,   480,   479,   482,   481,   483,
-     483,   484,   484,   484,   484,   484,   484,   484,   484,   484,
-     484,   484,   484,   484,   484,   484,   484,   484,   484,   484,
-     485,   487,   486,   489,   488,   490,   492,   491,   493,   494,
-     496,   495,   497,   497,   499,   498,   500,   501,   502,   504,
-     503,   505,   505,   505,   505,   505,   507,   506,   509,   508,
-     511,   510,   513,   512,   515,   514,   517,   516,   519,   518,
-     521,   520,   522,   522,   523,   525,   524,   526,   526,   528,
-     527,   529,   529,   530,   530,   530,   530,   530,   530,   530,
-     531,   533,   532,   535,   534,   536,   536,   538,   537,   539,
-     539,   540,   540,   540,   540,   542,   541,   543,   544,   545
+       0,   172,   174,   173,   175,   173,   176,   173,   177,   173,
+     178,   173,   179,   173,   180,   173,   181,   173,   182,   173,
+     183,   173,   184,   173,   185,   173,   186,   173,   187,   173,
+     188,   173,   189,   189,   189,   189,   189,   189,   189,   190,
+     192,   191,   193,   194,   194,   195,   195,   197,   196,   198,
+     198,   199,   199,   201,   200,   202,   202,   203,   203,   204,
+     206,   205,   207,   207,   208,   208,   208,   208,   208,   208,
+     210,   209,   212,   211,   213,   213,   214,   214,   214,   214,
+     214,   214,   214,   214,   214,   214,   214,   214,   214,   214,
+     214,   214,   214,   214,   214,   214,   214,   214,   214,   214,
+     214,   214,   214,   214,   214,   215,   216,   217,   218,   219,
+     221,   220,   223,   222,   224,   224,   225,   225,   225,   225,
+     225,   227,   226,   228,   230,   229,   232,   231,   234,   233,
+     235,   235,   236,   236,   238,   237,   239,   239,   240,   240,
+     240,   240,   240,   240,   240,   240,   240,   240,   240,   240,
+     240,   240,   240,   240,   240,   240,   242,   241,   243,   243,
+     243,   243,   245,   244,   247,   246,   249,   248,   250,   252,
+     251,   253,   254,   255,   256,   257,   258,   259,   260,   262,
+     261,   263,   265,   264,   267,   266,   268,   268,   269,   271,
+     270,   273,   272,   274,   274,   275,   275,   276,   277,   279,
+     278,   280,   280,   281,   281,   281,   282,   283,   285,   284,
+     287,   286,   288,   288,   289,   289,   291,   290,   293,   292,
+     294,   294,   294,   295,   295,   297,   296,   299,   298,   301,
+     300,   302,   302,   303,   303,   303,   303,   303,   303,   304,
+     305,   306,   307,   308,   309,   311,   310,   312,   312,   313,
+     313,   315,   314,   317,   316,   318,   318,   319,   319,   319,
+     319,   319,   319,   319,   319,   319,   319,   319,   319,   319,
+     319,   319,   319,   319,   319,   319,   319,   321,   320,   323,
+     322,   325,   324,   327,   326,   329,   328,   331,   330,   332,
+     332,   332,   333,   334,   336,   335,   337,   337,   338,   338,
+     340,   339,   341,   341,   342,   342,   342,   342,   342,   342,
+     342,   342,   342,   342,   342,   342,   342,   342,   342,   342,
+     342,   344,   343,   346,   345,   347,   347,   348,   348,   350,
+     349,   352,   351,   353,   353,   354,   354,   355,   355,   355,
+     355,   355,   355,   355,   355,   355,   355,   356,   357,   358,
+     360,   359,   362,   361,   364,   363,   365,   367,   366,   368,
+     370,   369,   371,   371,   372,   372,   374,   373,   376,   375,
+     377,   377,   378,   378,   379,   379,   379,   379,   379,   379,
+     379,   379,   379,   380,   382,   381,   383,   384,   385,   386,
+     388,   387,   389,   389,   390,   390,   392,   391,   394,   393,
+     395,   395,   396,   396,   396,   396,   396,   396,   396,   398,
+     397,   400,   399,   402,   401,   404,   403,   405,   405,   406,
+     406,   408,   407,   410,   409,   411,   411,   412,   412,   412,
+     412,   412,   412,   412,   412,   412,   412,   412,   414,   413,
+     415,   417,   416,   418,   419,   421,   420,   422,   422,   423,
+     423,   425,   424,   427,   426,   428,   428,   429,   429,   430,
+     430,   430,   430,   430,   430,   430,   430,   430,   430,   430,
+     432,   431,   434,   433,   436,   435,   438,   437,   440,   439,
+     442,   441,   444,   443,   446,   445,   447,   447,   449,   448,
+     451,   450,   452,   452,   454,   453,   455,   455,   456,   456,
+     457,   457,   457,   457,   457,   457,   457,   458,   460,   459,
+     461,   463,   462,   464,   464,   465,   465,   465,   465,   465,
+     465,   465,   465,   465,   467,   466,   468,   468,   468,   469,
+     471,   470,   472,   473,   474,   476,   475,   477,   477,   478,
+     478,   478,   478,   478,   480,   479,   482,   481,   484,   483,
+     486,   485,   487,   487,   488,   488,   488,   488,   488,   488,
+     488,   488,   488,   488,   488,   488,   488,   488,   488,   488,
+     488,   488,   488,   489,   491,   490,   493,   492,   494,   496,
+     495,   497,   498,   500,   499,   501,   501,   503,   502,   504,
+     505,   506,   508,   507,   509,   509,   509,   509,   509,   511,
+     510,   513,   512,   515,   514,   517,   516,   519,   518,   521,
+     520,   523,   522,   524,   522,   526,   525,   527,   527,   528,
+     528,   530,   529,   532,   531,   534,   533,   535,   535,   536,
+     538,   537,   539,   539,   541,   540,   542,   542,   543,   543,
+     543,   543,   543,   543,   543,   544,   546,   545,   548,   547,
+     549,   549,   551,   550,   552,   552,   553,   553,   553,   553,
+     555,   554,   556,   557,   558
   };
 
   const unsigned char
@@ -4555,68 +4635,70 @@ namespace isc { namespace dhcp {
        0,     2,     0,     3,     0,     3,     0,     3,     0,     3,
        0,     3,     0,     3,     0,     3,     0,     3,     0,     3,
        0,     3,     0,     3,     0,     3,     0,     3,     0,     3,
-       1,     1,     1,     1,     1,     1,     1,     1,     0,     4,
-       1,     0,     1,     3,     5,     0,     4,     0,     1,     1,
-       3,     0,     4,     0,     1,     1,     3,     2,     0,     4,
-       1,     3,     1,     1,     1,     1,     1,     1,     0,     6,
+       0,     3,     1,     1,     1,     1,     1,     1,     1,     1,
+       0,     4,     1,     0,     1,     3,     5,     0,     4,     0,
+       1,     1,     3,     0,     4,     0,     1,     1,     3,     2,
        0,     4,     1,     3,     1,     1,     1,     1,     1,     1,
+       0,     6,     0,     4,     1,     3,     1,     1,     1,     1,
+       1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
+       1,     1,     1,     1,     1,     3,     3,     3,     3,     3,
+       0,     6,     0,     4,     1,     3,     1,     1,     1,     1,
+       1,     0,     4,     3,     0,     6,     0,     6,     0,     6,
+       0,     1,     1,     3,     0,     4,     1,     3,     1,     1,
        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
-       1,     1,     3,     3,     3,     3,     3,     0,     6,     0,
-       4,     1,     3,     1,     1,     1,     1,     1,     0,     4,
-       3,     0,     6,     0,     6,     0,     6,     0,     1,     1,
-       3,     0,     4,     1,     3,     1,     1,     1,     1,     1,
+       1,     1,     1,     1,     1,     1,     0,     4,     1,     1,
+       1,     1,     0,     4,     0,     4,     0,     4,     3,     0,
+       4,     3,     3,     3,     3,     3,     3,     3,     3,     0,
+       4,     3,     0,     4,     0,     6,     1,     3,     1,     0,
+       4,     0,     6,     1,     3,     1,     1,     1,     1,     0,
+       6,     1,     3,     1,     1,     1,     1,     1,     0,     6,
+       0,     6,     0,     1,     1,     3,     0,     4,     0,     4,
+       1,     3,     1,     1,     1,     0,     4,     0,     4,     0,
+       6,     1,     3,     1,     1,     1,     1,     1,     1,     3,
+       3,     3,     3,     3,     3,     0,     6,     0,     1,     1,
+       3,     0,     4,     0,     4,     1,     3,     1,     1,     1,
        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
-       1,     1,     1,     0,     4,     1,     1,     1,     1,     0,
-       4,     0,     4,     0,     4,     3,     0,     4,     3,     3,
-       3,     3,     3,     3,     3,     3,     0,     4,     3,     0,
-       4,     0,     6,     1,     3,     1,     0,     4,     0,     6,
-       1,     3,     1,     1,     1,     1,     0,     6,     1,     3,
-       1,     1,     1,     1,     1,     0,     6,     0,     6,     0,
-       1,     1,     3,     0,     4,     0,     4,     1,     3,     1,
-       1,     1,     0,     4,     0,     4,     0,     6,     1,     3,
-       1,     1,     1,     1,     1,     1,     3,     3,     3,     3,
-       3,     3,     0,     6,     0,     1,     1,     3,     0,     4,
+       1,     1,     1,     1,     1,     1,     1,     0,     4,     0,
+       4,     0,     4,     0,     4,     0,     4,     0,     4,     1,
+       1,     1,     3,     3,     0,     6,     0,     1,     1,     3,
        0,     4,     1,     3,     1,     1,     1,     1,     1,     1,
        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
-       1,     1,     1,     1,     0,     4,     0,     4,     0,     4,
-       0,     4,     0,     4,     0,     4,     1,     1,     1,     3,
-       3,     0,     6,     0,     1,     1,     3,     0,     4,     1,
-       3,     1,     1,     1,     1,     1,     1,     1,     1,     1,
-       1,     1,     1,     1,     1,     1,     1,     1,     0,     6,
-       0,     4,     0,     1,     1,     3,     0,     4,     0,     4,
+       1,     0,     6,     0,     4,     0,     1,     1,     3,     0,
+       4,     0,     4,     0,     1,     1,     3,     1,     1,     1,
+       1,     1,     1,     1,     1,     1,     1,     1,     3,     1,
+       0,     4,     0,     4,     0,     4,     1,     0,     4,     3,
+       0,     6,     0,     1,     1,     3,     0,     4,     0,     4,
        0,     1,     1,     3,     1,     1,     1,     1,     1,     1,
-       1,     1,     1,     1,     1,     3,     1,     0,     4,     0,
-       4,     0,     4,     1,     0,     4,     3,     0,     6,     0,
-       1,     1,     3,     0,     4,     0,     4,     0,     1,     1,
-       3,     1,     1,     1,     1,     1,     1,     1,     1,     1,
-       1,     0,     4,     1,     1,     3,     3,     0,     6,     0,
-       1,     1,     3,     0,     4,     0,     4,     1,     3,     1,
-       1,     1,     1,     1,     1,     1,     0,     4,     0,     4,
-       0,     4,     0,     6,     0,     1,     1,     3,     0,     4,
+       1,     1,     1,     1,     0,     4,     1,     1,     3,     3,
+       0,     6,     0,     1,     1,     3,     0,     4,     0,     4,
+       1,     3,     1,     1,     1,     1,     1,     1,     1,     0,
+       4,     0,     4,     0,     4,     0,     6,     0,     1,     1,
+       3,     0,     4,     0,     4,     1,     3,     1,     1,     1,
+       1,     1,     1,     1,     1,     1,     1,     1,     0,     4,
+       3,     0,     4,     3,     3,     0,     6,     0,     1,     1,
+       3,     0,     4,     0,     4,     0,     1,     1,     3,     1,
+       1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
+       0,     4,     0,     4,     0,     4,     0,     4,     0,     4,
+       0,     4,     0,     4,     0,     6,     1,     1,     0,     4,
+       0,     6,     1,     3,     0,     4,     0,     1,     1,     3,
+       1,     1,     1,     1,     1,     1,     1,     1,     0,     4,
+       3,     0,     6,     1,     3,     1,     1,     1,     1,     1,
+       1,     1,     1,     1,     0,     4,     1,     1,     1,     3,
+       0,     4,     3,     3,     3,     0,     6,     1,     3,     1,
+       1,     1,     1,     1,     0,     4,     0,     4,     0,     6,
        0,     4,     1,     3,     1,     1,     1,     1,     1,     1,
-       1,     1,     1,     1,     1,     0,     4,     3,     0,     4,
-       3,     3,     0,     6,     0,     1,     1,     3,     0,     4,
-       0,     4,     0,     1,     1,     3,     1,     1,     1,     1,
-       1,     1,     1,     1,     1,     1,     1,     0,     4,     0,
-       4,     0,     4,     0,     4,     0,     4,     0,     4,     0,
-       4,     0,     6,     1,     1,     0,     4,     0,     6,     1,
-       3,     0,     4,     0,     1,     1,     3,     1,     1,     1,
-       1,     1,     1,     1,     1,     0,     4,     3,     0,     6,
-       1,     3,     1,     1,     1,     1,     1,     1,     1,     1,
-       1,     0,     4,     1,     1,     1,     3,     0,     4,     3,
-       3,     3,     0,     6,     1,     3,     1,     1,     1,     1,
-       1,     0,     4,     0,     4,     0,     6,     0,     4,     1,
-       3,     1,     1,     1,     1,     1,     1,     1,     1,     1,
        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
-       3,     0,     4,     0,     4,     3,     0,     4,     3,     3,
-       0,     4,     1,     1,     0,     4,     3,     3,     3,     0,
-       4,     1,     1,     1,     1,     1,     0,     4,     0,     4,
-       0,     4,     0,     4,     0,     4,     0,     4,     0,     6,
-       0,     4,     1,     3,     1,     0,     6,     1,     3,     0,
-       4,     1,     3,     1,     1,     1,     1,     1,     1,     1,
-       3,     0,     4,     0,     6,     1,     3,     0,     4,     1,
-       3,     1,     1,     1,     1,     0,     4,     3,     3,     3
+       1,     1,     1,     3,     0,     4,     0,     4,     3,     0,
+       4,     3,     3,     0,     4,     1,     1,     0,     4,     3,
+       3,     3,     0,     4,     1,     1,     1,     1,     1,     0,
+       4,     0,     4,     0,     4,     0,     4,     0,     4,     0,
+       4,     0,     4,     0,     6,     0,     4,     1,     3,     1,
+       1,     0,     6,     0,     6,     0,     4,     1,     3,     1,
+       0,     6,     1,     3,     0,     4,     1,     3,     1,     1,
+       1,     1,     1,     1,     1,     3,     0,     4,     0,     6,
+       1,     3,     0,     4,     1,     3,     1,     1,     1,     1,
+       0,     4,     3,     3,     3
   };
 
 
@@ -4627,13 +4709,13 @@ namespace isc { namespace dhcp {
   const Dhcp6Parser::yytname_[] =
   {
   "\"end of file\"", "error", "$undefined", "\",\"", "\":\"", "\"[\"",
-  "\"]\"", "\"{\"", "\"}\"", "\"null\"", "\"Dhcp6\"",
-  "\"interfaces-config\"", "\"interfaces\"", "\"re-detect\"",
-  "\"lease-database\"", "\"hosts-database\"", "\"hosts-databases\"",
-  "\"type\"", "\"memfile\"", "\"mysql\"", "\"postgresql\"", "\"cql\"",
-  "\"user\"", "\"password\"", "\"host\"", "\"port\"", "\"persist\"",
-  "\"lfc-interval\"", "\"readonly\"", "\"connect-timeout\"",
-  "\"contact-points\"", "\"max-reconnect-tries\"",
+  "\"]\"", "\"{\"", "\"}\"", "\"null\"", "\"Dhcp6\"", "\"config-control\"",
+  "\"config-databases\"", "\"interfaces-config\"", "\"interfaces\"",
+  "\"re-detect\"", "\"lease-database\"", "\"hosts-database\"",
+  "\"hosts-databases\"", "\"type\"", "\"memfile\"", "\"mysql\"",
+  "\"postgresql\"", "\"cql\"", "\"user\"", "\"password\"", "\"host\"",
+  "\"port\"", "\"persist\"", "\"lfc-interval\"", "\"readonly\"",
+  "\"connect-timeout\"", "\"contact-points\"", "\"max-reconnect-tries\"",
   "\"reconnect-wait-time\"", "\"keyspace\"", "\"request-timeout\"",
   "\"tcp-keepalive\"", "\"tcp-nodelay\"", "\"preferred-lifetime\"",
   "\"valid-lifetime\"", "\"renew-timer\"", "\"rebind-timer\"",
@@ -4673,168 +4755,173 @@ namespace isc { namespace dhcp {
   "SUB_DHCP6", "SUB_INTERFACES6", "SUB_SUBNET6", "SUB_POOL6",
   "SUB_PD_POOL", "SUB_RESERVATION", "SUB_OPTION_DEFS", "SUB_OPTION_DEF",
   "SUB_OPTION_DATA", "SUB_HOOKS_LIBRARY", "SUB_DHCP_DDNS", "SUB_LOGGING",
-  "\"constant string\"", "\"integer\"", "\"floating point\"",
-  "\"boolean\"", "$accept", "start", "$@1", "$@2", "$@3", "$@4", "$@5",
-  "$@6", "$@7", "$@8", "$@9", "$@10", "$@11", "$@12", "$@13", "$@14",
-  "value", "sub_json", "map2", "$@15", "map_value", "map_content",
-  "not_empty_map", "list_generic", "$@16", "list_content",
-  "not_empty_list", "list_strings", "$@17", "list_strings_content",
-  "not_empty_list_strings", "unknown_map_entry", "syntax_map", "$@18",
-  "global_objects", "global_object", "dhcp6_object", "$@19", "sub_dhcp6",
-  "$@20", "global_params", "global_param", "preferred_lifetime",
+  "SUB_CONFIG_CONTROL", "\"constant string\"", "\"integer\"",
+  "\"floating point\"", "\"boolean\"", "$accept", "start", "$@1", "$@2",
+  "$@3", "$@4", "$@5", "$@6", "$@7", "$@8", "$@9", "$@10", "$@11", "$@12",
+  "$@13", "$@14", "$@15", "value", "sub_json", "map2", "$@16", "map_value",
+  "map_content", "not_empty_map", "list_generic", "$@17", "list_content",
+  "not_empty_list", "list_strings", "$@18", "list_strings_content",
+  "not_empty_list_strings", "unknown_map_entry", "syntax_map", "$@19",
+  "global_objects", "global_object", "dhcp6_object", "$@20", "sub_dhcp6",
+  "$@21", "global_params", "global_param", "preferred_lifetime",
   "valid_lifetime", "renew_timer", "rebind_timer",
-  "decline_probation_period", "interfaces_config", "$@21",
-  "sub_interfaces6", "$@22", "interfaces_config_params",
-  "interfaces_config_param", "interfaces_list", "$@23", "re_detect",
-  "lease_database", "$@24", "hosts_database", "$@25", "hosts_databases",
-  "$@26", "database_list", "not_empty_database_list", "database", "$@27",
-  "database_map_params", "database_map_param", "database_type", "$@28",
-  "db_type", "user", "$@29", "password", "$@30", "host", "$@31", "port",
-  "name", "$@32", "persist", "lfc_interval", "readonly", "connect_timeout",
+  "decline_probation_period", "interfaces_config", "$@22",
+  "sub_interfaces6", "$@23", "interfaces_config_params",
+  "interfaces_config_param", "interfaces_list", "$@24", "re_detect",
+  "lease_database", "$@25", "hosts_database", "$@26", "hosts_databases",
+  "$@27", "database_list", "not_empty_database_list", "database", "$@28",
+  "database_map_params", "database_map_param", "database_type", "$@29",
+  "db_type", "user", "$@30", "password", "$@31", "host", "$@32", "port",
+  "name", "$@33", "persist", "lfc_interval", "readonly", "connect_timeout",
   "reconnect_wait_time", "request_timeout", "tcp_keepalive", "tcp_nodelay",
-  "contact_points", "$@33", "max_reconnect_tries", "keyspace", "$@34",
-  "sanity_checks", "$@35", "sanity_checks_params", "sanity_checks_param",
-  "lease_checks", "$@36", "mac_sources", "$@37", "mac_sources_list",
+  "contact_points", "$@34", "max_reconnect_tries", "keyspace", "$@35",
+  "sanity_checks", "$@36", "sanity_checks_params", "sanity_checks_param",
+  "lease_checks", "$@37", "mac_sources", "$@38", "mac_sources_list",
   "mac_sources_value", "duid_id", "string_id",
-  "host_reservation_identifiers", "$@38",
+  "host_reservation_identifiers", "$@39",
   "host_reservation_identifiers_list", "host_reservation_identifier",
-  "hw_address_id", "flex_id", "relay_supplied_options", "$@39",
-  "hooks_libraries", "$@40", "hooks_libraries_list",
-  "not_empty_hooks_libraries_list", "hooks_library", "$@41",
-  "sub_hooks_library", "$@42", "hooks_params", "hooks_param", "library",
-  "$@43", "parameters", "$@44", "expired_leases_processing", "$@45",
+  "hw_address_id", "flex_id", "relay_supplied_options", "$@40",
+  "hooks_libraries", "$@41", "hooks_libraries_list",
+  "not_empty_hooks_libraries_list", "hooks_library", "$@42",
+  "sub_hooks_library", "$@43", "hooks_params", "hooks_param", "library",
+  "$@44", "parameters", "$@45", "expired_leases_processing", "$@46",
   "expired_leases_params", "expired_leases_param",
   "reclaim_timer_wait_time", "flush_reclaimed_timer_wait_time",
   "hold_reclaimed_time", "max_reclaim_leases", "max_reclaim_time",
-  "unwarned_reclaim_cycles", "subnet6_list", "$@46",
-  "subnet6_list_content", "not_empty_subnet6_list", "subnet6", "$@47",
-  "sub_subnet6", "$@48", "subnet6_params", "subnet6_param", "subnet",
-  "$@49", "interface", "$@50", "interface_id", "$@51", "client_class",
-  "$@52", "require_client_classes", "$@53", "reservation_mode", "$@54",
-  "hr_mode", "id", "rapid_commit", "shared_networks", "$@55",
+  "unwarned_reclaim_cycles", "subnet6_list", "$@47",
+  "subnet6_list_content", "not_empty_subnet6_list", "subnet6", "$@48",
+  "sub_subnet6", "$@49", "subnet6_params", "subnet6_param", "subnet",
+  "$@50", "interface", "$@51", "interface_id", "$@52", "client_class",
+  "$@53", "require_client_classes", "$@54", "reservation_mode", "$@55",
+  "hr_mode", "id", "rapid_commit", "shared_networks", "$@56",
   "shared_networks_content", "shared_networks_list", "shared_network",
-  "$@56", "shared_network_params", "shared_network_param",
-  "option_def_list", "$@57", "sub_option_def_list", "$@58",
+  "$@57", "shared_network_params", "shared_network_param",
+  "option_def_list", "$@58", "sub_option_def_list", "$@59",
   "option_def_list_content", "not_empty_option_def_list",
-  "option_def_entry", "$@59", "sub_option_def", "$@60",
+  "option_def_entry", "$@60", "sub_option_def", "$@61",
   "option_def_params", "not_empty_option_def_params", "option_def_param",
-  "option_def_name", "code", "option_def_code", "option_def_type", "$@61",
-  "option_def_record_types", "$@62", "space", "$@63", "option_def_space",
-  "option_def_encapsulate", "$@64", "option_def_array", "option_data_list",
-  "$@65", "option_data_list_content", "not_empty_option_data_list",
-  "option_data_entry", "$@66", "sub_option_data", "$@67",
+  "option_def_name", "code", "option_def_code", "option_def_type", "$@62",
+  "option_def_record_types", "$@63", "space", "$@64", "option_def_space",
+  "option_def_encapsulate", "$@65", "option_def_array", "option_data_list",
+  "$@66", "option_data_list_content", "not_empty_option_data_list",
+  "option_data_entry", "$@67", "sub_option_data", "$@68",
   "option_data_params", "not_empty_option_data_params",
-  "option_data_param", "option_data_name", "option_data_data", "$@68",
+  "option_data_param", "option_data_name", "option_data_data", "$@69",
   "option_data_code", "option_data_space", "option_data_csv_format",
-  "option_data_always_send", "pools_list", "$@69", "pools_list_content",
-  "not_empty_pools_list", "pool_list_entry", "$@70", "sub_pool6", "$@71",
-  "pool_params", "pool_param", "pool_entry", "$@72", "user_context",
-  "$@73", "comment", "$@74", "pd_pools_list", "$@75",
+  "option_data_always_send", "pools_list", "$@70", "pools_list_content",
+  "not_empty_pools_list", "pool_list_entry", "$@71", "sub_pool6", "$@72",
+  "pool_params", "pool_param", "pool_entry", "$@73", "user_context",
+  "$@74", "comment", "$@75", "pd_pools_list", "$@76",
   "pd_pools_list_content", "not_empty_pd_pools_list", "pd_pool_entry",
-  "$@76", "sub_pd_pool", "$@77", "pd_pool_params", "pd_pool_param",
-  "pd_prefix", "$@78", "pd_prefix_len", "excluded_prefix", "$@79",
-  "excluded_prefix_len", "pd_delegated_len", "reservations", "$@80",
+  "$@77", "sub_pd_pool", "$@78", "pd_pool_params", "pd_pool_param",
+  "pd_prefix", "$@79", "pd_prefix_len", "excluded_prefix", "$@80",
+  "excluded_prefix_len", "pd_delegated_len", "reservations", "$@81",
   "reservations_list", "not_empty_reservations_list", "reservation",
-  "$@81", "sub_reservation", "$@82", "reservation_params",
+  "$@82", "sub_reservation", "$@83", "reservation_params",
   "not_empty_reservation_params", "reservation_param", "ip_addresses",
-  "$@83", "prefixes", "$@84", "duid", "$@85", "hw_address", "$@86",
-  "hostname", "$@87", "flex_id_value", "$@88",
-  "reservation_client_classes", "$@89", "relay", "$@90", "relay_map",
-  "ip_address", "$@91", "client_classes", "$@92", "client_classes_list",
-  "client_class_entry", "$@93", "client_class_params",
+  "$@84", "prefixes", "$@85", "duid", "$@86", "hw_address", "$@87",
+  "hostname", "$@88", "flex_id_value", "$@89",
+  "reservation_client_classes", "$@90", "relay", "$@91", "relay_map",
+  "ip_address", "$@92", "client_classes", "$@93", "client_classes_list",
+  "client_class_entry", "$@94", "client_class_params",
   "not_empty_client_class_params", "client_class_param",
-  "client_class_name", "client_class_test", "$@94", "only_if_required",
-  "server_id", "$@95", "server_id_params", "server_id_param",
-  "server_id_type", "$@96", "duid_type", "htype", "identifier", "$@97",
-  "time", "enterprise_id", "dhcp4o6_port", "control_socket", "$@98",
-  "control_socket_params", "control_socket_param", "socket_type", "$@99",
-  "socket_name", "$@100", "dhcp_ddns", "$@101", "sub_dhcp_ddns", "$@102",
+  "client_class_name", "client_class_test", "$@95", "only_if_required",
+  "server_id", "$@96", "server_id_params", "server_id_param",
+  "server_id_type", "$@97", "duid_type", "htype", "identifier", "$@98",
+  "time", "enterprise_id", "dhcp4o6_port", "control_socket", "$@99",
+  "control_socket_params", "control_socket_param", "socket_type", "$@100",
+  "socket_name", "$@101", "dhcp_ddns", "$@102", "sub_dhcp_ddns", "$@103",
   "dhcp_ddns_params", "dhcp_ddns_param", "enable_updates",
-  "qualifying_suffix", "$@103", "server_ip", "$@104", "server_port",
-  "sender_ip", "$@105", "sender_port", "max_queue_size", "ncr_protocol",
-  "$@106", "ncr_protocol_value", "ncr_format", "$@107",
+  "qualifying_suffix", "$@104", "server_ip", "$@105", "server_port",
+  "sender_ip", "$@106", "sender_port", "max_queue_size", "ncr_protocol",
+  "$@107", "ncr_protocol_value", "ncr_format", "$@108",
   "always_include_fqdn", "override_no_update", "override_client_update",
-  "replace_client_name", "$@108", "replace_client_name_value",
-  "generated_prefix", "$@109", "hostname_char_set", "$@110",
-  "hostname_char_replacement", "$@111", "dhcp4_json_object", "$@112",
-  "dhcpddns_json_object", "$@113", "control_agent_json_object", "$@114",
-  "logging_object", "$@115", "sub_logging", "$@116", "logging_params",
-  "logging_param", "loggers", "$@117", "loggers_entries", "logger_entry",
-  "$@118", "logger_params", "logger_param", "debuglevel", "severity",
-  "$@119", "output_options_list", "$@120", "output_options_list_content",
-  "output_entry", "$@121", "output_params_list", "output_params", "output",
-  "$@122", "flush", "maxsize", "maxver", YY_NULLPTR
+  "replace_client_name", "$@109", "replace_client_name_value",
+  "generated_prefix", "$@110", "hostname_char_set", "$@111",
+  "hostname_char_replacement", "$@112", "dhcp4_json_object", "$@113",
+  "dhcpddns_json_object", "$@114", "control_agent_json_object", "$@115",
+  "config_control", "$@116", "$@117", "sub_config_control", "$@118",
+  "config_control_params", "config_control_param", "config_databases",
+  "$@119", "logging_object", "$@120", "sub_logging", "$@121",
+  "logging_params", "logging_param", "loggers", "$@122", "loggers_entries",
+  "logger_entry", "$@123", "logger_params", "logger_param", "debuglevel",
+  "severity", "$@124", "output_options_list", "$@125",
+  "output_options_list_content", "output_entry", "$@126",
+  "output_params_list", "output_params", "output", "$@127", "flush",
+  "maxsize", "maxver", YY_NULLPTR
   };
 
 #if PARSER6_DEBUG
   const unsigned short int
   Dhcp6Parser::yyrline_[] =
   {
-       0,   251,   251,   251,   252,   252,   253,   253,   254,   254,
-     255,   255,   256,   256,   257,   257,   258,   258,   259,   259,
-     260,   260,   261,   261,   262,   262,   263,   263,   264,   264,
-     272,   273,   274,   275,   276,   277,   278,   281,   286,   286,
-     297,   300,   301,   304,   308,   315,   315,   322,   323,   326,
-     330,   337,   337,   344,   345,   348,   352,   363,   373,   373,
-     388,   389,   393,   394,   395,   396,   397,   398,   401,   401,
-     416,   416,   425,   426,   431,   432,   433,   434,   435,   436,
-     437,   438,   439,   440,   441,   442,   443,   444,   445,   446,
-     447,   448,   449,   450,   451,   452,   453,   454,   455,   456,
-     457,   458,   461,   466,   471,   476,   481,   486,   486,   497,
-     497,   506,   507,   510,   511,   512,   513,   514,   517,   517,
-     527,   533,   533,   545,   545,   557,   557,   567,   568,   571,
-     572,   575,   575,   585,   586,   589,   590,   591,   592,   593,
-     594,   595,   596,   597,   598,   599,   600,   601,   602,   603,
-     604,   605,   606,   609,   609,   616,   617,   618,   619,   622,
-     622,   630,   630,   638,   638,   646,   651,   651,   659,   664,
-     669,   674,   679,   684,   689,   694,   699,   699,   707,   712,
-     712,   720,   720,   730,   731,   733,   735,   735,   753,   753,
-     763,   764,   767,   768,   771,   776,   781,   781,   791,   792,
-     795,   796,   797,   800,   805,   812,   812,   822,   822,   832,
-     833,   836,   837,   840,   840,   850,   850,   860,   861,   862,
-     865,   866,   869,   869,   877,   877,   885,   885,   896,   897,
-     900,   901,   902,   903,   904,   905,   908,   913,   918,   923,
-     928,   933,   941,   941,   954,   955,   958,   959,   966,   966,
-     992,   992,  1003,  1004,  1008,  1009,  1010,  1011,  1012,  1013,
-    1014,  1015,  1016,  1017,  1018,  1019,  1020,  1021,  1022,  1023,
-    1024,  1025,  1026,  1027,  1030,  1030,  1038,  1038,  1046,  1046,
-    1054,  1054,  1062,  1062,  1072,  1072,  1079,  1080,  1081,  1084,
-    1089,  1097,  1097,  1108,  1109,  1113,  1114,  1117,  1117,  1125,
-    1126,  1129,  1130,  1131,  1132,  1133,  1134,  1135,  1136,  1137,
-    1138,  1139,  1140,  1141,  1142,  1143,  1144,  1145,  1152,  1152,
-    1165,  1165,  1174,  1175,  1178,  1179,  1184,  1184,  1199,  1199,
-    1213,  1214,  1217,  1218,  1221,  1222,  1223,  1224,  1225,  1226,
-    1227,  1228,  1229,  1230,  1233,  1235,  1240,  1242,  1242,  1250,
-    1250,  1258,  1258,  1266,  1268,  1268,  1276,  1285,  1285,  1297,
-    1298,  1303,  1304,  1309,  1309,  1321,  1321,  1333,  1334,  1339,
-    1340,  1345,  1346,  1347,  1348,  1349,  1350,  1351,  1352,  1353,
-    1356,  1358,  1358,  1366,  1368,  1370,  1375,  1383,  1383,  1395,
-    1396,  1399,  1400,  1403,  1403,  1413,  1413,  1422,  1423,  1426,
-    1427,  1428,  1429,  1430,  1431,  1432,  1435,  1435,  1443,  1443,
-    1468,  1468,  1498,  1498,  1510,  1511,  1514,  1515,  1518,  1518,
-    1530,  1530,  1542,  1543,  1546,  1547,  1548,  1549,  1550,  1551,
-    1552,  1553,  1554,  1555,  1556,  1559,  1559,  1567,  1572,  1572,
-    1580,  1585,  1593,  1593,  1603,  1604,  1607,  1608,  1611,  1611,
-    1620,  1620,  1629,  1630,  1633,  1634,  1638,  1639,  1640,  1641,
-    1642,  1643,  1644,  1645,  1646,  1647,  1648,  1651,  1651,  1661,
-    1661,  1671,  1671,  1679,  1679,  1687,  1687,  1695,  1695,  1703,
-    1703,  1716,  1716,  1726,  1727,  1730,  1730,  1741,  1741,  1751,
-    1752,  1755,  1755,  1765,  1766,  1769,  1770,  1773,  1774,  1775,
-    1776,  1777,  1778,  1779,  1782,  1784,  1784,  1792,  1800,  1800,
-    1812,  1813,  1816,  1817,  1818,  1819,  1820,  1821,  1822,  1823,
-    1824,  1827,  1827,  1834,  1835,  1836,  1839,  1844,  1844,  1852,
-    1857,  1864,  1871,  1871,  1881,  1882,  1885,  1886,  1887,  1888,
-    1889,  1892,  1892,  1900,  1900,  1910,  1910,  1922,  1922,  1932,
-    1933,  1936,  1937,  1938,  1939,  1940,  1941,  1942,  1943,  1944,
-    1945,  1946,  1947,  1948,  1949,  1950,  1951,  1952,  1953,  1954,
-    1957,  1962,  1962,  1970,  1970,  1978,  1983,  1983,  1991,  1996,
-    2001,  2001,  2009,  2010,  2013,  2013,  2021,  2026,  2031,  2036,
-    2036,  2044,  2047,  2050,  2053,  2056,  2062,  2062,  2070,  2070,
-    2078,  2078,  2088,  2088,  2095,  2095,  2102,  2102,  2115,  2115,
-    2125,  2125,  2136,  2137,  2141,  2145,  2145,  2157,  2158,  2162,
-    2162,  2170,  2171,  2174,  2175,  2176,  2177,  2178,  2179,  2180,
-    2183,  2188,  2188,  2196,  2196,  2206,  2207,  2210,  2210,  2218,
-    2219,  2222,  2223,  2224,  2225,  2228,  2228,  2236,  2241,  2246
+       0,   254,   254,   254,   255,   255,   256,   256,   257,   257,
+     258,   258,   259,   259,   260,   260,   261,   261,   262,   262,
+     263,   263,   264,   264,   265,   265,   266,   266,   267,   267,
+     268,   268,   276,   277,   278,   279,   280,   281,   282,   285,
+     290,   290,   301,   304,   305,   308,   312,   319,   319,   326,
+     327,   330,   334,   341,   341,   348,   349,   352,   356,   367,
+     377,   377,   392,   393,   397,   398,   399,   400,   401,   402,
+     405,   405,   420,   420,   429,   430,   435,   436,   437,   438,
+     439,   440,   441,   442,   443,   444,   445,   446,   447,   448,
+     449,   450,   451,   452,   453,   454,   455,   456,   457,   458,
+     459,   460,   461,   462,   463,   466,   471,   476,   481,   486,
+     491,   491,   502,   502,   511,   512,   515,   516,   517,   518,
+     519,   522,   522,   532,   538,   538,   550,   550,   562,   562,
+     572,   573,   576,   577,   580,   580,   590,   591,   594,   595,
+     596,   597,   598,   599,   600,   601,   602,   603,   604,   605,
+     606,   607,   608,   609,   610,   611,   614,   614,   621,   622,
+     623,   624,   627,   627,   635,   635,   643,   643,   651,   656,
+     656,   664,   669,   674,   679,   684,   689,   694,   699,   704,
+     704,   712,   717,   717,   725,   725,   735,   736,   738,   740,
+     740,   758,   758,   768,   769,   772,   773,   776,   781,   786,
+     786,   796,   797,   800,   801,   802,   805,   810,   817,   817,
+     827,   827,   837,   838,   841,   842,   845,   845,   855,   855,
+     865,   866,   867,   870,   871,   874,   874,   882,   882,   890,
+     890,   901,   902,   905,   906,   907,   908,   909,   910,   913,
+     918,   923,   928,   933,   938,   946,   946,   959,   960,   963,
+     964,   971,   971,   997,   997,  1008,  1009,  1013,  1014,  1015,
+    1016,  1017,  1018,  1019,  1020,  1021,  1022,  1023,  1024,  1025,
+    1026,  1027,  1028,  1029,  1030,  1031,  1032,  1035,  1035,  1043,
+    1043,  1051,  1051,  1059,  1059,  1067,  1067,  1077,  1077,  1084,
+    1085,  1086,  1089,  1094,  1102,  1102,  1113,  1114,  1118,  1119,
+    1122,  1122,  1130,  1131,  1134,  1135,  1136,  1137,  1138,  1139,
+    1140,  1141,  1142,  1143,  1144,  1145,  1146,  1147,  1148,  1149,
+    1150,  1157,  1157,  1170,  1170,  1179,  1180,  1183,  1184,  1189,
+    1189,  1204,  1204,  1218,  1219,  1222,  1223,  1226,  1227,  1228,
+    1229,  1230,  1231,  1232,  1233,  1234,  1235,  1238,  1240,  1245,
+    1247,  1247,  1255,  1255,  1263,  1263,  1271,  1273,  1273,  1281,
+    1290,  1290,  1302,  1303,  1308,  1309,  1314,  1314,  1326,  1326,
+    1338,  1339,  1344,  1345,  1350,  1351,  1352,  1353,  1354,  1355,
+    1356,  1357,  1358,  1361,  1363,  1363,  1371,  1373,  1375,  1380,
+    1388,  1388,  1400,  1401,  1404,  1405,  1408,  1408,  1418,  1418,
+    1427,  1428,  1431,  1432,  1433,  1434,  1435,  1436,  1437,  1440,
+    1440,  1448,  1448,  1473,  1473,  1503,  1503,  1515,  1516,  1519,
+    1520,  1523,  1523,  1535,  1535,  1547,  1548,  1551,  1552,  1553,
+    1554,  1555,  1556,  1557,  1558,  1559,  1560,  1561,  1564,  1564,
+    1572,  1577,  1577,  1585,  1590,  1598,  1598,  1608,  1609,  1612,
+    1613,  1616,  1616,  1625,  1625,  1634,  1635,  1638,  1639,  1643,
+    1644,  1645,  1646,  1647,  1648,  1649,  1650,  1651,  1652,  1653,
+    1656,  1656,  1666,  1666,  1676,  1676,  1684,  1684,  1692,  1692,
+    1700,  1700,  1708,  1708,  1721,  1721,  1731,  1732,  1735,  1735,
+    1746,  1746,  1756,  1757,  1760,  1760,  1770,  1771,  1774,  1775,
+    1778,  1779,  1780,  1781,  1782,  1783,  1784,  1787,  1789,  1789,
+    1797,  1805,  1805,  1817,  1818,  1821,  1822,  1823,  1824,  1825,
+    1826,  1827,  1828,  1829,  1832,  1832,  1839,  1840,  1841,  1844,
+    1849,  1849,  1857,  1862,  1869,  1876,  1876,  1886,  1887,  1890,
+    1891,  1892,  1893,  1894,  1897,  1897,  1905,  1905,  1915,  1915,
+    1927,  1927,  1937,  1938,  1941,  1942,  1943,  1944,  1945,  1946,
+    1947,  1948,  1949,  1950,  1951,  1952,  1953,  1954,  1955,  1956,
+    1957,  1958,  1959,  1962,  1967,  1967,  1975,  1975,  1983,  1988,
+    1988,  1996,  2001,  2006,  2006,  2014,  2015,  2018,  2018,  2026,
+    2031,  2036,  2041,  2041,  2049,  2052,  2055,  2058,  2061,  2067,
+    2067,  2075,  2075,  2083,  2083,  2093,  2093,  2100,  2100,  2107,
+    2107,  2116,  2116,  2125,  2125,  2136,  2136,  2146,  2147,  2151,
+    2152,  2155,  2155,  2170,  2170,  2180,  2180,  2191,  2192,  2196,
+    2200,  2200,  2212,  2213,  2217,  2217,  2225,  2226,  2229,  2230,
+    2231,  2232,  2233,  2234,  2235,  2238,  2243,  2243,  2251,  2251,
+    2261,  2262,  2265,  2265,  2273,  2274,  2277,  2278,  2279,  2280,
+    2283,  2283,  2291,  2296,  2301
   };
 
   // Print the state stack on the debug stream.
@@ -4847,18 +4934,18 @@ namespace isc { namespace dhcp {
            i_end = yystack_.end ();
          i != i_end; ++i)
       *yycdebug_ << ' ' << i->state;
-    *yycdebug_ << '\n';
+    *yycdebug_ << std::endl;
   }
 
   // Report on the debug stream that the rule \a yyrule is going to be reduced.
   void
   Dhcp6Parser::yy_reduce_print_ (int yyrule)
   {
-    unsigned yylno = yyrline_[yyrule];
+    unsigned int yylno = yyrline_[yyrule];
     int yynrhs = yyr2_[yyrule];
     // Print the symbols being reduced, and their result.
     *yycdebug_ << "Reducing stack by rule " << yyrule - 1
-               << " (line " << yylno << "):\n";
+               << " (line " << yylno << "):" << std::endl;
     // The symbols being reduced.
     for (int yyi = 0; yyi < yynrhs; yyi++)
       YY_SYMBOL_PRINT ("   $" << yyi + 1 << " =",
@@ -4867,10 +4954,10 @@ namespace isc { namespace dhcp {
 #endif // PARSER6_DEBUG
 
 
-#line 14 "dhcp6_parser.yy" // lalr1.cc:1163
+#line 14 "dhcp6_parser.yy" // lalr1.cc:1167
 } } // isc::dhcp
-#line 4873 "dhcp6_parser.cc" // lalr1.cc:1163
-#line 2251 "dhcp6_parser.yy" // lalr1.cc:1164
+#line 4960 "dhcp6_parser.cc" // lalr1.cc:1167
+#line 2306 "dhcp6_parser.yy" // lalr1.cc:1168
 
 
 void
index c144122950006b63910d2996688762ddf6d843b6..6fdf08f6e520542303232f664b3454683a2adbe4 100644 (file)
@@ -1,8 +1,8 @@
-// A Bison parser, made by GNU Bison 3.0.5.
+// A Bison parser, made by GNU Bison 3.0.4.
 
 // Skeleton interface for Bison LALR(1) parsers in C++
 
-// Copyright (C) 2002-2015, 2018 Free Software Foundation, Inc.
+// Copyright (C) 2002-2015 Free Software Foundation, Inc.
 
 // This program is free software: you can redistribute it and/or modify
 // it under the terms of the GNU General Public License as published by
@@ -40,7 +40,7 @@
 #ifndef YY_PARSER6_DHCP6_PARSER_H_INCLUDED
 # define YY_PARSER6_DHCP6_PARSER_H_INCLUDED
 // //                    "%code requires" blocks.
-#line 17 "dhcp6_parser.yy" // lalr1.cc:379
+#line 17 "dhcp6_parser.yy" // lalr1.cc:377
 
 #include <string>
 #include <cc/data.h>
@@ -52,7 +52,7 @@ using namespace isc::dhcp;
 using namespace isc::data;
 using namespace std;
 
-#line 56 "dhcp6_parser.h" // lalr1.cc:379
+#line 56 "dhcp6_parser.h" // lalr1.cc:377
 
 # include <cassert>
 # include <cstdlib> // std::abort
@@ -135,9 +135,9 @@ using namespace std;
 # endif /* ! defined YYDEBUG */
 #endif  /* ! defined PARSER6_DEBUG */
 
-#line 14 "dhcp6_parser.yy" // lalr1.cc:379
+#line 14 "dhcp6_parser.yy" // lalr1.cc:377
 namespace isc { namespace dhcp {
-#line 141 "dhcp6_parser.h" // lalr1.cc:379
+#line 141 "dhcp6_parser.h" // lalr1.cc:377
 
 
 
@@ -355,164 +355,167 @@ namespace isc { namespace dhcp {
         TOKEN_RCURLY_BRACKET = 263,
         TOKEN_NULL_TYPE = 264,
         TOKEN_DHCP6 = 265,
-        TOKEN_INTERFACES_CONFIG = 266,
-        TOKEN_INTERFACES = 267,
-        TOKEN_RE_DETECT = 268,
-        TOKEN_LEASE_DATABASE = 269,
-        TOKEN_HOSTS_DATABASE = 270,
-        TOKEN_HOSTS_DATABASES = 271,
-        TOKEN_TYPE = 272,
-        TOKEN_MEMFILE = 273,
-        TOKEN_MYSQL = 274,
-        TOKEN_POSTGRESQL = 275,
-        TOKEN_CQL = 276,
-        TOKEN_USER = 277,
-        TOKEN_PASSWORD = 278,
-        TOKEN_HOST = 279,
-        TOKEN_PORT = 280,
-        TOKEN_PERSIST = 281,
-        TOKEN_LFC_INTERVAL = 282,
-        TOKEN_READONLY = 283,
-        TOKEN_CONNECT_TIMEOUT = 284,
-        TOKEN_CONTACT_POINTS = 285,
-        TOKEN_MAX_RECONNECT_TRIES = 286,
-        TOKEN_RECONNECT_WAIT_TIME = 287,
-        TOKEN_KEYSPACE = 288,
-        TOKEN_REQUEST_TIMEOUT = 289,
-        TOKEN_TCP_KEEPALIVE = 290,
-        TOKEN_TCP_NODELAY = 291,
-        TOKEN_PREFERRED_LIFETIME = 292,
-        TOKEN_VALID_LIFETIME = 293,
-        TOKEN_RENEW_TIMER = 294,
-        TOKEN_REBIND_TIMER = 295,
-        TOKEN_DECLINE_PROBATION_PERIOD = 296,
-        TOKEN_SUBNET6 = 297,
-        TOKEN_OPTION_DEF = 298,
-        TOKEN_OPTION_DATA = 299,
-        TOKEN_NAME = 300,
-        TOKEN_DATA = 301,
-        TOKEN_CODE = 302,
-        TOKEN_SPACE = 303,
-        TOKEN_CSV_FORMAT = 304,
-        TOKEN_ALWAYS_SEND = 305,
-        TOKEN_RECORD_TYPES = 306,
-        TOKEN_ENCAPSULATE = 307,
-        TOKEN_ARRAY = 308,
-        TOKEN_POOLS = 309,
-        TOKEN_POOL = 310,
-        TOKEN_PD_POOLS = 311,
-        TOKEN_PREFIX = 312,
-        TOKEN_PREFIX_LEN = 313,
-        TOKEN_EXCLUDED_PREFIX = 314,
-        TOKEN_EXCLUDED_PREFIX_LEN = 315,
-        TOKEN_DELEGATED_LEN = 316,
-        TOKEN_USER_CONTEXT = 317,
-        TOKEN_COMMENT = 318,
-        TOKEN_SUBNET = 319,
-        TOKEN_INTERFACE = 320,
-        TOKEN_INTERFACE_ID = 321,
-        TOKEN_ID = 322,
-        TOKEN_RAPID_COMMIT = 323,
-        TOKEN_RESERVATION_MODE = 324,
-        TOKEN_DISABLED = 325,
-        TOKEN_OUT_OF_POOL = 326,
-        TOKEN_ALL = 327,
-        TOKEN_SHARED_NETWORKS = 328,
-        TOKEN_MAC_SOURCES = 329,
-        TOKEN_RELAY_SUPPLIED_OPTIONS = 330,
-        TOKEN_HOST_RESERVATION_IDENTIFIERS = 331,
-        TOKEN_SANITY_CHECKS = 332,
-        TOKEN_LEASE_CHECKS = 333,
-        TOKEN_CLIENT_CLASSES = 334,
-        TOKEN_REQUIRE_CLIENT_CLASSES = 335,
-        TOKEN_TEST = 336,
-        TOKEN_ONLY_IF_REQUIRED = 337,
-        TOKEN_CLIENT_CLASS = 338,
-        TOKEN_RESERVATIONS = 339,
-        TOKEN_IP_ADDRESSES = 340,
-        TOKEN_PREFIXES = 341,
-        TOKEN_DUID = 342,
-        TOKEN_HW_ADDRESS = 343,
-        TOKEN_HOSTNAME = 344,
-        TOKEN_FLEX_ID = 345,
-        TOKEN_RELAY = 346,
-        TOKEN_IP_ADDRESS = 347,
-        TOKEN_HOOKS_LIBRARIES = 348,
-        TOKEN_LIBRARY = 349,
-        TOKEN_PARAMETERS = 350,
-        TOKEN_EXPIRED_LEASES_PROCESSING = 351,
-        TOKEN_RECLAIM_TIMER_WAIT_TIME = 352,
-        TOKEN_FLUSH_RECLAIMED_TIMER_WAIT_TIME = 353,
-        TOKEN_HOLD_RECLAIMED_TIME = 354,
-        TOKEN_MAX_RECLAIM_LEASES = 355,
-        TOKEN_MAX_RECLAIM_TIME = 356,
-        TOKEN_UNWARNED_RECLAIM_CYCLES = 357,
-        TOKEN_SERVER_ID = 358,
-        TOKEN_LLT = 359,
-        TOKEN_EN = 360,
-        TOKEN_LL = 361,
-        TOKEN_IDENTIFIER = 362,
-        TOKEN_HTYPE = 363,
-        TOKEN_TIME = 364,
-        TOKEN_ENTERPRISE_ID = 365,
-        TOKEN_DHCP4O6_PORT = 366,
-        TOKEN_CONTROL_SOCKET = 367,
-        TOKEN_SOCKET_TYPE = 368,
-        TOKEN_SOCKET_NAME = 369,
-        TOKEN_DHCP_DDNS = 370,
-        TOKEN_ENABLE_UPDATES = 371,
-        TOKEN_QUALIFYING_SUFFIX = 372,
-        TOKEN_SERVER_IP = 373,
-        TOKEN_SERVER_PORT = 374,
-        TOKEN_SENDER_IP = 375,
-        TOKEN_SENDER_PORT = 376,
-        TOKEN_MAX_QUEUE_SIZE = 377,
-        TOKEN_NCR_PROTOCOL = 378,
-        TOKEN_NCR_FORMAT = 379,
-        TOKEN_ALWAYS_INCLUDE_FQDN = 380,
-        TOKEN_OVERRIDE_NO_UPDATE = 381,
-        TOKEN_OVERRIDE_CLIENT_UPDATE = 382,
-        TOKEN_REPLACE_CLIENT_NAME = 383,
-        TOKEN_GENERATED_PREFIX = 384,
-        TOKEN_UDP = 385,
-        TOKEN_TCP = 386,
-        TOKEN_JSON = 387,
-        TOKEN_WHEN_PRESENT = 388,
-        TOKEN_NEVER = 389,
-        TOKEN_ALWAYS = 390,
-        TOKEN_WHEN_NOT_PRESENT = 391,
-        TOKEN_HOSTNAME_CHAR_SET = 392,
-        TOKEN_HOSTNAME_CHAR_REPLACEMENT = 393,
-        TOKEN_LOGGING = 394,
-        TOKEN_LOGGERS = 395,
-        TOKEN_OUTPUT_OPTIONS = 396,
-        TOKEN_OUTPUT = 397,
-        TOKEN_DEBUGLEVEL = 398,
-        TOKEN_SEVERITY = 399,
-        TOKEN_FLUSH = 400,
-        TOKEN_MAXSIZE = 401,
-        TOKEN_MAXVER = 402,
-        TOKEN_DHCP4 = 403,
-        TOKEN_DHCPDDNS = 404,
-        TOKEN_CONTROL_AGENT = 405,
-        TOKEN_TOPLEVEL_JSON = 406,
-        TOKEN_TOPLEVEL_DHCP6 = 407,
-        TOKEN_SUB_DHCP6 = 408,
-        TOKEN_SUB_INTERFACES6 = 409,
-        TOKEN_SUB_SUBNET6 = 410,
-        TOKEN_SUB_POOL6 = 411,
-        TOKEN_SUB_PD_POOL = 412,
-        TOKEN_SUB_RESERVATION = 413,
-        TOKEN_SUB_OPTION_DEFS = 414,
-        TOKEN_SUB_OPTION_DEF = 415,
-        TOKEN_SUB_OPTION_DATA = 416,
-        TOKEN_SUB_HOOKS_LIBRARY = 417,
-        TOKEN_SUB_DHCP_DDNS = 418,
-        TOKEN_SUB_LOGGING = 419,
-        TOKEN_STRING = 420,
-        TOKEN_INTEGER = 421,
-        TOKEN_FLOAT = 422,
-        TOKEN_BOOLEAN = 423
+        TOKEN_CONFIG_CONTROL = 266,
+        TOKEN_CONFIG_DATABASES = 267,
+        TOKEN_INTERFACES_CONFIG = 268,
+        TOKEN_INTERFACES = 269,
+        TOKEN_RE_DETECT = 270,
+        TOKEN_LEASE_DATABASE = 271,
+        TOKEN_HOSTS_DATABASE = 272,
+        TOKEN_HOSTS_DATABASES = 273,
+        TOKEN_TYPE = 274,
+        TOKEN_MEMFILE = 275,
+        TOKEN_MYSQL = 276,
+        TOKEN_POSTGRESQL = 277,
+        TOKEN_CQL = 278,
+        TOKEN_USER = 279,
+        TOKEN_PASSWORD = 280,
+        TOKEN_HOST = 281,
+        TOKEN_PORT = 282,
+        TOKEN_PERSIST = 283,
+        TOKEN_LFC_INTERVAL = 284,
+        TOKEN_READONLY = 285,
+        TOKEN_CONNECT_TIMEOUT = 286,
+        TOKEN_CONTACT_POINTS = 287,
+        TOKEN_MAX_RECONNECT_TRIES = 288,
+        TOKEN_RECONNECT_WAIT_TIME = 289,
+        TOKEN_KEYSPACE = 290,
+        TOKEN_REQUEST_TIMEOUT = 291,
+        TOKEN_TCP_KEEPALIVE = 292,
+        TOKEN_TCP_NODELAY = 293,
+        TOKEN_PREFERRED_LIFETIME = 294,
+        TOKEN_VALID_LIFETIME = 295,
+        TOKEN_RENEW_TIMER = 296,
+        TOKEN_REBIND_TIMER = 297,
+        TOKEN_DECLINE_PROBATION_PERIOD = 298,
+        TOKEN_SUBNET6 = 299,
+        TOKEN_OPTION_DEF = 300,
+        TOKEN_OPTION_DATA = 301,
+        TOKEN_NAME = 302,
+        TOKEN_DATA = 303,
+        TOKEN_CODE = 304,
+        TOKEN_SPACE = 305,
+        TOKEN_CSV_FORMAT = 306,
+        TOKEN_ALWAYS_SEND = 307,
+        TOKEN_RECORD_TYPES = 308,
+        TOKEN_ENCAPSULATE = 309,
+        TOKEN_ARRAY = 310,
+        TOKEN_POOLS = 311,
+        TOKEN_POOL = 312,
+        TOKEN_PD_POOLS = 313,
+        TOKEN_PREFIX = 314,
+        TOKEN_PREFIX_LEN = 315,
+        TOKEN_EXCLUDED_PREFIX = 316,
+        TOKEN_EXCLUDED_PREFIX_LEN = 317,
+        TOKEN_DELEGATED_LEN = 318,
+        TOKEN_USER_CONTEXT = 319,
+        TOKEN_COMMENT = 320,
+        TOKEN_SUBNET = 321,
+        TOKEN_INTERFACE = 322,
+        TOKEN_INTERFACE_ID = 323,
+        TOKEN_ID = 324,
+        TOKEN_RAPID_COMMIT = 325,
+        TOKEN_RESERVATION_MODE = 326,
+        TOKEN_DISABLED = 327,
+        TOKEN_OUT_OF_POOL = 328,
+        TOKEN_ALL = 329,
+        TOKEN_SHARED_NETWORKS = 330,
+        TOKEN_MAC_SOURCES = 331,
+        TOKEN_RELAY_SUPPLIED_OPTIONS = 332,
+        TOKEN_HOST_RESERVATION_IDENTIFIERS = 333,
+        TOKEN_SANITY_CHECKS = 334,
+        TOKEN_LEASE_CHECKS = 335,
+        TOKEN_CLIENT_CLASSES = 336,
+        TOKEN_REQUIRE_CLIENT_CLASSES = 337,
+        TOKEN_TEST = 338,
+        TOKEN_ONLY_IF_REQUIRED = 339,
+        TOKEN_CLIENT_CLASS = 340,
+        TOKEN_RESERVATIONS = 341,
+        TOKEN_IP_ADDRESSES = 342,
+        TOKEN_PREFIXES = 343,
+        TOKEN_DUID = 344,
+        TOKEN_HW_ADDRESS = 345,
+        TOKEN_HOSTNAME = 346,
+        TOKEN_FLEX_ID = 347,
+        TOKEN_RELAY = 348,
+        TOKEN_IP_ADDRESS = 349,
+        TOKEN_HOOKS_LIBRARIES = 350,
+        TOKEN_LIBRARY = 351,
+        TOKEN_PARAMETERS = 352,
+        TOKEN_EXPIRED_LEASES_PROCESSING = 353,
+        TOKEN_RECLAIM_TIMER_WAIT_TIME = 354,
+        TOKEN_FLUSH_RECLAIMED_TIMER_WAIT_TIME = 355,
+        TOKEN_HOLD_RECLAIMED_TIME = 356,
+        TOKEN_MAX_RECLAIM_LEASES = 357,
+        TOKEN_MAX_RECLAIM_TIME = 358,
+        TOKEN_UNWARNED_RECLAIM_CYCLES = 359,
+        TOKEN_SERVER_ID = 360,
+        TOKEN_LLT = 361,
+        TOKEN_EN = 362,
+        TOKEN_LL = 363,
+        TOKEN_IDENTIFIER = 364,
+        TOKEN_HTYPE = 365,
+        TOKEN_TIME = 366,
+        TOKEN_ENTERPRISE_ID = 367,
+        TOKEN_DHCP4O6_PORT = 368,
+        TOKEN_CONTROL_SOCKET = 369,
+        TOKEN_SOCKET_TYPE = 370,
+        TOKEN_SOCKET_NAME = 371,
+        TOKEN_DHCP_DDNS = 372,
+        TOKEN_ENABLE_UPDATES = 373,
+        TOKEN_QUALIFYING_SUFFIX = 374,
+        TOKEN_SERVER_IP = 375,
+        TOKEN_SERVER_PORT = 376,
+        TOKEN_SENDER_IP = 377,
+        TOKEN_SENDER_PORT = 378,
+        TOKEN_MAX_QUEUE_SIZE = 379,
+        TOKEN_NCR_PROTOCOL = 380,
+        TOKEN_NCR_FORMAT = 381,
+        TOKEN_ALWAYS_INCLUDE_FQDN = 382,
+        TOKEN_OVERRIDE_NO_UPDATE = 383,
+        TOKEN_OVERRIDE_CLIENT_UPDATE = 384,
+        TOKEN_REPLACE_CLIENT_NAME = 385,
+        TOKEN_GENERATED_PREFIX = 386,
+        TOKEN_UDP = 387,
+        TOKEN_TCP = 388,
+        TOKEN_JSON = 389,
+        TOKEN_WHEN_PRESENT = 390,
+        TOKEN_NEVER = 391,
+        TOKEN_ALWAYS = 392,
+        TOKEN_WHEN_NOT_PRESENT = 393,
+        TOKEN_HOSTNAME_CHAR_SET = 394,
+        TOKEN_HOSTNAME_CHAR_REPLACEMENT = 395,
+        TOKEN_LOGGING = 396,
+        TOKEN_LOGGERS = 397,
+        TOKEN_OUTPUT_OPTIONS = 398,
+        TOKEN_OUTPUT = 399,
+        TOKEN_DEBUGLEVEL = 400,
+        TOKEN_SEVERITY = 401,
+        TOKEN_FLUSH = 402,
+        TOKEN_MAXSIZE = 403,
+        TOKEN_MAXVER = 404,
+        TOKEN_DHCP4 = 405,
+        TOKEN_DHCPDDNS = 406,
+        TOKEN_CONTROL_AGENT = 407,
+        TOKEN_TOPLEVEL_JSON = 408,
+        TOKEN_TOPLEVEL_DHCP6 = 409,
+        TOKEN_SUB_DHCP6 = 410,
+        TOKEN_SUB_INTERFACES6 = 411,
+        TOKEN_SUB_SUBNET6 = 412,
+        TOKEN_SUB_POOL6 = 413,
+        TOKEN_SUB_PD_POOL = 414,
+        TOKEN_SUB_RESERVATION = 415,
+        TOKEN_SUB_OPTION_DEFS = 416,
+        TOKEN_SUB_OPTION_DEF = 417,
+        TOKEN_SUB_OPTION_DATA = 418,
+        TOKEN_SUB_HOOKS_LIBRARY = 419,
+        TOKEN_SUB_DHCP_DDNS = 420,
+        TOKEN_SUB_LOGGING = 421,
+        TOKEN_SUB_CONFIG_CONTROL = 422,
+        TOKEN_STRING = 423,
+        TOKEN_INTEGER = 424,
+        TOKEN_FLOAT = 425,
+        TOKEN_BOOLEAN = 426
       };
     };
 
@@ -663,6 +666,14 @@ namespace isc { namespace dhcp {
     symbol_type
     make_DHCP6 (const location_type& l);
 
+    static inline
+    symbol_type
+    make_CONFIG_CONTROL (const location_type& l);
+
+    static inline
+    symbol_type
+    make_CONFIG_DATABASES (const location_type& l);
+
     static inline
     symbol_type
     make_INTERFACES_CONFIG (const location_type& l);
@@ -1279,6 +1290,10 @@ namespace isc { namespace dhcp {
     symbol_type
     make_SUB_LOGGING (const location_type& l);
 
+    static inline
+    symbol_type
+    make_SUB_CONFIG_CONTROL (const location_type& l);
+
     static inline
     symbol_type
     make_STRING (const std::string& v, const location_type& l);
@@ -1466,8 +1481,6 @@ namespace isc { namespace dhcp {
       typedef basic_symbol<by_state> super_type;
       /// Construct an empty symbol.
       stack_symbol_type ();
-      /// Copy construct.
-      stack_symbol_type (const stack_symbol_type& that);
       /// Steal the contents from \a sym to build this.
       stack_symbol_type (state_type s, symbol_type& sym);
       /// Assignment, needed by push_back.
@@ -1496,18 +1509,18 @@ namespace isc { namespace dhcp {
     void yypush_ (const char* m, state_type s, symbol_type& sym);
 
     /// Pop \a n symbols the three stacks.
-    void yypop_ (unsigned n = 1);
+    void yypop_ (unsigned int n = 1);
 
     /// Constants.
     enum
     {
       yyeof_ = 0,
-      yylast_ = 987,     ///< Last index in yytable_.
-      yynnts_ = 377,  ///< Number of nonterminal symbols.
-      yyfinal_ = 30, ///< Termination state number.
+      yylast_ = 1012,     ///< Last index in yytable_.
+      yynnts_ = 387,  ///< Number of nonterminal symbols.
+      yyfinal_ = 32, ///< Termination state number.
       yyterror_ = 1,
       yyerrcode_ = 256,
-      yyntokens_ = 169  ///< Number of tokens.
+      yyntokens_ = 172  ///< Number of tokens.
     };
 
 
@@ -1566,14 +1579,14 @@ namespace isc { namespace dhcp {
      135,   136,   137,   138,   139,   140,   141,   142,   143,   144,
      145,   146,   147,   148,   149,   150,   151,   152,   153,   154,
      155,   156,   157,   158,   159,   160,   161,   162,   163,   164,
-     165,   166,   167,   168
+     165,   166,   167,   168,   169,   170,   171
     };
-    const unsigned user_token_number_max_ = 423;
+    const unsigned int user_token_number_max_ = 426;
     const token_number_type undef_token_ = 2;
 
-    if (static_cast<int> (t) <= yyeof_)
+    if (static_cast<int>(t) <= yyeof_)
       return yyeof_;
-    else if (static_cast<unsigned> (t) <= user_token_number_max_)
+    else if (static_cast<unsigned int> (t) <= user_token_number_max_)
       return translate_table[t];
     else
       return undef_token_;
@@ -1587,41 +1600,43 @@ namespace isc { namespace dhcp {
 
   // basic_symbol.
   template <typename Base>
+  inline
   Dhcp6Parser::basic_symbol<Base>::basic_symbol ()
     : value ()
   {}
 
   template <typename Base>
+  inline
   Dhcp6Parser::basic_symbol<Base>::basic_symbol (const basic_symbol& other)
     : Base (other)
     , value ()
     , location (other.location)
   {
-    switch (other.type_get ())
+      switch (other.type_get ())
     {
-      case 185: // value
-      case 189: // map_value
-      case 239: // db_type
-      case 328: // hr_mode
-      case 464: // duid_type
-      case 497: // ncr_protocol_value
-      case 505: // replace_client_name_value
+      case 189: // value
+      case 193: // map_value
+      case 243: // db_type
+      case 332: // hr_mode
+      case 468: // duid_type
+      case 501: // ncr_protocol_value
+      case 509: // replace_client_name_value
         value.copy< ElementPtr > (other.value);
         break;
 
-      case 168: // "boolean"
+      case 171: // "boolean"
         value.copy< bool > (other.value);
         break;
 
-      case 167: // "floating point"
+      case 170: // "floating point"
         value.copy< double > (other.value);
         break;
 
-      case 166: // "integer"
+      case 169: // "integer"
         value.copy< int64_t > (other.value);
         break;
 
-      case 165: // "constant string"
+      case 168: // "constant string"
         value.copy< std::string > (other.value);
         break;
 
@@ -1631,38 +1646,40 @@ namespace isc { namespace dhcp {
 
   }
 
+
   template <typename Base>
+  inline
   Dhcp6Parser::basic_symbol<Base>::basic_symbol (typename Base::kind_type t, const semantic_type& v, const location_type& l)
     : Base (t)
     , value ()
     , location (l)
   {
     (void) v;
-    switch (this->type_get ())
+      switch (this->type_get ())
     {
-      case 185: // value
-      case 189: // map_value
-      case 239: // db_type
-      case 328: // hr_mode
-      case 464: // duid_type
-      case 497: // ncr_protocol_value
-      case 505: // replace_client_name_value
+      case 189: // value
+      case 193: // map_value
+      case 243: // db_type
+      case 332: // hr_mode
+      case 468: // duid_type
+      case 501: // ncr_protocol_value
+      case 509: // replace_client_name_value
         value.copy< ElementPtr > (v);
         break;
 
-      case 168: // "boolean"
+      case 171: // "boolean"
         value.copy< bool > (v);
         break;
 
-      case 167: // "floating point"
+      case 170: // "floating point"
         value.copy< double > (v);
         break;
 
-      case 166: // "integer"
+      case 169: // "integer"
         value.copy< int64_t > (v);
         break;
 
-      case 165: // "constant string"
+      case 168: // "constant string"
         value.copy< std::string > (v);
         break;
 
@@ -1718,12 +1735,14 @@ namespace isc { namespace dhcp {
 
 
   template <typename Base>
+  inline
   Dhcp6Parser::basic_symbol<Base>::~basic_symbol ()
   {
     clear ();
   }
 
   template <typename Base>
+  inline
   void
   Dhcp6Parser::basic_symbol<Base>::clear ()
   {
@@ -1738,31 +1757,31 @@ namespace isc { namespace dhcp {
     }
 
     // Type destructor.
-  switch (yytype)
+    switch (yytype)
     {
-      case 185: // value
-      case 189: // map_value
-      case 239: // db_type
-      case 328: // hr_mode
-      case 464: // duid_type
-      case 497: // ncr_protocol_value
-      case 505: // replace_client_name_value
+      case 189: // value
+      case 193: // map_value
+      case 243: // db_type
+      case 332: // hr_mode
+      case 468: // duid_type
+      case 501: // ncr_protocol_value
+      case 509: // replace_client_name_value
         value.template destroy< ElementPtr > ();
         break;
 
-      case 168: // "boolean"
+      case 171: // "boolean"
         value.template destroy< bool > ();
         break;
 
-      case 167: // "floating point"
+      case 170: // "floating point"
         value.template destroy< double > ();
         break;
 
-      case 166: // "integer"
+      case 169: // "integer"
         value.template destroy< int64_t > ();
         break;
 
-      case 165: // "constant string"
+      case 168: // "constant string"
         value.template destroy< std::string > ();
         break;
 
@@ -1774,6 +1793,7 @@ namespace isc { namespace dhcp {
   }
 
   template <typename Base>
+  inline
   bool
   Dhcp6Parser::basic_symbol<Base>::empty () const
   {
@@ -1781,35 +1801,36 @@ namespace isc { namespace dhcp {
   }
 
   template <typename Base>
+  inline
   void
   Dhcp6Parser::basic_symbol<Base>::move (basic_symbol& s)
   {
-    super_type::move (s);
-    switch (this->type_get ())
+    super_type::move(s);
+      switch (this->type_get ())
     {
-      case 185: // value
-      case 189: // map_value
-      case 239: // db_type
-      case 328: // hr_mode
-      case 464: // duid_type
-      case 497: // ncr_protocol_value
-      case 505: // replace_client_name_value
+      case 189: // value
+      case 193: // map_value
+      case 243: // db_type
+      case 332: // hr_mode
+      case 468: // duid_type
+      case 501: // ncr_protocol_value
+      case 509: // replace_client_name_value
         value.move< ElementPtr > (s.value);
         break;
 
-      case 168: // "boolean"
+      case 171: // "boolean"
         value.move< bool > (s.value);
         break;
 
-      case 167: // "floating point"
+      case 170: // "floating point"
         value.move< double > (s.value);
         break;
 
-      case 166: // "integer"
+      case 169: // "integer"
         value.move< int64_t > (s.value);
         break;
 
-      case 165: // "constant string"
+      case 168: // "constant string"
         value.move< std::string > (s.value);
         break;
 
@@ -1884,7 +1905,8 @@ namespace isc { namespace dhcp {
      385,   386,   387,   388,   389,   390,   391,   392,   393,   394,
      395,   396,   397,   398,   399,   400,   401,   402,   403,   404,
      405,   406,   407,   408,   409,   410,   411,   412,   413,   414,
-     415,   416,   417,   418,   419,   420,   421,   422,   423
+     415,   416,   417,   418,   419,   420,   421,   422,   423,   424,
+     425,   426
     };
     return static_cast<token_type> (yytoken_number_[type]);
   }
@@ -1943,6 +1965,18 @@ namespace isc { namespace dhcp {
     return symbol_type (token::TOKEN_DHCP6, l);
   }
 
+  Dhcp6Parser::symbol_type
+  Dhcp6Parser::make_CONFIG_CONTROL (const location_type& l)
+  {
+    return symbol_type (token::TOKEN_CONFIG_CONTROL, l);
+  }
+
+  Dhcp6Parser::symbol_type
+  Dhcp6Parser::make_CONFIG_DATABASES (const location_type& l)
+  {
+    return symbol_type (token::TOKEN_CONFIG_DATABASES, l);
+  }
+
   Dhcp6Parser::symbol_type
   Dhcp6Parser::make_INTERFACES_CONFIG (const location_type& l)
   {
@@ -2867,6 +2901,12 @@ namespace isc { namespace dhcp {
     return symbol_type (token::TOKEN_SUB_LOGGING, l);
   }
 
+  Dhcp6Parser::symbol_type
+  Dhcp6Parser::make_SUB_CONFIG_CONTROL (const location_type& l)
+  {
+    return symbol_type (token::TOKEN_SUB_CONFIG_CONTROL, l);
+  }
+
   Dhcp6Parser::symbol_type
   Dhcp6Parser::make_STRING (const std::string& v, const location_type& l)
   {
@@ -2892,9 +2932,9 @@ namespace isc { namespace dhcp {
   }
 
 
-#line 14 "dhcp6_parser.yy" // lalr1.cc:379
+#line 14 "dhcp6_parser.yy" // lalr1.cc:377
 } } // isc::dhcp
-#line 2898 "dhcp6_parser.h" // lalr1.cc:379
+#line 2938 "dhcp6_parser.h" // lalr1.cc:377
 
 
 
index 39dff24b997cc29c0f18fa108a7e22d1a2f0fb1c..d2f16fb170a730245a8c9c517d01e6a568c19b79 100644 (file)
@@ -50,6 +50,8 @@ using namespace std;
   NULL_TYPE "null"
 
   DHCP6 "Dhcp6"
+  CONFIG_CONTROL "config-control"
+  CONFIG_DATABASES "config-databases"
   INTERFACES_CONFIG "interfaces-config"
   INTERFACES "interfaces"
   RE_DETECT "re-detect"
@@ -224,6 +226,7 @@ using namespace std;
   SUB_HOOKS_LIBRARY
   SUB_DHCP_DDNS
   SUB_LOGGING
+  SUB_CONFIG_CONTROL
 ;
 
 %token <std::string> STRING "constant string"
@@ -262,6 +265,7 @@ start: TOPLEVEL_JSON { ctx.ctx_ = ctx.NO_KEYWORD; } sub_json
      | SUB_HOOKS_LIBRARY { ctx.ctx_ = ctx.HOOKS_LIBRARIES; } sub_hooks_library
      | SUB_DHCP_DDNS { ctx.ctx_ = ctx.DHCP_DDNS; } sub_dhcp_ddns
      | SUB_LOGGING { ctx.ctx_ = ctx.LOGGING; } sub_logging
+     | SUB_CONFIG_CONTROL { ctx.ctx_ = ctx.CONFIG_CONTROL; } sub_config_control
      ;
 
 // ---- generic JSON parser ---------------------------------
@@ -455,6 +459,7 @@ global_param: preferred_lifetime
             | comment
             | sanity_checks
             | reservations
+            | config_control
             | unknown_map_entry
             ;
 
@@ -2106,6 +2111,56 @@ control_agent_json_object: CONTROL_AGENT {
     ctx.leave();
 };
 
+// Config control information element
+
+config_control: LCURLY_BRACKET {
+    ElementPtr m(new MapElement(ctx.loc2pos(@1)));
+    ctx.stack_.back()->add(m);
+    ctx.stack_.push_back(m);
+} config_control_params RCURLY_BRACKET {
+    ctx.stack_.pop_back();
+};
+
+
+config_control: CONFIG_CONTROL {
+    ElementPtr i(new MapElement(ctx.loc2pos(@1)));
+    ctx.stack_.back()->set("config-control", i);
+    ctx.stack_.push_back(i);
+    ctx.enter(ctx.CONFIG_CONTROL);
+} COLON LCURLY_BRACKET config_control_params RCURLY_BRACKET {
+    // No config control params are required
+    ctx.stack_.pop_back();
+    ctx.leave();
+};
+
+sub_config_control: LCURLY_BRACKET {
+    // Parse the config-control map
+    ElementPtr m(new MapElement(ctx.loc2pos(@1)));
+    ctx.stack_.push_back(m);
+} config_control_params RCURLY_BRACKET {
+    // No config_control params are required
+    // parsing completed
+};
+
+// This defines that subnet can have one or more parameters.
+config_control_params: config_control_param
+              | config_control_params COMMA config_control_param
+              ;
+
+// This defines a list of allowed parameters for each subnet.
+config_control_param: config_databases
+            | unknown_map_entry
+            ;
+
+config_databases: CONFIG_DATABASES {
+    ElementPtr l(new ListElement(ctx.loc2pos(@1)));
+    ctx.stack_.back()->set("config-databases", l);
+    ctx.stack_.push_back(l);
+    ctx.enter(ctx.CONFIG_DATABASE);
+} COLON LSQUARE_BRACKET database_list RSQUARE_BRACKET {
+    ctx.stack_.pop_back();
+    ctx.leave();
+};
 
 // --- logging entry -----------------------------------------
 
index 47ea0dbbc41b7bab6938a96f5733ea35dbb6a91e..40f75703988e5a37696d828e2156860ec2107eb9 100644 (file)
@@ -37,6 +37,7 @@
 #include <dhcpsrv/host_data_source_factory.h>
 #include <hooks/hooks_parser.h>
 #include <log/logger_support.h>
+#include <process/config_ctl_parser.h>
 #include <util/encode/hex.h>
 #include <util/strutil.h>
 
@@ -606,6 +607,13 @@ configureDhcp6Server(Dhcpv6Srv& server, isc::data::ConstElementPtr config_set,
                 continue;
             }
 
+            if (config_pair.first == "config-control") {
+                process::ConfigControlParser parser;
+                process::ConfigControlInfoPtr config_ctl_info = parser.parse(config_pair.second);
+                CfgMgr::instance().getStagingCfg()->setConfigControlInfo(config_ctl_info);
+                continue;
+            }
+
             // Timers are not used in the global scope. Their values are derived
             // to specific subnets (see SimpleParser6::deriveParameters).
             // decline-probation-period, dhcp4o6-port and user-context
index 20e5c897bcb81f887c33427c903387a10842754e..239704683c8fa2193dfd7c1bd8641c8df96d8a39 100644 (file)
@@ -1,10 +1,8 @@
-// Generated 201808161138
-// Generated 201808161137
-// A Bison parser, made by GNU Bison 3.0.5.
+// A Bison parser, made by GNU Bison 3.0.4.
 
 // Locations for Bison parsers in C++
 
-// Copyright (C) 2002-2015, 2018 Free Software Foundation, Inc.
+// Copyright (C) 2002-2015 Free Software Foundation, Inc.
 
 // This program is free software: you can redistribute it and/or modify
 // it under the terms of the GNU General Public License as published by
@@ -42,9 +40,9 @@
 
 # include "position.hh"
 
-#line 14 "dhcp6_parser.yy" // location.cc:292
+#line 14 "dhcp6_parser.yy" // location.cc:296
 namespace isc { namespace dhcp {
-#line 46 "location.hh" // location.cc:292
+#line 46 "location.hh" // location.cc:296
   /// Abstract a location.
   class location
   {
@@ -54,27 +52,30 @@ namespace isc { namespace dhcp {
     location (const position& b, const position& e)
       : begin (b)
       , end (e)
-    {}
+    {
+    }
 
     /// Construct a 0-width location in \a p.
     explicit location (const position& p = position ())
       : begin (p)
       , end (p)
-    {}
+    {
+    }
 
     /// Construct a 0-width location in \a f, \a l, \a c.
     explicit location (std::string* f,
-                       unsigned l = 1u,
-                       unsigned c = 1u)
+                       unsigned int l = 1u,
+                       unsigned int c = 1u)
       : begin (f, l, c)
       , end (f, l, c)
-    {}
+    {
+    }
 
 
     /// Initialization.
     void initialize (std::string* f = YY_NULLPTR,
-                     unsigned l = 1u,
-                     unsigned c = 1u)
+                     unsigned int l = 1u,
+                     unsigned int c = 1u)
     {
       begin.initialize (f, l, c);
       end = begin;
@@ -172,7 +173,7 @@ namespace isc { namespace dhcp {
   inline std::basic_ostream<YYChar>&
   operator<< (std::basic_ostream<YYChar>& ostr, const location& loc)
   {
-    unsigned end_col = 0 < loc.end.column ? loc.end.column - 1 : 0;
+    unsigned int end_col = 0 < loc.end.column ? loc.end.column - 1 : 0;
     ostr << loc.begin;
     if (loc.end.filename
         && (!loc.begin.filename
@@ -185,7 +186,7 @@ namespace isc { namespace dhcp {
     return ostr;
   }
 
-#line 14 "dhcp6_parser.yy" // location.cc:292
+#line 14 "dhcp6_parser.yy" // location.cc:296
 } } // isc::dhcp
-#line 189 "location.hh" // location.cc:292
+#line 192 "location.hh" // location.cc:296
 #endif // !YY_PARSER6_LOCATION_HH_INCLUDED
index acb8c8de19964483a1f5803d7233e4752744e890..9c2d4e04e2ae9ad04dc6aa8f6444a6930b4c6885 100644 (file)
@@ -198,6 +198,10 @@ Parser6Context::contextName()
         return ("shared-networks");
     case SANITY_CHECKS:
         return ("sanity-checks");
+    case CONFIG_CONTROL:
+        return ("config-control");
+    case CONFIG_DATABASE:
+        return ("config-database");
     default:
         return ("__unknown__");
     }
index 9e41c9b042f7fea19f1fadbb95bd4a7fbed8f749..b9c7e4a2570bee7bcf08f1c79bc7f52e749f9820 100644 (file)
@@ -299,7 +299,13 @@ public:
         NCR_FORMAT,
 
         /// Used while parsing Dhcp6/dhcp-ddns/replace-client-name.
-        REPLACE_CLIENT_NAME
+        REPLACE_CLIENT_NAME,
+
+        /// Used while parsing Dhcp4/config-control
+        CONFIG_CONTROL,
+
+        /// Used while parsing config-control/config-databases
+        CONFIG_DATABASE
 
     } ParserContext;
 
index e7d8597cfa9644849a2a3c7bc9631dde48233f3a..2ee80e6d0a22726887dabd52d10789130b8e5d56 100644 (file)
@@ -1,10 +1,8 @@
-// Generated 201808161138
-// Generated 201808161137
-// A Bison parser, made by GNU Bison 3.0.5.
+// A Bison parser, made by GNU Bison 3.0.4.
 
 // Positions for Bison parsers in C++
 
-// Copyright (C) 2002-2015, 2018 Free Software Foundation, Inc.
+// Copyright (C) 2002-2015 Free Software Foundation, Inc.
 
 // This program is free software: you can redistribute it and/or modify
 // it under the terms of the GNU General Public License as published by
 #  endif
 # endif
 
-#line 14 "dhcp6_parser.yy" // location.cc:292
+#line 14 "dhcp6_parser.yy" // location.cc:296
 namespace isc { namespace dhcp {
-#line 56 "position.hh" // location.cc:292
+#line 56 "position.hh" // location.cc:296
   /// Abstract a position.
   class position
   {
   public:
     /// Construct a position.
     explicit position (std::string* f = YY_NULLPTR,
-                       unsigned l = 1u,
-                       unsigned c = 1u)
+                       unsigned int l = 1u,
+                       unsigned int c = 1u)
       : filename (f)
       , line (l)
       , column (c)
-    {}
+    {
+    }
 
 
     /// Initialization.
     void initialize (std::string* fn = YY_NULLPTR,
-                     unsigned l = 1u,
-                     unsigned c = 1u)
+                     unsigned int l = 1u,
+                     unsigned int c = 1u)
     {
       filename = fn;
       line = l;
@@ -101,15 +100,15 @@ namespace isc { namespace dhcp {
     /// File name to which this position refers.
     std::string* filename;
     /// Current line number.
-    unsigned line;
+    unsigned int line;
     /// Current column number.
-    unsigned column;
+    unsigned int column;
 
   private:
     /// Compute max(min, lhs+rhs) (provided min <= lhs).
-    static unsigned add_ (unsigned lhs, int rhs, unsigned min)
+    static unsigned int add_ (unsigned int lhs, int rhs, unsigned int min)
     {
-      return (0 < rhs || -static_cast<unsigned>(rhs) < lhs
+      return (0 < rhs || -static_cast<unsigned int>(rhs) < lhs
               ? rhs + lhs
               : min);
     }
@@ -175,7 +174,7 @@ namespace isc { namespace dhcp {
     return ostr << pos.line << '.' << pos.column;
   }
 
-#line 14 "dhcp6_parser.yy" // location.cc:292
+#line 14 "dhcp6_parser.yy" // location.cc:296
 } } // isc::dhcp
-#line 179 "position.hh" // location.cc:292
+#line 180 "position.hh" // location.cc:296
 #endif // !YY_PARSER6_POSITION_HH_INCLUDED
index 839297248c50d6ead5ed0b6641c43852c76084b1..db2863a06ef4a89243bf39cc72557573857e8cf7 100644 (file)
@@ -1,10 +1,8 @@
-// Generated 201808161138
-// Generated 201808161137
-// A Bison parser, made by GNU Bison 3.0.5.
+// A Bison parser, made by GNU Bison 3.0.4.
 
 // Stack handling for Bison parsers in C++
 
-// Copyright (C) 2002-2015, 2018 Free Software Foundation, Inc.
+// Copyright (C) 2002-2015 Free Software Foundation, Inc.
 
 // This program is free software: you can redistribute it and/or modify
 // it under the terms of the GNU General Public License as published by
 
 # include <vector>
 
-#line 14 "dhcp6_parser.yy" // stack.hh:131
+#line 14 "dhcp6_parser.yy" // stack.hh:132
 namespace isc { namespace dhcp {
-#line 46 "stack.hh" // stack.hh:131
-  /// A stack with random access from its top.
+#line 46 "stack.hh" // stack.hh:132
   template <class T, class S = std::vector<T> >
   class stack
   {
@@ -60,24 +57,20 @@ namespace isc { namespace dhcp {
       seq_.reserve (200);
     }
 
-    stack (unsigned n)
+    stack (unsigned int n)
       : seq_ (n)
     {}
 
-    /// Random access.
-    ///
-    /// Index 0 returns the topmost element.
+    inline
     T&
-    operator[] (unsigned i)
+    operator[] (unsigned int i)
     {
       return seq_[seq_.size () - 1 - i];
     }
 
-    /// Random access.
-    ///
-    /// Index 0 returns the topmost element.
+    inline
     const T&
-    operator[] (unsigned i) const
+    operator[] (unsigned int i) const
     {
       return seq_[seq_.size () - 1 - i];
     }
@@ -85,6 +78,7 @@ namespace isc { namespace dhcp {
     /// Steal the contents of \a t.
     ///
     /// Close to move-semantics.
+    inline
     void
     push (T& t)
     {
@@ -92,8 +86,9 @@ namespace isc { namespace dhcp {
       operator[](0).move (t);
     }
 
+    inline
     void
-    pop (unsigned n = 1)
+    pop (unsigned int n = 1)
     {
       for (; n; --n)
         seq_.pop_back ();
@@ -105,18 +100,21 @@ namespace isc { namespace dhcp {
       seq_.clear ();
     }
 
+    inline
     typename S::size_type
     size () const
     {
       return seq_.size ();
     }
 
+    inline
     const_iterator
     begin () const
     {
       return seq_.rbegin ();
     }
 
+    inline
     const_iterator
     end () const
     {
@@ -135,24 +133,25 @@ namespace isc { namespace dhcp {
   class slice
   {
   public:
-    slice (const S& stack, unsigned range)
+    slice (const S& stack, unsigned int range)
       : stack_ (stack)
       , range_ (range)
     {}
 
+    inline
     const T&
-    operator [] (unsigned i) const
+    operator [] (unsigned int i) const
     {
       return stack_[range_ - i];
     }
 
   private:
     const S& stack_;
-    unsigned range_;
+    unsigned int range_;
   };
 
-#line 14 "dhcp6_parser.yy" // stack.hh:131
+#line 14 "dhcp6_parser.yy" // stack.hh:132
 } } // isc::dhcp
-#line 155 "stack.hh" // stack.hh:131
+#line 156 "stack.hh" // stack.hh:132
 
 #endif // !YY_PARSER6_STACK_HH_INCLUDED
index ce25a1aa7e7994f515ec25bd43eedc3deaff4103..d582169a0f92db73b0cd6cb44ebaa9d6e6b6b7d3 100644 (file)
@@ -25,6 +25,7 @@
 #include <dhcpsrv/subnet_selector.h>
 #include <dhcpsrv/testutils/config_result_check.h>
 #include <hooks/hooks_manager.h>
+#include <process/config_ctl_info.h>
 
 #include "test_data_files_config.h"
 #include "test_libraries.h"
@@ -231,7 +232,31 @@ const char* PARSER_CONFIGS[] = {
     "    ]"
     "}",
 
-    // Last configuration for comments
+    // Configuration 8: config control
+    "{ \n"
+    "    \"interfaces-config\": { \n"
+    "        \"interfaces\": [\"*\" ] \n"
+    "    }, \n"
+    "    \"valid-lifetime\": 4000, \n"
+    "    \"rebind-timer\": 2000, \n"
+    "    \"renew-timer\": 1000, \n"
+    "    \"config-control\": { \n"
+    "       \"config-databases\": [ { \n"
+    "               \"type\": \"mysql\", \n"
+    "               \"name\": \"keatest1\", \n"
+    "               \"user\": \"keatest\", \n"
+    "               \"password\": \"keatest\" \n"
+    "           },{ \n"
+    "               \"type\": \"mysql\", \n"
+    "               \"name\": \"keatest2\", \n"
+    "               \"user\": \"keatest\", \n"
+    "               \"password\": \"keatest\" \n"
+    "           } \n"
+    "       ] \n"
+    "   } \n"
+    "} \n",
+
+    // Configuration 9 for comments
     "{"
     "    \"comment\": \"A DHCPv6 server\","
     "    \"server-id\": {"
@@ -6462,7 +6487,7 @@ TEST_F(Dhcp6ParserTest, hostsDatabases) {
 // This test checks comments. Please keep it last.
 TEST_F(Dhcp6ParserTest, comments) {
 
-    string config = PARSER_CONFIGS[8];
+    string config = PARSER_CONFIGS[9];
     extractConfig(config);
     configure(config, CONTROL_RESULT_SUCCESS, "");
 
@@ -6828,4 +6853,28 @@ TEST_F(Dhcp6ParserTest, globalReservations) {
     EXPECT_EQ(11, static_cast<int>(opt_prf->getValue()));
 }
 
+// This test verifies that configuration control info gets populated.
+TEST_F(Dhcp6ParserTest, configControlInfo) {
+    string config = PARSER_CONFIGS[8];
+    extractConfig(config);
+    configure(config, CONTROL_RESULT_SUCCESS, "");
+
+    // Make sure the config control info is there.
+    process::ConstConfigControlInfoPtr info =
+        CfgMgr::instance().getStagingCfg()->getConfigControlInfo();
+    ASSERT_TRUE(info);
+
+    // Fetch the list of config dbs.  It should have two entries.
+    const process::ConfigDbInfoList& dblist = info->getConfigDatabases();
+    ASSERT_EQ(2, dblist.size());
+
+    // Make sure the entries are what we expect and in the right order.
+    // (DbAccessParser creates access strings with the keywords in
+    //  alphabetical order).
+    EXPECT_EQ("name=keatest1 password=keatest type=mysql user=keatest",
+              dblist.front().getAccessString());
+    EXPECT_EQ("name=keatest2 password=keatest type=mysql user=keatest",
+              dblist.back().getAccessString());
+}
+
 };
index 5221e35f833afd808a9c9bfb6f3aadd2159941fe..7dde2d6d3a8827b530248f8a06a3bb58630d0403 100644 (file)
@@ -69,6 +69,7 @@ namespace {
 ///@{
 /// @brief extracted configurations
 const char* EXTRACTED_CONFIGS[] = {
+    // CONFIGURATION 0
 "{\n"
 "        \"interfaces-config\": {\n"
 "            \"interfaces\": [ \"*\" ],\n"
@@ -1793,11 +1794,38 @@ const char* EXTRACTED_CONFIGS[] = {
 "            }\n"
 "        ],\n"
 "        \"valid-lifetime\": 4000\n"
+"    }\n",
+    // CONFIGURATION 57
+"{\n"
+"        \"config-control\": {\n"
+"            \"config-databases\": [\n"
+"                {\n"
+"                    \"name\": \"keatest1\",\n"
+"                    \"password\": \"keatest\",\n"
+"                    \"type\": \"mysql\",\n"
+"                    \"user\": \"keatest\"\n"
+"                },\n"
+"                {\n"
+"                    \"name\": \"keatest2\",\n"
+"                    \"password\": \"keatest\",\n"
+"                    \"type\": \"mysql\",\n"
+"                    \"user\": \"keatest\"\n"
+"                }\n"
+"            ]\n"
+"        },\n"
+"        \"interfaces-config\": {\n"
+"            \"interfaces\": [ \"*\" ],\n"
+"            \"re-detect\": false\n"
+"        },\n"
+"        \"rebind-timer\": 2000,\n"
+"        \"renew-timer\": 1000,\n"
+"        \"valid-lifetime\": 4000\n"
 "    }\n"
 };
 
 /// @brief unparsed configurations
 const char* UNPARSED_CONFIGS[] = {
+    // CONFIGURATION 0
 "{\n"
 "        \"decline-probation-period\": 86400,\n"
 "        \"dhcp-ddns\": {\n"
@@ -7290,6 +7318,82 @@ const char* UNPARSED_CONFIGS[] = {
 "            }\n"
 "        ],\n"
 "        \"valid-lifetime\": 4000\n"
+"    }\n",
+    // CONFIGURATION 57
+"{\n"
+"        \"config-control\": {\n"
+"            \"config-databases\": [\n"
+"                {\n"
+"                    \"name\": \"keatest1\",\n"
+"                    \"password\": \"keatest\",\n"
+"                    \"type\": \"mysql\",\n"
+"                    \"user\": \"keatest\"\n"
+"                },\n"
+"                {\n"
+"                    \"name\": \"keatest2\",\n"
+"                    \"password\": \"keatest\",\n"
+"                    \"type\": \"mysql\",\n"
+"                    \"user\": \"keatest\"\n"
+"                }\n"
+"            ]\n"
+"        },\n"
+"        \"decline-probation-period\": 86400,\n"
+"        \"dhcp-ddns\": {\n"
+"            \"always-include-fqdn\": false,\n"
+"            \"enable-updates\": false,\n"
+"            \"generated-prefix\": \"myhost\",\n"
+"            \"hostname-char-replacement\": \"\",\n"
+"            \"hostname-char-set\": \"\",\n"
+"            \"max-queue-size\": 1024,\n"
+"            \"ncr-format\": \"JSON\",\n"
+"            \"ncr-protocol\": \"UDP\",\n"
+"            \"override-client-update\": false,\n"
+"            \"override-no-update\": false,\n"
+"            \"qualifying-suffix\": \"\",\n"
+"            \"replace-client-name\": \"never\",\n"
+"            \"sender-ip\": \"0.0.0.0\",\n"
+"            \"sender-port\": 0,\n"
+"            \"server-ip\": \"127.0.0.1\",\n"
+"            \"server-port\": 53001\n"
+"        },\n"
+"        \"dhcp4o6-port\": 0,\n"
+"        \"expired-leases-processing\": {\n"
+"            \"flush-reclaimed-timer-wait-time\": 25,\n"
+"            \"hold-reclaimed-time\": 3600,\n"
+"            \"max-reclaim-leases\": 100,\n"
+"            \"max-reclaim-time\": 250,\n"
+"            \"reclaim-timer-wait-time\": 10,\n"
+"            \"unwarned-reclaim-cycles\": 5\n"
+"        },\n"
+"        \"hooks-libraries\": [ ],\n"
+"        \"host-reservation-identifiers\": [ \"hw-address\", \"duid\" ],\n"
+"        \"interfaces-config\": {\n"
+"            \"interfaces\": [ \"*\" ],\n"
+"            \"re-detect\": false\n"
+"        },\n"
+"        \"lease-database\": {\n"
+"            \"type\": \"memfile\"\n"
+"        },\n"
+"        \"mac-sources\": [ \"any\" ],\n"
+"        \"option-data\": [ ],\n"
+"        \"option-def\": [ ],\n"
+"        \"rebind-timer\": 2000,\n"
+"        \"relay-supplied-options\": [ \"65\" ],\n"
+"        \"renew-timer\": 1000,\n"
+"        \"sanity-checks\": {\n"
+"            \"lease-checks\": \"warn\"\n"
+"        },\n"
+"        \"server-id\": {\n"
+"            \"enterprise-id\": 0,\n"
+"            \"htype\": 0,\n"
+"            \"identifier\": \"\",\n"
+"            \"persist\": true,\n"
+"            \"time\": 0,\n"
+"            \"type\": \"LLT\"\n"
+"        },\n"
+"        \"shared-networks\": [ ],\n"
+"        \"subnet6\": [ ],\n"
+"        \"valid-lifetime\": 4000\n"
 "    }\n"
 };