0]$]ą>Pï‘WĸĸmŪæPaū<P4L]ÉY™öæęōķššqP,$ 0ĸĸĸĸĸĸĸĸ2Tv˜šÜþïÍŦ‰gE#2Tv˜šÜþ2Tv˜šÜþ`ŧŧžË Āŧ ĀËŧžË°Ë žŧŧ Āŧž°°ŧ ŧ ŧŧŧŧ ŧ°°ŧŧ°ŧŧ ŧ ŧŧ° ŧ°ŧ° 33##33#33332333#33##33#333#2333""3#2"2"3#2"2"3#213#1##1#313#1331#313#1##ËŧŧÍËÛŧžËËŧžËžËÍîîþïîïþþîîîþîîîĸîîîîîîþïîîîþþîþþ4DNä4DNNCDNîCDNN4CäîCDDäCDNN3DNîVVaeeeUvvVagggqwwwwwVVaeeeUvvVagggqwwwwwąVKaeĩeUvvVąggg;{·wąw+ą!DC224$$$#CC#222!""$2AC##4442ABBDAC##4D!DC224$$$####"""!""ąÛąuq·ģqąW;ąqqwqwgąkk·ąą{{ąąq1"""+!vqgvq33341VVaeeeUvvVagggqwwwwwugQVvveeegQWWUQVvveUaeeVVVeggUvvvwwwqwwąÛąuq·ģqąW;ąqqˆˆˆˆˆˆˆAÁÁLÁ,Á!DALÁĀĀÁ Ā!Ė,"ADDÄ ĖLĖ ĀĖĖ ĖĖ ĀĖĖ ĖĖÂĖĖ,!""ɈˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆheˆˆVVˆXeeˆˆˆˆˆˆˆˆˆˆhĩˆˆVVˆXegeˆ{vVķģwe…{·ˆˆˆˆ‹ˆˆˆīeˆˆ[V†ˆge…ˆvvķˆ{VK‹beĩeˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆheeVˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ†ˆˆˆˆˆˆˆˆˆˆˆ ŧŧ Ë ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆhˆˆhUˆˆVķˆXe;ˆˆVVˆXegˆļvvVK{weĩeĩvvVVgggg{·wvV†VKgeeĩvVVV{geeīUvv[fggguwwv†wwUvvVĩggW6{·Wew+kVgĩUgUv·whe;‡VVķVVVfegguvvvfwwwwvwwVggge{·wvw+ŧgeˆˆˆVˆˆˆgˆˆˆ·ˆˆˆK‹ˆˆĩeˆˆvVļˆggK‹ˆˆˆˆˆˆˆˆˆˆv툈wWˆˆxwˆˆˆˆˆˆˆXˆˆVKˆheĩˆUvvw+[ve·kĩfĩīVVV[feggĩ{vvVģw{g{·ēV{‡ˆˆēˆˆļ‹ˆVK‹heĩīUvv[ķggg;{·vķw+XUeeˆ{Uvŧģ·geVK{VeeegVVVWegg;vvveĩ;{vVķwggVfwweUwWvf†egu…xVV†Xeg·wĩe+[vVĩeegvvVwggg{www‹ww·eUvvVˆˆˆˆˆˆˆˆˆļggˆ;keˆļVVˆXegˆˆvvˆˆwwˆˆxwˆˆˆvggkgewwwVvw‡g…ˆˆvfˆˆwW†ˆw·…VVKke{‡VķēXeg‹ˆ{Uˆļ췈ˆ{;ˆˆhĩVķUveeŧgVwwweuwwvvVˆgggˆ{·wˆw+‹ˆv툈ggˆˆ‡ˆvvˆhwWˆUVVˆheeˆUvvˆfggXuwwļ{wwķggg;{·wķVK{eeĩeUvvV·ggg;{·w·w+‹ˆˆˆˆˆˆˆˆˆˆˆgˆˆˆVˆˆXeˆˆˆvˆhewˆVV{XeĩīˆVV[eeUvVVfggguwvvfwwwWUwwg·5{w;ķw+·vVĩ{ggkĩwwVVwWegvv{vg·ģw{·{·w+kgŧwhVī[fV[VeegeUvvvŧg{g;{ēfeekVVVŧŧw{KkgeĩeVVvVegggvv·www+‹xw툈ˆ‡Vŧ‹eeĩeVVVVgeeevvvVwgggwwwwˆww‡ˆˆˆˆˆˆˆˆXeggˆ{vvļģw{ˆ{·ēˆˆˆŧˆˆˆˆˆˆˆˆˆļˆ…ˆļˆ†ˆˆˆ‡ˆˆˆˆˆˆˆˆˆˆˆŧ‹ˆˆŧŧ…ˆˆļĩxˆļ{vˆŧģwˆļ{·ˆˆˆŧˆˆˆŧˆˆˆŧˆˆŧˆˆļ Vegg{vvvēwwwŧ{wwŧ‹ˆˆŧ‹ˆˆŧˆˆˆ°ˆˆˆ…xˆˆ†ˆ‡ˆ‡ˆ#ļˆ("ˆ(ē‚ˆˆ"ˆˆļ€hˆŧ°Uļˆļˆ VK‹keĩeUvvVļgggVVķweee‹vvVeˆˆˆˆˆˆˆˆˆˆļˆˆˆˆˆˆˆˆ‹ˆˆˆ‹ˆˆˆˆˆˆļˆˆˆˆˆˆheˆˆĩŧˆˆ… ˆˆ…(ˆˆ…(ˆˆ…ˆ‹Xˆˆ°Xˆˆe[ˆh‡ˆļ°#ˆŧ"‚ŧē‚ļ "ģļŧˆ8 ŧˆˆƒŧeeŧ°ˆˆˆ ˆˆ‡ˆˆxŧˆˆ;°ˆ"ŧļŧ"ŧĩ(ŧˆˆļŧŧk ˆx°‹ˆˆēˆˆˆ"ˆˆˆ+ˆˆh‚ˆˆUˆˆˆhgggVwwwgww·wļw+‹VVķˆeeeˆvvVˆgggˆˆˆˆˆˆˆˆˆˆˆVVˆXegˆˆvvˆXwwˆˆvwˆˆwwˆˆxwˆˆˆXVV‹VgUPevVVVgeeeUvvVgggguwwwļwwgVV† ee…°VV†°gg…ŧvv†ŧww‡ŧwwŧŧ[° …ˆˆ°…ˆˆ …ˆˆŧ[ˆˆŧ[ˆVŧ[heŧXUV°Xheˆˆˆ{ˆˆļŧˆˆŧļˆļ€Vķ°‹ĩe ˆK[ˆˆĩeXˆwwwˆww‡ˆ‹ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆXˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ;{·wĩw+‹……ļˆ……ˆˆU…ˆˆXˆˆˆˆˆˆˆˆˆˆˆ[ŧ°ˆ‹ŧˆļŧˆˆ{ ˆˆ8爈""ˆˆ"+ˆˆ(R°XUv ˆĩgˆ;{ŧĩw°ŧ…Xŧ…Xŧ€X…ŧ‹X…vV…ˆgg…ˆ·wˆˆ+[ˆˆļ…ˆˆˆ…ˆˆXˆˆˆXˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ ˆˆˆ°ˆˆˆ°ˆˆˆŧˆˆˆŧˆˆˆˆˆˆ°ˆˆˆŧ‹ˆˆĩ€ˆX[€ˆ…°UUˆ ‹ˆˆŧ‹ˆˆŧ€ˆˆ‹ˆˆ…ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ ˆˆˆ°ˆˆˆ°ˆˆˆŧˆˆˆŧˆˆˆŧˆˆŧˆˆļ ‹ˆˆŧ€ˆˆ €ˆˆŧ‹ˆˆŧ‹ˆˆŧ‹ˆˆŧˆˆˆ°ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆļ°ˆˆŧˆˆŧˆˆļ ˆˆļŧˆˆŧˆˆˆŧˆˆˆŧ°ˆˆˆ ˆˆˆˆˆˆŧˆˆˆ°ˆˆˆŧˆˆˆŧ€ˆˆŧ‹ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ ˆˆˆ°ˆˆˆ°ˆˆˆŧˆˆˆŧˆˆˆˆˆˆ°ˆˆˆŧ ‹ˆˆ°€ˆˆ €ˆˆ°‹ˆˆ ‹ˆˆŧ‹ˆˆŧ€ˆˆ‹ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ ˆˆˆ°ˆˆˆˆ ‹ˆˆŧ€ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ >Ā?ˆ™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™ˆ˜™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™‰™‰ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ˜™™ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆHD€ˆˆˆˆˆˆˆD€ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ™™ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆH@€D€D€H€ˆD@ˆD@@@HD€H@€ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆHˆˆˆˆˆˆˆˆˆˆˆŧ°ŧˆˆˆ™™ˆČˈˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆHH@@@€H@@@@@@@@ˆD€H@@ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆD€HˆˆˆH€ļŧŧ‹ˆˆ™™ˆ ŒˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆH€HHˆH@@H@@H€H@€H@@€ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆH€HˆDˆļŧ°‹ˆˆ™™ˆ ŒˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆH€ˆD€D€ˆD€D@@€D@€HD€H€H€ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆD€ˆˆˆH€ļŧŧ‹ˆˆ™™ˆĖŒˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆD€DH€Hˆˆˆˆļŧ°ŧ‹ˆˆ™™ˆĀĖ€ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆļŧŧŧ‹ˆˆ™™ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆŧŧŧˆˆˆ™™ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ™™ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ™™ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ™™ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ™™ˆDˆˆˆˆˆˆˆˆˆH€ˆˆˆˆˆˆˆˆˆˆˆˆ‰ˆˆˆDˆˆˆ‰ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ‹ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆHD€ˆˆˆH€ˆHD@ˆˆˆˆˆˆˆˆˆˆˆˆˆ˜ˆHHD€˜ˆˆ™™ˆH€D€ˆˆHDD€ˆˆˆˆˆˆˆˆˆˆ˜‰ˆˆˆˆˆˆˆ™ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆhĩīeˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆH€H@@@€HD€ˆH@€ˆˆˆˆˆˆˆˆˆˆˆˆ™ˆˆH@€ˆ˜‰ˆ™™ˆH€D€D€ˆH€ˆˆˆˆˆˆˆˆˆˆ™‰ˆˆˆD€ˆˆˆ™‰ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆVV[V†ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆHHH@@€ˆˆH@€ˆˆˆˆˆˆˆˆˆˆˆ˜™ˆˆHˆ˜™ˆ™™ˆH€ˆD€ˆDH€ˆˆˆˆˆˆˆˆˆˆ‰ˆˆˆˆˆˆˆ™€ˆˆˆˆˆˆˆˆˆˆˆˆˆˆXegge…ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆH€H€H@@€ˆˆH@€ˆˆˆˆˆˆˆˆˆˆˆ™ˆˆH€H€˜ ˆ™™ˆH€ˆHˆDHˆˆˆˆˆˆˆˆˆˆˆ‰ˆˆˆD€ˆˆˆ ˆˆˆˆˆˆˆˆˆˆˆˆheeˆ{vvv툈ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆH€H€ˆD@€H€HD@ˆˆˆˆˆˆˆˆˆˆˆˆˆˆHHˆ˜€ˆ™™ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ€ˆˆˆˆˆˆˆˆ€ˆˆˆˆˆˆˆˆˆˆˆˆVVVķģw{VK‹ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ™™ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆXeee…{·beĩeheeV†ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ™™ˆDˆˆˆˆˆˆˆˆˆˆˆˆˆH€ˆˆˆˆˆˆˆˆˆ‰ˆˆHDˆˆ‰ˆˆˆˆˆˆˆˆˆˆˆˆVVV†VKUvvVVVVfeˆˆˆˆˆˆˆˆˆˆˆˆHD€ˆˆˆH€ˆHˆˆˆˆˆˆH€ˆˆˆˆˆˆ˜HˆHDˆˆ™™ˆH€D€ˆHˆHD€Dˆˆˆˆˆˆˆˆ˜‰ˆˆˆˆˆˆ™ˆˆˆˆˆˆˆˆˆˆˆXeggeeĩĩggWegguVˆˆˆˆˆˆˆˆˆˆˆˆH€H@@@€HD€H@€D@ˆD€HD@@€ˆˆˆ™ˆ˜‰ˆ™™ˆH€D€D€ˆDH€ˆˆˆˆˆˆˆˆ™‰ˆˆDD€ˆˆ™‰ˆˆˆˆˆˆˆˆˆˆļvvvVVV6{·WvvvfgˆˆˆˆˆˆˆˆˆˆˆˆHHH@@€ˆH@@@@@@H€H@€ˆˆ˜™ˆD™ˆ™™ˆH€ˆD€ˆD€DH€ˆˆˆˆˆˆˆˆ‰ˆˆˆˆˆ™€ˆˆˆˆˆˆˆˆˆVK{w{geeew+kwwww·ˆˆˆˆˆˆˆˆˆˆˆˆH€H€H@@€ˆH@@H@€H@€ˆD€ˆˆ™ˆˆ ˆ™™ˆH€ˆHˆHˆˆˆˆˆˆˆˆˆˆ‰ˆˆDD€ˆˆ ˆˆˆˆˆˆˆˆˆheĩeĩīUvvVgĩUvwwVK‹ˆˆˆˆˆˆˆˆˆˆˆH€H€ˆD@€H€HˆD@@@H€H€H€ˆˆˆD€D€D€ˆ™™ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆH€ˆˆˆˆˆˆˆˆˆˆˆˆˆ€ˆˆˆˆˆˆˆˆ€ˆˆˆˆˆˆˆˆhUvvVV[fgggUv·gggeĩeˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ™™ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆVķggggguwwwhe;{·wvvVˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ™™ˆHH€ˆˆˆˆˆˆˆˆˆˆH€ˆˆˆˆˆˆˆˆˆˆˆ‰ˆˆˆDˆˆˆ‰ˆˆˆˆˆˆˆXe;{·wvv†ww‡VVķw+ŧgggK‹ˆˆˆˆˆˆˆˆˆˆD€ˆˆˆˆˆˆH@@€H€H€ˆˆˆˆˆˆˆˆˆ˜ˆH@@D€˜ˆˆ™™ˆˆDHD€ˆHˆHD€Dˆˆˆˆˆˆˆˆˆˆ˜‰ˆˆˆˆˆˆ™ˆˆˆˆˆˆˆˆvķw+[v{‡ˆˆXUeeeĩ;{·wĩeˆˆˆˆˆˆˆˆˆH€HH@€D€H@€ˆD@D@ˆˆˆˆˆˆˆˆˆ™ˆH@@@€˜‰ˆ™™ˆH€H€ˆDH€ˆˆˆˆˆˆˆˆˆˆ™‰ˆˆˆDˆˆˆ™‰ˆˆˆˆˆˆˆwWe·kĩ爈ļˆ{UvvVķw+[vVˆˆˆˆˆˆˆˆˆˆˆD@@@@€H@@@@€H@€ˆˆˆˆˆˆˆ˜™ˆHD@D€˜™ˆ™™ˆˆH€D€ˆD€DH€ˆˆˆˆˆˆˆˆˆˆ‰ˆˆˆˆˆˆ™€ˆˆˆˆˆˆˆxwfĩīV‹ˆVKŧģ·gggVfĩeegˆˆˆˆˆˆˆˆˆˆH@@@@@ˆHD@@@€H@€ˆˆˆˆˆˆˆ™ˆˆH€H€˜ ˆ™™ˆD€ˆHD€ˆHˆˆˆˆˆˆˆˆˆˆˆˆ‰ˆˆˆDˆˆˆ ˆˆˆˆˆˆˆˆˆˆVV[f‹heĩeVK{wweUvvVwˆˆˆˆˆˆˆˆˆHHD€ˆD€HD@€D€H@@€ˆˆˆˆˆˆˆˆˆˆH€H€˜€ˆ™™ˆˆˆˆˆˆˆˆˆˆˆˆˆˆH€ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ€ˆˆˆˆˆˆˆˆ€ˆˆˆˆˆˆˆˆˆXeggĩīUvvVeeewWvfggg{ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ™™ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆVK{vvV[ķgggVVV†eguwww‹ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ™™ˆHˆˆH€ˆˆHH€ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ‰ˆˆˆH€ˆˆˆ‰ˆˆˆˆˆˆˆheĩģw{gg;{·Wegg…xVVww·eˆˆˆˆˆˆˆˆˆˆD€ˆˆˆˆˆˆH@€ˆH€ˆH€ˆˆˆˆˆˆˆˆ˜ˆˆD@Dˆˆ™™ˆˆD€ˆH€DˆˆDHD€ˆˆˆˆˆˆˆˆˆˆˆ˜‰ˆˆˆD€ˆˆˆ™ˆˆˆˆˆˆˆUvv{·ēVvķw+;vvv†XegUvvVˆˆˆˆˆˆˆˆˆH€HH@€D€H@€D€ˆD@HD€ˆˆˆˆˆˆ™HH@€H‰ˆ™™ˆH€DH€H€H€H€ˆˆˆˆˆˆˆˆˆˆˆ™‰ˆˆˆH€ˆˆˆ™‰ˆˆˆˆˆˆļggggkg{‡VķVwww‡ˆvvķgggˆˆˆˆˆˆˆˆˆˆˆD@@@@€HD@@@@@@@€ˆˆˆˆˆˆ˜™ˆH@€˜™ˆ™™ˆˆH€H€ˆˆH€D€ˆˆˆˆˆˆˆˆˆˆˆ‰ˆˆˆH€ˆˆˆ™€ˆˆˆˆˆˆ;keewwwēXegeuwwˆhwW;{·wˆˆˆˆˆˆˆˆˆˆH@@@@@ˆH@@H@D@@€ˆˆˆˆˆˆ™ˆH@@€˜ ˆ™™ˆD€H€ˆˆˆD€ˆHD€ˆˆˆˆˆˆˆˆˆˆˆ‰ˆˆˆDˆˆˆ ˆˆˆˆˆˆˆļVVVvw‡‹ˆ{UvvVˆˆUVVķVK{ˆˆˆˆˆˆˆˆˆHHD€ˆD€H@€D@€H@@€H€ˆˆˆˆˆˆHD@H€˜€ˆ™™ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ€ˆˆˆˆˆˆˆˆ€ˆˆˆˆˆˆˆXegg…ˆˆˆļģ·gggˆˆheeeeĩeˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ™™ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆvvvfˆˆˆˆ{;{·wˆˆUvvUvvVˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ™™ˆHˆˆˆˆH€ˆˆˆDD€ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ‰ˆˆˆH€ˆˆˆ‰ˆˆˆˆˆˆˆˆwwwW†ˆˆˆhĩw+‹ˆˆfgg·gggˆˆˆˆˆˆˆˆˆˆD€ˆˆˆˆˆˆH@€ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ˜ˆHD@D€˜ˆˆ™™ˆˆD€ˆDHˆH€ˆˆˆˆˆˆˆˆˆˆˆˆˆˆ˜‰ˆˆˆD€ˆˆˆ™ˆˆˆˆˆˆˆˆxww·…VVķUvv툈Xuww;{·wˆˆˆˆˆˆˆˆˆH€HH@€D€H@€ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ™ˆH@@@€˜‰ˆ™™ˆH€D€H€ˆH€ˆˆˆˆˆˆˆˆˆˆˆˆˆˆ™‰ˆˆˆH€ˆˆˆ™‰ˆˆˆˆˆˆˆˆvVKkeeeŧgggˆˆļ{ww·w+‹ˆˆˆˆˆˆˆˆˆˆˆD@@@@€ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ˜™ˆHD@D€˜™ˆ™™ˆˆˆH€D€ˆH€ˆˆˆˆˆˆˆˆˆˆˆˆˆˆ‰ˆˆˆH€ˆˆˆ™€ˆˆˆˆˆˆˆˆgeeUvvVĩ{ŧwhVŧŧw{‡Vŧ‹ˆˆˆˆˆˆˆˆˆˆH@@@@@ˆH@€ˆˆˆˆˆˆˆˆˆˆˆˆˆˆ™ˆˆH@@€˜ ˆ™™ˆD€D€ˆˆHˆDD€ˆˆˆˆˆˆˆˆˆˆˆˆˆˆ‰ˆˆˆDˆˆˆ ˆˆˆˆˆˆˆˆˆVVVfgggkĩī[fVKkgeeeĩeˆˆˆˆˆˆˆˆˆHHD€ˆD€H@€ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆH@D€˜€ˆ™™ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ€ˆˆˆˆˆˆˆˆ€ˆˆˆˆˆˆˆˆXegguwwwVV[VeeĩeVVVVVVˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ™™ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆvvvfwwWeggeUvvVeggeeeˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ™™ˆD€ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆH€ˆˆˆˆˆˆˆ‰ˆˆH€Dˆˆ‰ˆˆˆˆˆˆˆhewwwWUvv{vvvŧgggvvvvvVˆˆˆˆˆˆˆˆˆˆD€ˆˆˆˆˆˆH@€ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ˜ˆˆH@€˜ˆˆ™™ˆD€D€HD€ˆˆHD€HDD€ˆˆˆˆˆ˜‰ˆˆD€ˆˆˆ™ˆˆˆˆˆˆˆVV{wwg·g·ģw{g;{·wwwwgggˆˆˆˆˆˆˆˆˆH€HH@€D€H@€ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ™ˆHH@€˜‰ˆ™™ˆD€D€HˆˆˆH€ˆˆˆˆˆ™‰ˆˆH€H€ˆˆ™‰ˆˆˆˆˆXeĩī5{w;{·{·ēfee+‹xwwwwwˆˆˆˆˆˆˆˆˆˆˆD@@@@€ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ˜™ˆˆHD€˜™ˆ™™ˆˆˆˆˆD€DH€ˆˆˆˆˆ‰ˆˆH€ˆˆˆ™€ˆˆˆˆˆˆVV[ķw+·w+kgkVVV툈ˆˆww‡ˆˆˆˆˆˆˆˆˆˆH@@@@@ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ™ˆˆˆH€˜ ˆ™™ˆD€ˆDHˆDHˆˆˆˆˆˆˆ‰ˆˆDˆˆˆ ˆˆˆˆˆˆXegg…ˆļˆˆļ{vVegg…xˆˆļˆļˆˆˆˆˆˆˆˆˆˆHHD€ˆD€ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆHD€H€˜€ˆ™™ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆH€ˆˆˆˆˆˆˆˆˆˆ€ˆˆˆˆˆˆˆˆ€ˆˆˆˆˆˆˆ{vv†ˆˆˆˆŧģw{vvv†ˆ‡ˆ VK‹ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ™™ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆļģw{‡ˆˆˆˆļ{·ēwww‡ˆ#ļkeĩeˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ™™ˆD€ˆˆˆˆˆˆˆˆˆˆˆH€ˆˆˆˆˆˆˆˆˆˆ‰ˆˆˆDˆˆˆ‰ˆˆˆˆˆˆˆ{·ēˆˆˆˆˆˆˆŧŧ{wwˆ("UvvVˆˆˆˆˆˆˆˆˆˆD€ˆˆˆˆˆˆHD@ˆˆˆˆˆˆˆˆˆˆˆˆˆˆ˜HHD€Dˆˆ™™ˆD€D€HD€ˆˆHDD€ˆˆˆˆˆˆˆˆ˜‰ˆˆˆˆˆˆˆ™ˆˆˆˆˆˆˆˆˆŧˆˆˆˆˆˆˆŧŧ‹ˆˆˆ(ē‚ļgggˆˆˆˆˆˆˆˆˆH€HH@€D€ˆH@€ˆˆˆˆˆˆˆˆˆˆˆˆˆ™ˆH@€H€˜‰ˆ™™ˆD€D€HˆˆH€ˆˆˆˆˆˆˆˆ™‰ˆˆˆD€ˆˆˆ™‰ˆˆˆˆˆˆˆˆŧ‹ˆˆˆˆˆŧŧ‹ˆˆˆˆ"ˆVVķwˆˆˆˆˆˆˆˆˆˆˆD@@@@€ˆH@€ˆˆˆˆˆˆˆˆˆˆˆˆ˜™ˆHHD™ˆ™™ˆˆˆˆDH€ˆˆˆˆˆˆˆˆ‰ˆˆˆˆˆˆˆ™€ˆˆˆˆˆˆˆˆˆŧŧ…ˆˆˆŧŧˆˆˆˆļ€heee‹ˆˆˆˆˆˆˆˆˆˆH@@@@@ˆˆH@€ˆˆˆˆˆˆˆˆˆˆˆˆ™H€ˆH@@ ˆ™™ˆD€ˆDHˆDHˆˆˆˆˆˆˆˆˆ‰ˆˆˆD€ˆˆˆ ˆˆˆˆˆˆˆˆļˆˆļĩxˆˆļ °ˆˆˆˆŧ°UvvVeˆˆˆˆˆˆˆˆˆHHD€ˆD€HD@ˆˆˆˆˆˆˆˆˆˆˆˆˆˆHD@HD€ˆ™™ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ€ˆˆˆˆˆˆˆˆ€ˆˆˆˆˆˆˆˆļˆˆˆĩŧ‡ˆļ°°ˆˆˆļŧŧkgggVˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ™™ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ… #ˆŧ ˆˆ‡ ˆxwwwgˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ™™ˆD€ˆˆˆˆDˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ‰ˆˆˆD€ˆˆˆ‰ˆˆˆˆˆˆˆˆˆ‹ˆˆ…("‚ŧˆˆx°‹ˆˆww·wˆˆˆˆˆˆˆˆˆHˆD€ˆD€ˆHˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ˜ˆˆHD€ˆ˜ˆˆ™™ˆˆˆH€D€ˆHD€HHHˆˆˆˆˆˆˆ˜‰ˆˆˆˆˆˆˆ™ˆˆˆˆˆˆˆˆˆ‹ˆˆ…(ē‚ļ ŧˆˆ;爈ˆļw+‹ˆˆˆˆˆˆˆˆˆH@@€ˆH€ˆˆˆH@€ˆˆˆˆˆˆˆˆˆˆˆ™ˆˆH@€ˆ˜‰ˆ™™ˆD€D€ˆˆH€ˆD€D€D€ˆˆˆˆˆˆˆ™‰ˆˆˆH€ˆˆˆ™‰ˆˆˆˆˆˆˆˆˆˆ…ˆ"ģļŧ°ˆ""ˆˆˆVV툈ˆˆˆˆˆˆˆˆHH@€H€H@€H@@ˆˆˆˆˆˆˆˆˆˆˆ˜™ˆˆHD€ˆ˜™ˆ™™ˆˆˆˆH€ˆD€D€ˆˆˆˆˆˆˆˆˆ‰ˆˆˆˆˆˆˆ™€ˆˆˆˆˆˆˆˆļ‹Xˆˆˆ8 ŧŧļŧ"+ˆˆheeeˆˆˆˆˆˆˆˆˆˆH@@@€H€H@€H@@€ˆˆˆˆˆˆˆˆˆˆˆ™ˆˆH@€ˆ˜ ˆ™™ˆD€ˆˆH€HHD€D€ˆˆˆˆˆˆˆ‰ˆˆˆDˆˆˆ ˆˆˆˆˆˆˆˆˆˆ°Xˆˆˆˆƒŧŧĩ(‚ˆˆUvvVˆˆˆˆˆˆˆˆˆˆHˆD€ˆD€HD€H€ˆˆˆˆˆˆˆˆˆˆˆˆˆˆHD€ˆ˜€ˆ™™ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ€ˆˆˆˆˆˆˆˆ€ˆˆˆˆˆˆˆˆhee[ˆheeŧŧˆˆˆˆˆhgggˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ™™ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆVVVV‹VVV† …ˆˆˆˆˆ{wwwˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ™™ˆD€ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆH€ˆˆˆˆˆˆˆ‰ˆˆˆDˆˆˆ‰ˆˆˆˆˆˆˆXeggUPeee…°°…ˆˆˆˆļŧww‡ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ™™ˆD€D€HD€ˆHˆHD€Dˆˆˆˆˆˆ˜‰ˆˆˆˆˆˆˆ™ˆˆˆˆˆˆˆˆvvvVVVVV†° …ˆˆˆˆŧļ‹ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ™™ˆD€D€HˆˆDH€ˆˆˆˆˆˆ™‰ˆˆˆH€ˆˆˆ™‰ˆˆˆˆˆˆXwwgeeegg…ŧŧ[ˆˆˆļ€ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ™™ˆˆˆˆD€DH€ˆˆˆˆˆˆ‰ˆˆˆˆˆˆˆ™€ˆˆˆˆˆˆˆvwUvvVvv†ŧŧ[ˆVVķ°‹ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ™™ˆD€ˆDHˆHˆˆˆˆˆˆˆˆ‰ˆˆˆˆˆˆˆ ˆˆˆˆˆˆˆˆwwggggww‡ŧŧ[heĩe ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ™™ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆH€ˆˆˆˆˆˆˆˆˆˆˆ€ˆˆˆˆˆˆˆˆ€ˆˆˆˆˆˆˆˆxwuwwwwwŧŧXUVK[ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ™™ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆXļwwgŧ[° °XheĩeXˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ™™ˆD€ˆˆˆˆˆˆˆˆˆˆHˆˆH€ˆˆˆˆˆˆˆˆˆ‰ˆˆˆHˆˆˆ‰ˆˆˆˆˆˆˆˆˆX;{·w[ŧ°°XUvvV…ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ™™ˆD€D€HD€ˆˆD€ˆH€Dˆˆˆˆˆˆˆˆ˜‰ˆˆˆˆˆˆˆ™ˆˆˆˆˆˆˆˆˆˆĩw+‹ˆ‹ŧ ˆĩggg…ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ™™ˆD€D€HˆˆH€DH€ˆˆˆˆˆˆˆˆ™‰ˆˆˆDˆˆˆ™‰ˆˆˆˆˆˆˆˆˆ……ļˆˆļŧˆ;{·wˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ™™ˆˆˆˆˆH€H€ˆˆˆˆˆˆˆˆ‰ˆˆˆˆˆˆ™€ˆˆˆˆˆˆˆˆˆ……ˆˆˆˆ{ ŧĩw+[ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ™™ˆD€ˆDHˆD€H€ˆˆˆˆˆˆˆˆˆ‰ˆˆˆDˆˆˆ ˆˆˆˆˆˆˆˆˆˆU…ˆˆˆˆ8ē°ŧ…Xļ…ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ™™ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ€ˆˆˆˆˆˆˆˆ€ˆˆˆˆˆˆˆˆˆˆXˆˆˆˆˆ""ŧ…Xˆ…ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ™™ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ"+ŧ€X…Xˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ™™ˆDˆˆH€ˆˆD€ˆD€ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ‰ˆˆˆDˆˆˆ‰ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ(Rŧ‹X…Xˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ™™ˆH€H€DD€H€ˆD€D€HD€HHˆˆˆ˜‰ˆˆˆˆˆˆ™ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ ‹ˆˆ…ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ™™ˆH€H€HH€ˆD€D€HˆD€ˆˆˆ™‰ˆˆˆDˆˆˆ™‰ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ°ĩ€ˆXˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ™™ˆH€H€H€ˆˆˆD€ˆˆˆˆ‰ˆˆˆˆˆˆ™€ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ°[€ˆ…ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ™™ˆH€H€ˆDDˆD€ˆDHHD€ˆˆˆ‰ˆˆˆDˆˆˆ ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆŧ°UUˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ™™ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ€ˆˆˆˆˆˆˆˆ€ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆŧ ‹ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ™™ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆŧ‹ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ™™ˆD€ˆˆˆˆˆˆˆˆˆˆD€ˆˆˆˆˆˆH€ˆˆˆˆˆˆ‰ˆˆH€Hˆˆ‰ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ°ŧ€ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ™™ˆD€D€HD€ˆHˆD€DˆH€D€ˆ˜‰ˆˆD€ˆˆˆ™ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆŧ‹ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ™™ˆD€D€HˆˆHH€ˆ™‰ˆˆH€Dˆˆ™‰ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ ‹ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ™™ˆˆˆˆD€H€ˆ‰ˆˆH€ˆˆ™€ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ°ŧ€ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ™™ˆD€ˆDHˆD€HH€DˆH€ˆ‰ˆˆDDˆˆ ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ° €ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ™™ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ€ˆˆˆˆˆˆˆˆ€ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆŧŧ‹ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ™™ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆŧŧ‹ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ™™ˆˆˆˆˆˆˆˆD€ˆˆˆˆˆˆH€ˆˆˆˆˆˆˆˆˆˆˆ‰ˆˆˆˆD€ˆ‰ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆŧŧ‹ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ™™ˆˆHD€H€ˆHD€HˆDˆˆˆˆˆˆˆˆ˜‰ˆHˆH@€ˆ™ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆŧŧˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ™™ˆˆHDˆD€H€ˆˆˆˆˆˆˆˆ™‰ˆˆˆH@€ˆ™‰ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆļ °ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ™™ˆˆD€H€ˆD€ˆH€Hˆˆˆˆˆˆˆˆ‰ˆˆˆH@€ˆ™€ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆļ°°ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ™™ˆDHDH€ˆD€HD€ˆˆˆˆˆˆˆˆˆˆ‰ˆHD@@ˆˆ ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆŧ ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ™™ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆH€ˆˆˆˆˆˆˆˆˆ€ˆˆˆˆˆˆˆˆ€ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆŧˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ™™ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆļ ŧˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ™™ˆˆˆˆˆˆˆˆHˆˆD€D€ˆD€ˆˆH€ˆˆˆˆˆˆ‰ˆˆˆD€ˆˆˆ‰ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆļŧ°ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ™™ˆˆHD€H€ˆˆH€H€ˆˆHDˆˆˆˆˆ˜‰ˆˆˆˆˆˆˆ™ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆŧŧˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ™™ˆˆHDˆˆH€H€ˆD€H€ˆˆˆˆˆ™‰ˆˆˆH€ˆˆˆ™‰ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆŧŧ€ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ™™ˆˆD€H€ˆˆH€H€ˆˆH€ˆˆˆˆˆ‰ˆˆˆˆˆˆˆ™€ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆŧŧ‹ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ™™ˆDHDH€ˆHHDDˆD€D€ˆˆˆˆˆˆ‰ˆˆˆDˆˆˆ ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ ‹ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ™™ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ€ˆˆˆˆˆˆˆˆ€ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ°°€ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ™™ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ° €ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ™™ˆˆˆˆˆˆˆˆDD€D€ˆD€ˆˆˆˆˆˆˆˆˆˆ‰ˆˆD€Hˆˆ‰ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆŧ°‹ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ™™ˆˆHD€H€ˆˆˆH€H€ˆD€HˆHˆˆ˜‰ˆˆˆˆˆ™ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆŧ ‹ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ™™ˆˆHDˆD€H€H€ˆDHD€ˆˆ™‰ˆˆH€ˆˆ™‰ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆŧ‹ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ™™ˆˆD€H€ˆˆH€H€ˆD€ˆˆˆ‰ˆˆˆˆˆ™€ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ°ŧ€ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ™™ˆDHDH€ˆˆDDˆDHHD€ˆˆ‰ˆˆDD€ˆˆ ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆŧ‹ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ™™ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ€ˆˆˆˆˆˆˆˆ€ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ ‹ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ™™ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ°ŧ€ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ™™ˆˆˆˆˆˆˆˆDD€D€ˆHˆˆˆˆˆˆH€ˆˆˆˆ‰ˆH€DHˆ‰ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ™™ˆˆHD€H€ˆˆˆH€H€ˆˆH€D€Dˆˆˆ˜‰ˆD€ˆˆ™ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ™™ˆˆHDˆD€H€H€ˆˆH€ˆˆˆ™‰ˆH€D€ˆ™‰ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ™™ˆˆD€H€ˆˆH€H€ˆˆH€ˆˆˆ‰ˆH€ˆˆ™€ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ™™ˆDHDH€ˆˆDDˆHH€Hˆˆˆˆ‰ˆDD€D€ˆ ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ™™ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ€ˆˆˆˆˆˆˆˆ€ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ™™ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ™™ˆˆˆˆˆˆˆˆˆˆˆˆˆˆH€ˆˆˆˆˆˆˆˆˆˆˆˆˆ‰ˆˆˆD€ˆˆˆ‰ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ™™ˆˆD€HˆHH€D€Dˆˆˆˆˆˆˆˆˆˆˆˆ˜‰ˆˆˆˆˆˆˆ™ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ™™ˆˆˆH€ˆˆˆˆˆˆˆˆˆˆˆˆ™‰ˆˆˆH€ˆˆˆ™‰ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ™™ˆD€ˆˆH€ˆˆˆˆˆˆˆˆˆˆˆˆ‰ˆˆˆˆˆˆˆ™€ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ™™ˆH€HˆHH€Hˆˆˆˆˆˆˆˆˆˆˆˆˆ‰ˆˆˆD€ˆˆˆ ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ™™ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ€ˆˆˆˆˆˆˆˆ€ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ™™‰ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ˜™˜™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™‰ˆ™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™ˆō\-- title: Tree Generator -- author: ArchaicVirus -- desc: Procedural tree generator -- site: https://github.com/archaicvirus -- license: GNU General Public License v3.0 -- version: 3 -- script: lua UI_CORNER = 224 UI_CURSOR = 271 UI_BG = 8 UI_FG = 9 UI_TEXT_BG = 0 UI_TEXT_FG = 4 UI_SHADOW = 0 UI_ARROW = 240 UI_BUTTON = 241 UI_BUTTON2 = 242 ui = {} --tic80 wiki function pal(c0, c1) if not c0 and not c1 then for i = 0, 15 do poke4(0x3FF0 * 2 + i, i) end elseif type(c0) == 'table' then for i = 1, #c0, 2 do poke4(0x3FF0*2 + c0[i], c0[i + 1]) end else poke4(0x3FF0*2 + c0, c1) end end function ui.draw_panel(x, y, w, h, bg, fg, label, shadow) bg, fg = bg or UI_BG, fg or UI_FG local text_width = print(label, 0, -10, 0, false, 1, true) if text_width > w + 7 then w = text_width + 7 end rect(x + 2, y + 2, w - 4, h - 4, bg) -- background fill if label then pal(1, fg) pal(8, fg) spr(UI_CORNER, x, y, 0) spr(UI_CORNER, x + w - 8, y, 0, 1, 1) pal() pal(1, fg) pal(8, bg) spr(UI_CORNER, x + w - 8, y + h - 8, 0, 1, 3) spr(UI_CORNER, x, y + h - 8, 0, 1, 2) pal() rect(x, y + 6, w, 3, fg) -- header lower-fill rect(x + 2, y + h - 3, w - 4, 1, fg) -- bottom footer fill rect(x + 6, y + 2, w - 12, 4, fg)--header fill prints(label, x + w/2 - text_width/2, y + 2, 0, 4) -- header text else pal(1, fg) spr(UI_CORNER, x + w - 8, y + h - 8, {0, 8}, 1, 3) spr(UI_CORNER, x, y + h - 8, {0, 8}, 1, 2) spr(UI_CORNER, x, y, {0, 8}) spr(UI_CORNER, x + w - 8, y, {0, 8}, 1, 1) pal() end rect(x + 6, y, w - 12, 2, fg) -- top border rect(x, y + 6, 2, h - 12, fg) -- left border rect(x + w - 2, y + 6, 2, h - 12, fg) -- right border rect(x + 6, y + h - 2, w - 12, 2, fg) -- bottom border if shadow then line(x + 4, y + h, x + w - 3, y + h, shadow) -- shadow line(x + w - 2, y + h - 1, x + w, y + h - 3, shadow)-- shadow line(x + w, y + 4, x + w, y + h - 4, shadow)-- shadow end end function ui.draw_button(x, y, flip, id, color, shadow_color, hover_color) color, shadow_color, hover_color = color or 12, shadow_color or 0, hover_color or 11 local _mouse, _box, ck, p = {x = cursor.x, y = cursor.y}, {x = x, y = y, w = 8, h = 8}, 1, {4, color, 2, shadow_color, 12, color} local hov = hovered(_mouse, _box) if hov and not cursor.l then p = {2, shadow_color, 12, hover_color, 4, hover_color} elseif hov and cursor.l then p = {2, hover_color, 12, hover_color, 4, hover_color} ck = {1, 4} end pal(p) spr(id, x, y, ck, 1, flip) pal() if hov and cursor.l and not cursor.ll then return true end return false end vec2 = {} vec2_mt = {} vec2_mt.__index = vec2_mt function vec2_mt:__add( v ) return vec2(self.x + v.x, self.y + v.y) end function vec2_mt:__sub( v ) return vec2(self.x - v.x, self.y - v.y) end function vec2_mt:__mul( v ) trace('v = ' .. tostring(v)) if type(v) == "table" then return vec2(self.x * v.x, self.y * v.y) else return vec2(self.x * v, self.y * v) end end function vec2_mt:__div( v ) if type(v) == "table" then return vec2(self.x / v.x, self.y / v.y) else return vec2(self.x / v, self.y / v) end end function vec2_mt:__unm() return vec2(-self.x, -self.y) end function vec2_mt:dot( v ) return self.x * v.x + self.y * v.y end function vec2_mt:length() return math.sqrt(self.x * self.x + self.y * self.y) end function vec2_mt:normalize() local length = self:length() if length == 0 then return vec2(0, 0) end return vec2(self.x / length, self.y / length) end function vec2_mt:rotate(angle) local cs = math.cos(angle) local sn = math.sin(angle) return vec2(self.x * cs - self.y * sn, self.x * sn + self.y * cs) end function vec2_mt:div() return self.x / self.y end function vec2_mt:min(v) if type(v) == "table" then return vec2(math.min(self.x, v.x), math.min(self.y, v.y)) else return math.min(self.x, self.y) end end function vec2_mt:max(v) if type(v) == "table" then return vec2(math.max(self.x, v.x), math.max(self.y, v.y)) else return math.max(self.x, self.y) end end function vec2_mt:abs() return vec2(math.abs(self.x), math.abs(self.y)) end function vec2_mt:mix(v, n) return self * n + v * math.max(0, 1 - n) end function vec2_mt:__tostring() return ("(%g | %g)"):format(self:tuple()) end function vec2_mt:tuple() return self.x, self.y end setmetatable(vec2, {__call = function(V, x, y ) return setmetatable({x = x or 0, y = y or x or 0}, vec2_mt) end}) tree = {} tick = 0 floor = math.floor tx, ty = 120, 120 cursor = { x = 8, y = 8, id = 352, lx = 8, ly = 8, sx = 0, sy = 0, lsx = 0, lsy = 0, l = false, ll = false, m = false, lm = false, r = false, lr = false, prog = false, hold_time = 0, drag = false, } tree_settings = { --left page {name = 'Trunk Width', val = 5, min = 1, max = 24, step = 1, update = function() update_trunk_width() end}, {name = 'Trunk Height', val = 38, min = 16, max = 80, step = 1, update = function() update_trunk_height() end}, {name = 'Step Height', val = 8, min = 1, max = 8, step = 1}, {name = 'Shift/Step', val = 1, min = 0, max = 8, step = 1}, {name = 'Sprite ID', val = 0, min = 0, max = 15, step = 1, update = function(self) tree.id = self.val end}, {name = 'Branch Length', val = 12, min = 8, max = 32, step = 1}, {name = 'Branch Width', val = 3, min = 2, max = 8, step = 1}, {name = 'Br. Thickness', val = 2, min = 1, max = 8, step = 1}, {name = 'Branch Height', val = 4, min = 1, max = 16, step = 1}, {name = 'Branch Shift', val = 8, min = 1, max = 8, step = 1}, {name = 'Total Branches', val = 5, min = 0, max = 16, step = 1}, {name = 'Branch Deviation', val = 16, min = 1, max = 16, step = 1}, {name = 'Leaf Density', val = 1.0, min = 0, max = 1.0, step = 0.05}, {name = 'Leaf Cull Dist', val = 2, min = 0, max = 10, step = 1}, {name = 'Leaf Fill Radius', val = 12, min = 4, max = 24, step = 1}, {name = 'Leaf Fill Count', val = 65, min = 0, max = 150, step = 5}, {name = 'Vine count', val = 2, min = 0, max = 10, step = 1}, --right page {name = 'Fruit ID', val = 33, min = 32, max = 47, step = 1}, {name = 'Fruit Density', val = 0.15, min = 0, max = 1.0, step = 0.05}, {name = 'Save Width', val = 40, min = 1, max = 128, step = 1}, {name = 'Save Height', val = 60, min = 1, max = 128, step = 1}, {name = 'Save X', val = 102, min = 0, max = 239, step = 1}, {name = 'Save Y', val = 60, min = 0, max = 125, step = 1}, {name = 'Save ID', val = 256, min = 0, max = 511, step = 1}, {name = 'BG Color', val = 8, min = 0, max = 15, step = 1}, } function copyScreenToSprite(startX, startY, width, height, spriteStart) local spriteWidth = 8 local spriteHeight = 8 local spriteLineBytes = spriteWidth / 2 -- Number of bytes in a sprite line local screenLineBytes = 240 / 2 -- Number of bytes in a screen line local spritesPerRow = 16 -- Number of sprites per row in sprite RAM -- Calculate the number of full and partial sprites to copy local numSpritesX = math.ceil(width / spriteWidth) local numSpritesY = math.ceil(height / spriteHeight) local partialSpriteWidth = width % spriteWidth local partialSpriteHeight = height % spriteHeight for spriteY = 0, numSpritesY - 1 do for spriteX = 0, numSpritesX - 1 do local numLines = spriteHeight if spriteY == numSpritesY - 1 and partialSpriteHeight > 0 then numLines = partialSpriteHeight end for spriteLine = 0, numLines - 1 do -- Calculate the number of bytes to copy for this line local copyBytes = spriteLineBytes if spriteX == numSpritesX - 1 and partialSpriteWidth > 0 then copyBytes = math.ceil(partialSpriteWidth / 2) end -- Calculate addresses in screen and sprite RAM local screenAddr = 0x0000 + ((startY + spriteY * spriteHeight + spriteLine) * screenLineBytes) + math.floor((startX + spriteX * spriteWidth) / 2) local spriteIndex = spriteStart + spriteY * spritesPerRow + spriteX local spriteAddr = 0x4000 + (spriteIndex * 32) + spriteLine * spriteLineBytes -- Copy the line of the sprite memcpy(spriteAddr, screenAddr, copyBytes) end end end end function save_tree() local t = tree_settings local save_width, save_height, save_x, save_y, save_id = t[20].val, t[21].val, t[22].val, t[23].val, t[24].val local x, y, w, h = save_x, save_y, save_width, save_height --startX, startY, width, height, spriteStart copyScreenToSprite(x, y, w, h, save_id) --trace('x: ' .. x .. ' y: ' .. y .. ' w: ' .. w .. ' h: ' .. h) sync(0,0,true) end function clamp(val, min, max) return math.max(min, math.min(val, max)) end function draw_cable(p1, p2, color, sag) -- calculate the length and midpoint of the cable local dx = p2.x - p1.x local dy = p2.y - p1.y local length = math.sqrt(dx * dx + dy * dy) local midpoint = { x = (p1.x + p2.x) / 2, y = (p1.y + p2.y) / 2 } -- calculate the height of the sag local sag_height = math.max(length / 8, sag) -- draw the cable for x = 0, length do local y = math.sin(x / length * math.pi) * sag_height local px = p1.x + dx * x / length + 0.5 local py = p1.y + dy * x / length + y + 0.5 if x > 0 then local px_prev = p1.x + dx * (x - 1) / length + 0.5 local py_prev = p1.y + dy * (x - 1) / length + math.sin((x - 1) / length * math.pi) * sag_height + 0.5 line(px_prev, py_prev, px, py, color) else pix(px, py, color) end end end function remap(n, a, b, c, d) return c + (n - a) * (d - c) / (b - a) end function prints(txt, x, y, bg, fg, shadow_offset) bg, fg = bg or 0, fg or 4 shadow_offset = shadow_offset or {x = 1, y = 0} print(txt, x + shadow_offset.x, y + shadow_offset.y, bg, false, 1, true) print(txt, x, y, fg, false, 1, true) end function text_width(txt) return print(txt, 0, -10, 0, false, 1, true) end function hovered(_mouse, _box) local mx, my, bx, by, bw, bh = _mouse.x, _mouse.y, _box.x, _box.y, _box.w, _box.h return mx >= bx and mx < bx + bw and my >= by and my < by + bh end function update_cursor_state() local x, y, l, m, r, sx, sy = mouse() --update hold state for left and right click if l and cursor.l and not cursor.held_left and not cursor.r then cursor.held_left = true end if r and cursor.r and not cursor.held_right and not cursor.l then cursor.held_right = true end if cursor.held_left or cursor.held_right then cursor.hold_time = cursor.hold_time + 1 end if not l and cursor.held_left then cursor.held_left = false cursor.hold_time = 0 end if not r and cursor.held_right then cursor.held_right = false cursor.hold_time = 0 end cursor.lx, cursor.ly, cursor.ll, cursor.lm, cursor.lr, cursor.lsx, cursor.lsy = cursor.x, cursor.y, cursor.l, cursor.m, cursor.r, cursor.sx, cursor.sy cursor.x, cursor.y, cursor.l, cursor.m, cursor.r, cursor.sx, cursor.sy = x, y, l, m, r, sx, sy end function draw_ui() local col = tree_settings[25].val ui.draw_panel(0, 0, 240, 136, col, 9, false) prints('Tree Generator', 120 - text_width('Tree Generator')/2, 3) --left set of ui buttons for i = 1, 17 do local v = tree_settings[i] local x, y = 4, 15 + (i-1) * 7 prints(v.name, x, y) --x, y, flip, id, color, shadow_color, hover_color if ui.draw_button(62, y - 1, 1, UI_ARROW, 9, 0, 10) then v.val = clamp(v.val - v.step, v.min, v.max) if v.update then v:update() end --generate_tree() end if ui.draw_button(81, y - 1, 0, UI_ARROW, 9, 0, 10) then v.val = clamp(v.val + v.step, v.min, v.max) if v.update then v:update() end --generate_tree() end prints(v.val, 76 - floor(text_width(v.val)/2), y) end --right set of ui buttons for i = 18, #tree_settings do local v = tree_settings[i] local x, y = 165, 15 + (i-18) * 7 prints(v.name, x, y) --x, y, flip, id, color, shadow_color, hover_color if ui.draw_button(x + 50, y - 1, 1, UI_ARROW, 9, 0, 10) then v.val = clamp(v.val - v.step, v.min, v.max) if v.update then v:update() end --generate_tree() end if ui.draw_button(x + 65, y - 1, 0, UI_ARROW, 9, 0, 10) then v.val = clamp(v.val + v.step, v.min, v.max) if v.update then v:update() end --generate_tree() end prints(v.val, x + 62 - floor(text_width(v.val)/2), y) end --Re-genrate tree button if ui.draw_button(3, 3, 0, UI_BUTTON, 12, 0, 11) then local width, height, step, rotation, id = table.unpack(tree_settings) tree = generate_tree(tx, ty, width.val, height.val, step.val, rotation.val, id.val) end end function generate_tree() --generate the main trunk tree = {} local t = tree_settings local tw, th, sh, ss, sid = t[1], t[2], t[3], t[4], t[5] local bl, bw, bt, bh, bs, nb, bd, lc, vn = t[6], t[7], t[8], t[9], t[10], t[11], t[12], t[14], t[17] local rad, count = t[15], t[16].val tree.id = sid.val local x, y = tx, ty tree.trunk = {{x1 = x, y1 = y, x2 = x + tw.val, y2 = y}} local i, last_height = 2, y while last_height > y - th.val do last_height = clamp(last_height - sh.val, y - th.val, y) local x1, x2 = tree.trunk[i-1].x1, tree.trunk[i-1].x2 local shift = floor(math.random(-ss.val, ss.val)) tree.trunk[i] = {x1 = x1 + shift, y1 = last_height, x2 = x2 + shift, y2 = last_height} i = i + 1 end --generate the branches tree.branches = {} for i = 1, nb.val do tree.branches[i] = {} tree.branches[i].wood = generate_branch(i) tree.branches[i].leaves = generate_leaves(tree.branches[i].wood) tree.branches[i].fruit = generate_fruit(tree.branches[i].wood) end --generate top leaves fill tree.fleaves = {[1] = {}, [2] = {}} local sx, sy = tree.trunk[#tree.trunk].x1 + t[1].val/2 - 4, ty - t[2].val - rad.val for i = 1, count do --local x, y = floor(sx + math.sin(math.random(-10, 10)*100)), floor(sy + math.cos(math.random(-10, 10)*100)) --circb(x, y, 6, 2) if math.random() < 0.5 then local side = math.random() > 0.5 local angle = math.random() * 2 * math.pi -- Random angle in radians local distance = math.sqrt(math.random()) * rad.val -- Random distance within the radius local x = sx + distance * math.cos(angle) local y = sy + distance * math.sin(angle) table.insert(side and tree.fleaves[1] or tree.fleaves[2], {x = x, y = y, id = floor(math.random(2))}) end end --generate hanging vines tree.vines = {} for i = 1, vn.val do table.insert(tree.vines, generate_vine()) end return tree end function generate_leaves(branch) local leaves = {[1] = {}, [2] = {}} local leaf_density = tree_settings[13].val for i = #branch, 1, -1 do local step = 1 if branch[i].x1 and math.random() < leaf_density then local xv = branch[i].x1 - 4 local yv = branch[i].y1 - 4 --local x = clamp(xv, tx + tw.val/2 - 16, tx + tw.val/2 + 16) --local y = clamp(yv, ty - th.val, ty) local side = math.random() > 0.5 table.insert(side and leaves[1] or leaves[2], {x = xv, y = yv, id = floor(math.random(2))}) end if branch[i].x1 and math.random() < leaf_density then local xv = branch[i].x2 - 4 local yv = branch[i].y2 - 4 local side = math.random() > 0.5 table.insert(side and leaves[1] or leaves[2], {x = xv, y = yv, id = floor(math.random(2))}) end step = step + 1 end return leaves end function generate_fruit(branch) local t = tree_settings local fruit_id, fruit_count = t[18].val, t[19].val local fruit = {[1] = {}, [2] = {}} for i = #branch, 1, -1 do local step = 1 if branch[i].x1 and math.random() < fruit_count then local xv = branch[i].x1 - 4 local yv = branch[i].y1 - 4 --local x = clamp(xv, tx + tw.val/2 - 16, tx + tw.val/2 + 16) --local y = clamp(yv, ty - th.val, ty) local side = math.random() > 0.5 table.insert(side and fruit[1] or fruit[2], {x = xv, y = yv, id = floor(math.random(2))}) end if branch[i].x1 and math.random() < fruit_count then local xv = branch[i].x2 - 4 local yv = branch[i].y2 - 4 local side = math.random() > 0.5 table.insert(side and fruit[1] or fruit[2], {x = xv, y = yv, id = floor(math.random(2))}) end step = step + 1 end return fruit end function generate_branch(n) local t = tree_settings local tw, th, sh, ss, id = t[1], t[2], t[3], t[4], t[5] local bl, bw, bt, bh, bs, nb, bd, lc = t[6], t[7], t[8], t[9], t[10], t[11], t[12], t[14] local voff = clamp(n*(floor(math.random(-bd.val,bd.val))), -2, 12) local dir = n%2 == 0 --find vertical trunk segment to attach branch local max_height = ty - th.val local index = math.ceil(remap(bh.val, 1, 16, 1, #tree.trunk - 1)) local x1 = dir and tree.trunk[index + 1].x2 or tree.trunk[index + 1].x1 local y1 = clamp(tree.trunk[index+1].y1 - voff, max_height, ty) local x2 = dir and tree.trunk[index].x2 or tree.trunk[index].x1 local y2 = clamp(y1 + bt.val, max_height, ty) local x, y = tx, ty local branch = {{x1 = x1, y1 = y1, x2 = x2, y2 = y2}} local i, last_x = 2, not dir and x or x + tw.val if dir then while last_x < x + bl.val + tw.val do last_x = clamp(last_x + bw.val, x, x + bl.val + tw.val) local shift = floor(math.random(bs.val)) local x1, x2, y1, y2 = last_x, last_x, branch[i-1].y1 - shift, branch[i-1].y2 - shift --x1 = floor(clamp(x1, tx + tw.val/2 - 20, tx + tw.val/2 + 20)) --y1 = floor(clamp(y1, ty - th.val, ty)) --x2 = floor(clamp(x2, tx + tw.val/2 - 20, tx + tw.val/2 + 20)) --y2 = floor(clamp(y2, ty - th.val, ty)) branch[i] = {x1 = x1, y1 = y1, x2 = x2, y2 = y2} i = i + 1 end else while last_x > x - bl.val do last_x = clamp(last_x - bw.val, x - bl.val, x) local shift = floor(math.random(bs.val)) local x1, x2, y1, y2 = last_x, last_x, branch[i-1].y1 - shift, branch[i-1].y2 - shift --x1 = floor(clamp(x1, tx + tw.val/2 - 20, tx + tw.val/2 + 20)) --y1 = floor(clamp(y1, ty - th.val, ty)) --x2 = floor(clamp(x2, tx + tw.val/2 - 20, tx + tw.val/2 + 20)) --y2 = floor(clamp(y2, ty - th.val, ty)) branch[i] = {x1 = x1, y1 = y1, x2 = x2, y2 = y2} i = i + 1 end end return branch end function generate_vine() local vine = {} local branch1, branch2 = math.ceil(math.random(#tree.branches)), math.ceil(math.random(#tree.branches)) local p1, p2 = tree.branches[branch1].wood[math.ceil(math.random(#tree.branches[branch1].wood))], tree.branches[branch2].wood[math.ceil(math.random(#tree.branches[branch2].wood))] return {x1 = p1.x1, y1 = p1.y1, x2 = p2.x2, y2 = p2.y2, color = 7 - floor(math.random(2)), sag = floor(math.random(10, 20))} end function update_trunk_width() local trunk_width = tree_settings[1].val for i = 1, #tree.trunk do local old_width = tree.trunk[i].x2 - tree.trunk[i].x1 tree.trunk[i].x1 = tree.trunk[i].x1 + floor(old_width/2) - floor(trunk_width/2) tree.trunk[i].x2 = tree.trunk[i].x1 + trunk_width end end function update_trunk_height(old_height) local last_index = #tree.trunk local old_height = ty - tree.trunk[last_index].y1 local new_height = tree_settings[2].val local step = tree_settings[3].val local ss = tree_settings[4].val local segment_height = tree.trunk[last_index - 1].y1 - tree.trunk[last_index].y1 --if we're taller now if old_height < new_height then if segment_height < step then --raise current line tree.trunk[last_index].y1 = tree.trunk[last_index].y1 - 1 tree.trunk[last_index].y2 = tree.trunk[last_index].y2 - 1 else --add additional segment local shift = floor(math.random(-ss, ss)) table.insert(tree.trunk, {x1 = tree.trunk[last_index].x1 + shift, y1 = tree.trunk[last_index].y1 - 1, x2 = tree.trunk[last_index].x2 + shift, y2 = tree.trunk[last_index].y2 - 1}) end else --we're shorter now if segment_height > 1 then --reduce top segment tree.trunk[last_index].y1 = tree.trunk[last_index].y1 + 1 tree.trunk[last_index].y2 = tree.trunk[last_index].y2 + 1 else --or delete segment if h == 0 table.remove(tree.trunk, last_index) end end end function mesh_fill(lines, id) id = id or 0 local u = 8 * (id % 16) local v = 8 * floor(id / 16) for i = 1, #lines - 1 do --line(floor(tree.trunk[i].x1), floor(tree.trunk[i].y1), floor(tree.trunk[i+1].x1), floor(tree.trunk[i+1].y1), i%2 == 0 and 2 or 9) --line(floor(tree.trunk[i].x2), floor(tree.trunk[i].y2), floor(tree.trunk[i+1].x2), floor(tree.trunk[i+1].y2), i%2 == 0 and 2 or 9) -- Draw bottom triangle ttri( lines[i+0].x1, lines[i+0].y1, lines[i+0].x2, lines[i+0].y2, lines[i+1].x1, lines[i+1].y1, u, v+8, u+8, v+8, u, v, 0, 1 ) -- Draw top triangle ttri( lines[i+0].x2, lines[i+0].y2, lines[i+1].x1, lines[i+1].y1, lines[i+1].x2, lines[i+1].y2, u+8, v+8, u, v, u+8, v, 0, 1 ) end end function draw_tree() local t = tree_settings local tw, th, sh, ss, sid = t[1].val, t[2].val, t[3].val, t[4].val, t[5].val local bl, bw, bt, bh, bs, nb, bd, ld, leaf_cull_distance = t[6].val, t[7].val, t[8].val, t[9].val, t[10].val, t[11].val, t[12].val, t[13], t[14].val local fruit_id = t[18].val --draw background leaves first for k, v in ipairs(tree.branches) do --leaves for i, j in ipairs(v.leaves[1]) do if i <= leaf_cull_distance then spr(16 + j.id, j.x, j.y, 1, 1) end end --fruits for i, j in ipairs(v.fruit[1]) do --if i <= leaf_cull_distance then spr(fruit_id, j.x, j.y, 1, 1) --end end end for k, v in ipairs(tree.fleaves[1]) do spr(16 + v.id, v.x, v.y, 1, 1) end --draw main trunk mesh_fill(tree.trunk, tree.id) --draw all branches for i = 1, #tree.branches do mesh_fill(tree.branches[i].wood, tree.id) end for k, v in ipairs(tree.vines) do draw_cable({x = v.x1, y = v.y1}, {x = v.x2, y = v.y2}, v.color, v.sag) end --draw foreground leaves last for k, v in ipairs(tree.branches) do for i, j in ipairs(v.leaves[1]) do if i <= leaf_cull_distance then spr(16 + j.id, j.x, j.y, 1, 1) end end --fruits for i, j in ipairs(v.fruit[2]) do --if i <= leaf_cull_distance then spr(fruit_id, j.x, j.y, 1, 1) --end end for i, j in ipairs(v.fruit[1]) do --if i <= leaf_cull_distance then spr(fruit_id, j.x, j.y, 1, 1) --end end end for k, v in ipairs(tree.fleaves[2]) do spr(16 + v.id, v.x, v.y, 1, 1) end local x, y = tree.trunk[#tree.trunk].x1 + tree_settings[1].val/2, tree.trunk[#tree.trunk].y1 local radius = tree_settings[15].val --circb(x, y, radius, 2) end tree = generate_tree() function TIC() cls(8) --cursor poke(0x3FFB, UI_CURSOR) --border poke(0x03FF8, 8) update_cursor_state() draw_ui() draw_tree() if keyp(20) then save_tree() end --save button prints('Save ->', 198, 4) if ui.draw_button(225, 3, 0, UI_BUTTON2, 12, 0, 11) then trace('saving tree') save_tree() end local t = tree_settings local save_width, save_height, save_x, save_y, save_id = t[20].val, t[21].val, t[22].val, t[23].val, t[24].val local x, y, w, h = save_x, save_y, save_width, save_height rectb(x-1, y-1, w+2, h+2, 2) tick = tick + 1 end