% `f`ll`fffÆffÆf`ff`llf` `ÆbfÆ`f``f``f````4@330330333f`#0" D@D@D@D@D`0@3003 @@@ÀÌ Ì À É==ö==ò==õ00ù00û00 000 000000000000000Y`ð€     ////////////////////////     "#%&')*+-///////////////aTU::????????????????????????????::????????????????????????????Þ=ÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÐÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝ}wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww×Ðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿß}wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww×Ðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿß}wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww×Ðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿß}wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww×Ðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿß}wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww×ÐÿÿÏÌüÏÌÿÏÌÿÌÌÿÌÌüÌÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÌÌÿÏüÿÿß}wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww×ÐÿÿÌüÿÌÿüÌÿüÌÿüÌÿÿÌÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÏüÌüÿÿß}wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww×ÐÿÿÏÌÿÌÿÿÌÿüÌÿüÌÌÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÏÌÿÏüÿÿß}wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww×ÐÿÿÿÌüÌÿüÌÿüÌÌÿÌÿÿÌÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÌÿÿÏüÿÿß}wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww×ÐÿÿÌÌÿÏÌÿÏÌÿÌÿüÌÌüÌÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÌÌüÌÌÿÿß}wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww×Ðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿß}wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww×ÐÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÏÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌüÿß}wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww×ÐÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÏÿÿÿÿÿÿÿÿÿÿÿÿÏÌÌÌÌÌÌÌÌÌÌÌÌÌüÿß}wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww×ÐÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÏÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌüÿß}wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww×Ðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿß}wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww×ÐÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÏÌÌÿÿß}wwwwwwwgffffffffwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww×ÐÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÏüÌÿÿÌÿÿß}wwwwwwwfffffffffvwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww×ÐÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÌüÿÏüÿÿß}wwwwwwwfffffffffvwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww×ÐÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÌüÿÌÿÿÿß}wwwwwwwfffffffffvwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww×ÐÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÏüÌÏüÿÿÿß}wwwwwwwfffffffffvwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww×Ðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿß}wwwwwwwffvwwwwffvwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww×Ðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿß}wwwwwwwffvwwwwffvwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww×Ðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿß}wwwwwwwffvwwwwffvwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww×Ðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿß}wwwwwwwffvwwwwffvwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww×Ðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿß}wwwwwwwffvwwwwffvwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww×Ðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿß}wwwwwwwffvwwwwffvwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww×Ðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿß}wwwwwwwffvwwwwffvwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww×Ðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿß}wwwwwwwffvwwwwffvwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww×Ðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿß}wwwwwwwffvwwwwffvwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww×Ðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿß}wwwwwwwffvwwwwffvwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww×Ðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿß}wwwwwwwffvwwwwffvwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww×Ðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿß}wwwwwwwffvwwwwffvwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww×Ðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿß}wwwwwwwffvwwwwffvwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww×Ðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿß}wwwwwwwffvwwwwffvwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww×Ðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿß}wwwwwwwffvwwwwffvwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww×Ðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿß}wwwwwwwffvwwwwffvwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww×ÐÿÿÿÿÏÿÿÿÌüÏÿÏüüüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÏüÿÌÿÌÿÌÿÌÿÿß}wwwwwwwffvwwwwffvwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww×ÐÿÿÿÿÌÿÿÿÿüüüüÿüüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÏÏÏÏÏÏÏÏÏÿÿß}wwwwwwwffvwwwwffvwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww×ÐÿÿÿÿÏÿÿÿÿüÌüüÿÌÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüÏÏÏÏÏÏÏÏÿÿß}wwwwwwwffvwwwwffvwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww×ÐÿÿÿÿÏÿÿÿüüüüüÿüüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÏÿÏÏÏÏÏÏÏÏÿÿß}wwwwwwwffvwwwwffvwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww×ÐÿÿÿÿÌüÿÿÏÿüüÏüüüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÏÌÏüÏüÏüÏüÿÿß}wwwwwwwffvwwwwgfwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww×Ðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿß}wwwwwwwffvwwwwwvwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww×Ðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿß}wwwwwwwffvwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww×Ðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿß}wwwwwwwffvwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww×ÐÿÿÿÿÌÿÿÿÌüÏÿüüÌÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüÿÌÿÌÿÌÿÌÿÿß}wwwwwwwffvwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww×ÐÿÿÿÿÿüÿÿÿüüüüüüüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÏüÏÏÏÏÏÏÏÏÿÿß}wwwwwwwÆÆvwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww×ÐÿÿÿÿÏÿÿÿÿüüüÌüüüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüÏÏÏÏÏÏÏÏÿÿß}wwwwwwwgfwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww×ÐÿÿÿÿüÿÿÿüüüüüüüüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüÏÏÏÏÏÏÏÏÿÿß}wwwwwwwwvwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww×ÐÿÿÿÿÌüÿÿÏÿÏÿüüüüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÏÌÏüÏüÏüÏüÿÿß}wwwwwwwwrwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww×Ðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿß}wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww×Ðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿß}wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww×Ðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿß}wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww×ÐÿÿÿÿÌÿÿÿÌÿÌüÌüÌüÌÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÏÌÿÌÿÌÿÌÿÿß}wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww×ÐÿÿÿÿÿüÿÿüüüÿÏÿüÿüüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÏÿÏÏÏÏÏÏÿÿß}wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww×ÐÿÿÿÿÏÿÿÿÌÿÌÿÏÿÌÿÌüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÏüÏÏÏÏÏÏÿÿß}wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww×ÐÿÿÿÿÿüÿÿüÿüÿÏÿüÿÌÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÏÏÏÏÏÏÏÿÿß}wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww×ÐÿÿÿÿÌÿÿÿüÿÌüÏÿÌüüüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÏüÏüÏüÏüÿÿß}wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww×Ðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿß}wwwwwwwwwwwfwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww×Ðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿß}wwwwwwwwwwwgvwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww×Ðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿß}wwwwwwwwwwwv#wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww×ÐÿÿÿÿüüÿÿÏÿüÿÌüÏüÌüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÏüÿÌÿÌÿÌÿÿß}wwwwwwwwww7r"wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww×ÐÿÿÿÿüüÿÿüüüÿÏÿüÿüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÏÏÏÏÏÏÏÿÿß}wwwwwwwwww'rwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww×ÐÿÿÿÿÌüÿÿÌüüÿÏÿüÿÌÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüÏÏÏÏÏÏÿÿß}wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww×ÐÿÿÿÿÿüÿÿüüüÿÏÿüÿüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÏÿÏÏÏÏÏÏÿÿß}wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww×ÐÿÿÿÿÿüÿÿüüÌüÌüÏüÌüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÏÌÏüÏüÏüÿÿß}wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww×Ðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿß}wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww×Ðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿß}wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww×Ðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿß}wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww×ÐÿÿÿÿÌüÿÿÌüÏÿÌÿÌÿÏÿÌÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüÿÌÿÌÿÌÿÿß}wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww×ÐÿÿÿÿüÿÿÿÿüüüüüüüüüüüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÏüÏÏÏÏÏÏÿÿß}wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww×ÐÿÿÿÿÌÿÿÿÿüüüÌüüüÌüüüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüÏÏÏÏÏÏÿÿß}wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww×ÐÿÿÿÿÿüÿÿüüüüÌÿüüüüüüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüÏÏÏÏÏÏÿÿß}wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww×ÐÿÿÿÿÌÿÿÿÏÿÏÿüüÌÿüüüüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÏÌÏüÏüÏüÿÿß}wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww×Ðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿß}wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww×Ðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿß}wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww×Ðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿß}wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww×ÐÿÿÿÿÏüÿÿÌüüÿÌüÌüÏÿüüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÏÌÿÌÿÌÿÿß}wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww×ÐÿÿÿÿüÿÿÿüÿüÿÏÿÿüüüüüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÏÿÏÏÏÏÿÿß}wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww×ÐÿÿÿÿÌüÿÿÌÿüÿÏÿÿüÌüÌüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÏüÏÏÏÏÿÿß}wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww×ÐÿÿÿÿüüÿÿüÿüÿÏÿüüüüüüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÏÏÏÏÏÿÿß}wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww×ÐÿÿÿÿÌüÿÿÌüÌüÌüÏÿüüüüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÏüÏüÏüÿÿß}wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww×Ðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿß}wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww×Ðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿß}wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww×Ðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿß}wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww×ÐÿÿÿÿÌüÿÿÏüÏÿüÿüÿüüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüÿÌÿÌÿÿß}wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww×ÐÿÿÿÿÿüÿÿüÿüüüÿüÿüüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÏüÏÏÏÏÿÿß}wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww×ÐÿÿÿÿÏÿÿÿÏÿÌüüÿüÿÏÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüÏÏÏÏÿÿß}wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww×ÐÿÿÿÿüÿÿÿÿüüüüÿüÿÏÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüÏÏÏÏÿÿß}wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww×ÐÿÿÿÿüÿÿÿÌÿüüÌüÌüÏÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÏÌÏüÏüÿÿß}wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww×Ðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿß}wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww×Ðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿß}wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww×Ðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿß}wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww×ÐÿÿÿÿÌüÿÿÏüÌüÌÿÿÿüüÌüÌÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÏÌÿÌÿÿß}wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww×ÐÿÿÿÿüüÿÿüÿÏÿüüÿÿüüÏÿüüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÏÿÏÏÿÿß}wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww×ÐÿÿÿÿÌüÿÿÏÿÏÿÌüÿÿüüÏÿüüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÏüÏÏÿÿß}wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww×ÐÿÿÿÿüüÿÿÿüÏÿÌÿÿÿÌüÏÿüüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÏÏÏÿÿß}wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww×ÐÿÿÿÿÌüÿÿÌÿÌüüüÿÿÌüÌüüüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÏüÏüÿÿß}wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww×Ðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿß}wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww×Ðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿß}wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww×Ðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿß}wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww×ÐÿÿÿÿÌüÿÿÏüÌüüüüüüÿüüüüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÏüÿÌÿÿß}wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww×ÐÿÿÿÿüüÿÿüÿÏÿüüüüüÿüüüüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÏÏÏÿÿß}wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww×ÐÿÿÿÿÌüÿÿüÿÏÿÌüüüüÿÌüüüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüÏÏÿÿß}wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww×ÐÿÿÿÿÿüÿÿüÿÏÿüüüüüÿüüüüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÏÿÏÏÿÿß}wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww×ÐÿÿÿÿÿüÿÿÏüÏÿüüÏüÌüüüÏüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÏÌÏüÿÿß}wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww×Ðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿß}wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww×Ðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿß}wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww×Ðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿß}wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww×ÐÿÿÏÿÏüÿÿÌÿÏÿÌÿÌÿüüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüÿÌÿÿß}wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww×ÐÿÿÌÿüüÿÿüüüüüüüüüüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÏüÏÏÿÿß}wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww×ÐÿÿÏÿüüÿÿüüÌüüüüüÏÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüÏÏÿÿß}wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww×ÐÿÿÏÿüüÿÿüüüüüüüüÏÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüÏÏÿÿß}wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww×ÐÿÿÌüÌÿÿÿÌÿüüüüüüÏÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÏÌÏüÿÿß}wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww×Ðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿß}wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww×Ðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿß}wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww×Ðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿß}wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww×Ðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿß}wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww×Ðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿß}wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww×Ðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿß}wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww×Ðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿß}wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww×Ðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿß}wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww×Ðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿß}wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww×Ðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿß}wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww×Ðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿß}wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww×Ðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿß}wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww×Ðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿß}wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww×ÐÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿßÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÐÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝ-@-- title: CLASSIC SNAKE -- author: Zach Attakk -- desc: Basic implementation of SNAKE for the YouTube Tutorial -- site: https://bit.ly/snake_tutorial -- license: CC Attribution-NonCommercial (BY-NC 4.0) -- version: 0.16 -- script: lua -- saveid: classic_snake -- GAMESTATE LIST -- 0 = game -- 1 = game over -- 2 = start timer -- GLOBALS GAMESTATE = 2 DEBUG_MODE = false debug_frameskip = 30 debug_t = debug_frameskip CELL_SIZE = 7 GRID_SIZE = 18 COMBO_MAX_TIME = GRID_SIZE*GRID_SIZE BORDER = 5 CENTER = CELL_SIZE//2 SEG_SIZE = CELL_SIZE//3 COUNTDOWN_START = time() COUNTDOWN_LAST = 10 COMBO_TIMER = COMBO_MAX_TIME * 0.7 LETTERS = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-=[]\\;'`,./ " UI_entered_name = {1,1,1,0,0,0,0,0,0} UI_cur_letter = 1 t=0 x=96 y=24 DIR_NEW_X = 0 DIR_NEW_Y = -1 UI_BREAK = BORDER+CELL_SIZE*GRID_SIZE+BORDER SCORE = 0 COMBO = 1 HIGHSCORES = { {name="JACK", score=20000}, {name="JOHN", score=10000}, {name="PETER", score=5000}, {name="ALICE", score=2000}, {name="JORDAN", score=1000}, {name="ELIJAH", score=500}, {name="SALLY", score=100}, {name="SIR WIN", score=50}, {name="CTHULHU", score=20}, {name="DANNY", score=10} } SNAKE = {} snake_head = {} FRUIT = {} function BOOT() --trace("running boot") SNAKE = {} -- set starting direction snake_head.x_dir = 0 snake_head.y_dir = -1 DIR_NEW_X = 0 DIR_NEW_Y = -1 t = 0 new_segment(2,14) snake_head = SNAKE[1] new_segment(2,15) new_segment(2,16) new_segment(2,17) FRUIT = {} -- first fruit new_fruit() SCORE = 0 COMBO = 1 load_scores() -- do first move move() -- go to countdown GAMESTATE = 2 COUNTDOWN_START = time() COUNTDOWN_LAST = 10 end function TIC() if GAMESTATE == 0 then -- game mode INPUTS_GAME() if not DO_DEBUG() then UPDATES_GAME() DRAW_GAME() DRAW_UI() end elseif GAMESTATE == 1 then -- game over INPUTS_GAME_OVER() DRAW_GAME_OVER() DRAW_GAME_OVER_UI() elseif GAMESTATE == 2 then -- countdown DRAW_COUNTDOWN() UPDATES_COUNTDOWN() DRAW_UI() end -- end of gamestates if DEBUG_MODE then DEBUG_DRAW() end end function DO_DEBUG() if keyp(44) then --DEBUG_MODE = not DEBUG_MODE --trace("DEBUG: "..tostring(DEBUG_MODE)) end if DEBUG_MODE then debug_t = debug_t -1 if debug_t == 0 then debug_t = debug_frameskip return false else return true end end return false end function INPUTS_GAME() if snake_head.y_dir == 0 then if btn(0) then new_dir(0,-1) end -- up if btn(1) then new_dir(0, 1) end -- down end if snake_head.x_dir == 0 then if btn(2) then new_dir(-1,0) end -- left if btn(3) then new_dir(1, 0) end -- right end end function INPUTS_GAME_OVER() -- UI_entered_name = {1,1,1} -- UI_cur_letter = 1 if is_high_score() then if btnp(0) then -- up UI_entered_name[UI_cur_letter] = UI_entered_name[UI_cur_letter] + 1 if UI_entered_name[UI_cur_letter] > #LETTERS then UI_entered_name[UI_cur_letter] = 1 end elseif btnp(1) then -- down UI_entered_name[UI_cur_letter] = UI_entered_name[UI_cur_letter] - 1 if UI_entered_name[UI_cur_letter] <= 0 then UI_entered_name[UI_cur_letter] = #LETTERS end elseif btnp(2) then --left UI_cur_letter = UI_cur_letter - 1 if UI_cur_letter <= 1 then UI_cur_letter = 1 end elseif btnp(3) then -- right -- index 10 is the Done button UI_cur_letter = UI_cur_letter + 1 if UI_cur_letter > 10 then UI_cur_letter = 10 end end -- arrows pressed -- make sound for _b=0,3 do if btnp(_b) then sfx(5) end end end -- is high score if btnp(4) then if is_high_score() and UI_cur_letter == 10 then add_new_score() sfx(6) elseif is_high_score() and UI_cur_letter < 10 then UI_cur_letter = 10 sfx(5) else BOOT() GAMESTATE = 2 -- back to countdown end end end function new_dir(x_dir, y_dir) DIR_NEW_X = x_dir DIR_NEW_Y = y_dir end function UPDATES_COUNTDOWN() local _number = math.floor(3-(time()-COUNTDOWN_START)/1000)+1 if _number <= 0 then sfx(4) GAMESTATE = 0 elseif _number ~= COUNTDOWN_LAST then sfx(3) end COUNTDOWN_LAST = _number end function UPDATES_GAME() if t == 0 then move() check_eat() check_snake_collide() t = CELL_SIZE end t = t-1 update_combo_meter() end -- UPDATES function DRAW_GAME() cls(0) rect(BORDER, BORDER, CELL_SIZE*GRID_SIZE, CELL_SIZE*GRID_SIZE, 7) rectb(BORDER-1, BORDER-1, CELL_SIZE*GRID_SIZE+2, CELL_SIZE*GRID_SIZE+2, 13) -- draw grid if DEBUG_MODE then draw_grid() end -- fruit for _i, _f in pairs(FRUIT) do if _f.eaten then spr(_f.sprite+16, grid(_f.x_pos), grid(_f.y_pos), 0) else spr(_f.sprite, grid(_f.x_pos), grid(_f.y_pos), 0) end -- eaten end -- fruit loop -- snake tail local tail = SNAKE[#SNAKE] local tail_x = 0 local tail_y = 0 if tail.is_new then tail_x= grid(tail.x_pos)-(tail.x_dir*CELL_SIZE) tail_y = grid(tail.y_pos)-(tail.y_dir*CELL_SIZE) else tail_x= grid(tail.x_pos)-(tail.x_dir*t) tail_y = grid(tail.y_pos)-(tail.y_dir*t) end spr(272+tail:get_dir(), tail_x, tail_y, 0) -- draw snake body for _i = #SNAKE, 1, -1 do draw_segment(_i) end -- snake head local snakehead_x = grid(snake_head.x_pos)-(snake_head.x_dir*t) local snakehead_y = grid(snake_head.y_pos)-(snake_head.y_dir*t) spr(256+snake_head:get_dir(), snakehead_x, snakehead_y, 0) end --DRAW_GAME function DRAW_COUNTDOWN() DRAW_GAME() local ctd_x = BORDER+(GRID_SIZE*CELL_SIZE//2)-9 print_shadow(COUNTDOWN_LAST, ctd_x,60,12, 3) end function DRAW_GAME_OVER() DRAW_GAME() print_shadow("GAME OVER", 16, 60, 12, 2) end function DRAW_GAME_OVER_UI() -- ui box rect(UI_BREAK, BORDER, 240-BORDER-UI_BREAK, 136-BORDER-BORDER, 15) rectb(UI_BREAK-1, BORDER-1, 240-BORDER-UI_BREAK+2, 136-BORDER-BORDER+2, 13) if is_high_score() then print("HIGH SCORE!", UI_BREAK+4, BORDER+4, 12) print_right(SCORE, 240-BORDER-4, BORDER+4, 12, false, 1, false) draw_name_input() else DRAW_UI() end end function DRAW_UI() -- ui box rect(UI_BREAK, BORDER, 240-BORDER-UI_BREAK, 136-BORDER-BORDER, 15) rectb(UI_BREAK-1, BORDER-1, 240-BORDER-UI_BREAK+2, 136-BORDER-BORDER+2, 13) -- draw score local score_corner = print("SCORE: ", UI_BREAK+4, BORDER+4, 12) score_corner = score_corner + UI_BREAK+4 print_right(SCORE, 240-BORDER-4, BORDER+4, 12, false, 1, false) -- combo meter -- only appear when combo > 1 -- run down to the right if COMBO > 1 then rectb(score_corner, BORDER+10, 240-score_corner-BORDER-4, 3, 12) -- run down to the right -- get length of line local combo_line_length = (240-BORDER-6) - score_corner -- calculate % line to draw local combo_perc = COMBO_TIMER/COMBO_MAX_TIME -- calculate left x of line local combo_line_x = (240-BORDER-6)-(combo_line_length * combo_perc) line(combo_line_x, BORDER+11, 240-BORDER-6, BORDER+11, 12) print_right("x"..COMBO, 240-BORDER-4, BORDER+14, 12, false, 1, false) end -- draw combo draw_high_scores() end function draw_high_scores() local score_line = 40 for _i = 1, #HIGHSCORES do local _sc = HIGHSCORES[_i] local _i_padded = tostring(_i) if #_i_padded < 2 then _i_padded = " " .. _i_padded end print(_i_padded .. " ".. _sc.name, UI_BREAK+4, score_line, 12, true, 1, true) print_right(_sc.score, 240-BORDER-4, score_line, 12, true, 1, true) score_line = score_line + 8 end end function draw_name_input() local UI_NAME = UI_BREAK + 14 -- letters for _i,_v in pairs(UI_entered_name) do print(get_let(_v), UI_NAME+(4*_i), 40, 12, false, 1, true) end -- for each letter -- done word print("Done", 196, 40, 12) -- lines underneath for _x = UI_NAME+4, UI_NAME+36, 4 do line(_x, 46, _x+2, 46, 12) end -- arrows if blink() and UI_cur_letter == 10 then -- index 10 is the Done button line(196, 46, 218, 46, 12) elseif blink() then spr(320, UI_NAME+(4*UI_cur_letter), 37, 0) spr(321, UI_NAME+(4*UI_cur_letter), 48, 0) end end function draw_segment(index) local cutoff = CELL_SIZE local seg = SNAKE[index] local start_x = grid(seg.x_pos-seg.x_dir) local end_x = grid(seg.x_pos) local start_y = grid(seg.y_pos-seg.y_dir) local end_y = grid(seg.y_pos) if seg.x_dir ~= 0 then for _x = start_x, end_x, seg.x_dir do if index == #SNAKE and cutoff <= t then -- only drawing tail if below t circ(_x+CENTER, grid(seg.y_pos)+CENTER, SEG_SIZE, 6) elseif index == 1 and cutoff > t then -- only draw head if above t circ(_x+CENTER, grid(seg.y_pos)+CENTER, SEG_SIZE, 6) elseif index ~= #SNAKE and index ~= 1 then circ(_x+CENTER, grid(seg.y_pos)+CENTER, SEG_SIZE, 6) end cutoff = cutoff - 1 end else for _y = start_y, end_y, seg.y_dir do -- drawing in y direction if index == #SNAKE and cutoff <= t then -- only drawing tail if below t circ(grid(seg.x_pos)+CENTER, _y+CENTER, SEG_SIZE, 6) elseif index == 1 and cutoff > t then -- only draw head if above t circ(grid(seg.x_pos)+CENTER, _y+CENTER, SEG_SIZE, 6) elseif index ~= #SNAKE and index ~= 1 then -- drawing all other segments circ(grid(seg.x_pos)+CENTER, _y+CENTER, SEG_SIZE, 6) end -- tail cutoff = cutoff - 1 end -- for y loop end -- drawing y end -- draw_segment function print_shadow(txt,x,y,col,scale) print(txt, x+2,y+2,0, false, scale) print(txt,x,y,col,false, scale) end function print_right(txt, x, y, col, fixed, scale, small) local width = print(txt, x, -1000, col, fixed, scale, small) print(txt, x-width, y, col, fixed, scale, small) end function draw_grid() for _x=BORDER,CELL_SIZE*GRID_SIZE, CELL_SIZE do for _y=BORDER, CELL_SIZE*GRID_SIZE, CELL_SIZE do rectb(_x,_y, CELL_SIZE, CELL_SIZE, 15) end end end function DEBUG_DRAW() print("DEBUG", 0, 0, 12) end function move() --move snake body for _i = #SNAKE, 2, -1 do local seg = SNAKE[_i] if seg.is_new then seg.is_new = false else local seg_ahead = SNAKE[_i-1] seg.x_dir = seg_ahead.x_pos - seg.x_pos seg.y_dir = seg_ahead.y_pos - seg.y_pos seg.x_pos = seg_ahead.x_pos seg.y_pos = seg_ahead.y_pos end end -- move snake head snake_head.x_dir = 0 snake_head.y_dir = 0 snake_head.x_dir = DIR_NEW_X snake_head.y_dir = DIR_NEW_Y snake_head.x_pos = snake_head.x_pos + snake_head.x_dir snake_head.y_pos = snake_head.y_pos + snake_head.y_dir debug_trace("snake head: ".. snake_head.x_pos .. ", " .. snake_head.y_pos) end function check_eat() -- check if fruit is eaten local fruit_to_eat = occupies(FRUIT, snake_head.x_pos, snake_head.y_pos) if fruit_to_eat ~= nil then -- mark it as eaten fruit_to_eat.eaten = true -- update score SCORE = SCORE + COMBO COMBO = COMBO + 1 COMBO_TIMER = COMBO_MAX_TIME sfx(1) -- make snake longer new_segment() -- new fruit new_fruit() end -- remove eaten fruit for _i = #FRUIT, 1, -1 do local _f = FRUIT[_i] if _f.eaten and occupies(SNAKE, _f.x_pos, _f.y_pos) == mil then table.remove(FRUIT,_i) end end end -- check_eat function update_combo_meter() if COMBO_TIMER >= 0 then COMBO_TIMER = COMBO_TIMER - 1 if COMBO_TIMER <= 0 then COMBO = 1 end end end function check_snake_collide() local is_game_over = false local snake_collide = occupies(SNAKE, snake_head.x_pos, snake_head.y_pos, true) if snake_collide ~= nil then is_game_over = true end if snake_head.x_pos < 0 or snake_head.x_pos >= GRID_SIZE then -- we've left the grid sideways is_game_over = true elseif snake_head.y_pos < 0 or snake_head.y_pos >= GRID_SIZE then -- left the grid top/bottom is_game_over = true end if is_game_over then GAMESTATE = 1 -- make game over sfx(2) end end function new_segment(_x_pos, _y_pos) local segment = { x_pos = _x_pos, y_pos = _y_pos, is_new = false } segment.get_dir = function(self) if self.y_dir == -1 then return 0 elseif self.x_dir == 1 then return 1 elseif self.y_dir == 1 then return 2 elseif self.x_dir == -1 then return 3 end end if _x_pos == nil then -- assume position -- copy segment ahead local seg_ahead = SNAKE[#SNAKE] segment.x_pos = seg_ahead.x_pos segment.y_pos = seg_ahead.y_pos segment.x_dir = seg_ahead.x_dir segment.y_dir = seg_ahead.y_dir segment.is_new = true end table.insert(SNAKE, #SNAKE+1, segment) end -- new segment function new_fruit() -- list of all avail cells local avail_cells = {} for _i = 0, GRID_SIZE*GRID_SIZE-1 do local _x_pos = _i%GRID_SIZE local _y_pos = _i//GRID_SIZE -- remove snake cells if occupies(SNAKE, _x_pos, _y_pos) == nil then -- snake not in this spot local fruit_spr = math.floor(math.random(0,2)) local potential_fruit = { y_pos = _y_pos, x_pos = _x_pos, sprite = (288+fruit_spr), eaten = false } table.insert(avail_cells, potential_fruit) end end -- pick random cell from list local selected = math.random(#avail_cells) -- add fruit to location table.insert(FRUIT, avail_cells[selected]) end function grid(val) return BORDER + (val * CELL_SIZE) end function occupies(obj, x_pos, y_pos, ignore_head) if ignore_head == nil then ignore_head = false end --[[ returns true if the table has an entry that occupies the provided position ]] for _i, _v in pairs(obj) do if _v.x_pos == x_pos and _v.y_pos == y_pos then if _v == snake_head and not ignore_head then return _v elseif _v ~= snake_head then return _v end end end return nil end function is_high_score() -- new score needs to be added -- higher than lowest score in list -- not yet added if SCORE > HIGHSCORES[#HIGHSCORES].score then -- check whether score exists for _i, _check_score in pairs(HIGHSCORES) do if _check_score.name == convert_name(UI_entered_name) and _check_score.score == SCORE then return false end -- names match end -- for each score return true end -- should be on list return false end -- is_high_score function debug_trace(txt) if DEBUG_MODE then trace(txt) end end function get_let(l) if l == 0 then return " " end return LETTERS:sub(l,l) end function set_let(l) return LETTERS:find(l, 1, true) end function add_new_score() -- make object local new_score = {score=SCORE, name=""} new_score.name = convert_name(UI_entered_name) -- find correct position local saved = false local save_loc = 1 while not saved and save_loc <= #HIGHSCORES do if SCORE > HIGHSCORES[save_loc].score then table.insert(HIGHSCORES, save_loc, new_score) table.remove(HIGHSCORES, #HIGHSCORES) saved = true else save_loc = save_loc + 1 end end -- while not saved save_scores() end -- add new score function save_scores() -- 5 high score slots -- each slot 10 values -- 1: slot 10 -- name for 1: 11-19 -- for each high score for _i = 1, #HIGHSCORES do local save_slot = _i*10 -- save score pmem(save_slot, HIGHSCORES[_i].score) -- clear old name (if any) for _l=1, 9 do pmem(_l+save_slot, 0) end -- write new name -- clear old name (if any) for _l=1, #HIGHSCORES[_i].name do local _letter = set_let(HIGHSCORES[_i].name:sub(_l,_l)) pmem(_l+save_slot, _letter) end end end function load_scores() if pmem(10) ~= 0 then HIGHSCORES = {} local score_index = 10 while score_index < 255 and pmem(score_index) > 0 do local new_score = {score=pmem(score_index), name=""} for _l = score_index+1, score_index+9 do new_score.name = new_score.name .. get_let(pmem(_l)) end -- trim spaces new_score.name = trim(new_score.name) -- add score to high scores table.insert(HIGHSCORES, #HIGHSCORES+1, new_score) score_index = score_index+10 end -- while there's score to read end -- have scores to load end -- load_scores function convert_name(ui_name) -- make blank name local return_name = "" --convert each letter for _i, _v in pairs(ui_name) do return_name = return_name .. get_let(_v) end -- trim spaces return_name = trim(return_name) -- send it back return return_name end -- convert_name function blink() if time()//200%2 == 0 then return true end return false end function trim(s) local l = 1 -- not trim left side --[[ while s:sub(l,l) == ' ' do l = l+1 end ]]-- local r = #s while s:sub(r,r) == ' ' do r = r-1 end return s:sub(l,r) end