From 44c635ac4ada0cc7a8e813f90330c42fa5910152 Mon Sep 17 00:00:00 2001 From: Robert Chen Date: Wed, 20 Nov 2013 00:24:09 -0800 Subject: [PATCH] Working dialogue, market screen --- index.html | 2 + js/dialogue.js | 11 ++++ js/main.js | 92 +++++++++++++++++++++------ js/screens.js | 40 +++++++++++- js/stories.js | 12 ++++ js/ui.js | 49 +++++++------- res/DialogueBox.png | Bin 0 -> 12355 bytes res/items/Alarm.png | Bin 0 -> 11669 bytes res/items/AlarmGlow.png | Bin 0 -> 13330 bytes res/items/Bottle1.png | Bin 0 -> 7878 bytes res/items/Bottle2.png | Bin 0 -> 8311 bytes res/items/Bottle3.png | Bin 0 -> 7765 bytes res/items/Cookbook.png | Bin 0 -> 26941 bytes res/items/Cookbook1.png | Bin 0 -> 27110 bytes res/items/Cookbook1Glow.png | Bin 0 -> 30148 bytes res/items/CookbookGlow.png | Bin 0 -> 29983 bytes res/items/FrillsBox.png | Bin 0 -> 11560 bytes res/items/FrillsBoxGlow.png | Bin 0 -> 13575 bytes res/items/OvenLightBox.png | Bin 0 -> 17428 bytes res/items/OvenLightBoxGlow.png | Bin 0 -> 18357 bytes res/items/Store-Screen-Clean.png | Bin 0 -> 54166 bytes res/items/Store-ScreenV11-17.png | Bin 0 -> 251848 bytes res/items/Store-ScreenV11-19.png | Bin 0 -> 330504 bytes res/items/StuffingExquisite.png | Bin 0 -> 22741 bytes res/items/StuffingExquisiteGlow.png | Bin 0 -> 25200 bytes res/items/StuffingRepurposed.png | Bin 0 -> 20331 bytes res/items/StuffingRepurposedGlow.png | Bin 0 -> 23541 bytes res/items/StuffingSpecial.png | Bin 0 -> 25985 bytes res/items/StuffingSpecialGlow.png | Bin 0 -> 27907 bytes res/items/TempProbe.png | Bin 0 -> 15694 bytes res/items/TempProbeGlow.png | Bin 0 -> 17809 bytes res/items/Turkey1.png | Bin 0 -> 35374 bytes res/items/Turkey1Glow.png | Bin 0 -> 38640 bytes res/items/Turkey2.png | Bin 0 -> 27764 bytes res/items/Turkey2Glow.png | Bin 0 -> 30641 bytes res/items/Turkey3.png | Bin 0 -> 28321 bytes res/items/Turkey3Glow.png | Bin 0 -> 31168 bytes res/items/Turkey4.png | Bin 0 -> 19780 bytes res/items/Turkey4Glow.png | Bin 0 -> 22648 bytes res/items/Turkey5.png | Bin 0 -> 26362 bytes res/items/Turkey5Glow.png | Bin 0 -> 30549 bytes res/sound/turkey_in_the_straw.mp3 | Bin 0 -> 1500946 bytes res/sound/turkey_in_the_straw.ogg | Bin 0 -> 1337360 bytes 43 files changed, 162 insertions(+), 44 deletions(-) create mode 100644 js/dialogue.js create mode 100644 js/stories.js create mode 100644 res/DialogueBox.png create mode 100644 res/items/Alarm.png create mode 100644 res/items/AlarmGlow.png create mode 100644 res/items/Bottle1.png create mode 100644 res/items/Bottle2.png create mode 100644 res/items/Bottle3.png create mode 100644 res/items/Cookbook.png create mode 100644 res/items/Cookbook1.png create mode 100644 res/items/Cookbook1Glow.png create mode 100644 res/items/CookbookGlow.png create mode 100644 res/items/FrillsBox.png create mode 100644 res/items/FrillsBoxGlow.png create mode 100644 res/items/OvenLightBox.png create mode 100644 res/items/OvenLightBoxGlow.png create mode 100644 res/items/Store-Screen-Clean.png create mode 100644 res/items/Store-ScreenV11-17.png create mode 100644 res/items/Store-ScreenV11-19.png create mode 100644 res/items/StuffingExquisite.png create mode 100644 res/items/StuffingExquisiteGlow.png create mode 100644 res/items/StuffingRepurposed.png create mode 100644 res/items/StuffingRepurposedGlow.png create mode 100644 res/items/StuffingSpecial.png create mode 100644 res/items/StuffingSpecialGlow.png create mode 100644 res/items/TempProbe.png create mode 100644 res/items/TempProbeGlow.png create mode 100644 res/items/Turkey1.png create mode 100644 res/items/Turkey1Glow.png create mode 100644 res/items/Turkey2.png create mode 100644 res/items/Turkey2Glow.png create mode 100644 res/items/Turkey3.png create mode 100644 res/items/Turkey3Glow.png create mode 100644 res/items/Turkey4.png create mode 100644 res/items/Turkey4Glow.png create mode 100644 res/items/Turkey5.png create mode 100644 res/items/Turkey5Glow.png create mode 100644 res/sound/turkey_in_the_straw.mp3 create mode 100644 res/sound/turkey_in_the_straw.ogg diff --git a/index.html b/index.html index 8a5ee17..653f92b 100644 --- a/index.html +++ b/index.html @@ -15,6 +15,8 @@ + + diff --git a/js/dialogue.js b/js/dialogue.js new file mode 100644 index 0000000..9d01ed6 --- /dev/null +++ b/js/dialogue.js @@ -0,0 +1,11 @@ +function DialogueSequence(){ + + return { + next: function(){ + return story.shift().split(": ")[1]; + }, + more: function(){ + return story.length > 0; + } + } +} \ No newline at end of file diff --git a/js/main.js b/js/main.js index 1e4172c..080bef1 100644 --- a/js/main.js +++ b/js/main.js @@ -1,15 +1,28 @@ function GameState(){ var that = this; + var SCREEN_OUT = 1; + var SCREEN_IN = 2; + var SCREEN_STABLE = 0; + var screenAlpha = 1; + this.pubsub = {}; BindPubSub( this.pubsub ); this.currentTime = new Date().getTime(); - this.oldTime = new Date().getTime(); this.mainUI = new GameUI( "demoCanvas", this ); createjs.Ticker.addEventListener( "tick", gameLoop ); + + // Load all our resources: + var queue = new createjs.LoadQueue(true); + queue.installPlugin(createjs.Sound); + //queue.addEventListener("fileload", handleFileComplete); + queue.loadFile( {id: "sound", src:"res/sound/turkey_in_the_straw.mp3"} ); + + this.screenState = 0; + function gameLoop(){ that.mainUI.draw(); } @@ -23,7 +36,7 @@ function GameUI( canvasElem, gameState ){ var that = this; this.stage = new createjs.Stage( canvasElem ); -// this.stage.enableMouseOver(36); + this.stage.enableMouseOver(20); this.activeScreenName = "EndingScreen"; this.activeScreenObj = {}; @@ -42,19 +55,29 @@ function GameUI( canvasElem, gameState ){ "CreditsScreen" : CreditsScreen } - this.activeScreenObj = new MainScreen( this.stage, gameState ); + this.activeScreenObj = new KitchenScreen( this.stage, gameState ); + var textContent = new createjs.Text( "", "16px Arial", "#00000000" ); + textContent.x = 750; + textContent.y = 30; + that.stage.addChild( textContent); this.switchScreen = function( screenName ){ + //gameState.screenState = SCREEN_OUT; + console.log("Switch screen called with" + screenName); that.stage.removeAllChildren(); that.activeScreenObj = new that.screens[ screenName ]( that.stage, gameState ); + //var rect = new createjs.Rectangle(0, 0, 100, 100); + that.stage.addChild( textContent ); } + gameState.pubsub.subscribe( "SwitchScreen", this.switchScreen ); return { draw : function(){ that.activeScreenObj.blit(); + textContent.text = createjs.Ticker.getMeasuredFPS().toFixed(1); that.stage.update(); } } @@ -66,29 +89,62 @@ function DialogUI( stage ){ var DIALOG_RECEDING = 0; var DIALOG_SHOWING = 1; var DIALOG_PAUSING = 2; + var MILLIS_PER_CHAR = 50; - this.dialogSpeed = 15; + this.dialogSpeed = 30; this.dialogState = DIALOG_PAUSING; - this.dialogMotionQueue = [DIALOG_RECEDING,DIALOG_SHOWING,DIALOG_RECEDING]; + this.dialogMotionQueue = [DIALOG_RECEDING,DIALOG_SHOWING,DIALOG_PAUSING]; + this.currDialogueSeq = new DialogueSequence(); dialogQueue = []; - // Replace with bitmap - this.dialogBox = new createjs.Shape(); - this.dialogBox.graphics.beginFill( "#00ffff" ).drawRect( 0, 450, 800, 150 ); + this.dialogBox = new createjs.Bitmap("res/DialogueBox.png"); + this.dialogBox.x = 10; + this.dialogBox.y = 435; - this.textContent = new createjs.Text( "Hello World This is some conversation text", "20px Arial", "#ff7700" ); - this.textContent.x = 50; - this.textContent.y = 500; + this.textContent = new createjs.Text( "Hey there kids!", "16px Arial", "#00000000" ); + this.textContent.x = 195; + this.textContent.y = 475; + this.textContent.lineWidth = 600; + this.textContent.lineHeight = 30; this.textContent.textBaseline = "alphabetic"; + this.dialogBox.addEventListener( "mouseover", function(){ document.body.style.cursor='pointer'; } ); + this.dialogBox.addEventListener( "mouseout", function(){ document.body.style.cursor='default'; } ); + this.dialogBox.addEventListener( "click", function(){ clickEvent(); }); + + this.textContent.addEventListener( "mouseover", function(){ document.body.style.cursor='pointer'; } ); + this.textContent.addEventListener( "mouseout", function(){ document.body.style.cursor='default'; } ); + this.textContent.addEventListener( "click", function(){ clickEvent(); }); + + + // negate double setTimeout if clicked + var oldTime = new Date().getTime(); + var delayCounter = 0; + var clickEvent = function( timer ){ + + // if there is more dialogue text, then keep going, otherwise, recede + if( that.currDialogueSeq.more() ){ + that.dialogMotionQueue.push(DIALOG_SHOWING); + that.textContent.text=that.currDialogueSeq.next(); + delayCounter = 0; + oldTime = new Date().getTime() + }else{ + // pause and close dialog + setTimeout( function(){that.dialogMotionQueue.push(DIALOG_RECEDING)}, 1000 ); + } + } stage.addChild( this.dialogBox ); stage.addChild( this.textContent ); return { tick: function(){ + delayCounter = new Date().getTime() - oldTime; + if(that.dialogBox.y ==435 && delayCounter > ( that.textContent.text.length * MILLIS_PER_CHAR ) ){ + clickEvent(); + } if( that.dialogState == DIALOG_RECEDING ){ that.dialogBox.y+=that.dialogSpeed; that.textContent.y +=that.dialogSpeed; @@ -101,23 +157,23 @@ function DialogUI( stage ){ } // toggle states - if( that.dialogBox.y > 150 && that.dialogState == DIALOG_RECEDING ){ - that.dialogBox.y = 150; - that.textContent.y = 650; + if( that.dialogBox.y > 675 && that.dialogState == DIALOG_RECEDING ){ + that.dialogBox.y = 675; + that.textContent.y = 705; that.dialogState = DIALOG_PAUSING; console.log( "Pausing on recede" + that.dialogBox.y ); } - if( that.dialogBox.y < 0 && that.dialogState == DIALOG_SHOWING ){ - that.dialogBox.y = 0; - that.textContent.y = 500; + if( that.dialogBox.y < 435 && that.dialogState == DIALOG_SHOWING ){ + that.dialogBox.y = 435; + that.textContent.y = 465; that.dialogState = DIALOG_PAUSING; console.log( "Pausing on showing" + that.dialogBox.y ); } /* next states if there are any on the queue */ if( that.dialogMotionQueue.length > 0 && that.dialogState == DIALOG_PAUSING ){ - that.dialogState = that.dialogMotionQueue.pop(); + that.dialogState = that.dialogMotionQueue.shift(); } }, diff --git a/js/screens.js b/js/screens.js index 16ee196..474f53c 100644 --- a/js/screens.js +++ b/js/screens.js @@ -48,6 +48,22 @@ function MainScreen( stage, gameState ){ this.background = new createjs.Bitmap( "res/Main.png" ); stage.addChild( this.background ); + //createjs.Sound.addEventListener("fileload", createjs.proxy(loadHandler, this)); + createjs.Sound.registerSound("res/sound/turkey_in_the_straw.mp3", "sound"); + + var instance = createjs.Sound.createInstance("sound"); // play using id. Could also use full sourcepath or event.src. + instance.setPosition(5650); + instance.volume = 0.5; + + instance.play(); + + // loop-de-loop + instance.addEventListener("complete", playAgain); + function playAgain(event) { + instance.setPosition(5650); + instance.play(); + } + // buttons info/credits/start stage.addChild( new Button( stage, gameState, 13, 445, 222, 65, "SwitchScreen", "InfoHelpScreen" ) ); stage.addChild( new Button( stage, gameState, 13, 515, 222, 65, "SwitchScreen", "CreditsScreen" ) ); @@ -76,8 +92,8 @@ function DifficultyScreen( stage, gameState ){ stage.addChild( this.background ); // Easy/Hard Button - stage.addChild( new Button( stage, gameState, 170, 40, 450, 105, "SwitchScreen", "KitchenScreen" ) ); - stage.addChild( new Button( stage, gameState, 170, 150, 450, 105, "SwitchScreen", "KitchenScreen" ) ); + stage.addChild( new Button( stage, gameState, 170, 40, 450, 105, "SwitchScreen", "MarketScreen" ) ); + stage.addChild( new Button( stage, gameState, 170, 150, 450, 105, "SwitchScreen", "MarketScreen" ) ); return { blit : function(){ @@ -116,10 +132,28 @@ function KitchenScreen( stage, gameState ){ function MarketScreen( stage, gameState ){ var that = this; - this.background = new createjs.Bitmap( "res/Main.png" ); + this.background = new createjs.Bitmap( "res/Store-Screen-Clean.png" ); stage.addChild( this.background ); + stage.addChild( new Button( stage, gameState, 13, 445, 222, 65, "SwitchScreen", "KitchenScreen" ) ); this.uiElems = []; + this.uiElems.push( new MarketItem( stage, gameState, 275,195, 100, "res/items/Alarm.png", "res/items/AlarmGlow.png" ) ); + this.uiElems.push( new MarketItem( stage, gameState, 200,200, 100, "res/items/Bottle1.png", "res/items/Bottle1.png" ) ); + this.uiElems.push( new MarketItem( stage, gameState, 456,123, 100, "res/items/Bottle2.png", "res/items/Bottle2.png" ) ); + this.uiElems.push( new MarketItem( stage, gameState, 312,222, 100, "res/items/Bottle3.png", "res/items/Bottle3.png" ) ); + this.uiElems.push( new MarketItem( stage, gameState, 300,400, 100, "res/items/Cookbook1.png", "res/items/Cookbook1Glow.png" ) ); + this.uiElems.push( new MarketItem( stage, gameState, 12,11, 100, "res/items/FrillsBox.png", "res/items/FrillsBoxGlow.png" ) ); + this.uiElems.push( new MarketItem( stage, gameState, 44,222, 100, "res/items/OvenLightBox.png", "res/items/OvenLightBoxGlow.png" ) ); + this.uiElems.push( new MarketItem( stage, gameState, 66,444, 100, "res/items/StuffingExquisite.png", "res/items/StuffingExquisiteGlow.png" ) ); + this.uiElems.push( new MarketItem( stage, gameState, 293,12, 100, "res/items/StuffingRepurposed.png", "res/items/StuffingRepurposedGlow.png" ) ); + this.uiElems.push( new MarketItem( stage, gameState, 438,200, 100, "res/items/StuffingSpecial.png", "res/items/StuffingSpecialGlow.png" ) ); + this.uiElems.push( new MarketItem( stage, gameState, 444,334, 100, "res/items/TempProbe.png", "res/items/TempProbeGlow.png" ) ); + this.uiElems.push( new MarketItem( stage, gameState, 555,33, 100, "res/items/Turkey1.png", "res/items/Turkey1Glow.png" ) ); + this.uiElems.push( new MarketItem( stage, gameState, 200,200, 100, "res/items/Turkey2.png", "res/items/Turkey2Glow.png" ) ); + this.uiElems.push( new MarketItem( stage, gameState, 100,100, 100, "res/items/Turkey3.png", "res/items/Turkey3Glow.png" ) ); + this.uiElems.push( new MarketItem( stage, gameState, 122,349, 100, "res/items/Turkey4.png", "res/items/Turkey4Glow.png" ) ); + this.uiElems.push( new MarketItem( stage, gameState, 96,406, 100, "res/items/Turkey5.png", "res/items/Turkey5Glow.png" ) ); + return { blit : function(){ diff --git a/js/stories.js b/js/stories.js new file mode 100644 index 0000000..64efc75 --- /dev/null +++ b/js/stories.js @@ -0,0 +1,12 @@ +var story = ["Brother: Hey Grandpa, I've got a funny story about that primer you gave me", +"Grandpa: You'll have to remind me, again, my memory isn't too good in my old age", +"Brother: Well, you gave me some primer to redo my room.", +"Mom: How is that going? Last I heard you had the priming done", +"Brother: Yup. Well, almost. I still have a mess to clean up", +"Mom : What happened?", +"Brother: Well, this can of primer was pretty old. And I guess it rusted on the bottom. So I prep everything, and get the primer can lid taken off, and start going to town on the wall. Then, I start feeling some wetness on my pants. I look down and there are primer drops all over my pants.", +"Dad: Why were you holding the paint bucket though. Don't you just pour it in a roller pan and do it that way like I taught you?", +"Brother: Well yes, but I was also cutting the edges, like you taught me. And that was easier with the paint bucket in my hand. Or so I thought...", +"Brother: Right. Well, umm so I quickly put the paint can down in the roller pan, seee, that I had nearby, and as I turned around to go clean myself off with some paper towels, I noticed a drip line all the way from the garage.", +"Brother: That's not good. So I dashed for the towels, and tried to soak up as much as possible. And well.. yeah So, in the future, I probably won't go for your primer Grandpa.", +"Grandpa: ..."]; \ No newline at end of file diff --git a/js/ui.js b/js/ui.js index 864c77f..b82cd8e 100644 --- a/js/ui.js +++ b/js/ui.js @@ -84,7 +84,7 @@ function OvenUI( stage, gameState ){ this.changeTemperature = function( direction ){ - if( temperatureText.text == "OFF" && direction == "Up" ) temperatureText.text = "150"; + if( temperatureText.text == "OFF" && direction == "Up" ) temperatureText.text = "125"; if( !( temperatureText.text == "OFF" && direction == "Down" ) ){ var temp = ( direction == "Up" ? parseInt(temperatureText.text)+25 : parseInt(temperatureText.text)-25); @@ -110,8 +110,8 @@ function OvenUI( stage, gameState ){ gameState.currentTime += 1000; } - setInterval(this.secondTick, 500); - + setInterval(this.secondTick, 1000); + stage.addChild( this.text ); return { @@ -131,33 +131,36 @@ return { } } -function Item(){ - /*img.onPress = function(e) { - document.body.style.cursor='move'; - offset = {x:e.stageX - e.target.x, y:e.stageY - e.target.y}; +function MarketItem( stage, gameState, x, y, cost, mouseOutImg, mouseOverImg ){ + var mouseOver = new createjs.Bitmap( mouseOverImg ); + var mouseOut = new createjs.Bitmap( mouseOutImg ); + mouseOver.x = mouseOut.x = x; + mouseOver.y = mouseOut.y = y; + mouseOut.addEventListener( "mouseover", function(){ document.body.style.cursor='pointer'; mouseOver.visible = true; mouseOut.visible = false; } ); + mouseOut.addEventListener( "mouseout", function(){ document.body.style.cursor='default'; mouseOver.visible = false; mouseOut.visible = true; } ); + mouseOver.addEventListener( "mouseover", function(){ document.body.style.cursor='pointer'; mouseOver.visible = true; mouseOut.visible = false; } ); + mouseOver.addEventListener( "mouseout", function(){ document.body.style.cursor='default'; mouseOver.visible = false; mouseOut.visible = true; } ); + mouseOver.addEventListener( "click", function(){ alert("buy!"); } ); + mouseOver.visible = false; + stage.addChild( mouseOut ); + stage.addChild( mouseOver ); - e.onMouseMove = drag; - }*/ + return { + tick: function(){} + } } function Button( stage, gameState, x_orig, y_orig, x_dest, y_dest, eventCmd, arg ){ var that = this; - var infoButton = new createjs.Shape(); - infoButton.graphics.beginFill("#ffffff").drawRect(x_orig, y_orig, x_dest, y_dest); - infoButton.alpha = 0.5; - infoButton.addEventListener( "click", function(){ gameState.pubsub.publish( eventCmd, arg ) } ); - - infoButton.onMouseOver = function(e) { - alert("mouseover"); - document.body.style.cursor='pointer'; - } - - infoButton.onMouseOut = function(e) { - document.body.style.cursor='default'; - } + var button = new createjs.Shape(); + button.graphics.beginFill("#ffffff").drawRect(x_orig, y_orig, x_dest, y_dest); + button.alpha = 0.5; + button.addEventListener( "click", function(){ gameState.pubsub.publish( eventCmd, arg ) } ); + button.addEventListener( "mouseover", function(){ document.body.style.cursor='pointer'; } ); + button.addEventListener( "mouseout", function(){ document.body.style.cursor='default'; } ); - return infoButton; + return button; } \ No newline at end of file diff --git a/res/DialogueBox.png b/res/DialogueBox.png new file mode 100644 index 0000000000000000000000000000000000000000..bced340d02f497646d0dd8fd02f2d44f2822c00f GIT binary patch literal 12355 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�W_AFD8~RA>Yh|nY|r@pCu|^n(STG(7MSYx2n6}>FJrNiBeXSLW0MG2Ll5`l93iy{Y;BKcRyI@&tsotLE2}6>nfq;s^(zs z>S5$;1}0+aU~EPrV`pSxrfOzn>g6J3lhSAf`@lzWN zj9j@Rb2AF zZGD~zkXpLBI`T3xd3bm*dayA%I9o8W@bK_3F|#tUvNC*1Ft~WxyBc{i*t?MZ8$sO6 z#l+dl(bdYqp5z}yBVz|QR{_#bPyee4c8>o8Ywz;k-SpXEOrA!LOe~Dd|1{~}f(i=% ze^EQT|B-faRW{5ivF%2}yQ#Q3)OqZXULO>xw&=xY?Q6yZ&3(^nZ0({-f?cRIqdW zv@CAsY~^ldD(UQCNAj;G^IH8!U$`XxBi?`On*K*$xFr9hF4LzoO#ck*|25G6F8XB8 zKiU7G?dQq=5Z}!HlkLu*v<@{Q?g0a14wn%Z0eY^UX2G};E_oex(bQ}UxCWBI210^k z#T#A}lFMRItkE(?>+NY>OEUTt5?GuiB~|_`n4t7=u3M?Es3g4LT|CdelhM=Q?5L}+ zJ>}M5AxlD2P_Z?Hg5!(_1J6%g+8RH7JI5HuU*}`H05|j_LpogOX;0sJ?Q*_&tIoB; z!${q6rehHOGPIo0u z%*wUxVEI`eW3U~{1E#)vs`PuU`)ACyS0@$5C81Ex(lwYo9hhhp?0yzPcK3=X__iqc zv{h!+nuWcM);_7{T%bt@Rg14ungsD2GB$$ZcZk{p^rJO^Mk}oTq)jl4W4qs@ikc9~ zbzsJbjsJpXi@NYn2bafdmPY&S){c~m2XjCXzU7nP!wpC|u-w{%HMtk@j|&9Kb?E4s zS6=)9{?R3v>NgV84lXs%u#BqGYX(3r@qR{GZ*6u==7V@n&aS{iMGD@~{B`#4Dq5ID z(eC}AQ5TNT6-Z!b5Gp)WsX^!Eliw7Q=*;1RIef7JiFRNaB91zW)&f7+LmLldj%@jc zEj1Jh8@(sBVIJiIilKiGI_^b`*QrNS@+=%F0y~x??JgVMp#W1$R-AUZO;v$KiCai_c=tx1Ifm#2p1A{a)M}@(HMmZB z%b{uBnseK@V`vqy>(*uHEiwX_mBaPYT^M?~UrOc|taw(odNJvNP_%2xqwh!j4c;Fj z;rf)hb@9An@KtvciS&{EkAL1RLi))yC}*maK+9`uh5!sSB>|lo&y;qJxG;kx$;9kg z^Ymsbs5>%rc+Eq^#MLv=bqnwK+FQB@p1Nl8v%amv!T<_66R(9U%DE@mLWR()_y<(@ znzet*Lx(Te{d4S=UyN7jqx`r>XZdi*2wc`+puACciKF1qOC`FZMIfaka1K+xRd|k} z