Edit

kc3-lang/angle/src/compiler/translator/ImmutableString_autogen.cpp

Branch :

  • Show log

    Commit

  • Author : Jonah Ryan-Davis
    Date : 2020-04-01 16:53:31
    Hash : eadc387c
    Message : GL: Support GL_OES_texture_cube_map_array in shader translator GL_OES_texture_cube_map_array is core in 3.2. This CL adds support for this extension in the shader translator. Now passes dEQP.KHR_GLES31/core_texture_cube_map_array.*, dEQP.GLES31/functional_fbo_color_texcubearray_*, and dEQP.GLES31/functional_opaque_type_indexing*samplercubearray* with GL backend. Bug: angleproject:3584 Change-Id: I1a8485c7d9d3fffb9b5109d292b35b0c56a3c665 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2133086 Reviewed-by: Jamie Madill <jmadill@chromium.org> Commit-Queue: Jonah Ryan-Davis <jonahr@google.com>

  • src/compiler/translator/ImmutableString_autogen.cpp
  • // GENERATED FILE - DO NOT EDIT.
    // Generated by gen_builtin_symbols.py using data from builtin_variables.json and
    // builtin_function_declarations.txt.
    //
    // Copyright 2020 The ANGLE Project Authors. All rights reserved.
    // Use of this source code is governed by a BSD-style license that can be
    // found in the LICENSE file.
    //
    // ImmutableString_autogen.cpp: Wrapper for static or pool allocated char arrays, that are
    // guaranteed to be valid and unchanged for the duration of the compilation. Implements
    // mangledNameHash using perfect hash function from gen_builtin_symbols.py
    
    #include "compiler/translator/ImmutableString.h"
    
    std::ostream &operator<<(std::ostream &os, const sh::ImmutableString &str)
    {
        return os.write(str.data(), str.length());
    }
    
    #if defined(_MSC_VER)
    #    pragma warning(disable : 4309)  // truncation of constant value
    #endif
    
    namespace
    {
    
    constexpr int mangledkT1[] = {419,  3324, 3055, 682,  2516, 3573, 1077, 352,  459,  1367,
                                  1709, 3713, 2124, 3400, 1049, 3112, 4345, 1841, 3838, 250,
                                  346,  1175, 4166, 3226, 3223, 3757, 2882, 3808, 3538, 3929,
                                  2879, 645,  327,  587,  2354, 2152, 2604};
    constexpr int mangledkT2[] = {173,  3828, 3704, 3319, 3921, 1345, 3443, 3932, 2674, 3556,
                                  3712, 2915, 3558, 3985, 956,  921,  2744, 3923, 3636, 3636,
                                  691,  3023, 1304, 3929, 1473, 4212, 867,  1982, 3185, 2400,
                                  2895, 3809, 381,  3781, 1058, 4317, 2036};
    constexpr int mangledkG[]  = {
        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
        0,    0,    0,    0,    0,    2630, 3675, 882,  0,    3822, 0,    0,    0,    0,    0,    1494,
        1899, 0,    0,    2963, 0,    0,    0,    1859, 0,    0,    0,    0,    0,    0,    0,    0,
        4374, 0,    0,    1232, 0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
        0,    0,    3537, 0,    0,    0,    0,    0,    0,    0,    0,    3291, 3382, 0,    0,    0,
        4267, 0,    0,    0,    0,    0,    0,    0,    4011, 0,    0,    0,    0,    0,    2849, 2820,
        0,    0,    4136, 0,    0,    4107, 0,    0,    0,    0,    1640, 955,  0,    0,    3367, 0,
        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    1033, 0,
        3769, 0,    0,    0,    4347, 0,    0,    0,    0,    0,    0,    0,    3664, 0,    0,    0,
        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    48,   0,    0,    864,
        4374, 0,    0,    0,    0,    0,    0,    2269, 0,    0,    0,    0,    0,    0,    438,  0,
        0,    0,    0,    0,    0,    0,    4295, 4046, 0,    0,    517,  2304, 3284, 0,    0,    0,
        0,    0,    0,    0,    0,    3597, 0,    0,    0,    0,    0,    0,    0,    0,    1239, 0,
        1142, 4180, 0,    0,    0,    751,  0,    1221, 0,    0,    0,    0,    0,    0,    0,    0,
        0,    0,    1364, 1250, 4066, 0,    3333, 0,    0,    0,    0,    0,    0,    0,    2206, 2883,
        0,    0,    0,    0,    3226, 0,    0,    0,    0,    3858, 0,    0,    1113, 0,    0,    0,
        0,    0,    3999, 0,    4391, 0,    4102, 0,    0,    0,    0,    3875, 0,    0,    0,    0,
        1243, 0,    613,  2744, 559,  0,    0,    0,    0,    1145, 194,  0,    0,    0,    0,    2883,
        4271, 1209, 0,    3568, 0,    1870, 0,    0,    0,    0,    1281, 2427, 2360, 0,    4183, 3437,
        0,    904,  0,    0,    0,    0,    0,    0,    0,    0,    0,    2306, 0,    0,    1157, 4242,
        2811, 0,    0,    0,    0,    2198, 0,    0,    2406, 2596, 3,    0,    0,    0,    0,    0,
        0,    0,    4311, 2906, 463,  0,    894,  0,    4245, 0,    1024, 2083, 0,    0,    1553, 2733,
        0,    0,    1201, 0,    0,    0,    1477, 0,    3057, 452,  0,    0,    0,    0,    1223, 0,
        0,    1324, 0,    2477, 0,    0,    0,    0,    669,  3599, 0,    0,    0,    1006, 3579, 0,
        0,    0,    0,    0,    0,    0,    0,    0,    0,    3250, 0,    0,    0,    3221, 3883, 1203,
        0,    0,    4408, 0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
        1011, 0,    0,    434,  0,    0,    0,    0,    0,    0,    0,    0,    164,  0,    0,    3054,
        446,  0,    0,    0,    634,  4156, 0,    0,    0,    1903, 0,    4037, 3641, 0,    0,    0,
        0,    0,    961,  4328, 3145, 3282, 0,    2003, 1632, 0,    0,    0,    1628, 1632, 0,    4073,
        0,    0,    648,  3234, 0,    922,  0,    1625, 0,    0,    0,    0,    0,    0,    0,    2729,
        0,    589,  0,    0,    0,    0,    4244, 958,  0,    0,    0,    0,    0,    0,    0,    0,
        0,    758,  0,    0,    0,    0,    0,    2159, 0,    185,  0,    0,    0,    0,    0,    0,
        0,    0,    0,    0,    0,    0,    776,  0,    0,    0,    212,  1099, 0,    11,   0,    1789,
        0,    0,    0,    0,    0,    0,    398,  0,    0,    0,    0,    0,    0,    900,  4153, 0,
        0,    1095, 0,    0,    0,    0,    0,    0,    0,    655,  3766, 634,  1640, 0,    0,    0,
        846,  0,    1155, 0,    0,    0,    0,    191,  3422, 0,    0,    0,    1242, 855,  4108, 2813,
        2941, 0,    337,  592,  0,    1502, 3892, 0,    0,    0,    4198, 0,    0,    0,    0,    0,
        0,    0,    0,    0,    0,    1794, 0,    0,    0,    0,    4224, 0,    0,    1144, 0,    0,
        199,  0,    1702, 0,    84,   0,    0,    0,    665,  0,    0,    0,    0,    0,    0,    1731,
        851,  311,  0,    3240, 0,    0,    0,    365,  0,    0,    4302, 0,    0,    0,    0,    2975,
        0,    0,    0,    0,    1808, 904,  3894, 796,  0,    0,    0,    0,    0,    0,    0,    1424,
        0,    0,    0,    3503, 0,    117,  0,    4034, 0,    0,    2155, 0,    1588, 0,    0,    0,
        399,  0,    0,    0,    3811, 568,  1220, 443,  0,    1640, 0,    1657, 0,    0,    0,    0,
        3427, 0,    0,    4376, 1148, 0,    0,    582,  0,    0,    895,  0,    0,    0,    0,    1907,
        3439, 0,    1265, 0,    0,    0,    0,    0,    3103, 0,    0,    0,    0,    0,    0,    0,
        0,    0,    0,    505,  0,    0,    0,    0,    563,  1942, 565,  0,    0,    0,    0,    0,
        1667, 0,    0,    0,    0,    1897, 0,    643,  0,    0,    241,  0,    586,  1821, 0,    1918,
        0,    0,    0,    4292, 0,    1416, 0,    0,    1289, 0,    0,    3144, 0,    0,    2147, 194,
        0,    572,  0,    0,    0,    0,    0,    0,    862,  0,    2245, 0,    0,    1625, 1025, 0,
        0,    500,  0,    0,    0,    0,    0,    2699, 0,    2101, 0,    0,    0,    0,    0,    0,
        0,    0,    0,    0,    326,  0,    0,    0,    0,    0,    1944, 0,    0,    0,    0,    0,
        0,    0,    0,    1964, 1234, 0,    541,  0,    1214, 467,  0,    0,    4033, 0,    0,    0,
        0,    0,    0,    0,    0,    1392, 0,    0,    0,    0,    783,  0,    0,    0,    0,    0,
        4421, 386,  1242, 0,    2144, 0,    0,    775,  891,  0,    0,    0,    0,    0,    0,    414,
        2413, 1636, 0,    482,  0,    1731, 1041, 3244, 0,    0,    3311, 0,    1450, 0,    0,    1551,
        0,    283,  0,    0,    0,    704,  0,    1619, 0,    1060, 0,    243,  1948, 0,    477,  0,
        225,  1547, 4432, 0,    0,    0,    0,    0,    0,    1198, 543,  985,  2987, 77,   710,  0,
        0,    0,    0,    0,    0,    0,    1532, 0,    0,    0,    1868, 0,    735,  0,    0,    0,
        742,  4107, 2126, 1284, 0,    2674, 3313, 0,    0,    0,    0,    0,    0,    0,    1708, 0,
        3977, 28,   2591, 0,    3589, 698,  0,    0,    0,    0,    0,    0,    608,  0,    0,    0,
        2437, 0,    525,  0,    0,    0,    0,    0,    0,    0,    0,    0,    1302, 97,   0,    1347,
        0,    0,    0,    0,    0,    0,    1580, 0,    556,  2831, 777,  0,    0,    0,    0,    0,
        0,    0,    0,    892,  1682, 0,    0,    0,    0,    3598, 455,  752,  1230, 0,    1435, 4347,
        667,  4212, 0,    0,    0,    0,    0,    0,    0,    0,    4366, 1164, 4016, 0,    2234, 0,
        0,    0,    412,  3764, 0,    3815, 0,    623,  1845, 0,    0,    0,    0,    0,    318,  0,
        0,    0,    4339, 0,    0,    0,    0,    0,    0,    3300, 0,    0,    90,   0,    0,    0,
        429,  0,    273,  0,    0,    83,   0,    48,   3941, 0,    124,  0,    0,    2110, 0,    0,
        1803, 0,    0,    0,    0,    1224, 1973, 3802, 0,    0,    0,    1784, 0,    0,    0,    599,
        1452, 0,    343,  1729, 481,  0,    0,    0,    0,    1035, 1875, 777,  934,  0,    909,  0,
        1133, 256,  3598, 0,    0,    0,    0,    4199, 0,    2278, 0,    1919, 1041, 4075, 0,    0,
        0,    0,    0,    3325, 3227, 0,    782,  0,    2175, 0,    0,    0,    0,    0,    3535, 0,
        86,   0,    531,  0,    0,    112,  0,    516,  0,    1803, 0,    3381, 0,    1576, 1711, 1921,
        4439, 0,    3528, 227,  4405, 3857, 0,    2445, 0,    416,  4380, 0,    0,    2008, 360,  0,
        3821, 0,    0,    0,    3354, 0,    0,    0,    1116, 79,   0,    0,    2646, 0,    923,  0,
        1322, 0,    0,    0,    0,    2012, 1481, 0,    0,    748,  1238, 1581, 0,    4344, 0,    484,
        529,  0,    0,    0,    0,    3569, 1728, 0,    0,    2280, 0,    1023, 0,    0,    2158, 4024,
        0,    1110, 47,   0,    685,  1314, 0,    0,    0,    0,    0,    0,    0,    380,  0,    1671,
        0,    4151, 0,    2491, 1544, 562,  0,    0,    4205, 382,  0,    0,    1378, 0,    1359, 0,
        647,  0,    0,    0,    2439, 3870, 4165, 0,    0,    1722, 1029, 0,    0,    0,    0,    0,
        1081, 473,  2172, 880,  0,    0,    3863, 36,   4309, 0,    0,    219,  870,  0,    0,    0,
        0,    1432, 4012, 0,    465,  4141, 0,    291,  0,    4221, 0,    0,    0,    0,    0,    0,
        0,    1003, 1667, 0,    0,    3856, 1231, 0,    122,  0,    0,    2664, 503,  0,    4210, 0,
        0,    0,    0,    0,    0,    0,    0,    75,   0,    0,    2103, 0,    0,    0,    165,  0,
        0,    1262, 0,    1187, 3016, 0,    0,    0,    2053, 0,    0,    0,    450,  0,    1335, 0,
        3609, 0,    0,    0,    0,    0,    0,    2235, 0,    0,    3550, 3839, 0,    0,    938,  0,
        926,  1605, 2972, 0,    3235, 777,  1269, 206,  0,    320,  1331, 0,    108,  929,  0,    1573,
        0,    1497, 1520, 2609, 1673, 808,  0,    0,    0,    618,  4302, 0,    0,    1489, 1944, 0,
        0,    0,    2055, 0,    0,    0,    3953, 0,    0,    0,    0,    2172, 0,    1269, 857,  0,
        0,    0,    0,    0,    0,    0,    1119, 0,    0,    0,    0,    149,  0,    892,  1178, 2991,
        0,    1413, 3786, 0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    3882, 4234, 1833,
        0,    704,  0,    2437, 1426, 0,    0,    2945, 4389, 749,  0,    1671, 0,    292,  0,    0,
        0,    4118, 0,    0,    0,    4345, 0,    2341, 3107, 1191, 1865, 0,    4227, 266,  506,  0,
        0,    0,    0,    2060, 0,    1489, 1272, 0,    1815, 0,    1142, 1527, 598,  3556, 1860, 0,
        0,    2996, 1766, 0,    1058, 974,  0,    0,    0,    2555, 2298, 0,    1122, 0,    0,    1979,
        0,    0,    0,    0,    1547, 2276, 1040, 762,  558,  1307, 0,    538,  0,    0,    1324, 4139,
        2788, 0,    0,    1235, 2945, 2804, 0,    0,    144,  0,    3013, 0,    0,    0,    2226, 0,
        1148, 0,    0,    2985, 0,    0,    0,    86,   894,  0,    0,    0,    1495, 0,    1355, 0,
        0,    0,    0,    0,    1934, 0,    3815, 236,  169,  1294, 3739, 0,    641,  0,    500,  0,
        1338, 0,    0,    1200, 4365, 0,    0,    0,    4107, 0,    0,    4287, 0,    2348, 0,    2492,
        3134, 0,    305,  2012, 1617, 0,    0,    819,  1372, 0,    0,    271,  0,    559,  0,    0,
        3791, 0,    0,    0,    1380, 0,    1257, 0,    0,    1515, 1730, 0,    0,    2453, 3079, 0,
        0,    0,    3938, 1672, 0,    1220, 282,  0,    4013, 0,    0,    1488, 692,  0,    0,    2138,
        0,    562,  0,    1460, 0,    0,    2085, 0,    0,    733,  0,    948,  0,    1903, 0,    0,
        404,  0,    1696, 1965, 406,  0,    1389, 0,    1836, 0,    0,    1507, 0,    0,    754,  4406,
        1768, 644,  0,    0,    3761, 1154, 580,  1143, 0,    0,    2861, 3473, 2257, 0,    0,    0,
        3613, 0,    0,    1028, 0,    2011, 308,  0,    0,    0,    1916, 0,    1865, 0,    743,  0,
        232,  0,    1648, 0,    0,    0,    0,    470,  0,    1703, 0,    788,  4401, 0,    0,    1819,
        1551, 876,  1236, 0,    0,    0,    0,    3257, 0,    1592, 0,    0,    1958, 4062, 0,    0,
        0,    1695, 755,  2544, 1806, 0,    1745, 2154, 0,    4408, 1493, 497,  0,    1795, 0,    2147,
        624,  643,  2635, 0,    235,  0,    520,  1665, 0,    1975, 0,    0,    0,    353,  3148, 0,
        0,    1436, 0,    0,    0,    1223, 445,  1589, 580,  0,    1818, 0,    0,    1698, 0,    1256,
        3650, 0,    4240, 0,    0,    0,    3395, 0,    0,    0,    0,    1363, 4172, 2731, 1868, 1336,
        0,    0,    2360, 0,    945,  0,    0,    0,    2038, 1620, 0,    0,    0,    4158, 0,    0,
        889,  0,    1858, 0,    3318, 0,    269,  0,    0,    0,    195,  0,    804,  1148, 539,  382,
        1095, 0,    1686, 0,    0,    0,    2461, 1525, 0,    42,   2474, 21,   4394, 0,    0,    1630,
        1420, 3080, 4185, 0,    4176, 1692, 0,    2365, 0,    0,    894,  1093, 1685, 0,    0,    0,
        3139, 4269, 657,  535,  4182, 2710, 0,    0,    426,  0,    0,    0,    0,    374,  1692, 257,
        3660, 521,  0,    0,    3169, 3396, 256,  394,  4056, 204,  203,  2539, 4408, 1209, 1097, 0,
        4188, 0,    792,  0,    166,  0,    1334, 0,    240,  0,    0,    0,    2908, 0,    0,    0,
        2383, 1989, 0,    1254, 0,    0,    0,    0,    1126, 980,  0,    0,    0,    4181, 707,  0,
        0,    0,    0,    0,    0,    0,    3560, 0,    0,    681,  1931, 191,  461,  0,    2756, 0,
        0,    0,    0,    2844, 554,  3968, 0,    1577, 0,    4120, 0,    2824, 0,    0,    0,    0,
        30,   0,    0,    4141, 1681, 0,    0,    0,    194,  4009, 2735, 0,    0,    138,  0,    0,
        612,  0,    0,    0,    0,    1238, 0,    854,  98,   0,    0,    0,    0,    0,    0,    0,
        0,    3802, 4048, 0,    0,    0,    994,  4088, 0,    1322, 171,  2789, 3513, 4055, 0,    1485,
        3286, 0,    0,    0,    0,    0,    0,    340,  0,    2473, 1844, 3928, 0,    3358, 62,   752,
        393,  0,    598,  0,    0,    2088, 0,    1821, 1512, 0,    0,    3929, 277,  0,    0,    0,
        3870, 0,    0,    0,    3573, 66,   1021, 193,  1804, 715,  0,    1120, 35,   0,    0,    984,
        0,    0,    4441, 3617, 0,    96,   0,    0,    0,    0,    0,    2697, 0,    0,    326,  0,
        0,    323,  0,    0,    4263, 2675, 0,    336,  0,    0,    4294, 0,    0,    3624, 3734, 0,
        0,    0,    2075, 444,  604,  0,    0,    0,    0,    3347, 2244, 1622, 0,    0,    0,    1748,
        0,    4431, 3702, 1284, 4080, 3182, 0,    0,    428,  0,    4354, 0,    0,    4451, 1183, 0,
        4282, 0,    3906, 3098, 15,   428,  0,    0,    0,    324,  0,    0,    0,    308,  1659, 487,
        0,    199,  1554, 1106, 0,    1832, 2266, 0,    2359, 0,    1983, 622,  834,  0,    0,    501,
        1531, 600,  0,    0,    494,  0,    537,  811,  1126, 1829, 0,    0,    1797, 0,    0,    3549,
        3891, 1000, 0,    0,    676,  0,    340,  0,    2608, 0,    0,    0,    0,    0,    0,    1295,
        170,  1434, 0,    0,    0,    551,  1610, 4219, 0,    0,    702,  0,    1901, 0,    0,    800,
        1153, 746,  3822, 2121, 1672, 1930, 0,    0,    0,    0,    1382, 0,    52,   4332, 0,    1103,
        0,    1739, 3848, 698,  0,    0,    1265, 0,    231,  4343, 0,    242,  491,  0,    1684, 0,
        2942, 0,    0,    0,    1699, 534,  0,    0,    959,  536,  1168, 1507, 3947, 0,    3631, 0,
        981,  1992, 0,    218,  2093, 49,   627,  1840, 0,    660,  16,   0,    164,  0,    4064, 0,
        0,    1688, 0,    302,  1362, 0,    0,    538,  656,  0,    559,  1798, 501,  0,    1066, 3361,
        0,    0,    0,    2411, 0,    2414, 1444, 0,    1980, 0,    279,  208,  4253, 0,    614,  1773,
        3632, 449,  0,    3160, 4191, 1276, 2767, 0,    0,    0,    0,    3896, 0,    0,    0,    0,
        0,    1381, 736,  1666, 1982, 1653, 0,    975,  0,    0,    0,    0,    0,    0,    4157, 0,
        0,    3068, 1850, 3817, 1782, 1703, 2105, 0,    1199, 3398, 0,    1903, 1785, 3213, 0,    1035,
        0,    0,    3130, 0,    1926, 498,  0,    0,    927,  2016, 986,  669,  1152, 0,    0,    353,
        4274, 3920, 0,    0,    3689, 0,    0,    0,    0,    0,    0,    0,    0,    2818, 806,  0,
        0,    602,  2726, 0,    0,    273,  0,    0,    89,   2193, 0,    0,    807,  1989, 697,  2113,
        2041, 0,    0,    366,  0,    281,  1375, 0,    4308, 0,    604,  0,    0,    1648, 0,    4,
        385,  618,  0,    0,    0,    3697, 3707, 0,    1374, 0,    0,    3829, 4227, 628,  0,    1755,
        3152, 794,  2658, 0,    0,    0,    0,    0,    1354, 1841, 990,  3234, 0,    1774, 3163, 0,
        0,    3634, 0,    0,    159,  0,    0,    0,    4225, 0,    3370, 1223, 0,    836,  2140, 0,
        0,    253,  1118, 973,  1623, 1289, 0,    252,  3997, 0,    0,    0,    280,  2064, 1747, 4053,
        74,   1042, 0,    0,    0,    0,    0,    0,    348,  0,    3056, 0,    821,  0,    0,    0,
        0,    2880, 0,    3427, 2134, 0,    0,    1084, 0,    837,  1438, 1760, 952,  0,    0,    908,
        4096, 3631, 1237, 4048, 801,  2627, 0,    0,    1028, 3840, 439,  0,    1928, 0,    393,  0,
        0,    483,  4193, 0,    0,    851,  707,  1120, 760,  0,    705,  130,  0,    1430, 0,    660,
        0,    269,  113,  190,  1931, 0,    1331, 2201, 120,  0,    0,    4299, 0,    4098, 0,    108,
        1715, 378,  2060, 437,  835,  0,    0,    0,    341,  0,    0,    1669, 32,   376,  1874, 3066,
        0,    0,    455,  0,    364,  1536, 3511, 0,    3191, 933,  0,    1925, 1479, 0,    736,  1812,
        4130, 0,    3852, 2613, 1182, 0,    768,  0,    0,    0,    0,    0,    0,    3034, 1629, 3104,
        0,    2050, 0,    2004, 1660, 1722, 0,    1063, 0,    1001, 1839, 2974, 0,    0,    0,    0,
        0,    0,    3846, 589,  701,  0,    0,    880,  0,    0,    0,    0,    0,    988,  3432, 417,
        1058, 0,    0,    4185, 0,    0,    1545, 82,   0,    0,    3123, 0,    992,  0,    0,    1640,
        3222, 3364, 0,    0,    1655, 0,    604,  0,    0,    3813, 0,    1586, 403,  0,    0,    0,
        0,    301,  0,    235,  1752, 0,    2395, 0,    0,    487,  510,  3883, 88,   0,    3768, 0,
        0,    2116, 4352, 0,    1953, 1308, 3602, 0,    239,  691,  0,    507,  0,    0,    0,    3375,
        0,    0,    0,    457,  0,    0,    820,  4014, 954,  0,    0,    0,    0,    0,    0,    3975,
        0,    0,    0,    0,    0,    335,  0,    1751, 0,    4086, 0,    207,  0,    1263, 519,  0,
        0,    3831, 0,    0,    0,    0,    0,    0,    493,  0,    0,    504,  3954, 0,    0,    2127,
        0,    0,    4387, 0,    0,    0,    0,    0,    0,    658,  278,  0,    0,    268,  2614, 547,
        0,    332,  0,    4122, 0,    0,    845,  2465, 267,  1593, 0,    1419, 0,    0,    3762, 3258,
        0,    0,    0,    3877, 0,    1268, 1325, 496,  0,    747,  0,    1622, 0,    0,    0,    0,
        1749, 3079, 3598, 769,  0,    0,    772,  0,    193,  0,    0,    1673, 0,    778,  0,    0,
        0,    1403, 0,    0,    0,    252,  0,    966,  3777, 807,  326,  0,    0,    3716, 1843, 0,
        1264, 0,    2090, 2625, 2082, 0,    15,   0,    1430, 1807, 0,    1028, 310,  3244, 0,    0,
        2719, 4367, 0,    0,    2031, 672,  664,  1207, 2246, 1334, 3695, 0,    0,    0,    1393, 0,
        3564, 2272, 1652, 364,  0,    2276, 3103, 3758, 569,  0,    836,  4251, 657,  811,  0,    0,
        1296, 0,    0,    1319, 1218, 3650, 0,    1758, 0,    0,    2044, 0,    0,    610,  755,  0,
        1737, 300,  185,  3799, 675,  937,  3578, 2116, 0,    0,    771,  753,  0,    0,    3882, 0,
        4045, 4009, 0,    120,  0,    0,    1899, 1090, 744,  0,    0,    1116, 4309, 0,    0,    0,
        0,    4023, 2727, 587,  749,  1125, 0,    4140, 0,    2419, 0,    1563, 1733, 4049, 1307, 3227,
        0,    833,  447,  2055, 734,  0,    1340, 2015, 0,    1732, 803,  670,  3492, 0,    368,  0,
        490,  656,  861,  0,    4056, 2135, 0,    0,    0,    0,    0,    108,  1248, 1973, 0,    0,
        0,    1757, 0,    1258, 3314, 4409, 0,    1999, 0,    1083, 0,    0,    3571, 2036, 1124, 0,
        1492, 491,  0,    1225, 0,    0,    689,  2671, 0,    312,  0,    0,    0,    1563, 1599, 0,
        0,    0,    0,    0,    0,    0,    0,    0,    710,  2238, 0,    0,    0,    0,    0,    0,
        0,    0,    0,    1179, 1815, 0,    0,    3385, 727,  0,    1464, 0,    1449, 4291, 0,    725,
        0,    284,  0,    0,    1720, 2927, 2488, 0,    0,    0,    794,  1304, 741,  0,    1883, 1234,
        101,  4087, 0,    0,    4342, 4404, 371,  1159, 17,   914,  0,    45,   27,   1031, 4033, 456,
        866,  0,    4173, 81,   146,  4085, 963,  0,    1951, 0,    0,    0,    0,    154,  1508, 0,
        657,  2555, 0,    0,    0,    1894, 0,    0,    2444, 1831, 0,    1008, 3034, 0,    0,    1967,
        577,  0,    0,    0,    430,  0,    1958, 2232, 1350, 0,    4037, 0,    0,    3070, 0,    0,
        0,    1118, 570,  3212, 1456, 1203, 284,  1918, 3700, 524,  2221, 0,    0,    0,    0,    0,
        4036, 1911, 0,    753,  0,    0,    0,    1511, 591,  0,    0,    2209, 443,  0,    0,    3931,
        0,    840,  201,  240,  0,    1110, 2031, 453,  0,    0,    1997, 3449, 2354, 1778, 1814, 803,
        2811, 0,    0,    169,  1690, 0,    0,    4364, 0,    1136, 43,   539,  0,    1422, 0,    568,
        3883, 0,    0,    2051, 186,  1001, 0,    194,  2469, 0,    0,    283,  3617, 0,    0,    0,
        4384, 0,    247,  0,    1772, 4302, 177,  2753, 4113, 2776, 119,  3156, 0,    0,    0,    4055,
        2686, 135,  4023, 1985, 0,    1039, 1018, 0,    839,  0,    0,    3800, 1411, 275,  268,  0,
        3909, 401,  3648, 3769, 1263, 0,    0,    0,    2320, 1678, 3621, 2718, 0,    0,    3999, 893,
        0,    1770, 0,    2940, 83,   2544, 225,  513,  0,    0,    1590, 867,  0,    0,    531,  0,
        979,  3698, 595,  0,    0,    0,    2527, 1482, 707,  220,  3168, 0,    1402, 0,    3047, 0,
        1410, 1824, 0,    4017, 1229, 3629, 174,  1641, 1396, 2765, 1704, 664,  0,    2031, 0,    0,
        29,   0,    0,    0,    0,    0,    0,    0,    314,  816,  0,    2053, 3408, 0,    0,    0,
        483,  2170, 0,    155,  795,  442,  0,    1100, 1207, 0,    2315, 0,    3420, 2207, 3056, 1848,
        0,    0,    0,    3834, 923,  0,    3118, 0,    0,    0,    0,    1545, 576,  1649, 0,    2027,
        723,  0,    3283, 0,    3670, 0,    1249, 2174, 2420, 1138, 0,    2243, 1149, 615,  653,  0,
        0,    352,  0,    0,    0,    0,    0,    3877, 4436, 0,    0,    2315, 0,    1200, 0,    2081,
        4415, 0,    43,   1053, 0,    0,    4122, 317,  0,    0,    0,    63,   0,    3246, 0,    0,
        0,    133,  881,  0,    590,  833,  389,  737,  0,    571,  0,    895,  0,    0,    723,  1975,
        595,  364,  1648, 0,    200,  172,  1440, 2062, 150,  1009, 0,    1736, 1766, 0,    0,    1405,
        0,    167,  0,    0,    847,  0,    0,    0,    0,    0,    0,    0,    1548, 0,    0,    874,
        0,    1123, 0,    1397, 3525, 577,  0,    0,    4364, 0,    0,    0,    0,    2923, 0,    228,
        3563, 0,    182,  983,  0,    4140, 735,  394,  1431, 3564, 421,  700,  0,    0,    0,    2841,
        605,  0,    1469, 1428, 0,    1084, 3405, 0,    2035, 4298, 2118, 1081, 464,  3424, 1323, 3786,
        0,    570,  3382, 3883, 234,  0,    4200, 4232, 0,    0,    0,    3468, 1044, 0,    182,  4395,
        0,    2321, 1469, 135,  2201, 0,    0,    953,  2912, 2371, 1387, 0,    0,    1854, 4276, 687,
        706,  4077, 1980, 2007, 0,    0,    0,    301,  605,  0,    0,    1595, 0,    1143, 4133, 286,
        0,    1927, 0,    2637, 0,    2071, 0,    1731, 0,    215,  0,    2582, 0,    385,  1834, 812,
        1194, 0,    0,    1932, 1228, 3368, 605,  1225, 213,  1237, 0,    1763, 2210, 0,    0,    62,
        0,    1247, 1478, 0,    1629, 581,  0,    2713, 814,  1614, 0,    0,    1372, 359,  1569, 0,
        304,  2667, 1222, 1818, 2125, 0,    106,  3838, 3579, 48,   2734, 2051, 0,    0,    124,  1820,
        0,    3695, 3683, 0,    0,    3834, 464,  972,  2678, 3716, 1071, 1021, 0,    1870, 2130, 4252,
        4320, 2981, 3280, 0,    1036, 594,  661,  908,  1920, 0,    1610, 1991, 3,    1375, 0,    1192,
        0,    2312, 0,    1128, 0,    2322, 2894, 2222, 537,  4424, 0,    0,    1407, 954,  781,  0,
        3676, 378,  133,  3228, 0,    0,    17,   0,    248,  0,    0,    2459, 746,  67,   731,  788,
        306,  923,  0,    1352, 0,    166,  2502, 0,    0,    0,    854,  0,    0,    917,  0,    1253,
        0,    0,    1561, 0,    603,  841,  265,  305,  2753, 2906, 362,  0,    1022, 180,  1982, 1940,
        486,  262,  0,    0,    1454, 1006, 0,    0,    1194, 0,    2039, 526,  2749, 3542, 650,  0,
        1845, 0,    0,    0,    860,  3057, 960,  2101, 0,    4286, 0,    0,    524,  1966, 0,    1956,
        3835, 3337, 0,    0,    4054, 0,    806,  3300, 0,    1321, 0,    448,  1906, 0,    0,    0,
        0,    3888, 2784, 2114, 0,    0,    534,  2255, 852,  0,    0,    3332, 2315, 392,  0,    0,
        2722, 0,    0,    67,   0,    1925, 0,    2898, 3801, 2341, 0,    0,    4247, 3574, 111,  0,
        1861, 219,  0,    0,    0,    431,  0,    0,    4397, 4279, 2108, 2546, 4067, 4259, 0,    257,
        584,  0,    674,  218,  1210, 0,    331,  2803, 2380, 544,  861,  0,    1935, 0,    3854, 0,
        1388, 0,    0,    0,    3538, 917,  1996, 1686, 0,    0,    1125, 4160, 1370, 0,    0,    0,
        2573, 4296, 0,    825,  0,    0,    727,  694,  802,  1067, 0,    0,    0,    92,   0,    0,
        320,  0,    0,    215,  45,   1656, 0,    0,    0,    0,    0,    3164, 1801, 224,  115,  3793,
        0,    0,    1475, 2486, 3661, 2080, 0,    1456, 1250, 557,  336,  0,    0,    824,  1,    196,
        0,    0,    0,    0,    1705, 0,    0,    0,    2273, 919,  0,    0,    1168, 2571, 0,    4042,
        774,  0,    0,    0,    997,  1754, 3223, 0,    1736, 1313, 0,    0,    542,  498,  2297, 0,
        28,   62,   2996, 443,  3445, 0,    3402, 0,    1444, 0,    0,    3924, 3772, 107,  790,  0,
        0,    0,    0,    3727, 0,    3381, 0,    0,    0,    0,    1643, 0,    0,    335,  0,    0,
        4408, 0,    2915, 0,    2095, 558,  0,    1172, 1310, 586,  0,    326,  4312, 277,  314,  1068,
        1099, 386,  3578, 58,   0,    0,    0,    1394, 719,  0,    1819, 0,    0,    1891, 0,    1270,
        0,    159,  2474, 630,  44,   195,  0,    639,  3387, 0,    1750, 1679, 0,    0,    476,  2000,
        4187, 0,    0,    1045, 3059, 0,    0,    4011, 757,  879,  1309, 0,    0,    1285, 0,    493,
        0,    0,    403,  3090, 0,    1420, 0,    0,    0,    93,   3097, 0,    2678, 0,    4382, 519,
        0,    0,    0,    1483, 3662, 677,  0,    0,    210,  2969, 1381, 0,    0,    697,  621,  1034,
        2438, 0,    548,  454,  2031, 998,  0,    0,    1344, 3719, 762,  1854, 322,  1565, 2898, 0,
        0,    1880, 488,  4066, 1208, 4331, 0,    1946, 2947, 1001, 957,  0,    605,  0,    0,    2653,
        0,    2576, 1071, 2691, 1453, 839,  1699, 1498, 0,    0,    1453, 2837, 644,  390,  0,    1417,
        0,    0,    2002, 403,  0,    0,    1058, 151,  3634, 2514, 685,  0,    1552, 1957, 0,    0,
        4008, 0,    0,    907,  1180, 1970, 5,    1554, 1716, 1406, 0,    1281, 1608, 1386, 0,    46,
        990,  1196, 0,    2749, 2074, 458,  0,    1147, 0,    303,  4093, 2353, 3243, 2029, 3905, 0,
        1344, 0,    889,  3759, 0,    0,    0,    0,    697,  1292, 0,    0,    940,  4381, 0,    1097,
        1279, 0,    0,    0,    921,  0,    3951, 0,    0,    1774, 0,    0,    3666, 0,    0,    0,
        2132, 49,   0,    1998, 0,    0,    3063, 2263, 0,    0,    0,    0,    4133, 0,    4168, 0,
        2291, 0,    30,   2020, 1578, 0,    0,    1340, 3835, 1601, 0,    1154, 623,  3975, 1990, 431,
        1879, 0,    0,    0,    1250, 1437, 0,    205,  0,    484,  1031, 107,  1358, 173,  1159, 4001,
        294,  4263, 528,  92,   0,    2683, 0,    42,   0,    205,  0,    2971, 0,    0,    0,    122,
        299,  3205, 0,    850,  906,  625,  2413, 2904, 410,  0,    3395, 2076, 68,   0,    0,    1587,
        0,    0,    0,    0,    0,    0,    0,    0,    0,    1551, 989,  0,    4344, 1523, 0,    967,
        0,    673,  795,  0,    0,    746,  0,    3633, 412,  781,  0,    762,  0,    0,    1435, 0,
        87,   0,    603,  2598, 982,  0,    936,  302,  1113, 0,    0,    0,    0,    178,  0,    3223,
        0,    147,  2023, 361,  1492, 290,  3936, 1176, 0,    366,  4185, 3937, 6,    1188, 247,  1755,
        556,  0,    1633, 0,    0,    2129, 0,    3726, 716,  0,    1102, 0,    0,    0,    0,    0,
        241,  1792, 0,    758,  0,    0,    3855, 480,  0,    0,    902,  3812, 0,    823,  0,    3631,
        1447, 0,    3684, 1302, 520,  685,  1701, 0,    4131, 1127, 40,   0,    0,    0,    0,    641,
        4256, 1076, 1442, 0,    1018, 0,    970,  377,  0,    919,  0,    645,  1391, 564,  443,  1843,
        465,  1697, 916,  797,  0,    0,    1433, 0,    1727, 3260, 0,    0,    0,    0,    0,    3978,
        4255, 0,    0,    185,  798,  0,    3635, 4265, 1466, 0,    4057, 430,  1811, 0,    1753, 605,
        0,    469,  839,  325,  1451, 1317, 1902, 4251, 0,    2,    0,    0,    86,   439,  0,    1255,
        1536, 2001, 2390, 0,    0,    0,    0,    878,  966,  986,  0,    0,    1343, 0,    2039, 0,
        0,    61,   1939, 1875, 202,  0,    0,    2049, 0,    3918, 1470, 897,  1501, 0,    0,    3211,
        403,  0,    504,  459};
    
    int MangledHashG(const char *key, const int *T)
    {
        int sum = 0;
    
        for (int i = 0; key[i] != '\0'; i++)
        {
            sum += T[i] * key[i];
            sum %= 4452;
        }
        return mangledkG[sum];
    }
    
    int MangledPerfectHash(const char *key)
    {
        if (strlen(key) > 37)
            return 0;
    
        return (MangledHashG(key, mangledkT1) + MangledHashG(key, mangledkT2)) % 4452;
    }
    
    constexpr int unmangledkT1[] = {162, 98,  200, 17, 263, 137, 354, 364, 24,  149, 40,  40,  170,
                                    267, 387, 255, 7,  55,  108, 152, 27,  154, 105, 349, 229, 229};
    constexpr int unmangledkT2[] = {290, 338, 301, 284, 117, 303, 83,  150, 389, 350, 323, 330, 58,
                                    316, 310, 107, 30,  65,  14,  310, 8,   298, 365, 40,  174, 83};
    constexpr int unmangledkG[]  = {
        0,   0,   0,   0,   0,   15,  0,   0,   0,   0,   0,   0,   0,   0,   199, 165, 0,   0,   0,
        0,   0,   230, 245, 164, 0,   0,   71,  382, 38,  0,   0,   137, 9,   34,  0,   6,   0,   0,
        162, 101, 0,   0,   151, 0,   70,  0,   0,   201, 0,   181, 0,   0,   207, 0,   0,   0,   0,
        0,   0,   0,   38,  0,   0,   120, 0,   0,   121, 0,   115, 0,   67,  0,   92,  115, 0,   356,
        99,  0,   0,   0,   70,  0,   0,   0,   79,  366, 0,   28,  383, 0,   0,   273, 0,   392, 0,
        0,   0,   369, 324, 0,   74,  0,   0,   261, 0,   0,   0,   304, 306, 0,   68,  0,   123, 61,
        0,   142, 190, 0,   0,   0,   164, 88,  73,  0,   378, 17,  81,  82,  361, 0,   169, 27,  119,
        0,   0,   0,   0,   313, 58,  56,  0,   393, 50,  0,   0,   392, 47,  305, 0,   0,   384, 24,
        0,   380, 0,   0,   0,   73,  0,   0,   227, 0,   0,   158, 174, 0,   0,   0,   0,   0,   0,
        0,   0,   193, 0,   59,  0,   0,   0,   225, 327, 0,   76,  142, 367, 0,   0,   106, 0,   0,
        48,  0,   0,   66,  45,  0,   0,   0,   227, 340, 57,  0,   195, 39,  130, 25,  40,  179, 135,
        3,   0,   114, 373, 0,   0,   312, 31,  0,   0,   0,   348, 113, 61,  88,  0,   21,  0,   21,
        25,  76,  376, 0,   391, 0,   141, 122, 0,   0,   0,   0,   2,   322, 150, 381, 112, 0,   19,
        272, 136, 0,   0,   69,  22,  0,   0,   159, 0,   39,  26,  268, 364, 0,   186, 0,   108, 62,
        82,  0,   56,  35,  0,   154, 65,  400, 145, 191, 0,   0,   282, 0,   0,   163, 391, 152, 192,
        127, 0,   97,  0,   71,  0,   0,   127, 24,  396, 0,   41,  70,  0,   0,   90,  132, 0,   382,
        180, 311, 114, 123, 165, 7,   0,   0,   0,   0,   81,  296, 369, 0,   229, 133, 85,  0,   120,
        0,   0,   206, 0,   0,   188, 84,  230, 196, 117, 0,   0,   10,  394, 59,  97,  0,   371, 53,
        0,   370, 0,   364, 0,   208, 0,   178, 195, 229, 0,   0,   0,   0,   0,   0,   0,   166, 41,
        89,  0,   77,  0,   171, 0,   0,   177, 0,   47,  0,   198, 0,   266, 56,  156, 0,   283, 0,
        101, 218, 0,   0,   0,   38,  145, 0,   111, 0,   41,  0,   0,   0,   201, 0,   19,  43,  0,
        82,  396, 57};
    
    int UnmangledHashG(const char *key, const int *T)
    {
        int sum = 0;
    
        for (int i = 0; key[i] != '\0'; i++)
        {
            sum += T[i] * key[i];
            sum %= 402;
        }
        return unmangledkG[sum];
    }
    
    int UnmangledPerfectHash(const char *key)
    {
        if (strlen(key) > 26)
            return 0;
    
        return (UnmangledHashG(key, unmangledkT1) + UnmangledHashG(key, unmangledkT2)) % 402;
    }
    
    }  // namespace
    
    namespace sh
    {
    
    template <>
    const size_t ImmutableString::FowlerNollVoHash<4>::kFnvPrime = 16777619u;
    
    template <>
    const size_t ImmutableString::FowlerNollVoHash<4>::kFnvOffsetBasis = 0x811c9dc5u;
    
    template <>
    const size_t ImmutableString::FowlerNollVoHash<8>::kFnvPrime =
        static_cast<size_t>(1099511628211ull);
    
    template <>
    const size_t ImmutableString::FowlerNollVoHash<8>::kFnvOffsetBasis =
        static_cast<size_t>(0xcbf29ce484222325ull);
    
    uint32_t ImmutableString::mangledNameHash() const
    {
        return MangledPerfectHash(data());
    }
    
    uint32_t ImmutableString::unmangledNameHash() const
    {
        return UnmangledPerfectHash(data());
    }
    
    }  // namespace sh