module TaxonLineageHelper
  # We label as 'phage' all of the prokaryotic (bacterial and archaeal) virus families
  # listed here: https://en.wikipedia.org/wiki/Bacteriophage
  # PHAGE_FAMILIES_NAMES = ['Myoviridae', 'Siphoviridae', 'Podoviridae', 'Lipothrixviridae',
  #                         'Rudiviridae', 'Ampullaviridae', 'Bicaudaviridae', 'Clavaviridae',
  #                         'Corticoviridae', 'Cystoviridae', 'Fuselloviridae', 'Globuloviridae',
  #                         'Guttaviridae', 'Inoviridae', 'Leviviridae', 'Microviridae',
  #                         'Plasmaviridae', 'Tectiviridae']
  # PHAGE_FAMILIES_TAXIDS = TaxonLineage.where(family_name: PHAGE_FAMILIES_NAMES).map(&:family_taxid).compact.uniq.sort
  PHAGE_FAMILIES_TAXIDS = [10_472, 10_474, 10_477, 10_656, 10_659, 10_662, 10_699, 10_744, 10_841, 10_860,
                           10_877, 11_989, 157_897, 292_638, 324_686, 423_358, 573_053, 1_232_737,].freeze

  # These are all the taxids of pathogens with 'phage' in their species names that don't belong to one of the above family taxids (most of them -300)
  # This was generated by the following queries:
  # new_ids = TaxonLineage.connection.select_all("SELECT taxid FROM taxon_lineages WHERE family_taxid NOT IN (10472, 10474, 10477, 10656, 10659, 10662, 10699, 10744, 10841, 10860, 10877, 11989, 157897, 292638, 324686, 423358, 573053, 1232737) AND (species_name REGEXP '[[:<:]]phage[[:>:]]' OR genus_name REGEXP '[[:<:]]phage[[:>:]]')").to_a.map  { |entry| entry["taxid"] }.uniq
  #
  # When in doubt, adding new phage entries is always safe. We don't expect existing phage taxids
  # to ever be reclassified to non-phages.
  # (TaxonLineageHelper::PHAGE_TAXIDS + new_ids).uniq
  # rubocop:disable Style/NumericLiterals
  PHAGE_TAXIDS = [10680, 10696, 10765, 12340, 12366, 12371, 12374, 12375, 12386, 12388, 12392, 12403, 12404, 12405, 12408, 12409, 12412, 12420, 12424, 12425, 12427, 28368, 31505, 31760, 33768, 33769, 33771, 36342, 37953, 38018, 39425, 41669, 42171, 42172, 42173, 45331, 45332, 45441, 48224, 54392, 57476, 60457, 63117, 65388, 73492, 75590, 76262, 77920, 86065, 100637, 100638, 100639, 100640, 103371, 105686, 108916, 108917, 108918, 112596, 126970, 127516, 127586, 127587, 127588, 127589, 128975, 129861, 129862, 132905, 137422, 147128, 148339, 156740, 156741, 156742, 156743, 156745, 156746, 156747, 156748, 156749, 156750, 164125, 167533, 172666, 173830, 173831, 175950, 176100, 179237, 181120, 181485, 184975, 184976, 185368, 185369, 187176, 196194, 198542, 198932, 209152, 210927, 210928, 219292, 221993, 229343, 229344, 229345, 229346, 239740, 241652, 242708, 259828, 262790, 264484, 268585, 268586, 268587, 268588, 268590, 272473, 272757, 274589, 278008, 279276, 279974, 279975, 280702, 282372, 282690, 282691, 282692, 282693, 282698, 282699, 282700, 282701, 282702, 282703, 282704, 282705, 282709, 282710, 284052, 291401, 292511, 293378, 293711, 293712, 293713, 294363, 296376, 306552, 307898, 311221, 319710, 319711, 319712, 319713, 320831, 322855, 328627, 328628, 328629, 334523, 338345, 347327, 347330, 347331, 350104, 356350, 357204, 360048, 360049, 360050, 364251, 364252, 364253, 364254, 365048, 367898, 370556, 370557, 370558, 370559, 370560, 370561, 370562, 370563, 370564, 370565, 370566, 370567, 370568, 370569, 373126, 374421, 375032, 375033, 375034, 375035, 375036, 375037, 375038, 375039, 375040, 375041, 375042, 375043, 375044, 375045, 375046, 375047, 375048, 375049, 375050, 375051, 375052, 375053, 375054, 375055, 375056, 375057, 375058, 375059, 375282, 376611, 382262, 382273, 382277, 382278, 382279, 382280, 382281, 382282, 382283, 387086, 387087, 387088, 405001, 409026, 416562, 427768, 427769, 430512, 430513, 430514, 430515, 430796, 432197, 432199, 432202, 432203, 435305, 435637, 440576, 444861, 444878, 445515, 445517, 447796, 447800, 449399, 456243, 458420, 458421, 458422, 458423, 458424, 458425, 458426, 458427, 458428, 458429, 458430, 458431, 458432, 458433, 458434, 458435, 458436, 458437, 458438, 458439, 458440, 458441, 458442, 458443, 458444, 458445, 458446, 458447, 458448, 458449, 458450, 458451, 458452, 458453, 458454, 458455, 458456, 458457, 458458, 458459, 458460, 458461, 458462, 458463, 458464, 458465, 458466, 458467, 458468, 458469, 458470, 458471, 458472, 458473, 458474, 458475, 458476, 458477, 462299, 464033, 472964, 472965, 472966, 483783, 483784, 483785, 498338, 498339, 498340, 498341, 498342, 498343, 498344, 498345, 498346, 498347, 498348, 498349, 498350, 498351, 498352, 498353, 504556, 504557, 504558, 526394, 538529, 557989, 560197, 560198, 564886, 571950, 573171, 573172, 573173, 573174, 576538, 635097, 635098, 635099, 635100, 635101, 635102, 635103, 635104, 635105, 635106, 635107, 635135, 635136, 635137, 635138, 635139, 635140, 635141, 635142, 635143, 635144, 635145, 640504, 641833, 641834, 641835, 641836, 641837, 641838, 641839, 646460, 648017, 649272, 657176, 657177, 657178, 657179, 657180, 657181, 657182, 657183, 657184, 657185, 658056, 663236, 663238, 663239, 663240, 663583, 663584, 666474, 669062, 686440, 691319, 693830, 697288, 697872, 700937, 700938, 702552, 702821, 702822, 703038, 707152, 707783, 716683, 743531, 743532, 743533, 743534, 743535, 743536, 743537, 743538, 743539, 743540, 743541, 743542, 743543, 743544, 743545, 743546, 743547, 743548, 743549, 743550, 743551, 743552, 743553, 743554, 743555, 743556, 743557, 743558, 743559, 743560, 743561, 743562, 743563, 743564, 743565, 743566, 743567, 743568, 743569, 743570, 743571, 743572, 743573, 743574, 743575, 743576, 743577, 743578, 743579, 743580, 743581, 743582, 743583, 743584, 743585, 743586, 743587, 743588, 743589, 743590, 743591, 743592, 743593, 743594, 743595, 743596, 743597, 743598, 743599, 743964, 749413, 754043, 754044, 754045, 754047, 754051, 754057, 754058, 754060, 754061, 754066, 754067, 754074, 754076, 756276, 756277, 756283, 795388, 857344, 858350, 861448, 870469, 870470, 870471, 870472, 870473, 870474, 870475, 880076, 880077, 889949, 889959, 890041, 908820, 908821, 911573, 926016, 926017, 926018, 926019, 927392, 930196, 931927, 941058, 942583, 945084, 945085, 947379, 947842, 949124, 949125, 949126, 949127, 977801, 979538, 980881, 980973, 980974, 980975, 980976, 980977, 980978, 981335, 986165, 986166, 986167, 986168, 1003177, 1009513, 1027410, 1028788, 1033977, 1046847, 1064594, 1073754, 1080237, 1091299, 1091300, 1091301, 1091303, 1091306, 1097379, 1097380, 1097381, 1097382, 1109714, 1128741, 1131316, 1133366, 1137452, 1147722, 1150757, 1155158, 1161145, 1173740, 1173767, 1173768, 1176423, 1183239, 1197951, 1204527, 1204544, 1206545, 1208667, 1211386, 1211387, 1220717, 1235559, 1246486, 1262072, 1262073, 1262074, 1262075, 1262513, 1267169, 1277896, 1278485, 1279070, 1288117, 1289595, 1289600, 1298530, 1302810, 1303346, 1321382, 1321383, 1325731, 1327968, 1327972, 1327990, 1328029, 1329036, 1333500, 1334242, 1334243, 1334244, 1334245, 1334246, 1337877, 1348396, 1348397, 1348398, 1348399, 1348400, 1348401, 1348402, 1349400, 1352230, 1357705, 1357708, 1357710, 1391455, 1391456, 1391549, 1392231, 1400796, 1401318, 1406340, 1407671, 1408814, 1414766, 1414768, 1414769, 1416020, 1423348, 1430441, 1432847, 1432848, 1434659, 1434748, 1434749, 1434750, 1434751, 1435411, 1436831, 1442384, 1444758, 1444759, 1445811, 1448273, 1448274, 1448276, 1449437, 1451074, 1458854, 1461246, 1462421, 1468179, 1470458, 1470459, 1470460, 1470461, 1470462, 1472341, 1472912, 1477406, 1483485, 1486414, 1486419, 1495784, 1503929, 1504984, 1510621, 1510622, 1510623, 1510624, 1510625, 1510626, 1510627, 1510628, 1510629, 1510630, 1510631, 1510632, 1510633, 1510634, 1510635, 1510636, 1510637, 1524880, 1526550, 1527770, 1536592, 1540876, 1540895, 1540904, 1540905, 1541687, 1541688, 1541689, 1541690, 1541691, 1541692, 1541693, 1541694, 1541871, 1541872, 1541873, 1541874, 1541875, 1541876, 1541877, 1541878, 1541879, 1541880, 1541881, 1541882, 1542093, 1542094, 1542095, 1542096, 1542097, 1542098, 1542099, 1542100, 1542101, 1542102, 1542103, 1542104, 1542105, 1542106, 1542107, 1542108, 1542109, 1542110, 1542111, 1542112, 1542113, 1542114, 1542115, 1542116, 1542117, 1542118, 1542119, 1542120, 1542121, 1542122, 1542123, 1542124, 1542125, 1542126, 1542127, 1542128, 1542132, 1542133, 1542447, 1542934, 1543205, 1548421, 1550090, 1562376, 1562377, 1564096, 1564251, 1565372, 1567009, 1567010, 1567011, 1567012, 1567014, 1567015, 1567016, 1567484, 1567487, 1574213, 1574214, 1574215, 1574216, 1574217, 1574218, 1581410, 1582354, 1587519, 1587521, 1592130, 1604868, 1604876, 1633782, 1636182, 1636200, 1636256, 1636258, 1636259, 1636544, 1639815, 1640445, 1640977, 1640978, 1643328, 1647282, 1647283, 1647454, 1647456, 1647457, 1647459, 1647460, 1647461, 1647462, 1647464, 1647467, 1651196, 1651197, 1651198, 1651199, 1651200, 1651201, 1651202, 1651203, 1651204, 1651816, 1653086, 1653734, 1654717, 1654891, 1654892, 1654893, 1654894, 1673872, 1674945, 1675030, 1681862, 1690431, 1698522, 1698526, 1701259, 1701260, 1701811, 1701812, 1701813, 1701814, 1701815, 1701816, 1701817, 1701818, 1701819, 1701820, 1701821, 1701822, 1701823, 1701824, 1701825, 1701826, 1701827, 1701828, 1701829, 1701831, 1701832, 1701833, 1701834, 1701835, 1701836, 1701838, 1701839, 1701840, 1701841, 1701843, 1701844, 1705993, 1712517, 1714273, 1718278, 1718594, 1718840, 1718841, 1718842, 1720506, 1720970, 1729015, 1729016, 1729936, 1729938, 1732176, 1733565, 1740107, 1740108, 1740109, 1745330, 1745331, 1745332, 1745333, 1745334, 1745335, 1747283, 1747284, 1747285, 1748773, 1754209, 1755961, 1759531, 1759532, 1774508, 1775141, 1775142, 1775249, 1775250, 1775255, 1775256, 1776293, 1777051, 1777059, 1784982, 1785176, 1785960, 1792242, 1792272, 1792273, 1792274, 1796993, 1805948, 1805950, 1805951, 1805952, 1805953, 1805954, 1805955, 1805956, 1805958, 1805959, 1806064, 1806065, 1808964, 1813769, 1813770, 1813771, 1813772, 1813775, 1813776, 1814279, 1814280, 1814281, 1814282, 1814283, 1814284, 1814285, 1814286, 1814287, 1814288, 1815630, 1837829, 1837830, 1837876, 1838137, 1838138, 1838151, 1838152, 1838153, 1838154, 1838155, 1838156, 1838157, 1838158, 1846168, 1851600, 1851646, 1852002, 1852003, 1852564, 1852566, 1852597, 1852599, 1852638, 1852640, 1852658, 1852659, 1852661, 1852662, 1852663, 1852664, 1852665, 1852666, 1852667, 1852668, 1852669, 1852670, 1852671, 1852672, 1852673, 1852674, 1852675, 1852676, 1852677, 1852678, 1852679, 1852680, 1852681, 1852682, 1852683, 1852684, 1852685, 1852686, 1852687, 1852688, 1857647, 1860151, 1860190, 1860191, 1860194, 1860195, 1862327, 1862611, 1868169, 1868610, 1868611, 1868654, 1868660, 1868661, 1868662, 1868663, 1868664, 1868665, 1868666, 1868667, 1868668, 1868669, 1868670, 1868671, 1868672, 1868673, 1868674, 1868675, 1868676, 1868677, 1868678, 1868679, 1868680, 1868681, 1868682, 1868683, 1868684, 1868685, 1868686, 1868687, 1868825, 1868826, 1868827, 1868843, 1868844, 1868845, 1868868, 1868869, 1871709, 1871710, 1872723, 1873341, 1873894, 1873905, 1873997, 1873998, 1873999, 1874539, 1874540, 1874585, 1874586, 1874587, 1874588, 1874589, 1874590, 1874591, 1874592, 1874593, 1874594, 1874686, 1874688, 1879035, 1880590, 1880822, 1881175, 1881176, 1881177, 1881178, 1881179, 1881180, 1881181, 1881182, 1881183, 1881184, 1881185, 1881186, 1881187, 1881188, 1881189, 1881190, 1881191, 1881192, 1881193, 1881194, 1881195, 1881196, 1881197, 1881198, 1881199, 1881200, 1881201, 1881202, 1881203, 1881204, 1881205, 1881206, 1881207, 1881208, 1881209, 1881210, 1881211, 1881212, 1881213, 1881214, 1881215, 1881216, 1881217, 1881218, 1881219, 1881220, 1881221, 1881222, 1881223, 1881224, 1881225, 1881226, 1881227, 1881228, 1881229, 1881230, 1881231, 1881232, 1881233, 1881234, 1881235, 1881236, 1881237, 1881238, 1881239, 1881240, 1881241, 1881242, 1881243, 1881244, 1881245, 1881246, 1881247, 1881248, 1881249, 1881250, 1881251, 1881252, 1881253, 1881254, 1881255, 1881256, 1881257, 1881258, 1881259, 1881260, 1881261, 1881262, 1881263, 1881264, 1881265, 1881266, 1881267, 1881268, 1881269, 1881270, 1881271, 1881272, 1881273, 1881274, 1881275, 1881276, 1881277, 1881278, 1881279, 1881280, 1881281, 1881282, 1881283, 1881284, 1881285, 1881286, 1881287, 1881288, 1881289, 1881290, 1881291, 1881292, 1881293, 1881294, 1881295, 1881296, 1881297, 1881298, 1881299, 1881300, 1881301, 1881302, 1881303, 1881304, 1881305, 1881306, 1881307, 1881308, 1881309, 1881310, 1881311, 1881312, 1881313, 1881314, 1881315, 1881316, 1881317, 1881318, 1881319, 1881320, 1881321, 1881322, 1881323, 1881324, 1881325, 1881326, 1881327, 1881328, 1881329, 1881330, 1881331, 1881332, 1881333, 1881334, 1881335, 1881336, 1881337, 1881338, 1881339, 1881340, 1881341, 1881342, 1881343, 1881344, 1881345, 1881346, 1881347, 1881348, 1881349, 1881350, 1881351, 1881352, 1881353, 1881354, 1881355, 1881356, 1881357, 1881358, 1881359, 1881360, 1881361, 1881362, 1881363, 1881364, 1881365, 1881366, 1881367, 1881368, 1881369, 1881370, 1881371, 1881372, 1881373, 1881374, 1881375, 1881376, 1881377, 1881378, 1881379, 1881380, 1881381, 1881382, 1881383, 1881384, 1881385, 1881386, 1881387, 1881388, 1881389, 1881390, 1881391, 1881392, 1881393, 1881394, 1881395, 1881396, 1881397, 1881398, 1881399, 1881400, 1881401, 1881402, 1881403, 1881404, 1881405, 1881406, 1881407, 1881408, 1881409, 1881410, 1881411, 1881412, 1881413, 1881414, 1881415, 1881416, 1881417, 1881418, 1881419, 1881420, 1881421, 1881422, 1881423, 1881424, 1881425, 1881426, 1881427, 1881428, 1881429, 1881430, 1881431, 1881432, 1881433, 1881434, 1881435, 1881436, 1881437, 1881438, 1881439, 1881440, 1881441, 1881442, 1881443, 1881444, 1881445, 1881446, 1881447, 1881448, 1881449, 1881450, 1881451, 1881452, 1881453, 1881454, 1881455, 1881456, 1881628, 1883365, 1883366, 1883367, 1883368, 1883369, 1883379, 1886604, 1892901, 1897400, 1897436, 1897640, 1897742, 1897743, 1897745, 1897746, 1897747, 1897748, 1897749, 1897750, 1897751, 1897752, 1897753, 1897754, 1897755, 1903184, 1903185, 1903259, 1903260, 1904491, 1905713, 1905831, 1906349, 1907173, 1907178, 1907781, 1907782, 1907783, 1907784, 1907785, 1907786, 1908549, 1909401, 1909402, 1909403, 1912236, 1912319, 1912320, 1912321, 1912592, 1912593, 1913039, 1913040, 1913046, 1913047, 1913049, 1913111, 1913112, 1913113, 1913119, 1913122, 1913591, 1913667, 1914788, 1915306, 1916097, 1916103, 1916107, 1916151, 1916152, 1916153, 1916154, 1916155, 1916156, 1916157, 1916158, 1916159, 1916160, 1916161, 1916162, 1916163, 1916164, 1916165, 1916166, 1916167, 1916168, 1916169, 1916170, 1916171, 1916172, 1916173, 1916174, 1916175, 1916176, 1916177, 1916178, 1916179, 1916180, 1916181, 1916182, 1916183, 1916184, 1916185, 1916186, 1916187, 1916188, 1916189, 1916190, 1916191, 1916192, 1916193, 1916194, 1916195, 1916196, 1916197, 1916198, 1916199, 1916200, 1916201, 1916202, 1916203, 1916204, 1916205, 1916206, 1916207, 1917452, 1920379, 1920526, 1923889, 1923890, 1926594, 1927015, 1929941, 1929963, 1932007, 1932118, 1932882, 1932883, 1932892, 1932896, 1932897, 1932898, 1932899, 1932900, 1932901, 1932902, 1932903, 1932904, 1932905, 1932906, 1932907, 1933063, 1933103, 1933104, 1933412, 1933693, 1933695, 1933774, 1934428, 1938577, 1940655, 1955235, 1955242, 1955560, 1958914, 1958921, 1960312, 1960654, 1960655, 1960656, 1960657, 1960658, 1960659, 1960660, 1961797, 1962671, 1962686, 1962688, 1962723, 1962768, 1965269, 1965283, 1965354, 1965361, 1965365, 1965366, 1965367, 1965372, 1965457, 1965458, 1965459, 1965460, 1965461, 1965462, 1965463, 1965467, 1965468, 1965469, 1965470, 1965471, 1965472, 1965473, 1965474, 1965475, 1965476, 1965477, 1965478, 1965479, 1965480, 1965481, 1965482, 1965483, 1965484, 1965532, 1965533, 1965534, 1965535, 1965536, 1969841, 1969991, 1970744, 1970746, 1970773, 1970788, 1970795, 1970798, 1971232, 1971410, 1971411, 1971412, 1971413, 1971414, 1971415, 1971416, 1971417, 1971418, 1971419, 1971420, 1971421, 1971422, 1971423, 1971424, 1971425, 1971426, 1971427, 1971428, 1971429, 1971430, 1971431, 1971432, 1971433, 1971434, 1971435, 1971436, 1971437, 1971438, 1971439, 1971440, 1971441, 1971442, 1971443, 1971444, 1971445, 1971446, 1971447, 1971448, 1971449, 1972433, 1972434, 1972435, 1972436, 1972437, 1972438, 1972439, 1972440, 1973454, 1977995, 1977996, 1977997, 1977998, 1977999, 1978000, 1978001, 1978511, 1978922, 1979540, 1980139, 1981514, 1981552, 1981553, 1983459, 1983465, 1983553, 1983555, 1983580, 1983592, 1983593, 1983594, 1983595, 1983596, 1983597, 1983598, 1983599, 1983600, 1983601, 1983602, 1983603, 1983604, 1983605, 1983606, 1983607, 1983608, 1983609, 1983610, 1983611, 1983612, 1983613, 1983614, 1983615, 1983616, 1983655, 1983656, 1983783, 1985966, 1985967, 2005047, 2005048, 2005789, 2006921, 2006938, 2006940, 2006941, 2006942, 2010329, 2014434, 2022331, 2022456, 2023138, 2023716, 2023998, 2023999, 2024230, 2024231, 2024232, 2024233, 2024234, 2024235, 2024236, 2024238, 2024239, 2024240, 2024241, 2024247, 2024248, 2024249, 2024250, 2024251, 2024252, 2024253, 2024263, 2024264, 2024265, 2024304, 2024305, 2024306, 2024307, 2024308, 2024309, 2024310, 2024311, 2024312, 2024313, 2024314, 2024315, 2024316, 2024317, 2024318, 2024319, 2024320, 2024321, 2024349, 2024350, 2024543, 2024607, 2025806, 2025816, 2025818, 2025821, 2025823, 2026083, 2026084, 2026101, 2026102, 2026679, 2026680, 2027244, 2027245, 2027246, 2027247, 2027248, 2027249, 2027250, 2027251, 2027252, 2027253, 2027254, 2027255, 2027256, 2027257, 2027258, 2027259, 2027260, 2027261, 2027262, 2027263, 2027264, 2027265, 2027266, 2027267, 2027268, 2027269, 2027270, 2027271, 2027272, 2027273, 2027274, 2027275, 2027276, 2027277, 2027278, 2027279, 2028134, 2029169, 2029170, 2029171, 2029172, 2029173, 2029174, 2029175, 2029176, 2029177, 2029178, 2029179, 2029180, 2029181, 2029182, 2029632, 2029634, 2029636, 2029657, 2030094, 2034166, 2034703, 2034704, 2034705, 2034706, 2034707, 2035842, 2036055, 2036768, 2039884, 2041210, 2041339, 2041340, 2041341, 2041342, 2041348, 2041350, 2041382, 2041383, 2041388, 2041389, 2041486, 2041487, 2041488, 2041489, 2041490, 2041491, 2041492, 2041493, 2041494, 2041495, 2041496, 2041497, 2041498, 2041499, 2041500, 2041501, 2041502, 2041503, 2041504, 2041505, 2041506, 2041507, 2041508, 2041509, 2041510, 2042251, 2045361, 2045370, 2045371, 2047876, 2047877, 2047878, 2047879, 2047880, 2047881, 2047882, 2047883, 2047884, 2047885, 2047886, 2047887, 2047888, 2047889, 2047890, 2047891, 2047892, 2047893, 2047894, 2047895, 2047896, 2047897, 2047898, 2047899, 2047900, 2047901, 2047902, 2047903, 2047904, 2047905, 2047906, 2047907, 2047908, 2047909, 2047910, 2047911, 2047912, 2047913, 2047914, 2047915, 2047916, 2047917, 2047918, 2047919, 2047920, 2047921, 2047922, 2047923, 2047924, 2047925, 2047926, 2047927, 2047928, 2047929, 2047930, 2047931, 2047932, 2047933, 2047934, 2048517, 2048976, 2048977, 2048978, 2048979, 2048980, 2053015, 2053193, 2053563, 2053587, 2053623, 2053671, 2053675, 2053682, 2053692, 2054272, 2054273, 2054274, 2054877, 2055238, 2056127, 2056767, 2056768, 2057886, 2057887, 2057888, 2058668, 2059850, 2059851, 2059854, 2059858, 2059878, 2059879, 2060091, 2060111, 2060120, 2060121, 2060122, 2060123, 2060124, 2060946, 2065202, 2065203, 2066503, 2066504, 2069312, 2069608, 2069609, 2069610, 2069614, 2069615, 2070026, 2070178, 2070179, 2070180, 2070181, 2070182, 2070183, 2070184, 2070185, 2070186, 2070187, 2070188, 2070189, 2070190, 2070191, 2070192, 2070193, 2070194, 2070195, 2070196, 2070200, 2070201, 2070202, 2070496, 2070497, 2070715, 2070716, 2070717, 2070718, 2070719, 2070720, 2070721, 2070722, 2070723, 2070724, 2070725, 2070726, 2070727, 2070728, 2071659, 2072003, 2072004, 2072005, 2072006, 2072010, 2072011, 2072012, 2072797, 2077133, 2077134, 2077135, 2079258, 2079288, 2079289, 2079290, 2079298, 2079321, 2079340, 2079347, 2079429, 2079430, 2079431, 2079432, 2079433, 2079434, 2079543, 2079544, 2082209, 2083161, 2086639, 2094142, 2094572, 2099336, 2099338, 2099648, 2099649, 2100124, 2100421, 2108110, 2108163, 2108165, 2108166, 2108167, 2108168, 2108169, 2108170, 2108171, 2108172, 2108174, 2115967, 2116688, 2126724, 2126734, 2136797, 2137745, 2161785, 2162887, 2163024, 2163963, 2184051, 2184265, 2201414, 2202135, 2202246, 2202247, 2202248, 2202648, 2211467, 2211468, 2211469, 2212812, 2212813, 2212814, 2212815, 2212816, 2212817, 2212818, 2212819, 2212820, 2212821, 2212822, 2212823, 2212824, 2212825, 2212826, 2212827, 2218497, 2218498, 2218499, 2218589, 2231344, 2231346, 2231347, 2234036, 2234037, 2234088, 2234104, 2248772, 2249763, 2249768, 2249773, 2250311, 2250488, 2250489, 2250490, 2250491, 2267403, 2267607, 2267608, 2267678, 2267868, 2268394, 2268395, 2268611, 2268612, 2269362, 2282175, 2282396, 2282402, 2282407, 2282408, 2282638, 2282848, 2283013, 2290809, 2301527, 2301531, 2301535, 2301647, 2301648, 2301649, 2301661, 2301683, 2301684, 2301685, 2301686, 2301731, 2302378, 2303977, 2304657, 2305035, 2306891, 2306892, 2315217, 2315335, 2315483, 2315484, 2315485, 2315527, 2315601, 2315766, 2315797, 2316006, 2320188, 2320190, 2321388, 2321389, 2341047, 2341048, 2382211, 2382212, 2419581, 2419582, 2419617, 2419618, 2419623, 2419745, 2419752, 2419783, 2419930, 2420341, 2478683, 2483417, 2484222, 2484637, 2484638, 2486353, 2486354, 2486355, 2486358, 2486600, 2486601, 2486602, 2486665, 2488705, 2488706, 2488707, 2488708, 2488709, 2488710, 2488711, 2488712, 2488713, 2488824, 2489187, 2490448, 2490449, 2490450, 2490451, 2491662, 2492473, 2494703, 2494704, 2494705, 2494706, 2494717, 2494718, 2495576, 2495585, 2496589, 2500148, 2500558, 2508194, 2509554, 2509555, 2509556, 2509557, 2509558, 2509559, 2509560, 2509561, 2509562, 2509563, 2509564, 2509565, 2509566, 2509567, 2509568, 2509569, 2509570, 2509571, 2509572, 2509573, 2509574, 2509575, 2509576, 2509577, 2509578, 2509579, 2509580, 2509581, 2509582, 2509583, 2509584, 2509585, 2509586, 2509587, 2509588, 2509589, 2509590, 2509591, 2509592, 2509593, 2509652, 2509725, 2509726, 2509727, 2509728, 2509729, 2509730, 2509731, 2509732, 2509733, 2509734, 2509735, 2509736, 2509737, 2509738, 2509739, 2509740, 2509741, 2509742, 2509743, 2509744, 2509745, 2509746, 2509747, 2509748, 2509749, 2509750, 2509751, 2509752, 2509753, 2509754, 2509755, 2509756, 2509757, 2509758, 2509759, 2509760, 2509761, 2509762, 2509763, 2509764, 2509765, 2509766, 2509767, 2509768, 2509769, 2509770, 2509771, 2509772, 2509773, 2509774, 2509775, 2509776, 2509777, 2509778, 2509779, 2509780, 2509781, 2509782, 2509783, 2509784, 2509785, 2509786, 2509787, 2509788, 2510150, 2510151, 2510448, 2510941, 2510942, 2510943, 2516329, 2516330, 2516331, 2518364, 2530042, 2546303, 2546633, 2546634, 2547971, 2548104, 2548108, 2548122, 2548165, 2548247, 2548248, 2548250, 2548271, 2548283, 2548306, 2548308, 2555548, 2557578, 2557579, 2557580, 2557581, 2557582, 2557583, 2558524, 2558525, 2558526, 2558527, 2558528, 2558529, 2558530, 2558531, 2558532, 2558533, 2558534, 2558535, 2558536, 2558537, 2558538, 2558539, 2558540, 2558541, 2558542, 2558543, 2558544, 2558545, 2558546, 2558547, 2558548, 2558549, 2558550, 2558551, 2558552, 2558553, 2558554, 2558555, 2558556, 2558557, 2558558, 2558559, 2558560, 2558561, 2558562, 2558563, 2558564, 2558565, 2558566, 2558567, 2558568, 2558569, 2558570, 2558571, 2558572, 2558573, 2558574, 2558575, 2558576, 2558577, 2558578, 2558579, 2558580, 2558581, 2558582, 2558583, 2558584, 2558585, 2558586, 2558587, 2558588, 2558589, 2558590, 2558591, 2558592, 2558593, 2558594, 2558595, 2558596, 2558597, 2558598, 2558599, 2558600, 2558601, 2558602, 2558603, 2558604, 2558605, 2558606, 2558607, 2558608, 2558609, 2558610, 2558611, 2558612, 2558613, 2558614, 2558615, 2558616, 2558617, 2558618, 2558619, 2558620, 2558621, 2558622, 2558623, 2558624, 2558625, 2558626, 2558627, 2558628, 2558629, 2558630, 2558631, 2558632, 2558633, 2558634, 2558635, 2558636, 2558637, 2558638, 2558639, 2558640, 2558641, 2558642, 2558643, 2558644, 2558645, 2558646, 2558647, 2558648, 2558649, 2558650, 2558651, 2558652, 2558653, 2558654, 2558655, 2558656, 2558657, 2558658, 2558659, 2558660, 2558661, 2558662, 2558663, 2558664, 2558665, 2558666, 2558667, 2558668, 2558669, 2558670, 2558671, 2558672, 2558673, 2558674, 2558675, 2558676, 2558677, 2558678, 2558679, 2558680, 2558681, 2558682, 2558683, 2558684, 2558685, 2558686, 2558687, 2558688, 2558689, 2558690, 2558691, 2558692, 2558693, 2558694, 2558695, 2558696, 2558697, 2558698, 2558699, 2558700, 2558701, 2558702, 2558703, 2558704, 2558705, 2558706, 2558707, 2558708, 2558709, 2558710, 2558711, 2558712, 2558713, 2558714, 2558715, 2558716, 2558717, 2558718, 2558719, 2558720, 2558721, 2558722, 2558723, 2558724, 2558725, 2558726, 2558727, 2558728, 2558729, 2558730, 2558731, 2558732, 2558733, 2558734, 2558735, 2558736, 2558737, 2558738, 2558739, 2558740, 2558741, 2558742, 2558743, 2558744, 2558745, 2558746, 2558747, 2558748, 2558749, 2558750, 2558751, 2558752, 2558753, 2558754, 2558755, 2558756, 2558757, 2558758, 2558759, 2558760, 2558761, 2558762, 2558763, 2558764, 2558765, 2558766, 2558767, 2558768, 2558769, 2558770, 2558771, 2558772, 2558773, 2558774, 2558775, 2558776, 2558777, 2558778, 2558779, 2558780, 2558781, 2558782, 2558783, 2558784, 2558785, 2558786, 2558787, 2558788, 2558789, 2558790, 2558791, 2558792, 2558793, 2558794, 2558795, 2558796, 2558797, 2558798, 2558799, 2558800, 2558801, 2558802, 2558803, 2558804, 2558805, 2558806, 2558807, 2558808, 2558809, 2558810, 2558811, 2558812, 2558813, 2558814, 2558815, 2558816, 2558817, 2558818, 2558819, 2558820, 2558821, 2558822, 2558823, 2558824, 2558825, 2558826, 2558827, 2558828, 2558829, 2558830, 2558831, 2558832, 2558833, 2558834, 2558835, 2558836, 2558837, 2558838, 2558839, 2558840, 2558841, 2558842, 2558843, 2558844, 2558845, 2558846, 2558847, 2558848, 2558849, 2558850, 2558851, 2558852, 2558853, 2558854, 2558855, 2558856, 2558857, 2558858, 2558859, 2558860, 2558861, 2558862, 2558863, 2558864, 2558865, 2558866, 2558867, 2558868, 2558869, 2558870, 2558871, 2559714, 2559716, 2562457, 2562780, 2562809, 2562810, 2562811, 2562812, 2562813, 2562814, 2562825, 2563487, 2563505, 2563535, 2563553, 2563570, 2563576, 2563587, 2563590, 2565372, 2565877, 2570912, 2571247, 2572317, 2575256, 2575458, 2575459, 2575460, 2575461, 2575462, 2575463, 2575464, 2575465, 2575466, 2575467, 2575468, 2575469, 2575470, 2575610, 2575611, 2575612, 2576870, 2584487, 2587819, 2588516, 2589660, 2589661, 2589662, 2589663, 2589664, 2589846, 2589847, 2590043, 2590048, 2590050, 2590051, 2590092, 2591024, 2591026, 2591027, 2591028, 2591029, 2591057, 2591380, 2592196, 2592215, 2592220, 2592658, 2592659, 2592660, 2592661, 2593268, 2593638, 2593639, 2594927, 2595040, 2595045, 2596657, 2596671, 2596884, 2596885, 2598876, 2600100, 2601631, 2601638, 2601669, 2601680, 2603906, 2604894, 2606591, 2607648, 2608086, 2608318, 2608322, 2608370, 2608383, 2609449, 2610840, 2613898, 2650877, 2653964, 2654329, 2654654, 2654655, 2654656, 2656506, 2656507, 2656508, 2660560, 2660561, 2663232, 2663305, 2664132, 2664247, 2664248, 2664939, 2664976, 2664977, 2666261, 2674969, 2674970, 2674972, 2674973, 2674974, 2674975, 2674976, 2675824, 2675825, 2675826, 2675827, 2675828, 2681674, 2681675, 2681777, 2682147, 2682148, 2682149, 2682150, 2682151, 2682152, 2682153, 2682154, 2682155, 2682156, 2682157, 2686250, 2686307, 2686437, 2686455, 2686456, 2686457, 2686460, 2686461, 2686462, 2686464, 2686475, 2692157, 2692158, 2692159, 2692160, 2692161, 2694977, 2696337, 2696679, 2699378, 2703653, 2703960, 2704941, 2705347, 2705348, 2705349, 2705350, 2705351, 2705352, 2705353, 2705354, 2705355, 2705356, 2705357, 2705358, 2705359, 2705360, 2705361, 2705362, 2705363, 2705364, 2705365, 2705366, 2705367, 2705368, 2705369, 2705370, 2705371, 2705372, 2707030, 2707031, 2527896, 2650662, 2650663, 2650664, 2686291, 2698904, 2698905, 2698906, 2698907, 2698908, 2698909, 2698910, 2698911, 2698912, 2698913, 2699794, 2700089, 2700090, 2704027, 2704028, 2704937, 2704938, 2704939, 2704940, 2708592, 2711210, 2711211, 2711212, 2711213, 2712940, 2713010, 2713011, 2713012, 2713013, 2713014, 2713015, 2713016, 2713017, 2713018, 2713019, 2713020, 2713021, 2713022, 2713023, 2713024, 2713025, 2713026, 2713027, 2713028, 2713029, 2713030, 2713031, 2713273, 2713274, 2713278, 2713281, 2713292, 2713301, 2713303, 2713304, 2713306, 2713310, 2713314, 2715931, 2716170, 2716355, 2718493, 2718494, 2718495, 2718496, 2718942, 2721235, 2723238, 2723239, 2723240, 2723241, 2723242, 2723243, 2724167, 2724168, 2724179, 2724180, 2724181, 2724182, 2724183, 2726968, 2726969, 1262524, 1930180, 2036701, 2171522, 2220005, 2282399, 2492466, 2510450, 2559250, 2562112, 2586644, 2586957, 2586958, 2588358, 2588359, 2590162, 2591410, 2593324, 2593329, 2593331, 2599601, 2599602, 2601675, 2604904, 2607483, 2607484, 2607485, 2607486, 2607487, 2607488, 2607489, 2607490, 2608403, 2651150, 2651151, 2653640, 2663167, 2663168, 2663169, 2664208, 2664209, 2675228, 2686372, 2686373, 2686374, 2686375, 2686376, 2686377, 2686426, 2686431, 2686432, 2686433, 2686434, 2686435, 2686436, 2686438, 2697093, 2705441, 2707331, 2710493, 2710494, 2710496, 2710498, 2710499, 2710500, 2710501, 2710502, 2710503, 2710504, 2710505, 2710506, 2710507, 2710508, 2710509, 2710510, 2710511, 2710512, 2710513, 2710514, 2710515, 2710516, 2710517, 2710518, 2710519, 2711163, 2711169, 2711170, 2711171, 2711172, 2711173, 2711174, 2711175, 2711176, 2711180, 2711181, 2713217, 2714735, 2715801, 2715802, 2715803, 2715804, 2718473, 2718474, 2718475, 2718476, 2718477, 2718478, 2718479, 2718480, 2718481, 2718482, 2721556, 2723743, 2723905, 2723909, 2723910, 2727866, 2727867, 2727868, 2727869, 2727870, 2727871, 2727872, 2727873, 2727874, 2727875, 2727876, 2727877, 2728916, 2728917, 2728918, 2728919, 2728920, 2728921, 2728922, 2728923, 2729632, 2729638, 2729639, 2729677, 2730535, 2731215, 2731216, 2731217, 2734642, 2735125, 2735171, 2736185, 2736188, 2736189, 2736196, 2736204, 2736224, 2736225, 2736226, 2736227, 2736228, 2736230, 2736231, 2736232, 2736233, 2736234, 2736235, 2736256, 2736257, 2736259, 2736260, 2736261, 2736262, 2736263, 2736264, 2736265, 2736267, 2736274, 2736275, 2736281, 2736282, 2736286, 2736288, 2736341, 2736365, 2736477, 2736478, 2736479, 2736480, 2736481, 2736482, 2736483, 2736484, 2736485, 2736486, 2736487, 2736488, 2736489, 2736490, 2736491, 2736492, 2736493, 2736494, 2736495, 2736496, 2736497, 2736498, 2736499, 2736500, 2736501, 2736502, 2736503, 2736504, 2736505, 2736506, 2736507, 2736508, 2736509, 2736510, 2736511, 2736512, 2736632, 2736651, 2736912, 2736913, 2736930, 2736931, 2736932, 2736933, 2739751, 2739753, 2740180, 2740292, 2741341, 2742414, 2742446, 2742946, 2742947, 2743795, 2743797, 2743803, 2743804, 2743843, 2743960, 2743962, 2743969, 2744002, 2744409, 2744482, 2745570, 2745571, 2747542, 2748341, 2749259, 2749352, 2749414, 2749415, 2749416, 2749417, 2749426, 2749428, 2750854, 2750856, 2750857, 2755132, 2755143, 2755402, 2759019, 2759020, 2759021, 2759125, 2759188, 2759196, 2759198, 2759203, 2759206, 2759210, 2759217, 2759380, 2759381, 2759599, 2759719, 2761371, 2761631, 2761632, 2761633, 2761634, 2762027, 2762279, 2762287, 2762289, 2762290, 2762303, 2762304, 2762560, 2762670, 2762671, 2762672, 2763137, 2763529, 2763531, 2764949, 2764950, 2765371, 2766478, 2766704, 2766836, 2766968, 2767198, 2767513, 2767544, 2767545, 2767547, 2767548, 2767549, 2767550, 2767551, 2767552, 2767573, 2767574, 2767575, 2767582, 2767583, 2768772, 2769330, 2769331, 2769332, 2769358, 2769806, 2770327, 2771289, 2771290, 2772015, 2772016, 2772017, 2772018, 2772019, 2772447, 2775043, 2775098, 2775099, 2775100, 2775262, 2776735, 2776766, 2776771, 2776773, 2776807, 2776814, 2776815, 2776816, 2776830, 2777229, 2777230, 2777300, 2777301, 2777321, 2777348, 2777349, 2777359, 2777360, 2777361, 2777371, 2777372, 2777377, 2777378, 2777380, 2777382, 2777383, 2777384, 2777385, 2777386, 2777387, 2777388, 2777389, 2777390, 2777391, 2777392, 2777393, 2777394, 2777395, 2777396, 2777397, 2777398, 2777399, 2777400, 2777401, 2777402, 2777403, 2777404, 2777405, 2777406, 2777407, 2781113, 2781368, 2781369, 2781370, 2782561, 2782718, 2782719, 2783517, 2783542, 2783544, 2785385, 2785386, 2785525, 2785801, 2789657, 2789811, 2789812, 2793260, 2794827, 2794848, 2794941, 2796499, 2796502, 2796513, 2797114, 2797115, 2797303, 2797304, 2797407, 2797416, 2797417, 2797426, 2798805, 2799623, 2800706, 2800822, 2800823, 2800824, 2800826, 2800828, 2801364, 2801365, 2801366, 2801367, 2801368, 2801475, 2801480, 2801515, 2801516, 2801517, 2801518, 2801519, 2801520, 2801522, 2801524, 2801525, 2801526, 2801817, 2801866, 2801867, 2801868, 2803736, 2803737, 2803779, 12426, 31759, 227720, 298976, 298977, 317414, 382275, 387264, 532076, 588068, 718008, 925983, 925985, 979536, 979537, 979539, 1027414, 1048190, 1048191, 1048192, 1075775, 1141525, 1176434, 1176764, 1176765, 1195074, 1220603, 1273711, 1327768, 1415145, 1437328, 1437329, 1567007, 1636315, 1656936, 1673729, 1689660, 1755216, 1789752, 1805468, 1837219, 1874529, 1874530, 1874531, 1897443, 1933109, 1933112, 1965362, 1965369, 1965464, 1971233, 2006930, 2026085, 2041759, 2052744, 2052745, 2052747, 2052748, 2052749, 2052750, 2052751, 2052755, 2052756, 2052757, 2052933, 2052934, 2099585, 2109652, 2136178, 2163885, 2163977, 2163980, 2231353, 2250312, 2250314, 2259657, 2282994, 2283016, 2283017, 2283018, 2283019, 2283020, 2283021, 2283022, 2283023, 2283024, 2301689, 2307015, 2307016, 2307017, 2315465, 2315695, 2320189, 2320196, 2320198, 2340718, 2419683, 2483772, 2483865, 2488573, 2489146, 2489617, 2489619, 2489620, 2489621, 2489622, 2489623, 2489624, 2489625, 2489626, 2489629, 2489630, 2489631, 2489632, 2489633, 2489636, 2489637, 2496548, 2500561, 2500562, 2500563, 2500564, 2500565, 2500576, 2500821, 2508173, 2508174, 2508175, 2508176, 2508188, 2508189, 2508204, 2508205, 2508207, 2510451, 2530029, 2530030, 2530031, 2562179, 2562180, 2562199, 2562542, 2562601, 2562644, 2565516, 2565517, 2575261, 2575323, 2575327, 2576478, 2576479, 2576480, 2576481, 2576482, 2576487, 2576488, 2576489, 2576490, 2576491, 2576492, 2576493, 2576494, 2576495, 2576496, 2576497, 2576498, 2576499, 2576500, 2576501, 2576502, 2576503, 2576504, 2576505, 2576506, 2576507, 2576508, 2576509, 2576510, 2576511, 2576512, 2576513, 2576514, 2576515, 2576516, 2576517, 2576518, 2576519, 2576520, 2576521, 2576522, 2576523, 2576524, 2576525, 2576526, 2576527, 2576528, 2576872, 2580405, 2580406, 2580407, 2580408, 2584486, 2585737, 2587820, 2588086, 2588125, 2589652, 2589653, 2589655, 2589656, 2589658, 2590872, 2590874, 2590896, 2591040, 2591045, 2591047, 2591100, 2591101, 2591102, 2591103, 2591104, 2591134, 2591135, 2591364, 2591368, 2591369, 2591370, 2591371, 2591373, 2591374, 2591375, 2591376, 2591377, 2591402, 2591407, 2591427, 2592058, 2592195, 2592197, 2592198, 2592199, 2592202, 2592203, 2596677, 2596967, 2601613, 2601614, 2601615, 2601616, 2601617, 2601619, 2601621, 2601622, 2601628, 2601629, 2601639, 2601644, 2601648, 2601649, 2601650, 2601666, 2601667, 2601679, 2601683, 2601697, 2608294, 2608298, 2608299, 2608319, 2608323, 2608371, 2608372, 2608376, 2608405, 2650665, 2650874, 2650875, 2651149, 2652426, 2652427, 2652430, 2652431, 2653642, 2653643, 2653645, 2653646, 2653652, 2660694, 2660705, 2662284, 2663027, 2663328, 2664213, 2664214, 2675210, 2675211, 2675212, 2678563, 2681376, 2686041, 2686072, 2686204, 2686205, 2686206, 2686207, 2686209, 2686284, 2689113, 2689114, 2692738, 2695840, 2696336, 2696344, 2696375, 2696376, 2696378, 2696381, 2696385, 2696389, 2696393, 2696397, 2696398, 2696400, 2696401, 2696402, 2696404, 2696410, 2696417, 2696418, 2696437, 2696444, 2696448, 2696449, 2696450, 2696451, 2696452, 2696454, 2696456, 2696457, 2696459, 2696460, 2697005, 2698729, 2698730, 2698962, 2698963, 2698973, 2698975, 2698976, 2699877, 2709754, 2712960, 2712961, 2712962, 2712970, 2712971, 2712975, 2712976, 2712977, 2712979, 2713154, 2713155, 2713210, 2713222, 2713277, 2713279, 2713280, 2713284, 2713285, 2713288, 2713296, 2713297, 2713298, 2713299, 2713300, 2713305, 2713308, 2713309, 2713311, 2713313, 2713317, 2713318, 2713321, 2713322, 2713325, 2713465, 2721760, 2723742, 2723762, 2723904, 2723990].freeze
  # rubocop:enable Style/NumericLiterals
end
