From 72c0e156147b3cc3620f35c8891efe9d6692bbb7 Mon Sep 17 00:00:00 2001 From: Hri7566 Date: Thu, 13 Jan 2022 00:18:06 -0500 Subject: [PATCH] stuff --- .gitignore | 4 +- README.md | 2 +- bot2019.db/CURRENT | 2 +- bot2019.db/LOG | 10 +- bot2019.db/LOG.old | 6 +- bot2022.db/000283.log | Bin 192855 -> 0 bytes bot2022.db/000284.ldb | Bin 4235 -> 0 bytes bot2022.db/000374.log | Bin 0 -> 1598720 bytes bot2022.db/000375.ldb | Bin 0 -> 3838 bytes bot2022.db/CURRENT | 2 +- bot2022.db/LOG | 25 +- bot2022.db/LOG.old | 18 +- bot2022.db/MANIFEST-000281 | Bin 599 -> 0 bytes bot2022.db/MANIFEST-000372 | Bin 0 -> 418 bytes index.js | 400 +- package-lock.json | 1476 +-- package.json | 50 +- src/Bot.js | 487 +- src/Color.js | 2090 ++-- src/Commands.js | 3439 +++---- src/DiscordClient.js | 146 +- src/MPPClient.js | 158 +- src/RateLimit.js | 136 +- src/StaticEventEmitter.js | 30 +- src/mppt-client.js | 628 +- src/newfish.json | 18717 +++++++++++++++++------------------ src/pokedex.json | 4968 +++++----- src/treeMessages.json | 293 + 28 files changed, 16711 insertions(+), 16376 deletions(-) delete mode 100644 bot2022.db/000283.log delete mode 100644 bot2022.db/000284.ldb create mode 100644 bot2022.db/000374.log create mode 100644 bot2022.db/000375.ldb delete mode 100644 bot2022.db/MANIFEST-000281 create mode 100644 bot2022.db/MANIFEST-000372 create mode 100644 src/treeMessages.json diff --git a/.gitignore b/.gitignore index c6f656b..a224ad1 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,3 @@ -.env -node_modules +.env +node_modules .history \ No newline at end of file diff --git a/README.md b/README.md index bbeefd1..2c46454 100644 --- a/README.md +++ b/README.md @@ -1 +1 @@ -# booger +# booger diff --git a/bot2019.db/CURRENT b/bot2019.db/CURRENT index e75c8d4..de8fc1f 100644 --- a/bot2019.db/CURRENT +++ b/bot2019.db/CURRENT @@ -1 +1 @@ -MANIFEST-000204 +MANIFEST-000204 diff --git a/bot2019.db/LOG b/bot2019.db/LOG index bab1261..7c11368 100644 --- a/bot2019.db/LOG +++ b/bot2019.db/LOG @@ -1,5 +1,5 @@ -2021/08/06-00:35:25.097 6b0c Recovering log #203 -2021/08/06-00:35:25.097 6b0c Level-0 table #205: started -2021/08/06-00:35:25.105 6b0c Level-0 table #205: 316 bytes OK -2021/08/06-00:35:25.121 6b0c Delete type=0 #203 -2021/08/06-00:35:25.124 6b0c Delete type=3 #202 +2021/08/06-00:35:25.097 6b0c Recovering log #203 +2021/08/06-00:35:25.097 6b0c Level-0 table #205: started +2021/08/06-00:35:25.105 6b0c Level-0 table #205: 316 bytes OK +2021/08/06-00:35:25.121 6b0c Delete type=0 #203 +2021/08/06-00:35:25.124 6b0c Delete type=3 #202 diff --git a/bot2019.db/LOG.old b/bot2019.db/LOG.old index 0ea2d79..12f66e6 100644 --- a/bot2019.db/LOG.old +++ b/bot2019.db/LOG.old @@ -1,3 +1,3 @@ -2021/08/06-00:34:35.908 5ec4 Recovering log #201 -2021/08/06-00:34:35.923 5ec4 Delete type=0 #201 -2021/08/06-00:34:35.925 5ec4 Delete type=3 #200 +2021/08/06-00:34:35.908 5ec4 Recovering log #201 +2021/08/06-00:34:35.923 5ec4 Delete type=0 #201 +2021/08/06-00:34:35.925 5ec4 Delete type=3 #200 diff --git a/bot2022.db/000283.log b/bot2022.db/000283.log deleted file mode 100644 index 1f773480a31c952339af60ac2dd28bd80a92aa49..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 192855 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 diff --git a/bot2022.db/000284.ldb b/bot2022.db/000284.ldb deleted file mode 100644 index 1eb25d2ec7e23a8c2f7129d2a80f4f262b0ce4e5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4235 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

mrExHm3Y|@Ve7B>3O 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%0AZ}B2#J#ZGNp{b* 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 literal 0 HcmV?d00001 diff --git a/bot2022.db/000375.ldb b/bot2022.db/000375.ldb new file mode 100644 index 0000000000000000000000000000000000000000..474ee9c8a9b638bd2a73ca2ccdb8c1d6ee211462 GIT binary patch literal 3838 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 4235 bytes -2022/01/12-18:47:06.004105 7f255f7fe700 compacted to: files[ 0 1 0 0 0 0 0 ] -2022/01/12-18:47:06.004445 7f255f7fe700 Delete type=2 #271 -2022/01/12-18:47:06.004613 7f255f7fe700 Delete type=2 #279 -2022/01/12-18:47:06.004705 7f255f7fe700 Delete type=2 #276 -2022/01/12-18:47:06.004781 7f255f7fe700 Delete type=2 #282 -2022/01/12-18:47:06.004842 7f255f7fe700 Delete type=2 #273 +2022/01/12-17:42:12.099 7cc4 Recovering log #370 +2022/01/12-17:42:12.103 7cc4 Level-0 table #373: started +2022/01/12-17:42:12.111 7cc4 Level-0 table #373: 67945 bytes OK +2022/01/12-17:42:12.115 7cc4 Delete type=0 #370 +2022/01/12-17:42:12.116 7cc4 Delete type=3 #368 +2022/01/12-19:28:57.060 2944 Compacting 1@0 + 1@1 files +2022/01/12-19:28:57.063 2944 Generated table #375@0: 57 keys, 3838 bytes +2022/01/12-19:28:57.063 2944 Compacted 1@0 + 1@1 files => 3838 bytes +2022/01/12-19:28:57.064 2944 compacted to: files[ 0 1 0 0 0 0 0 ] +2022/01/12-19:28:57.064 2944 Delete type=2 #371 +2022/01/12-19:28:57.065 2944 Delete type=2 #373 diff --git a/bot2022.db/LOG.old b/bot2022.db/LOG.old index 2fe909a..105cecd 100644 --- a/bot2022.db/LOG.old +++ b/bot2022.db/LOG.old @@ -1,5 +1,13 @@ -2022/01/12-18:44:02.311542 7f2decce2700 Recovering log #277 -2022/01/12-18:44:02.312469 7f2decce2700 Level-0 table #279: started -2022/01/12-18:44:02.319879 7f2decce2700 Level-0 table #279: 6762 bytes OK -2022/01/12-18:44:02.327618 7f2decce2700 Delete type=0 #277 -2022/01/12-18:44:02.327833 7f2decce2700 Delete type=3 #275 +2022/01/12-16:14:05.171 7c80 Recovering log #367 +2022/01/12-16:14:05.172 7c80 Level-0 table #369: started +2022/01/12-16:14:05.173 7c80 Level-0 table #369: 2167 bytes OK +2022/01/12-16:14:05.178 7c80 Delete type=0 #367 +2022/01/12-16:14:05.178 7c80 Delete type=3 #365 +2022/01/12-16:21:34.033 2ff0 Compacting 3@0 + 1@1 files +2022/01/12-16:21:34.034 2ff0 Generated table #371@0: 49 keys, 3381 bytes +2022/01/12-16:21:34.034 2ff0 Compacted 3@0 + 1@1 files => 3381 bytes +2022/01/12-16:21:34.036 2ff0 compacted to: files[ 0 1 0 0 0 0 0 ] +2022/01/12-16:21:34.036 2ff0 Delete type=2 #361 +2022/01/12-16:21:34.036 2ff0 Delete type=2 #363 +2022/01/12-16:21:34.036 2ff0 Delete type=2 #366 +2022/01/12-16:21:34.037 2ff0 Delete type=2 #369 diff --git a/bot2022.db/MANIFEST-000281 b/bot2022.db/MANIFEST-000281 deleted file mode 100644 index 6eb284bff1d4e45103e1a67da940f511c5f360b2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 599 zcmZQ-ExwY%$jB&_lUkOVlai$8R9TW*o>`pgoS$2eSd>_jU&P8FnUkNNtyi3rnp&Xu zXnLA#YtO1KrKXRc)O=P;RMT}8t5Di$2YRZ8cHJ#~|39?ZZhRFuW<|YQFNh!&x7D-8_ z#wI3-Nk)uo3vjtAJ|AKfV?Wbod1Rw-dC(PNHx^gbKx8hsC8~!rFfz?%;$&c+!^E=r z2_rkhET$jaNTwTGrllI1Bmo_mYHn(lWMXM(mSUJ}p3Goegv+7(3c)g3m7-zoFw^IP nO~)E>&>&)Cn8?Hij661m=|DV-i4EvacE&kO-4sTq5yYJUm;k5w diff --git a/bot2022.db/MANIFEST-000372 b/bot2022.db/MANIFEST-000372 new file mode 100644 index 0000000000000000000000000000000000000000..0d39788c28f5d7cc5a169e803f57a4ea8f545920 GIT binary patch literal 418 zcmWH3!Jaykfss)vC$%g!CnZVGsj?)sJhM2}IX|}`u_&=5zlfDVr8u*s&L}M{+1T8~ zBrPe~Fe%wA*(^29B+=N|fN?@E0|>A)erDP#rInUhoS{&hn4Dc_V3=%_YLH@_W^8U? zoMK>LVv>?*W@K)`_^1o40c@(NxuvObYHD(#c}j|fxly8-g;A<`YEla0wH~md*9qm% zk{KA8zAVtLiT4D~r7ooqk{u>pP0&iI|_pDfkfmD&$>7XWYGb@KoK literal 0 HcmV?d00001 diff --git a/index.js b/index.js index 29b81d8..9c4a447 100644 --- a/index.js +++ b/index.js @@ -1,200 +1,200 @@ -require('dotenv').config(); - -globalThis.gBot = require('./src/Bot'); - -const level = require('level'); -const MPPClient = require('./src/MPPClient'); - -globalThis.db = level("./bot2022.db"); - -let sendChat = MPPClient.sendChat; - -db.getPokemon = function(id, cb) { - var key = "pokemon collection~"+id; - db.get(key, function(err, value) { - if(err || !value || value == "") { - cb([]); - return; - } - var result = []; - value = value.split("\xff"); - for(var i = 0; i < value.length; i++) { - var v = value[i].trim(); - if(v.length) result.push(v); - } - cb(result); - }); -} - -db.putPokemon = function(id, arr) { - var result = ""; - for(var i = 0; i < arr.length; i++) { - var v = arr[i]; - if(!v) continue; - v = v.trim(); - if(v.length > 0) { - if(i) result += "\xff"; - result += v; - } - } - var key = "pokemon collection~"+id; - if(result.length) - db.put(key, result); - else - db.del(key); -} - -db.readArray = function(start, end, cb) { - var results = []; - db.createReadStream({ - start: start, - end: end - }) - .on("data", function(data) { - results.push(data); - }) - .on("end", function() { - cb(results); - }); -}; - -function listArray(arr) { - var result = ""; - for(var i = 0; i < arr.length; i++) { - if(i && i !== arr.length - 1) result += ", "; - if(i && i === arr.length - 1) result += ", and "; - result += arr[i]; - } - return result; -} - -// tries to find the thing by text -// calls cb with undefined or entry -db.look = function(location, text, cb) { - text = text.toLowerCase().trim(); - if(text == "") { - // "/look" with no search text - db.get("look."+location, function(err, value) { - var response = ""; - if(err) response = "Well..."; - else response = value; - var sel = "look."+location+".◍"; - db.readArray(sel, sel+"\xff", function(results) { - var results = results.map(data=>data.key.substr(sel.length)); - if(results.length) response += " There's "+listArray(results)+ ", about."; - sendChat(response); - }); - }); - } else { - var entry = undefined; - var sel = "look."+location+"."; - db.createReadStream({ - start: sel, - end: sel+"◍\xff" - }) - .on("data", function(data) { - if(data.key.substr(sel.length).toLowerCase().indexOf(text) > -1) { - entry = data; - } - }) - .on("end", function() { - cb(entry); - }); - } -} -db.take = function(location, text, cb) { - text = text.toLowerCase().trim(); - var sel = "look."+location+".◍"; - var entry = undefined; - db.createReadStream({ - start: sel, - end: sel+"\xff" - }) - .on("data", function(data) { - if(data.key.substr(sel.length).toLowerCase().indexOf(text) > -1) { - entry = data; - } - }) - .on("end", function() { - cb(entry); - }); -} - -db.getLocation = function(id, cb) { - var key = "location~"+id; - db.get(key, function(err, value) { - if(err || !value || value == "") { - return cb("outside"); - } - return cb(value); - }); -} - -db.setLocation = function(id, location) { - if(!location || location === "") { - location = "outside"; - } - db.put("location~"+id, location); -} - -db.getFish = function(id, cb) { - var key = "fish sack~"+id; - db.get(key, function(err, value) { - if(err || !value || value == "") { - cb([]); - return; - } - var result = []; - value = value.split("\xff"); - for(var i = 0; i < value.length; i++) { - var v = value[i].trim(); - if(v.length) result.push(v); - } - cb(result); - }); -} - -db.putFish = function(id, arr) { - var result = ""; - for(var i = 0; i < arr.length; i++) { - var v = arr[i]; - if(!v) continue; - v = v.trim(); - if(v.length > 0) { - if(i) result += "\xff"; - result += v; - } - } - var key = "fish sack~"+id; - if(result.length) - db.put(key, result); - else - db.del(key); -} - -db.appendFish = function(id, arr) { - db.getFish(id, function(myfish) { - myfish = myfish.concat(arr); - //console.log(id, myfish); - db.putFish(id, myfish); - }); -} - -db.getFruits = function(cb) { - var key = "kekklefruit tree"; - db.get(key, function(err, value) { - if(err || !value || value == "") { - cb(0); - return; - } - cb(parseInt(value)); - }); -} - -db.setFruits = function(num_fruits) { - var key = "kekklefruit tree"; - db.put(key, num_fruits); -} - - -gBot.start(process.env.MPPCLONE_TOKEN); +require('dotenv').config(); + +globalThis.gBot = require('./src/Bot'); + +const level = require('level'); +const MPPClient = require('./src/MPPClient'); + +globalThis.db = level("./bot2022.db"); + +let sendChat = MPPClient.sendChat; + +db.getPokemon = function(id, cb) { + var key = "pokemon collection~"+id; + db.get(key, function(err, value) { + if(err || !value || value == "") { + cb([]); + return; + } + var result = []; + value = value.split("\xff"); + for(var i = 0; i < value.length; i++) { + var v = value[i].trim(); + if(v.length) result.push(v); + } + cb(result); + }); +} + +db.putPokemon = function(id, arr) { + var result = ""; + for(var i = 0; i < arr.length; i++) { + var v = arr[i]; + if(!v) continue; + v = v.trim(); + if(v.length > 0) { + if(i) result += "\xff"; + result += v; + } + } + var key = "pokemon collection~"+id; + if(result.length) + db.put(key, result); + else + db.del(key); +} + +db.readArray = function(start, end, cb) { + var results = []; + db.createReadStream({ + start: start, + end: end + }) + .on("data", function(data) { + results.push(data); + }) + .on("end", function() { + cb(results); + }); +}; + +function listArray(arr) { + var result = ""; + for(var i = 0; i < arr.length; i++) { + if(i && i !== arr.length - 1) result += ", "; + if(i && i === arr.length - 1) result += ", and "; + result += arr[i]; + } + return result; +} + +// tries to find the thing by text +// calls cb with undefined or entry +db.look = function(location, text, cb) { + text = text.toLowerCase().trim(); + if(text == "") { + // "/look" with no search text + db.get("look."+location, function(err, value) { + var response = ""; + if(err) response = "Well..."; + else response = value; + var sel = "look."+location+".◍"; + db.readArray(sel, sel+"\xff", function(results) { + var results = results.map(data=>data.key.substr(sel.length)); + if(results.length) response += " There's "+listArray(results)+ ", about."; + sendChat(response); + }); + }); + } else { + var entry = undefined; + var sel = "look."+location+"."; + db.createReadStream({ + start: sel, + end: sel+"◍\xff" + }) + .on("data", function(data) { + if(data.key.substr(sel.length).toLowerCase().indexOf(text) > -1) { + entry = data; + } + }) + .on("end", function() { + cb(entry); + }); + } +} +db.take = function(location, text, cb) { + text = text.toLowerCase().trim(); + var sel = "look."+location+".◍"; + var entry = undefined; + db.createReadStream({ + start: sel, + end: sel+"\xff" + }) + .on("data", function(data) { + if(data.key.substr(sel.length).toLowerCase().indexOf(text) > -1) { + entry = data; + } + }) + .on("end", function() { + cb(entry); + }); +} + +db.getLocation = function(id, cb) { + var key = "location~"+id; + db.get(key, function(err, value) { + if(err || !value || value == "") { + return cb("outside"); + } + return cb(value); + }); +} + +db.setLocation = function(id, location) { + if(!location || location === "") { + location = "outside"; + } + db.put("location~"+id, location); +} + +db.getFish = function(id, cb) { + var key = "fish sack~"+id; + db.get(key, function(err, value) { + if(err || !value || value == "") { + cb([]); + return; + } + var result = []; + value = value.split("\xff"); + for(var i = 0; i < value.length; i++) { + var v = value[i].trim(); + if(v.length) result.push(v); + } + cb(result); + }); +} + +db.putFish = function(id, arr) { + var result = ""; + for(var i = 0; i < arr.length; i++) { + var v = arr[i]; + if(!v) continue; + v = v.trim(); + if(v.length > 0) { + if(i) result += "\xff"; + result += v; + } + } + var key = "fish sack~"+id; + if(result.length) + db.put(key, result); + else + db.del(key); +} + +db.appendFish = function(id, arr) { + db.getFish(id, function(myfish) { + myfish = myfish.concat(arr); + //console.log(id, myfish); + db.putFish(id, myfish); + }); +} + +db.getFruits = function(cb) { + var key = "kekklefruit tree"; + db.get(key, function(err, value) { + if(err || !value || value == "") { + cb(0); + return; + } + cb(parseInt(value)); + }); +} + +db.setFruits = function(num_fruits) { + var key = "kekklefruit tree"; + db.put(key, num_fruits); +} + + +gBot.start(process.env.MPPCLONE_TOKEN); diff --git a/package-lock.json b/package-lock.json index ae5db57..5ffa857 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,738 +1,738 @@ -{ - "name": "booger", - "version": "1.0.0", - "lockfileVersion": 2, - "requires": true, - "packages": { - "": { - "name": "booger", - "version": "1.0.0", - "license": "ISC", - "dependencies": { - "discord.js": "^12.5.3", - "dotenv": "^9.0.1", - "level": "^6.0.1" - } - }, - "node_modules/@discordjs/collection": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/@discordjs/collection/-/collection-0.1.6.tgz", - "integrity": "sha512-utRNxnd9kSS2qhyivo9lMlt5qgAUasH2gb7BEOn6p0efFh24gjGomHzWKMAPn2hEReOPQZCJaRKoURwRotKucQ==" - }, - "node_modules/@discordjs/form-data": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@discordjs/form-data/-/form-data-3.0.1.tgz", - "integrity": "sha512-ZfFsbgEXW71Rw/6EtBdrP5VxBJy4dthyC0tpQKGKmYFImlmmrykO14Za+BiIVduwjte0jXEBlhSKf0MWbFp9Eg==", - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/abort-controller": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", - "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", - "dependencies": { - "event-target-shim": "^5.0.0" - }, - "engines": { - "node": ">=6.5" - } - }, - "node_modules/abstract-leveldown": { - "version": "6.2.3", - "resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-6.2.3.tgz", - "integrity": "sha512-BsLm5vFMRUrrLeCcRc+G0t2qOaTzpoJQLOubq2XM72eNpjF5UdU5o/5NvlNhx95XHcAvcl8OMXr4mlg/fRgUXQ==", - "dependencies": { - "buffer": "^5.5.0", - "immediate": "^3.2.3", - "level-concat-iterator": "~2.0.0", - "level-supports": "~1.0.0", - "xtend": "~4.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" - }, - "node_modules/base64-js": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==" - }, - "node_modules/buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", - "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" - } - }, - "node_modules/combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "dependencies": { - "delayed-stream": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/deferred-leveldown": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/deferred-leveldown/-/deferred-leveldown-5.3.0.tgz", - "integrity": "sha512-a59VOT+oDy7vtAbLRCZwWgxu2BaCfd5Hk7wxJd48ei7I+nsg8Orlb9CLG0PMZienk9BSUKgeAqkO2+Lw+1+Ukw==", - "dependencies": { - "abstract-leveldown": "~6.2.1", - "inherits": "^2.0.3" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/discord.js": { - "version": "12.5.3", - "resolved": "https://registry.npmjs.org/discord.js/-/discord.js-12.5.3.tgz", - "integrity": "sha512-D3nkOa/pCkNyn6jLZnAiJApw2N9XrIsXUAdThf01i7yrEuqUmDGc7/CexVWwEcgbQR97XQ+mcnqJpmJ/92B4Aw==", - "dependencies": { - "@discordjs/collection": "^0.1.6", - "@discordjs/form-data": "^3.0.1", - "abort-controller": "^3.0.0", - "node-fetch": "^2.6.1", - "prism-media": "^1.2.9", - "setimmediate": "^1.0.5", - "tweetnacl": "^1.0.3", - "ws": "^7.4.4" - }, - "engines": { - "node": ">=12.0.0" - } - }, - "node_modules/dotenv": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-9.0.1.tgz", - "integrity": "sha512-W8FNeNnnvJoYfgkFRKzp8kTgz0T2YY4TJ9xy1Ma0hSebPTK8iquRtpG12TUrSTX5zIN9D/wSLEEuI+Ad35tlyw==", - "engines": { - "node": ">=10" - } - }, - "node_modules/encoding-down": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/encoding-down/-/encoding-down-6.3.0.tgz", - "integrity": "sha512-QKrV0iKR6MZVJV08QY0wp1e7vF6QbhnbQhb07bwpEyuz4uZiZgPlEGdkCROuFkUwdxlFaiPIhjyarH1ee/3vhw==", - "dependencies": { - "abstract-leveldown": "^6.2.1", - "inherits": "^2.0.3", - "level-codec": "^9.0.0", - "level-errors": "^2.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/errno": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz", - "integrity": "sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==", - "dependencies": { - "prr": "~1.0.1" - }, - "bin": { - "errno": "cli.js" - } - }, - "node_modules/event-target-shim": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", - "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==", - "engines": { - "node": ">=6" - } - }, - "node_modules/ieee754": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==" - }, - "node_modules/immediate": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.3.0.tgz", - "integrity": "sha512-HR7EVodfFUdQCTIeySw+WDRFJlPcLOJbXfwwZ7Oom6tjsvZ3bOkCDJHehQC3nxJrv7+f9XecwazynjU8e4Vw3Q==" - }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" - }, - "node_modules/level": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/level/-/level-6.0.1.tgz", - "integrity": "sha512-psRSqJZCsC/irNhfHzrVZbmPYXDcEYhA5TVNwr+V92jF44rbf86hqGp8fiT702FyiArScYIlPSBTDUASCVNSpw==", - "dependencies": { - "level-js": "^5.0.0", - "level-packager": "^5.1.0", - "leveldown": "^5.4.0" - }, - "engines": { - "node": ">=8.6.0" - } - }, - "node_modules/level-codec": { - "version": "9.0.2", - "resolved": "https://registry.npmjs.org/level-codec/-/level-codec-9.0.2.tgz", - "integrity": "sha512-UyIwNb1lJBChJnGfjmO0OR+ezh2iVu1Kas3nvBS/BzGnx79dv6g7unpKIDNPMhfdTEGoc7mC8uAu51XEtX+FHQ==", - "dependencies": { - "buffer": "^5.6.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/level-concat-iterator": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/level-concat-iterator/-/level-concat-iterator-2.0.1.tgz", - "integrity": "sha512-OTKKOqeav2QWcERMJR7IS9CUo1sHnke2C0gkSmcR7QuEtFNLLzHQAvnMw8ykvEcv0Qtkg0p7FOwP1v9e5Smdcw==", - "engines": { - "node": ">=6" - } - }, - "node_modules/level-errors": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/level-errors/-/level-errors-2.0.1.tgz", - "integrity": "sha512-UVprBJXite4gPS+3VznfgDSU8PTRuVX0NXwoWW50KLxd2yw4Y1t2JUR5In1itQnudZqRMT9DlAM3Q//9NCjCFw==", - "dependencies": { - "errno": "~0.1.1" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/level-iterator-stream": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/level-iterator-stream/-/level-iterator-stream-4.0.2.tgz", - "integrity": "sha512-ZSthfEqzGSOMWoUGhTXdX9jv26d32XJuHz/5YnuHZzH6wldfWMOVwI9TBtKcya4BKTyTt3XVA0A3cF3q5CY30Q==", - "dependencies": { - "inherits": "^2.0.4", - "readable-stream": "^3.4.0", - "xtend": "^4.0.2" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/level-js": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/level-js/-/level-js-5.0.2.tgz", - "integrity": "sha512-SnBIDo2pdO5VXh02ZmtAyPP6/+6YTJg2ibLtl9C34pWvmtMEmRTWpra+qO/hifkUtBTOtfx6S9vLDjBsBK4gRg==", - "dependencies": { - "abstract-leveldown": "~6.2.3", - "buffer": "^5.5.0", - "inherits": "^2.0.3", - "ltgt": "^2.1.2" - } - }, - "node_modules/level-packager": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/level-packager/-/level-packager-5.1.1.tgz", - "integrity": "sha512-HMwMaQPlTC1IlcwT3+swhqf/NUO+ZhXVz6TY1zZIIZlIR0YSn8GtAAWmIvKjNY16ZkEg/JcpAuQskxsXqC0yOQ==", - "dependencies": { - "encoding-down": "^6.3.0", - "levelup": "^4.3.2" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/level-supports": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/level-supports/-/level-supports-1.0.1.tgz", - "integrity": "sha512-rXM7GYnW8gsl1vedTJIbzOrRv85c/2uCMpiiCzO2fndd06U/kUXEEU9evYn4zFggBOg36IsBW8LzqIpETwwQzg==", - "dependencies": { - "xtend": "^4.0.2" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/leveldown": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/leveldown/-/leveldown-5.6.0.tgz", - "integrity": "sha512-iB8O/7Db9lPaITU1aA2txU/cBEXAt4vWwKQRrrWuS6XDgbP4QZGj9BL2aNbwb002atoQ/lIotJkfyzz+ygQnUQ==", - "hasInstallScript": true, - "dependencies": { - "abstract-leveldown": "~6.2.1", - "napi-macros": "~2.0.0", - "node-gyp-build": "~4.1.0" - }, - "engines": { - "node": ">=8.6.0" - } - }, - "node_modules/levelup": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/levelup/-/levelup-4.4.0.tgz", - "integrity": "sha512-94++VFO3qN95cM/d6eBXvd894oJE0w3cInq9USsyQzzoJxmiYzPAocNcuGCPGGjoXqDVJcr3C1jzt1TSjyaiLQ==", - "dependencies": { - "deferred-leveldown": "~5.3.0", - "level-errors": "~2.0.0", - "level-iterator-stream": "~4.0.0", - "level-supports": "~1.0.0", - "xtend": "~4.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/ltgt": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ltgt/-/ltgt-2.2.1.tgz", - "integrity": "sha1-81ypHEk/e3PaDgdJUwTxezH4fuU=" - }, - "node_modules/mime-db": { - "version": "1.47.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.47.0.tgz", - "integrity": "sha512-QBmA/G2y+IfeS4oktet3qRZ+P5kPhCKRXxXnQEudYqUaEioAU1/Lq2us3D/t1Jfo4hE9REQPrbB7K5sOczJVIw==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mime-types": { - "version": "2.1.30", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.30.tgz", - "integrity": "sha512-crmjA4bLtR8m9qLpHvgxSChT+XoSlZi8J4n/aIdn3z92e/U47Z0V/yl+Wh9W046GgFVAmoNR/fmdbZYcSSIUeg==", - "dependencies": { - "mime-db": "1.47.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/napi-macros": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/napi-macros/-/napi-macros-2.0.0.tgz", - "integrity": "sha512-A0xLykHtARfueITVDernsAWdtIMbOJgKgcluwENp3AlsKN/PloyO10HtmoqnFAQAcxPkgZN7wdfPfEd0zNGxbg==" - }, - "node_modules/node-fetch": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.1.tgz", - "integrity": "sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw==", - "engines": { - "node": "4.x || >=6.0.0" - } - }, - "node_modules/node-gyp-build": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.1.1.tgz", - "integrity": "sha512-dSq1xmcPDKPZ2EED2S6zw/b9NKsqzXRE6dVr8TVQnI3FJOTteUMuqF3Qqs6LZg+mLGYJWqQzMbIjMtJqTv87nQ==", - "bin": { - "node-gyp-build": "bin.js", - "node-gyp-build-optional": "optional.js", - "node-gyp-build-test": "build-test.js" - } - }, - "node_modules/prism-media": { - "version": "1.2.9", - "resolved": "https://registry.npmjs.org/prism-media/-/prism-media-1.2.9.tgz", - "integrity": "sha512-UHCYuqHipbTR1ZsXr5eg4JUmHER8Ss4YEb9Azn+9zzJ7/jlTtD1h0lc4g6tNx3eMlB8Mp6bfll0LPMAV4R6r3Q==" - }, - "node_modules/prr": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", - "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=" - }, - "node_modules/readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" - }, - "node_modules/setimmediate": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", - "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=" - }, - "node_modules/string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "dependencies": { - "safe-buffer": "~5.2.0" - } - }, - "node_modules/tweetnacl": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-1.0.3.tgz", - "integrity": "sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw==" - }, - "node_modules/util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" - }, - "node_modules/ws": { - "version": "7.4.5", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.5.tgz", - "integrity": "sha512-xzyu3hFvomRfXKH8vOFMU3OguG6oOvhXMo3xsGy3xWExqaM2dxBbVxuD99O7m3ZUFMvvscsZDqxfgMaRr/Nr1g==", - "engines": { - "node": ">=8.3.0" - } - }, - "node_modules/xtend": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", - "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", - "engines": { - "node": ">=0.4" - } - } - }, - "dependencies": { - "@discordjs/collection": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/@discordjs/collection/-/collection-0.1.6.tgz", - "integrity": "sha512-utRNxnd9kSS2qhyivo9lMlt5qgAUasH2gb7BEOn6p0efFh24gjGomHzWKMAPn2hEReOPQZCJaRKoURwRotKucQ==" - }, - "@discordjs/form-data": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@discordjs/form-data/-/form-data-3.0.1.tgz", - "integrity": "sha512-ZfFsbgEXW71Rw/6EtBdrP5VxBJy4dthyC0tpQKGKmYFImlmmrykO14Za+BiIVduwjte0jXEBlhSKf0MWbFp9Eg==", - "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - } - }, - "abort-controller": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", - "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", - "requires": { - "event-target-shim": "^5.0.0" - } - }, - "abstract-leveldown": { - "version": "6.2.3", - "resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-6.2.3.tgz", - "integrity": "sha512-BsLm5vFMRUrrLeCcRc+G0t2qOaTzpoJQLOubq2XM72eNpjF5UdU5o/5NvlNhx95XHcAvcl8OMXr4mlg/fRgUXQ==", - "requires": { - "buffer": "^5.5.0", - "immediate": "^3.2.3", - "level-concat-iterator": "~2.0.0", - "level-supports": "~1.0.0", - "xtend": "~4.0.0" - } - }, - "asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" - }, - "base64-js": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==" - }, - "buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", - "requires": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" - } - }, - "combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "requires": { - "delayed-stream": "~1.0.0" - } - }, - "deferred-leveldown": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/deferred-leveldown/-/deferred-leveldown-5.3.0.tgz", - "integrity": "sha512-a59VOT+oDy7vtAbLRCZwWgxu2BaCfd5Hk7wxJd48ei7I+nsg8Orlb9CLG0PMZienk9BSUKgeAqkO2+Lw+1+Ukw==", - "requires": { - "abstract-leveldown": "~6.2.1", - "inherits": "^2.0.3" - } - }, - "delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=" - }, - "discord.js": { - "version": "12.5.3", - "resolved": "https://registry.npmjs.org/discord.js/-/discord.js-12.5.3.tgz", - "integrity": "sha512-D3nkOa/pCkNyn6jLZnAiJApw2N9XrIsXUAdThf01i7yrEuqUmDGc7/CexVWwEcgbQR97XQ+mcnqJpmJ/92B4Aw==", - "requires": { - "@discordjs/collection": "^0.1.6", - "@discordjs/form-data": "^3.0.1", - "abort-controller": "^3.0.0", - "node-fetch": "^2.6.1", - "prism-media": "^1.2.9", - "setimmediate": "^1.0.5", - "tweetnacl": "^1.0.3", - "ws": "^7.4.4" - } - }, - "dotenv": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-9.0.1.tgz", - "integrity": "sha512-W8FNeNnnvJoYfgkFRKzp8kTgz0T2YY4TJ9xy1Ma0hSebPTK8iquRtpG12TUrSTX5zIN9D/wSLEEuI+Ad35tlyw==" - }, - "encoding-down": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/encoding-down/-/encoding-down-6.3.0.tgz", - "integrity": "sha512-QKrV0iKR6MZVJV08QY0wp1e7vF6QbhnbQhb07bwpEyuz4uZiZgPlEGdkCROuFkUwdxlFaiPIhjyarH1ee/3vhw==", - "requires": { - "abstract-leveldown": "^6.2.1", - "inherits": "^2.0.3", - "level-codec": "^9.0.0", - "level-errors": "^2.0.0" - } - }, - "errno": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz", - "integrity": "sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==", - "requires": { - "prr": "~1.0.1" - } - }, - "event-target-shim": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", - "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==" - }, - "ieee754": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==" - }, - "immediate": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.3.0.tgz", - "integrity": "sha512-HR7EVodfFUdQCTIeySw+WDRFJlPcLOJbXfwwZ7Oom6tjsvZ3bOkCDJHehQC3nxJrv7+f9XecwazynjU8e4Vw3Q==" - }, - "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" - }, - "level": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/level/-/level-6.0.1.tgz", - "integrity": "sha512-psRSqJZCsC/irNhfHzrVZbmPYXDcEYhA5TVNwr+V92jF44rbf86hqGp8fiT702FyiArScYIlPSBTDUASCVNSpw==", - "requires": { - "level-js": "^5.0.0", - "level-packager": "^5.1.0", - "leveldown": "^5.4.0" - } - }, - "level-codec": { - "version": "9.0.2", - "resolved": "https://registry.npmjs.org/level-codec/-/level-codec-9.0.2.tgz", - "integrity": "sha512-UyIwNb1lJBChJnGfjmO0OR+ezh2iVu1Kas3nvBS/BzGnx79dv6g7unpKIDNPMhfdTEGoc7mC8uAu51XEtX+FHQ==", - "requires": { - "buffer": "^5.6.0" - } - }, - "level-concat-iterator": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/level-concat-iterator/-/level-concat-iterator-2.0.1.tgz", - "integrity": "sha512-OTKKOqeav2QWcERMJR7IS9CUo1sHnke2C0gkSmcR7QuEtFNLLzHQAvnMw8ykvEcv0Qtkg0p7FOwP1v9e5Smdcw==" - }, - "level-errors": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/level-errors/-/level-errors-2.0.1.tgz", - "integrity": "sha512-UVprBJXite4gPS+3VznfgDSU8PTRuVX0NXwoWW50KLxd2yw4Y1t2JUR5In1itQnudZqRMT9DlAM3Q//9NCjCFw==", - "requires": { - "errno": "~0.1.1" - } - }, - "level-iterator-stream": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/level-iterator-stream/-/level-iterator-stream-4.0.2.tgz", - "integrity": "sha512-ZSthfEqzGSOMWoUGhTXdX9jv26d32XJuHz/5YnuHZzH6wldfWMOVwI9TBtKcya4BKTyTt3XVA0A3cF3q5CY30Q==", - "requires": { - "inherits": "^2.0.4", - "readable-stream": "^3.4.0", - "xtend": "^4.0.2" - } - }, - "level-js": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/level-js/-/level-js-5.0.2.tgz", - "integrity": "sha512-SnBIDo2pdO5VXh02ZmtAyPP6/+6YTJg2ibLtl9C34pWvmtMEmRTWpra+qO/hifkUtBTOtfx6S9vLDjBsBK4gRg==", - "requires": { - "abstract-leveldown": "~6.2.3", - "buffer": "^5.5.0", - "inherits": "^2.0.3", - "ltgt": "^2.1.2" - } - }, - "level-packager": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/level-packager/-/level-packager-5.1.1.tgz", - "integrity": "sha512-HMwMaQPlTC1IlcwT3+swhqf/NUO+ZhXVz6TY1zZIIZlIR0YSn8GtAAWmIvKjNY16ZkEg/JcpAuQskxsXqC0yOQ==", - "requires": { - "encoding-down": "^6.3.0", - "levelup": "^4.3.2" - } - }, - "level-supports": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/level-supports/-/level-supports-1.0.1.tgz", - "integrity": "sha512-rXM7GYnW8gsl1vedTJIbzOrRv85c/2uCMpiiCzO2fndd06U/kUXEEU9evYn4zFggBOg36IsBW8LzqIpETwwQzg==", - "requires": { - "xtend": "^4.0.2" - } - }, - "leveldown": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/leveldown/-/leveldown-5.6.0.tgz", - "integrity": "sha512-iB8O/7Db9lPaITU1aA2txU/cBEXAt4vWwKQRrrWuS6XDgbP4QZGj9BL2aNbwb002atoQ/lIotJkfyzz+ygQnUQ==", - "requires": { - "abstract-leveldown": "~6.2.1", - "napi-macros": "~2.0.0", - "node-gyp-build": "~4.1.0" - } - }, - "levelup": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/levelup/-/levelup-4.4.0.tgz", - "integrity": "sha512-94++VFO3qN95cM/d6eBXvd894oJE0w3cInq9USsyQzzoJxmiYzPAocNcuGCPGGjoXqDVJcr3C1jzt1TSjyaiLQ==", - "requires": { - "deferred-leveldown": "~5.3.0", - "level-errors": "~2.0.0", - "level-iterator-stream": "~4.0.0", - "level-supports": "~1.0.0", - "xtend": "~4.0.0" - } - }, - "ltgt": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ltgt/-/ltgt-2.2.1.tgz", - "integrity": "sha1-81ypHEk/e3PaDgdJUwTxezH4fuU=" - }, - "mime-db": { - "version": "1.47.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.47.0.tgz", - "integrity": "sha512-QBmA/G2y+IfeS4oktet3qRZ+P5kPhCKRXxXnQEudYqUaEioAU1/Lq2us3D/t1Jfo4hE9REQPrbB7K5sOczJVIw==" - }, - "mime-types": { - "version": "2.1.30", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.30.tgz", - "integrity": "sha512-crmjA4bLtR8m9qLpHvgxSChT+XoSlZi8J4n/aIdn3z92e/U47Z0V/yl+Wh9W046GgFVAmoNR/fmdbZYcSSIUeg==", - "requires": { - "mime-db": "1.47.0" - } - }, - "napi-macros": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/napi-macros/-/napi-macros-2.0.0.tgz", - "integrity": "sha512-A0xLykHtARfueITVDernsAWdtIMbOJgKgcluwENp3AlsKN/PloyO10HtmoqnFAQAcxPkgZN7wdfPfEd0zNGxbg==" - }, - "node-fetch": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.1.tgz", - "integrity": "sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw==" - }, - "node-gyp-build": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.1.1.tgz", - "integrity": "sha512-dSq1xmcPDKPZ2EED2S6zw/b9NKsqzXRE6dVr8TVQnI3FJOTteUMuqF3Qqs6LZg+mLGYJWqQzMbIjMtJqTv87nQ==" - }, - "prism-media": { - "version": "1.2.9", - "resolved": "https://registry.npmjs.org/prism-media/-/prism-media-1.2.9.tgz", - "integrity": "sha512-UHCYuqHipbTR1ZsXr5eg4JUmHER8Ss4YEb9Azn+9zzJ7/jlTtD1h0lc4g6tNx3eMlB8Mp6bfll0LPMAV4R6r3Q==" - }, - "prr": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", - "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=" - }, - "readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - }, - "safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" - }, - "setimmediate": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", - "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=" - }, - "string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "requires": { - "safe-buffer": "~5.2.0" - } - }, - "tweetnacl": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-1.0.3.tgz", - "integrity": "sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw==" - }, - "util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" - }, - "ws": { - "version": "7.4.5", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.5.tgz", - "integrity": "sha512-xzyu3hFvomRfXKH8vOFMU3OguG6oOvhXMo3xsGy3xWExqaM2dxBbVxuD99O7m3ZUFMvvscsZDqxfgMaRr/Nr1g==" - }, - "xtend": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", - "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==" - } - } -} +{ + "name": "booger", + "version": "1.0.0", + "lockfileVersion": 2, + "requires": true, + "packages": { + "": { + "name": "booger", + "version": "1.0.0", + "license": "ISC", + "dependencies": { + "discord.js": "^12.5.3", + "dotenv": "^9.0.1", + "level": "^6.0.1" + } + }, + "node_modules/@discordjs/collection": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/@discordjs/collection/-/collection-0.1.6.tgz", + "integrity": "sha512-utRNxnd9kSS2qhyivo9lMlt5qgAUasH2gb7BEOn6p0efFh24gjGomHzWKMAPn2hEReOPQZCJaRKoURwRotKucQ==" + }, + "node_modules/@discordjs/form-data": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@discordjs/form-data/-/form-data-3.0.1.tgz", + "integrity": "sha512-ZfFsbgEXW71Rw/6EtBdrP5VxBJy4dthyC0tpQKGKmYFImlmmrykO14Za+BiIVduwjte0jXEBlhSKf0MWbFp9Eg==", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/abort-controller": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", + "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", + "dependencies": { + "event-target-shim": "^5.0.0" + }, + "engines": { + "node": ">=6.5" + } + }, + "node_modules/abstract-leveldown": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-6.2.3.tgz", + "integrity": "sha512-BsLm5vFMRUrrLeCcRc+G0t2qOaTzpoJQLOubq2XM72eNpjF5UdU5o/5NvlNhx95XHcAvcl8OMXr4mlg/fRgUXQ==", + "dependencies": { + "buffer": "^5.5.0", + "immediate": "^3.2.3", + "level-concat-iterator": "~2.0.0", + "level-supports": "~1.0.0", + "xtend": "~4.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" + }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==" + }, + "node_modules/buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/deferred-leveldown": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/deferred-leveldown/-/deferred-leveldown-5.3.0.tgz", + "integrity": "sha512-a59VOT+oDy7vtAbLRCZwWgxu2BaCfd5Hk7wxJd48ei7I+nsg8Orlb9CLG0PMZienk9BSUKgeAqkO2+Lw+1+Ukw==", + "dependencies": { + "abstract-leveldown": "~6.2.1", + "inherits": "^2.0.3" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/discord.js": { + "version": "12.5.3", + "resolved": "https://registry.npmjs.org/discord.js/-/discord.js-12.5.3.tgz", + "integrity": "sha512-D3nkOa/pCkNyn6jLZnAiJApw2N9XrIsXUAdThf01i7yrEuqUmDGc7/CexVWwEcgbQR97XQ+mcnqJpmJ/92B4Aw==", + "dependencies": { + "@discordjs/collection": "^0.1.6", + "@discordjs/form-data": "^3.0.1", + "abort-controller": "^3.0.0", + "node-fetch": "^2.6.1", + "prism-media": "^1.2.9", + "setimmediate": "^1.0.5", + "tweetnacl": "^1.0.3", + "ws": "^7.4.4" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/dotenv": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-9.0.1.tgz", + "integrity": "sha512-W8FNeNnnvJoYfgkFRKzp8kTgz0T2YY4TJ9xy1Ma0hSebPTK8iquRtpG12TUrSTX5zIN9D/wSLEEuI+Ad35tlyw==", + "engines": { + "node": ">=10" + } + }, + "node_modules/encoding-down": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/encoding-down/-/encoding-down-6.3.0.tgz", + "integrity": "sha512-QKrV0iKR6MZVJV08QY0wp1e7vF6QbhnbQhb07bwpEyuz4uZiZgPlEGdkCROuFkUwdxlFaiPIhjyarH1ee/3vhw==", + "dependencies": { + "abstract-leveldown": "^6.2.1", + "inherits": "^2.0.3", + "level-codec": "^9.0.0", + "level-errors": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/errno": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz", + "integrity": "sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==", + "dependencies": { + "prr": "~1.0.1" + }, + "bin": { + "errno": "cli.js" + } + }, + "node_modules/event-target-shim": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", + "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==", + "engines": { + "node": ">=6" + } + }, + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==" + }, + "node_modules/immediate": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.3.0.tgz", + "integrity": "sha512-HR7EVodfFUdQCTIeySw+WDRFJlPcLOJbXfwwZ7Oom6tjsvZ3bOkCDJHehQC3nxJrv7+f9XecwazynjU8e4Vw3Q==" + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "node_modules/level": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/level/-/level-6.0.1.tgz", + "integrity": "sha512-psRSqJZCsC/irNhfHzrVZbmPYXDcEYhA5TVNwr+V92jF44rbf86hqGp8fiT702FyiArScYIlPSBTDUASCVNSpw==", + "dependencies": { + "level-js": "^5.0.0", + "level-packager": "^5.1.0", + "leveldown": "^5.4.0" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/level-codec": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/level-codec/-/level-codec-9.0.2.tgz", + "integrity": "sha512-UyIwNb1lJBChJnGfjmO0OR+ezh2iVu1Kas3nvBS/BzGnx79dv6g7unpKIDNPMhfdTEGoc7mC8uAu51XEtX+FHQ==", + "dependencies": { + "buffer": "^5.6.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/level-concat-iterator": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/level-concat-iterator/-/level-concat-iterator-2.0.1.tgz", + "integrity": "sha512-OTKKOqeav2QWcERMJR7IS9CUo1sHnke2C0gkSmcR7QuEtFNLLzHQAvnMw8ykvEcv0Qtkg0p7FOwP1v9e5Smdcw==", + "engines": { + "node": ">=6" + } + }, + "node_modules/level-errors": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/level-errors/-/level-errors-2.0.1.tgz", + "integrity": "sha512-UVprBJXite4gPS+3VznfgDSU8PTRuVX0NXwoWW50KLxd2yw4Y1t2JUR5In1itQnudZqRMT9DlAM3Q//9NCjCFw==", + "dependencies": { + "errno": "~0.1.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/level-iterator-stream": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/level-iterator-stream/-/level-iterator-stream-4.0.2.tgz", + "integrity": "sha512-ZSthfEqzGSOMWoUGhTXdX9jv26d32XJuHz/5YnuHZzH6wldfWMOVwI9TBtKcya4BKTyTt3XVA0A3cF3q5CY30Q==", + "dependencies": { + "inherits": "^2.0.4", + "readable-stream": "^3.4.0", + "xtend": "^4.0.2" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/level-js": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/level-js/-/level-js-5.0.2.tgz", + "integrity": "sha512-SnBIDo2pdO5VXh02ZmtAyPP6/+6YTJg2ibLtl9C34pWvmtMEmRTWpra+qO/hifkUtBTOtfx6S9vLDjBsBK4gRg==", + "dependencies": { + "abstract-leveldown": "~6.2.3", + "buffer": "^5.5.0", + "inherits": "^2.0.3", + "ltgt": "^2.1.2" + } + }, + "node_modules/level-packager": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/level-packager/-/level-packager-5.1.1.tgz", + "integrity": "sha512-HMwMaQPlTC1IlcwT3+swhqf/NUO+ZhXVz6TY1zZIIZlIR0YSn8GtAAWmIvKjNY16ZkEg/JcpAuQskxsXqC0yOQ==", + "dependencies": { + "encoding-down": "^6.3.0", + "levelup": "^4.3.2" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/level-supports": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/level-supports/-/level-supports-1.0.1.tgz", + "integrity": "sha512-rXM7GYnW8gsl1vedTJIbzOrRv85c/2uCMpiiCzO2fndd06U/kUXEEU9evYn4zFggBOg36IsBW8LzqIpETwwQzg==", + "dependencies": { + "xtend": "^4.0.2" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/leveldown": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/leveldown/-/leveldown-5.6.0.tgz", + "integrity": "sha512-iB8O/7Db9lPaITU1aA2txU/cBEXAt4vWwKQRrrWuS6XDgbP4QZGj9BL2aNbwb002atoQ/lIotJkfyzz+ygQnUQ==", + "hasInstallScript": true, + "dependencies": { + "abstract-leveldown": "~6.2.1", + "napi-macros": "~2.0.0", + "node-gyp-build": "~4.1.0" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/levelup": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/levelup/-/levelup-4.4.0.tgz", + "integrity": "sha512-94++VFO3qN95cM/d6eBXvd894oJE0w3cInq9USsyQzzoJxmiYzPAocNcuGCPGGjoXqDVJcr3C1jzt1TSjyaiLQ==", + "dependencies": { + "deferred-leveldown": "~5.3.0", + "level-errors": "~2.0.0", + "level-iterator-stream": "~4.0.0", + "level-supports": "~1.0.0", + "xtend": "~4.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/ltgt": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ltgt/-/ltgt-2.2.1.tgz", + "integrity": "sha1-81ypHEk/e3PaDgdJUwTxezH4fuU=" + }, + "node_modules/mime-db": { + "version": "1.47.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.47.0.tgz", + "integrity": "sha512-QBmA/G2y+IfeS4oktet3qRZ+P5kPhCKRXxXnQEudYqUaEioAU1/Lq2us3D/t1Jfo4hE9REQPrbB7K5sOczJVIw==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.30", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.30.tgz", + "integrity": "sha512-crmjA4bLtR8m9qLpHvgxSChT+XoSlZi8J4n/aIdn3z92e/U47Z0V/yl+Wh9W046GgFVAmoNR/fmdbZYcSSIUeg==", + "dependencies": { + "mime-db": "1.47.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/napi-macros": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/napi-macros/-/napi-macros-2.0.0.tgz", + "integrity": "sha512-A0xLykHtARfueITVDernsAWdtIMbOJgKgcluwENp3AlsKN/PloyO10HtmoqnFAQAcxPkgZN7wdfPfEd0zNGxbg==" + }, + "node_modules/node-fetch": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.1.tgz", + "integrity": "sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw==", + "engines": { + "node": "4.x || >=6.0.0" + } + }, + "node_modules/node-gyp-build": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.1.1.tgz", + "integrity": "sha512-dSq1xmcPDKPZ2EED2S6zw/b9NKsqzXRE6dVr8TVQnI3FJOTteUMuqF3Qqs6LZg+mLGYJWqQzMbIjMtJqTv87nQ==", + "bin": { + "node-gyp-build": "bin.js", + "node-gyp-build-optional": "optional.js", + "node-gyp-build-test": "build-test.js" + } + }, + "node_modules/prism-media": { + "version": "1.2.9", + "resolved": "https://registry.npmjs.org/prism-media/-/prism-media-1.2.9.tgz", + "integrity": "sha512-UHCYuqHipbTR1ZsXr5eg4JUmHER8Ss4YEb9Azn+9zzJ7/jlTtD1h0lc4g6tNx3eMlB8Mp6bfll0LPMAV4R6r3Q==" + }, + "node_modules/prr": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", + "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=" + }, + "node_modules/readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" + }, + "node_modules/setimmediate": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", + "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=" + }, + "node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/tweetnacl": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-1.0.3.tgz", + "integrity": "sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw==" + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" + }, + "node_modules/ws": { + "version": "7.4.5", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.5.tgz", + "integrity": "sha512-xzyu3hFvomRfXKH8vOFMU3OguG6oOvhXMo3xsGy3xWExqaM2dxBbVxuD99O7m3ZUFMvvscsZDqxfgMaRr/Nr1g==", + "engines": { + "node": ">=8.3.0" + } + }, + "node_modules/xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "engines": { + "node": ">=0.4" + } + } + }, + "dependencies": { + "@discordjs/collection": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/@discordjs/collection/-/collection-0.1.6.tgz", + "integrity": "sha512-utRNxnd9kSS2qhyivo9lMlt5qgAUasH2gb7BEOn6p0efFh24gjGomHzWKMAPn2hEReOPQZCJaRKoURwRotKucQ==" + }, + "@discordjs/form-data": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@discordjs/form-data/-/form-data-3.0.1.tgz", + "integrity": "sha512-ZfFsbgEXW71Rw/6EtBdrP5VxBJy4dthyC0tpQKGKmYFImlmmrykO14Za+BiIVduwjte0jXEBlhSKf0MWbFp9Eg==", + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + } + }, + "abort-controller": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", + "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", + "requires": { + "event-target-shim": "^5.0.0" + } + }, + "abstract-leveldown": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-6.2.3.tgz", + "integrity": "sha512-BsLm5vFMRUrrLeCcRc+G0t2qOaTzpoJQLOubq2XM72eNpjF5UdU5o/5NvlNhx95XHcAvcl8OMXr4mlg/fRgUXQ==", + "requires": { + "buffer": "^5.5.0", + "immediate": "^3.2.3", + "level-concat-iterator": "~2.0.0", + "level-supports": "~1.0.0", + "xtend": "~4.0.0" + } + }, + "asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" + }, + "base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==" + }, + "buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "requires": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "requires": { + "delayed-stream": "~1.0.0" + } + }, + "deferred-leveldown": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/deferred-leveldown/-/deferred-leveldown-5.3.0.tgz", + "integrity": "sha512-a59VOT+oDy7vtAbLRCZwWgxu2BaCfd5Hk7wxJd48ei7I+nsg8Orlb9CLG0PMZienk9BSUKgeAqkO2+Lw+1+Ukw==", + "requires": { + "abstract-leveldown": "~6.2.1", + "inherits": "^2.0.3" + } + }, + "delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=" + }, + "discord.js": { + "version": "12.5.3", + "resolved": "https://registry.npmjs.org/discord.js/-/discord.js-12.5.3.tgz", + "integrity": "sha512-D3nkOa/pCkNyn6jLZnAiJApw2N9XrIsXUAdThf01i7yrEuqUmDGc7/CexVWwEcgbQR97XQ+mcnqJpmJ/92B4Aw==", + "requires": { + "@discordjs/collection": "^0.1.6", + "@discordjs/form-data": "^3.0.1", + "abort-controller": "^3.0.0", + "node-fetch": "^2.6.1", + "prism-media": "^1.2.9", + "setimmediate": "^1.0.5", + "tweetnacl": "^1.0.3", + "ws": "^7.4.4" + } + }, + "dotenv": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-9.0.1.tgz", + "integrity": "sha512-W8FNeNnnvJoYfgkFRKzp8kTgz0T2YY4TJ9xy1Ma0hSebPTK8iquRtpG12TUrSTX5zIN9D/wSLEEuI+Ad35tlyw==" + }, + "encoding-down": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/encoding-down/-/encoding-down-6.3.0.tgz", + "integrity": "sha512-QKrV0iKR6MZVJV08QY0wp1e7vF6QbhnbQhb07bwpEyuz4uZiZgPlEGdkCROuFkUwdxlFaiPIhjyarH1ee/3vhw==", + "requires": { + "abstract-leveldown": "^6.2.1", + "inherits": "^2.0.3", + "level-codec": "^9.0.0", + "level-errors": "^2.0.0" + } + }, + "errno": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz", + "integrity": "sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==", + "requires": { + "prr": "~1.0.1" + } + }, + "event-target-shim": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", + "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==" + }, + "ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==" + }, + "immediate": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.3.0.tgz", + "integrity": "sha512-HR7EVodfFUdQCTIeySw+WDRFJlPcLOJbXfwwZ7Oom6tjsvZ3bOkCDJHehQC3nxJrv7+f9XecwazynjU8e4Vw3Q==" + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "level": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/level/-/level-6.0.1.tgz", + "integrity": "sha512-psRSqJZCsC/irNhfHzrVZbmPYXDcEYhA5TVNwr+V92jF44rbf86hqGp8fiT702FyiArScYIlPSBTDUASCVNSpw==", + "requires": { + "level-js": "^5.0.0", + "level-packager": "^5.1.0", + "leveldown": "^5.4.0" + } + }, + "level-codec": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/level-codec/-/level-codec-9.0.2.tgz", + "integrity": "sha512-UyIwNb1lJBChJnGfjmO0OR+ezh2iVu1Kas3nvBS/BzGnx79dv6g7unpKIDNPMhfdTEGoc7mC8uAu51XEtX+FHQ==", + "requires": { + "buffer": "^5.6.0" + } + }, + "level-concat-iterator": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/level-concat-iterator/-/level-concat-iterator-2.0.1.tgz", + "integrity": "sha512-OTKKOqeav2QWcERMJR7IS9CUo1sHnke2C0gkSmcR7QuEtFNLLzHQAvnMw8ykvEcv0Qtkg0p7FOwP1v9e5Smdcw==" + }, + "level-errors": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/level-errors/-/level-errors-2.0.1.tgz", + "integrity": "sha512-UVprBJXite4gPS+3VznfgDSU8PTRuVX0NXwoWW50KLxd2yw4Y1t2JUR5In1itQnudZqRMT9DlAM3Q//9NCjCFw==", + "requires": { + "errno": "~0.1.1" + } + }, + "level-iterator-stream": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/level-iterator-stream/-/level-iterator-stream-4.0.2.tgz", + "integrity": "sha512-ZSthfEqzGSOMWoUGhTXdX9jv26d32XJuHz/5YnuHZzH6wldfWMOVwI9TBtKcya4BKTyTt3XVA0A3cF3q5CY30Q==", + "requires": { + "inherits": "^2.0.4", + "readable-stream": "^3.4.0", + "xtend": "^4.0.2" + } + }, + "level-js": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/level-js/-/level-js-5.0.2.tgz", + "integrity": "sha512-SnBIDo2pdO5VXh02ZmtAyPP6/+6YTJg2ibLtl9C34pWvmtMEmRTWpra+qO/hifkUtBTOtfx6S9vLDjBsBK4gRg==", + "requires": { + "abstract-leveldown": "~6.2.3", + "buffer": "^5.5.0", + "inherits": "^2.0.3", + "ltgt": "^2.1.2" + } + }, + "level-packager": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/level-packager/-/level-packager-5.1.1.tgz", + "integrity": "sha512-HMwMaQPlTC1IlcwT3+swhqf/NUO+ZhXVz6TY1zZIIZlIR0YSn8GtAAWmIvKjNY16ZkEg/JcpAuQskxsXqC0yOQ==", + "requires": { + "encoding-down": "^6.3.0", + "levelup": "^4.3.2" + } + }, + "level-supports": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/level-supports/-/level-supports-1.0.1.tgz", + "integrity": "sha512-rXM7GYnW8gsl1vedTJIbzOrRv85c/2uCMpiiCzO2fndd06U/kUXEEU9evYn4zFggBOg36IsBW8LzqIpETwwQzg==", + "requires": { + "xtend": "^4.0.2" + } + }, + "leveldown": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/leveldown/-/leveldown-5.6.0.tgz", + "integrity": "sha512-iB8O/7Db9lPaITU1aA2txU/cBEXAt4vWwKQRrrWuS6XDgbP4QZGj9BL2aNbwb002atoQ/lIotJkfyzz+ygQnUQ==", + "requires": { + "abstract-leveldown": "~6.2.1", + "napi-macros": "~2.0.0", + "node-gyp-build": "~4.1.0" + } + }, + "levelup": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/levelup/-/levelup-4.4.0.tgz", + "integrity": "sha512-94++VFO3qN95cM/d6eBXvd894oJE0w3cInq9USsyQzzoJxmiYzPAocNcuGCPGGjoXqDVJcr3C1jzt1TSjyaiLQ==", + "requires": { + "deferred-leveldown": "~5.3.0", + "level-errors": "~2.0.0", + "level-iterator-stream": "~4.0.0", + "level-supports": "~1.0.0", + "xtend": "~4.0.0" + } + }, + "ltgt": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ltgt/-/ltgt-2.2.1.tgz", + "integrity": "sha1-81ypHEk/e3PaDgdJUwTxezH4fuU=" + }, + "mime-db": { + "version": "1.47.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.47.0.tgz", + "integrity": "sha512-QBmA/G2y+IfeS4oktet3qRZ+P5kPhCKRXxXnQEudYqUaEioAU1/Lq2us3D/t1Jfo4hE9REQPrbB7K5sOczJVIw==" + }, + "mime-types": { + "version": "2.1.30", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.30.tgz", + "integrity": "sha512-crmjA4bLtR8m9qLpHvgxSChT+XoSlZi8J4n/aIdn3z92e/U47Z0V/yl+Wh9W046GgFVAmoNR/fmdbZYcSSIUeg==", + "requires": { + "mime-db": "1.47.0" + } + }, + "napi-macros": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/napi-macros/-/napi-macros-2.0.0.tgz", + "integrity": "sha512-A0xLykHtARfueITVDernsAWdtIMbOJgKgcluwENp3AlsKN/PloyO10HtmoqnFAQAcxPkgZN7wdfPfEd0zNGxbg==" + }, + "node-fetch": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.1.tgz", + "integrity": "sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw==" + }, + "node-gyp-build": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.1.1.tgz", + "integrity": "sha512-dSq1xmcPDKPZ2EED2S6zw/b9NKsqzXRE6dVr8TVQnI3FJOTteUMuqF3Qqs6LZg+mLGYJWqQzMbIjMtJqTv87nQ==" + }, + "prism-media": { + "version": "1.2.9", + "resolved": "https://registry.npmjs.org/prism-media/-/prism-media-1.2.9.tgz", + "integrity": "sha512-UHCYuqHipbTR1ZsXr5eg4JUmHER8Ss4YEb9Azn+9zzJ7/jlTtD1h0lc4g6tNx3eMlB8Mp6bfll0LPMAV4R6r3Q==" + }, + "prr": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", + "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=" + }, + "readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + }, + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" + }, + "setimmediate": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", + "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=" + }, + "string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "requires": { + "safe-buffer": "~5.2.0" + } + }, + "tweetnacl": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-1.0.3.tgz", + "integrity": "sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw==" + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" + }, + "ws": { + "version": "7.4.5", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.5.tgz", + "integrity": "sha512-xzyu3hFvomRfXKH8vOFMU3OguG6oOvhXMo3xsGy3xWExqaM2dxBbVxuD99O7m3ZUFMvvscsZDqxfgMaRr/Nr1g==" + }, + "xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==" + } + } +} diff --git a/package.json b/package.json index 99e8f84..4df0e83 100644 --- a/package.json +++ b/package.json @@ -1,25 +1,25 @@ -{ - "name": "booger", - "version": "1.0.0", - "description": "", - "main": "index.js", - "scripts": { - "test": "echo \"Error: no test specified\" && exit 1" - }, - "repository": { - "type": "git", - "url": "git+https://gitlab.com/Hri7566/booger.git" - }, - "keywords": [], - "author": "", - "license": "ISC", - "bugs": { - "url": "https://gitlab.com/Hri7566/booger/issues" - }, - "homepage": "https://gitlab.com/Hri7566/booger#readme", - "dependencies": { - "discord.js": "^12.5.3", - "dotenv": "^9.0.1", - "level": "^6.0.1" - } -} +{ + "name": "booger", + "version": "1.0.0", + "description": "", + "main": "index.js", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "repository": { + "type": "git", + "url": "git+https://gitlab.com/Hri7566/booger.git" + }, + "keywords": [], + "author": "", + "license": "ISC", + "bugs": { + "url": "https://gitlab.com/Hri7566/booger/issues" + }, + "homepage": "https://gitlab.com/Hri7566/booger#readme", + "dependencies": { + "discord.js": "^12.5.3", + "dotenv": "^9.0.1", + "level": "^6.0.1" + } +} diff --git a/src/Bot.js b/src/Bot.js index b03911d..e1ee5f2 100644 --- a/src/Bot.js +++ b/src/Bot.js @@ -1,242 +1,245 @@ -const { sendChat } = require('./MPPClient'); -// const DiscordClient = require('./DiscordClient'); -const MPPClient = require('./MPPClient'); -const StaticEventEmitter = require('./StaticEventEmitter'); - -module.exports = class Bot extends StaticEventEmitter { - static start(token) { - MPPClient.start(token); - this.bindEventListeners(); - this.commands = new Map(); - - this.admin = [ - "2ffc3744fbc1bc6c6ef4a330", - "a41651bf8a46bafc5548dad6" - ]; - this.prefix = "/"; // never change this - - this.loadCommands(); - } - - static bindEventListeners() { - this.on("chat.receive", msg => { - console.log(msg.p.name + ": " + msg.a); - - let m = { - referer: msg.p, - - }; - - this.runCommand(msg); - }); - - this.on("chat.send", msg => { - MPPClient.sendChat(msg); - }); - } - - static runCommand(msg) { - // let role; - // msg.member.guild.roles.cache.forEach(r => { - // if (r.name.toString() == msg.member.user.id.toString()) { - // role = r; - // } - // }); - // msg.p = { - // name: msg.author.username, - // _id: msg.author.id, - // color: role.color, - // id: msg.author.id - // } - // msg.a = msg.content; - if(msg.a[0] == "∕" && msg.p.id !== client.participantId) { - msg.a[0] = "/"; - } - function findParticipantByName(name) { - if(!name || name.trim() == "") return undefined; - for(var id in client.ppl) { - if(client.ppl.hasOwnProperty(id) && client.ppl[id].name === name) { - return client.ppl[id]; - } - } - return undefined; - }; - - function findParticipantByNameCaseInsensitive(name) { - if(!name || name.trim() == "") return undefined; - var part = findParticipantByName(name); - if(!part) { - name_lc = name.toLowerCase(); - MPPClient.client.ppl.forEach(p => { - if(p.name.toLowerCase() === name_lc) { - part = p; - } - }); - } - return part; - }; - - function findParticipantByNameFuzzy(name) { - if(!name || name.trim() == "") return undefined; - name = name.toLowerCase(); - var part = findParticipantByNameCaseInsensitive(name); - for(var id in MPPClient.client.ppl) { - if(client.ppl.hasOwnProperty(id) && client.ppl[id].name.toLowerCase().indexOf(name) === 0) { - part = client.ppl[id]; - break; - } - } - for(var id in MPPClient.client.ppl) { - if(client.ppl.hasOwnProperty(id) && client.ppl[id].name.toLowerCase().indexOf(name) !== -1) { - part = MPPClient.client.ppl[id]; - break; - } - } - return part; - }; - if (msg.cmd.startsWith("give_")) { - // var amt = parseInt(msg.cmd.substr(5)); - // console.log(msg.cmd.substr(5)); - // if(amt > 0) { - // console.log('test'); - // if(amt > 100 && msg.p.id !== client.participantId) { - // sendChat("Friend "+msg.p.name+": you can only give up to 100 at a time."); - // } else { - // var thief = msg.p; - // var victim = findParticipantByNameFuzzy(msg.args[0]); - // if(!victim) { - // sendChat("Friend " +thief.name+" missed"); - // return; - // } - // if(victim._id == thief._id) { - // sendChat("Friendly friend " +thief.name+" fudged"); - // return; - // } - // var target_fish = msg.argcat(1); - // db.getFish(thief._id, function(thief_fish) { - // db.getFish(victim._id, function(victim_fish) { - // if(victim_fish.length >= TOO_MANY_FISH) { - // sendChat("Friend " +victim.name+" is carrying too much."); - // return; - // } - // if(thief_fish.length > 0) { - // var arg = target_fish.trim().toLowerCase(); - // var thefish = "items"; - // for(var j = 0; j < amt; j++) { - // var idx = -1; - // for(var i = 0; i < thief_fish.length; i++) { - // if(arg == "" || thief_fish[i].toLowerCase().indexOf(arg) !== -1) { - // idx = i; - // break; - // } - // } - // if(idx == -1) { - // sendChat("Friend " +thief.name+": You don't have "+amt+" "+arg+"."); - // return; - // } - // thefish = thief_fish[idx]; - // thief_fish.splice(idx, 1); - // victim_fish.push(thefish); - // } - // sendChat("Our friend " +thief.name+" gave "+victim.name+" his/her e.g. ("+thefish+") x "+amt+"."); - // db.putFish(thief._id, thief_fish); - // db.putFish(victim._id, victim_fish); - // } else { - // sendChat("Friend " +thief.name+": You don't have the fish to give."); - // } - // }); - // }); - // return; - // } - // } - return sendChat("You may not /give_, it misses every time."); - } - if (msg.cmd.startsWith("bestow_")) { - // var amt = parseInt(msg.cmd.substr(8)); - // if(amt > 0) { - // if(amt > 100 && msg.p.id !== client.participantId) { - // sendChat("Friend "+msg.p.name+": you can only bestow up to 100 at a time."); - // } else { - // var thief = msg.p; - // var victim = client.ppl[msg.args[0]]; - // if(!victim) { - // sendChat("Friend " +thief.name+" missed"); - // return; - // } - // if(victim._id == thief._id) { - // sendChat("Friendly friend " +thief.name+" fudged"); - // return; - // } - // var target_fish = msg.argcat(1); - // db.getFish(thief._id, function(thief_fish) { - // db.getFish(victim._id, function(victim_fish) { - // if(victim_fish.length >= TOO_MANY_FISH) { - // sendChat("Friend " +victim.name+" is carrying too much."); - // return; - // } - // if(thief_fish.length > 0) { - // var arg = target_fish.trim().toLowerCase(); - // var thefish = "items"; - // for(var j = 0; j < amt; j++) { - // var idx = -1; - // for(var i = 0; i < thief_fish.length; i++) { - // if(arg == "" || thief_fish[i].toLowerCase().indexOf(arg) !== -1) { - // idx = i; - // break; - // } - // } - // if(idx == -1) { - // sendChat("Friend " +thief.name+": You don't have "+amt+" "+arg+"."); - // return; - // } - // thefish = thief_fish[idx]; - // thief_fish.splice(idx, 1); - // victim_fish.push(thefish); - // } - // sendChat("Our friend " +thief.name+" bestowed "+victim.name+" his/her e.g. ("+thefish+") x "+amt+"."); - // db.putFish(thief._id, thief_fish); - // db.putFish(victim._id, victim_fish); - // } else { - // sendChat("Friend " +thief.name+": You don't have the fish to bestow."); - // } - // }); - // }); - // return; - // } - // } - return sendChat("You may not /bestow_, it misses every time."); - } - this.commands.forEach(cmd => { - let usedCommand = false; - cmd.cmd.forEach(c => { - if (msg.cmd == c) { - usedCommand = true; - } - }); - - if (!usedCommand) return; - - if (msg.rank == 'admin') { - cmd.func(msg, true); - } else { - cmd.func(msg, false); - } - }); - } - - static fixUsage(str) { - return str.split("&PREFIX").join(this.prefix); - } - - static getRank(id) { - if (this.admin.indexOf(id) !== -1) { - return "admin"; - } else { - return "none"; - } - } - - static async loadCommands() { - (require('./Commands'))(this); - } -} +const { sendChat } = require('./MPPClient'); +// const DiscordClient = require('./DiscordClient'); +const MPPClient = require('./MPPClient'); +const StaticEventEmitter = require('./StaticEventEmitter'); + +module.exports = class Bot extends StaticEventEmitter { + static start(token) { + MPPClient.start(token); + this.bindEventListeners(); + this.commands = new Map(); + + this.admin = [ + "2ffc3744fbc1bc6c6ef4a330", + "a41651bf8a46bafc5548dad6" + ]; + this.prefix = "/"; // never change this + + this.loadCommands(); + } + + static bindEventListeners() { + this.on("chat.receive", msg => { + console.log(msg.p.name + ": " + msg.a); + + let m = { + referer: msg.p, + + }; + + this.runCommand(msg); + }); + + this.on("chat.send", msg => { + MPPClient.sendChat(msg); + }); + } + + static runCommand(msg) { + // let role; + // msg.member.guild.roles.cache.forEach(r => { + // if (r.name.toString() == msg.member.user.id.toString()) { + // role = r; + // } + // }); + // msg.p = { + // name: msg.author.username, + // _id: msg.author.id, + // color: role.color, + // id: msg.author.id + // } + // msg.a = msg.content; + if(msg.a[0] == "∕" && msg.p.id !== client.participantId) { + msg.a[0] = "/"; + } + function findParticipantByName(name) { + if(!name || name.trim() == "") return undefined; + for(var id in client.ppl) { + if(client.ppl.hasOwnProperty(id) && client.ppl[id].name === name) { + return client.ppl[id]; + } + } + return undefined; + }; + + function findParticipantByNameCaseInsensitive(name) { + if(!name || name.trim() == "") return undefined; + var part = findParticipantByName(name); + if(!part) { + name_lc = name.toLowerCase(); + MPPClient.client.ppl.forEach(p => { + if(p.name.toLowerCase() === name_lc) { + part = p; + } + }); + } + return part; + }; + + function findParticipantByNameFuzzy(name) { + if(!name || name.trim() == "") return undefined; + name = name.toLowerCase(); + var part = findParticipantByNameCaseInsensitive(name); + for(var id in MPPClient.client.ppl) { + if(client.ppl.hasOwnProperty(id) && client.ppl[id].name.toLowerCase().indexOf(name) === 0) { + part = client.ppl[id]; + break; + } + } + for(var id in MPPClient.client.ppl) { + if(client.ppl.hasOwnProperty(id) && client.ppl[id].name.toLowerCase().indexOf(name) !== -1) { + part = MPPClient.client.ppl[id]; + break; + } + } + return part; + }; + if (msg.cmd.startsWith("give_")) { + // var amt = parseInt(msg.cmd.substr(5)); + // console.log(msg.cmd.substr(5)); + // if(amt > 0) { + // console.log('test'); + // if(amt > 100 && msg.p.id !== client.participantId) { + // sendChat("Friend "+msg.p.name+": you can only give up to 100 at a time."); + // } else { + // var thief = msg.p; + // var victim = findParticipantByNameFuzzy(msg.args[0]); + // if(!victim) { + // sendChat("Friend " +thief.name+" missed"); + // return; + // } + // if(victim._id == thief._id) { + // sendChat("Friendly friend " +thief.name+" fudged"); + // return; + // } + // var target_fish = msg.argcat(1); + // db.getFish(thief._id, function(thief_fish) { + // db.getFish(victim._id, function(victim_fish) { + // if(victim_fish.length >= TOO_MANY_FISH) { + // sendChat("Friend " +victim.name+" is carrying too much."); + // return; + // } + // if(thief_fish.length > 0) { + // var arg = target_fish.trim().toLowerCase(); + // var thefish = "items"; + // for(var j = 0; j < amt; j++) { + // var idx = -1; + // for(var i = 0; i < thief_fish.length; i++) { + // if(arg == "" || thief_fish[i].toLowerCase().indexOf(arg) !== -1) { + // idx = i; + // break; + // } + // } + // if(idx == -1) { + // sendChat("Friend " +thief.name+": You don't have "+amt+" "+arg+"."); + // return; + // } + // thefish = thief_fish[idx]; + // thief_fish.splice(idx, 1); + // victim_fish.push(thefish); + // } + // sendChat("Our friend " +thief.name+" gave "+victim.name+" his/her e.g. ("+thefish+") x "+amt+"."); + // db.putFish(thief._id, thief_fish); + // db.putFish(victim._id, victim_fish); + // } else { + // sendChat("Friend " +thief.name+": You don't have the fish to give."); + // } + // }); + // }); + // return; + // } + // } + return sendChat("You may not /give_, it misses every time."); + } + if (msg.cmd.startsWith("bestow_")) { + // var amt = parseInt(msg.cmd.substr(8)); + // if(amt > 0) { + // if(amt > 100 && msg.p.id !== client.participantId) { + // sendChat("Friend "+msg.p.name+": you can only bestow up to 100 at a time."); + // } else { + // var thief = msg.p; + // var victim = client.ppl[msg.args[0]]; + // if(!victim) { + // sendChat("Friend " +thief.name+" missed"); + // return; + // } + // if(victim._id == thief._id) { + // sendChat("Friendly friend " +thief.name+" fudged"); + // return; + // } + // var target_fish = msg.argcat(1); + // db.getFish(thief._id, function(thief_fish) { + // db.getFish(victim._id, function(victim_fish) { + // if(victim_fish.length >= TOO_MANY_FISH) { + // sendChat("Friend " +victim.name+" is carrying too much."); + // return; + // } + // if(thief_fish.length > 0) { + // var arg = target_fish.trim().toLowerCase(); + // var thefish = "items"; + // for(var j = 0; j < amt; j++) { + // var idx = -1; + // for(var i = 0; i < thief_fish.length; i++) { + // if(arg == "" || thief_fish[i].toLowerCase().indexOf(arg) !== -1) { + // idx = i; + // break; + // } + // } + // if(idx == -1) { + // sendChat("Friend " +thief.name+": You don't have "+amt+" "+arg+"."); + // return; + // } + // thefish = thief_fish[idx]; + // thief_fish.splice(idx, 1); + // victim_fish.push(thefish); + // } + // sendChat("Our friend " +thief.name+" bestowed "+victim.name+" his/her e.g. ("+thefish+") x "+amt+"."); + // db.putFish(thief._id, thief_fish); + // db.putFish(victim._id, victim_fish); + // } else { + // sendChat("Friend " +thief.name+": You don't have the fish to bestow."); + // } + // }); + // }); + // return; + // } + // } + return sendChat("You may not /bestow_, it misses every time."); + } + if (msg.a == '/get fruit') { + msg.cmd = 'get fruit' + } + this.commands.forEach(cmd => { + let usedCommand = false; + cmd.cmd.forEach(c => { + if (msg.cmd == c) { + usedCommand = true; + } + }); + + if (!usedCommand) return; + + if (msg.rank == 'admin') { + cmd.func(msg, true); + } else { + cmd.func(msg, false); + } + }); + } + + static fixUsage(str) { + return str.split("&PREFIX").join(this.prefix); + } + + static getRank(id) { + if (this.admin.indexOf(id) !== -1) { + return "admin"; + } else { + return "none"; + } + } + + static async loadCommands() { + (require('./Commands'))(this); + } +} diff --git a/src/Color.js b/src/Color.js index e70249a..7dba6e8 100644 --- a/src/Color.js +++ b/src/Color.js @@ -1,1046 +1,1046 @@ -if(typeof module !== "undefined") { - module.exports = Color; -} else { - this.Color = Color; -} - -function Color() { - var r,g,b; - if(arguments.length === 1) { - var hexa = arguments[0].toLowerCase(); - if(hexa.match(/^#[0-9a-f]{6}$/i)) { - hexa = /^#?([0-9a-f]{2})([0-9a-f]{2})([0-9a-f]{2})$/i.exec(hexa); - if(hexa && hexa.length === 4) { - r = parseInt(hexa[1], 16); - g = parseInt(hexa[2], 16); - b = parseInt(hexa[3], 16); - } - } - } else if(arguments.length === 3) { - r = arguments[0]; - g = arguments[1]; - b = arguments[2]; - } - this.r = ~~r || 0; - this.g = ~~g || 0; - this.b = ~~b || 0; -}; - -Color.prototype.distance = function(color) { - var d = 0; - d += Math.pow(this.r - color.r, 2); - d += Math.pow(this.g - color.g, 2); - d += Math.pow(this.b - color.b, 2); - return Math.abs(Math.sqrt(d)); -}; - -Color.prototype.add = function(r, g, b) { - this.r += r; - this.g += g; - this.b += b; - if(this.r < 0) this.r = 0; - else if(this.r > 255) this.r = 255; - if(this.g < 0) this.g = 0; - else if(this.g > 255) this.g = 255; - if(this.b < 0) this.b = 0; - else if(this.b > 255) this.b = 255; -}; - -Color.prototype.toHexa = function() { - var r = (~~this.r || 0).toString(16), g = (~~this.g || 0).toString(16), b = (~~this.b || 0).toString(16); - if(r.length == 1) r = "0" + r; - if(g.length == 1) g = "0" + g; - if(b.length == 1) b = "0" + b; - return "#"+r+g+b; -} - -Color.prototype.getName = function() { - var hexa = this.toHexa(); - var low = 256; - var name; - for(var n in Color.map) { - if(!Color.map.hasOwnProperty(n)) - continue; - var color = Color.map[n]; - if(color.r === this.r && color.g === this.g && color.b === this.b) { - return n; - } - var dist = this.distance(color); - if(dist < low) { - low = dist; - name = n; - } - } - if(!name) - name = this.toHexa(); - else - name = "A shade of " + name; - return name; -}; - -Color.map = {}; - -Color.addToMap = function(hexa, name) { - Color.map[name] = new Color(hexa); -}; - -Color.addToMap("#7CB9E8", "Aero"); -Color.addToMap("#C9FFE5", "Aero blue"); -Color.addToMap("#B284BE", "African purple"); -Color.addToMap("#5D8AA8", "Air Force blue (RAF)"); -Color.addToMap("#00308F", "Air Force blue (USAF)"); -Color.addToMap("#72A0C1", "Air superiority blue"); -Color.addToMap("#AF002A", "Alabama Crimson"); -Color.addToMap("#F0F8FF", "Alice blue"); -Color.addToMap("#E32636", "Alizarin crimson"); -Color.addToMap("#C46210", "Alloy orange"); -Color.addToMap("#EFDECD", "Almond"); -Color.addToMap("#E52B50", "Amaranth"); -Color.addToMap("#F19CBB", "Amaranth pink"); -Color.addToMap("#AB274F", "Dark amaranth"); -Color.addToMap("#3B7A57", "Amazon"); -Color.addToMap("#FF7E00", "Amber"); -Color.addToMap("#FF033E", "American rose"); -Color.addToMap("#9966CC", "Amethyst"); -Color.addToMap("#A4C639", "Android green"); -Color.addToMap("#F2F3F4", "Anti-flash white"); -Color.addToMap("#CD9575", "Antique brass"); -Color.addToMap("#665D1E", "Antique bronze"); -Color.addToMap("#915C83", "Antique fuchsia"); -Color.addToMap("#841B2D", "Antique ruby"); -Color.addToMap("#FAEBD7", "Antique white"); -Color.addToMap("#8DB600", "Apple green"); -Color.addToMap("#FBCEB1", "Apricot"); -Color.addToMap("#00FFFF", "Aqua"); -Color.addToMap("#7FFFD4", "Aquamarine"); -Color.addToMap("#4B5320", "Army green"); -Color.addToMap("#3B444B", "Arsenic"); -Color.addToMap("#8F9779", "Artichoke"); -Color.addToMap("#B2BEB5", "Ash grey"); -Color.addToMap("#87A96B", "Asparagus"); -Color.addToMap("#FDEE00", "Aureolin"); -Color.addToMap("#6E7F80", "AuroMetalSaurus"); -Color.addToMap("#568203", "Avocado"); -Color.addToMap("#007FFF", "Azure"); -Color.addToMap("#F0FFFF", "Azure mist/web"); -Color.addToMap("#89CFF0", "Baby blue"); -Color.addToMap("#A1CAF1", "Baby blue eyes"); -Color.addToMap("#FEFEFA", "Baby powder"); -Color.addToMap("#FF91AF", "Baker-Miller pink"); -Color.addToMap("#21ABCD", "Ball blue"); -Color.addToMap("#FAE7B5", "Banana Mania"); -Color.addToMap("#FFE135", "Banana yellow"); -Color.addToMap("#E0218A", "Barbie pink"); -Color.addToMap("#7C0A02", "Barn red"); -Color.addToMap("#848482", "Battleship grey"); -Color.addToMap("#98777B", "Bazaar"); -Color.addToMap("#9F8170", "Beaver"); -Color.addToMap("#F5F5DC", "Beige"); -Color.addToMap("#2E5894", "B'dazzled blue"); -Color.addToMap("#9C2542", "Big dip o’ruby"); -Color.addToMap("#FFE4C4", "Bisque"); -Color.addToMap("#3D2B1F", "Bistre"); -Color.addToMap("#967117", "Bistre brown"); -Color.addToMap("#CAE00D", "Bitter lemon"); -Color.addToMap("#648C11", "Bitter lime"); -Color.addToMap("#FE6F5E", "Bittersweet"); -Color.addToMap("#BF4F51", "Bittersweet shimmer"); -Color.addToMap("#000000", "Black"); -Color.addToMap("#3D0C02", "Black bean"); -Color.addToMap("#253529", "Black leather jacket"); -Color.addToMap("#3B3C36", "Black olive"); -Color.addToMap("#FFEBCD", "Blanched almond"); -Color.addToMap("#A57164", "Blast-off bronze"); -Color.addToMap("#318CE7", "Bleu de France"); -Color.addToMap("#ACE5EE", "Blizzard Blue"); -Color.addToMap("#FAF0BE", "Blond"); -Color.addToMap("#0000FF", "Blue"); -Color.addToMap("#1F75FE", "Blue (Crayola)"); -Color.addToMap("#0093AF", "Blue (Munsell)"); -Color.addToMap("#0087BD", "Blue (NCS)"); -Color.addToMap("#333399", "Blue (pigment)"); -Color.addToMap("#0247FE", "Blue (RYB)"); -Color.addToMap("#A2A2D0", "Blue Bell"); -Color.addToMap("#6699CC", "Blue-gray"); -Color.addToMap("#0D98BA", "Blue-green"); -Color.addToMap("#126180", "Blue sapphire"); -Color.addToMap("#8A2BE2", "Blue-violet"); -Color.addToMap("#5072A7", "Blue yonder"); -Color.addToMap("#4F86F7", "Blueberry"); -Color.addToMap("#1C1CF0", "Bluebonnet"); -Color.addToMap("#DE5D83", "Blush"); -Color.addToMap("#79443B", "Bole Brown"); -Color.addToMap("#0095B6", "Bondi blue"); -Color.addToMap("#E3DAC9", "Bone"); -Color.addToMap("#CC0000", "Boston University Red"); -Color.addToMap("#006A4E", "Bottle green"); -Color.addToMap("#873260", "Boysenberry"); -Color.addToMap("#0070FF", "Brandeis blue"); -Color.addToMap("#B5A642", "Brass"); -Color.addToMap("#CB4154", "Brick red"); -Color.addToMap("#1DACD6", "Bright cerulean"); -Color.addToMap("#66FF00", "Bright green"); -Color.addToMap("#BF94E4", "Bright lavender"); -Color.addToMap("#D891EF", "Bright lilac"); -Color.addToMap("#C32148", "Bright maroon"); -Color.addToMap("#1974D2", "Bright navy blue"); -Color.addToMap("#FF007F", "Bright pink"); -Color.addToMap("#08E8DE", "Bright turquoise"); -Color.addToMap("#D19FE8", "Bright ube"); -Color.addToMap("#F4BBFF", "Brilliant lavender"); -Color.addToMap("#FF55A3", "Brilliant rose"); -Color.addToMap("#FB607F", "Brink pink"); -Color.addToMap("#004225", "British racing green"); -Color.addToMap("#CD7F32", "Bronze"); -Color.addToMap("#737000", "Bronze Yellow"); -Color.addToMap("#964B00", "Brown"); -Color.addToMap("#6B4423", "Brown-nose"); -Color.addToMap("#FFC1CC", "Bubble gum"); -Color.addToMap("#E7FEFF", "Bubbles"); -Color.addToMap("#F0DC82", "Buff"); -Color.addToMap("#7BB661", "Bud green"); -Color.addToMap("#480607", "Bulgarian rose"); -Color.addToMap("#800020", "Burgundy"); -Color.addToMap("#DEB887", "Burlywood"); -Color.addToMap("#CC5500", "Burnt orange"); -Color.addToMap("#8A3324", "Burnt umber"); -Color.addToMap("#BD33A4", "Byzantine"); -Color.addToMap("#702963", "Byzantium"); -Color.addToMap("#536872", "Cadet"); -Color.addToMap("#5F9EA0", "Cadet blue"); -Color.addToMap("#91A3B0", "Cadet grey"); -Color.addToMap("#006B3C", "Cadmium green"); -Color.addToMap("#ED872D", "Cadmium orange"); -Color.addToMap("#E30022", "Cadmium red"); -Color.addToMap("#FFF600", "Cadmium yellow"); -Color.addToMap("#A67B5B", "Cafe au lait"); -Color.addToMap("#4B3621", "Cafe noir"); -Color.addToMap("#1E4D2B", "Cal Poly green"); -Color.addToMap("#A3C1AD", "Cambridge Blue"); -Color.addToMap("#EFBBCC", "Cameo pink"); -Color.addToMap("#78866B", "Camouflage green"); -Color.addToMap("#FFEF00", "Canary yellow"); -Color.addToMap("#FF0800", "Candy apple red"); -Color.addToMap("#E4717A", "Candy pink"); -Color.addToMap("#592720", "Caput mortuum"); -Color.addToMap("#C41E3A", "Cardinal"); -Color.addToMap("#00CC99", "Caribbean green"); -Color.addToMap("#960018", "Carmine"); -Color.addToMap("#EB4C42", "Carmine pink"); -Color.addToMap("#FF0038", "Carmine red"); -Color.addToMap("#FFA6C9", "Carnation pink"); -Color.addToMap("#99BADD", "Carolina blue"); -Color.addToMap("#ED9121", "Carrot orange"); -Color.addToMap("#00563F", "Castleton green"); -Color.addToMap("#062A78", "Catalina blue"); -Color.addToMap("#703642", "Catawba"); -Color.addToMap("#C95A49", "Cedar Chest"); -Color.addToMap("#92A1CF", "Ceil"); -Color.addToMap("#ACE1AF", "Celadon"); -Color.addToMap("#007BA7", "Celadon blue"); -Color.addToMap("#2F847C", "Celadon green"); -Color.addToMap("#4997D0", "Celestial blue"); -Color.addToMap("#EC3B83", "Cerise pink"); -Color.addToMap("#2A52BE", "Cerulean blue"); -Color.addToMap("#6D9BC3", "Cerulean frost"); -Color.addToMap("#007AA5", "CG Blue"); -Color.addToMap("#E03C31", "CG Red"); -Color.addToMap("#A0785A", "Chamoisee"); -Color.addToMap("#F7E7CE", "Champagne"); -Color.addToMap("#36454F", "Charcoal"); -Color.addToMap("#232B2B", "Charleston green"); -Color.addToMap("#E68FAC", "Charm pink"); -Color.addToMap("#DFFF00", "Chartreuse"); -Color.addToMap("#7FFF00", "Chartreuse (web)"); -Color.addToMap("#DE3163", "Cherry"); -Color.addToMap("#FFB7C5", "Cherry blossom pink"); -Color.addToMap("#954535", "Chestnut"); -Color.addToMap("#A8516E", "China rose"); -Color.addToMap("#AA381E", "Chinese red"); -Color.addToMap("#856088", "Chinese violet"); -Color.addToMap("#7B3F00", "Chocolate"); -Color.addToMap("#FFA700", "Chrome yellow"); -Color.addToMap("#98817B", "Cinereous"); -Color.addToMap("#E4D00A", "Citrine"); -Color.addToMap("#9FA91F", "Citron"); -Color.addToMap("#7F1734", "Claret"); -Color.addToMap("#FBCCE7", "Classic rose"); -Color.addToMap("#0047AB", "Cobalt"); -Color.addToMap("#D2691E", "Cocoa brown"); -Color.addToMap("#965A3E", "Coconut"); -Color.addToMap("#6F4E37", "Coffee Brown"); -Color.addToMap("#9BDDFF", "Columbia blue"); -Color.addToMap("#002E63", "Cool black"); -Color.addToMap("#8C92AC", "Cool grey"); -Color.addToMap("#B87333", "Copper"); -Color.addToMap("#AD6F69", "Copper penny"); -Color.addToMap("#CB6D51", "Copper red"); -Color.addToMap("#996666", "Copper rose"); -Color.addToMap("#FF3800", "Coquelicot"); -Color.addToMap("#FF7F50", "Coral"); -Color.addToMap("#F88379", "Coral pink"); -Color.addToMap("#FF4040", "Coral red"); -Color.addToMap("#893F45", "Cordovan"); -Color.addToMap("#FBEC5D", "Corn Yellow"); -Color.addToMap("#B31B1B", "Cornell Red"); -Color.addToMap("#6495ED", "Cornflower blue"); -Color.addToMap("#FFF8DC", "Cornsilk"); -Color.addToMap("#FFF8E7", "Cosmic latte"); -Color.addToMap("#FFBCD9", "Cotton candy"); -Color.addToMap("#FFFDD0", "Cream"); -Color.addToMap("#DC143C", "Crimson"); -Color.addToMap("#BE0032", "Crimson glory"); -Color.addToMap("#00B7EB", "Cyan"); -Color.addToMap("#58427C", "Cyber grape"); -Color.addToMap("#FFD300", "Cyber yellow"); -Color.addToMap("#FFFF31", "Daffodil"); -Color.addToMap("#F0E130", "Dandelion"); -Color.addToMap("#00008B", "Dark blue"); -Color.addToMap("#666699", "Dark blue-gray"); -Color.addToMap("#654321", "Dark brown"); -Color.addToMap("#5D3954", "Dark byzantium"); -Color.addToMap("#A40000", "Dark candy apple red"); -Color.addToMap("#08457E", "Dark cerulean"); -Color.addToMap("#986960", "Dark chestnut"); -Color.addToMap("#CD5B45", "Dark coral"); -Color.addToMap("#008B8B", "Dark cyan"); -Color.addToMap("#536878", "Dark electric blue"); -Color.addToMap("#B8860B", "Dark goldenrod"); -Color.addToMap("#A9A9A9", "Dark gray"); -Color.addToMap("#013220", "Dark green"); -Color.addToMap("#00416A", "Dark imperial blue"); -Color.addToMap("#1A2421", "Dark jungle green"); -Color.addToMap("#BDB76B", "Dark khaki"); -Color.addToMap("#734F96", "Dark lavender"); -Color.addToMap("#534B4F", "Dark liver"); -Color.addToMap("#543D37", "Dark liver (horses)"); -Color.addToMap("#8B008B", "Dark magenta"); -Color.addToMap("#003366", "Dark midnight blue"); -Color.addToMap("#4A5D23", "Dark moss green"); -Color.addToMap("#556B2F", "Dark olive green"); -Color.addToMap("#FF8C00", "Dark orange"); -Color.addToMap("#9932CC", "Dark orchid"); -Color.addToMap("#779ECB", "Dark pastel blue"); -Color.addToMap("#03C03C", "Dark pastel green"); -Color.addToMap("#966FD6", "Dark pastel purple"); -Color.addToMap("#C23B22", "Dark pastel red"); -Color.addToMap("#E75480", "Dark pink"); -Color.addToMap("#003399", "Dark powder blue"); -Color.addToMap("#4F3A3C", "Dark puce"); -Color.addToMap("#872657", "Dark raspberry"); -Color.addToMap("#8B0000", "Dark red"); -Color.addToMap("#E9967A", "Dark salmon"); -Color.addToMap("#560319", "Dark scarlet"); -Color.addToMap("#8FBC8F", "Dark sea green"); -Color.addToMap("#3C1414", "Dark sienna"); -Color.addToMap("#8CBED6", "Dark sky blue"); -Color.addToMap("#483D8B", "Dark slate blue"); -Color.addToMap("#2F4F4F", "Dark slate gray"); -Color.addToMap("#177245", "Dark spring green"); -Color.addToMap("#918151", "Dark tan"); -Color.addToMap("#FFA812", "Dark tangerine"); -Color.addToMap("#CC4E5C", "Dark terra cotta"); -Color.addToMap("#00CED1", "Dark turquoise"); -Color.addToMap("#D1BEA8", "Dark vanilla"); -Color.addToMap("#9400D3", "Dark violet"); -Color.addToMap("#9B870C", "Dark yellow"); -Color.addToMap("#00703C", "Dartmouth green"); -Color.addToMap("#555555", "Davy's grey"); -Color.addToMap("#D70A53", "Debian red"); -Color.addToMap("#A9203E", "Deep carmine"); -Color.addToMap("#EF3038", "Deep carmine pink"); -Color.addToMap("#E9692C", "Deep carrot orange"); -Color.addToMap("#DA3287", "Deep cerise"); -Color.addToMap("#B94E48", "Deep chestnut"); -Color.addToMap("#C154C1", "Deep fuchsia"); -Color.addToMap("#004B49", "Deep jungle green"); -Color.addToMap("#F5C71A", "Deep lemon"); -Color.addToMap("#9955BB", "Deep lilac"); -Color.addToMap("#CC00CC", "Deep magenta"); -Color.addToMap("#D473D4", "Deep mauve"); -Color.addToMap("#355E3B", "Deep moss green"); -Color.addToMap("#FFCBA4", "Deep peach"); -Color.addToMap("#A95C68", "Deep puce"); -Color.addToMap("#843F5B", "Deep ruby"); -Color.addToMap("#FF9933", "Deep saffron"); -Color.addToMap("#00BFFF", "Deep sky blue"); -Color.addToMap("#4A646C", "Deep Space Sparkle"); -Color.addToMap("#7E5E60", "Deep Taupe"); -Color.addToMap("#66424D", "Deep Tuscan red"); -Color.addToMap("#BA8759", "Deer"); -Color.addToMap("#1560BD", "Denim"); -Color.addToMap("#EDC9AF", "Desert sand"); -Color.addToMap("#EA3C53", "Desire"); -Color.addToMap("#B9F2FF", "Diamond"); -Color.addToMap("#696969", "Dim gray"); -Color.addToMap("#9B7653", "Dirt"); -Color.addToMap("#1E90FF", "Dodger blue"); -Color.addToMap("#D71868", "Dogwood rose"); -Color.addToMap("#85BB65", "Dollar bill"); -Color.addToMap("#664C28", "Donkey Brown"); -Color.addToMap("#00009C", "Duke blue"); -Color.addToMap("#E5CCC9", "Dust storm"); -Color.addToMap("#EFDFBB", "Dutch white"); -Color.addToMap("#E1A95F", "Earth yellow"); -Color.addToMap("#555D50", "Ebony"); -Color.addToMap("#1B1B1B", "Eerie black"); -Color.addToMap("#614051", "Eggplant"); -Color.addToMap("#F0EAD6", "Eggshell"); -Color.addToMap("#1034A6", "Egyptian blue"); -Color.addToMap("#7DF9FF", "Electric blue"); -Color.addToMap("#FF003F", "Electric crimson"); -Color.addToMap("#00FF00", "Electric green"); -Color.addToMap("#6F00FF", "Electric indigo"); -Color.addToMap("#CCFF00", "Electric lime"); -Color.addToMap("#BF00FF", "Electric purple"); -Color.addToMap("#3F00FF", "Electric ultramarine"); -Color.addToMap("#FFFF00", "Electric yellow"); -Color.addToMap("#50C878", "Emerald"); -Color.addToMap("#6C3082", "Eminence"); -Color.addToMap("#1B4D3E", "English green"); -Color.addToMap("#B48395", "English lavender"); -Color.addToMap("#AB4B52", "English red"); -Color.addToMap("#563C5C", "English violet"); -Color.addToMap("#96C8A2", "Eton blue"); -Color.addToMap("#44D7A8", "Eucalyptus"); -Color.addToMap("#801818", "Falu red"); -Color.addToMap("#B53389", "Fandango"); -Color.addToMap("#DE5285", "Fandango pink"); -Color.addToMap("#F400A1", "Fashion fuchsia"); -Color.addToMap("#E5AA70", "Fawn"); -Color.addToMap("#4D5D53", "Feldgrau"); -Color.addToMap("#4F7942", "Fern green"); -Color.addToMap("#FF2800", "Ferrari Red"); -Color.addToMap("#6C541E", "Field drab"); -Color.addToMap("#B22222", "Firebrick"); -Color.addToMap("#CE2029", "Fire engine red"); -Color.addToMap("#E25822", "Flame"); -Color.addToMap("#FC8EAC", "Flamingo pink"); -Color.addToMap("#F7E98E", "Flavescent"); -Color.addToMap("#EEDC82", "Flax"); -Color.addToMap("#A2006D", "Flirt"); -Color.addToMap("#FFFAF0", "Floral white"); -Color.addToMap("#FFBF00", "Fluorescent orange"); -Color.addToMap("#FF1493", "Fluorescent pink"); -Color.addToMap("#FF004F", "Folly"); -Color.addToMap("#014421", "Forest green"); -Color.addToMap("#228B22", "Forest green (web)"); -Color.addToMap("#856D4D", "French bistre"); -Color.addToMap("#0072BB", "French blue"); -Color.addToMap("#FD3F92", "French fuchsia"); -Color.addToMap("#86608E", "French lilac"); -Color.addToMap("#9EFD38", "French lime"); -Color.addToMap("#FD6C9E", "French pink"); -Color.addToMap("#4E1609", "French puce"); -Color.addToMap("#C72C48", "French raspberry"); -Color.addToMap("#F64A8A", "French rose"); -Color.addToMap("#77B5FE", "French sky blue"); -Color.addToMap("#8806CE", "French violet"); -Color.addToMap("#AC1E44", "French wine"); -Color.addToMap("#A6E7FF", "Fresh Air"); -Color.addToMap("#FF77FF", "Fuchsia pink"); -Color.addToMap("#CC397B", "Fuchsia purple"); -Color.addToMap("#C74375", "Fuchsia rose"); -Color.addToMap("#E48400", "Fulvous"); -Color.addToMap("#CC6666", "Fuzzy Wuzzy"); -Color.addToMap("#DCDCDC", "Gainsboro"); -Color.addToMap("#E49B0F", "Gamboge"); -Color.addToMap("#007F66", "Generic viridian"); -Color.addToMap("#F8F8FF", "Ghost white"); -Color.addToMap("#FE5A1D", "Giants orange"); -Color.addToMap("#B06500", "Ginger"); -Color.addToMap("#6082B6", "Glaucous"); -Color.addToMap("#E6E8FA", "Glitter"); -Color.addToMap("#00AB66", "GO green"); -Color.addToMap("#D4AF37", "Gold (metallic)"); -Color.addToMap("#FFD700", "Gold (web) (Golden)"); -Color.addToMap("#85754E", "Gold Fusion"); -Color.addToMap("#996515", "Golden brown"); -Color.addToMap("#FCC200", "Golden poppy"); -Color.addToMap("#FFDF00", "Golden yellow"); -Color.addToMap("#DAA520", "Goldenrod"); -Color.addToMap("#A8E4A0", "Granny Smith Apple"); -Color.addToMap("#6F2DA8", "Grape"); -Color.addToMap("#808080", "Gray"); -Color.addToMap("#BEBEBE", "Gray (X11 gray)"); -Color.addToMap("#465945", "Gray-asparagus"); -Color.addToMap("#1CAC78", "Green (Crayola)"); -Color.addToMap("#008000", "Green"); -Color.addToMap("#00A877", "Green (Munsell)"); -Color.addToMap("#009F6B", "Green (NCS)"); -Color.addToMap("#00A550", "Green (pigment)"); -Color.addToMap("#66B032", "Green (RYB)"); -Color.addToMap("#ADFF2F", "Green-yellow"); -Color.addToMap("#A99A86", "Grullo"); -Color.addToMap("#663854", "Halaya ube"); -Color.addToMap("#446CCF", "Han blue"); -Color.addToMap("#5218FA", "Han purple"); -Color.addToMap("#E9D66B", "Hansa yellow"); -Color.addToMap("#3FFF00", "Harlequin"); -Color.addToMap("#C90016", "Harvard crimson"); -Color.addToMap("#DA9100", "Harvest gold"); -Color.addToMap("#DF73FF", "Heliotrope"); -Color.addToMap("#AA98A9", "Heliotrope gray"); -Color.addToMap("#F0FFF0", "Honeydew"); -Color.addToMap("#006DB0", "Honolulu blue"); -Color.addToMap("#49796B", "Hooker's green"); -Color.addToMap("#FF1DCE", "Hot magenta"); -Color.addToMap("#FF69B4", "Hot pink"); -Color.addToMap("#71A6D2", "Iceberg"); -Color.addToMap("#FCF75E", "Icterine"); -Color.addToMap("#319177", "Illuminating Emerald"); -Color.addToMap("#602F6B", "Imperial"); -Color.addToMap("#002395", "Imperial blue"); -Color.addToMap("#66023C", "Imperial purple"); -Color.addToMap("#ED2939", "Imperial red"); -Color.addToMap("#B2EC5D", "Inchworm"); -Color.addToMap("#4C516D", "Independence"); -Color.addToMap("#138808", "India green"); -Color.addToMap("#CD5C5C", "Indian red"); -Color.addToMap("#E3A857", "Indian yellow"); -Color.addToMap("#4B0082", "Indigo"); -Color.addToMap("#002FA7", "International Klein Blue"); -Color.addToMap("#FF4F00", "International orange (aerospace)"); -Color.addToMap("#BA160C", "International orange (engineering)"); -Color.addToMap("#C0362C", "International orange (Golden Gate Bridge)"); -Color.addToMap("#5A4FCF", "Iris"); -Color.addToMap("#F4F0EC", "Isabelline"); -Color.addToMap("#009000", "Islamic green"); -Color.addToMap("#B2FFFF", "Italian sky blue"); -Color.addToMap("#FFFFF0", "Ivory"); -Color.addToMap("#00A86B", "Jade"); -Color.addToMap("#9D2933", "Japanese carmine"); -Color.addToMap("#264348", "Japanese indigo"); -Color.addToMap("#5B3256", "Japanese violet"); -Color.addToMap("#D73B3E", "Jasper"); -Color.addToMap("#A50B5E", "Jazzberry jam"); -Color.addToMap("#DA614E", "Jelly Bean"); -Color.addToMap("#343434", "Jet"); -Color.addToMap("#F4CA16", "Jonquil"); -Color.addToMap("#8AB9F1", "Jordy blue"); -Color.addToMap("#BDDA57", "June bud"); -Color.addToMap("#29AB87", "Jungle green"); -Color.addToMap("#4CBB17", "Kelly green"); -Color.addToMap("#7C1C05", "Kenyan copper"); -Color.addToMap("#3AB09E", "Keppel"); -Color.addToMap("#C3B091", "Khaki"); -Color.addToMap("#E79FC4", "Kobi"); -Color.addToMap("#354230", "Kombu green"); -Color.addToMap("#E8000D", "KU Crimson"); -Color.addToMap("#087830", "La Salle Green"); -Color.addToMap("#D6CADD", "Languid lavender"); -Color.addToMap("#26619C", "Lapis lazuli"); -Color.addToMap("#A9BA9D", "Laurel green"); -Color.addToMap("#CF1020", "Lava"); -Color.addToMap("#B57EDC", "Lavender (floral)"); -Color.addToMap("#CCCCFF", "Lavender blue"); -Color.addToMap("#FFF0F5", "Lavender blush"); -Color.addToMap("#C4C3D0", "Lavender gray"); -Color.addToMap("#9457EB", "Lavender indigo"); -Color.addToMap("#EE82EE", "Lavender magenta"); -Color.addToMap("#E6E6FA", "Lavender mist"); -Color.addToMap("#FBAED2", "Lavender pink"); -Color.addToMap("#967BB6", "Lavender purple"); -Color.addToMap("#FBA0E3", "Lavender rose"); -Color.addToMap("#7CFC00", "Lawn green"); -Color.addToMap("#FFF700", "Lemon"); -Color.addToMap("#FFFACD", "Lemon chiffon"); -Color.addToMap("#CCA01D", "Lemon curry"); -Color.addToMap("#FDFF00", "Lemon glacier"); -Color.addToMap("#E3FF00", "Lemon lime"); -Color.addToMap("#F6EABE", "Lemon meringue"); -Color.addToMap("#FFF44F", "Lemon yellow"); -Color.addToMap("#1A1110", "Licorice"); -Color.addToMap("#545AA7", "Liberty"); -Color.addToMap("#FDD5B1", "Light apricot"); -Color.addToMap("#ADD8E6", "Light blue"); -Color.addToMap("#B5651D", "Light brown"); -Color.addToMap("#E66771", "Light carmine pink"); -Color.addToMap("#F08080", "Light coral"); -Color.addToMap("#93CCEA", "Light cornflower blue"); -Color.addToMap("#F56991", "Light crimson"); -Color.addToMap("#E0FFFF", "Light cyan"); -Color.addToMap("#FF5CCD", "Light deep pink"); -Color.addToMap("#C8AD7F", "Light French beige"); -Color.addToMap("#F984EF", "Light fuchsia pink"); -Color.addToMap("#FAFAD2", "Light goldenrod yellow"); -Color.addToMap("#D3D3D3", "Light gray"); -Color.addToMap("#90EE90", "Light green"); -Color.addToMap("#FFB3DE", "Light hot pink"); -Color.addToMap("#F0E68C", "Light khaki"); -Color.addToMap("#D39BCB", "Light medium orchid"); -Color.addToMap("#ADDFAD", "Light moss green"); -Color.addToMap("#E6A8D7", "Light orchid"); -Color.addToMap("#B19CD9", "Light pastel purple"); -Color.addToMap("#FFB6C1", "Light pink"); -Color.addToMap("#E97451", "Light red ochre"); -Color.addToMap("#FFA07A", "Light salmon"); -Color.addToMap("#FF9999", "Light salmon pink"); -Color.addToMap("#20B2AA", "Light sea green"); -Color.addToMap("#87CEFA", "Light sky blue"); -Color.addToMap("#778899", "Light slate gray"); -Color.addToMap("#B0C4DE", "Light steel blue"); -Color.addToMap("#B38B6D", "Light taupe"); -Color.addToMap("#FFFFE0", "Light yellow"); -Color.addToMap("#C8A2C8", "Lilac"); -Color.addToMap("#BFFF00", "Lime"); -Color.addToMap("#32CD32", "Lime green"); -Color.addToMap("#9DC209", "Limerick"); -Color.addToMap("#195905", "Lincoln green"); -Color.addToMap("#FAF0E6", "Linen"); -Color.addToMap("#6CA0DC", "Little boy blue"); -Color.addToMap("#B86D29", "Liver (dogs)"); -Color.addToMap("#6C2E1F", "Liver"); -Color.addToMap("#987456", "Liver chestnut"); -Color.addToMap("#FFE4CD", "Lumber"); -Color.addToMap("#E62020", "Lust"); -Color.addToMap("#FF00FF", "Magenta"); -Color.addToMap("#CA1F7B", "Magenta (dye)"); -Color.addToMap("#D0417E", "Magenta (Pantone)"); -Color.addToMap("#FF0090", "Magenta (process)"); -Color.addToMap("#9F4576", "Magenta haze"); -Color.addToMap("#AAF0D1", "Magic mint"); -Color.addToMap("#F8F4FF", "Magnolia"); -Color.addToMap("#C04000", "Mahogany"); -Color.addToMap("#6050DC", "Majorelle Blue"); -Color.addToMap("#0BDA51", "Malachite"); -Color.addToMap("#979AAA", "Manatee"); -Color.addToMap("#FF8243", "Mango Tango"); -Color.addToMap("#74C365", "Mantis"); -Color.addToMap("#880085", "Mardi Gras"); -Color.addToMap("#800000", "Maroon"); -Color.addToMap("#E0B0FF", "Mauve"); -Color.addToMap("#915F6D", "Mauve taupe"); -Color.addToMap("#EF98AA", "Mauvelous"); -Color.addToMap("#4C9141", "May green"); -Color.addToMap("#73C2FB", "Maya blue"); -Color.addToMap("#E5B73B", "Meat brown"); -Color.addToMap("#66DDAA", "Medium aquamarine"); -Color.addToMap("#0000CD", "Medium blue"); -Color.addToMap("#E2062C", "Medium candy apple red"); -Color.addToMap("#AF4035", "Medium carmine"); -Color.addToMap("#035096", "Medium electric blue"); -Color.addToMap("#1C352D", "Medium jungle green"); -Color.addToMap("#BA55D3", "Medium orchid"); -Color.addToMap("#9370DB", "Medium purple"); -Color.addToMap("#BB3385", "Medium red-violet"); -Color.addToMap("#AA4069", "Medium ruby"); -Color.addToMap("#3CB371", "Medium sea green"); -Color.addToMap("#80DAEB", "Medium sky blue"); -Color.addToMap("#7B68EE", "Medium slate blue"); -Color.addToMap("#C9DC87", "Medium spring bud"); -Color.addToMap("#00FA9A", "Medium spring green"); -Color.addToMap("#674C47", "Medium taupe"); -Color.addToMap("#48D1CC", "Medium turquoise"); -Color.addToMap("#D9603B", "Pale vermilion"); -Color.addToMap("#F8B878", "Mellow apricot"); -Color.addToMap("#F8DE7E", "Mellow yellow"); -Color.addToMap("#FDBCB4", "Melon"); -Color.addToMap("#0A7E8C", "Metallic Seaweed"); -Color.addToMap("#9C7C38", "Metallic Sunburst"); -Color.addToMap("#E4007C", "Mexican pink"); -Color.addToMap("#191970", "Midnight blue"); -Color.addToMap("#004953", "Midnight green (eagle green)"); -Color.addToMap("#FFC40C", "Mikado yellow"); -Color.addToMap("#E3F988", "Mindaro"); -Color.addToMap("#3EB489", "Mint"); -Color.addToMap("#F5FFFA", "Mint cream"); -Color.addToMap("#98FF98", "Mint green"); -Color.addToMap("#FFE4E1", "Misty rose"); -Color.addToMap("#73A9C2", "Moonstone blue"); -Color.addToMap("#AE0C00", "Mordant red 19"); -Color.addToMap("#8A9A5B", "Moss green"); -Color.addToMap("#30BA8F", "Mountain Meadow"); -Color.addToMap("#997A8D", "Mountbatten pink"); -Color.addToMap("#18453B", "MSU Green"); -Color.addToMap("#306030", "Mughal green"); -Color.addToMap("#C54B8C", "Mulberry"); -Color.addToMap("#FFDB58", "Mustard"); -Color.addToMap("#317873", "Myrtle green"); -Color.addToMap("#F6ADC6", "Nadeshiko pink"); -Color.addToMap("#2A8000", "Napier green"); -Color.addToMap("#FFDEAD", "Navajo white"); -Color.addToMap("#000080", "Navy"); -Color.addToMap("#FFA343", "Neon Carrot"); -Color.addToMap("#FE4164", "Neon fuchsia"); -Color.addToMap("#39FF14", "Neon green"); -Color.addToMap("#214FC6", "New Car"); -Color.addToMap("#D7837F", "New York pink"); -Color.addToMap("#A4DDED", "Non-photo blue"); -Color.addToMap("#059033", "North Texas Green"); -Color.addToMap("#E9FFDB", "Nyanza"); -Color.addToMap("#0077BE", "Ocean Boat Blue"); -Color.addToMap("#CC7722", "Ochre"); -Color.addToMap("#43302E", "Old burgundy"); -Color.addToMap("#CFB53B", "Old gold"); -Color.addToMap("#FDF5E6", "Old lace"); -Color.addToMap("#796878", "Old lavender"); -Color.addToMap("#673147", "Old mauve"); -Color.addToMap("#867E36", "Old moss green"); -Color.addToMap("#C08081", "Old rose"); -Color.addToMap("#808000", "Olive"); -Color.addToMap("#6B8E23", "Olive Drab #3"); -Color.addToMap("#3C341F", "Olive Drab #7"); -Color.addToMap("#9AB973", "Olivine"); -Color.addToMap("#353839", "Onyx"); -Color.addToMap("#B784A7", "Opera mauve"); -Color.addToMap("#FF7F00", "Orange"); -Color.addToMap("#FF7538", "Orange (Crayola)"); -Color.addToMap("#FF5800", "Orange (Pantone)"); -Color.addToMap("#FB9902", "Orange (RYB)"); -Color.addToMap("#FFA500", "Orange (web)"); -Color.addToMap("#FF9F00", "Orange peel"); -Color.addToMap("#FF4500", "Orange-red"); -Color.addToMap("#DA70D6", "Orchid"); -Color.addToMap("#F2BDCD", "Orchid pink"); -Color.addToMap("#FB4F14", "Orioles orange"); -Color.addToMap("#414A4C", "Outer Space"); -Color.addToMap("#FF6E4A", "Outrageous Orange"); -Color.addToMap("#002147", "Oxford Blue"); -Color.addToMap("#990000", "Crimson Red"); -Color.addToMap("#006600", "Pakistan green"); -Color.addToMap("#273BE2", "Palatinate blue"); -Color.addToMap("#682860", "Palatinate purple"); -Color.addToMap("#BCD4E6", "Pale aqua"); -Color.addToMap("#AFEEEE", "Pale blue"); -Color.addToMap("#987654", "Pale brown"); -Color.addToMap("#9BC4E2", "Pale cerulean"); -Color.addToMap("#DDADAF", "Pale chestnut"); -Color.addToMap("#DA8A67", "Pale copper"); -Color.addToMap("#ABCDEF", "Pale cornflower blue"); -Color.addToMap("#E6BE8A", "Pale gold"); -Color.addToMap("#EEE8AA", "Pale goldenrod"); -Color.addToMap("#98FB98", "Pale green"); -Color.addToMap("#DCD0FF", "Pale lavender"); -Color.addToMap("#F984E5", "Pale magenta"); -Color.addToMap("#FADADD", "Pale pink"); -Color.addToMap("#DDA0DD", "Pale plum"); -Color.addToMap("#DB7093", "Pale red-violet"); -Color.addToMap("#96DED1", "Pale robin egg blue"); -Color.addToMap("#C9C0BB", "Pale silver"); -Color.addToMap("#ECEBBD", "Pale spring bud"); -Color.addToMap("#BC987E", "Pale taupe"); -Color.addToMap("#78184A", "Pansy purple"); -Color.addToMap("#009B7D", "Paolo Veronese green"); -Color.addToMap("#FFEFD5", "Papaya whip"); -Color.addToMap("#E63E62", "Paradise pink"); -Color.addToMap("#AEC6CF", "Pastel blue"); -Color.addToMap("#836953", "Pastel brown"); -Color.addToMap("#CFCFC4", "Pastel gray"); -Color.addToMap("#77DD77", "Pastel green"); -Color.addToMap("#F49AC2", "Pastel magenta"); -Color.addToMap("#FFB347", "Pastel orange"); -Color.addToMap("#DEA5A4", "Pastel pink"); -Color.addToMap("#B39EB5", "Pastel purple"); -Color.addToMap("#FF6961", "Pastel red"); -Color.addToMap("#CB99C9", "Pastel violet"); -Color.addToMap("#FDFD96", "Pastel yellow"); -Color.addToMap("#FFE5B4", "Peach"); -Color.addToMap("#FFCC99", "Peach-orange"); -Color.addToMap("#FFDAB9", "Peach puff"); -Color.addToMap("#FADFAD", "Peach-yellow"); -Color.addToMap("#D1E231", "Pear"); -Color.addToMap("#EAE0C8", "Pearl"); -Color.addToMap("#88D8C0", "Pearl Aqua"); -Color.addToMap("#B768A2", "Pearly purple"); -Color.addToMap("#E6E200", "Peridot"); -Color.addToMap("#1C39BB", "Persian blue"); -Color.addToMap("#00A693", "Persian green"); -Color.addToMap("#32127A", "Persian indigo"); -Color.addToMap("#D99058", "Persian orange"); -Color.addToMap("#F77FBE", "Persian pink"); -Color.addToMap("#701C1C", "Persian plum"); -Color.addToMap("#CC3333", "Persian red"); -Color.addToMap("#FE28A2", "Persian rose"); -Color.addToMap("#EC5800", "Persimmon"); -Color.addToMap("#CD853F", "Peru"); -Color.addToMap("#000F89", "Phthalo blue"); -Color.addToMap("#123524", "Phthalo green"); -Color.addToMap("#45B1E8", "Picton blue"); -Color.addToMap("#C30B4E", "Pictorial carmine"); -Color.addToMap("#FDDDE6", "Piggy pink"); -Color.addToMap("#01796F", "Pine green"); -Color.addToMap("#FFC0CB", "Pink"); -Color.addToMap("#D74894", "Pink (Pantone)"); -Color.addToMap("#FFDDF4", "Pink lace"); -Color.addToMap("#D8B2D1", "Pink lavender"); -Color.addToMap("#FF9966", "Pink-orange"); -Color.addToMap("#E7ACCF", "Pink pearl"); -Color.addToMap("#F78FA7", "Pink Sherbet"); -Color.addToMap("#93C572", "Pistachio"); -Color.addToMap("#E5E4E2", "Platinum"); -Color.addToMap("#8E4585", "Plum"); -Color.addToMap("#BE4F62", "Popstar"); -Color.addToMap("#FF5A36", "Portland Orange"); -Color.addToMap("#B0E0E6", "Powder blue"); -Color.addToMap("#FF8F00", "Princeton orange"); -Color.addToMap("#003153", "Prussian blue"); -Color.addToMap("#DF00FF", "Psychedelic purple"); -Color.addToMap("#CC8899", "Puce"); -Color.addToMap("#644117", "Pullman Brown (UPS Brown)"); -Color.addToMap("#FF7518", "Pumpkin"); -Color.addToMap("#800080", "Deep purple"); -Color.addToMap("#9F00C5", "Purple (Munsell)"); -Color.addToMap("#A020F0", "Purple"); -Color.addToMap("#69359C", "Purple Heart"); -Color.addToMap("#9678B6", "Purple mountain majesty"); -Color.addToMap("#4E5180", "Purple navy"); -Color.addToMap("#FE4EDA", "Purple pizzazz"); -Color.addToMap("#50404D", "Purple taupe"); -Color.addToMap("#9A4EAE", "Purpureus"); -Color.addToMap("#51484F", "Quartz"); -Color.addToMap("#436B95", "Queen blue"); -Color.addToMap("#E8CCD7", "Queen pink"); -Color.addToMap("#8E3A59", "Quinacridone magenta"); -Color.addToMap("#FF355E", "Radical Red"); -Color.addToMap("#FBAB60", "Rajah"); -Color.addToMap("#E30B5D", "Raspberry"); -Color.addToMap("#E25098", "Raspberry pink"); -Color.addToMap("#B3446C", "Raspberry rose"); -Color.addToMap("#826644", "Raw umber"); -Color.addToMap("#FF33CC", "Razzle dazzle rose"); -Color.addToMap("#E3256B", "Razzmatazz"); -Color.addToMap("#8D4E85", "Razzmic Berry"); -Color.addToMap("#FF0000", "Red"); -Color.addToMap("#EE204D", "Red (Crayola)"); -Color.addToMap("#F2003C", "Red (Munsell)"); -Color.addToMap("#C40233", "Red (NCS)"); -Color.addToMap("#ED1C24", "Red (pigment)"); -Color.addToMap("#FE2712", "Red (RYB)"); -Color.addToMap("#A52A2A", "Red-brown"); -Color.addToMap("#860111", "Red devil"); -Color.addToMap("#FF5349", "Red-orange"); -Color.addToMap("#E40078", "Red-purple"); -Color.addToMap("#C71585", "Red-violet"); -Color.addToMap("#A45A52", "Redwood"); -Color.addToMap("#522D80", "Regalia"); -Color.addToMap("#002387", "Resolution blue"); -Color.addToMap("#777696", "Rhythm"); -Color.addToMap("#004040", "Rich black"); -Color.addToMap("#F1A7FE", "Rich brilliant lavender"); -Color.addToMap("#D70040", "Rich carmine"); -Color.addToMap("#0892D0", "Rich electric blue"); -Color.addToMap("#A76BCF", "Rich lavender"); -Color.addToMap("#B666D2", "Rich lilac"); -Color.addToMap("#B03060", "Rich maroon"); -Color.addToMap("#444C38", "Rifle green"); -Color.addToMap("#704241", "Deep Roast coffee"); -Color.addToMap("#00CCCC", "Robin egg blue"); -Color.addToMap("#8A7F80", "Rocket metallic"); -Color.addToMap("#838996", "Roman silver"); -Color.addToMap("#F9429E", "Rose bonbon"); -Color.addToMap("#674846", "Rose ebony"); -Color.addToMap("#B76E79", "Rose gold"); -Color.addToMap("#FF66CC", "Rose pink"); -Color.addToMap("#C21E56", "Rose red"); -Color.addToMap("#905D5D", "Rose taupe"); -Color.addToMap("#AB4E52", "Rose vale"); -Color.addToMap("#65000B", "Rosewood"); -Color.addToMap("#D40000", "Rosso corsa"); -Color.addToMap("#BC8F8F", "Rosy brown"); -Color.addToMap("#0038A8", "Royal azure"); -Color.addToMap("#002366", "Royal blue"); -Color.addToMap("#4169E1", "Royal light blue"); -Color.addToMap("#CA2C92", "Royal fuchsia"); -Color.addToMap("#7851A9", "Royal purple"); -Color.addToMap("#FADA5E", "Royal yellow"); -Color.addToMap("#CE4676", "Ruber"); -Color.addToMap("#D10056", "Rubine red"); -Color.addToMap("#E0115F", "Ruby"); -Color.addToMap("#9B111E", "Ruby red"); -Color.addToMap("#FF0028", "Ruddy"); -Color.addToMap("#BB6528", "Ruddy brown"); -Color.addToMap("#E18E96", "Ruddy pink"); -Color.addToMap("#A81C07", "Rufous"); -Color.addToMap("#80461B", "Russet"); -Color.addToMap("#679267", "Russian green"); -Color.addToMap("#32174D", "Russian violet"); -Color.addToMap("#B7410E", "Rust"); -Color.addToMap("#DA2C43", "Rusty red"); -Color.addToMap("#8B4513", "Saddle brown"); -Color.addToMap("#FF6700", "Safety orange (blaze orange)"); -Color.addToMap("#EED202", "Safety yellow"); -Color.addToMap("#F4C430", "Saffron"); -Color.addToMap("#BCB88A", "Sage"); -Color.addToMap("#23297A", "St. Patrick's blue"); -Color.addToMap("#FA8072", "Salmon"); -Color.addToMap("#FF91A4", "Salmon pink"); -Color.addToMap("#C2B280", "Sand"); -Color.addToMap("#ECD540", "Sandstorm"); -Color.addToMap("#F4A460", "Sandy brown"); -Color.addToMap("#92000A", "Sangria"); -Color.addToMap("#507D2A", "Sap green"); -Color.addToMap("#0F52BA", "Sapphire"); -Color.addToMap("#0067A5", "Sapphire blue"); -Color.addToMap("#CBA135", "Satin sheen gold"); -Color.addToMap("#FF2400", "Scarlet"); -Color.addToMap("#FFD800", "School bus yellow"); -Color.addToMap("#76FF7A", "Screamin' Green"); -Color.addToMap("#006994", "Sea blue"); -Color.addToMap("#2E8B57", "Sea green"); -Color.addToMap("#321414", "Seal brown"); -Color.addToMap("#FFF5EE", "Seashell"); -Color.addToMap("#FFBA00", "Selective yellow"); -Color.addToMap("#704214", "Sepia"); -Color.addToMap("#8A795D", "Shadow"); -Color.addToMap("#778BA5", "Shadow blue"); -Color.addToMap("#FFCFF1", "Shampoo"); -Color.addToMap("#009E60", "Shamrock green"); -Color.addToMap("#8FD400", "Sheen Green"); -Color.addToMap("#D98695", "Shimmering Blush"); -Color.addToMap("#FC0FC0", "Shocking pink"); -Color.addToMap("#882D17", "Sienna"); -Color.addToMap("#C0C0C0", "Silver"); -Color.addToMap("#ACACAC", "Silver chalice"); -Color.addToMap("#5D89BA", "Silver Lake blue"); -Color.addToMap("#C4AEAD", "Silver pink"); -Color.addToMap("#BFC1C2", "Silver sand"); -Color.addToMap("#CB410B", "Sinopia"); -Color.addToMap("#007474", "Skobeloff"); -Color.addToMap("#87CEEB", "Sky blue"); -Color.addToMap("#CF71AF", "Sky magenta"); -Color.addToMap("#6A5ACD", "Slate blue"); -Color.addToMap("#708090", "Slate gray"); -Color.addToMap("#C84186", "Smitten"); -Color.addToMap("#738276", "Smoke"); -Color.addToMap("#933D41", "Smokey topaz"); -Color.addToMap("#100C08", "Smoky black"); -Color.addToMap("#FFFAFA", "Snow"); -Color.addToMap("#CEC8EF", "Soap"); -Color.addToMap("#893843", "Solid pink"); -Color.addToMap("#757575", "Sonic silver"); -Color.addToMap("#9E1316", "Spartan Crimson"); -Color.addToMap("#1D2951", "Space cadet"); -Color.addToMap("#807532", "Spanish bistre"); -Color.addToMap("#0070B8", "Spanish blue"); -Color.addToMap("#D10047", "Spanish carmine"); -Color.addToMap("#E51A4C", "Spanish crimson"); -Color.addToMap("#989898", "Spanish gray"); -Color.addToMap("#009150", "Spanish green"); -Color.addToMap("#E86100", "Spanish orange"); -Color.addToMap("#F7BFBE", "Spanish pink"); -Color.addToMap("#E60026", "Spanish red"); -Color.addToMap("#4C2882", "Spanish violet"); -Color.addToMap("#007F5C", "Spanish viridian"); -Color.addToMap("#0FC0FC", "Spiro Disco Ball"); -Color.addToMap("#A7FC00", "Spring bud"); -Color.addToMap("#00FF7F", "Spring green"); -Color.addToMap("#007BB8", "Star command blue"); -Color.addToMap("#4682B4", "Steel blue"); -Color.addToMap("#CC33CC", "Steel pink"); -Color.addToMap("#4F666A", "Stormcloud"); -Color.addToMap("#E4D96F", "Straw"); -Color.addToMap("#FC5A8D", "Strawberry"); -Color.addToMap("#FFCC33", "Sunglow"); -Color.addToMap("#E3AB57", "Sunray"); -Color.addToMap("#FAD6A5", "Sunset"); -Color.addToMap("#FD5E53", "Sunset orange"); -Color.addToMap("#CF6BA9", "Super pink"); -Color.addToMap("#D2B48C", "Tan"); -Color.addToMap("#F94D00", "Tangelo"); -Color.addToMap("#F28500", "Tangerine"); -Color.addToMap("#FFCC00", "Tangerine yellow"); -Color.addToMap("#483C32", "Dark Grayish Brown"); -Color.addToMap("#8B8589", "Taupe gray"); -Color.addToMap("#D0F0C0", "Tea green"); -Color.addToMap("#F4C2C2", "Tea rose"); -Color.addToMap("#008080", "Teal"); -Color.addToMap("#367588", "Teal blue"); -Color.addToMap("#99E6B3", "Teal deer"); -Color.addToMap("#00827F", "Teal green"); -Color.addToMap("#CF3476", "Telemagenta"); -Color.addToMap("#CD5700", "Tenne"); -Color.addToMap("#E2725B", "Terra cotta"); -Color.addToMap("#D8BFD8", "Thistle"); -Color.addToMap("#DE6FA1", "Thulian pink"); -Color.addToMap("#FC89AC", "Tickle Me Pink"); -Color.addToMap("#0ABAB5", "Tiffany Blue"); -Color.addToMap("#E08D3C", "Tiger's eye"); -Color.addToMap("#DBD7D2", "Timberwolf"); -Color.addToMap("#EEE600", "Titanium yellow"); -Color.addToMap("#FF6347", "Tomato"); -Color.addToMap("#746CC0", "Toolbox"); -Color.addToMap("#42B72A", "Toothpaste advert green"); -Color.addToMap("#FFC87C", "Topaz"); -Color.addToMap("#FD0E35", "Tractor red"); -Color.addToMap("#00755E", "Tropical rain forest"); -Color.addToMap("#0073CF", "True Blue"); -Color.addToMap("#417DC1", "Tufts Blue"); -Color.addToMap("#FF878D", "Tulip"); -Color.addToMap("#DEAA88", "Tumbleweed"); -Color.addToMap("#B57281", "Turkish rose"); -Color.addToMap("#40E0D0", "Turquoise"); -Color.addToMap("#00FFEF", "Turquoise blue"); -Color.addToMap("#A0D6B4", "Turquoise green"); -Color.addToMap("#7C4848", "Tuscan red"); -Color.addToMap("#C09999", "Tuscany"); -Color.addToMap("#8A496B", "Twilight lavender"); -Color.addToMap("#0033AA", "UA blue"); -Color.addToMap("#D9004C", "UA red"); -Color.addToMap("#8878C3", "Ube"); -Color.addToMap("#536895", "UCLA Blue"); -Color.addToMap("#FFB300", "UCLA Gold"); -Color.addToMap("#3CD070", "UFO Green"); -Color.addToMap("#120A8F", "Ultramarine"); -Color.addToMap("#4166F5", "Ultramarine blue"); -Color.addToMap("#FF6FFF", "Ultra pink"); -Color.addToMap("#635147", "Umber"); -Color.addToMap("#FFDDCA", "Unbleached silk"); -Color.addToMap("#5B92E5", "United Nations blue"); -Color.addToMap("#B78727", "University of California Gold"); -Color.addToMap("#FFFF66", "Unmellow yellow"); -Color.addToMap("#7B1113", "UP Maroon"); -Color.addToMap("#AE2029", "Upsdell red"); -Color.addToMap("#E1AD21", "Urobilin"); -Color.addToMap("#004F98", "USAFA blue"); -Color.addToMap("#F77F00", "University of Tennessee Orange"); -Color.addToMap("#D3003F", "Utah Crimson"); -Color.addToMap("#F3E5AB", "Vanilla"); -Color.addToMap("#F38FA9", "Vanilla ice"); -Color.addToMap("#C5B358", "Vegas gold"); -Color.addToMap("#C80815", "Venetian red"); -Color.addToMap("#43B3AE", "Verdigris"); -Color.addToMap("#E34234", "Medium vermilion"); -Color.addToMap("#D9381E", "Vermilion"); -Color.addToMap("#8F00FF", "Violet"); -Color.addToMap("#7F00FF", "Violet (color wheel)"); -Color.addToMap("#8601AF", "Violet (RYB)"); -Color.addToMap("#324AB2", "Violet-blue"); -Color.addToMap("#F75394", "Violet-red"); -Color.addToMap("#40826D", "Viridian"); -Color.addToMap("#009698", "Viridian green"); -Color.addToMap("#922724", "Vivid auburn"); -Color.addToMap("#9F1D35", "Vivid burgundy"); -Color.addToMap("#DA1D81", "Vivid cerise"); -Color.addToMap("#CC00FF", "Vivid orchid"); -Color.addToMap("#00CCFF", "Vivid sky blue"); -Color.addToMap("#FFA089", "Vivid tangerine"); -Color.addToMap("#9F00FF", "Vivid violet"); -Color.addToMap("#004242", "Warm black"); -Color.addToMap("#A4F4F9", "Waterspout"); -Color.addToMap("#645452", "Wenge"); -Color.addToMap("#F5DEB3", "Wheat"); -Color.addToMap("#FFFFFF", "White"); -Color.addToMap("#F5F5F5", "White smoke"); -Color.addToMap("#A2ADD0", "Wild blue yonder"); -Color.addToMap("#D470A2", "Wild orchid"); -Color.addToMap("#FF43A4", "Wild Strawberry"); -Color.addToMap("#FC6C85", "Wild watermelon"); -Color.addToMap("#FD5800", "Willpower orange"); -Color.addToMap("#A75502", "Windsor tan"); -Color.addToMap("#722F37", "Wine"); -Color.addToMap("#C9A0DC", "Wisteria"); -Color.addToMap("#C19A6B", "Wood brown"); -Color.addToMap("#738678", "Xanadu"); -Color.addToMap("#0F4D92", "Yale Blue"); -Color.addToMap("#1C2841", "Yankees blue"); -Color.addToMap("#FCE883", "Yellow (Crayola)"); -Color.addToMap("#EFCC00", "Yellow (Munsell)"); -Color.addToMap("#FEDF00", "Yellow (Pantone)"); -Color.addToMap("#FEFE33", "Yellow"); -Color.addToMap("#9ACD32", "Yellow Green"); -Color.addToMap("#FFAE42", "Yellow Orange"); -Color.addToMap("#FFF000", "Yellow rose"); -Color.addToMap("#0014A8", "Zaffre"); -Color.addToMap("#2C1608", "Zinnwaldite brown"); +if(typeof module !== "undefined") { + module.exports = Color; +} else { + this.Color = Color; +} + +function Color() { + var r,g,b; + if(arguments.length === 1) { + var hexa = arguments[0].toLowerCase(); + if(hexa.match(/^#[0-9a-f]{6}$/i)) { + hexa = /^#?([0-9a-f]{2})([0-9a-f]{2})([0-9a-f]{2})$/i.exec(hexa); + if(hexa && hexa.length === 4) { + r = parseInt(hexa[1], 16); + g = parseInt(hexa[2], 16); + b = parseInt(hexa[3], 16); + } + } + } else if(arguments.length === 3) { + r = arguments[0]; + g = arguments[1]; + b = arguments[2]; + } + this.r = ~~r || 0; + this.g = ~~g || 0; + this.b = ~~b || 0; +}; + +Color.prototype.distance = function(color) { + var d = 0; + d += Math.pow(this.r - color.r, 2); + d += Math.pow(this.g - color.g, 2); + d += Math.pow(this.b - color.b, 2); + return Math.abs(Math.sqrt(d)); +}; + +Color.prototype.add = function(r, g, b) { + this.r += r; + this.g += g; + this.b += b; + if(this.r < 0) this.r = 0; + else if(this.r > 255) this.r = 255; + if(this.g < 0) this.g = 0; + else if(this.g > 255) this.g = 255; + if(this.b < 0) this.b = 0; + else if(this.b > 255) this.b = 255; +}; + +Color.prototype.toHexa = function() { + var r = (~~this.r || 0).toString(16), g = (~~this.g || 0).toString(16), b = (~~this.b || 0).toString(16); + if(r.length == 1) r = "0" + r; + if(g.length == 1) g = "0" + g; + if(b.length == 1) b = "0" + b; + return "#"+r+g+b; +} + +Color.prototype.getName = function() { + var hexa = this.toHexa(); + var low = 256; + var name; + for(var n in Color.map) { + if(!Color.map.hasOwnProperty(n)) + continue; + var color = Color.map[n]; + if(color.r === this.r && color.g === this.g && color.b === this.b) { + return n; + } + var dist = this.distance(color); + if(dist < low) { + low = dist; + name = n; + } + } + if(!name) + name = this.toHexa(); + else + name = "A shade of " + name; + return name; +}; + +Color.map = {}; + +Color.addToMap = function(hexa, name) { + Color.map[name] = new Color(hexa); +}; + +Color.addToMap("#7CB9E8", "Aero"); +Color.addToMap("#C9FFE5", "Aero blue"); +Color.addToMap("#B284BE", "African purple"); +Color.addToMap("#5D8AA8", "Air Force blue (RAF)"); +Color.addToMap("#00308F", "Air Force blue (USAF)"); +Color.addToMap("#72A0C1", "Air superiority blue"); +Color.addToMap("#AF002A", "Alabama Crimson"); +Color.addToMap("#F0F8FF", "Alice blue"); +Color.addToMap("#E32636", "Alizarin crimson"); +Color.addToMap("#C46210", "Alloy orange"); +Color.addToMap("#EFDECD", "Almond"); +Color.addToMap("#E52B50", "Amaranth"); +Color.addToMap("#F19CBB", "Amaranth pink"); +Color.addToMap("#AB274F", "Dark amaranth"); +Color.addToMap("#3B7A57", "Amazon"); +Color.addToMap("#FF7E00", "Amber"); +Color.addToMap("#FF033E", "American rose"); +Color.addToMap("#9966CC", "Amethyst"); +Color.addToMap("#A4C639", "Android green"); +Color.addToMap("#F2F3F4", "Anti-flash white"); +Color.addToMap("#CD9575", "Antique brass"); +Color.addToMap("#665D1E", "Antique bronze"); +Color.addToMap("#915C83", "Antique fuchsia"); +Color.addToMap("#841B2D", "Antique ruby"); +Color.addToMap("#FAEBD7", "Antique white"); +Color.addToMap("#8DB600", "Apple green"); +Color.addToMap("#FBCEB1", "Apricot"); +Color.addToMap("#00FFFF", "Aqua"); +Color.addToMap("#7FFFD4", "Aquamarine"); +Color.addToMap("#4B5320", "Army green"); +Color.addToMap("#3B444B", "Arsenic"); +Color.addToMap("#8F9779", "Artichoke"); +Color.addToMap("#B2BEB5", "Ash grey"); +Color.addToMap("#87A96B", "Asparagus"); +Color.addToMap("#FDEE00", "Aureolin"); +Color.addToMap("#6E7F80", "AuroMetalSaurus"); +Color.addToMap("#568203", "Avocado"); +Color.addToMap("#007FFF", "Azure"); +Color.addToMap("#F0FFFF", "Azure mist/web"); +Color.addToMap("#89CFF0", "Baby blue"); +Color.addToMap("#A1CAF1", "Baby blue eyes"); +Color.addToMap("#FEFEFA", "Baby powder"); +Color.addToMap("#FF91AF", "Baker-Miller pink"); +Color.addToMap("#21ABCD", "Ball blue"); +Color.addToMap("#FAE7B5", "Banana Mania"); +Color.addToMap("#FFE135", "Banana yellow"); +Color.addToMap("#E0218A", "Barbie pink"); +Color.addToMap("#7C0A02", "Barn red"); +Color.addToMap("#848482", "Battleship grey"); +Color.addToMap("#98777B", "Bazaar"); +Color.addToMap("#9F8170", "Beaver"); +Color.addToMap("#F5F5DC", "Beige"); +Color.addToMap("#2E5894", "B'dazzled blue"); +Color.addToMap("#9C2542", "Big dip o’ruby"); +Color.addToMap("#FFE4C4", "Bisque"); +Color.addToMap("#3D2B1F", "Bistre"); +Color.addToMap("#967117", "Bistre brown"); +Color.addToMap("#CAE00D", "Bitter lemon"); +Color.addToMap("#648C11", "Bitter lime"); +Color.addToMap("#FE6F5E", "Bittersweet"); +Color.addToMap("#BF4F51", "Bittersweet shimmer"); +Color.addToMap("#000000", "Black"); +Color.addToMap("#3D0C02", "Black bean"); +Color.addToMap("#253529", "Black leather jacket"); +Color.addToMap("#3B3C36", "Black olive"); +Color.addToMap("#FFEBCD", "Blanched almond"); +Color.addToMap("#A57164", "Blast-off bronze"); +Color.addToMap("#318CE7", "Bleu de France"); +Color.addToMap("#ACE5EE", "Blizzard Blue"); +Color.addToMap("#FAF0BE", "Blond"); +Color.addToMap("#0000FF", "Blue"); +Color.addToMap("#1F75FE", "Blue (Crayola)"); +Color.addToMap("#0093AF", "Blue (Munsell)"); +Color.addToMap("#0087BD", "Blue (NCS)"); +Color.addToMap("#333399", "Blue (pigment)"); +Color.addToMap("#0247FE", "Blue (RYB)"); +Color.addToMap("#A2A2D0", "Blue Bell"); +Color.addToMap("#6699CC", "Blue-gray"); +Color.addToMap("#0D98BA", "Blue-green"); +Color.addToMap("#126180", "Blue sapphire"); +Color.addToMap("#8A2BE2", "Blue-violet"); +Color.addToMap("#5072A7", "Blue yonder"); +Color.addToMap("#4F86F7", "Blueberry"); +Color.addToMap("#1C1CF0", "Bluebonnet"); +Color.addToMap("#DE5D83", "Blush"); +Color.addToMap("#79443B", "Bole Brown"); +Color.addToMap("#0095B6", "Bondi blue"); +Color.addToMap("#E3DAC9", "Bone"); +Color.addToMap("#CC0000", "Boston University Red"); +Color.addToMap("#006A4E", "Bottle green"); +Color.addToMap("#873260", "Boysenberry"); +Color.addToMap("#0070FF", "Brandeis blue"); +Color.addToMap("#B5A642", "Brass"); +Color.addToMap("#CB4154", "Brick red"); +Color.addToMap("#1DACD6", "Bright cerulean"); +Color.addToMap("#66FF00", "Bright green"); +Color.addToMap("#BF94E4", "Bright lavender"); +Color.addToMap("#D891EF", "Bright lilac"); +Color.addToMap("#C32148", "Bright maroon"); +Color.addToMap("#1974D2", "Bright navy blue"); +Color.addToMap("#FF007F", "Bright pink"); +Color.addToMap("#08E8DE", "Bright turquoise"); +Color.addToMap("#D19FE8", "Bright ube"); +Color.addToMap("#F4BBFF", "Brilliant lavender"); +Color.addToMap("#FF55A3", "Brilliant rose"); +Color.addToMap("#FB607F", "Brink pink"); +Color.addToMap("#004225", "British racing green"); +Color.addToMap("#CD7F32", "Bronze"); +Color.addToMap("#737000", "Bronze Yellow"); +Color.addToMap("#964B00", "Brown"); +Color.addToMap("#6B4423", "Brown-nose"); +Color.addToMap("#FFC1CC", "Bubble gum"); +Color.addToMap("#E7FEFF", "Bubbles"); +Color.addToMap("#F0DC82", "Buff"); +Color.addToMap("#7BB661", "Bud green"); +Color.addToMap("#480607", "Bulgarian rose"); +Color.addToMap("#800020", "Burgundy"); +Color.addToMap("#DEB887", "Burlywood"); +Color.addToMap("#CC5500", "Burnt orange"); +Color.addToMap("#8A3324", "Burnt umber"); +Color.addToMap("#BD33A4", "Byzantine"); +Color.addToMap("#702963", "Byzantium"); +Color.addToMap("#536872", "Cadet"); +Color.addToMap("#5F9EA0", "Cadet blue"); +Color.addToMap("#91A3B0", "Cadet grey"); +Color.addToMap("#006B3C", "Cadmium green"); +Color.addToMap("#ED872D", "Cadmium orange"); +Color.addToMap("#E30022", "Cadmium red"); +Color.addToMap("#FFF600", "Cadmium yellow"); +Color.addToMap("#A67B5B", "Cafe au lait"); +Color.addToMap("#4B3621", "Cafe noir"); +Color.addToMap("#1E4D2B", "Cal Poly green"); +Color.addToMap("#A3C1AD", "Cambridge Blue"); +Color.addToMap("#EFBBCC", "Cameo pink"); +Color.addToMap("#78866B", "Camouflage green"); +Color.addToMap("#FFEF00", "Canary yellow"); +Color.addToMap("#FF0800", "Candy apple red"); +Color.addToMap("#E4717A", "Candy pink"); +Color.addToMap("#592720", "Caput mortuum"); +Color.addToMap("#C41E3A", "Cardinal"); +Color.addToMap("#00CC99", "Caribbean green"); +Color.addToMap("#960018", "Carmine"); +Color.addToMap("#EB4C42", "Carmine pink"); +Color.addToMap("#FF0038", "Carmine red"); +Color.addToMap("#FFA6C9", "Carnation pink"); +Color.addToMap("#99BADD", "Carolina blue"); +Color.addToMap("#ED9121", "Carrot orange"); +Color.addToMap("#00563F", "Castleton green"); +Color.addToMap("#062A78", "Catalina blue"); +Color.addToMap("#703642", "Catawba"); +Color.addToMap("#C95A49", "Cedar Chest"); +Color.addToMap("#92A1CF", "Ceil"); +Color.addToMap("#ACE1AF", "Celadon"); +Color.addToMap("#007BA7", "Celadon blue"); +Color.addToMap("#2F847C", "Celadon green"); +Color.addToMap("#4997D0", "Celestial blue"); +Color.addToMap("#EC3B83", "Cerise pink"); +Color.addToMap("#2A52BE", "Cerulean blue"); +Color.addToMap("#6D9BC3", "Cerulean frost"); +Color.addToMap("#007AA5", "CG Blue"); +Color.addToMap("#E03C31", "CG Red"); +Color.addToMap("#A0785A", "Chamoisee"); +Color.addToMap("#F7E7CE", "Champagne"); +Color.addToMap("#36454F", "Charcoal"); +Color.addToMap("#232B2B", "Charleston green"); +Color.addToMap("#E68FAC", "Charm pink"); +Color.addToMap("#DFFF00", "Chartreuse"); +Color.addToMap("#7FFF00", "Chartreuse (web)"); +Color.addToMap("#DE3163", "Cherry"); +Color.addToMap("#FFB7C5", "Cherry blossom pink"); +Color.addToMap("#954535", "Chestnut"); +Color.addToMap("#A8516E", "China rose"); +Color.addToMap("#AA381E", "Chinese red"); +Color.addToMap("#856088", "Chinese violet"); +Color.addToMap("#7B3F00", "Chocolate"); +Color.addToMap("#FFA700", "Chrome yellow"); +Color.addToMap("#98817B", "Cinereous"); +Color.addToMap("#E4D00A", "Citrine"); +Color.addToMap("#9FA91F", "Citron"); +Color.addToMap("#7F1734", "Claret"); +Color.addToMap("#FBCCE7", "Classic rose"); +Color.addToMap("#0047AB", "Cobalt"); +Color.addToMap("#D2691E", "Cocoa brown"); +Color.addToMap("#965A3E", "Coconut"); +Color.addToMap("#6F4E37", "Coffee Brown"); +Color.addToMap("#9BDDFF", "Columbia blue"); +Color.addToMap("#002E63", "Cool black"); +Color.addToMap("#8C92AC", "Cool grey"); +Color.addToMap("#B87333", "Copper"); +Color.addToMap("#AD6F69", "Copper penny"); +Color.addToMap("#CB6D51", "Copper red"); +Color.addToMap("#996666", "Copper rose"); +Color.addToMap("#FF3800", "Coquelicot"); +Color.addToMap("#FF7F50", "Coral"); +Color.addToMap("#F88379", "Coral pink"); +Color.addToMap("#FF4040", "Coral red"); +Color.addToMap("#893F45", "Cordovan"); +Color.addToMap("#FBEC5D", "Corn Yellow"); +Color.addToMap("#B31B1B", "Cornell Red"); +Color.addToMap("#6495ED", "Cornflower blue"); +Color.addToMap("#FFF8DC", "Cornsilk"); +Color.addToMap("#FFF8E7", "Cosmic latte"); +Color.addToMap("#FFBCD9", "Cotton candy"); +Color.addToMap("#FFFDD0", "Cream"); +Color.addToMap("#DC143C", "Crimson"); +Color.addToMap("#BE0032", "Crimson glory"); +Color.addToMap("#00B7EB", "Cyan"); +Color.addToMap("#58427C", "Cyber grape"); +Color.addToMap("#FFD300", "Cyber yellow"); +Color.addToMap("#FFFF31", "Daffodil"); +Color.addToMap("#F0E130", "Dandelion"); +Color.addToMap("#00008B", "Dark blue"); +Color.addToMap("#666699", "Dark blue-gray"); +Color.addToMap("#654321", "Dark brown"); +Color.addToMap("#5D3954", "Dark byzantium"); +Color.addToMap("#A40000", "Dark candy apple red"); +Color.addToMap("#08457E", "Dark cerulean"); +Color.addToMap("#986960", "Dark chestnut"); +Color.addToMap("#CD5B45", "Dark coral"); +Color.addToMap("#008B8B", "Dark cyan"); +Color.addToMap("#536878", "Dark electric blue"); +Color.addToMap("#B8860B", "Dark goldenrod"); +Color.addToMap("#A9A9A9", "Dark gray"); +Color.addToMap("#013220", "Dark green"); +Color.addToMap("#00416A", "Dark imperial blue"); +Color.addToMap("#1A2421", "Dark jungle green"); +Color.addToMap("#BDB76B", "Dark khaki"); +Color.addToMap("#734F96", "Dark lavender"); +Color.addToMap("#534B4F", "Dark liver"); +Color.addToMap("#543D37", "Dark liver (horses)"); +Color.addToMap("#8B008B", "Dark magenta"); +Color.addToMap("#003366", "Dark midnight blue"); +Color.addToMap("#4A5D23", "Dark moss green"); +Color.addToMap("#556B2F", "Dark olive green"); +Color.addToMap("#FF8C00", "Dark orange"); +Color.addToMap("#9932CC", "Dark orchid"); +Color.addToMap("#779ECB", "Dark pastel blue"); +Color.addToMap("#03C03C", "Dark pastel green"); +Color.addToMap("#966FD6", "Dark pastel purple"); +Color.addToMap("#C23B22", "Dark pastel red"); +Color.addToMap("#E75480", "Dark pink"); +Color.addToMap("#003399", "Dark powder blue"); +Color.addToMap("#4F3A3C", "Dark puce"); +Color.addToMap("#872657", "Dark raspberry"); +Color.addToMap("#8B0000", "Dark red"); +Color.addToMap("#E9967A", "Dark salmon"); +Color.addToMap("#560319", "Dark scarlet"); +Color.addToMap("#8FBC8F", "Dark sea green"); +Color.addToMap("#3C1414", "Dark sienna"); +Color.addToMap("#8CBED6", "Dark sky blue"); +Color.addToMap("#483D8B", "Dark slate blue"); +Color.addToMap("#2F4F4F", "Dark slate gray"); +Color.addToMap("#177245", "Dark spring green"); +Color.addToMap("#918151", "Dark tan"); +Color.addToMap("#FFA812", "Dark tangerine"); +Color.addToMap("#CC4E5C", "Dark terra cotta"); +Color.addToMap("#00CED1", "Dark turquoise"); +Color.addToMap("#D1BEA8", "Dark vanilla"); +Color.addToMap("#9400D3", "Dark violet"); +Color.addToMap("#9B870C", "Dark yellow"); +Color.addToMap("#00703C", "Dartmouth green"); +Color.addToMap("#555555", "Davy's grey"); +Color.addToMap("#D70A53", "Debian red"); +Color.addToMap("#A9203E", "Deep carmine"); +Color.addToMap("#EF3038", "Deep carmine pink"); +Color.addToMap("#E9692C", "Deep carrot orange"); +Color.addToMap("#DA3287", "Deep cerise"); +Color.addToMap("#B94E48", "Deep chestnut"); +Color.addToMap("#C154C1", "Deep fuchsia"); +Color.addToMap("#004B49", "Deep jungle green"); +Color.addToMap("#F5C71A", "Deep lemon"); +Color.addToMap("#9955BB", "Deep lilac"); +Color.addToMap("#CC00CC", "Deep magenta"); +Color.addToMap("#D473D4", "Deep mauve"); +Color.addToMap("#355E3B", "Deep moss green"); +Color.addToMap("#FFCBA4", "Deep peach"); +Color.addToMap("#A95C68", "Deep puce"); +Color.addToMap("#843F5B", "Deep ruby"); +Color.addToMap("#FF9933", "Deep saffron"); +Color.addToMap("#00BFFF", "Deep sky blue"); +Color.addToMap("#4A646C", "Deep Space Sparkle"); +Color.addToMap("#7E5E60", "Deep Taupe"); +Color.addToMap("#66424D", "Deep Tuscan red"); +Color.addToMap("#BA8759", "Deer"); +Color.addToMap("#1560BD", "Denim"); +Color.addToMap("#EDC9AF", "Desert sand"); +Color.addToMap("#EA3C53", "Desire"); +Color.addToMap("#B9F2FF", "Diamond"); +Color.addToMap("#696969", "Dim gray"); +Color.addToMap("#9B7653", "Dirt"); +Color.addToMap("#1E90FF", "Dodger blue"); +Color.addToMap("#D71868", "Dogwood rose"); +Color.addToMap("#85BB65", "Dollar bill"); +Color.addToMap("#664C28", "Donkey Brown"); +Color.addToMap("#00009C", "Duke blue"); +Color.addToMap("#E5CCC9", "Dust storm"); +Color.addToMap("#EFDFBB", "Dutch white"); +Color.addToMap("#E1A95F", "Earth yellow"); +Color.addToMap("#555D50", "Ebony"); +Color.addToMap("#1B1B1B", "Eerie black"); +Color.addToMap("#614051", "Eggplant"); +Color.addToMap("#F0EAD6", "Eggshell"); +Color.addToMap("#1034A6", "Egyptian blue"); +Color.addToMap("#7DF9FF", "Electric blue"); +Color.addToMap("#FF003F", "Electric crimson"); +Color.addToMap("#00FF00", "Electric green"); +Color.addToMap("#6F00FF", "Electric indigo"); +Color.addToMap("#CCFF00", "Electric lime"); +Color.addToMap("#BF00FF", "Electric purple"); +Color.addToMap("#3F00FF", "Electric ultramarine"); +Color.addToMap("#FFFF00", "Electric yellow"); +Color.addToMap("#50C878", "Emerald"); +Color.addToMap("#6C3082", "Eminence"); +Color.addToMap("#1B4D3E", "English green"); +Color.addToMap("#B48395", "English lavender"); +Color.addToMap("#AB4B52", "English red"); +Color.addToMap("#563C5C", "English violet"); +Color.addToMap("#96C8A2", "Eton blue"); +Color.addToMap("#44D7A8", "Eucalyptus"); +Color.addToMap("#801818", "Falu red"); +Color.addToMap("#B53389", "Fandango"); +Color.addToMap("#DE5285", "Fandango pink"); +Color.addToMap("#F400A1", "Fashion fuchsia"); +Color.addToMap("#E5AA70", "Fawn"); +Color.addToMap("#4D5D53", "Feldgrau"); +Color.addToMap("#4F7942", "Fern green"); +Color.addToMap("#FF2800", "Ferrari Red"); +Color.addToMap("#6C541E", "Field drab"); +Color.addToMap("#B22222", "Firebrick"); +Color.addToMap("#CE2029", "Fire engine red"); +Color.addToMap("#E25822", "Flame"); +Color.addToMap("#FC8EAC", "Flamingo pink"); +Color.addToMap("#F7E98E", "Flavescent"); +Color.addToMap("#EEDC82", "Flax"); +Color.addToMap("#A2006D", "Flirt"); +Color.addToMap("#FFFAF0", "Floral white"); +Color.addToMap("#FFBF00", "Fluorescent orange"); +Color.addToMap("#FF1493", "Fluorescent pink"); +Color.addToMap("#FF004F", "Folly"); +Color.addToMap("#014421", "Forest green"); +Color.addToMap("#228B22", "Forest green (web)"); +Color.addToMap("#856D4D", "French bistre"); +Color.addToMap("#0072BB", "French blue"); +Color.addToMap("#FD3F92", "French fuchsia"); +Color.addToMap("#86608E", "French lilac"); +Color.addToMap("#9EFD38", "French lime"); +Color.addToMap("#FD6C9E", "French pink"); +Color.addToMap("#4E1609", "French puce"); +Color.addToMap("#C72C48", "French raspberry"); +Color.addToMap("#F64A8A", "French rose"); +Color.addToMap("#77B5FE", "French sky blue"); +Color.addToMap("#8806CE", "French violet"); +Color.addToMap("#AC1E44", "French wine"); +Color.addToMap("#A6E7FF", "Fresh Air"); +Color.addToMap("#FF77FF", "Fuchsia pink"); +Color.addToMap("#CC397B", "Fuchsia purple"); +Color.addToMap("#C74375", "Fuchsia rose"); +Color.addToMap("#E48400", "Fulvous"); +Color.addToMap("#CC6666", "Fuzzy Wuzzy"); +Color.addToMap("#DCDCDC", "Gainsboro"); +Color.addToMap("#E49B0F", "Gamboge"); +Color.addToMap("#007F66", "Generic viridian"); +Color.addToMap("#F8F8FF", "Ghost white"); +Color.addToMap("#FE5A1D", "Giants orange"); +Color.addToMap("#B06500", "Ginger"); +Color.addToMap("#6082B6", "Glaucous"); +Color.addToMap("#E6E8FA", "Glitter"); +Color.addToMap("#00AB66", "GO green"); +Color.addToMap("#D4AF37", "Gold (metallic)"); +Color.addToMap("#FFD700", "Gold (web) (Golden)"); +Color.addToMap("#85754E", "Gold Fusion"); +Color.addToMap("#996515", "Golden brown"); +Color.addToMap("#FCC200", "Golden poppy"); +Color.addToMap("#FFDF00", "Golden yellow"); +Color.addToMap("#DAA520", "Goldenrod"); +Color.addToMap("#A8E4A0", "Granny Smith Apple"); +Color.addToMap("#6F2DA8", "Grape"); +Color.addToMap("#808080", "Gray"); +Color.addToMap("#BEBEBE", "Gray (X11 gray)"); +Color.addToMap("#465945", "Gray-asparagus"); +Color.addToMap("#1CAC78", "Green (Crayola)"); +Color.addToMap("#008000", "Green"); +Color.addToMap("#00A877", "Green (Munsell)"); +Color.addToMap("#009F6B", "Green (NCS)"); +Color.addToMap("#00A550", "Green (pigment)"); +Color.addToMap("#66B032", "Green (RYB)"); +Color.addToMap("#ADFF2F", "Green-yellow"); +Color.addToMap("#A99A86", "Grullo"); +Color.addToMap("#663854", "Halaya ube"); +Color.addToMap("#446CCF", "Han blue"); +Color.addToMap("#5218FA", "Han purple"); +Color.addToMap("#E9D66B", "Hansa yellow"); +Color.addToMap("#3FFF00", "Harlequin"); +Color.addToMap("#C90016", "Harvard crimson"); +Color.addToMap("#DA9100", "Harvest gold"); +Color.addToMap("#DF73FF", "Heliotrope"); +Color.addToMap("#AA98A9", "Heliotrope gray"); +Color.addToMap("#F0FFF0", "Honeydew"); +Color.addToMap("#006DB0", "Honolulu blue"); +Color.addToMap("#49796B", "Hooker's green"); +Color.addToMap("#FF1DCE", "Hot magenta"); +Color.addToMap("#FF69B4", "Hot pink"); +Color.addToMap("#71A6D2", "Iceberg"); +Color.addToMap("#FCF75E", "Icterine"); +Color.addToMap("#319177", "Illuminating Emerald"); +Color.addToMap("#602F6B", "Imperial"); +Color.addToMap("#002395", "Imperial blue"); +Color.addToMap("#66023C", "Imperial purple"); +Color.addToMap("#ED2939", "Imperial red"); +Color.addToMap("#B2EC5D", "Inchworm"); +Color.addToMap("#4C516D", "Independence"); +Color.addToMap("#138808", "India green"); +Color.addToMap("#CD5C5C", "Indian red"); +Color.addToMap("#E3A857", "Indian yellow"); +Color.addToMap("#4B0082", "Indigo"); +Color.addToMap("#002FA7", "International Klein Blue"); +Color.addToMap("#FF4F00", "International orange (aerospace)"); +Color.addToMap("#BA160C", "International orange (engineering)"); +Color.addToMap("#C0362C", "International orange (Golden Gate Bridge)"); +Color.addToMap("#5A4FCF", "Iris"); +Color.addToMap("#F4F0EC", "Isabelline"); +Color.addToMap("#009000", "Islamic green"); +Color.addToMap("#B2FFFF", "Italian sky blue"); +Color.addToMap("#FFFFF0", "Ivory"); +Color.addToMap("#00A86B", "Jade"); +Color.addToMap("#9D2933", "Japanese carmine"); +Color.addToMap("#264348", "Japanese indigo"); +Color.addToMap("#5B3256", "Japanese violet"); +Color.addToMap("#D73B3E", "Jasper"); +Color.addToMap("#A50B5E", "Jazzberry jam"); +Color.addToMap("#DA614E", "Jelly Bean"); +Color.addToMap("#343434", "Jet"); +Color.addToMap("#F4CA16", "Jonquil"); +Color.addToMap("#8AB9F1", "Jordy blue"); +Color.addToMap("#BDDA57", "June bud"); +Color.addToMap("#29AB87", "Jungle green"); +Color.addToMap("#4CBB17", "Kelly green"); +Color.addToMap("#7C1C05", "Kenyan copper"); +Color.addToMap("#3AB09E", "Keppel"); +Color.addToMap("#C3B091", "Khaki"); +Color.addToMap("#E79FC4", "Kobi"); +Color.addToMap("#354230", "Kombu green"); +Color.addToMap("#E8000D", "KU Crimson"); +Color.addToMap("#087830", "La Salle Green"); +Color.addToMap("#D6CADD", "Languid lavender"); +Color.addToMap("#26619C", "Lapis lazuli"); +Color.addToMap("#A9BA9D", "Laurel green"); +Color.addToMap("#CF1020", "Lava"); +Color.addToMap("#B57EDC", "Lavender (floral)"); +Color.addToMap("#CCCCFF", "Lavender blue"); +Color.addToMap("#FFF0F5", "Lavender blush"); +Color.addToMap("#C4C3D0", "Lavender gray"); +Color.addToMap("#9457EB", "Lavender indigo"); +Color.addToMap("#EE82EE", "Lavender magenta"); +Color.addToMap("#E6E6FA", "Lavender mist"); +Color.addToMap("#FBAED2", "Lavender pink"); +Color.addToMap("#967BB6", "Lavender purple"); +Color.addToMap("#FBA0E3", "Lavender rose"); +Color.addToMap("#7CFC00", "Lawn green"); +Color.addToMap("#FFF700", "Lemon"); +Color.addToMap("#FFFACD", "Lemon chiffon"); +Color.addToMap("#CCA01D", "Lemon curry"); +Color.addToMap("#FDFF00", "Lemon glacier"); +Color.addToMap("#E3FF00", "Lemon lime"); +Color.addToMap("#F6EABE", "Lemon meringue"); +Color.addToMap("#FFF44F", "Lemon yellow"); +Color.addToMap("#1A1110", "Licorice"); +Color.addToMap("#545AA7", "Liberty"); +Color.addToMap("#FDD5B1", "Light apricot"); +Color.addToMap("#ADD8E6", "Light blue"); +Color.addToMap("#B5651D", "Light brown"); +Color.addToMap("#E66771", "Light carmine pink"); +Color.addToMap("#F08080", "Light coral"); +Color.addToMap("#93CCEA", "Light cornflower blue"); +Color.addToMap("#F56991", "Light crimson"); +Color.addToMap("#E0FFFF", "Light cyan"); +Color.addToMap("#FF5CCD", "Light deep pink"); +Color.addToMap("#C8AD7F", "Light French beige"); +Color.addToMap("#F984EF", "Light fuchsia pink"); +Color.addToMap("#FAFAD2", "Light goldenrod yellow"); +Color.addToMap("#D3D3D3", "Light gray"); +Color.addToMap("#90EE90", "Light green"); +Color.addToMap("#FFB3DE", "Light hot pink"); +Color.addToMap("#F0E68C", "Light khaki"); +Color.addToMap("#D39BCB", "Light medium orchid"); +Color.addToMap("#ADDFAD", "Light moss green"); +Color.addToMap("#E6A8D7", "Light orchid"); +Color.addToMap("#B19CD9", "Light pastel purple"); +Color.addToMap("#FFB6C1", "Light pink"); +Color.addToMap("#E97451", "Light red ochre"); +Color.addToMap("#FFA07A", "Light salmon"); +Color.addToMap("#FF9999", "Light salmon pink"); +Color.addToMap("#20B2AA", "Light sea green"); +Color.addToMap("#87CEFA", "Light sky blue"); +Color.addToMap("#778899", "Light slate gray"); +Color.addToMap("#B0C4DE", "Light steel blue"); +Color.addToMap("#B38B6D", "Light taupe"); +Color.addToMap("#FFFFE0", "Light yellow"); +Color.addToMap("#C8A2C8", "Lilac"); +Color.addToMap("#BFFF00", "Lime"); +Color.addToMap("#32CD32", "Lime green"); +Color.addToMap("#9DC209", "Limerick"); +Color.addToMap("#195905", "Lincoln green"); +Color.addToMap("#FAF0E6", "Linen"); +Color.addToMap("#6CA0DC", "Little boy blue"); +Color.addToMap("#B86D29", "Liver (dogs)"); +Color.addToMap("#6C2E1F", "Liver"); +Color.addToMap("#987456", "Liver chestnut"); +Color.addToMap("#FFE4CD", "Lumber"); +Color.addToMap("#E62020", "Lust"); +Color.addToMap("#FF00FF", "Magenta"); +Color.addToMap("#CA1F7B", "Magenta (dye)"); +Color.addToMap("#D0417E", "Magenta (Pantone)"); +Color.addToMap("#FF0090", "Magenta (process)"); +Color.addToMap("#9F4576", "Magenta haze"); +Color.addToMap("#AAF0D1", "Magic mint"); +Color.addToMap("#F8F4FF", "Magnolia"); +Color.addToMap("#C04000", "Mahogany"); +Color.addToMap("#6050DC", "Majorelle Blue"); +Color.addToMap("#0BDA51", "Malachite"); +Color.addToMap("#979AAA", "Manatee"); +Color.addToMap("#FF8243", "Mango Tango"); +Color.addToMap("#74C365", "Mantis"); +Color.addToMap("#880085", "Mardi Gras"); +Color.addToMap("#800000", "Maroon"); +Color.addToMap("#E0B0FF", "Mauve"); +Color.addToMap("#915F6D", "Mauve taupe"); +Color.addToMap("#EF98AA", "Mauvelous"); +Color.addToMap("#4C9141", "May green"); +Color.addToMap("#73C2FB", "Maya blue"); +Color.addToMap("#E5B73B", "Meat brown"); +Color.addToMap("#66DDAA", "Medium aquamarine"); +Color.addToMap("#0000CD", "Medium blue"); +Color.addToMap("#E2062C", "Medium candy apple red"); +Color.addToMap("#AF4035", "Medium carmine"); +Color.addToMap("#035096", "Medium electric blue"); +Color.addToMap("#1C352D", "Medium jungle green"); +Color.addToMap("#BA55D3", "Medium orchid"); +Color.addToMap("#9370DB", "Medium purple"); +Color.addToMap("#BB3385", "Medium red-violet"); +Color.addToMap("#AA4069", "Medium ruby"); +Color.addToMap("#3CB371", "Medium sea green"); +Color.addToMap("#80DAEB", "Medium sky blue"); +Color.addToMap("#7B68EE", "Medium slate blue"); +Color.addToMap("#C9DC87", "Medium spring bud"); +Color.addToMap("#00FA9A", "Medium spring green"); +Color.addToMap("#674C47", "Medium taupe"); +Color.addToMap("#48D1CC", "Medium turquoise"); +Color.addToMap("#D9603B", "Pale vermilion"); +Color.addToMap("#F8B878", "Mellow apricot"); +Color.addToMap("#F8DE7E", "Mellow yellow"); +Color.addToMap("#FDBCB4", "Melon"); +Color.addToMap("#0A7E8C", "Metallic Seaweed"); +Color.addToMap("#9C7C38", "Metallic Sunburst"); +Color.addToMap("#E4007C", "Mexican pink"); +Color.addToMap("#191970", "Midnight blue"); +Color.addToMap("#004953", "Midnight green (eagle green)"); +Color.addToMap("#FFC40C", "Mikado yellow"); +Color.addToMap("#E3F988", "Mindaro"); +Color.addToMap("#3EB489", "Mint"); +Color.addToMap("#F5FFFA", "Mint cream"); +Color.addToMap("#98FF98", "Mint green"); +Color.addToMap("#FFE4E1", "Misty rose"); +Color.addToMap("#73A9C2", "Moonstone blue"); +Color.addToMap("#AE0C00", "Mordant red 19"); +Color.addToMap("#8A9A5B", "Moss green"); +Color.addToMap("#30BA8F", "Mountain Meadow"); +Color.addToMap("#997A8D", "Mountbatten pink"); +Color.addToMap("#18453B", "MSU Green"); +Color.addToMap("#306030", "Mughal green"); +Color.addToMap("#C54B8C", "Mulberry"); +Color.addToMap("#FFDB58", "Mustard"); +Color.addToMap("#317873", "Myrtle green"); +Color.addToMap("#F6ADC6", "Nadeshiko pink"); +Color.addToMap("#2A8000", "Napier green"); +Color.addToMap("#FFDEAD", "Navajo white"); +Color.addToMap("#000080", "Navy"); +Color.addToMap("#FFA343", "Neon Carrot"); +Color.addToMap("#FE4164", "Neon fuchsia"); +Color.addToMap("#39FF14", "Neon green"); +Color.addToMap("#214FC6", "New Car"); +Color.addToMap("#D7837F", "New York pink"); +Color.addToMap("#A4DDED", "Non-photo blue"); +Color.addToMap("#059033", "North Texas Green"); +Color.addToMap("#E9FFDB", "Nyanza"); +Color.addToMap("#0077BE", "Ocean Boat Blue"); +Color.addToMap("#CC7722", "Ochre"); +Color.addToMap("#43302E", "Old burgundy"); +Color.addToMap("#CFB53B", "Old gold"); +Color.addToMap("#FDF5E6", "Old lace"); +Color.addToMap("#796878", "Old lavender"); +Color.addToMap("#673147", "Old mauve"); +Color.addToMap("#867E36", "Old moss green"); +Color.addToMap("#C08081", "Old rose"); +Color.addToMap("#808000", "Olive"); +Color.addToMap("#6B8E23", "Olive Drab #3"); +Color.addToMap("#3C341F", "Olive Drab #7"); +Color.addToMap("#9AB973", "Olivine"); +Color.addToMap("#353839", "Onyx"); +Color.addToMap("#B784A7", "Opera mauve"); +Color.addToMap("#FF7F00", "Orange"); +Color.addToMap("#FF7538", "Orange (Crayola)"); +Color.addToMap("#FF5800", "Orange (Pantone)"); +Color.addToMap("#FB9902", "Orange (RYB)"); +Color.addToMap("#FFA500", "Orange (web)"); +Color.addToMap("#FF9F00", "Orange peel"); +Color.addToMap("#FF4500", "Orange-red"); +Color.addToMap("#DA70D6", "Orchid"); +Color.addToMap("#F2BDCD", "Orchid pink"); +Color.addToMap("#FB4F14", "Orioles orange"); +Color.addToMap("#414A4C", "Outer Space"); +Color.addToMap("#FF6E4A", "Outrageous Orange"); +Color.addToMap("#002147", "Oxford Blue"); +Color.addToMap("#990000", "Crimson Red"); +Color.addToMap("#006600", "Pakistan green"); +Color.addToMap("#273BE2", "Palatinate blue"); +Color.addToMap("#682860", "Palatinate purple"); +Color.addToMap("#BCD4E6", "Pale aqua"); +Color.addToMap("#AFEEEE", "Pale blue"); +Color.addToMap("#987654", "Pale brown"); +Color.addToMap("#9BC4E2", "Pale cerulean"); +Color.addToMap("#DDADAF", "Pale chestnut"); +Color.addToMap("#DA8A67", "Pale copper"); +Color.addToMap("#ABCDEF", "Pale cornflower blue"); +Color.addToMap("#E6BE8A", "Pale gold"); +Color.addToMap("#EEE8AA", "Pale goldenrod"); +Color.addToMap("#98FB98", "Pale green"); +Color.addToMap("#DCD0FF", "Pale lavender"); +Color.addToMap("#F984E5", "Pale magenta"); +Color.addToMap("#FADADD", "Pale pink"); +Color.addToMap("#DDA0DD", "Pale plum"); +Color.addToMap("#DB7093", "Pale red-violet"); +Color.addToMap("#96DED1", "Pale robin egg blue"); +Color.addToMap("#C9C0BB", "Pale silver"); +Color.addToMap("#ECEBBD", "Pale spring bud"); +Color.addToMap("#BC987E", "Pale taupe"); +Color.addToMap("#78184A", "Pansy purple"); +Color.addToMap("#009B7D", "Paolo Veronese green"); +Color.addToMap("#FFEFD5", "Papaya whip"); +Color.addToMap("#E63E62", "Paradise pink"); +Color.addToMap("#AEC6CF", "Pastel blue"); +Color.addToMap("#836953", "Pastel brown"); +Color.addToMap("#CFCFC4", "Pastel gray"); +Color.addToMap("#77DD77", "Pastel green"); +Color.addToMap("#F49AC2", "Pastel magenta"); +Color.addToMap("#FFB347", "Pastel orange"); +Color.addToMap("#DEA5A4", "Pastel pink"); +Color.addToMap("#B39EB5", "Pastel purple"); +Color.addToMap("#FF6961", "Pastel red"); +Color.addToMap("#CB99C9", "Pastel violet"); +Color.addToMap("#FDFD96", "Pastel yellow"); +Color.addToMap("#FFE5B4", "Peach"); +Color.addToMap("#FFCC99", "Peach-orange"); +Color.addToMap("#FFDAB9", "Peach puff"); +Color.addToMap("#FADFAD", "Peach-yellow"); +Color.addToMap("#D1E231", "Pear"); +Color.addToMap("#EAE0C8", "Pearl"); +Color.addToMap("#88D8C0", "Pearl Aqua"); +Color.addToMap("#B768A2", "Pearly purple"); +Color.addToMap("#E6E200", "Peridot"); +Color.addToMap("#1C39BB", "Persian blue"); +Color.addToMap("#00A693", "Persian green"); +Color.addToMap("#32127A", "Persian indigo"); +Color.addToMap("#D99058", "Persian orange"); +Color.addToMap("#F77FBE", "Persian pink"); +Color.addToMap("#701C1C", "Persian plum"); +Color.addToMap("#CC3333", "Persian red"); +Color.addToMap("#FE28A2", "Persian rose"); +Color.addToMap("#EC5800", "Persimmon"); +Color.addToMap("#CD853F", "Peru"); +Color.addToMap("#000F89", "Phthalo blue"); +Color.addToMap("#123524", "Phthalo green"); +Color.addToMap("#45B1E8", "Picton blue"); +Color.addToMap("#C30B4E", "Pictorial carmine"); +Color.addToMap("#FDDDE6", "Piggy pink"); +Color.addToMap("#01796F", "Pine green"); +Color.addToMap("#FFC0CB", "Pink"); +Color.addToMap("#D74894", "Pink (Pantone)"); +Color.addToMap("#FFDDF4", "Pink lace"); +Color.addToMap("#D8B2D1", "Pink lavender"); +Color.addToMap("#FF9966", "Pink-orange"); +Color.addToMap("#E7ACCF", "Pink pearl"); +Color.addToMap("#F78FA7", "Pink Sherbet"); +Color.addToMap("#93C572", "Pistachio"); +Color.addToMap("#E5E4E2", "Platinum"); +Color.addToMap("#8E4585", "Plum"); +Color.addToMap("#BE4F62", "Popstar"); +Color.addToMap("#FF5A36", "Portland Orange"); +Color.addToMap("#B0E0E6", "Powder blue"); +Color.addToMap("#FF8F00", "Princeton orange"); +Color.addToMap("#003153", "Prussian blue"); +Color.addToMap("#DF00FF", "Psychedelic purple"); +Color.addToMap("#CC8899", "Puce"); +Color.addToMap("#644117", "Pullman Brown (UPS Brown)"); +Color.addToMap("#FF7518", "Pumpkin"); +Color.addToMap("#800080", "Deep purple"); +Color.addToMap("#9F00C5", "Purple (Munsell)"); +Color.addToMap("#A020F0", "Purple"); +Color.addToMap("#69359C", "Purple Heart"); +Color.addToMap("#9678B6", "Purple mountain majesty"); +Color.addToMap("#4E5180", "Purple navy"); +Color.addToMap("#FE4EDA", "Purple pizzazz"); +Color.addToMap("#50404D", "Purple taupe"); +Color.addToMap("#9A4EAE", "Purpureus"); +Color.addToMap("#51484F", "Quartz"); +Color.addToMap("#436B95", "Queen blue"); +Color.addToMap("#E8CCD7", "Queen pink"); +Color.addToMap("#8E3A59", "Quinacridone magenta"); +Color.addToMap("#FF355E", "Radical Red"); +Color.addToMap("#FBAB60", "Rajah"); +Color.addToMap("#E30B5D", "Raspberry"); +Color.addToMap("#E25098", "Raspberry pink"); +Color.addToMap("#B3446C", "Raspberry rose"); +Color.addToMap("#826644", "Raw umber"); +Color.addToMap("#FF33CC", "Razzle dazzle rose"); +Color.addToMap("#E3256B", "Razzmatazz"); +Color.addToMap("#8D4E85", "Razzmic Berry"); +Color.addToMap("#FF0000", "Red"); +Color.addToMap("#EE204D", "Red (Crayola)"); +Color.addToMap("#F2003C", "Red (Munsell)"); +Color.addToMap("#C40233", "Red (NCS)"); +Color.addToMap("#ED1C24", "Red (pigment)"); +Color.addToMap("#FE2712", "Red (RYB)"); +Color.addToMap("#A52A2A", "Red-brown"); +Color.addToMap("#860111", "Red devil"); +Color.addToMap("#FF5349", "Red-orange"); +Color.addToMap("#E40078", "Red-purple"); +Color.addToMap("#C71585", "Red-violet"); +Color.addToMap("#A45A52", "Redwood"); +Color.addToMap("#522D80", "Regalia"); +Color.addToMap("#002387", "Resolution blue"); +Color.addToMap("#777696", "Rhythm"); +Color.addToMap("#004040", "Rich black"); +Color.addToMap("#F1A7FE", "Rich brilliant lavender"); +Color.addToMap("#D70040", "Rich carmine"); +Color.addToMap("#0892D0", "Rich electric blue"); +Color.addToMap("#A76BCF", "Rich lavender"); +Color.addToMap("#B666D2", "Rich lilac"); +Color.addToMap("#B03060", "Rich maroon"); +Color.addToMap("#444C38", "Rifle green"); +Color.addToMap("#704241", "Deep Roast coffee"); +Color.addToMap("#00CCCC", "Robin egg blue"); +Color.addToMap("#8A7F80", "Rocket metallic"); +Color.addToMap("#838996", "Roman silver"); +Color.addToMap("#F9429E", "Rose bonbon"); +Color.addToMap("#674846", "Rose ebony"); +Color.addToMap("#B76E79", "Rose gold"); +Color.addToMap("#FF66CC", "Rose pink"); +Color.addToMap("#C21E56", "Rose red"); +Color.addToMap("#905D5D", "Rose taupe"); +Color.addToMap("#AB4E52", "Rose vale"); +Color.addToMap("#65000B", "Rosewood"); +Color.addToMap("#D40000", "Rosso corsa"); +Color.addToMap("#BC8F8F", "Rosy brown"); +Color.addToMap("#0038A8", "Royal azure"); +Color.addToMap("#002366", "Royal blue"); +Color.addToMap("#4169E1", "Royal light blue"); +Color.addToMap("#CA2C92", "Royal fuchsia"); +Color.addToMap("#7851A9", "Royal purple"); +Color.addToMap("#FADA5E", "Royal yellow"); +Color.addToMap("#CE4676", "Ruber"); +Color.addToMap("#D10056", "Rubine red"); +Color.addToMap("#E0115F", "Ruby"); +Color.addToMap("#9B111E", "Ruby red"); +Color.addToMap("#FF0028", "Ruddy"); +Color.addToMap("#BB6528", "Ruddy brown"); +Color.addToMap("#E18E96", "Ruddy pink"); +Color.addToMap("#A81C07", "Rufous"); +Color.addToMap("#80461B", "Russet"); +Color.addToMap("#679267", "Russian green"); +Color.addToMap("#32174D", "Russian violet"); +Color.addToMap("#B7410E", "Rust"); +Color.addToMap("#DA2C43", "Rusty red"); +Color.addToMap("#8B4513", "Saddle brown"); +Color.addToMap("#FF6700", "Safety orange (blaze orange)"); +Color.addToMap("#EED202", "Safety yellow"); +Color.addToMap("#F4C430", "Saffron"); +Color.addToMap("#BCB88A", "Sage"); +Color.addToMap("#23297A", "St. Patrick's blue"); +Color.addToMap("#FA8072", "Salmon"); +Color.addToMap("#FF91A4", "Salmon pink"); +Color.addToMap("#C2B280", "Sand"); +Color.addToMap("#ECD540", "Sandstorm"); +Color.addToMap("#F4A460", "Sandy brown"); +Color.addToMap("#92000A", "Sangria"); +Color.addToMap("#507D2A", "Sap green"); +Color.addToMap("#0F52BA", "Sapphire"); +Color.addToMap("#0067A5", "Sapphire blue"); +Color.addToMap("#CBA135", "Satin sheen gold"); +Color.addToMap("#FF2400", "Scarlet"); +Color.addToMap("#FFD800", "School bus yellow"); +Color.addToMap("#76FF7A", "Screamin' Green"); +Color.addToMap("#006994", "Sea blue"); +Color.addToMap("#2E8B57", "Sea green"); +Color.addToMap("#321414", "Seal brown"); +Color.addToMap("#FFF5EE", "Seashell"); +Color.addToMap("#FFBA00", "Selective yellow"); +Color.addToMap("#704214", "Sepia"); +Color.addToMap("#8A795D", "Shadow"); +Color.addToMap("#778BA5", "Shadow blue"); +Color.addToMap("#FFCFF1", "Shampoo"); +Color.addToMap("#009E60", "Shamrock green"); +Color.addToMap("#8FD400", "Sheen Green"); +Color.addToMap("#D98695", "Shimmering Blush"); +Color.addToMap("#FC0FC0", "Shocking pink"); +Color.addToMap("#882D17", "Sienna"); +Color.addToMap("#C0C0C0", "Silver"); +Color.addToMap("#ACACAC", "Silver chalice"); +Color.addToMap("#5D89BA", "Silver Lake blue"); +Color.addToMap("#C4AEAD", "Silver pink"); +Color.addToMap("#BFC1C2", "Silver sand"); +Color.addToMap("#CB410B", "Sinopia"); +Color.addToMap("#007474", "Skobeloff"); +Color.addToMap("#87CEEB", "Sky blue"); +Color.addToMap("#CF71AF", "Sky magenta"); +Color.addToMap("#6A5ACD", "Slate blue"); +Color.addToMap("#708090", "Slate gray"); +Color.addToMap("#C84186", "Smitten"); +Color.addToMap("#738276", "Smoke"); +Color.addToMap("#933D41", "Smokey topaz"); +Color.addToMap("#100C08", "Smoky black"); +Color.addToMap("#FFFAFA", "Snow"); +Color.addToMap("#CEC8EF", "Soap"); +Color.addToMap("#893843", "Solid pink"); +Color.addToMap("#757575", "Sonic silver"); +Color.addToMap("#9E1316", "Spartan Crimson"); +Color.addToMap("#1D2951", "Space cadet"); +Color.addToMap("#807532", "Spanish bistre"); +Color.addToMap("#0070B8", "Spanish blue"); +Color.addToMap("#D10047", "Spanish carmine"); +Color.addToMap("#E51A4C", "Spanish crimson"); +Color.addToMap("#989898", "Spanish gray"); +Color.addToMap("#009150", "Spanish green"); +Color.addToMap("#E86100", "Spanish orange"); +Color.addToMap("#F7BFBE", "Spanish pink"); +Color.addToMap("#E60026", "Spanish red"); +Color.addToMap("#4C2882", "Spanish violet"); +Color.addToMap("#007F5C", "Spanish viridian"); +Color.addToMap("#0FC0FC", "Spiro Disco Ball"); +Color.addToMap("#A7FC00", "Spring bud"); +Color.addToMap("#00FF7F", "Spring green"); +Color.addToMap("#007BB8", "Star command blue"); +Color.addToMap("#4682B4", "Steel blue"); +Color.addToMap("#CC33CC", "Steel pink"); +Color.addToMap("#4F666A", "Stormcloud"); +Color.addToMap("#E4D96F", "Straw"); +Color.addToMap("#FC5A8D", "Strawberry"); +Color.addToMap("#FFCC33", "Sunglow"); +Color.addToMap("#E3AB57", "Sunray"); +Color.addToMap("#FAD6A5", "Sunset"); +Color.addToMap("#FD5E53", "Sunset orange"); +Color.addToMap("#CF6BA9", "Super pink"); +Color.addToMap("#D2B48C", "Tan"); +Color.addToMap("#F94D00", "Tangelo"); +Color.addToMap("#F28500", "Tangerine"); +Color.addToMap("#FFCC00", "Tangerine yellow"); +Color.addToMap("#483C32", "Dark Grayish Brown"); +Color.addToMap("#8B8589", "Taupe gray"); +Color.addToMap("#D0F0C0", "Tea green"); +Color.addToMap("#F4C2C2", "Tea rose"); +Color.addToMap("#008080", "Teal"); +Color.addToMap("#367588", "Teal blue"); +Color.addToMap("#99E6B3", "Teal deer"); +Color.addToMap("#00827F", "Teal green"); +Color.addToMap("#CF3476", "Telemagenta"); +Color.addToMap("#CD5700", "Tenne"); +Color.addToMap("#E2725B", "Terra cotta"); +Color.addToMap("#D8BFD8", "Thistle"); +Color.addToMap("#DE6FA1", "Thulian pink"); +Color.addToMap("#FC89AC", "Tickle Me Pink"); +Color.addToMap("#0ABAB5", "Tiffany Blue"); +Color.addToMap("#E08D3C", "Tiger's eye"); +Color.addToMap("#DBD7D2", "Timberwolf"); +Color.addToMap("#EEE600", "Titanium yellow"); +Color.addToMap("#FF6347", "Tomato"); +Color.addToMap("#746CC0", "Toolbox"); +Color.addToMap("#42B72A", "Toothpaste advert green"); +Color.addToMap("#FFC87C", "Topaz"); +Color.addToMap("#FD0E35", "Tractor red"); +Color.addToMap("#00755E", "Tropical rain forest"); +Color.addToMap("#0073CF", "True Blue"); +Color.addToMap("#417DC1", "Tufts Blue"); +Color.addToMap("#FF878D", "Tulip"); +Color.addToMap("#DEAA88", "Tumbleweed"); +Color.addToMap("#B57281", "Turkish rose"); +Color.addToMap("#40E0D0", "Turquoise"); +Color.addToMap("#00FFEF", "Turquoise blue"); +Color.addToMap("#A0D6B4", "Turquoise green"); +Color.addToMap("#7C4848", "Tuscan red"); +Color.addToMap("#C09999", "Tuscany"); +Color.addToMap("#8A496B", "Twilight lavender"); +Color.addToMap("#0033AA", "UA blue"); +Color.addToMap("#D9004C", "UA red"); +Color.addToMap("#8878C3", "Ube"); +Color.addToMap("#536895", "UCLA Blue"); +Color.addToMap("#FFB300", "UCLA Gold"); +Color.addToMap("#3CD070", "UFO Green"); +Color.addToMap("#120A8F", "Ultramarine"); +Color.addToMap("#4166F5", "Ultramarine blue"); +Color.addToMap("#FF6FFF", "Ultra pink"); +Color.addToMap("#635147", "Umber"); +Color.addToMap("#FFDDCA", "Unbleached silk"); +Color.addToMap("#5B92E5", "United Nations blue"); +Color.addToMap("#B78727", "University of California Gold"); +Color.addToMap("#FFFF66", "Unmellow yellow"); +Color.addToMap("#7B1113", "UP Maroon"); +Color.addToMap("#AE2029", "Upsdell red"); +Color.addToMap("#E1AD21", "Urobilin"); +Color.addToMap("#004F98", "USAFA blue"); +Color.addToMap("#F77F00", "University of Tennessee Orange"); +Color.addToMap("#D3003F", "Utah Crimson"); +Color.addToMap("#F3E5AB", "Vanilla"); +Color.addToMap("#F38FA9", "Vanilla ice"); +Color.addToMap("#C5B358", "Vegas gold"); +Color.addToMap("#C80815", "Venetian red"); +Color.addToMap("#43B3AE", "Verdigris"); +Color.addToMap("#E34234", "Medium vermilion"); +Color.addToMap("#D9381E", "Vermilion"); +Color.addToMap("#8F00FF", "Violet"); +Color.addToMap("#7F00FF", "Violet (color wheel)"); +Color.addToMap("#8601AF", "Violet (RYB)"); +Color.addToMap("#324AB2", "Violet-blue"); +Color.addToMap("#F75394", "Violet-red"); +Color.addToMap("#40826D", "Viridian"); +Color.addToMap("#009698", "Viridian green"); +Color.addToMap("#922724", "Vivid auburn"); +Color.addToMap("#9F1D35", "Vivid burgundy"); +Color.addToMap("#DA1D81", "Vivid cerise"); +Color.addToMap("#CC00FF", "Vivid orchid"); +Color.addToMap("#00CCFF", "Vivid sky blue"); +Color.addToMap("#FFA089", "Vivid tangerine"); +Color.addToMap("#9F00FF", "Vivid violet"); +Color.addToMap("#004242", "Warm black"); +Color.addToMap("#A4F4F9", "Waterspout"); +Color.addToMap("#645452", "Wenge"); +Color.addToMap("#F5DEB3", "Wheat"); +Color.addToMap("#FFFFFF", "White"); +Color.addToMap("#F5F5F5", "White smoke"); +Color.addToMap("#A2ADD0", "Wild blue yonder"); +Color.addToMap("#D470A2", "Wild orchid"); +Color.addToMap("#FF43A4", "Wild Strawberry"); +Color.addToMap("#FC6C85", "Wild watermelon"); +Color.addToMap("#FD5800", "Willpower orange"); +Color.addToMap("#A75502", "Windsor tan"); +Color.addToMap("#722F37", "Wine"); +Color.addToMap("#C9A0DC", "Wisteria"); +Color.addToMap("#C19A6B", "Wood brown"); +Color.addToMap("#738678", "Xanadu"); +Color.addToMap("#0F4D92", "Yale Blue"); +Color.addToMap("#1C2841", "Yankees blue"); +Color.addToMap("#FCE883", "Yellow (Crayola)"); +Color.addToMap("#EFCC00", "Yellow (Munsell)"); +Color.addToMap("#FEDF00", "Yellow (Pantone)"); +Color.addToMap("#FEFE33", "Yellow"); +Color.addToMap("#9ACD32", "Yellow Green"); +Color.addToMap("#FFAE42", "Yellow Orange"); +Color.addToMap("#FFF000", "Yellow rose"); +Color.addToMap("#0014A8", "Zaffre"); +Color.addToMap("#2C1608", "Zinnwaldite brown"); Color.addToMap("#39A78E", "Zomp"); \ No newline at end of file diff --git a/src/Commands.js b/src/Commands.js index 4d0aa97..eb7ad0a 100644 --- a/src/Commands.js +++ b/src/Commands.js @@ -1,1702 +1,1737 @@ -const MPPClient = require("./MPPClient"); -const Color = require('./Color'); -const crypto = require('crypto'); -const fs = require('fs'); - -module.exports = (bot) => { - bot.addCommand = async (cmd, minargs, func, hidden) => { - if (typeof cmd !== 'object') cmd = [cmd]; - bot.commands.set(cmd, { - cmd: cmd, - minargs: typeof minargs == 'number' ? minargs : 0, - func: typeof func == 'function' ? func : () => {}, - hidden: typeof hidden == 'boolean' ? hidden : false - }); - } - - var fish = ["Angelfish", "Arapaima", "Arowana", "Barbel Steed", "Barred Knifejaw", "Bitterling", "Black Bass", "Blowfish", "Blue Marlin", "Bluegill", "Brook Trout", "Butterflyfish", "Can", "Carp", "Catfish", "Char", "Cherry Salmon", "Clownfish", "Coelacanth", "Crawfish", "Crucian Carp", "Dab", "Dace", "Dorado", "Eel", "Football fish", "Freshwater Goby", "Frog", "Gar", "Giant Snakehead", "Giant Trevally", "Goldfish", "Guppy", "Hammerhead Shark", "Horse Mackerel", "Jellyfish", "Key", "Killifish", "King Salmon", "Koi", "Large Bass", "Loach", "Lobster", "Mitten Crab", "Moray Eel", "Napoleonfish", "Neon Tetra", "Nibble Fish", "Oarfish", "Ocean Sunfish", "Octopus", "Olive Flounder", "Pale Chub", "Pike", "Piranha", "Pond Smelt", "Popeyed Goldfish", "Puffer Fish", "Rainbow Trout", "Ray", "Red Snapper", "Ribbon Eel", "Saddled Bichir", "Salmon", "Saw Shark", "Sea Bass", "Sea Butterfly", "Seahorse", "Shark", "Small Bass", "Softshell Turtle", "Squid", "Stringfish", "Surgeonfish", "Sweetfish", "Tadpole", "Tuna", "Whale Shark", "Yellow Perch", "Zebra Turkeyfish"]; - var fish_without_images = ["Blowfish", "Brook Trout", "Butterflyfish", "Can", "Giant Trevally", "Key", "Large Bass", "Lobster", "Mitten Crab", "Moray Eel", "Napoleonfish", "Neon Tetra", "Nibble Fish", "Oarfish", "Pike", "Ray", "Ribbon Eel", "Saddled Bichir", "Saw Shark", "Small Bass", "Softshell Turtle", "Surgeonfish", "Tadpole", "Whale Shark"]; - var newfish = require("./newfish.json"); - var pokedex = require("./pokedex.json"); - var untakeable = ['bed', 'chair', 'couch', 'desk', 'dining table', 'fireplace', 'floor lamp', 'flower pot', 'food cart', 'garden', 'grand piano', 'lamp', 'lawn mower', 'mailbox', 'potted plant', 'refrigerator', 'sink', 'sofa', 'stairs', 'stool', 'table', 'television', 'toilet', 'tv', 'vase', 'wardrobe', 'window', 'workbench']; - - var sendChat = MPPClient.sendChat; - var blockHelpUntil = 0; - - var locations = ["sleep", "outside", "inside"] - - function underline(text) { - var result = ""; - for(var i = 0; i < text.length; i++) { - result += text[i]+"̲"; - } - return result; - } - - function listOff(arr) { - if(arr.length === 0) return "(none)"; - var map = {}; - map.__proto__.inc = function(key) { - if(key.indexOf("(") !== -1) - key = key.substr(0, key.indexOf("(") - 1); - if(typeof(this[key]) === "undefined") { - this[key] = 1; - } else { - this[key]++; - } - } - for(var i = 0; i < arr.length; i++) { - map.inc(arr[i]); - } - var count = 0; - for(var j in map) { - if(map.hasOwnProperty(j)) ++count; - } - var result = ""; - var i = 0; - for(var j in map) { - if(!map.hasOwnProperty(j)) continue; - if(i && i !== count - 1) result += ", "; - if(i && i === count - 1) result += " and "; - result += "◍"+j+" x"+map[j]; - ++i; - } - return result; - } - - function listArray(arr) { - var result = ""; - for(var i = 0; i < arr.length; i++) { - if(i && i !== arr.length - 1) result += ", "; - if(i && i === arr.length - 1) result += ", and "; - result += arr[i]; - } - return result; - } - - function startupSound() { - MPPClient.client.sendArray([{m: "n", t: Date.now()+MPPClient.client.serverTimeOffset, - n: [{n:"e6",v:0.1},{d:50, n:"c7",v:0.2}]}]); - } - - function rando(arr) { - if(!Array.isArray(arr)) arr = Array.from(arguments); - return arr[Math.floor(Math.random() * arr.length)]; - } - - function magicRando(arr) { - var result = ""; - for(var i = 0; i < 256; i++) { - result = arr[Math.floor(Math.random() * arr.length)]; - if(result.indexOf("(") !== -1) - result = result.substr(0, result.indexOf("(") - 1); - var md5 = crypto.createHash("md5"); - md5.update(result + "intermediaflatulencebuzzergiantroosterface"); - var hash = md5.digest(); - var random = hash.readUInt8(0) / 0xff + 0.5; - if(new Date().getDay() === 4) random += 0.25; - if(random > 1) random = 1; - if(Math.random() < random) { - break; - } - } - return result; - } - - function sanitize(string) { - const map = { - '&': '&', - '<': '<', - '>': '>', - '"': '"', - "'": ''', - "/": '/', - }; - const reg = /[&<>"'/]/ig; - return string.replace(reg, (match) => (map[match])); - } - - if(0) for(var i = 0; i < fish.length; i++) { - result = fish[i]; - if(result.indexOf("(") !== -1) - result = result.substr(0, result.indexOf("(") - 1); - var md5 = crypto.createHash("md5"); - md5.update(result + "intermediaflatulencebuzzergiantroosterface"); - var hash = md5.digest(); - var random = hash.readUInt8(0) / 0xff + 0.5; - if(random > 1) random = 1; - process.stdout.write(result+": "+random+". "); - } - - function kekklefruit_growth() { - var minute = 60 * 1000; - var ms = 1000 + Math.random() * 120 * minute; - setTimeout(function() { - if(Math.random() < 0.5) { - db.getFruits(function(num_fruits) { - db.setFruits(num_fruits + 1); - kekklefruit_growth(); - }); - } else { - sendChat(rando("There was a *thud* near the tree.", "Something thumped nearby.", "Did you hear a sort of whump sound?", "Did you hear a fruit landing on the ground or something?", "*plop* a kekklefruit just falls from the tree onto the ground.")); - db.put("look.outside.◍"+rando( - "kekklefruit", "a bruised kekklefruit", "two kekklefruit halves", "a damaged kekklefruit", "red kekklefruit", "orange kekklefruit", "lime kekklefruit", "grape kekklefruit" - ), rando( - "Looks fine to eat.", "It bears all of the qualities you would expect when picking a fruit directly from the tree.", "A priceless treasure from our beloved kekklefruit tree.", "It has no special markings or engravings, or other signs of molestation.", "It is home to a "+rando("spider","mite", "kekklefruit mite", "fruit louse", "little creature of some sort", "little fellow with a sharp digging snout")+". Bonus!", "The fall doesnt' appear to have affected its potency.", "It's beautiful, and bred to give you a fishing boost.", "This had to have come from the tree, right?" - )); - } - }, ms); - } - - kekklefruit_growth(); - - function rainstorm() { - var minute = 60 * 1000; - var ms = 1000 + Math.random() * 72 * 60 * minute; - setTimeout(function() { - var duration = 6 + Math.random() * 24; - for(var i = 0; i < duration; i++) { - // sendChat("1"); - if(Math.random() > 0.5) { - setTimeout(function() { - db.getFruits(function(num_fruits) { - db.setFruits(num_fruits + 1); - }); - }, 3000 + Math.random() * minute); - } - } - rainstorm(); - }, ms); - } - - rainstorm(); - - function catchSomething(part) { - db.getFish(part._id, function(myfish) { - if(myfish.length > 10 && Math.random() < 0.1) { - catchTrap(part); - } else { - catchFish(part); - } - }); - } - - function catchFish(part, silent) { - var entry = "Missingno"; - if(Math.random() > 0.005) { - var type = magicRando(fish); - if((new Date().getDay() & 1) && Math.random() < 0.25) type = "Small Bass"; - var size = (["small", "medium-sized", "rather large", "large"])[Math.floor(Math.random()*4)]; - if(size == "large" && Math.random() > 0.975) size = "Golden"; - if(!silent) sendChat("Our good friend " +part.name+" caught a "+size+" "+type + "! ready to /eat or /fish again"); - - entry = type + " (" + size + ")"; - - if(fish_without_images.indexOf(type) == -1) { - fs.readFile("./password.txt", function(err, data) { - if(err) throw err; - var text = part.name+" caught a "+size+" "+type + "!"; - console.log(type); - // client.sendArray([{m: "admin message", password: new String(data).trim(), - // msg: {"m": "notification", "id":"Fish-caught","targetUser": "room", "target": "#piano", "duration": "7000", "class":"short","html": "
"+sanitize(text)}}]); - }); - } - } else { - // rarer fish - var type = magicRando(newfish || ["error medal"]); - var stuff = ["Special catch!", "Let us all give recognition.", "Ahoy!", "Wow!", "Nice.", "Nice!", "Great!", "Sweet!", "Sweet,", "That's cool,", "Cool!", "Neat...", "Neat!", "Wow,", "Rad.", "Funk yeah!!", "omg", "like whoah,","Great success.","Good news everyone,","I have something importrant to say.","I have something important to say.","This is cool news..","I have something to report:","Good job!","Here's something...","Whoah!!","Oh! Oh! This is a good one.","Check it","Luck!!", "Lucky!", "In luck,","Excellent.","Oh my!","A rarer fish.","Rarer fish...","Rare!","Rare fish!","An uncommon fish!!","This is less common!","Score!","Uncommon fish!", "Uncommon fish caught!","Uncommon get!","Uncommon fish get!"]; - var exclamation = stuff[Math.floor(Math.random() * stuff.length)]; - if(!silent) sendChat(exclamation+" "+part.name+" caught a "+type + "."); - - entry = type; - } - - db.getFish(part._id, function(myfish) { - myfish.push(entry); - db.putFish(part._id, myfish); - - if(myfish.length > 30 && myfish.length % 5 === 0) { - if(!silent) sendChat("Our friend " +part.name+"'s fish sack grows ever larger."); - } - }); - }; - - function bonusTry(part) { - var key = "fishing~"+part._id; - var bonus = getBonusById(part._id); - if(bonus > 0) { - let time = 5000 + Math.random() * 10000 + Math.max((2-bonus) * 10000, 0); - setTimeout(function() { - db.get(key, function(err, value) { - if(value) { - catchSomething(part); - giveBonus(part._id, -0.1); - db.del(key); - } - }); - }, time); - } - } - - function catchTrap(part) { - var types = ["Blue Whale", "Giant Squid", "Giant Pacific Octopus", "Giant Oceanic Manta Ray", "Southern Elephant Seal", "Sperm Whale", "Giant Oarfish", "Whale Shark", "Japanese Spider Crab"]; - var type = magicRando(types); - sendChat("Our friend " +part.name+" is getting a bite."); - sendChat("Unfortunate catch! It's a "+type+"...!"); - types = ["boom", "crash", "kaboom", "smash", "kersplash"]; - sendChat(types[Math.floor(Math.random()*types.length)]+"... "+types[Math.floor(Math.random()*types.length)]+"..."); - sendChat("Some of the fish were lost in the disaster..."); - - //sendChat("(not really. that part is disabled. just testing)"); - - db.getFish(part._id, function(myfish) { - var org = myfish.length; - var keep = Math.floor(org * 0.2); - myfish = myfish.slice(0, keep + 1); - db.putFish(part._id, myfish); - }); - }; - - function catchPokemon(part, silent) { - var pok = pokedex[Math.floor(Math.random() * pokedex.length)]; - db.getPokemon(part._id, function(pokemon) { - pokemon.push(pok.name); - var count = pokemon.length; - db.putPokemon(part._id, pokemon); - - var key2 = "name to user id~"+part.name+"~"+Date.now().toString(36); - db.put(key2, part._id); - - var key2 = "user id to name~"+part._id+"~"+Date.now().toString(36); - db.put(key2, part.name); - - if(!silent) - sendChat(part.name + " received a " + pok.name.toUpperCase()+" for joining! By my count, "+part.name+" now has "+count+" individual pokemón."); - - //sendChat("/hug " + part.name.toLowerCase()); - }); - }; - - function findParticipantByName(name) { - if(!name || name.trim() == "") return undefined; - for(var id in MPPClient.client.ppl) { - if(MPPClient.client.ppl.hasOwnProperty(id) && MPPClient.client.ppl[id].name === name) { - return MPPClient.client.ppl[id]; - } - } - return undefined; - }; - - function findParticipantByNameCaseInsensitive(name) { - if(!name || name.trim() == "") return undefined; - var part = findParticipantByName(name); - if(!part) { - name_lc = name.toLowerCase(); - for (let p of Object.values(MPPClient.client.ppl)) { - if(p.name.toLowerCase() === name_lc) { - part = p; - } - } - } - return part; - }; - - function findParticipantByNameFuzzy(name) { - if(!name || name.trim() == "") return undefined; - name = name.toLowerCase(); - var part = findParticipantByNameCaseInsensitive(name); - for(var id in MPPClient.client.ppl) { - if(MPPClient.client.ppl.hasOwnProperty(id) && MPPClient.client.ppl[id].name.toLowerCase().indexOf(name) === 0) { - part = MPPClient.client.ppl[id]; - break; - } - } - for(var id in MPPClient.client.ppl) { - if(MPPClient.client.ppl.hasOwnProperty(id) && MPPClient.client.ppl[id].name.toLowerCase().indexOf(name) !== -1) { - part = MPPClient.client.ppl[id]; - break; - } - } - - // new - if (!part) { - // for (var id in MPPClient.client.ppl) { - // let p = MPPClient.client.ppl[id]; - // if (!p) continue; - // if (p._id.toLowerCase().includes(name.toLowerCase())) { - // part = p; - // break; - // } - // } - for (var p of Object.values(MPPClient.client.ppl)) { - if (!p) continue; - if (p._id.toLowerCase().includes(name.toLowerCase())) { - part = p; - break; - } - } - } - - return part; - }; - - var fishing_bonus_by_id = {}; - function getBonusById(id) { - if(fishing_bonus_by_id.hasOwnProperty(id)) { - return fishing_bonus_by_id[id]; - } else { - return 0; - } - } - function giveBonus(id, bonus) { - bonus += getBonusById(id); - fishing_bonus_by_id[id] = bonus; - } - - var sandiness_by_id = {}; - function getSandinessById(id) { - if(sandiness_by_id.hasOwnProperty(id)) { - return sandiness_by_id[id]; - } else { - return 0; - } - } - function giveSandiness(id, sandiness) { - sandiness += getSandinessById(id); - sandiness_by_id[id] = sandiness; - } - setInterval(function() { - for(var i in sandiness_by_id) { - if(sandiness_by_id.hasOwnProperty(i)) { - sandiness_by_id[i] = Math.max(sandiness_by_id[i] - 1, 0); - } - } - }, 24*60*60000); - - setInterval(function() { - db.put("look.outside.◍Sand", "We don't talk about that."); - }, 6000); - - function randomizeAllColors() { - for (let p of Object.values(MPPClient.client.ppl)) { - MPPClient.client.sendArray([{m:'setcolor', id:p._id, color:randomColor()}]); - } - } - - function swapAllColors() { - let colorList = []; - for (let p of Object.values(MPPClient.client.ppl)) { - colorList.push(p.color); - } - let index = 0; - let lastColor = colorList[colorList.length - 1]; - for (let p of Object.values(MPPClient.client.ppl)) { - MPPClient.client.sendArray([{m:'setcolor', id:p._id, color:lastColor}]); - lastColor = colorList[index]; - } - } - - bot.addCommand(['help', 'about', 'commands'], 0, msg => { - if (Date.now() < blockHelpUntil) return; - blockHelpUntil = Date.now() + 10000; - //sendChat("This is a test to see what leveldb is like. Commands: /put , /get , /del , /read [ []] \t"+underline("Fishing")+": \t/fish, /cast (starts fishing), /reel (stops fishing), /caught [name] (shows fish you've caught), /eat (eats one of your fish), /give [name] (gives fish to someone else), /steal [name] (steals fish from someone else)"); - // sendChat(underline("Fishing")+": \t/fish, /cast (starts fishing), /reel (stops fishing), /caught [name] (shows fish you've caught), /eat (eats one of your fish), /give [name] (gives fish to someone else), /give_[number] [name] (give up to 100 at a time), /pick (picks fruit from the tree), /look [object] (look at surroundings), /yeet [item] (yeet items into surroundings), /take [object] (take items from surroundings)"); - // sendChat(underline("Fishing")+": \t/fish, /cast (starts fishing), /reel (stops fishing), /caught [name] (shows fish you've caught), /eat (eats one of your fish), /give [name] (gives fish to someone else), ~~/give_[number] [name] (give up to 100 at a time)~~, /pick (picks fruit from the tree), /look [object] (look at surroundings), /yeet [item] (yeet items into surroundings), /take [object] (take items from surroundings)"); - sendChat(underline("Fishing")+": /fish, /cast (starts fishing), /reel (stops fishing), /caught [name] (shows fish you've caught), /eat (eats one of your fish), /give [name] (gives fish to someone else), ~~/give_[number] [name] (give up to 100 at a time)~~, /pick (picks fruit from the tree), /look [object] (look at surroundings), /yeet [item] (yeet items into surroundings), /take [object] (take items from surroundings)"); - }, false); - - bot.addCommand('qmyid', 0, (msg, admin) => { - if (!admin) return; - console.log(MPPClient.client.user.id); - sendChat(`Friend ${msg.p.name}: Your ID is ${msg.p.id}`); - }, false); - - bot.addCommand('name', 0, (msg, admin) => { - if (!admin) return; - // DiscordClient.client.guilds.cache.get('841331769051578413').members.cache.get(DiscordClient.client.user.id).setNickname(msg.argcat()); - MPPClient.client.sendArray([{m:'userset', set: {name: msg.argcat()}}]); - }, false); - - bot.addCommand('ch', 0, (msg, admin) => { - if (!admin) return; - var num = parseInt(msg.argcat() || 1) || 1; - for (var i = 0; i < num; i++) { - setTimeout(function() { - catchFish(msg.p, true); - }, i * 100); - } - }, false); - - bot.addCommand('_20k', 0, (msg, admin) => { - if (!admin) return; - var keks = ["butter kek", "rice kek", "chocolate kek", "chocolate covered kek", "strawberry kek", "strawbarry kek", "sugar kek", "banana kek", "apple kek", "fish kek"]; - var more_keks = ["butter kek", "chocolate kek", "chocolate covered kek"]; - var arr = []; - for(var i = 0; i < 20000; i++) { - if(Math.random() < 0.25) { - arr.push(keks[Math.floor(Math.random()*keks.length)]); - } else if(Math.random() < 0.5) { - arr.push(more_keks[Math.floor(Math.random()*more_keks.length)]); - } else { - arr.push(pokedex[Math.floor(Math.random() * pokedex.length)].name); - } - } - db.appendFish(msg.argcat(), arr); - }, false); - - bot.addCommand('_sand', 0, (msg, admin) => { - if (!admin) return; - db.getFish(msg.argcat(), function(myfish) { - for(var i = 0; i < myfish.length; i++) { - myfish[i] = "Sand"; - } - db.putFish(msg.argcat(), myfish); - sendChat("What a terrible night to have a curse."); - }); - }, false); - - bot.addCommand(['ppl'], 0, msg => { - // var list = "sorry :("; - var list = ""; - for(var id in MPPClient.client.ppl) { - if(MPPClient.client.ppl.hasOwnProperty(id)) { - list += ", " + MPPClient.client.ppl[id].name; - } - } - // list = list.substring(0, list.length - 2); - sendChat("ppl: " + list); - return; - }, false); - - bot.addCommand(['color', 'colour'], 0, msg => { - if (msg.args.length == 0) return; - var color; - if (msg.args[0].match(/^#[0-9a-f]{6}$/i)) { - color = new Color(msg.args[0]); - } else { - var part = findParticipantByNameFuzzy(msg.argcat()) || msg.p; - if(part) color = new Color(part.color); - } - if (!color) return; - sendChat("Friend " + msg.p.name +": That looks like "+color.getName().toLowerCase()); - }, false); - - bot.addCommand(['pokedex', 'dex'], 0, msg => { - // var pkmn = pokedex[msg.args[0]]; - var pkmn = pokedex.find(pk => pk.id == msg.argcat() || pk.name.toLowerCase() == msg.argcat().toLowerCase()); - if(pkmn && pkmn.id) { - var text = pkmn.id + ", " + pkmn.name + " ("; - var n = 0; - for(var i in pkmn.type) { - if(n) text += " / "; - text += pkmn.type[i]; - ++n; - } - text += ") (\"" + pkmn.classification + "\")"; - sendChat(text); - } - }, false); - - bot.addCommand('fishing_count', 0, msg => { - var count = 0; - db.createReadStream({ - start: "fishing~", - end: "fishing~\xff" - }) - .on("data", function(data) { - if(data.value) ++count; - }) - .on("end", function() { - var message = "Friend " + msg.p.name+": By my count, there are "+count+" people fishing."; - if(count >= 100) message += " jfc"; - sendChat(message); - }); - return; - }, false); - - bot.addCommand('fishing', 0, msg => { - var message = ""; - db.createReadStream({ - start: "fishing~", - end: "fishing~\xff" - }) - .on("data", function(data) { - if(data.value) { - var dur = ((Date.now()-parseInt(data.value))/1000/60); - message += "🎣"+data.key.substr(8)+": "+dur.toFixed(2)+"m "; - } - }) - .on("end", function() { - sendChat(message); - }); - }, false); - - bot.addCommand('fish_count', 0, msg => { - var count = 0; - var arr = [] - db.createReadStream({ - start: "fish sack~", - end: "fish sack~~" - }) - .on("data", function(data) { - if(data.key.match(/^fish sack~[0-9a-f]{24}$/i)) { - arr.push(data); - data = data.value.split("\xff"); - for(var i = 0; i < data.length; i++) { - if(data[i].trim().length) - ++count; - } - } - }) - .on("end", function() { - var message = "Friend " + msg.p.name+": By my count, there are "+count+" fish in the fish sacks. The largest sacks are: "; - if(arr.length < 1) { - sendChat("0"); - return; - } - var results = arr.sort(function(a,b) { - return (a.value.split("\xff").length < b.value.split("\xff").length ? 1 : -1); - }); - console.log(arr[0].key, arr[1].key, arr[2].key); - - - var names = []; - var id = arr[0].key.match(/[0-9a-f]{24}/)[0]; - db.createReadStream({ - start: "user id to name~"+id+"~", - end: "user id to name~"+id+"~~" - //limit: 1 - }) - .on("data", function(data) { - names[0] = data.value; - }) - .on("end", function() { - var id = arr[1].key.match(/[0-9a-f]{24}/)[0]; - db.createReadStream({ - start: "user id to name~"+id+"~", - end: "user id to name~"+id+"~~" - //limit: 1 - }) - .on("data", function(data) { - names[1] = data.value; - }) - .on("end", function() { - var id = arr[2].key.match(/[0-9a-f]{24}/)[0]; - db.createReadStream({ - start: "user id to name~"+id+"~", - end: "user id to name~"+id+"~~" - //limit: 1 - }) - .on("data", function(data) { - names[2] = data.value; - }) - .on("end", function() { - for(var i = 0; i < 3; i++) { - if(i) message += ", "; - message += (i+1) + ". " + names[i] + ": " + (results[i].value.split("\xff").length); - } - sendChat(message); - }); - }); - }); - }); - }, false); - - bot.addCommand('names', 0, msg => { - var user_id; - var part = findParticipantByNameFuzzy(msg.argcat()); - if(!part) { - if(!msg.argcat().match(/^[0-9a-f]{24}$/)) { - sendChat("Friendly friend " + msg.p.name+": wrong"); - return; - } - user_id = msg.argcat(); - } else { - user_id = part._id; - } - var results = []; - db.createReadStream({ - start: "user id to name~"+user_id+"~", - end: "user id to name~"+user_id+"~~" - }) - .on("data", function(data) { - if(results.indexOf(data.value) === -1) - results.push(data.value); - }) - .on("end", function() { - if(results.length == 0) { - sendChat("Friend " + msg.p.name+": no results"); - return; - } - var append = ""; - if(results.length > 10) { - var len = results.length; - results = results.slice(0, 9); - append = " (and " + (len - 10) + " more)"; - } - var message = "Friend " + msg.p.name +": Found names for " + user_id + " are "; - sendChat(message+results+append); - }); - }, false); - - bot.addCommand('qids', 0, (msg, admin) => { - if (!admin) return; - // console.log(client.ppl); - // Object.values(client.ppl).forEach(part => { - // console.log(part._id+": "+part.name); - // }); - }, false); - - bot.addCommand('put', 0, (msg, admin) => { - if (!admin) return; - db.put(msg.args[0], msg.argcat(1), function(err) { - if(err) { - sendChat("our friend " + msg.p.name + " put ERR: " + err); - } else { - sendChat("our friend " + msg.p.name + " put OK: "+msg.args[0]+"=\""+msg.argcat(1)+"\""); - } - }); - }, false); - - bot.addCommand('get', 0, (msg, admin) => { - if (!admin) return; - db.get(msg.argcat(), function(err, value) { - if(err) { - sendChat("our friend " + msg.p.name + " get ERR: " + err); - } else { - sendChat("our friend " + msg.p.name + " get OK: " + msg.argcat() + "=\""+value+"\""); - } - }); - return; - }, false); - - bot.addCommand('del', 0, (msg, admin) => { - db.del(msg.argcat(), function(err) { - if(err) { - sendChat("our friend " + msg.p.name + " del ERR: " + err); - } else { - sendChat("our friend " + msg.p.name + " del OK"); - } - }); - return; - }, false); - - bot.addCommand('read', 0, (msg, admin) => { - var max_len = 2048; - var result = ""; - var count = 0; - var result_count = 0; - db.createReadStream({ - start: msg.args[0] || undefined, - end: msg.args[1] || undefined, - reverse: msg.args[2] === "reverse" || undefined - }) - .on("data", function(data) { - ++count; - if(result.length < max_len) { - ++result_count; - result += data.key+"=\""+data.value + "\", "; - } - }) - .on("end", function() { - result = result.substr(0, result.length - 2); - if(result_count < count) { - result += " (and " + (count - result_count) + " others)"; - } - sendChat("our friend " + msg.p.name + " read " + count + " records: "+result); - }); - }, false); - - bot.addCommand('startup_sound', 0, msg => { - startupSound(); - return; - }, false); - - bot.addCommand('reel', 0, msg => { - db.getLocation(msg.p._id, location => { - if(location === "outside") { - var key = "fishing~"+msg.p._id; - db.get(key, function(err, value) { - if(!value) { - sendChat("Friend " + msg.p.name+": You haven't /casted it."); - return; - } else { - sendChat("Our friend " + msg.p.name+" reel his/her lure back inside, temporarily decreasing his/her chances of catching a fish by 100%."); - db.del(key); - } - }); - } else { - sendChat("You have to /go outside to "+cmd+" your device."); - } - }); - }, false); - - bot.addCommand(['look'], 0, msg => { - db.getLocation(msg.p._id, location => { - var target = msg.argcat().toLowerCase().trim(); - db.look(location, target, entry => { - if(entry) { - var content = entry.value; - sendChat("Friend "+msg.p.name+": "+content); - } else { - sendChat("Friend "+msg.p.name+": You can't see "+target+" from "+location+".") - } - }); - }); - }, false); - - bot.addCommand(['fish', 'cast', 'fosh'], 0, msg => { - db.getLocation(msg.p._id, location => { - if(location === "outside") { - var key = "fishing~"+msg.p._id; - db.get(key, function(err, value) { - if(value) { - var dur = ((Date.now()-parseInt(value))/1000/60); - if(dur > 0.05) sendChat("Friend " + msg.p.name+": Your lure is already in the water (since "+dur.toFixed(2)+" minutes ago)."); // If you want to /cast it again, you have to /reel it in, first. (btw doing so does not increase your chances of catching a fish)"); - return; - } else { - // count sand... - db.getFish(msg.p._id, function(myfish) { - var sand_count = 0; - for(var i = 0; i < myfish.length; i++) { - if(myfish[i].toLowerCase() == "sand") sand_count++; - } - if(sand_count > 100) { - sendChat("By my count, "+msg.p.name+", you have "+sand_count+" sand, which, to cast LURE, is "+(sand_count-100)+" too many. /eat or /give some sand away in order to ")+cmd; - } else { - // normal fishing. - sendChat("Our friend " + msg.p.name+" casts LURE into a water for catching fish."); - bonusTry(msg.p); - db.put(key, Date.now().toString()); - } - }); - - } - }); - } else { - sendChat(rando("There is no water here, maybe you want to /go outside", "Not here, "+msg.p.name+"!", "That would be inappropriate while you're "+location+", "+msg.p.name+".")); - } - }); - }, false); - - bot.addCommand(['eat', 'oot'], 0, msg => { - db.getFish(msg.p._id, function(myfish) { - if(myfish.length < 1) { - sendChat("Friend " + msg.p.name+": You have no food. /fish to get some."); - return; - } - var idx = -1; - var arg = msg.argcat().trim().toLowerCase(); - for(var i = 0; i < myfish.length; i++) { - if(myfish[i].toLowerCase().indexOf(arg) !== -1) { - idx = i; - break; - } - } - if(idx == -1) { - sendChat("Friend " +msg.p.name+": You don't have a "+arg+" that's edible."); - return; - } - var food = myfish[idx]; - if(food.toLowerCase() == "sand") { - if(getSandinessById(msg.p._id) >= 10) { - sendChat("You can only "+cmd+" about 10 sand per day. Going to have to find something else to do with that sand."); - if(Math.random() < 0.1) { - sendChat("What a terrible night to have a curse."); - } - } else { - // eat sand - sendChat("Our friend "+msg.p.name+" ate of his/her sand."); - giveSandiness(msg.p._id, 1); - myfish.splice(idx, 1); - db.putFish(msg.p._id, myfish); - } - return; - } - if(food.indexOf("(") !== -1) - food = food.substr(0, food.indexOf("(") - 1); - myfish.splice(idx, 1); - db.putFish(msg.p._id, myfish); - if(food.indexOf("kek") !== -1) { - sendChat("Our friend " + msg.p.name+" ate his/her "+food+" and got a temporary fishing boost."); - giveBonus(msg.p._id, 1); - bonusTry(msg.p); - return; - } - if(Math.random() < 0.5) { - var tastes = ["fine", "sweet", "sour", "awfully familiar", "interesting", - "icky", "fishy", "fishy", "fine", "colorful", "revolting", "good", - "good", "great", "just fine", "weird", "funny", "odd", "strange", "salty", - "like chicken", "like hamburger", "like dirt", "like a sewer", "like french fries", - "cheesy", "hurty", "hot", "spicy", "a little off", "like the real thing", - "like sunshine", "\"delish\"", "supreme", "like air", "amazing", "blue", - "yellow", "like peanut butter", "delicious", "delicious", "spicy", "like grass", - "like nothing he/she had ever tasted before", "pilly", "sweaty", "like garlic", - "like people food", "salty", "wrong", "good enough for him/her", "like ham", - "like the ones at McDonalds", "like a jellybean", "like snot", "like a penny, ew", - "musical", "... fantastic", "sure enough", "right", "unusual", "a bit off", " indescribable", - "gooey", "sticky", "kawaii", "like you aren't supposed to eat it, for some reason he/she can't describe", - "like home", "like Christmas", "like Halloween", "like a fish", "like he/she expected but better", - "like it made him/her turn a shade of 'turquoise.' Upon looking in a mirror he/she finds it didn't actually do so, though. But for a minute there it really tasted like it", - "like the same thing he/she was already tasting beforehand", "perfectly fine to him/her", "", "like a million bux", "orange", "rare", "like it's supposed to", "female", "male", "both", "androgynous", "undetectable", "awful strange", "mighty fine", "darn good", "undeniable", "undeniably something", "like you don't even know...", "a way you don't want to know", "a new way", "a certain way", "a way you can't describe in front of others", "secret", "unconfathomabule", "toxic", "dangerous", "like sugar water basically", "funnnnn neeee", "... AWKWARD! 🤖", "perfect.", "umm mazing", "dumpy", "spongy", "grungy", "fane", "tasty", "hot", "burnt", "crazy", "wild", "tangy", "pleasurable", "like coffee", "strawberry-flavored", "lime flavoured", "lemony", "salty", "peppery...", "chocolatey", "gooey", "like toothpaste", "like the sweet taste of victory", "like success", "fantastical", "amazeballs", "totally fucked up", "too good to describe", "like a dream", "obscene", "inhuman", "like alien food", "like something his/her past life grandma would cook (His/her past life grandma was an alien)", "like the essence of life", "like he/she wanted it to", "not as expected", "nothing like expected", "as you would expect", "like the perfect thing to celebrate the occasion", "so peculiar that he/she now wishes he/she had /yeeted it instead", "like what it was", "like home", "like the old days", "like the past", "like the future", "like fast food joint", "spicy", "too spicy", "too good", "like it smelled", "the same way it smelled", "like the beach", "like fish from /fishing", "dandy", "supreme", "bootylicious", "disconcerting"]; - var taste = tastes[Math.floor(Math.random()*tastes.length)]; - sendChat("Our friend " + msg.p.name+" ate "+food+". It tasted "+taste+"."); - } else { - function rrggbbrand(){var a = Math.floor(Math.random() * 256).toString(16); return a.length < 2 ? "0"+a : a} - var color = "#"+rrggbbrand()+rrggbbrand()+rrggbbrand(); - // client.sendArray([{m: "admin message", password: "amogus", - // msg: {m: "color", _id: msg.p._id, color: color}}]); - // DiscordClient.client.guilds.cache.get("841331769051578413").roles.cache.forEach(r => { - // if (r.name == msg.p._id) { - // r.edit({ - // color: color - // }); - // } - // }) - - MPPClient.client.sendArray([{ - m: 'setcolor', - _id: msg.p._id, - color: color - }]); - - sendChat("Our friend " + msg.p.name+" ate his/her "+food+" and it made him/her turn "+(new Color(color).getName().toLowerCase())+"."); - } - }); - }, false); - - bot.addCommand(['caught', 'sack'], 0, msg => { - var part = findParticipantByNameFuzzy(msg.argcat()) || msg.p; - - db.getFish(part._id, function(myfish) { - var message = ""; - message = "Contents of "+part.name+"'s fish sack: "+listOff(myfish) + message; - sendChat(message); - }); - }, false); - - bot.addCommand(['go'], 0, msg => { - db.getLocation(msg.p._id, location => { - var target = msg.argcat().toLowerCase().trim(); - if(!locations.includes(target)) { - sendChat("Where is "+target+"?"); - return; - } - if(target === location) { - sendChat("My dude, "+msg.p.name+", you're already there, man."); - return; - } - if(location === "sleep") { - sendChat(msg.p.name+" woke up "+target+"."); - } else { - sendChat(msg.p.name+" went "+target+"."); - } - location = target; - db.setLocation(msg.p._id, location); - }); - }, false); - - bot.addCommand(['yeet'], 0, msg => { - // todo: location-based yeeting - db.getFish(msg.p._id, function(myfish) { - db.getLocation(msg.p._id, location => { - if(location === "outside") { - var arg = msg.argcat().trim().toLowerCase(); - var idx = -1; - for(var i = 0; i < myfish.length; i++) { - if(myfish[i].toLowerCase().indexOf(arg) !== -1) { - idx = i; - break; - } - } - if(idx === -1) { - idx = Math.floor(Math.random() * myfish.length); - } - var item = myfish[idx] || "booger"; - if(myfish.length < 1) { - var messages = [" yeeted themself", " yeeted themself'st", " did the thing", " slipped", " blasted off to the aboves", " was physically catapulted into the expansive yonder", "'s corporeal embodiment wrote a check its immobile predisposition couldn't cash", " tried to get away", " yeeted", " yeated", "yeted", " yeet", " YEET", " yeeted the whole thing", " yeeted it entirely", " yeeet", " yes", " Great!", " Terriffic!", " Fantastic!", " very good", " BRILLIANT", " *applause*", " :D", " yeeted like it's 2014", " tried to bring back yeet", " tested positive for yeet", " contracted yeat", " admitted da yeet", ".", " tried to yeet him/her self", " successfully yeeted", " briskly elevated into the clouds", " shot into the sun. Do a cannonball!", " did a backflip into the water", " it's ok that you did what you did", " don't look at them while they're yeeting", " yeets merrily", " has a yeet thang", ", after much deliberation, took a plane to have a professionally organized yeet ceremony with a shaman in the amazon jungle", " yeeted properly", ", everyone.", " ladies and gentlemen", ", indeed", " are you ok", " was picked up and carried away by a very localized hurricane travelling in excess of 100,000 meter per hour", " too", " yeeted all of it", " did it so you should do it too", " practiced his/her yeet", " yeets a remaining grain of pocket rice", " yeets a spider off his/her foot", "'s hat comes off.", "'s shoes fly off.", " really said yeet", " is asking if you /eat"]; - sendChat("That guy/girl " + msg.p.name + messages[Math.floor(Math.random()*messages.length)]); - return; - } - - var name = msg.p.name; - var fish = item.toLowerCase(); - var size = ""; - var now = Date.now(); - var time = new Date().toLocaleString('en-US', { hour: 'numeric', minute: 'numeric', hour12: true }); - if(item.indexOf("(") !== -1) { - size = fish.substring(fish.indexOf("(") + 1, item.indexOf(")", item.indexOf("("))); - fish = fish.substr(0, item.indexOf("(") - 1); - - } - if(size == "small" && fish == "key") { - size = "special"; - fish = "small key"; - item = "small key"; - } - - - if(item.toLowerCase() == "sand") { - sendChat("No, "+msg.p.name+", don't yeet sand."); - return; - } - - // remove the item - myfish.splice(idx, 1); - db.putFish(msg.p._id, myfish); - - - function ye(message, ...results) { - return { - "message": message, - "result": rando(results) - } - } - - if(item == "small key") { - console.log("***small key yeeted***"); - sendChat("???"); - return; - } - - if(Math.random() < 0.15) { - // hit a person - var targets = Object.values(client.ppl).filter(p => p._id != client.user._id); - if(targets.length) { - var target = rando(targets).name; - var yeet = rando( - // directed at a person out the gate - ye( - "Friend "+name+"'s "+rando( - "violent", "shaking", "angery", "two (2)", "unknown number of", "" - )+" hands grabbed his/her "+fish+" and "+rando( - "slung", "foisted", "launched", "yeeted", "expelled", "fired" - )+" it "+rando( - "lazily", "forcefully", "haphazardly", "angrily", "playfully", "lovingly" - )+" "+rando( - "in the direction of "+target+".", "at where "+target+" happens to be.", "at "+target+".", "directly at "+target+"'s location in this realm.", "at the general vicinity of "+target - )+". "+rando( - "It missed.", "It grazed his/her cheek, leaving a small dab of "+fish+".", "Being that it was so "+size+", I'm sure you can infer how comical the result is!", "It smacked right across his/her face.", "It got hung in his/her shirt and he/she flung it out onto the ground and it was quite a silly scene.", "It scooted across his/her head before rebounding off onto the ground nearby. The "+rando("gooey", "powdery", "residual", "smelly", "appropriate", fish, fish+"y", "greasy", "uncomfortable", "delicious", "wonderful", "questionable", "nice", "gelatinous", "shampoo", "fatty", "warm", "hot", "cold", "dripping", "fish", "unknown")+" residue was left behind in "+target+"'s hair." - ), - - "A gruesome scene indeed.", "Not a pretty sight.", "By the look of things, it used to belong to either "+name+" or "+target+".", "It's got "+name+"prints and "+target+"prints.", "I think it has one of "+target+"'s hairs on it.", "You can tell by looking at it that it used to belong to "+name - ) - ); - sendChat(yeet.message); - db.put("look.outside.◍"+fish, yeet.result); - if(Math.random() < 0.2) { - - } - - return; - } - } - if(Math.random() < 0.15) { - // hit the tree - var yeet = rando([ - ye("The "+size+" "+fish+" thwapped into the kekklefruit tree sending debris flying. A kekklefruit was knocked to the ground.", "It's lying there next to the tree.", "It got splattered on the tree.", "Part of it is stuck to the tree, but it came to rest on the ground nearby.", "A distressed-looking "+fish+" on the ground near the tree.", "It landed in the grass.", "It's kinda scuffed up.", "It's got tree on it. And "+name+"prints.", "It's "+size+".", "It belongs to the tree now.", "It's by the tree now.", "It's a "+size+" "+fish+" previously owned by "+name+" if you still want it after that.") - ]); - sendChat(yeet.message); - db.put("look.outside.◍"+fish, yeet.result); - db.put("look.outside.◍"+rando( - "kek of good fortune", "lucky kek", "kek", "fortunate kek", "the kekklefruit that was knocked from the tree", "sandy kekklefruit", "baby kekklefruit" - ), - rando( - "The evidence points to it being knocked from the tree by "+name+".", "It rolled to a stop.", "A small creature is snacking on it.", "Take it before it gets ants.", "A single ant has already found it.", "it has a little bit of "+fish+" on it." - )); - return; - } - if(Math.random() < 0.4) { - // yeet to rest - var yeet = rando([ - // into the water - ye("Tossed "+fish+" into the water.", "It looks like somebody tossed it haphazardly into the shallow water. It is not swimming.", "It's in the shallows trying to swim away...", name+" tossed this into the shallows where it rests today. I don't think it's moving.", "I think it's a "+fish+". A very immobile one.", " It's resting at the edge of the water where you can /take it."), - - // on the ground - ye("Tossed "+fish+" onto the ground.", "It just sat there.", "It landed face down.", "Yeeted into this position by "+name+".", "A dirty "+fish+".", "Motionless on the ground.", "It's still moving!", "It possesses frozen on its face the expression of something yeeted", "It's missing a piece.", "It's still warm.", "Using your powers you deduce that it's been there since exactly "+time+" on an unknown day.") - ]); - sendChat(yeet.message); - db.put("look.outside.◍"+fish, yeet.result); - return; - } - if(Math.random()) { - // yeet permanently into e.g. water - var distance = (5 + Math.random() * 73).toFixed(1)+"m"; - sendChat(rando("Friend "+name+" tossed his/her "+fish+" into the water.", "After "+name+" yeeted it onto the ground, the "+fish+" self-propelled a short distance into the water.", "The "+fish+" was lost into the water.", "The "+fish+" went in the water.", "It's in the water, now.", "Okay, it's gone.", "Aaaand it's gone.", "The "+fish+" yeeted by "+name+" continued upwards through each layer of the atmosphere. Upon detecting the absence of air, its back end broke off to reveal a rocket engine. The "+fish+" then slowed its angular momentum until it was pointed at some distant star, then engaged its engines and propelled itself into space.", "The object was yeeted permanently.", "Thanks to "+name+" the "+fish+" is now in the water.", "The "+fish+" travelled "+distance+" before landing out in the water.")); - return; - } - - } else { - if (location == 'inside') { - sendChat(`Excuse me, ${msg.p.name}: Yeeting ${location} is most certainly rude.`); - return; - } - if (!['inside', 'outside'].includes(location)) { - sendChat("Guy/girl "+msg.p.name+": doing that whilst at "+location+" is currently prohibited."); - } else if (location == 'sleep') { - sendChat("Guy/girl "+msg.p.name+": doing that whilst "+location+"ing is currently prohibited."); - } else { - sendChat("Guy/girl "+msg.p.name+": doing that whilst "+location+" is currently prohibited."); - } - } - }); - return; - }); - }, false); - - bot.addCommand('grow_fruit', 0, (msg, admin) => { - if (!admin) return; - var how_many = ~~msg.args[0]; - if(!how_many) how_many = 1; - db.getFruits(function(num_fruits) { - db.setFruits(num_fruits + how_many); - kekklefruit_growth(); - }); - }, false); - - var TOO_MANY_FISH = 50; - - bot.addCommand('take', 0, msg => { - db.getLocation(msg.p._id, location => { - var target = msg.argcat().toLowerCase().trim(); - if(!target.length) { - sendChat("Take what?"); - return; - } - db.take(location, target, function(entry) { - if(!entry) { - sendChat("Friend "+msg.p.name+": You can't take "+target+" from "+location+"."); - } else { - db.getFish(msg.p._id, function(myfish) { - if(myfish.length >= TOO_MANY_FISH) { - sendChat("Friend "+msg.p.name+" is carrying too much."); - } else { - var fish = entry.key; - fish = fish.substr(fish.indexOf("◍")+1); - if (['bed'].includes(fish.toLowerCase()) || location == 'sleep') { - sendChat("Friend "+msg.p.name+": You can't take the " + fish + "."); - return; - } - myfish.push(fish); - db.putFish(msg.p._id, myfish); - db.del(entry.key); - sendChat("Friend "+msg.p.name+" took the "+fish+"."); - }; - }); - } - }); - }); - }, false); - - bot.addCommand('give', 0, msg => { - var thief = msg.p; - var victim = findParticipantByNameFuzzy(msg.args[0]); - if(!victim) { - sendChat("Friend " +thief.name+" missed"); - return; - } - if(victim._id == thief._id) { - sendChat("Friendly friend " +thief.name+" fudged"); - return; - } - var target_fish = msg.argcat(1); - db.getFish(thief._id, function(thief_fish) { - db.getFish(victim._id, function(victim_fish) { - if(victim_fish.length >= TOO_MANY_FISH) { - sendChat("Friend " +victim.name+" is carrying too much."); - return; - } - if(thief_fish.length > 0) { - var idx = -1; - var arg = target_fish.trim().toLowerCase(); - for(var i = 0; i < thief_fish.length; i++) { - if(arg == "" || thief_fish[i].toLowerCase().indexOf(arg) !== -1) { - idx = i; - break; - } - } - if(idx == -1) { - sendChat("Friend " +thief.name+": You don't have a "+arg+" that you can /give like that."); - return; - } - var thefish = thief_fish[idx]; - thief_fish.splice(idx, 1); - victim_fish.push(thefish); - - sendChat("Our friend " +thief.name+" gave "+victim.name+" his/her "+thefish); - db.putFish(thief._id, thief_fish); - db.putFish(victim._id, victim_fish); - } else { - sendChat("Friend " +thief.name+": You don't have the fish to give."); - } - }); - }); - }, false); - - setInterval(function() { - db.put("look.outside.◍Sand", "We don't talk about that."); - db.put("look.sleep.◍Bed", "*snuggles*"); - }, 6000); - - var FISHING_CHANCE = 0.02; - setInterval(function() { - var results = []; - db.createReadStream({ - start: "fishing~", - end: "fishing~\xff" - }) - .on("data", function(data) { - if(data.value) results.push(data.key); - }) - .on("end", function() { - if(results.length === 0) return; - if(Math.random() > FISHING_CHANCE * results.length) return; - var winner = results[Math.floor(Math.random()*results.length)]; - if(winner.match(/^fishing~[0-9a-f].*$/)) { - db.del(winner); - var user_id = winner.substr(8); - var part; - // DiscordClient.client.guilds.cache.get('841331769051578413').members.cache.forEach(p => { - // if (p.user.id === user_id) { - // part = p.user; - // part.name = p.user.username; - // part._id = p.user.id; - // if(typeof part !== 'undefined') { - // catchSomething(part); - // } - // } - // }); - for (let p of Object.values(MPPClient.client.ppl)) { - if (p.id === user_id) { - part = p; - part.name = p.name; - part._id = p.id; - if(typeof part !== 'undefined') { - catchSomething(part); - } - } - } - } - }); - }, 5000); - - setInterval(function() { - // return; // stop auto-fishing - - var client = MPPClient.client; - - if(!client.isConnected()) return; - - var part = client.ppl[client.participantId]; - if(!part) return; - - var key = "fishing~"+part._id; - db.get(key, function(err, value) { - if(!value) { - sendChat("/fish", true); - } else { - db.getFish(part._id, function(myfish) { - if(!myfish.length) return; - var rand = Math.floor(Math.random()*client.countParticipants()); - var dest; - for(var i in client.ppl) { - if(!client.ppl.hasOwnProperty(i)) continue; - if(i == rand) break; - else dest = client.ppl[i]; - } - if(dest && dest.id !== client.participantId) { - sendChat("/give "+dest.name.split(" ")[0], true); - } - }); - /*if(findParticipantByNameFuzzy("potato")) { - var asdf = findParticipantByNameFuzzy("electrashave") || findParticipantByNameFuzzy("potato") || findParticipantByNameFuzzy("totoro"); - if(asdf) sendChat("/duel "+asdf.name); - }*/ - } - - /*else */ - }); - }, 120000); - - function setTerminalTitle(title) { - process.stdout.write( - String.fromCharCode(27) + "]0;" + title + String.fromCharCode(7) - ); - } - - // client.on("count", function(count) { - // if(count > 0) { - // setTerminalTitle("fishing (" + count + ")"); - // } else { - // setTerminalTitle("fishing"); - // } - // }); - - var Pong = function(client, db) { - this.client = client; - this.db = db; - this.vx = 1.5; - this.vy = 2.2; - var self = this; - self.part = self.client.ppl[self.client.participantId]; - client.on("ch", function() { - self.part = self.client.ppl[self.client.participantId]; - }); - this.player1 = undefined; - this.player2 = undefined; - } - - Pong.prototype.tick = function() { - if(!this.client.isConnected() || !this.part) return; - this.part.x += this.vx; - this.part.y += this.vy; - if(this.part.x < 0) { - this.vx = -this.vx; - } else if(this.part.x > 100) { - this.vx = -this.vx; - } - if(this.part.y < 0) { - this.vy = -this.vy; - } else if(this.part.y > 100) { - this.vy = -this.vy; - } - //this.vx += Math.random() * 0.5 - 0.25; - //this.vy += Math.random() * 0.5 - 0.25; - // this.client.sendArray([{m: "m", x: this.part.x, y: this.part.y}]); - }; - - - - - - var Exchange = function(db) { - this.db = db; - }; - - Exchange.prototype.takePokemon = function(user_id, amount) { - var self = this; - self.db.getPokemon(user_id, function(pok) { - self.db.getPokemon("exchange", function(pok2) { - for(var i = 0; i < amount; i++) - pok2.push(pok.shift()); - self.db.putPokemon(user_id, pok); - self.db.putPokemon("exchange", pok2); - }); - }); - }; - - Exchange.prototype.takeFish = function(user_id, amount) { - var self = this; - self.db.getFish(user_id, function(fish) { - self.db.getFish("exchange", function(fish2) { - for(var i = 0; i < amount; i++) - fish2.push(fish.shift()); - self.db.putFish(user_id, fish); - self.db.putFish("exchange", fish2); - }); - }); - }; - - Exchange.prototype.givePokemon = function(user_id, amount) { - var self = this; - self.db.getPokemon(user_id, function(pok) { - self.db.getPokemon("exchange", function(pok2) { - for(var i = 0; i < amount; i++) - pok.push(pok2.shift()); - self.db.putPokemon(user_id, pok); - self.db.putPokemon("exchange", pok2); - }); - }); - }; - - Exchange.prototype.giveFish = function(user_id, amount) { - var self = this; - self.db.getFish(user_id, function(fish) { - self.db.getFish("exchange", function(fish2) { - for(var i = 0; i < amount; i++) - fish.push(fish2.shift()); - self.db.putFish(user_id, fish); - self.db.putFish("exchange", fish2); - }); - }); - }; - - Exchange.prototype.placeAskOrder = function(user_id, amount, price) { - this.takePokemon(user_id, amount); - this.db.put("exchange ask~"+Exchange.intToKey(price)+"~"+Exchange.intToKey(Date.now())+"~"+user_id, - amount.toString()); - }; - - Exchange.prototype.placeBidOrder = function(user_id, amount, price) { - this.takeFish(user_id, price * amount); - this.db.put("exchange bid~"+Exchange.intToKey(price)+"~"+Exchange.intToKey(-Date.now())+"~"+user_id, - amount.toString()); - }; - - Exchange.prototype.fillAsks = function(user_id, amount, price, market) { - var self = this; - self.db.createReadStream({ - start: "exchange ask~"+Exchange.intToKey(price)+"~", - end: "exchange ask~~" - }) - .on("data", function(data) { - if(amount < 1) return; - var tprice = parseInt(data.key.match(/^exchange ask~(.*)~/)[1], 36); - if(!market && tprice > price) return; - var value = parseInt(data.value || 0) || 0; - var tamt = 0; - if(value > amount) { - tamt = amount; - self.db.put(data.key, (value - tamt).toString()); - } else { - tamt = value; - self.db.del(data.key); - } - amount -= tamt; - self.db.put("exchange data~last", tprice); - - var other_user_id = data.key.match(/[0-9a-f]{24}/i)[0]; - self.takeFish(user_id, price * tamt); - self.takePokemon(other_user_id, tamt); - setTimeout(function() { - self.giveFish(other_user_id, tprice * tamt); - self.givePokemon(user_id, tamt); - }, 200); - }) - .on("end", function() { - if(amount) { - self.placeBidOrder(user_id, amount, price); - } - }); - }; - - Exchange.prototype.fillBids = function(user_id, amount, price, market) { - var self = this; - self.db.createReadStream({ - start: "exchange bid~~", - end: "exchange bid~"+Exchange.intToKey(price)+"~", - reverse: true - }) - .on("data", function(data) { - if(amount < 1) return; - var tprice = parseInt(data.key.match(/^exchange bid~(.*)~/)[1], 36); - if(!market && tprice < price) return; - var value = parseInt(data.value || 0) || 0; - var tamt = 0; - if(value > amount) { - tamt = amount; - self.db.put(data.key, (value - tamt).toString()); - } else { - tamt = value; - self.db.del(data.key); - } - amount -= tamt; - self.db.put("exchange data~last", tprice); - - var other_user_id = data.key.match(/[0-9a-f]{24}/i)[0]; - self.takePokemon(user_id, tamt); - self.takeFish(other_user_id, tprice * tamt); - setTimeout(function() { - self.givePokemon(other_user_id, tamt); - self.giveFish(user_id, tprice * tamt); - }, 200); - }) - .on("end", function() { - if(amount) { - self.placeAskOrder(user_id, amount, market ? 1 : price); - } - }); - }; - - Exchange.prototype.buy = function(user_id, amount, price) { - if(typeof price === "number") { - this.fillAsks(user_id, amount, price, false); - } else { - this.fillAsks(user_id, amount, 1, true); - } - }; - - Exchange.prototype.sell = function(user_id, amount, price) { - if(typeof price === "number") { - this.fillBids(user_id, amount, price, false); - } else { - this.fillBids(user_id, amount, 1000000, true); - } - }; - - Exchange.prototype.getCanSell = function(user_id, amount, price, cb) { - if(amount < 1) cb(false); - else if(price === 0) cb(false); - else if(!Exchange.validateInt(amount)) cb(false); - else if(typeof price === "number" && !Exchange.validateInt(price)) cb(false); - else this.db.getPokemon(user_id, function(pok) { - if(pok.length < amount) cb(false); - else cb(true); - }); - }; - - Exchange.prototype.getCanBuy = function(user_id, amount, price, cb) { - if(amount < 1) cb(false); - else if(price === 0) cb(false); - else if(!Exchange.validateInt(amount)) cb(false); - else if(typeof price === "number" && !Exchange.validateInt(price)) cb(false); - else this.db.getFish(user_id, function(fish) { - if(fish.length < amount * price) cb(false); - else cb(true); - }); - }; - - Exchange.prototype.getOrderBook = function(type, id, cb) { - var orders = []; - this.db.createReadStream({ - start: "exchange "+type+"~", - end: "exchange "+type+"~~" - }) - .on("data", function(data) { - if(id && !data.key.match(new RegExp(id+"$"))) return; - var amount = parseInt(data.value || 0) || 0; - var price = parseInt(data.key.match(new RegExp("^exchange "+type+"~(.*)~"))[1], 36); - orders.push(amount + "@" + price); - }) - .on("end", function() { - cb(orders); - }); - }; - - Exchange.prototype.cancel = function(id, type, amount, price, cb) { - var self = this; - var orders = []; - this.db.createReadStream({ - start: "exchange "+type+"~", - end: "exchange "+type+"~~" - }) - .on("data", function(data) { - if(!data.key.match(new RegExp(id+"$"))) return; - var a = parseInt(data.value || 0) || 0; - var p = parseInt(data.key.match(new RegExp("^exchange "+type+"~(.*)~"))[1], 36); - if(a == amount && p == price) { - orders.push(a + "@" + p); - // delete order - self.db.del(data.key); - // return items - if(type === "ask") { - self.givePokemon(id, amount); - } else if(type === "bid") { - self.giveFish(id, price * amount); - } - } - }) - .on("end", function() { - if(cb) cb(orders); - }); - }; - - Exchange.validateInt = function(int) { - if(Math.floor(int) !== int) - return false; - int = int.toString(36); - if(int.length > 50) - return false; - return true; - }; - - Exchange.intToKey = function(int) { - if(!Exchange.validateInt(int)) { - console.trace("Invalid int "+int); - return; - } - var negative = int < 0; - int = int.toString(36); - if(negative) int = int.substr(1); - while(int.length < 50) int = (negative ? "\xff" : "0")+int; - return int; - }; - - bot.addCommand(['pick', 'get fruit'], 0, msg => { - db.getLocation(msg.p._id, location => { - if (location === 'outside') { - if(location === "outside") { - db.getFruits(function(num_fruits) { - if(num_fruits > 0) { - db.setFruits(num_fruits - 1); - db.appendFish(msg.p._id, ["kekklefruit"]); - sendChat("Our friend "+msg.p.name+" picked 1 fruit from the kekklefruit tree and placed it into his/her fish sack."); - } else { - var options = ["The tree is devoid of fruit.", "The tree is without fruit.", "The tree is barren.", "The tree is missing all its fruit.", "The tree is not with fruit.", "The tree is without fruit.", "The tree is not showing any fruit.", "The tree is not bearing fruit.", "The tree has not borne fruit.", "The tree is not showing fruit.", "The tree is not carrying fruit.", "The tree is not holding fruit.", "The tree is at 0 fruit.", "The tree has no fruit.", "The tree doesn't have any fruit to give.", "The tree doesn't have any fruit to take.", "The tree doesn't have any fruit left to plunder...", "The tree has not grown any new fruit.", "The tree can't give any more fruit right now.", "The fruit have all been taken.", "The fruit have all been picked.", "You don't see any fruit on the tree.", "Your hand is without fruit. After reaching to pick one", "No fruit because there aren't any on the tree.", "No kekklefruit was upon the tree.", "The tree has long slender limbs, barren of fruit.", "The tree's limbs are not currently baring any fruit.", "This tree doesn't have fruit.", "Fruit are not a thing currently on the tree.", "Could not get fruit.", "Try again, please.", "(no fruit picked)", "It just doesn't have any fruit.", "There aren't any fruit.", "Can't get fruit, there's no fruit.", "The tree's not growing!!!!!!!", "Give the tree some time to grow fruit.", "The tree will grow fruit given time.", "The tree will have fruit again.", "The tree's just sitting there. Fruitless.", "It'll grow fruit, give it a second.", "Keep trying, but wait until the tree has fruit.", "Wait until the tree has fruit.", "Pick again in a bit because the tree doesn't have any fruit right now.", "There aren't any fruit on the kekklefruit tree", "You pore over each branch meticulously looking for fruit, but are still coming back empty.", "You scour every branch of the tree for fruit, but still came back empty-handed.", "You try caressing the tree's body. It didn't work.", "You try tugging on one of the branches. It doesn't work.", "You started picking the fruit when you heard a sound or something that distracted you and made you forget what you were doing. Then, you remember: you tried to pick a fruit. You take a deep breath and decide to try again", "You could have sworn you were wrapping your hand around a sweet kekklefruit, but it seemingly disappeared from reality right as you grasped it??", "No fruit.", "Trying again, there were no fruit to pick.", "There were no fruit to pick.", "There was no fruit for you to pick.", "There isn't anything that looks like a fruit growing on the tree, yet...", "The fruit just isn't edible yet.", "It's not ready, keep trying though.", "It's not ready...!", "It's not done.", "Wait, give it time to grow fruit.", "Just wait for the fruit to grow.", "Wait for the fruit to grow. But don't wait until someone else grabs it first.", "You have to give the precious kekklefruits time to grow.", "Hold on, they're growing.", "Hold on.", "Watch the kekklefruit to make sure they have grown before picking them from the tree.", "Don't pick the kekklefruit until they're grown.", "The kekklefruit are still maturing.", "There isn't a pickable kekklefruit.", "You don't see any.", "I don't see any.", "It's like every time the tree grows fruit somebody is stealing it.", "Every time the tree grows fruit, somebody picks it.", "There's no fruit, so wait.", "Keep trying to get fruit.", "The fruit will be fine... when it grows.", "The fruit will do fine. Then, pick it.", "The fruit looks like you could almost pick it!", "Picking is not available right now.", "Please try again later.", "No fruit.", "Look here. Look there. No fruit anywhere.", "The fruit just isn't there to pick.", "You can't pick the fruit because it's not ready to be picked.", "Don't pick the fruit until it finishes growing into a pickable fruit.", "Let the fruit grow, first.", "The tree is out of fruit.", "The tree's fruit count remains 0.", "Tree fruit unavailable.", "You try, but there's no fruit.", "The tree ran out of fruit.", "No pickable fruit.", "People took the tree's fruit.", "The tree was picked over entirely.", "The tree just didn't have any more fruit to give.", "The tree asked you to try again, please.", "The tree branches looked sinister with no fruit on them at all.", "Without its fruit, the tree looks kinda scary.", "The tree doesn't have fruit anymore.", "The tree doesn't have fruit anymore. It looks weird that way.", "The tree's long slender branches reached high into the sky, looking nude without their fruit.", "Robbed of its precious fruit, the tree loomed despondently.", "The tree doesn't \"have\" fruit.", "After much consideration, you decide to maybe sayer a prayer for the tree.", "The action you have taken upon the tree was fruitless.", "No fruit, just now, not on the tree, here.", "You didn't get any fruit.", "The tree's fruit supply is depleted.", "This tree has a strange animosity.", "They took it all.", "There's no more fruit.", "Don't have any fruit.", "You just have to wait for kekklefruit.", "Wait for fruit.", "Wait for fruit growth.", "Wait for the fruit growth.", "Wait for fruit to grow on the tree.", "Those tree fruit are just hard to come by right now.", "I haven't seen a fruit", "It didn't produce fruit yet.", "You're still waiting for it to produce fruit.", "You're still waiting for fruit to grow.", "The tree is bone dry! Sans fruit!", "God, you'd do anything for a fruit. But not yet.", "Just be patient.", "Be patient.", "Wait patiently for fruit.", "Your fruit will grow, just wait.", "Waiting for your fruit to grow.", "Pick the next fruit that grows.", "Pick a fruit after it grows.", "Get a fruit from the tree after they grow.", "Pick again after the tree has had time to grow fruit.", "Not yet, it's hasn't grown fruit yet.", "Wait a second, no fruit yet.", "You can has fruit after it grows.", "Try again repeatedly to see if you get a fruit or not.", "Try again, it grows fruit periodically.", "Wait", "No fruit just yet", "No fruit yet", "Noooot yet", "Just a little longer.", "Wait between each pick for fruit to grow.", "After a wait, fruit will grow on the tree.", "The tree's gonna grow plenty of fruit, just give it time.", "Without its fruit, this tree is looking slightly eerie.", "What a funny-looking tree without its fruit!", "You notice the way the tree looks without fruit.", "You notice the tree looks kinda odd with no fruit like that.", "You don't like looking at the tree when it doesn't have fruit.", "You express your desire for the tree to grow fruit.", "You're waiting for the fruit to grow so you can pick it.", "Ugh, no fruit..", "Keep trying to get fruit.", "The fruit gave under the forces... I guess it wasn't ready yet.", "The fruit's branches hadn't decided to tree yet.", "The fruit wasn't available.", "It's almost time for a fruit to be pickable.", "Should be a fruit pickable soon.", "It'll grow fruit for you to pick in a minute.", "It'll grow in a minute.", "It'll grow.", "It'll grow fruit.", "The fruit will grow on the tree's BRANCHES.", "You don't spy any fruit on the tree's branches.", "The tree's branches can be seen in detail without the fruit interrupting our view.", "You make sure, and there's no fruit on the tree.", "You search the tree for fruit, and are 100% sure there are none.", "You're 100% sure there aren't any pickable fruit yet.", "You try, but don't find any fruit.", "You look, but don't find any fruit.", "Can't see any FRUIT.", "Couldn't /pick", "It's just that there aren't any fruit on the tree.", "These things take time.", "These things can sometimes take time.", "You can't rush these things.", "You practice picking the fruit (there aren't any on the tree)", "It doesn't look like there are any fruit on the tree.", "0 kinds of fruit are growing on this tree", "You feel good about the possibility of fruit growing on the tree eventually.", "You whisper for the tree to grow nice fruits.", "This is exciting! It'll grow fruit that you can eat.", "Alas, the tree wasn't currently displaying any fruit.", "Any fruit on the tree? No...", "No fruit? Okay...", "A quick scan shows no fruits on the tree that are ready for picking.", "You check and don't see any fruit.", "You give the tree a once-over to see if any fruit area ready. Not yet, but you are resolute...", "You check on the tree. No fruit, back to whatever it was you were doing.", "If this tree doesn't grow fruit soon you might start to get crazy.", "Actually, what if the tree doesn't grow any more fruit?", "What if the fruit never grows again?", "Ok, there's no fruit.", "You consider again what might happen if the fruit stopped growing.", "There is no fruit, so you just ponder about the tree.", "There's no fruit, so you just consider it for a moment.", "There's no fruit, so you think about the tree situation for another moment and then move on.", "There are no fruits, so you decided to talk about something else.", "Missed!", "Didn't chance upon a fruit.", "Didn't find the fruit.", "No fruit found.", "It's gonna be good fruit.", "The fruit from the tree will never change.", "The fruit from this tree will always grow, as long as the tree stands, at a pretty steady rate.", "You survey the tree for fruit, coming back empty-handed.", "It's not like the tree is on strike from producing fruit.", "The valuable fruit are not present.", "The revered fruit have been lost.", "You study the tree's fruitless branches.", "Good view of the branches with no fruit on them.", "Patiently and rapidly retry your command.", "You use a phone app to make sure the tree doesn't have any pickable fruit.", "You scan each fruit, finding no candidates for picking.", "The fruit of the tree are too young and supple to pick.", "You can't reach that one fruit up there.", "Oh, there's one. But you can't reach it.", "You trying to pick fruit that isn't there.", "Where do you see fruit?", "Looks like the fruit aren't out today.", "You wonder what the fruit are doing.", "You wonder when the tree will bear fruit.", "You wonder when a fruit will be ready.", "You wonder if a fruit will grow.", "You think about how many fruits this tree must have produced with nobody even counting it or anything.", "You wonder how many fruit this tree has grown in its lifetime.", "It's not that time, yet.", "It's not time.", "Not... yet.", "The auto-analysis didn't show any completed fruit.", "The fruit aren't complete.", "Waiting for fruit growth completion.", "Please wait for the fruit to be ready.", "Don't rush it.", "Slow down, there aren't any fruit to pick yet.", "You check the fruit indicator under your favorite kekklefruit tree. It reads: 0.", "Nope, don't see any.", "Is something taking all the fruit?", "I guess somebody else picked the fruit first.", "Somebody else got to it first.", "This", "If you focus, the fruit grows faster.", "You meditate to make the fruit grow faster.", "What you are doing doesn't make the fruit grow.", "Don't be too greedy.", "Fruit pick intercepted.", "Intercepted, try again.", "Denied. Try again for success.", "False success message, no fruit actually picked", "I swear it'll grow fruit eventually lol", "You don't know how long it'll take before fruit grows on the tree.", "You don't know how long before the fruit will grow on the tree.", "Nobody knows how long it takes for fruit to grow on the tree.", "The tree says 'no'", "No fruit, but that's okay.", "Don't worry about it.", "No fruit but it's quite alright.", "No fruit right now.", "Not a good time to pick fruit.", "It's probably not a good idea", "Ha ha don't worry!", "Lol don't sweat it", "It's alright! It's just a temporary lack of fruit!", "Seems like famine again", "What's wrong with the tree?", "Is the tree okay?", "What's this tree for...?", "Is something wrong with the tree?", "Try singing the tree a song.", "The tree doesn't look like it's up to it righ tnow.", "The tree doesn't look so good.", "The tree doesn't feel so good.", "The tree doesn't look like it feels so good.", "The tree isn't ready right now!", "Back off and give the tree some time!!", "Hands off until the tree grows fruit.", "Patience.", "Impatience.", "no", "Fruit not available", "There are no fruits there.", "No fruits upon the tree!", "That didn't work.", "Nope, no fruit.", "You thought you spied a fruit, but were unable to procure any.", "You climb all over that tree and don't find a single pickable", "You wouldn't steal a fruit from a tree with no fruit.", "Are you sure there aren't any fruit just lying around on the ground that you can /take?"]; - var message = options[Math.floor(Math.random() * options.length)]; - sendChat(message); - } - }); - } else { - sendChat("You can't interact with the tree from "+location+"."); - } - } - }); - return; - }, false); - - bot.addCommand(['tree', 'fruit', 'fruits'], 0, msg => { - db.getLocation(msg.p._id, location => { - if(location === "outside") { - db.getFruits(function(num_fruits) { - sendChat("Friend "+msg.p.name+": " + num_fruits + "."); - }); - } else { - sendChat(rando("You can't even see it from "+location+", let alone any fruit that may theoretically have grown on it.", "", "You don't see a tree "+location+".", "None in sight.")); - } - }); - }, false); - - bot.addCommand(['hug'], 0, msg => { - var part = findParticipantByNameFuzzy(msg.argcat()); - if (part) { - let hug = rando("a squeeze", "an affectionate hug", - "a deep, passionate hug", `a "normal" hug`, "a snug hug", "a new hug", "a special embrace", "caring hug"); - sendChat(`Our friend ` + msg.p.name + ` gave ` + part.name + ' ' + hug); - } else { - db.getLocation(msg.p._id, location => { - var message = "Friend " + msg.p.name + " missed and the hug went everywhere."; - if (location == 'outside' && Math.random() < 0.25) { - message += " Some of it went into the water and love was felt by the fish inside."; - } - sendChat(message); - }); - } - }, false); - - bot.addCommand(['kiss'], 0, msg => { - var part = findParticipantByNameFuzzy(msg.argcat()); - if (part) { - let kiss = rando("a kiss", "a sloppy smooch", - "a deep, passionate french kiss", `a big grandma kiss on the cheek`, "a big smooch on the cheek", "a new kiss", "a lasting mark on their face", "caring kiss"); - sendChat(`Our friend ` + msg.p.name + ` gave ` + part.name + ' ' + kiss); - } else { - db.getLocation(msg.p._id, location => { - var message = "Friend " + msg.p.name + " missed and the kiss went everywhere."; - if (location == 'outside' && Math.random() < 0.25) { - message += " Some of it went into the water and love was felt by the fish inside."; - } - sendChat(message); - }); - } - }); - - bot.addCommand(['bonk'], 0, msg => { - var part = findParticipantByNameFuzzy(msg.argcat()); - if (part) { - let bonk = rando("a bonk", "a slap", - "a deep, passionate bonk", `a "normal" bonk`, "a bonk on the cheek", "a new bonk", "a lasting mark on their face", "caring bonk"); - sendChat(`Our friend ` + msg.p.name + ` gave ` + part.name + ' ' + bonk); - } else { - db.getLocation(msg.p._id, location => { - var message = "Friend " + msg.p.name + " missed and the bonk went everywhere."; - if (location == 'outside' && Math.random() < 0.25) { - message += " Some of it went into the water and love was felt by the fish inside."; - } - sendChat(message); - }); - } - }); - - bot.addCommand(['give'], 0, msg => { - var thief = msg.p; - var victim = findParticipantByNameFuzzy(msg.args[0]); - if (!victim) { - sendChat("Friend " + thief.name + " missed"); - return; - } - if (victim._id == thief._id) { - sendChat("Friendly friend " + thief.name + " fudged"); - return; - } - var target_fish = msg.argcat(1); - db.getFish(thief._id, function (thief_fish) { - db.getFish(victim._id, function (victim_fish) { - if (victim_fish.length >= TOO_MANY_FISH) { - sendChat("Friend " + victim.name + " is carrying too much."); - return; - } - if (thief_fish.length > 0) { - var idx = -1; - var arg = target_fish.trim().toLowerCase(); - for (var i = 0; i < thief_fish.length; i++) { - if (arg == "" || thief_fish[i].toLowerCase().indexOf(arg) !== -1) { - idx = i; - break; - } - } - if (idx == -1) { - sendChat("Friend " + thief.name + ": You don't have a " + arg + "that you can /give like that."); - return; - } - var thefish = thief_fish[idx]; - thief_fish.splice(idx, 1); - victim_fish.push(thefish); - - sendChat("Our friend" + thief.name + " gave " + victim.name + " his/her " + thefish); - db.putFish(thief._id, thief_fish); - db.putFish(victim._id, victim_fish); - } else { - sendChat("Friend " + thief.name + ": You don't have the fish to give."); - } - }); - }); - return; - }, false); - - // bot.addCommand(['/give_'], 0, msg => { - - // }, true); - - bot.addCommand(['/bestow'], 0, msg => { - var thief = msg.p; - var victim = findParticipantByNameFuzzy(msg.args[0]); - if (!victim) { - sendChat("Friend " + thief.name + " missed"); - return; - } - if (victim._id == thief._id) { - sendChat("Friendly friend " + thief.name + " fudged"); - return; - } - var target_fish = msg.argcat(1); - db.getFish(thief._id, function (thief_fish) { - db.getFish(victim_id, function (victim_fish) { - if (victim_fish.length >= TOO_MANY_FISH) { - sendChat("Friend " + victim.name + " is carrying too much."); - return; - } - if (thief_fish.length > 0) { - var idx = -1; - var arg = target_fish.trim().toLowerCase(); - for (var i = 0; i < thief_fish.length; i++) { - if (arg == "" || thief_fish[i].toLowerCase().indexOf(arg) !== -1) { - idx = i; - break; - } - } - if (idx == -1) { - sendChat("Friend " + thief.name + ": You don't have " + arg + "."); - return; - } - var thefish = thief_fish[idx]; - thief_fish.splice(idx, 1); - victim_fish.push(thefish); - - sendChat("Our friend" + thief.name + " bestowed " + victim.name + " his/her " + thefish); - db.putFish(thief._id, thief_fish); - db.putFish(victim._id, victim_fish); - } else { - sendChat("Friend " + thief.name + ": You don't have the fish to bestow."); - } - }); - }); - return; - }); - - // bot.addCommand(['/bestow_'], 0, msg => { - - // }, true); - - -} +const MPPClient = require("./MPPClient"); +const Color = require('./Color'); +const crypto = require('crypto'); +const fs = require('fs'); + +module.exports = (bot) => { + bot.addCommand = async (cmd, minargs, func, hidden) => { + if (typeof cmd !== 'object') cmd = [cmd]; + bot.commands.set(cmd, { + cmd: cmd, + minargs: typeof minargs == 'number' ? minargs : 0, + func: typeof func == 'function' ? func : () => {}, + hidden: typeof hidden == 'boolean' ? hidden : false + }); + } + + var fish = ["Angelfish", "Arapaima", "Arowana", "Barbel Steed", "Barred Knifejaw", "Bitterling", "Black Bass", "Blowfish", "Blue Marlin", "Bluegill", "Brook Trout", "Butterflyfish", "Can", "Carp", "Catfish", "Char", "Cherry Salmon", "Clownfish", "Coelacanth", "Crawfish", "Crucian Carp", "Dab", "Dace", "Dorado", "Eel", "Football fish", "Freshwater Goby", "Frog", "Gar", "Giant Snakehead", "Giant Trevally", "Goldfish", "Guppy", "Hammerhead Shark", "Horse Mackerel", "Jellyfish", "Key", "Killifish", "King Salmon", "Koi", "Large Bass", "Loach", "Lobster", "Mitten Crab", "Moray Eel", "Napoleonfish", "Neon Tetra", "Nibble Fish", "Oarfish", "Ocean Sunfish", "Octopus", "Olive Flounder", "Pale Chub", "Pike", "Piranha", "Pond Smelt", "Popeyed Goldfish", "Puffer Fish", "Rainbow Trout", "Ray", "Red Snapper", "Ribbon Eel", "Saddled Bichir", "Salmon", "Saw Shark", "Sea Bass", "Sea Butterfly", "Seahorse", "Shark", "Small Bass", "Softshell Turtle", "Squid", "Stringfish", "Surgeonfish", "Sweetfish", "Tadpole", "Tuna", "Whale Shark", "Yellow Perch", "Zebra Turkeyfish"]; + var fish_without_images = ["Blowfish", "Brook Trout", "Butterflyfish", "Can", "Giant Trevally", "Key", "Large Bass", "Lobster", "Mitten Crab", "Moray Eel", "Napoleonfish", "Neon Tetra", "Nibble Fish", "Oarfish", "Pike", "Ray", "Ribbon Eel", "Saddled Bichir", "Saw Shark", "Small Bass", "Softshell Turtle", "Surgeonfish", "Tadpole", "Whale Shark"]; + var newfish = require("./newfish.json"); + var pokedex = require("./pokedex.json"); + var untakeable = ['bed', 'chair', 'couch', 'desk', 'dining table', 'fireplace', 'floor lamp', 'flower pot', 'food cart', 'garden', 'grand piano', 'lamp', 'lawn mower', 'mailbox', 'potted plant', 'refrigerator', 'sink', 'sofa', 'stairs', 'stool', 'table', 'television', 'toilet', 'tv', 'vase', 'wardrobe', 'window', 'workbench']; + + var sendChat = MPPClient.sendChat; + var blockHelpUntil = 0; + + var locations = ["sleep", "outside", "inside", "shop"] + + function underline(text) { + var result = ""; + for(var i = 0; i < text.length; i++) { + result += text[i]+"̲"; + } + return result; + } + + function listOff(arr) { + if(arr.length === 0) return "(none)"; + var map = {}; + map.__proto__.inc = function(key) { + if(key.indexOf("(") !== -1) + key = key.substr(0, key.indexOf("(") - 1); + if(typeof(this[key]) === "undefined") { + this[key] = 1; + } else { + this[key]++; + } + } + for(var i = 0; i < arr.length; i++) { + map.inc(arr[i]); + } + var count = 0; + for(var j in map) { + if(map.hasOwnProperty(j)) ++count; + } + var result = ""; + var i = 0; + for(var j in map) { + if(!map.hasOwnProperty(j)) continue; + if(i && i !== count - 1) result += ", "; + if(i && i === count - 1) result += " and "; + result += "◍"+j+" x"+map[j]; + ++i; + } + return result; + } + + function listArray(arr) { + var result = ""; + for(var i = 0; i < arr.length; i++) { + if(i && i !== arr.length - 1) result += ", "; + if(i && i === arr.length - 1) result += ", and "; + result += arr[i]; + } + return result; + } + + function startupSound() { + MPPClient.client.sendArray([{m: "n", t: Date.now()+MPPClient.client.serverTimeOffset, + n: [{n:"e6",v:0.1},{d:50, n:"c7",v:0.2}]}]); + } + + function rando(arr) { + if(!Array.isArray(arr)) arr = Array.from(arguments); + return arr[Math.floor(Math.random() * arr.length)]; + } + + function magicRando(arr) { + var result = ""; + for(var i = 0; i < 256; i++) { + result = arr[Math.floor(Math.random() * arr.length)]; + if(result.indexOf("(") !== -1) + result = result.substr(0, result.indexOf("(") - 1); + var md5 = crypto.createHash("md5"); + md5.update(result + "intermediaflatulencebuzzergiantroosterface"); + var hash = md5.digest(); + var random = hash.readUInt8(0) / 0xff + 0.5; + if(new Date().getDay() === 4) random += 0.25; + if(random > 1) random = 1; + if(Math.random() < random) { + break; + } + } + return result; + } + + function sanitize(string) { + const map = { + '&': '&', + '<': '<', + '>': '>', + '"': '"', + "'": ''', + "/": '/', + }; + const reg = /[&<>"'/]/ig; + return string.replace(reg, (match) => (map[match])); + } + + if(0) for(var i = 0; i < fish.length; i++) { + result = fish[i]; + if(result.indexOf("(") !== -1) + result = result.substr(0, result.indexOf("(") - 1); + var md5 = crypto.createHash("md5"); + md5.update(result + "intermediaflatulencebuzzergiantroosterface"); + var hash = md5.digest(); + var random = hash.readUInt8(0) / 0xff + 0.5; + if(random > 1) random = 1; + process.stdout.write(result+": "+random+". "); + } + + function kekklefruit_growth() { + var minute = 60 * 1000; + var ms = 1000 + Math.random() * 120 * minute; + setTimeout(function() { + if(Math.random() < 0.5) { + db.getFruits(function(num_fruits) { + db.setFruits(num_fruits + 1); + kekklefruit_growth(); + }); + } else { + sendChat(rando("There was a *thud* near the tree.", "Something thumped nearby.", "Did you hear a sort of whump sound?", "Did you hear a fruit landing on the ground or something?", "*plop* a kekklefruit just falls from the tree onto the ground.")); + db.put("look.outside.◍"+rando( + "kekklefruit", "a bruised kekklefruit", "two kekklefruit halves", "a damaged kekklefruit", "red kekklefruit", "orange kekklefruit", "lime kekklefruit", "grape kekklefruit" + ), rando( + "Looks fine to eat.", "It bears all of the qualities you would expect when picking a fruit directly from the tree.", "A priceless treasure from our beloved kekklefruit tree.", "It has no special markings or engravings, or other signs of molestation.", "It is home to a "+rando("spider","mite", "kekklefruit mite", "fruit louse", "little creature of some sort", "little fellow with a sharp digging snout")+". Bonus!", "The fall doesnt' appear to have affected its potency.", "It's beautiful, and bred to give you a fishing boost.", "This had to have come from the tree, right?" + )); + } + }, ms); + } + + kekklefruit_growth(); + + function rainstorm() { + var minute = 60 * 1000; + var ms = 1000 + Math.random() * 72 * 60 * minute; + setTimeout(function() { + var duration = 6 + Math.random() * 24; + for(var i = 0; i < duration; i++) { + // sendChat("1"); + if(Math.random() > 0.5) { + setTimeout(function() { + db.getFruits(function(num_fruits) { + db.setFruits(num_fruits + 1); + }); + }, 3000 + Math.random() * minute); + } + } + rainstorm(); + }, ms); + } + + rainstorm(); + + function catchSomething(part) { + db.getFish(part._id, function(myfish) { + if(myfish.length > 10 && Math.random() < 0.1) { + catchTrap(part); + } else { + catchFish(part); + } + }); + } + + function catchFish(part, silent) { + var entry = "Missingno"; + if(Math.random() > 0.005) { + var type = magicRando(fish); + if((new Date().getDay() & 1) && Math.random() < 0.25) type = "Small Bass"; + var size = (["small", "medium-sized", "rather large", "large"])[Math.floor(Math.random()*4)]; + if(size == "large" && Math.random() > 0.975) size = "Golden"; + if(!silent) sendChat("Our good friend " +part.name+" caught a "+size+" "+type + "! ready to /eat or /fish again"); + + entry = type + " (" + size + ")"; + + if(fish_without_images.indexOf(type) == -1) { + fs.readFile("./password.txt", function(err, data) { + if(err) throw err; + var text = part.name+" caught a "+size+" "+type + "!"; + console.log(type); + // client.sendArray([{m: "admin message", password: new String(data).trim(), + // msg: {"m": "notification", "id":"Fish-caught","targetUser": "room", "target": "#piano", "duration": "7000", "class":"short","html": "
"+sanitize(text)}}]); + }); + } + } else { + // rarer fish + var type = magicRando(newfish || ["error medal"]); + var stuff = ["Special catch!", "Let us all give recognition.", "Ahoy!", "Wow!", "Nice.", "Nice!", "Great!", "Sweet!", "Sweet,", "That's cool,", "Cool!", "Neat...", "Neat!", "Wow,", "Rad.", "Funk yeah!!", "omg", "like whoah,","Great success.","Good news everyone,","I have something importrant to say.","I have something important to say.","This is cool news..","I have something to report:","Good job!","Here's something...","Whoah!!","Oh! Oh! This is a good one.","Check it","Luck!!", "Lucky!", "In luck,","Excellent.","Oh my!","A rarer fish.","Rarer fish...","Rare!","Rare fish!","An uncommon fish!!","This is less common!","Score!","Uncommon fish!", "Uncommon fish caught!","Uncommon get!","Uncommon fish get!"]; + var exclamation = stuff[Math.floor(Math.random() * stuff.length)]; + if(!silent) sendChat(exclamation+" "+part.name+" caught a "+type + "."); + + entry = type; + } + + db.getFish(part._id, function(myfish) { + myfish.push(entry); + db.putFish(part._id, myfish); + + if(myfish.length > 30 && myfish.length % 5 === 0) { + if(!silent) sendChat("Our friend " +part.name+"'s fish sack grows ever larger."); + } + }); + }; + + function bonusTry(part) { + var key = "fishing~"+part._id; + var bonus = getBonusById(part._id); + if(bonus > 0) { + let time = 5000 + Math.random() * 10000 + Math.max((2-bonus) * 10000, 0); + setTimeout(function() { + db.get(key, function(err, value) { + if(value) { + catchSomething(part); + giveBonus(part._id, -0.1); + db.del(key); + } + }); + }, time); + } + } + + function catchTrap(part) { + var types = ["Blue Whale", "Giant Squid", "Giant Pacific Octopus", "Giant Oceanic Manta Ray", "Southern Elephant Seal", "Sperm Whale", "Giant Oarfish", "Whale Shark", "Japanese Spider Crab"]; + var type = magicRando(types); + sendChat("Our friend " +part.name+" is getting a bite."); + sendChat("Unfortunate catch! It's a "+type+"...!"); + types = ["boom", "crash", "kaboom", "smash", "kersplash"]; + sendChat(types[Math.floor(Math.random()*types.length)]+"... "+types[Math.floor(Math.random()*types.length)]+"..."); + sendChat("Some of the fish were lost in the disaster..."); + + //sendChat("(not really. that part is disabled. just testing)"); + + db.getFish(part._id, function(myfish) { + var org = myfish.length; + var keep = Math.floor(org * 0.2); + myfish = myfish.slice(0, keep + 1); + db.putFish(part._id, myfish); + }); + }; + + function catchPokemon(part, silent) { + var pok = pokedex[Math.floor(Math.random() * pokedex.length)]; + db.getPokemon(part._id, function(pokemon) { + pokemon.push(pok.name); + var count = pokemon.length; + db.putPokemon(part._id, pokemon); + + var key2 = "name to user id~"+part.name+"~"+Date.now().toString(36); + db.put(key2, part._id); + + var key2 = "user id to name~"+part._id+"~"+Date.now().toString(36); + db.put(key2, part.name); + + if(!silent) + sendChat(part.name + " received a " + pok.name.toUpperCase()+" for joining! By my count, "+part.name+" now has "+count+" individual pokemón."); + + //sendChat("/hug " + part.name.toLowerCase()); + }); + }; + + function findParticipantByName(name) { + if(!name || name.trim() == "") return undefined; + for(var id in MPPClient.client.ppl) { + if(MPPClient.client.ppl.hasOwnProperty(id) && MPPClient.client.ppl[id].name === name) { + return MPPClient.client.ppl[id]; + } + } + return undefined; + }; + + function findParticipantByNameCaseInsensitive(name) { + if(!name || name.trim() == "") return undefined; + var part = findParticipantByName(name); + if(!part) { + name_lc = name.toLowerCase(); + for (let p of Object.values(MPPClient.client.ppl)) { + if(p.name.toLowerCase() === name_lc) { + part = p; + } + } + } + return part; + }; + + function findParticipantByNameFuzzy(name) { + if(!name || name.trim() == "") return undefined; + name = name.toLowerCase(); + var part = findParticipantByNameCaseInsensitive(name); + for(var id in MPPClient.client.ppl) { + if(MPPClient.client.ppl.hasOwnProperty(id) && MPPClient.client.ppl[id].name.toLowerCase().indexOf(name) === 0) { + part = MPPClient.client.ppl[id]; + break; + } + } + for(var id in MPPClient.client.ppl) { + if(MPPClient.client.ppl.hasOwnProperty(id) && MPPClient.client.ppl[id].name.toLowerCase().indexOf(name) !== -1) { + part = MPPClient.client.ppl[id]; + break; + } + } + + // new + if (!part) { + // for (var id in MPPClient.client.ppl) { + // let p = MPPClient.client.ppl[id]; + // if (!p) continue; + // if (p._id.toLowerCase().includes(name.toLowerCase())) { + // part = p; + // break; + // } + // } + for (var p of Object.values(MPPClient.client.ppl)) { + if (!p) continue; + if (p._id.toLowerCase().includes(name.toLowerCase())) { + part = p; + break; + } + } + } + + return part; + }; + + var fishing_bonus_by_id = {}; + function getBonusById(id) { + if(fishing_bonus_by_id.hasOwnProperty(id)) { + return fishing_bonus_by_id[id]; + } else { + return 0; + } + } + function giveBonus(id, bonus) { + bonus += getBonusById(id); + fishing_bonus_by_id[id] = bonus; + } + + var sandiness_by_id = {}; + function getSandinessById(id) { + if(sandiness_by_id.hasOwnProperty(id)) { + return sandiness_by_id[id]; + } else { + return 0; + } + } + function giveSandiness(id, sandiness) { + sandiness += getSandinessById(id); + sandiness_by_id[id] = sandiness; + } + setInterval(function() { + for(var i in sandiness_by_id) { + if(sandiness_by_id.hasOwnProperty(i)) { + sandiness_by_id[i] = Math.max(sandiness_by_id[i] - 1, 0); + } + } + }, 24*60*60000); + + setInterval(function() { + db.put("look.outside.◍Sand", "We don't talk about that."); + }, 6000); + + function randomizeAllColors() { + for (let p of Object.values(MPPClient.client.ppl)) { + MPPClient.client.sendArray([{m:'setcolor', id:p._id, color:randomColor()}]); + } + } + + function swapAllColors() { + let colorList = []; + for (let p of Object.values(MPPClient.client.ppl)) { + colorList.push(p.color); + } + let index = 0; + let lastColor = colorList[colorList.length - 1]; + for (let p of Object.values(MPPClient.client.ppl)) { + MPPClient.client.sendArray([{m:'setcolor', id:p._id, color:lastColor}]); + lastColor = colorList[index]; + } + } + + bot.addCommand(['help', 'about', 'commands'], 0, msg => { + if (Date.now() < blockHelpUntil) return; + blockHelpUntil = Date.now() + 10000; + //sendChat("This is a test to see what leveldb is like. Commands: /put , /get , /del , /read [ []] \t"+underline("Fishing")+": \t/fish, /cast (starts fishing), /reel (stops fishing), /caught [name] (shows fish you've caught), /eat (eats one of your fish), /give [name] (gives fish to someone else), /steal [name] (steals fish from someone else)"); + // sendChat(underline("Fishing")+": \t/fish, /cast (starts fishing), /reel (stops fishing), /caught [name] (shows fish you've caught), /eat (eats one of your fish), /give [name] (gives fish to someone else), /give_[number] [name] (give up to 100 at a time), /pick (picks fruit from the tree), /look [object] (look at surroundings), /yeet [item] (yeet items into surroundings), /take [object] (take items from surroundings)"); + // sendChat(underline("Fishing")+": \t/fish, /cast (starts fishing), /reel (stops fishing), /caught [name] (shows fish you've caught), /eat (eats one of your fish), /give [name] (gives fish to someone else), ~~/give_[number] [name] (give up to 100 at a time)~~, /pick (picks fruit from the tree), /look [object] (look at surroundings), /yeet [item] (yeet items into surroundings), /take [object] (take items from surroundings)"); + sendChat(underline("Fishing")+": /fish, /cast (starts fishing), /reel (stops fishing), /caught [name] (shows fish you've caught), /eat (eats one of your fish), /give [name] (gives fish to someone else), ~~/give_[number] [name] (give up to 100 at a time)~~, /pick (picks fruit from the tree), /look [object] (look at surroundings), /yeet [item] (yeet items into surroundings), /take [object] (take items from surroundings)"); + }, false); + + bot.addCommand('qmyid', 0, (msg, admin) => { + if (!admin) return; + console.log(MPPClient.client.user.id); + sendChat(`Friend ${msg.p.name}: Your ID is ${msg.p.id}`); + }, false); + + bot.addCommand('name', 0, (msg, admin) => { + if (!admin) return; + // DiscordClient.client.guilds.cache.get('841331769051578413').members.cache.get(DiscordClient.client.user.id).setNickname(msg.argcat()); + MPPClient.client.sendArray([{m:'userset', set: {name: msg.argcat()}}]); + }, false); + + bot.addCommand('ch', 0, (msg, admin) => { + if (!admin) return; + var num = parseInt(msg.argcat() || 1) || 1; + for (var i = 0; i < num; i++) { + setTimeout(function() { + catchFish(msg.p, true); + }, i * 100); + } + }, false); + + bot.addCommand('_20k', 0, (msg, admin) => { + if (!admin) return; + var keks = ["butter kek", "rice kek", "chocolate kek", "chocolate covered kek", "strawberry kek", "strawbarry kek", "sugar kek", "banana kek", "apple kek", "fish kek"]; + var more_keks = ["butter kek", "chocolate kek", "chocolate covered kek"]; + var arr = []; + for(var i = 0; i < 20000; i++) { + if(Math.random() < 0.25) { + arr.push(keks[Math.floor(Math.random()*keks.length)]); + } else if(Math.random() < 0.5) { + arr.push(more_keks[Math.floor(Math.random()*more_keks.length)]); + } else { + arr.push(pokedex[Math.floor(Math.random() * pokedex.length)].name); + } + } + db.appendFish(msg.argcat(), arr); + }, false); + + bot.addCommand('_sand', 0, (msg, admin) => { + if (!admin) return; + db.getFish(msg.argcat(), function(myfish) { + for(var i = 0; i < myfish.length; i++) { + myfish[i] = "Sand"; + } + db.putFish(msg.argcat(), myfish); + sendChat("What a terrible night to have a curse."); + }); + }, false); + + bot.addCommand(['ppl'], 0, msg => { + // var list = "sorry :("; + var list = ""; + for(var id in MPPClient.client.ppl) { + if(MPPClient.client.ppl.hasOwnProperty(id)) { + list += ", " + MPPClient.client.ppl[id].name; + } + } + // list = list.substring(0, list.length - 2); + sendChat("ppl: " + list); + return; + }, false); + + bot.addCommand(['color', 'colour'], 0, msg => { + if (msg.args.length == 0) return; + var color; + if (msg.args[0].match(/^#[0-9a-f]{6}$/i)) { + color = new Color(msg.args[0]); + } else { + var part = findParticipantByNameFuzzy(msg.argcat()) || msg.p; + if(part) color = new Color(part.color); + } + if (!color) return; + sendChat("Friend " + msg.p.name +": That looks like "+color.getName().toLowerCase()); + }, false); + + bot.addCommand(['pokedex', 'dex'], 0, msg => { + // var pkmn = pokedex[msg.args[0]]; + var pkmn = pokedex.find(pk => pk.id == msg.argcat() || pk.name.toLowerCase() == msg.argcat().toLowerCase()); + if(pkmn && pkmn.id) { + var text = pkmn.id + ", " + pkmn.name + " ("; + var n = 0; + for(var i in pkmn.type) { + if(n) text += " / "; + text += pkmn.type[i]; + ++n; + } + text += ") (\"" + pkmn.classification + "\")"; + sendChat(text); + } + }, false); + + bot.addCommand('fishing_count', 0, msg => { + var count = 0; + db.createReadStream({ + start: "fishing~", + end: "fishing~\xff" + }) + .on("data", function(data) { + if(data.value) ++count; + }) + .on("end", function() { + var message = "Friend " + msg.p.name+": By my count, there are "+count+" people fishing."; + if(count >= 100) message += " jfc"; + sendChat(message); + }); + return; + }, false); + + bot.addCommand('fishing', 0, msg => { + var message = ""; + db.createReadStream({ + start: "fishing~", + end: "fishing~\xff" + }) + .on("data", function(data) { + if(data.value) { + var dur = ((Date.now()-parseInt(data.value))/1000/60); + message += "🎣"+data.key.substr(8)+": "+dur.toFixed(2)+"m "; + } + }) + .on("end", function() { + sendChat(message); + }); + }, false); + + bot.addCommand('fish_count', 0, msg => { + var count = 0; + var arr = [] + db.createReadStream({ + start: "fish sack~", + end: "fish sack~~" + }) + .on("data", function(data) { + if(data.key.match(/^fish sack~[0-9a-f]{24}$/i)) { + arr.push(data); + data = data.value.split("\xff"); + for(var i = 0; i < data.length; i++) { + if(data[i].trim().length) + ++count; + } + } + }) + .on("end", function() { + var message = "Friend " + msg.p.name+": By my count, there are "+count+" fish in the fish sacks. The largest sacks are: "; + if(arr.length < 1) { + sendChat("0"); + return; + } + var results = arr.sort(function(a,b) { + return (a.value.split("\xff").length < b.value.split("\xff").length ? 1 : -1); + }); + console.log(arr[0].key, arr[1].key, arr[2].key); + + + var names = []; + var id = arr[0].key.match(/[0-9a-f]{24}/)[0]; + db.createReadStream({ + start: "user id to name~"+id+"~", + end: "user id to name~"+id+"~~" + //limit: 1 + }) + .on("data", function(data) { + names[0] = data.value; + }) + .on("end", function() { + var id = arr[1].key.match(/[0-9a-f]{24}/)[0]; + db.createReadStream({ + start: "user id to name~"+id+"~", + end: "user id to name~"+id+"~~" + //limit: 1 + }) + .on("data", function(data) { + names[1] = data.value; + }) + .on("end", function() { + var id = arr[2].key.match(/[0-9a-f]{24}/)[0]; + db.createReadStream({ + start: "user id to name~"+id+"~", + end: "user id to name~"+id+"~~" + //limit: 1 + }) + .on("data", function(data) { + names[2] = data.value; + }) + .on("end", function() { + for(var i = 0; i < 3; i++) { + if(i) message += ", "; + message += (i+1) + ". " + names[i] + ": " + (results[i].value.split("\xff").length); + } + sendChat(message); + }); + }); + }); + }); + }, false); + + bot.addCommand('names', 0, msg => { + var user_id; + var part = findParticipantByNameFuzzy(msg.argcat()); + if(!part) { + if(!msg.argcat().match(/^[0-9a-f]{24}$/)) { + sendChat("Friendly friend " + msg.p.name+": wrong"); + return; + } + user_id = msg.argcat(); + } else { + user_id = part._id; + } + var results = []; + db.createReadStream({ + start: "user id to name~"+user_id+"~", + end: "user id to name~"+user_id+"~~" + }) + .on("data", function(data) { + if(results.indexOf(data.value) === -1) + results.push(data.value); + }) + .on("end", function() { + if(results.length == 0) { + sendChat("Friend " + msg.p.name+": no results"); + return; + } + var append = ""; + if(results.length > 10) { + var len = results.length; + results = results.slice(0, 9); + append = " (and " + (len - 10) + " more)"; + } + var message = "Friend " + msg.p.name +": Found names for " + user_id + " are "; + sendChat(message+results+append); + }); + }, false); + + bot.addCommand('qids', 0, (msg, admin) => { + if (!admin) return; + // console.log(client.ppl); + // Object.values(client.ppl).forEach(part => { + // console.log(part._id+": "+part.name); + // }); + }, false); + + bot.addCommand('put', 0, (msg, admin) => { + if (!admin) return; + db.put(msg.args[0], msg.argcat(1), function(err) { + if(err) { + sendChat("our friend " + msg.p.name + " put ERR: " + err); + } else { + sendChat("our friend " + msg.p.name + " put OK: "+msg.args[0]+"=\""+msg.argcat(1)+"\""); + } + }); + }, false); + + bot.addCommand('get', 0, (msg, admin) => { + if (!admin) return; + db.get(msg.argcat(), function(err, value) { + if(err) { + sendChat("our friend " + msg.p.name + " get ERR: " + err); + } else { + sendChat("our friend " + msg.p.name + " get OK: " + msg.argcat() + "=\""+value+"\""); + } + }); + return; + }, false); + + bot.addCommand('del', 0, (msg, admin) => { + db.del(msg.argcat(), function(err) { + if(err) { + sendChat("our friend " + msg.p.name + " del ERR: " + err); + } else { + sendChat("our friend " + msg.p.name + " del OK"); + } + }); + return; + }, false); + + bot.addCommand('read', 0, (msg, admin) => { + var max_len = 2048; + var result = ""; + var count = 0; + var result_count = 0; + db.createReadStream({ + start: msg.args[0] || undefined, + end: msg.args[1] || undefined, + reverse: msg.args[2] === "reverse" || undefined + }) + .on("data", function(data) { + ++count; + if(result.length < max_len) { + ++result_count; + result += data.key+"=\""+data.value + "\", "; + } + }) + .on("end", function() { + result = result.substr(0, result.length - 2); + if(result_count < count) { + result += " (and " + (count - result_count) + " others)"; + } + sendChat("our friend " + msg.p.name + " read " + count + " records: "+result); + }); + }, false); + + bot.addCommand('startup_sound', 0, msg => { + startupSound(); + return; + }, false); + + bot.addCommand('reel', 0, msg => { + db.getLocation(msg.p._id, location => { + if(location === "outside") { + var key = "fishing~"+msg.p._id; + db.get(key, function(err, value) { + if(!value) { + sendChat("Friend " + msg.p.name+": You haven't /casted it."); + return; + } else { + sendChat("Our friend " + msg.p.name+" reel his/her lure back inside, temporarily decreasing his/her chances of catching a fish by 100%."); + db.del(key); + } + }); + } else { + sendChat("You have to /go outside to "+cmd+" your device."); + } + }); + }, false); + + bot.addCommand(['look'], 0, msg => { + db.getLocation(msg.p._id, location => { + var target = msg.argcat().toLowerCase().trim(); + db.look(location, target, entry => { + if(entry) { + var content = entry.value; + sendChat("Friend "+msg.p.name+": "+content); + } else { + sendChat("Friend "+msg.p.name+": You can't see "+target+" from "+location+".") + } + }); + }); + }, false); + + bot.addCommand(['fish', 'cast', 'fosh'], 0, msg => { + db.getLocation(msg.p._id, location => { + if(location === "outside") { + var key = "fishing~"+msg.p._id; + db.get(key, function(err, value) { + if(value) { + var dur = ((Date.now()-parseInt(value))/1000/60); + if(dur > 0.05) sendChat("Friend " + msg.p.name+": Your lure is already in the water (since "+dur.toFixed(2)+" minutes ago)."); // If you want to /cast it again, you have to /reel it in, first. (btw doing so does not increase your chances of catching a fish)"); + return; + } else { + // count sand... + db.getFish(msg.p._id, function(myfish) { + var sand_count = 0; + for(var i = 0; i < myfish.length; i++) { + if(myfish[i].toLowerCase() == "sand") sand_count++; + } + if(sand_count > 100) { + sendChat("By my count, "+msg.p.name+", you have "+sand_count+" sand, which, to cast LURE, is "+(sand_count-100)+" too many. /eat or /give some sand away in order to ")+cmd; + } else { + // normal fishing. + sendChat("Our friend " + msg.p.name+" casts LURE into a water for catching fish."); + bonusTry(msg.p); + db.put(key, Date.now().toString()); + } + }); + + } + }); + } else { + sendChat(rando("There is no water here, maybe you want to /go outside", "Not here, "+msg.p.name+"!", "That would be inappropriate while you're "+location+", "+msg.p.name+".")); + } + }); + }, false); + + bot.addCommand(['eat', 'oot'], 0, msg => { + db.getFish(msg.p._id, function(myfish) { + if(myfish.length < 1) { + sendChat("Friend " + msg.p.name+": You have no food. /fish to get some."); + return; + } + var idx = -1; + var arg = msg.argcat().trim().toLowerCase(); + for(var i = 0; i < myfish.length; i++) { + if(myfish[i].toLowerCase().indexOf(arg) !== -1) { + idx = i; + break; + } + } + if(idx == -1) { + sendChat("Friend " +msg.p.name+": You don't have a "+arg+" that's edible."); + return; + } + var food = myfish[idx]; + if(food.toLowerCase() == "sand") { + if(getSandinessById(msg.p._id) >= 10) { + sendChat("You can only "+cmd+" about 10 sand per day. Going to have to find something else to do with that sand."); + if(Math.random() < 0.1) { + sendChat("What a terrible night to have a curse."); + } + } else { + // eat sand + sendChat("Our friend "+msg.p.name+" ate of his/her sand."); + giveSandiness(msg.p._id, 1); + myfish.splice(idx, 1); + db.putFish(msg.p._id, myfish); + } + return; + } + if(food.indexOf("(") !== -1) + food = food.substr(0, food.indexOf("(") - 1); + myfish.splice(idx, 1); + db.putFish(msg.p._id, myfish); + if(food.indexOf("kek") !== -1) { + sendChat("Our friend " + msg.p.name+" ate his/her "+food+" and got a temporary fishing boost."); + giveBonus(msg.p._id, 1); + bonusTry(msg.p); + return; + } + if(Math.random() < 0.5) { + var tastes = ["fine", "sweet", "sour", "awfully familiar", "interesting", + "icky", "fishy", "fishy", "fine", "colorful", "revolting", "good", + "good", "great", "just fine", "weird", "funny", "odd", "strange", "salty", + "like chicken", "like hamburger", "like dirt", "like a sewer", "like french fries", + "cheesy", "hurty", "hot", "spicy", "a little off", "like the real thing", + "like sunshine", "\"delish\"", "supreme", "like air", "amazing", "blue", + "yellow", "like peanut butter", "delicious", "delicious", "spicy", "like grass", + "like nothing he/she had ever tasted before", "pilly", "sweaty", "like garlic", + "like people food", "salty", "wrong", "good enough for him/her", "like ham", + "like the ones at McDonalds", "like a jellybean", "like snot", "like a penny, ew", + "musical", "... fantastic", "sure enough", "right", "unusual", "a bit off", " indescribable", + "gooey", "sticky", "kawaii", "like you aren't supposed to eat it, for some reason he/she can't describe", + "like home", "like Christmas", "like Halloween", "like a fish", "like he/she expected but better", + "like it made him/her turn a shade of 'turquoise.' Upon looking in a mirror he/she finds it didn't actually do so, though. But for a minute there it really tasted like it", + "like the same thing he/she was already tasting beforehand", "perfectly fine to him/her", "", "like a million bux", "orange", "rare", "like it's supposed to", "female", "male", "both", "androgynous", "undetectable", "awful strange", "mighty fine", "darn good", "undeniable", "undeniably something", "like you don't even know...", "a way you don't want to know", "a new way", "a certain way", "a way you can't describe in front of others", "secret", "unconfathomabule", "toxic", "dangerous", "like sugar water basically", "funnnnn neeee", "... AWKWARD! 🤖", "perfect.", "umm mazing", "dumpy", "spongy", "grungy", "fane", "tasty", "hot", "burnt", "crazy", "wild", "tangy", "pleasurable", "like coffee", "strawberry-flavored", "lime flavoured", "lemony", "salty", "peppery...", "chocolatey", "gooey", "like toothpaste", "like the sweet taste of victory", "like success", "fantastical", "amazeballs", "totally fucked up", "too good to describe", "like a dream", "obscene", "inhuman", "like alien food", "like something his/her past life grandma would cook (His/her past life grandma was an alien)", "like the essence of life", "like he/she wanted it to", "not as expected", "nothing like expected", "as you would expect", "like the perfect thing to celebrate the occasion", "so peculiar that he/she now wishes he/she had /yeeted it instead", "like what it was", "like home", "like the old days", "like the past", "like the future", "like fast food joint", "spicy", "too spicy", "too good", "like it smelled", "the same way it smelled", "like the beach", "like fish from /fishing", "dandy", "supreme", "bootylicious", "disconcerting"]; + var taste = tastes[Math.floor(Math.random()*tastes.length)]; + sendChat("Our friend " + msg.p.name+" ate "+food+". It tasted "+taste+"."); + } else { + function rrggbbrand(){var a = Math.floor(Math.random() * 256).toString(16); return a.length < 2 ? "0"+a : a} + var color = "#"+rrggbbrand()+rrggbbrand()+rrggbbrand(); + // client.sendArray([{m: "admin message", password: "amogus", + // msg: {m: "color", _id: msg.p._id, color: color}}]); + // DiscordClient.client.guilds.cache.get("841331769051578413").roles.cache.forEach(r => { + // if (r.name == msg.p._id) { + // r.edit({ + // color: color + // }); + // } + // }) + + MPPClient.client.sendArray([{ + m: 'setcolor', + _id: msg.p._id, + color: color + }]); + + sendChat("Our friend " + msg.p.name+" ate his/her "+food+" and it made him/her turn "+(new Color(color).getName().toLowerCase())+"."); + } + }); + }, false); + + bot.addCommand(['caught', 'sack'], 0, msg => { + var part = findParticipantByNameFuzzy(msg.argcat()) || msg.p; + + db.getFish(part._id, function(myfish) { + var message = ""; + message = "Contents of "+part.name+"'s fish sack: "+listOff(myfish) + message; + sendChat(message); + }); + }, false); + + bot.addCommand(['go'], 0, msg => { + db.getLocation(msg.p._id, location => { + var target = msg.argcat().toLowerCase().trim(); + db.get('sit~' + msg.p._id, (err, sit) => { + if (sit) { + sendChat(`My dude, ${msg.p.name}, you can't go anywhere while sitting.`); + return; + } + if(!locations.includes(target)) { + sendChat("Where is "+target+"?"); + return; + } + if(target === location) { + sendChat("My dude, "+msg.p.name+", you're already there, man."); + return; + } + if(location === "sleep") { + sendChat(msg.p.name+" woke up "+target+"."); + } else { + sendChat(msg.p.name+" went "+target+"."); + } + location = target; + db.setLocation(msg.p._id, location); + }); + }); + }, false); + + bot.addCommand(['yeet'], 0, msg => { + // todo: location-based yeeting + db.getFish(msg.p._id, function(myfish) { + db.getLocation(msg.p._id, location => { + if(location === "outside") { + var arg = msg.argcat().trim().toLowerCase(); + var idx = -1; + for(var i = 0; i < myfish.length; i++) { + if(myfish[i].toLowerCase().indexOf(arg) !== -1) { + idx = i; + break; + } + } + if(idx === -1) { + idx = Math.floor(Math.random() * myfish.length); + } + var item = myfish[idx] || "booger"; + if(myfish.length < 1) { + var messages = [" yeeted themself", " yeeted themself'st", " did the thing", " slipped", " blasted off to the aboves", " was physically catapulted into the expansive yonder", "'s corporeal embodiment wrote a check its immobile predisposition couldn't cash", " tried to get away", " yeeted", " yeated", "yeted", " yeet", " YEET", " yeeted the whole thing", " yeeted it entirely", " yeeet", " yes", " Great!", " Terriffic!", " Fantastic!", " very good", " BRILLIANT", " *applause*", " :D", " yeeted like it's 2014", " tried to bring back yeet", " tested positive for yeet", " contracted yeat", " admitted da yeet", ".", " tried to yeet him/her self", " successfully yeeted", " briskly elevated into the clouds", " shot into the sun. Do a cannonball!", " did a backflip into the water", " it's ok that you did what you did", " don't look at them while they're yeeting", " yeets merrily", " has a yeet thang", ", after much deliberation, took a plane to have a professionally organized yeet ceremony with a shaman in the amazon jungle", " yeeted properly", ", everyone.", " ladies and gentlemen", ", indeed", " are you ok", " was picked up and carried away by a very localized hurricane travelling in excess of 100,000 meter per hour", " too", " yeeted all of it", " did it so you should do it too", " practiced his/her yeet", " yeets a remaining grain of pocket rice", " yeets a spider off his/her foot", "'s hat comes off.", "'s shoes fly off.", " really said yeet", " is asking if you /eat"]; + sendChat("That guy/girl " + msg.p.name + messages[Math.floor(Math.random()*messages.length)]); + return; + } + + var name = msg.p.name; + var fish = item.toLowerCase(); + var size = ""; + var now = Date.now(); + var time = new Date().toLocaleString('en-US', { hour: 'numeric', minute: 'numeric', hour12: true }); + if(item.indexOf("(") !== -1) { + size = fish.substring(fish.indexOf("(") + 1, item.indexOf(")", item.indexOf("("))); + fish = fish.substr(0, item.indexOf("(") - 1); + + } + if(size == "small" && fish == "key") { + size = "special"; + fish = "small key"; + item = "small key"; + } + + + if(item.toLowerCase() == "sand") { + sendChat("No, "+msg.p.name+", don't yeet sand."); + return; + } + + // remove the item + myfish.splice(idx, 1); + db.putFish(msg.p._id, myfish); + + + function ye(message, ...results) { + return { + "message": message, + "result": rando(results) + } + } + + if(item == "small key") { + console.log("***small key yeeted***"); + sendChat("???"); + return; + } + + if(Math.random() < 0.15) { + // hit a person + var targets = Object.values(MPPClient.client.ppl).filter(p => p._id != MPPClient.client.user._id); + if(targets.length) { + var target = rando(targets).name; + var yeet = rando( + // directed at a person out the gate + ye( + "Friend "+name+"'s "+rando( + "violent", "shaking", "angery", "two (2)", "unknown number of", "" + )+" hands grabbed his/her "+fish+" and "+rando( + "slung", "foisted", "launched", "yeeted", "expelled", "fired" + )+" it "+rando( + "lazily", "forcefully", "haphazardly", "angrily", "playfully", "lovingly" + )+" "+rando( + "in the direction of "+target+".", "at where "+target+" happens to be.", "at "+target+".", "directly at "+target+"'s location in this realm.", "at the general vicinity of "+target + )+". "+rando( + "It missed.", "It grazed his/her cheek, leaving a small dab of "+fish+".", "Being that it was so "+size+", I'm sure you can infer how comical the result is!", "It smacked right across his/her face.", "It got hung in his/her shirt and he/she flung it out onto the ground and it was quite a silly scene.", "It scooted across his/her head before rebounding off onto the ground nearby. The "+rando("gooey", "powdery", "residual", "smelly", "appropriate", fish, fish+"y", "greasy", "uncomfortable", "delicious", "wonderful", "questionable", "nice", "gelatinous", "shampoo", "fatty", "warm", "hot", "cold", "dripping", "fish", "unknown")+" residue was left behind in "+target+"'s hair." + ), + + "A gruesome scene indeed.", "Not a pretty sight.", "By the look of things, it used to belong to either "+name+" or "+target+".", "It's got "+name+"prints and "+target+"prints.", "I think it has one of "+target+"'s hairs on it.", "You can tell by looking at it that it used to belong to "+name + ) + ); + sendChat(yeet.message); + db.put("look.outside.◍"+fish, yeet.result); + if(Math.random() < 0.2) { + + } + + return; + } + } + if(Math.random() < 0.15) { + // hit the tree + var yeet = rando([ + ye("The "+size+" "+fish+" thwapped into the kekklefruit tree sending debris flying. A kekklefruit was knocked to the ground.", "It's lying there next to the tree.", "It got splattered on the tree.", "Part of it is stuck to the tree, but it came to rest on the ground nearby.", "A distressed-looking "+fish+" on the ground near the tree.", "It landed in the grass.", "It's kinda scuffed up.", "It's got tree on it. And "+name+"prints.", "It's "+size+".", "It belongs to the tree now.", "It's by the tree now.", "It's a "+size+" "+fish+" previously owned by "+name+" if you still want it after that.") + ]); + sendChat(yeet.message); + db.put("look.outside.◍"+fish, yeet.result); + db.put("look.outside.◍"+rando( + "kek of good fortune", "lucky kek", "kek", "fortunate kek", "the kekklefruit that was knocked from the tree", "sandy kekklefruit", "baby kekklefruit" + ), + rando( + "The evidence points to it being knocked from the tree by "+name+".", "It rolled to a stop.", "A small creature is snacking on it.", "Take it before it gets ants.", "A single ant has already found it.", "it has a little bit of "+fish+" on it." + )); + return; + } + if(Math.random() < 0.4) { + // yeet to rest + var yeet = rando([ + // into the water + ye("Tossed "+fish+" into the water.", "It looks like somebody tossed it haphazardly into the shallow water. It is not swimming.", "It's in the shallows trying to swim away...", name+" tossed this into the shallows where it rests today. I don't think it's moving.", "I think it's a "+fish+". A very immobile one.", " It's resting at the edge of the water where you can /take it."), + + // on the ground + ye("Tossed "+fish+" onto the ground.", "It just sat there.", "It landed face down.", "Yeeted into this position by "+name+".", "A dirty "+fish+".", "Motionless on the ground.", "It's still moving!", "It possesses frozen on its face the expression of something yeeted", "It's missing a piece.", "It's still warm.", "Using your powers you deduce that it's been there since exactly "+time+" on an unknown day.") + ]); + sendChat(yeet.message); + db.put("look.outside.◍"+fish, yeet.result); + return; + } + if(Math.random()) { + // yeet permanently into e.g. water + var distance = (5 + Math.random() * 73).toFixed(1)+"m"; + sendChat(rando("Friend "+name+" tossed his/her "+fish+" into the water.", "After "+name+" yeeted it onto the ground, the "+fish+" self-propelled a short distance into the water.", "The "+fish+" was lost into the water.", "The "+fish+" went in the water.", "It's in the water, now.", "Okay, it's gone.", "Aaaand it's gone.", "The "+fish+" yeeted by "+name+" continued upwards through each layer of the atmosphere. Upon detecting the absence of air, its back end broke off to reveal a rocket engine. The "+fish+" then slowed its angular momentum until it was pointed at some distant star, then engaged its engines and propelled itself into space.", "The object was yeeted permanently.", "Thanks to "+name+" the "+fish+" is now in the water.", "The "+fish+" travelled "+distance+" before landing out in the water.")); + return; + } + + } else { + if (location == 'inside') { + sendChat(`Excuse me, ${msg.p.name}: Yeeting ${location} is most certainly rude.`); + return; + } + if (!['inside', 'outside'].includes(location)) { + sendChat("Guy/girl "+msg.p.name+": doing that whilst at "+location+" is currently prohibited."); + } else if (location == 'sleep') { + sendChat("Guy/girl "+msg.p.name+": doing that whilst "+location+"ing is currently prohibited."); + } else { + sendChat("Guy/girl "+msg.p.name+": doing that whilst "+location+" is currently prohibited."); + } + } + }); + return; + }); + }, false); + + bot.addCommand('grow_fruit', 0, (msg, admin) => { + if (!admin) return; + var how_many = ~~msg.args[0]; + if(!how_many) how_many = 1; + db.getFruits(function(num_fruits) { + db.setFruits(num_fruits + how_many); + kekklefruit_growth(); + }); + }, false); + + var TOO_MANY_FISH = 50; + + bot.addCommand('take', 0, msg => { + db.getLocation(msg.p._id, location => { + var target = msg.argcat().toLowerCase().trim(); + if(!target.length) { + sendChat("Take what?"); + return; + } + db.take(location, target, function(entry) { + if(!entry) { + sendChat("Friend "+msg.p.name+": You can't take "+target+" from "+location+"."); + } else { + db.getFish(msg.p._id, function(myfish) { + if(myfish.length >= TOO_MANY_FISH) { + sendChat("Friend "+msg.p.name+" is carrying too much."); + } else { + var fish = entry.key; + fish = fish.substr(fish.indexOf("◍")+1); + if (untakeable.includes(fish.toLowerCase()) || location == 'sleep') { + sendChat("Friend "+msg.p.name+": You can't take the " + fish + "."); + return; + } + myfish.push(fish); + db.putFish(msg.p._id, myfish); + db.del(entry.key); + sendChat("Friend "+msg.p.name+" took the "+fish+"."); + }; + }); + } + }); + }); + }, false); + + bot.addCommand('give', 0, msg => { + var thief = msg.p; + var victim = findParticipantByNameFuzzy(msg.args[0]); + if(!victim) { + sendChat("Friend " +thief.name+" missed"); + return; + } + if(victim._id == thief._id) { + sendChat("Friendly friend " +thief.name+" fudged"); + return; + } + var target_fish = msg.argcat(1); + db.getFish(thief._id, function(thief_fish) { + db.getFish(victim._id, function(victim_fish) { + if(victim_fish.length >= TOO_MANY_FISH) { + sendChat("Friend " +victim.name+" is carrying too much."); + return; + } + if(thief_fish.length > 0) { + var idx = -1; + var arg = target_fish.trim().toLowerCase(); + for(var i = 0; i < thief_fish.length; i++) { + if(arg == "" || thief_fish[i].toLowerCase().indexOf(arg) !== -1) { + idx = i; + break; + } + } + if(idx == -1) { + sendChat("Friend " +thief.name+": You don't have a "+arg+" that you can /give like that."); + return; + } + var thefish = thief_fish[idx]; + thief_fish.splice(idx, 1); + victim_fish.push(thefish); + + sendChat("Our friend " +thief.name+" gave "+victim.name+" his/her "+thefish); + db.putFish(thief._id, thief_fish); + db.putFish(victim._id, victim_fish); + } else { + sendChat("Friend " +thief.name+": You don't have the fish to give."); + } + }); + }); + }, false); + + bot.addCommand(['sit'], 0, msg => { + // get location + db.getLocation(msg.p._id, location => { + // see if location has couch + db.look(location, 'couch', couch => { + if (couch == null) { + sendChat("Friend " + msg.p.name + ": There's no couch here. Maybe /go inside to find one?"); + return; + } else { + db.get('sit~' + msg.p._id, (err, sit) => { + // console.log(sit); + if (sit) { + db.del('sit~' + msg.p._id); + sendChat("Friend " + msg.p.name + " gets up from the couch."); + } else { + db.put('sit~' + msg.p._id, 'true'); + sendChat("Friend " + msg.p.name + " sits down on the couch."); + } + }); + } + }); + }); + }); + + setInterval(function() { + db.put("look.outside.◍Sand", "We don't talk about that."); + db.put("look.outside.◍Lawn Mower", "It's a bird! It's a plane! It's a... lawn mower!"); + + db.put("look.sleep.◍Bed", "*snuggles*"); + + db.put("look.inside.◍Couch", "Let's sit down and have a talk."); + db.put("look.inside.◍Grand Piano", "Sounds very multiplayer."); + }, 6000); + + var FISHING_CHANCE = 0.02; + setInterval(function() { + var results = []; + db.createReadStream({ + start: "fishing~", + end: "fishing~\xff" + }) + .on("data", function(data) { + if(data.value) results.push(data.key); + }) + .on("end", function() { + if(results.length === 0) return; + if(Math.random() > FISHING_CHANCE * results.length) return; + var winner = results[Math.floor(Math.random()*results.length)]; + if(winner.match(/^fishing~[0-9a-f].*$/)) { + db.del(winner); + var user_id = winner.substr(8); + var part; + // DiscordClient.client.guilds.cache.get('841331769051578413').members.cache.forEach(p => { + // if (p.user.id === user_id) { + // part = p.user; + // part.name = p.user.username; + // part._id = p.user.id; + // if(typeof part !== 'undefined') { + // catchSomething(part); + // } + // } + // }); + for (let p of Object.values(MPPClient.client.ppl)) { + if (p.id === user_id) { + part = p; + part.name = p.name; + part._id = p.id; + if(typeof part !== 'undefined') { + catchSomething(part); + } + } + } + } + }); + }, 5000); + + setInterval(function() { + // return; // stop auto-fishing + + var client = MPPClient.client; + + if(!client.isConnected()) return; + + var part = client.ppl[client.participantId]; + if(!part) return; + + var key = "fishing~"+part._id; + db.get(key, function(err, value) { + if(!value) { + sendChat("/fish", true); + } else { + db.getFish(part._id, function(myfish) { + if(!myfish.length) return; + var rand = Math.floor(Math.random()*client.countParticipants()); + var dest; + for(var i in client.ppl) { + if(!client.ppl.hasOwnProperty(i)) continue; + if(i == rand) break; + else dest = client.ppl[i]; + } + if(dest && dest.id !== client.participantId) { + sendChat("/give "+dest.name.split(" ")[0], true); + } + }); + /*if(findParticipantByNameFuzzy("potato")) { + var asdf = findParticipantByNameFuzzy("electrashave") || findParticipantByNameFuzzy("potato") || findParticipantByNameFuzzy("totoro"); + if(asdf) sendChat("/duel "+asdf.name); + }*/ + } + + /*else */ + }); + }, 120000); + + function setTerminalTitle(title) { + process.stdout.write( + String.fromCharCode(27) + "]0;" + title + String.fromCharCode(7) + ); + } + + // client.on("count", function(count) { + // if(count > 0) { + // setTerminalTitle("fishing (" + count + ")"); + // } else { + // setTerminalTitle("fishing"); + // } + // }); + + var Pong = function(client, db) { + this.client = client; + this.db = db; + this.vx = 1.5; + this.vy = 2.2; + var self = this; + self.part = self.client.ppl[self.client.participantId]; + client.on("ch", function() { + self.part = self.client.ppl[self.client.participantId]; + }); + this.player1 = undefined; + this.player2 = undefined; + } + + Pong.prototype.tick = function() { + if(!this.client.isConnected() || !this.part) return; + this.part.x += this.vx; + this.part.y += this.vy; + if(this.part.x < 0) { + this.vx = -this.vx; + } else if(this.part.x > 100) { + this.vx = -this.vx; + } + if(this.part.y < 0) { + this.vy = -this.vy; + } else if(this.part.y > 100) { + this.vy = -this.vy; + } + //this.vx += Math.random() * 0.5 - 0.25; + //this.vy += Math.random() * 0.5 - 0.25; + // this.client.sendArray([{m: "m", x: this.part.x, y: this.part.y}]); + }; + + + + + + var Exchange = function(db) { + this.db = db; + }; + + Exchange.prototype.takePokemon = function(user_id, amount) { + var self = this; + self.db.getPokemon(user_id, function(pok) { + self.db.getPokemon("exchange", function(pok2) { + for(var i = 0; i < amount; i++) + pok2.push(pok.shift()); + self.db.putPokemon(user_id, pok); + self.db.putPokemon("exchange", pok2); + }); + }); + }; + + Exchange.prototype.takeFish = function(user_id, amount) { + var self = this; + self.db.getFish(user_id, function(fish) { + self.db.getFish("exchange", function(fish2) { + for(var i = 0; i < amount; i++) + fish2.push(fish.shift()); + self.db.putFish(user_id, fish); + self.db.putFish("exchange", fish2); + }); + }); + }; + + Exchange.prototype.givePokemon = function(user_id, amount) { + var self = this; + self.db.getPokemon(user_id, function(pok) { + self.db.getPokemon("exchange", function(pok2) { + for(var i = 0; i < amount; i++) + pok.push(pok2.shift()); + self.db.putPokemon(user_id, pok); + self.db.putPokemon("exchange", pok2); + }); + }); + }; + + Exchange.prototype.giveFish = function(user_id, amount) { + var self = this; + self.db.getFish(user_id, function(fish) { + self.db.getFish("exchange", function(fish2) { + for(var i = 0; i < amount; i++) + fish.push(fish2.shift()); + self.db.putFish(user_id, fish); + self.db.putFish("exchange", fish2); + }); + }); + }; + + Exchange.prototype.placeAskOrder = function(user_id, amount, price) { + this.takePokemon(user_id, amount); + this.db.put("exchange ask~"+Exchange.intToKey(price)+"~"+Exchange.intToKey(Date.now())+"~"+user_id, + amount.toString()); + }; + + Exchange.prototype.placeBidOrder = function(user_id, amount, price) { + this.takeFish(user_id, price * amount); + this.db.put("exchange bid~"+Exchange.intToKey(price)+"~"+Exchange.intToKey(-Date.now())+"~"+user_id, + amount.toString()); + }; + + Exchange.prototype.fillAsks = function(user_id, amount, price, market) { + var self = this; + self.db.createReadStream({ + start: "exchange ask~"+Exchange.intToKey(price)+"~", + end: "exchange ask~~" + }) + .on("data", function(data) { + if(amount < 1) return; + var tprice = parseInt(data.key.match(/^exchange ask~(.*)~/)[1], 36); + if(!market && tprice > price) return; + var value = parseInt(data.value || 0) || 0; + var tamt = 0; + if(value > amount) { + tamt = amount; + self.db.put(data.key, (value - tamt).toString()); + } else { + tamt = value; + self.db.del(data.key); + } + amount -= tamt; + self.db.put("exchange data~last", tprice); + + var other_user_id = data.key.match(/[0-9a-f]{24}/i)[0]; + self.takeFish(user_id, price * tamt); + self.takePokemon(other_user_id, tamt); + setTimeout(function() { + self.giveFish(other_user_id, tprice * tamt); + self.givePokemon(user_id, tamt); + }, 200); + }) + .on("end", function() { + if(amount) { + self.placeBidOrder(user_id, amount, price); + } + }); + }; + + Exchange.prototype.fillBids = function(user_id, amount, price, market) { + var self = this; + self.db.createReadStream({ + start: "exchange bid~~", + end: "exchange bid~"+Exchange.intToKey(price)+"~", + reverse: true + }) + .on("data", function(data) { + if(amount < 1) return; + var tprice = parseInt(data.key.match(/^exchange bid~(.*)~/)[1], 36); + if(!market && tprice < price) return; + var value = parseInt(data.value || 0) || 0; + var tamt = 0; + if(value > amount) { + tamt = amount; + self.db.put(data.key, (value - tamt).toString()); + } else { + tamt = value; + self.db.del(data.key); + } + amount -= tamt; + self.db.put("exchange data~last", tprice); + + var other_user_id = data.key.match(/[0-9a-f]{24}/i)[0]; + self.takePokemon(user_id, tamt); + self.takeFish(other_user_id, tprice * tamt); + setTimeout(function() { + self.givePokemon(other_user_id, tamt); + self.giveFish(user_id, tprice * tamt); + }, 200); + }) + .on("end", function() { + if(amount) { + self.placeAskOrder(user_id, amount, market ? 1 : price); + } + }); + }; + + Exchange.prototype.buy = function(user_id, amount, price) { + if(typeof price === "number") { + this.fillAsks(user_id, amount, price, false); + } else { + this.fillAsks(user_id, amount, 1, true); + } + }; + + Exchange.prototype.sell = function(user_id, amount, price) { + if(typeof price === "number") { + this.fillBids(user_id, amount, price, false); + } else { + this.fillBids(user_id, amount, 1000000, true); + } + }; + + Exchange.prototype.getCanSell = function(user_id, amount, price, cb) { + if(amount < 1) cb(false); + else if(price === 0) cb(false); + else if(!Exchange.validateInt(amount)) cb(false); + else if(typeof price === "number" && !Exchange.validateInt(price)) cb(false); + else this.db.getPokemon(user_id, function(pok) { + if(pok.length < amount) cb(false); + else cb(true); + }); + }; + + Exchange.prototype.getCanBuy = function(user_id, amount, price, cb) { + if(amount < 1) cb(false); + else if(price === 0) cb(false); + else if(!Exchange.validateInt(amount)) cb(false); + else if(typeof price === "number" && !Exchange.validateInt(price)) cb(false); + else this.db.getFish(user_id, function(fish) { + if(fish.length < amount * price) cb(false); + else cb(true); + }); + }; + + Exchange.prototype.getOrderBook = function(type, id, cb) { + var orders = []; + this.db.createReadStream({ + start: "exchange "+type+"~", + end: "exchange "+type+"~~" + }) + .on("data", function(data) { + if(id && !data.key.match(new RegExp(id+"$"))) return; + var amount = parseInt(data.value || 0) || 0; + var price = parseInt(data.key.match(new RegExp("^exchange "+type+"~(.*)~"))[1], 36); + orders.push(amount + "@" + price); + }) + .on("end", function() { + cb(orders); + }); + }; + + Exchange.prototype.cancel = function(id, type, amount, price, cb) { + var self = this; + var orders = []; + this.db.createReadStream({ + start: "exchange "+type+"~", + end: "exchange "+type+"~~" + }) + .on("data", function(data) { + if(!data.key.match(new RegExp(id+"$"))) return; + var a = parseInt(data.value || 0) || 0; + var p = parseInt(data.key.match(new RegExp("^exchange "+type+"~(.*)~"))[1], 36); + if(a == amount && p == price) { + orders.push(a + "@" + p); + // delete order + self.db.del(data.key); + // return items + if(type === "ask") { + self.givePokemon(id, amount); + } else if(type === "bid") { + self.giveFish(id, price * amount); + } + } + }) + .on("end", function() { + if(cb) cb(orders); + }); + }; + + Exchange.validateInt = function(int) { + if(Math.floor(int) !== int) + return false; + int = int.toString(36); + if(int.length > 50) + return false; + return true; + }; + + Exchange.intToKey = function(int) { + if(!Exchange.validateInt(int)) { + console.trace("Invalid int "+int); + return; + } + var negative = int < 0; + int = int.toString(36); + if(negative) int = int.substr(1); + while(int.length < 50) int = (negative ? "\xff" : "0")+int; + return int; + }; + + bot.addCommand(['pick', 'get fruit'], 0, msg => { + db.getLocation(msg.p._id, location => { + if (location === 'outside') { + if(location === "outside") { + db.getFruits(function(num_fruits) { + if(num_fruits > 0) { + db.setFruits(num_fruits - 1); + db.appendFish(msg.p._id, ["kekklefruit"]); + sendChat("Our friend "+msg.p.name+" picked 1 fruit from the kekklefruit tree and placed it into his/her fish sack."); + } else { + var options = require('./treeMessages.json'); + var message = options[Math.floor(Math.random() * options.length)]; + sendChat(message); + } + }); + } else { + sendChat("You can't interact with the tree from "+location+"."); + } + } + }); + return; + }, false); + + bot.addCommand(['tree', 'fruit', 'fruits'], 0, msg => { + db.getLocation(msg.p._id, location => { + if(location === "outside") { + db.getFruits(function(num_fruits) { + sendChat("Friend "+msg.p.name+": " + num_fruits + "."); + }); + } else { + sendChat(rando("You can't even see it from "+location+", let alone any fruit that may theoretically have grown on it.", "", "You don't see a tree "+location+".", "None in sight.")); + } + }); + }, false); + + bot.addCommand(['hug'], 0, msg => { + var part = findParticipantByNameFuzzy(msg.argcat()); + if (part) { + let hug = rando("a squeeze", "an affectionate hug", + "a deep, passionate hug", `a "normal" hug`, "a snug hug", "a new hug", "a special embrace", "caring hug"); + sendChat(`Our friend ` + msg.p.name + ` gave ` + part.name + ' ' + hug); + } else { + db.getLocation(msg.p._id, location => { + var message = "Friend " + msg.p.name + " missed and the hug went everywhere."; + if (location == 'outside' && Math.random() < 0.25) { + message += " Some of it went into the water and love was felt by the fish inside."; + } + sendChat(message); + }); + } + }, false); + + bot.addCommand(['kiss'], 0, msg => { + var part = findParticipantByNameFuzzy(msg.argcat()); + if (part) { + let kiss = rando("a kiss", "a sloppy smooch", + "a deep, passionate french kiss", `a big grandma kiss on the cheek`, "a big smooch on the cheek", "a new kiss", "a lasting mark on their face", "caring kiss"); + sendChat(`Our friend ` + msg.p.name + ` gave ` + part.name + ' ' + kiss); + } else { + db.getLocation(msg.p._id, location => { + var message = "Friend " + msg.p.name + " missed and the kiss went everywhere."; + if (location == 'outside' && Math.random() < 0.25) { + message += " Some of it went into the water and love was felt by the fish inside."; + } + sendChat(message); + }); + } + }); + + bot.addCommand(['bonk'], 0, msg => { + var part = findParticipantByNameFuzzy(msg.argcat()); + if (part) { + let bonk = rando("a bonk", "a slap", + "a deep, passionate bonk", `a "normal" bonk`, "a bonk on the cheek", "a new bonk", "a lasting mark on their face", "caring bonk"); + sendChat(`Our friend ` + msg.p.name + ` gave ` + part.name + ' ' + bonk); + } else { + db.getLocation(msg.p._id, location => { + var message = "Friend " + msg.p.name + " missed and the bonk went everywhere."; + if (location == 'outside' && Math.random() < 0.25) { + message += " Some of it went into the water and love was felt by the fish inside."; + } + sendChat(message); + }); + } + }); + + // bot.addCommand(['give'], 0, msg => { + // var thief = msg.p; + // var victim = findParticipantByNameFuzzy(msg.args[0]); + // if (!victim) { + // sendChat("Friend " + thief.name + " missed"); + // return; + // } + // if (victim._id == thief._id) { + // sendChat("Friendly friend " + thief.name + " fudged"); + // return; + // } + // var target_fish = msg.argcat(1); + // db.getFish(thief._id, function (thief_fish) { + // db.getFish(victim._id, function (victim_fish) { + // if (victim_fish.length >= TOO_MANY_FISH) { + // sendChat("Friend " + victim.name + " is carrying too much."); + // return; + // } + // if (thief_fish.length > 0) { + // var idx = -1; + // var arg = target_fish.trim().toLowerCase(); + // for (var i = 0; i < thief_fish.length; i++) { + // if (arg == "" || thief_fish[i].toLowerCase().indexOf(arg) !== -1) { + // idx = i; + // break; + // } + // } + // if (idx == -1) { + // sendChat("Friend " + thief.name + ": You don't have a " + arg + "that you can /give like that."); + // return; + // } + // var thefish = thief_fish[idx]; + // thief_fish.splice(idx, 1); + // victim_fish.push(thefish); + + // sendChat("Our friend" + thief.name + " gave " + victim.name + " his/her " + thefish); + // db.putFish(thief._id, thief_fish); + // db.putFish(victim._id, victim_fish); + // } else { + // sendChat("Friend " + thief.name + ": You don't have the fish to give."); + // } + // }); + // }); + // return; + // }, false); + + // bot.addCommand(['/give_'], 0, msg => { + + // }, true); + + bot.addCommand(['bestow'], 0, msg => { + var thief = msg.p; + var victim = findParticipantByNameFuzzy(msg.args[0]); + if (!victim) { + sendChat("Friend " + thief.name + " missed"); + return; + } + if (victim._id == thief._id) { + sendChat("Friendly friend " + thief.name + " fudged"); + return; + } + var target_fish = msg.argcat(1); + db.getFish(thief._id, function (thief_fish) { + db.getFish(victim_id, function (victim_fish) { + if (victim_fish.length >= TOO_MANY_FISH) { + sendChat("Friend " + victim.name + " is carrying too much."); + return; + } + if (thief_fish.length > 0) { + var idx = -1; + var arg = target_fish.trim().toLowerCase(); + for (var i = 0; i < thief_fish.length; i++) { + if (arg == "" || thief_fish[i].toLowerCase().indexOf(arg) !== -1) { + idx = i; + break; + } + } + if (idx == -1) { + sendChat("Friend " + thief.name + ": You don't have " + arg + "."); + return; + } + var thefish = thief_fish[idx]; + thief_fish.splice(idx, 1); + victim_fish.push(thefish); + + sendChat("Our friend" + thief.name + " bestowed " + victim.name + " his/her " + thefish); + db.putFish(thief._id, thief_fish); + db.putFish(victim._id, victim_fish); + } else { + sendChat("Friend " + thief.name + ": You don't have the fish to bestow."); + } + }); + }); + return; + }); + + // bot.addCommand(['/bestow_'], 0, msg => { + + // }, true); + + +} diff --git a/src/DiscordClient.js b/src/DiscordClient.js index f6126c8..48e0d1b 100644 --- a/src/DiscordClient.js +++ b/src/DiscordClient.js @@ -1,73 +1,73 @@ -const Discord = require('discord.js'); - -module.exports = class DiscordClient { - static client = new Discord.Client(); - - static start(token) { - this.client.login(token); - this.bindEventListeners(); - } - - static bindEventListeners() { - this.client.on('ready', () => { - process.stdout.write("\n********************************START********************************\n"); - }); - - this.client.on('messageUpdate', msg => { - if (msg.system) return; - if (msg.author.bot) return; - this.handleMessage(msg); - }); - - this.client.on('message', msg => { - if (msg.system) return; - if (msg.author.bot) return; - this.handleMessage(msg); - }); - - this.client.on('guildMemberAdd', async guildMember => { - let role; - guildMember.guild.roles.cache.forEach(r => { - if (r.name.toString() == guildMember.user.id.toString()) { - role = r; - } - }); - - if (typeof role !== 'undefined') console.log('found role: ' + role.name); - if (!role) console.log('creating role'); - if (!role) role = await guildMember.guild.roles.create({ - data: { - name: guildMember.user.id, - color: Math.floor(Math.random()*16777215).toString(16) - }, - reason: guildMember.user.id - }); - - if (role) guildMember.roles.add(role); - }); - } - - static handleMessage(msg) { - msg.args = msg.content.split(' '); - msg.cmd = msg.content.startsWith(gBot.prefix) ? msg.args[0].substring(gBot.prefix.length).trim() : ""; - msg.args = msg.args.slice(1); - msg.argcat = function(start, end) { - var parts = msg.args.slice(start || 0, end || undefined); - var result = ""; - for(var i = 0; i < parts.length; i++) { - result += parts[i]; - if(i + 1 < parts.length) { - result += " "; - } - } - return result; - }; - msg.rank = gBot.getRank(msg.author.id); - - gBot.emit('chat.receive', msg); - } - - static sendChat(str) { - DiscordClient.client.channels.cache.get('841331769658703954').send(str); - } -} +const Discord = require('discord.js'); + +module.exports = class DiscordClient { + static client = new Discord.Client(); + + static start(token) { + this.client.login(token); + this.bindEventListeners(); + } + + static bindEventListeners() { + this.client.on('ready', () => { + process.stdout.write("\n********************************START********************************\n"); + }); + + this.client.on('messageUpdate', msg => { + if (msg.system) return; + if (msg.author.bot) return; + this.handleMessage(msg); + }); + + this.client.on('message', msg => { + if (msg.system) return; + if (msg.author.bot) return; + this.handleMessage(msg); + }); + + this.client.on('guildMemberAdd', async guildMember => { + let role; + guildMember.guild.roles.cache.forEach(r => { + if (r.name.toString() == guildMember.user.id.toString()) { + role = r; + } + }); + + if (typeof role !== 'undefined') console.log('found role: ' + role.name); + if (!role) console.log('creating role'); + if (!role) role = await guildMember.guild.roles.create({ + data: { + name: guildMember.user.id, + color: Math.floor(Math.random()*16777215).toString(16) + }, + reason: guildMember.user.id + }); + + if (role) guildMember.roles.add(role); + }); + } + + static handleMessage(msg) { + msg.args = msg.content.split(' '); + msg.cmd = msg.content.startsWith(gBot.prefix) ? msg.args[0].substring(gBot.prefix.length).trim() : ""; + msg.args = msg.args.slice(1); + msg.argcat = function(start, end) { + var parts = msg.args.slice(start || 0, end || undefined); + var result = ""; + for(var i = 0; i < parts.length; i++) { + result += parts[i]; + if(i + 1 < parts.length) { + result += " "; + } + } + return result; + }; + msg.rank = gBot.getRank(msg.author.id); + + gBot.emit('chat.receive', msg); + } + + static sendChat(str) { + DiscordClient.client.channels.cache.get('841331769658703954').send(str); + } +} diff --git a/src/MPPClient.js b/src/MPPClient.js index 07f81ae..ce4d00b 100644 --- a/src/MPPClient.js +++ b/src/MPPClient.js @@ -1,79 +1,79 @@ -// const Discord = require('discord.js'); -const Client = require('./mppt-client.js'); - -module.exports = class MPPClient { - static start(token) { - this.client = new Client('wss://mppclone.com:8443', token); - this.client.start(); - this.client.setChannel('✧𝓓𝓔𝓥 𝓡𝓸𝓸𝓶✧'); - this.bindEventListeners(); - } - - static bindEventListeners() { - this.client.on('hi', () => { - process.stdout.write("\n********************************START********************************\n"); - }); - - // this.client.on('messageUpdate', msg => { - // if (msg.system) return; - // if (msg.author.bot) return; - // this.handleMessage(msg); - // }); - - this.client.on('a', msg => { - // if (msg.system) return; - // if (msg.author.bot) return; - // if (msg.p.tag) - this.handleMessage(msg); - }); - - // this.client.on('guildMemberAdd', async guildMember => { - // let role; - // guildMember.guild.roles.cache.forEach(r => { - // if (r.name.toString() == guildMember.user.id.toString()) { - // role = r; - // } - // }); - - // if (typeof role !== 'undefined') console.log('found role: ' + role.name); - // if (!role) console.log('creating role'); - // if (!role) role = await guildMember.guild.roles.create({ - // data: { - // name: guildMember.user.id, - // color: Math.floor(Math.random()*16777215).toString(16) - // }, - // reason: guildMember.user.id - // }); - - // if (role) guildMember.roles.add(role); - // }); - } - - static handleMessage(msg) { - msg.args = msg.a.split(' '); - msg.cmd = msg.a.startsWith(gBot.prefix) ? msg.args[0].substring(gBot.prefix.length).trim() : ""; - msg.args = msg.args.slice(1); - msg.argcat = function(start, end) { - var parts = msg.args.slice(start || 0, end || undefined); - var result = ""; - for(var i = 0; i < parts.length; i++) { - result += parts[i]; - if(i + 1 < parts.length) { - result += " "; - } - } - return result; - }; - msg.rank = gBot.getRank(msg.p._id); - - gBot.emit('chat.receive', msg); - } - - static sendChat(str, skip = false) { - // DiscordClient.client.channels.cache.get('841331769658703954').send(str); - MPPClient.client.sendArray([{ - m:'a', - message: skip == true ? str : `\u034f${str}` - }]); - } -} +// const Discord = require('discord.js'); +const Client = require('./mppt-client.js'); + +module.exports = class MPPClient { + static start(token) { + this.client = new Client('wss://mppclone.com:8443', token); + this.client.start(); + this.client.setChannel('✧𝓓𝓔𝓥 𝓡𝓸𝓸𝓶✧'); + this.bindEventListeners(); + } + + static bindEventListeners() { + this.client.on('hi', () => { + process.stdout.write("\n********************************START********************************\n"); + }); + + // this.client.on('messageUpdate', msg => { + // if (msg.system) return; + // if (msg.author.bot) return; + // this.handleMessage(msg); + // }); + + this.client.on('a', msg => { + // if (msg.system) return; + // if (msg.author.bot) return; + // if (msg.p.tag) + this.handleMessage(msg); + }); + + // this.client.on('guildMemberAdd', async guildMember => { + // let role; + // guildMember.guild.roles.cache.forEach(r => { + // if (r.name.toString() == guildMember.user.id.toString()) { + // role = r; + // } + // }); + + // if (typeof role !== 'undefined') console.log('found role: ' + role.name); + // if (!role) console.log('creating role'); + // if (!role) role = await guildMember.guild.roles.create({ + // data: { + // name: guildMember.user.id, + // color: Math.floor(Math.random()*16777215).toString(16) + // }, + // reason: guildMember.user.id + // }); + + // if (role) guildMember.roles.add(role); + // }); + } + + static handleMessage(msg) { + msg.args = msg.a.split(' '); + msg.cmd = msg.a.startsWith(gBot.prefix) ? msg.args[0].substring(gBot.prefix.length).trim() : ""; + msg.args = msg.args.slice(1); + msg.argcat = function(start, end) { + var parts = msg.args.slice(start || 0, end || undefined); + var result = ""; + for(var i = 0; i < parts.length; i++) { + result += parts[i]; + if(i + 1 < parts.length) { + result += " "; + } + } + return result; + }; + msg.rank = gBot.getRank(msg.p._id); + + gBot.emit('chat.receive', msg); + } + + static sendChat(str, skip = false) { + // DiscordClient.client.channels.cache.get('841331769658703954').send(str); + MPPClient.client.sendArray([{ + m:'a', + message: skip == true ? str : `\u034f${str}` + }]); + } +} diff --git a/src/RateLimit.js b/src/RateLimit.js index d5fca89..bc5aa62 100644 --- a/src/RateLimit.js +++ b/src/RateLimit.js @@ -1,69 +1,69 @@ - -var RateLimit = function(interval_ms) { - this._interval_ms = interval_ms || 0; // (0 means no limit) - this._after = 0; -}; - -RateLimit.prototype.attempt = function(time) { - var time = time || Date.now(); - if(time < this._after) return false; - this._after = time + this._interval_ms; - return true; -}; - -RateLimit.prototype.setInterval = function(interval_ms) { - this._after += interval_ms - this._interval_ms; - this._interval_ms = interval_ms; -}; - - - -var RateLimitChain = function(num, interval_ms) { - this.setNumAndInterval(num, interval_ms); -}; - -RateLimitChain.prototype.attempt = function(time) { - var time = time || Date.now(); - for(var i = 0; i < this._chain.length; i++) { - if(this._chain[i].attempt(time)) return true; - } - return false; -}; - -RateLimitChain.prototype.setNumAndInterval = function(num, interval_ms) { - this._chain = []; - for(var i = 0; i < num; i++) { - this._chain.push(new RateLimit(interval_ms)); - } -}; - - - -var DataRateLimit = function(limit, interval_ms) { - this._limit = limit; - this._interval_ms = interval_ms || 0; // 0: per-attempt - this._after = 0; - this._size = 0; -}; - -DataRateLimit.prototype.attempt = function(size, time) { - var time = time || Date.now(); - - if(time >= this._after) { - this._size = 0; - this._after = time + this._interval_ms; - } - if(this._size + size <= this._limit) { - this._size += size; - return true; - } else { - return false; - } -}; - - - -var exports = typeof module !== "undefined" ? module.exports : this; -exports.RateLimit = RateLimit; -exports.RateLimitChain = RateLimitChain; + +var RateLimit = function(interval_ms) { + this._interval_ms = interval_ms || 0; // (0 means no limit) + this._after = 0; +}; + +RateLimit.prototype.attempt = function(time) { + var time = time || Date.now(); + if(time < this._after) return false; + this._after = time + this._interval_ms; + return true; +}; + +RateLimit.prototype.setInterval = function(interval_ms) { + this._after += interval_ms - this._interval_ms; + this._interval_ms = interval_ms; +}; + + + +var RateLimitChain = function(num, interval_ms) { + this.setNumAndInterval(num, interval_ms); +}; + +RateLimitChain.prototype.attempt = function(time) { + var time = time || Date.now(); + for(var i = 0; i < this._chain.length; i++) { + if(this._chain[i].attempt(time)) return true; + } + return false; +}; + +RateLimitChain.prototype.setNumAndInterval = function(num, interval_ms) { + this._chain = []; + for(var i = 0; i < num; i++) { + this._chain.push(new RateLimit(interval_ms)); + } +}; + + + +var DataRateLimit = function(limit, interval_ms) { + this._limit = limit; + this._interval_ms = interval_ms || 0; // 0: per-attempt + this._after = 0; + this._size = 0; +}; + +DataRateLimit.prototype.attempt = function(size, time) { + var time = time || Date.now(); + + if(time >= this._after) { + this._size = 0; + this._after = time + this._interval_ms; + } + if(this._size + size <= this._limit) { + this._size += size; + return true; + } else { + return false; + } +}; + + + +var exports = typeof module !== "undefined" ? module.exports : this; +exports.RateLimit = RateLimit; +exports.RateLimitChain = RateLimitChain; exports.DataRateLimit = DataRateLimit; \ No newline at end of file diff --git a/src/StaticEventEmitter.js b/src/StaticEventEmitter.js index ab278e8..9158dfa 100644 --- a/src/StaticEventEmitter.js +++ b/src/StaticEventEmitter.js @@ -1,16 +1,16 @@ -module.exports = class StaticEventEmitter { - static _events = {}; - - static on(event, cb) { - if (typeof this._events[event] == 'undefined') this._events[event] = []; - this._events[event].push(cb); - } - - static emit(evtn) { - if(!this._events.hasOwnProperty(evtn)) return; - var fns = this._events[evtn].slice(0); - if(fns.length < 1) return; - var args = Array.prototype.slice.call(arguments, 1); - for(var i = 0; i < fns.length; i++) fns[i].apply(this, args); - } +module.exports = class StaticEventEmitter { + static _events = {}; + + static on(event, cb) { + if (typeof this._events[event] == 'undefined') this._events[event] = []; + this._events[event].push(cb); + } + + static emit(evtn) { + if(!this._events.hasOwnProperty(evtn)) return; + var fns = this._events[evtn].slice(0); + if(fns.length < 1) return; + var args = Array.prototype.slice.call(arguments, 1); + for(var i = 0; i < fns.length; i++) fns[i].apply(this, args); + } } \ No newline at end of file diff --git a/src/mppt-client.js b/src/mppt-client.js index b0ebebf..0128678 100644 --- a/src/mppt-client.js +++ b/src/mppt-client.js @@ -1,315 +1,315 @@ - -if(typeof module !== "undefined") { - module.exports = Client; - WebSocket = require("ws"); - EventEmitter = require("events").EventEmitter; -} else { - this.Client = Client; -} - - -function mixin(obj1, obj2) { - for(var i in obj2) { - if(obj2.hasOwnProperty(i)) { - obj1[i] = obj2[i]; - } - } -}; - - -function Client(uri, token) { - EventEmitter.call(this); - this.uri = uri; - this.ws = undefined; - this.serverTimeOffset = 0; - this.user = undefined; - this.participantId = undefined; - this.channel = undefined; - this.ppl = {}; - this.connectionTime = undefined; - this.connectionAttempts = 0; - this.desiredChannelId = undefined; - this.desiredChannelSettings = undefined; - this.pingInterval = undefined; - this.canConnect = false; - this.noteBuffer = []; - this.noteBufferTime = 0; - this.noteFlushInterval = undefined; - this.token = token; - - this.bindEventListeners(); - - this.emit("status", "(Offline mode)"); -}; - -mixin(Client.prototype, EventEmitter.prototype); - -Client.prototype.constructor = Client; - -Client.prototype.isSupported = function() { - return typeof WebSocket === "function"; -}; - -Client.prototype.isConnected = function() { - return this.isSupported() && this.ws && this.ws.readyState === WebSocket.OPEN; -}; - -Client.prototype.isConnecting = function() { - return this.isSupported() && this.ws && this.ws.readyState === WebSocket.CONNECTING; -}; - -Client.prototype.start = function() { - this.canConnect = true; - this.connect(); -}; - -Client.prototype.stop = function() { - this.canConnect = false; - this.ws.close(); -}; - -Client.prototype.connect = function() { - if(!this.canConnect || !this.isSupported() || this.isConnected() || this.isConnecting()) - return; - this.emit("status", "Connecting..."); - this.ws = new WebSocket(this.uri); - this.ws.binaryType = "arraybuffer"; - var self = this; - this.ws.addEventListener("close", function(evt) { - self.user = undefined; - self.participantId = undefined; - self.channel = undefined; - self.setParticipants([]); - clearInterval(self.pingInterval); - clearInterval(self.noteFlushInterval); - - self.emit("disconnect"); - self.emit("status", "Offline mode"); - - // reconnect! - if(self.connectionTime) { - self.connectionTime = undefined; - self.connectionAttempts = 0; - } else { - ++self.connectionAttempts; - } - var ms_lut = [50, 2950, 7000, 10000]; - var idx = self.connectionAttempts; - if(idx >= ms_lut.length) idx = ms_lut.length - 1; - var ms = ms_lut[idx]; - setTimeout(self.connect.bind(self), ms); - }); - this.ws.addEventListener("open", function(evt) { - self.connectionTime = Date.now(); - self.sendArray([{m: "hi", token: self.token}]); - self.pingInterval = setInterval(function() { - self.sendArray([{m: "t", e: Date.now()}]); - }, 20000); - //self.sendArray([{m: "t", e: Date.now()}]); - self.noteBuffer = []; - self.noteBufferTime = 0; - self.noteFlushInterval = setInterval(function() { - if(self.noteBufferTime && self.noteBuffer.length > 0) { - self.sendArray([{m: "n", t: self.noteBufferTime + self.serverTimeOffset, n: self.noteBuffer}]); - self.noteBufferTime = 0; - self.noteBuffer = []; - } - }, 200); - - self.emit("connect"); - self.emit("status", "Joining channel..."); - }); - this.ws.addEventListener("message", function(evt) { - if(typeof evt.data !== 'string') return; - var transmission = JSON.parse(evt.data); - for(var i = 0; i < transmission.length; i++) { - var msg = transmission[i]; - self.emit(msg.m, msg); - } - }); -}; - -Client.prototype.bindEventListeners = function() { - var self = this; - this.on("hi", function(msg) { - self.user = msg.u; - self.receiveServerTime(msg.t, msg.e || undefined); - if(self.desiredChannelId) { - self.setChannel(); - } - }); - this.on("t", function(msg) { - self.receiveServerTime(msg.t, msg.e || undefined); - }); - this.on("ch", function(msg) { - self.desiredChannelId = msg.ch._id; - self.channel = msg.ch; - if(msg.p) self.participantId = msg.p; - self.setParticipants(msg.ppl); - }); - this.on("p", function(msg) { - self.participantUpdate(msg); - self.emit("participant update", self.findParticipantById(msg.id)); - }); - this.on("m", function(msg) { - if(self.ppl.hasOwnProperty(msg.id)) { - self.participantUpdate(msg); - } - }); - this.on("bye", function(msg) { - self.removeParticipant(msg.p); - }); -}; - -Client.prototype.send = function(raw) { - if(this.isConnected()) this.ws.send(raw); -}; - -Client.prototype.sendArray = function(arr) { - this.send(JSON.stringify(arr)); -}; - -Client.prototype.setChannel = function(id, set) { - this.desiredChannelId = id || this.desiredChannelId || "lobby"; - this.desiredChannelSettings = set || this.desiredChannelSettings || undefined; - this.sendArray([{m: "ch", _id: this.desiredChannelId, set: this.desiredChannelSettings}]); -}; - -Client.prototype.offlineChannelSettings = { - lobby: true, - visible: false, - chat: false, - crownsolo: false, - color:"#ecfaed" -}; - -Client.prototype.getChannelSetting = function(key) { - if(!this.isConnected() || !this.channel || !this.channel.settings) { - return this.offlineChannelSettings[key]; - } - return this.channel.settings[key]; -}; - -Client.prototype.offlineParticipant = { - name: "", - color: "#777" -}; - -Client.prototype.getOwnParticipant = function() { - return this.findParticipantById(this.participantId); -}; - -Client.prototype.setParticipants = function(ppl) { - // remove participants who left - for(var id in this.ppl) { - if(!this.ppl.hasOwnProperty(id)) continue; - var found = false; - for(var j = 0; j < ppl.length; j++) { - if(ppl[j].id === id) { - found = true; - break; - } - } - if(!found) { - this.removeParticipant(id); - } - } - // update all - for(var i = 0; i < ppl.length; i++) { - this.participantUpdate(ppl[i]); - } -}; - -Client.prototype.countParticipants = function() { - var count = 0; - for(var i in this.ppl) { - if(this.ppl.hasOwnProperty(i)) ++count; - } - return count; -}; - -Client.prototype.participantUpdate = function(update) { - var part = this.ppl[update.id] || null; - if(part === null) { - part = update; - this.ppl[part.id] = part; - this.emit("participant added", part); - this.emit("count", this.countParticipants()); - } else { - if(update.x) part.x = update.x; - if(update.y) part.y = update.y; - if(update.color) part.color = update.color; - if(update.name) part.name = update.name; - } -}; - -Client.prototype.removeParticipant = function(id) { - if(this.ppl.hasOwnProperty(id)) { - var part = this.ppl[id]; - delete this.ppl[id]; - this.emit("participant removed", part); - this.emit("count", this.countParticipants()); - } -}; - -Client.prototype.findParticipantById = function(id) { - return this.ppl[id] || this.offlineParticipant; -}; - -Client.prototype.isOwner = function() { - return this.channel && this.channel.crown && this.channel.crown.participantId === this.participantId; -}; - -Client.prototype.preventsPlaying = function() { - return this.isConnected() && !this.isOwner() && this.getChannelSetting("crownsolo") === true; -}; - -Client.prototype.receiveServerTime = function(time, echo) { - var self = this; - var now = Date.now(); - var target = time - now; - //console.log("Target serverTimeOffset: " + target); - var duration = 1000; - var step = 0; - var steps = 50; - var step_ms = duration / steps; - var difference = target - this.serverTimeOffset; - var inc = difference / steps; - var iv; - iv = setInterval(function() { - self.serverTimeOffset += inc; - if(++step >= steps) { - clearInterval(iv); - //console.log("serverTimeOffset reached: " + self.serverTimeOffset); - self.serverTimeOffset=target; - } - }, step_ms); - // smoothen - - //this.serverTimeOffset = time - now; // mostly time zone offset ... also the lags so todo smoothen this - // not smooth: - //if(echo) this.serverTimeOffset += echo - now; // mostly round trip time offset -}; - -Client.prototype.startNote = function(note, vel) { - if(this.isConnected()) { - var vel = typeof vel === "undefined" ? undefined : +vel.toFixed(3); - if(!this.noteBufferTime) { - this.noteBufferTime = Date.now(); - this.noteBuffer.push({n: note, v: vel}); - } else { - this.noteBuffer.push({d: Date.now() - this.noteBufferTime, n: note, v: vel}); - } - } -}; - -Client.prototype.stopNote = function(note) { - if(this.isConnected()) { - if(!this.noteBufferTime) { - this.noteBufferTime = Date.now(); - this.noteBuffer.push({n: note, s: 1}); - } else { - this.noteBuffer.push({d: Date.now() - this.noteBufferTime, n: note, s: 1}); - } - } + +if(typeof module !== "undefined") { + module.exports = Client; + WebSocket = require("ws"); + EventEmitter = require("events").EventEmitter; +} else { + this.Client = Client; +} + + +function mixin(obj1, obj2) { + for(var i in obj2) { + if(obj2.hasOwnProperty(i)) { + obj1[i] = obj2[i]; + } + } +}; + + +function Client(uri, token) { + EventEmitter.call(this); + this.uri = uri; + this.ws = undefined; + this.serverTimeOffset = 0; + this.user = undefined; + this.participantId = undefined; + this.channel = undefined; + this.ppl = {}; + this.connectionTime = undefined; + this.connectionAttempts = 0; + this.desiredChannelId = undefined; + this.desiredChannelSettings = undefined; + this.pingInterval = undefined; + this.canConnect = false; + this.noteBuffer = []; + this.noteBufferTime = 0; + this.noteFlushInterval = undefined; + this.token = token; + + this.bindEventListeners(); + + this.emit("status", "(Offline mode)"); +}; + +mixin(Client.prototype, EventEmitter.prototype); + +Client.prototype.constructor = Client; + +Client.prototype.isSupported = function() { + return typeof WebSocket === "function"; +}; + +Client.prototype.isConnected = function() { + return this.isSupported() && this.ws && this.ws.readyState === WebSocket.OPEN; +}; + +Client.prototype.isConnecting = function() { + return this.isSupported() && this.ws && this.ws.readyState === WebSocket.CONNECTING; +}; + +Client.prototype.start = function() { + this.canConnect = true; + this.connect(); +}; + +Client.prototype.stop = function() { + this.canConnect = false; + this.ws.close(); +}; + +Client.prototype.connect = function() { + if(!this.canConnect || !this.isSupported() || this.isConnected() || this.isConnecting()) + return; + this.emit("status", "Connecting..."); + this.ws = new WebSocket(this.uri); + this.ws.binaryType = "arraybuffer"; + var self = this; + this.ws.addEventListener("close", function(evt) { + self.user = undefined; + self.participantId = undefined; + self.channel = undefined; + self.setParticipants([]); + clearInterval(self.pingInterval); + clearInterval(self.noteFlushInterval); + + self.emit("disconnect"); + self.emit("status", "Offline mode"); + + // reconnect! + if(self.connectionTime) { + self.connectionTime = undefined; + self.connectionAttempts = 0; + } else { + ++self.connectionAttempts; + } + var ms_lut = [50, 2950, 7000, 10000]; + var idx = self.connectionAttempts; + if(idx >= ms_lut.length) idx = ms_lut.length - 1; + var ms = ms_lut[idx]; + setTimeout(self.connect.bind(self), ms); + }); + this.ws.addEventListener("open", function(evt) { + self.connectionTime = Date.now(); + self.sendArray([{m: "hi", token: self.token}]); + self.pingInterval = setInterval(function() { + self.sendArray([{m: "t", e: Date.now()}]); + }, 20000); + //self.sendArray([{m: "t", e: Date.now()}]); + self.noteBuffer = []; + self.noteBufferTime = 0; + self.noteFlushInterval = setInterval(function() { + if(self.noteBufferTime && self.noteBuffer.length > 0) { + self.sendArray([{m: "n", t: self.noteBufferTime + self.serverTimeOffset, n: self.noteBuffer}]); + self.noteBufferTime = 0; + self.noteBuffer = []; + } + }, 200); + + self.emit("connect"); + self.emit("status", "Joining channel..."); + }); + this.ws.addEventListener("message", function(evt) { + if(typeof evt.data !== 'string') return; + var transmission = JSON.parse(evt.data); + for(var i = 0; i < transmission.length; i++) { + var msg = transmission[i]; + self.emit(msg.m, msg); + } + }); +}; + +Client.prototype.bindEventListeners = function() { + var self = this; + this.on("hi", function(msg) { + self.user = msg.u; + self.receiveServerTime(msg.t, msg.e || undefined); + if(self.desiredChannelId) { + self.setChannel(); + } + }); + this.on("t", function(msg) { + self.receiveServerTime(msg.t, msg.e || undefined); + }); + this.on("ch", function(msg) { + self.desiredChannelId = msg.ch._id; + self.channel = msg.ch; + if(msg.p) self.participantId = msg.p; + self.setParticipants(msg.ppl); + }); + this.on("p", function(msg) { + self.participantUpdate(msg); + self.emit("participant update", self.findParticipantById(msg.id)); + }); + this.on("m", function(msg) { + if(self.ppl.hasOwnProperty(msg.id)) { + self.participantUpdate(msg); + } + }); + this.on("bye", function(msg) { + self.removeParticipant(msg.p); + }); +}; + +Client.prototype.send = function(raw) { + if(this.isConnected()) this.ws.send(raw); +}; + +Client.prototype.sendArray = function(arr) { + this.send(JSON.stringify(arr)); +}; + +Client.prototype.setChannel = function(id, set) { + this.desiredChannelId = id || this.desiredChannelId || "lobby"; + this.desiredChannelSettings = set || this.desiredChannelSettings || undefined; + this.sendArray([{m: "ch", _id: this.desiredChannelId, set: this.desiredChannelSettings}]); +}; + +Client.prototype.offlineChannelSettings = { + lobby: true, + visible: false, + chat: false, + crownsolo: false, + color:"#ecfaed" +}; + +Client.prototype.getChannelSetting = function(key) { + if(!this.isConnected() || !this.channel || !this.channel.settings) { + return this.offlineChannelSettings[key]; + } + return this.channel.settings[key]; +}; + +Client.prototype.offlineParticipant = { + name: "", + color: "#777" +}; + +Client.prototype.getOwnParticipant = function() { + return this.findParticipantById(this.participantId); +}; + +Client.prototype.setParticipants = function(ppl) { + // remove participants who left + for(var id in this.ppl) { + if(!this.ppl.hasOwnProperty(id)) continue; + var found = false; + for(var j = 0; j < ppl.length; j++) { + if(ppl[j].id === id) { + found = true; + break; + } + } + if(!found) { + this.removeParticipant(id); + } + } + // update all + for(var i = 0; i < ppl.length; i++) { + this.participantUpdate(ppl[i]); + } +}; + +Client.prototype.countParticipants = function() { + var count = 0; + for(var i in this.ppl) { + if(this.ppl.hasOwnProperty(i)) ++count; + } + return count; +}; + +Client.prototype.participantUpdate = function(update) { + var part = this.ppl[update.id] || null; + if(part === null) { + part = update; + this.ppl[part.id] = part; + this.emit("participant added", part); + this.emit("count", this.countParticipants()); + } else { + if(update.x) part.x = update.x; + if(update.y) part.y = update.y; + if(update.color) part.color = update.color; + if(update.name) part.name = update.name; + } +}; + +Client.prototype.removeParticipant = function(id) { + if(this.ppl.hasOwnProperty(id)) { + var part = this.ppl[id]; + delete this.ppl[id]; + this.emit("participant removed", part); + this.emit("count", this.countParticipants()); + } +}; + +Client.prototype.findParticipantById = function(id) { + return this.ppl[id] || this.offlineParticipant; +}; + +Client.prototype.isOwner = function() { + return this.channel && this.channel.crown && this.channel.crown.participantId === this.participantId; +}; + +Client.prototype.preventsPlaying = function() { + return this.isConnected() && !this.isOwner() && this.getChannelSetting("crownsolo") === true; +}; + +Client.prototype.receiveServerTime = function(time, echo) { + var self = this; + var now = Date.now(); + var target = time - now; + //console.log("Target serverTimeOffset: " + target); + var duration = 1000; + var step = 0; + var steps = 50; + var step_ms = duration / steps; + var difference = target - this.serverTimeOffset; + var inc = difference / steps; + var iv; + iv = setInterval(function() { + self.serverTimeOffset += inc; + if(++step >= steps) { + clearInterval(iv); + //console.log("serverTimeOffset reached: " + self.serverTimeOffset); + self.serverTimeOffset=target; + } + }, step_ms); + // smoothen + + //this.serverTimeOffset = time - now; // mostly time zone offset ... also the lags so todo smoothen this + // not smooth: + //if(echo) this.serverTimeOffset += echo - now; // mostly round trip time offset +}; + +Client.prototype.startNote = function(note, vel) { + if(this.isConnected()) { + var vel = typeof vel === "undefined" ? undefined : +vel.toFixed(3); + if(!this.noteBufferTime) { + this.noteBufferTime = Date.now(); + this.noteBuffer.push({n: note, v: vel}); + } else { + this.noteBuffer.push({d: Date.now() - this.noteBufferTime, n: note, v: vel}); + } + } +}; + +Client.prototype.stopNote = function(note) { + if(this.isConnected()) { + if(!this.noteBufferTime) { + this.noteBufferTime = Date.now(); + this.noteBuffer.push({n: note, s: 1}); + } else { + this.noteBuffer.push({d: Date.now() - this.noteBufferTime, n: note, s: 1}); + } + } }; \ No newline at end of file diff --git a/src/newfish.json b/src/newfish.json index 1ce479b..10340da 100644 --- a/src/newfish.json +++ b/src/newfish.json @@ -1,9359 +1,9358 @@ -[ - "Sea lamprey", - "River lamprey", - "Least brook lamprey", - "Western American river lamprey", - "European brook lamprey", - "Western brook lamprey", - "Turkish brook lamprey", - "Pacific brook lamprey", - "Silver lamprey", - "Ohio lamprey", - "Chestnut lamprey", - "Northern brook lamprey", - "Southern brook lamprey", - "Mountain brook lamprey", - "Ukrainian brook lamprey", - "Carpathian lamprey", - "Greek brook lamprey", - "Korean lamprey", - "Caspian lamprey", - "Arctic lamprey", - "Siberian lamprey", - "Western Transcaucasian lamprey", - "Far Eastern brook lamprey", - "Lombardy brook lamprey", - "Alaskan brook lamprey", - "American brook lamprey", - "Pacific lamprey", - "Northern California lamprey", - "Kern brook lamprey", - "Pit–Klamath brook lamprey", - "Vancouver lamprey", - "Miller Lake lamprey", - "Klamath lamprey", - "Jacona lamprey", - "Chapala lamprey", - "Lampreys nei", - "Chilean lamprey", - "Australian lamprey", - "Pouched lamprey", - "Brown hagfish", - "Hagfish", - "Inshore hagfish", - "Pacific hagfish", - "Broadgilled hagfish", - "Hagfishes nei", - "Horn shark", - "Crested bullhead shark", - "Japanese bullhead shark", - "Mexican hornshark", - "Port Jackson shark", - "Galapagos bullhead shark", - "Whitespotted bullhead shark", - "Zebra bullhead shark", - "Bullhead sharks", - "Frilled shark", - "African frilled shark", - "Bluntnose sixgill shark", - "Bigeyed sixgill shark", - "Sharpnose sevengill shark", - "Broadnose sevengill shark", - "Frilled and cow sharks", - "Basking shark", - "Sand tiger shark", - "Indian sand tiger", - "Smalltooth sand tiger", - "Bigeye sand tiger shark", - "Goblin shark", - "Crocodile shark", - "Megamouth shark", - "Thresher", - "Pelagic thresher", - "Bigeye thresher", - "Thresher sharks nei", - "Shortfin mako", - "Longfin mako", - "Mako sharks", - "Porbeagle", - "Salmon shark", - "Great white shark", - "Mackerel sharks, porbeagles nei", - "Mackerel sharks", - "Zebra shark", - "Tasselled wobbegong", - "Japanese wobbegong", - "Spotted wobbegong", - "Ornate wobbegong", - "Northern wobbegong", - "Cobbler wobbegong", - "Nurse shark", - "Short-tail nurse shark", - "Nurse sharks nei", - "Tawny nurse shark", - "Indonesia speckled carpetshark", - "Papuan epaulette shark", - "Epaulette shark", - "Hooded carpetshark", - "Speckled carpetshark", - "Arabian carpetshark", - "Bluespotted bambooshark", - "Grey bambooshark", - "Slender bambooshark", - "Whitespotted bambooshark", - "Brownbanded bambooshark", - "Burmese bambooshark", - "Hasselt's bambooshark", - "Bamboosharks nei", - "Whale shark", - "Blind shark", - "Bluegray carpetshark", - "Barbelthroat carpetshark", - "Taiwan saddled carpetshark", - "Saddle carpetshark", - "Collared carpetshark", - "Rusty carpetshark", - "Necklace carpetshark", - "Carpet sharks", - "Roughtail catshark", - "Australian sawtail catshark", - "Gecko catshark", - "Blackmouth catshark", - "Mouse catshark", - "Broadfin sawtail catshark", - "Peppered catshark", - "African sawtail catshark", - "Blacktip sawtail catshark", - "Dwarf sawtail catshark", - "Atlantic sawtail catshark", - "Crest-tail catsharks nei", - "Small-spotted catshark", - "Nursehound", - "Polkadot catshark", - "Boa catshark", - "Yellowspotted catshark", - "West African catshark", - "Brownspotted catshark", - "Freckled catshark", - "Whitesaddled catshark", - "Blotched catshark", - "Chain catshark", - "Cloudy catshark", - "Dwarf catshark", - "Catsharks, nursehounds nei", - "Narrowmouthed catshark", - "Redspotted catshark", - "Narrowtail catshark", - "Slender catshark", - "Australian spotted catshark", - "Gulf catshark", - "Australian marbled catshark", - "Coral catshark", - "Puffadder shyshark", - "Brown shyshark", - "Dark shyshark", - "African spotted catshark", - "Izak catshark", - "Campeche catshark", - "McMillan's cat shark", - "Blackgill catshark", - "Salamander shark", - "Filetail catshark", - "Atlantic ghost catshark", - "Brown catshark", - "Hoary catshark", - "Longfin catshark", - "Smallbelly catshark", - "Broadnose catshark", - "Japanese catshark", - "Longnose catshark", - "Iceland catshark", - "Longhead catshark", - "Flathead catshark", - "Madeira catshark", - "Ghost catshark", - "Smalleye catshark", - "Largenose catshark", - "Smallfin catshark", - "Spatulasnout catshark", - "Deep-water catshark", - "Broadgill catshark", - "Saldanha catshark", - "Pale catshark", - "South China catshark", - "Spongehead catshark", - "Panama ghost catshark", - "Borneo catshark", - "Deep-water catsharks", - "Kanakorum catshark", - "Australian blackspot catshark", - "Arabian catshark", - "Speckled catshark", - "Blackspotted catshark", - "Dusky catshark", - "New Zealand catshark", - "Bristly catshark", - "Spotless catshark", - "Lined catshark", - "Mud catshark", - "Tiger catshark", - "Quagga catshark", - "Onefin catshark", - "Reticulated swellshark", - "Draughtsboard shark", - "Australian swellshark", - "Whitefinned swellshark", - "Indian swellshark", - "Balloon shark", - "Blotchy swell shark", - "Swellshark", - "Lollipop catshark", - "Striped catshark", - "Barbeled catshark", - "Leopard catshark", - "Catsharks, etc. nei", - "Blue shark", - "Daggernose shark", - "Broadfin shark", - "Whitenose shark", - "Sandbar shark", - "Graceful shark", - "Blacktip shark", - "Blacktip reef shark", - "Grey reef shark", - "Pigeye shark", - "Borneo shark", - "Blacknose shark", - "Nervous shark", - "Oceanic whitetip shark", - "Smalltail shark", - "Whitecheek shark", - "Creek whaler", - "Dusky shark", - "Silky shark", - "Bull shark", - "Silvertip shark", - "Copper shark", - "Spinner shark", - "Blackspot shark", - "Night shark", - "Hardnose shark", - "Finetooth shark", - "Bignose shark", - "Galapagos shark", - "Pondicherry shark", - "Caribbean reef shark", - "Spot-tail shark", - "Australian blacktip shark", - "Blacktail reef shark", - "Carcharhinus sharks nei", - "Tiger shark", - "Spadenose shark", - "Whitetip reef shark", - "Lemon shark", - "Sicklefin lemon shark", - "Sliteye shark", - "Ganges shark", - "Speartooth shark", - "Atlantic sharpnose shark", - "Milk shark", - "Brazilian sharpnose shark", - "Pacific sharpnose shark", - "Grey sharpnose shark", - "Caribbean sharpnose shark", - "Australian sharpnose shark", - "Sharpnose sharks nei", - "Requiem sharks nei", - "Winghead shark", - "Smooth hammerhead", - "Scalloped bonnethead", - "Whitefin hammerhead", - "Scalloped hammerhead", - "Scoophead", - "Smalleye hammerhead", - "Bonnethead", - "Great hammerhead", - "Hammerhead sharks nei", - "Hammerhead sharks, etc. nei", - "Gummy shark", - "Grey smooth-hound", - "Dusky smooth-hound", - "Sharptooth smooth-hound", - "Striped smooth-hound", - "Spotless smooth-hound", - "Brown smooth-hound", - "Smalleye smooth-hound", - "Spotted estuary smooth-hound", - "Sicklefin smooth-hound", - "Starspotted smooth-hound", - "Narrownose smooth-hound", - "Smooth-hound", - "Narrowfin smooth-hound", - "Starry smooth-hound", - "Speckled smooth-hound", - "Arabian smooth-hound", - "Whitespotted smooth-hound", - "Blackspotted smooth-hound", - "Humpback smooth-hound", - "Smooth-hounds nei", - "Tope shark", - "Sharpfin houndshark", - "Leopard shark", - "Spotted houndshark", - "Sharptooth houndshark", - "Banded houndshark", - "Longnose houndshark", - "Bigeye houndshark", - "Sailback houndshark", - "Blacktipe tope", - "Whiskery shark", - "Japanese topeshark", - "Whitefin topeshark", - "Flapnose houndshark", - "Houndsharks, smoothhounds nei", - "False catshark", - "Hooktooth shark", - "Snaggletooth shark", - "Whitetip weasel shark", - "Atlantic weasel shark", - "Straight-tooth weasel shark", - "Slender weasel shark", - "Sicklefin weasel shark", - "Barbeled houndshark", - "Harlequin catshark", - "Cuban ribbontail catshark", - "Pygmy ribbontail catshark", - "African ribbontail catshark", - "Slender smooth-hound", - "Graceful catshark", - "Ground sharks", - "Greenland shark", - "Little sleeper shark", - "Pacific sleeper shark", - "Roughskin spurdog", - "Mandarin dogfish", - "Taillight shark", - "Longnose pygmy shark", - "Longnose spurdog", - "Cuban dogfish", - "Japanese spurdog", - "Picked dogfish", - "Shortspine spurdog", - "Cyrano spurdog", - "Blacktailed spurdog", - "Shortnose spurdog", - "Dogfishes nei", - "Gulper shark", - "Little gulper shark", - "Leafscale gulper shark", - "Lowfin gulper shark", - "Needle dogfish", - "Dumb gulper shark", - "Smallfin gulper shark", - "Taiwan gulper shark", - "Mosaic gulper shark", - "Blackfin gulper shark", - "Black gulper shark", - "Gulper sharks nei", - "Velvet belly", - "Blurred smooth lantern shark", - "Shorttail lanternshark", - "Lined lanternshark", - "Great lanternshark", - "Smooth lanternshark", - "Broadbanded lanternshark", - "Southern lanternshark(Lucifer)", - "Carribean lanternshark", - "Blackbelly lanternshark", - "Mollers lantern shark", - "African lanternshark", - "Fringfin lanternshark", - "Thorny lanternshark", - "Splendid lanternshark", - "Brown lanternshark", - "Hawaiian lanternshark", - "Green lanternshark", - "Combtoothed lanternshark", - "Lanternsharks nei", - "Cookie cutter shark", - "Largetooth cookiecutter shark", - "Pygmy shark", - "Birdbeak dogfish", - "Rough longnose dogfish", - "Arrowhead dogfish", - "Longsnout dogfish", - "Deania dogfishes nei", - "Whitetail dogfish", - "Sherwood dogfish", - "Portuguese dogfish", - "Longnose velvet dogfish", - "Shortnose velvet dogfish", - "Roughskin dogfish", - "Plunket shark", - "Smallmouth knifetooth dogfish", - "Knifetooth dogfish", - "Largespine velvet dogfish", - "Velvet dogfish", - "Kitefin shark", - "Black dogfish", - "Granular dogfish", - "Bareskin dogfish", - "Combtooth dogfish", - "Ornate dogfish", - "Whitefin dogfish", - "Centroscyllium dogfishes nei", - "Hooktooth dogfish", - "Smalleye pygmy shark", - "Spined pygmy shark", - "Dogfish sharks nei", - "Dogfishes and hounds nei", - "Longnose sawshark", - "Japanese sawshark", - "Shortnose sawshark", - "Bahamas sawshark", - "Sixgill sawshark", - "Sawsharks nei", - "Angelshark", - "Sawback angelshark", - "African angelshark", - "Argentine angelshark", - "Australian angelshark", - "Pacific angelshark", - "Sand devil", - "Taiwan angleshark", - "Japanese angelshark", - "Clouded angelshark", - "Smoothback angelshark", - "Ornate angelshark", - "Ocellated angelshark", - "Angular angel shark", - "Hidden angel shark", - "Angelsharks, sand devils nei", - "Angular roughshark", - "Sailfin roughshark", - "Prickly dogfish", - "Caribbean roughshark", - "Japanese roughshark", - "Bramble shark", - "Prickly shark", - "Dogfish sharks, etc. nei", - "Short-snouted shovelnose ray", - "Eastern shovelnose ray", - "Western shovelnose ray", - "Thornback guitarfish", - "Whitespotted wedgefish", - "Giant guitarfish", - "African wedgefish", - "Annandale's guitarfish", - "Bluntnose guitarfish", - "Lesser guitarfish", - "Blackchin guitarfish", - "Chola guitarfish", - "Pacific guitarfish", - "Halavi ray", - "Slender guitarfish", - "Whitespotted guitarfish", - "Whitesnout guitarfish", - "Grayspottted guitarfish", - "Speckled guitarfish", - "Shovelnose guitarfish", - "Common guitarfish", - "Brown guitarfish", - "Thouin ray", - "Giant shovelnose ray", - "Brazilian guitarfish", - "Granulated guitarfish", - "Atlantic guitarfish", - "Guitarfishes nei", - "Banded guitarfish", - "Bowmouth guitarfish", - "Southern fiddler", - "Magpie fiddler ray", - "Guitarfishes, etc. nei", - "Pointed sawfish", - "Dwarf sawfish", - "Largetooth sawfish", - "Smalltooth sawfish", - "Common sawfish", - "Longcomb sawfish", - "Sawfishes", - "Blue skate", - "Thornback ray", - "Starry ray", - "Spotted ray", - "Blonde ray", - "Sandy ray", - "Shagreen ray", - "Yellowspotted skate", - "Small-eyed ray", - "Cuckoo ray", - "Longnosed skate", - "Undulate ray", - "Roughbelly skate", - "Starry skate", - "Prow-nose skate", - "Spotted skate", - "Prickly brown ray", - "Roundel skate", - "Wedgenose skate", - "Velez ray", - "White skate", - "Longnose skate", - "Bigmouth skate", - "Rondelet's ray", - "Round ray", - "Antarctic starry skate", - "Ocellate skate", - "African ray", - "Mediterranean starry ray", - "Sydney skate", - "Broad skate", - "Deep-water ray", - "Bigelow's ray", - "Big skate", - "Bullis skate", - "Blackspot skate", - "Spotback skate", - "Munchskin skate", - "White-spotted skate", - "Finspot ray", - "Cortez' ray", - "Eyespot skate", - "Ghost skate", - "Violet skate", - "Clearnose skate", - "Ecuatorial ray", - "Little skate", - "Freckled skate", - "Greenback skate", - "Arctic skate", - "California ray", - "Shorttail skate", - "Barndoor skate", - "Rattail skate", - "Thornback skate", - "Leopard skate", - "Sailray", - "Madeiran ray", - "Maltese ray", - "Brown ray", - "Rough skate", - "Norwegian skate", - "Winter skate", - "Spreadfin skate", - "Argus skate", - "Speckled ray", - "Slime skate", - "Rough ray", - "Smoothback skate", - "Raja rays nei", - "Eaton's skate", - "McCain's skate", - "Murray's skate", - "Deep-sea skate", - "Aleutian skate", - "Sandpaper skate", - "Kerguelen sandpaper skate", - "Commander skate", - "Dark-belly skate", - "Pale ray", - "Alaska skate", - "Richardson's ray", - "Flathead skate", - "Longnose deep-sea skate", - "Spinetail ray", - "Spiny skate", - "Roughtail skate", - "Okhotsk skate", - "Broadnose skate", - "Patagonian skate", - "Cuphead skate", - "Bathyraja rays nei", - "Longtail skate", - "Cuban legskate", - "Smoothnose legskate", - "Roughnose legskate", - "Triangular legskate", - "Southern round skate", - "Soft skate", - "Smooth skate", - "Krefft's ray", - "African pygmy skate", - "Allens skate", - "Smooth deep-sea skate", - "Peacock skate", - "Prickly deep-sea skate", - "Dapple-bellied softnose skate", - "New Zealand smooth skate", - "Yellownose skate", - "New Zealand rough skate", - "Rio skate", - "Blotched sand skate", - "Shortfin sand skate", - "Psammobatis sand skates nei", - "Smallnose fanskate", - "Bignose fanskate", - "Blue ray", - "Bigthorn skate", - "Rays and skates nei", - "Whip stingray", - "Southern stingray", - "Plain maskray", - "Bennett's stingray", - "Short-tail stingray", - "Whiptail stingray", - "Roughtail stingray", - "Diamond stingray", - "Estuary stingray", - "Sharpsnout stingray", - "Longnose stingray", - "Blue-spotted stingray", - "Pelagic stingray", - "Mekong stingray", - "Painted maskray", - "Longtail stingray", - "Daisy stingray", - "Smalleye stingray", - "Common stingray", - "Atlantic stingray", - "Bluntnose stingray", - "Thorntail stingray", - "Tortonese's stingray", - "Pale-edged stingray", - "Stingrays nei", - "Cowtail stingray", - "Round stingray", - "Ribbontail stingray", - "Round ribbontail ray", - "Porcupine ray", - "Butterfly ray", - "Bleeker's whipray", - "Freshwater whipray", - "Dragon stingray", - "Pink whipray", - "Sharpnose stingray", - "Mangrove whipray", - "Scaly whipray", - "Jenkins whipray", - "Blackedge whipray", - "Marbled whipray", - "Pacific chupare", - "Chupare stingray", - "White-rimmed stingray", - "Black-spotted whipray", - "Honeycomb stingray", - "Leopard whipray", - "Dwarf whipray", - "Stingrays, butterfly rays nei", - "South American freshwater stin", - "Longheaded eagle ray", - "Spotted eagle ray", - "Common eagle ray", - "Australian bull ray", - "Bat eagle ray", - "Bullnose eagle ray", - "Southern eagle ray", - "Purple eagle ray", - "Snouted eagle ray", - "Eagle ray", - "Japanese eagle ray", - "Rough eagle ray", - "Bull ray", - "Rough cownose ray", - "Cownose ray", - "Ticon cownose ray", - "Flapnose ray", - "Oman cownose ray", - "Lusitanian cownose ray", - "Australian cownose ray", - "Pacific cownose ray", - "Mottled eagle ray", - "Banded eagle ray", - "Ornate eagle ray", - "Eagle rays nei", - "Giant manta", - "Manta rays", - "Longhorned mobula", - "Lesser devil ray", - "Spinetail mobula", - "Shortfin devil ray", - "Devil fish", - "Munk's devil ray", - "Lesser Guinean devil ray", - "Chilean devil ray", - "Smoothtail mobula", - "Mobula nei", - "Mantas, devil rays nei", - "Spiny butterfly ray", - "Australian butterfly ray", - "Longsnout butterfly ray", - "Japanese butterflyray", - "California butterfly ray", - "Smooth butterfly ray", - "Long-tailed butterfly ray", - "Tentacled butterfly ray", - "Zonetail butterfly ray", - "Butterfly rays nei", - "Sixgill stingray", - "Western shovelnose stingaree", - "Striped stingaree", - "Masked stingaree", - "Sandyback stingaree", - "Circular stingaree", - "Spot-on-spot round ray", - "Crossback stingaree", - "Wide stingaree", - "Patchwork stingaree", - "Spotted stingaree", - "Haller's round ray", - "Yellow stingray", - "Lobed stingaree", - "Spotted round ray", - "Mitotic stingaree", - "Coastal stingaree", - "Sparsely-spotted stingaree", - "Yellowback stingaree", - "Common stingaree", - "Greenback stingaree", - "Brown stingaree", - "Spiny-tail round ray", - "Chilean round ray", - "Munda round ray", - "Dwarf round ray", - "Reticulate round ray", - "Rogers' round ray", - "Fake round ray", - "Spotted legskate", - "Black legskate", - "Deep-water stingray", - "Rays, stingrays, mantas nei", - "Rosette torpedo", - "Pacific electric ray", - "New Zealand torpedo", - "Black-spotted torpedo", - "Ringed torpedo", - "Shorttail torpedo", - "Marbled electric ray", - "Electric ray", - "Panther electric ray", - "Peruvian torpedo", - "Variable torpedo ray", - "Trapezoid torpedo", - "Common torpedo", - "Chilean torpedo", - "Argentine torpedo", - "Torpedo rays", - "Australian numbfish", - "Electric rays nei", - "Blind torpedo", - "Ocellated electric ray", - "Natal electric ray", - "Brazilian electric ray", - "Brown numbfish", - "Giant electric ray", - "Slender electric ray", - "Tasmanian numbfish", - "Spotted numbfish", - "Vermiculate electric ray", - "Banded numbfish", - "Onefin electric ray", - "Numbray", - "Blind electric ray", - "Oval electric ray", - "Electric rays, etc. nei", - "Rabbit fish", - "Silver chimaera", - "Spotted ratfish", - "Smalleyed rabbitfish", - "African chimaera", - "Philippine chimaera", - "Blackfin ghostshark", - "Large-eyed rabbitfish", - "Dark ghost shark", - "Purple chimaera", - "Ratfishes nei", - "Straightnose rabbitfish", - "Pacific spookfish", - "Knife-nosed chimaeras nei", - "Smallspine spookfish", - "Pacific longnose chimaera", - "Longnose chimaeras", - "Sicklefin chimaera", - "Ghost shark", - "Plownose chimaera", - "Cape elephantfish", - "Elephantfishes, etc. nei", - "Chimaeras, etc. nei", - "Australian lungfish", - "South American lungfish", - "Coelacanth", - "Reedfish", - "Marbled lungfish", - "West African lungfish", - "African lungfishes", - "Sturgeon", - "Danube sturgeon(=Osetr)", - "Adriatic sturgeon", - "Sterlet sturgeon", - "Starry sturgeon", - "Fringebarbel sturgeon", - "Lake sturgeon", - "Atlantic sturgeon", - "White sturgeon", - "Shortnose sturgeon", - "Siberian sturgeon", - "Amur sturgeon", - "Yangtze sturgeon", - "Green sturgeon", - "Sakhalin sturgeon", - "Persian sturgeon", - "Chinese sturgeon", - "Japanese sturgeon", - "Shovelnose sturgeon", - "Pallid sturgeon", - "Alabama sturgeon", - "Beluga", - "Kaluga", - "Dwarf sturgeon", - "Amu Darya sturgeon", - "Syr Darya sturgeon", - "Sturgeons nei", - "Mississippi paddlefish", - "Chinese swordfish", - "Bowfin", - "Longnose gar", - "Florida gar", - "Shortnose gar", - "Spotted gar", - "Cuban gar", - "Alligator gar", - "Tropical gar", - "Gars nei", - "Atlantic herring", - "Pacific herring", - "Dogtooth herring", - "Bleeker smoothbelly sardinella", - "Smoothbelly sardinella", - "Spotted sardinella", - "Caspian shad", - "Pontic shad", - "American shad", - "Allis shad", - "Twaite shad", - "Alewife", - "Blueback shad", - "Hickory shad", - "Caspian marine shad", - "Alabama shad", - "Caspian anadromous shad", - "Black Sea shad", - "Saposhnikovi shad", - "Agrakhan shad", - "Shads nei", - "Allis and twaite shads", - "Deepbody sardinella", - "Yellowtail sardinella", - "Goldstripe sardinella", - "Indian oil sardine", - "Blacktip sardinella", - "Fringescale sardinella", - "Sind sardinella", - "Round sardinella", - "East African sardinella", - "Mauritian sardinella", - "Madeiran sardinella", - "White sardinella", - "Japanese sardinella", - "Bali sardinella", - "Brazilian sardinella", - "Fiji sardinella", - "Sardinellas nei", - "Japanese pilchard", - "California pilchard", - "South American pilchard", - "Southern African pilchard", - "Australian pilchard", - "Kura shad", - "Caspian shads", - "Lake Tanganyika sprat", - "American gizzard shad", - "Threadfin shad", - "Amazon spinejaw sprat", - "Losera fangtooth pellonuline", - "Smalltoothed pellonula", - "Bigtoothed pellonula", - "Chacunda gizzard shad", - "Brazilian menhaden", - "Argentine menhaden", - "Atlantic menhaden", - "Gulf menhaden", - "Yellowfin menhaden", - "Menhadens nei", - "Borneo River sprat", - "Ganges River sprat", - "Rainbow sardine", - "Slender rainbow sardine", - "Rainbow sardines nei", - "Bonga shad", - "Red-eye round herring", - "Whitehead's round herring", - "Ganges River gizzard shad", - "Burmese river gizzard shad", - "False herring", - "Redear herring", - "Pacific flatiron herring", - "Scaled herring", - "Scaled sardines", - "Kelee shad", - "Dwarf round herring", - "Florida round herring", - "Hilsa shad", - "Laotian shad", - "Reeves shad", - "Toli shad", - "Longtail shad", - "Bloch's gizzard shad", - "Western Pacific gizzard shad", - "Australian river gizzard shad", - "Japanese gizzard shad", - "Arabian gizzard shad", - "Pacific thread herring", - "Atlantic thread herring", - "Slender thread herring", - "Middling thread herring", - "Thread herrings nei", - "Silver-stripe round herring", - "Delicate round herring", - "Ansorge fangtooth pellonuline", - "Nigerian fangtooth pellonuline", - "Indian river shad", - "Chinese gizzard shad", - "Black and Caspian Sea sprat", - "Anchovy sprat", - "Southern Caspian sprat", - "Black-Caspian Sea sprats nei", - "Dotted gizzard shad", - "Atlantic piquitinga", - "Pacific piquitinga", - "European pilchard(=Sardine)", - "Gilchrist's round herring", - "European sprat", - "Falkland sprat", - "Pacific menhaden", - "Bluestripe herring", - "Blacksaddle herring", - "Goto's herring", - "Gulf herring", - "Spotback herring", - "White sardine", - "Lake Tanganyika sardine", - "Araucanian herring", - "River Plate sprat", - "Jenyns's sprat", - "Australian freshwater herring", - "Two-finned round herring", - "Day's round herring", - "Sanaga pygmy herring", - "Roundbelly pellonuline", - "West African pygmy herring", - "Royal sprat", - "Sharpnosed sawtooth pellonul.", - "Lake Mweru sprat", - "Lake Tumba dwarf sprat", - "Thai river sprat", - "Sumatran river sprat", - "Malabar sprat", - "Smoothbelly pellonuline", - "Madagascar round herring", - "Sandy sprat", - "Herrings, sardines nei", - "Dagaas", - "European anchovy", - "Japanese anchovy", - "Argentine anchovy", - "Californian anchovy", - "Anchoveta(=Peruvian anchovy)", - "Southern African anchovy", - "Anchovies nei", - "Rio Negro pygmy anchovy", - "Devis' anchovy", - "Shorthead anchovy", - "Buccaneer anchovy", - "Jurua anchovy", - "Littlefin anchovy", - "Atlantic anchoveta", - "Pacific anchoveta", - "Regan's anchovy", - "Short anchovy", - "Marini's anchovy", - "Bermuda anchovy", - "Longnose anchovy", - "Eigenmann's anchovy", - "Slender anchovy", - "Rio anchovy", - "Panama anchovy", - "Broad-striped anchovy", - "Longfinger anchovy", - "Deep body anchovy", - "Bigfin anchovy", - "Cuban anchovy", - "Bay anchovy", - "Big-eye anchovy", - "Shortfinger anchovy", - "Spicule anchovy", - "Piquitinga anchovy", - "Trinidad anchovy", - "Bigscale anchovy", - "Zabaleta anchovy", - "Cayenne anchovy", - "Allen's anchovy", - "Elongate anchovy", - "Snubnose anchovy", - "Broadband anchovy", - "Guyana anchovy", - "James's anchovy", - "Natterer's anchovy", - "Vaillant's anchovy", - "Anchoviellas nei", - "Goldspotted grenadier anchovy", - "Yangtse grenadier anchovy", - "Longjaw grenadier anchovy", - "Osbeck's grenadier anchovy", - "Japanese grenadier anchovy", - "Bates' sabretooth anchovy", - "Atlantic sabretooth anchovy", - "Sabretooth anchovys nei", - "Sabretoothed thryssa", - "Dusky-hairfin anchovy", - "Gangetic hairfin anchovy", - "Shorthead hairfin anchovy", - "Scaly hairfin anchovy", - "Common hairfin anchovy", - "Commerson's anchovy", - "Bagan anchovy", - "China anchovy", - "Indian anchovy", - "Hardenberg's anchovy", - "Spined anchovy", - "Spotty-face anchovy", - "Andhra anchovy", - "Broadhead anchovy", - "Gulf of Carpenteria anchovy", - "Stolephorus anchovies nei", - "Hamilton's thryssa", - "Orangemouth anchovy", - "Malabar thryssa", - "Moustached thryssa", - "Oblique-jaw thryssa", - "Baelama anchovy", - "Longjaw thryssa", - "Dussumier's thryssa", - "False baelama anchovy", - "Kammal thryssa", - "New Guinea thryssa", - "Whitehead's thryssa", - "Fly River thryssa", - "Short-tail thryssa", - "Wingfin anchovy", - "Anchovies, etc. nei", - "Dorab wolf-herring", - "Whitefin wolf-herring", - "Wolf-herrings nei", - "Bigeye ilisha", - "Indian ilisha", - "Elongate ilisha", - "Coromandel ilisha", - "Javan ilisha", - "Pacific ilisha", - "West African ilisha", - "Lobejaw ilisha", - "Yellowfin river pellona", - "Indian pellona", - "Yellowfin herring", - "Tropical longfin herring", - "Tardoore", - "Guiana longfin herring", - "Amazon hatchet herring", - "Raconda", - "Diadromous clupeoids nei", - "Clupeoids nei", - "Milkfish", - "Naked shellear", - "Airbreathing shellear", - "Hingemouth", - "Beaked salmon", - "Atlantic salmon", - "Sea trout", - "Sevan trout", - "Trouts nei", - "Long-finned charr", - "Golden trout", - "Pink(=Humpback) salmon", - "Chum(=Keta=Dog) salmon", - "Cutthroat trout", - "Masu(=Cherry) salmon", - "Sockeye(=Red) salmon", - "Chinook(=Spring=King) salmon", - "Coho(=Silver) salmon", - "Rainbow trout", - "Apache trout", - "Mexican golden trout", - "Gila trout", - "Pacific salmons nei", - "Brook trout", - "Arctic char", - "Dolly varden", - "Lake trout(=Char)", - "Bull trout", - "Neiva", - "Chars nei", - "Adriatic trout", - "Huchen", - "Japanese huchen", - "Taimen", - "Lenok", - "Salmonids nei", - "Grayling", - "Mongolian grayling", - "Arctic grayling", - "Ayu sweetfish", - "Whitebait smelt", - "Capelin", - "European smelt", - "Rainbow smelt", - "Pond smelt", - "Surf smelt", - "Japanese smelt", - "Eulachon", - "Longfin smelt", - "Smelts nei", - "Greater argentine", - "Argentine", - "Argentines", - "Deep-sea smelt", - "Smalltoothed argentine", - "Argentines nei", - "Northern smoothtounge", - "Silver deepsea smelt", - "Goiter blacksmelt", - "Eared blacksmelt", - "Slender blacksmelt", - "Blacksmelts", - "Deep-sea smelts nei", - "Slender argentine", - "Chinese icefish", - "Clearhead icefish", - "Chinese noodlefish", - "Japanese icefish", - "Icefishes nei", - "Australian grayling", - "Stokell's smelt", - "Cucumberfish", - "Vendace", - "European whitefish", - "Houting", - "Irish pollan", - "Lake(=Common) whitefish", - "Lake cisco", - "Arctic cisco", - "Khadary-whitefish", - "Bloater", - "Kiyi", - "Muksun", - "Broad whitefish", - "Peled", - "Shortnose cisco", - "Sardine cisco", - "Tugun", - "Valaam whitefish", - "Whitefishes nei", - "Sheefish", - "Pygmy whitefish", - "Round whitefish", - "Mountain whitefish", - "Javelin spookfish", - "Barreleye", - "Mirrorbelly", - "Barrel-eye", - "Fangtooth smooth-head", - "Smallscale smooth-head", - "Michael Sars smooth-head", - "Koefoed's smooth-head", - "Baird's slickhead", - "Risso's smooth-head", - "Small scaled brown slickhead", - "Slickheads nei", - "Fiolenti's smooth-head", - "Longfin smooth-head", - "Toothless smooth-head", - "Loosescale smooth-head", - "Krefft's smooth-head", - "Grenadier smooth-head", - "Norman's smooth-head", - "Blackhead salmon", - "Starry smooth-head", - "Abyssal smooth-head", - "Softskin smooth-head", - "Madeiran smooth-head", - "Bluntsnout smooth-head", - "Threadfin slickhead", - "Antillean smooth-head", - "Hairfin smooth-head", - "Longtail slickhead", - "Threadfin smooth-head", - "Luminous slickhead", - "Palebelly searsid", - "Bighead searsid", - "Teardrop tubeshoulder", - "Bigeye searsid", - "Maul's searsid", - "Smallscale searsid", - "Multipore searsid", - "Leaf searsid", - "Legless searsid", - "Shining tubeshoulder", - "Schnakenbeck's searsid", - "Koefoed's searsid", - "Dwarf pencilfish", - "Koaro", - "Tasmanian mudfish", - "Banded kokopu", - "Inanga", - "Shortjaw kokopu", - "Common river galaxias", - "Cape galaxias", - "Tasmanian whitebait", - "Canterbury mudfish", - "Black mudfish", - "Salmonoids nei", - "Alaska blackfish", - "Olympic mudminnow", - "Mudminnow", - "Northern pike", - "Redfin pickerel", - "Amur pike", - "Spark anglemouth", - "Elongated bristlemouth fish", - "Atlantic fangjaw", - "Benttooth bristlemouth", - "Garrick", - "Veiled anglemouth", - "Tan bristlemouth", - "Slender bristlemouth", - "Hidden bristlemouth", - "Bristlemouths", - "Pacific hatchet fish", - "Hatchetfish", - "Half-naked hatchetfish", - "Sladen's hatchet fish", - "Bottlelights", - "Spiny hatchetfish", - "Diaphanous hatchet fish", - "Highlight hatchetfish", - "Silvery lightfish", - "Atlantic pearlside", - "Hatchetfishes nei", - "Richardson's snaggletooth", - "Snaggletooth", - "Boa dragonfish", - "Günther's boafish", - "Longbarb scaly dragonfish", - "Pawnee dragonfish", - "Dana viperfish", - "Sloane's viperfish", - "Proud dragonfish", - "Barbate dragonfish", - "Stoplight loosejaw", - "Valdivia black dragon fish", - "Scaleless black dragonfish", - "Longfin dragonfish", - "Oceanic lightfish", - "Power's deep-water bristle-mou", - "Arapaima", - "Arawana", - "Australian bonytongue", - "Asian bonytongue", - "African bonytongue", - "Clown knifefish", - "Giant featherback", - "Indochina featherback", - "Bronze featherback", - "Knifefishes", - "Reticulate knifefish", - "African knifefish", - "Mooneye", - "Freshwater butterflyfish", - "Elephantnose fish", - "Zambesi parrotfish", - "Bulldog", - "Bottlenose fishes nei", - "Ghost stonebasher", - "Churchill", - "Elephantsnout fishes nei", - "Aba", - "Hawaiian ladyfish", - "Ladyfish", - "Pacific ladyfish", - "West African ladyfish", - "Senegalese ladyfish", - "Tenpounder", - "Ladyfishes nei", - "Tarpon", - "Indo-Pacific tarpon", - "Bonefish", - "Roundjaw bonefish", - "Longfin bonefish", - "Bonefishes nei", - "Gigantura", - "Japanese thread-sail fish", - "Royal flagfin", - "Guinean flagfin", - "Zugmayer's pearleye", - "Pearleyes nei", - "Pearleyes, etc. nei", - "Balbo sabretooth", - "Omosudid", - "Long snouted lancetfish", - "Short snouted lancetfish", - "Lancetfishes nei", - "Daggertooth", - "Southern ocean daggertooth", - "Atlantic barracudina", - "Duckbill barracudina", - "Southern barracudina", - "Antarctic jonasfish", - "Spotted barracudina", - "Ringed barracudina", - "Barracudinas nei", - "Shortnose greeneye", - "Greeneyes", - "Waryfish", - "Blackfin waryfish", - "Grideye fish", - "Spiderfish", - "Abyssal spiderfish", - "Mediterranean spiderfish", - "Tripodfish", - "Bombay-duck", - "Deep-sea lizardfish", - "Highfin lizardfish", - "Snakefish", - "Inotted lizardfish", - "California lizardfish", - "Atlantic lizardfish", - "Variegated lizardfish", - "Redbarred lizardfish", - "Sand lizardfish", - "Triplecross lizardfish", - "Greater lizardfish", - "Brazilian lizardfish", - "Brushtooth lizardfish", - "Gracile lizardfish", - "Longfin lizardfish", - "Clouded lizardfish", - "Lizardfishes nei", - "Large-scaled lantern fish", - "Pacific blackchin", - "Spurcheek lanternfish", - "Stubby lanternfish", - "Roundnose lanternfish", - "Madeira lantern fish", - "Warming’s lanternfish", - "Cocco’s lanternfish", - "Benoit's lanternfish", - "Bermuda lantern fish", - "Reinhardt’s lanternfish", - "Tåning’s lanternfish", - "Spotted lanternfish", - "Wisner's lantern fish", - "Metallic lanternfish", - "Prickly lanternfish", - "Bluntsnout lanternfish", - "Hector's lanternfish", - "Jewel lanternfish", - "Lantern fish", - "Noble lanternfish", - "Slender lanternfish", - "Short-headed lantern fish", - "Small lantern fish", - "Spothead lantern fish", - "Taaning's lantern fish", - "Garman’s lanternfish", - "Flatface lanternfish", - "Horned lanternfish", - "Slopewater lanternfish", - "Anomalous lanternfish", - "Luminous lanternfish", - "Günther’s lanternfish", - "Dofleini's lantern fish", - "Gemellar’s lanternfish", - "Northern lampfish", - "Glacier lantern fish", - "Smallfin lanternfish", - "Skinnycheek lanternfish", - "Electric lantern fish", - "Electron subantarctic", - "Spinetail lanternfish", - "Patchwork lanternfish", - "Patchwork lampfishes", - "Nichol's lanternfish", - "Large-scale lantern fish", - "Waistcoat lanternfish", - "Blue lanternfish", - "Mexican lampfish", - "Lanternfishes nei", - "Pelican eel", - "Paddletail onejaw", - "Bobtail eel", - "Calypso tetra", - "Black neon tetra", - "Banded astyanax", - "Astyanax nei", - "Machaca", - "Mourning tetra", - "Dorada", - "Tiete tetra", - "Cochu's blue tetra", - "Featherfin tetra", - "Buenos Aires tetra", - "Dorado", - "Red piranha", - "San Francisco piranha", - "White piranha", - "Slender piranha", - "Redeye piranha", - "Speckled piranha", - "Blackedge tetra", - "Flametail tetra", - "Cachama", - "Lobetoothed piranha", - "Orangefin tetra", - "Wimple piranha", - "Darter characin", - "Bucktooth tetra", - "Goldstripe characin", - "Swordtail characin", - "Black tetra", - "Pirapatinga", - "Pacu", - "Patinga, hybrid", - "Silver tetra", - "Sailfin tetra", - "Naked characin", - "Copper tetra", - "Royal tetra", - "Croaking tetra", - "Rainbow tetra", - "Cardinal tetra", - "Neon tetra", - "False rummynose tetra", - "Black morpho tetra", - "Glass bloodfin", - "X-ray tetra", - "Dragonfin tetra", - "Blind tetra", - "Blackline penguinfish", - "Characins nei", - "Tambacu, hybrid", - "Tambatinga, hybrid", - "Blackwing hatchetfish", - "Giant hatchetfish", - "Silver hatchetfish", - "Banded leporinus", - "Threespot leporinus", - "Threespot headstander", - "Striped headstander", - "Pongo characin", - "Citharinus nei", - "Trahira", - "Giant trahira", - "Aimara", - "Kafue pike", - "Redspotted tetra", - "Splash tetra", - "Golden pencilfish", - "Streaked prochilod", - "Netted prochilod", - "Black prochilodus", - "Prochilods nei", - "Silver prochilodus", - "Stripped robber", - "Niger tetra", - "Longfin tetra", - "Nurse tetra", - "Barnard's robber", - "Elongate tigerfish", - "Tiger fish", - "Sierra leone dwarf characin", - "Jellybean tetra", - "Sharptooth tetra", - "Payara", - "Biara", - "Pike characin", - "Oneline tetra", - "Spotted citharinid", - "Silver distichodus", - "Sixbar distichodus", - "Grass-eaters nei", - "Banded knifefish", - "Electric eel", - "Black ghost", - "Glass knifefish", - "Longtail knifefish", - "Blue sucker", - "Lost River sucker", - "Longnose sucker", - "White sucker", - "Flannelmouth sucker", - "Largescale sucker", - "Tahoe sucker", - "Gray redhorse", - "Golden redhorse", - "Shorthead redhorse", - "Harelip sucker", - "Bigmouth buffalo", - "Buffalofishes nei", - "Chinese sucker", - "River carpsucker", - "Razorback sucker", - "Cui-ui", - "Spotted sucker", - "Lake chubsucker", - "Northern hog sucker", - "Suckers nei", - "Freshwater bream", - "Freshwater breams nei", - "Common carp", - "Barbless carp", - "Chinese false gudgeon", - "Blackbrow bleak", - "Tench", - "Bleak", - "Barbel", - "Mediterranean barbel", - "Smallmouth yellowfish", - "Clanwilliam yellowfish", - "Spotscale barb", - "Broadband barb", - "Ripon barbel", - "Algerian barb", - "Line-spotted barb", - "Slender barb", - "Straightfin barb", - "Papermouth", - "Largescale yellowfish", - "Threespot barb", - "Common nase", - "Iberian nase", - "Longfin dace", - "Crucian carp", - "Goldfish", - "Japanese white crucian carp", - "Prussian carp", - "White-finned gudgeon", - "Roach", - "Kutum", - "Caspian roach", - "Roaches nei", - "Rudd", - "Orfe(=Ide)", - "Common dace", - "Dnieper chub", - "Chub", - "Vairone", - "Schmidt's dace", - "Issyk-Kul dace", - "Chubs nei", - "Rosy bitterling", - "Bitterling", - "Big-scaled redfin", - "Orangefin labeo", - "Fringed-lipped peninsula carp", - "Kuria labeo", - "Roho labeo", - "Rednose labeo", - "Redeye labeo", - "Ningu", - "Orange River mudfish", - "Moggel", - "Black sharkminnow", - "Rhinofishes nei", - "Mud carp", - "Mrigal carp", - "Reba carp", - "Small scale mud carp", - "Pátzcuaro chub", - "Catla", - "Giant barb", - "Indian glass barb", - "Grass carp(=White amur)", - "Beardless barb", - "Giant danio", - "Sind danio", - "Zebra danio", - "Leopard danio", - "Schneider", - "Chihuahua chub", - "Utah chub", - "Tui chub", - "Humpback chub", - "Bonytail", - "Roundtail chub", - "Hampala barb", - "Silver carp", - "Bighead carp", - "Silver, bighead carps nei", - "Signal barb", - "Kanglang fish", - "Golden shiner", - "Nilem carp", - "Splittail", - "Isok barb", - "Sacramento squawfish", - "Slender rasbora", - "Harlequin rasbora", - "Gangetic scissortail rasbora", - "Silver rasbora", - "Brilliant rasbora", - "Twospot rasbora", - "Thai mahseer", - "Putitor mahseer", - "Tor barb", - "Semah mahseer", - "Seven khramulya", - "Trout barb", - "Emerald shiner", - "Red River shiner", - "Bigeye shiner", - "Bigmouth shiner", - "Arkansas River shiner", - "Blackchin shiner", - "Blacknose shiner", - "Spottail shiner", - "Longnose shiner", - "Yellowfin shiner", - "Ozark minnow", - "Rosyface shiner", - "Bedrock shiner", - "Flagfin shiner", - "Sand shiner", - "Weed shiner", - "Mimic shiner", - "Barbel steed", - "Spotted steed", - "Mola carplet", - "Attentive carplet", - "Silver cyprinid", - "Kinneret bleak", - "Fathead minnow", - "Copper mahseer", - "California roach", - "White amur bream", - "Freshwater minnow", - "Blacknose dace", - "Longnose dace", - "Speckled dace", - "Hornyhead chub", - "Bluehead chub", - "River chub", - "Satinfin shiner", - "Alabama shiner", - "Bluntface shiner", - "Red shiner", - "Proserpine shiner", - "Spotfin shiner", - "Blacktail shiner", - "Oily bitterling", - "Chinese bleak", - "Plains minnow", - "Devils River minnow", - "Roundnose minnow", - "Pike asp", - "Vimba bream", - "Macedonian vimba", - "Lake chub", - "Creek chub", - "Sichel", - "Rainbow gudgeon", - "Iraq blind barb", - "White cloud mountain minnow", - "Central stoneroller", - "Largescale stoneroller", - "Dalmatian barbelgudgeon", - "Sacramento blackfish", - "Hitch", - "Woundfin", - "Least chub", - "Riffle minnow", - "Asp", - "Redside dace", - "Tricolor sharkminnow", - "Danube bleak", - "Tarek", - "Russian bitterling", - "Stone moroko", - "Hoven's carp", - "Chiselmouth", - "Sharpbelly", - "Somalian blind barb", - "Tokyo bitterling", - "Redfin", - "Congo blind barb", - "Black carp", - "Striped shiner", - "Common shiner", - "Oregon chub", - "Wuchang bream", - "Black Amur bream", - "Peamouth", - "Little Colorado spinedace", - "Scaly osman", - "Loach minnow", - "Spotted barb", - "Arulius barb", - "Rosy barb", - "Blackspot barb", - "Pool barb", - "Sumatra barb", - "Ticto barb", - "Spanner barb", - "Asian barbs nei", - "Sharpray", - "Humpback", - "Predatory carp", - "Mongolian redfin", - "Yellowcheek", - "Redtail sharkminnor", - "Flying fox", - "Desert dace", - "Streamline chub", - "Flying barb", - "Lake minnow", - "Cutlips minnow", - "Garnet minnow", - "Flame chub", - "Siamese mud carp", - "Jerdon's carp", - "Iran cave barb", - "Tachanovsky's gudgeon", - "Czekanowski's minnow", - "Belica", - "Cherryfin shiner", - "Ouachita shiner", - "Speckled chub", - "Long pectoral-fin minnow", - "Pearl dace", - "Spikedace", - "River sardine", - "Moapa dace", - "Hardhead", - "Taiwan ku fish", - "Lake salmon", - "Pugnose minnow", - "Blackside dace", - "Northern redbelly dace", - "Southern redbelly dace", - "Finescale dace", - "Eurasian minnow", - "Somalian cavefish", - "Smallscale yellowfin", - "Flathead chub", - "Rock carp", - "Smallscale redfin", - "Relict dace", - "Redside shiner", - "Amur whitefin gudgeon", - "Large razorbelly minnow", - "Chinese lizard gudgeon", - "Sattar snowtrout", - "Snowtrout", - "Golden-line barbel", - "Stumptooth minnow", - "Yellowfin", - "White bream", - "Silver barb", - "Red tailed tinfoil", - "Tinfoil barb", - "Andalusian barbel", - "Naked osman", - "Big-head schizothoracin", - "Cyprinids nei", - "Siamese algae-eater", - "Horseface loach", - "Tiger loach", - "Bengal loach", - "Golden spined loach", - "Guntea loach", - "Pond loach", - "Weatherfish", - "Choi's spiny loach", - "Clown loach", - "Mottled loach", - "Stone loach", - "Tollo", - "Mayan sea catfish", - "New Granada sea catfish", - "Beardless sea catfish", - "Congo sea catfish", - "Madamango sea catfish", - "Blacktip sea catfish", - "Blackfin sea catfish", - "Threadfin sea catfish", - "Sona sea catfish", - "Giant catfish", - "Bronze catfish", - "Salmon catfish", - "Giant seacatfish", - "Giant sea catfish", - "Flatmouth sea catfish", - "Smoothmouth sea catfish", - "Rough-head sea catfish", - "Veined catfish", - "Spotted catfish", - "Engraved catfish", - "Sagor catfish", - "Hardhead sea catfish", - "Kukwari sea catfish", - "Crucifix sea catfish", - "Guinean sea catfish", - "Madagascar sea catfish", - "Smallmouthed salmon catfish", - "Daniel's catfish", - "Spoon-snouted catfish", - "Guri sea catfish", - "Day's catfish", - "Chili sea catfish", - "Lorentz catfish", - "Gafftopsail sea catfish", - "Chilhuil sea catfish", - "Red sea catfish", - "Coco sea catfish", - "Peruvian sea catfish", - "White barbel", - "White sea catfish", - "Soldier catfish", - "Thomas sea catfish", - "Softhead sea catfish", - "Bressou sea catfish", - "Gillbacker sea catfish", - "Brown sea catfish", - "Pemecou sea catfish", - "Passany sea catfish", - "Couma sea catfish", - "Thinspine sea catfish", - "Sea catfishes nei", - "Talking catfish", - "Whitebarred catfish", - "Blue-eye catfish", - "Ripsaw catfish", - "Raphael catfish", - "Granulated catfish", - "Singing catfish", - "Black catfish", - "Jaguar catfish", - "Manduba", - "Bottlenose catfish", - "Cobbler", - "Long-tailed catfish", - "Silver tandan", - "Narrowfront tandan", - "Shortfin tandan", - "Pale yellow tandan", - "Merauke tandan", - "Gray eel-catfish", - "Striped eel catfish", - "Papuan eel-catfish", - "Stinging eel catfish", - "Darkfin eel catfish", - "Eeltail catfishes", - "Whitelipped eel catfish", - "Tandan catfish", - "Freshwater cobbler", - "Wels(=Som) catfish", - "Amur catfish", - "Eurasian catfish", - "Chinese large-mouth catfish", - "Glass catfish", - "Striped glass catfish", - "Glass catfishes", - "Butter catfish", - "Wallago", - "Hilda's grunter", - "Bubu", - "Blacklancer catfish", - "False black lancer", - "Asian redtail catfish", - "Dotted catfish", - "Flatnose catfish", - "African bullhead", - "Asian bumblebee catfish", - "Chinese longsnout catfish", - "Gangetic mystus", - "Long whiskers catfish", - "Striped dwarf catfish", - "Twospot catfish", - "Bagrid catfish", - "Kibonde", - "Kokuni", - "Kukumai", - "Aluminum catfish", - "Ornate bagrid", - "Black catfishes nei", - "Rita", - "Bayad", - "Semutundu", - "Naked catfishes", - "Spatula-barbeled catfish", - "Yellow catfish", - "Channel catfish", - "Blue catfish", - "Headwater catfish", - "Yaqui catfish", - "Catfishes nei", - "Channel-blue catfish, hybrid", - "White catfish", - "Snail bullhead", - "Flat bullhead", - "Spotted bullhead", - "Black bullhead", - "Yellow bullhead", - "Brown bullhead", - "Mexican blindcat", - "Widemouth blindcat", - "Flathead catfish", - "Slender madtom", - "Stonecat", - "Tadpole madtom", - "Margined madtom", - "Brown madtom", - "Neosho madtom", - "Northern madtom", - "Toothless blindcat", - "Goonch", - "Mountain barbel", - "Squarehead catfish", - "Angler catfish", - "Glass schilbid", - "Silond catfish", - "Indian potasi", - "African butter catfish", - "Shoulderspot catfish", - "Eel catfish", - "Indian blind catfish", - "Philippine catfish", - "Hong Kong catfish", - "North African catfish", - "Bighead catfish", - "Mudfish", - "Blunt-toothed African catfish", - "Snake catfish", - "Torpedo-shaped catfishes nei", - "Africa-bighead catfish, hybrid", - "African catfish", - "Sampa", - "Longtail catfish", - "Electric catfish", - "Smallmouth electric catfish", - "Kumakuma", - "Gilded catfish", - "Zebra catfish", - "Laulao catfish", - "Zamurito", - "Slobbering catfish", - "Porthole shovelnose catfish", - "Tigerstriped catfish", - "South American catfish", - "Mandi", - "Capaz", - "Duckbill catfish", - "Leopard catfish", - "Redtail catfish", - "Flatwhiskered catfish", - "Graceful pimelodella", - "Coroatá", - "Jaú", - "Spotted sorubim", - "Barred sorubim", - "Tiger sorubim", - "Sorubims nei", - "Pati", - "Highwaterman catfish", - "Firewood catfish", - "Candiru", - "Porthole catfish", - "Cascarudo", - "Bronze corydoras", - "Peppered corydoras", - "Atipa", - "Whiptail catfish", - "Zucchini catfish", - "Golden otocinclus", - "Snow pleco", - "Amazon sailfin catfish", - "Suckermouth catfish", - "Wara wara", - "Armored catfish", - "Royal panaque", - "Mekong giant catfish", - "Pangas catfish", - "Striped catfish", - "Spot pangasius", - "Shortbarbel pangasius", - "Giant pangasius", - "Pangas catfishes nei", - "Stinging catfish", - "Bigeye squeaker", - "Angel squeaker", - "Bugeye squeaker", - "Clown squeaker", - "Featherfin squeaker", - "Orangestriped squeaker", - "Blotched upsidedown catfish", - "Blackspotted squeaker", - "Malawi squeaker", - "Onespot squeaker", - "Congo squeaker", - "Wahrindi", - "Plain squeaker", - "Upsidedown catfishes", - "Gnarled catfish", - "Bark catfish", - "Sevenbarbed banjo", - "Banjo", - "Banded banjo", - "Camouflaged catfish", - "Guitarrita", - "Ecuador banjo catfish", - "Freshwater siluroids nei", - "Narrownecked oceanic eel", - "Duckbill oceanic eel", - "European eel", - "Indian mottled eel", - "Japanese eel", - "American eel", - "Short-finned eel", - "Speckled longfin eel", - "African longfin eel", - "Giant mottled eel", - "New Zealand longfin eel", - "Mottled eel", - "River eels nei", - "Red eel", - "Allardice's moray", - "Turkey moray", - "Spotjaw moray", - "Banded moray", - "Speckled moray", - "Green moray", - "California moray", - "Spotted moray", - "Ocellated moray", - "Yellow-edged moray", - "Undulated moray", - "Purplemouth moray", - "Highfin moray", - "Sharktooth moray", - "Polygon moray", - "Brown moray", - "Dark moray", - "Canary moray", - "Kidako moray", - "Ghost moray", - "Starry moray", - "Laced moray", - "Broadbanded moray", - "Mediterranean moray", - "Reticulate moray", - "Stout moray", - "White-spotted moray", - "Jewel moray", - "Honeycomb moray", - "Hourglass moray", - "Bayer's moray", - "Leopard moray eel", - "Fangtooth moray", - "Viper moray", - "Zebra moray", - "Chain moray", - "Snowflake moray", - "Barred moray", - "Pebbletooth moray", - "White ribbon eel", - "Ribbon moray", - "Greyface moray", - "Peppered moray", - "Slender giant moray", - "Giant slender moray", - "Needle-tooth moray", - "Jigsaw moray", - "Morays nei", - "Slender shortfaced eel", - "Mauritanian shortfaced eel", - "Longtailed shortfaced eel", - "Shorttailed shortfaced eel", - "Spaghetti eel", - "Spaghetti eels nei", - "Shorttail pike conger", - "Daggertooth pike conger", - "Common pike conger", - "Pike-congers nei", - "Guinean pike conger", - "Red pike conger", - "Yellow pike conger", - "Indian pike conger", - "Dogface witch-eel", - "Facciola's sorcerer", - "Blacktail pike-conger", - "Slender duckbill eel", - "Whipsnout sorcerer", - "European conger", - "Argentine conger", - "Longfin African conger", - "American conger", - "Whitespotted conger", - "Manytooth conger", - "Conger eels nei", - "Longnose conger", - "Maputo conger", - "Evermann's conger", - "Whitespotted garden eel", - "Purplemouthed conger", - "Silvery conger", - "Bandtooth conger", - "Short-tail conger", - "Slender conger", - "Slender-tail conger", - "Spotted garden-eel", - "Margintail conger", - "Guinean conger", - "Conger eels, etc. nei", - "Spotted snake eel", - "Ornate Snake Eel", - "Rufus snake-eel", - "Punctuated snake-eel", - "Shrimp eel", - "Bluntnose snake-eel", - "Yellow snake-eel", - "Serpent eel", - "Short-tailed viper-eel", - "Johnston snake-eel", - "Short-maned sand-eel", - "Sailfin eel", - "Rice-paddy eel", - "Longfin snake-eel", - "Hoeven's snake eel", - "Spoon-nose eel", - "African spoon-nose eel", - "Speckled worm-eel", - "Leaden worm eel", - "Indo-Pacific slender worm-eel", - "Maimed snake eel", - "Acned snake-eel", - "Slender worm-eel", - "Saddled snake-eel", - "Oriental worm-eel", - "Sharpnose sand-eel", - "Mustachioed snake-eel", - "Finny snake eel", - "Horsehair eel", - "Ordinary eel", - "Stippled spoon-nose eel", - "Painted eel", - "Slantlip eel", - "Leopard eel", - "Shorttail snake eel", - "Crocodile snake eel", - "Stripe eel", - "Fangtooth snake-eel", - "Key worm eel", - "Freshwater snake-eel", - "Sooty sand-eel", - "Inhaca fringelip", - "Flappy snake-eel", - "Snake eels nei", - "Shortbelly eel", - "Batnose eel", - "Deep-water arrowtooth eel", - "Muddy arrowtooth eel", - "Snubnosed eel", - "Kaup's arrowtooth eel", - "Grey cutthroat eel", - "Basketwork eel", - "Cutthroat eels nei", - "Avocet snipe eel", - "Slender snipe eel", - "Flatnose xenocongrid eel", - "Mottled false moray", - "False moray", - "Bean's sawtooth eel", - "Sawtooth eels nei", - "Black serrivomerid eel", - "Eels, morays, congers nei", - "Hawaiian halosaurid fish", - "Abyssal halosaur", - "Australian halosaur", - "Halosaurs nei", - "Spiny eel", - "Spiny-back eel", - "Deep-sea spiny eels nei", - "Garfish", - "Cape needlefish", - "Keeltail needlefish", - "Flat needlefish", - "Senegal needlefish", - "Spottail needlefish", - "Californian needlefish", - "Timucu", - "Atlantic needlefish", - "Banded needlefish", - "Agujon needlefish", - "Hound needlefish", - "Red Sea houndfish", - "Needlefishes nei", - "Freshwater garfish", - "Needlefishes, etc. nei", - "Atlantic saury", - "Dwarf saury", - "Pacific saury", - "Sauries nei", - "Hardhead halfbeak", - "Tropical halfbeak", - "Choelo halfbeak", - "Slender halfbeak", - "Skipper halfbeak", - "Common halfbeak", - "African halfbeak", - "Japanese halfbeak", - "California halfbeak", - "Asian pencil halfbeak", - "Congaturi halfbeak", - "Quoy's garfish", - "Sind halfbeak", - "Simpletooth halfbeak", - "Black-barred halfbeak", - "Ballyhoo halfbeak", - "Yellowtip halfbeak", - "Balao halfbeak", - "Jumping halfbeak", - "Halfbeaks nei", - "Ribbon halfbeak", - "Flying halfbeak", - "Long billed halfbeak", - "Tropical two-wing flyingfish", - "Japanese flyingfish", - "Short-nosed flyingfish", - "Yellowing flyingfish", - "Sharpchin flyingfish", - "Shortfin flyingfish", - "Bluntnose flyingfish", - "Sailfin flyingfish", - "African sailfin flyingfish", - "Halfbeak", - "Atlantic smallwing flyingfish", - "Fourwing flyingfish", - "Black wing flyingfish", - "Bony flyingfish", - "Spotfin flyingfish", - "Blacksail flyingfish", - "Manyspotted flyingfish", - "Sutton's flyingfish", - "Margined flyingfish", - "Atlantic flyingfish", - "Guinean flyingfish", - "Bennett’s flyingfish", - "Flyingfishes nei", - "Duckbilled buntingi", - "Malabar ricefish", - "Javanese ricefish", - "Eggcarrying buntingi", - "Smalleye moray cod", - "Marbled moray cod", - "Smallhead moray cod", - "Patagonian moray cod", - "Moray cods nei", - "Ahuru", - "Dwarf codling", - "Tasmanian codling", - "Beardless codling", - "Gadella", - "Slender codling", - "Longfin codling", - "Guinean codling", - "Codling", - "Beardie", - "Bighead mora", - "Tadpole cod", - "Common mora", - "Black codling", - "Japanese codling", - "Metallic codling", - "Brown codling", - "Red codling", - "Southern bastard codling", - "Northern bastard codling", - "Grenadier cod", - "Mediterranean codling", - "North Atlantic codling", - "Patagonian codling", - "Small-headed cod", - "Lepidion codlings nei", - "Blue antimora", - "Tadpole codling", - "Moras nei", - "Unicorn cod", - "Antenna codlet", - "Smallscale codlet", - "Big-eye unicorn-cod", - "Tusk(=Cusk)", - "Atlantic cod", - "Pacific cod", - "Greenland cod", - "Northern cods nei", - "Burbot", - "Ling", - "Blue ling", - "Spanish ling", - "Lings nei", - "Greater forkbeard", - "Forkbeard", - "Longfin hake", - "Forkbeards nei", - "Brazilian codling", - "Red hake", - "White hake", - "Carolina hake", - "Southern codling", - "Spotted codling", - "Gulf hake", - "Urophycis nei", - "Haddock", - "Tadpole fish", - "Navaga(=Wachna cod)", - "Saffron cod", - "Pacific tomcod", - "Atlantic tomcod", - "Saithe(=Pollock)", - "Pollack", - "Alaska pollock(=Walleye poll.)", - "Norwegian pollock", - "Polar cod", - "Artic cod", - "East Siberian cod", - "Silvery pout", - "Threadfin rockling", - "Arctic rockling", - "Mediterranean bigeye rockling", - "Bigeye rockling", - "Shore rockling", - "Three-bearded rockling", - "Rocklings nei", - "Fivebeard rockling", - "Northern rockling", - "Norway pout", - "Poor cod", - "Pouting(=Bib)", - "Trisopterus nei", - "Blue whiting(=Poutassou)", - "Southern blue whiting", - "Whiting", - "Fourbeard rockling", - "European hake", - "Senegalese hake", - "Southern hake", - "Silver hake", - "South Pacific hake", - "Argentine hake", - "North Pacific hake", - "Benguela hake", - "Deep-water Cape hake", - "Offshore silver hake", - "Panama hake", - "Shallow-water Cape hake", - "Patagonian hake", - "Hakes nei", - "Cape hakes", - "Luminous hake", - "Patagonian grenadier", - "Blue grenadier", - "Cape grenadier", - "Merluccid hakes nei", - "Roughhead grenadier", - "Whitson's grenadier", - "Ridge scaled rattail", - "Bigeye grenadier", - "Caml grenadier", - "Grenadiers nei", - "Glasshead grenadier", - "Roundnose grenadier", - "Günther's grenadier", - "Pacific grenadier", - "Loosescale grenadier", - "Humboldt grenadier", - "Abyssal grenadier", - "Carmine grenadier", - "Popeye grenadier", - "Trident grenadier", - "Longfin grenadier", - "Amami grenadier", - "Mexican grenadier", - "Abyssal rattail", - "Largenose grenadier", - "Serrulate whiptail", - "Longrayed whiptail", - "Thickbeard grenadier", - "Grenadiers, whiptails nei", - "Surgeon grenadier", - "Aconcagua grenadier", - "Duckbill grenadier", - "Silver whiptail", - "Eyespot grenadier", - "Rough-head whiptail", - "Javelin", - "Two-barred whiptail", - "Shovelnose grenadier", - "Clearsnout grenadier", - "Blackfin grenadier", - "Chilean grenadier", - "Hollowsnout grenadier", - "Filesnout grenadier", - "Banded whiptail", - "Formosa grenadier", - "Six-band grenadier", - "Notable whiptail", - "Japanese grenadier", - "Campbell whiptail", - "Kamohara grenadier", - "Karrer's whiptail", - "Kermadec rattail", - "Mugura grenadier", - "Spearsnouted grenadier", - "Longhead grenadier", - "Longarm grenadier", - "Marini's grenadier", - "Mahia whiptail", - "Spearnose grenadier", - "Swordsnout grenadier", - "Hawknose grenadier", - "Spiny grenadier", - "Unicorn grenadier", - "Shoulderspot grenadier", - "Firebelly grenadier", - "Giant grenadier", - "Fragile grenadier", - "Armourhead grenadier", - "Roughsnout grenadier", - "Bullseye grenadier", - "Vaillant's grenadier", - "Globosehead rattail", - "Dogtooth grenadier", - "Roundhead grenadier", - "Bristly grenadier", - "Marlin-spike grenadier", - "Common Atlantic grenadier", - "Peruvian grenadier", - "Twelve-rayed grenadier", - "Broadsnout grenadier", - "Smooth grenadier", - "Parrot grenadier", - "Smalltooth grenadier", - "Spectacled grenadier", - "Short-tail grenadier", - "Roughtip grenadier", - "California grenadier", - "Softhead grenadier", - "Western softhead grenadier", - "Doublethread grenadier", - "Naked snout rattail", - "Pineapple rattail", - "Bulbous rattail", - "Thorntooth grenadier", - "Sturgeon grenadier", - "Slendertail grenadier", - "Bathypelagic rattail", - "Arrowtooth grenadier", - "Hawaiian grenadier", - "Plainfin grenadier", - "Sagami grenadier", - "Longbeard grenadier", - "Spinaker grenadier", - "Peterson's grenadier", - "Conesnout grenadier", - "Grenadiers, rattails nei", - "Pelagic cod", - "Arrowtail", - "Eucla cod", - "Gadiformes nei", - "Three-spined stickleback", - "Blackspotted stickleback", - "Sticklebacks", - "Brook stickleback", - "Ninespine stickleback", - "Southern ninespine stickleback", - "Sea stickleback", - "Fourspine stickleback", - "Tube-snout", - "Pipe fish", - "Short dragonfish", - "Longtail seamouth", - "Korean sandlance", - "Pacific cornetfish", - "Cornetfish", - "Bluespotted cornetfish", - "Red cornetfish", - "Flutemouth", - "Longspine snipefish", - "Slender snipefish", - "Orange bellowfish", - "Longspine bellowfish", - "Crested bellowfish", - "Snipefishes nei", - "Smooth razorfish", - "Grooved razor-fish", - "Speckled shrimpfish", - "Banded yellowfish", - "Ghost pipefish", - "Harlequin ghost pipefish", - "Fringed pipefish", - "Greater pipefish", - "Broadnosed pipefish", - "Nilsson's pipefish", - "Pipefishes nei", - "Sea pony", - "Short snouted seahorse", - "Long-snouted seahorse", - "Tiger tail seahorse", - "West African seahorse", - "Spotted seahorse", - "Longnose seahorse", - "Thorny seahorse", - "Seahorses nei", - "Straightnose pipefish", - "Worm pipefish", - "Short-bodied pipefish", - "Spotted pipefish", - "Alligator pipefish", - "Southern little pipehorse", - "Shortpouch pygmy pipehorse", - "Common seadragon", - "Leafy seadragon", - "Pink pipefish", - "Pugheaded pipefish", - "Gale's pipefish", - "Network pipefish", - "Messmate pipefish", - "Snubnose pipefish", - "Snake pipefish", - "Bluestripe pipefish", - "Tiger pipefish", - "Brock's pipefish", - "Ribboned pipefish", - "Blue-spotted pipefish", - "Beady pipefish", - "Macleay's crested pipefish", - "Prickly pipefish", - "Trawl pipefish", - "Brush-tailed pipefish", - "Deep-bodied pipefish", - "Orange pipefish", - "Shortnose pipefish", - "Flat-nosed pipefish", - "Short-tailed pipefish", - "Myers' pipefish", - "Mollison's pipefish", - "Elegant pipefish", - "Red pipefish", - "Rock pipefish", - "Pug-nosed pipefish", - "Ring-backed pipefish", - "Double-ended pipefish", - "Mother-of-pearl pipefish", - "Pipefishes, seahorses nei", - "Opah", - "Southern opah", - "Moonfish, opah, mambo", - "Spinyfin velifer", - "Sailfin velifer", - "Unicorn crestfish", - "Crested oarfish", - "Unicornfish", - "Polka-dot ribbonfish", - "Mediterranean dealfish", - "Dealfish", - "Blackflash ribbonfish", - "Slender ribbonfish", - "Dealfishes", - "Taper-tail ribbonfish", - "Scalloped ribbonfish", - "Ribbonfishes", - "King of herrings", - "Streamer fish", - "Oarfishes nei", - "Tube-eye", - "Jelly-head fish", - "Jellynose", - "Loppe's tadpole fish", - "Jellynose fishes nei", - "Festive ribbonfish", - "Hairyfish", - "Tapertail", - "Checkered pupfish", - "Cuban killifish", - "Potosi pupfish", - "Desert pupfish", - "Bolson pupfish", - "Parras pupfish", - "Sheepshead minnow", - "Goldspotted killifish", - "Flagfish", - "Scaleless killifish", - "Catarina pupfish", - "Spanish toothcarp", - "Whitepatched splitfin", - "Tuxpan splitfin", - "Opal allotoca", - "Butterfly splitfin", - "Bluetail goodea", - "White River springfish", - "Ash Meadows killifish", - "Darkedged splitfin", - "Blackfin goodea", - "Barred splitfin", - "Polka-dot splitfin", - "Bold characodon", - "Rainbow characodon", - "Goldbreast splitfin", - "Picotee goodeid", - "Redtail splitfin", - "Relict splitfin", - "Leopard splitfin", - "Bulldog goodeid", - "Largescale foureyes", - "Onesided livebearer", - "White-eye", - "Mosquitofish", - "Creole topminnow", - "Montezuma swordtail", - "Tanganyika killifish", - "Grand Cayman limia", - "Barred topminnow", - "Dusky millions fish", - "Guppy", - "Top minnow", - "Starhead killi", - "Ceylon killifish", - "Blue panchax", - "Saberfin killie", - "Argentine pearlfish", - "Gabon jewelfish", - "Barredtail pearlfish", - "Green rivulus", - "Chiapas killifish", - "Diamond killifish", - "Stippled studfish", - "Pygmy killifish", - "Bluefin killifish", - "Corfu toothcarp", - "Valencia toothcarp", - "Pink cusk-eel", - "Red cusk-eel", - "Black cusk-eel", - "Kingklip", - "Rock ling", - "Cusk-eels nei", - "Dusky cusk-eel", - "Snake blenny", - "Band cusk-eel", - "Bearded brotula", - "Goatsbeard brotula", - "False kinglip", - "Shortbeard cusk-eel", - "Specklefin cusk-eel", - "Black brotula", - "Spotted cusk-eel", - "Australian tusk", - "Legless cuskeel", - "Black-edged cusk-eel", - "Velvetnose brotula", - "Barbed brotula", - "Cusk-eels, brotulas nei", - "Messmate", - "Pinhead pearlfish", - "Dogtooth pearlfish", - "Pearlfishes nei", - "Freetail brotula", - "Pink brotula", - "Longarm brotula", - "Fleshfish", - "Orange brotula", - "Yellow pigmy brotula", - "Bighead brotula", - "Purple brotula", - "Gold brotula", - "Toothed Cuban cusk-eel", - "Key brotula", - "Trout-perch", - "Pirate perch", - "Ozark cavefish", - "Swampfish", - "Spring cavefish", - "Alabama cavefish", - "Southern cavefish", - "Velvet whalefish", - "Pink flabby whalefish", - "Flabby whalefish", - "Stout beardfish", - "Pacific beardfish", - "Alfonsino", - "Splendid alfonsino", - "Alfonsinos nei", - "Redfish", - "Bight redfish", - "Swallow-tail", - "Alfonsinos, etc. nei", - "Parin's spinyfish", - "Longwing spinyfin", - "Silver spinyfin", - "Spinyfins nei", - "Darwin's slimehead", - "Mediterranean slimehead", - "Orange roughy", - "Smallscale slimehead", - "Slender roughy", - "Sandpaper fish", - "Little pineapple fish", - "Slimeheads nei", - "Pineapplefish", - "Pineconefish", - "Splitfin flashlightfish", - "Atlantic flashlightfish", - "Flashlight fish", - "Gulf flashlightfish", - "Squirrelfish", - "Blackbar soldierfish", - "Pinecone soldierfish", - "Blotcheye soldierfish", - "Shoulderbar soldierfish", - "Blacktip soldierfish", - "Yellowfin soldierfish", - "Doubletooth soldierfish", - "Whitetip soldierfish", - "Clearfin squirrelfish", - "Sammara squirrelfish", - "Japanese soldierfish", - "Kai soldierfish", - "Shy soldier", - "Spinyface soldier", - "Silverspot squirrelfish", - "Sabre squirrelfish", - "Crown squirrelfish", - "Red squirrelfish", - "Redcoat", - "Violet squirrelfish", - "Squirrelfishes nei", - "Slender bigscale", - "Crested bigscale", - "Common fangtooth", - "John dory", - "Cape dory", - "Silvery John dory", - "Mirror dory", - "Capro dory", - "Red dory", - "New Zealand dory", - "King dory", - "Silver dory", - "Dories nei", - "Thorny tinselfish", - "Spotted tinselfish", - "Grammicolepidids nei", - "Boarfish", - "Deepbody boarfish", - "Indo-Pacific boarfish", - "Boarfishes nei", - "Spiky oreo", - "Smooth oreo dory", - "Ox-eyed oreo", - "Black oreo", - "Warty dory", - "Guinea oreo", - "Oreo dories nei", - "Parazen", - "Dwarf dory", - "Elongate dory", - "Moon silverside", - "Chilean silverside", - "Argentinian silverside", - "Big-scale sand smelt", - "Mediterranean sand smelt", - "Sand smelt", - "Cape silverside", - "Sand smelts nei", - "Balabac Island silverside", - "Hardyhead silverside", - "Topsmelt silverside", - "Pricklenose silverside", - "Longfin silverside", - "Beach silverside", - "Gulf grunion", - "Delta silverside", - "Inland silverside", - "Atlantic silverside", - "Rendahl's hardyhead", - "Thickscale silverside", - "Blackback silverside", - "Backwaters silverside", - "Panatella silverside", - "Barnes' silverside", - "Samoan silverside", - "Brook silverside", - "Jack silverside", - "Kiener's silverside", - "Silversides(=Sand smelts) nei", - "Katrana", - "Axelrod's rainbowfish", - "Red rainbowfish", - "Threadfin rainbowfish", - "North New Guinea rainbowfish", - "Glass blue-eye", - "Popondetta blue-eye", - "Redfinned blue-eye", - "Blue eyes", - "Marine sailfin silverside", - "Mercer's tusked silverside", - "Banana mullet", - "Flathead grey mullet", - "Lebranche mullet", - "White mullet", - "Parassi mullet", - "So-iuy mullet", - "Leaping African mullet", - "Thicklip grey mullet", - "So-iny (redlip) mullet", - "Otomebora mullet", - "Yellow-eye mullet", - "Fairy mullet", - "Mountain mullet", - "Sharp-nosed river mullet", - "Goldie river mullet", - "Lobed river mullet", - "River mullets nei", - "Bobo mullet", - "Half fringelip mullet", - "Thinlip grey mullet", - "Golden grey mullet", - "South African mullet", - "Leaping mullet", - "Goldspot mullet", - "Tade gray mullet", - "Largescale mullet", - "Largescaled mullet", - "Grooved mullet", - "Squaretail mullet", - "Klunzinger's mullet", - "Greenback mullet", - "Sicklefin mullet", - "Abu mullet", - "Diamond mullet", - "Persian mullet", - "Longfin mullet", - "Corsula", - "Snouted mullet", - "Sand grey mullet", - "Acute-jawed mullet", - "Boxlip mullet", - "Hornlip mullet", - "Longarm mullet", - "Bluespot mullet", - "Speigler's mullet", - "Thoburn's mullet", - "Broad-mouthed mullet", - "Mullets nei", - "Asian swamp eel", - "Obscure swamp eel", - "Marbled swamp eel", - "Fire eel", - "Burmese spineless eel", - "Mottled fusilier", - "Slender fusilier", - "Goldband fusilier", - "Double-lined fusilier", - "Banana fusilier", - "One-stripe fusilier", - "Capricorn fusilier", - "Dark-banded fusilier", - "Blue and gold fusilier", - "Redbelly yellowtail fusilier", - "Variable-lined fusilier", - "Lunar fusilier", - "Suez fusilier", - "Yellow and blueback fusilier", - "Yellowback fusilier", - "Fusiliers Caesio nei", - "Fusiliers nei", - "Union snook", - "Armed snook", - "Swordspine snook", - "Blackfin snook", - "Black snook", - "Fat snook", - "Tarpon snook", - "Yellowfin snook", - "Common snook", - "White snook", - "Largescale fat snook", - "Snooks(=Robalos) nei", - "Barramundi(=Giant seaperch)", - "Tanganyika lates", - "Albert lates", - "Bigeye lates", - "Forktail lates", - "Nile perch", - "Sleek lates", - "Freshwater perches nei", - "Waigieu seaperch", - "Redmouth grouper", - "Slender grouper", - "Goldribbon soapfish", - "Yellowtail bass", - "Arrowhead soapfish", - "Butterfly perch", - "Pink maomao", - "Graery threadfin seabass", - "Barred soapfish", - "Black grouper", - "Comb grouper", - "Gulf grouper", - "Gag", - "Venezuelan grouper", - "Scamp", - "Mottled grouper", - "Tiger grouper", - "Yellowfin grouper", - "Broomtail grouper", - "Island grouper", - "Yellowmouth grouper", - "Leopard grouper", - "Brazilian groupers nei", - "Dusky grouper", - "White grouper", - "Wavy-lined grouper", - "Hong Kong grouper", - "Spinycheek grouper", - "Giant grouper", - "Highfin grouper", - "Honeycomb grouper", - "Convict grouper", - "Sixbar grouper", - "Epaulet grouper", - "Greasy grouper", - "Nassau grouper", - "Rock hind", - "Spotted grouper", - "Speckled hind", - "Yellowedge grouper", - "Red hind", - "Starry grouper", - "Red grouper", - "Misty grouper", - "Snowy grouper", - "Hawaiian grouper", - "Dogtooth grouper", - "Blacktip grouper", - "Dungat grouper", - "Comet grouper", - "Warsaw grouper", - "White-edged grouper", - "Catface grouper", - "Areolate grouper", - "Jewfish", - "Malabar grouper", - "Halfmoon grouper", - "Blue-and-yellow grouper", - "Rooster hind", - "Banded grouper", - "Yellow grouper", - "Duskytail grouper", - "Longtooth grouper", - "Brownspotted grouper", - "Olive grouper", - "Orange-spotted grouper", - "Goldblotch grouper", - "Speckled blue grouper", - "Saddletail grouper", - "Rock grouper", - "Haifa grouper", - "Bridled grouper", - "Starspotted grouper", - "Striped grouper", - "Snubnose grouper", - "Speckled grouper", - "Camouflage grouper", - "Longfin grouper", - "Black-dotted grouper", - "Threespot grouper", - "Whitespotted grouper", - "Brown-marbled grouper", - "Marquesan grouper", - "Netfin grouper", - "White-blotched grouper", - "Eightbar grouper", - "Dot-dash grouper", - "Red-tipped grouper", - "Reticulate grouper", - "Potato grouper", - "Dotted grouper", - "Smallscaled grouper", - "Summan grouper", - "Oblique-banded grouper", - "Striped-fin grouper", - "Barred-chest grouper", - "Longspine grouper", - "Foursaddle grouper", - "One-blotch grouper", - "Moustache grouper", - "Groupers nei", - "Comber", - "Painted comber", - "Brown comber", - "Blackear bass", - "Belted sandfish", - "Blacktail comber", - "Ghanian comber", - "Combers nei", - "Goldenstriped soapfish", - "Ocellate soapfish", - "Streamer bass", - "Redbanded perch", - "Orange perch", - "African basslet", - "Wrasse bass", - "Swallowtail seaperch", - "Black seabass", - "Mutton hamlet", - "Rivulated mutton hamlet", - "Graysby", - "Coney", - "Peacock hind", - "Tomato hind", - "Bluespotted seabass", - "Niger hind", - "Bluespotted hind", - "Yellowfin hind", - "Freckled hind", - "Coral hind", - "Sixblotch hind", - "Golden hind", - "Garish hind", - "Strawberry hind", - "Darkfin hind", - "Chocolate hind", - "Leopard hind", - "Humpback grouper", - "Checked swallowtail", - "Leather bass", - "Smooth grouper", - "Sand perch", - "Mexican sand perch", - "Torpedo sand perch", - "Inshore sand perch", - "Pond perch", - "Spanish flag", - "Creole-fish", - "Spotted coralgrouper", - "Squaretail coralgrouper", - "Blacksaddled coralgrouper", - "Leopard coralgrouper", - "Roving coralgrouper", - "Marbled coralgrouper", - "Highfin coralgrouper", - "Greater soapfish", - "Spotted soapfish", - "Bigeye bass", - "Two-spot basslet", - "Sea goldie", - "Townsend's anthias", - "Sailfin anthias", - "Flathead perch", - "Boulenger's anthias", - "Golden grouper", - "School bass", - "Pearl-spotted fairy basslet", - "Pygmy sea bass", - "Hawkfish anthias", - "Oval grouper", - "Threadtail anthias", - "Argentine seabass", - "Koester", - "Yellowtail hamlet", - "Butter hamlet", - "Black hamlet", - "Threadfin anthias", - "Ara", - "Toadstool groper", - "Barred sand bass", - "Spotted sand bass", - "Kelp bass", - "Camotillo", - "Peruvian rock seabass", - "Reef bass", - "Masked grouper", - "Yellow-edged lyretail", - "White-edged lyretail", - "Sevenbar grouper", - "Gorgeous swallowtail", - "Groupers, seabasses nei", - "Westralian jewfish", - "Tiger grunter", - "Greenway's grunter", - "Black bream", - "Fortescue grunter", - "Silver grunter", - "Lorentz's grunter", - "Small-headed grunter", - "Barcoo grunter", - "Kimberley grunter", - "Jamur Lake grunter", - "Jarbua terapon", - "Small-scaled terapon", - "Largescaled terapon", - "Terapon perches nei", - "Fourlined terapon", - "Silver perch", - "Tigerperches nei", - "Wreckfish", - "Hapuku wreckfish", - "Bass groper", - "Hapuka", - "Giant seabass", - "Striped bass", - "White perch", - "White bass", - "Yellow bass", - "Atlantic seabasses", - "Striped bass, hybrid", - "Spotted seabass", - "European seabass", - "Seabasses nei", - "Yellow devilfish", - "Comet", - "Nightfish", - "Western pygmy perch", - "Pelagic basslet", - "Balston's pygmy perch", - "Oxleyan pygmy perch", - "Creole perch", - "Murray cod", - "Trout cod", - "Eastern freshwater cod", - "Japanese seabass", - "Mandarin fish", - "Big-eye mandarin fish", - "Leopard mandarin fish", - "Australian bass", - "Golden perch", - "Hawaiian flagtail", - "Mud sunfish", - "Flier", - "Pumpkinseed", - "Bluegill", - "Smallmouth bass", - "Largemouth black bass", - "Spotted bass", - "Rock bass", - "White crappie", - "Black crappie", - "Sacramento perch", - "Blackbanded sunfish", - "Glasseye", - "Japanese bigeye", - "Purple-spotted bigeye", - "Atlantic bigeye", - "Red bigeye", - "Moontail bullseye", - "Paeony bulleye", - "Bigeyes nei", - "Longfinned bullseye", - "Bigeyes, glasseyes, bulleyes nei", - "Broadbanded cardinalfish", - "Half-lined cardinal", - "Cardinal fish", - "Ring-tailed cardinalfish", - "Ruby cardinalfish", - "Cook's cardinalfish", - "Flagfin cardinalfish", - "Blackfoot cardinal", - "Perdix cardinalfish", - "Blackbelted cardinalfish", - "Orangelined cardinalfish", - "Bronze cardinalfish", - "Tiger cardinal", - "Large toothed cardinalfish", - "Twospot cardinalfish", - "Persian cardinalfish", - "Weed cardinalfish", - "Crosseyed cardinalfish", - "Mottled cardinalfish", - "Variegated cardinalfish", - "Gjellerup's mouth almighty", - "Crystal cardinal", - "Titan cardinalfish", - "Eightspine cardinalfish", - "Freckled cardinalfish", - "Paddlefish cardinalfish", - "Tarr's cardinalfish", - "Graceful-tailed cardinalfish", - "Luminous cardinalfish", - "Swallowtail cardinalfish", - "Sea urchin cardinalfish", - "Pajama cardinalfish", - "Bullseye", - "Doublebar cardinalfish", - "Twobelt cardinal", - "Spotfin cardinal", - "Iridescent cardinalfish", - "Cardinalfishes, etc. nei", - "Glowbelly", - "Three-spined cardinalfish", - "Silver splitfin", - "Blackmouth splitfin", - "Blackmouth bass", - "Smallscale splitfin", - "Aden splitfin", - "Splitfins nei", - "Glow-bellies, splitfins nei", - "European perch", - "American yellow perch", - "Balkhash perch", - "Western sand darter", - "Eastern sand darter", - "Asprete", - "Percarina", - "Ruffe", - "Donets ruffe", - "Danube ruffe", - "Schraetzer", - "Greenside darter", - "Rainbow darter", - "Fantail darter", - "Chihuahua darter", - "Logperch", - "Zingel", - "Walleye", - "Volga pikeperch", - "Pike-perch", - "Sauger", - "Walleyes nei", - "Spotted sillago", - "Flathead sillago", - "Trumpeter sillago", - "Silver sillago", - "Sand sillago", - "Flinders' sillago", - "Arabian sillago", - "Slender sillago", - "Clubfoot sillago", - "Sillago-whitings", - "Bighead tilefish", - "Grey tilefish", - "Ocean whitefish", - "Atlantic goldeneye tilefish", - "Horsehead tilefish", - "Ward's tilefish", - "Zebra tilefish", - "Ribbed tilefish", - "Great Northern tilefish", - "Tilefishes nei", - "Chameleon sand tilefish", - "Stark's tilefish", - "Quakerfish", - "Sand tilefish", - "Nosey dottyback", - "Oblique-lined dottyback", - "Fire-tail devil", - "Pencil snakelet", - "Orange dottyback", - "Olive dottyback", - "Dutoiti", - "Yellowtail dottyback", - "Blackstripe dottyback", - "Bluespotted dottyback", - "False trevally", - "Bluefish", - "Gnomefish", - "Cobia", - "Shrimp scad", - "Blackfin scad", - "Herring scad", - "Razorbelly scad", - "Yellowtail scad", - "Atlantic horse mackerel", - "Blue jack mackerel", - "Japanese jack mackerel", - "Chilean jack mackerel", - "Pacific jack mackerel", - "Mediterranean horse mackerel", - "Rough scad", - "Cape horse mackerel", - "Cunene horse mackerel", - "Greenback horse mackerel", - "African scad", - "Arabian scad", - "Yellowtail horse mackerel", - "Jack and horse mackerels nei", - "Fringefin trevally", - "Juan Fernandez trevally", - "Skipjack trevally", - "White trevally", - "Round scad", - "Redtail scad", - "Shortfin scad", - "Amberstripe scad", - "Japanese scad", - "Indian scad", - "Roughear scad", - "Mackerel scad", - "Scads nei", - "Bluespotted trevally", - "Green jack", - "Pacific crevalle jack", - "Blacktip trevally", - "Giant trevally", - "Horse-eye jack", - "Black jack", - "Bluefin trevally", - "Brassy trevally", - "Senegal jack", - "Bigeye trevally", - "Tille trevally", - "Blue runner", - "Crevalle jack", - "Bar jack", - "False scad", - "Yellow jack", - "Longfin crevalle jack", - "Jacks, crevalles nei", - "Atlantic moonfish", - "African moonfish", - "Hairfin lookdown", - "Caribbean moonfish", - "Mexican moonfish", - "Peruvian moonfish", - "Lookdown", - "Snubnose pompano", - "Florida pompano", - "Pompano", - "Great pompano", - "Southern pompano", - "Oyster pompano", - "Small spotted dart", - "Largespotted dart", - "Cayenne pompano", - "Swallowtail dart", - "Permit", - "Longfin pompano", - "Blackblotch pompano", - "Plata pompano", - "Guinean pompano", - "Indian pompano", - "Paloma pompano", - "Gafftopsail pompano", - "Steel pompano", - "Shortfin pompano", - "Pompanos nei", - "Greater amberjack", - "Japanese amberjack", - "Yellowtail amberjack", - "Guinean amberjack", - "Lesser amberjack", - "Samson fish", - "Fortune jack", - "Longfin yellowtail", - "Banded rudderfish", - "Amberjacks nei", - "Longjaw leatherjacket", - "Maracaibo leatherjacket", - "Shortjaw leatherjacket", - "Castin leatherjacket", - "Leatherjacket", - "Leatherjackets nei", - "Pilotfish", - "Silvermouth trevally", - "Longrakered trevally", - "Leerfish", - "Alexandria pompano", - "African pompano", - "Indian threadfish", - "Black pomfret", - "Cleftbelly trevally", - "Longfin trevally", - "Orangespotted trevally", - "Coastal trevally", - "Longnose trevally", - "Shadow trevally", - "Whitefin trevally", - "Blue trevally", - "Yellowspotted trevally", - "Bludger", - "Bumpnose trevally", - "Duskyshoulder trevally", - "Malabar trevally", - "Coachwhip trevally", - "Island trevally", - "Threadfin jack", - "Barcheek trevally", - "Brownback trevally", - "Imposter trevally", - "Rainbow runner", - "Golden trevally", - "Torpedo scad", - "Talang queenfish", - "Doublespotted queenfish", - "Barred queenfish", - "Needlescaled queenfish", - "Queenfishes", - "Atlantic bumper", - "Pacific bumper", - "Bumpers nei", - "Parona leatherjacket", - "Bigeye scad", - "Oxeye scad", - "Bluntnose jack", - "Bicolor jack", - "Yellowfin jack", - "Blackfin jack", - "Yellowstripe scad", - "Blackbanded trevally", - "Cottonmouth jack", - "Whitemouth jack", - "Whitetongue jack", - "Vadigo", - "Carangids nei", - "Roosterfish", - "Moonfish", - "Atlantic pomfret", - "Southern rays bream", - "Pacific pomfret", - "Bigtooth pomfret", - "Big-scale pomfret", - "Sickle pomfret", - "Atlantic fanfish", - "Prickly fanfish", - "Pacific fanfish", - "Spotted fanfish", - "Brilliant pomfret", - "Rough pomfret", - "Pomfrets, ocean breams nei", - "Common dolphinfish", - "Pompano dolphinfish", - "Dolphinfishes nei", - "Ruff", - "Australian salmon", - "Cape bonnetmouth", - "Rubyfish", - "Atlantic rubyfish", - "Japanese rubyfish", - "Bonnetmouths, rubyfishes nei", - "Bonnetmouth", - "Boga", - "Mangrove red snapper", - "Checkered snapper", - "Crimson snapper", - "Dory snapper", - "Blacktail snapper", - "John's snapper", - "Bigeye snapper", - "One-spot snapper", - "Blubberlip snapper", - "Malabar blood snapper", - "Emperor red snapper", - "Brownstripe red snapper", - "Mutton snapper", - "Schoolmaster snapper", - "Mullet snapper", - "Yellow snapper", - "Southern red snapper", - "Blackfin snapper", - "Northern red snapper", - "Colorado snapper", - "Cubera snapper", - "Grey snapper", - "Spotted rose snapper", - "Dog snapper", - "Mahogany snapper", - "Pacific dog snapper", - "Lane snapper", - "Silk snapper", - "African red snapper", - "African brown snapper", - "Russell's snapper", - "Gorean snapper", - "Two-spot red snapper", - "Humpback red snapper", - "Yellow-lined snapper", - "Golden African snapper", - "Yellow-banded snapper", - "Common bluestripe snapper", - "Yellowstreaked snapper", - "Timor snapper", - "Five-lined snapper", - "Blueline snapper", - "Blackspot snapper", - "Papuan black snapper", - "Pacific red snapper", - "Jordan's snapper", - "Humphead snapper", - "Guinea snapper", - "Bengal snapper", - "Lunartail snapper", - "Bluestriped snapper", - "Snappers nei", - "Yellowtail snapper", - "Rusty jobfish", - "Small toothed jobfish", - "Green jobfish", - "Black snapper", - "African forktail snapper", - "Tang's snapper", - "Japanese snapper", - "Vanuatu snapper", - "Saddle-back snapper", - "Yellowtail blue snapper", - "Cocoa snapper", - "Queen snapper", - "Deep-water red snapper", - "Deepwater longtail red snapper", - "Pale snapper", - "Black and white snapper", - "Scalemouth jobfish", - "Ornate jobfish", - "Crimson jobfish", - "Wenchman", - "Goldbanded jobfish", - "Lavender jobfish", - "Sharptooth jobfish", - "Goldflag jobfish", - "Golden eye jobfish", - "Oblique-banded snapper", - "Jobfishes nei", - "Vermilion snapper", - "Mexican barred snapper", - "Randall's snapper", - "Sailfin snapper", - "Chinamanfish", - "Pinjalo", - "Snappers, jobfishes nei", - "Smooth dwarf monocle bream", - "Rosy dwarf monocle bream", - "Scaly dwarf monocle bream", - "Small-toothed whiptail", - "Double whiptail", - "Paradise whiptail", - "Green-striped coral bream", - "Red filament threadfin bream", - "Ornate threadfin bream", - "Japanese threadfin bream", - "Golden threadfin bream", - "Mauvelip threadfin bream", - "Doublewhip threadfin bream", - "Redspine threadfin bream", - "Notchedfin threadfin bream", - "Fivelined threadfin bream", - "Balinese threadfin bream", - "Yellowbelly threadfin bream", - "Celebes threadfin bream", - "Graceful threadfin bream", - "Randall's threadfin bream", - "Delagoa threadfin bream", - "Slender threadfin bream", - "Threadfin breams nei", - "Whitecheek monocle bream", - "Thumbprint monocle bream", - "Arabian monocle bream", - "Two-lined monocle bream", - "Monogrammed monocle bream", - "Lattice monocle bream", - "Black-streaked monocle bream", - "Striped monocle bream", - "Yellowstripe monocle bream", - "Bridled monocle bream", - "Monocle breams", - "Threadfin and dwarf breams nei", - "Tripletail", - "Pacific tripletail", - "Toothpony", - "Toothponies nei", - "Splendid ponyfish", - "Twoblotch ponyfish", - "Goldstripe ponyfish", - "Dussumier's ponyfish", - "Common ponyfish", - "Striped ponyfish", - "Orangefin ponyfish", - "Whipfin ponyfish", - "Oblong ponyfish", - "Shortnose ponyfish", - "Ornate ponyfish", - "Ponyfishes(=Slipmouths)", - "Pugnose ponyfish", - "Deep pugnose ponyfish", - "Decorated ponyfish", - "Slender ponyfish", - "Ponyfishes(=Slipmouths) nei", - "Borriqueta porgy", - "Painted sweetlips", - "Xantic sargo", - "Spotted head sargo", - "Burrito grunt", - "Black margate", - "Porkfish", - "White margate", - "Black grunt", - "Caesar grunt", - "Yellowspotted grunt", - "French grunt", - "Spanish grunt", - "Spottail grunt", - "Cottonwick grunt", - "Sailor's grunt", - "White grunt", - "Bluestriped grunt", - "Grey grunt", - "Greybar grunt", - "Chere-chere grunt", - "Tomtate grunt", - "Yellowstripe grunt", - "Raucous grunt", - "Pigfish", - "Corocoro grunt", - "Torroto grunt", - "Cabinza grunt", - "African striped grunt", - "Crescent sweetlips", - "Trout sweetlips", - "Minstrel sweetlips", - "Biglip grunt", - "Rubberlip grunt", - "Lemonfish", - "Blackspotted rubberlip", - "Sordid rubberlip", - "Oriental sweetlips", - "Whitebarred rubberlip", - "Lesson's thicklip", - "Harry hotlips", - "Yellowbanded sweetlips", - "Dusky rubberlip", - "Sweetlips, rubberlips nei", - "Striped piggy", - "Smallspotted grunter", - "Silver grunt", - "Saddle grunt", - "Olive grunt", - "Smallspotted grunt", - "Purplemouth grunt", - "Sand grunt", - "Burro grunt", - "Longspine grunt", - "Bastard grunt", - "Sompat grunt", - "Parrot grunt", - "Cock grunter", - "Javelin grunter", - "Panama grunt", - "Pigsnout grunt", - "Bluecheek silver grunt", - "Banded grunter", - "Bronzestriped grunt", - "Bigeye grunt", - "Dara", - "Barred grunt", - "Wavyline grunt", - "Grunts, sweetlips nei", - "Yellowtail croaker", - "Boeseman croaker", - "Vacuocua croaker", - "Barbel drum", - "Totoaba", - "Brown meagre", - "Deep-water drum", - "Sciaenas nei", - "Freshwater drum", - "Acoupa weakfish", - "Whitefin weakfish", - "Peruvian weakfish", - "Sand weakfish", - "Jamaica weakfish", - "Smooth weakfish", - "Spotted weakfish", - "Smallscale weakfish", - "Gulf weakfish", - "Shortfin weakfish", - "Cachema weakfish", - "Squeteague(=Gray weakfish)", - "Smalltooth weakfish", - "Striped weakfish", - "Green weakfish", - "Orangemouth weakfish", - "Silver seatrout", - "Tonkin weakfish", - "Stolzmann's weakfish", - "Stripped weakfish", - "Weakfishes nei", - "San Francisco croaker", - "Amazon croaker", - "Longtail croaker", - "Mi-iuy (brown) croaker", - "Angola croaker", - "La Plata croaker", - "Half-mourning croaker", - "Fusco drum", - "Slender croaker", - "Whitemouth croaker", - "Atlantic croaker", - "Tallfin croaker", - "Croakers nei", - "Southern kingcroaker", - "Highfin king croaker", - "Snakehead kingcroaker", - "Panama kingcroaker", - "California kingcroaker", - "Northern kingfish", - "Gulf kingcroaker", - "Kingcroakers nei", - "New Grenada drum", - "Estuary croaker", - "Shi drum", - "Argentine croaker", - "Sand drum", - "Yellowfin drum", - "Polla drum", - "Canary drum(=Baardman)", - "Fusca drum", - "Steindachner's drum", - "Striped drum", - "Drums nei", - "Belanger's croaker", - "Coitor croaker", - "Sin croaker", - "Leaftail croaker", - "Bearded croaker", - "Sharpnose hammer croaker", - "Karut croaker", - "King weakfish", - "Meagre", - "Japanese meagre", - "Southern meagre(=Mulloway)", - "Squaretail kob", - "Amoy croaker", - "Arabian sea meagre", - "Meagres nei", - "Geelbek croaker", - "White weakfish", - "Bluestreak drum", - "High-hat", - "Jack-knifefish", - "White croaker", - "Steeplined drum", - "Silver drum", - "Shorthead drum", - "Shining drum", - "Pacific drum", - "Boe drum", - "Smalleye croaker", - "Pacific smalleye croaker", - "Spotted croaker", - "Tigertooth croaker", - "Bronze croaker", - "Pama croaker", - "Banded croaker", - "Peruvian banded croaker", - "Blackfin croaker", - "Black curbinata", - "South American silver croaker", - "Pacora", - "Black drum", - "White stardrum", - "American stardrum", - "Smalleye stardrum", - "Minor stardrum", - "Yawning stardrum", - "Rake stardrum", - "Ground croaker", - "Yelloweye croaker", - "Yellow drum", - "Blotched croaker", - "Honnibe croaker", - "Sharpnose croaker", - "Soldier croaker", - "Large yellow croaker", - "Yellow croaker", - "Silver weakfish", - "Bigtooth corvina", - "Spot croaker", - "Black croaker", - "Brazilian croaker", - "Guyanan croaker", - "Spotfin croaker", - "Red drum", - "Queen croaker", - "Law croaker", - "Cassava croaker", - "Longneck croaker", - "Cameroon croaker", - "Bobo croaker", - "Guinea croaker", - "West African croakers nei", - "Goatee croaker", - "Prickly croaker", - "Blackmouth croaker", - "Chaptis bahaba", - "Chinese bahaba", - "Reeve's croaker", - "Bengal corvina", - "Kathala croaker", - "Panna croaker", - "Silver croaker", - "Big-head pennah croaker", - "Pawak croaker", - "Bigeye croaker", - "Blackspotted croaker", - "Bigmouth croaker", - "Blotched tiger-toothed croaker", - "Corvina drum", - "Croakers, drums nei", - "Mozambique large-eye bream", - "Striped large-eye bream", - "Grey large-eye bream", - "Yellowsnout large-eye bream", - "Japanese large-eye bream", - "Blue-lined large-eye bream", - "Largeeye breams", - "Spangled emperor", - "Atlantic emperor", - "Longfin emperor", - "Thumbprint emperor", - "Sky emperor", - "Red snout emperor", - "Slender emperor", - "Pacific yellowtail emperor", - "Blackeye emperor", - "Grass emperor", - "Pink ear emperor", - "Smalltooth emperor", - "Trumpet emperor", - "Longface emperor", - "Spotcheek emperor", - "Ambon emperor", - "Orange-spotted emperor", - "Orange-striped emperor", - "Ornate emperor", - "Yellowlip emperor", - "Snubnose emperor", - "Yellowtail emperor", - "Longspine emperor", - "Redaxil emperor", - "Humpnose big-eye bream", - "Emperors(=Scavengers) nei", - "Fransmadam", - "Janbruin", - "Bulldog dentex", - "Blackspot(=red) seabream", - "Common pandora", - "Axillary seabream", - "Red pandora", - "Arabian pandora", - "Natal pandora", - "Pandoras nei", - "South American silver porgy", - "Annular seabream", - "White seabream", - "Common two-banded seabream", - "Zebra seabream", - "Sharpsnout seabream", - "Spottail seabream", - "Banded seabream", - "Red Sea seabream", - "Senegal seabream", - "Two-banded seabream", - "Sargo breams nei", - "Galapagos porgy", - "Grass porgy", - "Jolthead porgy", - "Pacific porgy", - "Saucereye porgy", - "Littlehead porgy", - "Sheepshead porgy", - "Porgies", - "Pink dentex", - "Large-eye dentex", - "Canary dentex", - "Common dentex", - "Angolan dentex", - "Congo dentex", - "Morocco dentex", - "Yellowback seabream", - "Barnard dentex", - "Dentex nei", - "Black seabream", - "Steentjie seabream", - "Saddled seabream", - "Sheepshead", - "Western Atlantic seabream", - "King soldier bream", - "Taiwan tai", - "Soldierbream", - "Carpenter seabream", - "Santer seabream", - "Black musselcracker", - "Bluespotted seabream", - "Red porgy", - "Redbanded seabream", - "Silver seabream", - "Japanese seabream", - "Southern common seabream", - "Pargo breams nei", - "Red steenbras", - "Dane seabream", - "Panga seabream", - "White stumpnose", - "Goldlined seabream", - "Cape stumpnose", - "Bigeye stumpnose", - "Haffara seabream", - "Stumpnoses nei", - "Musselcracker seabream", - "Gilthead seabream", - "Bogue", - "Daggerhead seabream", - "Roman seabream", - "Red stumpnose seabream", - "Englishman seabream", - "Slinger seabream", - "False red stumpnose", - "Daggerhead breams nei", - "Karanteen seabream", - "White steenbras", - "Sand steenbras", - "West coast seabream", - "Steenbrasses nei", - "Blue hottentot", - "Bronze seabream", - "Hottentot seabream", - "Copper breams(=Hottentots) nei", - "Scotsman seabream", - "Seventyfour seabream", - "Blueskin seabream", - "Frenchman seabream", - "Polystegan seabreams nei", - "Salema", - "Threadfin porgy", - "Crimson seabream", - "Sobaity seabream", - "Goldsilk seabream", - "Surf bream", - "Blackhead seabream", - "Yellowfin seabream", - "Twobar seabream", - "Scup", - "Longspine porgy", - "Pinfish", - "German seabream", - "Knife-back seabream", - "Porgies, seabreams nei", - "Blotched picarel", - "Picarel", - "Blackspot picarel", - "Bigeye picarel", - "Blacktail picarel", - "Picarels nei", - "Curled picarel", - "Picarels, etc. nei", - "Blue-striped mullet", - "Surmullet", - "Red mullet", - "Argentine goatfish", - "Surmullets(=Red mullets) nei", - "Yellowstripe goatfish", - "Yellowfin goatfish", - "Yellow goatfish", - "Doublebar goatfish", - "Gold-saddle goatfish", - "Red Sea goatfish", - "Long-barbel goatfish", - "Manybar goatfish", - "Sidespot goatfish", - "Indian goatfish", - "Dash-and-dot goatfish", - "Cinnabar goatfish", - "Pearly goatfish", - "Whitesaddle goatfish", - "Rosy goatfish", - "Goldband goatfish", - "Sulphur goatfish", - "Ochrebanded goatfish", - "Freckled goatfish", - "Yellowstriped goatfish", - "Dwarf goatfish", - "Band-tail goatfish", - "Por's goatfish", - "Asymmetrical goatfish", - "Gilded goatfish", - "Bensasi goatfish", - "Goatfishes", - "West African goatfish", - "Spotted goatfish", - "Goatfishes, red mullets nei", - "Live sharksucker", - "Slender suckerfish", - "Spearfish remora", - "Shark sucker", - "Marlin sucker", - "Shark suckers", - "White suckerfish", - "Suckerfishes, remoras nei", - "Galjoen", - "Banded galjoen", - "Galjoens nei", - "Spotted archerfish", - "Banded archerfish", - "Smallscale archerfish", - "Silver moony", - "African moony", - "Full moony", - "Eastern pomfred", - "Silverbelly", - "Deep-bodied mojarra", - "Whipfin silver-biddy", - "Strongspine silver-biddy", - "Yellow fin mojarra", - "Common silver-biddy", - "Slender silver-biddy", - "Guinean striped mojarra", - "Striped silver biddy", - "Longtail silverbiddy", - "Saddleback silver-biddy", - "Mojarras(=Silver-biddies) nei", - "Irish mojarra", - "Dow's mojarra", - "Flagfin mojarra", - "Black axillary mojarra", - "Longfin mojarra", - "Mojarras, etc. nei", - "Eastern footballer", - "Grey knifefish", - "Gulf opal eye", - "Parore", - "Opaleye", - "Halfmoon", - "Stripey", - "Western footballer", - "Sea sweep", - "Blue maomao", - "Moonlighter", - "Blue sea chub", - "Blue-bronze sea chub", - "Cortez sea chub", - "Yellow sea chub", - "Bermuda sea chub", - "Brown chub", - "Brassy chub", - "Kyphosus sea chubs nei", - "Stone-bream", - "Zebra- perch sea chub", - "Bluestriped chub", - "Sea chubs nei", - "Slender bullseye", - "Silver sweeper", - "Curved sweeper", - "Vanikoro sweeper", - "Spotted sicklefish", - "African sicklefish", - "Concertina fish", - "Sicklefishes nei", - "Lord Howe Island butterflyfish", - "Blackfin coralfish", - "Copperband butterflyfish", - "Truncate coralfish", - "Highfin coralfish", - "Pyramid butterflyfish", - "Blacknosed butterflyfish", - "Sixspine butterflyfish", - "Bicolor butterflyfish", - "Foureye butterflyfish", - "Threebanded butterflyfish", - "Banded butterflyfish", - "Four-banded butterflyfish", - "Golden butterflyfish", - "Mirror butterflyfish", - "Chevron butterflyfish", - "Redtail butterflyfish", - "Gardner's butterflyfish", - "Arabian butterflyfish", - "Black-spotted butterflyfish", - "Vagabond butterflyfish", - "Raccoon butterflyfish", - "Threadfin butterflyfish", - "Butterflyfishes nei", - "Pennant coralfish", - "Masked bannerfish", - "Longnose butterfly fish", - "Indian barred butterflyfish", - "Butterflyfishes", - "Old wife", - "Old wife fishes", - "Manefish", - "Manefishes nei", - "Fourspine leaffish", - "Malayan leaffish", - "Gangetic leaffish", - "African leaffish", - "Badis", - "Amazon leaffish", - "Striped boarfish", - "Sailfin armourhead", - "Short boarfish", - "Yellowspotted boarfish", - "Giant boarfish", - "Longsnout boarfish", - "Cape armourhead", - "Bigspined boarfish", - "Pelagic armourhead", - "Longfin armorhead", - "Slender armorhead", - "Pelagic armourheads nei", - "Longfin boarfish", - "Cape knifejaw", - "Natal knifejaw", - "Midas cichlid", - "Flier cichlid", - "Greenstreaked eartheater", - "Giant cichlid", - "Keyhole cichlid", - "Blackspot climbing perch", - "Featherfin cichlid", - "Malawi eyebiter", - "Mozambique tilapia", - "Nile tilapia", - "Blue tilapia", - "Sabaki tilapia", - "Longfin tilapia", - "Wami tilapia", - "Three spotted tilapia", - "Magadi tilapia", - "Karomo", - "Kariba tilapia", - "Black tilapia", - "Tilapias nei", - "Blue-Nile tilapia, hybrid", - "Mango tilapia", - "Blackchin tilapia", - "Green guapote", - "Black acara", - "Chameleon cichlid", - "Rio Grande cichlid", - "Jaguar guapote", - "Blackbelt cichlid", - "Mexican mojarra", - "Convict cichlid", - "Jack Dempsey", - "Cichlasoma nei", - "Peacock cichlid", - "Speckled pavon", - "Redbelly tilapia", - "Banded tilapia", - "Redbreast tilapia", - "Guinean tilapia", - "Otjikoto tilapia", - "Spotted tilapia", - "Okavango tilapia", - "Threespot torpedo", - "Argentine humphead", - "Giant Haplochromis", - "Rainbow cichlid", - "Moga", - "Lavender mbuna", - "Dikume", - "Malawi gar", - "Flag cichlid", - "Ram cichlid", - "Myaka", - "Fuscotaeniatus", - "Ringtail pike cichlid", - "Pike cichlid", - "Humphead cichlid", - "Deep-water hap", - "Haplochromis yellow black line", - "Pearl cichlid", - "Jewelfish", - "Banded jewelfish", - "Orange chromide", - "Pearlspot", - "Oscar", - "Velvety cichlids", - "Mouthbrooding cichlids", - "Green terror", - "Blue acara", - "Elongate mbuna", - "Zebra mbuna", - "Golden mbuna", - "Bluegray mbuna", - "Blue streak hap", - "Blue mbuna", - "Blue discus", - "Threadfin acara", - "Sharphead eartheater", - "Electric blue hap", - "Canary kurper", - "Uaru", - "Thinface cichlid", - "Yellow-belly bream", - "Chessboard cichlid", - "Lionhead cichlid", - "Nsess", - "Spotfin goby cichlid", - "Goldeneye cichlid", - "Cichlids nei", - "Bandfish", - "Red bandfish", - "Kelp perch", - "Rainbow seaperch", - "Reef perch", - "White seaperch", - "Pink seaperch", - "Black perch", - "Russian river tule perch", - "Shiner perch", - "Barred surfperch", - "Spotfin surfperch", - "Rubberlip seaperch", - "Spiny chromis", - "Golden damselfish", - "Black-banded demoiselle", - "Galapagos damsel", - "Big-lip damsel", - "Twinspot damselfish", - "Blueline demoiselle", - "Easter damselfish", - "Sheila's damselfish", - "Onespot demoiselle", - "White-spot damsel", - "Lagoon damselfish", - "Immaculate damsel", - "Bumphead damselfish", - "Guinean damselfish", - "Ocellated damsel", - "Yellowtail demoiselle", - "Regal demoiselle", - "Arabian demoiselle", - "Coquito sergeant", - "Kermadec scalyfin", - "Blackbar devil", - "Tahitian reef-damsel", - "Spinecheek anemonefish", - "Gulf damselfish", - "Damselfish", - "Valparaiso chromis", - "Peruvian chromis", - "Blacksmith", - "Yellow chromis", - "Azores chromis", - "Cadenat's chromis", - "Bicolor chromis", - "Arabian chromis", - "Weber's chromis", - "Yellowfin chromis", - "Chocolatedip chromis", - "Blue green damselfish", - "Cape damsel", - "Australian gregory", - "Dusky damselfish", - "Pacific gregory", - "Beaugregory", - "Cape Verde gregory", - "Jordan's damsel", - "Sergeant-major", - "Canary damsel", - "Night sergeant", - "Blackspot sergeant", - "Indo-Pacific sergeant", - "Scissortail sergeant", - "Garibaldi damselfish", - "Hawaiian dascyllus", - "Whitetail dascyllus", - "Reticulate dascyllus", - "Threespot dascyllus", - "Creole damsel", - "Speckled damselfish", - "Lemon damsel", - "Dark damsel", - "Slender damsel", - "Paletail damsel", - "Threeline damsel", - "Threespot damsel", - "Skunk clownfish", - "Barrier reef anemonefish", - "Yellowtail clownfish", - "Sebae anemonefish", - "Twobar anemonefish", - "Fusilier damselfish", - "Damselfishes", - "Scale-rayed wrasse", - "Western blue groper", - "Natal wrasse", - "Ballan wrasse", - "Cuckoo wrasse", - "Brown wrasse", - "Green wrasse", - "Labrus wrasses nei", - "Cigar wrasse", - "Girdled wrasse", - "Exquisite wrasse", - "Creole wrasse", - "Mutant wrasse", - "Sharp-headed wrasse", - "Largescale wrasse", - "Yellowtail tubelip", - "Dwarf wrasse", - "Sling-jaw wrasse", - "Ring wrasse", - "Tubelip wrasse", - "Allen's tubelip", - "Shoulder-spot wrasse", - "Rare wrasse", - "Minute wrasse", - "Spotty", - "Seagrass wrasse", - "Speckled maori wrasse", - "Cheeklined wrasse", - "Angular flasher", - "McCosker's flasher", - "Bleeding wrasse", - "Pelvic-spot wrasse", - "Striated wrasse", - "Rust-banded wrasse", - "Chiseltooth wrasse", - "Polynesian wrasse", - "Cocktail wrasse", - "Bluelined wrasse", - "Cutribbon wrasse", - "Rainbow slender wrasse", - "Spottail wrasse", - "Slender wrasse", - "Whitebanded sharpnose wrasse", - "Finspot wrasse", - "Blue-banded wrasse", - "Rock cook", - "Emerald wrasse", - "Rainbow wrasse", - "African coris", - "Clown coris", - "Queen coris", - "Goldsinny-wrasse", - "Pearly razorfish", - "Geographic wrasse", - "Spotted wrasse", - "Bluespotted wrasse", - "Spanish hogfish", - "Mexican hogfish", - "Harlequin wrasse", - "Golden-spot hogfish", - "Axilspot hogfish", - "Blackbar hogfish", - "Western Australia pigfish", - "Diana's hogfish", - "Tarry hogfish", - "Redbreasted wrasse", - "Tripletail wrasse", - "Humphead wrasse", - "Broomtail wrasse", - "Floral wrasse", - "Blackspot tuskfish", - "Robust tuskfish", - "Tuskfishes nei", - "Hogfish", - "Señorita", - "Tautog", - "Ornate wrasse", - "Bluehead", - "Saddle wrasse", - "Moon wrasse", - "Surge wrasse", - "Goldbar wrasse", - "Cunner", - "California sheephead", - "Bird wrasse", - "Green birdmouth wrasse", - "Black wrasse", - "Canarytop wrasse", - "Dusky wrasse", - "Bubblefin wrasse", - "U-spot wrasse", - "Blackear wrasse", - "Zigzag wrasse", - "Checkerboard wrasse", - "Grey wrasse", - "Corkwing wrasse", - "Symphodus wrasses nei", - "Bluestreak cleaner wrasse", - "Barred thicklip", - "Blackeye thicklip", - "Peacock wrasse", - "Two-spot razorfish", - "Fivefinger wrasse", - "Wrasses, hogfishes, etc. nei", - "Butterfish, greenbone", - "Japanese parrotfish", - "Carolines parrotfish", - "Spinytooth parrotfish", - "Heavybeak parrotfish", - "Daisy parrotfish", - "Steephead parrotfish", - "Bleeker's parrotfish", - "Pacific slopehead parrotfish", - "Bower's parrotfish", - "Loosetooth parrotfish", - "Emerald parrotfish", - "Redband parrotfish", - "Redtail parrotfish", - "Parrotfish", - "Redfin parrotfish", - "Greenblotch parrotfish", - "Blue parrotfish", - "Queen parrotfish", - "Forsten's parrotfish", - "Striped parrotfish", - "Princess parrotfish", - "Gulf parrotfish", - "Bridled parrotfish", - "Blue-barred parrotfish", - "Dusky parrotfish", - "Guinean parrotfish", - "Common parrotfish", - "Ember parrotfish", - "Eclipse parrotfish", - "Tricolour parrotfish", - "Arabian parrotfish", - "Rusty parrotfish", - "Purple-brown parrotfish", - "Marbled parrotfish", - "Bluelip parrotfish", - "Candelamoa parrotfish", - "Pacific longnose parrotfish", - "Bicolour parrotfish", - "Green humphead parrotfish", - "Parrotfishes nei", - "Reunion angelfish", - "Orangeback angelfish", - "Yellowhead angelfish", - "Dusky angelfish", - "Barred angelfish", - "Ballina angelfish", - "Ornate angelfish", - "Pitcairn angelfish", - "Clarion angelfish", - "Guinean angelfish", - "Bluering angelfish", - "Emperor angelfish", - "Arabian angelfish", - "Yellowbar angelfish", - "Semicircle angelfish", - "Regal angelfish", - "Purplemask angelfish", - "Angelfishes nei", - "Spotted hawkfish", - "Coral hawkfish", - "Redbarred hawkfish", - "Giant hawkfish", - "Stocky hawkfish", - "Swallowtail hawkfish", - "Sixband hawkfish", - "Flame hawkfish", - "Longnose hawkfish", - "Arc-eye hawkfish", - "Blackside hawkfish", - "Hawkfishes nei", - "Tasseled kelpfish", - "Silver spot", - "Notchheaded marblefish", - "St. Paul's fingerfin", - "Dusky morwong", - "Castaneta", - "Peruvian morwong", - "Red moki", - "Hawaiian morwong", - "Redlip morwong", - "Spottedtail morwong", - "Magpie perch", - "Redfingers", - "Porae", - "Tarakihi", - "Morwongs", - "Two-tone fingerfin", - "Bank steenbras", - "Natal fingerfin", - "Telescope fish", - "Striped trumpeter", - "Blue moki", - "Bastard trumpeter", - "Trumpeters nei", - "Yellowhead jawfish", - "Robust jawfish", - "Birdled jawfish", - "Royal gramma", - "Yellow basslet", - "Striped threadfin", - "Sixfinger threadfin", - "Blue bobo", - "Yellow bobo", - "Blackspot threadfin", - "Giant African threadfin", - "Slender fivefinger threadfin", - "Long-limb threadfin", - "King threadfin", - "River threadfin", - "African blackspot threadfin", - "Smallmouth threadfin", - "Arabian blackspot threadfin", - "Australian threadfin", - "Blackfin threadfin", - "Atlantic threadfin", - "Littlescale threadfin", - "Persian blackspot threadfin", - "Largemouth striped threadfin", - "Barbu", - "Fourfinger threadfin", - "Threefinger threadfin", - "E. Asian fourfinger threadfin", - "Lesser African threadfin", - "Royal threadfin", - "Paradise threadfin", - "Northern paradise fish", - "Eastern paradise fish", - "Hornaday’s paradise fish", - "Blackhand paradise fish", - "Elegant paradise fish", - "Kapuas elegant paradise fish", - "Indian threadfin", - "Dwarf paradise fish", - "Sevenfinger threadfin", - "Javanese threadfin", - "Splendid threadfin", - "Eightfinger threadfin", - "Indian sevenfinger threadfin", - "Yellowthread threadfin", - "Threadfins, tasselfishes nei", - "Slope bass", - "False scorpionfish", - "Plunderfish", - "Marbled plunderfish", - "Barbeled plunderfishes nei", - "Long-tailed groppo", - "Barred seabass", - "Lampfish", - "Channel bull blenny", - "Longfin icedevil", - "Pithead", - "Naked-head toothfish", - "Patagonian blennie", - "Antarctic toothfish", - "Patagonian toothfish", - "Antarctic toothfishes nei", - "Marbled rockcod", - "Humped rockcod", - "Yellowbelly rockcod", - "Grey rockcod", - "Black rockcod", - "Striped-eyed rockcod", - "Triangular rockcod", - "Narrowhead rockcod", - "Blue rockcod", - "Lobe-lip notothen", - "Notothenia nei", - "Magellanic rockcod", - "Maori chief", - "Black cod", - "Paranotothenia nei", - "Painted notie", - "Yellowfin notie", - "Toad notie", - "Patagonian rockcod", - "Longtail Southern cod", - "Yellowfin notothen", - "Patagonotothen nei", - "Blunt scalyhead", - "Emerald rockcod", - "Sharp-spined notothenia", - "Slender scalyhead", - "Scaly rockcod", - "Dusky rockcod", - "Spotted notothen", - "Crowned rockcod", - "Bigeye notothen", - "Orange notothen", - "Trematomus nei", - "Striped rockcod", - "Bald notothen", - "Stocky rockcod", - "Pagothenia nei", - "Antarctic silverfish", - "Antarctic rockcods, noties nei", - "Deep-water dragon", - "Mawson's dragonfish", - "Ploughfish", - "Dragonfishes nei", - "Long-fingered icefish", - "Jonah's icefish", - "Blackfin icefish", - "Mackerel icefish", - "Pike icefish", - "South Georgia icefish", - "Ocellated icefish", - "Myers' icefish", - "Unicorn icefish", - "Spiny icefish", - "Crocodile icefishes nei", - "Pennyfish", - "High-finned glass perchlet", - "Four-spined glass perchlet", - "Bald glassy", - "Slender glassy", - "Longspine glassy", - "Elongate glass-perchlet", - "Glassfishes", - "Black cardinal fish", - "Pencil cardinal", - "Robust cardinalfish", - "Cardinal fishes nei", - "Magellan plunderfish", - "Antarctic spiny plunderfish", - "S. Georgia spiny plunderfish", - "Spiny plunderfishes nei", - "Beachsalmon", - "Percoids nei", - "Atlantic wolffish", - "Northern wolffish", - "Spotted wolffish", - "Wolffishes(=Catfishes) nei", - "Wolf-eel", - "Alaskan ronquil", - "Stripefin ronquil", - "Northern ronquil", - "Pighead prickleback", - "Stone cockscomb", - "Lesser prickleback", - "Y-prickleback", - "High cockscomb", - "Pearly prickleback", - "Monkeyface prickleback", - "Mosshead warbonnet", - "Fourline snakeblenny", - "Trident prickleback", - "Longsnout prickleback", - "Slender eelblenny", - "Ribbon prickleback", - "Bluebarred prickleback", - "Whitebarred prickleback", - "Radiated shanny", - "Black prickleback", - "Penpoint gunnel", - "Stippled gunnel", - "Kelp gunnel", - "Rockweed gunnel", - "Tidepool gunnel", - "Rock gunnel", - "Quillfish", - "Eelpout", - "Cuskpout", - "Ocean pout", - "Persimmon eelpout", - "Arctic eelpout", - "Greater eelpout", - "Eelpouts", - "Wolf eelpout", - "Halfbarred pout", - "Stout slipskin", - "Bearded eelpout", - "Looseskin eelpout", - "Atlantic soft pout", - "Limp eelpout", - "Eelpouts nei", - "Graveldiver", - "Prowfish", - "Dwarf wrymouth", - "Red triplefin", - "Pacific sandlance", - "Small sandeel", - "American sand lance", - "Gill's sand lance", - "Sandeels(=Sandlances) nei", - "Scaly sandlance", - "Cape sandlance", - "Mediterranean sand eel", - "Smooth sandeel", - "Greater sand-eel", - "Great sandeel", - "Sandlances nei", - "Gaper", - "Black swallower", - "Duckbill flathead", - "Roundtail duckbill", - "Squaretail duckbill", - "Brazilian flathead", - "Duckbills nei", - "Torrent fish", - "Pacific sandperch", - "Namorado sandperch", - "Argentinian sandperch", - "New Zealand blue cod", - "U-mark sandperch", - "Whitespot sandsmelt", - "Latticed sandperch", - "Speckled sandperch", - "Barred sandperch", - "Smallscale grubfish", - "Brazilian sandperch", - "Chilean sandperch", - "Spotted sand-diver", - "Arabian sand diver", - "Longfin burrower", - "Sand dart", - "Greater weever", - "Lesser weever", - "Spotted weever", - "Starry weever", - "Guinean weever", - "Sailfin weever", - "Striped weever", - "Cape Verde weever", - "Weevers nei", - "Weeverfishes nei", - "Northern stargazer", - "Spotted stargazer", - "Fringed stargazer", - "Lancer stargazer", - "Stargazer", - "Longspine stargazer", - "West African stargazer", - "Whitespotted stargazer", - "Dollfus' stargazer", - "Stargazers", - "Giant stargazer", - "Stargazers nei", - "Slender stargazer", - "Estuary stargazer", - "Pacific sandfish", - "Japanese sandfish", - "Throat-spine gudgeon", - "Barred gudgeon", - "Duckbill sleeper", - "Tailface sleeper", - "Pacific fat sleeper", - "Fat sleeper", - "Dusky sleeper", - "Spotted sleeper", - "Emerald sleeper", - "Graham's gudgeon", - "Slender gudgeon", - "Mitchell gudgeon", - "Cave gudgeon", - "Snakehead gudgeon", - "Mud sleeper", - "Peacock gudgeon", - "Upland bully", - "Bigmouth sleeper", - "Marble goby", - "Fimbriate gudgeon", - "Sleepy cod", - "Gudgeons, sleepers nei", - "Blotchcheek goby", - "Tropical sand goby", - "Day's goby", - "Black goby", - "Rock goby", - "Red-mouthed goby", - "Giant goby", - "Bellotti's goby", - "Bucchich's goby", - "Sarato's goby", - "Slender goby", - "Roule's goby", - "Striped goby", - "Golden goby", - "Atlantic gobies nei", - "Transparent goby", - "West African freshwater goby", - "Frillfin goby", - "Dusky frillgoby", - "Pinkbar goby", - "Diagonal shrimp goby", - "Downing's shrimpgoby", - "Periophthalma prawn-goby", - "Triplespot shrimpgoby", - "Butterfly goby", - "Nocturn goby", - "Sleepy goby", - "Tank goby", - "Tusk goby", - "Walking goby", - "Indian O. slender mudskipper", - "Taileyed goby", - "Common goby", - "Sand goby", - "Balboa goby", - "Lyre goby", - "Blackfin goby", - "Biringo", - "Ninebar prawn-goby", - "Luther's prawn-goby", - "Slow goby", - "Longjaw mudsucker", - "Coralline goby", - "Guillet's goby", - "Crystal goby", - "Frogface goby", - "Eyebrow goby", - "Arrow goby", - "Miller's damsel", - "Starry goby", - "Small-eyed goby", - "Leopard dwarfgoby", - "Barbulifer", - "Sponge goby", - "Round goby", - "Barfin goby", - "Amur goby", - "Naked goby", - "Great blue spotted mudskipper", - "White-eye goby", - "Doublebar goby", - "Feather goby", - "Large whip goby", - "Whip coral goby", - "De Buen's goby", - "Chestnut goby", - "Grass goby", - "Agulhas goby", - "Adamson's goby", - "Anomolous goby", - "Onespot goby", - "Burrowing goby", - "Arabian goby", - "Gold-streaked prawn-goby", - "Comb goby", - "Four-spotted goby", - "Spikefin goby", - "Spotback goby", - "Cable's goby", - "Tidewater goby", - "Mud reef-goby", - "Barenape goby", - "Nineline goby", - "Gladiator goby", - "Poison goby", - "Reticulate goby", - "Rippled coralgoby", - "Checkered goby", - "Longjaw goby", - "Two-spotted goby", - "Crescent goby", - "Splitbanded goby", - "Poreless goby", - "Bumblebee fish", - "Cheekspot goby", - "Decorated goby", - "Ornate goby", - "Cardinal goby", - "Bay goby", - "Fries's goby", - "Halfblind goby", - "Oman goby", - "Whitecap goby", - "Largetooth goby", - "Flagfin prawn goby", - "Knout goby", - "Orangespotted goby", - "Sharptail goby", - "Hole goby", - "Spinecheek goby", - "Mauve goby", - "Meteor goby", - "Blackthroat goby", - "Redhead goby", - "Emerald coral goby", - "Barred mudskipper", - "Atlantic mudskipper", - "Walton's mudskipper", - "Scalynape goby", - "Girdled goby", - "Randall's goby", - "Tubenose goby", - "Secret goby", - "Bichique", - "Stimpson's goby", - "Twinspot goby", - "Grotto goby", - "Beaufort's goby", - "Eel worm goby", - "Tusked goby", - "Lord's goby", - "Fan shrimp-goby", - "Okinawa rubble goby", - "Winterbottom's goby", - "Red-barred rubble goby", - "Blind goby", - "Sixspot goby ", - "Ambanoro prawn-goby", - "Orangebelly goby", - "Cameroon goby", - "Slender mudskipper", - "Freshwater gobies nei", - "Gobies nei", - "Loach goby", - "Pugjaw wormfish", - "Curious wormfish", - "Yellowstripe wormfish", - "Elegant firefish", - "Fire goby", - "Rao's hover goby", - "Blue gudgeon", - "Wormfishes nei", - "Flathead wriggler", - "Chinese sleeper", - "Yellow tang", - "Sailfin tang", - "Twotone tang", - "Yellowtail tang", - "Spotted tang", - "Ocean surgeon", - "Blue tang surgeonfish", - "Black-spot surgeonfish", - "Orangespot surgeonfish", - "Doctorfish", - "Convict surgeonfish", - "Monrovia doctorfish", - "Lined surgeonfish", - "Brown surgeonfish", - "Black surgeonfish", - "Sohal surgeonfish", - "Ringtail surgeonfish", - "Elongate surgeonfish", - "Powderblue surgeonfish", - "Orangespine unicornfish", - "Bluespine unicornfish", - "Spotted unicornfish", - "Palette surgeonfish", - "Twospot surgeonfish", - "Striated surgeonfish", - "Biafra doctorfish", - "Surgeonfishes nei", - "Threadfin scat", - "Ninespine batfish", - "Orbfish", - "Panama spadefish", - "Orbicular batfish", - "Longfin batfish", - "Dusky batfish", - "Batfishes", - "African spadefish", - "Atlantic spadefish", - "Pacific spadefish", - "West African spadefish", - "Spadefishes nei", - "Spotted scat", - "Scats", - "Streamlined spinefoot", - "Blue-spotted spinefoot", - "Barred spinefoot", - "Mottled spinefoot", - "Streaked spinefoot", - "Marbled spinefoot", - "Labyrinth spinefoot", - "White-spotted spinefoot", - "Goldlined spinefoot", - "Golden-lined spinefoot", - "Dusky spinefoot", - "Magnificent rabbitfish", - "Black foxface", - "Blackeye rabbitfish", - "Masked spinefoot", - "Peppered spinefoot", - "Goldspotted spinefoot", - "Variegated spinefoot", - "Little spinefoot", - "Brown-spotted spinefoot", - "Shoemaker spinefoot", - "Threeblotched rabbitfish", - "Blotched foxface", - "Bicolored foxface", - "Vermiculated spinefoot", - "Barhead spinefoot", - "Foxface", - "Spinefeet(=Rabbitfishes) nei", - "Luvar", - "Moorish idol", - "Atlantic bonito", - "Striped bonito", - "Eastern Pacific bonito", - "Australian bonito", - "Bonitos nei", - "Chub mackerel", - "Atlantic mackerel", - "Blue mackerel", - "Scomber mackerels nei", - "Plain bonito", - "Wahoo", - "Dogtooth tuna", - "Short mackerel", - "Indian mackerel", - "Island mackerel", - "Indian mackerels nei", - "Chinese seerfish", - "Narrow-barred Spanish mackerel", - "Indo-Pacific king mackerel", - "Streaked seerfish", - "King mackerel", - "Atlantic Spanish mackerel", - "Cero", - "Pacific sierra", - "Queensland school mackerel", - "West African Spanish mackerel", - "Japanese Spanish mackerel", - "Broad-barred king mackerel", - "Serra Spanish mackerel", - "Korean seerfish", - "Monterey Spanish mackerel", - "Papuan seerfish", - "Kanadi kingfish", - "Australian spotted mackerel", - "Seerfishes nei", - "Butterfly kingfish", - "Leaping bonito", - "Shark mackerel", - "Double-lined mackerel", - "Frigate tuna", - "Bullet tuna", - "Frigate and bullet tunas", - "Little tunny(=Atl.black skipj)", - "Black skipjack", - "Kawakawa", - "Skipjack tuna", - "Atlantic bluefin tuna", - "Pacific bluefin tuna", - "Longtail tuna", - "Blackfin tuna", - "Albacore", - "Southern bluefin tuna", - "Yellowfin tuna", - "Bigeye tuna", - "True tunas nei", - "Slender tuna", - "Mackerels nei", - "Tunas nei", - "Indo-Pacific sailfish", - "Atlantic sailfish", - "Blue marlin", - "Black marlin", - "Mediterranean spearfish", - "Striped marlin", - "Atlantic white marlin", - "Shortbill spearfish", - "Longbill spearfish", - "Roundscale spearfish", - "Spearfishes nei", - "Marlins, sailfishes, etc. nei", - "Swordfish", - "Snoek", - "White snake mackerel", - "Striped escolar", - "American sackfish", - "Sackfish", - "Escolar", - "Black gemfish", - "Oilfish", - "Slender escolar", - "Antarctic escolar", - "Silver gemfish", - "Long-finned escolar", - "Royal escolar", - "Bengal escolar", - "Short-lined escolar", - "Nakamura's escolar", - "Paxton's escolar", - "Black snoek", - "Domine", - "Tonga escolar", - "Black snake mackerel", - "Roudi escolar", - "Snake mackerel", - "Snake mackerels, escolars nei", - "Razorback scabbardfish", - "Elongate frostfish", - "Bigeye frostfish", - "Slender frostfish", - "Frostfishes", - "Largehead hairtail", - "Pearly hairtail", - "Hairtails nei", - "Poey's scabbardfish", - "Silver scabbardfish", - "Pacific scabbardfish", - "Doubtful scabbardfish", - "Coromandel hairtail", - "Savalai hairtail", - "Black scabbardfish", - "Intermediate scabbardfish", - "Crested hairtail", - "Smallhead hairtail", - "Longtooth hairtail", - "Hairtails, scabbardfishes nei", - "Tuna-like fishes nei", - "Smalleye squaretail", - "Squaretails nei", - "Blue butterfish", - "Southwest Atlantic butterfish", - "Starry butterfish", - "Butterfishes nei", - "Silver pomfret", - "Chinese silver pomfret", - "Silver pomfrets nei", - "American harvestfish", - "Atlantic butterfish", - "Pacific pompano", - "Pacific harvestfish", - "Salema butterfish", - "Gulf butterfishes, etc. nei", - "Butterfishes, pomfrets nei", - "Indian driftfish", - "Silver-rag driftfish", - "Brown driftfish", - "Ariommatids nei", - "Climbing perch", - "Tailspot ctenopoma", - "Rocky kurper", - "Driftfish", - "Black fathead", - "Blue fathead", - "Cape fathead", - "Bigeye cigarfish", - "Shadow driftfish", - "Man-of-war fish", - "Freckled driftfish", - "Driftfishes nei", - "Rudderfish", - "Southern driftfish", - "New Zealand ruffe", - "Imperial blackfish", - "Violet warehou", - "Pemarco blackfish", - "Pelagic butterfish", - "Cornish blackfish", - "Schedophilus nei", - "Tasmanian ruffe", - "Choicy ruff", - "Common warehou", - "Palm ruff", - "Silver warehou", - "White warehou", - "Warehou nei", - "Bluenose warehou", - "Black driftfish", - "Barrelfish", - "Pacific rudderfish", - "Ruffs, barrelfishes nei", - "Giant gourami", - "Malay combtail", - "Banded gourami", - "Frail gourami", - "Siamese fighting fish", - "Spotted gourami", - "Eyespot gourami", - "Spiketail paradisefish", - "Snakeskin gourami", - "Three spot gourami", - "Gouramis nei", - "Pygmy gourami", - "Roundtail paradisefish", - "Kissing gourami", - "Pikehead", - "European barracuda", - "Sharpfin barracuda", - "Pickhandle barracuda", - "Obtuse barracuda", - "Pacific barracuda", - "Great barracuda", - "Mexican barracuda", - "Guachanche barracuda", - "Pelican barracuda", - "Southern sennet", - "Heller's barracuda", - "Yellowstripe barracuda", - "Guinean barracuda", - "Blackfin barracuda", - "Yellowtail barracuda", - "Bigeye barracuda", - "Yellowmouth barracuda", - "Barracudas nei", - "Barracudas, etc. nei", - "Bigeye stargazer", - "Sandy stargazer", - "Smoothlip stargazer", - "Sailfin stargazer", - "Tasselled triplefin", - "Carmine triplefin", - "Mottled twister", - "Giant triplefin", - "Southern barred triplefin", - "Spotted spiny-eye triplefin", - "Lizard triplefin", - "Cryptic triplefin", - "Lofty triplefin", - "Yellow triplefin", - "Highcrest triplefin", - "Blotched triplefin", - "Chatham deep-water triplefin", - "Obscure triplefin", - "Japanese blacktail triplefin", - "Spotted robust triplefin", - "Scaly headed triplefin", - "Eastern jumping blenny", - "Twinspot triplefin", - "Tropical scaly-headed triplefi", - "Blue-dot triplefin", - "Oblique-swimming triplefin", - "Longfinned triplefin", - "Bullhead triplefin", - "Clarke's triplefin", - "Black-faced blenny", - "Largemouth triplefin", - "Threefin blennies nei", - "Lace klipfish", - "Snaky klipfish", - "Slender platanna-klipfish", - "Cline", - "Ladder klipfish", - "Sad klipfish", - "Golden weedfish", - "Orange clinid", - "Mousey klipfish", - "Spotted kelpfish", - "Nosestripe klipfish", - "Grass klipfish", - "Leafy klipfish", - "Platanna klipfish", - "Clinids fishes nei", - "Dwarf blenny", - "Kirk's blenny", - "Aden blenny", - "Horned rockskipper", - "Arabian blenny", - "Simony's blenny", - "Orangedotted blenny", - "Butterfly blenny", - "Lance blenny", - "Giant blenny", - "Looseskin blenny", - "Striped blenny", - "Filamentous blenny", - "Montagu's blenny", - "Tripplespot blenny", - "Fourline blenny", - "Black blenny", - "Leopard blenny", - "Jugular blenny", - "Highbrow rockskipper", - "Oyster blenny", - "Barnaclebill blenny", - "Imspringer", - "Rippled rockskipper", - "Lined rockskipper", - "Scarface rockskipper", - "Spotted rockskipper", - "Spotty blenny", - "Fowler's rockskipper", - "Mangrove blenny", - "Fringed blenny", - "Pygmy blenny", - "Oman blenny", - "Arab blenny", - "Mekran blenny", - "Muzzled blenny", - "Omox blenny", - "Rock-pool blenny", - "Tentacled blenny", - "Cheekspot blenny", - "Tasseled blenny", - "Ambon rockskipper", - "Hepburn's blenny", - "Arabian fangblenny", - "Floral blenny", - "Variable sabretooth blenny", - "Sabertooth blenny", - "Townsend's fangblenny", - "Natal rockskipper", - "Barred-chin blenny", - "Jewelled blenny", - "Molly miller", - "Seychelle's blenny", - "Japanese snake blenny", - "Hairtail blenny", - "Combtooth blennies", - "Ragfish", - "Nurseryfish", - "Snakehead", - "Spotted snakehead", - "Striped snakehead", - "Indonesian snakehead", - "Barca snakehead", - "Blotched snakehead", - "Small snakehead", - "Snakeheads(=Murrels) nei", - "Tentacled dragonet", - "Dragonet", - "Indian deepwater dragonet", - "Smallhead dragonet", - "Blotchfin dragonet", - "Margaret's dragonet", - "Sand dragonet", - "Arrow dragonet", - "Fingered dragonet", - "Pygmy dragonet", - "Dainty dragonet", - "Shango dragonet", - "Common stinkfish", - "Japanese dragonet", - "Ladder dragonet", - "Lancer dragonet", - "Spotted stinkfish", - "Spotfin dragonet", - "Phaeton dragonet", - "Dragonets nei", - "Island kelpfish", - "Deep-water blenny", - "Galápagos four-eyed blenny", - "Foureye rockskipper", - "Sargassum blenny", - "Palehead blenny", - "Hairy blenny", - "Threadfin blenny", - "Mexican blenny", - "Redrump blenny", - "Roughhead blenny", - "Spinyhead blenny", - "Orangethroat pikeblenny", - "Angel blenny", - "Reefsand blenny", - "Banner blenny", - "Blackhead blenny", - "Wrasse blenny", - "Arrow blenny", - "Tufted blenny", - "Sarcastic fringehead", - "Warthead blenny", - "Panamanian worm blenny", - "Slender blenny", - "Longfin escolar", - "Carolina pygmy sunfish", - "Golden redfish", - "Norway redfish", - "Widow rockfish", - "Yellowtail rockfish", - "Treefish", - "Rosy rockfish", - "Olive rockfish", - "Blue rockfish", - "Pacific ocean perch", - "Bocaccio rockfish", - "Vermilion rockfish", - "Beaked redfish", - "Cape redfish", - "Acadian redfish", - "Canary rockfish", - "Chilipepper rockfish", - "Starry rockfish", - "Rougheye rockfish", - "Shortraker rockfish", - "Copper rockfish", - "Splitnose rockfish", - "Greenstriped rockfish", - "Shortbelly rockfish", - "Quillback rockfish", - "Korean rockfish", - "Yellowmouth rockfish", - "Silvergray rockfish", - "Black rockfish", - "Tiger rockfish", - "Redstripe rockfish", - "Yelloweye rockfish", - "Pygmy rockfish", - "Dusky rockfish", - "Stripetail rockfish", - "Harlequin rockfish", - "Northern rockfish", - "China rockfish", - "Rosethorn rockfish", - "Redbanded rockfish", - "Aurora rockfish", - "Sharpchin rockfish", - "Blackgill rockfish", - "Darkblotched rockfish", - "Patagonian redfish", - "Atlantic redfishes nei", - "Decoy scorpionfish", - "Black scorpionfish", - "Red scorpionfish", - "Barbfish", - "Plumed scorpionfish", - "California scorpionfish", - "Player scorpionfish", - "Pacific spotted scorpionfish", - "Sonora scorpionfish", - "Senegalese rockfish", - "Small red scorpionfish", - "Angola rockfish", - "Slender rockfish", - "Madeira rockfish", - "Spotted-fin rockfish", - "Scorpionfishes, rockfishes nei", - "Blackfoot firefish", - "Blackbelly rosefish", - "Red gurnard perch", - "Rosefishes nei", - "Ghanean rockfish", - "Offshore rockfish", - "Large-headed scorpionfish", - "Speckled scorpionfish", - "Lowfin scorpionfish", - "African spotted scorpionfish", - "Jenkin's scorpionfish", - "Humpbacked scorpionfish", - "Weedy stingfish", - "Bearded scorpionfish", - "Whiteblotched scorpionfish", - "Raggy scorpionfish", - "Spotfin scorpionfish", - "Leaf scorpionfish", - "Plaintail turkeyfish", - "Red lionfish", - "Broadbarred firefish", - "Radial firefish", - "Hawaiian turkeyfish", - "Devil firefish", - "Zebra turkeyfish", - "Twospot turkeyfish", - "Shortfin turkeyfish", - "Hawaiian lionfish", - "Shortspine thornyhead", - "Longspine thornyhead", - "Broadbanded thornyhead", - "Cape scorpionfish", - "Atlantic thornyhead", - "Spiny scorpionfish", - "Orange-banded scorpionfish", - "Channeled rockfish", - "Scorpionfishes nei", - "Shortfin searobin", - "Piper gurnard", - "Gurnards nei", - "Bluefin gurnard", - "Tub gurnard", - "Streaked gurnard", - "Cape gurnard", - "Gabon gurnard", - "Spiny red gurnard", - "Longfin gurnard", - "Lesser gurnard", - "Indo-Pacific gurnards", - "Red gurnard", - "Scaly gurnard", - "Butterfly gurnard", - "Carol's gurnard", - "Spiny gurnard", - "Large-scaled gurnard", - "Scalebreast gurnard", - "Bullhorn gurnard", - "Scalybreast gurnard", - "Spiny searobin", - "Bluewing searobin", - "Red searobin", - "Mexican searobin", - "Northern searobin", - "Atlantic searobins", - "Latchet(=Sharpbeak gurnard)", - "Spotted gurnard", - "Grey gurnard", - "Gurnards, searobins nei", - "Spotted coral croucher", - "Threefin velvetfish", - "Crested scorpionfish", - "Pitted stonefish", - "Onestick stingfish", - "Obliquebanded stingfish", - "Grey stingfish", - "Blackfin stonefish", - "Red Sea stonefish", - "Stonefish", - "Orangebanded stingfish", - "Warty prowfish", - "Whiskered prowfish", - "Lingcod", - "Okhotsk atka mackerel", - "Atka mackerel", - "Kelp greenling", - "Skilfish", - "Sablefish", - "Crocodile fish", - "Dwarf flathead", - "Spotfin flathead", - "Rough flathead", - "Japanese flathead", - "Spiny flathead", - "Tentacled flathead", - "Bartail flathead", - "Northern sand flathead", - "Sand flathead", - "Tiger flathead", - "Deep-water flathead", - "Broadhead flathead", - "Celebes flathead", - "Orange-freckled flathead", - "Welander's flathead", - "Blackblotch flathead", - "Thorny flathead", - "Halfspined flathead", - "Tuberculated flathead", - "Crocodile flathead", - "Guinea flathead", - "Flatheads nei", - "Antarctic horsefish", - "Alert pigfish", - "Scaled sculpin", - "Coralline sculpin", - "Rosylip sculpin", - "Spinynose sculpin", - "Sakhalin sculpin", - "Cherskii's sculpin", - "Longhorn sculpin", - "Plain sculpin", - "Shorthorn sculpin", - "Sculpins", - "Fluffy sculpin", - "Roughback sculpin", - "Buffalo sculpin", - "Yellow Irish lord", - "Dusky sculpin", - "Cabezon", - "Sharpnose sculpin", - "Lavender sculpin", - "Pacific staghorn sculpin", - "Belligerent sculpin", - "Scissortail sculpin", - "Jordan's sculpin", - "Moustache sculpin", - "Bigeye sculpin", - "Spectacled sculpin", - "Norway bullhead", - "Twohorn sculpin", - "Brightbelly sculpin", - "Snubnose sculpin", - "Thornback sculpin", - "Spineless sculpin", - "Smoothgum sculpin", - "Puget Sound sculpin", - "Kelp sculpin", - "Roughskin sculpin", - "Fourhorn sculpin", - "Longfin sculpin", - "Manacled sculpin", - "Grunt sculpin", - "Sculpins nei", - "Bighead sculpin", - "Stone sculpin", - "Baikal yellowfin", - "Big Baikal oilfish", - "Mote sculpin", - "Polar sculpin", - "Spinyhead sculpin", - "Smoothcheek sculpin", - "Pale toadfish", - "Northern spearnose poacher", - "Smooth alligatorfish", - "Aleutian alligatorfish", - "Gray starsnout", - "Rockhead", - "Fourhorn poacher", - "Atlantic poacher", - "Pygmy poacher", - "Tubenose poacher", - "Sawback poacher", - "Arctic alligatorfish", - "Blacktip poacher", - "Hooknose", - "Pricklebreast poacher", - "Lumpfish(=Lumpsucker)", - "Leatherfin lumpsucker", - "Smooth lumpsucker", - "Lumpfishes nei", - "Redskinfish", - "Fortescue", - "Marbled stingfish", - "South Australian cobbler", - "Bullrout", - "Wispy waspfish", - "Whiteface waspfish", - "Günther's waspfish", - "Bearded roguefish", - "Draco waspfish", - "African armoured searobin", - "Armoured gurnard", - "Robust armoured-gurnard", - "Spiny snailfish", - "Blacktail snailfish", - "Blotched snailfish", - "Spotted snailfish", - "Gulf snailfish", - "Variegated snailfish", - "Striped seasnail", - "Montagus seasnail", - "Kelp snailfish", - "Tanaka's snailfish", - "Pygmy snailfish", - "Tadpole snailfish", - "Bigtail snailfish", - "Slim snailfish", - "Snailfishes nei", - "Oriental flying gurnard", - "Flying gurnard", - "Flying gurnards nei", - "Red velvetfish", - "Short-armed waspfish", - "Ocellated waspfish", - "Painted greenling", - "Shortspine combfish", - "Short-headed sculpin", - "Crested sculpin", - "Sailfin sculpin", - "Mediterranean scaldfish", - "Imperial scaldfish", - "Thor's scaldfish", - "Cape scaldfish", - "Scaldback", - "Spotless lefteye flounder", - "Drab flounder", - "Scaldfishes nei", - "Angler flatfish", - "Blue flounder", - "Speckled-tail flounder", - "Wide-mouthed flounder", - "Crested flounder", - "Crosseyed flounder", - "Striped-fin flounder", - "Caribbean flounder", - "Wide-eyed flounder", - "Pacific eyed flounder", - "Mottled flounder", - "Leopard flounder", - "Eyed flounder", - "Pelican flounder", - "Slim flounder", - "Martens’ moonflounder", - "Largescale flounder", - "Clear fin-base flounder", - "Günther's flounder", - "Threespot flounder", - "Lefteye flounders nei", - "Scale-eye plaice", - "Atlantic halibut", - "Pacific halibut", - "Banded-fin flounder", - "European plaice", - "Arctic flounder", - "Alaska plaice", - "Cresthead flounder", - "English sole", - "Greenland halibut", - "Rikuzen flounder", - "Deep-sea sole", - "Arrow-tooth flounder", - "Kamchatka flounder", - "Petrale sole", - "Shotted halibut", - "Witch flounder", - "Rex sole", - "Willowy flounder", - "Comb flounder", - "Amer. plaice(=Long rough dab)", - "Flathead flounder", - "Flathead sole", - "Narrow-body righteye flounder", - "Peppered flounder", - "Southern lemon sole", - "Speckled sole", - "New Zealand sole", - "Tudor's flounder", - "Longsnout flounder", - "Yellowfin sole", - "Yellowtail flounder", - "Common dab", - "Longhead dab", - "Sakhalin sole", - "Limandas nei", - "Rock sole", - "Dusky sole", - "Slender sole", - "Slime flounder", - "Dover sole", - "Lemon sole", - "Derwent flounder", - "European flounder", - "Stone flounder", - "Starry flounder", - "Pacific sand sole", - "Yellow striped flounder", - "Winter flounder", - "Marbled flounder", - "Remo flounder", - "Sand flounder", - "Greenback flounder", - "Yellowbelly flounder", - "Sand flounders nei", - "Barfin flounder", - "Spotted halibut", - "Ridged-eye flounder", - "Curlfin sole", - "Hornyhead turbot", - "C-O sole", - "Diamond turbot", - "Sôhachi", - "Butter sole", - "Coloured righteye flounder", - "Righteye flounders nei", - "Black sole", - "Deep water sole", - "Solenette", - "Tufted sole", - "Common sole", - "Sand sole", - "Ovate sole", - "Senegalese sole", - "Blackhand sole", - "Adriatic sole", - "Snouted sole", - "Egyptian sole", - "Elongate sole", - "Stanaland's sole", - "Dwarf sole", - "Spotted sole", - "Wavyband sole", - "Wedge sole", - "Ocellated wedge sole", - "Whiskered sole", - "African solenette", - "Peacock sole", - "Finless sole", - "Zebra sole", - "Fringefin zebra sole", - "Convict zebra sole", - "Indian zebra sole", - "Unicorn sole", - "Bamboo sole", - "Cape sole", - "True sole", - "Narrowbanded sole", - "Commerson's sole", - "White-margined sole", - "Portuguese sole", - "Guinean sole", - "West coast sole", - "Mud sole", - "Southeast Atlantic soles nei", - "Foureyed sole", - "Thickback sole", - "Bastard sole", - "Lusitanian sole", - "Frechkop’s sole", - "Banded sole", - "Thickback soles nei", - "Oriental sole", - "Klein's sole", - "Cyclope sole", - "Soles nei", - "Fourlined tonguesole", - "Carrot tonguesole", - "Long tongue sole", - "Bengal tongue sole", - "Speckled tonguesole", - "Genko sole", - "Largescale tonguesole", - "Bengal toungesole", - "Red tonguesole", - "Malabar tonguesole", - "Canary tonguesole", - "Three-lined tounge sole", - "Senegalese tonguesole", - "Roughscale tonguesole", - "Zanzibar tonguesole", - "Nigerian tonguesole", - "Ghanian tonguesole", - "Guinean tonguesole", - "Tonguesole nei", - "Doublelined tonguesole", - "Blackbelly tonguesole", - "California tonguefish", - "Duskycheek tonguefish", - "Ginsburg's tonguefish", - "Elongate tonguesole", - "Blackcheek tonguefish", - "Vanmelle’s tonguefish", - "Tonguefishes", - "Norwegian topknot", - "Megrim", - "Four-spot megrim", - "Megrims nei", - "Topknot", - "Brill", - "Windowpane flounder", - "Turbot", - "Turbots nei", - "Spotted flounder", - "Yellow-dabbled flounder", - "Branched ray flounder", - "Twospot largescale flounder", - "Scale-eyed flounder", - "Citharids nei", - "Indian halibut", - "Spottail spiny turbot", - "Spiny turbot", - "Spiny turbots nei", - "Cyclope flounder", - "Three-spot flounder", - "Shrimp flounder", - "Fantail flounder", - "Bigmouth sanddab", - "Pacific sanddab", - "Speckled sanddab", - "Smooth flounder", - "Gulf Stream flounder", - "Sand whiff", - "Anglefin whiff", - "Bay whiff", - "Toothed flounder", - "God's flounder", - "Mexican flounder", - "Fringed flounder", - "Peruvian flounder", - "Smallmouth flounder", - "Bigeye flounder", - "Bigmouth flounder", - "Bastard halibut", - "Brazilian flounder", - "California flounder", - "Speckled flounder", - "Summer flounder", - "Fourspot flounder", - "Gulf flounder", - "Southern flounder", - "Fine flounder", - "Patagonian flounder", - "Bastard halibuts nei", - "Deep flounder", - "Roughscale flounder", - "Largetooth flounder", - "Javan flounder", - "Cinnamon flounder", - "Fivespot flounder", - "Three spotted flounder", - "Malayan flounder", - "Shoal flounder", - "Beach flounder", - "Channel flounder", - "Dusky flounder", - "Papillose flounder", - "Drab sole", - "Lined sole", - "Mazatlan sole", - "Hogchoker", - "Longtail sole", - "Antarctic armless flounder", - "Finless flounder", - "Tongue flatfish", - "Cockatoo righteye flounder", - "Huysman's righteye flounder", - "Flatfishes nei", - "Yellow boxfish", - "Bluetail trunkfish", - "Striped cowfish", - "Western smooth boxfish", - "Buffalo trunkfish", - "Smooth trunkfish", - "Rigid boxfish", - "Black-banded pigmy boxfish", - "Longhorn cowfish", - "Scrawled cowfish", - "Honeycomb cowfish", - "Chubby basketfish", - "Triangular boxfish", - "Humpback turretfish", - "Boxfishes nei", - "Evileye blaasop", - "Smooth puffer", - "Diamondback puffer", - "Oceanic puffer", - "Silver-cheeked toadfish", - "Lunartail puffer", - "Smooth blaasop", - "Half-smooth golden pufferfish", - "Bullseye puffer", - "Blunthead puffer", - "Checkered puffer", - "Northern puffer", - "Bandtail puffer", - "Atlantic puffers nei", - "Prickly puffer", - "Milkspotted puffer", - "Purple pufferfish", - "Tiger pufferfish", - "Obscure pufferfish", - "Yellowfin pufferfish", - "Yellowbelly pufferfish", - "Pufferfishes nei", - "Banded puffer", - "Spider-eye puffer", - "Valentin's sharpnose puffer", - "Starry toado", - "White-spotted puffer", - "Map puffer", - "Guineafowl puffer", - "Blackspotted puffer", - "Stellate puffer", - "Immaculate puffer", - "Prickly toadfish", - "Manystriped blowfish", - "Spotted puffer", - "Ringed toadfish", - "Rippled blaasop", - "Orange-spotted toadfish", - "Spiny blaasop", - "Puffers nei", - "Spotbase burrfish", - "Birdbeak burrfish", - "Hooked tonguesole", - "Shortheaded tonguesole", - "Lachner's tonguesole", - "Pacific burrfish", - "Spot-fin porcupinefish", - "Longspined porcupinefish", - "Black-blotched porcupinefish", - "Three-barred porcupinefish", - "Four-bar porcupinefish", - "Longspine burrfish", - "Deep-water burrfish", - "Globefish, porcupine fish", - "Reticulate spikefish", - "Trumpetsnout spikefish", - "Jambeau", - "Fleshy-lipped spikefish", - "Long-spined tripodfish", - "Short-nosed tripodfish", - "Black-flag tripodfish", - "Blacktip tripodfish", - "Threetooth puffer", - "Slender sunfish", - "Ocean sunfish", - "Sunfish", - "Sharptail mola", - "Ocean sunfishes nei", - "Broom filefish", - "Scribbled leatherjac. filefish", - "Unicorn leatherjacket filefish", - "Dotterel filefish", - "Orange filefish", - "Leatherjacket filefishes", - "Sandwich isle file", - "Whitespotted filefish ", - "Filefishes nei", - "Spiny-tailed leatherjacket", - "Pigmy leatherjacket", - "Bearded leatherjacket", - "Large-scaled leatherjacket", - "Prickly leatherjacket", - "Threadsail filefish", - "Planehead filefish", - "Reticulated leatherjacket", - "Black reef leatherjacket", - "Fan-bellied leatherjacket", - "Chinaman-leatherjacket", - "Red Sea longnose filefish", - "False puffer", - "Wedgetail filefish", - "Gulf filefish", - "Pig faced leather jacket", - "Hair-finned filefish", - "Velvet leatherjacket", - "Toothbrush leatherjacket", - "Yelloweye filefish", - "Rhinoceros leatherjacket", - "Fourband leatherjacket", - "Whitespotted pygmy filefish", - "Rough leatherjackets", - "Modest filefish", - "Lesser-spotted leatherjacket", - "Filefishes, leatherjackets nei", - "Orange-lined triggerfish", - "Grey triggerfish", - "Queen triggerfish", - "Finescale triggerfish", - "Bluespotted triggerfish", - "Clown triggerfish", - "Titan triggerfish", - "Largescale triggerfish", - "Rough triggerfish", - "Ocean triggerfish", - "Indian triggerfish", - "Black triggerfish", - "Red-toothed triggerfish", - "Yellowmargin triggerfish", - "White-banded triggerfish", - "Picasso triggerfish", - "Bluethroat triggerfish", - "Halfmoon triggerfish", - "Masked triggerfish", - "Gilded triggerfish", - "Outrigger triggerfish", - "Starry triggerfish", - "Triggerfishes, durgons nei", - "Emerald clingfish", - "Connemarra clingfish", - "Shore clingfish", - "Cornish sucker", - "Panamic clingfish", - "Small-headed clingfish", - "Chubby clingfish", - "Elegant clingfish", - "Rocksucker", - "Urchin clingfish", - "Two-spotted clingfish", - "Orange clingfish", - "Crinoid clingfish", - "Weedsucker", - "Slender clingfish", - "Hector's clingfish", - "Pygmy shore-eel", - "Giant clingfish", - "Papillate clingfish", - "Minute clingfish", - "Streaky clingfish", - "Southern clingfish", - "Bifid clingfish", - "Striped clingfish", - "Clingfishes nei", - "Bocon toadfish", - "Hairy toadfish", - "Pacuma toadfish", - "Toadfishes nei", - "Flat toadfish", - "Western frogfish", - "Lusitanian toadfish", - "White-ribbed toadfish", - "Two-faced toadfish", - "Pony toadfish", - "Dow's toadfish", - "Banded frogfish", - "Gulf toadfish", - "Guinean toadfish", - "Rossignol’s toadfish", - "Broadbodied toadfish", - "Cano toadfish", - "Grunting toadfish", - "Toadfishes, etc. nei", - "Angler(=Monk)", - "Blackbellied angler", - "American angler", - "Shortspine African angler", - "Devil anglerfish", - "Blackfin goosefish", - "Yellow goosefish", - "Monkfishes nei", - "Blackmouth angler", - "Spottedtail angler", - "Longspine African angler", - "Smooth angler", - "Natal angler", - "Anglerfishes nei", - "Glauert's anglerfish", - "Spotfin frogfish", - "Tailjet frogfish", - "Striated frogfish", - "Indian frogfish", - "Shaggy angler", - "Sargassumfish", - "Prickly anglerfish", - "Rough anglerfish", - "Marble-mouthed frogfish", - "Deep-water frogfish", - "Smooth anglerfish", - "Tasselled anglerfish", - "Butler's frogfish", - "Frogfishes nei", - "Pink frogmouth", - "Spiny sea bat", - "Batfish", - "Pancake batfish", - "Longnose batfish", - "Roundel batfish", - "Humpback anglerfish", - "Black seadevils nei", - "Smooth dreamer", - "Spiny dreamer", - "Dreamers nei", - "Triplewart seadevil", - "Kroyer's deep-sea angler fish", - "Horned lantern fish", - "Freshwater fishes nei", - "Groundfishes nei", - "Pelagic fishes nei", - "Finfishes nei", - "Marine fishes nei", - "Demersal percomorphs nei", - "Pelagic percomorphs nei", - "Diadromous fishes nei", - "Batoid fishes nei", - "Various sharks nei", - "Sharks, rays, skates, etc. nei", - "Cartilaginous fishes nei", - "Deep-water sharks nei", - "Water fleas", - "Brine shrimp", - "Brine shrimps nei", - "Copepods", - "Acorn barnacle", - "Scalpellidae barnacles nei", - "Goose barnacle", - "Goose barnacles nei", - "Lepadidae barnacles nei", - "Giant barnacle", - "Barnacle", - "Pacific goose barnacle", - "Leaf barnacle", - "Tanaidaceans", - "Fish biter", - "Spiny serolid isopod", - "Isopods, pillbugs, sowbugs", - "Amphipods", - "Rough mantis shrimp", - "Spottail mantis squillid", - "Kicking mantis shrimp", - "Sorcerer mantis shrimp", - "Catalina mantis", - "Bigelow mantis shrimp", - "Panama mantis shrimp", - "Small mantis shrimp", - "Angolan mantis srimp", - "Japanese squillid mantis shrim", - "Spotted squillid mantis shrimp", - "Mud mantis", - "Smooth squillid mantis shrimp", - "Red sea mantis shrimp", - "Smalleyed squillid mantis shri", - "Vietnamese squillid mantis shr", - "Fivespined squillid mantis shr", - "Common squillid mantis shrimp", - "Variable squillid mantis shrim", - "Squillids nei", - "Reef odontoactylid mantis shri", - "Pastel odontodactylid mantis s", - "Queen lizard mantis", - "Striped mantis", - "Lizard mantis", - "Smooth mantis shrimp", - "Common banded mantis shrimp", - "Robber harpiosquillid mantis s", - "Giant harpiosquillid mantis sh", - "Keeled witch mantis", - "Three spined mantis", - "Stomatopods nei", - "Antarctic krill", - "Ice krill", - "Pygmy krill", - "Spiny krill", - "Northern krill", - "Isada krill", - "Antarctic krill nei", - "Bigeye krill", - "Norwegian krill", - "Northern brown shrimp", - "Banana prawn", - "Yellowleg shrimp", - "Northern pink shrimp", - "Southern white shrimp", - "Kuruma prawn", - "Blue shrimp", - "Whiteleg shrimp", - "Giant tiger prawn", - "Eastern king prawn", - "Fleshy prawn", - "Caramote prawn", - "Aloha prawn", - "Redspotted shrimp", - "Green tiger prawn", - "Brown tiger prawn", - "Northern white shrimp", - "Crystal shrimp", - "Indian white prawn", - "Western king prawn", - "Western white shrimp", - "Redtail prawn", - "Southern pink shrimp", - "Sao Paulo shrimp", - "Southern brown shrimp", - "Witch prawn", - "Red-spot king prawn", - "False white prawn", - "Penaeus shrimps nei", - "Swimming shrimp", - "Titi shrimp", - "Speckled shrimp", - "Jinga shrimp", - "Yellow shrimp", - "Eastern school shrimp", - "Peregrine shrimp", - "Endeavour shrimp", - "Shiba shrimp", - "Kadal shrimp", - "Greasyback shrimp", - "Fire shrimp", - "Greentail shrimp", - "Wood shrimp", - "Western school shrimp", - "Demons prawn", - "York shrimp", - "Fine shrimp", - "Emerald shrimp", - "Middle shrimp", - "Ginger shrimp", - "Bird shrimp", - "Moyebi shrimp", - "Papua shrimp", - "Stork shrimp", - "Spiny greasyback shrimp", - "Sulu shrimp", - "Metapenaeus shrimps nei", - "Deep-water rose shrimp", - "Australian rose shrimp", - "Neptune rose shrimp", - "Explorer rose shrimp", - "Lancer rose shrimp", - "Flamingo shrimp", - "Domino shrimp", - "Rose shrimp", - "Parapenaeus shrimps nei", - "Kiddi shrimp", - "Guinea shrimp", - "Hawknose shrimp", - "Arafura shrimp", - "Coral shrimp", - "Coromandel shrimp", - "Spear shrimp", - "Dog shrimp", - "Torpedo shrimp", - "Dwarf shrimp", - "Parole shrimp", - "Rainbow shrimp", - "Smoothshell shrimp", - "Uncta shrimp", - "Adonis shrimp", - "Thin shrimp", - "Bally shrimp", - "Parapenaeopsis shrimps nei", - "Atlantic seabob", - "Pacific seabob", - "Xiphopenaeus shrimps nei", - "Hardback shrimp", - "Southern rough shrimp", - "Carabali shrimp", - "Roughneck shrimp", - "Indio shrimp", - "Brown rough shrimp", - "Pinto shrimp", - "Northern rough shrimp", - "Coarse shrimp", - "Zebra shrimp", - "Malayan rough shrimp", - "Yellow roughneck shrimp", - "Longlegged rough shrimp", - "Philippines rough shrimp", - "Smooth shrimp", - "Trachypenaeus shrimps nei", - "Needle shrimp", - "Megalops shrimp", - "Scythe shrimp", - "Four-spined needle shrimp", - "Tora velvet shrimp", - "Rice velvet shrimp", - "Whiskered velvet shrimp", - "Reef shrimp", - "Scout velvet shrimp", - "Kishi velvet shrimp", - "Caribbean velvet shrimp", - "Minstrel shrimp", - "Humpback shrimp", - "Broad velvet shrimp", - "Mogi velvet shrimp", - "Northern velvet shrimp", - "Southern velvet shrimp", - "Philip velvet shrimp", - "Pink velvet shrimp", - "Fiddler shrimp", - "Tolo velvet shrimp", - "Velvet shrimp", - "Beebe's velvet shrimp", - "Insular velvet shrimp", - "Mining shrimp", - "Orange shrimp", - "Periscope shrimp", - "Argentine stiletto shrimp", - "Penaeid shrimps nei", - "Pacific seabobs", - "Scarlet shrimp", - "Giant red shrimp", - "Indian red shrimp", - "Blue and red shrimp", - "Striped red shrimp", - "Arabian red shrimp", - "Smooth red shrimp", - "Stout red shrimp", - "Purplehead gamba prawn", - "Aristeus shrimps nei", - "Aristeid shrimps nei", - "Green shrimp", - "Coonstripe shrimp", - "Spot shrimp", - "Northern prawn", - "Ocean shrimp", - "Aesop shrimp", - "Dock shrimp", - "Humpy shrimp", - "Hokkai shrimp", - "Botan shrimp", - "Deep-water bigeye shrimp", - "Pandalus shrimps nei", - "Dorodotes shrimp", - "Chilean nylon shrimp", - "Madagascar nylon shrimp", - "Armed nylon shrimp", - "Humpback nylon shrimp", - "Smooth nylon shrimp", - "Mino nylon shrimp", - "Scarred nylon shrimp", - "Northern nylon shrimp", - "Indian nylon shrimp", - "Japanese nylon shrimp", - "Short-spined nylon shrimp", - "Three-spined nylon shrimp", - "Panama nylon shrimp", - "Golden shrimp", - "Striped soldier shrimp", - "Lesser striped shrimp", - "Gondwana striped shrimp", - "Catalonian striped shrimp", - "Striped gladiator shrimp", - "Italian deep-sea shrimp", - "Arrow shrimp", - "Guinea striped shrimp", - "Scarlet longbeak shrimp", - "Giant longbeak shrimp", - "Mexican longbeak shrimp", - "Colombian longbeak shrimp", - "Plesionika shrimps nei", - "Sidestripe shrimp", - "Morotoge shrimp", - "Pandalopsis shrimps nei", - "Hinged shrimp", - "Whip shrimp", - "Narwal shrimp", - "Oriental narwal shrimp", - "Pandalid shrimps nei", - "Pacific shrimps nei", - "Tsivakihini paste shrimp", - "Jawla paste shrimp", - "Akiami paste shrimp", - "Southern mauxia shrimp", - "Aviu shrimp", - "Australian paste shrimp", - "Northern mauxia shrimp", - "Taiwan mauxia shrimp", - "Alamang shrimp", - "Jembret shrimp", - "Sakura shrimp", - "Sergestid shrimps nei", - "Crimson coral shrimp", - "Banded coral shrimp", - "Gabon shrimp", - "Basket shrimp", - "Koros shrimp", - "Camacuto shrimp", - "Soldier brush shrimp", - "Ekusa shrimp", - "Moluccas brush shrimp", - "Smooth caridina", - "Bengal caridina", - "Sawtooth caridina", - "African caridina", - "Malagasy caridina", - "Needlenose caridina", - "Common caridina", - "Tonkin caridina", - "Pugnose caridina", - "Caridina shrimps nei", - "Nuka shrimp", - "Peaked shrimp", - "Subantarctic ruby prawn nei", - "Pacific ambereye", - "Japanese spinyridge", - "Quayle spinytail", - "Cipango prawn", - "Ridgetail prawn", - "Mamtom prawn", - "Siberian prawn", - "Oriental prawn", - "Roshna prawn", - "Vietnamese crest prawn", - "Ganges delta prawn", - "Bombay prawn", - "West African estuarine prawn", - "Whitebelly prawn", - "Spider prawn", - "Mississippi grass shrimp", - "Eastern grass shrimp", - "Chinese grass shrimp", - "Tonkin grass shrimp", - "Atlantic ditch shrimp", - "Marsh shrimp", - "Pond shrimp", - "Ebro shrimp", - "Lagoon shrimp", - "Indian small prawn", - "Baltic prawn", - "Mangrove prawn", - "Rockpool prawn", - "Chinese ditch prawn", - "Lake prawn", - "Delta prawn", - "Migrant prawn", - "Zaire prawn", - "Caribbean bait prawn", - "Common prawn", - "Gladiator prawn", - "Indian bait prawn", - "Potitinga prawn", - "Carpenter prawn", - "Posidonia prawn", - "Tropical river prawn", - "Barred grass shrimp", - "Hilton shrimp", - "Palaemon shrimps nei", - "Painted river prawn", - "Oriental river prawn", - "Shortleg river prawn", - "Riceland prawn", - "Giant river prawn", - "Amazonian river prawn", - "Monsoon river prawn", - "Cinnamon river prawn", - "Noumea river prawn", - "Cauque river prawn", - "Koua river prawn", - "Birma river prawn", - "New Caledonia river prawn", - "Ganges river prawn", - "Kaira river prawn", - "Congo river prawn", - "Rough river prawn", - "Sweet river prawn", - "Crane river prawn", - "Greybeard river prawn", - "Hawaii river prawn", - "Cascade river prawn", - "Orana river prawn", - "Slender river prawn", - "Striped river prawn", - "Jaro river prawn", - "Java river prawn", - "Agar river prawn", - "Kuncho river prawn", - "Philippine river prawn", - "Monkey river prawn", - "Scissor river prawn", - "Mountain river prawn", - "Malayam scale prawn", - "Madagascar scale prawn", - "Brackish river prawn", - "Knobtooth prawn", - "Ohio river prawn", - "Buchura river prawn", - "Patsa river prawn", - "Muff prawn", - "Volta river prawn", - "Hairy river prawn", - "Goda river prawn", - "Sunda river prawn", - "Longarm river prawn", - "Forest river prawn", - "Dimua river prawn", - "African river prawn", - "Hancock's river prawn", - "Western river prawn", - "Shortfinger river shrimp", - "Suriname river prawn", - "River prawns nei", - "Changallo shrimp", - "Freshwater prawns, shrimps nei", - "Palaemonid shrimps nei", - "Painted harlequin shrimp", - "Tanner's deep-water shrimp", - "Northern blunt-tail shrimp", - "Armoured shrimp", - "Spiny armoured shrimp", - "Panama armoured shrimp", - "Vicary armoured shrimp", - "Goblin prawn", - "Kuro shrimp", - "Japanese sand shrimp", - "Alaska shrimp", - "Common shrimp", - "Gray shrimp", - "California shrimp", - "Blacktailed shrimp", - "Bay shrimp", - "Sand shrimp", - "Crangon shrimps nei", - "Hardshell shrimp", - "Feather shrimp", - "Spiny shrimp", - "Bering shrimp", - "Four-spines nutshell shrimp", - "Sculptured shrimps nei", - "Areolated horned shrimp", - "Nutshell shrimp", - "Crangonid shrimps nei", - "Rock shrimp", - "Mediterranean rock shrimp", - "Ridgeback rock shrimp", - "Lesser rock shrimp", - "Tufted rock shrimp", - "Pacific rock shrimp", - "Knight rock shrimp", - "Eyespot rock shrimp", - "Kinglet rock shrimp", - "Burkenroad's rock shrimp", - "Coloured rock shrimp", - "Hardhusk rock shrimp", - "Keeled rock shrimp", - "Target shrimp", - "Martin's rock shrimp", - "Mixed rock shrimp", - "Peanut rock shrimp", - "Small peanut rock", - "Notched rock shrimp", - "Notched tidal rock shrimp", - "Trident shrimp", - "Salmon shrimp", - "Catherine shrimp", - "Argentine red shrimp", - "Royal red shrimp", - "Pleoticus shrimps nei", - "Veiled shrimp", - "Doris veiled shrimp", - "Hymenopenaeus shrimp nei", - "Kolibri shrimp", - "African mud shrimp", - "Ridgeback shrimp", - "Coastal mud shrimp", - "Flower shrimp", - "Guiana mud shrimp", - "Deep-sea mud shrimp", - "Chinese mud shrimp", - "Atlantic mud shrimp", - "Comb shrimp", - "Blossom shrimp", - "Razor mud shrimp", - "Deep-water mud shrimp", - "High ridge mud shrimp", - "Australia mus shrimp", - "Malayan mud shrimp", - "False comb shrimp", - "Algoa shrimp", - "Solenocera shrimps nei", - "Knife shrimp", - "Jack-knife shrimp", - "Chilean knife shrimp", - "Knife shrimps nei", - "Solenocerid shrimps nei", - "Spider shrimp", - "African spider shrimp", - "Spider prawns nei", - "Wellington shrimp", - "Kangaroo shrimp", - "Lesser glass shrimp", - "Japanese glass shrimp", - "Pink glass shrimp", - "White glass shrimp", - "Crimson pasiphaeid", - "Rabbitnose shrimp", - "Striped hinge beak shrimp", - "Sabre prawn", - "Flathead snapping shrimp", - "Teppo snapping shrimp", - "Forceps snapping shrimp", - "Nymph snapping shrimp", - "Red snapping shrimp", - "Daisy snapping shrimp", - "Bigclaw snapping shrimp", - "Armed snapping shrimp", - "Japanese snapping shrimp", - "Bristle snapping shrimp", - "Queensland snapping shrimp", - "Coral snapping shrimp", - "Telescope shrimp", - "Yamato shrimp", - "Greenland shrimp", - "Iso shrimp", - "Hunter shrimp", - "Companion shrimp", - "Cock shrimp", - "Shortspine shrimp", - "Toy shrimp", - "Flexed shrimp", - "Tsuno shrimp", - "Hoso shrimp", - "Medusa shrimp", - "Platenose shrimp", - "Flatnose shrimp", - "Lined shrimp", - "Monaco shrimp", - "Indian lined shrimp", - "Common cleaner shrimp", - "Cardinal shrimp", - "Friendly spine shrimp", - "Parrot shrimp", - "Spotted marbled shrimp", - "Processa shrimp", - "Nika shrimp", - "Peruvian one-handed shrimp", - "Processa shrimps nei", - "Natantian decapods nei", - "Longlegged spiny lobster", - "Japanese spiny lobster", - "Mexican spiny loster", - "Painted spiny lobster", - "Mud spiny lobster", - "Ornate spiny lobster", - "Royal spiny lobster", - "Caribbean spiny lobster", - "Brown spiny loster", - "Pronghorn spiny lobster", - "Smoothtail spiny lobster", - "Scalloped spiny lobster", - "Blue spiny lobster", - "Australian spiny lobster", - "Green spiny lobster", - "Spotted spiny lobster", - "Banded spiny lobster", - "Easter Island spiny lobster", - "Chinese spiny lobster", - "White whisker spiny lobster", - "Tropical spiny lobsters nei", - "Cape rock lobster", - "Juan Fernandez rock lobster", - "Green rock lobster", - "Tristan da Cunha rock lobster", - "Red rock lobster", - "Southern rock lobster", - "St.Paul rock lobster", - "Rock lobsters nei", - "Japanese furrow lobster", - "West Indian furrow lobster", - "Gibbon furrow lobster", - "Small furrow lobster", - "Polynesian furrow lobster", - "Buffalo blunthorn lobster", - "American blunthorn lobster", - "Unicorn blunthorn lobster", - "Japanese blunthorn lobster", - "Chilean jagged lobster", - "Cape jagged lobster", - "Pink spiny lobster", - "Common spiny lobster", - "Natal spiny lobster", - "Southern spiny lobster", - "Cape Verde spiny lobster", - "Palinurid spiny lobsters nei", - "Spear lobster", - "Oriental spear lobster", - "Japanese spear lobster", - "Spear lobsters nei", - "Arabian whip lobster", - "Banded whip lobster", - "Red whip lobster", - "Velvet whip lobster", - "Whip lobsters nei", - "Spiny lobsters nei", - "Pacific pincer lobster", - "Atlantic pincer lobster", - "Australian pincer lobster", - "Danube crayfish", - "Noble crayfish", - "Signal crayfish", - "Shasta crayfish", - "Sooty crayfish", - "White-clawed crayfish", - "Stone crayfish", - "European crayfishes nei", - "Red swamp crawfish", - "White crawfish", - "Florida crayfish", - "Ribbon crayfish", - "Procambarus crayfishes nei", - "Calico crayfish", - "Spinycheek crayfish", - "Rusty crayfish", - "Virile crayfish", - "Northern clearwater crayfish", - "Bottlebrush crayfish", - "Cypress crayfish", - "Appalachian brook grayfish", - "Mimic crayfish", - "Lavender burrowing crayfish", - "Ditch fencing crayfish", - "Pearl riverlet crayfish", - "Spider cave crayfish", - "American crayfishes nei", - "Giant tasmanian crayfish", - "Koura crayfish", - "Australian crayfish", - "Marron crayfish", - "Yabby crayfish", - "Red claw crayfish", - "Oceanian crayfishes nei", - "Velvet fan lobster", - "Serrate fan lobster", - "Glabrous fan lobster", - "Japanese fan lobster", - "Smooth fan lobster", - "Butterfly fan lobster", - "Hairy fan lobster", - "Sculptured mitten lobster", - "Caledonian mitten lobster", - "Red-spotted mitten lobster", - "Japanese mitten lobster", - "Easter Island mitten lobster", - "Marbled mitten lobster", - "Flathead lobster", - "Flathead lobsters nei", - "Soft locust lobster", - "Two-spotted locust lobster", - "Lesser slipper lobster", - "Blue-back locust lobster", - "Striated locust lobster", - "Pygmy locust lobster", - "Hunchback locust lobster", - "Locust lobsters nei", - "Mediterranean slipper lobster", - "Spanish slipper lobster", - "Galapagos slipper lobster", - "Brazilian slipper lobster", - "Hooded slipper lobster", - "Three-spot slipper lobster", - "Cape slipper lobster", - "Aesop slipper lobster", - "Red slipper lobster", - "Ridged slipper lobster", - "Easter Island slipper lobster", - "Blunt slipper lobster", - "Clamkiller slipper lobster", - "Rough spanish lobster", - "Small spanish lobster", - "Royal spanish lobster", - "Shield fan lobster", - "Slipper lobsters nei", - "Atlantic deep-sea lobster", - "Prickly deep-sea lobster", - "Red lobster", - "Sculptured lobster", - "Banded lobster", - "Mitten lobsterette", - "Indian Ocean lobsterette", - "Spinetail lobsterette", - "Florida lobsterette", - "Prickly lobsterette", - "Scarlet lobsterette", - "Ridge-back lobsterette", - "Gladiator lobsterette", - "Saya de Malha lobsterette", - "Ruby lobsterette", - "Pacific lobsterette", - "Two-toned lobsterette", - "Red and white lobsterette", - "Grooved lobsterette", - "Mozambique lobster", - "Andaman lobster", - "New Zealand lobster", - "Arafura lobster", - "Armoured lobster", - "Northwest lobster", - "Caribbean lobster", - "Bight lobster", - "Formosa lobster", - "Japanese lobster", - "Neptune lobster", - "Urugayian lobster", - "Okinawa sculptured lobster", - "Siboga lobster", - "China lobster", - "Red-banded lobster", - "Velvet lobster", - "Metanephrops lobsters nei", - "Norway lobster", - "American lobster", - "Cape lobster", - "European lobster", - "Homarus lobsters nei", - "Bellator lobster", - "Southern lobsterette", - "Nilenta lobsterette", - "True lobsters, lobsterettes nei", - "Fenix lobster", - "Musical furry lobster", - "Caribbean furry lobster", - "Indo-Pacific furry lobster", - "Scorpion mud lobster", - "Cape mud shrimp", - "Japanese mud shrimp", - "Blue mud shrimp", - "Mediterranean mud shrimp", - "Chines mud lobster", - "Australian ghost shrimp", - "Beach ghost shrimp", - "Bay ghost shrimp", - "Giant ghost shrimp", - "Japanese ghost shrimp", - "Pink ghost shrimp", - "Flower ghost shrimp", - "Cameroon ghost shrimp", - "Sand ghost shrimp", - "Ghost shrimps nei", - "Deep-water mud lobster", - "Baron mud lobster", - "Keeled mud lobster", - "Small pink lobster", - "Striped reef lobster", - "Violet-spotted reef lobster", - "Bullseye reef lobster", - "Red reef lobster", - "Lobsters nei", - "Euro-American crayfishes nei", - "Spiny mole crab", - "Toad mole crab", - "Big-claw purple hermit crab", - "Mangrove hermit crab", - "Tropical mole crab", - "Coldwater mole crab", - "Pacific mole crab", - "Striated mole crab", - "Coconut crab", - "Pelagic red crab", - "Carrot squat lobster", - "Bristle squat lobster", - "Stout squat lobster", - "Deep-water squat lobster", - "Radiant squat lobster", - "Long-clawed squat lobster", - "Swarming squat lobster", - "Rugose squat lobster", - "Blue squat lobster", - "Craylets, squat lobsters", - "Rough king crab", - "Red king crab", - "Blue king crab", - "Brown king crab", - "King crabs", - "Southern king crab", - "Subantarctic stone crab", - "Stone king crab", - "King crab", - "Golden king crab", - "King crabs nei", - "Softshell red crab", - "Red stone crab", - "Antarctic stone crab", - "Globose king crab", - "Red vermillion crab", - "King crabs, stone crabs nei", - "Right-handed hermit crabs nei", - "Anomuran decapods nei", - "Rough box crab", - "Spiny box crab", - "Spotted box crab", - "Nodose box crab", - "Flame box crab", - "Ornamented boxcrab", - "Ocellated box crab", - "Yellow box crab", - "Ridged box crab", - "Arched box crab", - "Small arched box crab", - "Common box crab", - "Giant box crab", - "Spectacled box crab", - "Shamefaced crab", - "Globose box crab", - "Flecked box crab", - "Havana box crab", - "Spoted box crab", - "Moon crab", - "Flower moon crab", - "Common moon crab", - "Paco box crab", - "Paromola", - "Japan. deep-water carrier crab", - "Homole crab", - "African ghost crab", - "Tufted ghost crab", - "Rounded ghost crab", - "Horned ghost crab", - "Common ghost crab", - "West african fiddler crab", - "Swamp ghost crab", - "Mangrove ghost crab", - "Mud crab", - "Lagoon land crab", - "Giant land crab", - "Chestnut crab", - "Mouthless land crab", - "Blue land crab", - "Longlegged land crab", - "Rugose land crab", - "Red Pacific land crab", - "Whitespotted land crab", - "Malpelo land crab", - "Purple land crab", - "Redeye sponge crab", - "Common sponge crab", - "Sleepy crab", - "Cannonball sponge crab", - "Japanese sponge crab", - "Spanner crab", - "Giant ciliate Ethusa", - "Square-shelled crab", - "Japanese rock crab", - "California red rock crab", - "Atlantic rock crab", - "Dungeness crab", - "Northern lemon rock crab", - "Edible crab", - "Jonah crab", - "Pacific rock crab", - "Toothed rock crab", - "Mola rock crab", - "Jonah crabs, rock crabs nei", - "African mud crab", - "Batwing coral crab", - "Marbled stone crab", - "Clown crab", - "Smooth spooner", - "Splendid spooner", - "Sawedged spooner", - "Spiny spooner", - "Punched stone crab", - "Spottedbelly rock crab", - "Beaded rock crab", - "Orange-hand stone crab", - "Smooth redeyed crab", - "Warty crab", - "Giant egg crab", - "Champagne crab", - "Mangrove stone crab", - "Smooth stone crab", - "Longfingered peeler crab", - "Giant stone crab", - "Black stone crab", - "Lumpy stone crab", - "Stridulating stone crab", - "Maroon stone crab", - "Red swimcrab", - "Speckled swimcrab", - "Sand swimcrab", - "Ridged swimming crab", - "Crucifix crab", - "Japanese swimming crab", - "Smoothshelled swimming crab", - "Twospined arm swimming crab", - "Banded-legged swimming crab", - "Blunt-toothed crab", - "Lesser swimming crab", - "Two-spot swimming crab", - "Hawaiian swimming crab", - "Spiny hands swimming crab", - "Soldier swimming crab", - "Charybdis crabs nei", - "Blue swimming crab", - "Iridescent swimming crab", - "Gazami crab", - "Lancer swimcrab", - "Blotched swimming crab", - "Threespot swimming crab", - "Rough swimcrab", - "Xantus swimcrab", - "Senegalese smooth swimcrab", - "Portunus swimcrabs nei", - "Periscope crab", - "Wide front swimcrab", - "Spiny claw swimming crab", - "Peppermint swimcrab", - "Pelagic swimcrab", - "Robustus swimcrab", - "Knobby swimcrab", - "Slender swimcrab", - "Bigfisted swimcrab", - "Blue crab", - "Marbled swimcrab", - "Gladiator swimcrab", - "Dana swimcrab", - "Giant swimcrab", - "Blunttooth swimcrab", - "Rugose swimcrab", - "Masked swimcrab", - "Maracaibo swimcrab", - "Shelling crab", - "Cuata swimcrab", - "Warrior swimcrab", - "Lesser blue crab", - "Sharptooth swimcrab", - "Callinectes swimcrabs nei", - "Sand crab", - "Green crab", - "Mediterranean shore crab", - "Carcinus crabs nei", - "Indo-Pacific swamp crab", - "Orange mud crab", - "Green mud crab", - "Purple mud crab", - "Velvet swimcrab", - "Wrinkled swimcrab", - "Blue-leg swimcrab", - "Arched swimming crab", - "Smooth swimcrab", - "Liocarcinus swimcrabs nei", - "Henslow’s swimming crab", - "Swimming crabs, etc. nei", - "Purple mangrove crab", - "Racer mangrove crab", - "Lightfoot crab", - "Mottled crab", - "Natal lightfoot crab", - "African matchbox crab", - "Marbled rock crab", - "Angola marsh crab", - "Hairy matchbox crab", - "Shore crab", - "Peregrine crab", - "Sundaic paddler crab", - "Violet vinegar crab", - "Pinkfingered vinegar crab", - "Thai vinegar crab", - "Rathbun's vinegar crab", - "Singapore vinegar crab", - "Tuberculated light-foot crab", - "Chinese mitten crab", - "Long-armed crab", - "Channel-clinging crab", - "Harbour spidercrab", - "Velvet spidercrab", - "Spinous spider crab", - "Lesser spider crab", - "Spiny spider crab", - "Maja spider crabs nei", - "Panamic spidercrab", - "Common decorator crab", - "Pronghorn decorator crab", - "Queen crab", - "Tanner crab", - "Red snow crab", - "Tanner crabs nei", - "Southern spider crab", - "Atlantic lyre crab", - "Arctic lyre crab", - "Toad, lyre crabs nei", - "Hair crab", - "Portly spider crab", - "El Dorado shrimp", - "West African geryon", - "Pink geryon", - "Pacific golden crab", - "Japanese golden crab", - "Austral golden crab", - "Indonesian golden crab", - "Polynesian golden crab", - "Deep-sea red crab", - "Red crab", - "Southwest Atlantic red crab", - "Golden deepsea crab", - "Chaceon geryons nei", - "Mediterranean geryon", - "Deep-sea crabs, geryons nei", - "Tidal spray crab", - "Nimble spray crab", - "Marine crabs nei", - "Freshwater crustaceans nei", - "Marine crustaceans nei", - "Glisten-worm solenogaster", - "Jawed solenogaster", - "Leaf-spiculed solenogaster", - "Articulate chiton", - "Stoke's chiton", - "Chitons nei", - "West Indian fuzzy chiton", - "Gold-flecked chiton", - "Northern red chiton", - "Portobelo chiton", - "Atlantic rose chiton", - "Eastern hanleya", - "Eastern beaded chiton", - "Eastern surf chiton", - "Pacific veiled chiton", - "Smooth glass-hair chiton", - "Occidental tuskshell", - "Stained tuskshell", - "Nineside toothshell", - "Salish toothshell", - "Common periwinkle", - "Periwinkles nei", - "Rough periwinkle", - "Hailstorm prickly-winkle", - "Coronate prickly-winkle", - "Pagoda prickly-winkle", - "Pyramidal prickly-winkle", - "Black murex", - "Radish murex", - "Ambiguous murex", - "Prince murex", - "Endive murex", - "Angular murex", - "Venus comb murex", - "Black-spined murex", - "Rarespined murex", - "Caltrop murex", - "Scalloped murex", - "Murex", - "Cabbage murex", - "Pink-mouthed murex", - "Regal murex", - "Banded murex", - "Margarita murex", - "Apple murex", - "Duplex murex", - "Chocolate rockshell", - "Callao rock shell", - "Two-row rock shell", - "Gourd rock shell", - "Aculeate rock shell", - "Alou rock shell", - "Belligerent rock shell", - "Toad purpura", - "Tuberose rock shell", - "Deltoid rock shell", - "Crowned rock shell", - "Nodose rock shell", - "Wide-foot purpura", - "Rudolph's purpura", - "Persian purpura", - "Turreted drill", - "Shoot rock shell", - "Carinate rock shell", - "Bent-beak murex", - "Snipe's bill murex", - "Goldmouth murex", - "Don Moore's murex", - "Messorius murex", - "Purple dye murex", - "Horned murex", - "Hedge hog murex", - "Crested murex", - "Blainville's murex", - "Adusta murex", - "Ramose murex", - "Firebrand murex", - "West Indian murex", - "Virginal murex", - "Francolina jopas", - "Wreath jopas", - "Vexillate jopas", - "Thomas' rapa whelk", - "Turnish shaped rapa", - "Sea snails", - "False abalone", - "Murex shells nei", - "Pink abalone", - "Black abalone", - "Southern green abalone", - "Red abalone", - "White abalone", - "Threaded abalone", - "Donkey's ear abalone", - "Japanese abalone", - "Giant abalone", - "Glistening abalone", - "Perlemoen abalone", - "Oval abalone", - "Blacklip abalone", - "Tuberculate abalone", - "Small abalone", - "Planate abalone", - "Variable abalone", - "Pinto abalone", - "Abalones nei", - "Snakeskin tegula", - "Articulate monodont", - "Turbinate monodont", - "Mutable monodont", - "Labio monodont", - "Top shell", - "Shining top-shell", - "Granular top-shell", - "Gualtieri's top-shell", - "Laugier's top-shell", - "Painted top-shell", - "Jussieu's chanculus", - "Adanson's gibbula", - "White gibbula", - "Red-brown gibbula", - "Divaricate gibbula", - "Chapel gibbula", - "Magus gibbula", - "Philbert's gibbula", - "Concave gibbula", - "Richard's gibbula", - "Umbilicate medit. Gibbula", - "Variegate gibbula", - "Cone-shaped top", - "Maculated top", - "Commercial top", - "Lined top", - "Trochus shells nei", - "Exasperating jujubine", - "Pyramid top", - "Fenestrate top", - "Dentate top shell", - "Common button top", - "Costate top", - "West Indian top shell", - "Rockpile turban", - "Wavy turban", - "Spirate turban", - "Rough turbo", - "Pacific turban", - "Horned turban", - "Stone turban", - "Squamate turban", - "Giant periwinkle", - "Silvermouth turban", - "Goldmouth turban", - "Green turban", - "Tapestry turban", - "Rough turban", - "Brown Pacific turban", - "Smooth moon turban", - "Coronate moon turban", - "Crass turban", - "Channelled turban", - "Chestnut turban", - "Turbans nei", - "Turban shells nei", - "Blood-stained turbo", - "Spurred turban", - "Carved star-shell", - "Imbricated star-shell", - "Green star-shell", - "Common spider conch", - "Giant spider conch", - "Chiragra spider conch", - "Orange spider conch", - "Milleped spider conch", - "Scorpio spider conch", - "Queen conch", - "Giant Eastern Pacific conch", - "Eastern Pacific fighting conch", - "Cock's comb conch", - "Granulated conch", - "Diana conch", - "Bubble conch", - "Dog conch", - "Gibbose conch", - "Plicate conch", - "Silver conch", - "Strawberry conch", - "Little pitcher conch", - "Samar conch", - "Swan conch", - "Widest Pacific conch", - "Marginate conch", - "Mutable conch", - "Laciniate conch", - "Variable conch", - "Milk conch", - "Roster-tail conch", - "Fighting conch", - "Hawk-wing conch", - "West African stromb", - "Three-knobbed conch", - "Stromboid conchs nei", - "Terebellum conch", - "Shinbone tibia", - "Conch shells nei", - "Whelk", - "Humphrey's buccinum", - "Gates' goblet", - "Striated buccinum", - "D'Orbigny's buccinum", - "Waved goblet", - "Striate pisania", - "Maculated ivory whelk", - "Mud ivory whelk", - "Spiral babylon", - "Antarctic whelk", - "Antarctic trophon", - "Pacific melongena", - "West Indian crown conch", - "Spiral melongena", - "Colossal melongena", - "Ternate melongena", - "Giant hairy melongena", - "Nutmeg melongena", - "Whelks", - "Dwarf frog shell", - "Purse frog shell", - "Common frog shell", - "Warty frog shell", - "Giant frog shell", - "Reddish frog shell", - "Frog shell nei", - "Pacific Scotch bonnet", - "Grooved helmet", - "Saburon helmet", - "Banded bonnet", - "Checkerboard bonnet", - "Grey bonnet", - "Spiny bonnet", - "Rugose bonnet", - "Horned helmet", - "Flame helmet", - "Emperor helmet", - "King helmet", - "Tessellate helmet", - "Bullmouth helmet", - "Helmets shells nei", - "Slender strombina", - "Dotted dove shell", - "Spiny slipper shell", - "Excavated slipper shell", - "Onyx slipper shell", - "Slipper-limpet crepidule", - "Nail-shaped crepidule", - "Goree slipper shell", - "American slipper-limpet", - "Brown cup-and-saucer", - "Chinese cup-and-saucer", - "Du Petit's spindle", - "Beaked fusus", - "Syracusan fusus", - "Distaff spindle", - "Nicobar spindle", - "Philippi's spindle", - "Prince horse conch", - "Salmon horse conch", - "Trapezium horse conch", - "Horse conches nei", - "Wooden fasciolaria", - "True tulip", - "Precious stone shell", - "Many-angled spindle", - "Brown-lined latirus", - "Chestnut latirus", - "Great keyhole limpet", - "Green Panama keyhole limpet", - "Barbados keyhole limpet", - "Rayed keyhole limpet", - "Cloudy keyhole limpet", - "Compressed keyhole limpet", - "Stromboli keyhole limpet", - "Lister's keyhole limpet", - "Giant owl limpet", - "File limpet", - "Pacific sugar limpet", - "Striate limpet", - "Broderip's moon snail", - "Chemnitz's moon snail", - "Beautifully-banded moon snail", - "Starry moon snail", - "Tiger moon snail", - "Calf moon snail", - "Gualteri's moon snail", - "Lined moon snail", - "Adanson's moon snail", - "Collar moon snail", - "Flamed moon snail", - "Morocco moon snail", - "Turton's moon snail", - "Hebrew moon-shell", - "Thousand-spotted moon-shell", - "Dillwyn's moon-shell", - "Ribboned moon-shell", - "Josephine's moon-shell", - "Eggwhite moon snail", - "Elephant's-foot moon snail", - "Chained moon-shell", - "Brown moon-shell", - "Guillemin's moon-shell", - "Pretty moon-shell", - "Entangled moon-shell", - "Flamed moon-shell", - "Bladder moon snail", - "Pear-shaped moon snail", - "Blackmouth moon snail", - "Seba's moon snail", - "Concave baby's ear", - "Tent olive", - "Redmouth olive", - "Amethyst olive", - "Purplemouth olive", - "Common olive", - "Blood olive", - "Tricolor olive", - "Black olive", - "Netted olice", - "Lettered olive", - "Tiger olive", - "Giant Mexican limpet", - "Rayed mediterranean limpet", - "Ferreous limpet", - "Black limpet", - "Rustic limpet", - "Rough limpet", - "Star-shaped limpet", - "Cinnabar limpet", - "Limpet", - "Mournful limpet", - "Limpets nei", - "Velvet helcion", - "Rayed limpet", - "Turtle limpet", - "Antarctic limpet", - "Depressed limpet", - "Kerguelen limpet", - "Decussate distorsio", - "Common distorsio", - "Reticulate distorsio", - "Humboldt's potamid", - "Obtuse horn shell", - "Girdled horn shell", - "Quadrate horn shell", - "Cut-off swamp cerith", - "Telescope snail", - "Mud creeper", - "Sulcate swamp cerith", - "Giant false limpet", - "Javanese false limpet", - "Fringed false limpet", - "Sirius false limpet", - "Pacific cask shell", - "Grinning tun", - "Helmet ton", - "Costate tun", - "Pacific partridge tun", - "Banded tun", - "Channeled tun", - "Spotted tun", - "Oily tun", - "Mosaic tun", - "Gauntlet vase", - "Ceram vase", - "Top vase", - "Spiny vase", - "Caribbean vase", - "Australian trumpet", - "Indian chank", - "Tuberculate kneefastia", - "Noble giant turrid", - "White keeled turrid", - "Lybian turrid", - "Indian turrid", - "Javanese turrid", - "Babylonia turrid", - "Common pelican-foot", - "Serre's pelican-foot", - "Hungarian cap-shell", - "Spicate cerithe", - "Mediterranean cerithe", - "Common cerithe", - "Coral cerith", - "Spinose cerith", - "Giant knobbed cerith", - "Necklace cerith", - "Banded vertagus", - "Common vergatus", - "Rough vergatus", - "Obelisk vergatus", - "Aluco vergatus", - "Lamellose coral-shell", - "Short coral-shell", - "Meyendorff's coral shell", - "Babel's latiaxis", - "Oil-vessel triton", - "Knobbed triton", - "Variegated triton", - "Corrugated triton", - "Cuticle-clad triton", - "Neapolitan triton", - "Shortneck triton", - "Nicobar hairy triton", - "Aquatile hairy triton", - "Intermediate hairy triton", - "Black-spotted triton", - "Common hairy triton", - "Pear triton", - "Angular triton", - "Oregon triton", - "Horny miter", - "Brown miter", - "Zoned miter", - "Adusta miter", - "Episcopal miter", - "Pontifical miter", - "Ebony miter", - "Mitres nei", - "Netted nassa", - "Thickened nassa", - "Filed nassa", - "Changeable nassa", - "Horned nassa", - "Cuvier's nassa", - "Gibbous nassa", - "Cake nassa", - "Coronate nassa", - "Burned nassa", - "Channeled nassa", - "Glans nassa", - "Cyclope nassa", - "Miran bullia", - "Horny auger", - "Monterosato's auger", - "Muddy auger", - "Screw turret", - "Duplicate turret", - "Oxpalate nerite", - "Chameleon nerite", - "Plicate nerite", - "Polished nerite", - "Costate nerite", - "Pitchy nerite", - "Flatspired nerite", - "Scaly nerite", - "Bleeding tooth", - "Senegal nerite", - "Turreted nerite", - "Great worm shell", - "Snake-like worm shell", - "Jellyfish worm shell", - "Sunburst carrier shell", - "Arabian cowrie", - "Map cowrie", - "Humpback cowrie", - "Mole cowrie", - "Tiger cowrie", - "Pacific deer cowrie", - "Gold ring cowrie", - "Eyed cowie", - "Boutet's cowrie", - "Serpent's head cowrie", - "Carnelian cowrie", - "Dragon cowrie", - "Depressed cowrie", - "Eglantine cowrie", - "Eroded cowrie", - "Isabelle cowrie", - "Monster cowrie", - "Lynx cowrie", - "Reticulated cowrie", - "Money cowrie", - "Walled cowrie", - "Onyx cowrie", - "Schilders' cowrie", - "Jester cowrie", - "Tummy cowrie", - "Histrio cowrie", - "Tortoise cowrie", - "Cowries nei", - "Common egg cowrie", - "Shuttlecock volva", - "Graceful fig shell", - "Underlined fig shell", - "Maculated dwarf triton", - "Bat volute", - "Diadem volute", - "Indian volute", - "Common music volute", - "Green music volute", - "Pig's snout volute", - "Marmorate volute", - "Elephant's snout volute", - "Neptune's volute", - "Olla volute", - "Volutes nei", - "Charcot's volute", - "Challenger volute", - "Golden volute", - "Angulate volute", - "Volute", - "Articulate harp", - "True harp", - "Major harp", - "Harp shells nei", - "Rugose iter", - "Little-fox miter", - "Lettered cone", - "Oak cone", - "Suratan cone", - "Beech cone", - "Crowned cone", - "Yellow Pacific cone", - "General cone", - "Leopard cone", - "Livid cone", - "Marble cone", - "Rayed cone", - "Tesselate cone", - "Textile cone", - "Mouse cone", - "Royal cone", - "Cone shells nei", - "Marlinspike", - "Fly spotted auger", - "Subulate auger", - "Sandbeach auger", - "Auger shells nei", - "Giant sundial", - "Clear sundial", - "Shoulderblade sea cat", - "Judas ear cassidula", - "Midas ear cassidula", - "Common pythia", - "Subantarctic struthiolaria", - "Chinese mystery snail", - "Round slippersnail", - "Gastropods nei", - "Greenish glauconomya", - "Mexican jewel box", - "Lazarus jewel box", - "Reflexed jewel box", - "Savigny's jewel box", - "Oxheart cockle", - "Hazelnut ark", - "Mossy ark", - "Noah's ark", - "Chuchoca ark", - "Ventricose ark", - "Turkey wing", - "Indo-Pacific ark", - "Ark clams nei", - "Hairy ark", - "Decussate ark", - "Almond ark", - "Lurid ark", - "Heavy African ark", - "Gambia ark", - "Incongruous ark", - "Chemnitz's ark", - "Globose ark", - "Inequivalve ark", - "Rudder ark", - "Inflated ark", - "Half-crenated ark", - "Corneous ark", - "Pill ark", - "Sowerby's ark", - "Half-propellor ark", - "Propellor ark", - "Blood cockle", - "Antique ark", - "Basket ark", - "Diluvial ark", - "Rusty ark", - "Grand ark", - "Mazatlan's ark", - "Many ribbed ark", - "Nodular ark", - "Reinhart's ark", - "Black ark", - "Eared ark", - "Brown ark", - "Senegal ark", - "Blood ark", - "Anadara clams nei", - "Washboard", - "Ohio pigtoe", - "Dromedary pearlymussel", - "Eastern pearlshell", - "Western pearlshell", - "Rainbow", - "Wavy-rayed lampmussel", - "Giant floater", - "Swan mussel", - "Triangle sail mussel", - "Cockscomb pearl mussel", - "Freshwater mussel shells", - "Blacklip pearl oyster", - "Silverlip pearl oyster", - "Jingle pearl oyster", - "Cape pearl-oyster", - "Japanese pearl oyster", - "Tiled pearl oyster", - "Atlantic pearl oyster", - "Mazatlan pearl oyster", - "Fringed pearl oyster", - "Spotted pearl oyster", - "Rayed pearl oyster", - "Pearl oysters nei", - "Pearl oyster shells nei", - "Penguin wing oyster", - "Western wing oyster", - "Swift wing oyster", - "European wing oyster", - "Wing oysters nei", - "Fingerprint oyster", - "Australian mud oyster", - "Red flat oyster", - "Chilean flat oyster", - "Japanese flat oyster", - "European flat oyster", - "Yaquina oyster", - "New Zealand dredge oyster", - "Denticulate rock oyster", - "Flat oysters nei", - "New Zealand rock oyster", - "Kegaki oyster", - "Philippines hooded oyster", - "Coral rock oyster", - "Palmate oyster", - "Hooded oyster", - "Sydney cupped oyster", - "Spiny rock oyster", - "Leaf oyster", - "Frons oyster", - "Angel oyster", - "Sand oyster", - "Stone oyster", - "Cock's comb oyster", - "Pacific cupped oyster", - "Mangrove cupped oyster", - "American cupped oyster", - "Ariake cupped oyster", - "Gryphea cupped oyster", - "Indian backwater oyster", - "Slipper cupped oyster", - "Lugubrious cupped oyster", - "Cortez oyster", - "Suminoe oyster", - "Columbia black oyster", - "Gasar cupped oyster", - "Cupped oysters nei", - "Megodon oyster", - "Dwarf oyster", - "Olympia oyster", - "Crested oyster", - "Flat and cupped oysters nei", - "Felippone's scallop", - "Tehuelche scallop", - "Queen scallop", - "Antarctic scallop", - "Japanese baking scallop", - "Modest scallop", - "Chinese scallop", - "Lunar Mexican scallop", - "San Diego scallop", - "Silken scallop", - "Vogde's scallop", - "Great Atlantic scallop", - "Groovesided scallop", - "Great Mediterranean scallop", - "New Zealand scallop", - "Southern Australia scallop", - "Zigzag scallop", - "Pecten scallops nei", - "Saucer scallop", - "Asian moon scallop", - "Paper moon scallop", - "Bifrons scallop", - "Smooth scallop", - "Proteus scallop", - "Flexuous scallop", - "Giant rock scallop", - "Pacific lion's paw", - "Lion's paw", - "Swift's scallop", - "American sea scallop", - "Royal cloak scallop", - "Cat's paw scallop", - "Club scallop", - "Calico scallop", - "Atlantic bay scallop", - "Peruvian calico scallop", - "Pacific calico scallop", - "Variegated scallop", - "Iceland scallop", - "Farrer's scallop", - "Noble scallop", - "Doughboy scallop", - "Spiny scallop", - "Hind's scallop", - "Senatorial scallop", - "Little bay scallop", - "Scaly Pacific scallop", - "Scallop", - "Cloak scallop", - "Flatribbed scallop", - "Leopard scallop", - "Distant scallop", - "Box scallop", - "Singapore scallop", - "Weathervane scallop", - "Yesso scallop", - "Delicate scallop", - "Patagonian scallop", - "Scallops nei", - "Ocean quahog", - "Korean mussel", - "Californian mussel", - "Chilean mussel", - "New Zealand blue mussel", - "Blue mussel", - "Kerguelen mussel", - "Norhtern blue mussel", - "River Plata mussel", - "Mediterranean mussel", - "Australian mussel", - "Mytilus mussels nei", - "Guyana swamp mussel", - "Strigate mangrove mussel", - "Reeve's mangrove mussel", - "Arcuate mussel", - "Atlantic ribbed mussel", - "Hooked mussel", - "European date mussel", - "Pacific date mussel", - "Cylinder date mussel", - "Date mussels nei", - "Senhouse horse mussel", - "Box mussel", - "Distorted mussel", - "Choro mussel", - "Black mussel", - "Pinpricked mussel", - "Eared horse mussel", - "Bearded horse mussel", - "Kurilean horse mussel", - "Yellowbanded horse mussel", - "Northern horse mussel", - "Philippine horse mussel", - "Capax horse mussel", - "Tulip mussel", - "Offshore horse mussel", - "Straight horse mussel", - "Shiny mussel", - "Rhomboid mussel", - "False tulip mussel", - "Adriatic horse mussel", - "Furrowed horse mussel", - "Horse mussels nei", - "South American rock mussel", - "Green mussel", - "New Zealand mussel", - "Indian brown mussel", - "African mussel", - "Perna mussels nei", - "Cholga mussel", - "Sea mussels nei", - "Striped venus", - "King's littleneck", - "Pullet carpet shell", - "Golden carpet shell", - "Banded carpet shell", - "Corrugated venus", - "Durable venus", - "Purple amiantis", - "West Indian pointed venus", - "Squamose venus", - "Smooth callista", - "Cross-barred venus", - "Kellett's Panama venus", - "King venus", - "Stutchbury's venus", - "Common Californian venus", - "Smooth Pacific venus", - "Ornate venus", - "Frilled Californian venus", - "Small banded venus", - "Semi-rough venus", - "African venus", - "Chamber venus", - "Koch's venus", - "Magellan clam", - "Peruvian yellow clam", - "Discrepant venus", - "Forked venus", - "Tumid venus", - "Comb venus", - "Venus nei", - "Equilateral venus", - "Hiant venus", - "Japan venus", - "Marbled venus", - "Camp pitar venus", - "Ornate pitar venus", - "Calico clam", - "Sunray venus", - "Fertile venus", - "Ovate clam", - "Japanese hard clam", - "Asiatic hard clam", - "Backwater hard clam", - "Lyrate hard clam", - "Spotted hard clam", - "Hard clams nei", - "Golden callista", - "Squalid callista", - "Princess venus", - "Youthful venus", - "Many-ridged venus", - "Clathrate venus", - "Reticulated venus", - "Grooved carpet shell", - "Japanese carpet shell", - "Variegated carpet shell", - "Carpet shells nei", - "Ridged pitar venus", - "Royal comb venus", - "Lightning venus", - "Rostrate pitar", - "Self-coloured pitar", - "Yellow pitar venus", - "Pellucid pitar venus", - "Rough pitar venus", - "Swollen venus", - "Tiar venus", - "Turgid venus", - "Lettered venus", - "Belcher's venus", - "Gay's little venus", - "Hians tivela", - "Triangular tivela", - "Pismo clam", - "Ventricose tivela", - "Byron tivela", - "Flat tivela", - "Triple venus", - "Tivelas nei", - "Heart venus", - "Rigid venus", - "Warty venus", - "Plicate venus", - "Script venus", - "Oriental cyclina", - "Mauve sunetta", - "Truncate sunetta", - "Venus clam", - "Butter clam", - "Common butter clam", - "Purple butter clam", - "Butter clams nei", - "Undulate venus", - "Rooster venus", - "Textile venus", - "Semigrooved venus", - "Short neck clams nei", - "Pacific littleneck clam", - "Taca clam", - "Rough littleneck", - "Columbian littleneck", - "Lesser littleneck", - "Brazilian comb venus", - "Thin-shelled littleneck", - "Northern quahog(=Hard clam)", - "Southern hardshell clam", - "Dosinia clam", - "Dunker's dosinia", - "Japanese dosinia", - "Ponderous dosinia", - "Mature dosinia", - "Smooth dosinia", - "Dosinias nei", - "Fine clam", - "Venus clams nei", - "Imperial surf clam", - "Rugose mactra", - "Common otter shell", - "Narrow otter shell", - "Oblong otter shell", - "Elongate mactra", - "Common rangia", - "Western Mexican rangia", - "Fat horse clam", - "Japanese horse clam", - "Pacific horse clam", - "Pacific horse clams nei", - "Maidenhair mactra", - "Pellucid mactra", - "Panamic winged mactra", - "Chinese trough shell", - "Wedge trough shell", - "Discors trough shell", - "Globose clam", - "Ihering's trough shell", - "Smooth mactra", - "Isabel surf clam", - "Lilac trough shell", - "Luzon troughshell", - "Maculated troughshell", - "Plain troughshell", - "Large trough shell", - "Symmetrical trough shell", - "Agate troughshell", - "Violet troughshell", - "Rayed trough shell", - "Grey rough shell", - "Largilliert's mactra", - "Polished mactra", - "Rostrate mactra", - "Californian mactra", - "Concealed surf clam", - "Trough shells nei", - "Glassy mactra", - "Atlantic surf clam", - "Stimpson's surf clam", - "Equal-sized surf clam", - "Oval surf clam", - "Solid surf clam", - "Subtruncate surf clam", - "Surf clams nei", - "Caribbean surf clam", - "Taquilla clams", - "Mactra surf clams nei", - "Giant bittersweet", - "Common European bittersweet", - "Speckled bittersweet", - "Black bittersweet", - "Pilose bittersweet", - "Reeve's bittersweet", - "Lined bittersweet", - "Violet bittersweet", - "Two-spotted bittersweet", - "Scripta bittersweet", - "Vovan bittersweet", - "Comb bittersweet", - "Tessellated bittersweet", - "Honeycomb oyster", - "Wrinkled oyster", - "Spoon oyster", - "Common galatea clam", - "Rough butterfly donax", - "Californian donax", - "Sculptured donax", - "Cuneate donax", - "Common Caribbean donax", - "Toothed donax", - "Pacific bean donax", - "Gracile donax", - "La Plata donax", - "Fleshy donax", - "Common peruvian donax", - "Punctate donax", - "Rugose donax", - "Leather donax", - "Half-striated donax", - "Striate donax", - "Truncate donax", - "Banded donax", - "Goolwa donax", - "Bean donax", - "Smooth donax", - "Lovely donax", - "Beautiful donax", - "Donax clams", - "Giant false donax", - "Tall false donax", - "Smooth false donax", - "Delessert's false donax", - "Rostrate false donax", - "Sharp razor clam", - "Javanese razor clam", - "Cylindrical razor shell", - "European razor clam", - "Akemate razor shell", - "Cape razor clam", - "Kemp's razor shell", - "Malacca razor shell", - "Pink-spotted razor shell", - "Rough jackknife", - "Gould's razor shell", - "Rostrate jackknife", - "Grand razor shell", - "Lamarck's razor shell", - "Guinea razor shell", - "Solen razor clams nei", - "Arched razor shell", - "Atl.jackknife(=Atl.razor clam)", - "Pod razor shell", - "Giant jackknife", - "Sword razor shell", - "Goree razor clam", - "Ensis razor clams nei", - "Pacific razor clam", - "Dall's razor clam", - "Sunset razor clam", - "Winter's razor clam", - "African knife shell", - "Razor clams, knife clams nei", - "Sand gaper", - "Blunt gaper", - "Gaper nei", - "Pacific geoduck", - "Aldovrandi's panope", - "Common hemidonax", - "Common jingle shell", - "Peruvian jingle shell", - "Abalone jingle shell", - "Violet batissa", - "Equilateral marsh clam", - "Carolina marsh clam", - "Common geloina", - "Broad geloina", - "Triangular mash clam", - "Inflated marsh clam", - "Slender marsh clam", - "Bengali geloina", - "Common Indian marsh clam", - "Japanese corbicula", - "Manila clam", - "Asian clam", - "Freshwater clams nei", - "Common basket lucina", - "Elegant basket lucina", - "Spiny cockle", - "European prickly cockle", - "Poorly ribbed cockle", - "Sand cockle", - "Tuberculate cockle", - "Olive green cockle", - "Common edible cockle", - "Costate cockle", - "Gaping cockle", - "Bulow's cockle", - "Basket cockle", - "Giant atlantic cockle", - "Japanese cockle", - "Paper cockle", - "Folded lagoon cockle", - "Norwegian egg cockle", - "Giant Pacific egg cockle", - "Oblong egg cockle", - "Common egg cockle", - "Egg cockles nei", - "Coloured lagoon cockle", - "Consors' cockle", - "American prickly cockle", - "Even cockle", - "American yellow cockle", - "Mexican cockle", - "Slender cockle", - "Pacific yellow cockle", - "Giant Pacific cockle", - "Reddish cockle", - "Angulate cockle", - "Orbit cockle", - "Wrinkled cockle", - "White strawberry cockle", - "Pacific half cockle", - "Pacific strawberry cockle", - "Atlantic strawberry cockle", - "True heart cockle", - "Broad cockle", - "Asiatic cockle", - "Chinese cockle", - "Greenland smoothcockle", - "Cockles nei", - "Striate beach clam", - "Pipi wedge clam", - "Corneous wedge clam", - "Macha clam", - "Yellow wedge clam", - "Tuatua wedge clam", - "Toheroa wedge clam", - "Flat tree oyster", - "Pacific tree oyster", - "Janus tree oyster", - "Saddle tree oyster", - "Wader tree oyster", - "Rayed tree oyster", - "Giant clam", - "Smooth giant clam", - "Fluted giant clam", - "Crocus giant clam", - "Elongate giant clam", - "Giant clams nei", - "Bear paw clam", - "China clam", - "Antarctic soft-shell clam", - "Truncate lantern clam", - "Spiny file shell", - "Common file shell", - "Inflated file shell", - "Rathbun's giant file shell", - "Giant file shell", - "Rough lima", - "Antarctic airy limopsis", - "Toothless lucine", - "Atlantic tiger lucine", - "Pacific tiger lucine", - "Interrupted lucine", - "Punctate lucine", - "Corrugate lucine", - "Divergent lucine", - "Pale lucina", - "Northern lucina", - "Pennsylvania lucine", - "Straight hammer oyster", - "White hammer oyster", - "Black hammer oyster", - "Kerguelen malletia", - "Broad ribbed cardita", - "Antique cardita", - "Tankerville's cardita", - "Twotoned cardita", - "Antarctic cardita", - "Ajar cardita", - "Halfround cardita", - "Olive ark", - "Kerguelen nut shell", - "Antarctic yoldia", - "White piddock", - "Pacific mud piddock", - "Dilate piddock", - "Manila piddock", - "Truncate barnea", - "Angel wing", - "Pacific coast angel wing", - "Oriental angel wing", - "Common piddock", - "Striate martesia", - "Talona pholaad", - "Brittle pen shell", - "Comb pen shell", - "Maura pen shell", - "Tuberculate pen shell", - "Flag pen shell", - "Chautard's pen shell", - "Pen shells nei", - "Noble pen shell", - "Rugose pen shell", - "Bicolor pen shell", - "Prickly pen shell", - "Rough pen shell", - "Elongate sunset clam", - "Minor sunset clam", - "Courtesan sunset clam", - "Squamose sunset clam", - "Truncate sunset clam", - "Depressed sunset clam", - "Faeroe sunset clam", - "Sunset clams nei", - "Western small false donax", - "Chinese sanguin", - "Nuttall's mahogany clam", - "Varnish clam", - "Operculate sanguin", - "Pacific asaphis", - "Diphos sanguin", - "Radiate semele", - "Bark semele", - "Chilean semele", - "Semeles nei", - "Constricted tagelus", - "Dombey's tagelus", - "Stout tagelus", - "Californian tagelus", - "Duckbill tagelus", - "Adanson's tagelus", - "Small short razor", - "Antique razor clam", - "Divaricate short razor", - "Rasp short razor", - "Bean solen", - "Atlantic thorny oyster", - "European thorny oyster", - "Digitate thorny oyster", - "Donkey thorny oyster", - "Pacific thorny oyster", - "Ducal thorny oyster", - "Bearded thorny oyster", - "Butler's thorny oyster", - "Imperial thorny oyster", - "Golden thorny oyster", - "Thorny oysters nei", - "Short macoma", - "Constricted macoma", - "Grand macoma", - "Bentnose macoma", - "White sand macoma", - "Cancellate panope", - "Fleshy tellin", - "Alternate tellin", - "Flat tellin", - "Cross tellin", - "Virgate tellin", - "Lacerate tellin", - "Similar red tellin", - "Foliated tellin", - "Cat's tongue tellin", - "Palate tellin", - "Remies tellin", - "Rasp tellin", - "Timor tellin", - "Glossy tellin", - "Beautiful tellin", - "Delicate tellin", - "Hyaline tellin", - "Senegambian tellin", - "Thin tellin", - "Tellins nei", - "Saddle grooved macoma", - "Paper tellin", - "Fragile tellin", - "Hooked ark", - "Windowpane oyster", - "Saddle oyster", - "Edible shipworm", - "Siamese shipworm", - "Undulated false lucine", - "False angel wing", - "Peppery furrow", - "Mediterranean awning clam", - "Paper thracia", - "Pubescent thracia", - "Zebra mussel", - "Dark falsemussel", - "Santo Domingo falsemussel", - "Clams, etc. nei", - "Koch’s bottletail squid", - "Southern bottletail squid", - "Striped dumpling squid", - "Needle cuttlefish", - "Common cuttlefish", - "African cuttlefish", - "Elegant cuttlefish", - "Pink cuttlefish", - "Andrea cuttlefish", - "Giant Australian cuttlefish", - "Arabian cuttlefish", - "Southern cuttlefish", - "Slender cuttlefish", - "Shortclub cuttlefish", - "Guinean cuttlefish", - "Golden cuttlefish", - "Kobi cuttlefish", - "Broadclub cuttlefish", - "Longarm cuttlefish", - "Spider cuttlefish", - "Kisslip cuttlefish", - "Madokai's cuttlefish", - "Reaper cuttlefish", - "Frog cuttlefish", - "Oman cuttlefish", - "Pharaoh cuttlefish", - "Hooded cuttlefish", - "Curvespine cuttlefish", - "Broadback cuttlefish", - "Trident cuttlefish", - "Giant African cuttlefish", - "Magnificent cuttlefish", - "Patchwork cuttlefish", - "Stumpy cuttlefish", - "Bartlett's cuttlefish", - "Knifebone cuttlefish", - "Ovalbone cuttlefish", - "Ken’s cuttlefish", - "Hedley’s cuttlefish", - "Papuan cuttlefish", - "Striking cuttlefish", - "Small striped cuttlefish", - "Little cuttlefish", - "Large striped cuttlefish", - "Rosecone cuttlefish", - "Smith’s cuttlefish", - "Starry cuttlefish", - "Grooved cuttlefish", - "Viet Nam cuttlefish", - "Voss’ cuttlefish", - "Whitley’s cuttlefish", - "Zanzibar cuttlefish", - "Cuttlefishes nei", - "Paintpot cuttlefish", - "Flamboyant cuttlefish", - "Japanese spineless cuttlefish", - "Spineless cuttlefish", - "Ornate cuttlefish", - "Sotty cuttlefish", - "Web’s cuttlefish", - "Sepiella cuttlefishes nei", - "Cuttlefish, bobtail squids nei", - "Odd bobtail squid", - "Stumpy bobtail squid", - "Japanese bobtail squid", - "Stout bobtail squid", - "Bully bobtail squid", - "North Pacific bobtail squid", - "Tortuga bobtail squid", - "Antilles bobtail squid", - "Big-eyed bobtail squid", - "Big bottom bobtail squid", - "Leucoptera bobtail squid", - "Humming-bird bobtail squid", - "Mimika bobtail squid", - "Southern bobtail squid", - "Dwarf bobtail squid", - "Analogous bobtail squid", - "Atlantic bobtail squid", - "Golden bobtail squid", - "Butterfly bobtail squid", - "Intermediate bobtail squid", - "Tongue bobtail squid", - "Robust bobtail squid", - "Steenstrup's bobtail squid", - "Spotty bobtail squid", - "Knobby bobtail squid", - "Sepiola bobtail squids nei", - "Lentil bobtail squid", - "Elegant bobtail squid", - "Mysterious bobtail squid", - "Common bobtail squid", - "Greater shining bobtail squid", - "Lesser shining bobtail squid", - "Carol bobtail squid", - "Little squid", - "Patagonian squid", - "Opalescent inshore squid", - "Mitre squid", - "Longfin squid", - "Swordtip squid", - "Spear squid", - "Beka squid", - "European squid", - "Kobi squid", - "Indian squid", - "Cape Hope squid", - "Veined squid", - "Japanese squid", - "Bigeye inshore squid", - "Slender inshore squid", - "Island inshore squid", - "Sao Paulo squid", - "Siboga squid", - "Surinam squid", - "Common squids nei", - "Southern reef squid", - "Bigfin reef squid", - "Caribbean reef squid", - "Reef squids nei", - "European common squid", - "Midsize squid", - "African squid", - "Alloteuthis squids nei", - "Western Atlantic brief squid", - "Guinean thumbstall squid", - "Panama brief squid", - "Thumbstall squids nei", - "Dart squid", - "Bartsch's squid", - "Long barrel squid", - "Inshore squids nei", - "Glassy flying squid", - "Neon flying squid", - "Webbed flying squid", - "Orangeback flying squid", - "Flying squids nei", - "Atlantic bird squid", - "Shiny bird squid", - "Northern shortfin squid", - "Broadtail shortfin squid", - "Argentine shortfin squid", - "Sharptail shortfin squid", - "Shortfin squids nei", - "Lesser flying squid", - "Jumbo flying squid", - "Luminous flying squid", - "Purpleback flying squid", - "European flying squid", - "Antarctic flying squid", - "Japanese flying squid", - "Angolan flying squid", - "Todarodes flying squids nei", - "Wellington flying squid", - "Gould's flying squid", - "Hawaiian flying squid", - "Nototodarus flying squids nei", - "Sevenstar flying squid", - "Ommastrephidae squids nei", - "Various squids nei", - "Greater hooked squid", - "Smooth hooked squid", - "Japanese hooked squid", - "Rugose hooked squid", - "Robust clubhook squid", - "Hooked squids nei", - "Angel squid", - "Common clubhook squid", - "Boreal clubhook squid", - "Atlantic cranch squid", - "Armed cranch squid", - "Antarctic cranch squid", - "Greater argonaut", - "Knobby argonaut", - "Argonauts nei", - "Turquet's octopus", - "Antarctic octopuses", - "Gloomy octopus", - "Tehuelche octopus", - "Big blue octopus", - "Whiparm octopus", - "White-spotted octopus", - "Common octopus", - "Brownstriped octopus", - "Sandbird octopus", - "Caribbean reef octopus", - "Chestnut octopus", - "Lilliput longarm octopus", - "North Pacific giant octopus", - "Marbled octopus", - "Globe octopus", - "Bumblebee octopus", - "Pygmy octopus", - "Lobed octopus", - "Mexican four-eyed octopus", - "Webfoot octopus", - "Spider octopus", - "Moon octopus", - "Atlantic banded octopus", - "Octopuses nei", - "Horned octopus", - "Musky octopus", - "Combed octopus", - "Horned and musky octopuses", - "North Atlantic octopus", - "Globose octopus", - "Spiney-horn octopus", - "January octopus", - "Dana octopus", - "Map octopus", - "Unihorn octopus", - "Old woman octopus", - "Fourhorn octopus", - "Antarctic knobbed octopus", - "Yellow octopus", - "Patagonian giant octopus", - "Octopuses, etc. nei", - "Long-armed squid", - "Umbrella squid", - "Flowervase jewell squid", - "Elongate jewell squid", - "Reverse jewell squid", - "Scaled squid", - "Coffeebean scaled squid", - "Pfeffer's enope squid", - "Jewel enope squid", - "Verany's enope squid", - "Sharpear enope squid", - "Roundear enope squid", - "Sparkling enope squid", - "Smallfin gonate squid", - "Schoolmaster gonate squid", - "Berryteuthis gonate squids nei", - "Boreopacific gonate squid", - "Mako gonate squid", - "Boreoatlantic gonate squid", - "Madokai gonate squid", - "Shortarm gonate squid", - "Atlantic gonate squid", - "Gonate squids nei", - "Deep-sea squid", - "Ornate arm squid", - "Common arm squid", - "Arm squids nei", - "Ruppell's octopus squid", - "Dana octopus squid", - "Diamondback squid", - "Glacial squid", - "Antarctic neosquid", - "Umbrella octopus nei", - "Emperor nautilus", - "Bellybutton nautilus", - "Ram's horn squid", - "Toothed-fin squid", - "Disc-fin squids nei", - "Palmate octopus", - "Tuberculate octopus", - "Cephalopods nei", - "Freshwater molluscs nei", - "Marine molluscs nei", - "Marine shells nei", - "Steller sea lion", - "Northern fur seal", - "California sea lion", - "Australian sea lion", - "New Zealand sea lion", - "South American fur seal", - "Guadalupe fur seal", - "South African fur seal", - "Juan Fernandez fur seal", - "Galapagos fur seal", - "Antarctic fur seal", - "New Zealand fur seal", - "Subantarctic fur seal", - "Fur seals nei", - "South American sea lion", - "Walrus", - "Mediterranean monk seal", - "Caribbean monk seal", - "Hawaiian monk seal", - "Northern elephant seal", - "Southern elephant seal", - "Ross seal", - "Leopard seal", - "Harp seal", - "Harbour seal", - "Ringed seal", - "Ribbon seal", - "Caspian seal", - "Baikal seal", - "Larga seal", - "Weddell seal", - "Bearded seal", - "Hooded seal", - "Grey seal", - "Crabeater seal", - "Seals nei", - "Sea otter", - "Marine otter", - "Polar bear", - "Dugong", - "West Indian manatee", - "Amazonian manatee", - "West African manatee", - "Ganges River dolphin", - "Indus River dolphin", - "Cuvier's beaked whale", - "Sherpherd's beaked whale", - "Blainville's beaked whale", - "Gray's beaked whale", - "Ginkgo-toothed beaked whale", - "Hector's beaked whale", - "Hubbs' beaked whale", - "Pigmy beaked whale", - "Sowerby's beaked whale", - "Gervais' beaked whale", - "True's beaked whale", - "Strap-toothed whale", - "Andrews' beaked whale", - "Stejneger's beaked whale", - "Beaked whales nei", - "Northern bottlenose whale", - "Southern bottlenose whale", - "Longman's beaked whale", - "Arnoux's beaked whale", - "Baird's beaked whale", - "Sperm whale", - "Irrawaddy dolphin", - "Australian snubfin dolphin", - "False killer whale", - "Long-finned pilot whale", - "Short-finned pilot whale", - "Pilot whales nei", - "Pygmy killer whale", - "Common dolphin", - "Long-beaked common dolphin", - "Risso's dolphin", - "Melon-headed whale", - "Tucuxi", - "Guyana dolphin", - "Atlantic hump-backed dolphin", - "Indo-Pac. hump-backed dolphin", - "Rough-toothed dolphin", - "Killer whale", - "Northern right whale dolphin", - "Southern right whale dolphin", - "Commerson's dolphin", - "Heaviside's dolphin", - "Hector's dolphin", - "Black dolphin", - "Pacific white-sided dolphin", - "Dusky dolphin", - "White-beaked dolphin", - "Atlantic white-sided dolphin", - "Hourglass dolphin", - "Peale's dolphin", - "Bottlenose dolphin", - "Indo-Pacif. bottlenose dolphin", - "Fraser's dolphin", - "Pantropical spotted dolphin", - "Spinner dolphin", - "Striped dolphin", - "Atlantic spotted dolphin", - "Clymene dolphin", - "Spotted dolphins nei", - "Dolphins nei", - "Harbour porpoise", - "Burmeister's porpoise", - "Vaquita", - "Spectacled porpoise", - "Finless porpoise", - "Dall's porpoise", - "White whale", - "Narwhal", - "Pygmy sperm whale", - "Dwarf sperm whale", - "Boto", - "Baiji", - "Franciscana", - "Toothed whales nei", - "Minke whale", - "Bryde's whale", - "Sei whale", - "Blue whale", - "Fin whale", - "Antarctic minke whale", - "Humpback whale", - "Balaenoptid whales nei", - "Northern right whale", - "Southern right whale", - "North Pacific right whale", - "Bowhead whale", - "Gray whale", - "Pygmy right whale", - "Baleen whales nei", - "Aquatic mammals nei", - "Indian green frog", - "Crab-eating frog", - "Asiatic bull frog", - "Indian skipper frog", - "Indian rice frog", - "Agile frog", - "European frog", - "European green frog", - "Common frog", - "Greek frog", - "Red-legged frog", - "American bull frog", - "Pig frog", - "Northern leopard frog", - "River frog", - "Frogs", - "African bull frog", - "African clawed frog", - "Chilean frog", - "Chinese giant salamander", - "Leatherback turtle", - "Common slider", - "Diamondback terrapins", - "Diamond back terrapins", - "Kemp's ridley turtle", - "Olive ridley turtle", - "Flatback turtle", - "Eastern Pacific green turtle", - "Green turtle", - "Hawksbill turtle", - "Loggerhead turtle", - "Chinese softshell turtle", - "Wattle-necked softshell turtle", - "Malayan softshell turtle", - "River and lake turtles nei", - "Marine turtles nei", - "Stokes' sea snake", - "Beaked sea snake", - "Annulated sea snake", - "Short sea snake", - "Small-headed sea snake", - "Pelagic sea snake", - "Viperine sea snake", - "Erabu sea snake", - "Broad-nosed caiman", - "Paraguayan caiman", - "Spectacled caiman", - "American alligator", - "Chinese alligator", - "Estuarine crocodile", - "Siamese crocodile", - "Australian crocodile", - "Nile crocodile", - "New Guinea crocodile", - "Cuban crocodile", - "Morelet's crocodile", - "American crocodile", - "Slender-snouted crocodile", - "Orinoco crocodile", - "Philippine crocodile", - "Mugger crocodile", - "African dwarf crocodile", - "False gharial", - "Gharial", - "Black caiman", - "Cuvier's Dwarf caiman", - "Smooth-fronted caiman", - "Crocodiles and alligators nei", - "Sooty albatross", - "Light-mantled sooty albatross", - "Amsterdam Island albatross", - "Southern royal albatross", - "Wandering albatross", - "Gibson's albatross", - "Northern royal albatross", - "Antipodean albatross", - "Tristan albatross", - "Laysan albatross", - "Black-footed albatross", - "Waved albatross", - "Short-tailed albatross", - "Indian yellow-nosed albatross", - "Campbell albatross", - "Black-browed albatross", - "Buller's albatross", - "Shy albatross", - "Atlant. yellow-nosed albatross", - "Grey-headed albatross", - "Chatham Islands albatross", - "Salvin's albatross", - "White-capped albatross", - "Albatrosses nei", - "Flesh-footed shearwater", - "Pink-footed shearwater", - "Great shearwater", - "Sooty shearwater", - "Short-tailed shearwater", - "Fluttering shearwater", - "Huttons shearwater", - "Wedge-tailed shearwater", - "Audubon's shearwater", - "Balearic shearwater", - "Manx shearwater", - "Yelkouan shearwater", - "Shearwaters nei", - "White-chinned petrel", - "Grey petrel", - "Parkinson's petrel", - "Westland petrel", - "Spectacled petrel", - "Petrels nei", - "Great-winged petrel", - "Kerguelen petrel", - "White-headed petrel", - "White-necked petrel", - "Gould's Petrel", - "Providence petrel", - "Mottled petrel", - "Trindade petrel", - "Bermuda petrel", - "Black-capped petrel", - "Antarctic petrel", - "Antarctic giant petrel", - "Hall's giant petrel", - "Giant petrels nei", - "Southern fulmar", - "Northern fulmar", - "Cory's shearwater", - "Cape Verde shearwater", - "Cape petrel", - "Antarctic prion", - "Fairy prion", - "Prions nei", - "Lesser snow petrel", - "Greater snow petrel", - "Snow petrels nei", - "Blue petrel", - "Tahiti petrel", - "Petrels and shearwaters nei", - "Wilson's storm petrel", - "Black-bellied storm petrel", - "B/W bellied storm petrels nei", - "European storm-petrel", - "Leach's storm-petrel", - "White-faced storm petrel", - "Common teal", - "Eurasian wigeon", - "Mallard", - "Greylag goose", - "Pink-footed goose", - "Bean goose", - "Tufted duck", - "Greater scaup", - "Brent goose", - "Canada goose", - "Barnacle goose", - "Common goldeneye", - "Long-tailed duck", - "Whooper swan", - "Mute swan", - "White-winged scoter", - "Black scoter", - "Goosander", - "Red-breasted merganser", - "Steller's eider", - "Common eider", - "King eider", - "Common shelduck", - "Ducks, geese and swans nei", - "Great skua", - "South polar skua", - "Brown skua", - "Chilean skua", - "Antarctic tern", - "Great crested tern", - "Sooty tern", - "Arctic tern", - "Common tern", - "Terns nei", - "Kelp gull", - "Silver gull", - "Herring gull", - "Laughing gull", - "Audouin's gull", - "Yellow-legged gull", - "Great black-backed gull", - "Mew gull", - "Lesser black-backed gull", - "Iceland gull", - "Glaucous gull", - "Sabine's gull", - "Common black-headed gull", - "Seagulls nei", - "Ivory gull", - "Black-legged kittiwake", - "Arctic skua", - "Skua", - "White-tailed sea-eagle", - "Adelie penguin", - "Chinstrap penguin", - "Gentoo penguin", - "Macaroni penguin", - "Rockhopper penguin", - "King penguin", - "Penguins nei", - "White-billed diver", - "Black-throated diver", - "Great northern diver", - "Red-throated diver", - "Snowy sheathbill", - "Imperial shag", - "European shag", - "Great cormorant", - "Cormorants nei", - "Australasian gannet", - "Northern gannet", - "Cape gannet", - "Masked booby", - "Boobies and gannets nei", - "South Georgia diving petrel", - "Atlantic puffin", - "Dovekie", - "Black guillemot", - "Common murre", - "Thick-billed murre", - "Razorbill", - "Grey heron", - "Horned grebe", - "Great crested grebe", - "Red-necked grebe", - "Xenophyophores", - "Bryozoans", - "Pterobranchs", - "Glass sponges", - "Honey comb", - "Sheepswool sponge", - "Elephant ear", - "Yellow sponge", - "Glove sponge", - "Greek bathing sponge", - "Reef sponge", - "Shiny sponge", - "Leather sponge", - "Sponges", - "Airy finger sponge", - "Orange frond sponge", - "Ostrich egg sponge", - "Rubber sponge", - "Fibreglass cup sponge", - "Maroon pimpled ear sponge", - "Siliceous sponges", - "Cnidarians nei", - "Wello fire coral", - "Red hydrocorals nei", - "Spiny white hydrocorals nei", - "Hydrocorals", - "Hydrozoans", - "Hydroids, hydromedusae", - "Common jellyfish", - "Cannonball jellyfish", - "Jellyfishes nei", - "Sardinia coral", - "Aka coral", - "Momo, boke magai, misu coral", - "Shiro, white coral", - "Angel skin coral", - "Garnet coral", - "Midway deep-sea coral", - "Precious corals nei", - "Catch bowl coral", - "Branch coral", - "Staghorn coral", - "Finger coral", - "Brush coral", - "Beadlet anemone", - "Girdle anemone", - "Snakelocks anemone", - "Golden anemone", - "Ice-cube tray coral", - "Leaf coral", - "Shoulderblade coral", - "Pillar coral", - "Cactus coral", - "Fungus coral", - "Brain trumpet coral", - "Bushy hard coral", - "Head coral", - "Curved mushroom coral", - "Distorted mushroom coral", - "Elongate mushroom coral", - "Common mushroom coral", - "Rough feather coral", - "Spiny mushroom coral", - "Bowl coral", - "Feather coral", - "Blue coral", - "Hermit anemone", - "Merulina coral", - "Brain root coral", - "Largebrain root coral", - "Lettuce coral", - "Cauliflower coral", - "Elkhorn cora", - "Rasp coral", - "Brocoli coral", - "Thin birdsnest coral", - "Birdsnest coral", - "Smooth cauliflower coral", - "Small star coral", - "Smooth star coral", - "Brain coral", - "Organpipe coral", - "Black coral", - "Umimatsu, pine coral", - "Wire coral", - "Unbranched bamboo coral", - "Branched bamboo coral", - "Sea plume", - "Gorgonians", - "Sea strawberry", - "Splitting fan coral", - "Flabellum cup corals nei", - "Bubble gum coral", - "Red trees", - "Long polyp soft corals nei", - "Madrepora coral", - "Hard corals, madrepores nei", - "Black corals and thorny corals", - "Zoanthids", - "Sea anemones", - "Soft corals", - "Sea pens", - "Brachiopods, lamp shells", - "Annelid worms", - "Sea mouse", - "Bloodworm", - "Ragworm", - "Quill worm", - "Segmented worms nei", - "Serpulid tube worms", - "Lugworm", - "Black lug, Runnydown", - "Eunice sea-worms", - "Thermiphione scaleworms", - "Gallery worm", - "Bristleworms nei", - "Feather duster worm", - "Marine worms", - "Peanut worm", - "Giant sea spiders nei", - "Sea spiders", - "Horseshoe crab", - "Tri-spine horseshoe crab", - "Mangrove horseshoe crab", - "Echinoderms", - "Red starfish", - "Cat's-foot star", - "Cross-fish", - "Magnificent sea-star", - "Abyssal star", - "Geometric star", - "Five-spined star", - "Armless stars", - "Pentagon star", - "Trojan star", - "Rock star", - "Sladen's star", - "Pentagonal tooth-star", - "Sun-star", - "Chubby sun-star", - "Rat-tail stars nei", - "Starfishes nei", - "Deepsea brittle star", - "Waite’s snake-star", - "Gorgons head basket-stars nei", - "Basket, brittle, snake stars", - "Brittle and snake stars", - "Basket stars", - "Japanese sea urchin", - "Red sea urchin", - "Sea urchins nei", - "Blue-spotted sea urchin", - "Porcupine sea urchin", - "Crowned sea urchin", - "Harpooner sea urchin", - "Green sea urchin", - "Deepsea urchin", - "Stony sea urchin", - "European edible sea urchin", - "Deepsea kina", - "Chilean sea urchin", - "Black sea urchin", - "Purple Pacific sea urchin", - "Hedgehog sea urchin", - "Circular sea bisquit", - "Violet sea urchin", - "Striped sea urchin", - "Sea egg", - "Giant keyhole sand dollar", - "Slitted sand dollar", - "Parasol urchin", - "Umbrella urchin", - "Pencil urchins", - "Banded-spine urchin", - "Microsoft mouse", - "Matheson’s heart urchin", - "Purple-heart urchin", - "Fleming’s urchin", - "Sea urchins, etc. nei", - "Surf redfish", - "Hairy blackfish", - "Deep-water redfish", - "Panning's blackfish", - "New Caledonia blackfish", - "Chalky cucumber", - "Leopard fish", - "Brownspotted sandfish", - "Brown sandfish", - "Cotton spinner", - "Sand fish", - "Black teatfish", - "Lollyfish", - "White teatfish", - "Bottleneck sea cucumber", - "Pinkfish", - "Snake fish", - "White threads fish", - "Elephant trunkfish", - "Blackspotted sea cucumber", - "Giant red sea cucumber", - "Prickly redfish", - "Amber fish", - "Giant sea cucumber", - "Four-sided sea cucumber", - "Japanese sea cucumber", - "Curryfish", - "Greenfish", - "Royal cucumber", - "Selenka's sea cucumber", - "Sea cucumbers nei", - "Feather stars and sea lilies", - "Ciona", - "Sea potato", - "Sea squirt", - "Red oyas", - "Red bait", - "Red sea squirt", - "Grooved sea squirt", - "Rock violet", - "Sand violet", - "Sea squirts nei", - "Salps", - "Aquatic invertebrates nei", - "Sea spirulina", - "Spirulina nei", - "Unicell. Chlorella green alga", - "Hairy chaetomorpha", - "Floating chaetomorpha", - "Green sea cushion", - "Branched sea cushion", - "Fragile codium", - "Sea mustard", - "Toothed sloton", - "Small seagrape", - "Coarse seagrape", - "Green sea feather", - "Green sea palm", - "Leafy caulerpa", - "Caulerpa seaweeds", - "Sea cactus", - "Green laver", - "Flat green nori", - "Hollow green nori", - "Welded green nori", - "Dark green nori", - "Bright green nori", - "Sea lettuce", - "Lacy sea lettuce", - "Chicory sea lettuce", - "Green seaweeds", - "Brown leafweed", - "Tangle", - "Japanese kelp", - "Sea belt", - "North European kelp", - "Kelps nei", - "Babberlocks", - "Arboreal ferret", - "Wakame", - "Wakame nei", - "Chilean kelp", - "Southern brown kelp", - "Giant kelp", - "Kelp nei", - "Bladder wrack", - "Toothed wrack", - "Adriatic wrack", - "Common rockweed", - "North Atlantic rockweed", - "Wracks nei", - "Sea thong", - "Bull kelp", - "Golden Cystoseira", - "Rough-stemmed sargassum", - "Double-bladed sargassum", - "Flat-stemmed sargassum", - "Common sargassum", - "Serrate sargassum", - "Common Pacific sargassum", - "Fusiform sargassum", - "Crowned sea bell", - "Triangular sea bell", - "Sea bell", - "Sweet-smelling seaweed", - "Olive forked ribbons", - "Limu lipoa", - "Forked ribbons", - "Mozuku", - "Brown seaweeds", - "Crozier weed", - "Tufted sea moss", - "Tattered sea moss", - "Robust sea moss", - "Membraneous phyllophora", - "Phyllophora nei", - "Rock chickory", - "False sea pine", - "Elkhorn sea moss", - "Zanzibar weed", - "Spiny eucheuma", - "Mottled sea club", - "Eucheuma seaweeds nei", - "Marine bindweed", - "Plocamium", - "Rough coral moss", - "Fine coral moss", - "Pacific coral moss", - "Lithothamnion", - "Stone weed", - "Chalk weed", - "Red forkweed", - "False gorgon", - "Leather gracilaria", - "Arcuate gracilaria", - "Dichotomously branched gracila", - "Segmented gracilaria", - "Spiny gracilaria", - "Broadleaf gracilaria", - "Veiled gracilaria", - "Warty gracilaria", - "Gracilaria seaweeds", - "Prostrate gracilaria", - "Clawed sea moss", - "Dulse", - "Sea spaghetti", - "Carragheen (Irish) moss", - "Skottsberg's gigartina", - "Iridea", - "Iridea nei", - "Hackle weed", - "Spurweed", - "Gigartina seaweeds nei", - "Ribboned nori", - "Spotted nori", - "Purple laver", - "Pink laver", - "Laver (Nori)", - "Frilled nori", - "Nori nei", - "Velvet ceramium", - "Common ceramium", - "Pacific ceramium", - "Ballia", - "Red panache", - "Corsican moss", - "Red seabroom", - "Blunt laurenzia", - "Pacific laurenzia", - "Swollen laurenzia", - "Erect sea moss", - "Cladodonta", - "Red delesseria", - "Moniliform sea moss", - "Magellanic ptilonia", - "Red harpoon", - "Red sea plume", - "Harpoon seaweeds", - "Giant gelidium", - "Hairy gelidium", - "Red gelidium", - "Dwarf gelidium", - "Japanese isinglass", - "Gelidium seaweeds", - "Spanish agar", - "Chaffweed", - "Manifold callophyllis", - "Red sea lettuce", - "Landlady's Wig", - "Fleshy dilsea", - "Red seaweeds", - "Neptune-grass", - "Eel-grass", - "Dwarf eel-grass", - "Sea nymph", - "Tule bulrush", - "Tule nei", - "Aquatic plants nei", - "Seaweeds nei", - "Seagrasses nei" - ] - \ No newline at end of file +[ + "Sea lamprey", + "River lamprey", + "Least brook lamprey", + "Western American river lamprey", + "European brook lamprey", + "Western brook lamprey", + "Turkish brook lamprey", + "Pacific brook lamprey", + "Silver lamprey", + "Ohio lamprey", + "Chestnut lamprey", + "Northern brook lamprey", + "Southern brook lamprey", + "Mountain brook lamprey", + "Ukrainian brook lamprey", + "Carpathian lamprey", + "Greek brook lamprey", + "Korean lamprey", + "Caspian lamprey", + "Arctic lamprey", + "Siberian lamprey", + "Western Transcaucasian lamprey", + "Far Eastern brook lamprey", + "Lombardy brook lamprey", + "Alaskan brook lamprey", + "American brook lamprey", + "Pacific lamprey", + "Northern California lamprey", + "Kern brook lamprey", + "Pit–Klamath brook lamprey", + "Vancouver lamprey", + "Miller Lake lamprey", + "Klamath lamprey", + "Jacona lamprey", + "Chapala lamprey", + "Lampreys nei", + "Chilean lamprey", + "Australian lamprey", + "Pouched lamprey", + "Brown hagfish", + "Hagfish", + "Inshore hagfish", + "Pacific hagfish", + "Broadgilled hagfish", + "Hagfishes nei", + "Horn shark", + "Crested bullhead shark", + "Japanese bullhead shark", + "Mexican hornshark", + "Port Jackson shark", + "Galapagos bullhead shark", + "Whitespotted bullhead shark", + "Zebra bullhead shark", + "Bullhead sharks", + "Frilled shark", + "African frilled shark", + "Bluntnose sixgill shark", + "Bigeyed sixgill shark", + "Sharpnose sevengill shark", + "Broadnose sevengill shark", + "Frilled and cow sharks", + "Basking shark", + "Sand tiger shark", + "Indian sand tiger", + "Smalltooth sand tiger", + "Bigeye sand tiger shark", + "Goblin shark", + "Crocodile shark", + "Megamouth shark", + "Thresher", + "Pelagic thresher", + "Bigeye thresher", + "Thresher sharks nei", + "Shortfin mako", + "Longfin mako", + "Mako sharks", + "Porbeagle", + "Salmon shark", + "Great white shark", + "Mackerel sharks, porbeagles nei", + "Mackerel sharks", + "Zebra shark", + "Tasselled wobbegong", + "Japanese wobbegong", + "Spotted wobbegong", + "Ornate wobbegong", + "Northern wobbegong", + "Cobbler wobbegong", + "Nurse shark", + "Short-tail nurse shark", + "Nurse sharks nei", + "Tawny nurse shark", + "Indonesia speckled carpetshark", + "Papuan epaulette shark", + "Epaulette shark", + "Hooded carpetshark", + "Speckled carpetshark", + "Arabian carpetshark", + "Bluespotted bambooshark", + "Grey bambooshark", + "Slender bambooshark", + "Whitespotted bambooshark", + "Brownbanded bambooshark", + "Burmese bambooshark", + "Hasselt's bambooshark", + "Bamboosharks nei", + "Whale shark", + "Blind shark", + "Bluegray carpetshark", + "Barbelthroat carpetshark", + "Taiwan saddled carpetshark", + "Saddle carpetshark", + "Collared carpetshark", + "Rusty carpetshark", + "Necklace carpetshark", + "Carpet sharks", + "Roughtail catshark", + "Australian sawtail catshark", + "Gecko catshark", + "Blackmouth catshark", + "Mouse catshark", + "Broadfin sawtail catshark", + "Peppered catshark", + "African sawtail catshark", + "Blacktip sawtail catshark", + "Dwarf sawtail catshark", + "Atlantic sawtail catshark", + "Crest-tail catsharks nei", + "Small-spotted catshark", + "Nursehound", + "Polkadot catshark", + "Boa catshark", + "Yellowspotted catshark", + "West African catshark", + "Brownspotted catshark", + "Freckled catshark", + "Whitesaddled catshark", + "Blotched catshark", + "Chain catshark", + "Cloudy catshark", + "Dwarf catshark", + "Catsharks, nursehounds nei", + "Narrowmouthed catshark", + "Redspotted catshark", + "Narrowtail catshark", + "Slender catshark", + "Australian spotted catshark", + "Gulf catshark", + "Australian marbled catshark", + "Coral catshark", + "Puffadder shyshark", + "Brown shyshark", + "Dark shyshark", + "African spotted catshark", + "Izak catshark", + "Campeche catshark", + "McMillan's cat shark", + "Blackgill catshark", + "Salamander shark", + "Filetail catshark", + "Atlantic ghost catshark", + "Brown catshark", + "Hoary catshark", + "Longfin catshark", + "Smallbelly catshark", + "Broadnose catshark", + "Japanese catshark", + "Longnose catshark", + "Iceland catshark", + "Longhead catshark", + "Flathead catshark", + "Madeira catshark", + "Ghost catshark", + "Smalleye catshark", + "Largenose catshark", + "Smallfin catshark", + "Spatulasnout catshark", + "Deep-water catshark", + "Broadgill catshark", + "Saldanha catshark", + "Pale catshark", + "South China catshark", + "Spongehead catshark", + "Panama ghost catshark", + "Borneo catshark", + "Deep-water catsharks", + "Kanakorum catshark", + "Australian blackspot catshark", + "Arabian catshark", + "Speckled catshark", + "Blackspotted catshark", + "Dusky catshark", + "New Zealand catshark", + "Bristly catshark", + "Spotless catshark", + "Lined catshark", + "Mud catshark", + "Tiger catshark", + "Quagga catshark", + "Onefin catshark", + "Reticulated swellshark", + "Draughtsboard shark", + "Australian swellshark", + "Whitefinned swellshark", + "Indian swellshark", + "Balloon shark", + "Blotchy swell shark", + "Swellshark", + "Lollipop catshark", + "Striped catshark", + "Barbeled catshark", + "Leopard catshark", + "Catsharks, etc. nei", + "Blue shark", + "Daggernose shark", + "Broadfin shark", + "Whitenose shark", + "Sandbar shark", + "Graceful shark", + "Blacktip shark", + "Blacktip reef shark", + "Grey reef shark", + "Pigeye shark", + "Borneo shark", + "Blacknose shark", + "Nervous shark", + "Oceanic whitetip shark", + "Smalltail shark", + "Whitecheek shark", + "Creek whaler", + "Dusky shark", + "Silky shark", + "Bull shark", + "Silvertip shark", + "Copper shark", + "Spinner shark", + "Blackspot shark", + "Night shark", + "Hardnose shark", + "Finetooth shark", + "Bignose shark", + "Galapagos shark", + "Pondicherry shark", + "Caribbean reef shark", + "Spot-tail shark", + "Australian blacktip shark", + "Blacktail reef shark", + "Carcharhinus sharks nei", + "Tiger shark", + "Spadenose shark", + "Whitetip reef shark", + "Lemon shark", + "Sicklefin lemon shark", + "Sliteye shark", + "Ganges shark", + "Speartooth shark", + "Atlantic sharpnose shark", + "Milk shark", + "Brazilian sharpnose shark", + "Pacific sharpnose shark", + "Grey sharpnose shark", + "Caribbean sharpnose shark", + "Australian sharpnose shark", + "Sharpnose sharks nei", + "Requiem sharks nei", + "Winghead shark", + "Smooth hammerhead", + "Scalloped bonnethead", + "Whitefin hammerhead", + "Scalloped hammerhead", + "Scoophead", + "Smalleye hammerhead", + "Bonnethead", + "Great hammerhead", + "Hammerhead sharks nei", + "Hammerhead sharks, etc. nei", + "Gummy shark", + "Grey smooth-hound", + "Dusky smooth-hound", + "Sharptooth smooth-hound", + "Striped smooth-hound", + "Spotless smooth-hound", + "Brown smooth-hound", + "Smalleye smooth-hound", + "Spotted estuary smooth-hound", + "Sicklefin smooth-hound", + "Starspotted smooth-hound", + "Narrownose smooth-hound", + "Smooth-hound", + "Narrowfin smooth-hound", + "Starry smooth-hound", + "Speckled smooth-hound", + "Arabian smooth-hound", + "Whitespotted smooth-hound", + "Blackspotted smooth-hound", + "Humpback smooth-hound", + "Smooth-hounds nei", + "Tope shark", + "Sharpfin houndshark", + "Leopard shark", + "Spotted houndshark", + "Sharptooth houndshark", + "Banded houndshark", + "Longnose houndshark", + "Bigeye houndshark", + "Sailback houndshark", + "Blacktipe tope", + "Whiskery shark", + "Japanese topeshark", + "Whitefin topeshark", + "Flapnose houndshark", + "Houndsharks, smoothhounds nei", + "False catshark", + "Hooktooth shark", + "Snaggletooth shark", + "Whitetip weasel shark", + "Atlantic weasel shark", + "Straight-tooth weasel shark", + "Slender weasel shark", + "Sicklefin weasel shark", + "Barbeled houndshark", + "Harlequin catshark", + "Cuban ribbontail catshark", + "Pygmy ribbontail catshark", + "African ribbontail catshark", + "Slender smooth-hound", + "Graceful catshark", + "Ground sharks", + "Greenland shark", + "Little sleeper shark", + "Pacific sleeper shark", + "Roughskin spurdog", + "Mandarin dogfish", + "Taillight shark", + "Longnose pygmy shark", + "Longnose spurdog", + "Cuban dogfish", + "Japanese spurdog", + "Picked dogfish", + "Shortspine spurdog", + "Cyrano spurdog", + "Blacktailed spurdog", + "Shortnose spurdog", + "Dogfishes nei", + "Gulper shark", + "Little gulper shark", + "Leafscale gulper shark", + "Lowfin gulper shark", + "Needle dogfish", + "Dumb gulper shark", + "Smallfin gulper shark", + "Taiwan gulper shark", + "Mosaic gulper shark", + "Blackfin gulper shark", + "Black gulper shark", + "Gulper sharks nei", + "Velvet belly", + "Blurred smooth lantern shark", + "Shorttail lanternshark", + "Lined lanternshark", + "Great lanternshark", + "Smooth lanternshark", + "Broadbanded lanternshark", + "Southern lanternshark(Lucifer)", + "Carribean lanternshark", + "Blackbelly lanternshark", + "Mollers lantern shark", + "African lanternshark", + "Fringfin lanternshark", + "Thorny lanternshark", + "Splendid lanternshark", + "Brown lanternshark", + "Hawaiian lanternshark", + "Green lanternshark", + "Combtoothed lanternshark", + "Lanternsharks nei", + "Cookie cutter shark", + "Largetooth cookiecutter shark", + "Pygmy shark", + "Birdbeak dogfish", + "Rough longnose dogfish", + "Arrowhead dogfish", + "Longsnout dogfish", + "Deania dogfishes nei", + "Whitetail dogfish", + "Sherwood dogfish", + "Portuguese dogfish", + "Longnose velvet dogfish", + "Shortnose velvet dogfish", + "Roughskin dogfish", + "Plunket shark", + "Smallmouth knifetooth dogfish", + "Knifetooth dogfish", + "Largespine velvet dogfish", + "Velvet dogfish", + "Kitefin shark", + "Black dogfish", + "Granular dogfish", + "Bareskin dogfish", + "Combtooth dogfish", + "Ornate dogfish", + "Whitefin dogfish", + "Centroscyllium dogfishes nei", + "Hooktooth dogfish", + "Smalleye pygmy shark", + "Spined pygmy shark", + "Dogfish sharks nei", + "Dogfishes and hounds nei", + "Longnose sawshark", + "Japanese sawshark", + "Shortnose sawshark", + "Bahamas sawshark", + "Sixgill sawshark", + "Sawsharks nei", + "Angelshark", + "Sawback angelshark", + "African angelshark", + "Argentine angelshark", + "Australian angelshark", + "Pacific angelshark", + "Sand devil", + "Taiwan angleshark", + "Japanese angelshark", + "Clouded angelshark", + "Smoothback angelshark", + "Ornate angelshark", + "Ocellated angelshark", + "Angular angel shark", + "Hidden angel shark", + "Angelsharks, sand devils nei", + "Angular roughshark", + "Sailfin roughshark", + "Prickly dogfish", + "Caribbean roughshark", + "Japanese roughshark", + "Bramble shark", + "Prickly shark", + "Dogfish sharks, etc. nei", + "Short-snouted shovelnose ray", + "Eastern shovelnose ray", + "Western shovelnose ray", + "Thornback guitarfish", + "Whitespotted wedgefish", + "Giant guitarfish", + "African wedgefish", + "Annandale's guitarfish", + "Bluntnose guitarfish", + "Lesser guitarfish", + "Blackchin guitarfish", + "Chola guitarfish", + "Pacific guitarfish", + "Halavi ray", + "Slender guitarfish", + "Whitespotted guitarfish", + "Whitesnout guitarfish", + "Grayspottted guitarfish", + "Speckled guitarfish", + "Shovelnose guitarfish", + "Common guitarfish", + "Brown guitarfish", + "Thouin ray", + "Giant shovelnose ray", + "Brazilian guitarfish", + "Granulated guitarfish", + "Atlantic guitarfish", + "Guitarfishes nei", + "Banded guitarfish", + "Bowmouth guitarfish", + "Southern fiddler", + "Magpie fiddler ray", + "Guitarfishes, etc. nei", + "Pointed sawfish", + "Dwarf sawfish", + "Largetooth sawfish", + "Smalltooth sawfish", + "Common sawfish", + "Longcomb sawfish", + "Sawfishes", + "Blue skate", + "Thornback ray", + "Starry ray", + "Spotted ray", + "Blonde ray", + "Sandy ray", + "Shagreen ray", + "Yellowspotted skate", + "Small-eyed ray", + "Cuckoo ray", + "Longnosed skate", + "Undulate ray", + "Roughbelly skate", + "Starry skate", + "Prow-nose skate", + "Spotted skate", + "Prickly brown ray", + "Roundel skate", + "Wedgenose skate", + "Velez ray", + "White skate", + "Longnose skate", + "Bigmouth skate", + "Rondelet's ray", + "Round ray", + "Antarctic starry skate", + "Ocellate skate", + "African ray", + "Mediterranean starry ray", + "Sydney skate", + "Broad skate", + "Deep-water ray", + "Bigelow's ray", + "Big skate", + "Bullis skate", + "Blackspot skate", + "Spotback skate", + "Munchskin skate", + "White-spotted skate", + "Finspot ray", + "Cortez' ray", + "Eyespot skate", + "Ghost skate", + "Violet skate", + "Clearnose skate", + "Ecuatorial ray", + "Little skate", + "Freckled skate", + "Greenback skate", + "Arctic skate", + "California ray", + "Shorttail skate", + "Barndoor skate", + "Rattail skate", + "Thornback skate", + "Leopard skate", + "Sailray", + "Madeiran ray", + "Maltese ray", + "Brown ray", + "Rough skate", + "Norwegian skate", + "Winter skate", + "Spreadfin skate", + "Argus skate", + "Speckled ray", + "Slime skate", + "Rough ray", + "Smoothback skate", + "Raja rays nei", + "Eaton's skate", + "McCain's skate", + "Murray's skate", + "Deep-sea skate", + "Aleutian skate", + "Sandpaper skate", + "Kerguelen sandpaper skate", + "Commander skate", + "Dark-belly skate", + "Pale ray", + "Alaska skate", + "Richardson's ray", + "Flathead skate", + "Longnose deep-sea skate", + "Spinetail ray", + "Spiny skate", + "Roughtail skate", + "Okhotsk skate", + "Broadnose skate", + "Patagonian skate", + "Cuphead skate", + "Bathyraja rays nei", + "Longtail skate", + "Cuban legskate", + "Smoothnose legskate", + "Roughnose legskate", + "Triangular legskate", + "Southern round skate", + "Soft skate", + "Smooth skate", + "Krefft's ray", + "African pygmy skate", + "Allens skate", + "Smooth deep-sea skate", + "Peacock skate", + "Prickly deep-sea skate", + "Dapple-bellied softnose skate", + "New Zealand smooth skate", + "Yellownose skate", + "New Zealand rough skate", + "Rio skate", + "Blotched sand skate", + "Shortfin sand skate", + "Psammobatis sand skates nei", + "Smallnose fanskate", + "Bignose fanskate", + "Blue ray", + "Bigthorn skate", + "Rays and skates nei", + "Whip stingray", + "Southern stingray", + "Plain maskray", + "Bennett's stingray", + "Short-tail stingray", + "Whiptail stingray", + "Roughtail stingray", + "Diamond stingray", + "Estuary stingray", + "Sharpsnout stingray", + "Longnose stingray", + "Blue-spotted stingray", + "Pelagic stingray", + "Mekong stingray", + "Painted maskray", + "Longtail stingray", + "Daisy stingray", + "Smalleye stingray", + "Common stingray", + "Atlantic stingray", + "Bluntnose stingray", + "Thorntail stingray", + "Tortonese's stingray", + "Pale-edged stingray", + "Stingrays nei", + "Cowtail stingray", + "Round stingray", + "Ribbontail stingray", + "Round ribbontail ray", + "Porcupine ray", + "Butterfly ray", + "Bleeker's whipray", + "Freshwater whipray", + "Dragon stingray", + "Pink whipray", + "Sharpnose stingray", + "Mangrove whipray", + "Scaly whipray", + "Jenkins whipray", + "Blackedge whipray", + "Marbled whipray", + "Pacific chupare", + "Chupare stingray", + "White-rimmed stingray", + "Black-spotted whipray", + "Honeycomb stingray", + "Leopard whipray", + "Dwarf whipray", + "Stingrays, butterfly rays nei", + "South American freshwater stin", + "Longheaded eagle ray", + "Spotted eagle ray", + "Common eagle ray", + "Australian bull ray", + "Bat eagle ray", + "Bullnose eagle ray", + "Southern eagle ray", + "Purple eagle ray", + "Snouted eagle ray", + "Eagle ray", + "Japanese eagle ray", + "Rough eagle ray", + "Bull ray", + "Rough cownose ray", + "Cownose ray", + "Ticon cownose ray", + "Flapnose ray", + "Oman cownose ray", + "Lusitanian cownose ray", + "Australian cownose ray", + "Pacific cownose ray", + "Mottled eagle ray", + "Banded eagle ray", + "Ornate eagle ray", + "Eagle rays nei", + "Giant manta", + "Manta rays", + "Longhorned mobula", + "Lesser devil ray", + "Spinetail mobula", + "Shortfin devil ray", + "Devil fish", + "Munk's devil ray", + "Lesser Guinean devil ray", + "Chilean devil ray", + "Smoothtail mobula", + "Mobula nei", + "Mantas, devil rays nei", + "Spiny butterfly ray", + "Australian butterfly ray", + "Longsnout butterfly ray", + "Japanese butterflyray", + "California butterfly ray", + "Smooth butterfly ray", + "Long-tailed butterfly ray", + "Tentacled butterfly ray", + "Zonetail butterfly ray", + "Butterfly rays nei", + "Sixgill stingray", + "Western shovelnose stingaree", + "Striped stingaree", + "Masked stingaree", + "Sandyback stingaree", + "Circular stingaree", + "Spot-on-spot round ray", + "Crossback stingaree", + "Wide stingaree", + "Patchwork stingaree", + "Spotted stingaree", + "Haller's round ray", + "Yellow stingray", + "Lobed stingaree", + "Spotted round ray", + "Mitotic stingaree", + "Coastal stingaree", + "Sparsely-spotted stingaree", + "Yellowback stingaree", + "Common stingaree", + "Greenback stingaree", + "Brown stingaree", + "Spiny-tail round ray", + "Chilean round ray", + "Munda round ray", + "Dwarf round ray", + "Reticulate round ray", + "Rogers' round ray", + "Fake round ray", + "Spotted legskate", + "Black legskate", + "Deep-water stingray", + "Rays, stingrays, mantas nei", + "Rosette torpedo", + "Pacific electric ray", + "New Zealand torpedo", + "Black-spotted torpedo", + "Ringed torpedo", + "Shorttail torpedo", + "Marbled electric ray", + "Electric ray", + "Panther electric ray", + "Peruvian torpedo", + "Variable torpedo ray", + "Trapezoid torpedo", + "Common torpedo", + "Chilean torpedo", + "Argentine torpedo", + "Torpedo rays", + "Australian numbfish", + "Electric rays nei", + "Blind torpedo", + "Ocellated electric ray", + "Natal electric ray", + "Brazilian electric ray", + "Brown numbfish", + "Giant electric ray", + "Slender electric ray", + "Tasmanian numbfish", + "Spotted numbfish", + "Vermiculate electric ray", + "Banded numbfish", + "Onefin electric ray", + "Numbray", + "Blind electric ray", + "Oval electric ray", + "Electric rays, etc. nei", + "Rabbit fish", + "Silver chimaera", + "Spotted ratfish", + "Smalleyed rabbitfish", + "African chimaera", + "Philippine chimaera", + "Blackfin ghostshark", + "Large-eyed rabbitfish", + "Dark ghost shark", + "Purple chimaera", + "Ratfishes nei", + "Straightnose rabbitfish", + "Pacific spookfish", + "Knife-nosed chimaeras nei", + "Smallspine spookfish", + "Pacific longnose chimaera", + "Longnose chimaeras", + "Sicklefin chimaera", + "Ghost shark", + "Plownose chimaera", + "Cape elephantfish", + "Elephantfishes, etc. nei", + "Chimaeras, etc. nei", + "Australian lungfish", + "South American lungfish", + "Coelacanth", + "Reedfish", + "Marbled lungfish", + "West African lungfish", + "African lungfishes", + "Sturgeon", + "Danube sturgeon(=Osetr)", + "Adriatic sturgeon", + "Sterlet sturgeon", + "Starry sturgeon", + "Fringebarbel sturgeon", + "Lake sturgeon", + "Atlantic sturgeon", + "White sturgeon", + "Shortnose sturgeon", + "Siberian sturgeon", + "Amur sturgeon", + "Yangtze sturgeon", + "Green sturgeon", + "Sakhalin sturgeon", + "Persian sturgeon", + "Chinese sturgeon", + "Japanese sturgeon", + "Shovelnose sturgeon", + "Pallid sturgeon", + "Alabama sturgeon", + "Beluga", + "Kaluga", + "Dwarf sturgeon", + "Amu Darya sturgeon", + "Syr Darya sturgeon", + "Sturgeons nei", + "Mississippi paddlefish", + "Chinese swordfish", + "Bowfin", + "Longnose gar", + "Florida gar", + "Shortnose gar", + "Spotted gar", + "Cuban gar", + "Alligator gar", + "Tropical gar", + "Gars nei", + "Atlantic herring", + "Pacific herring", + "Dogtooth herring", + "Bleeker smoothbelly sardinella", + "Smoothbelly sardinella", + "Spotted sardinella", + "Caspian shad", + "Pontic shad", + "American shad", + "Allis shad", + "Twaite shad", + "Alewife", + "Blueback shad", + "Hickory shad", + "Caspian marine shad", + "Alabama shad", + "Caspian anadromous shad", + "Black Sea shad", + "Saposhnikovi shad", + "Agrakhan shad", + "Shads nei", + "Allis and twaite shads", + "Deepbody sardinella", + "Yellowtail sardinella", + "Goldstripe sardinella", + "Indian oil sardine", + "Blacktip sardinella", + "Fringescale sardinella", + "Sind sardinella", + "Round sardinella", + "East African sardinella", + "Mauritian sardinella", + "Madeiran sardinella", + "White sardinella", + "Japanese sardinella", + "Bali sardinella", + "Brazilian sardinella", + "Fiji sardinella", + "Sardinellas nei", + "Japanese pilchard", + "California pilchard", + "South American pilchard", + "Southern African pilchard", + "Australian pilchard", + "Kura shad", + "Caspian shads", + "Lake Tanganyika sprat", + "American gizzard shad", + "Threadfin shad", + "Amazon spinejaw sprat", + "Losera fangtooth pellonuline", + "Smalltoothed pellonula", + "Bigtoothed pellonula", + "Chacunda gizzard shad", + "Brazilian menhaden", + "Argentine menhaden", + "Atlantic menhaden", + "Gulf menhaden", + "Yellowfin menhaden", + "Menhadens nei", + "Borneo River sprat", + "Ganges River sprat", + "Rainbow sardine", + "Slender rainbow sardine", + "Rainbow sardines nei", + "Bonga shad", + "Red-eye round herring", + "Whitehead's round herring", + "Ganges River gizzard shad", + "Burmese river gizzard shad", + "False herring", + "Redear herring", + "Pacific flatiron herring", + "Scaled herring", + "Scaled sardines", + "Kelee shad", + "Dwarf round herring", + "Florida round herring", + "Hilsa shad", + "Laotian shad", + "Reeves shad", + "Toli shad", + "Longtail shad", + "Bloch's gizzard shad", + "Western Pacific gizzard shad", + "Australian river gizzard shad", + "Japanese gizzard shad", + "Arabian gizzard shad", + "Pacific thread herring", + "Atlantic thread herring", + "Slender thread herring", + "Middling thread herring", + "Thread herrings nei", + "Silver-stripe round herring", + "Delicate round herring", + "Ansorge fangtooth pellonuline", + "Nigerian fangtooth pellonuline", + "Indian river shad", + "Chinese gizzard shad", + "Black and Caspian Sea sprat", + "Anchovy sprat", + "Southern Caspian sprat", + "Black-Caspian Sea sprats nei", + "Dotted gizzard shad", + "Atlantic piquitinga", + "Pacific piquitinga", + "European pilchard(=Sardine)", + "Gilchrist's round herring", + "European sprat", + "Falkland sprat", + "Pacific menhaden", + "Bluestripe herring", + "Blacksaddle herring", + "Goto's herring", + "Gulf herring", + "Spotback herring", + "White sardine", + "Lake Tanganyika sardine", + "Araucanian herring", + "River Plate sprat", + "Jenyns's sprat", + "Australian freshwater herring", + "Two-finned round herring", + "Day's round herring", + "Sanaga pygmy herring", + "Roundbelly pellonuline", + "West African pygmy herring", + "Royal sprat", + "Sharpnosed sawtooth pellonul.", + "Lake Mweru sprat", + "Lake Tumba dwarf sprat", + "Thai river sprat", + "Sumatran river sprat", + "Malabar sprat", + "Smoothbelly pellonuline", + "Madagascar round herring", + "Sandy sprat", + "Herrings, sardines nei", + "Dagaas", + "European anchovy", + "Japanese anchovy", + "Argentine anchovy", + "Californian anchovy", + "Anchoveta(=Peruvian anchovy)", + "Southern African anchovy", + "Anchovies nei", + "Rio Negro pygmy anchovy", + "Devis' anchovy", + "Shorthead anchovy", + "Buccaneer anchovy", + "Jurua anchovy", + "Littlefin anchovy", + "Atlantic anchoveta", + "Pacific anchoveta", + "Regan's anchovy", + "Short anchovy", + "Marini's anchovy", + "Bermuda anchovy", + "Longnose anchovy", + "Eigenmann's anchovy", + "Slender anchovy", + "Rio anchovy", + "Panama anchovy", + "Broad-striped anchovy", + "Longfinger anchovy", + "Deep body anchovy", + "Bigfin anchovy", + "Cuban anchovy", + "Bay anchovy", + "Big-eye anchovy", + "Shortfinger anchovy", + "Spicule anchovy", + "Piquitinga anchovy", + "Trinidad anchovy", + "Bigscale anchovy", + "Zabaleta anchovy", + "Cayenne anchovy", + "Allen's anchovy", + "Elongate anchovy", + "Snubnose anchovy", + "Broadband anchovy", + "Guyana anchovy", + "James's anchovy", + "Natterer's anchovy", + "Vaillant's anchovy", + "Anchoviellas nei", + "Goldspotted grenadier anchovy", + "Yangtse grenadier anchovy", + "Longjaw grenadier anchovy", + "Osbeck's grenadier anchovy", + "Japanese grenadier anchovy", + "Bates' sabretooth anchovy", + "Atlantic sabretooth anchovy", + "Sabretooth anchovys nei", + "Sabretoothed thryssa", + "Dusky-hairfin anchovy", + "Gangetic hairfin anchovy", + "Shorthead hairfin anchovy", + "Scaly hairfin anchovy", + "Common hairfin anchovy", + "Commerson's anchovy", + "Bagan anchovy", + "China anchovy", + "Indian anchovy", + "Hardenberg's anchovy", + "Spined anchovy", + "Spotty-face anchovy", + "Andhra anchovy", + "Broadhead anchovy", + "Gulf of Carpenteria anchovy", + "Stolephorus anchovies nei", + "Hamilton's thryssa", + "Orangemouth anchovy", + "Malabar thryssa", + "Moustached thryssa", + "Oblique-jaw thryssa", + "Baelama anchovy", + "Longjaw thryssa", + "Dussumier's thryssa", + "False baelama anchovy", + "Kammal thryssa", + "New Guinea thryssa", + "Whitehead's thryssa", + "Fly River thryssa", + "Short-tail thryssa", + "Wingfin anchovy", + "Anchovies, etc. nei", + "Dorab wolf-herring", + "Whitefin wolf-herring", + "Wolf-herrings nei", + "Bigeye ilisha", + "Indian ilisha", + "Elongate ilisha", + "Coromandel ilisha", + "Javan ilisha", + "Pacific ilisha", + "West African ilisha", + "Lobejaw ilisha", + "Yellowfin river pellona", + "Indian pellona", + "Yellowfin herring", + "Tropical longfin herring", + "Tardoore", + "Guiana longfin herring", + "Amazon hatchet herring", + "Raconda", + "Diadromous clupeoids nei", + "Clupeoids nei", + "Milkfish", + "Naked shellear", + "Airbreathing shellear", + "Hingemouth", + "Beaked salmon", + "Atlantic salmon", + "Sea trout", + "Sevan trout", + "Trouts nei", + "Long-finned charr", + "Golden trout", + "Pink(=Humpback) salmon", + "Chum(=Keta=Dog) salmon", + "Cutthroat trout", + "Masu(=Cherry) salmon", + "Sockeye(=Red) salmon", + "Chinook(=Spring=King) salmon", + "Coho(=Silver) salmon", + "Rainbow trout", + "Apache trout", + "Mexican golden trout", + "Gila trout", + "Pacific salmons nei", + "Brook trout", + "Arctic char", + "Dolly varden", + "Lake trout(=Char)", + "Bull trout", + "Neiva", + "Chars nei", + "Adriatic trout", + "Huchen", + "Japanese huchen", + "Taimen", + "Lenok", + "Salmonids nei", + "Grayling", + "Mongolian grayling", + "Arctic grayling", + "Ayu sweetfish", + "Whitebait smelt", + "Capelin", + "European smelt", + "Rainbow smelt", + "Pond smelt", + "Surf smelt", + "Japanese smelt", + "Eulachon", + "Longfin smelt", + "Smelts nei", + "Greater argentine", + "Argentine", + "Argentines", + "Deep-sea smelt", + "Smalltoothed argentine", + "Argentines nei", + "Northern smoothtounge", + "Silver deepsea smelt", + "Goiter blacksmelt", + "Eared blacksmelt", + "Slender blacksmelt", + "Blacksmelts", + "Deep-sea smelts nei", + "Slender argentine", + "Chinese icefish", + "Clearhead icefish", + "Chinese noodlefish", + "Japanese icefish", + "Icefishes nei", + "Australian grayling", + "Stokell's smelt", + "Cucumberfish", + "Vendace", + "European whitefish", + "Houting", + "Irish pollan", + "Lake(=Common) whitefish", + "Lake cisco", + "Arctic cisco", + "Khadary-whitefish", + "Bloater", + "Kiyi", + "Muksun", + "Broad whitefish", + "Peled", + "Shortnose cisco", + "Sardine cisco", + "Tugun", + "Valaam whitefish", + "Whitefishes nei", + "Sheefish", + "Pygmy whitefish", + "Round whitefish", + "Mountain whitefish", + "Javelin spookfish", + "Barreleye", + "Mirrorbelly", + "Barrel-eye", + "Fangtooth smooth-head", + "Smallscale smooth-head", + "Michael Sars smooth-head", + "Koefoed's smooth-head", + "Baird's slickhead", + "Risso's smooth-head", + "Small scaled brown slickhead", + "Slickheads nei", + "Fiolenti's smooth-head", + "Longfin smooth-head", + "Toothless smooth-head", + "Loosescale smooth-head", + "Krefft's smooth-head", + "Grenadier smooth-head", + "Norman's smooth-head", + "Blackhead salmon", + "Starry smooth-head", + "Abyssal smooth-head", + "Softskin smooth-head", + "Madeiran smooth-head", + "Bluntsnout smooth-head", + "Threadfin slickhead", + "Antillean smooth-head", + "Hairfin smooth-head", + "Longtail slickhead", + "Threadfin smooth-head", + "Luminous slickhead", + "Palebelly searsid", + "Bighead searsid", + "Teardrop tubeshoulder", + "Bigeye searsid", + "Maul's searsid", + "Smallscale searsid", + "Multipore searsid", + "Leaf searsid", + "Legless searsid", + "Shining tubeshoulder", + "Schnakenbeck's searsid", + "Koefoed's searsid", + "Dwarf pencilfish", + "Koaro", + "Tasmanian mudfish", + "Banded kokopu", + "Inanga", + "Shortjaw kokopu", + "Common river galaxias", + "Cape galaxias", + "Tasmanian whitebait", + "Canterbury mudfish", + "Black mudfish", + "Salmonoids nei", + "Alaska blackfish", + "Olympic mudminnow", + "Mudminnow", + "Northern pike", + "Redfin pickerel", + "Amur pike", + "Spark anglemouth", + "Elongated bristlemouth fish", + "Atlantic fangjaw", + "Benttooth bristlemouth", + "Garrick", + "Veiled anglemouth", + "Tan bristlemouth", + "Slender bristlemouth", + "Hidden bristlemouth", + "Bristlemouths", + "Pacific hatchet fish", + "Hatchetfish", + "Half-naked hatchetfish", + "Sladen's hatchet fish", + "Bottlelights", + "Spiny hatchetfish", + "Diaphanous hatchet fish", + "Highlight hatchetfish", + "Silvery lightfish", + "Atlantic pearlside", + "Hatchetfishes nei", + "Richardson's snaggletooth", + "Snaggletooth", + "Boa dragonfish", + "Günther's boafish", + "Longbarb scaly dragonfish", + "Pawnee dragonfish", + "Dana viperfish", + "Sloane's viperfish", + "Proud dragonfish", + "Barbate dragonfish", + "Stoplight loosejaw", + "Valdivia black dragon fish", + "Scaleless black dragonfish", + "Longfin dragonfish", + "Oceanic lightfish", + "Power's deep-water bristle-mou", + "Arapaima", + "Arawana", + "Australian bonytongue", + "Asian bonytongue", + "African bonytongue", + "Clown knifefish", + "Giant featherback", + "Indochina featherback", + "Bronze featherback", + "Knifefishes", + "Reticulate knifefish", + "African knifefish", + "Mooneye", + "Freshwater butterflyfish", + "Elephantnose fish", + "Zambesi parrotfish", + "Bulldog", + "Bottlenose fishes nei", + "Ghost stonebasher", + "Churchill", + "Elephantsnout fishes nei", + "Aba", + "Hawaiian ladyfish", + "Ladyfish", + "Pacific ladyfish", + "West African ladyfish", + "Senegalese ladyfish", + "Tenpounder", + "Ladyfishes nei", + "Tarpon", + "Indo-Pacific tarpon", + "Bonefish", + "Roundjaw bonefish", + "Longfin bonefish", + "Bonefishes nei", + "Gigantura", + "Japanese thread-sail fish", + "Royal flagfin", + "Guinean flagfin", + "Zugmayer's pearleye", + "Pearleyes nei", + "Pearleyes, etc. nei", + "Balbo sabretooth", + "Omosudid", + "Long snouted lancetfish", + "Short snouted lancetfish", + "Lancetfishes nei", + "Daggertooth", + "Southern ocean daggertooth", + "Atlantic barracudina", + "Duckbill barracudina", + "Southern barracudina", + "Antarctic jonasfish", + "Spotted barracudina", + "Ringed barracudina", + "Barracudinas nei", + "Shortnose greeneye", + "Greeneyes", + "Waryfish", + "Blackfin waryfish", + "Grideye fish", + "Spiderfish", + "Abyssal spiderfish", + "Mediterranean spiderfish", + "Tripodfish", + "Bombay-duck", + "Deep-sea lizardfish", + "Highfin lizardfish", + "Snakefish", + "Inotted lizardfish", + "California lizardfish", + "Atlantic lizardfish", + "Variegated lizardfish", + "Redbarred lizardfish", + "Sand lizardfish", + "Triplecross lizardfish", + "Greater lizardfish", + "Brazilian lizardfish", + "Brushtooth lizardfish", + "Gracile lizardfish", + "Longfin lizardfish", + "Clouded lizardfish", + "Lizardfishes nei", + "Large-scaled lantern fish", + "Pacific blackchin", + "Spurcheek lanternfish", + "Stubby lanternfish", + "Roundnose lanternfish", + "Madeira lantern fish", + "Warming’s lanternfish", + "Cocco’s lanternfish", + "Benoit's lanternfish", + "Bermuda lantern fish", + "Reinhardt’s lanternfish", + "Tåning’s lanternfish", + "Spotted lanternfish", + "Wisner's lantern fish", + "Metallic lanternfish", + "Prickly lanternfish", + "Bluntsnout lanternfish", + "Hector's lanternfish", + "Jewel lanternfish", + "Lantern fish", + "Noble lanternfish", + "Slender lanternfish", + "Short-headed lantern fish", + "Small lantern fish", + "Spothead lantern fish", + "Taaning's lantern fish", + "Garman’s lanternfish", + "Flatface lanternfish", + "Horned lanternfish", + "Slopewater lanternfish", + "Anomalous lanternfish", + "Luminous lanternfish", + "Günther’s lanternfish", + "Dofleini's lantern fish", + "Gemellar’s lanternfish", + "Northern lampfish", + "Glacier lantern fish", + "Smallfin lanternfish", + "Skinnycheek lanternfish", + "Electric lantern fish", + "Electron subantarctic", + "Spinetail lanternfish", + "Patchwork lanternfish", + "Patchwork lampfishes", + "Nichol's lanternfish", + "Large-scale lantern fish", + "Waistcoat lanternfish", + "Blue lanternfish", + "Mexican lampfish", + "Lanternfishes nei", + "Pelican eel", + "Paddletail onejaw", + "Bobtail eel", + "Calypso tetra", + "Black neon tetra", + "Banded astyanax", + "Astyanax nei", + "Machaca", + "Mourning tetra", + "Dorada", + "Tiete tetra", + "Cochu's blue tetra", + "Featherfin tetra", + "Buenos Aires tetra", + "Dorado", + "Red piranha", + "San Francisco piranha", + "White piranha", + "Slender piranha", + "Redeye piranha", + "Speckled piranha", + "Blackedge tetra", + "Flametail tetra", + "Cachama", + "Lobetoothed piranha", + "Orangefin tetra", + "Wimple piranha", + "Darter characin", + "Bucktooth tetra", + "Goldstripe characin", + "Swordtail characin", + "Black tetra", + "Pirapatinga", + "Pacu", + "Patinga, hybrid", + "Silver tetra", + "Sailfin tetra", + "Naked characin", + "Copper tetra", + "Royal tetra", + "Croaking tetra", + "Rainbow tetra", + "Cardinal tetra", + "Neon tetra", + "False rummynose tetra", + "Black morpho tetra", + "Glass bloodfin", + "X-ray tetra", + "Dragonfin tetra", + "Blind tetra", + "Blackline penguinfish", + "Characins nei", + "Tambacu, hybrid", + "Tambatinga, hybrid", + "Blackwing hatchetfish", + "Giant hatchetfish", + "Silver hatchetfish", + "Banded leporinus", + "Threespot leporinus", + "Threespot headstander", + "Striped headstander", + "Pongo characin", + "Citharinus nei", + "Trahira", + "Giant trahira", + "Aimara", + "Kafue pike", + "Redspotted tetra", + "Splash tetra", + "Golden pencilfish", + "Streaked prochilod", + "Netted prochilod", + "Black prochilodus", + "Prochilods nei", + "Silver prochilodus", + "Stripped robber", + "Niger tetra", + "Longfin tetra", + "Nurse tetra", + "Barnard's robber", + "Elongate tigerfish", + "Tiger fish", + "Sierra leone dwarf characin", + "Jellybean tetra", + "Sharptooth tetra", + "Payara", + "Biara", + "Pike characin", + "Oneline tetra", + "Spotted citharinid", + "Silver distichodus", + "Sixbar distichodus", + "Grass-eaters nei", + "Banded knifefish", + "Electric eel", + "Black ghost", + "Glass knifefish", + "Longtail knifefish", + "Blue sucker", + "Lost River sucker", + "Longnose sucker", + "White sucker", + "Flannelmouth sucker", + "Largescale sucker", + "Tahoe sucker", + "Gray redhorse", + "Golden redhorse", + "Shorthead redhorse", + "Harelip sucker", + "Bigmouth buffalo", + "Buffalofishes nei", + "Chinese sucker", + "River carpsucker", + "Razorback sucker", + "Cui-ui", + "Spotted sucker", + "Lake chubsucker", + "Northern hog sucker", + "Suckers nei", + "Freshwater bream", + "Freshwater breams nei", + "Common carp", + "Barbless carp", + "Chinese false gudgeon", + "Blackbrow bleak", + "Tench", + "Bleak", + "Barbel", + "Mediterranean barbel", + "Smallmouth yellowfish", + "Clanwilliam yellowfish", + "Spotscale barb", + "Broadband barb", + "Ripon barbel", + "Algerian barb", + "Line-spotted barb", + "Slender barb", + "Straightfin barb", + "Papermouth", + "Largescale yellowfish", + "Threespot barb", + "Common nase", + "Iberian nase", + "Longfin dace", + "Crucian carp", + "Goldfish", + "Japanese white crucian carp", + "Prussian carp", + "White-finned gudgeon", + "Roach", + "Kutum", + "Caspian roach", + "Roaches nei", + "Rudd", + "Orfe(=Ide)", + "Common dace", + "Dnieper chub", + "Chub", + "Vairone", + "Schmidt's dace", + "Issyk-Kul dace", + "Chubs nei", + "Rosy bitterling", + "Bitterling", + "Big-scaled redfin", + "Orangefin labeo", + "Fringed-lipped peninsula carp", + "Kuria labeo", + "Roho labeo", + "Rednose labeo", + "Redeye labeo", + "Ningu", + "Orange River mudfish", + "Moggel", + "Black sharkminnow", + "Rhinofishes nei", + "Mud carp", + "Mrigal carp", + "Reba carp", + "Small scale mud carp", + "Pátzcuaro chub", + "Catla", + "Giant barb", + "Indian glass barb", + "Grass carp(=White amur)", + "Beardless barb", + "Giant danio", + "Sind danio", + "Zebra danio", + "Leopard danio", + "Schneider", + "Chihuahua chub", + "Utah chub", + "Tui chub", + "Humpback chub", + "Bonytail", + "Roundtail chub", + "Hampala barb", + "Silver carp", + "Bighead carp", + "Silver, bighead carps nei", + "Signal barb", + "Kanglang fish", + "Golden shiner", + "Nilem carp", + "Splittail", + "Isok barb", + "Sacramento squawfish", + "Slender rasbora", + "Harlequin rasbora", + "Gangetic scissortail rasbora", + "Silver rasbora", + "Brilliant rasbora", + "Twospot rasbora", + "Thai mahseer", + "Putitor mahseer", + "Tor barb", + "Semah mahseer", + "Seven khramulya", + "Trout barb", + "Emerald shiner", + "Red River shiner", + "Bigeye shiner", + "Bigmouth shiner", + "Arkansas River shiner", + "Blackchin shiner", + "Blacknose shiner", + "Spottail shiner", + "Longnose shiner", + "Yellowfin shiner", + "Ozark minnow", + "Rosyface shiner", + "Bedrock shiner", + "Flagfin shiner", + "Sand shiner", + "Weed shiner", + "Mimic shiner", + "Barbel steed", + "Spotted steed", + "Mola carplet", + "Attentive carplet", + "Silver cyprinid", + "Kinneret bleak", + "Fathead minnow", + "Copper mahseer", + "California roach", + "White amur bream", + "Freshwater minnow", + "Blacknose dace", + "Longnose dace", + "Speckled dace", + "Hornyhead chub", + "Bluehead chub", + "River chub", + "Satinfin shiner", + "Alabama shiner", + "Bluntface shiner", + "Red shiner", + "Proserpine shiner", + "Spotfin shiner", + "Blacktail shiner", + "Oily bitterling", + "Chinese bleak", + "Plains minnow", + "Devils River minnow", + "Roundnose minnow", + "Pike asp", + "Vimba bream", + "Macedonian vimba", + "Lake chub", + "Creek chub", + "Sichel", + "Rainbow gudgeon", + "Iraq blind barb", + "White cloud mountain minnow", + "Central stoneroller", + "Largescale stoneroller", + "Dalmatian barbelgudgeon", + "Sacramento blackfish", + "Hitch", + "Woundfin", + "Least chub", + "Riffle minnow", + "Asp", + "Redside dace", + "Tricolor sharkminnow", + "Danube bleak", + "Tarek", + "Russian bitterling", + "Stone moroko", + "Hoven's carp", + "Chiselmouth", + "Sharpbelly", + "Somalian blind barb", + "Tokyo bitterling", + "Redfin", + "Congo blind barb", + "Black carp", + "Striped shiner", + "Common shiner", + "Oregon chub", + "Wuchang bream", + "Black Amur bream", + "Peamouth", + "Little Colorado spinedace", + "Scaly osman", + "Loach minnow", + "Spotted barb", + "Arulius barb", + "Rosy barb", + "Blackspot barb", + "Pool barb", + "Sumatra barb", + "Ticto barb", + "Spanner barb", + "Asian barbs nei", + "Sharpray", + "Humpback", + "Predatory carp", + "Mongolian redfin", + "Yellowcheek", + "Redtail sharkminnor", + "Flying fox", + "Desert dace", + "Streamline chub", + "Flying barb", + "Lake minnow", + "Cutlips minnow", + "Garnet minnow", + "Flame chub", + "Siamese mud carp", + "Jerdon's carp", + "Iran cave barb", + "Tachanovsky's gudgeon", + "Czekanowski's minnow", + "Belica", + "Cherryfin shiner", + "Ouachita shiner", + "Speckled chub", + "Long pectoral-fin minnow", + "Pearl dace", + "Spikedace", + "River sardine", + "Moapa dace", + "Hardhead", + "Taiwan ku fish", + "Lake salmon", + "Pugnose minnow", + "Blackside dace", + "Northern redbelly dace", + "Southern redbelly dace", + "Finescale dace", + "Eurasian minnow", + "Somalian cavefish", + "Smallscale yellowfin", + "Flathead chub", + "Rock carp", + "Smallscale redfin", + "Relict dace", + "Redside shiner", + "Amur whitefin gudgeon", + "Large razorbelly minnow", + "Chinese lizard gudgeon", + "Sattar snowtrout", + "Snowtrout", + "Golden-line barbel", + "Stumptooth minnow", + "Yellowfin", + "White bream", + "Silver barb", + "Red tailed tinfoil", + "Tinfoil barb", + "Andalusian barbel", + "Naked osman", + "Big-head schizothoracin", + "Cyprinids nei", + "Siamese algae-eater", + "Horseface loach", + "Tiger loach", + "Bengal loach", + "Golden spined loach", + "Guntea loach", + "Pond loach", + "Weatherfish", + "Choi's spiny loach", + "Clown loach", + "Mottled loach", + "Stone loach", + "Tollo", + "Mayan sea catfish", + "New Granada sea catfish", + "Beardless sea catfish", + "Congo sea catfish", + "Madamango sea catfish", + "Blacktip sea catfish", + "Blackfin sea catfish", + "Threadfin sea catfish", + "Sona sea catfish", + "Giant catfish", + "Bronze catfish", + "Salmon catfish", + "Giant seacatfish", + "Giant sea catfish", + "Flatmouth sea catfish", + "Smoothmouth sea catfish", + "Rough-head sea catfish", + "Veined catfish", + "Spotted catfish", + "Engraved catfish", + "Sagor catfish", + "Hardhead sea catfish", + "Kukwari sea catfish", + "Crucifix sea catfish", + "Guinean sea catfish", + "Madagascar sea catfish", + "Smallmouthed salmon catfish", + "Daniel's catfish", + "Spoon-snouted catfish", + "Guri sea catfish", + "Day's catfish", + "Chili sea catfish", + "Lorentz catfish", + "Gafftopsail sea catfish", + "Chilhuil sea catfish", + "Red sea catfish", + "Coco sea catfish", + "Peruvian sea catfish", + "White barbel", + "White sea catfish", + "Soldier catfish", + "Thomas sea catfish", + "Softhead sea catfish", + "Bressou sea catfish", + "Gillbacker sea catfish", + "Brown sea catfish", + "Pemecou sea catfish", + "Passany sea catfish", + "Couma sea catfish", + "Thinspine sea catfish", + "Sea catfishes nei", + "Talking catfish", + "Whitebarred catfish", + "Blue-eye catfish", + "Ripsaw catfish", + "Raphael catfish", + "Granulated catfish", + "Singing catfish", + "Black catfish", + "Jaguar catfish", + "Manduba", + "Bottlenose catfish", + "Cobbler", + "Long-tailed catfish", + "Silver tandan", + "Narrowfront tandan", + "Shortfin tandan", + "Pale yellow tandan", + "Merauke tandan", + "Gray eel-catfish", + "Striped eel catfish", + "Papuan eel-catfish", + "Stinging eel catfish", + "Darkfin eel catfish", + "Eeltail catfishes", + "Whitelipped eel catfish", + "Tandan catfish", + "Freshwater cobbler", + "Wels(=Som) catfish", + "Amur catfish", + "Eurasian catfish", + "Chinese large-mouth catfish", + "Glass catfish", + "Striped glass catfish", + "Glass catfishes", + "Butter catfish", + "Wallago", + "Hilda's grunter", + "Bubu", + "Blacklancer catfish", + "False black lancer", + "Asian redtail catfish", + "Dotted catfish", + "Flatnose catfish", + "African bullhead", + "Asian bumblebee catfish", + "Chinese longsnout catfish", + "Gangetic mystus", + "Long whiskers catfish", + "Striped dwarf catfish", + "Twospot catfish", + "Bagrid catfish", + "Kibonde", + "Kokuni", + "Kukumai", + "Aluminum catfish", + "Ornate bagrid", + "Black catfishes nei", + "Rita", + "Bayad", + "Semutundu", + "Naked catfishes", + "Spatula-barbeled catfish", + "Yellow catfish", + "Channel catfish", + "Blue catfish", + "Headwater catfish", + "Yaqui catfish", + "Catfishes nei", + "Channel-blue catfish, hybrid", + "White catfish", + "Snail bullhead", + "Flat bullhead", + "Spotted bullhead", + "Black bullhead", + "Yellow bullhead", + "Brown bullhead", + "Mexican blindcat", + "Widemouth blindcat", + "Flathead catfish", + "Slender madtom", + "Stonecat", + "Tadpole madtom", + "Margined madtom", + "Brown madtom", + "Neosho madtom", + "Northern madtom", + "Toothless blindcat", + "Goonch", + "Mountain barbel", + "Squarehead catfish", + "Angler catfish", + "Glass schilbid", + "Silond catfish", + "Indian potasi", + "African butter catfish", + "Shoulderspot catfish", + "Eel catfish", + "Indian blind catfish", + "Philippine catfish", + "Hong Kong catfish", + "North African catfish", + "Bighead catfish", + "Mudfish", + "Blunt-toothed African catfish", + "Snake catfish", + "Torpedo-shaped catfishes nei", + "Africa-bighead catfish, hybrid", + "African catfish", + "Sampa", + "Longtail catfish", + "Electric catfish", + "Smallmouth electric catfish", + "Kumakuma", + "Gilded catfish", + "Zebra catfish", + "Laulao catfish", + "Zamurito", + "Slobbering catfish", + "Porthole shovelnose catfish", + "Tigerstriped catfish", + "South American catfish", + "Mandi", + "Capaz", + "Duckbill catfish", + "Leopard catfish", + "Redtail catfish", + "Flatwhiskered catfish", + "Graceful pimelodella", + "Coroatá", + "Jaú", + "Spotted sorubim", + "Barred sorubim", + "Tiger sorubim", + "Sorubims nei", + "Pati", + "Highwaterman catfish", + "Firewood catfish", + "Candiru", + "Porthole catfish", + "Cascarudo", + "Bronze corydoras", + "Peppered corydoras", + "Atipa", + "Whiptail catfish", + "Zucchini catfish", + "Golden otocinclus", + "Snow pleco", + "Amazon sailfin catfish", + "Suckermouth catfish", + "Wara wara", + "Armored catfish", + "Royal panaque", + "Mekong giant catfish", + "Pangas catfish", + "Striped catfish", + "Spot pangasius", + "Shortbarbel pangasius", + "Giant pangasius", + "Pangas catfishes nei", + "Stinging catfish", + "Bigeye squeaker", + "Angel squeaker", + "Bugeye squeaker", + "Clown squeaker", + "Featherfin squeaker", + "Orangestriped squeaker", + "Blotched upsidedown catfish", + "Blackspotted squeaker", + "Malawi squeaker", + "Onespot squeaker", + "Congo squeaker", + "Wahrindi", + "Plain squeaker", + "Upsidedown catfishes", + "Gnarled catfish", + "Bark catfish", + "Sevenbarbed banjo", + "Banjo", + "Banded banjo", + "Camouflaged catfish", + "Guitarrita", + "Ecuador banjo catfish", + "Freshwater siluroids nei", + "Narrownecked oceanic eel", + "Duckbill oceanic eel", + "European eel", + "Indian mottled eel", + "Japanese eel", + "American eel", + "Short-finned eel", + "Speckled longfin eel", + "African longfin eel", + "Giant mottled eel", + "New Zealand longfin eel", + "Mottled eel", + "River eels nei", + "Red eel", + "Allardice's moray", + "Turkey moray", + "Spotjaw moray", + "Banded moray", + "Speckled moray", + "Green moray", + "California moray", + "Spotted moray", + "Ocellated moray", + "Yellow-edged moray", + "Undulated moray", + "Purplemouth moray", + "Highfin moray", + "Sharktooth moray", + "Polygon moray", + "Brown moray", + "Dark moray", + "Canary moray", + "Kidako moray", + "Ghost moray", + "Starry moray", + "Laced moray", + "Broadbanded moray", + "Mediterranean moray", + "Reticulate moray", + "Stout moray", + "White-spotted moray", + "Jewel moray", + "Honeycomb moray", + "Hourglass moray", + "Bayer's moray", + "Leopard moray eel", + "Fangtooth moray", + "Viper moray", + "Zebra moray", + "Chain moray", + "Snowflake moray", + "Barred moray", + "Pebbletooth moray", + "White ribbon eel", + "Ribbon moray", + "Greyface moray", + "Peppered moray", + "Slender giant moray", + "Giant slender moray", + "Needle-tooth moray", + "Jigsaw moray", + "Morays nei", + "Slender shortfaced eel", + "Mauritanian shortfaced eel", + "Longtailed shortfaced eel", + "Shorttailed shortfaced eel", + "Spaghetti eel", + "Spaghetti eels nei", + "Shorttail pike conger", + "Daggertooth pike conger", + "Common pike conger", + "Pike-congers nei", + "Guinean pike conger", + "Red pike conger", + "Yellow pike conger", + "Indian pike conger", + "Dogface witch-eel", + "Facciola's sorcerer", + "Blacktail pike-conger", + "Slender duckbill eel", + "Whipsnout sorcerer", + "European conger", + "Argentine conger", + "Longfin African conger", + "American conger", + "Whitespotted conger", + "Manytooth conger", + "Conger eels nei", + "Longnose conger", + "Maputo conger", + "Evermann's conger", + "Whitespotted garden eel", + "Purplemouthed conger", + "Silvery conger", + "Bandtooth conger", + "Short-tail conger", + "Slender conger", + "Slender-tail conger", + "Spotted garden-eel", + "Margintail conger", + "Guinean conger", + "Conger eels, etc. nei", + "Spotted snake eel", + "Ornate Snake Eel", + "Rufus snake-eel", + "Punctuated snake-eel", + "Shrimp eel", + "Bluntnose snake-eel", + "Yellow snake-eel", + "Serpent eel", + "Short-tailed viper-eel", + "Johnston snake-eel", + "Short-maned sand-eel", + "Sailfin eel", + "Rice-paddy eel", + "Longfin snake-eel", + "Hoeven's snake eel", + "Spoon-nose eel", + "African spoon-nose eel", + "Speckled worm-eel", + "Leaden worm eel", + "Indo-Pacific slender worm-eel", + "Maimed snake eel", + "Acned snake-eel", + "Slender worm-eel", + "Saddled snake-eel", + "Oriental worm-eel", + "Sharpnose sand-eel", + "Mustachioed snake-eel", + "Finny snake eel", + "Horsehair eel", + "Ordinary eel", + "Stippled spoon-nose eel", + "Painted eel", + "Slantlip eel", + "Leopard eel", + "Shorttail snake eel", + "Crocodile snake eel", + "Stripe eel", + "Fangtooth snake-eel", + "Key worm eel", + "Freshwater snake-eel", + "Sooty sand-eel", + "Inhaca fringelip", + "Flappy snake-eel", + "Snake eels nei", + "Shortbelly eel", + "Batnose eel", + "Deep-water arrowtooth eel", + "Muddy arrowtooth eel", + "Snubnosed eel", + "Kaup's arrowtooth eel", + "Grey cutthroat eel", + "Basketwork eel", + "Cutthroat eels nei", + "Avocet snipe eel", + "Slender snipe eel", + "Flatnose xenocongrid eel", + "Mottled false moray", + "False moray", + "Bean's sawtooth eel", + "Sawtooth eels nei", + "Black serrivomerid eel", + "Eels, morays, congers nei", + "Hawaiian halosaurid fish", + "Abyssal halosaur", + "Australian halosaur", + "Halosaurs nei", + "Spiny eel", + "Spiny-back eel", + "Deep-sea spiny eels nei", + "Garfish", + "Cape needlefish", + "Keeltail needlefish", + "Flat needlefish", + "Senegal needlefish", + "Spottail needlefish", + "Californian needlefish", + "Timucu", + "Atlantic needlefish", + "Banded needlefish", + "Agujon needlefish", + "Hound needlefish", + "Red Sea houndfish", + "Needlefishes nei", + "Freshwater garfish", + "Needlefishes, etc. nei", + "Atlantic saury", + "Dwarf saury", + "Pacific saury", + "Sauries nei", + "Hardhead halfbeak", + "Tropical halfbeak", + "Choelo halfbeak", + "Slender halfbeak", + "Skipper halfbeak", + "Common halfbeak", + "African halfbeak", + "Japanese halfbeak", + "California halfbeak", + "Asian pencil halfbeak", + "Congaturi halfbeak", + "Quoy's garfish", + "Sind halfbeak", + "Simpletooth halfbeak", + "Black-barred halfbeak", + "Ballyhoo halfbeak", + "Yellowtip halfbeak", + "Balao halfbeak", + "Jumping halfbeak", + "Halfbeaks nei", + "Ribbon halfbeak", + "Flying halfbeak", + "Long billed halfbeak", + "Tropical two-wing flyingfish", + "Japanese flyingfish", + "Short-nosed flyingfish", + "Yellowing flyingfish", + "Sharpchin flyingfish", + "Shortfin flyingfish", + "Bluntnose flyingfish", + "Sailfin flyingfish", + "African sailfin flyingfish", + "Halfbeak", + "Atlantic smallwing flyingfish", + "Fourwing flyingfish", + "Black wing flyingfish", + "Bony flyingfish", + "Spotfin flyingfish", + "Blacksail flyingfish", + "Manyspotted flyingfish", + "Sutton's flyingfish", + "Margined flyingfish", + "Atlantic flyingfish", + "Guinean flyingfish", + "Bennett’s flyingfish", + "Flyingfishes nei", + "Duckbilled buntingi", + "Malabar ricefish", + "Javanese ricefish", + "Eggcarrying buntingi", + "Smalleye moray cod", + "Marbled moray cod", + "Smallhead moray cod", + "Patagonian moray cod", + "Moray cods nei", + "Ahuru", + "Dwarf codling", + "Tasmanian codling", + "Beardless codling", + "Gadella", + "Slender codling", + "Longfin codling", + "Guinean codling", + "Codling", + "Beardie", + "Bighead mora", + "Tadpole cod", + "Common mora", + "Black codling", + "Japanese codling", + "Metallic codling", + "Brown codling", + "Red codling", + "Southern bastard codling", + "Northern bastard codling", + "Grenadier cod", + "Mediterranean codling", + "North Atlantic codling", + "Patagonian codling", + "Small-headed cod", + "Lepidion codlings nei", + "Blue antimora", + "Tadpole codling", + "Moras nei", + "Unicorn cod", + "Antenna codlet", + "Smallscale codlet", + "Big-eye unicorn-cod", + "Tusk(=Cusk)", + "Atlantic cod", + "Pacific cod", + "Greenland cod", + "Northern cods nei", + "Burbot", + "Ling", + "Blue ling", + "Spanish ling", + "Lings nei", + "Greater forkbeard", + "Forkbeard", + "Longfin hake", + "Forkbeards nei", + "Brazilian codling", + "Red hake", + "White hake", + "Carolina hake", + "Southern codling", + "Spotted codling", + "Gulf hake", + "Urophycis nei", + "Haddock", + "Tadpole fish", + "Navaga(=Wachna cod)", + "Saffron cod", + "Pacific tomcod", + "Atlantic tomcod", + "Saithe(=Pollock)", + "Pollack", + "Alaska pollock(=Walleye poll.)", + "Norwegian pollock", + "Polar cod", + "Artic cod", + "East Siberian cod", + "Silvery pout", + "Threadfin rockling", + "Arctic rockling", + "Mediterranean bigeye rockling", + "Bigeye rockling", + "Shore rockling", + "Three-bearded rockling", + "Rocklings nei", + "Fivebeard rockling", + "Northern rockling", + "Norway pout", + "Poor cod", + "Pouting(=Bib)", + "Trisopterus nei", + "Blue whiting(=Poutassou)", + "Southern blue whiting", + "Whiting", + "Fourbeard rockling", + "European hake", + "Senegalese hake", + "Southern hake", + "Silver hake", + "South Pacific hake", + "Argentine hake", + "North Pacific hake", + "Benguela hake", + "Deep-water Cape hake", + "Offshore silver hake", + "Panama hake", + "Shallow-water Cape hake", + "Patagonian hake", + "Hakes nei", + "Cape hakes", + "Luminous hake", + "Patagonian grenadier", + "Blue grenadier", + "Cape grenadier", + "Merluccid hakes nei", + "Roughhead grenadier", + "Whitson's grenadier", + "Ridge scaled rattail", + "Bigeye grenadier", + "Caml grenadier", + "Grenadiers nei", + "Glasshead grenadier", + "Roundnose grenadier", + "Günther's grenadier", + "Pacific grenadier", + "Loosescale grenadier", + "Humboldt grenadier", + "Abyssal grenadier", + "Carmine grenadier", + "Popeye grenadier", + "Trident grenadier", + "Longfin grenadier", + "Amami grenadier", + "Mexican grenadier", + "Abyssal rattail", + "Largenose grenadier", + "Serrulate whiptail", + "Longrayed whiptail", + "Thickbeard grenadier", + "Grenadiers, whiptails nei", + "Surgeon grenadier", + "Aconcagua grenadier", + "Duckbill grenadier", + "Silver whiptail", + "Eyespot grenadier", + "Rough-head whiptail", + "Javelin", + "Two-barred whiptail", + "Shovelnose grenadier", + "Clearsnout grenadier", + "Blackfin grenadier", + "Chilean grenadier", + "Hollowsnout grenadier", + "Filesnout grenadier", + "Banded whiptail", + "Formosa grenadier", + "Six-band grenadier", + "Notable whiptail", + "Japanese grenadier", + "Campbell whiptail", + "Kamohara grenadier", + "Karrer's whiptail", + "Kermadec rattail", + "Mugura grenadier", + "Spearsnouted grenadier", + "Longhead grenadier", + "Longarm grenadier", + "Marini's grenadier", + "Mahia whiptail", + "Spearnose grenadier", + "Swordsnout grenadier", + "Hawknose grenadier", + "Spiny grenadier", + "Unicorn grenadier", + "Shoulderspot grenadier", + "Firebelly grenadier", + "Giant grenadier", + "Fragile grenadier", + "Armourhead grenadier", + "Roughsnout grenadier", + "Bullseye grenadier", + "Vaillant's grenadier", + "Globosehead rattail", + "Dogtooth grenadier", + "Roundhead grenadier", + "Bristly grenadier", + "Marlin-spike grenadier", + "Common Atlantic grenadier", + "Peruvian grenadier", + "Twelve-rayed grenadier", + "Broadsnout grenadier", + "Smooth grenadier", + "Parrot grenadier", + "Smalltooth grenadier", + "Spectacled grenadier", + "Short-tail grenadier", + "Roughtip grenadier", + "California grenadier", + "Softhead grenadier", + "Western softhead grenadier", + "Doublethread grenadier", + "Naked snout rattail", + "Pineapple rattail", + "Bulbous rattail", + "Thorntooth grenadier", + "Sturgeon grenadier", + "Slendertail grenadier", + "Bathypelagic rattail", + "Arrowtooth grenadier", + "Hawaiian grenadier", + "Plainfin grenadier", + "Sagami grenadier", + "Longbeard grenadier", + "Spinaker grenadier", + "Peterson's grenadier", + "Conesnout grenadier", + "Grenadiers, rattails nei", + "Pelagic cod", + "Arrowtail", + "Eucla cod", + "Gadiformes nei", + "Three-spined stickleback", + "Blackspotted stickleback", + "Sticklebacks", + "Brook stickleback", + "Ninespine stickleback", + "Southern ninespine stickleback", + "Sea stickleback", + "Fourspine stickleback", + "Tube-snout", + "Pipe fish", + "Short dragonfish", + "Longtail seamouth", + "Korean sandlance", + "Pacific cornetfish", + "Cornetfish", + "Bluespotted cornetfish", + "Red cornetfish", + "Flutemouth", + "Longspine snipefish", + "Slender snipefish", + "Orange bellowfish", + "Longspine bellowfish", + "Crested bellowfish", + "Snipefishes nei", + "Smooth razorfish", + "Grooved razor-fish", + "Speckled shrimpfish", + "Banded yellowfish", + "Ghost pipefish", + "Harlequin ghost pipefish", + "Fringed pipefish", + "Greater pipefish", + "Broadnosed pipefish", + "Nilsson's pipefish", + "Pipefishes nei", + "Sea pony", + "Short snouted seahorse", + "Long-snouted seahorse", + "Tiger tail seahorse", + "West African seahorse", + "Spotted seahorse", + "Longnose seahorse", + "Thorny seahorse", + "Seahorses nei", + "Straightnose pipefish", + "Worm pipefish", + "Short-bodied pipefish", + "Spotted pipefish", + "Alligator pipefish", + "Southern little pipehorse", + "Shortpouch pygmy pipehorse", + "Common seadragon", + "Leafy seadragon", + "Pink pipefish", + "Pugheaded pipefish", + "Gale's pipefish", + "Network pipefish", + "Messmate pipefish", + "Snubnose pipefish", + "Snake pipefish", + "Bluestripe pipefish", + "Tiger pipefish", + "Brock's pipefish", + "Ribboned pipefish", + "Blue-spotted pipefish", + "Beady pipefish", + "Macleay's crested pipefish", + "Prickly pipefish", + "Trawl pipefish", + "Brush-tailed pipefish", + "Deep-bodied pipefish", + "Orange pipefish", + "Shortnose pipefish", + "Flat-nosed pipefish", + "Short-tailed pipefish", + "Myers' pipefish", + "Mollison's pipefish", + "Elegant pipefish", + "Red pipefish", + "Rock pipefish", + "Pug-nosed pipefish", + "Ring-backed pipefish", + "Double-ended pipefish", + "Mother-of-pearl pipefish", + "Pipefishes, seahorses nei", + "Opah", + "Southern opah", + "Moonfish, opah, mambo", + "Spinyfin velifer", + "Sailfin velifer", + "Unicorn crestfish", + "Crested oarfish", + "Unicornfish", + "Polka-dot ribbonfish", + "Mediterranean dealfish", + "Dealfish", + "Blackflash ribbonfish", + "Slender ribbonfish", + "Dealfishes", + "Taper-tail ribbonfish", + "Scalloped ribbonfish", + "Ribbonfishes", + "King of herrings", + "Streamer fish", + "Oarfishes nei", + "Tube-eye", + "Jelly-head fish", + "Jellynose", + "Loppe's tadpole fish", + "Jellynose fishes nei", + "Festive ribbonfish", + "Hairyfish", + "Tapertail", + "Checkered pupfish", + "Cuban killifish", + "Potosi pupfish", + "Desert pupfish", + "Bolson pupfish", + "Parras pupfish", + "Sheepshead minnow", + "Goldspotted killifish", + "Flagfish", + "Scaleless killifish", + "Catarina pupfish", + "Spanish toothcarp", + "Whitepatched splitfin", + "Tuxpan splitfin", + "Opal allotoca", + "Butterfly splitfin", + "Bluetail goodea", + "White River springfish", + "Ash Meadows killifish", + "Darkedged splitfin", + "Blackfin goodea", + "Barred splitfin", + "Polka-dot splitfin", + "Bold characodon", + "Rainbow characodon", + "Goldbreast splitfin", + "Picotee goodeid", + "Redtail splitfin", + "Relict splitfin", + "Leopard splitfin", + "Bulldog goodeid", + "Largescale foureyes", + "Onesided livebearer", + "White-eye", + "Mosquitofish", + "Creole topminnow", + "Montezuma swordtail", + "Tanganyika killifish", + "Grand Cayman limia", + "Barred topminnow", + "Dusky millions fish", + "Guppy", + "Top minnow", + "Starhead killi", + "Ceylon killifish", + "Blue panchax", + "Saberfin killie", + "Argentine pearlfish", + "Gabon jewelfish", + "Barredtail pearlfish", + "Green rivulus", + "Chiapas killifish", + "Diamond killifish", + "Stippled studfish", + "Pygmy killifish", + "Bluefin killifish", + "Corfu toothcarp", + "Valencia toothcarp", + "Pink cusk-eel", + "Red cusk-eel", + "Black cusk-eel", + "Kingklip", + "Rock ling", + "Cusk-eels nei", + "Dusky cusk-eel", + "Snake blenny", + "Band cusk-eel", + "Bearded brotula", + "Goatsbeard brotula", + "False kinglip", + "Shortbeard cusk-eel", + "Specklefin cusk-eel", + "Black brotula", + "Spotted cusk-eel", + "Australian tusk", + "Legless cuskeel", + "Black-edged cusk-eel", + "Velvetnose brotula", + "Barbed brotula", + "Cusk-eels, brotulas nei", + "Messmate", + "Pinhead pearlfish", + "Dogtooth pearlfish", + "Pearlfishes nei", + "Freetail brotula", + "Pink brotula", + "Longarm brotula", + "Fleshfish", + "Orange brotula", + "Yellow pigmy brotula", + "Bighead brotula", + "Purple brotula", + "Gold brotula", + "Toothed Cuban cusk-eel", + "Key brotula", + "Trout-perch", + "Pirate perch", + "Ozark cavefish", + "Swampfish", + "Spring cavefish", + "Alabama cavefish", + "Southern cavefish", + "Velvet whalefish", + "Pink flabby whalefish", + "Flabby whalefish", + "Stout beardfish", + "Pacific beardfish", + "Alfonsino", + "Splendid alfonsino", + "Alfonsinos nei", + "Redfish", + "Bight redfish", + "Swallow-tail", + "Alfonsinos, etc. nei", + "Parin's spinyfish", + "Longwing spinyfin", + "Silver spinyfin", + "Spinyfins nei", + "Darwin's slimehead", + "Mediterranean slimehead", + "Orange roughy", + "Smallscale slimehead", + "Slender roughy", + "Sandpaper fish", + "Little pineapple fish", + "Slimeheads nei", + "Pineapplefish", + "Pineconefish", + "Splitfin flashlightfish", + "Atlantic flashlightfish", + "Flashlight fish", + "Gulf flashlightfish", + "Squirrelfish", + "Blackbar soldierfish", + "Pinecone soldierfish", + "Blotcheye soldierfish", + "Shoulderbar soldierfish", + "Blacktip soldierfish", + "Yellowfin soldierfish", + "Doubletooth soldierfish", + "Whitetip soldierfish", + "Clearfin squirrelfish", + "Sammara squirrelfish", + "Japanese soldierfish", + "Kai soldierfish", + "Shy soldier", + "Spinyface soldier", + "Silverspot squirrelfish", + "Sabre squirrelfish", + "Crown squirrelfish", + "Red squirrelfish", + "Redcoat", + "Violet squirrelfish", + "Squirrelfishes nei", + "Slender bigscale", + "Crested bigscale", + "Common fangtooth", + "John dory", + "Cape dory", + "Silvery John dory", + "Mirror dory", + "Capro dory", + "Red dory", + "New Zealand dory", + "King dory", + "Silver dory", + "Dories nei", + "Thorny tinselfish", + "Spotted tinselfish", + "Grammicolepidids nei", + "Boarfish", + "Deepbody boarfish", + "Indo-Pacific boarfish", + "Boarfishes nei", + "Spiky oreo", + "Smooth oreo dory", + "Ox-eyed oreo", + "Black oreo", + "Warty dory", + "Guinea oreo", + "Oreo dories nei", + "Parazen", + "Dwarf dory", + "Elongate dory", + "Moon silverside", + "Chilean silverside", + "Argentinian silverside", + "Big-scale sand smelt", + "Mediterranean sand smelt", + "Sand smelt", + "Cape silverside", + "Sand smelts nei", + "Balabac Island silverside", + "Hardyhead silverside", + "Topsmelt silverside", + "Pricklenose silverside", + "Longfin silverside", + "Beach silverside", + "Gulf grunion", + "Delta silverside", + "Inland silverside", + "Atlantic silverside", + "Rendahl's hardyhead", + "Thickscale silverside", + "Blackback silverside", + "Backwaters silverside", + "Panatella silverside", + "Barnes' silverside", + "Samoan silverside", + "Brook silverside", + "Jack silverside", + "Kiener's silverside", + "Silversides(=Sand smelts) nei", + "Katrana", + "Axelrod's rainbowfish", + "Red rainbowfish", + "Threadfin rainbowfish", + "North New Guinea rainbowfish", + "Glass blue-eye", + "Popondetta blue-eye", + "Redfinned blue-eye", + "Blue eyes", + "Marine sailfin silverside", + "Mercer's tusked silverside", + "Banana mullet", + "Flathead grey mullet", + "Lebranche mullet", + "White mullet", + "Parassi mullet", + "So-iuy mullet", + "Leaping African mullet", + "Thicklip grey mullet", + "So-iny (redlip) mullet", + "Otomebora mullet", + "Yellow-eye mullet", + "Fairy mullet", + "Mountain mullet", + "Sharp-nosed river mullet", + "Goldie river mullet", + "Lobed river mullet", + "River mullets nei", + "Bobo mullet", + "Half fringelip mullet", + "Thinlip grey mullet", + "Golden grey mullet", + "South African mullet", + "Leaping mullet", + "Goldspot mullet", + "Tade gray mullet", + "Largescale mullet", + "Largescaled mullet", + "Grooved mullet", + "Squaretail mullet", + "Klunzinger's mullet", + "Greenback mullet", + "Sicklefin mullet", + "Abu mullet", + "Diamond mullet", + "Persian mullet", + "Longfin mullet", + "Corsula", + "Snouted mullet", + "Sand grey mullet", + "Acute-jawed mullet", + "Boxlip mullet", + "Hornlip mullet", + "Longarm mullet", + "Bluespot mullet", + "Speigler's mullet", + "Thoburn's mullet", + "Broad-mouthed mullet", + "Mullets nei", + "Asian swamp eel", + "Obscure swamp eel", + "Marbled swamp eel", + "Fire eel", + "Burmese spineless eel", + "Mottled fusilier", + "Slender fusilier", + "Goldband fusilier", + "Double-lined fusilier", + "Banana fusilier", + "One-stripe fusilier", + "Capricorn fusilier", + "Dark-banded fusilier", + "Blue and gold fusilier", + "Redbelly yellowtail fusilier", + "Variable-lined fusilier", + "Lunar fusilier", + "Suez fusilier", + "Yellow and blueback fusilier", + "Yellowback fusilier", + "Fusiliers Caesio nei", + "Fusiliers nei", + "Union snook", + "Armed snook", + "Swordspine snook", + "Blackfin snook", + "Black snook", + "Fat snook", + "Tarpon snook", + "Yellowfin snook", + "Common snook", + "White snook", + "Largescale fat snook", + "Snooks(=Robalos) nei", + "Barramundi(=Giant seaperch)", + "Tanganyika lates", + "Albert lates", + "Bigeye lates", + "Forktail lates", + "Nile perch", + "Sleek lates", + "Freshwater perches nei", + "Waigieu seaperch", + "Redmouth grouper", + "Slender grouper", + "Goldribbon soapfish", + "Yellowtail bass", + "Arrowhead soapfish", + "Butterfly perch", + "Pink maomao", + "Graery threadfin seabass", + "Barred soapfish", + "Black grouper", + "Comb grouper", + "Gulf grouper", + "Gag", + "Venezuelan grouper", + "Scamp", + "Mottled grouper", + "Tiger grouper", + "Yellowfin grouper", + "Broomtail grouper", + "Island grouper", + "Yellowmouth grouper", + "Leopard grouper", + "Brazilian groupers nei", + "Dusky grouper", + "White grouper", + "Wavy-lined grouper", + "Hong Kong grouper", + "Spinycheek grouper", + "Giant grouper", + "Highfin grouper", + "Honeycomb grouper", + "Convict grouper", + "Sixbar grouper", + "Epaulet grouper", + "Greasy grouper", + "Nassau grouper", + "Rock hind", + "Spotted grouper", + "Speckled hind", + "Yellowedge grouper", + "Red hind", + "Starry grouper", + "Red grouper", + "Misty grouper", + "Snowy grouper", + "Hawaiian grouper", + "Dogtooth grouper", + "Blacktip grouper", + "Dungat grouper", + "Comet grouper", + "Warsaw grouper", + "White-edged grouper", + "Catface grouper", + "Areolate grouper", + "Jewfish", + "Malabar grouper", + "Halfmoon grouper", + "Blue-and-yellow grouper", + "Rooster hind", + "Banded grouper", + "Yellow grouper", + "Duskytail grouper", + "Longtooth grouper", + "Brownspotted grouper", + "Olive grouper", + "Orange-spotted grouper", + "Goldblotch grouper", + "Speckled blue grouper", + "Saddletail grouper", + "Rock grouper", + "Haifa grouper", + "Bridled grouper", + "Starspotted grouper", + "Striped grouper", + "Snubnose grouper", + "Speckled grouper", + "Camouflage grouper", + "Longfin grouper", + "Black-dotted grouper", + "Threespot grouper", + "Whitespotted grouper", + "Brown-marbled grouper", + "Marquesan grouper", + "Netfin grouper", + "White-blotched grouper", + "Eightbar grouper", + "Dot-dash grouper", + "Red-tipped grouper", + "Reticulate grouper", + "Potato grouper", + "Dotted grouper", + "Smallscaled grouper", + "Summan grouper", + "Oblique-banded grouper", + "Striped-fin grouper", + "Barred-chest grouper", + "Longspine grouper", + "Foursaddle grouper", + "One-blotch grouper", + "Moustache grouper", + "Groupers nei", + "Comber", + "Painted comber", + "Brown comber", + "Blackear bass", + "Belted sandfish", + "Blacktail comber", + "Ghanian comber", + "Combers nei", + "Goldenstriped soapfish", + "Ocellate soapfish", + "Streamer bass", + "Redbanded perch", + "Orange perch", + "African basslet", + "Wrasse bass", + "Swallowtail seaperch", + "Black seabass", + "Mutton hamlet", + "Rivulated mutton hamlet", + "Graysby", + "Coney", + "Peacock hind", + "Tomato hind", + "Bluespotted seabass", + "Niger hind", + "Bluespotted hind", + "Yellowfin hind", + "Freckled hind", + "Coral hind", + "Sixblotch hind", + "Golden hind", + "Garish hind", + "Strawberry hind", + "Darkfin hind", + "Chocolate hind", + "Leopard hind", + "Humpback grouper", + "Checked swallowtail", + "Leather bass", + "Smooth grouper", + "Sand perch", + "Mexican sand perch", + "Torpedo sand perch", + "Inshore sand perch", + "Pond perch", + "Spanish flag", + "Creole-fish", + "Spotted coralgrouper", + "Squaretail coralgrouper", + "Blacksaddled coralgrouper", + "Leopard coralgrouper", + "Roving coralgrouper", + "Marbled coralgrouper", + "Highfin coralgrouper", + "Greater soapfish", + "Spotted soapfish", + "Bigeye bass", + "Two-spot basslet", + "Sea goldie", + "Townsend's anthias", + "Sailfin anthias", + "Flathead perch", + "Boulenger's anthias", + "Golden grouper", + "School bass", + "Pearl-spotted fairy basslet", + "Pygmy sea bass", + "Hawkfish anthias", + "Oval grouper", + "Threadtail anthias", + "Argentine seabass", + "Koester", + "Yellowtail hamlet", + "Butter hamlet", + "Black hamlet", + "Threadfin anthias", + "Ara", + "Toadstool groper", + "Barred sand bass", + "Spotted sand bass", + "Kelp bass", + "Camotillo", + "Peruvian rock seabass", + "Reef bass", + "Masked grouper", + "Yellow-edged lyretail", + "White-edged lyretail", + "Sevenbar grouper", + "Gorgeous swallowtail", + "Groupers, seabasses nei", + "Westralian jewfish", + "Tiger grunter", + "Greenway's grunter", + "Black bream", + "Fortescue grunter", + "Silver grunter", + "Lorentz's grunter", + "Small-headed grunter", + "Barcoo grunter", + "Kimberley grunter", + "Jamur Lake grunter", + "Jarbua terapon", + "Small-scaled terapon", + "Largescaled terapon", + "Terapon perches nei", + "Fourlined terapon", + "Silver perch", + "Tigerperches nei", + "Wreckfish", + "Hapuku wreckfish", + "Bass groper", + "Hapuka", + "Giant seabass", + "Striped bass", + "White perch", + "White bass", + "Yellow bass", + "Atlantic seabasses", + "Striped bass, hybrid", + "Spotted seabass", + "European seabass", + "Seabasses nei", + "Yellow devilfish", + "Comet", + "Nightfish", + "Western pygmy perch", + "Pelagic basslet", + "Balston's pygmy perch", + "Oxleyan pygmy perch", + "Creole perch", + "Murray cod", + "Trout cod", + "Eastern freshwater cod", + "Japanese seabass", + "Mandarin fish", + "Big-eye mandarin fish", + "Leopard mandarin fish", + "Australian bass", + "Golden perch", + "Hawaiian flagtail", + "Mud sunfish", + "Flier", + "Pumpkinseed", + "Bluegill", + "Smallmouth bass", + "Largemouth black bass", + "Spotted bass", + "Rock bass", + "White crappie", + "Black crappie", + "Sacramento perch", + "Blackbanded sunfish", + "Glasseye", + "Japanese bigeye", + "Purple-spotted bigeye", + "Atlantic bigeye", + "Red bigeye", + "Moontail bullseye", + "Paeony bulleye", + "Bigeyes nei", + "Longfinned bullseye", + "Bigeyes, glasseyes, bulleyes nei", + "Broadbanded cardinalfish", + "Half-lined cardinal", + "Cardinal fish", + "Ring-tailed cardinalfish", + "Ruby cardinalfish", + "Cook's cardinalfish", + "Flagfin cardinalfish", + "Blackfoot cardinal", + "Perdix cardinalfish", + "Blackbelted cardinalfish", + "Orangelined cardinalfish", + "Bronze cardinalfish", + "Tiger cardinal", + "Large toothed cardinalfish", + "Twospot cardinalfish", + "Persian cardinalfish", + "Weed cardinalfish", + "Crosseyed cardinalfish", + "Mottled cardinalfish", + "Variegated cardinalfish", + "Gjellerup's mouth almighty", + "Crystal cardinal", + "Titan cardinalfish", + "Eightspine cardinalfish", + "Freckled cardinalfish", + "Paddlefish cardinalfish", + "Tarr's cardinalfish", + "Graceful-tailed cardinalfish", + "Luminous cardinalfish", + "Swallowtail cardinalfish", + "Sea urchin cardinalfish", + "Pajama cardinalfish", + "Bullseye", + "Doublebar cardinalfish", + "Twobelt cardinal", + "Spotfin cardinal", + "Iridescent cardinalfish", + "Cardinalfishes, etc. nei", + "Glowbelly", + "Three-spined cardinalfish", + "Silver splitfin", + "Blackmouth splitfin", + "Blackmouth bass", + "Smallscale splitfin", + "Aden splitfin", + "Splitfins nei", + "Glow-bellies, splitfins nei", + "European perch", + "American yellow perch", + "Balkhash perch", + "Western sand darter", + "Eastern sand darter", + "Asprete", + "Percarina", + "Ruffe", + "Donets ruffe", + "Danube ruffe", + "Schraetzer", + "Greenside darter", + "Rainbow darter", + "Fantail darter", + "Chihuahua darter", + "Logperch", + "Zingel", + "Walleye", + "Volga pikeperch", + "Pike-perch", + "Sauger", + "Walleyes nei", + "Spotted sillago", + "Flathead sillago", + "Trumpeter sillago", + "Silver sillago", + "Sand sillago", + "Flinders' sillago", + "Arabian sillago", + "Slender sillago", + "Clubfoot sillago", + "Sillago-whitings", + "Bighead tilefish", + "Grey tilefish", + "Ocean whitefish", + "Atlantic goldeneye tilefish", + "Horsehead tilefish", + "Ward's tilefish", + "Zebra tilefish", + "Ribbed tilefish", + "Great Northern tilefish", + "Tilefishes nei", + "Chameleon sand tilefish", + "Stark's tilefish", + "Quakerfish", + "Sand tilefish", + "Nosey dottyback", + "Oblique-lined dottyback", + "Fire-tail devil", + "Pencil snakelet", + "Orange dottyback", + "Olive dottyback", + "Dutoiti", + "Yellowtail dottyback", + "Blackstripe dottyback", + "Bluespotted dottyback", + "False trevally", + "Bluefish", + "Gnomefish", + "Cobia", + "Shrimp scad", + "Blackfin scad", + "Herring scad", + "Razorbelly scad", + "Yellowtail scad", + "Atlantic horse mackerel", + "Blue jack mackerel", + "Japanese jack mackerel", + "Chilean jack mackerel", + "Pacific jack mackerel", + "Mediterranean horse mackerel", + "Rough scad", + "Cape horse mackerel", + "Cunene horse mackerel", + "Greenback horse mackerel", + "African scad", + "Arabian scad", + "Yellowtail horse mackerel", + "Jack and horse mackerels nei", + "Fringefin trevally", + "Juan Fernandez trevally", + "Skipjack trevally", + "White trevally", + "Round scad", + "Redtail scad", + "Shortfin scad", + "Amberstripe scad", + "Japanese scad", + "Indian scad", + "Roughear scad", + "Mackerel scad", + "Scads nei", + "Bluespotted trevally", + "Green jack", + "Pacific crevalle jack", + "Blacktip trevally", + "Giant trevally", + "Horse-eye jack", + "Black jack", + "Bluefin trevally", + "Brassy trevally", + "Senegal jack", + "Bigeye trevally", + "Tille trevally", + "Blue runner", + "Crevalle jack", + "Bar jack", + "False scad", + "Yellow jack", + "Longfin crevalle jack", + "Jacks, crevalles nei", + "Atlantic moonfish", + "African moonfish", + "Hairfin lookdown", + "Caribbean moonfish", + "Mexican moonfish", + "Peruvian moonfish", + "Lookdown", + "Snubnose pompano", + "Florida pompano", + "Pompano", + "Great pompano", + "Southern pompano", + "Oyster pompano", + "Small spotted dart", + "Largespotted dart", + "Cayenne pompano", + "Swallowtail dart", + "Permit", + "Longfin pompano", + "Blackblotch pompano", + "Plata pompano", + "Guinean pompano", + "Indian pompano", + "Paloma pompano", + "Gafftopsail pompano", + "Steel pompano", + "Shortfin pompano", + "Pompanos nei", + "Greater amberjack", + "Japanese amberjack", + "Yellowtail amberjack", + "Guinean amberjack", + "Lesser amberjack", + "Samson fish", + "Fortune jack", + "Longfin yellowtail", + "Banded rudderfish", + "Amberjacks nei", + "Longjaw leatherjacket", + "Maracaibo leatherjacket", + "Shortjaw leatherjacket", + "Castin leatherjacket", + "Leatherjacket", + "Leatherjackets nei", + "Pilotfish", + "Silvermouth trevally", + "Longrakered trevally", + "Leerfish", + "Alexandria pompano", + "African pompano", + "Indian threadfish", + "Black pomfret", + "Cleftbelly trevally", + "Longfin trevally", + "Orangespotted trevally", + "Coastal trevally", + "Longnose trevally", + "Shadow trevally", + "Whitefin trevally", + "Blue trevally", + "Yellowspotted trevally", + "Bludger", + "Bumpnose trevally", + "Duskyshoulder trevally", + "Malabar trevally", + "Coachwhip trevally", + "Island trevally", + "Threadfin jack", + "Barcheek trevally", + "Brownback trevally", + "Imposter trevally", + "Rainbow runner", + "Golden trevally", + "Torpedo scad", + "Talang queenfish", + "Doublespotted queenfish", + "Barred queenfish", + "Needlescaled queenfish", + "Queenfishes", + "Atlantic bumper", + "Pacific bumper", + "Bumpers nei", + "Parona leatherjacket", + "Bigeye scad", + "Oxeye scad", + "Bluntnose jack", + "Bicolor jack", + "Yellowfin jack", + "Blackfin jack", + "Yellowstripe scad", + "Blackbanded trevally", + "Cottonmouth jack", + "Whitemouth jack", + "Whitetongue jack", + "Vadigo", + "Carangids nei", + "Roosterfish", + "Moonfish", + "Atlantic pomfret", + "Southern rays bream", + "Pacific pomfret", + "Bigtooth pomfret", + "Big-scale pomfret", + "Sickle pomfret", + "Atlantic fanfish", + "Prickly fanfish", + "Pacific fanfish", + "Spotted fanfish", + "Brilliant pomfret", + "Rough pomfret", + "Pomfrets, ocean breams nei", + "Common dolphinfish", + "Pompano dolphinfish", + "Dolphinfishes nei", + "Ruff", + "Australian salmon", + "Cape bonnetmouth", + "Rubyfish", + "Atlantic rubyfish", + "Japanese rubyfish", + "Bonnetmouths, rubyfishes nei", + "Bonnetmouth", + "Boga", + "Mangrove red snapper", + "Checkered snapper", + "Crimson snapper", + "Dory snapper", + "Blacktail snapper", + "John's snapper", + "Bigeye snapper", + "One-spot snapper", + "Blubberlip snapper", + "Malabar blood snapper", + "Emperor red snapper", + "Brownstripe red snapper", + "Mutton snapper", + "Schoolmaster snapper", + "Mullet snapper", + "Yellow snapper", + "Southern red snapper", + "Blackfin snapper", + "Northern red snapper", + "Colorado snapper", + "Cubera snapper", + "Grey snapper", + "Spotted rose snapper", + "Dog snapper", + "Mahogany snapper", + "Pacific dog snapper", + "Lane snapper", + "Silk snapper", + "African red snapper", + "African brown snapper", + "Russell's snapper", + "Gorean snapper", + "Two-spot red snapper", + "Humpback red snapper", + "Yellow-lined snapper", + "Golden African snapper", + "Yellow-banded snapper", + "Common bluestripe snapper", + "Yellowstreaked snapper", + "Timor snapper", + "Five-lined snapper", + "Blueline snapper", + "Blackspot snapper", + "Papuan black snapper", + "Pacific red snapper", + "Jordan's snapper", + "Humphead snapper", + "Guinea snapper", + "Bengal snapper", + "Lunartail snapper", + "Bluestriped snapper", + "Snappers nei", + "Yellowtail snapper", + "Rusty jobfish", + "Small toothed jobfish", + "Green jobfish", + "Black snapper", + "African forktail snapper", + "Tang's snapper", + "Japanese snapper", + "Vanuatu snapper", + "Saddle-back snapper", + "Yellowtail blue snapper", + "Cocoa snapper", + "Queen snapper", + "Deep-water red snapper", + "Deepwater longtail red snapper", + "Pale snapper", + "Black and white snapper", + "Scalemouth jobfish", + "Ornate jobfish", + "Crimson jobfish", + "Wenchman", + "Goldbanded jobfish", + "Lavender jobfish", + "Sharptooth jobfish", + "Goldflag jobfish", + "Golden eye jobfish", + "Oblique-banded snapper", + "Jobfishes nei", + "Vermilion snapper", + "Mexican barred snapper", + "Randall's snapper", + "Sailfin snapper", + "Chinamanfish", + "Pinjalo", + "Snappers, jobfishes nei", + "Smooth dwarf monocle bream", + "Rosy dwarf monocle bream", + "Scaly dwarf monocle bream", + "Small-toothed whiptail", + "Double whiptail", + "Paradise whiptail", + "Green-striped coral bream", + "Red filament threadfin bream", + "Ornate threadfin bream", + "Japanese threadfin bream", + "Golden threadfin bream", + "Mauvelip threadfin bream", + "Doublewhip threadfin bream", + "Redspine threadfin bream", + "Notchedfin threadfin bream", + "Fivelined threadfin bream", + "Balinese threadfin bream", + "Yellowbelly threadfin bream", + "Celebes threadfin bream", + "Graceful threadfin bream", + "Randall's threadfin bream", + "Delagoa threadfin bream", + "Slender threadfin bream", + "Threadfin breams nei", + "Whitecheek monocle bream", + "Thumbprint monocle bream", + "Arabian monocle bream", + "Two-lined monocle bream", + "Monogrammed monocle bream", + "Lattice monocle bream", + "Black-streaked monocle bream", + "Striped monocle bream", + "Yellowstripe monocle bream", + "Bridled monocle bream", + "Monocle breams", + "Threadfin and dwarf breams nei", + "Tripletail", + "Pacific tripletail", + "Toothpony", + "Toothponies nei", + "Splendid ponyfish", + "Twoblotch ponyfish", + "Goldstripe ponyfish", + "Dussumier's ponyfish", + "Common ponyfish", + "Striped ponyfish", + "Orangefin ponyfish", + "Whipfin ponyfish", + "Oblong ponyfish", + "Shortnose ponyfish", + "Ornate ponyfish", + "Ponyfishes(=Slipmouths)", + "Pugnose ponyfish", + "Deep pugnose ponyfish", + "Decorated ponyfish", + "Slender ponyfish", + "Ponyfishes(=Slipmouths) nei", + "Borriqueta porgy", + "Painted sweetlips", + "Xantic sargo", + "Spotted head sargo", + "Burrito grunt", + "Black margate", + "Porkfish", + "White margate", + "Black grunt", + "Caesar grunt", + "Yellowspotted grunt", + "French grunt", + "Spanish grunt", + "Spottail grunt", + "Cottonwick grunt", + "Sailor's grunt", + "White grunt", + "Bluestriped grunt", + "Grey grunt", + "Greybar grunt", + "Chere-chere grunt", + "Tomtate grunt", + "Yellowstripe grunt", + "Raucous grunt", + "Pigfish", + "Corocoro grunt", + "Torroto grunt", + "Cabinza grunt", + "African striped grunt", + "Crescent sweetlips", + "Trout sweetlips", + "Minstrel sweetlips", + "Biglip grunt", + "Rubberlip grunt", + "Lemonfish", + "Blackspotted rubberlip", + "Sordid rubberlip", + "Oriental sweetlips", + "Whitebarred rubberlip", + "Lesson's thicklip", + "Harry hotlips", + "Yellowbanded sweetlips", + "Dusky rubberlip", + "Sweetlips, rubberlips nei", + "Striped piggy", + "Smallspotted grunter", + "Silver grunt", + "Saddle grunt", + "Olive grunt", + "Smallspotted grunt", + "Purplemouth grunt", + "Sand grunt", + "Burro grunt", + "Longspine grunt", + "Bastard grunt", + "Sompat grunt", + "Parrot grunt", + "Cock grunter", + "Javelin grunter", + "Panama grunt", + "Pigsnout grunt", + "Bluecheek silver grunt", + "Banded grunter", + "Bronzestriped grunt", + "Bigeye grunt", + "Dara", + "Barred grunt", + "Wavyline grunt", + "Grunts, sweetlips nei", + "Yellowtail croaker", + "Boeseman croaker", + "Vacuocua croaker", + "Barbel drum", + "Totoaba", + "Brown meagre", + "Deep-water drum", + "Sciaenas nei", + "Freshwater drum", + "Acoupa weakfish", + "Whitefin weakfish", + "Peruvian weakfish", + "Sand weakfish", + "Jamaica weakfish", + "Smooth weakfish", + "Spotted weakfish", + "Smallscale weakfish", + "Gulf weakfish", + "Shortfin weakfish", + "Cachema weakfish", + "Squeteague(=Gray weakfish)", + "Smalltooth weakfish", + "Striped weakfish", + "Green weakfish", + "Orangemouth weakfish", + "Silver seatrout", + "Tonkin weakfish", + "Stolzmann's weakfish", + "Stripped weakfish", + "Weakfishes nei", + "San Francisco croaker", + "Amazon croaker", + "Longtail croaker", + "Mi-iuy (brown) croaker", + "Angola croaker", + "La Plata croaker", + "Half-mourning croaker", + "Fusco drum", + "Slender croaker", + "Whitemouth croaker", + "Atlantic croaker", + "Tallfin croaker", + "Croakers nei", + "Southern kingcroaker", + "Highfin king croaker", + "Snakehead kingcroaker", + "Panama kingcroaker", + "California kingcroaker", + "Northern kingfish", + "Gulf kingcroaker", + "Kingcroakers nei", + "New Grenada drum", + "Estuary croaker", + "Shi drum", + "Argentine croaker", + "Sand drum", + "Yellowfin drum", + "Polla drum", + "Canary drum(=Baardman)", + "Fusca drum", + "Steindachner's drum", + "Striped drum", + "Drums nei", + "Belanger's croaker", + "Coitor croaker", + "Sin croaker", + "Leaftail croaker", + "Bearded croaker", + "Sharpnose hammer croaker", + "Karut croaker", + "King weakfish", + "Meagre", + "Japanese meagre", + "Southern meagre(=Mulloway)", + "Squaretail kob", + "Amoy croaker", + "Arabian sea meagre", + "Meagres nei", + "Geelbek croaker", + "White weakfish", + "Bluestreak drum", + "High-hat", + "Jack-knifefish", + "White croaker", + "Steeplined drum", + "Silver drum", + "Shorthead drum", + "Shining drum", + "Pacific drum", + "Boe drum", + "Smalleye croaker", + "Pacific smalleye croaker", + "Spotted croaker", + "Tigertooth croaker", + "Bronze croaker", + "Pama croaker", + "Banded croaker", + "Peruvian banded croaker", + "Blackfin croaker", + "Black curbinata", + "South American silver croaker", + "Pacora", + "Black drum", + "White stardrum", + "American stardrum", + "Smalleye stardrum", + "Minor stardrum", + "Yawning stardrum", + "Rake stardrum", + "Ground croaker", + "Yelloweye croaker", + "Yellow drum", + "Blotched croaker", + "Honnibe croaker", + "Sharpnose croaker", + "Soldier croaker", + "Large yellow croaker", + "Yellow croaker", + "Silver weakfish", + "Bigtooth corvina", + "Spot croaker", + "Black croaker", + "Brazilian croaker", + "Guyanan croaker", + "Spotfin croaker", + "Red drum", + "Queen croaker", + "Law croaker", + "Cassava croaker", + "Longneck croaker", + "Cameroon croaker", + "Bobo croaker", + "Guinea croaker", + "West African croakers nei", + "Goatee croaker", + "Prickly croaker", + "Blackmouth croaker", + "Chaptis bahaba", + "Chinese bahaba", + "Reeve's croaker", + "Bengal corvina", + "Kathala croaker", + "Panna croaker", + "Silver croaker", + "Big-head pennah croaker", + "Pawak croaker", + "Bigeye croaker", + "Blackspotted croaker", + "Bigmouth croaker", + "Blotched tiger-toothed croaker", + "Corvina drum", + "Croakers, drums nei", + "Mozambique large-eye bream", + "Striped large-eye bream", + "Grey large-eye bream", + "Yellowsnout large-eye bream", + "Japanese large-eye bream", + "Blue-lined large-eye bream", + "Largeeye breams", + "Spangled emperor", + "Atlantic emperor", + "Longfin emperor", + "Thumbprint emperor", + "Sky emperor", + "Red snout emperor", + "Slender emperor", + "Pacific yellowtail emperor", + "Blackeye emperor", + "Grass emperor", + "Pink ear emperor", + "Smalltooth emperor", + "Trumpet emperor", + "Longface emperor", + "Spotcheek emperor", + "Ambon emperor", + "Orange-spotted emperor", + "Orange-striped emperor", + "Ornate emperor", + "Yellowlip emperor", + "Snubnose emperor", + "Yellowtail emperor", + "Longspine emperor", + "Redaxil emperor", + "Humpnose big-eye bream", + "Emperors(=Scavengers) nei", + "Fransmadam", + "Janbruin", + "Bulldog dentex", + "Blackspot(=red) seabream", + "Common pandora", + "Axillary seabream", + "Red pandora", + "Arabian pandora", + "Natal pandora", + "Pandoras nei", + "South American silver porgy", + "Annular seabream", + "White seabream", + "Common two-banded seabream", + "Zebra seabream", + "Sharpsnout seabream", + "Spottail seabream", + "Banded seabream", + "Red Sea seabream", + "Senegal seabream", + "Two-banded seabream", + "Sargo breams nei", + "Galapagos porgy", + "Grass porgy", + "Jolthead porgy", + "Pacific porgy", + "Saucereye porgy", + "Littlehead porgy", + "Sheepshead porgy", + "Porgies", + "Pink dentex", + "Large-eye dentex", + "Canary dentex", + "Common dentex", + "Angolan dentex", + "Congo dentex", + "Morocco dentex", + "Yellowback seabream", + "Barnard dentex", + "Dentex nei", + "Black seabream", + "Steentjie seabream", + "Saddled seabream", + "Sheepshead", + "Western Atlantic seabream", + "King soldier bream", + "Taiwan tai", + "Soldierbream", + "Carpenter seabream", + "Santer seabream", + "Black musselcracker", + "Bluespotted seabream", + "Red porgy", + "Redbanded seabream", + "Silver seabream", + "Japanese seabream", + "Southern common seabream", + "Pargo breams nei", + "Red steenbras", + "Dane seabream", + "Panga seabream", + "White stumpnose", + "Goldlined seabream", + "Cape stumpnose", + "Bigeye stumpnose", + "Haffara seabream", + "Stumpnoses nei", + "Musselcracker seabream", + "Gilthead seabream", + "Bogue", + "Daggerhead seabream", + "Roman seabream", + "Red stumpnose seabream", + "Englishman seabream", + "Slinger seabream", + "False red stumpnose", + "Daggerhead breams nei", + "Karanteen seabream", + "White steenbras", + "Sand steenbras", + "West coast seabream", + "Steenbrasses nei", + "Blue hottentot", + "Bronze seabream", + "Hottentot seabream", + "Copper breams(=Hottentots) nei", + "Scotsman seabream", + "Seventyfour seabream", + "Blueskin seabream", + "Frenchman seabream", + "Polystegan seabreams nei", + "Salema", + "Threadfin porgy", + "Crimson seabream", + "Sobaity seabream", + "Goldsilk seabream", + "Surf bream", + "Blackhead seabream", + "Yellowfin seabream", + "Twobar seabream", + "Scup", + "Longspine porgy", + "Pinfish", + "German seabream", + "Knife-back seabream", + "Porgies, seabreams nei", + "Blotched picarel", + "Picarel", + "Blackspot picarel", + "Bigeye picarel", + "Blacktail picarel", + "Picarels nei", + "Curled picarel", + "Picarels, etc. nei", + "Blue-striped mullet", + "Surmullet", + "Red mullet", + "Argentine goatfish", + "Surmullets(=Red mullets) nei", + "Yellowstripe goatfish", + "Yellowfin goatfish", + "Yellow goatfish", + "Doublebar goatfish", + "Gold-saddle goatfish", + "Red Sea goatfish", + "Long-barbel goatfish", + "Manybar goatfish", + "Sidespot goatfish", + "Indian goatfish", + "Dash-and-dot goatfish", + "Cinnabar goatfish", + "Pearly goatfish", + "Whitesaddle goatfish", + "Rosy goatfish", + "Goldband goatfish", + "Sulphur goatfish", + "Ochrebanded goatfish", + "Freckled goatfish", + "Yellowstriped goatfish", + "Dwarf goatfish", + "Band-tail goatfish", + "Por's goatfish", + "Asymmetrical goatfish", + "Gilded goatfish", + "Bensasi goatfish", + "Goatfishes", + "West African goatfish", + "Spotted goatfish", + "Goatfishes, red mullets nei", + "Live sharksucker", + "Slender suckerfish", + "Spearfish remora", + "Shark sucker", + "Marlin sucker", + "Shark suckers", + "White suckerfish", + "Suckerfishes, remoras nei", + "Galjoen", + "Banded galjoen", + "Galjoens nei", + "Spotted archerfish", + "Banded archerfish", + "Smallscale archerfish", + "Silver moony", + "African moony", + "Full moony", + "Eastern pomfred", + "Silverbelly", + "Deep-bodied mojarra", + "Whipfin silver-biddy", + "Strongspine silver-biddy", + "Yellow fin mojarra", + "Common silver-biddy", + "Slender silver-biddy", + "Guinean striped mojarra", + "Striped silver biddy", + "Longtail silverbiddy", + "Saddleback silver-biddy", + "Mojarras(=Silver-biddies) nei", + "Irish mojarra", + "Dow's mojarra", + "Flagfin mojarra", + "Black axillary mojarra", + "Longfin mojarra", + "Mojarras, etc. nei", + "Eastern footballer", + "Grey knifefish", + "Gulf opal eye", + "Parore", + "Opaleye", + "Halfmoon", + "Stripey", + "Western footballer", + "Sea sweep", + "Blue maomao", + "Moonlighter", + "Blue sea chub", + "Blue-bronze sea chub", + "Cortez sea chub", + "Yellow sea chub", + "Bermuda sea chub", + "Brown chub", + "Brassy chub", + "Kyphosus sea chubs nei", + "Stone-bream", + "Zebra- perch sea chub", + "Bluestriped chub", + "Sea chubs nei", + "Slender bullseye", + "Silver sweeper", + "Curved sweeper", + "Vanikoro sweeper", + "Spotted sicklefish", + "African sicklefish", + "Concertina fish", + "Sicklefishes nei", + "Lord Howe Island butterflyfish", + "Blackfin coralfish", + "Copperband butterflyfish", + "Truncate coralfish", + "Highfin coralfish", + "Pyramid butterflyfish", + "Blacknosed butterflyfish", + "Sixspine butterflyfish", + "Bicolor butterflyfish", + "Foureye butterflyfish", + "Threebanded butterflyfish", + "Banded butterflyfish", + "Four-banded butterflyfish", + "Golden butterflyfish", + "Mirror butterflyfish", + "Chevron butterflyfish", + "Redtail butterflyfish", + "Gardner's butterflyfish", + "Arabian butterflyfish", + "Black-spotted butterflyfish", + "Vagabond butterflyfish", + "Raccoon butterflyfish", + "Threadfin butterflyfish", + "Butterflyfishes nei", + "Pennant coralfish", + "Masked bannerfish", + "Longnose butterfly fish", + "Indian barred butterflyfish", + "Butterflyfishes", + "Old wife", + "Old wife fishes", + "Manefish", + "Manefishes nei", + "Fourspine leaffish", + "Malayan leaffish", + "Gangetic leaffish", + "African leaffish", + "Badis", + "Amazon leaffish", + "Striped boarfish", + "Sailfin armourhead", + "Short boarfish", + "Yellowspotted boarfish", + "Giant boarfish", + "Longsnout boarfish", + "Cape armourhead", + "Bigspined boarfish", + "Pelagic armourhead", + "Longfin armorhead", + "Slender armorhead", + "Pelagic armourheads nei", + "Longfin boarfish", + "Cape knifejaw", + "Natal knifejaw", + "Midas cichlid", + "Flier cichlid", + "Greenstreaked eartheater", + "Giant cichlid", + "Keyhole cichlid", + "Blackspot climbing perch", + "Featherfin cichlid", + "Malawi eyebiter", + "Mozambique tilapia", + "Nile tilapia", + "Blue tilapia", + "Sabaki tilapia", + "Longfin tilapia", + "Wami tilapia", + "Three spotted tilapia", + "Magadi tilapia", + "Karomo", + "Kariba tilapia", + "Black tilapia", + "Tilapias nei", + "Blue-Nile tilapia, hybrid", + "Mango tilapia", + "Blackchin tilapia", + "Green guapote", + "Black acara", + "Chameleon cichlid", + "Rio Grande cichlid", + "Jaguar guapote", + "Blackbelt cichlid", + "Mexican mojarra", + "Convict cichlid", + "Jack Dempsey", + "Cichlasoma nei", + "Peacock cichlid", + "Speckled pavon", + "Redbelly tilapia", + "Banded tilapia", + "Redbreast tilapia", + "Guinean tilapia", + "Otjikoto tilapia", + "Spotted tilapia", + "Okavango tilapia", + "Threespot torpedo", + "Argentine humphead", + "Giant Haplochromis", + "Rainbow cichlid", + "Moga", + "Lavender mbuna", + "Dikume", + "Malawi gar", + "Flag cichlid", + "Ram cichlid", + "Myaka", + "Fuscotaeniatus", + "Ringtail pike cichlid", + "Pike cichlid", + "Humphead cichlid", + "Deep-water hap", + "Haplochromis yellow black line", + "Pearl cichlid", + "Jewelfish", + "Banded jewelfish", + "Orange chromide", + "Pearlspot", + "Oscar", + "Velvety cichlids", + "Mouthbrooding cichlids", + "Green terror", + "Blue acara", + "Elongate mbuna", + "Zebra mbuna", + "Golden mbuna", + "Bluegray mbuna", + "Blue streak hap", + "Blue mbuna", + "Blue discus", + "Threadfin acara", + "Sharphead eartheater", + "Electric blue hap", + "Canary kurper", + "Uaru", + "Thinface cichlid", + "Yellow-belly bream", + "Chessboard cichlid", + "Lionhead cichlid", + "Nsess", + "Spotfin goby cichlid", + "Goldeneye cichlid", + "Cichlids nei", + "Bandfish", + "Red bandfish", + "Kelp perch", + "Rainbow seaperch", + "Reef perch", + "White seaperch", + "Pink seaperch", + "Black perch", + "Russian river tule perch", + "Shiner perch", + "Barred surfperch", + "Spotfin surfperch", + "Rubberlip seaperch", + "Spiny chromis", + "Golden damselfish", + "Black-banded demoiselle", + "Galapagos damsel", + "Big-lip damsel", + "Twinspot damselfish", + "Blueline demoiselle", + "Easter damselfish", + "Sheila's damselfish", + "Onespot demoiselle", + "White-spot damsel", + "Lagoon damselfish", + "Immaculate damsel", + "Bumphead damselfish", + "Guinean damselfish", + "Ocellated damsel", + "Yellowtail demoiselle", + "Regal demoiselle", + "Arabian demoiselle", + "Coquito sergeant", + "Kermadec scalyfin", + "Blackbar devil", + "Tahitian reef-damsel", + "Spinecheek anemonefish", + "Gulf damselfish", + "Damselfish", + "Valparaiso chromis", + "Peruvian chromis", + "Blacksmith", + "Yellow chromis", + "Azores chromis", + "Cadenat's chromis", + "Bicolor chromis", + "Arabian chromis", + "Weber's chromis", + "Yellowfin chromis", + "Chocolatedip chromis", + "Blue green damselfish", + "Cape damsel", + "Australian gregory", + "Dusky damselfish", + "Pacific gregory", + "Beaugregory", + "Cape Verde gregory", + "Jordan's damsel", + "Sergeant-major", + "Canary damsel", + "Night sergeant", + "Blackspot sergeant", + "Indo-Pacific sergeant", + "Scissortail sergeant", + "Garibaldi damselfish", + "Hawaiian dascyllus", + "Whitetail dascyllus", + "Reticulate dascyllus", + "Threespot dascyllus", + "Creole damsel", + "Speckled damselfish", + "Lemon damsel", + "Dark damsel", + "Slender damsel", + "Paletail damsel", + "Threeline damsel", + "Threespot damsel", + "Skunk clownfish", + "Barrier reef anemonefish", + "Yellowtail clownfish", + "Sebae anemonefish", + "Twobar anemonefish", + "Fusilier damselfish", + "Damselfishes", + "Scale-rayed wrasse", + "Western blue groper", + "Natal wrasse", + "Ballan wrasse", + "Cuckoo wrasse", + "Brown wrasse", + "Green wrasse", + "Labrus wrasses nei", + "Cigar wrasse", + "Girdled wrasse", + "Exquisite wrasse", + "Creole wrasse", + "Mutant wrasse", + "Sharp-headed wrasse", + "Largescale wrasse", + "Yellowtail tubelip", + "Dwarf wrasse", + "Sling-jaw wrasse", + "Ring wrasse", + "Tubelip wrasse", + "Allen's tubelip", + "Shoulder-spot wrasse", + "Rare wrasse", + "Minute wrasse", + "Spotty", + "Seagrass wrasse", + "Speckled maori wrasse", + "Cheeklined wrasse", + "Angular flasher", + "McCosker's flasher", + "Bleeding wrasse", + "Pelvic-spot wrasse", + "Striated wrasse", + "Rust-banded wrasse", + "Chiseltooth wrasse", + "Polynesian wrasse", + "Cocktail wrasse", + "Bluelined wrasse", + "Cutribbon wrasse", + "Rainbow slender wrasse", + "Spottail wrasse", + "Slender wrasse", + "Whitebanded sharpnose wrasse", + "Finspot wrasse", + "Blue-banded wrasse", + "Rock cook", + "Emerald wrasse", + "Rainbow wrasse", + "African coris", + "Clown coris", + "Queen coris", + "Goldsinny-wrasse", + "Pearly razorfish", + "Geographic wrasse", + "Spotted wrasse", + "Bluespotted wrasse", + "Spanish hogfish", + "Mexican hogfish", + "Harlequin wrasse", + "Golden-spot hogfish", + "Axilspot hogfish", + "Blackbar hogfish", + "Western Australia pigfish", + "Diana's hogfish", + "Tarry hogfish", + "Redbreasted wrasse", + "Tripletail wrasse", + "Humphead wrasse", + "Broomtail wrasse", + "Floral wrasse", + "Blackspot tuskfish", + "Robust tuskfish", + "Tuskfishes nei", + "Hogfish", + "Señorita", + "Tautog", + "Ornate wrasse", + "Bluehead", + "Saddle wrasse", + "Moon wrasse", + "Surge wrasse", + "Goldbar wrasse", + "Cunner", + "California sheephead", + "Bird wrasse", + "Green birdmouth wrasse", + "Black wrasse", + "Canarytop wrasse", + "Dusky wrasse", + "Bubblefin wrasse", + "U-spot wrasse", + "Blackear wrasse", + "Zigzag wrasse", + "Checkerboard wrasse", + "Grey wrasse", + "Corkwing wrasse", + "Symphodus wrasses nei", + "Bluestreak cleaner wrasse", + "Barred thicklip", + "Blackeye thicklip", + "Peacock wrasse", + "Two-spot razorfish", + "Fivefinger wrasse", + "Wrasses, hogfishes, etc. nei", + "Butterfish, greenbone", + "Japanese parrotfish", + "Carolines parrotfish", + "Spinytooth parrotfish", + "Heavybeak parrotfish", + "Daisy parrotfish", + "Steephead parrotfish", + "Bleeker's parrotfish", + "Pacific slopehead parrotfish", + "Bower's parrotfish", + "Loosetooth parrotfish", + "Emerald parrotfish", + "Redband parrotfish", + "Redtail parrotfish", + "Parrotfish", + "Redfin parrotfish", + "Greenblotch parrotfish", + "Blue parrotfish", + "Queen parrotfish", + "Forsten's parrotfish", + "Striped parrotfish", + "Princess parrotfish", + "Gulf parrotfish", + "Bridled parrotfish", + "Blue-barred parrotfish", + "Dusky parrotfish", + "Guinean parrotfish", + "Common parrotfish", + "Ember parrotfish", + "Eclipse parrotfish", + "Tricolour parrotfish", + "Arabian parrotfish", + "Rusty parrotfish", + "Purple-brown parrotfish", + "Marbled parrotfish", + "Bluelip parrotfish", + "Candelamoa parrotfish", + "Pacific longnose parrotfish", + "Bicolour parrotfish", + "Green humphead parrotfish", + "Parrotfishes nei", + "Reunion angelfish", + "Orangeback angelfish", + "Yellowhead angelfish", + "Dusky angelfish", + "Barred angelfish", + "Ballina angelfish", + "Ornate angelfish", + "Pitcairn angelfish", + "Clarion angelfish", + "Guinean angelfish", + "Bluering angelfish", + "Emperor angelfish", + "Arabian angelfish", + "Yellowbar angelfish", + "Semicircle angelfish", + "Regal angelfish", + "Purplemask angelfish", + "Angelfishes nei", + "Spotted hawkfish", + "Coral hawkfish", + "Redbarred hawkfish", + "Giant hawkfish", + "Stocky hawkfish", + "Swallowtail hawkfish", + "Sixband hawkfish", + "Flame hawkfish", + "Longnose hawkfish", + "Arc-eye hawkfish", + "Blackside hawkfish", + "Hawkfishes nei", + "Tasseled kelpfish", + "Silver spot", + "Notchheaded marblefish", + "St. Paul's fingerfin", + "Dusky morwong", + "Castaneta", + "Peruvian morwong", + "Red moki", + "Hawaiian morwong", + "Redlip morwong", + "Spottedtail morwong", + "Magpie perch", + "Redfingers", + "Porae", + "Tarakihi", + "Morwongs", + "Two-tone fingerfin", + "Bank steenbras", + "Natal fingerfin", + "Telescope fish", + "Striped trumpeter", + "Blue moki", + "Bastard trumpeter", + "Trumpeters nei", + "Yellowhead jawfish", + "Robust jawfish", + "Birdled jawfish", + "Royal gramma", + "Yellow basslet", + "Striped threadfin", + "Sixfinger threadfin", + "Blue bobo", + "Yellow bobo", + "Blackspot threadfin", + "Giant African threadfin", + "Slender fivefinger threadfin", + "Long-limb threadfin", + "King threadfin", + "River threadfin", + "African blackspot threadfin", + "Smallmouth threadfin", + "Arabian blackspot threadfin", + "Australian threadfin", + "Blackfin threadfin", + "Atlantic threadfin", + "Littlescale threadfin", + "Persian blackspot threadfin", + "Largemouth striped threadfin", + "Barbu", + "Fourfinger threadfin", + "Threefinger threadfin", + "E. Asian fourfinger threadfin", + "Lesser African threadfin", + "Royal threadfin", + "Paradise threadfin", + "Northern paradise fish", + "Eastern paradise fish", + "Hornaday’s paradise fish", + "Blackhand paradise fish", + "Elegant paradise fish", + "Kapuas elegant paradise fish", + "Indian threadfin", + "Dwarf paradise fish", + "Sevenfinger threadfin", + "Javanese threadfin", + "Splendid threadfin", + "Eightfinger threadfin", + "Indian sevenfinger threadfin", + "Yellowthread threadfin", + "Threadfins, tasselfishes nei", + "Slope bass", + "False scorpionfish", + "Plunderfish", + "Marbled plunderfish", + "Barbeled plunderfishes nei", + "Long-tailed groppo", + "Barred seabass", + "Lampfish", + "Channel bull blenny", + "Longfin icedevil", + "Pithead", + "Naked-head toothfish", + "Patagonian blennie", + "Antarctic toothfish", + "Patagonian toothfish", + "Antarctic toothfishes nei", + "Marbled rockcod", + "Humped rockcod", + "Yellowbelly rockcod", + "Grey rockcod", + "Black rockcod", + "Striped-eyed rockcod", + "Triangular rockcod", + "Narrowhead rockcod", + "Blue rockcod", + "Lobe-lip notothen", + "Notothenia nei", + "Magellanic rockcod", + "Maori chief", + "Black cod", + "Paranotothenia nei", + "Painted notie", + "Yellowfin notie", + "Toad notie", + "Patagonian rockcod", + "Longtail Southern cod", + "Yellowfin notothen", + "Patagonotothen nei", + "Blunt scalyhead", + "Emerald rockcod", + "Sharp-spined notothenia", + "Slender scalyhead", + "Scaly rockcod", + "Dusky rockcod", + "Spotted notothen", + "Crowned rockcod", + "Bigeye notothen", + "Orange notothen", + "Trematomus nei", + "Striped rockcod", + "Bald notothen", + "Stocky rockcod", + "Pagothenia nei", + "Antarctic silverfish", + "Antarctic rockcods, noties nei", + "Deep-water dragon", + "Mawson's dragonfish", + "Ploughfish", + "Dragonfishes nei", + "Long-fingered icefish", + "Jonah's icefish", + "Blackfin icefish", + "Mackerel icefish", + "Pike icefish", + "South Georgia icefish", + "Ocellated icefish", + "Myers' icefish", + "Unicorn icefish", + "Spiny icefish", + "Crocodile icefishes nei", + "Pennyfish", + "High-finned glass perchlet", + "Four-spined glass perchlet", + "Bald glassy", + "Slender glassy", + "Longspine glassy", + "Elongate glass-perchlet", + "Glassfishes", + "Black cardinal fish", + "Pencil cardinal", + "Robust cardinalfish", + "Cardinal fishes nei", + "Magellan plunderfish", + "Antarctic spiny plunderfish", + "S. Georgia spiny plunderfish", + "Spiny plunderfishes nei", + "Beachsalmon", + "Percoids nei", + "Atlantic wolffish", + "Northern wolffish", + "Spotted wolffish", + "Wolffishes(=Catfishes) nei", + "Wolf-eel", + "Alaskan ronquil", + "Stripefin ronquil", + "Northern ronquil", + "Pighead prickleback", + "Stone cockscomb", + "Lesser prickleback", + "Y-prickleback", + "High cockscomb", + "Pearly prickleback", + "Monkeyface prickleback", + "Mosshead warbonnet", + "Fourline snakeblenny", + "Trident prickleback", + "Longsnout prickleback", + "Slender eelblenny", + "Ribbon prickleback", + "Bluebarred prickleback", + "Whitebarred prickleback", + "Radiated shanny", + "Black prickleback", + "Penpoint gunnel", + "Stippled gunnel", + "Kelp gunnel", + "Rockweed gunnel", + "Tidepool gunnel", + "Rock gunnel", + "Quillfish", + "Eelpout", + "Cuskpout", + "Ocean pout", + "Persimmon eelpout", + "Arctic eelpout", + "Greater eelpout", + "Eelpouts", + "Wolf eelpout", + "Halfbarred pout", + "Stout slipskin", + "Bearded eelpout", + "Looseskin eelpout", + "Atlantic soft pout", + "Limp eelpout", + "Eelpouts nei", + "Graveldiver", + "Prowfish", + "Dwarf wrymouth", + "Red triplefin", + "Pacific sandlance", + "Small sandeel", + "American sand lance", + "Gill's sand lance", + "Sandeels(=Sandlances) nei", + "Scaly sandlance", + "Cape sandlance", + "Mediterranean sand eel", + "Smooth sandeel", + "Greater sand-eel", + "Great sandeel", + "Sandlances nei", + "Gaper", + "Black swallower", + "Duckbill flathead", + "Roundtail duckbill", + "Squaretail duckbill", + "Brazilian flathead", + "Duckbills nei", + "Torrent fish", + "Pacific sandperch", + "Namorado sandperch", + "Argentinian sandperch", + "New Zealand blue cod", + "U-mark sandperch", + "Whitespot sandsmelt", + "Latticed sandperch", + "Speckled sandperch", + "Barred sandperch", + "Smallscale grubfish", + "Brazilian sandperch", + "Chilean sandperch", + "Spotted sand-diver", + "Arabian sand diver", + "Longfin burrower", + "Sand dart", + "Greater weever", + "Lesser weever", + "Spotted weever", + "Starry weever", + "Guinean weever", + "Sailfin weever", + "Striped weever", + "Cape Verde weever", + "Weevers nei", + "Weeverfishes nei", + "Northern stargazer", + "Spotted stargazer", + "Fringed stargazer", + "Lancer stargazer", + "Stargazer", + "Longspine stargazer", + "West African stargazer", + "Whitespotted stargazer", + "Dollfus' stargazer", + "Stargazers", + "Giant stargazer", + "Stargazers nei", + "Slender stargazer", + "Estuary stargazer", + "Pacific sandfish", + "Japanese sandfish", + "Throat-spine gudgeon", + "Barred gudgeon", + "Duckbill sleeper", + "Tailface sleeper", + "Pacific fat sleeper", + "Fat sleeper", + "Dusky sleeper", + "Spotted sleeper", + "Emerald sleeper", + "Graham's gudgeon", + "Slender gudgeon", + "Mitchell gudgeon", + "Cave gudgeon", + "Snakehead gudgeon", + "Mud sleeper", + "Peacock gudgeon", + "Upland bully", + "Bigmouth sleeper", + "Marble goby", + "Fimbriate gudgeon", + "Sleepy cod", + "Gudgeons, sleepers nei", + "Blotchcheek goby", + "Tropical sand goby", + "Day's goby", + "Black goby", + "Rock goby", + "Red-mouthed goby", + "Giant goby", + "Bellotti's goby", + "Bucchich's goby", + "Sarato's goby", + "Slender goby", + "Roule's goby", + "Striped goby", + "Golden goby", + "Atlantic gobies nei", + "Transparent goby", + "West African freshwater goby", + "Frillfin goby", + "Dusky frillgoby", + "Pinkbar goby", + "Diagonal shrimp goby", + "Downing's shrimpgoby", + "Periophthalma prawn-goby", + "Triplespot shrimpgoby", + "Butterfly goby", + "Nocturn goby", + "Sleepy goby", + "Tank goby", + "Tusk goby", + "Walking goby", + "Indian O. slender mudskipper", + "Taileyed goby", + "Common goby", + "Sand goby", + "Balboa goby", + "Lyre goby", + "Blackfin goby", + "Biringo", + "Ninebar prawn-goby", + "Luther's prawn-goby", + "Slow goby", + "Longjaw mudsucker", + "Coralline goby", + "Guillet's goby", + "Crystal goby", + "Frogface goby", + "Eyebrow goby", + "Arrow goby", + "Miller's damsel", + "Starry goby", + "Small-eyed goby", + "Leopard dwarfgoby", + "Barbulifer", + "Sponge goby", + "Round goby", + "Barfin goby", + "Amur goby", + "Naked goby", + "Great blue spotted mudskipper", + "White-eye goby", + "Doublebar goby", + "Feather goby", + "Large whip goby", + "Whip coral goby", + "De Buen's goby", + "Chestnut goby", + "Grass goby", + "Agulhas goby", + "Adamson's goby", + "Anomolous goby", + "Onespot goby", + "Burrowing goby", + "Arabian goby", + "Gold-streaked prawn-goby", + "Comb goby", + "Four-spotted goby", + "Spikefin goby", + "Spotback goby", + "Cable's goby", + "Tidewater goby", + "Mud reef-goby", + "Barenape goby", + "Nineline goby", + "Gladiator goby", + "Poison goby", + "Reticulate goby", + "Rippled coralgoby", + "Checkered goby", + "Longjaw goby", + "Two-spotted goby", + "Crescent goby", + "Splitbanded goby", + "Poreless goby", + "Bumblebee fish", + "Cheekspot goby", + "Decorated goby", + "Ornate goby", + "Cardinal goby", + "Bay goby", + "Fries's goby", + "Halfblind goby", + "Oman goby", + "Whitecap goby", + "Largetooth goby", + "Flagfin prawn goby", + "Knout goby", + "Orangespotted goby", + "Sharptail goby", + "Hole goby", + "Spinecheek goby", + "Mauve goby", + "Meteor goby", + "Blackthroat goby", + "Redhead goby", + "Emerald coral goby", + "Barred mudskipper", + "Atlantic mudskipper", + "Walton's mudskipper", + "Scalynape goby", + "Girdled goby", + "Randall's goby", + "Tubenose goby", + "Secret goby", + "Bichique", + "Stimpson's goby", + "Twinspot goby", + "Grotto goby", + "Beaufort's goby", + "Eel worm goby", + "Tusked goby", + "Lord's goby", + "Fan shrimp-goby", + "Okinawa rubble goby", + "Winterbottom's goby", + "Red-barred rubble goby", + "Blind goby", + "Sixspot goby ", + "Ambanoro prawn-goby", + "Orangebelly goby", + "Cameroon goby", + "Slender mudskipper", + "Freshwater gobies nei", + "Gobies nei", + "Loach goby", + "Pugjaw wormfish", + "Curious wormfish", + "Yellowstripe wormfish", + "Elegant firefish", + "Fire goby", + "Rao's hover goby", + "Blue gudgeon", + "Wormfishes nei", + "Flathead wriggler", + "Chinese sleeper", + "Yellow tang", + "Sailfin tang", + "Twotone tang", + "Yellowtail tang", + "Spotted tang", + "Ocean surgeon", + "Blue tang surgeonfish", + "Black-spot surgeonfish", + "Orangespot surgeonfish", + "Doctorfish", + "Convict surgeonfish", + "Monrovia doctorfish", + "Lined surgeonfish", + "Brown surgeonfish", + "Black surgeonfish", + "Sohal surgeonfish", + "Ringtail surgeonfish", + "Elongate surgeonfish", + "Powderblue surgeonfish", + "Orangespine unicornfish", + "Bluespine unicornfish", + "Spotted unicornfish", + "Palette surgeonfish", + "Twospot surgeonfish", + "Striated surgeonfish", + "Biafra doctorfish", + "Surgeonfishes nei", + "Threadfin scat", + "Ninespine batfish", + "Orbfish", + "Panama spadefish", + "Orbicular batfish", + "Longfin batfish", + "Dusky batfish", + "Batfishes", + "African spadefish", + "Atlantic spadefish", + "Pacific spadefish", + "West African spadefish", + "Spadefishes nei", + "Spotted scat", + "Scats", + "Streamlined spinefoot", + "Blue-spotted spinefoot", + "Barred spinefoot", + "Mottled spinefoot", + "Streaked spinefoot", + "Marbled spinefoot", + "Labyrinth spinefoot", + "White-spotted spinefoot", + "Goldlined spinefoot", + "Golden-lined spinefoot", + "Dusky spinefoot", + "Magnificent rabbitfish", + "Black foxface", + "Blackeye rabbitfish", + "Masked spinefoot", + "Peppered spinefoot", + "Goldspotted spinefoot", + "Variegated spinefoot", + "Little spinefoot", + "Brown-spotted spinefoot", + "Shoemaker spinefoot", + "Threeblotched rabbitfish", + "Blotched foxface", + "Bicolored foxface", + "Vermiculated spinefoot", + "Barhead spinefoot", + "Foxface", + "Spinefeet(=Rabbitfishes) nei", + "Luvar", + "Moorish idol", + "Atlantic bonito", + "Striped bonito", + "Eastern Pacific bonito", + "Australian bonito", + "Bonitos nei", + "Chub mackerel", + "Atlantic mackerel", + "Blue mackerel", + "Scomber mackerels nei", + "Plain bonito", + "Wahoo", + "Dogtooth tuna", + "Short mackerel", + "Indian mackerel", + "Island mackerel", + "Indian mackerels nei", + "Chinese seerfish", + "Narrow-barred Spanish mackerel", + "Indo-Pacific king mackerel", + "Streaked seerfish", + "King mackerel", + "Atlantic Spanish mackerel", + "Cero", + "Pacific sierra", + "Queensland school mackerel", + "West African Spanish mackerel", + "Japanese Spanish mackerel", + "Broad-barred king mackerel", + "Serra Spanish mackerel", + "Korean seerfish", + "Monterey Spanish mackerel", + "Papuan seerfish", + "Kanadi kingfish", + "Australian spotted mackerel", + "Seerfishes nei", + "Butterfly kingfish", + "Leaping bonito", + "Shark mackerel", + "Double-lined mackerel", + "Frigate tuna", + "Bullet tuna", + "Frigate and bullet tunas", + "Little tunny(=Atl.black skipj)", + "Black skipjack", + "Kawakawa", + "Skipjack tuna", + "Atlantic bluefin tuna", + "Pacific bluefin tuna", + "Longtail tuna", + "Blackfin tuna", + "Albacore", + "Southern bluefin tuna", + "Yellowfin tuna", + "Bigeye tuna", + "True tunas nei", + "Slender tuna", + "Mackerels nei", + "Tunas nei", + "Indo-Pacific sailfish", + "Atlantic sailfish", + "Blue marlin", + "Black marlin", + "Mediterranean spearfish", + "Striped marlin", + "Atlantic white marlin", + "Shortbill spearfish", + "Longbill spearfish", + "Roundscale spearfish", + "Spearfishes nei", + "Marlins, sailfishes, etc. nei", + "Swordfish", + "Snoek", + "White snake mackerel", + "Striped escolar", + "American sackfish", + "Sackfish", + "Escolar", + "Black gemfish", + "Oilfish", + "Slender escolar", + "Antarctic escolar", + "Silver gemfish", + "Long-finned escolar", + "Royal escolar", + "Bengal escolar", + "Short-lined escolar", + "Nakamura's escolar", + "Paxton's escolar", + "Black snoek", + "Domine", + "Tonga escolar", + "Black snake mackerel", + "Roudi escolar", + "Snake mackerel", + "Snake mackerels, escolars nei", + "Razorback scabbardfish", + "Elongate frostfish", + "Bigeye frostfish", + "Slender frostfish", + "Frostfishes", + "Largehead hairtail", + "Pearly hairtail", + "Hairtails nei", + "Poey's scabbardfish", + "Silver scabbardfish", + "Pacific scabbardfish", + "Doubtful scabbardfish", + "Coromandel hairtail", + "Savalai hairtail", + "Black scabbardfish", + "Intermediate scabbardfish", + "Crested hairtail", + "Smallhead hairtail", + "Longtooth hairtail", + "Hairtails, scabbardfishes nei", + "Tuna-like fishes nei", + "Smalleye squaretail", + "Squaretails nei", + "Blue butterfish", + "Southwest Atlantic butterfish", + "Starry butterfish", + "Butterfishes nei", + "Silver pomfret", + "Chinese silver pomfret", + "Silver pomfrets nei", + "American harvestfish", + "Atlantic butterfish", + "Pacific pompano", + "Pacific harvestfish", + "Salema butterfish", + "Gulf butterfishes, etc. nei", + "Butterfishes, pomfrets nei", + "Indian driftfish", + "Silver-rag driftfish", + "Brown driftfish", + "Ariommatids nei", + "Climbing perch", + "Tailspot ctenopoma", + "Rocky kurper", + "Driftfish", + "Black fathead", + "Blue fathead", + "Cape fathead", + "Bigeye cigarfish", + "Shadow driftfish", + "Man-of-war fish", + "Freckled driftfish", + "Driftfishes nei", + "Rudderfish", + "Southern driftfish", + "New Zealand ruffe", + "Imperial blackfish", + "Violet warehou", + "Pemarco blackfish", + "Pelagic butterfish", + "Cornish blackfish", + "Schedophilus nei", + "Tasmanian ruffe", + "Choicy ruff", + "Common warehou", + "Palm ruff", + "Silver warehou", + "White warehou", + "Warehou nei", + "Bluenose warehou", + "Black driftfish", + "Barrelfish", + "Pacific rudderfish", + "Ruffs, barrelfishes nei", + "Giant gourami", + "Malay combtail", + "Banded gourami", + "Frail gourami", + "Siamese fighting fish", + "Spotted gourami", + "Eyespot gourami", + "Spiketail paradisefish", + "Snakeskin gourami", + "Three spot gourami", + "Gouramis nei", + "Pygmy gourami", + "Roundtail paradisefish", + "Kissing gourami", + "Pikehead", + "European barracuda", + "Sharpfin barracuda", + "Pickhandle barracuda", + "Obtuse barracuda", + "Pacific barracuda", + "Great barracuda", + "Mexican barracuda", + "Guachanche barracuda", + "Pelican barracuda", + "Southern sennet", + "Heller's barracuda", + "Yellowstripe barracuda", + "Guinean barracuda", + "Blackfin barracuda", + "Yellowtail barracuda", + "Bigeye barracuda", + "Yellowmouth barracuda", + "Barracudas nei", + "Barracudas, etc. nei", + "Bigeye stargazer", + "Sandy stargazer", + "Smoothlip stargazer", + "Sailfin stargazer", + "Tasselled triplefin", + "Carmine triplefin", + "Mottled twister", + "Giant triplefin", + "Southern barred triplefin", + "Spotted spiny-eye triplefin", + "Lizard triplefin", + "Cryptic triplefin", + "Lofty triplefin", + "Yellow triplefin", + "Highcrest triplefin", + "Blotched triplefin", + "Chatham deep-water triplefin", + "Obscure triplefin", + "Japanese blacktail triplefin", + "Spotted robust triplefin", + "Scaly headed triplefin", + "Eastern jumping blenny", + "Twinspot triplefin", + "Tropical scaly-headed triplefi", + "Blue-dot triplefin", + "Oblique-swimming triplefin", + "Longfinned triplefin", + "Bullhead triplefin", + "Clarke's triplefin", + "Black-faced blenny", + "Largemouth triplefin", + "Threefin blennies nei", + "Lace klipfish", + "Snaky klipfish", + "Slender platanna-klipfish", + "Cline", + "Ladder klipfish", + "Sad klipfish", + "Golden weedfish", + "Orange clinid", + "Mousey klipfish", + "Spotted kelpfish", + "Nosestripe klipfish", + "Grass klipfish", + "Leafy klipfish", + "Platanna klipfish", + "Clinids fishes nei", + "Dwarf blenny", + "Kirk's blenny", + "Aden blenny", + "Horned rockskipper", + "Arabian blenny", + "Simony's blenny", + "Orangedotted blenny", + "Butterfly blenny", + "Lance blenny", + "Giant blenny", + "Looseskin blenny", + "Striped blenny", + "Filamentous blenny", + "Montagu's blenny", + "Tripplespot blenny", + "Fourline blenny", + "Black blenny", + "Leopard blenny", + "Jugular blenny", + "Highbrow rockskipper", + "Oyster blenny", + "Barnaclebill blenny", + "Imspringer", + "Rippled rockskipper", + "Lined rockskipper", + "Scarface rockskipper", + "Spotted rockskipper", + "Spotty blenny", + "Fowler's rockskipper", + "Mangrove blenny", + "Fringed blenny", + "Pygmy blenny", + "Oman blenny", + "Arab blenny", + "Mekran blenny", + "Muzzled blenny", + "Omox blenny", + "Rock-pool blenny", + "Tentacled blenny", + "Cheekspot blenny", + "Tasseled blenny", + "Ambon rockskipper", + "Hepburn's blenny", + "Arabian fangblenny", + "Floral blenny", + "Variable sabretooth blenny", + "Sabertooth blenny", + "Townsend's fangblenny", + "Natal rockskipper", + "Barred-chin blenny", + "Jewelled blenny", + "Molly miller", + "Seychelle's blenny", + "Japanese snake blenny", + "Hairtail blenny", + "Combtooth blennies", + "Ragfish", + "Nurseryfish", + "Snakehead", + "Spotted snakehead", + "Striped snakehead", + "Indonesian snakehead", + "Barca snakehead", + "Blotched snakehead", + "Small snakehead", + "Snakeheads(=Murrels) nei", + "Tentacled dragonet", + "Dragonet", + "Indian deepwater dragonet", + "Smallhead dragonet", + "Blotchfin dragonet", + "Margaret's dragonet", + "Sand dragonet", + "Arrow dragonet", + "Fingered dragonet", + "Pygmy dragonet", + "Dainty dragonet", + "Shango dragonet", + "Common stinkfish", + "Japanese dragonet", + "Ladder dragonet", + "Lancer dragonet", + "Spotted stinkfish", + "Spotfin dragonet", + "Phaeton dragonet", + "Dragonets nei", + "Island kelpfish", + "Deep-water blenny", + "Galápagos four-eyed blenny", + "Foureye rockskipper", + "Sargassum blenny", + "Palehead blenny", + "Hairy blenny", + "Threadfin blenny", + "Mexican blenny", + "Redrump blenny", + "Roughhead blenny", + "Spinyhead blenny", + "Orangethroat pikeblenny", + "Angel blenny", + "Reefsand blenny", + "Banner blenny", + "Blackhead blenny", + "Wrasse blenny", + "Arrow blenny", + "Tufted blenny", + "Sarcastic fringehead", + "Warthead blenny", + "Panamanian worm blenny", + "Slender blenny", + "Longfin escolar", + "Carolina pygmy sunfish", + "Golden redfish", + "Norway redfish", + "Widow rockfish", + "Yellowtail rockfish", + "Treefish", + "Rosy rockfish", + "Olive rockfish", + "Blue rockfish", + "Pacific ocean perch", + "Bocaccio rockfish", + "Vermilion rockfish", + "Beaked redfish", + "Cape redfish", + "Acadian redfish", + "Canary rockfish", + "Chilipepper rockfish", + "Starry rockfish", + "Rougheye rockfish", + "Shortraker rockfish", + "Copper rockfish", + "Splitnose rockfish", + "Greenstriped rockfish", + "Shortbelly rockfish", + "Quillback rockfish", + "Korean rockfish", + "Yellowmouth rockfish", + "Silvergray rockfish", + "Black rockfish", + "Tiger rockfish", + "Redstripe rockfish", + "Yelloweye rockfish", + "Pygmy rockfish", + "Dusky rockfish", + "Stripetail rockfish", + "Harlequin rockfish", + "Northern rockfish", + "China rockfish", + "Rosethorn rockfish", + "Redbanded rockfish", + "Aurora rockfish", + "Sharpchin rockfish", + "Blackgill rockfish", + "Darkblotched rockfish", + "Patagonian redfish", + "Atlantic redfishes nei", + "Decoy scorpionfish", + "Black scorpionfish", + "Red scorpionfish", + "Barbfish", + "Plumed scorpionfish", + "California scorpionfish", + "Player scorpionfish", + "Pacific spotted scorpionfish", + "Sonora scorpionfish", + "Senegalese rockfish", + "Small red scorpionfish", + "Angola rockfish", + "Slender rockfish", + "Madeira rockfish", + "Spotted-fin rockfish", + "Scorpionfishes, rockfishes nei", + "Blackfoot firefish", + "Blackbelly rosefish", + "Red gurnard perch", + "Rosefishes nei", + "Ghanean rockfish", + "Offshore rockfish", + "Large-headed scorpionfish", + "Speckled scorpionfish", + "Lowfin scorpionfish", + "African spotted scorpionfish", + "Jenkin's scorpionfish", + "Humpbacked scorpionfish", + "Weedy stingfish", + "Bearded scorpionfish", + "Whiteblotched scorpionfish", + "Raggy scorpionfish", + "Spotfin scorpionfish", + "Leaf scorpionfish", + "Plaintail turkeyfish", + "Red lionfish", + "Broadbarred firefish", + "Radial firefish", + "Hawaiian turkeyfish", + "Devil firefish", + "Zebra turkeyfish", + "Twospot turkeyfish", + "Shortfin turkeyfish", + "Hawaiian lionfish", + "Shortspine thornyhead", + "Longspine thornyhead", + "Broadbanded thornyhead", + "Cape scorpionfish", + "Atlantic thornyhead", + "Spiny scorpionfish", + "Orange-banded scorpionfish", + "Channeled rockfish", + "Scorpionfishes nei", + "Shortfin searobin", + "Piper gurnard", + "Gurnards nei", + "Bluefin gurnard", + "Tub gurnard", + "Streaked gurnard", + "Cape gurnard", + "Gabon gurnard", + "Spiny red gurnard", + "Longfin gurnard", + "Lesser gurnard", + "Indo-Pacific gurnards", + "Red gurnard", + "Scaly gurnard", + "Butterfly gurnard", + "Carol's gurnard", + "Spiny gurnard", + "Large-scaled gurnard", + "Scalebreast gurnard", + "Bullhorn gurnard", + "Scalybreast gurnard", + "Spiny searobin", + "Bluewing searobin", + "Red searobin", + "Mexican searobin", + "Northern searobin", + "Atlantic searobins", + "Latchet(=Sharpbeak gurnard)", + "Spotted gurnard", + "Grey gurnard", + "Gurnards, searobins nei", + "Spotted coral croucher", + "Threefin velvetfish", + "Crested scorpionfish", + "Pitted stonefish", + "Onestick stingfish", + "Obliquebanded stingfish", + "Grey stingfish", + "Blackfin stonefish", + "Red Sea stonefish", + "Stonefish", + "Orangebanded stingfish", + "Warty prowfish", + "Whiskered prowfish", + "Lingcod", + "Okhotsk atka mackerel", + "Atka mackerel", + "Kelp greenling", + "Skilfish", + "Sablefish", + "Crocodile fish", + "Dwarf flathead", + "Spotfin flathead", + "Rough flathead", + "Japanese flathead", + "Spiny flathead", + "Tentacled flathead", + "Bartail flathead", + "Northern sand flathead", + "Sand flathead", + "Tiger flathead", + "Deep-water flathead", + "Broadhead flathead", + "Celebes flathead", + "Orange-freckled flathead", + "Welander's flathead", + "Blackblotch flathead", + "Thorny flathead", + "Halfspined flathead", + "Tuberculated flathead", + "Crocodile flathead", + "Guinea flathead", + "Flatheads nei", + "Antarctic horsefish", + "Alert pigfish", + "Scaled sculpin", + "Coralline sculpin", + "Rosylip sculpin", + "Spinynose sculpin", + "Sakhalin sculpin", + "Cherskii's sculpin", + "Longhorn sculpin", + "Plain sculpin", + "Shorthorn sculpin", + "Sculpins", + "Fluffy sculpin", + "Roughback sculpin", + "Buffalo sculpin", + "Yellow Irish lord", + "Dusky sculpin", + "Cabezon", + "Sharpnose sculpin", + "Lavender sculpin", + "Pacific staghorn sculpin", + "Belligerent sculpin", + "Scissortail sculpin", + "Jordan's sculpin", + "Moustache sculpin", + "Bigeye sculpin", + "Spectacled sculpin", + "Norway bullhead", + "Twohorn sculpin", + "Brightbelly sculpin", + "Snubnose sculpin", + "Thornback sculpin", + "Spineless sculpin", + "Smoothgum sculpin", + "Puget Sound sculpin", + "Kelp sculpin", + "Roughskin sculpin", + "Fourhorn sculpin", + "Longfin sculpin", + "Manacled sculpin", + "Grunt sculpin", + "Sculpins nei", + "Bighead sculpin", + "Stone sculpin", + "Baikal yellowfin", + "Big Baikal oilfish", + "Mote sculpin", + "Polar sculpin", + "Spinyhead sculpin", + "Smoothcheek sculpin", + "Pale toadfish", + "Northern spearnose poacher", + "Smooth alligatorfish", + "Aleutian alligatorfish", + "Gray starsnout", + "Rockhead", + "Fourhorn poacher", + "Atlantic poacher", + "Pygmy poacher", + "Tubenose poacher", + "Sawback poacher", + "Arctic alligatorfish", + "Blacktip poacher", + "Hooknose", + "Pricklebreast poacher", + "Lumpfish(=Lumpsucker)", + "Leatherfin lumpsucker", + "Smooth lumpsucker", + "Lumpfishes nei", + "Redskinfish", + "Fortescue", + "Marbled stingfish", + "South Australian cobbler", + "Bullrout", + "Wispy waspfish", + "Whiteface waspfish", + "Günther's waspfish", + "Bearded roguefish", + "Draco waspfish", + "African armoured searobin", + "Armoured gurnard", + "Robust armoured-gurnard", + "Spiny snailfish", + "Blacktail snailfish", + "Blotched snailfish", + "Spotted snailfish", + "Gulf snailfish", + "Variegated snailfish", + "Striped seasnail", + "Montagus seasnail", + "Kelp snailfish", + "Tanaka's snailfish", + "Pygmy snailfish", + "Tadpole snailfish", + "Bigtail snailfish", + "Slim snailfish", + "Snailfishes nei", + "Oriental flying gurnard", + "Flying gurnard", + "Flying gurnards nei", + "Red velvetfish", + "Short-armed waspfish", + "Ocellated waspfish", + "Painted greenling", + "Shortspine combfish", + "Short-headed sculpin", + "Crested sculpin", + "Sailfin sculpin", + "Mediterranean scaldfish", + "Imperial scaldfish", + "Thor's scaldfish", + "Cape scaldfish", + "Scaldback", + "Spotless lefteye flounder", + "Drab flounder", + "Scaldfishes nei", + "Angler flatfish", + "Blue flounder", + "Speckled-tail flounder", + "Wide-mouthed flounder", + "Crested flounder", + "Crosseyed flounder", + "Striped-fin flounder", + "Caribbean flounder", + "Wide-eyed flounder", + "Pacific eyed flounder", + "Mottled flounder", + "Leopard flounder", + "Eyed flounder", + "Pelican flounder", + "Slim flounder", + "Martens’ moonflounder", + "Largescale flounder", + "Clear fin-base flounder", + "Günther's flounder", + "Threespot flounder", + "Lefteye flounders nei", + "Scale-eye plaice", + "Atlantic halibut", + "Pacific halibut", + "Banded-fin flounder", + "European plaice", + "Arctic flounder", + "Alaska plaice", + "Cresthead flounder", + "English sole", + "Greenland halibut", + "Rikuzen flounder", + "Deep-sea sole", + "Arrow-tooth flounder", + "Kamchatka flounder", + "Petrale sole", + "Shotted halibut", + "Witch flounder", + "Rex sole", + "Willowy flounder", + "Comb flounder", + "Amer. plaice(=Long rough dab)", + "Flathead flounder", + "Flathead sole", + "Narrow-body righteye flounder", + "Peppered flounder", + "Southern lemon sole", + "Speckled sole", + "New Zealand sole", + "Tudor's flounder", + "Longsnout flounder", + "Yellowfin sole", + "Yellowtail flounder", + "Common dab", + "Longhead dab", + "Sakhalin sole", + "Limandas nei", + "Rock sole", + "Dusky sole", + "Slender sole", + "Slime flounder", + "Dover sole", + "Lemon sole", + "Derwent flounder", + "European flounder", + "Stone flounder", + "Starry flounder", + "Pacific sand sole", + "Yellow striped flounder", + "Winter flounder", + "Marbled flounder", + "Remo flounder", + "Sand flounder", + "Greenback flounder", + "Yellowbelly flounder", + "Sand flounders nei", + "Barfin flounder", + "Spotted halibut", + "Ridged-eye flounder", + "Curlfin sole", + "Hornyhead turbot", + "C-O sole", + "Diamond turbot", + "Sôhachi", + "Butter sole", + "Coloured righteye flounder", + "Righteye flounders nei", + "Black sole", + "Deep water sole", + "Solenette", + "Tufted sole", + "Common sole", + "Sand sole", + "Ovate sole", + "Senegalese sole", + "Blackhand sole", + "Adriatic sole", + "Snouted sole", + "Egyptian sole", + "Elongate sole", + "Stanaland's sole", + "Dwarf sole", + "Spotted sole", + "Wavyband sole", + "Wedge sole", + "Ocellated wedge sole", + "Whiskered sole", + "African solenette", + "Peacock sole", + "Finless sole", + "Zebra sole", + "Fringefin zebra sole", + "Convict zebra sole", + "Indian zebra sole", + "Unicorn sole", + "Bamboo sole", + "Cape sole", + "True sole", + "Narrowbanded sole", + "Commerson's sole", + "White-margined sole", + "Portuguese sole", + "Guinean sole", + "West coast sole", + "Mud sole", + "Southeast Atlantic soles nei", + "Foureyed sole", + "Thickback sole", + "Bastard sole", + "Lusitanian sole", + "Frechkop’s sole", + "Banded sole", + "Thickback soles nei", + "Oriental sole", + "Klein's sole", + "Cyclope sole", + "Soles nei", + "Fourlined tonguesole", + "Carrot tonguesole", + "Long tongue sole", + "Bengal tongue sole", + "Speckled tonguesole", + "Genko sole", + "Largescale tonguesole", + "Bengal toungesole", + "Red tonguesole", + "Malabar tonguesole", + "Canary tonguesole", + "Three-lined tounge sole", + "Senegalese tonguesole", + "Roughscale tonguesole", + "Zanzibar tonguesole", + "Nigerian tonguesole", + "Ghanian tonguesole", + "Guinean tonguesole", + "Tonguesole nei", + "Doublelined tonguesole", + "Blackbelly tonguesole", + "California tonguefish", + "Duskycheek tonguefish", + "Ginsburg's tonguefish", + "Elongate tonguesole", + "Blackcheek tonguefish", + "Vanmelle’s tonguefish", + "Tonguefishes", + "Norwegian topknot", + "Megrim", + "Four-spot megrim", + "Megrims nei", + "Topknot", + "Brill", + "Windowpane flounder", + "Turbot", + "Turbots nei", + "Spotted flounder", + "Yellow-dabbled flounder", + "Branched ray flounder", + "Twospot largescale flounder", + "Scale-eyed flounder", + "Citharids nei", + "Indian halibut", + "Spottail spiny turbot", + "Spiny turbot", + "Spiny turbots nei", + "Cyclope flounder", + "Three-spot flounder", + "Shrimp flounder", + "Fantail flounder", + "Bigmouth sanddab", + "Pacific sanddab", + "Speckled sanddab", + "Smooth flounder", + "Gulf Stream flounder", + "Sand whiff", + "Anglefin whiff", + "Bay whiff", + "Toothed flounder", + "God's flounder", + "Mexican flounder", + "Fringed flounder", + "Peruvian flounder", + "Smallmouth flounder", + "Bigeye flounder", + "Bigmouth flounder", + "Bastard halibut", + "Brazilian flounder", + "California flounder", + "Speckled flounder", + "Summer flounder", + "Fourspot flounder", + "Gulf flounder", + "Southern flounder", + "Fine flounder", + "Patagonian flounder", + "Bastard halibuts nei", + "Deep flounder", + "Roughscale flounder", + "Largetooth flounder", + "Javan flounder", + "Cinnamon flounder", + "Fivespot flounder", + "Three spotted flounder", + "Malayan flounder", + "Shoal flounder", + "Beach flounder", + "Channel flounder", + "Dusky flounder", + "Papillose flounder", + "Drab sole", + "Lined sole", + "Mazatlan sole", + "Hogchoker", + "Longtail sole", + "Antarctic armless flounder", + "Finless flounder", + "Tongue flatfish", + "Cockatoo righteye flounder", + "Huysman's righteye flounder", + "Flatfishes nei", + "Yellow boxfish", + "Bluetail trunkfish", + "Striped cowfish", + "Western smooth boxfish", + "Buffalo trunkfish", + "Smooth trunkfish", + "Rigid boxfish", + "Black-banded pigmy boxfish", + "Longhorn cowfish", + "Scrawled cowfish", + "Honeycomb cowfish", + "Chubby basketfish", + "Triangular boxfish", + "Humpback turretfish", + "Boxfishes nei", + "Evileye blaasop", + "Smooth puffer", + "Diamondback puffer", + "Oceanic puffer", + "Silver-cheeked toadfish", + "Lunartail puffer", + "Smooth blaasop", + "Half-smooth golden pufferfish", + "Bullseye puffer", + "Blunthead puffer", + "Checkered puffer", + "Northern puffer", + "Bandtail puffer", + "Atlantic puffers nei", + "Prickly puffer", + "Milkspotted puffer", + "Purple pufferfish", + "Tiger pufferfish", + "Obscure pufferfish", + "Yellowfin pufferfish", + "Yellowbelly pufferfish", + "Pufferfishes nei", + "Banded puffer", + "Spider-eye puffer", + "Valentin's sharpnose puffer", + "Starry toado", + "White-spotted puffer", + "Map puffer", + "Guineafowl puffer", + "Blackspotted puffer", + "Stellate puffer", + "Immaculate puffer", + "Prickly toadfish", + "Manystriped blowfish", + "Spotted puffer", + "Ringed toadfish", + "Rippled blaasop", + "Orange-spotted toadfish", + "Spiny blaasop", + "Puffers nei", + "Spotbase burrfish", + "Birdbeak burrfish", + "Hooked tonguesole", + "Shortheaded tonguesole", + "Lachner's tonguesole", + "Pacific burrfish", + "Spot-fin porcupinefish", + "Longspined porcupinefish", + "Black-blotched porcupinefish", + "Three-barred porcupinefish", + "Four-bar porcupinefish", + "Longspine burrfish", + "Deep-water burrfish", + "Globefish, porcupine fish", + "Reticulate spikefish", + "Trumpetsnout spikefish", + "Jambeau", + "Fleshy-lipped spikefish", + "Long-spined tripodfish", + "Short-nosed tripodfish", + "Black-flag tripodfish", + "Blacktip tripodfish", + "Threetooth puffer", + "Slender sunfish", + "Ocean sunfish", + "Sunfish", + "Sharptail mola", + "Ocean sunfishes nei", + "Broom filefish", + "Scribbled leatherjac. filefish", + "Unicorn leatherjacket filefish", + "Dotterel filefish", + "Orange filefish", + "Leatherjacket filefishes", + "Sandwich isle file", + "Whitespotted filefish ", + "Filefishes nei", + "Spiny-tailed leatherjacket", + "Pigmy leatherjacket", + "Bearded leatherjacket", + "Large-scaled leatherjacket", + "Prickly leatherjacket", + "Threadsail filefish", + "Planehead filefish", + "Reticulated leatherjacket", + "Black reef leatherjacket", + "Fan-bellied leatherjacket", + "Chinaman-leatherjacket", + "Red Sea longnose filefish", + "False puffer", + "Wedgetail filefish", + "Gulf filefish", + "Pig faced leather jacket", + "Hair-finned filefish", + "Velvet leatherjacket", + "Toothbrush leatherjacket", + "Yelloweye filefish", + "Rhinoceros leatherjacket", + "Fourband leatherjacket", + "Whitespotted pygmy filefish", + "Rough leatherjackets", + "Modest filefish", + "Lesser-spotted leatherjacket", + "Filefishes, leatherjackets nei", + "Orange-lined triggerfish", + "Grey triggerfish", + "Queen triggerfish", + "Finescale triggerfish", + "Bluespotted triggerfish", + "Clown triggerfish", + "Titan triggerfish", + "Largescale triggerfish", + "Rough triggerfish", + "Ocean triggerfish", + "Indian triggerfish", + "Black triggerfish", + "Red-toothed triggerfish", + "Yellowmargin triggerfish", + "White-banded triggerfish", + "Picasso triggerfish", + "Bluethroat triggerfish", + "Halfmoon triggerfish", + "Masked triggerfish", + "Gilded triggerfish", + "Outrigger triggerfish", + "Starry triggerfish", + "Triggerfishes, durgons nei", + "Emerald clingfish", + "Connemarra clingfish", + "Shore clingfish", + "Cornish sucker", + "Panamic clingfish", + "Small-headed clingfish", + "Chubby clingfish", + "Elegant clingfish", + "Rocksucker", + "Urchin clingfish", + "Two-spotted clingfish", + "Orange clingfish", + "Crinoid clingfish", + "Weedsucker", + "Slender clingfish", + "Hector's clingfish", + "Pygmy shore-eel", + "Giant clingfish", + "Papillate clingfish", + "Minute clingfish", + "Streaky clingfish", + "Southern clingfish", + "Bifid clingfish", + "Striped clingfish", + "Clingfishes nei", + "Bocon toadfish", + "Hairy toadfish", + "Pacuma toadfish", + "Toadfishes nei", + "Flat toadfish", + "Western frogfish", + "Lusitanian toadfish", + "White-ribbed toadfish", + "Two-faced toadfish", + "Pony toadfish", + "Dow's toadfish", + "Banded frogfish", + "Gulf toadfish", + "Guinean toadfish", + "Rossignol’s toadfish", + "Broadbodied toadfish", + "Cano toadfish", + "Grunting toadfish", + "Toadfishes, etc. nei", + "Angler(=Monk)", + "Blackbellied angler", + "American angler", + "Shortspine African angler", + "Devil anglerfish", + "Blackfin goosefish", + "Yellow goosefish", + "Monkfishes nei", + "Blackmouth angler", + "Spottedtail angler", + "Longspine African angler", + "Smooth angler", + "Natal angler", + "Anglerfishes nei", + "Glauert's anglerfish", + "Spotfin frogfish", + "Tailjet frogfish", + "Striated frogfish", + "Indian frogfish", + "Shaggy angler", + "Sargassumfish", + "Prickly anglerfish", + "Rough anglerfish", + "Marble-mouthed frogfish", + "Deep-water frogfish", + "Smooth anglerfish", + "Tasselled anglerfish", + "Butler's frogfish", + "Frogfishes nei", + "Pink frogmouth", + "Spiny sea bat", + "Batfish", + "Pancake batfish", + "Longnose batfish", + "Roundel batfish", + "Humpback anglerfish", + "Black seadevils nei", + "Smooth dreamer", + "Spiny dreamer", + "Dreamers nei", + "Triplewart seadevil", + "Kroyer's deep-sea angler fish", + "Horned lantern fish", + "Freshwater fishes nei", + "Groundfishes nei", + "Pelagic fishes nei", + "Finfishes nei", + "Marine fishes nei", + "Demersal percomorphs nei", + "Pelagic percomorphs nei", + "Diadromous fishes nei", + "Batoid fishes nei", + "Various sharks nei", + "Sharks, rays, skates, etc. nei", + "Cartilaginous fishes nei", + "Deep-water sharks nei", + "Water fleas", + "Brine shrimp", + "Brine shrimps nei", + "Copepods", + "Acorn barnacle", + "Scalpellidae barnacles nei", + "Goose barnacle", + "Goose barnacles nei", + "Lepadidae barnacles nei", + "Giant barnacle", + "Barnacle", + "Pacific goose barnacle", + "Leaf barnacle", + "Tanaidaceans", + "Fish biter", + "Spiny serolid isopod", + "Isopods, pillbugs, sowbugs", + "Amphipods", + "Rough mantis shrimp", + "Spottail mantis squillid", + "Kicking mantis shrimp", + "Sorcerer mantis shrimp", + "Catalina mantis", + "Bigelow mantis shrimp", + "Panama mantis shrimp", + "Small mantis shrimp", + "Angolan mantis srimp", + "Japanese squillid mantis shrim", + "Spotted squillid mantis shrimp", + "Mud mantis", + "Smooth squillid mantis shrimp", + "Red sea mantis shrimp", + "Smalleyed squillid mantis shri", + "Vietnamese squillid mantis shr", + "Fivespined squillid mantis shr", + "Common squillid mantis shrimp", + "Variable squillid mantis shrim", + "Squillids nei", + "Reef odontoactylid mantis shri", + "Pastel odontodactylid mantis s", + "Queen lizard mantis", + "Striped mantis", + "Lizard mantis", + "Smooth mantis shrimp", + "Common banded mantis shrimp", + "Robber harpiosquillid mantis s", + "Giant harpiosquillid mantis sh", + "Keeled witch mantis", + "Three spined mantis", + "Stomatopods nei", + "Antarctic krill", + "Ice krill", + "Pygmy krill", + "Spiny krill", + "Northern krill", + "Isada krill", + "Antarctic krill nei", + "Bigeye krill", + "Norwegian krill", + "Northern brown shrimp", + "Banana prawn", + "Yellowleg shrimp", + "Northern pink shrimp", + "Southern white shrimp", + "Kuruma prawn", + "Blue shrimp", + "Whiteleg shrimp", + "Giant tiger prawn", + "Eastern king prawn", + "Fleshy prawn", + "Caramote prawn", + "Aloha prawn", + "Redspotted shrimp", + "Green tiger prawn", + "Brown tiger prawn", + "Northern white shrimp", + "Crystal shrimp", + "Indian white prawn", + "Western king prawn", + "Western white shrimp", + "Redtail prawn", + "Southern pink shrimp", + "Sao Paulo shrimp", + "Southern brown shrimp", + "Witch prawn", + "Red-spot king prawn", + "False white prawn", + "Penaeus shrimps nei", + "Swimming shrimp", + "Titi shrimp", + "Speckled shrimp", + "Jinga shrimp", + "Yellow shrimp", + "Eastern school shrimp", + "Peregrine shrimp", + "Endeavour shrimp", + "Shiba shrimp", + "Kadal shrimp", + "Greasyback shrimp", + "Fire shrimp", + "Greentail shrimp", + "Wood shrimp", + "Western school shrimp", + "Demons prawn", + "York shrimp", + "Fine shrimp", + "Emerald shrimp", + "Middle shrimp", + "Ginger shrimp", + "Bird shrimp", + "Moyebi shrimp", + "Papua shrimp", + "Stork shrimp", + "Spiny greasyback shrimp", + "Sulu shrimp", + "Metapenaeus shrimps nei", + "Deep-water rose shrimp", + "Australian rose shrimp", + "Neptune rose shrimp", + "Explorer rose shrimp", + "Lancer rose shrimp", + "Flamingo shrimp", + "Domino shrimp", + "Rose shrimp", + "Parapenaeus shrimps nei", + "Kiddi shrimp", + "Guinea shrimp", + "Hawknose shrimp", + "Arafura shrimp", + "Coral shrimp", + "Coromandel shrimp", + "Spear shrimp", + "Dog shrimp", + "Torpedo shrimp", + "Dwarf shrimp", + "Parole shrimp", + "Rainbow shrimp", + "Smoothshell shrimp", + "Uncta shrimp", + "Adonis shrimp", + "Thin shrimp", + "Bally shrimp", + "Parapenaeopsis shrimps nei", + "Atlantic seabob", + "Pacific seabob", + "Xiphopenaeus shrimps nei", + "Hardback shrimp", + "Southern rough shrimp", + "Carabali shrimp", + "Roughneck shrimp", + "Indio shrimp", + "Brown rough shrimp", + "Pinto shrimp", + "Northern rough shrimp", + "Coarse shrimp", + "Zebra shrimp", + "Malayan rough shrimp", + "Yellow roughneck shrimp", + "Longlegged rough shrimp", + "Philippines rough shrimp", + "Smooth shrimp", + "Trachypenaeus shrimps nei", + "Needle shrimp", + "Megalops shrimp", + "Scythe shrimp", + "Four-spined needle shrimp", + "Tora velvet shrimp", + "Rice velvet shrimp", + "Whiskered velvet shrimp", + "Reef shrimp", + "Scout velvet shrimp", + "Kishi velvet shrimp", + "Caribbean velvet shrimp", + "Minstrel shrimp", + "Humpback shrimp", + "Broad velvet shrimp", + "Mogi velvet shrimp", + "Northern velvet shrimp", + "Southern velvet shrimp", + "Philip velvet shrimp", + "Pink velvet shrimp", + "Fiddler shrimp", + "Tolo velvet shrimp", + "Velvet shrimp", + "Beebe's velvet shrimp", + "Insular velvet shrimp", + "Mining shrimp", + "Orange shrimp", + "Periscope shrimp", + "Argentine stiletto shrimp", + "Penaeid shrimps nei", + "Pacific seabobs", + "Scarlet shrimp", + "Giant red shrimp", + "Indian red shrimp", + "Blue and red shrimp", + "Striped red shrimp", + "Arabian red shrimp", + "Smooth red shrimp", + "Stout red shrimp", + "Purplehead gamba prawn", + "Aristeus shrimps nei", + "Aristeid shrimps nei", + "Green shrimp", + "Coonstripe shrimp", + "Spot shrimp", + "Northern prawn", + "Ocean shrimp", + "Aesop shrimp", + "Dock shrimp", + "Humpy shrimp", + "Hokkai shrimp", + "Botan shrimp", + "Deep-water bigeye shrimp", + "Pandalus shrimps nei", + "Dorodotes shrimp", + "Chilean nylon shrimp", + "Madagascar nylon shrimp", + "Armed nylon shrimp", + "Humpback nylon shrimp", + "Smooth nylon shrimp", + "Mino nylon shrimp", + "Scarred nylon shrimp", + "Northern nylon shrimp", + "Indian nylon shrimp", + "Japanese nylon shrimp", + "Short-spined nylon shrimp", + "Three-spined nylon shrimp", + "Panama nylon shrimp", + "Golden shrimp", + "Striped soldier shrimp", + "Lesser striped shrimp", + "Gondwana striped shrimp", + "Catalonian striped shrimp", + "Striped gladiator shrimp", + "Italian deep-sea shrimp", + "Arrow shrimp", + "Guinea striped shrimp", + "Scarlet longbeak shrimp", + "Giant longbeak shrimp", + "Mexican longbeak shrimp", + "Colombian longbeak shrimp", + "Plesionika shrimps nei", + "Sidestripe shrimp", + "Morotoge shrimp", + "Pandalopsis shrimps nei", + "Hinged shrimp", + "Whip shrimp", + "Narwal shrimp", + "Oriental narwal shrimp", + "Pandalid shrimps nei", + "Pacific shrimps nei", + "Tsivakihini paste shrimp", + "Jawla paste shrimp", + "Akiami paste shrimp", + "Southern mauxia shrimp", + "Aviu shrimp", + "Australian paste shrimp", + "Northern mauxia shrimp", + "Taiwan mauxia shrimp", + "Alamang shrimp", + "Jembret shrimp", + "Sakura shrimp", + "Sergestid shrimps nei", + "Crimson coral shrimp", + "Banded coral shrimp", + "Gabon shrimp", + "Basket shrimp", + "Koros shrimp", + "Camacuto shrimp", + "Soldier brush shrimp", + "Ekusa shrimp", + "Moluccas brush shrimp", + "Smooth caridina", + "Bengal caridina", + "Sawtooth caridina", + "African caridina", + "Malagasy caridina", + "Needlenose caridina", + "Common caridina", + "Tonkin caridina", + "Pugnose caridina", + "Caridina shrimps nei", + "Nuka shrimp", + "Peaked shrimp", + "Subantarctic ruby prawn nei", + "Pacific ambereye", + "Japanese spinyridge", + "Quayle spinytail", + "Cipango prawn", + "Ridgetail prawn", + "Mamtom prawn", + "Siberian prawn", + "Oriental prawn", + "Roshna prawn", + "Vietnamese crest prawn", + "Ganges delta prawn", + "Bombay prawn", + "West African estuarine prawn", + "Whitebelly prawn", + "Spider prawn", + "Mississippi grass shrimp", + "Eastern grass shrimp", + "Chinese grass shrimp", + "Tonkin grass shrimp", + "Atlantic ditch shrimp", + "Marsh shrimp", + "Pond shrimp", + "Ebro shrimp", + "Lagoon shrimp", + "Indian small prawn", + "Baltic prawn", + "Mangrove prawn", + "Rockpool prawn", + "Chinese ditch prawn", + "Lake prawn", + "Delta prawn", + "Migrant prawn", + "Zaire prawn", + "Caribbean bait prawn", + "Common prawn", + "Gladiator prawn", + "Indian bait prawn", + "Potitinga prawn", + "Carpenter prawn", + "Posidonia prawn", + "Tropical river prawn", + "Barred grass shrimp", + "Hilton shrimp", + "Palaemon shrimps nei", + "Painted river prawn", + "Oriental river prawn", + "Shortleg river prawn", + "Riceland prawn", + "Giant river prawn", + "Amazonian river prawn", + "Monsoon river prawn", + "Cinnamon river prawn", + "Noumea river prawn", + "Cauque river prawn", + "Koua river prawn", + "Birma river prawn", + "New Caledonia river prawn", + "Ganges river prawn", + "Kaira river prawn", + "Congo river prawn", + "Rough river prawn", + "Sweet river prawn", + "Crane river prawn", + "Greybeard river prawn", + "Hawaii river prawn", + "Cascade river prawn", + "Orana river prawn", + "Slender river prawn", + "Striped river prawn", + "Jaro river prawn", + "Java river prawn", + "Agar river prawn", + "Kuncho river prawn", + "Philippine river prawn", + "Monkey river prawn", + "Scissor river prawn", + "Mountain river prawn", + "Malayam scale prawn", + "Madagascar scale prawn", + "Brackish river prawn", + "Knobtooth prawn", + "Ohio river prawn", + "Buchura river prawn", + "Patsa river prawn", + "Muff prawn", + "Volta river prawn", + "Hairy river prawn", + "Goda river prawn", + "Sunda river prawn", + "Longarm river prawn", + "Forest river prawn", + "Dimua river prawn", + "African river prawn", + "Hancock's river prawn", + "Western river prawn", + "Shortfinger river shrimp", + "Suriname river prawn", + "River prawns nei", + "Changallo shrimp", + "Freshwater prawns, shrimps nei", + "Palaemonid shrimps nei", + "Painted harlequin shrimp", + "Tanner's deep-water shrimp", + "Northern blunt-tail shrimp", + "Armoured shrimp", + "Spiny armoured shrimp", + "Panama armoured shrimp", + "Vicary armoured shrimp", + "Goblin prawn", + "Kuro shrimp", + "Japanese sand shrimp", + "Alaska shrimp", + "Common shrimp", + "Gray shrimp", + "California shrimp", + "Blacktailed shrimp", + "Bay shrimp", + "Sand shrimp", + "Crangon shrimps nei", + "Hardshell shrimp", + "Feather shrimp", + "Spiny shrimp", + "Bering shrimp", + "Four-spines nutshell shrimp", + "Sculptured shrimps nei", + "Areolated horned shrimp", + "Nutshell shrimp", + "Crangonid shrimps nei", + "Rock shrimp", + "Mediterranean rock shrimp", + "Ridgeback rock shrimp", + "Lesser rock shrimp", + "Tufted rock shrimp", + "Pacific rock shrimp", + "Knight rock shrimp", + "Eyespot rock shrimp", + "Kinglet rock shrimp", + "Burkenroad's rock shrimp", + "Coloured rock shrimp", + "Hardhusk rock shrimp", + "Keeled rock shrimp", + "Target shrimp", + "Martin's rock shrimp", + "Mixed rock shrimp", + "Peanut rock shrimp", + "Small peanut rock", + "Notched rock shrimp", + "Notched tidal rock shrimp", + "Trident shrimp", + "Salmon shrimp", + "Catherine shrimp", + "Argentine red shrimp", + "Royal red shrimp", + "Pleoticus shrimps nei", + "Veiled shrimp", + "Doris veiled shrimp", + "Hymenopenaeus shrimp nei", + "Kolibri shrimp", + "African mud shrimp", + "Ridgeback shrimp", + "Coastal mud shrimp", + "Flower shrimp", + "Guiana mud shrimp", + "Deep-sea mud shrimp", + "Chinese mud shrimp", + "Atlantic mud shrimp", + "Comb shrimp", + "Blossom shrimp", + "Razor mud shrimp", + "Deep-water mud shrimp", + "High ridge mud shrimp", + "Australia mus shrimp", + "Malayan mud shrimp", + "False comb shrimp", + "Algoa shrimp", + "Solenocera shrimps nei", + "Knife shrimp", + "Jack-knife shrimp", + "Chilean knife shrimp", + "Knife shrimps nei", + "Solenocerid shrimps nei", + "Spider shrimp", + "African spider shrimp", + "Spider prawns nei", + "Wellington shrimp", + "Kangaroo shrimp", + "Lesser glass shrimp", + "Japanese glass shrimp", + "Pink glass shrimp", + "White glass shrimp", + "Crimson pasiphaeid", + "Rabbitnose shrimp", + "Striped hinge beak shrimp", + "Sabre prawn", + "Flathead snapping shrimp", + "Teppo snapping shrimp", + "Forceps snapping shrimp", + "Nymph snapping shrimp", + "Red snapping shrimp", + "Daisy snapping shrimp", + "Bigclaw snapping shrimp", + "Armed snapping shrimp", + "Japanese snapping shrimp", + "Bristle snapping shrimp", + "Queensland snapping shrimp", + "Coral snapping shrimp", + "Telescope shrimp", + "Yamato shrimp", + "Greenland shrimp", + "Iso shrimp", + "Hunter shrimp", + "Companion shrimp", + "Cock shrimp", + "Shortspine shrimp", + "Toy shrimp", + "Flexed shrimp", + "Tsuno shrimp", + "Hoso shrimp", + "Medusa shrimp", + "Platenose shrimp", + "Flatnose shrimp", + "Lined shrimp", + "Monaco shrimp", + "Indian lined shrimp", + "Common cleaner shrimp", + "Cardinal shrimp", + "Friendly spine shrimp", + "Parrot shrimp", + "Spotted marbled shrimp", + "Processa shrimp", + "Nika shrimp", + "Peruvian one-handed shrimp", + "Processa shrimps nei", + "Natantian decapods nei", + "Longlegged spiny lobster", + "Japanese spiny lobster", + "Mexican spiny loster", + "Painted spiny lobster", + "Mud spiny lobster", + "Ornate spiny lobster", + "Royal spiny lobster", + "Caribbean spiny lobster", + "Brown spiny loster", + "Pronghorn spiny lobster", + "Smoothtail spiny lobster", + "Scalloped spiny lobster", + "Blue spiny lobster", + "Australian spiny lobster", + "Green spiny lobster", + "Spotted spiny lobster", + "Banded spiny lobster", + "Easter Island spiny lobster", + "Chinese spiny lobster", + "White whisker spiny lobster", + "Tropical spiny lobsters nei", + "Cape rock lobster", + "Juan Fernandez rock lobster", + "Green rock lobster", + "Tristan da Cunha rock lobster", + "Red rock lobster", + "Southern rock lobster", + "St.Paul rock lobster", + "Rock lobsters nei", + "Japanese furrow lobster", + "West Indian furrow lobster", + "Gibbon furrow lobster", + "Small furrow lobster", + "Polynesian furrow lobster", + "Buffalo blunthorn lobster", + "American blunthorn lobster", + "Unicorn blunthorn lobster", + "Japanese blunthorn lobster", + "Chilean jagged lobster", + "Cape jagged lobster", + "Pink spiny lobster", + "Common spiny lobster", + "Natal spiny lobster", + "Southern spiny lobster", + "Cape Verde spiny lobster", + "Palinurid spiny lobsters nei", + "Spear lobster", + "Oriental spear lobster", + "Japanese spear lobster", + "Spear lobsters nei", + "Arabian whip lobster", + "Banded whip lobster", + "Red whip lobster", + "Velvet whip lobster", + "Whip lobsters nei", + "Spiny lobsters nei", + "Pacific pincer lobster", + "Atlantic pincer lobster", + "Australian pincer lobster", + "Danube crayfish", + "Noble crayfish", + "Signal crayfish", + "Shasta crayfish", + "Sooty crayfish", + "White-clawed crayfish", + "Stone crayfish", + "European crayfishes nei", + "Red swamp crawfish", + "White crawfish", + "Florida crayfish", + "Ribbon crayfish", + "Procambarus crayfishes nei", + "Calico crayfish", + "Spinycheek crayfish", + "Rusty crayfish", + "Virile crayfish", + "Northern clearwater crayfish", + "Bottlebrush crayfish", + "Cypress crayfish", + "Appalachian brook grayfish", + "Mimic crayfish", + "Lavender burrowing crayfish", + "Ditch fencing crayfish", + "Pearl riverlet crayfish", + "Spider cave crayfish", + "American crayfishes nei", + "Giant tasmanian crayfish", + "Koura crayfish", + "Australian crayfish", + "Marron crayfish", + "Yabby crayfish", + "Red claw crayfish", + "Oceanian crayfishes nei", + "Velvet fan lobster", + "Serrate fan lobster", + "Glabrous fan lobster", + "Japanese fan lobster", + "Smooth fan lobster", + "Butterfly fan lobster", + "Hairy fan lobster", + "Sculptured mitten lobster", + "Caledonian mitten lobster", + "Red-spotted mitten lobster", + "Japanese mitten lobster", + "Easter Island mitten lobster", + "Marbled mitten lobster", + "Flathead lobster", + "Flathead lobsters nei", + "Soft locust lobster", + "Two-spotted locust lobster", + "Lesser slipper lobster", + "Blue-back locust lobster", + "Striated locust lobster", + "Pygmy locust lobster", + "Hunchback locust lobster", + "Locust lobsters nei", + "Mediterranean slipper lobster", + "Spanish slipper lobster", + "Galapagos slipper lobster", + "Brazilian slipper lobster", + "Hooded slipper lobster", + "Three-spot slipper lobster", + "Cape slipper lobster", + "Aesop slipper lobster", + "Red slipper lobster", + "Ridged slipper lobster", + "Easter Island slipper lobster", + "Blunt slipper lobster", + "Clamkiller slipper lobster", + "Rough spanish lobster", + "Small spanish lobster", + "Royal spanish lobster", + "Shield fan lobster", + "Slipper lobsters nei", + "Atlantic deep-sea lobster", + "Prickly deep-sea lobster", + "Red lobster", + "Sculptured lobster", + "Banded lobster", + "Mitten lobsterette", + "Indian Ocean lobsterette", + "Spinetail lobsterette", + "Florida lobsterette", + "Prickly lobsterette", + "Scarlet lobsterette", + "Ridge-back lobsterette", + "Gladiator lobsterette", + "Saya de Malha lobsterette", + "Ruby lobsterette", + "Pacific lobsterette", + "Two-toned lobsterette", + "Red and white lobsterette", + "Grooved lobsterette", + "Mozambique lobster", + "Andaman lobster", + "New Zealand lobster", + "Arafura lobster", + "Armoured lobster", + "Northwest lobster", + "Caribbean lobster", + "Bight lobster", + "Formosa lobster", + "Japanese lobster", + "Neptune lobster", + "Urugayian lobster", + "Okinawa sculptured lobster", + "Siboga lobster", + "China lobster", + "Red-banded lobster", + "Velvet lobster", + "Metanephrops lobsters nei", + "Norway lobster", + "American lobster", + "Cape lobster", + "European lobster", + "Homarus lobsters nei", + "Bellator lobster", + "Southern lobsterette", + "Nilenta lobsterette", + "True lobsters, lobsterettes nei", + "Fenix lobster", + "Musical furry lobster", + "Caribbean furry lobster", + "Indo-Pacific furry lobster", + "Scorpion mud lobster", + "Cape mud shrimp", + "Japanese mud shrimp", + "Blue mud shrimp", + "Mediterranean mud shrimp", + "Chines mud lobster", + "Australian ghost shrimp", + "Beach ghost shrimp", + "Bay ghost shrimp", + "Giant ghost shrimp", + "Japanese ghost shrimp", + "Pink ghost shrimp", + "Flower ghost shrimp", + "Cameroon ghost shrimp", + "Sand ghost shrimp", + "Ghost shrimps nei", + "Deep-water mud lobster", + "Baron mud lobster", + "Keeled mud lobster", + "Small pink lobster", + "Striped reef lobster", + "Violet-spotted reef lobster", + "Bullseye reef lobster", + "Red reef lobster", + "Lobsters nei", + "Euro-American crayfishes nei", + "Spiny mole crab", + "Toad mole crab", + "Big-claw purple hermit crab", + "Mangrove hermit crab", + "Tropical mole crab", + "Coldwater mole crab", + "Pacific mole crab", + "Striated mole crab", + "Coconut crab", + "Pelagic red crab", + "Carrot squat lobster", + "Bristle squat lobster", + "Stout squat lobster", + "Deep-water squat lobster", + "Radiant squat lobster", + "Long-clawed squat lobster", + "Swarming squat lobster", + "Rugose squat lobster", + "Blue squat lobster", + "Craylets, squat lobsters", + "Rough king crab", + "Red king crab", + "Blue king crab", + "Brown king crab", + "King crabs", + "Southern king crab", + "Subantarctic stone crab", + "Stone king crab", + "King crab", + "Golden king crab", + "King crabs nei", + "Softshell red crab", + "Red stone crab", + "Antarctic stone crab", + "Globose king crab", + "Red vermillion crab", + "King crabs, stone crabs nei", + "Right-handed hermit crabs nei", + "Anomuran decapods nei", + "Rough box crab", + "Spiny box crab", + "Spotted box crab", + "Nodose box crab", + "Flame box crab", + "Ornamented boxcrab", + "Ocellated box crab", + "Yellow box crab", + "Ridged box crab", + "Arched box crab", + "Small arched box crab", + "Common box crab", + "Giant box crab", + "Spectacled box crab", + "Shamefaced crab", + "Globose box crab", + "Flecked box crab", + "Havana box crab", + "Spoted box crab", + "Moon crab", + "Flower moon crab", + "Common moon crab", + "Paco box crab", + "Paromola", + "Japan. deep-water carrier crab", + "Homole crab", + "African ghost crab", + "Tufted ghost crab", + "Rounded ghost crab", + "Horned ghost crab", + "Common ghost crab", + "West african fiddler crab", + "Swamp ghost crab", + "Mangrove ghost crab", + "Mud crab", + "Lagoon land crab", + "Giant land crab", + "Chestnut crab", + "Mouthless land crab", + "Blue land crab", + "Longlegged land crab", + "Rugose land crab", + "Red Pacific land crab", + "Whitespotted land crab", + "Malpelo land crab", + "Purple land crab", + "Redeye sponge crab", + "Common sponge crab", + "Sleepy crab", + "Cannonball sponge crab", + "Japanese sponge crab", + "Spanner crab", + "Giant ciliate Ethusa", + "Square-shelled crab", + "Japanese rock crab", + "California red rock crab", + "Atlantic rock crab", + "Dungeness crab", + "Northern lemon rock crab", + "Edible crab", + "Jonah crab", + "Pacific rock crab", + "Toothed rock crab", + "Mola rock crab", + "Jonah crabs, rock crabs nei", + "African mud crab", + "Batwing coral crab", + "Marbled stone crab", + "Clown crab", + "Smooth spooner", + "Splendid spooner", + "Sawedged spooner", + "Spiny spooner", + "Punched stone crab", + "Spottedbelly rock crab", + "Beaded rock crab", + "Orange-hand stone crab", + "Smooth redeyed crab", + "Warty crab", + "Giant egg crab", + "Champagne crab", + "Mangrove stone crab", + "Smooth stone crab", + "Longfingered peeler crab", + "Giant stone crab", + "Black stone crab", + "Lumpy stone crab", + "Stridulating stone crab", + "Maroon stone crab", + "Red swimcrab", + "Speckled swimcrab", + "Sand swimcrab", + "Ridged swimming crab", + "Crucifix crab", + "Japanese swimming crab", + "Smoothshelled swimming crab", + "Twospined arm swimming crab", + "Banded-legged swimming crab", + "Blunt-toothed crab", + "Lesser swimming crab", + "Two-spot swimming crab", + "Hawaiian swimming crab", + "Spiny hands swimming crab", + "Soldier swimming crab", + "Charybdis crabs nei", + "Blue swimming crab", + "Iridescent swimming crab", + "Gazami crab", + "Lancer swimcrab", + "Blotched swimming crab", + "Threespot swimming crab", + "Rough swimcrab", + "Xantus swimcrab", + "Senegalese smooth swimcrab", + "Portunus swimcrabs nei", + "Periscope crab", + "Wide front swimcrab", + "Spiny claw swimming crab", + "Peppermint swimcrab", + "Pelagic swimcrab", + "Robustus swimcrab", + "Knobby swimcrab", + "Slender swimcrab", + "Bigfisted swimcrab", + "Blue crab", + "Marbled swimcrab", + "Gladiator swimcrab", + "Dana swimcrab", + "Giant swimcrab", + "Blunttooth swimcrab", + "Rugose swimcrab", + "Masked swimcrab", + "Maracaibo swimcrab", + "Shelling crab", + "Cuata swimcrab", + "Warrior swimcrab", + "Lesser blue crab", + "Sharptooth swimcrab", + "Callinectes swimcrabs nei", + "Sand crab", + "Green crab", + "Mediterranean shore crab", + "Carcinus crabs nei", + "Indo-Pacific swamp crab", + "Orange mud crab", + "Green mud crab", + "Purple mud crab", + "Velvet swimcrab", + "Wrinkled swimcrab", + "Blue-leg swimcrab", + "Arched swimming crab", + "Smooth swimcrab", + "Liocarcinus swimcrabs nei", + "Henslow’s swimming crab", + "Swimming crabs, etc. nei", + "Purple mangrove crab", + "Racer mangrove crab", + "Lightfoot crab", + "Mottled crab", + "Natal lightfoot crab", + "African matchbox crab", + "Marbled rock crab", + "Angola marsh crab", + "Hairy matchbox crab", + "Shore crab", + "Peregrine crab", + "Sundaic paddler crab", + "Violet vinegar crab", + "Pinkfingered vinegar crab", + "Thai vinegar crab", + "Rathbun's vinegar crab", + "Singapore vinegar crab", + "Tuberculated light-foot crab", + "Chinese mitten crab", + "Long-armed crab", + "Channel-clinging crab", + "Harbour spidercrab", + "Velvet spidercrab", + "Spinous spider crab", + "Lesser spider crab", + "Spiny spider crab", + "Maja spider crabs nei", + "Panamic spidercrab", + "Common decorator crab", + "Pronghorn decorator crab", + "Queen crab", + "Tanner crab", + "Red snow crab", + "Tanner crabs nei", + "Southern spider crab", + "Atlantic lyre crab", + "Arctic lyre crab", + "Toad, lyre crabs nei", + "Hair crab", + "Portly spider crab", + "El Dorado shrimp", + "West African geryon", + "Pink geryon", + "Pacific golden crab", + "Japanese golden crab", + "Austral golden crab", + "Indonesian golden crab", + "Polynesian golden crab", + "Deep-sea red crab", + "Red crab", + "Southwest Atlantic red crab", + "Golden deepsea crab", + "Chaceon geryons nei", + "Mediterranean geryon", + "Deep-sea crabs, geryons nei", + "Tidal spray crab", + "Nimble spray crab", + "Marine crabs nei", + "Freshwater crustaceans nei", + "Marine crustaceans nei", + "Glisten-worm solenogaster", + "Jawed solenogaster", + "Leaf-spiculed solenogaster", + "Articulate chiton", + "Stoke's chiton", + "Chitons nei", + "West Indian fuzzy chiton", + "Gold-flecked chiton", + "Northern red chiton", + "Portobelo chiton", + "Atlantic rose chiton", + "Eastern hanleya", + "Eastern beaded chiton", + "Eastern surf chiton", + "Pacific veiled chiton", + "Smooth glass-hair chiton", + "Occidental tuskshell", + "Stained tuskshell", + "Nineside toothshell", + "Salish toothshell", + "Common periwinkle", + "Periwinkles nei", + "Rough periwinkle", + "Hailstorm prickly-winkle", + "Coronate prickly-winkle", + "Pagoda prickly-winkle", + "Pyramidal prickly-winkle", + "Black murex", + "Radish murex", + "Ambiguous murex", + "Prince murex", + "Endive murex", + "Angular murex", + "Venus comb murex", + "Black-spined murex", + "Rarespined murex", + "Caltrop murex", + "Scalloped murex", + "Murex", + "Cabbage murex", + "Pink-mouthed murex", + "Regal murex", + "Banded murex", + "Margarita murex", + "Apple murex", + "Duplex murex", + "Chocolate rockshell", + "Callao rock shell", + "Two-row rock shell", + "Gourd rock shell", + "Aculeate rock shell", + "Alou rock shell", + "Belligerent rock shell", + "Toad purpura", + "Tuberose rock shell", + "Deltoid rock shell", + "Crowned rock shell", + "Nodose rock shell", + "Wide-foot purpura", + "Rudolph's purpura", + "Persian purpura", + "Turreted drill", + "Shoot rock shell", + "Carinate rock shell", + "Bent-beak murex", + "Snipe's bill murex", + "Goldmouth murex", + "Don Moore's murex", + "Messorius murex", + "Purple dye murex", + "Horned murex", + "Hedge hog murex", + "Crested murex", + "Blainville's murex", + "Adusta murex", + "Ramose murex", + "Firebrand murex", + "West Indian murex", + "Virginal murex", + "Francolina jopas", + "Wreath jopas", + "Vexillate jopas", + "Thomas' rapa whelk", + "Turnish shaped rapa", + "Sea snails", + "False abalone", + "Murex shells nei", + "Pink abalone", + "Black abalone", + "Southern green abalone", + "Red abalone", + "White abalone", + "Threaded abalone", + "Donkey's ear abalone", + "Japanese abalone", + "Giant abalone", + "Glistening abalone", + "Perlemoen abalone", + "Oval abalone", + "Blacklip abalone", + "Tuberculate abalone", + "Small abalone", + "Planate abalone", + "Variable abalone", + "Pinto abalone", + "Abalones nei", + "Snakeskin tegula", + "Articulate monodont", + "Turbinate monodont", + "Mutable monodont", + "Labio monodont", + "Top shell", + "Shining top-shell", + "Granular top-shell", + "Gualtieri's top-shell", + "Laugier's top-shell", + "Painted top-shell", + "Jussieu's chanculus", + "Adanson's gibbula", + "White gibbula", + "Red-brown gibbula", + "Divaricate gibbula", + "Chapel gibbula", + "Magus gibbula", + "Philbert's gibbula", + "Concave gibbula", + "Richard's gibbula", + "Umbilicate medit. Gibbula", + "Variegate gibbula", + "Cone-shaped top", + "Maculated top", + "Commercial top", + "Lined top", + "Trochus shells nei", + "Exasperating jujubine", + "Pyramid top", + "Fenestrate top", + "Dentate top shell", + "Common button top", + "Costate top", + "West Indian top shell", + "Rockpile turban", + "Wavy turban", + "Spirate turban", + "Rough turbo", + "Pacific turban", + "Horned turban", + "Stone turban", + "Squamate turban", + "Giant periwinkle", + "Silvermouth turban", + "Goldmouth turban", + "Green turban", + "Tapestry turban", + "Rough turban", + "Brown Pacific turban", + "Smooth moon turban", + "Coronate moon turban", + "Crass turban", + "Channelled turban", + "Chestnut turban", + "Turbans nei", + "Turban shells nei", + "Blood-stained turbo", + "Spurred turban", + "Carved star-shell", + "Imbricated star-shell", + "Green star-shell", + "Common spider conch", + "Giant spider conch", + "Chiragra spider conch", + "Orange spider conch", + "Milleped spider conch", + "Scorpio spider conch", + "Queen conch", + "Giant Eastern Pacific conch", + "Eastern Pacific fighting conch", + "Cock's comb conch", + "Granulated conch", + "Diana conch", + "Bubble conch", + "Dog conch", + "Gibbose conch", + "Plicate conch", + "Silver conch", + "Strawberry conch", + "Little pitcher conch", + "Samar conch", + "Swan conch", + "Widest Pacific conch", + "Marginate conch", + "Mutable conch", + "Laciniate conch", + "Variable conch", + "Milk conch", + "Roster-tail conch", + "Fighting conch", + "Hawk-wing conch", + "West African stromb", + "Three-knobbed conch", + "Stromboid conchs nei", + "Terebellum conch", + "Shinbone tibia", + "Conch shells nei", + "Whelk", + "Humphrey's buccinum", + "Gates' goblet", + "Striated buccinum", + "D'Orbigny's buccinum", + "Waved goblet", + "Striate pisania", + "Maculated ivory whelk", + "Mud ivory whelk", + "Spiral babylon", + "Antarctic whelk", + "Antarctic trophon", + "Pacific melongena", + "West Indian crown conch", + "Spiral melongena", + "Colossal melongena", + "Ternate melongena", + "Giant hairy melongena", + "Nutmeg melongena", + "Whelks", + "Dwarf frog shell", + "Purse frog shell", + "Common frog shell", + "Warty frog shell", + "Giant frog shell", + "Reddish frog shell", + "Frog shell nei", + "Pacific Scotch bonnet", + "Grooved helmet", + "Saburon helmet", + "Banded bonnet", + "Checkerboard bonnet", + "Grey bonnet", + "Spiny bonnet", + "Rugose bonnet", + "Horned helmet", + "Flame helmet", + "Emperor helmet", + "King helmet", + "Tessellate helmet", + "Bullmouth helmet", + "Helmets shells nei", + "Slender strombina", + "Dotted dove shell", + "Spiny slipper shell", + "Excavated slipper shell", + "Onyx slipper shell", + "Slipper-limpet crepidule", + "Nail-shaped crepidule", + "Goree slipper shell", + "American slipper-limpet", + "Brown cup-and-saucer", + "Chinese cup-and-saucer", + "Du Petit's spindle", + "Beaked fusus", + "Syracusan fusus", + "Distaff spindle", + "Nicobar spindle", + "Philippi's spindle", + "Prince horse conch", + "Salmon horse conch", + "Trapezium horse conch", + "Horse conches nei", + "Wooden fasciolaria", + "True tulip", + "Precious stone shell", + "Many-angled spindle", + "Brown-lined latirus", + "Chestnut latirus", + "Great keyhole limpet", + "Green Panama keyhole limpet", + "Barbados keyhole limpet", + "Rayed keyhole limpet", + "Cloudy keyhole limpet", + "Compressed keyhole limpet", + "Stromboli keyhole limpet", + "Lister's keyhole limpet", + "Giant owl limpet", + "File limpet", + "Pacific sugar limpet", + "Striate limpet", + "Broderip's moon snail", + "Chemnitz's moon snail", + "Beautifully-banded moon snail", + "Starry moon snail", + "Tiger moon snail", + "Calf moon snail", + "Gualteri's moon snail", + "Lined moon snail", + "Adanson's moon snail", + "Collar moon snail", + "Flamed moon snail", + "Morocco moon snail", + "Turton's moon snail", + "Hebrew moon-shell", + "Thousand-spotted moon-shell", + "Dillwyn's moon-shell", + "Ribboned moon-shell", + "Josephine's moon-shell", + "Eggwhite moon snail", + "Elephant's-foot moon snail", + "Chained moon-shell", + "Brown moon-shell", + "Guillemin's moon-shell", + "Pretty moon-shell", + "Entangled moon-shell", + "Flamed moon-shell", + "Bladder moon snail", + "Pear-shaped moon snail", + "Blackmouth moon snail", + "Seba's moon snail", + "Concave baby's ear", + "Tent olive", + "Redmouth olive", + "Amethyst olive", + "Purplemouth olive", + "Common olive", + "Blood olive", + "Tricolor olive", + "Black olive", + "Netted olice", + "Lettered olive", + "Tiger olive", + "Giant Mexican limpet", + "Rayed mediterranean limpet", + "Ferreous limpet", + "Black limpet", + "Rustic limpet", + "Rough limpet", + "Star-shaped limpet", + "Cinnabar limpet", + "Limpet", + "Mournful limpet", + "Limpets nei", + "Velvet helcion", + "Rayed limpet", + "Turtle limpet", + "Antarctic limpet", + "Depressed limpet", + "Kerguelen limpet", + "Decussate distorsio", + "Common distorsio", + "Reticulate distorsio", + "Humboldt's potamid", + "Obtuse horn shell", + "Girdled horn shell", + "Quadrate horn shell", + "Cut-off swamp cerith", + "Telescope snail", + "Mud creeper", + "Sulcate swamp cerith", + "Giant false limpet", + "Javanese false limpet", + "Fringed false limpet", + "Sirius false limpet", + "Pacific cask shell", + "Grinning tun", + "Helmet ton", + "Costate tun", + "Pacific partridge tun", + "Banded tun", + "Channeled tun", + "Spotted tun", + "Oily tun", + "Mosaic tun", + "Gauntlet vase", + "Ceram vase", + "Top vase", + "Spiny vase", + "Caribbean vase", + "Australian trumpet", + "Indian chank", + "Tuberculate kneefastia", + "Noble giant turrid", + "White keeled turrid", + "Lybian turrid", + "Indian turrid", + "Javanese turrid", + "Babylonia turrid", + "Common pelican-foot", + "Serre's pelican-foot", + "Hungarian cap-shell", + "Spicate cerithe", + "Mediterranean cerithe", + "Common cerithe", + "Coral cerith", + "Spinose cerith", + "Giant knobbed cerith", + "Necklace cerith", + "Banded vertagus", + "Common vergatus", + "Rough vergatus", + "Obelisk vergatus", + "Aluco vergatus", + "Lamellose coral-shell", + "Short coral-shell", + "Meyendorff's coral shell", + "Babel's latiaxis", + "Oil-vessel triton", + "Knobbed triton", + "Variegated triton", + "Corrugated triton", + "Cuticle-clad triton", + "Neapolitan triton", + "Shortneck triton", + "Nicobar hairy triton", + "Aquatile hairy triton", + "Intermediate hairy triton", + "Black-spotted triton", + "Common hairy triton", + "Pear triton", + "Angular triton", + "Oregon triton", + "Horny miter", + "Brown miter", + "Zoned miter", + "Adusta miter", + "Episcopal miter", + "Pontifical miter", + "Ebony miter", + "Mitres nei", + "Netted nassa", + "Thickened nassa", + "Filed nassa", + "Changeable nassa", + "Horned nassa", + "Cuvier's nassa", + "Gibbous nassa", + "Cake nassa", + "Coronate nassa", + "Burned nassa", + "Channeled nassa", + "Glans nassa", + "Cyclope nassa", + "Miran bullia", + "Horny auger", + "Monterosato's auger", + "Muddy auger", + "Screw turret", + "Duplicate turret", + "Oxpalate nerite", + "Chameleon nerite", + "Plicate nerite", + "Polished nerite", + "Costate nerite", + "Pitchy nerite", + "Flatspired nerite", + "Scaly nerite", + "Bleeding tooth", + "Senegal nerite", + "Turreted nerite", + "Great worm shell", + "Snake-like worm shell", + "Jellyfish worm shell", + "Sunburst carrier shell", + "Arabian cowrie", + "Map cowrie", + "Humpback cowrie", + "Mole cowrie", + "Tiger cowrie", + "Pacific deer cowrie", + "Gold ring cowrie", + "Eyed cowie", + "Boutet's cowrie", + "Serpent's head cowrie", + "Carnelian cowrie", + "Dragon cowrie", + "Depressed cowrie", + "Eglantine cowrie", + "Eroded cowrie", + "Isabelle cowrie", + "Monster cowrie", + "Lynx cowrie", + "Reticulated cowrie", + "Money cowrie", + "Walled cowrie", + "Onyx cowrie", + "Schilders' cowrie", + "Jester cowrie", + "Tummy cowrie", + "Histrio cowrie", + "Tortoise cowrie", + "Cowries nei", + "Common egg cowrie", + "Shuttlecock volva", + "Graceful fig shell", + "Underlined fig shell", + "Maculated dwarf triton", + "Bat volute", + "Diadem volute", + "Indian volute", + "Common music volute", + "Green music volute", + "Pig's snout volute", + "Marmorate volute", + "Elephant's snout volute", + "Neptune's volute", + "Olla volute", + "Volutes nei", + "Charcot's volute", + "Challenger volute", + "Golden volute", + "Angulate volute", + "Volute", + "Articulate harp", + "True harp", + "Major harp", + "Harp shells nei", + "Rugose iter", + "Little-fox miter", + "Lettered cone", + "Oak cone", + "Suratan cone", + "Beech cone", + "Crowned cone", + "Yellow Pacific cone", + "General cone", + "Leopard cone", + "Livid cone", + "Marble cone", + "Rayed cone", + "Tesselate cone", + "Textile cone", + "Mouse cone", + "Royal cone", + "Cone shells nei", + "Marlinspike", + "Fly spotted auger", + "Subulate auger", + "Sandbeach auger", + "Auger shells nei", + "Giant sundial", + "Clear sundial", + "Shoulderblade sea cat", + "Judas ear cassidula", + "Midas ear cassidula", + "Common pythia", + "Subantarctic struthiolaria", + "Chinese mystery snail", + "Round slippersnail", + "Gastropods nei", + "Greenish glauconomya", + "Mexican jewel box", + "Lazarus jewel box", + "Reflexed jewel box", + "Savigny's jewel box", + "Oxheart cockle", + "Hazelnut ark", + "Mossy ark", + "Noah's ark", + "Chuchoca ark", + "Ventricose ark", + "Turkey wing", + "Indo-Pacific ark", + "Ark clams nei", + "Hairy ark", + "Decussate ark", + "Almond ark", + "Lurid ark", + "Heavy African ark", + "Gambia ark", + "Incongruous ark", + "Chemnitz's ark", + "Globose ark", + "Inequivalve ark", + "Rudder ark", + "Inflated ark", + "Half-crenated ark", + "Corneous ark", + "Pill ark", + "Sowerby's ark", + "Half-propellor ark", + "Propellor ark", + "Blood cockle", + "Antique ark", + "Basket ark", + "Diluvial ark", + "Rusty ark", + "Grand ark", + "Mazatlan's ark", + "Many ribbed ark", + "Nodular ark", + "Reinhart's ark", + "Black ark", + "Eared ark", + "Brown ark", + "Senegal ark", + "Blood ark", + "Anadara clams nei", + "Washboard", + "Ohio pigtoe", + "Dromedary pearlymussel", + "Eastern pearlshell", + "Western pearlshell", + "Rainbow", + "Wavy-rayed lampmussel", + "Giant floater", + "Swan mussel", + "Triangle sail mussel", + "Cockscomb pearl mussel", + "Freshwater mussel shells", + "Blacklip pearl oyster", + "Silverlip pearl oyster", + "Jingle pearl oyster", + "Cape pearl-oyster", + "Japanese pearl oyster", + "Tiled pearl oyster", + "Atlantic pearl oyster", + "Mazatlan pearl oyster", + "Fringed pearl oyster", + "Spotted pearl oyster", + "Rayed pearl oyster", + "Pearl oysters nei", + "Pearl oyster shells nei", + "Penguin wing oyster", + "Western wing oyster", + "Swift wing oyster", + "European wing oyster", + "Wing oysters nei", + "Fingerprint oyster", + "Australian mud oyster", + "Red flat oyster", + "Chilean flat oyster", + "Japanese flat oyster", + "European flat oyster", + "Yaquina oyster", + "New Zealand dredge oyster", + "Denticulate rock oyster", + "Flat oysters nei", + "New Zealand rock oyster", + "Kegaki oyster", + "Philippines hooded oyster", + "Coral rock oyster", + "Palmate oyster", + "Hooded oyster", + "Sydney cupped oyster", + "Spiny rock oyster", + "Leaf oyster", + "Frons oyster", + "Angel oyster", + "Sand oyster", + "Stone oyster", + "Cock's comb oyster", + "Pacific cupped oyster", + "Mangrove cupped oyster", + "American cupped oyster", + "Ariake cupped oyster", + "Gryphea cupped oyster", + "Indian backwater oyster", + "Slipper cupped oyster", + "Lugubrious cupped oyster", + "Cortez oyster", + "Suminoe oyster", + "Columbia black oyster", + "Gasar cupped oyster", + "Cupped oysters nei", + "Megodon oyster", + "Dwarf oyster", + "Olympia oyster", + "Crested oyster", + "Flat and cupped oysters nei", + "Felippone's scallop", + "Tehuelche scallop", + "Queen scallop", + "Antarctic scallop", + "Japanese baking scallop", + "Modest scallop", + "Chinese scallop", + "Lunar Mexican scallop", + "San Diego scallop", + "Silken scallop", + "Vogde's scallop", + "Great Atlantic scallop", + "Groovesided scallop", + "Great Mediterranean scallop", + "New Zealand scallop", + "Southern Australia scallop", + "Zigzag scallop", + "Pecten scallops nei", + "Saucer scallop", + "Asian moon scallop", + "Paper moon scallop", + "Bifrons scallop", + "Smooth scallop", + "Proteus scallop", + "Flexuous scallop", + "Giant rock scallop", + "Pacific lion's paw", + "Lion's paw", + "Swift's scallop", + "American sea scallop", + "Royal cloak scallop", + "Cat's paw scallop", + "Club scallop", + "Calico scallop", + "Atlantic bay scallop", + "Peruvian calico scallop", + "Pacific calico scallop", + "Variegated scallop", + "Iceland scallop", + "Farrer's scallop", + "Noble scallop", + "Doughboy scallop", + "Spiny scallop", + "Hind's scallop", + "Senatorial scallop", + "Little bay scallop", + "Scaly Pacific scallop", + "Scallop", + "Cloak scallop", + "Flatribbed scallop", + "Leopard scallop", + "Distant scallop", + "Box scallop", + "Singapore scallop", + "Weathervane scallop", + "Yesso scallop", + "Delicate scallop", + "Patagonian scallop", + "Scallops nei", + "Ocean quahog", + "Korean mussel", + "Californian mussel", + "Chilean mussel", + "New Zealand blue mussel", + "Blue mussel", + "Kerguelen mussel", + "Norhtern blue mussel", + "River Plata mussel", + "Mediterranean mussel", + "Australian mussel", + "Mytilus mussels nei", + "Guyana swamp mussel", + "Strigate mangrove mussel", + "Reeve's mangrove mussel", + "Arcuate mussel", + "Atlantic ribbed mussel", + "Hooked mussel", + "European date mussel", + "Pacific date mussel", + "Cylinder date mussel", + "Date mussels nei", + "Senhouse horse mussel", + "Box mussel", + "Distorted mussel", + "Choro mussel", + "Black mussel", + "Pinpricked mussel", + "Eared horse mussel", + "Bearded horse mussel", + "Kurilean horse mussel", + "Yellowbanded horse mussel", + "Northern horse mussel", + "Philippine horse mussel", + "Capax horse mussel", + "Tulip mussel", + "Offshore horse mussel", + "Straight horse mussel", + "Shiny mussel", + "Rhomboid mussel", + "False tulip mussel", + "Adriatic horse mussel", + "Furrowed horse mussel", + "Horse mussels nei", + "South American rock mussel", + "Green mussel", + "New Zealand mussel", + "Indian brown mussel", + "African mussel", + "Perna mussels nei", + "Cholga mussel", + "Sea mussels nei", + "Striped venus", + "King's littleneck", + "Pullet carpet shell", + "Golden carpet shell", + "Banded carpet shell", + "Corrugated venus", + "Durable venus", + "Purple amiantis", + "West Indian pointed venus", + "Squamose venus", + "Smooth callista", + "Cross-barred venus", + "Kellett's Panama venus", + "King venus", + "Stutchbury's venus", + "Common Californian venus", + "Smooth Pacific venus", + "Ornate venus", + "Frilled Californian venus", + "Small banded venus", + "Semi-rough venus", + "African venus", + "Chamber venus", + "Koch's venus", + "Magellan clam", + "Peruvian yellow clam", + "Discrepant venus", + "Forked venus", + "Tumid venus", + "Comb venus", + "Venus nei", + "Equilateral venus", + "Hiant venus", + "Japan venus", + "Marbled venus", + "Camp pitar venus", + "Ornate pitar venus", + "Calico clam", + "Sunray venus", + "Fertile venus", + "Ovate clam", + "Japanese hard clam", + "Asiatic hard clam", + "Backwater hard clam", + "Lyrate hard clam", + "Spotted hard clam", + "Hard clams nei", + "Golden callista", + "Squalid callista", + "Princess venus", + "Youthful venus", + "Many-ridged venus", + "Clathrate venus", + "Reticulated venus", + "Grooved carpet shell", + "Japanese carpet shell", + "Variegated carpet shell", + "Carpet shells nei", + "Ridged pitar venus", + "Royal comb venus", + "Lightning venus", + "Rostrate pitar", + "Self-coloured pitar", + "Yellow pitar venus", + "Pellucid pitar venus", + "Rough pitar venus", + "Swollen venus", + "Tiar venus", + "Turgid venus", + "Lettered venus", + "Belcher's venus", + "Gay's little venus", + "Hians tivela", + "Triangular tivela", + "Pismo clam", + "Ventricose tivela", + "Byron tivela", + "Flat tivela", + "Triple venus", + "Tivelas nei", + "Heart venus", + "Rigid venus", + "Warty venus", + "Plicate venus", + "Script venus", + "Oriental cyclina", + "Mauve sunetta", + "Truncate sunetta", + "Venus clam", + "Butter clam", + "Common butter clam", + "Purple butter clam", + "Butter clams nei", + "Undulate venus", + "Rooster venus", + "Textile venus", + "Semigrooved venus", + "Short neck clams nei", + "Pacific littleneck clam", + "Taca clam", + "Rough littleneck", + "Columbian littleneck", + "Lesser littleneck", + "Brazilian comb venus", + "Thin-shelled littleneck", + "Northern quahog(=Hard clam)", + "Southern hardshell clam", + "Dosinia clam", + "Dunker's dosinia", + "Japanese dosinia", + "Ponderous dosinia", + "Mature dosinia", + "Smooth dosinia", + "Dosinias nei", + "Fine clam", + "Venus clams nei", + "Imperial surf clam", + "Rugose mactra", + "Common otter shell", + "Narrow otter shell", + "Oblong otter shell", + "Elongate mactra", + "Common rangia", + "Western Mexican rangia", + "Fat horse clam", + "Japanese horse clam", + "Pacific horse clam", + "Pacific horse clams nei", + "Maidenhair mactra", + "Pellucid mactra", + "Panamic winged mactra", + "Chinese trough shell", + "Wedge trough shell", + "Discors trough shell", + "Globose clam", + "Ihering's trough shell", + "Smooth mactra", + "Isabel surf clam", + "Lilac trough shell", + "Luzon troughshell", + "Maculated troughshell", + "Plain troughshell", + "Large trough shell", + "Symmetrical trough shell", + "Agate troughshell", + "Violet troughshell", + "Rayed trough shell", + "Grey rough shell", + "Largilliert's mactra", + "Polished mactra", + "Rostrate mactra", + "Californian mactra", + "Concealed surf clam", + "Trough shells nei", + "Glassy mactra", + "Atlantic surf clam", + "Stimpson's surf clam", + "Equal-sized surf clam", + "Oval surf clam", + "Solid surf clam", + "Subtruncate surf clam", + "Surf clams nei", + "Caribbean surf clam", + "Taquilla clams", + "Mactra surf clams nei", + "Giant bittersweet", + "Common European bittersweet", + "Speckled bittersweet", + "Black bittersweet", + "Pilose bittersweet", + "Reeve's bittersweet", + "Lined bittersweet", + "Violet bittersweet", + "Two-spotted bittersweet", + "Scripta bittersweet", + "Vovan bittersweet", + "Comb bittersweet", + "Tessellated bittersweet", + "Honeycomb oyster", + "Wrinkled oyster", + "Spoon oyster", + "Common galatea clam", + "Rough butterfly donax", + "Californian donax", + "Sculptured donax", + "Cuneate donax", + "Common Caribbean donax", + "Toothed donax", + "Pacific bean donax", + "Gracile donax", + "La Plata donax", + "Fleshy donax", + "Common peruvian donax", + "Punctate donax", + "Rugose donax", + "Leather donax", + "Half-striated donax", + "Striate donax", + "Truncate donax", + "Banded donax", + "Goolwa donax", + "Bean donax", + "Smooth donax", + "Lovely donax", + "Beautiful donax", + "Donax clams", + "Giant false donax", + "Tall false donax", + "Smooth false donax", + "Delessert's false donax", + "Rostrate false donax", + "Sharp razor clam", + "Javanese razor clam", + "Cylindrical razor shell", + "European razor clam", + "Akemate razor shell", + "Cape razor clam", + "Kemp's razor shell", + "Malacca razor shell", + "Pink-spotted razor shell", + "Rough jackknife", + "Gould's razor shell", + "Rostrate jackknife", + "Grand razor shell", + "Lamarck's razor shell", + "Guinea razor shell", + "Solen razor clams nei", + "Arched razor shell", + "Atl.jackknife(=Atl.razor clam)", + "Pod razor shell", + "Giant jackknife", + "Sword razor shell", + "Goree razor clam", + "Ensis razor clams nei", + "Pacific razor clam", + "Dall's razor clam", + "Sunset razor clam", + "Winter's razor clam", + "African knife shell", + "Razor clams, knife clams nei", + "Sand gaper", + "Blunt gaper", + "Gaper nei", + "Pacific geoduck", + "Aldovrandi's panope", + "Common hemidonax", + "Common jingle shell", + "Peruvian jingle shell", + "Abalone jingle shell", + "Violet batissa", + "Equilateral marsh clam", + "Carolina marsh clam", + "Common geloina", + "Broad geloina", + "Triangular mash clam", + "Inflated marsh clam", + "Slender marsh clam", + "Bengali geloina", + "Common Indian marsh clam", + "Japanese corbicula", + "Manila clam", + "Asian clam", + "Freshwater clams nei", + "Common basket lucina", + "Elegant basket lucina", + "Spiny cockle", + "European prickly cockle", + "Poorly ribbed cockle", + "Sand cockle", + "Tuberculate cockle", + "Olive green cockle", + "Common edible cockle", + "Costate cockle", + "Gaping cockle", + "Bulow's cockle", + "Basket cockle", + "Giant atlantic cockle", + "Japanese cockle", + "Paper cockle", + "Folded lagoon cockle", + "Norwegian egg cockle", + "Giant Pacific egg cockle", + "Oblong egg cockle", + "Common egg cockle", + "Egg cockles nei", + "Coloured lagoon cockle", + "Consors' cockle", + "American prickly cockle", + "Even cockle", + "American yellow cockle", + "Mexican cockle", + "Slender cockle", + "Pacific yellow cockle", + "Giant Pacific cockle", + "Reddish cockle", + "Angulate cockle", + "Orbit cockle", + "Wrinkled cockle", + "White strawberry cockle", + "Pacific half cockle", + "Pacific strawberry cockle", + "Atlantic strawberry cockle", + "True heart cockle", + "Broad cockle", + "Asiatic cockle", + "Chinese cockle", + "Greenland smoothcockle", + "Cockles nei", + "Striate beach clam", + "Pipi wedge clam", + "Corneous wedge clam", + "Macha clam", + "Yellow wedge clam", + "Tuatua wedge clam", + "Toheroa wedge clam", + "Flat tree oyster", + "Pacific tree oyster", + "Janus tree oyster", + "Saddle tree oyster", + "Wader tree oyster", + "Rayed tree oyster", + "Giant clam", + "Smooth giant clam", + "Fluted giant clam", + "Crocus giant clam", + "Elongate giant clam", + "Giant clams nei", + "Bear paw clam", + "China clam", + "Antarctic soft-shell clam", + "Truncate lantern clam", + "Spiny file shell", + "Common file shell", + "Inflated file shell", + "Rathbun's giant file shell", + "Giant file shell", + "Rough lima", + "Antarctic airy limopsis", + "Toothless lucine", + "Atlantic tiger lucine", + "Pacific tiger lucine", + "Interrupted lucine", + "Punctate lucine", + "Corrugate lucine", + "Divergent lucine", + "Pale lucina", + "Northern lucina", + "Pennsylvania lucine", + "Straight hammer oyster", + "White hammer oyster", + "Black hammer oyster", + "Kerguelen malletia", + "Broad ribbed cardita", + "Antique cardita", + "Tankerville's cardita", + "Twotoned cardita", + "Antarctic cardita", + "Ajar cardita", + "Halfround cardita", + "Olive ark", + "Kerguelen nut shell", + "Antarctic yoldia", + "White piddock", + "Pacific mud piddock", + "Dilate piddock", + "Manila piddock", + "Truncate barnea", + "Angel wing", + "Pacific coast angel wing", + "Oriental angel wing", + "Common piddock", + "Striate martesia", + "Talona pholaad", + "Brittle pen shell", + "Comb pen shell", + "Maura pen shell", + "Tuberculate pen shell", + "Flag pen shell", + "Chautard's pen shell", + "Pen shells nei", + "Noble pen shell", + "Rugose pen shell", + "Bicolor pen shell", + "Prickly pen shell", + "Rough pen shell", + "Elongate sunset clam", + "Minor sunset clam", + "Courtesan sunset clam", + "Squamose sunset clam", + "Truncate sunset clam", + "Depressed sunset clam", + "Faeroe sunset clam", + "Sunset clams nei", + "Western small false donax", + "Chinese sanguin", + "Nuttall's mahogany clam", + "Varnish clam", + "Operculate sanguin", + "Pacific asaphis", + "Diphos sanguin", + "Radiate semele", + "Bark semele", + "Chilean semele", + "Semeles nei", + "Constricted tagelus", + "Dombey's tagelus", + "Stout tagelus", + "Californian tagelus", + "Duckbill tagelus", + "Adanson's tagelus", + "Small short razor", + "Antique razor clam", + "Divaricate short razor", + "Rasp short razor", + "Bean solen", + "Atlantic thorny oyster", + "European thorny oyster", + "Digitate thorny oyster", + "Donkey thorny oyster", + "Pacific thorny oyster", + "Ducal thorny oyster", + "Bearded thorny oyster", + "Butler's thorny oyster", + "Imperial thorny oyster", + "Golden thorny oyster", + "Thorny oysters nei", + "Short macoma", + "Constricted macoma", + "Grand macoma", + "Bentnose macoma", + "White sand macoma", + "Cancellate panope", + "Fleshy tellin", + "Alternate tellin", + "Flat tellin", + "Cross tellin", + "Virgate tellin", + "Lacerate tellin", + "Similar red tellin", + "Foliated tellin", + "Cat's tongue tellin", + "Palate tellin", + "Remies tellin", + "Rasp tellin", + "Timor tellin", + "Glossy tellin", + "Beautiful tellin", + "Delicate tellin", + "Hyaline tellin", + "Senegambian tellin", + "Thin tellin", + "Tellins nei", + "Saddle grooved macoma", + "Paper tellin", + "Fragile tellin", + "Hooked ark", + "Windowpane oyster", + "Saddle oyster", + "Edible shipworm", + "Siamese shipworm", + "Undulated false lucine", + "False angel wing", + "Peppery furrow", + "Mediterranean awning clam", + "Paper thracia", + "Pubescent thracia", + "Zebra mussel", + "Dark falsemussel", + "Santo Domingo falsemussel", + "Clams, etc. nei", + "Koch’s bottletail squid", + "Southern bottletail squid", + "Striped dumpling squid", + "Needle cuttlefish", + "Common cuttlefish", + "African cuttlefish", + "Elegant cuttlefish", + "Pink cuttlefish", + "Andrea cuttlefish", + "Giant Australian cuttlefish", + "Arabian cuttlefish", + "Southern cuttlefish", + "Slender cuttlefish", + "Shortclub cuttlefish", + "Guinean cuttlefish", + "Golden cuttlefish", + "Kobi cuttlefish", + "Broadclub cuttlefish", + "Longarm cuttlefish", + "Spider cuttlefish", + "Kisslip cuttlefish", + "Madokai's cuttlefish", + "Reaper cuttlefish", + "Frog cuttlefish", + "Oman cuttlefish", + "Pharaoh cuttlefish", + "Hooded cuttlefish", + "Curvespine cuttlefish", + "Broadback cuttlefish", + "Trident cuttlefish", + "Giant African cuttlefish", + "Magnificent cuttlefish", + "Patchwork cuttlefish", + "Stumpy cuttlefish", + "Bartlett's cuttlefish", + "Knifebone cuttlefish", + "Ovalbone cuttlefish", + "Ken’s cuttlefish", + "Hedley’s cuttlefish", + "Papuan cuttlefish", + "Striking cuttlefish", + "Small striped cuttlefish", + "Little cuttlefish", + "Large striped cuttlefish", + "Rosecone cuttlefish", + "Smith’s cuttlefish", + "Starry cuttlefish", + "Grooved cuttlefish", + "Viet Nam cuttlefish", + "Voss’ cuttlefish", + "Whitley’s cuttlefish", + "Zanzibar cuttlefish", + "Cuttlefishes nei", + "Paintpot cuttlefish", + "Flamboyant cuttlefish", + "Japanese spineless cuttlefish", + "Spineless cuttlefish", + "Ornate cuttlefish", + "Sotty cuttlefish", + "Web’s cuttlefish", + "Sepiella cuttlefishes nei", + "Cuttlefish, bobtail squids nei", + "Odd bobtail squid", + "Stumpy bobtail squid", + "Japanese bobtail squid", + "Stout bobtail squid", + "Bully bobtail squid", + "North Pacific bobtail squid", + "Tortuga bobtail squid", + "Antilles bobtail squid", + "Big-eyed bobtail squid", + "Big bottom bobtail squid", + "Leucoptera bobtail squid", + "Humming-bird bobtail squid", + "Mimika bobtail squid", + "Southern bobtail squid", + "Dwarf bobtail squid", + "Analogous bobtail squid", + "Atlantic bobtail squid", + "Golden bobtail squid", + "Butterfly bobtail squid", + "Intermediate bobtail squid", + "Tongue bobtail squid", + "Robust bobtail squid", + "Steenstrup's bobtail squid", + "Spotty bobtail squid", + "Knobby bobtail squid", + "Sepiola bobtail squids nei", + "Lentil bobtail squid", + "Elegant bobtail squid", + "Mysterious bobtail squid", + "Common bobtail squid", + "Greater shining bobtail squid", + "Lesser shining bobtail squid", + "Carol bobtail squid", + "Little squid", + "Patagonian squid", + "Opalescent inshore squid", + "Mitre squid", + "Longfin squid", + "Swordtip squid", + "Spear squid", + "Beka squid", + "European squid", + "Kobi squid", + "Indian squid", + "Cape Hope squid", + "Veined squid", + "Japanese squid", + "Bigeye inshore squid", + "Slender inshore squid", + "Island inshore squid", + "Sao Paulo squid", + "Siboga squid", + "Surinam squid", + "Common squids nei", + "Southern reef squid", + "Bigfin reef squid", + "Caribbean reef squid", + "Reef squids nei", + "European common squid", + "Midsize squid", + "African squid", + "Alloteuthis squids nei", + "Western Atlantic brief squid", + "Guinean thumbstall squid", + "Panama brief squid", + "Thumbstall squids nei", + "Dart squid", + "Bartsch's squid", + "Long barrel squid", + "Inshore squids nei", + "Glassy flying squid", + "Neon flying squid", + "Webbed flying squid", + "Orangeback flying squid", + "Flying squids nei", + "Atlantic bird squid", + "Shiny bird squid", + "Northern shortfin squid", + "Broadtail shortfin squid", + "Argentine shortfin squid", + "Sharptail shortfin squid", + "Shortfin squids nei", + "Lesser flying squid", + "Jumbo flying squid", + "Luminous flying squid", + "Purpleback flying squid", + "European flying squid", + "Antarctic flying squid", + "Japanese flying squid", + "Angolan flying squid", + "Todarodes flying squids nei", + "Wellington flying squid", + "Gould's flying squid", + "Hawaiian flying squid", + "Nototodarus flying squids nei", + "Sevenstar flying squid", + "Ommastrephidae squids nei", + "Various squids nei", + "Greater hooked squid", + "Smooth hooked squid", + "Japanese hooked squid", + "Rugose hooked squid", + "Robust clubhook squid", + "Hooked squids nei", + "Angel squid", + "Common clubhook squid", + "Boreal clubhook squid", + "Atlantic cranch squid", + "Armed cranch squid", + "Antarctic cranch squid", + "Greater argonaut", + "Knobby argonaut", + "Argonauts nei", + "Turquet's octopus", + "Antarctic octopuses", + "Gloomy octopus", + "Tehuelche octopus", + "Big blue octopus", + "Whiparm octopus", + "White-spotted octopus", + "Common octopus", + "Brownstriped octopus", + "Sandbird octopus", + "Caribbean reef octopus", + "Chestnut octopus", + "Lilliput longarm octopus", + "North Pacific giant octopus", + "Marbled octopus", + "Globe octopus", + "Bumblebee octopus", + "Pygmy octopus", + "Lobed octopus", + "Mexican four-eyed octopus", + "Webfoot octopus", + "Spider octopus", + "Moon octopus", + "Atlantic banded octopus", + "Octopuses nei", + "Horned octopus", + "Musky octopus", + "Combed octopus", + "Horned and musky octopuses", + "North Atlantic octopus", + "Globose octopus", + "Spiney-horn octopus", + "January octopus", + "Dana octopus", + "Map octopus", + "Unihorn octopus", + "Old woman octopus", + "Fourhorn octopus", + "Antarctic knobbed octopus", + "Yellow octopus", + "Patagonian giant octopus", + "Octopuses, etc. nei", + "Long-armed squid", + "Umbrella squid", + "Flowervase jewell squid", + "Elongate jewell squid", + "Reverse jewell squid", + "Scaled squid", + "Coffeebean scaled squid", + "Pfeffer's enope squid", + "Jewel enope squid", + "Verany's enope squid", + "Sharpear enope squid", + "Roundear enope squid", + "Sparkling enope squid", + "Smallfin gonate squid", + "Schoolmaster gonate squid", + "Berryteuthis gonate squids nei", + "Boreopacific gonate squid", + "Mako gonate squid", + "Boreoatlantic gonate squid", + "Madokai gonate squid", + "Shortarm gonate squid", + "Atlantic gonate squid", + "Gonate squids nei", + "Deep-sea squid", + "Ornate arm squid", + "Common arm squid", + "Arm squids nei", + "Ruppell's octopus squid", + "Dana octopus squid", + "Diamondback squid", + "Glacial squid", + "Antarctic neosquid", + "Umbrella octopus nei", + "Emperor nautilus", + "Bellybutton nautilus", + "Ram's horn squid", + "Toothed-fin squid", + "Disc-fin squids nei", + "Palmate octopus", + "Tuberculate octopus", + "Cephalopods nei", + "Freshwater molluscs nei", + "Marine molluscs nei", + "Marine shells nei", + "Steller sea lion", + "Northern fur seal", + "California sea lion", + "Australian sea lion", + "New Zealand sea lion", + "South American fur seal", + "Guadalupe fur seal", + "South African fur seal", + "Juan Fernandez fur seal", + "Galapagos fur seal", + "Antarctic fur seal", + "New Zealand fur seal", + "Subantarctic fur seal", + "Fur seals nei", + "South American sea lion", + "Walrus", + "Mediterranean monk seal", + "Caribbean monk seal", + "Hawaiian monk seal", + "Northern elephant seal", + "Southern elephant seal", + "Ross seal", + "Leopard seal", + "Harp seal", + "Harbour seal", + "Ringed seal", + "Ribbon seal", + "Caspian seal", + "Baikal seal", + "Larga seal", + "Weddell seal", + "Bearded seal", + "Hooded seal", + "Grey seal", + "Crabeater seal", + "Seals nei", + "Sea otter", + "Marine otter", + "Polar bear", + "Dugong", + "West Indian manatee", + "Amazonian manatee", + "West African manatee", + "Ganges River dolphin", + "Indus River dolphin", + "Cuvier's beaked whale", + "Sherpherd's beaked whale", + "Blainville's beaked whale", + "Gray's beaked whale", + "Ginkgo-toothed beaked whale", + "Hector's beaked whale", + "Hubbs' beaked whale", + "Pigmy beaked whale", + "Sowerby's beaked whale", + "Gervais' beaked whale", + "True's beaked whale", + "Strap-toothed whale", + "Andrews' beaked whale", + "Stejneger's beaked whale", + "Beaked whales nei", + "Northern bottlenose whale", + "Southern bottlenose whale", + "Longman's beaked whale", + "Arnoux's beaked whale", + "Baird's beaked whale", + "Sperm whale", + "Irrawaddy dolphin", + "Australian snubfin dolphin", + "False killer whale", + "Long-finned pilot whale", + "Short-finned pilot whale", + "Pilot whales nei", + "Pygmy killer whale", + "Common dolphin", + "Long-beaked common dolphin", + "Risso's dolphin", + "Melon-headed whale", + "Tucuxi", + "Guyana dolphin", + "Atlantic hump-backed dolphin", + "Indo-Pac. hump-backed dolphin", + "Rough-toothed dolphin", + "Killer whale", + "Northern right whale dolphin", + "Southern right whale dolphin", + "Commerson's dolphin", + "Heaviside's dolphin", + "Hector's dolphin", + "Black dolphin", + "Pacific white-sided dolphin", + "Dusky dolphin", + "White-beaked dolphin", + "Atlantic white-sided dolphin", + "Hourglass dolphin", + "Peale's dolphin", + "Bottlenose dolphin", + "Indo-Pacif. bottlenose dolphin", + "Fraser's dolphin", + "Pantropical spotted dolphin", + "Spinner dolphin", + "Striped dolphin", + "Atlantic spotted dolphin", + "Clymene dolphin", + "Spotted dolphins nei", + "Dolphins nei", + "Harbour porpoise", + "Burmeister's porpoise", + "Vaquita", + "Spectacled porpoise", + "Finless porpoise", + "Dall's porpoise", + "White whale", + "Narwhal", + "Pygmy sperm whale", + "Dwarf sperm whale", + "Boto", + "Baiji", + "Franciscana", + "Toothed whales nei", + "Minke whale", + "Bryde's whale", + "Sei whale", + "Blue whale", + "Fin whale", + "Antarctic minke whale", + "Humpback whale", + "Balaenoptid whales nei", + "Northern right whale", + "Southern right whale", + "North Pacific right whale", + "Bowhead whale", + "Gray whale", + "Pygmy right whale", + "Baleen whales nei", + "Aquatic mammals nei", + "Indian green frog", + "Crab-eating frog", + "Asiatic bull frog", + "Indian skipper frog", + "Indian rice frog", + "Agile frog", + "European frog", + "European green frog", + "Common frog", + "Greek frog", + "Red-legged frog", + "American bull frog", + "Pig frog", + "Northern leopard frog", + "River frog", + "Frogs", + "African bull frog", + "African clawed frog", + "Chilean frog", + "Chinese giant salamander", + "Leatherback turtle", + "Common slider", + "Diamondback terrapins", + "Diamond back terrapins", + "Kemp's ridley turtle", + "Olive ridley turtle", + "Flatback turtle", + "Eastern Pacific green turtle", + "Green turtle", + "Hawksbill turtle", + "Loggerhead turtle", + "Chinese softshell turtle", + "Wattle-necked softshell turtle", + "Malayan softshell turtle", + "River and lake turtles nei", + "Marine turtles nei", + "Stokes' sea snake", + "Beaked sea snake", + "Annulated sea snake", + "Short sea snake", + "Small-headed sea snake", + "Pelagic sea snake", + "Viperine sea snake", + "Erabu sea snake", + "Broad-nosed caiman", + "Paraguayan caiman", + "Spectacled caiman", + "American alligator", + "Chinese alligator", + "Estuarine crocodile", + "Siamese crocodile", + "Australian crocodile", + "Nile crocodile", + "New Guinea crocodile", + "Cuban crocodile", + "Morelet's crocodile", + "American crocodile", + "Slender-snouted crocodile", + "Orinoco crocodile", + "Philippine crocodile", + "Mugger crocodile", + "African dwarf crocodile", + "False gharial", + "Gharial", + "Black caiman", + "Cuvier's Dwarf caiman", + "Smooth-fronted caiman", + "Crocodiles and alligators nei", + "Sooty albatross", + "Light-mantled sooty albatross", + "Amsterdam Island albatross", + "Southern royal albatross", + "Wandering albatross", + "Gibson's albatross", + "Northern royal albatross", + "Antipodean albatross", + "Tristan albatross", + "Laysan albatross", + "Black-footed albatross", + "Waved albatross", + "Short-tailed albatross", + "Indian yellow-nosed albatross", + "Campbell albatross", + "Black-browed albatross", + "Buller's albatross", + "Shy albatross", + "Atlant. yellow-nosed albatross", + "Grey-headed albatross", + "Chatham Islands albatross", + "Salvin's albatross", + "White-capped albatross", + "Albatrosses nei", + "Flesh-footed shearwater", + "Pink-footed shearwater", + "Great shearwater", + "Sooty shearwater", + "Short-tailed shearwater", + "Fluttering shearwater", + "Huttons shearwater", + "Wedge-tailed shearwater", + "Audubon's shearwater", + "Balearic shearwater", + "Manx shearwater", + "Yelkouan shearwater", + "Shearwaters nei", + "White-chinned petrel", + "Grey petrel", + "Parkinson's petrel", + "Westland petrel", + "Spectacled petrel", + "Petrels nei", + "Great-winged petrel", + "Kerguelen petrel", + "White-headed petrel", + "White-necked petrel", + "Gould's Petrel", + "Providence petrel", + "Mottled petrel", + "Trindade petrel", + "Bermuda petrel", + "Black-capped petrel", + "Antarctic petrel", + "Antarctic giant petrel", + "Hall's giant petrel", + "Giant petrels nei", + "Southern fulmar", + "Northern fulmar", + "Cory's shearwater", + "Cape Verde shearwater", + "Cape petrel", + "Antarctic prion", + "Fairy prion", + "Prions nei", + "Lesser snow petrel", + "Greater snow petrel", + "Snow petrels nei", + "Blue petrel", + "Tahiti petrel", + "Petrels and shearwaters nei", + "Wilson's storm petrel", + "Black-bellied storm petrel", + "B/W bellied storm petrels nei", + "European storm-petrel", + "Leach's storm-petrel", + "White-faced storm petrel", + "Common teal", + "Eurasian wigeon", + "Mallard", + "Greylag goose", + "Pink-footed goose", + "Bean goose", + "Tufted duck", + "Greater scaup", + "Brent goose", + "Canada goose", + "Barnacle goose", + "Common goldeneye", + "Long-tailed duck", + "Whooper swan", + "Mute swan", + "White-winged scoter", + "Black scoter", + "Goosander", + "Red-breasted merganser", + "Steller's eider", + "Common eider", + "King eider", + "Common shelduck", + "Ducks, geese and swans nei", + "Great skua", + "South polar skua", + "Brown skua", + "Chilean skua", + "Antarctic tern", + "Great crested tern", + "Sooty tern", + "Arctic tern", + "Common tern", + "Terns nei", + "Kelp gull", + "Silver gull", + "Herring gull", + "Laughing gull", + "Audouin's gull", + "Yellow-legged gull", + "Great black-backed gull", + "Mew gull", + "Lesser black-backed gull", + "Iceland gull", + "Glaucous gull", + "Sabine's gull", + "Common black-headed gull", + "Seagulls nei", + "Ivory gull", + "Black-legged kittiwake", + "Arctic skua", + "Skua", + "White-tailed sea-eagle", + "Adelie penguin", + "Chinstrap penguin", + "Gentoo penguin", + "Macaroni penguin", + "Rockhopper penguin", + "King penguin", + "Penguins nei", + "White-billed diver", + "Black-throated diver", + "Great northern diver", + "Red-throated diver", + "Snowy sheathbill", + "Imperial shag", + "European shag", + "Great cormorant", + "Cormorants nei", + "Australasian gannet", + "Northern gannet", + "Cape gannet", + "Masked booby", + "Boobies and gannets nei", + "South Georgia diving petrel", + "Atlantic puffin", + "Dovekie", + "Black guillemot", + "Common murre", + "Thick-billed murre", + "Razorbill", + "Grey heron", + "Horned grebe", + "Great crested grebe", + "Red-necked grebe", + "Xenophyophores", + "Bryozoans", + "Pterobranchs", + "Glass sponges", + "Honey comb", + "Sheepswool sponge", + "Elephant ear", + "Yellow sponge", + "Glove sponge", + "Greek bathing sponge", + "Reef sponge", + "Shiny sponge", + "Leather sponge", + "Sponges", + "Airy finger sponge", + "Orange frond sponge", + "Ostrich egg sponge", + "Rubber sponge", + "Fibreglass cup sponge", + "Maroon pimpled ear sponge", + "Siliceous sponges", + "Cnidarians nei", + "Wello fire coral", + "Red hydrocorals nei", + "Spiny white hydrocorals nei", + "Hydrocorals", + "Hydrozoans", + "Hydroids, hydromedusae", + "Common jellyfish", + "Cannonball jellyfish", + "Jellyfishes nei", + "Sardinia coral", + "Aka coral", + "Momo, boke magai, misu coral", + "Shiro, white coral", + "Angel skin coral", + "Garnet coral", + "Midway deep-sea coral", + "Precious corals nei", + "Catch bowl coral", + "Branch coral", + "Staghorn coral", + "Finger coral", + "Brush coral", + "Beadlet anemone", + "Girdle anemone", + "Snakelocks anemone", + "Golden anemone", + "Ice-cube tray coral", + "Leaf coral", + "Shoulderblade coral", + "Pillar coral", + "Cactus coral", + "Fungus coral", + "Brain trumpet coral", + "Bushy hard coral", + "Head coral", + "Curved mushroom coral", + "Distorted mushroom coral", + "Elongate mushroom coral", + "Common mushroom coral", + "Rough feather coral", + "Spiny mushroom coral", + "Bowl coral", + "Feather coral", + "Blue coral", + "Hermit anemone", + "Merulina coral", + "Brain root coral", + "Largebrain root coral", + "Lettuce coral", + "Cauliflower coral", + "Elkhorn cora", + "Rasp coral", + "Brocoli coral", + "Thin birdsnest coral", + "Birdsnest coral", + "Smooth cauliflower coral", + "Small star coral", + "Smooth star coral", + "Brain coral", + "Organpipe coral", + "Black coral", + "Umimatsu, pine coral", + "Wire coral", + "Unbranched bamboo coral", + "Branched bamboo coral", + "Sea plume", + "Gorgonians", + "Sea strawberry", + "Splitting fan coral", + "Flabellum cup corals nei", + "Bubble gum coral", + "Red trees", + "Long polyp soft corals nei", + "Madrepora coral", + "Hard corals, madrepores nei", + "Black corals and thorny corals", + "Zoanthids", + "Sea anemones", + "Soft corals", + "Sea pens", + "Brachiopods, lamp shells", + "Annelid worms", + "Sea mouse", + "Bloodworm", + "Ragworm", + "Quill worm", + "Segmented worms nei", + "Serpulid tube worms", + "Lugworm", + "Black lug, Runnydown", + "Eunice sea-worms", + "Thermiphione scaleworms", + "Gallery worm", + "Bristleworms nei", + "Feather duster worm", + "Marine worms", + "Peanut worm", + "Giant sea spiders nei", + "Sea spiders", + "Horseshoe crab", + "Tri-spine horseshoe crab", + "Mangrove horseshoe crab", + "Echinoderms", + "Red starfish", + "Cat's-foot star", + "Cross-fish", + "Magnificent sea-star", + "Abyssal star", + "Geometric star", + "Five-spined star", + "Armless stars", + "Pentagon star", + "Trojan star", + "Rock star", + "Sladen's star", + "Pentagonal tooth-star", + "Sun-star", + "Chubby sun-star", + "Rat-tail stars nei", + "Starfishes nei", + "Deepsea brittle star", + "Waite’s snake-star", + "Gorgons head basket-stars nei", + "Basket, brittle, snake stars", + "Brittle and snake stars", + "Basket stars", + "Japanese sea urchin", + "Red sea urchin", + "Sea urchins nei", + "Blue-spotted sea urchin", + "Porcupine sea urchin", + "Crowned sea urchin", + "Harpooner sea urchin", + "Green sea urchin", + "Deepsea urchin", + "Stony sea urchin", + "European edible sea urchin", + "Deepsea kina", + "Chilean sea urchin", + "Black sea urchin", + "Purple Pacific sea urchin", + "Hedgehog sea urchin", + "Circular sea bisquit", + "Violet sea urchin", + "Striped sea urchin", + "Sea egg", + "Giant keyhole sand dollar", + "Slitted sand dollar", + "Parasol urchin", + "Umbrella urchin", + "Pencil urchins", + "Banded-spine urchin", + "Microsoft mouse", + "Matheson’s heart urchin", + "Purple-heart urchin", + "Fleming’s urchin", + "Sea urchins, etc. nei", + "Surf redfish", + "Hairy blackfish", + "Deep-water redfish", + "Panning's blackfish", + "New Caledonia blackfish", + "Chalky cucumber", + "Leopard fish", + "Brownspotted sandfish", + "Brown sandfish", + "Cotton spinner", + "Sand fish", + "Black teatfish", + "Lollyfish", + "White teatfish", + "Bottleneck sea cucumber", + "Pinkfish", + "Snake fish", + "White threads fish", + "Elephant trunkfish", + "Blackspotted sea cucumber", + "Giant red sea cucumber", + "Prickly redfish", + "Amber fish", + "Giant sea cucumber", + "Four-sided sea cucumber", + "Japanese sea cucumber", + "Curryfish", + "Greenfish", + "Royal cucumber", + "Selenka's sea cucumber", + "Sea cucumbers nei", + "Feather stars and sea lilies", + "Ciona", + "Sea potato", + "Sea squirt", + "Red oyas", + "Red bait", + "Red sea squirt", + "Grooved sea squirt", + "Rock violet", + "Sand violet", + "Sea squirts nei", + "Salps", + "Aquatic invertebrates nei", + "Sea spirulina", + "Spirulina nei", + "Unicell. Chlorella green alga", + "Hairy chaetomorpha", + "Floating chaetomorpha", + "Green sea cushion", + "Branched sea cushion", + "Fragile codium", + "Sea mustard", + "Toothed sloton", + "Small seagrape", + "Coarse seagrape", + "Green sea feather", + "Green sea palm", + "Leafy caulerpa", + "Caulerpa seaweeds", + "Sea cactus", + "Green laver", + "Flat green nori", + "Hollow green nori", + "Welded green nori", + "Dark green nori", + "Bright green nori", + "Sea lettuce", + "Lacy sea lettuce", + "Chicory sea lettuce", + "Green seaweeds", + "Brown leafweed", + "Tangle", + "Japanese kelp", + "Sea belt", + "North European kelp", + "Kelps nei", + "Babberlocks", + "Arboreal ferret", + "Wakame", + "Wakame nei", + "Chilean kelp", + "Southern brown kelp", + "Giant kelp", + "Kelp nei", + "Bladder wrack", + "Toothed wrack", + "Adriatic wrack", + "Common rockweed", + "North Atlantic rockweed", + "Wracks nei", + "Sea thong", + "Bull kelp", + "Golden Cystoseira", + "Rough-stemmed sargassum", + "Double-bladed sargassum", + "Flat-stemmed sargassum", + "Common sargassum", + "Serrate sargassum", + "Common Pacific sargassum", + "Fusiform sargassum", + "Crowned sea bell", + "Triangular sea bell", + "Sea bell", + "Sweet-smelling seaweed", + "Olive forked ribbons", + "Limu lipoa", + "Forked ribbons", + "Mozuku", + "Brown seaweeds", + "Crozier weed", + "Tufted sea moss", + "Tattered sea moss", + "Robust sea moss", + "Membraneous phyllophora", + "Phyllophora nei", + "Rock chickory", + "False sea pine", + "Elkhorn sea moss", + "Zanzibar weed", + "Spiny eucheuma", + "Mottled sea club", + "Eucheuma seaweeds nei", + "Marine bindweed", + "Plocamium", + "Rough coral moss", + "Fine coral moss", + "Pacific coral moss", + "Lithothamnion", + "Stone weed", + "Chalk weed", + "Red forkweed", + "False gorgon", + "Leather gracilaria", + "Arcuate gracilaria", + "Dichotomously branched gracila", + "Segmented gracilaria", + "Spiny gracilaria", + "Broadleaf gracilaria", + "Veiled gracilaria", + "Warty gracilaria", + "Gracilaria seaweeds", + "Prostrate gracilaria", + "Clawed sea moss", + "Dulse", + "Sea spaghetti", + "Carragheen (Irish) moss", + "Skottsberg's gigartina", + "Iridea", + "Iridea nei", + "Hackle weed", + "Spurweed", + "Gigartina seaweeds nei", + "Ribboned nori", + "Spotted nori", + "Purple laver", + "Pink laver", + "Laver (Nori)", + "Frilled nori", + "Nori nei", + "Velvet ceramium", + "Common ceramium", + "Pacific ceramium", + "Ballia", + "Red panache", + "Corsican moss", + "Red seabroom", + "Blunt laurenzia", + "Pacific laurenzia", + "Swollen laurenzia", + "Erect sea moss", + "Cladodonta", + "Red delesseria", + "Moniliform sea moss", + "Magellanic ptilonia", + "Red harpoon", + "Red sea plume", + "Harpoon seaweeds", + "Giant gelidium", + "Hairy gelidium", + "Red gelidium", + "Dwarf gelidium", + "Japanese isinglass", + "Gelidium seaweeds", + "Spanish agar", + "Chaffweed", + "Manifold callophyllis", + "Red sea lettuce", + "Landlady's Wig", + "Fleshy dilsea", + "Red seaweeds", + "Neptune-grass", + "Eel-grass", + "Dwarf eel-grass", + "Sea nymph", + "Tule bulrush", + "Tule nei", + "Aquatic plants nei", + "Seaweeds nei", + "Seagrasses nei" +] \ No newline at end of file diff --git a/src/pokedex.json b/src/pokedex.json index 3209348..652d225 100644 --- a/src/pokedex.json +++ b/src/pokedex.json @@ -1,2485 +1,2485 @@ -[ - { - "id": "1", - "name": "Bulbasaur", - "type": [ - "Grass", - "Poison" - ], - "baseStatistics": { - "hitPoints": 45, - "attack": 49, - "defense": 49, - "specialAttack": 65, - "specialDefense": 65, - "speed": 45 - }, - "classification": "Seed Pokémon" - }, - { - "id": "2", - "name": "Ivysaur", - "type": [ - "Grass", - "Poison" - ], - "baseStatistics": { - "hitPoints": 60, - "attack": 62, - "defense": 63, - "specialAttack": 80, - "specialDefense": 80, - "speed": 60 - }, - "classification": "Seed Pokémon" - }, - { - "id": "3", - "name": "Venusaur", - "type": [ - "Grass", - "Poison" - ], - "baseStatistics": { - "hitPoints": 80, - "attack": 82, - "defense": 83, - "specialAttack": 100, - "specialDefense": 100, - "speed": 80 - }, - "classification": "Seed Pokémon" - }, - { - "id": "4", - "name": "Charmander", - "type": [ - "Fire" - ], - "baseStatistics": { - "hitPoints": 39, - "attack": 52, - "defense": 43, - "specialAttack": 60, - "specialDefense": 50, - "speed": 65 - }, - "classification": "Lizard Pokémon" - }, - { - "id": "5", - "name": "Charmeleon", - "type": [ - "Fire" - ], - "baseStatistics": { - "hitPoints": 58, - "attack": 64, - "defense": 58, - "specialAttack": 80, - "specialDefense": 65, - "speed": 80 - }, - "classification": "Flame Pokémon" - }, - { - "id": "6", - "name": "Charizard", - "type": [ - "Fire", - "Flying" - ], - "baseStatistics": { - "hitPoints": 78, - "attack": 84, - "defense": 78, - "specialAttack": 109, - "specialDefense": 85, - "speed": 100 - }, - "classification": "Flame Pokémon" - }, - { - "id": "7", - "name": "Squirtle", - "type": [ - "Water" - ], - "baseStatistics": { - "hitPoints": 44, - "attack": 48, - "defense": 65, - "specialAttack": 50, - "specialDefense": 64, - "speed": 43 - }, - "classification": "Tiny Turtle Pokémon" - }, - { - "id": "8", - "name": "Wartortle", - "type": [ - "Water" - ], - "baseStatistics": { - "hitPoints": 59, - "attack": 63, - "defense": 80, - "specialAttack": 65, - "specialDefense": 80, - "speed": 58 - }, - "classification": "Turtle Pokémon" - }, - { - "id": "9", - "name": "Blastoise", - "type": [ - "Water" - ], - "baseStatistics": { - "hitPoints": 79, - "attack": 83, - "defense": 100, - "specialAttack": 85, - "specialDefense": 105, - "speed": 78 - }, - "classification": "Shellfish Pokémon" - }, - { - "id": "10", - "name": "Caterpie", - "type": [ - "Bug" - ], - "baseStatistics": { - "hitPoints": 45, - "attack": 30, - "defense": 35, - "specialAttack": 20, - "specialDefense": 20, - "speed": 45 - }, - "classification": "Worm Pokémon" - }, - { - "id": "11", - "name": "Metapod", - "type": [ - "Bug" - ], - "baseStatistics": { - "hitPoints": 50, - "attack": 20, - "defense": 55, - "specialAttack": 25, - "specialDefense": 25, - "speed": 30 - }, - "classification": "Cocoon Pokémon" - }, - { - "id": "12", - "name": "Butterfree", - "type": [ - "Bug", - "Flying" - ], - "baseStatistics": { - "hitPoints": 60, - "attack": 45, - "defense": 50, - "specialAttack": 90, - "specialDefense": 80, - "speed": 70 - }, - "classification": "Butterfly Pokémon" - }, - { - "id": "13", - "name": "Weedle", - "type": [ - "Bug", - "Poison" - ], - "baseStatistics": { - "hitPoints": 40, - "attack": 35, - "defense": 30, - "specialAttack": 20, - "specialDefense": 20, - "speed": 50 - }, - "classification": "Hairy Bug Pokémon" - }, - { - "id": "14", - "name": "Kakuna", - "type": [ - "Bug", - "Poison" - ], - "baseStatistics": { - "hitPoints": 45, - "attack": 25, - "defense": 50, - "specialAttack": 25, - "specialDefense": 25, - "speed": 35 - }, - "classification": "Cocoon Pokémon" - }, - { - "id": "15", - "name": "Beedrill", - "type": [ - "Bug", - "Poison" - ], - "baseStatistics": { - "hitPoints": 65, - "attack": 90, - "defense": 40, - "specialAttack": 45, - "specialDefense": 80, - "speed": 75 - }, - "classification": "Poison Bee Pokémon" - }, - { - "id": "16", - "name": "Pidgey", - "type": [ - "Normal", - "Flying" - ], - "baseStatistics": { - "hitPoints": 40, - "attack": 45, - "defense": 40, - "specialAttack": 35, - "specialDefense": 35, - "speed": 56 - }, - "classification": "Tiny Bird Pokémon" - }, - { - "id": "17", - "name": "Pidgeotto", - "type": [ - "Normal", - "Flying" - ], - "baseStatistics": { - "hitPoints": 63, - "attack": 60, - "defense": 55, - "specialAttack": 50, - "specialDefense": 50, - "speed": 71 - }, - "classification": "Bird Pokémon" - }, - { - "id": "18", - "name": "Pidgeot", - "type": [ - "Normal", - "Flying" - ], - "baseStatistics": { - "hitPoints": 83, - "attack": 80, - "defense": 75, - "specialAttack": 70, - "specialDefense": 70, - "speed": 101 - }, - "classification": "Bird Pokémon" - }, - { - "id": "19", - "name": "Rattata", - "type": [ - "Normal" - ], - "baseStatistics": { - "hitPoints": 30, - "attack": 56, - "defense": 35, - "specialAttack": 25, - "specialDefense": 35, - "speed": 72 - }, - "classification": "Mouse Pokémon" - }, - { - "id": "20", - "name": "Raticate", - "type": [ - "Normal" - ], - "baseStatistics": { - "hitPoints": 55, - "attack": 81, - "defense": 60, - "specialAttack": 50, - "specialDefense": 70, - "speed": 97 - }, - "classification": "Mouse Pokémon" - }, - { - "id": "21", - "name": "Spearow", - "type": [ - "Normal", - "Flying" - ], - "baseStatistics": { - "hitPoints": 40, - "attack": 60, - "defense": 30, - "specialAttack": 31, - "specialDefense": 31, - "speed": 70 - }, - "classification": "Tiny Bird Pokémon" - }, - { - "id": "22", - "name": "Fearow", - "type": [ - "Normal", - "Flying" - ], - "baseStatistics": { - "hitPoints": 65, - "attack": 90, - "defense": 65, - "specialAttack": 61, - "specialDefense": 61, - "speed": 100 - }, - "classification": "Beak Pokémon" - }, - { - "id": "23", - "name": "Ekans", - "type": [ - "Poison" - ], - "baseStatistics": { - "hitPoints": 35, - "attack": 60, - "defense": 44, - "specialAttack": 40, - "specialDefense": 54, - "speed": 55 - }, - "classification": "Snake Pokémon" - }, - { - "id": "24", - "name": "Arbok", - "type": [ - "Poison" - ], - "baseStatistics": { - "hitPoints": 60, - "attack": 95, - "defense": 69, - "specialAttack": 65, - "specialDefense": 79, - "speed": 80 - }, - "classification": "Cobra Pokémon" - }, - { - "id": "25", - "name": "Pikachu", - "type": [ - "Electric" - ], - "baseStatistics": { - "hitPoints": 35, - "attack": 55, - "defense": 30, - "specialAttack": 50, - "specialDefense": 50, - "speed": 90 - }, - "classification": "Mouse Pokémon" - }, - { - "id": "26", - "name": "Raichu", - "type": [ - "Electric" - ], - "baseStatistics": { - "hitPoints": 60, - "attack": 90, - "defense": 55, - "specialAttack": 90, - "specialDefense": 80, - "speed": 110 - }, - "classification": "Mouse Pokémon" - }, - { - "id": "27", - "name": "Sandshrew", - "type": [ - "Ground" - ], - "baseStatistics": { - "hitPoints": 50, - "attack": 75, - "defense": 85, - "specialAttack": 20, - "specialDefense": 30, - "speed": 40 - }, - "classification": "Mouse Pokémon" - }, - { - "id": "28", - "name": "Sandslash", - "type": [ - "Ground" - ], - "baseStatistics": { - "hitPoints": 75, - "attack": 100, - "defense": 110, - "specialAttack": 45, - "specialDefense": 55, - "speed": 65 - }, - "classification": "Mouse Pokémon" - }, - { - "id": "29", - "name": "Nidoran♀", - "type": [ - "Poison" - ], - "baseStatistics": { - "hitPoints": 55, - "attack": 47, - "defense": 52, - "specialAttack": 40, - "specialDefense": 40, - "speed": 41 - }, - "classification": "Poison Pin Pokémon" - }, - { - "id": "30", - "name": "Nidorina", - "type": [ - "Poison" - ], - "baseStatistics": { - "hitPoints": 70, - "attack": 62, - "defense": 67, - "specialAttack": 55, - "specialDefense": 55, - "speed": 56 - }, - "classification": "Poison Pin Pokémon" - }, - { - "id": "31", - "name": "Nidoqueen", - "type": [ - "Poison", - "Ground" - ], - "baseStatistics": { - "hitPoints": 90, - "attack": 92, - "defense": 87, - "specialAttack": 75, - "specialDefense": 85, - "speed": 76 - }, - "classification": "Drill Pokémon" - }, - { - "id": "32", - "name": "Nidoran♂", - "type": [ - "Poison" - ], - "baseStatistics": { - "hitPoints": 46, - "attack": 57, - "defense": 40, - "specialAttack": 40, - "specialDefense": 40, - "speed": 50 - }, - "classification": "Poison Pin Pokémon" - }, - { - "id": "33", - "name": "Nidorino", - "type": [ - "Poison" - ], - "baseStatistics": { - "hitPoints": 61, - "attack": 72, - "defense": 57, - "specialAttack": 55, - "specialDefense": 55, - "speed": 65 - }, - "classification": "Poison Pin Pokémon" - }, - { - "id": "34", - "name": "Nidoking", - "type": [ - "Poison", - "Ground" - ], - "baseStatistics": { - "hitPoints": 81, - "attack": 102, - "defense": 77, - "specialAttack": 85, - "specialDefense": 75, - "speed": 85 - }, - "classification": "Drill Pokémon" - }, - { - "id": "35", - "name": "Clefairy", - "type": [ - "Fairy" - ], - "baseStatistics": { - "hitPoints": 70, - "attack": 45, - "defense": 48, - "specialAttack": 60, - "specialDefense": 65, - "speed": 35 - }, - "classification": "Fairy Pokémon" - }, - { - "id": "36", - "name": "Clefable", - "type": [ - "Fairy" - ], - "baseStatistics": { - "hitPoints": 95, - "attack": 70, - "defense": 73, - "specialAttack": 95, - "specialDefense": 90, - "speed": 60 - }, - "classification": "Fairy Pokémon" - }, - { - "id": "37", - "name": "Vulpix", - "type": [ - "Fire" - ], - "baseStatistics": { - "hitPoints": 38, - "attack": 41, - "defense": 40, - "specialAttack": 50, - "specialDefense": 65, - "speed": 65 - }, - "classification": "Fox Pokémon" - }, - { - "id": "38", - "name": "Ninetales", - "type": [ - "Fire" - ], - "baseStatistics": { - "hitPoints": 73, - "attack": 76, - "defense": 75, - "specialAttack": 81, - "specialDefense": 100, - "speed": 100 - }, - "classification": "Fox Pokémon" - }, - { - "id": "39", - "name": "Jigglypuff", - "type": [ - "Normal", - "Fairy" - ], - "baseStatistics": { - "hitPoints": 115, - "attack": 45, - "defense": 20, - "specialAttack": 45, - "specialDefense": 25, - "speed": 20 - }, - "classification": "Balloon Pokémon" - }, - { - "id": "40", - "name": "Wigglytuff", - "type": [ - "Normal", - "Fairy" - ], - "baseStatistics": { - "hitPoints": 140, - "attack": 70, - "defense": 45, - "specialAttack": 85, - "specialDefense": 50, - "speed": 45 - }, - "classification": "Balloon Pokémon" - }, - { - "id": "41", - "name": "Zubat", - "type": [ - "Poison", - "Flying" - ], - "baseStatistics": { - "hitPoints": 40, - "attack": 45, - "defense": 35, - "specialAttack": 30, - "specialDefense": 30, - "speed": 40 - }, - "classification": "Bat Pokémon" - }, - { - "id": "42", - "name": "Golbat", - "type": [ - "Poison", - "Flying" - ], - "baseStatistics": { - "hitPoints": 75, - "attack": 80, - "defense": 70, - "specialAttack": 65, - "specialDefense": 75, - "speed": 90 - }, - "classification": "Bat Pokémon" - }, - { - "id": "43", - "name": "Oddish", - "type": [ - "Grass", - "Poison" - ], - "baseStatistics": { - "hitPoints": 45, - "attack": 50, - "defense": 55, - "specialAttack": 75, - "specialDefense": 65, - "speed": 30 - }, - "classification": "Weed Pokémon" - }, - { - "id": "44", - "name": "Gloom", - "type": [ - "Grass", - "Poison" - ], - "baseStatistics": { - "hitPoints": 60, - "attack": 65, - "defense": 70, - "specialAttack": 85, - "specialDefense": 75, - "speed": 40 - }, - "classification": "Weed Pokémon" - }, - { - "id": "45", - "name": "Vileplume", - "type": [ - "Grass", - "Poison" - ], - "baseStatistics": { - "hitPoints": 75, - "attack": 80, - "defense": 85, - "specialAttack": 110, - "specialDefense": 90, - "speed": 50 - }, - "classification": "Flower Pokémon" - }, - { - "id": "46", - "name": "Paras", - "type": [ - "Bug", - "Grass" - ], - "baseStatistics": { - "hitPoints": 35, - "attack": 70, - "defense": 55, - "specialAttack": 45, - "specialDefense": 55, - "speed": 25 - }, - "classification": "Mushroom Pokémon" - }, - { - "id": "47", - "name": "Parasect", - "type": [ - "Bug", - "Grass" - ], - "baseStatistics": { - "hitPoints": 60, - "attack": 95, - "defense": 80, - "specialAttack": 60, - "specialDefense": 80, - "speed": 30 - }, - "classification": "Mushroom Pokémon" - }, - { - "id": "48", - "name": "Venonat", - "type": [ - "Bug", - "Poison" - ], - "baseStatistics": { - "hitPoints": 60, - "attack": 55, - "defense": 50, - "specialAttack": 40, - "specialDefense": 55, - "speed": 45 - }, - "classification": "Insect Pokémon" - }, - { - "id": "49", - "name": "Venomoth", - "type": [ - "Bug", - "Poison" - ], - "baseStatistics": { - "hitPoints": 70, - "attack": 65, - "defense": 60, - "specialAttack": 90, - "specialDefense": 75, - "speed": 90 - }, - "classification": "Poison Moth Pokémon" - }, - { - "id": "50", - "name": "Diglett", - "type": [ - "Ground" - ], - "baseStatistics": { - "hitPoints": 10, - "attack": 55, - "defense": 25, - "specialAttack": 35, - "specialDefense": 45, - "speed": 95 - }, - "classification": "Mole Pokémon" - }, - { - "id": "51", - "name": "Dugtrio", - "type": [ - "Ground" - ], - "baseStatistics": { - "hitPoints": 35, - "attack": 100, - "defense": 50, - "specialAttack": 50, - "specialDefense": 70, - "speed": 120 - }, - "classification": "Mole Pokémon" - }, - { - "id": "52", - "name": "Meowth", - "type": [ - "Normal" - ], - "baseStatistics": { - "hitPoints": 40, - "attack": 45, - "defense": 35, - "specialAttack": 40, - "specialDefense": 40, - "speed": 90 - }, - "classification": "Scratch Cat Pokémon" - }, - { - "id": "53", - "name": "Persian", - "type": [ - "Normal" - ], - "baseStatistics": { - "hitPoints": 65, - "attack": 70, - "defense": 60, - "specialAttack": 65, - "specialDefense": 65, - "speed": 115 - }, - "classification": "Classy Cat Pokémon" - }, - { - "id": "54", - "name": "Psyduck", - "type": [ - "Water" - ], - "baseStatistics": { - "hitPoints": 50, - "attack": 52, - "defense": 48, - "specialAttack": 65, - "specialDefense": 50, - "speed": 55 - }, - "classification": "Duck Pokémon" - }, - { - "id": "55", - "name": "Golduck", - "type": [ - "Water" - ], - "baseStatistics": { - "hitPoints": 80, - "attack": 82, - "defense": 78, - "specialAttack": 95, - "specialDefense": 80, - "speed": 85 - }, - "classification": "Duck Pokémon" - }, - { - "id": "56", - "name": "Mankey", - "type": [ - "Fighting" - ], - "baseStatistics": { - "hitPoints": 40, - "attack": 80, - "defense": 35, - "specialAttack": 35, - "specialDefense": 45, - "speed": 70 - }, - "classification": "Pig Monkey Pokémon" - }, - { - "id": "57", - "name": "Primeape", - "type": [ - "Fighting" - ], - "baseStatistics": { - "hitPoints": 65, - "attack": 105, - "defense": 60, - "specialAttack": 60, - "specialDefense": 70, - "speed": 95 - }, - "classification": "Pig Monkey Pokémon" - }, - { - "id": "58", - "name": "Growlithe", - "type": [ - "Fire" - ], - "baseStatistics": { - "hitPoints": 55, - "attack": 70, - "defense": 45, - "specialAttack": 70, - "specialDefense": 50, - "speed": 60 - }, - "classification": "Puppy Pokémon" - }, - { - "id": "59", - "name": "Arcanine", - "type": [ - "Fire" - ], - "baseStatistics": { - "hitPoints": 90, - "attack": 110, - "defense": 80, - "specialAttack": 100, - "specialDefense": 80, - "speed": 95 - }, - "classification": "Legendary Pokémon" - }, - { - "id": "60", - "name": "Poliwag", - "type": [ - "Water" - ], - "baseStatistics": { - "hitPoints": 40, - "attack": 50, - "defense": 40, - "specialAttack": 40, - "specialDefense": 40, - "speed": 90 - }, - "classification": "Tadpole Pokémon" - }, - { - "id": "61", - "name": "Poliwhirl", - "type": [ - "Water" - ], - "baseStatistics": { - "hitPoints": 65, - "attack": 65, - "defense": 65, - "specialAttack": 50, - "specialDefense": 50, - "speed": 90 - }, - "classification": "Tadpole Pokémon" - }, - { - "id": "62", - "name": "Poliwrath", - "type": [ - "Water", - "Fighting" - ], - "baseStatistics": { - "hitPoints": 90, - "attack": 95, - "defense": 95, - "specialAttack": 70, - "specialDefense": 90, - "speed": 70 - }, - "classification": "Tadpole Pokémon" - }, - { - "id": "63", - "name": "Abra", - "type": [ - "Psychic" - ], - "baseStatistics": { - "hitPoints": 25, - "attack": 20, - "defense": 15, - "specialAttack": 105, - "specialDefense": 55, - "speed": 90 - }, - "classification": "Psi Pokémon" - }, - { - "id": "64", - "name": "Kadabra", - "type": [ - "Psychic" - ], - "baseStatistics": { - "hitPoints": 40, - "attack": 35, - "defense": 30, - "specialAttack": 120, - "specialDefense": 70, - "speed": 105 - }, - "classification": "Psi Pokémon" - }, - { - "id": "65", - "name": "Alakazam", - "type": [ - "Psychic" - ], - "baseStatistics": { - "hitPoints": 55, - "attack": 50, - "defense": 45, - "specialAttack": 135, - "specialDefense": 95, - "speed": 120 - }, - "classification": "Psi Pokémon" - }, - { - "id": "66", - "name": "Machop", - "type": [ - "Fighting" - ], - "baseStatistics": { - "hitPoints": 70, - "attack": 80, - "defense": 50, - "specialAttack": 35, - "specialDefense": 35, - "speed": 35 - }, - "classification": "Superpower Pokémon" - }, - { - "id": "67", - "name": "Machoke", - "type": [ - "Fighting" - ], - "baseStatistics": { - "hitPoints": 80, - "attack": 100, - "defense": 70, - "specialAttack": 50, - "specialDefense": 60, - "speed": 45 - }, - "classification": "Superpower Pokémon" - }, - { - "id": "68", - "name": "Machamp", - "type": [ - "Fighting" - ], - "baseStatistics": { - "hitPoints": 90, - "attack": 130, - "defense": 80, - "specialAttack": 65, - "specialDefense": 85, - "speed": 55 - }, - "classification": "Superpower Pokémon" - }, - { - "id": "69", - "name": "Bellsprout", - "type": [ - "Grass", - "Poison" - ], - "baseStatistics": { - "hitPoints": 50, - "attack": 75, - "defense": 35, - "specialAttack": 70, - "specialDefense": 30, - "speed": 40 - }, - "classification": "Flower Pokémon" - }, - { - "id": "70", - "name": "Weepinbell", - "type": [ - "Grass", - "Poison" - ], - "baseStatistics": { - "hitPoints": 65, - "attack": 90, - "defense": 50, - "specialAttack": 85, - "specialDefense": 45, - "speed": 55 - }, - "classification": "Flycatcher Pokémon" - }, - { - "id": "71", - "name": "Victreebel", - "type": [ - "Grass", - "Poison" - ], - "baseStatistics": { - "hitPoints": 80, - "attack": 105, - "defense": 65, - "specialAttack": 100, - "specialDefense": 70, - "speed": 70 - }, - "classification": "Flycatcher Pokémon" - }, - { - "id": "72", - "name": "Tentacool", - "type": [ - "Water", - "Poison" - ], - "baseStatistics": { - "hitPoints": 40, - "attack": 40, - "defense": 35, - "specialAttack": 50, - "specialDefense": 100, - "speed": 70 - }, - "classification": "Jellyfish Pokémon" - }, - { - "id": "73", - "name": "Tentacruel", - "type": [ - "Water", - "Poison" - ], - "baseStatistics": { - "hitPoints": 80, - "attack": 70, - "defense": 65, - "specialAttack": 80, - "specialDefense": 120, - "speed": 100 - }, - "classification": "Jellyfish Pokémon" - }, - { - "id": "74", - "name": "Geodude", - "type": [ - "Rock", - "Ground" - ], - "baseStatistics": { - "hitPoints": 40, - "attack": 80, - "defense": 100, - "specialAttack": 30, - "specialDefense": 30, - "speed": 20 - }, - "classification": "Rock Pokémon" - }, - { - "id": "75", - "name": "Graveler", - "type": [ - "Rock", - "Ground" - ], - "baseStatistics": { - "hitPoints": 55, - "attack": 95, - "defense": 115, - "specialAttack": 45, - "specialDefense": 45, - "speed": 35 - }, - "classification": "Rock Pokémon" - }, - { - "id": "76", - "name": "Golem", - "type": [ - "Rock", - "Ground" - ], - "baseStatistics": { - "hitPoints": 80, - "attack": 120, - "defense": 130, - "specialAttack": 55, - "specialDefense": 65, - "speed": 45 - }, - "classification": "Megaton Pokémon" - }, - { - "id": "77", - "name": "Ponyta", - "type": [ - "Fire" - ], - "baseStatistics": { - "hitPoints": 50, - "attack": 85, - "defense": 55, - "specialAttack": 65, - "specialDefense": 65, - "speed": 90 - }, - "classification": "Fire Horse Pokémon" - }, - { - "id": "78", - "name": "Rapidash", - "type": [ - "Fire" - ], - "baseStatistics": { - "hitPoints": 65, - "attack": 100, - "defense": 70, - "specialAttack": 80, - "specialDefense": 80, - "speed": 105 - }, - "classification": "Fire Horse Pokémon" - }, - { - "id": "79", - "name": "Slowpoke", - "type": [ - "Water", - "Psychic" - ], - "baseStatistics": { - "hitPoints": 90, - "attack": 65, - "defense": 65, - "specialAttack": 40, - "specialDefense": 40, - "speed": 15 - }, - "classification": "Dopey Pokémon" - }, - { - "id": "80", - "name": "Slowbro", - "type": [ - "Water", - "Psychic" - ], - "baseStatistics": { - "hitPoints": 95, - "attack": 75, - "defense": 110, - "specialAttack": 100, - "specialDefense": 80, - "speed": 30 - }, - "classification": "Hermit Crab Pokémon" - }, - { - "id": "81", - "name": "Magnemite", - "type": [ - "Electric", - "Steel" - ], - "baseStatistics": { - "hitPoints": 25, - "attack": 35, - "defense": 70, - "specialAttack": 95, - "specialDefense": 55, - "speed": 45 - }, - "classification": "Magnet Pokémon" - }, - { - "id": "82", - "name": "Magneton", - "type": [ - "Electric", - "Steel" - ], - "baseStatistics": { - "hitPoints": 50, - "attack": 60, - "defense": 95, - "specialAttack": 120, - "specialDefense": 70, - "speed": 70 - }, - "classification": "Magnet Pokémon" - }, - { - "id": "83", - "name": "Farfetch'd", - "type": [ - "Normal", - "Flying" - ], - "baseStatistics": { - "hitPoints": 52, - "attack": 65, - "defense": 55, - "specialAttack": 58, - "specialDefense": 62, - "speed": 60 - }, - "classification": "Wild Duck Pokémon" - }, - { - "id": "84", - "name": "Doduo", - "type": [ - "Normal", - "Flying" - ], - "baseStatistics": { - "hitPoints": 35, - "attack": 85, - "defense": 45, - "specialAttack": 35, - "specialDefense": 35, - "speed": 75 - }, - "classification": "Twin Bird Pokémon" - }, - { - "id": "85", - "name": "Dodrio", - "type": [ - "Normal", - "Flying" - ], - "baseStatistics": { - "hitPoints": 60, - "attack": 110, - "defense": 70, - "specialAttack": 60, - "specialDefense": 60, - "speed": 110 - }, - "classification": "Triple Bird Pokémon" - }, - { - "id": "86", - "name": "Seel", - "type": [ - "Water" - ], - "baseStatistics": { - "hitPoints": 65, - "attack": 45, - "defense": 55, - "specialAttack": 45, - "specialDefense": 70, - "speed": 45 - }, - "classification": "Sea Lion Pokémon" - }, - { - "id": "87", - "name": "Dewgong", - "type": [ - "Water", - "Ice" - ], - "baseStatistics": { - "hitPoints": 90, - "attack": 70, - "defense": 80, - "specialAttack": 70, - "specialDefense": 95, - "speed": 70 - }, - "classification": "Sea Lion Pokémon" - }, - { - "id": "88", - "name": "Grimer", - "type": [ - "Poison" - ], - "baseStatistics": { - "hitPoints": 80, - "attack": 80, - "defense": 50, - "specialAttack": 40, - "specialDefense": 50, - "speed": 25 - }, - "classification": "Sludge Pokémon" - }, - { - "id": "89", - "name": "Muk", - "type": [ - "Poison" - ], - "baseStatistics": { - "hitPoints": 105, - "attack": 105, - "defense": 75, - "specialAttack": 65, - "specialDefense": 100, - "speed": 50 - }, - "classification": "Sludge Pokémon" - }, - { - "id": "90", - "name": "Shellder", - "type": [ - "Water" - ], - "baseStatistics": { - "hitPoints": 30, - "attack": 65, - "defense": 100, - "specialAttack": 45, - "specialDefense": 25, - "speed": 40 - }, - "classification": "Bivalve Pokémon" - }, - { - "id": "91", - "name": "Cloyster", - "type": [ - "Water", - "Ice" - ], - "baseStatistics": { - "hitPoints": 50, - "attack": 95, - "defense": 180, - "specialAttack": 85, - "specialDefense": 45, - "speed": 70 - }, - "classification": "Bivalve Pokémon" - }, - { - "id": "92", - "name": "Gastly", - "type": [ - "Ghost", - "Poison" - ], - "baseStatistics": { - "hitPoints": 30, - "attack": 35, - "defense": 30, - "specialAttack": 100, - "specialDefense": 35, - "speed": 80 - }, - "classification": "Gas Pokémon" - }, - { - "id": "93", - "name": "Haunter", - "type": [ - "Ghost", - "Poison" - ], - "baseStatistics": { - "hitPoints": 45, - "attack": 50, - "defense": 45, - "specialAttack": 115, - "specialDefense": 55, - "speed": 95 - }, - "classification": "Gas Pokémon" - }, - { - "id": "94", - "name": "Gengar", - "type": [ - "Ghost", - "Poison" - ], - "baseStatistics": { - "hitPoints": 60, - "attack": 65, - "defense": 60, - "specialAttack": 130, - "specialDefense": 75, - "speed": 110 - }, - "classification": "Shadow Pokémon" - }, - { - "id": "95", - "name": "Onix", - "type": [ - "Rock", - "Ground" - ], - "baseStatistics": { - "hitPoints": 35, - "attack": 45, - "defense": 160, - "specialAttack": 30, - "specialDefense": 45, - "speed": 70 - }, - "classification": "Rock Snake Pokémon" - }, - { - "id": "96", - "name": "Drowzee", - "type": [ - "Psychic" - ], - "baseStatistics": { - "hitPoints": 60, - "attack": 48, - "defense": 45, - "specialAttack": 43, - "specialDefense": 90, - "speed": 42 - }, - "classification": "Hypnosis Pokémon" - }, - { - "id": "97", - "name": "Hypno", - "type": [ - "Psychic" - ], - "baseStatistics": { - "hitPoints": 85, - "attack": 73, - "defense": 70, - "specialAttack": 73, - "specialDefense": 115, - "speed": 67 - }, - "classification": "Hypnosis Pokémon" - }, - { - "id": "98", - "name": "Krabby", - "type": [ - "Water" - ], - "baseStatistics": { - "hitPoints": 30, - "attack": 105, - "defense": 90, - "specialAttack": 25, - "specialDefense": 25, - "speed": 50 - }, - "classification": "River Crab Pokémon" - }, - { - "id": "99", - "name": "Kingler", - "type": [ - "Water" - ], - "baseStatistics": { - "hitPoints": 55, - "attack": 130, - "defense": 115, - "specialAttack": 50, - "specialDefense": 50, - "speed": 75 - }, - "classification": "Pincer Pokémon" - }, - { - "id": "100", - "name": "Voltorb", - "type": [ - "Electric" - ], - "baseStatistics": { - "hitPoints": 40, - "attack": 30, - "defense": 50, - "specialAttack": 55, - "specialDefense": 55, - "speed": 100 - }, - "classification": "Ball Pokémon" - }, - { - "id": "101", - "name": "Electrode", - "type": [ - "Electric" - ], - "baseStatistics": { - "hitPoints": 60, - "attack": 50, - "defense": 70, - "specialAttack": 80, - "specialDefense": 80, - "speed": 140 - }, - "classification": "Ball Pokémon" - }, - { - "id": "102", - "name": "Exeggcute", - "type": [ - "Grass", - "Psychic" - ], - "baseStatistics": { - "hitPoints": 60, - "attack": 40, - "defense": 80, - "specialAttack": 60, - "specialDefense": 45, - "speed": 40 - }, - "classification": "Egg Pokémon" - }, - { - "id": "103", - "name": "Exeggutor", - "type": [ - "Grass", - "Psychic" - ], - "baseStatistics": { - "hitPoints": 95, - "attack": 95, - "defense": 85, - "specialAttack": 125, - "specialDefense": 75, - "speed": 55 - }, - "classification": "Coconut Pokémon" - }, - { - "id": "104", - "name": "Cubone", - "type": [ - "Ground" - ], - "baseStatistics": { - "hitPoints": 50, - "attack": 50, - "defense": 95, - "specialAttack": 40, - "specialDefense": 50, - "speed": 35 - }, - "classification": "Lonely Pokémon" - }, - { - "id": "105", - "name": "Marowak", - "type": [ - "Ground" - ], - "baseStatistics": { - "hitPoints": 60, - "attack": 80, - "defense": 110, - "specialAttack": 50, - "specialDefense": 80, - "speed": 45 - }, - "classification": "Bone Keeper Pokémon" - }, - { - "id": "106", - "name": "Hitmonlee", - "type": [ - "Fighting" - ], - "baseStatistics": { - "hitPoints": 50, - "attack": 120, - "defense": 53, - "specialAttack": 35, - "specialDefense": 110, - "speed": 87 - }, - "classification": "Kicking Pokémon" - }, - { - "id": "107", - "name": "Hitmonchan", - "type": [ - "Fighting" - ], - "baseStatistics": { - "hitPoints": 50, - "attack": 105, - "defense": 79, - "specialAttack": 35, - "specialDefense": 110, - "speed": 76 - }, - "classification": "Punching Pokémon" - }, - { - "id": "108", - "name": "Lickitung", - "type": [ - "Normal" - ], - "baseStatistics": { - "hitPoints": 90, - "attack": 55, - "defense": 75, - "specialAttack": 60, - "specialDefense": 75, - "speed": 30 - }, - "classification": "Licking Pokémon" - }, - { - "id": "109", - "name": "Koffing", - "type": [ - "Poison" - ], - "baseStatistics": { - "hitPoints": 40, - "attack": 65, - "defense": 95, - "specialAttack": 60, - "specialDefense": 45, - "speed": 35 - }, - "classification": "Poison Gas Pokémon" - }, - { - "id": "110", - "name": "Weezing", - "type": [ - "Poison" - ], - "baseStatistics": { - "hitPoints": 65, - "attack": 90, - "defense": 120, - "specialAttack": 85, - "specialDefense": 70, - "speed": 60 - }, - "classification": "Poison Gas Pokémon" - }, - { - "id": "111", - "name": "Rhyhorn", - "type": [ - "Ground", - "Rock" - ], - "baseStatistics": { - "hitPoints": 80, - "attack": 85, - "defense": 95, - "specialAttack": 30, - "specialDefense": 30, - "speed": 25 - }, - "classification": "Spikes Pokémon" - }, - { - "id": "112", - "name": "Rhydon", - "type": [ - "Ground", - "Rock" - ], - "baseStatistics": { - "hitPoints": 105, - "attack": 130, - "defense": 120, - "specialAttack": 45, - "specialDefense": 45, - "speed": 40 - }, - "classification": "Drill Pokémon" - }, - { - "id": "113", - "name": "Chansey", - "type": [ - "Normal" - ], - "baseStatistics": { - "hitPoints": 250, - "attack": 5, - "defense": 5, - "specialAttack": 35, - "specialDefense": 105, - "speed": 50 - }, - "classification": "Egg Pokémon" - }, - { - "id": "114", - "name": "Tangela", - "type": [ - "Grass" - ], - "baseStatistics": { - "hitPoints": 65, - "attack": 55, - "defense": 115, - "specialAttack": 100, - "specialDefense": 40, - "speed": 60 - }, - "classification": "Vine Pokémon" - }, - { - "id": "115", - "name": "Kangaskhan", - "type": [ - "Normal" - ], - "baseStatistics": { - "hitPoints": 105, - "attack": 95, - "defense": 80, - "specialAttack": 40, - "specialDefense": 80, - "speed": 90 - }, - "classification": "Parent Pokémon" - }, - { - "id": "116", - "name": "Horsea", - "type": [ - "Water" - ], - "baseStatistics": { - "hitPoints": 30, - "attack": 40, - "defense": 70, - "specialAttack": 70, - "specialDefense": 25, - "speed": 60 - }, - "classification": "Dragon Pokémon" - }, - { - "id": "117", - "name": "Seadra", - "type": [ - "Water" - ], - "baseStatistics": { - "hitPoints": 55, - "attack": 65, - "defense": 95, - "specialAttack": 95, - "specialDefense": 45, - "speed": 85 - }, - "classification": "Dragon Pokémon" - }, - { - "id": "118", - "name": "Goldeen", - "type": [ - "Water" - ], - "baseStatistics": { - "hitPoints": 45, - "attack": 67, - "defense": 60, - "specialAttack": 35, - "specialDefense": 50, - "speed": 63 - }, - "classification": "Goldfish Pokémon" - }, - { - "id": "119", - "name": "Seaking", - "type": [ - "Water" - ], - "baseStatistics": { - "hitPoints": 80, - "attack": 92, - "defense": 65, - "specialAttack": 65, - "specialDefense": 80, - "speed": 68 - }, - "classification": "Goldfish Pokémon" - }, - { - "id": "120", - "name": "Staryu", - "type": [ - "Water" - ], - "baseStatistics": { - "hitPoints": 30, - "attack": 45, - "defense": 55, - "specialAttack": 70, - "specialDefense": 55, - "speed": 85 - }, - "classification": "Star Shape Pokémon" - }, - { - "id": "121", - "name": "Starmie", - "type": [ - "Water", - "Psychic" - ], - "baseStatistics": { - "hitPoints": 60, - "attack": 75, - "defense": 85, - "specialAttack": 100, - "specialDefense": 85, - "speed": 115 - }, - "classification": "Mysterious Pokémon" - }, - { - "id": "122", - "name": "Mr. Mime", - "type": [ - "Psychic", - "Fairy" - ], - "baseStatistics": { - "hitPoints": 40, - "attack": 45, - "defense": 65, - "specialAttack": 100, - "specialDefense": 120, - "speed": 90 - }, - "classification": "Barrier Pokémon" - }, - { - "id": "123", - "name": "Scyther", - "type": [ - "Bug", - "Flying" - ], - "baseStatistics": { - "hitPoints": 70, - "attack": 110, - "defense": 80, - "specialAttack": 55, - "specialDefense": 80, - "speed": 105 - }, - "classification": "Mantis Pokémon" - }, - { - "id": "124", - "name": "Jynx", - "type": [ - "Ice", - "Psychic" - ], - "baseStatistics": { - "hitPoints": 65, - "attack": 50, - "defense": 35, - "specialAttack": 115, - "specialDefense": 95, - "speed": 95 - }, - "classification": "Human Shape Pokémon" - }, - { - "id": "125", - "name": "Electabuzz", - "type": [ - "Electric" - ], - "baseStatistics": { - "hitPoints": 65, - "attack": 83, - "defense": 57, - "specialAttack": 95, - "specialDefense": 85, - "speed": 105 - }, - "classification": "Electric Pokémon" - }, - { - "id": "126", - "name": "Magmar", - "type": [ - "Fire" - ], - "baseStatistics": { - "hitPoints": 65, - "attack": 95, - "defense": 57, - "specialAttack": 100, - "specialDefense": 85, - "speed": 93 - }, - "classification": "Spitfire Pokémon" - }, - { - "id": "127", - "name": "Pinsir", - "type": [ - "Bug" - ], - "baseStatistics": { - "hitPoints": 65, - "attack": 125, - "defense": 100, - "specialAttack": 55, - "specialDefense": 70, - "speed": 85 - }, - "classification": "Stag Beetle Pokémon" - }, - { - "id": "128", - "name": "Tauros", - "type": [ - "Normal" - ], - "baseStatistics": { - "hitPoints": 75, - "attack": 100, - "defense": 95, - "specialAttack": 40, - "specialDefense": 70, - "speed": 110 - }, - "classification": "Wild Bull Pokémon" - }, - { - "id": "129", - "name": "Magikarp", - "type": [ - "Water" - ], - "baseStatistics": { - "hitPoints": 20, - "attack": 10, - "defense": 55, - "specialAttack": 15, - "specialDefense": 20, - "speed": 80 - }, - "classification": "Fish Pokémon" - }, - { - "id": "130", - "name": "Gyarados", - "type": [ - "Water", - "Flying" - ], - "baseStatistics": { - "hitPoints": 95, - "attack": 125, - "defense": 79, - "specialAttack": 60, - "specialDefense": 100, - "speed": 81 - }, - "classification": "Atrocious Pokémon" - }, - { - "id": "131", - "name": "Lapras", - "type": [ - "Water", - "Ice" - ], - "baseStatistics": { - "hitPoints": 130, - "attack": 85, - "defense": 80, - "specialAttack": 85, - "specialDefense": 95, - "speed": 60 - }, - "classification": "Transport Pokémon" - }, - { - "id": "132", - "name": "Ditto", - "type": [ - "Normal" - ], - "baseStatistics": { - "hitPoints": 48, - "attack": 48, - "defense": 48, - "specialAttack": 48, - "specialDefense": 48, - "speed": 48 - }, - "classification": "Transform Pokémon" - }, - { - "id": "133", - "name": "Eevee", - "type": [ - "Normal" - ], - "baseStatistics": { - "hitPoints": 55, - "attack": 55, - "defense": 50, - "specialAttack": 45, - "specialDefense": 65, - "speed": 55 - }, - "classification": "Evolution Pokémon" - }, - { - "id": "134", - "name": "Vaporeon", - "type": [ - "Water" - ], - "baseStatistics": { - "hitPoints": 130, - "attack": 65, - "defense": 60, - "specialAttack": 110, - "specialDefense": 95, - "speed": 65 - }, - "classification": "Bubble Jet Pokémon" - }, - { - "id": "135", - "name": "Jolteon", - "type": [ - "Electric" - ], - "baseStatistics": { - "hitPoints": 65, - "attack": 65, - "defense": 60, - "specialAttack": 110, - "specialDefense": 95, - "speed": 130 - }, - "classification": "Thunderbolt Pokémon" - }, - { - "id": "136", - "name": "Flareon", - "type": [ - "Fire" - ], - "baseStatistics": { - "hitPoints": 65, - "attack": 130, - "defense": 60, - "specialAttack": 95, - "specialDefense": 110, - "speed": 65 - }, - "classification": "Flame Pokémon" - }, - { - "id": "137", - "name": "Porygon", - "type": [ - "Normal" - ], - "baseStatistics": { - "hitPoints": 65, - "attack": 60, - "defense": 70, - "specialAttack": 85, - "specialDefense": 75, - "speed": 40 - }, - "classification": "Virtual Pokémon" - }, - { - "id": "138", - "name": "Omanyte", - "type": [ - "Rock", - "Water" - ], - "baseStatistics": { - "hitPoints": 35, - "attack": 40, - "defense": 100, - "specialAttack": 90, - "specialDefense": 55, - "speed": 35 - }, - "classification": "Spiral Pokémon" - }, - { - "id": "139", - "name": "Omastar", - "type": [ - "Rock", - "Water" - ], - "baseStatistics": { - "hitPoints": 70, - "attack": 60, - "defense": 125, - "specialAttack": 115, - "specialDefense": 70, - "speed": 55 - }, - "classification": "Spiral Pokémon" - }, - { - "id": "140", - "name": "Kabuto", - "type": [ - "Rock", - "Water" - ], - "baseStatistics": { - "hitPoints": 30, - "attack": 80, - "defense": 90, - "specialAttack": 55, - "specialDefense": 45, - "speed": 55 - }, - "classification": "Shellfish Pokémon" - }, - { - "id": "141", - "name": "Kabutops", - "type": [ - "Rock", - "Water" - ], - "baseStatistics": { - "hitPoints": 60, - "attack": 115, - "defense": 105, - "specialAttack": 65, - "specialDefense": 70, - "speed": 80 - }, - "classification": "Shellfish Pokémon" - }, - { - "id": "142", - "name": "Aerodactyl", - "type": [ - "Rock", - "Flying" - ], - "baseStatistics": { - "hitPoints": 80, - "attack": 105, - "defense": 65, - "specialAttack": 60, - "specialDefense": 75, - "speed": 130 - }, - "classification": "Fossil Pokémon" - }, - { - "id": "143", - "name": "Snorlax", - "type": [ - "Normal" - ], - "baseStatistics": { - "hitPoints": 160, - "attack": 110, - "defense": 65, - "specialAttack": 65, - "specialDefense": 110, - "speed": 30 - }, - "classification": "Sleeping Pokémon" - }, - { - "id": "144", - "name": "Articuno", - "type": [ - "Ice", - "Flying" - ], - "baseStatistics": { - "hitPoints": 90, - "attack": 85, - "defense": 100, - "specialAttack": 95, - "specialDefense": 125, - "speed": 85 - }, - "classification": "Freeze Pokémon" - }, - { - "id": "145", - "name": "Zapdos", - "type": [ - "Electric", - "Flying" - ], - "baseStatistics": { - "hitPoints": 90, - "attack": 90, - "defense": 85, - "specialAttack": 125, - "specialDefense": 90, - "speed": 100 - }, - "classification": "Electric Pokémon" - }, - { - "id": "146", - "name": "Moltres", - "type": [ - "Fire", - "Flying" - ], - "baseStatistics": { - "hitPoints": 90, - "attack": 100, - "defense": 90, - "specialAttack": 125, - "specialDefense": 85, - "speed": 90 - }, - "classification": "Flame Pokémon" - }, - { - "id": "147", - "name": "Dratini", - "type": [ - "Dragon" - ], - "baseStatistics": { - "hitPoints": 41, - "attack": 64, - "defense": 45, - "specialAttack": 50, - "specialDefense": 50, - "speed": 50 - }, - "classification": "Dragon Pokémon" - }, - { - "id": "148", - "name": "Dragonair", - "type": [ - "Dragon" - ], - "baseStatistics": { - "hitPoints": 61, - "attack": 84, - "defense": 65, - "specialAttack": 70, - "specialDefense": 70, - "speed": 70 - }, - "classification": "Dragon Pokémon" - }, - { - "id": "149", - "name": "Dragonite", - "type": [ - "Dragon", - "Flying" - ], - "baseStatistics": { - "hitPoints": 91, - "attack": 134, - "defense": 95, - "specialAttack": 100, - "specialDefense": 100, - "speed": 80 - }, - "classification": "Dragon Pokémon" - }, - { - "id": "150", - "name": "Mewtwo", - "type": [ - "Psychic" - ], - "baseStatistics": { - "hitPoints": 106, - "attack": 110, - "defense": 90, - "specialAttack": 154, - "specialDefense": 90, - "speed": 130 - }, - "classification": "Genetic Pokémon" - }, - { - "id": "151", - "name": "Mew", - "type": [ - "Psychic" - ], - "baseStatistics": { - "hitPoints": 100, - "attack": 100, - "defense": 100, - "specialAttack": 100, - "specialDefense": 100, - "speed": 100 - }, - "classification": "New Species Pokémon" - } +[ + { + "id": "1", + "name": "Bulbasaur", + "type": [ + "Grass", + "Poison" + ], + "baseStatistics": { + "hitPoints": 45, + "attack": 49, + "defense": 49, + "specialAttack": 65, + "specialDefense": 65, + "speed": 45 + }, + "classification": "Seed Pokémon" + }, + { + "id": "2", + "name": "Ivysaur", + "type": [ + "Grass", + "Poison" + ], + "baseStatistics": { + "hitPoints": 60, + "attack": 62, + "defense": 63, + "specialAttack": 80, + "specialDefense": 80, + "speed": 60 + }, + "classification": "Seed Pokémon" + }, + { + "id": "3", + "name": "Venusaur", + "type": [ + "Grass", + "Poison" + ], + "baseStatistics": { + "hitPoints": 80, + "attack": 82, + "defense": 83, + "specialAttack": 100, + "specialDefense": 100, + "speed": 80 + }, + "classification": "Seed Pokémon" + }, + { + "id": "4", + "name": "Charmander", + "type": [ + "Fire" + ], + "baseStatistics": { + "hitPoints": 39, + "attack": 52, + "defense": 43, + "specialAttack": 60, + "specialDefense": 50, + "speed": 65 + }, + "classification": "Lizard Pokémon" + }, + { + "id": "5", + "name": "Charmeleon", + "type": [ + "Fire" + ], + "baseStatistics": { + "hitPoints": 58, + "attack": 64, + "defense": 58, + "specialAttack": 80, + "specialDefense": 65, + "speed": 80 + }, + "classification": "Flame Pokémon" + }, + { + "id": "6", + "name": "Charizard", + "type": [ + "Fire", + "Flying" + ], + "baseStatistics": { + "hitPoints": 78, + "attack": 84, + "defense": 78, + "specialAttack": 109, + "specialDefense": 85, + "speed": 100 + }, + "classification": "Flame Pokémon" + }, + { + "id": "7", + "name": "Squirtle", + "type": [ + "Water" + ], + "baseStatistics": { + "hitPoints": 44, + "attack": 48, + "defense": 65, + "specialAttack": 50, + "specialDefense": 64, + "speed": 43 + }, + "classification": "Tiny Turtle Pokémon" + }, + { + "id": "8", + "name": "Wartortle", + "type": [ + "Water" + ], + "baseStatistics": { + "hitPoints": 59, + "attack": 63, + "defense": 80, + "specialAttack": 65, + "specialDefense": 80, + "speed": 58 + }, + "classification": "Turtle Pokémon" + }, + { + "id": "9", + "name": "Blastoise", + "type": [ + "Water" + ], + "baseStatistics": { + "hitPoints": 79, + "attack": 83, + "defense": 100, + "specialAttack": 85, + "specialDefense": 105, + "speed": 78 + }, + "classification": "Shellfish Pokémon" + }, + { + "id": "10", + "name": "Caterpie", + "type": [ + "Bug" + ], + "baseStatistics": { + "hitPoints": 45, + "attack": 30, + "defense": 35, + "specialAttack": 20, + "specialDefense": 20, + "speed": 45 + }, + "classification": "Worm Pokémon" + }, + { + "id": "11", + "name": "Metapod", + "type": [ + "Bug" + ], + "baseStatistics": { + "hitPoints": 50, + "attack": 20, + "defense": 55, + "specialAttack": 25, + "specialDefense": 25, + "speed": 30 + }, + "classification": "Cocoon Pokémon" + }, + { + "id": "12", + "name": "Butterfree", + "type": [ + "Bug", + "Flying" + ], + "baseStatistics": { + "hitPoints": 60, + "attack": 45, + "defense": 50, + "specialAttack": 90, + "specialDefense": 80, + "speed": 70 + }, + "classification": "Butterfly Pokémon" + }, + { + "id": "13", + "name": "Weedle", + "type": [ + "Bug", + "Poison" + ], + "baseStatistics": { + "hitPoints": 40, + "attack": 35, + "defense": 30, + "specialAttack": 20, + "specialDefense": 20, + "speed": 50 + }, + "classification": "Hairy Bug Pokémon" + }, + { + "id": "14", + "name": "Kakuna", + "type": [ + "Bug", + "Poison" + ], + "baseStatistics": { + "hitPoints": 45, + "attack": 25, + "defense": 50, + "specialAttack": 25, + "specialDefense": 25, + "speed": 35 + }, + "classification": "Cocoon Pokémon" + }, + { + "id": "15", + "name": "Beedrill", + "type": [ + "Bug", + "Poison" + ], + "baseStatistics": { + "hitPoints": 65, + "attack": 90, + "defense": 40, + "specialAttack": 45, + "specialDefense": 80, + "speed": 75 + }, + "classification": "Poison Bee Pokémon" + }, + { + "id": "16", + "name": "Pidgey", + "type": [ + "Normal", + "Flying" + ], + "baseStatistics": { + "hitPoints": 40, + "attack": 45, + "defense": 40, + "specialAttack": 35, + "specialDefense": 35, + "speed": 56 + }, + "classification": "Tiny Bird Pokémon" + }, + { + "id": "17", + "name": "Pidgeotto", + "type": [ + "Normal", + "Flying" + ], + "baseStatistics": { + "hitPoints": 63, + "attack": 60, + "defense": 55, + "specialAttack": 50, + "specialDefense": 50, + "speed": 71 + }, + "classification": "Bird Pokémon" + }, + { + "id": "18", + "name": "Pidgeot", + "type": [ + "Normal", + "Flying" + ], + "baseStatistics": { + "hitPoints": 83, + "attack": 80, + "defense": 75, + "specialAttack": 70, + "specialDefense": 70, + "speed": 101 + }, + "classification": "Bird Pokémon" + }, + { + "id": "19", + "name": "Rattata", + "type": [ + "Normal" + ], + "baseStatistics": { + "hitPoints": 30, + "attack": 56, + "defense": 35, + "specialAttack": 25, + "specialDefense": 35, + "speed": 72 + }, + "classification": "Mouse Pokémon" + }, + { + "id": "20", + "name": "Raticate", + "type": [ + "Normal" + ], + "baseStatistics": { + "hitPoints": 55, + "attack": 81, + "defense": 60, + "specialAttack": 50, + "specialDefense": 70, + "speed": 97 + }, + "classification": "Mouse Pokémon" + }, + { + "id": "21", + "name": "Spearow", + "type": [ + "Normal", + "Flying" + ], + "baseStatistics": { + "hitPoints": 40, + "attack": 60, + "defense": 30, + "specialAttack": 31, + "specialDefense": 31, + "speed": 70 + }, + "classification": "Tiny Bird Pokémon" + }, + { + "id": "22", + "name": "Fearow", + "type": [ + "Normal", + "Flying" + ], + "baseStatistics": { + "hitPoints": 65, + "attack": 90, + "defense": 65, + "specialAttack": 61, + "specialDefense": 61, + "speed": 100 + }, + "classification": "Beak Pokémon" + }, + { + "id": "23", + "name": "Ekans", + "type": [ + "Poison" + ], + "baseStatistics": { + "hitPoints": 35, + "attack": 60, + "defense": 44, + "specialAttack": 40, + "specialDefense": 54, + "speed": 55 + }, + "classification": "Snake Pokémon" + }, + { + "id": "24", + "name": "Arbok", + "type": [ + "Poison" + ], + "baseStatistics": { + "hitPoints": 60, + "attack": 95, + "defense": 69, + "specialAttack": 65, + "specialDefense": 79, + "speed": 80 + }, + "classification": "Cobra Pokémon" + }, + { + "id": "25", + "name": "Pikachu", + "type": [ + "Electric" + ], + "baseStatistics": { + "hitPoints": 35, + "attack": 55, + "defense": 30, + "specialAttack": 50, + "specialDefense": 50, + "speed": 90 + }, + "classification": "Mouse Pokémon" + }, + { + "id": "26", + "name": "Raichu", + "type": [ + "Electric" + ], + "baseStatistics": { + "hitPoints": 60, + "attack": 90, + "defense": 55, + "specialAttack": 90, + "specialDefense": 80, + "speed": 110 + }, + "classification": "Mouse Pokémon" + }, + { + "id": "27", + "name": "Sandshrew", + "type": [ + "Ground" + ], + "baseStatistics": { + "hitPoints": 50, + "attack": 75, + "defense": 85, + "specialAttack": 20, + "specialDefense": 30, + "speed": 40 + }, + "classification": "Mouse Pokémon" + }, + { + "id": "28", + "name": "Sandslash", + "type": [ + "Ground" + ], + "baseStatistics": { + "hitPoints": 75, + "attack": 100, + "defense": 110, + "specialAttack": 45, + "specialDefense": 55, + "speed": 65 + }, + "classification": "Mouse Pokémon" + }, + { + "id": "29", + "name": "Nidoran♀", + "type": [ + "Poison" + ], + "baseStatistics": { + "hitPoints": 55, + "attack": 47, + "defense": 52, + "specialAttack": 40, + "specialDefense": 40, + "speed": 41 + }, + "classification": "Poison Pin Pokémon" + }, + { + "id": "30", + "name": "Nidorina", + "type": [ + "Poison" + ], + "baseStatistics": { + "hitPoints": 70, + "attack": 62, + "defense": 67, + "specialAttack": 55, + "specialDefense": 55, + "speed": 56 + }, + "classification": "Poison Pin Pokémon" + }, + { + "id": "31", + "name": "Nidoqueen", + "type": [ + "Poison", + "Ground" + ], + "baseStatistics": { + "hitPoints": 90, + "attack": 92, + "defense": 87, + "specialAttack": 75, + "specialDefense": 85, + "speed": 76 + }, + "classification": "Drill Pokémon" + }, + { + "id": "32", + "name": "Nidoran♂", + "type": [ + "Poison" + ], + "baseStatistics": { + "hitPoints": 46, + "attack": 57, + "defense": 40, + "specialAttack": 40, + "specialDefense": 40, + "speed": 50 + }, + "classification": "Poison Pin Pokémon" + }, + { + "id": "33", + "name": "Nidorino", + "type": [ + "Poison" + ], + "baseStatistics": { + "hitPoints": 61, + "attack": 72, + "defense": 57, + "specialAttack": 55, + "specialDefense": 55, + "speed": 65 + }, + "classification": "Poison Pin Pokémon" + }, + { + "id": "34", + "name": "Nidoking", + "type": [ + "Poison", + "Ground" + ], + "baseStatistics": { + "hitPoints": 81, + "attack": 102, + "defense": 77, + "specialAttack": 85, + "specialDefense": 75, + "speed": 85 + }, + "classification": "Drill Pokémon" + }, + { + "id": "35", + "name": "Clefairy", + "type": [ + "Fairy" + ], + "baseStatistics": { + "hitPoints": 70, + "attack": 45, + "defense": 48, + "specialAttack": 60, + "specialDefense": 65, + "speed": 35 + }, + "classification": "Fairy Pokémon" + }, + { + "id": "36", + "name": "Clefable", + "type": [ + "Fairy" + ], + "baseStatistics": { + "hitPoints": 95, + "attack": 70, + "defense": 73, + "specialAttack": 95, + "specialDefense": 90, + "speed": 60 + }, + "classification": "Fairy Pokémon" + }, + { + "id": "37", + "name": "Vulpix", + "type": [ + "Fire" + ], + "baseStatistics": { + "hitPoints": 38, + "attack": 41, + "defense": 40, + "specialAttack": 50, + "specialDefense": 65, + "speed": 65 + }, + "classification": "Fox Pokémon" + }, + { + "id": "38", + "name": "Ninetales", + "type": [ + "Fire" + ], + "baseStatistics": { + "hitPoints": 73, + "attack": 76, + "defense": 75, + "specialAttack": 81, + "specialDefense": 100, + "speed": 100 + }, + "classification": "Fox Pokémon" + }, + { + "id": "39", + "name": "Jigglypuff", + "type": [ + "Normal", + "Fairy" + ], + "baseStatistics": { + "hitPoints": 115, + "attack": 45, + "defense": 20, + "specialAttack": 45, + "specialDefense": 25, + "speed": 20 + }, + "classification": "Balloon Pokémon" + }, + { + "id": "40", + "name": "Wigglytuff", + "type": [ + "Normal", + "Fairy" + ], + "baseStatistics": { + "hitPoints": 140, + "attack": 70, + "defense": 45, + "specialAttack": 85, + "specialDefense": 50, + "speed": 45 + }, + "classification": "Balloon Pokémon" + }, + { + "id": "41", + "name": "Zubat", + "type": [ + "Poison", + "Flying" + ], + "baseStatistics": { + "hitPoints": 40, + "attack": 45, + "defense": 35, + "specialAttack": 30, + "specialDefense": 30, + "speed": 40 + }, + "classification": "Bat Pokémon" + }, + { + "id": "42", + "name": "Golbat", + "type": [ + "Poison", + "Flying" + ], + "baseStatistics": { + "hitPoints": 75, + "attack": 80, + "defense": 70, + "specialAttack": 65, + "specialDefense": 75, + "speed": 90 + }, + "classification": "Bat Pokémon" + }, + { + "id": "43", + "name": "Oddish", + "type": [ + "Grass", + "Poison" + ], + "baseStatistics": { + "hitPoints": 45, + "attack": 50, + "defense": 55, + "specialAttack": 75, + "specialDefense": 65, + "speed": 30 + }, + "classification": "Weed Pokémon" + }, + { + "id": "44", + "name": "Gloom", + "type": [ + "Grass", + "Poison" + ], + "baseStatistics": { + "hitPoints": 60, + "attack": 65, + "defense": 70, + "specialAttack": 85, + "specialDefense": 75, + "speed": 40 + }, + "classification": "Weed Pokémon" + }, + { + "id": "45", + "name": "Vileplume", + "type": [ + "Grass", + "Poison" + ], + "baseStatistics": { + "hitPoints": 75, + "attack": 80, + "defense": 85, + "specialAttack": 110, + "specialDefense": 90, + "speed": 50 + }, + "classification": "Flower Pokémon" + }, + { + "id": "46", + "name": "Paras", + "type": [ + "Bug", + "Grass" + ], + "baseStatistics": { + "hitPoints": 35, + "attack": 70, + "defense": 55, + "specialAttack": 45, + "specialDefense": 55, + "speed": 25 + }, + "classification": "Mushroom Pokémon" + }, + { + "id": "47", + "name": "Parasect", + "type": [ + "Bug", + "Grass" + ], + "baseStatistics": { + "hitPoints": 60, + "attack": 95, + "defense": 80, + "specialAttack": 60, + "specialDefense": 80, + "speed": 30 + }, + "classification": "Mushroom Pokémon" + }, + { + "id": "48", + "name": "Venonat", + "type": [ + "Bug", + "Poison" + ], + "baseStatistics": { + "hitPoints": 60, + "attack": 55, + "defense": 50, + "specialAttack": 40, + "specialDefense": 55, + "speed": 45 + }, + "classification": "Insect Pokémon" + }, + { + "id": "49", + "name": "Venomoth", + "type": [ + "Bug", + "Poison" + ], + "baseStatistics": { + "hitPoints": 70, + "attack": 65, + "defense": 60, + "specialAttack": 90, + "specialDefense": 75, + "speed": 90 + }, + "classification": "Poison Moth Pokémon" + }, + { + "id": "50", + "name": "Diglett", + "type": [ + "Ground" + ], + "baseStatistics": { + "hitPoints": 10, + "attack": 55, + "defense": 25, + "specialAttack": 35, + "specialDefense": 45, + "speed": 95 + }, + "classification": "Mole Pokémon" + }, + { + "id": "51", + "name": "Dugtrio", + "type": [ + "Ground" + ], + "baseStatistics": { + "hitPoints": 35, + "attack": 100, + "defense": 50, + "specialAttack": 50, + "specialDefense": 70, + "speed": 120 + }, + "classification": "Mole Pokémon" + }, + { + "id": "52", + "name": "Meowth", + "type": [ + "Normal" + ], + "baseStatistics": { + "hitPoints": 40, + "attack": 45, + "defense": 35, + "specialAttack": 40, + "specialDefense": 40, + "speed": 90 + }, + "classification": "Scratch Cat Pokémon" + }, + { + "id": "53", + "name": "Persian", + "type": [ + "Normal" + ], + "baseStatistics": { + "hitPoints": 65, + "attack": 70, + "defense": 60, + "specialAttack": 65, + "specialDefense": 65, + "speed": 115 + }, + "classification": "Classy Cat Pokémon" + }, + { + "id": "54", + "name": "Psyduck", + "type": [ + "Water" + ], + "baseStatistics": { + "hitPoints": 50, + "attack": 52, + "defense": 48, + "specialAttack": 65, + "specialDefense": 50, + "speed": 55 + }, + "classification": "Duck Pokémon" + }, + { + "id": "55", + "name": "Golduck", + "type": [ + "Water" + ], + "baseStatistics": { + "hitPoints": 80, + "attack": 82, + "defense": 78, + "specialAttack": 95, + "specialDefense": 80, + "speed": 85 + }, + "classification": "Duck Pokémon" + }, + { + "id": "56", + "name": "Mankey", + "type": [ + "Fighting" + ], + "baseStatistics": { + "hitPoints": 40, + "attack": 80, + "defense": 35, + "specialAttack": 35, + "specialDefense": 45, + "speed": 70 + }, + "classification": "Pig Monkey Pokémon" + }, + { + "id": "57", + "name": "Primeape", + "type": [ + "Fighting" + ], + "baseStatistics": { + "hitPoints": 65, + "attack": 105, + "defense": 60, + "specialAttack": 60, + "specialDefense": 70, + "speed": 95 + }, + "classification": "Pig Monkey Pokémon" + }, + { + "id": "58", + "name": "Growlithe", + "type": [ + "Fire" + ], + "baseStatistics": { + "hitPoints": 55, + "attack": 70, + "defense": 45, + "specialAttack": 70, + "specialDefense": 50, + "speed": 60 + }, + "classification": "Puppy Pokémon" + }, + { + "id": "59", + "name": "Arcanine", + "type": [ + "Fire" + ], + "baseStatistics": { + "hitPoints": 90, + "attack": 110, + "defense": 80, + "specialAttack": 100, + "specialDefense": 80, + "speed": 95 + }, + "classification": "Legendary Pokémon" + }, + { + "id": "60", + "name": "Poliwag", + "type": [ + "Water" + ], + "baseStatistics": { + "hitPoints": 40, + "attack": 50, + "defense": 40, + "specialAttack": 40, + "specialDefense": 40, + "speed": 90 + }, + "classification": "Tadpole Pokémon" + }, + { + "id": "61", + "name": "Poliwhirl", + "type": [ + "Water" + ], + "baseStatistics": { + "hitPoints": 65, + "attack": 65, + "defense": 65, + "specialAttack": 50, + "specialDefense": 50, + "speed": 90 + }, + "classification": "Tadpole Pokémon" + }, + { + "id": "62", + "name": "Poliwrath", + "type": [ + "Water", + "Fighting" + ], + "baseStatistics": { + "hitPoints": 90, + "attack": 95, + "defense": 95, + "specialAttack": 70, + "specialDefense": 90, + "speed": 70 + }, + "classification": "Tadpole Pokémon" + }, + { + "id": "63", + "name": "Abra", + "type": [ + "Psychic" + ], + "baseStatistics": { + "hitPoints": 25, + "attack": 20, + "defense": 15, + "specialAttack": 105, + "specialDefense": 55, + "speed": 90 + }, + "classification": "Psi Pokémon" + }, + { + "id": "64", + "name": "Kadabra", + "type": [ + "Psychic" + ], + "baseStatistics": { + "hitPoints": 40, + "attack": 35, + "defense": 30, + "specialAttack": 120, + "specialDefense": 70, + "speed": 105 + }, + "classification": "Psi Pokémon" + }, + { + "id": "65", + "name": "Alakazam", + "type": [ + "Psychic" + ], + "baseStatistics": { + "hitPoints": 55, + "attack": 50, + "defense": 45, + "specialAttack": 135, + "specialDefense": 95, + "speed": 120 + }, + "classification": "Psi Pokémon" + }, + { + "id": "66", + "name": "Machop", + "type": [ + "Fighting" + ], + "baseStatistics": { + "hitPoints": 70, + "attack": 80, + "defense": 50, + "specialAttack": 35, + "specialDefense": 35, + "speed": 35 + }, + "classification": "Superpower Pokémon" + }, + { + "id": "67", + "name": "Machoke", + "type": [ + "Fighting" + ], + "baseStatistics": { + "hitPoints": 80, + "attack": 100, + "defense": 70, + "specialAttack": 50, + "specialDefense": 60, + "speed": 45 + }, + "classification": "Superpower Pokémon" + }, + { + "id": "68", + "name": "Machamp", + "type": [ + "Fighting" + ], + "baseStatistics": { + "hitPoints": 90, + "attack": 130, + "defense": 80, + "specialAttack": 65, + "specialDefense": 85, + "speed": 55 + }, + "classification": "Superpower Pokémon" + }, + { + "id": "69", + "name": "Bellsprout", + "type": [ + "Grass", + "Poison" + ], + "baseStatistics": { + "hitPoints": 50, + "attack": 75, + "defense": 35, + "specialAttack": 70, + "specialDefense": 30, + "speed": 40 + }, + "classification": "Flower Pokémon" + }, + { + "id": "70", + "name": "Weepinbell", + "type": [ + "Grass", + "Poison" + ], + "baseStatistics": { + "hitPoints": 65, + "attack": 90, + "defense": 50, + "specialAttack": 85, + "specialDefense": 45, + "speed": 55 + }, + "classification": "Flycatcher Pokémon" + }, + { + "id": "71", + "name": "Victreebel", + "type": [ + "Grass", + "Poison" + ], + "baseStatistics": { + "hitPoints": 80, + "attack": 105, + "defense": 65, + "specialAttack": 100, + "specialDefense": 70, + "speed": 70 + }, + "classification": "Flycatcher Pokémon" + }, + { + "id": "72", + "name": "Tentacool", + "type": [ + "Water", + "Poison" + ], + "baseStatistics": { + "hitPoints": 40, + "attack": 40, + "defense": 35, + "specialAttack": 50, + "specialDefense": 100, + "speed": 70 + }, + "classification": "Jellyfish Pokémon" + }, + { + "id": "73", + "name": "Tentacruel", + "type": [ + "Water", + "Poison" + ], + "baseStatistics": { + "hitPoints": 80, + "attack": 70, + "defense": 65, + "specialAttack": 80, + "specialDefense": 120, + "speed": 100 + }, + "classification": "Jellyfish Pokémon" + }, + { + "id": "74", + "name": "Geodude", + "type": [ + "Rock", + "Ground" + ], + "baseStatistics": { + "hitPoints": 40, + "attack": 80, + "defense": 100, + "specialAttack": 30, + "specialDefense": 30, + "speed": 20 + }, + "classification": "Rock Pokémon" + }, + { + "id": "75", + "name": "Graveler", + "type": [ + "Rock", + "Ground" + ], + "baseStatistics": { + "hitPoints": 55, + "attack": 95, + "defense": 115, + "specialAttack": 45, + "specialDefense": 45, + "speed": 35 + }, + "classification": "Rock Pokémon" + }, + { + "id": "76", + "name": "Golem", + "type": [ + "Rock", + "Ground" + ], + "baseStatistics": { + "hitPoints": 80, + "attack": 120, + "defense": 130, + "specialAttack": 55, + "specialDefense": 65, + "speed": 45 + }, + "classification": "Megaton Pokémon" + }, + { + "id": "77", + "name": "Ponyta", + "type": [ + "Fire" + ], + "baseStatistics": { + "hitPoints": 50, + "attack": 85, + "defense": 55, + "specialAttack": 65, + "specialDefense": 65, + "speed": 90 + }, + "classification": "Fire Horse Pokémon" + }, + { + "id": "78", + "name": "Rapidash", + "type": [ + "Fire" + ], + "baseStatistics": { + "hitPoints": 65, + "attack": 100, + "defense": 70, + "specialAttack": 80, + "specialDefense": 80, + "speed": 105 + }, + "classification": "Fire Horse Pokémon" + }, + { + "id": "79", + "name": "Slowpoke", + "type": [ + "Water", + "Psychic" + ], + "baseStatistics": { + "hitPoints": 90, + "attack": 65, + "defense": 65, + "specialAttack": 40, + "specialDefense": 40, + "speed": 15 + }, + "classification": "Dopey Pokémon" + }, + { + "id": "80", + "name": "Slowbro", + "type": [ + "Water", + "Psychic" + ], + "baseStatistics": { + "hitPoints": 95, + "attack": 75, + "defense": 110, + "specialAttack": 100, + "specialDefense": 80, + "speed": 30 + }, + "classification": "Hermit Crab Pokémon" + }, + { + "id": "81", + "name": "Magnemite", + "type": [ + "Electric", + "Steel" + ], + "baseStatistics": { + "hitPoints": 25, + "attack": 35, + "defense": 70, + "specialAttack": 95, + "specialDefense": 55, + "speed": 45 + }, + "classification": "Magnet Pokémon" + }, + { + "id": "82", + "name": "Magneton", + "type": [ + "Electric", + "Steel" + ], + "baseStatistics": { + "hitPoints": 50, + "attack": 60, + "defense": 95, + "specialAttack": 120, + "specialDefense": 70, + "speed": 70 + }, + "classification": "Magnet Pokémon" + }, + { + "id": "83", + "name": "Farfetch'd", + "type": [ + "Normal", + "Flying" + ], + "baseStatistics": { + "hitPoints": 52, + "attack": 65, + "defense": 55, + "specialAttack": 58, + "specialDefense": 62, + "speed": 60 + }, + "classification": "Wild Duck Pokémon" + }, + { + "id": "84", + "name": "Doduo", + "type": [ + "Normal", + "Flying" + ], + "baseStatistics": { + "hitPoints": 35, + "attack": 85, + "defense": 45, + "specialAttack": 35, + "specialDefense": 35, + "speed": 75 + }, + "classification": "Twin Bird Pokémon" + }, + { + "id": "85", + "name": "Dodrio", + "type": [ + "Normal", + "Flying" + ], + "baseStatistics": { + "hitPoints": 60, + "attack": 110, + "defense": 70, + "specialAttack": 60, + "specialDefense": 60, + "speed": 110 + }, + "classification": "Triple Bird Pokémon" + }, + { + "id": "86", + "name": "Seel", + "type": [ + "Water" + ], + "baseStatistics": { + "hitPoints": 65, + "attack": 45, + "defense": 55, + "specialAttack": 45, + "specialDefense": 70, + "speed": 45 + }, + "classification": "Sea Lion Pokémon" + }, + { + "id": "87", + "name": "Dewgong", + "type": [ + "Water", + "Ice" + ], + "baseStatistics": { + "hitPoints": 90, + "attack": 70, + "defense": 80, + "specialAttack": 70, + "specialDefense": 95, + "speed": 70 + }, + "classification": "Sea Lion Pokémon" + }, + { + "id": "88", + "name": "Grimer", + "type": [ + "Poison" + ], + "baseStatistics": { + "hitPoints": 80, + "attack": 80, + "defense": 50, + "specialAttack": 40, + "specialDefense": 50, + "speed": 25 + }, + "classification": "Sludge Pokémon" + }, + { + "id": "89", + "name": "Muk", + "type": [ + "Poison" + ], + "baseStatistics": { + "hitPoints": 105, + "attack": 105, + "defense": 75, + "specialAttack": 65, + "specialDefense": 100, + "speed": 50 + }, + "classification": "Sludge Pokémon" + }, + { + "id": "90", + "name": "Shellder", + "type": [ + "Water" + ], + "baseStatistics": { + "hitPoints": 30, + "attack": 65, + "defense": 100, + "specialAttack": 45, + "specialDefense": 25, + "speed": 40 + }, + "classification": "Bivalve Pokémon" + }, + { + "id": "91", + "name": "Cloyster", + "type": [ + "Water", + "Ice" + ], + "baseStatistics": { + "hitPoints": 50, + "attack": 95, + "defense": 180, + "specialAttack": 85, + "specialDefense": 45, + "speed": 70 + }, + "classification": "Bivalve Pokémon" + }, + { + "id": "92", + "name": "Gastly", + "type": [ + "Ghost", + "Poison" + ], + "baseStatistics": { + "hitPoints": 30, + "attack": 35, + "defense": 30, + "specialAttack": 100, + "specialDefense": 35, + "speed": 80 + }, + "classification": "Gas Pokémon" + }, + { + "id": "93", + "name": "Haunter", + "type": [ + "Ghost", + "Poison" + ], + "baseStatistics": { + "hitPoints": 45, + "attack": 50, + "defense": 45, + "specialAttack": 115, + "specialDefense": 55, + "speed": 95 + }, + "classification": "Gas Pokémon" + }, + { + "id": "94", + "name": "Gengar", + "type": [ + "Ghost", + "Poison" + ], + "baseStatistics": { + "hitPoints": 60, + "attack": 65, + "defense": 60, + "specialAttack": 130, + "specialDefense": 75, + "speed": 110 + }, + "classification": "Shadow Pokémon" + }, + { + "id": "95", + "name": "Onix", + "type": [ + "Rock", + "Ground" + ], + "baseStatistics": { + "hitPoints": 35, + "attack": 45, + "defense": 160, + "specialAttack": 30, + "specialDefense": 45, + "speed": 70 + }, + "classification": "Rock Snake Pokémon" + }, + { + "id": "96", + "name": "Drowzee", + "type": [ + "Psychic" + ], + "baseStatistics": { + "hitPoints": 60, + "attack": 48, + "defense": 45, + "specialAttack": 43, + "specialDefense": 90, + "speed": 42 + }, + "classification": "Hypnosis Pokémon" + }, + { + "id": "97", + "name": "Hypno", + "type": [ + "Psychic" + ], + "baseStatistics": { + "hitPoints": 85, + "attack": 73, + "defense": 70, + "specialAttack": 73, + "specialDefense": 115, + "speed": 67 + }, + "classification": "Hypnosis Pokémon" + }, + { + "id": "98", + "name": "Krabby", + "type": [ + "Water" + ], + "baseStatistics": { + "hitPoints": 30, + "attack": 105, + "defense": 90, + "specialAttack": 25, + "specialDefense": 25, + "speed": 50 + }, + "classification": "River Crab Pokémon" + }, + { + "id": "99", + "name": "Kingler", + "type": [ + "Water" + ], + "baseStatistics": { + "hitPoints": 55, + "attack": 130, + "defense": 115, + "specialAttack": 50, + "specialDefense": 50, + "speed": 75 + }, + "classification": "Pincer Pokémon" + }, + { + "id": "100", + "name": "Voltorb", + "type": [ + "Electric" + ], + "baseStatistics": { + "hitPoints": 40, + "attack": 30, + "defense": 50, + "specialAttack": 55, + "specialDefense": 55, + "speed": 100 + }, + "classification": "Ball Pokémon" + }, + { + "id": "101", + "name": "Electrode", + "type": [ + "Electric" + ], + "baseStatistics": { + "hitPoints": 60, + "attack": 50, + "defense": 70, + "specialAttack": 80, + "specialDefense": 80, + "speed": 140 + }, + "classification": "Ball Pokémon" + }, + { + "id": "102", + "name": "Exeggcute", + "type": [ + "Grass", + "Psychic" + ], + "baseStatistics": { + "hitPoints": 60, + "attack": 40, + "defense": 80, + "specialAttack": 60, + "specialDefense": 45, + "speed": 40 + }, + "classification": "Egg Pokémon" + }, + { + "id": "103", + "name": "Exeggutor", + "type": [ + "Grass", + "Psychic" + ], + "baseStatistics": { + "hitPoints": 95, + "attack": 95, + "defense": 85, + "specialAttack": 125, + "specialDefense": 75, + "speed": 55 + }, + "classification": "Coconut Pokémon" + }, + { + "id": "104", + "name": "Cubone", + "type": [ + "Ground" + ], + "baseStatistics": { + "hitPoints": 50, + "attack": 50, + "defense": 95, + "specialAttack": 40, + "specialDefense": 50, + "speed": 35 + }, + "classification": "Lonely Pokémon" + }, + { + "id": "105", + "name": "Marowak", + "type": [ + "Ground" + ], + "baseStatistics": { + "hitPoints": 60, + "attack": 80, + "defense": 110, + "specialAttack": 50, + "specialDefense": 80, + "speed": 45 + }, + "classification": "Bone Keeper Pokémon" + }, + { + "id": "106", + "name": "Hitmonlee", + "type": [ + "Fighting" + ], + "baseStatistics": { + "hitPoints": 50, + "attack": 120, + "defense": 53, + "specialAttack": 35, + "specialDefense": 110, + "speed": 87 + }, + "classification": "Kicking Pokémon" + }, + { + "id": "107", + "name": "Hitmonchan", + "type": [ + "Fighting" + ], + "baseStatistics": { + "hitPoints": 50, + "attack": 105, + "defense": 79, + "specialAttack": 35, + "specialDefense": 110, + "speed": 76 + }, + "classification": "Punching Pokémon" + }, + { + "id": "108", + "name": "Lickitung", + "type": [ + "Normal" + ], + "baseStatistics": { + "hitPoints": 90, + "attack": 55, + "defense": 75, + "specialAttack": 60, + "specialDefense": 75, + "speed": 30 + }, + "classification": "Licking Pokémon" + }, + { + "id": "109", + "name": "Koffing", + "type": [ + "Poison" + ], + "baseStatistics": { + "hitPoints": 40, + "attack": 65, + "defense": 95, + "specialAttack": 60, + "specialDefense": 45, + "speed": 35 + }, + "classification": "Poison Gas Pokémon" + }, + { + "id": "110", + "name": "Weezing", + "type": [ + "Poison" + ], + "baseStatistics": { + "hitPoints": 65, + "attack": 90, + "defense": 120, + "specialAttack": 85, + "specialDefense": 70, + "speed": 60 + }, + "classification": "Poison Gas Pokémon" + }, + { + "id": "111", + "name": "Rhyhorn", + "type": [ + "Ground", + "Rock" + ], + "baseStatistics": { + "hitPoints": 80, + "attack": 85, + "defense": 95, + "specialAttack": 30, + "specialDefense": 30, + "speed": 25 + }, + "classification": "Spikes Pokémon" + }, + { + "id": "112", + "name": "Rhydon", + "type": [ + "Ground", + "Rock" + ], + "baseStatistics": { + "hitPoints": 105, + "attack": 130, + "defense": 120, + "specialAttack": 45, + "specialDefense": 45, + "speed": 40 + }, + "classification": "Drill Pokémon" + }, + { + "id": "113", + "name": "Chansey", + "type": [ + "Normal" + ], + "baseStatistics": { + "hitPoints": 250, + "attack": 5, + "defense": 5, + "specialAttack": 35, + "specialDefense": 105, + "speed": 50 + }, + "classification": "Egg Pokémon" + }, + { + "id": "114", + "name": "Tangela", + "type": [ + "Grass" + ], + "baseStatistics": { + "hitPoints": 65, + "attack": 55, + "defense": 115, + "specialAttack": 100, + "specialDefense": 40, + "speed": 60 + }, + "classification": "Vine Pokémon" + }, + { + "id": "115", + "name": "Kangaskhan", + "type": [ + "Normal" + ], + "baseStatistics": { + "hitPoints": 105, + "attack": 95, + "defense": 80, + "specialAttack": 40, + "specialDefense": 80, + "speed": 90 + }, + "classification": "Parent Pokémon" + }, + { + "id": "116", + "name": "Horsea", + "type": [ + "Water" + ], + "baseStatistics": { + "hitPoints": 30, + "attack": 40, + "defense": 70, + "specialAttack": 70, + "specialDefense": 25, + "speed": 60 + }, + "classification": "Dragon Pokémon" + }, + { + "id": "117", + "name": "Seadra", + "type": [ + "Water" + ], + "baseStatistics": { + "hitPoints": 55, + "attack": 65, + "defense": 95, + "specialAttack": 95, + "specialDefense": 45, + "speed": 85 + }, + "classification": "Dragon Pokémon" + }, + { + "id": "118", + "name": "Goldeen", + "type": [ + "Water" + ], + "baseStatistics": { + "hitPoints": 45, + "attack": 67, + "defense": 60, + "specialAttack": 35, + "specialDefense": 50, + "speed": 63 + }, + "classification": "Goldfish Pokémon" + }, + { + "id": "119", + "name": "Seaking", + "type": [ + "Water" + ], + "baseStatistics": { + "hitPoints": 80, + "attack": 92, + "defense": 65, + "specialAttack": 65, + "specialDefense": 80, + "speed": 68 + }, + "classification": "Goldfish Pokémon" + }, + { + "id": "120", + "name": "Staryu", + "type": [ + "Water" + ], + "baseStatistics": { + "hitPoints": 30, + "attack": 45, + "defense": 55, + "specialAttack": 70, + "specialDefense": 55, + "speed": 85 + }, + "classification": "Star Shape Pokémon" + }, + { + "id": "121", + "name": "Starmie", + "type": [ + "Water", + "Psychic" + ], + "baseStatistics": { + "hitPoints": 60, + "attack": 75, + "defense": 85, + "specialAttack": 100, + "specialDefense": 85, + "speed": 115 + }, + "classification": "Mysterious Pokémon" + }, + { + "id": "122", + "name": "Mr. Mime", + "type": [ + "Psychic", + "Fairy" + ], + "baseStatistics": { + "hitPoints": 40, + "attack": 45, + "defense": 65, + "specialAttack": 100, + "specialDefense": 120, + "speed": 90 + }, + "classification": "Barrier Pokémon" + }, + { + "id": "123", + "name": "Scyther", + "type": [ + "Bug", + "Flying" + ], + "baseStatistics": { + "hitPoints": 70, + "attack": 110, + "defense": 80, + "specialAttack": 55, + "specialDefense": 80, + "speed": 105 + }, + "classification": "Mantis Pokémon" + }, + { + "id": "124", + "name": "Jynx", + "type": [ + "Ice", + "Psychic" + ], + "baseStatistics": { + "hitPoints": 65, + "attack": 50, + "defense": 35, + "specialAttack": 115, + "specialDefense": 95, + "speed": 95 + }, + "classification": "Human Shape Pokémon" + }, + { + "id": "125", + "name": "Electabuzz", + "type": [ + "Electric" + ], + "baseStatistics": { + "hitPoints": 65, + "attack": 83, + "defense": 57, + "specialAttack": 95, + "specialDefense": 85, + "speed": 105 + }, + "classification": "Electric Pokémon" + }, + { + "id": "126", + "name": "Magmar", + "type": [ + "Fire" + ], + "baseStatistics": { + "hitPoints": 65, + "attack": 95, + "defense": 57, + "specialAttack": 100, + "specialDefense": 85, + "speed": 93 + }, + "classification": "Spitfire Pokémon" + }, + { + "id": "127", + "name": "Pinsir", + "type": [ + "Bug" + ], + "baseStatistics": { + "hitPoints": 65, + "attack": 125, + "defense": 100, + "specialAttack": 55, + "specialDefense": 70, + "speed": 85 + }, + "classification": "Stag Beetle Pokémon" + }, + { + "id": "128", + "name": "Tauros", + "type": [ + "Normal" + ], + "baseStatistics": { + "hitPoints": 75, + "attack": 100, + "defense": 95, + "specialAttack": 40, + "specialDefense": 70, + "speed": 110 + }, + "classification": "Wild Bull Pokémon" + }, + { + "id": "129", + "name": "Magikarp", + "type": [ + "Water" + ], + "baseStatistics": { + "hitPoints": 20, + "attack": 10, + "defense": 55, + "specialAttack": 15, + "specialDefense": 20, + "speed": 80 + }, + "classification": "Fish Pokémon" + }, + { + "id": "130", + "name": "Gyarados", + "type": [ + "Water", + "Flying" + ], + "baseStatistics": { + "hitPoints": 95, + "attack": 125, + "defense": 79, + "specialAttack": 60, + "specialDefense": 100, + "speed": 81 + }, + "classification": "Atrocious Pokémon" + }, + { + "id": "131", + "name": "Lapras", + "type": [ + "Water", + "Ice" + ], + "baseStatistics": { + "hitPoints": 130, + "attack": 85, + "defense": 80, + "specialAttack": 85, + "specialDefense": 95, + "speed": 60 + }, + "classification": "Transport Pokémon" + }, + { + "id": "132", + "name": "Ditto", + "type": [ + "Normal" + ], + "baseStatistics": { + "hitPoints": 48, + "attack": 48, + "defense": 48, + "specialAttack": 48, + "specialDefense": 48, + "speed": 48 + }, + "classification": "Transform Pokémon" + }, + { + "id": "133", + "name": "Eevee", + "type": [ + "Normal" + ], + "baseStatistics": { + "hitPoints": 55, + "attack": 55, + "defense": 50, + "specialAttack": 45, + "specialDefense": 65, + "speed": 55 + }, + "classification": "Evolution Pokémon" + }, + { + "id": "134", + "name": "Vaporeon", + "type": [ + "Water" + ], + "baseStatistics": { + "hitPoints": 130, + "attack": 65, + "defense": 60, + "specialAttack": 110, + "specialDefense": 95, + "speed": 65 + }, + "classification": "Bubble Jet Pokémon" + }, + { + "id": "135", + "name": "Jolteon", + "type": [ + "Electric" + ], + "baseStatistics": { + "hitPoints": 65, + "attack": 65, + "defense": 60, + "specialAttack": 110, + "specialDefense": 95, + "speed": 130 + }, + "classification": "Thunderbolt Pokémon" + }, + { + "id": "136", + "name": "Flareon", + "type": [ + "Fire" + ], + "baseStatistics": { + "hitPoints": 65, + "attack": 130, + "defense": 60, + "specialAttack": 95, + "specialDefense": 110, + "speed": 65 + }, + "classification": "Flame Pokémon" + }, + { + "id": "137", + "name": "Porygon", + "type": [ + "Normal" + ], + "baseStatistics": { + "hitPoints": 65, + "attack": 60, + "defense": 70, + "specialAttack": 85, + "specialDefense": 75, + "speed": 40 + }, + "classification": "Virtual Pokémon" + }, + { + "id": "138", + "name": "Omanyte", + "type": [ + "Rock", + "Water" + ], + "baseStatistics": { + "hitPoints": 35, + "attack": 40, + "defense": 100, + "specialAttack": 90, + "specialDefense": 55, + "speed": 35 + }, + "classification": "Spiral Pokémon" + }, + { + "id": "139", + "name": "Omastar", + "type": [ + "Rock", + "Water" + ], + "baseStatistics": { + "hitPoints": 70, + "attack": 60, + "defense": 125, + "specialAttack": 115, + "specialDefense": 70, + "speed": 55 + }, + "classification": "Spiral Pokémon" + }, + { + "id": "140", + "name": "Kabuto", + "type": [ + "Rock", + "Water" + ], + "baseStatistics": { + "hitPoints": 30, + "attack": 80, + "defense": 90, + "specialAttack": 55, + "specialDefense": 45, + "speed": 55 + }, + "classification": "Shellfish Pokémon" + }, + { + "id": "141", + "name": "Kabutops", + "type": [ + "Rock", + "Water" + ], + "baseStatistics": { + "hitPoints": 60, + "attack": 115, + "defense": 105, + "specialAttack": 65, + "specialDefense": 70, + "speed": 80 + }, + "classification": "Shellfish Pokémon" + }, + { + "id": "142", + "name": "Aerodactyl", + "type": [ + "Rock", + "Flying" + ], + "baseStatistics": { + "hitPoints": 80, + "attack": 105, + "defense": 65, + "specialAttack": 60, + "specialDefense": 75, + "speed": 130 + }, + "classification": "Fossil Pokémon" + }, + { + "id": "143", + "name": "Snorlax", + "type": [ + "Normal" + ], + "baseStatistics": { + "hitPoints": 160, + "attack": 110, + "defense": 65, + "specialAttack": 65, + "specialDefense": 110, + "speed": 30 + }, + "classification": "Sleeping Pokémon" + }, + { + "id": "144", + "name": "Articuno", + "type": [ + "Ice", + "Flying" + ], + "baseStatistics": { + "hitPoints": 90, + "attack": 85, + "defense": 100, + "specialAttack": 95, + "specialDefense": 125, + "speed": 85 + }, + "classification": "Freeze Pokémon" + }, + { + "id": "145", + "name": "Zapdos", + "type": [ + "Electric", + "Flying" + ], + "baseStatistics": { + "hitPoints": 90, + "attack": 90, + "defense": 85, + "specialAttack": 125, + "specialDefense": 90, + "speed": 100 + }, + "classification": "Electric Pokémon" + }, + { + "id": "146", + "name": "Moltres", + "type": [ + "Fire", + "Flying" + ], + "baseStatistics": { + "hitPoints": 90, + "attack": 100, + "defense": 90, + "specialAttack": 125, + "specialDefense": 85, + "speed": 90 + }, + "classification": "Flame Pokémon" + }, + { + "id": "147", + "name": "Dratini", + "type": [ + "Dragon" + ], + "baseStatistics": { + "hitPoints": 41, + "attack": 64, + "defense": 45, + "specialAttack": 50, + "specialDefense": 50, + "speed": 50 + }, + "classification": "Dragon Pokémon" + }, + { + "id": "148", + "name": "Dragonair", + "type": [ + "Dragon" + ], + "baseStatistics": { + "hitPoints": 61, + "attack": 84, + "defense": 65, + "specialAttack": 70, + "specialDefense": 70, + "speed": 70 + }, + "classification": "Dragon Pokémon" + }, + { + "id": "149", + "name": "Dragonite", + "type": [ + "Dragon", + "Flying" + ], + "baseStatistics": { + "hitPoints": 91, + "attack": 134, + "defense": 95, + "specialAttack": 100, + "specialDefense": 100, + "speed": 80 + }, + "classification": "Dragon Pokémon" + }, + { + "id": "150", + "name": "Mewtwo", + "type": [ + "Psychic" + ], + "baseStatistics": { + "hitPoints": 106, + "attack": 110, + "defense": 90, + "specialAttack": 154, + "specialDefense": 90, + "speed": 130 + }, + "classification": "Genetic Pokémon" + }, + { + "id": "151", + "name": "Mew", + "type": [ + "Psychic" + ], + "baseStatistics": { + "hitPoints": 100, + "attack": 100, + "defense": 100, + "specialAttack": 100, + "specialDefense": 100, + "speed": 100 + }, + "classification": "New Species Pokémon" + } ] \ No newline at end of file diff --git a/src/treeMessages.json b/src/treeMessages.json new file mode 100644 index 0000000..f25d941 --- /dev/null +++ b/src/treeMessages.json @@ -0,0 +1,293 @@ +[ + "The tree is devoid of fruit.", + "The tree is without fruit.", + "The tree is barren.", + "The tree is missing all its fruit.", + "The tree is not with fruit.", + "The tree is without fruit.", + "The tree is not showing any fruit.", + "The tree is not bearing fruit.", + "The tree has not borne fruit.", + "The tree is not showing fruit.", + "The tree is not carrying fruit.", + "The tree is not holding fruit.", + "The tree is at 0 fruit.", + "The tree has no fruit.", + "The tree doesn't have any fruit to give.", + "The tree doesn't have any fruit to take.", + "The tree doesn't have any fruit left to plunder...", + "The tree has not grown any new fruit.", + "The tree can't give any more fruit right now.", + "The fruit have all been taken.", + "The fruit have all been picked.", + "You don't see any fruit on the tree.", + "Your hand is without fruit. After reaching to pick one", + "No fruit because there aren't any on the tree.", + "No kekklefruit was upon the tree.", + "The tree has long slender limbs, barren of fruit.", + "The tree's limbs are not currently baring any fruit.", + "This tree doesn't have fruit.", + "Fruit are not a thing currently on the tree.", + "Could not get fruit.", + "Try again, please.", + "(no fruit picked)", + "It just doesn't have any fruit.", + "There aren't any fruit.", + "Can't get fruit, there's no fruit.", + "The tree's not growing!!!!!!!", + "Give the tree some time to grow fruit.", + "The tree will grow fruit given time.", + "The tree will have fruit again.", + "The tree's just sitting there. Fruitless.", + "It'll grow fruit, give it a second.", + "Keep trying, but wait until the tree has fruit.", + "Wait until the tree has fruit.", + "Pick again in a bit because the tree doesn't have any fruit right now.", + "There aren't any fruit on the kekklefruit tree", + "You pore over each branch meticulously looking for fruit, but are still coming back empty.", + "You scour every branch of the tree for fruit, but still came back empty-handed.", + "You try caressing the tree's body. It didn't work.", + "You try tugging on one of the branches. It doesn't work.", + "You started picking the fruit when you heard a sound or something that distracted you and made you forget what you were doing. Then, you remember: you tried to pick a fruit. You take a deep breath and decide to try again", + "You could have sworn you were wrapping your hand around a sweet kekklefruit, but it seemingly disappeared from reality right as you grasped it??", + "No fruit.", + "Trying again, there were no fruit to pick.", + "There were no fruit to pick.", + "There was no fruit for you to pick.", + "There isn't anything that looks like a fruit growing on the tree, yet...", + "The fruit just isn't edible yet.", + "It's not ready, keep trying though.", + "It's not ready...!", + "It's not done.", + "Wait, give it time to grow fruit.", + "Just wait for the fruit to grow.", + "Wait for the fruit to grow. But don't wait until someone else grabs it first.", + "You have to give the precious kekklefruits time to grow.", + "Hold on, they're growing.", + "Hold on.", + "Watch the kekklefruit to make sure they have grown before picking them from the tree.", + "Don't pick the kekklefruit until they're grown.", + "The kekklefruit are still maturing.", + "There isn't a pickable kekklefruit.", + "You don't see any.", + "I don't see any.", + "It's like every time the tree grows fruit somebody is stealing it.", + "Every time the tree grows fruit, somebody picks it.", + "There's no fruit, so wait.", + "Keep trying to get fruit.", + "The fruit will be fine... when it grows.", + "The fruit will do fine. Then, pick it.", + "The fruit looks like you could almost pick it!", + "Picking is not available right now.", + "Please try again later.", + "No fruit.", + "Look here. Look there. No fruit anywhere.", + "The fruit just isn't there to pick.", + "You can't pick the fruit because it's not ready to be picked.", + "Don't pick the fruit until it finishes growing into a pickable fruit.", + "Let the fruit grow, first.", + "The tree is out of fruit.", + "The tree's fruit count remains 0.", + "Tree fruit unavailable.", + "You try, but there's no fruit.", + "The tree ran out of fruit.", + "No pickable fruit.", + "People took the tree's fruit.", + "The tree was picked over entirely.", + "The tree just didn't have any more fruit to give.", + "The tree asked you to try again, please.", + "The tree branches looked sinister with no fruit on them at all.", + "Without its fruit, the tree looks kinda scary.", + "The tree doesn't have fruit anymore.", + "The tree doesn't have fruit anymore. It looks weird that way.", + "The tree's long slender branches reached high into the sky, looking nude without their fruit.", + "Robbed of its precious fruit, the tree loomed despondently.", + "The tree doesn't \"have\" fruit.", + "After much consideration, you decide to maybe sayer a prayer for the tree.", + "The action you have taken upon the tree was fruitless.", + "No fruit, just now, not on the tree, here.", + "You didn't get any fruit.", + "The tree's fruit supply is depleted.", + "This tree has a strange animosity.", + "They took it all.", + "There's no more fruit.", + "Don't have any fruit.", + "You just have to wait for kekklefruit.", + "Wait for fruit.", + "Wait for fruit growth.", + "Wait for the fruit growth.", + "Wait for fruit to grow on the tree.", + "Those tree fruit are just hard to come by right now.", + "I haven't seen a fruit", + "It didn't produce fruit yet.", + "You're still waiting for it to produce fruit.", + "You're still waiting for fruit to grow.", + "The tree is bone dry! Sans fruit!", + "God, you'd do anything for a fruit. But not yet.", + "Just be patient.", + "Be patient.", + "Wait patiently for fruit.", + "Your fruit will grow, just wait.", + "Waiting for your fruit to grow.", + "Pick the next fruit that grows.", + "Pick a fruit after it grows.", + "Get a fruit from the tree after they grow.", + "Pick again after the tree has had time to grow fruit.", + "Not yet, it's hasn't grown fruit yet.", + "Wait a second, no fruit yet.", + "You can has fruit after it grows.", + "Try again repeatedly to see if you get a fruit or not.", + "Try again, it grows fruit periodically.", + "Wait", + "No fruit just yet", + "No fruit yet", + "Noooot yet", + "Just a little longer.", + "Wait between each pick for fruit to grow.", + "After a wait, fruit will grow on the tree.", + "The tree's gonna grow plenty of fruit, just give it time.", + "Without its fruit, this tree is looking slightly eerie.", + "What a funny-looking tree without its fruit!", + "You notice the way the tree looks without fruit.", + "You notice the tree looks kinda odd with no fruit like that.", + "You don't like looking at the tree when it doesn't have fruit.", + "You express your desire for the tree to grow fruit.", + "You're waiting for the fruit to grow so you can pick it.", + "Ugh, no fruit..", + "Keep trying to get fruit.", + "The fruit gave under the forces... I guess it wasn't ready yet.", + "The fruit's branches hadn't decided to tree yet.", + "The fruit wasn't available.", + "It's almost time for a fruit to be pickable.", + "Should be a fruit pickable soon.", + "It'll grow fruit for you to pick in a minute.", + "It'll grow in a minute.", + "It'll grow.", + "It'll grow fruit.", + "The fruit will grow on the tree's BRANCHES.", + "You don't spy any fruit on the tree's branches.", + "The tree's branches can be seen in detail without the fruit interrupting our view.", + "You make sure, and there's no fruit on the tree.", + "You search the tree for fruit, and are 100% sure there are none.", + "You're 100% sure there aren't any pickable fruit yet.", + "You try, but don't find any fruit.", + "You look, but don't find any fruit.", + "Can't see any FRUIT.", + "Couldn't /pick", + "It's just that there aren't any fruit on the tree.", + "These things take time.", + "These things can sometimes take time.", + "You can't rush these things.", + "You practice picking the fruit (there aren't any on the tree)", + "It doesn't look like there are any fruit on the tree.", + "0 kinds of fruit are growing on this tree", + "You feel good about the possibility of fruit growing on the tree eventually.", + "You whisper for the tree to grow nice fruits.", + "This is exciting! It'll grow fruit that you can eat.", + "Alas, the tree wasn't currently displaying any fruit.", + "Any fruit on the tree? No...", + "No fruit? Okay...", + "A quick scan shows no fruits on the tree that are ready for picking.", + "You check and don't see any fruit.", + "You give the tree a once-over to see if any fruit area ready. Not yet, but you are resolute...", + "You check on the tree. No fruit, back to whatever it was you were doing.", + "If this tree doesn't grow fruit soon you might start to get crazy.", + "Actually, what if the tree doesn't grow any more fruit?", + "What if the fruit never grows again?", + "Ok, there's no fruit.", + "You consider again what might happen if the fruit stopped growing.", + "There is no fruit, so you just ponder about the tree.", + "There's no fruit, so you just consider it for a moment.", + "There's no fruit, so you think about the tree situation for another moment and then move on.", + "There are no fruits, so you decided to talk about something else.", + "Missed!", + "Didn't chance upon a fruit.", + "Didn't find the fruit.", + "No fruit found.", + "It's gonna be good fruit.", + "The fruit from the tree will never change.", + "The fruit from this tree will always grow, as long as the tree stands, at a pretty steady rate.", + "You survey the tree for fruit, coming back empty-handed.", + "It's not like the tree is on strike from producing fruit.", + "The valuable fruit are not present.", + "The revered fruit have been lost.", + "You study the tree's fruitless branches.", + "Good view of the branches with no fruit on them.", + "Patiently and rapidly retry your command.", + "You use a phone app to make sure the tree doesn't have any pickable fruit.", + "You scan each fruit, finding no candidates for picking.", + "The fruit of the tree are too young and supple to pick.", + "You can't reach that one fruit up there.", + "Oh, there's one. But you can't reach it.", + "You trying to pick fruit that isn't there.", + "Where do you see fruit?", + "Looks like the fruit aren't out today.", + "You wonder what the fruit are doing.", + "You wonder when the tree will bear fruit.", + "You wonder when a fruit will be ready.", + "You wonder if a fruit will grow.", + "You think about how many fruits this tree must have produced with nobody even counting it or anything.", + "You wonder how many fruit this tree has grown in its lifetime.", + "It's not that time, yet.", + "It's not time.", + "Not... yet.", + "The auto-analysis didn't show any completed fruit.", + "The fruit aren't complete.", + "Waiting for fruit growth completion.", + "Please wait for the fruit to be ready.", + "Don't rush it.", + "Slow down, there aren't any fruit to pick yet.", + "You check the fruit indicator under your favorite kekklefruit tree. It reads: 0.", + "Nope, don't see any.", + "Is something taking all the fruit?", + "I guess somebody else picked the fruit first.", + "Somebody else got to it first.", + "This", + "If you focus, the fruit grows faster.", + "You meditate to make the fruit grow faster.", + "What you are doing doesn't make the fruit grow.", + "Don't be too greedy.", + "Fruit pick intercepted.", + "Intercepted, try again.", + "Denied. Try again for success.", + "False success message, no fruit actually picked", + "I swear it'll grow fruit eventually lol", + "You don't know how long it'll take before fruit grows on the tree.", + "You don't know how long before the fruit will grow on the tree.", + "Nobody knows how long it takes for fruit to grow on the tree.", + "The tree says 'no'", + "No fruit, but that's okay.", + "Don't worry about it.", + "No fruit but it's quite alright.", + "No fruit right now.", + "Not a good time to pick fruit.", + "It's probably not a good idea", + "Ha ha don't worry!", + "Lol don't sweat it", + "It's alright! It's just a temporary lack of fruit!", + "Seems like famine again", + "What's wrong with the tree?", + "Is the tree okay?", + "What's this tree for...?", + "Is something wrong with the tree?", + "Try singing the tree a song.", + "The tree doesn't look like it's up to it righ tnow.", + "The tree doesn't look so good.", + "The tree doesn't feel so good.", + "The tree doesn't look like it feels so good.", + "The tree isn't ready right now!", + "Back off and give the tree some time!!", + "Hands off until the tree grows fruit.", + "Patience.", + "Impatience.", + "no", + "Fruit not available", + "There are no fruits there.", + "No fruits upon the tree!", + "That didn't work.", + "Nope, no fruit.", + "You thought you spied a fruit, but were unable to procure any.", + "You climb all over that tree and don't find a single pickable", + "You wouldn't steal a fruit from a tree with no fruit.", + "Are you sure there aren't any fruit just lying around on the ground that you can /take?" +] \ No newline at end of file