Quantcast

Renamed Datamine.lua to Scanner.lua

James D. Callahan III [04-03-10 - 01:12]
Renamed Datamine.lua to Scanner.lua
Filename
AckisRecipeList.toc
Datamine.lua
Scanner.lua
diff --git a/AckisRecipeList.toc b/AckisRecipeList.toc
index b70adc5..a73fcfb 100644
--- a/AckisRecipeList.toc
+++ b/AckisRecipeList.toc
@@ -67,7 +67,7 @@ ARL.lua
 Config.lua
 Waypoint.lua
 Frame.lua
-Datamine.lua
+Scanner.lua
 Player.lua

 # Database files
diff --git a/Datamine.lua b/Datamine.lua
deleted file mode 100644
index 16452a4..0000000
--- a/Datamine.lua
+++ /dev/null
@@ -1,2505 +0,0 @@
---[[
-************************************************************************
-Datamine.lua
-In-game datamining functions for ARL
-************************************************************************
-File date: @file-date-iso@
-File revision: @file-revision@
-Project revision: @project-revision@
-Project version: @project-version@
-************************************************************************
-Please see http://www.wowace.com/addons/arl/ for more information.
-************************************************************************
-This source code is released under All Rights Reserved.
-************************************************************************
-]]--
-
--------------------------------------------------------------------------------
--- Upvalues globals.
--------------------------------------------------------------------------------
-local _G = getfenv(0)
-
-local table = _G.table
-local tconcat, tinsert, tsort, twipe = table.concat, table.insert, table.sort, table.wipe
-
-local string = _G.string
-
-local tonumber, tostring = _G.tonumber, _G.tostring
-
-local ipairs, pairs = _G.ipairs, _G.pairs
-
--------------------------------------------------------------------------------
--- Upvalued Blizzard API.
--------------------------------------------------------------------------------
-local UnitName = UnitName
-local UnitGUID = UnitGUID
-local UnitExists = UnitExists
-local UnitIsPlayer = UnitIsPlayer
-local UnitIsEnemy = UnitIsEnemy
-local GetNumTrainerServices = GetNumTrainerServices
-local GetTrainerServiceInfo = GetTrainerServiceInfo
-local IsTradeskillTrainer = IsTradeskillTrainer
-local SetTrainerServiceTypeFilter = SetTrainerServiceTypeFilter
-local GetTrainerServiceTypeFilter = GetTrainerServiceTypeFilter
-local GetTrainerServiceSkillReq = GetTrainerServiceSkillReq
-local GetMerchantNumItems = GetMerchantNumItems
-local GetMerchantItemLink = GetMerchantItemLink
-local GetMerchantItemInfo = GetMerchantItemInfo
-local GetSpellInfo = GetSpellInfo
-
--------------------------------------------------------------------------------
--- AddOn namespace.
--------------------------------------------------------------------------------
-local MODNAME	= "Ackis Recipe List"
-local addon	= LibStub("AceAddon-3.0"):GetAddon(MODNAME)
-
-local L		= LibStub("AceLocale-3.0"):GetLocale(MODNAME)
-
--- Set up the private intra-file namespace.
-local private	= select(2, ...)
-
--------------------------------------------------------------------------------
--- Constants
--------------------------------------------------------------------------------
-local F = private.filter_flags
-local A = private.acquire_types
-
-local PROFESSIONS = private.professions
-
--------------------------------------------------------------------------------
--- Mined via Data-tools
--- Table is Public Domain now
--- Look up table of Spell IDs to the recipe which trains them.
--------------------------------------------------------------------------------
-local SPELL_TO_RECIPE_MAP = {
-	-------------------------------------------------------------------------------
-	-- First Aid
-	-------------------------------------------------------------------------------
-	[7929] = 16112, 	[7935] = 6454, 		[10840] = 16113, 	[23787] = 19442,
-	[27032] = 21992, 	[27033] = 21993, 	[45546] = 39152,
-
-	-------------------------------------------------------------------------------
-	-- Alchemy
-	-------------------------------------------------------------------------------
-	[2333] = 3396, 		[2335] = 2555, 		[3172] = 3393, 		[3174] = 3394,
-	[3175] = 3395, 		[3188] = 6211, 		[3230] = 2553, 		[3449] = 6068,
-	[3450] = 3830, 		[3451] = 3831, 		[3453] = 3832, 		[3454] = 14634,
-	[4508] = 4597, 		[4942] = 4624, 		[6617] = 5640, 		[6618] = 5643,
-	[6624] = 5642, 		[7255] = 6053, 		[7256] = 6054, 		[7257] = 6055,
-	[7258] = 6056, 		[7259] = 6057, 		[8240] = 6663, 		[11453] = 9293,
-	[11456] = 10644, 	[11458] = 9294, 	[11459] = 9303, 	[11464] = 9295,
-	[11466] = 9296, 	[11468] = 9297, 	[11472] = 9298, 	[11473] = 9302,
-	[11476] = 9301, 	[11477] = 9300, 	[11479] = 9304, 	[11480] = 9305,
-	[17187] = 12958, 	[17552] = 13476, 	[17553] = 13477, 	[17554] = 13478,
-	[17555] = 13479, 	[17556] = 13480, 	[17557] = 13481, 	[17559] = 13482,
-	[17560] = 13483, 	[17561] = 13484, 	[17562] = 13485, 	[17563] = 13486,
-	[17564] = 13487, 	[17565] = 13488, 	[17566] = 13489, 	[17570] = 13490,
-	[17571] = 13491, 	[17572] = 13492, 	[17573] = 13493, 	[17574] = 13494,
-	[17575] = 13495, 	[17576] = 13496, 	[17577] = 13497, 	[17578] = 13499,
-	[17580] = 13501, 	[17632] = 13517, 	[17634] = 13518, 	[17635] = 31354,
-	[17636] = 31356, 	[17637] = 31355, 	[17638] = 31357, 	[21923] = 17709,
-	[22732] = 18257, 	[24365] = 20011, 	[24366] = 20012, 	[24367] = 20013,
-	[24368] = 20014, 	[25146] = 20761, 	[26277] = 21547, 	[28543] = 22900,
-	[28546] = 22901, 	[28549] = 22902, 	[28550] = 22903, 	[28552] = 22904,
-	[28553] = 24001, 	[28554] = 22906, 	[28555] = 22907, 	[28556] = 22908,
-	[28557] = 22909, 	[28558] = 22910, 	[28562] = 22911, 	[28563] = 22912,
-	[28564] = 35295, 	[28565] = 22914, 	[28566] = 22915, 	[28567] = 22916,
-	[28568] = 30443, 	[28569] = 22918, 	[28570] = 22919, 	[28571] = 22920,
-	[28572] = 22921, 	[28573] = 22922, 	[28575] = 22923, 	[28576] = 22924,
-	[28577] = 22925, 	[28578] = 35294, 	[28579] = 22927, 	[29688] = 23574,
-	[32765] = 25869, 	[32766] = 29232, 	[38960] = 31680, 	[38961] = 31682,
-	[38962] = 31681, 	[39637] = 32070, 	[39639] = 32071, 	[42736] = 33209,
-	[47046] = 35752, 	[47048] = 35753, 	[47049] = 35754, 	[47050] = 35755,
-	[53936] = 44564, 	[53937] = 44566, 	[53938] = 44568, 	[53939] = 44565,
-	[53942] = 44567,
-
-	-------------------------------------------------------------------------------
-	-- Blacksmithing
-	-------------------------------------------------------------------------------
-	[2667] = 2881, 		[2673] = 5578, 		[3295] = 2883, 		[3297] = 3608,
-	[3321] = 3609, 		[3325] = 3610, 		[3330] = 2882, 		[3334] = 3611,
-	[3336] = 3612, 		[3492] = 12162, 	[3493] = 3866, 		[3494] = 10858,
-	[3495] = 3867, 		[3496] = 12163, 	[3497] = 3868, 		[3498] = 12164,
-	[3500] = 3869, 		[3503] = 6047, 		[3504] = 3870, 		[3505] = 3871,
-	[3507] = 3872, 		[3511] = 3873, 		[3513] = 3874, 		[3515] = 3875,
-	[6518] = 5543, 		[7221] = 6044, 		[7222] = 6045, 		[7224] = 6046,
-	[8367] = 6735, 		[9811] = 7978, 		[9813] = 7979, 		[9814] = 7980,
-	[9818] = 7981, 		[9820] = 7982, 		[9933] = 7975, 		[9937] = 7995,
-	[9939] = 7976, 		[9945] = 7983, 		[9950] = 7984, 		[9952] = 7985,
-	[9964] = 7989, 		[9966] = 7991, 		[9970] = 7990, 		[9995] = 7992,
-	[9997] = 8029, 		[10005] = 7993, 	[10009] = 8028,		[10013] = 8030,
-	[11454] = 10713, 	[11643] = 9367, 	[12259] = 10424, 	[15292] = 11610,
-	[15293] = 11614, 	[15294] = 11611, 	[15295] = 11615, 	[15296] = 11612,
-	[15973] = 12261, 	[16642] = 12682, 	[16643] = 12683, 	[16644] = 12684,
-	[16645] = 12685, 	[16646] = 12687, 	[16647] = 12688, 	[16648] = 12689,
-	[16649] = 12690, 	[16650] = 12691, 	[16651] = 12692, 	[16652] = 12693,
-	[16653] = 12694, 	[16654] = 12695, 	[16655] = 12699, 	[16656] = 12697,
-	[16657] = 12700, 	[16658] = 12701, 	[16659] = 12702, 	[16660] = 12698,
-	[16661] = 12703, 	[16662] = 12704, 	[16663] = 12705, 	[16664] = 12706,
-	[16665] = 12707, 	[16667] = 12696, 	[16724] = 12711, 	[16725] = 12713,
-	[16726] = 12714, 	[16728] = 12716, 	[16729] = 12717, 	[16730] = 12715,
-	[16731] = 12718, 	[16732] = 12719, 	[16741] = 12720, 	[16742] = 12725,
-	[16744] = 12726, 	[16745] = 12727, 	[16746] = 12728, 	[16969] = 12819,
-	[16970] = 12821, 	[16971] = 12823, 	[16973] = 12824, 	[16978] = 12825,
-	[16983] = 12827, 	[16984] = 12828, 	[16985] = 12830, 	[16988] = 12833,
-	[16990] = 12834, 	[16991] = 12835, 	[16992] = 12836, 	[16993] = 12837,
-	[16994] = 12838, 	[16995] = 12839, 	[20872] = 17049, 	[20873] = 17053,
-	[20874] = 17051, 	[20876] = 17052, 	[20890] = 17059, 	[20897] = 17060,
-	[21161] = 18592, 	[21913] = 17706, 	[22757] = 18264, 	[23628] = 19202,
-	[23629] = 19204, 	[23632] = 19203, 	[23633] = 19205, 	[23636] = 19206,
-	[23637] = 19207, 	[23638] = 19208, 	[23639] = 19209, 	[23650] = 19210,
-	[23652] = 19211, 	[23653] = 19212, 	[24136] = 19776, 	[24137] = 19777,
-	[24138] = 19778, 	[24139] = 19779, 	[24140] = 19780, 	[24141] = 19781,
-	[24399] = 20040, 	[24912] = 20553, 	[24913] = 20555, 	[24914] = 20554,
-	[27585] = 22209, 	[27586] = 22219, 	[27587] = 22222, 	[27588] = 22214,
-	[27589] = 22220, 	[27590] = 22221, 	[27829] = 22388, 	[27830] = 22390,
-	[27832] = 22389, 	[28461] = 22766, 	[28462] = 22767, 	[28463] = 22768,
-	[29566] = 23590, 	[29568] = 23591, 	[29569] = 23592, 	[29571] = 23593,
-	[29603] = 23594, 	[29605] = 23595, 	[29606] = 23596, 	[29608] = 23597,
-	[29610] = 23599, 	[29611] = 23598, 	[29613] = 23600, 	[29614] = 23601,
-	[29615] = 23602, 	[29616] = 23603, 	[29617] = 23604, 	[29619] = 23605,
-	[29620] = 23606, 	[29621] = 23607, 	[29622] = 23621, 	[29628] = 23608,
-	[29629] = 23609, 	[29630] = 23610, 	[29642] = 23611, 	[29643] = 23612,
-	[29645] = 23613, 	[29648] = 23615, 	[29649] = 23617, 	[29656] = 23618,
-	[29657] = 24002, 	[29658] = 23620, 	[29662] = 23622, 	[29663] = 23623,
-	[29664] = 23624, 	[29668] = 23625, 	[29669] = 23626, 	[29671] = 23627,
-	[29672] = 23628, 	[29692] = 23629, 	[29693] = 23630, 	[29694] = 23631,
-	[29695] = 23632, 	[29696] = 23633, 	[29697] = 23634, 	[29698] = 23635,
-	[29699] = 23636, 	[29700] = 23637, 	[29728] = 23638, 	[29729] = 23639,
-	[32285] = 25526, 	[32656] = 25846, 	[32657] = 25847, 	[34608] = 28632,
-	[36389] = 30321, 	[36390] = 30322, 	[36391] = 30323, 	[36392] = 30324,
-	[38473] = 31390, 	[38475] = 31391, 	[38476] = 31392, 	[38477] = 31393,
-	[38478] = 31394, 	[38479] = 31395, 	[40033] = 32441, 	[40034] = 32442,
-	[40035] = 32443, 	[40036] = 32444, 	[41132] = 32736, 	[41133] = 32737,
-	[41134] = 32738, 	[41135] = 32739, 	[42688] = 35296, 	[43549] = 33792,
-	[43846] = 33954, 	[46140] = 35208, 	[46141] = 35209, 	[46142] = 35210,
-	[46144] = 35211, 	[54978] = 41124, 	[54979] = 41123, 	[54980] = 41120,
-	[54981] = 41122, 	[62202] = 44938, 	[63187] = 45088, 	[63188] = 45089,
-	[63189] = 45090, 	[63190] = 45091, 	[63191] = 45092, 	[63192] = 45093,
-	[67091] = 47622, 	[67130] = 47640, 	[67092] = 47623, 	[67131] = 47641,
-	[67096] = 47627, 	[67135] = 47642, 	[67095] = 47626, 	[67134] = 47643,
-	[67093] = 47624, 	[67132] = 47644, 	[67094] = 47625, 	[67133] = 47645,
-	[70563] = 49970,	[70567] = 49973,	[70565] = 49971,	[70566] = 49972,
-	[70568] = 49974,	[70562] = 49969,
-
-	-------------------------------------------------------------------------------
-	-- Cooking
-	-------------------------------------------------------------------------------
-	[2542] = 2697, 		[2543] = 728, 		[2545] = 2698, 		[2547] = 2699,
-	[2548] = 2700, 		[2549] = 2701, 		[2795] = 2889, 		[3370] = 3678,
-	[3371] = 3679, 		[3372] = 3680, 		[3373] = 3681, 		[3376] = 3682,
-	[3377] = 3683, 		[3397] = 3734, 		[3398] = 3735, 		[3399] = 3736,
-	[3400] = 3737, 		[4094] = 4609, 		[6412] = 5482, 		[6413] = 5483,
-	[6414] = 5484, 		[6415] = 5485, 		[6416] = 5486, 		[6417] = 44977,
-	[6418] = 5488, 		[6419] = 5489, 		[6501] = 5528, 		[7213] = 6039,
-	[7751] = 6325, 		[7752] = 6326, 		[7753] = 6328, 		[7754] = 6329,
-	[7755] = 6330, 		[7827] = 6368, 		[7828] = 6369, 		[8238] = 6661,
-	[8607] = 6892, 		[9513] = 18160, 	[15853] = 12227, 	[15855] = 12228,
-	[15856] = 12229, 	[15861] = 12231, 	[15863] = 12232, 	[15865] = 12233,
-	[15906] = 12239, 	[15910] = 12240, 	[15915] = 16111, 	[15933] = 16110,
-	[15935] = 12226, 	[18238] = 13939, 	[18239] = 13940, 	[18240] = 13942,
-	[18241] = 13941, 	[18242] = 13943, 	[18243] = 13945, 	[18244] = 13946,
-	[18245] = 13947, 	[18246] = 13948, 	[18247] = 13949, 	[20626] = 16767,
-	[20916] = 17062, 	[21143] = 17200, 	[21144] = 17201, 	[22480] = 18046,
-	[22761] = 18267, 	[24418] = 20075, 	[25659] = 21025, 	[25704] = 21099,
-	[25954] = 21219, 	[28267] = 22647, 	[33276] = 27685, 	[33277] = 27686,
-	[33278] = 27687, 	[33279] = 27684, 	[33284] = 27688, 	[33285] = 27689,
-	[33286] = 27690, 	[33287] = 27691, 	[33288] = 27692, 	[33289] = 27693,
-	[33290] = 27694, 	[33291] = 27695, 	[33292] = 27696, 	[33293] = 27697,
-	[33294] = 27698, 	[33295] = 27699, 	[33296] = 27700, 	[36210] = 30156,
-	[38867] = 31675, 	[38868] = 31674, 	[43707] = 33870, 	[43758] = 33871,
-	[43761] = 33869, 	[43765] = 33873, 	[43772] = 33875, 	[43779] = 33925,
-	[45022] = 34413, 	[45555] = 43018, 	[45556] = 43019, 	[45557] = 43020,
-	[45558] = 43021, 	[45559] = 43022, 	[45567] = 43023, 	[45568] = 43024,
-	[45570] = 43026, 	[45571] = 43025, 	[45695] = 34834, 	[46684] = 35564,
-	[46688] = 35566, 	[53056] = 39644, 	[57423] = 43017, 	[57433] = 43027,
-	[57434] = 43028, 	[57435] = 43029, 	[57436] = 43030, 	[57437] = 43031,
-	[57438] = 43032, 	[57439] = 43033, 	[57440] = 43034, 	[57441] = 43035,
-	[57442] = 43036, 	[57443] = 43037, 	[58512] = 43507, 	[58521] = 43508,
-	[58523] = 43509, 	[58525] = 43510, 	[58527] = 43505, 	[58528] = 43506,
-	[62350] = 44954,
-
-	-------------------------------------------------------------------------------
-	-- Enchanting
-	-------------------------------------------------------------------------------
-	[7443] = 6342, 		[7766] = 6344, 		[7776] = 6346, 		[7782] = 6347,
-	[7786] = 6348, 		[7793] = 6349, 		[7859] = 6375, 		[7867] = 6377,
-	[13380] = 11038, 	[13419] = 11039, 	[13464] = 11081, 	[13522] = 11098,
-	[13536] = 11101, 	[13612] = 11150, 	[13617] = 11151, 	[13620] = 11152,
-	[13646] = 11163, 	[13653] = 11164, 	[13655] = 11165, 	[13687] = 11167,
-	[13689] = 11168, 	[13698] = 11166, 	[13817] = 11202, 	[13841] = 11203,
-	[13846] = 11204, 	[13868] = 11205, 	[13882] = 11206, 	[13898] = 11207,
-	[13915] = 11208, 	[13931] = 11223, 	[13933] = 11224, 	[13945] = 11225,
-	[13947] = 11226, 	[15596] = 11813, 	[15596] = 45050,	[20009] = 16218,
- 	[20010] = 16246, 	[20011] = 16251, 	[20012] = 16219, 	[20014] = 16216,
- 	[20015] = 16224, 	[20016] = 16222,	[20017] = 16217, 	[20020] = 16215,
- 	[20023] = 16245, 	[20024] = 16220,	[20025] = 16253, 	[20026] = 16221,
- 	[20028] = 16242, 	[20029] = 16223,	[20030] = 16247, 	[20031] = 16250,
-	[20032] = 16254, 	[20033] = 16248,	[20034] = 16252, 	[20035] = 16255,
-	[20036] = 16249, 	[20051] = 16243,	[21931] = 17725, 	[22749] = 18259,
-	[22750] = 18260, 	[23799] = 19444,	[23800] = 19445, 	[23801] = 19446,
-	[23802] = 19447, 	[23803] = 19448,	[23804] = 19449, 	[25072] = 33153,
-	[25072] = 20726, 	[25073] = 20727,	[25074] = 20728, 	[25078] = 20729,
-	[25079] = 20730, 	[25080] = 33152,	[25080] = 20731, 	[25081] = 20732,
-	[25082] = 20733, 	[25083] = 33149,	[25083] = 20734, 	[25084] = 20735,
-	[25084] = 33150, 	[25084] = 33151,	[25086] = 20736, 	[25086] = 33148,
-	[25124] = 20758, 	[25125] = 20752,	[25126] = 20753, 	[25127] = 20754,
-	[25128] = 20755, 	[25129] = 20756,	[25130] = 20757, 	[27837] = 22392,
-	[27906] = 22530, 	[27911] = 22531,	[27911] = 24000, 	[27913] = 22532,
-	[27914] = 22533, 	[27917] = 22534,	[27920] = 22535, 	[27924] = 22536,
-	[27926] = 22537, 	[27927] = 22538,	[27945] = 22539, 	[27946] = 22540,
-	[27947] = 22541, 	[27948] = 35298,	[27948] = 22542, 	[27950] = 22543,
-	[27951] = 22544, 	[27954] = 22545,	[27960] = 24003, 	[27960] = 22547,
-	[27962] = 22548, 	[27967] = 22552,	[27968] = 22551, 	[27971] = 22554,
-	[27972] = 22553, 	[27975] = 22555,	[27977] = 22556, 	[27981] = 22560,
-	[27982] = 22561, 	[27984] = 22559,	[28003] = 22558, 	[28004] = 22557,
- 	[28016] = 22562, 	[28019] = 22563,	[28022] = 22565, 	[32665] = 25848,
-	[32667] = 25849, 	[33992] = 28270,	[33994] = 28271, 	[33997] = 28272,
-	[33999] = 28273, 	[34003] = 28274,	[34005] = 28276, 	[34006] = 28277,
-	[34007] = 35299, 	[34007] = 28279,	[34008] = 35297, 	[34008] = 28280,
-	[34009] = 28282, 	[34010] = 28281,	[42620] = 33165, 	[42974] = 33307,
-	[44483] = 37332, 	[44494] = 37333,	[44524] = 37344, 	[44556] = 37331,
-	[44575] = 44484, 	[44576] = 44494,	[44588] = 37340, 	[44590] = 37334,
-	[44591] = 37347, 	[44595] = 44473,	[44596] = 37330, 	[44621] = 37339,
-	[44625] = 44485, 	[44631] = 37349,	[45765] = 34872, 	[46578] = 35498,
-	[46594] = 35500, 	[47051] = 35756,	[47672] = 44471, 	[47898] = 44472,
-	[47899] = 44488, 	[47901] = 44491,	[59619] = 44496, 	[59621] = 44492,
-	[59625] = 44495, 	[60691] = 44483,	[60692] = 44489, 	[60707] = 44486,
- 	[60714] = 44487, 	[60763] = 44490,	[60767] = 44498, 	[62256] = 44944,
-	[62257] = 44945, 	[62948] = 45059,	[64441] = 46027, 	[64579] = 46348,
-
-	-------------------------------------------------------------------------------
-	--Engineering
-	-------------------------------------------------------------------------------
-	[3928] = 4408, 		[3933] = 4409, 		[3939] = 13309,		[3940] = 4410,
-	[3944] = 4411, 		[3952] = 14639, 	[3954] = 4412, 		[3957] = 13308,
-	[3959] = 4413, 		[3960] = 4414, 		[3966] = 4415, 		[3968] = 4416,
-	[3969] = 13311, 	[3971] = 7742, 		[3972] = 4417, 		[3979] = 13310,
-	[8243] = 6672, 		[8339] = 6716, 		[9269] = 7560, 		[9273] = 7561,
-	[12587] = 10601, 	[12597] = 10602, 	[12607] = 10603, 	[12614] = 10604,
-	[12615] = 10605, 	[12616] = 10606, 	[12617] = 10607, 	[12620] = 10608,
-	[12624] = 10609, 	[15628] = 11828, 	[15633] = 11827, 	[19790] = 16041,
-	[19791] = 16042, 	[19792] = 16043, 	[19793] = 16044, 	[19794] = 16045,
-	[19795] = 16047, 	[19796] = 16048, 	[19799] = 16049, 	[19800] = 16051,
-	[19814] = 16046, 	[19815] = 16050, 	[19819] = 16052, 	[19825] = 16053,
-	[19830] = 16054, 	[19831] = 16055, 	[19833] = 16056, 	[21940] = 17720,
-	[22793] = 18290, 	[22795] = 18292, 	[22797] = 18291, 	[23066] = 18647,
-	[23067] = 18649, 	[23068] = 18648, 	[23069] = 18650, 	[23071] = 18651,
-	[23077] = 18652, 	[23078] = 18653, 	[23079] = 18655, 	[23080] = 18656,
-	[23081] = 18657, 	[23082] = 18658, 	[23096] = 18654, 	[23129] = 18661,
-	[23507] = 19027, 	[24356] = 20000, 	[24357] = 20001, 	[26416] = 21724,
-	[26417] = 21725, 	[26418] = 21726, 	[26420] = 21727, 	[26421] = 21728,
-	[26422] = 21729, 	[26423] = 21730, 	[26424] = 21731, 	[26425] = 21732,
-	[26426] = 21733, 	[26427] = 21734, 	[26428] = 21735, 	[26442] = 44919,
-	[26443] = 44918, 	[28327] = 22729, 	[30313] = 23799, 	[30314] = 23800,
-	[30315] = 23802, 	[30316] = 23803, 	[30317] = 23804, 	[30318] = 23805,
-	[30325] = 23806, 	[30329] = 23807, 	[30332] = 23808, 	[30334] = 23809,
-	[30337] = 23810, 	[30341] = 23811, 	[30344] = 23814, 	[30347] = 23815,
-	[30348] = 23816, 	[30349] = 23817, 	[30547] = 23874, 	[30548] = 23888,
-	[30551] = 35310, 	[30552] = 35311, 	[30556] = 23887, 	[32814] = 25887,
-	[39895] = 32381, 	[43676] = 33804, 	[44391] = 34114, 	[46106] = 35191,
-	[46107] = 35187, 	[46108] = 35189, 	[46109] = 35190, 	[46110] = 35192,
-	[46111] = 35186, 	[46112] = 35193, 	[46113] = 35194, 	[46114] = 35195,
-	[46115] = 35196, 	[46116] = 35197, 	[46697] = 35582,	[60866] = 44502,
- 	[60867] = 44503, 	[72952] = 52022,	[72953] = 52023,
-
-	-------------------------------------------------------------------------------
-	--Inscription
-	-------------------------------------------------------------------------------
-	[71101] = 50166,  [71102] = 50168,  [71015] = 50167,
-
-	-------------------------------------------------------------------------------
-	--Jewelcrafting
-	-------------------------------------------------------------------------------
-	[25320] = 20856, 	[25323] = 20855, 	[25339] = 20854, 	[25610] = 20970,
-	[25612] = 20971, 	[25617] = 20973, 	[25618] = 20974, 	[25619] = 20975,
-	[25622] = 20976, 	[26873] = 21940, 	[26875] = 21941, 	[26878] = 21942,
-	[26881] = 21943, 	[26882] = 21944, 	[26887] = 21945, 	[26896] = 21947,
-	[26897] = 21948, 	[26900] = 21949, 	[26906] = 21952, 	[26909] = 21953,
-	[26910] = 21954, 	[26912] = 21955, 	[26914] = 21956, 	[26915] = 21957,
-	[28903] = 23130, 	[28905] = 23131, 	[28906] = 23133, 	[28907] = 23134,
-	[28910] = 23135, 	[28912] = 23136, 	[28914] = 23137, 	[28915] = 23138,
-	[28916] = 23140, 	[28917] = 23141, 	[28918] = 31359, 	[28924] = 23143,
-	[28927] = 23145, 	[28933] = 23146, 	[28936] = 23147,
-	[28938] = 23148, 	[28944] = 23149, 	[28947] = 23150, 	[28948] = 23151,
-	[28950] = 23152, 	[28953] = 23153, 	[28955] = 23154, 	[28957] = 23155,
-	[31053] = 24158, 	[31054] = 24159, 	[31055] = 24160, 	[31056] = 24161,
-	[31057] = 24162, 	[31058] = 24163, 	[31060] = 24164, 	[31061] = 24165,
-	[31062] = 24174, 	[31063] = 24175, 	[31064] = 24176, 	[31065] = 24177,
-	[31066] = 24178, 	[31067] = 24166, 	[31068] = 24167, 	[31070] = 24168,
-	[31071] = 24169, 	[31072] = 24170, 	[31076] = 24171, 	[31077] = 24172,
-	[31078] = 24173, 	[31079] = 24179, 	[31080] = 31358, 	[31081] = 24181,
-	[31082] = 24182, 	[31083] = 24183, 	[31084] = 24193, 	[31085] = 24194,
-	[31087] = 24195, 	[31088] = 35305, 	[31089] = 35306, 	[31090] = 24197,
-	[31091] = 24198, 	[31092] = 35304, 	[31094] = 24201, 	[31095] = 24202,
-	[31096] = 24203, 	[31097] = 24204, 	[31098] = 35307, 	[31099] = 24206,
-	[31100] = 24207, 	[31101] = 24208, 	[31102] = 24209, 	[31103] = 24210,
-	[31104] = 24211, 	[31105] = 24212, 	[31106] = 24213, 	[31107] = 24214,
-	[31108] = 24215, 	[31109] = 24216, 	[31110] = 24217, 	[31111] = 24218,
-	[31112] = 24219, 	[31113] = 24220, 	[31149] = 24200, 	[32866] = 25902,
-	[32867] = 25903, 	[32868] = 25905, 	[32869] = 25906, 	[32870] = 25904,
-	[32871] = 25907, 	[32872] = 25909, 	[32873] = 25908, 	[32874] = 25910,
-	[34069] = 28291, 	[34590] = 28596, 	[37855] = 30826, 	[38503] = 31401,
-	[38504] = 31402, 	[39451] = 31870, 	[39452] = 31875, 	[39455] = 31871,
-	[39458] = 31872, 	[39462] = 31877, 	[39463] = 31876, 	[39466] = 31873,
-	[39467] = 31874, 	[39470] = 31878, 	[39471] = 31879, 	[39705] = 35244,
-	[39706] = 35246, 	[39710] = 35250, 	[39711] = 35248, 	[39712] = 35245,
-	[39713] = 35249, 	[39714] = 35247, 	[39715] = 35263, 	[39716] = 35264,
-	[39717] = 35262, 	[39718] = 35265, 	[39719] = 35255, 	[39720] = 35260,
-	[39721] = 35259, 	[39722] = 35256, 	[39723] = 35261, 	[39724] = 35258,
-	[39725] = 35257, 	[39727] = 35243, 	[39728] = 35242, 	[39729] = 35238,
-	[39730] = 35240, 	[39731] = 35239, 	[39732] = 35241, 	[39733] = 35267,
-	[39734] = 35269, 	[39735] = 35268, 	[39736] = 35266, 	[39737] = 35270,
-	[39738] = 35271, 	[39739] = 35252, 	[39740] = 35254, 	[39741] = 35251,
-	[39742] = 35253, 	[39961] = 33622, 	[39963] = 32411, 	[42558] = 33305,
-	[42588] = 33155, 	[42589] = 33156, 	[42590] = 33157, 	[42591] = 33158,
-	[42592] = 33159, 	[42593] = 33160, 	[43493] = 33783, 	[44794] = 34689,
-	[46122] = 35198, 	[46123] = 35538, 	[46124] = 35200, 	[46125] = 35201,
-	[46126] = 35533, 	[46127] = 35203, 	[46403] = 35322, 	[46404] = 35323,
-	[46405] = 35325, 	[46597] = 35502, 	[46601] = 35505, 	[46775] = 35695,
-	[46776] = 35696, 	[46777] = 35697, 	[46778] = 35698, 	[46779] = 35699,
-	[46803] = 35708, 	[47053] = 35769, 	[47054] = 35766, 	[47055] = 35767,
-	[47056] = 35768, 	[48789] = 37504, 	[53830] = 41576, 	[53857] = 41559,
-	[53865] = 41575, 	[53869] = 41574, 	[53875] = 41566, 	[53877] = 41562,
-	[53879] = 41565, 	[53884] = 41563, 	[53885] = 41561, 	[53888] = 41564,
-	[53917] = 41567, 	[53919] = 41572, 	[53921] = 41568, 	[53924] = 41571,
-	[53929] = 41573, 	[53932] = 41570, 	[53933] = 41569, 	[53943] = 41560,
-	[53945] = 41577, 	[53946] = 41718, 	[53948] = 41719, 	[53949] = 41578,
-	[53950] = 41817, 	[53951] = 41790, 	[53952] = 42138, 	[53954] = 41581,
-	[53955] = 41728, 	[53957] = 41720, 	[53958] = 41580, 	[53959] = 41791,
-	[53960] = 41727, 	[53961] = 41579, 	[53962] = 41784, 	[53963] = 41747,
-	[53964] = 41785, 	[53965] = 41725, 	[53966] = 41783, 	[53967] = 41701,
-	[53968] = 41740, 	[53970] = 41796, 	[53971] = 41703, 	[53972] = 41820,
-	[53973] = 41702, 	[53974] = 41726, 	[53975] = 41789, 	[53976] = 41777,
-	[53977] = 41780, 	[53978] = 41734, 	[53979] = 41794, 	[53980] = 41582,
-	[53981] = 41733, 	[53982] = 41792, 	[53983] = 41689, 	[53984] = 41686,
-	[53985] = 41688, 	[53986] = 41730, 	[53987] = 41690, 	[53988] = 41721,
-	[53990] = 41732, 	[53991] = 41687, 	[53992] = 41779, 	[53993] = 41722,
-	[53994] = 41818, 	[53995] = 41795, 	[53996] = 41723, 	[53997] = 41698,
-	[53998] = 41697, 	[54000] = 41738, 	[54001] = 41693, 	[54002] = 41699,
-	[54003] = 41781, 	[54004] = 41782, 	[54005] = 41737, 	[54006] = 41694,
-	[54008] = 41724, 	[54009] = 41696, 	[54010] = 41739, 	[54011] = 41692,
-	[54012] = 41819, 	[54013] = 41736, 	[54014] = 41735, 	[54019] = 41793,
-	[54023] = 41778, 	[55384] = 41705, 	[55387] = 41743, 	[55388] = 41744,
-	[55389] = 41704, 	[55390] = 41786, 	[55392] = 41706, 	[55393] = 41742,
-	[55395] = 41787, 	[55396] = 41708, 	[55397] = 41798, 	[55398] = 41799,
-	[55400] = 41710, 	[55401] = 41797, 	[55403] = 41711, 	[55404] = 41709,
-	[55405] = 41788, 	[55407] = 41707, 	[56049] = 42298, 	[56052] = 42301,
-	[56053] = 42309, 	[56054] = 42299, 	[56055] = 42314, 	[56056] = 42302,
-	[56074] = 42300, 	[56076] = 42303, 	[56077] = 42304, 	[56079] = 42305,
-	[56081] = 42306, 	[56083] = 42307, 	[56084] = 42308, 	[56085] = 42310,
-	[56086] = 42311, 	[56087] = 42312, 	[56088] = 42313, 	[56089] = 42315,
-	[56496] = 42648, 	[56497] = 42649, 	[56498] = 42650, 	[56499] = 42651,
-	[56500] = 42652, 	[56501] = 42653, 	[58147] = 43317, 	[58148] = 43318,
-	[58149] = 43319, 	[58150] = 43320, 	[58492] = 43485, 	[58507] = 43497,
-	[58954] = 43597,	[66556] = 46937,	[66447] = 46917,	[66429] = 46899,
-	[66557] = 46938,	[66430] = 46900,	[66432] = 46902,	[66433] = 46903,
-	[66497] = 46924,	[66561] = 46942,	[66434] = 46904,	[66498] = 46925,
-	[66499] = 46926,	[66436] = 46906,	[66500] = 46927,	[66437] = 46907,
-	[66501] = 46928,	[66565] = 46946,	[66438] = 46908,	[66502] = 46929,
-	[66566] = 46947,	[66439] = 46909,	[66503] = 46930,	[66567] = 46948,
-	[66440] = 46910,	[66504] = 46931,	[66441] = 46911,	[66505] = 46932,
-	[66569] = 46950,	[66442] = 46912,	[66506] = 46933,	[66570] = 46951,
-	[66443] = 46913,	[66444] = 46914,	[66572] = 46953,	[66445] = 46915,
-	[66573] = 46956,	[66446] = 46916,	[66574] = 47007,	[66575] = 47008,
-	[66448] = 46918,	[66576] = 47010,	[66449] = 46919,	[66577] = 47011,
-	[66450] = 46920,	[66578] = 47012,	[66451] = 46921,	[66579] = 47015,
-	[66452] = 46922,	[66580] = 47016,	[66453] = 46923,	[66581] = 47017,
-	[66582] = 47018,	[66583] = 47019,	[66584] = 47020,	[66586] = 47022,
-	[68253] = 49112,	[66338] = 46897,	[66571] = 46952,	[66564] = 46945,
-	[66562] = 46943,	[66560] = 46941,	[66558] = 46939,	[66554] = 46935,
-	[66559] = 46940,	[66585] = 47021,	[66555] = 46936,	[66587] = 47023,
-	[66431] = 46901,	[66428] = 46898,	[66435] = 46905,	[66563] = 46944,
-	[66553] = 46934,	[66568] = 46949,
-
-	-------------------------------------------------------------------------------
-	--Leatherworking
-	-------------------------------------------------------------------------------
-	[2158] = 2406, 		[2163] = 2407, 		[2164] = 2408, 		[2169] = 2409,
-	[3762] = 4293, 		[3765] = 7360, 		[3767] = 4294, 		[3769] = 4296,
-	[3771] = 4297, 		[3772] = 7613, 		[3773] = 4299, 		[3775] = 4298,
-	[3777] = 4300, 		[3778] = 14635, 	[3779] = 4301, 		[4096] = 13287,
-	[4097] = 13288, 	[5244] = 5083, 		[6702] = 5786, 		[6703] = 5787,
-	[6704] = 5788, 		[6705] = 5789, 		[7133] = 5972, 		[7149] = 5973,
-	[7153] = 5974, 		[7953] = 6474, 		[7954] = 6475, 		[7955] = 6476,
-	[8322] = 6710, 		[9064] = 7288, 		[9070] = 7289, 		[9072] = 7290,
-	[9146] = 7361, 		[9147] = 7362, 		[9148] = 7363, 		[9149] = 7364,
-	[9195] = 7449, 		[9197] = 7450, 		[9202] = 7451, 		[9207] = 7452,
-	[9208] = 7453, 		[10490] = 8384, 	[10509] = 8385, 	[10516] = 8409,
-	[10520] = 8386, 	[10525] = 8395, 	[10529] = 8403, 	[10531] = 8387,
-	[10533] = 8397, 	[10542] = 8398, 	[10544] = 8404, 	[10546] = 8405,
-	[10554] = 8399, 	[10560] = 8389, 	[10562] = 8390, 	[10564] = 8400,
-	[10566] = 8406, 	[10568] = 8401, 	[10570] = 8402, 	[10572] = 8407,
-	[10574] = 8408, 	[19048] = 15724, 	[19049] = 15725, 	[19050] = 15726,
-	[19051] = 15727, 	[19052] = 15728, 	[19053] = 15729, 	[19054] = 15730,
-	[19055] = 15731, 	[19059] = 15732, 	[19060] = 15733, 	[19061] = 15734,
-	[19062] = 15735, 	[19063] = 15737, 	[19064] = 15738, 	[19065] = 15739,
-	[19066] = 15740, 	[19067] = 15741, 	[19068] = 20253, 	[19070] = 15743,
-	[19071] = 15744, 	[19072] = 15745, 	[19073] = 15746, 	[19074] = 15747,
-	[19075] = 15748, 	[19076] = 15749, 	[19077] = 15751, 	[19078] = 15752,
-	[19079] = 15753, 	[19080] = 20254, 	[19081] = 15755, 	[19082] = 15756,
-	[19083] = 15757, 	[19084] = 15758, 	[19085] = 15759, 	[19086] = 15760,
-	[19087] = 15761, 	[19088] = 15762, 	[19089] = 15763, 	[19090] = 15764,
-	[19091] = 15765, 	[19092] = 15768, 	[19093] = 15769, 	[19094] = 15770,
-	[19095] = 15771, 	[19097] = 15772, 	[19098] = 15773, 	[19100] = 15774,
-	[19101] = 15775, 	[19102] = 15776, 	[19103] = 15777, 	[19104] = 15779,
-	[19107] = 15781, 	[20853] = 17022, 	[20854] = 17023, 	[20855] = 17025,
-	[21943] = 17722, 	[22711] = 18239, 	[22727] = 18252, 	[22921] = 18514,
-	[22922] = 18515, 	[22923] = 18516, 	[22926] = 18517, 	[22927] = 18518,
-	[22928] = 18519, 	[23190] = 18731, 	[23399] = 18949, 	[23703] = 19326,
-	[23704] = 19327, 	[23705] = 19328, 	[23706] = 19329, 	[23707] = 19330,
-	[23708] = 19331, 	[23709] = 19332, 	[23710] = 19333, 	[24121] = 19769,
-	[24122] = 19770, 	[24123] = 19771, 	[24124] = 19772, 	[24125] = 19773,
-	[24703] = 20382, 	[24846] = 20506, 	[24847] = 20507, 	[24848] = 20508,
-	[24849] = 20509, 	[24850] = 20510, 	[24851] = 20511, 	[24940] = 20576,
-	[26279] = 21548, 	[28472] = 22771, 	[28473] = 22770, 	[28474] = 22769,
-	[32455] = 25720, 	[32457] = 25721, 	[32458] = 25722, 	[32461] = 25725,
-	[32482] = 25726, 	[32485] = 25728, 	[32487] = 25729, 	[32488] = 25731,
-	[32489] = 25730, 	[32490] = 25732, 	[32493] = 25733, 	[32494] = 25734,
-	[32495] = 25735, 	[32496] = 25736, 	[32497] = 25737, 	[32498] = 29213,
-	[32499] = 29214, 	[32500] = 29215, 	[32501] = 29217, 	[32502] = 29219,
-	[32503] = 29218, 	[35520] = 29669, 	[35521] = 29672, 	[35522] = 29673,
-	[35523] = 29674, 	[35524] = 29675, 	[35525] = 29677, 	[35526] = 29682,
-	[35527] = 29684, 	[35528] = 29691, 	[35529] = 29689, 	[35530] = 30444,
-	[35531] = 29693, 	[35532] = 29698, 	[35533] = 29700, 	[35534] = 29701,
-	[35535] = 29702, 	[35536] = 29703, 	[35537] = 29704, 	[35538] = 29713,
-	[35539] = 34175, 	[35543] = 29717, 	[35544] = 34173, 	[35549] = 31361,
-	[35554] = 31362, 	[35555] = 29720, 	[35557] = 29721, 	[35558] = 29723,
-	[35559] = 35302, 	[35560] = 29725, 	[35561] = 29726, 	[35562] = 35303,
-	[35563] = 29728, 	[35564] = 29729, 	[35567] = 29730, 	[35568] = 35300,
-	[35572] = 29732, 	[35573] = 35301, 	[35574] = 29734, 	[36349] = 30301,
-	[36351] = 30302, 	[36352] = 30303, 	[36353] = 30304, 	[36355] = 30305,
-	[36357] = 30306, 	[36358] = 30307, 	[36359] = 30308, 	[39997] = 32429,
-	[40001] = 32431, 	[40002] = 32432, 	[40003] = 32433, 	[40004] = 32434,
-	[40005] = 32435, 	[40006] = 32436, 	[41156] = 32744, 	[41157] = 35523,
-	[41158] = 35527, 	[41160] = 35528, 	[41161] = 35517, 	[41162] = 35524,
-	[41163] = 35520, 	[41164] = 35521, 	[42546] = 33124, 	[42731] = 33205,
-	[44359] = 34200, 	[44768] = 34218, 	[44953] = 34262, 	[45117] = 34491,
-	[46132] = 35546, 	[46133] = 35541, 	[46134] = 35214, 	[46135] = 35215,
-	[46136] = 35216, 	[46137] = 35217, 	[46138] = 35218, 	[46139] = 35549,
-	[50970] = 44509, 	[50971] = 44510, 	[52733] = 32430,
-	[57692] = 44559, 	[57694] = 44560, 	[57696] = 44561, 	[57699] = 44562,
-	[57701] = 44563, 	[60645] = 44511, 	[60647] = 44512, 	[60697] = 44513,
-	[60702] = 44514, 	[60703] = 44515, 	[60704] = 44516, 	[60705] = 44517,
-	[60706] = 44518, 	[60711] = 44519, 	[60712] = 44520, 	[60715] = 44521,
-	[60716] = 44522, 	[60718] = 44523, 	[60720] = 44524, 	[60721] = 44525,
-	[60723] = 44526, 	[60725] = 44527, 	[60727] = 44528, 	[60728] = 44530,
-	[60729] = 44531, 	[60730] = 44532, 	[60731] = 44533, 	[60732] = 44534,
-	[60734] = 44535, 	[60735] = 44536, 	[60737] = 44537, 	[60743] = 44538,
-	[60746] = 44539, 	[60747] = 44540, 	[60748] = 44541, 	[60749] = 44542,
-	[60750] = 44543, 	[60751] = 44544, 	[60752] = 44545, 	[60754] = 44546,
-	[60755] = 44547, 	[60756] = 44548, 	[60757] = 44549, 	[60758] = 44550,
-	[60759] = 44551, 	[60760] = 44552, 	[60761] = 44553, 	[60996] = 44584,
-	[60997] = 44585, 	[60998] = 44586, 	[60999] = 44587, 	[61000] = 44588,
-	[61002] = 44589, 	[62176] = 44932, 	[62177] = 44933, 	[63194] = 45094,
-	[63195] = 45095, 	[63196] = 45096, 	[63197] = 45097, 	[63198] = 45098,
-	[63199] = 45099, 	[63200] = 45100, 	[63201] = 45101,	[70554] = 49957,
-	[70555] = 49958,	[70556] = 49959,	[70557] = 49961,	[70558] = 49962,
-	[70559] = 49963,	[70560] = 49965,	[70561] = 49966,	[67136] = 47650,
-	[67137] = 47646,	[67138] = 47649,	[67139] = 47647,	[67141] = 47653,
-	[67142] = 47651,	[67143] = 47648,	[67140] = 47652,
-
-	-------------------------------------------------------------------------------
-	--Smelting
-	-------------------------------------------------------------------------------
-	[22967] = 44956, 	[46353] = 35273,
-
-	-------------------------------------------------------------------------------
-	--Tailoring
-	-------------------------------------------------------------------------------
-	[2389] = 2598, 		[2403] = 2601, 		[3758] = 4292, 		[3844] = 4346,
-	[3847] = 4345, 		[3849] = 4347, 		[3851] = 4349, 		[3854] = 7114,
-	[3856] = 4350, 		[3857] = 14630, 	[3858] = 4351, 		[3860] = 4352,
-	[3862] = 4355, 		[3863] = 4353, 		[3864] = 4356, 		[3868] = 4348,
-	[3869] = 14627, 	[3870] = 6401, 		[3872] = 4354, 		[3873] = 10728,
-	[6686] = 5771, 		[6688] = 5772, 		[6692] = 5773, 		[6693] = 5774,
-	[6695] = 5775, 		[7629] = 6271, 		[7630] = 6270, 		[7633] = 6272,
-	[7639] = 6274, 		[7643] = 6275, 		[7892] = 6390, 		[7893] = 6391,
-	[8780] = 7092, 		[8782] = 7091, 		[8784] = 7090, 		[8786] = 7089,
-	[8789] = 7087, 		[8793] = 7084, 		[8795] = 7085, 		[8797] = 7086,
-	[8802] = 7088, 		[12047] = 10316, 	[12056] = 10300, 	[12059] = 10301,
-	[12060] = 10302, 	[12064] = 10311, 	[12066] = 10312, 	[12075] = 10314,
-	[12078] = 10315, 	[12080] = 10317, 	[12081] = 10318, 	[12084] = 10320,
-	[12085] = 10321, 	[12086] = 10463, 	[12089] = 10323, 	[12091] = 10325,
-	[12093] = 10326, 	[18403] = 14466, 	[18404] = 14467, 	[18405] = 14468,
-	[18406] = 14469, 	[18407] = 14470, 	[18408] = 14471, 	[18409] = 14472,
-	[18410] = 14473, 	[18411] = 14474, 	[18412] = 14476, 	[18413] = 14477,
-	[18414] = 14478, 	[18415] = 14479, 	[18416] = 14480, 	[18417] = 14481,
-	[18418] = 14482, 	[18419] = 14483, 	[18420] = 14484, 	[18421] = 14485,
-	[18422] = 14486, 	[18423] = 14488, 	[18424] = 14489, 	[18434] = 14490,
-	[18436] = 14493, 	[18437] = 14492, 	[18438] = 14491, 	[18439] = 14494,
-	[18440] = 14497, 	[18441] = 14495, 	[18442] = 14496, 	[18444] = 14498,
-	[18445] = 14499, 	[18446] = 14500, 	[18447] = 14501, 	[18448] = 14507,
-	[18449] = 14504, 	[18450] = 14505, 	[18451] = 14506, 	[18452] = 14509,
-	[18453] = 14508, 	[18454] = 14511, 	[18455] = 14510, 	[18456] = 14512,
-	[18457] = 14513, 	[18458] = 14514, 	[18560] = 14526, 	[20848] = 17017,
-	[20849] = 17018, 	[21945] = 17724, 	[22759] = 18265, 	[22866] = 18414,
-	[22867] = 18415, 	[22868] = 18416, 	[22869] = 18417, 	[22870] = 18418,
-	[22902] = 18487, 	[23662] = 19215, 	[23663] = 19218, 	[23664] = 19216,
-	[23665] = 19217, 	[23666] = 19219, 	[23667] = 19220, 	[24091] = 19764,
-	[24092] = 19765, 	[24093] = 19766, 	[24901] = 20546, 	[24902] = 20548,
-	[24903] = 20547, 	[26085] = 21358, 	[26087] = 21371, 	[26403] = 44916,
-	[26407] = 44917, 	[26747] = 21892, 	[26749] = 21893, 	[26750] = 21894,
-	[26751] = 21895, 	[26752] = 21908, 	[26753] = 21909, 	[26754] = 21910,
-	[26755] = 21911, 	[26756] = 21912, 	[26757] = 21914, 	[26758] = 21913,
-	[26759] = 21915, 	[26760] = 21916, 	[26761] = 21918, 	[26762] = 21917,
-	[26763] = 21919, 	[26773] = 21896, 	[26774] = 21897, 	[26775] = 21898,
-	[26776] = 21899, 	[26777] = 21900, 	[26778] = 21901, 	[26779] = 21902,
-	[26780] = 21903, 	[26781] = 21904, 	[26782] = 21905, 	[26783] = 21906,
-	[26784] = 21907, 	[27658] = 22307, 	[27659] = 22308, 	[27660] = 22309,
-	[27724] = 22310, 	[27725] = 22312, 	[28210] = 22683, 	[28480] = 22774,
-	[28481] = 22773, 	[28482] = 22772, 	[31373] = 24316, 	[31430] = 24292,
-	[31431] = 24293, 	[31432] = 24294, 	[31433] = 24295, 	[31434] = 35308,
-	[31435] = 24297, 	[31437] = 24298, 	[31438] = 24299, 	[31440] = 24300,
-	[31441] = 24301, 	[31442] = 35309, 	[31443] = 24303, 	[31444] = 24304,
-	[31448] = 24305, 	[31449] = 24306, 	[31450] = 24307, 	[31451] = 24308,
-	[31452] = 24309, 	[31453] = 24310, 	[31454] = 24311, 	[31455] = 24312,
-	[31456] = 24313, 	[31459] = 24314, 	[36315] = 30280, 	[36316] = 30281,
-	[36317] = 30282, 	[36318] = 30283, 	[36686] = 30483, 	[37873] = 30833,
-	[37882] = 30842, 	[37883] = 30843, 	[37884] = 30844, 	[40020] = 32437,
-	[40021] = 32438, 	[40023] = 32439, 	[40024] = 32440, 	[40060] = 32447,
-	[41205] = 32754, 	[41206] = 32755, 	[41207] = 32752, 	[41208] = 32753,
-	[44950] = 34261, 	[44958] = 34319, 	[46128] = 35204, 	[46129] = 35205,
-	[46130] = 35206, 	[46131] = 35207, 	[49677] = 37915, 	[50194] = 38229,
-	[50644] = 38327, 	[50647] = 38328, 	[55993] = 42172, 	[55994] = 42173,
-	[55996] = 42175, 	[55997] = 42177, 	[55998] = 42176, 	[55999] = 42178,
-	[56004] = 42183, 	[56005] = 42184, 	[56006] = 42185, 	[56009] = 42187,
-	[56011] = 42188, 	[63924] = 45774,	[70550] = 49953,	[70551] = 49954,
-	[70552] = 49955,	[70553] = 49956,	[63203] = 45102,	[63205] = 45104,
-	[63206] = 45105,	[67145] = 47639,	[67146] = 47638,	[63204] = 45103,
-	[67144] = 47636,	[67147] = 47637,
-}
-
-local RECIPE_TO_SPELL_MAP = {}
-
-do
-	for spell_id, recipe_id in pairs(SPELL_TO_RECIPE_MAP) do
-		RECIPE_TO_SPELL_MAP[recipe_id] = spell_id
-	end
-end
-
--------------------------------------------------------------------------------
--- Look up table of spell IDs for recipes which do not have a player flag
--- BASICALLY A TEMPORARY STORAGE FOR IDS, SO WE CAN SEE CLEANER SCANS AND WHAT NOT,
--- WE'LL GO BACK HERE LATER DOWN THE ROAD.
--------------------------------------------------------------------------------
-local NO_ROLE_FLAG = {
-
-	--------------------------------------------------------------------------------------------
-	-----ASSORTED CRAP
-	--------------------------------------------------------------------------------------------
-	[30344] = true, 		[30341] = true, 		[32814] = true, 		[23066] = true,
-	[26421] = true, 		[36955] = true, 		[19788] = true, 		[23129] = true,
-	[26422] = true, 		[12715] = true, 		[12899] = true, 		[56459] = true,
-	[30307] = true, 		[26423] = true, 		[3918] = true,	 		[23067] = true,
-	[30308] = true, 		[3953] = true,			[15255] = true, 		[26424] = true,
-	[30548] = true, 		[44157] = true, 		[56462] = true, 		[19567] = true,
-	[30552] = true, 		[23068] = true, 		[44155] = true, 		[28327] = true,
-	[26425] = true, 		[56461] = true, 		[68067] = true, 		[15633] = true,
-	[23096] = true, 		[12589] = true, 		[26442] = true, 		[26426] = true,
-	[67920] = true, 		[9273] = true,			[3926] = true,			[6458] = true,
-	[19793] = true, 		[55252] = true, 		[9271] = true,			[26427] = true,
-	[26443] = true, 		[30551] = true, 		[23486] = true, 		[3922] = true,
-	[3924] = true,			[12590] = true, 		[3928] = true,			[3942] = true,
-	[26428] = true, 		[3952] = true,	 		[22704] = true, 		[12902] = true,
-	[30569] = true, 		[15628] = true, 		[12895] = true, 		[21940] = true,
-	[56349] = true, 		[12584] = true, 		[56477] = true, 		[30348] = true,
-	[26416] = true, 		[53281] = true, 		[23507] = true,			[12075] = true,
-	[12079] = true,			[26746] = true,			[56000] = true,
-
-	-----------------------------------------------------------------------------------------
-	---JEWELCRAFTING
-	-----------------------------------------------------------------------------------------
-	[55401] = true,	[53995] = true,	[66432] = true,	[25255] = true,
-	[66497] = true, [53996] = true, [56074] = true, [56202] = true,
-	[66434] = true, [32801] = true, [28948] = true, [53997] = true,
-	[39963] = true, [32866] = true, [66501] = true, [39452] = true,
-	[53934] = true, [66502] = true, [55405] = true, [58954] = true,
-	[56205] = true, [37855] = true, [38175] = true, [25305] = true,
-	[25321] = true, [66505] = true, [54000] = true, [39742] = true,
-	[56206] = true, [66506] = true, [32869] = true, [54001] = true,
-	[56079] = true, [32259] = true, [32870] = true, [56208] = true,
-	[32807] = true, [32871] = true, [26873] = true, [31061] = true,
-	[32872] = true, [42591] = true, [46779] = true, [56530] = true,
-	[42592] = true, [31062] = true, [56083] = true, [32874] = true,
-	[56531] = true, [31063] = true, [56085] = true, [38503] = true,
-	[56086] = true, [28938] = true, [38504] = true, [31064] = true,
-	[31096] = true, [55384] = true, [25278] = true, [68253] = true,
-	[43493] = true, [26925] = true, [31065] = true, [46403] = true,
-	[53852] = true, [53916] = true, [39722] = true, [25615] = true,
-	[28924] = true, [26926] = true, [53853] = true, [36526] = true,
-	[31098] = true, [55388] = true, [46405] = true, [53854] = true,
-	[39724] = true, [55389] = true, [26927] = true, [31051] = true,
-	[53919] = true, [39725] = true, [55390] = true, [53856] = true,
-	[53920] = true, [53952] = true, [26880] = true, [53857] = true,
-	[31052] = true, [34069] = true, [25490] = true, [55393] = true,
-	[39451] = true, [53956] = true, [44794] = true, [36524] = true,
-	[55395] = true, [38068] = true, [28944] = true, [53957] = true,
-	[31066] = true, [31082] = true, [66428] = true, [26909] = true,
-	[55396] = true, [31097] = true, [25284] = true, [56084] = true,
-	[62941] = true, [66431] = true, [53894] = true, [53958] = true,
-	[58146] = true, [31099] = true, [47053] = true, [31067] = true,
-	[28917] = true, [26903] = true, [36525] = true, [66503] = true,
-	[56197] = true, [47054] = true, [53961] = true, [39715] = true,
-	[31092] = true, [53960] = true, [31077] = true, [31101] = true,
-	[39719] = true, [55399] = true, [31113] = true, [32808] = true,
-	[53917] = true, [63743] = true, [39720] = true, [39721] = true,
-	[42590] = true, [58149] = true, [56199] = true, [47056] = true,
-	[28950] = true, [47280] = true, [32809] = true, [31072] = true,
-	[25318] = true, [66429] = true, [62242] = true,
-	---------------------------------------------------------------------------------------
-
-	---------------------------------------------------------------------------------------
-	---COOKING
-	---------------------------------------------------------------------------------------
-	[62050]= true, [22761]= true, [62051]= true, [8607]= true,
-	[18238]= true, [6413]= true, [6417]= true, [42296]= true,
-	[45557]= true, [6501]= true, [45558]= true, [18239]= true,
-	[7752]= true, [7828]= true, [45560]= true, [64358]= true,
-	[57421]= true, [45561]= true, [13028]= true, [2543]= true,
-	[2545]= true, [25659]= true, [58512]= true, [45565]= true,
-	[42305]= true, [45566]= true, [62350]= true, [7753]= true,
-	[45695]= true, [9513]= true, [18244]= true, [20626]= true,
-	[45569]= true, [43779]= true, [18245]= true, [45571]= true,
-	[18246]= true, [37836]= true, [57433]= true, [20916]= true,
-	[58521]= true, [18247]= true, [57435]= true, [7754]= true,
-	[53056]= true, [58523]= true, [57437]= true, [57438]= true,
-	[58525]= true, [45570]= true, [2538]= true, [2540]= true,
-	[2548]= true, [33290]= true, [45562]= true, [15906]= true,
-	[18241]= true, [45559]= true, [45551]= true, [57443]= true,
-	[58527]= true, [43758]= true, [58528]= true, [8238]= true,
-	[7751]= true, [7755]= true, [43761]= true, [7827]= true,
-	[45552]= true, [45553]= true, [66038] = true, [66034] = true,
-	---------------------------------------------------------------------------------------
-
-	---------------------------------------------------------------------------------------
-	---BLACKSMITHING
-	---------------------------------------------------------------------------------------
-	[10015] = true, [55202] = true, [16726] = true, [24399] = true,
-	[15293] = true, [32655] = true, [3320] = true, [40033] = true,
-	[34545] = true, [61010] = true, [16639] = true, [3115] = true,
-	[3116] = true, [3117] = true, [16648] = true, [40034] = true,
-	[9920] = true, [9928] = true, [29558] = true, [55839] = true,
-	[9964] = true, [7818] = true, [55732] = true, [29694] = true,
-	[3326] = true, [9950] = true, [59405] = true, [12260] = true,
-	[16983] = true, [16991] = true, [23650] = true, [16640] = true,
-	[2741] = true, [3513] = true, [3497] = true, [8768] = true,
-	[19666] = true, [2662] = true, [2663] = true, [20201] = true,
-	[16664] = true, [15294] = true, [3496] = true, [16645] = true,
-	[29569] = true, [2737] = true, [14380] = true, [16992] = true,
-	[36125] = true, [19667] = true, [22757] = true, [16665] = true,
-	[59406] = true, [2738] = true, [2739] = true, [2740] = true,
-	[24913] = true, [9933] = true, [20873] = true, [36126] = true,
-	[40035] = true, [8880] = true, [23636] = true, [3292] = true,
-	[3293] = true, [21161] = true, [32656] = true, [19668] = true,
-	[9921] = true, [7222] = true, [3319] = true, [15295] = true,
-	[20874] = true, [20890] = true, [3337] = true, [34546] = true,
-	[16970] = true, [16978] = true, [61008] = true, [7224] = true,
-	[11454] = true, [19669] = true, [55656] = true, [16667] = true,
-	[16731] = true, [61009] = true, [9926] = true, [16984] = true,
-	[21913] = true, [40036] = true, [9974] = true, [32657] = true,
-	[32285] = true, [23638] = true, [10011] = true, [36131] = true,
-	[27830] = true,  [32284] = true, [16732] = true, [15292] = true,
-	[15296] = true, [38478] = true, [20876] = true, [38475] = true,
-	[23653] = true, [3325] = true, [14379] = true,  [29729] = true,
-	[2661] = true,  [29728] = true, [16655] = true, [16993] = true,
-	[3491] = true, [3494] = true, [3501] = true, [9959] = true,
-	[9983] = true, [36262] = true, [10003] = true, [10007] = true,
-	---------------------------------------------------------------------------------------
-
-	---------------------------------------------------------------------------------------
-	----INSCRIPTION
-	---------------------------------------------------------------------------------------
-	[58315] = true, [58331] = true, [58347] = true, [56974] = true, [56990] = true,
-	[64256] = true, [64304] = true, [57166] = true, [57709] = true, [57214] = true,
-	[57230] = true, [50603] = true, [57262] = true, [59338] = true, [58332] = true,
-	[56959] = true, [56975] = true, [56991] = true, [57007] = true, [57023] = true,
-	[53462] = true, [64257] = true, [64273] = true, [64289] = true, [57151] = true,
-	[57167] = true, [57183] = true, [57710] = true, [57215] = true, [57247] = true,
-	[50620] = true, [58301] = true, [59339] = true, [58333] = true, [59387] = true,
-	[52840] = true, [59499] = true, [56960] = true, [56976] = true, [57008] = true,
-	[57024] = true, [64258] = true, [64274] = true, [57168] = true, [57184] = true,
-	[61288] = true, [57216] = true, [57232] = true, [58286] = true, [58302] = true,
-	[59340] = true, [48114] = true, [64051] = true, [59484] = true, [59500] = true,
-	[56961] = true, [56977] = true, [57009] = true, [57025] = true, [61177] = true,
-	[64259] = true, [57121] = true, [64291] = true, [57153] = true, [57169] = true,
-	[57185] = true, [57712] = true, [57217] = true, [57233] = true, [58287] = true,
-	[58303] = true, [58319] = true, [56946] = true, [56978] = true, [56994] = true,
-	[57010] = true, [57026] = true, [64260] = true, [57122] = true, [57154] = true,
-	[57170] = true, [57186] = true, [57713] = true, [57218] = true, [57234] = true,
-	[57266] = true, [59326] = true, [58320] = true, [58336] = true, [59486] = true,
-	[59502] = true, [56963] = true, [56995] = true, [57011] = true, [57027] = true,
-	[64261] = true, [64277] = true, [57155] = true, [57187] = true, [57714] = true,
-	[57219] = true, [57235] = true, [58289] = true, [58305] = true, [58321] = true,
-	[58337] = true, [69385] = true, [57243] = true, [64314] = true, [64313] = true,
-	[56958] = true, [59487] = true, [59503] = true, [58288] = true, [56980] = true,
-	[56996] = true, [57012] = true, [57028] = true, [59501] = true, [56948] = true,
-	[57264] = true, [64246] = true, [64262] = true, [57124] = true, [64294] = true,
-	[57156] = true, [57172] = true, [57188] = true, [57715] = true, [57220] = true,
-	[57236] = true, [57268] = true, [58306] = true, [58322] = true, [58338] = true,
-	[48247] = true, [57133] = true, [57270] = true, [57131] = true, [57129] = true,
-	[50604] = true, [59488] = true, [59504] = true, [56965] = true, [56981] = true,
-	[56997] = true, [57013] = true, [57029] = true, [64280] = true, [57114] = true,
-	[64286] = true, [58299] = true, [57125] = true, [64295] = true, [64311] = true,
-	[57164] = true, [57189] = true, [57716] = true, [57221] = true, [57237] = true,
-	[57269] = true, [58307] = true, [58323] = true, [58339] = true, [64307] = true,
-	[57119] = true, [57246] = true, [68166] = true, [64282] = true, [57250] = true,
-	[59489] = true, [56957] = true, [56982] = true, [56998] = true, [57014] = true,
-	[57117] = true, [64305] = true, [61677] = true, [52843] = true, [57126] = true,
-	[64296] = true, [57158] = true, [64310] = true, [57190] = true, [56956] = true,
-	[57238] = true, [60336] = true, [58308] = true, [58324] = true, [58340] = true,
-	[64315] = true, [56949] = true, [56950] = true, [64308] = true, [56955] = true,
-	[59490] = true, [59315] = true, [56983] = true, [56999] = true, [64267] = true,
-	[57031] = true, [56954] = true, [64276] = true, [57249] = true, [64249] = true,
-	[56953] = true, [57127] = true, [64297] = true, [57159] = true, [64275] = true,
-	[57191] = true, [57207] = true, [57223] = true, [57239] = true, [50612] = true,
-	[60337] = true, [57208] = true, [58325] = true, [48121] = true, [56952] = true,
-	[56947] = true, [56951] = true, [64268] = true, [57123] = true, [59475] = true,
-	[59491] = true, [56968] = true, [56984] = true, [57000] = true, [48248] = true,
-	[58565] = true, [58317] = true, [64266] = true, [57252] = true, [64250] = true,
-	[57112] = true, [57128] = true, [64298] = true, [57160] = true, [58316] = true,
-	[57703] = true, [57719] = true, [57224] = true, [57240] = true, [57272] = true,
-	[58310] = true, [58326] = true, [58342] = true, [57201] = true, [56945] = true,
-	[57200] = true, [56944] = true, [57711] = true, [56985] = true, [57001] = true,
-	[57199] = true, [57033] = true, [56943] = true, [57198] = true, [64251] = true,
-	[57113] = true, [64283] = true, [64299] = true, [57161] = true, [57197] = true,
-	[57704] = true, [57209] = true, [57225] = true, [57241] = true, [50614] = true,
-	[57273] = true, [58311] = true, [58327] = true, [58343] = true, [52738] = true,
-	[57196] = true, [64278] = true, [57195] = true, [58318] = true, [64284] = true,
-	[57006] = true, [64316] = true, [56986] = true, [57002] = true, [59560] = true,
-	[57034] = true, [58341] = true, [57192] = true, [64252] = true, [67600] = true,
-	[57130] = true, [64300] = true, [57162] = true, [57244] = true, [57194] = true,
-	[57210] = true, [57226] = true, [50599] = true, [57258] = true, [58296] = true,
-	[58312] = true, [58328] = true, [58344] = true, [52739] = true, [58298] = true,
-	[57274] = true, [57265] = true, [57251] = true, [59478] = true, [56971] = true,
-	[56987] = true, [57003] = true, [57019] = true, [57035] = true, [57259] = true,
-	[57263] = true, [57271] = true, [64253] = true, [57115] = true, [64285] = true,
-	[57242] = true, [57163] = true, [57120] = true, [57706] = true, [57211] = true,
-	[57227] = true, [50600] = true, [50616] = true, [58297] = true, [58313] = true,
-	[58329] = true, [58345] = true, [50602] = true, [57248] = true, [59559] = true,
-	[57157] = true, [57257] = true, [64309] = true, [64317] = true, [56972] = true,
-	[56988] = true, [57004] = true, [57020] = true, [57036] = true, [62162] = true,
-	[57030] = true, [64254] = true, [57116] = true, [57132] = true, [64302] = true,
-	[64318] = true, [64270] = true, [57707] = true, [57212] = true, [57228] = true,
-	[50601] = true, [57260] = true, [57276] = true, [58314] = true, [58330] = true,
-	[58346] = true, [45382] = true, [57267] = true, [57275] = true, [64312] = true,
-	[64279] = true, [50598] = true, [59480] = true, [59496] = true, [56973] = true,
-	[56989] = true, [57005] = true, [57021] = true, [50619] = true, [50618] = true,
-	[65245] = true, [50617] = true, [64255] = true, [64271] = true, [64287] = true,
-	[64303] = true, [57165] = true, [57181] = true, [57708] = true, [57213] = true,
-	[57229] = true, [57245] = true, [57261] = true, [57277] = true, [57253] = true,
-	[71015] = true,	[71101] = true,	[71102] = true,
-	---------------------------------------------------------------------------------------
-
-	---------------------------------------------------------------------------------------
-	----ENCHANTING
-	---------------------------------------------------------------------------------------
-	[46578] = true, [25125] = true, [13612] = true, [13620] = true, [13628] = true,
-	[13640] = true, [13644] = true, [13648] = true, [59625] = true, [13700] = true,
-	[17181] = true, [27920] = true, [27960] = true, [28016] = true, [45765] = true,
-	[14810] = true, [63746] = true, [13836] = true, [20008] = true, [20032] = true,
-	[13868] = true, [13421] = true, [13948] = true, [27905] = true, [27945] = true,
-	[13501] = true, [7786] = true, [7788] = true, [13529] = true, [32664] = true,
-	[44506] = true, [25127] = true, [20025] = true, [20033] = true, [13617] = true,
-	[64579] = true, [60619] = true, [13657] = true, [13693] = true, [27914] = true,
-	[44555] = true, [27954] = true, [27962] = true, [14807] = true, [32665] = true,
-	[7421] = true, [13817] = true, [25072] = true, [44492] = true, [44524] = true,
-	[7443] = true, [44556] = true, [25128] = true, [20026] = true, [7457] = true,
-	[13378] = true, [34001] = true, [13917] = true, [13933] = true, [13937] = true,
-	[13941] = true, [44621] = true, [28003] = true, [28027] = true, [13522] = true,
-	[13538] = true, [25081] = true, [44494] = true, [20011] = true, [25129] = true,
-	[44590] = true, [47672] = true, [20051] = true, [13622] = true, [13626] = true,
-	[69412] = true, [60623] = true, [44383] = true, [13698] = true, [13702] = true,
-	[23804] = true, [44623] = true, [28004] = true, [28028] = true, [14293] = true,
-	[32667] = true, [13822] = true, [25082] = true, [44576] = true, [20028] = true,
-	[20036] = true, [13890] = true, [13898] = true, [60609] = true, [59619] = true,
-	[47898] = true, [7745] = true, [27957] = true, [13503] = true, [34006] = true,
-	[7793] = true, [7795] = true, [59636] = true, [25083] = true, [20029] = true,
-	[13631] = true, [13655] = true, [7861] = true, [7863] = true, [62256] = true,
-	[13695] = true, [13858] = true, [44483] = true, [27968] = true, [7857] = true,
-	[27967] = true, [42615] = true, [27958] = true, [42613] = true, [25084] = true,
-	[20017] = true, [33992] = true, [34008] = true, [13663] = true, [60653] = true,
-	[44528] = true, [14809] = true, [27961] = true, [47901] = true, [7418] = true,
-	[7420] = true, [44488] = true, [7426] = true, [44616] = true, [13841] = true,
-	[44596] = true, [17180] = true, [7454] = true, [33993] = true, [34009] = true,
-	[27950] = true, [20031] = true, [13915] = true, [47900] = true, [13943] = true,
-	[13947] = true, [13945] = true, [13464] = true, [27927] = true, [7771] = true,
-	[20014] = true, [20030] = true, [27947] = true, [33994] = true, [28022] = true,
-	[60692] = true, [25130] = true, [34005] = true, [13794] = true, [7748] = true,
-	[44588] = true, [15596] = true, [7776] = true, [44584] = true, [13607] = true,
-	[13653] = true, [20020] = true,  [70524] = true, [71692] = true,
-	---------------------------------------------------------------------------------------
-
-	---------------------------------------------------------------------------------------
-	---TAILORING
-	---------------------------------------------------------------------------------------
-	[12055] = true, [12059] = true, [12071] = true, [46131] = true, [23664] = true,
-	[31433] = true, [31441] = true, [7624] = true, [26403] = true, [24902] = true,
-	[22866] = true, [56001] = true, [18411] = true, [18419] = true, [18451] = true,
-	[28208] = true, [6686] = true, [8766] = true, [23665] = true, [8786] = true,
-	[26747] = true, [56002] = true, [26763] = true, [26779] = true, [31434] = true,
-	[31450] = true, [60969] = true, [28480] = true, [22867] = true, [56003] = true,
-	[18404] = true, [18412] = true, [18420] = true, [12044] = true, [63924] = true,
-	[12056] = true, [12064] = true, [12080] = true, [12084] = true, [23666] = true,
-	[56004] = true, [26780] = true, [31459] = true, [7892] = true, [60971] = true,
-	[28481] = true, [22868] = true, [20848] = true, [56005] = true, [18405] = true,
-	[19435] = true, [26086] = true, [18437] = true, [18453] = true, [27659] = true,
-	[28210] = true, [40021] = true, [23667] = true, [26773] = true, [26781] = true,
-	[26759] = true, [8774] = true, [31460] = true, [24903] = true, [3755] = true,
-	[37882] = true, [3757] = true, [3758] = true, [50194] = true, [18446] = true,
-	[6692] = true, [28482] = true, [22869] = true, [18439] = true, [20849] = true,
-	[18440] = true, [2389] = true, [56007] = true, [18455] = true, [6521] = true,
-	[18445] = true, [18406] = true, [18414] = true, [18422] = true, [12045] = true,
-	[36318] = true, [18454] = true, [27660] = true, [24091] = true, [12065] = true,
-	[12069] = true, [12077] = true, [12081] = true, [12085] = true, [27724] = true,
-	[12093] = true, [40060] = true, [26087] = true, [26749] = true, [31373] = true,
-	[26750] = true, [26782] = true, [28205] = true, [28209] = true, [36686] = true,
-	[3813] = true, [2394] = true, [7629] = true, [18438] = true, [7633] = true,
-	[40023] = true, [49677] = true, [26407] = true, [18452] = true, [7643] = true,
-	[22870] = true, [26755] = true, [22902] = true, [3869] = true, [55993] = true,
-	[8789] = true, [3839] = true, [3841] = true, [3844] = true, [18407] = true,
-	[18415] = true, [3847] = true, [3848] = true, [3851] = true, [3852] = true,
-	[24092] = true, [3854] = true, [3856] = true, [3857] = true, [8760] = true,
-	[27725] = true, [8776] = true, [8780] = true, [8784] = true, [3865] = true,
-	[55994] = true, [3868] = true, [26783] = true, [3871] = true, [3872] = true,
-	[3873] = true, [31438] = true, [22759] = true, [12091] = true, [8804] = true,
-	[8772] = true, [18560] = true, [18447] = true, [44950] = true, [60993] = true,
-	[55899] = true, [55898] = true, [55995] = true, [2385] = true, [21945] = true,
-	[6688] = true, [12066] = true, [18416] = true, [8465] = true, [12046] = true,
-	[18448] = true, [3915] = true, [24093] = true, [8489] = true, [2386] = true,
-	[12078] = true, [12082] = true, [60994] = true, [55900] = true, [2392] = true,
-	[2393] = true, [23662] = true, [2396] = true, [55996] = true, [2399] = true,
-	[26784] = true, [2402] = true, [2403] = true, [2406] = true, [31431] = true,
-	[3864] = true, [8782] = true, [37884] = true, [37883] = true, [26751] = true,
-	[50647] = true, [8802] = true, [8467] = true, [7893] = true, [40020] = true,
-	[41208] = true, [22813] = true, [41207] = true, [37873] = true, [2387] = true,
-	[55997] = true, [26085] = true, [8799] = true, [27658] = true, [8483] = true,
-	[3914] = true, [18401] = true, [56006] = true, [18441] = true, [18449] = true,
-	[28207] = true, [55769] = true, [18413] = true, [18421] = true, [46129] = true,
-	[2963] = true, [2964] = true, [12061] = true, [12086] = true, [23663] = true,
-	[26745] = true, [55998] = true, [3863] = true, [8764] = true, [31440] = true,
-	[31448] = true, [12089] = true, [6695] = true, [40024] = true, [60990] = true,
-	[50644] = true, [8793] = true, [46130] = true, [24901] = true, [3870] = true,
-	[31437] = true, [44958] = true, [55999] = true, [3845] = true, [6693] = true,
-	[3866] = true, [18456] = true, [18410] = true, [18418] = true, [2397] = true,
-	[18434] = true, [18450] = true,
-	---------------------------------------------------------------------------------------
-
-	---------------------------------------------------------------------------------------
-	----LEATHERWORKING
-	---------------------------------------------------------------------------------------
-	[9198] = true, [23704] = true, [60996] = true, [35549] = true, [22921] = true,
-	[50958] = true, [10509] = true, [10525] = true, [19053] = true, [19085] = true,
-	[19101] = true, [2149] = true, [36349] = true, [2153] = true, [60997] = true,
-	[2159] = true, [2163] = true, [2165] = true, [35582] = true, [50959] = true,
-	[46132] = true, [23705] = true, [60998] = true, [22922] = true, [46133] = true,
-	[24121] = true, [19054] = true, [19070] = true, [19086] = true, [19102] = true,
-	[32465] = true, [32481] = true, [22331] = true, [35520] = true, [35584] = true,
-	[9207] = true, [6661] = true, [46134] = true, [23706] = true, [61000] = true,
-	[35521] = true, [35585] = true, [50962] = true, [10518] = true, [39997] = true,
-	[24122] = true, [19055] = true, [19087] = true, [19103] = true, [32466] = true,
-	[32482] = true, [36353] = true, [35522] = true, [35554] = true, [50963] = true,
-	[44953] = true, [46136] = true, [23707] = true, [61002] = true, [35523] = true,
-	[35555] = true, [35587] = true, [50964] = true, [46137] = true, [24123] = true,
-	[19072] = true, [19104] = true, [9064] = true, [9072] = true, [69386] = true,
-	[32499] = true, [36355] = true, [7133] = true, [35524] = true, [35588] = true,
-	[7153] = true, [9208] = true, [46138] = true, [23708] = true, [69388] = true,
-	[35525] = true, [35557] = true, [10487] = true, [10511] = true, [46139] = true,
-	[24124] = true, [19073] = true, [19089] = true, [32468] = true, [32500] = true,
-	[10647] = true, [28472] = true, [35526] = true, [35558] = true, [45117] = true,
-	[60622] = true, [23709] = true, [35527] = true, [3774] = true, [3778] = true,
-	[3780] = true, [40003] = true, [24125] = true, [19058] = true, [19074] = true,
-	[32485] = true, [32501] = true, [36359] = true, [3816] = true, [3818] = true,
-	[28473] = true, [35528] = true, [35560] = true, [9193] = true, [40004] = true,
-	[23710] = true, [8322] = true, [35529] = true, [35561] = true, [50970] = true,
-	[2881] = true, [10520] = true, [40005] = true, [10544] = true, [10552] = true,
-	[10560] = true, [19091] = true, [19107] = true, [32454] = true, [32502] = true,
-	[28474] = true, [35530] = true, [50971] = true, [62448] = true, [7953] = true,
-	[41157] = true, [36074] = true, [24846] = true, [35531] = true, [22928] = true,
-	[28219] = true, [41158] = true, [36075] = true, [32487] = true, [32503] = true,
-	[7126] = true, [9146] = true, [35532] = true, [35564] = true, [9194] = true,
-	[9202] = true, [24655] = true, [36076] = true, [24847] = true, [35533] = true,
-	[5244] = true, [10529] = true, [28220] = true, [19093] = true, [32456] = true,
-	[52733] = true, [2158] = true, [2160] = true, [2162] = true, [2166] = true,
-	[24848] = true, [35535] = true, [35567] = true, [28221] = true, [19094] = true,
-	[44359] = true, [57690] = true, [32457] = true, [32473] = true, [32489] = true,
-	[9147] = true, [35536] = true, [35568] = true, [9195] = true, [41163] = true,
-	[6703] = true, [24849] = true, [20853] = true, [10482] = true, [10490] = true,
-	[28222] = true, [10546] = true, [10554] = true, [41164] = true, [10570] = true,
-	[19095] = true, [57692] = true, [32458] = true, [10650] = true, [35538] = true,
-	[42731] = true, [24850] = true, [20854] = true, [44970] = true, [28223] = true,
-	[19048] = true, [19064] = true, [19080] = true, [57694] = true, [9148] = true,
-	[35540] = true, [35572] = true, [24851] = true, [20855] = true, [45100] = true,
-	[10531] = true, [28224] = true, [57696] = true, [10619] = true, [19081] = true,
-	[22727] = true, [35539] = true, [19079] = true, [10566] = true, [19065] = true,
-	[10574] = true, [19097] = true, [60647] = true, [3753] = true, [9065] = true,
-	[44343] = true, [3763] = true, [3767] = true, [3773] = true, [3775] = true,
-	[3777] = true, [3779] = true, [32455] = true, [24940] = true, [19050] = true,
-	[19082] = true, [23190] = true, [32461] = true, [60999] = true, [3817] = true,
-	[44344] = true, [9149] = true, [35544] = true, [9197] = true, [19077] = true,
-	[9060] = true, [19076] = true, [35573] = true, [40001] = true, [19066] = true,
-	[19090] = true, [19098] = true, [22711] = true, [57699] = true, [9059] = true,
-	[32480] = true, [64661] = true, [10562] = true, [40002] = true, [50936] = true,
-	[6705] = true, [9058] = true, [24703] = true, [22923] = true, [60645] = true,
-	[35577] = true, [2152] = true, [10556] = true, [10572] = true, [44770] = true,
-	[36077] = true, [19059] = true, [19075] = true, [35580] = true, [20648] = true,
-	[2169] = true, [60643] = true, [19088] = true, [6702] = true, [6704] = true,
-	[35543] = true, [7149] = true, [36078] = true, [36079] = true, [23703] = true,
-	[35534] = true, [57701] = true, [46135] = true, [19047] = true, [20649] = true,
-	[40006] = true, [3765] = true, [41156] = true, [3771] = true, [50956] = true,
-	[19061] = true, [20650] = true, [32467] = true, [35537] = true, [22926] = true,
-	[4096] = true, [19062] = true, [44768] = true, [35576] = true, [19063] = true,
-	[9062] = true, [9070] = true, [32495] = true,
-	---------------------------------------------------------------------------------------
-
-	---------------------------------------------------------------------------------------
-	-----ALCHEMY
-	---------------------------------------------------------------------------------------
-	[53898] = true, [28579] = true, [17566] = true, [53771] = true, [7256] = true,
-	[53899] = true, [11452] = true, [11460] = true, [11468] = true, [3170] = true,
-	[3172] = true, [3174] = true, [3176] = true, [53836] = true, [53900] = true,
-	[28564] = true, [28580] = true, [54220] = true, [17551] = true, [53773] = true,
-	[53837] = true, [62213] = true, [54221] = true, [53774] = true, [53838] = true,
-	[6617] = true, [53902] = true, [28581] = true, [2331] = true, [2335] = true,
-	[2337] = true, [53775] = true, [53839] = true, [11453] = true, [7836] = true,
-	[24266] = true, [41500] = true, [53904] = true, [53936] = true, [28566] = true,
-	[28582] = true, [3452] = true, [3454] = true, [33732] = true, [17553] = true,
-	[22732] = true, [53777] = true, [53905] = true, [53937] = true, [33733] = true,
-	[62409] = true, [25146] = true, [41502] = true, [53938] = true, [28551] = true,
-	[28567] = true, [28583] = true, [62410] = true, [7181] = true, [17570] = true,
-	[17634] = true, [53779] = true, [7257] = true, [53939] = true, [11478] = true,
-	[17187] = true, [53812] = true, [28552] = true, [28568] = true, [28584] = true,
-	[60366] = true, [57425] = true, [17635] = true, [53781] = true, [60367] = true,
-	[4508] = true, [53782] = true, [24365] = true, [6618] = true, [53942] = true,
-	[28569] = true, [28585] = true, [29688] = true, [57427] = true, [17556] = true,
-	[17572] = true, [17636] = true, [53783] = true, [11479] = true, [7837] = true,
-	[7841] = true, [53784] = true, [24366] = true, [53848] = true, [28554] = true,
-	[28570] = true, [28586] = true, [58868] = true, [33741] = true, [24367] = true,
-	[28555] = true, [28571] = true, [17574] = true, [17638] = true, [7258] = true,
-	[11448] = true, [11456] = true, [11464] = true, [11480] = true, [3171] = true,
-	[3173] = true, [3175] = true, [24368] = true, [28572] = true, [28588] = true,
-	[45061] = true, [66658] = true, [17559] = true, [17575] = true, [66659] = true,
-	[66660] = true, [63732] = true, [28573] = true, [66662] = true, [17560] = true,
-	[2330] = true, [2332] = true, [2334] = true, [66663] = true, [11457] = true,
-	[11465] = true, [11473] = true, [66664] = true, [3449] = true, [3451] = true,
-	[3453] = true, [17561] = true, [17577] = true, [28543] = true, [28575] = true,
-	[7179] = true, [17562] = true, [17578] = true, [7255] = true, [7259] = true,
-	[11458] = true, [11466] = true, [38962] = true, [53776] = true, [12609] = true,
-	[53780] = true, [60893] = true, [58871] = true, [3448] = true, [3450] = true,
-	[3447] = true, [4942] = true, [28576] = true, [15833] = true, [17576] = true,
-	[41503] = true, [60350] = true, [41501] = true, [17563] = true, [42736] = true,
-	[54213] = true, [41458] = true, [6624] = true, [39636] = true, [28577] = true,
-	[32765] = true, [38070] = true, [17564] = true, [17580] = true, [53895] = true,
-	[11451] = true, [39637] = true, [28546] = true, [28562] = true, [28578] = true,
-	[60354] = true, [32766] = true, [17565] = true, [22808] = true, [39639] = true,
-	[60355] = true, [56519] = true,
-	---------------------------------------------------------------------------------------
-
-	---------------------------------------------------------------------------------------
-	----ENGINEERING
-	---------------------------------------------------------------------------------------
-	[23081] = true, [12586] = true, [12594] = true, [12622] = true, [30347] = true,
-	[44391] = true, [30547] = true, [56464] = true, [12754] = true, [12758] = true,
-	[23489] = true, [23082] = true, [8243] = true, [9269] = true, [30316] = true,
-	[30332] = true, [12906] = true, [8339] = true, [26420] = true, [56514] = true,
-	[39971] = true, [12599] = true, [12603] = true, [12607] = true, [43676] = true,
-	[12619] = true, [54998] = true, [30349] = true, [56468] = true, [12755] = true,
-	[12759] = true, [63750] = true, [39973] = true, [56465] = true, [56469] = true,
-	[30318] = true, [30334] = true, [55016] = true, [12903] = true, [54793] = true,
-	[19795] = true, [8895] = true, [19819] = true, [30558] = true, [39895] = true,
-	[23069] = true, [23077] = true, [12596] = true, [30303] = true, [56471] = true,
-	[12624] = true, [19796] = true, [56472] = true, [12760] = true, [63770] = true,
-	[23070] = true, [23078] = true, [61471] = true, [30304] = true, [30312] = true,
-	[12908] = true, [12597] = true, [3930] = true, [24356] = true, [67839] = true,
-	[67326] = true, [56474] = true, [30560] = true, [30568] = true, [30314] = true,
-	[3929] = true, [56475] = true, [19830] = true, [3946] = true, [54736] = true,
-	[30563] = true, [24357] = true, [30337] = true, [12591] = true, [19814] = true,
-	[60866] = true, [12716] = true, [23071] = true, [23079] = true, [12585] = true,
-	[3923] = true, [3925] = true, [30305] = true, [12621] = true, [30329] = true,
-	[3931] = true, [3932] = true, [3933] = true, [3936] = true, [3937] = true,
-	[3938] = true, [3939] = true, [3941] = true, [56473] = true, [3944] = true,
-	[3945] = true, [3947] = true, [54999] = true, [3949] = true, [3950] = true,
-	[26417] = true, [12717] = true, [3954] = true, [3955] = true, [3957] = true,
-	[3958] = true, [3961] = true, [3962] = true, [3963] = true, [3965] = true,
-	[3966] = true, [3967] = true, [3968] = true, [3969] = true, [3971] = true,
-	[3972] = true, [3973] = true, [7430] = true, [3977] = true, [3978] = true,
-	[3979] = true, [19790] = true, [23080] = true, [12620] = true, [30309] = true,
-	[30346] = true, [12905] = true, [41307] = true, [8334] = true, [56460] = true,
-	[56476] = true, [12718] = true, [26418] = true, [19791] = true, [3960] = true,
-	[19815] = true, [13240] = true, [19831] = true, [30570] = true, [19799] = true,
-	[30306] = true, [30310] = true, [26011] = true, [36954] = true, [3919] = true,
-	[3920] = true, [19800] = true, [12617] = true, [30311] = true, [56463] = true,
-	[72952] = true, [72953] = true,
-	---------------------------------------------------------------------------------------
-}
-
-local function ItemLinkToID(link)
-	if not link then
-		return
-	end
-	local _, _, id_num = string.find(link,"item:(%d+):")
-
-	if id_num then
-		return tonumber(id_num)
-	end
-end
-
-
-local function LoadRecipe()
-	local recipe_list = private.recipe_list
-
-	if addon.db.profile.autoloaddb then
-		for idx, prof in pairs(PROFESSIONS) do
-			addon:InitializeRecipe(prof)
-		end
-	end
-	return recipe_list
-
-end
-
--------------------------------------------------------------------------------
--- Creates a reverse lookup for a recipe list
--------------------------------------------------------------------------------
-local GetReverseLookup
-do
-	local reverse_lookup = {}
-
-	function GetReverseLookup(recipe_list)
-		if not recipe_list then
-			addon:Print(L["DATAMINER_NODB_ERROR"])
-			return
-		end
-		twipe(reverse_lookup)
-
-		for i in pairs(recipe_list) do
-			--if t[recipe_list[i].name] then addon:Print("Dupe: " .. i) end
-			reverse_lookup[recipe_list[i].name] = i
-		end
-		return reverse_lookup
-	end
-
-end
-
--------------------------------------------------------------------------------
--- Tooltip for data-mining.
--------------------------------------------------------------------------------
-local ARLDatamineTT = CreateFrame("GameTooltip", "ARLDatamineTT", UIParent, "GameTooltipTemplate")
-
-do
-	-- Tables used in all the Scan functions within this do block. -Torhal
-	local info, output = {}, {}
-
-	--- Function to compare the skill levels of a trainers recipes with those in the ARL database.
-	-- @name AckisRecipeList:ScanSkillLevelData
-	-- @param autoscan True when autoscan is enabled in preferences, it will surpress output letting you know when a scan has occured.
-	-- @return Does a comparison of the information in your internal ARL database, and those items which are available on the trainer.  Compares the skill levels between the two.
-	function addon:ScanSkillLevelData(autoscan)
-		if not IsTradeskillTrainer() then
-			if not autoscan then
-				self:Print(L["DATAMINER_SKILLLEVEL_ERROR"])
-			end
-			return
-		end
-		local recipe_list = LoadRecipe()	-- Get internal database
-
-		if not recipe_list then
-			self:Print(L["DATAMINER_NODB_ERROR"])
-			return
-		end
-		-- Get the initial trainer filters
-		local avail = GetTrainerServiceTypeFilter("available")
-		local unavail = GetTrainerServiceTypeFilter("unavailable")
-		local used = GetTrainerServiceTypeFilter("used")
-
-		-- Clear the trainer filters
-		SetTrainerServiceTypeFilter("available", 1)
-		SetTrainerServiceTypeFilter("unavailable", 1)
-		SetTrainerServiceTypeFilter("used", 1)
-
-		twipe(info)
-
-		-- Get the skill levels from the trainer
-		for i = 1, GetNumTrainerServices(), 1 do
-			local name = GetTrainerServiceInfo(i)
-			local _, skilllevel = GetTrainerServiceSkillReq(i)
-
-			if not skilllevel then
-				skilllevel = 0
-			end
-			info[name] = skilllevel
-		end
-		local found = false
-
-		twipe(output)
-
-		for i in pairs(recipe_list) do
-			local i_name = recipe_list[i].name
-
-			if info[i_name] and info[i_name] ~= recipe_list[i].skill_level then
-				found = true
-				tinsert(output, L["DATAMINER_SKILLELVEL"]:format(i_name, recipe_list[i].skill_level, info[i_name]))
-			end
-		end
-		tinsert(output, "Trainer Skill Level Scan Complete.")
-
-		if found then
-			self:DisplayTextDump(nil, nil, tconcat(output, "\n"))
-		end
-		-- Reset the filters to what they were before
-		SetTrainerServiceTypeFilter("available", avail or 0)
-		SetTrainerServiceTypeFilter("unavailable", unavail or 0)
-		SetTrainerServiceTypeFilter("used", used or 0)
-	end
-
-	local teach, noteach = {}, {}
-
-	--- Function to compare which recipes are available from a trainer and compare with the internal ARL database.
-	-- @name AckisRecipeList:ScanTrainerData
-	-- @param autoscan True when autoscan is enabled in preferences, it will surpress output letting you know when a scan has occured.
-	-- @return Does a comparison of the information in your internal ARL database, and those items which are available on the trainer.
-	-- Compares the acquire information of the ARL database with what is available on the trainer.
-	function addon:ScanTrainerData(autoscan)
-		if not (UnitExists("target") and (not UnitIsPlayer("target")) and (not UnitIsEnemy("player", "target"))) then	-- Make sure the target exists and is a NPC
-			if not autoscan then
-				self:Print(L["DATAMINER_TRAINER_NOTTARGETTED"])
-			end
-			return
-		end
-		local targetname = UnitName("target")	-- Get its name
-		local targetID = tonumber(string.sub(UnitGUID("target"), -12, -7), 16)	-- Get the NPC ID
-
-		if not IsTradeskillTrainer() then		-- Are we at a trade skill trainer?
-			if not autoscan then
-				self:Print(L["DATAMINER_SKILLLEVEL_ERROR"])
-			end
-			return
-		end
-		local recipe_list = LoadRecipe()	-- Get internal database
-
-		if not recipe_list then
-			self:Print(L["DATAMINER_NODB_ERROR"])
-			return
-		end
-
-		-- Get the initial trainer filters
-		local avail = GetTrainerServiceTypeFilter("available")
-		local unavail = GetTrainerServiceTypeFilter("unavailable")
-		local used = GetTrainerServiceTypeFilter("used")
-
-		-- Clear the trainer filters
-		SetTrainerServiceTypeFilter("available", 1)
-		SetTrainerServiceTypeFilter("unavailable", 1)
-		SetTrainerServiceTypeFilter("used", 1)
-
-		if GetNumTrainerServices() == 0 then
-			self:Print("Warning: Trainer is bugged, reporting 0 trainer items.")
-		end
-		twipe(info)
-
-		-- Get all the names of recipes from the trainer
-		for i = 1, GetNumTrainerServices(), 1 do
-			local name = GetTrainerServiceInfo(i)
-			info[name] = true
-		end
-		twipe(teach)
-		twipe(noteach)
-		twipe(output)
-
-		-- Dump out trainer info
-		tinsert(output, L["DATAMINER_TRAINER_INFO"]:format(targetname, targetID))
-
-		local teachflag = false
-		local noteachflag = false
-
-		for i in pairs(recipe_list) do
-			local recipe = recipe_list[i]
-			local i_name = recipe.name
-			local acquire = recipe["acquire_data"]
-
-			local train_data = acquire[A.TRAINER]
-
-			if info[i_name] then
-				local found = false
-
-				if train_data then
-					for id_num in pairs(train_data) do
-						if id_num == targetID then
-							found = true
-							break
-						end
-					end
-				end
-
-				if not found then
-					tinsert(teach, i)
-					teachflag = true
-
-					if not recipe:IsFlagged("common1", "TRAINER") then
-						tinsert(output, ": Trainer flag needs to be set.")
-					end
-				end
-				-- Trainer does not teach this recipe
-			else
-				local found = false
-
-				if train_data then
-					for id_num in pairs(train_data) do
-						if id_num == targetID then
-							found = true
-							break
-						end
-					end
-				end
-
-				if found then
-					noteachflag = true
-					tinsert(noteach, i)
-				end
-			end
-		end
-
-		if teachflag then
-			tinsert(output, "Missing entries (need to be added):")
-			tsort(teach)
-
-			for i in ipairs(teach) do
-				tinsert(output, L["DATAMINER_TRAINER_TEACH"]:format(teach[i], recipe_list[teach[i]].name))
-			end
-		end
-
-		if noteachflag then
-			tinsert(output, "Extra entries (need to be removed):")
-			tsort(noteach)
-
-			for i in ipairs(noteach) do
-				tinsert(output, L["DATAMINER_TRAINER_NOTTEACH"]:format(noteach[i], recipe_list[noteach[i]].name))
-			end
-		end
-		tinsert(output, "Trainer Acquire Scan Complete.")
-		tinsert(output, "If you're doing an engineering scan, there may be some goggles listed as extra. These goggles ONLY show up for those classes who can make them, so they may be false positives.")
-
-		if teachflag or noteachflag then
-			self:DisplayTextDump(nil, nil, tconcat(output, "\n"))
-		end
-		-- Reset the filters to what they were before
-		SetTrainerServiceTypeFilter("available", avail or 0)
-		SetTrainerServiceTypeFilter("unavailable", unavail or 0)
-		SetTrainerServiceTypeFilter("used", used or 0)
-	end
-end	-- do
-
---- Generates tradeskill links for all professions so you can scan them for completeness.
--- @name AckisRecipeList:GenerateLinks
--- @return Generates tradeskill links with all recipes.  Used for testing to see if a recipe is missing from the database or not.
-function addon:GenerateLinks()
-	-- This code adopted from Gnomish Yellow Pages with permission
-
-	local guid = UnitGUID("player")
-	local playerGUID = string.gsub(guid, "0x0+", "")
-
-	-- Listing of all tradeskill professions
-	local tradelist = {51304, 51300, 51313, 51306, 45363, 51311, 51302, 51309, 51296, 45542}
-
---[[
-	local encodingLength = floor((#recipeList+5) / 6)
-
-	local encodedString = string.rep("/", encodingLength)
-]]--
-	local bitmap = {}
-	bitmap[45542] = "8bffAA" -- First Aid  100%   17/17 recipes
-	bitmap[51296] = "2/6///7///9f///7//////////g///B" -- Cooking  98.2%  166/169 recipes
-	--bitmap[51306] = "4/////////////3nFA+///9+/P7//f//n//9dgdJgHA87/3f/TolD" -- Engineering (53)
-	bitmap[51306] = "4/////////////3nFA+///9+/P7//f//n//9dgdJgHA87/3f/Tol3B" -- Engineering
-	bitmap[51302] = "e+//ff////d//u//v//n+vv7/+ujr7/9////bg/+////f344//dA4I8j/X//B4/vu5/////////////////nvA8/M8/D" -- Leatherworking  85.4%   451/528 recipes
-	bitmap[51304] = "2//v//////f////3//v///////5//////////9/////v" -- Alchemy 100%   251/251 recipes
-	bitmap[51300] = "2//////f7fM//f/f53/+//7///ze8c6q/f9///P2/////m4BAA2XIG+dFA8//PC////4//z//////////Pwvy//H" -- Blacksmithing 82.9%   413/498 recipes
-	bitmap[51309] = "4//+/+5a79rv7/vx2/65t3nZ3f33N33LJq/z54Hx//mK7w1GQgFA+AQ4/////7//7//9//2wD" -- Tailoring   74.3%   303/408 recipes
-	bitmap[51311] = "8//3////fzj//u//////v/7///9///33////////Pw////////////////////////3///////////////////////////D" -- Jewelcrafting  97.5%   540/554 recipes
-	bitmap[45363] = "g////7////3///////////////////////////////////////////////////fHM+3dqhGYa0f" --Inscription 92.5%    407/440 recipes
-	bitmap[51313] = "4//////////7///////////w//+//9/n7///////3f//////ZsD" -- Enchanting   94.3%    279/296 recipes
-
-	for i in pairs(tradelist) do
-
-		local tradeName = GetSpellInfo(tradelist[i])
-		local tradelink = {}
-		tradelink[1] = "|cffffd000|Htrade:"
-		tradelink[2] = tradelist[i]
-		tradelink[3] = ":450:450:"
-		tradelink[4] = playerGUID
-		tradelink[5] = ":"
-		tradelink[6] = bitmap[tradelist[i]]
-		tradelink[7] = "|h["
-		tradelink[8] = tradeName
-		tradelink[9] = "]|h|r"
-
-		if (bitmap[tradelist[i]]) then
-			self:Print(tconcat(tradelink, ""))
-		else
-			self:Print("There currently is not a generated tradeskill link for: " .. tradeName)
-		end
-		-- /script DEFAULT_CHAT_FRAME:AddMessage(string.gsub(GetTradeSkillListLink(), "\124", "\124\124"))
-	end
-
-end
-
--------------------------------------------------------------------------------
---- Scans the items in the specified profession
--------------------------------------------------------------------------------
-do
-	local ORDERED_PROFESSIONS = private.ordered_professions
-
-	local recipe_list = {}
-	local output = {}
-
-	local function Sort_AscID(a, b)
-		local reca, recb = private.recipe_list[a], private.recipe_list[b]
-
-		return reca.spell_id < recb.spell_id
-	end
-
-	local function SortRecipeList()
-		local sorted_recipes = addon.sorted_recipes
-		twipe(sorted_recipes)
-
-		for n, v in pairs(recipe_list) do
-			tinsert(sorted_recipes, n)
-		end
-		table.sort(sorted_recipes, Sort_AscID)
-	end
-
-	local function ProfessionScan(prof_name)
-		local master_list = LoadRecipe()
-
-		if not master_list then
-			addon:Print(L["DATAMINER_NODB_ERROR"])
-			return
-		end
-		twipe(recipe_list)
-
-		if prof_name == private.professions["Smelting"]:lower() then
-			prof_name = private.mining_name:lower()
-		end
-
-		for i in pairs(master_list) do
-			local prof = string.lower(master_list[i].profession)
-
-			if prof and prof == prof_name then
-				recipe_list[i] = master_list[i]
-			end
-		end
-		SortRecipeList()
-		twipe(output)
-
-		-- Parse the entire recipe database
-		for index, id in ipairs(addon.sorted_recipes) do
-			local ttscantext = addon:TooltipScanRecipe(id, false, true)
-
-			if ttscantext and ttscantext ~= "" then
-				tinsert(output, ttscantext)
-			end
-		end
-
-		if #output == 0 then
-			addon:Debug("ProfessionScan(): output is empty.")
-		end
-		addon:DisplayTextDump(nil, nil, tconcat(output, "\n"))
-		ARLDatamineTT:Hide()
-	end
-
-	--- Parses all recipes for a specified profession, scanning their tool tips.
-	-- @name AckisRecipeList:ScanProfession
-	-- @usage AckisRecipeList:ScanProfession("first aid")
-	-- @param prof_name The profession name or the spell ID of it, which you wish to scan.
-	-- @return Recipes in the given profession have their tooltips scanned.
-	function addon:ScanProfession(prof_name)
-		if type(prof_name) == "number" then
-			prof_name = GetSpellInfo(prof_name)
-		end
-
-		local found = false
-		prof_name = string.lower(prof_name)
-
-		local scan_all = prof_name == "all"
-
-		if not scan_all then
-			for idx, name in ipairs(ORDERED_PROFESSIONS) do
-				if prof_name == name:lower() then
-					found = true
-					break
-				end
-			end
-
-			if not found then
-				self:Print(L["DATAMINER_NODB_ERROR"])
-				return
-			end
-
-			ProfessionScan(prof_name)
-		else
-			for idx, name in ipairs(ORDERED_PROFESSIONS) do
-				ProfessionScan(name:lower())
-			end
-		end
-	end
-
-	local FILTER_STRINGS = private.filter_strings
-	local ACQUIRE_STRINGS = private.acquire_strings
-	local REP_LEVELS = private.rep_level_strings
-	local FACTION_NAMES = private.faction_strings
-	local Q = private.item_quality_names
-	local V = private.game_version_names
-
-	local NUM_FILTER_FLAGS = 128
-
-	local FUNCTION_FORMATS = {
-		[A.TRAINER]	= "self:AddRecipeTrainer(%d, %s)",
-		[A.VENDOR]	= "self:AddRecipeVendor(%d, %s)",
-		[A.MOB_DROP]	= "self:AddRecipeMobDrop(%d, %s)",
-		[A.WORLD_DROP]	= "self:AddRecipeWorldDrop(%d, %s)",
-		[A.QUEST]	= "self:AddRecipeQuest(%d, %s)",
-	}
-
-	local function RecipeDump(id, single)
-		local recipe = private.recipe_list[id or 1]
-
-		if single and not recipe then
-			addon:Print("Invalid recipe ID.")
-			return
-		end
-		local flag_string
-		local specialty = not recipe.specialty and "" or (", "..recipe.specialty)
-
-		tinsert(output, string.format("-- %s -- %d", recipe.name, recipe.spell_id))
-		tinsert(output, string.format("AddRecipe(%d, %d, %s, Q.%s, V.%s, %d, %d, %d, %d%s)",
-					      recipe.spell_id, recipe.skill_level, tostring(recipe.item_id), Q[recipe.quality], V[recipe.genesis],
-					      recipe.optimal_level, recipe.medium_level, recipe.easy_level, recipe.trivial_level, specialty))
-
-		for table_index, bits in ipairs(private.bit_flags) do
-			for flag_name, flag in pairs(bits) do
-				local bitfield = recipe.flags[private.flag_members[table_index]]
-
-				if bitfield and bit.band(bitfield, flag) == flag then
-					if not flag_string then
-						flag_string = "F."..FILTER_STRINGS[private.filter_flags[flag_name]]
-					else
-						flag_string = flag_string..", ".."F."..FILTER_STRINGS[private.filter_flags[flag_name]]
-					end
-				end
-			end
-		end
-		tinsert(output, string.format("self:AddRecipeFlags(%d, %s)", recipe.spell_id, flag_string))
-
-		flag_string = nil
-
-		for acquire_type, acquire_info in pairs(recipe.acquire_data) do
-			if acquire_type == A.REPUTATION then
-				for rep_id, rep_info in pairs(acquire_info) do
-					local faction_string = FACTION_NAMES[rep_id]
-
-					if not faction_string then
-						faction_string = rep_id
-						addon:Printf("Recipe %d (%s) - no string for faction %d", recipe.spell_id, recipe.name, rep_id)
-					else
-						faction_string = "FAC."..faction_string
-					end
-
-					for rep_level, level_info in pairs(rep_info) do
-						local rep_string = "REP."..REP_LEVELS[rep_level or 1]
-						local values
-
-						for vendor_id in pairs(level_info) do
-							values = values and (values..", "..vendor_id) or vendor_id
-						end
-						tinsert(output, string.format("self:AddRecipeRepVendor(%d, %s, %s, %s)", recipe.spell_id, faction_string, rep_string, values))
-					end
-				end
-			elseif FUNCTION_FORMATS[acquire_type] then
-				local values
-
-				for id_num in pairs(acquire_info) do
-					local saved_id = (type(id_num) == "string" and ("\""..id_num.."\"") or id_num)
-					values = values and (values..", "..saved_id) or saved_id
-				end
-				tinsert(output, string.format(FUNCTION_FORMATS[acquire_type], recipe.spell_id, values))
-			else
-				for id_num in pairs(acquire_info) do
-					if not flag_string then
-						flag_string = "A."..ACQUIRE_STRINGS[acquire_type]..", "..(type(id_num) == "string" and ("\""..id_num.."\"") or id_num)
-					else
-						flag_string = flag_string..", ".."A."..ACQUIRE_STRINGS[acquire_type]..", "..(type(id_num) == "string" and ("\""..id_num.."\"") or id_num)
-					end
-				end
-			end
-		end
-
-		if flag_string then
-			tinsert(output, string.format("self:AddRecipeAcquire(%d, %s)", recipe.spell_id, flag_string))
-		end
-		tinsert(output, "")
-	end
-
-	local function ProfessionDump(prof_name)
-		local master_list = LoadRecipe()
-
-		if not master_list then
-			addon:Print(L["DATAMINE_NODB_ERROR"])
-			return
-		end
-		twipe(recipe_list)
-
-		if prof_name == private.professions["Smelting"]:lower() then
-			prof_name = private.mining_name:lower()
-		end
-		for i in pairs(master_list) do
-			local prof = string.lower(master_list[i].profession)
-
-			if prof and prof == prof_name then
-				recipe_list[i] = master_list[i]
-			end
-		end
-		SortRecipeList()
-		twipe(output)
-
-		for index, id in ipairs(addon.sorted_recipes) do
-			RecipeDump(id, false)
-		end
-		addon:DisplayTextDump(nil, nil, tconcat(output, "\n"))
-	end
-
-	function addon:DumpRecipe(id_num)
-		twipe(output)
-		RecipeDump(id_num, true)
-		addon:DisplayTextDump(nil, nil, tconcat(output, "\n"))
-	end
-
-	function addon:DumpProfession(prof_name)
-		if type(prof_name) == "number" then
-			prof_name = GetSpellInfo(prof_name)
-		end
-
-		local found = false
-		prof_name = string.lower(prof_name)
-
-		local scan_all = prof_name == "all"
-
-		if not scan_all then
-			for idx, name in ipairs(ORDERED_PROFESSIONS) do
-				if prof_name == name:lower() then
-					found = true
-					break
-				end
-			end
-
-			if not found then
-				self:Print(L["DATAMINER_NODB_ERROR"])
-				return
-			end
-			ProfessionDump(prof_name)
-		else
-			for idx, name in ipairs(ORDERED_PROFESSIONS) do
-				ProfessionDump(name:lower())
-			end
-		end
-	end
-end	-- do
-
-local RECIPE_TYPES = {
-	-- JC
-	["design: "] = true,
-	-- LW or Tailoring
-	["pattern: "] = true,
-	-- Alchemy or Cooking
-	["recipe: "] = true,
-	-- BS
-	["plans: "] = true,
-	-- Enchanting
-	["formula: "] = true,
-	-- Engineering
-	["schematic: "] = true,
-	-- First Aid
-	["manual: "] = true,
-
-	["alchemy: "] = true,
-	["blacksmithing: "] = true,
-	["cooking: "] = true,
-	["enchanting: "] = true,
-	["engineering: "] = true,
-	["first aid: "] = true,
-	["inscription: "] = true,
-	["jewelcrafting: "] = true,
-	["leatherworking: "] = true,
-	["tailoring: "] = true,
-}
-
---- Scans the items on a vendor, determining which recipes are available if any and compares it with the database entries
--- @name AckisRecipeList:ScanVendor
--- @usage AckisRecipeList:ScanVendor()
--- @return Obtains all the vendor information on tradeskill recipes and attempts to compare the current vendor with the internal database
-do
-	local output = {}
-
-	function addon:ScanVendor()
-		if not (UnitExists("target") and (not UnitIsPlayer("target")) and (not UnitIsEnemy("player", "target"))) then	-- Make sure the target exists and is a NPC
-			self:Print(L["DATAMINER_VENDOR_NOTTARGETTED"])
-			return
-		end
-		local recipe_list = LoadRecipe()		-- Get internal database
-
-		if not recipe_list then
-			self:Print(L["DATAMINER_NODB_ERROR"])
-			return
-		end
-		local targetname = UnitName("target")		-- Get its name
-		local targetID = tonumber(string.sub(UnitGUID("target"), -12, -7), 16)		-- Get the NPC ID
-		local added = false
-
-		twipe(output)
-
-		tinsert(output, "Vendor Name: "..targetname.." NPC ID: "..targetID)
-		-- Parse all the items on the merchant
-		for i = 1, GetMerchantNumItems(), 1 do
-			local name, _, _, _, numAvailable = GetMerchantItemInfo(i)
-
-			if name then
-				-- Lets scan recipes only on vendors
-				local matchtext = string.match(name, "%a+: ")
-
-				-- Check to see if we're dealing with a recipe
-				if matchtext and RECIPE_TYPES[string.lower(matchtext)] then
-					local item_link = GetMerchantItemLink(i)
-					local item_id = ItemLinkToID(item_link)
-					local spell_id = RECIPE_TO_SPELL_MAP[item_id]
-
-					if spell_id then
-						local ttscantext = addon:TooltipScanRecipe(spell_id, true, true)
-
-						if ttscantext and ttscantext ~= "" then
-							added = true
-							tinsert(output, ttscantext)
-						end
-
-						-- Check the database to see if the vendor is listed as an acquire method.
-						local acquire = recipe_list[spell_id]["acquire_data"]
-						local vendor_data = acquire[A.VENDOR]
-						local rep_data = acquire[A.REPUTATION]
-						local found = false
-
-						if vendor_data then
-							for id_num in pairs(vendor_data) do
-								if id_num == targetID then
-									found = true
-									break
-								end
-							end
-						elseif rep_data then
-							for id_num in pairs(rep_data) do
-								if id_num == targetID then
-									found = true
-									break
-								end
-							end
-						end
-
-						if not found then
-							added = true
-							tinsert(output, string.format("Vendor ID missing from \"%s\" %d.", recipe_list[spell_id].name, spell_id))
-						end
-					else
-						--@debug@
-						added = true
-						tinsert(output, "Spell ID not found for: " .. name)
-						--@end-debug@
-					end
-				end
-			end
-		end
-
-		if added then
-			self:DisplayTextDump(nil, nil, tconcat(output, "\n"))
-		end
-		ARLDatamineTT:Hide()
-	end
-end	-- do
-
---- Parses all the recipes in the database, and scanning their tooltips.
--- @name AckisRecipeList:TooltipScanDatabase
--- @usage AckisRecipeList:TooltipScanDatabase()
--- @return Entire recipe database has its tooltips scanned.
-do
-	local output = {}
-
-	function addon:TooltipScanDatabase()
-		-- Get internal database
-		local recipe_list = LoadRecipe()
-
-		if (not recipe_list) then
-			self:Print(L["DATAMINER_NODB_ERROR"])
-			return
-		end
-		twipe(output)
-
-		-- Parse the entire recipe database
-		for i in pairs(recipe_list) do
-
-			local ttscantext = addon:TooltipScanRecipe(i, false, true)
-			if (ttscantext) then
-				tinsert(output, ttscantext)
-			end
-		end
-		self:DisplayTextDump(nil, nil, tconcat(output, "\n"))
-	end
-end	-- do
---- Parses a specific recipe in the database, and scanning its tooltip
--- @name AckisRecipeList:TooltipScanRecipe
--- @param spell_id The [[[http://www.wowwiki.com/SpellLink|Spell ID]]] of the recipe being added to the database
--- @param is_vendor Boolean to determine if we're viewing a vendor or not
--- @param is_largescan Boolean to determine if we're doing a large scan
--- @return Recipe has its tooltips scanned
-
-
--- Table to store scanned information. Wiped and re-used every scan.
-local scan_data = {}
-
-do
-	---------------------------------------------------------------------------------------------------------
-	----This table, DO_NOT_SCAN, contains itemid's that will not cache on the servers
-	---------------------------------------------------------------------------------------------------------
-
-	local DO_NOT_SCAN = {
-		-------------------------------------------------------------------------------
-		--Leatherworking
-		-------------------------------------------------------------------------------
-		[35214] = true,	[32434] = true,	[15769] = true,
-		[32431] = true,	[32432] = true,	[35215] = true,	[35521] = true,
-		[35520] = true,	[35524] = true,	[35517] = true,	[35528] = true,
-		[35527] = true,	[35523] = true,	[35549] = true,	[35218] = true,
-		[35217] = true,	[35216] = true,	[35546] = true,	[35541] = true, [15756] = true,
-		[15777] = true,  [32433] = true,  [29729] = true,  [29732] = true,   [32744] = true,
-		[15773] = true,	[30301] = true,	[15745] = true,	[35302] = true,	[15774] = true,
-
-		-------------------------------------------------------------------------------
-		--Tailoring
-		-------------------------------------------------------------------------------
-		[14477] = true, [14485] = true, [30281] = true, [14478] = true, [14500] = true,
-		[32439] = true, [14479] = true, [32447] = true, [14480] = true, [32437] = true,
-		[14495] = true, [14505] = true, [35204] = true,  [35205] = true,   [35206] = true,
-		[14473] = true, [14488] = true,  [14481] = true,
-		[35309] = true,	[30280] = true,	[14492] = true,	[14491] = true,
-
-		-------------------------------------------------------------------------------
-		--Jewelcrafting
-		-------------------------------------------------------------------------------
-		[23130] = true,  [23140] = true, [23137] = true, [23131] = true, [23148] = true,
-		[35538] = true, [35201] = true, [35533] = true, [35200] = true,  [23147] = true,
-		[23135] = true,  [35203] = true, [35198] = true, [23152] = true,  [23151] = true,
-		[23141] = true, [28596] = true,  [28291] = true,	[23153] = true,
-
-		-------------------------------------------------------------------------------
-		--Alchemy
-		-------------------------------------------------------------------------------
-		[22925] = true,  [13480] = true,  [13481] = true,   [13493] = true,	[35295] = true,
-		[44568] = true,
-
-		-------------------------------------------------------------------------------
-		--Cooking
-		-------------------------------------------------------------------------------
-		[39644] = true,
-
-		-------------------------------------------------------------------------------
-		--Blacksmithing
-		-------------------------------------------------------------------------------
-		[32441] = true,   [32443] = true,  [12687] = true, [12714] = true,  [12688 ] = true,
-		[35211] = true,  [35209] = true, [35210] = true,    [12706] = true,  [7982] = true,
-		[12718] = true,		[23621] = true,	[35208] = true,	[12716] = true,	[23632] = true,
-		[23633] = true,	[30324] = true,	[23637] = true,	[31393] = true,[22221] = true,
-		[12690] = true,	[31394] = true,[31395] = true,[23630] = true,[23629] = true,[7978] = true,
-		[41120] = true,	[12717] = true,[22219] = true,[23627] = true,
-
-		-------------------------------------------------------------------------------
-		--Engineering
-		-------------------------------------------------------------------------------
-		[35196] = true,    [21734] = true,  [18292] = true,  [21727] = true,  [21735] = true,  [16053] = true,  [21729] = true,
-		[16047] = true,[21730] = true,[21731] = true,[21732] = true,[4411] = true,   [21733] = true,  [21728] = true,
-		[35186] = true,	[18655] = true,
-
-		-------------------------------------------------------------------------------
-		--Enchanting
-		-------------------------------------------------------------------------------
-		[16222] = true,	[20734] = true,	[20729] = true,	[20731] = true,	[16246] = true,
-	}
-
-	local output = {}
-
-	function addon:TooltipScanRecipe(spell_id, is_vendor, is_largescan)
-		local recipe_list = LoadRecipe()
-
-		if not recipe_list then
-			self:Print(L["DATAMINER_NODB_ERROR"])
-			return
-		end
-		local recipe = recipe_list[spell_id]
-
-		if not recipe then
-			self:Debug("Spell ID %d does not exist in the database.", tonumber(spell_id))
-			return
-		end
-		local recipe_name = recipe.name
-		local game_vers = recipe.genesis
-
-		twipe(output)
-
-		if not game_vers then
-			tinsert(output, "No expansion information: " .. tostring(spell_id) .. " " .. recipe_name)
-		elseif game_vers > private.game_versions.WOTLK then
-			tinsert(output, "Expansion information too high: " .. tostring(spell_id) .. " " .. recipe_name)
-		end
-		local optimal = recipe.optimal_level
-		local medium = recipe.medium_level
-		local easy = recipe.easy_level
-		local trivial = recipe.trivial_level
-		local skill_level = recipe.skill_level
-
-		if not optimal then
-			tinsert(output, "No skill level information: " .. tostring(spell_id) .. " " .. recipe_name)
-		else
-			-- Highest level is greater than the skill of the recipe
-			if optimal > skill_level then
-				tinsert(output, "Skill Level Error (optimal_level > skill_level): " .. tostring(spell_id) .. " " .. recipe_name)
-			elseif optimal < skill_level then
-				tinsert(output, "Skill Level Error (optimal_level < skill_level): " .. tostring(spell_id) .. " " .. recipe_name)
-			end
-
-			-- Level info is messed up
-			if optimal > medium or optimal > easy or optimal > trivial or medium > easy or medium > trivial or easy > trivial then
-				tinsert(output, "Skill Level Error: " .. tostring(spell_id) .. " " .. recipe_name)
-			end
-		end
-		local recipe_link = recipe.spell_link
-
-		if not recipe_link then
-			if recipe.profession ~= GetSpellInfo(53428) then		-- Lets hide this output for runeforging.
-				self:Printf("Missing spell_link for ID %d (%s).", spell_id, recipe_name)
-			end
-			return
-		end
-		ARLDatamineTT:SetOwner(WorldFrame, "ANCHOR_NONE")
-		GameTooltip_SetDefaultAnchor(ARLDatamineTT, UIParent)
-
-		ARLDatamineTT:SetHyperlink(recipe_link)
-
-		-- Check to see if this is a recipe tooltip.
-		local text = string.lower(_G["ARLDatamineTTTextLeft1"]:GetText())
-		local match_text = string.match(text, "%a+: ")
-
-		if not RECIPE_TYPES[match_text] and not (string.find(text, "smelt") or string.find(text, "sunder") or string.find(text, "shatter")) then
-			ARLDatamineTT:Hide()
-			return
-		end
-		local reverse_lookup = GetReverseLookup(recipe_list)
-
-		local item_id = SPELL_TO_RECIPE_MAP[spell_id]
-
-		wipe(scan_data)
-
-		if item_id and not DO_NOT_SCAN[item_id] then
-			local item_name, item_link, item_quality = GetItemInfo(item_id)
-
-			if item_name then
-				scan_data.quality = item_quality
-
-				ARLDatamineTT:SetHyperlink(item_link)
-				self:ScanToolTip(recipe_name, recipe_list, reverse_lookup, is_vendor)
-			else
-				local querier_string = _G.Querier and string.format(" To fix: /iq %d", item_id) or ""
-
-				tinsert(output, string.format("%s: %d", recipe.name, spell_id))
-				tinsert(output, string.format("    Recipe item not in cache.%s", querier_string))
-			end
-		elseif not item_id then
-			-- We are dealing with a recipe that does not have an item to learn it from.
-			-- Lets check the recipe flags to see if we have a data error and the item should exist
-			if not recipe:IsFlagged("common1", "RETIRED")
-				and (recipe:IsFlagged("common1", "VENDOR") or recipe:IsFlagged("common1", "INSTANCE") or recipe:IsFlagged("common1", "RAID")) then
-					tinsert(output, string.format("%s: %d", recipe.name, spell_id))
-					tinsert(output, "    No match found in the SPELL_TO_RECIPE_MAP table.")
-			end
-		end
-		ARLDatamineTT:Hide()
-
-		-- Add the flag scan to the table if it's not nil
-		local results = self:PrintScanResults()
-
-		if results then
-			tinsert(output, results)
-		end
-
-		if is_largescan then
-			return tconcat(output, "\n")
-		else
-			self:Print(tconcat(output, "\n"))
-		end
-	end
-end	-- do
-
--------------------------------------------------------------------------------
--- Tooltip-scanning code
--------------------------------------------------------------------------------
-do
-	local SPECIALTY_TEXT = {
-		["requires spellfire tailoring"] = 26797,
-		["requires mooncloth tailoring"] = 26798,
-		["requires shadoweave tailoring"] = 26801,
-		["requires dragonscale leatherworking"] = 10657,
-		["requires elemental leatherworking"] = 10659,
-		["requires tribal leatherworking"] = 10661,
-		["requires gnomish engineer"] = 20219,
-		["requires goblin engineer"] = 20222,
-		["requires armorsmith"] = 9788,
-		["requires master axesmith"] = 17041,
-		["requires master hammersmith"] = 17040,
-		["requires master swordsmith"] = 17039,
-		["requires weaponsmith"] = 9787,
-	}
-
-	local FACTION_TEXT = {
-		["thorium brotherhood"] = 98,
-		["zandalar tribe"] = 100,
-		["argent dawn"] = 96,
-		["timbermaw hold"] = 99,
-		["cenarion circle"] = 97,
-		["the aldor"] = 101,
-		["the consortium"] = 105,
-		["the scryers"] = 110,
-		["the sha'tar"] = 111,
-		["the mag'har"] = 108,
-		["cenarion expedition"] = 103,
-		["honor hold"] = 104,
-		["thrallmar"] = 104,
-		["the violet eye"] = 114,
-		["sporeggar"] = 113,
-		["kurenai"] = 108,
-		["keepers of time"] = 106,
-		["the scale of the sands"] = 109,
-		["lower city"] = 107,
-		["ashtongue deathsworn"] = 102,
-		["alliance vanguard"] = 131,
-		["valiance expedition"] = 126,
-		["horde expedition"] = 130,
-		["the taunka"] = 128,
-		["the hand of vengeance"] = 127,
-		["explorers' league"] = 125,
-		["the kalu'ak"] = 120,
-		["shattered sun offensive"] = 112,
-		["warsong offensive"] = 129,
-		["kirin tor"] = 118,
-		["the wyrmrest accord"] = 122,
-		["knights of the ebon blade"] = 117,
-		["frenzyheart tribe"] = 116,
-		["the oracles"] = 121,
-		["argent crusade"] = 115,
-		["the sons of hodir"] = 119,
-	}
-
-	local FACTION_LEVELS = {
-		["neutral"] = 0,
-		["friendly"] = 1,
-		["honored"] = 2,
-		["revered"] = 3,
-		["exalted"] = 4,
-	}
-
-	local CLASS_TYPES = {
-		["Death Knight"]	= 21, 	["Druid"]	= 22, 	["Hunter"]	= 23,
-		["Mage"]		= 24, 	["Paladin"]	= 25, 	["Priest"]	= 26,
-		["Shaman"]		= 27, 	["Rogue"]	= 28, 	["Warlock"]	= 29,
-		["Warrior"]		= 30,
-	}
-
-	local ORDERED_CLASS_TYPES = {
-		[1]	= "Death Knight", 	[2]	= "Druid", 	[3]	= "Hunter",
-		[4]	= "Mage", 		[5]	= "Paladin", 	[6]	= "Priest",
-		[7]	= "Shaman", 		[8]	= "Rogue", 	[9]	= "Warlock",
-		[10]	= "Warrior",
-	}
-
-	local ROLE_TYPES = {
-		["dps"]		= 51, 	["tank"]	= 52, 	["healer"]	= 53,
-		["caster"]	= 54,
-	}
-
-	local ORDERED_ROLE_TYPES = {
-		[1]	= "dps", 	[2]	= "tank", 	[3]	= "healer",
-		[4]	= "caster",
-	}
-
-	local ENCHANT_TO_ITEM = {
-		["Cloak"]	= "Back",
-		["Ring"]	= "Finger",
-		["2H Weapon"]	= "Two-Hand",
-	}
-
-	local ITEM_TYPES = {
-		-- Armor types
-		["Cloth"]	= 56, 	["Leather"]	= 57, 	["Mail"]	= 58,
-		["Plate"]	= 59, 	["Back"]	= 60, 	["Trinket"]	= 61,
-		["Finger"]	= 62, 	["Neck"]	= 63, 	["Shield"]	= 64,
-
-		-- Weapon types
-		["One-Hand"]	= 66, 	["Two-Hand"]	= 67, 	["Axe"]		= 68,
-		["Sword"]	= 69, 	["Mace"]	= 70, 	["Polearm"]	= 71,
-		["Dagger"]	= 72, 	["Staff"]	= 73, 	["Wand"]	= 74,
-		["Thrown"]	= 75, 	["Bow"]		= 76, 	["CrossBow"]	= 77,
-		["Ammo"]	= 78, 	["Fist Weapon"]	= 79, 	["Gun"]		= 80,
-	}
-
-	local ORDERED_ITEM_TYPES = {
-		-- Armor types
-		[1]	= "Cloth", 	[2]	= "Leather", 	[3]	= "Mail",
-		[4]	= "Plate", 	[5]	= "Back", 	[6]	= "Trinket",
-		[7]	= "Finger", 	[8]	= "Neck", 	[9]	= "Shield",
-
-		-- Weapon types
-		[11]	= "One-Hand", 	[12]	= "Two-Hand", 	[13]	= "Axe",
-		[14]	= "Sword", 	[15]	= "Mace", 	[16]	= "Polearm",
-		[17]	= "Dagger", 	[18]	= "Staff", 	[19]	= "Wand",
-		[20]	= "Thrown", 	[21]	= "Bow", 	[22]	= "CrossBow",
-		[23]	= "Ammo", 	[24]	= "Fist Weapon", 	[25]	= "Gun",
-	}
-
-	--- Parses the mining tooltip for certain keywords, comparing them with the database flags
-	-- @name AckisRecipeList:ScanToolTip
-	-- @param name The name of the recipe
-	-- @param recipe_list Recipe database
-	-- @param reverse_lookup Reverse lookup database
-	-- @param is_vendor Boolean to indicate if we're scanning a vendor
-	-- @return Scans a tooltip, and outputs the missing or extra filter flags
-	function addon:ScanToolTip(name, recipe_list, reverse_lookup, is_vendor)
-		scan_data.match_name = name
-		scan_data.recipe_list = recipe_list
-		scan_data.reverse_lookup = reverse_lookup
-		scan_data.is_vendor = is_vendor
-
-		-- Parse all the lines of the tooltip
-		for i = 1, ARLDatamineTT:NumLines(), 1 do
-			local text_l = _G["ARLDatamineTTTextLeft" .. i]:GetText()
-			local text_r = _G["ARLDatamineTTTextRight" .. i]:GetText()
-			local text
-
-			if text_r then
-				text = text_l .. " " .. text_r
-			else
-				text = text_l
-			end
-
-			local text = string.lower(text)
-
-			-- Check for recipe/item binding
-			-- The recipe binding is within the first few lines of the tooltip always
-			if string.match(text, "binds when picked up") then
-				if (i < 3) then
-					scan_data.recipe_bop = true
-				else
-					scan_data.item_bop = true
-				end
-			end
-
-			-- Recipe Specialities
-			if SPECIALTY_TEXT[text] then
-				scan_data.specialty = SPECIALTY_TEXT[text]
-			end
-
-			-- Recipe Reputations
-			local rep, replevel = string.match(text_l, "Requires (.+) %- (.+)")
-
-			if rep and replevel and FACTION_TEXT[rep] then
-				scan_data.repid = FACTION_TEXT[rep]
-				scan_data.repidlevel = FACTION_LEVELS[replevel]
-			end
-
-			-- Flag so that we don't bother checking for classes if we're sure of the class
-			-- AKA +spell hit == caster DPS only no matter what other stats are on it
-			-- Saves processing cycles and it won't cause the flags to be overwritten if a non-specific stat is found after
-			scan_data.verifiedclass = false
-
-			if not scan_data.verifiedclass then
-				-- Certain stats can be considered for a specific role (aka spell hit == caster dps).
-				if string.match(text, "strength") and not string.match(text, "strength of the clefthoof") and not string.match(text,  "set:") then
-					scan_data.dps = true
-				elseif string.match(text, "agility") then
-					scan_data.dps = true
-				elseif string.match(text, "spirit") then
-					scan_data.caster = true
-					scan_data.healer = true
-				elseif string.match(text, "spell power") then
-					scan_data.caster = true
-					scan_data.healer = true
-				elseif string.match(text, "spell crit") then
-					scan_data.caster = true
-					scan_data.healer = true
-				elseif string.match(text, "spell hit") then
-					scan_data.caster = true
-					scan_data.verifiedclass = true
-				elseif string.match(text, "spell penetration") then
-					scan_data.caster = true
-					scan_data.verifiedclass = true
-				elseif string.match(text, "mana per 5 sec.") or string.match(text, "mana every 5 seconds") then
-					scan_data.caster = true
-					scan_data.healer = true
-				elseif string.match(text, "attack power") then
-					scan_data.dps = true
-				elseif string.match(text, "expertise") then
-					scan_data.dps = true
-					scan_data.tank = true
-				elseif string.match(text, "melee crit") then
-					scan_data.dps = true
-				elseif string.match(text, "critical hit") then
-					scan_data.dps = true
-				elseif string.match(text, "weapon damage") then
-					scan_data.dps = true
-				elseif string.match(text, "ranged crit") then
-					scan_data.dps = true
-					scan_data.verifiedclass = true
-				elseif string.match(text, "melee haste") then
-					scan_data.dps = true
-				elseif string.match(text, "ranged haste") then
-					scan_data.dps = true
-					scan_data.verifiedclass = true
-				elseif string.match(text, "melee hit") then
-					scan_data.dps = true
-				elseif string.match(text, "ranged hit") then
-					scan_data.dps = true
-					scan_data.verifiedclass = true
-				elseif string.match(text, "armor pen") then
-					scan_data.dps = true
-				elseif string.match(text, "feral attack power") then
-					scan_data.tank = true
-					scan_data.dps = true
-				elseif string.match(text, "defense") and not string.match(text, "defenseless") then
-					scan_data.tank = true
-					scan_data.verifiedclass = true
-				elseif string.match(text, "block") then
-					scan_data.tank = true
-					scan_data.verifiedclass = true
-				elseif string.match(text, "parry") then
-					scan_data.tank = true
-					scan_data.verifiedclass = true
-				elseif string.match(text, "dodge") and not string.match(text,  "set:") then
-					scan_data.tank = true
-					scan_data.verifiedclass = true
-				end
-			end
-
-			-- Classes
-			local class_type = string.match(text_l, "Classes: (.+)")
-
-			if class_type then
-				for idx, class in ipairs(ORDERED_CLASS_TYPES) do
-					if string.match(class_type, class) then
-						scan_data[class] = true
-						scan_data.found_class = true
-					end
-				end
-			end
-
-			-- Armor types
-			if ITEM_TYPES[text_l] then
-				scan_data[text_l] = true
-			elseif text_l == "Held In Off-hand" or text_l == "Off Hand" or text_l == "Main Hand" then	-- Special cases.
-				scan_data["One-Hand"] = true
-			elseif text_l == "Projectile" then
-				scan_data["Ammo"] = true
-			end
-
-			if text_r and ITEM_TYPES[text_r] then
-				scan_data[text_r] = true
-			end
-
-			-- Enchantment voodoo
-			local ench_type, _ = string.match(text_l, "Enchant (.+) %- (.+)")
-
-			if ench_type then
-				if ITEM_TYPES[ench_type] then
-					scan_data[ench_type] = true
-				elseif ITEM_TYPES[ENCHANT_TO_ITEM[ench_type]] then
-					scan_data[ENCHANT_TO_ITEM[ench_type]] = true
-				elseif ench_type == "Weapon" then		-- Special case.
-					scan_data["One-Hand"] = true
-					scan_data["Two-Hand"] = true
-				end
-			end
-		end	-- for
-	end
-
-	-- Flag data for printing. Wiped and re-used.
-	local missing_flags = {}
-	local extra_flags = {}
-	local output = {}
-
-	local ACQUIRE_TO_FILTER_MAP = {
-		[A.MOB_DROP]	= F.MOB_DROP,
-		[A.QUEST]	= F.QUEST,
-		[A.SEASONAL]	= F.SEASONAL,
-		[A.WORLD_DROP]	= F.WORLD_DROP,
-	}
-	local FILTER_TO_ACQUIRE_MAP
-
-	--- Prints out the results of the tooltip scan.
-	-- @name AckisRecipeList:PrintScanResults
-	function addon:PrintScanResults()
-		if not scan_data.match_name then
-			return
-		end
-
-		-- Parse the recipe database until we get a match on the name
-		local recipe_name = string.gsub(scan_data.match_name, "%a+%?: ", "")
-		local spell_id = scan_data.reverse_lookup[recipe_name]
-
-		if not spell_id then
-			self:Print(recipe_name .. " has no reverse lookup")
-			return
-		end
-		local recipe = scan_data.recipe_list[spell_id]
-		local acquire_data = recipe["acquire_data"]
-
-		local FS = private.filter_strings
-		local flag_format = "F.%s"
-
-		twipe(missing_flags)
-		twipe(extra_flags)
-		twipe(output)
-
-		-- If we're a vendor scan,  do some extra checks
-		if scan_data.is_vendor then
-			-- Check to see if the vendor flag is set
-			if not recipe:IsFlagged("common1", "VENDOR") then
-				tinsert(missing_flags, string.format(flag_format, FS[F.VENDOR]))
-			end
-
-			-- Check to see if we're in a PVP zone
-			if (GetSubZoneText() == "Wintergrasp Fortress" or GetSubZoneText() == "Halaa") and not recipe:IsFlagged("common1", "PVP") then
-				tinsert(missing_flags, string.format(flag_format, FS[F.PVP]))
-			elseif recipe:IsFlagged("common1", "PVP") and not (GetSubZoneText() == "Wintergrasp Fortress" or GetSubZoneText() == "Halaa") then
-				tinsert(extra_flags, string.format(flag_format, FS[F.PVP]))
-			end
-		end
-
-		-- -- If we've picked up at least one class flag
-		if scan_data.found_class then
-			for k, v in ipairs(ORDERED_CLASS_TYPES) do
-				if scan_data[v] and not recipe:IsFlagged("class1", FS[CLASS_TYPES[v]]) then
-					tinsert(missing_flags, string.format(flag_format, FS[CLASS_TYPES[v]]))
-				elseif not scan_data[v] and recipe:IsFlagged("class1", FS[CLASS_TYPES[v]]) then
-					tinsert(extra_flags, string.format(flag_format, FS[CLASS_TYPES[v]]))
-				end
-			end
-		end
-
-		if scan_data.item_bop and not recipe:IsFlagged("common1", "IBOP") then
-			tinsert(missing_flags, string.format(flag_format, FS[F.IBOP]))
-
-			if recipe:IsFlagged("common1", "IBOE") then
-				tinsert(extra_flags, string.format(flag_format, FS[F.IBOE]))
-			end
-
-			if recipe:IsFlagged("common1", "IBOA") then
-				tinsert(extra_flags, string.format(flag_format, FS[F.IBOA]))
-			end
-		elseif not recipe:IsFlagged("common1", "IBOE") and not scan_data.item_bop then
-			tinsert(missing_flags, string.format(flag_format, FS[F.IBOE]))
-
-			if recipe:IsFlagged("common1", "IBOP") then
-				tinsert(extra_flags, string.format(flag_format, FS[F.IBOP]))
-			end
-
-			if recipe:IsFlagged("common1", "IBOA") then
-				tinsert(extra_flags, string.format(flag_format, FS[F.IBOA]))
-			end
-		end
-
-		if scan_data.recipe_bop and not recipe:IsFlagged("common1", "RBOP") then
-			tinsert(missing_flags, string.format(flag_format, FS[F.RBOP]))
-
-			if recipe:IsFlagged("common1", "RBOE") then
-				tinsert(extra_flags, string.format(flag_format, FS[F.RBOE]))
-			end
-
-			if recipe:IsFlagged("common1", "RBOA") then
-				tinsert(extra_flags, string.format(flag_format, FS[F.RBOA]))
-			end
-
-		elseif not recipe:IsFlagged("common1", "TRAINER") and not recipe:IsFlagged("common1", "RBOE") and not scan_data.recipe_bop then
-			tinsert(missing_flags, string.format(flag_format, FS[F.RBOE]))
-
-			if recipe:IsFlagged("common1", "RBOP") then
-				tinsert(extra_flags, string.format(flag_format, FS[F.RBOP]))
-			end
-
-			if recipe:IsFlagged("common1", "RBOA") then
-				tinsert(extra_flags, string.format(flag_format, FS[F.RBOA]))
-			end
-		end
-
-		for k, v in ipairs(ORDERED_ROLE_TYPES) do
-			local role_string = FS[ROLE_TYPES[v]]
-
-			if scan_data[v] and not recipe:IsFlagged("common1", role_string) then
-				tinsert(missing_flags, string.format(flag_format, role_string))
-			elseif not scan_data[v] and recipe:IsFlagged("common1", role_string) then
-				tinsert(extra_flags, string.format(flag_format, role_string))
-			end
-		end
-
-		for k, v in ipairs(ORDERED_ITEM_TYPES) do
-			if scan_data[v] and not recipe:IsFlagged("item1", FS[ITEM_TYPES[v]]) then
-				tinsert(missing_flags, string.format(flag_format, FS[ITEM_TYPES[v]]))
-			elseif not scan_data[v] and recipe:IsFlagged("item1", FS[ITEM_TYPES[v]]) then
-				tinsert(extra_flags, string.format(flag_format, FS[ITEM_TYPES[v]]))
-			end
-		end
-
-		-- Reputations
-		local repid = scan_data.repid
-		local found_problem = false
-
-		if repid and not recipe:IsFlagged("reputation1", FS[repid]) and not recipe:IsFlagged("reputation2", FS[repid]) then
-			tinsert(missing_flags, repid)
-
-			local rep_data = acquire_data[A.REPUTATION]
-
-			if rep_data then
-				for rep_id, rep_info in pairs(acquire_info) do
-					for rep_level, level_info in pairs(rep_info) do
-						if rep_level ~= scan_data.repidlevel then
-							tinsert(output, "    Wrong reputation level.")
-						end
-					end
-				end
-			end
-		end
-
-		-- Make sure the recipe's filter flags match with its acquire types.
-		if not FILTER_TO_ACQUIRE_MAP then
-			FILTER_TO_ACQUIRE_MAP = {}
-
-			for k, v in pairs(ACQUIRE_TO_FILTER_MAP) do
-				FILTER_TO_ACQUIRE_MAP[v] = k
-			end
-		end
-
-		for acquire_type in pairs(acquire_data) do
-			local flag = ACQUIRE_TO_FILTER_MAP[acquire_type]
-
-			if flag and not recipe:IsFlagged("common1", FS[flag]) then
-				tinsert(missing_flags, string.format(flag_format, FS[flag]))
-			end
-		end
-
-		if (acquire_data[A.VENDOR] or acquire_data[A.REPUTATION]) and not recipe:IsFlagged("common1", "VENDOR") then
-			tinsert(missing_flags, string.format(flag_format, FS[F.VENDOR]))
-		end
-
-		if recipe:IsFlagged("common1", "VENDOR") and not (acquire_data[A.VENDOR] or acquire_data[A.REPUTATION]) then
-			tinsert(extra_flags, string.format(flag_format, FS[F.VENDOR]))
-		end
-
-		if acquire_data[A.TRAINER] and not recipe:IsFlagged("common1", "TRAINER") then
-			tinsert(missing_flags, string.format(flag_format, FS[F.TRAINER]))
-		end
-
-		if recipe:IsFlagged("common1", "TRAINER") and not acquire_data[A.TRAINER] then
-			if not acquire_data[A.CUSTOM] then
-				tinsert(extra_flags, string.format(flag_format, FS[F.TRAINER]))
-			end
-		end
-
-		for flag, acquire_type in pairs(FILTER_TO_ACQUIRE_MAP) do
-			if recipe:IsFlagged("common1", FS[flag]) and not acquire_data[acquire_type] then
-				tinsert(extra_flags, string.format(flag_format, FS[flag]))
-			end
-		end
-
-		if #missing_flags > 0 or #extra_flags > 0 then
-			found_problem = true
-
-			-- Add a string of the missing flag numbers
-			if #missing_flags > 0 then
-				tinsert(output, "    Missing flags: " .. tconcat(missing_flags, ", "))
-			end
-
-			-- Add a string of the extra flag numbers
-			if #extra_flags > 0 then
-				tinsert(output, "    Extra flags: " .. tconcat(extra_flags, ", "))
-			end
-			local found_type = false
-
-			for k, v in ipairs(ORDERED_ITEM_TYPES) do
-				if scan_data[v] then
-					found_type = true
-					break
-				end
-			end
-
-			if not found_type then
-				tinsert(output, "    Missing: item type flag")
-			end
-		end
-
-		-- Check to see if we have a horde/alliance flag,  all recipes must have one of these
-		if not recipe:IsFlagged("common1", "ALLIANCE") and not recipe:IsFlagged("common1", "HORDE") then
-			found_problem = true
-			tinsert(output, "    Horde or Alliance not selected.")
-		end
-
-		-- Check to see if we have an obtain method flag,  all recipes must have at least one of these
-		if (not recipe:IsFlagged("common1", "TRAINER") and not recipe:IsFlagged("common1", "VENDOR") and not recipe:IsFlagged("common1", "INSTANCE") and not recipe:IsFlagged("common1", "RAID")
-		    and not recipe:IsFlagged("common1", "SEASONAL") and not recipe:IsFlagged("common1", "QUEST") and not recipe:IsFlagged("common1", "PVP") and not recipe:IsFlagged("common1", "WORLD_DROP")
-		    and not recipe:IsFlagged("common1", "MOB_DROP") and not recipe:IsFlagged("common1", "DISC")) then
-			found_problem = true
-			tinsert(output, "    No obtain flag.")
-		end
-
-		-- Check for recipe binding information,  all recipes must have one of these
-		if not recipe:IsFlagged("common1", "RBOE") and not recipe:IsFlagged("common1", "RBOP") and not recipe:IsFlagged("common1", "RBOA") then
-			found_problem = true
-			tinsert(output, "    No recipe binding information.")
-		end
-
-		-- Check for item binding information,  all recipes must have one of these
-		if not recipe:IsFlagged("common1", "IBOE") and not recipe:IsFlagged("common1", "IBOP") and not recipe:IsFlagged("common1", "IBOA") then
-			found_problem = true
-			tinsert(output, "    No item binding information.")
-		end
-
-		-- We need to code this better.  Some items (aka bags) won't have a role at all.
-		-- Check for player role flags
-		if not scan_data.tank and not scan_data.healer and not scan_data.caster and not scan_data.dps and not NO_ROLE_FLAG[spell_id] then
-			found_problem = true
-			tinsert(output, "    No player role flag.")
-		end
-
-		if scan_data.specialty then
-			if not recipe.specialty then
-				found_problem = true
-				tinsert(output, string.format("    Missing Specialty: %s", scan_data.specialty))
-			elseif recipe.specialty ~= scan_data.specialty then
-				tinsert(output, string.format("    Wrong Specialty: %s - should be %s ", recipe.specialty, scan_data.specialty))
-			end
-		elseif recipe.specialty then
-			found_problem = true
-			tinsert(output, string.format("    Extra Specialty: %s", recipe.specialty))
-		end
-
-		if scan_data.quality ~= recipe.quality then
-			local QS = private.item_quality_names
-
-			found_problem = true
-			tinsert(output, string.format("    Wrong quality: Q.%s - should be Q.%s.", QS[recipe.quality], QS[scan_data.quality]))
-		end
-		if found_problem then
-			tinsert(output, 1, string.format("%s: <a href=\"http://www.wowhead.com/?spell=%d\">%d</a>", recipe_name, spell_id, spell_id))
-			return tconcat(output, "\n")
-		else
-			return
-		end
-	end
-end
\ No newline at end of file
diff --git a/Scanner.lua b/Scanner.lua
new file mode 100644
index 0000000..bccb69b
--- /dev/null
+++ b/Scanner.lua
@@ -0,0 +1,2505 @@
+--[[
+************************************************************************
+Scanner.lua
+In-game tooltip-scanner for datamining.
+************************************************************************
+File date: @file-date-iso@
+File revision: @file-revision@
+Project revision: @project-revision@
+Project version: @project-version@
+************************************************************************
+Please see http://www.wowace.com/addons/arl/ for more information.
+************************************************************************
+This source code is released under All Rights Reserved.
+************************************************************************
+]]--
+
+-------------------------------------------------------------------------------
+-- Upvalues globals.
+-------------------------------------------------------------------------------
+local _G = getfenv(0)
+
+local table = _G.table
+local tconcat, tinsert, tsort, twipe = table.concat, table.insert, table.sort, table.wipe
+
+local string = _G.string
+
+local tonumber, tostring = _G.tonumber, _G.tostring
+
+local ipairs, pairs = _G.ipairs, _G.pairs
+
+-------------------------------------------------------------------------------
+-- Upvalued Blizzard API.
+-------------------------------------------------------------------------------
+local UnitName = UnitName
+local UnitGUID = UnitGUID
+local UnitExists = UnitExists
+local UnitIsPlayer = UnitIsPlayer
+local UnitIsEnemy = UnitIsEnemy
+local GetNumTrainerServices = GetNumTrainerServices
+local GetTrainerServiceInfo = GetTrainerServiceInfo
+local IsTradeskillTrainer = IsTradeskillTrainer
+local SetTrainerServiceTypeFilter = SetTrainerServiceTypeFilter
+local GetTrainerServiceTypeFilter = GetTrainerServiceTypeFilter
+local GetTrainerServiceSkillReq = GetTrainerServiceSkillReq
+local GetMerchantNumItems = GetMerchantNumItems
+local GetMerchantItemLink = GetMerchantItemLink
+local GetMerchantItemInfo = GetMerchantItemInfo
+local GetSpellInfo = GetSpellInfo
+
+-------------------------------------------------------------------------------
+-- AddOn namespace.
+-------------------------------------------------------------------------------
+local MODNAME	= "Ackis Recipe List"
+local addon	= LibStub("AceAddon-3.0"):GetAddon(MODNAME)
+
+local L		= LibStub("AceLocale-3.0"):GetLocale(MODNAME)
+
+-- Set up the private intra-file namespace.
+local private	= select(2, ...)
+
+-------------------------------------------------------------------------------
+-- Constants
+-------------------------------------------------------------------------------
+local F = private.filter_flags
+local A = private.acquire_types
+
+local PROFESSIONS = private.professions
+
+-------------------------------------------------------------------------------
+-- Mined via Data-tools
+-- Table is Public Domain now
+-- Look up table of Spell IDs to the recipe which trains them.
+-------------------------------------------------------------------------------
+local SPELL_TO_RECIPE_MAP = {
+	-------------------------------------------------------------------------------
+	-- First Aid
+	-------------------------------------------------------------------------------
+	[7929] = 16112, 	[7935] = 6454, 		[10840] = 16113, 	[23787] = 19442,
+	[27032] = 21992, 	[27033] = 21993, 	[45546] = 39152,
+
+	-------------------------------------------------------------------------------
+	-- Alchemy
+	-------------------------------------------------------------------------------
+	[2333] = 3396, 		[2335] = 2555, 		[3172] = 3393, 		[3174] = 3394,
+	[3175] = 3395, 		[3188] = 6211, 		[3230] = 2553, 		[3449] = 6068,
+	[3450] = 3830, 		[3451] = 3831, 		[3453] = 3832, 		[3454] = 14634,
+	[4508] = 4597, 		[4942] = 4624, 		[6617] = 5640, 		[6618] = 5643,
+	[6624] = 5642, 		[7255] = 6053, 		[7256] = 6054, 		[7257] = 6055,
+	[7258] = 6056, 		[7259] = 6057, 		[8240] = 6663, 		[11453] = 9293,
+	[11456] = 10644, 	[11458] = 9294, 	[11459] = 9303, 	[11464] = 9295,
+	[11466] = 9296, 	[11468] = 9297, 	[11472] = 9298, 	[11473] = 9302,
+	[11476] = 9301, 	[11477] = 9300, 	[11479] = 9304, 	[11480] = 9305,
+	[17187] = 12958, 	[17552] = 13476, 	[17553] = 13477, 	[17554] = 13478,
+	[17555] = 13479, 	[17556] = 13480, 	[17557] = 13481, 	[17559] = 13482,
+	[17560] = 13483, 	[17561] = 13484, 	[17562] = 13485, 	[17563] = 13486,
+	[17564] = 13487, 	[17565] = 13488, 	[17566] = 13489, 	[17570] = 13490,
+	[17571] = 13491, 	[17572] = 13492, 	[17573] = 13493, 	[17574] = 13494,
+	[17575] = 13495, 	[17576] = 13496, 	[17577] = 13497, 	[17578] = 13499,
+	[17580] = 13501, 	[17632] = 13517, 	[17634] = 13518, 	[17635] = 31354,
+	[17636] = 31356, 	[17637] = 31355, 	[17638] = 31357, 	[21923] = 17709,
+	[22732] = 18257, 	[24365] = 20011, 	[24366] = 20012, 	[24367] = 20013,
+	[24368] = 20014, 	[25146] = 20761, 	[26277] = 21547, 	[28543] = 22900,
+	[28546] = 22901, 	[28549] = 22902, 	[28550] = 22903, 	[28552] = 22904,
+	[28553] = 24001, 	[28554] = 22906, 	[28555] = 22907, 	[28556] = 22908,
+	[28557] = 22909, 	[28558] = 22910, 	[28562] = 22911, 	[28563] = 22912,
+	[28564] = 35295, 	[28565] = 22914, 	[28566] = 22915, 	[28567] = 22916,
+	[28568] = 30443, 	[28569] = 22918, 	[28570] = 22919, 	[28571] = 22920,
+	[28572] = 22921, 	[28573] = 22922, 	[28575] = 22923, 	[28576] = 22924,
+	[28577] = 22925, 	[28578] = 35294, 	[28579] = 22927, 	[29688] = 23574,
+	[32765] = 25869, 	[32766] = 29232, 	[38960] = 31680, 	[38961] = 31682,
+	[38962] = 31681, 	[39637] = 32070, 	[39639] = 32071, 	[42736] = 33209,
+	[47046] = 35752, 	[47048] = 35753, 	[47049] = 35754, 	[47050] = 35755,
+	[53936] = 44564, 	[53937] = 44566, 	[53938] = 44568, 	[53939] = 44565,
+	[53942] = 44567,
+
+	-------------------------------------------------------------------------------
+	-- Blacksmithing
+	-------------------------------------------------------------------------------
+	[2667] = 2881, 		[2673] = 5578, 		[3295] = 2883, 		[3297] = 3608,
+	[3321] = 3609, 		[3325] = 3610, 		[3330] = 2882, 		[3334] = 3611,
+	[3336] = 3612, 		[3492] = 12162, 	[3493] = 3866, 		[3494] = 10858,
+	[3495] = 3867, 		[3496] = 12163, 	[3497] = 3868, 		[3498] = 12164,
+	[3500] = 3869, 		[3503] = 6047, 		[3504] = 3870, 		[3505] = 3871,
+	[3507] = 3872, 		[3511] = 3873, 		[3513] = 3874, 		[3515] = 3875,
+	[6518] = 5543, 		[7221] = 6044, 		[7222] = 6045, 		[7224] = 6046,
+	[8367] = 6735, 		[9811] = 7978, 		[9813] = 7979, 		[9814] = 7980,
+	[9818] = 7981, 		[9820] = 7982, 		[9933] = 7975, 		[9937] = 7995,
+	[9939] = 7976, 		[9945] = 7983, 		[9950] = 7984, 		[9952] = 7985,
+	[9964] = 7989, 		[9966] = 7991, 		[9970] = 7990, 		[9995] = 7992,
+	[9997] = 8029, 		[10005] = 7993, 	[10009] = 8028,		[10013] = 8030,
+	[11454] = 10713, 	[11643] = 9367, 	[12259] = 10424, 	[15292] = 11610,
+	[15293] = 11614, 	[15294] = 11611, 	[15295] = 11615, 	[15296] = 11612,
+	[15973] = 12261, 	[16642] = 12682, 	[16643] = 12683, 	[16644] = 12684,
+	[16645] = 12685, 	[16646] = 12687, 	[16647] = 12688, 	[16648] = 12689,
+	[16649] = 12690, 	[16650] = 12691, 	[16651] = 12692, 	[16652] = 12693,
+	[16653] = 12694, 	[16654] = 12695, 	[16655] = 12699, 	[16656] = 12697,
+	[16657] = 12700, 	[16658] = 12701, 	[16659] = 12702, 	[16660] = 12698,
+	[16661] = 12703, 	[16662] = 12704, 	[16663] = 12705, 	[16664] = 12706,
+	[16665] = 12707, 	[16667] = 12696, 	[16724] = 12711, 	[16725] = 12713,
+	[16726] = 12714, 	[16728] = 12716, 	[16729] = 12717, 	[16730] = 12715,
+	[16731] = 12718, 	[16732] = 12719, 	[16741] = 12720, 	[16742] = 12725,
+	[16744] = 12726, 	[16745] = 12727, 	[16746] = 12728, 	[16969] = 12819,
+	[16970] = 12821, 	[16971] = 12823, 	[16973] = 12824, 	[16978] = 12825,
+	[16983] = 12827, 	[16984] = 12828, 	[16985] = 12830, 	[16988] = 12833,
+	[16990] = 12834, 	[16991] = 12835, 	[16992] = 12836, 	[16993] = 12837,
+	[16994] = 12838, 	[16995] = 12839, 	[20872] = 17049, 	[20873] = 17053,
+	[20874] = 17051, 	[20876] = 17052, 	[20890] = 17059, 	[20897] = 17060,
+	[21161] = 18592, 	[21913] = 17706, 	[22757] = 18264, 	[23628] = 19202,
+	[23629] = 19204, 	[23632] = 19203, 	[23633] = 19205, 	[23636] = 19206,
+	[23637] = 19207, 	[23638] = 19208, 	[23639] = 19209, 	[23650] = 19210,
+	[23652] = 19211, 	[23653] = 19212, 	[24136] = 19776, 	[24137] = 19777,
+	[24138] = 19778, 	[24139] = 19779, 	[24140] = 19780, 	[24141] = 19781,
+	[24399] = 20040, 	[24912] = 20553, 	[24913] = 20555, 	[24914] = 20554,
+	[27585] = 22209, 	[27586] = 22219, 	[27587] = 22222, 	[27588] = 22214,
+	[27589] = 22220, 	[27590] = 22221, 	[27829] = 22388, 	[27830] = 22390,
+	[27832] = 22389, 	[28461] = 22766, 	[28462] = 22767, 	[28463] = 22768,
+	[29566] = 23590, 	[29568] = 23591, 	[29569] = 23592, 	[29571] = 23593,
+	[29603] = 23594, 	[29605] = 23595, 	[29606] = 23596, 	[29608] = 23597,
+	[29610] = 23599, 	[29611] = 23598, 	[29613] = 23600, 	[29614] = 23601,
+	[29615] = 23602, 	[29616] = 23603, 	[29617] = 23604, 	[29619] = 23605,
+	[29620] = 23606, 	[29621] = 23607, 	[29622] = 23621, 	[29628] = 23608,
+	[29629] = 23609, 	[29630] = 23610, 	[29642] = 23611, 	[29643] = 23612,
+	[29645] = 23613, 	[29648] = 23615, 	[29649] = 23617, 	[29656] = 23618,
+	[29657] = 24002, 	[29658] = 23620, 	[29662] = 23622, 	[29663] = 23623,
+	[29664] = 23624, 	[29668] = 23625, 	[29669] = 23626, 	[29671] = 23627,
+	[29672] = 23628, 	[29692] = 23629, 	[29693] = 23630, 	[29694] = 23631,
+	[29695] = 23632, 	[29696] = 23633, 	[29697] = 23634, 	[29698] = 23635,
+	[29699] = 23636, 	[29700] = 23637, 	[29728] = 23638, 	[29729] = 23639,
+	[32285] = 25526, 	[32656] = 25846, 	[32657] = 25847, 	[34608] = 28632,
+	[36389] = 30321, 	[36390] = 30322, 	[36391] = 30323, 	[36392] = 30324,
+	[38473] = 31390, 	[38475] = 31391, 	[38476] = 31392, 	[38477] = 31393,
+	[38478] = 31394, 	[38479] = 31395, 	[40033] = 32441, 	[40034] = 32442,
+	[40035] = 32443, 	[40036] = 32444, 	[41132] = 32736, 	[41133] = 32737,
+	[41134] = 32738, 	[41135] = 32739, 	[42688] = 35296, 	[43549] = 33792,
+	[43846] = 33954, 	[46140] = 35208, 	[46141] = 35209, 	[46142] = 35210,
+	[46144] = 35211, 	[54978] = 41124, 	[54979] = 41123, 	[54980] = 41120,
+	[54981] = 41122, 	[62202] = 44938, 	[63187] = 45088, 	[63188] = 45089,
+	[63189] = 45090, 	[63190] = 45091, 	[63191] = 45092, 	[63192] = 45093,
+	[67091] = 47622, 	[67130] = 47640, 	[67092] = 47623, 	[67131] = 47641,
+	[67096] = 47627, 	[67135] = 47642, 	[67095] = 47626, 	[67134] = 47643,
+	[67093] = 47624, 	[67132] = 47644, 	[67094] = 47625, 	[67133] = 47645,
+	[70563] = 49970,	[70567] = 49973,	[70565] = 49971,	[70566] = 49972,
+	[70568] = 49974,	[70562] = 49969,
+
+	-------------------------------------------------------------------------------
+	-- Cooking
+	-------------------------------------------------------------------------------
+	[2542] = 2697, 		[2543] = 728, 		[2545] = 2698, 		[2547] = 2699,
+	[2548] = 2700, 		[2549] = 2701, 		[2795] = 2889, 		[3370] = 3678,
+	[3371] = 3679, 		[3372] = 3680, 		[3373] = 3681, 		[3376] = 3682,
+	[3377] = 3683, 		[3397] = 3734, 		[3398] = 3735, 		[3399] = 3736,
+	[3400] = 3737, 		[4094] = 4609, 		[6412] = 5482, 		[6413] = 5483,
+	[6414] = 5484, 		[6415] = 5485, 		[6416] = 5486, 		[6417] = 44977,
+	[6418] = 5488, 		[6419] = 5489, 		[6501] = 5528, 		[7213] = 6039,
+	[7751] = 6325, 		[7752] = 6326, 		[7753] = 6328, 		[7754] = 6329,
+	[7755] = 6330, 		[7827] = 6368, 		[7828] = 6369, 		[8238] = 6661,
+	[8607] = 6892, 		[9513] = 18160, 	[15853] = 12227, 	[15855] = 12228,
+	[15856] = 12229, 	[15861] = 12231, 	[15863] = 12232, 	[15865] = 12233,
+	[15906] = 12239, 	[15910] = 12240, 	[15915] = 16111, 	[15933] = 16110,
+	[15935] = 12226, 	[18238] = 13939, 	[18239] = 13940, 	[18240] = 13942,
+	[18241] = 13941, 	[18242] = 13943, 	[18243] = 13945, 	[18244] = 13946,
+	[18245] = 13947, 	[18246] = 13948, 	[18247] = 13949, 	[20626] = 16767,
+	[20916] = 17062, 	[21143] = 17200, 	[21144] = 17201, 	[22480] = 18046,
+	[22761] = 18267, 	[24418] = 20075, 	[25659] = 21025, 	[25704] = 21099,
+	[25954] = 21219, 	[28267] = 22647, 	[33276] = 27685, 	[33277] = 27686,
+	[33278] = 27687, 	[33279] = 27684, 	[33284] = 27688, 	[33285] = 27689,
+	[33286] = 27690, 	[33287] = 27691, 	[33288] = 27692, 	[33289] = 27693,
+	[33290] = 27694, 	[33291] = 27695, 	[33292] = 27696, 	[33293] = 27697,
+	[33294] = 27698, 	[33295] = 27699, 	[33296] = 27700, 	[36210] = 30156,
+	[38867] = 31675, 	[38868] = 31674, 	[43707] = 33870, 	[43758] = 33871,
+	[43761] = 33869, 	[43765] = 33873, 	[43772] = 33875, 	[43779] = 33925,
+	[45022] = 34413, 	[45555] = 43018, 	[45556] = 43019, 	[45557] = 43020,
+	[45558] = 43021, 	[45559] = 43022, 	[45567] = 43023, 	[45568] = 43024,
+	[45570] = 43026, 	[45571] = 43025, 	[45695] = 34834, 	[46684] = 35564,
+	[46688] = 35566, 	[53056] = 39644, 	[57423] = 43017, 	[57433] = 43027,
+	[57434] = 43028, 	[57435] = 43029, 	[57436] = 43030, 	[57437] = 43031,
+	[57438] = 43032, 	[57439] = 43033, 	[57440] = 43034, 	[57441] = 43035,
+	[57442] = 43036, 	[57443] = 43037, 	[58512] = 43507, 	[58521] = 43508,
+	[58523] = 43509, 	[58525] = 43510, 	[58527] = 43505, 	[58528] = 43506,
+	[62350] = 44954,
+
+	-------------------------------------------------------------------------------
+	-- Enchanting
+	-------------------------------------------------------------------------------
+	[7443] = 6342, 		[7766] = 6344, 		[7776] = 6346, 		[7782] = 6347,
+	[7786] = 6348, 		[7793] = 6349, 		[7859] = 6375, 		[7867] = 6377,
+	[13380] = 11038, 	[13419] = 11039, 	[13464] = 11081, 	[13522] = 11098,
+	[13536] = 11101, 	[13612] = 11150, 	[13617] = 11151, 	[13620] = 11152,
+	[13646] = 11163, 	[13653] = 11164, 	[13655] = 11165, 	[13687] = 11167,
+	[13689] = 11168, 	[13698] = 11166, 	[13817] = 11202, 	[13841] = 11203,
+	[13846] = 11204, 	[13868] = 11205, 	[13882] = 11206, 	[13898] = 11207,
+	[13915] = 11208, 	[13931] = 11223, 	[13933] = 11224, 	[13945] = 11225,
+	[13947] = 11226, 	[15596] = 11813, 	[15596] = 45050,	[20009] = 16218,
+ 	[20010] = 16246, 	[20011] = 16251, 	[20012] = 16219, 	[20014] = 16216,
+ 	[20015] = 16224, 	[20016] = 16222,	[20017] = 16217, 	[20020] = 16215,
+ 	[20023] = 16245, 	[20024] = 16220,	[20025] = 16253, 	[20026] = 16221,
+ 	[20028] = 16242, 	[20029] = 16223,	[20030] = 16247, 	[20031] = 16250,
+	[20032] = 16254, 	[20033] = 16248,	[20034] = 16252, 	[20035] = 16255,
+	[20036] = 16249, 	[20051] = 16243,	[21931] = 17725, 	[22749] = 18259,
+	[22750] = 18260, 	[23799] = 19444,	[23800] = 19445, 	[23801] = 19446,
+	[23802] = 19447, 	[23803] = 19448,	[23804] = 19449, 	[25072] = 33153,
+	[25072] = 20726, 	[25073] = 20727,	[25074] = 20728, 	[25078] = 20729,
+	[25079] = 20730, 	[25080] = 33152,	[25080] = 20731, 	[25081] = 20732,
+	[25082] = 20733, 	[25083] = 33149,	[25083] = 20734, 	[25084] = 20735,
+	[25084] = 33150, 	[25084] = 33151,	[25086] = 20736, 	[25086] = 33148,
+	[25124] = 20758, 	[25125] = 20752,	[25126] = 20753, 	[25127] = 20754,
+	[25128] = 20755, 	[25129] = 20756,	[25130] = 20757, 	[27837] = 22392,
+	[27906] = 22530, 	[27911] = 22531,	[27911] = 24000, 	[27913] = 22532,
+	[27914] = 22533, 	[27917] = 22534,	[27920] = 22535, 	[27924] = 22536,
+	[27926] = 22537, 	[27927] = 22538,	[27945] = 22539, 	[27946] = 22540,
+	[27947] = 22541, 	[27948] = 35298,	[27948] = 22542, 	[27950] = 22543,
+	[27951] = 22544, 	[27954] = 22545,	[27960] = 24003, 	[27960] = 22547,
+	[27962] = 22548, 	[27967] = 22552,	[27968] = 22551, 	[27971] = 22554,
+	[27972] = 22553, 	[27975] = 22555,	[27977] = 22556, 	[27981] = 22560,
+	[27982] = 22561, 	[27984] = 22559,	[28003] = 22558, 	[28004] = 22557,
+ 	[28016] = 22562, 	[28019] = 22563,	[28022] = 22565, 	[32665] = 25848,
+	[32667] = 25849, 	[33992] = 28270,	[33994] = 28271, 	[33997] = 28272,
+	[33999] = 28273, 	[34003] = 28274,	[34005] = 28276, 	[34006] = 28277,
+	[34007] = 35299, 	[34007] = 28279,	[34008] = 35297, 	[34008] = 28280,
+	[34009] = 28282, 	[34010] = 28281,	[42620] = 33165, 	[42974] = 33307,
+	[44483] = 37332, 	[44494] = 37333,	[44524] = 37344, 	[44556] = 37331,
+	[44575] = 44484, 	[44576] = 44494,	[44588] = 37340, 	[44590] = 37334,
+	[44591] = 37347, 	[44595] = 44473,	[44596] = 37330, 	[44621] = 37339,
+	[44625] = 44485, 	[44631] = 37349,	[45765] = 34872, 	[46578] = 35498,
+	[46594] = 35500, 	[47051] = 35756,	[47672] = 44471, 	[47898] = 44472,
+	[47899] = 44488, 	[47901] = 44491,	[59619] = 44496, 	[59621] = 44492,
+	[59625] = 44495, 	[60691] = 44483,	[60692] = 44489, 	[60707] = 44486,
+ 	[60714] = 44487, 	[60763] = 44490,	[60767] = 44498, 	[62256] = 44944,
+	[62257] = 44945, 	[62948] = 45059,	[64441] = 46027, 	[64579] = 46348,
+
+	-------------------------------------------------------------------------------
+	--Engineering
+	-------------------------------------------------------------------------------
+	[3928] = 4408, 		[3933] = 4409, 		[3939] = 13309,		[3940] = 4410,
+	[3944] = 4411, 		[3952] = 14639, 	[3954] = 4412, 		[3957] = 13308,
+	[3959] = 4413, 		[3960] = 4414, 		[3966] = 4415, 		[3968] = 4416,
+	[3969] = 13311, 	[3971] = 7742, 		[3972] = 4417, 		[3979] = 13310,
+	[8243] = 6672, 		[8339] = 6716, 		[9269] = 7560, 		[9273] = 7561,
+	[12587] = 10601, 	[12597] = 10602, 	[12607] = 10603, 	[12614] = 10604,
+	[12615] = 10605, 	[12616] = 10606, 	[12617] = 10607, 	[12620] = 10608,
+	[12624] = 10609, 	[15628] = 11828, 	[15633] = 11827, 	[19790] = 16041,
+	[19791] = 16042, 	[19792] = 16043, 	[19793] = 16044, 	[19794] = 16045,
+	[19795] = 16047, 	[19796] = 16048, 	[19799] = 16049, 	[19800] = 16051,
+	[19814] = 16046, 	[19815] = 16050, 	[19819] = 16052, 	[19825] = 16053,
+	[19830] = 16054, 	[19831] = 16055, 	[19833] = 16056, 	[21940] = 17720,
+	[22793] = 18290, 	[22795] = 18292, 	[22797] = 18291, 	[23066] = 18647,
+	[23067] = 18649, 	[23068] = 18648, 	[23069] = 18650, 	[23071] = 18651,
+	[23077] = 18652, 	[23078] = 18653, 	[23079] = 18655, 	[23080] = 18656,
+	[23081] = 18657, 	[23082] = 18658, 	[23096] = 18654, 	[23129] = 18661,
+	[23507] = 19027, 	[24356] = 20000, 	[24357] = 20001, 	[26416] = 21724,
+	[26417] = 21725, 	[26418] = 21726, 	[26420] = 21727, 	[26421] = 21728,
+	[26422] = 21729, 	[26423] = 21730, 	[26424] = 21731, 	[26425] = 21732,
+	[26426] = 21733, 	[26427] = 21734, 	[26428] = 21735, 	[26442] = 44919,
+	[26443] = 44918, 	[28327] = 22729, 	[30313] = 23799, 	[30314] = 23800,
+	[30315] = 23802, 	[30316] = 23803, 	[30317] = 23804, 	[30318] = 23805,
+	[30325] = 23806, 	[30329] = 23807, 	[30332] = 23808, 	[30334] = 23809,
+	[30337] = 23810, 	[30341] = 23811, 	[30344] = 23814, 	[30347] = 23815,
+	[30348] = 23816, 	[30349] = 23817, 	[30547] = 23874, 	[30548] = 23888,
+	[30551] = 35310, 	[30552] = 35311, 	[30556] = 23887, 	[32814] = 25887,
+	[39895] = 32381, 	[43676] = 33804, 	[44391] = 34114, 	[46106] = 35191,
+	[46107] = 35187, 	[46108] = 35189, 	[46109] = 35190, 	[46110] = 35192,
+	[46111] = 35186, 	[46112] = 35193, 	[46113] = 35194, 	[46114] = 35195,
+	[46115] = 35196, 	[46116] = 35197, 	[46697] = 35582,	[60866] = 44502,
+ 	[60867] = 44503, 	[72952] = 52022,	[72953] = 52023,
+
+	-------------------------------------------------------------------------------
+	--Inscription
+	-------------------------------------------------------------------------------
+	[71101] = 50166,  [71102] = 50168,  [71015] = 50167,
+
+	-------------------------------------------------------------------------------
+	--Jewelcrafting
+	-------------------------------------------------------------------------------
+	[25320] = 20856, 	[25323] = 20855, 	[25339] = 20854, 	[25610] = 20970,
+	[25612] = 20971, 	[25617] = 20973, 	[25618] = 20974, 	[25619] = 20975,
+	[25622] = 20976, 	[26873] = 21940, 	[26875] = 21941, 	[26878] = 21942,
+	[26881] = 21943, 	[26882] = 21944, 	[26887] = 21945, 	[26896] = 21947,
+	[26897] = 21948, 	[26900] = 21949, 	[26906] = 21952, 	[26909] = 21953,
+	[26910] = 21954, 	[26912] = 21955, 	[26914] = 21956, 	[26915] = 21957,
+	[28903] = 23130, 	[28905] = 23131, 	[28906] = 23133, 	[28907] = 23134,
+	[28910] = 23135, 	[28912] = 23136, 	[28914] = 23137, 	[28915] = 23138,
+	[28916] = 23140, 	[28917] = 23141, 	[28918] = 31359, 	[28924] = 23143,
+	[28927] = 23145, 	[28933] = 23146, 	[28936] = 23147,
+	[28938] = 23148, 	[28944] = 23149, 	[28947] = 23150, 	[28948] = 23151,
+	[28950] = 23152, 	[28953] = 23153, 	[28955] = 23154, 	[28957] = 23155,
+	[31053] = 24158, 	[31054] = 24159, 	[31055] = 24160, 	[31056] = 24161,
+	[31057] = 24162, 	[31058] = 24163, 	[31060] = 24164, 	[31061] = 24165,
+	[31062] = 24174, 	[31063] = 24175, 	[31064] = 24176, 	[31065] = 24177,
+	[31066] = 24178, 	[31067] = 24166, 	[31068] = 24167, 	[31070] = 24168,
+	[31071] = 24169, 	[31072] = 24170, 	[31076] = 24171, 	[31077] = 24172,
+	[31078] = 24173, 	[31079] = 24179, 	[31080] = 31358, 	[31081] = 24181,
+	[31082] = 24182, 	[31083] = 24183, 	[31084] = 24193, 	[31085] = 24194,
+	[31087] = 24195, 	[31088] = 35305, 	[31089] = 35306, 	[31090] = 24197,
+	[31091] = 24198, 	[31092] = 35304, 	[31094] = 24201, 	[31095] = 24202,
+	[31096] = 24203, 	[31097] = 24204, 	[31098] = 35307, 	[31099] = 24206,
+	[31100] = 24207, 	[31101] = 24208, 	[31102] = 24209, 	[31103] = 24210,
+	[31104] = 24211, 	[31105] = 24212, 	[31106] = 24213, 	[31107] = 24214,
+	[31108] = 24215, 	[31109] = 24216, 	[31110] = 24217, 	[31111] = 24218,
+	[31112] = 24219, 	[31113] = 24220, 	[31149] = 24200, 	[32866] = 25902,
+	[32867] = 25903, 	[32868] = 25905, 	[32869] = 25906, 	[32870] = 25904,
+	[32871] = 25907, 	[32872] = 25909, 	[32873] = 25908, 	[32874] = 25910,
+	[34069] = 28291, 	[34590] = 28596, 	[37855] = 30826, 	[38503] = 31401,
+	[38504] = 31402, 	[39451] = 31870, 	[39452] = 31875, 	[39455] = 31871,
+	[39458] = 31872, 	[39462] = 31877, 	[39463] = 31876, 	[39466] = 31873,
+	[39467] = 31874, 	[39470] = 31878, 	[39471] = 31879, 	[39705] = 35244,
+	[39706] = 35246, 	[39710] = 35250, 	[39711] = 35248, 	[39712] = 35245,
+	[39713] = 35249, 	[39714] = 35247, 	[39715] = 35263, 	[39716] = 35264,
+	[39717] = 35262, 	[39718] = 35265, 	[39719] = 35255, 	[39720] = 35260,
+	[39721] = 35259, 	[39722] = 35256, 	[39723] = 35261, 	[39724] = 35258,
+	[39725] = 35257, 	[39727] = 35243, 	[39728] = 35242, 	[39729] = 35238,
+	[39730] = 35240, 	[39731] = 35239, 	[39732] = 35241, 	[39733] = 35267,
+	[39734] = 35269, 	[39735] = 35268, 	[39736] = 35266, 	[39737] = 35270,
+	[39738] = 35271, 	[39739] = 35252, 	[39740] = 35254, 	[39741] = 35251,
+	[39742] = 35253, 	[39961] = 33622, 	[39963] = 32411, 	[42558] = 33305,
+	[42588] = 33155, 	[42589] = 33156, 	[42590] = 33157, 	[42591] = 33158,
+	[42592] = 33159, 	[42593] = 33160, 	[43493] = 33783, 	[44794] = 34689,
+	[46122] = 35198, 	[46123] = 35538, 	[46124] = 35200, 	[46125] = 35201,
+	[46126] = 35533, 	[46127] = 35203, 	[46403] = 35322, 	[46404] = 35323,
+	[46405] = 35325, 	[46597] = 35502, 	[46601] = 35505, 	[46775] = 35695,
+	[46776] = 35696, 	[46777] = 35697, 	[46778] = 35698, 	[46779] = 35699,
+	[46803] = 35708, 	[47053] = 35769, 	[47054] = 35766, 	[47055] = 35767,
+	[47056] = 35768, 	[48789] = 37504, 	[53830] = 41576, 	[53857] = 41559,
+	[53865] = 41575, 	[53869] = 41574, 	[53875] = 41566, 	[53877] = 41562,
+	[53879] = 41565, 	[53884] = 41563, 	[53885] = 41561, 	[53888] = 41564,
+	[53917] = 41567, 	[53919] = 41572, 	[53921] = 41568, 	[53924] = 41571,
+	[53929] = 41573, 	[53932] = 41570, 	[53933] = 41569, 	[53943] = 41560,
+	[53945] = 41577, 	[53946] = 41718, 	[53948] = 41719, 	[53949] = 41578,
+	[53950] = 41817, 	[53951] = 41790, 	[53952] = 42138, 	[53954] = 41581,
+	[53955] = 41728, 	[53957] = 41720, 	[53958] = 41580, 	[53959] = 41791,
+	[53960] = 41727, 	[53961] = 41579, 	[53962] = 41784, 	[53963] = 41747,
+	[53964] = 41785, 	[53965] = 41725, 	[53966] = 41783, 	[53967] = 41701,
+	[53968] = 41740, 	[53970] = 41796, 	[53971] = 41703, 	[53972] = 41820,
+	[53973] = 41702, 	[53974] = 41726, 	[53975] = 41789, 	[53976] = 41777,
+	[53977] = 41780, 	[53978] = 41734, 	[53979] = 41794, 	[53980] = 41582,
+	[53981] = 41733, 	[53982] = 41792, 	[53983] = 41689, 	[53984] = 41686,
+	[53985] = 41688, 	[53986] = 41730, 	[53987] = 41690, 	[53988] = 41721,
+	[53990] = 41732, 	[53991] = 41687, 	[53992] = 41779, 	[53993] = 41722,
+	[53994] = 41818, 	[53995] = 41795, 	[53996] = 41723, 	[53997] = 41698,
+	[53998] = 41697, 	[54000] = 41738, 	[54001] = 41693, 	[54002] = 41699,
+	[54003] = 41781, 	[54004] = 41782, 	[54005] = 41737, 	[54006] = 41694,
+	[54008] = 41724, 	[54009] = 41696, 	[54010] = 41739, 	[54011] = 41692,
+	[54012] = 41819, 	[54013] = 41736, 	[54014] = 41735, 	[54019] = 41793,
+	[54023] = 41778, 	[55384] = 41705, 	[55387] = 41743, 	[55388] = 41744,
+	[55389] = 41704, 	[55390] = 41786, 	[55392] = 41706, 	[55393] = 41742,
+	[55395] = 41787, 	[55396] = 41708, 	[55397] = 41798, 	[55398] = 41799,
+	[55400] = 41710, 	[55401] = 41797, 	[55403] = 41711, 	[55404] = 41709,
+	[55405] = 41788, 	[55407] = 41707, 	[56049] = 42298, 	[56052] = 42301,
+	[56053] = 42309, 	[56054] = 42299, 	[56055] = 42314, 	[56056] = 42302,
+	[56074] = 42300, 	[56076] = 42303, 	[56077] = 42304, 	[56079] = 42305,
+	[56081] = 42306, 	[56083] = 42307, 	[56084] = 42308, 	[56085] = 42310,
+	[56086] = 42311, 	[56087] = 42312, 	[56088] = 42313, 	[56089] = 42315,
+	[56496] = 42648, 	[56497] = 42649, 	[56498] = 42650, 	[56499] = 42651,
+	[56500] = 42652, 	[56501] = 42653, 	[58147] = 43317, 	[58148] = 43318,
+	[58149] = 43319, 	[58150] = 43320, 	[58492] = 43485, 	[58507] = 43497,
+	[58954] = 43597,	[66556] = 46937,	[66447] = 46917,	[66429] = 46899,
+	[66557] = 46938,	[66430] = 46900,	[66432] = 46902,	[66433] = 46903,
+	[66497] = 46924,	[66561] = 46942,	[66434] = 46904,	[66498] = 46925,
+	[66499] = 46926,	[66436] = 46906,	[66500] = 46927,	[66437] = 46907,
+	[66501] = 46928,	[66565] = 46946,	[66438] = 46908,	[66502] = 46929,
+	[66566] = 46947,	[66439] = 46909,	[66503] = 46930,	[66567] = 46948,
+	[66440] = 46910,	[66504] = 46931,	[66441] = 46911,	[66505] = 46932,
+	[66569] = 46950,	[66442] = 46912,	[66506] = 46933,	[66570] = 46951,
+	[66443] = 46913,	[66444] = 46914,	[66572] = 46953,	[66445] = 46915,
+	[66573] = 46956,	[66446] = 46916,	[66574] = 47007,	[66575] = 47008,
+	[66448] = 46918,	[66576] = 47010,	[66449] = 46919,	[66577] = 47011,
+	[66450] = 46920,	[66578] = 47012,	[66451] = 46921,	[66579] = 47015,
+	[66452] = 46922,	[66580] = 47016,	[66453] = 46923,	[66581] = 47017,
+	[66582] = 47018,	[66583] = 47019,	[66584] = 47020,	[66586] = 47022,
+	[68253] = 49112,	[66338] = 46897,	[66571] = 46952,	[66564] = 46945,
+	[66562] = 46943,	[66560] = 46941,	[66558] = 46939,	[66554] = 46935,
+	[66559] = 46940,	[66585] = 47021,	[66555] = 46936,	[66587] = 47023,
+	[66431] = 46901,	[66428] = 46898,	[66435] = 46905,	[66563] = 46944,
+	[66553] = 46934,	[66568] = 46949,
+
+	-------------------------------------------------------------------------------
+	--Leatherworking
+	-------------------------------------------------------------------------------
+	[2158] = 2406, 		[2163] = 2407, 		[2164] = 2408, 		[2169] = 2409,
+	[3762] = 4293, 		[3765] = 7360, 		[3767] = 4294, 		[3769] = 4296,
+	[3771] = 4297, 		[3772] = 7613, 		[3773] = 4299, 		[3775] = 4298,
+	[3777] = 4300, 		[3778] = 14635, 	[3779] = 4301, 		[4096] = 13287,
+	[4097] = 13288, 	[5244] = 5083, 		[6702] = 5786, 		[6703] = 5787,
+	[6704] = 5788, 		[6705] = 5789, 		[7133] = 5972, 		[7149] = 5973,
+	[7153] = 5974, 		[7953] = 6474, 		[7954] = 6475, 		[7955] = 6476,
+	[8322] = 6710, 		[9064] = 7288, 		[9070] = 7289, 		[9072] = 7290,
+	[9146] = 7361, 		[9147] = 7362, 		[9148] = 7363, 		[9149] = 7364,
+	[9195] = 7449, 		[9197] = 7450, 		[9202] = 7451, 		[9207] = 7452,
+	[9208] = 7453, 		[10490] = 8384, 	[10509] = 8385, 	[10516] = 8409,
+	[10520] = 8386, 	[10525] = 8395, 	[10529] = 8403, 	[10531] = 8387,
+	[10533] = 8397, 	[10542] = 8398, 	[10544] = 8404, 	[10546] = 8405,
+	[10554] = 8399, 	[10560] = 8389, 	[10562] = 8390, 	[10564] = 8400,
+	[10566] = 8406, 	[10568] = 8401, 	[10570] = 8402, 	[10572] = 8407,
+	[10574] = 8408, 	[19048] = 15724, 	[19049] = 15725, 	[19050] = 15726,
+	[19051] = 15727, 	[19052] = 15728, 	[19053] = 15729, 	[19054] = 15730,
+	[19055] = 15731, 	[19059] = 15732, 	[19060] = 15733, 	[19061] = 15734,
+	[19062] = 15735, 	[19063] = 15737, 	[19064] = 15738, 	[19065] = 15739,
+	[19066] = 15740, 	[19067] = 15741, 	[19068] = 20253, 	[19070] = 15743,
+	[19071] = 15744, 	[19072] = 15745, 	[19073] = 15746, 	[19074] = 15747,
+	[19075] = 15748, 	[19076] = 15749, 	[19077] = 15751, 	[19078] = 15752,
+	[19079] = 15753, 	[19080] = 20254, 	[19081] = 15755, 	[19082] = 15756,
+	[19083] = 15757, 	[19084] = 15758, 	[19085] = 15759, 	[19086] = 15760,
+	[19087] = 15761, 	[19088] = 15762, 	[19089] = 15763, 	[19090] = 15764,
+	[19091] = 15765, 	[19092] = 15768, 	[19093] = 15769, 	[19094] = 15770,
+	[19095] = 15771, 	[19097] = 15772, 	[19098] = 15773, 	[19100] = 15774,
+	[19101] = 15775, 	[19102] = 15776, 	[19103] = 15777, 	[19104] = 15779,
+	[19107] = 15781, 	[20853] = 17022, 	[20854] = 17023, 	[20855] = 17025,
+	[21943] = 17722, 	[22711] = 18239, 	[22727] = 18252, 	[22921] = 18514,
+	[22922] = 18515, 	[22923] = 18516, 	[22926] = 18517, 	[22927] = 18518,
+	[22928] = 18519, 	[23190] = 18731, 	[23399] = 18949, 	[23703] = 19326,
+	[23704] = 19327, 	[23705] = 19328, 	[23706] = 19329, 	[23707] = 19330,
+	[23708] = 19331, 	[23709] = 19332, 	[23710] = 19333, 	[24121] = 19769,
+	[24122] = 19770, 	[24123] = 19771, 	[24124] = 19772, 	[24125] = 19773,
+	[24703] = 20382, 	[24846] = 20506, 	[24847] = 20507, 	[24848] = 20508,
+	[24849] = 20509, 	[24850] = 20510, 	[24851] = 20511, 	[24940] = 20576,
+	[26279] = 21548, 	[28472] = 22771, 	[28473] = 22770, 	[28474] = 22769,
+	[32455] = 25720, 	[32457] = 25721, 	[32458] = 25722, 	[32461] = 25725,
+	[32482] = 25726, 	[32485] = 25728, 	[32487] = 25729, 	[32488] = 25731,
+	[32489] = 25730, 	[32490] = 25732, 	[32493] = 25733, 	[32494] = 25734,
+	[32495] = 25735, 	[32496] = 25736, 	[32497] = 25737, 	[32498] = 29213,
+	[32499] = 29214, 	[32500] = 29215, 	[32501] = 29217, 	[32502] = 29219,
+	[32503] = 29218, 	[35520] = 29669, 	[35521] = 29672, 	[35522] = 29673,
+	[35523] = 29674, 	[35524] = 29675, 	[35525] = 29677, 	[35526] = 29682,
+	[35527] = 29684, 	[35528] = 29691, 	[35529] = 29689, 	[35530] = 30444,
+	[35531] = 29693, 	[35532] = 29698, 	[35533] = 29700, 	[35534] = 29701,
+	[35535] = 29702, 	[35536] = 29703, 	[35537] = 29704, 	[35538] = 29713,
+	[35539] = 34175, 	[35543] = 29717, 	[35544] = 34173, 	[35549] = 31361,
+	[35554] = 31362, 	[35555] = 29720, 	[35557] = 29721, 	[35558] = 29723,
+	[35559] = 35302, 	[35560] = 29725, 	[35561] = 29726, 	[35562] = 35303,
+	[35563] = 29728, 	[35564] = 29729, 	[35567] = 29730, 	[35568] = 35300,
+	[35572] = 29732, 	[35573] = 35301, 	[35574] = 29734, 	[36349] = 30301,
+	[36351] = 30302, 	[36352] = 30303, 	[36353] = 30304, 	[36355] = 30305,
+	[36357] = 30306, 	[36358] = 30307, 	[36359] = 30308, 	[39997] = 32429,
+	[40001] = 32431, 	[40002] = 32432, 	[40003] = 32433, 	[40004] = 32434,
+	[40005] = 32435, 	[40006] = 32436, 	[41156] = 32744, 	[41157] = 35523,
+	[41158] = 35527, 	[41160] = 35528, 	[41161] = 35517, 	[41162] = 35524,
+	[41163] = 35520, 	[41164] = 35521, 	[42546] = 33124, 	[42731] = 33205,
+	[44359] = 34200, 	[44768] = 34218, 	[44953] = 34262, 	[45117] = 34491,
+	[46132] = 35546, 	[46133] = 35541, 	[46134] = 35214, 	[46135] = 35215,
+	[46136] = 35216, 	[46137] = 35217, 	[46138] = 35218, 	[46139] = 35549,
+	[50970] = 44509, 	[50971] = 44510, 	[52733] = 32430,
+	[57692] = 44559, 	[57694] = 44560, 	[57696] = 44561, 	[57699] = 44562,
+	[57701] = 44563, 	[60645] = 44511, 	[60647] = 44512, 	[60697] = 44513,
+	[60702] = 44514, 	[60703] = 44515, 	[60704] = 44516, 	[60705] = 44517,
+	[60706] = 44518, 	[60711] = 44519, 	[60712] = 44520, 	[60715] = 44521,
+	[60716] = 44522, 	[60718] = 44523, 	[60720] = 44524, 	[60721] = 44525,
+	[60723] = 44526, 	[60725] = 44527, 	[60727] = 44528, 	[60728] = 44530,
+	[60729] = 44531, 	[60730] = 44532, 	[60731] = 44533, 	[60732] = 44534,
+	[60734] = 44535, 	[60735] = 44536, 	[60737] = 44537, 	[60743] = 44538,
+	[60746] = 44539, 	[60747] = 44540, 	[60748] = 44541, 	[60749] = 44542,
+	[60750] = 44543, 	[60751] = 44544, 	[60752] = 44545, 	[60754] = 44546,
+	[60755] = 44547, 	[60756] = 44548, 	[60757] = 44549, 	[60758] = 44550,
+	[60759] = 44551, 	[60760] = 44552, 	[60761] = 44553, 	[60996] = 44584,
+	[60997] = 44585, 	[60998] = 44586, 	[60999] = 44587, 	[61000] = 44588,
+	[61002] = 44589, 	[62176] = 44932, 	[62177] = 44933, 	[63194] = 45094,
+	[63195] = 45095, 	[63196] = 45096, 	[63197] = 45097, 	[63198] = 45098,
+	[63199] = 45099, 	[63200] = 45100, 	[63201] = 45101,	[70554] = 49957,
+	[70555] = 49958,	[70556] = 49959,	[70557] = 49961,	[70558] = 49962,
+	[70559] = 49963,	[70560] = 49965,	[70561] = 49966,	[67136] = 47650,
+	[67137] = 47646,	[67138] = 47649,	[67139] = 47647,	[67141] = 47653,
+	[67142] = 47651,	[67143] = 47648,	[67140] = 47652,
+
+	-------------------------------------------------------------------------------
+	--Smelting
+	-------------------------------------------------------------------------------
+	[22967] = 44956, 	[46353] = 35273,
+
+	-------------------------------------------------------------------------------
+	--Tailoring
+	-------------------------------------------------------------------------------
+	[2389] = 2598, 		[2403] = 2601, 		[3758] = 4292, 		[3844] = 4346,
+	[3847] = 4345, 		[3849] = 4347, 		[3851] = 4349, 		[3854] = 7114,
+	[3856] = 4350, 		[3857] = 14630, 	[3858] = 4351, 		[3860] = 4352,
+	[3862] = 4355, 		[3863] = 4353, 		[3864] = 4356, 		[3868] = 4348,
+	[3869] = 14627, 	[3870] = 6401, 		[3872] = 4354, 		[3873] = 10728,
+	[6686] = 5771, 		[6688] = 5772, 		[6692] = 5773, 		[6693] = 5774,
+	[6695] = 5775, 		[7629] = 6271, 		[7630] = 6270, 		[7633] = 6272,
+	[7639] = 6274, 		[7643] = 6275, 		[7892] = 6390, 		[7893] = 6391,
+	[8780] = 7092, 		[8782] = 7091, 		[8784] = 7090, 		[8786] = 7089,
+	[8789] = 7087, 		[8793] = 7084, 		[8795] = 7085, 		[8797] = 7086,
+	[8802] = 7088, 		[12047] = 10316, 	[12056] = 10300, 	[12059] = 10301,
+	[12060] = 10302, 	[12064] = 10311, 	[12066] = 10312, 	[12075] = 10314,
+	[12078] = 10315, 	[12080] = 10317, 	[12081] = 10318, 	[12084] = 10320,
+	[12085] = 10321, 	[12086] = 10463, 	[12089] = 10323, 	[12091] = 10325,
+	[12093] = 10326, 	[18403] = 14466, 	[18404] = 14467, 	[18405] = 14468,
+	[18406] = 14469, 	[18407] = 14470, 	[18408] = 14471, 	[18409] = 14472,
+	[18410] = 14473, 	[18411] = 14474, 	[18412] = 14476, 	[18413] = 14477,
+	[18414] = 14478, 	[18415] = 14479, 	[18416] = 14480, 	[18417] = 14481,
+	[18418] = 14482, 	[18419] = 14483, 	[18420] = 14484, 	[18421] = 14485,
+	[18422] = 14486, 	[18423] = 14488, 	[18424] = 14489, 	[18434] = 14490,
+	[18436] = 14493, 	[18437] = 14492, 	[18438] = 14491, 	[18439] = 14494,
+	[18440] = 14497, 	[18441] = 14495, 	[18442] = 14496, 	[18444] = 14498,
+	[18445] = 14499, 	[18446] = 14500, 	[18447] = 14501, 	[18448] = 14507,
+	[18449] = 14504, 	[18450] = 14505, 	[18451] = 14506, 	[18452] = 14509,
+	[18453] = 14508, 	[18454] = 14511, 	[18455] = 14510, 	[18456] = 14512,
+	[18457] = 14513, 	[18458] = 14514, 	[18560] = 14526, 	[20848] = 17017,
+	[20849] = 17018, 	[21945] = 17724, 	[22759] = 18265, 	[22866] = 18414,
+	[22867] = 18415, 	[22868] = 18416, 	[22869] = 18417, 	[22870] = 18418,
+	[22902] = 18487, 	[23662] = 19215, 	[23663] = 19218, 	[23664] = 19216,
+	[23665] = 19217, 	[23666] = 19219, 	[23667] = 19220, 	[24091] = 19764,
+	[24092] = 19765, 	[24093] = 19766, 	[24901] = 20546, 	[24902] = 20548,
+	[24903] = 20547, 	[26085] = 21358, 	[26087] = 21371, 	[26403] = 44916,
+	[26407] = 44917, 	[26747] = 21892, 	[26749] = 21893, 	[26750] = 21894,
+	[26751] = 21895, 	[26752] = 21908, 	[26753] = 21909, 	[26754] = 21910,
+	[26755] = 21911, 	[26756] = 21912, 	[26757] = 21914, 	[26758] = 21913,
+	[26759] = 21915, 	[26760] = 21916, 	[26761] = 21918, 	[26762] = 21917,
+	[26763] = 21919, 	[26773] = 21896, 	[26774] = 21897, 	[26775] = 21898,
+	[26776] = 21899, 	[26777] = 21900, 	[26778] = 21901, 	[26779] = 21902,
+	[26780] = 21903, 	[26781] = 21904, 	[26782] = 21905, 	[26783] = 21906,
+	[26784] = 21907, 	[27658] = 22307, 	[27659] = 22308, 	[27660] = 22309,
+	[27724] = 22310, 	[27725] = 22312, 	[28210] = 22683, 	[28480] = 22774,
+	[28481] = 22773, 	[28482] = 22772, 	[31373] = 24316, 	[31430] = 24292,
+	[31431] = 24293, 	[31432] = 24294, 	[31433] = 24295, 	[31434] = 35308,
+	[31435] = 24297, 	[31437] = 24298, 	[31438] = 24299, 	[31440] = 24300,
+	[31441] = 24301, 	[31442] = 35309, 	[31443] = 24303, 	[31444] = 24304,
+	[31448] = 24305, 	[31449] = 24306, 	[31450] = 24307, 	[31451] = 24308,
+	[31452] = 24309, 	[31453] = 24310, 	[31454] = 24311, 	[31455] = 24312,
+	[31456] = 24313, 	[31459] = 24314, 	[36315] = 30280, 	[36316] = 30281,
+	[36317] = 30282, 	[36318] = 30283, 	[36686] = 30483, 	[37873] = 30833,
+	[37882] = 30842, 	[37883] = 30843, 	[37884] = 30844, 	[40020] = 32437,
+	[40021] = 32438, 	[40023] = 32439, 	[40024] = 32440, 	[40060] = 32447,
+	[41205] = 32754, 	[41206] = 32755, 	[41207] = 32752, 	[41208] = 32753,
+	[44950] = 34261, 	[44958] = 34319, 	[46128] = 35204, 	[46129] = 35205,
+	[46130] = 35206, 	[46131] = 35207, 	[49677] = 37915, 	[50194] = 38229,
+	[50644] = 38327, 	[50647] = 38328, 	[55993] = 42172, 	[55994] = 42173,
+	[55996] = 42175, 	[55997] = 42177, 	[55998] = 42176, 	[55999] = 42178,
+	[56004] = 42183, 	[56005] = 42184, 	[56006] = 42185, 	[56009] = 42187,
+	[56011] = 42188, 	[63924] = 45774,	[70550] = 49953,	[70551] = 49954,
+	[70552] = 49955,	[70553] = 49956,	[63203] = 45102,	[63205] = 45104,
+	[63206] = 45105,	[67145] = 47639,	[67146] = 47638,	[63204] = 45103,
+	[67144] = 47636,	[67147] = 47637,
+}
+
+local RECIPE_TO_SPELL_MAP = {}
+
+do
+	for spell_id, recipe_id in pairs(SPELL_TO_RECIPE_MAP) do
+		RECIPE_TO_SPELL_MAP[recipe_id] = spell_id
+	end
+end
+
+-------------------------------------------------------------------------------
+-- Look up table of spell IDs for recipes which do not have a player flag
+-- BASICALLY A TEMPORARY STORAGE FOR IDS, SO WE CAN SEE CLEANER SCANS AND WHAT NOT,
+-- WE'LL GO BACK HERE LATER DOWN THE ROAD.
+-------------------------------------------------------------------------------
+local NO_ROLE_FLAG = {
+
+	--------------------------------------------------------------------------------------------
+	-----ASSORTED CRAP
+	--------------------------------------------------------------------------------------------
+	[30344] = true, 		[30341] = true, 		[32814] = true, 		[23066] = true,
+	[26421] = true, 		[36955] = true, 		[19788] = true, 		[23129] = true,
+	[26422] = true, 		[12715] = true, 		[12899] = true, 		[56459] = true,
+	[30307] = true, 		[26423] = true, 		[3918] = true,	 		[23067] = true,
+	[30308] = true, 		[3953] = true,			[15255] = true, 		[26424] = true,
+	[30548] = true, 		[44157] = true, 		[56462] = true, 		[19567] = true,
+	[30552] = true, 		[23068] = true, 		[44155] = true, 		[28327] = true,
+	[26425] = true, 		[56461] = true, 		[68067] = true, 		[15633] = true,
+	[23096] = true, 		[12589] = true, 		[26442] = true, 		[26426] = true,
+	[67920] = true, 		[9273] = true,			[3926] = true,			[6458] = true,
+	[19793] = true, 		[55252] = true, 		[9271] = true,			[26427] = true,
+	[26443] = true, 		[30551] = true, 		[23486] = true, 		[3922] = true,
+	[3924] = true,			[12590] = true, 		[3928] = true,			[3942] = true,
+	[26428] = true, 		[3952] = true,	 		[22704] = true, 		[12902] = true,
+	[30569] = true, 		[15628] = true, 		[12895] = true, 		[21940] = true,
+	[56349] = true, 		[12584] = true, 		[56477] = true, 		[30348] = true,
+	[26416] = true, 		[53281] = true, 		[23507] = true,			[12075] = true,
+	[12079] = true,			[26746] = true,			[56000] = true,
+
+	-----------------------------------------------------------------------------------------
+	---JEWELCRAFTING
+	-----------------------------------------------------------------------------------------
+	[55401] = true,	[53995] = true,	[66432] = true,	[25255] = true,
+	[66497] = true, [53996] = true, [56074] = true, [56202] = true,
+	[66434] = true, [32801] = true, [28948] = true, [53997] = true,
+	[39963] = true, [32866] = true, [66501] = true, [39452] = true,
+	[53934] = true, [66502] = true, [55405] = true, [58954] = true,
+	[56205] = true, [37855] = true, [38175] = true, [25305] = true,
+	[25321] = true, [66505] = true, [54000] = true, [39742] = true,
+	[56206] = true, [66506] = true, [32869] = true, [54001] = true,
+	[56079] = true, [32259] = true, [32870] = true, [56208] = true,
+	[32807] = true, [32871] = true, [26873] = true, [31061] = true,
+	[32872] = true, [42591] = true, [46779] = true, [56530] = true,
+	[42592] = true, [31062] = true, [56083] = true, [32874] = true,
+	[56531] = true, [31063] = true, [56085] = true, [38503] = true,
+	[56086] = true, [28938] = true, [38504] = true, [31064] = true,
+	[31096] = true, [55384] = true, [25278] = true, [68253] = true,
+	[43493] = true, [26925] = true, [31065] = true, [46403] = true,
+	[53852] = true, [53916] = true, [39722] = true, [25615] = true,
+	[28924] = true, [26926] = true, [53853] = true, [36526] = true,
+	[31098] = true, [55388] = true, [46405] = true, [53854] = true,
+	[39724] = true, [55389] = true, [26927] = true, [31051] = true,
+	[53919] = true, [39725] = true, [55390] = true, [53856] = true,
+	[53920] = true, [53952] = true, [26880] = true, [53857] = true,
+	[31052] = true, [34069] = true, [25490] = true, [55393] = true,
+	[39451] = true, [53956] = true, [44794] = true, [36524] = true,
+	[55395] = true, [38068] = true, [28944] = true, [53957] = true,
+	[31066] = true, [31082] = true, [66428] = true, [26909] = true,
+	[55396] = true, [31097] = true, [25284] = true, [56084] = true,
+	[62941] = true, [66431] = true, [53894] = true, [53958] = true,
+	[58146] = true, [31099] = true, [47053] = true, [31067] = true,
+	[28917] = true, [26903] = true, [36525] = true, [66503] = true,
+	[56197] = true, [47054] = true, [53961] = true, [39715] = true,
+	[31092] = true, [53960] = true, [31077] = true, [31101] = true,
+	[39719] = true, [55399] = true, [31113] = true, [32808] = true,
+	[53917] = true, [63743] = true, [39720] = true, [39721] = true,
+	[42590] = true, [58149] = true, [56199] = true, [47056] = true,
+	[28950] = true, [47280] = true, [32809] = true, [31072] = true,
+	[25318] = true, [66429] = true, [62242] = true,
+	---------------------------------------------------------------------------------------
+
+	---------------------------------------------------------------------------------------
+	---COOKING
+	---------------------------------------------------------------------------------------
+	[62050]= true, [22761]= true, [62051]= true, [8607]= true,
+	[18238]= true, [6413]= true, [6417]= true, [42296]= true,
+	[45557]= true, [6501]= true, [45558]= true, [18239]= true,
+	[7752]= true, [7828]= true, [45560]= true, [64358]= true,
+	[57421]= true, [45561]= true, [13028]= true, [2543]= true,
+	[2545]= true, [25659]= true, [58512]= true, [45565]= true,
+	[42305]= true, [45566]= true, [62350]= true, [7753]= true,
+	[45695]= true, [9513]= true, [18244]= true, [20626]= true,
+	[45569]= true, [43779]= true, [18245]= true, [45571]= true,
+	[18246]= true, [37836]= true, [57433]= true, [20916]= true,
+	[58521]= true, [18247]= true, [57435]= true, [7754]= true,
+	[53056]= true, [58523]= true, [57437]= true, [57438]= true,
+	[58525]= true, [45570]= true, [2538]= true, [2540]= true,
+	[2548]= true, [33290]= true, [45562]= true, [15906]= true,
+	[18241]= true, [45559]= true, [45551]= true, [57443]= true,
+	[58527]= true, [43758]= true, [58528]= true, [8238]= true,
+	[7751]= true, [7755]= true, [43761]= true, [7827]= true,
+	[45552]= true, [45553]= true, [66038] = true, [66034] = true,
+	---------------------------------------------------------------------------------------
+
+	---------------------------------------------------------------------------------------
+	---BLACKSMITHING
+	---------------------------------------------------------------------------------------
+	[10015] = true, [55202] = true, [16726] = true, [24399] = true,
+	[15293] = true, [32655] = true, [3320] = true, [40033] = true,
+	[34545] = true, [61010] = true, [16639] = true, [3115] = true,
+	[3116] = true, [3117] = true, [16648] = true, [40034] = true,
+	[9920] = true, [9928] = true, [29558] = true, [55839] = true,
+	[9964] = true, [7818] = true, [55732] = true, [29694] = true,
+	[3326] = true, [9950] = true, [59405] = true, [12260] = true,
+	[16983] = true, [16991] = true, [23650] = true, [16640] = true,
+	[2741] = true, [3513] = true, [3497] = true, [8768] = true,
+	[19666] = true, [2662] = true, [2663] = true, [20201] = true,
+	[16664] = true, [15294] = true, [3496] = true, [16645] = true,
+	[29569] = true, [2737] = true, [14380] = true, [16992] = true,
+	[36125] = true, [19667] = true, [22757] = true, [16665] = true,
+	[59406] = true, [2738] = true, [2739] = true, [2740] = true,
+	[24913] = true, [9933] = true, [20873] = true, [36126] = true,
+	[40035] = true, [8880] = true, [23636] = true, [3292] = true,
+	[3293] = true, [21161] = true, [32656] = true, [19668] = true,
+	[9921] = true, [7222] = true, [3319] = true, [15295] = true,
+	[20874] = true, [20890] = true, [3337] = true, [34546] = true,
+	[16970] = true, [16978] = true, [61008] = true, [7224] = true,
+	[11454] = true, [19669] = true, [55656] = true, [16667] = true,
+	[16731] = true, [61009] = true, [9926] = true, [16984] = true,
+	[21913] = true, [40036] = true, [9974] = true, [32657] = true,
+	[32285] = true, [23638] = true, [10011] = true, [36131] = true,
+	[27830] = true,  [32284] = true, [16732] = true, [15292] = true,
+	[15296] = true, [38478] = true, [20876] = true, [38475] = true,
+	[23653] = true, [3325] = true, [14379] = true,  [29729] = true,
+	[2661] = true,  [29728] = true, [16655] = true, [16993] = true,
+	[3491] = true, [3494] = true, [3501] = true, [9959] = true,
+	[9983] = true, [36262] = true, [10003] = true, [10007] = true,
+	---------------------------------------------------------------------------------------
+
+	---------------------------------------------------------------------------------------
+	----INSCRIPTION
+	---------------------------------------------------------------------------------------
+	[58315] = true, [58331] = true, [58347] = true, [56974] = true, [56990] = true,
+	[64256] = true, [64304] = true, [57166] = true, [57709] = true, [57214] = true,
+	[57230] = true, [50603] = true, [57262] = true, [59338] = true, [58332] = true,
+	[56959] = true, [56975] = true, [56991] = true, [57007] = true, [57023] = true,
+	[53462] = true, [64257] = true, [64273] = true, [64289] = true, [57151] = true,
+	[57167] = true, [57183] = true, [57710] = true, [57215] = true, [57247] = true,
+	[50620] = true, [58301] = true, [59339] = true, [58333] = true, [59387] = true,
+	[52840] = true, [59499] = true, [56960] = true, [56976] = true, [57008] = true,
+	[57024] = true, [64258] = true, [64274] = true, [57168] = true, [57184] = true,
+	[61288] = true, [57216] = true, [57232] = true, [58286] = true, [58302] = true,
+	[59340] = true, [48114] = true, [64051] = true, [59484] = true, [59500] = true,
+	[56961] = true, [56977] = true, [57009] = true, [57025] = true, [61177] = true,
+	[64259] = true, [57121] = true, [64291] = true, [57153] = true, [57169] = true,
+	[57185] = true, [57712] = true, [57217] = true, [57233] = true, [58287] = true,
+	[58303] = true, [58319] = true, [56946] = true, [56978] = true, [56994] = true,
+	[57010] = true, [57026] = true, [64260] = true, [57122] = true, [57154] = true,
+	[57170] = true, [57186] = true, [57713] = true, [57218] = true, [57234] = true,
+	[57266] = true, [59326] = true, [58320] = true, [58336] = true, [59486] = true,
+	[59502] = true, [56963] = true, [56995] = true, [57011] = true, [57027] = true,
+	[64261] = true, [64277] = true, [57155] = true, [57187] = true, [57714] = true,
+	[57219] = true, [57235] = true, [58289] = true, [58305] = true, [58321] = true,
+	[58337] = true, [69385] = true, [57243] = true, [64314] = true, [64313] = true,
+	[56958] = true, [59487] = true, [59503] = true, [58288] = true, [56980] = true,
+	[56996] = true, [57012] = true, [57028] = true, [59501] = true, [56948] = true,
+	[57264] = true, [64246] = true, [64262] = true, [57124] = true, [64294] = true,
+	[57156] = true, [57172] = true, [57188] = true, [57715] = true, [57220] = true,
+	[57236] = true, [57268] = true, [58306] = true, [58322] = true, [58338] = true,
+	[48247] = true, [57133] = true, [57270] = true, [57131] = true, [57129] = true,
+	[50604] = true, [59488] = true, [59504] = true, [56965] = true, [56981] = true,
+	[56997] = true, [57013] = true, [57029] = true, [64280] = true, [57114] = true,
+	[64286] = true, [58299] = true, [57125] = true, [64295] = true, [64311] = true,
+	[57164] = true, [57189] = true, [57716] = true, [57221] = true, [57237] = true,
+	[57269] = true, [58307] = true, [58323] = true, [58339] = true, [64307] = true,
+	[57119] = true, [57246] = true, [68166] = true, [64282] = true, [57250] = true,
+	[59489] = true, [56957] = true, [56982] = true, [56998] = true, [57014] = true,
+	[57117] = true, [64305] = true, [61677] = true, [52843] = true, [57126] = true,
+	[64296] = true, [57158] = true, [64310] = true, [57190] = true, [56956] = true,
+	[57238] = true, [60336] = true, [58308] = true, [58324] = true, [58340] = true,
+	[64315] = true, [56949] = true, [56950] = true, [64308] = true, [56955] = true,
+	[59490] = true, [59315] = true, [56983] = true, [56999] = true, [64267] = true,
+	[57031] = true, [56954] = true, [64276] = true, [57249] = true, [64249] = true,
+	[56953] = true, [57127] = true, [64297] = true, [57159] = true, [64275] = true,
+	[57191] = true, [57207] = true, [57223] = true, [57239] = true, [50612] = true,
+	[60337] = true, [57208] = true, [58325] = true, [48121] = true, [56952] = true,
+	[56947] = true, [56951] = true, [64268] = true, [57123] = true, [59475] = true,
+	[59491] = true, [56968] = true, [56984] = true, [57000] = true, [48248] = true,
+	[58565] = true, [58317] = true, [64266] = true, [57252] = true, [64250] = true,
+	[57112] = true, [57128] = true, [64298] = true, [57160] = true, [58316] = true,
+	[57703] = true, [57719] = true, [57224] = true, [57240] = true, [57272] = true,
+	[58310] = true, [58326] = true, [58342] = true, [57201] = true, [56945] = true,
+	[57200] = true, [56944] = true, [57711] = true, [56985] = true, [57001] = true,
+	[57199] = true, [57033] = true, [56943] = true, [57198] = true, [64251] = true,
+	[57113] = true, [64283] = true, [64299] = true, [57161] = true, [57197] = true,
+	[57704] = true, [57209] = true, [57225] = true, [57241] = true, [50614] = true,
+	[57273] = true, [58311] = true, [58327] = true, [58343] = true, [52738] = true,
+	[57196] = true, [64278] = true, [57195] = true, [58318] = true, [64284] = true,
+	[57006] = true, [64316] = true, [56986] = true, [57002] = true, [59560] = true,
+	[57034] = true, [58341] = true, [57192] = true, [64252] = true, [67600] = true,
+	[57130] = true, [64300] = true, [57162] = true, [57244] = true, [57194] = true,
+	[57210] = true, [57226] = true, [50599] = true, [57258] = true, [58296] = true,
+	[58312] = true, [58328] = true, [58344] = true, [52739] = true, [58298] = true,
+	[57274] = true, [57265] = true, [57251] = true, [59478] = true, [56971] = true,
+	[56987] = true, [57003] = true, [57019] = true, [57035] = true, [57259] = true,
+	[57263] = true, [57271] = true, [64253] = true, [57115] = true, [64285] = true,
+	[57242] = true, [57163] = true, [57120] = true, [57706] = true, [57211] = true,
+	[57227] = true, [50600] = true, [50616] = true, [58297] = true, [58313] = true,
+	[58329] = true, [58345] = true, [50602] = true, [57248] = true, [59559] = true,
+	[57157] = true, [57257] = true, [64309] = true, [64317] = true, [56972] = true,
+	[56988] = true, [57004] = true, [57020] = true, [57036] = true, [62162] = true,
+	[57030] = true, [64254] = true, [57116] = true, [57132] = true, [64302] = true,
+	[64318] = true, [64270] = true, [57707] = true, [57212] = true, [57228] = true,
+	[50601] = true, [57260] = true, [57276] = true, [58314] = true, [58330] = true,
+	[58346] = true, [45382] = true, [57267] = true, [57275] = true, [64312] = true,
+	[64279] = true, [50598] = true, [59480] = true, [59496] = true, [56973] = true,
+	[56989] = true, [57005] = true, [57021] = true, [50619] = true, [50618] = true,
+	[65245] = true, [50617] = true, [64255] = true, [64271] = true, [64287] = true,
+	[64303] = true, [57165] = true, [57181] = true, [57708] = true, [57213] = true,
+	[57229] = true, [57245] = true, [57261] = true, [57277] = true, [57253] = true,
+	[71015] = true,	[71101] = true,	[71102] = true,
+	---------------------------------------------------------------------------------------
+
+	---------------------------------------------------------------------------------------
+	----ENCHANTING
+	---------------------------------------------------------------------------------------
+	[46578] = true, [25125] = true, [13612] = true, [13620] = true, [13628] = true,
+	[13640] = true, [13644] = true, [13648] = true, [59625] = true, [13700] = true,
+	[17181] = true, [27920] = true, [27960] = true, [28016] = true, [45765] = true,
+	[14810] = true, [63746] = true, [13836] = true, [20008] = true, [20032] = true,
+	[13868] = true, [13421] = true, [13948] = true, [27905] = true, [27945] = true,
+	[13501] = true, [7786] = true, [7788] = true, [13529] = true, [32664] = true,
+	[44506] = true, [25127] = true, [20025] = true, [20033] = true, [13617] = true,
+	[64579] = true, [60619] = true, [13657] = true, [13693] = true, [27914] = true,
+	[44555] = true, [27954] = true, [27962] = true, [14807] = true, [32665] = true,
+	[7421] = true, [13817] = true, [25072] = true, [44492] = true, [44524] = true,
+	[7443] = true, [44556] = true, [25128] = true, [20026] = true, [7457] = true,
+	[13378] = true, [34001] = true, [13917] = true, [13933] = true, [13937] = true,
+	[13941] = true, [44621] = true, [28003] = true, [28027] = true, [13522] = true,
+	[13538] = true, [25081] = true, [44494] = true, [20011] = true, [25129] = true,
+	[44590] = true, [47672] = true, [20051] = true, [13622] = true, [13626] = true,
+	[69412] = true, [60623] = true, [44383] = true, [13698] = true, [13702] = true,
+	[23804] = true, [44623] = true, [28004] = true, [28028] = true, [14293] = true,
+	[32667] = true, [13822] = true, [25082] = true, [44576] = true, [20028] = true,
+	[20036] = true, [13890] = true, [13898] = true, [60609] = true, [59619] = true,
+	[47898] = true, [7745] = true, [27957] = true, [13503] = true, [34006] = true,
+	[7793] = true, [7795] = true, [59636] = true, [25083] = true, [20029] = true,
+	[13631] = true, [13655] = true, [7861] = true, [7863] = true, [62256] = true,
+	[13695] = true, [13858] = true, [44483] = true, [27968] = true, [7857] = true,
+	[27967] = true, [42615] = true, [27958] = true, [42613] = true, [25084] = true,
+	[20017] = true, [33992] = true, [34008] = true, [13663] = true, [60653] = true,
+	[44528] = true, [14809] = true, [27961] = true, [47901] = true, [7418] = true,
+	[7420] = true, [44488] = true, [7426] = true, [44616] = true, [13841] = true,
+	[44596] = true, [17180] = true, [7454] = true, [33993] = true, [34009] = true,
+	[27950] = true, [20031] = true, [13915] = true, [47900] = true, [13943] = true,
+	[13947] = true, [13945] = true, [13464] = true, [27927] = true, [7771] = true,
+	[20014] = true, [20030] = true, [27947] = true, [33994] = true, [28022] = true,
+	[60692] = true, [25130] = true, [34005] = true, [13794] = true, [7748] = true,
+	[44588] = true, [15596] = true, [7776] = true, [44584] = true, [13607] = true,
+	[13653] = true, [20020] = true,  [70524] = true, [71692] = true,
+	---------------------------------------------------------------------------------------
+
+	---------------------------------------------------------------------------------------
+	---TAILORING
+	---------------------------------------------------------------------------------------
+	[12055] = true, [12059] = true, [12071] = true, [46131] = true, [23664] = true,
+	[31433] = true, [31441] = true, [7624] = true, [26403] = true, [24902] = true,
+	[22866] = true, [56001] = true, [18411] = true, [18419] = true, [18451] = true,
+	[28208] = true, [6686] = true, [8766] = true, [23665] = true, [8786] = true,
+	[26747] = true, [56002] = true, [26763] = true, [26779] = true, [31434] = true,
+	[31450] = true, [60969] = true, [28480] = true, [22867] = true, [56003] = true,
+	[18404] = true, [18412] = true, [18420] = true, [12044] = true, [63924] = true,
+	[12056] = true, [12064] = true, [12080] = true, [12084] = true, [23666] = true,
+	[56004] = true, [26780] = true, [31459] = true, [7892] = true, [60971] = true,
+	[28481] = true, [22868] = true, [20848] = true, [56005] = true, [18405] = true,
+	[19435] = true, [26086] = true, [18437] = true, [18453] = true, [27659] = true,
+	[28210] = true, [40021] = true, [23667] = true, [26773] = true, [26781] = true,
+	[26759] = true, [8774] = true, [31460] = true, [24903] = true, [3755] = true,
+	[37882] = true, [3757] = true, [3758] = true, [50194] = true, [18446] = true,
+	[6692] = true, [28482] = true, [22869] = true, [18439] = true, [20849] = true,
+	[18440] = true, [2389] = true, [56007] = true, [18455] = true, [6521] = true,
+	[18445] = true, [18406] = true, [18414] = true, [18422] = true, [12045] = true,
+	[36318] = true, [18454] = true, [27660] = true, [24091] = true, [12065] = true,
+	[12069] = true, [12077] = true, [12081] = true, [12085] = true, [27724] = true,
+	[12093] = true, [40060] = true, [26087] = true, [26749] = true, [31373] = true,
+	[26750] = true, [26782] = true, [28205] = true, [28209] = true, [36686] = true,
+	[3813] = true, [2394] = true, [7629] = true, [18438] = true, [7633] = true,
+	[40023] = true, [49677] = true, [26407] = true, [18452] = true, [7643] = true,
+	[22870] = true, [26755] = true, [22902] = true, [3869] = true, [55993] = true,
+	[8789] = true, [3839] = true, [3841] = true, [3844] = true, [18407] = true,
+	[18415] = true, [3847] = true, [3848] = true, [3851] = true, [3852] = true,
+	[24092] = true, [3854] = true, [3856] = true, [3857] = true, [8760] = true,
+	[27725] = true, [8776] = true, [8780] = true, [8784] = true, [3865] = true,
+	[55994] = true, [3868] = true, [26783] = true, [3871] = true, [3872] = true,
+	[3873] = true, [31438] = true, [22759] = true, [12091] = true, [8804] = true,
+	[8772] = true, [18560] = true, [18447] = true, [44950] = true, [60993] = true,
+	[55899] = true, [55898] = true, [55995] = true, [2385] = true, [21945] = true,
+	[6688] = true, [12066] = true, [18416] = true, [8465] = true, [12046] = true,
+	[18448] = true, [3915] = true, [24093] = true, [8489] = true, [2386] = true,
+	[12078] = true, [12082] = true, [60994] = true, [55900] = true, [2392] = true,
+	[2393] = true, [23662] = true, [2396] = true, [55996] = true, [2399] = true,
+	[26784] = true, [2402] = true, [2403] = true, [2406] = true, [31431] = true,
+	[3864] = true, [8782] = true, [37884] = true, [37883] = true, [26751] = true,
+	[50647] = true, [8802] = true, [8467] = true, [7893] = true, [40020] = true,
+	[41208] = true, [22813] = true, [41207] = true, [37873] = true, [2387] = true,
+	[55997] = true, [26085] = true, [8799] = true, [27658] = true, [8483] = true,
+	[3914] = true, [18401] = true, [56006] = true, [18441] = true, [18449] = true,
+	[28207] = true, [55769] = true, [18413] = true, [18421] = true, [46129] = true,
+	[2963] = true, [2964] = true, [12061] = true, [12086] = true, [23663] = true,
+	[26745] = true, [55998] = true, [3863] = true, [8764] = true, [31440] = true,
+	[31448] = true, [12089] = true, [6695] = true, [40024] = true, [60990] = true,
+	[50644] = true, [8793] = true, [46130] = true, [24901] = true, [3870] = true,
+	[31437] = true, [44958] = true, [55999] = true, [3845] = true, [6693] = true,
+	[3866] = true, [18456] = true, [18410] = true, [18418] = true, [2397] = true,
+	[18434] = true, [18450] = true,
+	---------------------------------------------------------------------------------------
+
+	---------------------------------------------------------------------------------------
+	----LEATHERWORKING
+	---------------------------------------------------------------------------------------
+	[9198] = true, [23704] = true, [60996] = true, [35549] = true, [22921] = true,
+	[50958] = true, [10509] = true, [10525] = true, [19053] = true, [19085] = true,
+	[19101] = true, [2149] = true, [36349] = true, [2153] = true, [60997] = true,
+	[2159] = true, [2163] = true, [2165] = true, [35582] = true, [50959] = true,
+	[46132] = true, [23705] = true, [60998] = true, [22922] = true, [46133] = true,
+	[24121] = true, [19054] = true, [19070] = true, [19086] = true, [19102] = true,
+	[32465] = true, [32481] = true, [22331] = true, [35520] = true, [35584] = true,
+	[9207] = true, [6661] = true, [46134] = true, [23706] = true, [61000] = true,
+	[35521] = true, [35585] = true, [50962] = true, [10518] = true, [39997] = true,
+	[24122] = true, [19055] = true, [19087] = true, [19103] = true, [32466] = true,
+	[32482] = true, [36353] = true, [35522] = true, [35554] = true, [50963] = true,
+	[44953] = true, [46136] = true, [23707] = true, [61002] = true, [35523] = true,
+	[35555] = true, [35587] = true, [50964] = true, [46137] = true, [24123] = true,
+	[19072] = true, [19104] = true, [9064] = true, [9072] = true, [69386] = true,
+	[32499] = true, [36355] = true, [7133] = true, [35524] = true, [35588] = true,
+	[7153] = true, [9208] = true, [46138] = true, [23708] = true, [69388] = true,
+	[35525] = true, [35557] = true, [10487] = true, [10511] = true, [46139] = true,
+	[24124] = true, [19073] = true, [19089] = true, [32468] = true, [32500] = true,
+	[10647] = true, [28472] = true, [35526] = true, [35558] = true, [45117] = true,
+	[60622] = true, [23709] = true, [35527] = true, [3774] = true, [3778] = true,
+	[3780] = true, [40003] = true, [24125] = true, [19058] = true, [19074] = true,
+	[32485] = true, [32501] = true, [36359] = true, [3816] = true, [3818] = true,
+	[28473] = true, [35528] = true, [35560] = true, [9193] = true, [40004] = true,
+	[23710] = true, [8322] = true, [35529] = true, [35561] = true, [50970] = true,
+	[2881] = true, [10520] = true, [40005] = true, [10544] = true, [10552] = true,
+	[10560] = true, [19091] = true, [19107] = true, [32454] = true, [32502] = true,
+	[28474] = true, [35530] = true, [50971] = true, [62448] = true, [7953] = true,
+	[41157] = true, [36074] = true, [24846] = true, [35531] = true, [22928] = true,
+	[28219] = true, [41158] = true, [36075] = true, [32487] = true, [32503] = true,
+	[7126] = true, [9146] = true, [35532] = true, [35564] = true, [9194] = true,
+	[9202] = true, [24655] = true, [36076] = true, [24847] = true, [35533] = true,
+	[5244] = true, [10529] = true, [28220] = true, [19093] = true, [32456] = true,
+	[52733] = true, [2158] = true, [2160] = true, [2162] = true, [2166] = true,
+	[24848] = true, [35535] = true, [35567] = true, [28221] = true, [19094] = true,
+	[44359] = true, [57690] = true, [32457] = true, [32473] = true, [32489] = true,
+	[9147] = true, [35536] = true, [35568] = true, [9195] = true, [41163] = true,
+	[6703] = true, [24849] = true, [20853] = true, [10482] = true, [10490] = true,
+	[28222] = true, [10546] = true, [10554] = true, [41164] = true, [10570] = true,
+	[19095] = true, [57692] = true, [32458] = true, [10650] = true, [35538] = true,
+	[42731] = true, [24850] = true, [20854] = true, [44970] = true, [28223] = true,
+	[19048] = true, [19064] = true, [19080] = true, [57694] = true, [9148] = true,
+	[35540] = true, [35572] = true, [24851] = true, [20855] = true, [45100] = true,
+	[10531] = true, [28224] = true, [57696] = true, [10619] = true, [19081] = true,
+	[22727] = true, [35539] = true, [19079] = true, [10566] = true, [19065] = true,
+	[10574] = true, [19097] = true, [60647] = true, [3753] = true, [9065] = true,
+	[44343] = true, [3763] = true, [3767] = true, [3773] = true, [3775] = true,
+	[3777] = true, [3779] = true, [32455] = true, [24940] = true, [19050] = true,
+	[19082] = true, [23190] = true, [32461] = true, [60999] = true, [3817] = true,
+	[44344] = true, [9149] = true, [35544] = true, [9197] = true, [19077] = true,
+	[9060] = true, [19076] = true, [35573] = true, [40001] = true, [19066] = true,
+	[19090] = true, [19098] = true, [22711] = true, [57699] = true, [9059] = true,
+	[32480] = true, [64661] = true, [10562] = true, [40002] = true, [50936] = true,
+	[6705] = true, [9058] = true, [24703] = true, [22923] = true, [60645] = true,
+	[35577] = true, [2152] = true, [10556] = true, [10572] = true, [44770] = true,
+	[36077] = true, [19059] = true, [19075] = true, [35580] = true, [20648] = true,
+	[2169] = true, [60643] = true, [19088] = true, [6702] = true, [6704] = true,
+	[35543] = true, [7149] = true, [36078] = true, [36079] = true, [23703] = true,
+	[35534] = true, [57701] = true, [46135] = true, [19047] = true, [20649] = true,
+	[40006] = true, [3765] = true, [41156] = true, [3771] = true, [50956] = true,
+	[19061] = true, [20650] = true, [32467] = true, [35537] = true, [22926] = true,
+	[4096] = true, [19062] = true, [44768] = true, [35576] = true, [19063] = true,
+	[9062] = true, [9070] = true, [32495] = true,
+	---------------------------------------------------------------------------------------
+
+	---------------------------------------------------------------------------------------
+	-----ALCHEMY
+	---------------------------------------------------------------------------------------
+	[53898] = true, [28579] = true, [17566] = true, [53771] = true, [7256] = true,
+	[53899] = true, [11452] = true, [11460] = true, [11468] = true, [3170] = true,
+	[3172] = true, [3174] = true, [3176] = true, [53836] = true, [53900] = true,
+	[28564] = true, [28580] = true, [54220] = true, [17551] = true, [53773] = true,
+	[53837] = true, [62213] = true, [54221] = true, [53774] = true, [53838] = true,
+	[6617] = true, [53902] = true, [28581] = true, [2331] = true, [2335] = true,
+	[2337] = true, [53775] = true, [53839] = true, [11453] = true, [7836] = true,
+	[24266] = true, [41500] = true, [53904] = true, [53936] = true, [28566] = true,
+	[28582] = true, [3452] = true, [3454] = true, [33732] = true, [17553] = true,
+	[22732] = true, [53777] = true, [53905] = true, [53937] = true, [33733] = true,
+	[62409] = true, [25146] = true, [41502] = true, [53938] = true, [28551] = true,
+	[28567] = true, [28583] = true, [62410] = true, [7181] = true, [17570] = true,
+	[17634] = true, [53779] = true, [7257] = true, [53939] = true, [11478] = true,
+	[17187] = true, [53812] = true, [28552] = true, [28568] = true, [28584] = true,
+	[60366] = true, [57425] = true, [17635] = true, [53781] = true, [60367] = true,
+	[4508] = true, [53782] = true, [24365] = true, [6618] = true, [53942] = true,
+	[28569] = true, [28585] = true, [29688] = true, [57427] = true, [17556] = true,
+	[17572] = true, [17636] = true, [53783] = true, [11479] = true, [7837] = true,
+	[7841] = true, [53784] = true, [24366] = true, [53848] = true, [28554] = true,
+	[28570] = true, [28586] = true, [58868] = true, [33741] = true, [24367] = true,
+	[28555] = true, [28571] = true, [17574] = true, [17638] = true, [7258] = true,
+	[11448] = true, [11456] = true, [11464] = true, [11480] = true, [3171] = true,
+	[3173] = true, [3175] = true, [24368] = true, [28572] = true, [28588] = true,
+	[45061] = true, [66658] = true, [17559] = true, [17575] = true, [66659] = true,
+	[66660] = true, [63732] = true, [28573] = true, [66662] = true, [17560] = true,
+	[2330] = true, [2332] = true, [2334] = true, [66663] = true, [11457] = true,
+	[11465] = true, [11473] = true, [66664] = true, [3449] = true, [3451] = true,
+	[3453] = true, [17561] = true, [17577] = true, [28543] = true, [28575] = true,
+	[7179] = true, [17562] = true, [17578] = true, [7255] = true, [7259] = true,
+	[11458] = true, [11466] = true, [38962] = true, [53776] = true, [12609] = true,
+	[53780] = true, [60893] = true, [58871] = true, [3448] = true, [3450] = true,
+	[3447] = true, [4942] = true, [28576] = true, [15833] = true, [17576] = true,
+	[41503] = true, [60350] = true, [41501] = true, [17563] = true, [42736] = true,
+	[54213] = true, [41458] = true, [6624] = true, [39636] = true, [28577] = true,
+	[32765] = true, [38070] = true, [17564] = true, [17580] = true, [53895] = true,
+	[11451] = true, [39637] = true, [28546] = true, [28562] = true, [28578] = true,
+	[60354] = true, [32766] = true, [17565] = true, [22808] = true, [39639] = true,
+	[60355] = true, [56519] = true,
+	---------------------------------------------------------------------------------------
+
+	---------------------------------------------------------------------------------------
+	----ENGINEERING
+	---------------------------------------------------------------------------------------
+	[23081] = true, [12586] = true, [12594] = true, [12622] = true, [30347] = true,
+	[44391] = true, [30547] = true, [56464] = true, [12754] = true, [12758] = true,
+	[23489] = true, [23082] = true, [8243] = true, [9269] = true, [30316] = true,
+	[30332] = true, [12906] = true, [8339] = true, [26420] = true, [56514] = true,
+	[39971] = true, [12599] = true, [12603] = true, [12607] = true, [43676] = true,
+	[12619] = true, [54998] = true, [30349] = true, [56468] = true, [12755] = true,
+	[12759] = true, [63750] = true, [39973] = true, [56465] = true, [56469] = true,
+	[30318] = true, [30334] = true, [55016] = true, [12903] = true, [54793] = true,
+	[19795] = true, [8895] = true, [19819] = true, [30558] = true, [39895] = true,
+	[23069] = true, [23077] = true, [12596] = true, [30303] = true, [56471] = true,
+	[12624] = true, [19796] = true, [56472] = true, [12760] = true, [63770] = true,
+	[23070] = true, [23078] = true, [61471] = true, [30304] = true, [30312] = true,
+	[12908] = true, [12597] = true, [3930] = true, [24356] = true, [67839] = true,
+	[67326] = true, [56474] = true, [30560] = true, [30568] = true, [30314] = true,
+	[3929] = true, [56475] = true, [19830] = true, [3946] = true, [54736] = true,
+	[30563] = true, [24357] = true, [30337] = true, [12591] = true, [19814] = true,
+	[60866] = true, [12716] = true, [23071] = true, [23079] = true, [12585] = true,
+	[3923] = true, [3925] = true, [30305] = true, [12621] = true, [30329] = true,
+	[3931] = true, [3932] = true, [3933] = true, [3936] = true, [3937] = true,
+	[3938] = true, [3939] = true, [3941] = true, [56473] = true, [3944] = true,
+	[3945] = true, [3947] = true, [54999] = true, [3949] = true, [3950] = true,
+	[26417] = true, [12717] = true, [3954] = true, [3955] = true, [3957] = true,
+	[3958] = true, [3961] = true, [3962] = true, [3963] = true, [3965] = true,
+	[3966] = true, [3967] = true, [3968] = true, [3969] = true, [3971] = true,
+	[3972] = true, [3973] = true, [7430] = true, [3977] = true, [3978] = true,
+	[3979] = true, [19790] = true, [23080] = true, [12620] = true, [30309] = true,
+	[30346] = true, [12905] = true, [41307] = true, [8334] = true, [56460] = true,
+	[56476] = true, [12718] = true, [26418] = true, [19791] = true, [3960] = true,
+	[19815] = true, [13240] = true, [19831] = true, [30570] = true, [19799] = true,
+	[30306] = true, [30310] = true, [26011] = true, [36954] = true, [3919] = true,
+	[3920] = true, [19800] = true, [12617] = true, [30311] = true, [56463] = true,
+	[72952] = true, [72953] = true,
+	---------------------------------------------------------------------------------------
+}
+
+local function ItemLinkToID(link)
+	if not link then
+		return
+	end
+	local _, _, id_num = string.find(link,"item:(%d+):")
+
+	if id_num then
+		return tonumber(id_num)
+	end
+end
+
+
+local function LoadRecipe()
+	local recipe_list = private.recipe_list
+
+	if addon.db.profile.autoloaddb then
+		for idx, prof in pairs(PROFESSIONS) do
+			addon:InitializeRecipe(prof)
+		end
+	end
+	return recipe_list
+
+end
+
+-------------------------------------------------------------------------------
+-- Creates a reverse lookup for a recipe list
+-------------------------------------------------------------------------------
+local GetReverseLookup
+do
+	local reverse_lookup = {}
+
+	function GetReverseLookup(recipe_list)
+		if not recipe_list then
+			addon:Print(L["DATAMINER_NODB_ERROR"])
+			return
+		end
+		twipe(reverse_lookup)
+
+		for i in pairs(recipe_list) do
+			--if t[recipe_list[i].name] then addon:Print("Dupe: " .. i) end
+			reverse_lookup[recipe_list[i].name] = i
+		end
+		return reverse_lookup
+	end
+
+end
+
+-------------------------------------------------------------------------------
+-- Tooltip for data-mining.
+-------------------------------------------------------------------------------
+local ARLDatamineTT = CreateFrame("GameTooltip", "ARLDatamineTT", UIParent, "GameTooltipTemplate")
+
+do
+	-- Tables used in all the Scan functions within this do block. -Torhal
+	local info, output = {}, {}
+
+	--- Function to compare the skill levels of a trainers recipes with those in the ARL database.
+	-- @name AckisRecipeList:ScanSkillLevelData
+	-- @param autoscan True when autoscan is enabled in preferences, it will surpress output letting you know when a scan has occured.
+	-- @return Does a comparison of the information in your internal ARL database, and those items which are available on the trainer.  Compares the skill levels between the two.
+	function addon:ScanSkillLevelData(autoscan)
+		if not IsTradeskillTrainer() then
+			if not autoscan then
+				self:Print(L["DATAMINER_SKILLLEVEL_ERROR"])
+			end
+			return
+		end
+		local recipe_list = LoadRecipe()	-- Get internal database
+
+		if not recipe_list then
+			self:Print(L["DATAMINER_NODB_ERROR"])
+			return
+		end
+		-- Get the initial trainer filters
+		local avail = GetTrainerServiceTypeFilter("available")
+		local unavail = GetTrainerServiceTypeFilter("unavailable")
+		local used = GetTrainerServiceTypeFilter("used")
+
+		-- Clear the trainer filters
+		SetTrainerServiceTypeFilter("available", 1)
+		SetTrainerServiceTypeFilter("unavailable", 1)
+		SetTrainerServiceTypeFilter("used", 1)
+
+		twipe(info)
+
+		-- Get the skill levels from the trainer
+		for i = 1, GetNumTrainerServices(), 1 do
+			local name = GetTrainerServiceInfo(i)
+			local _, skilllevel = GetTrainerServiceSkillReq(i)
+
+			if not skilllevel then
+				skilllevel = 0
+			end
+			info[name] = skilllevel
+		end
+		local found = false
+
+		twipe(output)
+
+		for i in pairs(recipe_list) do
+			local i_name = recipe_list[i].name
+
+			if info[i_name] and info[i_name] ~= recipe_list[i].skill_level then
+				found = true
+				tinsert(output, L["DATAMINER_SKILLELVEL"]:format(i_name, recipe_list[i].skill_level, info[i_name]))
+			end
+		end
+		tinsert(output, "Trainer Skill Level Scan Complete.")
+
+		if found then
+			self:DisplayTextDump(nil, nil, tconcat(output, "\n"))
+		end
+		-- Reset the filters to what they were before
+		SetTrainerServiceTypeFilter("available", avail or 0)
+		SetTrainerServiceTypeFilter("unavailable", unavail or 0)
+		SetTrainerServiceTypeFilter("used", used or 0)
+	end
+
+	local teach, noteach = {}, {}
+
+	--- Function to compare which recipes are available from a trainer and compare with the internal ARL database.
+	-- @name AckisRecipeList:ScanTrainerData
+	-- @param autoscan True when autoscan is enabled in preferences, it will surpress output letting you know when a scan has occured.
+	-- @return Does a comparison of the information in your internal ARL database, and those items which are available on the trainer.
+	-- Compares the acquire information of the ARL database with what is available on the trainer.
+	function addon:ScanTrainerData(autoscan)
+		if not (UnitExists("target") and (not UnitIsPlayer("target")) and (not UnitIsEnemy("player", "target"))) then	-- Make sure the target exists and is a NPC
+			if not autoscan then
+				self:Print(L["DATAMINER_TRAINER_NOTTARGETTED"])
+			end
+			return
+		end
+		local targetname = UnitName("target")	-- Get its name
+		local targetID = tonumber(string.sub(UnitGUID("target"), -12, -7), 16)	-- Get the NPC ID
+
+		if not IsTradeskillTrainer() then		-- Are we at a trade skill trainer?
+			if not autoscan then
+				self:Print(L["DATAMINER_SKILLLEVEL_ERROR"])
+			end
+			return
+		end
+		local recipe_list = LoadRecipe()	-- Get internal database
+
+		if not recipe_list then
+			self:Print(L["DATAMINER_NODB_ERROR"])
+			return
+		end
+
+		-- Get the initial trainer filters
+		local avail = GetTrainerServiceTypeFilter("available")
+		local unavail = GetTrainerServiceTypeFilter("unavailable")
+		local used = GetTrainerServiceTypeFilter("used")
+
+		-- Clear the trainer filters
+		SetTrainerServiceTypeFilter("available", 1)
+		SetTrainerServiceTypeFilter("unavailable", 1)
+		SetTrainerServiceTypeFilter("used", 1)
+
+		if GetNumTrainerServices() == 0 then
+			self:Print("Warning: Trainer is bugged, reporting 0 trainer items.")
+		end
+		twipe(info)
+
+		-- Get all the names of recipes from the trainer
+		for i = 1, GetNumTrainerServices(), 1 do
+			local name = GetTrainerServiceInfo(i)
+			info[name] = true
+		end
+		twipe(teach)
+		twipe(noteach)
+		twipe(output)
+
+		-- Dump out trainer info
+		tinsert(output, L["DATAMINER_TRAINER_INFO"]:format(targetname, targetID))
+
+		local teachflag = false
+		local noteachflag = false
+
+		for i in pairs(recipe_list) do
+			local recipe = recipe_list[i]
+			local i_name = recipe.name
+			local acquire = recipe["acquire_data"]
+
+			local train_data = acquire[A.TRAINER]
+
+			if info[i_name] then
+				local found = false
+
+				if train_data then
+					for id_num in pairs(train_data) do
+						if id_num == targetID then
+							found = true
+							break
+						end
+					end
+				end
+
+				if not found then
+					tinsert(teach, i)
+					teachflag = true
+
+					if not recipe:IsFlagged("common1", "TRAINER") then
+						tinsert(output, ": Trainer flag needs to be set.")
+					end
+				end
+				-- Trainer does not teach this recipe
+			else
+				local found = false
+
+				if train_data then
+					for id_num in pairs(train_data) do
+						if id_num == targetID then
+							found = true
+							break
+						end
+					end
+				end
+
+				if found then
+					noteachflag = true
+					tinsert(noteach, i)
+				end
+			end
+		end
+
+		if teachflag then
+			tinsert(output, "Missing entries (need to be added):")
+			tsort(teach)
+
+			for i in ipairs(teach) do
+				tinsert(output, L["DATAMINER_TRAINER_TEACH"]:format(teach[i], recipe_list[teach[i]].name))
+			end
+		end
+
+		if noteachflag then
+			tinsert(output, "Extra entries (need to be removed):")
+			tsort(noteach)
+
+			for i in ipairs(noteach) do
+				tinsert(output, L["DATAMINER_TRAINER_NOTTEACH"]:format(noteach[i], recipe_list[noteach[i]].name))
+			end
+		end
+		tinsert(output, "Trainer Acquire Scan Complete.")
+		tinsert(output, "If you're doing an engineering scan, there may be some goggles listed as extra. These goggles ONLY show up for those classes who can make them, so they may be false positives.")
+
+		if teachflag or noteachflag then
+			self:DisplayTextDump(nil, nil, tconcat(output, "\n"))
+		end
+		-- Reset the filters to what they were before
+		SetTrainerServiceTypeFilter("available", avail or 0)
+		SetTrainerServiceTypeFilter("unavailable", unavail or 0)
+		SetTrainerServiceTypeFilter("used", used or 0)
+	end
+end	-- do
+
+--- Generates tradeskill links for all professions so you can scan them for completeness.
+-- @name AckisRecipeList:GenerateLinks
+-- @return Generates tradeskill links with all recipes.  Used for testing to see if a recipe is missing from the database or not.
+function addon:GenerateLinks()
+	-- This code adopted from Gnomish Yellow Pages with permission
+
+	local guid = UnitGUID("player")
+	local playerGUID = string.gsub(guid, "0x0+", "")
+
+	-- Listing of all tradeskill professions
+	local tradelist = {51304, 51300, 51313, 51306, 45363, 51311, 51302, 51309, 51296, 45542}
+
+--[[
+	local encodingLength = floor((#recipeList+5) / 6)
+
+	local encodedString = string.rep("/", encodingLength)
+]]--
+	local bitmap = {}
+	bitmap[45542] = "8bffAA" -- First Aid  100%   17/17 recipes
+	bitmap[51296] = "2/6///7///9f///7//////////g///B" -- Cooking  98.2%  166/169 recipes
+	--bitmap[51306] = "4/////////////3nFA+///9+/P7//f//n//9dgdJgHA87/3f/TolD" -- Engineering (53)
+	bitmap[51306] = "4/////////////3nFA+///9+/P7//f//n//9dgdJgHA87/3f/Tol3B" -- Engineering
+	bitmap[51302] = "e+//ff////d//u//v//n+vv7/+ujr7/9////bg/+////f344//dA4I8j/X//B4/vu5/////////////////nvA8/M8/D" -- Leatherworking  85.4%   451/528 recipes
+	bitmap[51304] = "2//v//////f////3//v///////5//////////9/////v" -- Alchemy 100%   251/251 recipes
+	bitmap[51300] = "2//////f7fM//f/f53/+//7///ze8c6q/f9///P2/////m4BAA2XIG+dFA8//PC////4//z//////////Pwvy//H" -- Blacksmithing 82.9%   413/498 recipes
+	bitmap[51309] = "4//+/+5a79rv7/vx2/65t3nZ3f33N33LJq/z54Hx//mK7w1GQgFA+AQ4/////7//7//9//2wD" -- Tailoring   74.3%   303/408 recipes
+	bitmap[51311] = "8//3////fzj//u//////v/7///9///33////////Pw////////////////////////3///////////////////////////D" -- Jewelcrafting  97.5%   540/554 recipes
+	bitmap[45363] = "g////7////3///////////////////////////////////////////////////fHM+3dqhGYa0f" --Inscription 92.5%    407/440 recipes
+	bitmap[51313] = "4//////////7///////////w//+//9/n7///////3f//////ZsD" -- Enchanting   94.3%    279/296 recipes
+
+	for i in pairs(tradelist) do
+
+		local tradeName = GetSpellInfo(tradelist[i])
+		local tradelink = {}
+		tradelink[1] = "|cffffd000|Htrade:"
+		tradelink[2] = tradelist[i]
+		tradelink[3] = ":450:450:"
+		tradelink[4] = playerGUID
+		tradelink[5] = ":"
+		tradelink[6] = bitmap[tradelist[i]]
+		tradelink[7] = "|h["
+		tradelink[8] = tradeName
+		tradelink[9] = "]|h|r"
+
+		if (bitmap[tradelist[i]]) then
+			self:Print(tconcat(tradelink, ""))
+		else
+			self:Print("There currently is not a generated tradeskill link for: " .. tradeName)
+		end
+		-- /script DEFAULT_CHAT_FRAME:AddMessage(string.gsub(GetTradeSkillListLink(), "\124", "\124\124"))
+	end
+
+end
+
+-------------------------------------------------------------------------------
+--- Scans the items in the specified profession
+-------------------------------------------------------------------------------
+do
+	local ORDERED_PROFESSIONS = private.ordered_professions
+
+	local recipe_list = {}
+	local output = {}
+
+	local function Sort_AscID(a, b)
+		local reca, recb = private.recipe_list[a], private.recipe_list[b]
+
+		return reca.spell_id < recb.spell_id
+	end
+
+	local function SortRecipeList()
+		local sorted_recipes = addon.sorted_recipes
+		twipe(sorted_recipes)
+
+		for n, v in pairs(recipe_list) do
+			tinsert(sorted_recipes, n)
+		end
+		table.sort(sorted_recipes, Sort_AscID)
+	end
+
+	local function ProfessionScan(prof_name)
+		local master_list = LoadRecipe()
+
+		if not master_list then
+			addon:Print(L["DATAMINER_NODB_ERROR"])
+			return
+		end
+		twipe(recipe_list)
+
+		if prof_name == private.professions["Smelting"]:lower() then
+			prof_name = private.mining_name:lower()
+		end
+
+		for i in pairs(master_list) do
+			local prof = string.lower(master_list[i].profession)
+
+			if prof and prof == prof_name then
+				recipe_list[i] = master_list[i]
+			end
+		end
+		SortRecipeList()
+		twipe(output)
+
+		-- Parse the entire recipe database
+		for index, id in ipairs(addon.sorted_recipes) do
+			local ttscantext = addon:TooltipScanRecipe(id, false, true)
+
+			if ttscantext and ttscantext ~= "" then
+				tinsert(output, ttscantext)
+			end
+		end
+
+		if #output == 0 then
+			addon:Debug("ProfessionScan(): output is empty.")
+		end
+		addon:DisplayTextDump(nil, nil, tconcat(output, "\n"))
+		ARLDatamineTT:Hide()
+	end
+
+	--- Parses all recipes for a specified profession, scanning their tool tips.
+	-- @name AckisRecipeList:ScanProfession
+	-- @usage AckisRecipeList:ScanProfession("first aid")
+	-- @param prof_name The profession name or the spell ID of it, which you wish to scan.
+	-- @return Recipes in the given profession have their tooltips scanned.
+	function addon:ScanProfession(prof_name)
+		if type(prof_name) == "number" then
+			prof_name = GetSpellInfo(prof_name)
+		end
+
+		local found = false
+		prof_name = string.lower(prof_name)
+
+		local scan_all = prof_name == "all"
+
+		if not scan_all then
+			for idx, name in ipairs(ORDERED_PROFESSIONS) do
+				if prof_name == name:lower() then
+					found = true
+					break
+				end
+			end
+
+			if not found then
+				self:Print(L["DATAMINER_NODB_ERROR"])
+				return
+			end
+
+			ProfessionScan(prof_name)
+		else
+			for idx, name in ipairs(ORDERED_PROFESSIONS) do
+				ProfessionScan(name:lower())
+			end
+		end
+	end
+
+	local FILTER_STRINGS = private.filter_strings
+	local ACQUIRE_STRINGS = private.acquire_strings
+	local REP_LEVELS = private.rep_level_strings
+	local FACTION_NAMES = private.faction_strings
+	local Q = private.item_quality_names
+	local V = private.game_version_names
+
+	local NUM_FILTER_FLAGS = 128
+
+	local FUNCTION_FORMATS = {
+		[A.TRAINER]	= "self:AddRecipeTrainer(%d, %s)",
+		[A.VENDOR]	= "self:AddRecipeVendor(%d, %s)",
+		[A.MOB_DROP]	= "self:AddRecipeMobDrop(%d, %s)",
+		[A.WORLD_DROP]	= "self:AddRecipeWorldDrop(%d, %s)",
+		[A.QUEST]	= "self:AddRecipeQuest(%d, %s)",
+	}
+
+	local function RecipeDump(id, single)
+		local recipe = private.recipe_list[id or 1]
+
+		if single and not recipe then
+			addon:Print("Invalid recipe ID.")
+			return
+		end
+		local flag_string
+		local specialty = not recipe.specialty and "" or (", "..recipe.specialty)
+
+		tinsert(output, string.format("-- %s -- %d", recipe.name, recipe.spell_id))
+		tinsert(output, string.format("AddRecipe(%d, %d, %s, Q.%s, V.%s, %d, %d, %d, %d%s)",
+					      recipe.spell_id, recipe.skill_level, tostring(recipe.item_id), Q[recipe.quality], V[recipe.genesis],
+					      recipe.optimal_level, recipe.medium_level, recipe.easy_level, recipe.trivial_level, specialty))
+
+		for table_index, bits in ipairs(private.bit_flags) do
+			for flag_name, flag in pairs(bits) do
+				local bitfield = recipe.flags[private.flag_members[table_index]]
+
+				if bitfield and bit.band(bitfield, flag) == flag then
+					if not flag_string then
+						flag_string = "F."..FILTER_STRINGS[private.filter_flags[flag_name]]
+					else
+						flag_string = flag_string..", ".."F."..FILTER_STRINGS[private.filter_flags[flag_name]]
+					end
+				end
+			end
+		end
+		tinsert(output, string.format("self:AddRecipeFlags(%d, %s)", recipe.spell_id, flag_string))
+
+		flag_string = nil
+
+		for acquire_type, acquire_info in pairs(recipe.acquire_data) do
+			if acquire_type == A.REPUTATION then
+				for rep_id, rep_info in pairs(acquire_info) do
+					local faction_string = FACTION_NAMES[rep_id]
+
+					if not faction_string then
+						faction_string = rep_id
+						addon:Printf("Recipe %d (%s) - no string for faction %d", recipe.spell_id, recipe.name, rep_id)
+					else
+						faction_string = "FAC."..faction_string
+					end
+
+					for rep_level, level_info in pairs(rep_info) do
+						local rep_string = "REP."..REP_LEVELS[rep_level or 1]
+						local values
+
+						for vendor_id in pairs(level_info) do
+							values = values and (values..", "..vendor_id) or vendor_id
+						end
+						tinsert(output, string.format("self:AddRecipeRepVendor(%d, %s, %s, %s)", recipe.spell_id, faction_string, rep_string, values))
+					end
+				end
+			elseif FUNCTION_FORMATS[acquire_type] then
+				local values
+
+				for id_num in pairs(acquire_info) do
+					local saved_id = (type(id_num) == "string" and ("\""..id_num.."\"") or id_num)
+					values = values and (values..", "..saved_id) or saved_id
+				end
+				tinsert(output, string.format(FUNCTION_FORMATS[acquire_type], recipe.spell_id, values))
+			else
+				for id_num in pairs(acquire_info) do
+					if not flag_string then
+						flag_string = "A."..ACQUIRE_STRINGS[acquire_type]..", "..(type(id_num) == "string" and ("\""..id_num.."\"") or id_num)
+					else
+						flag_string = flag_string..", ".."A."..ACQUIRE_STRINGS[acquire_type]..", "..(type(id_num) == "string" and ("\""..id_num.."\"") or id_num)
+					end
+				end
+			end
+		end
+
+		if flag_string then
+			tinsert(output, string.format("self:AddRecipeAcquire(%d, %s)", recipe.spell_id, flag_string))
+		end
+		tinsert(output, "")
+	end
+
+	local function ProfessionDump(prof_name)
+		local master_list = LoadRecipe()
+
+		if not master_list then
+			addon:Print(L["DATAMINE_NODB_ERROR"])
+			return
+		end
+		twipe(recipe_list)
+
+		if prof_name == private.professions["Smelting"]:lower() then
+			prof_name = private.mining_name:lower()
+		end
+		for i in pairs(master_list) do
+			local prof = string.lower(master_list[i].profession)
+
+			if prof and prof == prof_name then
+				recipe_list[i] = master_list[i]
+			end
+		end
+		SortRecipeList()
+		twipe(output)
+
+		for index, id in ipairs(addon.sorted_recipes) do
+			RecipeDump(id, false)
+		end
+		addon:DisplayTextDump(nil, nil, tconcat(output, "\n"))
+	end
+
+	function addon:DumpRecipe(id_num)
+		twipe(output)
+		RecipeDump(id_num, true)
+		addon:DisplayTextDump(nil, nil, tconcat(output, "\n"))
+	end
+
+	function addon:DumpProfession(prof_name)
+		if type(prof_name) == "number" then
+			prof_name = GetSpellInfo(prof_name)
+		end
+
+		local found = false
+		prof_name = string.lower(prof_name)
+
+		local scan_all = prof_name == "all"
+
+		if not scan_all then
+			for idx, name in ipairs(ORDERED_PROFESSIONS) do
+				if prof_name == name:lower() then
+					found = true
+					break
+				end
+			end
+
+			if not found then
+				self:Print(L["DATAMINER_NODB_ERROR"])
+				return
+			end
+			ProfessionDump(prof_name)
+		else
+			for idx, name in ipairs(ORDERED_PROFESSIONS) do
+				ProfessionDump(name:lower())
+			end
+		end
+	end
+end	-- do
+
+local RECIPE_TYPES = {
+	-- JC
+	["design: "] = true,
+	-- LW or Tailoring
+	["pattern: "] = true,
+	-- Alchemy or Cooking
+	["recipe: "] = true,
+	-- BS
+	["plans: "] = true,
+	-- Enchanting
+	["formula: "] = true,
+	-- Engineering
+	["schematic: "] = true,
+	-- First Aid
+	["manual: "] = true,
+
+	["alchemy: "] = true,
+	["blacksmithing: "] = true,
+	["cooking: "] = true,
+	["enchanting: "] = true,
+	["engineering: "] = true,
+	["first aid: "] = true,
+	["inscription: "] = true,
+	["jewelcrafting: "] = true,
+	["leatherworking: "] = true,
+	["tailoring: "] = true,
+}
+
+--- Scans the items on a vendor, determining which recipes are available if any and compares it with the database entries
+-- @name AckisRecipeList:ScanVendor
+-- @usage AckisRecipeList:ScanVendor()
+-- @return Obtains all the vendor information on tradeskill recipes and attempts to compare the current vendor with the internal database
+do
+	local output = {}
+
+	function addon:ScanVendor()
+		if not (UnitExists("target") and (not UnitIsPlayer("target")) and (not UnitIsEnemy("player", "target"))) then	-- Make sure the target exists and is a NPC
+			self:Print(L["DATAMINER_VENDOR_NOTTARGETTED"])
+			return
+		end
+		local recipe_list = LoadRecipe()		-- Get internal database
+
+		if not recipe_list then
+			self:Print(L["DATAMINER_NODB_ERROR"])
+			return
+		end
+		local targetname = UnitName("target")		-- Get its name
+		local targetID = tonumber(string.sub(UnitGUID("target"), -12, -7), 16)		-- Get the NPC ID
+		local added = false
+
+		twipe(output)
+
+		tinsert(output, "Vendor Name: "..targetname.." NPC ID: "..targetID)
+		-- Parse all the items on the merchant
+		for i = 1, GetMerchantNumItems(), 1 do
+			local name, _, _, _, numAvailable = GetMerchantItemInfo(i)
+
+			if name then
+				-- Lets scan recipes only on vendors
+				local matchtext = string.match(name, "%a+: ")
+
+				-- Check to see if we're dealing with a recipe
+				if matchtext and RECIPE_TYPES[string.lower(matchtext)] then
+					local item_link = GetMerchantItemLink(i)
+					local item_id = ItemLinkToID(item_link)
+					local spell_id = RECIPE_TO_SPELL_MAP[item_id]
+
+					if spell_id then
+						local ttscantext = addon:TooltipScanRecipe(spell_id, true, true)
+
+						if ttscantext and ttscantext ~= "" then
+							added = true
+							tinsert(output, ttscantext)
+						end
+
+						-- Check the database to see if the vendor is listed as an acquire method.
+						local acquire = recipe_list[spell_id]["acquire_data"]
+						local vendor_data = acquire[A.VENDOR]
+						local rep_data = acquire[A.REPUTATION]
+						local found = false
+
+						if vendor_data then
+							for id_num in pairs(vendor_data) do
+								if id_num == targetID then
+									found = true
+									break
+								end
+							end
+						elseif rep_data then
+							for id_num in pairs(rep_data) do
+								if id_num == targetID then
+									found = true
+									break
+								end
+							end
+						end
+
+						if not found then
+							added = true
+							tinsert(output, string.format("Vendor ID missing from \"%s\" %d.", recipe_list[spell_id].name, spell_id))
+						end
+					else
+						--@debug@
+						added = true
+						tinsert(output, "Spell ID not found for: " .. name)
+						--@end-debug@
+					end
+				end
+			end
+		end
+
+		if added then
+			self:DisplayTextDump(nil, nil, tconcat(output, "\n"))
+		end
+		ARLDatamineTT:Hide()
+	end
+end	-- do
+
+--- Parses all the recipes in the database, and scanning their tooltips.
+-- @name AckisRecipeList:TooltipScanDatabase
+-- @usage AckisRecipeList:TooltipScanDatabase()
+-- @return Entire recipe database has its tooltips scanned.
+do
+	local output = {}
+
+	function addon:TooltipScanDatabase()
+		-- Get internal database
+		local recipe_list = LoadRecipe()
+
+		if (not recipe_list) then
+			self:Print(L["DATAMINER_NODB_ERROR"])
+			return
+		end
+		twipe(output)
+
+		-- Parse the entire recipe database
+		for i in pairs(recipe_list) do
+
+			local ttscantext = addon:TooltipScanRecipe(i, false, true)
+			if (ttscantext) then
+				tinsert(output, ttscantext)
+			end
+		end
+		self:DisplayTextDump(nil, nil, tconcat(output, "\n"))
+	end
+end	-- do
+--- Parses a specific recipe in the database, and scanning its tooltip
+-- @name AckisRecipeList:TooltipScanRecipe
+-- @param spell_id The [[[http://www.wowwiki.com/SpellLink|Spell ID]]] of the recipe being added to the database
+-- @param is_vendor Boolean to determine if we're viewing a vendor or not
+-- @param is_largescan Boolean to determine if we're doing a large scan
+-- @return Recipe has its tooltips scanned
+
+
+-- Table to store scanned information. Wiped and re-used every scan.
+local scan_data = {}
+
+do
+	---------------------------------------------------------------------------------------------------------
+	----This table, DO_NOT_SCAN, contains itemid's that will not cache on the servers
+	---------------------------------------------------------------------------------------------------------
+
+	local DO_NOT_SCAN = {
+		-------------------------------------------------------------------------------
+		--Leatherworking
+		-------------------------------------------------------------------------------
+		[35214] = true,	[32434] = true,	[15769] = true,
+		[32431] = true,	[32432] = true,	[35215] = true,	[35521] = true,
+		[35520] = true,	[35524] = true,	[35517] = true,	[35528] = true,
+		[35527] = true,	[35523] = true,	[35549] = true,	[35218] = true,
+		[35217] = true,	[35216] = true,	[35546] = true,	[35541] = true, [15756] = true,
+		[15777] = true,  [32433] = true,  [29729] = true,  [29732] = true,   [32744] = true,
+		[15773] = true,	[30301] = true,	[15745] = true,	[35302] = true,	[15774] = true,
+
+		-------------------------------------------------------------------------------
+		--Tailoring
+		-------------------------------------------------------------------------------
+		[14477] = true, [14485] = true, [30281] = true, [14478] = true, [14500] = true,
+		[32439] = true, [14479] = true, [32447] = true, [14480] = true, [32437] = true,
+		[14495] = true, [14505] = true, [35204] = true,  [35205] = true,   [35206] = true,
+		[14473] = true, [14488] = true,  [14481] = true,
+		[35309] = true,	[30280] = true,	[14492] = true,	[14491] = true,
+
+		-------------------------------------------------------------------------------
+		--Jewelcrafting
+		-------------------------------------------------------------------------------
+		[23130] = true,  [23140] = true, [23137] = true, [23131] = true, [23148] = true,
+		[35538] = true, [35201] = true, [35533] = true, [35200] = true,  [23147] = true,
+		[23135] = true,  [35203] = true, [35198] = true, [23152] = true,  [23151] = true,
+		[23141] = true, [28596] = true,  [28291] = true,	[23153] = true,
+
+		-------------------------------------------------------------------------------
+		--Alchemy
+		-------------------------------------------------------------------------------
+		[22925] = true,  [13480] = true,  [13481] = true,   [13493] = true,	[35295] = true,
+		[44568] = true,
+
+		-------------------------------------------------------------------------------
+		--Cooking
+		-------------------------------------------------------------------------------
+		[39644] = true,
+
+		-------------------------------------------------------------------------------
+		--Blacksmithing
+		-------------------------------------------------------------------------------
+		[32441] = true,   [32443] = true,  [12687] = true, [12714] = true,  [12688 ] = true,
+		[35211] = true,  [35209] = true, [35210] = true,    [12706] = true,  [7982] = true,
+		[12718] = true,		[23621] = true,	[35208] = true,	[12716] = true,	[23632] = true,
+		[23633] = true,	[30324] = true,	[23637] = true,	[31393] = true,[22221] = true,
+		[12690] = true,	[31394] = true,[31395] = true,[23630] = true,[23629] = true,[7978] = true,
+		[41120] = true,	[12717] = true,[22219] = true,[23627] = true,
+
+		-------------------------------------------------------------------------------
+		--Engineering
+		-------------------------------------------------------------------------------
+		[35196] = true,    [21734] = true,  [18292] = true,  [21727] = true,  [21735] = true,  [16053] = true,  [21729] = true,
+		[16047] = true,[21730] = true,[21731] = true,[21732] = true,[4411] = true,   [21733] = true,  [21728] = true,
+		[35186] = true,	[18655] = true,
+
+		-------------------------------------------------------------------------------
+		--Enchanting
+		-------------------------------------------------------------------------------
+		[16222] = true,	[20734] = true,	[20729] = true,	[20731] = true,	[16246] = true,
+	}
+
+	local output = {}
+
+	function addon:TooltipScanRecipe(spell_id, is_vendor, is_largescan)
+		local recipe_list = LoadRecipe()
+
+		if not recipe_list then
+			self:Print(L["DATAMINER_NODB_ERROR"])
+			return
+		end
+		local recipe = recipe_list[spell_id]
+
+		if not recipe then
+			self:Debug("Spell ID %d does not exist in the database.", tonumber(spell_id))
+			return
+		end
+		local recipe_name = recipe.name
+		local game_vers = recipe.genesis
+
+		twipe(output)
+
+		if not game_vers then
+			tinsert(output, "No expansion information: " .. tostring(spell_id) .. " " .. recipe_name)
+		elseif game_vers > private.game_versions.WOTLK then
+			tinsert(output, "Expansion information too high: " .. tostring(spell_id) .. " " .. recipe_name)
+		end
+		local optimal = recipe.optimal_level
+		local medium = recipe.medium_level
+		local easy = recipe.easy_level
+		local trivial = recipe.trivial_level
+		local skill_level = recipe.skill_level
+
+		if not optimal then
+			tinsert(output, "No skill level information: " .. tostring(spell_id) .. " " .. recipe_name)
+		else
+			-- Highest level is greater than the skill of the recipe
+			if optimal > skill_level then
+				tinsert(output, "Skill Level Error (optimal_level > skill_level): " .. tostring(spell_id) .. " " .. recipe_name)
+			elseif optimal < skill_level then
+				tinsert(output, "Skill Level Error (optimal_level < skill_level): " .. tostring(spell_id) .. " " .. recipe_name)
+			end
+
+			-- Level info is messed up
+			if optimal > medium or optimal > easy or optimal > trivial or medium > easy or medium > trivial or easy > trivial then
+				tinsert(output, "Skill Level Error: " .. tostring(spell_id) .. " " .. recipe_name)
+			end
+		end
+		local recipe_link = recipe.spell_link
+
+		if not recipe_link then
+			if recipe.profession ~= GetSpellInfo(53428) then		-- Lets hide this output for runeforging.
+				self:Printf("Missing spell_link for ID %d (%s).", spell_id, recipe_name)
+			end
+			return
+		end
+		ARLDatamineTT:SetOwner(WorldFrame, "ANCHOR_NONE")
+		GameTooltip_SetDefaultAnchor(ARLDatamineTT, UIParent)
+
+		ARLDatamineTT:SetHyperlink(recipe_link)
+
+		-- Check to see if this is a recipe tooltip.
+		local text = string.lower(_G["ARLDatamineTTTextLeft1"]:GetText())
+		local match_text = string.match(text, "%a+: ")
+
+		if not RECIPE_TYPES[match_text] and not (string.find(text, "smelt") or string.find(text, "sunder") or string.find(text, "shatter")) then
+			ARLDatamineTT:Hide()
+			return
+		end
+		local reverse_lookup = GetReverseLookup(recipe_list)
+
+		local item_id = SPELL_TO_RECIPE_MAP[spell_id]
+
+		wipe(scan_data)
+
+		if item_id and not DO_NOT_SCAN[item_id] then
+			local item_name, item_link, item_quality = GetItemInfo(item_id)
+
+			if item_name then
+				scan_data.quality = item_quality
+
+				ARLDatamineTT:SetHyperlink(item_link)
+				self:ScanToolTip(recipe_name, recipe_list, reverse_lookup, is_vendor)
+			else
+				local querier_string = _G.Querier and string.format(" To fix: /iq %d", item_id) or ""
+
+				tinsert(output, string.format("%s: %d", recipe.name, spell_id))
+				tinsert(output, string.format("    Recipe item not in cache.%s", querier_string))
+			end
+		elseif not item_id then
+			-- We are dealing with a recipe that does not have an item to learn it from.
+			-- Lets check the recipe flags to see if we have a data error and the item should exist
+			if not recipe:IsFlagged("common1", "RETIRED")
+				and (recipe:IsFlagged("common1", "VENDOR") or recipe:IsFlagged("common1", "INSTANCE") or recipe:IsFlagged("common1", "RAID")) then
+					tinsert(output, string.format("%s: %d", recipe.name, spell_id))
+					tinsert(output, "    No match found in the SPELL_TO_RECIPE_MAP table.")
+			end
+		end
+		ARLDatamineTT:Hide()
+
+		-- Add the flag scan to the table if it's not nil
+		local results = self:PrintScanResults()
+
+		if results then
+			tinsert(output, results)
+		end
+
+		if is_largescan then
+			return tconcat(output, "\n")
+		else
+			self:Print(tconcat(output, "\n"))
+		end
+	end
+end	-- do
+
+-------------------------------------------------------------------------------
+-- Tooltip-scanning code
+-------------------------------------------------------------------------------
+do
+	local SPECIALTY_TEXT = {
+		["requires spellfire tailoring"] = 26797,
+		["requires mooncloth tailoring"] = 26798,
+		["requires shadoweave tailoring"] = 26801,
+		["requires dragonscale leatherworking"] = 10657,
+		["requires elemental leatherworking"] = 10659,
+		["requires tribal leatherworking"] = 10661,
+		["requires gnomish engineer"] = 20219,
+		["requires goblin engineer"] = 20222,
+		["requires armorsmith"] = 9788,
+		["requires master axesmith"] = 17041,
+		["requires master hammersmith"] = 17040,
+		["requires master swordsmith"] = 17039,
+		["requires weaponsmith"] = 9787,
+	}
+
+	local FACTION_TEXT = {
+		["thorium brotherhood"] = 98,
+		["zandalar tribe"] = 100,
+		["argent dawn"] = 96,
+		["timbermaw hold"] = 99,
+		["cenarion circle"] = 97,
+		["the aldor"] = 101,
+		["the consortium"] = 105,
+		["the scryers"] = 110,
+		["the sha'tar"] = 111,
+		["the mag'har"] = 108,
+		["cenarion expedition"] = 103,
+		["honor hold"] = 104,
+		["thrallmar"] = 104,
+		["the violet eye"] = 114,
+		["sporeggar"] = 113,
+		["kurenai"] = 108,
+		["keepers of time"] = 106,
+		["the scale of the sands"] = 109,
+		["lower city"] = 107,
+		["ashtongue deathsworn"] = 102,
+		["alliance vanguard"] = 131,
+		["valiance expedition"] = 126,
+		["horde expedition"] = 130,
+		["the taunka"] = 128,
+		["the hand of vengeance"] = 127,
+		["explorers' league"] = 125,
+		["the kalu'ak"] = 120,
+		["shattered sun offensive"] = 112,
+		["warsong offensive"] = 129,
+		["kirin tor"] = 118,
+		["the wyrmrest accord"] = 122,
+		["knights of the ebon blade"] = 117,
+		["frenzyheart tribe"] = 116,
+		["the oracles"] = 121,
+		["argent crusade"] = 115,
+		["the sons of hodir"] = 119,
+	}
+
+	local FACTION_LEVELS = {
+		["neutral"] = 0,
+		["friendly"] = 1,
+		["honored"] = 2,
+		["revered"] = 3,
+		["exalted"] = 4,
+	}
+
+	local CLASS_TYPES = {
+		["Death Knight"]	= 21, 	["Druid"]	= 22, 	["Hunter"]	= 23,
+		["Mage"]		= 24, 	["Paladin"]	= 25, 	["Priest"]	= 26,
+		["Shaman"]		= 27, 	["Rogue"]	= 28, 	["Warlock"]	= 29,
+		["Warrior"]		= 30,
+	}
+
+	local ORDERED_CLASS_TYPES = {
+		[1]	= "Death Knight", 	[2]	= "Druid", 	[3]	= "Hunter",
+		[4]	= "Mage", 		[5]	= "Paladin", 	[6]	= "Priest",
+		[7]	= "Shaman", 		[8]	= "Rogue", 	[9]	= "Warlock",
+		[10]	= "Warrior",
+	}
+
+	local ROLE_TYPES = {
+		["dps"]		= 51, 	["tank"]	= 52, 	["healer"]	= 53,
+		["caster"]	= 54,
+	}
+
+	local ORDERED_ROLE_TYPES = {
+		[1]	= "dps", 	[2]	= "tank", 	[3]	= "healer",
+		[4]	= "caster",
+	}
+
+	local ENCHANT_TO_ITEM = {
+		["Cloak"]	= "Back",
+		["Ring"]	= "Finger",
+		["2H Weapon"]	= "Two-Hand",
+	}
+
+	local ITEM_TYPES = {
+		-- Armor types
+		["Cloth"]	= 56, 	["Leather"]	= 57, 	["Mail"]	= 58,
+		["Plate"]	= 59, 	["Back"]	= 60, 	["Trinket"]	= 61,
+		["Finger"]	= 62, 	["Neck"]	= 63, 	["Shield"]	= 64,
+
+		-- Weapon types
+		["One-Hand"]	= 66, 	["Two-Hand"]	= 67, 	["Axe"]		= 68,
+		["Sword"]	= 69, 	["Mace"]	= 70, 	["Polearm"]	= 71,
+		["Dagger"]	= 72, 	["Staff"]	= 73, 	["Wand"]	= 74,
+		["Thrown"]	= 75, 	["Bow"]		= 76, 	["CrossBow"]	= 77,
+		["Ammo"]	= 78, 	["Fist Weapon"]	= 79, 	["Gun"]		= 80,
+	}
+
+	local ORDERED_ITEM_TYPES = {
+		-- Armor types
+		[1]	= "Cloth", 	[2]	= "Leather", 	[3]	= "Mail",
+		[4]	= "Plate", 	[5]	= "Back", 	[6]	= "Trinket",
+		[7]	= "Finger", 	[8]	= "Neck", 	[9]	= "Shield",
+
+		-- Weapon types
+		[11]	= "One-Hand", 	[12]	= "Two-Hand", 	[13]	= "Axe",
+		[14]	= "Sword", 	[15]	= "Mace", 	[16]	= "Polearm",
+		[17]	= "Dagger", 	[18]	= "Staff", 	[19]	= "Wand",
+		[20]	= "Thrown", 	[21]	= "Bow", 	[22]	= "CrossBow",
+		[23]	= "Ammo", 	[24]	= "Fist Weapon", 	[25]	= "Gun",
+	}
+
+	--- Parses the mining tooltip for certain keywords, comparing them with the database flags
+	-- @name AckisRecipeList:ScanToolTip
+	-- @param name The name of the recipe
+	-- @param recipe_list Recipe database
+	-- @param reverse_lookup Reverse lookup database
+	-- @param is_vendor Boolean to indicate if we're scanning a vendor
+	-- @return Scans a tooltip, and outputs the missing or extra filter flags
+	function addon:ScanToolTip(name, recipe_list, reverse_lookup, is_vendor)
+		scan_data.match_name = name
+		scan_data.recipe_list = recipe_list
+		scan_data.reverse_lookup = reverse_lookup
+		scan_data.is_vendor = is_vendor
+
+		-- Parse all the lines of the tooltip
+		for i = 1, ARLDatamineTT:NumLines(), 1 do
+			local text_l = _G["ARLDatamineTTTextLeft" .. i]:GetText()
+			local text_r = _G["ARLDatamineTTTextRight" .. i]:GetText()
+			local text
+
+			if text_r then
+				text = text_l .. " " .. text_r
+			else
+				text = text_l
+			end
+
+			local text = string.lower(text)
+
+			-- Check for recipe/item binding
+			-- The recipe binding is within the first few lines of the tooltip always
+			if string.match(text, "binds when picked up") then
+				if (i < 3) then
+					scan_data.recipe_bop = true
+				else
+					scan_data.item_bop = true
+				end
+			end
+
+			-- Recipe Specialities
+			if SPECIALTY_TEXT[text] then
+				scan_data.specialty = SPECIALTY_TEXT[text]
+			end
+
+			-- Recipe Reputations
+			local rep, replevel = string.match(text_l, "Requires (.+) %- (.+)")
+
+			if rep and replevel and FACTION_TEXT[rep] then
+				scan_data.repid = FACTION_TEXT[rep]
+				scan_data.repidlevel = FACTION_LEVELS[replevel]
+			end
+
+			-- Flag so that we don't bother checking for classes if we're sure of the class
+			-- AKA +spell hit == caster DPS only no matter what other stats are on it
+			-- Saves processing cycles and it won't cause the flags to be overwritten if a non-specific stat is found after
+			scan_data.verifiedclass = false
+
+			if not scan_data.verifiedclass then
+				-- Certain stats can be considered for a specific role (aka spell hit == caster dps).
+				if string.match(text, "strength") and not string.match(text, "strength of the clefthoof") and not string.match(text,  "set:") then
+					scan_data.dps = true
+				elseif string.match(text, "agility") then
+					scan_data.dps = true
+				elseif string.match(text, "spirit") then
+					scan_data.caster = true
+					scan_data.healer = true
+				elseif string.match(text, "spell power") then
+					scan_data.caster = true
+					scan_data.healer = true
+				elseif string.match(text, "spell crit") then
+					scan_data.caster = true
+					scan_data.healer = true
+				elseif string.match(text, "spell hit") then
+					scan_data.caster = true
+					scan_data.verifiedclass = true
+				elseif string.match(text, "spell penetration") then
+					scan_data.caster = true
+					scan_data.verifiedclass = true
+				elseif string.match(text, "mana per 5 sec.") or string.match(text, "mana every 5 seconds") then
+					scan_data.caster = true
+					scan_data.healer = true
+				elseif string.match(text, "attack power") then
+					scan_data.dps = true
+				elseif string.match(text, "expertise") then
+					scan_data.dps = true
+					scan_data.tank = true
+				elseif string.match(text, "melee crit") then
+					scan_data.dps = true
+				elseif string.match(text, "critical hit") then
+					scan_data.dps = true
+				elseif string.match(text, "weapon damage") then
+					scan_data.dps = true
+				elseif string.match(text, "ranged crit") then
+					scan_data.dps = true
+					scan_data.verifiedclass = true
+				elseif string.match(text, "melee haste") then
+					scan_data.dps = true
+				elseif string.match(text, "ranged haste") then
+					scan_data.dps = true
+					scan_data.verifiedclass = true
+				elseif string.match(text, "melee hit") then
+					scan_data.dps = true
+				elseif string.match(text, "ranged hit") then
+					scan_data.dps = true
+					scan_data.verifiedclass = true
+				elseif string.match(text, "armor pen") then
+					scan_data.dps = true
+				elseif string.match(text, "feral attack power") then
+					scan_data.tank = true
+					scan_data.dps = true
+				elseif string.match(text, "defense") and not string.match(text, "defenseless") then
+					scan_data.tank = true
+					scan_data.verifiedclass = true
+				elseif string.match(text, "block") then
+					scan_data.tank = true
+					scan_data.verifiedclass = true
+				elseif string.match(text, "parry") then
+					scan_data.tank = true
+					scan_data.verifiedclass = true
+				elseif string.match(text, "dodge") and not string.match(text,  "set:") then
+					scan_data.tank = true
+					scan_data.verifiedclass = true
+				end
+			end
+
+			-- Classes
+			local class_type = string.match(text_l, "Classes: (.+)")
+
+			if class_type then
+				for idx, class in ipairs(ORDERED_CLASS_TYPES) do
+					if string.match(class_type, class) then
+						scan_data[class] = true
+						scan_data.found_class = true
+					end
+				end
+			end
+
+			-- Armor types
+			if ITEM_TYPES[text_l] then
+				scan_data[text_l] = true
+			elseif text_l == "Held In Off-hand" or text_l == "Off Hand" or text_l == "Main Hand" then	-- Special cases.
+				scan_data["One-Hand"] = true
+			elseif text_l == "Projectile" then
+				scan_data["Ammo"] = true
+			end
+
+			if text_r and ITEM_TYPES[text_r] then
+				scan_data[text_r] = true
+			end
+
+			-- Enchantment voodoo
+			local ench_type, _ = string.match(text_l, "Enchant (.+) %- (.+)")
+
+			if ench_type then
+				if ITEM_TYPES[ench_type] then
+					scan_data[ench_type] = true
+				elseif ITEM_TYPES[ENCHANT_TO_ITEM[ench_type]] then
+					scan_data[ENCHANT_TO_ITEM[ench_type]] = true
+				elseif ench_type == "Weapon" then		-- Special case.
+					scan_data["One-Hand"] = true
+					scan_data["Two-Hand"] = true
+				end
+			end
+		end	-- for
+	end
+
+	-- Flag data for printing. Wiped and re-used.
+	local missing_flags = {}
+	local extra_flags = {}
+	local output = {}
+
+	local ACQUIRE_TO_FILTER_MAP = {
+		[A.MOB_DROP]	= F.MOB_DROP,
+		[A.QUEST]	= F.QUEST,
+		[A.SEASONAL]	= F.SEASONAL,
+		[A.WORLD_DROP]	= F.WORLD_DROP,
+	}
+	local FILTER_TO_ACQUIRE_MAP
+
+	--- Prints out the results of the tooltip scan.
+	-- @name AckisRecipeList:PrintScanResults
+	function addon:PrintScanResults()
+		if not scan_data.match_name then
+			return
+		end
+
+		-- Parse the recipe database until we get a match on the name
+		local recipe_name = string.gsub(scan_data.match_name, "%a+%?: ", "")
+		local spell_id = scan_data.reverse_lookup[recipe_name]
+
+		if not spell_id then
+			self:Print(recipe_name .. " has no reverse lookup")
+			return
+		end
+		local recipe = scan_data.recipe_list[spell_id]
+		local acquire_data = recipe["acquire_data"]
+
+		local FS = private.filter_strings
+		local flag_format = "F.%s"
+
+		twipe(missing_flags)
+		twipe(extra_flags)
+		twipe(output)
+
+		-- If we're a vendor scan,  do some extra checks
+		if scan_data.is_vendor then
+			-- Check to see if the vendor flag is set
+			if not recipe:IsFlagged("common1", "VENDOR") then
+				tinsert(missing_flags, string.format(flag_format, FS[F.VENDOR]))
+			end
+
+			-- Check to see if we're in a PVP zone
+			if (GetSubZoneText() == "Wintergrasp Fortress" or GetSubZoneText() == "Halaa") and not recipe:IsFlagged("common1", "PVP") then
+				tinsert(missing_flags, string.format(flag_format, FS[F.PVP]))
+			elseif recipe:IsFlagged("common1", "PVP") and not (GetSubZoneText() == "Wintergrasp Fortress" or GetSubZoneText() == "Halaa") then
+				tinsert(extra_flags, string.format(flag_format, FS[F.PVP]))
+			end
+		end
+
+		-- -- If we've picked up at least one class flag
+		if scan_data.found_class then
+			for k, v in ipairs(ORDERED_CLASS_TYPES) do
+				if scan_data[v] and not recipe:IsFlagged("class1", FS[CLASS_TYPES[v]]) then
+					tinsert(missing_flags, string.format(flag_format, FS[CLASS_TYPES[v]]))
+				elseif not scan_data[v] and recipe:IsFlagged("class1", FS[CLASS_TYPES[v]]) then
+					tinsert(extra_flags, string.format(flag_format, FS[CLASS_TYPES[v]]))
+				end
+			end
+		end
+
+		if scan_data.item_bop and not recipe:IsFlagged("common1", "IBOP") then
+			tinsert(missing_flags, string.format(flag_format, FS[F.IBOP]))
+
+			if recipe:IsFlagged("common1", "IBOE") then
+				tinsert(extra_flags, string.format(flag_format, FS[F.IBOE]))
+			end
+
+			if recipe:IsFlagged("common1", "IBOA") then
+				tinsert(extra_flags, string.format(flag_format, FS[F.IBOA]))
+			end
+		elseif not recipe:IsFlagged("common1", "IBOE") and not scan_data.item_bop then
+			tinsert(missing_flags, string.format(flag_format, FS[F.IBOE]))
+
+			if recipe:IsFlagged("common1", "IBOP") then
+				tinsert(extra_flags, string.format(flag_format, FS[F.IBOP]))
+			end
+
+			if recipe:IsFlagged("common1", "IBOA") then
+				tinsert(extra_flags, string.format(flag_format, FS[F.IBOA]))
+			end
+		end
+
+		if scan_data.recipe_bop and not recipe:IsFlagged("common1", "RBOP") then
+			tinsert(missing_flags, string.format(flag_format, FS[F.RBOP]))
+
+			if recipe:IsFlagged("common1", "RBOE") then
+				tinsert(extra_flags, string.format(flag_format, FS[F.RBOE]))
+			end
+
+			if recipe:IsFlagged("common1", "RBOA") then
+				tinsert(extra_flags, string.format(flag_format, FS[F.RBOA]))
+			end
+
+		elseif not recipe:IsFlagged("common1", "TRAINER") and not recipe:IsFlagged("common1", "RBOE") and not scan_data.recipe_bop then
+			tinsert(missing_flags, string.format(flag_format, FS[F.RBOE]))
+
+			if recipe:IsFlagged("common1", "RBOP") then
+				tinsert(extra_flags, string.format(flag_format, FS[F.RBOP]))
+			end
+
+			if recipe:IsFlagged("common1", "RBOA") then
+				tinsert(extra_flags, string.format(flag_format, FS[F.RBOA]))
+			end
+		end
+
+		for k, v in ipairs(ORDERED_ROLE_TYPES) do
+			local role_string = FS[ROLE_TYPES[v]]
+
+			if scan_data[v] and not recipe:IsFlagged("common1", role_string) then
+				tinsert(missing_flags, string.format(flag_format, role_string))
+			elseif not scan_data[v] and recipe:IsFlagged("common1", role_string) then
+				tinsert(extra_flags, string.format(flag_format, role_string))
+			end
+		end
+
+		for k, v in ipairs(ORDERED_ITEM_TYPES) do
+			if scan_data[v] and not recipe:IsFlagged("item1", FS[ITEM_TYPES[v]]) then
+				tinsert(missing_flags, string.format(flag_format, FS[ITEM_TYPES[v]]))
+			elseif not scan_data[v] and recipe:IsFlagged("item1", FS[ITEM_TYPES[v]]) then
+				tinsert(extra_flags, string.format(flag_format, FS[ITEM_TYPES[v]]))
+			end
+		end
+
+		-- Reputations
+		local repid = scan_data.repid
+		local found_problem = false
+
+		if repid and not recipe:IsFlagged("reputation1", FS[repid]) and not recipe:IsFlagged("reputation2", FS[repid]) then
+			tinsert(missing_flags, repid)
+
+			local rep_data = acquire_data[A.REPUTATION]
+
+			if rep_data then
+				for rep_id, rep_info in pairs(acquire_info) do
+					for rep_level, level_info in pairs(rep_info) do
+						if rep_level ~= scan_data.repidlevel then
+							tinsert(output, "    Wrong reputation level.")
+						end
+					end
+				end
+			end
+		end
+
+		-- Make sure the recipe's filter flags match with its acquire types.
+		if not FILTER_TO_ACQUIRE_MAP then
+			FILTER_TO_ACQUIRE_MAP = {}
+
+			for k, v in pairs(ACQUIRE_TO_FILTER_MAP) do
+				FILTER_TO_ACQUIRE_MAP[v] = k
+			end
+		end
+
+		for acquire_type in pairs(acquire_data) do
+			local flag = ACQUIRE_TO_FILTER_MAP[acquire_type]
+
+			if flag and not recipe:IsFlagged("common1", FS[flag]) then
+				tinsert(missing_flags, string.format(flag_format, FS[flag]))
+			end
+		end
+
+		if (acquire_data[A.VENDOR] or acquire_data[A.REPUTATION]) and not recipe:IsFlagged("common1", "VENDOR") then
+			tinsert(missing_flags, string.format(flag_format, FS[F.VENDOR]))
+		end
+
+		if recipe:IsFlagged("common1", "VENDOR") and not (acquire_data[A.VENDOR] or acquire_data[A.REPUTATION]) then
+			tinsert(extra_flags, string.format(flag_format, FS[F.VENDOR]))
+		end
+
+		if acquire_data[A.TRAINER] and not recipe:IsFlagged("common1", "TRAINER") then
+			tinsert(missing_flags, string.format(flag_format, FS[F.TRAINER]))
+		end
+
+		if recipe:IsFlagged("common1", "TRAINER") and not acquire_data[A.TRAINER] then
+			if not acquire_data[A.CUSTOM] then
+				tinsert(extra_flags, string.format(flag_format, FS[F.TRAINER]))
+			end
+		end
+
+		for flag, acquire_type in pairs(FILTER_TO_ACQUIRE_MAP) do
+			if recipe:IsFlagged("common1", FS[flag]) and not acquire_data[acquire_type] then
+				tinsert(extra_flags, string.format(flag_format, FS[flag]))
+			end
+		end
+
+		if #missing_flags > 0 or #extra_flags > 0 then
+			found_problem = true
+
+			-- Add a string of the missing flag numbers
+			if #missing_flags > 0 then
+				tinsert(output, "    Missing flags: " .. tconcat(missing_flags, ", "))
+			end
+
+			-- Add a string of the extra flag numbers
+			if #extra_flags > 0 then
+				tinsert(output, "    Extra flags: " .. tconcat(extra_flags, ", "))
+			end
+			local found_type = false
+
+			for k, v in ipairs(ORDERED_ITEM_TYPES) do
+				if scan_data[v] then
+					found_type = true
+					break
+				end
+			end
+
+			if not found_type then
+				tinsert(output, "    Missing: item type flag")
+			end
+		end
+
+		-- Check to see if we have a horde/alliance flag,  all recipes must have one of these
+		if not recipe:IsFlagged("common1", "ALLIANCE") and not recipe:IsFlagged("common1", "HORDE") then
+			found_problem = true
+			tinsert(output, "    Horde or Alliance not selected.")
+		end
+
+		-- Check to see if we have an obtain method flag,  all recipes must have at least one of these
+		if (not recipe:IsFlagged("common1", "TRAINER") and not recipe:IsFlagged("common1", "VENDOR") and not recipe:IsFlagged("common1", "INSTANCE") and not recipe:IsFlagged("common1", "RAID")
+		    and not recipe:IsFlagged("common1", "SEASONAL") and not recipe:IsFlagged("common1", "QUEST") and not recipe:IsFlagged("common1", "PVP") and not recipe:IsFlagged("common1", "WORLD_DROP")
+		    and not recipe:IsFlagged("common1", "MOB_DROP") and not recipe:IsFlagged("common1", "DISC")) then
+			found_problem = true
+			tinsert(output, "    No obtain flag.")
+		end
+
+		-- Check for recipe binding information,  all recipes must have one of these
+		if not recipe:IsFlagged("common1", "RBOE") and not recipe:IsFlagged("common1", "RBOP") and not recipe:IsFlagged("common1", "RBOA") then
+			found_problem = true
+			tinsert(output, "    No recipe binding information.")
+		end
+
+		-- Check for item binding information,  all recipes must have one of these
+		if not recipe:IsFlagged("common1", "IBOE") and not recipe:IsFlagged("common1", "IBOP") and not recipe:IsFlagged("common1", "IBOA") then
+			found_problem = true
+			tinsert(output, "    No item binding information.")
+		end
+
+		-- We need to code this better.  Some items (aka bags) won't have a role at all.
+		-- Check for player role flags
+		if not scan_data.tank and not scan_data.healer and not scan_data.caster and not scan_data.dps and not NO_ROLE_FLAG[spell_id] then
+			found_problem = true
+			tinsert(output, "    No player role flag.")
+		end
+
+		if scan_data.specialty then
+			if not recipe.specialty then
+				found_problem = true
+				tinsert(output, string.format("    Missing Specialty: %s", scan_data.specialty))
+			elseif recipe.specialty ~= scan_data.specialty then
+				tinsert(output, string.format("    Wrong Specialty: %s - should be %s ", recipe.specialty, scan_data.specialty))
+			end
+		elseif recipe.specialty then
+			found_problem = true
+			tinsert(output, string.format("    Extra Specialty: %s", recipe.specialty))
+		end
+
+		if scan_data.quality ~= recipe.quality then
+			local QS = private.item_quality_names
+
+			found_problem = true
+			tinsert(output, string.format("    Wrong quality: Q.%s - should be Q.%s.", QS[recipe.quality], QS[scan_data.quality]))
+		end
+		if found_problem then
+			tinsert(output, 1, string.format("%s: <a href=\"http://www.wowhead.com/?spell=%d\">%d</a>", recipe_name, spell_id, spell_id))
+			return tconcat(output, "\n")
+		else
+			return
+		end
+	end
+end
\ No newline at end of file