From 1c41a68a03ad51fb0daf673987d06683cc4a63c1 Mon Sep 17 00:00:00 2001 From: Melvin Valster Date: Tue, 23 Jul 2019 13:21:44 +0200 Subject: [PATCH] Updates --- asset-manifest.json | 6 +++--- index.html | 2 +- ... precache-manifest.e8f346d735a1da35486443044035ebf9.js | 8 ++++---- service-worker.js | 2 +- static/js/main.3f32f54d.chunk.js.map | 1 - .../js/{main.3f32f54d.chunk.js => main.efad2c29.chunk.js} | 4 ++-- static/js/main.efad2c29.chunk.js.map | 1 + 7 files changed, 12 insertions(+), 12 deletions(-) rename precache-manifest.b5870c5dfb96ad8e7487b04def8860cc.js => precache-manifest.e8f346d735a1da35486443044035ebf9.js (69%) delete mode 100644 static/js/main.3f32f54d.chunk.js.map rename static/js/{main.3f32f54d.chunk.js => main.efad2c29.chunk.js} (86%) create mode 100644 static/js/main.efad2c29.chunk.js.map diff --git a/asset-manifest.json b/asset-manifest.json index d979132..3ac802e 100644 --- a/asset-manifest.json +++ b/asset-manifest.json @@ -1,14 +1,14 @@ { "files": { "main.css": "/wow-talent-calculator/static/css/main.c3222de2.chunk.css", - "main.js": "/wow-talent-calculator/static/js/main.3f32f54d.chunk.js", - "main.js.map": "/wow-talent-calculator/static/js/main.3f32f54d.chunk.js.map", + "main.js": "/wow-talent-calculator/static/js/main.efad2c29.chunk.js", + "main.js.map": "/wow-talent-calculator/static/js/main.efad2c29.chunk.js.map", "runtime~main.js": "/wow-talent-calculator/static/js/runtime~main.765bec70.js", "runtime~main.js.map": "/wow-talent-calculator/static/js/runtime~main.765bec70.js.map", "static/js/2.b60f3740.chunk.js": "/wow-talent-calculator/static/js/2.b60f3740.chunk.js", "static/js/2.b60f3740.chunk.js.map": "/wow-talent-calculator/static/js/2.b60f3740.chunk.js.map", "index.html": "/wow-talent-calculator/index.html", - "precache-manifest.b5870c5dfb96ad8e7487b04def8860cc.js": "/wow-talent-calculator/precache-manifest.b5870c5dfb96ad8e7487b04def8860cc.js", + "precache-manifest.e8f346d735a1da35486443044035ebf9.js": "/wow-talent-calculator/precache-manifest.e8f346d735a1da35486443044035ebf9.js", "service-worker.js": "/wow-talent-calculator/service-worker.js", "static/css/main.c3222de2.chunk.css.map": "/wow-talent-calculator/static/css/main.c3222de2.chunk.css.map" } diff --git a/index.html b/index.html index f3d6578..45de241 100644 --- a/index.html +++ b/index.html @@ -1 +1 @@ -Talent Calculator
\ No newline at end of file +Talent Calculator
\ No newline at end of file diff --git a/precache-manifest.b5870c5dfb96ad8e7487b04def8860cc.js b/precache-manifest.e8f346d735a1da35486443044035ebf9.js similarity index 69% rename from precache-manifest.b5870c5dfb96ad8e7487b04def8860cc.js rename to precache-manifest.e8f346d735a1da35486443044035ebf9.js index def710f..94b8ada 100644 --- a/precache-manifest.b5870c5dfb96ad8e7487b04def8860cc.js +++ b/precache-manifest.e8f346d735a1da35486443044035ebf9.js @@ -1,10 +1,10 @@ self.__precacheManifest = (self.__precacheManifest || []).concat([ { - "revision": "f8d791dea118b58bc6aed0bfd7397c8a", + "revision": "9e02b78550c53b05f2be95aa4cc42952", "url": "/wow-talent-calculator/index.html" }, { - "revision": "d0168e381ec7b0897272", + "revision": "940350108e9911c15d38", "url": "/wow-talent-calculator/static/css/main.c3222de2.chunk.css" }, { @@ -12,8 +12,8 @@ self.__precacheManifest = (self.__precacheManifest || []).concat([ "url": "/wow-talent-calculator/static/js/2.b60f3740.chunk.js" }, { - "revision": "d0168e381ec7b0897272", - "url": "/wow-talent-calculator/static/js/main.3f32f54d.chunk.js" + "revision": "940350108e9911c15d38", + "url": "/wow-talent-calculator/static/js/main.efad2c29.chunk.js" }, { "revision": "fbb537f9cfa0840057ae", diff --git a/service-worker.js b/service-worker.js index 8323dc4..4b665da 100644 --- a/service-worker.js +++ b/service-worker.js @@ -14,7 +14,7 @@ importScripts("https://storage.googleapis.com/workbox-cdn/releases/4.3.1/workbox-sw.js"); importScripts( - "/wow-talent-calculator/precache-manifest.b5870c5dfb96ad8e7487b04def8860cc.js" + "/wow-talent-calculator/precache-manifest.e8f346d735a1da35486443044035ebf9.js" ); self.addEventListener('message', (event) => { diff --git a/static/js/main.3f32f54d.chunk.js.map b/static/js/main.3f32f54d.chunk.js.map deleted file mode 100644 index c784c0c..0000000 --- a/static/js/main.3f32f54d.chunk.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":["components/Icon.tsx","data/talents.ts","data/classes.ts","lib/tree.ts","components/TalentSlot.tsx","components/Arrow.tsx","components/TalentTree.tsx","components/Calculator.tsx","components/ClassPicker.tsx","components/IndexRoute.tsx","App.tsx","serviceWorker.ts","index.tsx"],"names":["Icon","_ref","name","_ref$size","size","_ref$golden","golden","children","className","classNames","concat","icon--golden","bgStyle","backgroundImage","react_default","a","createElement","style","specNames","41","61","81","161","163","164","181","182","183","201","202","203","261","262","263","281","282","283","301","302","303","361","362","363","381","382","383","talentsBySpec","26","id","row","col","icon","ranks","requires","30","34","28","27","1141","31","29","23","25","24","1639","33","32","qty","35","36","70","37","1649","73","38","62","65","69","63","741","66","67","72","64","68","71","74","76","80","78","1650","75","82","85","83","88","1142","86","77","421","87","124","130","127","126","641","128","131","137","121","136","662","132","133","125","123","134","129","135","1601","138","142","140","141","153","145","147","144","146","151","143","150","152","149","702","148","158","157","159","166","160","661","154","1581","1542","155","168","165","1543","1541","156","167","186","187","204","222","206","221","184","223","242","1703","1122","205","276","272","270","273","274","277","278","269","682","268","280","279","241","1700","247","244","245","246","1123","1701","284","265","681","1702","342","345","352","344","343","321","348","347","346","341","350","1201","351","1202","322","410","406","401","411","1181","442","1636","1635","408","403","413","1561","402","404","1637","465","464","466","482","463","542","481","501","483","881","461","541","484","1638","462","521","564","563","572","1640","561","574","575","562","567","1642","1645","1641","565","721","573","586","593","589","581","595","583","587","582","1646","588","594","1648","591","592","590","614","612","609","613","605","607","610","617","601","602","615","1647","611","616","1643","901","796","795","799","797","794","807","804","798","802","803","800","801","805","1162","808","809","821","822","824","823","826","829","827","841","843","830","831","828","842","825","844","762","761","921","787","763","791","781","782","788","764","792","784","789","783","790","793","944","941","943","982","983","984","981","963","985","964","965","986","961","967","966","968","1005","1003","1006","1101","1007","1004","1284","1001","1061","1021","1002","1121","1041","1081","1082","1042","1022","1221","1222","1223","1224","1225","1242","1243","1226","1241","1227","1262","1283","1281","1261","1244","1282","1263","1382","1389","1624","1381","1395","1625","1384","1391","1396","1385","1393","1388","1387","1390","1397","1386","1623","1301","1311","1304","1621","1305","1306","1622","1308","1322","1310","1309","1321","1312","1303","1325","1341","1342","1343","1344","1345","1346","1352","1348","1349","1353","1347","1351","1362","1361","1401","1407","1631","1464","1403","1633","1411","1481","1634","1632","1405","1410","1409","1402","1441","1450","1449","1432","1463","1444","1435","1443","1628","1461","1446","1433","1465","1627","1502","1422","1421","1630","1425","1423","1442","1501","1424","1629","1521","1626","1431","1426","1429","1430","talentsById","talentsBySpecArray","talentToSpec","specId","talentId","Object","values","parseInt","classes","specs","classByName","reduce","previousValue","currentValue","objectSpread","defineProperty","toLowerCase","MAX_POINTS","SORT_TALENTS","b","getPointsInSpec","known","prev","current","get","calcAvailablePoints","Math","max","calcMeetsRequirements","talent","length","req","canLearnTalent","modifyTalentPoint","modifier","currentPoints","set","addTalentPoint","console","warn","isDependency","highestRow","cumulativePointsPerRow","forEach","points","t","some","info","pointsUntilHighestRow","targetPointsHighestRow","remove","removeTalentPoint","decodeKnownTalents","pointString","log","Map","parts","split","i","specPointStr","talents","sort","y","removeTrailingCharacters","str","char","slice","TalentSlot","props","knownTalents","availablePoints","showPoints","disabled","pointsInSpec","isAvailable","containerClassNames","talent--disabled","talent--available","talent--maxed","pointsClassNames","point-label--enabled","title","toString","data-row","data-col","onClick","onContextMenu","e","onRightClick","preventDefault","Icon_Icon","defaultProps","whyDidYouRender","Arrow","from","to","_ref$active","active","abs","data-length","arrow--active","arrow--down","arrow--right","arrow--left","arrow--right-down","assign","TalentTree","onTalentPress","handleClick","useCallback","handleRightClick","bodyStyle","arrows","filter","map","Arrow_Arrow","key","TalentSlot_TalentSlot","EMPTY_TALENTS","Calculator","_React$PureComponent","_getPrototypeOf2","_this","classCallCheck","this","_len","arguments","args","Array","_key","possibleConstructorReturn","getPrototypeOf","call","apply","state","handleTalentPress","newKnownTalents","updateURL","setState","inherits","createClass","value","initialTalents","prevProps","selectedClass","string","join","encodeKnownTalents","history","replace","_this2","classData","TalentTree_TalentTree","href","React","PureComponent","classNameForItem","c","selected","class-picker__class--active","class-picker__class--inactive","ClassPicker","cn","class-picker--has-selection","react_router_dom","IndexRoute","match","params","_this$props","_match$params","ClassPicker_ClassPicker","Calculator_Calculator","App","react_router","path","component","Boolean","window","location","hostname","ReactDOM","render","src_App_0","document","getElementById","navigator","serviceWorker","ready","then","registration","unregister"],"mappings":"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","file":"static/js/main.3f32f54d.chunk.js","sourcesContent":["import React, { FC } from 'react'\nimport classNames from 'classnames'\nimport './Icon.scss'\n\ninterface Props {\n name: string\n size?: 'small' | 'medium' | 'large'\n golden?: boolean\n}\n\nexport const Icon: FC = ({ name, size = 'medium', golden = false, children }) => {\n const className = classNames(\n 'icon', \n `icon--${size}`, {\n 'icon--golden': golden\n }\n )\n\n const bgSize = size === 'medium' ? 'large' : 'medium'\n const bgStyle = {\n backgroundImage: `url(https://wow.zamimg.com/images/wow/icons/${bgSize}/${name}.jpg)`\n }\n\n return (\n
\n
\n
\n {children}\n
\n )\n}","interface Root {\n /** ID of the talent tree */\n [key: number]: {\n /** ID of the talent */\n [key: number]: TalentData\n }\n}\n\nexport const specNames = {\n 41: \"Fire\",\n 61: \"Frost\",\n 81: \"Arcane\",\n 161: \"Arms\",\n 163: \"Protection\",\n 164: \"Fury\",\n 181: \"Combat\",\n 182: \"Assassination\",\n 183: \"Subtlety\",\n 201: \"Discipline\",\n 202: \"Holy\",\n 203: \"Shadow\",\n 261: \"Elemental\",\n 262: \"Restoration\",\n 263: \"Enhancement\",\n 281: \"Feral Combat\",\n 282: \"Restoration\",\n 283: \"Balance\",\n 301: \"Destruction\",\n 302: \"Affliction\",\n 303: \"Demonology\",\n 361: \"Beast Mastery\",\n 362: \"Survival\",\n 363: \"Marksmanship\",\n 381: \"Retribution\",\n 382: \"Holy\",\n 383: \"Protection\"\n}\n\nexport const talentsBySpec: Root = {\n 41: {\n 26: {\n \"id\": 26,\n \"row\": 0,\n \"col\": 1,\n \"icon\": \"spell_fire_flamebolt\",\n \"ranks\": [11069, 12338, 12339, 12340, 12341],\n \"requires\": []\n },\n 30: {\n \"id\": 30,\n \"row\": 0,\n \"col\": 2,\n \"icon\": \"spell_fire_meteorstorm\",\n \"ranks\": [11103, 12357, 12358, 12359, 12360],\n \"requires\": []\n },\n 34: {\n \"id\": 34,\n \"row\": 1,\n \"col\": 0,\n \"icon\": \"spell_fire_incinerate\",\n \"ranks\": [11119, 11120, 12846, 12847, 12848],\n \"requires\": []\n },\n 28: {\n \"id\": 28,\n \"row\": 1,\n \"col\": 1,\n \"icon\": \"spell_fire_flare\",\n \"ranks\": [11100, 12353],\n \"requires\": []\n },\n 27: {\n \"id\": 27,\n \"row\": 1,\n \"col\": 2,\n \"icon\": \"spell_fire_fireball\",\n \"ranks\": [11078, 11080, 12342],\n \"requires\": []\n },\n 1141: {\n \"id\": 1141,\n \"row\": 2,\n \"col\": 0,\n \"icon\": \"spell_fire_flameshock\",\n \"ranks\": [18459, 18460],\n \"requires\": []\n },\n 31: {\n \"id\": 31,\n \"row\": 2,\n \"col\": 1,\n \"icon\": \"spell_fire_selfdestruct\",\n \"ranks\": [11108, 12349, 12350],\n \"requires\": []\n },\n 29: {\n \"id\": 29,\n \"row\": 2,\n \"col\": 2,\n \"icon\": \"spell_fire_fireball02\",\n \"ranks\": [11366],\n \"requires\": []\n },\n 23: {\n \"id\": 23,\n \"row\": 2,\n \"col\": 3,\n \"icon\": \"spell_fire_fire\",\n \"ranks\": [11083, 12351],\n \"requires\": []\n },\n 25: {\n \"id\": 25,\n \"row\": 3,\n \"col\": 0,\n \"icon\": \"spell_fire_soulburn\",\n \"ranks\": [11095, 12872, 12873],\n \"requires\": []\n },\n 24: {\n \"id\": 24,\n \"row\": 3,\n \"col\": 1,\n \"icon\": \"spell_fire_firearmor\",\n \"ranks\": [11094, 13043],\n \"requires\": []\n },\n 1639: {\n \"id\": 1639,\n \"row\": 3,\n \"col\": 3,\n \"icon\": \"spell_fire_masterofelements\",\n \"ranks\": [29074, 29075, 29076],\n \"requires\": []\n },\n 33: {\n \"id\": 33,\n \"row\": 4,\n \"col\": 1,\n \"icon\": \"spell_nature_wispheal\",\n \"ranks\": [11115, 11367, 11368],\n \"requires\": []\n },\n 32: {\n \"id\": 32,\n \"row\": 4,\n \"col\": 2,\n \"icon\": \"spell_holy_excorcism_02\",\n \"ranks\": [11113],\n \"requires\": [{\n \"id\": 29,\n \"qty\": 1\n }]\n },\n 35: {\n \"id\": 35,\n \"row\": 5,\n \"col\": 2,\n \"icon\": \"spell_fire_immolation\",\n \"ranks\": [11124, 12378, 12398, 12399, 12400],\n \"requires\": []\n },\n 36: {\n \"id\": 36,\n \"row\": 6,\n \"col\": 1,\n \"icon\": \"spell_fire_sealoffire\",\n \"ranks\": [11129],\n \"requires\": [{\n \"id\": 33,\n \"qty\": 3\n }]\n }\n },\n 61: {\n 70: {\n \"id\": 70,\n \"row\": 0,\n \"col\": 0,\n \"icon\": \"spell_frost_frostward\",\n \"ranks\": [11189, 28332],\n \"requires\": []\n },\n 37: {\n \"id\": 37,\n \"row\": 0,\n \"col\": 1,\n \"icon\": \"spell_frost_frostbolt02\",\n \"ranks\": [11070, 12473, 16763, 16765, 16766],\n \"requires\": []\n },\n 1649: {\n \"id\": 1649,\n \"row\": 0,\n \"col\": 2,\n \"icon\": \"spell_ice_magicdamage\",\n \"ranks\": [29438, 29439, 29440],\n \"requires\": []\n },\n 73: {\n \"id\": 73,\n \"row\": 1,\n \"col\": 0,\n \"icon\": \"spell_frost_iceshard\",\n \"ranks\": [11207, 12672, 15047, 15052, 15053],\n \"requires\": []\n },\n 38: {\n \"id\": 38,\n \"row\": 1,\n \"col\": 1,\n \"icon\": \"spell_frost_frostarmor\",\n \"ranks\": [11071, 12496, 12497],\n \"requires\": []\n },\n 62: {\n \"id\": 62,\n \"row\": 1,\n \"col\": 2,\n \"icon\": \"spell_frost_freezingbreath\",\n \"ranks\": [11165, 12475],\n \"requires\": []\n },\n 65: {\n \"id\": 65,\n \"row\": 1,\n \"col\": 3,\n \"icon\": \"spell_frost_wisp\",\n \"ranks\": [11175, 12569, 12571],\n \"requires\": []\n },\n 61: {\n \"id\": 61,\n \"row\": 2,\n \"col\": 0,\n \"icon\": \"spell_frost_frostbolt\",\n \"ranks\": [11151, 12952, 12953],\n \"requires\": []\n },\n 69: {\n \"id\": 69,\n \"row\": 2,\n \"col\": 1,\n \"icon\": \"spell_frost_wizardmark\",\n \"ranks\": [12472],\n \"requires\": []\n },\n 63: {\n \"id\": 63,\n \"row\": 2,\n \"col\": 3,\n \"icon\": \"spell_frost_icestorm\",\n \"ranks\": [11185, 12487, 12488],\n \"requires\": []\n },\n 741: {\n \"id\": 741,\n \"row\": 3,\n \"col\": 0,\n \"icon\": \"spell_shadow_darkritual\",\n \"ranks\": [16757, 16758],\n \"requires\": []\n },\n 66: {\n \"id\": 66,\n \"row\": 3,\n \"col\": 1,\n \"icon\": \"spell_frost_stun\",\n \"ranks\": [11160, 12518, 12519],\n \"requires\": []\n },\n 67: {\n \"id\": 67,\n \"row\": 3,\n \"col\": 2,\n \"icon\": \"spell_frost_frostshock\",\n \"ranks\": [11170, 12982, 12983, 12984, 12985],\n \"requires\": [{\n \"id\": 62,\n \"qty\": 2\n }]\n },\n 72: {\n \"id\": 72,\n \"row\": 4,\n \"col\": 1,\n \"icon\": \"spell_frost_frost\",\n \"ranks\": [11958],\n \"requires\": []\n },\n 64: {\n \"id\": 64,\n \"row\": 4,\n \"col\": 2,\n \"icon\": \"spell_frost_glacier\",\n \"ranks\": [11190, 12489, 12490],\n \"requires\": []\n },\n 68: {\n \"id\": 68,\n \"row\": 5,\n \"col\": 2,\n \"icon\": \"spell_frost_chillingblast\",\n \"ranks\": [11180, 28592, 28593, 28594, 28595],\n \"requires\": []\n },\n 71: {\n \"id\": 71,\n \"row\": 6,\n \"col\": 1,\n \"icon\": \"spell_ice_lament\",\n \"ranks\": [11426],\n \"requires\": [{\n \"id\": 72,\n \"qty\": 1\n }]\n }\n },\n 81: {\n 74: {\n \"id\": 74,\n \"row\": 0,\n \"col\": 0,\n \"icon\": \"spell_holy_dispelmagic\",\n \"ranks\": [11210, 12592],\n \"requires\": []\n },\n 76: {\n \"id\": 76,\n \"row\": 0,\n \"col\": 1,\n \"icon\": \"spell_holy_devotion\",\n \"ranks\": [11222, 12839, 12840, 12841, 12842],\n \"requires\": []\n },\n 80: {\n \"id\": 80,\n \"row\": 0,\n \"col\": 2,\n \"icon\": \"spell_nature_starfall\",\n \"ranks\": [11237, 12463, 12464, 16769, 16770],\n \"requires\": []\n },\n 78: {\n \"id\": 78,\n \"row\": 1,\n \"col\": 0,\n \"icon\": \"inv_wand_01\",\n \"ranks\": [6057, 6085],\n \"requires\": []\n },\n 1650: {\n \"id\": 1650,\n \"row\": 1,\n \"col\": 1,\n \"icon\": \"spell_nature_astralrecalgroup\",\n \"ranks\": [29441, 29444, 29445, 29446, 29447],\n \"requires\": []\n },\n 75: {\n \"id\": 75,\n \"row\": 1,\n \"col\": 2,\n \"icon\": \"spell_shadow_manaburn\",\n \"ranks\": [11213, 12574, 12575, 12576, 12577],\n \"requires\": []\n },\n 82: {\n \"id\": 82,\n \"row\": 2,\n \"col\": 0,\n \"icon\": \"spell_nature_abolishmagic\",\n \"ranks\": [11247, 12606],\n \"requires\": []\n },\n 81: {\n \"id\": 81,\n \"row\": 2,\n \"col\": 1,\n \"icon\": \"spell_nature_wispsplode\",\n \"ranks\": [11242, 12467, 12469],\n \"requires\": []\n },\n 85: {\n \"id\": 85,\n \"row\": 2,\n \"col\": 2,\n \"icon\": \"spell_arcane_arcaneresilience\",\n \"ranks\": [28574],\n \"requires\": []\n },\n 83: {\n \"id\": 83,\n \"row\": 3,\n \"col\": 0,\n \"icon\": \"spell_shadow_detectlesserinvisibility\",\n \"ranks\": [11252, 12605],\n \"requires\": []\n },\n 88: {\n \"id\": 88,\n \"row\": 3,\n \"col\": 1,\n \"icon\": \"spell_frost_iceshock\",\n \"ranks\": [11255, 12598],\n \"requires\": []\n },\n 1142: {\n \"id\": 1142,\n \"row\": 3,\n \"col\": 3,\n \"icon\": \"spell_shadow_siphonmana\",\n \"ranks\": [18462, 18463, 18464],\n \"requires\": []\n },\n 86: {\n \"id\": 86,\n \"row\": 4,\n \"col\": 1,\n \"icon\": \"spell_nature_enchantarmor\",\n \"ranks\": [12043],\n \"requires\": []\n },\n 77: {\n \"id\": 77,\n \"row\": 4,\n \"col\": 2,\n \"icon\": \"spell_shadow_charm\",\n \"ranks\": [11232, 12500, 12501, 12502, 12503],\n \"requires\": [{\n \"id\": 85,\n \"qty\": 1\n }]\n },\n 421: {\n \"id\": 421,\n \"row\": 5,\n \"col\": 1,\n \"icon\": \"spell_shadow_teleport\",\n \"ranks\": [15058, 15059, 15060],\n \"requires\": [{\n \"id\": 86,\n \"qty\": 1\n }]\n },\n 87: {\n \"id\": 87,\n \"row\": 6,\n \"col\": 1,\n \"icon\": \"spell_nature_lightning\",\n \"ranks\": [12042],\n \"requires\": [{\n \"id\": 421,\n \"qty\": 3\n }]\n }\n },\n 161: {\n 124: {\n \"id\": 124,\n \"row\": 0,\n \"col\": 0,\n \"icon\": \"ability_rogue_ambush\",\n \"ranks\": [12282, 12663, 12664],\n \"requires\": []\n },\n 130: {\n \"id\": 130,\n \"row\": 0,\n \"col\": 1,\n \"icon\": \"ability_parry\",\n \"ranks\": [16462, 16463, 16464, 16465, 16466],\n \"requires\": []\n },\n 127: {\n \"id\": 127,\n \"row\": 0,\n \"col\": 2,\n \"icon\": \"ability_gouge\",\n \"ranks\": [12286, 12658, 12659],\n \"requires\": []\n },\n 126: {\n \"id\": 126,\n \"row\": 1,\n \"col\": 0,\n \"icon\": \"ability_warrior_charge\",\n \"ranks\": [12285, 12697],\n \"requires\": []\n },\n 641: {\n \"id\": 641,\n \"row\": 1,\n \"col\": 1,\n \"icon\": \"spell_nature_enchantarmor\",\n \"ranks\": [12295, 12676, 12677, 12678, 12679],\n \"requires\": []\n },\n 128: {\n \"id\": 128,\n \"row\": 1,\n \"col\": 3,\n \"icon\": \"ability_thunderclap\",\n \"ranks\": [12287, 12665, 12666],\n \"requires\": []\n },\n 131: {\n \"id\": 131,\n \"row\": 2,\n \"col\": 0,\n \"icon\": \"inv_sword_05\",\n \"ranks\": [12290, 12963],\n \"requires\": []\n },\n 137: {\n \"id\": 137,\n \"row\": 2,\n \"col\": 1,\n \"icon\": \"spell_holy_blessingofstamina\",\n \"ranks\": [12296],\n \"requires\": [{\n \"id\": 641,\n \"qty\": 5\n }]\n },\n 121: {\n \"id\": 121,\n \"row\": 2,\n \"col\": 2,\n \"icon\": \"ability_backstab\",\n \"ranks\": [12834, 12849, 12867],\n \"requires\": [{\n \"id\": 127,\n \"qty\": 3\n }]\n },\n 136: {\n \"id\": 136,\n \"row\": 3,\n \"col\": 1,\n \"icon\": \"inv_axe_09\",\n \"ranks\": [12163, 12711, 12712, 12713, 12714],\n \"requires\": []\n },\n 662: {\n \"id\": 662,\n \"row\": 3,\n \"col\": 2,\n \"icon\": \"ability_searingarrow\",\n \"ranks\": [16493, 16494],\n \"requires\": [{\n \"id\": 121,\n \"qty\": 3\n }]\n },\n 132: {\n \"id\": 132,\n \"row\": 4,\n \"col\": 0,\n \"icon\": \"inv_axe_06\",\n \"ranks\": [12700, 12781, 12783, 12784, 12785],\n \"requires\": []\n },\n 133: {\n \"id\": 133,\n \"row\": 4,\n \"col\": 1,\n \"icon\": \"ability_rogue_slicedice\",\n \"ranks\": [12292],\n \"requires\": []\n },\n 125: {\n \"id\": 125,\n \"row\": 4,\n \"col\": 2,\n \"icon\": \"inv_mace_01\",\n \"ranks\": [12284, 12701, 12702, 12703, 12704],\n \"requires\": []\n },\n 123: {\n \"id\": 123,\n \"row\": 4,\n \"col\": 3,\n \"icon\": \"inv_sword_27\",\n \"ranks\": [12281, 12812, 12813, 12814, 12815],\n \"requires\": []\n },\n 134: {\n \"id\": 134,\n \"row\": 5,\n \"col\": 0,\n \"icon\": \"inv_weapon_halbard_01\",\n \"ranks\": [12165, 12830, 12831, 12832, 12833],\n \"requires\": []\n },\n 129: {\n \"id\": 129,\n \"row\": 5,\n \"col\": 2,\n \"icon\": \"ability_shockwave\",\n \"ranks\": [12289, 12668, 23695],\n \"requires\": []\n },\n 135: {\n \"id\": 135,\n \"row\": 6,\n \"col\": 1,\n \"icon\": \"ability_warrior_savageblow\",\n \"ranks\": [12294],\n \"requires\": [{\n \"id\": 133,\n \"qty\": 1\n }]\n }\n },\n 163: {\n 1601: {\n \"id\": 1601,\n \"row\": 0,\n \"col\": 1,\n \"icon\": \"inv_shield_06\",\n \"ranks\": [12298, 12724, 12725, 12726, 12727],\n \"requires\": []\n },\n 138: {\n \"id\": 138,\n \"row\": 0,\n \"col\": 2,\n \"icon\": \"spell_nature_mirrorimage\",\n \"ranks\": [12297, 12750, 12751, 12752, 12753],\n \"requires\": []\n },\n 142: {\n \"id\": 142,\n \"row\": 1,\n \"col\": 0,\n \"icon\": \"ability_racial_bloodrage\",\n \"ranks\": [12301, 12818],\n \"requires\": []\n },\n 140: {\n \"id\": 140,\n \"row\": 1,\n \"col\": 2,\n \"icon\": \"spell_holy_devotion\",\n \"ranks\": [12299, 12761, 12762, 12763, 12764],\n \"requires\": []\n },\n 141: {\n \"id\": 141,\n \"row\": 1,\n \"col\": 3,\n \"icon\": \"spell_magic_magearmor\",\n \"ranks\": [12300, 12959, 12960, 12961, 12962],\n \"requires\": []\n },\n 153: {\n \"id\": 153,\n \"row\": 2,\n \"col\": 0,\n \"icon\": \"spell_holy_ashestoashes\",\n \"ranks\": [12975],\n \"requires\": [{\n \"id\": 142,\n \"qty\": 2\n }]\n },\n 145: {\n \"id\": 145,\n \"row\": 2,\n \"col\": 1,\n \"icon\": \"ability_defend\",\n \"ranks\": [12945, 12307, 12944],\n \"requires\": [{\n \"id\": 1601,\n \"qty\": 5\n }]\n },\n 147: {\n \"id\": 147,\n \"row\": 2,\n \"col\": 2,\n \"icon\": \"ability_warrior_revenge\",\n \"ranks\": [12797, 12799, 12800],\n \"requires\": []\n },\n 144: {\n \"id\": 144,\n \"row\": 2,\n \"col\": 3,\n \"icon\": \"ability_warrior_innerrage\",\n \"ranks\": [12303, 12788, 12789, 12791, 12792],\n \"requires\": []\n },\n 146: {\n \"id\": 146,\n \"row\": 3,\n \"col\": 0,\n \"icon\": \"ability_warrior_sunder\",\n \"ranks\": [12308, 12810, 12811],\n \"requires\": []\n },\n 151: {\n \"id\": 151,\n \"row\": 3,\n \"col\": 1,\n \"icon\": \"ability_warrior_disarm\",\n \"ranks\": [12313, 12804, 12807],\n \"requires\": []\n },\n 143: {\n \"id\": 143,\n \"row\": 3,\n \"col\": 2,\n \"icon\": \"spell_nature_reincarnation\",\n \"ranks\": [12302, 12765],\n \"requires\": []\n },\n 150: {\n \"id\": 150,\n \"row\": 4,\n \"col\": 0,\n \"icon\": \"ability_warrior_shieldwall\",\n \"ranks\": [12312, 12803],\n \"requires\": []\n },\n 152: {\n \"id\": 152,\n \"row\": 4,\n \"col\": 1,\n \"icon\": \"ability_thunderbolt\",\n \"ranks\": [12809],\n \"requires\": []\n },\n 149: {\n \"id\": 149,\n \"row\": 4,\n \"col\": 2,\n \"icon\": \"ability_warrior_shieldbash\",\n \"ranks\": [12311, 12958],\n \"requires\": []\n },\n 702: {\n \"id\": 702,\n \"row\": 5,\n \"col\": 2,\n \"icon\": \"inv_sword_20\",\n \"ranks\": [16538, 16539, 16540, 16541, 16542],\n \"requires\": []\n },\n 148: {\n \"id\": 148,\n \"row\": 6,\n \"col\": 1,\n \"icon\": \"inv_shield_05\",\n \"ranks\": [23922],\n \"requires\": [{\n \"id\": 152,\n \"qty\": 1\n }]\n }\n },\n 164: {\n 158: {\n \"id\": 158,\n \"row\": 0,\n \"col\": 1,\n \"icon\": \"spell_nature_purge\",\n \"ranks\": [12321, 12835, 12836, 12837, 12838],\n \"requires\": []\n },\n 157: {\n \"id\": 157,\n \"row\": 0,\n \"col\": 2,\n \"icon\": \"ability_rogue_eviscerate\",\n \"ranks\": [12320, 12852, 12853, 12855, 12856],\n \"requires\": []\n },\n 161: {\n \"id\": 161,\n \"row\": 1,\n \"col\": 1,\n \"icon\": \"ability_warrior_warcry\",\n \"ranks\": [12324, 12876, 12877, 12878, 12879],\n \"requires\": []\n },\n 159: {\n \"id\": 159,\n \"row\": 1,\n \"col\": 2,\n \"icon\": \"spell_nature_stoneclawtotem\",\n \"ranks\": [12322, 12999, 13000, 13001, 13002],\n \"requires\": []\n },\n 166: {\n \"id\": 166,\n \"row\": 2,\n \"col\": 0,\n \"icon\": \"ability_warrior_cleave\",\n \"ranks\": [12329, 12950, 20496],\n \"requires\": []\n },\n 160: {\n \"id\": 160,\n \"row\": 2,\n \"col\": 1,\n \"icon\": \"spell_shadow_deathscream\",\n \"ranks\": [12323],\n \"requires\": []\n },\n 661: {\n \"id\": 661,\n \"row\": 2,\n \"col\": 2,\n \"icon\": \"spell_shadow_summonimp\",\n \"ranks\": [16487, 16489, 16492],\n \"requires\": []\n },\n 154: {\n \"id\": 154,\n \"row\": 2,\n \"col\": 3,\n \"icon\": \"ability_warrior_battleshout\",\n \"ranks\": [12318, 12857, 12858, 12860, 12861],\n \"requires\": []\n },\n 1581: {\n \"id\": 1581,\n \"row\": 3,\n \"col\": 0,\n \"icon\": \"ability_dualwield\",\n \"ranks\": [23584, 23585, 23586, 23587, 23588],\n \"requires\": []\n },\n 1542: {\n \"id\": 1542,\n \"row\": 3,\n \"col\": 1,\n \"icon\": \"inv_sword_48\",\n \"ranks\": [20502, 20503],\n \"requires\": []\n },\n 155: {\n \"id\": 155,\n \"row\": 3,\n \"col\": 2,\n \"icon\": \"spell_shadow_unholyfrenzy\",\n \"ranks\": [12317, 13045, 13046, 13047, 13048],\n \"requires\": []\n },\n 168: {\n \"id\": 168,\n \"row\": 4,\n \"col\": 0,\n \"icon\": \"ability_warrior_decisivestrike\",\n \"ranks\": [12862, 12330, 20497, 20498, 20499],\n \"requires\": []\n },\n 165: {\n \"id\": 165,\n \"row\": 4,\n \"col\": 1,\n \"icon\": \"spell_shadow_deathpact\",\n \"ranks\": [12328],\n \"requires\": []\n },\n 1543: {\n \"id\": 1543,\n \"row\": 4,\n \"col\": 3,\n \"icon\": \"ability_rogue_sprint\",\n \"ranks\": [20504, 20505],\n \"requires\": []\n },\n 1541: {\n \"id\": 1541,\n \"row\": 5,\n \"col\": 0,\n \"icon\": \"spell_nature_ancestralguardian\",\n \"ranks\": [20500, 20501],\n \"requires\": []\n },\n 156: {\n \"id\": 156,\n \"row\": 5,\n \"col\": 2,\n \"icon\": \"ability_ghoulfrenzy\",\n \"ranks\": [12319, 12971, 12972, 12973, 12974],\n \"requires\": [{\n \"id\": 155,\n \"qty\": 5\n }]\n },\n 167: {\n \"id\": 167,\n \"row\": 6,\n \"col\": 1,\n \"icon\": \"spell_nature_bloodlust\",\n \"ranks\": [23881],\n \"requires\": [{\n \"id\": 165,\n \"qty\": 1\n }]\n }\n },\n 181: {\n 203: {\n \"id\": 203,\n \"row\": 0,\n \"col\": 0,\n \"icon\": \"ability_gouge\",\n \"ranks\": [13741, 13793, 13792],\n \"requires\": []\n },\n 201: {\n \"id\": 201,\n \"row\": 0,\n \"col\": 1,\n \"icon\": \"spell_shadow_ritualofsacrifice\",\n \"ranks\": [13732, 13863],\n \"requires\": []\n },\n 186: {\n \"id\": 186,\n \"row\": 0,\n \"col\": 2,\n \"icon\": \"spell_nature_invisibilty\",\n \"ranks\": [13712, 13788, 13789, 13790, 13791],\n \"requires\": []\n },\n 202: {\n \"id\": 202,\n \"row\": 1,\n \"col\": 0,\n \"icon\": \"ability_backstab\",\n \"ranks\": [13733, 13865, 13866],\n \"requires\": []\n },\n 187: {\n \"id\": 187,\n \"row\": 1,\n \"col\": 1,\n \"icon\": \"ability_parry\",\n \"ranks\": [13713, 13853, 13854, 13855, 13856],\n \"requires\": []\n },\n 181: {\n \"id\": 181,\n \"row\": 1,\n \"col\": 2,\n \"icon\": \"ability_marksmanship\",\n \"ranks\": [13705, 13832, 13843, 13844, 13845],\n \"requires\": []\n },\n 204: {\n \"id\": 204,\n \"row\": 2,\n \"col\": 0,\n \"icon\": \"spell_shadow_shadowward\",\n \"ranks\": [13742, 13872],\n \"requires\": []\n },\n 301: {\n \"id\": 301,\n \"row\": 2,\n \"col\": 1,\n \"icon\": \"ability_warrior_challange\",\n \"ranks\": [14251],\n \"requires\": [{\n \"id\": 187,\n \"qty\": 5\n }]\n },\n 222: {\n \"id\": 222,\n \"row\": 2,\n \"col\": 3,\n \"icon\": \"ability_rogue_sprint\",\n \"ranks\": [13743, 13875],\n \"requires\": []\n },\n 206: {\n \"id\": 206,\n \"row\": 3,\n \"col\": 0,\n \"icon\": \"ability_kick\",\n \"ranks\": [13754, 13867],\n \"requires\": []\n },\n 182: {\n \"id\": 182,\n \"row\": 3,\n \"col\": 1,\n \"icon\": \"inv_weapon_shortblade_05\",\n \"ranks\": [13706, 13804, 13805, 13806, 13807],\n \"requires\": []\n },\n 221: {\n \"id\": 221,\n \"row\": 3,\n \"col\": 2,\n \"icon\": \"ability_dualwield\",\n \"ranks\": [13715, 13848, 13849, 13851, 13852],\n \"requires\": [{\n \"id\": 181,\n \"qty\": 5\n }]\n },\n 184: {\n \"id\": 184,\n \"row\": 4,\n \"col\": 0,\n \"icon\": \"inv_mace_01\",\n \"ranks\": [13709, 13800, 13801, 13802, 13803],\n \"requires\": []\n },\n 223: {\n \"id\": 223,\n \"row\": 4,\n \"col\": 1,\n \"icon\": \"ability_warrior_punishingblow\",\n \"ranks\": [13877],\n \"requires\": []\n },\n 242: {\n \"id\": 242,\n \"row\": 4,\n \"col\": 2,\n \"icon\": \"inv_sword_27\",\n \"ranks\": [13960, 13961, 13962, 13963, 13964],\n \"requires\": []\n },\n 183: {\n \"id\": 183,\n \"row\": 4,\n \"col\": 3,\n \"icon\": \"inv_gauntlets_04\",\n \"ranks\": [13707, 13966, 13967, 13968, 13969],\n \"requires\": []\n },\n 1703: {\n \"id\": 1703,\n \"row\": 5,\n \"col\": 1,\n \"icon\": \"spell_holy_blessingofstrength\",\n \"ranks\": [30919, 30920],\n \"requires\": [{\n \"id\": 223,\n \"qty\": 1\n }]\n },\n 1122: {\n \"id\": 1122,\n \"row\": 5,\n \"col\": 2,\n \"icon\": \"ability_racial_avatar\",\n \"ranks\": [18427, 18428, 18429],\n \"requires\": []\n },\n 205: {\n \"id\": 205,\n \"row\": 6,\n \"col\": 1,\n \"icon\": \"spell_shadow_shadowworddominate\",\n \"ranks\": [13750],\n \"requires\": []\n }\n },\n 182: {\n 276: {\n \"id\": 276,\n \"row\": 0,\n \"col\": 0,\n \"icon\": \"ability_rogue_eviscerate\",\n \"ranks\": [14162, 14163, 14164],\n \"requires\": []\n },\n 272: {\n \"id\": 272,\n \"row\": 0,\n \"col\": 1,\n \"icon\": \"ability_fiegndead\",\n \"ranks\": [14144, 14148],\n \"requires\": []\n },\n 270: {\n \"id\": 270,\n \"row\": 0,\n \"col\": 2,\n \"icon\": \"ability_racial_bloodrage\",\n \"ranks\": [14138, 14139, 14140, 14141, 14142],\n \"requires\": []\n },\n 273: {\n \"id\": 273,\n \"row\": 1,\n \"col\": 0,\n \"icon\": \"ability_druid_disembowel\",\n \"ranks\": [14156, 14160, 14161],\n \"requires\": []\n },\n 274: {\n \"id\": 274,\n \"row\": 1,\n \"col\": 1,\n \"icon\": \"spell_shadow_deathscream\",\n \"ranks\": [14158, 14159],\n \"requires\": []\n },\n 277: {\n \"id\": 277,\n \"row\": 1,\n \"col\": 3,\n \"icon\": \"ability_rogue_slicedice\",\n \"ranks\": [14165, 14166, 14167],\n \"requires\": []\n },\n 281: {\n \"id\": 281,\n \"row\": 2,\n \"col\": 0,\n \"icon\": \"ability_warrior_decisivestrike\",\n \"ranks\": [14179],\n \"requires\": []\n },\n 278: {\n \"id\": 278,\n \"row\": 2,\n \"col\": 1,\n \"icon\": \"ability_warrior_riposte\",\n \"ranks\": [14168, 14169],\n \"requires\": []\n },\n 269: {\n \"id\": 269,\n \"row\": 2,\n \"col\": 2,\n \"icon\": \"ability_criticalstrike\",\n \"ranks\": [14128, 14132, 14135, 14136, 14137],\n \"requires\": [{\n \"id\": 270,\n \"qty\": 5\n }]\n },\n 682: {\n \"id\": 682,\n \"row\": 3,\n \"col\": 1,\n \"icon\": \"ability_rogue_feigndeath\",\n \"ranks\": [16513, 16514, 16515, 16719, 16720],\n \"requires\": []\n },\n 268: {\n \"id\": 268,\n \"row\": 3,\n \"col\": 2,\n \"icon\": \"ability_poisons\",\n \"ranks\": [14113, 14114, 14115, 14116, 14117],\n \"requires\": []\n },\n 280: {\n \"id\": 280,\n \"row\": 4,\n \"col\": 1,\n \"icon\": \"spell_ice_lament\",\n \"ranks\": [14177],\n \"requires\": []\n },\n 279: {\n \"id\": 279,\n \"row\": 4,\n \"col\": 2,\n \"icon\": \"ability_rogue_kidneyshot\",\n \"ranks\": [14174, 14175, 14176],\n \"requires\": []\n },\n 283: {\n \"id\": 283,\n \"row\": 5,\n \"col\": 1,\n \"icon\": \"spell_shadow_chilltouch\",\n \"ranks\": [14186, 14190, 14193, 14194, 14195],\n \"requires\": [{\n \"id\": 280,\n \"qty\": 1\n }]\n },\n 382: {\n \"id\": 382,\n \"row\": 6,\n \"col\": 1,\n \"icon\": \"spell_nature_earthbindtotem\",\n \"ranks\": [14983],\n \"requires\": []\n }\n },\n 183: {\n 241: {\n \"id\": 241,\n \"row\": 0,\n \"col\": 1,\n \"icon\": \"spell_shadow_charm\",\n \"ranks\": [13958, 13970, 13971, 13972, 13973],\n \"requires\": []\n },\n 261: {\n \"id\": 261,\n \"row\": 0,\n \"col\": 2,\n \"icon\": \"ability_warrior_warcry\",\n \"ranks\": [14057, 14072, 14073, 14074, 14075],\n \"requires\": []\n },\n 1700: {\n \"id\": 1700,\n \"row\": 1,\n \"col\": 0,\n \"icon\": \"ability_rogue_feint\",\n \"ranks\": [30892, 30893],\n \"requires\": []\n },\n 247: {\n \"id\": 247,\n \"row\": 1,\n \"col\": 1,\n \"icon\": \"spell_magic_lesserinvisibilty\",\n \"ranks\": [13981, 14066],\n \"requires\": []\n },\n 244: {\n \"id\": 244,\n \"row\": 1,\n \"col\": 2,\n \"icon\": \"ability_stealth\",\n \"ranks\": [13975, 14062, 14063, 14064, 14065],\n \"requires\": []\n },\n 245: {\n \"id\": 245,\n \"row\": 2,\n \"col\": 0,\n \"icon\": \"spell_shadow_fumble\",\n \"ranks\": [13976, 13979, 13980],\n \"requires\": []\n },\n 303: {\n \"id\": 303,\n \"row\": 2,\n \"col\": 1,\n \"icon\": \"spell_shadow_curse\",\n \"ranks\": [14278],\n \"requires\": []\n },\n 263: {\n \"id\": 263,\n \"row\": 2,\n \"col\": 2,\n \"icon\": \"ability_rogue_ambush\",\n \"ranks\": [14079, 14080, 14081],\n \"requires\": []\n },\n 246: {\n \"id\": 246,\n \"row\": 3,\n \"col\": 0,\n \"icon\": \"spell_nature_mirrorimage\",\n \"ranks\": [13983, 14070, 14071],\n \"requires\": []\n },\n 262: {\n \"id\": 262,\n \"row\": 3,\n \"col\": 1,\n \"icon\": \"ability_sap\",\n \"ranks\": [14076, 14094, 14095],\n \"requires\": []\n },\n 1123: {\n \"id\": 1123,\n \"row\": 3,\n \"col\": 2,\n \"icon\": \"inv_sword_17\",\n \"ranks\": [14171, 14172, 14173],\n \"requires\": []\n },\n 1701: {\n \"id\": 1701,\n \"row\": 4,\n \"col\": 0,\n \"icon\": \"ability_ambush\",\n \"ranks\": [30894, 30895],\n \"requires\": []\n },\n 284: {\n \"id\": 284,\n \"row\": 4,\n \"col\": 1,\n \"icon\": \"spell_shadow_antishadow\",\n \"ranks\": [14185],\n \"requires\": []\n },\n 265: {\n \"id\": 265,\n \"row\": 4,\n \"col\": 2,\n \"icon\": \"spell_shadow_summonsuccubus\",\n \"ranks\": [14082, 14083],\n \"requires\": []\n },\n 681: {\n \"id\": 681,\n \"row\": 4,\n \"col\": 3,\n \"icon\": \"spell_shadow_lifedrain\",\n \"ranks\": [16511],\n \"requires\": [{\n \"id\": 1123,\n \"qty\": 3\n }]\n },\n 1702: {\n \"id\": 1702,\n \"row\": 5,\n \"col\": 2,\n \"icon\": \"inv_weapon_crossbow_11\",\n \"ranks\": [30902, 30903, 30904, 30905, 30906],\n \"requires\": []\n },\n 381: {\n \"id\": 381,\n \"row\": 6,\n \"col\": 1,\n \"icon\": \"spell_shadow_possession\",\n \"ranks\": [14183],\n \"requires\": [{\n \"id\": 284,\n \"qty\": 1\n }]\n }\n },\n 201: {\n 342: {\n \"id\": 342,\n \"row\": 0,\n \"col\": 1,\n \"icon\": \"spell_magic_magearmor\",\n \"ranks\": [14522, 14788, 14789, 14790, 14791],\n \"requires\": []\n },\n 345: {\n \"id\": 345,\n \"row\": 0,\n \"col\": 2,\n \"icon\": \"inv_wand_01\",\n \"ranks\": [14524, 14525, 14526, 14527, 14528],\n \"requires\": []\n },\n 352: {\n \"id\": 352,\n \"row\": 1,\n \"col\": 0,\n \"icon\": \"spell_nature_manaregentotem\",\n \"ranks\": [14523, 14784, 14785, 14786, 14787],\n \"requires\": []\n },\n 344: {\n \"id\": 344,\n \"row\": 1,\n \"col\": 1,\n \"icon\": \"spell_holy_wordfortitude\",\n \"ranks\": [14749, 14767],\n \"requires\": []\n },\n 343: {\n \"id\": 343,\n \"row\": 1,\n \"col\": 2,\n \"icon\": \"spell_holy_powerwordshield\",\n \"ranks\": [14748, 14768, 14769],\n \"requires\": []\n },\n 321: {\n \"id\": 321,\n \"row\": 1,\n \"col\": 3,\n \"icon\": \"spell_nature_tranquility\",\n \"ranks\": [14531, 14774],\n \"requires\": []\n },\n 348: {\n \"id\": 348,\n \"row\": 2,\n \"col\": 1,\n \"icon\": \"spell_frost_windwalkon\",\n \"ranks\": [14751],\n \"requires\": []\n },\n 347: {\n \"id\": 347,\n \"row\": 2,\n \"col\": 2,\n \"icon\": \"spell_nature_sleep\",\n \"ranks\": [14521, 14776, 14777],\n \"requires\": []\n },\n 346: {\n \"id\": 346,\n \"row\": 3,\n \"col\": 0,\n \"icon\": \"spell_holy_innerfire\",\n \"ranks\": [14747, 14770, 14771],\n \"requires\": []\n },\n 341: {\n \"id\": 341,\n \"row\": 3,\n \"col\": 1,\n \"icon\": \"ability_hibernation\",\n \"ranks\": [14520, 14780, 14781, 14782, 14783],\n \"requires\": []\n },\n 350: {\n \"id\": 350,\n \"row\": 3,\n \"col\": 3,\n \"icon\": \"spell_shadow_manaburn\",\n \"ranks\": [14750, 14772],\n \"requires\": []\n },\n 1201: {\n \"id\": 1201,\n \"row\": 4,\n \"col\": 1,\n \"icon\": \"spell_nature_enchantarmor\",\n \"ranks\": [18551, 18552, 18553, 18554, 18555],\n \"requires\": []\n },\n 351: {\n \"id\": 351,\n \"row\": 4,\n \"col\": 2,\n \"icon\": \"spell_holy_divinespirit\",\n \"ranks\": [14752],\n \"requires\": [{\n \"id\": 347,\n \"qty\": 3\n }]\n },\n 1202: {\n \"id\": 1202,\n \"row\": 5,\n \"col\": 2,\n \"icon\": \"spell_nature_slowingtotem\",\n \"ranks\": [18544, 18547, 18548, 18549, 18550],\n \"requires\": []\n },\n 322: {\n \"id\": 322,\n \"row\": 6,\n \"col\": 1,\n \"icon\": \"spell_holy_powerinfusion\",\n \"ranks\": [10060],\n \"requires\": [{\n \"id\": 1201,\n \"qty\": 5\n }]\n }\n },\n 202: {\n 410: {\n \"id\": 410,\n \"row\": 0,\n \"col\": 0,\n \"icon\": \"spell_holy_healingfocus\",\n \"ranks\": [14913, 15012],\n \"requires\": []\n },\n 406: {\n \"id\": 406,\n \"row\": 0,\n \"col\": 1,\n \"icon\": \"spell_holy_renew\",\n \"ranks\": [14908, 15020, 17191],\n \"requires\": []\n },\n 401: {\n \"id\": 401,\n \"row\": 0,\n \"col\": 2,\n \"icon\": \"spell_holy_sealofsalvation\",\n \"ranks\": [14889, 15008, 15009, 15010, 15011],\n \"requires\": []\n },\n 411: {\n \"id\": 411,\n \"row\": 1,\n \"col\": 1,\n \"icon\": \"spell_holy_spellwarding\",\n \"ranks\": [27900, 27901, 27902, 27903, 27904],\n \"requires\": []\n },\n 1181: {\n \"id\": 1181,\n \"row\": 1,\n \"col\": 2,\n \"icon\": \"spell_holy_sealofwrath\",\n \"ranks\": [18530, 18531, 18533, 18534, 18535],\n \"requires\": []\n },\n 442: {\n \"id\": 442,\n \"row\": 2,\n \"col\": 0,\n \"icon\": \"spell_holy_holynova\",\n \"ranks\": [15237],\n \"requires\": []\n },\n 1636: {\n \"id\": 1636,\n \"row\": 2,\n \"col\": 1,\n \"icon\": \"spell_holy_blessedrecovery\",\n \"ranks\": [27811, 27815, 27816],\n \"requires\": []\n },\n 361: {\n \"id\": 361,\n \"row\": 2,\n \"col\": 3,\n \"icon\": \"spell_holy_layonhands\",\n \"ranks\": [14892, 15362, 15363],\n \"requires\": []\n },\n 1635: {\n \"id\": 1635,\n \"row\": 3,\n \"col\": 0,\n \"icon\": \"spell_holy_purify\",\n \"ranks\": [27789, 27790],\n \"requires\": []\n },\n 408: {\n \"id\": 408,\n \"row\": 3,\n \"col\": 1,\n \"icon\": \"spell_holy_heal02\",\n \"ranks\": [14912, 15013, 15014],\n \"requires\": []\n },\n 403: {\n \"id\": 403,\n \"row\": 3,\n \"col\": 2,\n \"icon\": \"spell_holy_searinglightpriest\",\n \"ranks\": [14909, 15017],\n \"requires\": [{\n \"id\": 1181,\n \"qty\": 5\n }]\n },\n 413: {\n \"id\": 413,\n \"row\": 4,\n \"col\": 0,\n \"icon\": \"spell_holy_prayerofhealing02\",\n \"ranks\": [14911, 15018],\n \"requires\": []\n },\n 1561: {\n \"id\": 1561,\n \"row\": 4,\n \"col\": 1,\n \"icon\": \"inv_enchant_essenceeternallarge\",\n \"ranks\": [20711],\n \"requires\": []\n },\n 402: {\n \"id\": 402,\n \"row\": 4,\n \"col\": 2,\n \"icon\": \"spell_holy_spiritualguidence\",\n \"ranks\": [14901, 15028, 15029, 15030, 15031],\n \"requires\": []\n },\n 404: {\n \"id\": 404,\n \"row\": 5,\n \"col\": 2,\n \"icon\": \"spell_nature_moonglow\",\n \"ranks\": [14898, 15349, 15354, 15355, 15356],\n \"requires\": []\n },\n 1637: {\n \"id\": 1637,\n \"row\": 6,\n \"col\": 1,\n \"icon\": \"spell_holy_summonlightwell\",\n \"ranks\": [724],\n \"requires\": [{\n \"id\": 1561,\n \"qty\": 1\n }]\n }\n },\n 203: {\n 465: {\n \"id\": 465,\n \"row\": 0,\n \"col\": 1,\n \"icon\": \"spell_shadow_requiem\",\n \"ranks\": [15270, 15335, 15336, 15337, 15338],\n \"requires\": []\n },\n 464: {\n \"id\": 464,\n \"row\": 0,\n \"col\": 2,\n \"icon\": \"spell_shadow_gathershadows\",\n \"ranks\": [15268, 15323, 15324, 15325, 15326],\n \"requires\": []\n },\n 466: {\n \"id\": 466,\n \"row\": 1,\n \"col\": 0,\n \"icon\": \"spell_shadow_shadowward\",\n \"ranks\": [15318, 15272, 15320],\n \"requires\": []\n },\n 482: {\n \"id\": 482,\n \"row\": 1,\n \"col\": 1,\n \"icon\": \"spell_shadow_shadowwordpain\",\n \"ranks\": [15275, 15317],\n \"requires\": []\n },\n 463: {\n \"id\": 463,\n \"row\": 1,\n \"col\": 2,\n \"icon\": \"spell_shadow_burningspirit\",\n \"ranks\": [15260, 15327, 15328, 15329, 15330],\n \"requires\": []\n },\n 542: {\n \"id\": 542,\n \"row\": 2,\n \"col\": 0,\n \"icon\": \"spell_shadow_psychicscream\",\n \"ranks\": [15392, 15448],\n \"requires\": []\n },\n 481: {\n \"id\": 481,\n \"row\": 2,\n \"col\": 1,\n \"icon\": \"spell_shadow_unholyfrenzy\",\n \"ranks\": [15273, 15312, 15313, 15314, 15316],\n \"requires\": []\n },\n 501: {\n \"id\": 501,\n \"row\": 2,\n \"col\": 2,\n \"icon\": \"spell_shadow_siphonmana\",\n \"ranks\": [15407],\n \"requires\": []\n },\n 483: {\n \"id\": 483,\n \"row\": 3,\n \"col\": 1,\n \"icon\": \"spell_magic_lesserinvisibilty\",\n \"ranks\": [15274, 15311],\n \"requires\": []\n },\n 881: {\n \"id\": 881,\n \"row\": 3,\n \"col\": 2,\n \"icon\": \"spell_shadow_chilltouch\",\n \"ranks\": [17322, 17323, 17325],\n \"requires\": []\n },\n 461: {\n \"id\": 461,\n \"row\": 3,\n \"col\": 3,\n \"icon\": \"spell_shadow_blackplague\",\n \"ranks\": [15257, 15331, 15332, 15333, 15334],\n \"requires\": []\n },\n 541: {\n \"id\": 541,\n \"row\": 4,\n \"col\": 0,\n \"icon\": \"spell_shadow_impphaseshift\",\n \"ranks\": [15487],\n \"requires\": [{\n \"id\": 542,\n \"qty\": 2\n }]\n },\n 484: {\n \"id\": 484,\n \"row\": 4,\n \"col\": 1,\n \"icon\": \"spell_shadow_unsummonbuilding\",\n \"ranks\": [15286],\n \"requires\": []\n },\n 1638: {\n \"id\": 1638,\n \"row\": 4,\n \"col\": 2,\n \"icon\": \"spell_shadow_improvedvampiricembrace\",\n \"ranks\": [27839, 27840],\n \"requires\": [{\n \"id\": 484,\n \"qty\": 1\n }]\n },\n 462: {\n \"id\": 462,\n \"row\": 5,\n \"col\": 2,\n \"icon\": \"spell_shadow_twilight\",\n \"ranks\": [15259, 15307, 15308, 15309, 15310],\n \"requires\": []\n },\n 521: {\n \"id\": 521,\n \"row\": 6,\n \"col\": 1,\n \"icon\": \"spell_shadow_shadowform\",\n \"ranks\": [15473],\n \"requires\": [{\n \"id\": 484,\n \"qty\": 1\n }]\n }\n },\n 261: {\n 564: {\n \"id\": 564,\n \"row\": 0,\n \"col\": 1,\n \"icon\": \"spell_nature_wispsplode\",\n \"ranks\": [16039, 16109, 16110, 16111, 16112],\n \"requires\": []\n },\n 563: {\n \"id\": 563,\n \"row\": 0,\n \"col\": 2,\n \"icon\": \"spell_fire_fireball\",\n \"ranks\": [16035, 16105, 16106, 16107, 16108],\n \"requires\": []\n },\n 572: {\n \"id\": 572,\n \"row\": 1,\n \"col\": 0,\n \"icon\": \"spell_nature_stoneclawtotem\",\n \"ranks\": [16043, 16130],\n \"requires\": []\n },\n 1640: {\n \"id\": 1640,\n \"row\": 1,\n \"col\": 1,\n \"icon\": \"spell_nature_spiritarmor\",\n \"ranks\": [28996, 28997, 28998],\n \"requires\": []\n },\n 561: {\n \"id\": 561,\n \"row\": 1,\n \"col\": 2,\n \"icon\": \"spell_fire_immolation\",\n \"ranks\": [16038, 16160, 16161],\n \"requires\": []\n },\n 574: {\n \"id\": 574,\n \"row\": 2,\n \"col\": 0,\n \"icon\": \"spell_shadow_manaburn\",\n \"ranks\": [16164],\n \"requires\": []\n },\n 575: {\n \"id\": 575,\n \"row\": 2,\n \"col\": 1,\n \"icon\": \"spell_frost_frostward\",\n \"ranks\": [16040, 16113, 16114, 16115, 16116],\n \"requires\": []\n },\n 562: {\n \"id\": 562,\n \"row\": 2,\n \"col\": 2,\n \"icon\": \"spell_nature_callstorm\",\n \"ranks\": [16041, 16117, 16118, 16119, 16120],\n \"requires\": []\n },\n 567: {\n \"id\": 567,\n \"row\": 3,\n \"col\": 0,\n \"icon\": \"spell_fire_sealoffire\",\n \"ranks\": [16086, 16544],\n \"requires\": []\n },\n 1642: {\n \"id\": 1642,\n \"row\": 3,\n \"col\": 1,\n \"icon\": \"spell_nature_eyeofthestorm\",\n \"ranks\": [29062, 29064, 29065],\n \"requires\": []\n },\n 1645: {\n \"id\": 1645,\n \"row\": 3,\n \"col\": 3,\n \"icon\": \"spell_fire_elementaldevastation\",\n \"ranks\": [30160, 29179, 29180],\n \"requires\": []\n },\n 1641: {\n \"id\": 1641,\n \"row\": 4,\n \"col\": 0,\n \"icon\": \"spell_nature_stormreach\",\n \"ranks\": [28999, 29000],\n \"requires\": []\n },\n 565: {\n \"id\": 565,\n \"row\": 4,\n \"col\": 1,\n \"icon\": \"spell_fire_volcano\",\n \"ranks\": [16089],\n \"requires\": []\n },\n 721: {\n \"id\": 721,\n \"row\": 5,\n \"col\": 2,\n \"icon\": \"spell_lightning_lightningbolt01\",\n \"ranks\": [16578, 16579, 16580, 16581, 16582],\n \"requires\": [{\n \"id\": 562,\n \"qty\": 5\n }]\n },\n 573: {\n \"id\": 573,\n \"row\": 6,\n \"col\": 1,\n \"icon\": \"spell_nature_wispheal\",\n \"ranks\": [16166],\n \"requires\": [{\n \"id\": 565,\n \"qty\": 1\n }]\n }\n },\n 262: {\n 586: {\n \"id\": 586,\n \"row\": 0,\n \"col\": 1,\n \"icon\": \"spell_nature_magicimmunity\",\n \"ranks\": [16182, 16226, 16227, 16228, 16229],\n \"requires\": []\n },\n 593: {\n \"id\": 593,\n \"row\": 0,\n \"col\": 2,\n \"icon\": \"spell_frost_manarecharge\",\n \"ranks\": [16179, 16214, 16215, 16216, 16217],\n \"requires\": []\n },\n 589: {\n \"id\": 589,\n \"row\": 1,\n \"col\": 0,\n \"icon\": \"spell_nature_reincarnation\",\n \"ranks\": [16184, 16209],\n \"requires\": []\n },\n 581: {\n \"id\": 581,\n \"row\": 1,\n \"col\": 1,\n \"icon\": \"spell_nature_undyingstrength\",\n \"ranks\": [16176, 16235, 16240],\n \"requires\": []\n },\n 595: {\n \"id\": 595,\n \"row\": 1,\n \"col\": 2,\n \"icon\": \"spell_nature_moonglow\",\n \"ranks\": [16173, 16222, 16223, 16224, 16225],\n \"requires\": []\n },\n 583: {\n \"id\": 583,\n \"row\": 2,\n \"col\": 0,\n \"icon\": \"spell_frost_stun\",\n \"ranks\": [16180, 16196, 16198],\n \"requires\": []\n },\n 587: {\n \"id\": 587,\n \"row\": 2,\n \"col\": 1,\n \"icon\": \"spell_nature_healingwavelesser\",\n \"ranks\": [16181, 16230, 16232, 16233, 16234],\n \"requires\": []\n },\n 582: {\n \"id\": 582,\n \"row\": 2,\n \"col\": 2,\n \"icon\": \"spell_nature_nullward\",\n \"ranks\": [16189],\n \"requires\": []\n },\n 1646: {\n \"id\": 1646,\n \"row\": 2,\n \"col\": 3,\n \"icon\": \"spell_nature_healingtouch\",\n \"ranks\": [29187, 29189, 29191],\n \"requires\": []\n },\n 588: {\n \"id\": 588,\n \"row\": 3,\n \"col\": 1,\n \"icon\": \"spell_nature_manaregentotem\",\n \"ranks\": [16187, 16205, 16206, 16207, 16208],\n \"requires\": []\n },\n 594: {\n \"id\": 594,\n \"row\": 3,\n \"col\": 2,\n \"icon\": \"spell_nature_tranquility\",\n \"ranks\": [16194, 16218, 16219, 16220, 16221],\n \"requires\": []\n },\n 1648: {\n \"id\": 1648,\n \"row\": 4,\n \"col\": 0,\n \"icon\": \"spell_nature_healingway\",\n \"ranks\": [29206, 29205, 29202],\n \"requires\": []\n },\n 591: {\n \"id\": 591,\n \"row\": 4,\n \"col\": 2,\n \"icon\": \"spell_nature_ravenform\",\n \"ranks\": [16188],\n \"requires\": []\n },\n 592: {\n \"id\": 592,\n \"row\": 5,\n \"col\": 2,\n \"icon\": \"spell_frost_wizardmark\",\n \"ranks\": [16178, 16210, 16211, 16212, 16213],\n \"requires\": []\n },\n 590: {\n \"id\": 590,\n \"row\": 6,\n \"col\": 1,\n \"icon\": \"spell_frost_summonwaterelemental\",\n \"ranks\": [16190],\n \"requires\": [{\n \"id\": 588,\n \"qty\": 5\n }]\n }\n },\n 263: {\n 614: {\n \"id\": 614,\n \"row\": 0,\n \"col\": 1,\n \"icon\": \"spell_shadow_grimward\",\n \"ranks\": [17485, 17486, 17487, 17488, 17489],\n \"requires\": []\n },\n 612: {\n \"id\": 612,\n \"row\": 0,\n \"col\": 2,\n \"icon\": \"inv_shield_06\",\n \"ranks\": [16253, 16298, 16299, 16300, 16301],\n \"requires\": []\n },\n 609: {\n \"id\": 609,\n \"row\": 1,\n \"col\": 0,\n \"icon\": \"spell_nature_stoneskintotem\",\n \"ranks\": [16258, 16293],\n \"requires\": []\n },\n 613: {\n \"id\": 613,\n \"row\": 1,\n \"col\": 1,\n \"icon\": \"ability_thunderbolt\",\n \"ranks\": [16255, 16302, 16303, 16304, 16305],\n \"requires\": []\n },\n 605: {\n \"id\": 605,\n \"row\": 1,\n \"col\": 2,\n \"icon\": \"spell_nature_spiritwolf\",\n \"ranks\": [16262, 16287],\n \"requires\": []\n },\n 607: {\n \"id\": 607,\n \"row\": 1,\n \"col\": 3,\n \"icon\": \"spell_nature_lightningshield\",\n \"ranks\": [16261, 16290, 16291],\n \"requires\": []\n },\n 610: {\n \"id\": 610,\n \"row\": 2,\n \"col\": 0,\n \"icon\": \"spell_nature_earthbindtotem\",\n \"ranks\": [16259, 16295],\n \"requires\": []\n },\n 617: {\n \"id\": 617,\n \"row\": 2,\n \"col\": 2,\n \"icon\": \"inv_axe_10\",\n \"ranks\": [16269],\n \"requires\": []\n },\n 601: {\n \"id\": 601,\n \"row\": 2,\n \"col\": 3,\n \"icon\": \"spell_nature_mirrorimage\",\n \"ranks\": [16254, 16271, 16272, 16273, 16274],\n \"requires\": []\n },\n 602: {\n \"id\": 602,\n \"row\": 3,\n \"col\": 1,\n \"icon\": \"ability_ghoulfrenzy\",\n \"ranks\": [16256, 16281, 16282, 16283, 16284],\n \"requires\": [{\n \"id\": 613,\n \"qty\": 5\n }]\n },\n 615: {\n \"id\": 615,\n \"row\": 3,\n \"col\": 2,\n \"icon\": \"spell_holy_devotion\",\n \"ranks\": [16252, 16306, 16307, 16308, 16309],\n \"requires\": []\n },\n 1647: {\n \"id\": 1647,\n \"row\": 4,\n \"col\": 0,\n \"icon\": \"spell_fire_enchantweapon\",\n \"ranks\": [29192, 29193],\n \"requires\": []\n },\n 611: {\n \"id\": 611,\n \"row\": 4,\n \"col\": 1,\n \"icon\": \"spell_fire_flametounge\",\n \"ranks\": [16266, 29079, 29080],\n \"requires\": []\n },\n 616: {\n \"id\": 616,\n \"row\": 4,\n \"col\": 2,\n \"icon\": \"ability_parry\",\n \"ranks\": [16268],\n \"requires\": []\n },\n 1643: {\n \"id\": 1643,\n \"row\": 5,\n \"col\": 2,\n \"icon\": \"ability_hunter_swiftstrike\",\n \"ranks\": [29082, 29084, 29086, 29087, 29088],\n \"requires\": []\n },\n 901: {\n \"id\": 901,\n \"row\": 6,\n \"col\": 1,\n \"icon\": \"spell_holy_sealofmight\",\n \"ranks\": [17364],\n \"requires\": [{\n \"id\": 611,\n \"qty\": 3\n }]\n }\n },\n 281: {\n 796: {\n \"id\": 796,\n \"row\": 0,\n \"col\": 1,\n \"icon\": \"ability_hunter_pet_hyena\",\n \"ranks\": [16934, 16935, 16936, 16937, 16938],\n \"requires\": []\n },\n 795: {\n \"id\": 795,\n \"row\": 0,\n \"col\": 2,\n \"icon\": \"ability_druid_demoralizingroar\",\n \"ranks\": [16858, 16859, 16860, 16861, 16862],\n \"requires\": []\n },\n 799: {\n \"id\": 799,\n \"row\": 1,\n \"col\": 0,\n \"icon\": \"ability_ambush\",\n \"ranks\": [16947, 16948, 16949, 16950, 16951],\n \"requires\": []\n },\n 797: {\n \"id\": 797,\n \"row\": 1,\n \"col\": 1,\n \"icon\": \"ability_druid_bash\",\n \"ranks\": [16940, 16941],\n \"requires\": []\n },\n 794: {\n \"id\": 794,\n \"row\": 1,\n \"col\": 2,\n \"icon\": \"inv_misc_pelt_bear_03\",\n \"ranks\": [16929, 16930, 16931, 16932, 16933],\n \"requires\": []\n },\n 807: {\n \"id\": 807,\n \"row\": 2,\n \"col\": 0,\n \"icon\": \"spell_nature_spiritwolf\",\n \"ranks\": [17002, 24866],\n \"requires\": []\n },\n 804: {\n \"id\": 804,\n \"row\": 2,\n \"col\": 1,\n \"icon\": \"ability_hunter_pet_bear\",\n \"ranks\": [16979],\n \"requires\": []\n },\n 798: {\n \"id\": 798,\n \"row\": 2,\n \"col\": 2,\n \"icon\": \"inv_misc_monsterclaw_04\",\n \"ranks\": [16942, 16943, 16944],\n \"requires\": []\n },\n 802: {\n \"id\": 802,\n \"row\": 3,\n \"col\": 0,\n \"icon\": \"spell_shadow_vampiricaura\",\n \"ranks\": [16966, 16968],\n \"requires\": []\n },\n 803: {\n \"id\": 803,\n \"row\": 3,\n \"col\": 1,\n \"icon\": \"ability_hunter_pet_cat\",\n \"ranks\": [16972, 16974, 16975],\n \"requires\": []\n },\n 800: {\n \"id\": 800,\n \"row\": 3,\n \"col\": 2,\n \"icon\": \"ability_ghoulfrenzy\",\n \"ranks\": [16952, 16954],\n \"requires\": [{\n \"id\": 798,\n \"qty\": 3\n }]\n },\n 801: {\n \"id\": 801,\n \"row\": 3,\n \"col\": 3,\n \"icon\": \"ability_racial_cannibalize\",\n \"ranks\": [16958, 16961],\n \"requires\": [{\n \"id\": 798,\n \"qty\": 3\n }]\n },\n 805: {\n \"id\": 805,\n \"row\": 4,\n \"col\": 0,\n \"icon\": \"ability_druid_ravage\",\n \"ranks\": [16998, 16999],\n \"requires\": []\n },\n 1162: {\n \"id\": 1162,\n \"row\": 4,\n \"col\": 2,\n \"icon\": \"spell_nature_faeriefire\",\n \"ranks\": [16857],\n \"requires\": []\n },\n 808: {\n \"id\": 808,\n \"row\": 5,\n \"col\": 1,\n \"icon\": \"spell_holy_blessingofagility\",\n \"ranks\": [17003, 17004, 17005, 17006, 24894],\n \"requires\": [{\n \"id\": 803,\n \"qty\": 3\n }]\n },\n 809: {\n \"id\": 809,\n \"row\": 6,\n \"col\": 1,\n \"icon\": \"spell_nature_unyeildingstamina\",\n \"ranks\": [17007],\n \"requires\": []\n }\n },\n 282: {\n 821: {\n \"id\": 821,\n \"row\": 0,\n \"col\": 1,\n \"icon\": \"spell_nature_regeneration\",\n \"ranks\": [17050, 17051, 17053, 17054, 17055],\n \"requires\": []\n },\n 822: {\n \"id\": 822,\n \"row\": 0,\n \"col\": 2,\n \"icon\": \"spell_holy_blessingofstamina\",\n \"ranks\": [17056, 17058, 17059, 17060, 17061],\n \"requires\": []\n },\n 824: {\n \"id\": 824,\n \"row\": 1,\n \"col\": 0,\n \"icon\": \"spell_nature_healingtouch\",\n \"ranks\": [17069, 17070, 17071, 17072, 17073],\n \"requires\": []\n },\n 823: {\n \"id\": 823,\n \"row\": 1,\n \"col\": 1,\n \"icon\": \"spell_nature_healingwavegreater\",\n \"ranks\": [17063, 17065, 17066, 17067, 17068],\n \"requires\": []\n },\n 826: {\n \"id\": 826,\n \"row\": 1,\n \"col\": 2,\n \"icon\": \"ability_druid_enrage\",\n \"ranks\": [17079, 17082],\n \"requires\": []\n },\n 829: {\n \"id\": 829,\n \"row\": 2,\n \"col\": 1,\n \"icon\": \"spell_frost_windwalkon\",\n \"ranks\": [17106, 17107, 17108],\n \"requires\": []\n },\n 827: {\n \"id\": 827,\n \"row\": 2,\n \"col\": 2,\n \"icon\": \"spell_nature_insectswarm\",\n \"ranks\": [5570],\n \"requires\": []\n },\n 841: {\n \"id\": 841,\n \"row\": 2,\n \"col\": 3,\n \"icon\": \"ability_eyeoftheowl\",\n \"ranks\": [17118, 17119, 17120, 17121, 17122],\n \"requires\": []\n },\n 843: {\n \"id\": 843,\n \"row\": 3,\n \"col\": 1,\n \"icon\": \"spell_holy_elunesgrace\",\n \"ranks\": [24968, 24969, 24970, 24971, 24972],\n \"requires\": []\n },\n 830: {\n \"id\": 830,\n \"row\": 3,\n \"col\": 3,\n \"icon\": \"spell_nature_rejuvenation\",\n \"ranks\": [17111, 17112, 17113],\n \"requires\": []\n },\n 831: {\n \"id\": 831,\n \"row\": 4,\n \"col\": 0,\n \"icon\": \"spell_nature_ravenform\",\n \"ranks\": [17116],\n \"requires\": [{\n \"id\": 824,\n \"qty\": 5\n }]\n },\n 828: {\n \"id\": 828,\n \"row\": 4,\n \"col\": 2,\n \"icon\": \"spell_nature_protectionformnature\",\n \"ranks\": [17104, 24943, 24944, 24945, 24946],\n \"requires\": [{\n \"id\": 827,\n \"qty\": 1\n }]\n },\n 842: {\n \"id\": 842,\n \"row\": 4,\n \"col\": 3,\n \"icon\": \"spell_nature_tranquility\",\n \"ranks\": [17123, 17124],\n \"requires\": []\n },\n 825: {\n \"id\": 825,\n \"row\": 5,\n \"col\": 2,\n \"icon\": \"spell_nature_resistnature\",\n \"ranks\": [17074, 17075, 17076, 17077, 17078],\n \"requires\": []\n },\n 844: {\n \"id\": 844,\n \"row\": 6,\n \"col\": 1,\n \"icon\": \"inv_relics_idolofrejuvenation\",\n \"ranks\": [18562],\n \"requires\": [{\n \"id\": 843,\n \"qty\": 5\n }]\n }\n },\n 283: {\n 762: {\n \"id\": 762,\n \"row\": 0,\n \"col\": 0,\n \"icon\": \"spell_nature_abolishmagic\",\n \"ranks\": [16814, 16815, 16816, 16817, 16818],\n \"requires\": []\n },\n 761: {\n \"id\": 761,\n \"row\": 0,\n \"col\": 1,\n \"icon\": \"spell_nature_natureswrath\",\n \"ranks\": [16689],\n \"requires\": []\n },\n 921: {\n \"id\": 921,\n \"row\": 0,\n \"col\": 2,\n \"icon\": \"spell_nature_natureswrath\",\n \"ranks\": [17245, 17247, 17248, 17249],\n \"requires\": [{\n \"id\": 761,\n \"qty\": 1\n }]\n },\n 787: {\n \"id\": 787,\n \"row\": 1,\n \"col\": 0,\n \"icon\": \"spell_nature_stranglevines\",\n \"ranks\": [16918, 16919, 16920],\n \"requires\": []\n },\n 763: {\n \"id\": 763,\n \"row\": 1,\n \"col\": 1,\n \"icon\": \"spell_nature_starfall\",\n \"ranks\": [16821, 16822, 16823, 16824, 16825],\n \"requires\": []\n },\n 791: {\n \"id\": 791,\n \"row\": 1,\n \"col\": 2,\n \"icon\": \"inv_staff_01\",\n \"ranks\": [16902, 16903, 16904, 16905, 16906],\n \"requires\": []\n },\n 781: {\n \"id\": 781,\n \"row\": 1,\n \"col\": 3,\n \"icon\": \"spell_nature_wispsplode\",\n \"ranks\": [16833, 16834, 16835],\n \"requires\": []\n },\n 782: {\n \"id\": 782,\n \"row\": 2,\n \"col\": 0,\n \"icon\": \"spell_nature_thorns\",\n \"ranks\": [16836, 16839, 16840],\n \"requires\": []\n },\n 788: {\n \"id\": 788,\n \"row\": 2,\n \"col\": 2,\n \"icon\": \"spell_nature_crystalball\",\n \"ranks\": [16864],\n \"requires\": [{\n \"id\": 791,\n \"qty\": 5\n }]\n },\n 764: {\n \"id\": 764,\n \"row\": 2,\n \"col\": 3,\n \"icon\": \"spell_nature_naturetouchgrow\",\n \"ranks\": [16819, 16820],\n \"requires\": []\n },\n 792: {\n \"id\": 792,\n \"row\": 3,\n \"col\": 1,\n \"icon\": \"spell_nature_purge\",\n \"ranks\": [16909, 16910, 16911, 16912, 16913],\n \"requires\": [{\n \"id\": 763,\n \"qty\": 5\n }]\n },\n 784: {\n \"id\": 784,\n \"row\": 3,\n \"col\": 2,\n \"icon\": \"spell_arcane_starfire\",\n \"ranks\": [16850, 16923, 16924, 16925, 16926],\n \"requires\": []\n },\n 789: {\n \"id\": 789,\n \"row\": 4,\n \"col\": 1,\n \"icon\": \"spell_nature_naturesblessing\",\n \"ranks\": [16880],\n \"requires\": []\n },\n 783: {\n \"id\": 783,\n \"row\": 4,\n \"col\": 2,\n \"icon\": \"spell_nature_sentinal\",\n \"ranks\": [16845, 16846, 16847],\n \"requires\": []\n },\n 790: {\n \"id\": 790,\n \"row\": 5,\n \"col\": 1,\n \"icon\": \"spell_nature_moonglow\",\n \"ranks\": [16896, 16897, 16899, 16900, 16901],\n \"requires\": [{\n \"id\": 789,\n \"qty\": 1\n }]\n },\n 793: {\n \"id\": 793,\n \"row\": 6,\n \"col\": 1,\n \"icon\": \"spell_nature_forceofnature\",\n \"ranks\": [24858],\n \"requires\": []\n }\n },\n 301: {\n 944: {\n \"id\": 944,\n \"row\": 0,\n \"col\": 1,\n \"icon\": \"spell_shadow_shadowbolt\",\n \"ranks\": [17793, 17796, 17801, 17802, 17803],\n \"requires\": []\n },\n 941: {\n \"id\": 941,\n \"row\": 0,\n \"col\": 2,\n \"icon\": \"spell_fire_windsofwoe\",\n \"ranks\": [17778, 17779, 17780, 17781, 17782],\n \"requires\": []\n },\n 943: {\n \"id\": 943,\n \"row\": 1,\n \"col\": 1,\n \"icon\": \"spell_shadow_deathpact\",\n \"ranks\": [17788, 17789, 17790, 17791, 17792],\n \"requires\": []\n },\n 982: {\n \"id\": 982,\n \"row\": 1,\n \"col\": 2,\n \"icon\": \"spell_fire_fire\",\n \"ranks\": [18119, 18120, 18121, 18122, 18123],\n \"requires\": []\n },\n 983: {\n \"id\": 983,\n \"row\": 2,\n \"col\": 0,\n \"icon\": \"spell_fire_firebolt\",\n \"ranks\": [18126, 18127],\n \"requires\": []\n },\n 984: {\n \"id\": 984,\n \"row\": 2,\n \"col\": 1,\n \"icon\": \"spell_shadow_curse\",\n \"ranks\": [18128, 18129],\n \"requires\": []\n },\n 981: {\n \"id\": 981,\n \"row\": 2,\n \"col\": 2,\n \"icon\": \"spell_fire_flameshock\",\n \"ranks\": [18130, 18131, 18132, 18133, 18134],\n \"requires\": []\n },\n 963: {\n \"id\": 963,\n \"row\": 2,\n \"col\": 3,\n \"icon\": \"spell_shadow_scourgebuild\",\n \"ranks\": [17877],\n \"requires\": []\n },\n 985: {\n \"id\": 985,\n \"row\": 3,\n \"col\": 0,\n \"icon\": \"spell_fire_lavaspawn\",\n \"ranks\": [18135, 18136],\n \"requires\": []\n },\n 964: {\n \"id\": 964,\n \"row\": 3,\n \"col\": 1,\n \"icon\": \"spell_shadow_corpseexplode\",\n \"ranks\": [17917, 17918],\n \"requires\": []\n },\n 965: {\n \"id\": 965,\n \"row\": 3,\n \"col\": 3,\n \"icon\": \"spell_fire_soulburn\",\n \"ranks\": [17927, 17929, 17930, 17931, 17932],\n \"requires\": []\n },\n 986: {\n \"id\": 986,\n \"row\": 4,\n \"col\": 0,\n \"icon\": \"spell_fire_volcano\",\n \"ranks\": [18096, 18073],\n \"requires\": [{\n \"id\": 985,\n \"qty\": 2\n }]\n },\n 961: {\n \"id\": 961,\n \"row\": 4,\n \"col\": 1,\n \"icon\": \"spell_fire_immolation\",\n \"ranks\": [17815, 17833, 17834, 17835, 17836],\n \"requires\": []\n },\n 967: {\n \"id\": 967,\n \"row\": 4,\n \"col\": 2,\n \"icon\": \"spell_shadow_shadowwordpain\",\n \"ranks\": [17959],\n \"requires\": [{\n \"id\": 981,\n \"qty\": 5\n }]\n },\n 966: {\n \"id\": 966,\n \"row\": 5,\n \"col\": 2,\n \"icon\": \"spell_fire_selfdestruct\",\n \"ranks\": [17954, 17955, 17956, 17957, 17958],\n \"requires\": []\n },\n 968: {\n \"id\": 968,\n \"row\": 6,\n \"col\": 1,\n \"icon\": \"spell_fire_fireball\",\n \"ranks\": [17962],\n \"requires\": [{\n \"id\": 961,\n \"qty\": 5\n }]\n }\n },\n 302: {\n 1005: {\n \"id\": 1005,\n \"row\": 0,\n \"col\": 1,\n \"icon\": \"spell_shadow_unsummonbuilding\",\n \"ranks\": [18174, 18175, 18176, 18177, 18178],\n \"requires\": []\n },\n 1003: {\n \"id\": 1003,\n \"row\": 0,\n \"col\": 2,\n \"icon\": \"spell_shadow_abominationexplosion\",\n \"ranks\": [17810, 17811, 17812, 17813, 17814],\n \"requires\": []\n },\n 1006: {\n \"id\": 1006,\n \"row\": 1,\n \"col\": 0,\n \"icon\": \"spell_shadow_curseofmannoroth\",\n \"ranks\": [18179, 18180, 18181],\n \"requires\": []\n },\n 1101: {\n \"id\": 1101,\n \"row\": 1,\n \"col\": 1,\n \"icon\": \"spell_shadow_haunting\",\n \"ranks\": [18213, 18372],\n \"requires\": []\n },\n 1007: {\n \"id\": 1007,\n \"row\": 1,\n \"col\": 2,\n \"icon\": \"spell_shadow_burningspirit\",\n \"ranks\": [18182, 18183],\n \"requires\": []\n },\n 1004: {\n \"id\": 1004,\n \"row\": 1,\n \"col\": 3,\n \"icon\": \"spell_shadow_lifedrain02\",\n \"ranks\": [17804, 17805, 17806, 17807, 17808],\n \"requires\": []\n },\n 1284: {\n \"id\": 1284,\n \"row\": 2,\n \"col\": 0,\n \"icon\": \"spell_shadow_curseofsargeras\",\n \"ranks\": [18827, 18829, 18830],\n \"requires\": []\n },\n 1001: {\n \"id\": 1001,\n \"row\": 2,\n \"col\": 1,\n \"icon\": \"spell_shadow_fingerofdeath\",\n \"ranks\": [17783, 17784, 17785, 17786, 17787],\n \"requires\": []\n },\n 1061: {\n \"id\": 1061,\n \"row\": 2,\n \"col\": 2,\n \"icon\": \"spell_shadow_contagion\",\n \"ranks\": [18288],\n \"requires\": []\n },\n 1021: {\n \"id\": 1021,\n \"row\": 3,\n \"col\": 0,\n \"icon\": \"spell_shadow_callofbone\",\n \"ranks\": [18218, 18219],\n \"requires\": []\n },\n 1002: {\n \"id\": 1002,\n \"row\": 3,\n \"col\": 1,\n \"icon\": \"spell_shadow_twilight\",\n \"ranks\": [18094, 18095],\n \"requires\": []\n },\n 1121: {\n \"id\": 1121,\n \"row\": 3,\n \"col\": 3,\n \"icon\": \"spell_shadow_siphonmana\",\n \"ranks\": [17864, 18393],\n \"requires\": []\n },\n 1041: {\n \"id\": 1041,\n \"row\": 4,\n \"col\": 1,\n \"icon\": \"spell_shadow_requiem\",\n \"ranks\": [18265],\n \"requires\": []\n },\n 1081: {\n \"id\": 1081,\n \"row\": 4,\n \"col\": 2,\n \"icon\": \"spell_shadow_grimward\",\n \"ranks\": [18223],\n \"requires\": [{\n \"id\": 1061,\n \"qty\": 1\n }]\n },\n 1082: {\n \"id\": 1082,\n \"row\": 4,\n \"col\": 3,\n \"icon\": \"spell_shadow_grimward\",\n \"ranks\": [18310, 18311, 18312, 18313],\n \"requires\": [{\n \"id\": 1081,\n \"qty\": 1\n }]\n },\n 1042: {\n \"id\": 1042,\n \"row\": 5,\n \"col\": 1,\n \"icon\": \"spell_shadow_shadetruesight\",\n \"ranks\": [18271, 18272, 18273, 18274, 18275],\n \"requires\": [{\n \"id\": 1041,\n \"qty\": 1\n }]\n },\n 1022: {\n \"id\": 1022,\n \"row\": 6,\n \"col\": 1,\n \"icon\": \"spell_shadow_darkritual\",\n \"ranks\": [18220],\n \"requires\": []\n }\n },\n 303: {\n 1221: {\n \"id\": 1221,\n \"row\": 0,\n \"col\": 0,\n \"icon\": \"inv_stone_04\",\n \"ranks\": [18692, 18693],\n \"requires\": []\n },\n 1222: {\n \"id\": 1222,\n \"row\": 0,\n \"col\": 1,\n \"icon\": \"spell_shadow_summonimp\",\n \"ranks\": [18694, 18695, 18696],\n \"requires\": []\n },\n 1223: {\n \"id\": 1223,\n \"row\": 0,\n \"col\": 2,\n \"icon\": \"spell_shadow_metamorphosis\",\n \"ranks\": [18697, 18698, 18699, 18700, 18701],\n \"requires\": []\n },\n 1224: {\n \"id\": 1224,\n \"row\": 1,\n \"col\": 0,\n \"icon\": \"spell_shadow_lifedrain\",\n \"ranks\": [18703, 18704],\n \"requires\": []\n },\n 1225: {\n \"id\": 1225,\n \"row\": 1,\n \"col\": 1,\n \"icon\": \"spell_shadow_summonvoidwalker\",\n \"ranks\": [18705, 18706, 18707],\n \"requires\": []\n },\n 1242: {\n \"id\": 1242,\n \"row\": 1,\n \"col\": 2,\n \"icon\": \"spell_holy_magicalsentry\",\n \"ranks\": [18731, 18743, 18744, 18745, 18746],\n \"requires\": []\n },\n 1243: {\n \"id\": 1243,\n \"row\": 2,\n \"col\": 0,\n \"icon\": \"spell_shadow_summonsuccubus\",\n \"ranks\": [18754, 18755, 18756],\n \"requires\": []\n },\n 1226: {\n \"id\": 1226,\n \"row\": 2,\n \"col\": 1,\n \"icon\": \"spell_nature_removecurse\",\n \"ranks\": [18708],\n \"requires\": []\n },\n 1241: {\n \"id\": 1241,\n \"row\": 2,\n \"col\": 2,\n \"icon\": \"spell_shadow_antishadow\",\n \"ranks\": [18748, 18749, 18750, 18751, 18752],\n \"requires\": []\n },\n 1227: {\n \"id\": 1227,\n \"row\": 3,\n \"col\": 1,\n \"icon\": \"spell_shadow_impphaseshift\",\n \"ranks\": [18709, 18710],\n \"requires\": [{\n \"id\": 1226,\n \"qty\": 1\n }]\n },\n 1262: {\n \"id\": 1262,\n \"row\": 3,\n \"col\": 2,\n \"icon\": \"spell_shadow_shadowworddominate\",\n \"ranks\": [18769, 18770, 18771, 18772, 18773],\n \"requires\": []\n },\n 1283: {\n \"id\": 1283,\n \"row\": 4,\n \"col\": 0,\n \"icon\": \"spell_shadow_enslavedemon\",\n \"ranks\": [18821, 18822, 18823, 18824, 18825],\n \"requires\": []\n },\n 1281: {\n \"id\": 1281,\n \"row\": 4,\n \"col\": 1,\n \"icon\": \"spell_shadow_psychicscream\",\n \"ranks\": [18788],\n \"requires\": []\n },\n 1261: {\n \"id\": 1261,\n \"row\": 4,\n \"col\": 3,\n \"icon\": \"inv_ammo_firetar\",\n \"ranks\": [18767, 18768],\n \"requires\": []\n },\n 1244: {\n \"id\": 1244,\n \"row\": 5,\n \"col\": 2,\n \"icon\": \"spell_shadow_shadowpact\",\n \"ranks\": [23785, 23822, 23823, 23824, 23825],\n \"requires\": [{\n \"id\": 1262,\n \"qty\": 5\n }]\n },\n 1282: {\n \"id\": 1282,\n \"row\": 6,\n \"col\": 1,\n \"icon\": \"spell_shadow_gathershadows\",\n \"ranks\": [19028],\n \"requires\": [{\n \"id\": 1281,\n \"qty\": 1\n }]\n },\n 1263: {\n \"id\": 1263,\n \"row\": 6,\n \"col\": 2,\n \"icon\": \"inv_misc_gem_sapphire_01\",\n \"ranks\": [18774, 18775],\n \"requires\": []\n }\n },\n 361: {\n 1382: {\n \"id\": 1382,\n \"row\": 0,\n \"col\": 1,\n \"icon\": \"spell_nature_ravenform\",\n \"ranks\": [19552, 19553, 19554, 19555, 19556],\n \"requires\": []\n },\n 1389: {\n \"id\": 1389,\n \"row\": 0,\n \"col\": 2,\n \"icon\": \"spell_nature_reincarnation\",\n \"ranks\": [19583, 19584, 19585, 19586, 19587],\n \"requires\": []\n },\n 1624: {\n \"id\": 1624,\n \"row\": 1,\n \"col\": 0,\n \"icon\": \"ability_eyeoftheowl\",\n \"ranks\": [19557, 19558],\n \"requires\": []\n },\n 1381: {\n \"id\": 1381,\n \"row\": 1,\n \"col\": 1,\n \"icon\": \"ability_hunter_aspectofthemonkey\",\n \"ranks\": [19549, 19550, 19551, 24386, 24387],\n \"requires\": []\n },\n 1395: {\n \"id\": 1395,\n \"row\": 1,\n \"col\": 2,\n \"icon\": \"inv_misc_pelt_bear_03\",\n \"ranks\": [19609, 19610, 19612],\n \"requires\": []\n },\n 1625: {\n \"id\": 1625,\n \"row\": 1,\n \"col\": 3,\n \"icon\": \"ability_hunter_beastsoothe\",\n \"ranks\": [24443, 19575],\n \"requires\": []\n },\n 1384: {\n \"id\": 1384,\n \"row\": 2,\n \"col\": 0,\n \"icon\": \"ability_mount_jungletiger\",\n \"ranks\": [19559, 19560],\n \"requires\": []\n },\n 1391: {\n \"id\": 1391,\n \"row\": 2,\n \"col\": 1,\n \"icon\": \"ability_druid_dash\",\n \"ranks\": [19596],\n \"requires\": []\n },\n 1396: {\n \"id\": 1396,\n \"row\": 2,\n \"col\": 2,\n \"icon\": \"ability_bullrush\",\n \"ranks\": [19616, 19617, 19618, 19619, 19620],\n \"requires\": []\n },\n 1385: {\n \"id\": 1385,\n \"row\": 3,\n \"col\": 1,\n \"icon\": \"ability_hunter_mendpet\",\n \"ranks\": [19572, 19573],\n \"requires\": []\n },\n 1393: {\n \"id\": 1393,\n \"row\": 3,\n \"col\": 2,\n \"icon\": \"inv_misc_monsterclaw_04\",\n \"ranks\": [19598, 19599, 19600, 19601, 19602],\n \"requires\": []\n },\n 1388: {\n \"id\": 1388,\n \"row\": 4,\n \"col\": 0,\n \"icon\": \"ability_druid_demoralizingroar\",\n \"ranks\": [19578, 20895],\n \"requires\": []\n },\n 1387: {\n \"id\": 1387,\n \"row\": 4,\n \"col\": 1,\n \"icon\": \"ability_devour\",\n \"ranks\": [19577],\n \"requires\": []\n },\n 1390: {\n \"id\": 1390,\n \"row\": 4,\n \"col\": 3,\n \"icon\": \"spell_nature_abolishmagic\",\n \"ranks\": [19590, 19592],\n \"requires\": []\n },\n 1397: {\n \"id\": 1397,\n \"row\": 5,\n \"col\": 2,\n \"icon\": \"inv_misc_monsterclaw_03\",\n \"ranks\": [19621, 19622, 19623, 19624, 19625],\n \"requires\": [{\n \"id\": 1393,\n \"qty\": 5\n }]\n },\n 1386: {\n \"id\": 1386,\n \"row\": 6,\n \"col\": 1,\n \"icon\": \"ability_druid_ferociousbite\",\n \"ranks\": [19574],\n \"requires\": [{\n \"id\": 1387,\n \"qty\": 1\n }]\n }\n },\n 362: {\n 1623: {\n \"id\": 1623,\n \"row\": 0,\n \"col\": 0,\n \"icon\": \"inv_misc_head_dragon_black\",\n \"ranks\": [24293, 24294, 24295],\n \"requires\": []\n },\n 1301: {\n \"id\": 1301,\n \"row\": 0,\n \"col\": 1,\n \"icon\": \"spell_holy_prayerofhealing\",\n \"ranks\": [19151, 19152, 19153],\n \"requires\": []\n },\n 1311: {\n \"id\": 1311,\n \"row\": 0,\n \"col\": 2,\n \"icon\": \"ability_parry\",\n \"ranks\": [19295, 19297, 19298, 19301, 19300],\n \"requires\": []\n },\n 1304: {\n \"id\": 1304,\n \"row\": 1,\n \"col\": 0,\n \"icon\": \"spell_nature_stranglevines\",\n \"ranks\": [19184, 19387, 19388, 19389, 19390],\n \"requires\": []\n },\n 1621: {\n \"id\": 1621,\n \"row\": 1,\n \"col\": 1,\n \"icon\": \"ability_racial_bloodrage\",\n \"ranks\": [19159, 19160],\n \"requires\": []\n },\n 1305: {\n \"id\": 1305,\n \"row\": 1,\n \"col\": 2,\n \"icon\": \"ability_rogue_trip\",\n \"ranks\": [19228, 19232, 19233, 19234, 19235],\n \"requires\": []\n },\n 1306: {\n \"id\": 1306,\n \"row\": 2,\n \"col\": 0,\n \"icon\": \"spell_nature_timestop\",\n \"ranks\": [19239, 19245],\n \"requires\": []\n },\n 1622: {\n \"id\": 1622,\n \"row\": 2,\n \"col\": 1,\n \"icon\": \"spell_shadow_twilight\",\n \"ranks\": [19255, 19256, 19257, 19258, 19259],\n \"requires\": []\n },\n 1308: {\n \"id\": 1308,\n \"row\": 2,\n \"col\": 2,\n \"icon\": \"ability_whirlwind\",\n \"ranks\": [19263],\n \"requires\": []\n },\n 1322: {\n \"id\": 1322,\n \"row\": 3,\n \"col\": 0,\n \"icon\": \"ability_ensnare\",\n \"ranks\": [19376, 19377],\n \"requires\": []\n },\n 1310: {\n \"id\": 1310,\n \"row\": 3,\n \"col\": 1,\n \"icon\": \"ability_kick\",\n \"ranks\": [19290, 19294, 24283],\n \"requires\": []\n },\n 1309: {\n \"id\": 1309,\n \"row\": 3,\n \"col\": 3,\n \"icon\": \"ability_rogue_feigndeath\",\n \"ranks\": [19286, 19287],\n \"requires\": []\n },\n 1321: {\n \"id\": 1321,\n \"row\": 4,\n \"col\": 1,\n \"icon\": \"spell_holy_blessingofstamina\",\n \"ranks\": [19370, 19371, 19373],\n \"requires\": []\n },\n 1312: {\n \"id\": 1312,\n \"row\": 4,\n \"col\": 2,\n \"icon\": \"ability_warrior_challange\",\n \"ranks\": [19306],\n \"requires\": [{\n \"id\": 1308,\n \"qty\": 1\n }]\n },\n 1303: {\n \"id\": 1303,\n \"row\": 5,\n \"col\": 2,\n \"icon\": \"spell_nature_invisibilty\",\n \"ranks\": [19168, 19180, 19181, 24296, 24297],\n \"requires\": []\n },\n 1325: {\n \"id\": 1325,\n \"row\": 6,\n \"col\": 1,\n \"icon\": \"inv_spear_02\",\n \"ranks\": [19386],\n \"requires\": [{\n \"id\": 1321,\n \"qty\": 3\n }]\n }\n },\n 363: {\n 1341: {\n \"id\": 1341,\n \"row\": 0,\n \"col\": 1,\n \"icon\": \"spell_frost_stun\",\n \"ranks\": [19407, 19412, 19413, 19414, 19415],\n \"requires\": []\n },\n 1342: {\n \"id\": 1342,\n \"row\": 0,\n \"col\": 2,\n \"icon\": \"spell_frost_wizardmark\",\n \"ranks\": [19416, 19417, 19418, 19419, 19420],\n \"requires\": []\n },\n 1343: {\n \"id\": 1343,\n \"row\": 1,\n \"col\": 1,\n \"icon\": \"ability_hunter_snipershot\",\n \"ranks\": [19421, 19422, 19423, 19424, 19425],\n \"requires\": []\n },\n 1344: {\n \"id\": 1344,\n \"row\": 1,\n \"col\": 2,\n \"icon\": \"ability_searingarrow\",\n \"ranks\": [19426, 19427, 19429, 19430, 19431],\n \"requires\": []\n },\n 1345: {\n \"id\": 1345,\n \"row\": 2,\n \"col\": 0,\n \"icon\": \"inv_spear_07\",\n \"ranks\": [19434],\n \"requires\": []\n },\n 1346: {\n \"id\": 1346,\n \"row\": 2,\n \"col\": 1,\n \"icon\": \"ability_impalingbolt\",\n \"ranks\": [19454, 19455, 19456, 19457, 19458],\n \"requires\": []\n },\n 1352: {\n \"id\": 1352,\n \"row\": 2,\n \"col\": 3,\n \"icon\": \"ability_townwatch\",\n \"ranks\": [19498, 19499, 19500],\n \"requires\": []\n },\n 1348: {\n \"id\": 1348,\n \"row\": 3,\n \"col\": 1,\n \"icon\": \"ability_hunter_quickshot\",\n \"ranks\": [19464, 19465, 19466, 19467, 19468],\n \"requires\": []\n },\n 1349: {\n \"id\": 1349,\n \"row\": 3,\n \"col\": 2,\n \"icon\": \"ability_piercedamage\",\n \"ranks\": [19485, 19487, 19488, 19489, 19490],\n \"requires\": [{\n \"id\": 1344,\n \"qty\": 5\n }]\n },\n 1353: {\n \"id\": 1353,\n \"row\": 4,\n \"col\": 0,\n \"icon\": \"ability_golemstormbolt\",\n \"ranks\": [19503],\n \"requires\": []\n },\n 1347: {\n \"id\": 1347,\n \"row\": 4,\n \"col\": 1,\n \"icon\": \"ability_upgrademoonglaive\",\n \"ranks\": [19461, 19462, 24691],\n \"requires\": []\n },\n 1351: {\n \"id\": 1351,\n \"row\": 4,\n \"col\": 2,\n \"icon\": \"ability_hunter_criticalshot\",\n \"ranks\": [19491, 19493, 19494],\n \"requires\": []\n },\n 1362: {\n \"id\": 1362,\n \"row\": 5,\n \"col\": 2,\n \"icon\": \"inv_weapon_rifle_06\",\n \"ranks\": [19507, 19508, 19509, 19510, 19511],\n \"requires\": []\n },\n 1361: {\n \"id\": 1361,\n \"row\": 6,\n \"col\": 1,\n \"icon\": \"ability_trueshot\",\n \"ranks\": [19506],\n \"requires\": [{\n \"id\": 1347,\n \"qty\": 3\n }]\n }\n },\n 381: {\n 1401: {\n \"id\": 1401,\n \"row\": 0,\n \"col\": 1,\n \"icon\": \"spell_holy_fistofjustice\",\n \"ranks\": [20042, 20045, 20046, 20047, 20048],\n \"requires\": []\n },\n 1407: {\n \"id\": 1407,\n \"row\": 0,\n \"col\": 2,\n \"icon\": \"spell_frost_windwalkon\",\n \"ranks\": [20101, 20102, 20103, 20104, 20105],\n \"requires\": []\n },\n 1631: {\n \"id\": 1631,\n \"row\": 1,\n \"col\": 0,\n \"icon\": \"spell_holy_righteousfury\",\n \"ranks\": [25956, 25957],\n \"requires\": []\n },\n 1464: {\n \"id\": 1464,\n \"row\": 1,\n \"col\": 1,\n \"icon\": \"spell_holy_holysmite\",\n \"ranks\": [20335, 20336, 20337],\n \"requires\": []\n },\n 1403: {\n \"id\": 1403,\n \"row\": 1,\n \"col\": 2,\n \"icon\": \"ability_parry\",\n \"ranks\": [20060, 20061, 20062, 20063, 20064],\n \"requires\": []\n },\n 1633: {\n \"id\": 1633,\n \"row\": 2,\n \"col\": 0,\n \"icon\": \"spell_holy_vindication\",\n \"ranks\": [9452, 26016, 26021],\n \"requires\": []\n },\n 1411: {\n \"id\": 1411,\n \"row\": 2,\n \"col\": 1,\n \"icon\": \"spell_holy_retributionaura\",\n \"ranks\": [20117, 20118, 20119, 20120, 20121],\n \"requires\": []\n },\n 1481: {\n \"id\": 1481,\n \"row\": 2,\n \"col\": 2,\n \"icon\": \"ability_warrior_innerrage\",\n \"ranks\": [20375],\n \"requires\": []\n },\n 1634: {\n \"id\": 1634,\n \"row\": 2,\n \"col\": 3,\n \"icon\": \"spell_holy_persuitofjustice\",\n \"ranks\": [26022, 26023],\n \"requires\": []\n },\n 1632: {\n \"id\": 1632,\n \"row\": 3,\n \"col\": 0,\n \"icon\": \"spell_holy_eyeforaneye\",\n \"ranks\": [9799, 25988],\n \"requires\": []\n },\n 1405: {\n \"id\": 1405,\n \"row\": 3,\n \"col\": 2,\n \"icon\": \"spell_holy_auraoflight\",\n \"ranks\": [20091, 20092],\n \"requires\": []\n },\n 1410: {\n \"id\": 1410,\n \"row\": 4,\n \"col\": 0,\n \"icon\": \"inv_hammer_04\",\n \"ranks\": [20111, 20112, 20113],\n \"requires\": []\n },\n 1409: {\n \"id\": 1409,\n \"row\": 4,\n \"col\": 2,\n \"icon\": \"spell_holy_mindvision\",\n \"ranks\": [20218],\n \"requires\": []\n },\n 1402: {\n \"id\": 1402,\n \"row\": 5,\n \"col\": 1,\n \"icon\": \"ability_racial_avatar\",\n \"ranks\": [20049, 20056, 20057, 20058, 20059],\n \"requires\": [{\n \"id\": 1411,\n \"qty\": 5\n }]\n },\n 1441: {\n \"id\": 1441,\n \"row\": 6,\n \"col\": 1,\n \"icon\": \"spell_holy_prayerofhealing\",\n \"ranks\": [20066],\n \"requires\": []\n }\n },\n 382: {\n 1450: {\n \"id\": 1450,\n \"row\": 0,\n \"col\": 1,\n \"icon\": \"ability_golemthunderclap\",\n \"ranks\": [20262, 20263, 20264, 20265, 20266],\n \"requires\": []\n },\n 1449: {\n \"id\": 1449,\n \"row\": 0,\n \"col\": 2,\n \"icon\": \"spell_nature_sleep\",\n \"ranks\": [20257, 20258, 20259, 20260, 20261],\n \"requires\": []\n },\n 1432: {\n \"id\": 1432,\n \"row\": 1,\n \"col\": 1,\n \"icon\": \"spell_arcane_blink\",\n \"ranks\": [20205, 20206, 20207, 20209, 20208],\n \"requires\": []\n },\n 1463: {\n \"id\": 1463,\n \"row\": 1,\n \"col\": 2,\n \"icon\": \"ability_thunderbolt\",\n \"ranks\": [20224, 20225, 20330, 20331, 20332],\n \"requires\": []\n },\n 1444: {\n \"id\": 1444,\n \"row\": 2,\n \"col\": 0,\n \"icon\": \"spell_holy_holybolt\",\n \"ranks\": [20237, 20238, 20239],\n \"requires\": []\n },\n 1435: {\n \"id\": 1435,\n \"row\": 2,\n \"col\": 1,\n \"icon\": \"spell_holy_innerfire\",\n \"ranks\": [26573],\n \"requires\": []\n },\n 1443: {\n \"id\": 1443,\n \"row\": 2,\n \"col\": 2,\n \"icon\": \"spell_holy_layonhands\",\n \"ranks\": [20234, 20235],\n \"requires\": []\n },\n 1628: {\n \"id\": 1628,\n \"row\": 2,\n \"col\": 3,\n \"icon\": \"spell_holy_unyieldingfaith\",\n \"ranks\": [9453, 25836],\n \"requires\": []\n },\n 1461: {\n \"id\": 1461,\n \"row\": 3,\n \"col\": 1,\n \"icon\": \"spell_holy_greaterheal\",\n \"ranks\": [20210, 20212, 20213, 20214, 20215],\n \"requires\": []\n },\n 1446: {\n \"id\": 1446,\n \"row\": 3,\n \"col\": 2,\n \"icon\": \"spell_holy_sealofwisdom\",\n \"ranks\": [20244, 20245],\n \"requires\": []\n },\n 1433: {\n \"id\": 1433,\n \"row\": 4,\n \"col\": 1,\n \"icon\": \"spell_holy_heal\",\n \"ranks\": [20216],\n \"requires\": [{\n \"id\": 1461,\n \"qty\": 5\n }]\n },\n 1465: {\n \"id\": 1465,\n \"row\": 4,\n \"col\": 2,\n \"icon\": \"spell_holy_healingaura\",\n \"ranks\": [20359, 20360, 20361],\n \"requires\": []\n },\n 1627: {\n \"id\": 1627,\n \"row\": 5,\n \"col\": 2,\n \"icon\": \"spell_holy_power\",\n \"ranks\": [5923, 5924, 5925, 5926, 25829],\n \"requires\": []\n },\n 1502: {\n \"id\": 1502,\n \"row\": 6,\n \"col\": 1,\n \"icon\": \"spell_holy_searinglight\",\n \"ranks\": [20473],\n \"requires\": [{\n \"id\": 1433,\n \"qty\": 1\n }]\n }\n },\n 383: {\n 1422: {\n \"id\": 1422,\n \"row\": 0,\n \"col\": 1,\n \"icon\": \"spell_holy_devotionaura\",\n \"ranks\": [20138, 20139, 20140, 20141, 20142],\n \"requires\": []\n },\n 1421: {\n \"id\": 1421,\n \"row\": 0,\n \"col\": 2,\n \"icon\": \"ability_defend\",\n \"ranks\": [20127, 20130, 20135, 20136, 20137],\n \"requires\": []\n },\n 1630: {\n \"id\": 1630,\n \"row\": 1,\n \"col\": 0,\n \"icon\": \"ability_rogue_ambush\",\n \"ranks\": [20189, 20192, 20193],\n \"requires\": []\n },\n 1425: {\n \"id\": 1425,\n \"row\": 1,\n \"col\": 1,\n \"icon\": \"spell_holy_sealofprotection\",\n \"ranks\": [20174, 20175],\n \"requires\": []\n },\n 1423: {\n \"id\": 1423,\n \"row\": 1,\n \"col\": 3,\n \"icon\": \"spell_holy_devotion\",\n \"ranks\": [20143, 20144, 20145, 20146, 20147],\n \"requires\": []\n },\n 1442: {\n \"id\": 1442,\n \"row\": 2,\n \"col\": 0,\n \"icon\": \"spell_magic_magearmor\",\n \"ranks\": [20217],\n \"requires\": []\n },\n 1501: {\n \"id\": 1501,\n \"row\": 2,\n \"col\": 1,\n \"icon\": \"spell_holy_sealoffury\",\n \"ranks\": [20468, 20469, 20470],\n \"requires\": []\n },\n 1424: {\n \"id\": 1424,\n \"row\": 2,\n \"col\": 2,\n \"icon\": \"inv_shield_06\",\n \"ranks\": [20148, 20149, 20150],\n \"requires\": [{\n \"id\": 1421,\n \"qty\": 5\n }]\n },\n 1629: {\n \"id\": 1629,\n \"row\": 2,\n \"col\": 3,\n \"icon\": \"spell_magic_lesserinvisibilty\",\n \"ranks\": [20096, 20097, 20098, 20099, 20100],\n \"requires\": []\n },\n 1521: {\n \"id\": 1521,\n \"row\": 3,\n \"col\": 1,\n \"icon\": \"spell_holy_sealofmight\",\n \"ranks\": [20487, 20488, 20489],\n \"requires\": []\n },\n 1626: {\n \"id\": 1626,\n \"row\": 3,\n \"col\": 2,\n \"icon\": \"spell_holy_mindsooth\",\n \"ranks\": [20254, 20255, 20256],\n \"requires\": []\n },\n 1431: {\n \"id\": 1431,\n \"row\": 4,\n \"col\": 1,\n \"icon\": \"spell_nature_lightningshield\",\n \"ranks\": [20911],\n \"requires\": []\n },\n 1426: {\n \"id\": 1426,\n \"row\": 4,\n \"col\": 2,\n \"icon\": \"spell_holy_blessingofstrength\",\n \"ranks\": [20177, 20179, 20181, 20180, 20182],\n \"requires\": []\n },\n 1429: {\n \"id\": 1429,\n \"row\": 5,\n \"col\": 2,\n \"icon\": \"inv_sword_20\",\n \"ranks\": [20196, 20197, 20198, 20199, 20200],\n \"requires\": []\n },\n 1430: {\n \"id\": 1430,\n \"row\": 6,\n \"col\": 1,\n \"icon\": \"spell_holy_blessingofprotection\",\n \"ranks\": [20925],\n \"requires\": [{\n \"id\": 1431,\n \"qty\": 1\n }]\n }\n }\n}\n\nexport const talentsById: {[key: number]: TalentData} = {}\nexport const talentsBySpecArray: {[key: number]: TalentData[]} = {}\nexport const talentToSpec: {[key: number]: number} = {}\n\nfor (let specId in talentsBySpec) {\n for (let talentId in talentsBySpec[specId]) {\n talentsById[talentId] = talentsBySpec[specId][talentId]\n talentsBySpecArray[specId] = Object.values(talentsBySpec[specId])\n talentToSpec[talentId] = parseInt(specId, 10)\n }\n}\n","export const classes: ClassData[] = [\n { \n id: 1,\n name: 'Warrior',\n icon: 'class_warrior',\n specs: [161, 164, 163]\n },\n { \n id: 2,\n name: 'Paladin',\n icon: 'class_paladin',\n specs: [382, 383, 381]\n },\n { \n id: 3,\n name: 'Hunter',\n icon: 'class_hunter',\n specs: [361, 363, 362]\n },\n { \n id: 4,\n name: 'Rogue',\n icon: 'class_rogue',\n specs: [182, 181, 183]\n },\n { \n id: 5,\n name: 'Priest',\n icon: 'class_priest',\n specs: [201, 202, 203]\n },\n { \n id: 7,\n name: 'Shaman',\n icon: 'class_shaman',\n specs: [261, 263, 262]\n },\n { \n id: 8,\n name: 'Mage',\n icon: 'class_mage',\n specs: [81, 41, 61]\n },\n { \n id: 9,\n name: 'Warlock',\n icon: 'class_warlock',\n specs: [302, 303, 301]\n },\n { \n id: 11,\n name: 'Druid',\n icon: 'class_druid',\n specs: [283, 281, 282]\n },\n]\n\nexport const classById: {[key: number]: ClassData} = \n classes.reduce((previousValue: object, currentValue: ClassData) => {\n return {\n ...previousValue,\n [currentValue.id]: currentValue\n }\n }, {}) \n\nexport const classByName: {[key: string]: ClassData} = \n classes.reduce((previousValue: object, currentValue: ClassData) => {\n return {\n ...previousValue,\n [currentValue.name.toLowerCase()]: currentValue\n }\n }, {})\n","import { List, Map, fromJS } from 'immutable'\nimport { \n talentsBySpec, \n talentToSpec, \n talentsBySpecArray \n} from '../data/talents';\nimport { classByName } from '../data/classes'\n\nexport const MAX_POINTS = 51\nexport const MAX_ROWS = 7\n\nexport const SORT_TALENTS = (a: TalentData, b: TalentData) => {\n if (a.row === b.row) {\n return a.col - b.col\n }\n return a.row - b.row\n}\n\n/**\n * Returns the overall points spent in the tree.\n */\nexport function getPointsInSpec(specId: number, known: Map): number {\n // TODO: Hard to test this method when referencing talents from a file. Improve this.\n return Object.values(talentsBySpec[specId]).reduce((prev: number, current: TalentData) => {\n return prev + known.get(current.id, 0)\n }, 0)\n}\n\nexport function calcAvailablePoints(known: Map): number {\n return Math.max(0, MAX_POINTS - known.reduce((prev, current) => prev + current, 0))\n}\n\n/**\n * Returns whether a talent's other talent requirements are met.\n */\nexport function calcMeetsRequirements(talent: TalentData, known: Map): boolean {\n if (talent.requires.length === 0) {\n return true\n }\n return talent.requires.reduce((prev, req) => {\n if (!prev) return false\n return known.get(req.id, 0) >= req.qty\n }, true)\n}\n\nexport const canLearnTalent = (known: Map, talent: TalentData): boolean => {\n // Reached the max rank?\n if (known.get(talent.id, 0) >= talent.ranks.length) {\n return false\n }\n\n // Spend a maximum of 51 points\n if (calcAvailablePoints(known) === 0) {\n return false\n }\n \n // Support for specific Talent dependency requirement.\n if (talent.requires.length > 0 && !calcMeetsRequirements(talent, known)) {\n return false\n }\n \n // Check we have the required amount of points spent in the tree for this talent\n const requiredPoints = talent.row * 5\n const pointsInSpec = getPointsInSpec(talentToSpec[talent.id], known)\n if (requiredPoints > pointsInSpec) {\n return false\n }\n\n return true\n}\n\n/**\n * Adds a single talent point to the Map, if possible.\n */\nexport const addTalentPoint = (known: Map, talent: TalentData): Map => {\n const currentPoints = known.get(talent.id, 0)\n \n if (!canLearnTalent(known, talent)) {\n return known\n }\n\n return known.set(talent.id, currentPoints + 1)\n}\n\n/**\n * Removes a single talent point from the Map, if possible.\n */\nexport const removeTalentPoint = (known: Map, talent: TalentData): Map => {\n const currentPoints = known.get(talent.id, 0)\n const specId = talentToSpec[talent.id]\n\n // No points to reduce for this talent\n if (currentPoints === 0) {\n console.warn('no points to reduce')\n return known\n }\n \n let isDependency = false\n let highestRow = 0\n let cumulativePointsPerRow = {}\n\n known.forEach((points, talentId) => {\n const t = talentsBySpec[specId][talentId]\n if (t && points > 0) {\n isDependency = isDependency || t.requires.some((req) => req.id === talent.id)\n if (t.row > highestRow) {\n console.info('new highest row:', t)\n }\n highestRow = t.row > highestRow ? t.row : highestRow\n for (let row = t.row; row < MAX_ROWS; row++) {\n cumulativePointsPerRow[row] = (cumulativePointsPerRow[row] || 0) + points\n }\n }\n })\n\n // Check if removing this talent would not break the requirements for talents spent in later rows\n const pointsUntilHighestRow = cumulativePointsPerRow[highestRow - 1]\n const targetPointsHighestRow = highestRow * 5\n if (talent.row < highestRow && pointsUntilHighestRow - 1 < targetPointsHighestRow) {\n console.warn('would not break the requirements for talents spent in later rows', { \n talent,\n highestRow,\n pointsUntilHighestRow,\n targetPointsHighestRow\n })\n return known\n }\n\n // Prevent if another talent depends on this \n if (isDependency) {\n console.warn('is dependency')\n return known\n }\n\n return currentPoints === 1 \n ? known.remove(talent.id)\n : known.set(talent.id, currentPoints - 1)\n}\n\n/**\n * Either adds or removes a talent point based on the modifier.\n */\nexport const modifyTalentPoint = (known: Map, talent: TalentData, modifier: 1 | -1): Map => {\n if (modifier === 1) {\n return addTalentPoint(known, talent)\n } else {\n return removeTalentPoint(known, talent)\n }\n}\n\n// TODO\nexport function parsePointString(str: string): List> {\n const list: Array = []\n const trees = str.split('-')\n\n trees.forEach((stringForTree, index) => {\n const points = stringForTree.split('').map(a => parseInt(a, 10))\n list[index] = points\n })\n\n return fromJS(list)\n}\n\n/**\n * Encodes a Map of known talents into a URL-friendly string.\n */\nexport function encodeKnownTalents(known: Map, className: string): string {\n let string = ''\n const { specs } = classByName[className]\n for (let i = 0; i < specs.length; i++) {\n const specId = specs[i]\n const talents = talentsBySpecArray[specId].sort(SORT_TALENTS)\n string += i > 0 ? '-' : ''\n string += removeTrailingCharacters(\n talents.map((talent) => known.get(talent.id, 0)).join(''),\n '0'\n )\n }\n return removeTrailingCharacters(string, '-')\n}\n\n/**\n * Decodes a string of points into a Map of talents.\n */\nexport function decodeKnownTalents(pointString: string, className: string): Map {\n console.log(pointString, className)\n\n const { specs } = classByName[className]\n let known = Map()\n\n // TODO: Make sure we validate the point string\n const parts = pointString.split('-')\n for (let i = 0; i < parts.length; i++) {\n const specId = specs[i]\n const specPointStr = parts[i]\n console.log(specPointStr, { specId })\n const talents = talentsBySpecArray[specId].sort(SORT_TALENTS)\n\n for (let y = 0; y < specPointStr.length; y++) {\n const talent = talents[y]\n const points = parseInt(specPointStr[y], 10)\n \n // Validation: break out loop if there's more points in the string than this talent can have\n if (points > talent.ranks.length) {\n break\n }\n \n if (points > 0) {\n console.log(`Spent ${points} in ${talent.id}`)\n known = known.set(talent.id, points)\n }\n }\n }\n\n return known\n}\n\n/**\n * Removes repeated characters from the end of a string.\n */\nfunction removeTrailingCharacters(str: string, char: string): string {\n while (str[str.length - 1] === char) {\n str = str.slice(0, -1)\n }\n return str\n}","import './TalentSlot.scss'\nimport React, { FC } from 'react'\nimport { Icon } from './Icon'\nimport classNames from 'classnames'\nimport { Map } from 'immutable';\nimport { getPointsInSpec, calcMeetsRequirements } from '../lib/tree';\n\ninterface Props {\n talent: TalentData\n specId: number\n availablePoints: number\n /** All spent talents */\n knownTalents: Map\n /** Disabled override */\n disabled?: boolean\n onClick?: (talentId: number) => void\n onRightClick?: (talentId: number) => void\n}\n\nconst defaultProps: Partial = {\n onClick: () => undefined,\n onRightClick: () => undefined\n}\n\nconst isAvailable = (talent: TalentData, specId: number, knownTalents: Map): boolean => {\n // Dependent on other talents?\n if (!calcMeetsRequirements(talent, knownTalents)) {\n return false\n }\n const pointsInSpec = getPointsInSpec(specId, knownTalents)\n return talent.row * 5 <= pointsInSpec\n}\n\nexport const TalentSlot: FC = (props) => {\n const { talent, specId, knownTalents, availablePoints } = props\n const points = knownTalents.get(talent.id, 0)\n const showPoints = points > 0 || availablePoints > 0\n const disabled = props.disabled || !showPoints || !isAvailable(talent, specId, knownTalents)\n\n const containerClassNames = classNames('talent', {\n 'talent--disabled': !!disabled,\n 'talent--available': !disabled && points < talent.ranks.length,\n 'talent--maxed': points >= talent.ranks.length || (points > 0 && availablePoints === 0)\n })\n\n const pointsClassNames = classNames('point-label', {\n 'point-label--enabled': !disabled\n })\n\n const handleContextMenu = (e) => {\n if (props.onRightClick) props.onRightClick(talent.id)\n e.preventDefault()\n return false\n }\n\n return (\n
props.onClick(talent.id) : () => {}}\n onContextMenu={handleContextMenu}\n >\n
\n \n\n {showPoints && !disabled &&\n
\n {points}\n /{talent.ranks.length}\n
\n }\n
\n )\n}\n\nTalentSlot.defaultProps = defaultProps\n\n;(TalentSlot as any).whyDidYouRender = true","import './Arrow.scss'\nimport React, { FC } from 'react'\nimport classNames from 'classnames'\n\ninterface Props {\n from: TalentData\n to: TalentData\n active?: boolean\n}\n\nexport const Arrow: FC = ({ from, to, active = false }) => {\n const length = to.row === from.row \n ? Math.abs(to.col - from.col)\n : to.row - from.row\n\n const props = {\n 'data-col': from.col,\n 'data-row': from.row,\n 'data-length': length,\n }\n\n const className = classNames('arrow', {\n 'arrow--active': active,\n 'arrow--down': to.row > from.row,\n 'arrow--right': to.row === from.row && to.col > from.col,\n 'arrow--left': to.row === from.row && to.col < from.col,\n 'arrow--right-down': to.row === from.row + 1 && to.col === from.col + 1\n })\n\n return
\n}","import React, { useCallback } from 'react'\nimport { Map } from 'immutable'\nimport { TalentSlot } from './TalentSlot';\nimport { getPointsInSpec, canLearnTalent } from '../lib/tree';\nimport { talentsBySpec, specNames, talentsById } from '../data/talents'\nimport { Arrow } from './Arrow'\n\ninterface Props {\n specId: number\n availablePoints: number\n knownTalents: Map\n onTalentPress: TalentClickHandler\n}\n\nexport const TalentTree: React.FC = ({ specId, knownTalents, availablePoints, onTalentPress }) => {\n const talents = Object.values(talentsBySpec[specId])\n\n const handleClick = useCallback(\n (talentId) => onTalentPress(specId, talentId, 1), \n [specId, onTalentPress]\n )\n const handleRightClick = useCallback(\n (talentId) => onTalentPress(specId, talentId, -1), \n [specId, onTalentPress]\n )\n\n const bodyStyle = { \n backgroundImage: `url(/images/specs/${specId}.jpg)`\n }\n\n const arrows = talents\n .filter((talent) => talent.requires.length > 0)\n .map((talent) => {\n return 0 || canLearnTalent(knownTalents, talent)}\n />\n })\n\n return (\n
\n
\n

{specNames[specId]} ({getPointsInSpec(specId, knownTalents)})

\n
\n\n
\n {talents.map((talent) => \n \n )}\n\n {arrows}\n
\n
\n )\n}\n\n;(TalentTree as any).whyDidYouRender = true","import React from 'react'\nimport { Map } from 'immutable'\nimport { TalentTree } from './TalentTree'\nimport { \n modifyTalentPoint, \n calcAvailablePoints,\n encodeKnownTalents\n} from '../lib/tree'\nimport { talentsBySpec } from '../data/talents'\nimport { classByName } from '../data/classes'\nimport { History } from 'history'\n\ninterface Props {\n selectedClass: string\n history: History\n initialTalents?: Map\n}\n\nconst EMPTY_TALENTS = Map()\n // .set(30, 5)\n // .set(26, 5)\n // .set(34, 5)\n // .set(28, 2)\n // .set(27, 3)\n // .set(33, 1)\n // .set(29, 1)\n // .set(32, 1)\n\nexport class Calculator extends React.PureComponent {\n static whyDidYouRender = true\n\n state = {\n knownTalents: EMPTY_TALENTS\n }\n\n componentDidMount() {\n if (this.props.initialTalents) {\n this.setState({ knownTalents: this.props.initialTalents })\n this.updateURL(this.props.initialTalents)\n }\n }\n\n componentDidUpdate(prevProps: Props) {\n if (prevProps.selectedClass !== this.props.selectedClass) {\n this.setState({ \n knownTalents: EMPTY_TALENTS \n })\n }\n }\n\n updateURL(knownTalents: Map) {\n const { selectedClass } = this.props\n const pointString = encodeKnownTalents(knownTalents, selectedClass)\n this.props.history.replace(`/${selectedClass}` + (pointString ? `/${pointString}` : ''))\n }\n \n handleTalentPress = (specId: number, talentId: number, modifier: 1 | -1) => {\n const talent = talentsBySpec[specId][talentId]\n console.log('Clicked talent: ' + talentId)\n\n const newKnownTalents = modifyTalentPoint(this.state.knownTalents, talent, modifier)\n if (newKnownTalents !== this.state.knownTalents) {\n this.updateURL(newKnownTalents)\n }\n this.setState({ knownTalents: newKnownTalents })\n }\n\n render() {\n const { selectedClass } = this.props\n const { knownTalents } = this.state\n\n const classData = classByName[selectedClass]\n const availablePoints = calcAvailablePoints(knownTalents)\n\n return (\n
\n
\n {classData.specs.map((specId) => (\n \n ))}\n
\n\n
\n Points: {availablePoints}\n
\n\n \n
\n )\n }\n}\n\n","import React from 'react'\nimport { Link } from 'react-router-dom'\nimport { classByName } from '../data/classes'\nimport { Icon } from './Icon'\nimport classNames from 'classnames'\n\ninterface Props {\n /** Name of the selected class, lowercase */\n selected?: string\n}\n\nconst classNameForItem = (c: ClassData, selected: string) => classNames('class-picker__class', {\n 'class-picker__class--active': c.name.toLowerCase() === selected,\n 'class-picker__class--inactive': !!selected && c.name.toLowerCase() !== selected\n})\n\nexport class ClassPicker extends React.PureComponent {\n static whyDidYouRender = true\n\n render() {\n const { selected } = this.props\n\n const cn = classNames('class-picker', {\n 'class-picker--has-selection': !!selected\n })\n \n return (\n
    \n {Object.values(classByName).map((c) => \n
  • \n \n \n \n
  • \n )}\n
\n )\n }\n}\n","import React from 'react'\nimport { Calculator } from './Calculator'\nimport { ClassPicker } from './ClassPicker'\nimport { match } from 'react-router-dom'\nimport { RouteComponentProps } from 'react-router'\nimport { decodeKnownTalents } from '../lib/tree'\nimport { classByName } from '../data/classes'\n\ninterface Props extends RouteComponentProps {\n match: match<{ \n selectedClass: string\n pointString: string\n }>\n}\n\nexport class IndexRoute extends React.PureComponent {\n static whyDidYouRender = true\n\n componentDidMount() {\n const { selectedClass } = this.props.match.params\n if (selectedClass && !classByName[selectedClass]) {\n this.props.history.replace('/')\n }\n }\n\n render() {\n const { match, history } = this.props\n const { selectedClass, pointString } = match.params\n\n if (selectedClass && !classByName[selectedClass]) {\n return null\n }\n\n return (\n
\n \n \n {selectedClass && \n \n }\n
\n )\n }\n}","import React from 'react'\nimport './App.scss'\nimport { IndexRoute } from './components/IndexRoute'\nimport { BrowserRouter as Router, Route } from 'react-router-dom'\n\nconst App: React.FC = () => {\n return (\n \n
\n \n
\n
\n );\n}\n\nexport default App;\n","// This optional code is used to register a service worker.\n// register() is not called by default.\n\n// This lets the app load faster on subsequent visits in production, and gives\n// it offline capabilities. However, it also means that developers (and users)\n// will only see deployed updates on subsequent visits to a page, after all the\n// existing tabs open on the page have been closed, since previously cached\n// resources are updated in the background.\n\n// To learn more about the benefits of this model and instructions on how to\n// opt-in, read https://bit.ly/CRA-PWA\n\nconst isLocalhost = Boolean(\n window.location.hostname === 'localhost' ||\n // [::1] is the IPv6 localhost address.\n window.location.hostname === '[::1]' ||\n // 127.0.0.1/8 is considered localhost for IPv4.\n window.location.hostname.match(\n /^127(?:\\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/\n )\n);\n\ntype Config = {\n onSuccess?: (registration: ServiceWorkerRegistration) => void;\n onUpdate?: (registration: ServiceWorkerRegistration) => void;\n};\n\nexport function register(config?: Config) {\n if (process.env.NODE_ENV === 'production' && 'serviceWorker' in navigator) {\n // The URL constructor is available in all browsers that support SW.\n const publicUrl = new URL(\n (process as { env: { [key: string]: string } }).env.PUBLIC_URL,\n window.location.href\n );\n if (publicUrl.origin !== window.location.origin) {\n // Our service worker won't work if PUBLIC_URL is on a different origin\n // from what our page is served on. This might happen if a CDN is used to\n // serve assets; see https://github.com/facebook/create-react-app/issues/2374\n return;\n }\n\n window.addEventListener('load', () => {\n const swUrl = `${process.env.PUBLIC_URL}/service-worker.js`;\n\n if (isLocalhost) {\n // This is running on localhost. Let's check if a service worker still exists or not.\n checkValidServiceWorker(swUrl, config);\n\n // Add some additional logging to localhost, pointing developers to the\n // service worker/PWA documentation.\n navigator.serviceWorker.ready.then(() => {\n console.log(\n 'This web app is being served cache-first by a service ' +\n 'worker. To learn more, visit https://bit.ly/CRA-PWA'\n );\n });\n } else {\n // Is not localhost. Just register service worker\n registerValidSW(swUrl, config);\n }\n });\n }\n}\n\nfunction registerValidSW(swUrl: string, config?: Config) {\n navigator.serviceWorker\n .register(swUrl)\n .then(registration => {\n registration.onupdatefound = () => {\n const installingWorker = registration.installing;\n if (installingWorker == null) {\n return;\n }\n installingWorker.onstatechange = () => {\n if (installingWorker.state === 'installed') {\n if (navigator.serviceWorker.controller) {\n // At this point, the updated precached content has been fetched,\n // but the previous service worker will still serve the older\n // content until all client tabs are closed.\n console.log(\n 'New content is available and will be used when all ' +\n 'tabs for this page are closed. See https://bit.ly/CRA-PWA.'\n );\n\n // Execute callback\n if (config && config.onUpdate) {\n config.onUpdate(registration);\n }\n } else {\n // At this point, everything has been precached.\n // It's the perfect time to display a\n // \"Content is cached for offline use.\" message.\n console.log('Content is cached for offline use.');\n\n // Execute callback\n if (config && config.onSuccess) {\n config.onSuccess(registration);\n }\n }\n }\n };\n };\n })\n .catch(error => {\n console.error('Error during service worker registration:', error);\n });\n}\n\nfunction checkValidServiceWorker(swUrl: string, config?: Config) {\n // Check if the service worker can be found. If it can't reload the page.\n fetch(swUrl)\n .then(response => {\n // Ensure service worker exists, and that we really are getting a JS file.\n const contentType = response.headers.get('content-type');\n if (\n response.status === 404 ||\n (contentType != null && contentType.indexOf('javascript') === -1)\n ) {\n // No service worker found. Probably a different app. Reload the page.\n navigator.serviceWorker.ready.then(registration => {\n registration.unregister().then(() => {\n window.location.reload();\n });\n });\n } else {\n // Service worker found. Proceed as normal.\n registerValidSW(swUrl, config);\n }\n })\n .catch(() => {\n console.log(\n 'No internet connection found. App is running in offline mode.'\n );\n });\n}\n\nexport function unregister() {\n if ('serviceWorker' in navigator) {\n navigator.serviceWorker.ready.then(registration => {\n registration.unregister();\n });\n }\n}\n","import React from 'react'\nimport ReactDOM from 'react-dom'\nimport App from './App'\nimport * as serviceWorker from './serviceWorker'\n\nif (process.env.NODE_ENV !== 'production') {\n const whyDidYouRender = require('@welldone-software/why-did-you-render/dist/no-classes-transpile/umd/whyDidYouRender.min.js')\n whyDidYouRender(React)\n}\n\nReactDOM.render(, document.getElementById('root'))\n\n// If you want your app to work offline and load faster, you can change\n// unregister() to register() below. Note this comes with some pitfalls.\n// Learn more about service workers: https://bit.ly/CRA-PWA\nserviceWorker.unregister()\n"],"sourceRoot":""} \ No newline at end of file diff --git a/static/js/main.3f32f54d.chunk.js b/static/js/main.efad2c29.chunk.js similarity index 86% rename from static/js/main.3f32f54d.chunk.js rename to static/js/main.efad2c29.chunk.js index ffa23e8..90c23b2 100644 --- a/static/js/main.3f32f54d.chunk.js +++ b/static/js/main.efad2c29.chunk.js @@ -1,2 +1,2 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[0],{27:function(r,i,e){r.exports=e(40)},32:function(r,i,e){},33:function(r,i,e){},34:function(r,i,e){},35:function(r,i,e){},40:function(r,i,e){"use strict";e.r(i);var o=e(0),s=e.n(o),n=e(24),l=e.n(n),a=(e(32),e(7)),c=e(8),t=e(10),d=e(9),_=e(11),u=e(14),w=(e(33),e(5)),k=e.n(w),q=(e(34),function(r){var i=r.name,e=r.size,o=void 0===e?"medium":e,n=r.golden,l=void 0!==n&&n,a=r.children,c=k()("icon","icon--".concat(o),{"icon--golden":l}),t={backgroundImage:"url(https://wow.zamimg.com/images/wow/icons/".concat("medium"===o?"large":"medium","/").concat(i,".jpg)")};return s.a.createElement("div",{className:c},s.a.createElement("div",{className:"icon__bg",style:t}),s.a.createElement("div",{className:"icon__frame"}),a)}),p={41:"Fire",61:"Frost",81:"Arcane",161:"Arms",163:"Protection",164:"Fury",181:"Combat",182:"Assassination",183:"Subtlety",201:"Discipline",202:"Holy",203:"Shadow",261:"Elemental",262:"Restoration",263:"Enhancement",281:"Feral Combat",282:"Restoration",283:"Balance",301:"Destruction",302:"Affliction",303:"Demonology",361:"Beast Mastery",362:"Survival",363:"Marksmanship",381:"Retribution",382:"Holy",383:"Protection"},h={41:{26:{id:26,row:0,col:1,icon:"spell_fire_flamebolt",ranks:[11069,12338,12339,12340,12341],requires:[]},30:{id:30,row:0,col:2,icon:"spell_fire_meteorstorm",ranks:[11103,12357,12358,12359,12360],requires:[]},34:{id:34,row:1,col:0,icon:"spell_fire_incinerate",ranks:[11119,11120,12846,12847,12848],requires:[]},28:{id:28,row:1,col:1,icon:"spell_fire_flare",ranks:[11100,12353],requires:[]},27:{id:27,row:1,col:2,icon:"spell_fire_fireball",ranks:[11078,11080,12342],requires:[]},1141:{id:1141,row:2,col:0,icon:"spell_fire_flameshock",ranks:[18459,18460],requires:[]},31:{id:31,row:2,col:1,icon:"spell_fire_selfdestruct",ranks:[11108,12349,12350],requires:[]},29:{id:29,row:2,col:2,icon:"spell_fire_fireball02",ranks:[11366],requires:[]},23:{id:23,row:2,col:3,icon:"spell_fire_fire",ranks:[11083,12351],requires:[]},25:{id:25,row:3,col:0,icon:"spell_fire_soulburn",ranks:[11095,12872,12873],requires:[]},24:{id:24,row:3,col:1,icon:"spell_fire_firearmor",ranks:[11094,13043],requires:[]},1639:{id:1639,row:3,col:3,icon:"spell_fire_masterofelements",ranks:[29074,29075,29076],requires:[]},33:{id:33,row:4,col:1,icon:"spell_nature_wispheal",ranks:[11115,11367,11368],requires:[]},32:{id:32,row:4,col:2,icon:"spell_holy_excorcism_02",ranks:[11113],requires:[{id:29,qty:1}]},35:{id:35,row:5,col:2,icon:"spell_fire_immolation",ranks:[11124,12378,12398,12399,12400],requires:[]},36:{id:36,row:6,col:1,icon:"spell_fire_sealoffire",ranks:[11129],requires:[{id:33,qty:3}]}},61:{70:{id:70,row:0,col:0,icon:"spell_frost_frostward",ranks:[11189,28332],requires:[]},37:{id:37,row:0,col:1,icon:"spell_frost_frostbolt02",ranks:[11070,12473,16763,16765,16766],requires:[]},1649:{id:1649,row:0,col:2,icon:"spell_ice_magicdamage",ranks:[29438,29439,29440],requires:[]},73:{id:73,row:1,col:0,icon:"spell_frost_iceshard",ranks:[11207,12672,15047,15052,15053],requires:[]},38:{id:38,row:1,col:1,icon:"spell_frost_frostarmor",ranks:[11071,12496,12497],requires:[]},62:{id:62,row:1,col:2,icon:"spell_frost_freezingbreath",ranks:[11165,12475],requires:[]},65:{id:65,row:1,col:3,icon:"spell_frost_wisp",ranks:[11175,12569,12571],requires:[]},61:{id:61,row:2,col:0,icon:"spell_frost_frostbolt",ranks:[11151,12952,12953],requires:[]},69:{id:69,row:2,col:1,icon:"spell_frost_wizardmark",ranks:[12472],requires:[]},63:{id:63,row:2,col:3,icon:"spell_frost_icestorm",ranks:[11185,12487,12488],requires:[]},741:{id:741,row:3,col:0,icon:"spell_shadow_darkritual",ranks:[16757,16758],requires:[]},66:{id:66,row:3,col:1,icon:"spell_frost_stun",ranks:[11160,12518,12519],requires:[]},67:{id:67,row:3,col:2,icon:"spell_frost_frostshock",ranks:[11170,12982,12983,12984,12985],requires:[{id:62,qty:2}]},72:{id:72,row:4,col:1,icon:"spell_frost_frost",ranks:[11958],requires:[]},64:{id:64,row:4,col:2,icon:"spell_frost_glacier",ranks:[11190,12489,12490],requires:[]},68:{id:68,row:5,col:2,icon:"spell_frost_chillingblast",ranks:[11180,28592,28593,28594,28595],requires:[]},71:{id:71,row:6,col:1,icon:"spell_ice_lament",ranks:[11426],requires:[{id:72,qty:1}]}},81:{74:{id:74,row:0,col:0,icon:"spell_holy_dispelmagic",ranks:[11210,12592],requires:[]},76:{id:76,row:0,col:1,icon:"spell_holy_devotion",ranks:[11222,12839,12840,12841,12842],requires:[]},80:{id:80,row:0,col:2,icon:"spell_nature_starfall",ranks:[11237,12463,12464,16769,16770],requires:[]},78:{id:78,row:1,col:0,icon:"inv_wand_01",ranks:[6057,6085],requires:[]},1650:{id:1650,row:1,col:1,icon:"spell_nature_astralrecalgroup",ranks:[29441,29444,29445,29446,29447],requires:[]},75:{id:75,row:1,col:2,icon:"spell_shadow_manaburn",ranks:[11213,12574,12575,12576,12577],requires:[]},82:{id:82,row:2,col:0,icon:"spell_nature_abolishmagic",ranks:[11247,12606],requires:[]},81:{id:81,row:2,col:1,icon:"spell_nature_wispsplode",ranks:[11242,12467,12469],requires:[]},85:{id:85,row:2,col:2,icon:"spell_arcane_arcaneresilience",ranks:[28574],requires:[]},83:{id:83,row:3,col:0,icon:"spell_shadow_detectlesserinvisibility",ranks:[11252,12605],requires:[]},88:{id:88,row:3,col:1,icon:"spell_frost_iceshock",ranks:[11255,12598],requires:[]},1142:{id:1142,row:3,col:3,icon:"spell_shadow_siphonmana",ranks:[18462,18463,18464],requires:[]},86:{id:86,row:4,col:1,icon:"spell_nature_enchantarmor",ranks:[12043],requires:[]},77:{id:77,row:4,col:2,icon:"spell_shadow_charm",ranks:[11232,12500,12501,12502,12503],requires:[{id:85,qty:1}]},421:{id:421,row:5,col:1,icon:"spell_shadow_teleport",ranks:[15058,15059,15060],requires:[{id:86,qty:1}]},87:{id:87,row:6,col:1,icon:"spell_nature_lightning",ranks:[12042],requires:[{id:421,qty:3}]}},161:{124:{id:124,row:0,col:0,icon:"ability_rogue_ambush",ranks:[12282,12663,12664],requires:[]},130:{id:130,row:0,col:1,icon:"ability_parry",ranks:[16462,16463,16464,16465,16466],requires:[]},127:{id:127,row:0,col:2,icon:"ability_gouge",ranks:[12286,12658,12659],requires:[]},126:{id:126,row:1,col:0,icon:"ability_warrior_charge",ranks:[12285,12697],requires:[]},641:{id:641,row:1,col:1,icon:"spell_nature_enchantarmor",ranks:[12295,12676,12677,12678,12679],requires:[]},128:{id:128,row:1,col:3,icon:"ability_thunderclap",ranks:[12287,12665,12666],requires:[]},131:{id:131,row:2,col:0,icon:"inv_sword_05",ranks:[12290,12963],requires:[]},137:{id:137,row:2,col:1,icon:"spell_holy_blessingofstamina",ranks:[12296],requires:[{id:641,qty:5}]},121:{id:121,row:2,col:2,icon:"ability_backstab",ranks:[12834,12849,12867],requires:[{id:127,qty:3}]},136:{id:136,row:3,col:1,icon:"inv_axe_09",ranks:[12163,12711,12712,12713,12714],requires:[]},662:{id:662,row:3,col:2,icon:"ability_searingarrow",ranks:[16493,16494],requires:[{id:121,qty:3}]},132:{id:132,row:4,col:0,icon:"inv_axe_06",ranks:[12700,12781,12783,12784,12785],requires:[]},133:{id:133,row:4,col:1,icon:"ability_rogue_slicedice",ranks:[12292],requires:[]},125:{id:125,row:4,col:2,icon:"inv_mace_01",ranks:[12284,12701,12702,12703,12704],requires:[]},123:{id:123,row:4,col:3,icon:"inv_sword_27",ranks:[12281,12812,12813,12814,12815],requires:[]},134:{id:134,row:5,col:0,icon:"inv_weapon_halbard_01",ranks:[12165,12830,12831,12832,12833],requires:[]},129:{id:129,row:5,col:2,icon:"ability_shockwave",ranks:[12289,12668,23695],requires:[]},135:{id:135,row:6,col:1,icon:"ability_warrior_savageblow",ranks:[12294],requires:[{id:133,qty:1}]}},163:{1601:{id:1601,row:0,col:1,icon:"inv_shield_06",ranks:[12298,12724,12725,12726,12727],requires:[]},138:{id:138,row:0,col:2,icon:"spell_nature_mirrorimage",ranks:[12297,12750,12751,12752,12753],requires:[]},142:{id:142,row:1,col:0,icon:"ability_racial_bloodrage",ranks:[12301,12818],requires:[]},140:{id:140,row:1,col:2,icon:"spell_holy_devotion",ranks:[12299,12761,12762,12763,12764],requires:[]},141:{id:141,row:1,col:3,icon:"spell_magic_magearmor",ranks:[12300,12959,12960,12961,12962],requires:[]},153:{id:153,row:2,col:0,icon:"spell_holy_ashestoashes",ranks:[12975],requires:[{id:142,qty:2}]},145:{id:145,row:2,col:1,icon:"ability_defend",ranks:[12945,12307,12944],requires:[{id:1601,qty:5}]},147:{id:147,row:2,col:2,icon:"ability_warrior_revenge",ranks:[12797,12799,12800],requires:[]},144:{id:144,row:2,col:3,icon:"ability_warrior_innerrage",ranks:[12303,12788,12789,12791,12792],requires:[]},146:{id:146,row:3,col:0,icon:"ability_warrior_sunder",ranks:[12308,12810,12811],requires:[]},151:{id:151,row:3,col:1,icon:"ability_warrior_disarm",ranks:[12313,12804,12807],requires:[]},143:{id:143,row:3,col:2,icon:"spell_nature_reincarnation",ranks:[12302,12765],requires:[]},150:{id:150,row:4,col:0,icon:"ability_warrior_shieldwall",ranks:[12312,12803],requires:[]},152:{id:152,row:4,col:1,icon:"ability_thunderbolt",ranks:[12809],requires:[]},149:{id:149,row:4,col:2,icon:"ability_warrior_shieldbash",ranks:[12311,12958],requires:[]},702:{id:702,row:5,col:2,icon:"inv_sword_20",ranks:[16538,16539,16540,16541,16542],requires:[]},148:{id:148,row:6,col:1,icon:"inv_shield_05",ranks:[23922],requires:[{id:152,qty:1}]}},164:{158:{id:158,row:0,col:1,icon:"spell_nature_purge",ranks:[12321,12835,12836,12837,12838],requires:[]},157:{id:157,row:0,col:2,icon:"ability_rogue_eviscerate",ranks:[12320,12852,12853,12855,12856],requires:[]},161:{id:161,row:1,col:1,icon:"ability_warrior_warcry",ranks:[12324,12876,12877,12878,12879],requires:[]},159:{id:159,row:1,col:2,icon:"spell_nature_stoneclawtotem",ranks:[12322,12999,13e3,13001,13002],requires:[]},166:{id:166,row:2,col:0,icon:"ability_warrior_cleave",ranks:[12329,12950,20496],requires:[]},160:{id:160,row:2,col:1,icon:"spell_shadow_deathscream",ranks:[12323],requires:[]},661:{id:661,row:2,col:2,icon:"spell_shadow_summonimp",ranks:[16487,16489,16492],requires:[]},154:{id:154,row:2,col:3,icon:"ability_warrior_battleshout",ranks:[12318,12857,12858,12860,12861],requires:[]},1581:{id:1581,row:3,col:0,icon:"ability_dualwield",ranks:[23584,23585,23586,23587,23588],requires:[]},1542:{id:1542,row:3,col:1,icon:"inv_sword_48",ranks:[20502,20503],requires:[]},155:{id:155,row:3,col:2,icon:"spell_shadow_unholyfrenzy",ranks:[12317,13045,13046,13047,13048],requires:[]},168:{id:168,row:4,col:0,icon:"ability_warrior_decisivestrike",ranks:[12862,12330,20497,20498,20499],requires:[]},165:{id:165,row:4,col:1,icon:"spell_shadow_deathpact",ranks:[12328],requires:[]},1543:{id:1543,row:4,col:3,icon:"ability_rogue_sprint",ranks:[20504,20505],requires:[]},1541:{id:1541,row:5,col:0,icon:"spell_nature_ancestralguardian",ranks:[20500,20501],requires:[]},156:{id:156,row:5,col:2,icon:"ability_ghoulfrenzy",ranks:[12319,12971,12972,12973,12974],requires:[{id:155,qty:5}]},167:{id:167,row:6,col:1,icon:"spell_nature_bloodlust",ranks:[23881],requires:[{id:165,qty:1}]}},181:{203:{id:203,row:0,col:0,icon:"ability_gouge",ranks:[13741,13793,13792],requires:[]},201:{id:201,row:0,col:1,icon:"spell_shadow_ritualofsacrifice",ranks:[13732,13863],requires:[]},186:{id:186,row:0,col:2,icon:"spell_nature_invisibilty",ranks:[13712,13788,13789,13790,13791],requires:[]},202:{id:202,row:1,col:0,icon:"ability_backstab",ranks:[13733,13865,13866],requires:[]},187:{id:187,row:1,col:1,icon:"ability_parry",ranks:[13713,13853,13854,13855,13856],requires:[]},181:{id:181,row:1,col:2,icon:"ability_marksmanship",ranks:[13705,13832,13843,13844,13845],requires:[]},204:{id:204,row:2,col:0,icon:"spell_shadow_shadowward",ranks:[13742,13872],requires:[]},301:{id:301,row:2,col:1,icon:"ability_warrior_challange",ranks:[14251],requires:[{id:187,qty:5}]},222:{id:222,row:2,col:3,icon:"ability_rogue_sprint",ranks:[13743,13875],requires:[]},206:{id:206,row:3,col:0,icon:"ability_kick",ranks:[13754,13867],requires:[]},182:{id:182,row:3,col:1,icon:"inv_weapon_shortblade_05",ranks:[13706,13804,13805,13806,13807],requires:[]},221:{id:221,row:3,col:2,icon:"ability_dualwield",ranks:[13715,13848,13849,13851,13852],requires:[{id:181,qty:5}]},184:{id:184,row:4,col:0,icon:"inv_mace_01",ranks:[13709,13800,13801,13802,13803],requires:[]},223:{id:223,row:4,col:1,icon:"ability_warrior_punishingblow",ranks:[13877],requires:[]},242:{id:242,row:4,col:2,icon:"inv_sword_27",ranks:[13960,13961,13962,13963,13964],requires:[]},183:{id:183,row:4,col:3,icon:"inv_gauntlets_04",ranks:[13707,13966,13967,13968,13969],requires:[]},1703:{id:1703,row:5,col:1,icon:"spell_holy_blessingofstrength",ranks:[30919,30920],requires:[{id:223,qty:1}]},1122:{id:1122,row:5,col:2,icon:"ability_racial_avatar",ranks:[18427,18428,18429],requires:[]},205:{id:205,row:6,col:1,icon:"spell_shadow_shadowworddominate",ranks:[13750],requires:[]}},182:{276:{id:276,row:0,col:0,icon:"ability_rogue_eviscerate",ranks:[14162,14163,14164],requires:[]},272:{id:272,row:0,col:1,icon:"ability_fiegndead",ranks:[14144,14148],requires:[]},270:{id:270,row:0,col:2,icon:"ability_racial_bloodrage",ranks:[14138,14139,14140,14141,14142],requires:[]},273:{id:273,row:1,col:0,icon:"ability_druid_disembowel",ranks:[14156,14160,14161],requires:[]},274:{id:274,row:1,col:1,icon:"spell_shadow_deathscream",ranks:[14158,14159],requires:[]},277:{id:277,row:1,col:3,icon:"ability_rogue_slicedice",ranks:[14165,14166,14167],requires:[]},281:{id:281,row:2,col:0,icon:"ability_warrior_decisivestrike",ranks:[14179],requires:[]},278:{id:278,row:2,col:1,icon:"ability_warrior_riposte",ranks:[14168,14169],requires:[]},269:{id:269,row:2,col:2,icon:"ability_criticalstrike",ranks:[14128,14132,14135,14136,14137],requires:[{id:270,qty:5}]},682:{id:682,row:3,col:1,icon:"ability_rogue_feigndeath",ranks:[16513,16514,16515,16719,16720],requires:[]},268:{id:268,row:3,col:2,icon:"ability_poisons",ranks:[14113,14114,14115,14116,14117],requires:[]},280:{id:280,row:4,col:1,icon:"spell_ice_lament",ranks:[14177],requires:[]},279:{id:279,row:4,col:2,icon:"ability_rogue_kidneyshot",ranks:[14174,14175,14176],requires:[]},283:{id:283,row:5,col:1,icon:"spell_shadow_chilltouch",ranks:[14186,14190,14193,14194,14195],requires:[{id:280,qty:1}]},382:{id:382,row:6,col:1,icon:"spell_nature_earthbindtotem",ranks:[14983],requires:[]}},183:{241:{id:241,row:0,col:1,icon:"spell_shadow_charm",ranks:[13958,13970,13971,13972,13973],requires:[]},261:{id:261,row:0,col:2,icon:"ability_warrior_warcry",ranks:[14057,14072,14073,14074,14075],requires:[]},1700:{id:1700,row:1,col:0,icon:"ability_rogue_feint",ranks:[30892,30893],requires:[]},247:{id:247,row:1,col:1,icon:"spell_magic_lesserinvisibilty",ranks:[13981,14066],requires:[]},244:{id:244,row:1,col:2,icon:"ability_stealth",ranks:[13975,14062,14063,14064,14065],requires:[]},245:{id:245,row:2,col:0,icon:"spell_shadow_fumble",ranks:[13976,13979,13980],requires:[]},303:{id:303,row:2,col:1,icon:"spell_shadow_curse",ranks:[14278],requires:[]},263:{id:263,row:2,col:2,icon:"ability_rogue_ambush",ranks:[14079,14080,14081],requires:[]},246:{id:246,row:3,col:0,icon:"spell_nature_mirrorimage",ranks:[13983,14070,14071],requires:[]},262:{id:262,row:3,col:1,icon:"ability_sap",ranks:[14076,14094,14095],requires:[]},1123:{id:1123,row:3,col:2,icon:"inv_sword_17",ranks:[14171,14172,14173],requires:[]},1701:{id:1701,row:4,col:0,icon:"ability_ambush",ranks:[30894,30895],requires:[]},284:{id:284,row:4,col:1,icon:"spell_shadow_antishadow",ranks:[14185],requires:[]},265:{id:265,row:4,col:2,icon:"spell_shadow_summonsuccubus",ranks:[14082,14083],requires:[]},681:{id:681,row:4,col:3,icon:"spell_shadow_lifedrain",ranks:[16511],requires:[{id:1123,qty:3}]},1702:{id:1702,row:5,col:2,icon:"inv_weapon_crossbow_11",ranks:[30902,30903,30904,30905,30906],requires:[]},381:{id:381,row:6,col:1,icon:"spell_shadow_possession",ranks:[14183],requires:[{id:284,qty:1}]}},201:{342:{id:342,row:0,col:1,icon:"spell_magic_magearmor",ranks:[14522,14788,14789,14790,14791],requires:[]},345:{id:345,row:0,col:2,icon:"inv_wand_01",ranks:[14524,14525,14526,14527,14528],requires:[]},352:{id:352,row:1,col:0,icon:"spell_nature_manaregentotem",ranks:[14523,14784,14785,14786,14787],requires:[]},344:{id:344,row:1,col:1,icon:"spell_holy_wordfortitude",ranks:[14749,14767],requires:[]},343:{id:343,row:1,col:2,icon:"spell_holy_powerwordshield",ranks:[14748,14768,14769],requires:[]},321:{id:321,row:1,col:3,icon:"spell_nature_tranquility",ranks:[14531,14774],requires:[]},348:{id:348,row:2,col:1,icon:"spell_frost_windwalkon",ranks:[14751],requires:[]},347:{id:347,row:2,col:2,icon:"spell_nature_sleep",ranks:[14521,14776,14777],requires:[]},346:{id:346,row:3,col:0,icon:"spell_holy_innerfire",ranks:[14747,14770,14771],requires:[]},341:{id:341,row:3,col:1,icon:"ability_hibernation",ranks:[14520,14780,14781,14782,14783],requires:[]},350:{id:350,row:3,col:3,icon:"spell_shadow_manaburn",ranks:[14750,14772],requires:[]},1201:{id:1201,row:4,col:1,icon:"spell_nature_enchantarmor",ranks:[18551,18552,18553,18554,18555],requires:[]},351:{id:351,row:4,col:2,icon:"spell_holy_divinespirit",ranks:[14752],requires:[{id:347,qty:3}]},1202:{id:1202,row:5,col:2,icon:"spell_nature_slowingtotem",ranks:[18544,18547,18548,18549,18550],requires:[]},322:{id:322,row:6,col:1,icon:"spell_holy_powerinfusion",ranks:[10060],requires:[{id:1201,qty:5}]}},202:{410:{id:410,row:0,col:0,icon:"spell_holy_healingfocus",ranks:[14913,15012],requires:[]},406:{id:406,row:0,col:1,icon:"spell_holy_renew",ranks:[14908,15020,17191],requires:[]},401:{id:401,row:0,col:2,icon:"spell_holy_sealofsalvation",ranks:[14889,15008,15009,15010,15011],requires:[]},411:{id:411,row:1,col:1,icon:"spell_holy_spellwarding",ranks:[27900,27901,27902,27903,27904],requires:[]},1181:{id:1181,row:1,col:2,icon:"spell_holy_sealofwrath",ranks:[18530,18531,18533,18534,18535],requires:[]},442:{id:442,row:2,col:0,icon:"spell_holy_holynova",ranks:[15237],requires:[]},1636:{id:1636,row:2,col:1,icon:"spell_holy_blessedrecovery",ranks:[27811,27815,27816],requires:[]},361:{id:361,row:2,col:3,icon:"spell_holy_layonhands",ranks:[14892,15362,15363],requires:[]},1635:{id:1635,row:3,col:0,icon:"spell_holy_purify",ranks:[27789,27790],requires:[]},408:{id:408,row:3,col:1,icon:"spell_holy_heal02",ranks:[14912,15013,15014],requires:[]},403:{id:403,row:3,col:2,icon:"spell_holy_searinglightpriest",ranks:[14909,15017],requires:[{id:1181,qty:5}]},413:{id:413,row:4,col:0,icon:"spell_holy_prayerofhealing02",ranks:[14911,15018],requires:[]},1561:{id:1561,row:4,col:1,icon:"inv_enchant_essenceeternallarge",ranks:[20711],requires:[]},402:{id:402,row:4,col:2,icon:"spell_holy_spiritualguidence",ranks:[14901,15028,15029,15030,15031],requires:[]},404:{id:404,row:5,col:2,icon:"spell_nature_moonglow",ranks:[14898,15349,15354,15355,15356],requires:[]},1637:{id:1637,row:6,col:1,icon:"spell_holy_summonlightwell",ranks:[724],requires:[{id:1561,qty:1}]}},203:{465:{id:465,row:0,col:1,icon:"spell_shadow_requiem",ranks:[15270,15335,15336,15337,15338],requires:[]},464:{id:464,row:0,col:2,icon:"spell_shadow_gathershadows",ranks:[15268,15323,15324,15325,15326],requires:[]},466:{id:466,row:1,col:0,icon:"spell_shadow_shadowward",ranks:[15318,15272,15320],requires:[]},482:{id:482,row:1,col:1,icon:"spell_shadow_shadowwordpain",ranks:[15275,15317],requires:[]},463:{id:463,row:1,col:2,icon:"spell_shadow_burningspirit",ranks:[15260,15327,15328,15329,15330],requires:[]},542:{id:542,row:2,col:0,icon:"spell_shadow_psychicscream",ranks:[15392,15448],requires:[]},481:{id:481,row:2,col:1,icon:"spell_shadow_unholyfrenzy",ranks:[15273,15312,15313,15314,15316],requires:[]},501:{id:501,row:2,col:2,icon:"spell_shadow_siphonmana",ranks:[15407],requires:[]},483:{id:483,row:3,col:1,icon:"spell_magic_lesserinvisibilty",ranks:[15274,15311],requires:[]},881:{id:881,row:3,col:2,icon:"spell_shadow_chilltouch",ranks:[17322,17323,17325],requires:[]},461:{id:461,row:3,col:3,icon:"spell_shadow_blackplague",ranks:[15257,15331,15332,15333,15334],requires:[]},541:{id:541,row:4,col:0,icon:"spell_shadow_impphaseshift",ranks:[15487],requires:[{id:542,qty:2}]},484:{id:484,row:4,col:1,icon:"spell_shadow_unsummonbuilding",ranks:[15286],requires:[]},1638:{id:1638,row:4,col:2,icon:"spell_shadow_improvedvampiricembrace",ranks:[27839,27840],requires:[{id:484,qty:1}]},462:{id:462,row:5,col:2,icon:"spell_shadow_twilight",ranks:[15259,15307,15308,15309,15310],requires:[]},521:{id:521,row:6,col:1,icon:"spell_shadow_shadowform",ranks:[15473],requires:[{id:484,qty:1}]}},261:{564:{id:564,row:0,col:1,icon:"spell_nature_wispsplode",ranks:[16039,16109,16110,16111,16112],requires:[]},563:{id:563,row:0,col:2,icon:"spell_fire_fireball",ranks:[16035,16105,16106,16107,16108],requires:[]},572:{id:572,row:1,col:0,icon:"spell_nature_stoneclawtotem",ranks:[16043,16130],requires:[]},1640:{id:1640,row:1,col:1,icon:"spell_nature_spiritarmor",ranks:[28996,28997,28998],requires:[]},561:{id:561,row:1,col:2,icon:"spell_fire_immolation",ranks:[16038,16160,16161],requires:[]},574:{id:574,row:2,col:0,icon:"spell_shadow_manaburn",ranks:[16164],requires:[]},575:{id:575,row:2,col:1,icon:"spell_frost_frostward",ranks:[16040,16113,16114,16115,16116],requires:[]},562:{id:562,row:2,col:2,icon:"spell_nature_callstorm",ranks:[16041,16117,16118,16119,16120],requires:[]},567:{id:567,row:3,col:0,icon:"spell_fire_sealoffire",ranks:[16086,16544],requires:[]},1642:{id:1642,row:3,col:1,icon:"spell_nature_eyeofthestorm",ranks:[29062,29064,29065],requires:[]},1645:{id:1645,row:3,col:3,icon:"spell_fire_elementaldevastation",ranks:[30160,29179,29180],requires:[]},1641:{id:1641,row:4,col:0,icon:"spell_nature_stormreach",ranks:[28999,29e3],requires:[]},565:{id:565,row:4,col:1,icon:"spell_fire_volcano",ranks:[16089],requires:[]},721:{id:721,row:5,col:2,icon:"spell_lightning_lightningbolt01",ranks:[16578,16579,16580,16581,16582],requires:[{id:562,qty:5}]},573:{id:573,row:6,col:1,icon:"spell_nature_wispheal",ranks:[16166],requires:[{id:565,qty:1}]}},262:{586:{id:586,row:0,col:1,icon:"spell_nature_magicimmunity",ranks:[16182,16226,16227,16228,16229],requires:[]},593:{id:593,row:0,col:2,icon:"spell_frost_manarecharge",ranks:[16179,16214,16215,16216,16217],requires:[]},589:{id:589,row:1,col:0,icon:"spell_nature_reincarnation",ranks:[16184,16209],requires:[]},581:{id:581,row:1,col:1,icon:"spell_nature_undyingstrength",ranks:[16176,16235,16240],requires:[]},595:{id:595,row:1,col:2,icon:"spell_nature_moonglow",ranks:[16173,16222,16223,16224,16225],requires:[]},583:{id:583,row:2,col:0,icon:"spell_frost_stun",ranks:[16180,16196,16198],requires:[]},587:{id:587,row:2,col:1,icon:"spell_nature_healingwavelesser",ranks:[16181,16230,16232,16233,16234],requires:[]},582:{id:582,row:2,col:2,icon:"spell_nature_nullward",ranks:[16189],requires:[]},1646:{id:1646,row:2,col:3,icon:"spell_nature_healingtouch",ranks:[29187,29189,29191],requires:[]},588:{id:588,row:3,col:1,icon:"spell_nature_manaregentotem",ranks:[16187,16205,16206,16207,16208],requires:[]},594:{id:594,row:3,col:2,icon:"spell_nature_tranquility",ranks:[16194,16218,16219,16220,16221],requires:[]},1648:{id:1648,row:4,col:0,icon:"spell_nature_healingway",ranks:[29206,29205,29202],requires:[]},591:{id:591,row:4,col:2,icon:"spell_nature_ravenform",ranks:[16188],requires:[]},592:{id:592,row:5,col:2,icon:"spell_frost_wizardmark",ranks:[16178,16210,16211,16212,16213],requires:[]},590:{id:590,row:6,col:1,icon:"spell_frost_summonwaterelemental",ranks:[16190],requires:[{id:588,qty:5}]}},263:{614:{id:614,row:0,col:1,icon:"spell_shadow_grimward",ranks:[17485,17486,17487,17488,17489],requires:[]},612:{id:612,row:0,col:2,icon:"inv_shield_06",ranks:[16253,16298,16299,16300,16301],requires:[]},609:{id:609,row:1,col:0,icon:"spell_nature_stoneskintotem",ranks:[16258,16293],requires:[]},613:{id:613,row:1,col:1,icon:"ability_thunderbolt",ranks:[16255,16302,16303,16304,16305],requires:[]},605:{id:605,row:1,col:2,icon:"spell_nature_spiritwolf",ranks:[16262,16287],requires:[]},607:{id:607,row:1,col:3,icon:"spell_nature_lightningshield",ranks:[16261,16290,16291],requires:[]},610:{id:610,row:2,col:0,icon:"spell_nature_earthbindtotem",ranks:[16259,16295],requires:[]},617:{id:617,row:2,col:2,icon:"inv_axe_10",ranks:[16269],requires:[]},601:{id:601,row:2,col:3,icon:"spell_nature_mirrorimage",ranks:[16254,16271,16272,16273,16274],requires:[]},602:{id:602,row:3,col:1,icon:"ability_ghoulfrenzy",ranks:[16256,16281,16282,16283,16284],requires:[{id:613,qty:5}]},615:{id:615,row:3,col:2,icon:"spell_holy_devotion",ranks:[16252,16306,16307,16308,16309],requires:[]},1647:{id:1647,row:4,col:0,icon:"spell_fire_enchantweapon",ranks:[29192,29193],requires:[]},611:{id:611,row:4,col:1,icon:"spell_fire_flametounge",ranks:[16266,29079,29080],requires:[]},616:{id:616,row:4,col:2,icon:"ability_parry",ranks:[16268],requires:[]},1643:{id:1643,row:5,col:2,icon:"ability_hunter_swiftstrike",ranks:[29082,29084,29086,29087,29088],requires:[]},901:{id:901,row:6,col:1,icon:"spell_holy_sealofmight",ranks:[17364],requires:[{id:611,qty:3}]}},281:{796:{id:796,row:0,col:1,icon:"ability_hunter_pet_hyena",ranks:[16934,16935,16936,16937,16938],requires:[]},795:{id:795,row:0,col:2,icon:"ability_druid_demoralizingroar",ranks:[16858,16859,16860,16861,16862],requires:[]},799:{id:799,row:1,col:0,icon:"ability_ambush",ranks:[16947,16948,16949,16950,16951],requires:[]},797:{id:797,row:1,col:1,icon:"ability_druid_bash",ranks:[16940,16941],requires:[]},794:{id:794,row:1,col:2,icon:"inv_misc_pelt_bear_03",ranks:[16929,16930,16931,16932,16933],requires:[]},807:{id:807,row:2,col:0,icon:"spell_nature_spiritwolf",ranks:[17002,24866],requires:[]},804:{id:804,row:2,col:1,icon:"ability_hunter_pet_bear",ranks:[16979],requires:[]},798:{id:798,row:2,col:2,icon:"inv_misc_monsterclaw_04",ranks:[16942,16943,16944],requires:[]},802:{id:802,row:3,col:0,icon:"spell_shadow_vampiricaura",ranks:[16966,16968],requires:[]},803:{id:803,row:3,col:1,icon:"ability_hunter_pet_cat",ranks:[16972,16974,16975],requires:[]},800:{id:800,row:3,col:2,icon:"ability_ghoulfrenzy",ranks:[16952,16954],requires:[{id:798,qty:3}]},801:{id:801,row:3,col:3,icon:"ability_racial_cannibalize",ranks:[16958,16961],requires:[{id:798,qty:3}]},805:{id:805,row:4,col:0,icon:"ability_druid_ravage",ranks:[16998,16999],requires:[]},1162:{id:1162,row:4,col:2,icon:"spell_nature_faeriefire",ranks:[16857],requires:[]},808:{id:808,row:5,col:1,icon:"spell_holy_blessingofagility",ranks:[17003,17004,17005,17006,24894],requires:[{id:803,qty:3}]},809:{id:809,row:6,col:1,icon:"spell_nature_unyeildingstamina",ranks:[17007],requires:[]}},282:{821:{id:821,row:0,col:1,icon:"spell_nature_regeneration",ranks:[17050,17051,17053,17054,17055],requires:[]},822:{id:822,row:0,col:2,icon:"spell_holy_blessingofstamina",ranks:[17056,17058,17059,17060,17061],requires:[]},824:{id:824,row:1,col:0,icon:"spell_nature_healingtouch",ranks:[17069,17070,17071,17072,17073],requires:[]},823:{id:823,row:1,col:1,icon:"spell_nature_healingwavegreater",ranks:[17063,17065,17066,17067,17068],requires:[]},826:{id:826,row:1,col:2,icon:"ability_druid_enrage",ranks:[17079,17082],requires:[]},829:{id:829,row:2,col:1,icon:"spell_frost_windwalkon",ranks:[17106,17107,17108],requires:[]},827:{id:827,row:2,col:2,icon:"spell_nature_insectswarm",ranks:[5570],requires:[]},841:{id:841,row:2,col:3,icon:"ability_eyeoftheowl",ranks:[17118,17119,17120,17121,17122],requires:[]},843:{id:843,row:3,col:1,icon:"spell_holy_elunesgrace",ranks:[24968,24969,24970,24971,24972],requires:[]},830:{id:830,row:3,col:3,icon:"spell_nature_rejuvenation",ranks:[17111,17112,17113],requires:[]},831:{id:831,row:4,col:0,icon:"spell_nature_ravenform",ranks:[17116],requires:[{id:824,qty:5}]},828:{id:828,row:4,col:2,icon:"spell_nature_protectionformnature",ranks:[17104,24943,24944,24945,24946],requires:[{id:827,qty:1}]},842:{id:842,row:4,col:3,icon:"spell_nature_tranquility",ranks:[17123,17124],requires:[]},825:{id:825,row:5,col:2,icon:"spell_nature_resistnature",ranks:[17074,17075,17076,17077,17078],requires:[]},844:{id:844,row:6,col:1,icon:"inv_relics_idolofrejuvenation",ranks:[18562],requires:[{id:843,qty:5}]}},283:{762:{id:762,row:0,col:0,icon:"spell_nature_abolishmagic",ranks:[16814,16815,16816,16817,16818],requires:[]},761:{id:761,row:0,col:1,icon:"spell_nature_natureswrath",ranks:[16689],requires:[]},921:{id:921,row:0,col:2,icon:"spell_nature_natureswrath",ranks:[17245,17247,17248,17249],requires:[{id:761,qty:1}]},787:{id:787,row:1,col:0,icon:"spell_nature_stranglevines",ranks:[16918,16919,16920],requires:[]},763:{id:763,row:1,col:1,icon:"spell_nature_starfall",ranks:[16821,16822,16823,16824,16825],requires:[]},791:{id:791,row:1,col:2,icon:"inv_staff_01",ranks:[16902,16903,16904,16905,16906],requires:[]},781:{id:781,row:1,col:3,icon:"spell_nature_wispsplode",ranks:[16833,16834,16835],requires:[]},782:{id:782,row:2,col:0,icon:"spell_nature_thorns",ranks:[16836,16839,16840],requires:[]},788:{id:788,row:2,col:2,icon:"spell_nature_crystalball",ranks:[16864],requires:[{id:791,qty:5}]},764:{id:764,row:2,col:3,icon:"spell_nature_naturetouchgrow",ranks:[16819,16820],requires:[]},792:{id:792,row:3,col:1,icon:"spell_nature_purge",ranks:[16909,16910,16911,16912,16913],requires:[{id:763,qty:5}]},784:{id:784,row:3,col:2,icon:"spell_arcane_starfire",ranks:[16850,16923,16924,16925,16926],requires:[]},789:{id:789,row:4,col:1,icon:"spell_nature_naturesblessing",ranks:[16880],requires:[]},783:{id:783,row:4,col:2,icon:"spell_nature_sentinal",ranks:[16845,16846,16847],requires:[]},790:{id:790,row:5,col:1,icon:"spell_nature_moonglow",ranks:[16896,16897,16899,16900,16901],requires:[{id:789,qty:1}]},793:{id:793,row:6,col:1,icon:"spell_nature_forceofnature",ranks:[24858],requires:[]}},301:{944:{id:944,row:0,col:1,icon:"spell_shadow_shadowbolt",ranks:[17793,17796,17801,17802,17803],requires:[]},941:{id:941,row:0,col:2,icon:"spell_fire_windsofwoe",ranks:[17778,17779,17780,17781,17782],requires:[]},943:{id:943,row:1,col:1,icon:"spell_shadow_deathpact",ranks:[17788,17789,17790,17791,17792],requires:[]},982:{id:982,row:1,col:2,icon:"spell_fire_fire",ranks:[18119,18120,18121,18122,18123],requires:[]},983:{id:983,row:2,col:0,icon:"spell_fire_firebolt",ranks:[18126,18127],requires:[]},984:{id:984,row:2,col:1,icon:"spell_shadow_curse",ranks:[18128,18129],requires:[]},981:{id:981,row:2,col:2,icon:"spell_fire_flameshock",ranks:[18130,18131,18132,18133,18134],requires:[]},963:{id:963,row:2,col:3,icon:"spell_shadow_scourgebuild",ranks:[17877],requires:[]},985:{id:985,row:3,col:0,icon:"spell_fire_lavaspawn",ranks:[18135,18136],requires:[]},964:{id:964,row:3,col:1,icon:"spell_shadow_corpseexplode",ranks:[17917,17918],requires:[]},965:{id:965,row:3,col:3,icon:"spell_fire_soulburn",ranks:[17927,17929,17930,17931,17932],requires:[]},986:{id:986,row:4,col:0,icon:"spell_fire_volcano",ranks:[18096,18073],requires:[{id:985,qty:2}]},961:{id:961,row:4,col:1,icon:"spell_fire_immolation",ranks:[17815,17833,17834,17835,17836],requires:[]},967:{id:967,row:4,col:2,icon:"spell_shadow_shadowwordpain",ranks:[17959],requires:[{id:981,qty:5}]},966:{id:966,row:5,col:2,icon:"spell_fire_selfdestruct",ranks:[17954,17955,17956,17957,17958],requires:[]},968:{id:968,row:6,col:1,icon:"spell_fire_fireball",ranks:[17962],requires:[{id:961,qty:5}]}},302:{1005:{id:1005,row:0,col:1,icon:"spell_shadow_unsummonbuilding",ranks:[18174,18175,18176,18177,18178],requires:[]},1003:{id:1003,row:0,col:2,icon:"spell_shadow_abominationexplosion",ranks:[17810,17811,17812,17813,17814],requires:[]},1006:{id:1006,row:1,col:0,icon:"spell_shadow_curseofmannoroth",ranks:[18179,18180,18181],requires:[]},1101:{id:1101,row:1,col:1,icon:"spell_shadow_haunting",ranks:[18213,18372],requires:[]},1007:{id:1007,row:1,col:2,icon:"spell_shadow_burningspirit",ranks:[18182,18183],requires:[]},1004:{id:1004,row:1,col:3,icon:"spell_shadow_lifedrain02",ranks:[17804,17805,17806,17807,17808],requires:[]},1284:{id:1284,row:2,col:0,icon:"spell_shadow_curseofsargeras",ranks:[18827,18829,18830],requires:[]},1001:{id:1001,row:2,col:1,icon:"spell_shadow_fingerofdeath",ranks:[17783,17784,17785,17786,17787],requires:[]},1061:{id:1061,row:2,col:2,icon:"spell_shadow_contagion",ranks:[18288],requires:[]},1021:{id:1021,row:3,col:0,icon:"spell_shadow_callofbone",ranks:[18218,18219],requires:[]},1002:{id:1002,row:3,col:1,icon:"spell_shadow_twilight",ranks:[18094,18095],requires:[]},1121:{id:1121,row:3,col:3,icon:"spell_shadow_siphonmana",ranks:[17864,18393],requires:[]},1041:{id:1041,row:4,col:1,icon:"spell_shadow_requiem",ranks:[18265],requires:[]},1081:{id:1081,row:4,col:2,icon:"spell_shadow_grimward",ranks:[18223],requires:[{id:1061,qty:1}]},1082:{id:1082,row:4,col:3,icon:"spell_shadow_grimward",ranks:[18310,18311,18312,18313],requires:[{id:1081,qty:1}]},1042:{id:1042,row:5,col:1,icon:"spell_shadow_shadetruesight",ranks:[18271,18272,18273,18274,18275],requires:[{id:1041,qty:1}]},1022:{id:1022,row:6,col:1,icon:"spell_shadow_darkritual",ranks:[18220],requires:[]}},303:{1221:{id:1221,row:0,col:0,icon:"inv_stone_04",ranks:[18692,18693],requires:[]},1222:{id:1222,row:0,col:1,icon:"spell_shadow_summonimp",ranks:[18694,18695,18696],requires:[]},1223:{id:1223,row:0,col:2,icon:"spell_shadow_metamorphosis",ranks:[18697,18698,18699,18700,18701],requires:[]},1224:{id:1224,row:1,col:0,icon:"spell_shadow_lifedrain",ranks:[18703,18704],requires:[]},1225:{id:1225,row:1,col:1,icon:"spell_shadow_summonvoidwalker",ranks:[18705,18706,18707],requires:[]},1242:{id:1242,row:1,col:2,icon:"spell_holy_magicalsentry",ranks:[18731,18743,18744,18745,18746],requires:[]},1243:{id:1243,row:2,col:0,icon:"spell_shadow_summonsuccubus",ranks:[18754,18755,18756],requires:[]},1226:{id:1226,row:2,col:1,icon:"spell_nature_removecurse",ranks:[18708],requires:[]},1241:{id:1241,row:2,col:2,icon:"spell_shadow_antishadow",ranks:[18748,18749,18750,18751,18752],requires:[]},1227:{id:1227,row:3,col:1,icon:"spell_shadow_impphaseshift",ranks:[18709,18710],requires:[{id:1226,qty:1}]},1262:{id:1262,row:3,col:2,icon:"spell_shadow_shadowworddominate",ranks:[18769,18770,18771,18772,18773],requires:[]},1283:{id:1283,row:4,col:0,icon:"spell_shadow_enslavedemon",ranks:[18821,18822,18823,18824,18825],requires:[]},1281:{id:1281,row:4,col:1,icon:"spell_shadow_psychicscream",ranks:[18788],requires:[]},1261:{id:1261,row:4,col:3,icon:"inv_ammo_firetar",ranks:[18767,18768],requires:[]},1244:{id:1244,row:5,col:2,icon:"spell_shadow_shadowpact",ranks:[23785,23822,23823,23824,23825],requires:[{id:1262,qty:5}]},1282:{id:1282,row:6,col:1,icon:"spell_shadow_gathershadows",ranks:[19028],requires:[{id:1281,qty:1}]},1263:{id:1263,row:6,col:2,icon:"inv_misc_gem_sapphire_01",ranks:[18774,18775],requires:[]}},361:{1382:{id:1382,row:0,col:1,icon:"spell_nature_ravenform",ranks:[19552,19553,19554,19555,19556],requires:[]},1389:{id:1389,row:0,col:2,icon:"spell_nature_reincarnation",ranks:[19583,19584,19585,19586,19587],requires:[]},1624:{id:1624,row:1,col:0,icon:"ability_eyeoftheowl",ranks:[19557,19558],requires:[]},1381:{id:1381,row:1,col:1,icon:"ability_hunter_aspectofthemonkey",ranks:[19549,19550,19551,24386,24387],requires:[]},1395:{id:1395,row:1,col:2,icon:"inv_misc_pelt_bear_03",ranks:[19609,19610,19612],requires:[]},1625:{id:1625,row:1,col:3,icon:"ability_hunter_beastsoothe",ranks:[24443,19575],requires:[]},1384:{id:1384,row:2,col:0,icon:"ability_mount_jungletiger",ranks:[19559,19560],requires:[]},1391:{id:1391,row:2,col:1,icon:"ability_druid_dash",ranks:[19596],requires:[]},1396:{id:1396,row:2,col:2,icon:"ability_bullrush",ranks:[19616,19617,19618,19619,19620],requires:[]},1385:{id:1385,row:3,col:1,icon:"ability_hunter_mendpet",ranks:[19572,19573],requires:[]},1393:{id:1393,row:3,col:2,icon:"inv_misc_monsterclaw_04",ranks:[19598,19599,19600,19601,19602],requires:[]},1388:{id:1388,row:4,col:0,icon:"ability_druid_demoralizingroar",ranks:[19578,20895],requires:[]},1387:{id:1387,row:4,col:1,icon:"ability_devour",ranks:[19577],requires:[]},1390:{id:1390,row:4,col:3,icon:"spell_nature_abolishmagic",ranks:[19590,19592],requires:[]},1397:{id:1397,row:5,col:2,icon:"inv_misc_monsterclaw_03",ranks:[19621,19622,19623,19624,19625],requires:[{id:1393,qty:5}]},1386:{id:1386,row:6,col:1,icon:"ability_druid_ferociousbite",ranks:[19574],requires:[{id:1387,qty:1}]}},362:{1623:{id:1623,row:0,col:0,icon:"inv_misc_head_dragon_black",ranks:[24293,24294,24295],requires:[]},1301:{id:1301,row:0,col:1,icon:"spell_holy_prayerofhealing",ranks:[19151,19152,19153],requires:[]},1311:{id:1311,row:0,col:2,icon:"ability_parry",ranks:[19295,19297,19298,19301,19300],requires:[]},1304:{id:1304,row:1,col:0,icon:"spell_nature_stranglevines",ranks:[19184,19387,19388,19389,19390],requires:[]},1621:{id:1621,row:1,col:1,icon:"ability_racial_bloodrage",ranks:[19159,19160],requires:[]},1305:{id:1305,row:1,col:2,icon:"ability_rogue_trip",ranks:[19228,19232,19233,19234,19235],requires:[]},1306:{id:1306,row:2,col:0,icon:"spell_nature_timestop",ranks:[19239,19245],requires:[]},1622:{id:1622,row:2,col:1,icon:"spell_shadow_twilight",ranks:[19255,19256,19257,19258,19259],requires:[]},1308:{id:1308,row:2,col:2,icon:"ability_whirlwind",ranks:[19263],requires:[]},1322:{id:1322,row:3,col:0,icon:"ability_ensnare",ranks:[19376,19377],requires:[]},1310:{id:1310,row:3,col:1,icon:"ability_kick",ranks:[19290,19294,24283],requires:[]},1309:{id:1309,row:3,col:3,icon:"ability_rogue_feigndeath",ranks:[19286,19287],requires:[]},1321:{id:1321,row:4,col:1,icon:"spell_holy_blessingofstamina",ranks:[19370,19371,19373],requires:[]},1312:{id:1312,row:4,col:2,icon:"ability_warrior_challange",ranks:[19306],requires:[{id:1308,qty:1}]},1303:{id:1303,row:5,col:2,icon:"spell_nature_invisibilty",ranks:[19168,19180,19181,24296,24297],requires:[]},1325:{id:1325,row:6,col:1,icon:"inv_spear_02",ranks:[19386],requires:[{id:1321,qty:3}]}},363:{1341:{id:1341,row:0,col:1,icon:"spell_frost_stun",ranks:[19407,19412,19413,19414,19415],requires:[]},1342:{id:1342,row:0,col:2,icon:"spell_frost_wizardmark",ranks:[19416,19417,19418,19419,19420],requires:[]},1343:{id:1343,row:1,col:1,icon:"ability_hunter_snipershot",ranks:[19421,19422,19423,19424,19425],requires:[]},1344:{id:1344,row:1,col:2,icon:"ability_searingarrow",ranks:[19426,19427,19429,19430,19431],requires:[]},1345:{id:1345,row:2,col:0,icon:"inv_spear_07",ranks:[19434],requires:[]},1346:{id:1346,row:2,col:1,icon:"ability_impalingbolt",ranks:[19454,19455,19456,19457,19458],requires:[]},1352:{id:1352,row:2,col:3,icon:"ability_townwatch",ranks:[19498,19499,19500],requires:[]},1348:{id:1348,row:3,col:1,icon:"ability_hunter_quickshot",ranks:[19464,19465,19466,19467,19468],requires:[]},1349:{id:1349,row:3,col:2,icon:"ability_piercedamage",ranks:[19485,19487,19488,19489,19490],requires:[{id:1344,qty:5}]},1353:{id:1353,row:4,col:0,icon:"ability_golemstormbolt",ranks:[19503],requires:[]},1347:{id:1347,row:4,col:1,icon:"ability_upgrademoonglaive",ranks:[19461,19462,24691],requires:[]},1351:{id:1351,row:4,col:2,icon:"ability_hunter_criticalshot",ranks:[19491,19493,19494],requires:[]},1362:{id:1362,row:5,col:2,icon:"inv_weapon_rifle_06",ranks:[19507,19508,19509,19510,19511],requires:[]},1361:{id:1361,row:6,col:1,icon:"ability_trueshot",ranks:[19506],requires:[{id:1347,qty:3}]}},381:{1401:{id:1401,row:0,col:1,icon:"spell_holy_fistofjustice",ranks:[20042,20045,20046,20047,20048],requires:[]},1407:{id:1407,row:0,col:2,icon:"spell_frost_windwalkon",ranks:[20101,20102,20103,20104,20105],requires:[]},1631:{id:1631,row:1,col:0,icon:"spell_holy_righteousfury",ranks:[25956,25957],requires:[]},1464:{id:1464,row:1,col:1,icon:"spell_holy_holysmite",ranks:[20335,20336,20337],requires:[]},1403:{id:1403,row:1,col:2,icon:"ability_parry",ranks:[20060,20061,20062,20063,20064],requires:[]},1633:{id:1633,row:2,col:0,icon:"spell_holy_vindication",ranks:[9452,26016,26021],requires:[]},1411:{id:1411,row:2,col:1,icon:"spell_holy_retributionaura",ranks:[20117,20118,20119,20120,20121],requires:[]},1481:{id:1481,row:2,col:2,icon:"ability_warrior_innerrage",ranks:[20375],requires:[]},1634:{id:1634,row:2,col:3,icon:"spell_holy_persuitofjustice",ranks:[26022,26023],requires:[]},1632:{id:1632,row:3,col:0,icon:"spell_holy_eyeforaneye",ranks:[9799,25988],requires:[]},1405:{id:1405,row:3,col:2,icon:"spell_holy_auraoflight",ranks:[20091,20092],requires:[]},1410:{id:1410,row:4,col:0,icon:"inv_hammer_04",ranks:[20111,20112,20113],requires:[]},1409:{id:1409,row:4,col:2,icon:"spell_holy_mindvision",ranks:[20218],requires:[]},1402:{id:1402,row:5,col:1,icon:"ability_racial_avatar",ranks:[20049,20056,20057,20058,20059],requires:[{id:1411,qty:5}]},1441:{id:1441,row:6,col:1,icon:"spell_holy_prayerofhealing",ranks:[20066],requires:[]}},382:{1450:{id:1450,row:0,col:1,icon:"ability_golemthunderclap",ranks:[20262,20263,20264,20265,20266],requires:[]},1449:{id:1449,row:0,col:2,icon:"spell_nature_sleep",ranks:[20257,20258,20259,20260,20261],requires:[]},1432:{id:1432,row:1,col:1,icon:"spell_arcane_blink",ranks:[20205,20206,20207,20209,20208],requires:[]},1463:{id:1463,row:1,col:2,icon:"ability_thunderbolt",ranks:[20224,20225,20330,20331,20332],requires:[]},1444:{id:1444,row:2,col:0,icon:"spell_holy_holybolt",ranks:[20237,20238,20239],requires:[]},1435:{id:1435,row:2,col:1,icon:"spell_holy_innerfire",ranks:[26573],requires:[]},1443:{id:1443,row:2,col:2,icon:"spell_holy_layonhands",ranks:[20234,20235],requires:[]},1628:{id:1628,row:2,col:3,icon:"spell_holy_unyieldingfaith",ranks:[9453,25836],requires:[]},1461:{id:1461,row:3,col:1,icon:"spell_holy_greaterheal",ranks:[20210,20212,20213,20214,20215],requires:[]},1446:{id:1446,row:3,col:2,icon:"spell_holy_sealofwisdom",ranks:[20244,20245],requires:[]},1433:{id:1433,row:4,col:1,icon:"spell_holy_heal",ranks:[20216],requires:[{id:1461,qty:5}]},1465:{id:1465,row:4,col:2,icon:"spell_holy_healingaura",ranks:[20359,20360,20361],requires:[]},1627:{id:1627,row:5,col:2,icon:"spell_holy_power",ranks:[5923,5924,5925,5926,25829],requires:[]},1502:{id:1502,row:6,col:1,icon:"spell_holy_searinglight",ranks:[20473],requires:[{id:1433,qty:1}]}},383:{1422:{id:1422,row:0,col:1,icon:"spell_holy_devotionaura",ranks:[20138,20139,20140,20141,20142],requires:[]},1421:{id:1421,row:0,col:2,icon:"ability_defend",ranks:[20127,20130,20135,20136,20137],requires:[]},1630:{id:1630,row:1,col:0,icon:"ability_rogue_ambush",ranks:[20189,20192,20193],requires:[]},1425:{id:1425,row:1,col:1,icon:"spell_holy_sealofprotection",ranks:[20174,20175],requires:[]},1423:{id:1423,row:1,col:3,icon:"spell_holy_devotion",ranks:[20143,20144,20145,20146,20147],requires:[]},1442:{id:1442,row:2,col:0,icon:"spell_magic_magearmor",ranks:[20217],requires:[]},1501:{id:1501,row:2,col:1,icon:"spell_holy_sealoffury",ranks:[20468,20469,20470],requires:[]},1424:{id:1424,row:2,col:2,icon:"inv_shield_06",ranks:[20148,20149,20150],requires:[{id:1421,qty:5}]},1629:{id:1629,row:2,col:3,icon:"spell_magic_lesserinvisibilty",ranks:[20096,20097,20098,20099,20100],requires:[]},1521:{id:1521,row:3,col:1,icon:"spell_holy_sealofmight",ranks:[20487,20488,20489],requires:[]},1626:{id:1626,row:3,col:2,icon:"spell_holy_mindsooth",ranks:[20254,20255,20256],requires:[]},1431:{id:1431,row:4,col:1,icon:"spell_nature_lightningshield",ranks:[20911],requires:[]},1426:{id:1426,row:4,col:2,icon:"spell_holy_blessingofstrength",ranks:[20177,20179,20181,20180,20182],requires:[]},1429:{id:1429,row:5,col:2,icon:"inv_sword_20",ranks:[20196,20197,20198,20199,20200],requires:[]},1430:{id:1430,row:6,col:1,icon:"spell_holy_blessingofprotection",ranks:[20925],requires:[{id:1431,qty:1}]}}},y={},m={},f={};for(var b in h)for(var g in h[b])y[g]=h[b][g],m[b]=Object.values(h[b]),f[g]=parseInt(b,10);var v=e(15),j=e(18),E=[{id:1,name:"Warrior",icon:"class_warrior",specs:[161,164,163]},{id:2,name:"Paladin",icon:"class_paladin",specs:[382,383,381]},{id:3,name:"Hunter",icon:"class_hunter",specs:[361,363,362]},{id:4,name:"Rogue",icon:"class_rogue",specs:[182,181,183]},{id:5,name:"Priest",icon:"class_priest",specs:[201,202,203]},{id:7,name:"Shaman",icon:"class_shaman",specs:[261,263,262]},{id:8,name:"Mage",icon:"class_mage",specs:[81,41,61]},{id:9,name:"Warlock",icon:"class_warlock",specs:[302,303,301]},{id:11,name:"Druid",icon:"class_druid",specs:[283,281,282]}],C=(E.reduce(function(r,i){return Object(j.a)({},r,Object(v.a)({},i.id,i))},{}),E.reduce(function(r,i){return Object(j.a)({},r,Object(v.a)({},i.name.toLowerCase(),i))},{})),O=51,R=function(r,i){return r.row===i.row?r.col-i.col:r.row-i.row};function T(r,i){return Object.values(h[r]).reduce(function(r,e){return r+i.get(e.id,0)},0)}function P(r){return Math.max(0,O-r.reduce(function(r,i){return r+i},0))}function N(r,i){return 0===r.requires.length||r.requires.reduce(function(r,e){return!!r&&i.get(e.id,0)>=e.qty},!0)}var z=function(r,i){return!(r.get(i.id,0)>=i.ranks.length)&&(0!==P(r)&&(!(i.requires.length>0&&!N(i,r))&&!(5*i.row>T(f[i.id],r))))},D=function(r,i,e){return 1===e?function(r,i){var e=r.get(i.id,0);return z(r,i)?r.set(i.id,e+1):r}(r,i):function(r,i){var e=r.get(i.id,0),o=f[i.id];if(0===e)return console.warn("no points to reduce"),r;var s=!1,n=0,l={};r.forEach(function(r,e){var a=h[o][e];if(a&&r>0){s=s||a.requires.some(function(r){return r.id===i.id}),a.row>n&&console.info("new highest row:",a),n=a.row>n?a.row:n;for(var c=a.row;c<7;c++)l[c]=(l[c]||0)+r}});var a=l[n-1],c=5*n;return i.rowd.ranks.length)break;_>0&&(console.log("Spent ".concat(_," in ").concat(d.id)),o=o.set(d.id,_))}}return o}function x(r,i){for(;r[r.length-1]===i;)r=r.slice(0,-1);return r}var I=function(r){var i=r.talent,e=r.specId,o=r.knownTalents,n=r.availablePoints,l=o.get(i.id,0),a=l>0||n>0,c=r.disabled||!a||!function(r,i,e){if(!N(r,e))return!1;var o=T(i,e);return 5*r.row<=o}(i,e,o),t=k()("talent",{"talent--disabled":!!c,"talent--available":!c&&l=i.ranks.length||l>0&&0===n}),d=k()("point-label",{"point-label--enabled":!c});return s.a.createElement("div",{className:t,title:i.ranks[0].toString(),"data-row":i.row,"data-col":i.col,onClick:c?function(){}:function(){return r.onClick(i.id)},onContextMenu:function(e){return r.onRightClick&&r.onRightClick(i.id),e.preventDefault(),!1}},s.a.createElement("div",{className:"talent__status"}),s.a.createElement(q,{name:i.icon,size:"medium"}),a&&!c&&s.a.createElement("div",{className:d},l,"/",i.ranks.length))};I.defaultProps={onClick:function(){},onRightClick:function(){}},I.whyDidYouRender=!0;e(35);var L=function(r){var i=r.from,e=r.to,o=r.active,n=void 0!==o&&o,l=e.row===i.row?Math.abs(e.col-i.col):e.row-i.row,a={"data-col":i.col,"data-row":i.row,"data-length":l},c=k()("arrow",{"arrow--active":n,"arrow--down":e.row>i.row,"arrow--right":e.row===i.row&&e.col>i.col,"arrow--left":e.row===i.row&&e.col0}).map(function(r){return s.a.createElement(L,{key:r.id,from:y[r.requires[0].id],to:r,active:e.get(r.id,0)>0||z(e,r)})});return s.a.createElement("div",{className:"tree"},s.a.createElement("div",{className:"tree__header"},s.a.createElement("h3",null,p[i]," (",T(i,e),")")),s.a.createElement("div",{className:"tree__body",style:d},a.map(function(r){return s.a.createElement(I,{key:r.id,specId:i,talent:r,availablePoints:n,knownTalents:e,onClick:c,onRightClick:t})}),_))};M.whyDidYouRender=!0;var A=Object(u.a)(),H=function(r){function i(){var r,e;Object(a.a)(this,i);for(var o=arguments.length,s=new Array(o),n=0;n0?"-":"",e+=x(m[n].sort(R).map(function(i){return r.get(i.id,0)}).join(""),"0")}return x(e,"-")}(r,i);this.props.history.replace("/".concat(i)+(e?"/".concat(e):""))}},{key:"render",value:function(){var r=this,i=this.props.selectedClass,e=this.state.knownTalents,o=C[i],n=P(e);return s.a.createElement("div",{className:"calculator"},s.a.createElement("div",{className:"trees"},o.specs.map(function(i){return s.a.createElement(M,{key:i,specId:i,availablePoints:n,knownTalents:e,onTalentPress:r.handleTalentPress})})),s.a.createElement("div",{className:"calculator__points"},"Points: ",n),s.a.createElement("div",null,s.a.createElement("a",{href:"/shaman/-5505000055523051-55"},"Shaman test"),s.a.createElement("a",{href:"/shaman/-5595000055523051-55"},"Shaman test broken")))}}]),i}(s.a.PureComponent);H.whyDidYouRender=!0;var U=e(16),Y=function(r,i){return k()("class-picker__class",{"class-picker__class--active":r.name.toLowerCase()===i,"class-picker__class--inactive":!!i&&r.name.toLowerCase()!==i})},B=function(r){function i(){return Object(a.a)(this,i),Object(t.a)(this,Object(d.a)(i).apply(this,arguments))}return Object(_.a)(i,r),Object(c.a)(i,[{key:"render",value:function(){var r=this.props.selected,i=k()("class-picker",{"class-picker--has-selection":!!r});return s.a.createElement("ul",{className:i},Object.values(C).map(function(i){return s.a.createElement("li",{key:i.id,className:Y(i,r)},s.a.createElement(U.b,{to:"/".concat(i.name.toLowerCase()),title:i.name},s.a.createElement(q,{name:i.icon,golden:r===i.name.toLowerCase()})))}))}}]),i}(s.a.PureComponent);B.whyDidYouRender=!0;var F=function(r){function i(){return Object(a.a)(this,i),Object(t.a)(this,Object(d.a)(i).apply(this,arguments))}return Object(_.a)(i,r),Object(c.a)(i,[{key:"componentDidMount",value:function(){var r=this.props.match.params.selectedClass;r&&!C[r]&&this.props.history.replace("/")}},{key:"render",value:function(){var r=this.props,i=r.match,e=r.history,o=i.params,n=o.selectedClass,l=o.pointString;return n&&!C[n]?null:s.a.createElement("div",{className:"index"},s.a.createElement(B,{selected:n}),n&&s.a.createElement(H,{initialTalents:l&&S(l,n),selectedClass:n,history:e}))}}]),i}(s.a.PureComponent);F.whyDidYouRender=!0;var W=e(6),J=function(){return s.a.createElement(U.a,null,s.a.createElement("div",{className:"App"},s.a.createElement(W.a,{path:"/:selectedClass?/:pointString?",component:F})))};Boolean("localhost"===window.location.hostname||"[::1]"===window.location.hostname||window.location.hostname.match(/^127(?:\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/));l.a.render(s.a.createElement(J,null),document.getElementById("root")),"serviceWorker"in navigator&&navigator.serviceWorker.ready.then(function(r){r.unregister()})}},[[27,1,2]]]); -//# sourceMappingURL=main.3f32f54d.chunk.js.map \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[0],{27:function(r,e,i){r.exports=i(40)},32:function(r,e,i){},33:function(r,e,i){},34:function(r,e,i){},35:function(r,e,i){},40:function(r,e,i){"use strict";i.r(e);var o=i(0),s=i.n(o),n=i(24),l=i.n(n),a=(i(32),i(7)),c=i(8),t=i(10),d=i(9),_=i(11),u=i(14),w=(i(33),i(5)),k=i.n(w),q=(i(34),function(r){var e=r.name,i=r.size,o=void 0===i?"medium":i,n=r.golden,l=void 0!==n&&n,a=r.children,c=k()("icon","icon--".concat(o),{"icon--golden":l}),t={backgroundImage:"url(https://wow.zamimg.com/images/wow/icons/".concat("medium"===o?"large":"medium","/").concat(e,".jpg)")};return s.a.createElement("div",{className:c},s.a.createElement("div",{className:"icon__bg",style:t}),s.a.createElement("div",{className:"icon__frame"}),a)}),p={41:"Fire",61:"Frost",81:"Arcane",161:"Arms",163:"Protection",164:"Fury",181:"Combat",182:"Assassination",183:"Subtlety",201:"Discipline",202:"Holy",203:"Shadow",261:"Elemental",262:"Restoration",263:"Enhancement",281:"Feral Combat",282:"Restoration",283:"Balance",301:"Destruction",302:"Affliction",303:"Demonology",361:"Beast Mastery",362:"Survival",363:"Marksmanship",381:"Retribution",382:"Holy",383:"Protection"},h={41:{26:{id:26,row:0,col:1,icon:"spell_fire_flamebolt",ranks:[11069,12338,12339,12340,12341],requires:[]},30:{id:30,row:0,col:2,icon:"spell_fire_meteorstorm",ranks:[11103,12357,12358,12359,12360],requires:[]},34:{id:34,row:1,col:0,icon:"spell_fire_incinerate",ranks:[11119,11120,12846,12847,12848],requires:[]},28:{id:28,row:1,col:1,icon:"spell_fire_flare",ranks:[11100,12353],requires:[]},27:{id:27,row:1,col:2,icon:"spell_fire_fireball",ranks:[11078,11080,12342],requires:[]},1141:{id:1141,row:2,col:0,icon:"spell_fire_flameshock",ranks:[18459,18460],requires:[]},31:{id:31,row:2,col:1,icon:"spell_fire_selfdestruct",ranks:[11108,12349,12350],requires:[]},29:{id:29,row:2,col:2,icon:"spell_fire_fireball02",ranks:[11366],requires:[]},23:{id:23,row:2,col:3,icon:"spell_fire_fire",ranks:[11083,12351],requires:[]},25:{id:25,row:3,col:0,icon:"spell_fire_soulburn",ranks:[11095,12872,12873],requires:[]},24:{id:24,row:3,col:1,icon:"spell_fire_firearmor",ranks:[11094,13043],requires:[]},1639:{id:1639,row:3,col:3,icon:"spell_fire_masterofelements",ranks:[29074,29075,29076],requires:[]},33:{id:33,row:4,col:1,icon:"spell_nature_wispheal",ranks:[11115,11367,11368],requires:[]},32:{id:32,row:4,col:2,icon:"spell_holy_excorcism_02",ranks:[11113],requires:[{id:29,qty:1}]},35:{id:35,row:5,col:2,icon:"spell_fire_immolation",ranks:[11124,12378,12398,12399,12400],requires:[]},36:{id:36,row:6,col:1,icon:"spell_fire_sealoffire",ranks:[11129],requires:[{id:33,qty:3}]}},61:{70:{id:70,row:0,col:0,icon:"spell_frost_frostward",ranks:[11189,28332],requires:[]},37:{id:37,row:0,col:1,icon:"spell_frost_frostbolt02",ranks:[11070,12473,16763,16765,16766],requires:[]},1649:{id:1649,row:0,col:2,icon:"spell_ice_magicdamage",ranks:[29438,29439,29440],requires:[]},73:{id:73,row:1,col:0,icon:"spell_frost_iceshard",ranks:[11207,12672,15047,15052,15053],requires:[]},38:{id:38,row:1,col:1,icon:"spell_frost_frostarmor",ranks:[11071,12496,12497],requires:[]},62:{id:62,row:1,col:2,icon:"spell_frost_freezingbreath",ranks:[11165,12475],requires:[]},65:{id:65,row:1,col:3,icon:"spell_frost_wisp",ranks:[11175,12569,12571],requires:[]},61:{id:61,row:2,col:0,icon:"spell_frost_frostbolt",ranks:[11151,12952,12953],requires:[]},69:{id:69,row:2,col:1,icon:"spell_frost_wizardmark",ranks:[12472],requires:[]},63:{id:63,row:2,col:3,icon:"spell_frost_icestorm",ranks:[11185,12487,12488],requires:[]},741:{id:741,row:3,col:0,icon:"spell_shadow_darkritual",ranks:[16757,16758],requires:[]},66:{id:66,row:3,col:1,icon:"spell_frost_stun",ranks:[11160,12518,12519],requires:[]},67:{id:67,row:3,col:2,icon:"spell_frost_frostshock",ranks:[11170,12982,12983,12984,12985],requires:[{id:62,qty:2}]},72:{id:72,row:4,col:1,icon:"spell_frost_frost",ranks:[11958],requires:[]},64:{id:64,row:4,col:2,icon:"spell_frost_glacier",ranks:[11190,12489,12490],requires:[]},68:{id:68,row:5,col:2,icon:"spell_frost_chillingblast",ranks:[11180,28592,28593,28594,28595],requires:[]},71:{id:71,row:6,col:1,icon:"spell_ice_lament",ranks:[11426],requires:[{id:72,qty:1}]}},81:{74:{id:74,row:0,col:0,icon:"spell_holy_dispelmagic",ranks:[11210,12592],requires:[]},76:{id:76,row:0,col:1,icon:"spell_holy_devotion",ranks:[11222,12839,12840,12841,12842],requires:[]},80:{id:80,row:0,col:2,icon:"spell_nature_starfall",ranks:[11237,12463,12464,16769,16770],requires:[]},78:{id:78,row:1,col:0,icon:"inv_wand_01",ranks:[6057,6085],requires:[]},1650:{id:1650,row:1,col:1,icon:"spell_nature_astralrecalgroup",ranks:[29441,29444,29445,29446,29447],requires:[]},75:{id:75,row:1,col:2,icon:"spell_shadow_manaburn",ranks:[11213,12574,12575,12576,12577],requires:[]},82:{id:82,row:2,col:0,icon:"spell_nature_abolishmagic",ranks:[11247,12606],requires:[]},81:{id:81,row:2,col:1,icon:"spell_nature_wispsplode",ranks:[11242,12467,12469],requires:[]},85:{id:85,row:2,col:2,icon:"spell_arcane_arcaneresilience",ranks:[28574],requires:[]},83:{id:83,row:3,col:0,icon:"spell_shadow_detectlesserinvisibility",ranks:[11252,12605],requires:[]},88:{id:88,row:3,col:1,icon:"spell_frost_iceshock",ranks:[11255,12598],requires:[]},1142:{id:1142,row:3,col:3,icon:"spell_shadow_siphonmana",ranks:[18462,18463,18464],requires:[]},86:{id:86,row:4,col:1,icon:"spell_nature_enchantarmor",ranks:[12043],requires:[]},77:{id:77,row:4,col:2,icon:"spell_shadow_charm",ranks:[11232,12500,12501,12502,12503],requires:[{id:85,qty:1}]},421:{id:421,row:5,col:1,icon:"spell_shadow_teleport",ranks:[15058,15059,15060],requires:[{id:86,qty:1}]},87:{id:87,row:6,col:1,icon:"spell_nature_lightning",ranks:[12042],requires:[{id:421,qty:3}]}},161:{124:{id:124,row:0,col:0,icon:"ability_rogue_ambush",ranks:[12282,12663,12664],requires:[]},130:{id:130,row:0,col:1,icon:"ability_parry",ranks:[16462,16463,16464,16465,16466],requires:[]},127:{id:127,row:0,col:2,icon:"ability_gouge",ranks:[12286,12658,12659],requires:[]},126:{id:126,row:1,col:0,icon:"ability_warrior_charge",ranks:[12285,12697],requires:[]},641:{id:641,row:1,col:1,icon:"spell_nature_enchantarmor",ranks:[12295,12676,12677,12678,12679],requires:[]},128:{id:128,row:1,col:3,icon:"ability_thunderclap",ranks:[12287,12665,12666],requires:[]},131:{id:131,row:2,col:0,icon:"inv_sword_05",ranks:[12290,12963],requires:[]},137:{id:137,row:2,col:1,icon:"spell_holy_blessingofstamina",ranks:[12296],requires:[{id:641,qty:5}]},121:{id:121,row:2,col:2,icon:"ability_backstab",ranks:[12834,12849,12867],requires:[{id:127,qty:3}]},136:{id:136,row:3,col:1,icon:"inv_axe_09",ranks:[12163,12711,12712,12713,12714],requires:[]},662:{id:662,row:3,col:2,icon:"ability_searingarrow",ranks:[16493,16494],requires:[{id:121,qty:3}]},132:{id:132,row:4,col:0,icon:"inv_axe_06",ranks:[12700,12781,12783,12784,12785],requires:[]},133:{id:133,row:4,col:1,icon:"ability_rogue_slicedice",ranks:[12292],requires:[]},125:{id:125,row:4,col:2,icon:"inv_mace_01",ranks:[12284,12701,12702,12703,12704],requires:[]},123:{id:123,row:4,col:3,icon:"inv_sword_27",ranks:[12281,12812,12813,12814,12815],requires:[]},134:{id:134,row:5,col:0,icon:"inv_weapon_halbard_01",ranks:[12165,12830,12831,12832,12833],requires:[]},129:{id:129,row:5,col:2,icon:"ability_shockwave",ranks:[12289,12668,23695],requires:[]},135:{id:135,row:6,col:1,icon:"ability_warrior_savageblow",ranks:[12294],requires:[{id:133,qty:1}]}},163:{1601:{id:1601,row:0,col:1,icon:"inv_shield_06",ranks:[12298,12724,12725,12726,12727],requires:[]},138:{id:138,row:0,col:2,icon:"spell_nature_mirrorimage",ranks:[12297,12750,12751,12752,12753],requires:[]},142:{id:142,row:1,col:0,icon:"ability_racial_bloodrage",ranks:[12301,12818],requires:[]},140:{id:140,row:1,col:2,icon:"spell_holy_devotion",ranks:[12299,12761,12762,12763,12764],requires:[]},141:{id:141,row:1,col:3,icon:"spell_magic_magearmor",ranks:[12300,12959,12960,12961,12962],requires:[]},153:{id:153,row:2,col:0,icon:"spell_holy_ashestoashes",ranks:[12975],requires:[{id:142,qty:2}]},145:{id:145,row:2,col:1,icon:"ability_defend",ranks:[12945,12307,12944],requires:[{id:1601,qty:5}]},147:{id:147,row:2,col:2,icon:"ability_warrior_revenge",ranks:[12797,12799,12800],requires:[]},144:{id:144,row:2,col:3,icon:"ability_warrior_innerrage",ranks:[12303,12788,12789,12791,12792],requires:[]},146:{id:146,row:3,col:0,icon:"ability_warrior_sunder",ranks:[12308,12810,12811],requires:[]},151:{id:151,row:3,col:1,icon:"ability_warrior_disarm",ranks:[12313,12804,12807],requires:[]},143:{id:143,row:3,col:2,icon:"spell_nature_reincarnation",ranks:[12302,12765],requires:[]},150:{id:150,row:4,col:0,icon:"ability_warrior_shieldwall",ranks:[12312,12803],requires:[]},152:{id:152,row:4,col:1,icon:"ability_thunderbolt",ranks:[12809],requires:[]},149:{id:149,row:4,col:2,icon:"ability_warrior_shieldbash",ranks:[12311,12958],requires:[]},702:{id:702,row:5,col:2,icon:"inv_sword_20",ranks:[16538,16539,16540,16541,16542],requires:[]},148:{id:148,row:6,col:1,icon:"inv_shield_05",ranks:[23922],requires:[{id:152,qty:1}]}},164:{158:{id:158,row:0,col:1,icon:"spell_nature_purge",ranks:[12321,12835,12836,12837,12838],requires:[]},157:{id:157,row:0,col:2,icon:"ability_rogue_eviscerate",ranks:[12320,12852,12853,12855,12856],requires:[]},161:{id:161,row:1,col:1,icon:"ability_warrior_warcry",ranks:[12324,12876,12877,12878,12879],requires:[]},159:{id:159,row:1,col:2,icon:"spell_nature_stoneclawtotem",ranks:[12322,12999,13e3,13001,13002],requires:[]},166:{id:166,row:2,col:0,icon:"ability_warrior_cleave",ranks:[12329,12950,20496],requires:[]},160:{id:160,row:2,col:1,icon:"spell_shadow_deathscream",ranks:[12323],requires:[]},661:{id:661,row:2,col:2,icon:"spell_shadow_summonimp",ranks:[16487,16489,16492],requires:[]},154:{id:154,row:2,col:3,icon:"ability_warrior_battleshout",ranks:[12318,12857,12858,12860,12861],requires:[]},1581:{id:1581,row:3,col:0,icon:"ability_dualwield",ranks:[23584,23585,23586,23587,23588],requires:[]},1542:{id:1542,row:3,col:1,icon:"inv_sword_48",ranks:[20502,20503],requires:[]},155:{id:155,row:3,col:2,icon:"spell_shadow_unholyfrenzy",ranks:[12317,13045,13046,13047,13048],requires:[]},168:{id:168,row:4,col:0,icon:"ability_warrior_decisivestrike",ranks:[12862,12330,20497,20498,20499],requires:[]},165:{id:165,row:4,col:1,icon:"spell_shadow_deathpact",ranks:[12328],requires:[]},1543:{id:1543,row:4,col:3,icon:"ability_rogue_sprint",ranks:[20504,20505],requires:[]},1541:{id:1541,row:5,col:0,icon:"spell_nature_ancestralguardian",ranks:[20500,20501],requires:[]},156:{id:156,row:5,col:2,icon:"ability_ghoulfrenzy",ranks:[12319,12971,12972,12973,12974],requires:[{id:155,qty:5}]},167:{id:167,row:6,col:1,icon:"spell_nature_bloodlust",ranks:[23881],requires:[{id:165,qty:1}]}},181:{203:{id:203,row:0,col:0,icon:"ability_gouge",ranks:[13741,13793,13792],requires:[]},201:{id:201,row:0,col:1,icon:"spell_shadow_ritualofsacrifice",ranks:[13732,13863],requires:[]},186:{id:186,row:0,col:2,icon:"spell_nature_invisibilty",ranks:[13712,13788,13789,13790,13791],requires:[]},202:{id:202,row:1,col:0,icon:"ability_backstab",ranks:[13733,13865,13866],requires:[]},187:{id:187,row:1,col:1,icon:"ability_parry",ranks:[13713,13853,13854,13855,13856],requires:[]},181:{id:181,row:1,col:2,icon:"ability_marksmanship",ranks:[13705,13832,13843,13844,13845],requires:[]},204:{id:204,row:2,col:0,icon:"spell_shadow_shadowward",ranks:[13742,13872],requires:[]},301:{id:301,row:2,col:1,icon:"ability_warrior_challange",ranks:[14251],requires:[{id:187,qty:5}]},222:{id:222,row:2,col:3,icon:"ability_rogue_sprint",ranks:[13743,13875],requires:[]},206:{id:206,row:3,col:0,icon:"ability_kick",ranks:[13754,13867],requires:[]},182:{id:182,row:3,col:1,icon:"inv_weapon_shortblade_05",ranks:[13706,13804,13805,13806,13807],requires:[]},221:{id:221,row:3,col:2,icon:"ability_dualwield",ranks:[13715,13848,13849,13851,13852],requires:[{id:181,qty:5}]},184:{id:184,row:4,col:0,icon:"inv_mace_01",ranks:[13709,13800,13801,13802,13803],requires:[]},223:{id:223,row:4,col:1,icon:"ability_warrior_punishingblow",ranks:[13877],requires:[]},242:{id:242,row:4,col:2,icon:"inv_sword_27",ranks:[13960,13961,13962,13963,13964],requires:[]},183:{id:183,row:4,col:3,icon:"inv_gauntlets_04",ranks:[13707,13966,13967,13968,13969],requires:[]},1703:{id:1703,row:5,col:1,icon:"spell_holy_blessingofstrength",ranks:[30919,30920],requires:[{id:223,qty:1}]},1122:{id:1122,row:5,col:2,icon:"ability_racial_avatar",ranks:[18427,18428,18429],requires:[]},205:{id:205,row:6,col:1,icon:"spell_shadow_shadowworddominate",ranks:[13750],requires:[]}},182:{276:{id:276,row:0,col:0,icon:"ability_rogue_eviscerate",ranks:[14162,14163,14164],requires:[]},272:{id:272,row:0,col:1,icon:"ability_fiegndead",ranks:[14144,14148],requires:[]},270:{id:270,row:0,col:2,icon:"ability_racial_bloodrage",ranks:[14138,14139,14140,14141,14142],requires:[]},273:{id:273,row:1,col:0,icon:"ability_druid_disembowel",ranks:[14156,14160,14161],requires:[]},274:{id:274,row:1,col:1,icon:"spell_shadow_deathscream",ranks:[14158,14159],requires:[]},277:{id:277,row:1,col:3,icon:"ability_rogue_slicedice",ranks:[14165,14166,14167],requires:[]},281:{id:281,row:2,col:0,icon:"ability_warrior_decisivestrike",ranks:[14179],requires:[]},278:{id:278,row:2,col:1,icon:"ability_warrior_riposte",ranks:[14168,14169],requires:[]},269:{id:269,row:2,col:2,icon:"ability_criticalstrike",ranks:[14128,14132,14135,14136,14137],requires:[{id:270,qty:5}]},682:{id:682,row:3,col:1,icon:"ability_rogue_feigndeath",ranks:[16513,16514,16515,16719,16720],requires:[]},268:{id:268,row:3,col:2,icon:"ability_poisons",ranks:[14113,14114,14115,14116,14117],requires:[]},280:{id:280,row:4,col:1,icon:"spell_ice_lament",ranks:[14177],requires:[]},279:{id:279,row:4,col:2,icon:"ability_rogue_kidneyshot",ranks:[14174,14175,14176],requires:[]},283:{id:283,row:5,col:1,icon:"spell_shadow_chilltouch",ranks:[14186,14190,14193,14194,14195],requires:[{id:280,qty:1}]},382:{id:382,row:6,col:1,icon:"spell_nature_earthbindtotem",ranks:[14983],requires:[]}},183:{241:{id:241,row:0,col:1,icon:"spell_shadow_charm",ranks:[13958,13970,13971,13972,13973],requires:[]},261:{id:261,row:0,col:2,icon:"ability_warrior_warcry",ranks:[14057,14072,14073,14074,14075],requires:[]},1700:{id:1700,row:1,col:0,icon:"ability_rogue_feint",ranks:[30892,30893],requires:[]},247:{id:247,row:1,col:1,icon:"spell_magic_lesserinvisibilty",ranks:[13981,14066],requires:[]},244:{id:244,row:1,col:2,icon:"ability_stealth",ranks:[13975,14062,14063,14064,14065],requires:[]},245:{id:245,row:2,col:0,icon:"spell_shadow_fumble",ranks:[13976,13979,13980],requires:[]},303:{id:303,row:2,col:1,icon:"spell_shadow_curse",ranks:[14278],requires:[]},263:{id:263,row:2,col:2,icon:"ability_rogue_ambush",ranks:[14079,14080,14081],requires:[]},246:{id:246,row:3,col:0,icon:"spell_nature_mirrorimage",ranks:[13983,14070,14071],requires:[]},262:{id:262,row:3,col:1,icon:"ability_sap",ranks:[14076,14094,14095],requires:[]},1123:{id:1123,row:3,col:2,icon:"inv_sword_17",ranks:[14171,14172,14173],requires:[]},1701:{id:1701,row:4,col:0,icon:"ability_ambush",ranks:[30894,30895],requires:[]},284:{id:284,row:4,col:1,icon:"spell_shadow_antishadow",ranks:[14185],requires:[]},265:{id:265,row:4,col:2,icon:"spell_shadow_summonsuccubus",ranks:[14082,14083],requires:[]},681:{id:681,row:4,col:3,icon:"spell_shadow_lifedrain",ranks:[16511],requires:[{id:1123,qty:3}]},1702:{id:1702,row:5,col:2,icon:"inv_weapon_crossbow_11",ranks:[30902,30903,30904,30905,30906],requires:[]},381:{id:381,row:6,col:1,icon:"spell_shadow_possession",ranks:[14183],requires:[{id:284,qty:1}]}},201:{342:{id:342,row:0,col:1,icon:"spell_magic_magearmor",ranks:[14522,14788,14789,14790,14791],requires:[]},345:{id:345,row:0,col:2,icon:"inv_wand_01",ranks:[14524,14525,14526,14527,14528],requires:[]},352:{id:352,row:1,col:0,icon:"spell_nature_manaregentotem",ranks:[14523,14784,14785,14786,14787],requires:[]},344:{id:344,row:1,col:1,icon:"spell_holy_wordfortitude",ranks:[14749,14767],requires:[]},343:{id:343,row:1,col:2,icon:"spell_holy_powerwordshield",ranks:[14748,14768,14769],requires:[]},321:{id:321,row:1,col:3,icon:"spell_nature_tranquility",ranks:[14531,14774],requires:[]},348:{id:348,row:2,col:1,icon:"spell_frost_windwalkon",ranks:[14751],requires:[]},347:{id:347,row:2,col:2,icon:"spell_nature_sleep",ranks:[14521,14776,14777],requires:[]},346:{id:346,row:3,col:0,icon:"spell_holy_innerfire",ranks:[14747,14770,14771],requires:[]},341:{id:341,row:3,col:1,icon:"ability_hibernation",ranks:[14520,14780,14781,14782,14783],requires:[]},350:{id:350,row:3,col:3,icon:"spell_shadow_manaburn",ranks:[14750,14772],requires:[]},1201:{id:1201,row:4,col:1,icon:"spell_nature_enchantarmor",ranks:[18551,18552,18553,18554,18555],requires:[]},351:{id:351,row:4,col:2,icon:"spell_holy_divinespirit",ranks:[14752],requires:[{id:347,qty:3}]},1202:{id:1202,row:5,col:2,icon:"spell_nature_slowingtotem",ranks:[18544,18547,18548,18549,18550],requires:[]},322:{id:322,row:6,col:1,icon:"spell_holy_powerinfusion",ranks:[10060],requires:[{id:1201,qty:5}]}},202:{410:{id:410,row:0,col:0,icon:"spell_holy_healingfocus",ranks:[14913,15012],requires:[]},406:{id:406,row:0,col:1,icon:"spell_holy_renew",ranks:[14908,15020,17191],requires:[]},401:{id:401,row:0,col:2,icon:"spell_holy_sealofsalvation",ranks:[14889,15008,15009,15010,15011],requires:[]},411:{id:411,row:1,col:1,icon:"spell_holy_spellwarding",ranks:[27900,27901,27902,27903,27904],requires:[]},1181:{id:1181,row:1,col:2,icon:"spell_holy_sealofwrath",ranks:[18530,18531,18533,18534,18535],requires:[]},442:{id:442,row:2,col:0,icon:"spell_holy_holynova",ranks:[15237],requires:[]},1636:{id:1636,row:2,col:1,icon:"spell_holy_blessedrecovery",ranks:[27811,27815,27816],requires:[]},361:{id:361,row:2,col:3,icon:"spell_holy_layonhands",ranks:[14892,15362,15363],requires:[]},1635:{id:1635,row:3,col:0,icon:"spell_holy_purify",ranks:[27789,27790],requires:[]},408:{id:408,row:3,col:1,icon:"spell_holy_heal02",ranks:[14912,15013,15014],requires:[]},403:{id:403,row:3,col:2,icon:"spell_holy_searinglightpriest",ranks:[14909,15017],requires:[{id:1181,qty:5}]},413:{id:413,row:4,col:0,icon:"spell_holy_prayerofhealing02",ranks:[14911,15018],requires:[]},1561:{id:1561,row:4,col:1,icon:"inv_enchant_essenceeternallarge",ranks:[20711],requires:[]},402:{id:402,row:4,col:2,icon:"spell_holy_spiritualguidence",ranks:[14901,15028,15029,15030,15031],requires:[]},404:{id:404,row:5,col:2,icon:"spell_nature_moonglow",ranks:[14898,15349,15354,15355,15356],requires:[]},1637:{id:1637,row:6,col:1,icon:"spell_holy_summonlightwell",ranks:[724],requires:[{id:1561,qty:1}]}},203:{465:{id:465,row:0,col:1,icon:"spell_shadow_requiem",ranks:[15270,15335,15336,15337,15338],requires:[]},464:{id:464,row:0,col:2,icon:"spell_shadow_gathershadows",ranks:[15268,15323,15324,15325,15326],requires:[]},466:{id:466,row:1,col:0,icon:"spell_shadow_shadowward",ranks:[15318,15272,15320],requires:[]},482:{id:482,row:1,col:1,icon:"spell_shadow_shadowwordpain",ranks:[15275,15317],requires:[]},463:{id:463,row:1,col:2,icon:"spell_shadow_burningspirit",ranks:[15260,15327,15328,15329,15330],requires:[]},542:{id:542,row:2,col:0,icon:"spell_shadow_psychicscream",ranks:[15392,15448],requires:[]},481:{id:481,row:2,col:1,icon:"spell_shadow_unholyfrenzy",ranks:[15273,15312,15313,15314,15316],requires:[]},501:{id:501,row:2,col:2,icon:"spell_shadow_siphonmana",ranks:[15407],requires:[]},483:{id:483,row:3,col:1,icon:"spell_magic_lesserinvisibilty",ranks:[15274,15311],requires:[]},881:{id:881,row:3,col:2,icon:"spell_shadow_chilltouch",ranks:[17322,17323,17325],requires:[]},461:{id:461,row:3,col:3,icon:"spell_shadow_blackplague",ranks:[15257,15331,15332,15333,15334],requires:[]},541:{id:541,row:4,col:0,icon:"spell_shadow_impphaseshift",ranks:[15487],requires:[{id:542,qty:2}]},484:{id:484,row:4,col:1,icon:"spell_shadow_unsummonbuilding",ranks:[15286],requires:[]},1638:{id:1638,row:4,col:2,icon:"spell_shadow_improvedvampiricembrace",ranks:[27839,27840],requires:[{id:484,qty:1}]},462:{id:462,row:5,col:2,icon:"spell_shadow_twilight",ranks:[15259,15307,15308,15309,15310],requires:[]},521:{id:521,row:6,col:1,icon:"spell_shadow_shadowform",ranks:[15473],requires:[{id:484,qty:1}]}},261:{564:{id:564,row:0,col:1,icon:"spell_nature_wispsplode",ranks:[16039,16109,16110,16111,16112],requires:[]},563:{id:563,row:0,col:2,icon:"spell_fire_fireball",ranks:[16035,16105,16106,16107,16108],requires:[]},572:{id:572,row:1,col:0,icon:"spell_nature_stoneclawtotem",ranks:[16043,16130],requires:[]},1640:{id:1640,row:1,col:1,icon:"spell_nature_spiritarmor",ranks:[28996,28997,28998],requires:[]},561:{id:561,row:1,col:2,icon:"spell_fire_immolation",ranks:[16038,16160,16161],requires:[]},574:{id:574,row:2,col:0,icon:"spell_shadow_manaburn",ranks:[16164],requires:[]},575:{id:575,row:2,col:1,icon:"spell_frost_frostward",ranks:[16040,16113,16114,16115,16116],requires:[]},562:{id:562,row:2,col:2,icon:"spell_nature_callstorm",ranks:[16041,16117,16118,16119,16120],requires:[]},567:{id:567,row:3,col:0,icon:"spell_fire_sealoffire",ranks:[16086,16544],requires:[]},1642:{id:1642,row:3,col:1,icon:"spell_nature_eyeofthestorm",ranks:[29062,29064,29065],requires:[]},1645:{id:1645,row:3,col:3,icon:"spell_fire_elementaldevastation",ranks:[30160,29179,29180],requires:[]},1641:{id:1641,row:4,col:0,icon:"spell_nature_stormreach",ranks:[28999,29e3],requires:[]},565:{id:565,row:4,col:1,icon:"spell_fire_volcano",ranks:[16089],requires:[]},721:{id:721,row:5,col:2,icon:"spell_lightning_lightningbolt01",ranks:[16578,16579,16580,16581,16582],requires:[{id:562,qty:5}]},573:{id:573,row:6,col:1,icon:"spell_nature_wispheal",ranks:[16166],requires:[{id:565,qty:1}]}},262:{586:{id:586,row:0,col:1,icon:"spell_nature_magicimmunity",ranks:[16182,16226,16227,16228,16229],requires:[]},593:{id:593,row:0,col:2,icon:"spell_frost_manarecharge",ranks:[16179,16214,16215,16216,16217],requires:[]},589:{id:589,row:1,col:0,icon:"spell_nature_reincarnation",ranks:[16184,16209],requires:[]},581:{id:581,row:1,col:1,icon:"spell_nature_undyingstrength",ranks:[16176,16235,16240],requires:[]},595:{id:595,row:1,col:2,icon:"spell_nature_moonglow",ranks:[16173,16222,16223,16224,16225],requires:[]},583:{id:583,row:2,col:0,icon:"spell_frost_stun",ranks:[16180,16196,16198],requires:[]},587:{id:587,row:2,col:1,icon:"spell_nature_healingwavelesser",ranks:[16181,16230,16232,16233,16234],requires:[]},582:{id:582,row:2,col:2,icon:"spell_nature_nullward",ranks:[16189],requires:[]},1646:{id:1646,row:2,col:3,icon:"spell_nature_healingtouch",ranks:[29187,29189,29191],requires:[]},588:{id:588,row:3,col:1,icon:"spell_nature_manaregentotem",ranks:[16187,16205,16206,16207,16208],requires:[]},594:{id:594,row:3,col:2,icon:"spell_nature_tranquility",ranks:[16194,16218,16219,16220,16221],requires:[]},1648:{id:1648,row:4,col:0,icon:"spell_nature_healingway",ranks:[29206,29205,29202],requires:[]},591:{id:591,row:4,col:2,icon:"spell_nature_ravenform",ranks:[16188],requires:[]},592:{id:592,row:5,col:2,icon:"spell_frost_wizardmark",ranks:[16178,16210,16211,16212,16213],requires:[]},590:{id:590,row:6,col:1,icon:"spell_frost_summonwaterelemental",ranks:[16190],requires:[{id:588,qty:5}]}},263:{614:{id:614,row:0,col:1,icon:"spell_shadow_grimward",ranks:[17485,17486,17487,17488,17489],requires:[]},612:{id:612,row:0,col:2,icon:"inv_shield_06",ranks:[16253,16298,16299,16300,16301],requires:[]},609:{id:609,row:1,col:0,icon:"spell_nature_stoneskintotem",ranks:[16258,16293],requires:[]},613:{id:613,row:1,col:1,icon:"ability_thunderbolt",ranks:[16255,16302,16303,16304,16305],requires:[]},605:{id:605,row:1,col:2,icon:"spell_nature_spiritwolf",ranks:[16262,16287],requires:[]},607:{id:607,row:1,col:3,icon:"spell_nature_lightningshield",ranks:[16261,16290,16291],requires:[]},610:{id:610,row:2,col:0,icon:"spell_nature_earthbindtotem",ranks:[16259,16295],requires:[]},617:{id:617,row:2,col:2,icon:"inv_axe_10",ranks:[16269],requires:[]},601:{id:601,row:2,col:3,icon:"spell_nature_mirrorimage",ranks:[16254,16271,16272,16273,16274],requires:[]},602:{id:602,row:3,col:1,icon:"ability_ghoulfrenzy",ranks:[16256,16281,16282,16283,16284],requires:[{id:613,qty:5}]},615:{id:615,row:3,col:2,icon:"spell_holy_devotion",ranks:[16252,16306,16307,16308,16309],requires:[]},1647:{id:1647,row:4,col:0,icon:"spell_fire_enchantweapon",ranks:[29192,29193],requires:[]},611:{id:611,row:4,col:1,icon:"spell_fire_flametounge",ranks:[16266,29079,29080],requires:[]},616:{id:616,row:4,col:2,icon:"ability_parry",ranks:[16268],requires:[]},1643:{id:1643,row:5,col:2,icon:"ability_hunter_swiftstrike",ranks:[29082,29084,29086,29087,29088],requires:[]},901:{id:901,row:6,col:1,icon:"spell_holy_sealofmight",ranks:[17364],requires:[{id:611,qty:3}]}},281:{796:{id:796,row:0,col:1,icon:"ability_hunter_pet_hyena",ranks:[16934,16935,16936,16937,16938],requires:[]},795:{id:795,row:0,col:2,icon:"ability_druid_demoralizingroar",ranks:[16858,16859,16860,16861,16862],requires:[]},799:{id:799,row:1,col:0,icon:"ability_ambush",ranks:[16947,16948,16949,16950,16951],requires:[]},797:{id:797,row:1,col:1,icon:"ability_druid_bash",ranks:[16940,16941],requires:[]},794:{id:794,row:1,col:2,icon:"inv_misc_pelt_bear_03",ranks:[16929,16930,16931,16932,16933],requires:[]},807:{id:807,row:2,col:0,icon:"spell_nature_spiritwolf",ranks:[17002,24866],requires:[]},804:{id:804,row:2,col:1,icon:"ability_hunter_pet_bear",ranks:[16979],requires:[]},798:{id:798,row:2,col:2,icon:"inv_misc_monsterclaw_04",ranks:[16942,16943,16944],requires:[]},802:{id:802,row:3,col:0,icon:"spell_shadow_vampiricaura",ranks:[16966,16968],requires:[]},803:{id:803,row:3,col:1,icon:"ability_hunter_pet_cat",ranks:[16972,16974,16975],requires:[]},800:{id:800,row:3,col:2,icon:"ability_ghoulfrenzy",ranks:[16952,16954],requires:[{id:798,qty:3}]},801:{id:801,row:3,col:3,icon:"ability_racial_cannibalize",ranks:[16958,16961],requires:[{id:798,qty:3}]},805:{id:805,row:4,col:0,icon:"ability_druid_ravage",ranks:[16998,16999],requires:[]},1162:{id:1162,row:4,col:2,icon:"spell_nature_faeriefire",ranks:[16857],requires:[]},808:{id:808,row:5,col:1,icon:"spell_holy_blessingofagility",ranks:[17003,17004,17005,17006,24894],requires:[{id:803,qty:3}]},809:{id:809,row:6,col:1,icon:"spell_nature_unyeildingstamina",ranks:[17007],requires:[]}},282:{821:{id:821,row:0,col:1,icon:"spell_nature_regeneration",ranks:[17050,17051,17053,17054,17055],requires:[]},822:{id:822,row:0,col:2,icon:"spell_holy_blessingofstamina",ranks:[17056,17058,17059,17060,17061],requires:[]},824:{id:824,row:1,col:0,icon:"spell_nature_healingtouch",ranks:[17069,17070,17071,17072,17073],requires:[]},823:{id:823,row:1,col:1,icon:"spell_nature_healingwavegreater",ranks:[17063,17065,17066,17067,17068],requires:[]},826:{id:826,row:1,col:2,icon:"ability_druid_enrage",ranks:[17079,17082],requires:[]},829:{id:829,row:2,col:1,icon:"spell_frost_windwalkon",ranks:[17106,17107,17108],requires:[]},827:{id:827,row:2,col:2,icon:"spell_nature_insectswarm",ranks:[5570],requires:[]},841:{id:841,row:2,col:3,icon:"ability_eyeoftheowl",ranks:[17118,17119,17120,17121,17122],requires:[]},843:{id:843,row:3,col:1,icon:"spell_holy_elunesgrace",ranks:[24968,24969,24970,24971,24972],requires:[]},830:{id:830,row:3,col:3,icon:"spell_nature_rejuvenation",ranks:[17111,17112,17113],requires:[]},831:{id:831,row:4,col:0,icon:"spell_nature_ravenform",ranks:[17116],requires:[{id:824,qty:5}]},828:{id:828,row:4,col:2,icon:"spell_nature_protectionformnature",ranks:[17104,24943,24944,24945,24946],requires:[{id:827,qty:1}]},842:{id:842,row:4,col:3,icon:"spell_nature_tranquility",ranks:[17123,17124],requires:[]},825:{id:825,row:5,col:2,icon:"spell_nature_resistnature",ranks:[17074,17075,17076,17077,17078],requires:[]},844:{id:844,row:6,col:1,icon:"inv_relics_idolofrejuvenation",ranks:[18562],requires:[{id:843,qty:5}]}},283:{762:{id:762,row:0,col:0,icon:"spell_nature_abolishmagic",ranks:[16814,16815,16816,16817,16818],requires:[]},761:{id:761,row:0,col:1,icon:"spell_nature_natureswrath",ranks:[16689],requires:[]},921:{id:921,row:0,col:2,icon:"spell_nature_natureswrath",ranks:[17245,17247,17248,17249],requires:[{id:761,qty:1}]},787:{id:787,row:1,col:0,icon:"spell_nature_stranglevines",ranks:[16918,16919,16920],requires:[]},763:{id:763,row:1,col:1,icon:"spell_nature_starfall",ranks:[16821,16822,16823,16824,16825],requires:[]},791:{id:791,row:1,col:2,icon:"inv_staff_01",ranks:[16902,16903,16904,16905,16906],requires:[]},781:{id:781,row:1,col:3,icon:"spell_nature_wispsplode",ranks:[16833,16834,16835],requires:[]},782:{id:782,row:2,col:0,icon:"spell_nature_thorns",ranks:[16836,16839,16840],requires:[]},788:{id:788,row:2,col:2,icon:"spell_nature_crystalball",ranks:[16864],requires:[{id:791,qty:5}]},764:{id:764,row:2,col:3,icon:"spell_nature_naturetouchgrow",ranks:[16819,16820],requires:[]},792:{id:792,row:3,col:1,icon:"spell_nature_purge",ranks:[16909,16910,16911,16912,16913],requires:[{id:763,qty:5}]},784:{id:784,row:3,col:2,icon:"spell_arcane_starfire",ranks:[16850,16923,16924,16925,16926],requires:[]},789:{id:789,row:4,col:1,icon:"spell_nature_naturesblessing",ranks:[16880],requires:[]},783:{id:783,row:4,col:2,icon:"spell_nature_sentinal",ranks:[16845,16846,16847],requires:[]},790:{id:790,row:5,col:1,icon:"spell_nature_moonglow",ranks:[16896,16897,16899,16900,16901],requires:[{id:789,qty:1}]},793:{id:793,row:6,col:1,icon:"spell_nature_forceofnature",ranks:[24858],requires:[]}},301:{944:{id:944,row:0,col:1,icon:"spell_shadow_shadowbolt",ranks:[17793,17796,17801,17802,17803],requires:[]},941:{id:941,row:0,col:2,icon:"spell_fire_windsofwoe",ranks:[17778,17779,17780,17781,17782],requires:[]},943:{id:943,row:1,col:1,icon:"spell_shadow_deathpact",ranks:[17788,17789,17790,17791,17792],requires:[]},982:{id:982,row:1,col:2,icon:"spell_fire_fire",ranks:[18119,18120,18121,18122,18123],requires:[]},983:{id:983,row:2,col:0,icon:"spell_fire_firebolt",ranks:[18126,18127],requires:[]},984:{id:984,row:2,col:1,icon:"spell_shadow_curse",ranks:[18128,18129],requires:[]},981:{id:981,row:2,col:2,icon:"spell_fire_flameshock",ranks:[18130,18131,18132,18133,18134],requires:[]},963:{id:963,row:2,col:3,icon:"spell_shadow_scourgebuild",ranks:[17877],requires:[]},985:{id:985,row:3,col:0,icon:"spell_fire_lavaspawn",ranks:[18135,18136],requires:[]},964:{id:964,row:3,col:1,icon:"spell_shadow_corpseexplode",ranks:[17917,17918],requires:[]},965:{id:965,row:3,col:3,icon:"spell_fire_soulburn",ranks:[17927,17929,17930,17931,17932],requires:[]},986:{id:986,row:4,col:0,icon:"spell_fire_volcano",ranks:[18096,18073],requires:[{id:985,qty:2}]},961:{id:961,row:4,col:1,icon:"spell_fire_immolation",ranks:[17815,17833,17834,17835,17836],requires:[]},967:{id:967,row:4,col:2,icon:"spell_shadow_shadowwordpain",ranks:[17959],requires:[{id:981,qty:5}]},966:{id:966,row:5,col:2,icon:"spell_fire_selfdestruct",ranks:[17954,17955,17956,17957,17958],requires:[]},968:{id:968,row:6,col:1,icon:"spell_fire_fireball",ranks:[17962],requires:[{id:961,qty:5}]}},302:{1005:{id:1005,row:0,col:1,icon:"spell_shadow_unsummonbuilding",ranks:[18174,18175,18176,18177,18178],requires:[]},1003:{id:1003,row:0,col:2,icon:"spell_shadow_abominationexplosion",ranks:[17810,17811,17812,17813,17814],requires:[]},1006:{id:1006,row:1,col:0,icon:"spell_shadow_curseofmannoroth",ranks:[18179,18180,18181],requires:[]},1101:{id:1101,row:1,col:1,icon:"spell_shadow_haunting",ranks:[18213,18372],requires:[]},1007:{id:1007,row:1,col:2,icon:"spell_shadow_burningspirit",ranks:[18182,18183],requires:[]},1004:{id:1004,row:1,col:3,icon:"spell_shadow_lifedrain02",ranks:[17804,17805,17806,17807,17808],requires:[]},1284:{id:1284,row:2,col:0,icon:"spell_shadow_curseofsargeras",ranks:[18827,18829,18830],requires:[]},1001:{id:1001,row:2,col:1,icon:"spell_shadow_fingerofdeath",ranks:[17783,17784,17785,17786,17787],requires:[]},1061:{id:1061,row:2,col:2,icon:"spell_shadow_contagion",ranks:[18288],requires:[]},1021:{id:1021,row:3,col:0,icon:"spell_shadow_callofbone",ranks:[18218,18219],requires:[]},1002:{id:1002,row:3,col:1,icon:"spell_shadow_twilight",ranks:[18094,18095],requires:[]},1121:{id:1121,row:3,col:3,icon:"spell_shadow_siphonmana",ranks:[17864,18393],requires:[]},1041:{id:1041,row:4,col:1,icon:"spell_shadow_requiem",ranks:[18265],requires:[]},1081:{id:1081,row:4,col:2,icon:"spell_shadow_grimward",ranks:[18223],requires:[{id:1061,qty:1}]},1082:{id:1082,row:4,col:3,icon:"spell_shadow_grimward",ranks:[18310,18311,18312,18313],requires:[{id:1081,qty:1}]},1042:{id:1042,row:5,col:1,icon:"spell_shadow_shadetruesight",ranks:[18271,18272,18273,18274,18275],requires:[{id:1041,qty:1}]},1022:{id:1022,row:6,col:1,icon:"spell_shadow_darkritual",ranks:[18220],requires:[]}},303:{1221:{id:1221,row:0,col:0,icon:"inv_stone_04",ranks:[18692,18693],requires:[]},1222:{id:1222,row:0,col:1,icon:"spell_shadow_summonimp",ranks:[18694,18695,18696],requires:[]},1223:{id:1223,row:0,col:2,icon:"spell_shadow_metamorphosis",ranks:[18697,18698,18699,18700,18701],requires:[]},1224:{id:1224,row:1,col:0,icon:"spell_shadow_lifedrain",ranks:[18703,18704],requires:[]},1225:{id:1225,row:1,col:1,icon:"spell_shadow_summonvoidwalker",ranks:[18705,18706,18707],requires:[]},1242:{id:1242,row:1,col:2,icon:"spell_holy_magicalsentry",ranks:[18731,18743,18744,18745,18746],requires:[]},1243:{id:1243,row:2,col:0,icon:"spell_shadow_summonsuccubus",ranks:[18754,18755,18756],requires:[]},1226:{id:1226,row:2,col:1,icon:"spell_nature_removecurse",ranks:[18708],requires:[]},1241:{id:1241,row:2,col:2,icon:"spell_shadow_antishadow",ranks:[18748,18749,18750,18751,18752],requires:[]},1227:{id:1227,row:3,col:1,icon:"spell_shadow_impphaseshift",ranks:[18709,18710],requires:[{id:1226,qty:1}]},1262:{id:1262,row:3,col:2,icon:"spell_shadow_shadowworddominate",ranks:[18769,18770,18771,18772,18773],requires:[]},1283:{id:1283,row:4,col:0,icon:"spell_shadow_enslavedemon",ranks:[18821,18822,18823,18824,18825],requires:[]},1281:{id:1281,row:4,col:1,icon:"spell_shadow_psychicscream",ranks:[18788],requires:[]},1261:{id:1261,row:4,col:3,icon:"inv_ammo_firetar",ranks:[18767,18768],requires:[]},1244:{id:1244,row:5,col:2,icon:"spell_shadow_shadowpact",ranks:[23785,23822,23823,23824,23825],requires:[{id:1262,qty:5}]},1282:{id:1282,row:6,col:1,icon:"spell_shadow_gathershadows",ranks:[19028],requires:[{id:1281,qty:1}]},1263:{id:1263,row:6,col:2,icon:"inv_misc_gem_sapphire_01",ranks:[18774,18775],requires:[]}},361:{1382:{id:1382,row:0,col:1,icon:"spell_nature_ravenform",ranks:[19552,19553,19554,19555,19556],requires:[]},1389:{id:1389,row:0,col:2,icon:"spell_nature_reincarnation",ranks:[19583,19584,19585,19586,19587],requires:[]},1624:{id:1624,row:1,col:0,icon:"ability_eyeoftheowl",ranks:[19557,19558],requires:[]},1381:{id:1381,row:1,col:1,icon:"ability_hunter_aspectofthemonkey",ranks:[19549,19550,19551,24386,24387],requires:[]},1395:{id:1395,row:1,col:2,icon:"inv_misc_pelt_bear_03",ranks:[19609,19610,19612],requires:[]},1625:{id:1625,row:1,col:3,icon:"ability_hunter_beastsoothe",ranks:[24443,19575],requires:[]},1384:{id:1384,row:2,col:0,icon:"ability_mount_jungletiger",ranks:[19559,19560],requires:[]},1391:{id:1391,row:2,col:1,icon:"ability_druid_dash",ranks:[19596],requires:[]},1396:{id:1396,row:2,col:2,icon:"ability_bullrush",ranks:[19616,19617,19618,19619,19620],requires:[]},1385:{id:1385,row:3,col:1,icon:"ability_hunter_mendpet",ranks:[19572,19573],requires:[]},1393:{id:1393,row:3,col:2,icon:"inv_misc_monsterclaw_04",ranks:[19598,19599,19600,19601,19602],requires:[]},1388:{id:1388,row:4,col:0,icon:"ability_druid_demoralizingroar",ranks:[19578,20895],requires:[]},1387:{id:1387,row:4,col:1,icon:"ability_devour",ranks:[19577],requires:[]},1390:{id:1390,row:4,col:3,icon:"spell_nature_abolishmagic",ranks:[19590,19592],requires:[]},1397:{id:1397,row:5,col:2,icon:"inv_misc_monsterclaw_03",ranks:[19621,19622,19623,19624,19625],requires:[{id:1393,qty:5}]},1386:{id:1386,row:6,col:1,icon:"ability_druid_ferociousbite",ranks:[19574],requires:[{id:1387,qty:1}]}},362:{1623:{id:1623,row:0,col:0,icon:"inv_misc_head_dragon_black",ranks:[24293,24294,24295],requires:[]},1301:{id:1301,row:0,col:1,icon:"spell_holy_prayerofhealing",ranks:[19151,19152,19153],requires:[]},1311:{id:1311,row:0,col:2,icon:"ability_parry",ranks:[19295,19297,19298,19301,19300],requires:[]},1304:{id:1304,row:1,col:0,icon:"spell_nature_stranglevines",ranks:[19184,19387,19388,19389,19390],requires:[]},1621:{id:1621,row:1,col:1,icon:"ability_racial_bloodrage",ranks:[19159,19160],requires:[]},1305:{id:1305,row:1,col:2,icon:"ability_rogue_trip",ranks:[19228,19232,19233,19234,19235],requires:[]},1306:{id:1306,row:2,col:0,icon:"spell_nature_timestop",ranks:[19239,19245],requires:[]},1622:{id:1622,row:2,col:1,icon:"spell_shadow_twilight",ranks:[19255,19256,19257,19258,19259],requires:[]},1308:{id:1308,row:2,col:2,icon:"ability_whirlwind",ranks:[19263],requires:[]},1322:{id:1322,row:3,col:0,icon:"ability_ensnare",ranks:[19376,19377],requires:[]},1310:{id:1310,row:3,col:1,icon:"ability_kick",ranks:[19290,19294,24283],requires:[]},1309:{id:1309,row:3,col:3,icon:"ability_rogue_feigndeath",ranks:[19286,19287],requires:[]},1321:{id:1321,row:4,col:1,icon:"spell_holy_blessingofstamina",ranks:[19370,19371,19373],requires:[]},1312:{id:1312,row:4,col:2,icon:"ability_warrior_challange",ranks:[19306],requires:[{id:1308,qty:1}]},1303:{id:1303,row:5,col:2,icon:"spell_nature_invisibilty",ranks:[19168,19180,19181,24296,24297],requires:[]},1325:{id:1325,row:6,col:1,icon:"inv_spear_02",ranks:[19386],requires:[{id:1321,qty:3}]}},363:{1341:{id:1341,row:0,col:1,icon:"spell_frost_stun",ranks:[19407,19412,19413,19414,19415],requires:[]},1342:{id:1342,row:0,col:2,icon:"spell_frost_wizardmark",ranks:[19416,19417,19418,19419,19420],requires:[]},1343:{id:1343,row:1,col:1,icon:"ability_hunter_snipershot",ranks:[19421,19422,19423,19424,19425],requires:[]},1344:{id:1344,row:1,col:2,icon:"ability_searingarrow",ranks:[19426,19427,19429,19430,19431],requires:[]},1345:{id:1345,row:2,col:0,icon:"inv_spear_07",ranks:[19434],requires:[]},1346:{id:1346,row:2,col:1,icon:"ability_impalingbolt",ranks:[19454,19455,19456,19457,19458],requires:[]},1352:{id:1352,row:2,col:3,icon:"ability_townwatch",ranks:[19498,19499,19500],requires:[]},1348:{id:1348,row:3,col:1,icon:"ability_hunter_quickshot",ranks:[19464,19465,19466,19467,19468],requires:[]},1349:{id:1349,row:3,col:2,icon:"ability_piercedamage",ranks:[19485,19487,19488,19489,19490],requires:[{id:1344,qty:5}]},1353:{id:1353,row:4,col:0,icon:"ability_golemstormbolt",ranks:[19503],requires:[]},1347:{id:1347,row:4,col:1,icon:"ability_upgrademoonglaive",ranks:[19461,19462,24691],requires:[]},1351:{id:1351,row:4,col:2,icon:"ability_hunter_criticalshot",ranks:[19491,19493,19494],requires:[]},1362:{id:1362,row:5,col:2,icon:"inv_weapon_rifle_06",ranks:[19507,19508,19509,19510,19511],requires:[]},1361:{id:1361,row:6,col:1,icon:"ability_trueshot",ranks:[19506],requires:[{id:1347,qty:3}]}},381:{1401:{id:1401,row:0,col:1,icon:"spell_holy_fistofjustice",ranks:[20042,20045,20046,20047,20048],requires:[]},1407:{id:1407,row:0,col:2,icon:"spell_frost_windwalkon",ranks:[20101,20102,20103,20104,20105],requires:[]},1631:{id:1631,row:1,col:0,icon:"spell_holy_righteousfury",ranks:[25956,25957],requires:[]},1464:{id:1464,row:1,col:1,icon:"spell_holy_holysmite",ranks:[20335,20336,20337],requires:[]},1403:{id:1403,row:1,col:2,icon:"ability_parry",ranks:[20060,20061,20062,20063,20064],requires:[]},1633:{id:1633,row:2,col:0,icon:"spell_holy_vindication",ranks:[9452,26016,26021],requires:[]},1411:{id:1411,row:2,col:1,icon:"spell_holy_retributionaura",ranks:[20117,20118,20119,20120,20121],requires:[]},1481:{id:1481,row:2,col:2,icon:"ability_warrior_innerrage",ranks:[20375],requires:[]},1634:{id:1634,row:2,col:3,icon:"spell_holy_persuitofjustice",ranks:[26022,26023],requires:[]},1632:{id:1632,row:3,col:0,icon:"spell_holy_eyeforaneye",ranks:[9799,25988],requires:[]},1405:{id:1405,row:3,col:2,icon:"spell_holy_auraoflight",ranks:[20091,20092],requires:[]},1410:{id:1410,row:4,col:0,icon:"inv_hammer_04",ranks:[20111,20112,20113],requires:[]},1409:{id:1409,row:4,col:2,icon:"spell_holy_mindvision",ranks:[20218],requires:[]},1402:{id:1402,row:5,col:1,icon:"ability_racial_avatar",ranks:[20049,20056,20057,20058,20059],requires:[{id:1411,qty:5}]},1441:{id:1441,row:6,col:1,icon:"spell_holy_prayerofhealing",ranks:[20066],requires:[]}},382:{1450:{id:1450,row:0,col:1,icon:"ability_golemthunderclap",ranks:[20262,20263,20264,20265,20266],requires:[]},1449:{id:1449,row:0,col:2,icon:"spell_nature_sleep",ranks:[20257,20258,20259,20260,20261],requires:[]},1432:{id:1432,row:1,col:1,icon:"spell_arcane_blink",ranks:[20205,20206,20207,20209,20208],requires:[]},1463:{id:1463,row:1,col:2,icon:"ability_thunderbolt",ranks:[20224,20225,20330,20331,20332],requires:[]},1444:{id:1444,row:2,col:0,icon:"spell_holy_holybolt",ranks:[20237,20238,20239],requires:[]},1435:{id:1435,row:2,col:1,icon:"spell_holy_innerfire",ranks:[26573],requires:[]},1443:{id:1443,row:2,col:2,icon:"spell_holy_layonhands",ranks:[20234,20235],requires:[]},1628:{id:1628,row:2,col:3,icon:"spell_holy_unyieldingfaith",ranks:[9453,25836],requires:[]},1461:{id:1461,row:3,col:1,icon:"spell_holy_greaterheal",ranks:[20210,20212,20213,20214,20215],requires:[]},1446:{id:1446,row:3,col:2,icon:"spell_holy_sealofwisdom",ranks:[20244,20245],requires:[]},1433:{id:1433,row:4,col:1,icon:"spell_holy_heal",ranks:[20216],requires:[{id:1461,qty:5}]},1465:{id:1465,row:4,col:2,icon:"spell_holy_healingaura",ranks:[20359,20360,20361],requires:[]},1627:{id:1627,row:5,col:2,icon:"spell_holy_power",ranks:[5923,5924,5925,5926,25829],requires:[]},1502:{id:1502,row:6,col:1,icon:"spell_holy_searinglight",ranks:[20473],requires:[{id:1433,qty:1}]}},383:{1422:{id:1422,row:0,col:1,icon:"spell_holy_devotionaura",ranks:[20138,20139,20140,20141,20142],requires:[]},1421:{id:1421,row:0,col:2,icon:"ability_defend",ranks:[20127,20130,20135,20136,20137],requires:[]},1630:{id:1630,row:1,col:0,icon:"ability_rogue_ambush",ranks:[20189,20192,20193],requires:[]},1425:{id:1425,row:1,col:1,icon:"spell_holy_sealofprotection",ranks:[20174,20175],requires:[]},1423:{id:1423,row:1,col:3,icon:"spell_holy_devotion",ranks:[20143,20144,20145,20146,20147],requires:[]},1442:{id:1442,row:2,col:0,icon:"spell_magic_magearmor",ranks:[20217],requires:[]},1501:{id:1501,row:2,col:1,icon:"spell_holy_sealoffury",ranks:[20468,20469,20470],requires:[]},1424:{id:1424,row:2,col:2,icon:"inv_shield_06",ranks:[20148,20149,20150],requires:[{id:1421,qty:5}]},1629:{id:1629,row:2,col:3,icon:"spell_magic_lesserinvisibilty",ranks:[20096,20097,20098,20099,20100],requires:[]},1521:{id:1521,row:3,col:1,icon:"spell_holy_sealofmight",ranks:[20487,20488,20489],requires:[]},1626:{id:1626,row:3,col:2,icon:"spell_holy_mindsooth",ranks:[20254,20255,20256],requires:[]},1431:{id:1431,row:4,col:1,icon:"spell_nature_lightningshield",ranks:[20911],requires:[]},1426:{id:1426,row:4,col:2,icon:"spell_holy_blessingofstrength",ranks:[20177,20179,20181,20180,20182],requires:[]},1429:{id:1429,row:5,col:2,icon:"inv_sword_20",ranks:[20196,20197,20198,20199,20200],requires:[]},1430:{id:1430,row:6,col:1,icon:"spell_holy_blessingofprotection",ranks:[20925],requires:[{id:1431,qty:1}]}}},y={},m={},f={};for(var b in h)for(var g in h[b])y[g]=h[b][g],m[b]=Object.values(h[b]),f[g]=parseInt(b,10);var v=i(15),E=i(18),j=[{id:1,name:"Warrior",icon:"class_warrior",specs:[161,164,163]},{id:2,name:"Paladin",icon:"class_paladin",specs:[382,383,381]},{id:3,name:"Hunter",icon:"class_hunter",specs:[361,363,362]},{id:4,name:"Rogue",icon:"class_rogue",specs:[182,181,183]},{id:5,name:"Priest",icon:"class_priest",specs:[201,202,203]},{id:7,name:"Shaman",icon:"class_shaman",specs:[261,263,262]},{id:8,name:"Mage",icon:"class_mage",specs:[81,41,61]},{id:9,name:"Warlock",icon:"class_warlock",specs:[302,303,301]},{id:11,name:"Druid",icon:"class_druid",specs:[283,281,282]}],C=(j.reduce(function(r,e){return Object(E.a)({},r,Object(v.a)({},e.id,e))},{}),j.reduce(function(r,e){return Object(E.a)({},r,Object(v.a)({},e.name.toLowerCase(),e))},{})),O=51,R=function(r,e){return r.row===e.row?r.col-e.col:r.row-e.row};function T(r,e){return Object.values(h[r]).reduce(function(r,i){return r+e.get(i.id,0)},0)}function P(r){return Math.max(0,O-r.reduce(function(r,e){return r+e},0))}function N(r,e){return 0===r.requires.length||r.requires.reduce(function(r,i){return!!r&&e.get(i.id,0)>=i.qty},!0)}var z=function(r,e){return!(r.get(e.id,0)>=e.ranks.length)&&(0!==P(r)&&(!(e.requires.length>0&&!N(e,r))&&!(5*e.row>T(f[e.id],r))))},D=function(r,e,i){return 1===i?function(r,e){var i=r.get(e.id,0);return z(r,e)?r.set(e.id,i+1):r}(r,e):function(r,e){var i=r.get(e.id,0),o=f[e.id];if(0===i)return console.warn("no points to reduce"),r;var s=!1,n=0,l={};r.forEach(function(r,i){var a=h[o][i];if(a&&r>0){s=s||a.requires.some(function(r){return r.id===e.id}),a.row>n&&console.info("new highest row:",a),n=a.row>n?a.row:n;for(var c=a.row;c<7;c++)l[c]=(l[c]||0)+r}});var a=l[n-1],c=5*n;return e.rowd.ranks.length)break;_>0&&(console.log("Spent ".concat(_," in ").concat(d.id)),o=o.set(d.id,_))}}return o}function x(r,e){for(;r[r.length-1]===e;)r=r.slice(0,-1);return r}var I=function(r){var e=r.talent,i=r.specId,o=r.knownTalents,n=r.availablePoints,l=o.get(e.id,0),a=l>0||n>0,c=r.disabled||!a||!function(r,e,i){if(!N(r,i))return!1;var o=T(e,i);return 5*r.row<=o}(e,i,o),t=k()("talent",{"talent--disabled":!!c,"talent--available":!c&&l=e.ranks.length||l>0&&0===n}),d=k()("point-label",{"point-label--enabled":!c});return s.a.createElement("div",{className:t,title:e.ranks[0].toString(),"data-row":e.row,"data-col":e.col,onClick:c?function(){}:function(){return r.onClick(e.id)},onContextMenu:function(i){return r.onRightClick&&r.onRightClick(e.id),i.preventDefault(),!1}},s.a.createElement("div",{className:"talent__status"}),s.a.createElement(q,{name:e.icon,size:"medium"}),a&&!c&&s.a.createElement("div",{className:d},l,"/",e.ranks.length))};I.defaultProps={onClick:function(){},onRightClick:function(){}},I.whyDidYouRender=!0;i(35);var L=function(r){var e=r.from,i=r.to,o=r.active,n=void 0!==o&&o,l=i.row===e.row?Math.abs(i.col-e.col):i.row-e.row,a={"data-col":e.col,"data-row":e.row,"data-length":l},c=k()("arrow",{"arrow--active":n,"arrow--down":i.row>e.row,"arrow--right":i.row===e.row&&i.col>e.col,"arrow--left":i.row===e.row&&i.col0}).map(function(r){return s.a.createElement(L,{key:r.id,from:y[r.requires[0].id],to:r,active:i.get(r.id,0)>0||z(i,r)})});return s.a.createElement("div",{className:"tree"},s.a.createElement("div",{className:"tree__header"},s.a.createElement("h3",null,p[e]," (",T(e,i),")")),s.a.createElement("div",{className:"tree__body",style:d},a.map(function(r){return s.a.createElement(I,{key:r.id,specId:e,talent:r,availablePoints:n,knownTalents:i,onClick:c,onRightClick:t})}),_))};M.whyDidYouRender=!0;var A=Object(u.a)(),H=function(r){function e(){var r,i;Object(a.a)(this,e);for(var o=arguments.length,s=new Array(o),n=0;n0?"-":"",i+=x(m[n].sort(R).map(function(e){return r.get(e.id,0)}).join(""),"0")}return x(i,"-")}(r,e);this.props.history.replace("/".concat(e)+(i?"/".concat(i):""))}},{key:"render",value:function(){var r=this,e=this.props.selectedClass,i=this.state.knownTalents,o=C[e],n=P(i);return s.a.createElement("div",{className:"calculator"},s.a.createElement("div",{className:"trees"},o.specs.map(function(e){return s.a.createElement(M,{key:e,specId:e,availablePoints:n,knownTalents:i,onTalentPress:r.handleTalentPress})})),s.a.createElement("div",{className:"calculator__points"},"Points: ",n),s.a.createElement("ul",null,s.a.createElement("li",null,s.a.createElement("a",{href:"/shaman/-5505000055523051-55"},"Shaman test")),s.a.createElement("li",null,s.a.createElement("a",{href:"/shaman/-5595000055523051-55"},"Shaman test broken")),s.a.createElement("li",null,s.a.createElement("a",{href:"/rogue/-005055-50205302332212051"},"Rogue can unlearn first row"))))}}]),e}(s.a.PureComponent);H.whyDidYouRender=!0;var U=i(16),Y=function(r,e){return k()("class-picker__class",{"class-picker__class--active":r.name.toLowerCase()===e,"class-picker__class--inactive":!!e&&r.name.toLowerCase()!==e})},B=function(r){function e(){return Object(a.a)(this,e),Object(t.a)(this,Object(d.a)(e).apply(this,arguments))}return Object(_.a)(e,r),Object(c.a)(e,[{key:"render",value:function(){var r=this.props.selected,e=k()("class-picker",{"class-picker--has-selection":!!r});return s.a.createElement("ul",{className:e},Object.values(C).map(function(e){return s.a.createElement("li",{key:e.id,className:Y(e,r)},s.a.createElement(U.b,{to:"/".concat(e.name.toLowerCase()),title:e.name},s.a.createElement(q,{name:e.icon,golden:r===e.name.toLowerCase()})))}))}}]),e}(s.a.PureComponent);B.whyDidYouRender=!0;var F=function(r){function e(){return Object(a.a)(this,e),Object(t.a)(this,Object(d.a)(e).apply(this,arguments))}return Object(_.a)(e,r),Object(c.a)(e,[{key:"componentDidMount",value:function(){var r=this.props.match.params.selectedClass;r&&!C[r]&&this.props.history.replace("/")}},{key:"render",value:function(){var r=this.props,e=r.match,i=r.history,o=e.params,n=o.selectedClass,l=o.pointString;return n&&!C[n]?null:s.a.createElement("div",{className:"index"},s.a.createElement(B,{selected:n}),n&&s.a.createElement(H,{initialTalents:l&&S(l,n),selectedClass:n,history:i}))}}]),e}(s.a.PureComponent);F.whyDidYouRender=!0;var W=i(6),J=function(){return s.a.createElement(U.a,null,s.a.createElement("div",{className:"App"},s.a.createElement(W.a,{path:"/:selectedClass?/:pointString?",component:F})))};Boolean("localhost"===window.location.hostname||"[::1]"===window.location.hostname||window.location.hostname.match(/^127(?:\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/));l.a.render(s.a.createElement(J,null),document.getElementById("root")),"serviceWorker"in navigator&&navigator.serviceWorker.ready.then(function(r){r.unregister()})}},[[27,1,2]]]); +//# sourceMappingURL=main.efad2c29.chunk.js.map \ No newline at end of file diff --git a/static/js/main.efad2c29.chunk.js.map b/static/js/main.efad2c29.chunk.js.map new file mode 100644 index 0000000..8ea5f91 --- /dev/null +++ b/static/js/main.efad2c29.chunk.js.map @@ -0,0 +1 @@ +{"version":3,"sources":["components/Icon.tsx","data/talents.ts","data/classes.ts","lib/tree.ts","components/TalentSlot.tsx","components/Arrow.tsx","components/TalentTree.tsx","components/Calculator.tsx","components/ClassPicker.tsx","components/IndexRoute.tsx","App.tsx","serviceWorker.ts","index.tsx"],"names":["Icon","_ref","name","_ref$size","size","_ref$golden","golden","children","className","classNames","concat","icon--golden","bgStyle","backgroundImage","react_default","a","createElement","style","specNames","41","61","81","161","163","164","181","182","183","201","202","203","261","262","263","281","282","283","301","302","303","361","362","363","381","382","383","talentsBySpec","26","id","row","col","icon","ranks","requires","30","34","28","27","1141","31","29","23","25","24","1639","33","32","qty","35","36","70","37","1649","73","38","62","65","69","63","741","66","67","72","64","68","71","74","76","80","78","1650","75","82","85","83","88","1142","86","77","421","87","124","130","127","126","641","128","131","137","121","136","662","132","133","125","123","134","129","135","1601","138","142","140","141","153","145","147","144","146","151","143","150","152","149","702","148","158","157","159","166","160","661","154","1581","1542","155","168","165","1543","1541","156","167","186","187","204","222","206","221","184","223","242","1703","1122","205","276","272","270","273","274","277","278","269","682","268","280","279","241","1700","247","244","245","246","1123","1701","284","265","681","1702","342","345","352","344","343","321","348","347","346","341","350","1201","351","1202","322","410","406","401","411","1181","442","1636","1635","408","403","413","1561","402","404","1637","465","464","466","482","463","542","481","501","483","881","461","541","484","1638","462","521","564","563","572","1640","561","574","575","562","567","1642","1645","1641","565","721","573","586","593","589","581","595","583","587","582","1646","588","594","1648","591","592","590","614","612","609","613","605","607","610","617","601","602","615","1647","611","616","1643","901","796","795","799","797","794","807","804","798","802","803","800","801","805","1162","808","809","821","822","824","823","826","829","827","841","843","830","831","828","842","825","844","762","761","921","787","763","791","781","782","788","764","792","784","789","783","790","793","944","941","943","982","983","984","981","963","985","964","965","986","961","967","966","968","1005","1003","1006","1101","1007","1004","1284","1001","1061","1021","1002","1121","1041","1081","1082","1042","1022","1221","1222","1223","1224","1225","1242","1243","1226","1241","1227","1262","1283","1281","1261","1244","1282","1263","1382","1389","1624","1381","1395","1625","1384","1391","1396","1385","1393","1388","1387","1390","1397","1386","1623","1301","1311","1304","1621","1305","1306","1622","1308","1322","1310","1309","1321","1312","1303","1325","1341","1342","1343","1344","1345","1346","1352","1348","1349","1353","1347","1351","1362","1361","1401","1407","1631","1464","1403","1633","1411","1481","1634","1632","1405","1410","1409","1402","1441","1450","1449","1432","1463","1444","1435","1443","1628","1461","1446","1433","1465","1627","1502","1422","1421","1630","1425","1423","1442","1501","1424","1629","1521","1626","1431","1426","1429","1430","talentsById","talentsBySpecArray","talentToSpec","specId","talentId","Object","values","parseInt","classes","specs","classByName","reduce","previousValue","currentValue","objectSpread","defineProperty","toLowerCase","MAX_POINTS","SORT_TALENTS","b","getPointsInSpec","known","prev","current","get","calcAvailablePoints","Math","max","calcMeetsRequirements","talent","length","req","canLearnTalent","modifyTalentPoint","modifier","currentPoints","set","addTalentPoint","console","warn","isDependency","highestRow","cumulativePointsPerRow","forEach","points","t","some","info","pointsUntilHighestRow","targetPointsHighestRow","remove","removeTalentPoint","decodeKnownTalents","pointString","log","Map","parts","split","i","specPointStr","talents","sort","y","removeTrailingCharacters","str","char","slice","TalentSlot","props","knownTalents","availablePoints","showPoints","disabled","pointsInSpec","isAvailable","containerClassNames","talent--disabled","talent--available","talent--maxed","pointsClassNames","point-label--enabled","title","toString","data-row","data-col","onClick","onContextMenu","e","onRightClick","preventDefault","Icon_Icon","defaultProps","whyDidYouRender","Arrow","from","to","_ref$active","active","abs","data-length","arrow--active","arrow--down","arrow--right","arrow--left","arrow--right-down","assign","TalentTree","onTalentPress","handleClick","useCallback","handleRightClick","bodyStyle","arrows","filter","map","Arrow_Arrow","key","TalentSlot_TalentSlot","EMPTY_TALENTS","Calculator","_React$PureComponent","_getPrototypeOf2","_this","classCallCheck","this","_len","arguments","args","Array","_key","possibleConstructorReturn","getPrototypeOf","call","apply","state","handleTalentPress","newKnownTalents","updateURL","setState","inherits","createClass","value","initialTalents","prevProps","selectedClass","string","join","encodeKnownTalents","history","replace","_this2","classData","TalentTree_TalentTree","href","React","PureComponent","classNameForItem","c","selected","class-picker__class--active","class-picker__class--inactive","ClassPicker","cn","class-picker--has-selection","react_router_dom","IndexRoute","match","params","_this$props","_match$params","ClassPicker_ClassPicker","Calculator_Calculator","App","react_router","path","component","Boolean","window","location","hostname","ReactDOM","render","src_App_0","document","getElementById","navigator","serviceWorker","ready","then","registration","unregister"],"mappings":"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","file":"static/js/main.efad2c29.chunk.js","sourcesContent":["import React, { FC } from 'react'\nimport classNames from 'classnames'\nimport './Icon.scss'\n\ninterface Props {\n name: string\n size?: 'small' | 'medium' | 'large'\n golden?: boolean\n}\n\nexport const Icon: FC = ({ name, size = 'medium', golden = false, children }) => {\n const className = classNames(\n 'icon', \n `icon--${size}`, {\n 'icon--golden': golden\n }\n )\n\n const bgSize = size === 'medium' ? 'large' : 'medium'\n const bgStyle = {\n backgroundImage: `url(https://wow.zamimg.com/images/wow/icons/${bgSize}/${name}.jpg)`\n }\n\n return (\n
\n
\n
\n {children}\n
\n )\n}","interface Root {\n /** ID of the talent tree */\n [key: number]: {\n /** ID of the talent */\n [key: number]: TalentData\n }\n}\n\nexport const specNames = {\n 41: \"Fire\",\n 61: \"Frost\",\n 81: \"Arcane\",\n 161: \"Arms\",\n 163: \"Protection\",\n 164: \"Fury\",\n 181: \"Combat\",\n 182: \"Assassination\",\n 183: \"Subtlety\",\n 201: \"Discipline\",\n 202: \"Holy\",\n 203: \"Shadow\",\n 261: \"Elemental\",\n 262: \"Restoration\",\n 263: \"Enhancement\",\n 281: \"Feral Combat\",\n 282: \"Restoration\",\n 283: \"Balance\",\n 301: \"Destruction\",\n 302: \"Affliction\",\n 303: \"Demonology\",\n 361: \"Beast Mastery\",\n 362: \"Survival\",\n 363: \"Marksmanship\",\n 381: \"Retribution\",\n 382: \"Holy\",\n 383: \"Protection\"\n}\n\nexport const talentsBySpec: Root = {\n 41: {\n 26: {\n \"id\": 26,\n \"row\": 0,\n \"col\": 1,\n \"icon\": \"spell_fire_flamebolt\",\n \"ranks\": [11069, 12338, 12339, 12340, 12341],\n \"requires\": []\n },\n 30: {\n \"id\": 30,\n \"row\": 0,\n \"col\": 2,\n \"icon\": \"spell_fire_meteorstorm\",\n \"ranks\": [11103, 12357, 12358, 12359, 12360],\n \"requires\": []\n },\n 34: {\n \"id\": 34,\n \"row\": 1,\n \"col\": 0,\n \"icon\": \"spell_fire_incinerate\",\n \"ranks\": [11119, 11120, 12846, 12847, 12848],\n \"requires\": []\n },\n 28: {\n \"id\": 28,\n \"row\": 1,\n \"col\": 1,\n \"icon\": \"spell_fire_flare\",\n \"ranks\": [11100, 12353],\n \"requires\": []\n },\n 27: {\n \"id\": 27,\n \"row\": 1,\n \"col\": 2,\n \"icon\": \"spell_fire_fireball\",\n \"ranks\": [11078, 11080, 12342],\n \"requires\": []\n },\n 1141: {\n \"id\": 1141,\n \"row\": 2,\n \"col\": 0,\n \"icon\": \"spell_fire_flameshock\",\n \"ranks\": [18459, 18460],\n \"requires\": []\n },\n 31: {\n \"id\": 31,\n \"row\": 2,\n \"col\": 1,\n \"icon\": \"spell_fire_selfdestruct\",\n \"ranks\": [11108, 12349, 12350],\n \"requires\": []\n },\n 29: {\n \"id\": 29,\n \"row\": 2,\n \"col\": 2,\n \"icon\": \"spell_fire_fireball02\",\n \"ranks\": [11366],\n \"requires\": []\n },\n 23: {\n \"id\": 23,\n \"row\": 2,\n \"col\": 3,\n \"icon\": \"spell_fire_fire\",\n \"ranks\": [11083, 12351],\n \"requires\": []\n },\n 25: {\n \"id\": 25,\n \"row\": 3,\n \"col\": 0,\n \"icon\": \"spell_fire_soulburn\",\n \"ranks\": [11095, 12872, 12873],\n \"requires\": []\n },\n 24: {\n \"id\": 24,\n \"row\": 3,\n \"col\": 1,\n \"icon\": \"spell_fire_firearmor\",\n \"ranks\": [11094, 13043],\n \"requires\": []\n },\n 1639: {\n \"id\": 1639,\n \"row\": 3,\n \"col\": 3,\n \"icon\": \"spell_fire_masterofelements\",\n \"ranks\": [29074, 29075, 29076],\n \"requires\": []\n },\n 33: {\n \"id\": 33,\n \"row\": 4,\n \"col\": 1,\n \"icon\": \"spell_nature_wispheal\",\n \"ranks\": [11115, 11367, 11368],\n \"requires\": []\n },\n 32: {\n \"id\": 32,\n \"row\": 4,\n \"col\": 2,\n \"icon\": \"spell_holy_excorcism_02\",\n \"ranks\": [11113],\n \"requires\": [{\n \"id\": 29,\n \"qty\": 1\n }]\n },\n 35: {\n \"id\": 35,\n \"row\": 5,\n \"col\": 2,\n \"icon\": \"spell_fire_immolation\",\n \"ranks\": [11124, 12378, 12398, 12399, 12400],\n \"requires\": []\n },\n 36: {\n \"id\": 36,\n \"row\": 6,\n \"col\": 1,\n \"icon\": \"spell_fire_sealoffire\",\n \"ranks\": [11129],\n \"requires\": [{\n \"id\": 33,\n \"qty\": 3\n }]\n }\n },\n 61: {\n 70: {\n \"id\": 70,\n \"row\": 0,\n \"col\": 0,\n \"icon\": \"spell_frost_frostward\",\n \"ranks\": [11189, 28332],\n \"requires\": []\n },\n 37: {\n \"id\": 37,\n \"row\": 0,\n \"col\": 1,\n \"icon\": \"spell_frost_frostbolt02\",\n \"ranks\": [11070, 12473, 16763, 16765, 16766],\n \"requires\": []\n },\n 1649: {\n \"id\": 1649,\n \"row\": 0,\n \"col\": 2,\n \"icon\": \"spell_ice_magicdamage\",\n \"ranks\": [29438, 29439, 29440],\n \"requires\": []\n },\n 73: {\n \"id\": 73,\n \"row\": 1,\n \"col\": 0,\n \"icon\": \"spell_frost_iceshard\",\n \"ranks\": [11207, 12672, 15047, 15052, 15053],\n \"requires\": []\n },\n 38: {\n \"id\": 38,\n \"row\": 1,\n \"col\": 1,\n \"icon\": \"spell_frost_frostarmor\",\n \"ranks\": [11071, 12496, 12497],\n \"requires\": []\n },\n 62: {\n \"id\": 62,\n \"row\": 1,\n \"col\": 2,\n \"icon\": \"spell_frost_freezingbreath\",\n \"ranks\": [11165, 12475],\n \"requires\": []\n },\n 65: {\n \"id\": 65,\n \"row\": 1,\n \"col\": 3,\n \"icon\": \"spell_frost_wisp\",\n \"ranks\": [11175, 12569, 12571],\n \"requires\": []\n },\n 61: {\n \"id\": 61,\n \"row\": 2,\n \"col\": 0,\n \"icon\": \"spell_frost_frostbolt\",\n \"ranks\": [11151, 12952, 12953],\n \"requires\": []\n },\n 69: {\n \"id\": 69,\n \"row\": 2,\n \"col\": 1,\n \"icon\": \"spell_frost_wizardmark\",\n \"ranks\": [12472],\n \"requires\": []\n },\n 63: {\n \"id\": 63,\n \"row\": 2,\n \"col\": 3,\n \"icon\": \"spell_frost_icestorm\",\n \"ranks\": [11185, 12487, 12488],\n \"requires\": []\n },\n 741: {\n \"id\": 741,\n \"row\": 3,\n \"col\": 0,\n \"icon\": \"spell_shadow_darkritual\",\n \"ranks\": [16757, 16758],\n \"requires\": []\n },\n 66: {\n \"id\": 66,\n \"row\": 3,\n \"col\": 1,\n \"icon\": \"spell_frost_stun\",\n \"ranks\": [11160, 12518, 12519],\n \"requires\": []\n },\n 67: {\n \"id\": 67,\n \"row\": 3,\n \"col\": 2,\n \"icon\": \"spell_frost_frostshock\",\n \"ranks\": [11170, 12982, 12983, 12984, 12985],\n \"requires\": [{\n \"id\": 62,\n \"qty\": 2\n }]\n },\n 72: {\n \"id\": 72,\n \"row\": 4,\n \"col\": 1,\n \"icon\": \"spell_frost_frost\",\n \"ranks\": [11958],\n \"requires\": []\n },\n 64: {\n \"id\": 64,\n \"row\": 4,\n \"col\": 2,\n \"icon\": \"spell_frost_glacier\",\n \"ranks\": [11190, 12489, 12490],\n \"requires\": []\n },\n 68: {\n \"id\": 68,\n \"row\": 5,\n \"col\": 2,\n \"icon\": \"spell_frost_chillingblast\",\n \"ranks\": [11180, 28592, 28593, 28594, 28595],\n \"requires\": []\n },\n 71: {\n \"id\": 71,\n \"row\": 6,\n \"col\": 1,\n \"icon\": \"spell_ice_lament\",\n \"ranks\": [11426],\n \"requires\": [{\n \"id\": 72,\n \"qty\": 1\n }]\n }\n },\n 81: {\n 74: {\n \"id\": 74,\n \"row\": 0,\n \"col\": 0,\n \"icon\": \"spell_holy_dispelmagic\",\n \"ranks\": [11210, 12592],\n \"requires\": []\n },\n 76: {\n \"id\": 76,\n \"row\": 0,\n \"col\": 1,\n \"icon\": \"spell_holy_devotion\",\n \"ranks\": [11222, 12839, 12840, 12841, 12842],\n \"requires\": []\n },\n 80: {\n \"id\": 80,\n \"row\": 0,\n \"col\": 2,\n \"icon\": \"spell_nature_starfall\",\n \"ranks\": [11237, 12463, 12464, 16769, 16770],\n \"requires\": []\n },\n 78: {\n \"id\": 78,\n \"row\": 1,\n \"col\": 0,\n \"icon\": \"inv_wand_01\",\n \"ranks\": [6057, 6085],\n \"requires\": []\n },\n 1650: {\n \"id\": 1650,\n \"row\": 1,\n \"col\": 1,\n \"icon\": \"spell_nature_astralrecalgroup\",\n \"ranks\": [29441, 29444, 29445, 29446, 29447],\n \"requires\": []\n },\n 75: {\n \"id\": 75,\n \"row\": 1,\n \"col\": 2,\n \"icon\": \"spell_shadow_manaburn\",\n \"ranks\": [11213, 12574, 12575, 12576, 12577],\n \"requires\": []\n },\n 82: {\n \"id\": 82,\n \"row\": 2,\n \"col\": 0,\n \"icon\": \"spell_nature_abolishmagic\",\n \"ranks\": [11247, 12606],\n \"requires\": []\n },\n 81: {\n \"id\": 81,\n \"row\": 2,\n \"col\": 1,\n \"icon\": \"spell_nature_wispsplode\",\n \"ranks\": [11242, 12467, 12469],\n \"requires\": []\n },\n 85: {\n \"id\": 85,\n \"row\": 2,\n \"col\": 2,\n \"icon\": \"spell_arcane_arcaneresilience\",\n \"ranks\": [28574],\n \"requires\": []\n },\n 83: {\n \"id\": 83,\n \"row\": 3,\n \"col\": 0,\n \"icon\": \"spell_shadow_detectlesserinvisibility\",\n \"ranks\": [11252, 12605],\n \"requires\": []\n },\n 88: {\n \"id\": 88,\n \"row\": 3,\n \"col\": 1,\n \"icon\": \"spell_frost_iceshock\",\n \"ranks\": [11255, 12598],\n \"requires\": []\n },\n 1142: {\n \"id\": 1142,\n \"row\": 3,\n \"col\": 3,\n \"icon\": \"spell_shadow_siphonmana\",\n \"ranks\": [18462, 18463, 18464],\n \"requires\": []\n },\n 86: {\n \"id\": 86,\n \"row\": 4,\n \"col\": 1,\n \"icon\": \"spell_nature_enchantarmor\",\n \"ranks\": [12043],\n \"requires\": []\n },\n 77: {\n \"id\": 77,\n \"row\": 4,\n \"col\": 2,\n \"icon\": \"spell_shadow_charm\",\n \"ranks\": [11232, 12500, 12501, 12502, 12503],\n \"requires\": [{\n \"id\": 85,\n \"qty\": 1\n }]\n },\n 421: {\n \"id\": 421,\n \"row\": 5,\n \"col\": 1,\n \"icon\": \"spell_shadow_teleport\",\n \"ranks\": [15058, 15059, 15060],\n \"requires\": [{\n \"id\": 86,\n \"qty\": 1\n }]\n },\n 87: {\n \"id\": 87,\n \"row\": 6,\n \"col\": 1,\n \"icon\": \"spell_nature_lightning\",\n \"ranks\": [12042],\n \"requires\": [{\n \"id\": 421,\n \"qty\": 3\n }]\n }\n },\n 161: {\n 124: {\n \"id\": 124,\n \"row\": 0,\n \"col\": 0,\n \"icon\": \"ability_rogue_ambush\",\n \"ranks\": [12282, 12663, 12664],\n \"requires\": []\n },\n 130: {\n \"id\": 130,\n \"row\": 0,\n \"col\": 1,\n \"icon\": \"ability_parry\",\n \"ranks\": [16462, 16463, 16464, 16465, 16466],\n \"requires\": []\n },\n 127: {\n \"id\": 127,\n \"row\": 0,\n \"col\": 2,\n \"icon\": \"ability_gouge\",\n \"ranks\": [12286, 12658, 12659],\n \"requires\": []\n },\n 126: {\n \"id\": 126,\n \"row\": 1,\n \"col\": 0,\n \"icon\": \"ability_warrior_charge\",\n \"ranks\": [12285, 12697],\n \"requires\": []\n },\n 641: {\n \"id\": 641,\n \"row\": 1,\n \"col\": 1,\n \"icon\": \"spell_nature_enchantarmor\",\n \"ranks\": [12295, 12676, 12677, 12678, 12679],\n \"requires\": []\n },\n 128: {\n \"id\": 128,\n \"row\": 1,\n \"col\": 3,\n \"icon\": \"ability_thunderclap\",\n \"ranks\": [12287, 12665, 12666],\n \"requires\": []\n },\n 131: {\n \"id\": 131,\n \"row\": 2,\n \"col\": 0,\n \"icon\": \"inv_sword_05\",\n \"ranks\": [12290, 12963],\n \"requires\": []\n },\n 137: {\n \"id\": 137,\n \"row\": 2,\n \"col\": 1,\n \"icon\": \"spell_holy_blessingofstamina\",\n \"ranks\": [12296],\n \"requires\": [{\n \"id\": 641,\n \"qty\": 5\n }]\n },\n 121: {\n \"id\": 121,\n \"row\": 2,\n \"col\": 2,\n \"icon\": \"ability_backstab\",\n \"ranks\": [12834, 12849, 12867],\n \"requires\": [{\n \"id\": 127,\n \"qty\": 3\n }]\n },\n 136: {\n \"id\": 136,\n \"row\": 3,\n \"col\": 1,\n \"icon\": \"inv_axe_09\",\n \"ranks\": [12163, 12711, 12712, 12713, 12714],\n \"requires\": []\n },\n 662: {\n \"id\": 662,\n \"row\": 3,\n \"col\": 2,\n \"icon\": \"ability_searingarrow\",\n \"ranks\": [16493, 16494],\n \"requires\": [{\n \"id\": 121,\n \"qty\": 3\n }]\n },\n 132: {\n \"id\": 132,\n \"row\": 4,\n \"col\": 0,\n \"icon\": \"inv_axe_06\",\n \"ranks\": [12700, 12781, 12783, 12784, 12785],\n \"requires\": []\n },\n 133: {\n \"id\": 133,\n \"row\": 4,\n \"col\": 1,\n \"icon\": \"ability_rogue_slicedice\",\n \"ranks\": [12292],\n \"requires\": []\n },\n 125: {\n \"id\": 125,\n \"row\": 4,\n \"col\": 2,\n \"icon\": \"inv_mace_01\",\n \"ranks\": [12284, 12701, 12702, 12703, 12704],\n \"requires\": []\n },\n 123: {\n \"id\": 123,\n \"row\": 4,\n \"col\": 3,\n \"icon\": \"inv_sword_27\",\n \"ranks\": [12281, 12812, 12813, 12814, 12815],\n \"requires\": []\n },\n 134: {\n \"id\": 134,\n \"row\": 5,\n \"col\": 0,\n \"icon\": \"inv_weapon_halbard_01\",\n \"ranks\": [12165, 12830, 12831, 12832, 12833],\n \"requires\": []\n },\n 129: {\n \"id\": 129,\n \"row\": 5,\n \"col\": 2,\n \"icon\": \"ability_shockwave\",\n \"ranks\": [12289, 12668, 23695],\n \"requires\": []\n },\n 135: {\n \"id\": 135,\n \"row\": 6,\n \"col\": 1,\n \"icon\": \"ability_warrior_savageblow\",\n \"ranks\": [12294],\n \"requires\": [{\n \"id\": 133,\n \"qty\": 1\n }]\n }\n },\n 163: {\n 1601: {\n \"id\": 1601,\n \"row\": 0,\n \"col\": 1,\n \"icon\": \"inv_shield_06\",\n \"ranks\": [12298, 12724, 12725, 12726, 12727],\n \"requires\": []\n },\n 138: {\n \"id\": 138,\n \"row\": 0,\n \"col\": 2,\n \"icon\": \"spell_nature_mirrorimage\",\n \"ranks\": [12297, 12750, 12751, 12752, 12753],\n \"requires\": []\n },\n 142: {\n \"id\": 142,\n \"row\": 1,\n \"col\": 0,\n \"icon\": \"ability_racial_bloodrage\",\n \"ranks\": [12301, 12818],\n \"requires\": []\n },\n 140: {\n \"id\": 140,\n \"row\": 1,\n \"col\": 2,\n \"icon\": \"spell_holy_devotion\",\n \"ranks\": [12299, 12761, 12762, 12763, 12764],\n \"requires\": []\n },\n 141: {\n \"id\": 141,\n \"row\": 1,\n \"col\": 3,\n \"icon\": \"spell_magic_magearmor\",\n \"ranks\": [12300, 12959, 12960, 12961, 12962],\n \"requires\": []\n },\n 153: {\n \"id\": 153,\n \"row\": 2,\n \"col\": 0,\n \"icon\": \"spell_holy_ashestoashes\",\n \"ranks\": [12975],\n \"requires\": [{\n \"id\": 142,\n \"qty\": 2\n }]\n },\n 145: {\n \"id\": 145,\n \"row\": 2,\n \"col\": 1,\n \"icon\": \"ability_defend\",\n \"ranks\": [12945, 12307, 12944],\n \"requires\": [{\n \"id\": 1601,\n \"qty\": 5\n }]\n },\n 147: {\n \"id\": 147,\n \"row\": 2,\n \"col\": 2,\n \"icon\": \"ability_warrior_revenge\",\n \"ranks\": [12797, 12799, 12800],\n \"requires\": []\n },\n 144: {\n \"id\": 144,\n \"row\": 2,\n \"col\": 3,\n \"icon\": \"ability_warrior_innerrage\",\n \"ranks\": [12303, 12788, 12789, 12791, 12792],\n \"requires\": []\n },\n 146: {\n \"id\": 146,\n \"row\": 3,\n \"col\": 0,\n \"icon\": \"ability_warrior_sunder\",\n \"ranks\": [12308, 12810, 12811],\n \"requires\": []\n },\n 151: {\n \"id\": 151,\n \"row\": 3,\n \"col\": 1,\n \"icon\": \"ability_warrior_disarm\",\n \"ranks\": [12313, 12804, 12807],\n \"requires\": []\n },\n 143: {\n \"id\": 143,\n \"row\": 3,\n \"col\": 2,\n \"icon\": \"spell_nature_reincarnation\",\n \"ranks\": [12302, 12765],\n \"requires\": []\n },\n 150: {\n \"id\": 150,\n \"row\": 4,\n \"col\": 0,\n \"icon\": \"ability_warrior_shieldwall\",\n \"ranks\": [12312, 12803],\n \"requires\": []\n },\n 152: {\n \"id\": 152,\n \"row\": 4,\n \"col\": 1,\n \"icon\": \"ability_thunderbolt\",\n \"ranks\": [12809],\n \"requires\": []\n },\n 149: {\n \"id\": 149,\n \"row\": 4,\n \"col\": 2,\n \"icon\": \"ability_warrior_shieldbash\",\n \"ranks\": [12311, 12958],\n \"requires\": []\n },\n 702: {\n \"id\": 702,\n \"row\": 5,\n \"col\": 2,\n \"icon\": \"inv_sword_20\",\n \"ranks\": [16538, 16539, 16540, 16541, 16542],\n \"requires\": []\n },\n 148: {\n \"id\": 148,\n \"row\": 6,\n \"col\": 1,\n \"icon\": \"inv_shield_05\",\n \"ranks\": [23922],\n \"requires\": [{\n \"id\": 152,\n \"qty\": 1\n }]\n }\n },\n 164: {\n 158: {\n \"id\": 158,\n \"row\": 0,\n \"col\": 1,\n \"icon\": \"spell_nature_purge\",\n \"ranks\": [12321, 12835, 12836, 12837, 12838],\n \"requires\": []\n },\n 157: {\n \"id\": 157,\n \"row\": 0,\n \"col\": 2,\n \"icon\": \"ability_rogue_eviscerate\",\n \"ranks\": [12320, 12852, 12853, 12855, 12856],\n \"requires\": []\n },\n 161: {\n \"id\": 161,\n \"row\": 1,\n \"col\": 1,\n \"icon\": \"ability_warrior_warcry\",\n \"ranks\": [12324, 12876, 12877, 12878, 12879],\n \"requires\": []\n },\n 159: {\n \"id\": 159,\n \"row\": 1,\n \"col\": 2,\n \"icon\": \"spell_nature_stoneclawtotem\",\n \"ranks\": [12322, 12999, 13000, 13001, 13002],\n \"requires\": []\n },\n 166: {\n \"id\": 166,\n \"row\": 2,\n \"col\": 0,\n \"icon\": \"ability_warrior_cleave\",\n \"ranks\": [12329, 12950, 20496],\n \"requires\": []\n },\n 160: {\n \"id\": 160,\n \"row\": 2,\n \"col\": 1,\n \"icon\": \"spell_shadow_deathscream\",\n \"ranks\": [12323],\n \"requires\": []\n },\n 661: {\n \"id\": 661,\n \"row\": 2,\n \"col\": 2,\n \"icon\": \"spell_shadow_summonimp\",\n \"ranks\": [16487, 16489, 16492],\n \"requires\": []\n },\n 154: {\n \"id\": 154,\n \"row\": 2,\n \"col\": 3,\n \"icon\": \"ability_warrior_battleshout\",\n \"ranks\": [12318, 12857, 12858, 12860, 12861],\n \"requires\": []\n },\n 1581: {\n \"id\": 1581,\n \"row\": 3,\n \"col\": 0,\n \"icon\": \"ability_dualwield\",\n \"ranks\": [23584, 23585, 23586, 23587, 23588],\n \"requires\": []\n },\n 1542: {\n \"id\": 1542,\n \"row\": 3,\n \"col\": 1,\n \"icon\": \"inv_sword_48\",\n \"ranks\": [20502, 20503],\n \"requires\": []\n },\n 155: {\n \"id\": 155,\n \"row\": 3,\n \"col\": 2,\n \"icon\": \"spell_shadow_unholyfrenzy\",\n \"ranks\": [12317, 13045, 13046, 13047, 13048],\n \"requires\": []\n },\n 168: {\n \"id\": 168,\n \"row\": 4,\n \"col\": 0,\n \"icon\": \"ability_warrior_decisivestrike\",\n \"ranks\": [12862, 12330, 20497, 20498, 20499],\n \"requires\": []\n },\n 165: {\n \"id\": 165,\n \"row\": 4,\n \"col\": 1,\n \"icon\": \"spell_shadow_deathpact\",\n \"ranks\": [12328],\n \"requires\": []\n },\n 1543: {\n \"id\": 1543,\n \"row\": 4,\n \"col\": 3,\n \"icon\": \"ability_rogue_sprint\",\n \"ranks\": [20504, 20505],\n \"requires\": []\n },\n 1541: {\n \"id\": 1541,\n \"row\": 5,\n \"col\": 0,\n \"icon\": \"spell_nature_ancestralguardian\",\n \"ranks\": [20500, 20501],\n \"requires\": []\n },\n 156: {\n \"id\": 156,\n \"row\": 5,\n \"col\": 2,\n \"icon\": \"ability_ghoulfrenzy\",\n \"ranks\": [12319, 12971, 12972, 12973, 12974],\n \"requires\": [{\n \"id\": 155,\n \"qty\": 5\n }]\n },\n 167: {\n \"id\": 167,\n \"row\": 6,\n \"col\": 1,\n \"icon\": \"spell_nature_bloodlust\",\n \"ranks\": [23881],\n \"requires\": [{\n \"id\": 165,\n \"qty\": 1\n }]\n }\n },\n 181: {\n 203: {\n \"id\": 203,\n \"row\": 0,\n \"col\": 0,\n \"icon\": \"ability_gouge\",\n \"ranks\": [13741, 13793, 13792],\n \"requires\": []\n },\n 201: {\n \"id\": 201,\n \"row\": 0,\n \"col\": 1,\n \"icon\": \"spell_shadow_ritualofsacrifice\",\n \"ranks\": [13732, 13863],\n \"requires\": []\n },\n 186: {\n \"id\": 186,\n \"row\": 0,\n \"col\": 2,\n \"icon\": \"spell_nature_invisibilty\",\n \"ranks\": [13712, 13788, 13789, 13790, 13791],\n \"requires\": []\n },\n 202: {\n \"id\": 202,\n \"row\": 1,\n \"col\": 0,\n \"icon\": \"ability_backstab\",\n \"ranks\": [13733, 13865, 13866],\n \"requires\": []\n },\n 187: {\n \"id\": 187,\n \"row\": 1,\n \"col\": 1,\n \"icon\": \"ability_parry\",\n \"ranks\": [13713, 13853, 13854, 13855, 13856],\n \"requires\": []\n },\n 181: {\n \"id\": 181,\n \"row\": 1,\n \"col\": 2,\n \"icon\": \"ability_marksmanship\",\n \"ranks\": [13705, 13832, 13843, 13844, 13845],\n \"requires\": []\n },\n 204: {\n \"id\": 204,\n \"row\": 2,\n \"col\": 0,\n \"icon\": \"spell_shadow_shadowward\",\n \"ranks\": [13742, 13872],\n \"requires\": []\n },\n 301: {\n \"id\": 301,\n \"row\": 2,\n \"col\": 1,\n \"icon\": \"ability_warrior_challange\",\n \"ranks\": [14251],\n \"requires\": [{\n \"id\": 187,\n \"qty\": 5\n }]\n },\n 222: {\n \"id\": 222,\n \"row\": 2,\n \"col\": 3,\n \"icon\": \"ability_rogue_sprint\",\n \"ranks\": [13743, 13875],\n \"requires\": []\n },\n 206: {\n \"id\": 206,\n \"row\": 3,\n \"col\": 0,\n \"icon\": \"ability_kick\",\n \"ranks\": [13754, 13867],\n \"requires\": []\n },\n 182: {\n \"id\": 182,\n \"row\": 3,\n \"col\": 1,\n \"icon\": \"inv_weapon_shortblade_05\",\n \"ranks\": [13706, 13804, 13805, 13806, 13807],\n \"requires\": []\n },\n 221: {\n \"id\": 221,\n \"row\": 3,\n \"col\": 2,\n \"icon\": \"ability_dualwield\",\n \"ranks\": [13715, 13848, 13849, 13851, 13852],\n \"requires\": [{\n \"id\": 181,\n \"qty\": 5\n }]\n },\n 184: {\n \"id\": 184,\n \"row\": 4,\n \"col\": 0,\n \"icon\": \"inv_mace_01\",\n \"ranks\": [13709, 13800, 13801, 13802, 13803],\n \"requires\": []\n },\n 223: {\n \"id\": 223,\n \"row\": 4,\n \"col\": 1,\n \"icon\": \"ability_warrior_punishingblow\",\n \"ranks\": [13877],\n \"requires\": []\n },\n 242: {\n \"id\": 242,\n \"row\": 4,\n \"col\": 2,\n \"icon\": \"inv_sword_27\",\n \"ranks\": [13960, 13961, 13962, 13963, 13964],\n \"requires\": []\n },\n 183: {\n \"id\": 183,\n \"row\": 4,\n \"col\": 3,\n \"icon\": \"inv_gauntlets_04\",\n \"ranks\": [13707, 13966, 13967, 13968, 13969],\n \"requires\": []\n },\n 1703: {\n \"id\": 1703,\n \"row\": 5,\n \"col\": 1,\n \"icon\": \"spell_holy_blessingofstrength\",\n \"ranks\": [30919, 30920],\n \"requires\": [{\n \"id\": 223,\n \"qty\": 1\n }]\n },\n 1122: {\n \"id\": 1122,\n \"row\": 5,\n \"col\": 2,\n \"icon\": \"ability_racial_avatar\",\n \"ranks\": [18427, 18428, 18429],\n \"requires\": []\n },\n 205: {\n \"id\": 205,\n \"row\": 6,\n \"col\": 1,\n \"icon\": \"spell_shadow_shadowworddominate\",\n \"ranks\": [13750],\n \"requires\": []\n }\n },\n 182: {\n 276: {\n \"id\": 276,\n \"row\": 0,\n \"col\": 0,\n \"icon\": \"ability_rogue_eviscerate\",\n \"ranks\": [14162, 14163, 14164],\n \"requires\": []\n },\n 272: {\n \"id\": 272,\n \"row\": 0,\n \"col\": 1,\n \"icon\": \"ability_fiegndead\",\n \"ranks\": [14144, 14148],\n \"requires\": []\n },\n 270: {\n \"id\": 270,\n \"row\": 0,\n \"col\": 2,\n \"icon\": \"ability_racial_bloodrage\",\n \"ranks\": [14138, 14139, 14140, 14141, 14142],\n \"requires\": []\n },\n 273: {\n \"id\": 273,\n \"row\": 1,\n \"col\": 0,\n \"icon\": \"ability_druid_disembowel\",\n \"ranks\": [14156, 14160, 14161],\n \"requires\": []\n },\n 274: {\n \"id\": 274,\n \"row\": 1,\n \"col\": 1,\n \"icon\": \"spell_shadow_deathscream\",\n \"ranks\": [14158, 14159],\n \"requires\": []\n },\n 277: {\n \"id\": 277,\n \"row\": 1,\n \"col\": 3,\n \"icon\": \"ability_rogue_slicedice\",\n \"ranks\": [14165, 14166, 14167],\n \"requires\": []\n },\n 281: {\n \"id\": 281,\n \"row\": 2,\n \"col\": 0,\n \"icon\": \"ability_warrior_decisivestrike\",\n \"ranks\": [14179],\n \"requires\": []\n },\n 278: {\n \"id\": 278,\n \"row\": 2,\n \"col\": 1,\n \"icon\": \"ability_warrior_riposte\",\n \"ranks\": [14168, 14169],\n \"requires\": []\n },\n 269: {\n \"id\": 269,\n \"row\": 2,\n \"col\": 2,\n \"icon\": \"ability_criticalstrike\",\n \"ranks\": [14128, 14132, 14135, 14136, 14137],\n \"requires\": [{\n \"id\": 270,\n \"qty\": 5\n }]\n },\n 682: {\n \"id\": 682,\n \"row\": 3,\n \"col\": 1,\n \"icon\": \"ability_rogue_feigndeath\",\n \"ranks\": [16513, 16514, 16515, 16719, 16720],\n \"requires\": []\n },\n 268: {\n \"id\": 268,\n \"row\": 3,\n \"col\": 2,\n \"icon\": \"ability_poisons\",\n \"ranks\": [14113, 14114, 14115, 14116, 14117],\n \"requires\": []\n },\n 280: {\n \"id\": 280,\n \"row\": 4,\n \"col\": 1,\n \"icon\": \"spell_ice_lament\",\n \"ranks\": [14177],\n \"requires\": []\n },\n 279: {\n \"id\": 279,\n \"row\": 4,\n \"col\": 2,\n \"icon\": \"ability_rogue_kidneyshot\",\n \"ranks\": [14174, 14175, 14176],\n \"requires\": []\n },\n 283: {\n \"id\": 283,\n \"row\": 5,\n \"col\": 1,\n \"icon\": \"spell_shadow_chilltouch\",\n \"ranks\": [14186, 14190, 14193, 14194, 14195],\n \"requires\": [{\n \"id\": 280,\n \"qty\": 1\n }]\n },\n 382: {\n \"id\": 382,\n \"row\": 6,\n \"col\": 1,\n \"icon\": \"spell_nature_earthbindtotem\",\n \"ranks\": [14983],\n \"requires\": []\n }\n },\n 183: {\n 241: {\n \"id\": 241,\n \"row\": 0,\n \"col\": 1,\n \"icon\": \"spell_shadow_charm\",\n \"ranks\": [13958, 13970, 13971, 13972, 13973],\n \"requires\": []\n },\n 261: {\n \"id\": 261,\n \"row\": 0,\n \"col\": 2,\n \"icon\": \"ability_warrior_warcry\",\n \"ranks\": [14057, 14072, 14073, 14074, 14075],\n \"requires\": []\n },\n 1700: {\n \"id\": 1700,\n \"row\": 1,\n \"col\": 0,\n \"icon\": \"ability_rogue_feint\",\n \"ranks\": [30892, 30893],\n \"requires\": []\n },\n 247: {\n \"id\": 247,\n \"row\": 1,\n \"col\": 1,\n \"icon\": \"spell_magic_lesserinvisibilty\",\n \"ranks\": [13981, 14066],\n \"requires\": []\n },\n 244: {\n \"id\": 244,\n \"row\": 1,\n \"col\": 2,\n \"icon\": \"ability_stealth\",\n \"ranks\": [13975, 14062, 14063, 14064, 14065],\n \"requires\": []\n },\n 245: {\n \"id\": 245,\n \"row\": 2,\n \"col\": 0,\n \"icon\": \"spell_shadow_fumble\",\n \"ranks\": [13976, 13979, 13980],\n \"requires\": []\n },\n 303: {\n \"id\": 303,\n \"row\": 2,\n \"col\": 1,\n \"icon\": \"spell_shadow_curse\",\n \"ranks\": [14278],\n \"requires\": []\n },\n 263: {\n \"id\": 263,\n \"row\": 2,\n \"col\": 2,\n \"icon\": \"ability_rogue_ambush\",\n \"ranks\": [14079, 14080, 14081],\n \"requires\": []\n },\n 246: {\n \"id\": 246,\n \"row\": 3,\n \"col\": 0,\n \"icon\": \"spell_nature_mirrorimage\",\n \"ranks\": [13983, 14070, 14071],\n \"requires\": []\n },\n 262: {\n \"id\": 262,\n \"row\": 3,\n \"col\": 1,\n \"icon\": \"ability_sap\",\n \"ranks\": [14076, 14094, 14095],\n \"requires\": []\n },\n 1123: {\n \"id\": 1123,\n \"row\": 3,\n \"col\": 2,\n \"icon\": \"inv_sword_17\",\n \"ranks\": [14171, 14172, 14173],\n \"requires\": []\n },\n 1701: {\n \"id\": 1701,\n \"row\": 4,\n \"col\": 0,\n \"icon\": \"ability_ambush\",\n \"ranks\": [30894, 30895],\n \"requires\": []\n },\n 284: {\n \"id\": 284,\n \"row\": 4,\n \"col\": 1,\n \"icon\": \"spell_shadow_antishadow\",\n \"ranks\": [14185],\n \"requires\": []\n },\n 265: {\n \"id\": 265,\n \"row\": 4,\n \"col\": 2,\n \"icon\": \"spell_shadow_summonsuccubus\",\n \"ranks\": [14082, 14083],\n \"requires\": []\n },\n 681: {\n \"id\": 681,\n \"row\": 4,\n \"col\": 3,\n \"icon\": \"spell_shadow_lifedrain\",\n \"ranks\": [16511],\n \"requires\": [{\n \"id\": 1123,\n \"qty\": 3\n }]\n },\n 1702: {\n \"id\": 1702,\n \"row\": 5,\n \"col\": 2,\n \"icon\": \"inv_weapon_crossbow_11\",\n \"ranks\": [30902, 30903, 30904, 30905, 30906],\n \"requires\": []\n },\n 381: {\n \"id\": 381,\n \"row\": 6,\n \"col\": 1,\n \"icon\": \"spell_shadow_possession\",\n \"ranks\": [14183],\n \"requires\": [{\n \"id\": 284,\n \"qty\": 1\n }]\n }\n },\n 201: {\n 342: {\n \"id\": 342,\n \"row\": 0,\n \"col\": 1,\n \"icon\": \"spell_magic_magearmor\",\n \"ranks\": [14522, 14788, 14789, 14790, 14791],\n \"requires\": []\n },\n 345: {\n \"id\": 345,\n \"row\": 0,\n \"col\": 2,\n \"icon\": \"inv_wand_01\",\n \"ranks\": [14524, 14525, 14526, 14527, 14528],\n \"requires\": []\n },\n 352: {\n \"id\": 352,\n \"row\": 1,\n \"col\": 0,\n \"icon\": \"spell_nature_manaregentotem\",\n \"ranks\": [14523, 14784, 14785, 14786, 14787],\n \"requires\": []\n },\n 344: {\n \"id\": 344,\n \"row\": 1,\n \"col\": 1,\n \"icon\": \"spell_holy_wordfortitude\",\n \"ranks\": [14749, 14767],\n \"requires\": []\n },\n 343: {\n \"id\": 343,\n \"row\": 1,\n \"col\": 2,\n \"icon\": \"spell_holy_powerwordshield\",\n \"ranks\": [14748, 14768, 14769],\n \"requires\": []\n },\n 321: {\n \"id\": 321,\n \"row\": 1,\n \"col\": 3,\n \"icon\": \"spell_nature_tranquility\",\n \"ranks\": [14531, 14774],\n \"requires\": []\n },\n 348: {\n \"id\": 348,\n \"row\": 2,\n \"col\": 1,\n \"icon\": \"spell_frost_windwalkon\",\n \"ranks\": [14751],\n \"requires\": []\n },\n 347: {\n \"id\": 347,\n \"row\": 2,\n \"col\": 2,\n \"icon\": \"spell_nature_sleep\",\n \"ranks\": [14521, 14776, 14777],\n \"requires\": []\n },\n 346: {\n \"id\": 346,\n \"row\": 3,\n \"col\": 0,\n \"icon\": \"spell_holy_innerfire\",\n \"ranks\": [14747, 14770, 14771],\n \"requires\": []\n },\n 341: {\n \"id\": 341,\n \"row\": 3,\n \"col\": 1,\n \"icon\": \"ability_hibernation\",\n \"ranks\": [14520, 14780, 14781, 14782, 14783],\n \"requires\": []\n },\n 350: {\n \"id\": 350,\n \"row\": 3,\n \"col\": 3,\n \"icon\": \"spell_shadow_manaburn\",\n \"ranks\": [14750, 14772],\n \"requires\": []\n },\n 1201: {\n \"id\": 1201,\n \"row\": 4,\n \"col\": 1,\n \"icon\": \"spell_nature_enchantarmor\",\n \"ranks\": [18551, 18552, 18553, 18554, 18555],\n \"requires\": []\n },\n 351: {\n \"id\": 351,\n \"row\": 4,\n \"col\": 2,\n \"icon\": \"spell_holy_divinespirit\",\n \"ranks\": [14752],\n \"requires\": [{\n \"id\": 347,\n \"qty\": 3\n }]\n },\n 1202: {\n \"id\": 1202,\n \"row\": 5,\n \"col\": 2,\n \"icon\": \"spell_nature_slowingtotem\",\n \"ranks\": [18544, 18547, 18548, 18549, 18550],\n \"requires\": []\n },\n 322: {\n \"id\": 322,\n \"row\": 6,\n \"col\": 1,\n \"icon\": \"spell_holy_powerinfusion\",\n \"ranks\": [10060],\n \"requires\": [{\n \"id\": 1201,\n \"qty\": 5\n }]\n }\n },\n 202: {\n 410: {\n \"id\": 410,\n \"row\": 0,\n \"col\": 0,\n \"icon\": \"spell_holy_healingfocus\",\n \"ranks\": [14913, 15012],\n \"requires\": []\n },\n 406: {\n \"id\": 406,\n \"row\": 0,\n \"col\": 1,\n \"icon\": \"spell_holy_renew\",\n \"ranks\": [14908, 15020, 17191],\n \"requires\": []\n },\n 401: {\n \"id\": 401,\n \"row\": 0,\n \"col\": 2,\n \"icon\": \"spell_holy_sealofsalvation\",\n \"ranks\": [14889, 15008, 15009, 15010, 15011],\n \"requires\": []\n },\n 411: {\n \"id\": 411,\n \"row\": 1,\n \"col\": 1,\n \"icon\": \"spell_holy_spellwarding\",\n \"ranks\": [27900, 27901, 27902, 27903, 27904],\n \"requires\": []\n },\n 1181: {\n \"id\": 1181,\n \"row\": 1,\n \"col\": 2,\n \"icon\": \"spell_holy_sealofwrath\",\n \"ranks\": [18530, 18531, 18533, 18534, 18535],\n \"requires\": []\n },\n 442: {\n \"id\": 442,\n \"row\": 2,\n \"col\": 0,\n \"icon\": \"spell_holy_holynova\",\n \"ranks\": [15237],\n \"requires\": []\n },\n 1636: {\n \"id\": 1636,\n \"row\": 2,\n \"col\": 1,\n \"icon\": \"spell_holy_blessedrecovery\",\n \"ranks\": [27811, 27815, 27816],\n \"requires\": []\n },\n 361: {\n \"id\": 361,\n \"row\": 2,\n \"col\": 3,\n \"icon\": \"spell_holy_layonhands\",\n \"ranks\": [14892, 15362, 15363],\n \"requires\": []\n },\n 1635: {\n \"id\": 1635,\n \"row\": 3,\n \"col\": 0,\n \"icon\": \"spell_holy_purify\",\n \"ranks\": [27789, 27790],\n \"requires\": []\n },\n 408: {\n \"id\": 408,\n \"row\": 3,\n \"col\": 1,\n \"icon\": \"spell_holy_heal02\",\n \"ranks\": [14912, 15013, 15014],\n \"requires\": []\n },\n 403: {\n \"id\": 403,\n \"row\": 3,\n \"col\": 2,\n \"icon\": \"spell_holy_searinglightpriest\",\n \"ranks\": [14909, 15017],\n \"requires\": [{\n \"id\": 1181,\n \"qty\": 5\n }]\n },\n 413: {\n \"id\": 413,\n \"row\": 4,\n \"col\": 0,\n \"icon\": \"spell_holy_prayerofhealing02\",\n \"ranks\": [14911, 15018],\n \"requires\": []\n },\n 1561: {\n \"id\": 1561,\n \"row\": 4,\n \"col\": 1,\n \"icon\": \"inv_enchant_essenceeternallarge\",\n \"ranks\": [20711],\n \"requires\": []\n },\n 402: {\n \"id\": 402,\n \"row\": 4,\n \"col\": 2,\n \"icon\": \"spell_holy_spiritualguidence\",\n \"ranks\": [14901, 15028, 15029, 15030, 15031],\n \"requires\": []\n },\n 404: {\n \"id\": 404,\n \"row\": 5,\n \"col\": 2,\n \"icon\": \"spell_nature_moonglow\",\n \"ranks\": [14898, 15349, 15354, 15355, 15356],\n \"requires\": []\n },\n 1637: {\n \"id\": 1637,\n \"row\": 6,\n \"col\": 1,\n \"icon\": \"spell_holy_summonlightwell\",\n \"ranks\": [724],\n \"requires\": [{\n \"id\": 1561,\n \"qty\": 1\n }]\n }\n },\n 203: {\n 465: {\n \"id\": 465,\n \"row\": 0,\n \"col\": 1,\n \"icon\": \"spell_shadow_requiem\",\n \"ranks\": [15270, 15335, 15336, 15337, 15338],\n \"requires\": []\n },\n 464: {\n \"id\": 464,\n \"row\": 0,\n \"col\": 2,\n \"icon\": \"spell_shadow_gathershadows\",\n \"ranks\": [15268, 15323, 15324, 15325, 15326],\n \"requires\": []\n },\n 466: {\n \"id\": 466,\n \"row\": 1,\n \"col\": 0,\n \"icon\": \"spell_shadow_shadowward\",\n \"ranks\": [15318, 15272, 15320],\n \"requires\": []\n },\n 482: {\n \"id\": 482,\n \"row\": 1,\n \"col\": 1,\n \"icon\": \"spell_shadow_shadowwordpain\",\n \"ranks\": [15275, 15317],\n \"requires\": []\n },\n 463: {\n \"id\": 463,\n \"row\": 1,\n \"col\": 2,\n \"icon\": \"spell_shadow_burningspirit\",\n \"ranks\": [15260, 15327, 15328, 15329, 15330],\n \"requires\": []\n },\n 542: {\n \"id\": 542,\n \"row\": 2,\n \"col\": 0,\n \"icon\": \"spell_shadow_psychicscream\",\n \"ranks\": [15392, 15448],\n \"requires\": []\n },\n 481: {\n \"id\": 481,\n \"row\": 2,\n \"col\": 1,\n \"icon\": \"spell_shadow_unholyfrenzy\",\n \"ranks\": [15273, 15312, 15313, 15314, 15316],\n \"requires\": []\n },\n 501: {\n \"id\": 501,\n \"row\": 2,\n \"col\": 2,\n \"icon\": \"spell_shadow_siphonmana\",\n \"ranks\": [15407],\n \"requires\": []\n },\n 483: {\n \"id\": 483,\n \"row\": 3,\n \"col\": 1,\n \"icon\": \"spell_magic_lesserinvisibilty\",\n \"ranks\": [15274, 15311],\n \"requires\": []\n },\n 881: {\n \"id\": 881,\n \"row\": 3,\n \"col\": 2,\n \"icon\": \"spell_shadow_chilltouch\",\n \"ranks\": [17322, 17323, 17325],\n \"requires\": []\n },\n 461: {\n \"id\": 461,\n \"row\": 3,\n \"col\": 3,\n \"icon\": \"spell_shadow_blackplague\",\n \"ranks\": [15257, 15331, 15332, 15333, 15334],\n \"requires\": []\n },\n 541: {\n \"id\": 541,\n \"row\": 4,\n \"col\": 0,\n \"icon\": \"spell_shadow_impphaseshift\",\n \"ranks\": [15487],\n \"requires\": [{\n \"id\": 542,\n \"qty\": 2\n }]\n },\n 484: {\n \"id\": 484,\n \"row\": 4,\n \"col\": 1,\n \"icon\": \"spell_shadow_unsummonbuilding\",\n \"ranks\": [15286],\n \"requires\": []\n },\n 1638: {\n \"id\": 1638,\n \"row\": 4,\n \"col\": 2,\n \"icon\": \"spell_shadow_improvedvampiricembrace\",\n \"ranks\": [27839, 27840],\n \"requires\": [{\n \"id\": 484,\n \"qty\": 1\n }]\n },\n 462: {\n \"id\": 462,\n \"row\": 5,\n \"col\": 2,\n \"icon\": \"spell_shadow_twilight\",\n \"ranks\": [15259, 15307, 15308, 15309, 15310],\n \"requires\": []\n },\n 521: {\n \"id\": 521,\n \"row\": 6,\n \"col\": 1,\n \"icon\": \"spell_shadow_shadowform\",\n \"ranks\": [15473],\n \"requires\": [{\n \"id\": 484,\n \"qty\": 1\n }]\n }\n },\n 261: {\n 564: {\n \"id\": 564,\n \"row\": 0,\n \"col\": 1,\n \"icon\": \"spell_nature_wispsplode\",\n \"ranks\": [16039, 16109, 16110, 16111, 16112],\n \"requires\": []\n },\n 563: {\n \"id\": 563,\n \"row\": 0,\n \"col\": 2,\n \"icon\": \"spell_fire_fireball\",\n \"ranks\": [16035, 16105, 16106, 16107, 16108],\n \"requires\": []\n },\n 572: {\n \"id\": 572,\n \"row\": 1,\n \"col\": 0,\n \"icon\": \"spell_nature_stoneclawtotem\",\n \"ranks\": [16043, 16130],\n \"requires\": []\n },\n 1640: {\n \"id\": 1640,\n \"row\": 1,\n \"col\": 1,\n \"icon\": \"spell_nature_spiritarmor\",\n \"ranks\": [28996, 28997, 28998],\n \"requires\": []\n },\n 561: {\n \"id\": 561,\n \"row\": 1,\n \"col\": 2,\n \"icon\": \"spell_fire_immolation\",\n \"ranks\": [16038, 16160, 16161],\n \"requires\": []\n },\n 574: {\n \"id\": 574,\n \"row\": 2,\n \"col\": 0,\n \"icon\": \"spell_shadow_manaburn\",\n \"ranks\": [16164],\n \"requires\": []\n },\n 575: {\n \"id\": 575,\n \"row\": 2,\n \"col\": 1,\n \"icon\": \"spell_frost_frostward\",\n \"ranks\": [16040, 16113, 16114, 16115, 16116],\n \"requires\": []\n },\n 562: {\n \"id\": 562,\n \"row\": 2,\n \"col\": 2,\n \"icon\": \"spell_nature_callstorm\",\n \"ranks\": [16041, 16117, 16118, 16119, 16120],\n \"requires\": []\n },\n 567: {\n \"id\": 567,\n \"row\": 3,\n \"col\": 0,\n \"icon\": \"spell_fire_sealoffire\",\n \"ranks\": [16086, 16544],\n \"requires\": []\n },\n 1642: {\n \"id\": 1642,\n \"row\": 3,\n \"col\": 1,\n \"icon\": \"spell_nature_eyeofthestorm\",\n \"ranks\": [29062, 29064, 29065],\n \"requires\": []\n },\n 1645: {\n \"id\": 1645,\n \"row\": 3,\n \"col\": 3,\n \"icon\": \"spell_fire_elementaldevastation\",\n \"ranks\": [30160, 29179, 29180],\n \"requires\": []\n },\n 1641: {\n \"id\": 1641,\n \"row\": 4,\n \"col\": 0,\n \"icon\": \"spell_nature_stormreach\",\n \"ranks\": [28999, 29000],\n \"requires\": []\n },\n 565: {\n \"id\": 565,\n \"row\": 4,\n \"col\": 1,\n \"icon\": \"spell_fire_volcano\",\n \"ranks\": [16089],\n \"requires\": []\n },\n 721: {\n \"id\": 721,\n \"row\": 5,\n \"col\": 2,\n \"icon\": \"spell_lightning_lightningbolt01\",\n \"ranks\": [16578, 16579, 16580, 16581, 16582],\n \"requires\": [{\n \"id\": 562,\n \"qty\": 5\n }]\n },\n 573: {\n \"id\": 573,\n \"row\": 6,\n \"col\": 1,\n \"icon\": \"spell_nature_wispheal\",\n \"ranks\": [16166],\n \"requires\": [{\n \"id\": 565,\n \"qty\": 1\n }]\n }\n },\n 262: {\n 586: {\n \"id\": 586,\n \"row\": 0,\n \"col\": 1,\n \"icon\": \"spell_nature_magicimmunity\",\n \"ranks\": [16182, 16226, 16227, 16228, 16229],\n \"requires\": []\n },\n 593: {\n \"id\": 593,\n \"row\": 0,\n \"col\": 2,\n \"icon\": \"spell_frost_manarecharge\",\n \"ranks\": [16179, 16214, 16215, 16216, 16217],\n \"requires\": []\n },\n 589: {\n \"id\": 589,\n \"row\": 1,\n \"col\": 0,\n \"icon\": \"spell_nature_reincarnation\",\n \"ranks\": [16184, 16209],\n \"requires\": []\n },\n 581: {\n \"id\": 581,\n \"row\": 1,\n \"col\": 1,\n \"icon\": \"spell_nature_undyingstrength\",\n \"ranks\": [16176, 16235, 16240],\n \"requires\": []\n },\n 595: {\n \"id\": 595,\n \"row\": 1,\n \"col\": 2,\n \"icon\": \"spell_nature_moonglow\",\n \"ranks\": [16173, 16222, 16223, 16224, 16225],\n \"requires\": []\n },\n 583: {\n \"id\": 583,\n \"row\": 2,\n \"col\": 0,\n \"icon\": \"spell_frost_stun\",\n \"ranks\": [16180, 16196, 16198],\n \"requires\": []\n },\n 587: {\n \"id\": 587,\n \"row\": 2,\n \"col\": 1,\n \"icon\": \"spell_nature_healingwavelesser\",\n \"ranks\": [16181, 16230, 16232, 16233, 16234],\n \"requires\": []\n },\n 582: {\n \"id\": 582,\n \"row\": 2,\n \"col\": 2,\n \"icon\": \"spell_nature_nullward\",\n \"ranks\": [16189],\n \"requires\": []\n },\n 1646: {\n \"id\": 1646,\n \"row\": 2,\n \"col\": 3,\n \"icon\": \"spell_nature_healingtouch\",\n \"ranks\": [29187, 29189, 29191],\n \"requires\": []\n },\n 588: {\n \"id\": 588,\n \"row\": 3,\n \"col\": 1,\n \"icon\": \"spell_nature_manaregentotem\",\n \"ranks\": [16187, 16205, 16206, 16207, 16208],\n \"requires\": []\n },\n 594: {\n \"id\": 594,\n \"row\": 3,\n \"col\": 2,\n \"icon\": \"spell_nature_tranquility\",\n \"ranks\": [16194, 16218, 16219, 16220, 16221],\n \"requires\": []\n },\n 1648: {\n \"id\": 1648,\n \"row\": 4,\n \"col\": 0,\n \"icon\": \"spell_nature_healingway\",\n \"ranks\": [29206, 29205, 29202],\n \"requires\": []\n },\n 591: {\n \"id\": 591,\n \"row\": 4,\n \"col\": 2,\n \"icon\": \"spell_nature_ravenform\",\n \"ranks\": [16188],\n \"requires\": []\n },\n 592: {\n \"id\": 592,\n \"row\": 5,\n \"col\": 2,\n \"icon\": \"spell_frost_wizardmark\",\n \"ranks\": [16178, 16210, 16211, 16212, 16213],\n \"requires\": []\n },\n 590: {\n \"id\": 590,\n \"row\": 6,\n \"col\": 1,\n \"icon\": \"spell_frost_summonwaterelemental\",\n \"ranks\": [16190],\n \"requires\": [{\n \"id\": 588,\n \"qty\": 5\n }]\n }\n },\n 263: {\n 614: {\n \"id\": 614,\n \"row\": 0,\n \"col\": 1,\n \"icon\": \"spell_shadow_grimward\",\n \"ranks\": [17485, 17486, 17487, 17488, 17489],\n \"requires\": []\n },\n 612: {\n \"id\": 612,\n \"row\": 0,\n \"col\": 2,\n \"icon\": \"inv_shield_06\",\n \"ranks\": [16253, 16298, 16299, 16300, 16301],\n \"requires\": []\n },\n 609: {\n \"id\": 609,\n \"row\": 1,\n \"col\": 0,\n \"icon\": \"spell_nature_stoneskintotem\",\n \"ranks\": [16258, 16293],\n \"requires\": []\n },\n 613: {\n \"id\": 613,\n \"row\": 1,\n \"col\": 1,\n \"icon\": \"ability_thunderbolt\",\n \"ranks\": [16255, 16302, 16303, 16304, 16305],\n \"requires\": []\n },\n 605: {\n \"id\": 605,\n \"row\": 1,\n \"col\": 2,\n \"icon\": \"spell_nature_spiritwolf\",\n \"ranks\": [16262, 16287],\n \"requires\": []\n },\n 607: {\n \"id\": 607,\n \"row\": 1,\n \"col\": 3,\n \"icon\": \"spell_nature_lightningshield\",\n \"ranks\": [16261, 16290, 16291],\n \"requires\": []\n },\n 610: {\n \"id\": 610,\n \"row\": 2,\n \"col\": 0,\n \"icon\": \"spell_nature_earthbindtotem\",\n \"ranks\": [16259, 16295],\n \"requires\": []\n },\n 617: {\n \"id\": 617,\n \"row\": 2,\n \"col\": 2,\n \"icon\": \"inv_axe_10\",\n \"ranks\": [16269],\n \"requires\": []\n },\n 601: {\n \"id\": 601,\n \"row\": 2,\n \"col\": 3,\n \"icon\": \"spell_nature_mirrorimage\",\n \"ranks\": [16254, 16271, 16272, 16273, 16274],\n \"requires\": []\n },\n 602: {\n \"id\": 602,\n \"row\": 3,\n \"col\": 1,\n \"icon\": \"ability_ghoulfrenzy\",\n \"ranks\": [16256, 16281, 16282, 16283, 16284],\n \"requires\": [{\n \"id\": 613,\n \"qty\": 5\n }]\n },\n 615: {\n \"id\": 615,\n \"row\": 3,\n \"col\": 2,\n \"icon\": \"spell_holy_devotion\",\n \"ranks\": [16252, 16306, 16307, 16308, 16309],\n \"requires\": []\n },\n 1647: {\n \"id\": 1647,\n \"row\": 4,\n \"col\": 0,\n \"icon\": \"spell_fire_enchantweapon\",\n \"ranks\": [29192, 29193],\n \"requires\": []\n },\n 611: {\n \"id\": 611,\n \"row\": 4,\n \"col\": 1,\n \"icon\": \"spell_fire_flametounge\",\n \"ranks\": [16266, 29079, 29080],\n \"requires\": []\n },\n 616: {\n \"id\": 616,\n \"row\": 4,\n \"col\": 2,\n \"icon\": \"ability_parry\",\n \"ranks\": [16268],\n \"requires\": []\n },\n 1643: {\n \"id\": 1643,\n \"row\": 5,\n \"col\": 2,\n \"icon\": \"ability_hunter_swiftstrike\",\n \"ranks\": [29082, 29084, 29086, 29087, 29088],\n \"requires\": []\n },\n 901: {\n \"id\": 901,\n \"row\": 6,\n \"col\": 1,\n \"icon\": \"spell_holy_sealofmight\",\n \"ranks\": [17364],\n \"requires\": [{\n \"id\": 611,\n \"qty\": 3\n }]\n }\n },\n 281: {\n 796: {\n \"id\": 796,\n \"row\": 0,\n \"col\": 1,\n \"icon\": \"ability_hunter_pet_hyena\",\n \"ranks\": [16934, 16935, 16936, 16937, 16938],\n \"requires\": []\n },\n 795: {\n \"id\": 795,\n \"row\": 0,\n \"col\": 2,\n \"icon\": \"ability_druid_demoralizingroar\",\n \"ranks\": [16858, 16859, 16860, 16861, 16862],\n \"requires\": []\n },\n 799: {\n \"id\": 799,\n \"row\": 1,\n \"col\": 0,\n \"icon\": \"ability_ambush\",\n \"ranks\": [16947, 16948, 16949, 16950, 16951],\n \"requires\": []\n },\n 797: {\n \"id\": 797,\n \"row\": 1,\n \"col\": 1,\n \"icon\": \"ability_druid_bash\",\n \"ranks\": [16940, 16941],\n \"requires\": []\n },\n 794: {\n \"id\": 794,\n \"row\": 1,\n \"col\": 2,\n \"icon\": \"inv_misc_pelt_bear_03\",\n \"ranks\": [16929, 16930, 16931, 16932, 16933],\n \"requires\": []\n },\n 807: {\n \"id\": 807,\n \"row\": 2,\n \"col\": 0,\n \"icon\": \"spell_nature_spiritwolf\",\n \"ranks\": [17002, 24866],\n \"requires\": []\n },\n 804: {\n \"id\": 804,\n \"row\": 2,\n \"col\": 1,\n \"icon\": \"ability_hunter_pet_bear\",\n \"ranks\": [16979],\n \"requires\": []\n },\n 798: {\n \"id\": 798,\n \"row\": 2,\n \"col\": 2,\n \"icon\": \"inv_misc_monsterclaw_04\",\n \"ranks\": [16942, 16943, 16944],\n \"requires\": []\n },\n 802: {\n \"id\": 802,\n \"row\": 3,\n \"col\": 0,\n \"icon\": \"spell_shadow_vampiricaura\",\n \"ranks\": [16966, 16968],\n \"requires\": []\n },\n 803: {\n \"id\": 803,\n \"row\": 3,\n \"col\": 1,\n \"icon\": \"ability_hunter_pet_cat\",\n \"ranks\": [16972, 16974, 16975],\n \"requires\": []\n },\n 800: {\n \"id\": 800,\n \"row\": 3,\n \"col\": 2,\n \"icon\": \"ability_ghoulfrenzy\",\n \"ranks\": [16952, 16954],\n \"requires\": [{\n \"id\": 798,\n \"qty\": 3\n }]\n },\n 801: {\n \"id\": 801,\n \"row\": 3,\n \"col\": 3,\n \"icon\": \"ability_racial_cannibalize\",\n \"ranks\": [16958, 16961],\n \"requires\": [{\n \"id\": 798,\n \"qty\": 3\n }]\n },\n 805: {\n \"id\": 805,\n \"row\": 4,\n \"col\": 0,\n \"icon\": \"ability_druid_ravage\",\n \"ranks\": [16998, 16999],\n \"requires\": []\n },\n 1162: {\n \"id\": 1162,\n \"row\": 4,\n \"col\": 2,\n \"icon\": \"spell_nature_faeriefire\",\n \"ranks\": [16857],\n \"requires\": []\n },\n 808: {\n \"id\": 808,\n \"row\": 5,\n \"col\": 1,\n \"icon\": \"spell_holy_blessingofagility\",\n \"ranks\": [17003, 17004, 17005, 17006, 24894],\n \"requires\": [{\n \"id\": 803,\n \"qty\": 3\n }]\n },\n 809: {\n \"id\": 809,\n \"row\": 6,\n \"col\": 1,\n \"icon\": \"spell_nature_unyeildingstamina\",\n \"ranks\": [17007],\n \"requires\": []\n }\n },\n 282: {\n 821: {\n \"id\": 821,\n \"row\": 0,\n \"col\": 1,\n \"icon\": \"spell_nature_regeneration\",\n \"ranks\": [17050, 17051, 17053, 17054, 17055],\n \"requires\": []\n },\n 822: {\n \"id\": 822,\n \"row\": 0,\n \"col\": 2,\n \"icon\": \"spell_holy_blessingofstamina\",\n \"ranks\": [17056, 17058, 17059, 17060, 17061],\n \"requires\": []\n },\n 824: {\n \"id\": 824,\n \"row\": 1,\n \"col\": 0,\n \"icon\": \"spell_nature_healingtouch\",\n \"ranks\": [17069, 17070, 17071, 17072, 17073],\n \"requires\": []\n },\n 823: {\n \"id\": 823,\n \"row\": 1,\n \"col\": 1,\n \"icon\": \"spell_nature_healingwavegreater\",\n \"ranks\": [17063, 17065, 17066, 17067, 17068],\n \"requires\": []\n },\n 826: {\n \"id\": 826,\n \"row\": 1,\n \"col\": 2,\n \"icon\": \"ability_druid_enrage\",\n \"ranks\": [17079, 17082],\n \"requires\": []\n },\n 829: {\n \"id\": 829,\n \"row\": 2,\n \"col\": 1,\n \"icon\": \"spell_frost_windwalkon\",\n \"ranks\": [17106, 17107, 17108],\n \"requires\": []\n },\n 827: {\n \"id\": 827,\n \"row\": 2,\n \"col\": 2,\n \"icon\": \"spell_nature_insectswarm\",\n \"ranks\": [5570],\n \"requires\": []\n },\n 841: {\n \"id\": 841,\n \"row\": 2,\n \"col\": 3,\n \"icon\": \"ability_eyeoftheowl\",\n \"ranks\": [17118, 17119, 17120, 17121, 17122],\n \"requires\": []\n },\n 843: {\n \"id\": 843,\n \"row\": 3,\n \"col\": 1,\n \"icon\": \"spell_holy_elunesgrace\",\n \"ranks\": [24968, 24969, 24970, 24971, 24972],\n \"requires\": []\n },\n 830: {\n \"id\": 830,\n \"row\": 3,\n \"col\": 3,\n \"icon\": \"spell_nature_rejuvenation\",\n \"ranks\": [17111, 17112, 17113],\n \"requires\": []\n },\n 831: {\n \"id\": 831,\n \"row\": 4,\n \"col\": 0,\n \"icon\": \"spell_nature_ravenform\",\n \"ranks\": [17116],\n \"requires\": [{\n \"id\": 824,\n \"qty\": 5\n }]\n },\n 828: {\n \"id\": 828,\n \"row\": 4,\n \"col\": 2,\n \"icon\": \"spell_nature_protectionformnature\",\n \"ranks\": [17104, 24943, 24944, 24945, 24946],\n \"requires\": [{\n \"id\": 827,\n \"qty\": 1\n }]\n },\n 842: {\n \"id\": 842,\n \"row\": 4,\n \"col\": 3,\n \"icon\": \"spell_nature_tranquility\",\n \"ranks\": [17123, 17124],\n \"requires\": []\n },\n 825: {\n \"id\": 825,\n \"row\": 5,\n \"col\": 2,\n \"icon\": \"spell_nature_resistnature\",\n \"ranks\": [17074, 17075, 17076, 17077, 17078],\n \"requires\": []\n },\n 844: {\n \"id\": 844,\n \"row\": 6,\n \"col\": 1,\n \"icon\": \"inv_relics_idolofrejuvenation\",\n \"ranks\": [18562],\n \"requires\": [{\n \"id\": 843,\n \"qty\": 5\n }]\n }\n },\n 283: {\n 762: {\n \"id\": 762,\n \"row\": 0,\n \"col\": 0,\n \"icon\": \"spell_nature_abolishmagic\",\n \"ranks\": [16814, 16815, 16816, 16817, 16818],\n \"requires\": []\n },\n 761: {\n \"id\": 761,\n \"row\": 0,\n \"col\": 1,\n \"icon\": \"spell_nature_natureswrath\",\n \"ranks\": [16689],\n \"requires\": []\n },\n 921: {\n \"id\": 921,\n \"row\": 0,\n \"col\": 2,\n \"icon\": \"spell_nature_natureswrath\",\n \"ranks\": [17245, 17247, 17248, 17249],\n \"requires\": [{\n \"id\": 761,\n \"qty\": 1\n }]\n },\n 787: {\n \"id\": 787,\n \"row\": 1,\n \"col\": 0,\n \"icon\": \"spell_nature_stranglevines\",\n \"ranks\": [16918, 16919, 16920],\n \"requires\": []\n },\n 763: {\n \"id\": 763,\n \"row\": 1,\n \"col\": 1,\n \"icon\": \"spell_nature_starfall\",\n \"ranks\": [16821, 16822, 16823, 16824, 16825],\n \"requires\": []\n },\n 791: {\n \"id\": 791,\n \"row\": 1,\n \"col\": 2,\n \"icon\": \"inv_staff_01\",\n \"ranks\": [16902, 16903, 16904, 16905, 16906],\n \"requires\": []\n },\n 781: {\n \"id\": 781,\n \"row\": 1,\n \"col\": 3,\n \"icon\": \"spell_nature_wispsplode\",\n \"ranks\": [16833, 16834, 16835],\n \"requires\": []\n },\n 782: {\n \"id\": 782,\n \"row\": 2,\n \"col\": 0,\n \"icon\": \"spell_nature_thorns\",\n \"ranks\": [16836, 16839, 16840],\n \"requires\": []\n },\n 788: {\n \"id\": 788,\n \"row\": 2,\n \"col\": 2,\n \"icon\": \"spell_nature_crystalball\",\n \"ranks\": [16864],\n \"requires\": [{\n \"id\": 791,\n \"qty\": 5\n }]\n },\n 764: {\n \"id\": 764,\n \"row\": 2,\n \"col\": 3,\n \"icon\": \"spell_nature_naturetouchgrow\",\n \"ranks\": [16819, 16820],\n \"requires\": []\n },\n 792: {\n \"id\": 792,\n \"row\": 3,\n \"col\": 1,\n \"icon\": \"spell_nature_purge\",\n \"ranks\": [16909, 16910, 16911, 16912, 16913],\n \"requires\": [{\n \"id\": 763,\n \"qty\": 5\n }]\n },\n 784: {\n \"id\": 784,\n \"row\": 3,\n \"col\": 2,\n \"icon\": \"spell_arcane_starfire\",\n \"ranks\": [16850, 16923, 16924, 16925, 16926],\n \"requires\": []\n },\n 789: {\n \"id\": 789,\n \"row\": 4,\n \"col\": 1,\n \"icon\": \"spell_nature_naturesblessing\",\n \"ranks\": [16880],\n \"requires\": []\n },\n 783: {\n \"id\": 783,\n \"row\": 4,\n \"col\": 2,\n \"icon\": \"spell_nature_sentinal\",\n \"ranks\": [16845, 16846, 16847],\n \"requires\": []\n },\n 790: {\n \"id\": 790,\n \"row\": 5,\n \"col\": 1,\n \"icon\": \"spell_nature_moonglow\",\n \"ranks\": [16896, 16897, 16899, 16900, 16901],\n \"requires\": [{\n \"id\": 789,\n \"qty\": 1\n }]\n },\n 793: {\n \"id\": 793,\n \"row\": 6,\n \"col\": 1,\n \"icon\": \"spell_nature_forceofnature\",\n \"ranks\": [24858],\n \"requires\": []\n }\n },\n 301: {\n 944: {\n \"id\": 944,\n \"row\": 0,\n \"col\": 1,\n \"icon\": \"spell_shadow_shadowbolt\",\n \"ranks\": [17793, 17796, 17801, 17802, 17803],\n \"requires\": []\n },\n 941: {\n \"id\": 941,\n \"row\": 0,\n \"col\": 2,\n \"icon\": \"spell_fire_windsofwoe\",\n \"ranks\": [17778, 17779, 17780, 17781, 17782],\n \"requires\": []\n },\n 943: {\n \"id\": 943,\n \"row\": 1,\n \"col\": 1,\n \"icon\": \"spell_shadow_deathpact\",\n \"ranks\": [17788, 17789, 17790, 17791, 17792],\n \"requires\": []\n },\n 982: {\n \"id\": 982,\n \"row\": 1,\n \"col\": 2,\n \"icon\": \"spell_fire_fire\",\n \"ranks\": [18119, 18120, 18121, 18122, 18123],\n \"requires\": []\n },\n 983: {\n \"id\": 983,\n \"row\": 2,\n \"col\": 0,\n \"icon\": \"spell_fire_firebolt\",\n \"ranks\": [18126, 18127],\n \"requires\": []\n },\n 984: {\n \"id\": 984,\n \"row\": 2,\n \"col\": 1,\n \"icon\": \"spell_shadow_curse\",\n \"ranks\": [18128, 18129],\n \"requires\": []\n },\n 981: {\n \"id\": 981,\n \"row\": 2,\n \"col\": 2,\n \"icon\": \"spell_fire_flameshock\",\n \"ranks\": [18130, 18131, 18132, 18133, 18134],\n \"requires\": []\n },\n 963: {\n \"id\": 963,\n \"row\": 2,\n \"col\": 3,\n \"icon\": \"spell_shadow_scourgebuild\",\n \"ranks\": [17877],\n \"requires\": []\n },\n 985: {\n \"id\": 985,\n \"row\": 3,\n \"col\": 0,\n \"icon\": \"spell_fire_lavaspawn\",\n \"ranks\": [18135, 18136],\n \"requires\": []\n },\n 964: {\n \"id\": 964,\n \"row\": 3,\n \"col\": 1,\n \"icon\": \"spell_shadow_corpseexplode\",\n \"ranks\": [17917, 17918],\n \"requires\": []\n },\n 965: {\n \"id\": 965,\n \"row\": 3,\n \"col\": 3,\n \"icon\": \"spell_fire_soulburn\",\n \"ranks\": [17927, 17929, 17930, 17931, 17932],\n \"requires\": []\n },\n 986: {\n \"id\": 986,\n \"row\": 4,\n \"col\": 0,\n \"icon\": \"spell_fire_volcano\",\n \"ranks\": [18096, 18073],\n \"requires\": [{\n \"id\": 985,\n \"qty\": 2\n }]\n },\n 961: {\n \"id\": 961,\n \"row\": 4,\n \"col\": 1,\n \"icon\": \"spell_fire_immolation\",\n \"ranks\": [17815, 17833, 17834, 17835, 17836],\n \"requires\": []\n },\n 967: {\n \"id\": 967,\n \"row\": 4,\n \"col\": 2,\n \"icon\": \"spell_shadow_shadowwordpain\",\n \"ranks\": [17959],\n \"requires\": [{\n \"id\": 981,\n \"qty\": 5\n }]\n },\n 966: {\n \"id\": 966,\n \"row\": 5,\n \"col\": 2,\n \"icon\": \"spell_fire_selfdestruct\",\n \"ranks\": [17954, 17955, 17956, 17957, 17958],\n \"requires\": []\n },\n 968: {\n \"id\": 968,\n \"row\": 6,\n \"col\": 1,\n \"icon\": \"spell_fire_fireball\",\n \"ranks\": [17962],\n \"requires\": [{\n \"id\": 961,\n \"qty\": 5\n }]\n }\n },\n 302: {\n 1005: {\n \"id\": 1005,\n \"row\": 0,\n \"col\": 1,\n \"icon\": \"spell_shadow_unsummonbuilding\",\n \"ranks\": [18174, 18175, 18176, 18177, 18178],\n \"requires\": []\n },\n 1003: {\n \"id\": 1003,\n \"row\": 0,\n \"col\": 2,\n \"icon\": \"spell_shadow_abominationexplosion\",\n \"ranks\": [17810, 17811, 17812, 17813, 17814],\n \"requires\": []\n },\n 1006: {\n \"id\": 1006,\n \"row\": 1,\n \"col\": 0,\n \"icon\": \"spell_shadow_curseofmannoroth\",\n \"ranks\": [18179, 18180, 18181],\n \"requires\": []\n },\n 1101: {\n \"id\": 1101,\n \"row\": 1,\n \"col\": 1,\n \"icon\": \"spell_shadow_haunting\",\n \"ranks\": [18213, 18372],\n \"requires\": []\n },\n 1007: {\n \"id\": 1007,\n \"row\": 1,\n \"col\": 2,\n \"icon\": \"spell_shadow_burningspirit\",\n \"ranks\": [18182, 18183],\n \"requires\": []\n },\n 1004: {\n \"id\": 1004,\n \"row\": 1,\n \"col\": 3,\n \"icon\": \"spell_shadow_lifedrain02\",\n \"ranks\": [17804, 17805, 17806, 17807, 17808],\n \"requires\": []\n },\n 1284: {\n \"id\": 1284,\n \"row\": 2,\n \"col\": 0,\n \"icon\": \"spell_shadow_curseofsargeras\",\n \"ranks\": [18827, 18829, 18830],\n \"requires\": []\n },\n 1001: {\n \"id\": 1001,\n \"row\": 2,\n \"col\": 1,\n \"icon\": \"spell_shadow_fingerofdeath\",\n \"ranks\": [17783, 17784, 17785, 17786, 17787],\n \"requires\": []\n },\n 1061: {\n \"id\": 1061,\n \"row\": 2,\n \"col\": 2,\n \"icon\": \"spell_shadow_contagion\",\n \"ranks\": [18288],\n \"requires\": []\n },\n 1021: {\n \"id\": 1021,\n \"row\": 3,\n \"col\": 0,\n \"icon\": \"spell_shadow_callofbone\",\n \"ranks\": [18218, 18219],\n \"requires\": []\n },\n 1002: {\n \"id\": 1002,\n \"row\": 3,\n \"col\": 1,\n \"icon\": \"spell_shadow_twilight\",\n \"ranks\": [18094, 18095],\n \"requires\": []\n },\n 1121: {\n \"id\": 1121,\n \"row\": 3,\n \"col\": 3,\n \"icon\": \"spell_shadow_siphonmana\",\n \"ranks\": [17864, 18393],\n \"requires\": []\n },\n 1041: {\n \"id\": 1041,\n \"row\": 4,\n \"col\": 1,\n \"icon\": \"spell_shadow_requiem\",\n \"ranks\": [18265],\n \"requires\": []\n },\n 1081: {\n \"id\": 1081,\n \"row\": 4,\n \"col\": 2,\n \"icon\": \"spell_shadow_grimward\",\n \"ranks\": [18223],\n \"requires\": [{\n \"id\": 1061,\n \"qty\": 1\n }]\n },\n 1082: {\n \"id\": 1082,\n \"row\": 4,\n \"col\": 3,\n \"icon\": \"spell_shadow_grimward\",\n \"ranks\": [18310, 18311, 18312, 18313],\n \"requires\": [{\n \"id\": 1081,\n \"qty\": 1\n }]\n },\n 1042: {\n \"id\": 1042,\n \"row\": 5,\n \"col\": 1,\n \"icon\": \"spell_shadow_shadetruesight\",\n \"ranks\": [18271, 18272, 18273, 18274, 18275],\n \"requires\": [{\n \"id\": 1041,\n \"qty\": 1\n }]\n },\n 1022: {\n \"id\": 1022,\n \"row\": 6,\n \"col\": 1,\n \"icon\": \"spell_shadow_darkritual\",\n \"ranks\": [18220],\n \"requires\": []\n }\n },\n 303: {\n 1221: {\n \"id\": 1221,\n \"row\": 0,\n \"col\": 0,\n \"icon\": \"inv_stone_04\",\n \"ranks\": [18692, 18693],\n \"requires\": []\n },\n 1222: {\n \"id\": 1222,\n \"row\": 0,\n \"col\": 1,\n \"icon\": \"spell_shadow_summonimp\",\n \"ranks\": [18694, 18695, 18696],\n \"requires\": []\n },\n 1223: {\n \"id\": 1223,\n \"row\": 0,\n \"col\": 2,\n \"icon\": \"spell_shadow_metamorphosis\",\n \"ranks\": [18697, 18698, 18699, 18700, 18701],\n \"requires\": []\n },\n 1224: {\n \"id\": 1224,\n \"row\": 1,\n \"col\": 0,\n \"icon\": \"spell_shadow_lifedrain\",\n \"ranks\": [18703, 18704],\n \"requires\": []\n },\n 1225: {\n \"id\": 1225,\n \"row\": 1,\n \"col\": 1,\n \"icon\": \"spell_shadow_summonvoidwalker\",\n \"ranks\": [18705, 18706, 18707],\n \"requires\": []\n },\n 1242: {\n \"id\": 1242,\n \"row\": 1,\n \"col\": 2,\n \"icon\": \"spell_holy_magicalsentry\",\n \"ranks\": [18731, 18743, 18744, 18745, 18746],\n \"requires\": []\n },\n 1243: {\n \"id\": 1243,\n \"row\": 2,\n \"col\": 0,\n \"icon\": \"spell_shadow_summonsuccubus\",\n \"ranks\": [18754, 18755, 18756],\n \"requires\": []\n },\n 1226: {\n \"id\": 1226,\n \"row\": 2,\n \"col\": 1,\n \"icon\": \"spell_nature_removecurse\",\n \"ranks\": [18708],\n \"requires\": []\n },\n 1241: {\n \"id\": 1241,\n \"row\": 2,\n \"col\": 2,\n \"icon\": \"spell_shadow_antishadow\",\n \"ranks\": [18748, 18749, 18750, 18751, 18752],\n \"requires\": []\n },\n 1227: {\n \"id\": 1227,\n \"row\": 3,\n \"col\": 1,\n \"icon\": \"spell_shadow_impphaseshift\",\n \"ranks\": [18709, 18710],\n \"requires\": [{\n \"id\": 1226,\n \"qty\": 1\n }]\n },\n 1262: {\n \"id\": 1262,\n \"row\": 3,\n \"col\": 2,\n \"icon\": \"spell_shadow_shadowworddominate\",\n \"ranks\": [18769, 18770, 18771, 18772, 18773],\n \"requires\": []\n },\n 1283: {\n \"id\": 1283,\n \"row\": 4,\n \"col\": 0,\n \"icon\": \"spell_shadow_enslavedemon\",\n \"ranks\": [18821, 18822, 18823, 18824, 18825],\n \"requires\": []\n },\n 1281: {\n \"id\": 1281,\n \"row\": 4,\n \"col\": 1,\n \"icon\": \"spell_shadow_psychicscream\",\n \"ranks\": [18788],\n \"requires\": []\n },\n 1261: {\n \"id\": 1261,\n \"row\": 4,\n \"col\": 3,\n \"icon\": \"inv_ammo_firetar\",\n \"ranks\": [18767, 18768],\n \"requires\": []\n },\n 1244: {\n \"id\": 1244,\n \"row\": 5,\n \"col\": 2,\n \"icon\": \"spell_shadow_shadowpact\",\n \"ranks\": [23785, 23822, 23823, 23824, 23825],\n \"requires\": [{\n \"id\": 1262,\n \"qty\": 5\n }]\n },\n 1282: {\n \"id\": 1282,\n \"row\": 6,\n \"col\": 1,\n \"icon\": \"spell_shadow_gathershadows\",\n \"ranks\": [19028],\n \"requires\": [{\n \"id\": 1281,\n \"qty\": 1\n }]\n },\n 1263: {\n \"id\": 1263,\n \"row\": 6,\n \"col\": 2,\n \"icon\": \"inv_misc_gem_sapphire_01\",\n \"ranks\": [18774, 18775],\n \"requires\": []\n }\n },\n 361: {\n 1382: {\n \"id\": 1382,\n \"row\": 0,\n \"col\": 1,\n \"icon\": \"spell_nature_ravenform\",\n \"ranks\": [19552, 19553, 19554, 19555, 19556],\n \"requires\": []\n },\n 1389: {\n \"id\": 1389,\n \"row\": 0,\n \"col\": 2,\n \"icon\": \"spell_nature_reincarnation\",\n \"ranks\": [19583, 19584, 19585, 19586, 19587],\n \"requires\": []\n },\n 1624: {\n \"id\": 1624,\n \"row\": 1,\n \"col\": 0,\n \"icon\": \"ability_eyeoftheowl\",\n \"ranks\": [19557, 19558],\n \"requires\": []\n },\n 1381: {\n \"id\": 1381,\n \"row\": 1,\n \"col\": 1,\n \"icon\": \"ability_hunter_aspectofthemonkey\",\n \"ranks\": [19549, 19550, 19551, 24386, 24387],\n \"requires\": []\n },\n 1395: {\n \"id\": 1395,\n \"row\": 1,\n \"col\": 2,\n \"icon\": \"inv_misc_pelt_bear_03\",\n \"ranks\": [19609, 19610, 19612],\n \"requires\": []\n },\n 1625: {\n \"id\": 1625,\n \"row\": 1,\n \"col\": 3,\n \"icon\": \"ability_hunter_beastsoothe\",\n \"ranks\": [24443, 19575],\n \"requires\": []\n },\n 1384: {\n \"id\": 1384,\n \"row\": 2,\n \"col\": 0,\n \"icon\": \"ability_mount_jungletiger\",\n \"ranks\": [19559, 19560],\n \"requires\": []\n },\n 1391: {\n \"id\": 1391,\n \"row\": 2,\n \"col\": 1,\n \"icon\": \"ability_druid_dash\",\n \"ranks\": [19596],\n \"requires\": []\n },\n 1396: {\n \"id\": 1396,\n \"row\": 2,\n \"col\": 2,\n \"icon\": \"ability_bullrush\",\n \"ranks\": [19616, 19617, 19618, 19619, 19620],\n \"requires\": []\n },\n 1385: {\n \"id\": 1385,\n \"row\": 3,\n \"col\": 1,\n \"icon\": \"ability_hunter_mendpet\",\n \"ranks\": [19572, 19573],\n \"requires\": []\n },\n 1393: {\n \"id\": 1393,\n \"row\": 3,\n \"col\": 2,\n \"icon\": \"inv_misc_monsterclaw_04\",\n \"ranks\": [19598, 19599, 19600, 19601, 19602],\n \"requires\": []\n },\n 1388: {\n \"id\": 1388,\n \"row\": 4,\n \"col\": 0,\n \"icon\": \"ability_druid_demoralizingroar\",\n \"ranks\": [19578, 20895],\n \"requires\": []\n },\n 1387: {\n \"id\": 1387,\n \"row\": 4,\n \"col\": 1,\n \"icon\": \"ability_devour\",\n \"ranks\": [19577],\n \"requires\": []\n },\n 1390: {\n \"id\": 1390,\n \"row\": 4,\n \"col\": 3,\n \"icon\": \"spell_nature_abolishmagic\",\n \"ranks\": [19590, 19592],\n \"requires\": []\n },\n 1397: {\n \"id\": 1397,\n \"row\": 5,\n \"col\": 2,\n \"icon\": \"inv_misc_monsterclaw_03\",\n \"ranks\": [19621, 19622, 19623, 19624, 19625],\n \"requires\": [{\n \"id\": 1393,\n \"qty\": 5\n }]\n },\n 1386: {\n \"id\": 1386,\n \"row\": 6,\n \"col\": 1,\n \"icon\": \"ability_druid_ferociousbite\",\n \"ranks\": [19574],\n \"requires\": [{\n \"id\": 1387,\n \"qty\": 1\n }]\n }\n },\n 362: {\n 1623: {\n \"id\": 1623,\n \"row\": 0,\n \"col\": 0,\n \"icon\": \"inv_misc_head_dragon_black\",\n \"ranks\": [24293, 24294, 24295],\n \"requires\": []\n },\n 1301: {\n \"id\": 1301,\n \"row\": 0,\n \"col\": 1,\n \"icon\": \"spell_holy_prayerofhealing\",\n \"ranks\": [19151, 19152, 19153],\n \"requires\": []\n },\n 1311: {\n \"id\": 1311,\n \"row\": 0,\n \"col\": 2,\n \"icon\": \"ability_parry\",\n \"ranks\": [19295, 19297, 19298, 19301, 19300],\n \"requires\": []\n },\n 1304: {\n \"id\": 1304,\n \"row\": 1,\n \"col\": 0,\n \"icon\": \"spell_nature_stranglevines\",\n \"ranks\": [19184, 19387, 19388, 19389, 19390],\n \"requires\": []\n },\n 1621: {\n \"id\": 1621,\n \"row\": 1,\n \"col\": 1,\n \"icon\": \"ability_racial_bloodrage\",\n \"ranks\": [19159, 19160],\n \"requires\": []\n },\n 1305: {\n \"id\": 1305,\n \"row\": 1,\n \"col\": 2,\n \"icon\": \"ability_rogue_trip\",\n \"ranks\": [19228, 19232, 19233, 19234, 19235],\n \"requires\": []\n },\n 1306: {\n \"id\": 1306,\n \"row\": 2,\n \"col\": 0,\n \"icon\": \"spell_nature_timestop\",\n \"ranks\": [19239, 19245],\n \"requires\": []\n },\n 1622: {\n \"id\": 1622,\n \"row\": 2,\n \"col\": 1,\n \"icon\": \"spell_shadow_twilight\",\n \"ranks\": [19255, 19256, 19257, 19258, 19259],\n \"requires\": []\n },\n 1308: {\n \"id\": 1308,\n \"row\": 2,\n \"col\": 2,\n \"icon\": \"ability_whirlwind\",\n \"ranks\": [19263],\n \"requires\": []\n },\n 1322: {\n \"id\": 1322,\n \"row\": 3,\n \"col\": 0,\n \"icon\": \"ability_ensnare\",\n \"ranks\": [19376, 19377],\n \"requires\": []\n },\n 1310: {\n \"id\": 1310,\n \"row\": 3,\n \"col\": 1,\n \"icon\": \"ability_kick\",\n \"ranks\": [19290, 19294, 24283],\n \"requires\": []\n },\n 1309: {\n \"id\": 1309,\n \"row\": 3,\n \"col\": 3,\n \"icon\": \"ability_rogue_feigndeath\",\n \"ranks\": [19286, 19287],\n \"requires\": []\n },\n 1321: {\n \"id\": 1321,\n \"row\": 4,\n \"col\": 1,\n \"icon\": \"spell_holy_blessingofstamina\",\n \"ranks\": [19370, 19371, 19373],\n \"requires\": []\n },\n 1312: {\n \"id\": 1312,\n \"row\": 4,\n \"col\": 2,\n \"icon\": \"ability_warrior_challange\",\n \"ranks\": [19306],\n \"requires\": [{\n \"id\": 1308,\n \"qty\": 1\n }]\n },\n 1303: {\n \"id\": 1303,\n \"row\": 5,\n \"col\": 2,\n \"icon\": \"spell_nature_invisibilty\",\n \"ranks\": [19168, 19180, 19181, 24296, 24297],\n \"requires\": []\n },\n 1325: {\n \"id\": 1325,\n \"row\": 6,\n \"col\": 1,\n \"icon\": \"inv_spear_02\",\n \"ranks\": [19386],\n \"requires\": [{\n \"id\": 1321,\n \"qty\": 3\n }]\n }\n },\n 363: {\n 1341: {\n \"id\": 1341,\n \"row\": 0,\n \"col\": 1,\n \"icon\": \"spell_frost_stun\",\n \"ranks\": [19407, 19412, 19413, 19414, 19415],\n \"requires\": []\n },\n 1342: {\n \"id\": 1342,\n \"row\": 0,\n \"col\": 2,\n \"icon\": \"spell_frost_wizardmark\",\n \"ranks\": [19416, 19417, 19418, 19419, 19420],\n \"requires\": []\n },\n 1343: {\n \"id\": 1343,\n \"row\": 1,\n \"col\": 1,\n \"icon\": \"ability_hunter_snipershot\",\n \"ranks\": [19421, 19422, 19423, 19424, 19425],\n \"requires\": []\n },\n 1344: {\n \"id\": 1344,\n \"row\": 1,\n \"col\": 2,\n \"icon\": \"ability_searingarrow\",\n \"ranks\": [19426, 19427, 19429, 19430, 19431],\n \"requires\": []\n },\n 1345: {\n \"id\": 1345,\n \"row\": 2,\n \"col\": 0,\n \"icon\": \"inv_spear_07\",\n \"ranks\": [19434],\n \"requires\": []\n },\n 1346: {\n \"id\": 1346,\n \"row\": 2,\n \"col\": 1,\n \"icon\": \"ability_impalingbolt\",\n \"ranks\": [19454, 19455, 19456, 19457, 19458],\n \"requires\": []\n },\n 1352: {\n \"id\": 1352,\n \"row\": 2,\n \"col\": 3,\n \"icon\": \"ability_townwatch\",\n \"ranks\": [19498, 19499, 19500],\n \"requires\": []\n },\n 1348: {\n \"id\": 1348,\n \"row\": 3,\n \"col\": 1,\n \"icon\": \"ability_hunter_quickshot\",\n \"ranks\": [19464, 19465, 19466, 19467, 19468],\n \"requires\": []\n },\n 1349: {\n \"id\": 1349,\n \"row\": 3,\n \"col\": 2,\n \"icon\": \"ability_piercedamage\",\n \"ranks\": [19485, 19487, 19488, 19489, 19490],\n \"requires\": [{\n \"id\": 1344,\n \"qty\": 5\n }]\n },\n 1353: {\n \"id\": 1353,\n \"row\": 4,\n \"col\": 0,\n \"icon\": \"ability_golemstormbolt\",\n \"ranks\": [19503],\n \"requires\": []\n },\n 1347: {\n \"id\": 1347,\n \"row\": 4,\n \"col\": 1,\n \"icon\": \"ability_upgrademoonglaive\",\n \"ranks\": [19461, 19462, 24691],\n \"requires\": []\n },\n 1351: {\n \"id\": 1351,\n \"row\": 4,\n \"col\": 2,\n \"icon\": \"ability_hunter_criticalshot\",\n \"ranks\": [19491, 19493, 19494],\n \"requires\": []\n },\n 1362: {\n \"id\": 1362,\n \"row\": 5,\n \"col\": 2,\n \"icon\": \"inv_weapon_rifle_06\",\n \"ranks\": [19507, 19508, 19509, 19510, 19511],\n \"requires\": []\n },\n 1361: {\n \"id\": 1361,\n \"row\": 6,\n \"col\": 1,\n \"icon\": \"ability_trueshot\",\n \"ranks\": [19506],\n \"requires\": [{\n \"id\": 1347,\n \"qty\": 3\n }]\n }\n },\n 381: {\n 1401: {\n \"id\": 1401,\n \"row\": 0,\n \"col\": 1,\n \"icon\": \"spell_holy_fistofjustice\",\n \"ranks\": [20042, 20045, 20046, 20047, 20048],\n \"requires\": []\n },\n 1407: {\n \"id\": 1407,\n \"row\": 0,\n \"col\": 2,\n \"icon\": \"spell_frost_windwalkon\",\n \"ranks\": [20101, 20102, 20103, 20104, 20105],\n \"requires\": []\n },\n 1631: {\n \"id\": 1631,\n \"row\": 1,\n \"col\": 0,\n \"icon\": \"spell_holy_righteousfury\",\n \"ranks\": [25956, 25957],\n \"requires\": []\n },\n 1464: {\n \"id\": 1464,\n \"row\": 1,\n \"col\": 1,\n \"icon\": \"spell_holy_holysmite\",\n \"ranks\": [20335, 20336, 20337],\n \"requires\": []\n },\n 1403: {\n \"id\": 1403,\n \"row\": 1,\n \"col\": 2,\n \"icon\": \"ability_parry\",\n \"ranks\": [20060, 20061, 20062, 20063, 20064],\n \"requires\": []\n },\n 1633: {\n \"id\": 1633,\n \"row\": 2,\n \"col\": 0,\n \"icon\": \"spell_holy_vindication\",\n \"ranks\": [9452, 26016, 26021],\n \"requires\": []\n },\n 1411: {\n \"id\": 1411,\n \"row\": 2,\n \"col\": 1,\n \"icon\": \"spell_holy_retributionaura\",\n \"ranks\": [20117, 20118, 20119, 20120, 20121],\n \"requires\": []\n },\n 1481: {\n \"id\": 1481,\n \"row\": 2,\n \"col\": 2,\n \"icon\": \"ability_warrior_innerrage\",\n \"ranks\": [20375],\n \"requires\": []\n },\n 1634: {\n \"id\": 1634,\n \"row\": 2,\n \"col\": 3,\n \"icon\": \"spell_holy_persuitofjustice\",\n \"ranks\": [26022, 26023],\n \"requires\": []\n },\n 1632: {\n \"id\": 1632,\n \"row\": 3,\n \"col\": 0,\n \"icon\": \"spell_holy_eyeforaneye\",\n \"ranks\": [9799, 25988],\n \"requires\": []\n },\n 1405: {\n \"id\": 1405,\n \"row\": 3,\n \"col\": 2,\n \"icon\": \"spell_holy_auraoflight\",\n \"ranks\": [20091, 20092],\n \"requires\": []\n },\n 1410: {\n \"id\": 1410,\n \"row\": 4,\n \"col\": 0,\n \"icon\": \"inv_hammer_04\",\n \"ranks\": [20111, 20112, 20113],\n \"requires\": []\n },\n 1409: {\n \"id\": 1409,\n \"row\": 4,\n \"col\": 2,\n \"icon\": \"spell_holy_mindvision\",\n \"ranks\": [20218],\n \"requires\": []\n },\n 1402: {\n \"id\": 1402,\n \"row\": 5,\n \"col\": 1,\n \"icon\": \"ability_racial_avatar\",\n \"ranks\": [20049, 20056, 20057, 20058, 20059],\n \"requires\": [{\n \"id\": 1411,\n \"qty\": 5\n }]\n },\n 1441: {\n \"id\": 1441,\n \"row\": 6,\n \"col\": 1,\n \"icon\": \"spell_holy_prayerofhealing\",\n \"ranks\": [20066],\n \"requires\": []\n }\n },\n 382: {\n 1450: {\n \"id\": 1450,\n \"row\": 0,\n \"col\": 1,\n \"icon\": \"ability_golemthunderclap\",\n \"ranks\": [20262, 20263, 20264, 20265, 20266],\n \"requires\": []\n },\n 1449: {\n \"id\": 1449,\n \"row\": 0,\n \"col\": 2,\n \"icon\": \"spell_nature_sleep\",\n \"ranks\": [20257, 20258, 20259, 20260, 20261],\n \"requires\": []\n },\n 1432: {\n \"id\": 1432,\n \"row\": 1,\n \"col\": 1,\n \"icon\": \"spell_arcane_blink\",\n \"ranks\": [20205, 20206, 20207, 20209, 20208],\n \"requires\": []\n },\n 1463: {\n \"id\": 1463,\n \"row\": 1,\n \"col\": 2,\n \"icon\": \"ability_thunderbolt\",\n \"ranks\": [20224, 20225, 20330, 20331, 20332],\n \"requires\": []\n },\n 1444: {\n \"id\": 1444,\n \"row\": 2,\n \"col\": 0,\n \"icon\": \"spell_holy_holybolt\",\n \"ranks\": [20237, 20238, 20239],\n \"requires\": []\n },\n 1435: {\n \"id\": 1435,\n \"row\": 2,\n \"col\": 1,\n \"icon\": \"spell_holy_innerfire\",\n \"ranks\": [26573],\n \"requires\": []\n },\n 1443: {\n \"id\": 1443,\n \"row\": 2,\n \"col\": 2,\n \"icon\": \"spell_holy_layonhands\",\n \"ranks\": [20234, 20235],\n \"requires\": []\n },\n 1628: {\n \"id\": 1628,\n \"row\": 2,\n \"col\": 3,\n \"icon\": \"spell_holy_unyieldingfaith\",\n \"ranks\": [9453, 25836],\n \"requires\": []\n },\n 1461: {\n \"id\": 1461,\n \"row\": 3,\n \"col\": 1,\n \"icon\": \"spell_holy_greaterheal\",\n \"ranks\": [20210, 20212, 20213, 20214, 20215],\n \"requires\": []\n },\n 1446: {\n \"id\": 1446,\n \"row\": 3,\n \"col\": 2,\n \"icon\": \"spell_holy_sealofwisdom\",\n \"ranks\": [20244, 20245],\n \"requires\": []\n },\n 1433: {\n \"id\": 1433,\n \"row\": 4,\n \"col\": 1,\n \"icon\": \"spell_holy_heal\",\n \"ranks\": [20216],\n \"requires\": [{\n \"id\": 1461,\n \"qty\": 5\n }]\n },\n 1465: {\n \"id\": 1465,\n \"row\": 4,\n \"col\": 2,\n \"icon\": \"spell_holy_healingaura\",\n \"ranks\": [20359, 20360, 20361],\n \"requires\": []\n },\n 1627: {\n \"id\": 1627,\n \"row\": 5,\n \"col\": 2,\n \"icon\": \"spell_holy_power\",\n \"ranks\": [5923, 5924, 5925, 5926, 25829],\n \"requires\": []\n },\n 1502: {\n \"id\": 1502,\n \"row\": 6,\n \"col\": 1,\n \"icon\": \"spell_holy_searinglight\",\n \"ranks\": [20473],\n \"requires\": [{\n \"id\": 1433,\n \"qty\": 1\n }]\n }\n },\n 383: {\n 1422: {\n \"id\": 1422,\n \"row\": 0,\n \"col\": 1,\n \"icon\": \"spell_holy_devotionaura\",\n \"ranks\": [20138, 20139, 20140, 20141, 20142],\n \"requires\": []\n },\n 1421: {\n \"id\": 1421,\n \"row\": 0,\n \"col\": 2,\n \"icon\": \"ability_defend\",\n \"ranks\": [20127, 20130, 20135, 20136, 20137],\n \"requires\": []\n },\n 1630: {\n \"id\": 1630,\n \"row\": 1,\n \"col\": 0,\n \"icon\": \"ability_rogue_ambush\",\n \"ranks\": [20189, 20192, 20193],\n \"requires\": []\n },\n 1425: {\n \"id\": 1425,\n \"row\": 1,\n \"col\": 1,\n \"icon\": \"spell_holy_sealofprotection\",\n \"ranks\": [20174, 20175],\n \"requires\": []\n },\n 1423: {\n \"id\": 1423,\n \"row\": 1,\n \"col\": 3,\n \"icon\": \"spell_holy_devotion\",\n \"ranks\": [20143, 20144, 20145, 20146, 20147],\n \"requires\": []\n },\n 1442: {\n \"id\": 1442,\n \"row\": 2,\n \"col\": 0,\n \"icon\": \"spell_magic_magearmor\",\n \"ranks\": [20217],\n \"requires\": []\n },\n 1501: {\n \"id\": 1501,\n \"row\": 2,\n \"col\": 1,\n \"icon\": \"spell_holy_sealoffury\",\n \"ranks\": [20468, 20469, 20470],\n \"requires\": []\n },\n 1424: {\n \"id\": 1424,\n \"row\": 2,\n \"col\": 2,\n \"icon\": \"inv_shield_06\",\n \"ranks\": [20148, 20149, 20150],\n \"requires\": [{\n \"id\": 1421,\n \"qty\": 5\n }]\n },\n 1629: {\n \"id\": 1629,\n \"row\": 2,\n \"col\": 3,\n \"icon\": \"spell_magic_lesserinvisibilty\",\n \"ranks\": [20096, 20097, 20098, 20099, 20100],\n \"requires\": []\n },\n 1521: {\n \"id\": 1521,\n \"row\": 3,\n \"col\": 1,\n \"icon\": \"spell_holy_sealofmight\",\n \"ranks\": [20487, 20488, 20489],\n \"requires\": []\n },\n 1626: {\n \"id\": 1626,\n \"row\": 3,\n \"col\": 2,\n \"icon\": \"spell_holy_mindsooth\",\n \"ranks\": [20254, 20255, 20256],\n \"requires\": []\n },\n 1431: {\n \"id\": 1431,\n \"row\": 4,\n \"col\": 1,\n \"icon\": \"spell_nature_lightningshield\",\n \"ranks\": [20911],\n \"requires\": []\n },\n 1426: {\n \"id\": 1426,\n \"row\": 4,\n \"col\": 2,\n \"icon\": \"spell_holy_blessingofstrength\",\n \"ranks\": [20177, 20179, 20181, 20180, 20182],\n \"requires\": []\n },\n 1429: {\n \"id\": 1429,\n \"row\": 5,\n \"col\": 2,\n \"icon\": \"inv_sword_20\",\n \"ranks\": [20196, 20197, 20198, 20199, 20200],\n \"requires\": []\n },\n 1430: {\n \"id\": 1430,\n \"row\": 6,\n \"col\": 1,\n \"icon\": \"spell_holy_blessingofprotection\",\n \"ranks\": [20925],\n \"requires\": [{\n \"id\": 1431,\n \"qty\": 1\n }]\n }\n }\n}\n\nexport const talentsById: {[key: number]: TalentData} = {}\nexport const talentsBySpecArray: {[key: number]: TalentData[]} = {}\nexport const talentToSpec: {[key: number]: number} = {}\n\nfor (let specId in talentsBySpec) {\n for (let talentId in talentsBySpec[specId]) {\n talentsById[talentId] = talentsBySpec[specId][talentId]\n talentsBySpecArray[specId] = Object.values(talentsBySpec[specId])\n talentToSpec[talentId] = parseInt(specId, 10)\n }\n}\n","export const classes: ClassData[] = [\n { \n id: 1,\n name: 'Warrior',\n icon: 'class_warrior',\n specs: [161, 164, 163]\n },\n { \n id: 2,\n name: 'Paladin',\n icon: 'class_paladin',\n specs: [382, 383, 381]\n },\n { \n id: 3,\n name: 'Hunter',\n icon: 'class_hunter',\n specs: [361, 363, 362]\n },\n { \n id: 4,\n name: 'Rogue',\n icon: 'class_rogue',\n specs: [182, 181, 183]\n },\n { \n id: 5,\n name: 'Priest',\n icon: 'class_priest',\n specs: [201, 202, 203]\n },\n { \n id: 7,\n name: 'Shaman',\n icon: 'class_shaman',\n specs: [261, 263, 262]\n },\n { \n id: 8,\n name: 'Mage',\n icon: 'class_mage',\n specs: [81, 41, 61]\n },\n { \n id: 9,\n name: 'Warlock',\n icon: 'class_warlock',\n specs: [302, 303, 301]\n },\n { \n id: 11,\n name: 'Druid',\n icon: 'class_druid',\n specs: [283, 281, 282]\n },\n]\n\nexport const classById: {[key: number]: ClassData} = \n classes.reduce((previousValue: object, currentValue: ClassData) => {\n return {\n ...previousValue,\n [currentValue.id]: currentValue\n }\n }, {}) \n\nexport const classByName: {[key: string]: ClassData} = \n classes.reduce((previousValue: object, currentValue: ClassData) => {\n return {\n ...previousValue,\n [currentValue.name.toLowerCase()]: currentValue\n }\n }, {})\n","import { List, Map, fromJS } from 'immutable'\nimport { \n talentsBySpec, \n talentToSpec, \n talentsBySpecArray \n} from '../data/talents';\nimport { classByName } from '../data/classes'\n\nexport const MAX_POINTS = 51\nexport const MAX_ROWS = 7\n\nexport const SORT_TALENTS = (a: TalentData, b: TalentData) => {\n if (a.row === b.row) {\n return a.col - b.col\n }\n return a.row - b.row\n}\n\n/**\n * Returns the overall points spent in the tree.\n */\nexport function getPointsInSpec(specId: number, known: Map): number {\n // TODO: Hard to test this method when referencing talents from a file. Improve this.\n return Object.values(talentsBySpec[specId]).reduce((prev: number, current: TalentData) => {\n return prev + known.get(current.id, 0)\n }, 0)\n}\n\nexport function calcAvailablePoints(known: Map): number {\n return Math.max(0, MAX_POINTS - known.reduce((prev, current) => prev + current, 0))\n}\n\n/**\n * Returns whether a talent's other talent requirements are met.\n */\nexport function calcMeetsRequirements(talent: TalentData, known: Map): boolean {\n if (talent.requires.length === 0) {\n return true\n }\n return talent.requires.reduce((prev, req) => {\n if (!prev) return false\n return known.get(req.id, 0) >= req.qty\n }, true)\n}\n\nexport const canLearnTalent = (known: Map, talent: TalentData): boolean => {\n // Reached the max rank?\n if (known.get(talent.id, 0) >= talent.ranks.length) {\n return false\n }\n\n // Spend a maximum of 51 points\n if (calcAvailablePoints(known) === 0) {\n return false\n }\n \n // Support for specific Talent dependency requirement.\n if (talent.requires.length > 0 && !calcMeetsRequirements(talent, known)) {\n return false\n }\n \n // Check we have the required amount of points spent in the tree for this talent\n const requiredPoints = talent.row * 5\n const pointsInSpec = getPointsInSpec(talentToSpec[talent.id], known)\n if (requiredPoints > pointsInSpec) {\n return false\n }\n\n return true\n}\n\n/**\n * Adds a single talent point to the Map, if possible.\n */\nexport const addTalentPoint = (known: Map, talent: TalentData): Map => {\n const currentPoints = known.get(talent.id, 0)\n \n if (!canLearnTalent(known, talent)) {\n return known\n }\n\n return known.set(talent.id, currentPoints + 1)\n}\n\n/**\n * Removes a single talent point from the Map, if possible.\n */\nexport const removeTalentPoint = (known: Map, talent: TalentData): Map => {\n const currentPoints = known.get(talent.id, 0)\n const specId = talentToSpec[talent.id]\n\n // No points to reduce for this talent\n if (currentPoints === 0) {\n console.warn('no points to reduce')\n return known\n }\n \n let isDependency = false\n let highestRow = 0\n let cumulativePointsPerRow = {}\n\n known.forEach((points, talentId) => {\n const t = talentsBySpec[specId][talentId]\n if (t && points > 0) {\n isDependency = isDependency || t.requires.some((req) => req.id === talent.id)\n if (t.row > highestRow) {\n console.info('new highest row:', t)\n }\n highestRow = t.row > highestRow ? t.row : highestRow\n for (let row = t.row; row < MAX_ROWS; row++) {\n cumulativePointsPerRow[row] = (cumulativePointsPerRow[row] || 0) + points\n }\n }\n })\n\n // Check if removing this talent would not break the requirements for talents spent in later rows\n const pointsUntilHighestRow = cumulativePointsPerRow[highestRow - 1]\n const targetPointsHighestRow = highestRow * 5\n if (talent.row < highestRow && pointsUntilHighestRow - 1 < targetPointsHighestRow) {\n console.warn('would not break the requirements for talents spent in later rows', { \n talent,\n highestRow,\n pointsUntilHighestRow,\n targetPointsHighestRow\n })\n return known\n }\n\n // Prevent if another talent depends on this \n if (isDependency) {\n console.warn('is dependency')\n return known\n }\n\n return currentPoints === 1 \n ? known.remove(talent.id)\n : known.set(talent.id, currentPoints - 1)\n}\n\n/**\n * Either adds or removes a talent point based on the modifier.\n */\nexport const modifyTalentPoint = (known: Map, talent: TalentData, modifier: 1 | -1): Map => {\n if (modifier === 1) {\n return addTalentPoint(known, talent)\n } else {\n return removeTalentPoint(known, talent)\n }\n}\n\n// TODO\nexport function parsePointString(str: string): List> {\n const list: Array = []\n const trees = str.split('-')\n\n trees.forEach((stringForTree, index) => {\n const points = stringForTree.split('').map(a => parseInt(a, 10))\n list[index] = points\n })\n\n return fromJS(list)\n}\n\n/**\n * Encodes a Map of known talents into a URL-friendly string.\n */\nexport function encodeKnownTalents(known: Map, className: string): string {\n let string = ''\n const { specs } = classByName[className]\n for (let i = 0; i < specs.length; i++) {\n const specId = specs[i]\n const talents = talentsBySpecArray[specId].sort(SORT_TALENTS)\n string += i > 0 ? '-' : ''\n string += removeTrailingCharacters(\n talents.map((talent) => known.get(talent.id, 0)).join(''),\n '0'\n )\n }\n return removeTrailingCharacters(string, '-')\n}\n\n/**\n * Decodes a string of points into a Map of talents.\n */\nexport function decodeKnownTalents(pointString: string, className: string): Map {\n console.log(pointString, className)\n\n const { specs } = classByName[className]\n let known = Map()\n\n // TODO: Make sure we validate the point string\n const parts = pointString.split('-')\n for (let i = 0; i < parts.length; i++) {\n const specId = specs[i]\n const specPointStr = parts[i]\n console.log(specPointStr, { specId })\n const talents = talentsBySpecArray[specId].sort(SORT_TALENTS)\n\n for (let y = 0; y < specPointStr.length; y++) {\n const talent = talents[y]\n const points = parseInt(specPointStr[y], 10)\n \n // Validation: break out loop if there's more points in the string than this talent can have\n if (points > talent.ranks.length) {\n break\n }\n \n if (points > 0) {\n console.log(`Spent ${points} in ${talent.id}`)\n known = known.set(talent.id, points)\n }\n }\n }\n\n return known\n}\n\n/**\n * Removes repeated characters from the end of a string.\n */\nfunction removeTrailingCharacters(str: string, char: string): string {\n while (str[str.length - 1] === char) {\n str = str.slice(0, -1)\n }\n return str\n}","import './TalentSlot.scss'\nimport React, { FC } from 'react'\nimport { Icon } from './Icon'\nimport classNames from 'classnames'\nimport { Map } from 'immutable';\nimport { getPointsInSpec, calcMeetsRequirements } from '../lib/tree';\n\ninterface Props {\n talent: TalentData\n specId: number\n availablePoints: number\n /** All spent talents */\n knownTalents: Map\n /** Disabled override */\n disabled?: boolean\n onClick?: (talentId: number) => void\n onRightClick?: (talentId: number) => void\n}\n\nconst defaultProps: Partial = {\n onClick: () => undefined,\n onRightClick: () => undefined\n}\n\nconst isAvailable = (talent: TalentData, specId: number, knownTalents: Map): boolean => {\n // Dependent on other talents?\n if (!calcMeetsRequirements(talent, knownTalents)) {\n return false\n }\n const pointsInSpec = getPointsInSpec(specId, knownTalents)\n return talent.row * 5 <= pointsInSpec\n}\n\nexport const TalentSlot: FC = (props) => {\n const { talent, specId, knownTalents, availablePoints } = props\n const points = knownTalents.get(talent.id, 0)\n const showPoints = points > 0 || availablePoints > 0\n const disabled = props.disabled || !showPoints || !isAvailable(talent, specId, knownTalents)\n\n const containerClassNames = classNames('talent', {\n 'talent--disabled': !!disabled,\n 'talent--available': !disabled && points < talent.ranks.length,\n 'talent--maxed': points >= talent.ranks.length || (points > 0 && availablePoints === 0)\n })\n\n const pointsClassNames = classNames('point-label', {\n 'point-label--enabled': !disabled\n })\n\n const handleContextMenu = (e) => {\n if (props.onRightClick) props.onRightClick(talent.id)\n e.preventDefault()\n return false\n }\n\n return (\n
props.onClick(talent.id) : () => {}}\n onContextMenu={handleContextMenu}\n >\n
\n \n\n {showPoints && !disabled &&\n
\n {points}\n /{talent.ranks.length}\n
\n }\n
\n )\n}\n\nTalentSlot.defaultProps = defaultProps\n\n;(TalentSlot as any).whyDidYouRender = true","import './Arrow.scss'\nimport React, { FC } from 'react'\nimport classNames from 'classnames'\n\ninterface Props {\n from: TalentData\n to: TalentData\n active?: boolean\n}\n\nexport const Arrow: FC = ({ from, to, active = false }) => {\n const length = to.row === from.row \n ? Math.abs(to.col - from.col)\n : to.row - from.row\n\n const props = {\n 'data-col': from.col,\n 'data-row': from.row,\n 'data-length': length,\n }\n\n const className = classNames('arrow', {\n 'arrow--active': active,\n 'arrow--down': to.row > from.row,\n 'arrow--right': to.row === from.row && to.col > from.col,\n 'arrow--left': to.row === from.row && to.col < from.col,\n 'arrow--right-down': to.row === from.row + 1 && to.col === from.col + 1\n })\n\n return
\n}","import React, { useCallback } from 'react'\nimport { Map } from 'immutable'\nimport { TalentSlot } from './TalentSlot';\nimport { getPointsInSpec, canLearnTalent } from '../lib/tree';\nimport { talentsBySpec, specNames, talentsById } from '../data/talents'\nimport { Arrow } from './Arrow'\n\ninterface Props {\n specId: number\n availablePoints: number\n knownTalents: Map\n onTalentPress: TalentClickHandler\n}\n\nexport const TalentTree: React.FC = ({ specId, knownTalents, availablePoints, onTalentPress }) => {\n const talents = Object.values(talentsBySpec[specId])\n\n const handleClick = useCallback(\n (talentId) => onTalentPress(specId, talentId, 1), \n [specId, onTalentPress]\n )\n const handleRightClick = useCallback(\n (talentId) => onTalentPress(specId, talentId, -1), \n [specId, onTalentPress]\n )\n\n const bodyStyle = { \n backgroundImage: `url(/images/specs/${specId}.jpg)`\n }\n\n const arrows = talents\n .filter((talent) => talent.requires.length > 0)\n .map((talent) => {\n return 0 || canLearnTalent(knownTalents, talent)}\n />\n })\n\n return (\n
\n
\n

{specNames[specId]} ({getPointsInSpec(specId, knownTalents)})

\n
\n\n
\n {talents.map((talent) => \n \n )}\n\n {arrows}\n
\n
\n )\n}\n\n;(TalentTree as any).whyDidYouRender = true","import React from 'react'\nimport { Map } from 'immutable'\nimport { TalentTree } from './TalentTree'\nimport { \n modifyTalentPoint, \n calcAvailablePoints,\n encodeKnownTalents\n} from '../lib/tree'\nimport { talentsBySpec } from '../data/talents'\nimport { classByName } from '../data/classes'\nimport { History } from 'history'\n\ninterface Props {\n selectedClass: string\n history: History\n initialTalents?: Map\n}\n\nconst EMPTY_TALENTS = Map()\n // .set(30, 5)\n // .set(26, 5)\n // .set(34, 5)\n // .set(28, 2)\n // .set(27, 3)\n // .set(33, 1)\n // .set(29, 1)\n // .set(32, 1)\n\nexport class Calculator extends React.PureComponent {\n static whyDidYouRender = true\n\n state = {\n knownTalents: EMPTY_TALENTS\n }\n\n componentDidMount() {\n if (this.props.initialTalents) {\n this.setState({ knownTalents: this.props.initialTalents })\n this.updateURL(this.props.initialTalents)\n }\n }\n\n componentDidUpdate(prevProps: Props) {\n if (prevProps.selectedClass !== this.props.selectedClass) {\n this.setState({ \n knownTalents: EMPTY_TALENTS \n })\n }\n }\n\n updateURL(knownTalents: Map) {\n const { selectedClass } = this.props\n const pointString = encodeKnownTalents(knownTalents, selectedClass)\n this.props.history.replace(`/${selectedClass}` + (pointString ? `/${pointString}` : ''))\n }\n \n handleTalentPress = (specId: number, talentId: number, modifier: 1 | -1) => {\n const talent = talentsBySpec[specId][talentId]\n console.log('Clicked talent: ' + talentId)\n\n const newKnownTalents = modifyTalentPoint(this.state.knownTalents, talent, modifier)\n if (newKnownTalents !== this.state.knownTalents) {\n this.updateURL(newKnownTalents)\n }\n this.setState({ knownTalents: newKnownTalents })\n }\n\n render() {\n const { selectedClass } = this.props\n const { knownTalents } = this.state\n\n const classData = classByName[selectedClass]\n const availablePoints = calcAvailablePoints(knownTalents)\n\n return (\n
\n
\n {classData.specs.map((specId) => (\n \n ))}\n
\n\n
\n Points: {availablePoints}\n
\n\n \n
\n )\n }\n}\n\n","import React from 'react'\nimport { Link } from 'react-router-dom'\nimport { classByName } from '../data/classes'\nimport { Icon } from './Icon'\nimport classNames from 'classnames'\n\ninterface Props {\n /** Name of the selected class, lowercase */\n selected?: string\n}\n\nconst classNameForItem = (c: ClassData, selected: string) => classNames('class-picker__class', {\n 'class-picker__class--active': c.name.toLowerCase() === selected,\n 'class-picker__class--inactive': !!selected && c.name.toLowerCase() !== selected\n})\n\nexport class ClassPicker extends React.PureComponent {\n static whyDidYouRender = true\n\n render() {\n const { selected } = this.props\n\n const cn = classNames('class-picker', {\n 'class-picker--has-selection': !!selected\n })\n \n return (\n
    \n {Object.values(classByName).map((c) => \n
  • \n \n \n \n
  • \n )}\n
\n )\n }\n}\n","import React from 'react'\nimport { Calculator } from './Calculator'\nimport { ClassPicker } from './ClassPicker'\nimport { match } from 'react-router-dom'\nimport { RouteComponentProps } from 'react-router'\nimport { decodeKnownTalents } from '../lib/tree'\nimport { classByName } from '../data/classes'\n\ninterface Props extends RouteComponentProps {\n match: match<{ \n selectedClass: string\n pointString: string\n }>\n}\n\nexport class IndexRoute extends React.PureComponent {\n static whyDidYouRender = true\n\n componentDidMount() {\n const { selectedClass } = this.props.match.params\n if (selectedClass && !classByName[selectedClass]) {\n this.props.history.replace('/')\n }\n }\n\n render() {\n const { match, history } = this.props\n const { selectedClass, pointString } = match.params\n\n if (selectedClass && !classByName[selectedClass]) {\n return null\n }\n\n return (\n
\n \n \n {selectedClass && \n \n }\n
\n )\n }\n}","import React from 'react'\nimport './App.scss'\nimport { IndexRoute } from './components/IndexRoute'\nimport { BrowserRouter as Router, Route } from 'react-router-dom'\n\nconst App: React.FC = () => {\n return (\n \n
\n \n
\n
\n );\n}\n\nexport default App;\n","// This optional code is used to register a service worker.\n// register() is not called by default.\n\n// This lets the app load faster on subsequent visits in production, and gives\n// it offline capabilities. However, it also means that developers (and users)\n// will only see deployed updates on subsequent visits to a page, after all the\n// existing tabs open on the page have been closed, since previously cached\n// resources are updated in the background.\n\n// To learn more about the benefits of this model and instructions on how to\n// opt-in, read https://bit.ly/CRA-PWA\n\nconst isLocalhost = Boolean(\n window.location.hostname === 'localhost' ||\n // [::1] is the IPv6 localhost address.\n window.location.hostname === '[::1]' ||\n // 127.0.0.1/8 is considered localhost for IPv4.\n window.location.hostname.match(\n /^127(?:\\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/\n )\n);\n\ntype Config = {\n onSuccess?: (registration: ServiceWorkerRegistration) => void;\n onUpdate?: (registration: ServiceWorkerRegistration) => void;\n};\n\nexport function register(config?: Config) {\n if (process.env.NODE_ENV === 'production' && 'serviceWorker' in navigator) {\n // The URL constructor is available in all browsers that support SW.\n const publicUrl = new URL(\n (process as { env: { [key: string]: string } }).env.PUBLIC_URL,\n window.location.href\n );\n if (publicUrl.origin !== window.location.origin) {\n // Our service worker won't work if PUBLIC_URL is on a different origin\n // from what our page is served on. This might happen if a CDN is used to\n // serve assets; see https://github.com/facebook/create-react-app/issues/2374\n return;\n }\n\n window.addEventListener('load', () => {\n const swUrl = `${process.env.PUBLIC_URL}/service-worker.js`;\n\n if (isLocalhost) {\n // This is running on localhost. Let's check if a service worker still exists or not.\n checkValidServiceWorker(swUrl, config);\n\n // Add some additional logging to localhost, pointing developers to the\n // service worker/PWA documentation.\n navigator.serviceWorker.ready.then(() => {\n console.log(\n 'This web app is being served cache-first by a service ' +\n 'worker. To learn more, visit https://bit.ly/CRA-PWA'\n );\n });\n } else {\n // Is not localhost. Just register service worker\n registerValidSW(swUrl, config);\n }\n });\n }\n}\n\nfunction registerValidSW(swUrl: string, config?: Config) {\n navigator.serviceWorker\n .register(swUrl)\n .then(registration => {\n registration.onupdatefound = () => {\n const installingWorker = registration.installing;\n if (installingWorker == null) {\n return;\n }\n installingWorker.onstatechange = () => {\n if (installingWorker.state === 'installed') {\n if (navigator.serviceWorker.controller) {\n // At this point, the updated precached content has been fetched,\n // but the previous service worker will still serve the older\n // content until all client tabs are closed.\n console.log(\n 'New content is available and will be used when all ' +\n 'tabs for this page are closed. See https://bit.ly/CRA-PWA.'\n );\n\n // Execute callback\n if (config && config.onUpdate) {\n config.onUpdate(registration);\n }\n } else {\n // At this point, everything has been precached.\n // It's the perfect time to display a\n // \"Content is cached for offline use.\" message.\n console.log('Content is cached for offline use.');\n\n // Execute callback\n if (config && config.onSuccess) {\n config.onSuccess(registration);\n }\n }\n }\n };\n };\n })\n .catch(error => {\n console.error('Error during service worker registration:', error);\n });\n}\n\nfunction checkValidServiceWorker(swUrl: string, config?: Config) {\n // Check if the service worker can be found. If it can't reload the page.\n fetch(swUrl)\n .then(response => {\n // Ensure service worker exists, and that we really are getting a JS file.\n const contentType = response.headers.get('content-type');\n if (\n response.status === 404 ||\n (contentType != null && contentType.indexOf('javascript') === -1)\n ) {\n // No service worker found. Probably a different app. Reload the page.\n navigator.serviceWorker.ready.then(registration => {\n registration.unregister().then(() => {\n window.location.reload();\n });\n });\n } else {\n // Service worker found. Proceed as normal.\n registerValidSW(swUrl, config);\n }\n })\n .catch(() => {\n console.log(\n 'No internet connection found. App is running in offline mode.'\n );\n });\n}\n\nexport function unregister() {\n if ('serviceWorker' in navigator) {\n navigator.serviceWorker.ready.then(registration => {\n registration.unregister();\n });\n }\n}\n","import React from 'react'\nimport ReactDOM from 'react-dom'\nimport App from './App'\nimport * as serviceWorker from './serviceWorker'\n\nif (process.env.NODE_ENV !== 'production') {\n const whyDidYouRender = require('@welldone-software/why-did-you-render/dist/no-classes-transpile/umd/whyDidYouRender.min.js')\n whyDidYouRender(React)\n}\n\nReactDOM.render(, document.getElementById('root'))\n\n// If you want your app to work offline and load faster, you can change\n// unregister() to register() below. Note this comes with some pitfalls.\n// Learn more about service workers: https://bit.ly/CRA-PWA\nserviceWorker.unregister()\n"],"sourceRoot":""} \ No newline at end of file