<?php
class field{
public $size = 8 ;
public $cat = 2 ;
public $mouse = 15 ;
public $animals = array ( ) ; public static
$field = array ( ) ; public $record = array ( ) ;
function create_field( ) {
for ( $i = 0 ; $i < $this -> size ;++ $i ) {
for ( $b = 0 ; $b < $this -> size ;++ $b ) {
$arr [ ] = "." ;
}
$this -> field [ ] = $arr ;
}
}
function add_animals( ) {
for ( $i = 1 ; $i <= $this -> cat + $this -> mouse ;++ $i ) {
$animal_name = $i > $this -> cat ?"mouse" : "cat" ;
$animal = new $animal_name ;
do {
} while (
$this -> field [ $xy [ 1 ] ] [ $xy [ 0 ] ] !== "."
) ;
$animal -> xy = $xy ;
$this -> field [ $xy [ 1 ] ] [ $xy [ 0 ] ] = $i > $this -> cat ?"M" : "C" ;
$this -> animals [ ] = $animal ;
}
$this -> record [ ] = $this -> field ;
}
function move( $num ) {
for ( $q = 0 ; $q < $num ;++ $q ) {
foreach ( $this -> animals as $obj ) {
$moves = $this -> possible_moves ( $obj , "mouse" ) ;
$mouse_sight_zones = array ( array ( - 3 ,- 3 , 7 , 3 , array ( 0 ,- 1 ) ) , array ( 1 ,- 3 , 3 , 7 , array ( 1 , 0 ) ) , array ( - 3 , 1 , 7 , 3 , array ( 0 , 1 ) ) , array ( - 3 ,- 3 , 3 , 7 , array ( - 1 , 0 ) ) ) ;
foreach ( $mouse_sight_zones as $arr ) {
for ( $y = 0 ; $y < $arr [ 3 ] ;++ $y ) {
for ( $x = 0 ; $x < $arr [ 2 ] ;++ $x ) {
if ( $this -> field [ ( $obj -> xy [ 1 ] + $y + $arr [ 1 ] ) ] [ ( $obj -> xy [ 0 ] + $x + $arr [ 0 ] ) ] == "C" ) {
$direction = $arr [ 4 ] ;
$danger_zones [ ] = $direction ;
}
}
}
}
}
$moves = $this -> my_array_diff ( $moves , $danger_zones ) ;
$this -> field [ $obj -> xy [ 1 ] ] [ $obj -> xy [ 0 ] ] = "." ;
$obj -> xy [ 0 ] += $move [ 0 ] ;
$obj -> xy [ 1 ] += $move [ 1 ] ;
$this -> field [ $obj -> xy [ 1 ] ] [ $obj -> xy [ 0 ] ] = "M" ;
}
}
foreach ( $this -> animals as $obj ) {
continue ;
}
$moves = $this -> possible_moves ( $obj , "cat" ) ;
$cat_sight_zones = array ( array ( - $this -> size ,- $this -> size , ( ( $this -> size ) * 2 ) + 1 , $this -> size , array ( 0 ,- 1 ) ) , array ( 1 ,- $this -> size , $this -> size , ( ( $this -> size ) * 2 ) + 1 , array ( 1 , 0 ) ) , array ( - $this -> size , 1 , ( ( $this -> size ) * 2 ) + 1 , $this -> size , array ( 0 , 1 ) ) , array ( - $this -> size ,- $this -> size , $this -> size , ( ( $this -> size ) * 2 ) + 1 , array ( - 1 , 0 ) ) ) ;
foreach ( $cat_sight_zones as $arr ) {
for ( $y = 0 ; $y < $arr [ 3 ] ;++ $y ) {
for ( $x = 0 ; $x < $arr [ 2 ] ;++ $x ) {
if ( $this -> field [ ( $obj -> xy [ 1 ] + $y + $arr [ 1 ] ) ] [ ( $obj -> xy [ 0 ] + $x + $arr [ 0 ] ) ] == "M" ) {
$direction = $arr [ 4 ] ;
$wanted_zones [ ] = $direction ;
}
}
}
}
}
$moves = $this -> my_array_match ( $moves , $wanted_zones ) ;
$this -> field [ $obj -> xy [ 1 ] ] [ $obj -> xy [ 0 ] ] = "." ;
$obj -> xy [ 0 ] += $move [ 0 ] ;
$obj -> xy [ 1 ] += $move [ 1 ] ;
$xxx = $obj -> xy [ 0 ] ;
$yyy = $obj -> xy [ 1 ] ;
$this -> field [ $obj -> xy [ 1 ] ] [ $obj -> xy [ 0 ] ] = "C" ;
$sleep = FALSE ;
$unset_counter = 0 ;
foreach ( $this -> animals as $obj2 ) {
if ( $obj2 -> xy == array ( $xxx , $yyy ) ) { unset ( $this -> animals [ $unset_counter ] ) ; $this -> field [ $obj2 -> xy [ 1 ] ] [ $obj2 -> xy [ 0 ] ] = "@" ;
}
}
$unset_counter ++;
}
}
}
$this -> record [ ] = $this -> field ;
}
}
function possible_moves( $obj , $animal ) {
switch ( $animal ) {
case "mouse" :
foreach ( $possible_moves as $arr ) {
if ( isset ( $this -> field [ $obj -> xy [ 1 ] + $arr [ 1 ] ] [ $obj -> xy [ 0 ] + $arr [ 0 ] ] ) and
$this -> field [ $obj -> xy [ 1 ] + $arr [ 1 ] ] [ $obj -> xy [ 0 ] + $arr [ 0 ] ] == "." ) { $moves [ ] = $arr ;
}
}
break ;
case "cat" :
$possible_moves = array ( array ( 1 , 0 ) , array ( 0 , 1 ) , array ( - 1 , 0 ) , array ( 0 ,- 1 ) , array ( 1 , 1 ) , array ( 1 ,- 1 ) , array ( - 1 , 1 ) , array ( - 1 ,- 1 ) ) ; foreach ( $possible_moves as $arr ) {
if ( isset ( $this -> field [ $obj -> xy [ 1 ] + $arr [ 1 ] ] [ $obj -> xy [ 0 ] + $arr [ 0 ] ] ) and
( $this -> field [ $obj -> xy [ 1 ] + $arr [ 1 ] ] [ $obj -> xy [ 0 ] + $arr [ 0 ] ] == "." or
$this -> field [ $obj -> xy [ 1 ] + $arr [ 1 ] ] [ $obj -> xy [ 0 ] + $arr [ 0 ] ] == "M" ) ) { $moves [ ] = $arr ;
}
}
break ;
}
return $moves ;
}
function my_array_diff( $moves , $danger_zones ) {
for ( $x = 0 ; $x <= count ( $moves ) ;++ $x ) { foreach ( $danger_zones as $arr ) {
if ( $moves [ $x ] == $arr ) {
}
}
}
return $moves ;
}
function my_array_match( $moves , $wanted_zones ) {
for ( $x = 0 ; $x <= count ( $moves ) ;++ $x ) { foreach ( $wanted_zones as $arr ) {
if ( $moves [ $x ] == $arr ) {
$moves_temp [ ] = $moves [ $x ] ;
}
}
}
return $moves_temp ;
}
function show( ) {
echo "\r \n " ;
foreach ( $this -> record as $arr => $arr_2 ) {
foreach ( $arr_2 as $var => $var_3 ) {
echo "|" ;
foreach ( $var_3 as $var_4 ) {
echo "$var_4 |" ;
}
echo "\r \n " ;
}
echo "\r \n \r \n " ;
}
}
}
class cat extends field{
public $power = 8 ;
public $sleep = 2 ;
}
class mouse extends field{ }
$f = new field;
$f -> create_field ( ) ;
$f -> add_animals ( ) ;
$f -> move ( 23 ) ;
$f -> show ( ) ;
?>
PD9waHAKZXJyb3JfcmVwb3J0aW5nKDApOwoKY2xhc3MgZmllbGR7CglwdWJsaWMgJHNpemUgPSA4OwoJcHVibGljICRjYXQgPSAyOwoJcHVibGljICRtb3VzZSA9IDE1OwoJCglwdWJsaWMgJGFuaW1hbHMgPSBhcnJheSgpOwoJcHVibGljIHN0YXRpYyAkZmllbGQgPSBhcnJheSgpOwoJcHVibGljICR4eSA9IGFycmF5KCk7CglwdWJsaWMgJHJlY29yZCA9IGFycmF5KCk7CgkKCWZ1bmN0aW9uIGNyZWF0ZV9maWVsZCgpewoJCWZvcigkaT0wOyRpPCR0aGlzLT5zaXplOysrJGkpewoJCQkkYXJyID0gYXJyYXkoKTsKCQkJZm9yKCRiPTA7JGI8JHRoaXMtPnNpemU7KyskYil7CgkJCQkkYXJyW10gPSAiLiI7CgkJCX0KCQkJJHRoaXMtPmZpZWxkW10gPSAkYXJyOwoJCX0KCX0KCQoJZnVuY3Rpb24gYWRkX2FuaW1hbHMoKXsKCQlmb3IoJGk9MTskaTw9JHRoaXMtPmNhdCskdGhpcy0+bW91c2U7KyskaSl7CgkJCSRhbmltYWxfbmFtZSA9ICRpPiR0aGlzLT5jYXQ/Im1vdXNlIjoiY2F0IjsKCQkJJGFuaW1hbCA9IG5ldyAkYW5pbWFsX25hbWU7CgkJCQoJCQlkb3sKCQkJCSR4eSA9IGFycmF5KHJhbmQoMCwgJHRoaXMtPnNpemUpLCByYW5kKDAsICR0aGlzLT5zaXplKSk7CgkJCX13aGlsZSgKCQkJCSR0aGlzLT5maWVsZFskeHlbMV1dWyR4eVswXV0gIT09ICIuIgoJCQkpOwoJCQkkYW5pbWFsLT54eSA9ICR4eTsKCQkJJHRoaXMtPmZpZWxkWyR4eVsxXV1bJHh5WzBdXSA9ICRpPiR0aGlzLT5jYXQ/Ik0iOiJDIjsJCgkJCQoJCQkkdGhpcy0+YW5pbWFsc1tdID0gJGFuaW1hbDsKCQl9CgkJJHRoaXMtPnJlY29yZFtdID0gJHRoaXMtPmZpZWxkOwoJfQoJCglmdW5jdGlvbiBtb3ZlKCRudW0pewoJCWZvcigkcT0wOyRxPCRudW07KyskcSl7CgkJZm9yZWFjaCgkdGhpcy0+YW5pbWFscyBhcyAkb2JqKXsKCQkJaWYoZ2V0X2NsYXNzKCRvYmopID09ICJtb3VzZSIpewoJCQkJJG1vdmVzID0gJHRoaXMtPnBvc3NpYmxlX21vdmVzKCRvYmosICJtb3VzZSIpOwoJCQkJCQoJCQkJJG1vdXNlX3NpZ2h0X3pvbmVzID0gYXJyYXkoYXJyYXkoLTMsLTMsNywzLGFycmF5KDAsLTEpKSwgYXJyYXkoMSwtMywzLDcsYXJyYXkoMSwwKSksIGFycmF5KC0zLDEsNywzLGFycmF5KDAsMSkpLCBhcnJheSgtMywtMywzLDcsYXJyYXkoLTEsMCkpKTsKCQkJCSRkYW5nZXJfem9uZXMgPSBhcnJheSgpOwoJCQkJCQoJCQkJZm9yZWFjaCgkbW91c2Vfc2lnaHRfem9uZXMgYXMgJGFycil7CgkJCQkJZm9yKCR5PTA7JHk8JGFyclszXTsrKyR5KXsJCgkJCQkJCWZvcigkeD0wOyR4PCRhcnJbMl07KyskeCl7CgkJCQkJCQlpZigkdGhpcy0+ZmllbGRbKCRvYmotPnh5WzFdKyR5KyRhcnJbMV0pXVsoJG9iai0+eHlbMF0rJHgrJGFyclswXSldID09ICJDIil7CgkJCQkJCQkJJGRpcmVjdGlvbiA9ICRhcnJbNF07CgkJCQkJCQkJaWYoIWFycmF5X3NlYXJjaCgkYXJyLCAkZGFuZ2VyX3pvbmVzKSl7CgkJCQkJCQkJCSRkYW5nZXJfem9uZXNbXSA9ICRkaXJlY3Rpb247CgkJCQkJCQkJfQkJCQkJCQkJCQoJCQkJCQkJfQoJCQkJCQl9CgkJCQkJfQoJCQkJfQkJCgkJCQkJCgkJCQkkbW92ZXMgPSAkdGhpcy0+bXlfYXJyYXlfZGlmZigkbW92ZXMsICRkYW5nZXJfem9uZXMpOwoJCQkJCQoJCQkJJG1vdmUgPSAkbW92ZXNbYXJyYXlfcmFuZCgkbW92ZXMpXTsKCQkJCSR0aGlzLT5maWVsZFskb2JqLT54eVsxXV1bJG9iai0+eHlbMF1dID0gIi4iOwoJCQkJJG9iai0+eHlbMF0rPSRtb3ZlWzBdOwoJCQkJJG9iai0+eHlbMV0rPSRtb3ZlWzFdOwoJCQkJJHRoaXMtPmZpZWxkWyRvYmotPnh5WzFdXVskb2JqLT54eVswXV0gPSAiTSI7CgkJCX0JCgkJfQoJCWZvcmVhY2goJHRoaXMtPmFuaW1hbHMgYXMgJG9iail7CgkJCWlmKGdldF9jbGFzcygkb2JqKSA9PSAiY2F0Iil7CgkJCQlpZigkb2JqLT5zbGVlcCA9PSBUUlVFKXsKCQkJCQkkb2JqLT5zbGVlcCA9IEZBTFNFOwoJCQkJCWNvbnRpbnVlOwoJCQkJfQoKCQkJCSRtb3ZlcyA9ICR0aGlzLT5wb3NzaWJsZV9tb3Zlcygkb2JqLCAiY2F0Iik7CgkJCQkKCQkJCSRjYXRfc2lnaHRfem9uZXMgPSBhcnJheShhcnJheSgtJHRoaXMtPnNpemUsLSR0aGlzLT5zaXplLCgoJHRoaXMtPnNpemUpKjIpKzEsJHRoaXMtPnNpemUsYXJyYXkoMCwtMSkpLCBhcnJheSgxLC0kdGhpcy0+c2l6ZSwkdGhpcy0+c2l6ZSwoKCR0aGlzLT5zaXplKSoyKSsxLGFycmF5KDEsMCkpLCBhcnJheSgtJHRoaXMtPnNpemUsMSwoKCR0aGlzLT5zaXplKSoyKSsxLCR0aGlzLT5zaXplLGFycmF5KDAsMSkpLCBhcnJheSgtJHRoaXMtPnNpemUsLSR0aGlzLT5zaXplLCR0aGlzLT5zaXplLCgoJHRoaXMtPnNpemUpKjIpKzEsYXJyYXkoLTEsMCkpKTsKCQkJCSR3YW50ZWRfem9uZXMgPSBhcnJheSgpOwoJCQkJCgkJCQlmb3JlYWNoKCRjYXRfc2lnaHRfem9uZXMgYXMgJGFycil7CgkJCQkJZm9yKCR5PTA7JHk8JGFyclszXTsrKyR5KXsJCgkJCQkJCWZvcigkeD0wOyR4PCRhcnJbMl07KyskeCl7CgkJCQkJCQlpZigkdGhpcy0+ZmllbGRbKCRvYmotPnh5WzFdKyR5KyRhcnJbMV0pXVsoJG9iai0+eHlbMF0rJHgrJGFyclswXSldID09ICJNIil7CgkJCQkJCQkJJGRpcmVjdGlvbiA9ICRhcnJbNF07CgkJCQkJCQkJaWYoIWFycmF5X3NlYXJjaCgkYXJyLCAkd2FudGVkX3pvbmVzKSl7CgkJCQkJCQkJCSR3YW50ZWRfem9uZXNbXSA9ICRkaXJlY3Rpb247CgkJCQkJCQkJfQkJCQkJCQkJCQoJCQkJCQkJfQoJCQkJCQl9CgkJCQkJfQoJCQkJCSR3YW50ZWRfem9uZXNbXSA9ICgoaW5fYXJyYXkoYXJyYXkoMSwwKSwgJHdhbnRlZF96b25lcykpIGFuZCAoaW5fYXJyYXkoYXJyYXkoMCwxKSwgJHdhbnRlZF96b25lcykpKT9hcnJheSgxLDEpOiIiOwoJCQkJCSR3YW50ZWRfem9uZXNbXSA9ICgoaW5fYXJyYXkoYXJyYXkoLTEsMCksICR3YW50ZWRfem9uZXMpKSBhbmQgKGluX2FycmF5KGFycmF5KDAsMSksICR3YW50ZWRfem9uZXMpKSk/YXJyYXkoLTEsMSk6IiI7CgkJCQkJJHdhbnRlZF96b25lc1tdID0gKChpbl9hcnJheShhcnJheSgtMSwwKSwgJHdhbnRlZF96b25lcykpIGFuZCAoaW5fYXJyYXkoYXJyYXkoMCwtMSksICR3YW50ZWRfem9uZXMpKSk/YXJyYXkoLTEsLTEpOiIiOwoJCQkJCSR3YW50ZWRfem9uZXNbXSA9ICgoaW5fYXJyYXkoYXJyYXkoMSwwKSwgJHdhbnRlZF96b25lcykpIGFuZCAoaW5fYXJyYXkoYXJyYXkoMCwtMSksICR3YW50ZWRfem9uZXMpKSk/YXJyYXkoMSwtMSk6IiI7CgkJCQkJJHdhbnRlZF96b25lcyA9IGFycmF5X2ZpbHRlcigkd2FudGVkX3pvbmVzLGZ1bmN0aW9uKCRlbCl7IHJldHVybiAhZW1wdHkoJGVsKTt9KTsKCQkJCX0KCQkJCQoJCQkJJG1vdmVzID0gJHRoaXMtPm15X2FycmF5X21hdGNoKCRtb3ZlcywgJHdhbnRlZF96b25lcyk7CgkJCQkkbW92ZSA9ICRtb3Zlc1thcnJheV9yYW5kKCRtb3ZlcyldOwoJCQkKCQkJCSR0aGlzLT5maWVsZFskb2JqLT54eVsxXV1bJG9iai0+eHlbMF1dID0gIi4iOwoJCQkJJG9iai0+eHlbMF0rPSRtb3ZlWzBdOwoJCQkJJG9iai0+eHlbMV0rPSRtb3ZlWzFdOwoJCQkJJHh4eCA9ICRvYmotPnh5WzBdOwoJCQkJJHl5eSA9ICRvYmotPnh5WzFdOwoJCQkJJHRoaXMtPmZpZWxkWyRvYmotPnh5WzFdXVskb2JqLT54eVswXV0gPSAiQyI7CgkJCQkKCQkJCSRzbGVlcCA9IEZBTFNFOwoJCQkJJHVuc2V0X2NvdW50ZXIgPSAwOwoJCQkJCgkJCQlmb3JlYWNoKCR0aGlzLT5hbmltYWxzIGFzICRvYmoyKXsKCQkJCQlpZihnZXRfY2xhc3MoJG9iajIpID09ICJtb3VzZSIpewoJCQkJCQlpZigkb2JqMi0+eHk9PWFycmF5KCR4eHgsICR5eXkpKXsKCQkJCQkJCXVuc2V0KCR0aGlzLT5hbmltYWxzWyR1bnNldF9jb3VudGVyXSk7CgkJCQkJCQlzb3J0KCR0aGlzLT5hbmltYWxzKTsKCQkJCQkJCSR0aGlzLT5maWVsZFskb2JqMi0+eHlbMV1dWyRvYmoyLT54eVswXV0gPSAiQCI7CgkJCQkJCQkkb2JqLT5zbGVlcCA9IFRSVUU7CgkJCQkJCX0KCQkJCQl9CgkJCQkJJHVuc2V0X2NvdW50ZXIrKzsKCQkJCX0KCQkJfQoJCX0KCQkkdGhpcy0+cmVjb3JkW10gPSAkdGhpcy0+ZmllbGQ7CgkJfQoJfQoKCglmdW5jdGlvbiBwb3NzaWJsZV9tb3Zlcygkb2JqLCAkYW5pbWFsKXsKCQlzd2l0Y2goJGFuaW1hbCl7CgkJCWNhc2UgIm1vdXNlIjoKCQkJCSRwb3NzaWJsZV9tb3ZlcyA9IGFycmF5KGFycmF5KDEsMCksIGFycmF5KDAsMSksIGFycmF5KC0xLDApLCBhcnJheSgwLC0xKSk7CgkJCQkkbW92ZXMgPSBhcnJheSgpOwoJCQkJZm9yZWFjaCgkcG9zc2libGVfbW92ZXMgYXMgJGFycil7CgkJCQkJaWYoaXNzZXQoJHRoaXMtPmZpZWxkWyRvYmotPnh5WzFdKyRhcnJbMV1dWyRvYmotPnh5WzBdKyRhcnJbMF1dKSBhbmQgJHRoaXMtPmZpZWxkWyRvYmotPnh5WzFdKyRhcnJbMV1dWyRvYmotPnh5WzBdKyRhcnJbMF1dID09ICIuIil7CgkJCQkJCSRtb3Zlc1tdID0gJGFycjsKCQkJCQl9CgkJCQl9CgkJCQlicmVhazsKCQkJY2FzZSAiY2F0IjoKCQkJCSRwb3NzaWJsZV9tb3ZlcyA9IGFycmF5KGFycmF5KDEsMCksIGFycmF5KDAsMSksIGFycmF5KC0xLDApLCBhcnJheSgwLC0xKSwgYXJyYXkoMSwxKSwgYXJyYXkoMSwtMSksIGFycmF5KC0xLDEpLCBhcnJheSgtMSwtMSkpOwoJCQkJJG1vdmVzID0gYXJyYXkoKTsKCQkJCWZvcmVhY2goJHBvc3NpYmxlX21vdmVzIGFzICRhcnIpewoJCQkJCWlmKGlzc2V0KCR0aGlzLT5maWVsZFskb2JqLT54eVsxXSskYXJyWzFdXVskb2JqLT54eVswXSskYXJyWzBdXSkgYW5kICgkdGhpcy0+ZmllbGRbJG9iai0+eHlbMV0rJGFyclsxXV1bJG9iai0+eHlbMF0rJGFyclswXV0gPT0gIi4iIG9yICR0aGlzLT5maWVsZFskb2JqLT54eVsxXSskYXJyWzFdXVskb2JqLT54eVswXSskYXJyWzBdXSA9PSAiTSIpKXsKCQkJCQkJJG1vdmVzW10gPSAkYXJyOwoJCQkJCX0KCQkJCX0KCQkJCWJyZWFrOwoJCX0KCQlyZXR1cm4gJG1vdmVzOwoJfQoJCglmdW5jdGlvbiBteV9hcnJheV9kaWZmKCRtb3ZlcywgJGRhbmdlcl96b25lcyl7CgkJZm9yKCR4PTA7JHg8PWNvdW50KCRtb3Zlcyk7KyskeCl7CgkJCWZvcmVhY2goJGRhbmdlcl96b25lcyBhcyAkYXJyKXsKCQkJCWlmKCRtb3Zlc1skeF0gPT0gJGFycil7CgkJCQkJdW5zZXQoJG1vdmVzWyR4XSk7CgkJCQl9CgkJCX0KCQl9CgkJcmV0dXJuICRtb3ZlczsKCX0KCQoJZnVuY3Rpb24gbXlfYXJyYXlfbWF0Y2goJG1vdmVzLCAkd2FudGVkX3pvbmVzKXsKCQkkbW92ZXNfdGVtcCA9IGFycmF5KCk7CgkJZm9yKCR4PTA7JHg8PWNvdW50KCRtb3Zlcyk7KyskeCl7CgkJCWZvcmVhY2goJHdhbnRlZF96b25lcyBhcyAkYXJyKXsKCQkJCWlmKCRtb3Zlc1skeF0gPT0gJGFycil7CgkJCQkJJG1vdmVzX3RlbXBbXSA9ICRtb3Zlc1skeF07CgkJCQl9CgkJCX0KCQl9CgkJcmV0dXJuICRtb3Zlc190ZW1wOwoJfQoJCglmdW5jdGlvbiBzaG93KCl7CgkJZWNobyAiXHJcbiI7CgkJZm9yZWFjaCgkdGhpcy0+cmVjb3JkIGFzICRhcnI9PiRhcnJfMil7CgkJCWZvcmVhY2goJGFycl8yIGFzICR2YXI9PiR2YXJfMyl7CgkJCQllY2hvICJ8IjsKCQkJCWZvcmVhY2goJHZhcl8zIGFzICR2YXJfNCl7CgkJCQkJZWNobyAiJHZhcl80fCI7CgkJCQl9CgkJCQllY2hvICJcclxuIjsKCQkJfQoJCQllY2hvICJcclxuXHJcbiI7CgkJfQoJfQp9CgkKY2xhc3MgY2F0IGV4dGVuZHMgZmllbGR7CglwdWJsaWMgJHBvd2VyID0gODsKCXB1YmxpYyAkc2xlZXAgPSAyOwp9CmNsYXNzIG1vdXNlIGV4dGVuZHMgZmllbGR7fQoKJGYgPSBuZXcgZmllbGQ7CiRmLT5jcmVhdGVfZmllbGQoKTsKJGYtPmFkZF9hbmltYWxzKCk7CiRmLT5tb3ZlKDIzKTsKJGYtPnNob3coKTsKPz4=