various fixes and adjustments

This commit is contained in:
phyzical 2022-03-29 22:43:28 +08:00
parent 7c5097ee83
commit fd64746ff8
15 changed files with 143 additions and 147 deletions

@ -776,7 +776,7 @@ export const achievements: IMap<Achievement> = {
// { ID: FactionNames.Bladeburners.toUpperCase(), Condition: () => Player.factions.includes(FactionNames.Bladeburners) }, // { ID: FactionNames.Bladeburners.toUpperCase(), Condition: () => Player.factions.includes(FactionNames.Bladeburners) },
// { ID: "DEEPSCANV1.EXE", Condition: () => Player.getHomeComputer().programs.includes(Programs.DeepscanV1.name) }, // { ID: "DEEPSCANV1.EXE", Condition: () => Player.getHomeComputer().programs.includes(Programs.DeepscanV1.name) },
// { ID: "DEEPSCANV2.EXE", Condition: () => Player.getHomeComputer().programs.includes(Programs.DeepscanV2.name) }, // { ID: "DEEPSCANV2.EXE", Condition: () => Player.getHomeComputer().programs.includes(Programs.DeepscanV2.name) },
// { ID: "INFILTRATORS", Condition: () => Player.factions.includes(FactionNames.Infiltators) }, // { ID: "INFILTRATORS", Condition: () => Player.factions.includes(FactionNames.Infiltrators) },
// { // {
// ID: "SERVERPROFILER.EXE", // ID: "SERVERPROFILER.EXE",
// Condition: () => Player.getHomeComputer().programs.includes(Programs.ServerProfiler.name), // Condition: () => Player.getHomeComputer().programs.includes(Programs.ServerProfiler.name),

@ -349,42 +349,44 @@ function generateStatsDescription(mults: IMap<number>, programs?: string[], star
desc = ( desc = (
<> <>
{desc} {desc}
<br />+{f(mults.infiltration_base_rep_increase)} Infiltration {FactionNames.Infiltrators} Reputation base reward <br />+{f(mults.infiltration_base_rep_increase - 1)} Infiltration {FactionNames.Infiltrators} Reputation base
reward
</> </>
); );
if (mults.infiltration_rep_mult) if (mults.infiltration_rep_mult)
desc = ( desc = (
<> <>
{desc} {desc}
<br />+{f((mults.infiltration_rep_mult - 1) * 100)}% Infiltration {FactionNames.Infiltrators} Reputation reward <br />+{f(mults.infiltration_rep_mult - 1)} Infiltration {FactionNames.Infiltrators} Reputation reward
</> </>
); );
if (mults.infiltration_trade_mult) if (mults.infiltration_trade_mult)
desc = ( desc = (
<> <>
{desc} {desc}
<br />+{f((mults.infiltration_trade_mult - 1) * 100)}% Infiltration Reputation for trading information <br />+{f(mults.infiltration_trade_mult - 1)} Infiltration Reputation for trading information
</> </>
); );
if (mults.infiltration_sell_mult) if (mults.infiltration_sell_mult)
desc = ( desc = (
<> <>
{desc} {desc}
<br />+{f((mults.infiltration_sell_mult - 1) * 100)}% Infiltration cash reward for selling information <br />+{f(mults.infiltration_sell_mult - 1)} Infiltration cash reward for selling information
</> </>
); );
if (mults.infiltration_timer_mult) if (mults.infiltration_timer_mult)
desc = ( desc = (
<> <>
{desc} {desc}
<br />+{f((mults.infiltration_timer_mult - 1) * 100)}% Infiltration time per minigame <br />+{f(mults.infiltration_timer_mult - 1)} Infiltration time per minigame
</> </>
); );
if (mults.infiltration_health_reduction_mult) if (mults.infiltration_health_reduction_mult)
desc = ( desc = (
<> <>
{desc} {desc}
<br />-{f((mults.infiltration_health_reduction_mult - 1) * 100)}% Infiltration health lost per failed minigame <br />
{f(mults.infiltration_health_reduction_mult - 1)} Infiltration health lost per failed minigame
</> </>
); );

@ -163,13 +163,13 @@ export const infiltratorsOtherAugmentations = [
export const infiltratorsMiniGameAugmentations = [ export const infiltratorsMiniGameAugmentations = [
new Augmentation({ new Augmentation({
name: AugmentationNames.BagOfSand, name: AugmentationNames.PythiasBrainStem,
repCost: 1e2, repCost: 1e2,
moneyCost: 1e6, moneyCost: 1e6,
info: info:
"You watched a bittube video about sword fighting, " + "You found an old jar apparently containing the brain stem of one of the most famous " +
"it suggested the best way to win a sword fight was to play dirty " + "fortune tellers in the world, installing this augmentation will apparently connect the synapses reactivating " +
"so you filled a bag full of sand from outside your house.", "the magic this man once shared with the world ",
stats: ( stats: (
<>This augmentation makes the Slash minigame easier by showing you via an indictor when the slash in coming.</> <>This augmentation makes the Slash minigame easier by showing you via an indictor when the slash in coming.</>
), ),
@ -187,34 +187,32 @@ export const infiltratorsMiniGameAugmentations = [
factions: [FactionNames.Infiltrators], factions: [FactionNames.Infiltrators],
}), }),
new Augmentation({ new Augmentation({
name: AugmentationNames.ReverseDictionary, name: AugmentationNames.RearViewMirrorShoulderAttachment,
repCost: 1e2, repCost: 1e2,
moneyCost: 1e6, moneyCost: 1e6,
info: info: "Never again will you need to turn your head to see whats behind you.",
"An ancient dictionary with a thick layer of dust it looks like a different language, " +
"as you examine it further you realise that its actually just a normal dictionary but the words are " +
"written backwards if only you could take the book home, you think it would become like a second language.",
stats: <>This augmentation makes the Backwards minigame easier by making the words no longer backwards.</>, stats: <>This augmentation makes the Backwards minigame easier by making the words no longer backwards.</>,
factions: [FactionNames.Infiltrators], factions: [FactionNames.Infiltrators],
}), }),
new Augmentation({ new Augmentation({
name: AugmentationNames.AmuletOfPersuasion, name: AugmentationNames.KyberCrystalInjection,
repCost: 1e2, repCost: 1e2,
moneyCost: 1e6, moneyCost: 1e6,
info: info:
"A fancy looking amulet that looks like something an Egyptian goddess would wear, " + "A weird looking shiny crystal which is crushed down and turned into a thick syrup, " +
"you hear faint whispers that are trying to convince you to do things you wouldn't normally do, " + "most people think its all homeopathic but there are a few that believe when injected people will " +
"upon touching it the voices stop how strange.", "believe what you say with one wave of the hand ",
stats: <>This augmentation makes the Bribe minigame easier by indicating the incorrect paths.</>, stats: <>This augmentation makes the Bribe minigame easier by indicating the incorrect paths.</>,
factions: [FactionNames.Infiltrators], factions: [FactionNames.Infiltrators],
}), }),
new Augmentation({ new Augmentation({
name: AugmentationNames.LameSharkRepository, name: AugmentationNames.DyslexiaModule,
repCost: 1e2, repCost: 1e2,
moneyCost: 1e6, moneyCost: 1e6,
info: info:
"You stumble across an old opensource repository for a weird defunct version of LameShark, " + "A module initially developed to reverse the disability of dyslexia, But during human trials it was found " +
"upon studying the source code it seems to just have a bunch of arrow key cheat codes. ", "to actually cause dyslexia, despite the fact scientists decided to sell it anyway. Who would want " +
"to install something like that... i guess it has the added benefit of qualifying for a disability card",
stats: <>This augmentation makes the Cheat Code minigame easier by allowing the opposite character.</>, stats: <>This augmentation makes the Cheat Code minigame easier by allowing the opposite character.</>,
factions: [FactionNames.Infiltrators], factions: [FactionNames.Infiltrators],
}), }),
@ -229,11 +227,11 @@ export const infiltratorsMiniGameAugmentations = [
factions: [FactionNames.Infiltrators], factions: [FactionNames.Infiltrators],
}), }),
new Augmentation({ new Augmentation({
name: AugmentationNames.MineDetector, name: AugmentationNames.MineDetectionArmAttachment,
repCost: 1e2, repCost: 1e2,
moneyCost: 1e6, moneyCost: 1e6,
info: info:
"You stumble across an old mine detector at an army surplus store, " + "You stumble across an old mine detection arm attachment at an army surplus store, " +
"on the side is inscribed 'X(' i wonder what happened to the original owner, " + "on the side is inscribed 'X(' i wonder what happened to the original owner, " +
"its a bit beaten up but looks like it should still do the job.", "its a bit beaten up but looks like it should still do the job.",
stats: ( stats: (
@ -245,12 +243,12 @@ export const infiltratorsMiniGameAugmentations = [
factions: [FactionNames.Infiltrators], factions: [FactionNames.Infiltrators],
}), }),
new Augmentation({ new Augmentation({
name: AugmentationNames.WireCuttingManual, name: AugmentationNames.SecurityWireContacts,
repCost: 1e2, repCost: 1e2,
moneyCost: 1e6, moneyCost: 1e6,
info: info:
"You found an old wire cutting for dummies book in the local library, " + "This augment is a set of contacts for your eyes when installed allows for the user to see which" +
"how hard can it be to cut wires, right?", "wires are conducting security related information",
stats: <>This augmentation makes the Wire Cutting minigame easier by indicating the incorrect wires.</>, stats: <>This augmentation makes the Wire Cutting minigame easier by indicating the incorrect wires.</>,
factions: [FactionNames.Infiltrators], factions: [FactionNames.Infiltrators],
}), }),

@ -114,14 +114,14 @@ export enum AugmentationNames {
StaneksGift3 = "Stanek's Gift - Serenity", StaneksGift3 = "Stanek's Gift - Serenity",
// Infiltrators MiniGames // Infiltrators MiniGames
BagOfSand = "A Bag of Sand", PythiasBrainStem = "Pythia's Brain Stem",
IntellisenseModule = "Intellisense Module", IntellisenseModule = "Intellisense Module",
ReverseDictionary = "Reverse Dictionary", DyslexiaModule = "Dyslexia Module",
AmuletOfPersuasion = "Amulet of Persuasian", KyberCrystalInjection = "Kyber Crystal Injection",
LameSharkRepository = "Lame Shark Repository", RearViewMirrorShoulderAttachment = "Rear View Mirror Shoulder Attachment",
CyberDecoder = "Cyber Decoder", CyberDecoder = "Cyber Decoder",
MineDetector = "Mine Detector", MineDetectionArmAttachment = "Mine Detection Arm Attachment",
WireCuttingManual = "Wire Cutting Manual", SecurityWireContacts = "Security Wire Contacts",
// Infiltrators general // Infiltrators general
BionicFingers = "Bionic Fingers", BionicFingers = "Bionic Fingers",
CorporationManagementImplant = "Corporation Management Implant", CorporationManagementImplant = "Corporation Management Implant",

@ -121,33 +121,33 @@ export function PlayerMultipliers(): React.ReactElement {
<MultiplierTable <MultiplierTable
rows={[ rows={[
[ [
"Infiltrator Rep reward multiplier", "Infiltrator Rep reward",
Player.infiltration_rep_mult, Player.infiltration_rep_mult,
Player.infiltration_rep_mult * mults.infiltration_rep_mult, Player.infiltration_rep_mult * mults.infiltration_rep_mult,
1, 1,
], ],
[ [
"Infiltration sell multiplier", "Infiltration sell",
Player.infiltration_sell_mult, Player.infiltration_sell_mult,
Player.infiltration_sell_mult * mults.infiltration_sell_mult, Player.infiltration_sell_mult * mults.infiltration_sell_mult,
1, 1,
], ],
[ [
"Infiltration trade multiplier", "Infiltration trade",
Player.infiltration_trade_mult, Player.infiltration_trade_mult,
Player.infiltration_trade_mult * mults.infiltration_trade_mult, Player.infiltration_trade_mult * mults.infiltration_trade_mult,
1, 1,
], ],
[ [
"Infiltration minigame timer multiplier", "Infiltration minigame timer",
Player.infiltration_timer_mult, Player.infiltration_timer_mult,
Player.infiltration_timer_mult * mults.infiltration_timer_mult, Player.infiltration_timer_mult * mults.infiltration_timer_mult,
1, 1,
], ],
[ [
"Infiltration minigame health reduction multiplier", "Infiltration minigame health reduction",
Player.infiltration_health_reduction_mult, Player.infiltration_health_reduction_mult,
Player.infiltration_health_reduction_mult * mults.infiltration_health_reduction_mult, -1 * (1 - Player.infiltration_health_reduction_mult * mults.infiltration_health_reduction_mult),
1, 1,
], ],
]} ]}

@ -85,8 +85,6 @@ export class FactionInfo {
} }
} }
/** /**
* A map of all factions and associated info to them. * A map of all factions and associated info to them.
*/ */
@ -143,8 +141,9 @@ export const FactionInfos: IMap<FactionInfo> = {
[FactionNames.ECorp]: new FactionInfo( [FactionNames.ECorp]: new FactionInfo(
( (
<> <>
{FactionNames.ECorp}'s mission is simple: to connect the world of today with the technology of tomorrow. With our wide range of {FactionNames.ECorp}'s mission is simple: to connect the world of today with the technology of tomorrow. With
Internet-related software and commercial hardware, {FactionNames.ECorp} makes the world's information universally accessible. our wide range of Internet-related software and commercial hardware, {FactionNames.ECorp} makes the world's
information universally accessible.
</> </>
), ),
[], [],
@ -159,12 +158,13 @@ export const FactionInfos: IMap<FactionInfo> = {
[FactionNames.MegaCorp]: new FactionInfo( [FactionNames.MegaCorp]: new FactionInfo(
( (
<> <>
{FactionNames.MegaCorp} does what no other dares to do. We imagine. We create. We invent. We create what others have never even {FactionNames.MegaCorp} does what no other dares to do. We imagine. We create. We invent. We create what others
dreamed of. Our work fills the world's needs for food, water, power, and transportation on an unprecedented have never even dreamed of. Our work fills the world's needs for food, water, power, and transportation on an
scale, in ways that no other company can. unprecedented scale, in ways that no other company can.
<br /> <br />
<br /> <br />
In our labs and factories and on the ground with customers, {FactionNames.MegaCorp} is ushering in a new era for the world. In our labs and factories and on the ground with customers, {FactionNames.MegaCorp} is ushering in a new era for
the world.
</> </>
), ),
[], [],
@ -194,7 +194,16 @@ export const FactionInfos: IMap<FactionInfo> = {
true, true,
), ),
[FactionNames.BladeIndustries]: new FactionInfo(<>Augmentation is Salvation.</>, [], true, true, true, true, false, true), [FactionNames.BladeIndustries]: new FactionInfo(
<>Augmentation is Salvation.</>,
[],
true,
true,
true,
true,
false,
true,
),
[FactionNames.NWO]: new FactionInfo( [FactionNames.NWO]: new FactionInfo(
( (
@ -486,12 +495,39 @@ export const FactionInfos: IMap<FactionInfo> = {
false, false,
), ),
[FactionNames.SlumSnakes]: new FactionInfo(<>{FactionNames.SlumSnakes} rule!</>, [], false, false, true, true, false, false), [FactionNames.SlumSnakes]: new FactionInfo(
<>{FactionNames.SlumSnakes} rule!</>,
[],
false,
false,
true,
true,
false,
false,
),
// Earlygame factions - factions the player will prestige with early on that don't belong in other categories. // Earlygame factions - factions the player will prestige with early on that don't belong in other categories.
[FactionNames.Netburners]: new FactionInfo(<>{"~~//*>H4CK||3T 8URN3R5**>?>\\~~"}</>, [], true, true, false, false, false, false), [FactionNames.Netburners]: new FactionInfo(
<>{"~~//*>H4CK||3T 8URN3R5**>?>\\~~"}</>,
[],
true,
true,
false,
false,
false,
false,
),
[FactionNames.TianDiHui]: new FactionInfo(<>Obey Heaven and work righteously.</>, [], true, true, false, true, false, false), [FactionNames.TianDiHui]: new FactionInfo(
<>Obey Heaven and work righteously.</>,
[],
true,
true,
false,
true,
false,
false,
),
[FactionNames.CyberSec]: new FactionInfo( [FactionNames.CyberSec]: new FactionInfo(
( (
@ -517,7 +553,8 @@ export const FactionInfos: IMap<FactionInfo> = {
It's too bad they won't live. But then again, who does? It's too bad they won't live. But then again, who does?
<br /> <br />
<br /> <br />
Note that for this faction, reputation can only be gained through {FactionNames.Bladeburners} actions. Completing {FactionNames.Bladeburners} Note that for this faction, reputation can only be gained through {FactionNames.Bladeburners} actions.
Completing {FactionNames.Bladeburners}
contracts/operations will increase your reputation. contracts/operations will increase your reputation.
</> </>
), ),
@ -572,88 +609,45 @@ export const FactionInfos: IMap<FactionInfo> = {
true, true,
true, true,
), ),
// prettier-ignore
[FactionNames.Infiltrators]: new FactionInfo(<> [FactionNames.Infiltrators]: new FactionInfo(<>
{". ;<<;. '>><'...<<<' I+<l .>>>: .'<i<. I~~!' `l<!+jYJJCJJJJJLJJLc{ii<! .'><i' .;<<~ .l~>: `<>>. .:<i!.. <<~I ..><>`..;<>> ' !<<;. `>~<' ,<>l...!i>; . +<<' "}<br /><br /> {".,=,.==.²=.'=,.=░.==.:=,,▄▓▓▓▓▓▓▓▓▓╬░.==.²!.,=,.=⌐.==.!=,.=,.==.²=.,=,.==.²=.!=,"}<br />
{"llI,^^'I!l^^^Iil:^^^;l!,^^:ll!,^^:!!:^^'!!l:'^'i>;{UUJCJUCCJJJJJUUJCJUCOY<IlI'^^;!l,^^,!!l,^`;!l:^^^:!!:^^'llI'`^,I!l``'Il!;^^'l!!,^^:!!I,^^llI,^^^;!l,^^,!lI^`^:l"}<br /><br /> {"'¡»⌐^»∩^:»^:=^`=∩':+]▄▄▓▓▓▓▓▓▓▓▓▓▓▓▓▒^»∩^»=^:»^²»⌐^»∩^:=^`»^`»∩^:»^¡»^`»⌐'»÷'\»'"}<br />
{"><<, .'>~i' .l><i..'>><' .^<<>' ':<<I...<<~' :fUJCLLQ0QCCCJJJJJCCJUUUJCCv><l. 'i>>,'..<>>^ .:<>l '.><>: '^!<~`..,<>>.''!>>: ..<i+^. ,><!...i><;.'`>>>^'.,>>_...I<"}<br /><br /> {"░░_|░_'░⌐_░∩`|▒▄▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓░░`,░``░∩`»░_|░¬`░⌐_░░`'PHYZ|C@L`»░_!░⌐`░░_|"}<br />
{"..'I>iI..'i<>' .^>>i^..l>i;'. >><,'.`<<i.^>(YLCCLLQ0QQLCCJJJUCLJJJJCCCLZq?'.`i<>' ;<>!. 'Ii>'.''i>>`..:<<I..'i>i,'.'>>!' .:>~!. l<<;. ^li>...'i<l' 'l<>, .^>>i'."}<br /><br /> {".,=,.»\.²=,,[▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓█▓▒╦╔░¡_²².,=,,=:.==_!²,,=,_==,W@Z,=,,=\.!=./²,"}<br />
{"`'^,ll;^`';II''^,ll;''^;ll;^^'i>l;l>}uYCCJJCLLLCCCJJJCCCJJJJJJC0LCUUCLwZqI``'lII:'':!l;^`';!!,'^'lll'^',II:'^^lI;:^`'!lI'`':;lI'^';li;`^'Ii!'^';l;I''`,I;'^^'!!;:'"}<br /><br /> {"'`»^^»∩':»')▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓████▒▐▒Ü▒^»=^¡»^^»⌐'»∩':»^`»^'=^:=^H3R3^»∩^:»':=^"}<br />
{">i+I ^,+ii.'.I>++'.^<ii,` `>!+nLUJLCJJCJXCLLLJJCCCCCCUJJJCJCCJCZZOQQOmmmm'~>i ''>>>, . <>i' .;!<> '.-<iI''^>i_''.I<iI' I+i^ '~i>'' ;i<I 'ii~I ^^<<i'..;><_ '!>"}<br /><br /> {"░∩`:░_'░⌐`░▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓█████ÑÜP╩Ü╙░`_░∩`|░`:░_`░∩`|∩`:░_`░⌐_░░`|░`,░⌐`░∩`»"}<br />
{" .`;><l`.'!<>'.',>>!'` i>>:lXCJJCCCJJJJJJJJJJJJJJJJJJJJJJJCCCJLZmmmmw0q_<>.'`i_i`..;<<!' ';i>'.''i>>'. ,>>;..^i>>;`.'>il^..,><i'..!<>;'''i<~..`:i>i^..I>>,.''<>i,'"}<br /><br /> {".,=,,==_²=,▀▓▓▓▓▓▓▓▓▓▓▓▓▓▓██▌Ñ▓██ÑÜÜ▒Ü▒░_»=,,=,.==_»=,!=,,=,_==,»░,,=,,==_»=,!=,"}<br />
{" .';><l' 'i<<^ .^<<i^' I~icJUCJCJJCJJJJJJJJJJJJJJJJJJJJJJJCJJQOmwqwOph+>[11_li~>`. I<<i' .I><' '^i><^. :<<I. '>><:' .<ii^. :<<i. !<<;..^><~ .',><i`..l><: .`<<>'."}<br /><br /> {"'`=^^=∩^:»^:»└'µ╫█████████╬▓▓▓██Ññ▒NÜÜ▒╠^»=':=^^=∩^»=^:=^`=⌐^»»':»`¡»^`=∩^:=^\»'"}<br />
{">>~; ',+!i.'.I><~ ..!i>''rCUJJJJJJJJJJJCCJJJJJJJJJJJJCJJJJUQ0mpZZZk8%B8t}]-?]1]'<i>, . ~~>` ;i>>. +>>; .^>i+'. ;~<i.' l>i' .'+i~`. :>~!. .ii<l '`<>>''.,<<+ .l<"}<br /><br /> {"░░`:░_,░⌐`=∩`|░_¡█╬▀███▓╬╬▀▓▓▀Ñ▒ÄÜ╟ñÜÜ╠D░¬_░░_|=_!░_`░⌐`=∩_:░_'░⌐_░░`!=`┌░__░∩_»"}<br />
{";:',:,:,;:,,,,;:,:,,,IIlJLUUCCCCJJJJJJJJJLLLLLQQQQQQQ00OZmwZZQwo%@@@B@W{?-tf||_{il;,:::;;::;::;;,,,,,;;',,,::,;,,:,;I,;;;,I:,::;;,,;;;;;::;:';;:,'::I,'',;:::::,:;"}<br /><br /> {".,=,.==.!=,,=,.=░╠████Ñ▒▒ÄÜñÜÜÖ╠╩Ü║Üû╠╙».»░.:=,.=⌐.==.!=,,=,.==.!=.,=,_==.»=.!=,"}<br />
{" ..;>i;.'^i>>,'.'><i' ^YUJJCJUUJJCC00ZmwwmmmmmmmmmmmmZmmmwmmZwW@@@@$@@o[_[n|1][?{. :>>i. .I><,. ^><i...:<<I...!<>:. .ii>'..I>>l l><; ^!<~^. '>iI' `l<<: .'i<>'."}<br /><br /> {"^`»^`»∩`:»'\»^^»⌐^╚╬▒Ü▒▒▒ÜÜ▒╚╩▒▒RÖÜ╠╠▒∩∩';╓';»^'»⌐`»»^:»^^»⌐^»∩':»^¡»''»∩`:»^\»^"}<br />
{"><~;..^><!' .li<!'.'!<jZ0CUJCJCQOZZmmmmmmZZmmwmZmwmZZpwJJQwQ*BB%B@8B%Y??-?(xf}---<<,' <>>^.':>!l ' i<>I.'`l~+^..:<><.'.l!i, .~>~^. '>>l...!ii:.''i>i^' 'i>_'..l<"}<br /><br /> {"░░ :░ '░⌐_░░_|░`!░`╙▒▒╠╠ÜÉ▒╚Ö╠╠╠╠╟╬╠╠╠╬╬▓▓█▓▓▓▓▓▌▄▒,,░⌐_|░_:░`,░⌐`░░ |░ '░_`░∩_|"}<br />
{"<<!^ ^!<>' .l~iI..`IiwZZ0Q00mmmmmmmmmmZZZZmmmmZZ0LCJYU0Zq*@@B%@@B%@L???-_-??][,!-~, .^<<>,. ;~<I. ;~+; ^>>i` 'i~> ^!<~l' '>~+' .;<<i^ ><>,. .l+<' ,~<i. :>"}<br /><br /> {".,=,.=».!=,,=,.=░.==.└╙╙╜╚╩╩╙╙Ü7┘,░╚╬╠╬▓████▓▓▓▓▓█▓▓▓▓▓▓▓▓▓▓▒==,²».,»,,=░.!=.!=,"}<br />
{". I~<I .<<~^ .>!i^^YZZZZZZmZOOZmZZZZZZZO0LCJJJUJCLQm#@WQjjp@BB@%C?-[-_-?-|1~>^ .I~<< l+<: `<>i' .,<i!.. >><I ..><>` .I<>! ' l><I. '>~<' ,<>l. .li>; . ~<<' "}<br /><br /> {"'^»⌐^»∩^:÷^\»^^»⌐'»»^:»^^»⌐^»∩^:»'`║██████████████▓████████▓▓m»'»»^¡»^^»∩^»»^\»^"}<br />
{"!lI,^`'l!!^^^;!I;^^^Ili(0dOmOmZwm0mZQJUCQJJJUUJLLOpo&8@&m?<~<(%@B&X]?]-}({-_]{t>IIl:`^'lil''^Iil;'^';l!:'''!ll'^`:Il!^^';ll;`^,I!!'^^:li;^^`!!l;^`^;!;,,^:ill'^^;;"}<br /><br /> {"░∩`!░_'░⌐`░░`|░,;░__░⌐`░░`|░-'░⌐`░µ▓█████████████▓▓▓▓▀▀╫▓███▓▌`░⌐_░░`|░`!░⌐`░∩`|"}<br />
{"<>>, .'><!'..I><! .'>>~'..,+{1i;;W%obqm0C00OwkaW%B@@&zuqBb?>(*B%Mt}_?_jf-}-]--ft-~>^. '<>!' I>>l.. i~>; '>>>' ':>~i..'l~>'..`><i`. ;>>I' <>>;.'`i~<' .;><i. ';<"}<br /><br /> {"_,=,_²».:=:▒▒╠▒▒╠╠▒▒,:=,,=⌐_»░_:=,▓██████████████▓▓▓▓▒!=,███▓▓░_»=_,=,_=░_!░.'=,"}<br />
{" . :~!l .'>>>'...~i!^''!>>I.. ><~fB8B@@@@@@@BBB@B@BO|[[}|U*@BB8C{}-[-]U--]--?-tt}..I>~+. '!<>'. `>><. .,<<l.' >>>,..`i><' 'I+>l.. li+I. ^><> . '<i>. 'I<<, . <>i` "}<br /><br /> {"▒╙R▓▓▄▄╣▓▓▓▓▓▓▓▓▓╬╬╠▒╠▄▄▄µ∩'»=]▄▄▓████Ñ»╙▀███████▓▓▓▓Ñ:»^╫█▓▓▓H`:='`=^`=∩`»=`\=^"}<br />
{"^^^:II:^'';:;''^^;I;'^`:II;^^::lI;b&M&%BW%%@&B&@88W&&%@@BB@&oz/?-[+?uZ]-?--?-(jt_:':;;I'^^;lI:'''III^^^,II;'^`,II,^^^;;I,'';I;;^,';;;:'^'III^^^'III''^;II:'^';ll,^"}<br /><br /> {"Ü⌐»╙▓▓▓▓▓▓╬▌╠╬▒╬╬╬╠╠Ö╣▓▓▓▓▓▓▓▓██▓███▀U``░``╫███████▓▓Ñ⌐_=╫█▓▓▓Ñ░_`░░_|░_┌░``░░_»"}<br />
{"i<~, '>i!. Iii< .l>>' .`<<> ;(W?+>{c8B}1W#t_+?~][1tvt})-??]xY]<!1_?-???}ff{~i<'.. >~<` ;<>! <>>: ^ii<'. :<<i.'.l>>^ ''+>~`. ,><i. .ii>l ^>l!^` 'i>_ l~"}<br /><br /> {"|░::╟▓▓▀╚╙░/=,,╙░░╙░,⌡╩▀▓█████████▓╙,,==_²²╫███████▓▓░!=,╙╬╩▒▒▒╦╦░,,=,_=\.²=.!=,"}<br />
{"^' ;<il..'>><^..'>>!^'';iil...!>>;'pb-li}Za@8)}_?]]?_}1_??-?--cc))?<_jJ_]~-[fft!'. I>i>'..l>i'.'`><<.'':><l.. i!<:.'^i!>^. ;<ii . !>>;''`>>i^`'^iii...!i>;.. <>>^ "}<br /><br /> {"^'ܵÅÑ»`:='\=^^»⌐^»=':÷^^=^┴╚╢▀▀▀╙`»^'=∩`:»║██████▓▓▌^:»'╔╠▒▒▒▒▒▒▒╠M≡╦`»⌐'»=^╒»`"}<br />
{" .`I<<!` 'i~<^ .'~~i'' l>i;' l<<:.]@BBBB%@8z|({{1(tt1-??-?]}}?]t{-]!iC-_?}t/?<i^ ;~<I 'I><, `'><~^. ,~_l..`<<<;`.'<i!^ ,>~! .!<>' 'i<<'..,>+i' .!~+: .^<<i''"}<br /><br /> {"░░_|░_'░⌐`░░_»░`!░¬`░▄▄▄▌▄▄▄▄▄▄╥,░░_:░`,░,╫███████▓▓Ü░⌐`=╠▒▒▒▒▒▒╠╠╩░`»╝╦:░_`░∩`»"}<br />
{"<<i' '<+i. ;~~!..`l<<'..'>>i. I<+p%hdQzf|[_/tfjt{?__--_?X]>+1(i~+1J(-t?t1i..'><~; .i<i'..;<>l'..!<+: `><<^..:><i ..l~>' '<++^ ,><!' .!<<I. ^i<<` ,<<>' .;>"}<br /><br /> {"_,»,_!\_!=,,=,_»░_²1████████████████▓▄▓▓▄▓█████▓▓▓▓Ñ»_!=,7╝╬╚╝╩╩░ù,,»,,╫▒,²»_!=,"}<br />
{",^':;I;'^,III;^^:;;:,',;II;''::II''''])t(]_[_-__??--?-??[t}?(]<~iu1u1-])|[tf+;;l:^,:II:'',,I;''^;:I;;'^,I,;,^,:;:;',:;I:'^,,;;;,'':lI:,'':I:,',;;I;:'^:I;;,',:;;:^"}<br /><br /> {"'¡»^^»∩^:÷^\»^^»⌐^»=████████████████████████████▓▓Ñ»∩':»^^»╬^÷∩^:»^¡÷^║╣ÜR≈»^\÷^"}<br />
{". I<>;' `i<<'..^i<>^ I~<; .>i~,..:{/(?]??vdmOc|{1)jt_>~<!YJOU?_-[]txjtt//|/{](fnzUJLzvjf/}!^'`I>+. .:~ii.`.i><I. '!ii'..I><!.. li>l. 'i~<' ,>>l' 'l><I.. <><, "}<br /><br /> {"░░`|░¬'░⌐`░░`|░`:░``╫███████▀▀██████████████████▓▀░¬`░⌐`|░`╠╣╣░▒░_▒╥║╬╣▒╙Ü^=░░`|"}<br />
{"i<>' .,i>l. ;>>!' .l~>, ,~>>.' I<il.+n1_}![]?-?]]?-[--?<_}<???f)tnnnj|/ftjjf|/fwQCQLCLOZLUCLJYZdf,+<~l `^>!<`. ^<<i`'.Iii^. `>>_^'.'i<i' .:i<: .^i>!` ''>>+. ;~"}<br /><br /> {"_,=,_»░_²=,,=,_=░_==|██████░==_╙╩▀██████████████Ñ⌐_!=_:=,_░╟%╩╬╟╣╣╣╬Ñ╣Φ╬»_²=┐╟╣╓"}<br />
{"i!l,`'^l>!` .Ii!;''^;li''^,l!i'.`:><;`':~/j/trftf||)[?_--]{(|)ttjt//t/ttfjt/ft//JmZwpddqOLCCJUJQQQQQQLc(_lII;,''^:llI``.IIi:'''l<i,'',ilI,'.I!iI` `I>!'.':liI^`^,i"}<br /><br /> {"`¡»^^»∩^»»^\»^^»⌐^»»[█████▓^»∩'»:^)▓██████████▀┴=⌐`»='»»^`»╠^»╠╬╠n╬╬▒^[╠∩^»»^:=^"}<br />
{".'.:>!I .`i<>^' 'i>!`..Ii>I.. >~>: ,>~>..^l<?(ff//ft//ttttjf|_~<<l`''}(/|f/fj)UmwmqpppqOJUUJCQ00Q0m0JUUYJUUJ0Z0OZZO0OLYJn:;ii!. .l>+; ^!<>'. '>>!' I+<,. .>>>' "}<br /><br /> {"░∩`:░_'░⌐`░∩_»░_:░¬_▐██████▒``░⌐`▄█████████▓Ñ`»░`!░_`░⌐_|∩|╬░``╠⌐_░╠_»░╚Ü░_`░⌐`|"}<br />
{"i!!,'',i!I`.';!>l`'`I!i''`'!!i^'';<<I`'`!i!;`''i!;^,I+-?~'^`;ii,`''!>!`'zXff/nqwwmqpdpqqmO0QJCQ00OqwZZmZQCCCQ0OQ00QLCJCCJCc;`.'iii^'`;iiI^`'l!i;'.`I!i,'.:>i!'..I>"}<br /><br /> {",,=,,==_²=.,=,,=░,==╫██████▒==,²▓███████▓╨░,,=,_=⌐,=»,!=,,=╠░»=╬==.╠Ü,_=╢,!=,!=,"}<br />
{">><: '>>i' .l>>! .'!i<' .^<~~'..;<<I..'~<<,'.'<ii` l>>!...i>>,' ^i<> ;OOmwZmmwqqpppppwZZZZZmqddpdqmZZmmmZmpdppbpOqZZmLJJJ? .'<>~' ,><i...iiiI. 'ii>^'.;><>. .I<"}<br /><br /> {"^¡÷^^»∩^:='\»^^»⌐^»»███████^»»^╫██████▄┐':»':=^^»⌐`»»^\=^░╬Ü'»┐╬░»''╢^^»∩Φ░»^\»^"}<br />
{" . :~+I .'<<~^ .<<>'' I~>! <>>, '>>~. ;><> ..i~~' .`~>~'. :>+l !}qwwwmwqqpppddpmZZZZZZmpddpppwZmwmmmwpdppwqmOwwwOLJJC>>i. !>>; '<~< ^<<i '.ii<:. ~~<^ "}<br /><br /> {"░=`!░`¡░⌐`░░`|░`:░,███████▓░_`▓███████▌'░¬`░░`|░ ¡░``░⌐`|╝╨|░``╬H_░û╬▒░`:╟╬^░∩_»"}<br />
{",:I;,,;I,:':,;:;l,:,I:::''^;::`,,,,,:,,`:,:'^,,::I,,,l;::':':,:,:,,I;:'zwpdkdddpppbqmZZmZZZZZZwpqwqwmOZZZmmwpbdmLZmZZOZw0CLL(^,,:l,,`'',:^',',;;,,:I,:';,,:;!,,';I"}<br /><br /> {",_=,,»»_!»,,░╓▄▄▓▓█████████,=»,╙▀███████▌▄».,=,_=⌐_»»_²=,,=,,²=╚ÑÜ,,╚Ñ_=»_!=.!»_"}<br />
{">>>, .,>i!.`.I><<' .i>!' ^i+>;::>-<;'..<i<, .^><>' .i>il.' li~;'.,l<!tpwwqmqqqqqwmZZZZmmZZmwpppdpZ0QCUUJUL}<>.'U0pmmpdpdQ0OO..<<+'' '>>l...i<~I..'>ii^^ ,<<~'. I+"}<br /><br /> {"^^»^^»∩^:Φ███████████████▌╜^»»':»^¡╬▓██████▄░»^^»⌐'»»':»^^»''»»^»»^¡»^^»⌐':»'\»^"}<br />
{"'.`I><l. ^<<<: `i<l`.'l><_{1}{11)1(){_<'.';><l. `l>>, '>><^ .:!<;..)qZZZwqmmmZZZZZZZZZZmwpppqqddpmLULLUCU/ `i><,.QppdpdQQQZ}> . I<<I..'!<>. .:i>!`..l<~I '!>i:."}<br /><br /> {"░∩`:░`'░⌐╨████████████████:░``░⌐`░░`|░▀██████▓▄░`:░_`░░`»░`:░``░⌐`░░`|░`,░⌐`░░`|"}<br />
{".`^:!I;^'`Il!^^`'l>l^_(11{{||{)1||ff/1}{1'',lll`^`;i!'^^`!il''`:lll^-0qZOwOOmmZZZZZZZZZmqpddpppddmCJOmLJJCUQ''!!iI`tqpdpdQQ0QrI`.`II!:``^lIi'``'!il'''Il!,^^`l!i^."}<br /><br /> {"_,=,,==_!=,,=,_»=_==_²ù││ù,_==_!=,,=,,=░████████▄░_»»_!=,_=░_==_»»_,=,,=░_»=,'»,"}<br />
{"i_)+:'^ii!. .,i!l'i-tXJYYzXYXYYYCn/t/tt({]<>' ^><>^ !<>l '.Ii~;.``tZmpqwmZZmqO;)CwmmqdpddddddpmmZQQLCCCJJOm~<'..I>}bwmmOUJJLt.<>+^. ,><i. .!><; `><>^..;<>~ I~"}<br /><br /> {"^¡»^^»∩^:=^\=^^»⌐^»»^:»^^=^^»∩^:=^`='^;▄▓████████▌^»»^:=^`»⌐^»»^»»^¡»^^»∩^:=^\»^"}<br />
{"}>!,1zLJQQn|/zCUYzYYXUJUUUCQCCJCLQJrjft|11[{X0|~,^l<>'''^>!~`,`:i+cCmppddpwmmxlI,. ~ddpdddppqwmZmwmQCUJLQJ0q;'!l!:.:dmmmCJJUJz!``.Iii,'.`lii..',i<l^'`Iii:'^^>>>,."}<br /><br /> {"░∩`!=_'░⌐`░∩`|░`!░``░⌐`|░`|░`'░⌐`░µ▄▓███████████▄¡░_`░⌐`|░`!░_`░⌐`░∩`|░_¡░⌐`░░`|"}<br />
{"{I,';:/CCJ000CYYYCLJCCLL|]xJQt)X0LCrftfft[}[zJUUQOO0O0Qzjt)])0mmLXQmOwppppkbIi+l' ,l<vbqwmZZmmZmmZZqp0L00Ow' <~~: OZmOUJCQLC~ ..l>>; `><~' ,>!i. .lli,' .<>>^ "}<br /><br /> {"################################################################################"}<br /><br />
{"(I,',:'/UQUQCCCCCQQXYC0j{)vO/})xr|(ftftt/]}[LmZJLQQQQLJJJJUJLmppwZOZmm0mZd(lI..'!+~' (mZqZOZmmwqqwppwOQQ0O<~'..:<!zdqQLQZZC0<~>>^ ;!<l' .>i>;.'^i>i^ ,i>i'..I~"}<br /><br />
{"~<l'':^`vCLLLCCCCL0f|})x[)(/)1|/ftffft)1<<CmZZOmwqqwZLJJJJCL0wdppwZZmZwwv;l;;,:::':''::_ZqwwppdddbbddppmQQ0C:I,I:::'tbZCcrxjnY/;;;::,,;;,,:,,;II:::;;,:;:;III::;;:"}<br /><br />
{"'_>I:,,^;JQJJLLu[{~i';'I~<l . >~<l:,I~<<.' :?jJkqqpppmZmZZwmZwddqqmwZZQ?>I ^<>>' .'~><cqpqqqwmmmZZmmmwOUUL)'.<><,.'|m1|{11{}1}?+~-i~;..'>>>'' '<>> ..l>+;. _<>^ "}<br /><br />
{"i<(;;',:;YJQCc-i> 'l>~' ''<~<`. ;<<;..`<~i, .`ii-jCOmmOZmZmqpdpdpqq0{ . '+>!' 'i<>' .>fwOwmZZZZZZZZZZQUJL]>>`..,<i>:|[{{{{{{{{{11(+I~<l'.`>>i;..'i>>^. :<<<. .I>"}<br /><br />
{"i>l+-I,'iLU?'l>;i.'^;!>''^,!ii,'.:i>;'''!>>'..^>i!;''Ill<}vJOqdkkdw{ii''.:>>l^.`Iii'`''!xdqpmqqqqqqwww0CJCv<<i^'',<!i]f(}1{{{{{{1[1}}))xf<'.>il:`'`Iii'.':>>l`'`;l"}<br /><br />
{".. ^i~cJ1.!l<' .<<!' .I<_i' <!>:`''>i~.^.:i>!. '!+<''''>~+'``li<; '!~_I ,<!>''.:<~i]pppppqqqpdbpbmCQQZ) >>>,.lj({}11{11{{{11{}{)/|ll<cQi.,><! ' il<; . >>+' "}<br /><br />
{"><l'''^i>!`'^I~i'''^;>>'.':!>!;'':llI`^,!ll,`':!il,^`;i~l''.;<>'.^:I!>'.^;!>l,`';l!:^`jbqqqqqpdddpppw00OQOlIII`^',:}t{}{11{1111)1{1(/t/t>``,i[U-`'`;i>,`';<>:''`,l"}<br /><br />
{"i<<, .^>~!.' Ii>i' `Ii<'..'i<>' .:<<;. .il-zppMW8@%88&oaadpOYr)!. ^>~< ..,><!' 'i<>^'vZmZZZZZZZmmwwm000Qm<^~><'' l~///(|(1}{{1)(/tfft/?~l. '>i>rj'`i<i^. :iii' ;<"}<br /><br />
{"`. :>i;. '>><^. .><i' .;<<l '.<<>:..^><~Q$$$$$$$$$$$$$$$$$$$$$$$$B@$*0Qj]I..`>ii`'./qwOZmmZZZOZmZZmwLJC0xl!'. i><; irttfjtj||jtjtf[-?I'.`<~<''.,xfl'.`l~>I.. >>>^ "}<br /><br />
{"^^,;Il;,^';lI,^';llI,'^;l;,'^^:Il:'`,:l?%$$$$$$$$$$$$$$$$$$$$$$$@BB@$$@%B@B$Qw%%d(qppbZppqqmmmZOLLOmQCJc>I:'^,Ill;'^'[fj}^~|xt_}?;;li;^^';l!^'`!xz]^,^;,I,^':IlI:'"}<br /><br />
{"!><, .'><i.. l>>i. .!~>, ^<>>. .:><I^.`o$$$$$$$$$$$$$$$$$$$$$$$$@BB@@$B%@$BB@@@B&@BBB#bddpdpdpw0JUJUUC>'`^!><'. ;<<>` [)i<, .<~l^. :><!. >>)Ync[|}>``.'i>_. I~"}<br /><br />
{" .;~-!' `!_<, ,>~i'. !+<I' 'l~+: '~+l!$$@@B$$$$$$@$B$$B&%BBBB$$$$$$$$$$$$$$$$$@@@@@@@@%opqdpppOLJXU,,>_l. `i_>I' .>~-t'':+<!' `l~<'..^!>~.'ucfJl:u_|,<; '~~<;."}<br /><br />
{" . :<<I. `i<<^. `>~i^. l<<l' .>+<; .^i>!'X%%@$$$$$$$$B@$@%8W@%BB$$$$$$$$$$$$$$$$$$@@@@@@@@@@WbqppOLLJ_ ;<_l. .i><,...ii>f/<>>i>'. >+~; ^~i<'_trjYYYi!!)>l '+<<^ "}<br /><br />
{"<>+: `'~i!``'I!<~' '><i^' ^~<_ .',>>I` .>tBB$@B$$$$$@BB%@r(%B@@B@$$$$$$$$$$$$$$$$$@@@@@@B@@BBBWkmQ0w?i<I` ^>>+'. ;~<i'';/{c|vr^+i<.. I+~;.|vnuzX_'I[|~I<[>!~~. .l<"}<br /><br />
{"'',:IlI:,,;I;,,:;Il;:,,;I;:''':Il;:::II:'~*%$B@$$$$$@%j,^!l,,~Y&B@$8%@B@@%@B$$$$$$$$$$$$$$$$$BB8OQJ>',,;I;::,;III:,,:l;[+';/CffzvJX[{nunvcj|xY};/il,,,;lI:]t/>'!:,"}<br /><br />
{" ..:><I..`<<>'``'><!^..I>il. i>>:..'>ii.'p@@@$$$$$$B%o,`ii>' ';>|Q*BB8%B@B$$$$$$$$$$$$$$$$$$@@@8U>>. .'<!I'`'ii<:..'<ifYj/ru1uzujJujff|nYzzx{/XX~>` 'l<<;'luucY: "}<br /><br />
{"l!<: .'>>>.'.lii< .!<<,..'i>~ . ;<>I . <~p@BB$$$$$$@Li~i.` !i<: .,>i~)Za%$@$$$$$$$$$$$$@$$$$@%BJ ..!~i:`.^li>'. ,<<i `}iI!|`ix~+!)<~j_!_c~'ut{[}:`>ii^'.:>i>?]]j+"}<br /><br />
{"ilI,'.'!>l^.'IiiI'.^;!<''`,i>i'.`;><;`.^i>p$$@B$$$$$$j~<!..`lil,'.,i>~`|&@@$$$$$$$$$$$$@B8@8BBM{!.,`Ii!:'.'lil,.',!i>`',?/};';vzvn)I`nXYzc]'l~f{+`'l>i,'.:iiI`.`I>"}<br /><br />
{"...:>>,..^<<<,''.!<!^..IiiI`.^>ii' .^!i>''w%$@$$$$$$B%!``>>~'. '~~l. ,&B%@@$$$$$$$$$$$$$B&@$o>..`~i!.'';>il`'.l><I..'<!)f`':l~|1+<|<?+1-{X>~, '?t<!'..!>i;''.!+>` "}<br /><br />
{"l>>,'',!i!`''liil''`!<i,.''>i!''':!l;'`'!+h$$$@$$$$$B%#<!'^'l!!:^''lt%@$@$@$$$$$$$%%$B$%B#}^^:>il'''!ii:','l!>`'',>>i''j1!i,^`'+t-^'':>]t;''l>il}Y`l>!'`^,!!~.''I>"}<br /><br />
{"<>!' ^i+i' .I~<; 'I>~' ',><>^ ;~~I ^>1WBB@$$$$$$@%Bx!. .!~i^' 'w@@$$$$$$$$$$$$@@B@kt>>' I<i;. I<~: '>~!' .'i<> :j)l~:..`~f?'..;~~/{ ~i>,l|f>!<^. :<<l. ;<"}<br /><br />
{". ;>>l. '>+~^ ^<~i` ;<>I .i>>, '<>>.1$@@@@$$$$$$$@f'+~<` .:~+d%BB$$$$$$$$$$$$Bk/>+...li~: .^<><' :~il'..i<<; ..<>_tc':>>!In;I<>; .]x~~ '>1x~ 'ii>;...<><' "}<br /><br />
{"^:,:l;:,^'li!,''';I;:,'II;:'^';lI:'':iI:'O@BB@@$$$$$$BM~';I!:^',:kBB@B$$$$$$BB%#p]^;;II;'';;I:^,';;!'^:,!!I''';II,,:'ll!)u'^iI:ln>:l!;''?([l''',I!1x,';Il,^,'Il;',"}<br /><br />
{"<ii:'^,<>l'..I!>>' ^ii>''`'ii<..`,ii; `.}@B$@B@$$$$$@@Qi! ,;>l:Y@B$@@$$$$$$%t ^i>i,^. i<l`'.:>i! '.i>!;''^ii~`.'I>i>.+Cn>>,''`+f[`'.'!>itj'i!iI..,/i+^'.;>i~'.`li"}<br /><br />
{"' I+~I `>+<,. .i<>` .;>+l ><i' .,i<>oB@B$$@$$$$$$o . <~i^ .vB$@%B$$$$$$$8Y->' :i<>. l~>^ '>+i' ;~~l'. ii<; ,ctI' l<<i;cii~?I' `f/?` '~><icU(>+l' >><' "}<br /><br />
{" .';<+I..'<~+' .'<+i'. i~>;. .>>~, .'>lC@$$$$$$$$$$$@z `><>^:M@$$$$$$$$$$$$$*I!.' ;<>>. 'I>+, '>_+`. :<~!...i>i''1uvn)^ ';~<!;v<:~<I. ,}xuu `:~~>`[z/l>, ^~<>'."}<br /><br />
{"ii<;..:<!!.`'I!i~' '!>>^..'>>i '';i<l.1%@$$$$$$$$$$$$Z!i! ..-aB%$$$$$$$$$$$$%}`'i><''. ><i`..;<i! <i>;.'^!!<^..,>>|j+.!~i`.'`+fY: ',+i>{uf]~>I'.^<vvz(,,~><.. l<"}<br /><br />
{",'`,lII',,;;I,:'^III'',::I;',^lI::,',[$@B$$$$$$$$$$$@@:^'ll!'<U#$$$$$$$$$$$$$8L<^:,;:;l'''II;,','l;!'',,I;:,''lI;,,''ll;:'':llI;c)~iI:^:'>tv/?`,lII,':[<I;'',Il!'`"}<br /><br />
{"'. ;<<;. '><<^..'>>!` .Ii<l.' >]/Y&%@$$$@$$$$$$@BBB8@B1''~>+' :ljd@B@$%B@B$B@%@$*}I~i] ..l<>: .^<><'..:><l...!><I..'>>i` :><!`)XUX+:'.^!}vY:.:~>!..'!>>;..'<<>' "}<br /><br />
{"+<!' ^!>i. ;<>;'..i->>[CMBB@@%@@$@@$@@@$$$$$$@@BBhW%k>I'' I<<,`':<+O8B%B$@@$$@@@@WC',i~i,. I~>I. .I>>, ^<>!' 'i<~ `l~+;..`<>i' ;><!^ :~!>, `!<i` :~>!. .:i"}<br /><br />
{"Ii~:'^'i>l^''lii>.,Q$8B@@BB@BB@$@@$@$$B@$$$$$$$%$@%} ,n!I .'l>>; .'l>l^,J$B$%%$$@BB$@@W~I!` ^:>>l '.i!iI^',l>!''',<ll''.llI'.''~!!:'',PHYZ|C@L!<I'^'i!i:.`'i!i^'`,"}<br /><br />
{". .;>>I. '>+<' 'i~@$%$@@$@@@$$$$$$$$$$$$BB%%@@@@@@*i^ ^~+<` ,>>I. .+!>Ii8@B8B%@$$$$$$h~I+<:^ 'i>>' :+>!'. l>>;..'>>i` .:<<i . l><>W@Z. `i<~. .:<<!. .!~~: .><"}<br /><br />
{"!i!'..'!>!'.'Ii!I'.%%@%B@@B@@$$$$$$$$$$$$@@@BB@$$%@Ml;i>l'''lil'..^!i!`'';<<<JBBBB$$$$$@@%Wc^:!iI'`'l>i:.`'l!!`..'!!!''`lii;''`>ii'``:H3R3i>l^''ii!,'.^!>i^'':iil."}<br /><br />
{"ii>, .,><l'. I!>>'.'i-11(rcL0mZwdoW%B@@@@f+@B8@BB@@#Il>il.. l>i;. ^>>>'. '<<i'^Q@%@$@B$@@@BB@WQ>i . i>!;..^i>>`. ,>i>.'.l>>:.'`>i+`..,>~!'. !<<;..`>>l^'.:!>+' l<"}<br /><br />
{" .';<>I..`i+<'..'><i^' l<>I. i<<:. '!<>' ',>>I^'`!i<'..`><~`..;<<;'. <>>:..'l>i?BB@@@$@$$$$$@$BC~><^..,><l...>~>,...<ii^..;>>l. .!<>:. 'i<~ .',<~!' .l<<,...i~>'."}<br /><br />
{",;;,:,;;,::,:,:::;,,;;:;,,;;I;',:::,:,:,;I:',;I,::,:,;::,,,:,,I;,:,:;::,:;;;;'II;>8$BBB$$$$$$$$8B%]::,;,::,,:;;,:,;;,:,;;;:',::;:;;::::::,,;::;,,:I:,,,:;,::,,:::;"}<br /><br />
{"ii>: ,>li.'.l>i~. 'lii,..'><~ ' ;>>l ' <i>'..'ili` >ii! . ii>;`.,>i>''.'i+I`..I>iM$$$$$$$$$@$B$$@)l>!!..^>!<''.;>ii '.l><'..'<!+''.,!<l. .!i<I ^<ii^' :<i+.. l<"}<br /><br />
{" ;<>; '<~+'. .i>l' l~>l .~<i, 'i<~' ;><> ..lii' `~<~' ,i<;'. i><: .'!;{b&8&@B@%$$$$$@$$$wM@v..;~<l. l>>,.''>>~^ I>>l l><I ^i>~ ^<+i' 'l<<,.. !><^ "}<br /><br />
{".'^:l>I^ 'l<>,.`:!!I,' Iil:^.^;i<, '>i;^.`,Ii!.',Ii!:` ^!>!` `;>iI,' ii>^`+w8%B@B@@BBBB$$$$$$%@W~i<''.'i>;..'I>!;''.!il:'.,l>I' 'l>l,''^;i>.'`,l<!,..I<<: .'Iii:'"}<br /><br />
{"i<~: .'><!.. I>>i. ^i>>,. ^><<.'.I~<l'. >ii' `<<!` .l><l . !>~: ^i<>`-UW@$$$$$$$$$@@@@BB$$BBBB%W! i>i: .^i<>'' '<ii. .!>>: .+>-`. :i>!. .!<~; .`><>^..:><+ I~"}<br /><br />
{"`^,;liI''^I>!,'`;!!I:'`I!l;''`I!<,`',!lI`'`:!iI'.^:II,^'^ll!''`:l>[upBBBBB@B$$$$$$$$@@@@B%$@@@$@$%L!:`',!<I`''I!l;,`^lI:'^`'liI^''I!l:``':l!'^,;l!l,'^I>>:'`:l!I:'"}<br /><br />
{". ;<<; 'i>>^. .>~!' I><I'`^><il:'I>~<,,,!<++;Il+--<l!>?]-ii!__(&B%%@@$8B@$$$$$$$$@@@8Jfk@%B@@8Wj<. 'iiI. .!><; ..>>>`..:<<> ` li>; '><<. ,<<i. .lii,.. ~<<' "}<br /><br />
{"::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::"}<br /><br />
Experts in getting in and out in plain sight<br /><br /> Experts in getting in and out in plain sight<br /><br />
Some some speculate that the oceans movies are documentaries based on this group<br /><br /> Some some speculate that the oceans movies are documentaries based on this group<br /><br />
Some members are even rumored to be able to pick locks like the fonz, one hit and it will swing open ayeeeee<br /><br /> Some members are even rumored to be able to pick locks like the fonz, one hit and it will swing open ayeeeee<br /><br />

@ -36,7 +36,7 @@ export function BackwardGame(props: IMinigameProps): React.ReactElement {
const timer = difficulty.timer; const timer = difficulty.timer;
const [answer] = useState(makeAnswer(difficulty)); const [answer] = useState(makeAnswer(difficulty));
const [guess, setGuess] = useState(""); const [guess, setGuess] = useState("");
const hasAugment = Player.hasAugmentation(AugmentationNames.ReverseDictionary, true); const hasAugment = Player.hasAugmentation(AugmentationNames.RearViewMirrorShoulderAttachment, true);
function press(this: Document, event: KeyboardEvent): void { function press(this: Document, event: KeyboardEvent): void {
event.preventDefault(); event.preventDefault();

@ -47,7 +47,7 @@ export function BribeGame(props: IMinigameProps): React.ReactElement {
let upColor = defaultColor; let upColor = defaultColor;
let downColor = defaultColor; let downColor = defaultColor;
let choiceColor = defaultColor; let choiceColor = defaultColor;
const hasAugment = Player.hasAugmentation(AugmentationNames.AmuletOfPersuasion, true); const hasAugment = Player.hasAugmentation(AugmentationNames.KyberCrystalInjection, true);
if (hasAugment) { if (hasAugment) {
const upIndex = index + 1 >= choices.length ? 0 : index + 1; const upIndex = index + 1 >= choices.length ? 0 : index + 1;

@ -42,7 +42,7 @@ export function CheatCodeGame(props: IMinigameProps): React.ReactElement {
const timer = difficulty.timer; const timer = difficulty.timer;
const [code] = useState(generateCode(difficulty)); const [code] = useState(generateCode(difficulty));
const [index, setIndex] = useState(0); const [index, setIndex] = useState(0);
const hasAugment = Player.hasAugmentation(AugmentationNames.LameSharkRepository, true); const hasAugment = Player.hasAugmentation(AugmentationNames.DyslexiaModule, true);
function press(this: Document, event: KeyboardEvent): void { function press(this: Document, event: KeyboardEvent): void {
event.preventDefault(); event.preventDefault();

@ -38,7 +38,7 @@ export function MinesweeperGame(props: IMinigameProps): React.ReactElement {
const [answer, setAnswer] = useState(generateEmptyField(difficulty)); const [answer, setAnswer] = useState(generateEmptyField(difficulty));
const [pos, setPos] = useState([0, 0]); const [pos, setPos] = useState([0, 0]);
const [memoryPhase, setMemoryPhase] = useState(true); const [memoryPhase, setMemoryPhase] = useState(true);
const hasAugment = Player.hasAugmentation(AugmentationNames.MineDetector, true); const hasAugment = Player.hasAugmentation(AugmentationNames.MineDetectionArmAttachment, true);
function press(this: Document, event: KeyboardEvent): void { function press(this: Document, event: KeyboardEvent): void {
event.preventDefault(); event.preventDefault();
if (memoryPhase) return; if (memoryPhase) return;

@ -40,7 +40,7 @@ export function SlashGame(props: IMinigameProps): React.ReactElement {
props.onSuccess(); props.onSuccess();
} }
} }
const hasAugment = Player.hasAugmentation(AugmentationNames.BagOfSand, true); const hasAugment = Player.hasAugmentation(AugmentationNames.PythiasBrainStem, true);
const phaseZeroTime = Math.random() * 3250 + 1500 - (250 + difficulty.window); const phaseZeroTime = Math.random() * 3250 + 1500 - (250 + difficulty.window);
const phaseOneTime = 250; const phaseOneTime = 250;
const timeUntilAttacking = phaseZeroTime + phaseOneTime; const timeUntilAttacking = phaseZeroTime + phaseOneTime;

@ -64,7 +64,7 @@ export function WireCuttingGame(props: IMinigameProps): React.ReactElement {
const [wires] = useState(generateWires(difficulty)); const [wires] = useState(generateWires(difficulty));
const [cutWires, setCutWires] = useState(new Array(wires.length).fill(false)); const [cutWires, setCutWires] = useState(new Array(wires.length).fill(false));
const [questions] = useState(generateQuestion(wires, difficulty)); const [questions] = useState(generateQuestion(wires, difficulty));
const hasAugment = Player.hasAugmentation(AugmentationNames.WireCuttingManual, true); const hasAugment = Player.hasAugmentation(AugmentationNames.SecurityWireContacts, true);
function checkWire(wireNum: number): boolean { function checkWire(wireNum: number): boolean {
return questions.some((q) => q.shouldCut(wires[wireNum - 1], wireNum - 1)); return questions.some((q) => q.shouldCut(wires[wireNum - 1], wireNum - 1));

@ -480,7 +480,7 @@ export class PlayerObject implements IPlayer {
this.lastUpdate = 0; this.lastUpdate = 0;
this.lastSave = 0; this.lastSave = 0;
this.totalPlaytime = 0; this.totalPlaytime = 0;
this.hasCompletedAnInfiltration = true; this.hasCompletedAnInfiltration = false;
this.playtimeSinceLastAug = 0; this.playtimeSinceLastAug = 0;
this.playtimeSinceLastBitnode = 0; this.playtimeSinceLastBitnode = 0;

@ -163,6 +163,7 @@ export function prestigeAugmentation(this: PlayerObject): void {
this.workChaExpGained = 0; this.workChaExpGained = 0;
this.workRepGained = 0; this.workRepGained = 0;
this.workMoneyGained = 0; this.workMoneyGained = 0;
this.hasCompletedAnInfiltration = false;
this.timeWorked = 0; this.timeWorked = 0;

@ -21,6 +21,7 @@ import { Modal } from "./React/Modal";
import TableBody from "@mui/material/TableBody"; import TableBody from "@mui/material/TableBody";
import { Table, TableCell } from "./React/Table"; import { Table, TableCell } from "./React/Table";
import TableRow from "@mui/material/TableRow"; import TableRow from "@mui/material/TableRow";
import { FactionNames } from "../Faction/data/FactionNames";
function LastEmployer(): React.ReactElement { function LastEmployer(): React.ReactElement {
const player = use.Player(); const player = use.Player();
@ -144,16 +145,16 @@ function BladeburnerMults(): React.ReactElement {
function InfiltrationMults(): React.ReactElement { function InfiltrationMults(): React.ReactElement {
const player = use.Player(); const player = use.Player();
if (!player.factions.includes(FactionNames.Infiltrators)) return <></>;
return ( return (
<> <>
<MultiplierTable <MultiplierTable
rows={[ rows={[
["Infiltrator Base Rep increase", player.infiltration_rep_mult], ["Infiltrator Rep reward", player.infiltration_rep_mult],
["Infiltrator Rep reward multiplier", player.infiltration_rep_mult], ["Infiltration sell", player.infiltration_sell_mult],
["Infiltration sell multiplier", player.infiltration_sell_mult], ["Infiltration trade", player.infiltration_trade_mult],
["Infiltration trade multiplier", player.infiltration_trade_mult], ["Infiltration minigame timer", player.infiltration_timer_mult],
["Infiltration minigame timer multiplier", player.infiltration_timer_mult], ["Infiltration minigame health reduction", -1 * (1 - player.infiltration_health_reduction_mult)],
["Infiltration minigame health reduction multiplier", player.infiltration_health_reduction_mult],
]} ]}
/> />
<br /> <br />