]> git.ipfire.org Git - thirdparty/kea.git/commitdiff
[#35,!517] Rework kea-dhcp4 parsing and server
authorThomas Markwalder <tmark@isc.org>
Thu, 3 Oct 2019 19:11:07 +0000 (15:11 -0400)
committerThomas Markwalder <tmark@isc.org>
Thu, 10 Oct 2019 12:32:44 +0000 (08:32 -0400)
src/bin/dhcp4/ctrl_dhcp4_srv.cc
    Removed setting D2ClientCfg fetch function

src/bin/dhcp4/dhcp4_lexer.ll
src/bin/dhcp4/dhcp4_parser.yy
    ddns-send-updates
    ddns-override-no-update
    ddns-override-client-update
    ddns-replace-client-name
    ddns-generated-prefix
    ddns-qualifying-suffix
        - added to DHCP4,SHARED_NETWORK,SUBNET4

    hostname-char-set
    hostname-char-replacement
        - added to SHARED_NETWORK,SUBNET4

src/bin/dhcp4/dhcp4_srv.cc

    Dhcpv4Srv::processClientFqdnOption()
    Dhcpv4Srv::processHostnameOption()
    Dhcpv4Srv::assignLease()
        Use scoped DdnsParams from context to make decisions, pass
        into D2ClientMgr functions, and supply hostname sanitizer

src/bin/dhcp4/json_config_parser.cc
    configureDhcp4Server()
    - use SrvConfig::moveDdnsParams() to move dhcp-ddns parameters
    - handle new "ddns-" globals

src/bin/dhcp4/tests/config_parser_unittest.cc
src/bin/dhcp4/tests/d2_unittest.cc
src/bin/dhcp4/tests/dhcp4_test_utils.cc
src/bin/dhcp4/tests/fqdn_unittest.cc
src/bin/dhcp4/tests/get_config_unittest.cc
    Updated and new tests

16 files changed:
src/bin/dhcp4/ctrl_dhcp4_srv.cc
src/bin/dhcp4/dhcp4_lexer.cc
src/bin/dhcp4/dhcp4_lexer.ll
src/bin/dhcp4/dhcp4_parser.cc
src/bin/dhcp4/dhcp4_parser.h
src/bin/dhcp4/dhcp4_parser.yy
src/bin/dhcp4/dhcp4_srv.cc
src/bin/dhcp4/json_config_parser.cc
src/bin/dhcp4/location.hh
src/bin/dhcp4/position.hh
src/bin/dhcp4/stack.hh
src/bin/dhcp4/tests/config_parser_unittest.cc
src/bin/dhcp4/tests/d2_unittest.cc
src/bin/dhcp4/tests/dhcp4_test_utils.cc
src/bin/dhcp4/tests/fqdn_unittest.cc
src/bin/dhcp4/tests/get_config_unittest.cc

index 591427c54916e76bcab5ef46b4026bb299700a82..4c8d33ab808e6ad6dc473d607447b35335d633be 100644 (file)
@@ -374,12 +374,6 @@ ControlledDhcpv4Srv::commandConfigSetHandler(const string&,
     if (rcode == 0) {
         CfgMgr::instance().getStagingCfg()->applyLoggingCfg();
 
-        // Update the fetch globals callback.
-        auto cfg = CfgMgr::instance().getStagingCfg()->getD2ClientConfig();
-        cfg->setFetchGlobalsFn([]() -> ConstElementPtr {
-            return (CfgMgr::instance().getCurrentCfg()->getConfiguredGlobals());
-        });
-
         // Use new configuration.
         CfgMgr::instance().commit();
     } else {
index 5801017ad41f6a9a2d0f65d6bec6c293cd4d0621..9d340f7a3aa039d87a0a5ec11a03f13b9049a05b 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 185
-#define YY_END_OF_BUFFER 186
+#define YY_NUM_RULES 191
+#define YY_END_OF_BUFFER 192
 /* This struct is not used in this scanner,
    but its presence is necessary. */
 struct yy_trans_info
@@ -700,184 +700,196 @@ struct yy_trans_info
        flex_int32_t yy_verify;
        flex_int32_t yy_nxt;
        };
-static const flex_int16_t yy_accept[1597] =
+static const flex_int16_t yy_accept[1702] =
     {   0,
-      178,  178,    0,    0,    0,    0,    0,    0,    0,    0,
-      186,  184,   10,   11,  184,    1,  178,  175,  178,  178,
-      184,  177,  176,  184,  184,  184,  184,  184,  171,  172,
-      184,  184,  184,  173,  174,    5,    5,    5,  184,  184,
-      184,   10,   11,    0,    0,  167,    0,    0,    0,    0,
+      184,  184,    0,    0,    0,    0,    0,    0,    0,    0,
+      192,  190,   10,   11,  190,    1,  184,  181,  184,  184,
+      190,  183,  182,  190,  190,  190,  190,  190,  177,  178,
+      190,  190,  190,  179,  180,    5,    5,    5,  190,  190,
+      190,   10,   11,    0,    0,  173,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    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,
-      178,  178,    0,  177,  178,    3,    2,    6,    0,  178,
+      184,  184,    0,  183,  184,    3,    2,    6,    0,  184,
         0,    0,    0,    0,    0,    0,    4,    0,    0,    9,
 
-        0,  168,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,  170,    0,    0,    0,
+        0,  174,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,  176,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    2,    0,    0,    0,    0,    0,    0,    0,
-        8,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    2,    0,    0,    0,    0,    0,    0,
+        0,    8,    0,    0,    0,    0,    0,    0,    0,    0,
 
-        0,    0,    0,    0,    0,  169,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,  175,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,   73,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+       79,    0,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,  183,  181,    0,  180,
+        0,    0,    0,    0,    0,    0,    0,    0,  189,  187,
 
-      179,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,  147,    0,  146,    0,    0,   79,    0,    0,    0,
+        0,  186,  185,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,  153,    0,  152,    0,    0,   85,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-       35,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,   35,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,   76,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,   17,    0,    0,    0,    0,    0,    0,    0,
+       82,    0,    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,    0,   18,    0,
-        0,    0,    0,  182,  179,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,  148,    0,    0,  150,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,   80,    0,
-        0,    0,    0,    0,    0,    0,   65,    0,    0,    0,
-        0,    0,  101,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,   38,    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,    0,    0,    0,    0,   68,    0,
+        0,   18,    0,    0,    0,    0,  188,  185,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,  154,    0,
+        0,  156,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,   86,    0,    0,    0,    0,    0,    0,    0,   71,
+        0,    0,    0,    0,    0,    0,  107,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,   38,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,   70,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
 
-       39,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,   74,    0,   39,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,   98,
-       31,    0,    0,   36,    0,    0,    0,    0,    0,    0,
-        0,    0,   12,  155,    0,  152,    0,  151,    0,    0,
-        0,  111,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,  104,   31,    0,    0,   36,    0,    0,
+        0,    0,    0,    0,    0,    0,   12,  161,    0,  158,
+        0,  157,    0,    0,    0,  117,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,   90,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,   96,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
 
-        0,    0,   33,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,   67,    0,    0,    0,
-        0,    0,    0,    0,    0,  112,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,  107,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,    7,
-        0,    0,  153,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,   33,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,   73,    0,    0,    0,    0,
+        0,    0,    0,    0,  118,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,  113,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,    7,    0,
+        0,  159,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,   78,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,   84,
 
-        0,    0,    0,    0,    0,    0,   92,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,   88,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,   71,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,   85,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,   70,    0,
+       98,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+       94,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,   77,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,  105,    0,
+        0,    0,   91,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,   76,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
 
-        0,    0,    0,  117,   86,    0,    0,    0,    0,    0,
-        0,   91,   32,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,   93,   40,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,  111,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,  123,   92,    0,    0,    0,    0,    0,    0,
+       97,   32,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,   99,   40,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,   60,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,  156,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,   75,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,  106,
+        0,    0,   66,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,  162,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
 
-        0,    0,    0,    0,    0,   43,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,   37,    0,    0,
-        0,   30,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,   81,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,  112,    0,    0,    0,    0,    0,   43,
         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,    0,    0,    0,    0,    0,
-        0,    0,    0,  103,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,  130,    0,    0,    0,    0,    0,
+        0,   37,    0,    0,    0,   30,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,  100,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,  109,    0,    0,
 
-       72,    0,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,   23,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,  135,
-        0,    0,    0,  133,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,  160,    0,
-        0,    0,    0,    0,    0,    0,  104,    0,    0,    0,
-        0,    0,    0,    0,    0,  108,   89,    0,    0,    0,
+        0,    0,    0,  136,    0,    0,    0,    0,    0,    0,
+        0,    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,    0,    0,    0,    0,    0,   23,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,  141,    0,
+        0,    0,  139,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,  166,    0,    0,
+        0,    0,    0,    0,    0,  110,    0,    0,    0,    0,
+
+        0,    0,    0,    0,  114,    0,    0,    0,    0,    0,
+       95,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,  108,   22,    0,  119,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,  102,   22,    0,  113,    0,    0,    0,    0,
+        0,  145,    0,    0,    0,    0,   68,    0,    0,    0,
+        0,    0,  122,   34,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+       59,    0,    0,    0,   89,   90,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,   72,    0,    0,    0,
+        0,    0,    0,    0,    0,   44,    0,    0,    0,    0,
 
-        0,    0,    0,    0,    0,    0,    0,  139,    0,    0,
-        0,    0,   62,    0,    0,    0,    0,    0,  116,   34,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,  116,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,   59,    0,    0,    0,
-       83,   84,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,   66,    0,    0,    0,    0,    0,    0,    0,
-        0,   44,    0,    0,    0,    0,    0,    0,    0,    0,
-      110,    0,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,  164,    0,   63,   77,    0,    0,    0,    0,
-
-        0,    0,    0,    0,    0,   56,    0,    0,    0,    0,
-        0,    0,    0,  136,    0,    0,  134,    0,  128,  127,
-        0,   49,    0,   21,    0,    0,    0,    0,    0,  149,
-        0,    0,    0,   97,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,  125,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,  114,   15,    0,   41,
-        0,    0,    0,    0,    0,    0,    0,    0,  138,    0,
-        0,    0,    0,    0,    0,   57,    0,    0,  109,    0,
-        0,    0,    0,  100,    0,    0,    0,    0,    0,    0,
-        0,   69,    0,  158,    0,  157,    0,  163,    0,    0,
+        0,  170,    0,   69,   83,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,   56,    0,    0,    0,    0,    0,
+        0,    0,  142,    0,    0,  140,    0,  134,  133,    0,
+       49,    0,   21,    0,    0,    0,    0,    0,  155,    0,
+        0,    0,  103,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,  131,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
 
+      120,   15,    0,   41,    0,    0,    0,    0,    0,    0,
+        0,    0,  144,    0,    0,    0,    0,    0,    0,   57,
+        0,    0,  115,    0,    0,    0,    0,  106,    0,    0,
+        0,    0,    0,    0,    0,   75,    0,  164,    0,  163,
+        0,  169,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    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,    0,   48,    0,    0,
-        0,    0,  166,    0,   95,   27,    0,    0,    0,   50,
-      126,    0,    0,    0,  161,  131,    0,    0,    0,    0,
-        0,    0,    0,    0,   25,    0,    0,   24,    0,  137,
-        0,    0,    0,   52,    0,    0,    0,    0,   87,    0,
+        0,    0,   14,    0,    0,    0,   48,    0,    0,    0,
+
+        0,  172,    0,  101,   27,    0,    0,    0,   50,  132,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,  167,
+      137,    0,    0,    0,    0,    0,    0,    0,    0,   25,
+        0,    0,   24,    0,  143,    0,    0,    0,   52,    0,
+        0,    0,    0,   93,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,   53,    0,
+        0,    0,    0,    0,   42,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,  121,    0,
+        0,    0,   26,    0,  168,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,   47,    0,
+
+        0,   20,    0,  171,   67,    0,  165,  160,    0,   28,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,   16,
+        0,    0,  149,    0,    0,    0,    0,    0,    0,  129,
+        0,    0,    0,  105,    0,    0,    0,    0,    0,    0,
+        0,    0,   80,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,   60,    0,    0,    0,    0,    0,    0,    0,
+      150,   13,    0,    0,    0,    0,    0,    0,    0,  138,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,  135,    0,    0,    0,    0,    0,
+      128,    0,   55,   54,   19,    0,  146,    0,    0,    0,
 
-        0,    0,    0,   53,    0,    0,    0,    0,    0,   42,
-        0,    0,    0,    0,    0,    0,    0,  115,    0,    0,
-        0,   26,    0,  162,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,   47,    0,    0,
-       20,    0,  165,   61,    0,  159,  154,    0,   28,    0,
-        0,    0,   16,    0,    0,  143,    0,    0,    0,    0,
-        0,    0,  123,    0,    0,    0,   99,    0,    0,    0,
-        0,    0,    0,    0,    0,   74,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,  144,   13,    0,
-        0,    0,    0,    0,    0,    0,  132,    0,    0,    0,
-
-        0,    0,    0,    0,    0,    0,  129,    0,    0,    0,
-        0,    0,  122,    0,   55,   54,   19,    0,  140,    0,
-        0,    0,    0,   45,    0,   82,    0,    0,    0,    0,
-      121,    0,    0,   51,    0,    0,   46,  142,    0,    0,
+        0,   45,    0,   88,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,  127,    0,    0,   51,    0,    0,   46,
+      148,    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,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-       29,    0,    0,    0,    0,    0,  141,    0,   96,    0,
-        0,    0,    0,    0,    0,  119,  124,   58,    0,    0,
-        0,    0,  118,    0,    0,  145,    0,    0,    0,    0,
-        0,   81,    0,    0,  120,    0
+        0,    0,    0,   29,    0,    0,   65,    0,    0,    0,
+        0,    0,    0,  147,    0,  102,    0,    0,   61,    0,
+        0,    0,    0,    0,    0,  125,  130,    0,   63,   58,
+        0,    0,    0,    0,    0,  124,    0,    0,  151,    0,
+        0,    0,   62,    0,    0,    0,   87,    0,    0,  126,
 
+        0
     } ;
 
 static const YY_CHAR yy_ec[256] =
@@ -924,386 +936,410 @@ static const YY_CHAR yy_meta[74] =
         3,    3,    3
     } ;
 
-static const flex_int16_t yy_base[1609] =
+static const flex_int16_t yy_base[1714] =
     {   0,
         0,   72,   21,   31,   43,   51,   54,   60,   91,   99,
-     1997, 1998,   34, 1993,  145,    0,  207, 1998,  214,  221,
-       13,  228, 1998, 1973,  118,   25,    2,    6, 1998, 1998,
-       73,   11,   17, 1998, 1998, 1998,  104, 1981, 1934,    0,
-     1971,  108, 1988,   24,  262, 1998, 1930,   67, 1929, 1935,
-       84,   75, 1927,   88,  226,   91,   89,  290,  196, 1926,
-      206,  285,  206,  210,  219,   60,  223, 1935,  247,  290,
-      315,  303,  231, 1918,  297,  321,  343,  324, 1937,    0,
-      380,  387,  401,  408,  424, 1998,    0, 1998,  429,  438,
-      216,  249,  220,  315,  335,  266, 1998, 1934, 1975, 1998,
-
-      342, 1998,  421, 1962,  312, 1920, 1930,  400,   10, 1925,
-      361,  323,  370,  387,  359, 1970,    0,  474,  392, 1912,
-     1909, 1913, 1915, 1908, 1916,  412, 1912, 1901, 1902,   78,
-     1918, 1901, 1910, 1910,   95, 1901,  400, 1902, 1900,  405,
-     1948, 1952, 1892, 1945, 1885, 1908, 1905, 1905, 1899,  310,
-     1892, 1890, 1884, 1889, 1883,  436, 1894, 1887, 1878, 1877,
-     1891,  413, 1877,  419, 1893, 1870,  470,  191,  400, 1891,
-     1888, 1889, 1887, 1922, 1921,  451, 1867, 1869,  472, 1861,
-     1878, 1870,    0,  471,  462,  446,  472,  473,  487, 1869,
-     1998,    0, 1914,  492, 1859, 1862,  475,  481, 1870,  499,
-
-     1915,  501, 1914,  509, 1913, 1998,  555, 1912,  519, 1871,
-     1863, 1850, 1866, 1865, 1862, 1861, 1852,  493, 1903, 1897,
-     1861, 1840, 1848, 1843, 1857, 1853, 1841, 1853, 1853, 1844,
-     1828, 1832, 1845, 1847, 1844, 1836, 1826, 1844, 1998, 1839,
-     1842, 1823, 1822, 1874, 1821, 1831, 1834,  483, 1830, 1869,
-     1817, 1828, 1866, 1811, 1869, 1804, 1819,  498, 1809, 1825,
-     1806, 1804, 1804, 1810, 1801, 1800, 1807, 1857, 1813, 1812,
-     1806,  486, 1813, 1808, 1800, 1790, 1805, 1804, 1799, 1803,
-      322, 1801, 1787, 1793, 1800, 1788, 1785, 1784,  542, 1779,
-     1793, 1836, 1795,  366, 1786,  527, 1998, 1998,  534, 1998,
-
-     1998, 1773,    0,  241,  515, 1775,  549,  536, 1831, 1782,
-      525, 1998, 1829, 1998, 1823,  593, 1998,  521, 1763, 1772,
-     1820, 1764, 1763, 1769, 1821, 1776, 1771, 1774, 1769,  530,
-     1998, 1771, 1815, 1768, 1765,  578, 1771, 1811, 1805, 1758,
-     1753, 1750, 1801, 1758, 1747, 1763, 1797, 1743,  586, 1757,
-     1742, 1755, 1742, 1752, 1747, 1754, 1749, 1745,  560, 1743,
-     1746, 1741, 1727, 1736, 1786,  513, 1780, 1998, 1779, 1729,
-     1728, 1727, 1720, 1722, 1726, 1715, 1732, 1727,  549, 1774,
-     1727, 1724, 1998, 1727, 1716, 1716, 1728,  531, 1703, 1704,
-     1725,  546, 1707, 1758, 1703, 1717, 1720, 1715, 1701, 1713,
-
-     1712, 1711, 1710, 1709, 1708,  556, 1751, 1750, 1998, 1692,
-     1691,  618, 1704, 1998, 1998, 1703,    0, 1692, 1684,  562,
-     1689, 1742, 1741, 1697, 1739, 1998, 1685, 1737, 1998,  596,
-      644,  589, 1736, 1678, 1689, 1682, 1684, 1672, 1998, 1677,
-     1683, 1686, 1669, 1684, 1671, 1670, 1998, 1672, 1669,  584,
-     1667, 1669, 1998, 1677, 1674, 1659, 1672, 1667,  625, 1674,
-     1662, 1655, 1706, 1998, 1653, 1669, 1703, 1664, 1661, 1662,
-     1664, 1698, 1649, 1644, 1643, 1694, 1638,  587, 1657, 1631,
-     1638, 1643, 1653, 1692, 1998, 1637, 1633, 1631, 1640, 1634,
-     1641, 1625, 1625, 1635, 1638, 1627, 1623, 1621, 1998, 1678,
-
-     1998, 1620, 1631, 1616, 1621, 1630, 1624, 1618, 1627, 1669,
-     1663, 1625, 1608, 1608, 1603, 1623, 1598, 1604, 1609, 1602,
-     1610, 1614, 1597, 1655, 1595, 1596, 1595, 1607, 1596, 1998,
-     1998, 1596, 1594, 1998, 1605, 1641, 1601,    0, 1585, 1602,
-     1642, 1590, 1998, 1998, 1587, 1998, 1593, 1998,  554,  600,
-      643, 1998, 1590, 1589, 1596, 1576, 1629, 1574, 1627, 1572,
-     1571, 1570, 1577, 1570, 1582, 1581, 1581, 1563, 1568, 1609,
-     1576, 1568, 1613, 1557, 1573, 1572, 1998, 1557, 1554, 1612,
-     1567, 1559, 1565, 1556, 1564, 1549, 1565, 1547, 1561,  603,
-     1543, 1537, 1542, 1557, 1554, 1555, 1534, 1544, 1550, 1593,
-
-     1548, 1540, 1998, 1533, 1535, 1544, 1542, 1581, 1580, 1531,
-       16, 1540, 1523, 1524, 1527, 1520, 1998, 1534, 1513, 1532,
-     1524, 1569, 1521, 1528, 1566, 1998, 1511, 1525, 1509, 1523,
-     1526, 1507, 1559, 1558, 1557, 1556, 1501, 1554, 1553, 1998,
-      328, 1515, 1514, 1511, 1511, 1509, 1492, 1497, 1499, 1998,
-     1505, 1495, 1998, 1542, 1488, 1545,  601,  629, 1486, 1484,
-     1491, 1482, 1535,  626, 1539,  627, 1533, 1493, 1531, 1530,
-     1482, 1472, 1527, 1478, 1486, 1487, 1523, 1484, 1478, 1465,
-     1473, 1518, 1522, 1477, 1476, 1998, 1477, 1470, 1459, 1472,
-     1475, 1470, 1471, 1468, 1467, 1463, 1469, 1464, 1507, 1506,
-
-     1454, 1444,  624, 1498, 1454, 1501, 1998, 1500, 1451, 1446,
-     1438, 1439, 1490, 1451, 1438,  171, 1998,  223,  340,  361,
-      384,  489,  504,  535,  578,  586,  594,  600,  662,  629,
-      617,  629,  674,  675,  676,  623,  678,  648,  643,  650,
-      646,  631,  643,  644, 1998,  699,  656,  658,  649,  662,
-      664,  649,  656,  662,  654,  668,  673,  714, 1998,  710,
-      686,  673,  678,  675,  676,  673,  671,  680, 1998,  670,
-      685,  682,  668,  675,  674,  672,  691,  688,  678,  676,
-      675,  686,  682,  738,  695,  685,  701,  691, 1998,  701,
-      702,  695,  706,  704,  749,  691,  693,  708,  695,  755,
-
-      712,  698,  701, 1998, 1998,  711,  716,  721,  709,  719,
-      721, 1998, 1998,  722,  726,  713,  707,  712,  730,  717,
-      767,  718,  770,  719,  777, 1998, 1998,  722,  726,  721,
-      781,  734,  724,  725,  721,  734,  745,  729,  747,  742,
-      743,  745,  738,  740,  741,  742,  742,  744,  759,  800,
-      757,  762,  739, 1998,  751,  752,  766,  756,  803,  761,
-      751,  766,  767,  754,  768, 1998,  787,  795,  764,  759,
-      814,  815,  778,  782,  823,  771,  766,  767,  779,  786,
-      775,  776,  772,  781,  776,  834,  791,  792,  783, 1998,
-      785,  797,  782,  799,  793,  840,  806,  790,  791, 1998,
-
-      807,  810,  793,  852,  795, 1998,  812,  815,  795,  813,
-      853,  811,  807,  804,  857,  858,  805,  823,  822,  823,
-      809,  824,  816,  823,  813,  831,  816, 1998,  824,  830,
-      877, 1998,  826,  831,  875,  826,  838,  832,  837,  835,
-      833,  835,  845,  890,  834,  839,  835,  894,  838,  850,
-     1998,  838,  846,  844,  841,  842,  851,  863,  847,  852,
-      862,  863,  868,  909,  867,  883,  888,  870,  867,  863,
-      858,  918,  861, 1998,  861,  881,  880,  871,  860,  877,
-      884,  927,  928,  875, 1998,  925,  872,  875,  874,  894,
-      891,  896,  897,  883,  891,  902,  882,  897,  904,  946,
-
-     1998,  947,  948,  899,  909,  911,  900,  896,  903,  912,
-      900,  907,  908,  960,  907,  905,  907,  924,  965,  915,
-      914,  920,  918,  916,  971,  972,  968, 1998,  930,  923,
-      914,  933,  921,  931,  928,  933,  929,  942,  942, 1998,
-      926,  928,  928, 1998,  929,  989,  928,  947,  949,  994,
-      995,  948,  933,  954,  953,  937,  942,  960, 1998,  950,
-      983,  974, 1006,  946,  968,  965, 1998,  952,  954,  971,
-      966,  970, 1015,  963,  967, 1998, 1998,  977,  977, 1015,
-      962, 1017,  964, 1024,  967,  978,  971,  977,  973,  991,
-      992,  994, 1998, 1998,  993, 1998,  978,  979,  998,  988,
-
-      981,  993, 1037, 1001,  990,  997,  998, 1998,  996, 1048,
-      989, 1050, 1998, 1051,  993,  999, 1006, 1050, 1998, 1998,
-      998, 1000, 1014, 1019, 1002, 1061, 1018, 1019, 1020, 1060,
-     1012, 1017, 1068, 1021, 1017, 1071, 1998, 1018, 1073, 1074,
-     1998, 1998, 1014, 1076, 1035, 1078, 1020, 1032, 1037, 1023,
-     1053, 1084, 1998, 1041, 1034, 1043, 1088, 1035, 1050, 1086,
-     1038, 1998, 1034, 1050, 1055, 1042, 1038, 1098, 1051, 1056,
-     1998, 1057, 1050, 1059, 1060, 1057, 1047, 1050, 1050, 1055,
-     1110, 1112, 1055, 1114, 1110, 1051, 1066, 1060, 1063, 1076,
-     1077, 1123, 1998, 1076, 1998, 1998, 1082, 1074, 1084, 1069,
-
-     1070, 1131, 1076, 1086, 1135, 1998, 1083, 1083, 1085, 1087,
-     1140, 1081, 1084, 1998, 1085, 1104, 1998, 1088, 1998, 1998,
-     1102, 1998, 1096, 1998, 1148, 1097, 1150, 1151, 1131, 1998,
-     1153, 1110, 1151, 1998, 1099, 1107, 1101, 1098, 1101, 1104,
-     1104, 1105, 1112, 1102, 1998, 1124, 1110, 1111, 1126, 1126,
-     1129, 1129, 1126, 1171, 1133, 1125, 1998, 1998, 1135, 1998,
-     1132, 1137, 1138, 1135, 1179, 1127, 1142, 1143, 1998, 1131,
-     1132, 1132, 1138, 1137, 1148, 1998, 1189, 1136, 1998, 1137,
-     1137, 1139, 1145, 1998, 1147, 1201, 1143, 1151, 1154, 1205,
-     1166, 1998, 1163, 1998, 1160, 1998, 1183, 1998, 1210, 1152,
-
-     1212, 1213, 1170, 1175, 1157, 1217, 1218, 1171, 1161, 1166,
-     1222, 1223, 1219, 1182, 1178, 1222, 1170, 1175, 1173, 1232,
-     1188, 1234, 1192, 1237, 1198, 1187, 1181, 1241, 1183, 1184,
-     1200, 1200, 1246, 1188, 1205, 1204, 1188, 1246, 1247, 1194,
-     1249, 1212, 1213, 1998, 1213, 1214, 1201, 1998, 1212, 1261,
-     1219, 1232, 1998, 1216, 1998, 1998, 1207, 1218, 1267, 1998,
-     1998, 1214, 1212, 1226, 1998, 1998, 1216, 1267, 1210, 1215,
-     1275, 1223, 1233, 1234, 1998, 1279, 1232, 1998, 1281, 1998,
-     1224, 1239, 1227, 1998, 1237, 1238, 1244, 1248, 1998, 1284,
-     1252, 1245, 1254, 1236, 1243, 1297, 1256, 1255, 1300, 1248,
-
-     1302, 1303, 1252, 1998, 1305, 1306, 1255, 1308, 1250, 1998,
-     1257, 1257, 1312, 1256, 1255, 1315, 1268, 1998, 1312, 1263,
-     1260, 1998, 1274, 1998, 1277, 1322, 1275, 1272, 1273, 1326,
-     1285, 1268, 1270, 1267, 1283, 1284, 1293, 1998, 1283, 1335,
-     1998, 1294, 1998, 1998, 1332, 1998, 1998, 1294, 1998, 1334,
-     1335, 1290, 1998, 1288, 1295, 1998, 1292, 1297, 1295, 1347,
-     1348, 1291, 1998, 1306, 1307, 1308, 1998, 1309, 1299, 1311,
-     1356, 1298, 1306, 1307, 1320, 1998, 1297, 1320, 1305, 1305,
-     1310, 1366, 1325, 1316, 1325, 1327, 1331, 1998, 1998, 1372,
-     1315, 1374, 1375, 1376, 1334, 1378, 1998, 1374, 1336, 1337,
-
-     1324, 1383, 1320, 1385, 1338, 1343, 1998, 1344, 1345, 1390,
-     1347, 1350, 1998, 1393, 1998, 1998, 1998, 1354, 1998, 1336,
-     1396, 1397, 1340, 1998, 1357, 1998, 1348, 1344, 1344, 1346,
-     1998, 1351, 1361, 1998, 1347, 1359, 1998, 1998, 1364, 1358,
-     1366, 1363, 1354, 1408, 1355, 1363, 1372, 1365, 1360, 1375,
-     1420, 1367, 1374, 1361, 1376, 1381, 1426, 1383, 1428, 1371,
-     1998, 1387, 1378, 1392, 1388, 1381, 1998, 1435, 1998, 1436,
-     1437, 1392, 1391, 1392, 1382, 1998, 1998, 1998, 1442, 1384,
-     1400, 1445, 1998, 1441, 1390, 1998, 1389, 1391, 1402, 1451,
-     1400, 1998, 1409, 1454, 1998, 1998, 1460, 1465, 1470, 1475,
-
-     1480, 1485, 1490, 1493, 1467, 1472, 1474, 1487
+     2102, 2103,   34, 2098,  145,    0,  207, 2103,  214,  221,
+       13,  228, 2103, 2078,  118,   25,    2,    6, 2103, 2103,
+       73,   11,   17, 2103, 2103, 2103,  104, 2086, 2039,    0,
+     2076,  108, 2093,   24,  262, 2103, 2035,   67, 2034, 2040,
+       84,   75, 2032,   88,  226,   91,   89,  290,  196, 2031,
+      206,  285,  206,  210,  219,   60,  223, 2040,  247,  290,
+      315,  303,  231, 2023,  297,  321,  343,  324, 2042,    0,
+      380,  387,  401,  408,  424, 2103,    0, 2103,  429,  438,
+      216,  249,  220,  315,  335,  266, 2103, 2039, 2080, 2103,
+
+      342, 2103,  421, 2067,  312, 2025, 2035,  400,   10, 2030,
+      361,  323,  370,  387,  359, 2075,    0,  474,  392, 2017,
+     2014, 2018, 2020, 2013, 2021,  412, 2017, 2006, 2007, 2012,
+       78, 2022, 2005, 2014, 2014,   95, 2005,  400, 2006, 2004,
+      405, 2052, 2056, 1996, 2049, 1989, 2012, 2009, 2009, 2003,
+      310, 1996, 1994, 1988, 1993, 1987,  436, 1998, 1991, 1982,
+     1981, 1995,  413, 1981,  419, 1997, 1974,  470,  191,  400,
+     1995, 1992, 1993, 1991, 2026, 2025,  451, 1971, 1973,  472,
+     1965, 1982, 1974,    0,  471,  462,  446,  472,  473,  487,
+     1973, 2103,    0, 2018,  492, 1963, 1966,  475,  481, 1974,
+
+      499, 2019,  501, 2018,  509, 2017, 2103,  555, 2016,  519,
+     1975, 1967, 1954, 1970, 1969, 1966, 1965, 1956,  493, 2007,
+     2001, 1965, 1946, 1943, 1951, 1946, 1960, 1956, 1944, 1956,
+     1956, 1947, 1931, 1935, 1948, 1950, 1947, 1939, 1929, 1947,
+     2103, 1942, 1945, 1926, 1925, 1977, 1924, 1934, 1937,  483,
+     1933, 1972, 1920, 1931, 1969, 1914, 1972, 1907, 1922,  498,
+     1912, 1928, 1909, 1907, 1907, 1913, 1904, 1903, 1910, 1960,
+     1916, 1915, 1909,  486, 1916, 1911, 1903, 1893, 1908, 1907,
+     1902, 1906,  322, 1904, 1890, 1896, 1903, 1891, 1888, 1887,
+      542, 1882, 1896, 1939, 1898,  366, 1889,  527, 2103, 2103,
+
+      534, 2103, 2103, 1876,    0,  241,  515, 1878,  549,  536,
+     1934, 1885,  525, 2103, 1932, 2103, 1926,  593, 2103,  521,
+     1866, 1875, 1923, 1867, 1866, 1872, 1924, 1879, 1874, 1877,
+     1872,  530, 2103, 1874, 1918, 1912, 1870, 1867,  578, 1873,
+     1913, 1907, 1860, 1855, 1852, 1903, 1860, 1849, 1865, 1899,
+     1845,  586, 1859, 1844, 1857, 1844, 1854, 1849, 1856, 1851,
+     1847,  560, 1845, 1848, 1843, 1829, 1838, 1888,  513, 1882,
+     2103, 1881, 1831, 1830, 1829, 1822, 1824, 1828, 1817, 1834,
+     1829,  549, 1876, 1829, 1826, 2103, 1829, 1818, 1818, 1830,
+      531, 1805, 1806, 1827,  546, 1809, 1860, 1805, 1819, 1822,
+
+     1817, 1803, 1815, 1814, 1813, 1812, 1811, 1810,  556, 1853,
+     1852, 2103, 1794, 1793,  618, 1806, 2103, 2103, 1805,    0,
+     1794, 1786,  562, 1791, 1844, 1843, 1799, 1841, 2103, 1787,
+     1839, 2103,  596,  644,  589, 1838, 1780, 1791, 1784, 1786,
+     1774, 2103, 1779, 1785, 1788, 1771, 1786, 1773, 1772, 2103,
+      613, 1774, 1771,  584, 1769, 1771, 2103, 1779, 1776, 1761,
+     1774, 1769,  625, 1776, 1764, 1757, 1808, 2103, 1755, 1771,
+     1805, 1766, 1763, 1764, 1766, 1800, 1751, 1746, 1745, 1796,
+     1740,  587, 1759, 1733, 1740, 1745, 1755, 1794, 2103, 1739,
+     1735, 1733, 1742, 1736, 1743, 1727, 1727, 1737, 1740, 1729,
+
+     1725, 1723, 2103, 1780, 2103, 1722, 1733, 1718, 1723, 1732,
+     1726, 1720, 1729, 1771, 1765, 1727, 1710, 1710, 1705, 1725,
+     1700, 1706, 1711, 1704, 1712, 1716, 1699, 1757, 1697, 1698,
+     1697, 1709, 1698, 2103, 2103, 1698, 1696, 2103, 1707, 1743,
+     1703,    0, 1687, 1704, 1744, 1692, 2103, 2103, 1689, 2103,
+     1695, 2103,  554,  600,  643, 2103, 1692, 1691, 1698, 1678,
+     1731, 1676, 1729, 1674, 1673, 1672, 1679, 1672, 1684, 1666,
+     1666, 1681, 1680, 1679, 1678, 1678, 1660, 1665, 1706, 1673,
+     1665, 1710, 1654, 1670, 1669, 2103, 1654, 1651, 1709, 1664,
+     1656, 1662, 1653, 1661, 1646, 1662, 1644, 1658,  603, 1640,
+
+     1634, 1639, 1654, 1651, 1652, 1631, 1641, 1647, 1690, 1645,
+     1637, 2103, 1630, 1632, 1641, 1639, 1678, 1677, 1628,   16,
+     1637, 1620, 1621, 1624, 1617, 2103, 1631, 1610, 1629, 1621,
+     1666, 1618, 1625, 1663, 2103, 1608, 1622, 1606, 1620, 1623,
+     1604, 1656, 1655, 1654, 1653, 1598, 1651, 1650, 2103,  668,
+     1612, 1611, 1608, 1608, 1606, 1589, 1594, 1596, 2103, 1602,
+     1592, 2103, 1639, 1585, 1642,  601,  629, 1583, 1581, 1588,
+     1579, 1632,  630, 1636,  632, 1630, 1590, 1628, 1627, 1579,
+     1577, 1585, 1588, 1572, 1573, 1564, 1619, 1570, 1578, 1579,
+     1615, 1576, 1570, 1557, 1565, 1610, 1614, 1569, 1568, 2103,
+
+     1569, 1562, 1551, 1564, 1567, 1562, 1563, 1560, 1559, 1555,
+     1561, 1556, 1599, 1598,  163,  217,  629,  334,  336,  405,
+     2103,  427,  441,  452,  534,  569,  623,  615,  621,  638,
+     2103,  628,  646,  647,  649,  693,  694,  637,  648,  655,
+      634,  640,  695,  659,  643,  655,  699,  700,  701,  648,
+      703,  667,  662,  669,  665,  650,  662,  663, 2103,  718,
+      675,  677,  668,  681,  683,  668,  675,  681,  673,  687,
+      692,  733, 2103,  729,  705,  692,  697,  694,  695,  692,
+      690,  699, 2103,  689,  704,  701,  687,  694,  693,  691,
+      710,  707,  695,  702,  703,  712,  712,  702,  700,  699,
+
+      710,  706,  762,  720,  710,  726,  716, 2103,  726,  726,
+      719,  730,  728,  773,  715,  717,  732,  719,  779,  736,
+      722,  725, 2103, 2103,  735,  740,  745,  733,  743,  745,
+     2103, 2103,  746,  750,  737,  731,  736,  754,  741,  791,
+      742,  794,  743,  801, 2103, 2103,  746,  750,  745,  805,
+      758,  748,  749,  745,  758,  769,  753,  771,  766,  767,
+      769,  762,  764,  765,  766,  766,  768,  783,  824,  781,
+      786,  763, 2103,  775,  776,  790,  780,  827,  785,  775,
+      790,  791,  778,  792, 2103,  811,  819,  788,  783,  838,
+      839,  802,  806,  847,  795,  790,  791,  803,  810,  799,
+
+      800,  796,  799,  800,  810,  819,  855,  810,  805,  864,
+      821,  823,  814, 2103,  816,  827,  812,  828,  822,  869,
+      835,  819,  820, 2103,  836,  839,  822,  881,  824, 2103,
+      841,  844,  824,  842,  882,  840,  836,  833,  886,  887,
+      834,  852,  851,  852,  838,  853,  845,  852,  842,  860,
+      845, 2103,  853,  859,  906, 2103,  855,  860,  904,  855,
+      867,  861,  866,  864,  862,  864,  874,  919,  863,  868,
+      864,  923,  867,  879, 2103,  867,  875,  873,  870,  871,
+      880,  892,  876,  881,  891,  892,  897,  938,  896,  912,
+      917,  899,  896,  892,  887,  947,  890, 2103,  890,  910,
+
+      909,  900,  889,  906,  913,  956,  917,  910,  914,  918,
+      901,  962,  909, 2103,  959,  906,  909,  908,  928,  927,
+      932,  933,  919,  927,  936,  916,  931,  938,  980, 2103,
+      981,  982,  933,  943,  945,  934,  930,  937,  946,  934,
+      941,  942,  994,  941,  939,  941,  958,  999,  949,  948,
+      954,  952,  950, 1005, 1006, 1002, 2103,  964,  957,  948,
+      967,  955,  965,  962,  967,  963,  976,  976, 2103,  960,
+      962,  962, 2103,  963, 1023,  962,  981,  983, 1028, 1029,
+      982,  967,  988,  987,  971,  976,  994, 2103,  984, 1017,
+     1008, 1040,  980, 1002,  999, 2103,  986,  988, 1005, 1000,
+
+     1004, 1049,  997, 1001, 2103,  993, 1010,  990, 1011, 1001,
+     2103, 1016, 1016, 1054, 1001, 1057, 1004, 1064, 1007, 1018,
+     1011, 1017, 1013, 1031, 1032, 1033, 2103, 2103, 1032, 2103,
+     1017, 1018, 1037, 1027, 1020, 1032, 1076, 1040, 1029, 1036,
+     1037, 2103, 1035, 1087, 1028, 1089, 2103, 1090, 1032, 1038,
+     1045, 1089, 2103, 2103, 1037, 1039, 1053, 1058, 1041, 1100,
+     1057, 1058, 1059, 1099, 1051, 1056, 1107, 1060, 1056, 1110,
+     2103, 1057, 1112, 1113, 2103, 2103, 1053, 1115, 1074, 1117,
+     1059, 1071, 1076, 1062, 1092, 1123, 2103, 1080, 1073, 1082,
+     1127, 1074, 1089, 1125, 1077, 2103, 1073, 1089, 1090, 1091,
+
+     1088, 1132, 1095, 1099, 1086, 1082, 1142, 1095, 1100, 2103,
+     1101, 1094, 1103, 1104, 1101, 1092, 1095, 1095, 1100, 1155,
+     1156, 1100, 1159, 1155, 1096, 1111, 1104, 1107, 1120, 1121,
+     1167, 2103, 1120, 2103, 2103, 1125, 1119, 1129, 1114, 1115,
+     1176, 1120, 1130, 1179, 2103, 1127, 1127, 1129, 1131, 1184,
+     1125, 1128, 2103, 1129, 1148, 2103, 1132, 2103, 2103, 1146,
+     2103, 1140, 2103, 1192, 1141, 1194, 1195, 1175, 2103, 1197,
+     1154, 1195, 2103, 1143, 1151, 1145, 1142, 1145, 1148, 1148,
+     1165, 1204, 1157, 1169, 1172, 1154, 1161, 1151, 2103, 1173,
+     1159, 1160, 1176, 1176, 1179, 1179, 1176, 1220, 1182, 1174,
+
+     2103, 2103, 1184, 2103, 1181, 1186, 1187, 1184, 1228, 1176,
+     1191, 1192, 2103, 1180, 1181, 1181, 1187, 1186, 1197, 2103,
+     1238, 1185, 2103, 1186, 1186, 1188, 1194, 2103, 1196, 1250,
+     1192, 1200, 1203, 1254, 1215, 2103, 1212, 2103, 1209, 2103,
+     1232, 2103, 1259, 1201, 1261, 1262, 1219, 1224, 1206, 1266,
+     1267, 1263, 1227, 1224, 1220, 1213, 1225, 1215, 1220, 1276,
+     1277, 1273, 1236, 1233, 1277, 1225, 1230, 1229, 1288, 1244,
+     1290, 1248, 1292, 1253, 1242, 1236, 1296, 1238, 1239, 1255,
+     1255, 1301, 1243, 1260, 1259, 1243, 1301, 1302, 1249, 1304,
+     1267, 1268, 2103, 1268, 1269, 1256, 2103, 1267, 1316, 1274,
+
+     1288, 2103, 1270, 2103, 2103, 1262, 1273, 1322, 2103, 2103,
+     1268, 1273, 1271, 1321, 1279, 1284, 1275, 1273, 1287, 2103,
+     2103, 1277, 1328, 1271, 1276, 1336, 1284, 1294, 1295, 2103,
+     1340, 1293, 2103, 1342, 2103, 1285, 1300, 1288, 2103, 1300,
+     1301, 1307, 1311, 2103, 1347, 1313, 1306, 1315, 1297, 1304,
+     1358, 1317, 1316, 1361, 1309, 1363, 1364, 1313, 2103, 1366,
+     1367, 1316, 1369, 1311, 2103, 1314, 1324, 1368, 1316, 1331,
+     1318, 1324, 1324, 1379, 1323, 1322, 1382, 1335, 2103, 1379,
+     1330, 1327, 2103, 1341, 2103, 1344, 1389, 1342, 1339, 1340,
+     1393, 1352, 1335, 1337, 1334, 1350, 1351, 1360, 2103, 1350,
+
+     1402, 2103, 1361, 2103, 2103, 1399, 2103, 2103, 1361, 2103,
+     1401, 1363, 1364, 1349, 1350, 1358, 1412, 1408, 1363, 2103,
+     1361, 1368, 2103, 1365, 1370, 1368, 1420, 1421, 1364, 2103,
+     1379, 1380, 1381, 2103, 1382, 1372, 1384, 1429, 1371, 1379,
+     1380, 1393, 2103, 1370, 1393, 1378, 1378, 1393, 1386, 1385,
+     1396, 1383, 2103, 1388, 1444, 1403, 1394, 1403, 1405, 1409,
+     2103, 2103, 1450, 1393, 1452, 1453, 1454, 1412, 1456, 2103,
+     1452, 1414, 1415, 1402, 1461, 1398, 1463, 1416, 1417, 1407,
+     1424, 1423, 1464, 1426, 2103, 1427, 1428, 1473, 1430, 1433,
+     2103, 1476, 2103, 2103, 2103, 1437, 2103, 1419, 1479, 1480,
+
+     1423, 2103, 1440, 2103, 1431, 1421, 1480, 1446, 1439, 1435,
+     1432, 1432, 1434, 2103, 1439, 1449, 2103, 1435, 1447, 2103,
+     2103, 1452, 1446, 1454, 1499, 1440, 1442, 1439, 1463, 1456,
+     1447, 1501, 1448, 1456, 1465, 1458, 1453, 1468, 1513, 2103,
+     1459, 1471, 1516, 1465, 1464, 1471, 1458, 1473, 1478, 1523,
+     1480, 1525, 1468, 2103, 1484, 1528, 2103, 1485, 1487, 1478,
+     1492, 1488, 1481, 2103, 1535, 2103, 1536, 1497, 2103, 1538,
+     1539, 1494, 1493, 1494, 1484, 2103, 2103, 1485, 2103, 2103,
+     1545, 1487, 1503, 1548, 1505, 2103, 1545, 1494, 2103, 1552,
+     1494, 1496, 2103, 1507, 1556, 1505, 2103, 1514, 1559, 2103,
+
+     2103, 1565, 1570, 1575, 1580, 1585, 1590, 1595, 1598, 1572,
+     1577, 1579, 1592
     } ;
 
-static const flex_int16_t yy_def[1609] =
+static const flex_int16_t yy_def[1714] =
     {   0,
-     1597, 1597, 1598, 1598, 1597, 1597, 1597, 1597, 1597, 1597,
-     1596, 1596, 1596, 1596, 1596, 1599, 1596, 1596, 1596, 1596,
-     1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596,
-     1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1600,
-     1596, 1596, 1596, 1601,   15, 1596,   45,   45,   45,   45,
-       45,   45,   45,   45,   45,   45,   45, 1602,   45,   45,
+     1702, 1702, 1703, 1703, 1702, 1702, 1702, 1702, 1702, 1702,
+     1701, 1701, 1701, 1701, 1701, 1704, 1701, 1701, 1701, 1701,
+     1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701,
+     1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1705,
+     1701, 1701, 1701, 1706,   15, 1701,   45,   45,   45,   45,
+       45,   45,   45,   45,   45,   45,   45, 1707,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,   45,   45,   45,   45,   45, 1599,
-     1596, 1596, 1596, 1596, 1596, 1596, 1603, 1596, 1596, 1596,
-     1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1600, 1596,
+       45,   45,   45,   45,   45,   45,   45,   45,   45, 1704,
+     1701, 1701, 1701, 1701, 1701, 1701, 1708, 1701, 1701, 1701,
+     1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1705, 1701,
 
-     1601, 1596, 1596,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,   45, 1604,   45, 1602,   45,   45,
+     1706, 1701, 1701,   45,   45,   45,   45,   45,   45,   45,
+       45,   45,   45,   45,   45, 1709,   45, 1707,   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,   45,   45,   45,
-       45,   45, 1603, 1596, 1596, 1596, 1596, 1596, 1596, 1596,
-     1596, 1605,   45,   45,   45,   45,   45,   45,   45,   45,
+       45,   45,   45, 1708, 1701, 1701, 1701, 1701, 1701, 1701,
+     1701, 1701, 1710,   45,   45,   45,   45,   45,   45,   45,
 
-       45,   45,   45,   45, 1604, 1596, 1602,   45,   45,   45,
+       45,   45,   45,   45,   45, 1709, 1701, 1707,   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, 1596,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
+     1701,   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, 1596, 1596, 1596, 1596, 1596,
+       45,   45,   45,   45,   45,   45,   45, 1701, 1701, 1701,
 
-     1596, 1596, 1606,   45,   45,   45,   45,   45,   45,   45,
-       45, 1596,   45, 1596,   45, 1602, 1596,   45,   45,   45,
+     1701, 1701, 1701, 1701, 1711,   45,   45,   45,   45,   45,
+       45,   45,   45, 1701,   45, 1701,   45, 1707, 1701,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-     1596,   45,   45,   45,   45,   45,   45,   45,   45,   45,
+       45,   45, 1701,   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, 1596,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45, 1596,   45,   45,   45,   45,   45,   45,   45,
+     1701,   45,   45,   45,   45,   45,   45,   45,   45,   45,
+       45,   45,   45,   45,   45, 1701,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
 
-       45,   45,   45,   45,   45,   45,   45,   45, 1596,   45,
-       45,   45,   45, 1596, 1596, 1596, 1607,   45,   45,   45,
-       45,   45,   45,   45,   45, 1596,   45,   45, 1596,   45,
-     1602,   45,   45,   45,   45,   45,   45,   45, 1596,   45,
-       45,   45,   45,   45,   45,   45, 1596,   45,   45,   45,
-       45,   45, 1596,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45, 1596,   45,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45, 1596,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,   45,   45,   45,   45, 1596,   45,
+       45, 1701,   45,   45,   45,   45, 1701, 1701, 1701, 1712,
+       45,   45,   45,   45,   45,   45,   45,   45, 1701,   45,
+       45, 1701,   45, 1707,   45,   45,   45,   45,   45,   45,
+       45, 1701,   45,   45,   45,   45,   45,   45,   45, 1701,
+       45,   45,   45,   45,   45,   45, 1701,   45,   45,   45,
+       45,   45,   45,   45,   45,   45,   45, 1701,   45,   45,
+       45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
+       45,   45,   45,   45,   45,   45,   45,   45, 1701,   45,
+       45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
 
-     1596,   45,   45,   45,   45,   45,   45,   45,   45,   45,
+       45,   45, 1701,   45, 1701,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,   45,   45,   45,   45,   45, 1596,
-     1596,   45,   45, 1596,   45,   45, 1596, 1608,   45,   45,
-       45,   45, 1596, 1596,   45, 1596,   45, 1596,   45,   45,
-       45, 1596,   45,   45,   45,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,   45,   45, 1596,   45,   45,   45,
+       45,   45,   45, 1701, 1701,   45,   45, 1701,   45,   45,
+     1701, 1713,   45,   45,   45,   45, 1701, 1701,   45, 1701,
+       45, 1701,   45,   45,   45, 1701,   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, 1701,   45,   45,   45,   45,
+       45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
 
-       45,   45, 1596,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,   45,   45, 1596,   45,   45,   45,
-       45,   45,   45,   45,   45, 1596,   45,   45,   45,   45,
-       45,   45,   45,   45,   45,   45,   45,   45,   45, 1596,
-       45,   45,   45,   45,   45,   45,   45,   45,   45, 1596,
-       45,   45, 1596,   45,   45,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
+       45, 1701,   45,   45,   45,   45,   45,   45,   45,   45,
+       45,   45,   45,   45,   45, 1701,   45,   45,   45,   45,
+       45,   45,   45,   45, 1701,   45,   45,   45,   45,   45,
+       45,   45,   45,   45,   45,   45,   45,   45, 1701,   45,
+       45,   45,   45,   45,   45,   45,   45,   45, 1701,   45,
+       45, 1701,   45,   45,   45,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,   45, 1596,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
+       45,   45,   45,   45,   45,   45,   45,   45,   45, 1701,
 
-       45,   45,   45,   45,   45,   45, 1596,   45,   45,   45,
-       45,   45,   45,   45,   45,   45, 1596,   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, 1596,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,   45,   45,   45,   45, 1596,   45,
-       45,   45,   45,   45,   45,   45,   45,   45, 1596,   45,
+     1701,   45,   45,   45,   45,   45,   45,   45,   45,   45,
+     1701,   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, 1701,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,   45,   45,   45,   45, 1596,   45,
+       45,   45, 1701,   45,   45,   45,   45,   45,   45,   45,
+       45,   45, 1701,   45,   45,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
 
-       45,   45,   45, 1596, 1596,   45,   45,   45,   45,   45,
-       45, 1596, 1596,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,   45, 1596, 1596,   45,   45,   45,
+       45,   45,   45,   45,   45,   45,   45, 1701,   45,   45,
+       45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
+       45,   45, 1701, 1701,   45,   45,   45,   45,   45,   45,
+     1701, 1701,   45,   45,   45,   45,   45,   45,   45,   45,
+       45,   45,   45,   45, 1701, 1701,   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, 1596,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,   45, 1596,   45,   45,   45,   45,
+       45,   45, 1701,   45,   45,   45,   45,   45,   45,   45,
+       45,   45,   45,   45, 1701,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,   45,   45,   45,   45,   45, 1596,
-       45,   45,   45,   45,   45,   45,   45,   45,   45, 1596,
 
-       45,   45,   45,   45,   45, 1596,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,   45,   45,   45, 1596,   45,   45,
-       45, 1596,   45,   45,   45,   45,   45,   45,   45,   45,
+       45,   45,   45, 1701,   45,   45,   45,   45,   45,   45,
+       45,   45,   45, 1701,   45,   45,   45,   45,   45, 1701,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-     1596,   45,   45,   45,   45,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45, 1596,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45, 1596,   45,   45,   45,   45,   45,
+       45, 1701,   45,   45,   45, 1701,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
+       45,   45,   45,   45, 1701,   45,   45,   45,   45,   45,
+       45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
+       45,   45,   45,   45,   45,   45,   45, 1701,   45,   45,
 
-     1596,   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, 1596,   45,   45,
-       45,   45,   45,   45,   45,   45,   45,   45,   45, 1596,
-       45,   45,   45, 1596,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,   45,   45,   45,   45, 1596,   45,
-       45,   45,   45,   45,   45,   45, 1596,   45,   45,   45,
-       45,   45,   45,   45,   45, 1596, 1596,   45,   45,   45,
+       45,   45,   45, 1701,   45,   45,   45,   45,   45,   45,
+       45,   45,   45,   45,   45,   45,   45,   45,   45, 1701,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45, 1596, 1596,   45, 1596,   45,   45,   45,   45,
-
-       45,   45,   45,   45,   45,   45,   45, 1596,   45,   45,
-       45,   45, 1596,   45,   45,   45,   45,   45, 1596, 1596,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,   45,   45, 1596,   45,   45,   45,
-     1596, 1596,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45, 1596,   45,   45,   45,   45,   45,   45,   45,
-       45, 1596,   45,   45,   45,   45,   45,   45,   45,   45,
-     1596,   45,   45,   45,   45,   45,   45,   45,   45,   45,
+       45,   45,   45,   45,   45,   45, 1701,   45,   45,   45,
+       45,   45,   45,   45,   45,   45,   45,   45, 1701,   45,
+       45,   45, 1701,   45,   45,   45,   45,   45,   45,   45,
+       45,   45,   45,   45,   45,   45,   45, 1701,   45,   45,
+       45,   45,   45,   45,   45, 1701,   45,   45,   45,   45,
+
+       45,   45,   45,   45, 1701,   45,   45,   45,   45,   45,
+     1701,   45,   45,   45,   45,   45,   45,   45,   45,   45,
+       45,   45,   45,   45,   45,   45, 1701, 1701,   45, 1701,
+       45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
+       45, 1701,   45,   45,   45,   45, 1701,   45,   45,   45,
+       45,   45, 1701, 1701,   45,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45, 1596,   45, 1596, 1596,   45,   45,   45,   45,
-
-       45,   45,   45,   45,   45, 1596,   45,   45,   45,   45,
-       45,   45,   45, 1596,   45,   45, 1596,   45, 1596, 1596,
-       45, 1596,   45, 1596,   45,   45,   45,   45,   45, 1596,
-       45,   45,   45, 1596,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45, 1596,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,   45,   45, 1596, 1596,   45, 1596,
-       45,   45,   45,   45,   45,   45,   45,   45, 1596,   45,
-       45,   45,   45,   45,   45, 1596,   45,   45, 1596,   45,
-       45,   45,   45, 1596,   45,   45,   45,   45,   45,   45,
-       45, 1596,   45, 1596,   45, 1596,   45, 1596,   45,   45,
+     1701,   45,   45,   45, 1701, 1701,   45,   45,   45,   45,
+       45,   45,   45,   45,   45,   45, 1701,   45,   45,   45,
+       45,   45,   45,   45,   45, 1701,   45,   45,   45,   45,
 
+       45,   45,   45,   45,   45,   45,   45,   45,   45, 1701,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
+       45, 1701,   45, 1701, 1701,   45,   45,   45,   45,   45,
+       45,   45,   45,   45, 1701,   45,   45,   45,   45,   45,
+       45,   45, 1701,   45,   45, 1701,   45, 1701, 1701,   45,
+     1701,   45, 1701,   45,   45,   45,   45,   45, 1701,   45,
+       45,   45, 1701,   45,   45,   45,   45,   45,   45,   45,
+       45,   45,   45,   45,   45,   45,   45,   45, 1701,   45,
+       45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
+
+     1701, 1701,   45, 1701,   45,   45,   45,   45,   45,   45,
+       45,   45, 1701,   45,   45,   45,   45,   45,   45, 1701,
+       45,   45, 1701,   45,   45,   45,   45, 1701,   45,   45,
+       45,   45,   45,   45,   45, 1701,   45, 1701,   45, 1701,
+       45, 1701,   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, 1596,   45,   45,   45, 1596,   45,   45,
-       45,   45, 1596,   45, 1596, 1596,   45,   45,   45, 1596,
-     1596,   45,   45,   45, 1596, 1596,   45,   45,   45,   45,
-       45,   45,   45,   45, 1596,   45,   45, 1596,   45, 1596,
-       45,   45,   45, 1596,   45,   45,   45,   45, 1596,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-
-       45,   45,   45, 1596,   45,   45,   45,   45,   45, 1596,
-       45,   45,   45,   45,   45,   45,   45, 1596,   45,   45,
-       45, 1596,   45, 1596,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,   45,   45,   45, 1596,   45,   45,
-     1596,   45, 1596, 1596,   45, 1596, 1596,   45, 1596,   45,
-       45,   45, 1596,   45,   45, 1596,   45,   45,   45,   45,
-       45,   45, 1596,   45,   45,   45, 1596,   45,   45,   45,
-       45,   45,   45,   45,   45, 1596,   45,   45,   45,   45,
-       45,   45,   45,   45,   45,   45,   45, 1596, 1596,   45,
-       45,   45,   45,   45,   45,   45, 1596,   45,   45,   45,
-
-       45,   45,   45,   45,   45,   45, 1596,   45,   45,   45,
-       45,   45, 1596,   45, 1596, 1596, 1596,   45, 1596,   45,
-       45,   45,   45, 1596,   45, 1596,   45,   45,   45,   45,
-     1596,   45,   45, 1596,   45,   45, 1596, 1596,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
+       45,   45, 1701,   45,   45,   45, 1701,   45,   45,   45,
+
+       45, 1701,   45, 1701, 1701,   45,   45,   45, 1701, 1701,
+       45,   45,   45,   45,   45,   45,   45,   45,   45, 1701,
+     1701,   45,   45,   45,   45,   45,   45,   45,   45, 1701,
+       45,   45, 1701,   45, 1701,   45,   45,   45, 1701,   45,
+       45,   45,   45, 1701,   45,   45,   45,   45,   45,   45,
+       45,   45,   45,   45,   45,   45,   45,   45, 1701,   45,
+       45,   45,   45,   45, 1701,   45,   45,   45,   45,   45,
+       45,   45,   45,   45,   45,   45,   45,   45, 1701,   45,
+       45,   45, 1701,   45, 1701,   45,   45,   45,   45,   45,
+       45,   45,   45,   45,   45,   45,   45,   45, 1701,   45,
+
+       45, 1701,   45, 1701, 1701,   45, 1701, 1701,   45, 1701,
+       45,   45,   45,   45,   45,   45,   45,   45,   45, 1701,
+       45,   45, 1701,   45,   45,   45,   45,   45,   45, 1701,
+       45,   45,   45, 1701,   45,   45,   45,   45,   45,   45,
+       45,   45, 1701,   45,   45,   45,   45,   45,   45,   45,
+       45,   45, 1701,   45,   45,   45,   45,   45,   45,   45,
+     1701, 1701,   45,   45,   45,   45,   45,   45,   45, 1701,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-     1596,   45,   45,   45,   45,   45, 1596,   45, 1596,   45,
-       45,   45,   45,   45,   45, 1596, 1596, 1596,   45,   45,
-       45,   45, 1596,   45,   45, 1596,   45,   45,   45,   45,
-       45, 1596,   45,   45, 1596,    0, 1596, 1596, 1596, 1596,
+       45,   45,   45,   45, 1701,   45,   45,   45,   45,   45,
+     1701,   45, 1701, 1701, 1701,   45, 1701,   45,   45,   45,
 
-     1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596
+       45, 1701,   45, 1701,   45,   45,   45,   45,   45,   45,
+       45,   45,   45, 1701,   45,   45, 1701,   45,   45, 1701,
+     1701,   45,   45,   45,   45,   45,   45,   45,   45,   45,
+       45,   45,   45,   45,   45,   45,   45,   45,   45, 1701,
+       45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
+       45,   45,   45, 1701,   45,   45, 1701,   45,   45,   45,
+       45,   45,   45, 1701,   45, 1701,   45,   45, 1701,   45,
+       45,   45,   45,   45,   45, 1701, 1701,   45, 1701, 1701,
+       45,   45,   45,   45,   45, 1701,   45,   45, 1701,   45,
+       45,   45, 1701,   45,   45,   45, 1701,   45,   45, 1701,
+
+        0, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701,
+     1701, 1701, 1701
     } ;
 
-static const flex_int16_t yy_nxt[2072] =
+static const flex_int16_t yy_nxt[2177] =
     {   0,
-     1596,   13,   14,   13, 1596,   15,   16, 1596,   17,   18,
+     1701,   13,   14,   13, 1701,   15,   16, 1701,   17,   18,
        19,   20,   21,   22,   22,   22,   22,   22,   23,   24,
-       86,  717,   37,   14,   37,   87,   25,   26,   38,  102,
-     1596,   27,   37,   14,   37,   42,   28,   42,   38,   92,
-       93,   29,  198,   30,   13,   14,   13,   91,   92,   25,
+       86,  731,   37,   14,   37,   87,   25,   26,   38,  102,
+     1701,   27,   37,   14,   37,   42,   28,   42,   38,   92,
+       93,   29,  199,   30,   13,   14,   13,   91,   92,   25,
        31,   93,   13,   14,   13,   13,   14,   13,   32,   40,
-      718,   13,   14,   13,   33,   40,  103,   92,   93,  198,
+      732,   13,   14,   13,   33,   40,  103,   92,   93,  199,
        91,   34,   35,   13,   14,   13,   95,   15,   16,   96,
        17,   18,   19,   20,   21,   22,   22,   22,   22,   22,
        23,   24,   13,   14,   13,   91,   39,  105,   25,   26,
 
        13,   14,   13,   27,   39,   42,  108,   42,   28,   42,
-      109,   42,   41,   29,  111,   30,  114,  115,   94,  140,
-       41,   25,   31,  105,  222,  223,   89,  141,   89,  108,
+      109,   42,   41,   29,  111,   30,  114,  115,   94,  141,
+       41,   25,   31,  105,  224,  225,   89,  142,   89,  108,
        32,   90,   90,   90,   90,   90,   33,  111,  109,  114,
-      228,  115,  229,   34,   35,   44,   44,   44,   45,   45,
+      230,  115,  231,   34,   35,   44,   44,   44,   45,   45,
        46,   45,   45,   45,   45,   45,   45,   45,   45,   45,
        45,   47,   45,   45,   45,   45,   45,   48,   45,   49,
        50,   45,   51,   45,   52,   53,   54,   45,   45,   45,
@@ -1311,132 +1347,132 @@ static const flex_int16_t yy_nxt[2072] =
        59,   60,   61,   62,   63,   64,   65,   66,   67,   52,
 
        68,   69,   70,   71,   72,   73,   74,   75,   76,   77,
-       78,   79,   57,   45,   45,   45,   45,   45,   81,  821,
+       78,   79,   57,   45,   45,   45,   45,   45,   81,  825,
        82,   82,   82,   82,   82,   81,  105,   84,   84,   84,
        84,   84,  108,   83,   85,   85,   85,   85,   85,   81,
-       83,   84,   84,   84,   84,   84,  184,   83,  278,  279,
-      112,  123,  119,  134,   83,  108,   83,  186,  120,  124,
-      113,  121,  125,   83,  135,  126,  137,  127,  138,  128,
-       83,  142,  184,  112,  136,  139,  162,   83,   45,  185,
-      163,  143,  822,  144,   45,  186,   45,   45,  113,   45,
-      164,   45,   45,   45,  418,  117,  146,  147,   45,   45,
-
-      148,   45,   45,  186,  419,  185,  149,   45,   45,   45,
+       83,   84,   84,   84,   84,   84,  185,   83,  280,  281,
+      112,  123,  119,  135,   83,  108,   83,  187,  120,  124,
+      113,  121,  125,   83,  136,  126,  138,  127,  139,  128,
+       83,  143,  185,  112,  137,  140,  163,   83,   45,  186,
+      164,  144,  826,  145,   45,  187,   45,   45,  113,   45,
+      165,   45,   45,   45,  421,  117,  147,  148,   45,   45,
+
+      149,   45,   45,  187,  422,  186,  150,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-      129,  189,   45,  745,  130,  150,   45,  131,  132,  151,
-       45,  111,  166,  152,  746,  184,  167,  102,   45,  114,
-      133,  194,   45,  157,   45,  118,  201,  174,  175,  153,
-      154,  158,  155,  159,  156,  185,  168,  112,  160,  161,
-      169,  187,  179,  170,  247,  397,  411,  113,  248,  194,
-      171,  172,  180,  201,  103,  204,  173,  181,  398,  823,
-      176,  188,  177,   85,   85,   85,   85,   85,   81,  200,
-
-       82,   82,   82,   82,   82,  113,   83,  202,  204,   89,
-      824,   89,  178,   83,   90,   90,   90,   90,   90,   81,
-      203,   84,   84,   84,   84,   84,  101,  200,  412,   83,
-      197,  194,  825,  101,   83,  202,   83,   85,   85,   85,
-       85,   85,   90,   90,   90,   90,   90,  203,  208,  231,
-       83,   90,   90,   90,   90,   90,  197,   83,  280,  209,
-      216,  235,  281,  101,  236,  232,  282,  101,  237,  217,
-      218,  101,  298,   83,  200,  260,  261,  262,  264,  101,
-      269,  265,  266,  101,  201,  101,  192,  207,  207,  207,
-      207,  207,  297,  359,  826,  298,  207,  207,  207,  207,
-
-      207,  207,  200,  297,  254,  203,  296,  296,  371,  827,
-      308,  289,  309,  298,  305,  270,  271,  272,  297,  207,
-      207,  207,  207,  207,  207,  311,  273,  313,  274,  300,
-      275,  276,  292,  277,  296,  299,  301,  305,  308,  309,
-      315,  305,  387,  327,  372,  388,  360,  312,  311,  361,
-      313,  328,  406,  414,  499,  420,  329,  330,  373,  428,
-      414,  420,  425,  486,  318,  422,  423,  315,  316,  316,
-      316,  316,  316,  487,  424,  444,  414,  316,  316,  316,
-      316,  316,  316,  415,  420,  425,  657,  428,  450,  508,
-      432,  464,  445,  509,  451,  513,  465,  541,  828,  514,
-
-      316,  316,  316,  316,  316,  316,  431,  431,  431,  431,
-      431,  528,  500,  657,  529,  431,  431,  431,  431,  431,
-      431,  477,  478,  534,  541,  541,  479,  549,  535,  550,
-      577,  829,  567,  830,  658,  578,  596,  760,  431,  431,
-      431,  431,  431,  431,  466,  568,  597,  569,  653,  467,
-      696,  697,  551,  659,  549,  761,  550,   45,   45,   45,
-       45,   45,  658,  831,  832,  760,   45,   45,   45,   45,
-       45,   45,  833,  767,  770,  771,  834,  772,  761,  768,
-      808,  835,  836,  809,  837,  838,  839,  840,  841,   45,
-       45,   45,   45,   45,   45,  842,  843,  845,  846,  847,
-
-      850,  851,  852,  844,  854,  855,  848,  856,  853,  857,
-      849,  858,  859,  860,  861,  862,  863,  864,  865,  866,
-      867,  868,  869,  870,  871,  872,  873,  874,  875,  876,
+      129,  190,   45,  130,  131,  151,   45,  132,  133,  152,
+       45,  111,  167,  153,  829,  185,  168,  102,   45,  114,
+      134,  195,   45,  158,   45,  118,  202,  175,  176,  154,
+      155,  159,  156,  160,  157,  186,  169,  112,  161,  162,
+      170,  188,  180,  171,  249,  400,  414,  113,  250,  195,
+      172,  173,  181,  202,  103,  205,  174,  182,  401,  830,
+      177,  189,  178,   85,   85,   85,   85,   85,   81,  201,
+
+       82,   82,   82,   82,   82,  113,   83,  203,  205,   89,
+      831,   89,  179,   83,   90,   90,   90,   90,   90,   81,
+      204,   84,   84,   84,   84,   84,  101,  201,  415,   83,
+      198,  195,  832,  101,   83,  203,   83,   85,   85,   85,
+       85,   85,   90,   90,   90,   90,   90,  204,  209,  233,
+       83,   90,   90,   90,   90,   90,  198,   83,  282,  210,
+      217,  237,  283,  101,  238,  234,  284,  101,  239,  218,
+      219,  101,  300,   83,  201,  262,  263,  264,  266,  101,
+      271,  267,  268,  101,  202,  101,  193,  208,  208,  208,
+      208,  208,  299,  362,  833,  300,  208,  208,  208,  208,
+
+      208,  208,  201,  299,  256,  204,  298,  298,  374,  834,
+      310,  291,  311,  300,  307,  272,  273,  274,  299,  208,
+      208,  208,  208,  208,  208,  313,  275,  315,  276,  302,
+      277,  278,  294,  279,  298,  301,  303,  307,  310,  311,
+      317,  307,  390,  329,  375,  391,  363,  314,  313,  364,
+      315,  330,  409,  417,  503,  423,  331,  332,  376,  431,
+      417,  423,  428,  490,  320,  425,  426,  317,  318,  318,
+      318,  318,  318,  491,  427,  447,  417,  318,  318,  318,
+      318,  318,  318,  418,  423,  428,  666,  431,  454,  512,
+      435,  468,  448,  513,  455,  517,  469,  545,  835,  518,
+
+      318,  318,  318,  318,  318,  318,  434,  434,  434,  434,
+      434,  532,  504,  666,  533,  434,  434,  434,  434,  434,
+      434,  481,  482,  538,  545,  545,  483,  553,  539,  554,
+      586,  836,  576,  837,  667,  587,  605,  774,  434,  434,
+      434,  434,  434,  434,  470,  577,  606,  578,  662,  471,
+      710,  711,  555,  668,  553,  775,  554,   45,   45,   45,
+       45,   45,  667,  838,  569,  774,   45,   45,   45,   45,
+       45,   45,  570,  759,  571,  572,  573,  781,  775,  784,
+      785,  839,  786,  782,  760,  827,  840,  841,  828,   45,
+       45,   45,   45,   45,   45,  842,  843,  844,  845,  846,
+
+      847,  848,  849,  850,  851,  852,  853,  854,  855,  856,
+      857,  858,  859,  860,  861,  862,  864,  865,  866,  869,
+      870,  871,  863,  873,  874,  867,  875,  872,  876,  868,
       877,  878,  879,  880,  881,  882,  883,  884,  885,  886,
-      887,  888,  889,  890,  891,  892,  893,  894,  895,  868,
-      896,  897,  898,  899,  900,  902,  903,  904,  905,  901,
-      906,  907,  908,  909,  910,  911,  912,  913,  914,  915,
-      916,  917,  918,  919,  920,  921,  923,  924,  925,  922,
-      926,  927,  928,  929,  930,  931,  932,  933,  934,  935,
+      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,  887,  915,
+      916,  917,  918,  919,  920,  921,  922,  923,  924,  926,
+      927,  928,  929,  925,  930,  931,  932,  933,  934,  935,
       936,  937,  938,  939,  940,  941,  942,  943,  944,  945,
 
-      946,  947,  948,  949,  950,  951,  952,  953,  954,  955,
+      947,  948,  949,  946,  950,  951,  952,  953,  954,  955,
       956,  957,  958,  959,  960,  961,  962,  963,  964,  965,
       966,  967,  968,  969,  970,  971,  972,  973,  974,  975,
       976,  977,  978,  979,  980,  981,  982,  983,  984,  985,
-      986,  987,  988,  989,  967,  990,  991,  966,  992,  993,
-      994,  995,  996,  997,  998,  999, 1000, 1001, 1003, 1004,
-     1005, 1006, 1007, 1008, 1009, 1010, 1011, 1012, 1013, 1014,
-     1015, 1016, 1017, 1018, 1019, 1020, 1021, 1022, 1023, 1025,
-     1026, 1027, 1028, 1029, 1030, 1031, 1032, 1033, 1034, 1024,
+      986,  987,  988,  989,  990,  991,  992,  993,  994,  995,
+      996,  997,  998,  999, 1000, 1001, 1002, 1003, 1004, 1005,
+     1006, 1007, 1008, 1009, 1010, 1011, 1012, 1013,  991, 1014,
+     1015,  990, 1016, 1017, 1018, 1019, 1020, 1021, 1022, 1023,
+     1024, 1025, 1026, 1027, 1028, 1029, 1030, 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, 1002, 1060, 1061, 1063, 1062,
-     1064, 1065, 1066, 1067, 1068, 1069, 1070, 1071, 1072, 1073,
-     1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082, 1083,
-     1084, 1085, 1086, 1087, 1088, 1061, 1062, 1089, 1090, 1091,
-     1092, 1093, 1094, 1096, 1098, 1099, 1100, 1095, 1101, 1102,
-     1103, 1104, 1105, 1106, 1107, 1108, 1109, 1110, 1111, 1112,
-     1113, 1114, 1115, 1116, 1117, 1118, 1119, 1120, 1121, 1122,
-     1123, 1124, 1125, 1126, 1127, 1128, 1129, 1130, 1131, 1132,
-     1133, 1134, 1135, 1136, 1137, 1138, 1139, 1097, 1140, 1141,
-
-     1142, 1143, 1144, 1145, 1146, 1147, 1148, 1149, 1150, 1151,
-     1152, 1153, 1154, 1155, 1156, 1157, 1158, 1159, 1160, 1161,
-     1162, 1163, 1164, 1165, 1166, 1167, 1168, 1169, 1170, 1171,
-     1172, 1173, 1151, 1174, 1175, 1176, 1177, 1178, 1152, 1179,
-     1180, 1181, 1182, 1183, 1184, 1185, 1186, 1187, 1188, 1189,
-     1190, 1191, 1192, 1193, 1194, 1195, 1196, 1197, 1198, 1199,
-     1200, 1201, 1202, 1203, 1204, 1205, 1206, 1207, 1208, 1209,
-     1210, 1212, 1213, 1214, 1215, 1216, 1217, 1218, 1219, 1220,
-     1221, 1222, 1223, 1224, 1225, 1226, 1227, 1228, 1229, 1230,
-     1231, 1232, 1233, 1234, 1236, 1237, 1238, 1239, 1240, 1241,
-
-     1242, 1243, 1244, 1245, 1246, 1247, 1248, 1249, 1250, 1251,
-     1252, 1253, 1254, 1255, 1256, 1257, 1229, 1258, 1259, 1260,
-     1261, 1262, 1263, 1211, 1265, 1266, 1267, 1268, 1269, 1270,
-     1264, 1271, 1272, 1273, 1274, 1275, 1276, 1235, 1277, 1278,
-     1279, 1280, 1281, 1282, 1283, 1284, 1285, 1286, 1287, 1288,
-     1289, 1290, 1291, 1292, 1293, 1294, 1296, 1297, 1298, 1299,
-     1295, 1300, 1301, 1302, 1303, 1304, 1305, 1306, 1307, 1308,
-     1309, 1310, 1311, 1312, 1313, 1314, 1315, 1316, 1317, 1318,
-     1297, 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, 1377, 1378,
-     1379, 1352, 1380, 1381, 1382, 1383, 1384, 1385, 1386, 1387,
+     1045, 1046, 1047, 1048, 1049, 1050, 1051, 1052, 1054, 1055,
+     1056, 1057, 1058, 1059, 1060, 1061, 1062, 1063, 1053, 1064,
+     1065, 1066, 1067, 1068, 1069, 1070, 1071, 1072, 1073, 1074,
+     1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082, 1083, 1084,
+     1085, 1086, 1087, 1088, 1031, 1089, 1090, 1092, 1091, 1093,
+     1094, 1095, 1096, 1097, 1098, 1099, 1100, 1101, 1102, 1103,
+     1104, 1105, 1106, 1107, 1108, 1109, 1110, 1111, 1112, 1113,
+     1114, 1115, 1116, 1117, 1090, 1091, 1118, 1119, 1120, 1121,
+     1122, 1123, 1124, 1125, 1126, 1127, 1128, 1130, 1132, 1133,
+     1134, 1129, 1135, 1136, 1137, 1138, 1139, 1140, 1141, 1142,
+
+     1143, 1144, 1145, 1146, 1147, 1148, 1149, 1150, 1151, 1152,
+     1153, 1154, 1155, 1156, 1157, 1158, 1159, 1160, 1161, 1162,
+     1163, 1164, 1165, 1166, 1167, 1168, 1169, 1170, 1171, 1172,
+     1173, 1131, 1174, 1175, 1176, 1177, 1178, 1179, 1180, 1181,
+     1182, 1183, 1184, 1185, 1186, 1187, 1188, 1189, 1190, 1191,
+     1192, 1193, 1194, 1195, 1196, 1197, 1198, 1199, 1200, 1201,
+     1202, 1203, 1204, 1205, 1206, 1207, 1185, 1208, 1209, 1210,
+     1211, 1212, 1186, 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,
+     1251, 1252, 1253, 1254, 1255, 1256, 1257, 1258, 1259, 1260,
+     1261, 1262, 1263, 1264, 1265, 1266, 1267, 1268, 1269, 1270,
+     1271, 1272, 1273, 1275, 1276, 1277, 1278, 1279, 1280, 1281,
+     1282, 1283, 1284, 1285, 1286, 1287, 1288, 1289, 1290, 1291,
+     1292, 1293, 1294, 1295, 1296, 1268, 1297, 1298, 1299, 1300,
+     1301, 1302, 1250, 1303, 1304, 1305, 1306, 1307, 1309, 1310,
+     1311, 1312, 1313, 1314, 1315, 1308, 1274, 1316, 1317, 1318,
+     1319, 1320, 1321, 1322, 1323, 1324, 1325, 1326, 1327, 1328,
+     1329, 1330, 1331, 1332, 1333, 1334, 1335, 1336, 1337, 1338,
+
+     1340, 1341, 1342, 1343, 1339, 1344, 1345, 1346, 1347, 1348,
+     1349, 1350, 1351, 1352, 1353, 1354, 1355, 1356, 1357, 1358,
+     1359, 1360, 1361, 1362, 1341, 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, 1376, 1406, 1433, 1434, 1435,
-
-     1436, 1437, 1438, 1439, 1440, 1441, 1442, 1443, 1444, 1445,
-     1446, 1447, 1448, 1449, 1450, 1451, 1452, 1453, 1454, 1455,
-     1456, 1457, 1458, 1459, 1460, 1461, 1462, 1463, 1464, 1465,
-     1466, 1467, 1468, 1469, 1470, 1471, 1472, 1473, 1474, 1475,
-     1476, 1477, 1478, 1479, 1480, 1481, 1482, 1483, 1484, 1485,
-     1486, 1487, 1488, 1489, 1490, 1491, 1492, 1493, 1494, 1495,
+     1408, 1409, 1410, 1411, 1412, 1414, 1415, 1416, 1417, 1418,
+     1419, 1420, 1421, 1422, 1423, 1413, 1424, 1425, 1426, 1427,
+     1401, 1428, 1429, 1430, 1432, 1433, 1434, 1435, 1436, 1437,
+
+     1438, 1439, 1440, 1441, 1442, 1443, 1444, 1445, 1446, 1447,
+     1448, 1449, 1450, 1451, 1452, 1453, 1454, 1455, 1456, 1457,
+     1458, 1459, 1460, 1462, 1461, 1463, 1464, 1465, 1466, 1467,
+     1468, 1469, 1470, 1471, 1472, 1473, 1474, 1475, 1476, 1477,
+     1478, 1479, 1480, 1481, 1482, 1483, 1484, 1485, 1486, 1487,
+     1488, 1431, 1461, 1489, 1490, 1491, 1492, 1493, 1494, 1495,
      1496, 1497, 1498, 1499, 1500, 1501, 1502, 1503, 1504, 1505,
      1506, 1507, 1508, 1509, 1510, 1511, 1512, 1513, 1514, 1515,
      1516, 1517, 1518, 1519, 1520, 1521, 1522, 1523, 1524, 1525,
@@ -1448,94 +1484,105 @@ static const flex_int16_t yy_nxt[2072] =
      1566, 1567, 1568, 1569, 1570, 1571, 1572, 1573, 1574, 1575,
      1576, 1577, 1578, 1579, 1580, 1581, 1582, 1583, 1584, 1585,
      1586, 1587, 1588, 1589, 1590, 1591, 1592, 1593, 1594, 1595,
-       12,   12,   12,   12,   12,   36,   36,   36,   36,   36,
-       80,  303,   80,   80,   80,   99,  417,   99,  538,   99,
-      101,  101,  101,  101,  101,  116,  116,  116,  116,  116,
-      183,  101,  183,  183,  183,  205,  205,  205,  820,  819,
-
-      818,  817,  816,  815,  814,  813,  812,  811,  810,  807,
-      806,  805,  804,  803,  802,  801,  800,  799,  798,  797,
-      796,  795,  794,  793,  792,  791,  790,  789,  788,  787,
-      786,  785,  784,  783,  782,  781,  780,  779,  778,  777,
-      776,  775,  774,  773,  769,  766,  765,  764,  763,  762,
-      759,  758,  757,  756,  755,  754,  753,  752,  751,  750,
-      749,  748,  747,  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,  716,
-      715,  714,  713,  712,  711,  710,  709,  708,  707,  706,
-
-      705,  704,  703,  702,  701,  700,  699,  698,  695,  694,
-      693,  692,  691,  690,  689,  688,  687,  686,  685,  684,
-      683,  682,  681,  680,  679,  678,  677,  676,  675,  674,
-      673,  672,  671,  670,  669,  668,  667,  666,  665,  664,
-      663,  662,  661,  660,  656,  655,  654,  653,  652,  651,
-      650,  649,  648,  647,  646,  645,  644,  643,  642,  641,
-      640,  639,  638,  637,  636,  635,  634,  633,  632,  631,
-      630,  629,  628,  627,  626,  625,  624,  623,  622,  621,
-      620,  619,  618,  617,  616,  615,  614,  613,  612,  611,
-      610,  609,  608,  607,  606,  605,  604,  603,  602,  601,
-
-      600,  599,  598,  595,  594,  593,  592,  591,  590,  589,
-      588,  587,  586,  585,  584,  583,  582,  581,  580,  579,
-      576,  575,  574,  573,  572,  571,  570,  566,  565,  564,
-      563,  562,  561,  560,  559,  558,  557,  556,  555,  554,
-      553,  552,  548,  547,  546,  545,  544,  543,  542,  540,
-      539,  537,  536,  533,  532,  531,  530,  527,  526,  525,
-      524,  523,  522,  521,  520,  519,  518,  517,  516,  515,
-      512,  511,  510,  507,  506,  505,  504,  503,  502,  501,
-      498,  497,  496,  495,  494,  493,  492,  491,  490,  489,
-      488,  485,  484,  483,  482,  481,  480,  476,  475,  474,
-
-      473,  472,  471,  470,  469,  468,  463,  462,  461,  460,
-      459,  458,  457,  456,  455,  454,  453,  452,  449,  448,
-      447,  446,  443,  442,  441,  440,  439,  438,  437,  436,
-      435,  434,  433,  430,  429,  427,  426,  421,  416,  413,
-      410,  409,  408,  407,  405,  404,  403,  402,  401,  400,
-      399,  396,  395,  394,  393,  392,  391,  390,  389,  386,
-      385,  384,  383,  382,  381,  380,  379,  378,  377,  376,
-      375,  374,  370,  369,  368,  367,  366,  365,  364,  363,
-      362,  358,  357,  356,  355,  354,  353,  352,  351,  350,
-      349,  348,  347,  346,  345,  344,  343,  342,  341,  340,
-
-      339,  338,  337,  336,  335,  334,  333,  332,  331,  326,
-      325,  324,  323,  322,  321,  320,  319,  317,  206,  314,
-      312,  310,  307,  306,  304,  302,  295,  294,  293,  291,
-      290,  288,  287,  286,  285,  284,  283,  268,  267,  263,
-      259,  258,  257,  256,  255,  253,  252,  251,  250,  249,
-      246,  245,  244,  243,  242,  241,  240,  239,  238,  234,
-      233,  230,  227,  226,  225,  224,  221,  220,  219,  215,
-      214,  213,  212,  211,  210,  206,  199,  196,  195,  193,
-      191,  190,  182,  165,  145,  122,  110,  107,  106,  104,
-       43,  100,   98,   97,   88,   43, 1596,   11, 1596, 1596,
-
-     1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596,
-     1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596,
-     1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596,
-     1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596,
-     1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596,
-     1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596,
-     1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596,
-     1596
+     1596, 1597, 1598, 1599, 1600, 1601, 1602, 1603, 1604, 1605,
+     1606, 1607, 1608, 1609, 1610, 1611, 1612, 1613, 1614, 1615,
+     1616, 1617, 1618, 1619, 1620, 1621, 1622, 1623, 1624, 1625,
+     1626, 1627, 1628, 1629, 1630, 1631, 1632, 1633, 1634, 1635,
+
+     1636, 1637, 1638, 1639, 1640, 1641, 1642, 1643, 1644, 1645,
+     1646, 1647, 1648, 1649, 1650, 1651, 1652, 1653, 1654, 1655,
+     1656, 1657, 1658, 1659, 1660, 1661, 1662, 1663, 1664, 1665,
+     1666, 1667, 1668, 1669, 1670, 1671, 1672, 1673, 1674, 1675,
+     1676, 1677, 1678, 1679, 1680, 1681, 1682, 1683, 1684, 1685,
+     1686, 1687, 1688, 1689, 1690, 1691, 1692, 1693, 1694, 1695,
+     1696, 1697, 1698, 1699, 1700,   12,   12,   12,   12,   12,
+       36,   36,   36,   36,   36,   80,  305,   80,   80,   80,
+       99,  420,   99,  542,   99,  101,  101,  101,  101,  101,
+      116,  116,  116,  116,  116,  184,  101,  184,  184,  184,
+
+      206,  206,  206,  824,  823,  822,  821,  820,  819,  818,
+      817,  816,  815,  814,  813,  812,  811,  810,  809,  808,
+      807,  806,  805,  804,  803,  802,  801,  800,  799,  798,
+      797,  796,  795,  794,  793,  792,  791,  790,  789,  788,
+      787,  783,  780,  779,  778,  777,  776,  773,  772,  771,
+      770,  769,  768,  767,  766,  765,  764,  763,  762,  761,
+      758,  757,  756,  755,  754,  753,  752,  751,  750,  749,
+      748,  747,  746,  745,  744,  743,  742,  741,  740,  739,
+      738,  737,  736,  735,  734,  733,  730,  729,  728,  727,
+      726,  725,  724,  723,  722,  721,  720,  719,  718,  717,
+
+      716,  715,  714,  713,  712,  709,  708,  707,  706,  705,
+      704,  703,  702,  701,  700,  699,  698,  697,  696,  695,
+      694,  693,  692,  691,  690,  689,  688,  687,  686,  685,
+      684,  683,  682,  681,  680,  679,  678,  677,  676,  675,
+      674,  673,  672,  671,  670,  669,  665,  664,  663,  662,
+      661,  660,  659,  658,  657,  656,  655,  654,  653,  652,
+      651,  650,  649,  648,  647,  646,  645,  644,  643,  642,
+      641,  640,  639,  638,  637,  636,  635,  634,  633,  632,
+      631,  630,  629,  628,  627,  626,  625,  624,  623,  622,
+      621,  620,  619,  618,  617,  616,  615,  614,  613,  612,
+
+      611,  610,  609,  608,  607,  604,  603,  602,  601,  600,
+      599,  598,  597,  596,  595,  594,  593,  592,  591,  590,
+      589,  588,  585,  584,  583,  582,  581,  580,  579,  575,
+      574,  568,  567,  566,  565,  564,  563,  562,  561,  560,
+      559,  558,  557,  556,  552,  551,  550,  549,  548,  547,
+      546,  544,  543,  541,  540,  537,  536,  535,  534,  531,
+      530,  529,  528,  527,  526,  525,  524,  523,  522,  521,
+      520,  519,  516,  515,  514,  511,  510,  509,  508,  507,
+      506,  505,  502,  501,  500,  499,  498,  497,  496,  495,
+      494,  493,  492,  489,  488,  487,  486,  485,  484,  480,
+
+      479,  478,  477,  476,  475,  474,  473,  472,  467,  466,
+      465,  464,  463,  462,  461,  460,  459,  458,  457,  456,
+      453,  452,  451,  450,  449,  446,  445,  444,  443,  442,
+      441,  440,  439,  438,  437,  436,  433,  432,  430,  429,
+      424,  419,  416,  413,  412,  411,  410,  408,  407,  406,
+      405,  404,  403,  402,  399,  398,  397,  396,  395,  394,
+      393,  392,  389,  388,  387,  386,  385,  384,  383,  382,
+      381,  380,  379,  378,  377,  373,  372,  371,  370,  369,
+      368,  367,  366,  365,  361,  360,  359,  358,  357,  356,
+      355,  354,  353,  352,  351,  350,  349,  348,  347,  346,
+
+      345,  344,  343,  342,  341,  340,  339,  338,  337,  336,
+      335,  334,  333,  328,  327,  326,  325,  324,  323,  322,
+      321,  319,  207,  316,  314,  312,  309,  308,  306,  304,
+      297,  296,  295,  293,  292,  290,  289,  288,  287,  286,
+      285,  270,  269,  265,  261,  260,  259,  258,  257,  255,
+      254,  253,  252,  251,  248,  247,  246,  245,  244,  243,
+      242,  241,  240,  236,  235,  232,  229,  228,  227,  226,
+      223,  222,  221,  220,  216,  215,  214,  213,  212,  211,
+      207,  200,  197,  196,  194,  192,  191,  183,  166,  146,
+      122,  110,  107,  106,  104,   43,  100,   98,   97,   88,
+
+       43, 1701,   11, 1701, 1701, 1701, 1701, 1701, 1701, 1701,
+     1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701,
+     1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701,
+     1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701,
+     1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701,
+     1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701,
+     1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701,
+     1701, 1701, 1701, 1701, 1701, 1701
     } ;
 
-static const flex_int16_t yy_chk[2072] =
+static const flex_int16_t yy_chk[2177] =
     {   0,
         0,    1,    1,    1,    0,    1,    1,    0,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-       21,  611,    3,    3,    3,   21,    1,    1,    3,   44,
+       21,  620,    3,    3,    3,   21,    1,    1,    3,   44,
         0,    1,    4,    4,    4,   13,    1,   13,    4,   27,
        28,    1,  109,    1,    5,    5,    5,   26,   32,    1,
         1,   33,    6,    6,    6,    7,    7,    7,    1,    7,
-      611,    8,    8,    8,    1,    8,   44,   27,   28,  109,
+      620,    8,    8,    8,    1,    8,   44,   27,   28,  109,
        26,    1,    1,    2,    2,    2,   32,    2,    2,   33,
         2,    2,    2,    2,    2,    2,    2,    2,    2,    2,
         2,    2,    9,    9,    9,   31,    5,   48,    2,    2,
 
        10,   10,   10,    2,    6,   37,   51,   37,    2,   42,
        52,   42,    9,    2,   54,    2,   56,   57,   31,   66,
-       10,    2,    2,   48,  130,  130,   25,   66,   25,   51,
+       10,    2,    2,   48,  131,  131,   25,   66,   25,   51,
         2,   25,   25,   25,   25,   25,    2,   54,   52,   56,
-      135,   57,  135,    2,    2,   15,   15,   15,   15,   15,
+      136,   57,  136,    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,   15,   15,   15,   15,   15,   15,
@@ -1543,211 +1590,222 @@ static const flex_int16_t yy_chk[2072] =
        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,   17,  716,
+       15,   15,   15,   15,   15,   15,   15,   15,   17,  715,
        17,   17,   17,   17,   17,   19,   59,   19,   19,   19,
        19,   19,   64,   17,   20,   20,   20,   20,   20,   22,
-       19,   22,   22,   22,   22,   22,   91,   20,  168,  168,
+       19,   22,   22,   22,   22,   22,   91,   20,  169,  169,
        55,   61,   59,   63,   22,   64,   17,   93,   59,   61,
        55,   59,   61,   19,   63,   61,   64,   61,   65,   61,
        20,   67,   91,   55,   63,   65,   73,   22,   45,   92,
-       73,   67,  718,   67,   45,   93,   45,   45,   55,   45,
-       73,   45,   45,   45,  304,   58,   69,   69,   45,   45,
+       73,   67,  716,   67,   45,   93,   45,   45,   55,   45,
+       73,   45,   45,   45,  306,   58,   69,   69,   45,   45,
 
-       69,   45,   58,   96,  304,   92,   69,   45,   45,   45,
+       69,   45,   58,   96,  306,   92,   69,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       62,   96,   58,  641,   62,   70,   58,   62,   62,   70,
-       58,   71,   75,   70,  641,   94,   75,  101,   58,   78,
+       62,   96,   58,   62,   62,   70,   58,   62,   62,   70,
+       58,   71,   75,   70,  718,   94,   75,  101,   58,   78,
        62,  105,   58,   72,   58,   58,  112,   77,   77,   70,
        71,   72,   71,   72,   71,   95,   76,   77,   72,   72,
-       76,   94,   78,   76,  150,  281,  294,   77,  150,  105,
-       76,   76,   78,  112,  101,  115,   76,   78,  281,  719,
+       76,   94,   78,   76,  151,  283,  296,   77,  151,  105,
+       76,   76,   78,  112,  101,  115,   76,   78,  283,  719,
        77,   95,   77,   81,   81,   81,   81,   81,   82,  111,
 
        82,   82,   82,   82,   82,   77,   81,  113,  115,   83,
       720,   83,   77,   82,   83,   83,   83,   83,   83,   84,
-      114,   84,   84,   84,   84,   84,  103,  111,  294,   81,
-      108,  119,  721,  103,   84,  113,   82,   85,   85,   85,
-       85,   85,   89,   89,   89,   89,   89,  114,  119,  137,
-       85,   90,   90,   90,   90,   90,  108,   84,  169,  119,
-      126,  140,  169,  103,  140,  137,  169,  103,  140,  126,
-      126,  103,  186,   85,  156,  162,  162,  162,  164,  103,
-      167,  164,  164,  103,  176,  103,  103,  118,  118,  118,
-      118,  118,  185,  248,  722,  186,  118,  118,  118,  118,
-
-      118,  118,  156,  188,  156,  179,  184,  187,  258,  723,
-      197,  176,  198,  189,  194,  167,  167,  167,  185,  118,
-      118,  118,  118,  118,  118,  200,  167,  202,  167,  188,
-      167,  167,  179,  167,  184,  187,  189,  194,  197,  198,
-      204,  209,  272,  218,  258,  272,  248,  289,  200,  248,
-      202,  218,  289,  296,  379,  305,  218,  218,  258,  311,
-      299,  318,  308,  366,  209,  307,  307,  204,  207,  207,
-      207,  207,  207,  366,  307,  330,  296,  207,  207,  207,
-      207,  207,  207,  299,  305,  308,  549,  311,  336,  388,
-      318,  349,  330,  388,  336,  392,  349,  420,  724,  392,
-
-      207,  207,  207,  207,  207,  207,  316,  316,  316,  316,
-      316,  406,  379,  549,  406,  316,  316,  316,  316,  316,
-      316,  359,  359,  412,  432,  420,  359,  430,  412,  430,
-      459,  725,  450,  726,  550,  459,  478,  657,  316,  316,
-      316,  316,  316,  316,  349,  450,  478,  450,  551,  349,
-      590,  590,  432,  551,  430,  658,  430,  431,  431,  431,
-      431,  431,  550,  727,  728,  657,  431,  431,  431,  431,
-      431,  431,  729,  664,  666,  666,  730,  666,  658,  664,
-      703,  731,  732,  703,  733,  734,  735,  736,  737,  431,
-      431,  431,  431,  431,  431,  738,  739,  740,  741,  741,
-
-      742,  743,  744,  739,  746,  747,  741,  748,  744,  749,
-      741,  750,  751,  752,  753,  754,  755,  756,  757,  758,
-      760,  761,  762,  763,  764,  765,  766,  767,  768,  770,
-      771,  772,  773,  774,  775,  776,  777,  778,  779,  780,
-      781,  782,  783,  784,  785,  786,  787,  788,  790,  761,
-      791,  792,  793,  794,  795,  796,  797,  798,  799,  795,
-      800,  801,  802,  803,  806,  807,  808,  809,  810,  811,
-      814,  815,  816,  817,  818,  819,  820,  821,  822,  819,
-      823,  824,  825,  828,  829,  830,  831,  832,  833,  834,
-      835,  836,  837,  838,  839,  840,  841,  842,  843,  844,
-
-      845,  846,  847,  848,  849,  850,  851,  852,  853,  855,
-      856,  857,  858,  859,  860,  861,  862,  863,  864,  865,
-      867,  868,  869,  870,  871,  872,  873,  874,  875,  876,
-      877,  878,  879,  880,  881,  882,  883,  884,  885,  886,
-      887,  888,  889,  891,  868,  892,  893,  867,  894,  895,
-      896,  897,  898,  899,  901,  902,  903,  904,  905,  907,
-      908,  909,  910,  911,  912,  913,  914,  915,  916,  917,
-      918,  919,  920,  921,  922,  923,  924,  925,  926,  927,
-      929,  930,  931,  933,  934,  935,  936,  937,  938,  926,
-      939,  940,  941,  942,  943,  944,  945,  946,  947,  948,
-
-      949,  950,  952,  953,  954,  955,  956,  957,  958,  959,
-      960,  961,  962,  963,  964,  904,  965,  966,  968,  967,
-      969,  970,  971,  972,  973,  975,  976,  977,  978,  979,
-      980,  981,  982,  983,  984,  986,  987,  988,  989,  990,
-      991,  992,  993,  994,  995,  966,  967,  996,  997,  998,
-      999, 1000, 1002, 1003, 1004, 1005, 1006, 1002, 1007, 1008,
-     1009, 1010, 1011, 1012, 1013, 1014, 1015, 1016, 1017, 1018,
-     1019, 1020, 1021, 1022, 1023, 1024, 1025, 1026, 1027, 1029,
-     1030, 1031, 1032, 1033, 1034, 1035, 1036, 1037, 1038, 1039,
-     1041, 1042, 1043, 1045, 1046, 1047, 1048, 1003, 1049, 1050,
-
-     1051, 1052, 1053, 1054, 1055, 1056, 1057, 1058, 1060, 1061,
-     1062, 1063, 1064, 1065, 1066, 1068, 1069, 1070, 1071, 1072,
-     1073, 1074, 1075, 1078, 1079, 1080, 1081, 1082, 1083, 1084,
-     1085, 1086, 1061, 1087, 1088, 1089, 1090, 1091, 1062, 1092,
-     1095, 1097, 1098, 1099, 1100, 1101, 1102, 1103, 1104, 1105,
-     1106, 1107, 1109, 1110, 1111, 1112, 1114, 1115, 1116, 1117,
-     1118, 1121, 1122, 1123, 1124, 1125, 1126, 1127, 1128, 1129,
-     1130, 1131, 1132, 1133, 1134, 1135, 1136, 1138, 1139, 1140,
-     1143, 1144, 1145, 1146, 1147, 1148, 1149, 1150, 1151, 1152,
-     1154, 1155, 1156, 1157, 1158, 1159, 1160, 1161, 1163, 1164,
-
-     1165, 1166, 1167, 1168, 1169, 1170, 1172, 1173, 1174, 1175,
-     1176, 1177, 1178, 1179, 1180, 1181, 1151, 1182, 1183, 1184,
-     1185, 1186, 1187, 1130, 1188, 1189, 1190, 1191, 1192, 1194,
-     1187, 1197, 1198, 1199, 1200, 1201, 1202, 1157, 1203, 1204,
-     1205, 1207, 1208, 1209, 1210, 1211, 1212, 1213, 1215, 1216,
-     1218, 1221, 1223, 1225, 1226, 1227, 1228, 1229, 1231, 1232,
-     1227, 1233, 1235, 1236, 1237, 1238, 1239, 1240, 1241, 1242,
-     1243, 1244, 1246, 1247, 1248, 1249, 1250, 1251, 1252, 1253,
-     1229, 1254, 1255, 1256, 1259, 1261, 1262, 1263, 1264, 1265,
-     1266, 1267, 1268, 1270, 1271, 1272, 1273, 1274, 1275, 1277,
-
-     1278, 1280, 1281, 1282, 1283, 1285, 1286, 1287, 1288, 1289,
-     1290, 1291, 1293, 1295, 1297, 1299, 1300, 1301, 1302, 1303,
-     1304, 1305, 1306, 1307, 1308, 1309, 1310, 1311, 1312, 1313,
-     1314, 1315, 1316, 1317, 1318, 1319, 1319, 1320, 1321, 1322,
-     1323, 1297, 1324, 1325, 1326, 1327, 1328, 1329, 1330, 1331,
-     1332, 1333, 1334, 1335, 1336, 1337, 1338, 1339, 1340, 1341,
-     1342, 1343, 1345, 1346, 1347, 1349, 1350, 1351, 1352, 1354,
-     1357, 1358, 1359, 1362, 1363, 1364, 1367, 1368, 1369, 1370,
-     1371, 1372, 1373, 1374, 1376, 1377, 1379, 1381, 1382, 1383,
-     1385, 1386, 1387, 1388, 1390, 1320, 1352, 1391, 1392, 1393,
-
-     1394, 1395, 1396, 1397, 1398, 1399, 1400, 1401, 1402, 1403,
-     1405, 1406, 1407, 1408, 1409, 1411, 1412, 1413, 1414, 1415,
-     1416, 1417, 1419, 1420, 1421, 1423, 1425, 1426, 1427, 1428,
-     1429, 1430, 1431, 1432, 1433, 1434, 1435, 1436, 1437, 1439,
-     1440, 1442, 1445, 1448, 1450, 1451, 1452, 1454, 1455, 1457,
-     1458, 1459, 1460, 1461, 1462, 1464, 1465, 1466, 1468, 1469,
-     1470, 1471, 1472, 1473, 1474, 1475, 1477, 1478, 1479, 1480,
-     1481, 1482, 1483, 1484, 1485, 1486, 1487, 1490, 1491, 1492,
-     1493, 1494, 1495, 1496, 1498, 1499, 1500, 1501, 1502, 1503,
-     1504, 1505, 1506, 1508, 1509, 1510, 1511, 1512, 1514, 1518,
-
-     1520, 1521, 1522, 1523, 1525, 1527, 1528, 1529, 1530, 1532,
-     1533, 1535, 1536, 1539, 1540, 1541, 1542, 1543, 1544, 1545,
-     1546, 1547, 1548, 1549, 1550, 1551, 1552, 1553, 1554, 1555,
-     1556, 1557, 1558, 1559, 1560, 1562, 1563, 1564, 1565, 1566,
-     1568, 1570, 1571, 1572, 1573, 1574, 1575, 1579, 1580, 1581,
-     1582, 1584, 1585, 1587, 1588, 1589, 1590, 1591, 1593, 1594,
-     1597, 1597, 1597, 1597, 1597, 1598, 1598, 1598, 1598, 1598,
-     1599, 1605, 1599, 1599, 1599, 1600, 1606, 1600, 1607, 1600,
-     1601, 1601, 1601, 1601, 1601, 1602, 1602, 1602, 1602, 1602,
-     1603, 1608, 1603, 1603, 1603, 1604, 1604, 1604,  715,  714,
-
-      713,  712,  711,  710,  709,  708,  706,  705,  704,  702,
-      701,  700,  699,  698,  697,  696,  695,  694,  693,  692,
-      691,  690,  689,  688,  687,  685,  684,  683,  682,  681,
-      680,  679,  678,  677,  676,  675,  674,  673,  672,  671,
-      670,  669,  668,  667,  665,  663,  662,  661,  660,  659,
-      656,  655,  654,  652,  651,  649,  648,  647,  646,  645,
-      644,  643,  642,  639,  638,  637,  636,  635,  634,  633,
-      632,  631,  630,  629,  628,  627,  625,  624,  623,  622,
-      621,  620,  619,  618,  616,  615,  614,  613,  612,  610,
-      609,  608,  607,  606,  605,  604,  602,  601,  600,  599,
-
-      598,  597,  596,  595,  594,  593,  592,  591,  589,  588,
-      587,  586,  585,  584,  583,  582,  581,  580,  579,  578,
-      576,  575,  574,  573,  572,  571,  570,  569,  568,  567,
-      566,  565,  564,  563,  562,  561,  560,  559,  558,  557,
-      556,  555,  554,  553,  547,  545,  542,  541,  540,  539,
-      537,  536,  535,  533,  532,  529,  528,  527,  526,  525,
-      524,  523,  522,  521,  520,  519,  518,  517,  516,  515,
-      514,  513,  512,  511,  510,  509,  508,  507,  506,  505,
-      504,  503,  502,  500,  498,  497,  496,  495,  494,  493,
-      492,  491,  490,  489,  488,  487,  486,  484,  483,  482,
-
-      481,  480,  479,  477,  476,  475,  474,  473,  472,  471,
-      470,  469,  468,  467,  466,  465,  463,  462,  461,  460,
-      458,  457,  456,  455,  454,  452,  451,  449,  448,  446,
-      445,  444,  443,  442,  441,  440,  438,  437,  436,  435,
-      434,  433,  428,  427,  425,  424,  423,  422,  421,  419,
-      418,  416,  413,  411,  410,  408,  407,  405,  404,  403,
-      402,  401,  400,  399,  398,  397,  396,  395,  394,  393,
-      391,  390,  389,  387,  386,  385,  384,  382,  381,  380,
-      378,  377,  376,  375,  374,  373,  372,  371,  370,  369,
-      367,  365,  364,  363,  362,  361,  360,  358,  357,  356,
-
-      355,  354,  353,  352,  351,  350,  348,  347,  346,  345,
-      344,  343,  342,  341,  340,  339,  338,  337,  335,  334,
-      333,  332,  329,  328,  327,  326,  325,  324,  323,  322,
-      321,  320,  319,  315,  313,  310,  309,  306,  302,  295,
-      293,  292,  291,  290,  288,  287,  286,  285,  284,  283,
-      282,  280,  279,  278,  277,  276,  275,  274,  273,  271,
-      270,  269,  268,  267,  266,  265,  264,  263,  262,  261,
-      260,  259,  257,  256,  255,  254,  253,  252,  251,  250,
-      249,  247,  246,  245,  244,  243,  242,  241,  240,  238,
-      237,  236,  235,  234,  233,  232,  231,  230,  229,  228,
-
-      227,  226,  225,  224,  223,  222,  221,  220,  219,  217,
-      216,  215,  214,  213,  212,  211,  210,  208,  205,  203,
-      201,  199,  196,  195,  193,  190,  182,  181,  180,  178,
-      177,  175,  174,  173,  172,  171,  170,  166,  165,  163,
-      161,  160,  159,  158,  157,  155,  154,  153,  152,  151,
-      149,  148,  147,  146,  145,  144,  143,  142,  141,  139,
-      138,  136,  134,  133,  132,  131,  129,  128,  127,  125,
-      124,  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, 1596, 1596, 1596,
-
-     1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596,
-     1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596,
-     1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596,
-     1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596,
-     1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596,
-     1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596,
-     1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596,
-     1596
+      114,   84,   84,   84,   84,   84,  103,  111,  296,   81,
+      108,  119,  722,  103,   84,  113,   82,   85,   85,   85,
+       85,   85,   89,   89,   89,   89,   89,  114,  119,  138,
+       85,   90,   90,   90,   90,   90,  108,   84,  170,  119,
+      126,  141,  170,  103,  141,  138,  170,  103,  141,  126,
+      126,  103,  187,   85,  157,  163,  163,  163,  165,  103,
+      168,  165,  165,  103,  177,  103,  103,  118,  118,  118,
+      118,  118,  186,  250,  723,  187,  118,  118,  118,  118,
+
+      118,  118,  157,  189,  157,  180,  185,  188,  260,  724,
+      198,  177,  199,  190,  195,  168,  168,  168,  186,  118,
+      118,  118,  118,  118,  118,  201,  168,  203,  168,  189,
+      168,  168,  180,  168,  185,  188,  190,  195,  198,  199,
+      205,  210,  274,  219,  260,  274,  250,  291,  201,  250,
+      203,  219,  291,  298,  382,  307,  219,  219,  260,  313,
+      301,  320,  310,  369,  210,  309,  309,  205,  208,  208,
+      208,  208,  208,  369,  309,  332,  298,  208,  208,  208,
+      208,  208,  208,  301,  307,  310,  553,  313,  339,  391,
+      320,  352,  332,  391,  339,  395,  352,  423,  725,  395,
+
+      208,  208,  208,  208,  208,  208,  318,  318,  318,  318,
+      318,  409,  382,  553,  409,  318,  318,  318,  318,  318,
+      318,  362,  362,  415,  435,  423,  362,  433,  415,  433,
+      463,  726,  454,  727,  554,  463,  482,  666,  318,  318,
+      318,  318,  318,  318,  352,  454,  482,  454,  555,  352,
+      599,  599,  435,  555,  433,  667,  433,  434,  434,  434,
+      434,  434,  554,  728,  451,  666,  434,  434,  434,  434,
+      434,  434,  451,  650,  451,  451,  451,  673,  667,  675,
+      675,  729,  675,  673,  650,  717,  730,  732,  717,  434,
+      434,  434,  434,  434,  434,  733,  734,  735,  736,  737,
+
+      738,  739,  740,  741,  742,  743,  744,  745,  746,  747,
+      748,  749,  750,  751,  752,  753,  754,  755,  755,  756,
+      757,  758,  753,  760,  761,  755,  762,  758,  763,  755,
+      764,  765,  766,  767,  768,  769,  770,  771,  772,  774,
+      775,  776,  777,  778,  779,  780,  781,  782,  784,  785,
+      786,  787,  788,  789,  790,  791,  792,  793,  794,  795,
+      796,  797,  798,  799,  800,  801,  802,  803,  775,  804,
+      805,  806,  807,  809,  810,  811,  812,  813,  814,  815,
+      816,  817,  818,  814,  819,  820,  821,  822,  825,  826,
+      827,  828,  829,  830,  833,  834,  835,  836,  837,  838,
+
+      839,  840,  841,  838,  842,  843,  844,  847,  848,  849,
+      850,  851,  852,  853,  854,  855,  856,  857,  858,  859,
+      860,  861,  862,  863,  864,  865,  866,  867,  868,  869,
+      870,  871,  872,  874,  875,  876,  877,  878,  879,  880,
+      881,  882,  883,  884,  886,  887,  888,  889,  890,  891,
+      892,  893,  894,  895,  896,  897,  898,  899,  900,  901,
+      902,  903,  904,  905,  906,  907,  908,  909,  887,  910,
+      911,  886,  912,  913,  915,  916,  917,  918,  919,  920,
+      921,  922,  923,  925,  926,  927,  928,  929,  931,  932,
+      933,  934,  935,  936,  937,  938,  939,  940,  941,  942,
+
+      943,  944,  945,  946,  947,  948,  949,  950,  951,  953,
+      954,  955,  957,  958,  959,  960,  961,  962,  950,  963,
+      964,  965,  966,  967,  968,  969,  970,  971,  972,  973,
+      974,  976,  977,  978,  979,  980,  981,  982,  983,  984,
+      985,  986,  987,  988,  928,  989,  990,  992,  991,  993,
+      994,  995,  996,  997,  999, 1000, 1001, 1002, 1003, 1004,
+     1005, 1006, 1007, 1008, 1009, 1010, 1011, 1012, 1013, 1015,
+     1016, 1017, 1018, 1019,  990,  991, 1020, 1021, 1022, 1023,
+     1024, 1025, 1026, 1027, 1028, 1029, 1031, 1032, 1033, 1034,
+     1035, 1031, 1036, 1037, 1038, 1039, 1040, 1041, 1042, 1043,
+
+     1044, 1045, 1046, 1047, 1048, 1049, 1050, 1051, 1052, 1053,
+     1054, 1055, 1056, 1058, 1059, 1060, 1061, 1062, 1063, 1064,
+     1065, 1066, 1067, 1068, 1070, 1071, 1072, 1074, 1075, 1076,
+     1077, 1032, 1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085,
+     1086, 1087, 1089, 1090, 1091, 1092, 1093, 1094, 1095, 1097,
+     1098, 1099, 1100, 1101, 1102, 1103, 1104, 1106, 1107, 1108,
+     1109, 1110, 1112, 1113, 1114, 1115, 1090, 1116, 1117, 1118,
+     1119, 1120, 1091, 1121, 1122, 1123, 1124, 1125, 1126, 1129,
+     1131, 1132, 1133, 1134, 1135, 1136, 1137, 1138, 1139, 1140,
+     1141, 1143, 1144, 1145, 1146, 1148, 1149, 1150, 1151, 1152,
+
+     1155, 1156, 1157, 1158, 1159, 1160, 1161, 1162, 1163, 1164,
+     1165, 1166, 1167, 1168, 1169, 1170, 1172, 1173, 1174, 1177,
+     1178, 1179, 1180, 1181, 1182, 1183, 1184, 1185, 1186, 1188,
+     1189, 1190, 1191, 1192, 1193, 1194, 1195, 1197, 1198, 1199,
+     1200, 1201, 1202, 1203, 1204, 1205, 1206, 1207, 1208, 1209,
+     1211, 1212, 1213, 1214, 1215, 1185, 1216, 1217, 1218, 1219,
+     1220, 1221, 1164, 1222, 1223, 1224, 1225, 1226, 1227, 1228,
+     1229, 1230, 1231, 1233, 1236, 1226, 1191, 1237, 1238, 1239,
+     1240, 1241, 1242, 1243, 1244, 1246, 1247, 1248, 1249, 1250,
+     1251, 1252, 1254, 1255, 1257, 1260, 1262, 1264, 1265, 1266,
+
+     1267, 1268, 1270, 1271, 1266, 1272, 1274, 1275, 1276, 1277,
+     1278, 1279, 1280, 1281, 1282, 1283, 1284, 1285, 1286, 1287,
+     1288, 1290, 1291, 1292, 1268, 1293, 1294, 1295, 1296, 1297,
+     1298, 1299, 1300, 1303, 1305, 1306, 1307, 1308, 1309, 1310,
+     1311, 1312, 1314, 1315, 1316, 1317, 1318, 1319, 1321, 1322,
+     1324, 1325, 1326, 1327, 1329, 1330, 1331, 1332, 1333, 1334,
+     1335, 1337, 1339, 1341, 1343, 1344, 1345, 1346, 1347, 1348,
+     1349, 1350, 1351, 1352, 1353, 1354, 1355, 1356, 1357, 1358,
+     1359, 1360, 1361, 1362, 1363, 1353, 1364, 1365, 1366, 1367,
+     1341, 1368, 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, 1394, 1395, 1396,
+     1398, 1399, 1400, 1403, 1401, 1406, 1407, 1408, 1411, 1412,
+     1413, 1414, 1415, 1416, 1417, 1418, 1419, 1422, 1423, 1424,
+     1425, 1426, 1427, 1428, 1429, 1431, 1432, 1434, 1436, 1437,
+     1438, 1369, 1401, 1440, 1441, 1442, 1443, 1445, 1446, 1447,
+     1448, 1449, 1450, 1451, 1452, 1453, 1454, 1455, 1456, 1457,
+     1458, 1460, 1461, 1462, 1463, 1464, 1466, 1467, 1468, 1469,
+     1470, 1471, 1472, 1473, 1474, 1475, 1476, 1477, 1478, 1480,
+     1481, 1482, 1484, 1486, 1487, 1488, 1489, 1490, 1491, 1492,
+
+     1493, 1494, 1495, 1496, 1497, 1498, 1500, 1501, 1503, 1506,
+     1509, 1511, 1512, 1513, 1514, 1515, 1516, 1517, 1518, 1519,
+     1521, 1522, 1524, 1525, 1526, 1527, 1528, 1529, 1531, 1532,
+     1533, 1535, 1536, 1537, 1538, 1539, 1540, 1541, 1542, 1544,
+     1545, 1546, 1547, 1548, 1549, 1550, 1551, 1552, 1554, 1555,
+     1556, 1557, 1558, 1559, 1560, 1563, 1564, 1565, 1566, 1567,
+     1568, 1569, 1571, 1572, 1573, 1574, 1575, 1576, 1577, 1578,
+     1579, 1580, 1581, 1582, 1583, 1584, 1586, 1587, 1588, 1589,
+     1590, 1592, 1596, 1598, 1599, 1600, 1601, 1603, 1605, 1606,
+     1607, 1608, 1609, 1610, 1611, 1612, 1613, 1615, 1616, 1618,
+
+     1619, 1622, 1623, 1624, 1625, 1626, 1627, 1628, 1629, 1630,
+     1631, 1632, 1633, 1634, 1635, 1636, 1637, 1638, 1639, 1641,
+     1642, 1643, 1644, 1645, 1646, 1647, 1648, 1649, 1650, 1651,
+     1652, 1653, 1655, 1656, 1658, 1659, 1660, 1661, 1662, 1663,
+     1665, 1667, 1668, 1670, 1671, 1672, 1673, 1674, 1675, 1678,
+     1681, 1682, 1683, 1684, 1685, 1687, 1688, 1690, 1691, 1692,
+     1694, 1695, 1696, 1698, 1699, 1702, 1702, 1702, 1702, 1702,
+     1703, 1703, 1703, 1703, 1703, 1704, 1710, 1704, 1704, 1704,
+     1705, 1711, 1705, 1712, 1705, 1706, 1706, 1706, 1706, 1706,
+     1707, 1707, 1707, 1707, 1707, 1708, 1713, 1708, 1708, 1708,
+
+     1709, 1709, 1709,  714,  713,  712,  711,  710,  709,  708,
+      707,  706,  705,  704,  703,  702,  701,  699,  698,  697,
+      696,  695,  694,  693,  692,  691,  690,  689,  688,  687,
+      686,  685,  684,  683,  682,  681,  680,  679,  678,  677,
+      676,  674,  672,  671,  670,  669,  668,  665,  664,  663,
+      661,  660,  658,  657,  656,  655,  654,  653,  652,  651,
+      648,  647,  646,  645,  644,  643,  642,  641,  640,  639,
+      638,  637,  636,  634,  633,  632,  631,  630,  629,  628,
+      627,  625,  624,  623,  622,  621,  619,  618,  617,  616,
+      615,  614,  613,  611,  610,  609,  608,  607,  606,  605,
+
+      604,  603,  602,  601,  600,  598,  597,  596,  595,  594,
+      593,  592,  591,  590,  589,  588,  587,  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,  551,  549,  546,  545,
+      544,  543,  541,  540,  539,  537,  536,  533,  532,  531,
+      530,  529,  528,  527,  526,  525,  524,  523,  522,  521,
+      520,  519,  518,  517,  516,  515,  514,  513,  512,  511,
+      510,  509,  508,  507,  506,  504,  502,  501,  500,  499,
+      498,  497,  496,  495,  494,  493,  492,  491,  490,  488,
+
+      487,  486,  485,  484,  483,  481,  480,  479,  478,  477,
+      476,  475,  474,  473,  472,  471,  470,  469,  467,  466,
+      465,  464,  462,  461,  460,  459,  458,  456,  455,  453,
+      452,  449,  448,  447,  446,  445,  444,  443,  441,  440,
+      439,  438,  437,  436,  431,  430,  428,  427,  426,  425,
+      424,  422,  421,  419,  416,  414,  413,  411,  410,  408,
+      407,  406,  405,  404,  403,  402,  401,  400,  399,  398,
+      397,  396,  394,  393,  392,  390,  389,  388,  387,  385,
+      384,  383,  381,  380,  379,  378,  377,  376,  375,  374,
+      373,  372,  370,  368,  367,  366,  365,  364,  363,  361,
+
+      360,  359,  358,  357,  356,  355,  354,  353,  351,  350,
+      349,  348,  347,  346,  345,  344,  343,  342,  341,  340,
+      338,  337,  336,  335,  334,  331,  330,  329,  328,  327,
+      326,  325,  324,  323,  322,  321,  317,  315,  312,  311,
+      308,  304,  297,  295,  294,  293,  292,  290,  289,  288,
+      287,  286,  285,  284,  282,  281,  280,  279,  278,  277,
+      276,  275,  273,  272,  271,  270,  269,  268,  267,  266,
+      265,  264,  263,  262,  261,  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,
+
+      232,  231,  230,  229,  228,  227,  226,  225,  224,  223,
+      222,  221,  220,  218,  217,  216,  215,  214,  213,  212,
+      211,  209,  206,  204,  202,  200,  197,  196,  194,  191,
+      183,  182,  181,  179,  178,  176,  175,  174,  173,  172,
+      171,  167,  166,  164,  162,  161,  160,  159,  158,  156,
+      155,  154,  153,  152,  150,  149,  148,  147,  146,  145,
+      144,  143,  142,  140,  139,  137,  135,  134,  133,  132,
+      130,  129,  128,  127,  125,  124,  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, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701,
+     1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701,
+     1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701,
+     1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701,
+     1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701,
+     1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701,
+     1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701,
+     1701, 1701, 1701, 1701, 1701, 1701
     } ;
 
 static yy_state_type yy_last_accepting_state;
@@ -1756,7 +1814,7 @@ static char *yy_last_accepting_cpos;
 extern int yy_flex_debug;
 int yy_flex_debug = 1;
 
-static const flex_int16_t yy_rule_linenum[185] =
+static const flex_int16_t yy_rule_linenum[191] =
     {   0,
       147,  149,  151,  156,  157,  162,  163,  164,  176,  179,
       184,  191,  200,  209,  218,  227,  236,  245,  255,  264,
@@ -1764,20 +1822,20 @@ static const flex_int16_t yy_rule_linenum[185] =
       363,  375,  384,  393,  402,  411,  422,  433,  444,  455,
       465,  475,  486,  497,  508,  519,  530,  541,  552,  563,
       574,  585,  594,  605,  616,  627,  638,  649,  658,  667,
-      677,  686,  696,  710,  726,  735,  744,  753,  762,  783,
-      804,  813,  823,  832,  843,  852,  861,  870,  879,  888,
-      898,  907,  918,  929,  941,  950,  960,  969,  978,  987,
-      996, 1005, 1014, 1023, 1032, 1042, 1053, 1065, 1074, 1083,
-
-     1093, 1103, 1113, 1123, 1133, 1143, 1152, 1162, 1171, 1180,
-     1189, 1198, 1208, 1218, 1227, 1237, 1246, 1255, 1264, 1273,
-     1282, 1291, 1300, 1309, 1318, 1327, 1336, 1345, 1354, 1363,
-     1372, 1381, 1390, 1399, 1408, 1417, 1426, 1435, 1444, 1453,
-     1462, 1471, 1480, 1489, 1499, 1509, 1519, 1529, 1539, 1549,
-     1559, 1569, 1579, 1589, 1599, 1608, 1617, 1626, 1635, 1644,
-     1653, 1662, 1673, 1684, 1697, 1710, 1725, 1824, 1829, 1834,
-     1839, 1840, 1841, 1842, 1843, 1844, 1846, 1864, 1877, 1882,
-     1886, 1888, 1890, 1892
+      678,  689,  700,  711,  722,  733,  743,  752,  762,  776,
+      792,  801,  810,  819,  828,  849,  870,  879,  889,  898,
+      909,  918,  927,  936,  945,  954,  964,  973,  984,  995,
+     1007, 1016, 1026, 1035, 1044, 1053, 1062, 1071, 1080, 1089,
+
+     1098, 1108, 1119, 1131, 1140, 1149, 1159, 1169, 1179, 1189,
+     1199, 1209, 1218, 1228, 1237, 1246, 1255, 1264, 1274, 1284,
+     1293, 1303, 1312, 1321, 1330, 1339, 1348, 1357, 1366, 1375,
+     1384, 1393, 1402, 1411, 1420, 1429, 1438, 1447, 1456, 1465,
+     1474, 1483, 1492, 1501, 1510, 1519, 1528, 1537, 1546, 1555,
+     1567, 1579, 1589, 1599, 1609, 1619, 1629, 1639, 1649, 1659,
+     1669, 1678, 1687, 1696, 1705, 1714, 1723, 1732, 1743, 1754,
+     1767, 1780, 1795, 1894, 1899, 1904, 1909, 1910, 1911, 1912,
+     1913, 1914, 1916, 1934, 1947, 1952, 1956, 1958, 1960, 1962
     } ;
 
 /* The intent behind this definition is that it'll catch
@@ -1830,7 +1888,7 @@ using namespace isc::dhcp;
 
 /* To avoid the call to exit... oops! */
 #define YY_FATAL_ERROR(msg) isc::dhcp::Parser4Context::fatal(msg)
-#line 1833 "dhcp4_lexer.cc"
+#line 1892 "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
@@ -1856,8 +1914,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 1859 "dhcp4_lexer.cc"
-#line 1860 "dhcp4_lexer.cc"
+#line 1918 "dhcp4_lexer.cc"
+#line 1919 "dhcp4_lexer.cc"
 
 #define INITIAL 0
 #define COMMENT 1
@@ -2187,7 +2245,7 @@ YY_DECL
     }
 
 
-#line 2190 "dhcp4_lexer.cc"
+#line 2249 "dhcp4_lexer.cc"
 
        while ( /*CONSTCOND*/1 )                /* loops until end-of-file is reached */
                {
@@ -2216,13 +2274,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 >= 1597 )
+                               if ( yy_current_state >= 1702 )
                                        yy_c = yy_meta[yy_c];
                                }
                        yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c];
                        ++yy_cp;
                        }
-               while ( yy_current_state != 1596 );
+               while ( yy_current_state != 1701 );
                yy_cp = (yy_last_accepting_cpos);
                yy_current_state = (yy_last_accepting_state);
 
@@ -2241,13 +2299,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 < 185 )
+                       else if ( yy_act < 191 )
                                fprintf( stderr, "--accepting rule at line %ld (\"%s\")\n",
                                         (long)yy_rule_linenum[yy_act], yytext );
-                       else if ( yy_act == 185 )
+                       else if ( yy_act == 191 )
                                fprintf( stderr, "--accepting default rule (\"%s\")\n",
                                         yytext );
-                       else if ( yy_act == 186 )
+                       else if ( yy_act == 192 )
                                fprintf( stderr, "--(end of buffer or a NUL)\n" );
                        else
                                fprintf( stderr, "--EOF (start condition %d)\n", YY_START );
@@ -2974,6 +3032,90 @@ YY_RULE_SETUP
 case 60:
 YY_RULE_SETUP
 #line 667 "dhcp4_lexer.ll"
+{
+    switch(driver.ctx_) {
+    case isc::dhcp::Parser4Context::DHCP4:
+    case isc::dhcp::Parser4Context::SUBNET4:
+    case isc::dhcp::Parser4Context::SHARED_NETWORK:
+        return isc::dhcp::Dhcp4Parser::make_DDNS_SEND_UPDATES(driver.loc_);
+    default:
+        return isc::dhcp::Dhcp4Parser::make_STRING("ddns-send-updates", driver.loc_);
+    }
+}
+       YY_BREAK
+case 61:
+YY_RULE_SETUP
+#line 678 "dhcp4_lexer.ll"
+{
+    switch(driver.ctx_) {
+    case isc::dhcp::Parser4Context::DHCP4:
+    case isc::dhcp::Parser4Context::SUBNET4:
+    case isc::dhcp::Parser4Context::SHARED_NETWORK:
+        return isc::dhcp::Dhcp4Parser::make_DDNS_OVERRIDE_NO_UPDATE(driver.loc_);
+    default:
+        return isc::dhcp::Dhcp4Parser::make_STRING("ddns-override-no-update", driver.loc_);
+    }
+}
+       YY_BREAK
+case 62:
+YY_RULE_SETUP
+#line 689 "dhcp4_lexer.ll"
+{
+    switch(driver.ctx_) {
+    case isc::dhcp::Parser4Context::DHCP4:
+    case isc::dhcp::Parser4Context::SUBNET4:
+    case isc::dhcp::Parser4Context::SHARED_NETWORK:
+        return isc::dhcp::Dhcp4Parser::make_DDNS_OVERRIDE_CLIENT_UPDATE(driver.loc_);
+    default:
+        return isc::dhcp::Dhcp4Parser::make_STRING("ddns-override-client-update", driver.loc_);
+    }
+}
+       YY_BREAK
+case 63:
+YY_RULE_SETUP
+#line 700 "dhcp4_lexer.ll"
+{
+    switch(driver.ctx_) {
+    case isc::dhcp::Parser4Context::DHCP4:
+    case isc::dhcp::Parser4Context::SUBNET4:
+    case isc::dhcp::Parser4Context::SHARED_NETWORK:
+        return isc::dhcp::Dhcp4Parser::make_DDNS_REPLACE_CLIENT_NAME(driver.loc_);
+    default:
+        return isc::dhcp::Dhcp4Parser::make_STRING("ddns-replace-client-name", driver.loc_);
+    }
+}
+       YY_BREAK
+case 64:
+YY_RULE_SETUP
+#line 711 "dhcp4_lexer.ll"
+{
+    switch(driver.ctx_) {
+    case isc::dhcp::Parser4Context::DHCP4:
+    case isc::dhcp::Parser4Context::SUBNET4:
+    case isc::dhcp::Parser4Context::SHARED_NETWORK:
+        return isc::dhcp::Dhcp4Parser::make_DDNS_GENERATED_PREFIX(driver.loc_);
+    default:
+        return isc::dhcp::Dhcp4Parser::make_STRING("ddns-generated-prefix", driver.loc_);
+    }
+}
+       YY_BREAK
+case 65:
+YY_RULE_SETUP
+#line 722 "dhcp4_lexer.ll"
+{
+    switch(driver.ctx_) {
+    case isc::dhcp::Parser4Context::DHCP4:
+    case isc::dhcp::Parser4Context::SUBNET4:
+    case isc::dhcp::Parser4Context::SHARED_NETWORK:
+        return isc::dhcp::Dhcp4Parser::make_DDNS_QUALIFYING_SUFFIX(driver.loc_);
+    default:
+        return isc::dhcp::Dhcp4Parser::make_STRING("ddns-qualifying-suffix", driver.loc_);
+    }
+}
+       YY_BREAK
+case 66:
+YY_RULE_SETUP
+#line 733 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::DHCP4:
@@ -2984,9 +3126,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 61:
+case 67:
 YY_RULE_SETUP
-#line 677 "dhcp4_lexer.ll"
+#line 743 "dhcp4_lexer.ll"
 {
     switch (driver.ctx_) {
     case isc::dhcp::Parser4Context::DHCP4:
@@ -2996,9 +3138,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 62:
+case 68:
 YY_RULE_SETUP
-#line 686 "dhcp4_lexer.ll"
+#line 752 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::DHCP4:
@@ -3009,9 +3151,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 63:
+case 69:
 YY_RULE_SETUP
-#line 696 "dhcp4_lexer.ll"
+#line 762 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::DHCP4:
@@ -3026,9 +3168,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 64:
+case 70:
 YY_RULE_SETUP
-#line 710 "dhcp4_lexer.ll"
+#line 776 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::LEASE_DATABASE:
@@ -3045,9 +3187,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 65:
+case 71:
 YY_RULE_SETUP
-#line 726 "dhcp4_lexer.ll"
+#line 792 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::OPTION_DATA:
@@ -3057,9 +3199,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 66:
+case 72:
 YY_RULE_SETUP
-#line 735 "dhcp4_lexer.ll"
+#line 801 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::OPTION_DATA:
@@ -3069,9 +3211,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 67:
+case 73:
 YY_RULE_SETUP
-#line 744 "dhcp4_lexer.ll"
+#line 810 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::SUBNET4:
@@ -3081,9 +3223,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 68:
+case 74:
 YY_RULE_SETUP
-#line 753 "dhcp4_lexer.ll"
+#line 819 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::POOLS:
@@ -3093,9 +3235,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 69:
+case 75:
 YY_RULE_SETUP
-#line 762 "dhcp4_lexer.ll"
+#line 828 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::DHCP4:
@@ -3117,9 +3259,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 70:
+case 76:
 YY_RULE_SETUP
-#line 783 "dhcp4_lexer.ll"
+#line 849 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::DHCP4:
@@ -3141,9 +3283,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 71:
+case 77:
 YY_RULE_SETUP
-#line 804 "dhcp4_lexer.ll"
+#line 870 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::SUBNET4:
@@ -3153,9 +3295,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 72:
+case 78:
 YY_RULE_SETUP
-#line 813 "dhcp4_lexer.ll"
+#line 879 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::SUBNET4:
@@ -3166,9 +3308,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 73:
+case 79:
 YY_RULE_SETUP
-#line 823 "dhcp4_lexer.ll"
+#line 889 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::SUBNET4:
@@ -3178,9 +3320,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 74:
+case 80:
 YY_RULE_SETUP
-#line 832 "dhcp4_lexer.ll"
+#line 898 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::DHCP4:
@@ -3192,9 +3334,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 75:
+case 81:
 YY_RULE_SETUP
-#line 843 "dhcp4_lexer.ll"
+#line 909 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::RESERVATION_MODE:
@@ -3204,9 +3346,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 76:
+case 82:
 YY_RULE_SETUP
-#line 852 "dhcp4_lexer.ll"
+#line 918 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::RESERVATION_MODE:
@@ -3216,9 +3358,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 77:
+case 83:
 YY_RULE_SETUP
-#line 861 "dhcp4_lexer.ll"
+#line 927 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::RESERVATION_MODE:
@@ -3228,9 +3370,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 78:
+case 84:
 YY_RULE_SETUP
-#line 870 "dhcp4_lexer.ll"
+#line 936 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::RESERVATION_MODE:
@@ -3240,9 +3382,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 79:
+case 85:
 YY_RULE_SETUP
-#line 879 "dhcp4_lexer.ll"
+#line 945 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::RESERVATION_MODE:
@@ -3252,9 +3394,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 80:
+case 86:
 YY_RULE_SETUP
-#line 888 "dhcp4_lexer.ll"
+#line 954 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::OPTION_DEF:
@@ -3265,9 +3407,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 81:
+case 87:
 YY_RULE_SETUP
-#line 898 "dhcp4_lexer.ll"
+#line 964 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::DHCP4:
@@ -3277,9 +3419,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 82:
+case 88:
 YY_RULE_SETUP
-#line 907 "dhcp4_lexer.ll"
+#line 973 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::DHCP4:
@@ -3291,9 +3433,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 83:
+case 89:
 YY_RULE_SETUP
-#line 918 "dhcp4_lexer.ll"
+#line 984 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::DHCP4:
@@ -3305,9 +3447,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 84:
+case 90:
 YY_RULE_SETUP
-#line 929 "dhcp4_lexer.ll"
+#line 995 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::DHCP4:
@@ -3319,9 +3461,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 85:
+case 91:
 YY_RULE_SETUP
-#line 941 "dhcp4_lexer.ll"
+#line 1007 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::CONFIG:
@@ -3331,9 +3473,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 86:
+case 92:
 YY_RULE_SETUP
-#line 950 "dhcp4_lexer.ll"
+#line 1016 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::DHCP4:
@@ -3344,9 +3486,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 87:
+case 93:
 YY_RULE_SETUP
-#line 960 "dhcp4_lexer.ll"
+#line 1026 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::LOGGERS:
@@ -3356,9 +3498,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 88:
+case 94:
 YY_RULE_SETUP
-#line 969 "dhcp4_lexer.ll"
+#line 1035 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::OUTPUT_OPTIONS:
@@ -3368,9 +3510,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 89:
+case 95:
 YY_RULE_SETUP
-#line 978 "dhcp4_lexer.ll"
+#line 1044 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::LOGGERS:
@@ -3380,9 +3522,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 90:
+case 96:
 YY_RULE_SETUP
-#line 987 "dhcp4_lexer.ll"
+#line 1053 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::OUTPUT_OPTIONS:
@@ -3392,9 +3534,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 91:
+case 97:
 YY_RULE_SETUP
-#line 996 "dhcp4_lexer.ll"
+#line 1062 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::OUTPUT_OPTIONS:
@@ -3404,9 +3546,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 92:
+case 98:
 YY_RULE_SETUP
-#line 1005 "dhcp4_lexer.ll"
+#line 1071 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::OUTPUT_OPTIONS:
@@ -3416,9 +3558,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 93:
+case 99:
 YY_RULE_SETUP
-#line 1014 "dhcp4_lexer.ll"
+#line 1080 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::OUTPUT_OPTIONS:
@@ -3428,9 +3570,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 94:
+case 100:
 YY_RULE_SETUP
-#line 1023 "dhcp4_lexer.ll"
+#line 1089 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::LOGGERS:
@@ -3440,9 +3582,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 95:
+case 101:
 YY_RULE_SETUP
-#line 1032 "dhcp4_lexer.ll"
+#line 1098 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::DHCP4:
@@ -3453,9 +3595,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 96:
+case 102:
 YY_RULE_SETUP
-#line 1042 "dhcp4_lexer.ll"
+#line 1108 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::SUBNET4:
@@ -3467,9 +3609,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 97:
+case 103:
 YY_RULE_SETUP
-#line 1053 "dhcp4_lexer.ll"
+#line 1119 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::SUBNET4:
@@ -3482,9 +3624,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 98:
+case 104:
 YY_RULE_SETUP
-#line 1065 "dhcp4_lexer.ll"
+#line 1131 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::CLIENT_CLASSES:
@@ -3494,9 +3636,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 99:
+case 105:
 YY_RULE_SETUP
-#line 1074 "dhcp4_lexer.ll"
+#line 1140 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::CLIENT_CLASSES:
@@ -3506,9 +3648,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 100:
+case 106:
 YY_RULE_SETUP
-#line 1083 "dhcp4_lexer.ll"
+#line 1149 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::DHCP4:
@@ -3519,9 +3661,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 101:
+case 107:
 YY_RULE_SETUP
-#line 1093 "dhcp4_lexer.ll"
+#line 1159 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::HOST_RESERVATION_IDENTIFIERS:
@@ -3532,9 +3674,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 102:
+case 108:
 YY_RULE_SETUP
-#line 1103 "dhcp4_lexer.ll"
+#line 1169 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::HOST_RESERVATION_IDENTIFIERS:
@@ -3545,9 +3687,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 103:
+case 109:
 YY_RULE_SETUP
-#line 1113 "dhcp4_lexer.ll"
+#line 1179 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::HOST_RESERVATION_IDENTIFIERS:
@@ -3558,9 +3700,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 104:
+case 110:
 YY_RULE_SETUP
-#line 1123 "dhcp4_lexer.ll"
+#line 1189 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::HOST_RESERVATION_IDENTIFIERS:
@@ -3571,9 +3713,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 105:
+case 111:
 YY_RULE_SETUP
-#line 1133 "dhcp4_lexer.ll"
+#line 1199 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::HOST_RESERVATION_IDENTIFIERS:
@@ -3584,9 +3726,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 106:
+case 112:
 YY_RULE_SETUP
-#line 1143 "dhcp4_lexer.ll"
+#line 1209 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::RESERVATIONS:
@@ -3596,9 +3738,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 107:
+case 113:
 YY_RULE_SETUP
-#line 1152 "dhcp4_lexer.ll"
+#line 1218 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::OPTION_DEF:
@@ -3609,9 +3751,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 108:
+case 114:
 YY_RULE_SETUP
-#line 1162 "dhcp4_lexer.ll"
+#line 1228 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::OPTION_DATA:
@@ -3621,9 +3763,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 109:
+case 115:
 YY_RULE_SETUP
-#line 1171 "dhcp4_lexer.ll"
+#line 1237 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::OPTION_DEF:
@@ -3633,9 +3775,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 110:
+case 116:
 YY_RULE_SETUP
-#line 1180 "dhcp4_lexer.ll"
+#line 1246 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::OPTION_DEF:
@@ -3645,9 +3787,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 111:
+case 117:
 YY_RULE_SETUP
-#line 1189 "dhcp4_lexer.ll"
+#line 1255 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::OPTION_DEF:
@@ -3657,9 +3799,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 112:
+case 118:
 YY_RULE_SETUP
-#line 1198 "dhcp4_lexer.ll"
+#line 1264 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::SUBNET4:
@@ -3670,9 +3812,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 113:
+case 119:
 YY_RULE_SETUP
-#line 1208 "dhcp4_lexer.ll"
+#line 1274 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::RELAY:
@@ -3683,9 +3825,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 114:
+case 120:
 YY_RULE_SETUP
-#line 1218 "dhcp4_lexer.ll"
+#line 1284 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::RELAY:
@@ -3695,9 +3837,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 115:
+case 121:
 YY_RULE_SETUP
-#line 1227 "dhcp4_lexer.ll"
+#line 1293 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::DHCP4:
@@ -3707,9 +3849,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 116:
+case 122:
 YY_RULE_SETUP
-#line 1237 "dhcp4_lexer.ll"
+#line 1303 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::HOOKS_LIBRARIES:
@@ -3719,9 +3861,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 117:
+case 123:
 YY_RULE_SETUP
-#line 1246 "dhcp4_lexer.ll"
+#line 1312 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::HOOKS_LIBRARIES:
@@ -3731,9 +3873,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 118:
+case 124:
 YY_RULE_SETUP
-#line 1255 "dhcp4_lexer.ll"
+#line 1321 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::DHCP4:
@@ -3743,9 +3885,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 119:
+case 125:
 YY_RULE_SETUP
-#line 1264 "dhcp4_lexer.ll"
+#line 1330 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::EXPIRED_LEASES_PROCESSING:
@@ -3755,9 +3897,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 120:
+case 126:
 YY_RULE_SETUP
-#line 1273 "dhcp4_lexer.ll"
+#line 1339 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::EXPIRED_LEASES_PROCESSING:
@@ -3767,9 +3909,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 121:
+case 127:
 YY_RULE_SETUP
-#line 1282 "dhcp4_lexer.ll"
+#line 1348 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::EXPIRED_LEASES_PROCESSING:
@@ -3779,9 +3921,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 122:
+case 128:
 YY_RULE_SETUP
-#line 1291 "dhcp4_lexer.ll"
+#line 1357 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::EXPIRED_LEASES_PROCESSING:
@@ -3791,9 +3933,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 123:
+case 129:
 YY_RULE_SETUP
-#line 1300 "dhcp4_lexer.ll"
+#line 1366 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::EXPIRED_LEASES_PROCESSING:
@@ -3803,9 +3945,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 124:
+case 130:
 YY_RULE_SETUP
-#line 1309 "dhcp4_lexer.ll"
+#line 1375 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::EXPIRED_LEASES_PROCESSING:
@@ -3815,9 +3957,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 125:
+case 131:
 YY_RULE_SETUP
-#line 1318 "dhcp4_lexer.ll"
+#line 1384 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::DHCP4:
@@ -3827,9 +3969,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 126:
+case 132:
 YY_RULE_SETUP
-#line 1327 "dhcp4_lexer.ll"
+#line 1393 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::DHCP4:
@@ -3839,9 +3981,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 127:
+case 133:
 YY_RULE_SETUP
-#line 1336 "dhcp4_lexer.ll"
+#line 1402 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::CONTROL_SOCKET:
@@ -3851,9 +3993,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 128:
+case 134:
 YY_RULE_SETUP
-#line 1345 "dhcp4_lexer.ll"
+#line 1411 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::CONTROL_SOCKET:
@@ -3863,9 +4005,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 129:
+case 135:
 YY_RULE_SETUP
-#line 1354 "dhcp4_lexer.ll"
+#line 1420 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::DHCP4:
@@ -3875,9 +4017,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 130:
+case 136:
 YY_RULE_SETUP
-#line 1363 "dhcp4_lexer.ll"
+#line 1429 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::DHCP4:
@@ -3887,9 +4029,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 131:
+case 137:
 YY_RULE_SETUP
-#line 1372 "dhcp4_lexer.ll"
+#line 1438 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::DHCP_DDNS:
@@ -3899,9 +4041,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 132:
+case 138:
 YY_RULE_SETUP
-#line 1381 "dhcp4_lexer.ll"
+#line 1447 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::DHCP_DDNS:
@@ -3911,9 +4053,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 133:
+case 139:
 YY_RULE_SETUP
-#line 1390 "dhcp4_lexer.ll"
+#line 1456 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::DHCP_DDNS:
@@ -3923,9 +4065,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 134:
+case 140:
 YY_RULE_SETUP
-#line 1399 "dhcp4_lexer.ll"
+#line 1465 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::DHCP_DDNS:
@@ -3935,9 +4077,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 135:
+case 141:
 YY_RULE_SETUP
-#line 1408 "dhcp4_lexer.ll"
+#line 1474 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::DHCP_DDNS:
@@ -3947,9 +4089,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 136:
+case 142:
 YY_RULE_SETUP
-#line 1417 "dhcp4_lexer.ll"
+#line 1483 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::DHCP_DDNS:
@@ -3959,9 +4101,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 137:
+case 143:
 YY_RULE_SETUP
-#line 1426 "dhcp4_lexer.ll"
+#line 1492 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::DHCP_DDNS:
@@ -3971,9 +4113,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 138:
+case 144:
 YY_RULE_SETUP
-#line 1435 "dhcp4_lexer.ll"
+#line 1501 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::DHCP_DDNS:
@@ -3983,9 +4125,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 139:
+case 145:
 YY_RULE_SETUP
-#line 1444 "dhcp4_lexer.ll"
+#line 1510 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::DHCP_DDNS:
@@ -3995,9 +4137,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 140:
+case 146:
 YY_RULE_SETUP
-#line 1453 "dhcp4_lexer.ll"
+#line 1519 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::DHCP_DDNS:
@@ -4007,9 +4149,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 141:
+case 147:
 YY_RULE_SETUP
-#line 1462 "dhcp4_lexer.ll"
+#line 1528 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::DHCP_DDNS:
@@ -4019,9 +4161,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 142:
+case 148:
 YY_RULE_SETUP
-#line 1471 "dhcp4_lexer.ll"
+#line 1537 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::DHCP_DDNS:
@@ -4031,9 +4173,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 143:
+case 149:
 YY_RULE_SETUP
-#line 1480 "dhcp4_lexer.ll"
+#line 1546 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::DHCP_DDNS:
@@ -4043,35 +4185,39 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 144:
+case 150:
 YY_RULE_SETUP
-#line 1489 "dhcp4_lexer.ll"
+#line 1555 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::DHCP4:
     case isc::dhcp::Parser4Context::DHCP_DDNS:
+    case isc::dhcp::Parser4Context::SUBNET4:
+    case isc::dhcp::Parser4Context::SHARED_NETWORK:
         return isc::dhcp::Dhcp4Parser::make_HOSTNAME_CHAR_SET(driver.loc_);
     default:
         return isc::dhcp::Dhcp4Parser::make_STRING("hostname-char-set", driver.loc_);
     }
 }
        YY_BREAK
-case 145:
+case 151:
 YY_RULE_SETUP
-#line 1499 "dhcp4_lexer.ll"
+#line 1567 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::DHCP4:
     case isc::dhcp::Parser4Context::DHCP_DDNS:
+    case isc::dhcp::Parser4Context::SUBNET4:
+    case isc::dhcp::Parser4Context::SHARED_NETWORK:
         return isc::dhcp::Dhcp4Parser::make_HOSTNAME_CHAR_REPLACEMENT(driver.loc_);
     default:
         return isc::dhcp::Dhcp4Parser::make_STRING("hostname-char-replacement", driver.loc_);
     }
 }
        YY_BREAK
-case 146:
+case 152:
 YY_RULE_SETUP
-#line 1509 "dhcp4_lexer.ll"
+#line 1579 "dhcp4_lexer.ll"
 {
     /* dhcp-ddns value keywords are case insensitive */
     if (driver.ctx_ == isc::dhcp::Parser4Context::NCR_PROTOCOL) {
@@ -4082,9 +4228,9 @@ YY_RULE_SETUP
     return isc::dhcp::Dhcp4Parser::make_STRING(tmp, driver.loc_);
 }
        YY_BREAK
-case 147:
+case 153:
 YY_RULE_SETUP
-#line 1519 "dhcp4_lexer.ll"
+#line 1589 "dhcp4_lexer.ll"
 {
     /* dhcp-ddns value keywords are case insensitive */
     if (driver.ctx_ == isc::dhcp::Parser4Context::NCR_PROTOCOL) {
@@ -4095,9 +4241,9 @@ YY_RULE_SETUP
     return isc::dhcp::Dhcp4Parser::make_STRING(tmp, driver.loc_);
 }
        YY_BREAK
-case 148:
+case 154:
 YY_RULE_SETUP
-#line 1529 "dhcp4_lexer.ll"
+#line 1599 "dhcp4_lexer.ll"
 {
     /* dhcp-ddns value keywords are case insensitive */
     if (driver.ctx_ == isc::dhcp::Parser4Context::NCR_FORMAT) {
@@ -4108,9 +4254,9 @@ YY_RULE_SETUP
     return isc::dhcp::Dhcp4Parser::make_STRING(tmp, driver.loc_);
 }
        YY_BREAK
-case 149:
+case 155:
 YY_RULE_SETUP
-#line 1539 "dhcp4_lexer.ll"
+#line 1609 "dhcp4_lexer.ll"
 {
     /* dhcp-ddns value keywords are case insensitive */
     if (driver.ctx_ == isc::dhcp::Parser4Context::REPLACE_CLIENT_NAME) {
@@ -4121,9 +4267,9 @@ YY_RULE_SETUP
     return isc::dhcp::Dhcp4Parser::make_STRING(tmp, driver.loc_);
 }
        YY_BREAK
-case 150:
+case 156:
 YY_RULE_SETUP
-#line 1549 "dhcp4_lexer.ll"
+#line 1619 "dhcp4_lexer.ll"
 {
     /* dhcp-ddns value keywords are case insensitive */
     if (driver.ctx_ == isc::dhcp::Parser4Context::REPLACE_CLIENT_NAME) {
@@ -4134,9 +4280,9 @@ YY_RULE_SETUP
     return isc::dhcp::Dhcp4Parser::make_STRING(tmp, driver.loc_);
 }
        YY_BREAK
-case 151:
+case 157:
 YY_RULE_SETUP
-#line 1559 "dhcp4_lexer.ll"
+#line 1629 "dhcp4_lexer.ll"
 {
     /* dhcp-ddns value keywords are case insensitive */
     if (driver.ctx_ == isc::dhcp::Parser4Context::REPLACE_CLIENT_NAME) {
@@ -4147,9 +4293,9 @@ YY_RULE_SETUP
     return isc::dhcp::Dhcp4Parser::make_STRING(tmp, driver.loc_);
 }
        YY_BREAK
-case 152:
+case 158:
 YY_RULE_SETUP
-#line 1569 "dhcp4_lexer.ll"
+#line 1639 "dhcp4_lexer.ll"
 {
     /* dhcp-ddns value keywords are case insensitive */
     if (driver.ctx_ == isc::dhcp::Parser4Context::REPLACE_CLIENT_NAME) {
@@ -4160,9 +4306,9 @@ YY_RULE_SETUP
     return isc::dhcp::Dhcp4Parser::make_STRING(tmp, driver.loc_);
 }
        YY_BREAK
-case 153:
+case 159:
 YY_RULE_SETUP
-#line 1579 "dhcp4_lexer.ll"
+#line 1649 "dhcp4_lexer.ll"
 {
     /* dhcp-ddns value keywords are case insensitive */
     if (driver.ctx_ == isc::dhcp::Parser4Context::REPLACE_CLIENT_NAME) {
@@ -4173,9 +4319,9 @@ YY_RULE_SETUP
     return isc::dhcp::Dhcp4Parser::make_STRING(tmp, driver.loc_);
 }
        YY_BREAK
-case 154:
+case 160:
 YY_RULE_SETUP
-#line 1589 "dhcp4_lexer.ll"
+#line 1659 "dhcp4_lexer.ll"
 {
     /* dhcp-ddns value keywords are case insensitive */
     if (driver.ctx_ == isc::dhcp::Parser4Context::REPLACE_CLIENT_NAME) {
@@ -4186,9 +4332,9 @@ YY_RULE_SETUP
     return isc::dhcp::Dhcp4Parser::make_STRING(tmp, driver.loc_);
 }
        YY_BREAK
-case 155:
+case 161:
 YY_RULE_SETUP
-#line 1599 "dhcp4_lexer.ll"
+#line 1669 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::CONFIG:
@@ -4198,9 +4344,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 156:
+case 162:
 YY_RULE_SETUP
-#line 1608 "dhcp4_lexer.ll"
+#line 1678 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::CONFIG:
@@ -4210,9 +4356,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 157:
+case 163:
 YY_RULE_SETUP
-#line 1617 "dhcp4_lexer.ll"
+#line 1687 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::CONFIG:
@@ -4222,9 +4368,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 158:
+case 164:
 YY_RULE_SETUP
-#line 1626 "dhcp4_lexer.ll"
+#line 1696 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::SUBNET4:
@@ -4234,9 +4380,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 159:
+case 165:
 YY_RULE_SETUP
-#line 1635 "dhcp4_lexer.ll"
+#line 1705 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::SUBNET4:
@@ -4246,9 +4392,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 160:
+case 166:
 YY_RULE_SETUP
-#line 1644 "dhcp4_lexer.ll"
+#line 1714 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::SUBNET4:
@@ -4258,9 +4404,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 161:
+case 167:
 YY_RULE_SETUP
-#line 1653 "dhcp4_lexer.ll"
+#line 1723 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::DHCP4:
@@ -4270,9 +4416,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 162:
+case 168:
 YY_RULE_SETUP
-#line 1662 "dhcp4_lexer.ll"
+#line 1732 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::DHCP4:
@@ -4284,9 +4430,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 163:
+case 169:
 YY_RULE_SETUP
-#line 1673 "dhcp4_lexer.ll"
+#line 1743 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::DHCP4:
@@ -4298,9 +4444,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 164:
+case 170:
 YY_RULE_SETUP
-#line 1684 "dhcp4_lexer.ll"
+#line 1754 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::DHCP4:
@@ -4314,9 +4460,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 165:
+case 171:
 YY_RULE_SETUP
-#line 1697 "dhcp4_lexer.ll"
+#line 1767 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::DHCP4:
@@ -4330,9 +4476,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 166:
+case 172:
 YY_RULE_SETUP
-#line 1710 "dhcp4_lexer.ll"
+#line 1780 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::DHCP4:
@@ -4346,9 +4492,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 167:
+case 173:
 YY_RULE_SETUP
-#line 1725 "dhcp4_lexer.ll"
+#line 1795 "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.
@@ -4448,65 +4594,65 @@ YY_RULE_SETUP
     return isc::dhcp::Dhcp4Parser::make_STRING(decoded, driver.loc_);
 }
        YY_BREAK
-case 168:
-/* rule 168 can match eol */
+case 174:
+/* rule 174 can match eol */
 YY_RULE_SETUP
-#line 1824 "dhcp4_lexer.ll"
+#line 1894 "dhcp4_lexer.ll"
 {
     /* Bad string with a forbidden control character inside */
     driver.error(driver.loc_, "Invalid control in " + std::string(yytext));
 }
        YY_BREAK
-case 169:
-/* rule 169 can match eol */
+case 175:
+/* rule 175 can match eol */
 YY_RULE_SETUP
-#line 1829 "dhcp4_lexer.ll"
+#line 1899 "dhcp4_lexer.ll"
 {
     /* Bad string with a bad escape inside */
     driver.error(driver.loc_, "Bad escape in " + std::string(yytext));
 }
        YY_BREAK
-case 170:
+case 176:
 YY_RULE_SETUP
-#line 1834 "dhcp4_lexer.ll"
+#line 1904 "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 171:
+case 177:
 YY_RULE_SETUP
-#line 1839 "dhcp4_lexer.ll"
+#line 1909 "dhcp4_lexer.ll"
 { return isc::dhcp::Dhcp4Parser::make_LSQUARE_BRACKET(driver.loc_); }
        YY_BREAK
-case 172:
+case 178:
 YY_RULE_SETUP
-#line 1840 "dhcp4_lexer.ll"
+#line 1910 "dhcp4_lexer.ll"
 { return isc::dhcp::Dhcp4Parser::make_RSQUARE_BRACKET(driver.loc_); }
        YY_BREAK
-case 173:
+case 179:
 YY_RULE_SETUP
-#line 1841 "dhcp4_lexer.ll"
+#line 1911 "dhcp4_lexer.ll"
 { return isc::dhcp::Dhcp4Parser::make_LCURLY_BRACKET(driver.loc_); }
        YY_BREAK
-case 174:
+case 180:
 YY_RULE_SETUP
-#line 1842 "dhcp4_lexer.ll"
+#line 1912 "dhcp4_lexer.ll"
 { return isc::dhcp::Dhcp4Parser::make_RCURLY_BRACKET(driver.loc_); }
        YY_BREAK
-case 175:
+case 181:
 YY_RULE_SETUP
-#line 1843 "dhcp4_lexer.ll"
+#line 1913 "dhcp4_lexer.ll"
 { return isc::dhcp::Dhcp4Parser::make_COMMA(driver.loc_); }
        YY_BREAK
-case 176:
+case 182:
 YY_RULE_SETUP
-#line 1844 "dhcp4_lexer.ll"
+#line 1914 "dhcp4_lexer.ll"
 { return isc::dhcp::Dhcp4Parser::make_COLON(driver.loc_); }
        YY_BREAK
-case 177:
+case 183:
 YY_RULE_SETUP
-#line 1846 "dhcp4_lexer.ll"
+#line 1916 "dhcp4_lexer.ll"
 {
     /* An integer was found. */
     std::string tmp(yytext);
@@ -4525,9 +4671,9 @@ YY_RULE_SETUP
     return isc::dhcp::Dhcp4Parser::make_INTEGER(integer, driver.loc_);
 }
        YY_BREAK
-case 178:
+case 184:
 YY_RULE_SETUP
-#line 1864 "dhcp4_lexer.ll"
+#line 1934 "dhcp4_lexer.ll"
 {
     /* A floating point was found. */
     std::string tmp(yytext);
@@ -4541,43 +4687,43 @@ YY_RULE_SETUP
     return isc::dhcp::Dhcp4Parser::make_FLOAT(fp, driver.loc_);
 }
        YY_BREAK
-case 179:
+case 185:
 YY_RULE_SETUP
-#line 1877 "dhcp4_lexer.ll"
+#line 1947 "dhcp4_lexer.ll"
 {
     string tmp(yytext);
     return isc::dhcp::Dhcp4Parser::make_BOOLEAN(tmp == "true", driver.loc_);
 }
        YY_BREAK
-case 180:
+case 186:
 YY_RULE_SETUP
-#line 1882 "dhcp4_lexer.ll"
+#line 1952 "dhcp4_lexer.ll"
 {
    return isc::dhcp::Dhcp4Parser::make_NULL_TYPE(driver.loc_);
 }
        YY_BREAK
-case 181:
+case 187:
 YY_RULE_SETUP
-#line 1886 "dhcp4_lexer.ll"
+#line 1956 "dhcp4_lexer.ll"
 driver.error (driver.loc_, "JSON true reserved keyword is lower case only");
        YY_BREAK
-case 182:
+case 188:
 YY_RULE_SETUP
-#line 1888 "dhcp4_lexer.ll"
+#line 1958 "dhcp4_lexer.ll"
 driver.error (driver.loc_, "JSON false reserved keyword is lower case only");
        YY_BREAK
-case 183:
+case 189:
 YY_RULE_SETUP
-#line 1890 "dhcp4_lexer.ll"
+#line 1960 "dhcp4_lexer.ll"
 driver.error (driver.loc_, "JSON null reserved keyword is lower case only");
        YY_BREAK
-case 184:
+case 190:
 YY_RULE_SETUP
-#line 1892 "dhcp4_lexer.ll"
+#line 1962 "dhcp4_lexer.ll"
 driver.error (driver.loc_, "Invalid character: " + std::string(yytext));
        YY_BREAK
 case YY_STATE_EOF(INITIAL):
-#line 1894 "dhcp4_lexer.ll"
+#line 1964 "dhcp4_lexer.ll"
 {
     if (driver.states_.empty()) {
         return isc::dhcp::Dhcp4Parser::make_END(driver.loc_);
@@ -4601,12 +4747,12 @@ case YY_STATE_EOF(INITIAL):
     BEGIN(DIR_EXIT);
 }
        YY_BREAK
-case 185:
+case 191:
 YY_RULE_SETUP
-#line 1917 "dhcp4_lexer.ll"
+#line 1987 "dhcp4_lexer.ll"
 ECHO;
        YY_BREAK
-#line 4609 "dhcp4_lexer.cc"
+#line 4756 "dhcp4_lexer.cc"
 
        case YY_END_OF_BUFFER:
                {
@@ -4925,7 +5071,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 >= 1597 )
+                       if ( yy_current_state >= 1702 )
                                yy_c = yy_meta[yy_c];
                        }
                yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c];
@@ -4958,11 +5104,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 >= 1597 )
+               if ( yy_current_state >= 1702 )
                        yy_c = yy_meta[yy_c];
                }
        yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c];
-       yy_is_jam = (yy_current_state == 1596);
+       yy_is_jam = (yy_current_state == 1701);
 
                return yy_is_jam ? 0 : yy_current_state;
 }
@@ -5711,7 +5857,7 @@ void yyfree (void * ptr )
 
 /* %ok-for-header */
 
-#line 1917 "dhcp4_lexer.ll"
+#line 1987 "dhcp4_lexer.ll"
 
 
 using namespace isc::dhcp;
index 106d6c52c7dfd7cc9e78cb3754ba9ccc3b7fd921..6bca3819a99d99c3109fd05d2fa0ab0e2b46221c 100644 (file)
@@ -663,6 +663,72 @@ ControlCharacterFill            [^"\\]|\\{JSONEscapeSequence}
     }
 }
 
+\"ddns-send-updates\" {
+    switch(driver.ctx_) {
+    case isc::dhcp::Parser4Context::DHCP4:
+    case isc::dhcp::Parser4Context::SUBNET4:
+    case isc::dhcp::Parser4Context::SHARED_NETWORK:
+        return isc::dhcp::Dhcp4Parser::make_DDNS_SEND_UPDATES(driver.loc_);
+    default:
+        return isc::dhcp::Dhcp4Parser::make_STRING("ddns-send-updates", driver.loc_);
+    }
+}
+
+\"ddns-override-no-update\" {
+    switch(driver.ctx_) {
+    case isc::dhcp::Parser4Context::DHCP4:
+    case isc::dhcp::Parser4Context::SUBNET4:
+    case isc::dhcp::Parser4Context::SHARED_NETWORK:
+        return isc::dhcp::Dhcp4Parser::make_DDNS_OVERRIDE_NO_UPDATE(driver.loc_);
+    default:
+        return isc::dhcp::Dhcp4Parser::make_STRING("ddns-override-no-update", driver.loc_);
+    }
+}
+
+\"ddns-override-client-update\" {
+    switch(driver.ctx_) {
+    case isc::dhcp::Parser4Context::DHCP4:
+    case isc::dhcp::Parser4Context::SUBNET4:
+    case isc::dhcp::Parser4Context::SHARED_NETWORK:
+        return isc::dhcp::Dhcp4Parser::make_DDNS_OVERRIDE_CLIENT_UPDATE(driver.loc_);
+    default:
+        return isc::dhcp::Dhcp4Parser::make_STRING("ddns-override-client-update", driver.loc_);
+    }
+}
+
+\"ddns-replace-client-name\" {
+    switch(driver.ctx_) {
+    case isc::dhcp::Parser4Context::DHCP4:
+    case isc::dhcp::Parser4Context::SUBNET4:
+    case isc::dhcp::Parser4Context::SHARED_NETWORK:
+        return isc::dhcp::Dhcp4Parser::make_DDNS_REPLACE_CLIENT_NAME(driver.loc_);
+    default:
+        return isc::dhcp::Dhcp4Parser::make_STRING("ddns-replace-client-name", driver.loc_);
+    }
+}
+
+\"ddns-generated-prefix\" {
+    switch(driver.ctx_) {
+    case isc::dhcp::Parser4Context::DHCP4:
+    case isc::dhcp::Parser4Context::SUBNET4:
+    case isc::dhcp::Parser4Context::SHARED_NETWORK:
+        return isc::dhcp::Dhcp4Parser::make_DDNS_GENERATED_PREFIX(driver.loc_);
+    default:
+        return isc::dhcp::Dhcp4Parser::make_STRING("ddns-generated-prefix", driver.loc_);
+    }
+}
+
+\"ddns-qualifying-suffix\" {
+    switch(driver.ctx_) {
+    case isc::dhcp::Parser4Context::DHCP4:
+    case isc::dhcp::Parser4Context::SUBNET4:
+    case isc::dhcp::Parser4Context::SHARED_NETWORK:
+        return isc::dhcp::Dhcp4Parser::make_DDNS_QUALIFYING_SUFFIX(driver.loc_);
+    default:
+        return isc::dhcp::Dhcp4Parser::make_STRING("ddns-qualifying-suffix", driver.loc_);
+    }
+}
+
 \"subnet4\" {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::DHCP4:
@@ -1489,6 +1555,8 @@ ControlCharacterFill            [^"\\]|\\{JSONEscapeSequence}
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::DHCP4:
     case isc::dhcp::Parser4Context::DHCP_DDNS:
+    case isc::dhcp::Parser4Context::SUBNET4:
+    case isc::dhcp::Parser4Context::SHARED_NETWORK:
         return isc::dhcp::Dhcp4Parser::make_HOSTNAME_CHAR_SET(driver.loc_);
     default:
         return isc::dhcp::Dhcp4Parser::make_STRING("hostname-char-set", driver.loc_);
@@ -1499,6 +1567,8 @@ ControlCharacterFill            [^"\\]|\\{JSONEscapeSequence}
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::DHCP4:
     case isc::dhcp::Parser4Context::DHCP_DDNS:
+    case isc::dhcp::Parser4Context::SUBNET4:
+    case isc::dhcp::Parser4Context::SHARED_NETWORK:
         return isc::dhcp::Dhcp4Parser::make_HOSTNAME_CHAR_REPLACEMENT(driver.loc_);
     default:
         return isc::dhcp::Dhcp4Parser::make_STRING("hostname-char-replacement", driver.loc_);
index ad1c54974ef4e7fe5b10d4c1fa1af71d3a247f36..0334dc7735e2e7c492bbdc099a11e6edf8a3f69e 100644 (file)
@@ -1,8 +1,8 @@
-// A Bison parser, made by GNU Bison 3.4.1.
+// A Bison parser, made by GNU Bison 3.2.1.
 
 // Skeleton implementation for Bison LALR(1) parsers in C++
 
-// Copyright (C) 2002-2015, 2018-2019 Free Software Foundation, Inc.
+// Copyright (C) 2002-2015, 2018 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
 
 
 // Unqualified %code blocks.
-#line 34 "dhcp4_parser.yy"
+#line 34 "dhcp4_parser.yy" // lalr1.cc:438
 
 #include <dhcp4/parser_context.h>
 
-#line 51 "dhcp4_parser.cc"
+#line 51 "dhcp4_parser.cc" // lalr1.cc:438
 
 
 #ifndef YY_
@@ -88,7 +88,7 @@
         {                                                               \
           (Current).begin = (Current).end = YYRHSLOC (Rhs, 0).end;      \
         }                                                               \
-    while (false)
+    while (/*CONSTCOND*/ false)
 # endif
 
 
 #define YYERROR         goto yyerrorlab
 #define YYRECOVERING()  (!!yyerrstatus_)
 
-#line 14 "dhcp4_parser.yy"
+#line 14 "dhcp4_parser.yy" // lalr1.cc:513
 namespace isc { namespace dhcp {
-#line 146 "dhcp4_parser.cc"
-
+#line 146 "dhcp4_parser.cc" // lalr1.cc:513
 
   /* Return YYSTR after stripping away unnecessary quotes and
      backslashes, so that it's suitable for yyerror.  The heuristic is
@@ -155,7 +154,7 @@ namespace isc { namespace dhcp {
   {
     if (*yystr == '"')
       {
-        std::string yyr;
+        std::string yyr = "";
         char const *yyp = yystr;
 
         for (;;)
@@ -168,10 +167,7 @@ namespace isc { namespace dhcp {
             case '\\':
               if (*++yyp != '\\')
                 goto do_not_strip_quotes;
-              else
-                goto append;
-
-            append:
+              // Fall through.
             default:
               yyr += *yyp;
               break;
@@ -199,8 +195,6 @@ namespace isc { namespace dhcp {
   Dhcp4Parser::~Dhcp4Parser ()
   {}
 
-  Dhcp4Parser::syntax_error::~syntax_error () YY_NOEXCEPT YY_NOTHROW
-  {}
 
   /*---------------.
   | Symbol types.  |
@@ -209,16 +203,16 @@ namespace isc { namespace dhcp {
 
 
   // by_state.
-  Dhcp4Parser::by_state::by_state () YY_NOEXCEPT
+  Dhcp4Parser::by_state::by_state ()
     : state (empty_state)
   {}
 
-  Dhcp4Parser::by_state::by_state (const by_state& that) YY_NOEXCEPT
-    : state (that.state)
+  Dhcp4Parser::by_state::by_state (const by_state& other)
+    : state (other.state)
   {}
 
   void
-  Dhcp4Parser::by_state::clear () YY_NOEXCEPT
+  Dhcp4Parser::by_state::clear ()
   {
     state = empty_state;
   }
@@ -230,12 +224,12 @@ namespace isc { namespace dhcp {
     that.clear ();
   }
 
-  Dhcp4Parser::by_state::by_state (state_type s) YY_NOEXCEPT
+  Dhcp4Parser::by_state::by_state (state_type s)
     : state (s)
   {}
 
   Dhcp4Parser::symbol_number_type
-  Dhcp4Parser::by_state::type_get () const YY_NOEXCEPT
+  Dhcp4Parser::by_state::type_get () const
   {
     if (state == empty_state)
       return empty_symbol;
@@ -251,30 +245,30 @@ namespace isc { namespace dhcp {
   {
     switch (that.type_get ())
     {
-      case 195: // value
-      case 199: // map_value
-      case 245: // socket_type
-      case 248: // outbound_interface_value
-      case 270: // db_type
-      case 357: // hr_mode
-      case 506: // ncr_protocol_value
-      case 513: // replace_client_name_value
+      case 201: // value
+      case 205: // map_value
+      case 246: // ddns_replace_client_name_value
+      case 265: // socket_type
+      case 268: // outbound_interface_value
+      case 290: // db_type
+      case 377: // hr_mode
+      case 524: // ncr_protocol_value
         value.YY_MOVE_OR_COPY< ElementPtr > (YY_MOVE (that.value));
         break;
 
-      case 178: // "boolean"
+      case 184: // "boolean"
         value.YY_MOVE_OR_COPY< bool > (YY_MOVE (that.value));
         break;
 
-      case 177: // "floating point"
+      case 183: // "floating point"
         value.YY_MOVE_OR_COPY< double > (YY_MOVE (that.value));
         break;
 
-      case 176: // "integer"
+      case 182: // "integer"
         value.YY_MOVE_OR_COPY< int64_t > (YY_MOVE (that.value));
         break;
 
-      case 175: // "constant string"
+      case 181: // "constant string"
         value.YY_MOVE_OR_COPY< std::string > (YY_MOVE (that.value));
         break;
 
@@ -282,7 +276,7 @@ namespace isc { namespace dhcp {
         break;
     }
 
-#if 201103L <= YY_CPLUSPLUS
+#if defined __cplusplus && 201103L <= __cplusplus
     // that is emptied.
     that.state = empty_state;
 #endif
@@ -293,30 +287,30 @@ namespace isc { namespace dhcp {
   {
     switch (that.type_get ())
     {
-      case 195: // value
-      case 199: // map_value
-      case 245: // socket_type
-      case 248: // outbound_interface_value
-      case 270: // db_type
-      case 357: // hr_mode
-      case 506: // ncr_protocol_value
-      case 513: // replace_client_name_value
+      case 201: // value
+      case 205: // map_value
+      case 246: // ddns_replace_client_name_value
+      case 265: // socket_type
+      case 268: // outbound_interface_value
+      case 290: // db_type
+      case 377: // hr_mode
+      case 524: // ncr_protocol_value
         value.move< ElementPtr > (YY_MOVE (that.value));
         break;
 
-      case 178: // "boolean"
+      case 184: // "boolean"
         value.move< bool > (YY_MOVE (that.value));
         break;
 
-      case 177: // "floating point"
+      case 183: // "floating point"
         value.move< double > (YY_MOVE (that.value));
         break;
 
-      case 176: // "integer"
+      case 182: // "integer"
         value.move< int64_t > (YY_MOVE (that.value));
         break;
 
-      case 175: // "constant string"
+      case 181: // "constant string"
         value.move< std::string > (YY_MOVE (that.value));
         break;
 
@@ -328,37 +322,37 @@ namespace isc { namespace dhcp {
     that.type = empty_symbol;
   }
 
-#if YY_CPLUSPLUS < 201103L
+#if !defined __cplusplus || __cplusplus < 201103L
   Dhcp4Parser::stack_symbol_type&
   Dhcp4Parser::stack_symbol_type::operator= (stack_symbol_type& that)
   {
     state = that.state;
     switch (that.type_get ())
     {
-      case 195: // value
-      case 199: // map_value
-      case 245: // socket_type
-      case 248: // outbound_interface_value
-      case 270: // db_type
-      case 357: // hr_mode
-      case 506: // ncr_protocol_value
-      case 513: // replace_client_name_value
+      case 201: // value
+      case 205: // map_value
+      case 246: // ddns_replace_client_name_value
+      case 265: // socket_type
+      case 268: // outbound_interface_value
+      case 290: // db_type
+      case 377: // hr_mode
+      case 524: // ncr_protocol_value
         value.move< ElementPtr > (that.value);
         break;
 
-      case 178: // "boolean"
+      case 184: // "boolean"
         value.move< bool > (that.value);
         break;
 
-      case 177: // "floating point"
+      case 183: // "floating point"
         value.move< double > (that.value);
         break;
 
-      case 176: // "integer"
+      case 182: // "integer"
         value.move< int64_t > (that.value);
         break;
 
-      case 175: // "constant string"
+      case 181: // "constant string"
         value.move< std::string > (that.value);
         break;
 
@@ -390,89 +384,100 @@ namespace isc { namespace dhcp {
     std::ostream& yyoutput = yyo;
     YYUSE (yyoutput);
     symbol_number_type yytype = yysym.type_get ();
-#if defined __GNUC__ && ! defined __clang__ && ! defined __ICC && __GNUC__ * 100 + __GNUC_MINOR__ <= 408
     // Avoid a (spurious) G++ 4.8 warning about "array subscript is
     // below array bounds".
     if (yysym.empty ())
       std::abort ();
-#endif
     yyo << (yytype < yyntokens_ ? "token" : "nterm")
         << ' ' << yytname_[yytype] << " ("
         << yysym.location << ": ";
     switch (yytype)
     {
-      case 175: // "constant string"
-#line 257 "dhcp4_parser.yy"
-        { yyoutput << yysym.value.template as < std::string > (); }
-#line 408 "dhcp4_parser.cc"
+            case 181: // "constant string"
+
+#line 263 "dhcp4_parser.yy" // lalr1.cc:672
+        { yyoutput << yysym.value.template as< std::string > (); }
+#line 401 "dhcp4_parser.cc" // lalr1.cc:672
         break;
 
-      case 176: // "integer"
-#line 257 "dhcp4_parser.yy"
-        { yyoutput << yysym.value.template as < int64_t > (); }
-#line 414 "dhcp4_parser.cc"
+      case 182: // "integer"
+
+#line 263 "dhcp4_parser.yy" // lalr1.cc:672
+        { yyoutput << yysym.value.template as< int64_t > (); }
+#line 408 "dhcp4_parser.cc" // lalr1.cc:672
         break;
 
-      case 177: // "floating point"
-#line 257 "dhcp4_parser.yy"
-        { yyoutput << yysym.value.template as < double > (); }
-#line 420 "dhcp4_parser.cc"
+      case 183: // "floating point"
+
+#line 263 "dhcp4_parser.yy" // lalr1.cc:672
+        { yyoutput << yysym.value.template as< double > (); }
+#line 415 "dhcp4_parser.cc" // lalr1.cc:672
         break;
 
-      case 178: // "boolean"
-#line 257 "dhcp4_parser.yy"
-        { yyoutput << yysym.value.template as < bool > (); }
-#line 426 "dhcp4_parser.cc"
+      case 184: // "boolean"
+
+#line 263 "dhcp4_parser.yy" // lalr1.cc:672
+        { yyoutput << yysym.value.template as< bool > (); }
+#line 422 "dhcp4_parser.cc" // lalr1.cc:672
         break;
 
-      case 195: // value
-#line 257 "dhcp4_parser.yy"
-        { yyoutput << yysym.value.template as < ElementPtr > (); }
-#line 432 "dhcp4_parser.cc"
+      case 201: // value
+
+#line 263 "dhcp4_parser.yy" // lalr1.cc:672
+        { yyoutput << yysym.value.template as< ElementPtr > (); }
+#line 429 "dhcp4_parser.cc" // lalr1.cc:672
         break;
 
-      case 199: // map_value
-#line 257 "dhcp4_parser.yy"
-        { yyoutput << yysym.value.template as < ElementPtr > (); }
-#line 438 "dhcp4_parser.cc"
+      case 205: // map_value
+
+#line 263 "dhcp4_parser.yy" // lalr1.cc:672
+        { yyoutput << yysym.value.template as< ElementPtr > (); }
+#line 436 "dhcp4_parser.cc" // lalr1.cc:672
         break;
 
-      case 245: // socket_type
-#line 257 "dhcp4_parser.yy"
-        { yyoutput << yysym.value.template as < ElementPtr > (); }
-#line 444 "dhcp4_parser.cc"
+      case 246: // ddns_replace_client_name_value
+
+#line 263 "dhcp4_parser.yy" // lalr1.cc:672
+        { yyoutput << yysym.value.template as< ElementPtr > (); }
+#line 443 "dhcp4_parser.cc" // lalr1.cc:672
         break;
 
-      case 248: // outbound_interface_value
-#line 257 "dhcp4_parser.yy"
-        { yyoutput << yysym.value.template as < ElementPtr > (); }
-#line 450 "dhcp4_parser.cc"
+      case 265: // socket_type
+
+#line 263 "dhcp4_parser.yy" // lalr1.cc:672
+        { yyoutput << yysym.value.template as< ElementPtr > (); }
+#line 450 "dhcp4_parser.cc" // lalr1.cc:672
         break;
 
-      case 270: // db_type
-#line 257 "dhcp4_parser.yy"
-        { yyoutput << yysym.value.template as < ElementPtr > (); }
-#line 456 "dhcp4_parser.cc"
+      case 268: // outbound_interface_value
+
+#line 263 "dhcp4_parser.yy" // lalr1.cc:672
+        { yyoutput << yysym.value.template as< ElementPtr > (); }
+#line 457 "dhcp4_parser.cc" // lalr1.cc:672
         break;
 
-      case 357: // hr_mode
-#line 257 "dhcp4_parser.yy"
-        { yyoutput << yysym.value.template as < ElementPtr > (); }
-#line 462 "dhcp4_parser.cc"
+      case 290: // db_type
+
+#line 263 "dhcp4_parser.yy" // lalr1.cc:672
+        { yyoutput << yysym.value.template as< ElementPtr > (); }
+#line 464 "dhcp4_parser.cc" // lalr1.cc:672
         break;
 
-      case 506: // ncr_protocol_value
-#line 257 "dhcp4_parser.yy"
-        { yyoutput << yysym.value.template as < ElementPtr > (); }
-#line 468 "dhcp4_parser.cc"
+      case 377: // hr_mode
+
+#line 263 "dhcp4_parser.yy" // lalr1.cc:672
+        { yyoutput << yysym.value.template as< ElementPtr > (); }
+#line 471 "dhcp4_parser.cc" // lalr1.cc:672
         break;
 
-      case 513: // replace_client_name_value
-#line 257 "dhcp4_parser.yy"
-        { yyoutput << yysym.value.template as < ElementPtr > (); }
-#line 474 "dhcp4_parser.cc"
+      case 524: // ncr_protocol_value
+
+#line 263 "dhcp4_parser.yy" // lalr1.cc:672
+        { yyoutput << yysym.value.template as< ElementPtr > (); }
+#line 478 "dhcp4_parser.cc" // lalr1.cc:672
         break;
 
+
       default:
         break;
     }
@@ -491,7 +496,7 @@ namespace isc { namespace dhcp {
   void
   Dhcp4Parser::yypush_ (const char* m, state_type s, YY_MOVE_REF (symbol_type) sym)
   {
-#if 201103L <= YY_CPLUSPLUS
+#if defined __cplusplus && 201103L <= __cplusplus
     yypush_ (m, stack_symbol_type (s, std::move (sym)));
 #else
     stack_symbol_type ss (s, sym);
@@ -595,22 +600,17 @@ namespace isc { namespace dhcp {
     yystack_.clear ();
     yypush_ (YY_NULLPTR, 0, YY_MOVE (yyla));
 
-  /*-----------------------------------------------.
-  | yynewstate -- push a new symbol on the stack.  |
-  `-----------------------------------------------*/
+    // A new symbol was pushed on the stack.
   yynewstate:
     YYCDEBUG << "Entering state " << yystack_[0].state << '\n';
 
     // Accept?
     if (yystack_[0].state == yyfinal_)
-      YYACCEPT;
+      goto yyacceptlab;
 
     goto yybackup;
 
-
-  /*-----------.
-  | yybackup.  |
-  `-----------*/
+    // Backup.
   yybackup:
     // Try to take a decision without lookahead.
     yyn = yypact_[yystack_[0].state];
@@ -631,7 +631,6 @@ namespace isc { namespace dhcp {
 #if YY_EXCEPTIONS
         catch (const syntax_error& yyexc)
           {
-            YYCDEBUG << "Caught exception: " << yyexc.what() << '\n';
             error (yyexc);
             goto yyerrlab1;
           }
@@ -663,7 +662,6 @@ namespace isc { namespace dhcp {
     yypush_ ("Shifting", yyn, YY_MOVE (yyla));
     goto yynewstate;
 
-
   /*-----------------------------------------------------------.
   | yydefault -- do the default action for the current state.  |
   `-----------------------------------------------------------*/
@@ -673,9 +671,8 @@ namespace isc { namespace dhcp {
       goto yyerrlab;
     goto yyreduce;
 
-
   /*-----------------------------.
-  | yyreduce -- do a reduction.  |
+  | yyreduce -- Do a reduction.  |
   `-----------------------------*/
   yyreduce:
     yylen = yyr2_[yyn];
@@ -687,30 +684,30 @@ namespace isc { namespace dhcp {
          when using variants.  */
       switch (yyr1_[yyn])
     {
-      case 195: // value
-      case 199: // map_value
-      case 245: // socket_type
-      case 248: // outbound_interface_value
-      case 270: // db_type
-      case 357: // hr_mode
-      case 506: // ncr_protocol_value
-      case 513: // replace_client_name_value
+      case 201: // value
+      case 205: // map_value
+      case 246: // ddns_replace_client_name_value
+      case 265: // socket_type
+      case 268: // outbound_interface_value
+      case 290: // db_type
+      case 377: // hr_mode
+      case 524: // ncr_protocol_value
         yylhs.value.emplace< ElementPtr > ();
         break;
 
-      case 178: // "boolean"
+      case 184: // "boolean"
         yylhs.value.emplace< bool > ();
         break;
 
-      case 177: // "floating point"
+      case 183: // "floating point"
         yylhs.value.emplace< double > ();
         break;
 
-      case 176: // "integer"
+      case 182: // "integer"
         yylhs.value.emplace< int64_t > ();
         break;
 
-      case 175: // "constant string"
+      case 181: // "constant string"
         yylhs.value.emplace< std::string > ();
         break;
 
@@ -721,8 +718,8 @@ namespace isc { namespace dhcp {
 
       // Default location.
       {
-        stack_type::slice range (yystack_, yylen);
-        YYLLOC_DEFAULT (yylhs.location, range, yylen);
+        slice<stack_symbol_type, stack_type> slice (yystack_, yylen);
+        YYLLOC_DEFAULT (yylhs.location, slice, yylen);
         yyerror_range[1].location = yylhs.location;
       }
 
@@ -735,280 +732,280 @@ namespace isc { namespace dhcp {
           switch (yyn)
             {
   case 2:
-#line 266 "dhcp4_parser.yy"
+#line 272 "dhcp4_parser.yy" // lalr1.cc:907
     { ctx.ctx_ = ctx.NO_KEYWORD; }
-#line 741 "dhcp4_parser.cc"
+#line 738 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
   case 4:
-#line 267 "dhcp4_parser.yy"
+#line 273 "dhcp4_parser.yy" // lalr1.cc:907
     { ctx.ctx_ = ctx.CONFIG; }
-#line 747 "dhcp4_parser.cc"
+#line 744 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
   case 6:
-#line 268 "dhcp4_parser.yy"
+#line 274 "dhcp4_parser.yy" // lalr1.cc:907
     { ctx.ctx_ = ctx.DHCP4; }
-#line 753 "dhcp4_parser.cc"
+#line 750 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
   case 8:
-#line 269 "dhcp4_parser.yy"
+#line 275 "dhcp4_parser.yy" // lalr1.cc:907
     { ctx.ctx_ = ctx.INTERFACES_CONFIG; }
-#line 759 "dhcp4_parser.cc"
+#line 756 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
   case 10:
-#line 270 "dhcp4_parser.yy"
+#line 276 "dhcp4_parser.yy" // lalr1.cc:907
     { ctx.ctx_ = ctx.SUBNET4; }
-#line 765 "dhcp4_parser.cc"
+#line 762 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
   case 12:
-#line 271 "dhcp4_parser.yy"
+#line 277 "dhcp4_parser.yy" // lalr1.cc:907
     { ctx.ctx_ = ctx.POOLS; }
-#line 771 "dhcp4_parser.cc"
+#line 768 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
   case 14:
-#line 272 "dhcp4_parser.yy"
+#line 278 "dhcp4_parser.yy" // lalr1.cc:907
     { ctx.ctx_ = ctx.RESERVATIONS; }
-#line 777 "dhcp4_parser.cc"
+#line 774 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
   case 16:
-#line 273 "dhcp4_parser.yy"
+#line 279 "dhcp4_parser.yy" // lalr1.cc:907
     { ctx.ctx_ = ctx.DHCP4; }
-#line 783 "dhcp4_parser.cc"
+#line 780 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
   case 18:
-#line 274 "dhcp4_parser.yy"
+#line 280 "dhcp4_parser.yy" // lalr1.cc:907
     { ctx.ctx_ = ctx.OPTION_DEF; }
-#line 789 "dhcp4_parser.cc"
+#line 786 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
   case 20:
-#line 275 "dhcp4_parser.yy"
+#line 281 "dhcp4_parser.yy" // lalr1.cc:907
     { ctx.ctx_ = ctx.OPTION_DATA; }
-#line 795 "dhcp4_parser.cc"
+#line 792 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
   case 22:
-#line 276 "dhcp4_parser.yy"
+#line 282 "dhcp4_parser.yy" // lalr1.cc:907
     { ctx.ctx_ = ctx.HOOKS_LIBRARIES; }
-#line 801 "dhcp4_parser.cc"
+#line 798 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
   case 24:
-#line 277 "dhcp4_parser.yy"
+#line 283 "dhcp4_parser.yy" // lalr1.cc:907
     { ctx.ctx_ = ctx.DHCP_DDNS; }
-#line 807 "dhcp4_parser.cc"
+#line 804 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
   case 26:
-#line 278 "dhcp4_parser.yy"
+#line 284 "dhcp4_parser.yy" // lalr1.cc:907
     { ctx.ctx_ = ctx.LOGGING; }
-#line 813 "dhcp4_parser.cc"
+#line 810 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
   case 28:
-#line 279 "dhcp4_parser.yy"
+#line 285 "dhcp4_parser.yy" // lalr1.cc:907
     { ctx.ctx_ = ctx.CONFIG_CONTROL; }
-#line 819 "dhcp4_parser.cc"
+#line 816 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
   case 30:
-#line 287 "dhcp4_parser.yy"
-    { yylhs.value.as < ElementPtr > () = ElementPtr(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location))); }
-#line 825 "dhcp4_parser.cc"
+#line 293 "dhcp4_parser.yy" // lalr1.cc:907
+    { yylhs.value.as< ElementPtr > () = ElementPtr(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location))); }
+#line 822 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
   case 31:
-#line 288 "dhcp4_parser.yy"
-    { yylhs.value.as < ElementPtr > () = ElementPtr(new DoubleElement(yystack_[0].value.as < double > (), ctx.loc2pos(yystack_[0].location))); }
-#line 831 "dhcp4_parser.cc"
+#line 294 "dhcp4_parser.yy" // lalr1.cc:907
+    { yylhs.value.as< ElementPtr > () = ElementPtr(new DoubleElement(yystack_[0].value.as< double > (), ctx.loc2pos(yystack_[0].location))); }
+#line 828 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
   case 32:
-#line 289 "dhcp4_parser.yy"
-    { yylhs.value.as < ElementPtr > () = ElementPtr(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location))); }
-#line 837 "dhcp4_parser.cc"
+#line 295 "dhcp4_parser.yy" // lalr1.cc:907
+    { yylhs.value.as< ElementPtr > () = ElementPtr(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location))); }
+#line 834 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
   case 33:
-#line 290 "dhcp4_parser.yy"
-    { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); }
-#line 843 "dhcp4_parser.cc"
+#line 296 "dhcp4_parser.yy" // lalr1.cc:907
+    { yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location))); }
+#line 840 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
   case 34:
-#line 291 "dhcp4_parser.yy"
-    { yylhs.value.as < ElementPtr > () = ElementPtr(new NullElement(ctx.loc2pos(yystack_[0].location))); }
-#line 849 "dhcp4_parser.cc"
+#line 297 "dhcp4_parser.yy" // lalr1.cc:907
+    { yylhs.value.as< ElementPtr > () = ElementPtr(new NullElement(ctx.loc2pos(yystack_[0].location))); }
+#line 846 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
   case 35:
-#line 292 "dhcp4_parser.yy"
-    { yylhs.value.as < ElementPtr > () = ctx.stack_.back(); ctx.stack_.pop_back(); }
-#line 855 "dhcp4_parser.cc"
+#line 298 "dhcp4_parser.yy" // lalr1.cc:907
+    { yylhs.value.as< ElementPtr > () = ctx.stack_.back(); ctx.stack_.pop_back(); }
+#line 852 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
   case 36:
-#line 293 "dhcp4_parser.yy"
-    { yylhs.value.as < ElementPtr > () = ctx.stack_.back(); ctx.stack_.pop_back(); }
-#line 861 "dhcp4_parser.cc"
+#line 299 "dhcp4_parser.yy" // lalr1.cc:907
+    { yylhs.value.as< ElementPtr > () = ctx.stack_.back(); ctx.stack_.pop_back(); }
+#line 858 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
   case 37:
-#line 296 "dhcp4_parser.yy"
+#line 302 "dhcp4_parser.yy" // lalr1.cc:907
     {
     // Push back the JSON value on the stack
-    ctx.stack_.push_back(yystack_[0].value.as < ElementPtr > ());
+    ctx.stack_.push_back(yystack_[0].value.as< ElementPtr > ());
 }
-#line 870 "dhcp4_parser.cc"
+#line 867 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
   case 38:
-#line 301 "dhcp4_parser.yy"
+#line 307 "dhcp4_parser.yy" // lalr1.cc:907
     {
     // 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 881 "dhcp4_parser.cc"
+#line 878 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
   case 39:
-#line 306 "dhcp4_parser.yy"
+#line 312 "dhcp4_parser.yy" // lalr1.cc:907
     {
     // 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 891 "dhcp4_parser.cc"
+#line 888 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
   case 40:
-#line 312 "dhcp4_parser.yy"
-    { yylhs.value.as < ElementPtr > () = ctx.stack_.back(); ctx.stack_.pop_back(); }
-#line 897 "dhcp4_parser.cc"
+#line 318 "dhcp4_parser.yy" // lalr1.cc:907
+    { yylhs.value.as< ElementPtr > () = ctx.stack_.back(); ctx.stack_.pop_back(); }
+#line 894 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
   case 43:
-#line 319 "dhcp4_parser.yy"
+#line 325 "dhcp4_parser.yy" // lalr1.cc:907
     {
                   // map containing a single entry
-                  ctx.stack_.back()->set(yystack_[2].value.as < std::string > (), yystack_[0].value.as < ElementPtr > ());
+                  ctx.stack_.back()->set(yystack_[2].value.as< std::string > (), yystack_[0].value.as< ElementPtr > ());
                   }
-#line 906 "dhcp4_parser.cc"
+#line 903 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
   case 44:
-#line 323 "dhcp4_parser.yy"
+#line 329 "dhcp4_parser.yy" // lalr1.cc:907
     {
                   // 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 > ());
+                  ctx.stack_.back()->set(yystack_[2].value.as< std::string > (), yystack_[0].value.as< ElementPtr > ());
                   }
-#line 916 "dhcp4_parser.cc"
+#line 913 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
   case 45:
-#line 330 "dhcp4_parser.yy"
+#line 336 "dhcp4_parser.yy" // lalr1.cc:907
     {
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.push_back(l);
 }
-#line 925 "dhcp4_parser.cc"
+#line 922 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
   case 46:
-#line 333 "dhcp4_parser.yy"
+#line 339 "dhcp4_parser.yy" // lalr1.cc:907
     {
     // list parsing complete. Put any sanity checking here
 }
-#line 933 "dhcp4_parser.cc"
+#line 930 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
   case 49:
-#line 341 "dhcp4_parser.yy"
+#line 347 "dhcp4_parser.yy" // lalr1.cc:907
     {
                   // List consisting of a single element.
-                  ctx.stack_.back()->add(yystack_[0].value.as < ElementPtr > ());
+                  ctx.stack_.back()->add(yystack_[0].value.as< ElementPtr > ());
                   }
-#line 942 "dhcp4_parser.cc"
+#line 939 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
   case 50:
-#line 345 "dhcp4_parser.yy"
+#line 351 "dhcp4_parser.yy" // lalr1.cc:907
     {
                   // List ending with , and a value.
-                  ctx.stack_.back()->add(yystack_[0].value.as < ElementPtr > ());
+                  ctx.stack_.back()->add(yystack_[0].value.as< ElementPtr > ());
                   }
-#line 951 "dhcp4_parser.cc"
+#line 948 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
   case 51:
-#line 352 "dhcp4_parser.yy"
+#line 358 "dhcp4_parser.yy" // lalr1.cc:907
     {
     // List parsing about to start
 }
-#line 959 "dhcp4_parser.cc"
+#line 956 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
   case 52:
-#line 354 "dhcp4_parser.yy"
+#line 360 "dhcp4_parser.yy" // lalr1.cc:907
     {
     // list parsing complete. Put any sanity checking here
     //ctx.stack_.pop_back();
 }
-#line 968 "dhcp4_parser.cc"
+#line 965 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
   case 55:
-#line 363 "dhcp4_parser.yy"
+#line 369 "dhcp4_parser.yy" // lalr1.cc:907
     {
-                          ElementPtr s(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
+                          ElementPtr s(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
                           ctx.stack_.back()->add(s);
                           }
-#line 977 "dhcp4_parser.cc"
+#line 974 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
   case 56:
-#line 367 "dhcp4_parser.yy"
+#line 373 "dhcp4_parser.yy" // lalr1.cc:907
     {
-                          ElementPtr s(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
+                          ElementPtr s(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
                           ctx.stack_.back()->add(s);
                           }
-#line 986 "dhcp4_parser.cc"
+#line 983 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
   case 57:
-#line 378 "dhcp4_parser.yy"
+#line 384 "dhcp4_parser.yy" // lalr1.cc:907
     {
     const std::string& where = ctx.contextName();
-    const std::string& keyword = yystack_[1].value.as < std::string > ();
+    const std::string& keyword = yystack_[1].value.as< std::string > ();
     error(yystack_[1].location,
           "got unexpected keyword \"" + keyword + "\" in " + where + " map.");
 }
-#line 997 "dhcp4_parser.cc"
+#line 994 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
   case 58:
-#line 388 "dhcp4_parser.yy"
+#line 394 "dhcp4_parser.yy" // lalr1.cc:907
     {
     // 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 1008 "dhcp4_parser.cc"
+#line 1005 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
   case 59:
-#line 393 "dhcp4_parser.yy"
+#line 399 "dhcp4_parser.yy" // lalr1.cc:907
     {
     // map parsing completed. If we ever want to do any wrap up
     // (maybe some sanity checking), this would be the best place
@@ -1017,11 +1014,11 @@ namespace isc { namespace dhcp {
     // Dhcp4 is required
     ctx.require("Dhcp4", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
 }
-#line 1021 "dhcp4_parser.cc"
+#line 1018 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
   case 68:
-#line 417 "dhcp4_parser.yy"
+#line 423 "dhcp4_parser.yy" // lalr1.cc:907
     {
     // This code is executed when we're about to start parsing
     // the content of the map
@@ -1030,978 +1027,1135 @@ namespace isc { namespace dhcp {
     ctx.stack_.push_back(m);
     ctx.enter(ctx.DHCP4);
 }
-#line 1034 "dhcp4_parser.cc"
+#line 1031 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
   case 69:
-#line 424 "dhcp4_parser.yy"
+#line 430 "dhcp4_parser.yy" // lalr1.cc:907
     {
     // No global parameter is required
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 1044 "dhcp4_parser.cc"
+#line 1041 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
   case 70:
-#line 432 "dhcp4_parser.yy"
+#line 438 "dhcp4_parser.yy" // lalr1.cc:907
     {
     // Parse the Dhcp4 map
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.push_back(m);
 }
-#line 1054 "dhcp4_parser.cc"
+#line 1051 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
   case 71:
-#line 436 "dhcp4_parser.yy"
+#line 442 "dhcp4_parser.yy" // lalr1.cc:907
     {
     // No global parameter is required
     // parsing completed
 }
-#line 1063 "dhcp4_parser.cc"
+#line 1060 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
-  case 116:
-#line 491 "dhcp4_parser.yy"
+  case 122:
+#line 503 "dhcp4_parser.yy" // lalr1.cc:907
     {
-    ElementPtr prf(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
+    ElementPtr prf(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("valid-lifetime", prf);
 }
-#line 1072 "dhcp4_parser.cc"
+#line 1069 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
-  case 117:
-#line 496 "dhcp4_parser.yy"
+  case 123:
+#line 508 "dhcp4_parser.yy" // lalr1.cc:907
     {
-    ElementPtr prf(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
+    ElementPtr prf(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("min-valid-lifetime", prf);
 }
-#line 1081 "dhcp4_parser.cc"
+#line 1078 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
-  case 118:
-#line 501 "dhcp4_parser.yy"
+  case 124:
+#line 513 "dhcp4_parser.yy" // lalr1.cc:907
     {
-    ElementPtr prf(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
+    ElementPtr prf(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("max-valid-lifetime", prf);
 }
-#line 1090 "dhcp4_parser.cc"
+#line 1087 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
-  case 119:
-#line 506 "dhcp4_parser.yy"
+  case 125:
+#line 518 "dhcp4_parser.yy" // lalr1.cc:907
     {
-    ElementPtr prf(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
+    ElementPtr prf(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("renew-timer", prf);
 }
-#line 1099 "dhcp4_parser.cc"
+#line 1096 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
-  case 120:
-#line 511 "dhcp4_parser.yy"
+  case 126:
+#line 523 "dhcp4_parser.yy" // lalr1.cc:907
     {
-    ElementPtr prf(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
+    ElementPtr prf(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("rebind-timer", prf);
 }
-#line 1108 "dhcp4_parser.cc"
+#line 1105 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
-  case 121:
-#line 516 "dhcp4_parser.yy"
+  case 127:
+#line 528 "dhcp4_parser.yy" // lalr1.cc:907
     {
-    ElementPtr ctt(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
+    ElementPtr ctt(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("calculate-tee-times", ctt);
 }
-#line 1117 "dhcp4_parser.cc"
+#line 1114 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
-  case 122:
-#line 521 "dhcp4_parser.yy"
+  case 128:
+#line 533 "dhcp4_parser.yy" // lalr1.cc:907
     {
-    ElementPtr t1(new DoubleElement(yystack_[0].value.as < double > (), ctx.loc2pos(yystack_[0].location)));
+    ElementPtr t1(new DoubleElement(yystack_[0].value.as< double > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("t1-percent", t1);
 }
-#line 1126 "dhcp4_parser.cc"
+#line 1123 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
-  case 123:
-#line 526 "dhcp4_parser.yy"
+  case 129:
+#line 538 "dhcp4_parser.yy" // lalr1.cc:907
     {
-    ElementPtr t2(new DoubleElement(yystack_[0].value.as < double > (), ctx.loc2pos(yystack_[0].location)));
+    ElementPtr t2(new DoubleElement(yystack_[0].value.as< double > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("t2-percent", t2);
 }
-#line 1135 "dhcp4_parser.cc"
+#line 1132 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
-  case 124:
-#line 531 "dhcp4_parser.yy"
+  case 130:
+#line 543 "dhcp4_parser.yy" // lalr1.cc:907
     {
-    ElementPtr dpp(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
+    ElementPtr dpp(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("decline-probation-period", dpp);
 }
-#line 1144 "dhcp4_parser.cc"
+#line 1141 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
-  case 125:
-#line 536 "dhcp4_parser.yy"
+  case 131:
+#line 548 "dhcp4_parser.yy" // lalr1.cc:907
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 1152 "dhcp4_parser.cc"
+#line 1149 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
-  case 126:
-#line 538 "dhcp4_parser.yy"
+  case 132:
+#line 550 "dhcp4_parser.yy" // lalr1.cc:907
     {
-    ElementPtr stag(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
+    ElementPtr stag(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("server-tag", stag);
     ctx.leave();
 }
-#line 1162 "dhcp4_parser.cc"
+#line 1159 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
-  case 127:
-#line 544 "dhcp4_parser.yy"
+  case 133:
+#line 556 "dhcp4_parser.yy" // lalr1.cc:907
     {
-    ElementPtr echo(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
+    ElementPtr echo(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("echo-client-id", echo);
 }
-#line 1171 "dhcp4_parser.cc"
+#line 1168 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
-  case 128:
-#line 549 "dhcp4_parser.yy"
+  case 134:
+#line 561 "dhcp4_parser.yy" // lalr1.cc:907
     {
-    ElementPtr match(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
+    ElementPtr match(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("match-client-id", match);
 }
-#line 1180 "dhcp4_parser.cc"
+#line 1177 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
-  case 129:
-#line 554 "dhcp4_parser.yy"
+  case 135:
+#line 566 "dhcp4_parser.yy" // lalr1.cc:907
     {
-    ElementPtr prf(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
+    ElementPtr prf(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("authoritative", prf);
 }
-#line 1189 "dhcp4_parser.cc"
+#line 1186 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
-  case 130:
-#line 560 "dhcp4_parser.yy"
+  case 136:
+#line 571 "dhcp4_parser.yy" // lalr1.cc:907
+    {
+    ElementPtr b(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location)));
+    ctx.stack_.back()->set("ddns-send-updates", b);
+}
+#line 1195 "dhcp4_parser.cc" // lalr1.cc:907
+    break;
+
+  case 137:
+#line 576 "dhcp4_parser.yy" // lalr1.cc:907
+    {
+    ElementPtr b(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location)));
+    ctx.stack_.back()->set("ddns-override-no-update", b);
+}
+#line 1204 "dhcp4_parser.cc" // lalr1.cc:907
+    break;
+
+  case 138:
+#line 581 "dhcp4_parser.yy" // lalr1.cc:907
+    {
+    ElementPtr b(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location)));
+    ctx.stack_.back()->set("ddns-override-client-update", b);
+}
+#line 1213 "dhcp4_parser.cc" // lalr1.cc:907
+    break;
+
+  case 139:
+#line 586 "dhcp4_parser.yy" // lalr1.cc:907
+    {
+    ctx.enter(ctx.REPLACE_CLIENT_NAME);
+}
+#line 1221 "dhcp4_parser.cc" // lalr1.cc:907
+    break;
+
+  case 140:
+#line 588 "dhcp4_parser.yy" // lalr1.cc:907
+    {
+    ctx.stack_.back()->set("ddns-replace-client-name", yystack_[0].value.as< ElementPtr > ());
+    ctx.leave();
+}
+#line 1230 "dhcp4_parser.cc" // lalr1.cc:907
+    break;
+
+  case 141:
+#line 594 "dhcp4_parser.yy" // lalr1.cc:907
+    {
+      yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("when-present", ctx.loc2pos(yystack_[0].location)));
+      }
+#line 1238 "dhcp4_parser.cc" // lalr1.cc:907
+    break;
+
+  case 142:
+#line 597 "dhcp4_parser.yy" // lalr1.cc:907
+    {
+      yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("never", ctx.loc2pos(yystack_[0].location)));
+      }
+#line 1246 "dhcp4_parser.cc" // lalr1.cc:907
+    break;
+
+  case 143:
+#line 600 "dhcp4_parser.yy" // lalr1.cc:907
+    {
+      yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("always", ctx.loc2pos(yystack_[0].location)));
+      }
+#line 1254 "dhcp4_parser.cc" // lalr1.cc:907
+    break;
+
+  case 144:
+#line 603 "dhcp4_parser.yy" // lalr1.cc:907
+    {
+      yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("when-not-present", ctx.loc2pos(yystack_[0].location)));
+      }
+#line 1262 "dhcp4_parser.cc" // lalr1.cc:907
+    break;
+
+  case 145:
+#line 606 "dhcp4_parser.yy" // lalr1.cc:907
+    {
+      error(yystack_[0].location, "boolean values for the replace-client-name are "
+                "no longer supported");
+      }
+#line 1271 "dhcp4_parser.cc" // lalr1.cc:907
+    break;
+
+  case 146:
+#line 612 "dhcp4_parser.yy" // lalr1.cc:907
+    {
+    ctx.enter(ctx.NO_KEYWORD);
+}
+#line 1279 "dhcp4_parser.cc" // lalr1.cc:907
+    break;
+
+  case 147:
+#line 614 "dhcp4_parser.yy" // lalr1.cc:907
+    {
+    ElementPtr s(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
+    ctx.stack_.back()->set("ddns-generated-prefix", s);
+    ctx.leave();
+}
+#line 1289 "dhcp4_parser.cc" // lalr1.cc:907
+    break;
+
+  case 148:
+#line 620 "dhcp4_parser.yy" // lalr1.cc:907
+    {
+    ctx.enter(ctx.NO_KEYWORD);
+}
+#line 1297 "dhcp4_parser.cc" // lalr1.cc:907
+    break;
+
+  case 149:
+#line 622 "dhcp4_parser.yy" // lalr1.cc:907
+    {
+    ElementPtr s(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
+    ctx.stack_.back()->set("ddns-qualifying-suffix", s);
+    ctx.leave();
+}
+#line 1307 "dhcp4_parser.cc" // lalr1.cc:907
+    break;
+
+  case 150:
+#line 628 "dhcp4_parser.yy" // lalr1.cc:907
+    {
+    ctx.enter(ctx.NO_KEYWORD);
+}
+#line 1315 "dhcp4_parser.cc" // lalr1.cc:907
+    break;
+
+  case 151:
+#line 630 "dhcp4_parser.yy" // lalr1.cc:907
+    {
+    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 1325 "dhcp4_parser.cc" // lalr1.cc:907
+    break;
+
+  case 152:
+#line 636 "dhcp4_parser.yy" // lalr1.cc:907
+    {
+    ctx.enter(ctx.NO_KEYWORD);
+}
+#line 1333 "dhcp4_parser.cc" // lalr1.cc:907
+    break;
+
+  case 153:
+#line 638 "dhcp4_parser.yy" // lalr1.cc:907
+    {
+    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 1343 "dhcp4_parser.cc" // lalr1.cc:907
+    break;
+
+  case 154:
+#line 644 "dhcp4_parser.yy" // lalr1.cc:907
     {
     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 1200 "dhcp4_parser.cc"
+#line 1354 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
-  case 131:
-#line 565 "dhcp4_parser.yy"
+  case 155:
+#line 649 "dhcp4_parser.yy" // lalr1.cc:907
     {
     // No interfaces config param is required
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 1210 "dhcp4_parser.cc"
+#line 1364 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
-  case 141:
-#line 584 "dhcp4_parser.yy"
+  case 165:
+#line 668 "dhcp4_parser.yy" // lalr1.cc:907
     {
     // Parse the interfaces-config map
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.push_back(m);
 }
-#line 1220 "dhcp4_parser.cc"
+#line 1374 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
-  case 142:
-#line 588 "dhcp4_parser.yy"
+  case 166:
+#line 672 "dhcp4_parser.yy" // lalr1.cc:907
     {
     // No interfaces config param is required
     // parsing completed
 }
-#line 1229 "dhcp4_parser.cc"
+#line 1383 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
-  case 143:
-#line 593 "dhcp4_parser.yy"
+  case 167:
+#line 677 "dhcp4_parser.yy" // lalr1.cc:907
     {
     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 1240 "dhcp4_parser.cc"
+#line 1394 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
-  case 144:
-#line 598 "dhcp4_parser.yy"
+  case 168:
+#line 682 "dhcp4_parser.yy" // lalr1.cc:907
     {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 1249 "dhcp4_parser.cc"
+#line 1403 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
-  case 145:
-#line 603 "dhcp4_parser.yy"
+  case 169:
+#line 687 "dhcp4_parser.yy" // lalr1.cc:907
     {
     ctx.enter(ctx.DHCP_SOCKET_TYPE);
 }
-#line 1257 "dhcp4_parser.cc"
+#line 1411 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
-  case 146:
-#line 605 "dhcp4_parser.yy"
+  case 170:
+#line 689 "dhcp4_parser.yy" // lalr1.cc:907
     {
-    ctx.stack_.back()->set("dhcp-socket-type", yystack_[0].value.as < ElementPtr > ());
+    ctx.stack_.back()->set("dhcp-socket-type", yystack_[0].value.as< ElementPtr > ());
     ctx.leave();
 }
-#line 1266 "dhcp4_parser.cc"
+#line 1420 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
-  case 147:
-#line 610 "dhcp4_parser.yy"
-    { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("raw", ctx.loc2pos(yystack_[0].location))); }
-#line 1272 "dhcp4_parser.cc"
+  case 171:
+#line 694 "dhcp4_parser.yy" // lalr1.cc:907
+    { yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("raw", ctx.loc2pos(yystack_[0].location))); }
+#line 1426 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
-  case 148:
-#line 611 "dhcp4_parser.yy"
-    { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("udp", ctx.loc2pos(yystack_[0].location))); }
-#line 1278 "dhcp4_parser.cc"
+  case 172:
+#line 695 "dhcp4_parser.yy" // lalr1.cc:907
+    { yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("udp", ctx.loc2pos(yystack_[0].location))); }
+#line 1432 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
-  case 149:
-#line 614 "dhcp4_parser.yy"
+  case 173:
+#line 698 "dhcp4_parser.yy" // lalr1.cc:907
     {
     ctx.enter(ctx.OUTBOUND_INTERFACE);
 }
-#line 1286 "dhcp4_parser.cc"
+#line 1440 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
-  case 150:
-#line 616 "dhcp4_parser.yy"
+  case 174:
+#line 700 "dhcp4_parser.yy" // lalr1.cc:907
     {
-    ctx.stack_.back()->set("outbound-interface", yystack_[0].value.as < ElementPtr > ());
+    ctx.stack_.back()->set("outbound-interface", yystack_[0].value.as< ElementPtr > ());
     ctx.leave();
 }
-#line 1295 "dhcp4_parser.cc"
+#line 1449 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
-  case 151:
-#line 621 "dhcp4_parser.yy"
+  case 175:
+#line 705 "dhcp4_parser.yy" // lalr1.cc:907
     {
-    yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("same-as-inbound", ctx.loc2pos(yystack_[0].location)));
+    yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("same-as-inbound", ctx.loc2pos(yystack_[0].location)));
 }
-#line 1303 "dhcp4_parser.cc"
+#line 1457 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
-  case 152:
-#line 623 "dhcp4_parser.yy"
+  case 176:
+#line 707 "dhcp4_parser.yy" // lalr1.cc:907
     {
-    yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("use-routing", ctx.loc2pos(yystack_[0].location)));
+    yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("use-routing", ctx.loc2pos(yystack_[0].location)));
     }
-#line 1311 "dhcp4_parser.cc"
+#line 1465 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
-  case 153:
-#line 627 "dhcp4_parser.yy"
+  case 177:
+#line 711 "dhcp4_parser.yy" // lalr1.cc:907
     {
-    ElementPtr b(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
+    ElementPtr b(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("re-detect", b);
 }
-#line 1320 "dhcp4_parser.cc"
+#line 1474 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
-  case 154:
-#line 633 "dhcp4_parser.yy"
+  case 178:
+#line 717 "dhcp4_parser.yy" // lalr1.cc:907
     {
     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 1331 "dhcp4_parser.cc"
+#line 1485 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
-  case 155:
-#line 638 "dhcp4_parser.yy"
+  case 179:
+#line 722 "dhcp4_parser.yy" // lalr1.cc:907
     {
     // 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 1342 "dhcp4_parser.cc"
+#line 1496 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
-  case 156:
-#line 645 "dhcp4_parser.yy"
+  case 180:
+#line 729 "dhcp4_parser.yy" // lalr1.cc:907
     {
     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 1353 "dhcp4_parser.cc"
+#line 1507 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
-  case 157:
-#line 650 "dhcp4_parser.yy"
+  case 181:
+#line 734 "dhcp4_parser.yy" // lalr1.cc:907
     {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 1362 "dhcp4_parser.cc"
+#line 1516 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
-  case 161:
-#line 660 "dhcp4_parser.yy"
+  case 185:
+#line 744 "dhcp4_parser.yy" // lalr1.cc:907
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 1370 "dhcp4_parser.cc"
+#line 1524 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
-  case 162:
-#line 662 "dhcp4_parser.yy"
+  case 186:
+#line 746 "dhcp4_parser.yy" // lalr1.cc:907
     {
 
-    if ( (string(yystack_[0].value.as < std::string > ()) == "none") ||
-         (string(yystack_[0].value.as < std::string > ()) == "warn") ||
-         (string(yystack_[0].value.as < std::string > ()) == "fix") ||
-         (string(yystack_[0].value.as < std::string > ()) == "fix-del") ||
-         (string(yystack_[0].value.as < std::string > ()) == "del")) {
-        ElementPtr user(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
+    if ( (string(yystack_[0].value.as< std::string > ()) == "none") ||
+         (string(yystack_[0].value.as< std::string > ()) == "warn") ||
+         (string(yystack_[0].value.as< std::string > ()) == "fix") ||
+         (string(yystack_[0].value.as< std::string > ()) == "fix-del") ||
+         (string(yystack_[0].value.as< std::string > ()) == "del")) {
+        ElementPtr user(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
         ctx.stack_.back()->set("lease-checks", user);
         ctx.leave();
     } else {
-        error(yystack_[0].location, "Unsupported 'lease-checks value: " + string(yystack_[0].value.as < std::string > ()) +
+        error(yystack_[0].location, "Unsupported 'lease-checks value: " + string(yystack_[0].value.as< std::string > ()) +
               ", supported values are: none, warn, fix, fix-del, del");
     }
 }
-#line 1390 "dhcp4_parser.cc"
+#line 1544 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
-  case 163:
-#line 678 "dhcp4_parser.yy"
+  case 187:
+#line 762 "dhcp4_parser.yy" // lalr1.cc:907
     {
     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 1401 "dhcp4_parser.cc"
+#line 1555 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
-  case 164:
-#line 683 "dhcp4_parser.yy"
+  case 188:
+#line 767 "dhcp4_parser.yy" // lalr1.cc:907
     {
     // 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 1412 "dhcp4_parser.cc"
+#line 1566 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
-  case 165:
-#line 690 "dhcp4_parser.yy"
+  case 189:
+#line 774 "dhcp4_parser.yy" // lalr1.cc:907
     {
     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 1423 "dhcp4_parser.cc"
+#line 1577 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
-  case 166:
-#line 695 "dhcp4_parser.yy"
+  case 190:
+#line 779 "dhcp4_parser.yy" // lalr1.cc:907
     {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 1432 "dhcp4_parser.cc"
+#line 1586 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
-  case 171:
-#line 708 "dhcp4_parser.yy"
+  case 195:
+#line 792 "dhcp4_parser.yy" // lalr1.cc:907
     {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(m);
     ctx.stack_.push_back(m);
 }
-#line 1442 "dhcp4_parser.cc"
+#line 1596 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
-  case 172:
-#line 712 "dhcp4_parser.yy"
+  case 196:
+#line 796 "dhcp4_parser.yy" // lalr1.cc:907
     {
     // The type parameter is required
     ctx.require("type", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
     ctx.stack_.pop_back();
 }
-#line 1452 "dhcp4_parser.cc"
+#line 1606 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
-  case 196:
-#line 745 "dhcp4_parser.yy"
+  case 220:
+#line 829 "dhcp4_parser.yy" // lalr1.cc:907
     {
     ctx.enter(ctx.DATABASE_TYPE);
 }
-#line 1460 "dhcp4_parser.cc"
+#line 1614 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
-  case 197:
-#line 747 "dhcp4_parser.yy"
+  case 221:
+#line 831 "dhcp4_parser.yy" // lalr1.cc:907
     {
-    ctx.stack_.back()->set("type", yystack_[0].value.as < ElementPtr > ());
+    ctx.stack_.back()->set("type", yystack_[0].value.as< ElementPtr > ());
     ctx.leave();
 }
-#line 1469 "dhcp4_parser.cc"
+#line 1623 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
-  case 198:
-#line 752 "dhcp4_parser.yy"
-    { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("memfile", ctx.loc2pos(yystack_[0].location))); }
-#line 1475 "dhcp4_parser.cc"
+  case 222:
+#line 836 "dhcp4_parser.yy" // lalr1.cc:907
+    { yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("memfile", ctx.loc2pos(yystack_[0].location))); }
+#line 1629 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
-  case 199:
-#line 753 "dhcp4_parser.yy"
-    { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("mysql", ctx.loc2pos(yystack_[0].location))); }
-#line 1481 "dhcp4_parser.cc"
+  case 223:
+#line 837 "dhcp4_parser.yy" // lalr1.cc:907
+    { yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("mysql", ctx.loc2pos(yystack_[0].location))); }
+#line 1635 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
-  case 200:
-#line 754 "dhcp4_parser.yy"
-    { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("postgresql", ctx.loc2pos(yystack_[0].location))); }
-#line 1487 "dhcp4_parser.cc"
+  case 224:
+#line 838 "dhcp4_parser.yy" // lalr1.cc:907
+    { yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("postgresql", ctx.loc2pos(yystack_[0].location))); }
+#line 1641 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
-  case 201:
-#line 755 "dhcp4_parser.yy"
-    { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("cql", ctx.loc2pos(yystack_[0].location))); }
-#line 1493 "dhcp4_parser.cc"
+  case 225:
+#line 839 "dhcp4_parser.yy" // lalr1.cc:907
+    { yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("cql", ctx.loc2pos(yystack_[0].location))); }
+#line 1647 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
-  case 202:
-#line 758 "dhcp4_parser.yy"
+  case 226:
+#line 842 "dhcp4_parser.yy" // lalr1.cc:907
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 1501 "dhcp4_parser.cc"
+#line 1655 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
-  case 203:
-#line 760 "dhcp4_parser.yy"
+  case 227:
+#line 844 "dhcp4_parser.yy" // lalr1.cc:907
     {
-    ElementPtr user(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
+    ElementPtr user(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("user", user);
     ctx.leave();
 }
-#line 1511 "dhcp4_parser.cc"
+#line 1665 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
-  case 204:
-#line 766 "dhcp4_parser.yy"
+  case 228:
+#line 850 "dhcp4_parser.yy" // lalr1.cc:907
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 1519 "dhcp4_parser.cc"
+#line 1673 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
-  case 205:
-#line 768 "dhcp4_parser.yy"
+  case 229:
+#line 852 "dhcp4_parser.yy" // lalr1.cc:907
     {
-    ElementPtr pwd(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
+    ElementPtr pwd(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("password", pwd);
     ctx.leave();
 }
-#line 1529 "dhcp4_parser.cc"
+#line 1683 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
-  case 206:
-#line 774 "dhcp4_parser.yy"
+  case 230:
+#line 858 "dhcp4_parser.yy" // lalr1.cc:907
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 1537 "dhcp4_parser.cc"
+#line 1691 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
-  case 207:
-#line 776 "dhcp4_parser.yy"
+  case 231:
+#line 860 "dhcp4_parser.yy" // lalr1.cc:907
     {
-    ElementPtr h(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
+    ElementPtr h(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("host", h);
     ctx.leave();
 }
-#line 1547 "dhcp4_parser.cc"
+#line 1701 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
-  case 208:
-#line 782 "dhcp4_parser.yy"
+  case 232:
+#line 866 "dhcp4_parser.yy" // lalr1.cc:907
     {
-    ElementPtr p(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
+    ElementPtr p(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("port", p);
 }
-#line 1556 "dhcp4_parser.cc"
+#line 1710 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
-  case 209:
-#line 787 "dhcp4_parser.yy"
+  case 233:
+#line 871 "dhcp4_parser.yy" // lalr1.cc:907
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 1564 "dhcp4_parser.cc"
+#line 1718 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
-  case 210:
-#line 789 "dhcp4_parser.yy"
+  case 234:
+#line 873 "dhcp4_parser.yy" // lalr1.cc:907
     {
-    ElementPtr name(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
+    ElementPtr name(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("name", name);
     ctx.leave();
 }
-#line 1574 "dhcp4_parser.cc"
+#line 1728 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
-  case 211:
-#line 795 "dhcp4_parser.yy"
+  case 235:
+#line 879 "dhcp4_parser.yy" // lalr1.cc:907
     {
-    ElementPtr n(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
+    ElementPtr n(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("persist", n);
 }
-#line 1583 "dhcp4_parser.cc"
+#line 1737 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
-  case 212:
-#line 800 "dhcp4_parser.yy"
+  case 236:
+#line 884 "dhcp4_parser.yy" // lalr1.cc:907
     {
-    ElementPtr n(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
+    ElementPtr n(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("lfc-interval", n);
 }
-#line 1592 "dhcp4_parser.cc"
+#line 1746 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
-  case 213:
-#line 805 "dhcp4_parser.yy"
+  case 237:
+#line 889 "dhcp4_parser.yy" // lalr1.cc:907
     {
-    ElementPtr n(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
+    ElementPtr n(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("readonly", n);
 }
-#line 1601 "dhcp4_parser.cc"
+#line 1755 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
-  case 214:
-#line 810 "dhcp4_parser.yy"
+  case 238:
+#line 894 "dhcp4_parser.yy" // lalr1.cc:907
     {
-    ElementPtr n(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
+    ElementPtr n(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("connect-timeout", n);
 }
-#line 1610 "dhcp4_parser.cc"
+#line 1764 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
-  case 215:
-#line 815 "dhcp4_parser.yy"
+  case 239:
+#line 899 "dhcp4_parser.yy" // lalr1.cc:907
     {
-    ElementPtr n(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
+    ElementPtr n(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("request-timeout", n);
 }
-#line 1619 "dhcp4_parser.cc"
+#line 1773 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
-  case 216:
-#line 820 "dhcp4_parser.yy"
+  case 240:
+#line 904 "dhcp4_parser.yy" // lalr1.cc:907
     {
-    ElementPtr n(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
+    ElementPtr n(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("tcp-keepalive", n);
 }
-#line 1628 "dhcp4_parser.cc"
+#line 1782 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
-  case 217:
-#line 825 "dhcp4_parser.yy"
+  case 241:
+#line 909 "dhcp4_parser.yy" // lalr1.cc:907
     {
-    ElementPtr n(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
+    ElementPtr n(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("tcp-nodelay", n);
 }
-#line 1637 "dhcp4_parser.cc"
+#line 1791 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
-  case 218:
-#line 830 "dhcp4_parser.yy"
+  case 242:
+#line 914 "dhcp4_parser.yy" // lalr1.cc:907
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 1645 "dhcp4_parser.cc"
+#line 1799 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
-  case 219:
-#line 832 "dhcp4_parser.yy"
+  case 243:
+#line 916 "dhcp4_parser.yy" // lalr1.cc:907
     {
-    ElementPtr cp(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
+    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 1655 "dhcp4_parser.cc"
+#line 1809 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
-  case 220:
-#line 838 "dhcp4_parser.yy"
+  case 244:
+#line 922 "dhcp4_parser.yy" // lalr1.cc:907
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 1663 "dhcp4_parser.cc"
+#line 1817 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
-  case 221:
-#line 840 "dhcp4_parser.yy"
+  case 245:
+#line 924 "dhcp4_parser.yy" // lalr1.cc:907
     {
-    ElementPtr ks(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
+    ElementPtr ks(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("keyspace", ks);
     ctx.leave();
 }
-#line 1673 "dhcp4_parser.cc"
+#line 1827 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
-  case 222:
-#line 846 "dhcp4_parser.yy"
+  case 246:
+#line 930 "dhcp4_parser.yy" // lalr1.cc:907
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 1681 "dhcp4_parser.cc"
+#line 1835 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
-  case 223:
-#line 848 "dhcp4_parser.yy"
+  case 247:
+#line 932 "dhcp4_parser.yy" // lalr1.cc:907
     {
-    ElementPtr c(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
+    ElementPtr c(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("consistency", c);
     ctx.leave();
 }
-#line 1691 "dhcp4_parser.cc"
+#line 1845 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
-  case 224:
-#line 854 "dhcp4_parser.yy"
+  case 248:
+#line 938 "dhcp4_parser.yy" // lalr1.cc:907
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 1699 "dhcp4_parser.cc"
+#line 1853 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
-  case 225:
-#line 856 "dhcp4_parser.yy"
+  case 249:
+#line 940 "dhcp4_parser.yy" // lalr1.cc:907
     {
-    ElementPtr c(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
+    ElementPtr c(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("serial-consistency", c);
     ctx.leave();
 }
-#line 1709 "dhcp4_parser.cc"
+#line 1863 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
-  case 226:
-#line 862 "dhcp4_parser.yy"
+  case 250:
+#line 946 "dhcp4_parser.yy" // lalr1.cc:907
     {
-    ElementPtr n(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
+    ElementPtr n(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("max-reconnect-tries", n);
 }
-#line 1718 "dhcp4_parser.cc"
+#line 1872 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
-  case 227:
-#line 867 "dhcp4_parser.yy"
+  case 251:
+#line 951 "dhcp4_parser.yy" // lalr1.cc:907
     {
-    ElementPtr n(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
+    ElementPtr n(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("reconnect-wait-time", n);
 }
-#line 1727 "dhcp4_parser.cc"
+#line 1881 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
-  case 228:
-#line 872 "dhcp4_parser.yy"
+  case 252:
+#line 956 "dhcp4_parser.yy" // lalr1.cc:907
     {
-    ElementPtr n(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
+    ElementPtr n(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("max-row-errors", n);
 }
-#line 1736 "dhcp4_parser.cc"
+#line 1890 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
-  case 229:
-#line 878 "dhcp4_parser.yy"
+  case 253:
+#line 962 "dhcp4_parser.yy" // lalr1.cc:907
     {
     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 1747 "dhcp4_parser.cc"
+#line 1901 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
-  case 230:
-#line 883 "dhcp4_parser.yy"
+  case 254:
+#line 967 "dhcp4_parser.yy" // lalr1.cc:907
     {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 1756 "dhcp4_parser.cc"
+#line 1910 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
-  case 238:
-#line 899 "dhcp4_parser.yy"
+  case 262:
+#line 983 "dhcp4_parser.yy" // lalr1.cc:907
     {
     ElementPtr duid(new StringElement("duid", ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(duid);
 }
-#line 1765 "dhcp4_parser.cc"
+#line 1919 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
-  case 239:
-#line 904 "dhcp4_parser.yy"
+  case 263:
+#line 988 "dhcp4_parser.yy" // lalr1.cc:907
     {
     ElementPtr hwaddr(new StringElement("hw-address", ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(hwaddr);
 }
-#line 1774 "dhcp4_parser.cc"
+#line 1928 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
-  case 240:
-#line 909 "dhcp4_parser.yy"
+  case 264:
+#line 993 "dhcp4_parser.yy" // lalr1.cc:907
     {
     ElementPtr circuit(new StringElement("circuit-id", ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(circuit);
 }
-#line 1783 "dhcp4_parser.cc"
+#line 1937 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
-  case 241:
-#line 914 "dhcp4_parser.yy"
+  case 265:
+#line 998 "dhcp4_parser.yy" // lalr1.cc:907
     {
     ElementPtr client(new StringElement("client-id", ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(client);
 }
-#line 1792 "dhcp4_parser.cc"
+#line 1946 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
-  case 242:
-#line 919 "dhcp4_parser.yy"
+  case 266:
+#line 1003 "dhcp4_parser.yy" // lalr1.cc:907
     {
     ElementPtr flex_id(new StringElement("flex-id", ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(flex_id);
 }
-#line 1801 "dhcp4_parser.cc"
+#line 1955 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
-  case 243:
-#line 924 "dhcp4_parser.yy"
+  case 267:
+#line 1008 "dhcp4_parser.yy" // lalr1.cc:907
     {
     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 1812 "dhcp4_parser.cc"
+#line 1966 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
-  case 244:
-#line 929 "dhcp4_parser.yy"
+  case 268:
+#line 1013 "dhcp4_parser.yy" // lalr1.cc:907
     {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 1821 "dhcp4_parser.cc"
+#line 1975 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
-  case 249:
-#line 942 "dhcp4_parser.yy"
+  case 273:
+#line 1026 "dhcp4_parser.yy" // lalr1.cc:907
     {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(m);
     ctx.stack_.push_back(m);
 }
-#line 1831 "dhcp4_parser.cc"
+#line 1985 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
-  case 250:
-#line 946 "dhcp4_parser.yy"
+  case 274:
+#line 1030 "dhcp4_parser.yy" // lalr1.cc:907
     {
     // The library hooks parameter is required
     ctx.require("library", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
     ctx.stack_.pop_back();
 }
-#line 1841 "dhcp4_parser.cc"
+#line 1995 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
-  case 251:
-#line 952 "dhcp4_parser.yy"
+  case 275:
+#line 1036 "dhcp4_parser.yy" // lalr1.cc:907
     {
     // Parse the hooks-libraries list entry map
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.push_back(m);
 }
-#line 1851 "dhcp4_parser.cc"
+#line 2005 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
-  case 252:
-#line 956 "dhcp4_parser.yy"
+  case 276:
+#line 1040 "dhcp4_parser.yy" // lalr1.cc:907
     {
     // The library hooks parameter is required
     ctx.require("library", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
     // parsing completed
 }
-#line 1861 "dhcp4_parser.cc"
+#line 2015 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
-  case 258:
-#line 971 "dhcp4_parser.yy"
+  case 282:
+#line 1055 "dhcp4_parser.yy" // lalr1.cc:907
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 1869 "dhcp4_parser.cc"
+#line 2023 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
-  case 259:
-#line 973 "dhcp4_parser.yy"
+  case 283:
+#line 1057 "dhcp4_parser.yy" // lalr1.cc:907
     {
-    ElementPtr lib(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
+    ElementPtr lib(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("library", lib);
     ctx.leave();
 }
-#line 1879 "dhcp4_parser.cc"
+#line 2033 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
-  case 260:
-#line 979 "dhcp4_parser.yy"
+  case 284:
+#line 1063 "dhcp4_parser.yy" // lalr1.cc:907
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 1887 "dhcp4_parser.cc"
+#line 2041 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
-  case 261:
-#line 981 "dhcp4_parser.yy"
+  case 285:
+#line 1065 "dhcp4_parser.yy" // lalr1.cc:907
     {
-    ctx.stack_.back()->set("parameters", yystack_[0].value.as < ElementPtr > ());
+    ctx.stack_.back()->set("parameters", yystack_[0].value.as< ElementPtr > ());
     ctx.leave();
 }
-#line 1896 "dhcp4_parser.cc"
+#line 2050 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
-  case 262:
-#line 987 "dhcp4_parser.yy"
+  case 286:
+#line 1071 "dhcp4_parser.yy" // lalr1.cc:907
     {
     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 1907 "dhcp4_parser.cc"
+#line 2061 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
-  case 263:
-#line 992 "dhcp4_parser.yy"
+  case 287:
+#line 1076 "dhcp4_parser.yy" // lalr1.cc:907
     {
     // No expired lease parameter is required
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 1917 "dhcp4_parser.cc"
+#line 2071 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
-  case 272:
-#line 1010 "dhcp4_parser.yy"
+  case 296:
+#line 1094 "dhcp4_parser.yy" // lalr1.cc:907
     {
-    ElementPtr value(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
+    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 1926 "dhcp4_parser.cc"
+#line 2080 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
-  case 273:
-#line 1015 "dhcp4_parser.yy"
+  case 297:
+#line 1099 "dhcp4_parser.yy" // lalr1.cc:907
     {
-    ElementPtr value(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
+    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 1935 "dhcp4_parser.cc"
+#line 2089 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
-  case 274:
-#line 1020 "dhcp4_parser.yy"
+  case 298:
+#line 1104 "dhcp4_parser.yy" // lalr1.cc:907
     {
-    ElementPtr value(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
+    ElementPtr value(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("hold-reclaimed-time", value);
 }
-#line 1944 "dhcp4_parser.cc"
+#line 2098 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
-  case 275:
-#line 1025 "dhcp4_parser.yy"
+  case 299:
+#line 1109 "dhcp4_parser.yy" // lalr1.cc:907
     {
-    ElementPtr value(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
+    ElementPtr value(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("max-reclaim-leases", value);
 }
-#line 1953 "dhcp4_parser.cc"
+#line 2107 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
-  case 276:
-#line 1030 "dhcp4_parser.yy"
+  case 300:
+#line 1114 "dhcp4_parser.yy" // lalr1.cc:907
     {
-    ElementPtr value(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
+    ElementPtr value(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("max-reclaim-time", value);
 }
-#line 1962 "dhcp4_parser.cc"
+#line 2116 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
-  case 277:
-#line 1035 "dhcp4_parser.yy"
+  case 301:
+#line 1119 "dhcp4_parser.yy" // lalr1.cc:907
     {
-    ElementPtr value(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
+    ElementPtr value(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("unwarned-reclaim-cycles", value);
 }
-#line 1971 "dhcp4_parser.cc"
+#line 2125 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
-  case 278:
-#line 1043 "dhcp4_parser.yy"
+  case 302:
+#line 1127 "dhcp4_parser.yy" // lalr1.cc:907
     {
     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 1982 "dhcp4_parser.cc"
+#line 2136 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
-  case 279:
-#line 1048 "dhcp4_parser.yy"
+  case 303:
+#line 1132 "dhcp4_parser.yy" // lalr1.cc:907
     {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 1991 "dhcp4_parser.cc"
+#line 2145 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
-  case 284:
-#line 1068 "dhcp4_parser.yy"
+  case 308:
+#line 1152 "dhcp4_parser.yy" // lalr1.cc:907
     {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(m);
     ctx.stack_.push_back(m);
 }
-#line 2001 "dhcp4_parser.cc"
+#line 2155 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
-  case 285:
-#line 1072 "dhcp4_parser.yy"
+  case 309:
+#line 1156 "dhcp4_parser.yy" // lalr1.cc:907
     {
     // Once we reached this place, the subnet parsing is now complete.
     // If we want to, we can implement default values here.
@@ -2023,294 +2177,294 @@ namespace isc { namespace dhcp {
     ctx.require("subnet", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
     ctx.stack_.pop_back();
 }
-#line 2027 "dhcp4_parser.cc"
+#line 2181 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
-  case 286:
-#line 1094 "dhcp4_parser.yy"
+  case 310:
+#line 1178 "dhcp4_parser.yy" // lalr1.cc:907
     {
     // Parse the subnet4 list entry map
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.push_back(m);
 }
-#line 2037 "dhcp4_parser.cc"
+#line 2191 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
-  case 287:
-#line 1098 "dhcp4_parser.yy"
+  case 311:
+#line 1182 "dhcp4_parser.yy" // lalr1.cc:907
     {
     // The subnet subnet4 parameter is required
     ctx.require("subnet", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
     // parsing completed
 }
-#line 2047 "dhcp4_parser.cc"
+#line 2201 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
-  case 319:
-#line 1141 "dhcp4_parser.yy"
+  case 351:
+#line 1233 "dhcp4_parser.yy" // lalr1.cc:907
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2055 "dhcp4_parser.cc"
+#line 2209 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
-  case 320:
-#line 1143 "dhcp4_parser.yy"
+  case 352:
+#line 1235 "dhcp4_parser.yy" // lalr1.cc:907
     {
-    ElementPtr subnet(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
+    ElementPtr subnet(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("subnet", subnet);
     ctx.leave();
 }
-#line 2065 "dhcp4_parser.cc"
+#line 2219 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
-  case 321:
-#line 1149 "dhcp4_parser.yy"
+  case 353:
+#line 1241 "dhcp4_parser.yy" // lalr1.cc:907
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2073 "dhcp4_parser.cc"
+#line 2227 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
-  case 322:
-#line 1151 "dhcp4_parser.yy"
+  case 354:
+#line 1243 "dhcp4_parser.yy" // lalr1.cc:907
     {
-    ElementPtr iface(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
+    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 2083 "dhcp4_parser.cc"
+#line 2237 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
-  case 323:
-#line 1157 "dhcp4_parser.yy"
+  case 355:
+#line 1249 "dhcp4_parser.yy" // lalr1.cc:907
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2091 "dhcp4_parser.cc"
+#line 2245 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
-  case 324:
-#line 1159 "dhcp4_parser.yy"
+  case 356:
+#line 1251 "dhcp4_parser.yy" // lalr1.cc:907
     {
-    ElementPtr iface(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
+    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 2101 "dhcp4_parser.cc"
+#line 2255 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
-  case 325:
-#line 1165 "dhcp4_parser.yy"
+  case 357:
+#line 1257 "dhcp4_parser.yy" // lalr1.cc:907
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2109 "dhcp4_parser.cc"
+#line 2263 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
-  case 326:
-#line 1167 "dhcp4_parser.yy"
+  case 358:
+#line 1259 "dhcp4_parser.yy" // lalr1.cc:907
     {
-    ElementPtr iface(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
+    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 2119 "dhcp4_parser.cc"
+#line 2273 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
-  case 327:
-#line 1173 "dhcp4_parser.yy"
+  case 359:
+#line 1265 "dhcp4_parser.yy" // lalr1.cc:907
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2127 "dhcp4_parser.cc"
+#line 2281 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
-  case 328:
-#line 1175 "dhcp4_parser.yy"
+  case 360:
+#line 1267 "dhcp4_parser.yy" // lalr1.cc:907
     {
-    ElementPtr iface(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
+    ElementPtr iface(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("interface", iface);
     ctx.leave();
 }
-#line 2137 "dhcp4_parser.cc"
+#line 2291 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
-  case 329:
-#line 1181 "dhcp4_parser.yy"
+  case 361:
+#line 1273 "dhcp4_parser.yy" // lalr1.cc:907
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2145 "dhcp4_parser.cc"
+#line 2299 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
-  case 330:
-#line 1183 "dhcp4_parser.yy"
+  case 362:
+#line 1275 "dhcp4_parser.yy" // lalr1.cc:907
     {
-    ElementPtr cls(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
+    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 2155 "dhcp4_parser.cc"
+#line 2309 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
-  case 331:
-#line 1189 "dhcp4_parser.yy"
+  case 363:
+#line 1281 "dhcp4_parser.yy" // lalr1.cc:907
     {
     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 2166 "dhcp4_parser.cc"
+#line 2320 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
-  case 332:
-#line 1194 "dhcp4_parser.yy"
+  case 364:
+#line 1286 "dhcp4_parser.yy" // lalr1.cc:907
     {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 2175 "dhcp4_parser.cc"
+#line 2329 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
-  case 333:
-#line 1199 "dhcp4_parser.yy"
+  case 365:
+#line 1291 "dhcp4_parser.yy" // lalr1.cc:907
     {
     ctx.enter(ctx.RESERVATION_MODE);
 }
-#line 2183 "dhcp4_parser.cc"
+#line 2337 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
-  case 334:
-#line 1201 "dhcp4_parser.yy"
+  case 366:
+#line 1293 "dhcp4_parser.yy" // lalr1.cc:907
     {
-    ctx.stack_.back()->set("reservation-mode", yystack_[0].value.as < ElementPtr > ());
+    ctx.stack_.back()->set("reservation-mode", yystack_[0].value.as< ElementPtr > ());
     ctx.leave();
 }
-#line 2192 "dhcp4_parser.cc"
+#line 2346 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
-  case 335:
-#line 1206 "dhcp4_parser.yy"
-    { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("disabled", ctx.loc2pos(yystack_[0].location))); }
-#line 2198 "dhcp4_parser.cc"
+  case 367:
+#line 1298 "dhcp4_parser.yy" // lalr1.cc:907
+    { yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("disabled", ctx.loc2pos(yystack_[0].location))); }
+#line 2352 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
-  case 336:
-#line 1207 "dhcp4_parser.yy"
-    { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("out-of-pool", ctx.loc2pos(yystack_[0].location))); }
-#line 2204 "dhcp4_parser.cc"
+  case 368:
+#line 1299 "dhcp4_parser.yy" // lalr1.cc:907
+    { yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("out-of-pool", ctx.loc2pos(yystack_[0].location))); }
+#line 2358 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
-  case 337:
-#line 1208 "dhcp4_parser.yy"
-    { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("global", ctx.loc2pos(yystack_[0].location))); }
-#line 2210 "dhcp4_parser.cc"
+  case 369:
+#line 1300 "dhcp4_parser.yy" // lalr1.cc:907
+    { yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("global", ctx.loc2pos(yystack_[0].location))); }
+#line 2364 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
-  case 338:
-#line 1209 "dhcp4_parser.yy"
-    { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("all", ctx.loc2pos(yystack_[0].location))); }
-#line 2216 "dhcp4_parser.cc"
+  case 370:
+#line 1301 "dhcp4_parser.yy" // lalr1.cc:907
+    { yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("all", ctx.loc2pos(yystack_[0].location))); }
+#line 2370 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
-  case 339:
-#line 1212 "dhcp4_parser.yy"
+  case 371:
+#line 1304 "dhcp4_parser.yy" // lalr1.cc:907
     {
-    ElementPtr id(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
+    ElementPtr id(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("id", id);
 }
-#line 2225 "dhcp4_parser.cc"
+#line 2379 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
-  case 340:
-#line 1219 "dhcp4_parser.yy"
+  case 372:
+#line 1311 "dhcp4_parser.yy" // lalr1.cc:907
     {
     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 2236 "dhcp4_parser.cc"
+#line 2390 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
-  case 341:
-#line 1224 "dhcp4_parser.yy"
+  case 373:
+#line 1316 "dhcp4_parser.yy" // lalr1.cc:907
     {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 2245 "dhcp4_parser.cc"
+#line 2399 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
-  case 346:
-#line 1239 "dhcp4_parser.yy"
+  case 378:
+#line 1331 "dhcp4_parser.yy" // lalr1.cc:907
     {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(m);
     ctx.stack_.push_back(m);
 }
-#line 2255 "dhcp4_parser.cc"
+#line 2409 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
-  case 347:
-#line 1243 "dhcp4_parser.yy"
+  case 379:
+#line 1335 "dhcp4_parser.yy" // lalr1.cc:907
     {
     ctx.stack_.pop_back();
 }
-#line 2263 "dhcp4_parser.cc"
+#line 2417 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
-  case 374:
-#line 1281 "dhcp4_parser.yy"
+  case 414:
+#line 1381 "dhcp4_parser.yy" // lalr1.cc:907
     {
     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 2274 "dhcp4_parser.cc"
+#line 2428 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
-  case 375:
-#line 1286 "dhcp4_parser.yy"
+  case 415:
+#line 1386 "dhcp4_parser.yy" // lalr1.cc:907
     {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 2283 "dhcp4_parser.cc"
+#line 2437 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
-  case 376:
-#line 1294 "dhcp4_parser.yy"
+  case 416:
+#line 1394 "dhcp4_parser.yy" // lalr1.cc:907
     {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.push_back(m);
 }
-#line 2292 "dhcp4_parser.cc"
+#line 2446 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
-  case 377:
-#line 1297 "dhcp4_parser.yy"
+  case 417:
+#line 1397 "dhcp4_parser.yy" // lalr1.cc:907
     {
     // parsing completed
 }
-#line 2300 "dhcp4_parser.cc"
+#line 2454 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
-  case 382:
-#line 1313 "dhcp4_parser.yy"
+  case 422:
+#line 1413 "dhcp4_parser.yy" // lalr1.cc:907
     {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(m);
     ctx.stack_.push_back(m);
 }
-#line 2310 "dhcp4_parser.cc"
+#line 2464 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
-  case 383:
-#line 1317 "dhcp4_parser.yy"
+  case 423:
+#line 1417 "dhcp4_parser.yy" // lalr1.cc:907
     {
     // The name, code and type option def parameters are required.
     ctx.require("name", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
@@ -2318,21 +2472,21 @@ namespace isc { namespace dhcp {
     ctx.require("type", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
     ctx.stack_.pop_back();
 }
-#line 2322 "dhcp4_parser.cc"
+#line 2476 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
-  case 384:
-#line 1328 "dhcp4_parser.yy"
+  case 424:
+#line 1428 "dhcp4_parser.yy" // lalr1.cc:907
     {
     // Parse the option-def list entry map
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.push_back(m);
 }
-#line 2332 "dhcp4_parser.cc"
+#line 2486 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
-  case 385:
-#line 1332 "dhcp4_parser.yy"
+  case 425:
+#line 1432 "dhcp4_parser.yy" // lalr1.cc:907
     {
     // The name, code and type option def parameters are required.
     ctx.require("name", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
@@ -2340,284 +2494,284 @@ namespace isc { namespace dhcp {
     ctx.require("type", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
     // parsing completed
 }
-#line 2344 "dhcp4_parser.cc"
+#line 2498 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
-  case 401:
-#line 1364 "dhcp4_parser.yy"
+  case 441:
+#line 1464 "dhcp4_parser.yy" // lalr1.cc:907
     {
-    ElementPtr code(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
+    ElementPtr code(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("code", code);
 }
-#line 2353 "dhcp4_parser.cc"
+#line 2507 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
-  case 403:
-#line 1371 "dhcp4_parser.yy"
+  case 443:
+#line 1471 "dhcp4_parser.yy" // lalr1.cc:907
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2361 "dhcp4_parser.cc"
+#line 2515 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
-  case 404:
-#line 1373 "dhcp4_parser.yy"
+  case 444:
+#line 1473 "dhcp4_parser.yy" // lalr1.cc:907
     {
-    ElementPtr prf(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
+    ElementPtr prf(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("type", prf);
     ctx.leave();
 }
-#line 2371 "dhcp4_parser.cc"
+#line 2525 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
-  case 405:
-#line 1379 "dhcp4_parser.yy"
+  case 445:
+#line 1479 "dhcp4_parser.yy" // lalr1.cc:907
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2379 "dhcp4_parser.cc"
+#line 2533 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
-  case 406:
-#line 1381 "dhcp4_parser.yy"
+  case 446:
+#line 1481 "dhcp4_parser.yy" // lalr1.cc:907
     {
-    ElementPtr rtypes(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
+    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 2389 "dhcp4_parser.cc"
+#line 2543 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
-  case 407:
-#line 1387 "dhcp4_parser.yy"
+  case 447:
+#line 1487 "dhcp4_parser.yy" // lalr1.cc:907
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2397 "dhcp4_parser.cc"
+#line 2551 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
-  case 408:
-#line 1389 "dhcp4_parser.yy"
+  case 448:
+#line 1489 "dhcp4_parser.yy" // lalr1.cc:907
     {
-    ElementPtr space(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
+    ElementPtr space(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("space", space);
     ctx.leave();
 }
-#line 2407 "dhcp4_parser.cc"
+#line 2561 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
-  case 410:
-#line 1397 "dhcp4_parser.yy"
+  case 450:
+#line 1497 "dhcp4_parser.yy" // lalr1.cc:907
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2415 "dhcp4_parser.cc"
+#line 2569 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
-  case 411:
-#line 1399 "dhcp4_parser.yy"
+  case 451:
+#line 1499 "dhcp4_parser.yy" // lalr1.cc:907
     {
-    ElementPtr encap(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
+    ElementPtr encap(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("encapsulate", encap);
     ctx.leave();
 }
-#line 2425 "dhcp4_parser.cc"
+#line 2579 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
-  case 412:
-#line 1405 "dhcp4_parser.yy"
+  case 452:
+#line 1505 "dhcp4_parser.yy" // lalr1.cc:907
     {
-    ElementPtr array(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
+    ElementPtr array(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("array", array);
 }
-#line 2434 "dhcp4_parser.cc"
+#line 2588 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
-  case 413:
-#line 1414 "dhcp4_parser.yy"
+  case 453:
+#line 1514 "dhcp4_parser.yy" // lalr1.cc:907
     {
     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 2445 "dhcp4_parser.cc"
+#line 2599 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
-  case 414:
-#line 1419 "dhcp4_parser.yy"
+  case 454:
+#line 1519 "dhcp4_parser.yy" // lalr1.cc:907
     {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 2454 "dhcp4_parser.cc"
+#line 2608 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
-  case 419:
-#line 1438 "dhcp4_parser.yy"
+  case 459:
+#line 1538 "dhcp4_parser.yy" // lalr1.cc:907
     {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(m);
     ctx.stack_.push_back(m);
 }
-#line 2464 "dhcp4_parser.cc"
+#line 2618 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
-  case 420:
-#line 1442 "dhcp4_parser.yy"
+  case 460:
+#line 1542 "dhcp4_parser.yy" // lalr1.cc:907
     {
     /// @todo: the code or name parameters are required.
     ctx.stack_.pop_back();
 }
-#line 2473 "dhcp4_parser.cc"
+#line 2627 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
-  case 421:
-#line 1450 "dhcp4_parser.yy"
+  case 461:
+#line 1550 "dhcp4_parser.yy" // lalr1.cc:907
     {
     // Parse the option-data list entry map
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.push_back(m);
 }
-#line 2483 "dhcp4_parser.cc"
+#line 2637 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
-  case 422:
-#line 1454 "dhcp4_parser.yy"
+  case 462:
+#line 1554 "dhcp4_parser.yy" // lalr1.cc:907
     {
     /// @todo: the code or name parameters are required.
     // parsing completed
 }
-#line 2492 "dhcp4_parser.cc"
+#line 2646 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
-  case 437:
-#line 1487 "dhcp4_parser.yy"
+  case 477:
+#line 1587 "dhcp4_parser.yy" // lalr1.cc:907
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2500 "dhcp4_parser.cc"
+#line 2654 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
-  case 438:
-#line 1489 "dhcp4_parser.yy"
+  case 478:
+#line 1589 "dhcp4_parser.yy" // lalr1.cc:907
     {
-    ElementPtr data(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
+    ElementPtr data(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("data", data);
     ctx.leave();
 }
-#line 2510 "dhcp4_parser.cc"
+#line 2664 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
-  case 441:
-#line 1499 "dhcp4_parser.yy"
+  case 481:
+#line 1599 "dhcp4_parser.yy" // lalr1.cc:907
     {
-    ElementPtr space(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
+    ElementPtr space(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("csv-format", space);
 }
-#line 2519 "dhcp4_parser.cc"
+#line 2673 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
-  case 442:
-#line 1504 "dhcp4_parser.yy"
+  case 482:
+#line 1604 "dhcp4_parser.yy" // lalr1.cc:907
     {
-    ElementPtr persist(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
+    ElementPtr persist(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("always-send", persist);
 }
-#line 2528 "dhcp4_parser.cc"
+#line 2682 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
-  case 443:
-#line 1512 "dhcp4_parser.yy"
+  case 483:
+#line 1612 "dhcp4_parser.yy" // lalr1.cc:907
     {
     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 2539 "dhcp4_parser.cc"
+#line 2693 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
-  case 444:
-#line 1517 "dhcp4_parser.yy"
+  case 484:
+#line 1617 "dhcp4_parser.yy" // lalr1.cc:907
     {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 2548 "dhcp4_parser.cc"
+#line 2702 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
-  case 449:
-#line 1532 "dhcp4_parser.yy"
+  case 489:
+#line 1632 "dhcp4_parser.yy" // lalr1.cc:907
     {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(m);
     ctx.stack_.push_back(m);
 }
-#line 2558 "dhcp4_parser.cc"
+#line 2712 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
-  case 450:
-#line 1536 "dhcp4_parser.yy"
+  case 490:
+#line 1636 "dhcp4_parser.yy" // lalr1.cc:907
     {
     // The pool parameter is required.
     ctx.require("pool", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
     ctx.stack_.pop_back();
 }
-#line 2568 "dhcp4_parser.cc"
+#line 2722 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
-  case 451:
-#line 1542 "dhcp4_parser.yy"
+  case 491:
+#line 1642 "dhcp4_parser.yy" // lalr1.cc:907
     {
     // Parse the pool list entry map
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.push_back(m);
 }
-#line 2578 "dhcp4_parser.cc"
+#line 2732 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
-  case 452:
-#line 1546 "dhcp4_parser.yy"
+  case 492:
+#line 1646 "dhcp4_parser.yy" // lalr1.cc:907
     {
     // The pool parameter is required.
     ctx.require("pool", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
     // parsing completed
 }
-#line 2588 "dhcp4_parser.cc"
+#line 2742 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
-  case 462:
-#line 1565 "dhcp4_parser.yy"
+  case 502:
+#line 1665 "dhcp4_parser.yy" // lalr1.cc:907
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2596 "dhcp4_parser.cc"
+#line 2750 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
-  case 463:
-#line 1567 "dhcp4_parser.yy"
+  case 503:
+#line 1667 "dhcp4_parser.yy" // lalr1.cc:907
     {
-    ElementPtr pool(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
+    ElementPtr pool(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("pool", pool);
     ctx.leave();
 }
-#line 2606 "dhcp4_parser.cc"
+#line 2760 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
-  case 464:
-#line 1573 "dhcp4_parser.yy"
+  case 504:
+#line 1673 "dhcp4_parser.yy" // lalr1.cc:907
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2614 "dhcp4_parser.cc"
+#line 2768 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
-  case 465:
-#line 1575 "dhcp4_parser.yy"
+  case 505:
+#line 1675 "dhcp4_parser.yy" // lalr1.cc:907
     {
     ElementPtr parent = ctx.stack_.back();
-    ElementPtr user_context = yystack_[0].value.as < ElementPtr > ();
+    ElementPtr user_context = yystack_[0].value.as< ElementPtr > ();
     ConstElementPtr old = parent->get("user-context");
 
     // Handle already existing user context
@@ -2637,23 +2791,23 @@ namespace isc { namespace dhcp {
     parent->set("user-context", user_context);
     ctx.leave();
 }
-#line 2641 "dhcp4_parser.cc"
+#line 2795 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
-  case 466:
-#line 1598 "dhcp4_parser.yy"
+  case 506:
+#line 1698 "dhcp4_parser.yy" // lalr1.cc:907
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2649 "dhcp4_parser.cc"
+#line 2803 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
-  case 467:
-#line 1600 "dhcp4_parser.yy"
+  case 507:
+#line 1700 "dhcp4_parser.yy" // lalr1.cc:907
     {
     ElementPtr parent = ctx.stack_.back();
     ElementPtr user_context(new MapElement(ctx.loc2pos(yystack_[3].location)));
-    ElementPtr comment(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
+    ElementPtr comment(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     user_context->set("comment", comment);
 
     // Handle already existing user context
@@ -2674,451 +2828,451 @@ namespace isc { namespace dhcp {
     parent->set("user-context", user_context);
     ctx.leave();
 }
-#line 2678 "dhcp4_parser.cc"
+#line 2832 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
-  case 468:
-#line 1628 "dhcp4_parser.yy"
+  case 508:
+#line 1728 "dhcp4_parser.yy" // lalr1.cc:907
     {
     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 2689 "dhcp4_parser.cc"
+#line 2843 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
-  case 469:
-#line 1633 "dhcp4_parser.yy"
+  case 509:
+#line 1733 "dhcp4_parser.yy" // lalr1.cc:907
     {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 2698 "dhcp4_parser.cc"
+#line 2852 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
-  case 474:
-#line 1646 "dhcp4_parser.yy"
+  case 514:
+#line 1746 "dhcp4_parser.yy" // lalr1.cc:907
     {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(m);
     ctx.stack_.push_back(m);
 }
-#line 2708 "dhcp4_parser.cc"
+#line 2862 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
-  case 475:
-#line 1650 "dhcp4_parser.yy"
+  case 515:
+#line 1750 "dhcp4_parser.yy" // lalr1.cc:907
     {
     /// @todo: an identifier parameter is required.
     ctx.stack_.pop_back();
 }
-#line 2717 "dhcp4_parser.cc"
+#line 2871 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
-  case 476:
-#line 1655 "dhcp4_parser.yy"
+  case 516:
+#line 1755 "dhcp4_parser.yy" // lalr1.cc:907
     {
     // Parse the reservations list entry map
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.push_back(m);
 }
-#line 2727 "dhcp4_parser.cc"
+#line 2881 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
-  case 477:
-#line 1659 "dhcp4_parser.yy"
+  case 517:
+#line 1759 "dhcp4_parser.yy" // lalr1.cc:907
     {
     /// @todo: an identifier parameter is required.
     // parsing completed
 }
-#line 2736 "dhcp4_parser.cc"
+#line 2890 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
-  case 497:
-#line 1690 "dhcp4_parser.yy"
+  case 537:
+#line 1790 "dhcp4_parser.yy" // lalr1.cc:907
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2744 "dhcp4_parser.cc"
+#line 2898 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
-  case 498:
-#line 1692 "dhcp4_parser.yy"
+  case 538:
+#line 1792 "dhcp4_parser.yy" // lalr1.cc:907
     {
-    ElementPtr next_server(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
+    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 2754 "dhcp4_parser.cc"
+#line 2908 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
-  case 499:
-#line 1698 "dhcp4_parser.yy"
+  case 539:
+#line 1798 "dhcp4_parser.yy" // lalr1.cc:907
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2762 "dhcp4_parser.cc"
+#line 2916 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
-  case 500:
-#line 1700 "dhcp4_parser.yy"
+  case 540:
+#line 1800 "dhcp4_parser.yy" // lalr1.cc:907
     {
-    ElementPtr srv(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
+    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 2772 "dhcp4_parser.cc"
+#line 2926 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
-  case 501:
-#line 1706 "dhcp4_parser.yy"
+  case 541:
+#line 1806 "dhcp4_parser.yy" // lalr1.cc:907
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2780 "dhcp4_parser.cc"
+#line 2934 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
-  case 502:
-#line 1708 "dhcp4_parser.yy"
+  case 542:
+#line 1808 "dhcp4_parser.yy" // lalr1.cc:907
     {
-    ElementPtr bootfile(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
+    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 2790 "dhcp4_parser.cc"
+#line 2944 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
-  case 503:
-#line 1714 "dhcp4_parser.yy"
+  case 543:
+#line 1814 "dhcp4_parser.yy" // lalr1.cc:907
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2798 "dhcp4_parser.cc"
+#line 2952 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
-  case 504:
-#line 1716 "dhcp4_parser.yy"
+  case 544:
+#line 1816 "dhcp4_parser.yy" // lalr1.cc:907
     {
-    ElementPtr addr(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
+    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 2808 "dhcp4_parser.cc"
+#line 2962 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
-  case 505:
-#line 1722 "dhcp4_parser.yy"
+  case 545:
+#line 1822 "dhcp4_parser.yy" // lalr1.cc:907
     {
     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 2819 "dhcp4_parser.cc"
+#line 2973 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
-  case 506:
-#line 1727 "dhcp4_parser.yy"
+  case 546:
+#line 1827 "dhcp4_parser.yy" // lalr1.cc:907
     {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 2828 "dhcp4_parser.cc"
+#line 2982 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
-  case 507:
-#line 1732 "dhcp4_parser.yy"
+  case 547:
+#line 1832 "dhcp4_parser.yy" // lalr1.cc:907
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2836 "dhcp4_parser.cc"
+#line 2990 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
-  case 508:
-#line 1734 "dhcp4_parser.yy"
+  case 548:
+#line 1834 "dhcp4_parser.yy" // lalr1.cc:907
     {
-    ElementPtr d(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
+    ElementPtr d(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("duid", d);
     ctx.leave();
 }
-#line 2846 "dhcp4_parser.cc"
+#line 3000 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
-  case 509:
-#line 1740 "dhcp4_parser.yy"
+  case 549:
+#line 1840 "dhcp4_parser.yy" // lalr1.cc:907
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2854 "dhcp4_parser.cc"
+#line 3008 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
-  case 510:
-#line 1742 "dhcp4_parser.yy"
+  case 550:
+#line 1842 "dhcp4_parser.yy" // lalr1.cc:907
     {
-    ElementPtr hw(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
+    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 2864 "dhcp4_parser.cc"
+#line 3018 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
-  case 511:
-#line 1748 "dhcp4_parser.yy"
+  case 551:
+#line 1848 "dhcp4_parser.yy" // lalr1.cc:907
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2872 "dhcp4_parser.cc"
+#line 3026 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
-  case 512:
-#line 1750 "dhcp4_parser.yy"
+  case 552:
+#line 1850 "dhcp4_parser.yy" // lalr1.cc:907
     {
-    ElementPtr hw(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
+    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 2882 "dhcp4_parser.cc"
+#line 3036 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
-  case 513:
-#line 1756 "dhcp4_parser.yy"
+  case 553:
+#line 1856 "dhcp4_parser.yy" // lalr1.cc:907
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2890 "dhcp4_parser.cc"
+#line 3044 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
-  case 514:
-#line 1758 "dhcp4_parser.yy"
+  case 554:
+#line 1858 "dhcp4_parser.yy" // lalr1.cc:907
     {
-    ElementPtr hw(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
+    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 2900 "dhcp4_parser.cc"
+#line 3054 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
-  case 515:
-#line 1764 "dhcp4_parser.yy"
+  case 555:
+#line 1864 "dhcp4_parser.yy" // lalr1.cc:907
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2908 "dhcp4_parser.cc"
+#line 3062 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
-  case 516:
-#line 1766 "dhcp4_parser.yy"
+  case 556:
+#line 1866 "dhcp4_parser.yy" // lalr1.cc:907
     {
-    ElementPtr hw(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
+    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 2918 "dhcp4_parser.cc"
+#line 3072 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
-  case 517:
-#line 1772 "dhcp4_parser.yy"
+  case 557:
+#line 1872 "dhcp4_parser.yy" // lalr1.cc:907
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2926 "dhcp4_parser.cc"
+#line 3080 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
-  case 518:
-#line 1774 "dhcp4_parser.yy"
+  case 558:
+#line 1874 "dhcp4_parser.yy" // lalr1.cc:907
     {
-    ElementPtr host(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
+    ElementPtr host(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("hostname", host);
     ctx.leave();
 }
-#line 2936 "dhcp4_parser.cc"
+#line 3090 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
-  case 519:
-#line 1780 "dhcp4_parser.yy"
+  case 559:
+#line 1880 "dhcp4_parser.yy" // lalr1.cc:907
     {
     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 2947 "dhcp4_parser.cc"
+#line 3101 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
-  case 520:
-#line 1785 "dhcp4_parser.yy"
+  case 560:
+#line 1885 "dhcp4_parser.yy" // lalr1.cc:907
     {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 2956 "dhcp4_parser.cc"
+#line 3110 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
-  case 521:
-#line 1793 "dhcp4_parser.yy"
+  case 561:
+#line 1893 "dhcp4_parser.yy" // lalr1.cc:907
     {
     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 2967 "dhcp4_parser.cc"
+#line 3121 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
-  case 522:
-#line 1798 "dhcp4_parser.yy"
+  case 562:
+#line 1898 "dhcp4_parser.yy" // lalr1.cc:907
     {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 2976 "dhcp4_parser.cc"
+#line 3130 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
-  case 525:
-#line 1810 "dhcp4_parser.yy"
+  case 565:
+#line 1910 "dhcp4_parser.yy" // lalr1.cc:907
     {
     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 2987 "dhcp4_parser.cc"
+#line 3141 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
-  case 526:
-#line 1815 "dhcp4_parser.yy"
+  case 566:
+#line 1915 "dhcp4_parser.yy" // lalr1.cc:907
     {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 2996 "dhcp4_parser.cc"
+#line 3150 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
-  case 529:
-#line 1824 "dhcp4_parser.yy"
+  case 569:
+#line 1924 "dhcp4_parser.yy" // lalr1.cc:907
     {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(m);
     ctx.stack_.push_back(m);
 }
-#line 3006 "dhcp4_parser.cc"
+#line 3160 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
-  case 530:
-#line 1828 "dhcp4_parser.yy"
+  case 570:
+#line 1928 "dhcp4_parser.yy" // lalr1.cc:907
     {
     // 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 3016 "dhcp4_parser.cc"
+#line 3170 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
-  case 547:
-#line 1857 "dhcp4_parser.yy"
+  case 587:
+#line 1957 "dhcp4_parser.yy" // lalr1.cc:907
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 3024 "dhcp4_parser.cc"
+#line 3178 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
-  case 548:
-#line 1859 "dhcp4_parser.yy"
+  case 588:
+#line 1959 "dhcp4_parser.yy" // lalr1.cc:907
     {
-    ElementPtr test(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
+    ElementPtr test(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("test", test);
     ctx.leave();
 }
-#line 3034 "dhcp4_parser.cc"
+#line 3188 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
-  case 549:
-#line 1865 "dhcp4_parser.yy"
+  case 589:
+#line 1965 "dhcp4_parser.yy" // lalr1.cc:907
     {
-    ElementPtr b(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
+    ElementPtr b(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("only-if-required", b);
 }
-#line 3043 "dhcp4_parser.cc"
+#line 3197 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
-  case 550:
-#line 1874 "dhcp4_parser.yy"
+  case 590:
+#line 1974 "dhcp4_parser.yy" // lalr1.cc:907
     {
-    ElementPtr time(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
+    ElementPtr time(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("dhcp4o6-port", time);
 }
-#line 3052 "dhcp4_parser.cc"
+#line 3206 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
-  case 551:
-#line 1881 "dhcp4_parser.yy"
+  case 591:
+#line 1981 "dhcp4_parser.yy" // lalr1.cc:907
     {
     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 3063 "dhcp4_parser.cc"
+#line 3217 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
-  case 552:
-#line 1886 "dhcp4_parser.yy"
+  case 592:
+#line 1986 "dhcp4_parser.yy" // lalr1.cc:907
     {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 3072 "dhcp4_parser.cc"
+#line 3226 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
-  case 560:
-#line 1902 "dhcp4_parser.yy"
+  case 600:
+#line 2002 "dhcp4_parser.yy" // lalr1.cc:907
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 3080 "dhcp4_parser.cc"
+#line 3234 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
-  case 561:
-#line 1904 "dhcp4_parser.yy"
+  case 601:
+#line 2004 "dhcp4_parser.yy" // lalr1.cc:907
     {
-    ElementPtr stype(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
+    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 3090 "dhcp4_parser.cc"
+#line 3244 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
-  case 562:
-#line 1910 "dhcp4_parser.yy"
+  case 602:
+#line 2010 "dhcp4_parser.yy" // lalr1.cc:907
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 3098 "dhcp4_parser.cc"
+#line 3252 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
-  case 563:
-#line 1912 "dhcp4_parser.yy"
+  case 603:
+#line 2012 "dhcp4_parser.yy" // lalr1.cc:907
     {
-    ElementPtr name(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
+    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 3108 "dhcp4_parser.cc"
+#line 3262 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
-  case 564:
-#line 1921 "dhcp4_parser.yy"
+  case 604:
+#line 2021 "dhcp4_parser.yy" // lalr1.cc:907
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 3116 "dhcp4_parser.cc"
+#line 3270 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
-  case 565:
-#line 1923 "dhcp4_parser.yy"
+  case 605:
+#line 2023 "dhcp4_parser.yy" // lalr1.cc:907
     {
-    ElementPtr qc = yystack_[0].value.as < ElementPtr > ();
+    ElementPtr qc = yystack_[0].value.as< ElementPtr > ();
     ctx.stack_.back()->set("dhcp-queue-control", qc);
 
     // Doing this manually, because dhcp-queue-control
@@ -3150,645 +3304,603 @@ namespace isc { namespace dhcp {
 
     ctx.leave();
 }
-#line 3154 "dhcp4_parser.cc"
+#line 3308 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
-  case 566:
-#line 1959 "dhcp4_parser.yy"
+  case 606:
+#line 2059 "dhcp4_parser.yy" // lalr1.cc:907
     {
     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 3165 "dhcp4_parser.cc"
+#line 3319 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
-  case 567:
-#line 1964 "dhcp4_parser.yy"
+  case 607:
+#line 2064 "dhcp4_parser.yy" // lalr1.cc:907
     {
     // 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 3176 "dhcp4_parser.cc"
+#line 3330 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
-  case 568:
-#line 1971 "dhcp4_parser.yy"
+  case 608:
+#line 2071 "dhcp4_parser.yy" // lalr1.cc:907
     {
     // Parse the dhcp-ddns map
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.push_back(m);
 }
-#line 3186 "dhcp4_parser.cc"
+#line 3340 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
-  case 569:
-#line 1975 "dhcp4_parser.yy"
+  case 609:
+#line 2075 "dhcp4_parser.yy" // lalr1.cc:907
     {
     // 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 3196 "dhcp4_parser.cc"
+#line 3350 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
-  case 590:
-#line 2005 "dhcp4_parser.yy"
+  case 630:
+#line 2105 "dhcp4_parser.yy" // lalr1.cc:907
     {
-    ElementPtr b(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
+    ElementPtr b(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("enable-updates", b);
 }
-#line 3205 "dhcp4_parser.cc"
+#line 3359 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
-  case 591:
-#line 2010 "dhcp4_parser.yy"
+  case 631:
+#line 2110 "dhcp4_parser.yy" // lalr1.cc:907
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 3213 "dhcp4_parser.cc"
+#line 3367 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
-  case 592:
-#line 2012 "dhcp4_parser.yy"
+  case 632:
+#line 2112 "dhcp4_parser.yy" // lalr1.cc:907
     {
-    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 3223 "dhcp4_parser.cc"
-    break;
-
-  case 593:
-#line 2018 "dhcp4_parser.yy"
-    {
-    ctx.enter(ctx.NO_KEYWORD);
-}
-#line 3231 "dhcp4_parser.cc"
-    break;
-
-  case 594:
-#line 2020 "dhcp4_parser.yy"
-    {
-    ElementPtr s(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
+    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 3241 "dhcp4_parser.cc"
+#line 3377 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
-  case 595:
-#line 2026 "dhcp4_parser.yy"
+  case 633:
+#line 2118 "dhcp4_parser.yy" // lalr1.cc:907
     {
-    ElementPtr i(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
+    ElementPtr i(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("server-port", i);
 }
-#line 3250 "dhcp4_parser.cc"
+#line 3386 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
-  case 596:
-#line 2031 "dhcp4_parser.yy"
+  case 634:
+#line 2123 "dhcp4_parser.yy" // lalr1.cc:907
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 3258 "dhcp4_parser.cc"
+#line 3394 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
-  case 597:
-#line 2033 "dhcp4_parser.yy"
+  case 635:
+#line 2125 "dhcp4_parser.yy" // lalr1.cc:907
     {
-    ElementPtr s(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
+    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 3268 "dhcp4_parser.cc"
+#line 3404 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
-  case 598:
-#line 2039 "dhcp4_parser.yy"
+  case 636:
+#line 2131 "dhcp4_parser.yy" // lalr1.cc:907
     {
-    ElementPtr i(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
+    ElementPtr i(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("sender-port", i);
 }
-#line 3277 "dhcp4_parser.cc"
+#line 3413 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
-  case 599:
-#line 2044 "dhcp4_parser.yy"
+  case 637:
+#line 2136 "dhcp4_parser.yy" // lalr1.cc:907
     {
-    ElementPtr i(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
+    ElementPtr i(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("max-queue-size", i);
 }
-#line 3286 "dhcp4_parser.cc"
+#line 3422 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
-  case 600:
-#line 2049 "dhcp4_parser.yy"
+  case 638:
+#line 2141 "dhcp4_parser.yy" // lalr1.cc:907
     {
     ctx.enter(ctx.NCR_PROTOCOL);
 }
-#line 3294 "dhcp4_parser.cc"
+#line 3430 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
-  case 601:
-#line 2051 "dhcp4_parser.yy"
+  case 639:
+#line 2143 "dhcp4_parser.yy" // lalr1.cc:907
     {
-    ctx.stack_.back()->set("ncr-protocol", yystack_[0].value.as < ElementPtr > ());
+    ctx.stack_.back()->set("ncr-protocol", yystack_[0].value.as< ElementPtr > ());
     ctx.leave();
 }
-#line 3303 "dhcp4_parser.cc"
+#line 3439 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
-  case 602:
-#line 2057 "dhcp4_parser.yy"
-    { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("UDP", ctx.loc2pos(yystack_[0].location))); }
-#line 3309 "dhcp4_parser.cc"
+  case 640:
+#line 2149 "dhcp4_parser.yy" // lalr1.cc:907
+    { yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("UDP", ctx.loc2pos(yystack_[0].location))); }
+#line 3445 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
-  case 603:
-#line 2058 "dhcp4_parser.yy"
-    { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("TCP", ctx.loc2pos(yystack_[0].location))); }
-#line 3315 "dhcp4_parser.cc"
+  case 641:
+#line 2150 "dhcp4_parser.yy" // lalr1.cc:907
+    { yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("TCP", ctx.loc2pos(yystack_[0].location))); }
+#line 3451 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
-  case 604:
-#line 2061 "dhcp4_parser.yy"
+  case 642:
+#line 2153 "dhcp4_parser.yy" // lalr1.cc:907
     {
     ctx.enter(ctx.NCR_FORMAT);
 }
-#line 3323 "dhcp4_parser.cc"
+#line 3459 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
-  case 605:
-#line 2063 "dhcp4_parser.yy"
+  case 643:
+#line 2155 "dhcp4_parser.yy" // lalr1.cc:907
     {
     ElementPtr json(new StringElement("JSON", ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("ncr-format", json);
     ctx.leave();
 }
-#line 3333 "dhcp4_parser.cc"
+#line 3469 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
-  case 606:
-#line 2069 "dhcp4_parser.yy"
+  case 644:
+#line 2162 "dhcp4_parser.yy" // lalr1.cc:907
     {
-    ElementPtr b(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
-    ctx.stack_.back()->set("override-no-update", b);
+    ctx.enter(ctx.NO_KEYWORD);
 }
-#line 3342 "dhcp4_parser.cc"
+#line 3477 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
-  case 607:
-#line 2074 "dhcp4_parser.yy"
+  case 645:
+#line 2164 "dhcp4_parser.yy" // lalr1.cc:907
     {
-    ElementPtr b(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
-    ctx.stack_.back()->set("override-client-update", b);
+    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 3351 "dhcp4_parser.cc"
+#line 3487 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
-  case 608:
-#line 2079 "dhcp4_parser.yy"
+  case 646:
+#line 2171 "dhcp4_parser.yy" // lalr1.cc:907
     {
-    ctx.enter(ctx.REPLACE_CLIENT_NAME);
+    ElementPtr b(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location)));
+    ctx.stack_.back()->set("override-no-update", b);
 }
-#line 3359 "dhcp4_parser.cc"
+#line 3496 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
-  case 609:
-#line 2081 "dhcp4_parser.yy"
+  case 647:
+#line 2177 "dhcp4_parser.yy" // lalr1.cc:907
     {
-    ctx.stack_.back()->set("replace-client-name", yystack_[0].value.as < ElementPtr > ());
-    ctx.leave();
+    ElementPtr b(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location)));
+    ctx.stack_.back()->set("override-client-update", b);
 }
-#line 3368 "dhcp4_parser.cc"
-    break;
-
-  case 610:
-#line 2087 "dhcp4_parser.yy"
-    {
-      yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("when-present", ctx.loc2pos(yystack_[0].location)));
-      }
-#line 3376 "dhcp4_parser.cc"
-    break;
-
-  case 611:
-#line 2090 "dhcp4_parser.yy"
-    {
-      yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("never", ctx.loc2pos(yystack_[0].location)));
-      }
-#line 3384 "dhcp4_parser.cc"
+#line 3505 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
-  case 612:
-#line 2093 "dhcp4_parser.yy"
+  case 648:
+#line 2183 "dhcp4_parser.yy" // lalr1.cc:907
     {
-      yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("always", ctx.loc2pos(yystack_[0].location)));
-      }
-#line 3392 "dhcp4_parser.cc"
-    break;
-
-  case 613:
-#line 2096 "dhcp4_parser.yy"
-    {
-      yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("when-not-present", ctx.loc2pos(yystack_[0].location)));
-      }
-#line 3400 "dhcp4_parser.cc"
+    ctx.enter(ctx.REPLACE_CLIENT_NAME);
+}
+#line 3513 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
-  case 614:
-#line 2099 "dhcp4_parser.yy"
+  case 649:
+#line 2185 "dhcp4_parser.yy" // lalr1.cc:907
     {
-      error(yystack_[0].location, "boolean values for the replace-client-name are "
-                "no longer supported");
-      }
-#line 3409 "dhcp4_parser.cc"
+    ctx.stack_.back()->set("replace-client-name", yystack_[0].value.as< ElementPtr > ());
+    ctx.leave();
+}
+#line 3522 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
-  case 615:
-#line 2105 "dhcp4_parser.yy"
+  case 650:
+#line 2191 "dhcp4_parser.yy" // lalr1.cc:907
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 3417 "dhcp4_parser.cc"
+#line 3530 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
-  case 616:
-#line 2107 "dhcp4_parser.yy"
+  case 651:
+#line 2193 "dhcp4_parser.yy" // lalr1.cc:907
     {
-    ElementPtr s(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
+    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 3427 "dhcp4_parser.cc"
+#line 3540 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
-  case 617:
-#line 2113 "dhcp4_parser.yy"
+  case 652:
+#line 2200 "dhcp4_parser.yy" // lalr1.cc:907
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 3435 "dhcp4_parser.cc"
+#line 3548 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
-  case 618:
-#line 2115 "dhcp4_parser.yy"
+  case 653:
+#line 2202 "dhcp4_parser.yy" // lalr1.cc:907
     {
-    ElementPtr s(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
+    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 3445 "dhcp4_parser.cc"
+#line 3558 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
-  case 619:
-#line 2121 "dhcp4_parser.yy"
+  case 654:
+#line 2209 "dhcp4_parser.yy" // lalr1.cc:907
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 3453 "dhcp4_parser.cc"
+#line 3566 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
-  case 620:
-#line 2123 "dhcp4_parser.yy"
+  case 655:
+#line 2211 "dhcp4_parser.yy" // lalr1.cc:907
     {
-    ElementPtr s(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
+    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 3463 "dhcp4_parser.cc"
+#line 3576 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
-  case 621:
-#line 2132 "dhcp4_parser.yy"
+  case 656:
+#line 2220 "dhcp4_parser.yy" // lalr1.cc:907
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 3471 "dhcp4_parser.cc"
+#line 3584 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
-  case 622:
-#line 2134 "dhcp4_parser.yy"
+  case 657:
+#line 2222 "dhcp4_parser.yy" // lalr1.cc:907
     {
-    ctx.stack_.back()->set("Dhcp6", yystack_[0].value.as < ElementPtr > ());
+    ctx.stack_.back()->set("Dhcp6", yystack_[0].value.as< ElementPtr > ());
     ctx.leave();
 }
-#line 3480 "dhcp4_parser.cc"
+#line 3593 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
-  case 623:
-#line 2139 "dhcp4_parser.yy"
+  case 658:
+#line 2227 "dhcp4_parser.yy" // lalr1.cc:907
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 3488 "dhcp4_parser.cc"
+#line 3601 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
-  case 624:
-#line 2141 "dhcp4_parser.yy"
+  case 659:
+#line 2229 "dhcp4_parser.yy" // lalr1.cc:907
     {
-    ctx.stack_.back()->set("DhcpDdns", yystack_[0].value.as < ElementPtr > ());
+    ctx.stack_.back()->set("DhcpDdns", yystack_[0].value.as< ElementPtr > ());
     ctx.leave();
 }
-#line 3497 "dhcp4_parser.cc"
+#line 3610 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
-  case 625:
-#line 2146 "dhcp4_parser.yy"
+  case 660:
+#line 2234 "dhcp4_parser.yy" // lalr1.cc:907
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 3505 "dhcp4_parser.cc"
+#line 3618 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
-  case 626:
-#line 2148 "dhcp4_parser.yy"
+  case 661:
+#line 2236 "dhcp4_parser.yy" // lalr1.cc:907
     {
-    ctx.stack_.back()->set("Control-agent", yystack_[0].value.as < ElementPtr > ());
+    ctx.stack_.back()->set("Control-agent", yystack_[0].value.as< ElementPtr > ());
     ctx.leave();
 }
-#line 3514 "dhcp4_parser.cc"
+#line 3627 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
-  case 627:
-#line 2153 "dhcp4_parser.yy"
+  case 662:
+#line 2241 "dhcp4_parser.yy" // lalr1.cc:907
     {
     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 3525 "dhcp4_parser.cc"
+#line 3638 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
-  case 628:
-#line 2158 "dhcp4_parser.yy"
+  case 663:
+#line 2246 "dhcp4_parser.yy" // lalr1.cc:907
     {
     // No config control params are required
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 3535 "dhcp4_parser.cc"
+#line 3648 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
-  case 629:
-#line 2164 "dhcp4_parser.yy"
+  case 664:
+#line 2252 "dhcp4_parser.yy" // lalr1.cc:907
     {
     // Parse the config-control map
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.push_back(m);
 }
-#line 3545 "dhcp4_parser.cc"
+#line 3658 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
-  case 630:
-#line 2168 "dhcp4_parser.yy"
+  case 665:
+#line 2256 "dhcp4_parser.yy" // lalr1.cc:907
     {
     // No config_control params are required
     // parsing completed
 }
-#line 3554 "dhcp4_parser.cc"
+#line 3667 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
-  case 635:
-#line 2183 "dhcp4_parser.yy"
+  case 670:
+#line 2271 "dhcp4_parser.yy" // lalr1.cc:907
     {
     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 3565 "dhcp4_parser.cc"
+#line 3678 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
-  case 636:
-#line 2188 "dhcp4_parser.yy"
+  case 671:
+#line 2276 "dhcp4_parser.yy" // lalr1.cc:907
     {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 3574 "dhcp4_parser.cc"
+#line 3687 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
-  case 637:
-#line 2193 "dhcp4_parser.yy"
+  case 672:
+#line 2281 "dhcp4_parser.yy" // lalr1.cc:907
     {
-    ElementPtr value(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
+    ElementPtr value(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("config-fetch-wait-time", value);
 }
-#line 3583 "dhcp4_parser.cc"
+#line 3696 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
-  case 638:
-#line 2203 "dhcp4_parser.yy"
+  case 673:
+#line 2291 "dhcp4_parser.yy" // lalr1.cc:907
     {
     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 3594 "dhcp4_parser.cc"
+#line 3707 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
-  case 639:
-#line 2208 "dhcp4_parser.yy"
+  case 674:
+#line 2296 "dhcp4_parser.yy" // lalr1.cc:907
     {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 3603 "dhcp4_parser.cc"
+#line 3716 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
-  case 640:
-#line 2213 "dhcp4_parser.yy"
+  case 675:
+#line 2301 "dhcp4_parser.yy" // lalr1.cc:907
     {
     // Parse the Logging map
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.push_back(m);
 }
-#line 3613 "dhcp4_parser.cc"
+#line 3726 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
-  case 641:
-#line 2217 "dhcp4_parser.yy"
+  case 676:
+#line 2305 "dhcp4_parser.yy" // lalr1.cc:907
     {
     // parsing completed
 }
-#line 3621 "dhcp4_parser.cc"
+#line 3734 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
-  case 645:
-#line 2233 "dhcp4_parser.yy"
+  case 680:
+#line 2321 "dhcp4_parser.yy" // lalr1.cc:907
     {
     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 3632 "dhcp4_parser.cc"
+#line 3745 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
-  case 646:
-#line 2238 "dhcp4_parser.yy"
+  case 681:
+#line 2326 "dhcp4_parser.yy" // lalr1.cc:907
     {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 3641 "dhcp4_parser.cc"
+#line 3754 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
-  case 649:
-#line 2250 "dhcp4_parser.yy"
+  case 684:
+#line 2338 "dhcp4_parser.yy" // lalr1.cc:907
     {
     ElementPtr l(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(l);
     ctx.stack_.push_back(l);
 }
-#line 3651 "dhcp4_parser.cc"
+#line 3764 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
-  case 650:
-#line 2254 "dhcp4_parser.yy"
+  case 685:
+#line 2342 "dhcp4_parser.yy" // lalr1.cc:907
     {
     ctx.stack_.pop_back();
 }
-#line 3659 "dhcp4_parser.cc"
+#line 3772 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
-  case 660:
-#line 2271 "dhcp4_parser.yy"
+  case 695:
+#line 2359 "dhcp4_parser.yy" // lalr1.cc:907
     {
-    ElementPtr dl(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
+    ElementPtr dl(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("debuglevel", dl);
 }
-#line 3668 "dhcp4_parser.cc"
+#line 3781 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
-  case 661:
-#line 2276 "dhcp4_parser.yy"
+  case 696:
+#line 2364 "dhcp4_parser.yy" // lalr1.cc:907
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 3676 "dhcp4_parser.cc"
+#line 3789 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
-  case 662:
-#line 2278 "dhcp4_parser.yy"
+  case 697:
+#line 2366 "dhcp4_parser.yy" // lalr1.cc:907
     {
-    ElementPtr sev(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
+    ElementPtr sev(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("severity", sev);
     ctx.leave();
 }
-#line 3686 "dhcp4_parser.cc"
+#line 3799 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
-  case 663:
-#line 2284 "dhcp4_parser.yy"
+  case 698:
+#line 2372 "dhcp4_parser.yy" // lalr1.cc:907
     {
     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 3697 "dhcp4_parser.cc"
+#line 3810 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
-  case 664:
-#line 2289 "dhcp4_parser.yy"
+  case 699:
+#line 2377 "dhcp4_parser.yy" // lalr1.cc:907
     {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 3706 "dhcp4_parser.cc"
+#line 3819 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
-  case 667:
-#line 2298 "dhcp4_parser.yy"
+  case 702:
+#line 2386 "dhcp4_parser.yy" // lalr1.cc:907
     {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(m);
     ctx.stack_.push_back(m);
 }
-#line 3716 "dhcp4_parser.cc"
+#line 3829 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
-  case 668:
-#line 2302 "dhcp4_parser.yy"
+  case 703:
+#line 2390 "dhcp4_parser.yy" // lalr1.cc:907
     {
     ctx.stack_.pop_back();
 }
-#line 3724 "dhcp4_parser.cc"
+#line 3837 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
-  case 676:
-#line 2317 "dhcp4_parser.yy"
+  case 711:
+#line 2405 "dhcp4_parser.yy" // lalr1.cc:907
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 3732 "dhcp4_parser.cc"
+#line 3845 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
-  case 677:
-#line 2319 "dhcp4_parser.yy"
+  case 712:
+#line 2407 "dhcp4_parser.yy" // lalr1.cc:907
     {
-    ElementPtr sev(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
+    ElementPtr sev(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("output", sev);
     ctx.leave();
 }
-#line 3742 "dhcp4_parser.cc"
+#line 3855 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
-  case 678:
-#line 2325 "dhcp4_parser.yy"
+  case 713:
+#line 2413 "dhcp4_parser.yy" // lalr1.cc:907
     {
-    ElementPtr flush(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
+    ElementPtr flush(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("flush", flush);
 }
-#line 3751 "dhcp4_parser.cc"
+#line 3864 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
-  case 679:
-#line 2330 "dhcp4_parser.yy"
+  case 714:
+#line 2418 "dhcp4_parser.yy" // lalr1.cc:907
     {
-    ElementPtr maxsize(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
+    ElementPtr maxsize(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("maxsize", maxsize);
 }
-#line 3760 "dhcp4_parser.cc"
+#line 3873 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
-  case 680:
-#line 2335 "dhcp4_parser.yy"
+  case 715:
+#line 2423 "dhcp4_parser.yy" // lalr1.cc:907
     {
-    ElementPtr maxver(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
+    ElementPtr maxver(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("maxver", maxver);
 }
-#line 3769 "dhcp4_parser.cc"
+#line 3882 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
-  case 681:
-#line 2340 "dhcp4_parser.yy"
+  case 716:
+#line 2428 "dhcp4_parser.yy" // lalr1.cc:907
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 3777 "dhcp4_parser.cc"
+#line 3890 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
-  case 682:
-#line 2342 "dhcp4_parser.yy"
+  case 717:
+#line 2430 "dhcp4_parser.yy" // lalr1.cc:907
     {
-    ElementPtr sev(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
+    ElementPtr sev(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("pattern", sev);
     ctx.leave();
 }
-#line 3787 "dhcp4_parser.cc"
+#line 3900 "dhcp4_parser.cc" // lalr1.cc:907
     break;
 
 
-#line 3791 "dhcp4_parser.cc"
-
+#line 3904 "dhcp4_parser.cc" // lalr1.cc:907
             default:
               break;
             }
@@ -3796,7 +3908,6 @@ namespace isc { namespace dhcp {
 #if YY_EXCEPTIONS
       catch (const syntax_error& yyexc)
         {
-          YYCDEBUG << "Caught exception: " << yyexc.what() << '\n';
           error (yyexc);
           YYERROR;
         }
@@ -3811,7 +3922,6 @@ namespace isc { namespace dhcp {
     }
     goto yynewstate;
 
-
   /*--------------------------------------.
   | yyerrlab -- here on detecting error.  |
   `--------------------------------------*/
@@ -3848,18 +3958,18 @@ namespace isc { namespace dhcp {
   | yyerrorlab -- error raised explicitly by YYERROR.  |
   `---------------------------------------------------*/
   yyerrorlab:
-    /* Pacify compilers when the user code never invokes YYERROR and
-       the label yyerrorlab therefore never appears in user code.  */
-    if (false)
-      YYERROR;
 
+    /* Pacify compilers like GCC when the user code never invokes
+       YYERROR and the label yyerrorlab therefore never appears in user
+       code.  */
+    if (false)
+      goto yyerrorlab;
     /* Do not reclaim the symbols of the rule whose action triggered
        this YYERROR.  */
     yypop_ (yylen);
     yylen = 0;
     goto yyerrlab1;
 
-
   /*-------------------------------------------------------------.
   | yyerrlab1 -- common code for both syntax error and YYERROR.  |
   `-------------------------------------------------------------*/
@@ -3900,26 +4010,16 @@ namespace isc { namespace dhcp {
     }
     goto yynewstate;
 
-
-  /*-------------------------------------.
-  | yyacceptlab -- YYACCEPT comes here.  |
-  `-------------------------------------*/
+    // Accept.
   yyacceptlab:
     yyresult = 0;
     goto yyreturn;
 
-
-  /*-----------------------------------.
-  | yyabortlab -- YYABORT comes here.  |
-  `-----------------------------------*/
+    // Abort.
   yyabortlab:
     yyresult = 1;
     goto yyreturn;
 
-
-  /*-----------------------------------------------------.
-  | yyreturn -- parsing is finished, return the result.  |
-  `-----------------------------------------------------*/
   yyreturn:
     if (!yyla.empty ())
       yy_destroy_ ("Cleanup: discarding lookahead", yyla);
@@ -4058,123 +4158,128 @@ namespace isc { namespace dhcp {
   }
 
 
-  const short Dhcp4Parser::yypact_ninf_ = -832;
+  const short Dhcp4Parser::yypact_ninf_ = -896;
 
   const signed char Dhcp4Parser::yytable_ninf_ = -1;
 
   const short
   Dhcp4Parser::yypact_[] =
   {
-     363,  -832,  -832,  -832,  -832,  -832,  -832,  -832,  -832,  -832,
-    -832,  -832,  -832,  -832,  -832,    29,    21,    25,    53,   108,
-     128,   135,   137,   160,   162,   171,   184,   199,   203,   228,
-    -832,  -832,  -832,  -832,  -832,  -832,  -832,  -832,  -832,  -832,
-    -832,  -832,  -832,  -832,  -832,  -832,  -832,  -832,  -832,  -832,
-    -832,  -832,  -832,  -832,  -832,  -832,  -832,  -832,  -832,  -832,
-    -832,  -832,  -832,  -832,  -832,  -832,  -832,  -832,    21,  -123,
-      17,   122,    71,   226,   173,   233,    10,    41,   287,   -50,
-     478,    89,   147,  -832,   254,   275,   225,   285,   296,  -832,
-    -832,  -832,  -832,  -832,   304,  -832,    62,  -832,  -832,  -832,
-    -832,  -832,  -832,  -832,  -832,  -832,   316,   317,   318,  -832,
-    -832,  -832,  -832,  -832,  -832,   326,   327,   328,   352,   353,
-     354,   377,   380,   384,  -832,  -832,  -832,  -832,  -832,  -832,
-    -832,  -832,  -832,  -832,  -832,  -832,  -832,   392,  -832,  -832,
-    -832,  -832,  -832,  -832,  -832,    68,  -832,  -832,  -832,  -832,
-    -832,  -832,  -832,  -832,  -832,  -832,  -832,  -832,  -832,  -832,
-    -832,  -832,  -832,  -832,  -832,  -832,  -832,  -832,  -832,  -832,
-    -832,  -832,  -832,  -832,  -832,  -832,  -832,  -832,  -832,  -832,
-    -832,  -832,  -832,  -832,  -832,  -832,  -832,  -832,  -832,  -832,
-    -832,   395,  -832,    70,  -832,  -832,  -832,  -832,  -832,  -832,
-    -832,  -832,  -832,  -832,  -832,  -832,  -832,   402,  -832,  -832,
-    -832,  -832,  -832,  -832,  -832,  -832,  -832,  -832,  -832,  -832,
-    -832,  -832,    80,  -832,  -832,  -832,  -832,  -832,  -832,  -832,
-    -832,  -832,  -832,  -832,  -832,  -832,  -832,  -832,  -832,  -832,
-    -832,  -832,  -832,  -832,  -832,  -832,  -832,    86,  -832,  -832,
-    -832,  -832,  -832,  -832,  -832,  -832,  -832,  -832,  -832,  -832,
-    -832,  -832,  -832,  -832,   292,   404,  -832,  -832,  -832,  -832,
-    -832,  -832,  -832,  -832,  -832,  -832,  -832,  -832,   401,  -832,
-    -832,   407,  -832,  -832,  -832,   408,  -832,  -832,   405,   412,
-    -832,  -832,  -832,  -832,  -832,  -832,  -832,  -832,  -832,  -832,
-    -832,  -832,  -832,   416,   417,  -832,  -832,  -832,  -832,   411,
-     420,  -832,  -832,  -832,  -832,  -832,  -832,  -832,  -832,  -832,
-    -832,  -832,  -832,   115,  -832,  -832,  -832,   425,  -832,  -832,
-     434,  -832,   454,   455,  -832,  -832,   457,   460,  -832,  -832,
-    -832,  -832,  -832,   116,  -832,  -832,  -832,  -832,  -832,  -832,
-    -832,  -832,  -832,  -832,  -832,  -832,  -832,  -832,  -832,  -832,
-     126,  -832,  -832,  -832,   461,   129,  -832,  -832,  -832,  -832,
-      21,    21,  -832,   291,   463,   464,   466,   467,   477,  -832,
-      17,  -832,   479,   480,   481,   308,   311,   312,   487,   488,
-     489,   490,   491,   492,   321,   322,   323,   330,   331,   324,
-     332,   333,   335,   500,   504,   509,   510,   512,   513,   514,
-     515,   516,   517,   518,   535,   536,   366,   539,   541,   542,
-     543,   544,   545,   122,  -832,   546,   547,   549,   376,    71,
-    -832,   551,   552,   553,   554,   555,   556,   386,   561,   562,
-     563,   226,  -832,   564,   173,  -832,   565,   567,   569,   570,
-     572,   573,   575,   576,  -832,   233,  -832,   577,   579,   409,
-     580,   582,   583,   410,  -832,    41,   585,   413,   414,  -832,
-     287,   589,   590,    90,  -832,   418,   593,   594,   423,   596,
-     426,   428,   614,   615,   442,   444,   622,   623,   478,  -832,
-      89,  -832,   624,   453,   147,  -832,  -832,  -832,   626,   625,
-     627,    21,    21,    21,  -832,   628,   629,   630,  -832,  -832,
-    -832,   456,   458,   465,   631,   632,   636,  -832,  -832,  -832,
-    -832,  -832,  -832,  -832,  -832,  -832,   468,   637,   639,   640,
-     641,   642,   472,   276,   643,   645,   646,   647,   648,  -832,
-     649,   642,   650,   483,   484,   655,  -832,   656,   274,   230,
-    -832,  -832,   493,   494,   495,   657,   496,   497,  -832,   656,
-     498,   658,  -832,   499,  -832,   656,   501,   502,   503,   505,
-     506,   507,   508,  -832,   511,   519,  -832,   520,   521,   522,
-    -832,  -832,   523,  -832,  -832,  -832,   524,    21,  -832,  -832,
-     525,   526,  -832,   527,  -832,  -832,    26,   534,  -832,  -832,
-      -4,   528,  -832,  -832,   659,  -832,  -832,    21,   122,    89,
-    -832,  -832,  -832,   147,    71,   660,  -832,  -832,  -832,    57,
-      57,   672,  -832,   678,   680,   681,   682,  -832,  -832,  -832,
-    -832,  -832,  -832,  -832,  -832,   117,   683,   684,   685,   260,
-     180,  -832,   478,  -832,  -832,   686,  -832,  -832,  -832,  -832,
-    -832,  -832,  -832,  -832,  -832,  -832,  -832,   697,  -832,  -832,
-    -832,  -832,   172,  -832,  -832,  -832,  -832,  -832,  -832,  -832,
-    -832,  -832,  -832,  -832,  -832,  -832,  -832,  -832,  -832,  -832,
-    -832,  -832,  -832,  -832,  -832,  -832,  -832,  -832,  -832,  -832,
-    -832,  -832,  -832,  -832,   672,  -832,   165,   187,   197,   222,
-    -832,   223,  -832,  -832,  -832,  -832,  -832,  -832,   662,   663,
-     701,   702,   703,  -832,  -832,  -832,  -832,   704,   705,   706,
-     707,   708,   709,  -832,   231,  -832,  -832,  -832,  -832,  -832,
-    -832,  -832,  -832,  -832,  -832,  -832,  -832,  -832,  -832,  -832,
-    -832,  -832,  -832,  -832,  -832,  -832,   234,  -832,   710,   651,
-    -832,  -832,   711,   712,  -832,  -832,   713,   715,  -832,  -832,
-     714,   718,  -832,  -832,   716,   720,  -832,  -832,  -832,  -832,
-    -832,  -832,    45,  -832,  -832,  -832,  -832,  -832,  -832,  -832,
-      74,  -832,  -832,   719,   721,  -832,  -832,   722,   723,  -832,
-     725,   726,   727,   728,   729,   730,   264,  -832,  -832,  -832,
-    -832,  -832,  -832,  -832,  -832,  -832,  -832,  -832,  -832,   271,
-    -832,  -832,  -832,   272,  -832,   125,  -832,   560,  -832,   731,
-     724,  -832,  -832,  -832,  -832,   732,   733,  -832,  -832,  -832,
-    -832,   734,   660,  -832,   737,   738,   739,   740,   538,   485,
-     571,   558,   574,   741,   742,   744,   745,   578,   581,   584,
-     586,   587,   588,    57,  -832,  -832,    57,  -832,   672,   226,
-    -832,   678,    41,  -832,   680,   287,  -832,   681,   415,  -832,
-     682,   117,  -832,   142,   683,  -832,   233,  -832,   684,   -50,
-    -832,   685,   591,   592,   595,   597,   598,   599,   260,  -832,
-     747,   748,   180,  -832,  -832,   191,   686,  -832,  -832,   749,
-     750,   173,  -832,   697,   752,  -832,  -832,   601,  -832,   356,
-     602,   603,   604,  -832,  -832,  -832,  -832,  -832,   605,   606,
-     607,   608,  -832,  -832,  -832,  -832,  -832,  -832,  -832,   298,
-    -832,   299,  -832,   751,  -832,   753,  -832,  -832,  -832,  -832,
-    -832,  -832,  -832,  -832,  -832,  -832,  -832,  -832,  -832,  -832,
-    -832,  -832,  -832,  -832,   325,  -832,  -832,  -832,  -832,  -832,
-    -832,  -832,  -832,  -832,  -832,  -832,   754,  -832,  -832,  -832,
-    -832,  -832,  -832,  -832,  -832,  -832,   755,   763,  -832,  -832,
-    -832,  -832,  -832,   761,  -832,   342,  -832,  -832,  -832,  -832,
-    -832,  -832,  -832,  -832,   609,   610,  -832,  -832,   766,  -832,
-    -832,  -832,  -832,  -832,   343,  -832,  -832,  -832,  -832,  -832,
-    -832,   611,   344,  -832,   656,  -832,  -832,  -832,  -832,  -832,
-    -832,  -832,  -832,  -832,  -832,  -832,  -832,  -832,  -832,  -832,
-    -832,  -832,   415,  -832,   768,   612,  -832,   142,  -832,  -832,
-    -832,  -832,   783,   618,   784,   191,  -832,  -832,  -832,  -832,
-    -832,   616,  -832,  -832,   791,  -832,   644,  -832,  -832,   790,
-    -832,  -832,   140,  -832,     7,   790,  -832,  -832,   798,   807,
-     808,  -832,   346,  -832,  -832,  -832,  -832,  -832,  -832,  -832,
-     813,   661,   652,   666,   832,     7,  -832,   670,  -832,  -832,
-    -832,   673,  -832,  -832,  -832
+     479,  -896,  -896,  -896,  -896,  -896,  -896,  -896,  -896,  -896,
+    -896,  -896,  -896,  -896,  -896,    50,    22,    52,    70,    75,
+      81,    96,   106,   110,   132,   138,   153,   219,   226,   255,
+    -896,  -896,  -896,  -896,  -896,  -896,  -896,  -896,  -896,  -896,
+    -896,  -896,  -896,  -896,  -896,  -896,  -896,  -896,  -896,  -896,
+    -896,  -896,  -896,  -896,  -896,  -896,  -896,  -896,  -896,  -896,
+    -896,  -896,  -896,  -896,  -896,  -896,  -896,  -896,    22,  -149,
+      20,   150,    59,   266,    66,   207,   -39,   448,   528,   -71,
+     546,  -111,   125,  -896,    60,    67,    76,   162,   188,  -896,
+    -896,  -896,  -896,  -896,   198,  -896,    48,  -896,  -896,  -896,
+    -896,  -896,  -896,  -896,  -896,  -896,   265,   293,   296,  -896,
+    -896,  -896,  -896,  -896,  -896,   300,   310,   317,   335,   339,
+     352,   385,   386,   387,  -896,   388,   389,   390,  -896,  -896,
+    -896,  -896,  -896,  -896,  -896,  -896,  -896,  -896,  -896,  -896,
+    -896,  -896,  -896,   391,  -896,  -896,  -896,  -896,  -896,  -896,
+    -896,    92,  -896,  -896,  -896,  -896,  -896,  -896,  -896,  -896,
+    -896,  -896,  -896,  -896,  -896,  -896,  -896,  -896,  -896,  -896,
+    -896,  -896,  -896,  -896,  -896,  -896,  -896,  -896,  -896,  -896,
+    -896,  -896,  -896,  -896,  -896,  -896,  -896,  -896,  -896,  -896,
+    -896,  -896,  -896,  -896,  -896,  -896,  -896,  -896,  -896,  -896,
+    -896,  -896,  -896,   392,  -896,    99,  -896,  -896,  -896,  -896,
+    -896,  -896,  -896,  -896,  -896,  -896,  -896,  -896,  -896,   393,
+    -896,  -896,  -896,  -896,  -896,  -896,  -896,  -896,  -896,  -896,
+    -896,  -896,  -896,  -896,  -896,  -896,  -896,  -896,  -896,  -896,
+    -896,  -896,   163,  -896,  -896,  -896,  -896,  -896,  -896,  -896,
+    -896,  -896,  -896,  -896,  -896,  -896,  -896,  -896,  -896,  -896,
+    -896,  -896,  -896,  -896,  -896,  -896,  -896,   184,  -896,  -896,
+    -896,  -896,  -896,  -896,  -896,  -896,  -896,  -896,  -896,  -896,
+    -896,  -896,  -896,  -896,   251,   343,  -896,  -896,  -896,  -896,
+    -896,  -896,  -896,  -896,  -896,  -896,  -896,  -896,   356,  -896,
+    -896,   394,  -896,  -896,  -896,   396,  -896,  -896,   359,   372,
+    -896,  -896,  -896,  -896,  -896,  -896,  -896,  -896,  -896,  -896,
+    -896,  -896,  -896,   397,   399,  -896,  -896,  -896,  -896,   370,
+     401,  -896,  -896,  -896,  -896,  -896,  -896,  -896,  -896,  -896,
+    -896,  -896,  -896,   221,  -896,  -896,  -896,   402,  -896,  -896,
+     403,  -896,   404,   406,  -896,  -896,   407,   408,  -896,  -896,
+    -896,  -896,  -896,  -896,  -896,   222,  -896,  -896,  -896,  -896,
+    -896,  -896,  -896,  -896,  -896,  -896,  -896,  -896,  -896,  -896,
+    -896,  -896,   231,  -896,  -896,  -896,   410,   240,  -896,  -896,
+    -896,  -896,    22,    22,  -896,   235,   417,   418,   420,   421,
+     423,  -896,    20,  -896,   426,   429,   431,   254,   256,   258,
+     432,   435,   440,   446,   449,   450,   273,   274,   277,   278,
+     287,   286,   275,   288,   292,   468,   301,   307,   308,   472,
+     473,   480,   491,   495,   499,   502,   506,   507,   510,   511,
+     513,   519,   520,   521,   314,   522,   524,   527,   532,   533,
+     534,   150,  -896,   537,   538,   539,   361,    59,  -896,   540,
+     542,   543,   544,   553,   554,   350,   562,   563,   564,   266,
+    -896,   565,    66,  -896,   568,   569,   570,   571,   573,   576,
+     577,   581,  -896,   207,  -896,   583,   585,   409,   586,   588,
+     589,   412,  -896,   448,   590,   413,   415,  -896,   528,   598,
+     599,    34,  -896,   430,   600,   601,   433,   609,   439,   441,
+     613,   618,   442,   443,   620,   621,   624,   626,   546,  -896,
+    -111,  -896,   627,   451,   125,  -896,  -896,  -896,   631,   632,
+     633,    22,    22,    22,  -896,   634,   635,   636,  -896,  -896,
+    -896,   481,   482,   483,   653,   654,   660,  -896,  -896,  -896,
+    -896,  -896,  -896,  -896,  -896,  -896,   486,  -896,  -896,  -896,
+     -87,   488,   489,   666,   667,   669,   670,   671,   496,   191,
+     687,   688,   689,   690,   693,  -896,   694,   671,   695,   515,
+     516,   698,  -896,   699,   145,   290,  -896,  -896,   525,   526,
+     529,   700,   530,   531,  -896,   699,   535,   701,  -896,   536,
+    -896,   699,   541,   545,   547,   548,   549,   550,   551,  -896,
+     552,   555,  -896,   556,   557,   558,  -896,  -896,   559,  -896,
+    -896,  -896,   560,    22,  -896,  -896,   561,   566,  -896,   567,
+    -896,  -896,    19,   572,  -896,  -896,   -87,   574,   575,   578,
+    -896,  -896,   708,  -896,  -896,    22,   150,  -111,  -896,  -896,
+    -896,   125,    59,   652,  -896,  -896,  -896,    80,    80,   707,
+    -896,  -896,  -896,  -896,  -896,  -896,  -896,  -896,  -896,   711,
+     713,   714,   716,  -896,  -896,  -896,  -896,  -896,  -896,  -896,
+    -896,   155,   717,   718,   727,    74,   102,  -896,   546,  -896,
+    -896,   728,  -896,  -896,  -896,  -896,  -896,  -896,  -896,  -896,
+    -896,  -896,  -896,   736,  -896,  -896,  -896,  -896,   157,  -896,
+    -896,  -896,  -896,  -896,  -896,  -896,  -896,  -896,  -896,  -896,
+    -896,  -896,  -896,  -896,  -896,  -896,  -896,  -896,  -896,  -896,
+    -896,  -896,  -896,  -896,  -896,  -896,  -896,   707,  -896,   242,
+     246,   250,   252,  -896,   268,  -896,  -896,  -896,  -896,  -896,
+    -896,   740,   741,   742,   745,   746,  -896,  -896,  -896,  -896,
+     747,   748,   749,   750,   753,   754,  -896,   272,  -896,  -896,
+    -896,  -896,  -896,  -896,  -896,  -896,  -896,  -896,  -896,  -896,
+    -896,  -896,  -896,  -896,  -896,  -896,  -896,  -896,  -896,   276,
+    -896,   709,   757,  -896,  -896,   755,   759,  -896,  -896,   758,
+     760,  -896,  -896,   761,   762,  -896,  -896,   763,   765,  -896,
+    -896,  -896,  -896,  -896,  -896,    37,  -896,  -896,  -896,  -896,
+    -896,  -896,  -896,    73,  -896,  -896,   764,   768,  -896,  -896,
+     766,   770,  -896,   771,   772,   773,   774,   775,   776,   298,
+    -896,  -896,  -896,  -896,  -896,  -896,  -896,  -896,  -896,  -896,
+    -896,  -896,   304,  -896,  -896,  -896,   305,  -896,    83,  -896,
+     593,  -896,   777,   778,  -896,  -896,  -896,  -896,   779,   780,
+    -896,  -896,  -896,  -896,   781,   652,  -896,   784,   785,   786,
+     787,   584,   608,   602,   610,   611,   791,   792,   793,   794,
+     617,   619,   622,   623,   616,   625,    80,  -896,  -896,    80,
+    -896,   707,   266,  -896,   711,   448,  -896,   713,   528,  -896,
+     714,   492,  -896,   716,   155,  -896,    63,   717,  -896,   207,
+    -896,   718,   -71,  -896,   727,   628,   629,   630,   637,   638,
+     639,    74,  -896,   798,   799,   102,  -896,  -896,   195,   728,
+    -896,  -896,   800,   805,    66,  -896,   736,   809,  -896,  -896,
+     641,  -896,   348,   642,   643,   644,  -896,  -896,  -896,  -896,
+    -896,   645,   646,   647,   648,  -896,  -896,  -896,  -896,  -896,
+    -896,  -896,   342,  -896,   344,  -896,   801,  -896,   806,  -896,
+    -896,  -896,  -896,  -896,  -896,  -896,  -896,  -896,  -896,  -896,
+    -896,  -896,  -896,  -896,  -896,  -896,  -896,  -896,  -896,  -896,
+    -896,  -896,  -896,  -896,  -896,   360,  -896,  -896,  -896,  -896,
+    -896,  -896,  -896,  -896,  -896,  -896,  -896,   811,  -896,  -896,
+    -896,  -896,  -896,  -896,  -896,  -896,  -896,   808,   814,  -896,
+    -896,  -896,  -896,  -896,   810,  -896,   362,  -896,  -896,  -896,
+    -896,  -896,  -896,  -896,  -896,   649,   650,  -896,  -896,   829,
+    -896,  -896,  -896,  -896,  -896,   363,  -896,  -896,  -896,  -896,
+    -896,  -896,   656,   371,  -896,   699,  -896,  -896,  -896,  -896,
+    -896,  -896,  -896,  -896,  -896,  -896,  -896,  -896,  -896,  -896,
+    -896,  -896,  -896,   492,  -896,   830,   655,  -896,    63,  -896,
+    -896,  -896,  -896,   836,   661,   841,   195,  -896,  -896,  -896,
+    -896,  -896,   673,  -896,  -896,   842,  -896,   674,  -896,  -896,
+     851,  -896,  -896,    93,  -896,   -14,   851,  -896,  -896,   856,
+     857,   859,  -896,   374,  -896,  -896,  -896,  -896,  -896,  -896,
+    -896,   862,   686,   691,   702,   873,   -14,  -896,   712,  -896,
+    -896,  -896,   724,  -896,  -896,  -896
   };
 
   const unsigned short
@@ -4184,156 +4289,162 @@ namespace isc { namespace dhcp {
       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,   141,     9,   286,    11,
-     451,    13,   476,    15,   376,    17,   384,    19,   421,    21,
-     251,    23,   568,    25,   640,    27,   629,    29,    47,    41,
-       0,     0,     0,     0,     0,   478,     0,   386,   423,     0,
+      35,    36,    58,     5,    70,     7,   165,     9,   310,    11,
+     491,    13,   516,    15,   416,    17,   424,    19,   461,    21,
+     275,    23,   608,    25,   675,    27,   664,    29,    47,    41,
+       0,     0,     0,     0,     0,   518,     0,   426,   463,     0,
        0,     0,     0,    49,     0,    48,     0,     0,    42,    68,
-     638,   621,   623,   625,     0,    67,     0,    60,    62,    64,
-      65,    66,    63,   627,   130,   156,     0,     0,     0,   497,
-     499,   501,   154,   163,   165,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   125,   278,   374,   413,   340,   464,
-     466,   333,   229,   525,   468,   243,   262,     0,   551,   564,
-     566,   617,   619,   645,   115,     0,    72,    74,    75,    76,
-      77,    78,   109,   110,   111,    79,   107,    96,    97,    98,
-      82,    83,   104,    84,    85,    86,    90,    91,    80,   108,
-      81,    88,    89,   102,   103,   105,    99,   100,   101,    87,
-      92,    93,    94,    95,   113,   114,   106,   112,   143,   145,
-     149,     0,   140,     0,   132,   134,   135,   136,   137,   138,
-     139,   321,   323,   325,   443,   319,   327,     0,   331,   329,
-     521,   318,   290,   291,   292,   293,   294,   315,   316,   317,
-     305,   306,     0,   288,   297,   310,   311,   312,   298,   300,
-     301,   303,   299,   295,   296,   313,   314,   302,   307,   308,
-     309,   304,   462,   461,   457,   458,   456,     0,   453,   455,
-     459,   460,   519,   507,   509,   513,   511,   517,   515,   503,
-     496,   490,   494,   495,     0,   479,   480,   491,   492,   493,
-     487,   482,   488,   484,   485,   486,   489,   483,     0,   403,
-     209,     0,   407,   405,   410,     0,   399,   400,     0,   387,
-     388,   390,   402,   391,   392,   393,   409,   394,   395,   396,
-     397,   398,   437,     0,     0,   435,   436,   439,   440,     0,
-     424,   425,   427,   428,   429,   430,   431,   432,   433,   434,
-     258,   260,   255,     0,   253,   256,   257,     0,   591,   593,
-       0,   596,     0,     0,   600,   604,     0,     0,   608,   615,
-     589,   587,   588,     0,   570,   572,   573,   574,   575,   576,
-     577,   578,   579,   580,   581,   582,   583,   584,   585,   586,
-       0,   642,   644,   635,     0,     0,   631,   633,   634,    46,
-       0,     0,    39,     0,     0,     0,     0,     0,     0,    57,
-       0,    59,     0,     0,     0,     0,     0,     0,     0,     0,
+     673,   656,   658,   660,     0,    67,     0,    60,    62,    64,
+      65,    66,    63,   662,   154,   180,     0,     0,     0,   537,
+     539,   541,   178,   187,   189,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,   131,     0,     0,     0,   139,   146,
+     148,   302,   414,   453,   372,   504,   506,   365,   253,   565,
+     508,   267,   286,     0,   591,   604,   606,   150,   152,   680,
+     121,     0,    72,    74,    75,    76,    77,    78,   109,   110,
+     111,    79,   107,    96,    97,    98,   115,   116,   117,   118,
+     119,   120,   113,   114,    82,    83,   104,    84,    85,    86,
+      90,    91,    80,   108,    81,    88,    89,   102,   103,   105,
+      99,   100,   101,    87,    92,    93,    94,    95,   106,   112,
+     167,   169,   173,     0,   164,     0,   156,   158,   159,   160,
+     161,   162,   163,   353,   355,   357,   483,   351,   359,     0,
+     363,   361,   561,   350,   314,   315,   316,   317,   318,   339,
+     340,   341,   329,   330,   342,   343,   344,   345,   346,   347,
+     348,   349,     0,   312,   321,   334,   335,   336,   322,   324,
+     325,   327,   323,   319,   320,   337,   338,   326,   331,   332,
+     333,   328,   502,   501,   497,   498,   496,     0,   493,   495,
+     499,   500,   559,   547,   549,   553,   551,   557,   555,   543,
+     536,   530,   534,   535,     0,   519,   520,   531,   532,   533,
+     527,   522,   528,   524,   525,   526,   529,   523,     0,   443,
+     233,     0,   447,   445,   450,     0,   439,   440,     0,   427,
+     428,   430,   442,   431,   432,   433,   449,   434,   435,   436,
+     437,   438,   477,     0,     0,   475,   476,   479,   480,     0,
+     464,   465,   467,   468,   469,   470,   471,   472,   473,   474,
+     282,   284,   279,     0,   277,   280,   281,     0,   644,   631,
+       0,   634,     0,     0,   638,   642,     0,     0,   648,   650,
+     652,   654,   629,   627,   628,     0,   610,   612,   613,   614,
+     615,   616,   617,   618,   619,   624,   620,   621,   622,   623,
+     625,   626,     0,   677,   679,   670,     0,     0,   666,   668,
+     669,    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,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,    71,     0,     0,     0,     0,     0,
-     142,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   287,     0,     0,   452,     0,     0,     0,     0,
-       0,     0,     0,     0,   477,     0,   377,     0,     0,     0,
-       0,     0,     0,     0,   385,     0,     0,     0,     0,   422,
-       0,     0,     0,     0,   252,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,   569,
-       0,   641,     0,     0,     0,   630,    50,    43,     0,     0,
-       0,     0,     0,     0,    61,     0,     0,     0,   127,   128,
-     129,     0,     0,     0,     0,     0,     0,   116,   117,   118,
-     119,   120,   121,   122,   123,   124,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,   550,
-       0,     0,     0,     0,     0,     0,    73,     0,     0,     0,
-     153,   133,     0,     0,     0,     0,     0,     0,   339,     0,
-       0,     0,   289,     0,   454,     0,     0,     0,     0,     0,
-       0,     0,     0,   481,     0,     0,   401,     0,     0,     0,
-     412,   389,     0,   441,   442,   426,     0,     0,   254,   590,
-       0,     0,   595,     0,   598,   599,     0,     0,   606,   607,
-       0,     0,   571,   643,     0,   637,   632,     0,     0,     0,
-     622,   624,   626,     0,     0,     0,   498,   500,   502,     0,
-       0,   167,   126,   280,   378,   415,   342,    40,   465,   467,
-     335,   336,   337,   338,   334,     0,     0,   470,   245,     0,
-       0,   565,     0,   618,   620,     0,    51,   144,   147,   148,
-     146,   151,   152,   150,   322,   324,   326,   445,   320,   328,
-     332,   330,     0,   463,   520,   508,   510,   514,   512,   518,
-     516,   504,   404,   210,   408,   406,   411,   438,   259,   261,
-     592,   594,   597,   602,   603,   601,   605,   610,   611,   612,
-     613,   614,   609,   616,   167,    44,     0,     0,     0,     0,
-     161,     0,   158,   160,   196,   202,   204,   206,     0,     0,
-       0,     0,     0,   218,   220,   222,   224,     0,     0,     0,
-       0,     0,     0,   195,     0,   173,   175,   176,   177,   178,
-     179,   180,   181,   182,   183,   184,   188,   189,   190,   185,
-     191,   192,   193,   186,   187,   194,     0,   171,     0,   168,
-     169,   284,     0,   281,   282,   382,     0,   379,   380,   419,
-       0,   416,   417,   346,     0,   343,   344,   238,   239,   240,
-     241,   242,     0,   231,   233,   234,   235,   236,   237,   529,
-       0,   527,   474,     0,   471,   472,   249,     0,   246,   247,
-       0,     0,     0,     0,     0,     0,     0,   264,   266,   267,
-     268,   269,   270,   271,   560,   562,   559,   557,   558,     0,
-     553,   555,   556,     0,   649,     0,   647,    53,   449,     0,
-     446,   447,   505,   523,   524,     0,     0,    69,   639,   628,
-     131,     0,     0,   157,     0,     0,     0,     0,     0,     0,
+       0,     0,    71,     0,     0,     0,     0,     0,   166,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   155,   164,     0,   166,     0,     0,
-     279,     0,   386,   375,     0,   423,   414,     0,     0,   341,
-       0,     0,   230,   531,     0,   526,   478,   469,     0,     0,
-     244,     0,     0,     0,     0,     0,     0,     0,     0,   263,
-       0,     0,     0,   552,   567,     0,     0,   646,    55,     0,
-      54,     0,   444,     0,     0,   522,   636,     0,   159,     0,
-       0,     0,     0,   208,   211,   212,   213,   214,     0,     0,
-       0,     0,   226,   227,   215,   216,   217,   228,   174,     0,
-     170,     0,   283,     0,   381,     0,   418,   373,   365,   366,
-     367,   353,   354,   370,   371,   372,   356,   357,   350,   351,
-     352,   363,   364,   362,     0,   348,   355,   368,   369,   358,
-     359,   360,   361,   345,   232,   547,     0,   545,   546,   538,
-     539,   543,   544,   540,   541,   542,     0,   532,   533,   535,
-     536,   537,   528,     0,   473,     0,   248,   272,   273,   274,
-     275,   276,   277,   265,     0,     0,   554,   663,     0,   661,
-     659,   653,   657,   658,     0,   651,   655,   656,   654,   648,
-      52,     0,     0,   448,     0,   162,   198,   199,   200,   201,
-     197,   203,   205,   207,   219,   221,   223,   225,   172,   285,
-     383,   420,     0,   347,     0,     0,   530,     0,   475,   250,
-     561,   563,     0,     0,     0,     0,   650,    56,   450,   506,
-     349,     0,   549,   534,     0,   660,     0,   652,   548,     0,
-     662,   667,     0,   665,     0,     0,   664,   676,     0,     0,
-       0,   681,     0,   669,   671,   672,   673,   674,   675,   666,
-       0,     0,     0,     0,     0,     0,   668,     0,   678,   679,
-     680,     0,   670,   677,   682
+     311,     0,     0,   492,     0,     0,     0,     0,     0,     0,
+       0,     0,   517,     0,   417,     0,     0,     0,     0,     0,
+       0,     0,   425,     0,     0,     0,     0,   462,     0,     0,
+       0,     0,   276,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,   609,
+       0,   676,     0,     0,     0,   665,    50,    43,     0,     0,
+       0,     0,     0,     0,    61,     0,     0,     0,   133,   134,
+     135,     0,     0,     0,     0,     0,     0,   122,   123,   124,
+     125,   126,   127,   128,   129,   130,     0,   136,   137,   138,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,   590,     0,     0,     0,     0,
+       0,     0,    73,     0,     0,     0,   177,   157,     0,     0,
+       0,     0,     0,     0,   371,     0,     0,     0,   313,     0,
+     494,     0,     0,     0,     0,     0,     0,     0,     0,   521,
+       0,     0,   441,     0,     0,     0,   452,   429,     0,   481,
+     482,   466,     0,     0,   278,   630,     0,     0,   633,     0,
+     636,   637,     0,     0,   646,   647,     0,     0,     0,     0,
+     611,   678,     0,   672,   667,     0,     0,     0,   657,   659,
+     661,     0,     0,     0,   538,   540,   542,     0,     0,   191,
+     132,   141,   142,   143,   144,   145,   140,   147,   149,   304,
+     418,   455,   374,    40,   505,   507,   367,   368,   369,   370,
+     366,     0,     0,   510,   269,     0,     0,   605,     0,   151,
+     153,     0,    51,   168,   171,   172,   170,   175,   176,   174,
+     354,   356,   358,   485,   352,   360,   364,   362,     0,   503,
+     560,   548,   550,   554,   552,   558,   556,   544,   444,   234,
+     448,   446,   451,   478,   283,   285,   645,   632,   635,   640,
+     641,   639,   643,   649,   651,   653,   655,   191,    44,     0,
+       0,     0,     0,   185,     0,   182,   184,   220,   226,   228,
+     230,     0,     0,     0,     0,     0,   242,   244,   246,   248,
+       0,     0,     0,     0,     0,     0,   219,     0,   197,   199,
+     200,   201,   202,   203,   204,   205,   206,   207,   208,   212,
+     213,   214,   209,   215,   216,   217,   210,   211,   218,     0,
+     195,     0,   192,   193,   308,     0,   305,   306,   422,     0,
+     419,   420,   459,     0,   456,   457,   378,     0,   375,   376,
+     262,   263,   264,   265,   266,     0,   255,   257,   258,   259,
+     260,   261,   569,     0,   567,   514,     0,   511,   512,   273,
+       0,   270,   271,     0,     0,     0,     0,     0,     0,     0,
+     288,   290,   291,   292,   293,   294,   295,   600,   602,   599,
+     597,   598,     0,   593,   595,   596,     0,   684,     0,   682,
+      53,   489,     0,   486,   487,   545,   563,   564,     0,     0,
+      69,   674,   663,   155,     0,     0,   181,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,   179,   188,     0,
+     190,     0,     0,   303,     0,   426,   415,     0,   463,   454,
+       0,     0,   373,     0,     0,   254,   571,     0,   566,   518,
+     509,     0,     0,   268,     0,     0,     0,     0,     0,     0,
+       0,     0,   287,     0,     0,     0,   592,   607,     0,     0,
+     681,    55,     0,    54,     0,   484,     0,     0,   562,   671,
+       0,   183,     0,     0,     0,     0,   232,   235,   236,   237,
+     238,     0,     0,     0,     0,   250,   251,   239,   240,   241,
+     252,   198,     0,   194,     0,   307,     0,   421,     0,   458,
+     413,   397,   398,   399,   385,   386,   402,   403,   404,   388,
+     389,   405,   406,   407,   408,   409,   410,   411,   412,   382,
+     383,   384,   395,   396,   394,     0,   380,   387,   400,   401,
+     390,   391,   392,   393,   377,   256,   587,     0,   585,   586,
+     578,   579,   583,   584,   580,   581,   582,     0,   572,   573,
+     575,   576,   577,   568,     0,   513,     0,   272,   296,   297,
+     298,   299,   300,   301,   289,     0,     0,   594,   698,     0,
+     696,   694,   688,   692,   693,     0,   686,   690,   691,   689,
+     683,    52,     0,     0,   488,     0,   186,   222,   223,   224,
+     225,   221,   227,   229,   231,   243,   245,   247,   249,   196,
+     309,   423,   460,     0,   379,     0,     0,   570,     0,   515,
+     274,   601,   603,     0,     0,     0,     0,   685,    56,   490,
+     546,   381,     0,   589,   574,     0,   695,     0,   687,   588,
+       0,   697,   702,     0,   700,     0,     0,   699,   711,     0,
+       0,     0,   716,     0,   704,   706,   707,   708,   709,   710,
+     701,     0,     0,     0,     0,     0,     0,   703,     0,   713,
+     714,   715,     0,   705,   712,   717
   };
 
   const short
   Dhcp4Parser::yypgoto_[] =
   {
-    -832,  -832,  -832,  -832,  -832,  -832,  -832,  -832,  -832,  -832,
-    -832,  -832,  -832,  -832,  -832,  -832,   -46,  -832,  -491,  -832,
-     306,  -832,  -832,  -832,  -832,  -832,  -832,  -534,  -832,  -832,
-    -832,   -70,  -832,  -832,  -832,   475,  -832,  -832,  -832,  -832,
-     256,   462,   -55,   -54,   -27,   -24,    -9,     6,     9,    11,
-    -832,  -832,  -832,  -832,    12,    19,  -832,  -832,   269,   459,
-    -832,  -832,  -832,  -832,  -832,  -832,  -832,  -832,  -832,  -832,
-    -832,  -832,  -832,  -832,  -832,  -832,    54,  -832,  -832,  -832,
-    -832,  -832,  -832,   195,  -832,    33,  -832,  -607,    39,  -832,
-    -832,  -832,  -832,  -832,  -832,  -832,  -832,  -832,  -832,   -35,
-    -832,  -832,  -832,  -832,  -832,  -832,  -832,  -832,  -832,  -832,
-    -832,  -832,  -832,  -832,  -832,  -832,  -832,  -832,  -832,  -832,
-    -832,  -832,    24,  -832,  -832,  -832,  -832,  -832,  -832,  -832,
-    -832,  -832,    16,  -832,  -832,  -832,    14,   427,  -832,  -832,
-    -832,  -832,  -832,  -832,  -832,    13,  -832,  -832,  -832,  -832,
-    -832,  -832,  -831,  -832,  -832,  -832,    37,  -832,  -832,  -832,
-      40,   469,  -832,  -832,  -832,  -832,  -832,  -832,  -832,  -832,
-    -823,  -832,   -17,  -832,    -5,  -832,    22,  -832,  -832,  -832,
-    -832,  -832,  -832,  -832,    32,  -832,  -832,  -129,   -65,  -832,
-    -832,  -832,  -832,  -832,    42,  -832,  -832,  -832,    43,  -832,
-     439,  -832,   -72,  -832,  -832,  -832,  -832,  -832,   -66,  -832,
-    -832,  -832,  -832,  -832,    -7,  -832,  -832,  -832,    44,  -832,
-    -832,  -832,    47,  -832,   437,  -832,  -832,  -832,  -832,  -832,
-    -832,  -832,  -832,  -832,  -832,  -832,     5,  -832,  -832,  -832,
-       8,   470,  -832,  -832,   -39,  -832,   -19,  -832,   -59,  -832,
-    -832,  -832,    35,  -832,  -832,  -832,    46,  -832,   471,   -58,
-    -832,   -52,  -832,    -1,  -832,   253,  -832,  -832,  -832,  -832,
-    -832,  -832,  -832,  -832,  -832,  -832,  -832,  -832,  -832,  -832,
-    -832,  -832,  -832,  -821,  -832,  -832,  -832,  -832,  -832,    49,
-    -832,  -832,  -832,  -121,  -832,  -832,  -832,  -832,  -832,  -832,
-    -832,  -832,    27,  -832,  -832,  -832,  -832,  -832,  -832,  -832,
-    -832,  -832,  -832,   278,   429,  -832,  -832,  -832,  -832,  -832,
-    -832,  -832,  -832,  -832,  -832,  -832,  -832,  -832,  -832,  -832,
-    -832,  -832,  -832,  -832,  -832,  -832,  -832,   -64,  -832,   -60,
-    -832,  -832,  -832,  -832,  -832,  -832,  -832,  -832,  -832,  -832,
-    -832,   305,   430,  -832,  -832,  -832,  -832,  -832,  -832,  -832,
-     319,   431,   -57,  -832,  -832,    31,  -832,  -832,  -120,  -832,
-    -832,  -832,  -832,  -832,  -832,  -136,  -832,  -832,  -155,  -832,
-    -832,  -832,  -832,  -832,  -832,  -832
+    -896,  -896,  -896,  -896,  -896,  -896,  -896,  -896,  -896,  -896,
+    -896,  -896,  -896,  -896,  -896,  -896,   -44,  -896,  -531,  -896,
+     205,  -896,  -896,  -896,  -896,  -896,  -896,  -556,  -896,  -896,
+    -896,   -70,  -896,  -896,  -896,   487,  -896,  -896,  -896,  -896,
+     244,   444,   -54,   -24,    -5,    -4,    -1,    11,    14,    17,
+    -896,  -896,  -896,  -896,    21,    25,    28,    31,    32,    33,
+    -896,   245,    35,  -896,    36,  -896,    38,  -896,    39,  -896,
+    -896,  -896,   279,   463,  -896,  -896,  -896,  -896,  -896,  -896,
+    -896,  -896,  -896,  -896,  -896,  -896,  -896,  -896,  -896,  -896,
+      78,  -896,  -896,  -896,  -896,  -896,  -896,   211,  -896,    55,
+    -896,  -643,    61,  -896,  -896,  -896,  -896,  -896,  -896,  -896,
+    -896,  -896,  -896,   -36,  -896,  -896,  -896,  -896,  -896,  -896,
+    -896,  -896,  -896,  -896,  -896,  -896,  -896,  -896,  -896,  -896,
+    -896,  -896,  -896,  -896,  -896,  -896,    45,  -896,  -896,  -896,
+    -896,  -896,  -896,  -896,  -896,  -896,    27,  -896,  -896,  -896,
+      40,   457,  -896,  -896,  -896,  -896,  -896,  -896,  -896,    29,
+    -896,  -896,  -896,  -896,  -896,  -896,  -895,  -896,  -896,  -896,
+      57,  -896,  -896,  -896,    62,   494,  -896,  -896,  -896,  -896,
+    -896,  -896,  -896,  -896,  -894,  -896,    41,  -896,    44,  -896,
+      43,  -896,  -896,  -896,  -896,  -896,  -896,  -896,    53,  -896,
+    -896,  -118,   -65,  -896,  -896,  -896,  -896,  -896,    64,  -896,
+    -896,  -896,    65,  -896,   474,  -896,   -72,  -896,  -896,  -896,
+    -896,  -896,   -64,  -896,  -896,  -896,  -896,  -896,   -40,  -896,
+    -896,  -896,    58,  -896,  -896,  -896,    68,  -896,   471,  -896,
+    -896,  -896,  -896,  -896,  -896,  -896,  -896,  -896,  -896,  -896,
+      26,  -896,  -896,  -896,    30,   501,  -896,  -896,   -52,  -896,
+     -20,  -896,   -60,  -896,  -896,  -896,    54,  -896,  -896,  -896,
+      71,  -896,   497,    -8,  -896,    -2,  -896,    10,  -896,   269,
+    -896,  -896,  -896,  -896,  -896,  -896,  -896,  -896,  -896,  -896,
+    -896,  -896,  -896,  -896,  -896,  -896,  -896,  -893,  -896,  -896,
+    -896,  -896,  -896,    69,  -896,  -896,  -896,  -110,  -896,  -896,
+    -896,  -896,  -896,  -896,  -896,  -896,    46,  -896,  -896,  -896,
+    -896,  -896,  -896,  -896,  -896,  -896,  -896,   291,   464,  -896,
+    -896,  -896,  -896,  -896,  -896,  -896,  -896,  -896,  -896,  -896,
+    -896,  -896,  -896,  -896,  -896,  -896,  -896,  -896,  -896,  -896,
+    -896,  -896,  -896,  -896,  -896,  -896,  -896,  -896,  -896,  -896,
+    -896,  -896,  -896,  -896,   332,   460,  -896,  -896,  -896,  -896,
+    -896,  -896,  -896,   340,   469,   -69,  -896,  -896,    56,  -896,
+    -896,  -105,  -896,  -896,  -896,  -896,  -896,  -896,  -124,  -896,
+    -896,  -143,  -896,  -896,  -896,  -896,  -896,  -896,  -896
   };
 
   const short
@@ -4341,454 +4452,477 @@ namespace isc { namespace dhcp {
   {
       -1,    15,    16,    17,    18,    19,    20,    21,    22,    23,
       24,    25,    26,    27,    28,    29,    38,    39,    40,    69,
-     628,    87,    88,    41,    68,    84,    85,   647,   817,   899,
-     900,   723,    43,    70,    96,    97,    98,   374,    45,    71,
-     145,   146,   147,   148,   149,   150,   151,   152,   153,   154,
-     155,   156,   403,   157,   158,   159,   160,   383,   193,   194,
-      47,    72,   195,   425,   196,   426,   650,   197,   427,   653,
-     198,   161,   391,   162,   384,   701,   702,   703,   831,   163,
-     392,   164,   393,   748,   749,   750,   856,   724,   725,   726,
-     834,  1020,   727,   835,   728,   836,   729,   837,   730,   731,
-     458,   732,   733,   734,   735,   736,   737,   738,   739,   843,
-     740,   844,   741,   845,   742,   846,   743,   744,   745,   165,
-     411,   772,   773,   774,   775,   776,   777,   778,   166,   414,
-     787,   788,   789,   879,    61,    79,   323,   324,   325,   471,
-     326,   472,   167,   415,   796,   797,   798,   799,   800,   801,
-     802,   803,   168,   404,   752,   753,   754,   859,    49,    73,
-     222,   223,   224,   435,   225,   431,   226,   432,   227,   433,
-     228,   436,   229,   439,   230,   438,   169,   410,   634,   232,
-     170,   407,   764,   765,   766,   868,   954,   955,   171,   405,
-      55,    76,   756,   757,   758,   862,    57,    77,   288,   289,
-     290,   291,   292,   293,   294,   457,   295,   461,   296,   460,
-     297,   298,   462,   299,   172,   406,   760,   761,   762,   865,
-      59,    78,   309,   310,   311,   312,   313,   466,   314,   315,
-     316,   317,   234,   434,   819,   820,   821,   901,    51,    74,
-     247,   248,   249,   443,   173,   408,   174,   409,   175,   413,
-     783,   784,   785,   876,    53,    75,   264,   265,   266,   176,
-     388,   177,   389,   178,   390,   270,   453,   824,   904,   271,
-     447,   272,   448,   273,   450,   274,   449,   275,   452,   276,
-     451,   277,   446,   241,   440,   825,   179,   412,   780,   781,
-     873,   976,   977,   978,   979,   980,  1034,   981,   180,   181,
-     417,   809,   810,   811,   890,   812,   891,   182,   418,   183,
-     419,    63,    80,   343,   344,   345,   346,   476,   347,   477,
-     348,   349,   479,   350,   351,   352,   482,   685,   353,   483,
-     354,   355,   356,   486,   692,   357,   487,   184,   420,   185,
-     421,    99,   376,   100,   377,   101,   378,   186,   382,    67,
-      82,   365,   366,   367,   492,   368,   102,   375,    65,    81,
-     360,   361,   187,   422,   815,   816,   895,  1004,  1005,  1006,
-    1007,  1044,  1008,  1042,  1062,  1063,  1064,  1072,  1073,  1074,
-    1080,  1075,  1076,  1077,  1078,  1084
+     674,    87,    88,    41,    68,    84,    85,   693,   860,   942,
+     943,   766,    43,    70,    96,    97,    98,   396,    45,    71,
+     151,   152,   153,   154,   155,   156,   157,   158,   159,   160,
+     161,   162,   425,   163,   164,   165,   166,   167,   168,   169,
+     429,   666,   170,   430,   171,   431,   172,   448,   173,   449,
+     174,   405,   205,   206,    47,    72,   207,   453,   208,   454,
+     696,   209,   455,   699,   210,   175,   413,   176,   406,   744,
+     745,   746,   874,   177,   414,   178,   415,   791,   792,   793,
+     899,   767,   768,   769,   877,  1071,   770,   878,   771,   879,
+     772,   880,   773,   774,   486,   775,   776,   777,   778,   779,
+     780,   781,   782,   886,   783,   887,   784,   888,   785,   889,
+     786,   787,   788,   179,   439,   815,   816,   817,   818,   819,
+     820,   821,   180,   442,   830,   831,   832,   922,    61,    79,
+     343,   344,   345,   499,   346,   500,   181,   443,   839,   840,
+     841,   842,   843,   844,   845,   846,   182,   432,   795,   796,
+     797,   902,    49,    73,   242,   243,   244,   463,   245,   459,
+     246,   460,   247,   461,   248,   464,   249,   467,   250,   466,
+     183,   438,   680,   252,   184,   435,   807,   808,   809,   911,
+    1005,  1006,   185,   433,    55,    76,   799,   800,   801,   905,
+      57,    77,   308,   309,   310,   311,   312,   313,   314,   485,
+     315,   489,   316,   488,   317,   318,   490,   319,   186,   434,
+     803,   804,   805,   908,    59,    78,   329,   330,   331,   332,
+     333,   494,   334,   335,   336,   337,   254,   462,   862,   863,
+     864,   944,    51,    74,   267,   268,   269,   471,   187,   436,
+     188,   437,   189,   441,   826,   827,   828,   919,    53,    75,
+     284,   285,   286,   190,   410,   191,   411,   192,   412,   290,
+     481,   867,   947,   291,   475,   292,   476,   293,   478,   294,
+     477,   295,   480,   296,   479,   297,   474,   261,   468,   868,
+     193,   440,   823,   824,   916,  1027,  1028,  1029,  1030,  1031,
+    1085,  1032,   194,   195,   445,   852,   853,   854,   933,   855,
+     934,   196,   446,   197,   447,    63,    80,   365,   366,   367,
+     368,   505,   369,   370,   507,   371,   372,   373,   510,   731,
+     374,   511,   375,   504,   376,   377,   378,   514,   379,   515,
+     380,   516,   381,   517,    99,   398,   100,   399,   101,   400,
+     198,   404,    67,    82,   387,   388,   389,   522,   390,   102,
+     397,    65,    81,   382,   383,   199,   450,   858,   859,   938,
+    1055,  1056,  1057,  1058,  1095,  1059,  1093,  1113,  1114,  1115,
+    1123,  1124,  1125,  1131,  1126,  1127,  1128,  1129,  1135
   };
 
   const unsigned short
   Dhcp4Parser::yytable_[] =
   {
-      95,   144,   192,   211,   243,   260,   307,   286,   305,   322,
-     340,   278,   308,   746,   237,   238,   358,   267,   212,   213,
-     359,   239,    83,   268,   362,   660,    31,    89,    32,    30,
-      33,   664,    42,   199,   235,   250,   262,   949,   300,   318,
-     627,   341,   287,   306,   683,   950,   214,   962,   871,   215,
-     627,   872,    86,   200,   236,   251,   263,   244,   301,   319,
-      44,   342,   320,   321,   216,   380,   233,   246,   261,   245,
-     381,   423,   240,   429,   269,   279,   424,   874,   430,   217,
-     875,   126,   218,   441,   219,   220,   188,   189,   442,   444,
-     190,   704,   221,   191,   445,   231,   705,   706,   707,   708,
-     709,   710,   711,   712,   713,   714,   715,   716,   717,   718,
-     719,   720,   721,   722,   280,    46,   281,   282,   473,   488,
-     283,   284,   285,   474,   489,    94,   129,   130,   896,   490,
-     280,   897,   494,   103,   491,    48,   104,   495,   687,   688,
-     689,   690,    50,  1065,    52,   105,  1066,   106,   107,   108,
-     109,   110,   111,   112,   113,   114,   129,   130,  1067,   363,
-     364,  1068,  1069,  1070,  1071,    90,   684,    54,   423,    56,
-     109,   110,   111,   827,   691,    91,    92,    93,    58,   115,
-     116,   117,   118,   119,   120,   121,   122,   123,   124,   125,
-     490,    60,    94,   126,   127,   828,    34,    35,    36,    37,
-     494,   949,   320,   321,   128,   829,    62,   129,   130,   950,
-      64,   962,   131,   126,   127,   280,    94,   132,   133,   767,
-     768,   769,   770,   134,   771,   429,   832,   129,   130,   371,
-     830,   833,    94,   135,   853,    66,   136,   853,   143,   854,
-     965,   966,   855,   137,   138,   127,    94,   139,   140,   929,
-     651,   652,   107,   108,   109,   110,   111,   242,   129,   130,
-     369,   109,   110,   111,   280,   129,   130,   888,   141,   142,
-     208,   143,   889,   209,   892,   488,   129,   130,   370,   893,
-     894,   259,   822,   115,   116,   117,   118,   119,   120,   121,
-     122,   648,   649,   372,   201,   202,   203,    94,   127,   373,
-     454,   853,   441,   804,   805,   127,  1028,  1029,   379,   204,
-      95,   129,   130,   205,   206,   207,   131,    94,   129,   130,
-     385,   386,   387,   208,   496,   497,   209,   134,  1032,   252,
-     394,   395,   396,  1033,   210,   253,   254,   255,   256,   257,
-     258,   997,   259,   998,   999,   473,  1045,   444,    94,  1085,
-    1039,  1046,  1048,   144,  1086,    94,   397,   398,   399,   192,
-     280,   302,   281,   282,   303,   304,    94,   630,   631,   632,
-     633,   211,   129,   130,   243,   790,   791,   792,   793,   794,
-     795,   400,   237,   238,   401,   260,   212,   213,   402,   239,
-     199,  1016,  1017,  1018,  1019,   286,   416,   267,   307,   428,
-     305,    94,   235,   268,   308,   250,   437,   455,    94,   456,
-     200,   459,   463,   464,   214,   465,   262,   215,   340,   469,
-     467,   468,   236,   470,   358,   251,   300,   244,   359,   475,
-     287,   318,   216,   362,   233,   306,   263,   246,   478,   245,
-     240,   107,   108,   109,   110,   111,   301,   217,   261,   341,
-     218,   319,   219,   220,   269,   610,   611,   612,   480,   481,
-     221,   484,    94,   231,   485,   493,   498,   499,   500,   342,
-     501,   502,   115,   116,   117,   118,   119,   120,   121,   122,
-    1049,   503,   125,   505,   506,   507,   508,   127,   280,   509,
-     510,   511,   512,   513,   514,   515,   516,   517,   518,   519,
-     129,   130,   522,   206,   526,   131,   520,   521,   527,   523,
-     524,   525,   208,   528,   529,   209,   530,   531,   532,   533,
-     534,   535,   536,   210,     1,     2,     3,     4,     5,     6,
-       7,     8,     9,    10,    11,    12,    13,    14,   144,   537,
-     538,   679,   539,   540,   192,   541,   542,   543,   544,   545,
-     547,   548,   362,   549,   550,   552,   553,   554,   555,   556,
-     557,   695,   558,   129,   130,   559,   560,   561,   563,   565,
-     806,   566,   340,   567,   568,   199,   569,   570,   358,   571,
-     572,   574,   359,   575,   577,   576,   578,   579,   580,   582,
-      94,   583,   584,   586,   587,   200,   589,   590,   591,   592,
-     593,   807,   594,   341,   595,   327,   328,   329,   330,   331,
-     332,   333,   334,   335,   336,   337,   338,   339,   596,   597,
-     598,   808,   599,   342,   141,   142,   600,   601,   604,   605,
-     607,   616,   608,   617,   609,   613,   614,   615,   619,   620,
-     618,   621,   623,   622,   624,   625,   626,   629,   635,    32,
-     636,   637,   638,    94,   858,   639,   640,   642,   643,   644,
-     645,   646,   657,   914,   694,   662,   838,   839,   654,   655,
-     656,   658,   659,   661,   663,   686,   665,   666,   667,   747,
-     668,   669,   670,   671,   700,   751,   672,   755,   759,   763,
-     779,   782,   786,   814,   673,   674,   675,   676,   677,   678,
-     680,   681,   682,   693,   818,   840,   841,   842,   847,   848,
-     849,   850,   851,   852,   913,   861,   857,   860,   864,   863,
-     866,   867,   869,   870,   878,   877,   881,   903,   880,   882,
-     883,   884,   885,   886,   887,   898,   916,   902,   907,   906,
-     905,   909,   910,   911,   912,   918,   919,   915,   920,   921,
-     917,   994,   995,  1011,   922,  1010,  1014,   923,  1035,  1030,
-     924,  1031,   925,  1036,   927,   926,  1037,   987,   988,  1038,
-    1043,   989,  1051,   990,   991,   992,  1015,  1021,  1022,  1023,
-    1024,  1025,  1026,  1027,  1040,  1041,  1047,  1054,  1056,   211,
-    1052,  1058,   286,   307,  1055,   305,  1059,  1061,   937,   308,
-     237,   238,  1081,   967,   212,   213,   260,   239,   969,   322,
-     959,  1082,  1083,   938,   939,   973,   960,  1087,   267,  1060,
-     235,   974,   806,   300,   268,  1000,   318,   287,  1089,   957,
-     306,   243,   214,   948,   971,   215,  1091,   262,   968,  1088,
-     236,   940,  1090,   301,   941,  1093,   319,   641,  1094,   958,
-     216,   951,   233,   807,   972,   504,  1002,   263,   240,   942,
-    1001,   956,   250,   952,   696,   217,   970,   961,   218,   261,
-     219,   220,   975,   808,   943,   269,  1003,   944,   221,   945,
-     946,   231,   251,   699,   244,   546,   908,   947,   551,   826,
-     953,   930,   928,   985,   246,   964,   245,   986,   932,   931,
-     588,   993,   963,  1050,   581,   933,   934,   585,  1013,  1012,
-     562,   936,   935,   984,   564,   823,  1053,   602,   698,   996,
-     813,   603,   983,   982,   606,  1057,   573,  1009,   697,  1079,
-    1092,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+      95,   150,   204,   223,   263,   280,   327,   306,   325,   342,
+     362,   298,   384,   257,   328,   789,  1000,  1001,  1013,   224,
+     211,   255,   270,   282,    83,   320,   338,    31,   363,    32,
+      89,    33,    86,   253,   266,   281,   673,   729,   132,   706,
+     914,   307,   326,   915,   149,   710,   673,   340,   341,   225,
+      30,   402,   212,   256,   271,   283,   403,   321,   339,    42,
+     364,   661,   662,   663,   664,   258,   391,   287,   226,   227,
+     392,   259,   228,   288,   200,   201,   917,    44,   202,   918,
+     393,   203,    46,   260,   229,   289,   939,   230,    48,   940,
+     231,   109,   110,   111,   232,   451,  1116,   665,   233,  1117,
+     452,   234,   457,    50,   235,   236,   237,   458,   238,   239,
+      94,   240,   241,    52,   747,   264,   251,    54,   265,   748,
+     749,   750,   751,   752,   753,   754,   755,   756,   757,   758,
+     759,   760,   761,   762,   763,   764,   765,   385,   386,    56,
+     132,   133,   300,  1118,   133,    58,  1119,  1120,  1121,  1122,
+     135,   136,   340,   341,   135,   136,   262,   135,   136,   300,
+      60,   103,   694,   695,   104,   730,   469,  1016,  1017,   220,
+     394,   470,   221,   105,    90,   106,   107,   108,   109,   110,
+     111,   112,   113,   114,    91,    92,    93,   472,  1000,  1001,
+    1013,   395,   473,   135,   136,   833,   834,   835,   836,   837,
+     838,    94,   401,    34,    35,    36,    37,   115,   116,   117,
+     118,   119,   120,   121,   122,   123,   124,   125,   126,   127,
+     128,   129,   130,   131,   501,   518,    62,   132,   133,   502,
+     519,   847,   848,    64,   520,   109,   110,   111,   134,   521,
+      94,   135,   136,   524,    94,   451,   137,    94,   525,   520,
+     870,   138,   139,   524,   871,   457,   972,   140,   872,   482,
+     873,    94,    66,   810,   811,   812,   813,   141,   814,   407,
+     142,   875,   279,   865,   300,   896,   876,   143,   144,   896,
+     897,   145,   146,    94,   898,   133,   135,   136,   676,   677,
+     678,   679,   107,   108,   109,   110,   111,   408,   135,   136,
+     409,   931,   147,   148,   416,   149,   932,   935,   518,   272,
+     697,   698,   936,   937,   417,   273,   274,   275,   276,   277,
+     278,   418,   279,   115,   116,   117,   118,   119,   120,   121,
+     122,    94,    95,   125,   126,   127,   128,   129,   130,   419,
+     213,   214,   215,   420,   133,   896,   483,   469,   526,   527,
+    1079,  1048,  1080,  1049,  1050,   216,   421,   135,   136,   217,
+     218,   219,   137,  1083,   484,   501,  1096,   492,  1084,   220,
+    1090,  1097,   221,   140,   472,   493,    94,  1136,   497,  1099,
+     222,   150,  1137,  1067,  1068,  1069,  1070,   204,    94,   422,
+     423,   424,   426,   427,   428,   444,   456,   465,   487,   223,
+     491,   495,   263,   496,   498,   211,   503,   506,   508,   257,
+     509,   512,   513,   280,   523,   224,   528,   255,   147,   148,
+     270,   529,   530,   306,   531,   532,   327,   533,   325,   253,
+     535,   282,   266,   536,   328,   537,   541,   212,   538,   542,
+     539,   320,   540,   281,   543,   225,   338,    94,   362,   256,
+     544,   384,   271,   545,   546,   547,   548,   307,   553,   549,
+     550,   258,   326,   283,   226,   227,   363,   259,   228,   551,
+     552,   554,   556,   321,   555,   287,   560,   561,   339,   260,
+     229,   288,   299,   230,   562,   557,   231,   648,   649,   650,
+     232,   558,   559,   289,   233,   563,   575,   234,   364,   564,
+     235,   236,   237,   565,   238,   239,   566,   240,   241,  1100,
+     567,   568,   251,   264,   569,   570,   265,   571,   107,   108,
+     109,   110,   111,   572,   573,   574,   576,   300,   577,   301,
+     302,   578,   594,   303,   304,   305,   579,   580,   581,   135,
+     136,   583,   584,   585,   588,   586,   589,   590,   591,   115,
+     116,   117,   118,   119,   120,   121,   122,   592,   593,   125,
+     126,   127,   128,   129,   130,   131,   595,   596,   597,   599,
+     133,   300,   601,   602,   603,   604,   150,   605,   384,   725,
+     606,   607,   204,   135,   136,   608,   218,   610,   137,   611,
+     613,   612,   614,   615,   618,   220,   616,   619,   221,   620,
+     211,   738,   622,   623,   626,   627,   222,   300,   322,   301,
+     302,   323,   324,   629,   625,   628,   849,   632,   362,   135,
+     136,   630,   633,   631,   636,   637,   634,   635,   638,    94,
+     639,   642,   212,   643,   850,   645,   363,   135,   136,   646,
+     647,   651,   652,   653,   147,   148,     1,     2,     3,     4,
+       5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
+     657,   658,   654,   655,   656,   659,   851,   660,   364,   667,
+     668,   669,   670,    94,   671,   672,   743,   675,    32,   347,
+     348,   349,   350,   351,   352,   353,   354,   355,   356,   357,
+     358,   359,   681,   682,   683,   684,   689,   690,   360,   361,
+     685,   686,   688,   691,   692,   703,   700,   701,   708,    94,
+     702,   704,   705,   737,   790,   900,   707,   709,   794,   732,
+     798,   802,   711,   806,   822,   825,   712,    94,   713,   714,
+     715,   716,   717,   718,   829,   857,   719,   720,   721,   722,
+     723,   724,   726,   861,   881,   882,   883,   727,   728,   884,
+     885,   890,   891,   892,   893,   734,   735,   894,   895,   736,
+     901,   903,   904,   907,   906,   910,   956,   909,   913,   912,
+     920,   921,   923,   924,   941,   925,   926,   927,   928,   929,
+     930,   946,   687,   945,   958,   950,   949,   948,   952,   953,
+     954,   955,   957,   960,   959,   961,   962,   963,   964,   965,
+     969,   966,  1045,  1046,   967,   968,  1061,   970,  1062,  1081,
+    1038,  1039,  1040,  1065,  1082,  1086,  1087,  1088,  1089,  1041,
+    1042,  1043,  1066,  1072,  1073,  1074,  1075,  1076,  1077,  1078,
+    1091,  1092,   223,  1094,  1102,   306,   327,  1098,   325,  1103,
+    1105,   980,   257,  1106,   328,  1107,  1018,  1110,   224,   280,
+     255,  1020,   342,   320,  1109,  1111,   338,   981,  1112,  1008,
+    1132,  1133,   253,  1134,  1022,   849,  1138,   282,  1051,   307,
+    1139,  1007,   326,  1140,   263,   999,  1021,  1142,   225,   281,
+    1019,   733,   256,   850,  1141,   321,  1053,   982,   339,   534,
+     739,  1009,   270,  1144,   258,   582,  1023,   226,   227,   283,
+     259,   228,  1052,  1010,   266,  1145,   983,   984,  1024,  1011,
+     985,   287,   260,   229,  1025,   851,   230,   288,  1054,   231,
+     587,  1012,   986,   232,   271,   987,  1026,   233,   988,   289,
+     234,   742,   989,   235,   236,   237,   990,   238,   239,   991,
+     240,   241,   992,   993,   994,   251,   995,   996,   869,   997,
+     998,  1037,  1002,   951,  1004,  1003,   973,   971,   624,  1015,
+    1044,   975,  1036,   598,   974,  1101,  1014,   617,   979,   621,
+     976,   977,  1064,   600,  1063,  1035,   978,   866,  1104,   856,
+     609,  1047,   640,   741,   644,   264,  1033,   740,   265,   641,
+    1034,  1108,  1130,  1143,     0,  1060,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   937,     0,     0,     0,     0,   967,     0,     0,
-       0,     0,   969,     0,   959,  1000,     0,   938,   939,   973,
-     960,     0,     0,     0,     0,   974,     0,     0,     0,     0,
-       0,     0,     0,   957,     0,     0,     0,   948,   971,     0,
-       0,     0,   968,     0,     0,   940,  1002,     0,   941,     0,
-    1001,     0,     0,   958,     0,   951,     0,     0,   972,     0,
-       0,     0,     0,   942,     0,   956,  1003,   952,     0,     0,
-     970,   961,     0,     0,     0,     0,   975,     0,   943,     0,
-       0,   944,     0,   945,   946,     0,     0,     0,     0,     0,
-       0,   947,     0,     0,   953
+       0,     0,     0,   980,     0,     0,     0,     0,  1018,     0,
+       0,     0,     0,  1020,     0,     0,  1051,     0,     0,   981,
+       0,  1008,     0,     0,     0,     0,  1022,     0,     0,     0,
+       0,     0,     0,  1007,  1053,     0,     0,   999,  1021,     0,
+       0,     0,  1019,     0,     0,     0,     0,     0,     0,   982,
+    1052,     0,     0,  1009,     0,     0,     0,     0,  1023,     0,
+       0,     0,     0,     0,     0,  1010,  1054,     0,   983,   984,
+    1024,  1011,   985,     0,     0,     0,  1025,     0,     0,     0,
+       0,     0,     0,  1012,   986,     0,     0,   987,  1026,     0,
+     988,     0,     0,     0,   989,     0,     0,     0,   990,     0,
+       0,   991,     0,     0,   992,   993,   994,     0,   995,   996,
+       0,   997,   998,     0,  1002,     0,  1004,  1003
   };
 
   const short
   Dhcp4Parser::yycheck_[] =
   {
       70,    71,    72,    73,    74,    75,    78,    77,    78,    79,
-      80,    76,    78,   620,    73,    73,    80,    75,    73,    73,
-      80,    73,    68,    75,    81,   559,     5,    10,     7,     0,
-       9,   565,     7,    72,    73,    74,    75,   868,    77,    78,
-     531,    80,    77,    78,    18,   868,    73,   868,     3,    73,
-     541,     6,   175,    72,    73,    74,    75,    74,    77,    78,
-       7,    80,   112,   113,    73,     3,    73,    74,    75,    74,
-       8,     3,    73,     3,    75,    34,     8,     3,     8,    73,
-       6,    71,    73,     3,    73,    73,    15,    16,     8,     3,
-      19,    34,    73,    22,     8,    73,    39,    40,    41,    42,
-      43,    44,    45,    46,    47,    48,    49,    50,    51,    52,
-      53,    54,    55,    56,    73,     7,    75,    76,     3,     3,
-      79,    80,    81,     8,     8,   175,    85,    86,     3,     3,
-      73,     6,     3,    11,     8,     7,    14,     8,   142,   143,
-     144,   145,     7,     3,     7,    23,     6,    25,    26,    27,
-      28,    29,    30,    31,    32,    33,    85,    86,   151,    12,
-      13,   154,   155,   156,   157,   148,   140,     7,     3,     7,
-      28,    29,    30,     8,   178,   158,   159,   160,     7,    57,
-      58,    59,    60,    61,    62,    63,    64,    65,    66,    67,
-       3,     7,   175,    71,    72,     8,   175,   176,   177,   178,
-       3,  1032,   112,   113,    82,     8,     7,    85,    86,  1032,
-       7,  1032,    90,    71,    72,    73,   175,    95,    96,   102,
-     103,   104,   105,   101,   107,     3,     3,    85,    86,     4,
-       8,     8,   175,   111,     3,     7,   114,     3,   149,     8,
-      98,    99,     8,   121,   122,    72,   175,   125,   126,   856,
-      20,    21,    26,    27,    28,    29,    30,    84,    85,    86,
-       6,    28,    29,    30,    73,    85,    86,     3,   146,   147,
-      97,   149,     8,   100,     3,     3,    85,    86,     3,     8,
-       8,   109,   110,    57,    58,    59,    60,    61,    62,    63,
-      64,    17,    18,     8,    68,    69,    70,   175,    72,     3,
-       8,     3,     3,   123,   124,    72,     8,     8,     4,    83,
-     380,    85,    86,    87,    88,    89,    90,   175,    85,    86,
-       4,     4,     4,    97,   370,   371,   100,   101,     3,    96,
-       4,     4,     4,     8,   108,   102,   103,   104,   105,   106,
-     107,   150,   109,   152,   153,     3,     3,     3,   175,     3,
-       8,     8,     8,   423,     8,   175,     4,     4,     4,   429,
-      73,    74,    75,    76,    77,    78,   175,    91,    92,    93,
-      94,   441,    85,    86,   444,   115,   116,   117,   118,   119,
-     120,     4,   441,   441,     4,   455,   441,   441,     4,   441,
-     429,    35,    36,    37,    38,   465,     4,   455,   470,     4,
-     470,   175,   441,   455,   470,   444,     4,     3,   175,     8,
-     429,     4,     4,     8,   441,     3,   455,   441,   488,     8,
-       4,     4,   441,     3,   488,   444,   465,   444,   488,     4,
-     465,   470,   441,   490,   441,   470,   455,   444,     4,   444,
-     441,    26,    27,    28,    29,    30,   465,   441,   455,   488,
-     441,   470,   441,   441,   455,   501,   502,   503,     4,     4,
-     441,     4,   175,   441,     4,     4,   175,     4,     4,   488,
-       4,     4,    57,    58,    59,    60,    61,    62,    63,    64,
-    1014,     4,    67,     4,     4,     4,   178,    72,    73,   178,
-     178,     4,     4,     4,     4,     4,     4,   176,   176,   176,
-      85,    86,   178,    88,     4,    90,   176,   176,     4,   177,
-     177,   176,    97,     4,     4,   100,     4,     4,     4,     4,
-       4,     4,     4,   108,   161,   162,   163,   164,   165,   166,
-     167,   168,   169,   170,   171,   172,   173,   174,   608,     4,
-       4,   587,   176,     4,   614,     4,     4,     4,     4,     4,
-       4,     4,   609,     4,   178,     4,     4,     4,     4,     4,
-       4,   607,   176,    85,    86,     4,     4,     4,     4,     4,
-     640,     4,   642,     4,     4,   614,     4,     4,   642,     4,
-       4,     4,   642,     4,     4,   176,     4,     4,   178,     4,
-     175,   178,   178,     4,     4,   614,   178,     4,     4,   176,
-       4,   640,   176,   642,   176,   127,   128,   129,   130,   131,
-     132,   133,   134,   135,   136,   137,   138,   139,     4,     4,
-     178,   640,   178,   642,   146,   147,     4,     4,     4,   176,
-       4,   175,     7,   175,     7,     7,     7,     7,     7,     7,
-     175,     5,     5,   175,     5,     5,     5,   175,     5,     7,
-       5,     5,     5,   175,     3,     7,     7,     7,   175,   175,
-       5,     5,     5,   178,     5,     7,     4,     4,   175,   175,
-     175,   175,   175,   175,   175,   141,   175,   175,   175,     7,
-     175,   175,   175,   175,    24,     7,   175,     7,     7,     7,
-       7,     7,     7,     7,   175,   175,   175,   175,   175,   175,
-     175,   175,   175,   175,     7,     4,     4,     4,     4,     4,
-       4,     4,     4,     4,   176,     3,     6,     6,     3,     6,
-       6,     3,     6,     3,     3,     6,     3,     3,     6,     4,
-       4,     4,     4,     4,     4,   175,   178,     6,     4,     6,
-       8,     4,     4,     4,     4,     4,     4,   176,     4,     4,
-     176,     4,     4,     3,   176,     6,     4,   176,     4,     8,
-     176,     8,   176,     8,   176,   178,     3,   176,   176,     8,
-       4,   176,     4,   176,   176,   176,   175,   175,   175,   175,
-     175,   175,   175,   175,   175,   175,   175,     4,     4,   859,
-     178,   175,   862,   865,   176,   865,     5,     7,   868,   865,
-     859,   859,     4,   873,   859,   859,   876,   859,   873,   879,
-     868,     4,     4,   868,   868,   873,   868,     4,   876,   175,
-     859,   873,   892,   862,   876,   895,   865,   862,   176,   868,
-     865,   901,   859,   868,   873,   859,     4,   876,   873,   178,
-     859,   868,   176,   862,   868,   175,   865,   541,   175,   868,
-     859,   868,   859,   892,   873,   380,   895,   876,   859,   868,
-     895,   868,   901,   868,   608,   859,   873,   868,   859,   876,
-     859,   859,   873,   892,   868,   876,   895,   868,   859,   868,
-     868,   859,   901,   614,   901,   423,   832,   868,   429,   694,
-     868,   858,   853,   879,   901,   871,   901,   881,   861,   859,
-     473,   888,   870,  1032,   465,   862,   864,   470,   903,   901,
-     441,   867,   865,   878,   444,   662,  1037,   488,   613,   892,
-     642,   490,   876,   874,   494,  1045,   455,   896,   609,  1065,
-    1085,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      80,    76,    81,    73,    78,   658,   911,   911,   911,    73,
+      72,    73,    74,    75,    68,    77,    78,     5,    80,     7,
+      10,     9,   181,    73,    74,    75,   567,    18,    77,   595,
+       3,    77,    78,     6,   155,   601,   577,   118,   119,    73,
+       0,     3,    72,    73,    74,    75,     8,    77,    78,     7,
+      80,   148,   149,   150,   151,    73,     6,    75,    73,    73,
+       3,    73,    73,    75,    15,    16,     3,     7,    19,     6,
+       4,    22,     7,    73,    73,    75,     3,    73,     7,     6,
+      73,    28,    29,    30,    73,     3,     3,   184,    73,     6,
+       8,    73,     3,     7,    73,    73,    73,     8,    73,    73,
+     181,    73,    73,     7,    34,    74,    73,     7,    74,    39,
+      40,    41,    42,    43,    44,    45,    46,    47,    48,    49,
+      50,    51,    52,    53,    54,    55,    56,    12,    13,     7,
+      77,    78,    79,   157,    78,     7,   160,   161,   162,   163,
+      91,    92,   118,   119,    91,    92,    90,    91,    92,    79,
+       7,    11,    17,    18,    14,   146,     3,   104,   105,   103,
+       8,     8,   106,    23,   154,    25,    26,    27,    28,    29,
+      30,    31,    32,    33,   164,   165,   166,     3,  1083,  1083,
+    1083,     3,     8,    91,    92,   121,   122,   123,   124,   125,
+     126,   181,     4,   181,   182,   183,   184,    57,    58,    59,
+      60,    61,    62,    63,    64,    65,    66,    67,    68,    69,
+      70,    71,    72,    73,     3,     3,     7,    77,    78,     8,
+       8,   129,   130,     7,     3,    28,    29,    30,    88,     8,
+     181,    91,    92,     3,   181,     3,    96,   181,     8,     3,
+       8,   101,   102,     3,     8,     3,   899,   107,     8,     8,
+       8,   181,     7,   108,   109,   110,   111,   117,   113,     4,
+     120,     3,   115,   116,    79,     3,     8,   127,   128,     3,
+       8,   131,   132,   181,     8,    78,    91,    92,    97,    98,
+      99,   100,    26,    27,    28,    29,    30,     4,    91,    92,
+       4,     3,   152,   153,     4,   155,     8,     3,     3,   102,
+      20,    21,     8,     8,     4,   108,   109,   110,   111,   112,
+     113,     4,   115,    57,    58,    59,    60,    61,    62,    63,
+      64,   181,   402,    67,    68,    69,    70,    71,    72,     4,
+      74,    75,    76,     4,    78,     3,     3,     3,   392,   393,
+       8,   156,     8,   158,   159,    89,     4,    91,    92,    93,
+      94,    95,    96,     3,     8,     3,     3,     8,     8,   103,
+       8,     8,   106,   107,     3,     3,   181,     3,     8,     8,
+     114,   451,     8,    35,    36,    37,    38,   457,   181,     4,
+       4,     4,     4,     4,     4,     4,     4,     4,     4,   469,
+       4,     4,   472,     4,     3,   457,     4,     4,     4,   469,
+       4,     4,     4,   483,     4,   469,   181,   469,   152,   153,
+     472,     4,     4,   493,     4,     4,   498,     4,   498,   469,
+       4,   483,   472,     4,   498,     4,     4,   457,   184,     4,
+     184,   493,   184,   483,     4,   469,   498,   181,   518,   469,
+       4,   520,   472,     4,     4,   182,   182,   493,   183,   182,
+     182,   469,   498,   483,   469,   469,   518,   469,   469,   182,
+     184,   183,     4,   493,   182,   483,     4,     4,   498,   469,
+     469,   483,    34,   469,     4,   184,   469,   531,   532,   533,
+     469,   184,   184,   483,   469,     4,   182,   469,   518,     4,
+     469,   469,   469,     4,   469,   469,     4,   469,   469,  1065,
+       4,     4,   469,   472,     4,     4,   472,     4,    26,    27,
+      28,    29,    30,     4,     4,     4,     4,    79,     4,    81,
+      82,     4,   182,    85,    86,    87,     4,     4,     4,    91,
+      92,     4,     4,     4,     4,   184,     4,     4,     4,    57,
+      58,    59,    60,    61,    62,    63,    64,     4,     4,    67,
+      68,    69,    70,    71,    72,    73,     4,     4,     4,     4,
+      78,    79,     4,     4,     4,     4,   646,     4,   647,   623,
+       4,     4,   652,    91,    92,     4,    94,     4,    96,     4,
+       4,   182,     4,     4,     4,   103,   184,   184,   106,   184,
+     652,   645,     4,     4,     4,     4,   114,    79,    80,    81,
+      82,    83,    84,     4,   184,   182,   686,     4,   688,    91,
+      92,   182,     4,   182,     4,     4,   184,   184,     4,   181,
+       4,     4,   652,   182,   686,     4,   688,    91,    92,     7,
+       7,     7,     7,     7,   152,   153,   167,   168,   169,   170,
+     171,   172,   173,   174,   175,   176,   177,   178,   179,   180,
+       7,     7,   181,   181,   181,     5,   686,   181,   688,   181,
+     181,     5,     5,   181,     5,     5,    24,   181,     7,   133,
+     134,   135,   136,   137,   138,   139,   140,   141,   142,   143,
+     144,   145,     5,     5,     5,     5,   181,   181,   152,   153,
+       7,     7,     7,     5,     5,     5,   181,   181,     7,   181,
+     181,   181,   181,     5,     7,     6,   181,   181,     7,   147,
+       7,     7,   181,     7,     7,     7,   181,   181,   181,   181,
+     181,   181,   181,   181,     7,     7,   181,   181,   181,   181,
+     181,   181,   181,     7,     4,     4,     4,   181,   181,     4,
+       4,     4,     4,     4,     4,   181,   181,     4,     4,   181,
+       3,     6,     3,     3,     6,     3,   182,     6,     3,     6,
+       6,     3,     6,     3,   181,     4,     4,     4,     4,     4,
+       4,     3,   577,     6,   182,     4,     6,     8,     4,     4,
+       4,     4,   184,   182,   184,     4,     4,     4,     4,   182,
+     184,   182,     4,     4,   182,   182,     6,   182,     3,     8,
+     182,   182,   182,     4,     8,     4,     8,     3,     8,   182,
+     182,   182,   181,   181,   181,   181,   181,   181,   181,   181,
+     181,   181,   902,     4,     4,   905,   908,   181,   908,   184,
+       4,   911,   902,   182,   908,     4,   916,     5,   902,   919,
+     902,   916,   922,   905,   181,   181,   908,   911,     7,   911,
+       4,     4,   902,     4,   916,   935,     4,   919,   938,   905,
+     184,   911,   908,   182,   944,   911,   916,     4,   902,   919,
+     916,   636,   902,   935,   182,   905,   938,   911,   908,   402,
+     646,   911,   944,   181,   902,   451,   916,   902,   902,   919,
+     902,   902,   938,   911,   944,   181,   911,   911,   916,   911,
+     911,   919,   902,   902,   916,   935,   902,   919,   938,   902,
+     457,   911,   911,   902,   944,   911,   916,   902,   911,   919,
+     902,   652,   911,   902,   902,   902,   911,   902,   902,   911,
+     902,   902,   911,   911,   911,   902,   911,   911,   737,   911,
+     911,   924,   911,   875,   911,   911,   901,   896,   501,   914,
+     931,   904,   922,   469,   902,  1083,   913,   493,   910,   498,
+     905,   907,   946,   472,   944,   921,   908,   708,  1088,   688,
+     483,   935,   518,   651,   524,   944,   917,   647,   944,   520,
+     919,  1096,  1116,  1136,    -1,   939,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,  1032,    -1,    -1,    -1,    -1,  1037,    -1,    -1,
-      -1,    -1,  1037,    -1,  1032,  1045,    -1,  1032,  1032,  1037,
-    1032,    -1,    -1,    -1,    -1,  1037,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,  1032,    -1,    -1,    -1,  1032,  1037,    -1,
-      -1,    -1,  1037,    -1,    -1,  1032,  1045,    -1,  1032,    -1,
-    1045,    -1,    -1,  1032,    -1,  1032,    -1,    -1,  1037,    -1,
-      -1,    -1,    -1,  1032,    -1,  1032,  1045,  1032,    -1,    -1,
-    1037,  1032,    -1,    -1,    -1,    -1,  1037,    -1,  1032,    -1,
-      -1,  1032,    -1,  1032,  1032,    -1,    -1,    -1,    -1,    -1,
-      -1,  1032,    -1,    -1,  1032
+      -1,    -1,    -1,  1083,    -1,    -1,    -1,    -1,  1088,    -1,
+      -1,    -1,    -1,  1088,    -1,    -1,  1096,    -1,    -1,  1083,
+      -1,  1083,    -1,    -1,    -1,    -1,  1088,    -1,    -1,    -1,
+      -1,    -1,    -1,  1083,  1096,    -1,    -1,  1083,  1088,    -1,
+      -1,    -1,  1088,    -1,    -1,    -1,    -1,    -1,    -1,  1083,
+    1096,    -1,    -1,  1083,    -1,    -1,    -1,    -1,  1088,    -1,
+      -1,    -1,    -1,    -1,    -1,  1083,  1096,    -1,  1083,  1083,
+    1088,  1083,  1083,    -1,    -1,    -1,  1088,    -1,    -1,    -1,
+      -1,    -1,    -1,  1083,  1083,    -1,    -1,  1083,  1088,    -1,
+    1083,    -1,    -1,    -1,  1083,    -1,    -1,    -1,  1083,    -1,
+      -1,  1083,    -1,    -1,  1083,  1083,  1083,    -1,  1083,  1083,
+      -1,  1083,  1083,    -1,  1083,    -1,  1083,  1083
   };
 
   const unsigned short
   Dhcp4Parser::yystos_[] =
   {
-       0,   161,   162,   163,   164,   165,   166,   167,   168,   169,
-     170,   171,   172,   173,   174,   180,   181,   182,   183,   184,
-     185,   186,   187,   188,   189,   190,   191,   192,   193,   194,
-       0,     5,     7,     9,   175,   176,   177,   178,   195,   196,
-     197,   202,     7,   211,     7,   217,     7,   239,     7,   337,
-       7,   417,     7,   433,     7,   369,     7,   375,     7,   399,
-       7,   313,     7,   490,     7,   537,     7,   528,   203,   198,
-     212,   218,   240,   338,   418,   434,   370,   376,   400,   314,
-     491,   538,   529,   195,   204,   205,   175,   200,   201,    10,
-     148,   158,   159,   160,   175,   210,   213,   214,   215,   520,
-     522,   524,   535,    11,    14,    23,    25,    26,    27,    28,
+       0,   167,   168,   169,   170,   171,   172,   173,   174,   175,
+     176,   177,   178,   179,   180,   186,   187,   188,   189,   190,
+     191,   192,   193,   194,   195,   196,   197,   198,   199,   200,
+       0,     5,     7,     9,   181,   182,   183,   184,   201,   202,
+     203,   208,     7,   217,     7,   223,     7,   259,     7,   357,
+       7,   437,     7,   453,     7,   389,     7,   395,     7,   419,
+       7,   333,     7,   510,     7,   556,     7,   547,   209,   204,
+     218,   224,   260,   358,   438,   454,   390,   396,   420,   334,
+     511,   557,   548,   201,   210,   211,   181,   206,   207,    10,
+     154,   164,   165,   166,   181,   216,   219,   220,   221,   539,
+     541,   543,   554,    11,    14,    23,    25,    26,    27,    28,
       29,    30,    31,    32,    33,    57,    58,    59,    60,    61,
-      62,    63,    64,    65,    66,    67,    71,    72,    82,    85,
-      86,    90,    95,    96,   101,   111,   114,   121,   122,   125,
-     126,   146,   147,   149,   210,   219,   220,   221,   222,   223,
-     224,   225,   226,   227,   228,   229,   230,   232,   233,   234,
-     235,   250,   252,   258,   260,   298,   307,   321,   331,   355,
-     359,   367,   393,   423,   425,   427,   438,   440,   442,   465,
-     477,   478,   486,   488,   516,   518,   526,   541,    15,    16,
-      19,    22,   210,   237,   238,   241,   243,   246,   249,   423,
-     425,    68,    69,    70,    83,    87,    88,    89,    97,   100,
-     108,   210,   221,   222,   223,   224,   225,   226,   227,   228,
-     233,   234,   339,   340,   341,   343,   345,   347,   349,   351,
-     353,   355,   358,   393,   411,   423,   425,   427,   438,   440,
-     442,   462,    84,   210,   351,   353,   393,   419,   420,   421,
-     423,   425,    96,   102,   103,   104,   105,   106,   107,   109,
-     210,   393,   423,   425,   435,   436,   437,   438,   440,   442,
-     444,   448,   450,   452,   454,   456,   458,   460,   367,    34,
-      73,    75,    76,    79,    80,    81,   210,   278,   377,   378,
-     379,   380,   381,   382,   383,   385,   387,   389,   390,   392,
-     423,   425,    74,    77,    78,   210,   278,   381,   387,   401,
-     402,   403,   404,   405,   407,   408,   409,   410,   423,   425,
-     112,   113,   210,   315,   316,   317,   319,   127,   128,   129,
-     130,   131,   132,   133,   134,   135,   136,   137,   138,   139,
-     210,   423,   425,   492,   493,   494,   495,   497,   499,   500,
-     502,   503,   504,   507,   509,   510,   511,   514,   516,   518,
-     539,   540,   541,    12,    13,   530,   531,   532,   534,     6,
-       3,     4,     8,     3,   216,   536,   521,   523,   525,     4,
-       3,     8,   527,   236,   253,     4,     4,     4,   439,   441,
-     443,   251,   259,   261,     4,     4,     4,     4,     4,     4,
-       4,     4,     4,   231,   332,   368,   394,   360,   424,   426,
-     356,   299,   466,   428,   308,   322,     4,   479,   487,   489,
-     517,   519,   542,     3,     8,   242,   244,   247,     4,     3,
-       8,   344,   346,   348,   412,   342,   350,     4,   354,   352,
-     463,     3,     8,   422,     3,     8,   461,   449,   451,   455,
-     453,   459,   457,   445,     8,     3,     8,   384,   279,     4,
-     388,   386,   391,     4,     8,     3,   406,     4,     4,     8,
-       3,   318,   320,     3,     8,     4,   496,   498,     4,   501,
-       4,     4,   505,   508,     4,     4,   512,   515,     3,     8,
-       3,     8,   533,     4,     3,     8,   195,   195,   175,     4,
-       4,     4,     4,     4,   214,     4,     4,     4,   178,   178,
-     178,     4,     4,     4,     4,     4,     4,   176,   176,   176,
-     176,   176,   178,   177,   177,   176,     4,     4,     4,     4,
-       4,     4,     4,     4,     4,     4,     4,     4,     4,   176,
-       4,     4,     4,     4,     4,     4,   220,     4,     4,     4,
-     178,   238,     4,     4,     4,     4,     4,     4,   176,     4,
-       4,     4,   340,     4,   420,     4,     4,     4,     4,     4,
-       4,     4,     4,   437,     4,     4,   176,     4,     4,     4,
-     178,   379,     4,   178,   178,   403,     4,     4,   316,   178,
-       4,     4,   176,     4,   176,   176,     4,     4,   178,   178,
-       4,     4,   493,   540,     4,   176,   531,     4,     7,     7,
-     195,   195,   195,     7,     7,     7,   175,   175,   175,     7,
-       7,     5,   175,     5,     5,     5,     5,   197,   199,   175,
-      91,    92,    93,    94,   357,     5,     5,     5,     5,     7,
-       7,   199,     7,   175,   175,     5,     5,   206,    17,    18,
-     245,    20,    21,   248,   175,   175,   175,     5,   175,   175,
-     206,   175,     7,   175,   206,   175,   175,   175,   175,   175,
-     175,   175,   175,   175,   175,   175,   175,   175,   175,   195,
-     175,   175,   175,    18,   140,   506,   141,   142,   143,   144,
-     145,   178,   513,   175,     5,   195,   219,   539,   530,   237,
-      24,   254,   255,   256,    34,    39,    40,    41,    42,    43,
-      44,    45,    46,    47,    48,    49,    50,    51,    52,    53,
-      54,    55,    56,   210,   266,   267,   268,   271,   273,   275,
-     277,   278,   280,   281,   282,   283,   284,   285,   286,   287,
-     289,   291,   293,   295,   296,   297,   266,     7,   262,   263,
-     264,     7,   333,   334,   335,     7,   371,   372,   373,     7,
-     395,   396,   397,     7,   361,   362,   363,   102,   103,   104,
-     105,   107,   300,   301,   302,   303,   304,   305,   306,     7,
-     467,   468,     7,   429,   430,   431,     7,   309,   310,   311,
-     115,   116,   117,   118,   119,   120,   323,   324,   325,   326,
-     327,   328,   329,   330,   123,   124,   210,   423,   425,   480,
-     481,   482,   484,   492,     7,   543,   544,   207,     7,   413,
-     414,   415,   110,   444,   446,   464,   262,     8,     8,     8,
-       8,   257,     3,     8,   269,   272,   274,   276,     4,     4,
-       4,     4,     4,   288,   290,   292,   294,     4,     4,     4,
-       4,     4,     4,     3,     8,     8,   265,     6,     3,   336,
-       6,     3,   374,     6,     3,   398,     6,     3,   364,     6,
-       3,     3,     6,   469,     3,     6,   432,     6,     3,   312,
-       6,     3,     4,     4,     4,     4,     4,     4,     3,     8,
-     483,   485,     3,     8,     8,   545,     3,     6,   175,   208,
-     209,   416,     6,     3,   447,     8,     6,     4,   255,     4,
-       4,     4,     4,   176,   178,   176,   178,   176,     4,     4,
-       4,     4,   176,   176,   176,   176,   178,   176,   267,   266,
-     264,   339,   335,   377,   373,   401,   397,   210,   221,   222,
-     223,   224,   225,   226,   227,   228,   233,   234,   278,   331,
-     349,   351,   353,   355,   365,   366,   393,   423,   425,   438,
-     440,   442,   462,   363,   301,    98,    99,   210,   278,   367,
-     393,   423,   425,   438,   440,   442,   470,   471,   472,   473,
-     474,   476,   468,   435,   431,   315,   311,   176,   176,   176,
-     176,   176,   176,   324,     4,     4,   481,   150,   152,   153,
-     210,   278,   423,   425,   546,   547,   548,   549,   551,   544,
-       6,     3,   419,   415,     4,   175,    35,    36,    37,    38,
-     270,   175,   175,   175,   175,   175,   175,   175,     8,     8,
-       8,     8,     3,     8,   475,     4,     8,     3,     8,     8,
-     175,   175,   552,     4,   550,     3,     8,   175,     8,   206,
-     366,     4,   178,   472,     4,   176,     4,   547,   175,     5,
-     175,     7,   553,   554,   555,     3,     6,   151,   154,   155,
-     156,   157,   556,   557,   558,   560,   561,   562,   563,   554,
-     559,     4,     4,     4,   564,     3,     8,     4,   178,   176,
-     176,     4,   557,   175,   175
+      62,    63,    64,    65,    66,    67,    68,    69,    70,    71,
+      72,    73,    77,    78,    88,    91,    92,    96,   101,   102,
+     107,   117,   120,   127,   128,   131,   132,   152,   153,   155,
+     216,   225,   226,   227,   228,   229,   230,   231,   232,   233,
+     234,   235,   236,   238,   239,   240,   241,   242,   243,   244,
+     247,   249,   251,   253,   255,   270,   272,   278,   280,   318,
+     327,   341,   351,   375,   379,   387,   413,   443,   445,   447,
+     458,   460,   462,   485,   497,   498,   506,   508,   545,   560,
+      15,    16,    19,    22,   216,   257,   258,   261,   263,   266,
+     269,   443,   445,    74,    75,    76,    89,    93,    94,    95,
+     103,   106,   114,   216,   227,   228,   229,   230,   231,   232,
+     233,   234,   239,   240,   241,   242,   243,   244,   247,   249,
+     251,   253,   359,   360,   361,   363,   365,   367,   369,   371,
+     373,   375,   378,   413,   431,   443,   445,   447,   458,   460,
+     462,   482,    90,   216,   371,   373,   413,   439,   440,   441,
+     443,   445,   102,   108,   109,   110,   111,   112,   113,   115,
+     216,   413,   443,   445,   455,   456,   457,   458,   460,   462,
+     464,   468,   470,   472,   474,   476,   478,   480,   387,    34,
+      79,    81,    82,    85,    86,    87,   216,   298,   397,   398,
+     399,   400,   401,   402,   403,   405,   407,   409,   410,   412,
+     443,   445,    80,    83,    84,   216,   298,   401,   407,   421,
+     422,   423,   424,   425,   427,   428,   429,   430,   443,   445,
+     118,   119,   216,   335,   336,   337,   339,   133,   134,   135,
+     136,   137,   138,   139,   140,   141,   142,   143,   144,   145,
+     152,   153,   216,   443,   445,   512,   513,   514,   515,   517,
+     518,   520,   521,   522,   525,   527,   529,   530,   531,   533,
+     535,   537,   558,   559,   560,    12,    13,   549,   550,   551,
+     553,     6,     3,     4,     8,     3,   222,   555,   540,   542,
+     544,     4,     3,     8,   546,   256,   273,     4,     4,     4,
+     459,   461,   463,   271,   279,   281,     4,     4,     4,     4,
+       4,     4,     4,     4,     4,   237,     4,     4,     4,   245,
+     248,   250,   352,   388,   414,   380,   444,   446,   376,   319,
+     486,   448,   328,   342,     4,   499,   507,   509,   252,   254,
+     561,     3,     8,   262,   264,   267,     4,     3,     8,   364,
+     366,   368,   432,   362,   370,     4,   374,   372,   483,     3,
+       8,   442,     3,     8,   481,   469,   471,   475,   473,   479,
+     477,   465,     8,     3,     8,   404,   299,     4,   408,   406,
+     411,     4,     8,     3,   426,     4,     4,     8,     3,   338,
+     340,     3,     8,     4,   528,   516,     4,   519,     4,     4,
+     523,   526,     4,     4,   532,   534,   536,   538,     3,     8,
+       3,     8,   552,     4,     3,     8,   201,   201,   181,     4,
+       4,     4,     4,     4,   220,     4,     4,     4,   184,   184,
+     184,     4,     4,     4,     4,     4,     4,   182,   182,   182,
+     182,   182,   184,   183,   183,   182,     4,   184,   184,   184,
+       4,     4,     4,     4,     4,     4,     4,     4,     4,     4,
+       4,     4,     4,     4,     4,   182,     4,     4,     4,     4,
+       4,     4,   226,     4,     4,     4,   184,   258,     4,     4,
+       4,     4,     4,     4,   182,     4,     4,     4,   360,     4,
+     440,     4,     4,     4,     4,     4,     4,     4,     4,   457,
+       4,     4,   182,     4,     4,     4,   184,   399,     4,   184,
+     184,   423,     4,     4,   336,   184,     4,     4,   182,     4,
+     182,   182,     4,     4,   184,   184,     4,     4,     4,     4,
+     513,   559,     4,   182,   550,     4,     7,     7,   201,   201,
+     201,     7,     7,     7,   181,   181,   181,     7,     7,     5,
+     181,   148,   149,   150,   151,   184,   246,   181,   181,     5,
+       5,     5,     5,   203,   205,   181,    97,    98,    99,   100,
+     377,     5,     5,     5,     5,     7,     7,   205,     7,   181,
+     181,     5,     5,   212,    17,    18,   265,    20,    21,   268,
+     181,   181,   181,     5,   181,   181,   212,   181,     7,   181,
+     212,   181,   181,   181,   181,   181,   181,   181,   181,   181,
+     181,   181,   181,   181,   181,   201,   181,   181,   181,    18,
+     146,   524,   147,   246,   181,   181,   181,     5,   201,   225,
+     558,   549,   257,    24,   274,   275,   276,    34,    39,    40,
+      41,    42,    43,    44,    45,    46,    47,    48,    49,    50,
+      51,    52,    53,    54,    55,    56,   216,   286,   287,   288,
+     291,   293,   295,   297,   298,   300,   301,   302,   303,   304,
+     305,   306,   307,   309,   311,   313,   315,   316,   317,   286,
+       7,   282,   283,   284,     7,   353,   354,   355,     7,   391,
+     392,   393,     7,   415,   416,   417,     7,   381,   382,   383,
+     108,   109,   110,   111,   113,   320,   321,   322,   323,   324,
+     325,   326,     7,   487,   488,     7,   449,   450,   451,     7,
+     329,   330,   331,   121,   122,   123,   124,   125,   126,   343,
+     344,   345,   346,   347,   348,   349,   350,   129,   130,   216,
+     443,   445,   500,   501,   502,   504,   512,     7,   562,   563,
+     213,     7,   433,   434,   435,   116,   464,   466,   484,   282,
+       8,     8,     8,     8,   277,     3,     8,   289,   292,   294,
+     296,     4,     4,     4,     4,     4,   308,   310,   312,   314,
+       4,     4,     4,     4,     4,     4,     3,     8,     8,   285,
+       6,     3,   356,     6,     3,   394,     6,     3,   418,     6,
+       3,   384,     6,     3,     3,     6,   489,     3,     6,   452,
+       6,     3,   332,     6,     3,     4,     4,     4,     4,     4,
+       4,     3,     8,   503,   505,     3,     8,     8,   564,     3,
+       6,   181,   214,   215,   436,     6,     3,   467,     8,     6,
+       4,   275,     4,     4,     4,     4,   182,   184,   182,   184,
+     182,     4,     4,     4,     4,   182,   182,   182,   182,   184,
+     182,   287,   286,   284,   359,   355,   397,   393,   421,   417,
+     216,   227,   228,   229,   230,   231,   232,   233,   234,   239,
+     240,   241,   242,   243,   244,   247,   249,   251,   253,   298,
+     351,   369,   371,   373,   375,   385,   386,   413,   443,   445,
+     458,   460,   462,   482,   383,   321,   104,   105,   216,   298,
+     387,   413,   443,   445,   458,   460,   462,   490,   491,   492,
+     493,   494,   496,   488,   455,   451,   335,   331,   182,   182,
+     182,   182,   182,   182,   344,     4,     4,   501,   156,   158,
+     159,   216,   298,   443,   445,   565,   566,   567,   568,   570,
+     563,     6,     3,   439,   435,     4,   181,    35,    36,    37,
+      38,   290,   181,   181,   181,   181,   181,   181,   181,     8,
+       8,     8,     8,     3,     8,   495,     4,     8,     3,     8,
+       8,   181,   181,   571,     4,   569,     3,     8,   181,     8,
+     212,   386,     4,   184,   492,     4,   182,     4,   566,   181,
+       5,   181,     7,   572,   573,   574,     3,     6,   157,   160,
+     161,   162,   163,   575,   576,   577,   579,   580,   581,   582,
+     573,   578,     4,     4,     4,   583,     3,     8,     4,   184,
+     182,   182,     4,   576,   181,   181
   };
 
   const unsigned short
   Dhcp4Parser::yyr1_[] =
   {
-       0,   179,   181,   180,   182,   180,   183,   180,   184,   180,
-     185,   180,   186,   180,   187,   180,   188,   180,   189,   180,
-     190,   180,   191,   180,   192,   180,   193,   180,   194,   180,
-     195,   195,   195,   195,   195,   195,   195,   196,   198,   197,
-     199,   200,   200,   201,   201,   203,   202,   204,   204,   205,
-     205,   207,   206,   208,   208,   209,   209,   210,   212,   211,
-     213,   213,   214,   214,   214,   214,   214,   214,   216,   215,
-     218,   217,   219,   219,   220,   220,   220,   220,   220,   220,
-     220,   220,   220,   220,   220,   220,   220,   220,   220,   220,
-     220,   220,   220,   220,   220,   220,   220,   220,   220,   220,
-     220,   220,   220,   220,   220,   220,   220,   220,   220,   220,
-     220,   220,   220,   220,   220,   220,   221,   222,   223,   224,
-     225,   226,   227,   228,   229,   231,   230,   232,   233,   234,
-     236,   235,   237,   237,   238,   238,   238,   238,   238,   238,
-     238,   240,   239,   242,   241,   244,   243,   245,   245,   247,
-     246,   248,   248,   249,   251,   250,   253,   252,   254,   254,
-     255,   257,   256,   259,   258,   261,   260,   262,   262,   263,
-     263,   265,   264,   266,   266,   267,   267,   267,   267,   267,
-     267,   267,   267,   267,   267,   267,   267,   267,   267,   267,
-     267,   267,   267,   267,   267,   267,   269,   268,   270,   270,
-     270,   270,   272,   271,   274,   273,   276,   275,   277,   279,
-     278,   280,   281,   282,   283,   284,   285,   286,   288,   287,
-     290,   289,   292,   291,   294,   293,   295,   296,   297,   299,
-     298,   300,   300,   301,   301,   301,   301,   301,   302,   303,
-     304,   305,   306,   308,   307,   309,   309,   310,   310,   312,
-     311,   314,   313,   315,   315,   315,   316,   316,   318,   317,
-     320,   319,   322,   321,   323,   323,   324,   324,   324,   324,
-     324,   324,   325,   326,   327,   328,   329,   330,   332,   331,
-     333,   333,   334,   334,   336,   335,   338,   337,   339,   339,
-     340,   340,   340,   340,   340,   340,   340,   340,   340,   340,
-     340,   340,   340,   340,   340,   340,   340,   340,   340,   340,
-     340,   340,   340,   340,   340,   340,   340,   340,   340,   342,
-     341,   344,   343,   346,   345,   348,   347,   350,   349,   352,
-     351,   354,   353,   356,   355,   357,   357,   357,   357,   358,
-     360,   359,   361,   361,   362,   362,   364,   363,   365,   365,
-     366,   366,   366,   366,   366,   366,   366,   366,   366,   366,
-     366,   366,   366,   366,   366,   366,   366,   366,   366,   366,
-     366,   366,   366,   366,   368,   367,   370,   369,   371,   371,
-     372,   372,   374,   373,   376,   375,   377,   377,   378,   378,
-     379,   379,   379,   379,   379,   379,   379,   379,   379,   379,
-     380,   381,   382,   384,   383,   386,   385,   388,   387,   389,
-     391,   390,   392,   394,   393,   395,   395,   396,   396,   398,
-     397,   400,   399,   401,   401,   402,   402,   403,   403,   403,
-     403,   403,   403,   403,   403,   403,   404,   406,   405,   407,
-     408,   409,   410,   412,   411,   413,   413,   414,   414,   416,
-     415,   418,   417,   419,   419,   420,   420,   420,   420,   420,
-     420,   420,   422,   421,   424,   423,   426,   425,   428,   427,
-     429,   429,   430,   430,   432,   431,   434,   433,   435,   435,
-     436,   436,   437,   437,   437,   437,   437,   437,   437,   437,
-     437,   437,   437,   437,   437,   437,   437,   439,   438,   441,
-     440,   443,   442,   445,   444,   447,   446,   449,   448,   451,
-     450,   453,   452,   455,   454,   457,   456,   459,   458,   461,
-     460,   463,   462,   464,   464,   466,   465,   467,   467,   469,
-     468,   470,   470,   471,   471,   472,   472,   472,   472,   472,
-     472,   472,   472,   472,   472,   472,   473,   475,   474,   476,
-     477,   479,   478,   480,   480,   481,   481,   481,   481,   481,
-     483,   482,   485,   484,   487,   486,   489,   488,   491,   490,
-     492,   492,   493,   493,   493,   493,   493,   493,   493,   493,
-     493,   493,   493,   493,   493,   493,   493,   493,   493,   493,
-     494,   496,   495,   498,   497,   499,   501,   500,   502,   503,
-     505,   504,   506,   506,   508,   507,   509,   510,   512,   511,
-     513,   513,   513,   513,   513,   515,   514,   517,   516,   519,
-     518,   521,   520,   523,   522,   525,   524,   527,   526,   529,
-     528,   530,   530,   531,   531,   533,   532,   534,   536,   535,
-     538,   537,   539,   539,   540,   542,   541,   543,   543,   545,
-     544,   546,   546,   547,   547,   547,   547,   547,   547,   547,
-     548,   550,   549,   552,   551,   553,   553,   555,   554,   556,
-     556,   557,   557,   557,   557,   557,   559,   558,   560,   561,
-     562,   564,   563
+       0,   185,   187,   186,   188,   186,   189,   186,   190,   186,
+     191,   186,   192,   186,   193,   186,   194,   186,   195,   186,
+     196,   186,   197,   186,   198,   186,   199,   186,   200,   186,
+     201,   201,   201,   201,   201,   201,   201,   202,   204,   203,
+     205,   206,   206,   207,   207,   209,   208,   210,   210,   211,
+     211,   213,   212,   214,   214,   215,   215,   216,   218,   217,
+     219,   219,   220,   220,   220,   220,   220,   220,   222,   221,
+     224,   223,   225,   225,   226,   226,   226,   226,   226,   226,
+     226,   226,   226,   226,   226,   226,   226,   226,   226,   226,
+     226,   226,   226,   226,   226,   226,   226,   226,   226,   226,
+     226,   226,   226,   226,   226,   226,   226,   226,   226,   226,
+     226,   226,   226,   226,   226,   226,   226,   226,   226,   226,
+     226,   226,   227,   228,   229,   230,   231,   232,   233,   234,
+     235,   237,   236,   238,   239,   240,   241,   242,   243,   245,
+     244,   246,   246,   246,   246,   246,   248,   247,   250,   249,
+     252,   251,   254,   253,   256,   255,   257,   257,   258,   258,
+     258,   258,   258,   258,   258,   260,   259,   262,   261,   264,
+     263,   265,   265,   267,   266,   268,   268,   269,   271,   270,
+     273,   272,   274,   274,   275,   277,   276,   279,   278,   281,
+     280,   282,   282,   283,   283,   285,   284,   286,   286,   287,
+     287,   287,   287,   287,   287,   287,   287,   287,   287,   287,
+     287,   287,   287,   287,   287,   287,   287,   287,   287,   287,
+     289,   288,   290,   290,   290,   290,   292,   291,   294,   293,
+     296,   295,   297,   299,   298,   300,   301,   302,   303,   304,
+     305,   306,   308,   307,   310,   309,   312,   311,   314,   313,
+     315,   316,   317,   319,   318,   320,   320,   321,   321,   321,
+     321,   321,   322,   323,   324,   325,   326,   328,   327,   329,
+     329,   330,   330,   332,   331,   334,   333,   335,   335,   335,
+     336,   336,   338,   337,   340,   339,   342,   341,   343,   343,
+     344,   344,   344,   344,   344,   344,   345,   346,   347,   348,
+     349,   350,   352,   351,   353,   353,   354,   354,   356,   355,
+     358,   357,   359,   359,   360,   360,   360,   360,   360,   360,
+     360,   360,   360,   360,   360,   360,   360,   360,   360,   360,
+     360,   360,   360,   360,   360,   360,   360,   360,   360,   360,
+     360,   360,   360,   360,   360,   360,   360,   360,   360,   360,
+     360,   362,   361,   364,   363,   366,   365,   368,   367,   370,
+     369,   372,   371,   374,   373,   376,   375,   377,   377,   377,
+     377,   378,   380,   379,   381,   381,   382,   382,   384,   383,
+     385,   385,   386,   386,   386,   386,   386,   386,   386,   386,
+     386,   386,   386,   386,   386,   386,   386,   386,   386,   386,
+     386,   386,   386,   386,   386,   386,   386,   386,   386,   386,
+     386,   386,   386,   386,   388,   387,   390,   389,   391,   391,
+     392,   392,   394,   393,   396,   395,   397,   397,   398,   398,
+     399,   399,   399,   399,   399,   399,   399,   399,   399,   399,
+     400,   401,   402,   404,   403,   406,   405,   408,   407,   409,
+     411,   410,   412,   414,   413,   415,   415,   416,   416,   418,
+     417,   420,   419,   421,   421,   422,   422,   423,   423,   423,
+     423,   423,   423,   423,   423,   423,   424,   426,   425,   427,
+     428,   429,   430,   432,   431,   433,   433,   434,   434,   436,
+     435,   438,   437,   439,   439,   440,   440,   440,   440,   440,
+     440,   440,   442,   441,   444,   443,   446,   445,   448,   447,
+     449,   449,   450,   450,   452,   451,   454,   453,   455,   455,
+     456,   456,   457,   457,   457,   457,   457,   457,   457,   457,
+     457,   457,   457,   457,   457,   457,   457,   459,   458,   461,
+     460,   463,   462,   465,   464,   467,   466,   469,   468,   471,
+     470,   473,   472,   475,   474,   477,   476,   479,   478,   481,
+     480,   483,   482,   484,   484,   486,   485,   487,   487,   489,
+     488,   490,   490,   491,   491,   492,   492,   492,   492,   492,
+     492,   492,   492,   492,   492,   492,   493,   495,   494,   496,
+     497,   499,   498,   500,   500,   501,   501,   501,   501,   501,
+     503,   502,   505,   504,   507,   506,   509,   508,   511,   510,
+     512,   512,   513,   513,   513,   513,   513,   513,   513,   513,
+     513,   513,   513,   513,   513,   513,   513,   513,   513,   513,
+     514,   516,   515,   517,   519,   518,   520,   521,   523,   522,
+     524,   524,   526,   525,   528,   527,   529,   530,   532,   531,
+     534,   533,   536,   535,   538,   537,   540,   539,   542,   541,
+     544,   543,   546,   545,   548,   547,   549,   549,   550,   550,
+     552,   551,   553,   555,   554,   557,   556,   558,   558,   559,
+     561,   560,   562,   562,   564,   563,   565,   565,   566,   566,
+     566,   566,   566,   566,   566,   567,   569,   568,   571,   570,
+     572,   572,   574,   573,   575,   575,   576,   576,   576,   576,
+     576,   578,   577,   579,   580,   581,   583,   582
   };
 
   const unsigned char
@@ -4805,30 +4939,34 @@ namespace isc { namespace dhcp {
        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,     3,     3,     3,     3,     3,     3,     3,     3,
+       3,     0,     4,     3,     3,     3,     3,     3,     3,     0,
+       4,     1,     1,     1,     1,     1,     0,     4,     0,     4,
+       0,     4,     0,     4,     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,     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,     0,     4,     0,     4,
+       3,     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,     3,     3,     3,     0,     4,     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,
+       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,
-       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,     0,     4,     0,     4,     3,     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,
        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
-       1,     1,     1,     1,     1,     1,     1,     1,     1,     0,
-       4,     0,     4,     0,     4,     0,     4,     0,     4,     0,
-       4,     0,     4,     0,     4,     1,     1,     1,     1,     3,
-       0,     6,     0,     1,     1,     3,     0,     4,     1,     3,
+       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,     1,     1,
        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
        1,     1,     1,     1,     0,     6,     0,     4,     0,     1,
@@ -4853,16 +4991,15 @@ namespace isc { namespace dhcp {
        0,     4,     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,
-       3,     0,     4,     0,     4,     3,     0,     4,     3,     3,
-       0,     4,     1,     1,     0,     4,     3,     3,     0,     4,
-       1,     1,     1,     1,     1,     0,     4,     0,     4,     0,
-       4,     0,     4,     0,     4,     0,     4,     0,     6,     0,
-       4,     1,     3,     1,     1,     0,     6,     3,     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,     1,     0,     4,     3,     3,
-       3,     0,     4
+       3,     0,     4,     3,     0,     4,     3,     3,     0,     4,
+       1,     1,     0,     4,     0,     4,     3,     3,     0,     4,
+       0,     4,     0,     4,     0,     4,     0,     4,     0,     4,
+       0,     4,     0,     6,     0,     4,     1,     3,     1,     1,
+       0,     6,     3,     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,
+       1,     0,     4,     3,     3,     3,     0,     4
   };
 
 
@@ -4891,14 +5028,17 @@ namespace isc { namespace dhcp {
   "\"min-valid-lifetime\"", "\"max-valid-lifetime\"", "\"renew-timer\"",
   "\"rebind-timer\"", "\"calculate-tee-times\"", "\"t1-percent\"",
   "\"t2-percent\"", "\"decline-probation-period\"", "\"server-tag\"",
-  "\"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\"", "\"out-of-pool\"", "\"global\"",
-  "\"all\"", "\"host-reservation-identifiers\"", "\"client-classes\"",
+  "\"ddns-send-updates\"", "\"ddns-override-no-update\"",
+  "\"ddns-override-client-update\"", "\"ddns-replace-client-name\"",
+  "\"ddns-generated-prefix\"", "\"ddns-qualifying-suffix\"", "\"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\"",
+  "\"out-of-pool\"", "\"global\"", "\"all\"",
+  "\"host-reservation-identifiers\"", "\"client-classes\"",
   "\"require-client-classes\"", "\"test\"", "\"only-if-required\"",
   "\"client-class\"", "\"reservations\"", "\"duid\"", "\"hw-address\"",
   "\"circuit-id\"", "\"client-id\"", "\"hostname\"", "\"flex-id\"",
@@ -4934,161 +5074,169 @@ namespace isc { namespace dhcp {
   "min_valid_lifetime", "max_valid_lifetime", "renew_timer",
   "rebind_timer", "calculate_tee_times", "t1_percent", "t2_percent",
   "decline_probation_period", "server_tag", "$@21", "echo_client_id",
-  "match_client_id", "authoritative", "interfaces_config", "$@22",
-  "interfaces_config_params", "interfaces_config_param", "sub_interfaces4",
-  "$@23", "interfaces_list", "$@24", "dhcp_socket_type", "$@25",
-  "socket_type", "outbound_interface", "$@26", "outbound_interface_value",
-  "re_detect", "lease_database", "$@27", "sanity_checks", "$@28",
-  "sanity_checks_params", "sanity_checks_param", "lease_checks", "$@29",
-  "hosts_database", "$@30", "hosts_databases", "$@31", "database_list",
-  "not_empty_database_list", "database", "$@32", "database_map_params",
-  "database_map_param", "database_type", "$@33", "db_type", "user", "$@34",
-  "password", "$@35", "host", "$@36", "port", "name", "$@37", "persist",
-  "lfc_interval", "readonly", "connect_timeout", "request_timeout",
-  "tcp_keepalive", "tcp_nodelay", "contact_points", "$@38", "keyspace",
-  "$@39", "consistency", "$@40", "serial_consistency", "$@41",
+  "match_client_id", "authoritative", "ddns_send_updates",
+  "ddns_override_no_update", "ddns_override_client_update",
+  "ddns_replace_client_name", "$@22", "ddns_replace_client_name_value",
+  "ddns_generated_prefix", "$@23", "ddns_qualifying_suffix", "$@24",
+  "hostname_char_set", "$@25", "hostname_char_replacement", "$@26",
+  "interfaces_config", "$@27", "interfaces_config_params",
+  "interfaces_config_param", "sub_interfaces4", "$@28", "interfaces_list",
+  "$@29", "dhcp_socket_type", "$@30", "socket_type", "outbound_interface",
+  "$@31", "outbound_interface_value", "re_detect", "lease_database",
+  "$@32", "sanity_checks", "$@33", "sanity_checks_params",
+  "sanity_checks_param", "lease_checks", "$@34", "hosts_database", "$@35",
+  "hosts_databases", "$@36", "database_list", "not_empty_database_list",
+  "database", "$@37", "database_map_params", "database_map_param",
+  "database_type", "$@38", "db_type", "user", "$@39", "password", "$@40",
+  "host", "$@41", "port", "name", "$@42", "persist", "lfc_interval",
+  "readonly", "connect_timeout", "request_timeout", "tcp_keepalive",
+  "tcp_nodelay", "contact_points", "$@43", "keyspace", "$@44",
+  "consistency", "$@45", "serial_consistency", "$@46",
   "max_reconnect_tries", "reconnect_wait_time", "max_row_errors",
-  "host_reservation_identifiers", "$@42",
+  "host_reservation_identifiers", "$@47",
   "host_reservation_identifiers_list", "host_reservation_identifier",
   "duid_id", "hw_address_id", "circuit_id", "client_id", "flex_id",
-  "hooks_libraries", "$@43", "hooks_libraries_list",
-  "not_empty_hooks_libraries_list", "hooks_library", "$@44",
-  "sub_hooks_library", "$@45", "hooks_params", "hooks_param", "library",
-  "$@46", "parameters", "$@47", "expired_leases_processing", "$@48",
+  "hooks_libraries", "$@48", "hooks_libraries_list",
+  "not_empty_hooks_libraries_list", "hooks_library", "$@49",
+  "sub_hooks_library", "$@50", "hooks_params", "hooks_param", "library",
+  "$@51", "parameters", "$@52", "expired_leases_processing", "$@53",
   "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", "$@49",
-  "subnet4_list_content", "not_empty_subnet4_list", "subnet4", "$@50",
-  "sub_subnet4", "$@51", "subnet4_params", "subnet4_param", "subnet",
-  "$@52", "subnet_4o6_interface", "$@53", "subnet_4o6_interface_id",
-  "$@54", "subnet_4o6_subnet", "$@55", "interface", "$@56", "client_class",
-  "$@57", "require_client_classes", "$@58", "reservation_mode", "$@59",
-  "hr_mode", "id", "shared_networks", "$@60", "shared_networks_content",
-  "shared_networks_list", "shared_network", "$@61",
+  "unwarned_reclaim_cycles", "subnet4_list", "$@54",
+  "subnet4_list_content", "not_empty_subnet4_list", "subnet4", "$@55",
+  "sub_subnet4", "$@56", "subnet4_params", "subnet4_param", "subnet",
+  "$@57", "subnet_4o6_interface", "$@58", "subnet_4o6_interface_id",
+  "$@59", "subnet_4o6_subnet", "$@60", "interface", "$@61", "client_class",
+  "$@62", "require_client_classes", "$@63", "reservation_mode", "$@64",
+  "hr_mode", "id", "shared_networks", "$@65", "shared_networks_content",
+  "shared_networks_list", "shared_network", "$@66",
   "shared_network_params", "shared_network_param", "option_def_list",
-  "$@62", "sub_option_def_list", "$@63", "option_def_list_content",
-  "not_empty_option_def_list", "option_def_entry", "$@64",
-  "sub_option_def", "$@65", "option_def_params",
+  "$@67", "sub_option_def_list", "$@68", "option_def_list_content",
+  "not_empty_option_def_list", "option_def_entry", "$@69",
+  "sub_option_def", "$@70", "option_def_params",
   "not_empty_option_def_params", "option_def_param", "option_def_name",
-  "code", "option_def_code", "option_def_type", "$@66",
-  "option_def_record_types", "$@67", "space", "$@68", "option_def_space",
-  "option_def_encapsulate", "$@69", "option_def_array", "option_data_list",
-  "$@70", "option_data_list_content", "not_empty_option_data_list",
-  "option_data_entry", "$@71", "sub_option_data", "$@72",
+  "code", "option_def_code", "option_def_type", "$@71",
+  "option_def_record_types", "$@72", "space", "$@73", "option_def_space",
+  "option_def_encapsulate", "$@74", "option_def_array", "option_data_list",
+  "$@75", "option_data_list_content", "not_empty_option_data_list",
+  "option_data_entry", "$@76", "sub_option_data", "$@77",
   "option_data_params", "not_empty_option_data_params",
-  "option_data_param", "option_data_name", "option_data_data", "$@73",
+  "option_data_param", "option_data_name", "option_data_data", "$@78",
   "option_data_code", "option_data_space", "option_data_csv_format",
-  "option_data_always_send", "pools_list", "$@74", "pools_list_content",
-  "not_empty_pools_list", "pool_list_entry", "$@75", "sub_pool4", "$@76",
-  "pool_params", "pool_param", "pool_entry", "$@77", "user_context",
-  "$@78", "comment", "$@79", "reservations", "$@80", "reservations_list",
-  "not_empty_reservations_list", "reservation", "$@81", "sub_reservation",
-  "$@82", "reservation_params", "not_empty_reservation_params",
-  "reservation_param", "next_server", "$@83", "server_hostname", "$@84",
-  "boot_file_name", "$@85", "ip_address", "$@86", "ip_addresses", "$@87",
-  "duid", "$@88", "hw_address", "$@89", "client_id_value", "$@90",
-  "circuit_id_value", "$@91", "flex_id_value", "$@92", "hostname", "$@93",
-  "reservation_client_classes", "$@94", "relay", "$@95", "relay_map",
-  "client_classes", "$@96", "client_classes_list", "client_class_entry",
-  "$@97", "client_class_params", "not_empty_client_class_params",
-  "client_class_param", "client_class_name", "client_class_test", "$@98",
-  "only_if_required", "dhcp4o6_port", "control_socket", "$@99",
+  "option_data_always_send", "pools_list", "$@79", "pools_list_content",
+  "not_empty_pools_list", "pool_list_entry", "$@80", "sub_pool4", "$@81",
+  "pool_params", "pool_param", "pool_entry", "$@82", "user_context",
+  "$@83", "comment", "$@84", "reservations", "$@85", "reservations_list",
+  "not_empty_reservations_list", "reservation", "$@86", "sub_reservation",
+  "$@87", "reservation_params", "not_empty_reservation_params",
+  "reservation_param", "next_server", "$@88", "server_hostname", "$@89",
+  "boot_file_name", "$@90", "ip_address", "$@91", "ip_addresses", "$@92",
+  "duid", "$@93", "hw_address", "$@94", "client_id_value", "$@95",
+  "circuit_id_value", "$@96", "flex_id_value", "$@97", "hostname", "$@98",
+  "reservation_client_classes", "$@99", "relay", "$@100", "relay_map",
+  "client_classes", "$@101", "client_classes_list", "client_class_entry",
+  "$@102", "client_class_params", "not_empty_client_class_params",
+  "client_class_param", "client_class_name", "client_class_test", "$@103",
+  "only_if_required", "dhcp4o6_port", "control_socket", "$@104",
   "control_socket_params", "control_socket_param", "control_socket_type",
-  "$@100", "control_socket_name", "$@101", "dhcp_queue_control", "$@102",
-  "dhcp_ddns", "$@103", "sub_dhcp_ddns", "$@104", "dhcp_ddns_params",
-  "dhcp_ddns_param", "enable_updates", "qualifying_suffix", "$@105",
-  "server_ip", "$@106", "server_port", "sender_ip", "$@107", "sender_port",
-  "max_queue_size", "ncr_protocol", "$@108", "ncr_protocol_value",
-  "ncr_format", "$@109", "override_no_update", "override_client_update",
-  "replace_client_name", "$@110", "replace_client_name_value",
-  "generated_prefix", "$@111", "hostname_char_set", "$@112",
-  "hostname_char_replacement", "$@113", "dhcp6_json_object", "$@114",
-  "dhcpddns_json_object", "$@115", "control_agent_json_object", "$@116",
-  "config_control", "$@117", "sub_config_control", "$@118",
+  "$@105", "control_socket_name", "$@106", "dhcp_queue_control", "$@107",
+  "dhcp_ddns", "$@108", "sub_dhcp_ddns", "$@109", "dhcp_ddns_params",
+  "dhcp_ddns_param", "enable_updates", "server_ip", "$@110", "server_port",
+  "sender_ip", "$@111", "sender_port", "max_queue_size", "ncr_protocol",
+  "$@112", "ncr_protocol_value", "ncr_format", "$@113",
+  "dep_qualifying_suffix", "$@114", "dep_override_no_update",
+  "dep_override_client_update", "dep_replace_client_name", "$@115",
+  "dep_generated_prefix", "$@116", "dep_hostname_char_set", "$@117",
+  "dep_hostname_char_replacement", "$@118", "dhcp6_json_object", "$@119",
+  "dhcpddns_json_object", "$@120", "control_agent_json_object", "$@121",
+  "config_control", "$@122", "sub_config_control", "$@123",
   "config_control_params", "config_control_param", "config_databases",
-  "$@119", "config_fetch_wait_time", "logging_object", "$@120",
-  "sub_logging", "$@121", "logging_params", "logging_param", "loggers",
-  "$@122", "loggers_entries", "logger_entry", "$@123", "logger_params",
-  "logger_param", "debuglevel", "severity", "$@124", "output_options_list",
-  "$@125", "output_options_list_content", "output_entry", "$@126",
-  "output_params_list", "output_params", "output", "$@127", "flush",
-  "maxsize", "maxver", "pattern", "$@128", YY_NULLPTR
+  "$@124", "config_fetch_wait_time", "logging_object", "$@125",
+  "sub_logging", "$@126", "logging_params", "logging_param", "loggers",
+  "$@127", "loggers_entries", "logger_entry", "$@128", "logger_params",
+  "logger_param", "debuglevel", "severity", "$@129", "output_options_list",
+  "$@130", "output_options_list_content", "output_entry", "$@131",
+  "output_params_list", "output_params", "output", "$@132", "flush",
+  "maxsize", "maxver", "pattern", "$@133", YY_NULLPTR
   };
 
 #if PARSER4_DEBUG
   const unsigned short
   Dhcp4Parser::yyrline_[] =
   {
-       0,   266,   266,   266,   267,   267,   268,   268,   269,   269,
-     270,   270,   271,   271,   272,   272,   273,   273,   274,   274,
-     275,   275,   276,   276,   277,   277,   278,   278,   279,   279,
-     287,   288,   289,   290,   291,   292,   293,   296,   301,   301,
-     312,   315,   316,   319,   323,   330,   330,   337,   338,   341,
-     345,   352,   352,   359,   360,   363,   367,   378,   388,   388,
-     404,   405,   409,   410,   411,   412,   413,   414,   417,   417,
-     432,   432,   441,   442,   447,   448,   449,   450,   451,   452,
-     453,   454,   455,   456,   457,   458,   459,   460,   461,   462,
-     463,   464,   465,   466,   467,   468,   469,   470,   471,   472,
-     473,   474,   475,   476,   477,   478,   479,   480,   481,   482,
-     483,   484,   485,   486,   487,   488,   491,   496,   501,   506,
-     511,   516,   521,   526,   531,   536,   536,   544,   549,   554,
-     560,   560,   571,   572,   575,   576,   577,   578,   579,   580,
-     581,   584,   584,   593,   593,   603,   603,   610,   611,   614,
-     614,   621,   623,   627,   633,   633,   645,   645,   655,   656,
-     658,   660,   660,   678,   678,   690,   690,   700,   701,   704,
-     705,   708,   708,   718,   719,   722,   723,   724,   725,   726,
-     727,   728,   729,   730,   731,   732,   733,   734,   735,   736,
-     737,   738,   739,   740,   741,   742,   745,   745,   752,   753,
-     754,   755,   758,   758,   766,   766,   774,   774,   782,   787,
-     787,   795,   800,   805,   810,   815,   820,   825,   830,   830,
-     838,   838,   846,   846,   854,   854,   862,   867,   872,   878,
-     878,   888,   889,   892,   893,   894,   895,   896,   899,   904,
-     909,   914,   919,   924,   924,   934,   935,   938,   939,   942,
-     942,   952,   952,   962,   963,   964,   967,   968,   971,   971,
-     979,   979,   987,   987,   998,   999,  1002,  1003,  1004,  1005,
-    1006,  1007,  1010,  1015,  1020,  1025,  1030,  1035,  1043,  1043,
-    1056,  1057,  1060,  1061,  1068,  1068,  1094,  1094,  1105,  1106,
-    1110,  1111,  1112,  1113,  1114,  1115,  1116,  1117,  1118,  1119,
-    1120,  1121,  1122,  1123,  1124,  1125,  1126,  1127,  1128,  1129,
-    1130,  1131,  1132,  1133,  1134,  1135,  1136,  1137,  1138,  1141,
-    1141,  1149,  1149,  1157,  1157,  1165,  1165,  1173,  1173,  1181,
-    1181,  1189,  1189,  1199,  1199,  1206,  1207,  1208,  1209,  1212,
-    1219,  1219,  1230,  1231,  1235,  1236,  1239,  1239,  1247,  1248,
-    1251,  1252,  1253,  1254,  1255,  1256,  1257,  1258,  1259,  1260,
-    1261,  1262,  1263,  1264,  1265,  1266,  1267,  1268,  1269,  1270,
-    1271,  1272,  1273,  1274,  1281,  1281,  1294,  1294,  1303,  1304,
-    1307,  1308,  1313,  1313,  1328,  1328,  1342,  1343,  1346,  1347,
-    1350,  1351,  1352,  1353,  1354,  1355,  1356,  1357,  1358,  1359,
-    1362,  1364,  1369,  1371,  1371,  1379,  1379,  1387,  1387,  1395,
-    1397,  1397,  1405,  1414,  1414,  1426,  1427,  1432,  1433,  1438,
-    1438,  1450,  1450,  1462,  1463,  1468,  1469,  1474,  1475,  1476,
-    1477,  1478,  1479,  1480,  1481,  1482,  1485,  1487,  1487,  1495,
-    1497,  1499,  1504,  1512,  1512,  1524,  1525,  1528,  1529,  1532,
-    1532,  1542,  1542,  1552,  1553,  1556,  1557,  1558,  1559,  1560,
-    1561,  1562,  1565,  1565,  1573,  1573,  1598,  1598,  1628,  1628,
-    1638,  1639,  1642,  1643,  1646,  1646,  1655,  1655,  1664,  1665,
-    1668,  1669,  1673,  1674,  1675,  1676,  1677,  1678,  1679,  1680,
-    1681,  1682,  1683,  1684,  1685,  1686,  1687,  1690,  1690,  1698,
-    1698,  1706,  1706,  1714,  1714,  1722,  1722,  1732,  1732,  1740,
-    1740,  1748,  1748,  1756,  1756,  1764,  1764,  1772,  1772,  1780,
-    1780,  1793,  1793,  1803,  1804,  1810,  1810,  1820,  1821,  1824,
-    1824,  1834,  1835,  1838,  1839,  1842,  1843,  1844,  1845,  1846,
-    1847,  1848,  1849,  1850,  1851,  1852,  1855,  1857,  1857,  1865,
-    1874,  1881,  1881,  1891,  1892,  1895,  1896,  1897,  1898,  1899,
-    1902,  1902,  1910,  1910,  1921,  1921,  1959,  1959,  1971,  1971,
-    1981,  1982,  1985,  1986,  1987,  1988,  1989,  1990,  1991,  1992,
-    1993,  1994,  1995,  1996,  1997,  1998,  1999,  2000,  2001,  2002,
-    2005,  2010,  2010,  2018,  2018,  2026,  2031,  2031,  2039,  2044,
-    2049,  2049,  2057,  2058,  2061,  2061,  2069,  2074,  2079,  2079,
-    2087,  2090,  2093,  2096,  2099,  2105,  2105,  2113,  2113,  2121,
-    2121,  2132,  2132,  2139,  2139,  2146,  2146,  2153,  2153,  2164,
-    2164,  2174,  2175,  2179,  2180,  2183,  2183,  2193,  2203,  2203,
-    2213,  2213,  2224,  2225,  2229,  2233,  2233,  2245,  2246,  2250,
-    2250,  2258,  2259,  2262,  2263,  2264,  2265,  2266,  2267,  2268,
-    2271,  2276,  2276,  2284,  2284,  2294,  2295,  2298,  2298,  2306,
-    2307,  2310,  2311,  2312,  2313,  2314,  2317,  2317,  2325,  2330,
-    2335,  2340,  2340
+       0,   272,   272,   272,   273,   273,   274,   274,   275,   275,
+     276,   276,   277,   277,   278,   278,   279,   279,   280,   280,
+     281,   281,   282,   282,   283,   283,   284,   284,   285,   285,
+     293,   294,   295,   296,   297,   298,   299,   302,   307,   307,
+     318,   321,   322,   325,   329,   336,   336,   343,   344,   347,
+     351,   358,   358,   365,   366,   369,   373,   384,   394,   394,
+     410,   411,   415,   416,   417,   418,   419,   420,   423,   423,
+     438,   438,   447,   448,   453,   454,   455,   456,   457,   458,
+     459,   460,   461,   462,   463,   464,   465,   466,   467,   468,
+     469,   470,   471,   472,   473,   474,   475,   476,   477,   478,
+     479,   480,   481,   482,   483,   484,   485,   486,   487,   488,
+     489,   490,   491,   492,   493,   494,   495,   496,   497,   498,
+     499,   500,   503,   508,   513,   518,   523,   528,   533,   538,
+     543,   548,   548,   556,   561,   566,   571,   576,   581,   586,
+     586,   594,   597,   600,   603,   606,   612,   612,   620,   620,
+     628,   628,   636,   636,   644,   644,   655,   656,   659,   660,
+     661,   662,   663,   664,   665,   668,   668,   677,   677,   687,
+     687,   694,   695,   698,   698,   705,   707,   711,   717,   717,
+     729,   729,   739,   740,   742,   744,   744,   762,   762,   774,
+     774,   784,   785,   788,   789,   792,   792,   802,   803,   806,
+     807,   808,   809,   810,   811,   812,   813,   814,   815,   816,
+     817,   818,   819,   820,   821,   822,   823,   824,   825,   826,
+     829,   829,   836,   837,   838,   839,   842,   842,   850,   850,
+     858,   858,   866,   871,   871,   879,   884,   889,   894,   899,
+     904,   909,   914,   914,   922,   922,   930,   930,   938,   938,
+     946,   951,   956,   962,   962,   972,   973,   976,   977,   978,
+     979,   980,   983,   988,   993,   998,  1003,  1008,  1008,  1018,
+    1019,  1022,  1023,  1026,  1026,  1036,  1036,  1046,  1047,  1048,
+    1051,  1052,  1055,  1055,  1063,  1063,  1071,  1071,  1082,  1083,
+    1086,  1087,  1088,  1089,  1090,  1091,  1094,  1099,  1104,  1109,
+    1114,  1119,  1127,  1127,  1140,  1141,  1144,  1145,  1152,  1152,
+    1178,  1178,  1189,  1190,  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,  1233,  1233,  1241,  1241,  1249,  1249,  1257,  1257,  1265,
+    1265,  1273,  1273,  1281,  1281,  1291,  1291,  1298,  1299,  1300,
+    1301,  1304,  1311,  1311,  1322,  1323,  1327,  1328,  1331,  1331,
+    1339,  1340,  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,  1381,  1381,  1394,  1394,  1403,  1404,
+    1407,  1408,  1413,  1413,  1428,  1428,  1442,  1443,  1446,  1447,
+    1450,  1451,  1452,  1453,  1454,  1455,  1456,  1457,  1458,  1459,
+    1462,  1464,  1469,  1471,  1471,  1479,  1479,  1487,  1487,  1495,
+    1497,  1497,  1505,  1514,  1514,  1526,  1527,  1532,  1533,  1538,
+    1538,  1550,  1550,  1562,  1563,  1568,  1569,  1574,  1575,  1576,
+    1577,  1578,  1579,  1580,  1581,  1582,  1585,  1587,  1587,  1595,
+    1597,  1599,  1604,  1612,  1612,  1624,  1625,  1628,  1629,  1632,
+    1632,  1642,  1642,  1652,  1653,  1656,  1657,  1658,  1659,  1660,
+    1661,  1662,  1665,  1665,  1673,  1673,  1698,  1698,  1728,  1728,
+    1738,  1739,  1742,  1743,  1746,  1746,  1755,  1755,  1764,  1765,
+    1768,  1769,  1773,  1774,  1775,  1776,  1777,  1778,  1779,  1780,
+    1781,  1782,  1783,  1784,  1785,  1786,  1787,  1790,  1790,  1798,
+    1798,  1806,  1806,  1814,  1814,  1822,  1822,  1832,  1832,  1840,
+    1840,  1848,  1848,  1856,  1856,  1864,  1864,  1872,  1872,  1880,
+    1880,  1893,  1893,  1903,  1904,  1910,  1910,  1920,  1921,  1924,
+    1924,  1934,  1935,  1938,  1939,  1942,  1943,  1944,  1945,  1946,
+    1947,  1948,  1949,  1950,  1951,  1952,  1955,  1957,  1957,  1965,
+    1974,  1981,  1981,  1991,  1992,  1995,  1996,  1997,  1998,  1999,
+    2002,  2002,  2010,  2010,  2021,  2021,  2059,  2059,  2071,  2071,
+    2081,  2082,  2085,  2086,  2087,  2088,  2089,  2090,  2091,  2092,
+    2093,  2094,  2095,  2096,  2097,  2098,  2099,  2100,  2101,  2102,
+    2105,  2110,  2110,  2118,  2123,  2123,  2131,  2136,  2141,  2141,
+    2149,  2150,  2153,  2153,  2162,  2162,  2171,  2177,  2183,  2183,
+    2191,  2191,  2200,  2200,  2209,  2209,  2220,  2220,  2227,  2227,
+    2234,  2234,  2241,  2241,  2252,  2252,  2262,  2263,  2267,  2268,
+    2271,  2271,  2281,  2291,  2291,  2301,  2301,  2312,  2313,  2317,
+    2321,  2321,  2333,  2334,  2338,  2338,  2346,  2347,  2350,  2351,
+    2352,  2353,  2354,  2355,  2356,  2359,  2364,  2364,  2372,  2372,
+    2382,  2383,  2386,  2386,  2394,  2395,  2398,  2399,  2400,  2401,
+    2402,  2405,  2405,  2413,  2418,  2423,  2428,  2428
   };
 
   // Print the state stack on the debug stream.
@@ -5121,11 +5269,10 @@ namespace isc { namespace dhcp {
 #endif // PARSER4_DEBUG
 
 
-#line 14 "dhcp4_parser.yy"
+#line 14 "dhcp4_parser.yy" // lalr1.cc:1218
 } } // isc::dhcp
-#line 5127 "dhcp4_parser.cc"
-
-#line 2349 "dhcp4_parser.yy"
+#line 5275 "dhcp4_parser.cc" // lalr1.cc:1218
+#line 2437 "dhcp4_parser.yy" // lalr1.cc:1219
 
 
 void
index 48bc394818f7b805f76b947f6bf0928d1ccf570f..4ed78335eaa3984edc776c11373fabd72031fa98 100644 (file)
@@ -1,8 +1,8 @@
-// A Bison parser, made by GNU Bison 3.4.1.
+// A Bison parser, made by GNU Bison 3.2.1.
 
 // Skeleton interface for Bison LALR(1) parsers in C++
 
-// Copyright (C) 2002-2015, 2018-2019 Free Software Foundation, Inc.
+// Copyright (C) 2002-2015, 2018 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
@@ -44,7 +44,7 @@
 #ifndef YY_PARSER4_DHCP4_PARSER_H_INCLUDED
 # define YY_PARSER4_DHCP4_PARSER_H_INCLUDED
 // //                    "%code requires" blocks.
-#line 17 "dhcp4_parser.yy"
+#line 17 "dhcp4_parser.yy" // lalr1.cc:404
 
 #include <string>
 #include <cc/data.h>
@@ -56,7 +56,7 @@ using namespace isc::dhcp;
 using namespace isc::data;
 using namespace std;
 
-#line 60 "dhcp4_parser.h"
+#line 60 "dhcp4_parser.h" // lalr1.cc:404
 
 # include <cassert>
 # include <cstdlib> // std::abort
@@ -65,14 +65,8 @@ using namespace std;
 # include <string>
 # include <vector>
 
-#if defined __cplusplus
-# define YY_CPLUSPLUS __cplusplus
-#else
-# define YY_CPLUSPLUS 199711L
-#endif
-
 // Support move semantics when possible.
-#if 201103L <= YY_CPLUSPLUS
+#if defined __cplusplus && 201103L <= __cplusplus
 # define YY_MOVE           std::move
 # define YY_MOVE_OR_COPY   move
 # define YY_MOVE_REF(Type) Type&&
@@ -85,22 +79,6 @@ using namespace std;
 # define YY_RVREF(Type)    const Type&
 # define YY_COPY(Type)     const Type&
 #endif
-
-// Support noexcept when possible.
-#if 201103L <= YY_CPLUSPLUS
-# define YY_NOEXCEPT noexcept
-# define YY_NOTHROW
-#else
-# define YY_NOEXCEPT
-# define YY_NOTHROW throw ()
-#endif
-
-// Support constexpr when possible.
-#if 201703 <= YY_CPLUSPLUS
-# define YY_CONSTEXPR constexpr
-#else
-# define YY_CONSTEXPR
-#endif
 # include "location.hh"
 #include <typeinfo>
 #ifndef YYASSERT
@@ -178,80 +156,193 @@ using namespace std;
 # endif /* ! defined YYDEBUG */
 #endif  /* ! defined PARSER4_DEBUG */
 
-#line 14 "dhcp4_parser.yy"
+#line 14 "dhcp4_parser.yy" // lalr1.cc:404
 namespace isc { namespace dhcp {
-#line 184 "dhcp4_parser.h"
+#line 162 "dhcp4_parser.h" // lalr1.cc:404
+
+  /// A stack with random access from its top.
+  template <typename T, typename S = std::vector<T> >
+  class stack
+  {
+  public:
+    // Hide our reversed order.
+    typedef typename S::reverse_iterator iterator;
+    typedef typename S::const_reverse_iterator const_iterator;
+    typedef typename S::size_type size_type;
 
+    stack (size_type n = 200)
+      : seq_ (n)
+    {}
+
+    /// Random access.
+    ///
+    /// Index 0 returns the topmost element.
+    T&
+    operator[] (size_type i)
+    {
+      return seq_[size () - 1 - i];
+    }
 
+    /// Random access.
+    ///
+    /// Index 0 returns the topmost element.
+    T&
+    operator[] (int i)
+    {
+      return operator[] (size_type (i));
+    }
 
+    /// Random access.
+    ///
+    /// Index 0 returns the topmost element.
+    const T&
+    operator[] (size_type i) const
+    {
+      return seq_[size () - 1 - i];
+    }
 
-  /// A Bison parser.
-  class Dhcp4Parser
+    /// Random access.
+    ///
+    /// Index 0 returns the topmost element.
+    const T&
+    operator[] (int i) const
+    {
+      return operator[] (size_type (i));
+    }
+
+    /// Steal the contents of \a t.
+    ///
+    /// Close to move-semantics.
+    void
+    push (YY_MOVE_REF (T) t)
+    {
+      seq_.push_back (T ());
+      operator[](0).move (t);
+    }
+
+    void
+    pop (int n = 1)
+    {
+      for (; 0 < n; --n)
+        seq_.pop_back ();
+    }
+
+    void
+    clear ()
+    {
+      seq_.clear ();
+    }
+
+    size_type
+    size () const
+    {
+      return seq_.size ();
+    }
+
+    const_iterator
+    begin () const
+    {
+      return seq_.rbegin ();
+    }
+
+    const_iterator
+    end () const
+    {
+      return seq_.rend ();
+    }
+
+  private:
+    stack (const stack&);
+    stack& operator= (const stack&);
+    /// The wrapped container.
+    S seq_;
+  };
+
+  /// Present a slice of the top of a stack.
+  template <typename T, typename S = stack<T> >
+  class slice
   {
   public:
-#ifndef PARSER4_STYPE
-  /// A buffer to store and retrieve objects.
+    slice (const S& stack, int range)
+      : stack_ (stack)
+      , range_ (range)
+    {}
+
+    const T&
+    operator[] (int i) const
+    {
+      return stack_[range_ - i];
+    }
+
+  private:
+    const S& stack_;
+    int range_;
+  };
+
+
+
+  /// A char[S] buffer to store and retrieve objects.
   ///
   /// Sort of a variant, but does not keep track of the nature
   /// of the stored data, since that knowledge is available
-  /// via the current parser state.
-  class semantic_type
+  /// via the current state.
+  template <size_t S>
+  struct variant
   {
-  public:
     /// Type of *this.
-    typedef semantic_type self_type;
+    typedef variant<S> self_type;
 
     /// Empty construction.
-    semantic_type () YY_NOEXCEPT
+    variant ()
       : yybuffer_ ()
       , yytypeid_ (YY_NULLPTR)
     {}
 
     /// Construct and fill.
     template <typename T>
-    semantic_type (YY_RVREF (T) t)
+    variant (YY_RVREF (T) t)
       : yytypeid_ (&typeid (T))
     {
-      YYASSERT (sizeof (T) <= size);
+      YYASSERT (sizeof (T) <= S);
       new (yyas_<T> ()) T (YY_MOVE (t));
     }
 
     /// Destruction, allowed only if empty.
-    ~semantic_type () YY_NOEXCEPT
+    ~variant ()
     {
       YYASSERT (!yytypeid_);
     }
 
-# if 201103L <= YY_CPLUSPLUS
-    /// Instantiate a \a T in here from \a t.
-    template <typename T, typename... U>
-    T&
-    emplace (U&&... u)
-    {
-      YYASSERT (!yytypeid_);
-      YYASSERT (sizeof (T) <= size);
-      yytypeid_ = & typeid (T);
-      return *new (yyas_<T> ()) T (std::forward <U>(u)...);
-    }
-# else
     /// Instantiate an empty \a T in here.
     template <typename T>
     T&
     emplace ()
     {
       YYASSERT (!yytypeid_);
-      YYASSERT (sizeof (T) <= size);
+      YYASSERT (sizeof (T) <= S);
       yytypeid_ = & typeid (T);
       return *new (yyas_<T> ()) T ();
     }
 
+# if defined __cplusplus && 201103L <= __cplusplus
+    /// Instantiate a \a T in here from \a t.
+    template <typename T, typename U>
+    T&
+    emplace (U&& u)
+    {
+      YYASSERT (!yytypeid_);
+      YYASSERT (sizeof (T) <= S);
+      yytypeid_ = & typeid (T);
+      return *new (yyas_<T> ()) T (std::forward <U>(u));
+    }
+# else
     /// Instantiate a \a T in here from \a t.
     template <typename T>
     T&
     emplace (const T& t)
     {
       YYASSERT (!yytypeid_);
-      YYASSERT (sizeof (T) <= size);
+      YYASSERT (sizeof (T) <= S);
       yytypeid_ = & typeid (T);
       return *new (yyas_<T> ()) T (t);
     }
@@ -278,75 +369,75 @@ namespace isc { namespace dhcp {
     /// Accessor to a built \a T.
     template <typename T>
     T&
-    as () YY_NOEXCEPT
+    as ()
     {
       YYASSERT (yytypeid_);
       YYASSERT (*yytypeid_ == typeid (T));
-      YYASSERT (sizeof (T) <= size);
+      YYASSERT (sizeof (T) <= S);
       return *yyas_<T> ();
     }
 
     /// Const accessor to a built \a T (for %printer).
     template <typename T>
     const T&
-    as () const YY_NOEXCEPT
+    as () const
     {
       YYASSERT (yytypeid_);
       YYASSERT (*yytypeid_ == typeid (T));
-      YYASSERT (sizeof (T) <= size);
+      YYASSERT (sizeof (T) <= S);
       return *yyas_<T> ();
     }
 
-    /// Swap the content with \a that, of same type.
+    /// Swap the content with \a other, of same type.
     ///
     /// Both variants must be built beforehand, because swapping the actual
     /// data requires reading it (with as()), and this is not possible on
     /// unconstructed variants: it would require some dynamic testing, which
     /// should not be the variant's responsibility.
     /// Swapping between built and (possibly) non-built is done with
-    /// self_type::move ().
+    /// variant::move ().
     template <typename T>
     void
-    swap (self_type& that) YY_NOEXCEPT
+    swap (self_type& other)
     {
       YYASSERT (yytypeid_);
-      YYASSERT (*yytypeid_ == *that.yytypeid_);
-      std::swap (as<T> (), that.as<T> ());
+      YYASSERT (*yytypeid_ == *other.yytypeid_);
+      std::swap (as<T> (), other.as<T> ());
     }
 
-    /// Move the content of \a that to this.
+    /// Move the content of \a other to this.
     ///
-    /// Destroys \a that.
+    /// Destroys \a other.
     template <typename T>
     void
-    move (self_type& that)
+    move (self_type& other)
     {
-# if 201103L <= YY_CPLUSPLUS
-      emplace<T> (std::move (that.as<T> ()));
+# if defined __cplusplus && 201103L <= __cplusplus
+      emplace<T> (std::move (other.as<T> ()));
 # else
       emplace<T> ();
-      swap<T> (that);
+      swap<T> (other);
 # endif
-      that.destroy<T> ();
+      other.destroy<T> ();
     }
 
-# if 201103L <= YY_CPLUSPLUS
-    /// Move the content of \a that to this.
+# if defined __cplusplus && 201103L <= __cplusplus
+    /// Move the content of \a other to this.
     template <typename T>
     void
-    move (self_type&& that)
+    move (self_type&& other)
     {
-      emplace<T> (std::move (that.as<T> ()));
-      that.destroy<T> ();
+      emplace<T> (std::move (other.as<T> ()));
+      other.destroy<T> ();
     }
 #endif
 
-    /// Copy the content of \a that to this.
+    /// Copy the content of \a other to this.
     template <typename T>
     void
-    copy (const self_type& that)
+    copy (const self_type& other)
     {
-      emplace<T> (that.as<T> ());
+      emplace<T> (other.as<T> ());
     }
 
     /// Destroy the stored \a T.
@@ -361,12 +452,12 @@ namespace isc { namespace dhcp {
   private:
     /// Prohibit blind copies.
     self_type& operator= (const self_type&);
-    semantic_type (const self_type&);
+    variant (const self_type&);
 
     /// Accessor to raw memory as \a T.
     template <typename T>
     T*
-    yyas_ () YY_NOEXCEPT
+    yyas_ ()
     {
       void *yyp = yybuffer_.yyraw;
       return static_cast<T*> (yyp);
@@ -375,23 +466,41 @@ namespace isc { namespace dhcp {
     /// Const accessor to raw memory as \a T.
     template <typename T>
     const T*
-    yyas_ () const YY_NOEXCEPT
+    yyas_ () const
     {
       const void *yyp = yybuffer_.yyraw;
       return static_cast<const T*> (yyp);
      }
 
+    union
+    {
+      /// Strongest alignment constraints.
+      long double yyalign_me;
+      /// A buffer large enough to store any of the semantic values.
+      char yyraw[S];
+    } yybuffer_;
+
+    /// Whether the content is built: if defined, the name of the stored type.
+    const std::type_info *yytypeid_;
+  };
+
+
+  /// A Bison parser.
+  class Dhcp4Parser
+  {
+  public:
+#ifndef PARSER4_STYPE
     /// An auxiliary type to compute the largest semantic type.
     union union_type
     {
       // value
       // map_value
+      // ddns_replace_client_name_value
       // socket_type
       // outbound_interface_value
       // db_type
       // hr_mode
       // ncr_protocol_value
-      // replace_client_name_value
       char dummy1[sizeof (ElementPtr)];
 
       // "boolean"
@@ -405,24 +514,10 @@ namespace isc { namespace dhcp {
 
       // "constant string"
       char dummy5[sizeof (std::string)];
-    };
-
-    /// The size of the largest semantic type.
-    enum { size = sizeof (union_type) };
-
-    /// A buffer to store semantic values.
-    union
-    {
-      /// Strongest alignment constraints.
-      long double yyalign_me;
-      /// A buffer large enough to store any of the semantic values.
-      char yyraw[size];
-    } yybuffer_;
-
-    /// Whether the content is built: if defined, the name of the stored type.
-    const std::type_info *yytypeid_;
-  };
+};
 
+    /// Symbol semantic values.
+    typedef variant<sizeof (union_type)> semantic_type;
 #else
     typedef PARSER4_STYPE semantic_type;
 #endif
@@ -432,18 +527,7 @@ namespace isc { namespace dhcp {
     /// Syntax errors thrown from user actions.
     struct syntax_error : std::runtime_error
     {
-      syntax_error (const location_type& l, const std::string& m)
-        : std::runtime_error (m)
-        , location (l)
-      {}
-
-      syntax_error (const syntax_error& s)
-        : std::runtime_error (s.what ())
-        , location (s.location)
-      {}
-
-      ~syntax_error () YY_NOEXCEPT YY_NOTHROW;
-
+      syntax_error (const location_type& l, const std::string& m);
       location_type location;
     };
 
@@ -517,118 +601,124 @@ namespace isc { namespace dhcp {
         TOKEN_T2_PERCENT = 319,
         TOKEN_DECLINE_PROBATION_PERIOD = 320,
         TOKEN_SERVER_TAG = 321,
-        TOKEN_SUBNET4 = 322,
-        TOKEN_SUBNET_4O6_INTERFACE = 323,
-        TOKEN_SUBNET_4O6_INTERFACE_ID = 324,
-        TOKEN_SUBNET_4O6_SUBNET = 325,
-        TOKEN_OPTION_DEF = 326,
-        TOKEN_OPTION_DATA = 327,
-        TOKEN_NAME = 328,
-        TOKEN_DATA = 329,
-        TOKEN_CODE = 330,
-        TOKEN_SPACE = 331,
-        TOKEN_CSV_FORMAT = 332,
-        TOKEN_ALWAYS_SEND = 333,
-        TOKEN_RECORD_TYPES = 334,
-        TOKEN_ENCAPSULATE = 335,
-        TOKEN_ARRAY = 336,
-        TOKEN_SHARED_NETWORKS = 337,
-        TOKEN_POOLS = 338,
-        TOKEN_POOL = 339,
-        TOKEN_USER_CONTEXT = 340,
-        TOKEN_COMMENT = 341,
-        TOKEN_SUBNET = 342,
-        TOKEN_INTERFACE = 343,
-        TOKEN_ID = 344,
-        TOKEN_RESERVATION_MODE = 345,
-        TOKEN_DISABLED = 346,
-        TOKEN_OUT_OF_POOL = 347,
-        TOKEN_GLOBAL = 348,
-        TOKEN_ALL = 349,
-        TOKEN_HOST_RESERVATION_IDENTIFIERS = 350,
-        TOKEN_CLIENT_CLASSES = 351,
-        TOKEN_REQUIRE_CLIENT_CLASSES = 352,
-        TOKEN_TEST = 353,
-        TOKEN_ONLY_IF_REQUIRED = 354,
-        TOKEN_CLIENT_CLASS = 355,
-        TOKEN_RESERVATIONS = 356,
-        TOKEN_DUID = 357,
-        TOKEN_HW_ADDRESS = 358,
-        TOKEN_CIRCUIT_ID = 359,
-        TOKEN_CLIENT_ID = 360,
-        TOKEN_HOSTNAME = 361,
-        TOKEN_FLEX_ID = 362,
-        TOKEN_RELAY = 363,
-        TOKEN_IP_ADDRESS = 364,
-        TOKEN_IP_ADDRESSES = 365,
-        TOKEN_HOOKS_LIBRARIES = 366,
-        TOKEN_LIBRARY = 367,
-        TOKEN_PARAMETERS = 368,
-        TOKEN_EXPIRED_LEASES_PROCESSING = 369,
-        TOKEN_RECLAIM_TIMER_WAIT_TIME = 370,
-        TOKEN_FLUSH_RECLAIMED_TIMER_WAIT_TIME = 371,
-        TOKEN_HOLD_RECLAIMED_TIME = 372,
-        TOKEN_MAX_RECLAIM_LEASES = 373,
-        TOKEN_MAX_RECLAIM_TIME = 374,
-        TOKEN_UNWARNED_RECLAIM_CYCLES = 375,
-        TOKEN_DHCP4O6_PORT = 376,
-        TOKEN_CONTROL_SOCKET = 377,
-        TOKEN_SOCKET_TYPE = 378,
-        TOKEN_SOCKET_NAME = 379,
-        TOKEN_DHCP_QUEUE_CONTROL = 380,
-        TOKEN_DHCP_DDNS = 381,
-        TOKEN_ENABLE_UPDATES = 382,
-        TOKEN_QUALIFYING_SUFFIX = 383,
-        TOKEN_SERVER_IP = 384,
-        TOKEN_SERVER_PORT = 385,
-        TOKEN_SENDER_IP = 386,
-        TOKEN_SENDER_PORT = 387,
-        TOKEN_MAX_QUEUE_SIZE = 388,
-        TOKEN_NCR_PROTOCOL = 389,
-        TOKEN_NCR_FORMAT = 390,
-        TOKEN_OVERRIDE_NO_UPDATE = 391,
-        TOKEN_OVERRIDE_CLIENT_UPDATE = 392,
-        TOKEN_REPLACE_CLIENT_NAME = 393,
-        TOKEN_GENERATED_PREFIX = 394,
-        TOKEN_TCP = 395,
-        TOKEN_JSON = 396,
-        TOKEN_WHEN_PRESENT = 397,
-        TOKEN_NEVER = 398,
-        TOKEN_ALWAYS = 399,
-        TOKEN_WHEN_NOT_PRESENT = 400,
-        TOKEN_HOSTNAME_CHAR_SET = 401,
-        TOKEN_HOSTNAME_CHAR_REPLACEMENT = 402,
-        TOKEN_LOGGING = 403,
-        TOKEN_LOGGERS = 404,
-        TOKEN_OUTPUT_OPTIONS = 405,
-        TOKEN_OUTPUT = 406,
-        TOKEN_DEBUGLEVEL = 407,
-        TOKEN_SEVERITY = 408,
-        TOKEN_FLUSH = 409,
-        TOKEN_MAXSIZE = 410,
-        TOKEN_MAXVER = 411,
-        TOKEN_PATTERN = 412,
-        TOKEN_DHCP6 = 413,
-        TOKEN_DHCPDDNS = 414,
-        TOKEN_CONTROL_AGENT = 415,
-        TOKEN_TOPLEVEL_JSON = 416,
-        TOKEN_TOPLEVEL_DHCP4 = 417,
-        TOKEN_SUB_DHCP4 = 418,
-        TOKEN_SUB_INTERFACES4 = 419,
-        TOKEN_SUB_SUBNET4 = 420,
-        TOKEN_SUB_POOL4 = 421,
-        TOKEN_SUB_RESERVATION = 422,
-        TOKEN_SUB_OPTION_DEFS = 423,
-        TOKEN_SUB_OPTION_DEF = 424,
-        TOKEN_SUB_OPTION_DATA = 425,
-        TOKEN_SUB_HOOKS_LIBRARY = 426,
-        TOKEN_SUB_DHCP_DDNS = 427,
-        TOKEN_SUB_LOGGING = 428,
-        TOKEN_SUB_CONFIG_CONTROL = 429,
-        TOKEN_STRING = 430,
-        TOKEN_INTEGER = 431,
-        TOKEN_FLOAT = 432,
-        TOKEN_BOOLEAN = 433
+        TOKEN_DDNS_SEND_UPDATES = 322,
+        TOKEN_DDNS_OVERRIDE_NO_UPDATE = 323,
+        TOKEN_DDNS_OVERRIDE_CLIENT_UPDATE = 324,
+        TOKEN_DDNS_REPLACE_CLIENT_NAME = 325,
+        TOKEN_DDNS_GENERATED_PREFIX = 326,
+        TOKEN_DDNS_QUALIFYING_SUFFIX = 327,
+        TOKEN_SUBNET4 = 328,
+        TOKEN_SUBNET_4O6_INTERFACE = 329,
+        TOKEN_SUBNET_4O6_INTERFACE_ID = 330,
+        TOKEN_SUBNET_4O6_SUBNET = 331,
+        TOKEN_OPTION_DEF = 332,
+        TOKEN_OPTION_DATA = 333,
+        TOKEN_NAME = 334,
+        TOKEN_DATA = 335,
+        TOKEN_CODE = 336,
+        TOKEN_SPACE = 337,
+        TOKEN_CSV_FORMAT = 338,
+        TOKEN_ALWAYS_SEND = 339,
+        TOKEN_RECORD_TYPES = 340,
+        TOKEN_ENCAPSULATE = 341,
+        TOKEN_ARRAY = 342,
+        TOKEN_SHARED_NETWORKS = 343,
+        TOKEN_POOLS = 344,
+        TOKEN_POOL = 345,
+        TOKEN_USER_CONTEXT = 346,
+        TOKEN_COMMENT = 347,
+        TOKEN_SUBNET = 348,
+        TOKEN_INTERFACE = 349,
+        TOKEN_ID = 350,
+        TOKEN_RESERVATION_MODE = 351,
+        TOKEN_DISABLED = 352,
+        TOKEN_OUT_OF_POOL = 353,
+        TOKEN_GLOBAL = 354,
+        TOKEN_ALL = 355,
+        TOKEN_HOST_RESERVATION_IDENTIFIERS = 356,
+        TOKEN_CLIENT_CLASSES = 357,
+        TOKEN_REQUIRE_CLIENT_CLASSES = 358,
+        TOKEN_TEST = 359,
+        TOKEN_ONLY_IF_REQUIRED = 360,
+        TOKEN_CLIENT_CLASS = 361,
+        TOKEN_RESERVATIONS = 362,
+        TOKEN_DUID = 363,
+        TOKEN_HW_ADDRESS = 364,
+        TOKEN_CIRCUIT_ID = 365,
+        TOKEN_CLIENT_ID = 366,
+        TOKEN_HOSTNAME = 367,
+        TOKEN_FLEX_ID = 368,
+        TOKEN_RELAY = 369,
+        TOKEN_IP_ADDRESS = 370,
+        TOKEN_IP_ADDRESSES = 371,
+        TOKEN_HOOKS_LIBRARIES = 372,
+        TOKEN_LIBRARY = 373,
+        TOKEN_PARAMETERS = 374,
+        TOKEN_EXPIRED_LEASES_PROCESSING = 375,
+        TOKEN_RECLAIM_TIMER_WAIT_TIME = 376,
+        TOKEN_FLUSH_RECLAIMED_TIMER_WAIT_TIME = 377,
+        TOKEN_HOLD_RECLAIMED_TIME = 378,
+        TOKEN_MAX_RECLAIM_LEASES = 379,
+        TOKEN_MAX_RECLAIM_TIME = 380,
+        TOKEN_UNWARNED_RECLAIM_CYCLES = 381,
+        TOKEN_DHCP4O6_PORT = 382,
+        TOKEN_CONTROL_SOCKET = 383,
+        TOKEN_SOCKET_TYPE = 384,
+        TOKEN_SOCKET_NAME = 385,
+        TOKEN_DHCP_QUEUE_CONTROL = 386,
+        TOKEN_DHCP_DDNS = 387,
+        TOKEN_ENABLE_UPDATES = 388,
+        TOKEN_QUALIFYING_SUFFIX = 389,
+        TOKEN_SERVER_IP = 390,
+        TOKEN_SERVER_PORT = 391,
+        TOKEN_SENDER_IP = 392,
+        TOKEN_SENDER_PORT = 393,
+        TOKEN_MAX_QUEUE_SIZE = 394,
+        TOKEN_NCR_PROTOCOL = 395,
+        TOKEN_NCR_FORMAT = 396,
+        TOKEN_OVERRIDE_NO_UPDATE = 397,
+        TOKEN_OVERRIDE_CLIENT_UPDATE = 398,
+        TOKEN_REPLACE_CLIENT_NAME = 399,
+        TOKEN_GENERATED_PREFIX = 400,
+        TOKEN_TCP = 401,
+        TOKEN_JSON = 402,
+        TOKEN_WHEN_PRESENT = 403,
+        TOKEN_NEVER = 404,
+        TOKEN_ALWAYS = 405,
+        TOKEN_WHEN_NOT_PRESENT = 406,
+        TOKEN_HOSTNAME_CHAR_SET = 407,
+        TOKEN_HOSTNAME_CHAR_REPLACEMENT = 408,
+        TOKEN_LOGGING = 409,
+        TOKEN_LOGGERS = 410,
+        TOKEN_OUTPUT_OPTIONS = 411,
+        TOKEN_OUTPUT = 412,
+        TOKEN_DEBUGLEVEL = 413,
+        TOKEN_SEVERITY = 414,
+        TOKEN_FLUSH = 415,
+        TOKEN_MAXSIZE = 416,
+        TOKEN_MAXVER = 417,
+        TOKEN_PATTERN = 418,
+        TOKEN_DHCP6 = 419,
+        TOKEN_DHCPDDNS = 420,
+        TOKEN_CONTROL_AGENT = 421,
+        TOKEN_TOPLEVEL_JSON = 422,
+        TOKEN_TOPLEVEL_DHCP4 = 423,
+        TOKEN_SUB_DHCP4 = 424,
+        TOKEN_SUB_INTERFACES4 = 425,
+        TOKEN_SUB_SUBNET4 = 426,
+        TOKEN_SUB_POOL4 = 427,
+        TOKEN_SUB_RESERVATION = 428,
+        TOKEN_SUB_OPTION_DEFS = 429,
+        TOKEN_SUB_OPTION_DEF = 430,
+        TOKEN_SUB_OPTION_DATA = 431,
+        TOKEN_SUB_HOOKS_LIBRARY = 432,
+        TOKEN_SUB_DHCP_DDNS = 433,
+        TOKEN_SUB_LOGGING = 434,
+        TOKEN_SUB_CONFIG_CONTROL = 435,
+        TOKEN_STRING = 436,
+        TOKEN_INTEGER = 437,
+        TOKEN_FLOAT = 438,
+        TOKEN_BOOLEAN = 439
       };
     };
 
@@ -657,155 +747,29 @@ namespace isc { namespace dhcp {
       typedef Base super_type;
 
       /// Default constructor.
-      basic_symbol ()
-        : value ()
-        , location ()
-      {}
-
-#if 201103L <= YY_CPLUSPLUS
-      /// Move constructor.
-      basic_symbol (basic_symbol&& that);
-#endif
+      basic_symbol ();
+
+      /// Move or copy constructor.
+      basic_symbol (YY_RVREF (basic_symbol) other);
 
-      /// Copy constructor.
-      basic_symbol (const basic_symbol& that);
 
       /// Constructor for valueless symbols, and symbols from each type.
-#if 201103L <= YY_CPLUSPLUS
-      basic_symbol (typename Base::kind_type t, location_type&& l)
-        : Base (t)
-        , location (std::move (l))
-      {}
-#else
-      basic_symbol (typename Base::kind_type t, const location_type& l)
-        : Base (t)
-        , location (l)
-      {}
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      basic_symbol (typename Base::kind_type t, ElementPtr&& v, location_type&& l)
-        : Base (t)
-        , value (std::move (v))
-        , location (std::move (l))
-      {}
-#else
-      basic_symbol (typename Base::kind_type t, const ElementPtr& v, const location_type& l)
-        : Base (t)
-        , value (v)
-        , location (l)
-      {}
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      basic_symbol (typename Base::kind_type t, bool&& v, location_type&& l)
-        : Base (t)
-        , value (std::move (v))
-        , location (std::move (l))
-      {}
-#else
-      basic_symbol (typename Base::kind_type t, const bool& v, const location_type& l)
-        : Base (t)
-        , value (v)
-        , location (l)
-      {}
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      basic_symbol (typename Base::kind_type t, double&& v, location_type&& l)
-        : Base (t)
-        , value (std::move (v))
-        , location (std::move (l))
-      {}
-#else
-      basic_symbol (typename Base::kind_type t, const double& v, const location_type& l)
-        : Base (t)
-        , value (v)
-        , location (l)
-      {}
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      basic_symbol (typename Base::kind_type t, int64_t&& v, location_type&& l)
-        : Base (t)
-        , value (std::move (v))
-        , location (std::move (l))
-      {}
-#else
-      basic_symbol (typename Base::kind_type t, const int64_t& v, const location_type& l)
-        : Base (t)
-        , value (v)
-        , location (l)
-      {}
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      basic_symbol (typename Base::kind_type t, std::string&& v, location_type&& l)
-        : Base (t)
-        , value (std::move (v))
-        , location (std::move (l))
-      {}
-#else
-      basic_symbol (typename Base::kind_type t, const std::string& v, const location_type& l)
-        : Base (t)
-        , value (v)
-        , location (l)
-      {}
-#endif
+      basic_symbol (typename Base::kind_type t, YY_RVREF (location_type) l);
+      basic_symbol (typename Base::kind_type t, YY_RVREF (ElementPtr) v, YY_RVREF (location_type) l);
+      basic_symbol (typename Base::kind_type t, YY_RVREF (bool) v, YY_RVREF (location_type) l);
+      basic_symbol (typename Base::kind_type t, YY_RVREF (double) v, YY_RVREF (location_type) l);
+      basic_symbol (typename Base::kind_type t, YY_RVREF (int64_t) v, YY_RVREF (location_type) l);
+      basic_symbol (typename Base::kind_type t, YY_RVREF (std::string) v, YY_RVREF (location_type) l);
+
 
       /// Destroy the symbol.
-      ~basic_symbol ()
-      {
-        clear ();
-      }
+      ~basic_symbol ();
 
       /// Destroy contents, and record that is empty.
-      void clear ()
-      {
-        // User destructor.
-        symbol_number_type yytype = this->type_get ();
-        basic_symbol<Base>& yysym = *this;
-        (void) yysym;
-        switch (yytype)
-        {
-       default:
-          break;
-        }
-
-        // Type destructor.
-switch (yytype)
-    {
-      case 195: // value
-      case 199: // map_value
-      case 245: // socket_type
-      case 248: // outbound_interface_value
-      case 270: // db_type
-      case 357: // hr_mode
-      case 506: // ncr_protocol_value
-      case 513: // replace_client_name_value
-        value.template destroy< ElementPtr > ();
-        break;
-
-      case 178: // "boolean"
-        value.template destroy< bool > ();
-        break;
-
-      case 177: // "floating point"
-        value.template destroy< double > ();
-        break;
-
-      case 176: // "integer"
-        value.template destroy< int64_t > ();
-        break;
-
-      case 175: // "constant string"
-        value.template destroy< std::string > ();
-        break;
-
-      default:
-        break;
-    }
-
-        Base::clear ();
-      }
+      void clear ();
 
       /// Whether empty.
-      bool empty () const YY_NOEXCEPT;
+      bool empty () const;
 
       /// Destructive move, \a s is emptied into this.
       void move (basic_symbol& s);
@@ -817,9 +781,9 @@ switch (yytype)
       location_type location;
 
     private:
-#if YY_CPLUSPLUS < 201103L
+#if !defined __cplusplus || __cplusplus < 201103L
       /// Assignment operator.
-      basic_symbol& operator= (const basic_symbol& that);
+      basic_symbol& operator= (const basic_symbol& other);
 #endif
     };
 
@@ -829,13 +793,8 @@ switch (yytype)
       /// Default constructor.
       by_type ();
 
-#if 201103L <= YY_CPLUSPLUS
-      /// Move constructor.
-      by_type (by_type&& that);
-#endif
-
       /// Copy constructor.
-      by_type (const by_type& that);
+      by_type (const by_type& other);
 
       /// The symbol type as needed by the constructor.
       typedef token_type kind_type;
@@ -851,10 +810,10 @@ switch (yytype)
 
       /// The (internal) type number (corresponding to \a type).
       /// \a empty when empty.
-      symbol_number_type type_get () const YY_NOEXCEPT;
+      symbol_number_type type_get () const;
 
       /// The token.
-      token_type token () const YY_NOEXCEPT;
+      token_type token () const;
 
       /// The symbol type.
       /// \a empty_symbol when empty.
@@ -863,81 +822,7 @@ switch (yytype)
     };
 
     /// "External" symbols: returned by the scanner.
-    struct symbol_type : basic_symbol<by_type>
-    {
-      /// Superclass.
-      typedef basic_symbol<by_type> super_type;
-
-      /// Empty symbol.
-      symbol_type () {}
-
-      /// Constructor for valueless symbols, and symbols from each type.
-#if 201103L <= YY_CPLUSPLUS
-      symbol_type (int tok, location_type l)
-        : super_type(token_type (tok), std::move (l))
-      {
-        YYASSERT (tok == token::TOKEN_END || tok == token::TOKEN_COMMA || tok == token::TOKEN_COLON || tok == token::TOKEN_LSQUARE_BRACKET || tok == token::TOKEN_RSQUARE_BRACKET || tok == token::TOKEN_LCURLY_BRACKET || tok == token::TOKEN_RCURLY_BRACKET || tok == token::TOKEN_NULL_TYPE || tok == token::TOKEN_DHCP4 || tok == token::TOKEN_CONFIG_CONTROL || tok == token::TOKEN_CONFIG_DATABASES || tok == token::TOKEN_CONFIG_FETCH_WAIT_TIME || tok == token::TOKEN_INTERFACES_CONFIG || tok == token::TOKEN_INTERFACES || tok == token::TOKEN_DHCP_SOCKET_TYPE || tok == token::TOKEN_RAW || tok == token::TOKEN_UDP || tok == token::TOKEN_OUTBOUND_INTERFACE || tok == token::TOKEN_SAME_AS_INBOUND || tok == token::TOKEN_USE_ROUTING || tok == token::TOKEN_RE_DETECT || tok == token::TOKEN_SANITY_CHECKS || tok == token::TOKEN_LEASE_CHECKS || tok == token::TOKEN_ECHO_CLIENT_ID || tok == token::TOKEN_MATCH_CLIENT_ID || tok == token::TOKEN_AUTHORITATIVE || tok == token::TOKEN_NEXT_SERVER || tok == token::TOKEN_SERVER_HOSTNAME || tok == token::TOKEN_BOOT_FILE_NAME || tok == token::TOKEN_LEASE_DATABASE || tok == token::TOKEN_HOSTS_DATABASE || tok == token::TOKEN_HOSTS_DATABASES || tok == token::TOKEN_TYPE || tok == token::TOKEN_MEMFILE || tok == token::TOKEN_MYSQL || tok == token::TOKEN_POSTGRESQL || tok == token::TOKEN_CQL || tok == token::TOKEN_USER || tok == token::TOKEN_PASSWORD || tok == token::TOKEN_HOST || tok == token::TOKEN_PORT || tok == token::TOKEN_PERSIST || tok == token::TOKEN_LFC_INTERVAL || tok == token::TOKEN_READONLY || tok == token::TOKEN_CONNECT_TIMEOUT || tok == token::TOKEN_CONTACT_POINTS || tok == token::TOKEN_KEYSPACE || tok == token::TOKEN_CONSISTENCY || tok == token::TOKEN_SERIAL_CONSISTENCY || tok == token::TOKEN_MAX_RECONNECT_TRIES || tok == token::TOKEN_RECONNECT_WAIT_TIME || tok == token::TOKEN_REQUEST_TIMEOUT || tok == token::TOKEN_TCP_KEEPALIVE || tok == token::TOKEN_TCP_NODELAY || tok == token::TOKEN_MAX_ROW_ERRORS || tok == token::TOKEN_VALID_LIFETIME || tok == token::TOKEN_MIN_VALID_LIFETIME || tok == token::TOKEN_MAX_VALID_LIFETIME || tok == token::TOKEN_RENEW_TIMER || tok == token::TOKEN_REBIND_TIMER || tok == token::TOKEN_CALCULATE_TEE_TIMES || tok == token::TOKEN_T1_PERCENT || tok == token::TOKEN_T2_PERCENT || tok == token::TOKEN_DECLINE_PROBATION_PERIOD || tok == token::TOKEN_SERVER_TAG || tok == token::TOKEN_SUBNET4 || tok == token::TOKEN_SUBNET_4O6_INTERFACE || tok == token::TOKEN_SUBNET_4O6_INTERFACE_ID || tok == token::TOKEN_SUBNET_4O6_SUBNET || tok == token::TOKEN_OPTION_DEF || tok == token::TOKEN_OPTION_DATA || tok == token::TOKEN_NAME || tok == token::TOKEN_DATA || tok == token::TOKEN_CODE || tok == token::TOKEN_SPACE || tok == token::TOKEN_CSV_FORMAT || tok == token::TOKEN_ALWAYS_SEND || tok == token::TOKEN_RECORD_TYPES || tok == token::TOKEN_ENCAPSULATE || tok == token::TOKEN_ARRAY || tok == token::TOKEN_SHARED_NETWORKS || tok == token::TOKEN_POOLS || tok == token::TOKEN_POOL || tok == token::TOKEN_USER_CONTEXT || tok == token::TOKEN_COMMENT || tok == token::TOKEN_SUBNET || tok == token::TOKEN_INTERFACE || tok == token::TOKEN_ID || tok == token::TOKEN_RESERVATION_MODE || tok == token::TOKEN_DISABLED || tok == token::TOKEN_OUT_OF_POOL || tok == token::TOKEN_GLOBAL || tok == token::TOKEN_ALL || tok == token::TOKEN_HOST_RESERVATION_IDENTIFIERS || tok == token::TOKEN_CLIENT_CLASSES || tok == token::TOKEN_REQUIRE_CLIENT_CLASSES || tok == token::TOKEN_TEST || tok == token::TOKEN_ONLY_IF_REQUIRED || tok == token::TOKEN_CLIENT_CLASS || tok == token::TOKEN_RESERVATIONS || tok == token::TOKEN_DUID || tok == token::TOKEN_HW_ADDRESS || tok == token::TOKEN_CIRCUIT_ID || tok == token::TOKEN_CLIENT_ID || tok == token::TOKEN_HOSTNAME || tok == token::TOKEN_FLEX_ID || tok == token::TOKEN_RELAY || tok == token::TOKEN_IP_ADDRESS || tok == token::TOKEN_IP_ADDRESSES || tok == token::TOKEN_HOOKS_LIBRARIES || tok == token::TOKEN_LIBRARY || tok == token::TOKEN_PARAMETERS || tok == token::TOKEN_EXPIRED_LEASES_PROCESSING || tok == token::TOKEN_RECLAIM_TIMER_WAIT_TIME || tok == token::TOKEN_FLUSH_RECLAIMED_TIMER_WAIT_TIME || tok == token::TOKEN_HOLD_RECLAIMED_TIME || tok == token::TOKEN_MAX_RECLAIM_LEASES || tok == token::TOKEN_MAX_RECLAIM_TIME || tok == token::TOKEN_UNWARNED_RECLAIM_CYCLES || tok == token::TOKEN_DHCP4O6_PORT || tok == token::TOKEN_CONTROL_SOCKET || tok == token::TOKEN_SOCKET_TYPE || tok == token::TOKEN_SOCKET_NAME || tok == token::TOKEN_DHCP_QUEUE_CONTROL || tok == token::TOKEN_DHCP_DDNS || tok == token::TOKEN_ENABLE_UPDATES || tok == token::TOKEN_QUALIFYING_SUFFIX || tok == token::TOKEN_SERVER_IP || tok == token::TOKEN_SERVER_PORT || tok == token::TOKEN_SENDER_IP || tok == token::TOKEN_SENDER_PORT || tok == token::TOKEN_MAX_QUEUE_SIZE || tok == token::TOKEN_NCR_PROTOCOL || tok == token::TOKEN_NCR_FORMAT || tok == token::TOKEN_OVERRIDE_NO_UPDATE || tok == token::TOKEN_OVERRIDE_CLIENT_UPDATE || tok == token::TOKEN_REPLACE_CLIENT_NAME || tok == token::TOKEN_GENERATED_PREFIX || tok == token::TOKEN_TCP || tok == token::TOKEN_JSON || tok == token::TOKEN_WHEN_PRESENT || tok == token::TOKEN_NEVER || tok == token::TOKEN_ALWAYS || tok == token::TOKEN_WHEN_NOT_PRESENT || tok == token::TOKEN_HOSTNAME_CHAR_SET || tok == token::TOKEN_HOSTNAME_CHAR_REPLACEMENT || tok == token::TOKEN_LOGGING || tok == token::TOKEN_LOGGERS || tok == token::TOKEN_OUTPUT_OPTIONS || tok == token::TOKEN_OUTPUT || tok == token::TOKEN_DEBUGLEVEL || tok == token::TOKEN_SEVERITY || tok == token::TOKEN_FLUSH || tok == token::TOKEN_MAXSIZE || tok == token::TOKEN_MAXVER || tok == token::TOKEN_PATTERN || tok == token::TOKEN_DHCP6 || tok == token::TOKEN_DHCPDDNS || tok == token::TOKEN_CONTROL_AGENT || tok == token::TOKEN_TOPLEVEL_JSON || tok == token::TOKEN_TOPLEVEL_DHCP4 || tok == token::TOKEN_SUB_DHCP4 || tok == token::TOKEN_SUB_INTERFACES4 || tok == token::TOKEN_SUB_SUBNET4 || tok == token::TOKEN_SUB_POOL4 || tok == token::TOKEN_SUB_RESERVATION || tok == token::TOKEN_SUB_OPTION_DEFS || tok == token::TOKEN_SUB_OPTION_DEF || tok == token::TOKEN_SUB_OPTION_DATA || tok == token::TOKEN_SUB_HOOKS_LIBRARY || tok == token::TOKEN_SUB_DHCP_DDNS || tok == token::TOKEN_SUB_LOGGING || tok == token::TOKEN_SUB_CONFIG_CONTROL);
-      }
-#else
-      symbol_type (int tok, const location_type& l)
-        : super_type(token_type (tok), l)
-      {
-        YYASSERT (tok == token::TOKEN_END || tok == token::TOKEN_COMMA || tok == token::TOKEN_COLON || tok == token::TOKEN_LSQUARE_BRACKET || tok == token::TOKEN_RSQUARE_BRACKET || tok == token::TOKEN_LCURLY_BRACKET || tok == token::TOKEN_RCURLY_BRACKET || tok == token::TOKEN_NULL_TYPE || tok == token::TOKEN_DHCP4 || tok == token::TOKEN_CONFIG_CONTROL || tok == token::TOKEN_CONFIG_DATABASES || tok == token::TOKEN_CONFIG_FETCH_WAIT_TIME || tok == token::TOKEN_INTERFACES_CONFIG || tok == token::TOKEN_INTERFACES || tok == token::TOKEN_DHCP_SOCKET_TYPE || tok == token::TOKEN_RAW || tok == token::TOKEN_UDP || tok == token::TOKEN_OUTBOUND_INTERFACE || tok == token::TOKEN_SAME_AS_INBOUND || tok == token::TOKEN_USE_ROUTING || tok == token::TOKEN_RE_DETECT || tok == token::TOKEN_SANITY_CHECKS || tok == token::TOKEN_LEASE_CHECKS || tok == token::TOKEN_ECHO_CLIENT_ID || tok == token::TOKEN_MATCH_CLIENT_ID || tok == token::TOKEN_AUTHORITATIVE || tok == token::TOKEN_NEXT_SERVER || tok == token::TOKEN_SERVER_HOSTNAME || tok == token::TOKEN_BOOT_FILE_NAME || tok == token::TOKEN_LEASE_DATABASE || tok == token::TOKEN_HOSTS_DATABASE || tok == token::TOKEN_HOSTS_DATABASES || tok == token::TOKEN_TYPE || tok == token::TOKEN_MEMFILE || tok == token::TOKEN_MYSQL || tok == token::TOKEN_POSTGRESQL || tok == token::TOKEN_CQL || tok == token::TOKEN_USER || tok == token::TOKEN_PASSWORD || tok == token::TOKEN_HOST || tok == token::TOKEN_PORT || tok == token::TOKEN_PERSIST || tok == token::TOKEN_LFC_INTERVAL || tok == token::TOKEN_READONLY || tok == token::TOKEN_CONNECT_TIMEOUT || tok == token::TOKEN_CONTACT_POINTS || tok == token::TOKEN_KEYSPACE || tok == token::TOKEN_CONSISTENCY || tok == token::TOKEN_SERIAL_CONSISTENCY || tok == token::TOKEN_MAX_RECONNECT_TRIES || tok == token::TOKEN_RECONNECT_WAIT_TIME || tok == token::TOKEN_REQUEST_TIMEOUT || tok == token::TOKEN_TCP_KEEPALIVE || tok == token::TOKEN_TCP_NODELAY || tok == token::TOKEN_MAX_ROW_ERRORS || tok == token::TOKEN_VALID_LIFETIME || tok == token::TOKEN_MIN_VALID_LIFETIME || tok == token::TOKEN_MAX_VALID_LIFETIME || tok == token::TOKEN_RENEW_TIMER || tok == token::TOKEN_REBIND_TIMER || tok == token::TOKEN_CALCULATE_TEE_TIMES || tok == token::TOKEN_T1_PERCENT || tok == token::TOKEN_T2_PERCENT || tok == token::TOKEN_DECLINE_PROBATION_PERIOD || tok == token::TOKEN_SERVER_TAG || tok == token::TOKEN_SUBNET4 || tok == token::TOKEN_SUBNET_4O6_INTERFACE || tok == token::TOKEN_SUBNET_4O6_INTERFACE_ID || tok == token::TOKEN_SUBNET_4O6_SUBNET || tok == token::TOKEN_OPTION_DEF || tok == token::TOKEN_OPTION_DATA || tok == token::TOKEN_NAME || tok == token::TOKEN_DATA || tok == token::TOKEN_CODE || tok == token::TOKEN_SPACE || tok == token::TOKEN_CSV_FORMAT || tok == token::TOKEN_ALWAYS_SEND || tok == token::TOKEN_RECORD_TYPES || tok == token::TOKEN_ENCAPSULATE || tok == token::TOKEN_ARRAY || tok == token::TOKEN_SHARED_NETWORKS || tok == token::TOKEN_POOLS || tok == token::TOKEN_POOL || tok == token::TOKEN_USER_CONTEXT || tok == token::TOKEN_COMMENT || tok == token::TOKEN_SUBNET || tok == token::TOKEN_INTERFACE || tok == token::TOKEN_ID || tok == token::TOKEN_RESERVATION_MODE || tok == token::TOKEN_DISABLED || tok == token::TOKEN_OUT_OF_POOL || tok == token::TOKEN_GLOBAL || tok == token::TOKEN_ALL || tok == token::TOKEN_HOST_RESERVATION_IDENTIFIERS || tok == token::TOKEN_CLIENT_CLASSES || tok == token::TOKEN_REQUIRE_CLIENT_CLASSES || tok == token::TOKEN_TEST || tok == token::TOKEN_ONLY_IF_REQUIRED || tok == token::TOKEN_CLIENT_CLASS || tok == token::TOKEN_RESERVATIONS || tok == token::TOKEN_DUID || tok == token::TOKEN_HW_ADDRESS || tok == token::TOKEN_CIRCUIT_ID || tok == token::TOKEN_CLIENT_ID || tok == token::TOKEN_HOSTNAME || tok == token::TOKEN_FLEX_ID || tok == token::TOKEN_RELAY || tok == token::TOKEN_IP_ADDRESS || tok == token::TOKEN_IP_ADDRESSES || tok == token::TOKEN_HOOKS_LIBRARIES || tok == token::TOKEN_LIBRARY || tok == token::TOKEN_PARAMETERS || tok == token::TOKEN_EXPIRED_LEASES_PROCESSING || tok == token::TOKEN_RECLAIM_TIMER_WAIT_TIME || tok == token::TOKEN_FLUSH_RECLAIMED_TIMER_WAIT_TIME || tok == token::TOKEN_HOLD_RECLAIMED_TIME || tok == token::TOKEN_MAX_RECLAIM_LEASES || tok == token::TOKEN_MAX_RECLAIM_TIME || tok == token::TOKEN_UNWARNED_RECLAIM_CYCLES || tok == token::TOKEN_DHCP4O6_PORT || tok == token::TOKEN_CONTROL_SOCKET || tok == token::TOKEN_SOCKET_TYPE || tok == token::TOKEN_SOCKET_NAME || tok == token::TOKEN_DHCP_QUEUE_CONTROL || tok == token::TOKEN_DHCP_DDNS || tok == token::TOKEN_ENABLE_UPDATES || tok == token::TOKEN_QUALIFYING_SUFFIX || tok == token::TOKEN_SERVER_IP || tok == token::TOKEN_SERVER_PORT || tok == token::TOKEN_SENDER_IP || tok == token::TOKEN_SENDER_PORT || tok == token::TOKEN_MAX_QUEUE_SIZE || tok == token::TOKEN_NCR_PROTOCOL || tok == token::TOKEN_NCR_FORMAT || tok == token::TOKEN_OVERRIDE_NO_UPDATE || tok == token::TOKEN_OVERRIDE_CLIENT_UPDATE || tok == token::TOKEN_REPLACE_CLIENT_NAME || tok == token::TOKEN_GENERATED_PREFIX || tok == token::TOKEN_TCP || tok == token::TOKEN_JSON || tok == token::TOKEN_WHEN_PRESENT || tok == token::TOKEN_NEVER || tok == token::TOKEN_ALWAYS || tok == token::TOKEN_WHEN_NOT_PRESENT || tok == token::TOKEN_HOSTNAME_CHAR_SET || tok == token::TOKEN_HOSTNAME_CHAR_REPLACEMENT || tok == token::TOKEN_LOGGING || tok == token::TOKEN_LOGGERS || tok == token::TOKEN_OUTPUT_OPTIONS || tok == token::TOKEN_OUTPUT || tok == token::TOKEN_DEBUGLEVEL || tok == token::TOKEN_SEVERITY || tok == token::TOKEN_FLUSH || tok == token::TOKEN_MAXSIZE || tok == token::TOKEN_MAXVER || tok == token::TOKEN_PATTERN || tok == token::TOKEN_DHCP6 || tok == token::TOKEN_DHCPDDNS || tok == token::TOKEN_CONTROL_AGENT || tok == token::TOKEN_TOPLEVEL_JSON || tok == token::TOKEN_TOPLEVEL_DHCP4 || tok == token::TOKEN_SUB_DHCP4 || tok == token::TOKEN_SUB_INTERFACES4 || tok == token::TOKEN_SUB_SUBNET4 || tok == token::TOKEN_SUB_POOL4 || tok == token::TOKEN_SUB_RESERVATION || tok == token::TOKEN_SUB_OPTION_DEFS || tok == token::TOKEN_SUB_OPTION_DEF || tok == token::TOKEN_SUB_OPTION_DATA || tok == token::TOKEN_SUB_HOOKS_LIBRARY || tok == token::TOKEN_SUB_DHCP_DDNS || tok == token::TOKEN_SUB_LOGGING || tok == token::TOKEN_SUB_CONFIG_CONTROL);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      symbol_type (int tok, bool v, location_type l)
-        : super_type(token_type (tok), std::move (v), std::move (l))
-      {
-        YYASSERT (tok == token::TOKEN_BOOLEAN);
-      }
-#else
-      symbol_type (int tok, const bool& v, const location_type& l)
-        : super_type(token_type (tok), v, l)
-      {
-        YYASSERT (tok == token::TOKEN_BOOLEAN);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      symbol_type (int tok, double v, location_type l)
-        : super_type(token_type (tok), std::move (v), std::move (l))
-      {
-        YYASSERT (tok == token::TOKEN_FLOAT);
-      }
-#else
-      symbol_type (int tok, const double& v, const location_type& l)
-        : super_type(token_type (tok), v, l)
-      {
-        YYASSERT (tok == token::TOKEN_FLOAT);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      symbol_type (int tok, int64_t v, location_type l)
-        : super_type(token_type (tok), std::move (v), std::move (l))
-      {
-        YYASSERT (tok == token::TOKEN_INTEGER);
-      }
-#else
-      symbol_type (int tok, const int64_t& v, const location_type& l)
-        : super_type(token_type (tok), v, l)
-      {
-        YYASSERT (tok == token::TOKEN_INTEGER);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      symbol_type (int tok, std::string v, location_type l)
-        : super_type(token_type (tok), std::move (v), std::move (l))
-      {
-        YYASSERT (tok == token::TOKEN_STRING);
-      }
-#else
-      symbol_type (int tok, const std::string& v, const location_type& l)
-        : super_type(token_type (tok), v, l)
-      {
-        YYASSERT (tok == token::TOKEN_STRING);
-      }
-#endif
-    };
+    typedef basic_symbol<by_type> symbol_type;
 
     /// Build a parser object.
     Dhcp4Parser (isc::dhcp::Parser4Context& ctx_yyarg);
@@ -973,3266 +858,2561 @@ switch (yytype)
     /// Report a syntax error.
     void error (const syntax_error& err);
 
-    // Implementation of make_symbol for each symbol type.
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_END (location_type l)
-      {
-        return symbol_type (token::TOKEN_END, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_END (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_END, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_COMMA (location_type l)
-      {
-        return symbol_type (token::TOKEN_COMMA, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_COMMA (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_COMMA, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_COLON (location_type l)
-      {
-        return symbol_type (token::TOKEN_COLON, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_COLON (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_COLON, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_LSQUARE_BRACKET (location_type l)
-      {
-        return symbol_type (token::TOKEN_LSQUARE_BRACKET, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_LSQUARE_BRACKET (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_LSQUARE_BRACKET, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_RSQUARE_BRACKET (location_type l)
-      {
-        return symbol_type (token::TOKEN_RSQUARE_BRACKET, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_RSQUARE_BRACKET (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_RSQUARE_BRACKET, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_LCURLY_BRACKET (location_type l)
-      {
-        return symbol_type (token::TOKEN_LCURLY_BRACKET, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_LCURLY_BRACKET (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_LCURLY_BRACKET, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_RCURLY_BRACKET (location_type l)
-      {
-        return symbol_type (token::TOKEN_RCURLY_BRACKET, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_RCURLY_BRACKET (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_RCURLY_BRACKET, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_NULL_TYPE (location_type l)
-      {
-        return symbol_type (token::TOKEN_NULL_TYPE, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_NULL_TYPE (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_NULL_TYPE, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_DHCP4 (location_type l)
-      {
-        return symbol_type (token::TOKEN_DHCP4, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_DHCP4 (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_DHCP4, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_CONFIG_CONTROL (location_type l)
-      {
-        return symbol_type (token::TOKEN_CONFIG_CONTROL, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_CONFIG_CONTROL (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_CONFIG_CONTROL, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_CONFIG_DATABASES (location_type l)
-      {
-        return symbol_type (token::TOKEN_CONFIG_DATABASES, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_CONFIG_DATABASES (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_CONFIG_DATABASES, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_CONFIG_FETCH_WAIT_TIME (location_type l)
-      {
-        return symbol_type (token::TOKEN_CONFIG_FETCH_WAIT_TIME, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_CONFIG_FETCH_WAIT_TIME (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_CONFIG_FETCH_WAIT_TIME, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_INTERFACES_CONFIG (location_type l)
-      {
-        return symbol_type (token::TOKEN_INTERFACES_CONFIG, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_INTERFACES_CONFIG (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_INTERFACES_CONFIG, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_INTERFACES (location_type l)
-      {
-        return symbol_type (token::TOKEN_INTERFACES, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_INTERFACES (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_INTERFACES, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_DHCP_SOCKET_TYPE (location_type l)
-      {
-        return symbol_type (token::TOKEN_DHCP_SOCKET_TYPE, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_DHCP_SOCKET_TYPE (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_DHCP_SOCKET_TYPE, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_RAW (location_type l)
-      {
-        return symbol_type (token::TOKEN_RAW, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_RAW (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_RAW, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_UDP (location_type l)
-      {
-        return symbol_type (token::TOKEN_UDP, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_UDP (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_UDP, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_OUTBOUND_INTERFACE (location_type l)
-      {
-        return symbol_type (token::TOKEN_OUTBOUND_INTERFACE, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_OUTBOUND_INTERFACE (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_OUTBOUND_INTERFACE, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_SAME_AS_INBOUND (location_type l)
-      {
-        return symbol_type (token::TOKEN_SAME_AS_INBOUND, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_SAME_AS_INBOUND (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_SAME_AS_INBOUND, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_USE_ROUTING (location_type l)
-      {
-        return symbol_type (token::TOKEN_USE_ROUTING, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_USE_ROUTING (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_USE_ROUTING, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_RE_DETECT (location_type l)
-      {
-        return symbol_type (token::TOKEN_RE_DETECT, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_RE_DETECT (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_RE_DETECT, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_SANITY_CHECKS (location_type l)
-      {
-        return symbol_type (token::TOKEN_SANITY_CHECKS, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_SANITY_CHECKS (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_SANITY_CHECKS, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_LEASE_CHECKS (location_type l)
-      {
-        return symbol_type (token::TOKEN_LEASE_CHECKS, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_LEASE_CHECKS (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_LEASE_CHECKS, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_ECHO_CLIENT_ID (location_type l)
-      {
-        return symbol_type (token::TOKEN_ECHO_CLIENT_ID, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_ECHO_CLIENT_ID (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_ECHO_CLIENT_ID, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_MATCH_CLIENT_ID (location_type l)
-      {
-        return symbol_type (token::TOKEN_MATCH_CLIENT_ID, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_MATCH_CLIENT_ID (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_MATCH_CLIENT_ID, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_AUTHORITATIVE (location_type l)
-      {
-        return symbol_type (token::TOKEN_AUTHORITATIVE, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_AUTHORITATIVE (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_AUTHORITATIVE, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_NEXT_SERVER (location_type l)
-      {
-        return symbol_type (token::TOKEN_NEXT_SERVER, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_NEXT_SERVER (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_NEXT_SERVER, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_SERVER_HOSTNAME (location_type l)
-      {
-        return symbol_type (token::TOKEN_SERVER_HOSTNAME, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_SERVER_HOSTNAME (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_SERVER_HOSTNAME, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_BOOT_FILE_NAME (location_type l)
-      {
-        return symbol_type (token::TOKEN_BOOT_FILE_NAME, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_BOOT_FILE_NAME (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_BOOT_FILE_NAME, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_LEASE_DATABASE (location_type l)
-      {
-        return symbol_type (token::TOKEN_LEASE_DATABASE, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_LEASE_DATABASE (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_LEASE_DATABASE, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_HOSTS_DATABASE (location_type l)
-      {
-        return symbol_type (token::TOKEN_HOSTS_DATABASE, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_HOSTS_DATABASE (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_HOSTS_DATABASE, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_HOSTS_DATABASES (location_type l)
-      {
-        return symbol_type (token::TOKEN_HOSTS_DATABASES, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_HOSTS_DATABASES (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_HOSTS_DATABASES, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_TYPE (location_type l)
-      {
-        return symbol_type (token::TOKEN_TYPE, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_TYPE (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_TYPE, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_MEMFILE (location_type l)
-      {
-        return symbol_type (token::TOKEN_MEMFILE, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_MEMFILE (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_MEMFILE, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_MYSQL (location_type l)
-      {
-        return symbol_type (token::TOKEN_MYSQL, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_MYSQL (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_MYSQL, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_POSTGRESQL (location_type l)
-      {
-        return symbol_type (token::TOKEN_POSTGRESQL, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_POSTGRESQL (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_POSTGRESQL, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_CQL (location_type l)
-      {
-        return symbol_type (token::TOKEN_CQL, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_CQL (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_CQL, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_USER (location_type l)
-      {
-        return symbol_type (token::TOKEN_USER, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_USER (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_USER, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_PASSWORD (location_type l)
-      {
-        return symbol_type (token::TOKEN_PASSWORD, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_PASSWORD (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_PASSWORD, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_HOST (location_type l)
-      {
-        return symbol_type (token::TOKEN_HOST, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_HOST (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_HOST, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_PORT (location_type l)
-      {
-        return symbol_type (token::TOKEN_PORT, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_PORT (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_PORT, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_PERSIST (location_type l)
-      {
-        return symbol_type (token::TOKEN_PERSIST, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_PERSIST (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_PERSIST, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_LFC_INTERVAL (location_type l)
-      {
-        return symbol_type (token::TOKEN_LFC_INTERVAL, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_LFC_INTERVAL (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_LFC_INTERVAL, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_READONLY (location_type l)
-      {
-        return symbol_type (token::TOKEN_READONLY, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_READONLY (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_READONLY, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_CONNECT_TIMEOUT (location_type l)
-      {
-        return symbol_type (token::TOKEN_CONNECT_TIMEOUT, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_CONNECT_TIMEOUT (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_CONNECT_TIMEOUT, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_CONTACT_POINTS (location_type l)
-      {
-        return symbol_type (token::TOKEN_CONTACT_POINTS, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_CONTACT_POINTS (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_CONTACT_POINTS, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_KEYSPACE (location_type l)
-      {
-        return symbol_type (token::TOKEN_KEYSPACE, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_KEYSPACE (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_KEYSPACE, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_CONSISTENCY (location_type l)
-      {
-        return symbol_type (token::TOKEN_CONSISTENCY, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_CONSISTENCY (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_CONSISTENCY, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_SERIAL_CONSISTENCY (location_type l)
-      {
-        return symbol_type (token::TOKEN_SERIAL_CONSISTENCY, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_SERIAL_CONSISTENCY (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_SERIAL_CONSISTENCY, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_MAX_RECONNECT_TRIES (location_type l)
-      {
-        return symbol_type (token::TOKEN_MAX_RECONNECT_TRIES, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_MAX_RECONNECT_TRIES (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_MAX_RECONNECT_TRIES, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_RECONNECT_WAIT_TIME (location_type l)
-      {
-        return symbol_type (token::TOKEN_RECONNECT_WAIT_TIME, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_RECONNECT_WAIT_TIME (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_RECONNECT_WAIT_TIME, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_REQUEST_TIMEOUT (location_type l)
-      {
-        return symbol_type (token::TOKEN_REQUEST_TIMEOUT, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_REQUEST_TIMEOUT (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_REQUEST_TIMEOUT, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_TCP_KEEPALIVE (location_type l)
-      {
-        return symbol_type (token::TOKEN_TCP_KEEPALIVE, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_TCP_KEEPALIVE (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_TCP_KEEPALIVE, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_TCP_NODELAY (location_type l)
-      {
-        return symbol_type (token::TOKEN_TCP_NODELAY, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_TCP_NODELAY (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_TCP_NODELAY, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_MAX_ROW_ERRORS (location_type l)
-      {
-        return symbol_type (token::TOKEN_MAX_ROW_ERRORS, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_MAX_ROW_ERRORS (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_MAX_ROW_ERRORS, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_VALID_LIFETIME (location_type l)
-      {
-        return symbol_type (token::TOKEN_VALID_LIFETIME, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_VALID_LIFETIME (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_VALID_LIFETIME, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_MIN_VALID_LIFETIME (location_type l)
-      {
-        return symbol_type (token::TOKEN_MIN_VALID_LIFETIME, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_MIN_VALID_LIFETIME (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_MIN_VALID_LIFETIME, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_MAX_VALID_LIFETIME (location_type l)
-      {
-        return symbol_type (token::TOKEN_MAX_VALID_LIFETIME, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_MAX_VALID_LIFETIME (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_MAX_VALID_LIFETIME, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_RENEW_TIMER (location_type l)
-      {
-        return symbol_type (token::TOKEN_RENEW_TIMER, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_RENEW_TIMER (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_RENEW_TIMER, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_REBIND_TIMER (location_type l)
-      {
-        return symbol_type (token::TOKEN_REBIND_TIMER, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_REBIND_TIMER (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_REBIND_TIMER, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_CALCULATE_TEE_TIMES (location_type l)
-      {
-        return symbol_type (token::TOKEN_CALCULATE_TEE_TIMES, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_CALCULATE_TEE_TIMES (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_CALCULATE_TEE_TIMES, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_T1_PERCENT (location_type l)
-      {
-        return symbol_type (token::TOKEN_T1_PERCENT, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_T1_PERCENT (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_T1_PERCENT, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_T2_PERCENT (location_type l)
-      {
-        return symbol_type (token::TOKEN_T2_PERCENT, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_T2_PERCENT (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_T2_PERCENT, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_DECLINE_PROBATION_PERIOD (location_type l)
-      {
-        return symbol_type (token::TOKEN_DECLINE_PROBATION_PERIOD, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_DECLINE_PROBATION_PERIOD (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_DECLINE_PROBATION_PERIOD, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_SERVER_TAG (location_type l)
-      {
-        return symbol_type (token::TOKEN_SERVER_TAG, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_SERVER_TAG (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_SERVER_TAG, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_SUBNET4 (location_type l)
-      {
-        return symbol_type (token::TOKEN_SUBNET4, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_SUBNET4 (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_SUBNET4, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_SUBNET_4O6_INTERFACE (location_type l)
-      {
-        return symbol_type (token::TOKEN_SUBNET_4O6_INTERFACE, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_SUBNET_4O6_INTERFACE (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_SUBNET_4O6_INTERFACE, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_SUBNET_4O6_INTERFACE_ID (location_type l)
-      {
-        return symbol_type (token::TOKEN_SUBNET_4O6_INTERFACE_ID, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_SUBNET_4O6_INTERFACE_ID (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_SUBNET_4O6_INTERFACE_ID, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_SUBNET_4O6_SUBNET (location_type l)
-      {
-        return symbol_type (token::TOKEN_SUBNET_4O6_SUBNET, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_SUBNET_4O6_SUBNET (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_SUBNET_4O6_SUBNET, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_OPTION_DEF (location_type l)
-      {
-        return symbol_type (token::TOKEN_OPTION_DEF, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_OPTION_DEF (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_OPTION_DEF, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_OPTION_DATA (location_type l)
-      {
-        return symbol_type (token::TOKEN_OPTION_DATA, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_OPTION_DATA (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_OPTION_DATA, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_NAME (location_type l)
-      {
-        return symbol_type (token::TOKEN_NAME, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_NAME (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_NAME, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_DATA (location_type l)
-      {
-        return symbol_type (token::TOKEN_DATA, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_DATA (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_DATA, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_CODE (location_type l)
-      {
-        return symbol_type (token::TOKEN_CODE, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_CODE (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_CODE, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_SPACE (location_type l)
-      {
-        return symbol_type (token::TOKEN_SPACE, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_SPACE (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_SPACE, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_CSV_FORMAT (location_type l)
-      {
-        return symbol_type (token::TOKEN_CSV_FORMAT, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_CSV_FORMAT (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_CSV_FORMAT, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_ALWAYS_SEND (location_type l)
-      {
-        return symbol_type (token::TOKEN_ALWAYS_SEND, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_ALWAYS_SEND (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_ALWAYS_SEND, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_RECORD_TYPES (location_type l)
-      {
-        return symbol_type (token::TOKEN_RECORD_TYPES, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_RECORD_TYPES (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_RECORD_TYPES, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_ENCAPSULATE (location_type l)
-      {
-        return symbol_type (token::TOKEN_ENCAPSULATE, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_ENCAPSULATE (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_ENCAPSULATE, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_ARRAY (location_type l)
-      {
-        return symbol_type (token::TOKEN_ARRAY, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_ARRAY (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_ARRAY, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_SHARED_NETWORKS (location_type l)
-      {
-        return symbol_type (token::TOKEN_SHARED_NETWORKS, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_SHARED_NETWORKS (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_SHARED_NETWORKS, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_POOLS (location_type l)
-      {
-        return symbol_type (token::TOKEN_POOLS, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_POOLS (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_POOLS, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_POOL (location_type l)
-      {
-        return symbol_type (token::TOKEN_POOL, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_POOL (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_POOL, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_USER_CONTEXT (location_type l)
-      {
-        return symbol_type (token::TOKEN_USER_CONTEXT, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_USER_CONTEXT (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_USER_CONTEXT, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_COMMENT (location_type l)
-      {
-        return symbol_type (token::TOKEN_COMMENT, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_COMMENT (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_COMMENT, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_SUBNET (location_type l)
-      {
-        return symbol_type (token::TOKEN_SUBNET, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_SUBNET (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_SUBNET, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_INTERFACE (location_type l)
-      {
-        return symbol_type (token::TOKEN_INTERFACE, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_INTERFACE (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_INTERFACE, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_ID (location_type l)
-      {
-        return symbol_type (token::TOKEN_ID, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_ID (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_ID, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_RESERVATION_MODE (location_type l)
-      {
-        return symbol_type (token::TOKEN_RESERVATION_MODE, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_RESERVATION_MODE (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_RESERVATION_MODE, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_DISABLED (location_type l)
-      {
-        return symbol_type (token::TOKEN_DISABLED, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_DISABLED (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_DISABLED, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_OUT_OF_POOL (location_type l)
-      {
-        return symbol_type (token::TOKEN_OUT_OF_POOL, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_OUT_OF_POOL (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_OUT_OF_POOL, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_GLOBAL (location_type l)
-      {
-        return symbol_type (token::TOKEN_GLOBAL, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_GLOBAL (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_GLOBAL, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_ALL (location_type l)
-      {
-        return symbol_type (token::TOKEN_ALL, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_ALL (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_ALL, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_HOST_RESERVATION_IDENTIFIERS (location_type l)
-      {
-        return symbol_type (token::TOKEN_HOST_RESERVATION_IDENTIFIERS, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_HOST_RESERVATION_IDENTIFIERS (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_HOST_RESERVATION_IDENTIFIERS, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_CLIENT_CLASSES (location_type l)
-      {
-        return symbol_type (token::TOKEN_CLIENT_CLASSES, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_CLIENT_CLASSES (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_CLIENT_CLASSES, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_REQUIRE_CLIENT_CLASSES (location_type l)
-      {
-        return symbol_type (token::TOKEN_REQUIRE_CLIENT_CLASSES, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_REQUIRE_CLIENT_CLASSES (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_REQUIRE_CLIENT_CLASSES, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_TEST (location_type l)
-      {
-        return symbol_type (token::TOKEN_TEST, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_TEST (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_TEST, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_ONLY_IF_REQUIRED (location_type l)
-      {
-        return symbol_type (token::TOKEN_ONLY_IF_REQUIRED, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_ONLY_IF_REQUIRED (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_ONLY_IF_REQUIRED, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_CLIENT_CLASS (location_type l)
-      {
-        return symbol_type (token::TOKEN_CLIENT_CLASS, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_CLIENT_CLASS (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_CLIENT_CLASS, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_RESERVATIONS (location_type l)
-      {
-        return symbol_type (token::TOKEN_RESERVATIONS, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_RESERVATIONS (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_RESERVATIONS, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_DUID (location_type l)
-      {
-        return symbol_type (token::TOKEN_DUID, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_DUID (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_DUID, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_HW_ADDRESS (location_type l)
-      {
-        return symbol_type (token::TOKEN_HW_ADDRESS, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_HW_ADDRESS (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_HW_ADDRESS, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_CIRCUIT_ID (location_type l)
-      {
-        return symbol_type (token::TOKEN_CIRCUIT_ID, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_CIRCUIT_ID (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_CIRCUIT_ID, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_CLIENT_ID (location_type l)
-      {
-        return symbol_type (token::TOKEN_CLIENT_ID, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_CLIENT_ID (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_CLIENT_ID, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_HOSTNAME (location_type l)
-      {
-        return symbol_type (token::TOKEN_HOSTNAME, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_HOSTNAME (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_HOSTNAME, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_FLEX_ID (location_type l)
-      {
-        return symbol_type (token::TOKEN_FLEX_ID, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_FLEX_ID (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_FLEX_ID, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_RELAY (location_type l)
-      {
-        return symbol_type (token::TOKEN_RELAY, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_RELAY (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_RELAY, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_IP_ADDRESS (location_type l)
-      {
-        return symbol_type (token::TOKEN_IP_ADDRESS, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_IP_ADDRESS (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_IP_ADDRESS, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_IP_ADDRESSES (location_type l)
-      {
-        return symbol_type (token::TOKEN_IP_ADDRESSES, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_IP_ADDRESSES (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_IP_ADDRESSES, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_HOOKS_LIBRARIES (location_type l)
-      {
-        return symbol_type (token::TOKEN_HOOKS_LIBRARIES, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_HOOKS_LIBRARIES (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_HOOKS_LIBRARIES, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_LIBRARY (location_type l)
-      {
-        return symbol_type (token::TOKEN_LIBRARY, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_LIBRARY (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_LIBRARY, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_PARAMETERS (location_type l)
-      {
-        return symbol_type (token::TOKEN_PARAMETERS, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_PARAMETERS (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_PARAMETERS, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_EXPIRED_LEASES_PROCESSING (location_type l)
-      {
-        return symbol_type (token::TOKEN_EXPIRED_LEASES_PROCESSING, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_EXPIRED_LEASES_PROCESSING (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_EXPIRED_LEASES_PROCESSING, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_RECLAIM_TIMER_WAIT_TIME (location_type l)
-      {
-        return symbol_type (token::TOKEN_RECLAIM_TIMER_WAIT_TIME, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_RECLAIM_TIMER_WAIT_TIME (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_RECLAIM_TIMER_WAIT_TIME, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_FLUSH_RECLAIMED_TIMER_WAIT_TIME (location_type l)
-      {
-        return symbol_type (token::TOKEN_FLUSH_RECLAIMED_TIMER_WAIT_TIME, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_FLUSH_RECLAIMED_TIMER_WAIT_TIME (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_FLUSH_RECLAIMED_TIMER_WAIT_TIME, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_HOLD_RECLAIMED_TIME (location_type l)
-      {
-        return symbol_type (token::TOKEN_HOLD_RECLAIMED_TIME, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_HOLD_RECLAIMED_TIME (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_HOLD_RECLAIMED_TIME, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_MAX_RECLAIM_LEASES (location_type l)
-      {
-        return symbol_type (token::TOKEN_MAX_RECLAIM_LEASES, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_MAX_RECLAIM_LEASES (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_MAX_RECLAIM_LEASES, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_MAX_RECLAIM_TIME (location_type l)
-      {
-        return symbol_type (token::TOKEN_MAX_RECLAIM_TIME, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_MAX_RECLAIM_TIME (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_MAX_RECLAIM_TIME, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_UNWARNED_RECLAIM_CYCLES (location_type l)
-      {
-        return symbol_type (token::TOKEN_UNWARNED_RECLAIM_CYCLES, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_UNWARNED_RECLAIM_CYCLES (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_UNWARNED_RECLAIM_CYCLES, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_DHCP4O6_PORT (location_type l)
-      {
-        return symbol_type (token::TOKEN_DHCP4O6_PORT, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_DHCP4O6_PORT (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_DHCP4O6_PORT, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_CONTROL_SOCKET (location_type l)
-      {
-        return symbol_type (token::TOKEN_CONTROL_SOCKET, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_CONTROL_SOCKET (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_CONTROL_SOCKET, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_SOCKET_TYPE (location_type l)
-      {
-        return symbol_type (token::TOKEN_SOCKET_TYPE, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_SOCKET_TYPE (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_SOCKET_TYPE, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_SOCKET_NAME (location_type l)
-      {
-        return symbol_type (token::TOKEN_SOCKET_NAME, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_SOCKET_NAME (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_SOCKET_NAME, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_DHCP_QUEUE_CONTROL (location_type l)
-      {
-        return symbol_type (token::TOKEN_DHCP_QUEUE_CONTROL, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_DHCP_QUEUE_CONTROL (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_DHCP_QUEUE_CONTROL, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_DHCP_DDNS (location_type l)
-      {
-        return symbol_type (token::TOKEN_DHCP_DDNS, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_DHCP_DDNS (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_DHCP_DDNS, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_ENABLE_UPDATES (location_type l)
-      {
-        return symbol_type (token::TOKEN_ENABLE_UPDATES, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_ENABLE_UPDATES (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_ENABLE_UPDATES, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_QUALIFYING_SUFFIX (location_type l)
-      {
-        return symbol_type (token::TOKEN_QUALIFYING_SUFFIX, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_QUALIFYING_SUFFIX (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_QUALIFYING_SUFFIX, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_SERVER_IP (location_type l)
-      {
-        return symbol_type (token::TOKEN_SERVER_IP, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_SERVER_IP (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_SERVER_IP, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_SERVER_PORT (location_type l)
-      {
-        return symbol_type (token::TOKEN_SERVER_PORT, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_SERVER_PORT (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_SERVER_PORT, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_SENDER_IP (location_type l)
-      {
-        return symbol_type (token::TOKEN_SENDER_IP, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_SENDER_IP (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_SENDER_IP, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_SENDER_PORT (location_type l)
-      {
-        return symbol_type (token::TOKEN_SENDER_PORT, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_SENDER_PORT (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_SENDER_PORT, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_MAX_QUEUE_SIZE (location_type l)
-      {
-        return symbol_type (token::TOKEN_MAX_QUEUE_SIZE, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_MAX_QUEUE_SIZE (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_MAX_QUEUE_SIZE, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_NCR_PROTOCOL (location_type l)
-      {
-        return symbol_type (token::TOKEN_NCR_PROTOCOL, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_NCR_PROTOCOL (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_NCR_PROTOCOL, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_NCR_FORMAT (location_type l)
-      {
-        return symbol_type (token::TOKEN_NCR_FORMAT, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_NCR_FORMAT (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_NCR_FORMAT, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_OVERRIDE_NO_UPDATE (location_type l)
-      {
-        return symbol_type (token::TOKEN_OVERRIDE_NO_UPDATE, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_OVERRIDE_NO_UPDATE (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_OVERRIDE_NO_UPDATE, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_OVERRIDE_CLIENT_UPDATE (location_type l)
-      {
-        return symbol_type (token::TOKEN_OVERRIDE_CLIENT_UPDATE, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_OVERRIDE_CLIENT_UPDATE (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_OVERRIDE_CLIENT_UPDATE, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_REPLACE_CLIENT_NAME (location_type l)
-      {
-        return symbol_type (token::TOKEN_REPLACE_CLIENT_NAME, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_REPLACE_CLIENT_NAME (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_REPLACE_CLIENT_NAME, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_GENERATED_PREFIX (location_type l)
-      {
-        return symbol_type (token::TOKEN_GENERATED_PREFIX, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_GENERATED_PREFIX (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_GENERATED_PREFIX, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_TCP (location_type l)
-      {
-        return symbol_type (token::TOKEN_TCP, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_TCP (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_TCP, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_JSON (location_type l)
-      {
-        return symbol_type (token::TOKEN_JSON, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_JSON (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_JSON, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_WHEN_PRESENT (location_type l)
-      {
-        return symbol_type (token::TOKEN_WHEN_PRESENT, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_WHEN_PRESENT (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_WHEN_PRESENT, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_NEVER (location_type l)
-      {
-        return symbol_type (token::TOKEN_NEVER, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_NEVER (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_NEVER, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_ALWAYS (location_type l)
-      {
-        return symbol_type (token::TOKEN_ALWAYS, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_ALWAYS (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_ALWAYS, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_WHEN_NOT_PRESENT (location_type l)
-      {
-        return symbol_type (token::TOKEN_WHEN_NOT_PRESENT, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_WHEN_NOT_PRESENT (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_WHEN_NOT_PRESENT, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_HOSTNAME_CHAR_SET (location_type l)
-      {
-        return symbol_type (token::TOKEN_HOSTNAME_CHAR_SET, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_HOSTNAME_CHAR_SET (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_HOSTNAME_CHAR_SET, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_HOSTNAME_CHAR_REPLACEMENT (location_type l)
-      {
-        return symbol_type (token::TOKEN_HOSTNAME_CHAR_REPLACEMENT, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_HOSTNAME_CHAR_REPLACEMENT (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_HOSTNAME_CHAR_REPLACEMENT, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_LOGGING (location_type l)
-      {
-        return symbol_type (token::TOKEN_LOGGING, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_LOGGING (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_LOGGING, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_LOGGERS (location_type l)
-      {
-        return symbol_type (token::TOKEN_LOGGERS, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_LOGGERS (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_LOGGERS, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_OUTPUT_OPTIONS (location_type l)
-      {
-        return symbol_type (token::TOKEN_OUTPUT_OPTIONS, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_OUTPUT_OPTIONS (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_OUTPUT_OPTIONS, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_OUTPUT (location_type l)
-      {
-        return symbol_type (token::TOKEN_OUTPUT, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_OUTPUT (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_OUTPUT, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_DEBUGLEVEL (location_type l)
-      {
-        return symbol_type (token::TOKEN_DEBUGLEVEL, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_DEBUGLEVEL (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_DEBUGLEVEL, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_SEVERITY (location_type l)
-      {
-        return symbol_type (token::TOKEN_SEVERITY, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_SEVERITY (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_SEVERITY, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_FLUSH (location_type l)
-      {
-        return symbol_type (token::TOKEN_FLUSH, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_FLUSH (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_FLUSH, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_MAXSIZE (location_type l)
-      {
-        return symbol_type (token::TOKEN_MAXSIZE, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_MAXSIZE (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_MAXSIZE, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_MAXVER (location_type l)
-      {
-        return symbol_type (token::TOKEN_MAXVER, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_MAXVER (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_MAXVER, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_PATTERN (location_type l)
-      {
-        return symbol_type (token::TOKEN_PATTERN, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_PATTERN (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_PATTERN, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_DHCP6 (location_type l)
-      {
-        return symbol_type (token::TOKEN_DHCP6, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_DHCP6 (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_DHCP6, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_DHCPDDNS (location_type l)
-      {
-        return symbol_type (token::TOKEN_DHCPDDNS, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_DHCPDDNS (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_DHCPDDNS, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_CONTROL_AGENT (location_type l)
-      {
-        return symbol_type (token::TOKEN_CONTROL_AGENT, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_CONTROL_AGENT (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_CONTROL_AGENT, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_TOPLEVEL_JSON (location_type l)
-      {
-        return symbol_type (token::TOKEN_TOPLEVEL_JSON, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_TOPLEVEL_JSON (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_TOPLEVEL_JSON, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_TOPLEVEL_DHCP4 (location_type l)
-      {
-        return symbol_type (token::TOKEN_TOPLEVEL_DHCP4, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_TOPLEVEL_DHCP4 (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_TOPLEVEL_DHCP4, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_SUB_DHCP4 (location_type l)
-      {
-        return symbol_type (token::TOKEN_SUB_DHCP4, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_SUB_DHCP4 (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_SUB_DHCP4, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_SUB_INTERFACES4 (location_type l)
-      {
-        return symbol_type (token::TOKEN_SUB_INTERFACES4, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_SUB_INTERFACES4 (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_SUB_INTERFACES4, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_SUB_SUBNET4 (location_type l)
-      {
-        return symbol_type (token::TOKEN_SUB_SUBNET4, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_SUB_SUBNET4 (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_SUB_SUBNET4, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_SUB_POOL4 (location_type l)
-      {
-        return symbol_type (token::TOKEN_SUB_POOL4, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_SUB_POOL4 (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_SUB_POOL4, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_SUB_RESERVATION (location_type l)
-      {
-        return symbol_type (token::TOKEN_SUB_RESERVATION, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_SUB_RESERVATION (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_SUB_RESERVATION, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_SUB_OPTION_DEFS (location_type l)
-      {
-        return symbol_type (token::TOKEN_SUB_OPTION_DEFS, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_SUB_OPTION_DEFS (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_SUB_OPTION_DEFS, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_SUB_OPTION_DEF (location_type l)
-      {
-        return symbol_type (token::TOKEN_SUB_OPTION_DEF, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_SUB_OPTION_DEF (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_SUB_OPTION_DEF, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_SUB_OPTION_DATA (location_type l)
-      {
-        return symbol_type (token::TOKEN_SUB_OPTION_DATA, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_SUB_OPTION_DATA (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_SUB_OPTION_DATA, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_SUB_HOOKS_LIBRARY (location_type l)
-      {
-        return symbol_type (token::TOKEN_SUB_HOOKS_LIBRARY, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_SUB_HOOKS_LIBRARY (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_SUB_HOOKS_LIBRARY, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_SUB_DHCP_DDNS (location_type l)
-      {
-        return symbol_type (token::TOKEN_SUB_DHCP_DDNS, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_SUB_DHCP_DDNS (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_SUB_DHCP_DDNS, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_SUB_LOGGING (location_type l)
-      {
-        return symbol_type (token::TOKEN_SUB_LOGGING, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_SUB_LOGGING (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_SUB_LOGGING, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_SUB_CONFIG_CONTROL (location_type l)
-      {
-        return symbol_type (token::TOKEN_SUB_CONFIG_CONTROL, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_SUB_CONFIG_CONTROL (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_SUB_CONFIG_CONTROL, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_STRING (std::string v, location_type l)
-      {
-        return symbol_type (token::TOKEN_STRING, std::move (v), std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_STRING (const std::string& v, const location_type& l)
-      {
-        return symbol_type (token::TOKEN_STRING, v, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_INTEGER (int64_t v, location_type l)
-      {
-        return symbol_type (token::TOKEN_INTEGER, std::move (v), std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_INTEGER (const int64_t& v, const location_type& l)
-      {
-        return symbol_type (token::TOKEN_INTEGER, v, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_FLOAT (double v, location_type l)
-      {
-        return symbol_type (token::TOKEN_FLOAT, std::move (v), std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_FLOAT (const double& v, const location_type& l)
-      {
-        return symbol_type (token::TOKEN_FLOAT, v, l);
-      }
+    // Symbol constructors declarations.
+    static
+    symbol_type
+    make_END (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_COMMA (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_COLON (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_LSQUARE_BRACKET (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_RSQUARE_BRACKET (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_LCURLY_BRACKET (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_RCURLY_BRACKET (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_NULL_TYPE (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_DHCP4 (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_CONFIG_CONTROL (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_CONFIG_DATABASES (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_CONFIG_FETCH_WAIT_TIME (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_INTERFACES_CONFIG (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_INTERFACES (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_DHCP_SOCKET_TYPE (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_RAW (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_UDP (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_OUTBOUND_INTERFACE (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_SAME_AS_INBOUND (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_USE_ROUTING (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_RE_DETECT (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_SANITY_CHECKS (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_LEASE_CHECKS (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_ECHO_CLIENT_ID (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_MATCH_CLIENT_ID (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_AUTHORITATIVE (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_NEXT_SERVER (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_SERVER_HOSTNAME (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_BOOT_FILE_NAME (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_LEASE_DATABASE (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_HOSTS_DATABASE (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_HOSTS_DATABASES (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_TYPE (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_MEMFILE (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_MYSQL (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_POSTGRESQL (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_CQL (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_USER (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_PASSWORD (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_HOST (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_PORT (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_PERSIST (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_LFC_INTERVAL (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_READONLY (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_CONNECT_TIMEOUT (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_CONTACT_POINTS (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_KEYSPACE (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_CONSISTENCY (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_SERIAL_CONSISTENCY (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_MAX_RECONNECT_TRIES (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_RECONNECT_WAIT_TIME (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_REQUEST_TIMEOUT (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_TCP_KEEPALIVE (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_TCP_NODELAY (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_MAX_ROW_ERRORS (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_VALID_LIFETIME (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_MIN_VALID_LIFETIME (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_MAX_VALID_LIFETIME (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_RENEW_TIMER (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_REBIND_TIMER (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_CALCULATE_TEE_TIMES (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_T1_PERCENT (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_T2_PERCENT (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_DECLINE_PROBATION_PERIOD (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_SERVER_TAG (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_DDNS_SEND_UPDATES (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_DDNS_OVERRIDE_NO_UPDATE (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_DDNS_OVERRIDE_CLIENT_UPDATE (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_DDNS_REPLACE_CLIENT_NAME (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_DDNS_GENERATED_PREFIX (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_DDNS_QUALIFYING_SUFFIX (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_SUBNET4 (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_SUBNET_4O6_INTERFACE (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_SUBNET_4O6_INTERFACE_ID (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_SUBNET_4O6_SUBNET (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_OPTION_DEF (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_OPTION_DATA (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_NAME (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_DATA (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_CODE (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_SPACE (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_CSV_FORMAT (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_ALWAYS_SEND (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_RECORD_TYPES (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_ENCAPSULATE (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_ARRAY (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_SHARED_NETWORKS (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_POOLS (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_POOL (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_USER_CONTEXT (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_COMMENT (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_SUBNET (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_INTERFACE (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_ID (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_RESERVATION_MODE (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_DISABLED (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_OUT_OF_POOL (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_GLOBAL (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_ALL (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_HOST_RESERVATION_IDENTIFIERS (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_CLIENT_CLASSES (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_REQUIRE_CLIENT_CLASSES (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_TEST (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_ONLY_IF_REQUIRED (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_CLIENT_CLASS (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_RESERVATIONS (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_DUID (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_HW_ADDRESS (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_CIRCUIT_ID (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_CLIENT_ID (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_HOSTNAME (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_FLEX_ID (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_RELAY (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_IP_ADDRESS (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_IP_ADDRESSES (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_HOOKS_LIBRARIES (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_LIBRARY (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_PARAMETERS (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_EXPIRED_LEASES_PROCESSING (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_RECLAIM_TIMER_WAIT_TIME (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_FLUSH_RECLAIMED_TIMER_WAIT_TIME (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_HOLD_RECLAIMED_TIME (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_MAX_RECLAIM_LEASES (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_MAX_RECLAIM_TIME (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_UNWARNED_RECLAIM_CYCLES (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_DHCP4O6_PORT (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_CONTROL_SOCKET (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_SOCKET_TYPE (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_SOCKET_NAME (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_DHCP_QUEUE_CONTROL (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_DHCP_DDNS (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_ENABLE_UPDATES (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_QUALIFYING_SUFFIX (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_SERVER_IP (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_SERVER_PORT (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_SENDER_IP (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_SENDER_PORT (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_MAX_QUEUE_SIZE (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_NCR_PROTOCOL (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_NCR_FORMAT (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_OVERRIDE_NO_UPDATE (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_OVERRIDE_CLIENT_UPDATE (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_REPLACE_CLIENT_NAME (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_GENERATED_PREFIX (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_TCP (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_JSON (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_WHEN_PRESENT (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_NEVER (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_ALWAYS (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_WHEN_NOT_PRESENT (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_HOSTNAME_CHAR_SET (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_HOSTNAME_CHAR_REPLACEMENT (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_LOGGING (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_LOGGERS (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_OUTPUT_OPTIONS (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_OUTPUT (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_DEBUGLEVEL (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_SEVERITY (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_FLUSH (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_MAXSIZE (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_MAXVER (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_PATTERN (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_DHCP6 (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_DHCPDDNS (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_CONTROL_AGENT (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_TOPLEVEL_JSON (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_TOPLEVEL_DHCP4 (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_SUB_DHCP4 (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_SUB_INTERFACES4 (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_SUB_SUBNET4 (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_SUB_POOL4 (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_SUB_RESERVATION (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_SUB_OPTION_DEFS (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_SUB_OPTION_DEF (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_SUB_OPTION_DATA (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_SUB_HOOKS_LIBRARY (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_SUB_DHCP_DDNS (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_SUB_LOGGING (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_SUB_CONFIG_CONTROL (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_STRING (YY_COPY (std::string) v, YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_INTEGER (YY_COPY (int64_t) v, YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_FLOAT (YY_COPY (double) v, YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_BOOLEAN (YY_COPY (bool) v, YY_COPY (location_type) l);
+
+
+
+  private:
+    /// This class is not copyable.
+    Dhcp4Parser (const Dhcp4Parser&);
+    Dhcp4Parser& operator= (const Dhcp4Parser&);
+
+    /// State numbers.
+    typedef int state_type;
+
+    /// Generate an error message.
+    /// \param yystate   the state where the error occurred.
+    /// \param yyla      the lookahead token.
+    virtual std::string yysyntax_error_ (state_type yystate,
+                                         const symbol_type& yyla) const;
+
+    /// Compute post-reduction state.
+    /// \param yystate   the current state
+    /// \param yysym     the nonterminal to push on the stack
+    state_type yy_lr_goto_state_ (state_type yystate, int yysym);
+
+    /// Whether the given \c yypact_ value indicates a defaulted state.
+    /// \param yyvalue   the value to check
+    static bool yy_pact_value_is_default_ (int yyvalue);
+
+    /// Whether the given \c yytable_ value indicates a syntax error.
+    /// \param yyvalue   the value to check
+    static bool yy_table_value_is_error_ (int yyvalue);
+
+    static const short yypact_ninf_;
+    static const signed char yytable_ninf_;
+
+    /// Convert a scanner token number \a t to a symbol number.
+    static token_number_type yytranslate_ (token_type t);
+
+    // Tables.
+  // YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
+  // STATE-NUM.
+  static const short yypact_[];
+
+  // YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM.
+  // Performed when YYTABLE does not specify something else to do.  Zero
+  // means the default is an error.
+  static const unsigned short yydefact_[];
+
+  // YYPGOTO[NTERM-NUM].
+  static const short yypgoto_[];
+
+  // YYDEFGOTO[NTERM-NUM].
+  static const short yydefgoto_[];
+
+  // YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM.  If
+  // positive, shift that token.  If negative, reduce the rule whose
+  // number is the opposite.  If YYTABLE_NINF, syntax error.
+  static const unsigned short yytable_[];
+
+  static const short yycheck_[];
+
+  // YYSTOS[STATE-NUM] -- The (internal number of the) accessing
+  // symbol of state STATE-NUM.
+  static const unsigned short yystos_[];
+
+  // YYR1[YYN] -- Symbol number of symbol that rule YYN derives.
+  static const unsigned short yyr1_[];
+
+  // YYR2[YYN] -- Number of symbols on the right hand side of rule YYN.
+  static const unsigned char yyr2_[];
+
+
+    /// Convert the symbol name \a n to a form suitable for a diagnostic.
+    static std::string yytnamerr_ (const char *n);
+
+
+    /// For a symbol, its name in clear.
+    static const char* const yytname_[];
+#if PARSER4_DEBUG
+  // YYRLINE[YYN] -- Source line where rule number YYN was defined.
+  static const unsigned short yyrline_[];
+    /// Report on the debug stream that the rule \a r is going to be reduced.
+    virtual void yy_reduce_print_ (int r);
+    /// Print the state stack on the debug stream.
+    virtual void yystack_print_ ();
+
+    /// Debugging level.
+    int yydebug_;
+    /// Debug stream.
+    std::ostream* yycdebug_;
+
+    /// \brief Display a symbol type, value and location.
+    /// \param yyo    The output stream.
+    /// \param yysym  The symbol.
+    template <typename Base>
+    void yy_print_ (std::ostream& yyo, const basic_symbol<Base>& yysym) const;
 #endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_BOOLEAN (bool v, location_type l)
-      {
-        return symbol_type (token::TOKEN_BOOLEAN, std::move (v), std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_BOOLEAN (const bool& v, const location_type& l)
-      {
-        return symbol_type (token::TOKEN_BOOLEAN, v, l);
-      }
+
+    /// \brief Reclaim the memory associated to a symbol.
+    /// \param yymsg     Why this token is reclaimed.
+    ///                  If null, print nothing.
+    /// \param yysym     The symbol.
+    template <typename Base>
+    void yy_destroy_ (const char* yymsg, basic_symbol<Base>& yysym) const;
+
+  private:
+    /// Type access provider for state based symbols.
+    struct by_state
+    {
+      /// Default constructor.
+      by_state ();
+
+      /// The symbol type as needed by the constructor.
+      typedef state_type kind_type;
+
+      /// Constructor.
+      by_state (kind_type s);
+
+      /// Copy constructor.
+      by_state (const by_state& other);
+
+      /// Record that this symbol is empty.
+      void clear ();
+
+      /// Steal the symbol type from \a that.
+      void move (by_state& that);
+
+      /// The (internal) type number (corresponding to \a state).
+      /// \a empty_symbol when empty.
+      symbol_number_type type_get () const;
+
+      /// The state number used to denote an empty symbol.
+      enum { empty_state = -1 };
+
+      /// The state.
+      /// \a empty when empty.
+      state_type state;
+    };
+
+    /// "Internal" symbol: element of the stack.
+    struct stack_symbol_type : basic_symbol<by_state>
+    {
+      /// Superclass.
+      typedef basic_symbol<by_state> super_type;
+      /// Construct an empty symbol.
+      stack_symbol_type ();
+      /// Move or copy construction.
+      stack_symbol_type (YY_RVREF (stack_symbol_type) that);
+      /// Steal the contents from \a sym to build this.
+      stack_symbol_type (state_type s, YY_MOVE_REF (symbol_type) sym);
+#if !defined __cplusplus || __cplusplus < 201103L
+      /// Assignment, needed by push_back by some old implementations.
+      /// Moves the contents of that.
+      stack_symbol_type& operator= (stack_symbol_type& that);
 #endif
+    };
+
+    /// Stack type.
+    typedef stack<stack_symbol_type> stack_type;
+
+    /// The stack.
+    stack_type yystack_;
+
+    /// Push a new state on the stack.
+    /// \param m    a debug message to display
+    ///             if null, no trace is output.
+    /// \param sym  the symbol
+    /// \warning the contents of \a s.value is stolen.
+    void yypush_ (const char* m, YY_MOVE_REF (stack_symbol_type) sym);
+
+    /// Push a new look ahead token on the state on the stack.
+    /// \param m    a debug message to display
+    ///             if null, no trace is output.
+    /// \param s    the state
+    /// \param sym  the symbol (for its value and location).
+    /// \warning the contents of \a sym.value is stolen.
+    void yypush_ (const char* m, state_type s, YY_MOVE_REF (symbol_type) sym);
+
+    /// Pop \a n symbols from the stack.
+    void yypop_ (int n = 1);
+
+    /// Constants.
+    enum
+    {
+      yyeof_ = 0,
+      yylast_ = 1127,     ///< Last index in yytable_.
+      yynnts_ = 399,  ///< Number of nonterminal symbols.
+      yyfinal_ = 30, ///< Termination state number.
+      yyterror_ = 1,
+      yyerrcode_ = 256,
+      yyntokens_ = 185  ///< Number of tokens.
+    };
+
+
+    // User arguments.
+    isc::dhcp::Parser4Context& ctx;
+  };
+
+  // Symbol number corresponding to token number t.
+  inline
+  Dhcp4Parser::token_number_type
+  Dhcp4Parser::yytranslate_ (token_type t)
+  {
+    static
+    const token_number_type
+    translate_table[] =
+    {
+     0,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     1,     2,     3,     4,
+       5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
+      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
+      25,    26,    27,    28,    29,    30,    31,    32,    33,    34,
+      35,    36,    37,    38,    39,    40,    41,    42,    43,    44,
+      45,    46,    47,    48,    49,    50,    51,    52,    53,    54,
+      55,    56,    57,    58,    59,    60,    61,    62,    63,    64,
+      65,    66,    67,    68,    69,    70,    71,    72,    73,    74,
+      75,    76,    77,    78,    79,    80,    81,    82,    83,    84,
+      85,    86,    87,    88,    89,    90,    91,    92,    93,    94,
+      95,    96,    97,    98,    99,   100,   101,   102,   103,   104,
+     105,   106,   107,   108,   109,   110,   111,   112,   113,   114,
+     115,   116,   117,   118,   119,   120,   121,   122,   123,   124,
+     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,   164,
+     165,   166,   167,   168,   169,   170,   171,   172,   173,   174,
+     175,   176,   177,   178,   179,   180,   181,   182,   183,   184
+    };
+    const unsigned user_token_number_max_ = 439;
+    const token_number_type undef_token_ = 2;
+
+    if (static_cast<int> (t) <= yyeof_)
+      return yyeof_;
+    else if (static_cast<unsigned> (t) <= user_token_number_max_)
+      return translate_table[t];
+    else
+      return undef_token_;
+  }
+
+  inline
+  Dhcp4Parser::syntax_error::syntax_error (const location_type& l, const std::string& m)
+    : std::runtime_error (m)
+    , location (l)
+  {}
+
+  // basic_symbol.
+  template <typename Base>
+  Dhcp4Parser::basic_symbol<Base>::basic_symbol ()
+    : value ()
+    , location ()
+  {}
+
+  template <typename Base>
+  Dhcp4Parser::basic_symbol<Base>::basic_symbol (YY_RVREF (basic_symbol) other)
+    : Base (YY_MOVE (other))
+    , value ()
+    , location (YY_MOVE (other.location))
+  {
+    switch (other.type_get ())
+    {
+      case 201: // value
+      case 205: // map_value
+      case 246: // ddns_replace_client_name_value
+      case 265: // socket_type
+      case 268: // outbound_interface_value
+      case 290: // db_type
+      case 377: // hr_mode
+      case 524: // ncr_protocol_value
+        value.YY_MOVE_OR_COPY< ElementPtr > (YY_MOVE (other.value));
+        break;
+
+      case 184: // "boolean"
+        value.YY_MOVE_OR_COPY< bool > (YY_MOVE (other.value));
+        break;
+
+      case 183: // "floating point"
+        value.YY_MOVE_OR_COPY< double > (YY_MOVE (other.value));
+        break;
+
+      case 182: // "integer"
+        value.YY_MOVE_OR_COPY< int64_t > (YY_MOVE (other.value));
+        break;
+
+      case 181: // "constant string"
+        value.YY_MOVE_OR_COPY< std::string > (YY_MOVE (other.value));
+        break;
+
+      default:
+        break;
+    }
+
+  }
+
+
+  // Implementation of basic_symbol constructor for each type.
+  template <typename Base>
+  Dhcp4Parser::basic_symbol<Base>::basic_symbol (typename Base::kind_type t, YY_RVREF (location_type) l)
+    : Base (t)
+    , location (YY_MOVE (l))
+  {}
+
+  template <typename Base>
+  Dhcp4Parser::basic_symbol<Base>::basic_symbol (typename Base::kind_type t, YY_RVREF (ElementPtr) v, YY_RVREF (location_type) l)
+    : Base (t)
+    , value (YY_MOVE (v))
+    , location (YY_MOVE (l))
+  {}
+
+  template <typename Base>
+  Dhcp4Parser::basic_symbol<Base>::basic_symbol (typename Base::kind_type t, YY_RVREF (bool) v, YY_RVREF (location_type) l)
+    : Base (t)
+    , value (YY_MOVE (v))
+    , location (YY_MOVE (l))
+  {}
+
+  template <typename Base>
+  Dhcp4Parser::basic_symbol<Base>::basic_symbol (typename Base::kind_type t, YY_RVREF (double) v, YY_RVREF (location_type) l)
+    : Base (t)
+    , value (YY_MOVE (v))
+    , location (YY_MOVE (l))
+  {}
+
+  template <typename Base>
+  Dhcp4Parser::basic_symbol<Base>::basic_symbol (typename Base::kind_type t, YY_RVREF (int64_t) v, YY_RVREF (location_type) l)
+    : Base (t)
+    , value (YY_MOVE (v))
+    , location (YY_MOVE (l))
+  {}
+
+  template <typename Base>
+  Dhcp4Parser::basic_symbol<Base>::basic_symbol (typename Base::kind_type t, YY_RVREF (std::string) v, YY_RVREF (location_type) l)
+    : Base (t)
+    , value (YY_MOVE (v))
+    , location (YY_MOVE (l))
+  {}
+
+
+
+  template <typename Base>
+  Dhcp4Parser::basic_symbol<Base>::~basic_symbol ()
+  {
+    clear ();
+  }
+
+  template <typename Base>
+  void
+  Dhcp4Parser::basic_symbol<Base>::clear ()
+  {
+    // User destructor.
+    symbol_number_type yytype = this->type_get ();
+    basic_symbol<Base>& yysym = *this;
+    (void) yysym;
+    switch (yytype)
+    {
+   default:
+      break;
+    }
+
+    // Type destructor.
+  switch (yytype)
+    {
+      case 201: // value
+      case 205: // map_value
+      case 246: // ddns_replace_client_name_value
+      case 265: // socket_type
+      case 268: // outbound_interface_value
+      case 290: // db_type
+      case 377: // hr_mode
+      case 524: // ncr_protocol_value
+        value.template destroy< ElementPtr > ();
+        break;
+
+      case 184: // "boolean"
+        value.template destroy< bool > ();
+        break;
+
+      case 183: // "floating point"
+        value.template destroy< double > ();
+        break;
+
+      case 182: // "integer"
+        value.template destroy< int64_t > ();
+        break;
+
+      case 181: // "constant string"
+        value.template destroy< std::string > ();
+        break;
+
+      default:
+        break;
+    }
+
+    Base::clear ();
+  }
+
+  template <typename Base>
+  bool
+  Dhcp4Parser::basic_symbol<Base>::empty () const
+  {
+    return Base::type_get () == empty_symbol;
+  }
+
+  template <typename Base>
+  void
+  Dhcp4Parser::basic_symbol<Base>::move (basic_symbol& s)
+  {
+    super_type::move (s);
+    switch (this->type_get ())
+    {
+      case 201: // value
+      case 205: // map_value
+      case 246: // ddns_replace_client_name_value
+      case 265: // socket_type
+      case 268: // outbound_interface_value
+      case 290: // db_type
+      case 377: // hr_mode
+      case 524: // ncr_protocol_value
+        value.move< ElementPtr > (YY_MOVE (s.value));
+        break;
+
+      case 184: // "boolean"
+        value.move< bool > (YY_MOVE (s.value));
+        break;
+
+      case 183: // "floating point"
+        value.move< double > (YY_MOVE (s.value));
+        break;
+
+      case 182: // "integer"
+        value.move< int64_t > (YY_MOVE (s.value));
+        break;
+
+      case 181: // "constant string"
+        value.move< std::string > (YY_MOVE (s.value));
+        break;
+
+      default:
+        break;
+    }
+
+    location = YY_MOVE (s.location);
+  }
+
+  // by_type.
+  inline
+  Dhcp4Parser::by_type::by_type ()
+    : type (empty_symbol)
+  {}
+
+  inline
+  Dhcp4Parser::by_type::by_type (const by_type& other)
+    : type (other.type)
+  {}
+
+  inline
+  Dhcp4Parser::by_type::by_type (token_type t)
+    : type (yytranslate_ (t))
+  {}
+
+  inline
+  void
+  Dhcp4Parser::by_type::clear ()
+  {
+    type = empty_symbol;
+  }
+
+  inline
+  void
+  Dhcp4Parser::by_type::move (by_type& that)
+  {
+    type = that.type;
+    that.clear ();
+  }
+
+  inline
+  int
+  Dhcp4Parser::by_type::type_get () const
+  {
+    return type;
+  }
+
+  inline
+  Dhcp4Parser::token_type
+  Dhcp4Parser::by_type::token () const
+  {
+    // YYTOKNUM[NUM] -- (External) token number corresponding to the
+    // (internal) symbol number NUM (which must be that of a token).  */
+    static
+    const unsigned short
+    yytoken_number_[] =
+    {
+       0,   256,   257,   258,   259,   260,   261,   262,   263,   264,
+     265,   266,   267,   268,   269,   270,   271,   272,   273,   274,
+     275,   276,   277,   278,   279,   280,   281,   282,   283,   284,
+     285,   286,   287,   288,   289,   290,   291,   292,   293,   294,
+     295,   296,   297,   298,   299,   300,   301,   302,   303,   304,
+     305,   306,   307,   308,   309,   310,   311,   312,   313,   314,
+     315,   316,   317,   318,   319,   320,   321,   322,   323,   324,
+     325,   326,   327,   328,   329,   330,   331,   332,   333,   334,
+     335,   336,   337,   338,   339,   340,   341,   342,   343,   344,
+     345,   346,   347,   348,   349,   350,   351,   352,   353,   354,
+     355,   356,   357,   358,   359,   360,   361,   362,   363,   364,
+     365,   366,   367,   368,   369,   370,   371,   372,   373,   374,
+     375,   376,   377,   378,   379,   380,   381,   382,   383,   384,
+     385,   386,   387,   388,   389,   390,   391,   392,   393,   394,
+     395,   396,   397,   398,   399,   400,   401,   402,   403,   404,
+     405,   406,   407,   408,   409,   410,   411,   412,   413,   414,
+     415,   416,   417,   418,   419,   420,   421,   422,   423,   424,
+     425,   426,   427,   428,   429,   430,   431,   432,   433,   434,
+     435,   436,   437,   438,   439
+    };
+    return static_cast<token_type> (yytoken_number_[type]);
+  }
+
+  // Implementation of make_symbol for each symbol type.
+  inline
+  Dhcp4Parser::symbol_type
+  Dhcp4Parser::make_END (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_END, YY_MOVE (l));
+  }
+
+  inline
+  Dhcp4Parser::symbol_type
+  Dhcp4Parser::make_COMMA (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_COMMA, YY_MOVE (l));
+  }
+
+  inline
+  Dhcp4Parser::symbol_type
+  Dhcp4Parser::make_COLON (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_COLON, YY_MOVE (l));
+  }
+
+  inline
+  Dhcp4Parser::symbol_type
+  Dhcp4Parser::make_LSQUARE_BRACKET (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_LSQUARE_BRACKET, YY_MOVE (l));
+  }
+
+  inline
+  Dhcp4Parser::symbol_type
+  Dhcp4Parser::make_RSQUARE_BRACKET (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_RSQUARE_BRACKET, YY_MOVE (l));
+  }
+
+  inline
+  Dhcp4Parser::symbol_type
+  Dhcp4Parser::make_LCURLY_BRACKET (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_LCURLY_BRACKET, YY_MOVE (l));
+  }
+
+  inline
+  Dhcp4Parser::symbol_type
+  Dhcp4Parser::make_RCURLY_BRACKET (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_RCURLY_BRACKET, YY_MOVE (l));
+  }
+
+  inline
+  Dhcp4Parser::symbol_type
+  Dhcp4Parser::make_NULL_TYPE (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_NULL_TYPE, YY_MOVE (l));
+  }
+
+  inline
+  Dhcp4Parser::symbol_type
+  Dhcp4Parser::make_DHCP4 (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_DHCP4, YY_MOVE (l));
+  }
+
+  inline
+  Dhcp4Parser::symbol_type
+  Dhcp4Parser::make_CONFIG_CONTROL (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_CONFIG_CONTROL, YY_MOVE (l));
+  }
+
+  inline
+  Dhcp4Parser::symbol_type
+  Dhcp4Parser::make_CONFIG_DATABASES (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_CONFIG_DATABASES, YY_MOVE (l));
+  }
+
+  inline
+  Dhcp4Parser::symbol_type
+  Dhcp4Parser::make_CONFIG_FETCH_WAIT_TIME (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_CONFIG_FETCH_WAIT_TIME, YY_MOVE (l));
+  }
+
+  inline
+  Dhcp4Parser::symbol_type
+  Dhcp4Parser::make_INTERFACES_CONFIG (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_INTERFACES_CONFIG, YY_MOVE (l));
+  }
+
+  inline
+  Dhcp4Parser::symbol_type
+  Dhcp4Parser::make_INTERFACES (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_INTERFACES, YY_MOVE (l));
+  }
+
+  inline
+  Dhcp4Parser::symbol_type
+  Dhcp4Parser::make_DHCP_SOCKET_TYPE (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_DHCP_SOCKET_TYPE, YY_MOVE (l));
+  }
+
+  inline
+  Dhcp4Parser::symbol_type
+  Dhcp4Parser::make_RAW (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_RAW, YY_MOVE (l));
+  }
+
+  inline
+  Dhcp4Parser::symbol_type
+  Dhcp4Parser::make_UDP (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_UDP, YY_MOVE (l));
+  }
+
+  inline
+  Dhcp4Parser::symbol_type
+  Dhcp4Parser::make_OUTBOUND_INTERFACE (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_OUTBOUND_INTERFACE, YY_MOVE (l));
+  }
+
+  inline
+  Dhcp4Parser::symbol_type
+  Dhcp4Parser::make_SAME_AS_INBOUND (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_SAME_AS_INBOUND, YY_MOVE (l));
+  }
+
+  inline
+  Dhcp4Parser::symbol_type
+  Dhcp4Parser::make_USE_ROUTING (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_USE_ROUTING, YY_MOVE (l));
+  }
+
+  inline
+  Dhcp4Parser::symbol_type
+  Dhcp4Parser::make_RE_DETECT (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_RE_DETECT, YY_MOVE (l));
+  }
+
+  inline
+  Dhcp4Parser::symbol_type
+  Dhcp4Parser::make_SANITY_CHECKS (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_SANITY_CHECKS, YY_MOVE (l));
+  }
+
+  inline
+  Dhcp4Parser::symbol_type
+  Dhcp4Parser::make_LEASE_CHECKS (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_LEASE_CHECKS, YY_MOVE (l));
+  }
+
+  inline
+  Dhcp4Parser::symbol_type
+  Dhcp4Parser::make_ECHO_CLIENT_ID (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_ECHO_CLIENT_ID, YY_MOVE (l));
+  }
+
+  inline
+  Dhcp4Parser::symbol_type
+  Dhcp4Parser::make_MATCH_CLIENT_ID (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_MATCH_CLIENT_ID, YY_MOVE (l));
+  }
+
+  inline
+  Dhcp4Parser::symbol_type
+  Dhcp4Parser::make_AUTHORITATIVE (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_AUTHORITATIVE, YY_MOVE (l));
+  }
+
+  inline
+  Dhcp4Parser::symbol_type
+  Dhcp4Parser::make_NEXT_SERVER (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_NEXT_SERVER, YY_MOVE (l));
+  }
+
+  inline
+  Dhcp4Parser::symbol_type
+  Dhcp4Parser::make_SERVER_HOSTNAME (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_SERVER_HOSTNAME, YY_MOVE (l));
+  }
+
+  inline
+  Dhcp4Parser::symbol_type
+  Dhcp4Parser::make_BOOT_FILE_NAME (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_BOOT_FILE_NAME, YY_MOVE (l));
+  }
+
+  inline
+  Dhcp4Parser::symbol_type
+  Dhcp4Parser::make_LEASE_DATABASE (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_LEASE_DATABASE, YY_MOVE (l));
+  }
+
+  inline
+  Dhcp4Parser::symbol_type
+  Dhcp4Parser::make_HOSTS_DATABASE (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_HOSTS_DATABASE, YY_MOVE (l));
+  }
+
+  inline
+  Dhcp4Parser::symbol_type
+  Dhcp4Parser::make_HOSTS_DATABASES (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_HOSTS_DATABASES, YY_MOVE (l));
+  }
+
+  inline
+  Dhcp4Parser::symbol_type
+  Dhcp4Parser::make_TYPE (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_TYPE, YY_MOVE (l));
+  }
+
+  inline
+  Dhcp4Parser::symbol_type
+  Dhcp4Parser::make_MEMFILE (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_MEMFILE, YY_MOVE (l));
+  }
+
+  inline
+  Dhcp4Parser::symbol_type
+  Dhcp4Parser::make_MYSQL (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_MYSQL, YY_MOVE (l));
+  }
+
+  inline
+  Dhcp4Parser::symbol_type
+  Dhcp4Parser::make_POSTGRESQL (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_POSTGRESQL, YY_MOVE (l));
+  }
+
+  inline
+  Dhcp4Parser::symbol_type
+  Dhcp4Parser::make_CQL (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_CQL, YY_MOVE (l));
+  }
+
+  inline
+  Dhcp4Parser::symbol_type
+  Dhcp4Parser::make_USER (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_USER, YY_MOVE (l));
+  }
+
+  inline
+  Dhcp4Parser::symbol_type
+  Dhcp4Parser::make_PASSWORD (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_PASSWORD, YY_MOVE (l));
+  }
+
+  inline
+  Dhcp4Parser::symbol_type
+  Dhcp4Parser::make_HOST (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_HOST, YY_MOVE (l));
+  }
 
+  inline
+  Dhcp4Parser::symbol_type
+  Dhcp4Parser::make_PORT (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_PORT, YY_MOVE (l));
+  }
 
-  private:
-    /// This class is not copyable.
-    Dhcp4Parser (const Dhcp4Parser&);
-    Dhcp4Parser& operator= (const Dhcp4Parser&);
+  inline
+  Dhcp4Parser::symbol_type
+  Dhcp4Parser::make_PERSIST (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_PERSIST, YY_MOVE (l));
+  }
 
-    /// State numbers.
-    typedef int state_type;
+  inline
+  Dhcp4Parser::symbol_type
+  Dhcp4Parser::make_LFC_INTERVAL (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_LFC_INTERVAL, YY_MOVE (l));
+  }
 
-    /// Generate an error message.
-    /// \param yystate   the state where the error occurred.
-    /// \param yyla      the lookahead token.
-    virtual std::string yysyntax_error_ (state_type yystate,
-                                         const symbol_type& yyla) const;
+  inline
+  Dhcp4Parser::symbol_type
+  Dhcp4Parser::make_READONLY (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_READONLY, YY_MOVE (l));
+  }
 
-    /// Compute post-reduction state.
-    /// \param yystate   the current state
-    /// \param yysym     the nonterminal to push on the stack
-    state_type yy_lr_goto_state_ (state_type yystate, int yysym);
+  inline
+  Dhcp4Parser::symbol_type
+  Dhcp4Parser::make_CONNECT_TIMEOUT (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_CONNECT_TIMEOUT, YY_MOVE (l));
+  }
+
+  inline
+  Dhcp4Parser::symbol_type
+  Dhcp4Parser::make_CONTACT_POINTS (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_CONTACT_POINTS, YY_MOVE (l));
+  }
+
+  inline
+  Dhcp4Parser::symbol_type
+  Dhcp4Parser::make_KEYSPACE (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_KEYSPACE, YY_MOVE (l));
+  }
+
+  inline
+  Dhcp4Parser::symbol_type
+  Dhcp4Parser::make_CONSISTENCY (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_CONSISTENCY, YY_MOVE (l));
+  }
+
+  inline
+  Dhcp4Parser::symbol_type
+  Dhcp4Parser::make_SERIAL_CONSISTENCY (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_SERIAL_CONSISTENCY, YY_MOVE (l));
+  }
+
+  inline
+  Dhcp4Parser::symbol_type
+  Dhcp4Parser::make_MAX_RECONNECT_TRIES (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_MAX_RECONNECT_TRIES, YY_MOVE (l));
+  }
+
+  inline
+  Dhcp4Parser::symbol_type
+  Dhcp4Parser::make_RECONNECT_WAIT_TIME (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_RECONNECT_WAIT_TIME, YY_MOVE (l));
+  }
+
+  inline
+  Dhcp4Parser::symbol_type
+  Dhcp4Parser::make_REQUEST_TIMEOUT (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_REQUEST_TIMEOUT, YY_MOVE (l));
+  }
+
+  inline
+  Dhcp4Parser::symbol_type
+  Dhcp4Parser::make_TCP_KEEPALIVE (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_TCP_KEEPALIVE, YY_MOVE (l));
+  }
+
+  inline
+  Dhcp4Parser::symbol_type
+  Dhcp4Parser::make_TCP_NODELAY (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_TCP_NODELAY, YY_MOVE (l));
+  }
+
+  inline
+  Dhcp4Parser::symbol_type
+  Dhcp4Parser::make_MAX_ROW_ERRORS (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_MAX_ROW_ERRORS, YY_MOVE (l));
+  }
+
+  inline
+  Dhcp4Parser::symbol_type
+  Dhcp4Parser::make_VALID_LIFETIME (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_VALID_LIFETIME, YY_MOVE (l));
+  }
+
+  inline
+  Dhcp4Parser::symbol_type
+  Dhcp4Parser::make_MIN_VALID_LIFETIME (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_MIN_VALID_LIFETIME, YY_MOVE (l));
+  }
+
+  inline
+  Dhcp4Parser::symbol_type
+  Dhcp4Parser::make_MAX_VALID_LIFETIME (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_MAX_VALID_LIFETIME, YY_MOVE (l));
+  }
+
+  inline
+  Dhcp4Parser::symbol_type
+  Dhcp4Parser::make_RENEW_TIMER (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_RENEW_TIMER, YY_MOVE (l));
+  }
+
+  inline
+  Dhcp4Parser::symbol_type
+  Dhcp4Parser::make_REBIND_TIMER (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_REBIND_TIMER, YY_MOVE (l));
+  }
+
+  inline
+  Dhcp4Parser::symbol_type
+  Dhcp4Parser::make_CALCULATE_TEE_TIMES (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_CALCULATE_TEE_TIMES, YY_MOVE (l));
+  }
+
+  inline
+  Dhcp4Parser::symbol_type
+  Dhcp4Parser::make_T1_PERCENT (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_T1_PERCENT, YY_MOVE (l));
+  }
+
+  inline
+  Dhcp4Parser::symbol_type
+  Dhcp4Parser::make_T2_PERCENT (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_T2_PERCENT, YY_MOVE (l));
+  }
+
+  inline
+  Dhcp4Parser::symbol_type
+  Dhcp4Parser::make_DECLINE_PROBATION_PERIOD (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_DECLINE_PROBATION_PERIOD, YY_MOVE (l));
+  }
+
+  inline
+  Dhcp4Parser::symbol_type
+  Dhcp4Parser::make_SERVER_TAG (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_SERVER_TAG, YY_MOVE (l));
+  }
+
+  inline
+  Dhcp4Parser::symbol_type
+  Dhcp4Parser::make_DDNS_SEND_UPDATES (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_DDNS_SEND_UPDATES, YY_MOVE (l));
+  }
+
+  inline
+  Dhcp4Parser::symbol_type
+  Dhcp4Parser::make_DDNS_OVERRIDE_NO_UPDATE (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_DDNS_OVERRIDE_NO_UPDATE, YY_MOVE (l));
+  }
+
+  inline
+  Dhcp4Parser::symbol_type
+  Dhcp4Parser::make_DDNS_OVERRIDE_CLIENT_UPDATE (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_DDNS_OVERRIDE_CLIENT_UPDATE, YY_MOVE (l));
+  }
+
+  inline
+  Dhcp4Parser::symbol_type
+  Dhcp4Parser::make_DDNS_REPLACE_CLIENT_NAME (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_DDNS_REPLACE_CLIENT_NAME, YY_MOVE (l));
+  }
+
+  inline
+  Dhcp4Parser::symbol_type
+  Dhcp4Parser::make_DDNS_GENERATED_PREFIX (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_DDNS_GENERATED_PREFIX, YY_MOVE (l));
+  }
+
+  inline
+  Dhcp4Parser::symbol_type
+  Dhcp4Parser::make_DDNS_QUALIFYING_SUFFIX (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_DDNS_QUALIFYING_SUFFIX, YY_MOVE (l));
+  }
+
+  inline
+  Dhcp4Parser::symbol_type
+  Dhcp4Parser::make_SUBNET4 (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_SUBNET4, YY_MOVE (l));
+  }
+
+  inline
+  Dhcp4Parser::symbol_type
+  Dhcp4Parser::make_SUBNET_4O6_INTERFACE (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_SUBNET_4O6_INTERFACE, YY_MOVE (l));
+  }
+
+  inline
+  Dhcp4Parser::symbol_type
+  Dhcp4Parser::make_SUBNET_4O6_INTERFACE_ID (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_SUBNET_4O6_INTERFACE_ID, YY_MOVE (l));
+  }
+
+  inline
+  Dhcp4Parser::symbol_type
+  Dhcp4Parser::make_SUBNET_4O6_SUBNET (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_SUBNET_4O6_SUBNET, YY_MOVE (l));
+  }
+
+  inline
+  Dhcp4Parser::symbol_type
+  Dhcp4Parser::make_OPTION_DEF (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_OPTION_DEF, YY_MOVE (l));
+  }
+
+  inline
+  Dhcp4Parser::symbol_type
+  Dhcp4Parser::make_OPTION_DATA (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_OPTION_DATA, YY_MOVE (l));
+  }
+
+  inline
+  Dhcp4Parser::symbol_type
+  Dhcp4Parser::make_NAME (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_NAME, YY_MOVE (l));
+  }
+
+  inline
+  Dhcp4Parser::symbol_type
+  Dhcp4Parser::make_DATA (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_DATA, YY_MOVE (l));
+  }
+
+  inline
+  Dhcp4Parser::symbol_type
+  Dhcp4Parser::make_CODE (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_CODE, YY_MOVE (l));
+  }
+
+  inline
+  Dhcp4Parser::symbol_type
+  Dhcp4Parser::make_SPACE (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_SPACE, YY_MOVE (l));
+  }
+
+  inline
+  Dhcp4Parser::symbol_type
+  Dhcp4Parser::make_CSV_FORMAT (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_CSV_FORMAT, YY_MOVE (l));
+  }
+
+  inline
+  Dhcp4Parser::symbol_type
+  Dhcp4Parser::make_ALWAYS_SEND (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_ALWAYS_SEND, YY_MOVE (l));
+  }
+
+  inline
+  Dhcp4Parser::symbol_type
+  Dhcp4Parser::make_RECORD_TYPES (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_RECORD_TYPES, YY_MOVE (l));
+  }
+
+  inline
+  Dhcp4Parser::symbol_type
+  Dhcp4Parser::make_ENCAPSULATE (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_ENCAPSULATE, YY_MOVE (l));
+  }
+
+  inline
+  Dhcp4Parser::symbol_type
+  Dhcp4Parser::make_ARRAY (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_ARRAY, YY_MOVE (l));
+  }
+
+  inline
+  Dhcp4Parser::symbol_type
+  Dhcp4Parser::make_SHARED_NETWORKS (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_SHARED_NETWORKS, YY_MOVE (l));
+  }
+
+  inline
+  Dhcp4Parser::symbol_type
+  Dhcp4Parser::make_POOLS (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_POOLS, YY_MOVE (l));
+  }
+
+  inline
+  Dhcp4Parser::symbol_type
+  Dhcp4Parser::make_POOL (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_POOL, YY_MOVE (l));
+  }
+
+  inline
+  Dhcp4Parser::symbol_type
+  Dhcp4Parser::make_USER_CONTEXT (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_USER_CONTEXT, YY_MOVE (l));
+  }
+
+  inline
+  Dhcp4Parser::symbol_type
+  Dhcp4Parser::make_COMMENT (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_COMMENT, YY_MOVE (l));
+  }
+
+  inline
+  Dhcp4Parser::symbol_type
+  Dhcp4Parser::make_SUBNET (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_SUBNET, YY_MOVE (l));
+  }
+
+  inline
+  Dhcp4Parser::symbol_type
+  Dhcp4Parser::make_INTERFACE (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_INTERFACE, YY_MOVE (l));
+  }
+
+  inline
+  Dhcp4Parser::symbol_type
+  Dhcp4Parser::make_ID (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_ID, YY_MOVE (l));
+  }
+
+  inline
+  Dhcp4Parser::symbol_type
+  Dhcp4Parser::make_RESERVATION_MODE (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_RESERVATION_MODE, YY_MOVE (l));
+  }
+
+  inline
+  Dhcp4Parser::symbol_type
+  Dhcp4Parser::make_DISABLED (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_DISABLED, YY_MOVE (l));
+  }
+
+  inline
+  Dhcp4Parser::symbol_type
+  Dhcp4Parser::make_OUT_OF_POOL (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_OUT_OF_POOL, YY_MOVE (l));
+  }
+
+  inline
+  Dhcp4Parser::symbol_type
+  Dhcp4Parser::make_GLOBAL (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_GLOBAL, YY_MOVE (l));
+  }
+
+  inline
+  Dhcp4Parser::symbol_type
+  Dhcp4Parser::make_ALL (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_ALL, YY_MOVE (l));
+  }
+
+  inline
+  Dhcp4Parser::symbol_type
+  Dhcp4Parser::make_HOST_RESERVATION_IDENTIFIERS (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_HOST_RESERVATION_IDENTIFIERS, YY_MOVE (l));
+  }
+
+  inline
+  Dhcp4Parser::symbol_type
+  Dhcp4Parser::make_CLIENT_CLASSES (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_CLIENT_CLASSES, YY_MOVE (l));
+  }
 
-    /// Whether the given \c yypact_ value indicates a defaulted state.
-    /// \param yyvalue   the value to check
-    static bool yy_pact_value_is_default_ (int yyvalue);
+  inline
+  Dhcp4Parser::symbol_type
+  Dhcp4Parser::make_REQUIRE_CLIENT_CLASSES (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_REQUIRE_CLIENT_CLASSES, YY_MOVE (l));
+  }
 
-    /// Whether the given \c yytable_ value indicates a syntax error.
-    /// \param yyvalue   the value to check
-    static bool yy_table_value_is_error_ (int yyvalue);
+  inline
+  Dhcp4Parser::symbol_type
+  Dhcp4Parser::make_TEST (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_TEST, YY_MOVE (l));
+  }
 
-    static const short yypact_ninf_;
-    static const signed char yytable_ninf_;
+  inline
+  Dhcp4Parser::symbol_type
+  Dhcp4Parser::make_ONLY_IF_REQUIRED (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_ONLY_IF_REQUIRED, YY_MOVE (l));
+  }
 
-    /// Convert a scanner token number \a t to a symbol number.
-    static token_number_type yytranslate_ (token_type t);
+  inline
+  Dhcp4Parser::symbol_type
+  Dhcp4Parser::make_CLIENT_CLASS (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_CLIENT_CLASS, YY_MOVE (l));
+  }
 
-    // Tables.
-  // YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
-  // STATE-NUM.
-  static const short yypact_[];
+  inline
+  Dhcp4Parser::symbol_type
+  Dhcp4Parser::make_RESERVATIONS (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_RESERVATIONS, YY_MOVE (l));
+  }
 
-  // YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM.
-  // Performed when YYTABLE does not specify something else to do.  Zero
-  // means the default is an error.
-  static const unsigned short yydefact_[];
+  inline
+  Dhcp4Parser::symbol_type
+  Dhcp4Parser::make_DUID (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_DUID, YY_MOVE (l));
+  }
 
-  // YYPGOTO[NTERM-NUM].
-  static const short yypgoto_[];
+  inline
+  Dhcp4Parser::symbol_type
+  Dhcp4Parser::make_HW_ADDRESS (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_HW_ADDRESS, YY_MOVE (l));
+  }
 
-  // YYDEFGOTO[NTERM-NUM].
-  static const short yydefgoto_[];
+  inline
+  Dhcp4Parser::symbol_type
+  Dhcp4Parser::make_CIRCUIT_ID (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_CIRCUIT_ID, YY_MOVE (l));
+  }
 
-  // YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM.  If
-  // positive, shift that token.  If negative, reduce the rule whose
-  // number is the opposite.  If YYTABLE_NINF, syntax error.
-  static const unsigned short yytable_[];
+  inline
+  Dhcp4Parser::symbol_type
+  Dhcp4Parser::make_CLIENT_ID (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_CLIENT_ID, YY_MOVE (l));
+  }
 
-  static const short yycheck_[];
+  inline
+  Dhcp4Parser::symbol_type
+  Dhcp4Parser::make_HOSTNAME (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_HOSTNAME, YY_MOVE (l));
+  }
 
-  // YYSTOS[STATE-NUM] -- The (internal number of the) accessing
-  // symbol of state STATE-NUM.
-  static const unsigned short yystos_[];
+  inline
+  Dhcp4Parser::symbol_type
+  Dhcp4Parser::make_FLEX_ID (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_FLEX_ID, YY_MOVE (l));
+  }
 
-  // YYR1[YYN] -- Symbol number of symbol that rule YYN derives.
-  static const unsigned short yyr1_[];
+  inline
+  Dhcp4Parser::symbol_type
+  Dhcp4Parser::make_RELAY (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_RELAY, YY_MOVE (l));
+  }
 
-  // YYR2[YYN] -- Number of symbols on the right hand side of rule YYN.
-  static const unsigned char yyr2_[];
+  inline
+  Dhcp4Parser::symbol_type
+  Dhcp4Parser::make_IP_ADDRESS (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_IP_ADDRESS, YY_MOVE (l));
+  }
 
+  inline
+  Dhcp4Parser::symbol_type
+  Dhcp4Parser::make_IP_ADDRESSES (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_IP_ADDRESSES, YY_MOVE (l));
+  }
 
-    /// Convert the symbol name \a n to a form suitable for a diagnostic.
-    static std::string yytnamerr_ (const char *n);
+  inline
+  Dhcp4Parser::symbol_type
+  Dhcp4Parser::make_HOOKS_LIBRARIES (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_HOOKS_LIBRARIES, YY_MOVE (l));
+  }
 
+  inline
+  Dhcp4Parser::symbol_type
+  Dhcp4Parser::make_LIBRARY (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_LIBRARY, YY_MOVE (l));
+  }
 
-    /// For a symbol, its name in clear.
-    static const char* const yytname_[];
-#if PARSER4_DEBUG
-  // YYRLINE[YYN] -- Source line where rule number YYN was defined.
-  static const unsigned short yyrline_[];
-    /// Report on the debug stream that the rule \a r is going to be reduced.
-    virtual void yy_reduce_print_ (int r);
-    /// Print the state stack on the debug stream.
-    virtual void yystack_print_ ();
+  inline
+  Dhcp4Parser::symbol_type
+  Dhcp4Parser::make_PARAMETERS (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_PARAMETERS, YY_MOVE (l));
+  }
 
-    /// Debugging level.
-    int yydebug_;
-    /// Debug stream.
-    std::ostream* yycdebug_;
+  inline
+  Dhcp4Parser::symbol_type
+  Dhcp4Parser::make_EXPIRED_LEASES_PROCESSING (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_EXPIRED_LEASES_PROCESSING, YY_MOVE (l));
+  }
 
-    /// \brief Display a symbol type, value and location.
-    /// \param yyo    The output stream.
-    /// \param yysym  The symbol.
-    template <typename Base>
-    void yy_print_ (std::ostream& yyo, const basic_symbol<Base>& yysym) const;
-#endif
+  inline
+  Dhcp4Parser::symbol_type
+  Dhcp4Parser::make_RECLAIM_TIMER_WAIT_TIME (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_RECLAIM_TIMER_WAIT_TIME, YY_MOVE (l));
+  }
 
-    /// \brief Reclaim the memory associated to a symbol.
-    /// \param yymsg     Why this token is reclaimed.
-    ///                  If null, print nothing.
-    /// \param yysym     The symbol.
-    template <typename Base>
-    void yy_destroy_ (const char* yymsg, basic_symbol<Base>& yysym) const;
+  inline
+  Dhcp4Parser::symbol_type
+  Dhcp4Parser::make_FLUSH_RECLAIMED_TIMER_WAIT_TIME (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_FLUSH_RECLAIMED_TIMER_WAIT_TIME, YY_MOVE (l));
+  }
 
-  private:
-    /// Type access provider for state based symbols.
-    struct by_state
-    {
-      /// Default constructor.
-      by_state () YY_NOEXCEPT;
+  inline
+  Dhcp4Parser::symbol_type
+  Dhcp4Parser::make_HOLD_RECLAIMED_TIME (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_HOLD_RECLAIMED_TIME, YY_MOVE (l));
+  }
 
-      /// The symbol type as needed by the constructor.
-      typedef state_type kind_type;
+  inline
+  Dhcp4Parser::symbol_type
+  Dhcp4Parser::make_MAX_RECLAIM_LEASES (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_MAX_RECLAIM_LEASES, YY_MOVE (l));
+  }
 
-      /// Constructor.
-      by_state (kind_type s) YY_NOEXCEPT;
+  inline
+  Dhcp4Parser::symbol_type
+  Dhcp4Parser::make_MAX_RECLAIM_TIME (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_MAX_RECLAIM_TIME, YY_MOVE (l));
+  }
 
-      /// Copy constructor.
-      by_state (const by_state& that) YY_NOEXCEPT;
+  inline
+  Dhcp4Parser::symbol_type
+  Dhcp4Parser::make_UNWARNED_RECLAIM_CYCLES (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_UNWARNED_RECLAIM_CYCLES, YY_MOVE (l));
+  }
 
-      /// Record that this symbol is empty.
-      void clear () YY_NOEXCEPT;
+  inline
+  Dhcp4Parser::symbol_type
+  Dhcp4Parser::make_DHCP4O6_PORT (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_DHCP4O6_PORT, YY_MOVE (l));
+  }
 
-      /// Steal the symbol type from \a that.
-      void move (by_state& that);
+  inline
+  Dhcp4Parser::symbol_type
+  Dhcp4Parser::make_CONTROL_SOCKET (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_CONTROL_SOCKET, YY_MOVE (l));
+  }
 
-      /// The (internal) type number (corresponding to \a state).
-      /// \a empty_symbol when empty.
-      symbol_number_type type_get () const YY_NOEXCEPT;
+  inline
+  Dhcp4Parser::symbol_type
+  Dhcp4Parser::make_SOCKET_TYPE (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_SOCKET_TYPE, YY_MOVE (l));
+  }
 
-      /// The state number used to denote an empty symbol.
-      enum { empty_state = -1 };
+  inline
+  Dhcp4Parser::symbol_type
+  Dhcp4Parser::make_SOCKET_NAME (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_SOCKET_NAME, YY_MOVE (l));
+  }
 
-      /// The state.
-      /// \a empty when empty.
-      state_type state;
-    };
+  inline
+  Dhcp4Parser::symbol_type
+  Dhcp4Parser::make_DHCP_QUEUE_CONTROL (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_DHCP_QUEUE_CONTROL, YY_MOVE (l));
+  }
 
-    /// "Internal" symbol: element of the stack.
-    struct stack_symbol_type : basic_symbol<by_state>
-    {
-      /// Superclass.
-      typedef basic_symbol<by_state> super_type;
-      /// Construct an empty symbol.
-      stack_symbol_type ();
-      /// Move or copy construction.
-      stack_symbol_type (YY_RVREF (stack_symbol_type) that);
-      /// Steal the contents from \a sym to build this.
-      stack_symbol_type (state_type s, YY_MOVE_REF (symbol_type) sym);
-#if YY_CPLUSPLUS < 201103L
-      /// Assignment, needed by push_back by some old implementations.
-      /// Moves the contents of that.
-      stack_symbol_type& operator= (stack_symbol_type& that);
-#endif
-    };
+  inline
+  Dhcp4Parser::symbol_type
+  Dhcp4Parser::make_DHCP_DDNS (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_DHCP_DDNS, YY_MOVE (l));
+  }
 
-    /// A stack with random access from its top.
-    template <typename T, typename S = std::vector<T> >
-    class stack
-    {
-    public:
-      // Hide our reversed order.
-      typedef typename S::reverse_iterator iterator;
-      typedef typename S::const_reverse_iterator const_iterator;
-      typedef typename S::size_type size_type;
-
-      stack (size_type n = 200)
-        : seq_ (n)
-      {}
-
-      /// Random access.
-      ///
-      /// Index 0 returns the topmost element.
-      T&
-      operator[] (size_type i)
-      {
-        return seq_[size () - 1 - i];
-      }
-
-      /// Random access.
-      ///
-      /// Index 0 returns the topmost element.
-      T&
-      operator[] (int i)
-      {
-        return operator[] (size_type (i));
-      }
-
-      /// Random access.
-      ///
-      /// Index 0 returns the topmost element.
-      const T&
-      operator[] (size_type i) const
-      {
-        return seq_[size () - 1 - i];
-      }
-
-      /// Random access.
-      ///
-      /// Index 0 returns the topmost element.
-      const T&
-      operator[] (int i) const
-      {
-        return operator[] (size_type (i));
-      }
-
-      /// Steal the contents of \a t.
-      ///
-      /// Close to move-semantics.
-      void
-      push (YY_MOVE_REF (T) t)
-      {
-        seq_.push_back (T ());
-        operator[] (0).move (t);
-      }
+  inline
+  Dhcp4Parser::symbol_type
+  Dhcp4Parser::make_ENABLE_UPDATES (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_ENABLE_UPDATES, YY_MOVE (l));
+  }
 
-      /// Pop elements from the stack.
-      void
-      pop (int n = 1) YY_NOEXCEPT
-      {
-        for (; 0 < n; --n)
-          seq_.pop_back ();
-      }
+  inline
+  Dhcp4Parser::symbol_type
+  Dhcp4Parser::make_QUALIFYING_SUFFIX (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_QUALIFYING_SUFFIX, YY_MOVE (l));
+  }
 
-      /// Pop all elements from the stack.
-      void
-      clear () YY_NOEXCEPT
-      {
-        seq_.clear ();
-      }
+  inline
+  Dhcp4Parser::symbol_type
+  Dhcp4Parser::make_SERVER_IP (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_SERVER_IP, YY_MOVE (l));
+  }
 
-      /// Number of elements on the stack.
-      size_type
-      size () const YY_NOEXCEPT
-      {
-        return seq_.size ();
-      }
+  inline
+  Dhcp4Parser::symbol_type
+  Dhcp4Parser::make_SERVER_PORT (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_SERVER_PORT, YY_MOVE (l));
+  }
 
-      /// Iterator on top of the stack (going downwards).
-      const_iterator
-      begin () const YY_NOEXCEPT
-      {
-        return seq_.rbegin ();
-      }
+  inline
+  Dhcp4Parser::symbol_type
+  Dhcp4Parser::make_SENDER_IP (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_SENDER_IP, YY_MOVE (l));
+  }
 
-      /// Bottom of the stack.
-      const_iterator
-      end () const YY_NOEXCEPT
-      {
-        return seq_.rend ();
-      }
+  inline
+  Dhcp4Parser::symbol_type
+  Dhcp4Parser::make_SENDER_PORT (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_SENDER_PORT, YY_MOVE (l));
+  }
 
-      /// Present a slice of the top of a stack.
-      class slice
-      {
-      public:
-        slice (const stack& stack, int range)
-          : stack_ (stack)
-          , range_ (range)
-        {}
-
-        const T&
-        operator[] (int i) const
-        {
-          return stack_[range_ - i];
-        }
-
-      private:
-        const stack& stack_;
-        int range_;
-      };
+  inline
+  Dhcp4Parser::symbol_type
+  Dhcp4Parser::make_MAX_QUEUE_SIZE (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_MAX_QUEUE_SIZE, YY_MOVE (l));
+  }
 
-    private:
-      stack (const stack&);
-      stack& operator= (const stack&);
-      /// The wrapped container.
-      S seq_;
-    };
+  inline
+  Dhcp4Parser::symbol_type
+  Dhcp4Parser::make_NCR_PROTOCOL (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_NCR_PROTOCOL, YY_MOVE (l));
+  }
 
+  inline
+  Dhcp4Parser::symbol_type
+  Dhcp4Parser::make_NCR_FORMAT (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_NCR_FORMAT, YY_MOVE (l));
+  }
 
-    /// Stack type.
-    typedef stack<stack_symbol_type> stack_type;
+  inline
+  Dhcp4Parser::symbol_type
+  Dhcp4Parser::make_OVERRIDE_NO_UPDATE (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_OVERRIDE_NO_UPDATE, YY_MOVE (l));
+  }
 
-    /// The stack.
-    stack_type yystack_;
+  inline
+  Dhcp4Parser::symbol_type
+  Dhcp4Parser::make_OVERRIDE_CLIENT_UPDATE (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_OVERRIDE_CLIENT_UPDATE, YY_MOVE (l));
+  }
 
-    /// Push a new state on the stack.
-    /// \param m    a debug message to display
-    ///             if null, no trace is output.
-    /// \param sym  the symbol
-    /// \warning the contents of \a s.value is stolen.
-    void yypush_ (const char* m, YY_MOVE_REF (stack_symbol_type) sym);
+  inline
+  Dhcp4Parser::symbol_type
+  Dhcp4Parser::make_REPLACE_CLIENT_NAME (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_REPLACE_CLIENT_NAME, YY_MOVE (l));
+  }
 
-    /// Push a new look ahead token on the state on the stack.
-    /// \param m    a debug message to display
-    ///             if null, no trace is output.
-    /// \param s    the state
-    /// \param sym  the symbol (for its value and location).
-    /// \warning the contents of \a sym.value is stolen.
-    void yypush_ (const char* m, state_type s, YY_MOVE_REF (symbol_type) sym);
+  inline
+  Dhcp4Parser::symbol_type
+  Dhcp4Parser::make_GENERATED_PREFIX (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_GENERATED_PREFIX, YY_MOVE (l));
+  }
 
-    /// Pop \a n symbols from the stack.
-    void yypop_ (int n = 1);
+  inline
+  Dhcp4Parser::symbol_type
+  Dhcp4Parser::make_TCP (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_TCP, YY_MOVE (l));
+  }
 
-    /// Constants.
-    enum
-    {
-      yyeof_ = 0,
-      yylast_ = 1054,     ///< Last index in yytable_.
-      yynnts_ = 386,  ///< Number of nonterminal symbols.
-      yyfinal_ = 30, ///< Termination state number.
-      yyterror_ = 1,
-      yyerrcode_ = 256,
-      yyntokens_ = 179  ///< Number of tokens.
-    };
+  inline
+  Dhcp4Parser::symbol_type
+  Dhcp4Parser::make_JSON (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_JSON, YY_MOVE (l));
+  }
 
+  inline
+  Dhcp4Parser::symbol_type
+  Dhcp4Parser::make_WHEN_PRESENT (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_WHEN_PRESENT, YY_MOVE (l));
+  }
 
-    // User arguments.
-    isc::dhcp::Parser4Context& ctx;
-  };
+  inline
+  Dhcp4Parser::symbol_type
+  Dhcp4Parser::make_NEVER (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_NEVER, YY_MOVE (l));
+  }
 
   inline
-  Dhcp4Parser::token_number_type
-  Dhcp4Parser::yytranslate_ (token_type t)
+  Dhcp4Parser::symbol_type
+  Dhcp4Parser::make_ALWAYS (YY_COPY (location_type) l)
   {
-    // YYTRANSLATE[TOKEN-NUM] -- Symbol number corresponding to
-    // TOKEN-NUM as returned by yylex.
-    static
-    const token_number_type
-    translate_table[] =
-    {
-       0,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     1,     2,     3,     4,
-       5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
-      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
-      25,    26,    27,    28,    29,    30,    31,    32,    33,    34,
-      35,    36,    37,    38,    39,    40,    41,    42,    43,    44,
-      45,    46,    47,    48,    49,    50,    51,    52,    53,    54,
-      55,    56,    57,    58,    59,    60,    61,    62,    63,    64,
-      65,    66,    67,    68,    69,    70,    71,    72,    73,    74,
-      75,    76,    77,    78,    79,    80,    81,    82,    83,    84,
-      85,    86,    87,    88,    89,    90,    91,    92,    93,    94,
-      95,    96,    97,    98,    99,   100,   101,   102,   103,   104,
-     105,   106,   107,   108,   109,   110,   111,   112,   113,   114,
-     115,   116,   117,   118,   119,   120,   121,   122,   123,   124,
-     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,   164,
-     165,   166,   167,   168,   169,   170,   171,   172,   173,   174,
-     175,   176,   177,   178
-    };
-    const unsigned user_token_number_max_ = 433;
-    const token_number_type undef_token_ = 2;
+    return symbol_type (token::TOKEN_ALWAYS, YY_MOVE (l));
+  }
 
-    if (static_cast<int> (t) <= yyeof_)
-      return yyeof_;
-    else if (static_cast<unsigned> (t) <= user_token_number_max_)
-      return translate_table[t];
-    else
-      return undef_token_;
+  inline
+  Dhcp4Parser::symbol_type
+  Dhcp4Parser::make_WHEN_NOT_PRESENT (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_WHEN_NOT_PRESENT, YY_MOVE (l));
   }
 
-  // basic_symbol.
-#if 201103L <= YY_CPLUSPLUS
-  template <typename Base>
-  Dhcp4Parser::basic_symbol<Base>::basic_symbol (basic_symbol&& that)
-    : Base (std::move (that))
-    , value ()
-    , location (std::move (that.location))
+  inline
+  Dhcp4Parser::symbol_type
+  Dhcp4Parser::make_HOSTNAME_CHAR_SET (YY_COPY (location_type) l)
   {
-    switch (this->type_get ())
-    {
-      case 195: // value
-      case 199: // map_value
-      case 245: // socket_type
-      case 248: // outbound_interface_value
-      case 270: // db_type
-      case 357: // hr_mode
-      case 506: // ncr_protocol_value
-      case 513: // replace_client_name_value
-        value.move< ElementPtr > (std::move (that.value));
-        break;
+    return symbol_type (token::TOKEN_HOSTNAME_CHAR_SET, YY_MOVE (l));
+  }
 
-      case 178: // "boolean"
-        value.move< bool > (std::move (that.value));
-        break;
+  inline
+  Dhcp4Parser::symbol_type
+  Dhcp4Parser::make_HOSTNAME_CHAR_REPLACEMENT (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_HOSTNAME_CHAR_REPLACEMENT, YY_MOVE (l));
+  }
 
-      case 177: // "floating point"
-        value.move< double > (std::move (that.value));
-        break;
+  inline
+  Dhcp4Parser::symbol_type
+  Dhcp4Parser::make_LOGGING (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_LOGGING, YY_MOVE (l));
+  }
 
-      case 176: // "integer"
-        value.move< int64_t > (std::move (that.value));
-        break;
+  inline
+  Dhcp4Parser::symbol_type
+  Dhcp4Parser::make_LOGGERS (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_LOGGERS, YY_MOVE (l));
+  }
 
-      case 175: // "constant string"
-        value.move< std::string > (std::move (that.value));
-        break;
+  inline
+  Dhcp4Parser::symbol_type
+  Dhcp4Parser::make_OUTPUT_OPTIONS (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_OUTPUT_OPTIONS, YY_MOVE (l));
+  }
 
-      default:
-        break;
-    }
+  inline
+  Dhcp4Parser::symbol_type
+  Dhcp4Parser::make_OUTPUT (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_OUTPUT, YY_MOVE (l));
+  }
 
+  inline
+  Dhcp4Parser::symbol_type
+  Dhcp4Parser::make_DEBUGLEVEL (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_DEBUGLEVEL, YY_MOVE (l));
   }
-#endif
 
-  template <typename Base>
-  Dhcp4Parser::basic_symbol<Base>::basic_symbol (const basic_symbol& that)
-    : Base (that)
-    , value ()
-    , location (that.location)
+  inline
+  Dhcp4Parser::symbol_type
+  Dhcp4Parser::make_SEVERITY (YY_COPY (location_type) l)
   {
-    switch (this->type_get ())
-    {
-      case 195: // value
-      case 199: // map_value
-      case 245: // socket_type
-      case 248: // outbound_interface_value
-      case 270: // db_type
-      case 357: // hr_mode
-      case 506: // ncr_protocol_value
-      case 513: // replace_client_name_value
-        value.copy< ElementPtr > (YY_MOVE (that.value));
-        break;
+    return symbol_type (token::TOKEN_SEVERITY, YY_MOVE (l));
+  }
 
-      case 178: // "boolean"
-        value.copy< bool > (YY_MOVE (that.value));
-        break;
+  inline
+  Dhcp4Parser::symbol_type
+  Dhcp4Parser::make_FLUSH (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_FLUSH, YY_MOVE (l));
+  }
 
-      case 177: // "floating point"
-        value.copy< double > (YY_MOVE (that.value));
-        break;
+  inline
+  Dhcp4Parser::symbol_type
+  Dhcp4Parser::make_MAXSIZE (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_MAXSIZE, YY_MOVE (l));
+  }
 
-      case 176: // "integer"
-        value.copy< int64_t > (YY_MOVE (that.value));
-        break;
+  inline
+  Dhcp4Parser::symbol_type
+  Dhcp4Parser::make_MAXVER (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_MAXVER, YY_MOVE (l));
+  }
 
-      case 175: // "constant string"
-        value.copy< std::string > (YY_MOVE (that.value));
-        break;
+  inline
+  Dhcp4Parser::symbol_type
+  Dhcp4Parser::make_PATTERN (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_PATTERN, YY_MOVE (l));
+  }
 
-      default:
-        break;
-    }
+  inline
+  Dhcp4Parser::symbol_type
+  Dhcp4Parser::make_DHCP6 (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_DHCP6, YY_MOVE (l));
+  }
 
+  inline
+  Dhcp4Parser::symbol_type
+  Dhcp4Parser::make_DHCPDDNS (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_DHCPDDNS, YY_MOVE (l));
   }
 
+  inline
+  Dhcp4Parser::symbol_type
+  Dhcp4Parser::make_CONTROL_AGENT (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_CONTROL_AGENT, YY_MOVE (l));
+  }
 
+  inline
+  Dhcp4Parser::symbol_type
+  Dhcp4Parser::make_TOPLEVEL_JSON (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_TOPLEVEL_JSON, YY_MOVE (l));
+  }
 
-  template <typename Base>
-  bool
-  Dhcp4Parser::basic_symbol<Base>::empty () const YY_NOEXCEPT
+  inline
+  Dhcp4Parser::symbol_type
+  Dhcp4Parser::make_TOPLEVEL_DHCP4 (YY_COPY (location_type) l)
   {
-    return Base::type_get () == empty_symbol;
+    return symbol_type (token::TOKEN_TOPLEVEL_DHCP4, YY_MOVE (l));
   }
 
-  template <typename Base>
-  void
-  Dhcp4Parser::basic_symbol<Base>::move (basic_symbol& s)
+  inline
+  Dhcp4Parser::symbol_type
+  Dhcp4Parser::make_SUB_DHCP4 (YY_COPY (location_type) l)
   {
-    super_type::move (s);
-    switch (this->type_get ())
-    {
-      case 195: // value
-      case 199: // map_value
-      case 245: // socket_type
-      case 248: // outbound_interface_value
-      case 270: // db_type
-      case 357: // hr_mode
-      case 506: // ncr_protocol_value
-      case 513: // replace_client_name_value
-        value.move< ElementPtr > (YY_MOVE (s.value));
-        break;
+    return symbol_type (token::TOKEN_SUB_DHCP4, YY_MOVE (l));
+  }
 
-      case 178: // "boolean"
-        value.move< bool > (YY_MOVE (s.value));
-        break;
+  inline
+  Dhcp4Parser::symbol_type
+  Dhcp4Parser::make_SUB_INTERFACES4 (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_SUB_INTERFACES4, YY_MOVE (l));
+  }
 
-      case 177: // "floating point"
-        value.move< double > (YY_MOVE (s.value));
-        break;
+  inline
+  Dhcp4Parser::symbol_type
+  Dhcp4Parser::make_SUB_SUBNET4 (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_SUB_SUBNET4, YY_MOVE (l));
+  }
 
-      case 176: // "integer"
-        value.move< int64_t > (YY_MOVE (s.value));
-        break;
+  inline
+  Dhcp4Parser::symbol_type
+  Dhcp4Parser::make_SUB_POOL4 (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_SUB_POOL4, YY_MOVE (l));
+  }
 
-      case 175: // "constant string"
-        value.move< std::string > (YY_MOVE (s.value));
-        break;
+  inline
+  Dhcp4Parser::symbol_type
+  Dhcp4Parser::make_SUB_RESERVATION (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_SUB_RESERVATION, YY_MOVE (l));
+  }
 
-      default:
-        break;
-    }
+  inline
+  Dhcp4Parser::symbol_type
+  Dhcp4Parser::make_SUB_OPTION_DEFS (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_SUB_OPTION_DEFS, YY_MOVE (l));
+  }
 
-    location = YY_MOVE (s.location);
+  inline
+  Dhcp4Parser::symbol_type
+  Dhcp4Parser::make_SUB_OPTION_DEF (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_SUB_OPTION_DEF, YY_MOVE (l));
   }
 
-  // by_type.
   inline
-  Dhcp4Parser::by_type::by_type ()
-    : type (empty_symbol)
-  {}
+  Dhcp4Parser::symbol_type
+  Dhcp4Parser::make_SUB_OPTION_DATA (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_SUB_OPTION_DATA, YY_MOVE (l));
+  }
 
-#if 201103L <= YY_CPLUSPLUS
   inline
-  Dhcp4Parser::by_type::by_type (by_type&& that)
-    : type (that.type)
+  Dhcp4Parser::symbol_type
+  Dhcp4Parser::make_SUB_HOOKS_LIBRARY (YY_COPY (location_type) l)
   {
-    that.clear ();
+    return symbol_type (token::TOKEN_SUB_HOOKS_LIBRARY, YY_MOVE (l));
   }
-#endif
 
   inline
-  Dhcp4Parser::by_type::by_type (const by_type& that)
-    : type (that.type)
-  {}
+  Dhcp4Parser::symbol_type
+  Dhcp4Parser::make_SUB_DHCP_DDNS (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_SUB_DHCP_DDNS, YY_MOVE (l));
+  }
 
   inline
-  Dhcp4Parser::by_type::by_type (token_type t)
-    : type (yytranslate_ (t))
-  {}
+  Dhcp4Parser::symbol_type
+  Dhcp4Parser::make_SUB_LOGGING (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_SUB_LOGGING, YY_MOVE (l));
+  }
 
   inline
-  void
-  Dhcp4Parser::by_type::clear ()
+  Dhcp4Parser::symbol_type
+  Dhcp4Parser::make_SUB_CONFIG_CONTROL (YY_COPY (location_type) l)
   {
-    type = empty_symbol;
+    return symbol_type (token::TOKEN_SUB_CONFIG_CONTROL, YY_MOVE (l));
   }
 
   inline
-  void
-  Dhcp4Parser::by_type::move (by_type& that)
+  Dhcp4Parser::symbol_type
+  Dhcp4Parser::make_STRING (YY_COPY (std::string) v, YY_COPY (location_type) l)
   {
-    type = that.type;
-    that.clear ();
+    return symbol_type (token::TOKEN_STRING, YY_MOVE (v), YY_MOVE (l));
   }
 
   inline
-  int
-  Dhcp4Parser::by_type::type_get () const YY_NOEXCEPT
+  Dhcp4Parser::symbol_type
+  Dhcp4Parser::make_INTEGER (YY_COPY (int64_t) v, YY_COPY (location_type) l)
   {
-    return type;
+    return symbol_type (token::TOKEN_INTEGER, YY_MOVE (v), YY_MOVE (l));
   }
 
   inline
-  Dhcp4Parser::token_type
-  Dhcp4Parser::by_type::token () const YY_NOEXCEPT
+  Dhcp4Parser::symbol_type
+  Dhcp4Parser::make_FLOAT (YY_COPY (double) v, YY_COPY (location_type) l)
   {
-    // YYTOKNUM[NUM] -- (External) token number corresponding to the
-    // (internal) symbol number NUM (which must be that of a token).  */
-    static
-    const unsigned short
-    yytoken_number_[] =
-    {
-       0,   256,   257,   258,   259,   260,   261,   262,   263,   264,
-     265,   266,   267,   268,   269,   270,   271,   272,   273,   274,
-     275,   276,   277,   278,   279,   280,   281,   282,   283,   284,
-     285,   286,   287,   288,   289,   290,   291,   292,   293,   294,
-     295,   296,   297,   298,   299,   300,   301,   302,   303,   304,
-     305,   306,   307,   308,   309,   310,   311,   312,   313,   314,
-     315,   316,   317,   318,   319,   320,   321,   322,   323,   324,
-     325,   326,   327,   328,   329,   330,   331,   332,   333,   334,
-     335,   336,   337,   338,   339,   340,   341,   342,   343,   344,
-     345,   346,   347,   348,   349,   350,   351,   352,   353,   354,
-     355,   356,   357,   358,   359,   360,   361,   362,   363,   364,
-     365,   366,   367,   368,   369,   370,   371,   372,   373,   374,
-     375,   376,   377,   378,   379,   380,   381,   382,   383,   384,
-     385,   386,   387,   388,   389,   390,   391,   392,   393,   394,
-     395,   396,   397,   398,   399,   400,   401,   402,   403,   404,
-     405,   406,   407,   408,   409,   410,   411,   412,   413,   414,
-     415,   416,   417,   418,   419,   420,   421,   422,   423,   424,
-     425,   426,   427,   428,   429,   430,   431,   432,   433
-    };
-    return token_type (yytoken_number_[type]);
+    return symbol_type (token::TOKEN_FLOAT, YY_MOVE (v), YY_MOVE (l));
   }
 
-#line 14 "dhcp4_parser.yy"
-} } // isc::dhcp
-#line 4234 "dhcp4_parser.h"
+  inline
+  Dhcp4Parser::symbol_type
+  Dhcp4Parser::make_BOOLEAN (YY_COPY (bool) v, YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_BOOLEAN, YY_MOVE (v), YY_MOVE (l));
+  }
 
 
+#line 14 "dhcp4_parser.yy" // lalr1.cc:404
+} } // isc::dhcp
+#line 3415 "dhcp4_parser.h" // lalr1.cc:404
+
 
 
 
index fd400433beb0c9eb90d76247eaa9ed149dd789a1..1a243d14d1735bfde3fb3aace21f8ab59c922533 100644 (file)
@@ -112,6 +112,12 @@ using namespace std;
   T2_PERCENT "t2-percent"
   DECLINE_PROBATION_PERIOD "decline-probation-period"
   SERVER_TAG "server-tag"
+  DDNS_SEND_UPDATES "ddns-send-updates"
+  DDNS_OVERRIDE_NO_UPDATE "ddns-override-no-update"
+  DDNS_OVERRIDE_CLIENT_UPDATE "ddns-override-client-update"
+  DDNS_REPLACE_CLIENT_NAME "ddns-replace-client-name"
+  DDNS_GENERATED_PREFIX "ddns-generated-prefix"
+  DDNS_QUALIFYING_SUFFIX "ddns-qualifying-suffix"
   SUBNET4 "subnet4"
   SUBNET_4O6_INTERFACE "4o6-interface"
   SUBNET_4O6_INTERFACE_ID "4o6-interface-id"
@@ -252,7 +258,7 @@ using namespace std;
 %type <ElementPtr> db_type
 %type <ElementPtr> hr_mode
 %type <ElementPtr> ncr_protocol_value
-%type <ElementPtr> replace_client_name_value
+%type <ElementPtr> ddns_replace_client_name_value
 
 %printer { yyoutput << $$; } <*>;
 
@@ -485,6 +491,12 @@ global_param: valid_lifetime
             | loggers
             | hostname_char_set
             | hostname_char_replacement
+            | ddns_send_updates
+            | ddns_override_no_update
+            | ddns_override_client_update
+            | ddns_replace_client_name
+            | ddns_generated_prefix
+            | ddns_qualifying_suffix
             | unknown_map_entry
             ;
 
@@ -556,6 +568,78 @@ authoritative: AUTHORITATIVE COLON BOOLEAN {
     ctx.stack_.back()->set("authoritative", prf);
 };
 
+ddns_send_updates: DDNS_SEND_UPDATES COLON BOOLEAN {
+    ElementPtr b(new BoolElement($3, ctx.loc2pos(@3)));
+    ctx.stack_.back()->set("ddns-send-updates", b);
+};
+
+ddns_override_no_update: DDNS_OVERRIDE_NO_UPDATE COLON BOOLEAN {
+    ElementPtr b(new BoolElement($3, ctx.loc2pos(@3)));
+    ctx.stack_.back()->set("ddns-override-no-update", b);
+};
+
+ddns_override_client_update: DDNS_OVERRIDE_CLIENT_UPDATE COLON BOOLEAN {
+    ElementPtr b(new BoolElement($3, ctx.loc2pos(@3)));
+    ctx.stack_.back()->set("ddns-override-client-update", b);
+};
+
+ddns_replace_client_name: DDNS_REPLACE_CLIENT_NAME {
+    ctx.enter(ctx.REPLACE_CLIENT_NAME);
+} COLON ddns_replace_client_name_value {
+    ctx.stack_.back()->set("ddns-replace-client-name", $4);
+    ctx.leave();
+};
+
+ddns_replace_client_name_value:
+    WHEN_PRESENT {
+      $$ = ElementPtr(new StringElement("when-present", ctx.loc2pos(@1)));
+      }
+  | NEVER {
+      $$ = ElementPtr(new StringElement("never", ctx.loc2pos(@1)));
+      }
+  | ALWAYS {
+      $$ = ElementPtr(new StringElement("always", ctx.loc2pos(@1)));
+      }
+  | WHEN_NOT_PRESENT {
+      $$ = ElementPtr(new StringElement("when-not-present", ctx.loc2pos(@1)));
+      }
+  | BOOLEAN  {
+      error(@1, "boolean values for the replace-client-name are "
+                "no longer supported");
+      }
+  ;
+
+ddns_generated_prefix: DDNS_GENERATED_PREFIX {
+    ctx.enter(ctx.NO_KEYWORD);
+} COLON STRING {
+    ElementPtr s(new StringElement($4, ctx.loc2pos(@4)));
+    ctx.stack_.back()->set("ddns-generated-prefix", s);
+    ctx.leave();
+};
+
+ddns_qualifying_suffix: DDNS_QUALIFYING_SUFFIX {
+    ctx.enter(ctx.NO_KEYWORD);
+} COLON STRING {
+    ElementPtr s(new StringElement($4, ctx.loc2pos(@4)));
+    ctx.stack_.back()->set("ddns-qualifying-suffix", s);
+    ctx.leave();
+};
+
+hostname_char_set: HOSTNAME_CHAR_SET {
+    ctx.enter(ctx.NO_KEYWORD);
+} COLON STRING {
+    ElementPtr s(new StringElement($4, ctx.loc2pos(@4)));
+    ctx.stack_.back()->set("hostname-char-set", s);
+    ctx.leave();
+};
+
+hostname_char_replacement: HOSTNAME_CHAR_REPLACEMENT {
+    ctx.enter(ctx.NO_KEYWORD);
+} COLON STRING {
+    ElementPtr s(new StringElement($4, ctx.loc2pos(@4)));
+    ctx.stack_.back()->set("hostname-char-replacement", s);
+    ctx.leave();
+};
 
 interfaces_config: INTERFACES_CONFIG {
     ElementPtr i(new MapElement(ctx.loc2pos(@1)));
@@ -1135,6 +1219,14 @@ subnet4_param: valid_lifetime
              | calculate_tee_times
              | t1_percent
              | t2_percent
+             | ddns_send_updates
+             | ddns_override_no_update
+             | ddns_override_client_update
+             | ddns_replace_client_name
+             | ddns_generated_prefix
+             | ddns_qualifying_suffix
+             | hostname_char_set
+             | hostname_char_replacement
              | unknown_map_entry
              ;
 
@@ -1271,6 +1363,14 @@ shared_network_param: name
                     | calculate_tee_times
                     | t1_percent
                     | t2_percent
+                    | ddns_send_updates
+                    | ddns_override_no_update
+                    | ddns_override_client_update
+                    | ddns_replace_client_name
+                    | ddns_generated_prefix
+                    | ddns_qualifying_suffix
+                    | hostname_char_set
+                    | hostname_char_replacement
                     | unknown_map_entry
                     ;
 
@@ -1983,7 +2083,6 @@ dhcp_ddns_params: dhcp_ddns_param
                 ;
 
 dhcp_ddns_param: enable_updates
-               | qualifying_suffix
                | server_ip
                | server_port
                | sender_ip
@@ -1991,12 +2090,13 @@ dhcp_ddns_param: enable_updates
                | max_queue_size
                | ncr_protocol
                | ncr_format
-               | override_no_update
-               | override_client_update
-               | replace_client_name
-               | generated_prefix
-               | hostname_char_set
-               | hostname_char_replacement
+               | dep_override_no_update
+               | dep_override_client_update
+               | dep_replace_client_name
+               | dep_generated_prefix
+               | dep_qualifying_suffix
+               | dep_hostname_char_set
+               | dep_hostname_char_replacement
                | user_context
                | comment
                | unknown_map_entry
@@ -2007,14 +2107,6 @@ enable_updates: ENABLE_UPDATES COLON BOOLEAN {
     ctx.stack_.back()->set("enable-updates", b);
 };
 
-qualifying_suffix: QUALIFYING_SUFFIX {
-    ctx.enter(ctx.NO_KEYWORD);
-} COLON STRING {
-    ElementPtr s(new StringElement($4, ctx.loc2pos(@4)));
-    ctx.stack_.back()->set("qualifying-suffix", s);
-    ctx.leave();
-};
-
 server_ip: SERVER_IP {
     ctx.enter(ctx.NO_KEYWORD);
 } COLON STRING {
@@ -2066,43 +2158,37 @@ ncr_format: NCR_FORMAT {
     ctx.leave();
 };
 
-override_no_update: OVERRIDE_NO_UPDATE COLON BOOLEAN {
+// Deprecated, moved to global/network scopes. Eventually it should be removed.
+dep_qualifying_suffix: QUALIFYING_SUFFIX {
+    ctx.enter(ctx.NO_KEYWORD);
+} COLON STRING {
+    ElementPtr s(new StringElement($4, ctx.loc2pos(@4)));
+    ctx.stack_.back()->set("qualifying-suffix", s);
+    ctx.leave();
+};
+
+// Deprecated, moved to global/network scopes. Eventually it should be removed.
+dep_override_no_update: OVERRIDE_NO_UPDATE COLON BOOLEAN {
     ElementPtr b(new BoolElement($3, ctx.loc2pos(@3)));
     ctx.stack_.back()->set("override-no-update", b);
 };
 
-override_client_update: OVERRIDE_CLIENT_UPDATE COLON BOOLEAN {
+// Deprecated, moved to global/network scopes. Eventually it should be removed.
+dep_override_client_update: OVERRIDE_CLIENT_UPDATE COLON BOOLEAN {
     ElementPtr b(new BoolElement($3, ctx.loc2pos(@3)));
     ctx.stack_.back()->set("override-client-update", b);
 };
 
-replace_client_name: REPLACE_CLIENT_NAME {
+// Deprecated, moved to global/network scopes. Eventually it should be removed.
+dep_replace_client_name: REPLACE_CLIENT_NAME {
     ctx.enter(ctx.REPLACE_CLIENT_NAME);
-} COLON replace_client_name_value {
+} COLON ddns_replace_client_name_value {
     ctx.stack_.back()->set("replace-client-name", $4);
     ctx.leave();
 };
 
-replace_client_name_value:
-    WHEN_PRESENT {
-      $$ = ElementPtr(new StringElement("when-present", ctx.loc2pos(@1)));
-      }
-  | NEVER {
-      $$ = ElementPtr(new StringElement("never", ctx.loc2pos(@1)));
-      }
-  | ALWAYS {
-      $$ = ElementPtr(new StringElement("always", ctx.loc2pos(@1)));
-      }
-  | WHEN_NOT_PRESENT {
-      $$ = ElementPtr(new StringElement("when-not-present", ctx.loc2pos(@1)));
-      }
-  | BOOLEAN  {
-      error(@1, "boolean values for the replace-client-name are "
-                "no longer supported");
-      }
-  ;
-
-generated_prefix: GENERATED_PREFIX {
+// Deprecated, moved to global/network scopes. Eventually it should be removed.
+dep_generated_prefix: GENERATED_PREFIX {
     ctx.enter(ctx.NO_KEYWORD);
 } COLON STRING {
     ElementPtr s(new StringElement($4, ctx.loc2pos(@4)));
@@ -2110,7 +2196,8 @@ generated_prefix: GENERATED_PREFIX {
     ctx.leave();
 };
 
-hostname_char_set: HOSTNAME_CHAR_SET {
+// Deprecated, moved to global/network scopes. Eventually it should be removed.
+dep_hostname_char_set: HOSTNAME_CHAR_SET {
     ctx.enter(ctx.NO_KEYWORD);
 } COLON STRING {
     ElementPtr s(new StringElement($4, ctx.loc2pos(@4)));
@@ -2118,7 +2205,8 @@ hostname_char_set: HOSTNAME_CHAR_SET {
     ctx.leave();
 };
 
-hostname_char_replacement: HOSTNAME_CHAR_REPLACEMENT {
+// Deprecated, moved to global/network scopes. Eventually it should be removed.
+dep_hostname_char_replacement: HOSTNAME_CHAR_REPLACEMENT {
     ctx.enter(ctx.NO_KEYWORD);
 } COLON STRING {
     ElementPtr s(new StringElement($4, ctx.loc2pos(@4)));
index f658489a568cbc9ccc27ee31cbb912c1d76b9f59..e5dfbedddc0aa3ba81ca5c36d294347c54585f5f 100644 (file)
@@ -1710,8 +1710,8 @@ Dhcpv4Srv::processClientFqdnOption(Dhcpv4Exchange& ex) {
     // Set the server S, N, and O flags based on client's flags and
     // current configuration.
     D2ClientMgr& d2_mgr = CfgMgr::instance().getD2ClientMgr();
-    d2_mgr.adjustFqdnFlags<Option4ClientFqdn>(*fqdn, *fqdn_resp);
-
+    d2_mgr.adjustFqdnFlags<Option4ClientFqdn>(*fqdn, *fqdn_resp,
+                                              *(ex.getContext()->getDdnsParams()));
     // Carry over the client's E flag.
     fqdn_resp->setFlag(Option4ClientFqdn::FLAG_E,
                        fqdn->getFlag(Option4ClientFqdn::FLAG_E));
@@ -1720,12 +1720,14 @@ Dhcpv4Srv::processClientFqdnOption(Dhcpv4Exchange& ex) {
         !ex.getContext()->currentHost()->getHostname().empty()) {
         D2ClientMgr& d2_mgr = CfgMgr::instance().getD2ClientMgr();
         fqdn_resp->setDomainName(d2_mgr.qualifyName(ex.getContext()->currentHost()->getHostname(),
-                                                    true), Option4ClientFqdn::FULL);
+                                                    *(ex.getContext()->getDdnsParams()), true),
+                                 Option4ClientFqdn::FULL);
 
     } else {
         // Adjust the domain name based on domain name value and type sent by the
         // client and current configuration.
-        d2_mgr.adjustDomainName<Option4ClientFqdn>(*fqdn, *fqdn_resp);
+        d2_mgr.adjustDomainName<Option4ClientFqdn>(*fqdn, *fqdn_resp,
+                                                   *(ex.getContext()->getDdnsParams()));
     }
 
     // Add FQDN option to the response message. Note that, there may be some
@@ -1797,9 +1799,8 @@ Dhcpv4Srv::processHostnameOption(Dhcpv4Exchange& ex) {
         // send back a hostname option, send this option with a reserved
         // name for this client.
         if (should_send_hostname) {
-            std::string hostname =
-                d2_mgr.qualifyName(ctx->currentHost()->getHostname(), false);
-
+            std::string hostname = d2_mgr.qualifyName(ctx->currentHost()->getHostname(),
+                                                      *(ex.getContext()->getDdnsParams()), false);
             // Convert hostname to lower case.
             boost::algorithm::to_lower(hostname);
 
@@ -1822,9 +1823,8 @@ Dhcpv4Srv::processHostnameOption(Dhcpv4Exchange& ex) {
     // hostname option to this client if the client has included hostname option
     // but there is no reservation, or the configuration of the server requires
     // that we send the option regardless.
-
-    D2ClientConfig::ReplaceClientNameMode replace_name_mode =
-            d2_mgr.getD2ClientConfig()->getReplaceClientNameMode();
+    D2ClientConfig::ReplaceClientNameMode replace_name_mode
+        = ex.getContext()->getDdnsParams()->replace_client_name_mode_;
 
     // If we don't have a hostname then either we'll supply it or do nothing.
     if (!opt_hostname) {
@@ -1898,8 +1898,9 @@ Dhcpv4Srv::processHostnameOption(Dhcpv4Exchange& ex) {
         opt_hostname_resp.reset(new OptionString(Option::V4, DHO_HOST_NAME, "."));
     } else {
         // Sanitize the name the client sent us, if we're configured to do so.
-        isc::util::str::StringSanitizerPtr sanitizer = d2_mgr.getD2ClientConfig()
-                                                       ->getHostnameSanitizer();
+        isc::util::str::StringSanitizerPtr sanitizer
+            = ex.getContext()->getDdnsParams()->getHostnameSanitizer();
+
         if (sanitizer) {
             hostname = sanitizer->scrub(hostname);
         }
@@ -1915,8 +1916,10 @@ Dhcpv4Srv::processHostnameOption(Dhcpv4Exchange& ex) {
             // hostname. We don't want to append the trailing dot because
             // we don't know whether the hostname is partial or not and some
             // clients do not handle the hostnames with the trailing dot.
-            opt_hostname_resp.reset(new OptionString(Option::V4, DHO_HOST_NAME,
-                                                     d2_mgr.qualifyName(hostname, false)));
+            opt_hostname_resp.reset(
+                new OptionString(Option::V4, DHO_HOST_NAME,
+                                 d2_mgr.qualifyName(hostname, *(ex.getContext()->getDdnsParams()),
+                                                    false)));
         } else {
             opt_hostname_resp.reset(new OptionString(Option::V4, DHO_HOST_NAME, hostname));
         }
@@ -2222,7 +2225,7 @@ Dhcpv4Srv::assignLease(Dhcpv4Exchange& ex) {
 
                 lease->hostname_ = CfgMgr::instance().getD2ClientMgr()
                     .qualifyName(ctx->currentHost()->getHostname(),
-                                 static_cast<bool>(fqdn));
+                                 *(ex.getContext()->getDdnsParams()), static_cast<bool>(fqdn));
                 should_update = true;
 
             // If there has been Client FQDN or Hostname option sent, but the
@@ -2237,7 +2240,8 @@ Dhcpv4Srv::assignLease(Dhcpv4Exchange& ex) {
                 // the hostname. Whether the trailing dot is appended or not is
                 // controlled by the second argument to the generateFqdn().
                 lease->hostname_ = CfgMgr::instance().getD2ClientMgr()
-                    .generateFqdn(lease->addr_, static_cast<bool>(fqdn));
+                    .generateFqdn(lease->addr_, *(ex.getContext()->getDdnsParams()),
+                                  static_cast<bool>(fqdn));
 
                 LOG_DEBUG(ddns4_logger, DBG_DHCP4_DETAIL, DHCP4_RESPONSE_HOSTNAME_GENERATE)
                     .arg(query->getLabel())
@@ -2288,9 +2292,10 @@ Dhcpv4Srv::assignLease(Dhcpv4Exchange& ex) {
         // Set T1 and T2 per configuration.
         setTeeTimes(lease, subnet, resp);
 
+
         // Create NameChangeRequests if DDNS is enabled and this is a
         // real allocation.
-        if (!fake_allocation && CfgMgr::instance().ddnsEnabled()) {
+        if (!fake_allocation && (ex.getContext()->getDdnsParams()->enable_updates_)) {
             try {
                 LOG_DEBUG(ddns4_logger, DBG_DHCP4_DETAIL, DHCP4_NCR_CREATE)
                     .arg(query->getLabel());
index f3404428951dceff92108803b49632539f050934..267bf0e255095efc1f3f1addb9a801cced00996d 100644 (file)
@@ -350,6 +350,12 @@ configureDhcp4Server(Dhcpv4Srv& server, isc::data::ConstElementPtr config_set,
         // default values and will insert derived values as well.
         mutable_cfg = boost::const_pointer_cast<Element>(config_set);
 
+        // Relocate dhcp-ddns parameters that have moved to global scope.
+        // Rule is that a global value overrides the dhcp-ddns value, so
+        // we need to do this before we apply global defaults.
+        // Note this is done for backward compatibilty.
+        srv_cfg->moveDdnsParams(mutable_cfg);
+
         // Set all default values if not specified by the user.
         SimpleParser4::setAllDefaults(mutable_cfg);
 
@@ -563,8 +569,13 @@ configureDhcp4Server(Dhcpv4Srv& server, isc::data::ConstElementPtr config_set,
                  (config_pair.first == "t2-percent") ||
                  (config_pair.first == "loggers") ||
                  (config_pair.first == "hostname-char-set") ||
-                 (config_pair.first == "hostname-char-replacement")) {
-
+                 (config_pair.first == "hostname-char-replacement") ||
+                 (config_pair.first == "ddns-send-updates") ||
+                 (config_pair.first == "ddns-override-no-update") ||
+                 (config_pair.first == "ddns-override-client-update") ||
+                 (config_pair.first == "ddns-replace-client-name") ||
+                 (config_pair.first == "ddns-generated-prefix") ||
+                 (config_pair.first == "ddns-qualifying-suffix")) {
                 CfgMgr::instance().getStagingCfg()->addConfiguredGlobal(config_pair.first,
                                                                         config_pair.second);
                 continue;
@@ -593,9 +604,6 @@ configureDhcp4Server(Dhcpv4Srv& server, isc::data::ConstElementPtr config_set,
         // Validate D2 client confuguration.
         if (!d2_client_cfg) {
             d2_client_cfg.reset(new D2ClientConfig());
-            d2_client_cfg->setFetchGlobalsFn([]() -> ConstElementPtr {
-                return (CfgMgr::instance().getStagingCfg()->getConfiguredGlobals());
-             });
         }
         d2_client_cfg->validateContents();
         srv_cfg->setD2ClientConfig(d2_client_cfg);
index f6736dd8a6ba5923c72a3943514fdf465cef259e..a5fb10e935bcc43e360e838599a837ac198aa3a7 100644 (file)
@@ -1,9 +1,8 @@
-// Generated 201908191237
-// A Bison parser, made by GNU Bison 3.4.1.
+// A Bison parser, made by GNU Bison 3.2.1.
 
 // Locations for Bison parsers in C++
 
-// Copyright (C) 2002-2015, 2018-2019 Free Software Foundation, Inc.
+// Copyright (C) 2002-2015, 2018 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"
+#line 14 "dhcp4_parser.yy" // location.cc:339
 namespace isc { namespace dhcp {
-#line 60 "location.hh"
-
+#line 60 "location.hh" // location.cc:339
   /// A point in a source file.
   class position
   {
@@ -318,8 +316,7 @@ namespace isc { namespace dhcp {
     return ostr;
   }
 
-#line 14 "dhcp4_parser.yy"
+#line 14 "dhcp4_parser.yy" // location.cc:339
 } } // isc::dhcp
-#line 323 "location.hh"
-
+#line 322 "location.hh" // location.cc:339
 #endif // !YY_PARSER4_LOCATION_HH_INCLUDED
index ab5e530ad47cb3a9d8339b6fd4ed5ebbd96d465f..22ef35f744d2e26eb583a751ca8d621cf4b3a5bd 100644 (file)
@@ -1,5 +1,4 @@
-// Generated 201908191237
-// A Bison parser, made by GNU Bison 3.4.1.
+// A Bison parser, made by GNU Bison 3.2.1.
 
 // Starting with Bison 3.2, this file is useless: the structure it
 // used to define is now defined in "location.hh".
index a0044e9db352133091740a69b39b5b4a2deecaaa..81e152d836b96a78a0b6b5cd75d1557e8601f5d0 100644 (file)
@@ -1,5 +1,4 @@
-// Generated 201908191237
-// A Bison parser, made by GNU Bison 3.4.1.
+// A Bison parser, made by GNU Bison 3.2.1.
 
 // Starting with Bison 3.2, this file is useless: the structure it
 // used to define is now defined with the parser itself.
index ea7c77783d99580e1b124b6e77094ecb96f58460..087225a679611840e80cb9420d5da5cfe66c6c9e 100644 (file)
@@ -796,6 +796,19 @@ public:
         EXPECT_TRUE(pool);
     }
 
+    template <typename ValueType>
+    void checkGlobal(const std::string name, ValueType value) {
+        ConstElementPtr param;
+        ConstElementPtr exp_value;
+        param = CfgMgr::instance().getStagingCfg()->getConfiguredGlobal(name);
+        ASSERT_TRUE(param) << "global: " << name << ", expected but not found";
+        ASSERT_NO_THROW(exp_value = Element::create(value));
+        EXPECT_TRUE(param->equals(*exp_value)) << "global: " << name
+                                               << isc::data::prettyPrint(param)
+                                               << " does not match expected: "
+                                               << isc::data::prettyPrint(exp_value);
+    }
+
     boost::scoped_ptr<Dhcpv4Srv> srv_;  ///< DHCP4 server under test
     int rcode_;                         ///< Return code from element parsing
     ConstElementPtr comment_;           ///< Reason for parse fail
@@ -4212,10 +4225,8 @@ TEST_F(Dhcp4ParserTest, selectedInterfacesAndAddresses) {
     EXPECT_FALSE(test_config.socketOpen("eth1", "192.0.2.5"));
 }
 
-
-// This test checks the ability of the server to parse a configuration
-// containing a full, valid dhcp-ddns (D2ClientConfig) entry.
-TEST_F(Dhcp4ParserTest, d2ClientConfig) {
+// This test verifies that valid d2CliengConfig works correctly.
+TEST_F(Dhcp4ParserTest, d2ClientConfigValid) {
     ConstElementPtr status;
 
     // Verify that the D2 configuration can be fetched and is set to disabled.
@@ -4239,14 +4250,7 @@ TEST_F(Dhcp4ParserTest, d2ClientConfig) {
         "     \"sender-port\" : 778, "
         "     \"max-queue-size\" : 2048, "
         "     \"ncr-protocol\" : \"UDP\", "
-        "     \"ncr-format\" : \"JSON\", "
-        "     \"override-no-update\" : true, "
-        "     \"override-client-update\" : true, "
-        "     \"replace-client-name\" : \"when-present\", "
-        "     \"generated-prefix\" : \"test.prefix\", "
-        "     \"qualifying-suffix\" : \"test.suffix.\", "
-        "     \"hostname-char-set\" : \"[^A-Za-z0-9_-]\", "
-        "     \"hostname-char-replacement\" : \"x\" }, "
+        "     \"ncr-format\" : \"JSON\"}, "
         "\"valid-lifetime\": 4000 }";
 
     // Convert the JSON string to configuration elements.
@@ -4276,22 +4280,20 @@ TEST_F(Dhcp4ParserTest, d2ClientConfig) {
     EXPECT_EQ(2048, d2_client_config->getMaxQueueSize());
     EXPECT_EQ(dhcp_ddns::NCR_UDP, d2_client_config->getNcrProtocol());
     EXPECT_EQ(dhcp_ddns::FMT_JSON, d2_client_config->getNcrFormat());
-    EXPECT_TRUE(d2_client_config->getOverrideNoUpdate());
-    EXPECT_TRUE(d2_client_config->getOverrideClientUpdate());
-    EXPECT_EQ(D2ClientConfig::RCM_WHEN_PRESENT, d2_client_config->getReplaceClientNameMode());
-    EXPECT_EQ("test.prefix", d2_client_config->getGeneratedPrefix());
-    EXPECT_EQ("test.suffix.", d2_client_config->getQualifyingSuffix());
-    EXPECT_FALSE(d2_client_config->getHostnameCharSet().unspecified());
-    EXPECT_EQ("[^A-Za-z0-9_-]", d2_client_config->getHostnameCharSet().get());
-    EXPECT_FALSE(d2_client_config->getHostnameCharReplacement().unspecified());
-    EXPECT_EQ("x", d2_client_config->getHostnameCharReplacement().get());
-    EXPECT_TRUE(d2_client_config->getHostnameSanitizer());
+
+    // The following, deprecated dhcp-ddns parameters,
+    // should all have global default values.
+    checkGlobal("ddns-send-updates", true);
+    checkGlobal("ddns-override-no-update", false);
+    checkGlobal("ddns-override-client-update", false);
+    checkGlobal("ddns-replace-client-name", "never");
+    checkGlobal("ddns-generated-prefix", "myhost");
+    checkGlobal("ddns-qualifying-suffix", "");
 }
 
-// This test checks the ability of the server to parse a configuration
-// containing a full, valid dhcp-ddns (D2ClientConfig) entry with
-// hostname-char-* at the global scope.
-TEST_F(Dhcp4ParserTest, d2ClientConfigGlobal) {
+// This test verifies that valid but deprecated dhcp-ddns parameters
+// get moved to the global scope when they do not already exist there.
+TEST_F(Dhcp4ParserTest, d2ClientConfigMoveToGlobal) {
     ConstElementPtr status;
 
     // Verify that the D2 configuration can be fetched and is set to disabled.
@@ -4320,9 +4322,9 @@ TEST_F(Dhcp4ParserTest, d2ClientConfigGlobal) {
         "     \"override-client-update\" : true, "
         "     \"replace-client-name\" : \"when-present\", "
         "     \"generated-prefix\" : \"test.prefix\", "
-        "     \"qualifying-suffix\" : \"test.suffix.\" },"
-        "\"hostname-char-set\" : \"[^A-Za-z0-9_-]\", "
-        "\"hostname-char-replacement\" : \"x\", "
+        "     \"qualifying-suffix\" : \"test.suffix.\""
+        "     \"hostname-char-set\" : \"[^A-Z]\", "
+        "     \"hostname-char-replacement\" : \"x\" }, "
         "\"valid-lifetime\": 4000 }";
 
     // Convert the JSON string to configuration elements.
@@ -4352,21 +4354,22 @@ TEST_F(Dhcp4ParserTest, d2ClientConfigGlobal) {
     EXPECT_EQ(2048, d2_client_config->getMaxQueueSize());
     EXPECT_EQ(dhcp_ddns::NCR_UDP, d2_client_config->getNcrProtocol());
     EXPECT_EQ(dhcp_ddns::FMT_JSON, d2_client_config->getNcrFormat());
-    EXPECT_TRUE(d2_client_config->getOverrideNoUpdate());
-    EXPECT_TRUE(d2_client_config->getOverrideClientUpdate());
-    EXPECT_EQ(D2ClientConfig::RCM_WHEN_PRESENT, d2_client_config->getReplaceClientNameMode());
-    EXPECT_EQ("test.prefix", d2_client_config->getGeneratedPrefix());
-    EXPECT_EQ("test.suffix.", d2_client_config->getQualifyingSuffix());
-    EXPECT_FALSE(d2_client_config->getHostnameCharSet().unspecified());
-    EXPECT_EQ("[^A-Za-z0-9_-]", d2_client_config->getHostnameCharSet().get());
-    EXPECT_FALSE(d2_client_config->getHostnameCharReplacement().unspecified());
-    EXPECT_EQ("x", d2_client_config->getHostnameCharReplacement().get());
-    EXPECT_TRUE(d2_client_config->getHostnameSanitizer());
+
+    // ddns-send-updates should be global default
+    checkGlobal("ddns-send-updates", true);
+
+    // The following should all have been moved from dhcp-ddns.
+    checkGlobal("ddns-override-no-update", true);
+    checkGlobal("ddns-override-client-update", true);
+    checkGlobal("ddns-replace-client-name", "when-present");
+    checkGlobal("ddns-generated-prefix", "test.prefix");
+    checkGlobal("ddns-qualifying-suffix", "test.suffix.");
+    checkGlobal("hostname-char-set", "[^A-Z]");
+    checkGlobal("hostname-char-replacement", "x");
 }
 
-// This test checks the ability of the server to parse a configuration
-// containing a full, valid dhcp-ddns (D2ClientConfig) entry with
-// hostname-char-* at the local and global scopes (local has the priority).
+// This test verifies that explicit global values override deprecated
+// dhcp-ddns parameters (i.e. global scope wins)
 TEST_F(Dhcp4ParserTest, d2ClientConfigBoth) {
     ConstElementPtr status;
 
@@ -4392,15 +4395,21 @@ TEST_F(Dhcp4ParserTest, d2ClientConfigBoth) {
         "     \"max-queue-size\" : 2048, "
         "     \"ncr-protocol\" : \"UDP\", "
         "     \"ncr-format\" : \"JSON\", "
-        "     \"override-no-update\" : true, "
-        "     \"override-client-update\" : true, "
+        "     \"override-no-update\" : false, "
+        "     \"override-client-update\" : false, "
         "     \"replace-client-name\" : \"when-present\", "
-        "     \"generated-prefix\" : \"test.prefix\", "
-        "     \"qualifying-suffix\" : \"test.suffix.\", "
-        "     \"hostname-char-set\" : \"[^A-Za-z0-9_-]\", "
-        "     \"hostname-char-replacement\" : \"x\" }, "
-        "\"hostname-char-set\" : \"[^A-Z]\", "
-        "\"hostname-char-replacement\" : \"z\", "
+        "     \"generated-prefix\" : \"d2.prefix\", "
+        "     \"qualifying-suffix\" : \"d2.suffix.\", "
+        "     \"hostname-char-set\" : \"[^0-9]\", "
+        "     \"hostname-char-replacement\" : \"z\" }, "
+        " \"ddns-send-updates\" : false, "
+        " \"ddns-override-no-update\" : true, "
+        " \"ddns-override-client-update\" : true, "
+        " \"ddns-replace-client-name\" : \"always\", "
+        " \"ddns-generated-prefix\" : \"global.prefix\", "
+        " \"ddns-qualifying-suffix\" : \"global.suffix.\", "
+        " \"hostname-char-set\" : \"[^A-Z]\", "
+        " \"hostname-char-replacement\" : \"x\", "
         "\"valid-lifetime\": 4000 }";
 
     // Convert the JSON string to configuration elements.
@@ -4430,16 +4439,16 @@ TEST_F(Dhcp4ParserTest, d2ClientConfigBoth) {
     EXPECT_EQ(2048, d2_client_config->getMaxQueueSize());
     EXPECT_EQ(dhcp_ddns::NCR_UDP, d2_client_config->getNcrProtocol());
     EXPECT_EQ(dhcp_ddns::FMT_JSON, d2_client_config->getNcrFormat());
-    EXPECT_TRUE(d2_client_config->getOverrideNoUpdate());
-    EXPECT_TRUE(d2_client_config->getOverrideClientUpdate());
-    EXPECT_EQ(D2ClientConfig::RCM_WHEN_PRESENT, d2_client_config->getReplaceClientNameMode());
-    EXPECT_EQ("test.prefix", d2_client_config->getGeneratedPrefix());
-    EXPECT_EQ("test.suffix.", d2_client_config->getQualifyingSuffix());
-    EXPECT_FALSE(d2_client_config->getHostnameCharSet().unspecified());
-    EXPECT_EQ("[^A-Za-z0-9_-]", d2_client_config->getHostnameCharSet().get());
-    EXPECT_FALSE(d2_client_config->getHostnameCharReplacement().unspecified());
-    EXPECT_EQ("x", d2_client_config->getHostnameCharReplacement().get());
-    EXPECT_TRUE(d2_client_config->getHostnameSanitizer());
+
+    // Verify all global values won.
+    checkGlobal("ddns-send-updates", false);
+    checkGlobal("ddns-override-no-update", true);
+    checkGlobal("ddns-override-client-update", true);
+    checkGlobal("ddns-replace-client-name", "always");
+    checkGlobal("ddns-generated-prefix", "global.prefix");
+    checkGlobal("ddns-qualifying-suffix", "global.suffix.");
+    checkGlobal("hostname-char-set", "[^A-Z]");
+    checkGlobal("hostname-char-replacement", "x");
 }
 
 // This test checks the ability of the server to handle a configuration
index bb906f6c6c7cb1abff6e30c55009fe38b33a5f93..8b42d72c80852609f1d3e3009d292d59c68a4194 100644 (file)
@@ -132,9 +132,9 @@ Dhcp4SrvD2Test::configure(const std::string& config, bool exp_result) {
     int rcode;
     ConstElementPtr comment = config::parseAnswer(rcode, status);
     if (exp_result == SHOULD_PASS) {
-        ASSERT_EQ(0, rcode);
+        ASSERT_EQ(0, rcode) << "parse comment: " << comment->stringValue();
     } else {
-        ASSERT_EQ(1, rcode);
+        ASSERT_EQ(1, rcode) << "parse comment: " << comment->stringValue();
     }
 
     if (rcode == 0) {
index 08f335e0cfdb6f65c70eee171a9d4f52904f63d4..74476abf531efeea7bcad6958435a4f164a1ba01 100644 (file)
@@ -644,10 +644,6 @@ Dhcpv4SrvTest::configure(const std::string& config, NakedDhcpv4Srv& srv,
     } );
 
     if (commit) {
-        auto cfg = CfgMgr::instance().getStagingCfg()->getD2ClientConfig();
-        cfg->setFetchGlobalsFn([]() -> ConstElementPtr {
-            return (CfgMgr::instance().getCurrentCfg()->getConfiguredGlobals());
-        });
         CfgMgr::instance().commit();
     }
  }
@@ -693,10 +689,6 @@ Dhcpv4SrvTest::configureWithStatus(const std::string& config, NakedDhcpv4Srv& sr
             cfg_db->createManagers();
             } );
         if (commit) {
-            auto cfg = CfgMgr::instance().getStagingCfg()->getD2ClientConfig();
-            cfg->setFetchGlobalsFn([]() -> ConstElementPtr {
-                return (CfgMgr::instance().getCurrentCfg()->getConfiguredGlobals());
-            });
             CfgMgr::instance().commit();
         }
     }
index 5e705bed385d125f1edfa35e91d9395b4f2277ee..09ff3431af8116ead89eaf28dd49d06103d979be 100644 (file)
@@ -198,8 +198,8 @@ const char* CONFIGS[] = {
         "}"
     "}",
     // 7
-    // Configuration which enables DNS updates and hostname sanitization.
-    // the second at the global scope.
+    // Configuration with disabled DNS updates (default) and
+    // hostname sanitization defined at global scope.
     "{ \"interfaces-config\": {"
         "      \"interfaces\": [ \"*\" ]"
         "},"
@@ -221,6 +221,33 @@ const char* CONFIGS[] = {
         " }],"
         "\"hostname-char-set\" : \"[^A-Za-z0-9.-]\","
         "\"hostname-char-replacement\" : \"x\""
+    "}",
+    // 8
+    // D2 enabled
+    // global ddns-send-updates is false
+    // one subnet does not enable updates
+    // one subnet does enables updates
+    "{ \"interfaces-config\": {\n"
+        "      \"interfaces\": [ \"*\" ]\n"
+        "},\n"
+        "\"dhcp-ddns\": {\n"
+            "\"enable-updates\": true\n"
+        "},\n"
+        "\"ddns-send-updates\": false,\n"
+        "\"subnet4\": [ {\n"
+        "       \"subnet\": \"192.0.2.0/24\",\n"
+        "       \"id\": 1,\n"
+        "       \"pools\": [ { \"pool\": \"192.0.2.10-192.0.2.100\" } ],\n"
+        "       \"interface\": \"eth0\"\n"
+        "   },\n"
+        "   {\n"
+        "       \"subnet\": \"192.0.3.0/24\", \n"
+        "       \"id\": 2,\n"
+        "       \"pools\": [ { \"pool\": \"192.0.3.10-192.0.3.100\" } ],\n"
+        "       \"interface\": \"eth1\",\n"
+        "       \"ddns-send-updates\": true\n"
+        "   }\n"
+        "]\n"
     "}"
 };
 
@@ -294,17 +321,36 @@ public:
         ASSERT_NO_THROW(cfg.reset(new D2ClientConfig(true,
                                   isc::asiolink::IOAddress("127.0.0.1"), 53001,
                                   isc::asiolink::IOAddress("0.0.0.0"), 0, 1024,
-                                  dhcp_ddns::NCR_UDP, dhcp_ddns::FMT_JSON,
-                                  (mask & OVERRIDE_NO_UPDATE),
-                                  (mask & OVERRIDE_CLIENT_UPDATE),
-                                  ((mask & REPLACE_CLIENT_NAME) ?
-                                    D2ClientConfig::RCM_WHEN_PRESENT
-                                   : D2ClientConfig::RCM_NEVER),
-                                  "myhost", "example.com", "", "")));
+                                  dhcp_ddns::NCR_UDP, dhcp_ddns::FMT_JSON)));
+
         ASSERT_NO_THROW(CfgMgr::instance().setD2ClientConfig(cfg));
+
+        // Now we'll set the DDNS parameters at the subnet level.
+        // These should get fetched when getDdnsParams() is invoked.
+        ASSERT_TRUE(subnet_) << "enableD2 called without subnet_ set";
+        subnet_->setDdnsSendUpdates(true);
+        subnet_->setDdnsOverrideNoUpdate(mask & OVERRIDE_NO_UPDATE);
+        subnet_->setDdnsOverrideClientUpdate(mask & OVERRIDE_CLIENT_UPDATE);
+        subnet_->setDdnsReplaceClientNameMode((mask & REPLACE_CLIENT_NAME) ?
+                                    D2ClientConfig::RCM_WHEN_PRESENT
+                                   : D2ClientConfig::RCM_NEVER);
+        subnet_->setDdnsGeneratedPrefix("myhost");
+        subnet_->setDdnsQualifyingSuffix("example.com");
+
         ASSERT_NO_THROW(srv_->startD2());
     }
 
+    // Fetch DDNS parameter set scoped to the current subnet_.
+    DdnsParamsPtr getDdnsParams() {
+        ConstElementPtr cfg = CfgMgr::instance().getCurrentCfg()->toElement();
+        if (!subnet_) {
+            ADD_FAILURE() << "getDdnsParams() - subnet_ is empty!";
+            return (DdnsParamsPtr(new DdnsParams()));
+        }
+
+        return(CfgMgr::instance().getCurrentCfg()->getDdnsParams(*subnet_));
+    }
+
     // Create a lease to be used by various tests.
     Lease4Ptr createLease(const isc::asiolink::IOAddress& addr,
                           const std::string& hostname,
@@ -362,7 +408,7 @@ public:
     std::string generatedNameFromAddress(const IOAddress& addr,
                                          const bool trailing_dot = true) {
         return(CfgMgr::instance().getD2ClientMgr()
-               .generateFqdn(addr, trailing_dot));
+               .generateFqdn(addr, *getDdnsParams(), trailing_dot));
     }
 
     // Get the Client FQDN Option from the given message.
@@ -523,9 +569,9 @@ public:
             "},"
             "\"valid-lifetime\": 3000,"
             "\"subnet4\": [ { "
-            "    \"subnet\": \"10.0.0.0/24\", "
+            "    \"subnet\": \"192.0.2.0/24\", "
             "    \"id\": 1,"
-            "    \"pools\": [ { \"pool\": \"10.0.0.10-10.0.0.10\" } ]"
+            "    \"pools\": [ { \"pool\": \"192.0.2.10-192.0.2.10\" } ]"
             " }],"
             "\"dhcp-ddns\": {"
             "  \"enable-updates\": true,"
@@ -621,7 +667,12 @@ public:
             answer.reset(new Pkt4(DHCPACK, 1234));
 
         }
+
         Dhcpv4Exchange ex = createExchange(query);
+        if (!ex.getContext()->subnet_) {
+            ADD_FAILURE() << "createExchange did not select a subnet";
+        }
+
         srv_->processClientName(ex);
 
         OptionStringPtr hostname = getHostnameOption(ex.getResponse());
@@ -2055,4 +2106,62 @@ TEST_F(NameDhcpv4SrvTest, sanitizeFqdnGlobal) {
     }
 }
 
+// Verifies that socped ddns-parameter handling.
+// Specifically that D2 can be enabled with sending updates
+// disabled globally, and enabled at the subnet level.
+TEST_F(NameDhcpv4SrvTest, ddnsScopeTest) {
+    Dhcp4Client client1(Dhcp4Client::SELECTING);
+    client1.setIfaceName("eth0");
+
+    // Load a configuration with D2 enabled
+    ASSERT_NO_FATAL_FAILURE(configure(CONFIGS[8], *client1.getServer()));
+    ASSERT_TRUE(CfgMgr::instance().ddnsEnabled());
+
+    // Include the Client FQDN option.
+    ASSERT_NO_THROW(client1.includeFQDN((Option4ClientFqdn::FLAG_S
+                                        | Option4ClientFqdn::FLAG_E),
+                                       "client1.example.org.", Option4ClientFqdn::FULL));
+
+    // Now send the DHCPREQUEST with including the FQDN option.
+    ASSERT_NO_THROW(client1.doDORA());
+    Pkt4Ptr resp = client1.getContext().response_;
+    ASSERT_TRUE(resp);
+    ASSERT_EQ(DHCPACK, static_cast<int>(resp->getType()));
+
+    // Check that the response FQDN is as expected.
+    Option4ClientFqdnPtr fqdn;
+    fqdn = boost::dynamic_pointer_cast<Option4ClientFqdn>(resp->getOption(DHO_FQDN));
+    ASSERT_TRUE(fqdn);
+    EXPECT_EQ("client1.example.org.", fqdn->getDomainName());
+
+    // ddns-send-udpates for subnet 1 should be off, so we should NOT have an NRC.
+    ASSERT_EQ(0, CfgMgr::instance().getD2ClientMgr().getQueueSize());
+
+    // Now let's try with a client on subnet 2.
+    Dhcp4Client client2(Dhcp4Client::SELECTING);
+    client2.setIfaceName("eth1");
+
+    // Include the Client FQDN option.
+    ASSERT_NO_THROW(client2.includeFQDN((Option4ClientFqdn::FLAG_S
+                                        | Option4ClientFqdn::FLAG_E),
+                                       "two.example.org.", Option4ClientFqdn::FULL));
+
+    ASSERT_NO_THROW(client2.doDORA());
+    resp = client2.getContext().response_;
+    ASSERT_TRUE(resp);
+    ASSERT_EQ(DHCPACK, static_cast<int>(resp->getType()));
+
+    // Check that the response FQDN is as expected.
+    fqdn = boost::dynamic_pointer_cast<Option4ClientFqdn>(resp->getOption(DHO_FQDN));
+    ASSERT_TRUE(fqdn);
+    EXPECT_EQ("two.example.org.", fqdn->getDomainName());
+
+    // ddns-send-udpates for subnet 2 are enabled, verify the NCR is correct.
+    ASSERT_EQ(1, CfgMgr::instance().getD2ClientMgr().getQueueSize());
+    verifyNameChangeRequest(isc::dhcp_ddns::CHG_ADD, true, true,
+                            resp->getYiaddr().toText(),
+                            "two.example.org.", "",
+                            time(NULL), 7200, true);
+}
+
 } // end of anonymous namespace
index 6c3ea5109ee9d0c2a026ad153382be25483da69a..ac2a2aeeb1ed5d3d687cab99ab39557f5b087f84 100644 (file)
@@ -68,6 +68,7 @@ namespace {
 ///@{
 /// @brief extracted configurations
 const char* EXTRACTED_CONFIGS[] = {
+/// put this after const char* EXTRACTED_CONFIGS[] = {
     // CONFIGURATION 0
 "{\n"
 "        \"interfaces-config\": {\n"
@@ -1194,16 +1195,9 @@ const char* EXTRACTED_CONFIGS[] = {
 "{\n"
 "        \"dhcp-ddns\": {\n"
 "            \"enable-updates\": true,\n"
-"            \"generated-prefix\": \"test.prefix\",\n"
-"            \"hostname-char-replacement\": \"x\",\n"
-"            \"hostname-char-set\": \"[^A-Za-z0-9_-]\",\n"
 "            \"max-queue-size\": 2048,\n"
 "            \"ncr-format\": \"JSON\",\n"
 "            \"ncr-protocol\": \"UDP\",\n"
-"            \"override-client-update\": true,\n"
-"            \"override-no-update\": true,\n"
-"            \"qualifying-suffix\": \"test.suffix.\",\n"
-"            \"replace-client-name\": \"when-present\",\n"
 "            \"sender-ip\": \"192.168.2.2\",\n"
 "            \"sender-port\": 778,\n"
 "            \"server-ip\": \"192.168.2.1\",\n"
@@ -1232,6 +1226,8 @@ const char* EXTRACTED_CONFIGS[] = {
 "        \"dhcp-ddns\": {\n"
 "            \"enable-updates\": true,\n"
 "            \"generated-prefix\": \"test.prefix\",\n"
+"            \"hostname-char-replacement\": \"x\",\n"
+"            \"hostname-char-set\": \"[^A-Z]\",\n"
 "            \"max-queue-size\": 2048,\n"
 "            \"ncr-format\": \"JSON\",\n"
 "            \"ncr-protocol\": \"UDP\",\n"
@@ -1244,8 +1240,6 @@ const char* EXTRACTED_CONFIGS[] = {
 "            \"server-ip\": \"192.168.2.1\",\n"
 "            \"server-port\": 777\n"
 "        },\n"
-"        \"hostname-char-replacement\": \"x\",\n"
-"        \"hostname-char-set\": \"[^A-Za-z0-9_-]\",\n"
 "        \"interfaces-config\": {\n"
 "            \"interfaces\": [ \"*\" ],\n"
 "            \"re-detect\": false\n"
@@ -1266,24 +1260,30 @@ const char* EXTRACTED_CONFIGS[] = {
 "    }\n",
     // CONFIGURATION 43
 "{\n"
+"        \"ddns-generated-prefix\": \"global.prefix\",\n"
+"        \"ddns-override-client-update\": true,\n"
+"        \"ddns-override-no-update\": true,\n"
+"        \"ddns-qualifying-suffix\": \"global.suffix.\",\n"
+"        \"ddns-replace-client-name\": \"always\",\n"
+"        \"ddns-send-updates\": false,\n"
 "        \"dhcp-ddns\": {\n"
 "            \"enable-updates\": true,\n"
-"            \"generated-prefix\": \"test.prefix\",\n"
-"            \"hostname-char-replacement\": \"x\",\n"
-"            \"hostname-char-set\": \"[^A-Za-z0-9_-]\",\n"
+"            \"generated-prefix\": \"d2.prefix\",\n"
+"            \"hostname-char-replacement\": \"z\",\n"
+"            \"hostname-char-set\": \"[^0-9]\",\n"
 "            \"max-queue-size\": 2048,\n"
 "            \"ncr-format\": \"JSON\",\n"
 "            \"ncr-protocol\": \"UDP\",\n"
-"            \"override-client-update\": true,\n"
-"            \"override-no-update\": true,\n"
-"            \"qualifying-suffix\": \"test.suffix.\",\n"
+"            \"override-client-update\": false,\n"
+"            \"override-no-update\": false,\n"
+"            \"qualifying-suffix\": \"d2.suffix.\",\n"
 "            \"replace-client-name\": \"when-present\",\n"
 "            \"sender-ip\": \"192.168.2.2\",\n"
 "            \"sender-port\": 778,\n"
 "            \"server-ip\": \"192.168.2.1\",\n"
 "            \"server-port\": 777\n"
 "        },\n"
-"        \"hostname-char-replacement\": \"z\",\n"
+"        \"hostname-char-replacement\": \"x\",\n"
 "        \"hostname-char-set\": \"[^A-Z]\",\n"
 "        \"interfaces-config\": {\n"
 "            \"interfaces\": [ \"*\" ],\n"
@@ -2137,22 +2137,24 @@ const char* EXTRACTED_CONFIGS[] = {
 
 /// @brief unparsed configurations
 const char* UNPARSED_CONFIGS[] = {
+///put this after const char* UNPARSED_CONFIGS[] = {
     // CONFIGURATION 0
 "{\n"
 "        \"authoritative\": false,\n"
 "        \"boot-file-name\": \"\",\n"
 "        \"calculate-tee-times\": false,\n"
+"        \"ddns-generated-prefix\": \"myhost\",\n"
+"        \"ddns-override-client-update\": false,\n"
+"        \"ddns-override-no-update\": false,\n"
+"        \"ddns-qualifying-suffix\": \"\",\n"
+"        \"ddns-replace-client-name\": \"never\",\n"
+"        \"ddns-send-updates\": true,\n"
 "        \"decline-probation-period\": 86400,\n"
 "        \"dhcp-ddns\": {\n"
 "            \"enable-updates\": false,\n"
-"            \"generated-prefix\": \"myhost\",\n"
 "            \"max-queue-size\": 1024,\n"
 "            \"ncr-format\": \"JSON\",\n"
 "            \"ncr-protocol\": \"UDP\",\n"
-"            \"override-client-update\": false,\n"
-"            \"override-no-update\": false,\n"
-"            \"qualifying-suffix\": \"\",\n"
-"            \"replace-client-name\": \"never\",\n"
 "            \"sender-ip\": \"0.0.0.0\",\n"
 "            \"sender-port\": 0,\n"
 "            \"server-ip\": \"127.0.0.1\",\n"
@@ -2205,17 +2207,18 @@ const char* UNPARSED_CONFIGS[] = {
 "        \"authoritative\": false,\n"
 "        \"boot-file-name\": \"\",\n"
 "        \"calculate-tee-times\": false,\n"
+"        \"ddns-generated-prefix\": \"myhost\",\n"
+"        \"ddns-override-client-update\": false,\n"
+"        \"ddns-override-no-update\": false,\n"
+"        \"ddns-qualifying-suffix\": \"\",\n"
+"        \"ddns-replace-client-name\": \"never\",\n"
+"        \"ddns-send-updates\": true,\n"
 "        \"decline-probation-period\": 86400,\n"
 "        \"dhcp-ddns\": {\n"
 "            \"enable-updates\": false,\n"
-"            \"generated-prefix\": \"myhost\",\n"
 "            \"max-queue-size\": 1024,\n"
 "            \"ncr-format\": \"JSON\",\n"
 "            \"ncr-protocol\": \"UDP\",\n"
-"            \"override-client-update\": false,\n"
-"            \"override-no-update\": false,\n"
-"            \"qualifying-suffix\": \"\",\n"
-"            \"replace-client-name\": \"never\",\n"
 "            \"sender-ip\": \"0.0.0.0\",\n"
 "            \"sender-port\": 0,\n"
 "            \"server-ip\": \"127.0.0.1\",\n"
@@ -2264,6 +2267,12 @@ const char* UNPARSED_CONFIGS[] = {
 "                \"4o6-subnet\": \"\",\n"
 "                \"authoritative\": false,\n"
 "                \"calculate-tee-times\": false,\n"
+"                \"ddns-generated-prefix\": \"myhost\",\n"
+"                \"ddns-override-client-update\": false,\n"
+"                \"ddns-override-no-update\": false,\n"
+"                \"ddns-qualifying-suffix\": \"\",\n"
+"                \"ddns-replace-client-name\": \"never\",\n"
+"                \"ddns-send-updates\": true,\n"
 "                \"id\": 1,\n"
 "                \"match-client-id\": true,\n"
 "                \"next-server\": \"0.0.0.0\",\n"
@@ -2295,17 +2304,18 @@ const char* UNPARSED_CONFIGS[] = {
 "        \"authoritative\": false,\n"
 "        \"boot-file-name\": \"\",\n"
 "        \"calculate-tee-times\": false,\n"
+"        \"ddns-generated-prefix\": \"myhost\",\n"
+"        \"ddns-override-client-update\": false,\n"
+"        \"ddns-override-no-update\": false,\n"
+"        \"ddns-qualifying-suffix\": \"\",\n"
+"        \"ddns-replace-client-name\": \"never\",\n"
+"        \"ddns-send-updates\": true,\n"
 "        \"decline-probation-period\": 86400,\n"
 "        \"dhcp-ddns\": {\n"
 "            \"enable-updates\": false,\n"
-"            \"generated-prefix\": \"myhost\",\n"
 "            \"max-queue-size\": 1024,\n"
 "            \"ncr-format\": \"JSON\",\n"
 "            \"ncr-protocol\": \"UDP\",\n"
-"            \"override-client-update\": false,\n"
-"            \"override-no-update\": false,\n"
-"            \"qualifying-suffix\": \"\",\n"
-"            \"replace-client-name\": \"never\",\n"
 "            \"sender-ip\": \"0.0.0.0\",\n"
 "            \"sender-port\": 0,\n"
 "            \"server-ip\": \"127.0.0.1\",\n"
@@ -2354,6 +2364,12 @@ const char* UNPARSED_CONFIGS[] = {
 "                \"4o6-subnet\": \"\",\n"
 "                \"authoritative\": false,\n"
 "                \"calculate-tee-times\": false,\n"
+"                \"ddns-generated-prefix\": \"myhost\",\n"
+"                \"ddns-override-client-update\": false,\n"
+"                \"ddns-override-no-update\": false,\n"
+"                \"ddns-qualifying-suffix\": \"\",\n"
+"                \"ddns-replace-client-name\": \"never\",\n"
+"                \"ddns-send-updates\": true,\n"
 "                \"id\": 1,\n"
 "                \"match-client-id\": true,\n"
 "                \"next-server\": \"0.0.0.0\",\n"
@@ -2385,17 +2401,18 @@ const char* UNPARSED_CONFIGS[] = {
 "        \"authoritative\": false,\n"
 "        \"boot-file-name\": \"\",\n"
 "        \"calculate-tee-times\": false,\n"
+"        \"ddns-generated-prefix\": \"myhost\",\n"
+"        \"ddns-override-client-update\": false,\n"
+"        \"ddns-override-no-update\": false,\n"
+"        \"ddns-qualifying-suffix\": \"\",\n"
+"        \"ddns-replace-client-name\": \"never\",\n"
+"        \"ddns-send-updates\": true,\n"
 "        \"decline-probation-period\": 86400,\n"
 "        \"dhcp-ddns\": {\n"
 "            \"enable-updates\": false,\n"
-"            \"generated-prefix\": \"myhost\",\n"
 "            \"max-queue-size\": 1024,\n"
 "            \"ncr-format\": \"JSON\",\n"
 "            \"ncr-protocol\": \"UDP\",\n"
-"            \"override-client-update\": false,\n"
-"            \"override-no-update\": false,\n"
-"            \"qualifying-suffix\": \"\",\n"
-"            \"replace-client-name\": \"never\",\n"
 "            \"sender-ip\": \"0.0.0.0\",\n"
 "            \"sender-port\": 0,\n"
 "            \"server-ip\": \"127.0.0.1\",\n"
@@ -2447,6 +2464,12 @@ const char* UNPARSED_CONFIGS[] = {
 "                \"4o6-subnet\": \"\",\n"
 "                \"authoritative\": false,\n"
 "                \"calculate-tee-times\": false,\n"
+"                \"ddns-generated-prefix\": \"myhost\",\n"
+"                \"ddns-override-client-update\": false,\n"
+"                \"ddns-override-no-update\": false,\n"
+"                \"ddns-qualifying-suffix\": \"\",\n"
+"                \"ddns-replace-client-name\": \"never\",\n"
+"                \"ddns-send-updates\": true,\n"
 "                \"id\": 1,\n"
 "                \"match-client-id\": true,\n"
 "                \"max-valid-lifetime\": 5000,\n"
@@ -2481,17 +2504,18 @@ const char* UNPARSED_CONFIGS[] = {
 "        \"authoritative\": false,\n"
 "        \"boot-file-name\": \"\",\n"
 "        \"calculate-tee-times\": false,\n"
+"        \"ddns-generated-prefix\": \"myhost\",\n"
+"        \"ddns-override-client-update\": false,\n"
+"        \"ddns-override-no-update\": false,\n"
+"        \"ddns-qualifying-suffix\": \"\",\n"
+"        \"ddns-replace-client-name\": \"never\",\n"
+"        \"ddns-send-updates\": true,\n"
 "        \"decline-probation-period\": 86400,\n"
 "        \"dhcp-ddns\": {\n"
 "            \"enable-updates\": false,\n"
-"            \"generated-prefix\": \"myhost\",\n"
 "            \"max-queue-size\": 1024,\n"
 "            \"ncr-format\": \"JSON\",\n"
 "            \"ncr-protocol\": \"UDP\",\n"
-"            \"override-client-update\": false,\n"
-"            \"override-no-update\": false,\n"
-"            \"qualifying-suffix\": \"\",\n"
-"            \"replace-client-name\": \"never\",\n"
 "            \"sender-ip\": \"0.0.0.0\",\n"
 "            \"sender-port\": 0,\n"
 "            \"server-ip\": \"127.0.0.1\",\n"
@@ -2541,6 +2565,12 @@ const char* UNPARSED_CONFIGS[] = {
 "                \"4o6-subnet\": \"\",\n"
 "                \"authoritative\": false,\n"
 "                \"calculate-tee-times\": false,\n"
+"                \"ddns-generated-prefix\": \"myhost\",\n"
+"                \"ddns-override-client-update\": false,\n"
+"                \"ddns-override-no-update\": false,\n"
+"                \"ddns-qualifying-suffix\": \"\",\n"
+"                \"ddns-replace-client-name\": \"never\",\n"
+"                \"ddns-send-updates\": true,\n"
 "                \"id\": 1,\n"
 "                \"match-client-id\": true,\n"
 "                \"next-server\": \"0.0.0.0\",\n"
@@ -2569,6 +2599,12 @@ const char* UNPARSED_CONFIGS[] = {
 "                \"4o6-subnet\": \"\",\n"
 "                \"authoritative\": false,\n"
 "                \"calculate-tee-times\": false,\n"
+"                \"ddns-generated-prefix\": \"myhost\",\n"
+"                \"ddns-override-client-update\": false,\n"
+"                \"ddns-override-no-update\": false,\n"
+"                \"ddns-qualifying-suffix\": \"\",\n"
+"                \"ddns-replace-client-name\": \"never\",\n"
+"                \"ddns-send-updates\": true,\n"
 "                \"id\": 2,\n"
 "                \"match-client-id\": true,\n"
 "                \"next-server\": \"0.0.0.0\",\n"
@@ -2597,6 +2633,12 @@ const char* UNPARSED_CONFIGS[] = {
 "                \"4o6-subnet\": \"\",\n"
 "                \"authoritative\": false,\n"
 "                \"calculate-tee-times\": false,\n"
+"                \"ddns-generated-prefix\": \"myhost\",\n"
+"                \"ddns-override-client-update\": false,\n"
+"                \"ddns-override-no-update\": false,\n"
+"                \"ddns-qualifying-suffix\": \"\",\n"
+"                \"ddns-replace-client-name\": \"never\",\n"
+"                \"ddns-send-updates\": true,\n"
 "                \"id\": 3,\n"
 "                \"match-client-id\": true,\n"
 "                \"next-server\": \"0.0.0.0\",\n"
@@ -2625,6 +2667,12 @@ const char* UNPARSED_CONFIGS[] = {
 "                \"4o6-subnet\": \"\",\n"
 "                \"authoritative\": false,\n"
 "                \"calculate-tee-times\": false,\n"
+"                \"ddns-generated-prefix\": \"myhost\",\n"
+"                \"ddns-override-client-update\": false,\n"
+"                \"ddns-override-no-update\": false,\n"
+"                \"ddns-qualifying-suffix\": \"\",\n"
+"                \"ddns-replace-client-name\": \"never\",\n"
+"                \"ddns-send-updates\": true,\n"
 "                \"id\": 4,\n"
 "                \"match-client-id\": true,\n"
 "                \"next-server\": \"0.0.0.0\",\n"
@@ -2657,17 +2705,18 @@ const char* UNPARSED_CONFIGS[] = {
 "        \"authoritative\": false,\n"
 "        \"boot-file-name\": \"\",\n"
 "        \"calculate-tee-times\": false,\n"
+"        \"ddns-generated-prefix\": \"myhost\",\n"
+"        \"ddns-override-client-update\": false,\n"
+"        \"ddns-override-no-update\": false,\n"
+"        \"ddns-qualifying-suffix\": \"\",\n"
+"        \"ddns-replace-client-name\": \"never\",\n"
+"        \"ddns-send-updates\": true,\n"
 "        \"decline-probation-period\": 86400,\n"
 "        \"dhcp-ddns\": {\n"
 "            \"enable-updates\": false,\n"
-"            \"generated-prefix\": \"myhost\",\n"
 "            \"max-queue-size\": 1024,\n"
 "            \"ncr-format\": \"JSON\",\n"
 "            \"ncr-protocol\": \"UDP\",\n"
-"            \"override-client-update\": false,\n"
-"            \"override-no-update\": false,\n"
-"            \"qualifying-suffix\": \"\",\n"
-"            \"replace-client-name\": \"never\",\n"
 "            \"sender-ip\": \"0.0.0.0\",\n"
 "            \"sender-port\": 0,\n"
 "            \"server-ip\": \"127.0.0.1\",\n"
@@ -2717,6 +2766,12 @@ const char* UNPARSED_CONFIGS[] = {
 "                \"4o6-subnet\": \"\",\n"
 "                \"authoritative\": false,\n"
 "                \"calculate-tee-times\": false,\n"
+"                \"ddns-generated-prefix\": \"myhost\",\n"
+"                \"ddns-override-client-update\": false,\n"
+"                \"ddns-override-no-update\": false,\n"
+"                \"ddns-qualifying-suffix\": \"\",\n"
+"                \"ddns-replace-client-name\": \"never\",\n"
+"                \"ddns-send-updates\": true,\n"
 "                \"id\": 1024,\n"
 "                \"match-client-id\": true,\n"
 "                \"next-server\": \"0.0.0.0\",\n"
@@ -2745,6 +2800,12 @@ const char* UNPARSED_CONFIGS[] = {
 "                \"4o6-subnet\": \"\",\n"
 "                \"authoritative\": false,\n"
 "                \"calculate-tee-times\": false,\n"
+"                \"ddns-generated-prefix\": \"myhost\",\n"
+"                \"ddns-override-client-update\": false,\n"
+"                \"ddns-override-no-update\": false,\n"
+"                \"ddns-qualifying-suffix\": \"\",\n"
+"                \"ddns-replace-client-name\": \"never\",\n"
+"                \"ddns-send-updates\": true,\n"
 "                \"id\": 100,\n"
 "                \"match-client-id\": true,\n"
 "                \"next-server\": \"0.0.0.0\",\n"
@@ -2773,6 +2834,12 @@ const char* UNPARSED_CONFIGS[] = {
 "                \"4o6-subnet\": \"\",\n"
 "                \"authoritative\": false,\n"
 "                \"calculate-tee-times\": false,\n"
+"                \"ddns-generated-prefix\": \"myhost\",\n"
+"                \"ddns-override-client-update\": false,\n"
+"                \"ddns-override-no-update\": false,\n"
+"                \"ddns-qualifying-suffix\": \"\",\n"
+"                \"ddns-replace-client-name\": \"never\",\n"
+"                \"ddns-send-updates\": true,\n"
 "                \"id\": 1,\n"
 "                \"match-client-id\": true,\n"
 "                \"next-server\": \"0.0.0.0\",\n"
@@ -2801,6 +2868,12 @@ const char* UNPARSED_CONFIGS[] = {
 "                \"4o6-subnet\": \"\",\n"
 "                \"authoritative\": false,\n"
 "                \"calculate-tee-times\": false,\n"
+"                \"ddns-generated-prefix\": \"myhost\",\n"
+"                \"ddns-override-client-update\": false,\n"
+"                \"ddns-override-no-update\": false,\n"
+"                \"ddns-qualifying-suffix\": \"\",\n"
+"                \"ddns-replace-client-name\": \"never\",\n"
+"                \"ddns-send-updates\": true,\n"
 "                \"id\": 34,\n"
 "                \"match-client-id\": true,\n"
 "                \"next-server\": \"0.0.0.0\",\n"
@@ -2833,17 +2906,18 @@ const char* UNPARSED_CONFIGS[] = {
 "        \"authoritative\": false,\n"
 "        \"boot-file-name\": \"bar\",\n"
 "        \"calculate-tee-times\": false,\n"
+"        \"ddns-generated-prefix\": \"myhost\",\n"
+"        \"ddns-override-client-update\": false,\n"
+"        \"ddns-override-no-update\": false,\n"
+"        \"ddns-qualifying-suffix\": \"\",\n"
+"        \"ddns-replace-client-name\": \"never\",\n"
+"        \"ddns-send-updates\": true,\n"
 "        \"decline-probation-period\": 86400,\n"
 "        \"dhcp-ddns\": {\n"
 "            \"enable-updates\": false,\n"
-"            \"generated-prefix\": \"myhost\",\n"
 "            \"max-queue-size\": 1024,\n"
 "            \"ncr-format\": \"JSON\",\n"
 "            \"ncr-protocol\": \"UDP\",\n"
-"            \"override-client-update\": false,\n"
-"            \"override-no-update\": false,\n"
-"            \"qualifying-suffix\": \"\",\n"
-"            \"replace-client-name\": \"never\",\n"
 "            \"sender-ip\": \"0.0.0.0\",\n"
 "            \"sender-port\": 0,\n"
 "            \"server-ip\": \"127.0.0.1\",\n"
@@ -2894,6 +2968,12 @@ const char* UNPARSED_CONFIGS[] = {
 "                \"authoritative\": false,\n"
 "                \"boot-file-name\": \"bar\",\n"
 "                \"calculate-tee-times\": false,\n"
+"                \"ddns-generated-prefix\": \"myhost\",\n"
+"                \"ddns-override-client-update\": false,\n"
+"                \"ddns-override-no-update\": false,\n"
+"                \"ddns-qualifying-suffix\": \"\",\n"
+"                \"ddns-replace-client-name\": \"never\",\n"
+"                \"ddns-send-updates\": true,\n"
 "                \"id\": 1,\n"
 "                \"match-client-id\": true,\n"
 "                \"next-server\": \"1.2.3.4\",\n"
@@ -2927,17 +3007,18 @@ const char* UNPARSED_CONFIGS[] = {
 "        \"authoritative\": false,\n"
 "        \"boot-file-name\": \"\",\n"
 "        \"calculate-tee-times\": false,\n"
+"        \"ddns-generated-prefix\": \"myhost\",\n"
+"        \"ddns-override-client-update\": false,\n"
+"        \"ddns-override-no-update\": false,\n"
+"        \"ddns-qualifying-suffix\": \"\",\n"
+"        \"ddns-replace-client-name\": \"never\",\n"
+"        \"ddns-send-updates\": true,\n"
 "        \"decline-probation-period\": 86400,\n"
 "        \"dhcp-ddns\": {\n"
 "            \"enable-updates\": false,\n"
-"            \"generated-prefix\": \"myhost\",\n"
 "            \"max-queue-size\": 1024,\n"
 "            \"ncr-format\": \"JSON\",\n"
 "            \"ncr-protocol\": \"UDP\",\n"
-"            \"override-client-update\": false,\n"
-"            \"override-no-update\": false,\n"
-"            \"qualifying-suffix\": \"\",\n"
-"            \"replace-client-name\": \"never\",\n"
 "            \"sender-ip\": \"0.0.0.0\",\n"
 "            \"sender-port\": 0,\n"
 "            \"server-ip\": \"127.0.0.1\",\n"
@@ -2988,6 +3069,12 @@ const char* UNPARSED_CONFIGS[] = {
 "                \"authoritative\": false,\n"
 "                \"boot-file-name\": \"bar\",\n"
 "                \"calculate-tee-times\": false,\n"
+"                \"ddns-generated-prefix\": \"myhost\",\n"
+"                \"ddns-override-client-update\": false,\n"
+"                \"ddns-override-no-update\": false,\n"
+"                \"ddns-qualifying-suffix\": \"\",\n"
+"                \"ddns-replace-client-name\": \"never\",\n"
+"                \"ddns-send-updates\": true,\n"
 "                \"id\": 1,\n"
 "                \"match-client-id\": true,\n"
 "                \"next-server\": \"1.2.3.4\",\n"
@@ -3021,17 +3108,18 @@ const char* UNPARSED_CONFIGS[] = {
 "        \"authoritative\": false,\n"
 "        \"boot-file-name\": \"nofile\",\n"
 "        \"calculate-tee-times\": false,\n"
+"        \"ddns-generated-prefix\": \"myhost\",\n"
+"        \"ddns-override-client-update\": false,\n"
+"        \"ddns-override-no-update\": false,\n"
+"        \"ddns-qualifying-suffix\": \"\",\n"
+"        \"ddns-replace-client-name\": \"never\",\n"
+"        \"ddns-send-updates\": true,\n"
 "        \"decline-probation-period\": 86400,\n"
 "        \"dhcp-ddns\": {\n"
 "            \"enable-updates\": false,\n"
-"            \"generated-prefix\": \"myhost\",\n"
 "            \"max-queue-size\": 1024,\n"
 "            \"ncr-format\": \"JSON\",\n"
 "            \"ncr-protocol\": \"UDP\",\n"
-"            \"override-client-update\": false,\n"
-"            \"override-no-update\": false,\n"
-"            \"qualifying-suffix\": \"\",\n"
-"            \"replace-client-name\": \"never\",\n"
 "            \"sender-ip\": \"0.0.0.0\",\n"
 "            \"sender-port\": 0,\n"
 "            \"server-ip\": \"127.0.0.1\",\n"
@@ -3082,6 +3170,12 @@ const char* UNPARSED_CONFIGS[] = {
 "                \"authoritative\": false,\n"
 "                \"boot-file-name\": \"bootfile.efi\",\n"
 "                \"calculate-tee-times\": false,\n"
+"                \"ddns-generated-prefix\": \"myhost\",\n"
+"                \"ddns-override-client-update\": false,\n"
+"                \"ddns-override-no-update\": false,\n"
+"                \"ddns-qualifying-suffix\": \"\",\n"
+"                \"ddns-replace-client-name\": \"never\",\n"
+"                \"ddns-send-updates\": true,\n"
 "                \"id\": 1,\n"
 "                \"match-client-id\": true,\n"
 "                \"next-server\": \"1.2.3.4\",\n"
@@ -3115,17 +3209,18 @@ const char* UNPARSED_CONFIGS[] = {
 "        \"authoritative\": false,\n"
 "        \"boot-file-name\": \"\",\n"
 "        \"calculate-tee-times\": false,\n"
+"        \"ddns-generated-prefix\": \"myhost\",\n"
+"        \"ddns-override-client-update\": false,\n"
+"        \"ddns-override-no-update\": false,\n"
+"        \"ddns-qualifying-suffix\": \"\",\n"
+"        \"ddns-replace-client-name\": \"never\",\n"
+"        \"ddns-send-updates\": true,\n"
 "        \"decline-probation-period\": 86400,\n"
 "        \"dhcp-ddns\": {\n"
 "            \"enable-updates\": false,\n"
-"            \"generated-prefix\": \"myhost\",\n"
 "            \"max-queue-size\": 1024,\n"
 "            \"ncr-format\": \"JSON\",\n"
 "            \"ncr-protocol\": \"UDP\",\n"
-"            \"override-client-update\": false,\n"
-"            \"override-no-update\": false,\n"
-"            \"qualifying-suffix\": \"\",\n"
-"            \"replace-client-name\": \"never\",\n"
 "            \"sender-ip\": \"0.0.0.0\",\n"
 "            \"sender-port\": 0,\n"
 "            \"server-ip\": \"127.0.0.1\",\n"
@@ -3175,6 +3270,12 @@ const char* UNPARSED_CONFIGS[] = {
 "                \"4o6-subnet\": \"\",\n"
 "                \"authoritative\": false,\n"
 "                \"calculate-tee-times\": false,\n"
+"                \"ddns-generated-prefix\": \"myhost\",\n"
+"                \"ddns-override-client-update\": false,\n"
+"                \"ddns-override-no-update\": false,\n"
+"                \"ddns-qualifying-suffix\": \"\",\n"
+"                \"ddns-replace-client-name\": \"never\",\n"
+"                \"ddns-send-updates\": true,\n"
 "                \"id\": 1,\n"
 "                \"match-client-id\": true,\n"
 "                \"next-server\": \"0.0.0.0\",\n"
@@ -3207,17 +3308,18 @@ const char* UNPARSED_CONFIGS[] = {
 "        \"authoritative\": false,\n"
 "        \"boot-file-name\": \"\",\n"
 "        \"calculate-tee-times\": false,\n"
+"        \"ddns-generated-prefix\": \"myhost\",\n"
+"        \"ddns-override-client-update\": false,\n"
+"        \"ddns-override-no-update\": false,\n"
+"        \"ddns-qualifying-suffix\": \"\",\n"
+"        \"ddns-replace-client-name\": \"never\",\n"
+"        \"ddns-send-updates\": true,\n"
 "        \"decline-probation-period\": 86400,\n"
 "        \"dhcp-ddns\": {\n"
 "            \"enable-updates\": false,\n"
-"            \"generated-prefix\": \"myhost\",\n"
 "            \"max-queue-size\": 1024,\n"
 "            \"ncr-format\": \"JSON\",\n"
 "            \"ncr-protocol\": \"UDP\",\n"
-"            \"override-client-update\": false,\n"
-"            \"override-no-update\": false,\n"
-"            \"qualifying-suffix\": \"\",\n"
-"            \"replace-client-name\": \"never\",\n"
 "            \"sender-ip\": \"0.0.0.0\",\n"
 "            \"sender-port\": 0,\n"
 "            \"server-ip\": \"127.0.0.1\",\n"
@@ -3267,6 +3369,12 @@ const char* UNPARSED_CONFIGS[] = {
 "                \"4o6-subnet\": \"\",\n"
 "                \"authoritative\": false,\n"
 "                \"calculate-tee-times\": false,\n"
+"                \"ddns-generated-prefix\": \"myhost\",\n"
+"                \"ddns-override-client-update\": false,\n"
+"                \"ddns-override-no-update\": false,\n"
+"                \"ddns-qualifying-suffix\": \"\",\n"
+"                \"ddns-replace-client-name\": \"never\",\n"
+"                \"ddns-send-updates\": true,\n"
 "                \"id\": 1,\n"
 "                \"match-client-id\": true,\n"
 "                \"next-server\": \"0.0.0.0\",\n"
@@ -3299,17 +3407,18 @@ const char* UNPARSED_CONFIGS[] = {
 "        \"authoritative\": false,\n"
 "        \"boot-file-name\": \"\",\n"
 "        \"calculate-tee-times\": false,\n"
+"        \"ddns-generated-prefix\": \"myhost\",\n"
+"        \"ddns-override-client-update\": false,\n"
+"        \"ddns-override-no-update\": false,\n"
+"        \"ddns-qualifying-suffix\": \"\",\n"
+"        \"ddns-replace-client-name\": \"never\",\n"
+"        \"ddns-send-updates\": true,\n"
 "        \"decline-probation-period\": 86400,\n"
 "        \"dhcp-ddns\": {\n"
 "            \"enable-updates\": false,\n"
-"            \"generated-prefix\": \"myhost\",\n"
 "            \"max-queue-size\": 1024,\n"
 "            \"ncr-format\": \"JSON\",\n"
 "            \"ncr-protocol\": \"UDP\",\n"
-"            \"override-client-update\": false,\n"
-"            \"override-no-update\": false,\n"
-"            \"qualifying-suffix\": \"\",\n"
-"            \"replace-client-name\": \"never\",\n"
 "            \"sender-ip\": \"0.0.0.0\",\n"
 "            \"sender-port\": 0,\n"
 "            \"server-ip\": \"127.0.0.1\",\n"
@@ -3359,6 +3468,12 @@ const char* UNPARSED_CONFIGS[] = {
 "                \"4o6-subnet\": \"\",\n"
 "                \"authoritative\": false,\n"
 "                \"calculate-tee-times\": false,\n"
+"                \"ddns-generated-prefix\": \"myhost\",\n"
+"                \"ddns-override-client-update\": false,\n"
+"                \"ddns-override-no-update\": false,\n"
+"                \"ddns-qualifying-suffix\": \"\",\n"
+"                \"ddns-replace-client-name\": \"never\",\n"
+"                \"ddns-send-updates\": true,\n"
 "                \"id\": 1,\n"
 "                \"match-client-id\": true,\n"
 "                \"next-server\": \"0.0.0.0\",\n"
@@ -3387,6 +3502,12 @@ const char* UNPARSED_CONFIGS[] = {
 "                \"4o6-subnet\": \"\",\n"
 "                \"authoritative\": false,\n"
 "                \"calculate-tee-times\": false,\n"
+"                \"ddns-generated-prefix\": \"myhost\",\n"
+"                \"ddns-override-client-update\": false,\n"
+"                \"ddns-override-no-update\": false,\n"
+"                \"ddns-qualifying-suffix\": \"\",\n"
+"                \"ddns-replace-client-name\": \"never\",\n"
+"                \"ddns-send-updates\": true,\n"
 "                \"id\": 2,\n"
 "                \"match-client-id\": false,\n"
 "                \"next-server\": \"0.0.0.0\",\n"
@@ -3419,17 +3540,18 @@ const char* UNPARSED_CONFIGS[] = {
 "        \"authoritative\": false,\n"
 "        \"boot-file-name\": \"\",\n"
 "        \"calculate-tee-times\": false,\n"
+"        \"ddns-generated-prefix\": \"myhost\",\n"
+"        \"ddns-override-client-update\": false,\n"
+"        \"ddns-override-no-update\": false,\n"
+"        \"ddns-qualifying-suffix\": \"\",\n"
+"        \"ddns-replace-client-name\": \"never\",\n"
+"        \"ddns-send-updates\": true,\n"
 "        \"decline-probation-period\": 86400,\n"
 "        \"dhcp-ddns\": {\n"
 "            \"enable-updates\": false,\n"
-"            \"generated-prefix\": \"myhost\",\n"
 "            \"max-queue-size\": 1024,\n"
 "            \"ncr-format\": \"JSON\",\n"
 "            \"ncr-protocol\": \"UDP\",\n"
-"            \"override-client-update\": false,\n"
-"            \"override-no-update\": false,\n"
-"            \"qualifying-suffix\": \"\",\n"
-"            \"replace-client-name\": \"never\",\n"
 "            \"sender-ip\": \"0.0.0.0\",\n"
 "            \"sender-port\": 0,\n"
 "            \"server-ip\": \"127.0.0.1\",\n"
@@ -3479,6 +3601,12 @@ const char* UNPARSED_CONFIGS[] = {
 "                \"4o6-subnet\": \"\",\n"
 "                \"authoritative\": false,\n"
 "                \"calculate-tee-times\": false,\n"
+"                \"ddns-generated-prefix\": \"myhost\",\n"
+"                \"ddns-override-client-update\": false,\n"
+"                \"ddns-override-no-update\": false,\n"
+"                \"ddns-qualifying-suffix\": \"\",\n"
+"                \"ddns-replace-client-name\": \"never\",\n"
+"                \"ddns-send-updates\": true,\n"
 "                \"id\": 1,\n"
 "                \"match-client-id\": false,\n"
 "                \"next-server\": \"0.0.0.0\",\n"
@@ -3507,6 +3635,12 @@ const char* UNPARSED_CONFIGS[] = {
 "                \"4o6-subnet\": \"\",\n"
 "                \"authoritative\": false,\n"
 "                \"calculate-tee-times\": false,\n"
+"                \"ddns-generated-prefix\": \"myhost\",\n"
+"                \"ddns-override-client-update\": false,\n"
+"                \"ddns-override-no-update\": false,\n"
+"                \"ddns-qualifying-suffix\": \"\",\n"
+"                \"ddns-replace-client-name\": \"never\",\n"
+"                \"ddns-send-updates\": true,\n"
 "                \"id\": 2,\n"
 "                \"match-client-id\": true,\n"
 "                \"next-server\": \"0.0.0.0\",\n"
@@ -3539,17 +3673,18 @@ const char* UNPARSED_CONFIGS[] = {
 "        \"authoritative\": false,\n"
 "        \"boot-file-name\": \"\",\n"
 "        \"calculate-tee-times\": false,\n"
+"        \"ddns-generated-prefix\": \"myhost\",\n"
+"        \"ddns-override-client-update\": false,\n"
+"        \"ddns-override-no-update\": false,\n"
+"        \"ddns-qualifying-suffix\": \"\",\n"
+"        \"ddns-replace-client-name\": \"never\",\n"
+"        \"ddns-send-updates\": true,\n"
 "        \"decline-probation-period\": 86400,\n"
 "        \"dhcp-ddns\": {\n"
 "            \"enable-updates\": false,\n"
-"            \"generated-prefix\": \"myhost\",\n"
 "            \"max-queue-size\": 1024,\n"
 "            \"ncr-format\": \"JSON\",\n"
 "            \"ncr-protocol\": \"UDP\",\n"
-"            \"override-client-update\": false,\n"
-"            \"override-no-update\": false,\n"
-"            \"qualifying-suffix\": \"\",\n"
-"            \"replace-client-name\": \"never\",\n"
 "            \"sender-ip\": \"0.0.0.0\",\n"
 "            \"sender-port\": 0,\n"
 "            \"server-ip\": \"127.0.0.1\",\n"
@@ -3599,6 +3734,12 @@ const char* UNPARSED_CONFIGS[] = {
 "                \"4o6-subnet\": \"\",\n"
 "                \"authoritative\": true,\n"
 "                \"calculate-tee-times\": false,\n"
+"                \"ddns-generated-prefix\": \"myhost\",\n"
+"                \"ddns-override-client-update\": false,\n"
+"                \"ddns-override-no-update\": false,\n"
+"                \"ddns-qualifying-suffix\": \"\",\n"
+"                \"ddns-replace-client-name\": \"never\",\n"
+"                \"ddns-send-updates\": true,\n"
 "                \"id\": 1,\n"
 "                \"match-client-id\": true,\n"
 "                \"next-server\": \"0.0.0.0\",\n"
@@ -3627,6 +3768,12 @@ const char* UNPARSED_CONFIGS[] = {
 "                \"4o6-subnet\": \"\",\n"
 "                \"authoritative\": false,\n"
 "                \"calculate-tee-times\": false,\n"
+"                \"ddns-generated-prefix\": \"myhost\",\n"
+"                \"ddns-override-client-update\": false,\n"
+"                \"ddns-override-no-update\": false,\n"
+"                \"ddns-qualifying-suffix\": \"\",\n"
+"                \"ddns-replace-client-name\": \"never\",\n"
+"                \"ddns-send-updates\": true,\n"
 "                \"id\": 2,\n"
 "                \"match-client-id\": true,\n"
 "                \"next-server\": \"0.0.0.0\",\n"
@@ -3659,17 +3806,18 @@ const char* UNPARSED_CONFIGS[] = {
 "        \"authoritative\": true,\n"
 "        \"boot-file-name\": \"\",\n"
 "        \"calculate-tee-times\": false,\n"
+"        \"ddns-generated-prefix\": \"myhost\",\n"
+"        \"ddns-override-client-update\": false,\n"
+"        \"ddns-override-no-update\": false,\n"
+"        \"ddns-qualifying-suffix\": \"\",\n"
+"        \"ddns-replace-client-name\": \"never\",\n"
+"        \"ddns-send-updates\": true,\n"
 "        \"decline-probation-period\": 86400,\n"
 "        \"dhcp-ddns\": {\n"
 "            \"enable-updates\": false,\n"
-"            \"generated-prefix\": \"myhost\",\n"
 "            \"max-queue-size\": 1024,\n"
 "            \"ncr-format\": \"JSON\",\n"
 "            \"ncr-protocol\": \"UDP\",\n"
-"            \"override-client-update\": false,\n"
-"            \"override-no-update\": false,\n"
-"            \"qualifying-suffix\": \"\",\n"
-"            \"replace-client-name\": \"never\",\n"
 "            \"sender-ip\": \"0.0.0.0\",\n"
 "            \"sender-port\": 0,\n"
 "            \"server-ip\": \"127.0.0.1\",\n"
@@ -3719,6 +3867,12 @@ const char* UNPARSED_CONFIGS[] = {
 "                \"4o6-subnet\": \"\",\n"
 "                \"authoritative\": false,\n"
 "                \"calculate-tee-times\": false,\n"
+"                \"ddns-generated-prefix\": \"myhost\",\n"
+"                \"ddns-override-client-update\": false,\n"
+"                \"ddns-override-no-update\": false,\n"
+"                \"ddns-qualifying-suffix\": \"\",\n"
+"                \"ddns-replace-client-name\": \"never\",\n"
+"                \"ddns-send-updates\": true,\n"
 "                \"id\": 1,\n"
 "                \"match-client-id\": true,\n"
 "                \"next-server\": \"0.0.0.0\",\n"
@@ -3747,6 +3901,12 @@ const char* UNPARSED_CONFIGS[] = {
 "                \"4o6-subnet\": \"\",\n"
 "                \"authoritative\": true,\n"
 "                \"calculate-tee-times\": false,\n"
+"                \"ddns-generated-prefix\": \"myhost\",\n"
+"                \"ddns-override-client-update\": false,\n"
+"                \"ddns-override-no-update\": false,\n"
+"                \"ddns-qualifying-suffix\": \"\",\n"
+"                \"ddns-replace-client-name\": \"never\",\n"
+"                \"ddns-send-updates\": true,\n"
 "                \"id\": 2,\n"
 "                \"match-client-id\": true,\n"
 "                \"next-server\": \"0.0.0.0\",\n"
@@ -3779,17 +3939,18 @@ const char* UNPARSED_CONFIGS[] = {
 "        \"authoritative\": false,\n"
 "        \"boot-file-name\": \"\",\n"
 "        \"calculate-tee-times\": false,\n"
+"        \"ddns-generated-prefix\": \"myhost\",\n"
+"        \"ddns-override-client-update\": false,\n"
+"        \"ddns-override-no-update\": false,\n"
+"        \"ddns-qualifying-suffix\": \"\",\n"
+"        \"ddns-replace-client-name\": \"never\",\n"
+"        \"ddns-send-updates\": true,\n"
 "        \"decline-probation-period\": 86400,\n"
 "        \"dhcp-ddns\": {\n"
 "            \"enable-updates\": false,\n"
-"            \"generated-prefix\": \"myhost\",\n"
 "            \"max-queue-size\": 1024,\n"
 "            \"ncr-format\": \"JSON\",\n"
 "            \"ncr-protocol\": \"UDP\",\n"
-"            \"override-client-update\": false,\n"
-"            \"override-no-update\": false,\n"
-"            \"qualifying-suffix\": \"\",\n"
-"            \"replace-client-name\": \"never\",\n"
 "            \"sender-ip\": \"0.0.0.0\",\n"
 "            \"sender-port\": 0,\n"
 "            \"server-ip\": \"127.0.0.1\",\n"
@@ -3841,6 +4002,12 @@ const char* UNPARSED_CONFIGS[] = {
 "                \"4o6-subnet\": \"\",\n"
 "                \"authoritative\": false,\n"
 "                \"calculate-tee-times\": false,\n"
+"                \"ddns-generated-prefix\": \"myhost\",\n"
+"                \"ddns-override-client-update\": false,\n"
+"                \"ddns-override-no-update\": false,\n"
+"                \"ddns-qualifying-suffix\": \"\",\n"
+"                \"ddns-replace-client-name\": \"never\",\n"
+"                \"ddns-send-updates\": true,\n"
 "                \"id\": 1,\n"
 "                \"match-client-id\": true,\n"
 "                \"max-valid-lifetime\": 5,\n"
@@ -3875,17 +4042,18 @@ const char* UNPARSED_CONFIGS[] = {
 "        \"authoritative\": false,\n"
 "        \"boot-file-name\": \"\",\n"
 "        \"calculate-tee-times\": false,\n"
+"        \"ddns-generated-prefix\": \"myhost\",\n"
+"        \"ddns-override-client-update\": false,\n"
+"        \"ddns-override-no-update\": false,\n"
+"        \"ddns-qualifying-suffix\": \"\",\n"
+"        \"ddns-replace-client-name\": \"never\",\n"
+"        \"ddns-send-updates\": true,\n"
 "        \"decline-probation-period\": 86400,\n"
 "        \"dhcp-ddns\": {\n"
 "            \"enable-updates\": false,\n"
-"            \"generated-prefix\": \"myhost\",\n"
 "            \"max-queue-size\": 1024,\n"
 "            \"ncr-format\": \"JSON\",\n"
 "            \"ncr-protocol\": \"UDP\",\n"
-"            \"override-client-update\": false,\n"
-"            \"override-no-update\": false,\n"
-"            \"qualifying-suffix\": \"\",\n"
-"            \"replace-client-name\": \"never\",\n"
 "            \"sender-ip\": \"0.0.0.0\",\n"
 "            \"sender-port\": 0,\n"
 "            \"server-ip\": \"127.0.0.1\",\n"
@@ -3935,6 +4103,12 @@ const char* UNPARSED_CONFIGS[] = {
 "                \"4o6-subnet\": \"\",\n"
 "                \"authoritative\": false,\n"
 "                \"calculate-tee-times\": false,\n"
+"                \"ddns-generated-prefix\": \"myhost\",\n"
+"                \"ddns-override-client-update\": false,\n"
+"                \"ddns-override-no-update\": false,\n"
+"                \"ddns-qualifying-suffix\": \"\",\n"
+"                \"ddns-replace-client-name\": \"never\",\n"
+"                \"ddns-send-updates\": true,\n"
 "                \"id\": 1,\n"
 "                \"match-client-id\": true,\n"
 "                \"next-server\": \"0.0.0.0\",\n"
@@ -3967,6 +4141,12 @@ const char* UNPARSED_CONFIGS[] = {
 "                \"4o6-subnet\": \"\",\n"
 "                \"authoritative\": false,\n"
 "                \"calculate-tee-times\": false,\n"
+"                \"ddns-generated-prefix\": \"myhost\",\n"
+"                \"ddns-override-client-update\": false,\n"
+"                \"ddns-override-no-update\": false,\n"
+"                \"ddns-qualifying-suffix\": \"\",\n"
+"                \"ddns-replace-client-name\": \"never\",\n"
+"                \"ddns-send-updates\": true,\n"
 "                \"id\": 2,\n"
 "                \"match-client-id\": true,\n"
 "                \"next-server\": \"0.0.0.0\",\n"
@@ -4003,17 +4183,18 @@ const char* UNPARSED_CONFIGS[] = {
 "        \"authoritative\": false,\n"
 "        \"boot-file-name\": \"\",\n"
 "        \"calculate-tee-times\": false,\n"
+"        \"ddns-generated-prefix\": \"myhost\",\n"
+"        \"ddns-override-client-update\": false,\n"
+"        \"ddns-override-no-update\": false,\n"
+"        \"ddns-qualifying-suffix\": \"\",\n"
+"        \"ddns-replace-client-name\": \"never\",\n"
+"        \"ddns-send-updates\": true,\n"
 "        \"decline-probation-period\": 86400,\n"
 "        \"dhcp-ddns\": {\n"
 "            \"enable-updates\": false,\n"
-"            \"generated-prefix\": \"myhost\",\n"
 "            \"max-queue-size\": 1024,\n"
 "            \"ncr-format\": \"JSON\",\n"
 "            \"ncr-protocol\": \"UDP\",\n"
-"            \"override-client-update\": false,\n"
-"            \"override-no-update\": false,\n"
-"            \"qualifying-suffix\": \"\",\n"
-"            \"replace-client-name\": \"never\",\n"
 "            \"sender-ip\": \"0.0.0.0\",\n"
 "            \"sender-port\": 0,\n"
 "            \"server-ip\": \"127.0.0.1\",\n"
@@ -4063,6 +4244,12 @@ const char* UNPARSED_CONFIGS[] = {
 "                \"4o6-subnet\": \"\",\n"
 "                \"authoritative\": false,\n"
 "                \"calculate-tee-times\": false,\n"
+"                \"ddns-generated-prefix\": \"myhost\",\n"
+"                \"ddns-override-client-update\": false,\n"
+"                \"ddns-override-no-update\": false,\n"
+"                \"ddns-qualifying-suffix\": \"\",\n"
+"                \"ddns-replace-client-name\": \"never\",\n"
+"                \"ddns-send-updates\": true,\n"
 "                \"id\": 1,\n"
 "                \"match-client-id\": true,\n"
 "                \"next-server\": \"0.0.0.0\",\n"
@@ -4095,17 +4282,18 @@ const char* UNPARSED_CONFIGS[] = {
 "        \"authoritative\": false,\n"
 "        \"boot-file-name\": \"\",\n"
 "        \"calculate-tee-times\": false,\n"
+"        \"ddns-generated-prefix\": \"myhost\",\n"
+"        \"ddns-override-client-update\": false,\n"
+"        \"ddns-override-no-update\": false,\n"
+"        \"ddns-qualifying-suffix\": \"\",\n"
+"        \"ddns-replace-client-name\": \"never\",\n"
+"        \"ddns-send-updates\": true,\n"
 "        \"decline-probation-period\": 86400,\n"
 "        \"dhcp-ddns\": {\n"
 "            \"enable-updates\": false,\n"
-"            \"generated-prefix\": \"myhost\",\n"
 "            \"max-queue-size\": 1024,\n"
 "            \"ncr-format\": \"JSON\",\n"
 "            \"ncr-protocol\": \"UDP\",\n"
-"            \"override-client-update\": false,\n"
-"            \"override-no-update\": false,\n"
-"            \"qualifying-suffix\": \"\",\n"
-"            \"replace-client-name\": \"never\",\n"
 "            \"sender-ip\": \"0.0.0.0\",\n"
 "            \"sender-port\": 0,\n"
 "            \"server-ip\": \"127.0.0.1\",\n"
@@ -4166,17 +4354,18 @@ const char* UNPARSED_CONFIGS[] = {
 "        \"authoritative\": false,\n"
 "        \"boot-file-name\": \"\",\n"
 "        \"calculate-tee-times\": false,\n"
+"        \"ddns-generated-prefix\": \"myhost\",\n"
+"        \"ddns-override-client-update\": false,\n"
+"        \"ddns-override-no-update\": false,\n"
+"        \"ddns-qualifying-suffix\": \"\",\n"
+"        \"ddns-replace-client-name\": \"never\",\n"
+"        \"ddns-send-updates\": true,\n"
 "        \"decline-probation-period\": 86400,\n"
 "        \"dhcp-ddns\": {\n"
 "            \"enable-updates\": false,\n"
-"            \"generated-prefix\": \"myhost\",\n"
 "            \"max-queue-size\": 1024,\n"
 "            \"ncr-format\": \"JSON\",\n"
 "            \"ncr-protocol\": \"UDP\",\n"
-"            \"override-client-update\": false,\n"
-"            \"override-no-update\": false,\n"
-"            \"qualifying-suffix\": \"\",\n"
-"            \"replace-client-name\": \"never\",\n"
 "            \"sender-ip\": \"0.0.0.0\",\n"
 "            \"sender-port\": 0,\n"
 "            \"server-ip\": \"127.0.0.1\",\n"
@@ -4237,17 +4426,18 @@ const char* UNPARSED_CONFIGS[] = {
 "        \"authoritative\": false,\n"
 "        \"boot-file-name\": \"\",\n"
 "        \"calculate-tee-times\": false,\n"
+"        \"ddns-generated-prefix\": \"myhost\",\n"
+"        \"ddns-override-client-update\": false,\n"
+"        \"ddns-override-no-update\": false,\n"
+"        \"ddns-qualifying-suffix\": \"\",\n"
+"        \"ddns-replace-client-name\": \"never\",\n"
+"        \"ddns-send-updates\": true,\n"
 "        \"decline-probation-period\": 86400,\n"
 "        \"dhcp-ddns\": {\n"
 "            \"enable-updates\": false,\n"
-"            \"generated-prefix\": \"myhost\",\n"
 "            \"max-queue-size\": 1024,\n"
 "            \"ncr-format\": \"JSON\",\n"
 "            \"ncr-protocol\": \"UDP\",\n"
-"            \"override-client-update\": false,\n"
-"            \"override-no-update\": false,\n"
-"            \"qualifying-suffix\": \"\",\n"
-"            \"replace-client-name\": \"never\",\n"
 "            \"sender-ip\": \"0.0.0.0\",\n"
 "            \"sender-port\": 0,\n"
 "            \"server-ip\": \"127.0.0.1\",\n"
@@ -4317,17 +4507,18 @@ const char* UNPARSED_CONFIGS[] = {
 "        \"authoritative\": false,\n"
 "        \"boot-file-name\": \"\",\n"
 "        \"calculate-tee-times\": false,\n"
+"        \"ddns-generated-prefix\": \"myhost\",\n"
+"        \"ddns-override-client-update\": false,\n"
+"        \"ddns-override-no-update\": false,\n"
+"        \"ddns-qualifying-suffix\": \"\",\n"
+"        \"ddns-replace-client-name\": \"never\",\n"
+"        \"ddns-send-updates\": true,\n"
 "        \"decline-probation-period\": 86400,\n"
 "        \"dhcp-ddns\": {\n"
 "            \"enable-updates\": false,\n"
-"            \"generated-prefix\": \"myhost\",\n"
 "            \"max-queue-size\": 1024,\n"
 "            \"ncr-format\": \"JSON\",\n"
 "            \"ncr-protocol\": \"UDP\",\n"
-"            \"override-client-update\": false,\n"
-"            \"override-no-update\": false,\n"
-"            \"qualifying-suffix\": \"\",\n"
-"            \"replace-client-name\": \"never\",\n"
 "            \"sender-ip\": \"0.0.0.0\",\n"
 "            \"sender-port\": 0,\n"
 "            \"server-ip\": \"127.0.0.1\",\n"
@@ -4388,17 +4579,18 @@ const char* UNPARSED_CONFIGS[] = {
 "        \"authoritative\": false,\n"
 "        \"boot-file-name\": \"\",\n"
 "        \"calculate-tee-times\": false,\n"
+"        \"ddns-generated-prefix\": \"myhost\",\n"
+"        \"ddns-override-client-update\": false,\n"
+"        \"ddns-override-no-update\": false,\n"
+"        \"ddns-qualifying-suffix\": \"\",\n"
+"        \"ddns-replace-client-name\": \"never\",\n"
+"        \"ddns-send-updates\": true,\n"
 "        \"decline-probation-period\": 86400,\n"
 "        \"dhcp-ddns\": {\n"
 "            \"enable-updates\": false,\n"
-"            \"generated-prefix\": \"myhost\",\n"
 "            \"max-queue-size\": 1024,\n"
 "            \"ncr-format\": \"JSON\",\n"
 "            \"ncr-protocol\": \"UDP\",\n"
-"            \"override-client-update\": false,\n"
-"            \"override-no-update\": false,\n"
-"            \"qualifying-suffix\": \"\",\n"
-"            \"replace-client-name\": \"never\",\n"
 "            \"sender-ip\": \"0.0.0.0\",\n"
 "            \"sender-port\": 0,\n"
 "            \"server-ip\": \"127.0.0.1\",\n"
@@ -4459,17 +4651,18 @@ const char* UNPARSED_CONFIGS[] = {
 "        \"authoritative\": false,\n"
 "        \"boot-file-name\": \"\",\n"
 "        \"calculate-tee-times\": false,\n"
+"        \"ddns-generated-prefix\": \"myhost\",\n"
+"        \"ddns-override-client-update\": false,\n"
+"        \"ddns-override-no-update\": false,\n"
+"        \"ddns-qualifying-suffix\": \"\",\n"
+"        \"ddns-replace-client-name\": \"never\",\n"
+"        \"ddns-send-updates\": true,\n"
 "        \"decline-probation-period\": 86400,\n"
 "        \"dhcp-ddns\": {\n"
 "            \"enable-updates\": false,\n"
-"            \"generated-prefix\": \"myhost\",\n"
 "            \"max-queue-size\": 1024,\n"
 "            \"ncr-format\": \"JSON\",\n"
 "            \"ncr-protocol\": \"UDP\",\n"
-"            \"override-client-update\": false,\n"
-"            \"override-no-update\": false,\n"
-"            \"qualifying-suffix\": \"\",\n"
-"            \"replace-client-name\": \"never\",\n"
 "            \"sender-ip\": \"0.0.0.0\",\n"
 "            \"sender-port\": 0,\n"
 "            \"server-ip\": \"127.0.0.1\",\n"
@@ -4530,17 +4723,18 @@ const char* UNPARSED_CONFIGS[] = {
 "        \"authoritative\": false,\n"
 "        \"boot-file-name\": \"\",\n"
 "        \"calculate-tee-times\": false,\n"
+"        \"ddns-generated-prefix\": \"myhost\",\n"
+"        \"ddns-override-client-update\": false,\n"
+"        \"ddns-override-no-update\": false,\n"
+"        \"ddns-qualifying-suffix\": \"\",\n"
+"        \"ddns-replace-client-name\": \"never\",\n"
+"        \"ddns-send-updates\": true,\n"
 "        \"decline-probation-period\": 86400,\n"
 "        \"dhcp-ddns\": {\n"
 "            \"enable-updates\": false,\n"
-"            \"generated-prefix\": \"myhost\",\n"
 "            \"max-queue-size\": 1024,\n"
 "            \"ncr-format\": \"JSON\",\n"
 "            \"ncr-protocol\": \"UDP\",\n"
-"            \"override-client-update\": false,\n"
-"            \"override-no-update\": false,\n"
-"            \"qualifying-suffix\": \"\",\n"
-"            \"replace-client-name\": \"never\",\n"
 "            \"sender-ip\": \"0.0.0.0\",\n"
 "            \"sender-port\": 0,\n"
 "            \"server-ip\": \"127.0.0.1\",\n"
@@ -4601,17 +4795,18 @@ const char* UNPARSED_CONFIGS[] = {
 "        \"authoritative\": false,\n"
 "        \"boot-file-name\": \"\",\n"
 "        \"calculate-tee-times\": false,\n"
+"        \"ddns-generated-prefix\": \"myhost\",\n"
+"        \"ddns-override-client-update\": false,\n"
+"        \"ddns-override-no-update\": false,\n"
+"        \"ddns-qualifying-suffix\": \"\",\n"
+"        \"ddns-replace-client-name\": \"never\",\n"
+"        \"ddns-send-updates\": true,\n"
 "        \"decline-probation-period\": 86400,\n"
 "        \"dhcp-ddns\": {\n"
 "            \"enable-updates\": false,\n"
-"            \"generated-prefix\": \"myhost\",\n"
 "            \"max-queue-size\": 1024,\n"
 "            \"ncr-format\": \"JSON\",\n"
 "            \"ncr-protocol\": \"UDP\",\n"
-"            \"override-client-update\": false,\n"
-"            \"override-no-update\": false,\n"
-"            \"qualifying-suffix\": \"\",\n"
-"            \"replace-client-name\": \"never\",\n"
 "            \"sender-ip\": \"0.0.0.0\",\n"
 "            \"sender-port\": 0,\n"
 "            \"server-ip\": \"127.0.0.1\",\n"
@@ -4678,6 +4873,12 @@ const char* UNPARSED_CONFIGS[] = {
 "                \"4o6-subnet\": \"\",\n"
 "                \"authoritative\": false,\n"
 "                \"calculate-tee-times\": false,\n"
+"                \"ddns-generated-prefix\": \"myhost\",\n"
+"                \"ddns-override-client-update\": false,\n"
+"                \"ddns-override-no-update\": false,\n"
+"                \"ddns-qualifying-suffix\": \"\",\n"
+"                \"ddns-replace-client-name\": \"never\",\n"
+"                \"ddns-send-updates\": true,\n"
 "                \"id\": 1,\n"
 "                \"match-client-id\": true,\n"
 "                \"next-server\": \"0.0.0.0\",\n"
@@ -4710,17 +4911,18 @@ const char* UNPARSED_CONFIGS[] = {
 "        \"authoritative\": false,\n"
 "        \"boot-file-name\": \"\",\n"
 "        \"calculate-tee-times\": false,\n"
+"        \"ddns-generated-prefix\": \"myhost\",\n"
+"        \"ddns-override-client-update\": false,\n"
+"        \"ddns-override-no-update\": false,\n"
+"        \"ddns-qualifying-suffix\": \"\",\n"
+"        \"ddns-replace-client-name\": \"never\",\n"
+"        \"ddns-send-updates\": true,\n"
 "        \"decline-probation-period\": 86400,\n"
 "        \"dhcp-ddns\": {\n"
 "            \"enable-updates\": false,\n"
-"            \"generated-prefix\": \"myhost\",\n"
 "            \"max-queue-size\": 1024,\n"
 "            \"ncr-format\": \"JSON\",\n"
 "            \"ncr-protocol\": \"UDP\",\n"
-"            \"override-client-update\": false,\n"
-"            \"override-no-update\": false,\n"
-"            \"qualifying-suffix\": \"\",\n"
-"            \"replace-client-name\": \"never\",\n"
 "            \"sender-ip\": \"0.0.0.0\",\n"
 "            \"sender-port\": 0,\n"
 "            \"server-ip\": \"127.0.0.1\",\n"
@@ -4770,6 +4972,12 @@ const char* UNPARSED_CONFIGS[] = {
 "                \"4o6-subnet\": \"\",\n"
 "                \"authoritative\": false,\n"
 "                \"calculate-tee-times\": false,\n"
+"                \"ddns-generated-prefix\": \"myhost\",\n"
+"                \"ddns-override-client-update\": false,\n"
+"                \"ddns-override-no-update\": false,\n"
+"                \"ddns-qualifying-suffix\": \"\",\n"
+"                \"ddns-replace-client-name\": \"never\",\n"
+"                \"ddns-send-updates\": true,\n"
 "                \"id\": 1,\n"
 "                \"match-client-id\": true,\n"
 "                \"next-server\": \"0.0.0.0\",\n"
@@ -4819,17 +5027,18 @@ const char* UNPARSED_CONFIGS[] = {
 "        \"authoritative\": false,\n"
 "        \"boot-file-name\": \"\",\n"
 "        \"calculate-tee-times\": false,\n"
+"        \"ddns-generated-prefix\": \"myhost\",\n"
+"        \"ddns-override-client-update\": false,\n"
+"        \"ddns-override-no-update\": false,\n"
+"        \"ddns-qualifying-suffix\": \"\",\n"
+"        \"ddns-replace-client-name\": \"never\",\n"
+"        \"ddns-send-updates\": true,\n"
 "        \"decline-probation-period\": 86400,\n"
 "        \"dhcp-ddns\": {\n"
 "            \"enable-updates\": false,\n"
-"            \"generated-prefix\": \"myhost\",\n"
 "            \"max-queue-size\": 1024,\n"
 "            \"ncr-format\": \"JSON\",\n"
 "            \"ncr-protocol\": \"UDP\",\n"
-"            \"override-client-update\": false,\n"
-"            \"override-no-update\": false,\n"
-"            \"qualifying-suffix\": \"\",\n"
-"            \"replace-client-name\": \"never\",\n"
 "            \"sender-ip\": \"0.0.0.0\",\n"
 "            \"sender-port\": 0,\n"
 "            \"server-ip\": \"127.0.0.1\",\n"
@@ -4906,6 +5115,12 @@ const char* UNPARSED_CONFIGS[] = {
 "                \"4o6-subnet\": \"\",\n"
 "                \"authoritative\": false,\n"
 "                \"calculate-tee-times\": false,\n"
+"                \"ddns-generated-prefix\": \"myhost\",\n"
+"                \"ddns-override-client-update\": false,\n"
+"                \"ddns-override-no-update\": false,\n"
+"                \"ddns-qualifying-suffix\": \"\",\n"
+"                \"ddns-replace-client-name\": \"never\",\n"
+"                \"ddns-send-updates\": true,\n"
 "                \"id\": 1,\n"
 "                \"match-client-id\": true,\n"
 "                \"next-server\": \"0.0.0.0\",\n"
@@ -4938,17 +5153,18 @@ const char* UNPARSED_CONFIGS[] = {
 "        \"authoritative\": false,\n"
 "        \"boot-file-name\": \"\",\n"
 "        \"calculate-tee-times\": false,\n"
+"        \"ddns-generated-prefix\": \"myhost\",\n"
+"        \"ddns-override-client-update\": false,\n"
+"        \"ddns-override-no-update\": false,\n"
+"        \"ddns-qualifying-suffix\": \"\",\n"
+"        \"ddns-replace-client-name\": \"never\",\n"
+"        \"ddns-send-updates\": true,\n"
 "        \"decline-probation-period\": 86400,\n"
 "        \"dhcp-ddns\": {\n"
 "            \"enable-updates\": false,\n"
-"            \"generated-prefix\": \"myhost\",\n"
 "            \"max-queue-size\": 1024,\n"
 "            \"ncr-format\": \"JSON\",\n"
 "            \"ncr-protocol\": \"UDP\",\n"
-"            \"override-client-update\": false,\n"
-"            \"override-no-update\": false,\n"
-"            \"qualifying-suffix\": \"\",\n"
-"            \"replace-client-name\": \"never\",\n"
 "            \"sender-ip\": \"0.0.0.0\",\n"
 "            \"sender-port\": 0,\n"
 "            \"server-ip\": \"127.0.0.1\",\n"
@@ -5037,17 +5253,18 @@ const char* UNPARSED_CONFIGS[] = {
 "        \"authoritative\": false,\n"
 "        \"boot-file-name\": \"\",\n"
 "        \"calculate-tee-times\": false,\n"
+"        \"ddns-generated-prefix\": \"myhost\",\n"
+"        \"ddns-override-client-update\": false,\n"
+"        \"ddns-override-no-update\": false,\n"
+"        \"ddns-qualifying-suffix\": \"\",\n"
+"        \"ddns-replace-client-name\": \"never\",\n"
+"        \"ddns-send-updates\": true,\n"
 "        \"decline-probation-period\": 86400,\n"
 "        \"dhcp-ddns\": {\n"
 "            \"enable-updates\": false,\n"
-"            \"generated-prefix\": \"myhost\",\n"
 "            \"max-queue-size\": 1024,\n"
 "            \"ncr-format\": \"JSON\",\n"
 "            \"ncr-protocol\": \"UDP\",\n"
-"            \"override-client-update\": false,\n"
-"            \"override-no-update\": false,\n"
-"            \"qualifying-suffix\": \"\",\n"
-"            \"replace-client-name\": \"never\",\n"
 "            \"sender-ip\": \"0.0.0.0\",\n"
 "            \"sender-port\": 0,\n"
 "            \"server-ip\": \"127.0.0.1\",\n"
@@ -5150,6 +5367,12 @@ const char* UNPARSED_CONFIGS[] = {
 "                \"4o6-subnet\": \"\",\n"
 "                \"authoritative\": false,\n"
 "                \"calculate-tee-times\": false,\n"
+"                \"ddns-generated-prefix\": \"myhost\",\n"
+"                \"ddns-override-client-update\": false,\n"
+"                \"ddns-override-no-update\": false,\n"
+"                \"ddns-qualifying-suffix\": \"\",\n"
+"                \"ddns-replace-client-name\": \"never\",\n"
+"                \"ddns-send-updates\": true,\n"
 "                \"id\": 1,\n"
 "                \"match-client-id\": true,\n"
 "                \"next-server\": \"0.0.0.0\",\n"
@@ -5182,17 +5405,18 @@ const char* UNPARSED_CONFIGS[] = {
 "        \"authoritative\": false,\n"
 "        \"boot-file-name\": \"\",\n"
 "        \"calculate-tee-times\": false,\n"
+"        \"ddns-generated-prefix\": \"myhost\",\n"
+"        \"ddns-override-client-update\": false,\n"
+"        \"ddns-override-no-update\": false,\n"
+"        \"ddns-qualifying-suffix\": \"\",\n"
+"        \"ddns-replace-client-name\": \"never\",\n"
+"        \"ddns-send-updates\": true,\n"
 "        \"decline-probation-period\": 86400,\n"
 "        \"dhcp-ddns\": {\n"
 "            \"enable-updates\": false,\n"
-"            \"generated-prefix\": \"myhost\",\n"
 "            \"max-queue-size\": 1024,\n"
 "            \"ncr-format\": \"JSON\",\n"
 "            \"ncr-protocol\": \"UDP\",\n"
-"            \"override-client-update\": false,\n"
-"            \"override-no-update\": false,\n"
-"            \"qualifying-suffix\": \"\",\n"
-"            \"replace-client-name\": \"never\",\n"
 "            \"sender-ip\": \"0.0.0.0\",\n"
 "            \"sender-port\": 0,\n"
 "            \"server-ip\": \"127.0.0.1\",\n"
@@ -5251,6 +5475,12 @@ const char* UNPARSED_CONFIGS[] = {
 "                \"4o6-subnet\": \"\",\n"
 "                \"authoritative\": false,\n"
 "                \"calculate-tee-times\": false,\n"
+"                \"ddns-generated-prefix\": \"myhost\",\n"
+"                \"ddns-override-client-update\": false,\n"
+"                \"ddns-override-no-update\": false,\n"
+"                \"ddns-qualifying-suffix\": \"\",\n"
+"                \"ddns-replace-client-name\": \"never\",\n"
+"                \"ddns-send-updates\": true,\n"
 "                \"id\": 1,\n"
 "                \"match-client-id\": true,\n"
 "                \"next-server\": \"0.0.0.0\",\n"
@@ -5300,17 +5530,18 @@ const char* UNPARSED_CONFIGS[] = {
 "        \"authoritative\": false,\n"
 "        \"boot-file-name\": \"\",\n"
 "        \"calculate-tee-times\": false,\n"
+"        \"ddns-generated-prefix\": \"myhost\",\n"
+"        \"ddns-override-client-update\": false,\n"
+"        \"ddns-override-no-update\": false,\n"
+"        \"ddns-qualifying-suffix\": \"\",\n"
+"        \"ddns-replace-client-name\": \"never\",\n"
+"        \"ddns-send-updates\": true,\n"
 "        \"decline-probation-period\": 86400,\n"
 "        \"dhcp-ddns\": {\n"
 "            \"enable-updates\": false,\n"
-"            \"generated-prefix\": \"myhost\",\n"
 "            \"max-queue-size\": 1024,\n"
 "            \"ncr-format\": \"JSON\",\n"
 "            \"ncr-protocol\": \"UDP\",\n"
-"            \"override-client-update\": false,\n"
-"            \"override-no-update\": false,\n"
-"            \"qualifying-suffix\": \"\",\n"
-"            \"replace-client-name\": \"never\",\n"
 "            \"sender-ip\": \"0.0.0.0\",\n"
 "            \"sender-port\": 0,\n"
 "            \"server-ip\": \"127.0.0.1\",\n"
@@ -5360,6 +5591,12 @@ const char* UNPARSED_CONFIGS[] = {
 "                \"4o6-subnet\": \"\",\n"
 "                \"authoritative\": false,\n"
 "                \"calculate-tee-times\": false,\n"
+"                \"ddns-generated-prefix\": \"myhost\",\n"
+"                \"ddns-override-client-update\": false,\n"
+"                \"ddns-override-no-update\": false,\n"
+"                \"ddns-qualifying-suffix\": \"\",\n"
+"                \"ddns-replace-client-name\": \"never\",\n"
+"                \"ddns-send-updates\": true,\n"
 "                \"id\": 1,\n"
 "                \"match-client-id\": true,\n"
 "                \"next-server\": \"0.0.0.0\",\n"
@@ -5397,6 +5634,12 @@ const char* UNPARSED_CONFIGS[] = {
 "                \"4o6-subnet\": \"\",\n"
 "                \"authoritative\": false,\n"
 "                \"calculate-tee-times\": false,\n"
+"                \"ddns-generated-prefix\": \"myhost\",\n"
+"                \"ddns-override-client-update\": false,\n"
+"                \"ddns-override-no-update\": false,\n"
+"                \"ddns-qualifying-suffix\": \"\",\n"
+"                \"ddns-replace-client-name\": \"never\",\n"
+"                \"ddns-send-updates\": true,\n"
 "                \"id\": 2,\n"
 "                \"match-client-id\": true,\n"
 "                \"next-server\": \"0.0.0.0\",\n"
@@ -5438,17 +5681,18 @@ const char* UNPARSED_CONFIGS[] = {
 "        \"authoritative\": false,\n"
 "        \"boot-file-name\": \"\",\n"
 "        \"calculate-tee-times\": false,\n"
+"        \"ddns-generated-prefix\": \"myhost\",\n"
+"        \"ddns-override-client-update\": false,\n"
+"        \"ddns-override-no-update\": false,\n"
+"        \"ddns-qualifying-suffix\": \"\",\n"
+"        \"ddns-replace-client-name\": \"never\",\n"
+"        \"ddns-send-updates\": true,\n"
 "        \"decline-probation-period\": 86400,\n"
 "        \"dhcp-ddns\": {\n"
 "            \"enable-updates\": false,\n"
-"            \"generated-prefix\": \"myhost\",\n"
 "            \"max-queue-size\": 1024,\n"
 "            \"ncr-format\": \"JSON\",\n"
 "            \"ncr-protocol\": \"UDP\",\n"
-"            \"override-client-update\": false,\n"
-"            \"override-no-update\": false,\n"
-"            \"qualifying-suffix\": \"\",\n"
-"            \"replace-client-name\": \"never\",\n"
 "            \"sender-ip\": \"0.0.0.0\",\n"
 "            \"sender-port\": 0,\n"
 "            \"server-ip\": \"127.0.0.1\",\n"
@@ -5498,6 +5742,12 @@ const char* UNPARSED_CONFIGS[] = {
 "                \"4o6-subnet\": \"\",\n"
 "                \"authoritative\": false,\n"
 "                \"calculate-tee-times\": false,\n"
+"                \"ddns-generated-prefix\": \"myhost\",\n"
+"                \"ddns-override-client-update\": false,\n"
+"                \"ddns-override-no-update\": false,\n"
+"                \"ddns-qualifying-suffix\": \"\",\n"
+"                \"ddns-replace-client-name\": \"never\",\n"
+"                \"ddns-send-updates\": true,\n"
 "                \"id\": 1,\n"
 "                \"match-client-id\": true,\n"
 "                \"next-server\": \"0.0.0.0\",\n"
@@ -5547,17 +5797,18 @@ const char* UNPARSED_CONFIGS[] = {
 "        \"authoritative\": false,\n"
 "        \"boot-file-name\": \"\",\n"
 "        \"calculate-tee-times\": false,\n"
+"        \"ddns-generated-prefix\": \"myhost\",\n"
+"        \"ddns-override-client-update\": false,\n"
+"        \"ddns-override-no-update\": false,\n"
+"        \"ddns-qualifying-suffix\": \"\",\n"
+"        \"ddns-replace-client-name\": \"never\",\n"
+"        \"ddns-send-updates\": true,\n"
 "        \"decline-probation-period\": 86400,\n"
 "        \"dhcp-ddns\": {\n"
 "            \"enable-updates\": false,\n"
-"            \"generated-prefix\": \"myhost\",\n"
 "            \"max-queue-size\": 1024,\n"
 "            \"ncr-format\": \"JSON\",\n"
 "            \"ncr-protocol\": \"UDP\",\n"
-"            \"override-client-update\": false,\n"
-"            \"override-no-update\": false,\n"
-"            \"qualifying-suffix\": \"\",\n"
-"            \"replace-client-name\": \"never\",\n"
 "            \"sender-ip\": \"0.0.0.0\",\n"
 "            \"sender-port\": 0,\n"
 "            \"server-ip\": \"127.0.0.1\",\n"
@@ -5607,6 +5858,12 @@ const char* UNPARSED_CONFIGS[] = {
 "                \"4o6-subnet\": \"\",\n"
 "                \"authoritative\": false,\n"
 "                \"calculate-tee-times\": false,\n"
+"                \"ddns-generated-prefix\": \"myhost\",\n"
+"                \"ddns-override-client-update\": false,\n"
+"                \"ddns-override-no-update\": false,\n"
+"                \"ddns-qualifying-suffix\": \"\",\n"
+"                \"ddns-replace-client-name\": \"never\",\n"
+"                \"ddns-send-updates\": true,\n"
 "                \"id\": 1,\n"
 "                \"match-client-id\": true,\n"
 "                \"next-server\": \"0.0.0.0\",\n"
@@ -5661,17 +5918,18 @@ const char* UNPARSED_CONFIGS[] = {
 "        \"authoritative\": false,\n"
 "        \"boot-file-name\": \"\",\n"
 "        \"calculate-tee-times\": false,\n"
+"        \"ddns-generated-prefix\": \"myhost\",\n"
+"        \"ddns-override-client-update\": false,\n"
+"        \"ddns-override-no-update\": false,\n"
+"        \"ddns-qualifying-suffix\": \"\",\n"
+"        \"ddns-replace-client-name\": \"never\",\n"
+"        \"ddns-send-updates\": true,\n"
 "        \"decline-probation-period\": 86400,\n"
 "        \"dhcp-ddns\": {\n"
 "            \"enable-updates\": false,\n"
-"            \"generated-prefix\": \"myhost\",\n"
 "            \"max-queue-size\": 1024,\n"
 "            \"ncr-format\": \"JSON\",\n"
 "            \"ncr-protocol\": \"UDP\",\n"
-"            \"override-client-update\": false,\n"
-"            \"override-no-update\": false,\n"
-"            \"qualifying-suffix\": \"\",\n"
-"            \"replace-client-name\": \"never\",\n"
 "            \"sender-ip\": \"0.0.0.0\",\n"
 "            \"sender-port\": 0,\n"
 "            \"server-ip\": \"127.0.0.1\",\n"
@@ -5738,6 +5996,12 @@ const char* UNPARSED_CONFIGS[] = {
 "                \"4o6-subnet\": \"\",\n"
 "                \"authoritative\": false,\n"
 "                \"calculate-tee-times\": false,\n"
+"                \"ddns-generated-prefix\": \"myhost\",\n"
+"                \"ddns-override-client-update\": false,\n"
+"                \"ddns-override-no-update\": false,\n"
+"                \"ddns-qualifying-suffix\": \"\",\n"
+"                \"ddns-replace-client-name\": \"never\",\n"
+"                \"ddns-send-updates\": true,\n"
 "                \"id\": 1,\n"
 "                \"match-client-id\": true,\n"
 "                \"next-server\": \"0.0.0.0\",\n"
@@ -5770,17 +6034,18 @@ const char* UNPARSED_CONFIGS[] = {
 "        \"authoritative\": false,\n"
 "        \"boot-file-name\": \"\",\n"
 "        \"calculate-tee-times\": false,\n"
+"        \"ddns-generated-prefix\": \"myhost\",\n"
+"        \"ddns-override-client-update\": false,\n"
+"        \"ddns-override-no-update\": false,\n"
+"        \"ddns-qualifying-suffix\": \"\",\n"
+"        \"ddns-replace-client-name\": \"never\",\n"
+"        \"ddns-send-updates\": true,\n"
 "        \"decline-probation-period\": 86400,\n"
 "        \"dhcp-ddns\": {\n"
 "            \"enable-updates\": false,\n"
-"            \"generated-prefix\": \"myhost\",\n"
 "            \"max-queue-size\": 1024,\n"
 "            \"ncr-format\": \"JSON\",\n"
 "            \"ncr-protocol\": \"UDP\",\n"
-"            \"override-client-update\": false,\n"
-"            \"override-no-update\": false,\n"
-"            \"qualifying-suffix\": \"\",\n"
-"            \"replace-client-name\": \"never\",\n"
 "            \"sender-ip\": \"0.0.0.0\",\n"
 "            \"sender-port\": 0,\n"
 "            \"server-ip\": \"127.0.0.1\",\n"
@@ -5869,17 +6134,18 @@ const char* UNPARSED_CONFIGS[] = {
 "        \"authoritative\": false,\n"
 "        \"boot-file-name\": \"\",\n"
 "        \"calculate-tee-times\": false,\n"
+"        \"ddns-generated-prefix\": \"myhost\",\n"
+"        \"ddns-override-client-update\": false,\n"
+"        \"ddns-override-no-update\": false,\n"
+"        \"ddns-qualifying-suffix\": \"\",\n"
+"        \"ddns-replace-client-name\": \"never\",\n"
+"        \"ddns-send-updates\": true,\n"
 "        \"decline-probation-period\": 86400,\n"
 "        \"dhcp-ddns\": {\n"
 "            \"enable-updates\": false,\n"
-"            \"generated-prefix\": \"myhost\",\n"
 "            \"max-queue-size\": 1024,\n"
 "            \"ncr-format\": \"JSON\",\n"
 "            \"ncr-protocol\": \"UDP\",\n"
-"            \"override-client-update\": false,\n"
-"            \"override-no-update\": false,\n"
-"            \"qualifying-suffix\": \"\",\n"
-"            \"replace-client-name\": \"never\",\n"
 "            \"sender-ip\": \"0.0.0.0\",\n"
 "            \"sender-port\": 0,\n"
 "            \"server-ip\": \"127.0.0.1\",\n"
@@ -5973,6 +6239,12 @@ const char* UNPARSED_CONFIGS[] = {
 "                \"4o6-subnet\": \"\",\n"
 "                \"authoritative\": false,\n"
 "                \"calculate-tee-times\": false,\n"
+"                \"ddns-generated-prefix\": \"myhost\",\n"
+"                \"ddns-override-client-update\": false,\n"
+"                \"ddns-override-no-update\": false,\n"
+"                \"ddns-qualifying-suffix\": \"\",\n"
+"                \"ddns-replace-client-name\": \"never\",\n"
+"                \"ddns-send-updates\": true,\n"
 "                \"id\": 1,\n"
 "                \"match-client-id\": true,\n"
 "                \"next-server\": \"0.0.0.0\",\n"
@@ -6005,17 +6277,18 @@ const char* UNPARSED_CONFIGS[] = {
 "        \"authoritative\": false,\n"
 "        \"boot-file-name\": \"\",\n"
 "        \"calculate-tee-times\": false,\n"
+"        \"ddns-generated-prefix\": \"myhost\",\n"
+"        \"ddns-override-client-update\": false,\n"
+"        \"ddns-override-no-update\": false,\n"
+"        \"ddns-qualifying-suffix\": \"\",\n"
+"        \"ddns-replace-client-name\": \"never\",\n"
+"        \"ddns-send-updates\": true,\n"
 "        \"decline-probation-period\": 86400,\n"
 "        \"dhcp-ddns\": {\n"
 "            \"enable-updates\": false,\n"
-"            \"generated-prefix\": \"myhost\",\n"
 "            \"max-queue-size\": 1024,\n"
 "            \"ncr-format\": \"JSON\",\n"
 "            \"ncr-protocol\": \"UDP\",\n"
-"            \"override-client-update\": false,\n"
-"            \"override-no-update\": false,\n"
-"            \"qualifying-suffix\": \"\",\n"
-"            \"replace-client-name\": \"never\",\n"
 "            \"sender-ip\": \"0.0.0.0\",\n"
 "            \"sender-port\": 0,\n"
 "            \"server-ip\": \"127.0.0.1\",\n"
@@ -6080,6 +6353,12 @@ const char* UNPARSED_CONFIGS[] = {
 "                \"4o6-subnet\": \"\",\n"
 "                \"authoritative\": false,\n"
 "                \"calculate-tee-times\": false,\n"
+"                \"ddns-generated-prefix\": \"myhost\",\n"
+"                \"ddns-override-client-update\": false,\n"
+"                \"ddns-override-no-update\": false,\n"
+"                \"ddns-qualifying-suffix\": \"\",\n"
+"                \"ddns-replace-client-name\": \"never\",\n"
+"                \"ddns-send-updates\": true,\n"
 "                \"id\": 1,\n"
 "                \"match-client-id\": true,\n"
 "                \"next-server\": \"0.0.0.0\",\n"
@@ -6112,17 +6391,18 @@ const char* UNPARSED_CONFIGS[] = {
 "        \"authoritative\": false,\n"
 "        \"boot-file-name\": \"\",\n"
 "        \"calculate-tee-times\": false,\n"
+"        \"ddns-generated-prefix\": \"myhost\",\n"
+"        \"ddns-override-client-update\": false,\n"
+"        \"ddns-override-no-update\": false,\n"
+"        \"ddns-qualifying-suffix\": \"\",\n"
+"        \"ddns-replace-client-name\": \"never\",\n"
+"        \"ddns-send-updates\": true,\n"
 "        \"decline-probation-period\": 86400,\n"
 "        \"dhcp-ddns\": {\n"
 "            \"enable-updates\": false,\n"
-"            \"generated-prefix\": \"myhost\",\n"
 "            \"max-queue-size\": 1024,\n"
 "            \"ncr-format\": \"JSON\",\n"
 "            \"ncr-protocol\": \"UDP\",\n"
-"            \"override-client-update\": false,\n"
-"            \"override-no-update\": false,\n"
-"            \"qualifying-suffix\": \"\",\n"
-"            \"replace-client-name\": \"never\",\n"
 "            \"sender-ip\": \"0.0.0.0\",\n"
 "            \"sender-port\": 0,\n"
 "            \"server-ip\": \"127.0.0.1\",\n"
@@ -6191,6 +6471,12 @@ const char* UNPARSED_CONFIGS[] = {
 "                \"4o6-subnet\": \"\",\n"
 "                \"authoritative\": false,\n"
 "                \"calculate-tee-times\": false,\n"
+"                \"ddns-generated-prefix\": \"myhost\",\n"
+"                \"ddns-override-client-update\": false,\n"
+"                \"ddns-override-no-update\": false,\n"
+"                \"ddns-qualifying-suffix\": \"\",\n"
+"                \"ddns-replace-client-name\": \"never\",\n"
+"                \"ddns-send-updates\": true,\n"
 "                \"id\": 1,\n"
 "                \"match-client-id\": true,\n"
 "                \"next-server\": \"0.0.0.0\",\n"
@@ -6223,17 +6509,18 @@ const char* UNPARSED_CONFIGS[] = {
 "        \"authoritative\": false,\n"
 "        \"boot-file-name\": \"\",\n"
 "        \"calculate-tee-times\": false,\n"
+"        \"ddns-generated-prefix\": \"myhost\",\n"
+"        \"ddns-override-client-update\": false,\n"
+"        \"ddns-override-no-update\": false,\n"
+"        \"ddns-qualifying-suffix\": \"\",\n"
+"        \"ddns-replace-client-name\": \"never\",\n"
+"        \"ddns-send-updates\": true,\n"
 "        \"decline-probation-period\": 86400,\n"
 "        \"dhcp-ddns\": {\n"
 "            \"enable-updates\": false,\n"
-"            \"generated-prefix\": \"myhost\",\n"
 "            \"max-queue-size\": 1024,\n"
 "            \"ncr-format\": \"JSON\",\n"
 "            \"ncr-protocol\": \"UDP\",\n"
-"            \"override-client-update\": false,\n"
-"            \"override-no-update\": false,\n"
-"            \"qualifying-suffix\": \"\",\n"
-"            \"replace-client-name\": \"never\",\n"
 "            \"sender-ip\": \"0.0.0.0\",\n"
 "            \"sender-port\": 0,\n"
 "            \"server-ip\": \"127.0.0.1\",\n"
@@ -6286,17 +6573,18 @@ const char* UNPARSED_CONFIGS[] = {
 "        \"authoritative\": false,\n"
 "        \"boot-file-name\": \"\",\n"
 "        \"calculate-tee-times\": false,\n"
+"        \"ddns-generated-prefix\": \"myhost\",\n"
+"        \"ddns-override-client-update\": false,\n"
+"        \"ddns-override-no-update\": false,\n"
+"        \"ddns-qualifying-suffix\": \"\",\n"
+"        \"ddns-replace-client-name\": \"never\",\n"
+"        \"ddns-send-updates\": true,\n"
 "        \"decline-probation-period\": 86400,\n"
 "        \"dhcp-ddns\": {\n"
 "            \"enable-updates\": false,\n"
-"            \"generated-prefix\": \"myhost\",\n"
 "            \"max-queue-size\": 1024,\n"
 "            \"ncr-format\": \"JSON\",\n"
 "            \"ncr-protocol\": \"UDP\",\n"
-"            \"override-client-update\": false,\n"
-"            \"override-no-update\": false,\n"
-"            \"qualifying-suffix\": \"\",\n"
-"            \"replace-client-name\": \"never\",\n"
 "            \"sender-ip\": \"0.0.0.0\",\n"
 "            \"sender-port\": 0,\n"
 "            \"server-ip\": \"127.0.0.1\",\n"
@@ -6349,19 +6637,18 @@ const char* UNPARSED_CONFIGS[] = {
 "        \"authoritative\": false,\n"
 "        \"boot-file-name\": \"\",\n"
 "        \"calculate-tee-times\": false,\n"
+"        \"ddns-generated-prefix\": \"myhost\",\n"
+"        \"ddns-override-client-update\": false,\n"
+"        \"ddns-override-no-update\": false,\n"
+"        \"ddns-qualifying-suffix\": \"\",\n"
+"        \"ddns-replace-client-name\": \"never\",\n"
+"        \"ddns-send-updates\": true,\n"
 "        \"decline-probation-period\": 86400,\n"
 "        \"dhcp-ddns\": {\n"
 "            \"enable-updates\": true,\n"
-"            \"generated-prefix\": \"test.prefix\",\n"
-"            \"hostname-char-replacement\": \"x\",\n"
-"            \"hostname-char-set\": \"[^A-Za-z0-9_-]\",\n"
 "            \"max-queue-size\": 2048,\n"
 "            \"ncr-format\": \"JSON\",\n"
 "            \"ncr-protocol\": \"UDP\",\n"
-"            \"override-client-update\": true,\n"
-"            \"override-no-update\": true,\n"
-"            \"qualifying-suffix\": \"test.suffix.\",\n"
-"            \"replace-client-name\": \"when-present\",\n"
 "            \"sender-ip\": \"192.168.2.2\",\n"
 "            \"sender-port\": 778,\n"
 "            \"server-ip\": \"192.168.2.1\",\n"
@@ -6411,6 +6698,12 @@ const char* UNPARSED_CONFIGS[] = {
 "                \"4o6-subnet\": \"\",\n"
 "                \"authoritative\": false,\n"
 "                \"calculate-tee-times\": false,\n"
+"                \"ddns-generated-prefix\": \"myhost\",\n"
+"                \"ddns-override-client-update\": false,\n"
+"                \"ddns-override-no-update\": false,\n"
+"                \"ddns-qualifying-suffix\": \"\",\n"
+"                \"ddns-replace-client-name\": \"never\",\n"
+"                \"ddns-send-updates\": true,\n"
 "                \"id\": 1,\n"
 "                \"match-client-id\": true,\n"
 "                \"next-server\": \"0.0.0.0\",\n"
@@ -6443,17 +6736,18 @@ const char* UNPARSED_CONFIGS[] = {
 "        \"authoritative\": false,\n"
 "        \"boot-file-name\": \"\",\n"
 "        \"calculate-tee-times\": false,\n"
+"        \"ddns-generated-prefix\": \"test.prefix\",\n"
+"        \"ddns-override-client-update\": true,\n"
+"        \"ddns-override-no-update\": true,\n"
+"        \"ddns-qualifying-suffix\": \"test.suffix.\",\n"
+"        \"ddns-replace-client-name\": \"when-present\",\n"
+"        \"ddns-send-updates\": true,\n"
 "        \"decline-probation-period\": 86400,\n"
 "        \"dhcp-ddns\": {\n"
 "            \"enable-updates\": true,\n"
-"            \"generated-prefix\": \"test.prefix\",\n"
 "            \"max-queue-size\": 2048,\n"
 "            \"ncr-format\": \"JSON\",\n"
 "            \"ncr-protocol\": \"UDP\",\n"
-"            \"override-client-update\": true,\n"
-"            \"override-no-update\": true,\n"
-"            \"qualifying-suffix\": \"test.suffix.\",\n"
-"            \"replace-client-name\": \"when-present\",\n"
 "            \"sender-ip\": \"192.168.2.2\",\n"
 "            \"sender-port\": 778,\n"
 "            \"server-ip\": \"192.168.2.1\",\n"
@@ -6477,7 +6771,7 @@ const char* UNPARSED_CONFIGS[] = {
 "        \"hooks-libraries\": [ ],\n"
 "        \"host-reservation-identifiers\": [ \"hw-address\", \"duid\", \"circuit-id\", \"client-id\" ],\n"
 "        \"hostname-char-replacement\": \"x\",\n"
-"        \"hostname-char-set\": \"[^A-Za-z0-9_-]\",\n"
+"        \"hostname-char-set\": \"[^A-Z]\",\n"
 "        \"interfaces-config\": {\n"
 "            \"interfaces\": [ \"*\" ],\n"
 "            \"re-detect\": false\n"
@@ -6505,6 +6799,14 @@ const char* UNPARSED_CONFIGS[] = {
 "                \"4o6-subnet\": \"\",\n"
 "                \"authoritative\": false,\n"
 "                \"calculate-tee-times\": false,\n"
+"                \"ddns-generated-prefix\": \"test.prefix\",\n"
+"                \"ddns-override-client-update\": true,\n"
+"                \"ddns-override-no-update\": true,\n"
+"                \"ddns-qualifying-suffix\": \"test.suffix.\",\n"
+"                \"ddns-replace-client-name\": \"when-present\",\n"
+"                \"ddns-send-updates\": true,\n"
+"                \"hostname-char-replacement\": \"x\",\n"
+"                \"hostname-char-set\": \"[^A-Z]\",\n"
 "                \"id\": 1,\n"
 "                \"match-client-id\": true,\n"
 "                \"next-server\": \"0.0.0.0\",\n"
@@ -6537,19 +6839,18 @@ const char* UNPARSED_CONFIGS[] = {
 "        \"authoritative\": false,\n"
 "        \"boot-file-name\": \"\",\n"
 "        \"calculate-tee-times\": false,\n"
+"        \"ddns-generated-prefix\": \"global.prefix\",\n"
+"        \"ddns-override-client-update\": true,\n"
+"        \"ddns-override-no-update\": true,\n"
+"        \"ddns-qualifying-suffix\": \"global.suffix.\",\n"
+"        \"ddns-replace-client-name\": \"always\",\n"
+"        \"ddns-send-updates\": false,\n"
 "        \"decline-probation-period\": 86400,\n"
 "        \"dhcp-ddns\": {\n"
 "            \"enable-updates\": true,\n"
-"            \"generated-prefix\": \"test.prefix\",\n"
-"            \"hostname-char-replacement\": \"x\",\n"
-"            \"hostname-char-set\": \"[^A-Za-z0-9_-]\",\n"
 "            \"max-queue-size\": 2048,\n"
 "            \"ncr-format\": \"JSON\",\n"
 "            \"ncr-protocol\": \"UDP\",\n"
-"            \"override-client-update\": true,\n"
-"            \"override-no-update\": true,\n"
-"            \"qualifying-suffix\": \"test.suffix.\",\n"
-"            \"replace-client-name\": \"when-present\",\n"
 "            \"sender-ip\": \"192.168.2.2\",\n"
 "            \"sender-port\": 778,\n"
 "            \"server-ip\": \"192.168.2.1\",\n"
@@ -6572,7 +6873,7 @@ const char* UNPARSED_CONFIGS[] = {
 "        },\n"
 "        \"hooks-libraries\": [ ],\n"
 "        \"host-reservation-identifiers\": [ \"hw-address\", \"duid\", \"circuit-id\", \"client-id\" ],\n"
-"        \"hostname-char-replacement\": \"z\",\n"
+"        \"hostname-char-replacement\": \"x\",\n"
 "        \"hostname-char-set\": \"[^A-Z]\",\n"
 "        \"interfaces-config\": {\n"
 "            \"interfaces\": [ \"*\" ],\n"
@@ -6601,6 +6902,14 @@ const char* UNPARSED_CONFIGS[] = {
 "                \"4o6-subnet\": \"\",\n"
 "                \"authoritative\": false,\n"
 "                \"calculate-tee-times\": false,\n"
+"                \"ddns-generated-prefix\": \"global.prefix\",\n"
+"                \"ddns-override-client-update\": true,\n"
+"                \"ddns-override-no-update\": true,\n"
+"                \"ddns-qualifying-suffix\": \"global.suffix.\",\n"
+"                \"ddns-replace-client-name\": \"always\",\n"
+"                \"ddns-send-updates\": false,\n"
+"                \"hostname-char-replacement\": \"x\",\n"
+"                \"hostname-char-set\": \"[^A-Z]\",\n"
 "                \"id\": 1,\n"
 "                \"match-client-id\": true,\n"
 "                \"next-server\": \"0.0.0.0\",\n"
@@ -6633,17 +6942,18 @@ const char* UNPARSED_CONFIGS[] = {
 "        \"authoritative\": false,\n"
 "        \"boot-file-name\": \"\",\n"
 "        \"calculate-tee-times\": false,\n"
+"        \"ddns-generated-prefix\": \"myhost\",\n"
+"        \"ddns-override-client-update\": false,\n"
+"        \"ddns-override-no-update\": false,\n"
+"        \"ddns-qualifying-suffix\": \"\",\n"
+"        \"ddns-replace-client-name\": \"never\",\n"
+"        \"ddns-send-updates\": true,\n"
 "        \"decline-probation-period\": 86400,\n"
 "        \"dhcp-ddns\": {\n"
 "            \"enable-updates\": false,\n"
-"            \"generated-prefix\": \"myhost\",\n"
 "            \"max-queue-size\": 1024,\n"
 "            \"ncr-format\": \"JSON\",\n"
 "            \"ncr-protocol\": \"UDP\",\n"
-"            \"override-client-update\": false,\n"
-"            \"override-no-update\": false,\n"
-"            \"qualifying-suffix\": \"\",\n"
-"            \"replace-client-name\": \"never\",\n"
 "            \"sender-ip\": \"0.0.0.0\",\n"
 "            \"sender-port\": 0,\n"
 "            \"server-ip\": \"127.0.0.1\",\n"
@@ -6693,6 +7003,12 @@ const char* UNPARSED_CONFIGS[] = {
 "                \"4o6-subnet\": \"\",\n"
 "                \"authoritative\": false,\n"
 "                \"calculate-tee-times\": false,\n"
+"                \"ddns-generated-prefix\": \"myhost\",\n"
+"                \"ddns-override-client-update\": false,\n"
+"                \"ddns-override-no-update\": false,\n"
+"                \"ddns-qualifying-suffix\": \"\",\n"
+"                \"ddns-replace-client-name\": \"never\",\n"
+"                \"ddns-send-updates\": true,\n"
 "                \"id\": 1,\n"
 "                \"match-client-id\": true,\n"
 "                \"next-server\": \"0.0.0.0\",\n"
@@ -6725,17 +7041,18 @@ const char* UNPARSED_CONFIGS[] = {
 "        \"authoritative\": false,\n"
 "        \"boot-file-name\": \"\",\n"
 "        \"calculate-tee-times\": false,\n"
+"        \"ddns-generated-prefix\": \"myhost\",\n"
+"        \"ddns-override-client-update\": false,\n"
+"        \"ddns-override-no-update\": false,\n"
+"        \"ddns-qualifying-suffix\": \"\",\n"
+"        \"ddns-replace-client-name\": \"never\",\n"
+"        \"ddns-send-updates\": true,\n"
 "        \"decline-probation-period\": 86400,\n"
 "        \"dhcp-ddns\": {\n"
 "            \"enable-updates\": false,\n"
-"            \"generated-prefix\": \"myhost\",\n"
 "            \"max-queue-size\": 1024,\n"
 "            \"ncr-format\": \"JSON\",\n"
 "            \"ncr-protocol\": \"UDP\",\n"
-"            \"override-client-update\": false,\n"
-"            \"override-no-update\": false,\n"
-"            \"qualifying-suffix\": \"\",\n"
-"            \"replace-client-name\": \"never\",\n"
 "            \"sender-ip\": \"0.0.0.0\",\n"
 "            \"sender-port\": 0,\n"
 "            \"server-ip\": \"127.0.0.1\",\n"
@@ -6785,6 +7102,12 @@ const char* UNPARSED_CONFIGS[] = {
 "                \"4o6-subnet\": \"\",\n"
 "                \"authoritative\": false,\n"
 "                \"calculate-tee-times\": false,\n"
+"                \"ddns-generated-prefix\": \"myhost\",\n"
+"                \"ddns-override-client-update\": false,\n"
+"                \"ddns-override-no-update\": false,\n"
+"                \"ddns-qualifying-suffix\": \"\",\n"
+"                \"ddns-replace-client-name\": \"never\",\n"
+"                \"ddns-send-updates\": true,\n"
 "                \"id\": 1,\n"
 "                \"match-client-id\": true,\n"
 "                \"next-server\": \"0.0.0.0\",\n"
@@ -6817,17 +7140,18 @@ const char* UNPARSED_CONFIGS[] = {
 "        \"authoritative\": false,\n"
 "        \"boot-file-name\": \"\",\n"
 "        \"calculate-tee-times\": false,\n"
+"        \"ddns-generated-prefix\": \"myhost\",\n"
+"        \"ddns-override-client-update\": false,\n"
+"        \"ddns-override-no-update\": false,\n"
+"        \"ddns-qualifying-suffix\": \"\",\n"
+"        \"ddns-replace-client-name\": \"never\",\n"
+"        \"ddns-send-updates\": true,\n"
 "        \"decline-probation-period\": 86400,\n"
 "        \"dhcp-ddns\": {\n"
 "            \"enable-updates\": false,\n"
-"            \"generated-prefix\": \"myhost\",\n"
 "            \"max-queue-size\": 1024,\n"
 "            \"ncr-format\": \"JSON\",\n"
 "            \"ncr-protocol\": \"UDP\",\n"
-"            \"override-client-update\": false,\n"
-"            \"override-no-update\": false,\n"
-"            \"qualifying-suffix\": \"\",\n"
-"            \"replace-client-name\": \"never\",\n"
 "            \"sender-ip\": \"0.0.0.0\",\n"
 "            \"sender-port\": 0,\n"
 "            \"server-ip\": \"127.0.0.1\",\n"
@@ -6878,6 +7202,12 @@ const char* UNPARSED_CONFIGS[] = {
 "                \"authoritative\": false,\n"
 "                \"calculate-tee-times\": false,\n"
 "                \"client-class\": \"alpha\",\n"
+"                \"ddns-generated-prefix\": \"myhost\",\n"
+"                \"ddns-override-client-update\": false,\n"
+"                \"ddns-override-no-update\": false,\n"
+"                \"ddns-qualifying-suffix\": \"\",\n"
+"                \"ddns-replace-client-name\": \"never\",\n"
+"                \"ddns-send-updates\": true,\n"
 "                \"id\": 1,\n"
 "                \"match-client-id\": true,\n"
 "                \"next-server\": \"0.0.0.0\",\n"
@@ -6907,6 +7237,12 @@ const char* UNPARSED_CONFIGS[] = {
 "                \"authoritative\": false,\n"
 "                \"calculate-tee-times\": false,\n"
 "                \"client-class\": \"beta\",\n"
+"                \"ddns-generated-prefix\": \"myhost\",\n"
+"                \"ddns-override-client-update\": false,\n"
+"                \"ddns-override-no-update\": false,\n"
+"                \"ddns-qualifying-suffix\": \"\",\n"
+"                \"ddns-replace-client-name\": \"never\",\n"
+"                \"ddns-send-updates\": true,\n"
 "                \"id\": 2,\n"
 "                \"match-client-id\": true,\n"
 "                \"next-server\": \"0.0.0.0\",\n"
@@ -6936,6 +7272,12 @@ const char* UNPARSED_CONFIGS[] = {
 "                \"authoritative\": false,\n"
 "                \"calculate-tee-times\": false,\n"
 "                \"client-class\": \"gamma\",\n"
+"                \"ddns-generated-prefix\": \"myhost\",\n"
+"                \"ddns-override-client-update\": false,\n"
+"                \"ddns-override-no-update\": false,\n"
+"                \"ddns-qualifying-suffix\": \"\",\n"
+"                \"ddns-replace-client-name\": \"never\",\n"
+"                \"ddns-send-updates\": true,\n"
 "                \"id\": 3,\n"
 "                \"match-client-id\": true,\n"
 "                \"next-server\": \"0.0.0.0\",\n"
@@ -6964,6 +7306,12 @@ const char* UNPARSED_CONFIGS[] = {
 "                \"4o6-subnet\": \"\",\n"
 "                \"authoritative\": false,\n"
 "                \"calculate-tee-times\": false,\n"
+"                \"ddns-generated-prefix\": \"myhost\",\n"
+"                \"ddns-override-client-update\": false,\n"
+"                \"ddns-override-no-update\": false,\n"
+"                \"ddns-qualifying-suffix\": \"\",\n"
+"                \"ddns-replace-client-name\": \"never\",\n"
+"                \"ddns-send-updates\": true,\n"
 "                \"id\": 4,\n"
 "                \"match-client-id\": true,\n"
 "                \"next-server\": \"0.0.0.0\",\n"
@@ -6996,17 +7344,18 @@ const char* UNPARSED_CONFIGS[] = {
 "        \"authoritative\": false,\n"
 "        \"boot-file-name\": \"\",\n"
 "        \"calculate-tee-times\": false,\n"
+"        \"ddns-generated-prefix\": \"myhost\",\n"
+"        \"ddns-override-client-update\": false,\n"
+"        \"ddns-override-no-update\": false,\n"
+"        \"ddns-qualifying-suffix\": \"\",\n"
+"        \"ddns-replace-client-name\": \"never\",\n"
+"        \"ddns-send-updates\": true,\n"
 "        \"decline-probation-period\": 86400,\n"
 "        \"dhcp-ddns\": {\n"
 "            \"enable-updates\": false,\n"
-"            \"generated-prefix\": \"myhost\",\n"
 "            \"max-queue-size\": 1024,\n"
 "            \"ncr-format\": \"JSON\",\n"
 "            \"ncr-protocol\": \"UDP\",\n"
-"            \"override-client-update\": false,\n"
-"            \"override-no-update\": false,\n"
-"            \"qualifying-suffix\": \"\",\n"
-"            \"replace-client-name\": \"never\",\n"
 "            \"sender-ip\": \"0.0.0.0\",\n"
 "            \"sender-port\": 0,\n"
 "            \"server-ip\": \"127.0.0.1\",\n"
@@ -7056,6 +7405,12 @@ const char* UNPARSED_CONFIGS[] = {
 "                \"4o6-subnet\": \"\",\n"
 "                \"authoritative\": false,\n"
 "                \"calculate-tee-times\": false,\n"
+"                \"ddns-generated-prefix\": \"myhost\",\n"
+"                \"ddns-override-client-update\": false,\n"
+"                \"ddns-override-no-update\": false,\n"
+"                \"ddns-qualifying-suffix\": \"\",\n"
+"                \"ddns-replace-client-name\": \"never\",\n"
+"                \"ddns-send-updates\": true,\n"
 "                \"id\": 1,\n"
 "                \"match-client-id\": true,\n"
 "                \"next-server\": \"0.0.0.0\",\n"
@@ -7103,17 +7458,18 @@ const char* UNPARSED_CONFIGS[] = {
 "        \"authoritative\": false,\n"
 "        \"boot-file-name\": \"\",\n"
 "        \"calculate-tee-times\": false,\n"
+"        \"ddns-generated-prefix\": \"myhost\",\n"
+"        \"ddns-override-client-update\": false,\n"
+"        \"ddns-override-no-update\": false,\n"
+"        \"ddns-qualifying-suffix\": \"\",\n"
+"        \"ddns-replace-client-name\": \"never\",\n"
+"        \"ddns-send-updates\": true,\n"
 "        \"decline-probation-period\": 86400,\n"
 "        \"dhcp-ddns\": {\n"
 "            \"enable-updates\": false,\n"
-"            \"generated-prefix\": \"myhost\",\n"
 "            \"max-queue-size\": 1024,\n"
 "            \"ncr-format\": \"JSON\",\n"
 "            \"ncr-protocol\": \"UDP\",\n"
-"            \"override-client-update\": false,\n"
-"            \"override-no-update\": false,\n"
-"            \"qualifying-suffix\": \"\",\n"
-"            \"replace-client-name\": \"never\",\n"
 "            \"sender-ip\": \"0.0.0.0\",\n"
 "            \"sender-port\": 0,\n"
 "            \"server-ip\": \"127.0.0.1\",\n"
@@ -7163,6 +7519,12 @@ const char* UNPARSED_CONFIGS[] = {
 "                \"4o6-subnet\": \"\",\n"
 "                \"authoritative\": false,\n"
 "                \"calculate-tee-times\": false,\n"
+"                \"ddns-generated-prefix\": \"myhost\",\n"
+"                \"ddns-override-client-update\": false,\n"
+"                \"ddns-override-no-update\": false,\n"
+"                \"ddns-qualifying-suffix\": \"\",\n"
+"                \"ddns-replace-client-name\": \"never\",\n"
+"                \"ddns-send-updates\": true,\n"
 "                \"id\": 123,\n"
 "                \"match-client-id\": true,\n"
 "                \"next-server\": \"0.0.0.0\",\n"
@@ -7191,6 +7553,12 @@ const char* UNPARSED_CONFIGS[] = {
 "                \"4o6-subnet\": \"\",\n"
 "                \"authoritative\": false,\n"
 "                \"calculate-tee-times\": false,\n"
+"                \"ddns-generated-prefix\": \"myhost\",\n"
+"                \"ddns-override-client-update\": false,\n"
+"                \"ddns-override-no-update\": false,\n"
+"                \"ddns-qualifying-suffix\": \"\",\n"
+"                \"ddns-replace-client-name\": \"never\",\n"
+"                \"ddns-send-updates\": true,\n"
 "                \"id\": 234,\n"
 "                \"match-client-id\": true,\n"
 "                \"next-server\": \"0.0.0.0\",\n"
@@ -7274,6 +7642,12 @@ const char* UNPARSED_CONFIGS[] = {
 "                \"4o6-subnet\": \"\",\n"
 "                \"authoritative\": false,\n"
 "                \"calculate-tee-times\": false,\n"
+"                \"ddns-generated-prefix\": \"myhost\",\n"
+"                \"ddns-override-client-update\": false,\n"
+"                \"ddns-override-no-update\": false,\n"
+"                \"ddns-qualifying-suffix\": \"\",\n"
+"                \"ddns-replace-client-name\": \"never\",\n"
+"                \"ddns-send-updates\": true,\n"
 "                \"id\": 542,\n"
 "                \"match-client-id\": true,\n"
 "                \"next-server\": \"0.0.0.0\",\n"
@@ -7354,17 +7728,18 @@ const char* UNPARSED_CONFIGS[] = {
 "        \"authoritative\": false,\n"
 "        \"boot-file-name\": \"\",\n"
 "        \"calculate-tee-times\": false,\n"
+"        \"ddns-generated-prefix\": \"myhost\",\n"
+"        \"ddns-override-client-update\": false,\n"
+"        \"ddns-override-no-update\": false,\n"
+"        \"ddns-qualifying-suffix\": \"\",\n"
+"        \"ddns-replace-client-name\": \"never\",\n"
+"        \"ddns-send-updates\": true,\n"
 "        \"decline-probation-period\": 86400,\n"
 "        \"dhcp-ddns\": {\n"
 "            \"enable-updates\": false,\n"
-"            \"generated-prefix\": \"myhost\",\n"
 "            \"max-queue-size\": 1024,\n"
 "            \"ncr-format\": \"JSON\",\n"
 "            \"ncr-protocol\": \"UDP\",\n"
-"            \"override-client-update\": false,\n"
-"            \"override-no-update\": false,\n"
-"            \"qualifying-suffix\": \"\",\n"
-"            \"replace-client-name\": \"never\",\n"
 "            \"sender-ip\": \"0.0.0.0\",\n"
 "            \"sender-port\": 0,\n"
 "            \"server-ip\": \"127.0.0.1\",\n"
@@ -7424,6 +7799,12 @@ const char* UNPARSED_CONFIGS[] = {
 "                \"4o6-subnet\": \"\",\n"
 "                \"authoritative\": false,\n"
 "                \"calculate-tee-times\": false,\n"
+"                \"ddns-generated-prefix\": \"myhost\",\n"
+"                \"ddns-override-client-update\": false,\n"
+"                \"ddns-override-no-update\": false,\n"
+"                \"ddns-qualifying-suffix\": \"\",\n"
+"                \"ddns-replace-client-name\": \"never\",\n"
+"                \"ddns-send-updates\": true,\n"
 "                \"id\": 234,\n"
 "                \"match-client-id\": true,\n"
 "                \"next-server\": \"0.0.0.0\",\n"
@@ -7476,17 +7857,18 @@ const char* UNPARSED_CONFIGS[] = {
 "        \"authoritative\": false,\n"
 "        \"boot-file-name\": \"\",\n"
 "        \"calculate-tee-times\": false,\n"
+"        \"ddns-generated-prefix\": \"myhost\",\n"
+"        \"ddns-override-client-update\": false,\n"
+"        \"ddns-override-no-update\": false,\n"
+"        \"ddns-qualifying-suffix\": \"\",\n"
+"        \"ddns-replace-client-name\": \"never\",\n"
+"        \"ddns-send-updates\": true,\n"
 "        \"decline-probation-period\": 86400,\n"
 "        \"dhcp-ddns\": {\n"
 "            \"enable-updates\": false,\n"
-"            \"generated-prefix\": \"myhost\",\n"
 "            \"max-queue-size\": 1024,\n"
 "            \"ncr-format\": \"JSON\",\n"
 "            \"ncr-protocol\": \"UDP\",\n"
-"            \"override-client-update\": false,\n"
-"            \"override-no-update\": false,\n"
-"            \"qualifying-suffix\": \"\",\n"
-"            \"replace-client-name\": \"never\",\n"
 "            \"sender-ip\": \"0.0.0.0\",\n"
 "            \"sender-port\": 0,\n"
 "            \"server-ip\": \"127.0.0.1\",\n"
@@ -7536,6 +7918,12 @@ const char* UNPARSED_CONFIGS[] = {
 "                \"4o6-subnet\": \"\",\n"
 "                \"authoritative\": false,\n"
 "                \"calculate-tee-times\": false,\n"
+"                \"ddns-generated-prefix\": \"myhost\",\n"
+"                \"ddns-override-client-update\": false,\n"
+"                \"ddns-override-no-update\": false,\n"
+"                \"ddns-qualifying-suffix\": \"\",\n"
+"                \"ddns-replace-client-name\": \"never\",\n"
+"                \"ddns-send-updates\": true,\n"
 "                \"id\": 1,\n"
 "                \"match-client-id\": true,\n"
 "                \"next-server\": \"0.0.0.0\",\n"
@@ -7564,6 +7952,12 @@ const char* UNPARSED_CONFIGS[] = {
 "                \"4o6-subnet\": \"\",\n"
 "                \"authoritative\": false,\n"
 "                \"calculate-tee-times\": false,\n"
+"                \"ddns-generated-prefix\": \"myhost\",\n"
+"                \"ddns-override-client-update\": false,\n"
+"                \"ddns-override-no-update\": false,\n"
+"                \"ddns-qualifying-suffix\": \"\",\n"
+"                \"ddns-replace-client-name\": \"never\",\n"
+"                \"ddns-send-updates\": true,\n"
 "                \"id\": 2,\n"
 "                \"match-client-id\": true,\n"
 "                \"next-server\": \"0.0.0.0\",\n"
@@ -7592,6 +7986,12 @@ const char* UNPARSED_CONFIGS[] = {
 "                \"4o6-subnet\": \"\",\n"
 "                \"authoritative\": false,\n"
 "                \"calculate-tee-times\": false,\n"
+"                \"ddns-generated-prefix\": \"myhost\",\n"
+"                \"ddns-override-client-update\": false,\n"
+"                \"ddns-override-no-update\": false,\n"
+"                \"ddns-qualifying-suffix\": \"\",\n"
+"                \"ddns-replace-client-name\": \"never\",\n"
+"                \"ddns-send-updates\": true,\n"
 "                \"id\": 3,\n"
 "                \"match-client-id\": true,\n"
 "                \"next-server\": \"0.0.0.0\",\n"
@@ -7620,6 +8020,12 @@ const char* UNPARSED_CONFIGS[] = {
 "                \"4o6-subnet\": \"\",\n"
 "                \"authoritative\": false,\n"
 "                \"calculate-tee-times\": false,\n"
+"                \"ddns-generated-prefix\": \"myhost\",\n"
+"                \"ddns-override-client-update\": false,\n"
+"                \"ddns-override-no-update\": false,\n"
+"                \"ddns-qualifying-suffix\": \"\",\n"
+"                \"ddns-replace-client-name\": \"never\",\n"
+"                \"ddns-send-updates\": true,\n"
 "                \"id\": 4,\n"
 "                \"match-client-id\": true,\n"
 "                \"next-server\": \"0.0.0.0\",\n"
@@ -7652,17 +8058,18 @@ const char* UNPARSED_CONFIGS[] = {
 "        \"authoritative\": false,\n"
 "        \"boot-file-name\": \"\",\n"
 "        \"calculate-tee-times\": false,\n"
+"        \"ddns-generated-prefix\": \"myhost\",\n"
+"        \"ddns-override-client-update\": false,\n"
+"        \"ddns-override-no-update\": false,\n"
+"        \"ddns-qualifying-suffix\": \"\",\n"
+"        \"ddns-replace-client-name\": \"never\",\n"
+"        \"ddns-send-updates\": true,\n"
 "        \"decline-probation-period\": 86400,\n"
 "        \"dhcp-ddns\": {\n"
 "            \"enable-updates\": false,\n"
-"            \"generated-prefix\": \"myhost\",\n"
 "            \"max-queue-size\": 1024,\n"
 "            \"ncr-format\": \"JSON\",\n"
 "            \"ncr-protocol\": \"UDP\",\n"
-"            \"override-client-update\": false,\n"
-"            \"override-no-update\": false,\n"
-"            \"qualifying-suffix\": \"\",\n"
-"            \"replace-client-name\": \"never\",\n"
 "            \"sender-ip\": \"0.0.0.0\",\n"
 "            \"sender-port\": 0,\n"
 "            \"server-ip\": \"127.0.0.1\",\n"
@@ -7712,6 +8119,12 @@ const char* UNPARSED_CONFIGS[] = {
 "                \"4o6-subnet\": \"\",\n"
 "                \"authoritative\": false,\n"
 "                \"calculate-tee-times\": false,\n"
+"                \"ddns-generated-prefix\": \"myhost\",\n"
+"                \"ddns-override-client-update\": false,\n"
+"                \"ddns-override-no-update\": false,\n"
+"                \"ddns-qualifying-suffix\": \"\",\n"
+"                \"ddns-replace-client-name\": \"never\",\n"
+"                \"ddns-send-updates\": true,\n"
 "                \"id\": 1,\n"
 "                \"match-client-id\": true,\n"
 "                \"next-server\": \"0.0.0.0\",\n"
@@ -7740,6 +8153,12 @@ const char* UNPARSED_CONFIGS[] = {
 "                \"4o6-subnet\": \"\",\n"
 "                \"authoritative\": false,\n"
 "                \"calculate-tee-times\": false,\n"
+"                \"ddns-generated-prefix\": \"myhost\",\n"
+"                \"ddns-override-client-update\": false,\n"
+"                \"ddns-override-no-update\": false,\n"
+"                \"ddns-qualifying-suffix\": \"\",\n"
+"                \"ddns-replace-client-name\": \"never\",\n"
+"                \"ddns-send-updates\": true,\n"
 "                \"id\": 2,\n"
 "                \"match-client-id\": true,\n"
 "                \"next-server\": \"0.0.0.0\",\n"
@@ -7772,17 +8191,18 @@ const char* UNPARSED_CONFIGS[] = {
 "        \"authoritative\": false,\n"
 "        \"boot-file-name\": \"\",\n"
 "        \"calculate-tee-times\": false,\n"
+"        \"ddns-generated-prefix\": \"myhost\",\n"
+"        \"ddns-override-client-update\": false,\n"
+"        \"ddns-override-no-update\": false,\n"
+"        \"ddns-qualifying-suffix\": \"\",\n"
+"        \"ddns-replace-client-name\": \"never\",\n"
+"        \"ddns-send-updates\": true,\n"
 "        \"decline-probation-period\": 86400,\n"
 "        \"dhcp-ddns\": {\n"
 "            \"enable-updates\": false,\n"
-"            \"generated-prefix\": \"myhost\",\n"
 "            \"max-queue-size\": 1024,\n"
 "            \"ncr-format\": \"JSON\",\n"
 "            \"ncr-protocol\": \"UDP\",\n"
-"            \"override-client-update\": false,\n"
-"            \"override-no-update\": false,\n"
-"            \"qualifying-suffix\": \"\",\n"
-"            \"replace-client-name\": \"never\",\n"
 "            \"sender-ip\": \"0.0.0.0\",\n"
 "            \"sender-port\": 0,\n"
 "            \"server-ip\": \"127.0.0.1\",\n"
@@ -7833,17 +8253,18 @@ const char* UNPARSED_CONFIGS[] = {
 "        \"authoritative\": false,\n"
 "        \"boot-file-name\": \"\",\n"
 "        \"calculate-tee-times\": false,\n"
+"        \"ddns-generated-prefix\": \"myhost\",\n"
+"        \"ddns-override-client-update\": false,\n"
+"        \"ddns-override-no-update\": false,\n"
+"        \"ddns-qualifying-suffix\": \"\",\n"
+"        \"ddns-replace-client-name\": \"never\",\n"
+"        \"ddns-send-updates\": true,\n"
 "        \"decline-probation-period\": 86400,\n"
 "        \"dhcp-ddns\": {\n"
 "            \"enable-updates\": false,\n"
-"            \"generated-prefix\": \"myhost\",\n"
 "            \"max-queue-size\": 1024,\n"
 "            \"ncr-format\": \"JSON\",\n"
 "            \"ncr-protocol\": \"UDP\",\n"
-"            \"override-client-update\": false,\n"
-"            \"override-no-update\": false,\n"
-"            \"qualifying-suffix\": \"\",\n"
-"            \"replace-client-name\": \"never\",\n"
 "            \"sender-ip\": \"0.0.0.0\",\n"
 "            \"sender-port\": 0,\n"
 "            \"server-ip\": \"127.0.0.1\",\n"
@@ -7894,17 +8315,18 @@ const char* UNPARSED_CONFIGS[] = {
 "        \"authoritative\": false,\n"
 "        \"boot-file-name\": \"\",\n"
 "        \"calculate-tee-times\": false,\n"
+"        \"ddns-generated-prefix\": \"myhost\",\n"
+"        \"ddns-override-client-update\": false,\n"
+"        \"ddns-override-no-update\": false,\n"
+"        \"ddns-qualifying-suffix\": \"\",\n"
+"        \"ddns-replace-client-name\": \"never\",\n"
+"        \"ddns-send-updates\": true,\n"
 "        \"decline-probation-period\": 12345,\n"
 "        \"dhcp-ddns\": {\n"
 "            \"enable-updates\": false,\n"
-"            \"generated-prefix\": \"myhost\",\n"
 "            \"max-queue-size\": 1024,\n"
 "            \"ncr-format\": \"JSON\",\n"
 "            \"ncr-protocol\": \"UDP\",\n"
-"            \"override-client-update\": false,\n"
-"            \"override-no-update\": false,\n"
-"            \"qualifying-suffix\": \"\",\n"
-"            \"replace-client-name\": \"never\",\n"
 "            \"sender-ip\": \"0.0.0.0\",\n"
 "            \"sender-port\": 0,\n"
 "            \"server-ip\": \"127.0.0.1\",\n"
@@ -7955,17 +8377,18 @@ const char* UNPARSED_CONFIGS[] = {
 "        \"authoritative\": false,\n"
 "        \"boot-file-name\": \"\",\n"
 "        \"calculate-tee-times\": false,\n"
+"        \"ddns-generated-prefix\": \"myhost\",\n"
+"        \"ddns-override-client-update\": false,\n"
+"        \"ddns-override-no-update\": false,\n"
+"        \"ddns-qualifying-suffix\": \"\",\n"
+"        \"ddns-replace-client-name\": \"never\",\n"
+"        \"ddns-send-updates\": true,\n"
 "        \"decline-probation-period\": 86400,\n"
 "        \"dhcp-ddns\": {\n"
 "            \"enable-updates\": false,\n"
-"            \"generated-prefix\": \"myhost\",\n"
 "            \"max-queue-size\": 1024,\n"
 "            \"ncr-format\": \"JSON\",\n"
 "            \"ncr-protocol\": \"UDP\",\n"
-"            \"override-client-update\": false,\n"
-"            \"override-no-update\": false,\n"
-"            \"qualifying-suffix\": \"\",\n"
-"            \"replace-client-name\": \"never\",\n"
 "            \"sender-ip\": \"0.0.0.0\",\n"
 "            \"sender-port\": 0,\n"
 "            \"server-ip\": \"127.0.0.1\",\n"
@@ -8016,17 +8439,18 @@ const char* UNPARSED_CONFIGS[] = {
 "        \"authoritative\": false,\n"
 "        \"boot-file-name\": \"\",\n"
 "        \"calculate-tee-times\": false,\n"
+"        \"ddns-generated-prefix\": \"myhost\",\n"
+"        \"ddns-override-client-update\": false,\n"
+"        \"ddns-override-no-update\": false,\n"
+"        \"ddns-qualifying-suffix\": \"\",\n"
+"        \"ddns-replace-client-name\": \"never\",\n"
+"        \"ddns-send-updates\": true,\n"
 "        \"decline-probation-period\": 86400,\n"
 "        \"dhcp-ddns\": {\n"
 "            \"enable-updates\": false,\n"
-"            \"generated-prefix\": \"myhost\",\n"
 "            \"max-queue-size\": 1024,\n"
 "            \"ncr-format\": \"JSON\",\n"
 "            \"ncr-protocol\": \"UDP\",\n"
-"            \"override-client-update\": false,\n"
-"            \"override-no-update\": false,\n"
-"            \"qualifying-suffix\": \"\",\n"
-"            \"replace-client-name\": \"never\",\n"
 "            \"sender-ip\": \"0.0.0.0\",\n"
 "            \"sender-port\": 0,\n"
 "            \"server-ip\": \"127.0.0.1\",\n"
@@ -8076,6 +8500,12 @@ const char* UNPARSED_CONFIGS[] = {
 "                \"4o6-subnet\": \"\",\n"
 "                \"authoritative\": false,\n"
 "                \"calculate-tee-times\": false,\n"
+"                \"ddns-generated-prefix\": \"myhost\",\n"
+"                \"ddns-override-client-update\": false,\n"
+"                \"ddns-override-no-update\": false,\n"
+"                \"ddns-qualifying-suffix\": \"\",\n"
+"                \"ddns-replace-client-name\": \"never\",\n"
+"                \"ddns-send-updates\": true,\n"
 "                \"id\": 1,\n"
 "                \"match-client-id\": true,\n"
 "                \"next-server\": \"0.0.0.0\",\n"
@@ -8108,17 +8538,18 @@ const char* UNPARSED_CONFIGS[] = {
 "        \"authoritative\": false,\n"
 "        \"boot-file-name\": \"\",\n"
 "        \"calculate-tee-times\": false,\n"
+"        \"ddns-generated-prefix\": \"myhost\",\n"
+"        \"ddns-override-client-update\": false,\n"
+"        \"ddns-override-no-update\": false,\n"
+"        \"ddns-qualifying-suffix\": \"\",\n"
+"        \"ddns-replace-client-name\": \"never\",\n"
+"        \"ddns-send-updates\": true,\n"
 "        \"decline-probation-period\": 86400,\n"
 "        \"dhcp-ddns\": {\n"
 "            \"enable-updates\": false,\n"
-"            \"generated-prefix\": \"myhost\",\n"
 "            \"max-queue-size\": 1024,\n"
 "            \"ncr-format\": \"JSON\",\n"
 "            \"ncr-protocol\": \"UDP\",\n"
-"            \"override-client-update\": false,\n"
-"            \"override-no-update\": false,\n"
-"            \"qualifying-suffix\": \"\",\n"
-"            \"replace-client-name\": \"never\",\n"
 "            \"sender-ip\": \"0.0.0.0\",\n"
 "            \"sender-port\": 0,\n"
 "            \"server-ip\": \"127.0.0.1\",\n"
@@ -8168,6 +8599,12 @@ const char* UNPARSED_CONFIGS[] = {
 "                \"4o6-subnet\": \"2001:db8::123/45\",\n"
 "                \"authoritative\": false,\n"
 "                \"calculate-tee-times\": false,\n"
+"                \"ddns-generated-prefix\": \"myhost\",\n"
+"                \"ddns-override-client-update\": false,\n"
+"                \"ddns-override-no-update\": false,\n"
+"                \"ddns-qualifying-suffix\": \"\",\n"
+"                \"ddns-replace-client-name\": \"never\",\n"
+"                \"ddns-send-updates\": true,\n"
 "                \"id\": 1,\n"
 "                \"match-client-id\": true,\n"
 "                \"next-server\": \"0.0.0.0\",\n"
@@ -8200,17 +8637,18 @@ const char* UNPARSED_CONFIGS[] = {
 "        \"authoritative\": false,\n"
 "        \"boot-file-name\": \"\",\n"
 "        \"calculate-tee-times\": false,\n"
+"        \"ddns-generated-prefix\": \"myhost\",\n"
+"        \"ddns-override-client-update\": false,\n"
+"        \"ddns-override-no-update\": false,\n"
+"        \"ddns-qualifying-suffix\": \"\",\n"
+"        \"ddns-replace-client-name\": \"never\",\n"
+"        \"ddns-send-updates\": true,\n"
 "        \"decline-probation-period\": 86400,\n"
 "        \"dhcp-ddns\": {\n"
 "            \"enable-updates\": false,\n"
-"            \"generated-prefix\": \"myhost\",\n"
 "            \"max-queue-size\": 1024,\n"
 "            \"ncr-format\": \"JSON\",\n"
 "            \"ncr-protocol\": \"UDP\",\n"
-"            \"override-client-update\": false,\n"
-"            \"override-no-update\": false,\n"
-"            \"qualifying-suffix\": \"\",\n"
-"            \"replace-client-name\": \"never\",\n"
 "            \"sender-ip\": \"0.0.0.0\",\n"
 "            \"sender-port\": 0,\n"
 "            \"server-ip\": \"127.0.0.1\",\n"
@@ -8260,6 +8698,12 @@ const char* UNPARSED_CONFIGS[] = {
 "                \"4o6-subnet\": \"\",\n"
 "                \"authoritative\": false,\n"
 "                \"calculate-tee-times\": false,\n"
+"                \"ddns-generated-prefix\": \"myhost\",\n"
+"                \"ddns-override-client-update\": false,\n"
+"                \"ddns-override-no-update\": false,\n"
+"                \"ddns-qualifying-suffix\": \"\",\n"
+"                \"ddns-replace-client-name\": \"never\",\n"
+"                \"ddns-send-updates\": true,\n"
 "                \"id\": 1,\n"
 "                \"match-client-id\": true,\n"
 "                \"next-server\": \"0.0.0.0\",\n"
@@ -8292,17 +8736,18 @@ const char* UNPARSED_CONFIGS[] = {
 "        \"authoritative\": false,\n"
 "        \"boot-file-name\": \"\",\n"
 "        \"calculate-tee-times\": false,\n"
+"        \"ddns-generated-prefix\": \"myhost\",\n"
+"        \"ddns-override-client-update\": false,\n"
+"        \"ddns-override-no-update\": false,\n"
+"        \"ddns-qualifying-suffix\": \"\",\n"
+"        \"ddns-replace-client-name\": \"never\",\n"
+"        \"ddns-send-updates\": true,\n"
 "        \"decline-probation-period\": 86400,\n"
 "        \"dhcp-ddns\": {\n"
 "            \"enable-updates\": false,\n"
-"            \"generated-prefix\": \"myhost\",\n"
 "            \"max-queue-size\": 1024,\n"
 "            \"ncr-format\": \"JSON\",\n"
 "            \"ncr-protocol\": \"UDP\",\n"
-"            \"override-client-update\": false,\n"
-"            \"override-no-update\": false,\n"
-"            \"qualifying-suffix\": \"\",\n"
-"            \"replace-client-name\": \"never\",\n"
 "            \"sender-ip\": \"0.0.0.0\",\n"
 "            \"sender-port\": 0,\n"
 "            \"server-ip\": \"127.0.0.1\",\n"
@@ -8352,6 +8797,12 @@ const char* UNPARSED_CONFIGS[] = {
 "                \"4o6-subnet\": \"2001:db8::543/21\",\n"
 "                \"authoritative\": false,\n"
 "                \"calculate-tee-times\": false,\n"
+"                \"ddns-generated-prefix\": \"myhost\",\n"
+"                \"ddns-override-client-update\": false,\n"
+"                \"ddns-override-no-update\": false,\n"
+"                \"ddns-qualifying-suffix\": \"\",\n"
+"                \"ddns-replace-client-name\": \"never\",\n"
+"                \"ddns-send-updates\": true,\n"
 "                \"id\": 1,\n"
 "                \"match-client-id\": true,\n"
 "                \"next-server\": \"0.0.0.0\",\n"
@@ -8384,17 +8835,18 @@ const char* UNPARSED_CONFIGS[] = {
 "        \"authoritative\": false,\n"
 "        \"boot-file-name\": \"\",\n"
 "        \"calculate-tee-times\": false,\n"
+"        \"ddns-generated-prefix\": \"myhost\",\n"
+"        \"ddns-override-client-update\": false,\n"
+"        \"ddns-override-no-update\": false,\n"
+"        \"ddns-qualifying-suffix\": \"\",\n"
+"        \"ddns-replace-client-name\": \"never\",\n"
+"        \"ddns-send-updates\": true,\n"
 "        \"decline-probation-period\": 86400,\n"
 "        \"dhcp-ddns\": {\n"
 "            \"enable-updates\": false,\n"
-"            \"generated-prefix\": \"myhost\",\n"
 "            \"max-queue-size\": 1024,\n"
 "            \"ncr-format\": \"JSON\",\n"
 "            \"ncr-protocol\": \"UDP\",\n"
-"            \"override-client-update\": false,\n"
-"            \"override-no-update\": false,\n"
-"            \"qualifying-suffix\": \"\",\n"
-"            \"replace-client-name\": \"never\",\n"
 "            \"sender-ip\": \"0.0.0.0\",\n"
 "            \"sender-port\": 0,\n"
 "            \"server-ip\": \"127.0.0.1\",\n"
@@ -8444,6 +8896,12 @@ const char* UNPARSED_CONFIGS[] = {
 "                \"4o6-subnet\": \"\",\n"
 "                \"authoritative\": false,\n"
 "                \"calculate-tee-times\": false,\n"
+"                \"ddns-generated-prefix\": \"myhost\",\n"
+"                \"ddns-override-client-update\": false,\n"
+"                \"ddns-override-no-update\": false,\n"
+"                \"ddns-qualifying-suffix\": \"\",\n"
+"                \"ddns-replace-client-name\": \"never\",\n"
+"                \"ddns-send-updates\": true,\n"
 "                \"id\": 1,\n"
 "                \"match-client-id\": true,\n"
 "                \"next-server\": \"0.0.0.0\",\n"
@@ -8502,17 +8960,18 @@ const char* UNPARSED_CONFIGS[] = {
 "                \"server-hostname\": \"\"\n"
 "            }\n"
 "        ],\n"
+"        \"ddns-generated-prefix\": \"myhost\",\n"
+"        \"ddns-override-client-update\": false,\n"
+"        \"ddns-override-no-update\": false,\n"
+"        \"ddns-qualifying-suffix\": \"\",\n"
+"        \"ddns-replace-client-name\": \"never\",\n"
+"        \"ddns-send-updates\": true,\n"
 "        \"decline-probation-period\": 86400,\n"
 "        \"dhcp-ddns\": {\n"
 "            \"enable-updates\": false,\n"
-"            \"generated-prefix\": \"myhost\",\n"
 "            \"max-queue-size\": 1024,\n"
 "            \"ncr-format\": \"JSON\",\n"
 "            \"ncr-protocol\": \"UDP\",\n"
-"            \"override-client-update\": false,\n"
-"            \"override-no-update\": false,\n"
-"            \"qualifying-suffix\": \"\",\n"
-"            \"replace-client-name\": \"never\",\n"
 "            \"sender-ip\": \"0.0.0.0\",\n"
 "            \"sender-port\": 0,\n"
 "            \"server-ip\": \"127.0.0.1\",\n"
@@ -8562,6 +9021,12 @@ const char* UNPARSED_CONFIGS[] = {
 "                \"4o6-subnet\": \"\",\n"
 "                \"authoritative\": false,\n"
 "                \"calculate-tee-times\": false,\n"
+"                \"ddns-generated-prefix\": \"myhost\",\n"
+"                \"ddns-override-client-update\": false,\n"
+"                \"ddns-override-no-update\": false,\n"
+"                \"ddns-qualifying-suffix\": \"\",\n"
+"                \"ddns-replace-client-name\": \"never\",\n"
+"                \"ddns-send-updates\": true,\n"
 "                \"id\": 1,\n"
 "                \"match-client-id\": true,\n"
 "                \"next-server\": \"0.0.0.0\",\n"
@@ -8594,17 +9059,18 @@ const char* UNPARSED_CONFIGS[] = {
 "        \"authoritative\": false,\n"
 "        \"boot-file-name\": \"\",\n"
 "        \"calculate-tee-times\": false,\n"
+"        \"ddns-generated-prefix\": \"myhost\",\n"
+"        \"ddns-override-client-update\": false,\n"
+"        \"ddns-override-no-update\": false,\n"
+"        \"ddns-qualifying-suffix\": \"\",\n"
+"        \"ddns-replace-client-name\": \"never\",\n"
+"        \"ddns-send-updates\": true,\n"
 "        \"decline-probation-period\": 86400,\n"
 "        \"dhcp-ddns\": {\n"
 "            \"enable-updates\": false,\n"
-"            \"generated-prefix\": \"myhost\",\n"
 "            \"max-queue-size\": 1024,\n"
 "            \"ncr-format\": \"JSON\",\n"
 "            \"ncr-protocol\": \"UDP\",\n"
-"            \"override-client-update\": false,\n"
-"            \"override-no-update\": false,\n"
-"            \"qualifying-suffix\": \"\",\n"
-"            \"replace-client-name\": \"never\",\n"
 "            \"sender-ip\": \"0.0.0.0\",\n"
 "            \"sender-port\": 0,\n"
 "            \"server-ip\": \"127.0.0.1\",\n"
@@ -8654,6 +9120,12 @@ const char* UNPARSED_CONFIGS[] = {
 "                \"4o6-subnet\": \"\",\n"
 "                \"authoritative\": false,\n"
 "                \"calculate-tee-times\": false,\n"
+"                \"ddns-generated-prefix\": \"myhost\",\n"
+"                \"ddns-override-client-update\": false,\n"
+"                \"ddns-override-no-update\": false,\n"
+"                \"ddns-qualifying-suffix\": \"\",\n"
+"                \"ddns-replace-client-name\": \"never\",\n"
+"                \"ddns-send-updates\": true,\n"
 "                \"id\": 1,\n"
 "                \"match-client-id\": true,\n"
 "                \"next-server\": \"0.0.0.0\",\n"
@@ -8686,17 +9158,18 @@ const char* UNPARSED_CONFIGS[] = {
 "        \"authoritative\": false,\n"
 "        \"boot-file-name\": \"\",\n"
 "        \"calculate-tee-times\": false,\n"
+"        \"ddns-generated-prefix\": \"myhost\",\n"
+"        \"ddns-override-client-update\": false,\n"
+"        \"ddns-override-no-update\": false,\n"
+"        \"ddns-qualifying-suffix\": \"\",\n"
+"        \"ddns-replace-client-name\": \"never\",\n"
+"        \"ddns-send-updates\": true,\n"
 "        \"decline-probation-period\": 86400,\n"
 "        \"dhcp-ddns\": {\n"
 "            \"enable-updates\": false,\n"
-"            \"generated-prefix\": \"myhost\",\n"
 "            \"max-queue-size\": 1024,\n"
 "            \"ncr-format\": \"JSON\",\n"
 "            \"ncr-protocol\": \"UDP\",\n"
-"            \"override-client-update\": false,\n"
-"            \"override-no-update\": false,\n"
-"            \"qualifying-suffix\": \"\",\n"
-"            \"replace-client-name\": \"never\",\n"
 "            \"sender-ip\": \"0.0.0.0\",\n"
 "            \"sender-port\": 0,\n"
 "            \"server-ip\": \"127.0.0.1\",\n"
@@ -8746,6 +9219,12 @@ const char* UNPARSED_CONFIGS[] = {
 "                \"4o6-subnet\": \"\",\n"
 "                \"authoritative\": false,\n"
 "                \"calculate-tee-times\": false,\n"
+"                \"ddns-generated-prefix\": \"myhost\",\n"
+"                \"ddns-override-client-update\": false,\n"
+"                \"ddns-override-no-update\": false,\n"
+"                \"ddns-qualifying-suffix\": \"\",\n"
+"                \"ddns-replace-client-name\": \"never\",\n"
+"                \"ddns-send-updates\": true,\n"
 "                \"id\": 1,\n"
 "                \"match-client-id\": true,\n"
 "                \"next-server\": \"0.0.0.0\",\n"
@@ -8779,17 +9258,18 @@ const char* UNPARSED_CONFIGS[] = {
 "        \"authoritative\": false,\n"
 "        \"boot-file-name\": \"\",\n"
 "        \"calculate-tee-times\": false,\n"
+"        \"ddns-generated-prefix\": \"myhost\",\n"
+"        \"ddns-override-client-update\": false,\n"
+"        \"ddns-override-no-update\": false,\n"
+"        \"ddns-qualifying-suffix\": \"\",\n"
+"        \"ddns-replace-client-name\": \"never\",\n"
+"        \"ddns-send-updates\": true,\n"
 "        \"decline-probation-period\": 86400,\n"
 "        \"dhcp-ddns\": {\n"
 "            \"enable-updates\": false,\n"
-"            \"generated-prefix\": \"myhost\",\n"
 "            \"max-queue-size\": 1024,\n"
 "            \"ncr-format\": \"JSON\",\n"
 "            \"ncr-protocol\": \"UDP\",\n"
-"            \"override-client-update\": false,\n"
-"            \"override-no-update\": false,\n"
-"            \"qualifying-suffix\": \"\",\n"
-"            \"replace-client-name\": \"never\",\n"
 "            \"sender-ip\": \"0.0.0.0\",\n"
 "            \"sender-port\": 0,\n"
 "            \"server-ip\": \"127.0.0.1\",\n"
@@ -8839,6 +9319,12 @@ const char* UNPARSED_CONFIGS[] = {
 "                \"4o6-subnet\": \"\",\n"
 "                \"authoritative\": false,\n"
 "                \"calculate-tee-times\": false,\n"
+"                \"ddns-generated-prefix\": \"myhost\",\n"
+"                \"ddns-override-client-update\": false,\n"
+"                \"ddns-override-no-update\": false,\n"
+"                \"ddns-qualifying-suffix\": \"\",\n"
+"                \"ddns-replace-client-name\": \"never\",\n"
+"                \"ddns-send-updates\": true,\n"
 "                \"id\": 1,\n"
 "                \"match-client-id\": true,\n"
 "                \"next-server\": \"0.0.0.0\",\n"
@@ -8876,17 +9362,18 @@ const char* UNPARSED_CONFIGS[] = {
 "        \"authoritative\": false,\n"
 "        \"boot-file-name\": \"\",\n"
 "        \"calculate-tee-times\": false,\n"
+"        \"ddns-generated-prefix\": \"myhost\",\n"
+"        \"ddns-override-client-update\": false,\n"
+"        \"ddns-override-no-update\": false,\n"
+"        \"ddns-qualifying-suffix\": \"\",\n"
+"        \"ddns-replace-client-name\": \"never\",\n"
+"        \"ddns-send-updates\": true,\n"
 "        \"decline-probation-period\": 86400,\n"
 "        \"dhcp-ddns\": {\n"
 "            \"enable-updates\": false,\n"
-"            \"generated-prefix\": \"myhost\",\n"
 "            \"max-queue-size\": 1024,\n"
 "            \"ncr-format\": \"JSON\",\n"
 "            \"ncr-protocol\": \"UDP\",\n"
-"            \"override-client-update\": false,\n"
-"            \"override-no-update\": false,\n"
-"            \"qualifying-suffix\": \"\",\n"
-"            \"replace-client-name\": \"never\",\n"
 "            \"sender-ip\": \"0.0.0.0\",\n"
 "            \"sender-port\": 0,\n"
 "            \"server-ip\": \"127.0.0.1\",\n"
@@ -8936,6 +9423,12 @@ const char* UNPARSED_CONFIGS[] = {
 "                \"4o6-subnet\": \"\",\n"
 "                \"authoritative\": false,\n"
 "                \"calculate-tee-times\": false,\n"
+"                \"ddns-generated-prefix\": \"myhost\",\n"
+"                \"ddns-override-client-update\": false,\n"
+"                \"ddns-override-no-update\": false,\n"
+"                \"ddns-qualifying-suffix\": \"\",\n"
+"                \"ddns-replace-client-name\": \"never\",\n"
+"                \"ddns-send-updates\": true,\n"
 "                \"id\": 1,\n"
 "                \"match-client-id\": true,\n"
 "                \"next-server\": \"0.0.0.0\",\n"
@@ -8973,17 +9466,18 @@ const char* UNPARSED_CONFIGS[] = {
 "        \"authoritative\": false,\n"
 "        \"boot-file-name\": \"\",\n"
 "        \"calculate-tee-times\": false,\n"
+"        \"ddns-generated-prefix\": \"myhost\",\n"
+"        \"ddns-override-client-update\": false,\n"
+"        \"ddns-override-no-update\": false,\n"
+"        \"ddns-qualifying-suffix\": \"\",\n"
+"        \"ddns-replace-client-name\": \"never\",\n"
+"        \"ddns-send-updates\": true,\n"
 "        \"decline-probation-period\": 86400,\n"
 "        \"dhcp-ddns\": {\n"
 "            \"enable-updates\": false,\n"
-"            \"generated-prefix\": \"myhost\",\n"
 "            \"max-queue-size\": 1024,\n"
 "            \"ncr-format\": \"JSON\",\n"
 "            \"ncr-protocol\": \"UDP\",\n"
-"            \"override-client-update\": false,\n"
-"            \"override-no-update\": false,\n"
-"            \"qualifying-suffix\": \"\",\n"
-"            \"replace-client-name\": \"never\",\n"
 "            \"sender-ip\": \"0.0.0.0\",\n"
 "            \"sender-port\": 0,\n"
 "            \"server-ip\": \"127.0.0.1\",\n"
@@ -9088,18 +9582,19 @@ const char* UNPARSED_CONFIGS[] = {
 "            \"socket-name\": \"/tmp/kea4-ctrl-socket\",\n"
 "            \"socket-type\": \"unix\"\n"
 "        },\n"
+"        \"ddns-generated-prefix\": \"myhost\",\n"
+"        \"ddns-override-client-update\": false,\n"
+"        \"ddns-override-no-update\": false,\n"
+"        \"ddns-qualifying-suffix\": \"\",\n"
+"        \"ddns-replace-client-name\": \"never\",\n"
+"        \"ddns-send-updates\": true,\n"
 "        \"decline-probation-period\": 86400,\n"
 "        \"dhcp-ddns\": {\n"
 "            \"comment\": \"No dynamic DNS\",\n"
 "            \"enable-updates\": false,\n"
-"            \"generated-prefix\": \"myhost\",\n"
 "            \"max-queue-size\": 1024,\n"
 "            \"ncr-format\": \"JSON\",\n"
 "            \"ncr-protocol\": \"UDP\",\n"
-"            \"override-client-update\": false,\n"
-"            \"override-no-update\": false,\n"
-"            \"qualifying-suffix\": \"\",\n"
-"            \"replace-client-name\": \"never\",\n"
 "            \"sender-ip\": \"0.0.0.0\",\n"
 "            \"sender-port\": 0,\n"
 "            \"server-ip\": \"127.0.0.1\",\n"
@@ -9166,6 +9661,12 @@ const char* UNPARSED_CONFIGS[] = {
 "                \"comment\": \"A shared network\",\n"
 "                \"authoritative\": false,\n"
 "                \"calculate-tee-times\": false,\n"
+"                \"ddns-generated-prefix\": \"myhost\",\n"
+"                \"ddns-override-client-update\": false,\n"
+"                \"ddns-override-no-update\": false,\n"
+"                \"ddns-qualifying-suffix\": \"\",\n"
+"                \"ddns-replace-client-name\": \"never\",\n"
+"                \"ddns-send-updates\": true,\n"
 "                \"interface\": \"\",\n"
 "                \"match-client-id\": true,\n"
 "                \"name\": \"foo\",\n"
@@ -9183,6 +9684,12 @@ const char* UNPARSED_CONFIGS[] = {
 "                        \"4o6-subnet\": \"\",\n"
 "                        \"authoritative\": false,\n"
 "                        \"calculate-tee-times\": false,\n"
+"                        \"ddns-generated-prefix\": \"myhost\",\n"
+"                        \"ddns-override-client-update\": false,\n"
+"                        \"ddns-override-no-update\": false,\n"
+"                        \"ddns-qualifying-suffix\": \"\",\n"
+"                        \"ddns-replace-client-name\": \"never\",\n"
+"                        \"ddns-send-updates\": true,\n"
 "                        \"id\": 100,\n"
 "                        \"match-client-id\": true,\n"
 "                        \"next-server\": \"0.0.0.0\",\n"
@@ -9241,17 +9748,18 @@ const char* UNPARSED_CONFIGS[] = {
 "        \"authoritative\": false,\n"
 "        \"boot-file-name\": \"\",\n"
 "        \"calculate-tee-times\": false,\n"
+"        \"ddns-generated-prefix\": \"myhost\",\n"
+"        \"ddns-override-client-update\": false,\n"
+"        \"ddns-override-no-update\": false,\n"
+"        \"ddns-qualifying-suffix\": \"\",\n"
+"        \"ddns-replace-client-name\": \"never\",\n"
+"        \"ddns-send-updates\": true,\n"
 "        \"decline-probation-period\": 86400,\n"
 "        \"dhcp-ddns\": {\n"
 "            \"enable-updates\": false,\n"
-"            \"generated-prefix\": \"myhost\",\n"
 "            \"max-queue-size\": 1024,\n"
 "            \"ncr-format\": \"JSON\",\n"
 "            \"ncr-protocol\": \"UDP\",\n"
-"            \"override-client-update\": false,\n"
-"            \"override-no-update\": false,\n"
-"            \"qualifying-suffix\": \"\",\n"
-"            \"replace-client-name\": \"never\",\n"
 "            \"sender-ip\": \"0.0.0.0\",\n"
 "            \"sender-port\": 0,\n"
 "            \"server-ip\": \"127.0.0.1\",\n"
@@ -9356,6 +9864,12 @@ const char* UNPARSED_CONFIGS[] = {
 "                \"4o6-subnet\": \"\",\n"
 "                \"authoritative\": false,\n"
 "                \"calculate-tee-times\": false,\n"
+"                \"ddns-generated-prefix\": \"myhost\",\n"
+"                \"ddns-override-client-update\": false,\n"
+"                \"ddns-override-no-update\": false,\n"
+"                \"ddns-qualifying-suffix\": \"\",\n"
+"                \"ddns-replace-client-name\": \"never\",\n"
+"                \"ddns-send-updates\": true,\n"
 "                \"id\": 123,\n"
 "                \"match-client-id\": true,\n"
 "                \"next-server\": \"0.0.0.0\",\n"
@@ -9384,6 +9898,12 @@ const char* UNPARSED_CONFIGS[] = {
 "                \"4o6-subnet\": \"\",\n"
 "                \"authoritative\": false,\n"
 "                \"calculate-tee-times\": false,\n"
+"                \"ddns-generated-prefix\": \"myhost\",\n"
+"                \"ddns-override-client-update\": false,\n"
+"                \"ddns-override-no-update\": false,\n"
+"                \"ddns-qualifying-suffix\": \"\",\n"
+"                \"ddns-replace-client-name\": \"never\",\n"
+"                \"ddns-send-updates\": true,\n"
 "                \"id\": 542,\n"
 "                \"match-client-id\": true,\n"
 "                \"next-server\": \"0.0.0.0\",\n"
@@ -9416,17 +9936,18 @@ const char* UNPARSED_CONFIGS[] = {
 "        \"authoritative\": false,\n"
 "        \"boot-file-name\": \"\",\n"
 "        \"calculate-tee-times\": false,\n"
+"        \"ddns-generated-prefix\": \"myhost\",\n"
+"        \"ddns-override-client-update\": false,\n"
+"        \"ddns-override-no-update\": false,\n"
+"        \"ddns-qualifying-suffix\": \"\",\n"
+"        \"ddns-replace-client-name\": \"never\",\n"
+"        \"ddns-send-updates\": true,\n"
 "        \"decline-probation-period\": 86400,\n"
 "        \"dhcp-ddns\": {\n"
 "            \"enable-updates\": false,\n"
-"            \"generated-prefix\": \"myhost\",\n"
 "            \"max-queue-size\": 1024,\n"
 "            \"ncr-format\": \"JSON\",\n"
 "            \"ncr-protocol\": \"UDP\",\n"
-"            \"override-client-update\": false,\n"
-"            \"override-no-update\": false,\n"
-"            \"qualifying-suffix\": \"\",\n"
-"            \"replace-client-name\": \"never\",\n"
 "            \"sender-ip\": \"0.0.0.0\",\n"
 "            \"sender-port\": 0,\n"
 "            \"server-ip\": \"127.0.0.1\",\n"
@@ -9470,6 +9991,12 @@ const char* UNPARSED_CONFIGS[] = {
 "            {\n"
 "                \"authoritative\": false,\n"
 "                \"calculate-tee-times\": true,\n"
+"                \"ddns-generated-prefix\": \"myhost\",\n"
+"                \"ddns-override-client-update\": false,\n"
+"                \"ddns-override-no-update\": false,\n"
+"                \"ddns-qualifying-suffix\": \"\",\n"
+"                \"ddns-replace-client-name\": \"never\",\n"
+"                \"ddns-send-updates\": true,\n"
 "                \"interface\": \"\",\n"
 "                \"match-client-id\": true,\n"
 "                \"name\": \"foo\",\n"
@@ -9486,6 +10013,12 @@ const char* UNPARSED_CONFIGS[] = {
 "                        \"4o6-subnet\": \"\",\n"
 "                        \"authoritative\": false,\n"
 "                        \"calculate-tee-times\": false,\n"
+"                        \"ddns-generated-prefix\": \"myhost\",\n"
+"                        \"ddns-override-client-update\": false,\n"
+"                        \"ddns-override-no-update\": false,\n"
+"                        \"ddns-qualifying-suffix\": \"\",\n"
+"                        \"ddns-replace-client-name\": \"never\",\n"
+"                        \"ddns-send-updates\": true,\n"
 "                        \"id\": 100,\n"
 "                        \"match-client-id\": true,\n"
 "                        \"next-server\": \"0.0.0.0\",\n"
@@ -9512,6 +10045,12 @@ const char* UNPARSED_CONFIGS[] = {
 "                        \"4o6-subnet\": \"\",\n"
 "                        \"authoritative\": false,\n"
 "                        \"calculate-tee-times\": true,\n"
+"                        \"ddns-generated-prefix\": \"myhost\",\n"
+"                        \"ddns-override-client-update\": false,\n"
+"                        \"ddns-override-no-update\": false,\n"
+"                        \"ddns-qualifying-suffix\": \"\",\n"
+"                        \"ddns-replace-client-name\": \"never\",\n"
+"                        \"ddns-send-updates\": true,\n"
 "                        \"id\": 200,\n"
 "                        \"match-client-id\": true,\n"
 "                        \"next-server\": \"0.0.0.0\",\n"
@@ -9545,6 +10084,12 @@ const char* UNPARSED_CONFIGS[] = {
 "                \"4o6-subnet\": \"\",\n"
 "                \"authoritative\": false,\n"
 "                \"calculate-tee-times\": false,\n"
+"                \"ddns-generated-prefix\": \"myhost\",\n"
+"                \"ddns-override-client-update\": false,\n"
+"                \"ddns-override-no-update\": false,\n"
+"                \"ddns-qualifying-suffix\": \"\",\n"
+"                \"ddns-replace-client-name\": \"never\",\n"
+"                \"ddns-send-updates\": true,\n"
 "                \"id\": 300,\n"
 "                \"match-client-id\": true,\n"
 "                \"next-server\": \"0.0.0.0\",\n"