You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

1989 lines
80 KiB

-- DruidGuardian.lua
-- June 2018
local addon, ns = ...
local Hekili = _G[ addon ]
local class = Hekili.Class
local state = Hekili.State
local PTR = ns.PTR
-- Conduits
-- [x] savage_combatant
-- [ ] unchecked_aggression
-- Guardian Endurance
-- [-] layered_mane
-- [x] wellhoned_instincts
if UnitClassBase( "player" ) == "DRUID" then
local spec = Hekili:NewSpecialization( 104 )
spec:RegisterResource( Enum.PowerType.Rage, {
oakhearts_puny_quods = {
aura = "oakhearts_puny_quods",
last = function ()
local app = state.buff.oakhearts_puny_quods.applied
local t = state.query_time
return app + floor( t - app )
end,
interval = 1,
value = 10
},
raging_frenzy = {
aura = "frenzied_regeneration",
pvptalent = "raging_frenzy",
last = function ()
local app = state.buff.frenzied_regeneration.applied
local t = state.query_time
return app + floor( t - app )
end,
interval = 1,
value = 10 -- tooltip says 60, meaning this would be 20, but NOPE.
},
thrash_bear = {
aura = "thrash_bear",
talent = "blood_frenzy",
debuff = true,
last = function ()
return state.debuff.thrash_bear.applied + floor( state.query_time - state.debuff.thrash_bear.applied )
end,
interval = function () return class.auras.thrash_bear.tick_time end,
value = function () return 2 * state.active_dot.thrash_bear end,
}
} )
spec:RegisterResource( Enum.PowerType.LunarPower )
spec:RegisterResource( Enum.PowerType.Mana )
spec:RegisterResource( Enum.PowerType.ComboPoints )
spec:RegisterResource( Enum.PowerType.Energy )
-- Talents
spec:RegisterTalents( {
brambles = 22419, -- 203953
blood_frenzy = 22418, -- 203962
bristling_fur = 22420, -- 155835
tiger_dash = 19283, -- 252216
renewal = 18570, -- 108238
wild_charge = 18571, -- 102401
balance_affinity = 22163, -- 197488
feral_affinity = 22156, -- 202155
restoration_affinity = 22159, -- 197492
mighty_bash = 21778, -- 5211
mass_entanglement = 18576, -- 102359
heart_of_the_wild = 18577, -- 319454
soul_of_the_forest = 21709, -- 158477
galactic_guardian = 21707, -- 203964
incarnation = 22388, -- 102558
earthwarden = 22423, -- 203974
survival_of_the_fittest = 21713, -- 203965
guardian_of_elune = 22390, -- 155578
rend_and_tear = 22426, -- 204053
lunar_beam = 22427, -- 204066
pulverize = 22425, -- 80313
} )
-- PvP Talents
spec:RegisterPvpTalents( {
alpha_challenge = 842, -- 207017
charging_bash = 194, -- 228431
demoralizing_roar = 52, -- 201664
den_mother = 51, -- 236180
emerald_slumber = 197, -- 329042
entangling_claws = 195, -- 202226
freedom_of_the_herd = 3750, -- 213200
grove_protection = 5410, -- 354654
malornes_swiftness = 1237, -- 236147
master_shapeshifter = 49, -- 236144
overrun = 196, -- 202246
raging_frenzy = 192, -- 236153
sharpened_claws = 193, -- 202110
toughness = 50, -- 201259
} )
local mod_circle_hot = setfenv( function( x )
return legendary.circle_of_life_and_death.enabled and ( 0.85 * x ) or x
end, state )
local mod_circle_dot = setfenv( function( x )
return legendary.circle_of_life_and_death.enabled and ( 0.75 * x ) or x
end, state )
-- Auras
spec:RegisterAuras( {
aquatic_form = {
id = 276012,
duration = 3600,
max_stack = 1,
},
astral_influence = {
id = 197524,
},
barkskin = {
id = 22812,
duration = 12,
max_stack = 1,
},
bear_form = {
id = 5487,
duration = 3600,
max_stack = 1,
},
berserk = {
id = 50334,
duration = 15,
max_stack = 1,
},
-- Alias for Berserk vs. Incarnation
berserk_bear = {
alias = { "berserk", "incarnation" },
aliasMode = "first", -- use duration info from the first buff that's up, as they should all be equal.
aliasType = "buff",
duration = function () return talent.incarnation.enabled and 30 or 15 end,
},
bristling_fur = {
id = 155835,
duration = 8,
max_stack = 1,
},
cat_form = {
id = 768,
duration = 3600,
max_stack = 1,
},
convoke_the_spirits = {
id = 323764,
duration = 4,
max_stack = 1,
},
dash = {
id = 1850,
duration = 10,
max_stack = 1,
},
earthwarden = {
id = 203975,
duration = 3600,
max_stack = 3,
},
entangling_roots = {
id = 339,
duration = 30,
type = "Magic",
max_stack = 1,
},
feline_swiftness = {
id = 131768,
},
flight_form = {
id = 276029,
duration = 3600,
max_stack = 1,
},
frenzied_regeneration = {
id = 22842,
duration = 3,
max_stack = 1,
},
galactic_guardian = {
id = 213708,
duration = 15,
max_stack = 1,
},
gore = {
id = 93622,
duration = 10,
max_stack = 1,
},
growl = {
id = 6795,
duration = 3,
max_stack = 1,
},
guardian_of_elune = {
id = 213680,
duration = 15,
max_stack = 1,
},
heart_of_the_wild = {
id = 319454,
duration = 45,
max_stack = 1,
copy = { 319451, 319452, 319453 }
},
hibernate = {
id = 2637,
duration = 40,
max_stack = 1,
},
immobilized = {
id = 45334,
duration = 4,
max_stack = 1,
},
incapacitating_roar = {
id = 99,
duration = 3,
max_stack = 1,
},
incarnation = {
id = 102558,
duration = 30,
max_stack = 1,
copy = "incarnation_guardian_of_ursoc"
},
intimidating_roar = {
id = 236748,
duration = 3,
max_stack = 1,
},
ironfur = {
id = 192081,
duration = function () return buff.guardian_of_elune.up and 9 or 7 end,
max_stack = 5,
},
lightning_reflexes = {
id = 231065,
},
mass_entanglement = {
id = 102359,
duration = 30,
type = "Magic",
max_stack = 1,
},
mighty_bash = {
id = 5211,
duration = 4,
max_stack = 1,
},
moonfire = {
id = 164812,
duration = function () return mod_circle_dot( 16 ) end,
tick_time = function () return mod_circle_dot( 2 ) * haste end,
type = "Magic",
max_stack = 1,
},
moonkin_form = {
id = 197625,
duration = 3600,
max_stack = 1,
},
prowl = {
id = 5215,
duration = 3600,
max_stack = 1,
},
pulverize = {
id = 80313,
duration = 10,
max_stack = 1,
},
--[[ rake = {
id = 155722,
duration = 15,
max_stack = 1,
}, ]]
regrowth = {
id = 8936,
duration = function () return mod_circle_hot( 12 ) end,
type = "Magic",
max_stack = 1,
},
rejuvenation = {
id = 774,
duration = function () return mod_circle_hot( 15 ) end,
tick_time = function () return mod_circle_hot( 3 ) * haste end,
max_stack = 1,
},
soulshape = {
id = 310143,
duration = 3600,
max_stack = 1,
},
stampeding_roar = {
id = 77761,
duration = 8,
max_stack = 1,
},
sunfire = {
id = 164815,
duration = function () return mod_circle_dot( 12 ) end,
tick_time = function () return mod_circle_dot( 2 ) * haste end,
max_stack = 1,
type = "Magic",
},
survival_instincts = {
id = 61336,
duration = 6,
max_stack = 1,
},
thick_hide = {
id = 16931,
},
thrash_bear = {
id = 192090,
duration = function () return mod_circle_dot( 15 ) end,
tick_time = function () return mod_circle_dot( 3 ) * haste end,
max_stack = function () return legendary.luffainfused_embrace and 4 or 3 end,
},
--[[ thrash_cat = {
id = 106830,
duration = function () return mod_circle_dot( 15 ) end,
tick_time = function () return mod_circle_dot( 3 ) * haste end,
max_stack = 1,
}, ]]
tiger_dash = {
id = 252216,
duration = 5,
max_stack = 1,
},
tooth_and_claw = {
id = 135286,
duration = 15,
max_stack = 2
},
travel_form = {
id = 783,
duration = 3600,
max_stack = 1,
},
typhoon = {
id = 61391,
duration = 6,
max_stack = 1,
type = "Magic",
},
ursols_vortex = {
id = 127797,
duration = 3600,
max_stack = 1,
},
wild_charge = {
id = 102401,
duration = 0.5,
max_stack = 1,
},
wild_growth = {
id = 48438,
duration = 7,
max_stack = 1,
},
yseras_gift = {
id = 145108,
},
any_form = {
alias = { "bear_form", "cat_form", "moonkin_form" },
duration = 3600,
aliasMode = "first",
aliasType = "buff",
},
-- PvP Talents
demoralizing_roar = {
id = 201664,
duration = 8,
max_stack = 1,
},
den_mother = {
id = 236181,
duration = 3600,
max_stack = 1,
},
focused_assault = {
id = 206891,
duration = 6,
max_stack = 1,
},
grove_protection_defense = {
id = 354704,
duration = 12,
max_stack = 1,
},
grove_protection_offense = {
id = 354789,
duration = 12,
max_stack = 1,
},
master_shapeshifter_feral = {
id = 236188,
duration = 3600,
max_stack = 1,
},
overrun = {
id = 202244,
duration = 3,
max_stack = 1,
},
protector_of_the_pack = {
id = 201940,
duration = 3600,
max_stack = 1,
},
sharpened_claws = {
id = 279943,
duration = 6,
max_stack = 1,
},
-- Azerite
masterful_instincts = {
id = 273349,
duration = 30,
max_stack = 1,
},
-- Legendary
lycaras_fleeting_glimpse = {
id = 340060,
duration = 5,
max_stack = 1
},
ursocs_fury_remembered = {
id = 345048,
duration = 15,
max_stack = 1,
},
} )
-- Function to remove any form currently active.
spec:RegisterStateFunction( "unshift", function()
if conduit.tireless_pursuit.enabled and ( buff.cat_form.up or buff.travel_form.up ) then applyBuff( "tireless_pursuit" ) end
removeBuff( "cat_form" )
removeBuff( "bear_form" )
removeBuff( "travel_form" )
removeBuff( "moonkin_form" )
removeBuff( "travel_form" )
removeBuff( "aquatic_form" )
removeBuff( "stag_form" )
if legendary.oath_of_the_elder_druid.enabled and debuff.oath_of_the_elder_druid_icd.down and talent.restoration_affinity.enabled then
applyBuff( "heart_of_the_wild" )
applyDebuff( "player", "oath_of_the_elder_druid_icd" )
end
end )
local affinities = {
bear_form = "guardian_affinity",
cat_form = "feral_affinity",
moonkin_form = "balance_affinity",
}
-- Function to apply form that is passed into it via string.
spec:RegisterStateFunction( "shift", function( form )
if conduit.tireless_pursuit.enabled and ( buff.cat_form.up or buff.travel_form.up ) then applyBuff( "tireless_pursuit" ) end
removeBuff( "cat_form" )
removeBuff( "bear_form" )
removeBuff( "travel_form" )
removeBuff( "moonkin_form" )
removeBuff( "travel_form" )
removeBuff( "aquatic_form" )
removeBuff( "stag_form" )
applyBuff( form )
if affinities[ form ] and legendary.oath_of_the_elder_druid.enabled and debuff.oath_of_the_elder_druid_icd.down and talent[ affinities[ form ] ].enabled then
applyBuff( "heart_of_the_wild" )
applyDebuff( "player", "oath_of_the_elder_druid_icd" )
end
end )
spec:RegisterStateExpr( "ironfur_damage_threshold", function ()
return ( settings.ironfur_damage_threshold or 0 ) / 100 * ( health.max )
end )
-- Gear.
spec:RegisterGear( "class", 139726, 139728, 139723, 139730, 139725, 139729, 139727, 139724 )
spec:RegisterGear( "tier19", 138330, 138336, 138366, 138324, 138327, 138333 )
spec:RegisterGear( "tier20", 147136, 147138, 147134, 147133, 147135, 147137 ) -- Bonuses NYI
spec:RegisterGear( "tier21", 152127, 152129, 152125, 152124, 152126, 152128 )
spec:RegisterGear( "ailuro_pouncers", 137024 )
spec:RegisterGear( "behemoth_headdress", 151801 )
spec:RegisterGear( "chatoyant_signet", 137040 )
spec:RegisterGear( "dual_determination", 137041 )
spec:RegisterGear( "ekowraith_creator_of_worlds", 137015 )
spec:RegisterGear( "elizes_everlasting_encasement", 137067 )
spec:RegisterGear( "fiery_red_maimers", 144354 )
spec:RegisterGear( "lady_and_the_child", 144295 )
spec:RegisterGear( "luffa_wrappings", 137056 )
spec:RegisterGear( "oakhearts_puny_quods", 144432 )
spec:RegisterAura( "oakhearts_puny_quods", {
id = 236479,
duration = 3,
max_stack = 1,
} )
spec:RegisterGear( "skysecs_hold", 137025 )
spec:RegisterAura( "skysecs_hold", {
id = 208218,
duration = 3,
max_stack = 1,
} )
spec:RegisterGear( "the_wildshapers_clutch", 137094 )
spec:RegisterGear( "soul_of_the_archdruid", 151636 )
spec:RegisterStateExpr( "lunar_eclipse", function ()
return eclipse.wrath_counter
end )
spec:RegisterStateExpr( "solar_eclipse", function ()
return eclipse.starfire_counter
end )
local LycarasHandler = setfenv( function ()
if buff.travel_form.up then state:RunHandler( "stampeding_roar" )
elseif buff.moonkin_form.up then state:RunHandler( "starfall" )
elseif buff.bear_form.up then state:RunHandler( "barkskin" )
elseif buff.cat_form.up then state:RunHandler( "primal_wrath" )
else state:RunHandle( "wild_growth" ) end
end, state )
local SinfulHysteriaHandler = setfenv( function ()
applyBuff( "ravenous_frenzy_sinful_hysteria" )
end, state )
spec:RegisterHook( "reset_precast", function ()
if azerite.masterful_instincts.enabled and buff.survival_instincts.up and buff.masterful_instincts.down then
applyBuff( "masterful_instincts", buff.survival_instincts.remains + 30 )
end
if buff.lycaras_fleeting_glimpse.up then
state:QueueAuraExpiration( "lycaras_fleeting_glimpse", LycarasHandler, buff.lycaras_fleeting_glimpse.expires )
end
if legendary.sinful_hysteria.enabled and buff.ravenous_frenzy.up then
state:QueueAuraExpiration( "ravenous_frenzy", SinfulHysteriaHandler, buff.ravenous_frenzy.expires )
end
eclipse.reset() -- from Balance.
end )
spec:RegisterHook( "runHandler", function( ability )
local a = class.abilities[ ability ]
if not a or a.startsCombat then
break_stealth()
end
if buff.ravenous_frenzy.up and ability ~= "ravenous_frenzy" then
addStack( "ravenous_frenzy", nil, 1 )
end
end )
spec:RegisterStateTable( "druid", setmetatable( {
}, {
__index = function( t, k )
if k == "catweave_bear" then
return talent.feral_affinity.enabled and settings.catweave_bear
elseif k == "owlweave_bear" then
return talent.balance_affinity.enabled and settings.owlweave_bear
elseif k == "no_cds" then return not toggle.cooldowns
elseif k == "primal_wrath" then return debuff.rip
elseif k == "lunar_inspiration" then return debuff.moonfire_cat
elseif debuff[ k ] ~= nil then return debuff[ k ]
end
end
} ) )
-- Abilities
spec:RegisterAbilities( {
alpha_challenge = {
id = 207017,
cast = 0,
cooldown = 20,
gcd = "spell",
pvptalent = "alpha_challenge",
startsCombat = true,
texture = 132270,
handler = function ()
applyDebuff( "target", "focused_assault" )
end,
},
barkskin = {
id = 22812,
cast = 0,
cooldown = function () return ( talent.survival_of_the_fittest.enabled and 40 or 60 ) * ( 1 + ( conduit.tough_as_bark.mod * 0.01 ) ) end,
gcd = "off",
startsCombat = false,
texture = 136097,
toggle = "defensives",
defensive = true,
usable = function ()
if not tanking then return false, "player is not tanking right now"
elseif incoming_damage_3s == 0 then return false, "player has taken no damage in 3s" end
return true
end,
handler = function ()
applyBuff( "barkskin" )
if legendary.the_natural_orders_will.enabled and buff.bear_form.up then
applyBuff( "ironfur" )
applyBuff( "frenzied_regeneration" )
end
end,
},
bear_form = {
id = 5487,
cast = 0,
cooldown = 0,
gcd = "spell",
spend = -25,
spendType = "rage",
startsCombat = false,
texture = 132276,
essential = true,
noform = "bear_form",
handler = function ()
shift( "bear_form" )
if conduit.ursine_vigor.enabled then applyBuff( "ursine_vigor" ) end
end,
},
berserk = {
id = 50334,
cast = 0,
cooldown = function () return legendary.legacy_of_the_sleeper.enabled and 150 or 180 end,
gcd = "off",
toggle = "cooldowns",
startsCombat = true,
texture = 236149,
notalent = "incarnation",
handler = function ()
applyBuff( "berserk" )
end,
copy = "berserk_bear"
},
bristling_fur = {
id = 155835,
cast = 0,
cooldown = 40,
gcd = "spell",
startsCombat = false,
texture = 1033476,
talent = "bristling_fur",
usable = function ()
if incoming_damage_3s < health.max * 0.1 then return false, "player has not taken 10% health in dmg in 3s" end
return true
end,
handler = function ()
applyBuff( "bristling_fur" )
end,
},
cat_form = {
id = 768,
cast = 0,
cooldown = 0,
gcd = "spell",
startsCombat = false,
texture = 132115,
noform = "cat_form",
handler = function ()
shift( "cat_form" )
if pvptalent.master_shapeshifter.enabled and talent.feral_affinity.enabled then
applyBuff( "master_shapeshifter_feral" )
end
end,
},
cyclone = {
id = 33786,
cast = 1.7,
cooldown = 0,
gcd = "spell",
spend = 0.1,
spendType = "mana",
startsCombat = true,
texture = 136022,
handler = function ()
applyDebuff( "target", "cyclone" )
end,
},
dash = {
id = 1850,
cast = 0,
cooldown = 120,
gcd = "spell",
startsCombat = false,
texture = 132120,
handler = function ()
shift( "cat_form" )
applyBuff( "dash" )
end,
},
demoralizing_roar = {
id = 201664,
cast = 0,
cooldown = 30,
gcd = "spell",
pvptalent = "demoralizing_roar",
startsCombat = true,
texture = 132117,
handler = function ()
applyDebuff( "demoralizing_roar" )
active_dot.demoralizing_roar = active_enemies
end,
},
emerald_slumber = {
id = 329042,
cast = 8,
cooldown = 120,
channeled = true,
gcd = "spell",
toggle = "cooldowns",
pvptalent = "emerald_slumber",
startsCombat = false,
texture = 1394953,
handler = function ()
end,
},
entangling_roots = {
id = 339,
cast = function () return pvptalent.entangling_claws.enabled and 0 or 1.7 end,
cooldown = function () return pvptalent.entangling_claws.enabled and 6 or 0 end,
gcd = "spell",
spend = 0.06,
spendType = "mana",
startsCombat = true,
texture = 136100,
handler = function ()
applyDebuff( "target", "entangling_roots" )
end,
},
--[[ ferocious_bite = {
id = 22568,
cast = 0,
cooldown = 0,
gcd = "spell",
spend = function () return args.max_energy == 1 and 50 or 25 end,
spendType = "energy",
startsCombat = true,
texture = 132127,
form = "cat_form",
usable = function ()
if combo_points.current == 0 then return false, "player has no combo points" end
return true
end,
handler = function ()
spend( min( 5, combo_points.current ), "combo_points" )
end,
}, ]]
frenzied_regeneration = {
id = 22842,
cast = 0,
charges = 2,
cooldown = function () return buff.berserk_bear.up and ( level > 57 and 9 or 18 ) or 36 end,
recharge = function () return buff.berserk_bear.up and ( level > 57 and 9 or 18 ) or 36 end,
hasteCD = true,
gcd = "spell",
spend = 10,
spendType = "rage",
startsCombat = false,
texture = 132091,
toggle = "defensives",
defensive = true,
form = "bear_form",
nobuff = "frenzied_regeneration",
handler = function ()
applyBuff( "frenzied_regeneration" )
gain( health.max * 0.08, "health" )
end,
auras = {
-- Conduit (ICD)
wellhoned_instincts = {
id = 340556,
duration = function ()
if conduit.wellhoned_instincts.enabled then return conduit.wellhoned_instincts.mod end
return 90
end,
max_stack = 1
}
}
},
grove_protection = {
id = 354654,
cast = 0,
cooldown = 60,
gcd = "spell",
toggle = "defensives",
startsCombat = false,
texture = 4067364,
handler = function ()
-- Don't apply auras; position dependent.
end,
},
growl = {
id = 6795,
cast = 0,
cooldown = function () return buff.berserk_bear.up and ( level > 57 and 2 or 4 ) or 8 end,
gcd = "spell",
nopvptalent = "alpha_challenge",
startsCombat = true,
texture = 132270,
handler = function ()
applyDebuff( "target", "growl" )
end,
},
heart_of_the_wild = {
id = 319454,
cast = 0,
cooldown = function () return 300 * ( 1 - ( conduit.born_of_the_wilds.mod * 0.01 ) ) end,
gcd = "spell",
toggle = "cooldowns",
startsCombat = false,
texture = 135879,
handler = function ()
applyBuff( "heart_of_the_wild" )
if talent.balance_affinity.enabled then
shift( "moonkin_form" )
elseif talent.feral_affinity.enabled then
shift( "cat_form" )
elseif talent.restoration_affinity.enabled then
unshift()
end
end,
},
hibernate = {
id = 2637,
cast = 1.5,
cooldown = 0,
gcd = "spell",
spend = 0.06,
spendType = "mana",
startsCombat = false,
texture = 136090,
handler = function ()
applyDebuff( "target", "hibernate" )
end,
},
incapacitating_roar = {
id = 99,
cast = 0,
cooldown = 30,
gcd = "spell",
startsCombat = true,
texture = 132121,
handler = function ()
applyDebuff( "target", "incapacitating_roar" )
end,
},
incarnation = {
id = 102558,
cast = 0,
cooldown = function () return legendary.legacy_of_the_sleeper.enabled and 150 or 180 end,
gcd = "off",
toggle = "cooldowns",
startsCombat = false,
texture = 571586,
talent = "incarnation",
handler = function ()
applyBuff( "incarnation" )
end,
copy = { "incarnation_guardian_of_ursoc", "Incarnation" }
},
ironfur = {
id = 192081,
cast = 0,
cooldown = 0.5,
gcd = "off",
spend = function () return buff.berserk_bear.up and 20 or 40 end,
spendType = "rage",
startsCombat = false,
texture = 1378702,
toggle = "defensives",
defensive = true,
form = "bear_form",
usable = function ()
if not tanking then return false, "player is not tanking right now"
elseif incoming_damage_3s == 0 then return false, "player has taken no damage in 3s" end
return true
end,
handler = function ()
applyBuff( "ironfur" )
removeBuff( "guardian_of_elune" )
end,
},
lunar_beam = {
id = 204066,
cast = 0,
cooldown = 75,
gcd = "spell",
toggle = "defensives",
startsCombat = true,
texture = 136057,
talent = "lunar_beam",
handler = function ()
applyBuff( "lunar_beam" )
end,
auras = {
lunar_beam = {
duration = 8,
max_stack = 1,
generate = function( t )
local applied = action.lunar_beam.lastCast
if not t.name then t.name = class.auras.lunar_beam.name end
if applied and now - applied < 8 then
t.count = 1
t.expires = applied + 8
t.applied = applied
t.caster = "player"
return
end
t.count = 0
t.expires = 0
t.applied = 0
t.caster = "nobody"
end,
},
}
},
maim = {
id = 22570,
cast = 0,
cooldown = 20,
gcd = "spell",
spend = 30,
spendType = "energy",
startsCombat = true,
texture = 132134,
talent = "feral_affinity",
form = "cat_form",
usable = function () return combo_points.current > 0, "requires combo_points" end,
handler = function ()
applyDebuff( "target", "maim", combo_points.current )
spend( combo_points.current, "combo_points" )
end,
},
mangle = {
id = 33917,
cast = 0,
cooldown = function () return ( buff.berserk_bear.up and ( level > 57 and 1.5 or 3 ) or 6 ) * haste end,
gcd = "spell",
spend = function () return buff.gore.up and -19 or -15 end,
spendType = "rage",
startsCombat = true,
texture = 132135,
form = "bear_form",
handler = function ()
if talent.guardian_of_elune.enabled then applyBuff( "guardian_of_elune" ) end
removeBuff( "gore" )
if conduit.savage_combatant.enabled then addStack( "savage_combatant", nil, 1 ) end
end,
auras = {
-- Conduit
savage_combatant = {
id = 340613,
duration = 15,
max_stack = 3
}
}
},
mass_entanglement = {
id = 102359,
cast = 0,
cooldown = 30,
gcd = "spell",
startsCombat = false,
texture = 538515,
talent = "mass_entanglement",
handler = function ()
applyDebuff( "target", "mass_entanglement" )
end,
},
maul = {
id = 6807,
cast = 0,
cooldown = 0,
gcd = "spell",
spend = 40,
spendType = "rage",
startsCombat = true,
texture = 132136,
form = "bear_form",
usable = function ()
if settings.maul_rage > 0 and rage.current - cost < settings.maul_rage then return false, "not enough additional rage" end
return true
end,
handler = function ()
if pvptalent.sharpened_claws.enabled or essence.conflict_and_strife.major then applyBuff( "sharpened_claws" ) end
removeBuff( "savage_combatant" )
end,
},
mighty_bash = {
id = 5211,
cast = 0,
cooldown = 60,
gcd = "spell",
startsCombat = true,
texture = 132114,
talent = "mighty_bash",
handler = function ()
applyDebuff( "target", "mighty_bash" )
end,
},
moonfire = {
id = 8921,
cast = 0,
cooldown = 0,
gcd = "spell",
spend = 0.06,
spendType = "mana",
startsCombat = true,
texture = 136096,
handler = function ()
applyDebuff( "target", "moonfire" )
if buff.galactic_guardian.up then
gain( 8, "rage" )
removeBuff( "galactic_guardian" )
end
end,
},
moonkin_form = {
id = 197625,
cast = 0,
cooldown = 0,
gcd = "spell",
startsCombat = false,
texture = 136036,
noform = "moonkin_form",
talent = "balance_affinity",
handler = function ()
shift( "moonkin_form" )
end,
},
overrun = {
id = 202246,
cast = 0,
cooldown = 25,
gcd = "spell",
startsCombat = true,
texture = 1408833,
pvptalent = "overrun",
handler = function ()
applyDebuff( "target", "overrun" )
setDistance( 5 )
end,
},
prowl = {
id = 5215,
cast = 0,
cooldown = 6,
gcd = "spell",
startsCombat = false,
texture = 514640,
usable = function ()
if time > 0 and ( not boss or not buff.shadowmeld.up ) then return false, "cannot stealth in combat"
elseif buff.prowl.up then return false, "player is already prowling" end
return true
end,
handler = function ()
shift( "cat_form" )
applyBuff( "prowl" )
end,
},
pulverize = {
id = 80313,
cast = 0,
cooldown = 45,
gcd = "spell",
startsCombat = true,
texture = 1033490,
talent = "pulverize",
form = "bear_form",
usable = function ()
if debuff.thrash_bear.stack < 2 then return false, "target has fewer than 2 thrash stacks" end
return true
end,
handler = function ()
if debuff.thrash_bear.count > 2 then debuff.thrash_bear.count = debuff.thrash_bear.count - 2
else removeDebuff( "target", "thrash_bear" ) end
applyBuff( "pulverize" )
end,
},
--[[ rake = {
id = 1822,
cast = 0,
cooldown = 0,
gcd = "spell",
spend = 35,
spendType = "energy",
startsCombat = true,
texture = 132122,
talent = "feral_affinity",
form = "cat_form",
handler = function ()
applyDebuff( "target", "rake" )
debuff.rake.pmultiplier = persistent_multiplier
gain( 1, "combo_points" )
end,
}, ]]
--[[ rebirth = {
id = 20484,
cast = 2,
cooldown = 600,
gcd = "spell",
spend = 0,
spendType = "rage",
startsCombat = true,
texture = 136080,
handler = function ()
end,
}, ]]
regrowth = {
id = 8936,
cast = 1.5,
cooldown = 0,
gcd = "spell",
spend = 0.14,
spendType = "mana",
startsCombat = false,
texture = 136085,
talent = "restoration_affinity",
usable = function ()
if not ( buff.bear_form.down and buff.cat_form.down and buff.travel_form.down and buff.moonkin_form.down ) then return false, "player is in a form" end
return true
end,
handler = function ()
applyBuff( "regrowth" )
end,
},
rejuvenation = {
id = 774,
cast = 0,
cooldown = 0,
gcd = "spell",
spend = 0.1,
spendType = "mana",
startsCombat = false,
texture = 136081,
talent = "restoration_affinity",
usable = function ()
if not ( buff.bear_form.down and buff.cat_form.down and buff.travel_form.down and buff.moonkin_form.down ) then return false, "player is in a form" end
return true
end,
handler = function ()
applyBuff( "rejuvenation" )
end,
},
remove_corruption = {
id = 2782,
cast = 0,
cooldown = 8,
gcd = "spell",
spend = 0.06,
spendType = "mana",
startsCombat = false,
texture = 135952,
usable = function ()
if buff.dispellable_poison.down and buff.dispellable_curse.down then return false, "player has no dispellable auras" end
return true
end,
handler = function ()
removeBuff( "dispellable_poison" )
removeBuff( "dispellable_curse" )
end,
},
renewal = {
id = 108238,
cast = 0,
cooldown = 90,
gcd = "spell",
toggle = "defensives",
defensive = true,
startsCombat = true,
texture = 136059,
talent = "renewal",
handler = function ()
gain( 0.3 * health.max, "health" )
end,
},
--[[ revive = {
id = 50769,
cast = 10,
cooldown = 0,
gcd = "spell",
spend = 0.04,
spendType = "mana",
startsCombat = true,
texture = 132132,
handler = function ()
end,
}, ]]
--[[ rip = {
id = 1079,
cast = 0,
cooldown = 0,
gcd = "spell",
spend = 30,
spendType = "energy",
startsCombat = true,
texture = 132152,
talent = "feral_affinity",
form = "cat_form",
usable = function ()
if combo_points.current == 0 then return false, "player has no combo points" end
return true
end,
handler = function ()
applyDebuff( "target", "rip" )
end,
}, ]]
--[[ shred = {
id = 5221,
cast = 0,
cooldown = 0,
gcd = "spell",
spend = 40,
spendType = "energy",
startsCombat = true,
texture = 136231,
handler = function ()
end,
}, ]]
skull_bash = {
id = 106839,
cast = 0,
cooldown = 15,
gcd = "spell",
startsCombat = true,
texture = 236946,
toggle = "interrupts",
debuff = "casting",
readyTime = state.timeToInterrupt,
handler = function ()
interrupt()
end,
},
soothe = {
id = 2908,
cast = 0,
cooldown = 10,
gcd = "spell",
spend = 0.06,
spendType = "mana",
startsCombat = true,
texture = 132163,
debuff = "dispellable_enrage",
handler = function ()
removeDebuff( "target", "dispellable_enrage" )
end,
},
stampeding_roar = {
id = 106898,
cast = 0,
cooldown = function () return pvptalent.freedom_of_the_herd.enabled and 0 or 60 end,
gcd = "spell",
startsCombat = false,
texture = 464343,
handler = function ()
applyBuff( "stampeding_roar" )
if buff.bear_form.down and buff.cat_form.down then
shift( "bear_form" )
end
end,
},
--[[ starfire = {
id = 197628,
cast = 2.5,
cooldown = 0,
gcd = "spell",
spend = 0.03,
spendType = "mana",
startsCombat = true,
texture = 135753,
talent = "balance_affinity",
form = "moonkin_form",
handler = function ()
end,
}, ]]
starsurge = {
id = 197626,
cast = function () return buff.heart_of_the_wild.up and 0 or 2 end,
cooldown = 10,
gcd = "spell",
spend = 0.03,
spendType = "mana",
startsCombat = true,
texture = 135730,
talent = "balance_affinity",
form = "moonkin_form",
handler = function ()
addStack( "lunar_empowerment" )
addStack( "solar_empowerment" )
end,
},
sunfire = {
id = 197630,
cast = 0,
cooldown = 0,
gcd = "spell",
spend = 0.12,
spendType = "mana",
startsCombat = true,
texture = 236216,
talent = "balance_affinity",
form = "moonkin_form",
handler = function ()
applyDebuff( "target", "sunfire" )
active_dot.sunfire = active_enemies
end,
},
survival_instincts = {
id = 61336,
cast = 0,
charges = 2,
cooldown = function () return ( essence.vision_of_perfection.enabled and 0.87 or 1 ) * ( talent.survival_of_the_fittest.enabled and ( 2/3 ) or 1 ) * 180 end,
recharge = function () return ( essence.vision_of_perfection.enabled and 0.87 or 1 ) * ( talent.survival_of_the_fittest.enabled and ( 2/3 ) or 1 ) * 180 end,
gcd = "off",
startsCombat = false,
texture = 236169,
toggle = "defensives",
defensive = true,
usable = function ()
if not tanking then return false, "player is not tanking right now"
elseif incoming_damage_3s == 0 then return false, "player has taken no damage in 3s" end
return true
end,
handler = function ()
applyBuff( "survival_instincts" )
if azerite.masterful_instincts.enabled and buff.survival_instincts.up and buff.masterful_instincts.down then
applyBuff( "masterful_instincts", buff.survival_instincts.remains + 30 )
end
end,
},
swiftmend = {
id = 18562,
cast = 0,
charges = 1,
cooldown = 25,
recharge = 25,
gcd = "spell",
spend = 0.14,
spendType = "mana",
startsCombat = false,
texture = 134914,
talent = "restoration_affinity",
toggle = "defensives",
defensive = true,
usable = function ()
return IsSpellUsable( 18562 ) or buff.regrowth.up or buff.wild_growth.up or buff.rejuvenation.up, "requires a HoT"
end,
handler = function ()
unshift()
if buff.regrowth.up then removeBuff( "regrowth" )
elseif buff.wild_growth.up then removeBuff( "wild_growth" )
elseif buff.rejuvenation.up then removeBuff( "rejuvenation" ) end
end,
},
swipe_bear = {
id = 213771,
known = 213764,
suffix = "(Bear)",
cast = 0,
cooldown = 0,
gcd = "spell",
startsCombat = true,
texture = 134296,
form = "bear_form",
handler = function ()
end,
copy = { "swipe", 213764 },
bind = { "swipe_bear", "swipe_cat", "swipe" }
},
--[[ teleport_moonglade = {
id = 18960,
cast = 10,
cooldown = 0,
gcd = "spell",
spend = 4,
spendType = "mana",
startsCombat = true,
texture = 135758,
handler = function ()
end,
}, ]]
thrash_bear = {
id = 77758,
known = 106832,
suffix = "(Bear)",
cast = 0,
cooldown = function () return ( buff.berserk_bear.up and ( level > 57 and 1.5 or 3 ) or 6 ) * haste end,
gcd = "spell",
spend = -5,
spendType = "rage",
startsCombat = true,
texture = 451161,
form = "bear_form",
bind = "thrash",
handler = function ()
applyDebuff( "target", "thrash_bear", 15, debuff.thrash_bear.count + 1 )
active_dot.thrash_bear = active_enemies
if legendary.ursocs_fury_remembered.enabled then
applyBuff( "ursocs_fury_remembered" )
end
end,
},
tiger_dash = {
id = 252216,
cast = 0,
cooldown = 45,
gcd = "spell",
startsCombat = false,
texture = 1817485,
talent = "tiger_dash",
handler = function ()
applyBuff( "tiger_dash" )
end,
},
travel_form = {
id = 783,
cast = 0,
cooldown = 0,
gcd = "spell",
startsCombat = false,
texture = 132144,
handler = function ()
shift( "travel_form" )
end,
},
typhoon = {
id = 132469,
cast = 0,
cooldown = 30,
gcd = "spell",
startsCombat = true,
texture = 236170,
talent = "balance_affinity",
handler = function ()
if target.distance < 15 then
applyDebuff( "target", "typhoon" )
end
end,
},
ursols_vortex = {
id = 102793,
cast = 0,
cooldown = 60,
gcd = "spell",
talent = "restoration_affinity",
startsCombat = true,
texture = 571588,
handler = function ()
applyDebuff( "target", "ursols_vortex" )
end,
},
wild_charge = {
id = function ()
if buff.bear_form.up then return 16979
elseif buff.cat_form.up then return 49376
elseif buff.moonkin_form.up then return 102383 end
return 102401
end,
known = 102401,
cast = 0,
cooldown = 15,
gcd = "spell",
startsCombat = true,
-- texture = 538771,
talent = "wild_charge",
usable = function () return target.exists and target.distance > 7, "target must be 8+ yards away" end,
handler = function ()
if buff.bear_form.up then target.distance = 5; applyDebuff( "target", "immobilized" )
elseif buff.cat_form.up then target.distance = 5; applyDebuff( "target", "dazed" ) end
end,
copy = { 49376, 16979, 102401, 102383 }
},
wild_growth = {
id = 48438,
cast = 1.5,
cooldown = 10,
gcd = "spell",
spend = 0.22,
spendType = "mana",
startsCombat = false,
texture = 236153,
handler = function ()
applyBuff( "wild_growth" )
end,
},
--[[ wrath = {
id = 5176,
cast = 1.5,
cooldown = 0,
gcd = "spell",
spend = 0.01,
spendType = "mana",
startsCombat = true,
texture = 535045,
handler = function ()
if buff.moonkin_form.down then unshift() end
removeStack( "solar_empowerment" )
end,
}, ]]
} )
spec:RegisterOptions( {
enabled = true,
aoe = 3,
nameplates = true,
nameplateRange = 8,
damage = true,
damageExpiration = 6,
potion = "spectral_agility",
package = "Guardian",
} )
spec:RegisterSetting( "maul_rage", 20, {
name = "Excess Rage for |T132136:0|t Maul",
desc = "If set above zero, the addon will recommend |T132136:0|t Maul only if you have at least this much excess Rage.",
type = "range",
min = 0,
max = 60,
step = 0.1,
width = "full"
} )
spec:RegisterSetting( "mangle_more", false, {
name = "Use |T132135:0|t Mangle More in Multi-Target",
desc = "If checked, the default priority will recommend |T132135:0|t Mangle more often in |cFFFFD100multi-target|r scenarios. This will generate roughly 15% more Rage and allow for more mitigation (or |T132136:0|t Maul) than otherwise, " ..
"funnel slightly more damage into your primary target, but will |T134296:0|t Swipe less often, dealing less damage/threat to your secondary targets.",
type = "toggle",
width = "full",
} )
spec:RegisterSetting( "ironfur_damage_threshold", 5, {
name = "Required Damage % for |T1378702:0|t Ironfur",
desc = "If set above zero, the addon will not recommend |T1378702:0|t Ironfur unless your incoming damage for the past 5 seconds is greater than this percentage of your maximum health.",
type = "range",
min = 0,
max = 100,
step = 0.1,
width = "full"
} )
spec:RegisterSetting( "shift_for_convoke", false, {
name = "|T3636839:0|t Powershift for Convoke the Spirits",
desc = "If checked and you are a Night Fae, the addon will recommend swapping to your Feral/Balance Affinity specialization before using |T3636839:0|t Convoke the Spirits. " ..
"This is a DPS gain unless you die horribly.",
type = "toggle",
width = "full"
} )
spec:RegisterSetting( "catweave_bear", false, {
name = "|T132115:0|t Attempt Catweaving (Experimental)",
desc = function()
local affinity
if state.talent.feral_affinity.enabled then
affinity = "|cFF00FF00" .. ( GetSpellInfo( 202155 ) ) .. "|r"
else
affinity = "|cFFFF0000" .. ( GetSpellInfo( 202155 ) ) .. "|r"
end
return "If checked, the addon will use the experimental |cFFFFD100catweave|r priority included in the default priority pack.\n\nRequires " .. affinity .. "."
end,
type = "toggle",
width = "full",
} )
spec:RegisterSetting( "owlweave_bear", false, {
name = "|T136036:0|t Attempt Owlweaving (Experimental)",
desc = function()
local affinity
if state.talent.balance_affinity.enabled then
affinity = "|cFF00FF00" .. ( GetSpellInfo( 197488 ) ) .. "|r"
else
affinity = "|cFFFF0000" .. ( GetSpellInfo( 197488 ) ) .. "|r"
end
return "If checked, the addon will use the experimental |cFFFFD100owlweave|r priority included in the default priority pack.\n\nRequires " .. affinity .. "."
end,
type = "toggle",
width = "full"
} )
spec:RegisterPack( "Guardian", 20211123, [[dCeL8bqiPsEekjSjLQpjvkzukfNsj1QKkLYRKkAwGQUfOsKDrYVOuAyOK6yOqltPupdLQMgOsDnuQSnqL03KkvACOKiNdujSoqLOmpLsUhkAFGkoikjQSqPcpeLKyIGkr1fLkLQpIsIYjLkfTsuIzIssQBIsIQ2jkLFIss1tHQPsP4ROKKSxu9xkgmKdtSyqEmPMSuUmYMPYNbLrtvDArRgLKYRPunBjUnvz3k(nWWLQoUuPWYv55sA6cxhkBxj(oLmEPsvNhfSEPsfZxjz)QAoJCB44njioBBZ6TzKrg3M9QT3M1WvgzhhpyON449I2UaJ44J4rCCwzyY1sz449cdfG042WXRaSttCC)i6RWLzRTWYWhdsPbE2wtpSIejy0N4cBRPN2wooewwIU5WH44njioBBZ6TzKrg3M9QT3M1WvgHBoUGf(GJJJNESkCC)S1OHdXXBuvZXzLHjxlL5rWLFyz7zHnWc5br3JyK9W)OTz92m(S8SWQ4ldmQcx2ZcCPh1nhn46bNe0JyvKWww5bGXEopQ)sWLrs1hTjDpQsrKdShL1hP9jTDQTw9Sax6rDZrdUEWjb9iqFKG5rb4rv)0fpAd4E0aI1pcICGJEeRcywa2jfhVK1OYTHJxyqlNa42WzJrUnCCrhjy44EaWyphJdCECCAeOc14DWdEWXHi542WzJrUnCCAeOc14DWX1xg0LchVRhbH5CkisoJdCEkSEoUOJemCCisoJdCE8GZ22CB440iqfQX7GJRVmOlfoEifAcLpjxyaot4tgRS0u0iqfQ9O9hT5rHuOjuqsrgnzeNlNmyqrJavO2Jw)O9hPbl0itOwOj8z444IosWWX9j5cdWzcFYyLLgp4SXEUnCCAeOc14DWXfDKGHJ7baJlpIJRVmOlfo(MhT5rD9Oi12Zb2J2FuKEKjaMwspcopIXTF0(JGWCofmPi6i1gyyY1szuy9pA9JwT6rBE0rUJQ(cuHE0(JI0JmbW0s6rW5rmU9J2FeeMZPGjfrhP2adtUwkJcR)rRF0AoUMbDHmHCWOOYzJrEWzdU52WXPrGkuJ3bhx0rcgoUhamU8ioU(YGUu44BE0Mh11JIuBphypA)rr6rMayAj9i48ig3(rRF0QvpAZJoYDu1xGk0J2FuKEKjaMwspcopIXTF06hTMJRzqxitihmkQC2yKhC2yh3goUOJemC8twObGvnUJMUddCCAeOc14DWdoBWvUnCCAeOc14DWXfDKGHJZQbcSbgL3zAunYHHQrlLchxFzqxkCCnyHgzc1cnHpdhhFepIJZQbcSbgL3zAunYHHQrlLcp4S1D52WXPrGkuJ3bhx0rcgoEC5yNcg546ld6sHJ31JGWCov)bSkkS(hT)inyHgzc1cnHpdhhVwabhpUCStbJ8GZgRe3gooncuHA8o44IosWWXJlh7uSnhxFzqxkC8UEeeMZP6pGvrH1)O9hPbl0itOwOj8z4441ci44XLJDk2MhC2Gl42WXPrGkuJ3bhxFzqxkCCnyHgzc1cnHpd3J2FeeMZPYrl3ircg1rEso1hbhMpAB4(r7pccZ5u5OLBKibJ6ipjN6J2I5J2MDCCrhjy449Gibdp4SXiR52WXPrGkuJ3bhxFzqxkC8UEu7WYMslHfjlKbIK7r7pQRh1oSSPawflswidejhhx0rcgoUgmla7Kj8jtTpVmQ8GZgJmYTHJtJavOgVdoU(YGUu44BEeeMZPozHgaw14oA6omOW6F0QvpQRhPbl0itOwOj8z4E0AoUOJemCCi6Q0zNhC2yCBUnCCAeOc14DWX1xg0LchFZJGWCo1jl0aWQg3rt3Hbfw)JwT6rD9inyHgzc1cnHpd3JwZXfDKGHJNJwUrIem8GZgJSNBdhNgbQqnEhCC9LbDPWX38iimNtbrxLo7gisofw)JwT6rqyoNkhTCJejymWWKRLYyaod2vbAfw)JwZXfDKGHJdrxLo75aJhC2yeU52WXPrGkuJ3bhxFzqxkC8npQRh1aHsAsFKlKPAjNNPjEcmsfP2EoWE0(J66rIosWOKM0h5czQwY5zAINaJu5yCLeMF8O9hT5rD9Ogiust6JCHmvl58m(KuurQTNdShTA1JAGqjnPpYfYuTKZZ4tsrDKNKt9rW5rS)rRF0QvpQbcL0K(ixit1soptt8eyKQgI2(J26rS)r7pQbcL0K(ixit1soptt8eyK6ipjN6J26rS7r7pQbcL0K(ixit1soptt8eyKksT9CG9O1CCrhjy44st6JCHmvl584bNngzh3gooncuHA8o446ld6sHJdH5Ckysr0rQnWWKRLYOW6F0(JeDKlKHgYlP6J26rSNJl6ibdh3dagxEep4SXiCLBdhNgbQqnEhCCrhjy44H)jvFdejhhxFzqxkC8JChv9fOc9OvREudeQW)KQVbIKtvdrB)rB9i2)OvRE0Mh1aHk8pP6BGi5u1q02F0wpcUF0(JoSHCGdgPkyoNKJdRsnd5bDIMuu3al77P2Jw)OvREKOJCHm0qEjvFeCy(i4(rRw9iimNtbrxLo7gisofw)J2FeeMZPGORsNDdejN6ipjN6J2I5JGPBpQZhXAf744Ag0fYeYbJIkNng5bNng7UCB440iqfQX7GJRVmOlfo(jWivJCPoJhbNhXiRF0(JQue5aRQ8KbwHmEGJ44IosWWX9KbwH4bNngzL42WXPrGkuJ3bhxFzqxkC8kaRaLtt1JvdSczOdRpsWOOrGku7r7pAZJ28inauAaRrf(Nu9nqKCQJ8KCQpcopI1pA)rAaO0awJYtgyfsDKNKt9rW5rS(rRF0(J28OgiuEaW4YJuh5j5uFeCy(i2)O1pA)rBEeeMZPYrl3ircgdmm5APmgGZGDvGw1awZJ2FeeMZPGORsNDdejNQbSMhT)iimNtbtkIosTbgMCTugvdynpA9Jw)OvREufGvGYPPwafjYczQGYcnHIgbQqnoEobDhwFyshhVcWkq50ulGIezHmvqzHMyFJgaknG1Oc)tQ(giso1rEsov4W6DnauAaRr5jdScPoYtYPchwVMJNtq3H1hM0ZJAPeehNroUOJemCCxHQ(6tCbhpNGUdRpmWkaiPWXzKhC2yeUGBdhNgbQqnEhCC9LbDPWXHWCovoA5gjsWyGHjxlLXaCgSRc0QgWAE0(JGWCofeDv6SBGi5unG18O9hj6ixidnKxs1hbhMpcU54IosWWXRwzpzGi54bNTTzn3gooncuHA8o446ld6sHJdH5CQC0YnsKGrH1)O9hj6ixidnKxs1hT1Jy)J2F0MhbH5CQaacFJmnJUiwQAiA7pcomF02pA9JwT6rBEeeMZPcai8nY0m6IyPW6F0(JGWCovaaHVrMMrxel1rEso1hT1JyuXUhT(rRw9OnpccZ5uvzrGrgnWdsczcvneT9hbhMpI9pA9JwT6rqyoNcIUkD2nqKCkS(hT)irh5czOH8sQ(OTEe754IosWWX9eScp4STnJCB440iqfQX7GJRVmOlfo(MhbH5CQQSiWiJg4bjHmHQgI2(JGdZhX4Jw)O9hT5rqyoNkaGW3itZOlILcR)rRF0(JGWCovoA5gjsWOW6F0(JeDKlKHgYlP6Jy(OT54IosWWX9eScp4ST92CB440iqfQX7GJRVmOlfooeMZPYrl3ircgfw)J2FKOJCHm0qEjvF0wmFe754IosWWX9KbwH4bNTTzp3gooncuHA8o446ld6sHJV5rBE0MhbH5CQaacFJmnJUiwQAiA7pcomF02pA9JwT6rBEeeMZPcai8nY0m6IyPW6F0(JGWCovaaHVrMMrxel1rEso1hT1JyuXUhT(rRw9OnpccZ5uvzrGrgnWdsczcvneT9hbhMpI9pA9Jw)O9hj6ixidnKxs1hT1Jy)JwZXfDKGHJ7jyfEWzBB4MBdhNgbQqnEhCC9LbDPWXfDKlKHgYlP6JGZJyKJl6ibdhp8pP6BGi54bNTTzh3gooncuHA8o446ld6sHJV5rBE0jWOhT1JGly9Jw)O9hj6ixidnKxs1hT1Jy)Jw)OvRE0MhT5rNaJE0wpIvIDpA9J2FKOJCHm0qEjvF0wpI9pA)rHuOjuvawXaCMWNmoWr1qrJavO2JwZXfDKGHJ7jdScXdoBBdx52WXPrGkuJ3bhx0rcgoEpwzHUS7qCC9LbDPWXBGqf(Nu9nqKCQAiA7pcopABoUMbDHmHCWOOYzJrEWzB7Ul3goUOJemC8W)KQVbIKJJtJavOgVdEWzBBwjUnCCAeOc14DWX1xg0Lchx0rUqgAiVKQpARhXEoUOJemCCpbRWdoBBdxWTHJl6ibdhVAL9KbIKJJtJavOgVdEWzJ9SMBdhNgbQqnEhCC9LbDPWXpbgPAKl1z8OTEeCZ6hT)iimNtLhyCyN6ipjN6J26rSwXooUOJemC88aJd74bp44EzKWKibd3goBmYTHJtJavOgVdoU(YGUu445ObE5aZ0epbgzyx9rW5r5bgh2zAINaJmH)rvFqP9O9hbH5CQ8aJd7uh5j5uF0wpI9pQB7r(snioUOJemC88aJd74bNTT52WXPrGkuJ3bhxFzqxkC8qg75a7r7pYNKs4R61XJ26rWv2XXfDKGHJF0qwsHhC2yp3gooncuHA8o446ld6sHJhYyphypA)r(KucFvVoE0wpcUYooUOJemCC3rt3jPM5iy0qNejy4bNn4MBdhNgbQqnEhCC9LbDPWX38OUEu7WYMslHfjlKbIK7r7pQRh1oSSPawflswidej3Jw)OvREKOJCHm0qEjvFeCy(OT54IosWWXjVEGfDgiW04bNn2XTHJtJavOgVdoU(YGUu44Hm2Zb2J2FKpjLWx1RJhT1J6US7r7pkhnWlhyMM4jWid7QpcopI1kgFu32J8jPe(kpP754IosWWXHKZE1Eo8GZgCLBdhNgbQqnEhCC9LbDPWXHWCovf7wYfPyYPg5OJQQbSMhT)iimNtbjN9Q9CunG18O9h5tsj8v964rB9i4kRF0(JYrd8YbMPjEcmYWU6JGZJyTAB29OUTh5tsj8vEs3ZXfDKGHJxXULCrkMCQro6OYdEWX7psd8GKGBdNng52WXPrGkuJ3bhVrv9L9rcgoE3E3tASGApcICGJEKg4bjXJGiy5uvpIvoTM6J6JgWaxYxophw5rIosWuFeykmO44IosWWXTNt7OMP2NxgvEWzBBUnCCAeOc14DWX1xg0LchpKcnHYNKlmaNj8jJvwAkAeOc1E0(J28O2HLnLwclswidej3J2FeeMZP0syCGZtH1)OvREu7WYMcyvSizHmqKCpA)rqyoNYdag75yCGZtH1)OvREeeMZP8aGXEogh48uy9pA)rHuOjuqsrgnzeNlNmyqrJavO2JwZXfDKGHJ7tYfgGZe(KXklnEWzJ9CB440iqfQX7GJRVmOlfooeMZP0syCGZtH1)O9h1oSSP0syrYczGi544IosWWX7pGvHhC2GBUnCCAeOc14DWX1xg0LchVRhbH5CkzyW4aNNcR)r7pAZJ28OUEu7WYMcyvSizHmqKCpA)rD9O2HLnLwclswidej3Jw)O9hT5rD9inyHgzc1KW8dJtOhT(rRF0QvpAZJ28OUEu7WYMcyvSizHmqKCpA)rD9O2HLnLwclswidej3Jw)O9hT5rAWcnYeQjH5hgNqpA)rHuOjuhvdWjrcgJ4C5KbdkAeOc1E06hTMJl6ibdhhIKZ4aNhp4SXoUnCCAeOc14DWX1xg0LchhcZ5uEaWyphJdCEkS(hT)O2HLnfWQyrYczGi5E0(J66rAWcnYeQjH5hgNqCCrhjy44wNe(8GZgCLBdhNgbQqnEhCC9LbDPWXHWCoLham2ZX4aNNcR)r7pQDyztbSkwKSqgisUhT)inyHgzc1KW8dJtioUOJemC8AiNlpIhC26UCB440iqfQX7GJRVmOlfoEfGvGYPP6XQbwHm0H1hjyu0iqfQ9OvREufGvGYPPwafjYczQGYcnHIgbQqnoEobDhwFyshhVcWkq50ulGIezHmvqzHMGJNtq3H1hM0ZJAPeehNroUOJemCCxHQ(6tCbhpNGUdRpmWkaiPWXzKh8GJxyqlNO52WzJrUnCCrhjy44AjmoW5XXPrGkuJ3bp4bhVrobReCB4SXi3gooncuHA8o44nQQVSpsWWX727EsJfu7r0cDm8Oi9Ohf(0JeDaUhL1hjlsweOcP44IosWWXR2XkfdKu95bNTT52WXPrGkuJ3bhx0rcgooRgiWgyuENPr1ihgQgTukCC9LbDPWX76rqyoNQ)awffw)J2FuxpsdwOrMqTqt4ZWXXhXJ44SAGaBGr5DMgvJCyOA0sPWdoBSNBdhNgbQqnEhCCrhjy44XLJDkyKJRVmOlfoExpccZ5u9hWQOW6F0(J66rAWcnYeQfAcFgooETacoEC5yNcg5bNn4MBdhNgbQqnEhCCrhjy44XLJDk2MJRVmOlfoExpccZ5u9hWQOW6F0(J66rAWcnYeQfAcFgooETacoEC5yNIT5bNn2XTHJtJavOgVdoU(YGUu44D9inyHgzc1cnHpd3J2F0MhT5rBEuifAcLpjxyaot4tgRS0u0iqfQ9O9hbH5CkFsUWaCMWNmwzPPW6F06hT)OnpQDyztPLWIKfYarY9OvREu7WYMcyvSizHmqKCpA9J2FuxpccZ5u9hWQOW6F06hTA1J28OnpccZ5uq0vPZUbIKtH1)OvREeeMZPYrl3ircgdmm5APmgGZGDvGwH1)O1pA)rBEuxpQDyztPLWIKfYarY9O9h11JAhw2uaRIfjlKbIK7rRF06hTMJl6ibdhVhejy4bNn4k3gooncuHA8o446ld6sHJ3oSSP0syrYczGi5E0(J66rAWcnYeQfAcFgUhT)iimNtLJwUrIemgyyY1szmaNb7QaTQbSMhT)iimNtbrxLo7gisovdynpA)rBE0MhPbGsdynQW)KQVbIKtDKNKt9rW5rS(r7psdaLgWAuEYaRqQJ8KCQpcopI1pA)rnqO8aGXLhPoYtYP(i4W8rW0Th15JyTIDpA)rNaJE0wpcUz9J2FeeMZPYrl3ircgdmm5APmgGZGDvGw1awZJ2FeeMZPGORsNDdejNQbSMhT)iimNtbtkIosTbgMCTugvdynpA9JwT6rBEeeMZP0syCGZtH1)O9hrdDWy4rW5rBZUhT(rRw9OnpQbc1j2j1rUJQ(cuHE0(JAGqDzV6i3rvFbQqpA9JwT6rBE0HnKdCWifqcFdWzcFYqLgDM2HLnf1nWY(EQ9O9h11JGWCofqcFdWzcFYqLgDM2HLnfw)J2F0MhbH5CkTegh48uy9pA)r0qhmgEeCE02S(rRF0(JGWCoLpjxyaot4tgRS0uh5j5uF0wmFeJS(rRF0QvpAZJ0GfAKju2z4szE0(J0aqPbSgf51dSOZabMM6ipjN6J2I5Jy8r7ps0rUqgAiVKQpARhT9Jw)OvRE0MhbH5CkFsUWaCMWNmwzPPW6F0(JOHoym8i48i4cw)O1pAnhVgxQdoBmYXfDKGHJFyJr0rcgtjRbhVK1WmIhXX1syrYcXdoBDxUnCCAeOc14DWX1xg0LchVDyztPLWIKfYarY9O9hPbl0itOwOj8z4E0(J28OnpsdaLgWAuH)jvFdejN6ipjN6JGZJy9J2FKgaknG1O8KbwHuh5j5uFeCEeRF0(JAGq5baJlpsDKNKt9rWH5JGPBpQZhXAf7E0(Jobg9OTEeCZ6hT)iimNtLJwUrIemgyyY1szmaNb7QaTQbSMhT)iimNtbrxLo7gisovdynpA)rqyoNcMueDKAdmm5APmQgWAE0(Jobg9OTEeCZ6hT)iimNtLJwUrIemgyyY1szmaNb7QaTQbSMhT)iimNtbrxLo7gisovdynpA)rqyoNcMueDKAdmm5APmQgWAE06hTA1J28iimNtPLW4aNNcR)r7pIg6GXWJGZJ2MDpA9JwT6rBEudeQtStQJChv9fOc9O9h1aH6YE1rUJQ(cuHE0(Jobg9OTEeCZ6hT)iimNtLJwUrIemgyyY1szmaNb7QaTQbSMhT)iimNtbrxLo7gisovdynpA)rqyoNcMueDKAdmm5APmQgWAE06hTMJxJl1bNng54IosWWXpSXi6ibJPK1GJxYAygXJ44AjSizH4bNnwjUnCCAeOc14DWX1xg0LchVRh1oSSP0syrYczGi5E0(JGWCoLwcJdCEkSEoEnUuhC2yKJl6ibdh)WgJOJemMswdoEjRHzepIJRLWIKfIhC2Gl42WXPrGkuJ3bhxFzqxkC82HLnfWQyrYczGi5E0(J28OnpsdaLgWAuH)jvFdejN6ipjN6JGZJy9J2FKgaknG1O8KbwHuh5j5uFeCEeRF0(Jobg9OTEeJS7r7pccZ5u5OLBKibJQbSMhT)iimNtbrxLo7gisovdynpA)rqyoNcMueDKAdmm5APmQgWAE06hTA1J28iimNt5baJ9CmoW5PW6F0(JAGqvXgxEK6i3rvFbQqpA9JwT6rBEeeMZP8aGXEogh48uy9pA)rqyoNYNKlmaNj8jJvwAkS(hT(rRw9Onp6WgYboyKciHVb4mHpzOsJot7WYMI6gyzFp1E0(J66rqyoNciHVb4mHpzOsJot7WYMcR)rRF0QvpAZJ0GfAKjutcZpmoHE0(J0aqPbSgLgmla7Kj8jtTpVmQQJ8KCQpAlMpIXhT(rRw9OnpsdwOrMqzNHlL5r7psdaLgWAuKxpWIodeyAQJ8KCQpAlMpIXhT)irh5czOH8sQ(OTE02pA9JwZXRXL6GZgJCCrhjy44h2yeDKGXuYAWXlznmJ4rCCGvXIKfIhC2yK1CB440iqfQX7GJRVmOlfoExpQDyztbSkwKSqgisUhT)iimNt5baJ9CmoW5PW65414sDWzJroUOJemC8dBmIosWykzn44LSgMr8iooWQyrYcXdoBmYi3gooncuHA8o446ld6sHJ3oSSPawflswidej3J2FeeMZP8aGXEogh48uy9C8ACPo4SXihx0rcgo(HngrhjymLSgC8swdZiEehhyvSizH4bNng3MBdhNgbQqnEhC8gv1x2hjy44Dt3JSOh5ll0JyvZGwo5rfcgnn5y4ru3al77P2JKP9iiPiJMEK4C5KbdpsQpsEuifAIhzrpQALH2)r5eGh5baJ9CEKdCEpYYNgAHUhf(0JkmOLtEeeMZ9OS(ijEe4EeevawpA7hvjnhx0rcgo(HngrhjymLSgCC9LbDPWX38Onp6WgYboyKQWGwoPACfIICGzGvsV(kPOUbw23tThT(r7pAZJcPqtOGKImAYioxozWGIgbQqThT(r7pAZJGWCovHbTCs14kef5aZaRKE9vsH1)O1pA)rBEeeMZPkmOLtQgxHOihygyL0RVsQJ8KCQpAlMpA7hT(rR54LSgMr8ioEHbTCcGhC2yK9CB440iqfQX7GJ3OQ(Y(ibdhVB6EKf9iFzHEeRAg0YjpQqWOPjhdpI6gyzFp1EKmTh5OtkpsCUCYGHhj1hjpkKcnXJSOhvTYq7)OCcWJC0jLh5aN3JS8PHwO7rHp9OcdA5KhbH5CpkRpsIhbUhbrfG1J2(rvsZXfDKGHJFyJr0rcgtjRbhxFzqxkC8npAZJoSHCGdgPkmOLtQgxHOihygyL0RVskQBGL99u7rRF0(J28Oqk0ekhDsXioxozWGIgbQqThT(r7pAZJGWCovHbTCs14kef5aZaRKE9vsH1)O1pA)rBEeeMZPkmOLtQgxHOihygyL0RVsQJ8KCQpAlMpA7hT(rR54LSgMr8ioEHbTCIMhC2yeU52WXPrGkuJ3bhVrv9L9rcgoE309ilQBD0JKhnjm)Wj0JKP9il6rnW0TIhzjt8Oa8iTewKSq2cSkwKSqW)izApYIEKVSqpcskYOjBD0jLhjoxozWWJcPqtqn4FeRkFAOf6EKgmla70J0ThL1hH1)il6rvRm0(pkNa8iX5YjdgEKdCEpkapsl14rza)J8PJEKham2Z5roW5P44IosWWXpSXi6ibJPK1GJRVmOlfoELIihyvv1pDHXboJgmla70J2F0MhT5rHuOjuqsrgnzeNlNmyqrJavO2Jw)O9hT5rD9O2HLnLwclswidej3Jw)O9hT5rD9O2HLnfWQyrYczGi5E06hT)OnpsdwOrMqnjm)W4e6r7psdaLgWAuAWSaStMWNm1(8YOQoYtYP(OTy(igF06hTMJxYAygXJ44anywa2jEWzJr2XTHJtJavOgVdoEJQ6l7JemC8UP7rwu36OhjpAsy(HtOhjt7rw0JAGPBfpYsM4rb4rAjSizHSfyvSizHG)rY0EKf9iFzHEeKuKrt26OtkpsCUCYGHhfsHMGAW)iwv(0ql09inywa2PhPBpkRpcR)rw0JQwzO9Fuob4rIZLtgm8ih48EuaEKwQXJYa(h5th9iTeoW59ih48uCCrhjy44h2yeDKGXuYAWXRXL6GZgJCC9LbDPWXRue5aRQQ(PlmoWz0GzbyNE0(J28OnpkKcnHYrNumIZLtgmOOrGku7rRF0(J28OUEu7WYMslHfjlKbIK7rRF0(J28OUEu7WYMcyvSizHmqKCpA9J2F0MhPbl0itOMeMFyCc9O9hPbGsdynknywa2jt4tMAFEzuvh5j5uF0wmFeJpA9JwZXlznmJ4rCCTgmla7ep4SXiCLBdhNgbQqnEhCCrhjy44APumIosWykzn44LSgMr8ioUxgjmjsWWdoBm2D52WXPrGkuJ3bhx0rcgo(HngrhjymLSgC8swdZiEehhIKJh8GJRLWIKfIBdNng52WXfDKGHJ3FaRchNgbQqnEh8GZ22CB440iqfQX7GJRVmOlfoExpccZ5uAjmoW5PW654IosWWX1syCGZJhC2yp3gooncuHA8o446ld6sHJdH5CQ(dyvuy9CCrhjy44NyN4bNn4MBdhNgbQqnEhCC9LbDPWXdPqtO8j5cdWzcFYyLLMIgbQqThT)OUEeeMZP8j5cdWzcFYyLLMcRNJl6ibdh3NKlmaNj8jJvwA8GZg742WXPrGkuJ3bhxFzqxkC82HLnLwclswidejhhx0rcgoo51dSOZabMgp4Sbx52WXPrGkuJ3bhxFzqxkC8giuNyNuh5oQ6lqf6rRw9iAOdgdpARhb3SJJl6ibdh)e7ep4S1D52WXPrGkuJ3bhxFzqxkC8giux2RoYDu1xGk0J2FKg4bbm9GCI6JGdZhb3CCrhjy44x2ZdoBSsCB440iqfQX7GJRVmOlfoE7WYMslHfjlKbIKJJl6ibdhxdMfGDYe(KP2NxgvEWzdUGBdhNgbQqnEhCC9LbDPWX1apiGPhKtuFeCy(i4MJl6ibdh3rhqNaSQbkdIJ7jDVHg6GXaNng5bNngzn3gooncuHA8o446ld6sHJV5rD9Ogiust6JCHmvl58mnXtGrQi12Zb2J2Fuxps0rcgL0K(ixit1soptt8eyKkhJRKW8JhT)OnpQRh1aHsAsFKlKPAjNNXNKIksT9CG9OvREudekPj9rUqMQLCEgFskQJ8KCQpcopI9pA9JwT6rnqOKM0h5czQwY5zAINaJu1q02F0wpI9pA)rnqOKM0h5czQwY5zAINaJuh5j5uF0wpIDpA)rnqOKM0h5czQwY5zAINaJurQTNdShTMJl6ibdhxAsFKlKPAjNhp4SXiJCB440iqfQX7GJRVmOlfoEfGvGYPP6XQbwHm0H1hjyu0iqfQ9O9hrdDWy4rB9i2ZUhTA1JQaScuon1cOirwitfuwOju0iqfQXXZjO7W6dt644vawbkNMAbuKilKPckl0e70qhmg2I9SJJNtq3H1hM0ZJAPeehNroUOJemCCxHQ(6tCbhpNGUdRpmWkaiPWXzKhC2yCBUnCCAeOc14DWX1xg0Lchx0rUqgAiVKQpcopIroUOJemC8Qv2tgisoEWzJr2ZTHJtJavOgVdoU(YGUu44h5oQ6lqf6r7psd8GaMEqor9rB9i2XXfDKGHJFIDIhC2yeU52WXPrGkuJ3bhxFzqxkCCnWdcy6b5e1hT1Jyhhx0rcgoE1)Ogp4bhxdaLgWAQCB4SXi3goUOJemC8EqKGHJtJavOgVdEWzBBUnCCrhjy44qfaOzCyhdCCAeOc14DWdoBSNBdhx0rcgooeDv6SNdmooncuHA8o4bNn4MBdhx0rcgoUCAzitaUJMGJtJavOgVdEWzJDCB44IosWWXljm)OAy1WAW8Oj440iqfQX7GhC2GRCB44IosWWXD5rqfaOXXPrGkuJ3bp4S1D52WXfDKGHJlJMQXjfJwkfooncuHA8o4bNnwjUnCCAeOc14DWX1xg0LchhcZ5uqKCgh48uy9CCrhjy44qxwJsoWmoSJhC2Gl42WXPrGkuJ3bhxFzqxkC8npQbcLhamU8ivKA75a7rRw9irh5czOH8sQ(i48igF06hT)OgiuH)jvFdejNksT9CGXXfDKGHJNJwUrIem8GZgJSMBdhx0rcgooeDv6SZXPrGkuJ3bp4SXiJCB440iqfQX7GJl6ibdhxZGUaIdmP2avKAWXjNJ0HzepIJRzqxaXbMuBGksn4bNng3MBdhx0rcgoowLmzqEvooncuHA8o4bp44anywa2jUnC2yKBdhx0rcgoUham2ZX4aNhhNgbQqnEh8GZ22CB440iqfQX7GJRVmOlfoEifAcLpjxyaot4tgRS0u0iqfQ9O9h11JGWCoLpjxyaot4tgRS0uy9CCrhjy44(KCHb4mHpzSYsJhC2yp3gooncuHA8o446ld6sHJxbyfOCAkxE1WuJlTtkAeOc1E0(JGWCoLlVAyQXL2jfwphx0rcgoUgmla7Kj8jtTpVmQ8GZgCZTHJtJavOgVdoU(YGUu44KUK9vsjddMH6(4rRw9isxY(kPQGICMH6(GJl6ibdhVgY5YJ4bNn2XTHJtJavOgVdoU(YGUu44KUK9vsjddMH6(4rRw9isxY(kPkyJCMH6(GJl6ibdh36KWNhC2GRCB440iqfQX7GJRVmOlfoEifAcLpjxyaot4tgRS0u0iqfQ9O9hbH5CkFsUWaCMWNmwzPPW654IosWWX1GzbyNmHpzQ95LrLhC26UCB440iqfQX7GJRVmOlfoEifAcLpjxyaot4tgRS0u0iqfQ9O9hPbGsdynkFsUWaCMWNmwzPPoYtYP(i48igzhhx0rcgoUgmla7Kj8jtTpVmQ8GZgRe3gooncuHA8o446ld6sHJ31JcPqtO8j5cdWzcFYyLLMIgbQqnoUOJemCCnywa2jt4tMAFEzu5bp44Anywa2jUnC2yKBdhx0rcgoUwcJdCECCAeOc14DWdoBBZTHJtJavOgVdoU(YGUu44HuOju(KCHb4mHpzSYstrJavO2J2FuxpccZ5u(KCHb4mHpzSYstH1ZXfDKGHJ7tYfgGZe(KXklnEWzJ9CB440iqfQX7GJRVmOlfoEfGvGYPPC5vdtnU0oPOrGku7r7pccZ5uU8QHPgxANuy9CCrhjy44AWSaStMWNm1(8YOYdoBWn3gooncuHA8o446ld6sHJhsHMq5tYfgGZe(KXklnfncuHApA)rqyoNYNKlmaNj8jJvwAkSEoUOJemCCnywa2jt4tMAFEzu5bNn2XTHJtJavOgVdoU(YGUu44HuOju(KCHb4mHpzSYstrJavO2J2FKgaknG1O8j5cdWzcFYyLLM6ipjN6JGZJyKDCCrhjy44AWSaStMWNm1(8YOYdoBWvUnCCAeOc14DWX1xg0LchVRhfsHMq5tYfgGZe(KXklnfncuHACCrhjy44AWSaStMWNm1(8YOYdEWXbwflswiUnC2yKBdhNgbQqnEhCC9LbDPWX76rqyoNYdag75yCGZtH1ZXfDKGHJ7baJ9CmoW5XdoBBZTHJtJavOgVdoU(YGUu44HuOju(KCHb4mHpzSYstrJavO2J2FuxpccZ5u(KCHb4mHpzSYstH1ZXfDKGHJ7tYfgGZe(KXklnEWzJ9CB44IosWWXRHCvSdgXXPrGkuJ3bp4Sb3CB440iqfQX7GJRVmOlfoEfGvGYPPC5vdtnU0oPOrGkuJJl6ibdhxdMfGDYe(KP2NxgvEWzJDCB440iqfQX7GJRVmOlfoE7WYMcyvSizHmqKCCCrhjy44KxpWIodeyA8GZgCLBdhNgbQqnEhCC9LbDPWX38OUEudekPj9rUqMQLCEMM4jWivKA75a7r7pQRhj6ibJsAsFKlKPAjNNPjEcmsLJXvsy(XJ2F0Mh11JAGqjnPpYfYuTKZZ4tsrfP2EoWE0QvpQbcL0K(ixit1sopJpjf1rEso1hbNhX(hT(rRw9Ogiust6JCHmvl58mnXtGrQAiA7pARhX(hT)Ogiust6JCHmvl58mnXtGrQJ8KCQpARhXUhT)Ogiust6JCHmvl58mnXtGrQi12Zb2JwZXfDKGHJlnPpYfYuTKZJhC26UCB440iqfQX7GJl6ibdhVInU8ioU(YGUu44h5oQ6lqfIJRzqxitihmkQC2yKhC2yL42WXPrGkuJ3bhx0rcgoUhamU8ioU(YGUu44h5oQ6lqf6rRw9iimNtbtkIosTbgMCTugfwphxZGUqMqoyuu5SXip4SbxWTHJtJavOgVdoU(YGUu44AWcnYeQjH5hgNqpA)rKUK9vsjddMH6(GJl6ibdhVgY5YJ4bNngzn3gooncuHA8o446ld6sHJ31J0GfAKjutcZpmoHE0(JiDj7RKsggmd19bhx0rcgoU1jHpp4SXiJCB440iqfQX7GJRVmOlfo(MhbH5CksxY(kzkyJCkS(hTA1JGWCofPlzFLmvqrofw)JwZXfDKGHJRbZcWozcFYu7ZlJkp4SX42CB440iqfQX7GJRVmOlfo(Mhr6s2xjvoMc2i3JwT6rKUK9vsvbf5md19XJw)OvRE0Mhr6s2xjvoMc2i3J2FeeMZPQHCvSdgziVEGfDE0eMc2iNcR)rR54IosWWXRHCU8iEWzJr2ZTHJl6ibdh36KWNJtJavOgVdEWdEWXxORMGHZ22SEBgznCbJWvoULCtoWQC8UPxp4cQ9igz8rIosW8OswJQ6zHJx7jnNngznCZX7pGllehNvWkEeRmm5APmpcU8dlBplScwXJydSqEq09igzp8pABwVnJplplScwXJyv8LbgvHl7zHvWkEeCPh1nhn46bNe0JyvKWww5bGXEopQ)sWLrs1hTjDpQsrKdShL1hP9jTDQTw9SWkyfpcU0J6MJgC9Gtc6rG(ibZJcWJQ(PlE0gW9ObeRFee5ah9iwfWSaStQNLNfwXJ627EsJfu7rqKdC0J0apijEeeblNQ6rSYP1uFuF0ag4s(Y55Wkps0rcM6JatHb1ZIOJemvv)rAGhKeDY0w750oQzQ95Lr9zr0rcMQQ)inWdsIozARpjxyaot4tgRS0GpDmdPqtO8j5cdWzcFYyLLMIgbQqT9nTdlBkTewKSqgisUDimNtPLW4aNNcRF1Q2HLnfWQyrYczGi52HWCoLham2ZX4aNNcRF1kimNt5baJ9CmoW5PW63dPqtOGKImAYioxozWGIgbQqT1plIosWuv9hPbEqs0jtB7pGvb(0XecZ5uAjmoW5PW63Bhw2uAjSizHmqKCplIosWuv9hPbEqs0jtBHi5moW5bF6y2feMZPKHbJdCEkS(9nB6QDyztbSkwKSqgisU9UAhw2uAjSizHmqKCR330LgSqJmHAsy(HXj061RwTztxTdlBkGvXIKfYarYT3v7WYMslHfjlKbIKB9(gnyHgzc1KW8dJtO9qk0eQJQb4KibJrCUCYGbfncuHARx)Si6ibtv1FKg4bjrNmT16KWh(0XecZ5uEaWyphJdCEkS(92HLnfWQyrYczGi527sdwOrMqnjm)W4e6zr0rcMQQ)inWdsIozABnKZLhbF6ycH5CkpaySNJXbopfw)E7WYMcyvSizHmqKC7AWcnYeQjH5hgNqplIosWuv9hPbEqs0jtBDfQ6RpXfWNoMvawbkNMQhRgyfYqhwFKGrrJavO2QvvawbkNMAbuKilKPckl0ekAeOc1GpNGUdRpmPNh1sjiMmcFobDhwFyGvaqsHjJWNtq3H1hM0XScWkq50ulGIezHmvqzHM4z5zHv8OU9UN0yb1EeTqhdpksp6rHp9irhG7rz9rYIKfbQqQNfrhjyQmR2XkfdKu9FweDKGP2jtBXQKjdYd(r8iMSAGaBGr5DMgvJCyOA0sPaF6y2feMZP6pGvrH1V3LgSqJmHAHMWNH7zr0rcMANmTfRsMmip4RfqWmUCStbJWNoMDbH5CQ(dyvuy97DPbl0itOwOj8z4EweDKGP2jtBXQKjdYd(AbemJlh7uSn8PJzxqyoNQ)awffw)ExAWcnYeQfAcFgUNfrhjyQDY02EqKGb(0XSlnyHgzc1cnHpd3(MnBcPqtO8j5cdWzcFYyLLMIgbQqTDimNt5tYfgGZe(KXklnfw)69nTdlBkTewKSqgisUvRAhw2uaRIfjlKbIKB9ExqyoNQ)awffw)6vR2SbcZ5uq0vPZUbIKtH1VAfeMZPYrl3ircgdmm5APmgGZGDvGwH1VEFtxTdlBkTewKSqgisU9UAhw2uaRIfjlKbIKB961plScwXJyvKWIKLCG9irhjyEujRXJSYs5rq0JozEu6G)rEYaRq2g(Nu9FKC0JaZJ0n4F0jWOhL1hbrfG1JGBwd)J6o0z)rY0EuoA5gjsW8i5Oh1awZJKP9iwzysr0rQFemm5APmpccZ5EuwF0aIhj6ixi4Fe4Eu6G)rwu36OhLZJ0s4aN3JKP9iAOdgdpkRpsGal0J2MDW)iw97rP7rw0J8Lf6rHp9iwDj8FuHGrttogEe1nWY(EQb)JcF6rnccZ5Eujh7u7rb4rz8OS(ObepcR)rY0Een0bJHhL1hjqGf6rBZA4z1VhLUhzrDRJEKDgUuMhjt7rD7E9al6EeeyApsdaLgWAEuwFew)JKP9iAiVKQpso6r54Olb3JcWJ2w9Si6ibtTtM2EyJr0rcgtjRb814sDWKr4hXJyQLWIKfc(0XSDyztPLWIKfYarYT3LgSqJmHAHMWNHBhcZ5u5OLBKibJbgMCTugdWzWUkqRAaRzhcZ5uq0vPZUbIKt1awZ(MnAaO0awJk8pP6BGi5uh5j5uHdR31aqPbSgLNmWkK6ipjNkCy9EdekpayC5rQJ8KCQWHjmDRtwRy3(jWOTGBwVdH5CQC0YnsKGXadtUwkJb4myxfOvnG1SdH5Cki6Q0z3arYPAaRzhcZ5uWKIOJuBGHjxlLr1awZ6vR2aH5CkTegh48uy970qhmgGZ2SB9QvBAGqDIDsDK7OQVavO9giux2RoYDu1xGk06vR2Cyd5ahmsbKW3aCMWNmuPrNPDyztrDdSSVNA7DbH5CkGe(gGZe(KHkn6mTdlBkS(9nqyoNslHXbopfw)on0bJb4SnRxVdH5CkFsUWaCMWNmwzPPoYtYPUftgz96vR2Obl0itOSZWLYSRbGsdynkYRhyrNbcmn1rEso1TyY4UOJCHm0qEjv3A71RwTbcZ5u(KCHb4mHpzSYstH1VtdDWyaoWfSE96NfrhjyQDY02dBmIosWykznGVgxQdMmc)iEetTewKSqWNoMTdlBkTewKSqgisUDnyHgzc1cnHpd3(MnAaO0awJk8pP6BGi5uh5j5uHdR31aqPbSgLNmWkK6ipjNkCy9EdekpayC5rQJ8KCQWHjmDRtwRy3(jWOTGBwVdH5CQC0YnsKGXadtUwkJb4myxfOvnG1SdH5Cki6Q0z3arYPAaRzhcZ5uWKIOJuBGHjxlLr1awZ(jWOTGBwVdH5CQC0YnsKGXadtUwkJb4myxfOvnG1SdH5Cki6Q0z3arYPAaRzhcZ5uWKIOJuBGHjxlLr1awZ6vR2aH5CkTegh48uy970qhmgGZ2SB9QvBAGqDIDsDK7OQVavO9giux2RoYDu1xGk0(jWOTGBwVdH5CQC0YnsKGXadtUwkJb4myxfOvnG1SdH5Cki6Q0z3arYPAaRzhcZ5uWKIOJuBGHjxlLr1awZ61plIosWu7KPTh2yeDKGXuYAaFnUuhmze(r8iMAjSizHGpDm7QDyztPLWIKfYarYTdH5CkTegh48uy9plScwXJy1TkwKSKdShj6ibZJkznEKvwkpcIE0jZJsh8pYtgyfY2W)KQ)JKJEeyEKUb)Jobg9OS(iiQaSEeJSd(h1DOZ(JKP9OC0YnsKG5rYrpQbSMhjt7rSYWKIOJu)iyyY1szEeeMZ9OS(Obeps0rUqQhXQFpkDW)ilQBD0JY5rEaWypNh5aN3JKP9Ok24YJEuwF0rUJQ(cuHG)rS63Js3JSOh5ll0JcF6rS6s4)OcbJMMCm8iQBGL99ud(hf(0JAeeMZ9Oso2P2JcWJY4rz9rdiEewVIv)Eu6EKf1To6r2z4szEKmTh1T71dSO7rqGP9inauAaR5rz9ry9psM2JOH8sQ(i5OhbrfG1J2g(hbUhLUhzrDRJEeBjm)4roHEKmThXQaMfGD6r62JY6JW6vplIosWu7KPTh2yeDKGXuYAaFnUuhmze(r8iMaRIfjle8PJz7WYMcyvSizHmqKC7B2ObGsdynQW)KQVbIKtDKNKtfoSExdaLgWAuEYaRqQJ8KCQWH17NaJ2Ir2TdH5CQC0YnsKGr1awZoeMZPGORsNDdejNQbSMDimNtbtkIosTbgMCTugvdynRxTAdeMZP8aGXEogh48uy97nqOQyJlpsDK7OQVavO1RwTbcZ5uEaWyphJdCEkS(DimNt5tYfgGZe(KXklnfw)6vR2Cyd5ahmsbKW3aCMWNmuPrNPDyztrDdSSVNA7DbH5CkGe(gGZe(KHkn6mTdlBkS(1RwTrdwOrMqnjm)W4eAxdaLgWAuAWSaStMWNm1(8YOQoYtYPUftgxVA1gnyHgzcLDgUuMDnauAaRrrE9al6mqGPPoYtYPUftg3fDKlKHgYlP6wBVE9ZIOJem1ozA7HngrhjymLSgWxJl1btgHFepIjWQyrYcbF6y2v7WYMcyvSizHmqKC7qyoNYdag75yCGZtH1)Si6ibtTtM2EyJr0rcgtjRb8J4rmbwflswi4RXL6GjJWNoMTdlBkGvXIKfYarYTdH5CkpaySNJXbopfw)ZcR4rDt3JSOh5ll0JyvZGwo5rfcgnn5y4ru3al77P2JKP9iiPiJMEK4C5KbdpsQpsEuifAIhzrpQALH2)r5eGh5baJ9CEKdCEpYYNgAHUhf(0JkmOLtEeeMZ9OS(ijEe4EeevawpA7hvj9ZIOJem1ozA7HngrhjymLSgWpIhXSWGwobaF6yUzZHnKdCWivHbTCs14kef5aZaRKE9vsrDdSSVNAR33esHMqbjfz0KrCUCYGbfncuHAR33aH5CQcdA5KQXvikYbMbwj96RKcRF9(gimNtvyqlNunUcrroWmWkPxFLuh5j5u3I52Rx)SWkEu309il6r(Yc9iw1mOLtEuHGrttogEe1nWY(EQ9izApYrNuEK4C5KbdpsQpsEuifAIhzrpQALH2)r5eGh5OtkpYboVhz5tdTq3JcF6rfg0YjpccZ5EuwFKepcCpcIkaRhT9JQK(zr0rcMANmT9WgJOJemMswd4hXJywyqlNOHpDm3S5WgYboyKQWGwoPACfIICGzGvsV(kPOUbw23tT17BcPqtOC0jfJ4C5KbdkAeOc1wVVbcZ5ufg0YjvJRquKdmdSs61xjfw)69nqyoNQWGwoPACfIICGzGvsV(kPoYtYPUfZTxV(zHv8OUP7rwu36OhjpAsy(HtOhjt7rw0JAGPBfpYsM4rb4rAjSizHSfyvSizHG)rY0EKf9iFzHEeKuKrt26OtkpsCUCYGHhfsHMGAW)iwv(0ql09inywa2PhPBpkRpcR)rw0JQwzO9Fuob4rIZLtgm8ih48EuaEKwQXJYa(h5th9ipaySNZJCGZt9Si6ibtTtM2EyJr0rcgtjRb8J4rmbAWSaStWNoMvkICGvvv)0fgh4mAWSaSt7B2esHMqbjfz0KrCUCYGbfncuHAR330v7WYMslHfjlKbIKB9(MUAhw2uaRIfjlKbIKB9(gnyHgzc1KW8dJtODnauAaRrPbZcWozcFYu7ZlJQ6ipjN6wmzC96NfwXJ6MUhzrDRJEK8OjH5hoHEKmThzrpQbMUv8ilzIhfGhPLWIKfYwGvXIKfc(hjt7rw0J8Lf6rqsrgnzRJoP8iX5YjdgEuifAcQb)Jyv5tdTq3J0GzbyNEKU9OS(iS(hzrpQALH2)r5eGhjoxozWWJCGZ7rb4rAPgpkd4FKpD0J0s4aN3JCGZt9Si6ibtTtM2EyJr0rcgtjRb8J4rm1AWSaStWxJl1btgHpDmRue5aRQQ(PlmoWz0GzbyN23SjKcnHYrNumIZLtgmOOrGkuB9(MUAhw2uAjSizHmqKCR330v7WYMcyvSizHmqKCR33Obl0itOMeMFyCcTRbGsdynknywa2jt4tMAFEzuvh5j5u3IjJRx)Si6ibtTtM2QLsXi6ibJPK1a(r8iMEzKWKibZZIOJem1ozA7HngrhjymLSgWpIhXeIK7z5zr0rcMQcIKJjejNXbop4thZUGWCofejNXbopfw)ZIOJemvfejxNmT1NKlmaNj8jJvwAWNoMHuOju(KCHb4mHpzSYstrJavO2(Mqk0ekiPiJMmIZLtgmOOrGkuB9UgSqJmHAHMWNH7zr0rcMQcIKRtM26baJlpcEnd6czc5GrrLjJWNoMB20vKA75aBpspYeatlj4W427qyoNcMueDKAdmm5APmkS(1RwT5i3rvFbQq7r6rMayAjbhg3EhcZ5uWKIOJuBGHjxlLrH1VE9ZIOJemvfejxNmT1dagxEe8Ag0fYeYbJIktgHpDm3SPRi12Zb2EKEKjaMwsWHXTxVA1MJChv9fOcThPhzcGPLeCyC71RFweDKGPQGi56KPTNSqdaRAChnDhgEweDKGPQGi56KPTyvYKb5b)iEetwnqGnWO8otJQromunAPuGpDm1GfAKjul0e(mCplIosWuvqKCDY0wSkzYG8GVwabZ4YXofmcF6y2feMZP6pGvrH1VRbl0itOwOj8z4EweDKGPQGi56KPTyvYKb5bFTacMXLJDk2g(0XSlimNt1FaRIcRFxdwOrMqTqt4ZW9Si6ibtvbrY1jtB7brcg4thtnyHgzc1cnHpd3oeMZPYrl3ircg1rEsov4WCB4EhcZ5u5OLBKibJ6ipjN6wm3MDplIosWuvqKCDY0wnywa2jt4tMAFEzuHpDm7QDyztPLWIKfYarYT3v7WYMcyvSizHmqKCplIosWuvqKCDY0wi6Q0z3arYbF6yUbcZ5uNSqdaRAChnDhguy9Rw1LgSqJmHAHMWNHB9ZIOJemvfejxNmTnhTCJejyGpDm3aH5CQtwObGvnUJMUddkS(vR6sdwOrMqTqt4ZWT(zr0rcMQcIKRtM2crxLo75ad(0XCdeMZPGORsNDdejNcRF1kimNtLJwUrIemgyyY1szmaNb7QaTcRF9ZIOJemvfejxNmTvAsFKlKPAjNh8PJ5MUAGqjnPpYfYuTKZZ0epbgPIuBphy7Dj6ibJsAsFKlKPAjNNPjEcmsLJXvsy(X(MUAGqjnPpYfYuTKZZ4tsrfP2EoWwTQbcL0K(ixit1sopJpjf1rEsov4W(1Rw1aHsAsFKlKPAjNNPjEcmsvdrBFl2V3aHsAsFKlKPAjNNPjEcmsDKNKtDl2T3aHsAsFKlKPAjNNPjEcmsfP2EoWw)Si6ibtvbrY1jtB9aGXLhbF6ycH5Ckysr0rQnWWKRLYOW63fDKlKHgYlP6wS)zr0rcMQcIKRtM2g(Nu9nqKCWRzqxitihmkQmze(0X8i3rvFbQqRw1aHk8pP6BGi5u1q023I9RwTPbcv4Fs13arYPQHOTVfCVFyd5ahmsvWCojhhwLAgYd6enPOUbw23tT1Rwj6ixidnKxsv4WeUxTccZ5uq0vPZUbIKtH1VdH5Cki6Q0z3arYPoYtYPUfty6wNSwXUNfrhjyQkisUozARNmWke8PJ5jWivJCPod4WiR3Rue5aRQ8KbwHmEGJEweDKGPQGi56KPTUcv91N4c4thZkaRaLtt1JvdSczOdRpsWOOrGkuBFZgnauAaRrf(Nu9nqKCQJ8KCQWH17AaO0awJYtgyfsDKNKtfoSE9(MgiuEaW4YJuh5j5uHdt2VEFdeMZPYrl3ircgdmm5APmgGZGDvGw1awZoeMZPGORsNDdejNQbSMDimNtbtkIosTbgMCTugvdynRxVAvfGvGYPPwafjYczQGYcnHIgbQqn4ZjO7W6dt65rTucIjJWNtq3H1hgyfaKuyYi85e0Dy9HjDmRaScuon1cOirwitfuwOj23ObGsdynQW)KQVbIKtDKNKtfoSExdaLgWAuEYaRqQJ8KCQWH1RFweDKGPQGi56KPTvRSNGpDmHWCovoA5gjsWyGHjxlLXaCgSRc0QgWA2HWCofeDv6SBGi5unG1Sl6ixidnKxsv4WeUFweDKGPQGi56KPTEcwb(0XecZ5u5OLBKibJcRFx0rUqgAiVKQBX(9nqyoNkaGW3itZOlILQgI2oCyU96vR2aH5CQaacFJmnJUiwkS(DimNtfaq4BKPz0fXsDKNKtDlgvSB9QvBGWCovvweyKrd8GKqMqvdrBhomz)6vRGWCofeDv6SBGi5uy97IoYfYqd5LuDl2)Si6ibtvbrY1jtB9eSc8PJ5gimNtvLfbgz0apijKju1q02HdtgxVVbcZ5ubae(gzAgDrSuy9R3HWCovoA5gjsWOW63fDKlKHgYlPkZTFweDKGPQGi56KPTEYaRqWNoMqyoNkhTCJejyuy97IoYfYqd5LuDlMS)zr0rcMQcIKRtM26jyf4thZnB2aH5CQaacFJmnJUiwQAiA7WH52RxTAdeMZPcai8nY0m6IyPW63HWCovaaHVrMMrxel1rEso1TyuXU1RwTbcZ5uvzrGrgnWdsczcvneTD4WK9RxVl6ixidnKxs1Ty)6NfrhjyQkisUozAB4Fs13arYbF6yk6ixidnKxsv4W4ZIOJemvfejxNmT1tgyfc(0XCZMtGrBbxW617IoYfYqd5LuDl2VE1QnBobgTfRe7wVl6ixidnKxs1Ty)EifAcvfGvmaNj8jJdCunu0iqfQT(zr0rcMQcIKRtM22JvwOl7oe8Ag0fYeYbJIktgHpDmBGqf(Nu9nqKCQAiA7Wz7NfrhjyQkisUozAB4Fs13arY9Si6ibtvbrY1jtB9eSc8PJPOJCHm0qEjv3I9plIosWuvqKCDY02Qv2tgisUNfrhjyQkisUozABEGXHDWNoMNaJunYL6m2cUz9oeMZPYdmoStDKNKtDlwRy3ZYZIOJemvLxgjmjsWWmpW4Wo4thZC0aVCGzAINaJmSRcN8aJd7mnXtGrMW)OQpO02HWCovEGXHDQJ8KCQBX(UnFPg0ZIOJemvLxgjmjsW0jtBpAilPaF6ygYyphy7(KucFvVo2cUYUNfrhjyQkVmsysKGPtM26oA6oj1mhbJg6Kibd8PJziJ9CGT7tsj8v96yl4k7EweDKGPQ8YiHjrcMozAl51dSOZabMg8PJ5MUAhw2uAjSizHmqKC7D1oSSPawflswidej36vReDKlKHgYlPkCyU9ZIOJemvLxgjmjsW0jtBHKZE1EoWNoMHm2Zb2UpjLWx1RJT6USBphnWlhyMM4jWid7QWH1kg728jPe(kpP7FweDKGPQ8YiHjrcMozABf7wYfPyYPg5OJk8PJjeMZPQy3sUifto1ihDuvnG1SdH5Cki5SxTNJQbSMDFskHVQxhBbxz9EoAGxoWmnXtGrg2vHdRvBZUUnFskHVYt6(NLNfrhjyQknauAaRPYShejyEweDKGPQ0aqPbSMANmTfQaanJd7y4zr0rcMQsdaLgWAQDY0wi6Q0zphyplIosWuvAaO0awtTtM2kNwgYeG7OjEweDKGPQ0aqPbSMANmTTKW8JQHvdRbZJM4zr0rcMQsdaLgWAQDY0wxEeubaAplIosWuvAaO0awtTtM2kJMQXjfJwkLNfrhjyQknauAaRP2jtBHUSgLCGzCyh8PJjeMZPGi5moW5PW6FweDKGPQ0aqPbSMANmTnhTCJejyGpDm30aHYdagxEKksT9CGTALOJCHm0qEjvHdJR3BGqf(Nu9nqKCQi12Zb2ZIOJemvLgaknG1u7KPTq0vPZ(ZIOJemvLgaknG1u7KPTyvYKb5bp5CKomJ4rm1mOlG4atQnqfPgplIosWuvAaO0awtTtM2IvjtgKx9z5zr0rcMQslHfjleZ(dyvEweDKGPQ0syrYc1jtB1syCGZd(0XSlimNtPLW4aNNcR)zr0rcMQslHfjluNmT9e7e8PJjeMZP6pGvrH1)Si6ibtvPLWIKfQtM26tYfgGZe(KXkln4thZqk0ekFsUWaCMWNmwzPPOrGkuBVlimNt5tYfgGZe(KXklnfw)ZIOJemvLwclswOozAl51dSOZabMg8PJz7WYMslHfjlKbIK7zr0rcMQslHfjluNmT9e7e8PJzdeQtStQJChv9fOcTAfn0bJHTGB29Si6ibtvPLWIKfQtM2Ezp8PJzdeQl7vh5oQ6lqfAxd8GaMEqorfomH7NfrhjyQkTewKSqDY0wnywa2jt4tMAFEzuHpDmBhw2uAjSizHmqKCplIosWuvAjSizH6KPTo6a6eGvnqzqW7jDVHg6GXatgHpDm1apiGPhKtuHdt4(zr0rcMQslHfjluNmTvAsFKlKPAjNh8PJ5MUAGqjnPpYfYuTKZZ0epbgPIuBphy7Dj6ibJsAsFKlKPAjNNPjEcmsLJXvsy(X(MUAGqjnPpYfYuTKZZ4tsrfP2EoWwTQbcL0K(ixit1sopJpjf1rEsov4W(1Rw1aHsAsFKlKPAjNNPjEcmsvdrBFl2V3aHsAsFKlKPAjNNPjEcmsDKNKtDl2T3aHsAsFKlKPAjNNPjEcmsfP2EoWw)Si6ibtvPLWIKfQtM26ku1xFIlGpDmRaScuonvpwnWkKHoS(ibJIgbQqTDAOdgdBXE2TAvfGvGYPPwafjYczQGYcnHIgbQqn4ZjO7W6dt65rTucIjJWNtq3H1hgyfaKuyYi85e0Dy9HjDmRaScuon1cOirwitfuwOj2PHoymSf7z3ZIOJemvLwclswOozAB1k7j4thtrh5czOH8sQchgFweDKGPQ0syrYc1jtBpXobF6yEK7OQVavODnWdcy6b5e1Ty3ZIOJemvLwclswOozAB1)Og8PJPg4bbm9GCI6wS7z5zr0rcMQsRbZcWoXulHXboVNfrhjyQkTgmla7uNmT1NKlmaNj8jJvwAWNoMHuOju(KCHb4mHpzSYstrJavO2ExqyoNYNKlmaNj8jJvwAkS(NfrhjyQkTgmla7uNmTvdMfGDYe(KP2Nxgv4thZkaRaLtt5YRgMACPDsrJavO2oeMZPC5vdtnU0oPW6FweDKGPQ0AWSaStDY0wnywa2jt4tMAFEzuHpDmdPqtO8j5cdWzcFYyLLMIgbQqTDimNt5tYfgGZe(KXklnfw)ZIOJemvLwdMfGDQtM2QbZcWozcFYu7ZlJk8PJzifAcLpjxyaot4tgRS0u0iqfQTRbGsdynkFsUWaCMWNmwzPPoYtYPchgz3ZIOJemvLwdMfGDQtM2QbZcWozcFYu7ZlJk8PJzxHuOju(KCHb4mHpzSYstrJavO2ZYZIOJemvvHbTCIMPwcJdCEplplIosWuvfg0YjaMEaWyphJdCEplplIosWuvanywa2jMEaWyphJdCEplIosWuvanywa2PozARpjxyaot4tgRS0GpDmdPqtO8j5cdWzcFYyLLMIgbQqT9UGWCoLpjxyaot4tgRS0uy9plIosWuvanywa2PozARgmla7Kj8jtTpVmQWNoMvawbkNMYLxnm14s7KIgbQqTDimNt5YRgMACPDsH1)Si6ibtvb0GzbyN6KPT1qoxEe8PJjPlzFLuYWGzOUpwTI0LSVsQkOiNzOUpEweDKGPQaAWSaStDY0wRtcF4thtsxY(kPKHbZqDFSAfPlzFLufSroZqDF8Si6ibtvb0GzbyN6KPTAWSaStMWNm1(8YOcF6ygsHMq5tYfgGZe(KXklnfncuHA7qyoNYNKlmaNj8jJvwAkS(NfrhjyQkGgmla7uNmTvdMfGDYe(KP2Nxgv4thZqk0ekFsUWaCMWNmwzPPOrGkuBxdaLgWAu(KCHb4mHpzSYstDKNKtfomYUNfrhjyQkGgmla7uNmTvdMfGDYe(KP2Nxgv4thZUcPqtO8j5cdWzcFYyLLMIgbQqTNLNfrhjyQkGvXIKfIPham2ZX4aNh8PJzxqyoNYdag75yCGZtH1)Si6ibtvbSkwKSqDY0wFsUWaCMWNmwzPbF6ygsHMq5tYfgGZe(KXklnfncuHA7DbH5CkFsUWaCMWNmwzPPW6FweDKGPQawflswOozABnKRIDWONfrhjyQkGvXIKfQtM2QbZcWozcFYu7ZlJk8PJzfGvGYPPC5vdtnU0oPOrGku7zr0rcMQcyvSizH6KPTKxpWIodeyAWNoMTdlBkGvXIKfYarY9Si6ibtvbSkwKSqDY0wPj9rUqMQLCEWNoMB6QbcL0K(ixit1soptt8eyKksT9CGT3LOJemkPj9rUqMQLCEMM4jWivogxjH5h7B6QbcL0K(ixit1sopJpjfvKA75aB1Qgiust6JCHmvl58m(Kuuh5j5uHd7xVAvdekPj9rUqMQLCEMM4jWivneT9Ty)EdekPj9rUqMQLCEMM4jWi1rEso1Ty3EdekPj9rUqMQLCEMM4jWivKA75aB9ZIOJemvfWQyrYc1jtBRyJlpcEnd6czc5GrrLjJWNoMh5oQ6lqf6zr0rcMQcyvSizH6KPTEaW4YJGxZGUqMqoyuuzYi8PJ5rUJQ(cuHwTccZ5uWKIOJuBGHjxlLrH1)Si6ibtvbSkwKSqDY02AiNlpc(0XudwOrMqnjm)W4eAN0LSVskzyWmu3hplIosWuvaRIfjluNmT16KWh(0XSlnyHgzc1KW8dJtODsxY(kPKHbZqDF8Si6ibtvbSkwKSqDY0wnywa2jt4tMAFEzuHpDm3aH5CksxY(kzkyJCkS(vRGWCofPlzFLmvqrofw)6NfrhjyQkGvXIKfQtM2wd5C5rWNoMBiDj7RKkhtbBKB1ksxY(kPQGICMH6(y9QvBiDj7RKkhtbBKBhcZ5u1qUk2bJmKxpWIopActbBKtH1V(zr0rcMQcyvSizH6KPTwNe(8GhCoa]] )
end