]> git.ipfire.org Git - thirdparty/kea.git/commitdiff
[#32,!23] dhcp4 now parses "config-control" element
authorThomas Markwalder <tmark@isc.org>
Fri, 28 Sep 2018 20:41:11 +0000 (16:41 -0400)
committerThomas Markwalder <tmark@isc.org>
Fri, 5 Oct 2018 13:17:50 +0000 (09:17 -0400)
src/bin/dhcp4/dhcp4_lexer.ll
src/bin/dhcp4/dhcp4_parser.yy
    Added parsing support for config-control and config-databases

src/bin/dhcp4/json_config_parser.cc
    configureDhcp4Server() - added handler for config-control element

src/bin/dhcp4/parser_context.*
    added CONFIG_CONTROL and CONFIG_DATABASE

src/bin/dhcp4/tests/config_parser_unittest.cc
   TEST_F(Dhcp4ParserTest, configControlInfo) - new test

14 files changed:
src/bin/dhcp4/dhcp4_lexer.cc
src/bin/dhcp4/dhcp4_lexer.ll
src/bin/dhcp4/dhcp4_lexer.yy [new file with mode: 0644]
src/bin/dhcp4/dhcp4_messages.mes
src/bin/dhcp4/dhcp4_parser.cc
src/bin/dhcp4/dhcp4_parser.h
src/bin/dhcp4/dhcp4_parser.yy
src/bin/dhcp4/json_config_parser.cc
src/bin/dhcp4/location.hh
src/bin/dhcp4/parser_context.cc
src/bin/dhcp4/parser_context.h
src/bin/dhcp4/position.hh
src/bin/dhcp4/stack.hh
src/bin/dhcp4/tests/config_parser_unittest.cc

index e2c317ace907f92bb35019b634278bba2bebbeee..6433f97d7cd9bb7792701c0ee4238222f4bc24ff 100644 (file)
@@ -1,6 +1,6 @@
-#line 1 "dhcp4_lexer.cc"
+#line 2 "dhcp4_lexer.cc"
 
-#line 3 "dhcp4_lexer.cc"
+#line 4 "dhcp4_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 171
-#define YY_END_OF_BUFFER 172
+#define YY_NUM_RULES 173
+#define YY_END_OF_BUFFER 174
 /* This struct is not used in this scanner,
    but its presence is necessary. */
 struct yy_trans_info
@@ -700,21 +700,21 @@ struct yy_trans_info
        flex_int32_t yy_verify;
        flex_int32_t yy_nxt;
        };
-static const flex_int16_t yy_accept[1428] =
+static const flex_int16_t yy_accept[1450] =
     {   0,
-      164,  164,    0,    0,    0,    0,    0,    0,    0,    0,
-      172,  170,   10,   11,  170,    1,  164,  161,  164,  164,
-      170,  163,  162,  170,  170,  170,  170,  170,  157,  158,
-      170,  170,  170,  159,  160,    5,    5,    5,  170,  170,
-      170,   10,   11,    0,    0,  153,    0,    0,    0,    0,
+      166,  166,    0,    0,    0,    0,    0,    0,    0,    0,
+      174,  172,   10,   11,  172,    1,  166,  163,  166,  166,
+      172,  165,  164,  172,  172,  172,  172,  172,  159,  160,
+      172,  172,  172,  161,  162,    5,    5,    5,  172,  172,
+      172,   10,   11,    0,    0,  155,    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,    1,
-      164,  164,    0,  163,  164,    3,    2,    6,    0,  164,
+      166,  166,    0,  165,  166,    3,    2,    6,    0,  166,
         0,    0,    0,    0,    0,    0,    4,    0,    0,    9,
 
-        0,  154,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,  156,    0,    0,    0,
+        0,  156,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,  158,    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,
@@ -724,141 +724,143 @@ static const flex_int16_t yy_accept[1428] =
         0,    0,    0,    0,    0,    8,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
 
-      155,    0,    0,    0,    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,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,   64,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,   66,    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,  169,  167,    0,  166,  165,
+        0,    0,    0,    0,    0,  171,  169,    0,  168,  167,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
 
-      134,    0,  133,    0,    0,   70,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,   32,    0,    0,    0,    0,
+      136,    0,  135,    0,    0,   72,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,   34,    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,   67,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,   17,    0,    0,    0,    0,
+        0,    0,   69,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,   17,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,   18,    0,
-        0,    0,    0,  168,  165,    0,    0,    0,    0,    0,
-
-        0,    0,    0,    0,    0,  135,    0,    0,  137,    0,
-        0,    0,    0,    0,    0,    0,   71,    0,    0,    0,
-        0,    0,   56,    0,    0,    0,    0,    0,   88,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,   35,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,   18,
+        0,    0,    0,    0,  170,  167,    0,    0,    0,    0,
+
+        0,    0,    0,    0,    0,    0,  137,    0,    0,  139,
+        0,    0,    0,    0,    0,    0,    0,   73,    0,    0,
+        0,    0,    0,    0,   58,    0,    0,    0,    0,    0,
+       90,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,   37,    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,   55,    0,
+       57,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,   61,    0,   38,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,   59,    0,   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,   85,
 
-       28,    0,    0,   33,    0,    0,    0,    0,    0,    0,
-        0,    0,   12,  142,    0,  139,    0,  138,    0,    0,
-        0,   98,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,   87,   30,    0,    0,   35,    0,    0,    0,    0,
+        0,    0,    0,    0,   12,  144,    0,  141,    0,  140,
+        0,    0,    0,  100,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,   80,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,   32,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,   78,    0,    0,    0,    0,    0,    0,    0,    0,
+       60,    0,    0,    0,    0,    0,    0,    0,    0,  101,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,   30,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,   58,    0,    0,
-        0,    0,    0,    0,    0,    0,   99,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,   94,
 
-        0,    0,    0,    0,    0,    0,    0,    7,    0,    0,
-      140,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,   96,    0,    0,    0,    0,    0,    0,    0,
+        7,    0,    0,  142,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,   69,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,   80,    0,    0,
-        0,    0,    0,    0,    0,    0,   76,    0,    0,    0,
+        0,    0,   71,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,   82,    0,    0,    0,    0,    0,    0,    0,    0,
+       78,    0,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,   62,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,   64,    0,    0,    0,
 
-        0,    0,    0,    0,   73,    0,    0,    0,    0,    0,
-        0,    0,    0,   61,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,   92,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,   75,    0,
+        0,    0,    0,    0,    0,    0,    0,   63,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,  104,   74,    0,    0,    0,    0,   79,
-       29,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,   37,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,   94,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,  106,
+       76,    0,    0,    0,    0,   81,   31,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,   39,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,   51,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,  143,    0,    0,
-
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,   66,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,   93,    0,    0,    0,    0,
-        0,   40,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,   53,    0,    0,    0,    0,    0,    0,
+
+        0,    0,    0,  145,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-       34,    0,    0,    0,   27,    0,    0,    0,    0,    0,
+        0,    0,    0,   68,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,   95,    0,    0,    0,    0,    0,   42,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,   81,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,   36,    0,
+        0,    0,   29,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,   83,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,   90,    0,    0,    0,    0,    0,    0,  116,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,   92,
 
+        0,    0,    0,    0,    0,    0,    0,    0,  118,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,   63,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,   65,    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,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,  121,
-        0,    0,  119,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,  147,    0,    0,    0,    0,    0,
-        0,   91,    0,    0,    0,    0,   95,   77,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,  123,
+        0,    0,  121,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,  149,    0,    0,    0,    0,    0,
+        0,   93,    0,    0,    0,    0,    0,    0,   97,   79,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,   89,   22,    0,  100,    0,    0,    0,    0,
 
-        0,    0,    0,    0,  125,    0,    0,    0,    0,   53,
-        0,    0,    0,    0,    0,  103,   31,    0,    0,    0,
+        0,    0,    0,    0,   91,   22,    0,  102,    0,    0,
+        0,    0,    0,    0,    0,    0,  127,    0,    0,    0,
+        0,   55,    0,    0,    0,    0,    0,  105,   33,    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,   57,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,   97,    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,  150,    0,   54,   68,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,   48,
-        0,    0,    0,    0,    0,    0,    0,  122,    0,  120,
-
-        0,  115,  114,    0,   44,    0,   21,    0,    0,    0,
-        0,    0,  136,    0,    0,   84,    0,    0,    0,    0,
-        0,    0,  112,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,  101,   15,    0,   38,    0,    0,
-        0,    0,    0,  124,    0,    0,    0,    0,    0,    0,
-       49,    0,    0,   96,    0,    0,    0,    0,   87,    0,
-        0,    0,    0,    0,    0,   60,    0,  145,    0,  144,
+        0,   99,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+      152,    0,   56,   70,    0,    0,    0,    0,    0,    0,
+
+        0,    0,    0,   50,    0,    0,    0,    0,    0,    0,
+        0,  124,    0,  122,    0,  117,  116,    0,   46,    0,
+       21,    0,    0,    0,    0,    0,  138,    0,    0,   86,
+        0,    0,    0,    0,    0,    0,    0,    0,  114,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+      103,   15,    0,   40,    0,    0,    0,    0,    0,  126,
+        0,    0,    0,    0,    0,    0,   51,    0,    0,   98,
+        0,    0,    0,    0,   89,    0,    0,    0,    0,    0,
+        0,   62,    0,  147,    0,  146,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
 
-        0,    0,    0,    0,    0,    0,    0,    0,    0,   14,
-        0,    0,   43,    0,    0,    0,    0,    0,  152,   82,
-        0,   45,  113,    0,    0,  148,  117,    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,   14,    0,    0,
+       45,    0,    0,    0,    0,    0,  154,   84,   27,    0,
+        0,   47,  115,    0,    0,  150,  119,    0,    0,    0,
         0,    0,    0,    0,    0,   25,    0,    0,   24,    0,
-      123,    0,    0,    0,    0,    0,   75,    0,    0,    0,
+      125,    0,    0,    0,    0,    0,   77,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-       47,    0,    0,    0,   39,    0,    0,    0,    0,    0,
-        0,  102,    0,    0,    0,   26,    0,  149,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,   42,
-        0,    0,   20,  151,   52,    0,  146,  141,    0,    0,
-
-       16,    0,    0,  130,    0,    0,    0,    0,    0,    0,
-      110,    0,   86,    0,    0,    0,    0,    0,    0,    0,
-        0,   65,    0,    0,    0,    0,    0,    0,    0,    0,
-      131,   13,    0,    0,    0,    0,    0,  118,    0,    0,
+       49,    0,    0,    0,    0,   41,    0,    0,    0,    0,
+        0,    0,  104,    0,    0,    0,   26,    0,  151,    0,
+
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-      109,    0,   19,    0,  127,    0,    0,    0,    0,    0,
-      126,    0,    0,    0,  108,    0,    0,   46,    0,    0,
-       41,  129,    0,    0,    0,    0,    0,    0,    0,    0,
+       44,    0,    0,   20,  153,   54,    0,  148,  143,    0,
+       28,    0,   16,    0,    0,  132,    0,    0,    0,    0,
+        0,    0,  112,    0,   88,    0,    0,    0,    0,    0,
+        0,    0,    0,   67,    0,    0,    0,    0,    0,    0,
+        0,    0,  133,   13,    0,    0,    0,    0,    0,  120,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,  128,    0,   83,
+        0,    0,  111,    0,   19,    0,  129,    0,    0,    0,
+        0,    0,  128,    0,    0,    0,  110,    0,    0,   48,
+        0,    0,   43,  131,    0,    0,    0,    0,    0,    0,
 
-        0,    0,    0,    0,    0,    0,  106,  111,   50,    0,
-        0,    0,    0,  105,    0,    0,  132,    0,    0,    0,
-        0,    0,   72,    0,    0,  107,    0
+        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,  130,
+        0,   85,    0,    0,    0,    0,    0,    0,  108,  113,
+       52,    0,    0,    0,    0,  107,    0,    0,  134,    0,
+        0,    0,    0,    0,   74,    0,    0,  109,    0
     } ;
 
 static const YY_CHAR yy_ec[256] =
@@ -905,339 +907,345 @@ static const YY_CHAR yy_meta[72] =
         3
     } ;
 
-static const flex_int16_t yy_base[1440] =
+static const flex_int16_t yy_base[1462] =
     {   0,
         0,   70,   19,   29,   41,   49,   52,   58,   87,   95,
-     1790, 1791,   32, 1786,  141,    0,  201, 1791,  206,   88,
-       11,  213, 1791, 1768,  114,   25,    2,    6, 1791, 1791,
-       73,   11,   17, 1791, 1791, 1791,  104, 1774, 1729,    0,
-     1766,  107, 1781,  217,  247, 1791, 1725,  185, 1724, 1730,
-       93,   58, 1722,   91,  211,  195,   14,  273,  195, 1721,
-      181,  275,  202,  209,   76,   68,  188, 1730,  232,  219,
-      296,  284,  207, 1713,  230,  287,  324,  305, 1732,    0,
-      339,  359,  367,  374,  379, 1791,    0, 1791,  301,  344,
-      295,  336,  196,  348,  350,  292, 1791, 1729, 1768, 1791,
-
-      355, 1791,  395, 1757,  331, 1715, 1725,  351,  367, 1720,
-      363,  370,  373,  379,  241, 1763,    0,  446,  375, 1707,
-     1709, 1705, 1713,  363, 1709, 1698, 1699,   76, 1715, 1698,
-     1707, 1707,  322, 1698,  367, 1699, 1697,  359, 1743, 1747,
-     1689, 1740, 1682, 1705, 1702, 1702, 1696,  349, 1689, 1682,
-     1687, 1681,  381, 1692, 1685, 1676, 1675, 1689,  362, 1675,
-      381, 1691, 1668,  442,  376,  390, 1689, 1686, 1687, 1685,
-      417, 1667, 1669,  418, 1661, 1678, 1670,    0,  392,  428,
-      441,  401,  445,  448, 1669, 1791,    0, 1712,  454, 1659,
-     1662,  444,  450, 1670,  457, 1713,  460, 1712,  454, 1711,
-
-     1791,  498, 1710,  482, 1671, 1651, 1667, 1664, 1663, 1654,
-       75, 1703, 1697, 1663, 1642, 1650, 1645, 1659, 1655, 1643,
-     1655, 1655, 1646, 1630, 1634, 1647, 1649, 1646, 1638, 1628,
-     1646, 1791, 1641, 1644, 1625, 1624, 1674, 1623, 1633, 1636,
-      453, 1632, 1620, 1631, 1667, 1614, 1670, 1607, 1622,  505,
-     1612, 1628, 1609, 1608, 1614, 1605, 1604, 1611, 1659, 1617,
-     1616, 1610,  470, 1617, 1612, 1604, 1594, 1609, 1608, 1603,
-     1607, 1588, 1604, 1590, 1596, 1603, 1591,  314, 1584, 1598,
-     1639, 1600,  468, 1591,  484, 1791, 1791,  485, 1791, 1791,
-     1578,    0,  465,  491, 1580,  524,  506, 1634, 1587,  501,
-
-     1791, 1632, 1791, 1626,  551, 1791,  502, 1568, 1624, 1570,
-     1576, 1626, 1583, 1582,  491, 1791, 1580, 1622, 1577, 1574,
-      538, 1580, 1618, 1612, 1567, 1562, 1559, 1608, 1567, 1556,
-     1572, 1604, 1552,  545, 1566, 1551, 1564, 1551, 1561, 1556,
-     1563, 1558, 1554,  476, 1552, 1555, 1550, 1546, 1594,  509,
-     1588, 1791, 1587, 1539, 1538, 1537, 1530, 1532, 1536, 1525,
-     1538,  532, 1583, 1538, 1535, 1791, 1538, 1527, 1527, 1539,
-      500, 1514, 1515, 1536,  530, 1518, 1567, 1514, 1528, 1527,
-     1513, 1525, 1524, 1523, 1522,  506, 1563, 1562, 1791, 1506,
-     1505,  573, 1518, 1791, 1791, 1517,    0, 1506, 1498,  521,
-
-     1503, 1554, 1553, 1511, 1551, 1791, 1499, 1549, 1791,  555,
-      601,  546, 1548, 1504, 1500, 1488, 1791, 1493, 1503, 1502,
-     1489, 1488, 1791, 1490, 1487,  190, 1485, 1487, 1791, 1495,
-     1492, 1477, 1490, 1485,  575, 1492, 1480, 1473, 1522, 1791,
-     1471, 1487, 1519, 1482, 1479, 1480, 1482, 1514, 1467, 1462,
-     1461, 1510, 1456, 1471, 1449, 1456, 1461, 1509, 1791, 1456,
-     1452, 1450, 1459, 1453, 1460, 1444, 1444, 1454, 1457, 1446,
-     1441, 1791, 1496, 1791, 1440, 1451, 1436, 1441, 1450, 1444,
-     1438, 1447, 1487, 1481, 1445, 1428, 1428, 1423, 1443, 1418,
-     1424, 1423, 1431, 1435, 1418, 1474, 1416, 1430, 1419, 1791,
-
-     1791, 1419, 1417, 1791, 1428, 1462, 1424,    0, 1408, 1425,
-     1463, 1413, 1791, 1791, 1410, 1791, 1416, 1791,  560,  559,
-      582, 1791, 1413, 1401, 1452, 1399, 1398, 1397, 1404, 1397,
-     1409, 1408, 1408, 1396, 1437, 1404, 1396, 1439, 1385, 1401,
-     1400, 1791, 1385, 1382, 1438, 1395, 1387, 1393, 1384, 1392,
-     1377, 1393, 1375, 1389,  543, 1371, 1365, 1370, 1385, 1382,
-     1383, 1380, 1421, 1378, 1791, 1364, 1366, 1375, 1373, 1410,
-     1409, 1362,  563, 1371, 1354, 1355, 1352, 1791, 1366, 1345,
-     1364, 1356, 1399, 1353, 1360, 1396, 1791, 1343, 1357, 1341,
-     1355, 1358, 1339, 1389, 1388, 1387, 1334, 1385, 1384, 1791,
-
-       14, 1346, 1346, 1344, 1327, 1332, 1334, 1791, 1340, 1330,
-     1791, 1375, 1323, 1378,  566,  580,  551, 1328, 1371,  558,
-     1375, 1369, 1368, 1367, 1321, 1311, 1364, 1317, 1327, 1361,
-     1324, 1318, 1305, 1313, 1356, 1360, 1317, 1316, 1791, 1317,
-     1310, 1299, 1312, 1315, 1310, 1311, 1308, 1307, 1303, 1309,
-     1304, 1345, 1344, 1294, 1284,  575, 1341, 1791, 1340, 1289,
-     1281, 1282, 1331, 1294, 1281, 1292, 1791, 1280, 1289, 1288,
-     1288, 1328, 1271, 1280, 1285, 1262, 1266, 1317, 1281, 1263,
-     1273, 1313, 1312, 1311, 1258, 1309, 1273,  579,  583, 1250,
-     1260,  580, 1791, 1310, 1256, 1266, 1266, 1249, 1254, 1258,
-
-     1248, 1260, 1263, 1300, 1791, 1294,  577, 1247, 1255, 1254,
-     1249, 1245, 1252, 1791, 1235, 1238, 1234, 1251, 1246, 1234,
-     1230,    5,    9,  129,  198,  229,  288,  308, 1791,  388,
-      398,  410,  436,  523,  630,  546,  557,  573,  570,  634,
-      596,  588,  591, 1791, 1791,  601,  606,  611,  599, 1791,
-     1791,  613,  600,  594,  599,  617,  604,  652,  605,  655,
-      606,  662, 1791,  609,  613,  608,  666,  621,  611,  612,
-      608,  621,  632,  616,  634,  629,  630,  632,  625,  627,
-      628,  628,  630,  683,  642,  647,  624, 1791,  649,  639,
-      684,  644,  634,  649,  650,  637,  651, 1791,  670,  678,
-
-      658,  648,  695,  660,  664,  703,  658,  653,  654,  650,
-      659,  654,  710,  669,  660, 1791,  662,  673,  658,  674,
-      668,  713,  681,  666,  667, 1791,  684,  687,  670,  727,
-      672, 1791,  689,  692,  672,  690,  728,  688,  684,  679,
-      697,  696,  697,  683,  698,  690,  697,  687,  705,  690,
-     1791,  698,  704,  749, 1791,  700,  705,  747,  700,  712,
-      706,  711,  709,  707,  709,  719,  762,  708,  708,  765,
-      711, 1791,  710,  718,  716,  721,  733,  717,  722,  732,
-      733,  738,  777,  736,  752,  757,  731,  741,  733,  785,
-      730, 1791,  737,  742,  749,  790,  791,  740, 1791,  736,
-
-      739,  738,  758,  755,  760,  761,  747,  755,  764,  744,
-      759,  766,  806, 1791,  809,  810,  763,  773,  775,  764,
-      760,  767,  776,  819,  768,  766,  768,  785,  824,  776,
-      775,  781,  779,  777,  830,  831,  827, 1791,  791,  784,
-      775,  794,  782,  792,  789,  794,  790,  803,  803, 1791,
-      787,  788, 1791,  789,  787,  806,  807,  804,  789,  811,
-      810,  794,  799,  817, 1791,  807,  840,  831,  803,  862,
-      825, 1791,  808,  823,  815,  819, 1791, 1791,  829,  864,
-      813,  866,  815,  873,  818,  829,  821,  827,  823,  841,
-      842,  843, 1791, 1791,  843, 1791,  828,  829,  848,  838,
-
-      832,  844,  886,  852, 1791,  844,  894,  837,  896, 1791,
-      897,  841,  847,  854,  896, 1791, 1791,  846,  848,  862,
-      867,  850,  907,  866,  867,  868,  906,  860,  865,  914,
-      864,  916,  865,  918,  919,  861,  921,  882,  923,  867,
-      879,  884,  870,  900,  929,  889, 1791,  881,  932,  881,
-      877,  893,  898,  880,  938,  893,  898, 1791,  899,  892,
-      901,  902,  899,  889,  892,  892,  897,  950,  951,  896,
-      953,  949,  892,  908,  901,  959, 1791,  914, 1791, 1791,
-      919,  912,  922,  908,  909,  968,  914,  924,  971, 1791,
-      921,  921,  924,  926,  977,  920,  923, 1791,  942, 1791,
-
-      926, 1791, 1791,  940, 1791,  934, 1791,  984,  935,  986,
-      987,  969, 1791,  947,  948, 1791,  936,  935,  938,  938,
-      939,  935, 1791,  957,  943,  944,  959,  959,  962,  962,
-      959, 1001,  965,  957, 1791, 1791,  967, 1791,  964,  970,
-      971,  968, 1010, 1791,  961,  962,  962,  968,  967,  978,
-     1791, 1017,  966, 1791,  967,  967,  969,  975, 1791,  977,
-     1029,  980,  983, 1032,  995, 1791,  992, 1791,  989, 1791,
-     1012, 1032, 1038, 1039,  983, 1041, 1042,  997,  991, 1045,
-     1046, 1042, 1007, 1003, 1045,  995, 1000,  998, 1055, 1013,
-     1057, 1017, 1059, 1022, 1011, 1005, 1022, 1022, 1066, 1010,
-
-     1027, 1026, 1010, 1066, 1067, 1016, 1069, 1034, 1035, 1791,
-     1035, 1022, 1791, 1033, 1080, 1040, 1053, 1040, 1791, 1791,
-     1084, 1791, 1791, 1033, 1044, 1791, 1791, 1034, 1083, 1028,
-     1033, 1091, 1041, 1051, 1052, 1791, 1095, 1050, 1791, 1097,
-     1791, 1042, 1057, 1045, 1060, 1064, 1791, 1098, 1066, 1059,
-     1068, 1050, 1057, 1109, 1072, 1071, 1114, 1115, 1116, 1067,
-     1791, 1118, 1119, 1066, 1791, 1070, 1122, 1068, 1067, 1125,
-     1080, 1791, 1122, 1075, 1072, 1791, 1086, 1791, 1089, 1132,
-     1087, 1134, 1095, 1078, 1080, 1077, 1093, 1094, 1103, 1791,
-     1093, 1143, 1791, 1791, 1791, 1139, 1791, 1791, 1104, 1141,
-
-     1791, 1095, 1102, 1791, 1099, 1104, 1102, 1152, 1153, 1098,
-     1791, 1113, 1791, 1114, 1104, 1116, 1159, 1103, 1111, 1112,
-     1125, 1791, 1124, 1114, 1113, 1127, 1118, 1127, 1129, 1133,
-     1791, 1791, 1172, 1117, 1174, 1134, 1176, 1791, 1172, 1136,
-     1137, 1124, 1119, 1182, 1141, 1142, 1143, 1186, 1145, 1148,
-     1791, 1189, 1791, 1152, 1791, 1134, 1192, 1193, 1138, 1155,
-     1791, 1141, 1141, 1143, 1791, 1148, 1158, 1791, 1144, 1156,
-     1791, 1791, 1161, 1155, 1159, 1150, 1202, 1151, 1159, 1168,
-     1161, 1156, 1171, 1162, 1169, 1156, 1171, 1176, 1219, 1178,
-     1221, 1166, 1182, 1173, 1187, 1183, 1176, 1791, 1228, 1791,
-
-     1229, 1230, 1187, 1186, 1187, 1177, 1791, 1791, 1791, 1235,
-     1179, 1195, 1238, 1791, 1234, 1185, 1791, 1184, 1186, 1197,
-     1244, 1195, 1791, 1204, 1247, 1791, 1791, 1253, 1258, 1263,
-     1268, 1273, 1278, 1283, 1286, 1260, 1265, 1267, 1280
+     1813, 1814,   32, 1809,  141,    0,  201, 1814,  206,   88,
+       11,  213, 1814, 1791,  114,   25,    2,    6, 1814, 1814,
+       73,   11,   17, 1814, 1814, 1814,  104, 1797, 1752,    0,
+     1789,  107, 1804,  217,  247, 1814, 1748,  185, 1747, 1753,
+       93,   58, 1745,   91,  211,  195,   14,  273,  195, 1744,
+      181,  275,  202,  209,   76,   68,  188, 1753,  232,  219,
+      296,  284,  207, 1736,  230,  287,  324,  305, 1755,    0,
+      339,  359,  367,  374,  379, 1814,    0, 1814,  301,  344,
+      295,  336,  196,  348,  350,  292, 1814, 1752, 1791, 1814,
+
+      355, 1814,  395, 1780,  331, 1738, 1748,  351,  367, 1743,
+      363,  370,  373,  379,  241, 1786,    0,  446,  375, 1730,
+     1732, 1728, 1736,  363, 1732, 1721, 1722,   76, 1738, 1721,
+     1730, 1730,  322, 1721,  367, 1722, 1720,  359, 1766, 1770,
+     1712, 1763, 1705, 1728, 1725, 1725, 1719,  349, 1712, 1705,
+     1710, 1704,  381, 1715, 1708, 1699, 1698, 1712,  362, 1698,
+      381, 1714, 1691,  442,  376,  390, 1712, 1709, 1710, 1708,
+      417, 1690, 1692,  418, 1684, 1701, 1693,    0,  392,  428,
+      441,  401,  445,  448, 1692, 1814,    0, 1735,  454, 1682,
+     1685,  444,  450, 1693,  457, 1736,  460, 1735,  454, 1734,
+
+     1814,  498, 1733,  482, 1694, 1674, 1690, 1687, 1686, 1677,
+      468, 1726, 1720, 1686, 1665, 1673, 1668, 1682, 1678, 1666,
+     1678, 1678, 1669, 1653, 1657, 1670, 1672, 1669, 1661, 1651,
+     1669, 1814, 1664, 1667, 1648, 1647, 1697, 1646, 1656, 1659,
+      453, 1655, 1643, 1654, 1690, 1637, 1693, 1630, 1645,  505,
+     1635, 1651, 1632, 1631, 1637, 1628, 1627, 1634, 1682, 1640,
+     1639, 1633,   77, 1640, 1635, 1627, 1617, 1632, 1631, 1626,
+     1630, 1611, 1627, 1613, 1619, 1626, 1614,  314, 1607, 1621,
+     1662, 1623,  468, 1614,  484, 1814, 1814,  485, 1814, 1814,
+     1601,    0,  475,  489, 1603,  524,  505, 1657, 1610,  501,
+
+     1814, 1655, 1814, 1649,  551, 1814,  502, 1591, 1647, 1593,
+     1599, 1649, 1606, 1601, 1604,  491, 1814, 1602, 1644, 1599,
+     1596,  540, 1602, 1640, 1634, 1589, 1584, 1581, 1630, 1589,
+     1578, 1594, 1626, 1574,  548, 1588, 1573, 1586, 1573, 1583,
+     1578, 1585, 1580, 1576,  500, 1574, 1577, 1572, 1568, 1616,
+      509, 1610, 1814, 1609, 1561, 1560, 1559, 1552, 1554, 1558,
+     1547, 1560,  530, 1605, 1560, 1557, 1814, 1560, 1549, 1549,
+     1561,  521, 1536, 1537, 1558,  531, 1540, 1589, 1536, 1550,
+     1549, 1535, 1547, 1546, 1545, 1544,  527, 1585, 1584, 1814,
+     1528, 1527,  574, 1540, 1814, 1814, 1539,    0, 1528, 1520,
+
+      529, 1525, 1576, 1575, 1533, 1573, 1814, 1521, 1571, 1814,
+      556,  602,  559, 1570, 1526, 1522, 1510, 1814, 1515, 1521,
+     1524, 1523, 1510, 1509, 1814, 1511, 1508,  190, 1506, 1508,
+     1814, 1516, 1513, 1498, 1511, 1506,  583, 1513, 1501, 1494,
+     1543, 1814, 1492, 1508, 1540, 1503, 1500, 1501, 1503, 1535,
+     1488, 1483, 1482, 1531, 1477, 1492, 1470, 1477, 1482, 1530,
+     1814, 1477, 1473, 1471, 1480, 1474, 1481, 1465, 1465, 1475,
+     1478, 1467, 1462, 1814, 1517, 1814, 1461, 1472, 1457, 1462,
+     1471, 1465, 1459, 1468, 1508, 1502, 1466, 1449, 1449, 1444,
+     1464, 1439, 1445, 1444, 1452, 1456, 1439, 1495, 1437, 1451,
+
+     1440, 1814, 1814, 1440, 1438, 1814, 1449, 1483, 1445,    0,
+     1429, 1446, 1484, 1434, 1814, 1814, 1431, 1814, 1437, 1814,
+      556,  568,  596, 1814, 1434, 1422, 1473, 1420, 1471, 1418,
+     1417, 1424, 1417, 1429, 1428, 1428, 1416, 1457, 1424, 1416,
+     1459, 1405, 1421, 1420, 1814, 1405, 1402, 1458, 1415, 1407,
+     1413, 1404, 1412, 1397, 1413, 1395, 1409,  557, 1391, 1385,
+     1390, 1405, 1402, 1403, 1400, 1441, 1398, 1814, 1384, 1386,
+     1395, 1393, 1430, 1429, 1382,  563, 1391, 1374, 1375, 1372,
+     1814, 1386, 1365, 1384, 1376, 1419, 1373, 1380, 1416, 1814,
+     1363, 1377, 1361, 1375, 1378, 1359, 1409, 1408, 1407, 1354,
+
+     1405, 1404, 1814,   14, 1366, 1366, 1364, 1347, 1352, 1354,
+     1814, 1360, 1350, 1814, 1395, 1343, 1398,  573,  584,  560,
+     1348, 1391,  585, 1395,  573, 1389, 1388, 1387, 1341, 1331,
+     1384, 1337, 1347, 1381, 1344, 1338, 1325, 1333, 1376, 1380,
+     1337, 1336, 1814, 1337, 1330, 1319, 1332, 1335, 1330, 1331,
+     1328, 1327, 1323, 1329, 1324, 1365, 1364, 1314, 1304,  575,
+     1361, 1814, 1360, 1309, 1301, 1302, 1351, 1314, 1301, 1312,
+     1814, 1300, 1309, 1308, 1308, 1348, 1291, 1300, 1305, 1282,
+     1286, 1337, 1301, 1283, 1293, 1333, 1332, 1331, 1278, 1329,
+     1293,  497,  583, 1270, 1280,  581, 1814, 1330, 1276, 1286,
+
+     1286, 1269, 1274, 1278, 1268, 1280, 1283, 1320, 1814, 1314,
+      577, 1267, 1275, 1274, 1269, 1265, 1272, 1814, 1260, 1273,
+     1253, 1256,    6,   94,  198,  229,  270,  309,  375,  439,
+      417,  422,  494,  516, 1814,  544,  593,  586,  598,  597,
+      646,  590,  592,  607,  594,  652,  611,  597,  600, 1814,
+     1814,  610,  615,  620,  608, 1814, 1814,  622,  609,  603,
+      608,  626,  613,  661,  614,  664,  615,  671, 1814,  618,
+      622,  617,  675,  630,  620,  621,  617,  630,  641,  625,
+      643,  638,  639,  641,  634,  636,  637,  637,  639,  692,
+      651,  656,  633, 1814,  658,  648,  693,  653,  643,  658,
+
+      659,  646,  660, 1814,  679,  687,  667,  657,  704,  669,
+      673,  712,  662,  657,  669,  664,  665,  661,  670,  665,
+      721,  680,  671, 1814,  673,  684,  669,  685,  679,  725,
+      693,  678,  679, 1814,  695,  698,  681,  738,  683, 1814,
+      700,  703,  683,  701,  739,  699,  695,  690,  708,  707,
+      708,  694,  709,  701,  708,  698,  716,  701, 1814,  709,
+      715,  760, 1814,  711,  716,  758,  711,  723,  717,  722,
+      720,  718,  720,  730,  773,  719,  719,  776,  722, 1814,
+      721,  729,  727,  732,  744,  728,  733,  743,  744,  749,
+      788,  747,  763,  768,  742,  752,  744,  796,  741, 1814,
+
+      741,  761,  750,  755,  762,  803,  804,  753, 1814,  749,
+      752,  751,  771,  768,  773,  774,  760,  768,  777,  757,
+      772,  781,  821, 1814,  822,  823,  776,  786,  788,  777,
+      773,  780,  789,  832,  781,  779,  781,  798,  837,  789,
+      788,  794,  792,  790,  843,  844,  840, 1814,  804,  797,
+      788,  807,  795,  805,  802,  807,  803,  816,  816, 1814,
+      800,  801, 1814,  802,  800,  819,  820,  817,  802,  824,
+      823,  807,  812,  830, 1814,  820,  853,  844,  816,  875,
+      838, 1814,  821,  823,  840,  838,  830,  834, 1814, 1814,
+      844,  879,  828,  881,  830,  888,  833,  844,  836,  842,
+
+      838,  856,  858,  859, 1814, 1814,  858, 1814,  843,  844,
+      864,  854,  847,  859,  901,  867, 1814,  859,  909,  852,
+      911, 1814,  912,  856,  862,  869,  911, 1814, 1814,  861,
+      863,  877,  882,  865,  922,  881,  882,  883,  921,  875,
+      880,  929,  879,  931,  880,  933,  934,  876,  936,  897,
+      938,  882,  894,  899,  885,  915,  944,  904, 1814,  896,
+      947,  896,  911,  898,  894,  910,  915,  897,  955,  910,
+      915, 1814,  916,  909,  918,  919,  916,  906,  909,  909,
+      914,  967,  968,  913,  970,  967,  910,  925,  918,  976,
+     1814,  932, 1814, 1814,  937,  929,  939,  925,  926,  985,
+
+      931,  941,  988, 1814,  939,  939,  941,  943,  994,  937,
+      940, 1814,  959, 1814,  943, 1814, 1814,  957, 1814,  951,
+     1814, 1001,  952, 1003, 1004,  986, 1814,  964,  965, 1814,
+      953,  961,  955,  954,  957,  957,  958,  954, 1814,  976,
+      962,  963,  978,  978,  981,  981,  978, 1020,  984,  976,
+     1814, 1814,  987, 1814,  984,  989,  990,  987, 1029, 1814,
+      980,  981,  981,  987,  986,  997, 1814, 1036,  985, 1814,
+      986,  986,  988,  994, 1814,  996, 1048,  999, 1002, 1051,
+     1014, 1814, 1011, 1814, 1008, 1814, 1031, 1051, 1057, 1058,
+     1059, 1018, 1004, 1062, 1063, 1018, 1012, 1066, 1067, 1063,
+
+     1028, 1024, 1066, 1016, 1021, 1019, 1076, 1034, 1078, 1038,
+     1080, 1043, 1033, 1027, 1043, 1043, 1087, 1031, 1048, 1047,
+     1031, 1087, 1088, 1037, 1090, 1055, 1056, 1814, 1056, 1043,
+     1814, 1054, 1101, 1061, 1074, 1061, 1814, 1814, 1814, 1049,
+     1106, 1814, 1814, 1055, 1066, 1814, 1814, 1056, 1105, 1050,
+     1055, 1113, 1063, 1073, 1074, 1814, 1117, 1072, 1814, 1119,
+     1814, 1064, 1079, 1067, 1082, 1086, 1814, 1120, 1088, 1081,
+     1090, 1072, 1079, 1133, 1094, 1093, 1136, 1137, 1138, 1089,
+     1814, 1140, 1141, 1088, 1143, 1814, 1093, 1145, 1091, 1090,
+     1148, 1103, 1814, 1145, 1098, 1095, 1814, 1109, 1814, 1112,
+
+     1155, 1110, 1157, 1118, 1101, 1103, 1100, 1116, 1117, 1126,
+     1814, 1116, 1166, 1814, 1814, 1814, 1162, 1814, 1814, 1127,
+     1814, 1164, 1814, 1118, 1125, 1814, 1122, 1127, 1125, 1175,
+     1176, 1121, 1814, 1136, 1814, 1137, 1127, 1139, 1182, 1126,
+     1134, 1135, 1148, 1814, 1147, 1137, 1136, 1150, 1141, 1150,
+     1152, 1156, 1814, 1814, 1195, 1140, 1197, 1157, 1199, 1814,
+     1195, 1159, 1160, 1147, 1142, 1205, 1164, 1165, 1166, 1209,
+     1168, 1171, 1814, 1212, 1814, 1175, 1814, 1157, 1215, 1216,
+     1161, 1178, 1814, 1164, 1164, 1166, 1814, 1171, 1181, 1814,
+     1167, 1179, 1814, 1814, 1184, 1178, 1182, 1173, 1225, 1174,
+
+     1182, 1191, 1184, 1179, 1194, 1185, 1192, 1179, 1194, 1199,
+     1242, 1201, 1244, 1189, 1205, 1196, 1210, 1206, 1199, 1814,
+     1251, 1814, 1252, 1253, 1210, 1209, 1210, 1200, 1814, 1814,
+     1814, 1258, 1202, 1218, 1261, 1814, 1257, 1208, 1814, 1207,
+     1209, 1220, 1267, 1218, 1814, 1227, 1270, 1814, 1814, 1276,
+     1281, 1286, 1291, 1296, 1301, 1306, 1309, 1283, 1288, 1290,
+     1303
     } ;
 
-static const flex_int16_t yy_def[1440] =
+static const flex_int16_t yy_def[1462] =
     {   0,
-     1428, 1428, 1429, 1429, 1428, 1428, 1428, 1428, 1428, 1428,
-     1427, 1427, 1427, 1427, 1427, 1430, 1427, 1427, 1427, 1427,
-     1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427,
-     1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1431,
-     1427, 1427, 1427, 1432,   15, 1427,   45,   45,   45,   45,
-       45,   45,   45,   45,   45,   45,   45, 1433,   45,   45,
+     1450, 1450, 1451, 1451, 1450, 1450, 1450, 1450, 1450, 1450,
+     1449, 1449, 1449, 1449, 1449, 1452, 1449, 1449, 1449, 1449,
+     1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449,
+     1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1453,
+     1449, 1449, 1449, 1454,   15, 1449,   45,   45,   45,   45,
+       45,   45,   45,   45,   45,   45,   45, 1455,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,   45,   45,   45,   45,   45, 1430,
-     1427, 1427, 1427, 1427, 1427, 1427, 1434, 1427, 1427, 1427,
-     1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1431, 1427,
+       45,   45,   45,   45,   45,   45,   45,   45,   45, 1452,
+     1449, 1449, 1449, 1449, 1449, 1449, 1456, 1449, 1449, 1449,
+     1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1453, 1449,
 
-     1432, 1427, 1427,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,   45, 1435,   45, 1433,   45,   45,
+     1454, 1449, 1449,   45,   45,   45,   45,   45,   45,   45,
+       45,   45,   45,   45,   45, 1457,   45, 1455,   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,   45, 1434, 1427, 1427,
-     1427, 1427, 1427, 1427, 1427, 1427, 1436,   45,   45,   45,
-       45,   45,   45,   45,   45,   45,   45,   45,   45, 1435,
+       45,   45,   45,   45,   45,   45,   45, 1456, 1449, 1449,
+     1449, 1449, 1449, 1449, 1449, 1449, 1458,   45,   45,   45,
+       45,   45,   45,   45,   45,   45,   45,   45,   45, 1457,
 
-     1427, 1433,   45,   45,   45,   45,   45,   45,   45,   45,
+     1449, 1455,   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, 1427,   45,   45,   45,   45,   45,   45,   45,   45,
+       45, 1449,   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, 1427, 1427, 1427, 1427, 1427, 1427,
-     1427, 1437,   45,   45,   45,   45,   45,   45,   45,   45,
+       45,   45,   45,   45, 1449, 1449, 1449, 1449, 1449, 1449,
+     1449, 1459,   45,   45,   45,   45,   45,   45,   45,   45,
 
-     1427,   45, 1427,   45, 1433, 1427,   45,   45,   45,   45,
-       45,   45,   45,   45,   45, 1427,   45,   45,   45,   45,
+     1449,   45, 1449,   45, 1455, 1449,   45,   45,   45,   45,
+       45,   45,   45,   45,   45,   45, 1449,   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, 1427,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,   45, 1427,   45,   45,   45,   45,
+       45,   45, 1449,   45,   45,   45,   45,   45,   45,   45,
+       45,   45,   45,   45,   45,   45, 1449,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,   45,   45,   45,   45, 1427,   45,
-       45,   45,   45, 1427, 1427, 1427, 1438,   45,   45,   45,
-
-       45,   45,   45,   45,   45, 1427,   45,   45, 1427,   45,
-     1433,   45,   45,   45,   45,   45, 1427,   45,   45,   45,
-       45,   45, 1427,   45,   45,   45,   45,   45, 1427,   45,
-       45,   45,   45,   45,   45,   45,   45,   45,   45, 1427,
+       45,   45,   45,   45,   45,   45,   45,   45,   45, 1449,
+       45,   45,   45,   45, 1449, 1449, 1449, 1460,   45,   45,
+
+       45,   45,   45,   45,   45,   45, 1449,   45,   45, 1449,
+       45, 1455,   45,   45,   45,   45,   45, 1449,   45,   45,
+       45,   45,   45,   45, 1449,   45,   45,   45,   45,   45,
+     1449,   45,   45,   45,   45,   45,   45,   45,   45,   45,
+       45, 1449,   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, 1427,   45,
+     1449,   45,   45,   45,   45,   45,   45,   45,   45,   45,
+       45,   45,   45, 1449,   45, 1449,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45, 1427,   45, 1427,   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, 1427,
 
-     1427,   45,   45, 1427,   45,   45, 1427, 1439,   45,   45,
-       45,   45, 1427, 1427,   45, 1427,   45, 1427,   45,   45,
-       45, 1427,   45,   45,   45,   45,   45,   45,   45,   45,
+       45, 1449, 1449,   45,   45, 1449,   45,   45, 1449, 1461,
+       45,   45,   45,   45, 1449, 1449,   45, 1449,   45, 1449,
+       45,   45,   45, 1449,   45,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45, 1427,   45,   45,   45,   45,   45,   45,   45,   45,
+       45,   45,   45,   45, 1449,   45,   45,   45,   45,   45,
+       45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
+       45,   45,   45,   45,   45,   45,   45, 1449,   45,   45,
+       45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
+     1449,   45,   45,   45,   45,   45,   45,   45,   45, 1449,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45, 1427,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,   45,   45,   45, 1427,   45,   45,
-       45,   45,   45,   45,   45,   45, 1427,   45,   45,   45,
-       45,   45,   45,   45,   45,   45,   45,   45,   45, 1427,
 
-       45,   45,   45,   45,   45,   45,   45, 1427,   45,   45,
-     1427,   45,   45,   45,   45,   45,   45,   45,   45,   45,
+       45,   45, 1449,   45,   45,   45,   45,   45,   45,   45,
+     1449,   45,   45, 1449,   45,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,   45,   45,   45,   45, 1427,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,   45,   45,   45, 1427,   45,   45,
-       45,   45,   45,   45,   45,   45, 1427,   45,   45,   45,
+       45,   45, 1449,   45,   45,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
+       45, 1449,   45,   45,   45,   45,   45,   45,   45,   45,
+     1449,   45,   45,   45,   45,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45, 1427,   45,   45,   45,   45,   45,   45,   45,
+       45,   45,   45,   45,   45,   45, 1449,   45,   45,   45,
 
-       45,   45,   45,   45, 1427,   45,   45,   45,   45,   45,
-       45,   45,   45, 1427,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,   45,   45,   45,   45, 1427,   45,
+       45,   45,   45,   45,   45,   45,   45,   45, 1449,   45,
+       45,   45,   45,   45,   45,   45,   45, 1449,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45, 1427, 1427,   45,   45,   45,   45, 1427,
-     1427,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45, 1427,   45,   45,   45,   45,   45,   45,   45,
+       45,   45,   45,   45, 1449,   45,   45,   45,   45,   45,
+       45,   45,   45,   45,   45,   45,   45,   45,   45, 1449,
+     1449,   45,   45,   45,   45, 1449, 1449,   45,   45,   45,
+       45,   45,   45,   45,   45,   45,   45,   45, 1449,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,   45,   45,   45, 1427,   45,   45,
-       45,   45,   45,   45,   45,   45,   45, 1427,   45,   45,
-
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,   45, 1427,   45,   45,   45,   45,
-       45,   45,   45,   45,   45, 1427,   45,   45,   45,   45,
-       45, 1427,   45,   45,   45,   45,   45,   45,   45,   45,
+       45,   45,   45, 1449,   45,   45,   45,   45,   45,   45,
+
+       45,   45,   45, 1449,   45,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-     1427,   45,   45,   45, 1427,   45,   45,   45,   45,   45,
+       45,   45,   45, 1449,   45,   45,   45,   45,   45,   45,
+       45,   45,   45, 1449,   45,   45,   45,   45,   45, 1449,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45, 1427,   45,   45,   45,   45,   45,   45,   45,   45,
+       45,   45,   45,   45,   45,   45,   45,   45, 1449,   45,
+       45,   45, 1449,   45,   45,   45,   45,   45,   45,   45,
+       45,   45,   45,   45,   45,   45,   45,   45,   45, 1449,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45, 1427,   45,   45,   45,   45,   45,   45, 1427,   45,
+       45,   45,   45,   45,   45,   45,   45,   45,   45, 1449,
 
+       45,   45,   45,   45,   45,   45,   45,   45, 1449,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45, 1427,   45,   45,   45,   45,   45,   45,
+       45,   45,   45, 1449,   45,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,   45,   45,   45, 1427,   45,   45,
-       45,   45,   45,   45,   45,   45,   45,   45,   45, 1427,
-       45,   45, 1427,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45, 1427,   45,   45,   45,   45,   45,
-       45, 1427,   45,   45,   45,   45, 1427, 1427,   45,   45,
+       45,   45,   45,   45,   45,   45,   45, 1449,   45,   45,
+       45,   45,   45,   45,   45,   45,   45,   45,   45, 1449,
+       45,   45, 1449,   45,   45,   45,   45,   45,   45,   45,
+       45,   45,   45,   45, 1449,   45,   45,   45,   45,   45,
+       45, 1449,   45,   45,   45,   45,   45,   45, 1449, 1449,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45, 1427, 1427,   45, 1427,   45,   45,   45,   45,
 
-       45,   45,   45,   45, 1427,   45,   45,   45,   45, 1427,
-       45,   45,   45,   45,   45, 1427, 1427,   45,   45,   45,
+       45,   45,   45,   45, 1449, 1449,   45, 1449,   45,   45,
+       45,   45,   45,   45,   45,   45, 1449,   45,   45,   45,
+       45, 1449,   45,   45,   45,   45,   45, 1449, 1449,   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, 1427,   45,   45,   45,
-       45,   45,   45,   45,   45,   45,   45, 1427,   45,   45,
+       45,   45,   45,   45,   45,   45,   45,   45, 1449,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,   45,   45, 1427,   45, 1427, 1427,
-       45,   45,   45,   45,   45,   45,   45,   45,   45, 1427,
-       45,   45,   45,   45,   45,   45,   45, 1427,   45, 1427,
-
-       45, 1427, 1427,   45, 1427,   45, 1427,   45,   45,   45,
-       45,   45, 1427,   45,   45, 1427,   45,   45,   45,   45,
-       45,   45, 1427,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45, 1427, 1427,   45, 1427,   45,   45,
-       45,   45,   45, 1427,   45,   45,   45,   45,   45,   45,
-     1427,   45,   45, 1427,   45,   45,   45,   45, 1427,   45,
-       45,   45,   45,   45,   45, 1427,   45, 1427,   45, 1427,
+       45, 1449,   45,   45,   45,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
+     1449,   45, 1449, 1449,   45,   45,   45,   45,   45,   45,
+
+       45,   45,   45, 1449,   45,   45,   45,   45,   45,   45,
+       45, 1449,   45, 1449,   45, 1449, 1449,   45, 1449,   45,
+     1449,   45,   45,   45,   45,   45, 1449,   45,   45, 1449,
+       45,   45,   45,   45,   45,   45,   45,   45, 1449,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
+     1449, 1449,   45, 1449,   45,   45,   45,   45,   45, 1449,
+       45,   45,   45,   45,   45,   45, 1449,   45,   45, 1449,
+       45,   45,   45,   45, 1449,   45,   45,   45,   45,   45,
+       45, 1449,   45, 1449,   45, 1449,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
 
-       45,   45,   45,   45,   45,   45,   45,   45,   45, 1427,
-       45,   45, 1427,   45,   45,   45,   45,   45, 1427, 1427,
-       45, 1427, 1427,   45,   45, 1427, 1427,   45,   45,   45,
-       45,   45,   45,   45,   45, 1427,   45,   45, 1427,   45,
-     1427,   45,   45,   45,   45,   45, 1427,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-     1427,   45,   45,   45, 1427,   45,   45,   45,   45,   45,
-       45, 1427,   45,   45,   45, 1427,   45, 1427,   45,   45,
-       45,   45,   45,   45,   45,   45,   45,   45,   45, 1427,
-       45,   45, 1427, 1427, 1427,   45, 1427, 1427,   45,   45,
-
-     1427,   45,   45, 1427,   45,   45,   45,   45,   45,   45,
-     1427,   45, 1427,   45,   45,   45,   45,   45,   45,   45,
-       45, 1427,   45,   45,   45,   45,   45,   45,   45,   45,
-     1427, 1427,   45,   45,   45,   45,   45, 1427,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-     1427,   45, 1427,   45, 1427,   45,   45,   45,   45,   45,
-     1427,   45,   45,   45, 1427,   45,   45, 1427,   45,   45,
-     1427, 1427,   45,   45,   45,   45,   45,   45,   45,   45,
+       45,   45,   45,   45,   45,   45,   45, 1449,   45,   45,
+     1449,   45,   45,   45,   45,   45, 1449, 1449, 1449,   45,
+       45, 1449, 1449,   45,   45, 1449, 1449,   45,   45,   45,
+       45,   45,   45,   45,   45, 1449,   45,   45, 1449,   45,
+     1449,   45,   45,   45,   45,   45, 1449,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,   45,   45,   45, 1427,   45, 1427,
+     1449,   45,   45,   45,   45, 1449,   45,   45,   45,   45,
+       45,   45, 1449,   45,   45,   45, 1449,   45, 1449,   45,
 
-       45,   45,   45,   45,   45,   45, 1427, 1427, 1427,   45,
-       45,   45,   45, 1427,   45,   45, 1427,   45,   45,   45,
-       45,   45, 1427,   45,   45, 1427,    0, 1427, 1427, 1427,
-     1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427
+       45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
+     1449,   45,   45, 1449, 1449, 1449,   45, 1449, 1449,   45,
+     1449,   45, 1449,   45,   45, 1449,   45,   45,   45,   45,
+       45,   45, 1449,   45, 1449,   45,   45,   45,   45,   45,
+       45,   45,   45, 1449,   45,   45,   45,   45,   45,   45,
+       45,   45, 1449, 1449,   45,   45,   45,   45,   45, 1449,
+       45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
+       45,   45, 1449,   45, 1449,   45, 1449,   45,   45,   45,
+       45,   45, 1449,   45,   45,   45, 1449,   45,   45, 1449,
+       45,   45, 1449, 1449,   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, 1449,
+       45, 1449,   45,   45,   45,   45,   45,   45, 1449, 1449,
+     1449,   45,   45,   45,   45, 1449,   45,   45, 1449,   45,
+       45,   45,   45,   45, 1449,   45,   45, 1449,    0, 1449,
+     1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449,
+     1449
     } ;
 
-static const flex_int16_t yy_nxt[1863] =
+static const flex_int16_t yy_nxt[1886] =
     {   0,
-     1427,   13,   14,   13, 1427,   15,   16, 1427,   17,   18,
-       19,   20,   21,   22,   22,   22,   23,   24,   86,  693,
-       37,   14,   37,   87,   25,   26,   38, 1427,  694,   27,
+     1449,   13,   14,   13, 1449,   15,   16, 1449,   17,   18,
+       19,   20,   21,   22,   22,   22,   23,   24,   86,  697,
+       37,   14,   37,   87,   25,   26,   38, 1449,  698,   27,
        37,   14,   37,   42,   28,   42,   38,   92,   93,   29,
       115,   30,   13,   14,   13,   91,   92,   25,   31,   93,
-       13,   14,   13,   13,   14,   13,   32,   40,  814,   13,
-       14,   13,   33,   40,  115,   92,   93,  815,   91,   34,
+       13,   14,   13,   13,   14,   13,   32,   40, 1449,   13,
+       14,   13,   33,   40,  115,   92,   93,  817,   91,   34,
        35,   13,   14,   13,   95,   15,   16,   96,   17,   18,
        19,   20,   21,   22,   22,   22,   23,   24,   13,   14,
        13,  109,   39,   91,   25,   26,   13,   14,   13,   27,
@@ -1245,7 +1253,7 @@ static const flex_int16_t yy_nxt[1863] =
        39,   85,   85,   85,   28,   42,   41,   42,   42,   29,
        42,   30,   83,  108,   41,  111,   94,   25,   31,  109,
       215,  216,   89,  136,   89,  138,   32,   90,   90,   90,
-      137,  314,   33,  139,  816,   83,  108,  315,  111,   34,
+      137,  371,   33,  139,  372,   83,  108,  818,  111,   34,
        35,   44,   44,   44,   45,   45,   46,   45,   45,   45,
        45,   45,   45,   45,   45,   47,   45,   45,   45,   45,
        45,   48,   45,   49,   50,   45,   51,   45,   52,   53,
@@ -1256,21 +1264,21 @@ static const flex_int16_t yy_nxt[1863] =
        74,   75,   76,   77,   78,   79,   57,   45,   45,   45,
        45,   45,   81,  105,   82,   82,   82,   81,  114,   84,
        84,   84,  102,  105,   81,   83,   84,   84,   84,  108,
-       83,  181,  122,  112,  140,  123,  533,   83,  124,  105,
-      125,  114,  126,  113,  141,  817,  142,  132,   83,  119,
-      159,  534,  108,   83,  160,  120,  112,  103,  133,  181,
+       83,  181,  122,  112,  140,  123,  536,   83,  124,  105,
+      125,  114,  126,  113,  141,  819,  142,  132,   83,  119,
+      159,  537,  108,   83,  160,  120,  112,  103,  133,  181,
        83,   45,  148,  135,  161,  199,  149,   45,  134,   45,
        45,  113,   45,  163,   45,   45,   45,  164,  117,  144,
-      145,   45,   45,  146,   45,   45,  150,  818,  199,  147,
+      145,   45,   45,  146,   45,   45,  150,  820,  199,  147,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
 
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   90,   90,   90,   45,  127,  301,
-      111,   45,  128,  179,  386,  129,  130,  181,  114,   45,
-      165,  819,  154,   45,  166,   45,  118,  167,  131,  151,
+      111,   45,  128,  179,  387,  129,  130,  181,  114,   45,
+      165,  821,  154,   45,  166,   45,  118,  167,  131,  151,
       155,  152,  156,  153,  168,  169,  112,  157,  158,  179,
       170,  174,   85,   85,   85,  184,  113,   90,   90,   90,
-      102,  175,  820,   83,  180,  221,  176,  222,  189,  171,
+      102,  175,  822,   83,  180,  221,  176,  222,  189,  171,
        81,  172,   82,   82,   82,   89,  179,   89,  180,  192,
        90,   90,   90,   83,  113,   81,   83,   84,   84,   84,
       180,  173,   85,   85,   85,  103,  189,  193,   83,  195,
@@ -1278,174 +1286,176 @@ static const flex_int16_t yy_nxt[1863] =
       101,  196,  182,   83,  183,  192,   83,  101,  197,  209,
       198,  240,  189,  228,  224,  241,  229,  195,  210,  211,
       230,   83,  252,  253,  193,  285,   83,  195,  196,  203,
-      225,  269,  270,  821,  285,  101,  197,  198,  255,  101,
-      204,  256,  257,  101,  822,  195,  271,  246,  196,  198,
+      225,  269,  270,  823,  285,  101,  197,  198,  255,  101,
+      204,  256,  257,  101,  824,  195,  271,  246,  196,  198,
       272,  101,  260,  285,  273,  101,  286,  101,  187,  202,
-      202,  202,  288,  344,  823,  287,  202,  202,  202,  202,
-      202,  202,  287,  286,  294,  278,  281,  297,  391,  298,
-      824,  300,  286,  304,  302,  261,  262,  263,  287,  202,
+      202,  202,  288,  345,  825,  287,  202,  202,  202,  202,
+      202,  202,  287,  286,  294,  278,  281,  297,  392,  298,
+      826,  300,  286,  304,  302,  261,  262,  263,  287,  202,
       202,  202,  202,  202,  202,  290,  264,  294,  265,  289,
 
-      266,  267,  294,  268,  300,  297,  298,  302,  394,  394,
-      304,  305,  305,  305,  345,  355,  398,  346,  305,  305,
-      305,  305,  305,  305,  370,  307,  399,  371,  392,  400,
-      405,  394,  395,  408,  420,  453,  454,  472,  402,  403,
-      400,  305,  305,  305,  305,  305,  305,  404,  426,  356,
-      440,  421,  427,  405,  511,  441,  481,  460,  400,  498,
-      482,  408,  499,  357,  411,  411,  411,  461,  667,  412,
-      825,  411,  411,  411,  411,  411,  411,  486,  504,  511,
-      542,  487,  511,  505,  519,  543,  520,  611,  649,  650,
-      615,  616,  617,  473,  411,  411,  411,  411,  411,  411,
-
-      706,  442,  708,  712,  707,  668,  443,  521,  828,  713,
-      800,  519,  709,  520,   45,   45,   45,  615,  829,  616,
-      830,   45,   45,   45,   45,   45,   45,  707,  706,  748,
-      779,  831,  749,  781,  782,  826,  786,  780,  800,  832,
-      827,  783,  787,  833,   45,   45,   45,   45,   45,   45,
-      834,  835,  836,  837,  838,  839,  840,  841,  842,  843,
-      844,  846,  847,  848,  845,  849,  850,  851,  852,  853,
-      854,  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,  880,  881,  882,  883,
-
-      884,  885,  886,  887,  888,  889,  890,  891,  892,  893,
-      894,  895,  896,  897,  898,  899,  900,  901,  902,  903,
-      904,  905,  906,  907,  908,  886,  909,  910,  885,  911,
-      912,  913,  914,  916,  917,  918,  919,  920,  921,  922,
-      923,  924,  925,  926,  927,  928,  929,  930,  931,  932,
-      933,  935,  936,  937,  938,  939,  940,  941,  942,  943,
-      944,  934,  945,  946,  947,  948,  949,  950,  951,  952,
-      953,  954,  955,  956,  957,  958,  959,  960,  961,  962,
-      963,  964,  965,  966,  967,  969,  968,  970,  915,  971,
-      972,  973,  974,  975,  976,  977,  978,  979,  980,  981,
-
-      982,  983,  984,  985,  986,  987,  988,  989,  990,  991,
-      992,  993,  967,  968,  994,  996,  998,  999, 1000,  995,
-     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, 1036, 1037,  997, 1038, 1039,
+      266,  267,  294,  268,  300,  297,  298,  302,  395,  395,
+      304,  305,  305,  305,  346,  356,  314,  347,  305,  305,
+      305,  305,  305,  305,  315,  307,  399,  401,  393,  406,
+      316,  395,  396,  409,  422,  474,  400,  827,  403,  404,
+      401,  305,  305,  305,  305,  305,  305,  405,  785,  357,
+      428,  423,  406,  442,  429,  786,  401,  462,  443,  455,
+      456,  409,  513,  358,  412,  412,  412,  463,  671,  413,
+      828,  412,  412,  412,  412,  412,  412,  483,  488,  506,
+      500,  484,  489,  501,  507,  521,  618,  522,  545,  829,
+      513,  475,  513,  546,  412,  412,  412,  412,  412,  412,
+
+      619,  614,  653,  654,  444,  672,  620,  710,  711,  445,
+      806,  712,  521,  618,  522,   45,   45,   45,  719,  720,
+      523,  713,   45,   45,   45,   45,   45,   45,  619,  754,
+      716,  711,  755,  787,  788,  710,  717,  792,  806,  830,
+      831,  789,  832,  793,  833,   45,   45,   45,   45,   45,
+       45,  834,  836,  837,  838,  839,  835,  840,  841,  842,
+      843,  844,  845,  846,  847,  848,  849,  850,  851,  852,
+      854,  855,  856,  853,  857,  858,  859,  860,  861,  862,
+      863,  864,  865,  866,  867,  868,  869,  870,  871,  872,
+      873,  874,  875,  876,  877,  878,  879,  880,  881,  882,
+
+      883,  884,  885,  886,  887,  888,  889,  890,  891,  892,
+      893,  894,  895,  896,  897,  898,  899,  900,  901,  902,
+      903,  904,  905,  906,  907,  908,  909,  910,  911,  912,
+      913,  914,  915,  916,  894,  917,  918,  893,  919,  920,
+      921,  922,  923,  924,  926,  927,  928,  929,  930,  931,
+      932,  933,  934,  935,  936,  937,  938,  939,  940,  941,
+      942,  943,  945,  946,  947,  948,  949,  950,  951,  952,
+      953,  954,  944,  955,  956,  957,  958,  959,  960,  961,
+      962,  963,  964,  965,  966,  967,  968,  969,  970,  971,
+      972,  973,  974,  975,  976,  977,  979,  978,  980,  925,
+
+      981,  982,  983,  984,  985,  986,  987,  988,  989,  990,
+      991,  992,  993,  994,  995,  996,  997,  998,  999, 1000,
+     1001, 1002, 1003,  977,  978, 1004, 1005, 1006, 1008, 1010,
+     1011, 1012, 1007, 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, 1048, 1049,
-     1050, 1051, 1052, 1053, 1054, 1055, 1056, 1057, 1058, 1059,
-     1060, 1061, 1062, 1063, 1064, 1065, 1066, 1044, 1067, 1068,
-     1069, 1070, 1071, 1045, 1072, 1073, 1074, 1075, 1076, 1077,
-
-     1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085, 1086, 1087,
-     1088, 1089, 1090, 1091, 1092, 1093, 1094, 1096, 1097, 1098,
-     1099, 1100, 1101, 1102, 1103, 1104, 1105, 1106, 1107, 1108,
-     1109, 1110, 1111, 1112, 1113, 1114, 1115, 1116, 1118, 1119,
-     1120, 1121, 1122, 1123, 1124, 1125, 1126, 1127, 1128, 1129,
-     1130, 1131, 1132, 1133, 1134, 1135, 1136, 1137, 1138, 1139,
-     1140, 1112, 1141, 1143, 1144, 1145, 1146, 1095, 1147, 1148,
-     1142, 1149, 1150, 1151, 1152, 1153, 1154, 1155, 1156, 1117,
-     1157, 1158, 1159, 1160, 1161, 1162, 1163, 1164, 1165, 1166,
-     1167, 1168, 1170, 1171, 1172, 1173, 1169, 1174, 1175, 1176,
-
-     1177, 1178, 1179, 1180, 1181, 1182, 1183, 1184, 1185, 1186,
-     1187, 1188, 1189, 1190, 1191, 1192, 1171, 1193, 1194, 1195,
+     1009, 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, 1075, 1076, 1077, 1078,
+
+     1056, 1079, 1080, 1081, 1082, 1083, 1057, 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, 1110, 1111, 1112, 1113, 1114, 1115, 1116, 1117,
+     1118, 1119, 1120, 1121, 1122, 1123, 1124, 1125, 1126, 1127,
+     1128, 1129, 1130, 1132, 1133, 1134, 1135, 1136, 1137, 1138,
+     1139, 1140, 1141, 1142, 1143, 1144, 1145, 1146, 1147, 1148,
+     1149, 1150, 1151, 1152, 1153, 1154, 1126, 1155, 1156, 1157,
+     1159, 1160, 1109, 1161, 1162, 1163, 1164, 1158, 1165, 1166,
+     1167, 1168, 1169, 1170, 1131, 1171, 1172, 1173, 1174, 1175,
+
+     1176, 1177, 1178, 1179, 1180, 1181, 1182, 1183, 1184, 1186,
+     1187, 1188, 1189, 1185, 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, 1224, 1225,
-     1226, 1227, 1228, 1229, 1230, 1231, 1232, 1233, 1234, 1235,
-     1236, 1238, 1239, 1240, 1241, 1242, 1243, 1244, 1217, 1245,
-     1246, 1247, 1248, 1249, 1250, 1251, 1252, 1253, 1254, 1255,
-     1256, 1257, 1258, 1259, 1260, 1261, 1262, 1263, 1264, 1265,
-     1266, 1267, 1268, 1269, 1270, 1271, 1272, 1273, 1274, 1275,
-
-     1276, 1277, 1278, 1279, 1280, 1281, 1282, 1283, 1284, 1285,
-     1286, 1287, 1288, 1289, 1290, 1263, 1237, 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, 1419, 1420, 1421, 1422, 1423,
-     1424, 1425, 1426,   12,   12,   12,   12,   12,   36,   36,
-       36,   36,   36,   80,  292,   80,   80,   80,   99,  397,
-       99,  508,   99,  101,  101,  101,  101,  101,  116,  116,
-      116,  116,  116,  178,  101,  178,  178,  178,  200,  200,
-      200,  813,  812,  811,  810,  809,  808,  807,  806,  805,
-
-      804,  803,  802,  801,  799,  798,  797,  796,  795,  794,
-      793,  792,  791,  790,  789,  788,  785,  784,  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,  750,  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,  711,  710,  705,  704,  703,  702,  701,  700,  699,
-      698,  697,  696,  695,  692,  691,  690,  689,  688,  687,
-
-      686,  685,  684,  683,  682,  681,  680,  679,  678,  677,
-      676,  675,  674,  673,  672,  671,  670,  669,  666,  665,
-      664,  663,  662,  661,  660,  659,  658,  657,  656,  655,
-      654,  653,  652,  651,  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,  619,  618,  614,  613,  612,  611,  610,
-      609,  608,  607,  606,  605,  604,  603,  602,  601,  600,
-      599,  598,  597,  596,  595,  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,  547,  546,  545,  544,  541,  540,  539,  538,
-      537,  536,  535,  532,  531,  530,  529,  528,  527,  526,
-      525,  524,  523,  522,  518,  517,  516,  515,  514,  513,
-      512,  510,  509,  507,  506,  503,  502,  501,  500,  497,
-      496,  495,  494,  493,  492,  491,  490,  489,  488,  485,
-      484,  483,  480,  479,  478,  477,  476,  475,  474,  471,
-      470,  469,  468,  467,  466,  465,  464,  463,  462,  459,
-
-      458,  457,  456,  455,  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,  419,
-      418,  417,  416,  415,  414,  413,  410,  409,  407,  406,
-      401,  396,  393,  390,  389,  388,  387,  385,  384,  383,
-      382,  381,  380,  379,  378,  377,  376,  375,  374,  373,
-      372,  369,  368,  367,  366,  365,  364,  363,  362,  361,
-      360,  359,  358,  354,  353,  352,  351,  350,  349,  348,
-      347,  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,  316,  313,
-      312,  311,  310,  309,  308,  306,  201,  303,  301,  299,
-      296,  295,  293,  291,  284,  283,  282,  280,  279,  277,
-      276,  275,  274,  259,  258,  254,  251,  250,  249,  248,
-      247,  245,  244,  243,  242,  239,  238,  237,  236,  235,
-      234,  233,  232,  231,  227,  226,  223,  220,  219,  218,
-      217,  214,  213,  212,  208,  207,  206,  205,  201,  194,
-      191,  190,  188,  186,  185,  177,  162,  143,  121,  110,
-      107,  106,  104,   43,  100,   98,   97,   88,   43, 1427,
-       11, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427,
-
-     1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427,
-     1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427,
-     1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427,
-     1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427,
-     1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427,
-     1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427,
-     1427, 1427
+     1206, 1207, 1208, 1187, 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, 1244,
+     1245, 1246, 1247, 1248, 1249, 1250, 1251, 1252, 1253, 1254,
+     1255, 1256, 1258, 1259, 1260, 1261, 1262, 1235, 1263, 1264,
+     1265, 1266, 1267, 1268, 1269, 1270, 1271, 1272, 1273, 1274,
+
+     1275, 1276, 1277, 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, 1283, 1257, 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, 1441, 1442,
+     1443, 1444, 1445, 1446, 1447, 1448,   12,   12,   12,   12,
+       12,   36,   36,   36,   36,   36,   80,  292,   80,   80,
+       80,   99,  398,   99,  510,   99,  101,  101,  101,  101,
+
+      101,  116,  116,  116,  116,  116,  178,  101,  178,  178,
+      178,  200,  200,  200,  816,  815,  814,  813,  812,  811,
+      810,  809,  808,  807,  805,  804,  803,  802,  801,  800,
+      799,  798,  797,  796,  795,  794,  791,  790,  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,  756,  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,
+
+      718,  715,  714,  709,  708,  707,  706,  705,  704,  703,
+      702,  701,  700,  699,  696,  695,  694,  693,  692,  691,
+      690,  689,  688,  687,  686,  685,  684,  683,  682,  681,
+      680,  679,  678,  677,  676,  675,  674,  673,  670,  669,
+      668,  667,  666,  665,  664,  663,  662,  661,  660,  659,
+      658,  657,  656,  655,  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,  617,  616,  615,  614,
+      613,  612,  611,  610,  609,  608,  607,  606,  605,  604,
+
+      603,  602,  601,  600,  599,  598,  597,  596,  595,  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,  547,  544,  543,  542,
+      541,  540,  539,  538,  535,  534,  533,  532,  531,  530,
+      529,  528,  527,  526,  525,  524,  520,  519,  518,  517,
+      516,  515,  514,  512,  511,  509,  508,  505,  504,  503,
+      502,  499,  498,  497,  496,  495,  494,  493,  492,  491,
+
+      490,  487,  486,  485,  482,  481,  480,  479,  478,  477,
+      476,  473,  472,  471,  470,  469,  468,  467,  466,  465,
+      464,  461,  460,  459,  458,  457,  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,  421,  420,  419,  418,  417,  416,  415,  414,  411,
+      410,  408,  407,  402,  397,  394,  391,  390,  389,  388,
+      386,  385,  384,  383,  382,  381,  380,  379,  378,  377,
+      376,  375,  374,  373,  370,  369,  368,  367,  366,  365,
+      364,  363,  362,  361,  360,  359,  355,  354,  353,  352,
+
+      351,  350,  349,  348,  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,  313,  312,  311,  310,  309,  308,  306,  201,
+      303,  301,  299,  296,  295,  293,  291,  284,  283,  282,
+      280,  279,  277,  276,  275,  274,  259,  258,  254,  251,
+      250,  249,  248,  247,  245,  244,  243,  242,  239,  238,
+      237,  236,  235,  234,  233,  232,  231,  227,  226,  223,
+      220,  219,  218,  217,  214,  213,  212,  208,  207,  206,
+      205,  201,  194,  191,  190,  188,  186,  185,  177,  162,
+
+      143,  121,  110,  107,  106,  104,   43,  100,   98,   97,
+       88,   43, 1449,   11, 1449, 1449, 1449, 1449, 1449, 1449,
+     1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449,
+     1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449,
+     1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449,
+     1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449,
+     1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449,
+     1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449,
+     1449, 1449, 1449, 1449, 1449
     } ;
 
-static const flex_int16_t yy_chk[1863] =
+static const flex_int16_t yy_chk[1886] =
     {   0,
         0,    1,    1,    1,    0,    1,    1,    0,    1,    1,
-        1,    1,    1,    1,    1,    1,    1,    1,   21,  601,
-        3,    3,    3,   21,    1,    1,    3,    0,  601,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,   21,  604,
+        3,    3,    3,   21,    1,    1,    3,    0,  604,    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,  722,    8,
+        6,    6,    6,    7,    7,    7,    1,    7,    0,    8,
         8,    8,    1,    8,   57,   27,   28,  723,   26,    1,
         1,    2,    2,    2,   32,    2,    2,   33,    2,    2,
         2,    2,    2,    2,    2,    2,    2,    2,    9,    9,
@@ -1454,7 +1464,7 @@ static const flex_int16_t yy_chk[1863] =
         6,   20,   20,   20,    2,   37,    9,   37,   42,    2,
        42,    2,   20,   51,   10,   54,   31,    2,    2,   52,
       128,  128,   25,   65,   25,   66,    2,   25,   25,   25,
-       65,  211,    2,   66,  724,   20,   51,  211,   54,    2,
+       65,  263,    2,   66,  263,   20,   51,  724,   54,    2,
         2,   15,   15,   15,   15,   15,   15,   15,   15,   15,
        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
@@ -1465,9 +1475,9 @@ static const flex_int16_t yy_chk[1863] =
        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
        15,   15,   17,   48,   17,   17,   17,   19,   56,   19,
        19,   19,   44,   59,   22,   17,   22,   22,   22,   64,
-       19,   93,   61,   55,   67,   61,  426,   22,   61,   48,
+       19,   93,   61,   55,   67,   61,  428,   22,   61,   48,
        61,   56,   61,   55,   67,  725,   67,   63,   17,   59,
-       73,  426,   64,   19,   73,   59,   55,   44,   63,   93,
+       73,  428,   64,   19,   73,   59,   55,   44,   63,   93,
        22,   45,   70,   64,   73,  115,   70,   45,   63,   45,
        45,   55,   45,   75,   45,   45,   45,   75,   58,   69,
        69,   45,   45,   69,   45,   58,   70,  726,  115,   69,
@@ -1487,164 +1497,166 @@ static const flex_int16_t yy_chk[1863] =
       103,  112,   94,   85,   95,  108,   82,  103,  113,  124,
       114,  148,  119,  138,  135,  148,  138,  153,  124,  124,
       138,   84,  159,  159,  109,  179,   85,  111,  112,  119,
-      135,  165,  165,  730,  182,  103,  113,  114,  161,  103,
-      119,  161,  161,  103,  731,  153,  166,  153,  171,  174,
+      135,  165,  165,  729,  182,  103,  113,  114,  161,  103,
+      119,  161,  161,  103,  730,  153,  166,  153,  171,  174,
       166,  103,  164,  179,  166,  103,  180,  103,  103,  118,
-      118,  118,  182,  241,  732,  181,  118,  118,  118,  118,
+      118,  118,  182,  241,  731,  181,  118,  118,  118,  118,
       118,  118,  184,  183,  189,  171,  174,  192,  283,  193,
-      733,  195,  180,  199,  197,  164,  164,  164,  181,  118,
+      732,  195,  180,  199,  197,  164,  164,  164,  181,  118,
       118,  118,  118,  118,  118,  184,  164,  189,  164,  183,
 
       164,  164,  204,  164,  195,  192,  193,  197,  285,  288,
-      199,  202,  202,  202,  241,  250,  293,  241,  202,  202,
-      202,  202,  202,  202,  263,  204,  293,  263,  283,  294,
-      297,  285,  288,  300,  315,  344,  344,  362,  296,  296,
-      307,  202,  202,  202,  202,  202,  202,  296,  321,  250,
-      334,  315,  321,  297,  400,  334,  371,  350,  294,  386,
-      371,  300,  386,  250,  305,  305,  305,  350,  573,  307,
-      734,  305,  305,  305,  305,  305,  305,  375,  392,  412,
-      435,  375,  400,  392,  410,  435,  410,  521,  555,  555,
-      519,  520,  521,  362,  305,  305,  305,  305,  305,  305,
-
-      615,  334,  617,  620,  616,  573,  334,  412,  736,  620,
-      707,  410,  617,  410,  411,  411,  411,  519,  737,  520,
-      738,  411,  411,  411,  411,  411,  411,  616,  615,  656,
-      688,  739,  656,  689,  689,  735,  692,  688,  707,  740,
-      735,  689,  692,  741,  411,  411,  411,  411,  411,  411,
-      742,  743,  746,  747,  748,  749,  752,  753,  754,  755,
-      756,  757,  758,  759,  756,  760,  761,  762,  764,  765,
-      766,  767,  768,  769,  770,  771,  772,  773,  774,  775,
-      776,  777,  778,  779,  780,  781,  782,  783,  784,  785,
-      786,  787,  789,  790,  791,  792,  793,  794,  795,  796,
-
-      797,  799,  800,  801,  802,  803,  804,  805,  806,  807,
-      808,  809,  810,  811,  812,  813,  814,  815,  817,  818,
-      819,  820,  821,  822,  823,  800,  824,  825,  799,  827,
-      828,  829,  830,  831,  833,  834,  835,  836,  837,  838,
-      839,  840,  841,  842,  843,  844,  845,  846,  847,  848,
-      849,  850,  852,  853,  854,  856,  857,  858,  859,  860,
-      861,  849,  862,  863,  864,  865,  866,  867,  868,  869,
-      870,  871,  873,  874,  875,  876,  877,  878,  879,  880,
-      881,  882,  883,  884,  885,  887,  886,  888,  830,  889,
-      890,  891,  893,  894,  895,  896,  897,  898,  900,  901,
-
-      902,  903,  904,  905,  906,  907,  908,  909,  910,  911,
-      912,  913,  885,  886,  915,  916,  917,  918,  919,  915,
-      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,
-      952,  954,  955,  956,  957,  958,  959,  916,  960,  961,
-      962,  963,  964,  966,  967,  968,  969,  970,  971,  973,
-      974,  975,  976,  979,  980,  981,  982,  983,  984,  985,
-      986,  987,  988,  989,  990,  991,  992,  967,  995,  997,
-      998,  999, 1000,  968, 1001, 1002, 1003, 1004, 1006, 1007,
-
-     1008, 1009, 1011, 1012, 1013, 1014, 1015, 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, 1048, 1049, 1050, 1051,
-     1052, 1053, 1054, 1055, 1056, 1057, 1059, 1060, 1061, 1062,
-     1063, 1064, 1065, 1066, 1067, 1068, 1069, 1070, 1071, 1072,
-     1073, 1044, 1074, 1075, 1076, 1078, 1081, 1027, 1082, 1083,
-     1074, 1084, 1085, 1086, 1087, 1088, 1089, 1091, 1092, 1049,
-     1093, 1094, 1095, 1096, 1097, 1099, 1101, 1104, 1106, 1108,
-     1109, 1110, 1111, 1112, 1114, 1115, 1110, 1117, 1118, 1119,
-
-     1120, 1121, 1122, 1124, 1125, 1126, 1127, 1128, 1129, 1130,
-     1131, 1132, 1133, 1134, 1137, 1139, 1112, 1140, 1141, 1142,
-     1143, 1145, 1146, 1147, 1148, 1149, 1150, 1152, 1153, 1155,
-     1156, 1157, 1158, 1160, 1161, 1162, 1163, 1164, 1165, 1167,
-     1169, 1171, 1172, 1173, 1174, 1175, 1176, 1177, 1178, 1179,
-     1180, 1181, 1182, 1183, 1184, 1185, 1186, 1187, 1188, 1188,
-     1189, 1190, 1191, 1192, 1193, 1194, 1195, 1196, 1171, 1197,
-     1198, 1199, 1200, 1201, 1202, 1203, 1204, 1205, 1206, 1207,
-     1208, 1209, 1211, 1212, 1214, 1215, 1216, 1217, 1218, 1221,
-     1224, 1225, 1228, 1229, 1230, 1231, 1232, 1233, 1234, 1235,
-
-     1237, 1238, 1240, 1242, 1243, 1244, 1245, 1246, 1248, 1249,
-     1250, 1251, 1252, 1253, 1254, 1217, 1189, 1255, 1256, 1257,
-     1258, 1259, 1260, 1262, 1263, 1264, 1266, 1267, 1268, 1269,
-     1270, 1271, 1273, 1274, 1275, 1277, 1279, 1280, 1281, 1282,
-     1283, 1284, 1285, 1286, 1287, 1288, 1289, 1291, 1292, 1296,
-     1299, 1300, 1302, 1303, 1305, 1306, 1307, 1308, 1309, 1310,
-     1312, 1314, 1315, 1316, 1317, 1318, 1319, 1320, 1321, 1323,
-     1324, 1325, 1326, 1327, 1328, 1329, 1330, 1333, 1334, 1335,
-     1336, 1337, 1339, 1340, 1341, 1342, 1343, 1344, 1345, 1346,
-     1347, 1348, 1349, 1350, 1352, 1354, 1356, 1357, 1358, 1359,
-
-     1360, 1362, 1363, 1364, 1366, 1367, 1369, 1370, 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, 1399, 1401, 1402, 1403, 1404, 1405, 1406,
-     1410, 1411, 1412, 1413, 1415, 1416, 1418, 1419, 1420, 1421,
-     1422, 1424, 1425, 1428, 1428, 1428, 1428, 1428, 1429, 1429,
-     1429, 1429, 1429, 1430, 1436, 1430, 1430, 1430, 1431, 1437,
-     1431, 1438, 1431, 1432, 1432, 1432, 1432, 1432, 1433, 1433,
-     1433, 1433, 1433, 1434, 1439, 1434, 1434, 1434, 1435, 1435,
-     1435,  721,  720,  719,  718,  717,  716,  715,  713,  712,
-
-      711,  710,  709,  708,  706,  704,  703,  702,  701,  700,
-      699,  698,  697,  696,  695,  694,  691,  690,  687,  686,
-      685,  684,  683,  682,  681,  680,  679,  678,  677,  676,
-      675,  674,  673,  672,  671,  670,  669,  668,  666,  665,
-      664,  663,  662,  661,  660,  659,  657,  655,  654,  653,
-      652,  651,  650,  649,  648,  647,  646,  645,  644,  643,
-      642,  641,  640,  638,  637,  636,  635,  634,  633,  632,
-      631,  630,  629,  628,  627,  626,  625,  624,  623,  622,
-      621,  619,  618,  614,  613,  612,  610,  609,  607,  606,
-      605,  604,  603,  602,  599,  598,  597,  596,  595,  594,
-
-      593,  592,  591,  590,  589,  588,  586,  585,  584,  583,
-      582,  581,  580,  579,  577,  576,  575,  574,  572,  571,
-      570,  569,  568,  567,  566,  564,  563,  562,  561,  560,
-      559,  558,  557,  556,  554,  553,  552,  551,  550,  549,
-      548,  547,  546,  545,  544,  543,  541,  540,  539,  538,
-      537,  536,  535,  534,  533,  532,  531,  530,  529,  528,
-      527,  526,  525,  524,  523,  517,  515,  512,  511,  510,
-      509,  507,  506,  505,  503,  502,  499,  498,  497,  496,
-      495,  494,  493,  492,  491,  490,  489,  488,  487,  486,
-      485,  484,  483,  482,  481,  480,  479,  478,  477,  476,
-
-      475,  473,  471,  470,  469,  468,  467,  466,  465,  464,
-      463,  462,  461,  460,  458,  457,  456,  455,  454,  453,
-      452,  451,  450,  449,  448,  447,  446,  445,  444,  443,
-      442,  441,  439,  438,  437,  436,  434,  433,  432,  431,
-      430,  428,  427,  425,  424,  422,  421,  420,  419,  418,
-      416,  415,  414,  413,  408,  407,  405,  404,  403,  402,
-      401,  399,  398,  396,  393,  391,  390,  388,  387,  385,
-      384,  383,  382,  381,  380,  379,  378,  377,  376,  374,
-      373,  372,  370,  369,  368,  367,  365,  364,  363,  361,
-      360,  359,  358,  357,  356,  355,  354,  353,  351,  349,
-
-      348,  347,  346,  345,  343,  342,  341,  340,  339,  338,
-      337,  336,  335,  333,  332,  331,  330,  329,  328,  327,
-      326,  325,  324,  323,  322,  320,  319,  318,  317,  314,
-      313,  312,  311,  310,  309,  308,  304,  302,  299,  298,
-      295,  291,  284,  282,  281,  280,  279,  277,  276,  275,
-      274,  273,  272,  271,  270,  269,  268,  267,  266,  265,
-      264,  262,  261,  260,  259,  258,  257,  256,  255,  254,
-      253,  252,  251,  249,  248,  247,  246,  245,  244,  243,
-      242,  240,  239,  238,  237,  236,  235,  234,  233,  231,
-      230,  229,  228,  227,  226,  225,  224,  223,  222,  221,
-
-      220,  219,  218,  217,  216,  215,  214,  213,  212,  210,
-      209,  208,  207,  206,  205,  203,  200,  198,  196,  194,
-      191,  190,  188,  185,  177,  176,  175,  173,  172,  170,
-      169,  168,  167,  163,  162,  160,  158,  157,  156,  155,
-      154,  152,  151,  150,  149,  147,  146,  145,  144,  143,
-      142,  141,  140,  139,  137,  136,  134,  132,  131,  130,
-      129,  127,  126,  125,  123,  122,  121,  120,  116,  110,
-      107,  106,  104,   99,   98,   79,   74,   68,   60,   53,
-       50,   49,   47,   43,   41,   39,   38,   24,   14,   11,
-     1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427,
-
-     1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427,
-     1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427,
-     1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427,
-     1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427,
-     1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427,
-     1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427,
-     1427, 1427
+      199,  202,  202,  202,  241,  250,  211,  241,  202,  202,
+      202,  202,  202,  202,  211,  204,  293,  294,  283,  297,
+      211,  285,  288,  300,  316,  363,  293,  733,  296,  296,
+      307,  202,  202,  202,  202,  202,  202,  296,  692,  250,
+      322,  316,  297,  335,  322,  692,  294,  351,  335,  345,
+      345,  300,  401,  250,  305,  305,  305,  351,  576,  307,
+      734,  305,  305,  305,  305,  305,  305,  372,  376,  393,
+      387,  372,  376,  387,  393,  411,  521,  411,  437,  736,
+      401,  363,  413,  437,  305,  305,  305,  305,  305,  305,
+
+      522,  523,  558,  558,  335,  576,  523,  618,  619,  335,
+      711,  620,  411,  521,  411,  412,  412,  412,  625,  625,
+      413,  620,  412,  412,  412,  412,  412,  412,  522,  660,
+      623,  619,  660,  693,  693,  618,  623,  696,  711,  737,
+      738,  693,  739,  696,  740,  412,  412,  412,  412,  412,
+      412,  741,  742,  743,  744,  745,  741,  746,  747,  748,
+      749,  752,  753,  754,  755,  758,  759,  760,  761,  762,
+      763,  764,  765,  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,  795,  796,  797,  798,  799,  800,  801,  802,  803,
+      805,  806,  807,  808,  809,  810,  811,  812,  813,  814,
+      815,  816,  817,  818,  819,  820,  821,  822,  823,  825,
+      826,  827,  828,  829,  806,  830,  831,  805,  832,  833,
+      835,  836,  837,  838,  839,  841,  842,  843,  844,  845,
+      846,  847,  848,  849,  850,  851,  852,  853,  854,  855,
+      856,  857,  858,  860,  861,  862,  864,  865,  866,  867,
+      868,  869,  857,  870,  871,  872,  873,  874,  875,  876,
+      877,  878,  879,  881,  882,  883,  884,  885,  886,  887,
+      888,  889,  890,  891,  892,  893,  895,  894,  896,  838,
+
+      897,  898,  899,  901,  902,  903,  904,  905,  906,  907,
+      908,  910,  911,  912,  913,  914,  915,  916,  917,  918,
+      919,  920,  921,  893,  894,  922,  923,  925,  926,  927,
+      928,  929,  925,  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,  962,  964,  965,  966,  967,  968,  969,
+      926,  970,  971,  972,  973,  974,  976,  977,  978,  979,
+      980,  981,  983,  984,  985,  986,  987,  988,  991,  992,
+      993,  994,  995,  996,  997,  998,  999, 1000, 1001, 1002,
+
+      977, 1003, 1004, 1007, 1009, 1010,  978, 1011, 1012, 1013,
+     1014, 1015, 1016, 1018, 1019, 1020, 1021, 1023, 1024, 1025,
+     1026, 1027, 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, 1055, 1056, 1057,
+     1058, 1060, 1061, 1062, 1063, 1064, 1065, 1066, 1067, 1068,
+     1069, 1070, 1071, 1073, 1074, 1075, 1076, 1077, 1078, 1079,
+     1080, 1081, 1082, 1083, 1084, 1085, 1056, 1086, 1087, 1088,
+     1089, 1090, 1039, 1092, 1095, 1096, 1097, 1088, 1098, 1099,
+     1100, 1101, 1102, 1103, 1061, 1105, 1106, 1107, 1108, 1109,
+
+     1110, 1111, 1113, 1115, 1118, 1120, 1122, 1123, 1124, 1125,
+     1126, 1128, 1129, 1124, 1131, 1132, 1133, 1134, 1135, 1136,
+     1137, 1138, 1140, 1141, 1142, 1143, 1144, 1145, 1146, 1147,
+     1148, 1149, 1150, 1126, 1153, 1155, 1156, 1157, 1158, 1159,
+     1161, 1162, 1163, 1164, 1165, 1166, 1168, 1169, 1171, 1172,
+     1173, 1174, 1176, 1177, 1178, 1179, 1180, 1181, 1183, 1185,
+     1187, 1188, 1189, 1190, 1191, 1192, 1193, 1194, 1195, 1196,
+     1197, 1198, 1199, 1200, 1201, 1202, 1203, 1204, 1205, 1206,
+     1206, 1207, 1208, 1209, 1210, 1211, 1212, 1187, 1213, 1214,
+     1215, 1216, 1217, 1218, 1219, 1220, 1221, 1222, 1223, 1224,
+
+     1225, 1226, 1227, 1229, 1230, 1232, 1233, 1234, 1235, 1236,
+     1240, 1241, 1244, 1245, 1248, 1249, 1250, 1251, 1252, 1253,
+     1254, 1255, 1257, 1258, 1260, 1262, 1263, 1264, 1265, 1266,
+     1268, 1269, 1270, 1271, 1272, 1273, 1235, 1207, 1274, 1275,
+     1276, 1277, 1278, 1279, 1280, 1282, 1283, 1284, 1285, 1287,
+     1288, 1289, 1290, 1291, 1292, 1294, 1295, 1296, 1298, 1300,
+     1301, 1302, 1303, 1304, 1305, 1306, 1307, 1308, 1309, 1310,
+     1312, 1313, 1317, 1320, 1322, 1324, 1325, 1327, 1328, 1329,
+     1330, 1331, 1332, 1334, 1336, 1337, 1338, 1339, 1340, 1341,
+     1342, 1343, 1345, 1346, 1347, 1348, 1349, 1350, 1351, 1352,
+
+     1355, 1356, 1357, 1358, 1359, 1361, 1362, 1363, 1364, 1365,
+     1366, 1367, 1368, 1369, 1370, 1371, 1372, 1374, 1376, 1378,
+     1379, 1380, 1381, 1382, 1384, 1385, 1386, 1388, 1389, 1391,
+     1392, 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, 1421, 1423, 1424, 1425,
+     1426, 1427, 1428, 1432, 1433, 1434, 1435, 1437, 1438, 1440,
+     1441, 1442, 1443, 1444, 1446, 1447, 1450, 1450, 1450, 1450,
+     1450, 1451, 1451, 1451, 1451, 1451, 1452, 1458, 1452, 1452,
+     1452, 1453, 1459, 1453, 1460, 1453, 1454, 1454, 1454, 1454,
+
+     1454, 1455, 1455, 1455, 1455, 1455, 1456, 1461, 1456, 1456,
+     1456, 1457, 1457, 1457,  722,  721,  720,  719,  717,  716,
+      715,  714,  713,  712,  710,  708,  707,  706,  705,  704,
+      703,  702,  701,  700,  699,  698,  695,  694,  691,  690,
+      689,  688,  687,  686,  685,  684,  683,  682,  681,  680,
+      679,  678,  677,  676,  675,  674,  673,  672,  670,  669,
+      668,  667,  666,  665,  664,  663,  661,  659,  658,  657,
+      656,  655,  654,  653,  652,  651,  650,  649,  648,  647,
+      646,  645,  644,  642,  641,  640,  639,  638,  637,  636,
+      635,  634,  633,  632,  631,  630,  629,  628,  627,  626,
+
+      624,  622,  621,  617,  616,  615,  613,  612,  610,  609,
+      608,  607,  606,  605,  602,  601,  600,  599,  598,  597,
+      596,  595,  594,  593,  592,  591,  589,  588,  587,  586,
+      585,  584,  583,  582,  580,  579,  578,  577,  575,  574,
+      573,  572,  571,  570,  569,  567,  566,  565,  564,  563,
+      562,  561,  560,  559,  557,  556,  555,  554,  553,  552,
+      551,  550,  549,  548,  547,  546,  544,  543,  542,  541,
+      540,  539,  538,  537,  536,  535,  534,  533,  532,  531,
+      530,  529,  528,  527,  526,  525,  519,  517,  514,  513,
+      512,  511,  509,  508,  507,  505,  504,  501,  500,  499,
+
+      498,  497,  496,  495,  494,  493,  492,  491,  490,  489,
+      488,  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,  441,  440,  439,  438,  436,  435,  434,
+      433,  432,  430,  429,  427,  426,  424,  423,  422,  421,
+      420,  419,  417,  416,  415,  414,  409,  408,  406,  405,
+      404,  403,  402,  400,  399,  397,  394,  392,  391,  389,
+      388,  386,  385,  384,  383,  382,  381,  380,  379,  378,
+
+      377,  375,  374,  373,  371,  370,  369,  368,  366,  365,
+      364,  362,  361,  360,  359,  358,  357,  356,  355,  354,
+      352,  350,  349,  348,  347,  346,  344,  343,  342,  341,
+      340,  339,  338,  337,  336,  334,  333,  332,  331,  330,
+      329,  328,  327,  326,  325,  324,  323,  321,  320,  319,
+      318,  315,  314,  313,  312,  311,  310,  309,  308,  304,
+      302,  299,  298,  295,  291,  284,  282,  281,  280,  279,
+      277,  276,  275,  274,  273,  272,  271,  270,  269,  268,
+      267,  266,  265,  264,  262,  261,  260,  259,  258,  257,
+      256,  255,  254,  253,  252,  251,  249,  248,  247,  246,
+
+      245,  244,  243,  242,  240,  239,  238,  237,  236,  235,
+      234,  233,  231,  230,  229,  228,  227,  226,  225,  224,
+      223,  222,  221,  220,  219,  218,  217,  216,  215,  214,
+      213,  212,  210,  209,  208,  207,  206,  205,  203,  200,
+      198,  196,  194,  191,  190,  188,  185,  177,  176,  175,
+      173,  172,  170,  169,  168,  167,  163,  162,  160,  158,
+      157,  156,  155,  154,  152,  151,  150,  149,  147,  146,
+      145,  144,  143,  142,  141,  140,  139,  137,  136,  134,
+      132,  131,  130,  129,  127,  126,  125,  123,  122,  121,
+      120,  116,  110,  107,  106,  104,   99,   98,   79,   74,
+
+       68,   60,   53,   50,   49,   47,   43,   41,   39,   38,
+       24,   14,   11, 1449, 1449, 1449, 1449, 1449, 1449, 1449,
+     1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449,
+     1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449,
+     1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449,
+     1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449,
+     1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449,
+     1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449,
+     1449, 1449, 1449, 1449, 1449
     } ;
 
 static yy_state_type yy_last_accepting_state;
@@ -1653,26 +1665,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[171] =
+static const flex_int16_t yy_rule_linenum[173] =
     {   0,
       145,  147,  149,  154,  155,  160,  161,  162,  174,  177,
       182,  189,  198,  207,  216,  225,  234,  243,  253,  262,
-      271,  280,  289,  298,  307,  316,  325,  334,  345,  354,
-      363,  372,  381,  391,  401,  411,  421,  431,  441,  451,
-      461,  471,  481,  491,  501,  511,  521,  532,  543,  554,
-      563,  573,  582,  592,  606,  621,  630,  639,  648,  657,
-      677,  697,  706,  716,  725,  735,  744,  753,  762,  771,
-      780,  790,  799,  808,  817,  826,  835,  844,  853,  862,
-      871,  880,  890,  901,  913,  922,  931,  941,  951,  961,
-      971,  981,  991, 1000, 1010, 1019, 1028, 1037, 1046, 1056,
-
-     1066, 1075, 1085, 1094, 1103, 1112, 1121, 1130, 1139, 1148,
-     1157, 1166, 1175, 1184, 1193, 1202, 1211, 1220, 1229, 1238,
-     1247, 1256, 1265, 1274, 1283, 1292, 1301, 1310, 1319, 1328,
-     1337, 1346, 1355, 1365, 1375, 1385, 1395, 1405, 1415, 1425,
-     1435, 1445, 1454, 1463, 1472, 1481, 1490, 1499, 1508, 1519,
-     1532, 1545, 1560, 1659, 1664, 1669, 1674, 1675, 1676, 1677,
-     1678, 1679, 1681, 1699, 1712, 1717, 1721, 1723, 1725, 1727
+      271,  280,  289,  298,  307,  316,  325,  334,  343,  352,
+      364,  373,  382,  391,  400,  411,  422,  433,  444,  454,
+      464,  475,  486,  497,  508,  519,  530,  541,  552,  563,
+      574,  585,  594,  604,  613,  623,  637,  653,  662,  671,
+      680,  689,  709,  729,  738,  748,  757,  767,  776,  785,
+      794,  803,  812,  822,  831,  840,  849,  858,  867,  876,
+      885,  894,  903,  912,  922,  933,  945,  954,  963,  973,
+      983,  993, 1003, 1013, 1023, 1032, 1042, 1051, 1060, 1069,
+
+     1078, 1088, 1098, 1107, 1117, 1126, 1135, 1144, 1153, 1162,
+     1171, 1180, 1189, 1198, 1207, 1216, 1225, 1234, 1243, 1252,
+     1261, 1270, 1279, 1288, 1297, 1306, 1315, 1324, 1333, 1342,
+     1351, 1360, 1369, 1378, 1387, 1397, 1407, 1417, 1427, 1437,
+     1447, 1457, 1467, 1477, 1486, 1495, 1504, 1513, 1522, 1531,
+     1540, 1551, 1564, 1577, 1592, 1691, 1696, 1701, 1706, 1707,
+     1708, 1709, 1710, 1711, 1713, 1731, 1744, 1749, 1753, 1755,
+     1757, 1759
     } ;
 
 /* The intent behind this definition is that it'll catch
@@ -1725,7 +1738,7 @@ using namespace isc::dhcp;
 
 /* To avoid the call to exit... oops! */
 #define YY_FATAL_ERROR(msg) isc::dhcp::Parser4Context::fatal(msg)
-#line 1728 "dhcp4_lexer.cc"
+#line 1742 "dhcp4_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
@@ -1751,8 +1764,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 1754 "dhcp4_lexer.cc"
-#line 1755 "dhcp4_lexer.cc"
+#line 1768 "dhcp4_lexer.cc"
+#line 1769 "dhcp4_lexer.cc"
 
 #define INITIAL 0
 #define COMMENT 1
@@ -2080,7 +2093,7 @@ YY_DECL
     }
 
 
-#line 2083 "dhcp4_lexer.cc"
+#line 2097 "dhcp4_lexer.cc"
 
        while ( /*CONSTCOND*/1 )                /* loops until end-of-file is reached */
                {
@@ -2109,13 +2122,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 >= 1428 )
+                               if ( yy_current_state >= 1450 )
                                        yy_c = yy_meta[yy_c];
                                }
                        yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c];
                        ++yy_cp;
                        }
-               while ( yy_current_state != 1427 );
+               while ( yy_current_state != 1449 );
                yy_cp = (yy_last_accepting_cpos);
                yy_current_state = (yy_last_accepting_state);
 
@@ -2134,13 +2147,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 < 171 )
+                       else if ( yy_act < 173 )
                                fprintf( stderr, "--accepting rule at line %ld (\"%s\")\n",
                                         (long)yy_rule_linenum[yy_act], yytext );
-                       else if ( yy_act == 171 )
+                       else if ( yy_act == 173 )
                                fprintf( stderr, "--accepting default rule (\"%s\")\n",
                                         yytext );
-                       else if ( yy_act == 172 )
+                       else if ( yy_act == 174 )
                                fprintf( stderr, "--(end of buffer or a NUL)\n" );
                        else
                                fprintf( stderr, "--EOF (start condition %d)\n", YY_START );
@@ -2428,6 +2441,30 @@ YY_RULE_SETUP
 case 27:
 YY_RULE_SETUP
 #line 325 "dhcp4_lexer.ll"
+{
+    switch(driver.ctx_) {
+    case isc::dhcp::Parser4Context::DHCP4:
+        return isc::dhcp::Dhcp4Parser::make_CONFIG_CONTROL(driver.loc_);
+    default:
+        return isc::dhcp::Dhcp4Parser::make_STRING("config-control", driver.loc_);
+    }
+}
+       YY_BREAK
+case 28:
+YY_RULE_SETUP
+#line 334 "dhcp4_lexer.ll"
+{
+    switch(driver.ctx_) {
+    case isc::dhcp::Parser4Context::CONFIG_CONTROL:
+        return isc::dhcp::Dhcp4Parser::make_CONFIG_DATABASES(driver.loc_);
+    default:
+        return isc::dhcp::Dhcp4Parser::make_STRING("config-databases", driver.loc_);
+    }
+}
+       YY_BREAK
+case 29:
+YY_RULE_SETUP
+#line 343 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::HOSTS_DATABASE:
@@ -2437,23 +2474,24 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 28:
+case 30:
 YY_RULE_SETUP
-#line 334 "dhcp4_lexer.ll"
+#line 352 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::LEASE_DATABASE:
     case isc::dhcp::Parser4Context::HOSTS_DATABASE:
     case isc::dhcp::Parser4Context::OPTION_DEF:
+    case isc::dhcp::Parser4Context::CONFIG_DATABASE:
         return isc::dhcp::Dhcp4Parser::make_TYPE(driver.loc_);
     default:
         return isc::dhcp::Dhcp4Parser::make_STRING("type", driver.loc_);
     }
 }
        YY_BREAK
-case 29:
+case 31:
 YY_RULE_SETUP
-#line 345 "dhcp4_lexer.ll"
+#line 364 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::DATABASE_TYPE:
@@ -2463,9 +2501,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 30:
+case 32:
 YY_RULE_SETUP
-#line 354 "dhcp4_lexer.ll"
+#line 373 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::DATABASE_TYPE:
@@ -2475,9 +2513,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 31:
+case 33:
 YY_RULE_SETUP
-#line 363 "dhcp4_lexer.ll"
+#line 382 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::DATABASE_TYPE:
@@ -2487,9 +2525,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 32:
+case 34:
 YY_RULE_SETUP
-#line 372 "dhcp4_lexer.ll"
+#line 391 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::DATABASE_TYPE:
@@ -2499,61 +2537,65 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 33:
+case 35:
 YY_RULE_SETUP
-#line 381 "dhcp4_lexer.ll"
+#line 400 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::LEASE_DATABASE:
     case isc::dhcp::Parser4Context::HOSTS_DATABASE:
+    case isc::dhcp::Parser4Context::CONFIG_DATABASE:
         return isc::dhcp::Dhcp4Parser::make_USER(driver.loc_);
     default:
         return isc::dhcp::Dhcp4Parser::make_STRING("user", driver.loc_);
     }
 }
        YY_BREAK
-case 34:
+case 36:
 YY_RULE_SETUP
-#line 391 "dhcp4_lexer.ll"
+#line 411 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::LEASE_DATABASE:
     case isc::dhcp::Parser4Context::HOSTS_DATABASE:
+    case isc::dhcp::Parser4Context::CONFIG_DATABASE:
         return isc::dhcp::Dhcp4Parser::make_PASSWORD(driver.loc_);
     default:
         return isc::dhcp::Dhcp4Parser::make_STRING("password", driver.loc_);
     }
 }
        YY_BREAK
-case 35:
+case 37:
 YY_RULE_SETUP
-#line 401 "dhcp4_lexer.ll"
+#line 422 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::LEASE_DATABASE:
     case isc::dhcp::Parser4Context::HOSTS_DATABASE:
+    case isc::dhcp::Parser4Context::CONFIG_DATABASE:
         return isc::dhcp::Dhcp4Parser::make_HOST(driver.loc_);
     default:
         return isc::dhcp::Dhcp4Parser::make_STRING("host", driver.loc_);
     }
 }
        YY_BREAK
-case 36:
+case 38:
 YY_RULE_SETUP
-#line 411 "dhcp4_lexer.ll"
+#line 433 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::LEASE_DATABASE:
     case isc::dhcp::Parser4Context::HOSTS_DATABASE:
+    case isc::dhcp::Parser4Context::CONFIG_DATABASE:
         return isc::dhcp::Dhcp4Parser::make_PORT(driver.loc_);
     default:
         return isc::dhcp::Dhcp4Parser::make_STRING("port", driver.loc_);
     }
 }
        YY_BREAK
-case 37:
+case 39:
 YY_RULE_SETUP
-#line 421 "dhcp4_lexer.ll"
+#line 444 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::LEASE_DATABASE:
@@ -2564,9 +2606,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 38:
+case 40:
 YY_RULE_SETUP
-#line 431 "dhcp4_lexer.ll"
+#line 454 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::LEASE_DATABASE:
@@ -2577,113 +2619,121 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 39:
+case 41:
 YY_RULE_SETUP
-#line 441 "dhcp4_lexer.ll"
+#line 464 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::LEASE_DATABASE:
     case isc::dhcp::Parser4Context::HOSTS_DATABASE:
+    case isc::dhcp::Parser4Context::CONFIG_DATABASE:
         return isc::dhcp::Dhcp4Parser::make_CONNECT_TIMEOUT(driver.loc_);
     default:
         return isc::dhcp::Dhcp4Parser::make_STRING("connect-timeout", driver.loc_);
     }
 }
        YY_BREAK
-case 40:
+case 42:
 YY_RULE_SETUP
-#line 451 "dhcp4_lexer.ll"
+#line 475 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::LEASE_DATABASE:
     case isc::dhcp::Parser4Context::HOSTS_DATABASE:
+    case isc::dhcp::Parser4Context::CONFIG_DATABASE:
         return isc::dhcp::Dhcp4Parser::make_KEYSPACE(driver.loc_);
     default:
         return isc::dhcp::Dhcp4Parser::make_STRING("keyspace", driver.loc_);
     }
 }
        YY_BREAK
-case 41:
+case 43:
 YY_RULE_SETUP
-#line 461 "dhcp4_lexer.ll"
+#line 486 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::LEASE_DATABASE:
     case isc::dhcp::Parser4Context::HOSTS_DATABASE:
+    case isc::dhcp::Parser4Context::CONFIG_DATABASE:
         return isc::dhcp::Dhcp4Parser::make_RECONNECT_WAIT_TIME(driver.loc_);
     default:
         return isc::dhcp::Dhcp4Parser::make_STRING("reconnect-wait-time", driver.loc_);
     }
 }
        YY_BREAK
-case 42:
+case 44:
 YY_RULE_SETUP
-#line 471 "dhcp4_lexer.ll"
+#line 497 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::LEASE_DATABASE:
     case isc::dhcp::Parser4Context::HOSTS_DATABASE:
+    case isc::dhcp::Parser4Context::CONFIG_DATABASE:
         return isc::dhcp::Dhcp4Parser::make_REQUEST_TIMEOUT(driver.loc_);
     default:
         return isc::dhcp::Dhcp4Parser::make_STRING("request-timeout", driver.loc_);
     }
 }
        YY_BREAK
-case 43:
+case 45:
 YY_RULE_SETUP
-#line 481 "dhcp4_lexer.ll"
+#line 508 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::LEASE_DATABASE:
     case isc::dhcp::Parser4Context::HOSTS_DATABASE:
+    case isc::dhcp::Parser4Context::CONFIG_DATABASE:
         return isc::dhcp::Dhcp4Parser::make_TCP_KEEPALIVE(driver.loc_);
     default:
         return isc::dhcp::Dhcp4Parser::make_STRING("tcp-keepalive", driver.loc_);
     }
 }
        YY_BREAK
-case 44:
+case 46:
 YY_RULE_SETUP
-#line 491 "dhcp4_lexer.ll"
+#line 519 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::LEASE_DATABASE:
     case isc::dhcp::Parser4Context::HOSTS_DATABASE:
+    case isc::dhcp::Parser4Context::CONFIG_DATABASE:
         return isc::dhcp::Dhcp4Parser::make_TCP_NODELAY(driver.loc_);
     default:
         return isc::dhcp::Dhcp4Parser::make_STRING("tcp-nodelay", driver.loc_);
     }
 }
        YY_BREAK
-case 45:
+case 47:
 YY_RULE_SETUP
-#line 501 "dhcp4_lexer.ll"
+#line 530 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::LEASE_DATABASE:
     case isc::dhcp::Parser4Context::HOSTS_DATABASE:
+    case isc::dhcp::Parser4Context::CONFIG_DATABASE:
         return isc::dhcp::Dhcp4Parser::make_CONTACT_POINTS(driver.loc_);
     default:
         return isc::dhcp::Dhcp4Parser::make_STRING("contact-points", driver.loc_);
     }
 }
        YY_BREAK
-case 46:
+case 48:
 YY_RULE_SETUP
-#line 511 "dhcp4_lexer.ll"
+#line 541 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::LEASE_DATABASE:
     case isc::dhcp::Parser4Context::HOSTS_DATABASE:
+    case isc::dhcp::Parser4Context::CONFIG_DATABASE:
         return isc::dhcp::Dhcp4Parser::make_MAX_RECONNECT_TRIES(driver.loc_);
     default:
         return isc::dhcp::Dhcp4Parser::make_STRING("max-reconnect-tries", driver.loc_);
     }
 }
        YY_BREAK
-case 47:
+case 49:
 YY_RULE_SETUP
-#line 521 "dhcp4_lexer.ll"
+#line 552 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::DHCP4:
@@ -2695,9 +2745,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 48:
+case 50:
 YY_RULE_SETUP
-#line 532 "dhcp4_lexer.ll"
+#line 563 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::DHCP4:
@@ -2709,9 +2759,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 49:
+case 51:
 YY_RULE_SETUP
-#line 543 "dhcp4_lexer.ll"
+#line 574 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::DHCP4:
@@ -2723,9 +2773,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 50:
+case 52:
 YY_RULE_SETUP
-#line 554 "dhcp4_lexer.ll"
+#line 585 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::DHCP4:
@@ -2735,9 +2785,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 51:
+case 53:
 YY_RULE_SETUP
-#line 563 "dhcp4_lexer.ll"
+#line 594 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::DHCP4:
@@ -2748,9 +2798,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 52:
+case 54:
 YY_RULE_SETUP
-#line 573 "dhcp4_lexer.ll"
+#line 604 "dhcp4_lexer.ll"
 {
     switch (driver.ctx_) {
     case isc::dhcp::Parser4Context::DHCP4:
@@ -2760,9 +2810,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 53:
+case 55:
 YY_RULE_SETUP
-#line 582 "dhcp4_lexer.ll"
+#line 613 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::DHCP4:
@@ -2773,9 +2823,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 54:
+case 56:
 YY_RULE_SETUP
-#line 592 "dhcp4_lexer.ll"
+#line 623 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::DHCP4:
@@ -2790,13 +2840,14 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 55:
+case 57:
 YY_RULE_SETUP
-#line 606 "dhcp4_lexer.ll"
+#line 637 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::LEASE_DATABASE:
     case isc::dhcp::Parser4Context::HOSTS_DATABASE:
+    case isc::dhcp::Parser4Context::CONFIG_DATABASE:
     case isc::dhcp::Parser4Context::OPTION_DEF:
     case isc::dhcp::Parser4Context::OPTION_DATA:
     case isc::dhcp::Parser4Context::CLIENT_CLASSES:
@@ -2808,9 +2859,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 56:
+case 58:
 YY_RULE_SETUP
-#line 621 "dhcp4_lexer.ll"
+#line 653 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::OPTION_DATA:
@@ -2820,9 +2871,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 57:
+case 59:
 YY_RULE_SETUP
-#line 630 "dhcp4_lexer.ll"
+#line 662 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::OPTION_DATA:
@@ -2832,9 +2883,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 58:
+case 60:
 YY_RULE_SETUP
-#line 639 "dhcp4_lexer.ll"
+#line 671 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::SUBNET4:
@@ -2844,9 +2895,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 59:
+case 61:
 YY_RULE_SETUP
-#line 648 "dhcp4_lexer.ll"
+#line 680 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::POOLS:
@@ -2856,9 +2907,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 60:
+case 62:
 YY_RULE_SETUP
-#line 657 "dhcp4_lexer.ll"
+#line 689 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::DHCP4:
@@ -2879,9 +2930,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 61:
+case 63:
 YY_RULE_SETUP
-#line 677 "dhcp4_lexer.ll"
+#line 709 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::DHCP4:
@@ -2902,9 +2953,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 62:
+case 64:
 YY_RULE_SETUP
-#line 697 "dhcp4_lexer.ll"
+#line 729 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::SUBNET4:
@@ -2914,9 +2965,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 63:
+case 65:
 YY_RULE_SETUP
-#line 706 "dhcp4_lexer.ll"
+#line 738 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::SUBNET4:
@@ -2927,9 +2978,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 64:
+case 66:
 YY_RULE_SETUP
-#line 716 "dhcp4_lexer.ll"
+#line 748 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::SUBNET4:
@@ -2939,9 +2990,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 65:
+case 67:
 YY_RULE_SETUP
-#line 725 "dhcp4_lexer.ll"
+#line 757 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::SUBNET4:
@@ -2952,9 +3003,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 66:
+case 68:
 YY_RULE_SETUP
-#line 735 "dhcp4_lexer.ll"
+#line 767 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::RESERVATION_MODE:
@@ -2964,9 +3015,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 67:
+case 69:
 YY_RULE_SETUP
-#line 744 "dhcp4_lexer.ll"
+#line 776 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::RESERVATION_MODE:
@@ -2976,9 +3027,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 68:
+case 70:
 YY_RULE_SETUP
-#line 753 "dhcp4_lexer.ll"
+#line 785 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::RESERVATION_MODE:
@@ -2988,9 +3039,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 69:
+case 71:
 YY_RULE_SETUP
-#line 762 "dhcp4_lexer.ll"
+#line 794 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::RESERVATION_MODE:
@@ -3000,9 +3051,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 70:
+case 72:
 YY_RULE_SETUP
-#line 771 "dhcp4_lexer.ll"
+#line 803 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::RESERVATION_MODE:
@@ -3012,9 +3063,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 71:
+case 73:
 YY_RULE_SETUP
-#line 780 "dhcp4_lexer.ll"
+#line 812 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::OPTION_DEF:
@@ -3025,9 +3076,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 72:
+case 74:
 YY_RULE_SETUP
-#line 790 "dhcp4_lexer.ll"
+#line 822 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::DHCP4:
@@ -3037,9 +3088,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 73:
+case 75:
 YY_RULE_SETUP
-#line 799 "dhcp4_lexer.ll"
+#line 831 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::CONFIG:
@@ -3049,9 +3100,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 74:
+case 76:
 YY_RULE_SETUP
-#line 808 "dhcp4_lexer.ll"
+#line 840 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::LOGGING:
@@ -3061,9 +3112,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 75:
+case 77:
 YY_RULE_SETUP
-#line 817 "dhcp4_lexer.ll"
+#line 849 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::LOGGERS:
@@ -3073,9 +3124,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 76:
+case 78:
 YY_RULE_SETUP
-#line 826 "dhcp4_lexer.ll"
+#line 858 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::OUTPUT_OPTIONS:
@@ -3085,9 +3136,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 77:
+case 79:
 YY_RULE_SETUP
-#line 835 "dhcp4_lexer.ll"
+#line 867 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::LOGGERS:
@@ -3097,9 +3148,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 78:
+case 80:
 YY_RULE_SETUP
-#line 844 "dhcp4_lexer.ll"
+#line 876 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::OUTPUT_OPTIONS:
@@ -3109,9 +3160,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 79:
+case 81:
 YY_RULE_SETUP
-#line 853 "dhcp4_lexer.ll"
+#line 885 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::OUTPUT_OPTIONS:
@@ -3121,9 +3172,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 80:
+case 82:
 YY_RULE_SETUP
-#line 862 "dhcp4_lexer.ll"
+#line 894 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::OUTPUT_OPTIONS:
@@ -3133,9 +3184,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 81:
+case 83:
 YY_RULE_SETUP
-#line 871 "dhcp4_lexer.ll"
+#line 903 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::LOGGERS:
@@ -3145,9 +3196,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 82:
+case 84:
 YY_RULE_SETUP
-#line 880 "dhcp4_lexer.ll"
+#line 912 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::DHCP4:
@@ -3158,9 +3209,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 83:
+case 85:
 YY_RULE_SETUP
-#line 890 "dhcp4_lexer.ll"
+#line 922 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::SUBNET4:
@@ -3172,9 +3223,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 84:
+case 86:
 YY_RULE_SETUP
-#line 901 "dhcp4_lexer.ll"
+#line 933 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::SUBNET4:
@@ -3187,9 +3238,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 85:
+case 87:
 YY_RULE_SETUP
-#line 913 "dhcp4_lexer.ll"
+#line 945 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::CLIENT_CLASSES:
@@ -3199,9 +3250,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 86:
+case 88:
 YY_RULE_SETUP
-#line 922 "dhcp4_lexer.ll"
+#line 954 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::CLIENT_CLASSES:
@@ -3211,9 +3262,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 87:
+case 89:
 YY_RULE_SETUP
-#line 931 "dhcp4_lexer.ll"
+#line 963 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::DHCP4:
@@ -3224,9 +3275,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 88:
+case 90:
 YY_RULE_SETUP
-#line 941 "dhcp4_lexer.ll"
+#line 973 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::HOST_RESERVATION_IDENTIFIERS:
@@ -3237,9 +3288,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 89:
+case 91:
 YY_RULE_SETUP
-#line 951 "dhcp4_lexer.ll"
+#line 983 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::HOST_RESERVATION_IDENTIFIERS:
@@ -3250,9 +3301,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 90:
+case 92:
 YY_RULE_SETUP
-#line 961 "dhcp4_lexer.ll"
+#line 993 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::HOST_RESERVATION_IDENTIFIERS:
@@ -3263,9 +3314,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 91:
+case 93:
 YY_RULE_SETUP
-#line 971 "dhcp4_lexer.ll"
+#line 1003 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::HOST_RESERVATION_IDENTIFIERS:
@@ -3276,9 +3327,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 92:
+case 94:
 YY_RULE_SETUP
-#line 981 "dhcp4_lexer.ll"
+#line 1013 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::HOST_RESERVATION_IDENTIFIERS:
@@ -3289,9 +3340,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 93:
+case 95:
 YY_RULE_SETUP
-#line 991 "dhcp4_lexer.ll"
+#line 1023 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::RESERVATIONS:
@@ -3301,9 +3352,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 94:
+case 96:
 YY_RULE_SETUP
-#line 1000 "dhcp4_lexer.ll"
+#line 1032 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::OPTION_DEF:
@@ -3314,9 +3365,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 95:
+case 97:
 YY_RULE_SETUP
-#line 1010 "dhcp4_lexer.ll"
+#line 1042 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::OPTION_DATA:
@@ -3326,9 +3377,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 96:
+case 98:
 YY_RULE_SETUP
-#line 1019 "dhcp4_lexer.ll"
+#line 1051 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::OPTION_DEF:
@@ -3338,9 +3389,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 97:
+case 99:
 YY_RULE_SETUP
-#line 1028 "dhcp4_lexer.ll"
+#line 1060 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::OPTION_DEF:
@@ -3350,9 +3401,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 98:
+case 100:
 YY_RULE_SETUP
-#line 1037 "dhcp4_lexer.ll"
+#line 1069 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::OPTION_DEF:
@@ -3362,9 +3413,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 99:
+case 101:
 YY_RULE_SETUP
-#line 1046 "dhcp4_lexer.ll"
+#line 1078 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::SUBNET4:
@@ -3375,9 +3426,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 100:
+case 102:
 YY_RULE_SETUP
-#line 1056 "dhcp4_lexer.ll"
+#line 1088 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::RELAY:
@@ -3388,9 +3439,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 101:
+case 103:
 YY_RULE_SETUP
-#line 1066 "dhcp4_lexer.ll"
+#line 1098 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::RELAY:
@@ -3400,9 +3451,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 102:
+case 104:
 YY_RULE_SETUP
-#line 1075 "dhcp4_lexer.ll"
+#line 1107 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::DHCP4:
@@ -3412,9 +3463,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 103:
+case 105:
 YY_RULE_SETUP
-#line 1085 "dhcp4_lexer.ll"
+#line 1117 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::HOOKS_LIBRARIES:
@@ -3424,9 +3475,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 104:
+case 106:
 YY_RULE_SETUP
-#line 1094 "dhcp4_lexer.ll"
+#line 1126 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::HOOKS_LIBRARIES:
@@ -3436,9 +3487,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 105:
+case 107:
 YY_RULE_SETUP
-#line 1103 "dhcp4_lexer.ll"
+#line 1135 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::DHCP4:
@@ -3448,9 +3499,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 106:
+case 108:
 YY_RULE_SETUP
-#line 1112 "dhcp4_lexer.ll"
+#line 1144 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::EXPIRED_LEASES_PROCESSING:
@@ -3460,9 +3511,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 107:
+case 109:
 YY_RULE_SETUP
-#line 1121 "dhcp4_lexer.ll"
+#line 1153 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::EXPIRED_LEASES_PROCESSING:
@@ -3472,9 +3523,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 108:
+case 110:
 YY_RULE_SETUP
-#line 1130 "dhcp4_lexer.ll"
+#line 1162 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::EXPIRED_LEASES_PROCESSING:
@@ -3484,9 +3535,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 109:
+case 111:
 YY_RULE_SETUP
-#line 1139 "dhcp4_lexer.ll"
+#line 1171 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::EXPIRED_LEASES_PROCESSING:
@@ -3496,9 +3547,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 110:
+case 112:
 YY_RULE_SETUP
-#line 1148 "dhcp4_lexer.ll"
+#line 1180 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::EXPIRED_LEASES_PROCESSING:
@@ -3508,9 +3559,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 111:
+case 113:
 YY_RULE_SETUP
-#line 1157 "dhcp4_lexer.ll"
+#line 1189 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::EXPIRED_LEASES_PROCESSING:
@@ -3520,9 +3571,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 112:
+case 114:
 YY_RULE_SETUP
-#line 1166 "dhcp4_lexer.ll"
+#line 1198 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::DHCP4:
@@ -3532,9 +3583,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 113:
+case 115:
 YY_RULE_SETUP
-#line 1175 "dhcp4_lexer.ll"
+#line 1207 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::DHCP4:
@@ -3544,9 +3595,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 114:
+case 116:
 YY_RULE_SETUP
-#line 1184 "dhcp4_lexer.ll"
+#line 1216 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::CONTROL_SOCKET:
@@ -3556,9 +3607,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 115:
+case 117:
 YY_RULE_SETUP
-#line 1193 "dhcp4_lexer.ll"
+#line 1225 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::CONTROL_SOCKET:
@@ -3568,9 +3619,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 116:
+case 118:
 YY_RULE_SETUP
-#line 1202 "dhcp4_lexer.ll"
+#line 1234 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::DHCP4:
@@ -3580,9 +3631,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 117:
+case 119:
 YY_RULE_SETUP
-#line 1211 "dhcp4_lexer.ll"
+#line 1243 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::DHCP_DDNS:
@@ -3592,9 +3643,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 118:
+case 120:
 YY_RULE_SETUP
-#line 1220 "dhcp4_lexer.ll"
+#line 1252 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::DHCP_DDNS:
@@ -3604,9 +3655,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 119:
+case 121:
 YY_RULE_SETUP
-#line 1229 "dhcp4_lexer.ll"
+#line 1261 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::DHCP_DDNS:
@@ -3616,9 +3667,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 120:
+case 122:
 YY_RULE_SETUP
-#line 1238 "dhcp4_lexer.ll"
+#line 1270 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::DHCP_DDNS:
@@ -3628,9 +3679,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 121:
+case 123:
 YY_RULE_SETUP
-#line 1247 "dhcp4_lexer.ll"
+#line 1279 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::DHCP_DDNS:
@@ -3640,9 +3691,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 122:
+case 124:
 YY_RULE_SETUP
-#line 1256 "dhcp4_lexer.ll"
+#line 1288 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::DHCP_DDNS:
@@ -3652,9 +3703,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 123:
+case 125:
 YY_RULE_SETUP
-#line 1265 "dhcp4_lexer.ll"
+#line 1297 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::DHCP_DDNS:
@@ -3664,9 +3715,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 124:
+case 126:
 YY_RULE_SETUP
-#line 1274 "dhcp4_lexer.ll"
+#line 1306 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::DHCP_DDNS:
@@ -3676,9 +3727,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 125:
+case 127:
 YY_RULE_SETUP
-#line 1283 "dhcp4_lexer.ll"
+#line 1315 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::DHCP_DDNS:
@@ -3688,9 +3739,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 126:
+case 128:
 YY_RULE_SETUP
-#line 1292 "dhcp4_lexer.ll"
+#line 1324 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::DHCP_DDNS:
@@ -3700,9 +3751,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 127:
+case 129:
 YY_RULE_SETUP
-#line 1301 "dhcp4_lexer.ll"
+#line 1333 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::DHCP_DDNS:
@@ -3712,9 +3763,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 128:
+case 130:
 YY_RULE_SETUP
-#line 1310 "dhcp4_lexer.ll"
+#line 1342 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::DHCP_DDNS:
@@ -3724,9 +3775,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 129:
+case 131:
 YY_RULE_SETUP
-#line 1319 "dhcp4_lexer.ll"
+#line 1351 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::DHCP_DDNS:
@@ -3736,9 +3787,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 130:
+case 132:
 YY_RULE_SETUP
-#line 1328 "dhcp4_lexer.ll"
+#line 1360 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::DHCP_DDNS:
@@ -3748,9 +3799,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 131:
+case 133:
 YY_RULE_SETUP
-#line 1337 "dhcp4_lexer.ll"
+#line 1369 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::DHCP_DDNS:
@@ -3760,9 +3811,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 132:
+case 134:
 YY_RULE_SETUP
-#line 1346 "dhcp4_lexer.ll"
+#line 1378 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::DHCP_DDNS:
@@ -3772,9 +3823,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 133:
+case 135:
 YY_RULE_SETUP
-#line 1355 "dhcp4_lexer.ll"
+#line 1387 "dhcp4_lexer.ll"
 {
     /* dhcp-ddns value keywords are case insensitive */
     if (driver.ctx_ == isc::dhcp::Parser4Context::NCR_PROTOCOL) {
@@ -3785,9 +3836,9 @@ YY_RULE_SETUP
     return isc::dhcp::Dhcp4Parser::make_STRING(tmp, driver.loc_);
 }
        YY_BREAK
-case 134:
+case 136:
 YY_RULE_SETUP
-#line 1365 "dhcp4_lexer.ll"
+#line 1397 "dhcp4_lexer.ll"
 {
     /* dhcp-ddns value keywords are case insensitive */
     if (driver.ctx_ == isc::dhcp::Parser4Context::NCR_PROTOCOL) {
@@ -3798,9 +3849,9 @@ YY_RULE_SETUP
     return isc::dhcp::Dhcp4Parser::make_STRING(tmp, driver.loc_);
 }
        YY_BREAK
-case 135:
+case 137:
 YY_RULE_SETUP
-#line 1375 "dhcp4_lexer.ll"
+#line 1407 "dhcp4_lexer.ll"
 {
     /* dhcp-ddns value keywords are case insensitive */
     if (driver.ctx_ == isc::dhcp::Parser4Context::NCR_FORMAT) {
@@ -3811,9 +3862,9 @@ YY_RULE_SETUP
     return isc::dhcp::Dhcp4Parser::make_STRING(tmp, driver.loc_);
 }
        YY_BREAK
-case 136:
+case 138:
 YY_RULE_SETUP
-#line 1385 "dhcp4_lexer.ll"
+#line 1417 "dhcp4_lexer.ll"
 {
     /* dhcp-ddns value keywords are case insensitive */
     if (driver.ctx_ == isc::dhcp::Parser4Context::REPLACE_CLIENT_NAME) {
@@ -3824,9 +3875,9 @@ YY_RULE_SETUP
     return isc::dhcp::Dhcp4Parser::make_STRING(tmp, driver.loc_);
 }
        YY_BREAK
-case 137:
+case 139:
 YY_RULE_SETUP
-#line 1395 "dhcp4_lexer.ll"
+#line 1427 "dhcp4_lexer.ll"
 {
     /* dhcp-ddns value keywords are case insensitive */
     if (driver.ctx_ == isc::dhcp::Parser4Context::REPLACE_CLIENT_NAME) {
@@ -3837,9 +3888,9 @@ YY_RULE_SETUP
     return isc::dhcp::Dhcp4Parser::make_STRING(tmp, driver.loc_);
 }
        YY_BREAK
-case 138:
+case 140:
 YY_RULE_SETUP
-#line 1405 "dhcp4_lexer.ll"
+#line 1437 "dhcp4_lexer.ll"
 {
     /* dhcp-ddns value keywords are case insensitive */
     if (driver.ctx_ == isc::dhcp::Parser4Context::REPLACE_CLIENT_NAME) {
@@ -3850,9 +3901,9 @@ YY_RULE_SETUP
     return isc::dhcp::Dhcp4Parser::make_STRING(tmp, driver.loc_);
 }
        YY_BREAK
-case 139:
+case 141:
 YY_RULE_SETUP
-#line 1415 "dhcp4_lexer.ll"
+#line 1447 "dhcp4_lexer.ll"
 {
     /* dhcp-ddns value keywords are case insensitive */
     if (driver.ctx_ == isc::dhcp::Parser4Context::REPLACE_CLIENT_NAME) {
@@ -3863,9 +3914,9 @@ YY_RULE_SETUP
     return isc::dhcp::Dhcp4Parser::make_STRING(tmp, driver.loc_);
 }
        YY_BREAK
-case 140:
+case 142:
 YY_RULE_SETUP
-#line 1425 "dhcp4_lexer.ll"
+#line 1457 "dhcp4_lexer.ll"
 {
     /* dhcp-ddns value keywords are case insensitive */
     if (driver.ctx_ == isc::dhcp::Parser4Context::REPLACE_CLIENT_NAME) {
@@ -3876,9 +3927,9 @@ YY_RULE_SETUP
     return isc::dhcp::Dhcp4Parser::make_STRING(tmp, driver.loc_);
 }
        YY_BREAK
-case 141:
+case 143:
 YY_RULE_SETUP
-#line 1435 "dhcp4_lexer.ll"
+#line 1467 "dhcp4_lexer.ll"
 {
     /* dhcp-ddns value keywords are case insensitive */
     if (driver.ctx_ == isc::dhcp::Parser4Context::REPLACE_CLIENT_NAME) {
@@ -3889,9 +3940,9 @@ YY_RULE_SETUP
     return isc::dhcp::Dhcp4Parser::make_STRING(tmp, driver.loc_);
 }
        YY_BREAK
-case 142:
+case 144:
 YY_RULE_SETUP
-#line 1445 "dhcp4_lexer.ll"
+#line 1477 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::CONFIG:
@@ -3901,9 +3952,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 143:
+case 145:
 YY_RULE_SETUP
-#line 1454 "dhcp4_lexer.ll"
+#line 1486 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::CONFIG:
@@ -3913,9 +3964,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 144:
+case 146:
 YY_RULE_SETUP
-#line 1463 "dhcp4_lexer.ll"
+#line 1495 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::CONFIG:
@@ -3925,9 +3976,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 145:
+case 147:
 YY_RULE_SETUP
-#line 1472 "dhcp4_lexer.ll"
+#line 1504 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::SUBNET4:
@@ -3937,9 +3988,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 146:
+case 148:
 YY_RULE_SETUP
-#line 1481 "dhcp4_lexer.ll"
+#line 1513 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::SUBNET4:
@@ -3949,9 +4000,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 147:
+case 149:
 YY_RULE_SETUP
-#line 1490 "dhcp4_lexer.ll"
+#line 1522 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::SUBNET4:
@@ -3961,9 +4012,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 148:
+case 150:
 YY_RULE_SETUP
-#line 1499 "dhcp4_lexer.ll"
+#line 1531 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::DHCP4:
@@ -3973,9 +4024,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 149:
+case 151:
 YY_RULE_SETUP
-#line 1508 "dhcp4_lexer.ll"
+#line 1540 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::DHCP4:
@@ -3987,9 +4038,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 150:
+case 152:
 YY_RULE_SETUP
-#line 1519 "dhcp4_lexer.ll"
+#line 1551 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::DHCP4:
@@ -4003,9 +4054,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 151:
+case 153:
 YY_RULE_SETUP
-#line 1532 "dhcp4_lexer.ll"
+#line 1564 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::DHCP4:
@@ -4019,9 +4070,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 152:
+case 154:
 YY_RULE_SETUP
-#line 1545 "dhcp4_lexer.ll"
+#line 1577 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::DHCP4:
@@ -4035,9 +4086,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 153:
+case 155:
 YY_RULE_SETUP
-#line 1560 "dhcp4_lexer.ll"
+#line 1592 "dhcp4_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.
@@ -4137,65 +4188,65 @@ YY_RULE_SETUP
     return isc::dhcp::Dhcp4Parser::make_STRING(decoded, driver.loc_);
 }
        YY_BREAK
-case 154:
-/* rule 154 can match eol */
+case 156:
+/* rule 156 can match eol */
 YY_RULE_SETUP
-#line 1659 "dhcp4_lexer.ll"
+#line 1691 "dhcp4_lexer.ll"
 {
     /* Bad string with a forbidden control character inside */
     driver.error(driver.loc_, "Invalid control in " + std::string(yytext));
 }
        YY_BREAK
-case 155:
-/* rule 155 can match eol */
+case 157:
+/* rule 157 can match eol */
 YY_RULE_SETUP
-#line 1664 "dhcp4_lexer.ll"
+#line 1696 "dhcp4_lexer.ll"
 {
     /* Bad string with a bad escape inside */
     driver.error(driver.loc_, "Bad escape in " + std::string(yytext));
 }
        YY_BREAK
-case 156:
+case 158:
 YY_RULE_SETUP
-#line 1669 "dhcp4_lexer.ll"
+#line 1701 "dhcp4_lexer.ll"
 {
     /* Bad string with an open escape at the end */
     driver.error(driver.loc_, "Overflow escape in " + std::string(yytext));
 }
        YY_BREAK
-case 157:
+case 159:
 YY_RULE_SETUP
-#line 1674 "dhcp4_lexer.ll"
+#line 1706 "dhcp4_lexer.ll"
 { return isc::dhcp::Dhcp4Parser::make_LSQUARE_BRACKET(driver.loc_); }
        YY_BREAK
-case 158:
+case 160:
 YY_RULE_SETUP
-#line 1675 "dhcp4_lexer.ll"
+#line 1707 "dhcp4_lexer.ll"
 { return isc::dhcp::Dhcp4Parser::make_RSQUARE_BRACKET(driver.loc_); }
        YY_BREAK
-case 159:
+case 161:
 YY_RULE_SETUP
-#line 1676 "dhcp4_lexer.ll"
+#line 1708 "dhcp4_lexer.ll"
 { return isc::dhcp::Dhcp4Parser::make_LCURLY_BRACKET(driver.loc_); }
        YY_BREAK
-case 160:
+case 162:
 YY_RULE_SETUP
-#line 1677 "dhcp4_lexer.ll"
+#line 1709 "dhcp4_lexer.ll"
 { return isc::dhcp::Dhcp4Parser::make_RCURLY_BRACKET(driver.loc_); }
        YY_BREAK
-case 161:
+case 163:
 YY_RULE_SETUP
-#line 1678 "dhcp4_lexer.ll"
+#line 1710 "dhcp4_lexer.ll"
 { return isc::dhcp::Dhcp4Parser::make_COMMA(driver.loc_); }
        YY_BREAK
-case 162:
+case 164:
 YY_RULE_SETUP
-#line 1679 "dhcp4_lexer.ll"
+#line 1711 "dhcp4_lexer.ll"
 { return isc::dhcp::Dhcp4Parser::make_COLON(driver.loc_); }
        YY_BREAK
-case 163:
+case 165:
 YY_RULE_SETUP
-#line 1681 "dhcp4_lexer.ll"
+#line 1713 "dhcp4_lexer.ll"
 {
     /* An integer was found. */
     std::string tmp(yytext);
@@ -4214,9 +4265,9 @@ YY_RULE_SETUP
     return isc::dhcp::Dhcp4Parser::make_INTEGER(integer, driver.loc_);
 }
        YY_BREAK
-case 164:
+case 166:
 YY_RULE_SETUP
-#line 1699 "dhcp4_lexer.ll"
+#line 1731 "dhcp4_lexer.ll"
 {
     /* A floating point was found. */
     std::string tmp(yytext);
@@ -4230,43 +4281,43 @@ YY_RULE_SETUP
     return isc::dhcp::Dhcp4Parser::make_FLOAT(fp, driver.loc_);
 }
        YY_BREAK
-case 165:
+case 167:
 YY_RULE_SETUP
-#line 1712 "dhcp4_lexer.ll"
+#line 1744 "dhcp4_lexer.ll"
 {
     string tmp(yytext);
     return isc::dhcp::Dhcp4Parser::make_BOOLEAN(tmp == "true", driver.loc_);
 }
        YY_BREAK
-case 166:
+case 168:
 YY_RULE_SETUP
-#line 1717 "dhcp4_lexer.ll"
+#line 1749 "dhcp4_lexer.ll"
 {
    return isc::dhcp::Dhcp4Parser::make_NULL_TYPE(driver.loc_);
 }
        YY_BREAK
-case 167:
+case 169:
 YY_RULE_SETUP
-#line 1721 "dhcp4_lexer.ll"
+#line 1753 "dhcp4_lexer.ll"
 driver.error (driver.loc_, "JSON true reserved keyword is lower case only");
        YY_BREAK
-case 168:
+case 170:
 YY_RULE_SETUP
-#line 1723 "dhcp4_lexer.ll"
+#line 1755 "dhcp4_lexer.ll"
 driver.error (driver.loc_, "JSON false reserved keyword is lower case only");
        YY_BREAK
-case 169:
+case 171:
 YY_RULE_SETUP
-#line 1725 "dhcp4_lexer.ll"
+#line 1757 "dhcp4_lexer.ll"
 driver.error (driver.loc_, "JSON null reserved keyword is lower case only");
        YY_BREAK
-case 170:
+case 172:
 YY_RULE_SETUP
-#line 1727 "dhcp4_lexer.ll"
+#line 1759 "dhcp4_lexer.ll"
 driver.error (driver.loc_, "Invalid character: " + std::string(yytext));
        YY_BREAK
 case YY_STATE_EOF(INITIAL):
-#line 1729 "dhcp4_lexer.ll"
+#line 1761 "dhcp4_lexer.ll"
 {
     if (driver.states_.empty()) {
         return isc::dhcp::Dhcp4Parser::make_END(driver.loc_);
@@ -4290,12 +4341,12 @@ case YY_STATE_EOF(INITIAL):
     BEGIN(DIR_EXIT);
 }
        YY_BREAK
-case 171:
+case 173:
 YY_RULE_SETUP
-#line 1752 "dhcp4_lexer.ll"
+#line 1784 "dhcp4_lexer.ll"
 ECHO;
        YY_BREAK
-#line 4298 "dhcp4_lexer.cc"
+#line 4350 "dhcp4_lexer.cc"
 
        case YY_END_OF_BUFFER:
                {
@@ -4614,7 +4665,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 >= 1428 )
+                       if ( yy_current_state >= 1450 )
                                yy_c = yy_meta[yy_c];
                        }
                yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c];
@@ -4647,11 +4698,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 >= 1428 )
+               if ( yy_current_state >= 1450 )
                        yy_c = yy_meta[yy_c];
                }
        yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c];
-       yy_is_jam = (yy_current_state == 1427);
+       yy_is_jam = (yy_current_state == 1449);
 
                return yy_is_jam ? 0 : yy_current_state;
 }
@@ -5400,7 +5451,7 @@ void yyfree (void * ptr )
 
 /* %ok-for-header */
 
-#line 1752 "dhcp4_lexer.ll"
+#line 1784 "dhcp4_lexer.ll"
 
 
 using namespace isc::dhcp;
index 1b9ae680c23c9bf7d59edd1dceebdbb19bc9b60e..c7bd083782de62524c776752b8f759560a688714 100644 (file)
@@ -321,6 +321,24 @@ ControlCharacterFill            [^"\\]|\\{JSONEscapeSequence}
     }
 }
 
+\"config-control\" {
+    switch(driver.ctx_) {
+    case isc::dhcp::Parser4Context::DHCP4:
+        return isc::dhcp::Dhcp4Parser::make_CONFIG_CONTROL(driver.loc_);
+    default:
+        return isc::dhcp::Dhcp4Parser::make_STRING("config-control", driver.loc_);
+    }
+}
+
+\"config-databases\" {
+    switch(driver.ctx_) {
+    case isc::dhcp::Parser4Context::CONFIG_CONTROL:
+        return isc::dhcp::Dhcp4Parser::make_CONFIG_DATABASES(driver.loc_);
+    default:
+        return isc::dhcp::Dhcp4Parser::make_STRING("config-databases", driver.loc_);
+    }
+}
+
 \"readonly\" {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::HOSTS_DATABASE:
@@ -335,6 +353,7 @@ ControlCharacterFill            [^"\\]|\\{JSONEscapeSequence}
     case isc::dhcp::Parser4Context::LEASE_DATABASE:
     case isc::dhcp::Parser4Context::HOSTS_DATABASE:
     case isc::dhcp::Parser4Context::OPTION_DEF:
+    case isc::dhcp::Parser4Context::CONFIG_DATABASE:
         return isc::dhcp::Dhcp4Parser::make_TYPE(driver.loc_);
     default:
         return isc::dhcp::Dhcp4Parser::make_STRING("type", driver.loc_);
@@ -381,6 +400,7 @@ ControlCharacterFill            [^"\\]|\\{JSONEscapeSequence}
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::LEASE_DATABASE:
     case isc::dhcp::Parser4Context::HOSTS_DATABASE:
+    case isc::dhcp::Parser4Context::CONFIG_DATABASE:
         return isc::dhcp::Dhcp4Parser::make_USER(driver.loc_);
     default:
         return isc::dhcp::Dhcp4Parser::make_STRING("user", driver.loc_);
@@ -391,6 +411,7 @@ ControlCharacterFill            [^"\\]|\\{JSONEscapeSequence}
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::LEASE_DATABASE:
     case isc::dhcp::Parser4Context::HOSTS_DATABASE:
+    case isc::dhcp::Parser4Context::CONFIG_DATABASE:
         return isc::dhcp::Dhcp4Parser::make_PASSWORD(driver.loc_);
     default:
         return isc::dhcp::Dhcp4Parser::make_STRING("password", driver.loc_);
@@ -401,6 +422,7 @@ ControlCharacterFill            [^"\\]|\\{JSONEscapeSequence}
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::LEASE_DATABASE:
     case isc::dhcp::Parser4Context::HOSTS_DATABASE:
+    case isc::dhcp::Parser4Context::CONFIG_DATABASE:
         return isc::dhcp::Dhcp4Parser::make_HOST(driver.loc_);
     default:
         return isc::dhcp::Dhcp4Parser::make_STRING("host", driver.loc_);
@@ -411,6 +433,7 @@ ControlCharacterFill            [^"\\]|\\{JSONEscapeSequence}
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::LEASE_DATABASE:
     case isc::dhcp::Parser4Context::HOSTS_DATABASE:
+    case isc::dhcp::Parser4Context::CONFIG_DATABASE:
         return isc::dhcp::Dhcp4Parser::make_PORT(driver.loc_);
     default:
         return isc::dhcp::Dhcp4Parser::make_STRING("port", driver.loc_);
@@ -441,6 +464,7 @@ ControlCharacterFill            [^"\\]|\\{JSONEscapeSequence}
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::LEASE_DATABASE:
     case isc::dhcp::Parser4Context::HOSTS_DATABASE:
+    case isc::dhcp::Parser4Context::CONFIG_DATABASE:
         return isc::dhcp::Dhcp4Parser::make_CONNECT_TIMEOUT(driver.loc_);
     default:
         return isc::dhcp::Dhcp4Parser::make_STRING("connect-timeout", driver.loc_);
@@ -451,6 +475,7 @@ ControlCharacterFill            [^"\\]|\\{JSONEscapeSequence}
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::LEASE_DATABASE:
     case isc::dhcp::Parser4Context::HOSTS_DATABASE:
+    case isc::dhcp::Parser4Context::CONFIG_DATABASE:
         return isc::dhcp::Dhcp4Parser::make_KEYSPACE(driver.loc_);
     default:
         return isc::dhcp::Dhcp4Parser::make_STRING("keyspace", driver.loc_);
@@ -461,6 +486,7 @@ ControlCharacterFill            [^"\\]|\\{JSONEscapeSequence}
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::LEASE_DATABASE:
     case isc::dhcp::Parser4Context::HOSTS_DATABASE:
+    case isc::dhcp::Parser4Context::CONFIG_DATABASE:
         return isc::dhcp::Dhcp4Parser::make_RECONNECT_WAIT_TIME(driver.loc_);
     default:
         return isc::dhcp::Dhcp4Parser::make_STRING("reconnect-wait-time", driver.loc_);
@@ -471,6 +497,7 @@ ControlCharacterFill            [^"\\]|\\{JSONEscapeSequence}
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::LEASE_DATABASE:
     case isc::dhcp::Parser4Context::HOSTS_DATABASE:
+    case isc::dhcp::Parser4Context::CONFIG_DATABASE:
         return isc::dhcp::Dhcp4Parser::make_REQUEST_TIMEOUT(driver.loc_);
     default:
         return isc::dhcp::Dhcp4Parser::make_STRING("request-timeout", driver.loc_);
@@ -481,6 +508,7 @@ ControlCharacterFill            [^"\\]|\\{JSONEscapeSequence}
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::LEASE_DATABASE:
     case isc::dhcp::Parser4Context::HOSTS_DATABASE:
+    case isc::dhcp::Parser4Context::CONFIG_DATABASE:
         return isc::dhcp::Dhcp4Parser::make_TCP_KEEPALIVE(driver.loc_);
     default:
         return isc::dhcp::Dhcp4Parser::make_STRING("tcp-keepalive", driver.loc_);
@@ -491,6 +519,7 @@ ControlCharacterFill            [^"\\]|\\{JSONEscapeSequence}
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::LEASE_DATABASE:
     case isc::dhcp::Parser4Context::HOSTS_DATABASE:
+    case isc::dhcp::Parser4Context::CONFIG_DATABASE:
         return isc::dhcp::Dhcp4Parser::make_TCP_NODELAY(driver.loc_);
     default:
         return isc::dhcp::Dhcp4Parser::make_STRING("tcp-nodelay", driver.loc_);
@@ -501,6 +530,7 @@ ControlCharacterFill            [^"\\]|\\{JSONEscapeSequence}
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::LEASE_DATABASE:
     case isc::dhcp::Parser4Context::HOSTS_DATABASE:
+    case isc::dhcp::Parser4Context::CONFIG_DATABASE:
         return isc::dhcp::Dhcp4Parser::make_CONTACT_POINTS(driver.loc_);
     default:
         return isc::dhcp::Dhcp4Parser::make_STRING("contact-points", driver.loc_);
@@ -511,6 +541,7 @@ ControlCharacterFill            [^"\\]|\\{JSONEscapeSequence}
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::LEASE_DATABASE:
     case isc::dhcp::Parser4Context::HOSTS_DATABASE:
+    case isc::dhcp::Parser4Context::CONFIG_DATABASE:
         return isc::dhcp::Dhcp4Parser::make_MAX_RECONNECT_TRIES(driver.loc_);
     default:
         return isc::dhcp::Dhcp4Parser::make_STRING("max-reconnect-tries", driver.loc_);
@@ -606,6 +637,7 @@ ControlCharacterFill            [^"\\]|\\{JSONEscapeSequence}
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::LEASE_DATABASE:
     case isc::dhcp::Parser4Context::HOSTS_DATABASE:
+    case isc::dhcp::Parser4Context::CONFIG_DATABASE:
     case isc::dhcp::Parser4Context::OPTION_DEF:
     case isc::dhcp::Parser4Context::OPTION_DATA:
     case isc::dhcp::Parser4Context::CLIENT_CLASSES:
diff --git a/src/bin/dhcp4/dhcp4_lexer.yy b/src/bin/dhcp4/dhcp4_lexer.yy
new file mode 100644 (file)
index 0000000..e69de29
index 22362d2259d2bec03c832f21520b0c5aa7c40dc0..d399520b3575f77498462103da5b9a4bbf358251 100644 (file)
@@ -763,10 +763,7 @@ will drop its message if the received message was DHCPDISCOVER,
 and will send DHCPNAK if the received message was DHCPREQUEST.
 The argument includes the client and the transaction identification
 information.
-<<<<<<< HEAD
-=======
 
 % DHCP6_DHCP4O6_PACKET_RECEIVED received DHCPv4o6 packet from DHCPv6 server (type %1) for %2 port %3 on interface %4
 This debug message is printed when the server is receiving a DHCPv4o6
 from the DHCPv6 server over inter-process communication.
->>>>>>> trac5404
index 20d078e1e26c28121709224b45b1606e925d44d3..7229e05e7209df1ea830aa7ddb6014979c63f616 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 "dhcp4_parser.cc" // lalr1.cc:406
+#line 39 "dhcp4_parser.cc" // lalr1.cc:404
 
 # ifndef YY_NULLPTR
 #  if defined __cplusplus && 201103L <= __cplusplus
 
 // User implementation prologue.
 
-#line 53 "dhcp4_parser.cc" // lalr1.cc:414
+#line 53 "dhcp4_parser.cc" // lalr1.cc:412
 // Unqualified %code blocks.
-#line 34 "dhcp4_parser.yy" // lalr1.cc:415
+#line 34 "dhcp4_parser.yy" // lalr1.cc:413
 
 #include <dhcp4/parser_context.h>
 
-#line 59 "dhcp4_parser.cc" // lalr1.cc:415
+#line 59 "dhcp4_parser.cc" // lalr1.cc:413
 
 
 #ifndef YY_
     {                                           \
       *yycdebug_ << Title << ' ';               \
       yy_print_ (*yycdebug_, Symbol);           \
-      *yycdebug_ << '\n';                       \
+      *yycdebug_ << std::endl;                  \
     }                                           \
   } while (false)
 
 #else // !PARSER4_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 // !PARSER4_DEBUG
 
 #define YYERROR         goto yyerrorlab
 #define YYRECOVERING()  (!!yyerrstatus_)
 
-#line 14 "dhcp4_parser.yy" // lalr1.cc:481
+#line 14 "dhcp4_parser.yy" // lalr1.cc:479
 namespace isc { namespace dhcp {
-#line 145 "dhcp4_parser.cc" // lalr1.cc:481
+#line 145 "dhcp4_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
   Dhcp4Parser::by_state::by_state ()
     : state (empty_state)
   {}
 
+  inline
   Dhcp4Parser::by_state::by_state (const by_state& other)
     : state (other.state)
   {}
 
+  inline
   void
   Dhcp4Parser::by_state::clear ()
   {
     state = empty_state;
   }
 
+  inline
   void
   Dhcp4Parser::by_state::move (by_state& that)
   {
@@ -223,10 +227,12 @@ namespace isc { namespace dhcp {
     that.clear ();
   }
 
+  inline
   Dhcp4Parser::by_state::by_state (state_type s)
     : state (s)
   {}
 
+  inline
   Dhcp4Parser::symbol_number_type
   Dhcp4Parser::by_state::type_get () const
   {
@@ -236,76 +242,41 @@ namespace isc { namespace dhcp {
       return yystos_[state];
   }
 
+  inline
   Dhcp4Parser::stack_symbol_type::stack_symbol_type ()
   {}
 
-  Dhcp4Parser::stack_symbol_type::stack_symbol_type (const stack_symbol_type& that)
-    : super_type (that.state, that.location)
-  {
-    switch (that.type_get ())
-    {
-      case 179: // value
-      case 183: // map_value
-      case 221: // socket_type
-      case 224: // outbound_interface_value
-      case 246: // db_type
-      case 328: // hr_mode
-      case 475: // ncr_protocol_value
-      case 483: // replace_client_name_value
-        value.copy< ElementPtr > (that.value);
-        break;
-
-      case 163: // "boolean"
-        value.copy< bool > (that.value);
-        break;
-
-      case 162: // "floating point"
-        value.copy< double > (that.value);
-        break;
-
-      case 161: // "integer"
-        value.copy< int64_t > (that.value);
-        break;
-
-      case 160: // "constant string"
-        value.copy< std::string > (that.value);
-        break;
-
-      default:
-        break;
-    }
-
-  }
 
+  inline
   Dhcp4Parser::stack_symbol_type::stack_symbol_type (state_type s, symbol_type& that)
     : super_type (s, that.location)
   {
-    switch (that.type_get ())
-    {
-      case 179: // value
-      case 183: // map_value
-      case 221: // socket_type
-      case 224: // outbound_interface_value
-      case 246: // db_type
-      case 328: // hr_mode
-      case 475: // ncr_protocol_value
-      case 483: // replace_client_name_value
+      switch (that.type_get ())
+    {
+      case 183: // value
+      case 187: // map_value
+      case 225: // socket_type
+      case 228: // outbound_interface_value
+      case 250: // db_type
+      case 332: // hr_mode
+      case 479: // ncr_protocol_value
+      case 487: // replace_client_name_value
         value.move< ElementPtr > (that.value);
         break;
 
-      case 163: // "boolean"
+      case 166: // "boolean"
         value.move< bool > (that.value);
         break;
 
-      case 162: // "floating point"
+      case 165: // "floating point"
         value.move< double > (that.value);
         break;
 
-      case 161: // "integer"
+      case 164: // "integer"
         value.move< int64_t > (that.value);
         break;
 
-      case 160: // "constant string"
+      case 163: // "constant string"
         value.move< std::string > (that.value);
         break;
 
@@ -317,36 +288,37 @@ namespace isc { namespace dhcp {
     that.type = empty_symbol;
   }
 
+  inline
   Dhcp4Parser::stack_symbol_type&
   Dhcp4Parser::stack_symbol_type::operator= (const stack_symbol_type& that)
   {
     state = that.state;
-    switch (that.type_get ())
-    {
-      case 179: // value
-      case 183: // map_value
-      case 221: // socket_type
-      case 224: // outbound_interface_value
-      case 246: // db_type
-      case 328: // hr_mode
-      case 475: // ncr_protocol_value
-      case 483: // replace_client_name_value
+      switch (that.type_get ())
+    {
+      case 183: // value
+      case 187: // map_value
+      case 225: // socket_type
+      case 228: // outbound_interface_value
+      case 250: // db_type
+      case 332: // hr_mode
+      case 479: // ncr_protocol_value
+      case 487: // replace_client_name_value
         value.copy< ElementPtr > (that.value);
         break;
 
-      case 163: // "boolean"
+      case 166: // "boolean"
         value.copy< bool > (that.value);
         break;
 
-      case 162: // "floating point"
+      case 165: // "floating point"
         value.copy< double > (that.value);
         break;
 
-      case 161: // "integer"
+      case 164: // "integer"
         value.copy< int64_t > (that.value);
         break;
 
-      case 160: // "constant string"
+      case 163: // "constant string"
         value.copy< std::string > (that.value);
         break;
 
@@ -360,6 +332,7 @@ namespace isc { namespace dhcp {
 
 
   template <typename Base>
+  inline
   void
   Dhcp4Parser::yy_destroy_ (const char* yymsg, basic_symbol<Base>& yysym) const
   {
@@ -385,88 +358,88 @@ namespace isc { namespace dhcp {
         << yysym.location << ": ";
     switch (yytype)
     {
-            case 160: // "constant string"
+            case 163: // "constant string"
 
-#line 239 "dhcp4_parser.yy" // lalr1.cc:635
+#line 242 "dhcp4_parser.yy" // lalr1.cc:636
         { yyoutput << yysym.value.template as< std::string > (); }
-#line 393 "dhcp4_parser.cc" // lalr1.cc:635
+#line 366 "dhcp4_parser.cc" // lalr1.cc:636
         break;
 
-      case 161: // "integer"
+      case 164: // "integer"
 
-#line 239 "dhcp4_parser.yy" // lalr1.cc:635
+#line 242 "dhcp4_parser.yy" // lalr1.cc:636
         { yyoutput << yysym.value.template as< int64_t > (); }
-#line 400 "dhcp4_parser.cc" // lalr1.cc:635
+#line 373 "dhcp4_parser.cc" // lalr1.cc:636
         break;
 
-      case 162: // "floating point"
+      case 165: // "floating point"
 
-#line 239 "dhcp4_parser.yy" // lalr1.cc:635
+#line 242 "dhcp4_parser.yy" // lalr1.cc:636
         { yyoutput << yysym.value.template as< double > (); }
-#line 407 "dhcp4_parser.cc" // lalr1.cc:635
+#line 380 "dhcp4_parser.cc" // lalr1.cc:636
         break;
 
-      case 163: // "boolean"
+      case 166: // "boolean"
 
-#line 239 "dhcp4_parser.yy" // lalr1.cc:635
+#line 242 "dhcp4_parser.yy" // lalr1.cc:636
         { yyoutput << yysym.value.template as< bool > (); }
-#line 414 "dhcp4_parser.cc" // lalr1.cc:635
+#line 387 "dhcp4_parser.cc" // lalr1.cc:636
         break;
 
-      case 179: // value
+      case 183: // value
 
-#line 239 "dhcp4_parser.yy" // lalr1.cc:635
+#line 242 "dhcp4_parser.yy" // lalr1.cc:636
         { yyoutput << yysym.value.template as< ElementPtr > (); }
-#line 421 "dhcp4_parser.cc" // lalr1.cc:635
+#line 394 "dhcp4_parser.cc" // lalr1.cc:636
         break;
 
-      case 183: // map_value
+      case 187: // map_value
 
-#line 239 "dhcp4_parser.yy" // lalr1.cc:635
+#line 242 "dhcp4_parser.yy" // lalr1.cc:636
         { yyoutput << yysym.value.template as< ElementPtr > (); }
-#line 428 "dhcp4_parser.cc" // lalr1.cc:635
+#line 401 "dhcp4_parser.cc" // lalr1.cc:636
         break;
 
-      case 221: // socket_type
+      case 225: // socket_type
 
-#line 239 "dhcp4_parser.yy" // lalr1.cc:635
+#line 242 "dhcp4_parser.yy" // lalr1.cc:636
         { yyoutput << yysym.value.template as< ElementPtr > (); }
-#line 435 "dhcp4_parser.cc" // lalr1.cc:635
+#line 408 "dhcp4_parser.cc" // lalr1.cc:636
         break;
 
-      case 224: // outbound_interface_value
+      case 228: // outbound_interface_value
 
-#line 239 "dhcp4_parser.yy" // lalr1.cc:635
+#line 242 "dhcp4_parser.yy" // lalr1.cc:636
         { yyoutput << yysym.value.template as< ElementPtr > (); }
-#line 442 "dhcp4_parser.cc" // lalr1.cc:635
+#line 415 "dhcp4_parser.cc" // lalr1.cc:636
         break;
 
-      case 246: // db_type
+      case 250: // db_type
 
-#line 239 "dhcp4_parser.yy" // lalr1.cc:635
+#line 242 "dhcp4_parser.yy" // lalr1.cc:636
         { yyoutput << yysym.value.template as< ElementPtr > (); }
-#line 449 "dhcp4_parser.cc" // lalr1.cc:635
+#line 422 "dhcp4_parser.cc" // lalr1.cc:636
         break;
 
-      case 328: // hr_mode
+      case 332: // hr_mode
 
-#line 239 "dhcp4_parser.yy" // lalr1.cc:635
+#line 242 "dhcp4_parser.yy" // lalr1.cc:636
         { yyoutput << yysym.value.template as< ElementPtr > (); }
-#line 456 "dhcp4_parser.cc" // lalr1.cc:635
+#line 429 "dhcp4_parser.cc" // lalr1.cc:636
         break;
 
-      case 475: // ncr_protocol_value
+      case 479: // ncr_protocol_value
 
-#line 239 "dhcp4_parser.yy" // lalr1.cc:635
+#line 242 "dhcp4_parser.yy" // lalr1.cc:636
         { yyoutput << yysym.value.template as< ElementPtr > (); }
-#line 463 "dhcp4_parser.cc" // lalr1.cc:635
+#line 436 "dhcp4_parser.cc" // lalr1.cc:636
         break;
 
-      case 483: // replace_client_name_value
+      case 487: // replace_client_name_value
 
-#line 239 "dhcp4_parser.yy" // lalr1.cc:635
+#line 242 "dhcp4_parser.yy" // lalr1.cc:636
         { yyoutput << yysym.value.template as< ElementPtr > (); }
-#line 470 "dhcp4_parser.cc" // lalr1.cc:635
+#line 443 "dhcp4_parser.cc" // lalr1.cc:636
         break;
 
 
@@ -477,6 +450,7 @@ namespace isc { namespace dhcp {
   }
 #endif
 
+  inline
   void
   Dhcp4Parser::yypush_ (const char* m, state_type s, symbol_type& sym)
   {
@@ -484,6 +458,7 @@ namespace isc { namespace dhcp {
     yypush_ (m, t);
   }
 
+  inline
   void
   Dhcp4Parser::yypush_ (const char* m, stack_symbol_type& s)
   {
@@ -492,8 +467,9 @@ namespace isc { namespace dhcp {
     yystack_.push (s);
   }
 
+  inline
   void
-  Dhcp4Parser::yypop_ (unsigned n)
+  Dhcp4Parser::yypop_ (unsigned int n)
   {
     yystack_.pop (n);
   }
@@ -525,7 +501,7 @@ namespace isc { namespace dhcp {
   }
 #endif // PARSER4_DEBUG
 
-  Dhcp4Parser::state_type
+  inline Dhcp4Parser::state_type
   Dhcp4Parser::yy_lr_goto_state_ (state_type yystate, int yysym)
   {
     int yyr = yypgoto_[yysym - yyntokens_] + yystate;
@@ -535,13 +511,13 @@ namespace isc { namespace dhcp {
       return yydefgoto_[yysym - yyntokens_];
   }
 
-  bool
+  inline bool
   Dhcp4Parser::yy_pact_value_is_default_ (int yyvalue)
   {
     return yyvalue == yypact_ninf_;
   }
 
-  bool
+  inline bool
   Dhcp4Parser::yy_table_value_is_error_ (int yyvalue)
   {
     return yyvalue == yytable_ninf_;
@@ -572,7 +548,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
@@ -584,7 +560,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_)
@@ -657,36 +633,36 @@ 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 179: // value
-      case 183: // map_value
-      case 221: // socket_type
-      case 224: // outbound_interface_value
-      case 246: // db_type
-      case 328: // hr_mode
-      case 475: // ncr_protocol_value
-      case 483: // replace_client_name_value
+        switch (yyr1_[yyn])
+    {
+      case 183: // value
+      case 187: // map_value
+      case 225: // socket_type
+      case 228: // outbound_interface_value
+      case 250: // db_type
+      case 332: // hr_mode
+      case 479: // ncr_protocol_value
+      case 487: // replace_client_name_value
         yylhs.value.build< ElementPtr > ();
         break;
 
-      case 163: // "boolean"
+      case 166: // "boolean"
         yylhs.value.build< bool > ();
         break;
 
-      case 162: // "floating point"
+      case 165: // "floating point"
         yylhs.value.build< double > ();
         break;
 
-      case 161: // "integer"
+      case 164: // "integer"
         yylhs.value.build< int64_t > ();
         break;
 
-      case 160: // "constant string"
+      case 163: // "constant string"
         yylhs.value.build< std::string > ();
         break;
 
@@ -695,11 +671,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.
@@ -709,274 +684,280 @@ namespace isc { namespace dhcp {
           switch (yyn)
             {
   case 2:
-#line 248 "dhcp4_parser.yy" // lalr1.cc:856
+#line 251 "dhcp4_parser.yy" // lalr1.cc:859
     { ctx.ctx_ = ctx.NO_KEYWORD; }
-#line 715 "dhcp4_parser.cc" // lalr1.cc:856
+#line 690 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
   case 4:
-#line 249 "dhcp4_parser.yy" // lalr1.cc:856
+#line 252 "dhcp4_parser.yy" // lalr1.cc:859
     { ctx.ctx_ = ctx.CONFIG; }
-#line 721 "dhcp4_parser.cc" // lalr1.cc:856
+#line 696 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
   case 6:
-#line 250 "dhcp4_parser.yy" // lalr1.cc:856
+#line 253 "dhcp4_parser.yy" // lalr1.cc:859
     { ctx.ctx_ = ctx.DHCP4; }
-#line 727 "dhcp4_parser.cc" // lalr1.cc:856
+#line 702 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
   case 8:
-#line 251 "dhcp4_parser.yy" // lalr1.cc:856
+#line 254 "dhcp4_parser.yy" // lalr1.cc:859
     { ctx.ctx_ = ctx.INTERFACES_CONFIG; }
-#line 733 "dhcp4_parser.cc" // lalr1.cc:856
+#line 708 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
   case 10:
-#line 252 "dhcp4_parser.yy" // lalr1.cc:856
+#line 255 "dhcp4_parser.yy" // lalr1.cc:859
     { ctx.ctx_ = ctx.SUBNET4; }
-#line 739 "dhcp4_parser.cc" // lalr1.cc:856
+#line 714 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
   case 12:
-#line 253 "dhcp4_parser.yy" // lalr1.cc:856
+#line 256 "dhcp4_parser.yy" // lalr1.cc:859
     { ctx.ctx_ = ctx.POOLS; }
-#line 745 "dhcp4_parser.cc" // lalr1.cc:856
+#line 720 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
   case 14:
-#line 254 "dhcp4_parser.yy" // lalr1.cc:856
+#line 257 "dhcp4_parser.yy" // lalr1.cc:859
     { ctx.ctx_ = ctx.RESERVATIONS; }
-#line 751 "dhcp4_parser.cc" // lalr1.cc:856
+#line 726 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
   case 16:
-#line 255 "dhcp4_parser.yy" // lalr1.cc:856
+#line 258 "dhcp4_parser.yy" // lalr1.cc:859
     { ctx.ctx_ = ctx.DHCP4; }
-#line 757 "dhcp4_parser.cc" // lalr1.cc:856
+#line 732 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
   case 18:
-#line 256 "dhcp4_parser.yy" // lalr1.cc:856
+#line 259 "dhcp4_parser.yy" // lalr1.cc:859
     { ctx.ctx_ = ctx.OPTION_DEF; }
-#line 763 "dhcp4_parser.cc" // lalr1.cc:856
+#line 738 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
   case 20:
-#line 257 "dhcp4_parser.yy" // lalr1.cc:856
+#line 260 "dhcp4_parser.yy" // lalr1.cc:859
     { ctx.ctx_ = ctx.OPTION_DATA; }
-#line 769 "dhcp4_parser.cc" // lalr1.cc:856
+#line 744 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
   case 22:
-#line 258 "dhcp4_parser.yy" // lalr1.cc:856
+#line 261 "dhcp4_parser.yy" // lalr1.cc:859
     { ctx.ctx_ = ctx.HOOKS_LIBRARIES; }
-#line 775 "dhcp4_parser.cc" // lalr1.cc:856
+#line 750 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
   case 24:
-#line 259 "dhcp4_parser.yy" // lalr1.cc:856
+#line 262 "dhcp4_parser.yy" // lalr1.cc:859
     { ctx.ctx_ = ctx.DHCP_DDNS; }
-#line 781 "dhcp4_parser.cc" // lalr1.cc:856
+#line 756 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
   case 26:
-#line 260 "dhcp4_parser.yy" // lalr1.cc:856
+#line 263 "dhcp4_parser.yy" // lalr1.cc:859
     { ctx.ctx_ = ctx.LOGGING; }
-#line 787 "dhcp4_parser.cc" // lalr1.cc:856
+#line 762 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
   case 28:
-#line 268 "dhcp4_parser.yy" // lalr1.cc:856
+#line 264 "dhcp4_parser.yy" // lalr1.cc:859
+    { ctx.ctx_ = ctx.CONFIG_CONTROL; }
+#line 768 "dhcp4_parser.cc" // lalr1.cc:859
+    break;
+
+  case 30:
+#line 272 "dhcp4_parser.yy" // lalr1.cc:859
     { yylhs.value.as< ElementPtr > () = ElementPtr(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location))); }
-#line 793 "dhcp4_parser.cc" // lalr1.cc:856
+#line 774 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 29:
-#line 269 "dhcp4_parser.yy" // lalr1.cc:856
+  case 31:
+#line 273 "dhcp4_parser.yy" // lalr1.cc:859
     { yylhs.value.as< ElementPtr > () = ElementPtr(new DoubleElement(yystack_[0].value.as< double > (), ctx.loc2pos(yystack_[0].location))); }
-#line 799 "dhcp4_parser.cc" // lalr1.cc:856
+#line 780 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 30:
-#line 270 "dhcp4_parser.yy" // lalr1.cc:856
+  case 32:
+#line 274 "dhcp4_parser.yy" // lalr1.cc:859
     { yylhs.value.as< ElementPtr > () = ElementPtr(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location))); }
-#line 805 "dhcp4_parser.cc" // lalr1.cc:856
+#line 786 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 31:
-#line 271 "dhcp4_parser.yy" // lalr1.cc:856
+  case 33:
+#line 275 "dhcp4_parser.yy" // lalr1.cc:859
     { yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location))); }
-#line 811 "dhcp4_parser.cc" // lalr1.cc:856
+#line 792 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 32:
-#line 272 "dhcp4_parser.yy" // lalr1.cc:856
+  case 34:
+#line 276 "dhcp4_parser.yy" // lalr1.cc:859
     { yylhs.value.as< ElementPtr > () = ElementPtr(new NullElement(ctx.loc2pos(yystack_[0].location))); }
-#line 817 "dhcp4_parser.cc" // lalr1.cc:856
+#line 798 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 33:
-#line 273 "dhcp4_parser.yy" // lalr1.cc:856
+  case 35:
+#line 277 "dhcp4_parser.yy" // lalr1.cc:859
     { yylhs.value.as< ElementPtr > () = ctx.stack_.back(); ctx.stack_.pop_back(); }
-#line 823 "dhcp4_parser.cc" // lalr1.cc:856
+#line 804 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 34:
-#line 274 "dhcp4_parser.yy" // lalr1.cc:856
+  case 36:
+#line 278 "dhcp4_parser.yy" // lalr1.cc:859
     { yylhs.value.as< ElementPtr > () = ctx.stack_.back(); ctx.stack_.pop_back(); }
-#line 829 "dhcp4_parser.cc" // lalr1.cc:856
+#line 810 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 35:
-#line 277 "dhcp4_parser.yy" // lalr1.cc:856
+  case 37:
+#line 281 "dhcp4_parser.yy" // lalr1.cc:859
     {
     // Push back the JSON value on the stack
     ctx.stack_.push_back(yystack_[0].value.as< ElementPtr > ());
 }
-#line 838 "dhcp4_parser.cc" // lalr1.cc:856
+#line 819 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 36:
-#line 282 "dhcp4_parser.yy" // lalr1.cc:856
+  case 38:
+#line 286 "dhcp4_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 849 "dhcp4_parser.cc" // lalr1.cc:856
+#line 830 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 37:
-#line 287 "dhcp4_parser.yy" // lalr1.cc:856
+  case 39:
+#line 291 "dhcp4_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 859 "dhcp4_parser.cc" // lalr1.cc:856
+#line 840 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 38:
-#line 293 "dhcp4_parser.yy" // lalr1.cc:856
+  case 40:
+#line 297 "dhcp4_parser.yy" // lalr1.cc:859
     { yylhs.value.as< ElementPtr > () = ctx.stack_.back(); ctx.stack_.pop_back(); }
-#line 865 "dhcp4_parser.cc" // lalr1.cc:856
+#line 846 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 41:
-#line 300 "dhcp4_parser.yy" // lalr1.cc:856
+  case 43:
+#line 304 "dhcp4_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 874 "dhcp4_parser.cc" // lalr1.cc:856
+#line 855 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 42:
-#line 304 "dhcp4_parser.yy" // lalr1.cc:856
+  case 44:
+#line 308 "dhcp4_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 884 "dhcp4_parser.cc" // lalr1.cc:856
+#line 865 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 43:
-#line 311 "dhcp4_parser.yy" // lalr1.cc:856
+  case 45:
+#line 315 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.push_back(l);
 }
-#line 893 "dhcp4_parser.cc" // lalr1.cc:856
+#line 874 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 44:
-#line 314 "dhcp4_parser.yy" // lalr1.cc:856
+  case 46:
+#line 318 "dhcp4_parser.yy" // lalr1.cc:859
     {
     // list parsing complete. Put any sanity checking here
 }
-#line 901 "dhcp4_parser.cc" // lalr1.cc:856
+#line 882 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 47:
-#line 322 "dhcp4_parser.yy" // lalr1.cc:856
+  case 49:
+#line 326 "dhcp4_parser.yy" // lalr1.cc:859
     {
                   // List consisting of a single element.
                   ctx.stack_.back()->add(yystack_[0].value.as< ElementPtr > ());
                   }
-#line 910 "dhcp4_parser.cc" // lalr1.cc:856
+#line 891 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 48:
-#line 326 "dhcp4_parser.yy" // lalr1.cc:856
+  case 50:
+#line 330 "dhcp4_parser.yy" // lalr1.cc:859
     {
                   // List ending with , and a value.
                   ctx.stack_.back()->add(yystack_[0].value.as< ElementPtr > ());
                   }
-#line 919 "dhcp4_parser.cc" // lalr1.cc:856
+#line 900 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 49:
-#line 333 "dhcp4_parser.yy" // lalr1.cc:856
+  case 51:
+#line 337 "dhcp4_parser.yy" // lalr1.cc:859
     {
     // List parsing about to start
 }
-#line 927 "dhcp4_parser.cc" // lalr1.cc:856
+#line 908 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 50:
-#line 335 "dhcp4_parser.yy" // lalr1.cc:856
+  case 52:
+#line 339 "dhcp4_parser.yy" // lalr1.cc:859
     {
     // list parsing complete. Put any sanity checking here
     //ctx.stack_.pop_back();
 }
-#line 936 "dhcp4_parser.cc" // lalr1.cc:856
+#line 917 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 53:
-#line 344 "dhcp4_parser.yy" // lalr1.cc:856
+  case 55:
+#line 348 "dhcp4_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 945 "dhcp4_parser.cc" // lalr1.cc:856
+#line 926 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 54:
-#line 348 "dhcp4_parser.yy" // lalr1.cc:856
+  case 56:
+#line 352 "dhcp4_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 954 "dhcp4_parser.cc" // lalr1.cc:856
+#line 935 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 55:
-#line 359 "dhcp4_parser.yy" // lalr1.cc:856
+  case 57:
+#line 363 "dhcp4_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 965 "dhcp4_parser.cc" // lalr1.cc:856
+#line 946 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 56:
-#line 369 "dhcp4_parser.yy" // lalr1.cc:856
+  case 58:
+#line 373 "dhcp4_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 976 "dhcp4_parser.cc" // lalr1.cc:856
+#line 957 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 57:
-#line 374 "dhcp4_parser.yy" // lalr1.cc:856
+  case 59:
+#line 378 "dhcp4_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
@@ -985,11 +966,11 @@ namespace isc { namespace dhcp {
     // Dhcp4 is required
     ctx.require("Dhcp4", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
 }
-#line 989 "dhcp4_parser.cc" // lalr1.cc:856
+#line 970 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 66:
-#line 398 "dhcp4_parser.yy" // lalr1.cc:856
+  case 68:
+#line 402 "dhcp4_parser.yy" // lalr1.cc:859
     {
     // This code is executed when we're about to start parsing
     // the content of the map
@@ -998,275 +979,275 @@ namespace isc { namespace dhcp {
     ctx.stack_.push_back(m);
     ctx.enter(ctx.DHCP4);
 }
-#line 1002 "dhcp4_parser.cc" // lalr1.cc:856
+#line 983 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 67:
-#line 405 "dhcp4_parser.yy" // lalr1.cc:856
+  case 69:
+#line 409 "dhcp4_parser.yy" // lalr1.cc:859
     {
     // No global parameter is required
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 1012 "dhcp4_parser.cc" // lalr1.cc:856
+#line 993 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 68:
-#line 413 "dhcp4_parser.yy" // lalr1.cc:856
+  case 70:
+#line 417 "dhcp4_parser.yy" // lalr1.cc:859
     {
     // Parse the Dhcp4 map
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.push_back(m);
 }
-#line 1022 "dhcp4_parser.cc" // lalr1.cc:856
+#line 1003 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 69:
-#line 417 "dhcp4_parser.yy" // lalr1.cc:856
+  case 71:
+#line 421 "dhcp4_parser.yy" // lalr1.cc:859
     {
     // No global parameter is required
     // parsing completed
 }
-#line 1031 "dhcp4_parser.cc" // lalr1.cc:856
+#line 1012 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 101:
-#line 459 "dhcp4_parser.yy" // lalr1.cc:856
+  case 104:
+#line 464 "dhcp4_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 1040 "dhcp4_parser.cc" // lalr1.cc:856
+#line 1021 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 102:
-#line 464 "dhcp4_parser.yy" // lalr1.cc:856
+  case 105:
+#line 469 "dhcp4_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 1049 "dhcp4_parser.cc" // lalr1.cc:856
+#line 1030 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 103:
-#line 469 "dhcp4_parser.yy" // lalr1.cc:856
+  case 106:
+#line 474 "dhcp4_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 1058 "dhcp4_parser.cc" // lalr1.cc:856
+#line 1039 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 104:
-#line 474 "dhcp4_parser.yy" // lalr1.cc:856
+  case 107:
+#line 479 "dhcp4_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 1067 "dhcp4_parser.cc" // lalr1.cc:856
+#line 1048 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 105:
-#line 479 "dhcp4_parser.yy" // lalr1.cc:856
+  case 108:
+#line 484 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr echo(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("echo-client-id", echo);
 }
-#line 1076 "dhcp4_parser.cc" // lalr1.cc:856
+#line 1057 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 106:
-#line 484 "dhcp4_parser.yy" // lalr1.cc:856
+  case 109:
+#line 489 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr match(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("match-client-id", match);
 }
-#line 1085 "dhcp4_parser.cc" // lalr1.cc:856
+#line 1066 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 107:
-#line 490 "dhcp4_parser.yy" // lalr1.cc:856
+  case 110:
+#line 495 "dhcp4_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 1096 "dhcp4_parser.cc" // lalr1.cc:856
+#line 1077 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 108:
-#line 495 "dhcp4_parser.yy" // lalr1.cc:856
+  case 111:
+#line 500 "dhcp4_parser.yy" // lalr1.cc:859
     {
     // No interfaces config param is required
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 1106 "dhcp4_parser.cc" // lalr1.cc:856
+#line 1087 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 118:
-#line 514 "dhcp4_parser.yy" // lalr1.cc:856
+  case 121:
+#line 519 "dhcp4_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 1116 "dhcp4_parser.cc" // lalr1.cc:856
+#line 1097 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 119:
-#line 518 "dhcp4_parser.yy" // lalr1.cc:856
+  case 122:
+#line 523 "dhcp4_parser.yy" // lalr1.cc:859
     {
     // No interfaces config param is required
     // parsing completed
 }
-#line 1125 "dhcp4_parser.cc" // lalr1.cc:856
+#line 1106 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 120:
-#line 523 "dhcp4_parser.yy" // lalr1.cc:856
+  case 123:
+#line 528 "dhcp4_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 1136 "dhcp4_parser.cc" // lalr1.cc:856
+#line 1117 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 121:
-#line 528 "dhcp4_parser.yy" // lalr1.cc:856
+  case 124:
+#line 533 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 1145 "dhcp4_parser.cc" // lalr1.cc:856
+#line 1126 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 122:
-#line 533 "dhcp4_parser.yy" // lalr1.cc:856
+  case 125:
+#line 538 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.DHCP_SOCKET_TYPE);
 }
-#line 1153 "dhcp4_parser.cc" // lalr1.cc:856
+#line 1134 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 123:
-#line 535 "dhcp4_parser.yy" // lalr1.cc:856
+  case 126:
+#line 540 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.back()->set("dhcp-socket-type", yystack_[0].value.as< ElementPtr > ());
     ctx.leave();
 }
-#line 1162 "dhcp4_parser.cc" // lalr1.cc:856
+#line 1143 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 124:
-#line 540 "dhcp4_parser.yy" // lalr1.cc:856
+  case 127:
+#line 545 "dhcp4_parser.yy" // lalr1.cc:859
     { yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("raw", ctx.loc2pos(yystack_[0].location))); }
-#line 1168 "dhcp4_parser.cc" // lalr1.cc:856
+#line 1149 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 125:
-#line 541 "dhcp4_parser.yy" // lalr1.cc:856
+  case 128:
+#line 546 "dhcp4_parser.yy" // lalr1.cc:859
     { yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("udp", ctx.loc2pos(yystack_[0].location))); }
-#line 1174 "dhcp4_parser.cc" // lalr1.cc:856
+#line 1155 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 126:
-#line 544 "dhcp4_parser.yy" // lalr1.cc:856
+  case 129:
+#line 549 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.OUTBOUND_INTERFACE);
 }
-#line 1182 "dhcp4_parser.cc" // lalr1.cc:856
+#line 1163 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 127:
-#line 546 "dhcp4_parser.yy" // lalr1.cc:856
+  case 130:
+#line 551 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.back()->set("outbound-interface", yystack_[0].value.as< ElementPtr > ());
     ctx.leave();
 }
-#line 1191 "dhcp4_parser.cc" // lalr1.cc:856
+#line 1172 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 128:
-#line 551 "dhcp4_parser.yy" // lalr1.cc:856
+  case 131:
+#line 556 "dhcp4_parser.yy" // lalr1.cc:859
     {
     yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("same-as-inbound", ctx.loc2pos(yystack_[0].location)));
 }
-#line 1199 "dhcp4_parser.cc" // lalr1.cc:856
+#line 1180 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 129:
-#line 553 "dhcp4_parser.yy" // lalr1.cc:856
+  case 132:
+#line 558 "dhcp4_parser.yy" // lalr1.cc:859
     {
     yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("use-routing", ctx.loc2pos(yystack_[0].location)));
     }
-#line 1207 "dhcp4_parser.cc" // lalr1.cc:856
+#line 1188 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 130:
-#line 557 "dhcp4_parser.yy" // lalr1.cc:856
+  case 133:
+#line 562 "dhcp4_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 1216 "dhcp4_parser.cc" // lalr1.cc:856
+#line 1197 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 131:
-#line 563 "dhcp4_parser.yy" // lalr1.cc:856
+  case 134:
+#line 568 "dhcp4_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 1227 "dhcp4_parser.cc" // lalr1.cc:856
+#line 1208 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 132:
-#line 568 "dhcp4_parser.yy" // lalr1.cc:856
+  case 135:
+#line 573 "dhcp4_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 1238 "dhcp4_parser.cc" // lalr1.cc:856
+#line 1219 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 133:
-#line 575 "dhcp4_parser.yy" // lalr1.cc:856
+  case 136:
+#line 580 "dhcp4_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 1249 "dhcp4_parser.cc" // lalr1.cc:856
+#line 1230 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 134:
-#line 580 "dhcp4_parser.yy" // lalr1.cc:856
+  case 137:
+#line 585 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 1258 "dhcp4_parser.cc" // lalr1.cc:856
+#line 1239 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 138:
-#line 590 "dhcp4_parser.yy" // lalr1.cc:856
+  case 141:
+#line 595 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 1266 "dhcp4_parser.cc" // lalr1.cc:856
+#line 1247 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 139:
-#line 592 "dhcp4_parser.yy" // lalr1.cc:856
+  case 142:
+#line 597 "dhcp4_parser.yy" // lalr1.cc:859
     {
 
     if ( (string(yystack_[0].value.as< std::string > ()) == "none") ||
@@ -1282,577 +1263,577 @@ namespace isc { namespace dhcp {
               ", supported values are: none, warn, fix, fix-del, del");
     }
 }
-#line 1286 "dhcp4_parser.cc" // lalr1.cc:856
+#line 1267 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 140:
-#line 608 "dhcp4_parser.yy" // lalr1.cc:856
+  case 143:
+#line 613 "dhcp4_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 1297 "dhcp4_parser.cc" // lalr1.cc:856
+#line 1278 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 141:
-#line 613 "dhcp4_parser.yy" // lalr1.cc:856
+  case 144:
+#line 618 "dhcp4_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 1308 "dhcp4_parser.cc" // lalr1.cc:856
+#line 1289 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 142:
-#line 620 "dhcp4_parser.yy" // lalr1.cc:856
+  case 145:
+#line 625 "dhcp4_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 1319 "dhcp4_parser.cc" // lalr1.cc:856
+#line 1300 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 143:
-#line 625 "dhcp4_parser.yy" // lalr1.cc:856
+  case 146:
+#line 630 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 1328 "dhcp4_parser.cc" // lalr1.cc:856
+#line 1309 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 148:
-#line 638 "dhcp4_parser.yy" // lalr1.cc:856
+  case 151:
+#line 643 "dhcp4_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 1338 "dhcp4_parser.cc" // lalr1.cc:856
+#line 1319 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 149:
-#line 642 "dhcp4_parser.yy" // lalr1.cc:856
+  case 152:
+#line 647 "dhcp4_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 1348 "dhcp4_parser.cc" // lalr1.cc:856
+#line 1329 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 170:
-#line 672 "dhcp4_parser.yy" // lalr1.cc:856
+  case 173:
+#line 677 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.DATABASE_TYPE);
 }
-#line 1356 "dhcp4_parser.cc" // lalr1.cc:856
+#line 1337 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 171:
-#line 674 "dhcp4_parser.yy" // lalr1.cc:856
+  case 174:
+#line 679 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.back()->set("type", yystack_[0].value.as< ElementPtr > ());
     ctx.leave();
 }
-#line 1365 "dhcp4_parser.cc" // lalr1.cc:856
+#line 1346 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 172:
-#line 679 "dhcp4_parser.yy" // lalr1.cc:856
+  case 175:
+#line 684 "dhcp4_parser.yy" // lalr1.cc:859
     { yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("memfile", ctx.loc2pos(yystack_[0].location))); }
-#line 1371 "dhcp4_parser.cc" // lalr1.cc:856
+#line 1352 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 173:
-#line 680 "dhcp4_parser.yy" // lalr1.cc:856
+  case 176:
+#line 685 "dhcp4_parser.yy" // lalr1.cc:859
     { yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("mysql", ctx.loc2pos(yystack_[0].location))); }
-#line 1377 "dhcp4_parser.cc" // lalr1.cc:856
+#line 1358 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 174:
-#line 681 "dhcp4_parser.yy" // lalr1.cc:856
+  case 177:
+#line 686 "dhcp4_parser.yy" // lalr1.cc:859
     { yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("postgresql", ctx.loc2pos(yystack_[0].location))); }
-#line 1383 "dhcp4_parser.cc" // lalr1.cc:856
+#line 1364 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 175:
-#line 682 "dhcp4_parser.yy" // lalr1.cc:856
+  case 178:
+#line 687 "dhcp4_parser.yy" // lalr1.cc:859
     { yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("cql", ctx.loc2pos(yystack_[0].location))); }
-#line 1389 "dhcp4_parser.cc" // lalr1.cc:856
+#line 1370 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 176:
-#line 685 "dhcp4_parser.yy" // lalr1.cc:856
+  case 179:
+#line 690 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 1397 "dhcp4_parser.cc" // lalr1.cc:856
+#line 1378 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 177:
-#line 687 "dhcp4_parser.yy" // lalr1.cc:856
+  case 180:
+#line 692 "dhcp4_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 1407 "dhcp4_parser.cc" // lalr1.cc:856
+#line 1388 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 178:
-#line 693 "dhcp4_parser.yy" // lalr1.cc:856
+  case 181:
+#line 698 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 1415 "dhcp4_parser.cc" // lalr1.cc:856
+#line 1396 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 179:
-#line 695 "dhcp4_parser.yy" // lalr1.cc:856
+  case 182:
+#line 700 "dhcp4_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 1425 "dhcp4_parser.cc" // lalr1.cc:856
+#line 1406 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 180:
-#line 701 "dhcp4_parser.yy" // lalr1.cc:856
+  case 183:
+#line 706 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 1433 "dhcp4_parser.cc" // lalr1.cc:856
+#line 1414 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 181:
-#line 703 "dhcp4_parser.yy" // lalr1.cc:856
+  case 184:
+#line 708 "dhcp4_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 1443 "dhcp4_parser.cc" // lalr1.cc:856
+#line 1424 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 182:
-#line 709 "dhcp4_parser.yy" // lalr1.cc:856
+  case 185:
+#line 714 "dhcp4_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 1452 "dhcp4_parser.cc" // lalr1.cc:856
+#line 1433 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 183:
-#line 714 "dhcp4_parser.yy" // lalr1.cc:856
+  case 186:
+#line 719 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 1460 "dhcp4_parser.cc" // lalr1.cc:856
+#line 1441 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 184:
-#line 716 "dhcp4_parser.yy" // lalr1.cc:856
+  case 187:
+#line 721 "dhcp4_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 1470 "dhcp4_parser.cc" // lalr1.cc:856
+#line 1451 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 185:
-#line 722 "dhcp4_parser.yy" // lalr1.cc:856
+  case 188:
+#line 727 "dhcp4_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 1479 "dhcp4_parser.cc" // lalr1.cc:856
+#line 1460 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 186:
-#line 727 "dhcp4_parser.yy" // lalr1.cc:856
+  case 189:
+#line 732 "dhcp4_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 1488 "dhcp4_parser.cc" // lalr1.cc:856
+#line 1469 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 187:
-#line 732 "dhcp4_parser.yy" // lalr1.cc:856
+  case 190:
+#line 737 "dhcp4_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 1497 "dhcp4_parser.cc" // lalr1.cc:856
+#line 1478 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 188:
-#line 737 "dhcp4_parser.yy" // lalr1.cc:856
+  case 191:
+#line 742 "dhcp4_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 1506 "dhcp4_parser.cc" // lalr1.cc:856
+#line 1487 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 189:
-#line 742 "dhcp4_parser.yy" // lalr1.cc:856
+  case 192:
+#line 747 "dhcp4_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 1515 "dhcp4_parser.cc" // lalr1.cc:856
+#line 1496 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 190:
-#line 747 "dhcp4_parser.yy" // lalr1.cc:856
+  case 193:
+#line 752 "dhcp4_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 1524 "dhcp4_parser.cc" // lalr1.cc:856
+#line 1505 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 191:
-#line 752 "dhcp4_parser.yy" // lalr1.cc:856
+  case 194:
+#line 757 "dhcp4_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 1533 "dhcp4_parser.cc" // lalr1.cc:856
+#line 1514 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 192:
-#line 757 "dhcp4_parser.yy" // lalr1.cc:856
+  case 195:
+#line 762 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 1541 "dhcp4_parser.cc" // lalr1.cc:856
+#line 1522 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 193:
-#line 759 "dhcp4_parser.yy" // lalr1.cc:856
+  case 196:
+#line 764 "dhcp4_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 1551 "dhcp4_parser.cc" // lalr1.cc:856
+#line 1532 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 194:
-#line 765 "dhcp4_parser.yy" // lalr1.cc:856
+  case 197:
+#line 770 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 1559 "dhcp4_parser.cc" // lalr1.cc:856
+#line 1540 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 195:
-#line 767 "dhcp4_parser.yy" // lalr1.cc:856
+  case 198:
+#line 772 "dhcp4_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 1569 "dhcp4_parser.cc" // lalr1.cc:856
+#line 1550 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 196:
-#line 773 "dhcp4_parser.yy" // lalr1.cc:856
+  case 199:
+#line 778 "dhcp4_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 1578 "dhcp4_parser.cc" // lalr1.cc:856
+#line 1559 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 197:
-#line 778 "dhcp4_parser.yy" // lalr1.cc:856
+  case 200:
+#line 783 "dhcp4_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 1587 "dhcp4_parser.cc" // lalr1.cc:856
+#line 1568 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 198:
-#line 783 "dhcp4_parser.yy" // lalr1.cc:856
+  case 201:
+#line 788 "dhcp4_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 1598 "dhcp4_parser.cc" // lalr1.cc:856
+#line 1579 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 199:
-#line 788 "dhcp4_parser.yy" // lalr1.cc:856
+  case 202:
+#line 793 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 1607 "dhcp4_parser.cc" // lalr1.cc:856
+#line 1588 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 207:
-#line 804 "dhcp4_parser.yy" // lalr1.cc:856
+  case 210:
+#line 809 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr duid(new StringElement("duid", ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(duid);
 }
-#line 1616 "dhcp4_parser.cc" // lalr1.cc:856
+#line 1597 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 208:
-#line 809 "dhcp4_parser.yy" // lalr1.cc:856
+  case 211:
+#line 814 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr hwaddr(new StringElement("hw-address", ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(hwaddr);
 }
-#line 1625 "dhcp4_parser.cc" // lalr1.cc:856
+#line 1606 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 209:
-#line 814 "dhcp4_parser.yy" // lalr1.cc:856
+  case 212:
+#line 819 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr circuit(new StringElement("circuit-id", ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(circuit);
 }
-#line 1634 "dhcp4_parser.cc" // lalr1.cc:856
+#line 1615 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 210:
-#line 819 "dhcp4_parser.yy" // lalr1.cc:856
+  case 213:
+#line 824 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr client(new StringElement("client-id", ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(client);
 }
-#line 1643 "dhcp4_parser.cc" // lalr1.cc:856
+#line 1624 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 211:
-#line 824 "dhcp4_parser.yy" // lalr1.cc:856
+  case 214:
+#line 829 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr flex_id(new StringElement("flex-id", ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(flex_id);
 }
-#line 1652 "dhcp4_parser.cc" // lalr1.cc:856
+#line 1633 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 212:
-#line 829 "dhcp4_parser.yy" // lalr1.cc:856
+  case 215:
+#line 834 "dhcp4_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 1663 "dhcp4_parser.cc" // lalr1.cc:856
+#line 1644 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 213:
-#line 834 "dhcp4_parser.yy" // lalr1.cc:856
+  case 216:
+#line 839 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 1672 "dhcp4_parser.cc" // lalr1.cc:856
+#line 1653 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 218:
-#line 847 "dhcp4_parser.yy" // lalr1.cc:856
+  case 221:
+#line 852 "dhcp4_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 1682 "dhcp4_parser.cc" // lalr1.cc:856
+#line 1663 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 219:
-#line 851 "dhcp4_parser.yy" // lalr1.cc:856
+  case 222:
+#line 856 "dhcp4_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 1692 "dhcp4_parser.cc" // lalr1.cc:856
+#line 1673 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 220:
-#line 857 "dhcp4_parser.yy" // lalr1.cc:856
+  case 223:
+#line 862 "dhcp4_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 1702 "dhcp4_parser.cc" // lalr1.cc:856
+#line 1683 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 221:
-#line 861 "dhcp4_parser.yy" // lalr1.cc:856
+  case 224:
+#line 866 "dhcp4_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 1712 "dhcp4_parser.cc" // lalr1.cc:856
+#line 1693 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 227:
-#line 876 "dhcp4_parser.yy" // lalr1.cc:856
+  case 230:
+#line 881 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 1720 "dhcp4_parser.cc" // lalr1.cc:856
+#line 1701 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 228:
-#line 878 "dhcp4_parser.yy" // lalr1.cc:856
+  case 231:
+#line 883 "dhcp4_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 1730 "dhcp4_parser.cc" // lalr1.cc:856
+#line 1711 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 229:
-#line 884 "dhcp4_parser.yy" // lalr1.cc:856
+  case 232:
+#line 889 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 1738 "dhcp4_parser.cc" // lalr1.cc:856
+#line 1719 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 230:
-#line 886 "dhcp4_parser.yy" // lalr1.cc:856
+  case 233:
+#line 891 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.back()->set("parameters", yystack_[0].value.as< ElementPtr > ());
     ctx.leave();
 }
-#line 1747 "dhcp4_parser.cc" // lalr1.cc:856
+#line 1728 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 231:
-#line 892 "dhcp4_parser.yy" // lalr1.cc:856
+  case 234:
+#line 897 "dhcp4_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 1758 "dhcp4_parser.cc" // lalr1.cc:856
+#line 1739 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 232:
-#line 897 "dhcp4_parser.yy" // lalr1.cc:856
+  case 235:
+#line 902 "dhcp4_parser.yy" // lalr1.cc:859
     {
     // No expired lease parameter is required
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 1768 "dhcp4_parser.cc" // lalr1.cc:856
+#line 1749 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 241:
-#line 915 "dhcp4_parser.yy" // lalr1.cc:856
+  case 244:
+#line 920 "dhcp4_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 1777 "dhcp4_parser.cc" // lalr1.cc:856
+#line 1758 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 242:
-#line 920 "dhcp4_parser.yy" // lalr1.cc:856
+  case 245:
+#line 925 "dhcp4_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 1786 "dhcp4_parser.cc" // lalr1.cc:856
+#line 1767 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 243:
-#line 925 "dhcp4_parser.yy" // lalr1.cc:856
+  case 246:
+#line 930 "dhcp4_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 1795 "dhcp4_parser.cc" // lalr1.cc:856
+#line 1776 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 244:
-#line 930 "dhcp4_parser.yy" // lalr1.cc:856
+  case 247:
+#line 935 "dhcp4_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 1804 "dhcp4_parser.cc" // lalr1.cc:856
+#line 1785 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 245:
-#line 935 "dhcp4_parser.yy" // lalr1.cc:856
+  case 248:
+#line 940 "dhcp4_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 1813 "dhcp4_parser.cc" // lalr1.cc:856
+#line 1794 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 246:
-#line 940 "dhcp4_parser.yy" // lalr1.cc:856
+  case 249:
+#line 945 "dhcp4_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 1822 "dhcp4_parser.cc" // lalr1.cc:856
+#line 1803 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 247:
-#line 948 "dhcp4_parser.yy" // lalr1.cc:856
+  case 250:
+#line 953 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("subnet4", l);
     ctx.stack_.push_back(l);
     ctx.enter(ctx.SUBNET4);
 }
-#line 1833 "dhcp4_parser.cc" // lalr1.cc:856
+#line 1814 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 248:
-#line 953 "dhcp4_parser.yy" // lalr1.cc:856
+  case 251:
+#line 958 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 1842 "dhcp4_parser.cc" // lalr1.cc:856
+#line 1823 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 253:
-#line 973 "dhcp4_parser.yy" // lalr1.cc:856
+  case 256:
+#line 978 "dhcp4_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 1852 "dhcp4_parser.cc" // lalr1.cc:856
+#line 1833 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 254:
-#line 977 "dhcp4_parser.yy" // lalr1.cc:856
+  case 257:
+#line 982 "dhcp4_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.
@@ -1874,294 +1855,294 @@ namespace isc { namespace dhcp {
     ctx.require("subnet", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
     ctx.stack_.pop_back();
 }
-#line 1878 "dhcp4_parser.cc" // lalr1.cc:856
+#line 1859 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 255:
-#line 999 "dhcp4_parser.yy" // lalr1.cc:856
+  case 258:
+#line 1004 "dhcp4_parser.yy" // lalr1.cc:859
     {
     // Parse the subnet4 list entry map
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.push_back(m);
 }
-#line 1888 "dhcp4_parser.cc" // lalr1.cc:856
+#line 1869 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 256:
-#line 1003 "dhcp4_parser.yy" // lalr1.cc:856
+  case 259:
+#line 1008 "dhcp4_parser.yy" // lalr1.cc:859
     {
     // The subnet subnet4 parameter is required
     ctx.require("subnet", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
     // parsing completed
 }
-#line 1898 "dhcp4_parser.cc" // lalr1.cc:856
+#line 1879 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 282:
-#line 1040 "dhcp4_parser.yy" // lalr1.cc:856
+  case 285:
+#line 1045 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 1906 "dhcp4_parser.cc" // lalr1.cc:856
+#line 1887 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 283:
-#line 1042 "dhcp4_parser.yy" // lalr1.cc:856
+  case 286:
+#line 1047 "dhcp4_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 1916 "dhcp4_parser.cc" // lalr1.cc:856
+#line 1897 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 284:
-#line 1048 "dhcp4_parser.yy" // lalr1.cc:856
+  case 287:
+#line 1053 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 1924 "dhcp4_parser.cc" // lalr1.cc:856
+#line 1905 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 285:
-#line 1050 "dhcp4_parser.yy" // lalr1.cc:856
+  case 288:
+#line 1055 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr iface(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("4o6-interface", iface);
     ctx.leave();
 }
-#line 1934 "dhcp4_parser.cc" // lalr1.cc:856
+#line 1915 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 286:
-#line 1056 "dhcp4_parser.yy" // lalr1.cc:856
+  case 289:
+#line 1061 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 1942 "dhcp4_parser.cc" // lalr1.cc:856
+#line 1923 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 287:
-#line 1058 "dhcp4_parser.yy" // lalr1.cc:856
+  case 290:
+#line 1063 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr iface(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("4o6-interface-id", iface);
     ctx.leave();
 }
-#line 1952 "dhcp4_parser.cc" // lalr1.cc:856
+#line 1933 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 288:
-#line 1064 "dhcp4_parser.yy" // lalr1.cc:856
+  case 291:
+#line 1069 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 1960 "dhcp4_parser.cc" // lalr1.cc:856
+#line 1941 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 289:
-#line 1066 "dhcp4_parser.yy" // lalr1.cc:856
+  case 292:
+#line 1071 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr iface(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("4o6-subnet", iface);
     ctx.leave();
 }
-#line 1970 "dhcp4_parser.cc" // lalr1.cc:856
+#line 1951 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 290:
-#line 1072 "dhcp4_parser.yy" // lalr1.cc:856
+  case 293:
+#line 1077 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 1978 "dhcp4_parser.cc" // lalr1.cc:856
+#line 1959 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 291:
-#line 1074 "dhcp4_parser.yy" // lalr1.cc:856
+  case 294:
+#line 1079 "dhcp4_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 1988 "dhcp4_parser.cc" // lalr1.cc:856
+#line 1969 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 292:
-#line 1080 "dhcp4_parser.yy" // lalr1.cc:856
+  case 295:
+#line 1085 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 1996 "dhcp4_parser.cc" // lalr1.cc:856
+#line 1977 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 293:
-#line 1082 "dhcp4_parser.yy" // lalr1.cc:856
+  case 296:
+#line 1087 "dhcp4_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 2006 "dhcp4_parser.cc" // lalr1.cc:856
+#line 1987 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 294:
-#line 1088 "dhcp4_parser.yy" // lalr1.cc:856
+  case 297:
+#line 1093 "dhcp4_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 2017 "dhcp4_parser.cc" // lalr1.cc:856
+#line 1998 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 295:
-#line 1093 "dhcp4_parser.yy" // lalr1.cc:856
+  case 298:
+#line 1098 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 2026 "dhcp4_parser.cc" // lalr1.cc:856
+#line 2007 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 296:
-#line 1098 "dhcp4_parser.yy" // lalr1.cc:856
+  case 299:
+#line 1103 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.RESERVATION_MODE);
 }
-#line 2034 "dhcp4_parser.cc" // lalr1.cc:856
+#line 2015 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 297:
-#line 1100 "dhcp4_parser.yy" // lalr1.cc:856
+  case 300:
+#line 1105 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.back()->set("reservation-mode", yystack_[0].value.as< ElementPtr > ());
     ctx.leave();
 }
-#line 2043 "dhcp4_parser.cc" // lalr1.cc:856
+#line 2024 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 298:
-#line 1105 "dhcp4_parser.yy" // lalr1.cc:856
+  case 301:
+#line 1110 "dhcp4_parser.yy" // lalr1.cc:859
     { yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("disabled", ctx.loc2pos(yystack_[0].location))); }
-#line 2049 "dhcp4_parser.cc" // lalr1.cc:856
+#line 2030 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 299:
-#line 1106 "dhcp4_parser.yy" // lalr1.cc:856
+  case 302:
+#line 1111 "dhcp4_parser.yy" // lalr1.cc:859
     { yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("out-of-pool", ctx.loc2pos(yystack_[0].location))); }
-#line 2055 "dhcp4_parser.cc" // lalr1.cc:856
+#line 2036 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 300:
-#line 1107 "dhcp4_parser.yy" // lalr1.cc:856
+  case 303:
+#line 1112 "dhcp4_parser.yy" // lalr1.cc:859
     { yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("global", ctx.loc2pos(yystack_[0].location))); }
-#line 2061 "dhcp4_parser.cc" // lalr1.cc:856
+#line 2042 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 301:
-#line 1108 "dhcp4_parser.yy" // lalr1.cc:856
+  case 304:
+#line 1113 "dhcp4_parser.yy" // lalr1.cc:859
     { yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("all", ctx.loc2pos(yystack_[0].location))); }
-#line 2067 "dhcp4_parser.cc" // lalr1.cc:856
+#line 2048 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 302:
-#line 1111 "dhcp4_parser.yy" // lalr1.cc:856
+  case 305:
+#line 1116 "dhcp4_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 2076 "dhcp4_parser.cc" // lalr1.cc:856
+#line 2057 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 303:
-#line 1118 "dhcp4_parser.yy" // lalr1.cc:856
+  case 306:
+#line 1123 "dhcp4_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 2087 "dhcp4_parser.cc" // lalr1.cc:856
+#line 2068 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 304:
-#line 1123 "dhcp4_parser.yy" // lalr1.cc:856
+  case 307:
+#line 1128 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 2096 "dhcp4_parser.cc" // lalr1.cc:856
+#line 2077 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 309:
-#line 1138 "dhcp4_parser.yy" // lalr1.cc:856
+  case 312:
+#line 1143 "dhcp4_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 2106 "dhcp4_parser.cc" // lalr1.cc:856
+#line 2087 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 310:
-#line 1142 "dhcp4_parser.yy" // lalr1.cc:856
+  case 313:
+#line 1147 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
 }
-#line 2114 "dhcp4_parser.cc" // lalr1.cc:856
+#line 2095 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 331:
-#line 1174 "dhcp4_parser.yy" // lalr1.cc:856
+  case 334:
+#line 1179 "dhcp4_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 2125 "dhcp4_parser.cc" // lalr1.cc:856
+#line 2106 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 332:
-#line 1179 "dhcp4_parser.yy" // lalr1.cc:856
+  case 335:
+#line 1184 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 2134 "dhcp4_parser.cc" // lalr1.cc:856
+#line 2115 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 333:
-#line 1187 "dhcp4_parser.yy" // lalr1.cc:856
+  case 336:
+#line 1192 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.push_back(m);
 }
-#line 2143 "dhcp4_parser.cc" // lalr1.cc:856
+#line 2124 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 334:
-#line 1190 "dhcp4_parser.yy" // lalr1.cc:856
+  case 337:
+#line 1195 "dhcp4_parser.yy" // lalr1.cc:859
     {
     // parsing completed
 }
-#line 2151 "dhcp4_parser.cc" // lalr1.cc:856
+#line 2132 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 339:
-#line 1206 "dhcp4_parser.yy" // lalr1.cc:856
+  case 342:
+#line 1211 "dhcp4_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 2161 "dhcp4_parser.cc" // lalr1.cc:856
+#line 2142 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 340:
-#line 1210 "dhcp4_parser.yy" // lalr1.cc:856
+  case 343:
+#line 1215 "dhcp4_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));
@@ -2169,21 +2150,21 @@ namespace isc { namespace dhcp {
     ctx.require("type", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
     ctx.stack_.pop_back();
 }
-#line 2173 "dhcp4_parser.cc" // lalr1.cc:856
+#line 2154 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 341:
-#line 1221 "dhcp4_parser.yy" // lalr1.cc:856
+  case 344:
+#line 1226 "dhcp4_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 2183 "dhcp4_parser.cc" // lalr1.cc:856
+#line 2164 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 342:
-#line 1225 "dhcp4_parser.yy" // lalr1.cc:856
+  case 345:
+#line 1230 "dhcp4_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));
@@ -2191,281 +2172,281 @@ namespace isc { namespace dhcp {
     ctx.require("type", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
     // parsing completed
 }
-#line 2195 "dhcp4_parser.cc" // lalr1.cc:856
+#line 2176 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 358:
-#line 1257 "dhcp4_parser.yy" // lalr1.cc:856
+  case 361:
+#line 1262 "dhcp4_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 2204 "dhcp4_parser.cc" // lalr1.cc:856
+#line 2185 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 360:
-#line 1264 "dhcp4_parser.yy" // lalr1.cc:856
+  case 363:
+#line 1269 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2212 "dhcp4_parser.cc" // lalr1.cc:856
+#line 2193 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 361:
-#line 1266 "dhcp4_parser.yy" // lalr1.cc:856
+  case 364:
+#line 1271 "dhcp4_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 2222 "dhcp4_parser.cc" // lalr1.cc:856
+#line 2203 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 362:
-#line 1272 "dhcp4_parser.yy" // lalr1.cc:856
+  case 365:
+#line 1277 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2230 "dhcp4_parser.cc" // lalr1.cc:856
+#line 2211 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 363:
-#line 1274 "dhcp4_parser.yy" // lalr1.cc:856
+  case 366:
+#line 1279 "dhcp4_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 2240 "dhcp4_parser.cc" // lalr1.cc:856
+#line 2221 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 364:
-#line 1280 "dhcp4_parser.yy" // lalr1.cc:856
+  case 367:
+#line 1285 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2248 "dhcp4_parser.cc" // lalr1.cc:856
+#line 2229 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 365:
-#line 1282 "dhcp4_parser.yy" // lalr1.cc:856
+  case 368:
+#line 1287 "dhcp4_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 2258 "dhcp4_parser.cc" // lalr1.cc:856
+#line 2239 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 367:
-#line 1290 "dhcp4_parser.yy" // lalr1.cc:856
+  case 370:
+#line 1295 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2266 "dhcp4_parser.cc" // lalr1.cc:856
+#line 2247 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 368:
-#line 1292 "dhcp4_parser.yy" // lalr1.cc:856
+  case 371:
+#line 1297 "dhcp4_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 2276 "dhcp4_parser.cc" // lalr1.cc:856
+#line 2257 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 369:
-#line 1298 "dhcp4_parser.yy" // lalr1.cc:856
+  case 372:
+#line 1303 "dhcp4_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 2285 "dhcp4_parser.cc" // lalr1.cc:856
+#line 2266 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 370:
-#line 1307 "dhcp4_parser.yy" // lalr1.cc:856
+  case 373:
+#line 1312 "dhcp4_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 2296 "dhcp4_parser.cc" // lalr1.cc:856
+#line 2277 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 371:
-#line 1312 "dhcp4_parser.yy" // lalr1.cc:856
+  case 374:
+#line 1317 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 2305 "dhcp4_parser.cc" // lalr1.cc:856
+#line 2286 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 376:
-#line 1331 "dhcp4_parser.yy" // lalr1.cc:856
+  case 379:
+#line 1336 "dhcp4_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 2315 "dhcp4_parser.cc" // lalr1.cc:856
+#line 2296 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 377:
-#line 1335 "dhcp4_parser.yy" // lalr1.cc:856
+  case 380:
+#line 1340 "dhcp4_parser.yy" // lalr1.cc:859
     {
     /// @todo: the code or name parameters are required.
     ctx.stack_.pop_back();
 }
-#line 2324 "dhcp4_parser.cc" // lalr1.cc:856
+#line 2305 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 378:
-#line 1343 "dhcp4_parser.yy" // lalr1.cc:856
+  case 381:
+#line 1348 "dhcp4_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 2334 "dhcp4_parser.cc" // lalr1.cc:856
+#line 2315 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 379:
-#line 1347 "dhcp4_parser.yy" // lalr1.cc:856
+  case 382:
+#line 1352 "dhcp4_parser.yy" // lalr1.cc:859
     {
     /// @todo: the code or name parameters are required.
     // parsing completed
 }
-#line 2343 "dhcp4_parser.cc" // lalr1.cc:856
+#line 2324 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 394:
-#line 1380 "dhcp4_parser.yy" // lalr1.cc:856
+  case 397:
+#line 1385 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2351 "dhcp4_parser.cc" // lalr1.cc:856
+#line 2332 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 395:
-#line 1382 "dhcp4_parser.yy" // lalr1.cc:856
+  case 398:
+#line 1387 "dhcp4_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 2361 "dhcp4_parser.cc" // lalr1.cc:856
+#line 2342 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 398:
-#line 1392 "dhcp4_parser.yy" // lalr1.cc:856
+  case 401:
+#line 1397 "dhcp4_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 2370 "dhcp4_parser.cc" // lalr1.cc:856
+#line 2351 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 399:
-#line 1397 "dhcp4_parser.yy" // lalr1.cc:856
+  case 402:
+#line 1402 "dhcp4_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 2379 "dhcp4_parser.cc" // lalr1.cc:856
+#line 2360 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 400:
-#line 1405 "dhcp4_parser.yy" // lalr1.cc:856
+  case 403:
+#line 1410 "dhcp4_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 2390 "dhcp4_parser.cc" // lalr1.cc:856
+#line 2371 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 401:
-#line 1410 "dhcp4_parser.yy" // lalr1.cc:856
+  case 404:
+#line 1415 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 2399 "dhcp4_parser.cc" // lalr1.cc:856
+#line 2380 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 406:
-#line 1425 "dhcp4_parser.yy" // lalr1.cc:856
+  case 409:
+#line 1430 "dhcp4_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 2409 "dhcp4_parser.cc" // lalr1.cc:856
+#line 2390 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 407:
-#line 1429 "dhcp4_parser.yy" // lalr1.cc:856
+  case 410:
+#line 1434 "dhcp4_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 2419 "dhcp4_parser.cc" // lalr1.cc:856
+#line 2400 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 408:
-#line 1435 "dhcp4_parser.yy" // lalr1.cc:856
+  case 411:
+#line 1440 "dhcp4_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 2429 "dhcp4_parser.cc" // lalr1.cc:856
+#line 2410 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 409:
-#line 1439 "dhcp4_parser.yy" // lalr1.cc:856
+  case 412:
+#line 1444 "dhcp4_parser.yy" // lalr1.cc:859
     {
     // The pool parameter is required.
     ctx.require("pool", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
     // parsing completed
 }
-#line 2439 "dhcp4_parser.cc" // lalr1.cc:856
+#line 2420 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 419:
-#line 1458 "dhcp4_parser.yy" // lalr1.cc:856
+  case 422:
+#line 1463 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2447 "dhcp4_parser.cc" // lalr1.cc:856
+#line 2428 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 420:
-#line 1460 "dhcp4_parser.yy" // lalr1.cc:856
+  case 423:
+#line 1465 "dhcp4_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 2457 "dhcp4_parser.cc" // lalr1.cc:856
+#line 2438 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 421:
-#line 1466 "dhcp4_parser.yy" // lalr1.cc:856
+  case 424:
+#line 1471 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2465 "dhcp4_parser.cc" // lalr1.cc:856
+#line 2446 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 422:
-#line 1468 "dhcp4_parser.yy" // lalr1.cc:856
+  case 425:
+#line 1473 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr parent = ctx.stack_.back();
     ElementPtr user_context = yystack_[0].value.as< ElementPtr > ();
@@ -2488,19 +2469,19 @@ namespace isc { namespace dhcp {
     parent->set("user-context", user_context);
     ctx.leave();
 }
-#line 2492 "dhcp4_parser.cc" // lalr1.cc:856
+#line 2473 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 423:
-#line 1491 "dhcp4_parser.yy" // lalr1.cc:856
+  case 426:
+#line 1496 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2500 "dhcp4_parser.cc" // lalr1.cc:856
+#line 2481 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 424:
-#line 1493 "dhcp4_parser.yy" // lalr1.cc:856
+  case 427:
+#line 1498 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr parent = ctx.stack_.back();
     ElementPtr user_context(new MapElement(ctx.loc2pos(yystack_[3].location)));
@@ -2525,996 +2506,1074 @@ namespace isc { namespace dhcp {
     parent->set("user-context", user_context);
     ctx.leave();
 }
-#line 2529 "dhcp4_parser.cc" // lalr1.cc:856
+#line 2510 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 425:
-#line 1521 "dhcp4_parser.yy" // lalr1.cc:856
+  case 428:
+#line 1526 "dhcp4_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 2540 "dhcp4_parser.cc" // lalr1.cc:856
+#line 2521 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 426:
-#line 1526 "dhcp4_parser.yy" // lalr1.cc:856
+  case 429:
+#line 1531 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 2549 "dhcp4_parser.cc" // lalr1.cc:856
+#line 2530 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 431:
-#line 1539 "dhcp4_parser.yy" // lalr1.cc:856
+  case 434:
+#line 1544 "dhcp4_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 2559 "dhcp4_parser.cc" // lalr1.cc:856
+#line 2540 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 432:
-#line 1543 "dhcp4_parser.yy" // lalr1.cc:856
+  case 435:
+#line 1548 "dhcp4_parser.yy" // lalr1.cc:859
     {
     /// @todo: an identifier parameter is required.
     ctx.stack_.pop_back();
 }
-#line 2568 "dhcp4_parser.cc" // lalr1.cc:856
+#line 2549 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 433:
-#line 1548 "dhcp4_parser.yy" // lalr1.cc:856
+  case 436:
+#line 1553 "dhcp4_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 2578 "dhcp4_parser.cc" // lalr1.cc:856
+#line 2559 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 434:
-#line 1552 "dhcp4_parser.yy" // lalr1.cc:856
+  case 437:
+#line 1557 "dhcp4_parser.yy" // lalr1.cc:859
     {
     /// @todo: an identifier parameter is required.
     // parsing completed
 }
-#line 2587 "dhcp4_parser.cc" // lalr1.cc:856
+#line 2568 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 454:
-#line 1583 "dhcp4_parser.yy" // lalr1.cc:856
+  case 457:
+#line 1588 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2595 "dhcp4_parser.cc" // lalr1.cc:856
+#line 2576 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 455:
-#line 1585 "dhcp4_parser.yy" // lalr1.cc:856
+  case 458:
+#line 1590 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr next_server(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("next-server", next_server);
     ctx.leave();
 }
-#line 2605 "dhcp4_parser.cc" // lalr1.cc:856
+#line 2586 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 456:
-#line 1591 "dhcp4_parser.yy" // lalr1.cc:856
+  case 459:
+#line 1596 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2613 "dhcp4_parser.cc" // lalr1.cc:856
+#line 2594 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 457:
-#line 1593 "dhcp4_parser.yy" // lalr1.cc:856
+  case 460:
+#line 1598 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr srv(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("server-hostname", srv);
     ctx.leave();
 }
-#line 2623 "dhcp4_parser.cc" // lalr1.cc:856
+#line 2604 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 458:
-#line 1599 "dhcp4_parser.yy" // lalr1.cc:856
+  case 461:
+#line 1604 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2631 "dhcp4_parser.cc" // lalr1.cc:856
+#line 2612 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 459:
-#line 1601 "dhcp4_parser.yy" // lalr1.cc:856
+  case 462:
+#line 1606 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr bootfile(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("boot-file-name", bootfile);
     ctx.leave();
 }
-#line 2641 "dhcp4_parser.cc" // lalr1.cc:856
+#line 2622 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 460:
-#line 1607 "dhcp4_parser.yy" // lalr1.cc:856
+  case 463:
+#line 1612 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2649 "dhcp4_parser.cc" // lalr1.cc:856
+#line 2630 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 461:
-#line 1609 "dhcp4_parser.yy" // lalr1.cc:856
+  case 464:
+#line 1614 "dhcp4_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 2659 "dhcp4_parser.cc" // lalr1.cc:856
+#line 2640 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 462:
-#line 1615 "dhcp4_parser.yy" // lalr1.cc:856
+  case 465:
+#line 1620 "dhcp4_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 2670 "dhcp4_parser.cc" // lalr1.cc:856
+#line 2651 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 463:
-#line 1620 "dhcp4_parser.yy" // lalr1.cc:856
+  case 466:
+#line 1625 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 2679 "dhcp4_parser.cc" // lalr1.cc:856
+#line 2660 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 464:
-#line 1625 "dhcp4_parser.yy" // lalr1.cc:856
+  case 467:
+#line 1630 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2687 "dhcp4_parser.cc" // lalr1.cc:856
+#line 2668 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 465:
-#line 1627 "dhcp4_parser.yy" // lalr1.cc:856
+  case 468:
+#line 1632 "dhcp4_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 2697 "dhcp4_parser.cc" // lalr1.cc:856
+#line 2678 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 466:
-#line 1633 "dhcp4_parser.yy" // lalr1.cc:856
+  case 469:
+#line 1638 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2705 "dhcp4_parser.cc" // lalr1.cc:856
+#line 2686 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 467:
-#line 1635 "dhcp4_parser.yy" // lalr1.cc:856
+  case 470:
+#line 1640 "dhcp4_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 2715 "dhcp4_parser.cc" // lalr1.cc:856
+#line 2696 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 468:
-#line 1641 "dhcp4_parser.yy" // lalr1.cc:856
+  case 471:
+#line 1646 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2723 "dhcp4_parser.cc" // lalr1.cc:856
+#line 2704 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 469:
-#line 1643 "dhcp4_parser.yy" // lalr1.cc:856
+  case 472:
+#line 1648 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr hw(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("client-id", hw);
     ctx.leave();
 }
-#line 2733 "dhcp4_parser.cc" // lalr1.cc:856
+#line 2714 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 470:
-#line 1649 "dhcp4_parser.yy" // lalr1.cc:856
+  case 473:
+#line 1654 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2741 "dhcp4_parser.cc" // lalr1.cc:856
+#line 2722 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 471:
-#line 1651 "dhcp4_parser.yy" // lalr1.cc:856
+  case 474:
+#line 1656 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr hw(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("circuit-id", hw);
     ctx.leave();
 }
-#line 2751 "dhcp4_parser.cc" // lalr1.cc:856
+#line 2732 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 472:
-#line 1657 "dhcp4_parser.yy" // lalr1.cc:856
+  case 475:
+#line 1662 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2759 "dhcp4_parser.cc" // lalr1.cc:856
+#line 2740 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 473:
-#line 1659 "dhcp4_parser.yy" // lalr1.cc:856
+  case 476:
+#line 1664 "dhcp4_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 2769 "dhcp4_parser.cc" // lalr1.cc:856
+#line 2750 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 474:
-#line 1665 "dhcp4_parser.yy" // lalr1.cc:856
+  case 477:
+#line 1670 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2777 "dhcp4_parser.cc" // lalr1.cc:856
+#line 2758 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 475:
-#line 1667 "dhcp4_parser.yy" // lalr1.cc:856
+  case 478:
+#line 1672 "dhcp4_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 2787 "dhcp4_parser.cc" // lalr1.cc:856
+#line 2768 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 476:
-#line 1673 "dhcp4_parser.yy" // lalr1.cc:856
+  case 479:
+#line 1678 "dhcp4_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 2798 "dhcp4_parser.cc" // lalr1.cc:856
+#line 2779 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 477:
-#line 1678 "dhcp4_parser.yy" // lalr1.cc:856
+  case 480:
+#line 1683 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 2807 "dhcp4_parser.cc" // lalr1.cc:856
+#line 2788 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 478:
-#line 1686 "dhcp4_parser.yy" // lalr1.cc:856
+  case 481:
+#line 1691 "dhcp4_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 2818 "dhcp4_parser.cc" // lalr1.cc:856
+#line 2799 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 479:
-#line 1691 "dhcp4_parser.yy" // lalr1.cc:856
+  case 482:
+#line 1696 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 2827 "dhcp4_parser.cc" // lalr1.cc:856
+#line 2808 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 482:
-#line 1703 "dhcp4_parser.yy" // lalr1.cc:856
+  case 485:
+#line 1708 "dhcp4_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 2838 "dhcp4_parser.cc" // lalr1.cc:856
+#line 2819 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 483:
-#line 1708 "dhcp4_parser.yy" // lalr1.cc:856
+  case 486:
+#line 1713 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 2847 "dhcp4_parser.cc" // lalr1.cc:856
+#line 2828 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 486:
-#line 1717 "dhcp4_parser.yy" // lalr1.cc:856
+  case 489:
+#line 1722 "dhcp4_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 2857 "dhcp4_parser.cc" // lalr1.cc:856
+#line 2838 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 487:
-#line 1721 "dhcp4_parser.yy" // lalr1.cc:856
+  case 490:
+#line 1726 "dhcp4_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 2867 "dhcp4_parser.cc" // lalr1.cc:856
+#line 2848 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 504:
-#line 1750 "dhcp4_parser.yy" // lalr1.cc:856
+  case 507:
+#line 1755 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2875 "dhcp4_parser.cc" // lalr1.cc:856
+#line 2856 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 505:
-#line 1752 "dhcp4_parser.yy" // lalr1.cc:856
+  case 508:
+#line 1757 "dhcp4_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 2885 "dhcp4_parser.cc" // lalr1.cc:856
+#line 2866 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 506:
-#line 1758 "dhcp4_parser.yy" // lalr1.cc:856
+  case 509:
+#line 1763 "dhcp4_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 2894 "dhcp4_parser.cc" // lalr1.cc:856
+#line 2875 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 507:
-#line 1767 "dhcp4_parser.yy" // lalr1.cc:856
+  case 510:
+#line 1772 "dhcp4_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 2903 "dhcp4_parser.cc" // lalr1.cc:856
+#line 2884 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 508:
-#line 1774 "dhcp4_parser.yy" // lalr1.cc:856
+  case 511:
+#line 1779 "dhcp4_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 2914 "dhcp4_parser.cc" // lalr1.cc:856
+#line 2895 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 509:
-#line 1779 "dhcp4_parser.yy" // lalr1.cc:856
+  case 512:
+#line 1784 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 2923 "dhcp4_parser.cc" // lalr1.cc:856
+#line 2904 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 517:
-#line 1795 "dhcp4_parser.yy" // lalr1.cc:856
+  case 520:
+#line 1800 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2931 "dhcp4_parser.cc" // lalr1.cc:856
+#line 2912 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 518:
-#line 1797 "dhcp4_parser.yy" // lalr1.cc:856
+  case 521:
+#line 1802 "dhcp4_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 2941 "dhcp4_parser.cc" // lalr1.cc:856
+#line 2922 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 519:
-#line 1803 "dhcp4_parser.yy" // lalr1.cc:856
+  case 522:
+#line 1808 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2949 "dhcp4_parser.cc" // lalr1.cc:856
+#line 2930 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 520:
-#line 1805 "dhcp4_parser.yy" // lalr1.cc:856
+  case 523:
+#line 1810 "dhcp4_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 2959 "dhcp4_parser.cc" // lalr1.cc:856
+#line 2940 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 521:
-#line 1813 "dhcp4_parser.yy" // lalr1.cc:856
+  case 524:
+#line 1818 "dhcp4_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 2970 "dhcp4_parser.cc" // lalr1.cc:856
+#line 2951 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 522:
-#line 1818 "dhcp4_parser.yy" // lalr1.cc:856
+  case 525:
+#line 1823 "dhcp4_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 2981 "dhcp4_parser.cc" // lalr1.cc:856
+#line 2962 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 523:
-#line 1825 "dhcp4_parser.yy" // lalr1.cc:856
+  case 526:
+#line 1830 "dhcp4_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 2991 "dhcp4_parser.cc" // lalr1.cc:856
+#line 2972 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 524:
-#line 1829 "dhcp4_parser.yy" // lalr1.cc:856
+  case 527:
+#line 1834 "dhcp4_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 3001 "dhcp4_parser.cc" // lalr1.cc:856
+#line 2982 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 546:
-#line 1860 "dhcp4_parser.yy" // lalr1.cc:856
+  case 549:
+#line 1865 "dhcp4_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 3010 "dhcp4_parser.cc" // lalr1.cc:856
+#line 2991 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 547:
-#line 1865 "dhcp4_parser.yy" // lalr1.cc:856
+  case 550:
+#line 1870 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 3018 "dhcp4_parser.cc" // lalr1.cc:856
+#line 2999 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 548:
-#line 1867 "dhcp4_parser.yy" // lalr1.cc:856
+  case 551:
+#line 1872 "dhcp4_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 3028 "dhcp4_parser.cc" // lalr1.cc:856
+#line 3009 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 549:
-#line 1873 "dhcp4_parser.yy" // lalr1.cc:856
+  case 552:
+#line 1878 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 3036 "dhcp4_parser.cc" // lalr1.cc:856
+#line 3017 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 550:
-#line 1875 "dhcp4_parser.yy" // lalr1.cc:856
+  case 553:
+#line 1880 "dhcp4_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 3046 "dhcp4_parser.cc" // lalr1.cc:856
+#line 3027 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 551:
-#line 1881 "dhcp4_parser.yy" // lalr1.cc:856
+  case 554:
+#line 1886 "dhcp4_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 3055 "dhcp4_parser.cc" // lalr1.cc:856
+#line 3036 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 552:
-#line 1886 "dhcp4_parser.yy" // lalr1.cc:856
+  case 555:
+#line 1891 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 3063 "dhcp4_parser.cc" // lalr1.cc:856
+#line 3044 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 553:
-#line 1888 "dhcp4_parser.yy" // lalr1.cc:856
+  case 556:
+#line 1893 "dhcp4_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 3073 "dhcp4_parser.cc" // lalr1.cc:856
+#line 3054 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 554:
-#line 1894 "dhcp4_parser.yy" // lalr1.cc:856
+  case 557:
+#line 1899 "dhcp4_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 3082 "dhcp4_parser.cc" // lalr1.cc:856
+#line 3063 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 555:
-#line 1899 "dhcp4_parser.yy" // lalr1.cc:856
+  case 558:
+#line 1904 "dhcp4_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 3091 "dhcp4_parser.cc" // lalr1.cc:856
+#line 3072 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 556:
-#line 1904 "dhcp4_parser.yy" // lalr1.cc:856
+  case 559:
+#line 1909 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NCR_PROTOCOL);
 }
-#line 3099 "dhcp4_parser.cc" // lalr1.cc:856
+#line 3080 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 557:
-#line 1906 "dhcp4_parser.yy" // lalr1.cc:856
+  case 560:
+#line 1911 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.back()->set("ncr-protocol", yystack_[0].value.as< ElementPtr > ());
     ctx.leave();
 }
-#line 3108 "dhcp4_parser.cc" // lalr1.cc:856
+#line 3089 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 558:
-#line 1912 "dhcp4_parser.yy" // lalr1.cc:856
+  case 561:
+#line 1917 "dhcp4_parser.yy" // lalr1.cc:859
     { yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("UDP", ctx.loc2pos(yystack_[0].location))); }
-#line 3114 "dhcp4_parser.cc" // lalr1.cc:856
+#line 3095 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 559:
-#line 1913 "dhcp4_parser.yy" // lalr1.cc:856
+  case 562:
+#line 1918 "dhcp4_parser.yy" // lalr1.cc:859
     { yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("TCP", ctx.loc2pos(yystack_[0].location))); }
-#line 3120 "dhcp4_parser.cc" // lalr1.cc:856
+#line 3101 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 560:
-#line 1916 "dhcp4_parser.yy" // lalr1.cc:856
+  case 563:
+#line 1921 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NCR_FORMAT);
 }
-#line 3128 "dhcp4_parser.cc" // lalr1.cc:856
+#line 3109 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 561:
-#line 1918 "dhcp4_parser.yy" // lalr1.cc:856
+  case 564:
+#line 1923 "dhcp4_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 3138 "dhcp4_parser.cc" // lalr1.cc:856
+#line 3119 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 562:
-#line 1924 "dhcp4_parser.yy" // lalr1.cc:856
+  case 565:
+#line 1929 "dhcp4_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 3147 "dhcp4_parser.cc" // lalr1.cc:856
+#line 3128 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 563:
-#line 1929 "dhcp4_parser.yy" // lalr1.cc:856
+  case 566:
+#line 1934 "dhcp4_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 3156 "dhcp4_parser.cc" // lalr1.cc:856
+#line 3137 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 564:
-#line 1934 "dhcp4_parser.yy" // lalr1.cc:856
+  case 567:
+#line 1939 "dhcp4_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 3165 "dhcp4_parser.cc" // lalr1.cc:856
+#line 3146 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 565:
-#line 1939 "dhcp4_parser.yy" // lalr1.cc:856
+  case 568:
+#line 1944 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.REPLACE_CLIENT_NAME);
 }
-#line 3173 "dhcp4_parser.cc" // lalr1.cc:856
+#line 3154 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 566:
-#line 1941 "dhcp4_parser.yy" // lalr1.cc:856
+  case 569:
+#line 1946 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.back()->set("replace-client-name", yystack_[0].value.as< ElementPtr > ());
     ctx.leave();
 }
-#line 3182 "dhcp4_parser.cc" // lalr1.cc:856
+#line 3163 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 567:
-#line 1947 "dhcp4_parser.yy" // lalr1.cc:856
+  case 570:
+#line 1952 "dhcp4_parser.yy" // lalr1.cc:859
     {
       yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("when-present", ctx.loc2pos(yystack_[0].location))); 
       }
-#line 3190 "dhcp4_parser.cc" // lalr1.cc:856
+#line 3171 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 568:
-#line 1950 "dhcp4_parser.yy" // lalr1.cc:856
+  case 571:
+#line 1955 "dhcp4_parser.yy" // lalr1.cc:859
     {
       yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("never", ctx.loc2pos(yystack_[0].location)));
       }
-#line 3198 "dhcp4_parser.cc" // lalr1.cc:856
+#line 3179 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 569:
-#line 1953 "dhcp4_parser.yy" // lalr1.cc:856
+  case 572:
+#line 1958 "dhcp4_parser.yy" // lalr1.cc:859
     {
       yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("always", ctx.loc2pos(yystack_[0].location)));
       }
-#line 3206 "dhcp4_parser.cc" // lalr1.cc:856
+#line 3187 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 570:
-#line 1956 "dhcp4_parser.yy" // lalr1.cc:856
+  case 573:
+#line 1961 "dhcp4_parser.yy" // lalr1.cc:859
     {
       yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("when-not-present", ctx.loc2pos(yystack_[0].location)));
       }
-#line 3214 "dhcp4_parser.cc" // lalr1.cc:856
+#line 3195 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 571:
-#line 1959 "dhcp4_parser.yy" // lalr1.cc:856
+  case 574:
+#line 1964 "dhcp4_parser.yy" // lalr1.cc:859
     {
       error(yystack_[0].location, "boolean values for the replace-client-name are "
                 "no longer supported");
       }
-#line 3223 "dhcp4_parser.cc" // lalr1.cc:856
+#line 3204 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 572:
-#line 1965 "dhcp4_parser.yy" // lalr1.cc:856
+  case 575:
+#line 1970 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 3231 "dhcp4_parser.cc" // lalr1.cc:856
+#line 3212 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 573:
-#line 1967 "dhcp4_parser.yy" // lalr1.cc:856
+  case 576:
+#line 1972 "dhcp4_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 3241 "dhcp4_parser.cc" // lalr1.cc:856
+#line 3222 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 574:
-#line 1973 "dhcp4_parser.yy" // lalr1.cc:856
+  case 577:
+#line 1978 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 3249 "dhcp4_parser.cc" // lalr1.cc:856
+#line 3230 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 575:
-#line 1975 "dhcp4_parser.yy" // lalr1.cc:856
+  case 578:
+#line 1980 "dhcp4_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 3259 "dhcp4_parser.cc" // lalr1.cc:856
+#line 3240 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 576:
-#line 1981 "dhcp4_parser.yy" // lalr1.cc:856
+  case 579:
+#line 1986 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 3267 "dhcp4_parser.cc" // lalr1.cc:856
+#line 3248 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 577:
-#line 1983 "dhcp4_parser.yy" // lalr1.cc:856
+  case 580:
+#line 1988 "dhcp4_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 3277 "dhcp4_parser.cc" // lalr1.cc:856
+#line 3258 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 578:
-#line 1992 "dhcp4_parser.yy" // lalr1.cc:856
+  case 581:
+#line 1997 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 3285 "dhcp4_parser.cc" // lalr1.cc:856
+#line 3266 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 579:
-#line 1994 "dhcp4_parser.yy" // lalr1.cc:856
+  case 582:
+#line 1999 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.back()->set("Dhcp6", yystack_[0].value.as< ElementPtr > ());
     ctx.leave();
 }
-#line 3294 "dhcp4_parser.cc" // lalr1.cc:856
+#line 3275 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 580:
-#line 1999 "dhcp4_parser.yy" // lalr1.cc:856
+  case 583:
+#line 2004 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 3302 "dhcp4_parser.cc" // lalr1.cc:856
+#line 3283 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 581:
-#line 2001 "dhcp4_parser.yy" // lalr1.cc:856
+  case 584:
+#line 2006 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.back()->set("DhcpDdns", yystack_[0].value.as< ElementPtr > ());
     ctx.leave();
 }
-#line 3311 "dhcp4_parser.cc" // lalr1.cc:856
+#line 3292 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 582:
-#line 2006 "dhcp4_parser.yy" // lalr1.cc:856
+  case 585:
+#line 2011 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 3319 "dhcp4_parser.cc" // lalr1.cc:856
+#line 3300 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 583:
-#line 2008 "dhcp4_parser.yy" // lalr1.cc:856
+  case 586:
+#line 2013 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.back()->set("Control-agent", yystack_[0].value.as< ElementPtr > ());
     ctx.leave();
 }
-#line 3328 "dhcp4_parser.cc" // lalr1.cc:856
+#line 3309 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 584:
-#line 2018 "dhcp4_parser.yy" // lalr1.cc:856
+  case 587:
+#line 2018 "dhcp4_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 3319 "dhcp4_parser.cc" // lalr1.cc:859
+    break;
+
+  case 588:
+#line 2022 "dhcp4_parser.yy" // lalr1.cc:859
+    {
+    ctx.stack_.pop_back();
+}
+#line 3327 "dhcp4_parser.cc" // lalr1.cc:859
+    break;
+
+  case 589:
+#line 2027 "dhcp4_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 3338 "dhcp4_parser.cc" // lalr1.cc:859
+    break;
+
+  case 590:
+#line 2032 "dhcp4_parser.yy" // lalr1.cc:859
+    {
+    // No config control params are required
+    ctx.stack_.pop_back();
+    ctx.leave();
+}
+#line 3348 "dhcp4_parser.cc" // lalr1.cc:859
+    break;
+
+  case 591:
+#line 2038 "dhcp4_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 3358 "dhcp4_parser.cc" // lalr1.cc:859
+    break;
+
+  case 592:
+#line 2042 "dhcp4_parser.yy" // lalr1.cc:859
+    {
+    // No config_control params are required
+    // parsing completed
+}
+#line 3367 "dhcp4_parser.cc" // lalr1.cc:859
+    break;
+
+  case 597:
+#line 2057 "dhcp4_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 3378 "dhcp4_parser.cc" // lalr1.cc:859
+    break;
+
+  case 598:
+#line 2062 "dhcp4_parser.yy" // lalr1.cc:859
+    {
+    ctx.stack_.pop_back();
+    ctx.leave();
+}
+#line 3387 "dhcp4_parser.cc" // lalr1.cc:859
+    break;
+
+  case 599:
+#line 2072 "dhcp4_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 3339 "dhcp4_parser.cc" // lalr1.cc:856
+#line 3398 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 585:
-#line 2023 "dhcp4_parser.yy" // lalr1.cc:856
+  case 600:
+#line 2077 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 3348 "dhcp4_parser.cc" // lalr1.cc:856
+#line 3407 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 586:
-#line 2028 "dhcp4_parser.yy" // lalr1.cc:856
+  case 601:
+#line 2082 "dhcp4_parser.yy" // lalr1.cc:859
     {
     // Parse the Logging map
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.push_back(m);
 }
-#line 3358 "dhcp4_parser.cc" // lalr1.cc:856
+#line 3417 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 587:
-#line 2032 "dhcp4_parser.yy" // lalr1.cc:856
+  case 602:
+#line 2086 "dhcp4_parser.yy" // lalr1.cc:859
     {
     // parsing completed
 }
-#line 3366 "dhcp4_parser.cc" // lalr1.cc:856
+#line 3425 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 591:
-#line 2048 "dhcp4_parser.yy" // lalr1.cc:856
+  case 606:
+#line 2102 "dhcp4_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 3377 "dhcp4_parser.cc" // lalr1.cc:856
+#line 3436 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 592:
-#line 2053 "dhcp4_parser.yy" // lalr1.cc:856
+  case 607:
+#line 2107 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 3386 "dhcp4_parser.cc" // lalr1.cc:856
+#line 3445 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 595:
-#line 2065 "dhcp4_parser.yy" // lalr1.cc:856
+  case 610:
+#line 2119 "dhcp4_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 3396 "dhcp4_parser.cc" // lalr1.cc:856
+#line 3455 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 596:
-#line 2069 "dhcp4_parser.yy" // lalr1.cc:856
+  case 611:
+#line 2123 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
 }
-#line 3404 "dhcp4_parser.cc" // lalr1.cc:856
+#line 3463 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 606:
-#line 2086 "dhcp4_parser.yy" // lalr1.cc:856
+  case 621:
+#line 2140 "dhcp4_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 3413 "dhcp4_parser.cc" // lalr1.cc:856
+#line 3472 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 607:
-#line 2091 "dhcp4_parser.yy" // lalr1.cc:856
+  case 622:
+#line 2145 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 3421 "dhcp4_parser.cc" // lalr1.cc:856
+#line 3480 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 608:
-#line 2093 "dhcp4_parser.yy" // lalr1.cc:856
+  case 623:
+#line 2147 "dhcp4_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 3431 "dhcp4_parser.cc" // lalr1.cc:856
+#line 3490 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 609:
-#line 2099 "dhcp4_parser.yy" // lalr1.cc:856
+  case 624:
+#line 2153 "dhcp4_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 3442 "dhcp4_parser.cc" // lalr1.cc:856
+#line 3501 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 610:
-#line 2104 "dhcp4_parser.yy" // lalr1.cc:856
+  case 625:
+#line 2158 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 3451 "dhcp4_parser.cc" // lalr1.cc:856
+#line 3510 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 613:
-#line 2113 "dhcp4_parser.yy" // lalr1.cc:856
+  case 628:
+#line 2167 "dhcp4_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 3461 "dhcp4_parser.cc" // lalr1.cc:856
+#line 3520 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 614:
-#line 2117 "dhcp4_parser.yy" // lalr1.cc:856
+  case 629:
+#line 2171 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
 }
-#line 3469 "dhcp4_parser.cc" // lalr1.cc:856
+#line 3528 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 621:
-#line 2131 "dhcp4_parser.yy" // lalr1.cc:856
+  case 636:
+#line 2185 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 3477 "dhcp4_parser.cc" // lalr1.cc:856
+#line 3536 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 622:
-#line 2133 "dhcp4_parser.yy" // lalr1.cc:856
+  case 637:
+#line 2187 "dhcp4_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 3487 "dhcp4_parser.cc" // lalr1.cc:856
+#line 3546 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 623:
-#line 2139 "dhcp4_parser.yy" // lalr1.cc:856
+  case 638:
+#line 2193 "dhcp4_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 3496 "dhcp4_parser.cc" // lalr1.cc:856
+#line 3555 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 624:
-#line 2144 "dhcp4_parser.yy" // lalr1.cc:856
+  case 639:
+#line 2198 "dhcp4_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 3505 "dhcp4_parser.cc" // lalr1.cc:856
+#line 3564 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 625:
-#line 2149 "dhcp4_parser.yy" // lalr1.cc:856
+  case 640:
+#line 2203 "dhcp4_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 3514 "dhcp4_parser.cc" // lalr1.cc:856
+#line 3573 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
 
-#line 3518 "dhcp4_parser.cc" // lalr1.cc:856
+#line 3577 "dhcp4_parser.cc" // lalr1.cc:859
             default:
               break;
             }
@@ -3576,6 +3635,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);
@@ -3649,7 +3709,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 ())
@@ -3667,7 +3728,7 @@ namespace isc { namespace dhcp {
   void
   Dhcp4Parser::error (const syntax_error& yyexc)
   {
-    error (yyexc.location, yyexc.what ());
+    error (yyexc.location, yyexc.what());
   }
 
   // Generate an error message.
@@ -3743,13 +3804,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_
       }
 
@@ -3768,678 +3828,697 @@ namespace isc { namespace dhcp {
   }
 
 
-  const short int Dhcp4Parser::yypact_ninf_ = -769;
+  const short int Dhcp4Parser::yypact_ninf_ = -797;
 
   const signed char Dhcp4Parser::yytable_ninf_ = -1;
 
   const short int
   Dhcp4Parser::yypact_[] =
   {
-     381,  -769,  -769,  -769,  -769,  -769,  -769,  -769,  -769,  -769,
-    -769,  -769,  -769,  -769,    53,    27,    39,    73,    79,    81,
-     100,   123,   152,   161,   175,   179,   186,   197,  -769,  -769,
-    -769,  -769,  -769,  -769,  -769,  -769,  -769,  -769,  -769,  -769,
-    -769,  -769,  -769,  -769,  -769,  -769,  -769,  -769,  -769,  -769,
-    -769,  -769,  -769,  -769,  -769,  -769,  -769,  -769,  -769,  -769,
-    -769,  -769,  -769,  -769,    27,   -92,    25,   183,    54,    59,
-      69,   401,    13,   191,   101,   -48,   449,    45,  -769,   216,
-     213,   222,   242,   221,  -769,  -769,  -769,  -769,  -769,   256,
-    -769,    46,  -769,  -769,  -769,  -769,  -769,  -769,  -769,  -769,
-     258,   283,  -769,  -769,  -769,  -769,  -769,  -769,   304,   308,
-     314,   316,  -769,  -769,  -769,  -769,  -769,  -769,  -769,  -769,
-    -769,  -769,  -769,   317,  -769,  -769,  -769,    61,  -769,  -769,
-    -769,  -769,  -769,  -769,  -769,  -769,  -769,  -769,  -769,  -769,
-    -769,  -769,  -769,  -769,  -769,  -769,  -769,  -769,  -769,  -769,
-    -769,  -769,  -769,  -769,  -769,  -769,  -769,  -769,  -769,  -769,
-     318,  -769,   105,  -769,  -769,  -769,  -769,  -769,  -769,  -769,
-    -769,  -769,  -769,  -769,  -769,  -769,   319,  -769,  -769,  -769,
-    -769,  -769,  -769,  -769,  -769,  -769,   136,  -769,  -769,  -769,
-    -769,  -769,  -769,  -769,  -769,  -769,  -769,  -769,  -769,  -769,
-    -769,  -769,  -769,  -769,  -769,  -769,  -769,  -769,  -769,  -769,
-    -769,   164,  -769,  -769,  -769,  -769,  -769,  -769,  -769,  -769,
-    -769,  -769,  -769,  -769,  -769,  -769,  -769,  -769,   268,   321,
-    -769,  -769,  -769,  -769,  -769,  -769,  -769,  -769,  -769,  -769,
-    -769,  -769,   278,  -769,  -769,   323,  -769,  -769,  -769,   324,
-    -769,  -769,   309,   327,  -769,  -769,  -769,  -769,  -769,  -769,
-    -769,  -769,  -769,  -769,  -769,  -769,  -769,   328,   329,  -769,
-    -769,  -769,  -769,   326,   332,  -769,  -769,  -769,  -769,  -769,
-    -769,  -769,  -769,  -769,  -769,  -769,  -769,   176,  -769,  -769,
-    -769,   333,  -769,  -769,   335,  -769,   338,   340,  -769,  -769,
-     341,   342,   343,  -769,  -769,  -769,  -769,  -769,  -769,  -769,
-     210,  -769,  -769,  -769,  -769,  -769,  -769,  -769,  -769,  -769,
-    -769,  -769,  -769,  -769,  -769,  -769,  -769,  -769,  -769,   212,
-    -769,  -769,  -769,    27,    27,  -769,   188,   350,   353,   354,
-     356,   357,  -769,    25,  -769,   359,   360,   173,   205,   366,
-     367,   369,   370,   371,   377,   226,   228,   230,   231,   379,
-     390,   392,   395,   406,   409,   410,   411,   413,   414,   415,
-     259,   419,   420,   183,  -769,   424,   425,   426,   274,    54,
-    -769,   427,   431,   435,   436,   439,   440,   284,   442,   443,
-     444,   445,    59,  -769,   446,    69,  -769,   447,   448,   452,
-     454,   457,   458,   459,   460,  -769,   401,  -769,   461,   463,
-     292,   464,   466,   467,   315,  -769,   191,   468,   320,   322,
-    -769,   101,   472,   475,   -39,  -769,   337,   476,   477,   344,
-     494,   345,   351,   497,   498,   347,   348,   352,   499,   500,
-     509,   510,   449,  -769,   512,    45,  -769,  -769,  -769,   513,
-     511,   516,    27,    27,    27,  -769,   517,   518,  -769,  -769,
-     383,   384,   385,   519,   534,   541,  -769,  -769,  -769,  -769,
-     544,   545,   546,   547,   548,   393,   549,   551,   552,   553,
-     569,  -769,   570,   571,  -769,   554,    64,   174,  -769,  -769,
-     400,   421,   428,   574,   429,   430,  -769,    41,   554,   432,
-     573,  -769,   433,  -769,   554,   434,   437,   438,   441,   450,
-     451,   453,  -769,   455,   456,  -769,   462,   465,   469,  -769,
-    -769,   470,  -769,  -769,  -769,   471,    27,  -769,  -769,   473,
-     474,  -769,   478,  -769,  -769,    22,   479,  -769,  -769,  -769,
-     -91,   480,   481,   482,  -769,   579,  -769,    27,   183,    45,
-    -769,  -769,  -769,    54,   564,  -769,  -769,  -769,    57,    57,
-     580,   584,   588,   589,   592,  -769,  -769,  -769,   178,   593,
-     595,   596,    95,    85,   449,  -769,  -769,  -769,  -769,  -769,
-    -769,  -769,  -769,  -769,  -769,  -769,   597,  -769,  -769,  -769,
-    -769,  -769,  -769,  -769,  -769,  -769,   143,  -769,  -769,  -769,
-    -769,  -769,  -769,  -769,  -769,  -769,  -769,  -769,  -769,  -769,
-    -769,  -769,  -769,  -769,  -769,  -769,  -769,  -769,  -769,  -769,
-    -769,  -769,  -769,  -769,  -769,  -769,  -769,  -769,  -769,  -769,
-     598,  -769,   220,   235,   270,  -769,   271,  -769,  -769,  -769,
-    -769,  -769,  -769,   582,   602,   604,   608,   610,  -769,  -769,
-     613,   614,   615,   616,   617,  -769,   272,  -769,  -769,  -769,
-    -769,  -769,  -769,  -769,  -769,  -769,  -769,  -769,  -769,  -769,
-    -769,  -769,  -769,  -769,  -769,   282,  -769,   618,   620,  -769,
-    -769,   621,   623,  -769,  -769,   622,   629,  -769,  -769,   630,
-     632,  -769,  -769,   631,   636,  -769,  -769,  -769,  -769,  -769,
-    -769,   142,  -769,  -769,  -769,  -769,  -769,  -769,  -769,   149,
-    -769,  -769,   637,   641,  -769,  -769,   639,   643,  -769,   644,
-     645,   646,   647,   648,   649,   285,  -769,  -769,  -769,  -769,
-    -769,  -769,  -769,  -769,  -769,  -769,  -769,  -769,   286,  -769,
-    -769,  -769,   293,   487,  -769,   650,   651,  -769,  -769,  -769,
-    -769,   652,  -769,   172,  -769,  -769,  -769,  -769,   653,   564,
-    -769,   654,   655,   657,   658,   502,   492,   503,   504,   505,
-     661,   664,   508,   514,   515,   520,   507,    57,  -769,  -769,
-      57,  -769,   580,    59,  -769,   584,   191,  -769,   588,   101,
-    -769,   589,   382,  -769,   592,   178,  -769,    65,   593,  -769,
-     401,  -769,   595,   -48,  -769,   596,   521,   522,   523,   524,
-     525,   526,    95,  -769,   667,   668,    85,  -769,  -769,  -769,
-     671,   670,    69,  -769,   597,   674,  -769,   349,   598,  -769,
-     528,  -769,   215,   529,   530,   531,  -769,  -769,  -769,  -769,
-    -769,   532,   533,  -769,  -769,  -769,  -769,  -769,  -769,   294,
-    -769,   295,  -769,   666,  -769,   672,  -769,  -769,  -769,  -769,
-    -769,  -769,  -769,  -769,  -769,  -769,  -769,  -769,   296,  -769,
-    -769,  -769,  -769,  -769,  -769,  -769,  -769,  -769,  -769,  -769,
-     675,  -769,  -769,  -769,  -769,  -769,  -769,  -769,  -769,  -769,
-     686,   692,  -769,  -769,  -769,  -769,  -769,   688,  -769,   297,
-    -769,  -769,  -769,  -769,  -769,  -769,  -769,  -769,   537,   538,
-    -769,  -769,   539,   303,  -769,   554,  -769,   696,  -769,  -769,
-    -769,  -769,  -769,   306,  -769,  -769,  -769,  -769,  -769,  -769,
-    -769,  -769,  -769,  -769,  -769,  -769,  -769,  -769,  -769,  -769,
-    -769,  -769,  -769,  -769,   382,  -769,   697,   540,  -769,    65,
-    -769,  -769,  -769,  -769,  -769,  -769,  -769,   698,   543,   701,
-     349,  -769,  -769,   550,  -769,  -769,   702,  -769,   555,  -769,
-    -769,   699,  -769,  -769,   313,  -769,    89,   699,  -769,  -769,
-     704,   705,   707,   307,  -769,  -769,  -769,  -769,  -769,  -769,
-     708,   556,   557,   560,    89,  -769,   562,  -769,  -769,  -769,
-    -769,  -769
+     470,  -797,  -797,  -797,  -797,  -797,  -797,  -797,  -797,  -797,
+    -797,  -797,  -797,  -797,  -797,    70,    27,    53,    65,   121,
+     145,   152,   169,   191,   192,   201,   212,   213,   221,   223,
+    -797,  -797,  -797,  -797,  -797,  -797,  -797,  -797,  -797,  -797,
+    -797,  -797,  -797,  -797,  -797,  -797,  -797,  -797,  -797,  -797,
+    -797,  -797,  -797,  -797,  -797,  -797,  -797,  -797,  -797,  -797,
+    -797,  -797,  -797,  -797,  -797,  -797,  -797,  -797,    27,    16,
+      18,    60,    79,   157,    44,   237,   146,    34,   138,   -62,
+     455,    83,    26,  -797,   234,   242,   244,   248,   255,  -797,
+    -797,  -797,  -797,  -797,   277,  -797,    43,  -797,  -797,  -797,
+    -797,  -797,  -797,  -797,  -797,  -797,  -797,   279,   289,  -797,
+    -797,  -797,  -797,  -797,  -797,   302,   303,   309,   311,  -797,
+    -797,  -797,  -797,  -797,  -797,  -797,  -797,  -797,  -797,  -797,
+     315,  -797,  -797,  -797,    75,  -797,  -797,  -797,  -797,  -797,
+    -797,  -797,  -797,  -797,  -797,  -797,  -797,  -797,  -797,  -797,
+    -797,  -797,  -797,  -797,  -797,  -797,  -797,  -797,  -797,  -797,
+    -797,  -797,  -797,  -797,  -797,  -797,  -797,  -797,   319,  -797,
+     119,  -797,  -797,  -797,  -797,  -797,  -797,  -797,  -797,  -797,
+    -797,  -797,  -797,  -797,   321,  -797,  -797,  -797,  -797,  -797,
+    -797,  -797,  -797,  -797,   139,  -797,  -797,  -797,  -797,  -797,
+    -797,  -797,  -797,  -797,  -797,  -797,  -797,  -797,  -797,  -797,
+    -797,  -797,  -797,  -797,  -797,  -797,  -797,  -797,  -797,   140,
+    -797,  -797,  -797,  -797,  -797,  -797,  -797,  -797,  -797,  -797,
+    -797,  -797,  -797,  -797,  -797,  -797,   251,   288,  -797,  -797,
+    -797,  -797,  -797,  -797,  -797,  -797,  -797,  -797,  -797,  -797,
+     335,  -797,  -797,   323,  -797,  -797,  -797,   340,  -797,  -797,
+     337,   344,  -797,  -797,  -797,  -797,  -797,  -797,  -797,  -797,
+    -797,  -797,  -797,  -797,  -797,   346,   353,  -797,  -797,  -797,
+    -797,   350,   345,  -797,  -797,  -797,  -797,  -797,  -797,  -797,
+    -797,  -797,  -797,  -797,  -797,   143,  -797,  -797,  -797,   355,
+    -797,  -797,   361,  -797,   364,   365,  -797,  -797,   367,   368,
+     370,  -797,  -797,  -797,  -797,  -797,  -797,  -797,   153,  -797,
+    -797,  -797,  -797,  -797,  -797,  -797,  -797,  -797,  -797,  -797,
+    -797,  -797,  -797,  -797,  -797,  -797,  -797,   159,  -797,  -797,
+    -797,  -797,   165,  -797,  -797,  -797,    27,    27,  -797,   216,
+     371,   377,   378,   380,   381,  -797,    18,  -797,    26,   382,
+     388,   394,   228,   239,   398,   399,   403,   406,   408,   409,
+     250,   256,   257,   260,   415,   421,   422,   428,   432,   433,
+     434,   435,   436,   437,   438,   280,   439,   441,    60,  -797,
+     444,   445,   449,   290,    79,  -797,   450,   451,   453,   454,
+     456,   457,   282,   458,   459,   462,   463,   157,  -797,   464,
+      44,  -797,   465,   466,   467,   468,   469,   471,   472,   490,
+    -797,   237,  -797,   491,   492,   295,   493,   494,   495,   336,
+    -797,    34,   497,   339,   342,  -797,   138,   499,   502,   -22,
+    -797,   348,   506,   507,   351,   512,   354,   356,   513,   517,
+     357,   358,   359,   518,   522,   527,   529,   455,  -797,   530,
+      83,  -797,   531,    26,  -797,  -797,  -797,   532,   534,   535,
+      27,    27,    27,  -797,   172,   536,   537,   538,  -797,  -797,
+     374,   375,   383,   541,   542,   545,  -797,  -797,  -797,  -797,
+     546,   547,   549,   550,   551,   393,   552,   554,   555,   556,
+     557,  -797,   558,   559,  -797,   564,    94,   167,  -797,  -797,
+     400,   423,   424,   579,   425,   426,  -797,   273,   564,   429,
+     578,  -797,   430,  -797,   564,   431,   440,   443,   446,   447,
+     448,   452,  -797,   473,   474,  -797,   475,   476,   477,  -797,
+    -797,   478,  -797,  -797,  -797,   479,    27,  -797,  -797,   480,
+     481,  -797,   482,  -797,  -797,    20,   483,  -797,  -797,  -797,
+      -8,   484,   485,   486,  -797,   590,  -797,   591,  -797,    27,
+      60,    83,  -797,  -797,  -797,  -797,    26,    79,   539,  -797,
+    -797,  -797,   442,   442,   592,   593,   594,   595,   597,  -797,
+    -797,  -797,   176,   600,   601,   605,    32,    -6,   455,  -797,
+    -797,  -797,  -797,  -797,  -797,  -797,  -797,  -797,  -797,  -797,
+     607,  -797,  -797,  -797,  -797,  -797,  -797,  -797,  -797,  -797,
+      97,  -797,  -797,  -797,  -797,  -797,  -797,  -797,  -797,  -797,
+    -797,  -797,  -797,  -797,  -797,  -797,  -797,  -797,  -797,  -797,
+    -797,  -797,  -797,  -797,  -797,  -797,  -797,  -797,  -797,  -797,
+    -797,  -797,  -797,  -797,   609,   592,  -797,   214,   236,   254,
+     263,  -797,   272,  -797,  -797,  -797,  -797,  -797,  -797,   613,
+     629,   630,   631,   642,  -797,  -797,   646,   647,   648,   649,
+     650,  -797,   274,  -797,  -797,  -797,  -797,  -797,  -797,  -797,
+    -797,  -797,  -797,  -797,  -797,  -797,  -797,  -797,  -797,  -797,
+    -797,   276,  -797,   651,   652,  -797,  -797,   653,   655,  -797,
+    -797,   654,   658,  -797,  -797,   656,   660,  -797,  -797,   659,
+     661,  -797,  -797,  -797,  -797,  -797,  -797,    58,  -797,  -797,
+    -797,  -797,  -797,  -797,  -797,    89,  -797,  -797,   662,   663,
+    -797,  -797,   664,   666,  -797,   667,   668,   669,   670,   671,
+     672,   284,  -797,  -797,  -797,  -797,  -797,  -797,  -797,  -797,
+    -797,  -797,  -797,  -797,   286,  -797,  -797,  -797,   287,   504,
+    -797,   673,   674,  -797,  -797,  -797,  -797,   589,  -797,   126,
+    -797,   675,  -797,  -797,  -797,  -797,   676,   539,  -797,   678,
+     679,   680,   681,   514,   520,   523,   524,   525,   684,   687,
+     528,   533,   540,   543,   544,   442,  -797,  -797,   442,  -797,
+     592,   157,  -797,   593,    34,  -797,   594,   138,  -797,   595,
+     199,  -797,   597,   176,  -797,   390,   600,  -797,   237,  -797,
+     601,   -62,  -797,   605,   548,   553,   560,   561,   562,   563,
+      32,  -797,   689,   690,    -6,  -797,  -797,  -797,   692,   693,
+      44,  -797,   607,   691,  -797,   175,   609,  -797,  -797,   565,
+    -797,   395,   566,   567,   568,  -797,  -797,  -797,  -797,  -797,
+     569,   570,  -797,  -797,  -797,  -797,  -797,  -797,   294,  -797,
+     296,  -797,   694,  -797,   695,  -797,  -797,  -797,  -797,  -797,
+    -797,  -797,  -797,  -797,  -797,  -797,  -797,   297,  -797,  -797,
+    -797,  -797,  -797,  -797,  -797,  -797,  -797,  -797,  -797,   696,
+    -797,  -797,  -797,  -797,  -797,  -797,  -797,  -797,  -797,   697,
+     698,  -797,  -797,  -797,  -797,  -797,   700,  -797,   300,  -797,
+    -797,  -797,  -797,  -797,  -797,  -797,  -797,   571,   573,  -797,
+    -797,   574,   318,  -797,   564,  -797,   702,  -797,  -797,  -797,
+    -797,  -797,   331,  -797,  -797,  -797,  -797,  -797,  -797,  -797,
+    -797,  -797,  -797,  -797,  -797,  -797,  -797,  -797,  -797,  -797,
+    -797,  -797,  -797,   199,  -797,   705,   576,  -797,   390,  -797,
+    -797,  -797,  -797,  -797,  -797,  -797,   707,   575,   709,   175,
+    -797,  -797,   577,  -797,  -797,   710,  -797,   580,  -797,  -797,
+     711,  -797,  -797,   166,  -797,   -91,   711,  -797,  -797,   712,
+     715,   716,   338,  -797,  -797,  -797,  -797,  -797,  -797,   717,
+     582,   581,   585,   -91,  -797,   583,  -797,  -797,  -797,  -797,
+    -797
   };
 
   const unsigned short int
   Dhcp4Parser::yydefact_[] =
   {
        0,     2,     4,     6,     8,    10,    12,    14,    16,    18,
-      20,    22,    24,    26,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     1,    43,
-      36,    32,    31,    28,    29,    30,    35,     3,    33,    34,
-      56,     5,    68,     7,   118,     9,   255,    11,   408,    13,
-     433,    15,   333,    17,   341,    19,   378,    21,   220,    23,
-     523,    25,   586,    27,    45,    39,     0,     0,     0,     0,
-       0,   435,     0,   343,   380,     0,     0,     0,    47,     0,
-      46,     0,     0,    40,    66,   584,   578,   580,   582,     0,
-      65,     0,    58,    60,    62,    63,    64,    61,   107,   133,
-       0,     0,   454,   456,   458,   131,   140,   142,     0,     0,
-       0,     0,   247,   331,   370,   303,   421,   423,   198,   482,
-     425,   212,   231,     0,   508,   521,   100,     0,    70,    72,
-      73,    74,    75,    91,    92,    78,    79,    98,    80,    81,
-      82,    86,    87,    76,    77,    84,    85,    96,    97,    99,
-      93,    94,    95,    83,    88,    89,    90,   120,   122,   126,
-       0,   117,     0,   109,   111,   112,   113,   114,   115,   116,
-     284,   286,   288,   400,   282,   290,     0,   296,   294,   292,
-     478,   281,   259,   260,   261,   272,     0,   257,   264,   276,
-     277,   278,   265,   267,   268,   270,   266,   262,   263,   279,
-     280,   269,   273,   274,   275,   271,   419,   418,   414,   415,
-     413,     0,   410,   412,   416,   417,   476,   464,   466,   470,
-     468,   474,   472,   460,   453,   447,   451,   452,     0,   436,
-     437,   448,   449,   450,   444,   439,   445,   441,   442,   443,
-     446,   440,     0,   360,   183,     0,   364,   362,   367,     0,
-     356,   357,     0,   344,   345,   347,   359,   348,   349,   350,
-     366,   351,   352,   353,   354,   355,   394,     0,     0,   392,
-     393,   396,   397,     0,   381,   382,   384,   385,   386,   387,
-     388,   389,   390,   391,   227,   229,   224,     0,   222,   225,
-     226,     0,   547,   549,     0,   552,     0,     0,   556,   560,
-       0,     0,     0,   565,   572,   574,   576,   545,   543,   544,
-       0,   525,   527,   528,   529,   530,   531,   532,   533,   534,
-     535,   536,   537,   538,   539,   540,   541,   542,   591,     0,
-     588,   590,    44,     0,     0,    37,     0,     0,     0,     0,
-       0,     0,    55,     0,    57,     0,     0,     0,     0,     0,
+      20,    22,    24,    26,    28,     0,     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,   121,     9,   258,    11,
+     411,    13,   436,    15,   336,    17,   344,    19,   381,    21,
+     223,    23,   526,    25,   601,    27,   591,    29,    47,    41,
+       0,     0,     0,     0,     0,   438,     0,   346,   383,     0,
+       0,     0,     0,    49,     0,    48,     0,     0,    42,    68,
+     599,   581,   583,   585,     0,    67,     0,    60,    62,    64,
+      65,    66,    63,   587,   589,   110,   136,     0,     0,   457,
+     459,   461,   134,   143,   145,     0,     0,     0,     0,   250,
+     334,   373,   306,   424,   426,   201,   485,   428,   215,   234,
+       0,   511,   524,   103,     0,    72,    74,    75,    76,    77,
+      93,    94,    80,    81,   100,    82,    83,    84,    88,    89,
+      78,    79,    86,    87,    98,    99,   101,    95,    96,    97,
+      85,    90,    91,    92,   102,   123,   125,   129,     0,   120,
+       0,   112,   114,   115,   116,   117,   118,   119,   287,   289,
+     291,   403,   285,   293,     0,   299,   297,   295,   481,   284,
+     262,   263,   264,   275,     0,   260,   267,   279,   280,   281,
+     268,   270,   271,   273,   269,   265,   266,   282,   283,   272,
+     276,   277,   278,   274,   422,   421,   417,   418,   416,     0,
+     413,   415,   419,   420,   479,   467,   469,   473,   471,   477,
+     475,   463,   456,   450,   454,   455,     0,   439,   440,   451,
+     452,   453,   447,   442,   448,   444,   445,   446,   449,   443,
+       0,   363,   186,     0,   367,   365,   370,     0,   359,   360,
+       0,   347,   348,   350,   362,   351,   352,   353,   369,   354,
+     355,   356,   357,   358,   397,     0,     0,   395,   396,   399,
+     400,     0,   384,   385,   387,   388,   389,   390,   391,   392,
+     393,   394,   230,   232,   227,     0,   225,   228,   229,     0,
+     550,   552,     0,   555,     0,     0,   559,   563,     0,     0,
+       0,   568,   575,   577,   579,   548,   546,   547,     0,   528,
+     530,   531,   532,   533,   534,   535,   536,   537,   538,   539,
+     540,   541,   542,   543,   544,   545,   606,     0,   603,   605,
+     597,   596,     0,   593,   595,    46,     0,     0,    39,     0,
+       0,     0,     0,     0,     0,    57,     0,    59,     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,    69,     0,     0,     0,     0,     0,
-     119,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,   256,     0,     0,   409,     0,     0,     0,
-       0,     0,     0,     0,     0,   434,     0,   334,     0,     0,
-       0,     0,     0,     0,     0,   342,     0,     0,     0,     0,
-     379,     0,     0,     0,     0,   221,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,    71,
+       0,     0,     0,     0,     0,   122,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   259,     0,
+       0,   412,     0,     0,     0,     0,     0,     0,     0,     0,
+     437,     0,   337,     0,     0,     0,     0,     0,     0,     0,
+     345,     0,     0,     0,     0,   382,     0,     0,     0,     0,
+     224,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   527,     0,
+       0,   602,     0,     0,   592,    50,    43,     0,     0,     0,
+       0,     0,     0,    61,     0,     0,     0,     0,   108,   109,
+       0,     0,     0,     0,     0,     0,   104,   105,   106,   107,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,   524,     0,     0,   587,    48,    41,     0,
-       0,     0,     0,     0,     0,    59,     0,     0,   105,   106,
-       0,     0,     0,     0,     0,     0,   101,   102,   103,   104,
+       0,   510,     0,     0,    73,     0,     0,     0,   133,   113,
+       0,     0,     0,     0,     0,     0,   305,     0,     0,     0,
+       0,   261,     0,   414,     0,     0,     0,     0,     0,     0,
+       0,     0,   441,     0,     0,   361,     0,     0,     0,   372,
+     349,     0,   401,   402,   386,     0,     0,   226,   549,     0,
+       0,   554,     0,   557,   558,     0,     0,   565,   566,   567,
+       0,     0,     0,     0,   529,     0,   604,     0,   594,     0,
+       0,     0,   582,   584,   586,   588,     0,     0,     0,   458,
+     460,   462,     0,     0,   147,   252,   338,   375,   308,    40,
+     425,   427,     0,     0,   430,   217,     0,     0,     0,    51,
+     124,   127,   128,   126,   131,   132,   130,   288,   290,   292,
+     405,   286,   294,   301,   302,   303,   304,   300,   298,   296,
+       0,   423,   480,   468,   470,   474,   472,   478,   476,   464,
+     364,   187,   368,   366,   371,   398,   231,   233,   551,   553,
+     556,   561,   562,   560,   564,   570,   571,   572,   573,   574,
+     569,   576,   578,   580,     0,   147,    44,     0,     0,     0,
+       0,   141,     0,   138,   140,   173,   179,   181,   183,     0,
+       0,     0,     0,     0,   195,   197,     0,     0,     0,     0,
+       0,   172,     0,   153,   155,   156,   157,   158,   159,   160,
+     161,   162,   163,   164,   168,   169,   170,   165,   171,   166,
+     167,     0,   151,     0,   148,   149,   256,     0,   253,   254,
+     342,     0,   339,   340,   379,     0,   376,   377,   312,     0,
+     309,   310,   210,   211,   212,   213,   214,     0,   203,   205,
+     206,   207,   208,   209,   489,     0,   487,   434,     0,   431,
+     432,   221,     0,   218,   219,     0,     0,     0,     0,     0,
+       0,     0,   236,   238,   239,   240,   241,   242,   243,   520,
+     522,   519,   517,   518,     0,   513,   515,   516,     0,    53,
+     409,     0,   406,   407,   465,   483,   484,     0,   610,     0,
+     608,     0,    69,   600,   590,   111,     0,     0,   137,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,   507,     0,     0,    71,     0,     0,     0,   130,   110,
-       0,     0,     0,     0,     0,     0,   302,     0,     0,     0,
-       0,   258,     0,   411,     0,     0,     0,     0,     0,     0,
-       0,     0,   438,     0,     0,   358,     0,     0,     0,   369,
-     346,     0,   398,   399,   383,     0,     0,   223,   546,     0,
-       0,   551,     0,   554,   555,     0,     0,   562,   563,   564,
-       0,     0,     0,     0,   526,     0,   589,     0,     0,     0,
-     579,   581,   583,     0,     0,   455,   457,   459,     0,     0,
-     144,   249,   335,   372,   305,    38,   422,   424,     0,     0,
-     427,   214,     0,     0,     0,    49,   121,   124,   125,   123,
-     128,   129,   127,   285,   287,   289,   402,   283,   291,   298,
-     299,   300,   301,   297,   295,   293,     0,   420,   477,   465,
-     467,   471,   469,   475,   473,   461,   361,   184,   365,   363,
-     368,   395,   228,   230,   548,   550,   553,   558,   559,   557,
-     561,   567,   568,   569,   570,   571,   566,   573,   575,   577,
-       0,    42,     0,     0,     0,   138,     0,   135,   137,   170,
-     176,   178,   180,     0,     0,     0,     0,     0,   192,   194,
-       0,     0,     0,     0,     0,   169,     0,   150,   152,   153,
-     154,   155,   156,   157,   158,   159,   160,   161,   165,   166,
-     167,   162,   168,   163,   164,     0,   148,     0,   145,   146,
-     253,     0,   250,   251,   339,     0,   336,   337,   376,     0,
-     373,   374,   309,     0,   306,   307,   207,   208,   209,   210,
-     211,     0,   200,   202,   203,   204,   205,   206,   486,     0,
-     484,   431,     0,   428,   429,   218,     0,   215,   216,     0,
-       0,     0,     0,     0,     0,     0,   233,   235,   236,   237,
-     238,   239,   240,   517,   519,   516,   514,   515,     0,   510,
-     512,   513,     0,    51,   406,     0,   403,   404,   462,   480,
-     481,     0,   595,     0,   593,    67,   585,   108,     0,     0,
-     134,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   132,   141,
-       0,   143,     0,     0,   248,     0,   343,   332,     0,   380,
-     371,     0,     0,   304,     0,     0,   199,   488,     0,   483,
-     435,   426,     0,     0,   213,     0,     0,     0,     0,     0,
-       0,     0,     0,   232,     0,     0,     0,   509,   522,    53,
-       0,    52,     0,   401,     0,     0,   479,     0,     0,   592,
-       0,   136,     0,     0,     0,     0,   182,   185,   186,   187,
-     188,     0,     0,   196,   197,   189,   190,   191,   151,     0,
-     147,     0,   252,     0,   338,     0,   375,   330,   327,   316,
-     317,   319,   313,   314,   315,   325,   326,   324,     0,   311,
-     318,   328,   329,   320,   321,   322,   323,   308,   201,   504,
-       0,   502,   503,   495,   496,   500,   501,   497,   498,   499,
-       0,   489,   490,   492,   493,   494,   485,     0,   430,     0,
-     217,   241,   242,   243,   244,   245,   246,   234,     0,     0,
-     511,    50,     0,     0,   405,     0,   609,     0,   607,   605,
-     599,   603,   604,     0,   597,   601,   602,   600,   594,   139,
-     172,   173,   174,   175,   171,   177,   179,   181,   193,   195,
-     149,   254,   340,   377,     0,   310,     0,     0,   487,     0,
-     432,   219,   518,   520,    54,   407,   463,     0,     0,     0,
-       0,   596,   312,     0,   506,   491,     0,   606,     0,   598,
-     505,     0,   608,   613,     0,   611,     0,     0,   610,   621,
-       0,     0,     0,     0,   615,   617,   618,   619,   620,   612,
-       0,     0,     0,     0,     0,   614,     0,   623,   624,   625,
-     616,   622
+       0,     0,     0,     0,     0,     0,   135,   144,     0,   146,
+       0,     0,   251,     0,   346,   335,     0,   383,   374,     0,
+       0,   307,     0,     0,   202,   491,     0,   486,   438,   429,
+       0,     0,   216,     0,     0,     0,     0,     0,     0,     0,
+       0,   235,     0,     0,     0,   512,   525,    55,     0,    54,
+       0,   404,     0,     0,   482,     0,     0,   607,   598,     0,
+     139,     0,     0,     0,     0,   185,   188,   189,   190,   191,
+       0,     0,   199,   200,   192,   193,   194,   154,     0,   150,
+       0,   255,     0,   341,     0,   378,   333,   330,   319,   320,
+     322,   316,   317,   318,   328,   329,   327,     0,   314,   321,
+     331,   332,   323,   324,   325,   326,   311,   204,   507,     0,
+     505,   506,   498,   499,   503,   504,   500,   501,   502,     0,
+     492,   493,   495,   496,   497,   488,     0,   433,     0,   220,
+     244,   245,   246,   247,   248,   249,   237,     0,     0,   514,
+      52,     0,     0,   408,     0,   624,     0,   622,   620,   614,
+     618,   619,     0,   612,   616,   617,   615,   609,   142,   175,
+     176,   177,   178,   174,   180,   182,   184,   196,   198,   152,
+     257,   343,   380,     0,   313,     0,     0,   490,     0,   435,
+     222,   521,   523,    56,   410,   466,     0,     0,     0,     0,
+     611,   315,     0,   509,   494,     0,   621,     0,   613,   508,
+       0,   623,   628,     0,   626,     0,     0,   625,   636,     0,
+       0,     0,     0,   630,   632,   633,   634,   635,   627,     0,
+       0,     0,     0,     0,   629,     0,   638,   639,   640,   631,
+     637
   };
 
   const short int
   Dhcp4Parser::yypgoto_[] =
   {
-    -769,  -769,  -769,  -769,  -769,  -769,  -769,  -769,  -769,  -769,
-    -769,  -769,  -769,  -769,  -769,   -51,  -769,   239,  -769,  -769,
-    -769,  -769,  -769,  -769,  -769,  -769,  -477,  -769,  -769,  -769,
-     -66,  -769,  -769,  -769,   373,  -769,  -769,  -769,  -769,   166,
-     368,   -43,   -14,    -7,  -769,  -769,    12,  -769,  -769,   171,
-     346,  -769,  -769,  -769,  -769,  -769,  -769,  -769,  -769,  -769,
-    -769,  -769,  -769,  -769,  -769,  -769,  -769,   -29,  -769,  -769,
-    -769,  -769,  -769,  -769,  -769,  -769,   -38,  -769,  -536,   -25,
-    -769,  -769,  -769,  -769,  -769,  -769,  -769,  -769,  -769,  -769,
-     -44,  -769,  -769,  -769,  -769,  -769,  -769,  -769,  -769,  -769,
-    -769,  -769,  -769,  -769,  -769,  -769,  -769,  -769,   -41,  -769,
-    -769,  -769,  -769,  -769,  -769,  -769,  -769,  -769,   -50,  -769,
-    -769,  -769,   -52,   358,  -769,  -769,  -769,  -769,  -769,  -769,
-    -769,   -73,  -769,  -769,  -769,  -769,  -769,  -769,  -768,  -769,
-    -769,  -769,   -21,  -769,  -769,  -769,   -24,   375,  -769,  -769,
-    -769,  -769,  -769,  -769,  -769,  -769,  -767,  -769,   -64,  -769,
-     -11,  -769,  -764,  -769,  -769,  -769,  -769,  -769,  -769,  -769,
-     -22,  -769,  -769,  -179,   -61,  -769,  -769,  -769,  -769,  -769,
-      -8,  -769,  -769,  -769,     7,  -769,   376,  -769,   -62,  -769,
-    -769,  -769,  -769,  -769,   -56,  -769,  -769,  -769,  -769,  -769,
-     -13,  -769,  -769,  -769,   -16,  -769,  -769,  -769,    10,  -769,
-     386,  -769,  -769,  -769,  -769,  -769,  -769,  -769,  -769,  -769,
-    -769,  -769,   -12,  -769,  -769,  -769,    -9,   405,  -769,  -769,
-     -54,  -769,   -26,  -769,   -36,  -769,  -769,  -769,     8,  -769,
-    -769,  -769,    14,  -769,   402,    -6,  -769,     5,  -769,     6,
-    -769,   219,  -769,  -769,  -769,  -769,  -769,  -769,  -769,  -769,
-    -769,  -769,  -769,  -769,  -769,  -769,  -769,  -769,  -769,  -761,
-    -769,  -769,  -769,  -769,  -769,    18,  -769,  -769,  -769,  -132,
-    -769,  -769,  -769,  -769,  -769,  -769,  -769,  -769,     2,  -769,
-    -769,  -769,  -769,  -769,  -769,  -769,  -769,   245,   378,  -769,
-    -769,  -769,  -769,  -769,  -769,  -769,  -769,  -769,  -769,  -769,
-    -769,  -769,  -769,  -769,  -769,  -769,  -769,  -769,  -769,  -769,
-    -769,  -769,  -769,  -769,  -769,  -769,  -769,  -769,  -769,  -769,
-    -769,  -769,  -769,  -769,  -769,  -769,   273,   380,  -769,  -769,
-    -769,    -5,  -769,  -769,  -139,  -769,  -769,  -769,  -769,  -769,
-    -769,  -153,  -769,  -769,  -168,  -769,  -769,  -769,  -769,  -769
+    -797,  -797,  -797,  -797,  -797,  -797,  -797,  -797,  -797,  -797,
+    -797,  -797,  -797,  -797,  -797,  -797,   -37,  -797,   104,  -797,
+    -797,  -797,  -797,  -797,  -797,  -797,  -797,  -497,  -797,  -797,
+    -797,   -70,  -797,  -797,  -797,   343,  -797,  -797,  -797,  -797,
+      86,   326,   -47,   -18,   -11,  -797,  -797,     8,  -797,  -797,
+     177,   328,  -797,  -797,  -797,  -797,  -797,  -797,  -797,  -797,
+    -797,  -797,  -797,  -797,  -797,  -797,  -797,  -797,   -64,  -797,
+    -797,  -797,  -797,  -797,  -797,   108,  -797,   -45,  -797,  -570,
+     -29,  -797,  -797,  -797,  -797,  -797,  -797,  -797,  -797,  -797,
+    -797,   -48,  -797,  -797,  -797,  -797,  -797,  -797,  -797,  -797,
+    -797,  -797,  -797,  -797,  -797,  -797,  -797,  -797,  -797,   -55,
+    -797,  -797,  -797,  -797,  -797,  -797,  -797,  -797,  -797,   -54,
+    -797,  -797,  -797,   -56,   349,  -797,  -797,  -797,  -797,  -797,
+    -797,  -797,   -57,  -797,  -797,  -797,  -797,  -797,  -797,  -796,
+    -797,  -797,  -797,   -35,  -797,  -797,  -797,   -20,   389,  -797,
+    -797,  -797,  -797,  -797,  -797,  -797,  -797,  -795,  -797,   -68,
+    -797,   -15,  -797,  -785,  -797,  -797,  -797,  -797,  -797,  -797,
+    -797,   -33,  -797,  -797,  -174,   -65,  -797,  -797,  -797,  -797,
+    -797,   -12,  -797,  -797,  -797,     3,  -797,   385,  -797,   -66,
+    -797,  -797,  -797,  -797,  -797,   -60,  -797,  -797,  -797,  -797,
+    -797,   -17,  -797,  -797,  -797,   -13,  -797,  -797,  -797,     6,
+    -797,   396,  -797,  -797,  -797,  -797,  -797,  -797,  -797,  -797,
+    -797,  -797,  -797,   -28,  -797,  -797,  -797,   -19,   427,  -797,
+    -797,   -58,  -797,   -30,  -797,   -40,  -797,  -797,  -797,     4,
+    -797,  -797,  -797,    10,  -797,   418,   -10,  -797,     1,  -797,
+       2,  -797,   220,  -797,  -797,  -797,  -797,  -797,  -797,  -797,
+    -797,  -797,  -797,  -797,  -797,  -797,  -797,  -797,  -797,  -797,
+    -779,  -797,  -797,  -797,  -797,  -797,    15,  -797,  -797,  -797,
+    -142,  -797,  -797,  -797,  -797,  -797,  -797,  -797,  -797,    -2,
+    -797,  -797,  -797,  -797,  -797,  -797,  -797,  -797,   245,   387,
+    -797,  -797,  -797,  -797,  -797,  -797,  -797,  -797,  -797,  -797,
+    -797,  -797,  -797,  -797,  -797,  -797,  -797,  -797,  -797,  -797,
+    -797,  -797,  -797,  -797,  -797,  -797,  -797,  -797,  -797,  -797,
+    -797,  -797,  -797,  -797,  -797,  -797,  -797,  -797,  -335,   384,
+    -797,  -797,  -797,  -797,  -797,  -797,   275,   391,  -797,  -797,
+    -797,    -7,  -797,  -797,  -144,  -797,  -797,  -797,  -797,  -797,
+    -797,  -158,  -797,  -797,  -173,  -797,  -797,  -797,  -797,  -797
   };
 
   const short int
   Dhcp4Parser::yydefgoto_[] =
   {
-      -1,    14,    15,    16,    17,    18,    19,    20,    21,    22,
-      23,    24,    25,    26,    27,    36,    37,    38,    65,   566,
-      82,    83,    39,    64,    79,    80,   576,   743,   820,   821,
-     655,    41,    66,    91,    92,    93,   337,    43,    67,   127,
-     128,   129,   130,   131,   132,   133,   134,   135,   345,   162,
-     163,    45,    68,   164,   375,   165,   376,   579,   166,   377,
-     582,   167,   136,   352,   137,   346,   636,   637,   638,   758,
-     138,   353,   139,   354,   677,   678,   679,   780,   656,   657,
-     658,   761,   934,   659,   762,   660,   763,   661,   764,   662,
-     663,   409,   664,   665,   666,   667,   668,   669,   670,   671,
-     770,   672,   771,   673,   674,   140,   365,   701,   702,   703,
-     704,   705,   706,   707,   141,   368,   716,   717,   718,   803,
-      59,    75,   287,   288,   289,   422,   290,   423,   142,   369,
-     725,   726,   727,   728,   729,   730,   731,   732,   143,   359,
-     681,   682,   683,   783,    47,    69,   186,   187,   188,   385,
-     189,   381,   190,   382,   191,   383,   192,   386,   193,   390,
-     194,   389,   195,   388,   593,   196,   144,   362,   693,   694,
-     695,   792,   868,   869,   145,   360,    53,    72,   685,   686,
-     687,   786,    55,    73,   252,   253,   254,   255,   256,   257,
-     258,   408,   259,   412,   260,   411,   261,   262,   413,   263,
-     146,   361,   689,   690,   691,   789,    57,    74,   273,   274,
-     275,   276,   277,   417,   278,   279,   280,   281,   198,   384,
-     745,   746,   747,   822,    49,    70,   211,   212,   213,   394,
-     147,   363,   148,   364,   149,   367,   712,   713,   714,   800,
-      51,    71,   228,   229,   230,   150,   349,   151,   350,   152,
-     351,   234,   404,   750,   825,   235,   398,   236,   399,   237,
-     401,   238,   400,   239,   403,   240,   402,   241,   397,   205,
-     391,   751,   153,   366,   709,   710,   797,   890,   891,   892,
-     893,   894,   946,   895,   154,   155,   371,   738,   739,   740,
-     814,   741,   815,   156,   372,    61,    76,   310,   311,   312,
-     313,   427,   314,   428,   315,   316,   430,   317,   318,   319,
-     433,   619,   320,   434,   321,   322,   323,   324,   438,   626,
-     325,   439,   326,   440,   327,   441,    94,   339,    95,   340,
-      96,   341,    97,   338,    63,    77,   329,   330,   331,   444,
-     753,   754,   827,   923,   924,   925,   926,   959,   927,   957,
-     974,   975,   976,   983,   984,   985,   990,   986,   987,   988
+      -1,    15,    16,    17,    18,    19,    20,    21,    22,    23,
+      24,    25,    26,    27,    28,    29,    38,    39,    40,    69,
+     590,    87,    88,    41,    68,    84,    85,   600,   769,   848,
+     849,   341,    43,    70,    96,    97,    98,   350,    45,    71,
+     134,   135,   136,   137,   138,   139,   140,   141,   142,   360,
+     170,   171,    47,    72,   172,   390,   173,   391,   603,   174,
+     392,   606,   175,   143,   367,   144,   361,   662,   663,   664,
+     786,   145,   368,   146,   369,   703,   704,   705,   808,   682,
+     683,   684,   789,   963,   685,   790,   686,   791,   687,   792,
+     688,   689,   424,   690,   691,   692,   693,   694,   695,   696,
+     697,   798,   698,   799,   699,   700,   147,   380,   727,   728,
+     729,   730,   731,   732,   733,   148,   383,   742,   743,   744,
+     831,    61,    79,   295,   296,   297,   437,   298,   438,   149,
+     384,   751,   752,   753,   754,   755,   756,   757,   758,   150,
+     374,   707,   708,   709,   811,    49,    73,   194,   195,   196,
+     400,   197,   396,   198,   397,   199,   398,   200,   401,   201,
+     405,   202,   404,   203,   403,   617,   204,   151,   377,   719,
+     720,   721,   820,   897,   898,   152,   375,    55,    76,   711,
+     712,   713,   814,    57,    77,   260,   261,   262,   263,   264,
+     265,   266,   423,   267,   427,   268,   426,   269,   270,   428,
+     271,   153,   376,   715,   716,   717,   817,    59,    78,   281,
+     282,   283,   284,   285,   432,   286,   287,   288,   289,   206,
+     399,   771,   772,   773,   850,    51,    74,   219,   220,   221,
+     409,   154,   378,   155,   379,   156,   382,   738,   739,   740,
+     828,    53,    75,   236,   237,   238,   157,   364,   158,   365,
+     159,   366,   242,   419,   776,   853,   243,   413,   244,   414,
+     245,   416,   246,   415,   247,   418,   248,   417,   249,   412,
+     213,   406,   777,   160,   381,   735,   736,   825,   919,   920,
+     921,   922,   923,   975,   924,   161,   162,   386,   764,   765,
+     766,   842,   767,   843,   163,   387,    63,    80,   318,   319,
+     320,   321,   442,   322,   443,   323,   324,   445,   325,   326,
+     327,   448,   643,   328,   449,   329,   330,   331,   332,   453,
+     650,   333,   454,   334,   455,   335,   456,    99,   352,   100,
+     353,   101,   354,   164,   358,   359,    67,    82,   342,   343,
+     344,   462,   102,   351,    65,    81,   337,   338,   339,   459,
+     779,   780,   855,   952,   953,   954,   955,   988,   956,   986,
+    1003,  1004,  1005,  1012,  1013,  1014,  1019,  1015,  1016,  1017
   };
 
   const unsigned short int
   Dhcp4Parser::yytable_[] =
   {
-      90,   126,   161,   181,   207,   224,   208,   250,   269,   286,
-     307,   242,   271,    78,   168,   199,   214,   226,   272,   264,
-     282,   594,   308,   675,   863,   864,   182,   598,   867,   251,
-     270,   876,    29,   201,    30,    84,    31,   617,   621,   622,
-     623,   624,   169,   200,   215,   227,    40,   265,   283,   343,
-     309,   284,   285,    28,   344,   183,   197,   210,   225,   209,
-     284,   285,   184,   202,   373,   231,   157,   158,    81,   374,
-     159,   113,   625,   160,   203,   204,   232,   233,   577,   578,
-      42,   185,   101,   102,   103,   104,    44,   639,    46,   102,
-     103,   104,   640,   641,   642,   643,   644,   645,   646,   647,
-     648,   649,   650,   651,   652,   653,   654,    48,   379,   108,
-     109,   110,    89,   380,   170,   171,   172,   244,   114,   589,
-     590,   591,   592,   113,   114,   244,   116,   117,   114,   173,
-      50,   116,   117,   174,   175,   176,   177,   116,   117,   392,
-     206,   116,   117,   178,   393,   795,   179,   120,   796,   618,
-     879,   880,   798,   178,   180,   799,   179,   116,   117,    52,
-      85,   244,   266,   245,   246,   267,   268,   395,    54,    86,
-      87,    88,   396,   116,   117,   828,   863,   864,   829,   424,
-     867,   328,    56,   876,   425,    89,    58,    32,    33,    34,
-      35,   580,   581,    60,    98,   733,   734,   719,   720,   721,
-     722,   723,   724,    99,    62,   100,   101,   102,   103,   104,
-     105,   106,   107,   442,    89,   445,   333,    89,   443,    89,
-     446,   243,   332,   373,   336,    89,   334,   979,   755,    89,
-     980,   981,   982,   108,   109,   110,   111,   112,   445,   223,
-     748,   113,   114,   756,   849,    89,   930,   931,   932,   933,
-     335,   244,   115,   245,   246,   116,   117,   247,   248,   249,
-     342,    89,   347,   116,   117,   118,   119,   696,   697,   698,
-     699,   120,   700,   379,   759,   777,   405,    90,   757,   760,
-     778,   121,   447,   448,   122,   777,   407,   348,   812,   816,
-     779,   123,   124,   813,   817,   125,   442,   777,   392,   944,
-     424,   818,   940,   941,   945,   951,   395,   126,   355,   960,
-     994,   955,   356,   161,   961,   995,   977,   415,   357,   978,
-     358,   370,   378,   387,   406,   168,   181,   410,   414,   207,
-     416,   208,   418,   419,   420,   421,   458,   426,   199,   429,
-     224,   214,   431,    89,   432,   435,   436,   437,   449,   182,
-     250,    89,   226,   169,   450,   269,   201,   451,   452,   271,
-     453,   454,   264,   456,   457,   272,   200,   282,   459,   215,
-     460,   461,   251,   462,   463,   464,   307,   270,   183,   197,
-     227,   465,   210,   470,   209,   184,   202,   466,   308,   467,
-     265,   468,   469,   225,   471,   283,   472,   203,   204,   473,
-     231,   550,   551,   552,   185,   101,   102,   103,   104,   244,
-     474,   232,   233,   475,   476,   477,   309,   478,   479,   480,
-     481,   116,   117,   482,   483,   102,   103,   104,   485,   486,
-     487,   490,   108,   109,   110,   491,   112,   488,   956,   492,
-     493,   114,   244,   494,   495,   496,   497,   498,   499,   500,
-     502,   504,   505,   515,   116,   117,   506,   175,   507,   177,
-     114,   508,   509,   510,   511,   513,   178,   514,   516,   179,
-     517,   518,   521,   116,   117,   613,   525,   180,   519,   526,
-     529,   530,   126,   522,   216,   523,   916,   161,   917,   918,
-     217,   218,   219,   220,   221,   222,   631,   223,   532,   168,
-     528,   535,   536,   540,   541,   531,   533,   735,   307,    89,
-     537,   538,   534,   542,   543,   539,   545,   547,   548,   736,
-     308,   116,   117,   549,   553,   554,   558,   169,     1,     2,
-       3,     4,     5,     6,     7,     8,     9,    10,    11,    12,
-      13,   559,    89,   555,   556,   557,   560,   737,   309,   561,
-     562,   563,   564,   567,   568,    30,   569,   570,   571,   575,
-     583,    89,   291,   292,   293,   294,   295,   296,   297,   298,
-     299,   300,   301,   302,   303,   304,   572,   573,   574,   586,
-     596,   584,   305,   306,   630,   635,   765,   676,   585,   587,
-     588,   680,   595,   597,   599,   684,   688,   600,   601,   692,
-     708,   602,   711,   715,   744,   752,   766,   620,   767,    89,
-     603,   604,   768,   605,   769,   606,   607,   772,   773,   774,
-     775,   776,   608,   782,   781,   609,   785,   784,   787,   610,
-     611,   612,   788,   614,   615,   791,   790,   793,   616,   794,
-     627,   628,   629,   801,   802,   804,   805,   819,   806,   807,
-     808,   809,   810,   811,   824,   837,   823,   830,   832,   833,
-     826,   834,   835,   836,   838,   841,   840,   839,   842,   843,
-     847,   908,   909,   912,   942,   844,   845,   911,   915,   947,
-     943,   846,   901,   902,   903,   904,   905,   906,   929,   935,
-     936,   937,   938,   939,   948,   949,   950,   952,   953,   954,
-     958,   963,   966,   964,   967,   968,   973,   971,   991,   992,
-     970,   993,   996,   565,   632,   972,   455,   181,   998,   997,
-     250,   999,  1001,   269,   634,   489,   857,   271,   865,   199,
-     831,   881,   264,   272,   224,   282,   883,   286,   871,   907,
-     182,   484,   251,   885,   850,   270,   226,   201,   862,   858,
-     735,   899,   848,   882,   878,   900,   207,   200,   208,   851,
-     265,   919,   736,   283,   852,   962,   872,   501,   214,   183,
-     197,   886,   877,   921,   227,   856,   184,   202,   859,   870,
-     854,   866,   527,   920,   884,   860,   873,   225,   203,   204,
-     737,   887,   520,   853,   231,   185,   215,   874,   875,   855,
-     503,   922,   888,   889,   861,   232,   233,   524,   512,   210,
-     898,   209,   914,   913,   897,   749,   896,   965,   910,   742,
-     544,   969,   633,   928,   989,   546,  1000,     0,     0,     0,
+      95,   133,   169,   189,   215,   232,   216,   258,   277,   294,
+     315,   250,   279,   701,   176,   207,   222,   234,   280,   272,
+     290,   618,   316,   474,   892,   893,   190,   622,    89,   259,
+     278,    83,    31,   209,    32,   896,    33,   641,   340,   292,
+     293,   905,   177,   208,   223,   235,   356,   273,   291,  1008,
+     317,   357,  1009,  1010,  1011,   191,   205,   218,   233,   217,
+      42,   823,   192,   210,   824,   239,   251,   103,   123,   124,
+      30,   104,    44,   105,   211,   212,   240,   241,   388,   292,
+     293,   193,   106,   389,   107,   108,   109,   110,   111,   112,
+     113,   114,   826,   165,   166,   827,   252,   167,   253,   254,
+     168,    94,   255,   256,   257,   121,   759,   760,   123,   124,
+     601,   602,   115,   116,   117,   118,   119,   214,   123,   124,
+     120,   121,   394,   645,   646,   647,   648,   395,    46,   856,
+     186,   122,   857,   187,   123,   124,   745,   746,   747,   748,
+     749,   750,   407,   410,   125,   126,   439,   408,   411,   642,
+     127,   440,    48,   123,   124,    90,   457,    94,   649,    50,
+     128,   458,   460,   129,    91,    92,    93,   461,   463,  1006,
+     130,   131,  1007,   464,   132,   463,    52,   892,   893,    86,
+     575,    94,   108,   109,   110,   111,   604,   605,   896,    94,
+      34,    35,    36,    37,   905,   231,   774,    94,    54,    56,
+     252,   274,   253,   254,   275,   276,   120,    94,    58,   115,
+     116,   117,   123,   124,   178,   179,   180,   388,   121,    60,
+      62,   336,   782,    94,   108,   109,   110,   111,    64,   181,
+      66,   123,   124,   182,   183,   184,   185,   252,   878,   460,
+     345,   659,    94,   186,   783,   346,   187,   127,   347,   123,
+     124,   115,   116,   117,   188,   119,   348,   463,   349,   420,
+     121,   252,   784,   109,   110,   111,   394,   722,   723,   724,
+     725,   785,   726,   123,   124,   787,   183,   805,   185,   805,
+     788,   355,   806,   362,   807,   186,    95,   840,   187,   844,
+     457,   421,   841,   363,   845,   846,   188,   805,   121,   407,
+     973,    94,   969,   439,   970,   974,   370,   371,   980,   465,
+     466,   123,   124,   372,   945,   373,   946,   947,   133,   385,
+      94,   410,   224,   393,   169,   402,   984,   425,   225,   226,
+     227,   228,   229,   230,   989,   231,   176,   189,    94,   990,
+     215,  1023,   216,   422,   429,   430,  1024,   431,   436,   207,
+     433,   232,   222,   613,   614,   615,   616,   434,   435,   441,
+     190,   258,    94,   234,   177,   444,   277,   209,   446,   447,
+     279,   450,   451,   272,   452,   468,   280,   208,   290,   467,
+     223,   469,   470,   259,   471,   472,   475,   315,   278,   191,
+     205,   235,   476,   218,   478,   217,   192,   210,   477,   316,
+      94,   273,   480,   481,   233,   479,   291,   482,   211,   212,
+     483,   239,   484,   485,   486,   193,   109,   110,   111,   490,
+     487,   488,   240,   241,   489,   491,   492,   317,   959,   960,
+     961,   962,   493,   572,   573,   574,   494,   495,   496,   497,
+     498,   499,   500,   502,   501,   503,   516,   985,   505,   506,
+     120,   121,   252,   507,   510,   511,   508,   512,   513,   535,
+     514,   515,   517,   518,   123,   124,   519,   520,   522,   524,
+     525,   526,   527,   528,   665,   529,   530,   908,   909,   666,
+     667,   668,   669,   670,   671,   672,   673,   674,   675,   676,
+     677,   678,   679,   680,   531,   533,   534,   536,   537,   538,
+     133,   541,   539,   545,   252,   542,   546,   169,   543,   637,
+     549,   550,   681,   681,   548,   551,   552,   555,   553,   176,
+     554,   556,   560,   557,   558,   559,   561,   761,   315,   123,
+     124,   562,   656,   563,   565,   567,   569,   579,   580,   762,
+     316,   570,   571,   576,   577,   578,   581,   177,   582,   583,
+     584,   585,   586,    94,   587,   588,   591,   592,    32,   593,
+     594,   595,   661,   607,   596,   597,   598,   763,   317,   599,
+     299,   300,   301,   302,   303,   304,   305,   306,   307,   308,
+     309,   310,   311,   312,   610,   620,   608,   609,   611,   612,
+     313,   314,   619,   621,   623,   654,   655,   854,   589,   702,
+     706,   710,   714,   624,   718,    94,   625,   734,   737,   626,
+     627,   628,   741,   644,   770,   629,   778,   793,    94,     1,
+       2,     3,     4,     5,     6,     7,     8,     9,    10,    11,
+      12,    13,    14,   794,   795,   796,   630,   631,   632,   633,
+     634,   635,   636,   638,   639,   640,   797,   651,   652,   653,
+     800,   801,   802,   803,   804,   810,   657,   809,   813,   812,
+     815,   816,   818,   819,   822,   821,   830,   847,   829,   833,
+     832,   834,   835,   836,   837,   838,   839,   852,   865,   851,
+     859,   858,   861,   862,   863,   864,   866,   867,   870,   869,
+     868,   871,   872,   937,   938,   944,   941,   873,   940,   473,
+     976,   978,   971,   972,   874,   977,   987,   875,   979,   992,
+     876,   995,   930,   997,   504,  1000,  1020,   931,  1002,  1021,
+    1022,  1025,   509,   860,   932,   933,   934,   935,   958,   964,
+     965,   966,   967,   968,   981,   681,   982,   983,   681,   996,
+     999,   189,   993,  1001,   258,  1027,  1030,   277,  1026,  1028,
+     886,   279,   894,   207,   660,   910,   272,   280,   232,   290,
+     912,   294,   900,   781,   190,   879,   259,   914,   907,   278,
+     234,   209,   891,   887,   761,   928,   877,   911,   881,   929,
+     215,   208,   216,   936,   273,   948,   762,   291,   547,   906,
+     901,   880,   222,   191,   205,   915,   521,   950,   235,   991,
+     192,   210,   888,   899,   883,   895,   885,   949,   913,   889,
+     902,   233,   211,   212,   763,   916,   540,   882,   239,   193,
+     223,   903,   904,   884,   943,   951,   917,   918,   890,   240,
+     241,   942,   544,   218,   927,   217,   994,   523,   926,   532,
+     775,   925,   939,   768,   564,   998,   658,   568,  1018,   957,
+    1029,   566,     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,   857,     0,
-     865,     0,     0,   881,     0,     0,     0,     0,   883,     0,
-     871,     0,     0,     0,   919,   885,     0,     0,     0,     0,
-     862,   858,     0,     0,     0,   882,   921,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,   920,     0,   872,     0,
-       0,     0,     0,   886,     0,     0,     0,     0,     0,     0,
-     859,   870,     0,   866,   922,     0,   884,   860,   873,     0,
-       0,     0,     0,   887,     0,     0,     0,     0,     0,   874,
-     875,     0,     0,     0,   888,   889,   861
+       0,     0,     0,   886,     0,   894,     0,     0,   910,     0,
+       0,     0,     0,   912,     0,   900,     0,     0,     0,   948,
+     914,     0,     0,     0,     0,   891,   887,     0,     0,     0,
+     911,   950,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,   949,     0,   901,     0,     0,     0,     0,   915,     0,
+       0,     0,     0,     0,     0,   888,   899,     0,   895,   951,
+       0,   913,   889,   902,     0,     0,     0,     0,   916,     0,
+       0,     0,     0,     0,   903,   904,     0,     0,     0,   917,
+     918,   890
   };
 
   const short int
   Dhcp4Parser::yycheck_[] =
   {
-      66,    67,    68,    69,    70,    71,    70,    73,    74,    75,
-      76,    72,    74,    64,    68,    69,    70,    71,    74,    73,
-      74,   498,    76,   559,   792,   792,    69,   504,   792,    73,
-      74,   792,     5,    69,     7,    10,     9,    15,   129,   130,
-     131,   132,    68,    69,    70,    71,     7,    73,    74,     3,
-      76,    99,   100,     0,     8,    69,    69,    70,    71,    70,
-      99,   100,    69,    69,     3,    71,    12,    13,   160,     8,
-      16,    58,   163,    19,    69,    69,    71,    71,    14,    15,
-       7,    69,    23,    24,    25,    26,     7,    30,     7,    24,
-      25,    26,    35,    36,    37,    38,    39,    40,    41,    42,
-      43,    44,    45,    46,    47,    48,    49,     7,     3,    50,
-      51,    52,   160,     8,    55,    56,    57,    60,    59,    78,
-      79,    80,    81,    58,    59,    60,    72,    73,    59,    70,
-       7,    72,    73,    74,    75,    76,    77,    72,    73,     3,
-      71,    72,    73,    84,     8,     3,    87,    88,     6,   127,
-      85,    86,     3,    84,    95,     6,    87,    72,    73,     7,
-     135,    60,    61,    62,    63,    64,    65,     3,     7,   144,
-     145,   146,     8,    72,    73,     3,   944,   944,     6,     3,
-     944,   136,     7,   944,     8,   160,     7,   160,   161,   162,
-     163,    17,    18,     7,    11,   110,   111,   102,   103,   104,
-     105,   106,   107,    20,     7,    22,    23,    24,    25,    26,
-      27,    28,    29,     3,   160,     3,     3,   160,     8,   160,
-       8,    30,     6,     3,     3,   160,     4,   138,     8,   160,
-     141,   142,   143,    50,    51,    52,    53,    54,     3,    96,
-      97,    58,    59,     8,   780,   160,    31,    32,    33,    34,
-       8,    60,    69,    62,    63,    72,    73,    66,    67,    68,
-       4,   160,     4,    72,    73,    82,    83,    89,    90,    91,
-      92,    88,    94,     3,     3,     3,     8,   343,     8,     8,
-       8,    98,   333,   334,   101,     3,     8,     4,     3,     3,
-       8,   108,   109,     8,     8,   112,     3,     3,     3,     3,
-       3,     8,     8,     8,     8,     8,     3,   373,     4,     3,
-       3,     8,     4,   379,     8,     8,     3,     8,     4,     6,
-       4,     4,     4,     4,     3,   379,   392,     4,     4,   395,
-       3,   395,     4,     4,     8,     3,   163,     4,   392,     4,
-     406,   395,     4,   160,     4,     4,     4,     4,   160,   392,
-     416,   160,   406,   379,     4,   421,   392,     4,     4,   421,
-       4,     4,   416,     4,     4,   421,   392,   421,   163,   395,
-       4,     4,   416,     4,     4,     4,   442,   421,   392,   392,
-     406,     4,   395,     4,   395,   392,   392,   161,   442,   161,
-     416,   161,   161,   406,     4,   421,     4,   392,   392,     4,
-     406,   452,   453,   454,   392,    23,    24,    25,    26,    60,
-       4,   406,   406,     4,     4,     4,   442,     4,     4,     4,
-     161,    72,    73,     4,     4,    24,    25,    26,     4,     4,
-       4,     4,    50,    51,    52,     4,    54,   163,   915,     4,
-       4,    59,    60,     4,     4,   161,     4,     4,     4,     4,
-       4,     4,     4,   161,    72,    73,     4,    75,     4,    77,
-      59,     4,     4,     4,     4,     4,    84,     4,     4,    87,
-       4,     4,     4,    72,    73,   526,     4,    95,   163,     4,
-       4,     4,   548,   163,    83,   163,   137,   553,   139,   140,
-      89,    90,    91,    92,    93,    94,   547,    96,     4,   553,
-     163,     4,     4,     4,     4,   161,   161,   573,   574,   160,
-     163,   163,   161,     4,     4,   163,     4,     4,     7,   573,
-     574,    72,    73,     7,     7,     7,     7,   553,   147,   148,
-     149,   150,   151,   152,   153,   154,   155,   156,   157,   158,
-     159,     7,   160,   160,   160,   160,     5,   573,   574,     5,
-       5,     5,     5,   160,     5,     7,     5,     5,     5,     5,
-     160,   160,   113,   114,   115,   116,   117,   118,   119,   120,
-     121,   122,   123,   124,   125,   126,     7,     7,     7,     5,
-       7,   160,   133,   134,     5,    21,     4,     7,   160,   160,
-     160,     7,   160,   160,   160,     7,     7,   160,   160,     7,
-       7,   160,     7,     7,     7,     7,     4,   128,     4,   160,
-     160,   160,     4,   160,     4,   160,   160,     4,     4,     4,
-       4,     4,   160,     3,     6,   160,     3,     6,     6,   160,
-     160,   160,     3,   160,   160,     3,     6,     6,   160,     3,
-     160,   160,   160,     6,     3,     6,     3,   160,     4,     4,
-       4,     4,     4,     4,     3,   163,     6,     4,     4,     4,
-       8,     4,     4,   161,   161,     4,   161,   163,     4,   161,
-     163,     4,     4,     3,     8,   161,   161,     6,     4,     4,
-       8,   161,   161,   161,   161,   161,   161,   161,   160,   160,
-     160,   160,   160,   160,     8,     3,     8,   160,   160,   160,
-       4,     4,     4,   163,   161,     4,     7,     5,     4,     4,
-     160,     4,     4,   474,   548,   160,   343,   783,   161,   163,
-     786,   161,   160,   789,   553,   379,   792,   789,   792,   783,
-     759,   797,   786,   789,   800,   789,   797,   803,   792,   812,
-     783,   373,   786,   797,   782,   789,   800,   783,   792,   792,
-     816,   803,   777,   797,   795,   805,   822,   783,   822,   783,
-     786,   827,   816,   789,   785,   944,   792,   392,   822,   783,
-     783,   797,   794,   827,   800,   791,   783,   783,   792,   792,
-     788,   792,   424,   827,   797,   792,   792,   800,   783,   783,
-     816,   797,   416,   786,   800,   783,   822,   792,   792,   789,
-     395,   827,   797,   797,   792,   800,   800,   421,   406,   822,
-     802,   822,   824,   822,   800,   596,   798,   949,   816,   574,
-     442,   960,   549,   828,   977,   445,   994,    -1,    -1,    -1,
+      70,    71,    72,    73,    74,    75,    74,    77,    78,    79,
+      80,    76,    78,   583,    72,    73,    74,    75,    78,    77,
+      78,   518,    80,   358,   820,   820,    73,   524,    10,    77,
+      78,    68,     5,    73,     7,   820,     9,    17,    12,   101,
+     102,   820,    72,    73,    74,    75,     3,    77,    78,   140,
+      80,     8,   143,   144,   145,    73,    73,    74,    75,    74,
+       7,     3,    73,    73,     6,    75,    32,     7,    74,    75,
+       0,    11,     7,    13,    73,    73,    75,    75,     3,   101,
+     102,    73,    22,     8,    24,    25,    26,    27,    28,    29,
+      30,    31,     3,    14,    15,     6,    62,    18,    64,    65,
+      21,   163,    68,    69,    70,    61,   112,   113,    74,    75,
+      16,    17,    52,    53,    54,    55,    56,    73,    74,    75,
+      60,    61,     3,   131,   132,   133,   134,     8,     7,     3,
+      86,    71,     6,    89,    74,    75,   104,   105,   106,   107,
+     108,   109,     3,     3,    84,    85,     3,     8,     8,   129,
+      90,     8,     7,    74,    75,   137,     3,   163,   166,     7,
+     100,     8,     3,   103,   146,   147,   148,     8,     3,     3,
+     110,   111,     6,     8,   114,     3,     7,   973,   973,   163,
+       8,   163,    25,    26,    27,    28,    19,    20,   973,   163,
+     163,   164,   165,   166,   973,    98,    99,   163,     7,     7,
+      62,    63,    64,    65,    66,    67,    60,   163,     7,    52,
+      53,    54,    74,    75,    57,    58,    59,     3,    61,     7,
+       7,   138,     8,   163,    25,    26,    27,    28,     7,    72,
+       7,    74,    75,    76,    77,    78,    79,    62,   808,     3,
+       6,   576,   163,    86,     8,     3,    89,    90,     4,    74,
+      75,    52,    53,    54,    97,    56,     8,     3,     3,     8,
+      61,    62,     8,    26,    27,    28,     3,    91,    92,    93,
+      94,     8,    96,    74,    75,     3,    77,     3,    79,     3,
+       8,     4,     8,     4,     8,    86,   356,     3,    89,     3,
+       3,     3,     8,     4,     8,     8,    97,     3,    61,     3,
+       3,   163,     8,     3,     8,     8,     4,     4,     8,   346,
+     347,    74,    75,     4,   139,     4,   141,   142,   388,     4,
+     163,     3,    85,     4,   394,     4,     8,     4,    91,    92,
+      93,    94,    95,    96,     3,    98,   394,   407,   163,     8,
+     410,     3,   410,     8,     4,     8,     8,     3,     3,   407,
+       4,   421,   410,    80,    81,    82,    83,     4,     8,     4,
+     407,   431,   163,   421,   394,     4,   436,   407,     4,     4,
+     436,     4,     4,   431,     4,     4,   436,   407,   436,   163,
+     410,     4,     4,   431,     4,     4,     4,   457,   436,   407,
+     407,   421,     4,   410,   166,   410,   407,   407,     4,   457,
+     163,   431,     4,     4,   421,   166,   436,     4,   407,   407,
+       4,   421,     4,     4,   164,   407,    26,    27,    28,     4,
+     164,   164,   421,   421,   164,     4,     4,   457,    33,    34,
+      35,    36,     4,   470,   471,   472,     4,     4,     4,     4,
+       4,     4,     4,     4,   164,     4,   164,   944,     4,     4,
+      60,    61,    62,     4,     4,     4,   166,     4,     4,   164,
+       4,     4,     4,     4,    74,    75,     4,     4,     4,     4,
+       4,     4,     4,     4,    32,     4,     4,    87,    88,    37,
+      38,    39,    40,    41,    42,    43,    44,    45,    46,    47,
+      48,    49,    50,    51,     4,     4,     4,     4,     4,     4,
+     570,     4,   166,     4,    62,   166,     4,   577,   166,   546,
+       4,     4,   582,   583,   166,   164,     4,     4,   164,   577,
+     164,     4,     4,   166,   166,   166,     4,   597,   598,    74,
+      75,     4,   569,     4,     4,     4,     4,   163,   163,   597,
+     598,     7,     7,     7,     7,     7,   163,   577,     7,     7,
+       5,     5,     5,   163,     5,     5,   163,     5,     7,     5,
+       5,     5,    23,   163,     7,     7,     7,   597,   598,     5,
+     115,   116,   117,   118,   119,   120,   121,   122,   123,   124,
+     125,   126,   127,   128,     5,     7,   163,   163,   163,   163,
+     135,   136,   163,   163,   163,     5,     5,     8,   494,     7,
+       7,     7,     7,   163,     7,   163,   163,     7,     7,   163,
+     163,   163,     7,   130,     7,   163,     7,     4,   163,   149,
+     150,   151,   152,   153,   154,   155,   156,   157,   158,   159,
+     160,   161,   162,     4,     4,     4,   163,   163,   163,   163,
+     163,   163,   163,   163,   163,   163,     4,   163,   163,   163,
+       4,     4,     4,     4,     4,     3,   570,     6,     3,     6,
+       6,     3,     6,     3,     3,     6,     3,   163,     6,     3,
+       6,     4,     4,     4,     4,     4,     4,     3,   164,     6,
+       4,     6,     4,     4,     4,     4,   166,   164,     4,   164,
+     166,     4,   164,     4,     4,     4,     3,   164,     6,   356,
+       4,     3,     8,     8,   164,     8,     4,   164,     8,     4,
+     166,     4,   164,     4,   388,     5,     4,   164,     7,     4,
+       4,     4,   394,   787,   164,   164,   164,   164,   163,   163,
+     163,   163,   163,   163,   163,   805,   163,   163,   808,   164,
+     163,   811,   166,   163,   814,   164,   163,   817,   166,   164,
+     820,   817,   820,   811,   577,   825,   814,   817,   828,   817,
+     825,   831,   820,   655,   811,   810,   814,   825,   823,   817,
+     828,   811,   820,   820,   844,   831,   805,   825,   813,   833,
+     850,   811,   850,   840,   814,   855,   844,   817,   439,   822,
+     820,   811,   850,   811,   811,   825,   407,   855,   828,   973,
+     811,   811,   820,   820,   816,   820,   819,   855,   825,   820,
+     820,   828,   811,   811,   844,   825,   431,   814,   828,   811,
+     850,   820,   820,   817,   852,   855,   825,   825,   820,   828,
+     828,   850,   436,   850,   830,   850,   978,   410,   828,   421,
+     620,   826,   844,   598,   457,   989,   571,   463,  1006,   856,
+    1023,   460,    -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,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   944,    -1,
-     944,    -1,    -1,   949,    -1,    -1,    -1,    -1,   949,    -1,
-     944,    -1,    -1,    -1,   960,   949,    -1,    -1,    -1,    -1,
-     944,   944,    -1,    -1,    -1,   949,   960,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   960,    -1,   944,    -1,
-      -1,    -1,    -1,   949,    -1,    -1,    -1,    -1,    -1,    -1,
-     944,   944,    -1,   944,   960,    -1,   949,   944,   944,    -1,
-      -1,    -1,    -1,   949,    -1,    -1,    -1,    -1,    -1,   944,
-     944,    -1,    -1,    -1,   949,   949,   944
+      -1,    -1,    -1,   973,    -1,   973,    -1,    -1,   978,    -1,
+      -1,    -1,    -1,   978,    -1,   973,    -1,    -1,    -1,   989,
+     978,    -1,    -1,    -1,    -1,   973,   973,    -1,    -1,    -1,
+     978,   989,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,   989,    -1,   973,    -1,    -1,    -1,    -1,   978,    -1,
+      -1,    -1,    -1,    -1,    -1,   973,   973,    -1,   973,   989,
+      -1,   978,   973,   973,    -1,    -1,    -1,    -1,   978,    -1,
+      -1,    -1,    -1,    -1,   973,   973,    -1,    -1,    -1,   978,
+     978,   973
   };
 
   const unsigned short int
   Dhcp4Parser::yystos_[] =
   {
-       0,   147,   148,   149,   150,   151,   152,   153,   154,   155,
-     156,   157,   158,   159,   165,   166,   167,   168,   169,   170,
-     171,   172,   173,   174,   175,   176,   177,   178,     0,     5,
-       7,     9,   160,   161,   162,   163,   179,   180,   181,   186,
-       7,   195,     7,   201,     7,   215,     7,   308,     7,   388,
-       7,   404,     7,   340,     7,   346,     7,   370,     7,   284,
-       7,   459,     7,   498,   187,   182,   196,   202,   216,   309,
-     389,   405,   341,   347,   371,   285,   460,   499,   179,   188,
-     189,   160,   184,   185,    10,   135,   144,   145,   146,   160,
-     194,   197,   198,   199,   490,   492,   494,   496,    11,    20,
-      22,    23,    24,    25,    26,    27,    28,    29,    50,    51,
-      52,    53,    54,    58,    59,    69,    72,    73,    82,    83,
-      88,    98,   101,   108,   109,   112,   194,   203,   204,   205,
-     206,   207,   208,   209,   210,   211,   226,   228,   234,   236,
-     269,   278,   292,   302,   330,   338,   364,   394,   396,   398,
-     409,   411,   413,   436,   448,   449,   457,    12,    13,    16,
-      19,   194,   213,   214,   217,   219,   222,   225,   394,   396,
-      55,    56,    57,    70,    74,    75,    76,    77,    84,    87,
-      95,   194,   205,   206,   207,   210,   310,   311,   312,   314,
-     316,   318,   320,   322,   324,   326,   329,   364,   382,   394,
-     396,   398,   409,   411,   413,   433,    71,   194,   322,   324,
-     364,   390,   391,   392,   394,   396,    83,    89,    90,    91,
-      92,    93,    94,    96,   194,   364,   394,   396,   406,   407,
-     408,   409,   411,   413,   415,   419,   421,   423,   425,   427,
-     429,   431,   338,    30,    60,    62,    63,    66,    67,    68,
-     194,   254,   348,   349,   350,   351,   352,   353,   354,   356,
-     358,   360,   361,   363,   394,   396,    61,    64,    65,   194,
-     254,   352,   358,   372,   373,   374,   375,   376,   378,   379,
-     380,   381,   394,   396,    99,   100,   194,   286,   287,   288,
-     290,   113,   114,   115,   116,   117,   118,   119,   120,   121,
-     122,   123,   124,   125,   126,   133,   134,   194,   394,   396,
-     461,   462,   463,   464,   466,   468,   469,   471,   472,   473,
-     476,   478,   479,   480,   481,   484,   486,   488,   136,   500,
-     501,   502,     6,     3,     4,     8,     3,   200,   497,   491,
-     493,   495,     4,     3,     8,   212,   229,     4,     4,   410,
-     412,   414,   227,   235,   237,     4,     4,     4,     4,   303,
-     339,   365,   331,   395,   397,   270,   437,   399,   279,   293,
-       4,   450,   458,     3,     8,   218,   220,   223,     4,     3,
-       8,   315,   317,   319,   383,   313,   321,     4,   327,   325,
-     323,   434,     3,     8,   393,     3,     8,   432,   420,   422,
-     426,   424,   430,   428,   416,     8,     3,     8,   355,   255,
-       4,   359,   357,   362,     4,     8,     3,   377,     4,     4,
-       8,     3,   289,   291,     3,     8,     4,   465,   467,     4,
-     470,     4,     4,   474,   477,     4,     4,     4,   482,   485,
-     487,   489,     3,     8,   503,     3,     8,   179,   179,   160,
-       4,     4,     4,     4,     4,   198,     4,     4,   163,   163,
-       4,     4,     4,     4,     4,     4,   161,   161,   161,   161,
+       0,   149,   150,   151,   152,   153,   154,   155,   156,   157,
+     158,   159,   160,   161,   162,   168,   169,   170,   171,   172,
+     173,   174,   175,   176,   177,   178,   179,   180,   181,   182,
+       0,     5,     7,     9,   163,   164,   165,   166,   183,   184,
+     185,   190,     7,   199,     7,   205,     7,   219,     7,   312,
+       7,   392,     7,   408,     7,   344,     7,   350,     7,   374,
+       7,   288,     7,   463,     7,   511,     7,   503,   191,   186,
+     200,   206,   220,   313,   393,   409,   345,   351,   375,   289,
+     464,   512,   504,   183,   192,   193,   163,   188,   189,    10,
+     137,   146,   147,   148,   163,   198,   201,   202,   203,   494,
+     496,   498,   509,     7,    11,    13,    22,    24,    25,    26,
+      27,    28,    29,    30,    31,    52,    53,    54,    55,    56,
+      60,    61,    71,    74,    75,    84,    85,    90,   100,   103,
+     110,   111,   114,   198,   207,   208,   209,   210,   211,   212,
+     213,   214,   215,   230,   232,   238,   240,   273,   282,   296,
+     306,   334,   342,   368,   398,   400,   402,   413,   415,   417,
+     440,   452,   453,   461,   500,    14,    15,    18,    21,   198,
+     217,   218,   221,   223,   226,   229,   398,   400,    57,    58,
+      59,    72,    76,    77,    78,    79,    86,    89,    97,   198,
+     209,   210,   211,   214,   314,   315,   316,   318,   320,   322,
+     324,   326,   328,   330,   333,   368,   386,   398,   400,   402,
+     413,   415,   417,   437,    73,   198,   326,   328,   368,   394,
+     395,   396,   398,   400,    85,    91,    92,    93,    94,    95,
+      96,    98,   198,   368,   398,   400,   410,   411,   412,   413,
+     415,   417,   419,   423,   425,   427,   429,   431,   433,   435,
+     342,    32,    62,    64,    65,    68,    69,    70,   198,   258,
+     352,   353,   354,   355,   356,   357,   358,   360,   362,   364,
+     365,   367,   398,   400,    63,    66,    67,   198,   258,   356,
+     362,   376,   377,   378,   379,   380,   382,   383,   384,   385,
+     398,   400,   101,   102,   198,   290,   291,   292,   294,   115,
+     116,   117,   118,   119,   120,   121,   122,   123,   124,   125,
+     126,   127,   128,   135,   136,   198,   398,   400,   465,   466,
+     467,   468,   470,   472,   473,   475,   476,   477,   480,   482,
+     483,   484,   485,   488,   490,   492,   138,   513,   514,   515,
+      12,   198,   505,   506,   507,     6,     3,     4,     8,     3,
+     204,   510,   495,   497,   499,     4,     3,     8,   501,   502,
+     216,   233,     4,     4,   414,   416,   418,   231,   239,   241,
+       4,     4,     4,     4,   307,   343,   369,   335,   399,   401,
+     274,   441,   403,   283,   297,     4,   454,   462,     3,     8,
+     222,   224,   227,     4,     3,     8,   319,   321,   323,   387,
+     317,   325,     4,   331,   329,   327,   438,     3,     8,   397,
+       3,     8,   436,   424,   426,   430,   428,   434,   432,   420,
+       8,     3,     8,   359,   259,     4,   363,   361,   366,     4,
+       8,     3,   381,     4,     4,     8,     3,   293,   295,     3,
+       8,     4,   469,   471,     4,   474,     4,     4,   478,   481,
+       4,     4,     4,   486,   489,   491,   493,     3,     8,   516,
+       3,     8,   508,     3,     8,   183,   183,   163,     4,     4,
+       4,     4,     4,   202,   505,     4,     4,     4,   166,   166,
+       4,     4,     4,     4,     4,     4,   164,   164,   164,   164,
        4,     4,     4,     4,     4,     4,     4,     4,     4,     4,
-       4,   161,     4,     4,   204,     4,     4,     4,   163,   214,
-       4,     4,     4,     4,     4,     4,   161,     4,     4,     4,
-       4,   311,     4,   391,     4,     4,     4,     4,     4,     4,
-       4,     4,   408,     4,     4,   161,     4,     4,     4,   163,
-     350,     4,   163,   163,   374,     4,     4,   287,   163,     4,
-       4,   161,     4,   161,   161,     4,     4,   163,   163,   163,
-       4,     4,     4,     4,   462,     4,   501,     4,     7,     7,
-     179,   179,   179,     7,     7,   160,   160,   160,     7,     7,
-       5,     5,     5,     5,     5,   181,   183,   160,     5,     5,
-       5,     5,     7,     7,     7,     5,   190,    14,    15,   221,
-      17,    18,   224,   160,   160,   160,     5,   160,   160,    78,
-      79,    80,    81,   328,   190,   160,     7,   160,   190,   160,
-     160,   160,   160,   160,   160,   160,   160,   160,   160,   160,
-     160,   160,   160,   179,   160,   160,   160,    15,   127,   475,
-     128,   129,   130,   131,   132,   163,   483,   160,   160,   160,
-       5,   179,   203,   500,   213,    21,   230,   231,   232,    30,
-      35,    36,    37,    38,    39,    40,    41,    42,    43,    44,
-      45,    46,    47,    48,    49,   194,   242,   243,   244,   247,
-     249,   251,   253,   254,   256,   257,   258,   259,   260,   261,
-     262,   263,   265,   267,   268,   242,     7,   238,   239,   240,
-       7,   304,   305,   306,     7,   342,   343,   344,     7,   366,
-     367,   368,     7,   332,   333,   334,    89,    90,    91,    92,
-      94,   271,   272,   273,   274,   275,   276,   277,     7,   438,
-     439,     7,   400,   401,   402,     7,   280,   281,   282,   102,
-     103,   104,   105,   106,   107,   294,   295,   296,   297,   298,
-     299,   300,   301,   110,   111,   194,   394,   396,   451,   452,
-     453,   455,   461,   191,     7,   384,   385,   386,    97,   415,
-     417,   435,     7,   504,   505,     8,     8,     8,   233,     3,
-       8,   245,   248,   250,   252,     4,     4,     4,     4,     4,
-     264,   266,     4,     4,     4,     4,     4,     3,     8,     8,
-     241,     6,     3,   307,     6,     3,   345,     6,     3,   369,
-       6,     3,   335,     6,     3,     3,     6,   440,     3,     6,
-     403,     6,     3,   283,     6,     3,     4,     4,     4,     4,
-       4,     4,     3,     8,   454,   456,     3,     8,     8,   160,
-     192,   193,   387,     6,     3,   418,     8,   506,     3,     6,
-       4,   231,     4,     4,     4,     4,   161,   163,   161,   163,
-     161,     4,     4,   161,   161,   161,   161,   163,   243,   242,
-     240,   310,   306,   348,   344,   372,   368,   194,   205,   206,
-     207,   210,   254,   302,   320,   322,   324,   326,   336,   337,
-     364,   394,   396,   409,   411,   413,   433,   334,   272,    85,
-      86,   194,   254,   338,   364,   394,   396,   409,   411,   413,
-     441,   442,   443,   444,   445,   447,   439,   406,   402,   286,
-     282,   161,   161,   161,   161,   161,   161,   295,     4,     4,
-     452,     6,     3,   390,   386,     4,   137,   139,   140,   194,
-     254,   394,   396,   507,   508,   509,   510,   512,   505,   160,
-      31,    32,    33,    34,   246,   160,   160,   160,   160,   160,
-       8,     8,     8,     8,     3,     8,   446,     4,     8,     3,
-       8,     8,   160,   160,   160,     8,   190,   513,     4,   511,
-       3,     8,   337,     4,   163,   443,     4,   161,     4,   508,
-     160,     5,   160,     7,   514,   515,   516,     3,     6,   138,
-     141,   142,   143,   517,   518,   519,   521,   522,   523,   515,
-     520,     4,     4,     4,     3,     8,     4,   163,   161,   161,
-     518,   160
+       4,   164,     4,     4,   208,     4,     4,     4,   166,   218,
+       4,     4,     4,     4,     4,     4,   164,     4,     4,     4,
+       4,   315,     4,   395,     4,     4,     4,     4,     4,     4,
+       4,     4,   412,     4,     4,   164,     4,     4,     4,   166,
+     354,     4,   166,   166,   378,     4,     4,   291,   166,     4,
+       4,   164,     4,   164,   164,     4,     4,   166,   166,   166,
+       4,     4,     4,     4,   466,     4,   514,     4,   506,     4,
+       7,     7,   183,   183,   183,     8,     7,     7,     7,   163,
+     163,   163,     7,     7,     5,     5,     5,     5,     5,   185,
+     187,   163,     5,     5,     5,     5,     7,     7,     7,     5,
+     194,    16,    17,   225,    19,    20,   228,   163,   163,   163,
+       5,   163,   163,    80,    81,    82,    83,   332,   194,   163,
+       7,   163,   194,   163,   163,   163,   163,   163,   163,   163,
+     163,   163,   163,   163,   163,   163,   163,   183,   163,   163,
+     163,    17,   129,   479,   130,   131,   132,   133,   134,   166,
+     487,   163,   163,   163,     5,     5,   183,   207,   513,   505,
+     217,    23,   234,   235,   236,    32,    37,    38,    39,    40,
+      41,    42,    43,    44,    45,    46,    47,    48,    49,    50,
+      51,   198,   246,   247,   248,   251,   253,   255,   257,   258,
+     260,   261,   262,   263,   264,   265,   266,   267,   269,   271,
+     272,   246,     7,   242,   243,   244,     7,   308,   309,   310,
+       7,   346,   347,   348,     7,   370,   371,   372,     7,   336,
+     337,   338,    91,    92,    93,    94,    96,   275,   276,   277,
+     278,   279,   280,   281,     7,   442,   443,     7,   404,   405,
+     406,     7,   284,   285,   286,   104,   105,   106,   107,   108,
+     109,   298,   299,   300,   301,   302,   303,   304,   305,   112,
+     113,   198,   398,   400,   455,   456,   457,   459,   465,   195,
+       7,   388,   389,   390,    99,   419,   421,   439,     7,   517,
+     518,   242,     8,     8,     8,     8,   237,     3,     8,   249,
+     252,   254,   256,     4,     4,     4,     4,     4,   268,   270,
+       4,     4,     4,     4,     4,     3,     8,     8,   245,     6,
+       3,   311,     6,     3,   349,     6,     3,   373,     6,     3,
+     339,     6,     3,     3,     6,   444,     3,     6,   407,     6,
+       3,   287,     6,     3,     4,     4,     4,     4,     4,     4,
+       3,     8,   458,   460,     3,     8,     8,   163,   196,   197,
+     391,     6,     3,   422,     8,   519,     3,     6,     6,     4,
+     235,     4,     4,     4,     4,   164,   166,   164,   166,   164,
+       4,     4,   164,   164,   164,   164,   166,   247,   246,   244,
+     314,   310,   352,   348,   376,   372,   198,   209,   210,   211,
+     214,   258,   306,   324,   326,   328,   330,   340,   341,   368,
+     398,   400,   413,   415,   417,   437,   338,   276,    87,    88,
+     198,   258,   342,   368,   398,   400,   413,   415,   417,   445,
+     446,   447,   448,   449,   451,   443,   410,   406,   290,   286,
+     164,   164,   164,   164,   164,   164,   299,     4,     4,   456,
+       6,     3,   394,   390,     4,   139,   141,   142,   198,   258,
+     398,   400,   520,   521,   522,   523,   525,   518,   163,    33,
+      34,    35,    36,   250,   163,   163,   163,   163,   163,     8,
+       8,     8,     8,     3,     8,   450,     4,     8,     3,     8,
+       8,   163,   163,   163,     8,   194,   526,     4,   524,     3,
+       8,   341,     4,   166,   447,     4,   164,     4,   521,   163,
+       5,   163,     7,   527,   528,   529,     3,     6,   140,   143,
+     144,   145,   530,   531,   532,   534,   535,   536,   528,   533,
+       4,     4,     4,     3,     8,     4,   166,   164,   164,   531,
+     163
   };
 
   const unsigned short int
   Dhcp4Parser::yyr1_[] =
   {
-       0,   164,   166,   165,   167,   165,   168,   165,   169,   165,
-     170,   165,   171,   165,   172,   165,   173,   165,   174,   165,
-     175,   165,   176,   165,   177,   165,   178,   165,   179,   179,
-     179,   179,   179,   179,   179,   180,   182,   181,   183,   184,
-     184,   185,   185,   187,   186,   188,   188,   189,   189,   191,
-     190,   192,   192,   193,   193,   194,   196,   195,   197,   197,
-     198,   198,   198,   198,   198,   198,   200,   199,   202,   201,
-     203,   203,   204,   204,   204,   204,   204,   204,   204,   204,
-     204,   204,   204,   204,   204,   204,   204,   204,   204,   204,
-     204,   204,   204,   204,   204,   204,   204,   204,   204,   204,
-     204,   205,   206,   207,   208,   209,   210,   212,   211,   213,
-     213,   214,   214,   214,   214,   214,   214,   214,   216,   215,
-     218,   217,   220,   219,   221,   221,   223,   222,   224,   224,
-     225,   227,   226,   229,   228,   230,   230,   231,   233,   232,
-     235,   234,   237,   236,   238,   238,   239,   239,   241,   240,
-     242,   242,   243,   243,   243,   243,   243,   243,   243,   243,
-     243,   243,   243,   243,   243,   243,   243,   243,   243,   243,
-     245,   244,   246,   246,   246,   246,   248,   247,   250,   249,
-     252,   251,   253,   255,   254,   256,   257,   258,   259,   260,
-     261,   262,   264,   263,   266,   265,   267,   268,   270,   269,
-     271,   271,   272,   272,   272,   272,   272,   273,   274,   275,
-     276,   277,   279,   278,   280,   280,   281,   281,   283,   282,
-     285,   284,   286,   286,   286,   287,   287,   289,   288,   291,
-     290,   293,   292,   294,   294,   295,   295,   295,   295,   295,
-     295,   296,   297,   298,   299,   300,   301,   303,   302,   304,
-     304,   305,   305,   307,   306,   309,   308,   310,   310,   311,
-     311,   311,   311,   311,   311,   311,   311,   311,   311,   311,
-     311,   311,   311,   311,   311,   311,   311,   311,   311,   311,
-     311,   311,   313,   312,   315,   314,   317,   316,   319,   318,
-     321,   320,   323,   322,   325,   324,   327,   326,   328,   328,
-     328,   328,   329,   331,   330,   332,   332,   333,   333,   335,
-     334,   336,   336,   337,   337,   337,   337,   337,   337,   337,
-     337,   337,   337,   337,   337,   337,   337,   337,   337,   337,
-     337,   339,   338,   341,   340,   342,   342,   343,   343,   345,
-     344,   347,   346,   348,   348,   349,   349,   350,   350,   350,
-     350,   350,   350,   350,   350,   350,   350,   351,   352,   353,
-     355,   354,   357,   356,   359,   358,   360,   362,   361,   363,
-     365,   364,   366,   366,   367,   367,   369,   368,   371,   370,
-     372,   372,   373,   373,   374,   374,   374,   374,   374,   374,
-     374,   374,   374,   375,   377,   376,   378,   379,   380,   381,
-     383,   382,   384,   384,   385,   385,   387,   386,   389,   388,
-     390,   390,   391,   391,   391,   391,   391,   391,   391,   393,
-     392,   395,   394,   397,   396,   399,   398,   400,   400,   401,
-     401,   403,   402,   405,   404,   406,   406,   407,   407,   408,
-     408,   408,   408,   408,   408,   408,   408,   408,   408,   408,
-     408,   408,   408,   408,   410,   409,   412,   411,   414,   413,
-     416,   415,   418,   417,   420,   419,   422,   421,   424,   423,
-     426,   425,   428,   427,   430,   429,   432,   431,   434,   433,
-     435,   435,   437,   436,   438,   438,   440,   439,   441,   441,
-     442,   442,   443,   443,   443,   443,   443,   443,   443,   443,
-     443,   443,   443,   444,   446,   445,   447,   448,   450,   449,
-     451,   451,   452,   452,   452,   452,   452,   454,   453,   456,
-     455,   458,   457,   460,   459,   461,   461,   462,   462,   462,
-     462,   462,   462,   462,   462,   462,   462,   462,   462,   462,
-     462,   462,   462,   462,   462,   462,   463,   465,   464,   467,
-     466,   468,   470,   469,   471,   472,   474,   473,   475,   475,
-     477,   476,   478,   479,   480,   482,   481,   483,   483,   483,
-     483,   483,   485,   484,   487,   486,   489,   488,   491,   490,
-     493,   492,   495,   494,   497,   496,   499,   498,   500,   500,
-     501,   503,   502,   504,   504,   506,   505,   507,   507,   508,
-     508,   508,   508,   508,   508,   508,   509,   511,   510,   513,
-     512,   514,   514,   516,   515,   517,   517,   518,   518,   518,
-     518,   520,   519,   521,   522,   523
+       0,   167,   169,   168,   170,   168,   171,   168,   172,   168,
+     173,   168,   174,   168,   175,   168,   176,   168,   177,   168,
+     178,   168,   179,   168,   180,   168,   181,   168,   182,   168,
+     183,   183,   183,   183,   183,   183,   183,   184,   186,   185,
+     187,   188,   188,   189,   189,   191,   190,   192,   192,   193,
+     193,   195,   194,   196,   196,   197,   197,   198,   200,   199,
+     201,   201,   202,   202,   202,   202,   202,   202,   204,   203,
+     206,   205,   207,   207,   208,   208,   208,   208,   208,   208,
+     208,   208,   208,   208,   208,   208,   208,   208,   208,   208,
+     208,   208,   208,   208,   208,   208,   208,   208,   208,   208,
+     208,   208,   208,   208,   209,   210,   211,   212,   213,   214,
+     216,   215,   217,   217,   218,   218,   218,   218,   218,   218,
+     218,   220,   219,   222,   221,   224,   223,   225,   225,   227,
+     226,   228,   228,   229,   231,   230,   233,   232,   234,   234,
+     235,   237,   236,   239,   238,   241,   240,   242,   242,   243,
+     243,   245,   244,   246,   246,   247,   247,   247,   247,   247,
+     247,   247,   247,   247,   247,   247,   247,   247,   247,   247,
+     247,   247,   247,   249,   248,   250,   250,   250,   250,   252,
+     251,   254,   253,   256,   255,   257,   259,   258,   260,   261,
+     262,   263,   264,   265,   266,   268,   267,   270,   269,   271,
+     272,   274,   273,   275,   275,   276,   276,   276,   276,   276,
+     277,   278,   279,   280,   281,   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,   315,   315,   315,   317,   316,   319,   318,   321,
+     320,   323,   322,   325,   324,   327,   326,   329,   328,   331,
+     330,   332,   332,   332,   332,   333,   335,   334,   336,   336,
+     337,   337,   339,   338,   340,   340,   341,   341,   341,   341,
+     341,   341,   341,   341,   341,   341,   341,   341,   341,   341,
+     341,   341,   341,   341,   343,   342,   345,   344,   346,   346,
+     347,   347,   349,   348,   351,   350,   352,   352,   353,   353,
+     354,   354,   354,   354,   354,   354,   354,   354,   354,   354,
+     355,   356,   357,   359,   358,   361,   360,   363,   362,   364,
+     366,   365,   367,   369,   368,   370,   370,   371,   371,   373,
+     372,   375,   374,   376,   376,   377,   377,   378,   378,   378,
+     378,   378,   378,   378,   378,   378,   379,   381,   380,   382,
+     383,   384,   385,   387,   386,   388,   388,   389,   389,   391,
+     390,   393,   392,   394,   394,   395,   395,   395,   395,   395,
+     395,   395,   397,   396,   399,   398,   401,   400,   403,   402,
+     404,   404,   405,   405,   407,   406,   409,   408,   410,   410,
+     411,   411,   412,   412,   412,   412,   412,   412,   412,   412,
+     412,   412,   412,   412,   412,   412,   412,   414,   413,   416,
+     415,   418,   417,   420,   419,   422,   421,   424,   423,   426,
+     425,   428,   427,   430,   429,   432,   431,   434,   433,   436,
+     435,   438,   437,   439,   439,   441,   440,   442,   442,   444,
+     443,   445,   445,   446,   446,   447,   447,   447,   447,   447,
+     447,   447,   447,   447,   447,   447,   448,   450,   449,   451,
+     452,   454,   453,   455,   455,   456,   456,   456,   456,   456,
+     458,   457,   460,   459,   462,   461,   464,   463,   465,   465,
+     466,   466,   466,   466,   466,   466,   466,   466,   466,   466,
+     466,   466,   466,   466,   466,   466,   466,   466,   466,   467,
+     469,   468,   471,   470,   472,   474,   473,   475,   476,   478,
+     477,   479,   479,   481,   480,   482,   483,   484,   486,   485,
+     487,   487,   487,   487,   487,   489,   488,   491,   490,   493,
+     492,   495,   494,   497,   496,   499,   498,   501,   500,   502,
+     500,   504,   503,   505,   505,   506,   506,   508,   507,   510,
+     509,   512,   511,   513,   513,   514,   516,   515,   517,   517,
+     519,   518,   520,   520,   521,   521,   521,   521,   521,   521,
+     521,   522,   524,   523,   526,   525,   527,   527,   529,   528,
+     530,   530,   531,   531,   531,   531,   533,   532,   534,   535,
+     536
   };
 
   const unsigned char
@@ -4447,67 +4526,69 @@ 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,     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,
+       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,     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,     3,     3,     3,     3,     3,     3,     0,     6,     1,
-       3,     1,     1,     1,     1,     1,     1,     1,     0,     4,
-       0,     4,     0,     4,     1,     1,     0,     4,     1,     1,
-       3,     0,     6,     0,     6,     1,     3,     1,     0,     4,
-       0,     6,     0,     6,     0,     1,     1,     3,     0,     4,
-       1,     3,     1,     1,     1,     1,     1,     1,     1,     1,
+       1,     1,     1,     1,     3,     3,     3,     3,     3,     3,
+       0,     6,     1,     3,     1,     1,     1,     1,     1,     1,
+       1,     0,     4,     0,     4,     0,     4,     1,     1,     0,
+       4,     1,     1,     3,     0,     6,     0,     6,     1,     3,
+       1,     0,     4,     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,     1,
-       0,     4,     1,     1,     1,     1,     0,     4,     0,     4,
-       0,     4,     3,     0,     4,     3,     3,     3,     3,     3,
-       3,     3,     0,     4,     0,     4,     3,     3,     0,     6,
+       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,     0,     4,     0,     4,     3,
+       3,     0,     6,     1,     3,     1,     1,     1,     1,     1,
+       1,     1,     1,     1,     1,     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,     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,     0,     4,     0,
+       4,     0,     4,     0,     4,     0,     4,     0,     4,     0,
+       4,     1,     1,     1,     1,     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,     0,     4,     0,     4,     0,     4,     0,     4,
-       0,     4,     0,     4,     0,     4,     0,     4,     1,     1,
-       1,     1,     3,     0,     6,     0,     1,     1,     3,     0,
-       4,     1,     3,     1,     1,     1,     1,     1,     1,     1,
+       1,     1,     1,     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,     0,     6,     0,     4,     0,     1,     1,     3,     0,
+       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,     0,     4,     0,     1,     1,     3,     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,     0,     4,     0,     4,
-       0,     4,     0,     4,     0,     4,     0,     4,     0,     6,
-       1,     1,     0,     6,     1,     3,     0,     4,     0,     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,     0,     4,     0,     1,
        1,     3,     1,     1,     1,     1,     1,     1,     1,     1,
-       1,     1,     1,     1,     0,     4,     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,
+       1,     1,     1,     1,     1,     1,     1,     0,     4,     0,
+       4,     0,     4,     0,     4,     0,     4,     0,     4,     0,
+       4,     0,     4,     0,     4,     0,     4,     0,     4,     0,
+       4,     0,     6,     1,     1,     0,     6,     1,     3,     0,
+       4,     0,     1,     1,     3,     1,     1,     1,     1,     1,
+       1,     1,     1,     1,     1,     1,     1,     0,     4,     3,
+       3,     0,     6,     1,     3,     1,     1,     1,     1,     1,
        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,     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,     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
   };
 
 
@@ -4518,23 +4599,24 @@ namespace isc { namespace dhcp {
   const Dhcp4Parser::yytname_[] =
   {
   "\"end of file\"", "error", "$undefined", "\",\"", "\":\"", "\"[\"",
-  "\"]\"", "\"{\"", "\"}\"", "\"null\"", "\"Dhcp4\"",
-  "\"interfaces-config\"", "\"interfaces\"", "\"dhcp-socket-type\"",
-  "\"raw\"", "\"udp\"", "\"outbound-interface\"", "\"same-as-inbound\"",
-  "\"use-routing\"", "\"re-detect\"", "\"sanity-checks\"",
-  "\"lease-checks\"", "\"echo-client-id\"", "\"match-client-id\"",
-  "\"next-server\"", "\"server-hostname\"", "\"boot-file-name\"",
-  "\"lease-database\"", "\"hosts-database\"", "\"hosts-databases\"",
-  "\"type\"", "\"memfile\"", "\"mysql\"", "\"postgresql\"", "\"cql\"",
-  "\"user\"", "\"password\"", "\"host\"", "\"port\"", "\"persist\"",
-  "\"lfc-interval\"", "\"readonly\"", "\"connect-timeout\"",
-  "\"contact-points\"", "\"keyspace\"", "\"max-reconnect-tries\"",
-  "\"reconnect-wait-time\"", "\"request-timeout\"", "\"tcp-keepalive\"",
-  "\"tcp-nodelay\"", "\"valid-lifetime\"", "\"renew-timer\"",
-  "\"rebind-timer\"", "\"decline-probation-period\"", "\"subnet4\"",
-  "\"4o6-interface\"", "\"4o6-interface-id\"", "\"4o6-subnet\"",
-  "\"option-def\"", "\"option-data\"", "\"name\"", "\"data\"", "\"code\"",
-  "\"space\"", "\"csv-format\"", "\"always-send\"", "\"record-types\"",
+  "\"]\"", "\"{\"", "\"}\"", "\"null\"", "\"Dhcp4\"", "\"config-control\"",
+  "\"config-databases\"", "\"interfaces-config\"", "\"interfaces\"",
+  "\"dhcp-socket-type\"", "\"raw\"", "\"udp\"", "\"outbound-interface\"",
+  "\"same-as-inbound\"", "\"use-routing\"", "\"re-detect\"",
+  "\"sanity-checks\"", "\"lease-checks\"", "\"echo-client-id\"",
+  "\"match-client-id\"", "\"next-server\"", "\"server-hostname\"",
+  "\"boot-file-name\"", "\"lease-database\"", "\"hosts-database\"",
+  "\"hosts-databases\"", "\"type\"", "\"memfile\"", "\"mysql\"",
+  "\"postgresql\"", "\"cql\"", "\"user\"", "\"password\"", "\"host\"",
+  "\"port\"", "\"persist\"", "\"lfc-interval\"", "\"readonly\"",
+  "\"connect-timeout\"", "\"contact-points\"", "\"keyspace\"",
+  "\"max-reconnect-tries\"", "\"reconnect-wait-time\"",
+  "\"request-timeout\"", "\"tcp-keepalive\"", "\"tcp-nodelay\"",
+  "\"valid-lifetime\"", "\"renew-timer\"", "\"rebind-timer\"",
+  "\"decline-probation-period\"", "\"subnet4\"", "\"4o6-interface\"",
+  "\"4o6-interface-id\"", "\"4o6-subnet\"", "\"option-def\"",
+  "\"option-data\"", "\"name\"", "\"data\"", "\"code\"", "\"space\"",
+  "\"csv-format\"", "\"always-send\"", "\"record-types\"",
   "\"encapsulate\"", "\"array\"", "\"shared-networks\"", "\"pools\"",
   "\"pool\"", "\"user-context\"", "\"comment\"", "\"subnet\"",
   "\"interface\"", "\"id\"", "\"reservation-mode\"", "\"disabled\"",
@@ -4563,161 +4645,166 @@ namespace isc { namespace dhcp {
   "SUB_DHCP4", "SUB_INTERFACES4", "SUB_SUBNET4", "SUB_POOL4",
   "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", "value",
-  "sub_json", "map2", "$@14", "map_value", "map_content", "not_empty_map",
-  "list_generic", "$@15", "list_content", "not_empty_list", "list_strings",
-  "$@16", "list_strings_content", "not_empty_list_strings",
-  "unknown_map_entry", "syntax_map", "$@17", "global_objects",
-  "global_object", "dhcp4_object", "$@18", "sub_dhcp4", "$@19",
-  "global_params", "global_param", "valid_lifetime", "renew_timer",
+  "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", "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", "dhcp4_object", "$@19", "sub_dhcp4",
+  "$@20", "global_params", "global_param", "valid_lifetime", "renew_timer",
   "rebind_timer", "decline_probation_period", "echo_client_id",
-  "match_client_id", "interfaces_config", "$@20",
+  "match_client_id", "interfaces_config", "$@21",
   "interfaces_config_params", "interfaces_config_param", "sub_interfaces4",
-  "$@21", "interfaces_list", "$@22", "dhcp_socket_type", "$@23",
-  "socket_type", "outbound_interface", "$@24", "outbound_interface_value",
-  "re_detect", "lease_database", "$@25", "sanity_checks", "$@26",
-  "sanity_checks_params", "sanity_checks_param", "lease_checks", "$@27",
-  "hosts_database", "$@28", "hosts_databases", "$@29", "database_list",
-  "not_empty_database_list", "database", "$@30", "database_map_params",
-  "database_map_param", "database_type", "$@31", "db_type", "user", "$@32",
-  "password", "$@33", "host", "$@34", "port", "name", "$@35", "persist",
+  "$@22", "interfaces_list", "$@23", "dhcp_socket_type", "$@24",
+  "socket_type", "outbound_interface", "$@25", "outbound_interface_value",
+  "re_detect", "lease_database", "$@26", "sanity_checks", "$@27",
+  "sanity_checks_params", "sanity_checks_param", "lease_checks", "$@28",
+  "hosts_database", "$@29", "hosts_databases", "$@30", "database_list",
+  "not_empty_database_list", "database", "$@31", "database_map_params",
+  "database_map_param", "database_type", "$@32", "db_type", "user", "$@33",
+  "password", "$@34", "host", "$@35", "port", "name", "$@36", "persist",
   "lfc_interval", "readonly", "connect_timeout", "request_timeout",
-  "tcp_keepalive", "tcp_nodelay", "contact_points", "$@36", "keyspace",
-  "$@37", "max_reconnect_tries", "reconnect_wait_time",
-  "host_reservation_identifiers", "$@38",
+  "tcp_keepalive", "tcp_nodelay", "contact_points", "$@37", "keyspace",
+  "$@38", "max_reconnect_tries", "reconnect_wait_time",
+  "host_reservation_identifiers", "$@39",
   "host_reservation_identifiers_list", "host_reservation_identifier",
   "duid_id", "hw_address_id", "circuit_id", "client_id", "flex_id",
-  "hooks_libraries", "$@39", "hooks_libraries_list",
-  "not_empty_hooks_libraries_list", "hooks_library", "$@40",
-  "sub_hooks_library", "$@41", "hooks_params", "hooks_param", "library",
-  "$@42", "parameters", "$@43", "expired_leases_processing", "$@44",
+  "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",
   "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", "subnet4_list", "$@45",
-  "subnet4_list_content", "not_empty_subnet4_list", "subnet4", "$@46",
-  "sub_subnet4", "$@47", "subnet4_params", "subnet4_param", "subnet",
-  "$@48", "subnet_4o6_interface", "$@49", "subnet_4o6_interface_id",
-  "$@50", "subnet_4o6_subnet", "$@51", "interface", "$@52", "client_class",
-  "$@53", "require_client_classes", "$@54", "reservation_mode", "$@55",
-  "hr_mode", "id", "shared_networks", "$@56", "shared_networks_content",
-  "shared_networks_list", "shared_network", "$@57",
+  "unwarned_reclaim_cycles", "subnet4_list", "$@46",
+  "subnet4_list_content", "not_empty_subnet4_list", "subnet4", "$@47",
+  "sub_subnet4", "$@48", "subnet4_params", "subnet4_param", "subnet",
+  "$@49", "subnet_4o6_interface", "$@50", "subnet_4o6_interface_id",
+  "$@51", "subnet_4o6_subnet", "$@52", "interface", "$@53", "client_class",
+  "$@54", "require_client_classes", "$@55", "reservation_mode", "$@56",
+  "hr_mode", "id", "shared_networks", "$@57", "shared_networks_content",
+  "shared_networks_list", "shared_network", "$@58",
   "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", "$@60",
-  "sub_option_def", "$@61", "option_def_params",
+  "$@59", "sub_option_def_list", "$@60", "option_def_list_content",
+  "not_empty_option_def_list", "option_def_entry", "$@61",
+  "sub_option_def", "$@62", "option_def_params",
   "not_empty_option_def_params", "option_def_param", "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",
+  "code", "option_def_code", "option_def_type", "$@63",
+  "option_def_record_types", "$@64", "space", "$@65", "option_def_space",
+  "option_def_encapsulate", "$@66", "option_def_array", "option_data_list",
+  "$@67", "option_data_list_content", "not_empty_option_data_list",
+  "option_data_entry", "$@68", "sub_option_data", "$@69",
   "option_data_params", "not_empty_option_data_params",
-  "option_data_param", "option_data_name", "option_data_data", "$@69",
+  "option_data_param", "option_data_name", "option_data_data", "$@70",
   "option_data_code", "option_data_space", "option_data_csv_format",
-  "option_data_always_send", "pools_list", "$@70", "pools_list_content",
-  "not_empty_pools_list", "pool_list_entry", "$@71", "sub_pool4", "$@72",
-  "pool_params", "pool_param", "pool_entry", "$@73", "user_context",
-  "$@74", "comment", "$@75", "reservations", "$@76", "reservations_list",
-  "not_empty_reservations_list", "reservation", "$@77", "sub_reservation",
-  "$@78", "reservation_params", "not_empty_reservation_params",
-  "reservation_param", "next_server", "$@79", "server_hostname", "$@80",
-  "boot_file_name", "$@81", "ip_address", "$@82", "ip_addresses", "$@83",
-  "duid", "$@84", "hw_address", "$@85", "client_id_value", "$@86",
-  "circuit_id_value", "$@87", "flex_id_value", "$@88", "hostname", "$@89",
-  "reservation_client_classes", "$@90", "relay", "$@91", "relay_map",
-  "client_classes", "$@92", "client_classes_list", "client_class_entry",
-  "$@93", "client_class_params", "not_empty_client_class_params",
-  "client_class_param", "client_class_name", "client_class_test", "$@94",
-  "only_if_required", "dhcp4o6_port", "control_socket", "$@95",
+  "option_data_always_send", "pools_list", "$@71", "pools_list_content",
+  "not_empty_pools_list", "pool_list_entry", "$@72", "sub_pool4", "$@73",
+  "pool_params", "pool_param", "pool_entry", "$@74", "user_context",
+  "$@75", "comment", "$@76", "reservations", "$@77", "reservations_list",
+  "not_empty_reservations_list", "reservation", "$@78", "sub_reservation",
+  "$@79", "reservation_params", "not_empty_reservation_params",
+  "reservation_param", "next_server", "$@80", "server_hostname", "$@81",
+  "boot_file_name", "$@82", "ip_address", "$@83", "ip_addresses", "$@84",
+  "duid", "$@85", "hw_address", "$@86", "client_id_value", "$@87",
+  "circuit_id_value", "$@88", "flex_id_value", "$@89", "hostname", "$@90",
+  "reservation_client_classes", "$@91", "relay", "$@92", "relay_map",
+  "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", "$@95",
+  "only_if_required", "dhcp4o6_port", "control_socket", "$@96",
   "control_socket_params", "control_socket_param", "control_socket_type",
-  "$@96", "control_socket_name", "$@97", "dhcp_ddns", "$@98",
-  "sub_dhcp_ddns", "$@99", "dhcp_ddns_params", "dhcp_ddns_param",
-  "enable_updates", "qualifying_suffix", "$@100", "server_ip", "$@101",
-  "server_port", "sender_ip", "$@102", "sender_port", "max_queue_size",
-  "ncr_protocol", "$@103", "ncr_protocol_value", "ncr_format", "$@104",
+  "$@97", "control_socket_name", "$@98", "dhcp_ddns", "$@99",
+  "sub_dhcp_ddns", "$@100", "dhcp_ddns_params", "dhcp_ddns_param",
+  "enable_updates", "qualifying_suffix", "$@101", "server_ip", "$@102",
+  "server_port", "sender_ip", "$@103", "sender_port", "max_queue_size",
+  "ncr_protocol", "$@104", "ncr_protocol_value", "ncr_format", "$@105",
   "always_include_fqdn", "override_no_update", "override_client_update",
-  "replace_client_name", "$@105", "replace_client_name_value",
-  "generated_prefix", "$@106", "hostname_char_set", "$@107",
-  "hostname_char_replacement", "$@108", "dhcp6_json_object", "$@109",
-  "dhcpddns_json_object", "$@110", "control_agent_json_object", "$@111",
-  "logging_object", "$@112", "sub_logging", "$@113", "logging_params",
-  "logging_param", "loggers", "$@114", "loggers_entries", "logger_entry",
-  "$@115", "logger_params", "logger_param", "debuglevel", "severity",
-  "$@116", "output_options_list", "$@117", "output_options_list_content",
-  "output_entry", "$@118", "output_params_list", "output_params", "output",
-  "$@119", "flush", "maxsize", "maxver", YY_NULLPTR
+  "replace_client_name", "$@106", "replace_client_name_value",
+  "generated_prefix", "$@107", "hostname_char_set", "$@108",
+  "hostname_char_replacement", "$@109", "dhcp6_json_object", "$@110",
+  "dhcpddns_json_object", "$@111", "control_agent_json_object", "$@112",
+  "config_control", "$@113", "$@114", "sub_config_control", "$@115",
+  "config_control_params", "config_control_param", "config_databases",
+  "$@116", "logging_object", "$@117", "sub_logging", "$@118",
+  "logging_params", "logging_param", "loggers", "$@119", "loggers_entries",
+  "logger_entry", "$@120", "logger_params", "logger_param", "debuglevel",
+  "severity", "$@121", "output_options_list", "$@122",
+  "output_options_list_content", "output_entry", "$@123",
+  "output_params_list", "output_params", "output", "$@124", "flush",
+  "maxsize", "maxver", YY_NULLPTR
   };
 
 #if PARSER4_DEBUG
   const unsigned short int
   Dhcp4Parser::yyrline_[] =
   {
-       0,   248,   248,   248,   249,   249,   250,   250,   251,   251,
-     252,   252,   253,   253,   254,   254,   255,   255,   256,   256,
-     257,   257,   258,   258,   259,   259,   260,   260,   268,   269,
-     270,   271,   272,   273,   274,   277,   282,   282,   293,   296,
-     297,   300,   304,   311,   311,   318,   319,   322,   326,   333,
-     333,   340,   341,   344,   348,   359,   369,   369,   385,   386,
-     390,   391,   392,   393,   394,   395,   398,   398,   413,   413,
-     422,   423,   428,   429,   430,   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,   459,   464,   469,   474,   479,   484,   490,   490,   501,
-     502,   505,   506,   507,   508,   509,   510,   511,   514,   514,
-     523,   523,   533,   533,   540,   541,   544,   544,   551,   553,
-     557,   563,   563,   575,   575,   585,   586,   588,   590,   590,
-     608,   608,   620,   620,   630,   631,   634,   635,   638,   638,
-     648,   649,   652,   653,   654,   655,   656,   657,   658,   659,
-     660,   661,   662,   663,   664,   665,   666,   667,   668,   669,
-     672,   672,   679,   680,   681,   682,   685,   685,   693,   693,
-     701,   701,   709,   714,   714,   722,   727,   732,   737,   742,
-     747,   752,   757,   757,   765,   765,   773,   778,   783,   783,
-     793,   794,   797,   798,   799,   800,   801,   804,   809,   814,
-     819,   824,   829,   829,   839,   840,   843,   844,   847,   847,
-     857,   857,   867,   868,   869,   872,   873,   876,   876,   884,
-     884,   892,   892,   903,   904,   907,   908,   909,   910,   911,
-     912,   915,   920,   925,   930,   935,   940,   948,   948,   961,
-     962,   965,   966,   973,   973,   999,   999,  1010,  1011,  1015,
-    1016,  1017,  1018,  1019,  1020,  1021,  1022,  1023,  1024,  1025,
-    1026,  1027,  1028,  1029,  1030,  1031,  1032,  1033,  1034,  1035,
-    1036,  1037,  1040,  1040,  1048,  1048,  1056,  1056,  1064,  1064,
-    1072,  1072,  1080,  1080,  1088,  1088,  1098,  1098,  1105,  1106,
-    1107,  1108,  1111,  1118,  1118,  1129,  1130,  1134,  1135,  1138,
-    1138,  1146,  1147,  1150,  1151,  1152,  1153,  1154,  1155,  1156,
-    1157,  1158,  1159,  1160,  1161,  1162,  1163,  1164,  1165,  1166,
-    1167,  1174,  1174,  1187,  1187,  1196,  1197,  1200,  1201,  1206,
-    1206,  1221,  1221,  1235,  1236,  1239,  1240,  1243,  1244,  1245,
-    1246,  1247,  1248,  1249,  1250,  1251,  1252,  1255,  1257,  1262,
-    1264,  1264,  1272,  1272,  1280,  1280,  1288,  1290,  1290,  1298,
-    1307,  1307,  1319,  1320,  1325,  1326,  1331,  1331,  1343,  1343,
-    1355,  1356,  1361,  1362,  1367,  1368,  1369,  1370,  1371,  1372,
-    1373,  1374,  1375,  1378,  1380,  1380,  1388,  1390,  1392,  1397,
-    1405,  1405,  1417,  1418,  1421,  1422,  1425,  1425,  1435,  1435,
-    1445,  1446,  1449,  1450,  1451,  1452,  1453,  1454,  1455,  1458,
-    1458,  1466,  1466,  1491,  1491,  1521,  1521,  1531,  1532,  1535,
-    1536,  1539,  1539,  1548,  1548,  1557,  1558,  1561,  1562,  1566,
-    1567,  1568,  1569,  1570,  1571,  1572,  1573,  1574,  1575,  1576,
-    1577,  1578,  1579,  1580,  1583,  1583,  1591,  1591,  1599,  1599,
-    1607,  1607,  1615,  1615,  1625,  1625,  1633,  1633,  1641,  1641,
-    1649,  1649,  1657,  1657,  1665,  1665,  1673,  1673,  1686,  1686,
-    1696,  1697,  1703,  1703,  1713,  1714,  1717,  1717,  1727,  1728,
-    1731,  1732,  1735,  1736,  1737,  1738,  1739,  1740,  1741,  1742,
-    1743,  1744,  1745,  1748,  1750,  1750,  1758,  1767,  1774,  1774,
-    1784,  1785,  1788,  1789,  1790,  1791,  1792,  1795,  1795,  1803,
-    1803,  1813,  1813,  1825,  1825,  1835,  1836,  1839,  1840,  1841,
-    1842,  1843,  1844,  1845,  1846,  1847,  1848,  1849,  1850,  1851,
-    1852,  1853,  1854,  1855,  1856,  1857,  1860,  1865,  1865,  1873,
-    1873,  1881,  1886,  1886,  1894,  1899,  1904,  1904,  1912,  1913,
-    1916,  1916,  1924,  1929,  1934,  1939,  1939,  1947,  1950,  1953,
-    1956,  1959,  1965,  1965,  1973,  1973,  1981,  1981,  1992,  1992,
-    1999,  1999,  2006,  2006,  2018,  2018,  2028,  2028,  2039,  2040,
-    2044,  2048,  2048,  2060,  2061,  2065,  2065,  2073,  2074,  2077,
-    2078,  2079,  2080,  2081,  2082,  2083,  2086,  2091,  2091,  2099,
-    2099,  2109,  2110,  2113,  2113,  2121,  2122,  2125,  2126,  2127,
-    2128,  2131,  2131,  2139,  2144,  2149
+       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,
+     389,   390,   394,   395,   396,   397,   398,   399,   402,   402,
+     417,   417,   426,   427,   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,   459,   460,   461,   464,   469,   474,   479,   484,   489,
+     495,   495,   506,   507,   510,   511,   512,   513,   514,   515,
+     516,   519,   519,   528,   528,   538,   538,   545,   546,   549,
+     549,   556,   558,   562,   568,   568,   580,   580,   590,   591,
+     593,   595,   595,   613,   613,   625,   625,   635,   636,   639,
+     640,   643,   643,   653,   654,   657,   658,   659,   660,   661,
+     662,   663,   664,   665,   666,   667,   668,   669,   670,   671,
+     672,   673,   674,   677,   677,   684,   685,   686,   687,   690,
+     690,   698,   698,   706,   706,   714,   719,   719,   727,   732,
+     737,   742,   747,   752,   757,   762,   762,   770,   770,   778,
+     783,   788,   788,   798,   799,   802,   803,   804,   805,   806,
+     809,   814,   819,   824,   829,   834,   834,   844,   845,   848,
+     849,   852,   852,   862,   862,   872,   873,   874,   877,   878,
+     881,   881,   889,   889,   897,   897,   908,   909,   912,   913,
+     914,   915,   916,   917,   920,   925,   930,   935,   940,   945,
+     953,   953,   966,   967,   970,   971,   978,   978,  1004,  1004,
+    1015,  1016,  1020,  1021,  1022,  1023,  1024,  1025,  1026,  1027,
+    1028,  1029,  1030,  1031,  1032,  1033,  1034,  1035,  1036,  1037,
+    1038,  1039,  1040,  1041,  1042,  1045,  1045,  1053,  1053,  1061,
+    1061,  1069,  1069,  1077,  1077,  1085,  1085,  1093,  1093,  1103,
+    1103,  1110,  1111,  1112,  1113,  1116,  1123,  1123,  1134,  1135,
+    1139,  1140,  1143,  1143,  1151,  1152,  1155,  1156,  1157,  1158,
+    1159,  1160,  1161,  1162,  1163,  1164,  1165,  1166,  1167,  1168,
+    1169,  1170,  1171,  1172,  1179,  1179,  1192,  1192,  1201,  1202,
+    1205,  1206,  1211,  1211,  1226,  1226,  1240,  1241,  1244,  1245,
+    1248,  1249,  1250,  1251,  1252,  1253,  1254,  1255,  1256,  1257,
+    1260,  1262,  1267,  1269,  1269,  1277,  1277,  1285,  1285,  1293,
+    1295,  1295,  1303,  1312,  1312,  1324,  1325,  1330,  1331,  1336,
+    1336,  1348,  1348,  1360,  1361,  1366,  1367,  1372,  1373,  1374,
+    1375,  1376,  1377,  1378,  1379,  1380,  1383,  1385,  1385,  1393,
+    1395,  1397,  1402,  1410,  1410,  1422,  1423,  1426,  1427,  1430,
+    1430,  1440,  1440,  1450,  1451,  1454,  1455,  1456,  1457,  1458,
+    1459,  1460,  1463,  1463,  1471,  1471,  1496,  1496,  1526,  1526,
+    1536,  1537,  1540,  1541,  1544,  1544,  1553,  1553,  1562,  1563,
+    1566,  1567,  1571,  1572,  1573,  1574,  1575,  1576,  1577,  1578,
+    1579,  1580,  1581,  1582,  1583,  1584,  1585,  1588,  1588,  1596,
+    1596,  1604,  1604,  1612,  1612,  1620,  1620,  1630,  1630,  1638,
+    1638,  1646,  1646,  1654,  1654,  1662,  1662,  1670,  1670,  1678,
+    1678,  1691,  1691,  1701,  1702,  1708,  1708,  1718,  1719,  1722,
+    1722,  1732,  1733,  1736,  1737,  1740,  1741,  1742,  1743,  1744,
+    1745,  1746,  1747,  1748,  1749,  1750,  1753,  1755,  1755,  1763,
+    1772,  1779,  1779,  1789,  1790,  1793,  1794,  1795,  1796,  1797,
+    1800,  1800,  1808,  1808,  1818,  1818,  1830,  1830,  1840,  1841,
+    1844,  1845,  1846,  1847,  1848,  1849,  1850,  1851,  1852,  1853,
+    1854,  1855,  1856,  1857,  1858,  1859,  1860,  1861,  1862,  1865,
+    1870,  1870,  1878,  1878,  1886,  1891,  1891,  1899,  1904,  1909,
+    1909,  1917,  1918,  1921,  1921,  1929,  1934,  1939,  1944,  1944,
+    1952,  1955,  1958,  1961,  1964,  1970,  1970,  1978,  1978,  1986,
+    1986,  1997,  1997,  2004,  2004,  2011,  2011,  2018,  2018,  2027,
+    2027,  2038,  2038,  2048,  2049,  2053,  2054,  2057,  2057,  2072,
+    2072,  2082,  2082,  2093,  2094,  2098,  2102,  2102,  2114,  2115,
+    2119,  2119,  2127,  2128,  2131,  2132,  2133,  2134,  2135,  2136,
+    2137,  2140,  2145,  2145,  2153,  2153,  2163,  2164,  2167,  2167,
+    2175,  2176,  2179,  2180,  2181,  2182,  2185,  2185,  2193,  2198,
+    2203
   };
 
   // Print the state stack on the debug stream.
@@ -4730,18 +4817,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
   Dhcp4Parser::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 << " =",
@@ -4750,10 +4837,10 @@ namespace isc { namespace dhcp {
 #endif // PARSER4_DEBUG
 
 
-#line 14 "dhcp4_parser.yy" // lalr1.cc:1163
+#line 14 "dhcp4_parser.yy" // lalr1.cc:1167
 } } // isc::dhcp
-#line 4756 "dhcp4_parser.cc" // lalr1.cc:1163
-#line 2154 "dhcp4_parser.yy" // lalr1.cc:1164
+#line 4843 "dhcp4_parser.cc" // lalr1.cc:1167
+#line 2208 "dhcp4_parser.yy" // lalr1.cc:1168
 
 
 void
index 12ec157eb05cf37edf55562f609a6b4477a6485e..f29aa9f80930eb4c994e9a93672b4aa83dcde995 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_PARSER4_DHCP4_PARSER_H_INCLUDED
 # define YY_PARSER4_DHCP4_PARSER_H_INCLUDED
 // //                    "%code requires" blocks.
-#line 17 "dhcp4_parser.yy" // lalr1.cc:379
+#line 17 "dhcp4_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 "dhcp4_parser.h" // lalr1.cc:379
+#line 56 "dhcp4_parser.h" // lalr1.cc:377
 
 # include <cassert>
 # include <cstdlib> // std::abort
@@ -135,9 +135,9 @@ using namespace std;
 # endif /* ! defined YYDEBUG */
 #endif  /* ! defined PARSER4_DEBUG */
 
-#line 14 "dhcp4_parser.yy" // lalr1.cc:379
+#line 14 "dhcp4_parser.yy" // lalr1.cc:377
 namespace isc { namespace dhcp {
-#line 141 "dhcp4_parser.h" // lalr1.cc:379
+#line 141 "dhcp4_parser.h" // lalr1.cc:377
 
 
 
@@ -356,159 +356,162 @@ namespace isc { namespace dhcp {
         TOKEN_RCURLY_BRACKET = 263,
         TOKEN_NULL_TYPE = 264,
         TOKEN_DHCP4 = 265,
-        TOKEN_INTERFACES_CONFIG = 266,
-        TOKEN_INTERFACES = 267,
-        TOKEN_DHCP_SOCKET_TYPE = 268,
-        TOKEN_RAW = 269,
-        TOKEN_UDP = 270,
-        TOKEN_OUTBOUND_INTERFACE = 271,
-        TOKEN_SAME_AS_INBOUND = 272,
-        TOKEN_USE_ROUTING = 273,
-        TOKEN_RE_DETECT = 274,
-        TOKEN_SANITY_CHECKS = 275,
-        TOKEN_LEASE_CHECKS = 276,
-        TOKEN_ECHO_CLIENT_ID = 277,
-        TOKEN_MATCH_CLIENT_ID = 278,
-        TOKEN_NEXT_SERVER = 279,
-        TOKEN_SERVER_HOSTNAME = 280,
-        TOKEN_BOOT_FILE_NAME = 281,
-        TOKEN_LEASE_DATABASE = 282,
-        TOKEN_HOSTS_DATABASE = 283,
-        TOKEN_HOSTS_DATABASES = 284,
-        TOKEN_TYPE = 285,
-        TOKEN_MEMFILE = 286,
-        TOKEN_MYSQL = 287,
-        TOKEN_POSTGRESQL = 288,
-        TOKEN_CQL = 289,
-        TOKEN_USER = 290,
-        TOKEN_PASSWORD = 291,
-        TOKEN_HOST = 292,
-        TOKEN_PORT = 293,
-        TOKEN_PERSIST = 294,
-        TOKEN_LFC_INTERVAL = 295,
-        TOKEN_READONLY = 296,
-        TOKEN_CONNECT_TIMEOUT = 297,
-        TOKEN_CONTACT_POINTS = 298,
-        TOKEN_KEYSPACE = 299,
-        TOKEN_MAX_RECONNECT_TRIES = 300,
-        TOKEN_RECONNECT_WAIT_TIME = 301,
-        TOKEN_REQUEST_TIMEOUT = 302,
-        TOKEN_TCP_KEEPALIVE = 303,
-        TOKEN_TCP_NODELAY = 304,
-        TOKEN_VALID_LIFETIME = 305,
-        TOKEN_RENEW_TIMER = 306,
-        TOKEN_REBIND_TIMER = 307,
-        TOKEN_DECLINE_PROBATION_PERIOD = 308,
-        TOKEN_SUBNET4 = 309,
-        TOKEN_SUBNET_4O6_INTERFACE = 310,
-        TOKEN_SUBNET_4O6_INTERFACE_ID = 311,
-        TOKEN_SUBNET_4O6_SUBNET = 312,
-        TOKEN_OPTION_DEF = 313,
-        TOKEN_OPTION_DATA = 314,
-        TOKEN_NAME = 315,
-        TOKEN_DATA = 316,
-        TOKEN_CODE = 317,
-        TOKEN_SPACE = 318,
-        TOKEN_CSV_FORMAT = 319,
-        TOKEN_ALWAYS_SEND = 320,
-        TOKEN_RECORD_TYPES = 321,
-        TOKEN_ENCAPSULATE = 322,
-        TOKEN_ARRAY = 323,
-        TOKEN_SHARED_NETWORKS = 324,
-        TOKEN_POOLS = 325,
-        TOKEN_POOL = 326,
-        TOKEN_USER_CONTEXT = 327,
-        TOKEN_COMMENT = 328,
-        TOKEN_SUBNET = 329,
-        TOKEN_INTERFACE = 330,
-        TOKEN_ID = 331,
-        TOKEN_RESERVATION_MODE = 332,
-        TOKEN_DISABLED = 333,
-        TOKEN_OUT_OF_POOL = 334,
-        TOKEN_GLOBAL = 335,
-        TOKEN_ALL = 336,
-        TOKEN_HOST_RESERVATION_IDENTIFIERS = 337,
-        TOKEN_CLIENT_CLASSES = 338,
-        TOKEN_REQUIRE_CLIENT_CLASSES = 339,
-        TOKEN_TEST = 340,
-        TOKEN_ONLY_IF_REQUIRED = 341,
-        TOKEN_CLIENT_CLASS = 342,
-        TOKEN_RESERVATIONS = 343,
-        TOKEN_DUID = 344,
-        TOKEN_HW_ADDRESS = 345,
-        TOKEN_CIRCUIT_ID = 346,
-        TOKEN_CLIENT_ID = 347,
-        TOKEN_HOSTNAME = 348,
-        TOKEN_FLEX_ID = 349,
-        TOKEN_RELAY = 350,
-        TOKEN_IP_ADDRESS = 351,
-        TOKEN_IP_ADDRESSES = 352,
-        TOKEN_HOOKS_LIBRARIES = 353,
-        TOKEN_LIBRARY = 354,
-        TOKEN_PARAMETERS = 355,
-        TOKEN_EXPIRED_LEASES_PROCESSING = 356,
-        TOKEN_RECLAIM_TIMER_WAIT_TIME = 357,
-        TOKEN_FLUSH_RECLAIMED_TIMER_WAIT_TIME = 358,
-        TOKEN_HOLD_RECLAIMED_TIME = 359,
-        TOKEN_MAX_RECLAIM_LEASES = 360,
-        TOKEN_MAX_RECLAIM_TIME = 361,
-        TOKEN_UNWARNED_RECLAIM_CYCLES = 362,
-        TOKEN_DHCP4O6_PORT = 363,
-        TOKEN_CONTROL_SOCKET = 364,
-        TOKEN_SOCKET_TYPE = 365,
-        TOKEN_SOCKET_NAME = 366,
-        TOKEN_DHCP_DDNS = 367,
-        TOKEN_ENABLE_UPDATES = 368,
-        TOKEN_QUALIFYING_SUFFIX = 369,
-        TOKEN_SERVER_IP = 370,
-        TOKEN_SERVER_PORT = 371,
-        TOKEN_SENDER_IP = 372,
-        TOKEN_SENDER_PORT = 373,
-        TOKEN_MAX_QUEUE_SIZE = 374,
-        TOKEN_NCR_PROTOCOL = 375,
-        TOKEN_NCR_FORMAT = 376,
-        TOKEN_ALWAYS_INCLUDE_FQDN = 377,
-        TOKEN_OVERRIDE_NO_UPDATE = 378,
-        TOKEN_OVERRIDE_CLIENT_UPDATE = 379,
-        TOKEN_REPLACE_CLIENT_NAME = 380,
-        TOKEN_GENERATED_PREFIX = 381,
-        TOKEN_TCP = 382,
-        TOKEN_JSON = 383,
-        TOKEN_WHEN_PRESENT = 384,
-        TOKEN_NEVER = 385,
-        TOKEN_ALWAYS = 386,
-        TOKEN_WHEN_NOT_PRESENT = 387,
-        TOKEN_HOSTNAME_CHAR_SET = 388,
-        TOKEN_HOSTNAME_CHAR_REPLACEMENT = 389,
-        TOKEN_LOGGING = 390,
-        TOKEN_LOGGERS = 391,
-        TOKEN_OUTPUT_OPTIONS = 392,
-        TOKEN_OUTPUT = 393,
-        TOKEN_DEBUGLEVEL = 394,
-        TOKEN_SEVERITY = 395,
-        TOKEN_FLUSH = 396,
-        TOKEN_MAXSIZE = 397,
-        TOKEN_MAXVER = 398,
-        TOKEN_DHCP6 = 399,
-        TOKEN_DHCPDDNS = 400,
-        TOKEN_CONTROL_AGENT = 401,
-        TOKEN_TOPLEVEL_JSON = 402,
-        TOKEN_TOPLEVEL_DHCP4 = 403,
-        TOKEN_SUB_DHCP4 = 404,
-        TOKEN_SUB_INTERFACES4 = 405,
-        TOKEN_SUB_SUBNET4 = 406,
-        TOKEN_SUB_POOL4 = 407,
-        TOKEN_SUB_RESERVATION = 408,
-        TOKEN_SUB_OPTION_DEFS = 409,
-        TOKEN_SUB_OPTION_DEF = 410,
-        TOKEN_SUB_OPTION_DATA = 411,
-        TOKEN_SUB_HOOKS_LIBRARY = 412,
-        TOKEN_SUB_DHCP_DDNS = 413,
-        TOKEN_SUB_LOGGING = 414,
-        TOKEN_STRING = 415,
-        TOKEN_INTEGER = 416,
-        TOKEN_FLOAT = 417,
-        TOKEN_BOOLEAN = 418
+        TOKEN_CONFIG_CONTROL = 266,
+        TOKEN_CONFIG_DATABASES = 267,
+        TOKEN_INTERFACES_CONFIG = 268,
+        TOKEN_INTERFACES = 269,
+        TOKEN_DHCP_SOCKET_TYPE = 270,
+        TOKEN_RAW = 271,
+        TOKEN_UDP = 272,
+        TOKEN_OUTBOUND_INTERFACE = 273,
+        TOKEN_SAME_AS_INBOUND = 274,
+        TOKEN_USE_ROUTING = 275,
+        TOKEN_RE_DETECT = 276,
+        TOKEN_SANITY_CHECKS = 277,
+        TOKEN_LEASE_CHECKS = 278,
+        TOKEN_ECHO_CLIENT_ID = 279,
+        TOKEN_MATCH_CLIENT_ID = 280,
+        TOKEN_NEXT_SERVER = 281,
+        TOKEN_SERVER_HOSTNAME = 282,
+        TOKEN_BOOT_FILE_NAME = 283,
+        TOKEN_LEASE_DATABASE = 284,
+        TOKEN_HOSTS_DATABASE = 285,
+        TOKEN_HOSTS_DATABASES = 286,
+        TOKEN_TYPE = 287,
+        TOKEN_MEMFILE = 288,
+        TOKEN_MYSQL = 289,
+        TOKEN_POSTGRESQL = 290,
+        TOKEN_CQL = 291,
+        TOKEN_USER = 292,
+        TOKEN_PASSWORD = 293,
+        TOKEN_HOST = 294,
+        TOKEN_PORT = 295,
+        TOKEN_PERSIST = 296,
+        TOKEN_LFC_INTERVAL = 297,
+        TOKEN_READONLY = 298,
+        TOKEN_CONNECT_TIMEOUT = 299,
+        TOKEN_CONTACT_POINTS = 300,
+        TOKEN_KEYSPACE = 301,
+        TOKEN_MAX_RECONNECT_TRIES = 302,
+        TOKEN_RECONNECT_WAIT_TIME = 303,
+        TOKEN_REQUEST_TIMEOUT = 304,
+        TOKEN_TCP_KEEPALIVE = 305,
+        TOKEN_TCP_NODELAY = 306,
+        TOKEN_VALID_LIFETIME = 307,
+        TOKEN_RENEW_TIMER = 308,
+        TOKEN_REBIND_TIMER = 309,
+        TOKEN_DECLINE_PROBATION_PERIOD = 310,
+        TOKEN_SUBNET4 = 311,
+        TOKEN_SUBNET_4O6_INTERFACE = 312,
+        TOKEN_SUBNET_4O6_INTERFACE_ID = 313,
+        TOKEN_SUBNET_4O6_SUBNET = 314,
+        TOKEN_OPTION_DEF = 315,
+        TOKEN_OPTION_DATA = 316,
+        TOKEN_NAME = 317,
+        TOKEN_DATA = 318,
+        TOKEN_CODE = 319,
+        TOKEN_SPACE = 320,
+        TOKEN_CSV_FORMAT = 321,
+        TOKEN_ALWAYS_SEND = 322,
+        TOKEN_RECORD_TYPES = 323,
+        TOKEN_ENCAPSULATE = 324,
+        TOKEN_ARRAY = 325,
+        TOKEN_SHARED_NETWORKS = 326,
+        TOKEN_POOLS = 327,
+        TOKEN_POOL = 328,
+        TOKEN_USER_CONTEXT = 329,
+        TOKEN_COMMENT = 330,
+        TOKEN_SUBNET = 331,
+        TOKEN_INTERFACE = 332,
+        TOKEN_ID = 333,
+        TOKEN_RESERVATION_MODE = 334,
+        TOKEN_DISABLED = 335,
+        TOKEN_OUT_OF_POOL = 336,
+        TOKEN_GLOBAL = 337,
+        TOKEN_ALL = 338,
+        TOKEN_HOST_RESERVATION_IDENTIFIERS = 339,
+        TOKEN_CLIENT_CLASSES = 340,
+        TOKEN_REQUIRE_CLIENT_CLASSES = 341,
+        TOKEN_TEST = 342,
+        TOKEN_ONLY_IF_REQUIRED = 343,
+        TOKEN_CLIENT_CLASS = 344,
+        TOKEN_RESERVATIONS = 345,
+        TOKEN_DUID = 346,
+        TOKEN_HW_ADDRESS = 347,
+        TOKEN_CIRCUIT_ID = 348,
+        TOKEN_CLIENT_ID = 349,
+        TOKEN_HOSTNAME = 350,
+        TOKEN_FLEX_ID = 351,
+        TOKEN_RELAY = 352,
+        TOKEN_IP_ADDRESS = 353,
+        TOKEN_IP_ADDRESSES = 354,
+        TOKEN_HOOKS_LIBRARIES = 355,
+        TOKEN_LIBRARY = 356,
+        TOKEN_PARAMETERS = 357,
+        TOKEN_EXPIRED_LEASES_PROCESSING = 358,
+        TOKEN_RECLAIM_TIMER_WAIT_TIME = 359,
+        TOKEN_FLUSH_RECLAIMED_TIMER_WAIT_TIME = 360,
+        TOKEN_HOLD_RECLAIMED_TIME = 361,
+        TOKEN_MAX_RECLAIM_LEASES = 362,
+        TOKEN_MAX_RECLAIM_TIME = 363,
+        TOKEN_UNWARNED_RECLAIM_CYCLES = 364,
+        TOKEN_DHCP4O6_PORT = 365,
+        TOKEN_CONTROL_SOCKET = 366,
+        TOKEN_SOCKET_TYPE = 367,
+        TOKEN_SOCKET_NAME = 368,
+        TOKEN_DHCP_DDNS = 369,
+        TOKEN_ENABLE_UPDATES = 370,
+        TOKEN_QUALIFYING_SUFFIX = 371,
+        TOKEN_SERVER_IP = 372,
+        TOKEN_SERVER_PORT = 373,
+        TOKEN_SENDER_IP = 374,
+        TOKEN_SENDER_PORT = 375,
+        TOKEN_MAX_QUEUE_SIZE = 376,
+        TOKEN_NCR_PROTOCOL = 377,
+        TOKEN_NCR_FORMAT = 378,
+        TOKEN_ALWAYS_INCLUDE_FQDN = 379,
+        TOKEN_OVERRIDE_NO_UPDATE = 380,
+        TOKEN_OVERRIDE_CLIENT_UPDATE = 381,
+        TOKEN_REPLACE_CLIENT_NAME = 382,
+        TOKEN_GENERATED_PREFIX = 383,
+        TOKEN_TCP = 384,
+        TOKEN_JSON = 385,
+        TOKEN_WHEN_PRESENT = 386,
+        TOKEN_NEVER = 387,
+        TOKEN_ALWAYS = 388,
+        TOKEN_WHEN_NOT_PRESENT = 389,
+        TOKEN_HOSTNAME_CHAR_SET = 390,
+        TOKEN_HOSTNAME_CHAR_REPLACEMENT = 391,
+        TOKEN_LOGGING = 392,
+        TOKEN_LOGGERS = 393,
+        TOKEN_OUTPUT_OPTIONS = 394,
+        TOKEN_OUTPUT = 395,
+        TOKEN_DEBUGLEVEL = 396,
+        TOKEN_SEVERITY = 397,
+        TOKEN_FLUSH = 398,
+        TOKEN_MAXSIZE = 399,
+        TOKEN_MAXVER = 400,
+        TOKEN_DHCP6 = 401,
+        TOKEN_DHCPDDNS = 402,
+        TOKEN_CONTROL_AGENT = 403,
+        TOKEN_TOPLEVEL_JSON = 404,
+        TOKEN_TOPLEVEL_DHCP4 = 405,
+        TOKEN_SUB_DHCP4 = 406,
+        TOKEN_SUB_INTERFACES4 = 407,
+        TOKEN_SUB_SUBNET4 = 408,
+        TOKEN_SUB_POOL4 = 409,
+        TOKEN_SUB_RESERVATION = 410,
+        TOKEN_SUB_OPTION_DEFS = 411,
+        TOKEN_SUB_OPTION_DEF = 412,
+        TOKEN_SUB_OPTION_DATA = 413,
+        TOKEN_SUB_HOOKS_LIBRARY = 414,
+        TOKEN_SUB_DHCP_DDNS = 415,
+        TOKEN_SUB_LOGGING = 416,
+        TOKEN_SUB_CONFIG_CONTROL = 417,
+        TOKEN_STRING = 418,
+        TOKEN_INTEGER = 419,
+        TOKEN_FLOAT = 420,
+        TOKEN_BOOLEAN = 421
       };
     };
 
@@ -659,6 +662,14 @@ namespace isc { namespace dhcp {
     symbol_type
     make_DHCP4 (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);
@@ -1255,6 +1266,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);
@@ -1442,8 +1457,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.
@@ -1472,18 +1485,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_ = 956,     ///< Last index in yytable_.
-      yynnts_ = 360,  ///< Number of nonterminal symbols.
-      yyfinal_ = 28, ///< Termination state number.
+      yylast_ = 981,     ///< Last index in yytable_.
+      yynnts_ = 370,  ///< Number of nonterminal symbols.
+      yyfinal_ = 30, ///< Termination state number.
       yyterror_ = 1,
       yyerrcode_ = 256,
-      yyntokens_ = 164  ///< Number of tokens.
+      yyntokens_ = 167  ///< Number of tokens.
     };
 
 
@@ -1541,14 +1554,15 @@ namespace isc { namespace dhcp {
      125,   126,   127,   128,   129,   130,   131,   132,   133,   134,
      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
+     155,   156,   157,   158,   159,   160,   161,   162,   163,   164,
+     165,   166
     };
-    const unsigned user_token_number_max_ = 418;
+    const unsigned int user_token_number_max_ = 421;
     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_;
@@ -1562,42 +1576,44 @@ namespace isc { namespace dhcp {
 
   // basic_symbol.
   template <typename Base>
+  inline
   Dhcp4Parser::basic_symbol<Base>::basic_symbol ()
     : value ()
   {}
 
   template <typename Base>
+  inline
   Dhcp4Parser::basic_symbol<Base>::basic_symbol (const basic_symbol& other)
     : Base (other)
     , value ()
     , location (other.location)
   {
-    switch (other.type_get ())
+      switch (other.type_get ())
     {
-      case 179: // value
-      case 183: // map_value
-      case 221: // socket_type
-      case 224: // outbound_interface_value
-      case 246: // db_type
-      case 328: // hr_mode
-      case 475: // ncr_protocol_value
-      case 483: // replace_client_name_value
+      case 183: // value
+      case 187: // map_value
+      case 225: // socket_type
+      case 228: // outbound_interface_value
+      case 250: // db_type
+      case 332: // hr_mode
+      case 479: // ncr_protocol_value
+      case 487: // replace_client_name_value
         value.copy< ElementPtr > (other.value);
         break;
 
-      case 163: // "boolean"
+      case 166: // "boolean"
         value.copy< bool > (other.value);
         break;
 
-      case 162: // "floating point"
+      case 165: // "floating point"
         value.copy< double > (other.value);
         break;
 
-      case 161: // "integer"
+      case 164: // "integer"
         value.copy< int64_t > (other.value);
         break;
 
-      case 160: // "constant string"
+      case 163: // "constant string"
         value.copy< std::string > (other.value);
         break;
 
@@ -1607,39 +1623,41 @@ namespace isc { namespace dhcp {
 
   }
 
+
   template <typename Base>
+  inline
   Dhcp4Parser::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 179: // value
-      case 183: // map_value
-      case 221: // socket_type
-      case 224: // outbound_interface_value
-      case 246: // db_type
-      case 328: // hr_mode
-      case 475: // ncr_protocol_value
-      case 483: // replace_client_name_value
+      case 183: // value
+      case 187: // map_value
+      case 225: // socket_type
+      case 228: // outbound_interface_value
+      case 250: // db_type
+      case 332: // hr_mode
+      case 479: // ncr_protocol_value
+      case 487: // replace_client_name_value
         value.copy< ElementPtr > (v);
         break;
 
-      case 163: // "boolean"
+      case 166: // "boolean"
         value.copy< bool > (v);
         break;
 
-      case 162: // "floating point"
+      case 165: // "floating point"
         value.copy< double > (v);
         break;
 
-      case 161: // "integer"
+      case 164: // "integer"
         value.copy< int64_t > (v);
         break;
 
-      case 160: // "constant string"
+      case 163: // "constant string"
         value.copy< std::string > (v);
         break;
 
@@ -1695,12 +1713,14 @@ namespace isc { namespace dhcp {
 
 
   template <typename Base>
+  inline
   Dhcp4Parser::basic_symbol<Base>::~basic_symbol ()
   {
     clear ();
   }
 
   template <typename Base>
+  inline
   void
   Dhcp4Parser::basic_symbol<Base>::clear ()
   {
@@ -1715,32 +1735,32 @@ namespace isc { namespace dhcp {
     }
 
     // Type destructor.
-  switch (yytype)
+    switch (yytype)
     {
-      case 179: // value
-      case 183: // map_value
-      case 221: // socket_type
-      case 224: // outbound_interface_value
-      case 246: // db_type
-      case 328: // hr_mode
-      case 475: // ncr_protocol_value
-      case 483: // replace_client_name_value
+      case 183: // value
+      case 187: // map_value
+      case 225: // socket_type
+      case 228: // outbound_interface_value
+      case 250: // db_type
+      case 332: // hr_mode
+      case 479: // ncr_protocol_value
+      case 487: // replace_client_name_value
         value.template destroy< ElementPtr > ();
         break;
 
-      case 163: // "boolean"
+      case 166: // "boolean"
         value.template destroy< bool > ();
         break;
 
-      case 162: // "floating point"
+      case 165: // "floating point"
         value.template destroy< double > ();
         break;
 
-      case 161: // "integer"
+      case 164: // "integer"
         value.template destroy< int64_t > ();
         break;
 
-      case 160: // "constant string"
+      case 163: // "constant string"
         value.template destroy< std::string > ();
         break;
 
@@ -1752,6 +1772,7 @@ namespace isc { namespace dhcp {
   }
 
   template <typename Base>
+  inline
   bool
   Dhcp4Parser::basic_symbol<Base>::empty () const
   {
@@ -1759,36 +1780,37 @@ namespace isc { namespace dhcp {
   }
 
   template <typename Base>
+  inline
   void
   Dhcp4Parser::basic_symbol<Base>::move (basic_symbol& s)
   {
-    super_type::move (s);
-    switch (this->type_get ())
+    super_type::move(s);
+      switch (this->type_get ())
     {
-      case 179: // value
-      case 183: // map_value
-      case 221: // socket_type
-      case 224: // outbound_interface_value
-      case 246: // db_type
-      case 328: // hr_mode
-      case 475: // ncr_protocol_value
-      case 483: // replace_client_name_value
+      case 183: // value
+      case 187: // map_value
+      case 225: // socket_type
+      case 228: // outbound_interface_value
+      case 250: // db_type
+      case 332: // hr_mode
+      case 479: // ncr_protocol_value
+      case 487: // replace_client_name_value
         value.move< ElementPtr > (s.value);
         break;
 
-      case 163: // "boolean"
+      case 166: // "boolean"
         value.move< bool > (s.value);
         break;
 
-      case 162: // "floating point"
+      case 165: // "floating point"
         value.move< double > (s.value);
         break;
 
-      case 161: // "integer"
+      case 164: // "integer"
         value.move< int64_t > (s.value);
         break;
 
-      case 160: // "constant string"
+      case 163: // "constant string"
         value.move< std::string > (s.value);
         break;
 
@@ -1863,7 +1885,7 @@ 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
+     415,   416,   417,   418,   419,   420,   421
     };
     return static_cast<token_type> (yytoken_number_[type]);
   }
@@ -1922,6 +1944,18 @@ namespace isc { namespace dhcp {
     return symbol_type (token::TOKEN_DHCP4, l);
   }
 
+  Dhcp4Parser::symbol_type
+  Dhcp4Parser::make_CONFIG_CONTROL (const location_type& l)
+  {
+    return symbol_type (token::TOKEN_CONFIG_CONTROL, l);
+  }
+
+  Dhcp4Parser::symbol_type
+  Dhcp4Parser::make_CONFIG_DATABASES (const location_type& l)
+  {
+    return symbol_type (token::TOKEN_CONFIG_DATABASES, l);
+  }
+
   Dhcp4Parser::symbol_type
   Dhcp4Parser::make_INTERFACES_CONFIG (const location_type& l)
   {
@@ -2816,6 +2850,12 @@ namespace isc { namespace dhcp {
     return symbol_type (token::TOKEN_SUB_LOGGING, l);
   }
 
+  Dhcp4Parser::symbol_type
+  Dhcp4Parser::make_SUB_CONFIG_CONTROL (const location_type& l)
+  {
+    return symbol_type (token::TOKEN_SUB_CONFIG_CONTROL, l);
+  }
+
   Dhcp4Parser::symbol_type
   Dhcp4Parser::make_STRING (const std::string& v, const location_type& l)
   {
@@ -2841,9 +2881,9 @@ namespace isc { namespace dhcp {
   }
 
 
-#line 14 "dhcp4_parser.yy" // lalr1.cc:379
+#line 14 "dhcp4_parser.yy" // lalr1.cc:377
 } } // isc::dhcp
-#line 2847 "dhcp4_parser.h" // lalr1.cc:379
+#line 2887 "dhcp4_parser.h" // lalr1.cc:377
 
 
 
index 10301f8c158e759d43583532702225073b91d43d..a6b5bde59239c647223b9717b1e05fd3d138ed67 100644 (file)
@@ -50,6 +50,8 @@ using namespace std;
   NULL_TYPE "null"
 
   DHCP4 "Dhcp4"
+  CONFIG_CONTROL "config-control"
+  CONFIG_DATABASES "config-databases"
   INTERFACES_CONFIG "interfaces-config"
   INTERFACES "interfaces"
   DHCP_SOCKET_TYPE "dhcp-socket-type"
@@ -220,6 +222,7 @@ using namespace std;
   SUB_HOOKS_LIBRARY
   SUB_DHCP_DDNS
   SUB_LOGGING
+  SUB_CONFIG_CONTROL
 ;
 
 %token <std::string> STRING "constant string"
@@ -258,6 +261,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 ---------------------------------
@@ -453,6 +457,7 @@ global_param: valid_lifetime
             | comment
             | sanity_checks
             | reservations
+            | config_control
             | unknown_map_entry
             ;
 
@@ -2010,6 +2015,55 @@ control_agent_json_object: CONTROL_AGENT {
     ctx.leave();
 };
 
+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 -----------------------------------------
 
 // This defines the top level "Logging" object. It parses
index 1f6391980e1b8a93410b1e7136988ed5de7e96e0..88eea26210e2bc67b9b2965f9c6c6d135da9726f 100644 (file)
@@ -28,6 +28,7 @@
 #include <dhcpsrv/parsers/sanity_checks_parser.h>
 #include <dhcpsrv/host_data_source_factory.h>
 #include <dhcpsrv/timer_mgr.h>
+#include <process/config_ctl_parser.h>
 #include <hooks/hooks_parser.h>
 #include <config/command_mgr.h>
 #include <util/encode/hex.h>
@@ -494,6 +495,13 @@ configureDhcp4Server(Dhcpv4Srv& 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, echo-client-id,
index ab01a9211e27b46659ffef809557324ebdc6c2c6..7e23a2ccac4e6235bff281bd9ffdb2365482b554 100644 (file)
@@ -1,9 +1,8 @@
-// Generated 201809140750
-// 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
@@ -41,9 +40,9 @@
 
 # include "position.hh"
 
-#line 14 "dhcp4_parser.yy" // location.cc:292
+#line 14 "dhcp4_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
   {
@@ -53,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;
@@ -171,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
@@ -184,7 +186,7 @@ namespace isc { namespace dhcp {
     return ostr;
   }
 
-#line 14 "dhcp4_parser.yy" // location.cc:292
+#line 14 "dhcp4_parser.yy" // location.cc:296
 } } // isc::dhcp
-#line 189 "location.hh" // location.cc:292
+#line 192 "location.hh" // location.cc:296
 #endif // !YY_PARSER4_LOCATION_HH_INCLUDED
index b5770d9a4df11dc978f337db8ca5e92af717d5fa..6cee5fc567f0e93ec8f9d39c0fc61b0d7429d514 100644 (file)
@@ -196,6 +196,10 @@ Parser4Context::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 00e77cfae8b6ae1f72f0d08868d0e43a9a1e43f3..9c7dd782e82fa92b8bee4c48aef364dd1ee46257 100644 (file)
@@ -292,7 +292,13 @@ public:
         NCR_FORMAT,
 
         /// Used while parsing Dhcp4/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 e369da470b86e4243e5e306ebe0340b773c39427..c60fabbdf87798eaaf77c5d851308166f1c29ecc 100644 (file)
@@ -1,9 +1,8 @@
-// Generated 201809140750
-// 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 "dhcp4_parser.yy" // location.cc:292
+#line 14 "dhcp4_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;
@@ -100,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);
     }
@@ -174,7 +174,7 @@ namespace isc { namespace dhcp {
     return ostr << pos.line << '.' << pos.column;
   }
 
-#line 14 "dhcp4_parser.yy" // location.cc:292
+#line 14 "dhcp4_parser.yy" // location.cc:296
 } } // isc::dhcp
-#line 179 "position.hh" // location.cc:292
+#line 180 "position.hh" // location.cc:296
 #endif // !YY_PARSER4_POSITION_HH_INCLUDED
index 51ffd7f7cf90a47d2f7d25fe96409f69ef931211..3dd2a2a3934851424d45b935573ab2e9e83f07a8 100644 (file)
@@ -1,9 +1,8 @@
-// Generated 201809140750
-// 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 "dhcp4_parser.yy" // stack.hh:131
+#line 14 "dhcp4_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
   {
@@ -59,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];
     }
@@ -84,6 +78,7 @@ namespace isc { namespace dhcp {
     /// Steal the contents of \a t.
     ///
     /// Close to move-semantics.
+    inline
     void
     push (T& t)
     {
@@ -91,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 ();
@@ -104,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
     {
@@ -134,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 "dhcp4_parser.yy" // stack.hh:131
+#line 14 "dhcp4_parser.yy" // stack.hh:132
 } } // isc::dhcp
-#line 155 "stack.hh" // stack.hh:131
+#line 156 "stack.hh" // stack.hh:132
 
 #endif // !YY_PARSER4_STACK_HH_INCLUDED
index 2335fd2bb230bed455ef65ce4823e07f6e9cdc35..a100e5e7dcbb76a3501c8b15fd31e4e8429a0c78 100644 (file)
@@ -25,6 +25,7 @@
 #include <dhcpsrv/cfg_hosts.h>
 #include <dhcpsrv/cfg_subnets4.h>
 #include <dhcpsrv/testutils/config_result_check.h>
+#include <process/config_ctl_info.h>
 #include <hooks/hooks_manager.h>
 
 #include "marker_file.h"
@@ -153,7 +154,7 @@ const char* PARSER_CONFIGS[] = {
     "    ]"
     "}",
 
-    // Last Configuration for comments
+    // Configuration 5 for comments
     "{"
     "    \"comment\": \"A DHCPv4 server\","
     "    \"interfaces-config\": {"
@@ -227,7 +228,31 @@ const char* PARSER_CONFIGS[] = {
     "        \"comment\": \"No dynamic DNS\","
     "        \"enable-updates\": false"
     "    }"
-    "}"
+    "}",
+
+    // Configuration 6: config databases
+    "{ \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"
 };
 
 class Dhcp4ParserTest : public ::testing::Test {
@@ -6233,4 +6258,28 @@ TEST_F(Dhcp4ParserTest, globalReservations) {
     EXPECT_FALSE(hosts_cfg->get4(542, Host::IDENT_DUID, &duid[0], duid.size()));
 }
 
+// This test verifies that configuration control info gets populated.
+TEST_F(Dhcp4ParserTest, configControlInfo) {
+    string config = PARSER_CONFIGS[6];
+    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());
+}
+
 }