diff options
author | Thomas Markwalder <tmark@isc.org> | 2023-03-06 16:25:24 +0100 |
---|---|---|
committer | Thomas Markwalder <tmark@isc.org> | 2023-03-23 12:17:48 +0100 |
commit | ef3281460d623c0275e2d44a20d4757b21e403a8 (patch) | |
tree | a74e38dfe0aeec54fee54a15678e63a0f9199de1 | |
parent | [#2719] kea-dhcp4 offer-lft is now functional (diff) | |
download | kea-ef3281460d623c0275e2d44a20d4757b21e403a8.tar.xz kea-ef3281460d623c0275e2d44a20d4757b21e403a8.zip |
[#2719] Renamed parameter and added it to classes
Renamed offer-lft to offer-lifetime to match other
lifetime parameters.
29 files changed, 1097 insertions, 924 deletions
diff --git a/doc/examples/kea4/all-keys.json b/doc/examples/kea4/all-keys.json index ec19ee74fc..075b54d301 100644 --- a/doc/examples/kea4/all-keys.json +++ b/doc/examples/kea4/all-keys.json @@ -783,7 +783,7 @@ // If greater than zero, it is the lifetime of leases temporarily allocated // on DISCOVER. When zero (the default) leases are not allocated on DISCOVER. - "offer-lft" : 60, + "offer-lifetime" : 60, // List of shared network specific DHCP options. "option-data": [], @@ -922,7 +922,7 @@ // If greater than zero, it is the lifetime of leases temporarily allocated // on DISCOVER. When zero (the default) leases are not allocated on DISCOVER. - "offer-lft" : 60, + "offer-lifetime" : 60, // Turn on storage of extended information (e.g. relay agent // information) with each lease for this subnet. @@ -1230,7 +1230,7 @@ // If greater than zero, it is the lifetime of leases temporarily allocated // on DISCOVER. When zero (the default) leases are not allocated on DISCOVER. - "offer-lft" : 60, + "offer-lifetime" : 60, // Look at advanced example for the use of user-contexts. "user-context": { } diff --git a/src/bin/dhcp4/dhcp4_lexer.cc b/src/bin/dhcp4/dhcp4_lexer.cc index 19a8325e13..47a225a4eb 100644 --- a/src/bin/dhcp4/dhcp4_lexer.cc +++ b/src/bin/dhcp4/dhcp4_lexer.cc @@ -700,7 +700,7 @@ struct yy_trans_info flex_int32_t yy_verify; flex_int32_t yy_nxt; }; -static const flex_int16_t yy_accept[2199] = +static const flex_int16_t yy_accept[2204] = { 0, 217, 217, 0, 0, 0, 0, 0, 0, 0, 0, 225, 223, 10, 11, 223, 1, 217, 214, 217, 217, @@ -835,7 +835,7 @@ static const flex_int16_t yy_accept[2199] = 0, 0, 0, 0, 0, 93, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 204, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 168, 0, 0, 0, 166, 0, 0, 0, @@ -849,101 +849,102 @@ static const flex_int16_t yy_accept[2199] = 0, 0, 0, 0, 0, 128, 0, 23, 0, 139, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 172, 0, 87, 0, 0, 0, - 82, 0, 0, 0, 0, 0, 0, 142, 0, 38, - 0, 161, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 66, 0, 0, - 0, 0, 0, 0, 0, 107, 108, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 86, - 0, 0, 0, 0, 0, 59, 0, 0, 0, 0, - + 0, 82, 0, 0, 0, 0, 0, 0, 142, 0, + 38, 0, 161, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 66, 0, + 0, 0, 0, 0, 0, 0, 107, 108, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 136, + 86, 0, 0, 0, 0, 0, 59, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 194, 0, 83, - 98, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, - 169, 0, 0, 167, 0, 0, 158, 157, 0, 0, - 0, 0, 0, 0, 0, 0, 22, 0, 0, 0, - 0, 0, 182, 0, 0, 0, 0, 0, 122, 0, - + 136, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 151, 0, 0, 0, - 160, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 140, 0, 15, 0, 0, 44, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 171, - 0, 0, 0, 0, 0, 0, 0, 0, 46, 64, - 0, 0, 135, 0, 0, 0, 126, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 194, 0, + 0, 83, 98, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 63, 0, 0, 0, 0, + 0, 0, 169, 0, 0, 167, 0, 0, 158, 157, + 0, 0, 0, 0, 0, 0, 0, 0, 22, 0, + 0, 0, 0, 0, 182, 0, 0, 0, 0, 0, + + 122, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 151, 0, + 0, 0, 160, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 140, 0, 15, 0, + 0, 44, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 171, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 46, 64, 0, 0, 135, 0, 0, 0, 126, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 56, 0, 90, 0, 0, 188, 0, 0, 193, - 0, 110, 0, 0, 0, 200, 0, 0, 0, 0, + 0, 0, 0, 0, 56, 0, 90, 0, 0, 188, + 0, 0, 193, 0, 110, 0, 0, 0, 200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 124, 0, 0, - 0, 47, 0, 0, 196, 0, 0, 120, 31, 0, - 0, 0, 156, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 191, 0, 164, 0, 0, - - 0, 0, 0, 0, 0, 0, 0, 0, 29, 0, - 0, 0, 0, 28, 0, 0, 170, 0, 0, 0, - 55, 0, 0, 0, 0, 0, 112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 14, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 124, 0, 0, 0, 47, 0, 0, 196, 0, + 0, 120, 31, 0, 0, 0, 156, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, + + 0, 164, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 29, 0, 0, 0, 0, 28, 0, 0, + 170, 0, 0, 0, 55, 0, 0, 0, 204, 0, + 0, 112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 60, 0, 0, 109, 0, 0, 0, - 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 60, 0, + 0, 109, 0, 0, 0, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 141, 0, 0, 0, 30, 0, 0, 0, 0, 192, - 0, 0, 0, 0, 0, 152, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 141, 0, 0, 0, 30, + 0, 0, 0, 0, 192, 0, 0, 0, 0, 0, + + 152, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 21, 0, 0, + 195, 0, 81, 0, 51, 0, 0, 0, 0, 189, + 187, 0, 32, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, + 0, 176, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 149, 0, 0, 0, 125, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 95, 0, 0, 0, + 0, 0, 52, 0, 0, 0, 0, 48, 154, 0, + 0, 0, 0, 0, 0, 0, 0, 71, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 21, 0, 0, 195, 0, 81, 0, 51, - 0, 0, 0, 0, 189, 187, 0, 32, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, - 0, 0, 0, 0, 0, 0, 176, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 149, 0, 0, 0, - 125, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 95, 0, 0, 0, 0, 0, 52, 0, 0, - 0, 0, 48, 154, 0, 0, 0, 0, 0, 0, - 0, 0, 71, 0, 0, 0, 0, 0, 0, 0, - - 0, 0, 0, 0, 0, 0, 177, 0, 13, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 155, 0, - 165, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 177, 0, 13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 155, 0, 165, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 159, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 148, 0, - 62, 61, 20, 0, 173, 0, 0, 0, 0, 0, + 159, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 148, 0, 62, 61, 20, 0, 173, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 106, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 147, 0, 0, - - 0, 0, 0, 54, 0, 67, 0, 49, 175, 0, - 101, 0, 0, 0, 0, 0, 0, 0, 0, 80, - 0, 0, 0, 0, 0, 0, 0, 77, 0, 0, - 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 53, 0, 0, - 0, 0, 0, 0, 75, 0, 0, 0, 0, 0, - 0, 0, 0, 203, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 106, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 33, 0, 0, 76, 0, 0, 0, 0, - 153, 0, 0, 0, 0, 0, 198, 201, 174, 0, - - 121, 102, 0, 0, 0, 0, 0, 0, 0, 0, - 72, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 145, 0, 0, 0, 0, 0, 0, 150, 0, 74, - 0, 65, 0, 0, 0, 0, 0, 0, 0, 103, - 0, 0, 0, 0, 0, 0, 0, 144, 0, 0, - 178, 202, 199, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 73, 0, - 0, 0, 0, 27, 25, 0, 0, 0, 78, 0, - 0, 105, 0, 70, 0, 0, 0, 0, 0, 0, - 0, 0, 69, 0, 146, 26, 197, 0 + 0, 0, 147, 0, 0, 0, 0, 0, 54, 0, + 67, 0, 49, 175, 0, 101, 0, 0, 0, 0, + 0, 0, 0, 0, 80, 0, 0, 0, 0, 0, + 0, 0, 77, 0, 0, 0, 0, 0, 0, 16, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 53, 0, 0, 0, 0, 0, 0, 75, + 0, 0, 0, 0, 0, 0, 0, 0, 203, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 33, 0, 0, + 76, 0, 0, 0, 0, 153, 0, 0, 0, 0, + + 0, 198, 201, 174, 0, 121, 102, 0, 0, 0, + 0, 0, 0, 0, 0, 72, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 145, 0, 0, 0, 0, + 0, 0, 150, 0, 74, 0, 65, 0, 0, 0, + 0, 0, 0, 0, 103, 0, 0, 0, 0, 0, + 0, 0, 144, 0, 0, 178, 202, 199, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 73, 0, 0, 0, 0, 27, 25, + 0, 0, 0, 78, 0, 0, 105, 0, 70, 0, + 0, 0, 0, 0, 0, 0, 0, 69, 0, 146, + + 26, 197, 0 } ; static const YY_CHAR yy_ec[256] = @@ -990,282 +991,283 @@ static const YY_CHAR yy_meta[74] = 1, 1, 1 } ; -static const flex_int16_t yy_base[2207] = +static const flex_int16_t yy_base[2212] = { 0, 0, 72, 21, 31, 43, 51, 54, 60, 91, 99, - 2589, 2590, 34, 2585, 145, 0, 207, 2590, 214, 221, - 13, 228, 2590, 2565, 118, 25, 2, 6, 2590, 2590, - 73, 11, 17, 2590, 2590, 2590, 104, 2573, 2526, 0, - 2563, 108, 2580, 24, 262, 2590, 2522, 67, 2528, 84, - 75, 88, 224, 91, 89, 290, 220, 2520, 206, 285, - 236, 204, 197, 60, 291, 2529, 247, 308, 315, 214, - 286, 2512, 212, 320, 344, 318, 2531, 335, 0, 385, - 401, 415, 422, 427, 2590, 0, 2590, 441, 446, 236, - 314, 238, 326, 353, 309, 2590, 2528, 2569, 2590, 263, - - 2590, 440, 2556, 308, 2525, 364, 10, 329, 359, 384, - 391, 241, 2566, 0, 501, 408, 2508, 2505, 2509, 418, - 2505, 80, 2513, 422, 2499, 2500, 2505, 78, 2515, 2498, - 2507, 2497, 2506, 341, 343, 340, 2499, 2497, 410, 2545, - 2549, 2495, 2488, 2541, 2481, 174, 2502, 2502, 2496, 340, - 2489, 2487, 2488, 2480, 2485, 2479, 429, 2490, 412, 2475, - 2474, 2488, 425, 2474, 422, 447, 2468, 497, 436, 471, - 2489, 2486, 2487, 432, 2485, 2520, 2519, 450, 446, 2466, - 471, 2467, 478, 2459, 2476, 2468, 2470, 0, 477, 483, - 473, 496, 489, 515, 2466, 2590, 2511, 530, 2460, 499, - - 523, 530, 2514, 535, 2513, 532, 2512, 2590, 2590, 578, - 441, 543, 2471, 2463, 2450, 2461, 2465, 2466, 2446, 2457, - 2461, 2458, 2457, 475, 516, 2495, 2459, 2440, 2437, 2445, - 2440, 2454, 2450, 2441, 2437, 2449, 2449, 2437, 2439, 2442, - 2422, 2426, 2439, 2441, 2438, 2430, 2420, 2438, 2590, 2423, - 2432, 523, 2470, 2416, 2425, 2467, 2414, 2424, 2427, 510, - 2423, 2462, 2407, 2409, 2420, 2458, 557, 2403, 562, 2416, - 2396, 2411, 561, 2401, 2407, 527, 2398, 2396, 2396, 2402, - 2393, 2392, 2399, 2389, 2448, 2404, 2403, 2397, 530, 2404, - 2399, 2391, 2381, 2396, 2395, 2390, 2394, 2375, 2391, 2377, - - 2383, 2390, 2372, 536, 2377, 2374, 2373, 603, 2372, 2367, - 2381, 571, 2380, 2423, 2382, 560, 2373, 2361, 561, 2590, - 2590, 583, 2590, 2590, 2359, 566, 461, 2407, 586, 2417, - 580, 2590, 2416, 2590, 2410, 630, 2590, 2372, 590, 2349, - 2358, 2406, 2366, 2349, 2366, 2402, 2362, 2345, 2351, 2403, - 2358, 2361, 2352, 2355, 2341, 2352, 2396, 2390, 2348, 2345, - 621, 2351, 2391, 2326, 2384, 2337, 2332, 2326, 2328, 2331, - 2378, 2335, 2324, 2340, 2374, 2320, 628, 2334, 2319, 2318, - 2331, 2329, 2327, 2327, 2326, 2321, 2328, 2323, 2319, 599, - 2317, 2320, 2315, 2301, 2313, 2309, 2359, 589, 602, 2353, - - 2590, 2300, 2316, 2350, 2300, 2299, 2298, 2291, 2293, 2305, - 2296, 2303, 2284, 2301, 2296, 610, 2343, 2296, 2293, 2296, - 2590, 2295, 559, 2285, 2297, 600, 2272, 2273, 2294, 2285, - 2275, 2326, 2271, 2285, 614, 2271, 2283, 2282, 2281, 2276, - 2318, 2278, 2277, 2276, 2275, 2258, 2266, 2316, 2275, 2255, - 2313, 2590, 2255, 2254, 661, 2267, 2265, 2590, 2590, 2265, - 2254, 2246, 605, 2305, 2304, 2590, 2303, 2590, 639, 687, - 2262, 606, 2301, 2243, 2254, 2293, 2246, 2248, 2250, 2237, - 2245, 2233, 2590, 2238, 2231, 2243, 2246, 2233, 2232, 2590, - 631, 2234, 2231, 626, 2229, 2231, 2590, 2276, 2238, 2235, - - 2220, 2234, 2232, 2232, 2226, 678, 2233, 2221, 2214, 2265, - 2590, 2212, 2228, 2262, 2223, 2221, 2219, 2220, 2204, 2213, - 2255, 2206, 2205, 2200, 2199, 2250, 2194, 636, 2213, 2187, - 2194, 2199, 2209, 2243, 2247, 2590, 2192, 2188, 710, 2186, - 2238, 2194, 2193, 2187, 2194, 2178, 2178, 2188, 2176, 2190, - 2190, 2178, 2174, 2172, 2590, 2229, 2590, 2171, 2182, 2221, - 2166, 2165, 2170, 2179, 2173, 2167, 2176, 2218, 2212, 2174, - 2158, 2153, 2173, 2148, 2154, 589, 2168, 2161, 2165, 2148, - 2206, 2147, 2147, 2198, 2143, 2144, 2143, 2141, 2158, 2590, - 2154, 2191, 2590, 2142, 2140, 2590, 2151, 2187, 2186, 2146, - - 2130, 2147, 2187, 2590, 2590, 2590, 649, 664, 2127, 711, - 2590, 2137, 2136, 660, 2143, 2123, 2133, 2175, 2120, 2173, - 2118, 2128, 2170, 2115, 2122, 2115, 2127, 2109, 2109, 2124, - 2123, 659, 2122, 2121, 2121, 2103, 2108, 2149, 2116, 2113, - 2107, 2152, 2096, 2111, 2111, 2109, 2109, 2590, 2094, 2091, - 2149, 2104, 2096, 2102, 2093, 2101, 2086, 2137, 2101, 2083, - 2095, 2087, 530, 2078, 2077, 2071, 2076, 2091, 2088, 2089, - 2068, 2078, 2084, 2127, 2082, 2074, 2065, 2590, 2066, 2068, - 2063, 2076, 2068, 2067, 2072, 2111, 2110, 2061, 16, 2070, - 2107, 2052, 2105, 2052, 2055, 2048, 2590, 2062, 2041, 2045, - - 2059, 2054, 2050, 2095, 2047, 2054, 2092, 2590, 2037, 2051, - 2050, 2053, 2034, 2086, 2085, 2032, 2083, 2043, 2027, 2076, - 20, 2590, 188, 224, 239, 702, 324, 363, 377, 457, - 606, 572, 599, 585, 625, 649, 642, 2590, 674, 667, - 2590, 691, 702, 670, 667, 667, 682, 694, 688, 677, + 2594, 2595, 34, 2590, 145, 0, 207, 2595, 214, 221, + 13, 228, 2595, 2570, 118, 25, 2, 6, 2595, 2595, + 73, 11, 17, 2595, 2595, 2595, 104, 2578, 2531, 0, + 2568, 108, 2585, 24, 262, 2595, 2527, 67, 2533, 84, + 75, 88, 224, 91, 89, 290, 220, 2525, 206, 285, + 236, 204, 197, 60, 291, 2534, 247, 308, 315, 214, + 286, 2517, 212, 320, 344, 318, 2536, 335, 0, 385, + 401, 415, 422, 427, 2595, 0, 2595, 441, 446, 236, + 314, 238, 326, 353, 309, 2595, 2533, 2574, 2595, 263, + + 2595, 440, 2561, 308, 2530, 364, 10, 329, 359, 384, + 391, 241, 2571, 0, 501, 408, 2513, 2510, 2514, 418, + 2510, 80, 2518, 422, 2504, 2505, 2510, 78, 2520, 2503, + 2512, 2502, 2511, 341, 343, 340, 2504, 2502, 410, 2550, + 2554, 2500, 2493, 2546, 2486, 174, 2507, 2507, 2501, 340, + 2494, 2492, 2493, 2485, 2490, 2484, 429, 2495, 412, 2480, + 2479, 2493, 425, 2479, 422, 447, 2473, 497, 436, 471, + 2494, 2491, 2492, 432, 2490, 2525, 2524, 450, 446, 2471, + 471, 2472, 478, 2464, 2481, 2473, 2475, 0, 477, 483, + 473, 496, 489, 515, 2471, 2595, 2516, 530, 2465, 499, + + 523, 530, 2519, 535, 2518, 532, 2517, 2595, 2595, 578, + 441, 543, 2476, 2468, 2455, 2466, 2470, 2471, 2451, 2462, + 2466, 2463, 2462, 475, 516, 2500, 2464, 2445, 2442, 2450, + 2445, 2459, 2455, 2446, 2442, 2454, 2454, 2442, 2444, 2447, + 2427, 2431, 2444, 2446, 2443, 2435, 2425, 2443, 2595, 2428, + 2437, 523, 2475, 2421, 2430, 2472, 2419, 2429, 2432, 510, + 2428, 2467, 2412, 2414, 2425, 2463, 557, 2408, 562, 2421, + 2401, 2416, 561, 2406, 2412, 527, 2403, 2401, 2401, 2407, + 2398, 2397, 2404, 2394, 2453, 2409, 2408, 2402, 530, 2409, + 2404, 2396, 2386, 2401, 2400, 2395, 2399, 2380, 2396, 2382, + + 2388, 2395, 2377, 536, 2382, 2379, 2378, 603, 2377, 2372, + 2386, 571, 2385, 2428, 2387, 560, 2378, 2366, 561, 2595, + 2595, 583, 2595, 2595, 2364, 566, 461, 2412, 586, 2422, + 580, 2595, 2421, 2595, 2415, 630, 2595, 2377, 590, 2354, + 2363, 2411, 2371, 2354, 2371, 2407, 2367, 2350, 2356, 2408, + 2363, 2366, 2357, 2360, 2346, 2357, 2401, 2395, 2353, 2350, + 621, 2356, 2396, 2331, 2389, 2342, 2337, 2331, 2333, 2336, + 2383, 2340, 2329, 2345, 2379, 2325, 628, 2339, 2324, 2323, + 2336, 2334, 2332, 2332, 2331, 2326, 2333, 2328, 2324, 599, + 2322, 2325, 2320, 2306, 2318, 2314, 2364, 589, 602, 2358, + + 2595, 2305, 2321, 2355, 2305, 2304, 2303, 2296, 2298, 2310, + 2301, 2308, 2289, 2306, 2301, 610, 2348, 2301, 2298, 2301, + 2595, 2300, 559, 2290, 2302, 600, 2277, 2278, 2299, 2290, + 2280, 2331, 2276, 2290, 614, 2276, 2288, 2287, 2286, 2281, + 2323, 2283, 2282, 2281, 2280, 2263, 2271, 2321, 2280, 2260, + 2318, 2595, 2260, 2259, 661, 2272, 2270, 2595, 2595, 2270, + 2259, 2251, 605, 2310, 2309, 2595, 2308, 2595, 639, 687, + 2267, 606, 2306, 2248, 2259, 2298, 2251, 2253, 2255, 2242, + 2250, 2238, 2595, 2243, 2236, 2248, 2251, 2238, 2237, 2595, + 631, 2239, 2236, 626, 2234, 2236, 2595, 2281, 2243, 2240, + + 2225, 2239, 2237, 2237, 2231, 678, 2238, 2226, 2219, 2270, + 2595, 2217, 2233, 2267, 2228, 2226, 2224, 2225, 2209, 2218, + 2260, 2211, 2210, 2205, 2204, 2255, 2199, 636, 2218, 2192, + 2199, 2204, 2214, 2248, 2252, 2595, 2197, 2193, 710, 2191, + 2243, 2199, 2198, 2192, 2199, 2183, 2183, 2193, 2181, 2195, + 2195, 2183, 2179, 2177, 2595, 2234, 2595, 2176, 2187, 2226, + 2171, 2170, 2175, 2184, 2178, 2172, 2181, 2223, 2217, 2179, + 2163, 2158, 2178, 2153, 2159, 589, 2173, 2166, 2170, 2153, + 2211, 2152, 2152, 2203, 2148, 2149, 2148, 2146, 2163, 2595, + 2159, 2196, 2595, 2147, 2145, 2595, 2156, 2192, 2191, 2151, + + 2135, 2152, 2192, 2595, 2595, 2595, 649, 664, 2132, 711, + 2595, 2142, 2141, 660, 2148, 2128, 2138, 2180, 2125, 2178, + 2123, 2133, 2175, 2120, 2127, 2120, 2132, 2114, 2114, 2129, + 2128, 659, 2127, 2126, 2126, 2108, 2113, 2154, 2121, 2118, + 2112, 2157, 2101, 2116, 2116, 2114, 2114, 2595, 2099, 2096, + 2154, 2109, 2101, 2107, 2098, 2106, 2091, 2142, 2106, 2088, + 2100, 2092, 530, 2083, 2082, 2076, 2081, 2096, 2093, 2094, + 2073, 2083, 2089, 2132, 2087, 2079, 2070, 2595, 2071, 2073, + 2068, 2081, 2073, 2072, 2077, 2116, 2115, 2066, 16, 2075, + 2112, 2057, 2110, 2057, 2060, 2053, 2595, 2067, 2046, 2050, + + 2064, 2059, 2055, 2100, 2052, 2059, 2097, 2595, 2042, 2056, + 2055, 2058, 2039, 2091, 2090, 2037, 2088, 2048, 2032, 2081, + 20, 2595, 188, 224, 239, 702, 324, 363, 377, 457, + 606, 572, 599, 585, 625, 649, 642, 2595, 674, 667, + 2595, 691, 702, 670, 667, 667, 682, 694, 688, 677, 673, 687, 688, 735, 699, 742, 702, 706, 739, 740, 700, 700, 710, 715, 701, 704, 715, 715, 699, 756, 709, 719, 722, 760, 723, 716, 720, 717, 719, 766, - 767, 731, 775, 732, 734, 2590, 737, 732, 723, 738, + 767, 731, 775, 732, 734, 2595, 737, 732, 723, 738, 743, 740, 728, 744, 743, 731, 745, 743, 751, 787, - 749, 794, 795, 745, 737, 747, 794, 752, 802, 2590, - 803, 756, 758, 754, 748, 764, 752, 765, 811, 807, - 770, 759, 772, 2590, 762, 773, 762, 775, 765, 778, + 749, 794, 795, 745, 737, 747, 794, 752, 802, 2595, + 803, 756, 758, 754, 748, 764, 752, 762, 811, 807, + 770, 759, 772, 2595, 762, 773, 762, 775, 765, 778, 822, 823, 766, 777, 762, 785, 776, 765, 771, 826, 790, 774, 786, 830, 831, 778, 833, 797, 792, 797, - 795, 839, 781, 793, 796, 800, 792, 789, 2590, 853, + 795, 839, 781, 793, 796, 800, 792, 789, 2595, 853, 812, 813, 801, 815, 805, 808, 819, 804, 811, 817, 818, 810, 824, 864, 840, 814, 828, 833, 830, 812, - 819, 833, 878, 835, 832, 833, 831, 840, 2590, 836, + 819, 833, 878, 835, 832, 833, 831, 840, 2595, 836, 831, 846, 843, 829, 831, 850, 847, 835, 842, 843, 852, 856, 892, 855, 845, 843, 842, 853, 849, 905, - 852, 863, 848, 849, 855, 871, 867, 862, 909, 2590, + 852, 863, 848, 849, 855, 871, 867, 862, 909, 2595, 873, 873, 866, 877, 875, 920, 862, 864, 883, 880, - 868, 866, 928, 885, 871, 877, 875, 2590, 2590, 885, - 890, 895, 883, 893, 895, 2590, 2590, 896, 883, 901, - 888, 890, 883, 886, 2590, 889, 907, 894, 944, 895, - 947, 893, 897, 915, 956, 2590, 2590, 901, 905, 904, + 868, 866, 928, 885, 871, 877, 875, 2595, 2595, 885, + 890, 895, 883, 893, 895, 2595, 2595, 896, 883, 901, + 888, 890, 883, 900, 2595, 889, 907, 894, 944, 895, + 947, 893, 897, 915, 956, 2595, 2595, 901, 905, 904, 901, 917, 962, 915, 905, 906, 902, 915, 926, 927, 922, 923, 925, 918, 920, 916, 922, 922, 924, 939, - 922, 981, 938, 943, 920, 943, 929, 928, 2590, 935, + 922, 981, 938, 943, 920, 943, 929, 928, 2595, 935, 936, 985, 986, 938, 951, 989, 947, 937, 952, 946, 954, 941, 973, 981, 1003, 951, 946, 1001, 1002, 964, - 1004, 2590, 1010, 953, 969, 973, 1014, 964, 963, 958, + 1004, 2595, 1010, 953, 969, 973, 1014, 964, 963, 958, 959, 971, 966, 962, 965, 966, 976, 986, 1022, 970, - 988, 980, 975, 1033, 990, 991, 982, 2590, 996, 985, + 988, 980, 975, 1033, 990, 991, 982, 2595, 996, 985, 988, 996, 998, 983, 995, 1000, 997, 995, 1042, 1008, - 992, 993, 2590, 1009, 1012, 995, 1006, 1055, 998, 1017, - 2590, 1016, 1019, 1005, 1000, 1018, 1058, 1016, 1012, 1009, - 1062, 1063, 1025, 1011, 1029, 1029, 1029, 1074, 1031, 1017, - 1032, 1024, 1031, 1021, 1039, 1038, 1025, 1042, 2590, 1034, + 992, 993, 2595, 1009, 1012, 995, 1006, 1055, 998, 1017, + 2595, 1016, 1019, 1005, 1000, 1018, 1058, 1016, 1012, 1009, + 1062, 1063, 1025, 1011, 1029, 1029, 1029, 1030, 1031, 1017, + 1032, 1024, 1031, 1021, 1039, 1038, 1025, 1042, 2595, 1034, - 1040, 1043, 1088, 1035, 2590, 1038, 1043, 1088, 1039, 1051, + 1040, 1043, 1088, 1035, 2595, 1038, 1043, 1088, 1039, 1051, 1045, 1046, 1044, 1046, 1056, 1101, 1045, 1046, 1046, 1105, - 1049, 1061, 1054, 2590, 1050, 1058, 1056, 1107, 1050, 1071, + 1049, 1061, 1054, 2595, 1050, 1058, 1056, 1107, 1050, 1071, 1057, 1058, 1059, 1060, 1066, 1074, 1065, 1070, 1080, 1081, - 1082, 1087, 1128, 1100, 1105, 2590, 1087, 1084, 1080, 1094, - 1077, 1077, 2590, 1078, 1138, 1081, 2590, 1092, 1082, 1102, + 1082, 1087, 1128, 1100, 1105, 2595, 1087, 1084, 1080, 1094, + 1077, 1077, 2595, 1078, 1138, 1081, 2595, 1092, 1082, 1102, 1101, 1092, 1103, 1146, 1107, 1100, 1104, 1108, 1091, 1108, - 1099, 1154, 1101, 2590, 1151, 1100, 1103, 1121, 1103, 1104, + 1099, 1154, 1101, 2595, 1151, 1100, 1103, 1121, 1103, 1104, 1104, 1125, 1122, 1110, 1128, 1116, 1130, 1116, 1124, 1133, - 1113, 1128, 1135, 1177, 1173, 2590, 1179, 1180, 1122, 1132, + 1113, 1128, 1135, 1177, 1173, 2595, 1179, 1180, 1122, 1132, 1142, 1126, 1146, 1134, 1130, 1137, 1146, 1134, 1141, 1142, - 1154, 1195, 1142, 1197, 1141, 2590, 1143, 1160, 1201, 1151, - 1150, 1156, 1154, 1152, 1147, 1208, 1159, 1210, 1206, 1212, - 2590, 1153, 1170, 1163, 1154, 1173, 1161, 1171, 1172, 1168, - 1181, 1181, 2590, 1166, 1162, 1168, 2590, 1169, 1229, 1188, - 1169, 1188, 1189, 1191, 1230, 1183, 1237, 1238, 1191, 1196, - 1190, 1188, 1199, 1198, 1182, 1187, 1193, 1206, 2590, 1228, - 1219, 1251, 1191, 1213, 1208, 1208, 1212, 1257, 2590, 1200, - 1200, 1203, 1220, 1215, 1219, 1214, 2590, 1206, 1223, 1203, - 1224, 1214, 1265, 1218, 2590, 1232, 1232, 1270, 1217, 1226, - - 1274, 1232, 1237, 1223, 1283, 1226, 1227, 1241, 1239, 1231, - 1237, 1233, 1251, 1252, 1253, 2590, 1243, 2590, 1253, 2590, - 1238, 1249, 1240, 1259, 1252, 1250, 1243, 1255, 1299, 1263, - 1252, 1259, 1260, 1266, 2590, 1259, 2590, 1311, 1252, 1313, - 2590, 1314, 1256, 1262, 1269, 1313, 1275, 2590, 1276, 2590, - 1263, 2590, 1263, 1266, 1280, 1285, 1268, 1327, 1284, 1285, - 1325, 1277, 1282, 1333, 1329, 1282, 1336, 2590, 1287, 1284, - 1339, 1340, 1297, 1298, 1300, 2590, 2590, 1292, 1287, 1341, - 1290, 1306, 1349, 1291, 1303, 1292, 1309, 1324, 1355, 2590, - 1312, 1305, 1314, 1305, 1316, 2590, 1361, 1298, 1309, 1324, - - 1360, 1312, 1323, 1324, 1325, 1322, 1366, 1329, 1319, 1329, - 1335, 1322, 1318, 1378, 1374, 1332, 1376, 1384, 1341, 2590, - 1327, 1343, 1334, 1337, 1346, 1347, 1344, 1334, 1337, 1337, - 1348, 1343, 1398, 1345, 1400, 1343, 1348, 1403, 1399, 1341, - 1356, 1349, 1352, 1365, 1366, 1364, 1413, 2590, 1366, 2590, - 2590, 1372, 1364, 1374, 1359, 1415, 1362, 1362, 1423, 1424, - 1368, 1378, 1427, 2590, 1375, 1376, 1378, 1431, 1372, 1375, - 2590, 1393, 1394, 2590, 1394, 1382, 2590, 2590, 1395, 1378, - 1398, 1399, 1385, 1387, 1446, 1396, 2590, 1448, 1397, 1391, - 1451, 1431, 2590, 1453, 1410, 1455, 1406, 1453, 2590, 1401, - - 1460, 1410, 1404, 1401, 1404, 1406, 1423, 1462, 1415, 1427, - 1430, 1418, 1421, 1414, 1421, 1412, 2590, 1420, 1435, 1420, - 2590, 1422, 1476, 1424, 1478, 1440, 1440, 1443, 1443, 1440, - 1484, 1446, 1438, 1439, 2590, 1440, 2590, 1450, 1442, 2590, - 1448, 1453, 1454, 1451, 1495, 1443, 1458, 1459, 1451, 2590, - 1448, 1449, 1449, 1455, 1454, 1452, 1506, 1467, 2590, 2590, - 1508, 1455, 2590, 1456, 1457, 1463, 2590, 1472, 1466, 1521, - 1468, 1461, 1473, 1468, 1478, 1489, 1482, 1488, 1478, 1533, - 1486, 2590, 1495, 2590, 1492, 1537, 2590, 1490, 1513, 2590, - 1540, 2590, 1498, 1483, 1543, 2590, 1544, 1501, 1506, 1488, - - 1548, 1544, 1508, 1505, 1501, 1494, 1549, 1507, 1508, 1498, - 1503, 1515, 1560, 1515, 1563, 1513, 1560, 1525, 1525, 1521, - 1565, 1513, 1518, 1516, 1575, 1526, 1532, 1520, 1579, 1575, - 1538, 1582, 1543, 1532, 1526, 1586, 1528, 1529, 1543, 1546, - 1546, 1592, 1534, 1551, 1547, 1545, 1552, 1536, 1594, 1595, - 1596, 1559, 1552, 1551, 1551, 1546, 1564, 2590, 1555, 1561, - 1566, 1553, 1554, 1553, 1555, 1610, 1556, 2590, 1552, 1570, - 1619, 2590, 1577, 1590, 2590, 1622, 1575, 2590, 2590, 1566, - 1577, 1626, 2590, 1572, 1577, 1575, 1625, 1583, 1588, 1577, - 1593, 1582, 1580, 1594, 1581, 2590, 1583, 2590, 1601, 1587, - - 1596, 1639, 1582, 1587, 1647, 1595, 1606, 1607, 2590, 1652, - 1648, 1606, 1650, 2590, 1601, 1657, 2590, 1600, 1615, 1603, - 2590, 1613, 1614, 1663, 1621, 1625, 2590, 1661, 1627, 1603, - 1621, 1622, 1631, 1613, 1620, 1632, 1631, 1622, 1672, 1624, - 1620, 1680, 1622, 1623, 1683, 1679, 1685, 1635, 1687, 1640, - 1630, 1646, 1639, 2590, 1692, 1693, 2590, 1642, 1695, 1637, - 2590, 1640, 1650, 1694, 1642, 1657, 1644, 1659, 1645, 1652, - 1652, 1707, 1664, 1665, 1652, 1654, 1668, 1654, 1714, 1667, - 2590, 1711, 1662, 1659, 2590, 1661, 1674, 1661, 1682, 2590, - 1679, 1724, 1677, 1674, 1675, 2590, 1728, 1687, 1670, 1672, - - 1688, 1681, 1671, 1687, 1688, 1697, 1687, 1739, 1699, 1683, - 1692, 1738, 2590, 1696, 1745, 2590, 1694, 2590, 1688, 2590, - 1695, 1749, 1750, 1747, 2590, 2590, 1709, 2590, 1749, 1711, - 1712, 1697, 1698, 1706, 1760, 1708, 1757, 1758, 1713, 2590, - 1708, 1726, 1708, 1714, 1727, 1722, 2590, 1719, 1724, 1722, - 1774, 1731, 1776, 1724, 1721, 1721, 2590, 1736, 1737, 1738, - 2590, 1739, 1729, 1741, 1786, 1739, 1788, 1730, 1738, 1739, - 1752, 2590, 1753, 1734, 1735, 1742, 1744, 2590, 1758, 1755, - 1795, 1756, 2590, 2590, 1760, 1745, 1745, 1760, 1753, 1752, - 1763, 1750, 2590, 1766, 1754, 1757, 1813, 1753, 1772, 1811, - - 1775, 1768, 1767, 1776, 1778, 1782, 2590, 1772, 2590, 1776, - 1767, 1826, 1769, 1828, 1829, 1830, 1788, 1832, 2590, 1774, - 2590, 1829, 1791, 1792, 1779, 1787, 1798, 1785, 1796, 1782, - 1780, 1788, 1787, 1792, 1784, 1849, 1802, 1803, 1793, 1810, - 1809, 1850, 1794, 1813, 1814, 2590, 1819, 1812, 1851, 1818, - 1805, 1820, 1865, 1822, 1825, 1824, 1813, 1822, 2590, 1871, - 2590, 2590, 2590, 1832, 2590, 1873, 1815, 1875, 1876, 1819, - 1878, 1826, 1875, 1876, 1838, 1878, 1824, 1828, 1846, 1887, - 1846, 2590, 1837, 1827, 1886, 1852, 1845, 1841, 1895, 1838, - 1840, 1839, 1846, 1889, 1843, 1902, 1846, 2590, 1851, 1861, - - 1864, 1847, 1855, 2590, 1850, 2590, 1862, 2590, 2590, 1867, - 2590, 1868, 1868, 1859, 1915, 1859, 1869, 1854, 1867, 2590, - 1869, 1877, 1922, 1863, 1865, 1862, 1886, 2590, 1873, 1880, - 1881, 1884, 1931, 1874, 2590, 1928, 1875, 1883, 1877, 1893, - 1892, 1895, 1888, 1883, 1883, 1895, 1890, 2590, 1901, 1889, - 1942, 1893, 1905, 1950, 2590, 1896, 1908, 1953, 1902, 1904, - 1902, 1903, 1958, 2590, 1911, 1898, 1913, 1918, 1915, 1964, - 1965, 1966, 1923, 1968, 1969, 1913, 1917, 1913, 1929, 1912, - 1924, 1918, 2590, 1934, 1978, 2590, 1935, 1920, 1938, 1929, - 2590, 1930, 1944, 1940, 1933, 1933, 2590, 2590, 2590, 1988, - - 2590, 2590, 1931, 1939, 1934, 1987, 1953, 1950, 1995, 1956, - 2590, 1997, 1939, 1999, 1942, 1955, 1954, 1955, 1945, 1952, - 2590, 1947, 2007, 1960, 1969, 1962, 2006, 2590, 1953, 2590, - 1965, 2590, 2009, 2015, 1957, 1973, 2018, 2019, 2020, 2590, - 1977, 1971, 1964, 1984, 1981, 1973, 1977, 2590, 2024, 1973, - 2590, 2590, 2590, 1973, 1981, 2028, 1988, 1981, 2036, 1984, - 1984, 1980, 1982, 2041, 2042, 1984, 2000, 1985, 2590, 2046, - 1993, 2000, 2049, 2590, 2590, 2002, 2051, 1999, 2590, 2003, - 2002, 2590, 2003, 2590, 1997, 1997, 2014, 2015, 2060, 2006, - 2062, 2063, 2590, 2064, 2590, 2590, 2590, 2590, 2070, 2073, - - 2076, 2077, 2079, 2082, 2085, 2088 + 1154, 1195, 1142, 1197, 1141, 1140, 1144, 1161, 1202, 1152, + 1151, 1157, 1155, 1153, 1148, 1209, 1160, 1211, 1207, 1213, + 2595, 1154, 1171, 1164, 1155, 1174, 1162, 1172, 1173, 1169, + 1182, 1183, 2595, 1167, 1163, 1169, 2595, 1170, 1230, 1189, + 1170, 1189, 1190, 1192, 1231, 1184, 1238, 1239, 1192, 1197, + 1191, 1189, 1200, 1199, 1183, 1188, 1194, 1207, 2595, 1229, + 1220, 1252, 1192, 1214, 1209, 1209, 1213, 1258, 2595, 1201, + 1201, 1204, 1221, 1216, 1220, 1215, 2595, 1207, 1224, 1204, + 1225, 1215, 1266, 1219, 2595, 1233, 1233, 1271, 1218, 1227, + + 1275, 1233, 1238, 1224, 1284, 1227, 1228, 1242, 1240, 1232, + 1238, 1234, 1252, 1253, 1254, 2595, 1244, 2595, 1254, 2595, + 1239, 1250, 1241, 1260, 1253, 1251, 1244, 1256, 1300, 1264, + 1253, 1260, 1261, 1267, 2595, 1260, 2595, 1312, 1265, 1254, + 1315, 2595, 1316, 1258, 1264, 1271, 1315, 1277, 2595, 1278, + 2595, 1265, 2595, 1265, 1268, 1282, 1287, 1270, 1329, 1286, + 1287, 1327, 1279, 1284, 1335, 1331, 1284, 1338, 2595, 1289, + 1286, 1341, 1342, 1299, 1300, 1302, 2595, 2595, 1294, 1289, + 1343, 1292, 1308, 1351, 1293, 1305, 1294, 1311, 1326, 1357, + 2595, 1314, 1307, 1316, 1307, 1318, 2595, 1363, 1300, 1311, + + 1326, 1362, 1314, 1325, 1326, 1327, 1324, 1368, 1331, 1321, + 1331, 1337, 1324, 1320, 1380, 1376, 1334, 1378, 1386, 1343, + 2595, 1329, 1345, 1336, 1339, 1348, 1349, 1346, 1336, 1339, + 1339, 1350, 1345, 1400, 1347, 1402, 1345, 1350, 1405, 1401, + 1343, 1358, 1351, 1354, 1367, 1368, 1366, 1415, 2595, 1364, + 1370, 2595, 2595, 1375, 1367, 1377, 1362, 1418, 1365, 1365, + 1426, 1427, 1371, 1381, 1430, 2595, 1378, 1379, 1381, 1434, + 1375, 1378, 2595, 1396, 1397, 2595, 1397, 1385, 2595, 2595, + 1398, 1381, 1401, 1402, 1388, 1390, 1449, 1399, 2595, 1451, + 1400, 1394, 1454, 1434, 2595, 1456, 1413, 1458, 1409, 1456, + + 2595, 1404, 1463, 1413, 1407, 1404, 1407, 1409, 1426, 1465, + 1418, 1430, 1433, 1421, 1424, 1417, 1424, 1415, 2595, 1423, + 1438, 1423, 2595, 1425, 1479, 1427, 1481, 1443, 1443, 1446, + 1446, 1443, 1487, 1449, 1441, 1442, 2595, 1443, 2595, 1453, + 1445, 2595, 1451, 1456, 1457, 1454, 1498, 1446, 1461, 1462, + 1454, 2595, 1464, 1452, 1453, 1453, 1459, 1458, 1456, 1510, + 1471, 2595, 2595, 1512, 1459, 2595, 1460, 1461, 1467, 2595, + 1476, 1470, 1525, 1472, 1465, 1477, 1472, 1482, 1493, 1486, + 1492, 1482, 1537, 1490, 2595, 1499, 2595, 1496, 1541, 2595, + 1494, 1517, 2595, 1544, 2595, 1502, 1487, 1547, 2595, 1548, + + 1505, 1510, 1492, 1552, 1548, 1512, 1509, 1505, 1498, 1553, + 1511, 1512, 1502, 1507, 1519, 1564, 1519, 1567, 1517, 1564, + 1529, 1529, 1525, 1569, 1517, 1522, 1520, 1579, 1530, 1536, + 1524, 1583, 1579, 1542, 1586, 1547, 1536, 1530, 1590, 1532, + 1533, 1547, 1594, 1551, 1551, 1597, 1539, 1556, 1552, 1550, + 1557, 1541, 1599, 1600, 1601, 1564, 1557, 1556, 1556, 1551, + 1569, 2595, 1560, 1566, 1571, 1558, 1559, 1558, 1560, 1615, + 1561, 2595, 1557, 1575, 1624, 2595, 1582, 1595, 2595, 1627, + 1580, 2595, 2595, 1571, 1582, 1631, 2595, 1577, 1582, 1580, + 1630, 1588, 1594, 1582, 1598, 1587, 1585, 1599, 1586, 2595, + + 1588, 2595, 1606, 1592, 1601, 1644, 1587, 1592, 1652, 1600, + 1611, 1612, 2595, 1657, 1653, 1611, 1655, 2595, 1606, 1662, + 2595, 1605, 1620, 1608, 2595, 1618, 1619, 1668, 2595, 1626, + 1630, 2595, 1666, 1632, 1608, 1626, 1627, 1636, 1618, 1625, + 1637, 1636, 1627, 1677, 1629, 1625, 1685, 1627, 1628, 1688, + 1684, 1690, 1640, 1692, 1645, 1635, 1651, 1644, 2595, 1697, + 1698, 2595, 1647, 1700, 1642, 2595, 1645, 1655, 1699, 1647, + 1662, 1649, 1664, 1650, 1657, 1657, 1712, 1669, 1670, 1657, + 1659, 1673, 1659, 1719, 1672, 2595, 1716, 1667, 1664, 2595, + 1666, 1679, 1666, 1687, 2595, 1684, 1729, 1682, 1679, 1680, + + 2595, 1733, 1692, 1675, 1677, 1693, 1686, 1676, 1692, 1693, + 1702, 1692, 1744, 1704, 1688, 1697, 1743, 2595, 1701, 1750, + 2595, 1699, 2595, 1693, 2595, 1700, 1754, 1755, 1752, 2595, + 2595, 1714, 2595, 1754, 1716, 1717, 1702, 1703, 1711, 1765, + 1713, 1762, 1763, 1718, 2595, 1713, 1731, 1713, 1719, 1732, + 1727, 2595, 1724, 1729, 1727, 1779, 1736, 1781, 1729, 1726, + 1726, 2595, 1741, 1742, 1743, 2595, 1744, 1734, 1746, 1791, + 1744, 1793, 1735, 1743, 1744, 1757, 2595, 1758, 1739, 1740, + 1747, 1749, 2595, 1763, 1760, 1800, 1761, 2595, 2595, 1765, + 1750, 1750, 1765, 1758, 1757, 1768, 1755, 2595, 1771, 1759, + + 1762, 1818, 1758, 1777, 1816, 1780, 1773, 1772, 1781, 1783, + 1787, 2595, 1777, 2595, 1781, 1772, 1831, 1774, 1833, 1834, + 1835, 1793, 1837, 2595, 1779, 2595, 1834, 1796, 1797, 1784, + 1792, 1803, 1790, 1801, 1787, 1785, 1793, 1792, 1797, 1789, + 1854, 1807, 1808, 1798, 1815, 1814, 1855, 1799, 1818, 1819, + 2595, 1824, 1817, 1856, 1823, 1810, 1825, 1870, 1827, 1830, + 1829, 1818, 1827, 2595, 1876, 2595, 2595, 2595, 1837, 2595, + 1878, 1820, 1880, 1881, 1824, 1883, 1831, 1880, 1881, 1843, + 1883, 1829, 1833, 1851, 1892, 1851, 2595, 1842, 1832, 1891, + 1857, 1850, 1846, 1900, 1843, 1845, 1844, 1851, 1894, 1848, + + 1907, 1851, 2595, 1856, 1866, 1869, 1852, 1860, 2595, 1855, + 2595, 1867, 2595, 2595, 1872, 2595, 1873, 1873, 1864, 1920, + 1864, 1874, 1859, 1872, 2595, 1874, 1882, 1927, 1868, 1870, + 1867, 1891, 2595, 1878, 1885, 1886, 1889, 1936, 1879, 2595, + 1933, 1880, 1888, 1882, 1898, 1897, 1900, 1893, 1888, 1888, + 1900, 1895, 2595, 1906, 1894, 1947, 1898, 1910, 1955, 2595, + 1901, 1913, 1958, 1907, 1909, 1907, 1908, 1963, 2595, 1916, + 1903, 1918, 1923, 1920, 1969, 1970, 1971, 1928, 1973, 1974, + 1918, 1922, 1918, 1934, 1917, 1929, 1923, 2595, 1939, 1983, + 2595, 1940, 1925, 1943, 1934, 2595, 1935, 1949, 1945, 1938, + + 1938, 2595, 2595, 2595, 1993, 2595, 2595, 1936, 1944, 1939, + 1992, 1958, 1955, 2000, 1961, 2595, 2002, 1944, 2004, 1947, + 1960, 1959, 1960, 1950, 1957, 2595, 1952, 2012, 1965, 1974, + 1967, 2011, 2595, 1958, 2595, 1970, 2595, 2014, 2020, 1962, + 1978, 2023, 2024, 2025, 2595, 1982, 1976, 1969, 1989, 1986, + 1978, 1982, 2595, 2029, 1978, 2595, 2595, 2595, 1978, 1986, + 2033, 1993, 1986, 2041, 1989, 1989, 1985, 1987, 2046, 2047, + 1989, 2005, 1990, 2595, 2051, 1998, 2005, 2054, 2595, 2595, + 2007, 2056, 2004, 2595, 2008, 2007, 2595, 2008, 2595, 2002, + 2002, 2019, 2020, 2065, 2011, 2067, 2068, 2595, 2069, 2595, + + 2595, 2595, 2595, 2075, 2078, 2081, 2082, 2084, 2087, 2090, + 2093 } ; -static const flex_int16_t yy_def[2207] = +static const flex_int16_t yy_def[2212] = { 0, - 2199, 2199, 2200, 2200, 2199, 2199, 2199, 2199, 2199, 2199, - 2198, 2198, 2198, 2198, 2198, 2201, 2198, 2198, 2198, 2198, - 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, - 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2202, - 2198, 2198, 2198, 2203, 15, 2198, 45, 45, 45, 45, - 45, 45, 45, 45, 45, 2204, 45, 45, 45, 45, + 2204, 2204, 2205, 2205, 2204, 2204, 2204, 2204, 2204, 2204, + 2203, 2203, 2203, 2203, 2203, 2206, 2203, 2203, 2203, 2203, + 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, + 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2207, + 2203, 2203, 2203, 2208, 15, 2203, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 2209, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 45, 45, 45, 45, 45, 2201, 2198, - 2198, 2198, 2198, 2198, 2198, 2205, 2198, 2198, 2198, 2198, - 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2202, 2198, 2203, + 45, 45, 45, 45, 45, 45, 45, 45, 2206, 2203, + 2203, 2203, 2203, 2203, 2203, 2210, 2203, 2203, 2203, 2203, + 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2207, 2203, 2208, - 2198, 2198, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 2206, 45, 2204, 45, 45, 45, 45, 45, + 2203, 2203, 45, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 2211, 45, 2209, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 45, 45, 45, 45, 2205, 2198, 2198, - 2198, 2198, 2198, 2198, 2198, 2198, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 45, 2210, 2203, 2203, + 2203, 2203, 2203, 2203, 2203, 2203, 45, 45, 45, 45, - 45, 45, 45, 45, 45, 45, 2206, 2198, 2198, 115, + 45, 45, 45, 45, 45, 45, 2211, 2203, 2203, 115, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 45, 45, 45, 45, 45, 2198, 45, + 45, 45, 45, 45, 45, 45, 45, 45, 2203, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, @@ -1273,9 +1275,9 @@ static const flex_int16_t yy_def[2207] = 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 45, 45, 45, 45, 45, 2198, 2198, - 2198, 2198, 2198, 2198, 2198, 45, 45, 45, 45, 45, - 45, 2198, 45, 2198, 45, 115, 2198, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 45, 45, 2203, 2203, + 2203, 2203, 2203, 2203, 2203, 45, 45, 45, 45, 45, + 45, 2203, 45, 2203, 45, 115, 2203, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, @@ -1283,210 +1285,211 @@ static const flex_int16_t yy_def[2207] = 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 2198, 45, 45, 45, 45, 45, 45, 45, 45, 45, + 2203, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 2198, 45, 45, 45, 45, 45, 45, 45, 45, 45, + 2203, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 2198, 45, 45, 45, 45, 45, 2198, 2198, 2198, - 45, 45, 45, 45, 45, 2198, 45, 2198, 45, 115, + 45, 2203, 45, 45, 45, 45, 45, 2203, 2203, 2203, + 45, 45, 45, 45, 45, 2203, 45, 2203, 45, 115, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 2198, 45, 45, 45, 45, 45, 45, 2198, - 45, 45, 45, 45, 45, 45, 2198, 45, 45, 45, + 45, 45, 2203, 45, 45, 45, 45, 45, 45, 2203, + 45, 45, 45, 45, 45, 45, 2203, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 2198, 45, 45, 45, 45, 45, 45, 45, 45, 45, + 2203, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 45, 45, 2198, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 2203, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 45, 2198, 45, 2198, 45, 45, 45, + 45, 45, 45, 45, 2203, 45, 2203, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 45, 45, 45, 45, 45, 45, 2198, - 45, 45, 2198, 45, 45, 2198, 45, 45, 45, 2198, + 45, 45, 45, 45, 45, 45, 45, 45, 45, 2203, + 45, 45, 2203, 45, 45, 2203, 45, 45, 45, 2203, - 45, 45, 45, 2198, 2198, 2198, 45, 45, 45, 45, - 2198, 45, 45, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 2203, 2203, 2203, 45, 45, 45, 45, + 2203, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 45, 45, 45, 45, 2198, 45, 45, + 45, 45, 45, 45, 45, 45, 45, 2203, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 45, 45, 45, 45, 2198, 45, 45, + 45, 45, 45, 45, 45, 45, 45, 2203, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 45, 45, 45, 2198, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 2203, 45, 45, 45, - 45, 45, 45, 45, 45, 45, 45, 2198, 45, 45, + 45, 45, 45, 45, 45, 45, 45, 2203, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 2198, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 45, 45, 45, 45, 2198, 45, 45, - 2198, 45, 45, 45, 45, 45, 45, 45, 45, 45, + 45, 2203, 45, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 45, 2203, 45, 45, + 2203, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 45, 45, 2198, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 2203, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 45, 45, 45, 45, 45, 45, 2198, + 45, 45, 45, 45, 45, 45, 45, 45, 45, 2203, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 2198, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 2203, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 45, 45, 45, 45, 45, 2198, 45, + 45, 45, 45, 45, 45, 45, 45, 45, 2203, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 45, 45, 45, 45, 45, 2198, 45, + 45, 45, 45, 45, 45, 45, 45, 45, 2203, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 45, 45, 45, 45, 45, 45, 2198, + 45, 45, 45, 45, 45, 45, 45, 45, 45, 2203, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 45, 45, 45, 45, 2198, 2198, 45, - 45, 45, 45, 45, 45, 2198, 2198, 45, 45, 45, - 45, 45, 45, 45, 2198, 45, 45, 45, 45, 45, - 45, 45, 45, 45, 45, 2198, 2198, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 45, 2203, 2203, 45, + 45, 45, 45, 45, 45, 2203, 2203, 45, 45, 45, + 45, 45, 45, 45, 2203, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 2203, 2203, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 45, 45, 45, 45, 45, 2198, 45, + 45, 45, 45, 45, 45, 45, 45, 45, 2203, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 2198, 45, 45, 45, 45, 45, 45, 45, 45, + 45, 2203, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 45, 45, 45, 45, 2198, 45, 45, + 45, 45, 45, 45, 45, 45, 45, 2203, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 2198, 45, 45, 45, 45, 45, 45, 45, - 2198, 45, 45, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 2203, 45, 45, 45, 45, 45, 45, 45, + 2203, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 45, 45, 45, 45, 45, 2198, 45, + 45, 45, 45, 45, 45, 45, 45, 45, 2203, 45, - 45, 45, 45, 45, 2198, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 2203, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 2198, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 2203, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 45, 45, 2198, 45, 45, 45, 45, - 45, 45, 2198, 45, 45, 45, 2198, 45, 45, 45, + 45, 45, 45, 45, 45, 2203, 45, 45, 45, 45, + 45, 45, 2203, 45, 45, 45, 2203, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 2198, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 2203, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 45, 45, 2198, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 2203, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 45, 45, 2198, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 2198, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 2198, 45, 45, 45, 2198, 45, 45, 45, - 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 45, 45, 45, 45, 45, 2198, 45, - 45, 45, 45, 45, 45, 45, 45, 45, 2198, 45, - 45, 45, 45, 45, 45, 45, 2198, 45, 45, 45, - 45, 45, 45, 45, 2198, 45, 45, 45, 45, 45, - 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 45, 45, 2198, 45, 2198, 45, 2198, + 2203, 45, 45, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 2203, 45, 45, 45, 2203, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 45, 2198, 45, 2198, 45, 45, 45, - 2198, 45, 45, 45, 45, 45, 45, 2198, 45, 2198, - 45, 2198, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 45, 45, 45, 45, 2198, 45, 45, - 45, 45, 45, 45, 45, 2198, 2198, 45, 45, 45, - 45, 45, 45, 45, 45, 45, 45, 45, 45, 2198, - 45, 45, 45, 45, 45, 2198, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 45, 45, 2203, 45, + 45, 45, 45, 45, 45, 45, 45, 45, 2203, 45, + 45, 45, 45, 45, 45, 45, 2203, 45, 45, 45, + 45, 45, 45, 45, 2203, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 45, 45, 45, 45, 45, 45, 2198, + 45, 45, 45, 45, 45, 2203, 45, 2203, 45, 2203, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 2203, 45, 2203, 45, 45, 45, + 45, 2203, 45, 45, 45, 45, 45, 45, 2203, 45, + 2203, 45, 2203, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 45, 45, 2203, 45, + 45, 45, 45, 45, 45, 45, 2203, 2203, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 45, 45, 45, 45, 2198, 45, 2198, - 2198, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 2198, 45, 45, 45, 45, 45, 45, - 2198, 45, 45, 2198, 45, 45, 2198, 2198, 45, 45, - 45, 45, 45, 45, 45, 45, 2198, 45, 45, 45, - 45, 45, 2198, 45, 45, 45, 45, 45, 2198, 45, + 2203, 45, 45, 45, 45, 45, 2203, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 45, 45, 45, 2198, 45, 45, 45, - 2198, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 45, 2198, 45, 2198, 45, 45, 2198, - 45, 45, 45, 45, 45, 45, 45, 45, 45, 2198, - 45, 45, 45, 45, 45, 45, 45, 45, 2198, 2198, - 45, 45, 2198, 45, 45, 45, 2198, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 2198, 45, 2198, 45, 45, 2198, 45, 45, 2198, - 45, 2198, 45, 45, 45, 2198, 45, 45, 45, 45, + 2203, 45, 45, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 45, 45, 2203, 45, + 45, 2203, 2203, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 2203, 45, 45, 45, 45, + 45, 45, 2203, 45, 45, 2203, 45, 45, 2203, 2203, + 45, 45, 45, 45, 45, 45, 45, 45, 2203, 45, + 45, 45, 45, 45, 2203, 45, 45, 45, 45, 45, + + 2203, 45, 45, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 45, 45, 2203, 45, + 45, 45, 2203, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 2203, 45, 2203, 45, + 45, 2203, 45, 45, 45, 45, 45, 45, 45, 45, + 45, 2203, 45, 45, 45, 45, 45, 45, 45, 45, + 45, 2203, 2203, 45, 45, 2203, 45, 45, 45, 2203, + 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 2203, 45, 2203, 45, 45, 2203, + 45, 45, 2203, 45, 2203, 45, 45, 45, 2203, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 45, 45, 45, 45, 2198, 45, 45, - 45, 45, 45, 45, 45, 45, 45, 2198, 45, 45, - 45, 2198, 45, 45, 2198, 45, 45, 2198, 2198, 45, - 45, 45, 2198, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 45, 45, 2198, 45, 2198, 45, 45, - - 45, 45, 45, 45, 45, 45, 45, 45, 2198, 45, - 45, 45, 45, 2198, 45, 45, 2198, 45, 45, 45, - 2198, 45, 45, 45, 45, 45, 2198, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, + 45, 2203, 45, 45, 45, 45, 45, 45, 45, 45, + 45, 2203, 45, 45, 45, 2203, 45, 45, 2203, 45, + 45, 2203, 2203, 45, 45, 45, 2203, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 45, 45, 45, 2203, + + 45, 2203, 45, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 2203, 45, 45, 45, 45, 2203, 45, 45, + 2203, 45, 45, 45, 2203, 45, 45, 45, 2203, 45, + 45, 2203, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 2198, 45, 45, 2198, 45, 45, 45, - 2198, 45, 45, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 45, 45, 2203, 45, + 45, 2203, 45, 45, 45, 2203, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 2198, 45, 45, 45, 2198, 45, 45, 45, 45, 2198, - 45, 45, 45, 45, 45, 2198, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 2203, 45, 45, 45, 2203, + 45, 45, 45, 45, 2203, 45, 45, 45, 45, 45, + + 2203, 45, 45, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 45, 2203, 45, 45, + 2203, 45, 2203, 45, 2203, 45, 45, 45, 45, 2203, + 2203, 45, 2203, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 2203, 45, 45, 45, 45, 45, + 45, 2203, 45, 45, 45, 45, 45, 45, 45, 45, + 45, 2203, 45, 45, 45, 2203, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 2203, 45, 45, 45, + 45, 45, 2203, 45, 45, 45, 45, 2203, 2203, 45, + 45, 45, 45, 45, 45, 45, 45, 2203, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 2198, 45, 45, 2198, 45, 2198, 45, 2198, - 45, 45, 45, 45, 2198, 2198, 45, 2198, 45, 45, - 45, 45, 45, 45, 45, 45, 45, 45, 45, 2198, - 45, 45, 45, 45, 45, 45, 2198, 45, 45, 45, - 45, 45, 45, 45, 45, 45, 2198, 45, 45, 45, - 2198, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 2198, 45, 45, 45, 45, 45, 2198, 45, 45, - 45, 45, 2198, 2198, 45, 45, 45, 45, 45, 45, - 45, 45, 2198, 45, 45, 45, 45, 45, 45, 45, - - 45, 45, 45, 45, 45, 45, 2198, 45, 2198, 45, - 45, 45, 45, 45, 45, 45, 45, 45, 2198, 45, - 2198, 45, 45, 45, 45, 45, 45, 45, 45, 45, + 45, 2203, 45, 2203, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 2203, 45, 2203, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 45, 45, 2198, 45, 45, 45, 45, - 45, 45, 45, 45, 45, 45, 45, 45, 2198, 45, - 2198, 2198, 2198, 45, 2198, 45, 45, 45, 45, 45, + 2203, 45, 45, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 2203, 45, 2203, 2203, 2203, 45, 2203, + 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 2203, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, + + 45, 45, 2203, 45, 45, 45, 45, 45, 2203, 45, + 2203, 45, 2203, 2203, 45, 2203, 45, 45, 45, 45, + 45, 45, 45, 45, 2203, 45, 45, 45, 45, 45, + 45, 45, 2203, 45, 45, 45, 45, 45, 45, 2203, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 2198, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 45, 45, 45, 45, 2198, 45, 45, - - 45, 45, 45, 2198, 45, 2198, 45, 2198, 2198, 45, - 2198, 45, 45, 45, 45, 45, 45, 45, 45, 2198, - 45, 45, 45, 45, 45, 45, 45, 2198, 45, 45, - 45, 45, 45, 45, 2198, 45, 45, 45, 45, 45, - 45, 45, 45, 45, 45, 45, 45, 2198, 45, 45, - 45, 45, 45, 45, 2198, 45, 45, 45, 45, 45, - 45, 45, 45, 2198, 45, 45, 45, 45, 45, 45, + 45, 45, 2203, 45, 45, 45, 45, 45, 45, 2203, + 45, 45, 45, 45, 45, 45, 45, 45, 2203, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 2198, 45, 45, 2198, 45, 45, 45, 45, - 2198, 45, 45, 45, 45, 45, 2198, 2198, 2198, 45, - - 2198, 2198, 45, 45, 45, 45, 45, 45, 45, 45, - 2198, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 2198, 45, 45, 45, 45, 45, 45, 2198, 45, 2198, - 45, 2198, 45, 45, 45, 45, 45, 45, 45, 2198, - 45, 45, 45, 45, 45, 45, 45, 2198, 45, 45, - 2198, 2198, 2198, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 45, 45, 45, 45, 45, 2198, 45, - 45, 45, 45, 2198, 2198, 45, 45, 45, 2198, 45, - 45, 2198, 45, 2198, 45, 45, 45, 45, 45, 45, - 45, 45, 2198, 45, 2198, 2198, 2198, 0, 2198, 2198, - - 2198, 2198, 2198, 2198, 2198, 2198 + 45, 45, 45, 45, 45, 45, 45, 2203, 45, 45, + 2203, 45, 45, 45, 45, 2203, 45, 45, 45, 45, + + 45, 2203, 2203, 2203, 45, 2203, 2203, 45, 45, 45, + 45, 45, 45, 45, 45, 2203, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 2203, 45, 45, 45, 45, + 45, 45, 2203, 45, 2203, 45, 2203, 45, 45, 45, + 45, 45, 45, 45, 2203, 45, 45, 45, 45, 45, + 45, 45, 2203, 45, 45, 2203, 2203, 2203, 45, 45, + 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 2203, 45, 45, 45, 45, 2203, 2203, + 45, 45, 45, 2203, 45, 45, 2203, 45, 2203, 45, + 45, 45, 45, 45, 45, 45, 45, 2203, 45, 2203, + + 2203, 2203, 0, 2203, 2203, 2203, 2203, 2203, 2203, 2203, + 2203 } ; -static const flex_int16_t yy_nxt[2664] = +static const flex_int16_t yy_nxt[2669] = { 0, - 2198, 13, 14, 13, 2198, 15, 16, 2198, 17, 18, + 2203, 13, 14, 13, 2203, 15, 16, 2203, 17, 18, 19, 20, 21, 22, 22, 22, 22, 22, 23, 24, 85, 824, 37, 14, 37, 86, 25, 26, 38, 101, 855, 27, 37, 14, 37, 42, 28, 42, 38, 91, @@ -1625,49 +1628,49 @@ static const flex_int16_t yy_nxt[2664] = 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, 1388, 1411, 1412, - 1413, 1414, 1415, 1389, 1416, 1417, 1418, 1419, 1420, 1421, + 1404, 1405, 1406, 1407, 1408, 1409, 1410, 1411, 1389, 1412, + 1413, 1414, 1415, 1416, 1390, 1417, 1418, 1419, 1420, 1421, 1422, 1423, 1424, 1425, 1426, 1427, 1428, 1429, 1430, 1431, 1432, 1433, 1434, 1435, 1436, 1437, 1438, 1439, 1440, 1441, 1442, 1443, 1444, 1445, 1446, 1447, 1448, 1449, 1450, 1451, 1452, 1453, 1454, 1455, 1456, 1457, 1458, 1459, 1460, 1461, - 1462, 1463, 1464, 1465, 1466, 1467, 1469, 1470, 1471, 1472, + 1462, 1463, 1464, 1465, 1466, 1467, 1468, 1469, 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, 1496, 1497, 1498, 1499, 1501, 1502, 1503, + 1493, 1494, 1495, 1496, 1497, 1498, 1499, 1500, 1501, 1503, 1504, 1505, 1506, 1507, 1508, 1509, 1510, 1511, 1512, 1513, - 1514, 1515, 1516, 1517, 1518, 1519, 1520, 1492, 1468, 1521, - 1522, 1523, 1524, 1525, 1526, 1527, 1528, 1529, 1530, 1531, + 1514, 1515, 1516, 1517, 1518, 1519, 1520, 1521, 1522, 1494, + 1470, 1523, 1524, 1525, 1526, 1527, 1528, 1529, 1530, 1531, 1532, 1533, 1534, 1535, 1536, 1537, 1538, 1539, 1540, 1541, - 1500, 1542, 1543, 1545, 1546, 1547, 1548, 1549, 1550, 1551, - 1544, 1552, 1553, 1554, 1555, 1556, 1557, 1558, 1559, 1560, - 1561, 1562, 1563, 1564, 1565, 1566, 1567, 1569, 1570, 1573, - 1571, 1568, 1572, 1574, 1575, 1576, 1577, 1578, 1579, 1580, - 1581, 1582, 1583, 1584, 1585, 1586, 1587, 1589, 1590, 1591, - 1592, 1588, 1593, 1594, 1595, 1596, 1597, 1598, 1599, 1600, + 1542, 1543, 1502, 1544, 1545, 1547, 1548, 1549, 1550, 1551, + 1552, 1553, 1546, 1554, 1555, 1556, 1557, 1558, 1559, 1560, + 1561, 1562, 1563, 1564, 1565, 1566, 1567, 1568, 1569, 1570, + 1572, 1573, 1576, 1574, 1571, 1575, 1577, 1578, 1579, 1580, + 1581, 1582, 1583, 1584, 1585, 1586, 1587, 1588, 1589, 1590, + 1592, 1593, 1594, 1595, 1591, 1596, 1597, 1598, 1599, 1600, 1601, 1602, 1603, 1604, 1605, 1606, 1607, 1608, 1609, 1610, - 1589, 1611, 1612, 1613, 1614, 1615, 1616, 1617, 1618, 1619, + 1611, 1612, 1613, 1592, 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, 1657, 1654, 1658, 1659, 1655, 1660, - 1661, 1656, 1662, 1663, 1664, 1665, 1666, 1667, 1668, 1669, + 1650, 1651, 1652, 1653, 1654, 1655, 1656, 1657, 1661, 1658, + 1662, 1663, 1659, 1664, 1665, 1660, 1666, 1667, 1668, 1669, 1670, 1671, 1672, 1673, 1674, 1675, 1676, 1677, 1678, 1679, - 1680, 1681, 1682, 1683, 1684, 1685, 1687, 1688, 1689, 1690, - 1691, 1692, 1693, 1694, 1695, 1696, 1686, 1697, 1698, 1699, - 1700, 1674, 1701, 1702, 1703, 1704, 1705, 1706, 1707, 1708, - 1709, 1711, 1712, 1713, 1714, 1715, 1716, 1717, 1718, 1719, + 1680, 1681, 1682, 1683, 1684, 1685, 1686, 1687, 1688, 1689, + 1691, 1692, 1693, 1694, 1695, 1696, 1697, 1698, 1699, 1700, + 1690, 1701, 1702, 1703, 1704, 1678, 1705, 1706, 1707, 1708, + 1709, 1710, 1711, 1712, 1713, 1715, 1716, 1717, 1718, 1719, 1720, 1721, 1722, 1723, 1724, 1725, 1726, 1727, 1728, 1729, 1730, 1731, 1732, 1733, 1734, 1735, 1736, 1737, 1738, 1739, 1740, 1741, 1742, 1743, 1744, 1745, 1746, 1747, 1748, 1749, 1750, 1751, 1752, 1753, 1754, 1755, 1756, 1757, 1758, 1759, - 1760, 1761, 1762, 1763, 1764, 1765, 1766, 1767, 1710, 1768, - 1769, 1770, 1771, 1772, 1773, 1774, 1775, 1776, 1777, 1778, - 1779, 1780, 1781, 1782, 1756, 1783, 1784, 1785, 1786, 1787, + 1760, 1761, 1762, 1763, 1764, 1765, 1766, 1767, 1768, 1769, + 1770, 1771, 1714, 1772, 1773, 1774, 1775, 1776, 1777, 1778, + 1779, 1780, 1781, 1782, 1783, 1784, 1785, 1786, 1787, 1761, 1788, 1789, 1790, 1791, 1792, 1793, 1794, 1795, 1796, 1797, 1798, 1799, 1800, 1801, 1802, 1803, 1804, 1805, 1806, 1807, 1808, 1809, 1810, 1811, 1812, 1813, 1814, 1815, 1816, 1817, @@ -1678,8 +1681,8 @@ static const flex_int16_t yy_nxt[2664] = 1848, 1849, 1850, 1851, 1852, 1853, 1854, 1855, 1856, 1857, 1858, 1859, 1860, 1861, 1862, 1863, 1864, 1865, 1866, 1867, 1868, 1869, 1870, 1871, 1872, 1873, 1874, 1875, 1876, 1877, - 1878, 1879, 1881, 1882, 1883, 1884, 1880, 1885, 1886, 1887, - 1888, 1889, 1890, 1891, 1892, 1893, 1894, 1895, 1896, 1897, + 1878, 1879, 1880, 1881, 1882, 1883, 1884, 1886, 1887, 1888, + 1889, 1885, 1890, 1891, 1892, 1893, 1894, 1895, 1896, 1897, 1898, 1899, 1900, 1901, 1902, 1903, 1904, 1905, 1906, 1907, 1908, 1909, 1910, 1911, 1912, 1913, 1914, 1915, 1916, 1917, 1918, 1919, 1920, 1921, 1922, 1923, 1924, 1925, 1926, 1927, @@ -1689,7 +1692,7 @@ static const flex_int16_t yy_nxt[2664] = 1948, 1949, 1950, 1951, 1952, 1953, 1954, 1955, 1956, 1957, 1958, 1959, 1960, 1961, 1962, 1963, 1964, 1965, 1966, 1967, 1968, 1969, 1970, 1971, 1972, 1973, 1974, 1975, 1976, 1977, - 1979, 1980, 1978, 1981, 1982, 1983, 1984, 1985, 1986, 1987, + 1978, 1979, 1980, 1981, 1982, 1984, 1985, 1983, 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, @@ -1709,79 +1712,79 @@ static const flex_int16_t yy_nxt[2664] = 2128, 2129, 2130, 2131, 2132, 2133, 2134, 2135, 2136, 2137, 2138, 2139, 2140, 2141, 2142, 2143, 2144, 2145, 2146, 2147, 2148, 2149, 2150, 2151, 2152, 2153, 2154, 2155, 2156, 2157, - 2159, 2158, 2160, 2161, 2162, 2163, 2164, 2165, 2166, 2167, + 2158, 2159, 2160, 2161, 2162, 2164, 2163, 2165, 2166, 2167, 2168, 2169, 2170, 2171, 2172, 2173, 2174, 2175, 2176, 2177, 2178, 2179, 2180, 2181, 2182, 2183, 2184, 2185, 2186, 2187, 2188, 2189, 2190, 2191, 2192, 2193, 2194, 2195, 2196, 2197, - 12, 12, 12, 36, 36, 36, 79, 98, 79, 100, - 100, 100, 113, 113, 113, 188, 854, 188, 207, 207, - 207, 853, 852, 851, 850, 849, 848, 847, 846, 845, - - 844, 843, 842, 841, 840, 839, 838, 837, 836, 835, - 834, 833, 832, 831, 830, 829, 828, 827, 826, 823, - 822, 821, 820, 819, 818, 817, 816, 815, 814, 813, - 812, 811, 810, 809, 808, 807, 806, 805, 804, 803, - 802, 801, 800, 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, 772, 771, - 770, 769, 766, 765, 764, 763, 762, 761, 760, 759, - 758, 757, 756, 755, 754, 753, 752, 751, 750, 747, - 746, 744, 741, 740, 739, 738, 737, 736, 735, 734, - - 733, 732, 731, 730, 729, 728, 727, 726, 725, 724, - 723, 722, 721, 720, 719, 718, 715, 714, 713, 712, - 711, 710, 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, - 680, 679, 678, 677, 676, 675, 674, 673, 672, 669, - 668, 667, 666, 665, 664, 663, 662, 661, 660, 659, - 658, 657, 656, 655, 654, 653, 652, 651, 650, 647, - 646, 645, 644, 643, 642, 641, 640, 639, 638, 634, - 633, 626, 625, 624, 623, 622, 621, 620, 619, 618, - - 617, 616, 615, 614, 613, 612, 611, 609, 606, 605, - 604, 602, 601, 600, 599, 598, 595, 594, 593, 592, - 591, 590, 589, 588, 587, 586, 585, 584, 583, 582, - 581, 580, 579, 578, 575, 574, 573, 572, 571, 570, - 569, 568, 565, 564, 561, 560, 559, 558, 557, 554, - 553, 552, 551, 550, 549, 548, 547, 546, 545, 544, - 543, 542, 541, 540, 536, 535, 534, 533, 532, 531, - 530, 526, 525, 524, 523, 522, 521, 520, 519, 518, - 517, 516, 515, 510, 509, 508, 507, 506, 505, 504, - 503, 502, 501, 500, 499, 498, 497, 496, 493, 492, - - 491, 490, 489, 488, 487, 486, 485, 484, 483, 482, - 481, 480, 479, 478, 477, 476, 475, 474, 473, 471, - 469, 468, 466, 464, 460, 457, 456, 453, 452, 451, - 449, 448, 447, 445, 444, 443, 440, 439, 438, 437, - 436, 435, 434, 433, 432, 431, 430, 429, 428, 427, - 424, 423, 422, 421, 420, 419, 418, 417, 416, 415, - 414, 413, 410, 409, 405, 404, 403, 400, 398, 397, - 396, 395, 394, 393, 389, 388, 387, 386, 385, 384, - 383, 380, 379, 378, 377, 376, 375, 374, 373, 372, - 371, 370, 369, 368, 367, 366, 365, 364, 363, 362, - - 361, 360, 359, 358, 357, 356, 350, 349, 348, 347, - 346, 345, 344, 343, 342, 341, 340, 208, 334, 332, - 328, 326, 325, 318, 317, 316, 315, 313, 311, 307, - 306, 305, 302, 301, 300, 285, 279, 274, 273, 272, - 269, 266, 265, 264, 263, 262, 261, 258, 257, 256, - 253, 252, 251, 250, 249, 248, 244, 243, 235, 234, - 233, 232, 231, 228, 227, 226, 222, 219, 215, 214, - 213, 208, 199, 197, 196, 195, 186, 166, 145, 119, - 105, 103, 43, 99, 97, 96, 87, 43, 2198, 11, - 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, - - 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, - 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, - 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, - 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, - 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, - 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, - 2198, 2198, 2198 + 2198, 2199, 2200, 2201, 2202, 12, 12, 12, 36, 36, + 36, 79, 98, 79, 100, 100, 100, 113, 113, 113, + 188, 854, 188, 207, 207, 207, 853, 852, 851, 850, + + 849, 848, 847, 846, 845, 844, 843, 842, 841, 840, + 839, 838, 837, 836, 835, 834, 833, 832, 831, 830, + 829, 828, 827, 826, 823, 822, 821, 820, 819, 818, + 817, 816, 815, 814, 813, 812, 811, 810, 809, 808, + 807, 806, 805, 804, 803, 802, 801, 800, 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, 772, 771, 770, 769, 766, 765, 764, + 763, 762, 761, 760, 759, 758, 757, 756, 755, 754, + 753, 752, 751, 750, 747, 746, 744, 741, 740, 739, + + 738, 737, 736, 735, 734, 733, 732, 731, 730, 729, + 728, 727, 726, 725, 724, 723, 722, 721, 720, 719, + 718, 715, 714, 713, 712, 711, 710, 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, 680, 679, 678, 677, 676, + 675, 674, 673, 672, 669, 668, 667, 666, 665, 664, + 663, 662, 661, 660, 659, 658, 657, 656, 655, 654, + 653, 652, 651, 650, 647, 646, 645, 644, 643, 642, + 641, 640, 639, 638, 634, 633, 626, 625, 624, 623, + + 622, 621, 620, 619, 618, 617, 616, 615, 614, 613, + 612, 611, 609, 606, 605, 604, 602, 601, 600, 599, + 598, 595, 594, 593, 592, 591, 590, 589, 588, 587, + 586, 585, 584, 583, 582, 581, 580, 579, 578, 575, + 574, 573, 572, 571, 570, 569, 568, 565, 564, 561, + 560, 559, 558, 557, 554, 553, 552, 551, 550, 549, + 548, 547, 546, 545, 544, 543, 542, 541, 540, 536, + 535, 534, 533, 532, 531, 530, 526, 525, 524, 523, + 522, 521, 520, 519, 518, 517, 516, 515, 510, 509, + 508, 507, 506, 505, 504, 503, 502, 501, 500, 499, + + 498, 497, 496, 493, 492, 491, 490, 489, 488, 487, + 486, 485, 484, 483, 482, 481, 480, 479, 478, 477, + 476, 475, 474, 473, 471, 469, 468, 466, 464, 460, + 457, 456, 453, 452, 451, 449, 448, 447, 445, 444, + 443, 440, 439, 438, 437, 436, 435, 434, 433, 432, + 431, 430, 429, 428, 427, 424, 423, 422, 421, 420, + 419, 418, 417, 416, 415, 414, 413, 410, 409, 405, + 404, 403, 400, 398, 397, 396, 395, 394, 393, 389, + 388, 387, 386, 385, 384, 383, 380, 379, 378, 377, + 376, 375, 374, 373, 372, 371, 370, 369, 368, 367, + + 366, 365, 364, 363, 362, 361, 360, 359, 358, 357, + 356, 350, 349, 348, 347, 346, 345, 344, 343, 342, + 341, 340, 208, 334, 332, 328, 326, 325, 318, 317, + 316, 315, 313, 311, 307, 306, 305, 302, 301, 300, + 285, 279, 274, 273, 272, 269, 266, 265, 264, 263, + 262, 261, 258, 257, 256, 253, 252, 251, 250, 249, + 248, 244, 243, 235, 234, 233, 232, 231, 228, 227, + 226, 222, 219, 215, 214, 213, 208, 199, 197, 196, + 195, 186, 166, 145, 119, 105, 103, 43, 99, 97, + 96, 87, 43, 2203, 11, 2203, 2203, 2203, 2203, 2203, + + 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, + 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, + 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, + 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, + 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, + 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, + 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203 } ; -static const flex_int16_t yy_chk[2664] = +static const flex_int16_t yy_chk[2669] = { 0, 0, 1, 1, 1, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, @@ -1915,167 +1918,167 @@ static const flex_int16_t yy_chk[2664] = 1192, 1193, 1194, 1195, 1197, 1198, 1199, 1200, 1201, 1197, 1202, 1203, 1204, 1205, 1206, 1207, 1208, 1209, 1210, 1211, - 1212, 1213, 1214, 1215, 1217, 1218, 1219, 1220, 1221, 1222, - 1223, 1224, 1225, 1226, 1227, 1228, 1229, 1230, 1232, 1233, - 1234, 1235, 1236, 1237, 1238, 1239, 1240, 1241, 1242, 1198, - 1244, 1245, 1246, 1248, 1249, 1250, 1251, 1252, 1253, 1254, - 1255, 1256, 1257, 1258, 1259, 1260, 1261, 1262, 1263, 1264, - 1265, 1266, 1267, 1268, 1270, 1271, 1272, 1273, 1274, 1275, - 1276, 1277, 1278, 1280, 1281, 1282, 1283, 1284, 1285, 1286, - 1288, 1289, 1290, 1291, 1292, 1293, 1294, 1270, 1296, 1297, - 1298, 1299, 1300, 1271, 1301, 1302, 1303, 1304, 1305, 1306, - 1307, 1308, 1309, 1310, 1311, 1312, 1313, 1314, 1315, 1317, - - 1319, 1321, 1322, 1323, 1324, 1325, 1326, 1327, 1328, 1329, - 1330, 1331, 1332, 1333, 1334, 1336, 1338, 1339, 1340, 1342, - 1343, 1344, 1345, 1346, 1347, 1349, 1351, 1353, 1354, 1355, - 1356, 1357, 1358, 1359, 1360, 1361, 1362, 1363, 1364, 1365, - 1366, 1367, 1369, 1370, 1371, 1372, 1373, 1374, 1375, 1378, - 1379, 1380, 1381, 1382, 1383, 1384, 1385, 1386, 1387, 1388, - 1389, 1391, 1392, 1393, 1394, 1395, 1397, 1398, 1399, 1400, - 1401, 1402, 1403, 1404, 1405, 1406, 1407, 1408, 1409, 1410, - 1411, 1412, 1413, 1414, 1415, 1416, 1417, 1388, 1361, 1418, - 1419, 1421, 1422, 1423, 1424, 1425, 1426, 1427, 1428, 1429, - - 1430, 1431, 1432, 1433, 1434, 1435, 1436, 1437, 1438, 1439, - 1397, 1440, 1441, 1442, 1443, 1444, 1445, 1446, 1447, 1449, - 1441, 1452, 1453, 1454, 1455, 1456, 1457, 1458, 1459, 1460, - 1461, 1462, 1463, 1465, 1466, 1467, 1468, 1469, 1470, 1473, - 1472, 1468, 1472, 1475, 1476, 1479, 1480, 1481, 1482, 1483, - 1484, 1485, 1486, 1488, 1489, 1490, 1491, 1492, 1494, 1495, - 1496, 1491, 1497, 1498, 1500, 1501, 1502, 1503, 1504, 1505, - 1506, 1507, 1508, 1509, 1510, 1511, 1512, 1513, 1514, 1515, - 1492, 1516, 1518, 1519, 1520, 1522, 1523, 1524, 1525, 1526, - 1527, 1528, 1529, 1530, 1531, 1532, 1533, 1534, 1536, 1538, - - 1539, 1541, 1542, 1543, 1544, 1545, 1546, 1547, 1548, 1549, - 1551, 1552, 1553, 1554, 1555, 1556, 1557, 1558, 1561, 1562, - 1564, 1565, 1566, 1568, 1569, 1568, 1570, 1571, 1568, 1572, - 1573, 1568, 1574, 1575, 1576, 1577, 1578, 1579, 1580, 1581, - 1583, 1585, 1586, 1588, 1589, 1591, 1593, 1594, 1595, 1597, - 1598, 1599, 1600, 1601, 1602, 1603, 1604, 1605, 1606, 1607, - 1608, 1609, 1610, 1611, 1612, 1613, 1603, 1614, 1615, 1616, - 1617, 1589, 1618, 1619, 1620, 1621, 1622, 1623, 1624, 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, 1659, 1660, 1661, 1662, 1663, 1664, 1665, - 1666, 1667, 1669, 1670, 1671, 1673, 1674, 1676, 1677, 1680, - 1681, 1682, 1684, 1685, 1686, 1687, 1688, 1689, 1625, 1690, - 1691, 1692, 1693, 1694, 1695, 1697, 1699, 1700, 1701, 1702, - 1703, 1704, 1705, 1706, 1674, 1707, 1708, 1710, 1711, 1712, - 1713, 1715, 1716, 1718, 1719, 1720, 1722, 1723, 1724, 1725, - 1726, 1728, 1729, 1730, 1731, 1732, 1733, 1734, 1735, 1736, + 1212, 1213, 1214, 1215, 1216, 1217, 1218, 1219, 1220, 1221, + 1222, 1223, 1224, 1225, 1226, 1227, 1228, 1229, 1230, 1232, + 1233, 1234, 1235, 1236, 1237, 1238, 1239, 1240, 1241, 1198, + 1242, 1244, 1245, 1246, 1248, 1249, 1250, 1251, 1252, 1253, + 1254, 1255, 1256, 1257, 1258, 1259, 1260, 1261, 1262, 1263, + 1264, 1265, 1266, 1267, 1268, 1270, 1271, 1272, 1273, 1274, + 1275, 1276, 1277, 1278, 1280, 1281, 1282, 1283, 1284, 1285, + 1286, 1288, 1289, 1290, 1291, 1292, 1293, 1294, 1270, 1296, + 1297, 1298, 1299, 1300, 1271, 1301, 1302, 1303, 1304, 1305, + 1306, 1307, 1308, 1309, 1310, 1311, 1312, 1313, 1314, 1315, + + 1317, 1319, 1321, 1322, 1323, 1324, 1325, 1326, 1327, 1328, + 1329, 1330, 1331, 1332, 1333, 1334, 1336, 1338, 1339, 1340, + 1341, 1343, 1344, 1345, 1346, 1347, 1348, 1350, 1352, 1354, + 1355, 1356, 1357, 1358, 1359, 1360, 1361, 1362, 1363, 1364, + 1365, 1366, 1367, 1368, 1370, 1371, 1372, 1373, 1374, 1375, + 1376, 1379, 1380, 1381, 1382, 1383, 1384, 1385, 1386, 1387, + 1388, 1389, 1390, 1392, 1393, 1394, 1395, 1396, 1398, 1399, + 1400, 1401, 1402, 1403, 1404, 1405, 1406, 1407, 1408, 1409, + 1410, 1411, 1412, 1413, 1414, 1415, 1416, 1417, 1418, 1389, + 1362, 1419, 1420, 1422, 1423, 1424, 1425, 1426, 1427, 1428, + + 1429, 1430, 1431, 1432, 1433, 1434, 1435, 1436, 1437, 1438, + 1439, 1440, 1398, 1441, 1442, 1443, 1444, 1445, 1446, 1447, + 1448, 1450, 1442, 1451, 1454, 1455, 1456, 1457, 1458, 1459, + 1460, 1461, 1462, 1463, 1464, 1465, 1467, 1468, 1469, 1470, + 1471, 1472, 1475, 1474, 1470, 1474, 1477, 1478, 1481, 1482, + 1483, 1484, 1485, 1486, 1487, 1488, 1490, 1491, 1492, 1493, + 1494, 1496, 1497, 1498, 1493, 1499, 1500, 1502, 1503, 1504, + 1505, 1506, 1507, 1508, 1509, 1510, 1511, 1512, 1513, 1514, + 1515, 1516, 1517, 1494, 1518, 1520, 1521, 1522, 1524, 1525, + 1526, 1527, 1528, 1529, 1530, 1531, 1532, 1533, 1534, 1535, + + 1536, 1538, 1540, 1541, 1543, 1544, 1545, 1546, 1547, 1548, + 1549, 1550, 1551, 1553, 1554, 1555, 1556, 1557, 1558, 1559, + 1560, 1561, 1564, 1565, 1567, 1568, 1569, 1571, 1572, 1571, + 1573, 1574, 1571, 1575, 1576, 1571, 1577, 1578, 1579, 1580, + 1581, 1582, 1583, 1584, 1586, 1588, 1589, 1591, 1592, 1594, + 1596, 1597, 1598, 1600, 1601, 1602, 1603, 1604, 1605, 1606, + 1607, 1608, 1609, 1610, 1611, 1612, 1613, 1614, 1615, 1616, + 1606, 1617, 1618, 1619, 1620, 1592, 1621, 1622, 1623, 1624, + 1625, 1626, 1627, 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, 1663, 1664, + 1665, 1666, 1667, 1668, 1669, 1670, 1671, 1673, 1674, 1675, + 1677, 1678, 1680, 1681, 1684, 1685, 1686, 1688, 1689, 1690, + 1691, 1692, 1628, 1693, 1694, 1695, 1696, 1697, 1698, 1699, + 1701, 1703, 1704, 1705, 1706, 1707, 1708, 1709, 1710, 1678, + 1711, 1712, 1714, 1715, 1716, 1717, 1719, 1720, 1722, 1723, + 1724, 1726, 1727, 1728, 1730, 1731, 1733, 1734, 1735, 1736, 1737, 1738, 1739, 1740, 1741, 1742, 1743, 1744, 1745, 1746, - 1747, 1748, 1749, 1750, 1751, 1752, 1753, 1755, 1756, 1758, + 1747, 1748, 1749, 1750, 1751, 1752, 1753, 1754, 1755, 1756, - 1759, 1760, 1762, 1763, 1764, 1765, 1766, 1767, 1768, 1769, + 1757, 1758, 1760, 1761, 1763, 1764, 1765, 1767, 1768, 1769, 1770, 1771, 1772, 1773, 1774, 1775, 1776, 1777, 1778, 1779, - 1780, 1782, 1783, 1784, 1786, 1787, 1788, 1789, 1791, 1792, - 1793, 1794, 1795, 1797, 1798, 1799, 1800, 1801, 1802, 1803, - 1804, 1805, 1806, 1807, 1808, 1809, 1810, 1811, 1812, 1814, - 1815, 1817, 1819, 1821, 1822, 1823, 1817, 1824, 1827, 1829, - 1830, 1831, 1832, 1833, 1834, 1835, 1836, 1837, 1838, 1839, - 1841, 1842, 1843, 1844, 1845, 1846, 1848, 1849, 1850, 1851, - 1852, 1853, 1854, 1855, 1856, 1858, 1859, 1860, 1862, 1863, - 1864, 1865, 1866, 1867, 1868, 1869, 1870, 1871, 1873, 1874, - - 1875, 1876, 1877, 1879, 1880, 1881, 1882, 1885, 1886, 1887, - 1888, 1889, 1890, 1891, 1892, 1894, 1895, 1896, 1897, 1898, - 1899, 1900, 1901, 1902, 1903, 1904, 1905, 1906, 1908, 1910, - 1911, 1912, 1913, 1914, 1915, 1916, 1917, 1918, 1920, 1922, - 1923, 1924, 1925, 1926, 1927, 1928, 1929, 1930, 1931, 1932, - 1933, 1934, 1932, 1935, 1936, 1937, 1938, 1939, 1940, 1941, - 1942, 1943, 1944, 1945, 1947, 1948, 1949, 1950, 1951, 1952, - 1953, 1954, 1955, 1956, 1957, 1958, 1960, 1964, 1966, 1967, - 1968, 1969, 1970, 1971, 1972, 1973, 1974, 1975, 1976, 1977, - 1978, 1979, 1980, 1981, 1983, 1984, 1985, 1986, 1987, 1988, - - 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1999, - 2000, 2001, 2002, 2003, 2005, 2007, 2010, 2012, 2013, 2014, - 2015, 2016, 2017, 2018, 2019, 2021, 2022, 2023, 2024, 2025, - 2026, 2027, 2029, 2030, 2031, 2032, 2033, 2034, 2036, 2037, - 2038, 2039, 2040, 2041, 2042, 2043, 2044, 2045, 2046, 2047, - 2049, 2050, 2051, 2052, 2053, 2054, 2056, 2057, 2058, 2059, - 2060, 2061, 2062, 2063, 2065, 2066, 2067, 2068, 2069, 2070, + 1780, 1781, 1782, 1783, 1784, 1785, 1787, 1788, 1789, 1791, + 1792, 1793, 1794, 1796, 1797, 1798, 1799, 1800, 1802, 1803, + 1804, 1805, 1806, 1807, 1808, 1809, 1810, 1811, 1812, 1813, + 1814, 1815, 1816, 1817, 1819, 1820, 1822, 1824, 1826, 1827, + 1828, 1822, 1829, 1832, 1834, 1835, 1836, 1837, 1838, 1839, + 1840, 1841, 1842, 1843, 1844, 1846, 1847, 1848, 1849, 1850, + 1851, 1853, 1854, 1855, 1856, 1857, 1858, 1859, 1860, 1861, + 1863, 1864, 1865, 1867, 1868, 1869, 1870, 1871, 1872, 1873, + + 1874, 1875, 1876, 1878, 1879, 1880, 1881, 1882, 1884, 1885, + 1886, 1887, 1890, 1891, 1892, 1893, 1894, 1895, 1896, 1897, + 1899, 1900, 1901, 1902, 1903, 1904, 1905, 1906, 1907, 1908, + 1909, 1910, 1911, 1913, 1915, 1916, 1917, 1918, 1919, 1920, + 1921, 1922, 1923, 1925, 1927, 1928, 1929, 1930, 1931, 1932, + 1933, 1934, 1935, 1936, 1937, 1938, 1939, 1937, 1940, 1941, + 1942, 1943, 1944, 1945, 1946, 1947, 1948, 1949, 1950, 1952, + 1953, 1954, 1955, 1956, 1957, 1958, 1959, 1960, 1961, 1962, + 1963, 1965, 1969, 1971, 1972, 1973, 1974, 1975, 1976, 1977, + 1978, 1979, 1980, 1981, 1982, 1983, 1984, 1985, 1986, 1988, + + 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, + 1999, 2000, 2001, 2002, 2004, 2005, 2006, 2007, 2008, 2010, + 2012, 2015, 2017, 2018, 2019, 2020, 2021, 2022, 2023, 2024, + 2026, 2027, 2028, 2029, 2030, 2031, 2032, 2034, 2035, 2036, + 2037, 2038, 2039, 2041, 2042, 2043, 2044, 2045, 2046, 2047, + 2048, 2049, 2050, 2051, 2052, 2054, 2055, 2056, 2057, 2058, + 2059, 2061, 2062, 2063, 2064, 2065, 2066, 2067, 2068, 2070, 2071, 2072, 2073, 2074, 2075, 2076, 2077, 2078, 2079, 2080, - 2081, 2082, 2084, 2085, 2087, 2088, 2089, 2090, 2092, 2093, - 2094, 2095, 2096, 2100, 2103, 2104, 2105, 2106, 2107, 2108, - - 2109, 2110, 2112, 2113, 2114, 2115, 2116, 2117, 2118, 2119, - 2120, 2122, 2123, 2124, 2125, 2126, 2127, 2129, 2131, 2133, - 2134, 2135, 2136, 2137, 2138, 2139, 2141, 2142, 2143, 2144, - 2145, 2144, 2146, 2147, 2149, 2150, 2154, 2155, 2156, 2157, - 2158, 2159, 2160, 2161, 2162, 2163, 2164, 2165, 2166, 2167, - 2168, 2170, 2171, 2172, 2173, 2176, 2177, 2178, 2180, 2181, - 2183, 2185, 2186, 2187, 2188, 2189, 2190, 2191, 2192, 2194, - 2199, 2199, 2199, 2200, 2200, 2200, 2201, 2202, 2201, 2203, - 2203, 2203, 2204, 2204, 2204, 2205, 720, 2205, 2206, 2206, - 2206, 719, 718, 717, 716, 715, 714, 713, 712, 711, - - 710, 709, 707, 706, 705, 704, 703, 702, 701, 700, - 699, 698, 696, 695, 694, 693, 692, 691, 690, 688, - 687, 686, 685, 684, 683, 682, 681, 680, 679, 677, - 676, 675, 674, 673, 672, 671, 670, 669, 668, 667, - 666, 665, 664, 662, 661, 660, 659, 658, 657, 656, - 655, 654, 653, 652, 651, 650, 649, 647, 646, 645, - 644, 643, 642, 641, 640, 639, 638, 637, 636, 635, - 634, 633, 631, 630, 629, 628, 627, 626, 625, 624, - 623, 622, 621, 620, 619, 618, 617, 616, 615, 613, - 612, 609, 603, 602, 601, 600, 599, 598, 597, 595, - - 594, 592, 591, 589, 588, 587, 586, 585, 584, 583, - 582, 581, 580, 579, 578, 577, 575, 574, 573, 572, - 571, 570, 569, 568, 567, 566, 565, 564, 563, 562, - 561, 560, 559, 558, 556, 554, 553, 552, 551, 550, - 549, 548, 547, 546, 545, 544, 543, 542, 541, 540, - 538, 537, 535, 534, 533, 532, 531, 530, 529, 527, - 526, 525, 524, 523, 522, 521, 520, 519, 518, 517, - 516, 515, 514, 513, 512, 510, 509, 508, 507, 505, - 504, 503, 502, 501, 500, 499, 498, 496, 495, 493, - 492, 489, 488, 487, 486, 485, 484, 482, 481, 480, - - 479, 478, 477, 476, 475, 474, 473, 471, 467, 465, - 464, 462, 461, 460, 457, 456, 454, 453, 451, 450, - 449, 448, 447, 446, 445, 444, 443, 442, 441, 440, - 439, 438, 437, 436, 434, 433, 432, 431, 430, 429, - 428, 427, 425, 424, 422, 420, 419, 418, 417, 415, - 414, 413, 412, 411, 410, 409, 408, 407, 406, 405, - 404, 403, 402, 400, 397, 396, 395, 394, 393, 392, - 391, 389, 388, 387, 386, 385, 384, 383, 382, 381, - 380, 379, 378, 376, 375, 374, 373, 372, 371, 370, - 369, 368, 367, 366, 365, 364, 363, 362, 360, 359, - - 358, 357, 356, 355, 354, 353, 352, 351, 350, 349, - 348, 347, 346, 345, 344, 343, 342, 341, 340, 338, - 335, 333, 330, 328, 325, 318, 317, 315, 314, 313, - 311, 310, 309, 307, 306, 305, 303, 302, 301, 300, - 299, 298, 297, 296, 295, 294, 293, 292, 291, 290, - 288, 287, 286, 285, 284, 283, 282, 281, 280, 279, - 278, 277, 275, 274, 272, 271, 270, 268, 266, 265, - 264, 263, 262, 261, 259, 258, 257, 256, 255, 254, - 253, 251, 250, 248, 247, 246, 245, 244, 243, 242, - 241, 240, 239, 238, 237, 236, 235, 234, 233, 232, - - 231, 230, 229, 228, 227, 226, 223, 222, 221, 220, - 219, 218, 217, 216, 215, 214, 213, 207, 205, 203, - 199, 197, 195, 187, 186, 185, 184, 182, 180, 177, - 176, 175, 173, 172, 171, 167, 164, 162, 161, 160, - 158, 156, 155, 154, 153, 152, 151, 149, 148, 147, - 145, 144, 143, 142, 141, 140, 138, 137, 133, 132, - 131, 130, 129, 127, 126, 125, 123, 121, 119, 118, - 117, 113, 105, 103, 98, 97, 77, 72, 66, 58, - 49, 47, 43, 41, 39, 38, 24, 14, 11, 2198, - 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, - - 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, - 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, - 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, - 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, - 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, - 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, - 2198, 2198, 2198 + 2081, 2082, 2083, 2084, 2085, 2086, 2087, 2089, 2090, 2092, + 2093, 2094, 2095, 2097, 2098, 2099, 2100, 2101, 2105, 2108, + + 2109, 2110, 2111, 2112, 2113, 2114, 2115, 2117, 2118, 2119, + 2120, 2121, 2122, 2123, 2124, 2125, 2127, 2128, 2129, 2130, + 2131, 2132, 2134, 2136, 2138, 2139, 2140, 2141, 2142, 2143, + 2144, 2146, 2147, 2148, 2149, 2150, 2149, 2151, 2152, 2154, + 2155, 2159, 2160, 2161, 2162, 2163, 2164, 2165, 2166, 2167, + 2168, 2169, 2170, 2171, 2172, 2173, 2175, 2176, 2177, 2178, + 2181, 2182, 2183, 2185, 2186, 2188, 2190, 2191, 2192, 2193, + 2194, 2195, 2196, 2197, 2199, 2204, 2204, 2204, 2205, 2205, + 2205, 2206, 2207, 2206, 2208, 2208, 2208, 2209, 2209, 2209, + 2210, 720, 2210, 2211, 2211, 2211, 719, 718, 717, 716, + + 715, 714, 713, 712, 711, 710, 709, 707, 706, 705, + 704, 703, 702, 701, 700, 699, 698, 696, 695, 694, + 693, 692, 691, 690, 688, 687, 686, 685, 684, 683, + 682, 681, 680, 679, 677, 676, 675, 674, 673, 672, + 671, 670, 669, 668, 667, 666, 665, 664, 662, 661, + 660, 659, 658, 657, 656, 655, 654, 653, 652, 651, + 650, 649, 647, 646, 645, 644, 643, 642, 641, 640, + 639, 638, 637, 636, 635, 634, 633, 631, 630, 629, + 628, 627, 626, 625, 624, 623, 622, 621, 620, 619, + 618, 617, 616, 615, 613, 612, 609, 603, 602, 601, + + 600, 599, 598, 597, 595, 594, 592, 591, 589, 588, + 587, 586, 585, 584, 583, 582, 581, 580, 579, 578, + 577, 575, 574, 573, 572, 571, 570, 569, 568, 567, + 566, 565, 564, 563, 562, 561, 560, 559, 558, 556, + 554, 553, 552, 551, 550, 549, 548, 547, 546, 545, + 544, 543, 542, 541, 540, 538, 537, 535, 534, 533, + 532, 531, 530, 529, 527, 526, 525, 524, 523, 522, + 521, 520, 519, 518, 517, 516, 515, 514, 513, 512, + 510, 509, 508, 507, 505, 504, 503, 502, 501, 500, + 499, 498, 496, 495, 493, 492, 489, 488, 487, 486, + + 485, 484, 482, 481, 480, 479, 478, 477, 476, 475, + 474, 473, 471, 467, 465, 464, 462, 461, 460, 457, + 456, 454, 453, 451, 450, 449, 448, 447, 446, 445, + 444, 443, 442, 441, 440, 439, 438, 437, 436, 434, + 433, 432, 431, 430, 429, 428, 427, 425, 424, 422, + 420, 419, 418, 417, 415, 414, 413, 412, 411, 410, + 409, 408, 407, 406, 405, 404, 403, 402, 400, 397, + 396, 395, 394, 393, 392, 391, 389, 388, 387, 386, + 385, 384, 383, 382, 381, 380, 379, 378, 376, 375, + 374, 373, 372, 371, 370, 369, 368, 367, 366, 365, + + 364, 363, 362, 360, 359, 358, 357, 356, 355, 354, + 353, 352, 351, 350, 349, 348, 347, 346, 345, 344, + 343, 342, 341, 340, 338, 335, 333, 330, 328, 325, + 318, 317, 315, 314, 313, 311, 310, 309, 307, 306, + 305, 303, 302, 301, 300, 299, 298, 297, 296, 295, + 294, 293, 292, 291, 290, 288, 287, 286, 285, 284, + 283, 282, 281, 280, 279, 278, 277, 275, 274, 272, + 271, 270, 268, 266, 265, 264, 263, 262, 261, 259, + 258, 257, 256, 255, 254, 253, 251, 250, 248, 247, + 246, 245, 244, 243, 242, 241, 240, 239, 238, 237, + + 236, 235, 234, 233, 232, 231, 230, 229, 228, 227, + 226, 223, 222, 221, 220, 219, 218, 217, 216, 215, + 214, 213, 207, 205, 203, 199, 197, 195, 187, 186, + 185, 184, 182, 180, 177, 176, 175, 173, 172, 171, + 167, 164, 162, 161, 160, 158, 156, 155, 154, 153, + 152, 151, 149, 148, 147, 145, 144, 143, 142, 141, + 140, 138, 137, 133, 132, 131, 130, 129, 127, 126, + 125, 123, 121, 119, 118, 117, 113, 105, 103, 98, + 97, 77, 72, 66, 58, 49, 47, 43, 41, 39, + 38, 24, 14, 11, 2203, 2203, 2203, 2203, 2203, 2203, + + 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, + 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, + 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, + 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, + 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, + 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, + 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203 } ; static yy_state_type yy_last_accepting_state; @@ -2164,7 +2167,7 @@ using namespace isc::dhcp; /* To avoid the call to exit... oops! */ #define YY_FATAL_ERROR(msg) isc::dhcp::Parser4Context::fatal(msg) -#line 2168 "dhcp4_lexer.cc" +#line 2171 "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 @@ -2190,8 +2193,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 2194 "dhcp4_lexer.cc" -#line 2195 "dhcp4_lexer.cc" +#line 2197 "dhcp4_lexer.cc" +#line 2198 "dhcp4_lexer.cc" #define INITIAL 0 #define COMMENT 1 @@ -2519,7 +2522,7 @@ YY_DECL } -#line 2523 "dhcp4_lexer.cc" +#line 2526 "dhcp4_lexer.cc" while ( /*CONSTCOND*/1 ) /* loops until end-of-file is reached */ { @@ -2548,13 +2551,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 >= 2199 ) + if ( yy_current_state >= 2204 ) yy_c = yy_meta[yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c]; ++yy_cp; } - while ( yy_current_state != 2198 ); + while ( yy_current_state != 2203 ); yy_cp = (yy_last_accepting_cpos); yy_current_state = (yy_last_accepting_state); @@ -5174,7 +5177,7 @@ YY_RULE_SETUP case isc::dhcp::Parser4Context::SHARED_NETWORK: return isc::dhcp::Dhcp4Parser::make_OFFER_LFT(driver.loc_); default: - return isc::dhcp::Dhcp4Parser::make_STRING("offer-lft", driver.loc_); + return isc::dhcp::Dhcp4Parser::make_STRING("offer-lifetime", driver.loc_); } } YY_BREAK @@ -5516,7 +5519,7 @@ YY_RULE_SETUP #line 2375 "dhcp4_lexer.ll" ECHO; YY_BREAK -#line 5520 "dhcp4_lexer.cc" +#line 5523 "dhcp4_lexer.cc" case YY_END_OF_BUFFER: { @@ -5835,7 +5838,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 >= 2199 ) + if ( yy_current_state >= 2204 ) yy_c = yy_meta[yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c]; @@ -5868,11 +5871,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 >= 2199 ) + if ( yy_current_state >= 2204 ) yy_c = yy_meta[yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c]; - yy_is_jam = (yy_current_state == 2198); + yy_is_jam = (yy_current_state == 2203); return yy_is_jam ? 0 : yy_current_state; } diff --git a/src/bin/dhcp4/dhcp4_lexer.ll b/src/bin/dhcp4/dhcp4_lexer.ll index 22d36a5cf4..94941790de 100644 --- a/src/bin/dhcp4/dhcp4_lexer.ll +++ b/src/bin/dhcp4/dhcp4_lexer.ll @@ -2093,14 +2093,14 @@ ControlCharacterFill [^"\\]|\\["\\/bfnrtu] } } -\"offer-lft\" { +\"offer-lifetime\" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::DHCP4: case isc::dhcp::Parser4Context::SUBNET4: case isc::dhcp::Parser4Context::SHARED_NETWORK: return isc::dhcp::Dhcp4Parser::make_OFFER_LFT(driver.loc_); default: - return isc::dhcp::Dhcp4Parser::make_STRING("offer-lft", driver.loc_); + return isc::dhcp::Dhcp4Parser::make_STRING("offer-lifetime", driver.loc_); } } diff --git a/src/bin/dhcp4/dhcp4_parser.cc b/src/bin/dhcp4/dhcp4_parser.cc index afcfcd548e..82c49e0464 100644 --- a/src/bin/dhcp4/dhcp4_parser.cc +++ b/src/bin/dhcp4/dhcp4_parser.cc @@ -1553,12 +1553,12 @@ namespace isc { namespace dhcp { #line 1554 "dhcp4_parser.cc" break; - case 181: // offer_lft: "offer-lft" ":" "integer" + case 181: // offer_lft: "offer-lifetime" ":" "integer" #line 797 "dhcp4_parser.yy" { - ctx.unique("offer-lft", ctx.loc2pos(yystack_[2].location)); + ctx.unique("offer-lifetime", ctx.loc2pos(yystack_[2].location)); ElementPtr offer_lft(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location))); - ctx.stack_.back()->set("offer-lft", offer_lft); + ctx.stack_.back()->set("offer-lifetime", offer_lft); } #line 1564 "dhcp4_parser.cc" break; @@ -6017,7 +6017,7 @@ namespace isc { namespace dhcp { "\"service-sockets-max-retries\"", "\"sanity-checks\"", "\"lease-checks\"", "\"extended-info-checks\"", "\"echo-client-id\"", "\"match-client-id\"", "\"authoritative\"", "\"next-server\"", - "\"server-hostname\"", "\"boot-file-name\"", "\"offer-lft\"", + "\"server-hostname\"", "\"boot-file-name\"", "\"offer-lifetime\"", "\"lease-database\"", "\"hosts-database\"", "\"hosts-databases\"", "\"type\"", "\"memfile\"", "\"mysql\"", "\"postgresql\"", "\"user\"", "\"password\"", "\"host\"", "\"port\"", "\"persist\"", diff --git a/src/bin/dhcp4/dhcp4_parser.h b/src/bin/dhcp4/dhcp4_parser.h index 8d0a3714a0..34864c7492 100644 --- a/src/bin/dhcp4/dhcp4_parser.h +++ b/src/bin/dhcp4/dhcp4_parser.h @@ -519,7 +519,7 @@ namespace isc { namespace dhcp { TOKEN_NEXT_SERVER = 287, // "next-server" TOKEN_SERVER_HOSTNAME = 288, // "server-hostname" TOKEN_BOOT_FILE_NAME = 289, // "boot-file-name" - TOKEN_OFFER_LFT = 290, // "offer-lft" + TOKEN_OFFER_LFT = 290, // "offer-lifetime" TOKEN_LEASE_DATABASE = 291, // "lease-database" TOKEN_HOSTS_DATABASE = 292, // "hosts-database" TOKEN_HOSTS_DATABASES = 293, // "hosts-databases" @@ -753,7 +753,7 @@ namespace isc { namespace dhcp { S_NEXT_SERVER = 32, // "next-server" S_SERVER_HOSTNAME = 33, // "server-hostname" S_BOOT_FILE_NAME = 34, // "boot-file-name" - S_OFFER_LFT = 35, // "offer-lft" + S_OFFER_LFT = 35, // "offer-lifetime" S_LEASE_DATABASE = 36, // "lease-database" S_HOSTS_DATABASE = 37, // "hosts-database" S_HOSTS_DATABASES = 38, // "hosts-databases" diff --git a/src/bin/dhcp4/dhcp4_parser.yy b/src/bin/dhcp4/dhcp4_parser.yy index 6f1e4ad8ba..d8d737d756 100644 --- a/src/bin/dhcp4/dhcp4_parser.yy +++ b/src/bin/dhcp4/dhcp4_parser.yy @@ -78,7 +78,7 @@ using namespace std; NEXT_SERVER "next-server" SERVER_HOSTNAME "server-hostname" BOOT_FILE_NAME "boot-file-name" - OFFER_LFT "offer-lft" + OFFER_LFT "offer-lifetime" LEASE_DATABASE "lease-database" HOSTS_DATABASE "hosts-database" @@ -795,9 +795,9 @@ reservations_lookup_first: RESERVATIONS_LOOKUP_FIRST COLON BOOLEAN { }; offer_lft: OFFER_LFT COLON INTEGER { - ctx.unique("offer-lft", ctx.loc2pos(@1)); + ctx.unique("offer-lifetime", ctx.loc2pos(@1)); ElementPtr offer_lft(new IntElement($3, ctx.loc2pos(@3))); - ctx.stack_.back()->set("offer-lft", offer_lft); + ctx.stack_.back()->set("offer-lifetime", offer_lft); }; interfaces_config: INTERFACES_CONFIG { diff --git a/src/bin/dhcp4/json_config_parser.cc b/src/bin/dhcp4/json_config_parser.cc index 0a39996356..fd0378ced0 100644 --- a/src/bin/dhcp4/json_config_parser.cc +++ b/src/bin/dhcp4/json_config_parser.cc @@ -684,7 +684,7 @@ processDhcp4Config(isc::data::ConstElementPtr config_set) { (config_pair.first == "reservations-lookup-first") || (config_pair.first == "parked-packet-limit") || (config_pair.first == "allocator") || - (config_pair.first == "offer-lft") ) { + (config_pair.first == "offer-lifetime") ) { CfgMgr::instance().getStagingCfg()->addConfiguredGlobal(config_pair.first, config_pair.second); continue; diff --git a/src/bin/dhcp4/tests/get_config_unittest.cc b/src/bin/dhcp4/tests/get_config_unittest.cc index ee5f486f51..5edeb5381f 100644 --- a/src/bin/dhcp4/tests/get_config_unittest.cc +++ b/src/bin/dhcp4/tests/get_config_unittest.cc @@ -2438,7 +2438,7 @@ const char* UNPARSED_CONFIGS[] = { " \"thread-pool-size\": 0\n" " },\n" " \"next-server\": \"0.0.0.0\",\n" -" \"offer-lft\": 0,\n" +" \"offer-lifetime\": 0,\n" " \"option-data\": [ ],\n" " \"option-def\": [ ],\n" " \"parked-packet-limit\": 256,\n" @@ -2523,7 +2523,7 @@ const char* UNPARSED_CONFIGS[] = { " \"thread-pool-size\": 0\n" " },\n" " \"next-server\": \"0.0.0.0\",\n" -" \"offer-lft\": 0,\n" +" \"offer-lifetime\": 0,\n" " \"option-data\": [ ],\n" " \"option-def\": [ ],\n" " \"parked-packet-limit\": 256,\n" @@ -2552,7 +2552,7 @@ const char* UNPARSED_CONFIGS[] = { " \"id\": 1,\n" " \"max-valid-lifetime\": 4000,\n" " \"min-valid-lifetime\": 4000,\n" -" \"offer-lft\": 0,\n" +" \"offer-lifetime\": 0,\n" " \"option-data\": [ ],\n" " \"pools\": [\n" " {\n" @@ -2636,7 +2636,7 @@ const char* UNPARSED_CONFIGS[] = { " \"thread-pool-size\": 0\n" " },\n" " \"next-server\": \"0.0.0.0\",\n" -" \"offer-lft\": 0,\n" +" \"offer-lifetime\": 0,\n" " \"option-data\": [ ],\n" " \"option-def\": [ ],\n" " \"parked-packet-limit\": 256,\n" @@ -2665,7 +2665,7 @@ const char* UNPARSED_CONFIGS[] = { " \"id\": 1,\n" " \"max-valid-lifetime\": 4000,\n" " \"min-valid-lifetime\": 4000,\n" -" \"offer-lft\": 0,\n" +" \"offer-lifetime\": 0,\n" " \"option-data\": [ ],\n" " \"pools\": [\n" " {\n" @@ -2751,7 +2751,7 @@ const char* UNPARSED_CONFIGS[] = { " \"thread-pool-size\": 0\n" " },\n" " \"next-server\": \"0.0.0.0\",\n" -" \"offer-lft\": 0,\n" +" \"offer-lifetime\": 0,\n" " \"option-data\": [ ],\n" " \"option-def\": [ ],\n" " \"parked-packet-limit\": 256,\n" @@ -2781,7 +2781,7 @@ const char* UNPARSED_CONFIGS[] = { " \"id\": 1,\n" " \"max-valid-lifetime\": 5000,\n" " \"min-valid-lifetime\": 3000,\n" -" \"offer-lft\": 0,\n" +" \"offer-lifetime\": 0,\n" " \"option-data\": [ ],\n" " \"pools\": [\n" " {\n" @@ -2866,7 +2866,7 @@ const char* UNPARSED_CONFIGS[] = { " \"thread-pool-size\": 0\n" " },\n" " \"next-server\": \"0.0.0.0\",\n" -" \"offer-lft\": 0,\n" +" \"offer-lifetime\": 0,\n" " \"option-data\": [ ],\n" " \"option-def\": [ ],\n" " \"parked-packet-limit\": 256,\n" @@ -2896,7 +2896,7 @@ const char* UNPARSED_CONFIGS[] = { " \"id\": 1,\n" " \"max-valid-lifetime\": 4000,\n" " \"min-valid-lifetime\": 4000,\n" -" \"offer-lft\": 0,\n" +" \"offer-lifetime\": 0,\n" " \"option-data\": [ ],\n" " \"pools\": [\n" " {\n" @@ -2925,7 +2925,7 @@ const char* UNPARSED_CONFIGS[] = { " \"id\": 2,\n" " \"max-valid-lifetime\": 4000,\n" " \"min-valid-lifetime\": 4000,\n" -" \"offer-lft\": 0,\n" +" \"offer-lifetime\": 0,\n" " \"option-data\": [ ],\n" " \"pools\": [\n" " {\n" @@ -2954,7 +2954,7 @@ const char* UNPARSED_CONFIGS[] = { " \"id\": 3,\n" " \"max-valid-lifetime\": 4000,\n" " \"min-valid-lifetime\": 4000,\n" -" \"offer-lft\": 0,\n" +" \"offer-lifetime\": 0,\n" " \"option-data\": [ ],\n" " \"pools\": [\n" " {\n" @@ -2983,7 +2983,7 @@ const char* UNPARSED_CONFIGS[] = { " \"id\": 4,\n" " \"max-valid-lifetime\": 4000,\n" " \"min-valid-lifetime\": 4000,\n" -" \"offer-lft\": 0,\n" +" \"offer-lifetime\": 0,\n" " \"option-data\": [ ],\n" " \"pools\": [\n" " {\n" @@ -3068,7 +3068,7 @@ const char* UNPARSED_CONFIGS[] = { " \"thread-pool-size\": 0\n" " },\n" " \"next-server\": \"0.0.0.0\",\n" -" \"offer-lft\": 0,\n" +" \"offer-lifetime\": 0,\n" " \"option-data\": [ ],\n" " \"option-def\": [ ],\n" " \"parked-packet-limit\": 256,\n" @@ -3098,7 +3098,7 @@ const char* UNPARSED_CONFIGS[] = { " \"id\": 1,\n" " \"max-valid-lifetime\": 4000,\n" " \"min-valid-lifetime\": 4000,\n" -" \"offer-lft\": 0,\n" +" \"offer-lifetime\": 0,\n" " \"option-data\": [ ],\n" " \"pools\": [\n" " {\n" @@ -3127,7 +3127,7 @@ const char* UNPARSED_CONFIGS[] = { " \"id\": 34,\n" " \"max-valid-lifetime\": 4000,\n" " \"min-valid-lifetime\": 4000,\n" -" \"offer-lft\": 0,\n" +" \"offer-lifetime\": 0,\n" " \"option-data\": [ ],\n" " \"pools\": [\n" " {\n" @@ -3156,7 +3156,7 @@ const char* UNPARSED_CONFIGS[] = { " \"id\": 100,\n" " \"max-valid-lifetime\": 4000,\n" " \"min-valid-lifetime\": 4000,\n" -" \"offer-lft\": 0,\n" +" \"offer-lifetime\": 0,\n" " \"option-data\": [ ],\n" " \"pools\": [\n" " {\n" @@ -3185,7 +3185,7 @@ const char* UNPARSED_CONFIGS[] = { " \"id\": 1024,\n" " \"max-valid-lifetime\": 4000,\n" " \"min-valid-lifetime\": 4000,\n" -" \"offer-lft\": 0,\n" +" \"offer-lifetime\": 0,\n" " \"option-data\": [ ],\n" " \"pools\": [\n" " {\n" @@ -3270,7 +3270,7 @@ const char* UNPARSED_CONFIGS[] = { " \"thread-pool-size\": 0\n" " },\n" " \"next-server\": \"1.2.3.4\",\n" -" \"offer-lft\": 0,\n" +" \"offer-lifetime\": 0,\n" " \"option-data\": [ ],\n" " \"option-def\": [ ],\n" " \"parked-packet-limit\": 256,\n" @@ -3300,7 +3300,7 @@ const char* UNPARSED_CONFIGS[] = { " \"id\": 1,\n" " \"max-valid-lifetime\": 4000,\n" " \"min-valid-lifetime\": 4000,\n" -" \"offer-lft\": 0,\n" +" \"offer-lifetime\": 0,\n" " \"option-data\": [ ],\n" " \"pools\": [\n" " {\n" @@ -3385,7 +3385,7 @@ const char* UNPARSED_CONFIGS[] = { " \"thread-pool-size\": 0\n" " },\n" " \"next-server\": \"0.0.0.0\",\n" -" \"offer-lft\": 0,\n" +" \"offer-lifetime\": 0,\n" " \"option-data\": [ ],\n" " \"option-def\": [ ],\n" " \"parked-packet-limit\": 256,\n" @@ -3417,7 +3417,7 @@ const char* UNPARSED_CONFIGS[] = { " \"max-valid-lifetime\": 4000,\n" " \"min-valid-lifetime\": 4000,\n" " \"next-server\": \"1.2.3.4\",\n" -" \"offer-lft\": 0,\n" +" \"offer-lifetime\": 0,\n" " \"option-data\": [ ],\n" " \"pools\": [\n" " {\n" @@ -3503,7 +3503,7 @@ const char* UNPARSED_CONFIGS[] = { " \"thread-pool-size\": 0\n" " },\n" " \"next-server\": \"192.0.0.1\",\n" -" \"offer-lft\": 0,\n" +" \"offer-lifetime\": 0,\n" " \"option-data\": [ ],\n" " \"option-def\": [ ],\n" " \"parked-packet-limit\": 256,\n" @@ -3535,7 +3535,7 @@ const char* UNPARSED_CONFIGS[] = { " \"max-valid-lifetime\": 4000,\n" " \"min-valid-lifetime\": 4000,\n" " \"next-server\": \"1.2.3.4\",\n" -" \"offer-lft\": 0,\n" +" \"offer-lifetime\": 0,\n" " \"option-data\": [ ],\n" " \"pools\": [\n" " {\n" @@ -3621,7 +3621,7 @@ const char* UNPARSED_CONFIGS[] = { " \"thread-pool-size\": 0\n" " },\n" " \"next-server\": \"0.0.0.0\",\n" -" \"offer-lft\": 0,\n" +" \"offer-lifetime\": 0,\n" " \"option-data\": [ ],\n" " \"option-def\": [ ],\n" " \"parked-packet-limit\": 256,\n" @@ -3651,7 +3651,7 @@ const char* UNPARSED_CONFIGS[] = { " \"id\": 1,\n" " \"max-valid-lifetime\": 4000,\n" " \"min-valid-lifetime\": 4000,\n" -" \"offer-lft\": 0,\n" +" \"offer-lifetime\": 0,\n" " \"option-data\": [ ],\n" " \"pools\": [\n" " {\n" @@ -3736,7 +3736,7 @@ const char* UNPARSED_CONFIGS[] = { " \"thread-pool-size\": 0\n" " },\n" " \"next-server\": \"0.0.0.0\",\n" -" \"offer-lft\": 0,\n" +" \"offer-lifetime\": 0,\n" " \"option-data\": [ ],\n" " \"option-def\": [ ],\n" " \"parked-packet-limit\": 256,\n" @@ -3766,7 +3766,7 @@ const char* UNPARSED_CONFIGS[] = { " \"id\": 1,\n" " \"max-valid-lifetime\": 4000,\n" " \"min-valid-lifetime\": 4000,\n" -" \"offer-lft\": 0,\n" +" \"offer-lifetime\": 0,\n" " \"option-data\": [ ],\n" " \"pools\": [\n" " {\n" @@ -3969,7 +3969,7 @@ const char* UNPARSED_CONFIGS[] = { " \"thread-pool-size\": 0\n" " },\n" " \"next-server\": \"0.0.0.0\",\n" -" \"offer-lft\": 0,\n" +" \"offer-lifetime\": 0,\n" " \"option-data\": [ ],\n" " \"option-def\": [ ],\n" " \"parked-packet-limit\": 256,\n" @@ -4000,7 +4000,7 @@ const char* UNPARSED_CONFIGS[] = { " \"match-client-id\": true,\n" " \"max-valid-lifetime\": 4000,\n" " \"min-valid-lifetime\": 4000,\n" -" \"offer-lft\": 0,\n" +" \"offer-lifetime\": 0,\n" " \"option-data\": [ ],\n" " \"pools\": [\n" " {\n" @@ -4030,7 +4030,7 @@ const char* UNPARSED_CONFIGS[] = { " \"match-client-id\": false,\n" " \"max-valid-lifetime\": 4000,\n" " \"min-valid-lifetime\": 4000,\n" -" \"offer-lft\": 0,\n" +" \"offer-lifetime\": 0,\n" " \"option-data\": [ ],\n" " \"pools\": [\n" " {\n" @@ -4115,7 +4115,7 @@ const char* UNPARSED_CONFIGS[] = { " \"thread-pool-size\": 0\n" " },\n" " \"next-server\": \"0.0.0.0\",\n" -" \"offer-lft\": 0,\n" +" \"offer-lifetime\": 0,\n" " \"option-data\": [ ],\n" " \"option-def\": [ ],\n" " \"parked-packet-limit\": 256,\n" @@ -4146,7 +4146,7 @@ const char* UNPARSED_CONFIGS[] = { " \"match-client-id\": false,\n" " \"max-valid-lifetime\": 4000,\n" " \"min-valid-lifetime\": 4000,\n" -" \"offer-lft\": 0,\n" +" \"offer-lifetime\": 0,\n" " \"option-data\": [ ],\n" " \"pools\": [\n" " {\n" @@ -4175,7 +4175,7 @@ const char* UNPARSED_CONFIGS[] = { " \"id\": 2,\n" " \"max-valid-lifetime\": 4000,\n" " \"min-valid-lifetime\": 4000,\n" -" \"offer-lft\": 0,\n" +" \"offer-lifetime\": 0,\n" " \"option-data\": [ ],\n" " \"pools\": [\n" " {\n" @@ -4260,7 +4260,7 @@ const char* UNPARSED_CONFIGS[] = { " \"thread-pool-size\": 0\n" " },\n" " \"next-server\": \"0.0.0.0\",\n" -" \"offer-lft\": 0,\n" +" \"offer-lifetime\": 0,\n" " \"option-data\": [ ],\n" " \"option-def\": [ ],\n" " \"parked-packet-limit\": 256,\n" @@ -4291,7 +4291,7 @@ const char* UNPARSED_CONFIGS[] = { " \"id\": 1,\n" " \"max-valid-lifetime\": 4000,\n" " \"min-valid-lifetime\": 4000,\n" -" \"offer-lft\": 0,\n" +" \"offer-lifetime\": 0,\n" " \"option-data\": [ ],\n" " \"pools\": [\n" " {\n" @@ -4321,7 +4321,7 @@ const char* UNPARSED_CONFIGS[] = { " \"id\": 2,\n" " \"max-valid-lifetime\": 4000,\n" " \"min-valid-lifetime\": 4000,\n" -" \"offer-lft\": 0,\n" +" \"offer-lifetime\": 0,\n" " \"option-data\": [ ],\n" " \"pools\": [\n" " {\n" @@ -4406,7 +4406,7 @@ const char* UNPARSED_CONFIGS[] = { " \"thread-pool-size\": 0\n" " },\n" " \"next-server\": \"0.0.0.0\",\n" -" \"offer-lft\": 0,\n" +" \"offer-lifetime\": 0,\n" " \"option-data\": [ ],\n" " \"option-def\": [ ],\n" " \"parked-packet-limit\": 256,\n" @@ -4437,7 +4437,7 @@ const char* UNPARSED_CONFIGS[] = { " \"id\": 1,\n" " \"max-valid-lifetime\": 4000,\n" " \"min-valid-lifetime\": 4000,\n" -" \"offer-lft\": 0,\n" +" \"offer-lifetime\": 0,\n" " \"option-data\": [ ],\n" " \"pools\": [\n" " {\n" @@ -4466,7 +4466,7 @@ const char* UNPARSED_CONFIGS[] = { " \"id\": 2,\n" " \"max-valid-lifetime\": 4000,\n" " \"min-valid-lifetime\": 4000,\n" -" \"offer-lft\": 0,\n" +" \"offer-lifetime\": 0,\n" " \"option-data\": [ ],\n" " \"pools\": [\n" " {\n" @@ -4553,7 +4553,7 @@ const char* UNPARSED_CONFIGS[] = { " \"thread-pool-size\": 0\n" " },\n" " \"next-server\": \"0.0.0.0\",\n" -" \"offer-lft\": 0,\n" +" \"offer-lifetime\": 0,\n" " \"option-data\": [ ],\n" " \"option-def\": [ ],\n" " \"parked-packet-limit\": 256,\n" @@ -4583,7 +4583,7 @@ const char* UNPARSED_CONFIGS[] = { " \"id\": 1,\n" " \"max-valid-lifetime\": 5,\n" " \"min-valid-lifetime\": 3,\n" -" \"offer-lft\": 0,\n" +" \"offer-lifetime\": 0,\n" " \"option-data\": [ ],\n" " \"pools\": [\n" " {\n" @@ -4668,7 +4668,7 @@ const char* UNPARSED_CONFIGS[] = { " \"thread-pool-size\": 0\n" " },\n" " \"next-server\": \"0.0.0.0\",\n" -" \"offer-lft\": 0,\n" +" \"offer-lifetime\": 0,\n" " \"option-data\": [ ],\n" " \"option-def\": [ ],\n" " \"parked-packet-limit\": 256,\n" @@ -4698,7 +4698,7 @@ const char* UNPARSED_CONFIGS[] = { " \"id\": 1,\n" " \"max-valid-lifetime\": 4000,\n" " \"min-valid-lifetime\": 4000,\n" -" \"offer-lft\": 0,\n" +" \"offer-lifetime\": 0,\n" " \"option-data\": [ ],\n" " \"pools\": [\n" " {\n" @@ -4731,7 +4731,7 @@ const char* UNPARSED_CONFIGS[] = { " \"id\": 2,\n" " \"max-valid-lifetime\": 4000,\n" " \"min-valid-lifetime\": 4000,\n" -" \"offer-lft\": 0,\n" +" \"offer-lifetime\": 0,\n" " \"option-data\": [ ],\n" " \"pools\": [\n" " {\n" @@ -4820,7 +4820,7 @@ const char* UNPARSED_CONFIGS[] = { " \"thread-pool-size\": 0\n" " },\n" " \"next-server\": \"0.0.0.0\",\n" -" \"offer-lft\": 0,\n" +" \"offer-lifetime\": 0,\n" " \"option-data\": [ ],\n" " \"option-def\": [ ],\n" " \"parked-packet-limit\": 256,\n" @@ -4850,7 +4850,7 @@ const char* UNPARSED_CONFIGS[] = { " \"id\": 1,\n" " \"max-valid-lifetime\": 4000,\n" " \"min-valid-lifetime\": 4000,\n" -" \"offer-lft\": 0,\n" +" \"offer-lifetime\": 0,\n" " \"option-data\": [ ],\n" " \"pools\": [\n" " {\n" @@ -4935,7 +4935,7 @@ const char* UNPARSED_CONFIGS[] = { " \"thread-pool-size\": 0\n" " },\n" " \"next-server\": \"0.0.0.0\",\n" -" \"offer-lft\": 0,\n" +" \"offer-lifetime\": 0,\n" " \"option-data\": [ ],\n" " \"option-def\": [\n" " {\n" @@ -5028,7 +5028,7 @@ const char* UNPARSED_CONFIGS[] = { " \"thread-pool-size\": 0\n" " },\n" " \"next-server\": \"0.0.0.0\",\n" -" \"offer-lft\": 0,\n" +" \"offer-lifetime\": 0,\n" " \"option-data\": [ ],\n" " \"option-def\": [\n" " {\n" @@ -5121,7 +5121,7 @@ const char* UNPARSED_CONFIGS[] = { " \"thread-pool-size\": 0\n" " },\n" " \"next-server\": \"0.0.0.0\",\n" -" \"offer-lft\": 0,\n" +" \"offer-lifetime\": 0,\n" " \"option-data\": [ ],\n" " \"option-def\": [\n" " {\n" @@ -5223,7 +5223,7 @@ const char* UNPARSED_CONFIGS[] = { " \"thread-pool-size\": 0\n" " },\n" " \"next-server\": \"0.0.0.0\",\n" -" \"offer-lft\": 0,\n" +" \"offer-lifetime\": 0,\n" " \"option-data\": [ ],\n" " \"option-def\": [\n" " {\n" @@ -5316,7 +5316,7 @@ const char* UNPARSED_CONFIGS[] = { " \"thread-pool-size\": 0\n" " },\n" " \"next-server\": \"0.0.0.0\",\n" -" \"offer-lft\": 0,\n" +" \"offer-lifetime\": 0,\n" " \"option-data\": [ ],\n" " \"option-def\": [\n" " {\n" @@ -5409,7 +5409,7 @@ const char* UNPARSED_CONFIGS[] = { " \"thread-pool-size\": 0\n" " },\n" " \"next-server\": \"0.0.0.0\",\n" -" \"offer-lft\": 0,\n" +" \"offer-lifetime\": 0,\n" " \"option-data\": [ ],\n" " \"option-def\": [\n" " {\n" @@ -5502,7 +5502,7 @@ const char* UNPARSED_CONFIGS[] = { " \"thread-pool-size\": 0\n" " },\n" " \"next-server\": \"0.0.0.0\",\n" -" \"offer-lft\": 0,\n" +" \"offer-lifetime\": 0,\n" " \"option-data\": [ ],\n" " \"option-def\": [\n" " {\n" @@ -5595,7 +5595,7 @@ const char* UNPARSED_CONFIGS[] = { " \"thread-pool-size\": 0\n" " },\n" " \"next-server\": \"0.0.0.0\",\n" -" \"offer-lft\": 0,\n" +" \"offer-lifetime\": 0,\n" " \"option-data\": [\n" " {\n" " \"always-send\": false,\n" @@ -5644,7 +5644,7 @@ const char* UNPARSED_CONFIGS[] = { " \"id\": 1,\n" " \"max-valid-lifetime\": 4000,\n" " \"min-valid-lifetime\": 4000,\n" -" \"offer-lft\": 0,\n" +" \"offer-lifetime\": 0,\n" " \"option-data\": [ ],\n" " \"pools\": [\n" " {\n" @@ -5729,7 +5729,7 @@ const char* UNPARSED_CONFIGS[] = { " \"thread-pool-size\": 0\n" " },\n" " \"next-server\": \"0.0.0.0\",\n" -" \"offer-lft\": 0,\n" +" \"offer-lifetime\": 0,\n" " \"option-data\": [ ],\n" " \"option-def\": [ ],\n" " \"parked-packet-limit\": 256,\n" @@ -5759,7 +5759,7 @@ const char* UNPARSED_CONFIGS[] = { " \"id\": 1,\n" " \"max-valid-lifetime\": 4000,\n" " \"min-valid-lifetime\": 4000,\n" -" \"offer-lft\": 0,\n" +" \"offer-lifetime\": 0,\n" " \"option-data\": [\n" " {\n" " \"always-send\": false,\n" @@ -5863,7 +5863,7 @@ const char* UNPARSED_CONFIGS[] = { " \"thread-pool-size\": 0\n" " },\n" " \"next-server\": \"0.0.0.0\",\n" -" \"offer-lft\": 0,\n" +" \"offer-lifetime\": 0,\n" " \"option-data\": [\n" " {\n" " \"always-send\": false,\n" @@ -5922,7 +5922,7 @@ const char* UNPARSED_CONFIGS[] = { " \"id\": 1,\n" " \"max-valid-lifetime\": 4000,\n" " \"min-valid-lifetime\": 4000,\n" -" \"offer-lft\": 0,\n" +" \"offer-lifetime\": 0,\n" " \"option-data\": [ ],\n" " \"pools\": [\n" " {\n" @@ -6007,7 +6007,7 @@ const char* UNPARSED_CONFIGS[] = { " \"thread-pool-size\": 0\n" " },\n" " \"next-server\": \"0.0.0.0\",\n" -" \"offer-lft\": 0,\n" +" \"offer-lifetime\": 0,\n" " \"option-data\": [\n" " {\n" " \"always-send\": false,\n" @@ -6130,7 +6130,7 @@ const char* UNPARSED_CONFIGS[] = { " \"thread-pool-size\": 0\n" " },\n" " \"next-server\": \"0.0.0.0\",\n" -" \"offer-lft\": 0,\n" +" \"offer-lifetime\": 0,\n" " \"option-data\": [\n" " {\n" " \"always-send\": false,\n" @@ -6216,7 +6216,7 @@ const char* UNPARSED_CONFIGS[] = { " \"id\": 1,\n" " \"max-valid-lifetime\": 3000,\n" " \"min-valid-lifetime\": 3000,\n" -" \"offer-lft\": 0,\n" +" \"offer-lifetime\": 0,\n" " \"option-data\": [ ],\n" " \"pools\": [\n" " {\n" @@ -6301,7 +6301,7 @@ const char* UNPARSED_CONFIGS[] = { " \"thread-pool-size\": 0\n" " },\n" " \"next-server\": \"0.0.0.0\",\n" -" \"offer-lft\": 0,\n" +" \"offer-lifetime\": 0,\n" " \"option-data\": [\n" " {\n" " \"always-send\": false,\n" @@ -6341,7 +6341,7 @@ const char* UNPARSED_CONFIGS[] = { " \"id\": 1,\n" " \"max-valid-lifetime\": 4000,\n" " \"min-valid-lifetime\": 4000,\n" -" \"offer-lft\": 0,\n" +" \"offer-lifetime\": 0,\n" " \"option-data\": [\n" " {\n" " \"always-send\": false,\n" @@ -6445,7 +6445,7 @@ const char* UNPARSED_CONFIGS[] = { " \"thread-pool-size\": 0\n" " },\n" " \"next-server\": \"0.0.0.0\",\n" -" \"offer-lft\": 0,\n" +" \"offer-lifetime\": 0,\n" " \"option-data\": [ ],\n" " \"option-def\": [ ],\n" " \"parked-packet-limit\": 256,\n" @@ -6475,7 +6475,7 @@ const char* UNPARSED_CONFIGS[] = { " \"id\": 1,\n" " \"max-valid-lifetime\": 4000,\n" " \"min-valid-lifetime\": 4000,\n" -" \"offer-lft\": 0,\n" +" \"offer-lifetime\": 0,\n" " \"option-data\": [\n" " {\n" " \"always-send\": false,\n" @@ -6514,7 +6514,7 @@ const char* UNPARSED_CONFIGS[] = { " \"id\": 2,\n" " \"max-valid-lifetime\": 4000,\n" " \"min-valid-lifetime\": 4000,\n" -" \"offer-lft\": 0,\n" +" \"offer-lifetime\": 0,\n" " \"option-data\": [\n" " {\n" " \"always-send\": false,\n" @@ -6609,7 +6609,7 @@ const char* UNPARSED_CONFIGS[] = { " \"thread-pool-size\": 0\n" " },\n" " \"next-server\": \"0.0.0.0\",\n" -" \"offer-lft\": 0,\n" +" \"offer-lifetime\": 0,\n" " \"option-data\": [ ],\n" " \"option-def\": [ ],\n" " \"parked-packet-limit\": 256,\n" @@ -6639,7 +6639,7 @@ const char* UNPARSED_CONFIGS[] = { " \"id\": 1,\n" " \"max-valid-lifetime\": 4000,\n" " \"min-valid-lifetime\": 4000,\n" -" \"offer-lft\": 0,\n" +" \"offer-lifetime\": 0,\n" " \"option-data\": [ ],\n" " \"pools\": [\n" " {\n" @@ -6743,7 +6743,7 @@ const char* UNPARSED_CONFIGS[] = { " \"thread-pool-size\": 0\n" " },\n" " \"next-server\": \"0.0.0.0\",\n" -" \"offer-lft\": 0,\n" +" \"offer-lifetime\": 0,\n" " \"option-data\": [ ],\n" " \"option-def\": [ ],\n" " \"parked-packet-limit\": 256,\n" @@ -6773,7 +6773,7 @@ const char* UNPARSED_CONFIGS[] = { " \"id\": 1,\n" " \"max-valid-lifetime\": 4000,\n" " \"min-valid-lifetime\": 4000,\n" -" \"offer-lft\": 0,\n" +" \"offer-lifetime\": 0,\n" " \"option-data\": [ ],\n" " \"pools\": [\n" " {\n" @@ -6882,7 +6882,7 @@ const char* UNPARSED_CONFIGS[] = { " \"thread-pool-size\": 0\n" " },\n" " \"next-server\": \"0.0.0.0\",\n" -" \"offer-lft\": 0,\n" +" \"offer-lifetime\": 0,\n" " \"option-data\": [\n" " {\n" " \"always-send\": false,\n" @@ -6931,7 +6931,7 @@ const char* UNPARSED_CONFIGS[] = { " \"id\": 1,\n" " \"max-valid-lifetime\": 4000,\n" " \"min-valid-lifetime\": 4000,\n" -" \"offer-lft\": 0,\n" +" \"offer-lifetime\": 0,\n" " \"option-data\": [ ],\n" " \"pools\": [\n" " {\n" @@ -7016,7 +7016,7 @@ const char* UNPARSED_CONFIGS[] = { " \"thread-pool-size\": 0\n" " },\n" " \"next-server\": \"0.0.0.0\",\n" -" \"offer-lft\": 0,\n" +" \"offer-lifetime\": 0,\n" " \"option-data\": [\n" " {\n" " \"always-send\": false,\n" @@ -7139,7 +7139,7 @@ const char* UNPARSED_CONFIGS[] = { " \"thread-pool-size\": 0\n" " },\n" " \"next-server\": \"0.0.0.0\",\n" -" \"offer-lft\": 0,\n" +" \"offer-lifetime\": 0,\n" " \"option-data\": [\n" " {\n" " \"always-send\": false,\n" @@ -7216,7 +7216,7 @@ const char* UNPARSED_CONFIGS[] = { " \"id\": 1,\n" " \"max-valid-lifetime\": 3000,\n" " \"min-valid-lifetime\": 3000,\n" -" \"offer-lft\": 0,\n" +" \"offer-lifetime\": 0,\n" " \"option-data\": [ ],\n" " \"pools\": [\n" " {\n" @@ -7301,7 +7301,7 @@ const char* UNPARSED_CONFIGS[] = { " \"thread-pool-size\": 0\n" " },\n" " \"next-server\": \"0.0.0.0\",\n" -" \"offer-lft\": 0,\n" +" \"offer-lifetime\": 0,\n" " \"option-data\": [\n" " {\n" " \"always-send\": false,\n" @@ -7348,7 +7348,7 @@ const char* UNPARSED_CONFIGS[] = { " \"id\": 1,\n" " \"max-valid-lifetime\": 4000,\n" " \"min-valid-lifetime\": 4000,\n" -" \"offer-lft\": 0,\n" +" \"offer-lifetime\": 0,\n" " \"option-data\": [ ],\n" " \"pools\": [\n" " {\n" @@ -7433,7 +7433,7 @@ const char* UNPARSED_CONFIGS[] = { " \"thread-pool-size\": 0\n" " },\n" " \"next-server\": \"0.0.0.0\",\n" -" \"offer-lft\": 0,\n" +" \"offer-lifetime\": 0,\n" " \"option-data\": [\n" " {\n" " \"always-send\": false,\n" @@ -7483,7 +7483,7 @@ const char* UNPARSED_CONFIGS[] = { " \"id\": 1,\n" " \"max-valid-lifetime\": 4000,\n" " \"min-valid-lifetime\": 4000,\n" -" \"offer-lft\": 0,\n" +" \"offer-lifetime\": 0,\n" " \"option-data\": [ ],\n" " \"pools\": [\n" " {\n" @@ -7568,7 +7568,7 @@ const char* UNPARSED_CONFIGS[] = { " \"thread-pool-size\": 0\n" " },\n" " \"next-server\": \"0.0.0.0\",\n" -" \"offer-lft\": 0,\n" +" \"offer-lifetime\": 0,\n" " \"option-data\": [ ],\n" " \"option-def\": [ ],\n" " \"parked-packet-limit\": 256,\n" @@ -7653,7 +7653,7 @@ const char* UNPARSED_CONFIGS[] = { " \"thread-pool-size\": 0\n" " },\n" " \"next-server\": \"0.0.0.0\",\n" -" \"offer-lft\": 0,\n" +" \"offer-lifetime\": 0,\n" " \"option-data\": [ ],\n" " \"option-def\": [ ],\n" " \"parked-packet-limit\": 256,\n" @@ -7738,7 +7738,7 @@ const char* UNPARSED_CONFIGS[] = { " \"thread-pool-size\": 0\n" " },\n" " \"next-server\": \"0.0.0.0\",\n" -" \"offer-lft\": 0,\n" +" \"offer-lifetime\": 0,\n" " \"option-data\": [ ],\n" " \"option-def\": [ ],\n" " \"parked-packet-limit\": 256,\n" @@ -7768,7 +7768,7 @@ const char* UNPARSED_CONFIGS[] = { " \"id\": 1,\n" " \"max-valid-lifetime\": 4000,\n" " \"min-valid-lifetime\": 4000,\n" -" \"offer-lft\": 0,\n" +" \"offer-lifetime\": 0,\n" " \"option-data\": [ ],\n" " \"pools\": [\n" " {\n" @@ -7853,7 +7853,7 @@ const char* UNPARSED_CONFIGS[] = { " \"thread-pool-size\": 0\n" " },\n" " \"next-server\": \"0.0.0.0\",\n" -" \"offer-lft\": 0,\n" +" \"offer-lifetime\": 0,\n" " \"option-data\": [ ],\n" " \"option-def\": [ ],\n" " \"parked-packet-limit\": 256,\n" @@ -7883,7 +7883,7 @@ const char* UNPARSED_CONFIGS[] = { " \"id\": 1,\n" " \"max-valid-lifetime\": 4000,\n" " \"min-valid-lifetime\": 4000,\n" -" \"offer-lft\": 0,\n" +" \"offer-lifetime\": 0,\n" " \"option-data\": [ ],\n" " \"pools\": [\n" " {\n" @@ -7968,7 +7968,7 @@ const char* UNPARSED_CONFIGS[] = { " \"thread-pool-size\": 0\n" " },\n" " \"next-server\": \"0.0.0.0\",\n" -" \"offer-lft\": 0,\n" +" \"offer-lifetime\": 0,\n" " \"option-data\": [ ],\n" " \"option-def\": [ ],\n" " \"parked-packet-limit\": 256,\n" @@ -7998,7 +7998,7 @@ const char* UNPARSED_CONFIGS[] = { " \"id\": 1,\n" " \"max-valid-lifetime\": 4000,\n" " \"min-valid-lifetime\": 4000,\n" -" \"offer-lft\": 0,\n" +" \"offer-lifetime\": 0,\n" " \"option-data\": [ ],\n" " \"pools\": [\n" " {\n" @@ -8083,7 +8083,7 @@ const char* UNPARSED_CONFIGS[] = { " \"thread-pool-size\": 0\n" " },\n" " \"next-server\": \"0.0.0.0\",\n" -" \"offer-lft\": 0,\n" +" \"offer-lifetime\": 0,\n" " \"option-data\": [ ],\n" " \"option-def\": [ ],\n" " \"parked-packet-limit\": 256,\n" @@ -8113,7 +8113,7 @@ const char* UNPARSED_CONFIGS[] = { " \"id\": 1,\n" " \"max-valid-lifetime\": 4,\n" " \"min-valid-lifetime\": 4,\n" -" \"offer-lft\": 0,\n" +" \"offer-lifetime\": 0,\n" " \"option-data\": [ ],\n" " \"pools\": [\n" " {\n" @@ -8198,7 +8198,7 @@ const char* UNPARSED_CONFIGS[] = { " \"thread-pool-size\": 0\n" " },\n" " \"next-server\": \"0.0.0.0\",\n" -" \"offer-lft\": 0,\n" +" \"offer-lifetime\": 0,\n" " \"option-data\": [ ],\n" " \"option-def\": [ ],\n" " \"parked-packet-limit\": 256,\n" @@ -8228,7 +8228,7 @@ const char* UNPARSED_CONFIGS[] = { " \"id\": 1,\n" " \"max-valid-lifetime\": 4,\n" " \"min-valid-lifetime\": 4,\n" -" \"offer-lft\": 0,\n" +" \"offer-lifetime\": 0,\n" " \"option-data\": [ ],\n" " \"pools\": [\n" " {\n" @@ -8313,7 +8313,7 @@ const char* UNPARSED_CONFIGS[] = { " \"thread-pool-size\": 0\n" " },\n" " \"next-server\": \"0.0.0.0\",\n" -" \"offer-lft\": 0,\n" +" \"offer-lifetime\": 0,\n" " \"option-data\": [ ],\n" " \"option-def\": [ ],\n" " \"parked-packet-limit\": 256,\n" @@ -8344,7 +8344,7 @@ const char* UNPARSED_CONFIGS[] = { " \"id\": 1,\n" " \"max-valid-lifetime\": 4000,\n" " \"min-valid-lifetime\": 4000,\n" -" \"offer-lft\": 0,\n" +" \"offer-lifetime\": 0,\n" " \"option-data\": [ ],\n" " \"pools\": [\n" " {\n" @@ -8374,7 +8374,7 @@ const char* UNPARSED_CONFIGS[] = { " \"id\": 2,\n" " \"max-valid-lifetime\": 4000,\n" " \"min-valid-lifetime\": 4000,\n" -" \"offer-lft\": 0,\n" +" \"offer-lifetime\": 0,\n" " \"option-data\": [ ],\n" " \"pools\": [\n" " {\n" @@ -8404,7 +8404,7 @@ const char* UNPARSED_CONFIGS[] = { " \"id\": 3,\n" " \"max-valid-lifetime\": 4000,\n" " \"min-valid-lifetime\": 4000,\n" -" \"offer-lft\": 0,\n" +" \"offer-lifetime\": 0,\n" " \"option-data\": [ ],\n" " \"pools\": [\n" " {\n" @@ -8433,7 +8433,7 @@ const char* UNPARSED_CONFIGS[] = { " \"id\": 4,\n" " \"max-valid-lifetime\": 4000,\n" " \"min-valid-lifetime\": 4000,\n" -" \"offer-lft\": 0,\n" +" \"offer-lifetime\": 0,\n" " \"option-data\": [ ],\n" " \"pools\": [\n" " {\n" @@ -8518,7 +8518,7 @@ const char* UNPARSED_CONFIGS[] = { " \"thread-pool-size\": 0\n" " },\n" " \"next-server\": \"0.0.0.0\",\n" -" \"offer-lft\": 0,\n" +" \"offer-lifetime\": 0,\n" " \"option-data\": [ ],\n" " \"option-def\": [ ],\n" " \"parked-packet-limit\": 256,\n" @@ -8548,7 +8548,7 @@ const char* UNPARSED_CONFIGS[] = { " \"id\": 1,\n" " \"max-valid-lifetime\": 4000,\n" " \"min-valid-lifetime\": 4000,\n" -" \"offer-lft\": 0,\n" +" \"offer-lifetime\": 0,\n" " \"option-data\": [ ],\n" " \"pools\": [\n" " {\n" @@ -8648,7 +8648,7 @@ const char* UNPARSED_CONFIGS[] = { " \"thread-pool-size\": 0\n" " },\n" " \"next-server\": \"0.0.0.0\",\n" -" \"offer-lft\": 0,\n" +" \"offer-lifetime\": 0,\n" " \"option-data\": [ ],\n" " \"option-def\": [ ],\n" " \"parked-packet-limit\": 256,\n" @@ -8678,7 +8678,7 @@ const char* UNPARSED_CONFIGS[] = { " \"id\": 123,\n" " \"max-valid-lifetime\": 4000,\n" " \"min-valid-lifetime\": 4000,\n" -" \"offer-lft\": 0,\n" +" \"offer-lifetime\": 0,\n" " \"option-data\": [ ],\n" " \"pools\": [\n" " {\n" @@ -8707,7 +8707,7 @@ const char* UNPARSED_CONFIGS[] = { " \"id\": 234,\n" " \"max-valid-lifetime\": 4000,\n" " \"min-valid-lifetime\": 4000,\n" -" \"offer-lft\": 0,\n" +" \"offer-lifetime\": 0,\n" " \"option-data\": [ ],\n" " \"pools\": [\n" " {\n" @@ -8795,7 +8795,7 @@ const char* UNPARSED_CONFIGS[] = { " \"id\": 542,\n" " \"max-valid-lifetime\": 4000,\n" " \"min-valid-lifetime\": 4000,\n" -" \"offer-lft\": 0,\n" +" \"offer-lifetime\": 0,\n" " \"option-data\": [ ],\n" " \"pools\": [\n" " {\n" @@ -8930,7 +8930,7 @@ const char* UNPARSED_CONFIGS[] = { " \"thread-pool-size\": 0\n" " },\n" " \"next-server\": \"0.0.0.0\",\n" -" \"offer-lft\": 0,\n" +" \"offer-lifetime\": 0,\n" " \"option-data\": [ ],\n" " \"option-def\": [\n" " {\n" @@ -8970,7 +8970,7 @@ const char* UNPARSED_CONFIGS[] = { " \"id\": 234,\n" " \"max-valid-lifetime\": 4000,\n" " \"min-valid-lifetime\": 4000,\n" -" \"offer-lft\": 0,\n" +" \"offer-lifetime\": 0,\n" " \"option-data\": [ ],\n" " \"pools\": [\n" " {\n" @@ -9076,7 +9076,7 @@ const char* UNPARSED_CONFIGS[] = { " \"thread-pool-size\": 0\n" " },\n" " \"next-server\": \"0.0.0.0\",\n" -" \"offer-lft\": 0,\n" +" \"offer-lifetime\": 0,\n" " \"option-data\": [ ],\n" " \"option-def\": [ ],\n" " \"parked-packet-limit\": 256,\n" @@ -9106,7 +9106,7 @@ const char* UNPARSED_CONFIGS[] = { " \"id\": 1,\n" " \"max-valid-lifetime\": 4000,\n" " \"min-valid-lifetime\": 4000,\n" -" \"offer-lft\": 0,\n" +" \"offer-lifetime\": 0,\n" " \"option-data\": [ ],\n" " \"pools\": [\n" " {\n" @@ -9138,7 +9138,7 @@ const char* UNPARSED_CONFIGS[] = { " \"id\": 2,\n" " \"max-valid-lifetime\": 4000,\n" " \"min-valid-lifetime\": 4000,\n" -" \"offer-lft\": 0,\n" +" \"offer-lifetime\": 0,\n" " \"option-data\": [ ],\n" " \"pools\": [\n" " {\n" @@ -9170,7 +9170,7 @@ const char* UNPARSED_CONFIGS[] = { " \"id\": 3,\n" " \"max-valid-lifetime\": 4000,\n" " \"min-valid-lifetime\": 4000,\n" -" \"offer-lft\": 0,\n" +" \"offer-lifetime\": 0,\n" " \"option-data\": [ ],\n" " \"pools\": [\n" " {\n" @@ -9201,7 +9201,7 @@ const char* UNPARSED_CONFIGS[] = { " \"id\": 4,\n" " \"max-valid-lifetime\": 4000,\n" " \"min-valid-lifetime\": 4000,\n" -" \"offer-lft\": 0,\n" +" \"offer-lifetime\": 0,\n" " \"option-data\": [ ],\n" " \"pools\": [\n" " {\n" @@ -9232,7 +9232,7 @@ const char* UNPARSED_CONFIGS[] = { " \"id\": 5,\n" " \"max-valid-lifetime\": 4000,\n" " \"min-valid-lifetime\": 4000,\n" -" \"offer-lft\": 0,\n" +" \"offer-lifetime\": 0,\n" " \"option-data\": [ ],\n" " \"pools\": [\n" " {\n" @@ -9261,7 +9261,7 @@ const char* UNPARSED_CONFIGS[] = { " \"id\": 6,\n" " \"max-valid-lifetime\": 4000,\n" " \"min-valid-lifetime\": 4000,\n" -" \"offer-lft\": 0,\n" +" \"offer-lifetime\": 0,\n" " \"option-data\": [ ],\n" " \"pools\": [\n" " {\n" @@ -9293,7 +9293,7 @@ const char* UNPARSED_CONFIGS[] = { " \"id\": 7,\n" " \"max-valid-lifetime\": 4000,\n" " \"min-valid-lifetime\": 4000,\n" -" \"offer-lft\": 0,\n" +" \"offer-lifetime\": 0,\n" " \"option-data\": [ ],\n" " \"pools\": [\n" " {\n" @@ -9381,7 +9381,7 @@ const char* UNPARSED_CONFIGS[] = { " \"thread-pool-size\": 0\n" " },\n" " \"next-server\": \"0.0.0.0\",\n" -" \"offer-lft\": 0,\n" +" \"offer-lifetime\": 0,\n" " \"option-data\": [ ],\n" " \"option-def\": [ ],\n" " \"parked-packet-limit\": 256,\n" @@ -9411,7 +9411,7 @@ const char* UNPARSED_CONFIGS[] = { " \"id\": 1,\n" " \"max-valid-lifetime\": 4000,\n" " \"min-valid-lifetime\": 4000,\n" -" \"offer-lft\": 0,\n" +" \"offer-lifetime\": 0,\n" " \"option-data\": [ ],\n" " \"pools\": [\n" " {\n" @@ -9443,7 +9443,7 @@ const char* UNPARSED_CONFIGS[] = { " \"id\": 2,\n" " \"max-valid-lifetime\": 4000,\n" " \"min-valid-lifetime\": 4000,\n" -" \"offer-lft\": 0,\n" +" \"offer-lifetime\": 0,\n" " \"option-data\": [ ],\n" " \"pools\": [\n" " {\n" @@ -9528,7 +9528,7 @@ const char* UNPARSED_CONFIGS[] = { " \"thread-pool-size\": 0\n" " },\n" " \"next-server\": \"0.0.0.0\",\n" -" \"offer-lft\": 0,\n" +" \"offer-lifetime\": 0,\n" " \"option-data\": [ ],\n" " \"option-def\": [ ],\n" " \"parked-packet-limit\": 256,\n" @@ -9611,7 +9611,7 @@ const char* UNPARSED_CONFIGS[] = { " \"thread-pool-size\": 0\n" " },\n" " \"next-server\": \"0.0.0.0\",\n" -" \"offer-lft\": 0,\n" +" \"offer-lifetime\": 0,\n" " \"option-data\": [ ],\n" " \"option-def\": [ ],\n" " \"parked-packet-limit\": 256,\n" @@ -9694,7 +9694,7 @@ const char* UNPARSED_CONFIGS[] = { " \"thread-pool-size\": 0\n" " },\n" " \"next-server\": \"0.0.0.0\",\n" -" \"offer-lft\": 0,\n" +" \"offer-lifetime\": 0,\n" " \"option-data\": [ ],\n" " \"option-def\": [ ],\n" " \"parked-packet-limit\": 256,\n" @@ -9777,7 +9777,7 @@ const char* UNPARSED_CONFIGS[] = { " \"thread-pool-size\": 0\n" " },\n" " \"next-server\": \"0.0.0.0\",\n" -" \"offer-lft\": 0,\n" +" \"offer-lifetime\": 0,\n" " \"option-data\": [ ],\n" " \"option-def\": [ ],\n" " \"parked-packet-limit\": 256,\n" @@ -9860,7 +9860,7 @@ const char* UNPARSED_CONFIGS[] = { " \"thread-pool-size\": 0\n" " },\n" " \"next-server\": \"0.0.0.0\",\n" -" \"offer-lft\": 0,\n" +" \"offer-lifetime\": 0,\n" " \"option-data\": [ ],\n" " \"option-def\": [ ],\n" " \"parked-packet-limit\": 256,\n" @@ -9890,7 +9890,7 @@ const char* UNPARSED_CONFIGS[] = { " \"id\": 1,\n" " \"max-valid-lifetime\": 4000,\n" " \"min-valid-lifetime\": 4000,\n" -" \"offer-lft\": 0,\n" +" \"offer-lifetime\": 0,\n" " \"option-data\": [ ],\n" " \"pools\": [\n" " {\n" @@ -9975,7 +9975,7 @@ const char* UNPARSED_CONFIGS[] = { " \"thread-pool-size\": 0\n" " },\n" " \"next-server\": \"0.0.0.0\",\n" -" \"offer-lft\": 0,\n" +" \"offer-lifetime\": 0,\n" " \"option-data\": [ ],\n" " \"option-def\": [ ],\n" " \"parked-packet-limit\": 256,\n" @@ -10005,7 +10005,7 @@ const char* UNPARSED_CONFIGS[] = { " \"id\": 1,\n" " \"max-valid-lifetime\": 4000,\n" " \"min-valid-lifetime\": 4000,\n" -" \"offer-lft\": 0,\n" +" \"offer-lifetime\": 0,\n" " \"option-data\": [ ],\n" " \"pools\": [\n" " {\n" @@ -10090,7 +10090,7 @@ const char* UNPARSED_CONFIGS[] = { " \"thread-pool-size\": 0\n" " },\n" " \"next-server\": \"0.0.0.0\",\n" -" \"offer-lft\": 0,\n" +" \"offer-lifetime\": 0,\n" " \"option-data\": [ ],\n" " \"option-def\": [ ],\n" " \"parked-packet-limit\": 256,\n" @@ -10120,7 +10120,7 @@ const char* UNPARSED_CONFIGS[] = { " \"id\": 1,\n" " \"max-valid-lifetime\": 4000,\n" " \"min-valid-lifetime\": 4000,\n" -" \"offer-lft\": 0,\n" +" \"offer-lifetime\": 0,\n" " \"option-data\": [ ],\n" " \"pools\": [\n" " {\n" @@ -10205,7 +10205,7 @@ const char* UNPARSED_CONFIGS[] = { " \"thread-pool-size\": 0\n" " },\n" " \"next-server\": \"0.0.0.0\",\n" -" \"offer-lft\": 0,\n" +" \"offer-lifetime\": 0,\n" " \"option-data\": [ ],\n" " \"option-def\": [ ],\n" " \"parked-packet-limit\": 256,\n" @@ -10235,7 +10235,7 @@ const char* UNPARSED_CONFIGS[] = { " \"id\": 1,\n" " \"max-valid-lifetime\": 4000,\n" " \"min-valid-lifetime\": 4000,\n" -" \"offer-lft\": 0,\n" +" \"offer-lifetime\": 0,\n" " \"option-data\": [ ],\n" " \"pools\": [\n" " {\n" @@ -10320,7 +10320,7 @@ const char* UNPARSED_CONFIGS[] = { " \"thread-pool-size\": 0\n" " },\n" " \"next-server\": \"0.0.0.0\",\n" -" \"offer-lft\": 0,\n" +" \"offer-lifetime\": 0,\n" " \"option-data\": [ ],\n" " \"option-def\": [ ],\n" " \"parked-packet-limit\": 256,\n" @@ -10350,7 +10350,7 @@ const char* UNPARSED_CONFIGS[] = { " \"id\": 1,\n" " \"max-valid-lifetime\": 4000,\n" " \"min-valid-lifetime\": 4000,\n" -" \"offer-lft\": 0,\n" +" \"offer-lifetime\": 0,\n" " \"option-data\": [ ],\n" " \"pools\": [\n" " {\n" @@ -10461,7 +10461,7 @@ const char* UNPARSED_CONFIGS[] = { " \"thread-pool-size\": 0\n" " },\n" " \"next-server\": \"0.0.0.0\",\n" -" \"offer-lft\": 0,\n" +" \"offer-lifetime\": 0,\n" " \"option-data\": [ ],\n" " \"option-def\": [ ],\n" " \"parked-packet-limit\": 256,\n" @@ -10491,7 +10491,7 @@ const char* UNPARSED_CONFIGS[] = { " \"id\": 1,\n" " \"max-valid-lifetime\": 4000,\n" " \"min-valid-lifetime\": 4000,\n" -" \"offer-lft\": 0,\n" +" \"offer-lifetime\": 0,\n" " \"option-data\": [ ],\n" " \"pools\": [\n" " {\n" @@ -10597,7 +10597,7 @@ const char* UNPARSED_CONFIGS[] = { " \"thread-pool-size\": 0\n" " },\n" " \"next-server\": \"0.0.0.0\",\n" -" \"offer-lft\": 0,\n" +" \"offer-lifetime\": 0,\n" " \"option-data\": [ ],\n" " \"option-def\": [ ],\n" " \"parked-packet-limit\": 256,\n" @@ -10625,7 +10625,7 @@ const char* UNPARSED_CONFIGS[] = { " \"id\": 1,\n" " \"max-valid-lifetime\": 7200,\n" " \"min-valid-lifetime\": 7200,\n" -" \"offer-lft\": 0,\n" +" \"offer-lifetime\": 0,\n" " \"option-data\": [ ],\n" " \"pools\": [\n" " {\n" @@ -10731,7 +10731,7 @@ const char* UNPARSED_CONFIGS[] = { " \"thread-pool-size\": 0\n" " },\n" " \"next-server\": \"0.0.0.0\",\n" -" \"offer-lft\": 0,\n" +" \"offer-lifetime\": 0,\n" " \"option-data\": [ ],\n" " \"option-def\": [ ],\n" " \"parked-packet-limit\": 256,\n" @@ -10759,7 +10759,7 @@ const char* UNPARSED_CONFIGS[] = { " \"id\": 1,\n" " \"max-valid-lifetime\": 7200,\n" " \"min-valid-lifetime\": 7200,\n" -" \"offer-lft\": 0,\n" +" \"offer-lifetime\": 0,\n" " \"option-data\": [ ],\n" " \"pools\": [\n" " {\n" @@ -10842,7 +10842,7 @@ const char* UNPARSED_CONFIGS[] = { " \"thread-pool-size\": 0\n" " },\n" " \"next-server\": \"0.0.0.0\",\n" -" \"offer-lft\": 0,\n" +" \"offer-lifetime\": 0,\n" " \"option-data\": [ ],\n" " \"option-def\": [ ],\n" " \"parked-packet-limit\": 256,\n" @@ -10872,7 +10872,7 @@ const char* UNPARSED_CONFIGS[] = { " \"id\": 1,\n" " \"max-valid-lifetime\": 4000,\n" " \"min-valid-lifetime\": 4000,\n" -" \"offer-lft\": 0,\n" +" \"offer-lifetime\": 0,\n" " \"option-data\": [ ],\n" " \"pools\": [\n" " {\n" @@ -10957,7 +10957,7 @@ const char* UNPARSED_CONFIGS[] = { " \"thread-pool-size\": 0\n" " },\n" " \"next-server\": \"0.0.0.0\",\n" -" \"offer-lft\": 0,\n" +" \"offer-lifetime\": 0,\n" " \"option-data\": [ ],\n" " \"option-def\": [ ],\n" " \"parked-packet-limit\": 256,\n" @@ -10987,7 +10987,7 @@ const char* UNPARSED_CONFIGS[] = { " \"id\": 1,\n" " \"max-valid-lifetime\": 4000,\n" " \"min-valid-lifetime\": 4000,\n" -" \"offer-lft\": 0,\n" +" \"offer-lifetime\": 0,\n" " \"option-data\": [ ],\n" " \"pools\": [\n" " {\n" @@ -11073,7 +11073,7 @@ const char* UNPARSED_CONFIGS[] = { " \"thread-pool-size\": 0\n" " },\n" " \"next-server\": \"0.0.0.0\",\n" -" \"offer-lft\": 0,\n" +" \"offer-lifetime\": 0,\n" " \"option-data\": [ ],\n" " \"option-def\": [ ],\n" " \"parked-packet-limit\": 256,\n" @@ -11103,7 +11103,7 @@ const char* UNPARSED_CONFIGS[] = { " \"id\": 1,\n" " \"max-valid-lifetime\": 4000,\n" " \"min-valid-lifetime\": 4000,\n" -" \"offer-lft\": 0,\n" +" \"offer-lifetime\": 0,\n" " \"option-data\": [ ],\n" " \"pools\": [\n" " {\n" @@ -11193,7 +11193,7 @@ const char* UNPARSED_CONFIGS[] = { " \"thread-pool-size\": 0\n" " },\n" " \"next-server\": \"0.0.0.0\",\n" -" \"offer-lft\": 0,\n" +" \"offer-lifetime\": 0,\n" " \"option-data\": [ ],\n" " \"option-def\": [ ],\n" " \"parked-packet-limit\": 256,\n" @@ -11223,7 +11223,7 @@ const char* UNPARSED_CONFIGS[] = { " \"id\": 1,\n" " \"max-valid-lifetime\": 4000,\n" " \"min-valid-lifetime\": 4000,\n" -" \"offer-lft\": 0,\n" +" \"offer-lifetime\": 0,\n" " \"option-data\": [ ],\n" " \"pools\": [\n" " {\n" @@ -11327,7 +11327,7 @@ const char* UNPARSED_CONFIGS[] = { " \"thread-pool-size\": 0\n" " },\n" " \"next-server\": \"0.0.0.0\",\n" -" \"offer-lft\": 0,\n" +" \"offer-lifetime\": 0,\n" " \"option-data\": [ ],\n" " \"option-def\": [ ],\n" " \"parked-packet-limit\": 256,\n" @@ -11459,7 +11459,7 @@ const char* UNPARSED_CONFIGS[] = { " \"thread-pool-size\": 0\n" " },\n" " \"next-server\": \"0.0.0.0\",\n" -" \"offer-lft\": 0,\n" +" \"offer-lifetime\": 0,\n" " \"option-data\": [\n" " {\n" " \"always-send\": false,\n" @@ -11506,7 +11506,7 @@ const char* UNPARSED_CONFIGS[] = { " \"max-valid-lifetime\": 7200,\n" " \"min-valid-lifetime\": 7200,\n" " \"name\": \"foo\",\n" -" \"offer-lft\": 0,\n" +" \"offer-lifetime\": 0,\n" " \"option-data\": [ ],\n" " \"relay\": {\n" " \"ip-addresses\": [ ]\n" @@ -11522,7 +11522,7 @@ const char* UNPARSED_CONFIGS[] = { " \"id\": 100,\n" " \"max-valid-lifetime\": 7200,\n" " \"min-valid-lifetime\": 7200,\n" -" \"offer-lft\": 0,\n" +" \"offer-lifetime\": 0,\n" " \"option-data\": [ ],\n" " \"pools\": [\n" " {\n" @@ -11652,7 +11652,7 @@ const char* UNPARSED_CONFIGS[] = { " \"thread-pool-size\": 0\n" " },\n" " \"next-server\": \"0.0.0.0\",\n" -" \"offer-lft\": 0,\n" +" \"offer-lifetime\": 0,\n" " \"option-data\": [ ],\n" " \"option-def\": [ ],\n" " \"parked-packet-limit\": 256,\n" @@ -11741,7 +11741,7 @@ const char* UNPARSED_CONFIGS[] = { " \"id\": 123,\n" " \"max-valid-lifetime\": 4000,\n" " \"min-valid-lifetime\": 4000,\n" -" \"offer-lft\": 0,\n" +" \"offer-lifetime\": 0,\n" " \"option-data\": [ ],\n" " \"pools\": [\n" " {\n" @@ -11770,7 +11770,7 @@ const char* UNPARSED_CONFIGS[] = { " \"id\": 542,\n" " \"max-valid-lifetime\": 4000,\n" " \"min-valid-lifetime\": 4000,\n" -" \"offer-lft\": 0,\n" +" \"offer-lifetime\": 0,\n" " \"option-data\": [ ],\n" " \"pools\": [\n" " {\n" @@ -11855,7 +11855,7 @@ const char* UNPARSED_CONFIGS[] = { " \"thread-pool-size\": 0\n" " },\n" " \"next-server\": \"0.0.0.0\",\n" -" \"offer-lft\": 0,\n" +" \"offer-lifetime\": 0,\n" " \"option-data\": [ ],\n" " \"option-def\": [ ],\n" " \"parked-packet-limit\": 256,\n" @@ -11876,7 +11876,7 @@ const char* UNPARSED_CONFIGS[] = { " \"max-valid-lifetime\": 4000,\n" " \"min-valid-lifetime\": 4000,\n" " \"name\": \"foo\",\n" -" \"offer-lft\": 0,\n" +" \"offer-lifetime\": 0,\n" " \"option-data\": [ ],\n" " \"relay\": {\n" " \"ip-addresses\": [ ]\n" @@ -11892,7 +11892,7 @@ const char* UNPARSED_CONFIGS[] = { " \"id\": 100,\n" " \"max-valid-lifetime\": 4000,\n" " \"min-valid-lifetime\": 4000,\n" -" \"offer-lft\": 0,\n" +" \"offer-lifetime\": 0,\n" " \"option-data\": [ ],\n" " \"pools\": [\n" " {\n" @@ -11919,7 +11919,7 @@ const char* UNPARSED_CONFIGS[] = { " \"id\": 200,\n" " \"max-valid-lifetime\": 4000,\n" " \"min-valid-lifetime\": 4000,\n" -" \"offer-lft\": 0,\n" +" \"offer-lifetime\": 0,\n" " \"option-data\": [ ],\n" " \"pools\": [\n" " {\n" @@ -11956,7 +11956,7 @@ const char* UNPARSED_CONFIGS[] = { " \"id\": 300,\n" " \"max-valid-lifetime\": 4000,\n" " \"min-valid-lifetime\": 4000,\n" -" \"offer-lft\": 0,\n" +" \"offer-lifetime\": 0,\n" " \"option-data\": [ ],\n" " \"pools\": [\n" " {\n" @@ -12039,7 +12039,7 @@ const char* UNPARSED_CONFIGS[] = { " \"thread-pool-size\": 0\n" " },\n" " \"next-server\": \"0.0.0.0\",\n" -" \"offer-lft\": 0,\n" +" \"offer-lifetime\": 0,\n" " \"option-data\": [ ],\n" " \"option-def\": [ ],\n" " \"parked-packet-limit\": 256,\n" @@ -12069,7 +12069,7 @@ const char* UNPARSED_CONFIGS[] = { " \"id\": 1,\n" " \"max-valid-lifetime\": 4000,\n" " \"min-valid-lifetime\": 4000,\n" -" \"offer-lft\": 0,\n" +" \"offer-lifetime\": 0,\n" " \"option-data\": [ ],\n" " \"pools\": [\n" " {\n" @@ -12098,7 +12098,7 @@ const char* UNPARSED_CONFIGS[] = { " \"id\": 2,\n" " \"max-valid-lifetime\": 4000,\n" " \"min-valid-lifetime\": 4000,\n" -" \"offer-lft\": 0,\n" +" \"offer-lifetime\": 0,\n" " \"option-data\": [ ],\n" " \"pools\": [\n" " {\n" @@ -12183,7 +12183,7 @@ const char* UNPARSED_CONFIGS[] = { " \"thread-pool-size\": 0\n" " },\n" " \"next-server\": \"0.0.0.0\",\n" -" \"offer-lft\": 0,\n" +" \"offer-lifetime\": 0,\n" " \"option-data\": [ ],\n" " \"option-def\": [ ],\n" " \"parked-packet-limit\": 256,\n" @@ -12213,7 +12213,7 @@ const char* UNPARSED_CONFIGS[] = { " \"id\": 1,\n" " \"max-valid-lifetime\": 4000,\n" " \"min-valid-lifetime\": 4000,\n" -" \"offer-lft\": 0,\n" +" \"offer-lifetime\": 0,\n" " \"option-data\": [ ],\n" " \"pools\": [\n" " {\n" @@ -12242,7 +12242,7 @@ const char* UNPARSED_CONFIGS[] = { " \"id\": 2,\n" " \"max-valid-lifetime\": 4000,\n" " \"min-valid-lifetime\": 4000,\n" -" \"offer-lft\": 0,\n" +" \"offer-lifetime\": 0,\n" " \"option-data\": [ ],\n" " \"pools\": [\n" " {\n" @@ -12327,7 +12327,7 @@ const char* UNPARSED_CONFIGS[] = { " \"thread-pool-size\": 0\n" " },\n" " \"next-server\": \"0.0.0.0\",\n" -" \"offer-lft\": 0,\n" +" \"offer-lifetime\": 0,\n" " \"option-data\": [ ],\n" " \"option-def\": [ ],\n" " \"parked-packet-limit\": 256,\n" @@ -12412,7 +12412,7 @@ const char* UNPARSED_CONFIGS[] = { " \"thread-pool-size\": 0\n" " },\n" " \"next-server\": \"0.0.0.0\",\n" -" \"offer-lft\": 0,\n" +" \"offer-lifetime\": 0,\n" " \"option-data\": [ ],\n" " \"option-def\": [ ],\n" " \"parked-packet-limit\": 256,\n" @@ -12495,7 +12495,7 @@ const char* UNPARSED_CONFIGS[] = { " \"thread-pool-size\": 48\n" " },\n" " \"next-server\": \"0.0.0.0\",\n" -" \"offer-lft\": 0,\n" +" \"offer-lifetime\": 0,\n" " \"option-data\": [ ],\n" " \"option-def\": [ ],\n" " \"parked-packet-limit\": 256,\n" diff --git a/src/lib/dhcpsrv/alloc_engine.cc b/src/lib/dhcpsrv/alloc_engine.cc index 8d01430f25..6948742790 100644 --- a/src/lib/dhcpsrv/alloc_engine.cc +++ b/src/lib/dhcpsrv/alloc_engine.cc @@ -3869,8 +3869,6 @@ AllocEngine::getOfferLft(const ClientContext4& ctx) { util::Optional<uint32_t> offer_lft; -#if 0 - /// @todo TKM need this when we add offer-lst to client class. // If specified in one of our classes use it. // We use the first one we find. const ClientClasses classes = ctx.query_->getClasses(); @@ -3889,7 +3887,6 @@ AllocEngine::getOfferLft(const ClientContext4& ctx) { } } } -#endif // If no classes specified it, get it from the subnet. if (offer_lft.unspecified()) { diff --git a/src/lib/dhcpsrv/cfg_globals.cc b/src/lib/dhcpsrv/cfg_globals.cc index 823bfe663a..e267d5856a 100644 --- a/src/lib/dhcpsrv/cfg_globals.cc +++ b/src/lib/dhcpsrv/cfg_globals.cc @@ -59,7 +59,7 @@ CfgGlobals::nameToIndex = { { "next-server", NEXT_SERVER }, { "server-hostname", SERVER_HOSTNAME }, { "boot-file-name", BOOT_FILE_NAME }, - { "offer-lft", OFFER_LFT }, + { "offer-lifetime", OFFER_LIFETIME }, // DHCPv6 specific parameters. { "data-directory", DATA_DIRECTORY }, diff --git a/src/lib/dhcpsrv/cfg_globals.h b/src/lib/dhcpsrv/cfg_globals.h index 20062c87cf..c3c39a5e4b 100644 --- a/src/lib/dhcpsrv/cfg_globals.h +++ b/src/lib/dhcpsrv/cfg_globals.h @@ -82,7 +82,7 @@ public: NEXT_SERVER, SERVER_HOSTNAME, BOOT_FILE_NAME, - OFFER_LFT, + OFFER_LIFETIME, // DHCPv6 specific parameters. DATA_DIRECTORY, diff --git a/src/lib/dhcpsrv/client_class_def.cc b/src/lib/dhcpsrv/client_class_def.cc index bc43ba98c3..25bf9a99b8 100644 --- a/src/lib/dhcpsrv/client_class_def.cc +++ b/src/lib/dhcpsrv/client_class_def.cc @@ -1,4 +1,4 @@ -// Copyright (C) 2015-2022 Internet Systems Consortium, Inc. ("ISC") +// Copyright (C) 2015-2023 Internet Systems Consortium, Inc. ("ISC") // // This Source Code Form is subject to the terms of the Mozilla Public // License, v. 2.0. If a copy of the MPL was not distributed with this @@ -259,6 +259,12 @@ ClientClassDef::toElement() const { result->set("server-hostname", Element::create(sname_)); // Set boot-file-name result->set("boot-file-name", Element::create(filename_)); + + // Set offer-lifetime + if (!offer_lft_.unspecified()) { + result->set("offer-lifetime", + Element::create(static_cast<long long>(offer_lft_.get()))); + } } else { // V6 only // Set preferred-lifetime @@ -346,7 +352,8 @@ ClientClassDictionary::addClass(const std::string& name, const std::string& filename, const util::Triplet<uint32_t>& valid, const util::Triplet<uint32_t>& preferred, - bool is_template) { + bool is_template, + const util::Optional<uint32_t>& offer_lft) { ClientClassDefPtr cclass; if (is_template) { cclass.reset(new TemplateClientClassDef(name, match_expr, cfg_option)); @@ -363,6 +370,7 @@ ClientClassDictionary::addClass(const std::string& name, cclass->setFilename(filename); cclass->setValid(valid); cclass->setPreferred(preferred); + cclass->setOfferLft(offer_lft); addClass(cclass); } diff --git a/src/lib/dhcpsrv/client_class_def.h b/src/lib/dhcpsrv/client_class_def.h index 4e8e981314..80655974de 100644 --- a/src/lib/dhcpsrv/client_class_def.h +++ b/src/lib/dhcpsrv/client_class_def.h @@ -1,4 +1,4 @@ -// Copyright (C) 2015-2022 Internet Systems Consortium, Inc. ("ISC") +// Copyright (C) 2015-2023 Internet Systems Consortium, Inc. ("ISC") // // This Source Code Form is subject to the terms of the Mozilla Public // License, v. 2.0. If a copy of the MPL was not distributed with this @@ -12,9 +12,10 @@ #include <cc/user_context.h> #include <dhcpsrv/cfg_option.h> #include <dhcpsrv/cfg_option_def.h> -#include <util/triplet.h> #include <eval/token.h> #include <exceptions/exceptions.h> +#include <util/triplet.h> +#include <util/optional.h> #include <string> #include <unordered_map> @@ -221,6 +222,21 @@ public: preferred_ = preferred; } + /// @brief Sets offer lifetime for the class. + /// + /// Will be used for the offer lifetime (may be empty if not defined) + void setOfferLft(const util::Optional<uint32_t>& offer_lft) { + offer_lft_ = offer_lft; + } + + /// @brief Returns offer lifetime for the class. + /// + /// @param inheritance inheritance mode to be used. + /// @return offer lifetime value + util::Optional<uint32_t> getOfferLft() const { + return (offer_lft_); + } + /// @brief Test method which checks if the packet belongs to the class /// /// If the packet belongs to the class, the class is added to the packet. @@ -289,6 +305,9 @@ private: /// @brief a Triplet (min/default/max) holding allowed preferred lifetime values util::Triplet<uint32_t> preferred_; + + /// @brief offer lifetime for this class (V4 only). + util::Optional<uint32_t> offer_lft_; }; class TemplateClientClassDef : public ClientClassDef { @@ -377,9 +396,10 @@ public: asiolink::IOAddress next_server = asiolink::IOAddress("0.0.0.0"), const std::string& sname = std::string(), const std::string& filename = std::string(), - const util::Triplet<uint32_t>&valid = util::Triplet<uint32_t>(), - const util::Triplet<uint32_t>&preferred = util::Triplet<uint32_t>(), - bool is_template = false); + const util::Triplet<uint32_t>& valid = util::Triplet<uint32_t>(), + const util::Triplet<uint32_t>& preferred = util::Triplet<uint32_t>(), + bool is_template = false, + const util::Optional<uint32_t>& offer_lft = util::Optional<uint32_t>()); /// @brief Adds a new class to the list /// diff --git a/src/lib/dhcpsrv/network.cc b/src/lib/dhcpsrv/network.cc index ccb002f502..f56e8dfa6e 100644 --- a/src/lib/dhcpsrv/network.cc +++ b/src/lib/dhcpsrv/network.cc @@ -320,9 +320,9 @@ Network4::toElement() const { map->set("boot-file-name",Element::create(filename_.get())); } - // Set offer-lft + // Set offer-lifetime if (!offer_lft_.unspecified()) { - map->set("offer-lft",Element::create(offer_lft_.get())); + map->set("offer-lifetime",Element::create(offer_lft_.get())); } return (map); diff --git a/src/lib/dhcpsrv/network.h b/src/lib/dhcpsrv/network.h index 8f2acff806..e6b81bfc25 100644 --- a/src/lib/dhcpsrv/network.h +++ b/src/lib/dhcpsrv/network.h @@ -1325,7 +1325,7 @@ public: getOfferLft(const Inheritance& inheritance = Inheritance::ALL) const { return (getProperty<Network4>(&Network4::getOfferLft, offer_lft_, inheritance, - CfgGlobals::OFFER_LFT)); + CfgGlobals::OFFER_LIFETIME)); } /// @brief Unparses network object. diff --git a/src/lib/dhcpsrv/parsers/base_network_parser.cc b/src/lib/dhcpsrv/parsers/base_network_parser.cc index 0358b30fb9..69b79eb24c 100644 --- a/src/lib/dhcpsrv/parsers/base_network_parser.cc +++ b/src/lib/dhcpsrv/parsers/base_network_parser.cc @@ -301,12 +301,12 @@ BaseNetworkParser::parsePdAllocatorParams(const data::ConstElementPtr& network_d void BaseNetworkParser::parseOfferLft(const data::ConstElementPtr& network_data, Network4Ptr& network) { - if (network_data->contains("offer-lft")) { - auto value = getInteger(network_data, "offer-lft"); + if (network_data->contains("offer-lifetime")) { + auto value = getInteger(network_data, "offer-lifetime"); if (value < 0) { - isc_throw(DhcpConfigError, "the value of offer-lft '" + isc_throw(DhcpConfigError, "the value of offer-lifetime '" << value << "' must be a positive number (" - << getPosition("offer-lft", network_data) << ")"); + << getPosition("offer-lifetime", network_data) << ")"); } network->setOfferLft(value); diff --git a/src/lib/dhcpsrv/parsers/base_network_parser.h b/src/lib/dhcpsrv/parsers/base_network_parser.h index 36b44c0ba6..b2359f83bd 100644 --- a/src/lib/dhcpsrv/parsers/base_network_parser.h +++ b/src/lib/dhcpsrv/parsers/base_network_parser.h @@ -131,7 +131,7 @@ protected: void parsePdAllocatorParams(const data::ConstElementPtr& network_data, Network6Ptr& network); - /// @brief Parses offer-lft parameter (v4 only) + /// @brief Parses offer-lifetime parameter (v4 only) /// /// @param network_data Data element holding shared network /// configuration to be parsed. diff --git a/src/lib/dhcpsrv/parsers/client_class_def_parser.cc b/src/lib/dhcpsrv/parsers/client_class_def_parser.cc index 162977f2f4..f1a1a1fc61 100644 --- a/src/lib/dhcpsrv/parsers/client_class_def_parser.cc +++ b/src/lib/dhcpsrv/parsers/client_class_def_parser.cc @@ -229,6 +229,18 @@ ClientClassDefParser::parse(ClientClassDictionaryPtr& class_dictionary, } } + Optional<uint32_t> offer_lft; + if (class_def_cfg->contains("offer-lifetime")) { + auto value = getInteger(class_def_cfg, "offer-lifetime"); + if (value < 0) { + isc_throw(DhcpConfigError, "the value of offer-lifetime '" + << value << "' must be a positive number (" + << getPosition("offer-lifetime", class_def_cfg) << ")"); + } + + offer_lft = value; + } + // Parse valid lifetime triplet. Triplet<uint32_t> valid_lft = parseIntTriplet(class_def_cfg, "valid-lifetime"); @@ -266,7 +278,7 @@ ClientClassDefParser::parse(ClientClassDictionaryPtr& class_dictionary, class_dictionary->addClass(name, match_expr, test, required, depend_on_known, options, defs, user_context, next_server, sname, filename, - valid_lft, preferred_lft, is_template); + valid_lft, preferred_lft, is_template, offer_lft); } catch (const std::exception& ex) { std::ostringstream s; s << "Can't add class: " << ex.what(); diff --git a/src/lib/dhcpsrv/parsers/dhcp_parsers.cc b/src/lib/dhcpsrv/parsers/dhcp_parsers.cc index a4867e7470..6053d722c3 100644 --- a/src/lib/dhcpsrv/parsers/dhcp_parsers.cc +++ b/src/lib/dhcpsrv/parsers/dhcp_parsers.cc @@ -961,12 +961,12 @@ Subnet4ConfigParser::initSubnet(data::ConstElementPtr params, parseCacheParams(params, network); // Set the offer_lft value for the subnet. - if (params->contains("offer-lft")) { - uint32_t offer_lft = getInteger(params, "offer-lft"); + if (params->contains("offer-lifetime")) { + uint32_t offer_lft = getInteger(params, "offer-lifetime"); subnet4->setOfferLft(offer_lft); } - // Parse offer-lft parameter. + // Parse offer-lifetime parameter. Network4Ptr network4 = boost::dynamic_pointer_cast<Network4>(subnet4); parseOfferLft(params, network4); diff --git a/src/lib/dhcpsrv/parsers/shared_network_parser.cc b/src/lib/dhcpsrv/parsers/shared_network_parser.cc index 6a10391480..0e8dcb42b8 100644 --- a/src/lib/dhcpsrv/parsers/shared_network_parser.cc +++ b/src/lib/dhcpsrv/parsers/shared_network_parser.cc @@ -201,7 +201,7 @@ SharedNetwork4Parser::parse(const data::ConstElementPtr& shared_network_data) { // Parse allocator params. parseAllocatorParams(shared_network_data, network); - // Parse offer-lft parameter. + // Parse offer-lifetime parameter. Network4Ptr network4 = boost::dynamic_pointer_cast<Network4>(shared_network); parseOfferLft(shared_network_data, network4); diff --git a/src/lib/dhcpsrv/parsers/simple_parser4.cc b/src/lib/dhcpsrv/parsers/simple_parser4.cc index ea8f13b066..b3c44f103c 100644 --- a/src/lib/dhcpsrv/parsers/simple_parser4.cc +++ b/src/lib/dhcpsrv/parsers/simple_parser4.cc @@ -100,7 +100,7 @@ const SimpleKeywords SimpleParser4::GLOBAL4_PARAMETERS = { { "compatibility", Element::map }, { "parked-packet-limit", Element::integer }, { "allocator", Element::string }, - { "offer-lft", Element::integer }, + { "offer-lifetime", Element::integer }, }; /// @brief This table defines default global values for DHCPv4 @@ -143,7 +143,7 @@ const SimpleDefaults SimpleParser4::GLOBAL4_DEFAULTS = { { "ddns-use-conflict-resolution", Element::boolean, "true" }, { "parked-packet-limit", Element::integer, "256" }, { "allocator", Element::string, "iterative" }, - { "offer-lft", Element::integer, "0" }, + { "offer-lifetime", Element::integer, "0" }, }; /// @brief This table defines all option definition parameters. @@ -257,7 +257,7 @@ const SimpleKeywords SimpleParser4::SUBNET4_PARAMETERS = { { "ddns-update-on-renew", Element::boolean }, { "ddns-use-conflict-resolution", Element::boolean }, { "allocator", Element::string }, - { "offer-lft", Element::integer } + { "offer-lifetime", Element::integer } }; /// @brief This table defines default values for each IPv4 subnet. @@ -312,7 +312,7 @@ const ParamsList SimpleParser4::INHERIT_TO_SUBNET4 = { "cache-threshold", "cache-max-age", "allocator", - "offer-lft", + "offer-lifetime", }; /// @brief This table defines all pool parameters. @@ -377,7 +377,7 @@ const SimpleKeywords SimpleParser4::SHARED_NETWORK4_PARAMETERS = { { "ddns-update-on-renew", Element::boolean }, { "ddns-use-conflict-resolution", Element::boolean }, { "allocator", Element::string }, - { "offer-lft", Element::integer } + { "offer-lifetime", Element::integer } }; /// @brief This table defines default values for each IPv4 shared network. diff --git a/src/lib/dhcpsrv/tests/alloc_engine4_unittest.cc b/src/lib/dhcpsrv/tests/alloc_engine4_unittest.cc index a09e6873a6..d2e650d913 100644 --- a/src/lib/dhcpsrv/tests/alloc_engine4_unittest.cc +++ b/src/lib/dhcpsrv/tests/alloc_engine4_unittest.cc @@ -5670,7 +5670,7 @@ TEST_F(AllocEngine4Test, discoverOfferLft) { pool_ = Pool4Ptr(new Pool4(addr, addr)); // just a single address subnet_->addPool(pool_); - // Set subnet's offer-lft to a non-zero, positive value. + // Set subnet's offer-lifetime to a non-zero, positive value. uint32_t offer_lft = (subnet_->getValid() / 3); subnet_->setOfferLft(offer_lft); ASSERT_EQ(offer_lft, subnet_->getOfferLft().get()); @@ -5730,7 +5730,7 @@ TEST_F(AllocEngine4Test, discoverOfferLftReuseExpiredLease4) { pool_ = Pool4Ptr(new Pool4(addr, addr)); // just a single address subnet_->addPool(pool_); - // Set subnet's offer-lft to a non-zero, positive value. + // Set subnet's offer-lifetime to a non-zero, positive value. uint32_t offer_lft = (subnet_->getValid() / 3); subnet_->setOfferLft(offer_lft); ASSERT_EQ(offer_lft, subnet_->getOfferLft().get()); @@ -5780,6 +5780,103 @@ TEST_F(AllocEngine4Test, discoverOfferLftReuseExpiredLease4) { EXPECT_FALSE(from_mgr->fqdn_rev_); } +// Verifies that AllocEngine::getOfferLft(ctx4) returns the appropriate +// lifetime value based on the context content. +TEST_F(AllocEngine4Test, getOfferft4) { + AllocEngine engine(0); + + // Let's make three classes, two with offer-lifetime and one without, + // and add them to the dictionary. + ClientClassDictionaryPtr dictionary = CfgMgr::instance().getStagingCfg()->getClientClassDictionary(); + + ClientClassDefPtr class_def(new ClientClassDef("offer_lft_one", ExpressionPtr())); + Optional<uint32_t> offer_lft_one(100); + class_def->setOfferLft(offer_lft_one); + dictionary->addClass(class_def); + + class_def.reset(new ClientClassDef("offer_lft_two", ExpressionPtr())); + Optional<uint32_t>offer_lft_two(200); + class_def->setOfferLft(offer_lft_two); + dictionary->addClass(class_def); + + class_def.reset(new ClientClassDef("offer_lft_zero", ExpressionPtr())); + Optional<uint32_t>offer_lft_zero(0); + class_def->setOfferLft(offer_lft_zero); + dictionary->addClass(class_def); + + class_def.reset(new ClientClassDef("offer_lft_unspec", ExpressionPtr())); + dictionary->addClass(class_def); + + // Commit our class changes. + CfgMgr::instance().commit(); + + // Update the subnet's triplet to something more useful. + subnet_->setOfferLft(Optional<uint32_t>(300)); + + // Describes a test scenario. + struct Scenario { + std::string desc_; // descriptive text for logging + std::vector<std::string> classes_; // class list of assigned classes + uint32_t exp_valid_lft_; // expected lease lifetime + }; + + // Scenarios to test. + std::vector<Scenario> scenarios = { + { + "BOOTP", + { "BOOTP" }, + Lease::INFINITY_LFT + }, + { + "no classes", + {}, + subnet_->getOfferLft() + }, + { + "class unspecified", + { "offer_lft_unspec" }, + subnet_->getOfferLft() + }, + { + "from last class", + { "offer_lft_unspec", "offer_lft_one" }, + offer_lft_one.get() + }, + { + "from first class", + { "offer_lft_two", "offer_lft_one" }, + offer_lft_two.get() + }, + { + // Useing class value of zero should override non-zero set at + // subnet level, lease should have actual valid lft + "zero from class", + { "offer_lft_zero" }, + subnet_->getValid() + } + }; + + // Iterate over the scenarios and verify the correct outcome. + for (auto scenario : scenarios) { + SCOPED_TRACE(scenario.desc_); { + // Create a context; + AllocEngine::ClientContext4 ctx(subnet_, ClientIdPtr(), hwaddr_, + IOAddress("0.0.0.0"), false, false, + "", true); + ctx.query_.reset(new Pkt4(DHCPDISCOVER, 1234)); + + // Add client classes (if any) + for (auto class_name : scenario.classes_) { + ctx.query_->addClass(class_name); + } + + Lease4Ptr lease = engine.allocateLease4(ctx); + ASSERT_TRUE(lease); + EXPECT_EQ(lease->valid_lft_, scenario.exp_valid_lft_); + } + } +} + } // namespace test } // namespace dhcp } // namespace isc diff --git a/src/lib/dhcpsrv/tests/cfg_shared_networks4_unittest.cc b/src/lib/dhcpsrv/tests/cfg_shared_networks4_unittest.cc index e9d517afbf..971cb8c931 100644 --- a/src/lib/dhcpsrv/tests/cfg_shared_networks4_unittest.cc +++ b/src/lib/dhcpsrv/tests/cfg_shared_networks4_unittest.cc @@ -272,7 +272,7 @@ TEST(CfgSharedNetworks4Test, unparse) { " \"hostname-char-replacement\": \"x\",\n" " \"hostname-char-set\": \"[^A-Z]\",\n" " \"cache-threshold\": .20,\n" - " \"offer-lft\": 77\n" + " \"offer-lifetime\": 77\n" " }\n" "]\n"; diff --git a/src/lib/dhcpsrv/tests/cfg_subnets4_unittest.cc b/src/lib/dhcpsrv/tests/cfg_subnets4_unittest.cc index 757638ff05..9def305474 100644 --- a/src/lib/dhcpsrv/tests/cfg_subnets4_unittest.cc +++ b/src/lib/dhcpsrv/tests/cfg_subnets4_unittest.cc @@ -1133,7 +1133,7 @@ TEST(CfgSubnets4Test, unparseSubnet) { " \"pools\": [ ],\n" " \"store-extended-info\": true,\n" " \"cache-max-age\": 80,\n" - " \"offer-lft\": 99\n" + " \"offer-lifetime\": 99\n" "},{\n" " \"id\": 125,\n" " \"subnet\": \"192.0.2.128/26\",\n" diff --git a/src/lib/dhcpsrv/tests/client_class_def_parser_unittest.cc b/src/lib/dhcpsrv/tests/client_class_def_parser_unittest.cc index a97b1c8847..d0f3f989c0 100644 --- a/src/lib/dhcpsrv/tests/client_class_def_parser_unittest.cc +++ b/src/lib/dhcpsrv/tests/client_class_def_parser_unittest.cc @@ -1334,6 +1334,7 @@ TEST_F(ClientClassDefParserTest, noFixedFields4) { EXPECT_EQ(IOAddress("0.0.0.0"), cclass->getNextServer()); EXPECT_EQ(0, cclass->getSname().size()); EXPECT_EQ(0, cclass->getFilename().size()); + EXPECT_TRUE(cclass->getOfferLft().unspecified()); // Nor option definitions CfgOptionDefPtr cfg = cclass->getCfgOptionDef(); @@ -1497,6 +1498,7 @@ TEST_F(ClientClassDefParserTest, nextServer) { EXPECT_EQ(IOAddress("192.0.2.254"), cclass->getNextServer()); EXPECT_EQ(0, cclass->getSname().size()); EXPECT_EQ(0, cclass->getFilename().size()); + EXPECT_TRUE(cclass->getOfferLft().unspecified()); } // Test verifies that the parser rejects bogus next-server value. @@ -2053,4 +2055,37 @@ TEST_F(ClientClassDefParserTest, invalidUserContext) { DhcpConfigError, "User context has to be a map (<string>:3:21)"); } +// Test verifies that it is possible to define offer-lifetime field and it +// is actually set in the class properly. +TEST_F(ClientClassDefParserTest, offerLft) { + std::string cfg_text = + "{ \n" + " \"name\": \"MICROSOFT\", \n" + " \"offer-lifetime\": 99\n" + "} \n"; + + ClientClassDefPtr cclass; + ASSERT_NO_THROW(cclass = parseClientClassDef(cfg_text, AF_INET)); + + // We should find our class. + ASSERT_TRUE(cclass); + + auto offer_lft = cclass->getOfferLft(); + ASSERT_FALSE(offer_lft.unspecified()); + EXPECT_EQ(99, offer_lft); +} + +// Test verifies that the parser rejects bogus server-hostname value. +TEST_F(ClientClassDefParserTest, offerLftInvalid) { + std::string cfg_text = + "{ \n" + " \"name\": \"MICROSOFT\", \n" + " \"offer-lifetime\": -24\n" + "} \n"; + + EXPECT_THROW_MSG(parseClientClassDef(cfg_text, AF_INET), DhcpConfigError, + "the value of offer-lifetime '-24' must be a positive number" + " (<string>:3:23)"); +} + } // end of anonymous namespace diff --git a/src/lib/dhcpsrv/tests/client_class_def_unittest.cc b/src/lib/dhcpsrv/tests/client_class_def_unittest.cc index e89696927b..61edaf5994 100644 --- a/src/lib/dhcpsrv/tests/client_class_def_unittest.cc +++ b/src/lib/dhcpsrv/tests/client_class_def_unittest.cc @@ -630,6 +630,7 @@ TEST(ClientClassDef, fixedFieldsDefaults) { ASSERT_EQ(IOAddress("0.0.0.0"), cclass->getNextServer()); EXPECT_EQ(empty, cclass->getSname()); EXPECT_EQ(empty, cclass->getFilename()); + EXPECT_TRUE(cclass->getOfferLft().unspecified()); } // Tests basic operations of fixed fields diff --git a/src/lib/dhcpsrv/tests/dhcp_parsers_unittest.cc b/src/lib/dhcpsrv/tests/dhcp_parsers_unittest.cc index 897199f09f..9b6eb3c467 100644 --- a/src/lib/dhcpsrv/tests/dhcp_parsers_unittest.cc +++ b/src/lib/dhcpsrv/tests/dhcp_parsers_unittest.cc @@ -3426,14 +3426,14 @@ TEST_F(ParseConfigTest, selfEncapsulationTest) { cfg.runCfgOptionsTest(family_, config); } -// This test verifies parsing offer-lft for Subnet4. +// This test verifies parsing offer-lifetime for Subnet4. TEST_F(ParseConfigTest, subnet4OfferLft) { std::string config = "{" " \"subnet4\": [ {" " \"subnet\": \"192.0.2.0/24\"," " \"id\": 123," - " \"offer-lft\": 888" + " \"offer-lifetime\": 888" " } ]" "}"; @@ -3447,14 +3447,14 @@ TEST_F(ParseConfigTest, subnet4OfferLft) { EXPECT_EQ(888, subnet->getOfferLft().get()); } -// This test verifies parsing invalid offer-lft for Subnet4. +// This test verifies parsing invalid offer-lifetime for Subnet4. TEST_F(ParseConfigTest, subnet4InvalidOfferLft) { std::string config = "{" " \"subnet4\": [ {" " \"subnet\": \"192.0.2.0/24\"," " \"id\": 123," - " \"offer-lft\": -77" + " \"offer-lifetime\": -77" " } ]" "}"; diff --git a/src/lib/dhcpsrv/tests/network_unittest.cc b/src/lib/dhcpsrv/tests/network_unittest.cc index 85ad150bfb..921ac8ba39 100644 --- a/src/lib/dhcpsrv/tests/network_unittest.cc +++ b/src/lib/dhcpsrv/tests/network_unittest.cc @@ -181,7 +181,7 @@ TEST_F(NetworkTest, inheritanceSupport4) { globals_->set("ddns-update-on-renew", Element::create(true)); globals_->set("ddns-use-conflict-resolution", Element::create(true)); globals_->set("allocator", Element::create("random")); - globals_->set("offer-lft", Element::create(45)); + globals_->set("offer-lifetime", Element::create(45)); // For each parameter for which inheritance is supported run // the test that checks if the values are inherited properly. @@ -361,7 +361,7 @@ TEST_F(NetworkTest, inheritanceSupport4) { "iterative", "random"); } { - SCOPED_TRACE("offer-lft"); + SCOPED_TRACE("offer-lifetime"); testNetworkInheritance<TestNetwork4>(&Network4::getOfferLft, &Network4::setOfferLft, 10, 45); diff --git a/src/lib/dhcpsrv/tests/shared_network_parser_unittest.cc b/src/lib/dhcpsrv/tests/shared_network_parser_unittest.cc index 24312fff0b..1f5287cb4f 100644 --- a/src/lib/dhcpsrv/tests/shared_network_parser_unittest.cc +++ b/src/lib/dhcpsrv/tests/shared_network_parser_unittest.cc @@ -153,7 +153,7 @@ public: " \"store-extended-info\": true," " \"cache-threshold\": 0.123," " \"cache-max-age\": 123," - " \"offer-lft\": 777," + " \"offer-lifetime\": 777," " \"ddns-update-on-renew\": true," " \"option-data\": [" " {" |