ΞΜΜΜ̈ˆˆ¬ͺͺͺ¬ˆˆˆ¬ΜΜΜ¬ΜΐΜ¬ΜΐΜ¬ΜΐΜΜΜμΜξͺͺΐΐξΜ¬ΐΜΐ¬ΐΐΐ¬ΐΐΐ¬ΐΐΞΜΜΜ̈ˆˆ¬ͺͺͺ¬ˆˆˆ¬ΜΜΜ¬ΜΜΜ¬ΜΐΜ¬ΜΐΜΜΜμΜξͺͺΐΐξΜ¬ΐΜΜ¬ΐΐΐ¬ΐΐΐ¬ΐΐ¬ΜΜΜ¬ͺͺͺ¬ͺ¬ͺ¬ͺΚΜ¬ͺͺͺŒˆˆˆΜΐΜΞΜΜΞΜ¬Μͺͺΐμ¬ͺΐξͺͺΐξͺͺΐΜξΐμξΜΜξξ¬ΜΜΜ¬ͺͺͺ¬ͺ¬ͺ¬ͺΚΜ¬ͺͺͺŒˆˆˆΜΐΜΞΜΜΞΜ¬Μͺͺΐμ¬ͺΐξͺͺΐξͺͺΐΜξΐμξΜΜξξ >ΐ?3333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333ˆˆ833333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333ˆˆˆˆ8333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333ƒˆˆˆˆˆ333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333ˆˆˆˆˆˆ833333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333ˆˆˆˆˆˆ83333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333ƒˆˆˆˆˆˆˆ333333333333333333333333333333333333333333333333333333333333333333333333333333333333333ΜΜ<33333333333ΜΜ<33333333ƒˆˆˆˆˆˆˆ333333333ΜΜ<33333333333ΜΜ<33333333333ΜΜ<33333333333ΜΜ<33333333333333333333333333333333ΜΜΜΜ<333333333ΜΜΜΜ<3333333ƒˆˆˆˆˆˆˆ33333333ΜΜΜΜ<333333333ΜΜΜΜ<333333333ΜΜΜΜ<333333333ΜΜΜΜ<333333333333333333333333333333ΓΜΜΜΜΜ33333333ΓΜΜΜΜΜ3333333ƒˆˆˆˆˆˆˆ3333333ΓΜΜΜΜΜ33333333ΓΜΜΜΜΜ33333333ΓΜΜΜΜΜ33333333ΓΜΜΜΜΜ333333333333333333333333333333ΜΜΜΜΜΜ<3333333ΜΜΜΜΜΜ<333333ƒˆˆˆˆˆˆˆ3333333ΜΜΜΜΜΜ<3333333ΜΜΜΜΜΜ<3333333ΜΜΜΜΜΜ<3333333ΜΜΜΜΜΜ<33333333333333333333333333333ΜΜΜΜΜΜ<3333333ΜΜΜΜΜΜ<3333333ˆˆˆˆˆˆ83333333ΜΜΜΜΜΜ<3333333ΜΜΜΜΜΜ<3333333ΜΜΜΜΜΜ<3333333ΜΜΜΜΜΜ<3333333333333333333333333333ΓΜΜΜΜΜΜΜ333333ΓΜΜΜΜΜΜΜ333333ȈˆˆˆˆΘ333333ΓΜΜΜΜΜΜΜ333333ΓΜΜΜΜΜΜΜ333333ΓΜΜΜΜΜΜΜ333333ΓΜΜΜΜΜΜΜ3333333333333333333333333333ΓΜΜΜΜΜΜΜ333333ΓΜΜΜΜΜΜΜ333333̈ˆˆˆˆΜ333333ΓΜΜΜΜΜΜΜ333333ΓΜΜΜΜΜΜΜ333333ΓΜΜΜΜΜΜΜ333333ΓΜΜΜΜΜΜΜ3333333333333333333333333333ΓΜΜΜΜΜΜΜ333333ΓΜΜΜΜΜΜΜ333333Γ̈ˆˆˆΘΜ333333ΓΜΜΜΜΜΜΜ333333ΓΜΜΜΜΜΜΜ333333ΓΜΜΜΜΜΜΜ333333ΓΜΜΜΜΜΜΜ3333333333333333333333333333ΓΜΜΜΜΜΜΜ333333ΓΜΜΜΜΜΜΜ333333ΓΜ̈ˆΘΜΜ333333ΓΜΜΜΜΜΜΜ333333ΓΜΜΜΜΜΜΜ333333ΓΜΜΜΜΜΜΜ333333ΓΜΜΜΜΜΜΜ3333333333333333333333333333ΓΜΜΜΜΜΜΜ333333ΓΜΜΜΜΜΜΜ333333ΓΜΜΜΜΜΜΜ333333ΓΜΜΜΜΜΜΜ333333ΓΜΜΜΜΜΜΜ333333ΓΜΜΜΜΜΜΜ333333ΓΜΜΜΜΜΜΜ33333333333333333333333333333ΜΜΜΜΜΜ<3333333ΜΜΜΜΜΜ<3333333ΜΜΜΜΜΜ<3333333ΜΜΜΜΜΜ<3333333ΜΜΜΜΜΜ<3333333ΜΜΜΜΜΜ<3333333ΜΜΜΜΜΜ<33333333333333333333333333333ΜΜΜΜΜΜ<3333333ΜΜΜΜΜΜ<3333333ΜΜΜΜΜΜ<3333333ΜΜΜΜΜΜ<3333333ΜΜΜΜΜΜ<3333333ΜΜΜΜΜΜ<3333333ΜΜΜΜΜΜ<33333333333333333333333333333ΓΜΜΜΜΜ33333333ΓΜΜΜΜΜ33333333ΓΜΜΜΜΜ33333333ΓΜΜΜΜΜ33333333ΓΜΜΜΜΜ33333333ΓΜΜΜΜΜ33333333ΓΜΜΜΜΜ3333333333333333333333333333333ΜΜΜΜ<333333333ΜΜΜΜ<333333333ΜΜΜΜ<333333333ΜΜΜΜ<333333333ΜΜΜΜ<333333333ΜΜΜΜ<333333333ΜΜΜΜ<33333333333333333333333333333333ΜΜ<33333333333ΜΜ<33333333333ΜΜ<33333333333ΜΜ<33333333333ΜΜ<33333333333ΜΜ<33333333333ΜΜ<333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333ΜΜ<33333333333ΜΜ<33333333333ΜΜ<33333333333ΜΜ<33333333333ΜΜ<33333333333ΜΜ<33333333333ΜΜ<33333333333333333333333333333333ΜΜΜΜ<333333333ΜΜΜΜ<333333333ΜΜΜΜ<333333333ΜΜΜΜ<333333333ΜΜΜΜ<333333333ΜΜΜΜ<333333333ΜΜΜΜ<333333333333333333333333333333ΓΜΜΜΜΜ33333333ΓΜΜΜΜΜ33333333ΓΜΜΜΜΜ33333333ΓΜΜΜΜΜ33333333ΓΜΜΜΜΜ33333333ΓΜΜΜΜΜ33333333ΓΜΜΜΜΜ333333333333333333333333333333ΜΜΜΜΜΜ<3333333ΜΜΜΜΜΜ<3333333ΜΜΜΜΜΜ<3333333ΜΜΜΜΜΜ<3333333ΜΜΜΜΜΜ<3333333ΜΜΜΜΜΜ<3333333ΜΜΜΜΜΜ<33333333333333333333333333333ΜΜΜΜΜΜ<3333333ΜΜΜΜΜΜ<3333333ΜΜΜΜΜΜ<3333333ΜΜΜΜΜΜ<3333333ΜΜΜΜΜΜ<3333333ΜΜΜΜΜΜ<3333333ΜΜΜΜΜΜ<3333333333333333333333333333ΓΜΜΜΜΜΜΜ333333ΓΜΜΜΜΜΜΜ333333ΓΜΜΜΜΜΜΜ333333ΓΜΜΜΜΜΜΜ333333ΓΜΜΜΜΜΜΜ333333ΓΜΜΜΜΜΜΜ333333ΓΜΜΜΜΜΜΜ3333333333333333333333333333ΓΜΜΜΜΜΜΜ333333ΓΜΜΜΜΜΜΜ333333ΓΜΜΜΜΜΜΜ333333ΓΜΜΜΜΜΜΜ333333ΓΜΜΜΜΜΜΜ333333ΓΜΜΜΜΜΜΜ333333ΓΜΜΜΜΜΜΜ3333333333333333333333333333ΓΜΜΜΜΜΜΜ333333ΓΜΜΜΜΜΜΜ333333ΓΜΜΜΜΜΜΜ333333ΓΜΜΜΜΜΜΜ333333ΓΜΜΜΜΜΜΜ333333ΓΜΜΜΜΜΜΜ333333ΓΜΜΜΜΜΜΜ3333333333333333333333333333ΓΜΜΜΜΜΜΜ333333ΓΜΜΜΜΜΜΜ333333ΓΜΜΜΜΜΜΜ333333ΓΜΜΜΜΜΜΜ333333ΓΜΜΜΜΜΜΜ333333ΓΜΜΜΜΜΜΜ333333ΓΜΜΜΜΜΜΜ3333333333333333333333333333ΓΜΜΜΜΜΜΜ333333ΓΜΜΜΜΜΜΜ333333ΓΜΜΜΜΜΜΜ333333ΓΜΜΜΜΜΜΜ333333ΓΜΜΜΜΜΜΜ333333ΓΜΜΜΜΜΜΜ333333ΓΜΜΜΜΜΜΜ33333333333333333333333333333ΜΜΜΜΜΜ<3333333ΜΜΜΜΜΜ<3333333ΜΜΜΜΜΜ<3333333ΜΜΜΜΜΜ<3333333ΜΜΜΜΜΜ<3333333ΜΜΜΜΜΜ<3333333ΜΜΜΜΜΜ<33333333333333333333333333333ΜΜΜΜΜΜ<3333333ΜΜΜΜΜΜ<3333333ΜΜΜΜΜΜ<3333333ΜΜΜΜΜΜ<3333333ΜΜΜΜΜΜ<3333333ΜΜΜΜΜΜ<3333333ΜΜΜΜΜΜ<33333333333333333333333333333ΓΜΜΜΜΜ33333333ΓΜΜΜΜΜ33333333ΓΜΜΜΜΜ33333333ΓΜΜΜΜΜ33333333ΓΜΜΜΜΜ33333333ΓΜΜΜΜΜ33333333ΓΜΜΜΜΜ3333333333333333333333333333333ΜΜΜΜ<333333333ΜΜΜΜ<333333333ΜΜΜΜ<333333333ΜΜΜΜ<333333333ΜΜΜΜ<333333333ΜΜΜΜ<333333333ΜΜΜΜ<33333333333333333333333333333333ΜΜ<33333333333ΜΜ<33333333333ΜΜ<33333333333ΜΜ<33333333333ΜΜ<33333333333ΜΜ<33333333333ΜΜ<333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333ΜΜ<33333333333ΜΜ<33333333333ΜΜ<33333333333ΜΜ<33333333333ΜΜ<33333333333ΜΜ<33333333333ΜΜ<33333333333333333333333333333333ΜΜΜΜ<333333333ΜΜΜΜ<333333333ΜΜΜΜ<333333333ΜΜΜΜ<333333333ΜΜΜΜ<333333333ΜΜΜΜ<333333333ΜΜΜΜ<333333333333333333333333333333ΓΜΜΜΜΜ33333333ΓΜΜΜΜΜ33333333ΓΜΜΜΜΜ33333333ΓΜΜΜΜΜ33333333ΓΜΜΜΜΜ33333333ΓΜΜΜΜΜ33333333ΓΜΜΜΜΜ333333333333333333333333333333ΜΜΜΜΜΜ<3333333ΜΜΜΜΜΜ<3333333ΜΜΜΜΜΜ<3333333ΜΜΜΜΜΜ<3333333ΜΜΜΜΜΜ<3333333ΜΜΜΜΜΜ<3333333ΜΜΜΜΜΜ<33333333333333333333333333333ΜΜΜΜΜΜ<3333333ΜΜΜΜΜΜ<3333333ΜΜΜΜΜΜ<3333333ΜΜΜΜΜΜ<3333333ΜΜΜΜΜΜ<3333333ΜΜΜΜΜΜ<3333333ΜΜΜΜΜΜ<3333333333333333333333333333ΓΜΜΜΜΜΜΜ333333ΓΜΜΜΜΜΜΜ333333ΓΜΜΜΜΜΜΜ333333ΓΜΜΜΜΜΜΜ333333ΓΜΜΜΜΜΜΜ333333ΓΜΜΜΜΜΜΜ333333ΓΜΜΜΜΜΜΜ3333333333333333333333333333ΓΜΜΜΜΜΜΜ333333ΓΜΜΜΜΜΜΜ333333ΓΜΜΜΜΜΜΜ333333ΓΜΜΜΜΜΜΜ333333ΓΜΜΜΜΜΜΜ333333ΓΜΜΜΜΜΜΜ333333ΓΜΜΜΜΜΜΜ3333333333333333333333333333ΓΜΜΜΜΜΜΜ333333ΓΜΜΜΜΜΜΜ333333ΓΜΜΜΜΜΜΜ333333ΓΜΜΜΜΜΜΜ333333ΓΜΜΜΜΜΜΜ333333ΓΜΜΜΜΜΜΜ333333ΓΜΜΜΜΜΜΜ3333333333333333333333333333ΓΜΜΜΜΜΜΜ333333ΓΜΜΜΜΜΜΜ333333ΓΜΜΜΜΜΜΜ333333ΓΜΜΜΜΜΜΜ333333ΓΜΜΜΜΜΜΜ333333ΓΜΜΜΜΜΜΜ333333ΓΜΜΜΜΜΜΜ3333333333333333333333333333ΓΜΜΜΜΜΜΜ333333ΓΜΜΜΜΜΜΜ333333ΓΜΜΜΜΜΜΜ333333ΓΜΜΜΜΜΜΜ333333ΓΜΜΜΜΜΜΜ333333ΓΜΜΜΜΜΜΜ333333ΓΜΜΜΜΜΜΜ33333333333333333333333333333ΜΜΜΜΜΜ<3333333ΜΜΜΜΜΜ<3333333ΜΜΜΜΜΜ<3333333ΜΜΜΜΜΜ<3333333ΜΜΜΜΜΜ<3333333ΜΜΜΜΜΜ<3333333ΜΜΜΜΜΜ<33333333333333333333333333333ΜΜΜΜΜΜ<3333333ΜΜΜΜΜΜ<3333333ΜΜΜΜΜΜ<3333333ΜΜΜΜΜΜ<3333333ΜΜΜΜΜΜ<3333333ΜΜΜΜΜΜ<3333333ΜΜΜΜΜΜ<33333333333333333333333333333ΓΜΜΜΜΜ33333333ΓΜΜΜΜΜ33333333ΓΜΜΜΜΜ33333333ΓΜΜΜΜΜ33333333ΓΜΜΜΜΜ33333333ΓΜΜΜΜΜ33333333ΓΜΜΜΜΜ3333333333333333333333333333333ΜΜΜΜ<333333333ΜΜΜΜ<333333333ΜΜΜΜ<333333333ΜΜΜΜ<333333333ΜΜΜΜ<333333333ΜΜΜΜ<333333333ΜΜΜΜ<33333333333333333333333333333333ΜΜ<33333333333ΜΜ<33333333333ΜΜ<33333333333ΜΜ<33333333333ΜΜ<33333333333ΜΜ<33333333333ΜΜ<333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333ΜΜ<33333333333ΜΜ<33333333333ΜΜ<33333333333ΜΜ<33333333333ΜΜ<33333333333ΜΜ<33333333333ΜΜ<33333333333333333333333333333333ΜΜΜΜ<333333333ΜΜΜΜ<333333333ΜΜΜΜ<333333333ΜΜΜΜ<333333333ΜΜΜΜ<333333333ΜΜΜΜ<333333333ΜΜΜΜ<333333333333333333333333333333ΓΜΜΜΜΜ33333333ΓΜΜΜΜΜ33333333ΓΜΜΜΜΜ33333333ΓΜΜΜΜΜ33333333ΓΜΜΜΜΜ33333333ΓΜΜΜΜΜ33333333ΓΜΜΜΜΜ333333333333333333333333333333ΜΜΜΜΜΜ<3333333ΜΜΜΜΜΜ<3333333ΜΜΜΜΜΜ<3333333ΜΜΜΜΜΜ<3333333ΜΜΜΜΜΜ<3333333ΜΜΜΜΜΜ<3333333ΜΜΜΜΜΜ<33333333333333333333333333333ΜΜΜΜΜΜ<3333333ΜΜΜΜΜΜ<3333333ΜΜΜΜΜΜ<3333333ΜΜΜΜΜΜ<3333333ΜΜΜΜΜΜ<3333333ΜΜΜΜΜΜ<3333333ΜΜΜΜΜΜ<3333333333333333333333333333ΓΜΜΜΜΜΜΜ333333ΓΜΜΜΜΜΜΜ333333ΓΜΜΜΜΜΜΜ333333ΓΜΜΜΜΜΜΜ333333ΓΜΜΜΜΜΜΜ333333ΓΜΜΜΜΜΜΜ333333ΓΜΜΜΜΜΜΜ3333333333333333333333333333ΓΜΜΜΜΜΜΜ333333ΓΜΜΜΜΜΜΜ333333ΓΜΜΜΜΜΜΜ333333ΓΜΜΜΜΜΜΜ333333ΓΜΜΜΜΜΜΜ333333ΓΜΜΜΜΜΜΜ333333ΓΜΜΜΜΜΜΜ3333333333333333333333333333ΓΜΜΜΜΜΜΜ333333ΓΜΜΜΜΜΜΜ333333ΓΜΜΜΜΜΜΜ333333ΓΜΜΜΜΜΜΜ333333ΓΜΜΜΜΜΜΜ333333ΓΜΜΜΜΜΜΜ333333ΓΜΜΜΜΜΜΜ3333333333333333333333333333ΓΜΜΜΜΜΜΜ333333ΓΜΜΜΜΜΜΜ333333ΓΜΜΜΜΜΜΜ333333ΓΜΜΜΜΜΜΜ333333ΓΜΜΜΜΜΜΜ333333ΓΜΜΜΜΜΜΜ333333ΓΜΜΜΜΜΜΜ3333333333333333333333333333ΓΜΜΜΜΜΜΜ333333ΓΜΜΜΜΜΜΜ333333ΓΜΜΜΜΜΜΜ333333ΓΜΜΜΜΜΜΜ333333ΓΜΜΜΜΜΜΜ333333ΓΜΜΜΜΜΜΜ333333ΓΜΜΜΜΜΜΜ33333333333333333333333333333ΜΜΜΜΜΜ<3333333ΜΜΜΜΜΜ<3333333ΜΜΜΜΜΜ<3333333ΜΜΜΜΜΜ<3333333ΜΜΜΜΜΜ<3333333ΜΜΜΜΜΜ<3333333ΜΜΜΜΜΜ<33333333333333333333333333333ΜΜΜΜΜΜ<3333333ΜΜΜΜΜΜ<3333333ΜΜΜΜΜΜ<3333333ΜΜΜΜΜΜ<3333333ΜΜΜΜΜΜ<3333333ΜΜΜΜΜΜ<3333333ΜΜΜΜΜΜ<33333333333333333333333333333ΓΜΜΜΜΜ33333333ΓΜΜΜΜΜ33333333ΓΜΜΜΜΜ33333333ΓΜΜΜΜΜ33333333ΓΜΜΜΜΜ33333333ΓΜΜΜΜΜ33333333ΓΜΜΜΜΜ3333333333333333333333333333333ΜΜΜΜ<333333333ΜΜΜΜ<333333333ΜΜΜΜ<333333333ΜΜΜΜ<333333333ΜΜΜΜ<333333333ΜΜΜΜ<333333333ΜΜΜΜ<33333333333333333333333333333333ΜΜ<33333333333ΜΜ<33333333333ΜΜ<33333333333ΜΜ<33333333333ΜΜ<33333333333ΜΜ<33333333333ΜΜ<333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333ΜΜ<33333333333ΜΜ<33333333333ΜΜ<33333333333ΜΜ<33333333333ΜΜ<33333333333ΜΜ<33333333333ΜΜ<33333333333333333333333333333333ΜΜΜΜ<333333333ΜΜΜΜ<333333333ΜΜΜΜ<333333333ΜΜΜΜ<333333333ΜΜΜΜ<333333333ΜΜΜΜ<333333333ΜΜΜΜ<333333333333333333333333333333ΓΜΜΜΜΜ33333333ΓΜΜΜΜΜ33333333ΓΜΜΜΜΜ33333333ΓΜΜΜΜΜ33333333ΓΜΜΜΜΜ33333333ΓΜΜΜΜΜ33333333ΓΜΜΜΜΜ333333333333333333333333333333ΜΜΜΜΜΜ<3333333ΜΜΜΜΜΜ<3333333ΜΜΜΜΜΜ<3333333ΜΜΜΜΜΜ<3333333ΜΜΜΜΜΜ<3333333ΜΜΜΜΜΜ<3333333ΜΜΜΜΜΜ<33333333333333333333333333333ΜΜΜΜΜΜ<3333333ΜΜΜΜΜΜ<3333333ΜΜΜΜΜΜ<3333333ΜΜΜΜΜΜ<3333333ΜΜΜΜΜΜ<3333333ΜΜΜΜΜΜ<3333333ΜΜΜΜΜΜ<3333333333333333333333333333ΓΜΜΜΜΜΜΜ333333ΓΜΜΜΜΜΜΜ333333ΓΜΜΜΜΜΜΜ333333ΓΜΜΜΜΜΜΜ333333ΓΜΜΜΜΜΜΜ333333ΓΜΜΜΜΜΜΜ333333ΓΜΜΜΜΜΜΜ3333333333333333333333333333ΓΜΜΜΜΜΜΜ333333ΓΜΜΜΜΜΜΜ333333ΓΜΜΜΜΜΜΜ333333ΓΜΜΜΜΜΜΜ333333ΓΜΜΜΜΜΜΜ333333ΓΜΜΜΜΜΜΜ333333ΓΜΜΜΜΜΜΜ3333333333333333333333333333ΓΜΜΜΜΜΜΜ333333ΓΜΜΜΜΜΜΜ333333ΓΜΜΜΜΜΜΜ333333ΓΜΜΜΜΜΜΜ333333ΓΜΜΜΜΜΜΜ333333ΓΜΜΜΜΜΜΜ333333ΓΜΜΜΜΜΜΜ3333333333333333333333333333ΓΜΜΜΜΜΜΜ333333ΓΜΜΜΜΜΜΜ333333ΓΜΜΜΜΜΜΜ333333ΓΜΜΜΜΜΜΜ333333ΓΜΜΜΜΜΜΜ333333ΓΜΜΜΜΜΜΜ333333ΓΜΜΜΜΜΜΜ3333333333333333333333333333ΓΜΜΜΜΜΜΜ333333ΓΜΜΜΜΜΜΜ333333ΓΜΜΜΜΜΜΜ333333ΓΜΜΜΜΜΜΜ333333ΓΜΜΜΜΜΜΜ333333ΓΜΜΜΜΜΜΜ333333ΓΜΜΜΜΜΜΜ33333333333333333333333333333ΜΜΜΜΜΜ<3333333ΜΜΜΜΜΜ<3333333ΜΜΜΜΜΜ<3333333ΜΜΜΜΜΜ<3333333ΜΜΜΜΜΜ<3333333ΜΜΜΜΜΜ<3333333ΜΜΜΜΜΜ<33333333333333333333333333333ΜΜΜΜΜΜ<3333333ΜΜΜΜΜΜ<3333333ΜΜΜΜΜΜ<3333333ΜΜΜΜΜΜ<3333333ΜΜΜΜΜΜ<3333333ΜΜΜΜΜΜ<3333333ΜΜΜΜΜΜ<33333333333333333333333333333ΓΜΜΜΜΜ33333333ΓΜΜΜΜΜ33333333ΓΜΜΜΜΜ33333333ΓΜΜΜΜΜ33333333ΓΜΜΜΜΜ33333333ΓΜΜΜΜΜ33333333ΓΜΜΜΜΜ3333333333333333333333333333333ΜΜΜΜ<333333333ΜΜΜΜ<333333333ΜΜΜΜ<333333333ΜΜΜΜ<333333333ΜΜΜΜ<333333333ΜΜΜΜ<333333333ΜΜΜΜ<33333333333333333333333333333333ΜΜ<33333333333ΜΜ<33333333333ΜΜ<33333333333ΜΜ<33333333333ΜΜ<33333333333ΜΜ<33333333333ΜΜ<333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333ΜΜ<33333333333ΜΜ<33333333333ΜΜ<33333333333ΜΜ<33333333333ΜΜ<33333333333ΜΜ<33333333333ΜΜ<33333333333333333333333333333333ΜΜΜΜ<333333333ΜΜΜΜ<333333333ΜΜΜΜ<333333333ΜΜΜΜ<333333333ΜΜΜΜ<333333333ΜΜΜΜ<333333333ΜΜΜΜ<333333333333333333333333333333ΓΜΜΜΜΜ33333333ΓΜΜΜΜΜ33333333ΓΜΜΜΜΜ33333333ΓΜΜΜΜΜ33333333ΓΜΜΜΜΜ33333333ΓΜΜΜΜΜ33333333ΓΜΜΜΜΜ333333333333333333333333333333ΜΜΜΜΜΜ<3333333ΜΜΜΜΜΜ<3333333ΜΜΜΜΜΜ<3333333ΜΜΜΜΜΜ<3333333ΜΜΜΜΜΜ<3333333ΜΜΜΜΜΜ<3333333ΜΜΜΜΜΜ<33333333333333333333333333333ΜΜΜΜΜΜ<3333333ΜΜΜΜΜΜ<3333333ΜΜΜΜΜΜ<3333333ΜΜΜΜΜΜ<3333333ΜΜΜΜΜΜ<3333333ΜΜΜΜΜΜ<3333333ΜΜΜΜΜΜ<3333333333333333333333333333ΓΜΜΜΜΜΜΜ333333ΓΜΜΜΜΜΜΜ333333ΓΜΜΜΜΜΜΜ333333ΓΜΜΜΜΜΜΜ333333ΓΜΜΜΜΜΜΜ333333ΓΜΜΜΜΜΜΜ333333ΓΜΜΜΜΜΜΜ3333333333333333333333333333ΓΜΜΜΜΜΜΜ333333ΓΜΜΜΜΜΜΜ333333ΓΜΜΜΜΜΜΜ333333ΓΜΜΜΜΜΜΜ333333ΓΜΜΜΜΜΜΜ333333ΓΜΜΜΜΜΜΜ333333ΓΜΜΜΜΜΜΜ3333333333333333333333333333ΓΜΜΜΜΜΜΜ333333ΓΜΜΜΜΜΜΜ333333ΓΜΜΜΜΜΜΜ333333ΓΜΜΜΜΜΜΜ333333ΓΜΜΜΜΜΜΜ333333ΓΜΜΜΜΜΜΜ333333ΓΜΜΜΜΜΜΜ3333333333333333333333333333ΓΜΜΜΜΜΜΜ333333ΓΜΜΜΜΜΜΜ333333ΓΜΜΜΜΜΜΜ333333ΓΜΜΜΜΜΜΜ333333ΓΜΜΜΜΜΜΜ333333ΓΜΜΜΜΜΜΜ333333ΓΜΜΜΜΜΜΜ3333333333333333333333333333ΓΜΜΜΜΜΜΜ333333ΓΜΜΜΜΜΜΜ333333ΓΜΜΜΜΜΜΜ333333ΓΜΜΜΜΜΜΜ333333ΓΜΜΜΜΜΜΜ333333ΓΜΜΜΜΜΜΜ333333ΓΜΜΜΜΜΜΜ33333333333333333333333333333ΜΜΜΜΜΜ<3333333ΜΜΜΜΜΜ<3333333ΜΜΜΜΜΜ<3333333ΜΜΜΜΜΜ<3333333ΜΜΜΜΜΜ<3333333ΜΜΜΜΜΜ<3333333ΜΜΜΜΜΜ<33333333333333333333333333333ΜΜΜΜΜΜ<3333333ΜΜΜΜΜΜ<3333333ΜΜΜΜΜΜ<3333333ΜΜΜΜΜΜ<3333333ΜΜΜΜΜΜ<3333333ΜΜΜΜΜΜ<3333333ΜΜΜΜΜΜ<33333333333333333333333333333ΓΜΜΜΜΜ33333333ΓΜΜΜΜΜ33333333ΓΜΜΜΜΜ33333333ΓΜΜΜΜΜ33333333ΓΜΜΜΜΜ33333333ΓΜΜΜΜΜ33333333ΓΜΜΜΜΜ3333333333333333333333333333333ΜΜΜΜ<333333333ΜΜΜΜ<333333333ΜΜΜΜ<333333333ΜΜΜΜ<333333333ΜΜΜΜ<333333333ΜΜΜΜ<333333333ΜΜΜΜ<33333333333333333333333333333333ΜΜ<33333333333ΜΜ<33333333333ΜΜ<33333333333ΜΜ<33333333333ΜΜ<33333333333ΜΜ<33333333333ΜΜ<333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333)-- title: Connect 4 with advice -- author: alexdelarge75nl -- desc: First cartridge -- script: lua -- Board dimensions (columns x rows) WIDTH = 7 HEIGHT = 6 -- Game state -- board is stored column-first: board[col][row] -- row 0 is the bottom row (pieces "drop" into row 0 first) board = {} turn = 1 -- current player: 1 or 2 cursor = 3 -- selected column (0-indexed) game_over = false message = "" frame = 0 -- frame counter for animations -- Initialize or reset the board and game state function reset() board = {} for c=0,WIDTH-1 do board[c] = {} for r=0,HEIGHT-1 do board[c][r] = 0 -- 0 = empty, 1 = player1, 2 = player2 end end turn = 1 cursor = 3 game_over = false message = "" frame = 0 -- reset animation frame counter end reset() -- start with a fresh board -- ---------- CORE GAME LOGIC ---------- -- drop(col, player) -- Places `player` in the lowest empty cell of column `col`. -- Returns the row index where the piece landed, or nil if the column is full. function drop(col, player) for r=0,HEIGHT-1 do if board[col][r] == 0 then board[col][r] = player return r end end return nil end -- column_full(col) -- Returns true if the top cell of `col` is occupied (i.e., column can't accept more pieces). function column_full(col) return board[col][HEIGHT-1] ~= 0 end -- check_dir(c, r, dc, dr, p) -- Checks 4 consecutive cells starting at (c,r) stepping by (dc,dr). -- Returns true only if all four are inside the board and belong to player `p`. function check_dir(c,r,dc,dr,p) for i=0,3 do local cc = c + dc*i local rr = r + dr*i if cc<0 or cc>=WIDTH or rr<0 or rr>=HEIGHT then return false end if board[cc][rr] ~= p then return false end end return true end -- check_win(p) -- Scans the entire board for any 4-in-a-row belonging to player `p`. -- Uses check_dir in four directions: right, up, up-right, down-right. function check_win(p) for c=0,WIDTH-1 do for r=0,HEIGHT-1 do if board[c][r] == p then if check_dir(c,r,1,0,p) then return true end -- horizontal if check_dir(c,r,0,1,p) then return true end -- vertical if check_dir(c,r,1,1,p) then return true end -- diagonal up-right if check_dir(c,r,1,-1,p) then return true end -- diagonal down-right end end end return false end -- ---------- ADVICE ENGINE (DIDACTIC) ---------- -- winning_move(col, player) -- Simulates dropping a piece into `col` for `player`, checks if it wins, then undoes the move. -- Returns true if that move would produce a win. function winning_move(col, player) if column_full(col) then return false end local r = drop(col, player) local win = check_win(player) board[col][r] = 0 -- undo the simulated drop return win end -- advise() -- Heuristic advice for the current player (`turn`): -- 1) If a winning move exists, return it and label "WIN NOW" (highest priority) -- 2) If the opponent can win next turn, return a blocking move and label "BLOCK LOSS" -- 3) Prefer the center column if available (good strategic default) -- Returns column, text label, and color index (used for drawing the overlay) function advise() -- 1. win now for c=0,WIDTH-1 do if winning_move(c, turn) then return c, "WIN!", 11 end end -- 2. block opponent local opp = 3 - turn -- opponent player (if turn is 1 -> 2, if 2 -> 1) for c=0,WIDTH-1 do if winning_move(c, opp) then return c, "BLOKKEER!", 10 end end -- 3. center preference --if not column_full(3) then --- return 3, "VUL MIDDEN", 9 --end -- no strong recommendation return nil, "", 0 end -- ---------- DRAWING ---------- -- draw_board() -- Renders the board, pieces, and current cursor. function draw_board() cls(2) -- clear screen (dark blue) rect(0,0,240,136,3) -- background rectangle for c=0,WIDTH-1 do for r=0,HEIGHT-1 do local x = 20 + c*28 local y = 110 - r*18 -- draw from bottom up so row 0 sits on the bottom circ(x,y,7,12) -- hole/background circle if board[c][r] == 1 then circ(x,y,6,8) -- player 1 piece (inner circle) elseif board[c][r] == 2 then circ(x,y,6,2) -- player 2 piece end end end -- draw the cursor as a circle above the selected column (current player color) local ccx = 20 + cursor*28 local ccy = 14 circ(ccx, ccy, 7, turn==1 and 8 or 2) end -- ---------- TIC LOOP ---------- -- TIC() is called every frame by TIC-80. Handles input, game state updates, and drawing. function TIC() -- advance animation frame counter frame = frame + 1 -- handle left/right input to move the cursor if btnp(2) then cursor = math.max(0,cursor-1) end if btnp(3) then cursor = math.min(WIDTH-1,cursor+1) end -- handle drop input (Z button). Only allowed if game isn't over. if btnp(4) and not game_over then if not column_full(cursor) then drop(cursor, turn) -- place piece if check_win(turn) then game_over = true message = "SPELER "..turn.." WINT!" -- announce winner else turn = 3 - turn -- switch player end end end -- reset game when the reset button is pressed if btnp(5) then reset() end -- draw current board and UI draw_board() -- advice overlay: show recommended column and text when game is active if not game_over then local col,txt,colr = advise() if col then -- animated pulsing downward-pointing arrow above the recommended column (red) local cx = 20 + col*28 -- center x aligns with piece positions -- slower pulse and bob for a calmer animation local pulse = 1 + 0.18 * math.sin(frame * 0.06) -- slower pulse local half_w = math.max(1, math.floor(6 * pulse + 0.5)) local tip_y_base = 8 -- moved higher than before local bob = math.floor(2 * math.sin(frame * 0.08)) -- slower bob local tip_y = tip_y_base + bob local top_y = tip_y - math.floor(6 * pulse + 0.5) -- draw subtle white outline behind the black arrow for contrast local outline_w = half_w + 1 local outline_top_y = top_y - 1 tri(cx, tip_y, cx - outline_w, outline_top_y, cx + outline_w, outline_top_y, 15) -- white outline tri(cx, tip_y, cx - half_w, top_y, cx + half_w, top_y, 0) -- color 0 = black -- center the advice text horizontally and place it just below the bottom row local tx = math.max(0, math.floor((240 - (#txt * 6)) / 2)) local ty = 122 -- nudged a few pixels lower for clearer separation from pieces print(txt, tx, ty, 15) -- color 15 = white end end -- display any end-of-game message if message ~= "" then print(message,70,122,15) end end